-
Notifications
You must be signed in to change notification settings - Fork 3
feat: create BentoPod #11
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR introduces the new BentoPod Vue component along with Storybook stories showcasing its configurable states and content.
- Added a fully styled, collapsible
BentoPod.vuecomponent with expand/collapse logic and customizable labels. - Created
BentoPod.stories.jsto demonstrate the component with various item counts and real content.
Reviewed Changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 4 comments.
| File | Description |
|---|---|
| packages/vue-component-library/src/lib-components/BentoPod.vue | New Vue component providing a collapsible list (“Bento Pod”) layout |
| packages/vue-component-library/src/stories/BentoPod.stories.js | Storybook stories illustrating default, edge, and real-data cases |
Comments suppressed due to low confidence (2)
packages/vue-component-library/src/lib-components/BentoPod.vue:15
- [nitpick] The prop names 'labelOpen' and 'labelClose' are ambiguous; consider renaming them to 'collapseLabel' and 'expandLabel' (or similar) to more clearly convey when each label is shown.
labelOpen?: string
packages/vue-component-library/src/lib-components/BentoPod.vue:1
- There are no unit tests covering the expand/collapse behavior or edge cases (e.g., fewer than three items). Consider adding Jest/Vitest tests to validate dynamic height measurement and state toggling.
<script setup lang="ts">
| description: string | ||
| buttonLabel?: string | ||
| buttonLink?: string | ||
| items?: Array<{ |
Copilot
AI
Jul 15, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Items in props require a 'to' property, but story args do not include it, leading to undefined links. Consider making 'to' optional or updating the stories to include a valid to value for each item.
|
|
||
| <template> | ||
| <div :class="classes"> | ||
| <h4 class="title" v-html="title" v-if="title" /> |
Copilot
AI
Jul 15, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Rendering title and description with v-html can introduce XSS vulnerabilities if the content isn't sanitized. Consider using v-text or sanitizing input before binding.
| // Lifecycle Hooks | ||
| onMounted(() => { | ||
| measureHeights() | ||
| window.addEventListener("resize", measureHeights) |
Copilot
AI
Jul 15, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[nitpick] Listening to resize without throttling can trigger expensive layout recalculations rapidly. Consider debouncing measureHeights to reduce performance impact on window resize.
| <transition name="fade-label" mode="out-in"> | ||
| <span :key="dynamicLabel" class="label" v-html="dynamicLabel" /> | ||
| </transition> | ||
| <SvgArrowDown class="caret-icon" /> |
Copilot
AI
Jul 15, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
SVG icons inside interactive elements should include aria-hidden="true" or appropriate role/title attributes to ensure they are announced correctly (or hidden) for screen readers.
| <SvgArrowDown class="caret-icon" /> | |
| <SvgArrowDown class="caret-icon" aria-hidden="true" /> |
adjusts the titles on phones
- uses the commonly used mixins for fonts and transitions. - uses the dlc theme and provides it in the strories.
…oded data props - as discused
…fo rgrowing space and inpropper wrapping
* adds components list * Update COMPONENTS.md * Update COMPONENTS.md * Update COMPONENTS.md * Update COMPONENTS.md * adds notes * Update COMPONENTS.md * claimed component * Update COMPONENTS.md * claim a component * claim a component * Update COMPONENTS.md * Update COMPONENTS.md * Update COMPONENTS.md * take a component * take a component * take a component * Update COMPONENTS.md * Update COMPONENTS.md * Adjust the component name - already exists * take a component * take a component * Update COMPONENTS.md - marks footer as already existing * Update COMPONENTS.md * Update COMPONENTS.md * Update COMPONENTS.md * Update COMPONENTS.md - marking BentoPod * add component * add component * Update COMPONENTS.md * Update COMPONENTS.md * take a component * take a component * fix component description * Update COMPONENTS.md Component exists * Update COMPONENTS.md * change component's name * Update COMPONENTS.md Clean up the list somewhat - added a new component for the bento-box-result, as bento-bod is allready.a different component. - removed a footer component as it doesn't really exist. - added some checkboxes to taken/completed compoents * take a component * take a component * take a component * remove AssetFeaturedImage definition * take a component * take a components * take a components * take a component * take a component * add a new line * add detailed component description * add detailed component description * take a component * update component description * Adds a button component * Update COMPONENTS.md * Update COMPONENTS.md * Update COMPONENTS.md * Clean up components.md * Taking the block-collection component * Taking the grid-collections component as well. * Update COMPONENTS.md * Clean up component list * add spacing * add spacing * update component name * Update Button definition * Update COMPONENTS.md * Update COMPONENTS.md * Remove duplicates * remove duplicates * remove duplicates * Remove already existing components * take a component * add a component * Take a component * adjust prop for block anchor nav * take a component * Update COMPONENTS.md * Taking the DropdownSingleSelect * Take the ButtonDropdownSearch component * adding the correct packageMenager version for netlify to see. pnpm Netlify supports pnpm for Node.js 16.9.0 and later. If your site’s base directory includes a pnpm-lock.yaml file, we will run pnpm install to install the dependencies listed in your package.json. To specify a pnpm version, you can edit your package.json file: "packageManager": "pnpm@6.3.2" This tells Corepack to use and download your preferred pnpm version instead of the default version that Netlify sets. * Update COMPONENTS.md * Marking a component as taken * Remove packageManager field from package.json * Update component statuses and remove completed items Updated the status of various components to reflect their existence and removed existing components from the list. * Update COMPONENTS.md * Taking the FiltersDropdown * Update COMPONENTS.md * Add note regarding existing header component tweaks Added a note about existing similar functionality that requires tweaks. * Update RefineSearchPanel ownership in COMPONENTS.md * Update DetailMedia component owner to Svebor * Update component list * Clarify CTAHexButton entry in COMPONENTS.md * Update COMPONENTS.md to remove and modify components Removed BlockMediaViewer and updated BlockRichText entry. Adjusted completion status for DetailMedia. * Update component status and ownership in COMPONENTS.md * Update component ownership in COMPONENTS.md * Styles the component to fit the designs better, adds optional extra buttons for better design fit. * fix: lint error * prepare for PR * fix: the CI errors Error: HttpError: Resource not accessible by integration Error: Resource not accessible by integration * fix: removes the empty theme privders --------- Co-authored-by: dchiamp <derek.chiampas@gmail.com> Co-authored-by: Austin Blanchard <austinpdx@gmail.com> Co-authored-by: Luka Vuk <61590027+lux-v@users.noreply.github.com> Co-authored-by: Jess <jessica.divers@gmail.com>
# [@ucla-library-monorepo/ucla-library-website-components-v1.53.0](https://github.com/UCLALibrary/ucla-library-website-components/compare/@ucla-library-monorepo/ucla-library-website-components-v1.52.2...@ucla-library-monorepo/ucla-library-website-components-v1.53.0) (2025-11-19) ### Features * Adjust BannerFeatured for new designs. ([UCLALibrary#864](UCLALibrary#864)) ([c93a416](UCLALibrary@c93a416))
# [@ucla-library/component-library-nuxt-module-v1.2.110](https://github.com/UCLALibrary/ucla-library-website-components/compare/@ucla-library/component-library-nuxt-module-v1.2.109...@ucla-library/component-library-nuxt-module-v1.2.110) (2025-11-19)
Component Created: BentoPod.vue
Stories: ~/stories/BentoPod.stories.js
** Screenshots**


Checklist:
library-website-nuxt dev server