@ulu/frontend-vue 0.6.17 → 0.6.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -20,6 +20,62 @@
20
20
  }
21
21
  ],
22
22
  "useDocumentTitle": [],
23
+ "toast": [
24
+ {
25
+ "title": "Default",
26
+ "description": "Default variation",
27
+ "code": "<toast>Content</toast>"
28
+ }
29
+ ],
30
+ "useTooltipFollow": [
31
+ {
32
+ "title": "Default",
33
+ "description": "Default variation",
34
+ "code": "<useTooltipFollow>Content</useTooltipFollow>"
35
+ }
36
+ ],
37
+ "useTooltip": [],
38
+ "tooltip": [
39
+ {
40
+ "title": "Basic",
41
+ "description": "Basic variation",
42
+ "code": "<tooltip>This is a basic tooltip!</tooltip>"
43
+ }
44
+ ],
45
+ "UluPopover": [],
46
+ "useModals": [],
47
+ "modals": [
48
+ {
49
+ "title": "GlobalApiTest",
50
+ "description": "GlobalApiTest variation",
51
+ "code": "<modals>Content</modals>"
52
+ },
53
+ {
54
+ "title": "modals Example 1",
55
+ "description": "Code example extracted from markdown.",
56
+ "code": "<template>\n <UluModal>\n User setting modal…\n </UluModal>\n</template>"
57
+ },
58
+ {
59
+ "title": "modals Example 2",
60
+ "description": "Code example extracted from markdown.",
61
+ "code": "import { defineAsyncComponent } from \"vue\";\n\nexport default [\n {\n name: \"settings\",\n component: defineAsyncComponent(() => import('./components/modals/UserSettingsModal.vue')),\n }\n]"
62
+ },
63
+ {
64
+ "title": "modals Example 3",
65
+ "description": "Code example extracted from markdown.",
66
+ "code": "import UluModals from \"@ulu/frontend-vue/plugins/modals/index.js\";\nimport modals from \"./src/modals.js\";\n\n//...\n\napp.use(UluModals, { modals });"
67
+ },
68
+ {
69
+ "title": "modals Example 4",
70
+ "description": "Code example extracted from markdown.",
71
+ "code": "// Open a app-wide modal\nthis.$uluModals.open({ exampleProp: value });\n\n// Close app-wide modal \nthis.$uluModals.close();\n\n// Add modals after post-install\nthis.$uluModals.add({\n name: \"settings\",\n component: defineAsyncComponent(() => import('./components/modals/UserSettingsModal.vue')),\n});\n\n// Remove a modal from the registry\nthis.$uluModals.remove(\"settings\");\n\n// Get Modal from registry (not usually needed)\nconst settingsModal = this.$uluModals.get(\"settings\");\n// console.log(settingsModal.name) ==> \"settings\""
72
+ },
73
+ {
74
+ "title": "modals Example 5",
75
+ "description": "Code example extracted from markdown.",
76
+ "code": "<template>\n <button @click=\"showSettingsModal\">My Settings</button>\n</template>\n\n<script setup>\n import { useModals } from \"./useModals\";\n\n const modals = useModals();\n const showSettingsModal = () => {\n console.log(\"This is opening via uluModals composable\");\n modals.open(\"settings\");\n };\n</script>"
77
+ }
78
+ ],
23
79
  "UluProgressCircle": [],
24
80
  "UluProgressBar": [],
25
81
  "UluAnimateNumber": [],
@@ -63,10 +119,6 @@
63
119
  "code": "<UluAction href=\"{...}\" download>Content</UluAction>"
64
120
  }
65
121
  ],
66
- "UluWhenBreakpoint": [],
67
- "UluTitleRail": [],
68
- "UluDataGrid": [],
69
- "UluAdaptiveLayout": [],
70
122
  "UluSkipLink": [
71
123
  {
72
124
  "title": "Default",
@@ -139,6 +191,10 @@
139
191
  "code": "<UluBreadcrumb items=\"{...}\">Content</UluBreadcrumb>"
140
192
  }
141
193
  ],
194
+ "UluWhenBreakpoint": [],
195
+ "UluTitleRail": [],
196
+ "UluDataGrid": [],
197
+ "UluAdaptiveLayout": [],
142
198
  "UluSelectableMenu": [],
143
199
  "UluSearchForm": [],
144
200
  "UluFormTextarea": [],
@@ -155,6 +211,34 @@
155
211
  "UluFormActions": [],
156
212
  "UluForm": [],
157
213
  "UluFileDisplay": [],
214
+ "UluTabGroup": [
215
+ {
216
+ "title": "Default",
217
+ "description": "Default variation",
218
+ "code": "<UluTabGroup>Content</UluTabGroup>"
219
+ },
220
+ {
221
+ "title": "Vertical",
222
+ "description": "Vertical variation",
223
+ "code": "<UluTabGroup vertical>Content</UluTabGroup>"
224
+ },
225
+ {
226
+ "title": "DefaultIndex",
227
+ "description": "DefaultIndex variation",
228
+ "code": "<UluTabGroup :defaultIndex=\"2\">Content</UluTabGroup>"
229
+ },
230
+ {
231
+ "title": "FullWidth",
232
+ "description": "FullWidth variation",
233
+ "code": "<UluTabGroup modifiers=\"{...}\">Content</UluTabGroup>"
234
+ }
235
+ ],
236
+ "UluOverflowPopover": [],
237
+ "UluModal": [],
238
+ "UluDropdown": [],
239
+ "UluCollapsible": [],
240
+ "UluAccordionGroup": [],
241
+ "UluAccordion": [],
158
242
  "UluTag": [],
159
243
  "UluTable": [
160
244
  {
@@ -378,90 +462,6 @@
378
462
  }
379
463
  ],
380
464
  "UluAlert": [],
381
- "UluTabGroup": [
382
- {
383
- "title": "Default",
384
- "description": "Default variation",
385
- "code": "<UluTabGroup>Content</UluTabGroup>"
386
- },
387
- {
388
- "title": "Vertical",
389
- "description": "Vertical variation",
390
- "code": "<UluTabGroup vertical>Content</UluTabGroup>"
391
- },
392
- {
393
- "title": "DefaultIndex",
394
- "description": "DefaultIndex variation",
395
- "code": "<UluTabGroup :defaultIndex=\"2\">Content</UluTabGroup>"
396
- },
397
- {
398
- "title": "FullWidth",
399
- "description": "FullWidth variation",
400
- "code": "<UluTabGroup modifiers=\"{...}\">Content</UluTabGroup>"
401
- }
402
- ],
403
- "UluOverflowPopover": [],
404
- "UluModal": [],
405
- "UluDropdown": [],
406
- "UluCollapsible": [],
407
- "UluAccordionGroup": [],
408
- "UluAccordion": [],
409
- "toast": [
410
- {
411
- "title": "Default",
412
- "description": "Default variation",
413
- "code": "<toast>Content</toast>"
414
- }
415
- ],
416
- "useModals": [],
417
- "modals": [
418
- {
419
- "title": "GlobalApiTest",
420
- "description": "GlobalApiTest variation",
421
- "code": "<modals>Content</modals>"
422
- },
423
- {
424
- "title": "modals Example 1",
425
- "description": "Code example extracted from markdown.",
426
- "code": "<template>\n <UluModal>\n User setting modal…\n </UluModal>\n</template>"
427
- },
428
- {
429
- "title": "modals Example 2",
430
- "description": "Code example extracted from markdown.",
431
- "code": "import { defineAsyncComponent } from \"vue\";\n\nexport default [\n {\n name: \"settings\",\n component: defineAsyncComponent(() => import('./components/modals/UserSettingsModal.vue')),\n }\n]"
432
- },
433
- {
434
- "title": "modals Example 3",
435
- "description": "Code example extracted from markdown.",
436
- "code": "import UluModals from \"@ulu/frontend-vue/plugins/modals/index.js\";\nimport modals from \"./src/modals.js\";\n\n//...\n\napp.use(UluModals, { modals });"
437
- },
438
- {
439
- "title": "modals Example 4",
440
- "description": "Code example extracted from markdown.",
441
- "code": "// Open a app-wide modal\nthis.$uluModals.open({ exampleProp: value });\n\n// Close app-wide modal \nthis.$uluModals.close();\n\n// Add modals after post-install\nthis.$uluModals.add({\n name: \"settings\",\n component: defineAsyncComponent(() => import('./components/modals/UserSettingsModal.vue')),\n});\n\n// Remove a modal from the registry\nthis.$uluModals.remove(\"settings\");\n\n// Get Modal from registry (not usually needed)\nconst settingsModal = this.$uluModals.get(\"settings\");\n// console.log(settingsModal.name) ==> \"settings\""
442
- },
443
- {
444
- "title": "modals Example 5",
445
- "description": "Code example extracted from markdown.",
446
- "code": "<template>\n <button @click=\"showSettingsModal\">My Settings</button>\n</template>\n\n<script setup>\n import { useModals } from \"./useModals\";\n\n const modals = useModals();\n const showSettingsModal = () => {\n console.log(\"This is opening via uluModals composable\");\n modals.open(\"settings\");\n };\n</script>"
447
- }
448
- ],
449
- "useTooltipFollow": [
450
- {
451
- "title": "Default",
452
- "description": "Default variation",
453
- "code": "<useTooltipFollow>Content</useTooltipFollow>"
454
- }
455
- ],
456
- "useTooltip": [],
457
- "tooltip": [
458
- {
459
- "title": "Basic",
460
- "description": "Basic variation",
461
- "code": "<tooltip>This is a basic tooltip!</tooltip>"
462
- }
463
- ],
464
- "UluPopover": [],
465
465
  "UluTableSticky": [
466
466
  {
467
467
  "title": "Default",
@@ -645,13 +645,6 @@
645
645
  }
646
646
  ],
647
647
  "forms": [],
648
- "facets": [
649
- {
650
- "title": "facets Example 1",
651
- "description": "Code example extracted from markdown.",
652
- "code": "<script setup>\n import { ref } from 'vue';\n import { useFacets } from './useFacets.js';\n import UluFacetsFilterAccordions from './UluFacetsFilterAccordions.vue';\n import UluFacetsResults from './UluFacetsResults.vue';\n import UluFacetsSearch from './UluFacetsSearch.vue';\n import UluFacetsSort from './UluFacetsSort.vue';\n import UluFacetsSidebarLayout from './UluFacetsSidebarLayout.vue';\n import { mockItems } from './_mock-data';\n\n const allItems = ref(mockItems);\n\n // 1. Define fields for automatic facet generation\n const facetFields = [\n { name: 'Category', uid: 'category', open: true, multiple: true },\n { name: 'Author', uid: 'author', open: true },\n { name: 'Year', uid: 'date', open: true, getValue: item => item.date.getFullYear() }\n ];\n\n // 2. Define any extra sort types\n const extraSortTypes = {\n newest: { text: 'Date (Newest)', sort: (items) => [...items].sort((a, b) => b.date - a.date) },\n oldest: { text: 'Date (Oldest)', sort: (items) => [...items].sort((a, b) => a.date - b.date) }\n };\n\n // 3. Initialize the composable\n const {\n facets,\n searchValue,\n selectedSort,\n sortTypes,\n displayItems,\n selectedFacets, // Use this to check if filters are active\n handleFacetChange,\n clearFilters\n } = useFacets(allItems, {\n facetFields,\n extraSortTypes,\n initialSortType: 'newest',\n countMode: 'intuitive', // Show counts next to facet values\n searchOptions: { keys: ['title', 'description', 'author'] }\n });\n</script>\n\n<template>\n <UluFacetsSidebarLayout>\n <template #header>\n <div style=\"display: flex; justify-content: space-between; align-items: center; margin-bottom: 1rem; padding-bottom: 1rem; border-bottom: 1px solid #eee;\">\n <h2>Found {{ displayItems.length }} items</h2>\n <UluFacetsSort v-model=\"selectedSort\" :sort-types=\"sortTypes\" />\n </div>\n </template>\n <template #sidebar>\n <UluFacetsSearch v-model=\"searchValue\" placeholder=\"Search articles...\" />\n <hr/>\n <div style=\"display: flex; justify-content: space-between; align-items: center;\">\n <h3>Filters</h3>\n <button v-if=\"selectedFacets.length > 0\" @click=\"clearFilters\" style=\"border: none; background: none; color: blue; cursor: pointer;\">Clear</button>\n </div>\n <UluFacetsFilterAccordions :facets=\"facets\" @facet-change=\"handleFacetChange\" :max-visible=\"5\" />\n </template>\n <template #main>\n <UluFacetsResults :items=\"displayItems\">\n <template #item=\"{ item }\">\n <div style=\"border: 1px solid #eee; padding: 1rem; margin-bottom: 1rem; border-radius: 4px;\">\n <h3>{{ item.title }}</h3>\n <p>{{ item.description }}</p>\n <p><small><strong>Author:</strong> {{ Array.isArray(item.author) ? item.author.join(', ') : item.author }}</small></p>\n <p><small><strong>Published on:</strong> {{ item.date.toLocaleDateString() }}</small></p>\n </div>\n </template>\n <template #empty>\n <div style=\"padding: 2rem; text-align: center;\">\n <p>No matching items found. Try clearing some filters.</p>\n </div>\n </template>\n </UluFacetsResults>\n </template>\n </UluFacetsSidebarLayout>\n</template>"
653
- }
654
- ],
655
648
  "useScrollAnchors": [
656
649
  {
657
650
  "title": "useScrollAnchors Example 1",
@@ -672,6 +665,13 @@
672
665
  "description": "Code example extracted from markdown.",
673
666
  "code": "<script setup>\nimport { useScrollAnchorSection } from './useScrollAnchorSection';\n\nconst props = defineProps({\n title: {\n type: String,\n required: true\n },\n customTitleId: String,\n});\n\nconst { sectionRef, titleId, isActive, section } = useScrollAnchorSection(props);\n</script>\n\n<template>\n <section :class=\"['my-custom-section', { 'is-active': isActive }]\" :ref=\"sectionRef\">\n <h2 :id=\"titleId\">{{ title }}</h2>\n <p>This section is {{ isActive ? 'active' : 'inactive' }}.</p>\n <!-- More content here -->\n <slot />\n </section>\n</template>"
674
667
  }
668
+ ],
669
+ "facets": [
670
+ {
671
+ "title": "facets Example 1",
672
+ "description": "Code example extracted from markdown.",
673
+ "code": "<script setup>\n import { ref } from 'vue';\n import { useFacets } from './useFacets.js';\n import UluFacetsFilterAccordions from './UluFacetsFilterAccordions.vue';\n import UluFacetsResults from './UluFacetsResults.vue';\n import UluFacetsSearch from './UluFacetsSearch.vue';\n import UluFacetsSort from './UluFacetsSort.vue';\n import UluFacetsSidebarLayout from './UluFacetsSidebarLayout.vue';\n import { mockItems } from './_mock-data';\n\n const allItems = ref(mockItems);\n\n // 1. Define fields for automatic facet generation\n const facetFields = [\n { name: 'Category', uid: 'category', open: true, multiple: true },\n { name: 'Author', uid: 'author', open: true },\n { name: 'Year', uid: 'date', open: true, getValue: item => item.date.getFullYear() }\n ];\n\n // 2. Define any extra sort types\n const extraSortTypes = {\n newest: { text: 'Date (Newest)', sort: (items) => [...items].sort((a, b) => b.date - a.date) },\n oldest: { text: 'Date (Oldest)', sort: (items) => [...items].sort((a, b) => a.date - b.date) }\n };\n\n // 3. Initialize the composable\n const {\n facets,\n searchValue,\n selectedSort,\n sortTypes,\n displayItems,\n selectedFacets, // Use this to check if filters are active\n handleFacetChange,\n clearFilters\n } = useFacets(allItems, {\n facetFields,\n extraSortTypes,\n initialSortType: 'newest',\n countMode: 'intuitive', // Show counts next to facet values\n searchOptions: { keys: ['title', 'description', 'author'] }\n });\n</script>\n\n<template>\n <UluFacetsSidebarLayout>\n <template #header>\n <div style=\"display: flex; justify-content: space-between; align-items: center; margin-bottom: 1rem; padding-bottom: 1rem; border-bottom: 1px solid #eee;\">\n <h2>Found {{ displayItems.length }} items</h2>\n <UluFacetsSort v-model=\"selectedSort\" :sort-types=\"sortTypes\" />\n </div>\n </template>\n <template #sidebar>\n <UluFacetsSearch v-model=\"searchValue\" placeholder=\"Search articles...\" />\n <hr/>\n <div style=\"display: flex; justify-content: space-between; align-items: center;\">\n <h3>Filters</h3>\n <button v-if=\"selectedFacets.length > 0\" @click=\"clearFilters\" style=\"border: none; background: none; color: blue; cursor: pointer;\">Clear</button>\n </div>\n <UluFacetsFilterAccordions :facets=\"facets\" @facet-change=\"handleFacetChange\" :max-visible=\"5\" />\n </template>\n <template #main>\n <UluFacetsResults :items=\"displayItems\">\n <template #item=\"{ item }\">\n <div style=\"border: 1px solid #eee; padding: 1rem; margin-bottom: 1rem; border-radius: 4px;\">\n <h3>{{ item.title }}</h3>\n <p>{{ item.description }}</p>\n <p><small><strong>Author:</strong> {{ Array.isArray(item.author) ? item.author.join(', ') : item.author }}</small></p>\n <p><small><strong>Published on:</strong> {{ item.date.toLocaleDateString() }}</small></p>\n </div>\n </template>\n <template #empty>\n <div style=\"padding: 2rem; text-align: center;\">\n <p>No matching items found. Try clearing some filters.</p>\n </div>\n </template>\n </UluFacetsResults>\n </template>\n </UluFacetsSidebarLayout>\n</template>"
674
+ }
675
675
  ]
676
676
  },
677
677
  "configuration": {
@@ -691,8 +691,8 @@
691
691
  },
692
692
  {
693
693
  "name": "classes",
694
- "type": "object",
695
- "default": "{\n content: \"type-small\",\n date: \"type-small-x\",\n actions: \"type-small-x\",\n action: \"button button--small button--outline\",\n closeButton: \"button button--icon button--transparent\"\n}",
694
+ "type": "object|boolean|func",
695
+ "default": "() => ({})",
696
696
  "description": "Icons for each element { icon, header, content, date, actions, action, closeButton, title, body, closeButton }"
697
697
  }
698
698
  ],
@@ -4893,11 +4893,11 @@
4893
4893
  "name": "classes",
4894
4894
  "description": "Icons for each element { icon, header, content, date, actions, action, closeButton, title, body, closeButton }",
4895
4895
  "type": {
4896
- "name": "object"
4896
+ "name": "object|boolean|func"
4897
4897
  },
4898
4898
  "defaultValue": {
4899
- "func": false,
4900
- "value": "{\n content: \"type-small\",\n date: \"type-small-x\",\n actions: \"type-small-x\",\n action: \"button button--small button--outline\",\n closeButton: \"button button--icon button--transparent\"\n}"
4899
+ "func": true,
4900
+ "value": "() => ({})"
4901
4901
  }
4902
4902
  }
4903
4903
  ],
@@ -12239,7 +12239,7 @@
12239
12239
  "raw_markdown": "\nimport { Meta, Story, Canvas } from '@storybook/addon-docs/blocks';\nimport { version } from '../package.json';\nimport * as ButtonStories from './components/elements/UluButton.stories.js';\nimport * as CardStories from './components/elements/UluCard.stories.js';\n\n<Meta title=\"Overview/Introduction\" />\n\n# Ulu Frontend Vue\n\nWelcome to the living style guide for the Ulu Vue component library. This library provides a comprehensive set of accessible, reusable, and composable Vue 3 components, composables, and plugins to build modern web applications.\n\nThis documentation provides interactive examples and detailed API documentation for each part of the library.\n\n---\n\n## Core Concepts\n\nThe Ulu ecosystem is built on two main packages:\n\n- **`@ulu/frontend`**: The framework-agnostic core. It contains the foundational SCSS for styling, vanilla JavaScript utilities, and base components. It knows nothing about Vue. \n- **`@ulu/frontend-vue`** (This Library): The Vue 3 implementation. It provides wrapper components, composables, and plugins that build upon and integrate seamlessly with the `@ulu/frontend` core.\n\nThis separation allows for a consistent design system that can be applied to any web technology, while providing a rich, idiomatic experience for Vue developers.\n\n**Note:** For `@ulu/frontend` (components) that you are using from this Vue library. You need to output the component stylesheets like you would normally (create global stylesheet). The components in this library do not at the frontend scss modules. While they could be included in each component this would make it so that you can't build your own implementations (local app component / etc) with the class structures since the styles would only be available if that component is used. \n\nExample global stylesheet outputting all \"included\" components and base styles. Note you can configure whats output with ulu.component-set-includes for example. Note there are many ways to assemble the stylesheet (manual per component mixins, etc), this example shows the convenience modules which output each modules stylesheet based on includes/excludes.\n\n```sass\n@use \"config\"; // Your config changes for example\n@use \"@ulu/frontend/scss/stylesheets/base-styles.scss\"; // Outputs base styles that are included\n@use \"@ulu/frontend/scss/stylesheets/component-styles.scss\"; // Outputs component styles that are included\n@use \"@ulu/frontend/scss/stylesheets/helper-styles.scss\"; // Outputs helper styles that are included\n```\n\n*Please see `@ulu/frontend` library for full documentation of configuring and outputting stylesheet*\n\n---\n\n## Installation\n\nTo get started, add the library to your project.\n\n```bash\nnpm install @ulu/frontend-vue\n```\n\nNext, you must register the required plugins in your main application entry point (`main.js`). The `corePlugin` is essential, and other plugins like `breakpointsPlugin`, `popoverPlugin` are optional. Some components require plugins. If a required plugin is missing, an error is thrown.\n\n**`src/main.js`**\n```javascript\nimport { createApp } from 'vue';\nimport App from './App.vue';\nimport { \n corePlugin, \n breakpointsPlugin, \n toastPlugin, \n modalsPlugin, \n popoversPlugin \n} from '@ulu/frontend-vue';\nimport router from './router'; // Your vue-router instance\n\n// Import the main SCSS entry point\nimport '@ulu/frontend-vue/lib/_index.scss';\n\nconst app = createApp(App);\n\napp.use(router);\n\n// Register Ulu plugins\napp.use(corePlugin, {\n // Optional: override default icons\n iconsByType: {\n danger: 'fas fa-exclamation-triangle',\n close: 'fas fa-times'\n }\n});\napp.use(breakpointsPlugin);\napp.use(toastPlugin);\napp.use(modalsPlugin, { \n modals: [\n /* your global modals */\n ] \n});\napp.use(popoversPlugin);\n\n\napp.mount('#app');\n```\n\nFinally, you need to add the display components for plugins like `toast` and `modals` to your root `App.vue` file.\n\n**`src/App.vue`**\n```html\n<template>\n <!-- Your App Layout -->\n <router-view />\n\n <!-- Ulu Plugin Display Components -->\n <UluToastDisplay />\n <UluModalsDisplay />\n <UluTooltipDisplay />\n</template>\n```\n\n---\n\n## What's Inside?\n\nThe library is organized into several key areas:\n\n### Components\n\nThese are the reusable building blocks of your UI. They are organized by function into categories like `elements`, `collapsible`, `forms`, `layout`, `navigation`, and `systems`.\n\n**Simple Component Example: `UluButton`**\n\n<Canvas of={ButtonStories.Primary} />\n\n**Complex Component Example: `UluCard`**\n\n<Canvas of={CardStories.Default} />\n\n### Composables\n\nReusable, stateful logic that can be shared across components.\n\n- `useFacets`: A powerful composable for client-side filtering, searching, and sorting of data.\n- `usePagination`: Handles all the logic for paginating a list of items, including integration with Vue Router.\n- `useBreakpointManager`: A reactive interface to CSS breakpoints.\n- `useModifiers`: A utility for creating BEM-style modifier classes.\n- `useWindowResize`: A debounced window resize event listener.\n- `useRequiredInject`: A utility to ensure required dependencies are injected from plugins.\n\n### Plugins\n\nPlugins provide global functionality and APIs that can be accessed from anywhere in your application.\n\n- **`corePlugin` (Required)**: Manages global settings, primarily for the icon system.\n- **`breakpointsPlugin`**: Provides reactive information about the current CSS breakpoint (`uluIsMobile`, `uluBreakpointActive`).\n- **`modalsPlugin`**: A system for registering and triggering global modals (e.g., for settings or confirmation dialogs).\n- **`toastPlugin`**: A global API (`$uluToast`) for showing toast notifications.\n- **`popoversPlugin`**: Enables a simple `v-ulu-tooltip` directive for tooltips and provides the `UluPopover` component.\n\n**Example: Triggering a Toast Notification**\n```javascript\nimport { useToast } from '@ulu/frontend-vue';\n\nconst toast = useToast();\n\ntoast.add({\n title: 'Success!',\n description: 'Your profile has been updated.',\n class: 'is-success'\n});\n```\n\n### Component Systems\n\nSystems are complex, multi-component features that solve a specific problem.\n\n- **Facets**: A complete system for faceted search, built around the `useFacets` composable. Includes components for search, sort, filters, and results display.\n- **Scroll Anchors**: A system for creating navigations that track the user's scroll position within a page.\n- **Skeleton**: A set of components for creating beautiful and effective loading states.\n- **Table Sticky**: A powerful table component with sticky headers and columns.\n- **Slider**: A flexible slideshow/carousel component.\n\n### Resolver\n\nResolver for [`unplugin-vue-components`](https://github.com/unplugin/unplugin-vue-components/tree/main]) is available to use like:\n\n```js\n// vite.config.js\n\nimport { defineConfig } from \"vite\";\nimport Components from \"unplugin-vue-components/vite\";\nimport { UluUnpluginResolver } from \"@ulu/frontend-vue/resolver\";\n\nexport default defineConfig({\n plugins: [\n // ...\n Components({ \n resolvers: [\n UluUnpluginResolver()\n ]\n }),\n // ...\n ],\n // ...\n});\n```\n\n### Vite Asset URLs\n\nWhen using components like `UluImage` and `UluImageSource`, you may want to pass relative asset paths directly as props (e.g. `<UluImage src=\"./assets/img.png\" />`) instead of manually importing them in your setup script. \n\nTo enable Vite to automatically resolve these paths, you can add our custom transform rules to the Vue plugin in your `vite.config.js`:\n\n*Note: this includes the defaults (img, source, video, ...) in addition to the Ulu specific components, since configuring this clears the defaults (it's not merged).*\n\n```js\n// vite.config.js\n\nimport { defineConfig } from \"vite\";\nimport vue from \"@vitejs/plugin-vue\";\nimport { uluTransformAssetUrls } from \"@ulu/frontend-vue/vite.js\";\n\nexport default defineConfig({\n plugins: [\n vue({\n template: {\n transformAssetUrls: {\n // \n ...uluTransformAssetUrls\n }\n }\n }),\n // ...\n ],\n // ...\n});\n```"
12240
12240
  },
12241
12241
  "ExportsMap": {
12242
- "raw_markdown": "\nimport { Meta } from '@storybook/addon-docs/blocks';\n\n<Meta title=\"Overview/API Reference\" />\n\n# API Reference\n\nThis page provides a comprehensive map of all named exports from the `@ulu/frontend-vue` library. Use this as a quick reference to discover available components, composables, plugins, and utilities.\n\n## Components\n\nThese are the building blocks for your UI. They are imported as named exports.\n\n* `UluAccordion`\n* `UluAccordionGroup`\n* `UluAction`\n* `UluAdaptiveLayout`\n* `UluAlert`\n* `UluAnimateNumber`\n* `UluBadge`\n* `UluBadgeStack`\n* `UluBreadcrumb`\n* `UluButton`\n* `UluButtonVerbose`\n* `UluCallout`\n* `UluCard`\n* `UluCollapsible`\n* `UluConditionalText`\n* `UluConditionalWrapper`\n* `UluDataGrid`\n* `UluDataTable`\n* `UluDefinitionList`\n* `UluDefinitionListItem`\n* `UluDropdown`\n* `UluEmpty`\n* `UluEmptyView`\n* `UluExternalLink`\n* `UluFacetsActiveFilters`\n* `UluFacetsFilterAccordions`\n* `UluFacetsFilterLists`\n* `UluFacetsFilterPopovers`\n* `UluFacetsFilterSelects`\n* `UluFacetsHeaderLayout`\n* `UluFacetsList`\n* `UluFacetsResults`\n* `UluFacetsSearch`\n* `UluFacetsSidebarLayout`\n* `UluFacetsSort`\n* `UluFileDisplay`\n* `UluForm`\n* `UluFormActions`\n* `UluFormCheckbox`\n* `UluFormFieldset`\n* `UluFormFile`\n* `UluFormItem`\n* `UluFormItemsInline`\n* `UluFormLabel`\n* `UluFormMessage`\n* `UluFormRadio`\n* `UluFormRequiredChar`\n* `UluFormSelect`\n* `UluFormText`\n* `UluFormTextarea`\n* `UluIcon`\n* `UluImage`\n* `UluImageSource`\n* In Progress - `UluImageSlider`\n* `UluList`\n* `UluListItem`\n* `UluCounterList`\n* `UluMain`\n* `UluMenu`\n* `UluMenuStack`\n* `UluModal`\n* `UluNavStrip`\n* `UluOverflowPopover`\n* `UluPager`\n* `UluPlaceholderImage`\n* `UluPlaceholderText`\n* `UluProgressBar`\n* `UluProgressCircle`\n* `UluRouteAnnouncer`\n* `UluRule`\n* `UluSanityRichText`\n* `UluScrollAnchors`\n* `UluScrollAnchorsHeadlessSection`\n* `UluScrollAnchorsNav`\n* `UluScrollAnchorsNavAnimated`\n* `UluScrollAnchorsSection`\n* `UluScrollSlider`\n* `UluSearchForm`\n* `UluSelectableMenu`\n* `UluShowSkeleton`\n* `UluSkeletonContent`\n* `UluSkeletonMedia`\n* `UluSkeletonText`\n* `UluSkipLink`\n* `UluSlider`\n* `UluSpokeSpinner`\n* `UluTab`\n* `UluTabGroup`\n* `UluTabList`\n* `UluTabPanel`\n* `UluTabPanels`\n* `UluTable`\n* `UluTableSticky`\n* `UluTableStickyRows`\n* `UluTableStickyTable`\n* `UluTag`\n* `UluTitleRail`\n* `UluToast`\n* `UluToastDisplay`\n\n---\n\n## Composables\n\nReusable, stateful logic that can be shared across components.\n\n* `useBreakpointManager`\n* `useDocumentTitle`\n* `useFacets`\n* `useIcon`\n* `useModifiers`\n* `usePagination`\n* `useRequiredInject`\n* `useScrollAnchorSection`\n* `useScrollAnchorSections`\n* `useScrollAnchors`\n* `useTableData`\n* `useToast`\n* `useTooltip`\n* `useTooltipFollow`\n* `useUluFloating`\n* `useWindowResize`\n\n---\n\n## Plugins\n\nPlugins provide global functionality and APIs.\n\n* `breakpointsPlugin`\n* `corePlugin`\n* `modalsPlugin`\n* `popoversPlugin`\n* `toastPlugin`\n\n\n\n---\n\n## Utilities\n\nThe `utils` export is a namespace containing helper functions.\n\n* `utils.dom`\n* `utils.router`\n\n`\n* `utils.router`\n"
12242
+ "raw_markdown": "\nimport { Meta } from '@storybook/addon-docs/blocks';\n\n<Meta title=\"Overview/API Reference\" />\n\n# API Reference\n\nThis page provides a comprehensive map of all named exports from the `@ulu/frontend-vue` library. Use this as a quick reference to discover available components, composables, plugins, and utilities.\n\n## Components\n\nThese are the building blocks for your UI. They are imported as named exports.\n\n* `UluAccordion`\n* `UluAccordionGroup`\n* `UluAction`\n* `UluAdaptiveLayout`\n* `UluAlert`\n* `UluAnimateNumber`\n* `UluBadge`\n* `UluBadgeStack`\n* `UluBreadcrumb`\n* `UluButton`\n* `UluButtonVerbose`\n* `UluCallout`\n* `UluCard`\n* `UluCollapsible`\n* `UluConditionalText`\n* `UluConditionalWrapper`\n* `UluDataGrid`\n* `UluDataTable`\n* `UluDefinitionList`\n* `UluDefinitionListItem`\n* `UluDropdown`\n* `UluEmpty`\n* `UluEmptyView`\n* `UluExternalLink`\n* `UluFacetsActiveFilters`\n* `UluFacetsFilterAccordions`\n* `UluFacetsFilterLists`\n* `UluFacetsFilterPopovers`\n* `UluFacetsFilterSelects`\n* `UluFacetsHeaderLayout`\n* `UluFacetsList`\n* `UluFacetsResults`\n* `UluFacetsSearch`\n* `UluFacetsSidebarLayout`\n* `UluFacetsSort`\n* `UluFileDisplay`\n* `UluForm`\n* `UluFormActions`\n* `UluFormCheckbox`\n* `UluFormFieldset`\n* `UluFormFile`\n* `UluFormItem`\n* `UluFormItemsInline`\n* `UluFormLabel`\n* `UluFormMessage`\n* `UluFormRadio`\n* `UluFormRequiredChar`\n* `UluFormSelect`\n* `UluFormText`\n* `UluFormTextarea`\n* `UluIcon`\n* `UluImage`\n* `UluImageSource`\n* In Progress - `UluImageSlider`\n* `UluList`\n* `UluListItem`\n* `UluCounterList`\n* `UluMain`\n* `UluMenu`\n* `UluMenuStack`\n* `UluModal`\n* `UluNavStrip`\n* `UluOverflowPopover`\n* `UluPager`\n* `UluPlaceholderImage`\n* `UluPlaceholderText`\n* `UluProgressBar`\n* `UluProgressCircle`\n* `UluRouteAnnouncer`\n* `UluRule`\n* `UluSanityRichText`\n* `UluScrollAnchors`\n* `UluScrollAnchorsHeadlessSection`\n* `UluScrollAnchorsNav`\n* `UluScrollAnchorsNavAnimated`\n* `UluScrollAnchorsSection`\n* `UluScrollSlider`\n* `UluSearchForm`\n* `UluSelectableMenu`\n* `UluShowSkeleton`\n* `UluSkeletonContent`\n* `UluSkeletonMedia`\n* `UluSkeletonText`\n* `UluSkipLink`\n* `UluSlider`\n* `UluSpokeSpinner`\n* `UluTab`\n* `UluTabGroup`\n* `UluTabList`\n* `UluTabPanel`\n* `UluTabPanels`\n* `UluTable`\n* `UluTableSticky`\n* `UluTableStickyRows`\n* `UluTableStickyTable`\n* `UluTag`\n* `UluTitleRail`\n* `UluToast`\n* `UluToastDisplay`\n\n---\n\n## Composables\n\nReusable, stateful logic that can be shared across components.\n\n* `useBreakpointManager`\n* `useDocumentTitle`\n* `useFacets`\n* `useIcon`\n* `useModifiers`\n* `usePagination`\n* `useRequiredInject`\n* `useScrollAnchorSection`\n* `useScrollAnchorSections`\n* `useScrollAnchors`\n* `useTableData`\n* `useToast`\n* `useTooltip`\n* `useTooltipFollow`\n* `useUluFloating`\n* `useWindowResize`\n\n---\n\n## Plugins\n\nPlugins provide global functionality and APIs.\n\n* `breakpointsPlugin`\n* `corePlugin`\n* `modalsPlugin`\n* `popoversPlugin`\n* `toastPlugin`\n\n\n\n---\n\n## Utilities\n\nThe `utils` export is a namespace containing helper functions.\n\n### DOM (`utils.dom`)\n\n* `utils.dom.refToElement`\n* `utils.dom.newId`\n\n### Props (`utils.props`)\n\n* `utils.props.isArrayOfObjects`\n* `utils.props.checkDeprecatedProps`\n* `utils.props.mergeClassLookups`\n\n### Router (`utils.router`)\n\n* `utils.router.getRouteTitle`\n* `utils.router.createBaseMenu`\n* `utils.router.flattenMenu`\n* `utils.router.createSectionMenu`\n* `utils.router.getChildIndexRoute`\n* `utils.router.createMenuItem`\n* `utils.router.isStaticRoute`\n* `utils.router.isStaticBaseRoute`\n* `utils.router.nativeLinkRouter`\n* `utils.router.$getRouteChildren`\n* `utils.router.$getParentRoute`\n* `utils.router.$createSectionMenu`\n* `utils.router.$createBreadcrumb`\n"
12243
12243
  },
12244
12244
  "ChangeLog": {
12245
12245
  "raw_markdown": "import { Meta, Markdown } from '@storybook/addon-docs/blocks';\nimport CHANGELOG from '../CHANGELOG.md?raw';\n\n<Meta title=\"Overview/Change Log\" />\n\n<Markdown>\n{CHANGELOG}\n</Markdown>"
@@ -12274,9 +12274,6 @@
12274
12274
  "forms": {
12275
12275
  "raw_markdown": "import { Meta, Canvas, Story } from '@storybook/addon-docs/blocks';\nimport * as FullFormDemoStories from './tests/FullFormDemo.stories.js';\n\n# Forms\n\nThis is a demonstration of a full form built with the `ulu-form` components.\n\n<Canvas of={FullFormDemoStories.Default} />\n"
12276
12276
  },
12277
- "facets": {
12278
- "raw_markdown": "# Faceted Search\n\nThis story demonstrates the `useFacets` composable and its associated components. It showcases how to set up a faceted search interface with automatic facet generation, searching, sorting, and filtering. For detailed configuration options, see the [`facetFields` API reference](#facetfields-api) below the example.\n\n```html\n<script setup>\n import { ref } from 'vue';\n import { useFacets } from './useFacets.js';\n import UluFacetsFilterAccordions from './UluFacetsFilterAccordions.vue';\n import UluFacetsResults from './UluFacetsResults.vue';\n import UluFacetsSearch from './UluFacetsSearch.vue';\n import UluFacetsSort from './UluFacetsSort.vue';\n import UluFacetsSidebarLayout from './UluFacetsSidebarLayout.vue';\n import { mockItems } from './_mock-data';\n\n const allItems = ref(mockItems);\n\n // 1. Define fields for automatic facet generation\n const facetFields = [\n { name: 'Category', uid: 'category', open: true, multiple: true },\n { name: 'Author', uid: 'author', open: true },\n { name: 'Year', uid: 'date', open: true, getValue: item => item.date.getFullYear() }\n ];\n\n // 2. Define any extra sort types\n const extraSortTypes = {\n newest: { text: 'Date (Newest)', sort: (items) => [...items].sort((a, b) => b.date - a.date) },\n oldest: { text: 'Date (Oldest)', sort: (items) => [...items].sort((a, b) => a.date - b.date) }\n };\n\n // 3. Initialize the composable\n const {\n facets,\n searchValue,\n selectedSort,\n sortTypes,\n displayItems,\n selectedFacets, // Use this to check if filters are active\n handleFacetChange,\n clearFilters\n } = useFacets(allItems, {\n facetFields,\n extraSortTypes,\n initialSortType: 'newest',\n countMode: 'intuitive', // Show counts next to facet values\n searchOptions: { keys: ['title', 'description', 'author'] }\n });\n</script>\n\n<template>\n <UluFacetsSidebarLayout>\n <template #header>\n <div style=\"display: flex; justify-content: space-between; align-items: center; margin-bottom: 1rem; padding-bottom: 1rem; border-bottom: 1px solid #eee;\">\n <h2>Found {{ displayItems.length }} items</h2>\n <UluFacetsSort v-model=\"selectedSort\" :sort-types=\"sortTypes\" />\n </div>\n </template>\n <template #sidebar>\n <UluFacetsSearch v-model=\"searchValue\" placeholder=\"Search articles...\" />\n <hr/>\n <div style=\"display: flex; justify-content: space-between; align-items: center;\">\n <h3>Filters</h3>\n <button v-if=\"selectedFacets.length > 0\" @click=\"clearFilters\" style=\"border: none; background: none; color: blue; cursor: pointer;\">Clear</button>\n </div>\n <UluFacetsFilterAccordions :facets=\"facets\" @facet-change=\"handleFacetChange\" :max-visible=\"5\" />\n </template>\n <template #main>\n <UluFacetsResults :items=\"displayItems\">\n <template #item=\"{ item }\">\n <div style=\"border: 1px solid #eee; padding: 1rem; margin-bottom: 1rem; border-radius: 4px;\">\n <h3>{{ item.title }}</h3>\n <p>{{ item.description }}</p>\n <p><small><strong>Author:</strong> {{ Array.isArray(item.author) ? item.author.join(', ') : item.author }}</small></p>\n <p><small><strong>Published on:</strong> {{ item.date.toLocaleDateString() }}</small></p>\n </div>\n </template>\n <template #empty>\n <div style=\"padding: 2rem; text-align: center;\">\n <p>No matching items found. Try clearing some filters.</p>\n </div>\n </template>\n </UluFacetsResults>\n </template>\n </UluFacetsSidebarLayout>\n</template>\n```\n\n<h3 id=\"facetfields-api\">facetFields API</h3>\n\nThe `useFacets` composable can automatically generate filter groups from a `facetFields` configuration array. Each object in the array defines a facet group and its behavior. Here are the available keys:\n\n<table>\n <thead>\n <tr>\n <th>Key</th>\n <th>Type</th>\n <th>Default</th>\n <th>Description</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td><code>uid</code></td>\n <td><code>String</code></td>\n <td><strong>Required</strong></td>\n <td>The property key on each item in your data array that holds the facet&#39;s value.</td>\n </tr>\n <tr>\n <td><code>name</code></td>\n <td><code>String</code></td>\n <td><strong>Required</strong></td>\n <td>The display name for the facet group, shown as a title in the UI.</td>\n </tr>\n <tr>\n <td><code>multiple</code></td>\n <td><code>Boolean</code></td>\n <td><code>false</code></td>\n <td>If <code>true</code>, allows multiple values to be selected (renders as checkboxes). If <code>false</code>,\n only one value can be selected (renders as radio buttons).</td>\n </tr>\n <tr>\n <td><code>open</code></td>\n <td><code>Boolean</code></td>\n <td><code>false</code></td>\n <td>If <code>true</code>, the facet group will be expanded by default in the UI.</td>\n </tr>\n <tr>\n <td><code>match</code></td>\n <td><code>String</code></td>\n <td><code>&#39;some&#39;</code></td>\n <td>Only applies when <code>multiple: true</code>. If set to <code>&#39;all&#39;</code>, items must match\n <strong>all</strong> selected values in the group (AND logic). The default is to match <strong>any</strong>\n value (OR logic).</td>\n </tr>\n <tr>\n <td><code>getValue</code></td>\n <td><code>Function</code></td>\n <td><code>item =&gt; item[uid]</code></td>\n <td>A function that receives an item and returns the value for the facet. Useful for derived or nested values\n (e.g., <code>item =&gt; item.date.getFullYear()</code>).</td>\n </tr>\n <tr>\n <td><code>getLabel</code></td>\n <td><code>Function</code></td>\n <td><code>value =&gt; value</code></td>\n <td>A function that receives a facet value and returns a formatted string for display. Useful for transforming\n values into more readable labels.</td>\n </tr>\n </tbody>\n</table>"
12279
- },
12280
12277
  "useScrollAnchors": {
12281
12278
  "raw_markdown": "# useScrollAnchors\n\nThe main composable that contains the core \"engine\" for the Scroll Anchors system.\nIt encapsulates the `IntersectionObserver` logic to track sections and manage their active state.\nThis is intended for advanced use cases where a developer needs to build a custom provider\ncomponent instead of using the default `UluScrollAnchors`.\n\n## Usage\n\nThis composable is used to power a custom provider component. You would use it to provide the context to child components via Vue's `provide` function, using string-based keys.\n\n```html\n<script setup>\n import { ref, computed, provide } from \"vue\";\n import { useScrollAnchors } from './useScrollAnchors.js';\n\n const props = defineProps({\n firstItemActive: Boolean,\n observerOptions: Object\n });\n const emit = defineEmits(['section-change']);\n const componentEl = ref(null);\n const sections = ref([]);\n\n // Use the composable to handle the core logic\n useScrollAnchors({ sections, props, emit, componentElRef: componentEl });\n\n // Provide the state and registration functions to children\n provide('uluScrollAnchorsSections', computed(() => sections.value));\n provide('uluScrollAnchorsRegister', (section) => sections.value.push(section));\n provide('uluScrollAnchorsUnregister', (sectionId) => {\n const index = sections.value.findIndex(r => r.id === sectionId);\n if (index > -1) sections.value.splice(index, 1);\n });\n</script>\n\n<template>\n <!-- Your custom wrapper, or no wrapper at all -->\n <div ref=\"componentEl\">\n <slot/>\n </div>\n</template>\n```\n\n## Parameters\n\nThe `useScrollAnchors` composable accepts a single object with the following properties:\n\n- `sections` (Ref): A `ref` to the array of section objects that will be tracked.\n- `props` (Object): A props object containing `observerOptions` and `firstItemActive`.\n- `emit` (Function): The `emit` function from the host component, used to emit the `section-change` event.\n- `componentElRef` (Ref): A `ref` to an element within the component, used to find the nearest scrollable ancestor. This is not needed if `observerOptions.root` is set.\n\n## Returns\n\nThis composable does not return any values. It manages the observer and mutates the `active` state on the items within the `sections` array directly.\n"
12282
12279
  },
@@ -12286,6 +12283,9 @@
12286
12283
  "useScrollAnchorSection": {
12287
12284
  "raw_markdown": "# useScrollAnchorSection\n\nA composable that provides the core logic for a scroll anchor section, allowing components to register themselves with the `UluScrollAnchors` parent and react to their active state.\n\nThis composable is intended to be used within a Vue component's `<script setup>` block to manage the lifecycle and state of a scrollable section.\n\n## Usage\n\n```html\n<script setup>\nimport { useScrollAnchorSection } from './useScrollAnchorSection';\n\nconst props = defineProps({\n title: {\n type: String,\n required: true\n },\n customTitleId: String,\n});\n\nconst { sectionRef, titleId, isActive, section } = useScrollAnchorSection(props);\n</script>\n\n<template>\n <section :class=\"['my-custom-section', { 'is-active': isActive }]\" :ref=\"sectionRef\">\n <h2 :id=\"titleId\">{{ title }}</h2>\n <p>This section is {{ isActive ? 'active' : 'inactive' }}.</p>\n <!-- More content here -->\n <slot />\n </section>\n</template>\n```\n\n## Parameters\n\nThe `useScrollAnchorSection` composable accepts a `props` object with the following properties:\n\n- `title` (String, required): The title of the section. Used for generating a default `titleId` and for display in navigation.\n- `customTitleId` (String, optional): A custom ID for the section's anchor. If not provided, one will be generated from the `title`.\n\n## Returns\n\nThe composable returns an object with the following reactive properties:\n\n- `sectionRef`: A ref that should be bound to the root HTML element of your section component. This element is observed by `UluScrollAnchors` to determine the section's visibility.\n- `titleId` (ComputedRef): The unique ID for the section's title, used for anchor links.\n- `isActive` (ComputedRef): A boolean indicating whether the section is currently active (in view).\n- `section` (Reactive): The full reactive section object registered with `UluScrollAnchors`, containing `id`, `title`, `titleId`, `element`, and `active` state.\n\n## Integration with `UluScrollAnchors`\n\nThis composable works in conjunction with the `UluScrollAnchors` component. When a component using `useScrollAnchorSection` is mounted within `UluScrollAnchors`, it automatically registers itself. `UluScrollAnchors` then tracks its visibility and updates the `isActive` state.\n"
12288
12285
  },
12286
+ "facets": {
12287
+ "raw_markdown": "# Faceted Search\n\nThis story demonstrates the `useFacets` composable and its associated components. It showcases how to set up a faceted search interface with automatic facet generation, searching, sorting, and filtering. For detailed configuration options, see the [`facetFields` API reference](#facetfields-api) below the example.\n\n```html\n<script setup>\n import { ref } from 'vue';\n import { useFacets } from './useFacets.js';\n import UluFacetsFilterAccordions from './UluFacetsFilterAccordions.vue';\n import UluFacetsResults from './UluFacetsResults.vue';\n import UluFacetsSearch from './UluFacetsSearch.vue';\n import UluFacetsSort from './UluFacetsSort.vue';\n import UluFacetsSidebarLayout from './UluFacetsSidebarLayout.vue';\n import { mockItems } from './_mock-data';\n\n const allItems = ref(mockItems);\n\n // 1. Define fields for automatic facet generation\n const facetFields = [\n { name: 'Category', uid: 'category', open: true, multiple: true },\n { name: 'Author', uid: 'author', open: true },\n { name: 'Year', uid: 'date', open: true, getValue: item => item.date.getFullYear() }\n ];\n\n // 2. Define any extra sort types\n const extraSortTypes = {\n newest: { text: 'Date (Newest)', sort: (items) => [...items].sort((a, b) => b.date - a.date) },\n oldest: { text: 'Date (Oldest)', sort: (items) => [...items].sort((a, b) => a.date - b.date) }\n };\n\n // 3. Initialize the composable\n const {\n facets,\n searchValue,\n selectedSort,\n sortTypes,\n displayItems,\n selectedFacets, // Use this to check if filters are active\n handleFacetChange,\n clearFilters\n } = useFacets(allItems, {\n facetFields,\n extraSortTypes,\n initialSortType: 'newest',\n countMode: 'intuitive', // Show counts next to facet values\n searchOptions: { keys: ['title', 'description', 'author'] }\n });\n</script>\n\n<template>\n <UluFacetsSidebarLayout>\n <template #header>\n <div style=\"display: flex; justify-content: space-between; align-items: center; margin-bottom: 1rem; padding-bottom: 1rem; border-bottom: 1px solid #eee;\">\n <h2>Found {{ displayItems.length }} items</h2>\n <UluFacetsSort v-model=\"selectedSort\" :sort-types=\"sortTypes\" />\n </div>\n </template>\n <template #sidebar>\n <UluFacetsSearch v-model=\"searchValue\" placeholder=\"Search articles...\" />\n <hr/>\n <div style=\"display: flex; justify-content: space-between; align-items: center;\">\n <h3>Filters</h3>\n <button v-if=\"selectedFacets.length > 0\" @click=\"clearFilters\" style=\"border: none; background: none; color: blue; cursor: pointer;\">Clear</button>\n </div>\n <UluFacetsFilterAccordions :facets=\"facets\" @facet-change=\"handleFacetChange\" :max-visible=\"5\" />\n </template>\n <template #main>\n <UluFacetsResults :items=\"displayItems\">\n <template #item=\"{ item }\">\n <div style=\"border: 1px solid #eee; padding: 1rem; margin-bottom: 1rem; border-radius: 4px;\">\n <h3>{{ item.title }}</h3>\n <p>{{ item.description }}</p>\n <p><small><strong>Author:</strong> {{ Array.isArray(item.author) ? item.author.join(', ') : item.author }}</small></p>\n <p><small><strong>Published on:</strong> {{ item.date.toLocaleDateString() }}</small></p>\n </div>\n </template>\n <template #empty>\n <div style=\"padding: 2rem; text-align: center;\">\n <p>No matching items found. Try clearing some filters.</p>\n </div>\n </template>\n </UluFacetsResults>\n </template>\n </UluFacetsSidebarLayout>\n</template>\n```\n\n<h3 id=\"facetfields-api\">facetFields API</h3>\n\nThe `useFacets` composable can automatically generate filter groups from a `facetFields` configuration array. Each object in the array defines a facet group and its behavior. Here are the available keys:\n\n<table>\n <thead>\n <tr>\n <th>Key</th>\n <th>Type</th>\n <th>Default</th>\n <th>Description</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td><code>uid</code></td>\n <td><code>String</code></td>\n <td><strong>Required</strong></td>\n <td>The property key on each item in your data array that holds the facet&#39;s value.</td>\n </tr>\n <tr>\n <td><code>name</code></td>\n <td><code>String</code></td>\n <td><strong>Required</strong></td>\n <td>The display name for the facet group, shown as a title in the UI.</td>\n </tr>\n <tr>\n <td><code>multiple</code></td>\n <td><code>Boolean</code></td>\n <td><code>false</code></td>\n <td>If <code>true</code>, allows multiple values to be selected (renders as checkboxes). If <code>false</code>,\n only one value can be selected (renders as radio buttons).</td>\n </tr>\n <tr>\n <td><code>open</code></td>\n <td><code>Boolean</code></td>\n <td><code>false</code></td>\n <td>If <code>true</code>, the facet group will be expanded by default in the UI.</td>\n </tr>\n <tr>\n <td><code>match</code></td>\n <td><code>String</code></td>\n <td><code>&#39;some&#39;</code></td>\n <td>Only applies when <code>multiple: true</code>. If set to <code>&#39;all&#39;</code>, items must match\n <strong>all</strong> selected values in the group (AND logic). The default is to match <strong>any</strong>\n value (OR logic).</td>\n </tr>\n <tr>\n <td><code>getValue</code></td>\n <td><code>Function</code></td>\n <td><code>item =&gt; item[uid]</code></td>\n <td>A function that receives an item and returns the value for the facet. Useful for derived or nested values\n (e.g., <code>item =&gt; item.date.getFullYear()</code>).</td>\n </tr>\n <tr>\n <td><code>getLabel</code></td>\n <td><code>Function</code></td>\n <td><code>value =&gt; value</code></td>\n <td>A function that receives a facet value and returns a formatted string for display. Useful for transforming\n values into more readable labels.</td>\n </tr>\n </tbody>\n</table>"
12288
+ },
12289
12289
  "jsdoc": [
12290
12290
  {
12291
12291
  "id": "module:vite",
@@ -12376,7 +12376,7 @@
12376
12376
  "filename": "index.js",
12377
12377
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/utils"
12378
12378
  },
12379
- "order": 24,
12379
+ "order": 25,
12380
12380
  "level": 0
12381
12381
  },
12382
12382
  {
@@ -12389,7 +12389,46 @@
12389
12389
  "filename": "dom.js",
12390
12390
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/utils"
12391
12391
  },
12392
- "order": 25,
12392
+ "order": 26,
12393
+ "level": 0
12394
+ },
12395
+ {
12396
+ "id": "plugins\nResponsible for exporting all plugins\n- Used in bundle exportsmodule:",
12397
+ "longname": "plugins\nResponsible for exporting all plugins\n- Used in bundle exportsmodule:",
12398
+ "name": "plugins\nResponsible for exporting all plugins\n- Used in bundle exports",
12399
+ "kind": "module",
12400
+ "meta": {
12401
+ "lineno": 1,
12402
+ "filename": "index.js",
12403
+ "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins"
12404
+ },
12405
+ "order": 29,
12406
+ "level": 0
12407
+ },
12408
+ {
12409
+ "id": "module:components",
12410
+ "longname": "module:components",
12411
+ "name": "components",
12412
+ "kind": "module",
12413
+ "meta": {
12414
+ "lineno": 1,
12415
+ "filename": "index.js",
12416
+ "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components"
12417
+ },
12418
+ "order": 30,
12419
+ "level": 0
12420
+ },
12421
+ {
12422
+ "id": "components/index.js\nResponsible for exporting all components\n- Used in main plugin and bundle exportsmodule:",
12423
+ "longname": "components/index.js\nResponsible for exporting all components\n- Used in main plugin and bundle exportsmodule:",
12424
+ "name": "components/index.js\nResponsible for exporting all components\n- Used in main plugin and bundle exports",
12425
+ "kind": "module",
12426
+ "meta": {
12427
+ "lineno": 4,
12428
+ "filename": "index.js",
12429
+ "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components"
12430
+ },
12431
+ "order": 31,
12393
12432
  "level": 0
12394
12433
  },
12395
12434
  {
@@ -12402,7 +12441,7 @@
12402
12441
  "filename": "useWindowResize.js",
12403
12442
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
12404
12443
  },
12405
- "order": 28,
12444
+ "order": 32,
12406
12445
  "level": 0
12407
12446
  },
12408
12447
  {
@@ -12415,7 +12454,7 @@
12415
12454
  "filename": "useUluFloating.js",
12416
12455
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
12417
12456
  },
12418
- "order": 31,
12457
+ "order": 35,
12419
12458
  "level": 0
12420
12459
  },
12421
12460
  {
@@ -12428,7 +12467,7 @@
12428
12467
  "filename": "useTableData.js",
12429
12468
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
12430
12469
  },
12431
- "order": 35,
12470
+ "order": 39,
12432
12471
  "level": 0
12433
12472
  },
12434
12473
  {
@@ -12441,7 +12480,7 @@
12441
12480
  "filename": "useRequiredInject.js",
12442
12481
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
12443
12482
  },
12444
- "order": 43,
12483
+ "order": 47,
12445
12484
  "level": 0
12446
12485
  },
12447
12486
  {
@@ -12454,7 +12493,7 @@
12454
12493
  "filename": "usePagination.js",
12455
12494
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
12456
12495
  },
12457
- "order": 45,
12496
+ "order": 49,
12458
12497
  "level": 0
12459
12498
  },
12460
12499
  {
@@ -12467,7 +12506,7 @@
12467
12506
  "filename": "useModifiers.js",
12468
12507
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
12469
12508
  },
12470
- "order": 47,
12509
+ "order": 51,
12471
12510
  "level": 0
12472
12511
  },
12473
12512
  {
@@ -12480,7 +12519,7 @@
12480
12519
  "filename": "useIcon.js",
12481
12520
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
12482
12521
  },
12483
- "order": 49,
12522
+ "order": 53,
12484
12523
  "level": 0
12485
12524
  },
12486
12525
  {
@@ -12493,7 +12532,7 @@
12493
12532
  "filename": "useDocumentTitle.js",
12494
12533
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
12495
12534
  },
12496
- "order": 52,
12535
+ "order": 56,
12497
12536
  "level": 0
12498
12537
  },
12499
12538
  {
@@ -12506,7 +12545,7 @@
12506
12545
  "filename": "useBreakpointManager.js",
12507
12546
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
12508
12547
  },
12509
- "order": 54,
12548
+ "order": 58,
12510
12549
  "level": 0
12511
12550
  },
12512
12551
  {
@@ -12519,46 +12558,7 @@
12519
12558
  "filename": "index.js",
12520
12559
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
12521
12560
  },
12522
- "order": 59,
12523
- "level": 0
12524
- },
12525
- {
12526
- "id": "plugins\nResponsible for exporting all plugins\n- Used in bundle exportsmodule:",
12527
- "longname": "plugins\nResponsible for exporting all plugins\n- Used in bundle exportsmodule:",
12528
- "name": "plugins\nResponsible for exporting all plugins\n- Used in bundle exports",
12529
- "kind": "module",
12530
- "meta": {
12531
- "lineno": 1,
12532
- "filename": "index.js",
12533
- "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins"
12534
- },
12535
- "order": 60,
12536
- "level": 0
12537
- },
12538
- {
12539
- "id": "module:components",
12540
- "longname": "module:components",
12541
- "name": "components",
12542
- "kind": "module",
12543
- "meta": {
12544
- "lineno": 1,
12545
- "filename": "index.js",
12546
- "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components"
12547
- },
12548
- "order": 61,
12549
- "level": 0
12550
- },
12551
- {
12552
- "id": "components/index.js\nResponsible for exporting all components\n- Used in main plugin and bundle exportsmodule:",
12553
- "longname": "components/index.js\nResponsible for exporting all components\n- Used in main plugin and bundle exportsmodule:",
12554
- "name": "components/index.js\nResponsible for exporting all components\n- Used in main plugin and bundle exports",
12555
- "kind": "module",
12556
- "meta": {
12557
- "lineno": 4,
12558
- "filename": "index.js",
12559
- "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components"
12560
- },
12561
- "order": 62,
12561
+ "order": 63,
12562
12562
  "level": 0
12563
12563
  },
12564
12564
  {
@@ -12571,7 +12571,7 @@
12571
12571
  "filename": "useToast.js",
12572
12572
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/toast"
12573
12573
  },
12574
- "order": 63,
12574
+ "order": 64,
12575
12575
  "level": 0
12576
12576
  },
12577
12577
  {
@@ -12584,7 +12584,7 @@
12584
12584
  "filename": "store.js",
12585
12585
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/toast"
12586
12586
  },
12587
- "order": 65,
12587
+ "order": 66,
12588
12588
  "level": 0
12589
12589
  },
12590
12590
  {
@@ -12597,7 +12597,7 @@
12597
12597
  "filename": "index.js",
12598
12598
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/toast"
12599
12599
  },
12600
- "order": 72,
12600
+ "order": 73,
12601
12601
  "level": 0
12602
12602
  },
12603
12603
  {
@@ -12610,99 +12610,99 @@
12610
12610
  "filename": "defaults.js",
12611
12611
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/toast"
12612
12612
  },
12613
- "order": 74,
12613
+ "order": 75,
12614
12614
  "level": 0
12615
12615
  },
12616
12616
  {
12617
- "id": "module:useModals",
12618
- "longname": "module:useModals",
12619
- "name": "useModals",
12617
+ "id": "module:useTooltipFollow",
12618
+ "longname": "module:useTooltipFollow",
12619
+ "name": "useTooltipFollow",
12620
12620
  "kind": "module",
12621
12621
  "meta": {
12622
12622
  "lineno": 1,
12623
- "filename": "useModals.js",
12624
- "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/modals"
12623
+ "filename": "useTooltipFollow.js",
12624
+ "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
12625
12625
  },
12626
- "order": 80,
12626
+ "order": 81,
12627
12627
  "level": 0
12628
12628
  },
12629
12629
  {
12630
- "id": "module:modalsPlugin",
12631
- "longname": "module:modalsPlugin",
12632
- "name": "modalsPlugin",
12630
+ "id": "module:useTooltip",
12631
+ "longname": "module:useTooltip",
12632
+ "name": "useTooltip",
12633
12633
  "kind": "module",
12634
- "description": "Modals plugin (adds components, global registry, etc)\n- Updated version handles both independent and global registered/triggered modals",
12635
12634
  "meta": {
12636
12635
  "lineno": 1,
12637
- "filename": "index.js",
12638
- "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/modals"
12636
+ "filename": "useTooltip.js",
12637
+ "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
12639
12638
  },
12640
12639
  "order": 82,
12641
12640
  "level": 0
12642
12641
  },
12643
12642
  {
12644
- "id": "modals.module:api",
12645
- "longname": "modals.module:api",
12646
- "name": "api",
12643
+ "id": "module:popoversPlugin",
12644
+ "longname": "module:popoversPlugin",
12645
+ "name": "popoversPlugin",
12647
12646
  "kind": "module",
12648
12647
  "meta": {
12649
12648
  "lineno": 1,
12650
- "filename": "api.js",
12651
- "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/modals"
12649
+ "filename": "index.js",
12650
+ "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
12652
12651
  },
12653
- "order": 85,
12652
+ "order": 84,
12654
12653
  "level": 0
12655
12654
  },
12656
12655
  {
12657
- "id": "module:useTooltipFollow",
12658
- "longname": "module:useTooltipFollow",
12659
- "name": "useTooltipFollow",
12656
+ "id": "popovers.module:defaults",
12657
+ "longname": "popovers.module:defaults",
12658
+ "name": "defaults",
12660
12659
  "kind": "module",
12661
12660
  "meta": {
12662
12661
  "lineno": 1,
12663
- "filename": "useTooltipFollow.js",
12662
+ "filename": "defaults.js",
12664
12663
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
12665
12664
  },
12666
- "order": 94,
12667
- "level": 0
12665
+ "order": 90
12668
12666
  },
12669
12667
  {
12670
- "id": "module:useTooltip",
12671
- "longname": "module:useTooltip",
12672
- "name": "useTooltip",
12668
+ "id": "module:useModals",
12669
+ "longname": "module:useModals",
12670
+ "name": "useModals",
12673
12671
  "kind": "module",
12674
12672
  "meta": {
12675
12673
  "lineno": 1,
12676
- "filename": "useTooltip.js",
12677
- "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
12674
+ "filename": "useModals.js",
12675
+ "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/modals"
12678
12676
  },
12679
- "order": 95,
12677
+ "order": 112,
12680
12678
  "level": 0
12681
12679
  },
12682
12680
  {
12683
- "id": "module:popoversPlugin",
12684
- "longname": "module:popoversPlugin",
12685
- "name": "popoversPlugin",
12681
+ "id": "module:modalsPlugin",
12682
+ "longname": "module:modalsPlugin",
12683
+ "name": "modalsPlugin",
12686
12684
  "kind": "module",
12685
+ "description": "Modals plugin (adds components, global registry, etc)\n- Updated version handles both independent and global registered/triggered modals",
12687
12686
  "meta": {
12688
12687
  "lineno": 1,
12689
12688
  "filename": "index.js",
12690
- "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
12689
+ "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/modals"
12691
12690
  },
12692
- "order": 97,
12691
+ "order": 114,
12693
12692
  "level": 0
12694
12693
  },
12695
12694
  {
12696
- "id": "popovers.module:defaults",
12697
- "longname": "popovers.module:defaults",
12698
- "name": "defaults",
12695
+ "id": "modals.module:api",
12696
+ "longname": "modals.module:api",
12697
+ "name": "api",
12699
12698
  "kind": "module",
12700
12699
  "meta": {
12701
12700
  "lineno": 1,
12702
- "filename": "defaults.js",
12703
- "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
12701
+ "filename": "api.js",
12702
+ "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/modals"
12704
12703
  },
12705
- "order": 103
12704
+ "order": 117,
12705
+ "level": 0
12706
12706
  },
12707
12707
  {
12708
12708
  "id": "module:corePlugin",
@@ -12715,7 +12715,7 @@
12715
12715
  "filename": "index.js",
12716
12716
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/core"
12717
12717
  },
12718
- "order": 125,
12718
+ "order": 126,
12719
12719
  "level": 0
12720
12720
  },
12721
12721
  {
@@ -12728,7 +12728,7 @@
12728
12728
  "filename": "index.js",
12729
12729
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/breakpoints"
12730
12730
  },
12731
- "order": 127,
12731
+ "order": 128,
12732
12732
  "level": 0
12733
12733
  },
12734
12734
  {
@@ -12741,7 +12741,7 @@
12741
12741
  "filename": "index.js",
12742
12742
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems"
12743
12743
  },
12744
- "order": 132,
12744
+ "order": 133,
12745
12745
  "level": 0
12746
12746
  },
12747
12747
  {
@@ -12754,7 +12754,7 @@
12754
12754
  "filename": "useScrollAnchors.js",
12755
12755
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/scroll-anchors"
12756
12756
  },
12757
- "order": 133,
12757
+ "order": 134,
12758
12758
  "level": 0
12759
12759
  },
12760
12760
  {
@@ -12767,7 +12767,7 @@
12767
12767
  "filename": "useScrollAnchorSections.js",
12768
12768
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/scroll-anchors"
12769
12769
  },
12770
- "order": 143,
12770
+ "order": 144,
12771
12771
  "level": 0
12772
12772
  },
12773
12773
  {
@@ -12780,7 +12780,7 @@
12780
12780
  "filename": "useScrollAnchorSection.js",
12781
12781
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/scroll-anchors"
12782
12782
  },
12783
- "order": 145,
12783
+ "order": 146,
12784
12784
  "level": 0
12785
12785
  },
12786
12786
  {
@@ -12793,7 +12793,7 @@
12793
12793
  "filename": "useFacets.js",
12794
12794
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/facets"
12795
12795
  },
12796
- "order": 147,
12796
+ "order": 148,
12797
12797
  "level": 0
12798
12798
  },
12799
12799
  {
@@ -12809,79 +12809,79 @@
12809
12809
  "filename": "index.js",
12810
12810
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/toast"
12811
12811
  },
12812
- "order": 73,
12812
+ "order": 74,
12813
12813
  "level": 0
12814
12814
  },
12815
12815
  {
12816
- "id": "module:modalsPlugin--module.exports",
12817
- "longname": "module:modalsPlugin",
12816
+ "id": "module:popoversPlugin--module.exports",
12817
+ "longname": "module:popoversPlugin",
12818
12818
  "name": "module.exports",
12819
12819
  "kind": "function",
12820
12820
  "isExported": true,
12821
- "description": "Modals Vue Plugin",
12822
- "memberof": "module:modalsPlugin",
12821
+ "description": "Install the UluPopovers plugin.",
12822
+ "memberof": "module:popoversPlugin",
12823
12823
  "params": [
12824
12824
  {
12825
12825
  "type": {
12826
12826
  "names": [
12827
- "Object"
12827
+ "object"
12828
12828
  ]
12829
12829
  },
12830
- "description": "Vue app instance passed to plugin",
12831
- "name": "App"
12830
+ "description": "The Vue app instance.",
12831
+ "name": "app"
12832
12832
  },
12833
12833
  {
12834
12834
  "type": {
12835
12835
  "names": [
12836
- "module:modalsPlugin~UluModalsPluginOptions"
12836
+ "object"
12837
12837
  ]
12838
12838
  },
12839
- "description": "Options to change (see defaults)",
12839
+ "description": "User-defined options to override defaults.",
12840
12840
  "name": "userOptions"
12841
12841
  }
12842
12842
  ],
12843
12843
  "meta": {
12844
- "lineno": 28,
12844
+ "lineno": 58,
12845
12845
  "filename": "index.js",
12846
- "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/modals"
12846
+ "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
12847
12847
  },
12848
- "order": 84,
12848
+ "order": 89,
12849
12849
  "level": 0
12850
12850
  },
12851
12851
  {
12852
- "id": "module:popoversPlugin--module.exports",
12853
- "longname": "module:popoversPlugin",
12852
+ "id": "module:modalsPlugin--module.exports",
12853
+ "longname": "module:modalsPlugin",
12854
12854
  "name": "module.exports",
12855
12855
  "kind": "function",
12856
12856
  "isExported": true,
12857
- "description": "Install the UluPopovers plugin.",
12858
- "memberof": "module:popoversPlugin",
12857
+ "description": "Modals Vue Plugin",
12858
+ "memberof": "module:modalsPlugin",
12859
12859
  "params": [
12860
12860
  {
12861
12861
  "type": {
12862
12862
  "names": [
12863
- "object"
12863
+ "Object"
12864
12864
  ]
12865
12865
  },
12866
- "description": "The Vue app instance.",
12867
- "name": "app"
12866
+ "description": "Vue app instance passed to plugin",
12867
+ "name": "App"
12868
12868
  },
12869
12869
  {
12870
12870
  "type": {
12871
12871
  "names": [
12872
- "object"
12872
+ "module:modalsPlugin~UluModalsPluginOptions"
12873
12873
  ]
12874
12874
  },
12875
- "description": "User-defined options to override defaults.",
12875
+ "description": "Options to change (see defaults)",
12876
12876
  "name": "userOptions"
12877
12877
  }
12878
12878
  ],
12879
12879
  "meta": {
12880
- "lineno": 58,
12880
+ "lineno": 28,
12881
12881
  "filename": "index.js",
12882
- "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
12882
+ "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/modals"
12883
12883
  },
12884
- "order": 102,
12884
+ "order": 116,
12885
12885
  "level": 0
12886
12886
  },
12887
12887
  {
@@ -12958,7 +12958,7 @@
12958
12958
  "filename": "index.js",
12959
12959
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/core"
12960
12960
  },
12961
- "order": 126,
12961
+ "order": 127,
12962
12962
  "level": 0
12963
12963
  },
12964
12964
  {
@@ -13015,7 +13015,7 @@
13015
13015
  "filename": "index.js",
13016
13016
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/breakpoints"
13017
13017
  },
13018
- "order": 131,
13018
+ "order": 132,
13019
13019
  "level": 0
13020
13020
  },
13021
13021
  {
@@ -13031,7 +13031,7 @@
13031
13031
  "filename": "useBreakpointManager.js",
13032
13032
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
13033
13033
  },
13034
- "order": 55
13034
+ "order": 59
13035
13035
  },
13036
13036
  {
13037
13037
  "id": "module:useBreakpointManager~defaults.onReady",
@@ -13046,7 +13046,7 @@
13046
13046
  "filename": "useBreakpointManager.js",
13047
13047
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
13048
13048
  },
13049
- "order": 56
13049
+ "order": 60
13050
13050
  },
13051
13051
  {
13052
13052
  "id": "module:useBreakpointManager~defaults.plugin",
@@ -13061,7 +13061,7 @@
13061
13061
  "filename": "useBreakpointManager.js",
13062
13062
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
13063
13063
  },
13064
- "order": 57
13064
+ "order": 61
13065
13065
  },
13066
13066
  {
13067
13067
  "id": "toast.module:defaults--module.exports",
@@ -13077,7 +13077,7 @@
13077
13077
  "filename": "defaults.js",
13078
13078
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/toast"
13079
13079
  },
13080
- "order": 75,
13080
+ "order": 76,
13081
13081
  "level": 0
13082
13082
  },
13083
13083
  {
@@ -13093,7 +13093,7 @@
13093
13093
  "filename": "defaults.js",
13094
13094
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/toast"
13095
13095
  },
13096
- "order": 76
13096
+ "order": 77
13097
13097
  },
13098
13098
  {
13099
13099
  "id": "toast.module:defaults--module.exports.toastOptions.duration",
@@ -13108,7 +13108,7 @@
13108
13108
  "filename": "defaults.js",
13109
13109
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/toast"
13110
13110
  },
13111
- "order": 77
13111
+ "order": 78
13112
13112
  },
13113
13113
  {
13114
13114
  "id": "toast.module:defaults--module.exports.toastOptions.actions",
@@ -13123,7 +13123,7 @@
13123
13123
  "filename": "defaults.js",
13124
13124
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/toast"
13125
13125
  },
13126
- "order": 78
13126
+ "order": 79
13127
13127
  },
13128
13128
  {
13129
13129
  "id": "toast.module:defaults--module.exports.pluginOptions.position",
@@ -13138,7 +13138,7 @@
13138
13138
  "filename": "defaults.js",
13139
13139
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/toast"
13140
13140
  },
13141
- "order": 79
13141
+ "order": 80
13142
13142
  },
13143
13143
  {
13144
13144
  "id": "popovers.module:defaults.plugin",
@@ -13158,7 +13158,7 @@
13158
13158
  "filename": "defaults.js",
13159
13159
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13160
13160
  },
13161
- "order": 104
13161
+ "order": 91
13162
13162
  },
13163
13163
  {
13164
13164
  "id": "popovers.module:defaults.plugin.directiveName",
@@ -13178,7 +13178,7 @@
13178
13178
  "filename": "defaults.js",
13179
13179
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13180
13180
  },
13181
- "order": 105
13181
+ "order": 92
13182
13182
  },
13183
13183
  {
13184
13184
  "id": "popovers.module:defaults.popover",
@@ -13193,7 +13193,7 @@
13193
13193
  "filename": "defaults.js",
13194
13194
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13195
13195
  },
13196
- "order": 106
13196
+ "order": 93
13197
13197
  },
13198
13198
  {
13199
13199
  "id": "popovers.module:defaults.popover.inline",
@@ -13213,7 +13213,7 @@
13213
13213
  "filename": "defaults.js",
13214
13214
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13215
13215
  },
13216
- "order": 107
13216
+ "order": 94
13217
13217
  },
13218
13218
  {
13219
13219
  "id": "popovers.module:defaults.popover.delay",
@@ -13233,7 +13233,7 @@
13233
13233
  "filename": "defaults.js",
13234
13234
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13235
13235
  },
13236
- "order": 108
13236
+ "order": 95
13237
13237
  },
13238
13238
  {
13239
13239
  "id": "popovers.module:defaults.popover.placement",
@@ -13253,7 +13253,7 @@
13253
13253
  "filename": "defaults.js",
13254
13254
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13255
13255
  },
13256
- "order": 109
13256
+ "order": 96
13257
13257
  },
13258
13258
  {
13259
13259
  "id": "popovers.module:defaults.popover.strategy",
@@ -13273,7 +13273,7 @@
13273
13273
  "filename": "defaults.js",
13274
13274
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13275
13275
  },
13276
- "order": 110
13276
+ "order": 97
13277
13277
  },
13278
13278
  {
13279
13279
  "id": "popovers.module:defaults.popover.offset",
@@ -13293,7 +13293,7 @@
13293
13293
  "filename": "defaults.js",
13294
13294
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13295
13295
  },
13296
- "order": 111
13296
+ "order": 98
13297
13297
  },
13298
13298
  {
13299
13299
  "id": "popovers.module:defaults.popover.arrow",
@@ -13313,7 +13313,7 @@
13313
13313
  "filename": "defaults.js",
13314
13314
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13315
13315
  },
13316
- "order": 112
13316
+ "order": 99
13317
13317
  },
13318
13318
  {
13319
13319
  "id": "popovers.module:defaults.tooltip",
@@ -13333,7 +13333,7 @@
13333
13333
  "filename": "defaults.js",
13334
13334
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13335
13335
  },
13336
- "order": 113
13336
+ "order": 100
13337
13337
  },
13338
13338
  {
13339
13339
  "id": "popovers.module:defaults.tooltip.teleportTo",
@@ -13353,7 +13353,7 @@
13353
13353
  "filename": "defaults.js",
13354
13354
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13355
13355
  },
13356
- "order": 114
13356
+ "order": 101
13357
13357
  },
13358
13358
  {
13359
13359
  "id": "popovers.module:defaults.tooltip.class",
@@ -13375,7 +13375,7 @@
13375
13375
  "filename": "defaults.js",
13376
13376
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13377
13377
  },
13378
- "order": 115
13378
+ "order": 102
13379
13379
  },
13380
13380
  {
13381
13381
  "id": "popovers.module:defaults.tooltip.showEvents",
@@ -13395,7 +13395,7 @@
13395
13395
  "filename": "defaults.js",
13396
13396
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13397
13397
  },
13398
- "order": 116
13398
+ "order": 103
13399
13399
  },
13400
13400
  {
13401
13401
  "id": "popovers.module:defaults.tooltip.hideEvents",
@@ -13415,7 +13415,7 @@
13415
13415
  "filename": "defaults.js",
13416
13416
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13417
13417
  },
13418
- "order": 117
13418
+ "order": 104
13419
13419
  },
13420
13420
  {
13421
13421
  "id": "popovers.module:defaults.tooltip.isHtml",
@@ -13435,7 +13435,7 @@
13435
13435
  "filename": "defaults.js",
13436
13436
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13437
13437
  },
13438
- "order": 118
13438
+ "order": 105
13439
13439
  },
13440
13440
  {
13441
13441
  "id": "popovers.module:defaults.tooltip.trigger",
@@ -13456,7 +13456,7 @@
13456
13456
  "filename": "defaults.js",
13457
13457
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13458
13458
  },
13459
- "order": 119
13459
+ "order": 106
13460
13460
  },
13461
13461
  {
13462
13462
  "id": "popovers.module:defaults.tooltip.content",
@@ -13477,7 +13477,7 @@
13477
13477
  "filename": "defaults.js",
13478
13478
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13479
13479
  },
13480
- "order": 120
13480
+ "order": 107
13481
13481
  },
13482
13482
  {
13483
13483
  "id": "popovers.module:defaults.tooltip.delay",
@@ -13497,7 +13497,7 @@
13497
13497
  "filename": "defaults.js",
13498
13498
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13499
13499
  },
13500
- "order": 121
13500
+ "order": 108
13501
13501
  },
13502
13502
  {
13503
13503
  "id": "popovers.module:defaults.tooltip.onReady",
@@ -13512,7 +13512,7 @@
13512
13512
  "filename": "defaults.js",
13513
13513
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13514
13514
  },
13515
- "order": 122
13515
+ "order": 109
13516
13516
  },
13517
13517
  {
13518
13518
  "id": "popovers.module:defaults.tooltip.component",
@@ -13527,7 +13527,7 @@
13527
13527
  "filename": "defaults.js",
13528
13528
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13529
13529
  },
13530
- "order": 123
13530
+ "order": 110
13531
13531
  },
13532
13532
  {
13533
13533
  "id": "popovers.module:defaults.tooltip.componentProps",
@@ -13542,7 +13542,7 @@
13542
13542
  "filename": "defaults.js",
13543
13543
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13544
13544
  },
13545
- "order": 124
13545
+ "order": 111
13546
13546
  },
13547
13547
  {
13548
13548
  "id": "module:breakpointsPlugin--module.exports~defaults.breakpointMobile",
@@ -13557,7 +13557,7 @@
13557
13557
  "filename": "index.js",
13558
13558
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/breakpoints"
13559
13559
  },
13560
- "order": 129,
13560
+ "order": 130,
13561
13561
  "level": 0
13562
13562
  },
13563
13563
  {
@@ -13573,7 +13573,7 @@
13573
13573
  "filename": "index.js",
13574
13574
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/breakpoints"
13575
13575
  },
13576
- "order": 130,
13576
+ "order": 131,
13577
13577
  "level": 0
13578
13578
  },
13579
13579
  {
@@ -13612,7 +13612,7 @@
13612
13612
  "filename": "useToast.js",
13613
13613
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/toast"
13614
13614
  },
13615
- "order": 64,
13615
+ "order": 65,
13616
13616
  "level": 0
13617
13617
  },
13618
13618
  {
@@ -13628,7 +13628,7 @@
13628
13628
  "filename": "store.js",
13629
13629
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/toast"
13630
13630
  },
13631
- "order": 66,
13631
+ "order": 67,
13632
13632
  "level": 0
13633
13633
  },
13634
13634
  {
@@ -13644,43 +13644,7 @@
13644
13644
  "filename": "store.js",
13645
13645
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/toast"
13646
13646
  },
13647
- "order": 68,
13648
- "level": 0
13649
- },
13650
- {
13651
- "id": "module:useModals.useModals",
13652
- "longname": "module:useModals.useModals",
13653
- "name": "useModals",
13654
- "kind": "constant",
13655
- "scope": "static",
13656
- "description": "A composable to access the global modals API.\nThis is a simple wrapper around `inject('uluModals')` and throws an error if the plugin is not installed.",
13657
- "memberof": "module:useModals",
13658
- "returns": [
13659
- {
13660
- "type": {
13661
- "names": [
13662
- "object"
13663
- ]
13664
- },
13665
- "description": "The modals API with methods like `open`, `close`, `add`, `remove`, and `get`."
13666
- }
13667
- ],
13668
- "exceptions": [
13669
- {
13670
- "type": {
13671
- "names": [
13672
- "Error"
13673
- ]
13674
- },
13675
- "description": "If the modals plugin is not installed."
13676
- }
13677
- ],
13678
- "meta": {
13679
- "lineno": 13,
13680
- "filename": "useModals.js",
13681
- "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/modals"
13682
- },
13683
- "order": 81,
13647
+ "order": 69,
13684
13648
  "level": 0
13685
13649
  },
13686
13650
  {
@@ -13696,7 +13660,7 @@
13696
13660
  "filename": "index.js",
13697
13661
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13698
13662
  },
13699
- "order": 98,
13663
+ "order": 85,
13700
13664
  "level": 0
13701
13665
  },
13702
13666
  {
@@ -13712,7 +13676,7 @@
13712
13676
  "filename": "index.js",
13713
13677
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13714
13678
  },
13715
- "order": 99,
13679
+ "order": 86,
13716
13680
  "level": 0
13717
13681
  },
13718
13682
  {
@@ -13728,7 +13692,7 @@
13728
13692
  "filename": "index.js",
13729
13693
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13730
13694
  },
13731
- "order": 100,
13695
+ "order": 87,
13732
13696
  "level": 0
13733
13697
  },
13734
13698
  {
@@ -13775,7 +13739,43 @@
13775
13739
  "filename": "index.js",
13776
13740
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13777
13741
  },
13778
- "order": 101,
13742
+ "order": 88,
13743
+ "level": 0
13744
+ },
13745
+ {
13746
+ "id": "module:useModals.useModals",
13747
+ "longname": "module:useModals.useModals",
13748
+ "name": "useModals",
13749
+ "kind": "constant",
13750
+ "scope": "static",
13751
+ "description": "A composable to access the global modals API.\nThis is a simple wrapper around `inject('uluModals')` and throws an error if the plugin is not installed.",
13752
+ "memberof": "module:useModals",
13753
+ "returns": [
13754
+ {
13755
+ "type": {
13756
+ "names": [
13757
+ "object"
13758
+ ]
13759
+ },
13760
+ "description": "The modals API with methods like `open`, `close`, `add`, `remove`, and `get`."
13761
+ }
13762
+ ],
13763
+ "exceptions": [
13764
+ {
13765
+ "type": {
13766
+ "names": [
13767
+ "Error"
13768
+ ]
13769
+ },
13770
+ "description": "If the modals plugin is not installed."
13771
+ }
13772
+ ],
13773
+ "meta": {
13774
+ "lineno": 13,
13775
+ "filename": "useModals.js",
13776
+ "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/modals"
13777
+ },
13778
+ "order": 113,
13779
13779
  "level": 0
13780
13780
  },
13781
13781
  {
@@ -14541,6 +14541,55 @@
14541
14541
  "order": 23,
14542
14542
  "level": 0
14543
14543
  },
14544
+ {
14545
+ "id": "utils.module:props.mergeClassLookups",
14546
+ "longname": "utils.module:props.mergeClassLookups",
14547
+ "name": "mergeClassLookups",
14548
+ "kind": "function",
14549
+ "scope": "static",
14550
+ "description": "Merges multiple sources of class configuration objects (class lookups).\nSources are evaluated left-to-right (later sources override earlier ones).\n\nBehavior:\n- Object: Merges with the currently resolved classes.\n- Boolean (false): Clears the currently resolved classes to an empty object.\n- Function: Called with (resolved, defaults). Its return value replaces the resolved classes.",
14551
+ "memberof": "utils.module:props",
14552
+ "params": [
14553
+ {
14554
+ "type": {
14555
+ "names": [
14556
+ "Object"
14557
+ ]
14558
+ },
14559
+ "description": "The base default classes",
14560
+ "name": "defaults"
14561
+ },
14562
+ {
14563
+ "type": {
14564
+ "names": [
14565
+ "Object",
14566
+ "Boolean",
14567
+ "function"
14568
+ ]
14569
+ },
14570
+ "variable": true,
14571
+ "description": "The sources to merge",
14572
+ "name": "sources"
14573
+ }
14574
+ ],
14575
+ "returns": [
14576
+ {
14577
+ "type": {
14578
+ "names": [
14579
+ "Object"
14580
+ ]
14581
+ },
14582
+ "description": "The final resolved classes object"
14583
+ }
14584
+ ],
14585
+ "meta": {
14586
+ "lineno": 40,
14587
+ "filename": "props.js",
14588
+ "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/utils"
14589
+ },
14590
+ "order": 24,
14591
+ "level": 0
14592
+ },
14544
14593
  {
14545
14594
  "id": "utils.module:dom.refToElement",
14546
14595
  "longname": "utils.module:dom.refToElement",
@@ -14576,7 +14625,7 @@
14576
14625
  "filename": "dom.js",
14577
14626
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/utils"
14578
14627
  },
14579
- "order": 26,
14628
+ "order": 27,
14580
14629
  "level": 0
14581
14630
  },
14582
14631
  {
@@ -14615,7 +14664,7 @@
14615
14664
  "filename": "dom.js",
14616
14665
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/utils"
14617
14666
  },
14618
- "order": 27,
14667
+ "order": 28,
14619
14668
  "level": 0
14620
14669
  },
14621
14670
  {
@@ -14641,7 +14690,7 @@
14641
14690
  "filename": "useWindowResize.js",
14642
14691
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
14643
14692
  },
14644
- "order": 30,
14693
+ "order": 34,
14645
14694
  "level": 0
14646
14695
  },
14647
14696
  {
@@ -14695,7 +14744,7 @@
14695
14744
  "filename": "useUluFloating.js",
14696
14745
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
14697
14746
  },
14698
- "order": 34,
14747
+ "order": 38,
14699
14748
  "level": 0
14700
14749
  },
14701
14750
  {
@@ -14732,7 +14781,7 @@
14732
14781
  "filename": "useTableData.js",
14733
14782
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
14734
14783
  },
14735
- "order": 36,
14784
+ "order": 40,
14736
14785
  "level": 0
14737
14786
  },
14738
14787
  {
@@ -14764,7 +14813,7 @@
14764
14813
  "filename": "useRequiredInject.js",
14765
14814
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
14766
14815
  },
14767
- "order": 44,
14816
+ "order": 48,
14768
14817
  "level": 0
14769
14818
  },
14770
14819
  {
@@ -14810,7 +14859,7 @@
14810
14859
  "filename": "usePagination.js",
14811
14860
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
14812
14861
  },
14813
- "order": 46,
14862
+ "order": 50,
14814
14863
  "level": 0
14815
14864
  },
14816
14865
  {
@@ -14883,7 +14932,7 @@
14883
14932
  "filename": "useModifiers.js",
14884
14933
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
14885
14934
  },
14886
- "order": 48,
14935
+ "order": 52,
14887
14936
  "level": 0
14888
14937
  },
14889
14938
  {
@@ -14909,7 +14958,7 @@
14909
14958
  "filename": "useIcon.js",
14910
14959
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
14911
14960
  },
14912
- "order": 50,
14961
+ "order": 54,
14913
14962
  "level": 0
14914
14963
  },
14915
14964
  {
@@ -14979,7 +15028,7 @@
14979
15028
  "filename": "useDocumentTitle.js",
14980
15029
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
14981
15030
  },
14982
- "order": 53,
15031
+ "order": 57,
14983
15032
  "level": 0
14984
15033
  },
14985
15034
  {
@@ -15047,7 +15096,7 @@
15047
15096
  "filename": "useBreakpointManager.js",
15048
15097
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
15049
15098
  },
15050
- "order": 58,
15099
+ "order": 62,
15051
15100
  "level": 0
15052
15101
  },
15053
15102
  {
@@ -15078,7 +15127,7 @@
15078
15127
  "filename": "store.js",
15079
15128
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/toast"
15080
15129
  },
15081
- "order": 69
15130
+ "order": 70
15082
15131
  },
15083
15132
  {
15084
15133
  "id": "toast.module:store~api.remove",
@@ -15103,7 +15152,7 @@
15103
15152
  "filename": "store.js",
15104
15153
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/toast"
15105
15154
  },
15106
- "order": 70
15155
+ "order": 71
15107
15156
  },
15108
15157
  {
15109
15158
  "id": "toast.module:store~api.removeAll",
@@ -15118,7 +15167,7 @@
15118
15167
  "filename": "store.js",
15119
15168
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/toast"
15120
15169
  },
15121
- "order": 71
15170
+ "order": 72
15122
15171
  },
15123
15172
  {
15124
15173
  "id": "module:useTooltip.useTooltip",
@@ -15142,7 +15191,7 @@
15142
15191
  "filename": "useTooltip.js",
15143
15192
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
15144
15193
  },
15145
- "order": 96,
15194
+ "order": 83,
15146
15195
  "level": 0
15147
15196
  },
15148
15197
  {
@@ -15168,7 +15217,7 @@
15168
15217
  "filename": "useScrollAnchors.js",
15169
15218
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/scroll-anchors"
15170
15219
  },
15171
- "order": 134,
15220
+ "order": 135,
15172
15221
  "level": 0
15173
15222
  },
15174
15223
  {
@@ -15194,7 +15243,7 @@
15194
15243
  "filename": "useScrollAnchorSections.js",
15195
15244
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/scroll-anchors"
15196
15245
  },
15197
- "order": 144,
15246
+ "order": 145,
15198
15247
  "level": 0
15199
15248
  },
15200
15249
  {
@@ -15231,7 +15280,7 @@
15231
15280
  "filename": "useScrollAnchorSection.js",
15232
15281
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/scroll-anchors"
15233
15282
  },
15234
- "order": 146,
15283
+ "order": 147,
15235
15284
  "level": 0
15236
15285
  },
15237
15286
  {
@@ -15403,7 +15452,7 @@
15403
15452
  "filename": "useFacets.js",
15404
15453
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/facets"
15405
15454
  },
15406
- "order": 152,
15455
+ "order": 153,
15407
15456
  "level": 0
15408
15457
  },
15409
15458
  {
@@ -15419,7 +15468,7 @@
15419
15468
  "filename": "store.js",
15420
15469
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/toast"
15421
15470
  },
15422
- "order": 67,
15471
+ "order": 68,
15423
15472
  "level": 0
15424
15473
  },
15425
15474
  {
@@ -15435,7 +15484,7 @@
15435
15484
  "filename": "api.js",
15436
15485
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/modals"
15437
15486
  },
15438
- "order": 87,
15487
+ "order": 119,
15439
15488
  "level": 0
15440
15489
  },
15441
15490
  {
@@ -15451,7 +15500,7 @@
15451
15500
  "filename": "api.js",
15452
15501
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/modals"
15453
15502
  },
15454
- "order": 88,
15503
+ "order": 120,
15455
15504
  "level": 0
15456
15505
  },
15457
15506
  {
@@ -15485,7 +15534,7 @@
15485
15534
  "filename": "useTableData.js",
15486
15535
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
15487
15536
  },
15488
- "order": 42,
15537
+ "order": 46,
15489
15538
  "level": 0
15490
15539
  },
15491
15540
  {
@@ -15502,7 +15551,7 @@
15502
15551
  "filename": "api.js",
15503
15552
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/modals"
15504
15553
  },
15505
- "order": 86,
15554
+ "order": 118,
15506
15555
  "level": 0
15507
15556
  },
15508
15557
  {
@@ -15519,7 +15568,7 @@
15519
15568
  "filename": "api.js",
15520
15569
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/modals"
15521
15570
  },
15522
- "order": 89,
15571
+ "order": 121,
15523
15572
  "level": 0
15524
15573
  },
15525
15574
  {
@@ -15536,7 +15585,7 @@
15536
15585
  "filename": "index.js",
15537
15586
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/breakpoints"
15538
15587
  },
15539
- "order": 128,
15588
+ "order": 129,
15540
15589
  "level": 0
15541
15590
  },
15542
15591
  {
@@ -15553,7 +15602,7 @@
15553
15602
  "filename": "useScrollAnchors.js",
15554
15603
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/scroll-anchors"
15555
15604
  },
15556
- "order": 141,
15605
+ "order": 142,
15557
15606
  "level": 0
15558
15607
  },
15559
15608
  {
@@ -15598,7 +15647,7 @@
15598
15647
  "filename": "useWindowResize.js",
15599
15648
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
15600
15649
  },
15601
- "order": 29,
15650
+ "order": 33,
15602
15651
  "level": 0
15603
15652
  },
15604
15653
  {
@@ -15615,7 +15664,7 @@
15615
15664
  "filename": "useTableData.js",
15616
15665
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
15617
15666
  },
15618
- "order": 37,
15667
+ "order": 41,
15619
15668
  "level": 0
15620
15669
  },
15621
15670
  {
@@ -15632,7 +15681,7 @@
15632
15681
  "filename": "useTableData.js",
15633
15682
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
15634
15683
  },
15635
- "order": 38,
15684
+ "order": 42,
15636
15685
  "level": 0
15637
15686
  },
15638
15687
  {
@@ -15649,7 +15698,7 @@
15649
15698
  "filename": "useTableData.js",
15650
15699
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
15651
15700
  },
15652
- "order": 39,
15701
+ "order": 43,
15653
15702
  "level": 0
15654
15703
  },
15655
15704
  {
@@ -15666,7 +15715,7 @@
15666
15715
  "filename": "useTableData.js",
15667
15716
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
15668
15717
  },
15669
- "order": 40,
15718
+ "order": 44,
15670
15719
  "level": 0
15671
15720
  },
15672
15721
  {
@@ -15683,7 +15732,7 @@
15683
15732
  "filename": "useTableData.js",
15684
15733
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
15685
15734
  },
15686
- "order": 41,
15735
+ "order": 45,
15687
15736
  "level": 0
15688
15737
  },
15689
15738
  {
@@ -15723,7 +15772,7 @@
15723
15772
  "filename": "useIcon.js",
15724
15773
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
15725
15774
  },
15726
- "order": 51,
15775
+ "order": 55,
15727
15776
  "level": 0
15728
15777
  },
15729
15778
  {
@@ -15754,7 +15803,7 @@
15754
15803
  "filename": "api.js",
15755
15804
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/modals"
15756
15805
  },
15757
- "order": 90,
15806
+ "order": 122,
15758
15807
  "level": 0
15759
15808
  },
15760
15809
  {
@@ -15780,7 +15829,7 @@
15780
15829
  "filename": "api.js",
15781
15830
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/modals"
15782
15831
  },
15783
- "order": 91,
15832
+ "order": 123,
15784
15833
  "level": 0
15785
15834
  },
15786
15835
  {
@@ -15796,7 +15845,7 @@
15796
15845
  "filename": "api.js",
15797
15846
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/modals"
15798
15847
  },
15799
- "order": 92,
15848
+ "order": 124,
15800
15849
  "level": 0
15801
15850
  },
15802
15851
  {
@@ -15822,7 +15871,7 @@
15822
15871
  "filename": "api.js",
15823
15872
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/modals"
15824
15873
  },
15825
- "order": 93,
15874
+ "order": 125,
15826
15875
  "level": 0
15827
15876
  },
15828
15877
  {
@@ -15839,7 +15888,7 @@
15839
15888
  "filename": "useScrollAnchors.js",
15840
15889
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/scroll-anchors"
15841
15890
  },
15842
- "order": 135,
15891
+ "order": 136,
15843
15892
  "level": 0
15844
15893
  },
15845
15894
  {
@@ -15856,7 +15905,7 @@
15856
15905
  "filename": "useScrollAnchors.js",
15857
15906
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/scroll-anchors"
15858
15907
  },
15859
- "order": 136,
15908
+ "order": 137,
15860
15909
  "level": 0
15861
15910
  },
15862
15911
  {
@@ -15873,7 +15922,7 @@
15873
15922
  "filename": "useScrollAnchors.js",
15874
15923
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/scroll-anchors"
15875
15924
  },
15876
- "order": 137,
15925
+ "order": 138,
15877
15926
  "level": 0
15878
15927
  },
15879
15928
  {
@@ -15890,7 +15939,7 @@
15890
15939
  "filename": "useScrollAnchors.js",
15891
15940
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/scroll-anchors"
15892
15941
  },
15893
- "order": 138,
15942
+ "order": 139,
15894
15943
  "level": 0
15895
15944
  },
15896
15945
  {
@@ -15907,7 +15956,7 @@
15907
15956
  "filename": "useScrollAnchors.js",
15908
15957
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/scroll-anchors"
15909
15958
  },
15910
- "order": 139,
15959
+ "order": 140,
15911
15960
  "level": 0
15912
15961
  },
15913
15962
  {
@@ -15924,7 +15973,7 @@
15924
15973
  "filename": "useScrollAnchors.js",
15925
15974
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/scroll-anchors"
15926
15975
  },
15927
- "order": 140,
15976
+ "order": 141,
15928
15977
  "level": 0
15929
15978
  },
15930
15979
  {
@@ -15941,7 +15990,7 @@
15941
15990
  "filename": "useScrollAnchors.js",
15942
15991
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/scroll-anchors"
15943
15992
  },
15944
- "order": 142,
15993
+ "order": 143,
15945
15994
  "level": 0
15946
15995
  },
15947
15996
  {
@@ -15978,7 +16027,7 @@
15978
16027
  "filename": "useFacets.js",
15979
16028
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/facets"
15980
16029
  },
15981
- "order": 148,
16030
+ "order": 149,
15982
16031
  "level": 0
15983
16032
  },
15984
16033
  {
@@ -16015,7 +16064,7 @@
16015
16064
  "filename": "useFacets.js",
16016
16065
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/facets"
16017
16066
  },
16018
- "order": 149,
16067
+ "order": 150,
16019
16068
  "level": 0
16020
16069
  },
16021
16070
  {
@@ -16070,7 +16119,7 @@
16070
16119
  "filename": "useFacets.js",
16071
16120
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/facets"
16072
16121
  },
16073
- "order": 150,
16122
+ "order": 151,
16074
16123
  "level": 0
16075
16124
  },
16076
16125
  {
@@ -16116,7 +16165,7 @@
16116
16165
  "filename": "useFacets.js",
16117
16166
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/facets"
16118
16167
  },
16119
- "order": 151,
16168
+ "order": 152,
16120
16169
  "level": 0
16121
16170
  },
16122
16171
  {
@@ -16177,7 +16226,7 @@
16177
16226
  "filename": "useUluFloating.js",
16178
16227
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
16179
16228
  },
16180
- "order": 32,
16229
+ "order": 36,
16181
16230
  "level": 0
16182
16231
  },
16183
16232
  {
@@ -16264,7 +16313,7 @@
16264
16313
  "filename": "useUluFloating.js",
16265
16314
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
16266
16315
  },
16267
- "order": 33,
16316
+ "order": 37,
16268
16317
  "level": 0
16269
16318
  },
16270
16319
  {
@@ -16305,7 +16354,7 @@
16305
16354
  "filename": "index.js",
16306
16355
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/modals"
16307
16356
  },
16308
- "order": 83,
16357
+ "order": 115,
16309
16358
  "level": 0
16310
16359
  }
16311
16360
  ],