@ulu/frontend-vue 0.6.23 → 0.6.24

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.
Files changed (67) hide show
  1. package/dist/components/collapsible/UluAccordion.vue.d.ts +2 -2
  2. package/dist/components/collapsible/UluModal.vue.d.ts +4 -4
  3. package/dist/components/collapsible/UluTabGroup.vue.d.ts +2 -2
  4. package/dist/components/elements/UluAlert.vue.d.ts +2 -2
  5. package/dist/components/elements/UluBadge.vue.d.ts +4 -4
  6. package/dist/components/elements/UluButton.vue.d.ts +10 -10
  7. package/dist/components/elements/UluButtonVerbose.vue.d.ts +4 -4
  8. package/dist/components/elements/UluCaptionedFigure.vue.d.ts +2 -2
  9. package/dist/components/elements/UluCard.vue.d.ts +4 -4
  10. package/dist/components/elements/UluList.vue.d.ts +2 -2
  11. package/dist/components/elements/UluSlider.vue.d.ts +2 -2
  12. package/dist/components/elements/UluTag.vue.d.ts +2 -2
  13. package/dist/components/forms/UluSearchForm.vue.d.ts +2 -2
  14. package/dist/components/layout/UluTitleRail.vue.d.ts +2 -2
  15. package/dist/components/systems/facets/UluFacetsList.vue.d.ts +2 -2
  16. package/dist/components/systems/facets/UluFacetsSearch.vue.d.ts +2 -2
  17. package/dist/components/utils/UluAction.vue.d.ts +2 -2
  18. package/dist/components/visualizations/UluProgressBar.vue.d.ts +2 -2
  19. package/dist/components/visualizations/UluProgressCircle.vue.d.ts +2 -2
  20. package/dist/composables/useUluFloating.d.ts.map +1 -1
  21. package/dist/composables/useUluFloating.js +26 -25
  22. package/dist/index.js +258 -240
  23. package/dist/mcp-data.json +1047 -381
  24. package/dist/plugins/index.d.ts +2 -1
  25. package/dist/plugins/popovers/UluPopover.vue.d.ts +188 -7
  26. package/dist/plugins/popovers/UluPopover.vue.d.ts.map +1 -1
  27. package/dist/plugins/popovers/UluPopover.vue.js +82 -133
  28. package/dist/plugins/popovers/UluPopoverBase.vue.d.ts +58 -0
  29. package/dist/plugins/popovers/UluPopoverBase.vue.d.ts.map +1 -0
  30. package/dist/plugins/popovers/UluPopoverBase.vue.js +146 -0
  31. package/dist/plugins/popovers/UluTooltipPopover.vue.d.ts +1 -4
  32. package/dist/plugins/popovers/UluTooltipPopover.vue.d.ts.map +1 -1
  33. package/dist/plugins/popovers/UluTooltipPopover.vue.js +24 -45
  34. package/dist/plugins/popovers/index.d.ts +4 -0
  35. package/dist/plugins/popovers/index.d.ts.map +1 -1
  36. package/dist/plugins/popovers/index.js +54 -49
  37. package/dist/plugins/tour/UluTourContent.vue.d.ts +10 -0
  38. package/dist/plugins/tour/UluTourContent.vue.d.ts.map +1 -0
  39. package/dist/plugins/tour/UluTourContent.vue.js +39 -0
  40. package/dist/plugins/tour/UluTourDisplay.vue.d.ts +100 -0
  41. package/dist/plugins/tour/UluTourDisplay.vue.d.ts.map +1 -0
  42. package/dist/plugins/tour/UluTourDisplay.vue.js +133 -0
  43. package/dist/plugins/tour/UluTourPager.vue.d.ts +3 -0
  44. package/dist/plugins/tour/UluTourPager.vue.d.ts.map +1 -0
  45. package/dist/plugins/tour/UluTourPager.vue.js +31 -0
  46. package/dist/plugins/tour/api.d.ts +52 -0
  47. package/dist/plugins/tour/api.d.ts.map +1 -0
  48. package/dist/plugins/tour/api.js +52 -0
  49. package/dist/plugins/tour/index.d.ts +7 -0
  50. package/dist/plugins/tour/index.d.ts.map +1 -0
  51. package/dist/plugins/tour/index.js +14 -0
  52. package/dist/plugins/tour/useTour.d.ts +8 -0
  53. package/dist/plugins/tour/useTour.d.ts.map +1 -0
  54. package/dist/plugins/tour/useTour.js +8 -0
  55. package/lib/composables/useUluFloating.js +2 -0
  56. package/lib/plugins/index.js +3 -3
  57. package/lib/plugins/popovers/UluPopover.vue +42 -125
  58. package/lib/plugins/popovers/UluPopoverBase.vue +197 -0
  59. package/lib/plugins/popovers/UluTooltipPopover.vue +11 -33
  60. package/lib/plugins/popovers/index.js +15 -5
  61. package/lib/plugins/tour/UluTourContent.vue +37 -0
  62. package/lib/plugins/tour/UluTourDisplay.vue +182 -0
  63. package/lib/plugins/tour/UluTourPager.vue +36 -0
  64. package/lib/plugins/tour/api.js +83 -0
  65. package/lib/plugins/tour/index.js +29 -0
  66. package/lib/plugins/tour/useTour.js +10 -0
  67. package/package.json +1 -1
@@ -20,65 +20,13 @@
20
20
  }
21
21
  ],
22
22
  "useDocumentTitle": [],
23
- "useTooltipFollow": [
24
- {
25
- "title": "Default",
26
- "description": "Default variation",
27
- "code": "<useTooltipFollow>Content</useTooltipFollow>"
28
- }
29
- ],
30
- "useTooltip": [],
31
- "tooltip": [
32
- {
33
- "title": "Basic",
34
- "description": "Basic variation",
35
- "code": "<tooltip>This is a basic tooltip!</tooltip>"
36
- }
37
- ],
38
- "UluPopover": [],
39
- "toast": [
40
- {
41
- "title": "Default",
42
- "description": "Default variation",
43
- "code": "<toast>Content</toast>"
44
- }
45
- ],
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
- ],
79
23
  "UluProgressCircle": [],
80
24
  "UluProgressBar": [],
81
25
  "UluAnimateNumber": [],
26
+ "UluWhenBreakpoint": [],
27
+ "UluTitleRail": [],
28
+ "UluDataGrid": [],
29
+ "UluAdaptiveLayout": [],
82
30
  "UluSkipLink": [
83
31
  {
84
32
  "title": "Default",
@@ -151,10 +99,6 @@
151
99
  "code": "<UluBreadcrumb items=\"{...}\">Content</UluBreadcrumb>"
152
100
  }
153
101
  ],
154
- "UluWhenBreakpoint": [],
155
- "UluTitleRail": [],
156
- "UluDataGrid": [],
157
- "UluAdaptiveLayout": [],
158
102
  "UluSanityRichText": [],
159
103
  "UluRouteAnnouncer": [],
160
104
  "UluPlaceholderText": [],
@@ -211,6 +155,78 @@
211
155
  "UluFormActions": [],
212
156
  "UluForm": [],
213
157
  "UluFileDisplay": [],
158
+ "tour": [
159
+ {
160
+ "title": "tour Example 1",
161
+ "description": "Code example extracted from markdown.",
162
+ "code": "import UluTour from \"@ulu/frontend-vue/plugins/tour/index.js\";\n\n//...\n\napp.use(UluTour);"
163
+ },
164
+ {
165
+ "title": "tour Example 2",
166
+ "description": "Code example extracted from markdown.",
167
+ "code": "<template>\n <div id=\"app\">\n <router-view />\n <UluTourDisplay />\n </div>\n</template>"
168
+ },
169
+ {
170
+ "title": "tour Example 3",
171
+ "description": "Code example extracted from markdown.",
172
+ "code": "const demoTour = {\n name: 'demo-tour',\n popoverProps: { modifiers: 'large' }, // Global popover styling for all steps\n steps: [\n {\n title: 'Welcome!',\n content: 'This step is a modal because it has no target element. Click next to continue.',\n modalProps: { size: 'small' } // Step-specific override\n },\n {\n target: '#step-1-btn',\n title: 'First Feature',\n content: 'This points to a simple button.',\n placement: 'bottom'\n }\n ]\n};"
173
+ },
174
+ {
175
+ "title": "tour Example 4",
176
+ "description": "Code example extracted from markdown.",
177
+ "code": "<template>\n <button @click=\"startTour\">Start Tour</button>\n</template>\n\n<script setup>\n import { useTour } from \"@ulu/frontend-vue\";\n\n const { api } = useTour();\n\n const startTour = () => {\n api.start(demoTour);\n };\n</script>"
178
+ },
179
+ {
180
+ "title": "tour Example 5",
181
+ "description": "Code example extracted from markdown.",
182
+ "code": "this.$uluTour.start(demoTour);\nthis.$uluTour.next();\nthis.$uluTour.prev();\nthis.$uluTour.stop();"
183
+ },
184
+ {
185
+ "title": "tour Example 6",
186
+ "description": "Code example extracted from markdown.",
187
+ "code": "<template>\n <div style=\"text-align: center;\">\n <img src=\"/logo.png\" />\n <p>This is my custom graphic step.</p>\n </div>\n</template>"
188
+ },
189
+ {
190
+ "title": "tour Example 7",
191
+ "description": "Code example extracted from markdown.",
192
+ "code": "<template>\n <div class=\"my-custom-floating-drawer\">\n <h3>Custom Design</h3>\n <!-- Wire up your own buttons -->\n <button @click=\"api.next()\">Got it!</button>\n </div>\n</template>\n\n<script setup>\n import { useTour } from \"@ulu/frontend-vue\";\n const { api } = useTour();\n</script>"
193
+ }
194
+ ],
195
+ "UluTabGroup": [
196
+ {
197
+ "title": "Default",
198
+ "description": "Default variation",
199
+ "code": "<UluTabGroup>Content</UluTabGroup>"
200
+ },
201
+ {
202
+ "title": "Vertical",
203
+ "description": "Vertical variation",
204
+ "code": "<UluTabGroup vertical>Content</UluTabGroup>"
205
+ },
206
+ {
207
+ "title": "DefaultIndex",
208
+ "description": "DefaultIndex variation",
209
+ "code": "<UluTabGroup :defaultIndex=\"2\">Content</UluTabGroup>"
210
+ },
211
+ {
212
+ "title": "FullWidth",
213
+ "description": "FullWidth variation",
214
+ "code": "<UluTabGroup modifiers=\"{...}\">Content</UluTabGroup>"
215
+ }
216
+ ],
217
+ "UluOverflowPopover": [],
218
+ "UluModal": [],
219
+ "UluDropdown": [],
220
+ "UluCollapsible": [],
221
+ "UluAccordionGroup": [],
222
+ "UluAccordion": [],
223
+ "toast": [
224
+ {
225
+ "title": "Default",
226
+ "description": "Default variation",
227
+ "code": "<toast>Content</toast>"
228
+ }
229
+ ],
214
230
  "UluTag": [],
215
231
  "UluTable": [
216
232
  {
@@ -434,34 +450,55 @@
434
450
  }
435
451
  ],
436
452
  "UluAlert": [],
437
- "UluTabGroup": [
453
+ "useTooltipFollow": [
438
454
  {
439
455
  "title": "Default",
440
456
  "description": "Default variation",
441
- "code": "<UluTabGroup>Content</UluTabGroup>"
457
+ "code": "<useTooltipFollow>Content</useTooltipFollow>"
458
+ }
459
+ ],
460
+ "useTooltip": [],
461
+ "tooltip": [
462
+ {
463
+ "title": "Basic",
464
+ "description": "Basic variation",
465
+ "code": "<tooltip>This is a basic tooltip!</tooltip>"
466
+ }
467
+ ],
468
+ "UluPopover": [],
469
+ "useModals": [],
470
+ "modals": [
471
+ {
472
+ "title": "GlobalApiTest",
473
+ "description": "GlobalApiTest variation",
474
+ "code": "<modals>Content</modals>"
442
475
  },
443
476
  {
444
- "title": "Vertical",
445
- "description": "Vertical variation",
446
- "code": "<UluTabGroup vertical>Content</UluTabGroup>"
477
+ "title": "modals Example 1",
478
+ "description": "Code example extracted from markdown.",
479
+ "code": "<template>\n <UluModal>\n User setting modal…\n </UluModal>\n</template>"
447
480
  },
448
481
  {
449
- "title": "DefaultIndex",
450
- "description": "DefaultIndex variation",
451
- "code": "<UluTabGroup :defaultIndex=\"2\">Content</UluTabGroup>"
482
+ "title": "modals Example 2",
483
+ "description": "Code example extracted from markdown.",
484
+ "code": "import { defineAsyncComponent } from \"vue\";\n\nexport default [\n {\n name: \"settings\",\n component: defineAsyncComponent(() => import('./components/modals/UserSettingsModal.vue')),\n }\n]"
452
485
  },
453
486
  {
454
- "title": "FullWidth",
455
- "description": "FullWidth variation",
456
- "code": "<UluTabGroup modifiers=\"{...}\">Content</UluTabGroup>"
487
+ "title": "modals Example 3",
488
+ "description": "Code example extracted from markdown.",
489
+ "code": "import UluModals from \"@ulu/frontend-vue/plugins/modals/index.js\";\nimport modals from \"./src/modals.js\";\n\n//...\n\napp.use(UluModals, { modals });"
490
+ },
491
+ {
492
+ "title": "modals Example 4",
493
+ "description": "Code example extracted from markdown.",
494
+ "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\""
495
+ },
496
+ {
497
+ "title": "modals Example 5",
498
+ "description": "Code example extracted from markdown.",
499
+ "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>"
457
500
  }
458
501
  ],
459
- "UluOverflowPopover": [],
460
- "UluModal": [],
461
- "UluDropdown": [],
462
- "UluCollapsible": [],
463
- "UluAccordionGroup": [],
464
- "UluAccordion": [],
465
502
  "UluTableSticky": [
466
503
  {
467
504
  "title": "Default",
@@ -469,6 +506,10 @@
469
506
  "code": "<UluTableSticky columns=\"{...}\" rows=\"{...}\" caption=\"Example Sticky Table\" scrollControls>Content</UluTableSticky>"
470
507
  }
471
508
  ],
509
+ "UluScrollAnchorsNavAnimated": [],
510
+ "UluScrollAnchorsNav": [],
511
+ "UluScrollAnchorsHeadlessSection": [],
512
+ "UluScrollAnchors": [],
472
513
  "UluSkeletonText": [],
473
514
  "UluSkeletonMedia": [],
474
515
  "UluSkeletonContent": [],
@@ -480,10 +521,6 @@
480
521
  "code": "<CardExample horizontal>Content</CardExample>"
481
522
  }
482
523
  ],
483
- "UluScrollAnchorsNavAnimated": [],
484
- "UluScrollAnchorsNav": [],
485
- "UluScrollAnchorsHeadlessSection": [],
486
- "UluScrollAnchors": [],
487
524
  "facets-router": [
488
525
  {
489
526
  "title": "Default",
@@ -645,6 +682,13 @@
645
682
  }
646
683
  ],
647
684
  "forms": [],
685
+ "facets": [
686
+ {
687
+ "title": "facets Example 1",
688
+ "description": "Code example extracted from markdown.",
689
+ "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>"
690
+ }
691
+ ],
648
692
  "useScrollAnchors": [
649
693
  {
650
694
  "title": "useScrollAnchors Example 1",
@@ -665,16 +709,39 @@
665
709
  "description": "Code example extracted from markdown.",
666
710
  "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>"
667
711
  }
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
712
  ]
676
713
  },
677
714
  "configuration": {
715
+ "UluTourPager": {
716
+ "description": "Vue Component Props, Emits, and Slots for UluTourPager",
717
+ "properties": [],
718
+ "events": [],
719
+ "slots": []
720
+ },
721
+ "UluTourDisplay": {
722
+ "description": "Vue Component Props, Emits, and Slots for UluTourDisplay",
723
+ "properties": [],
724
+ "events": [],
725
+ "slots": []
726
+ },
727
+ "UluTourContent": {
728
+ "description": "Vue Component Props, Emits, and Slots for UluTourContent",
729
+ "properties": [
730
+ {
731
+ "name": "step",
732
+ "type": "object",
733
+ "description": "The tour step configuration object"
734
+ },
735
+ {
736
+ "name": "isModal",
737
+ "type": "boolean",
738
+ "default": "false",
739
+ "description": "Adjusts the typography to match a modal context rather than a popover context"
740
+ }
741
+ ],
742
+ "events": [],
743
+ "slots": []
744
+ },
678
745
  "UluToastDisplay": {
679
746
  "description": "Vue Component Props, Emits, and Slots for UluToastDisplay",
680
747
  "properties": [],
@@ -732,73 +799,134 @@
732
799
  "events": [],
733
800
  "slots": []
734
801
  },
735
- "UluPopover": {
736
- "description": "Vue Component Props, Emits, and Slots for UluPopover",
802
+ "UluPopoverBase": {
803
+ "description": "Vue Component Props, Emits, and Slots for UluPopoverBase",
737
804
  "properties": [
738
805
  {
739
- "name": "triggerText",
740
- "type": "string",
741
- "description": "Text for popover button"
742
- },
743
- {
744
- "name": "triggerAlt",
745
- "type": "string",
746
- "description": "Add optional aria-label to button for icons/etc"
806
+ "name": "isOpen",
807
+ "type": "boolean",
808
+ "default": "false",
809
+ "description": "Controls the open/active state of the popover"
747
810
  },
748
811
  {
749
- "name": "disabled",
812
+ "name": "clickOutsideCloses",
750
813
  "type": "boolean",
751
- "description": "Disable trigger button"
814
+ "default": "true",
815
+ "description": "Close popover when click is outside"
752
816
  },
753
817
  {
754
- "name": "tooltip",
755
- "type": "string",
756
- "description": "Tooltip text for trigger button"
818
+ "name": "escapeCloses",
819
+ "type": "boolean",
820
+ "default": "true",
821
+ "description": "Close popover when escape key is pressed"
757
822
  },
758
823
  {
759
- "name": "size",
760
- "type": "string",
761
- "description": "Popover size (ie large, etc)"
824
+ "name": "directFocus",
825
+ "type": "func",
826
+ "default": "({ isOpen, trigger, content }) => {\n if (isOpen && content) {\n content.focus({ preventScroll: true });\n } else if (!isOpen && trigger && trigger instanceof HTMLElement) {\n // Note: using nextTick prevents scroll jumping in some cases\n trigger.focus({ preventScroll: true });\n }\n}",
827
+ "description": "Direct focus when open/closing popover"
762
828
  },
763
829
  {
764
- "name": "noPadding",
765
- "type": "boolean",
766
- "description": "No padding on popover content"
830
+ "name": "trigger",
831
+ "type": "object",
832
+ "default": "null",
833
+ "description": "The target element for the popover to float alongside"
767
834
  },
768
835
  {
769
836
  "name": "config",
770
837
  "type": "object",
771
838
  "default": "{}",
772
- "description": "Floating UI config (merged with defaults for popover)\n- See useUluFloating() composable for config API"
839
+ "description": "Floating UI configuration"
773
840
  },
774
841
  {
775
- "name": "startOpen",
776
- "type": "boolean",
777
- "description": "Mount this component already open state"
778
- },
842
+ "name": "modifiers",
843
+ "type": "string|array|object",
844
+ "description": "Modifiers (to add any modifier classes based on base class [ie. 'large'])"
845
+ }
846
+ ],
847
+ "events": [
779
848
  {
780
- "name": "activeClass",
781
- "type": "string",
849
+ "name": "close",
850
+ "description": ""
851
+ }
852
+ ],
853
+ "slots": [
854
+ {
855
+ "name": "default",
856
+ "description": ""
857
+ },
858
+ {
859
+ "name": "footer",
860
+ "description": ""
861
+ }
862
+ ]
863
+ },
864
+ "UluPopover": {
865
+ "description": "Vue Component Props, Emits, and Slots for UluPopover",
866
+ "properties": [
867
+ {
868
+ "name": "triggerText",
869
+ "type": "string",
870
+ "description": ""
871
+ },
872
+ {
873
+ "name": "triggerAlt",
874
+ "type": "string",
875
+ "description": ""
876
+ },
877
+ {
878
+ "name": "disabled",
879
+ "type": "boolean",
880
+ "description": ""
881
+ },
882
+ {
883
+ "name": "tooltip",
884
+ "type": "string",
885
+ "description": ""
886
+ },
887
+ {
888
+ "name": "size",
889
+ "type": "string",
890
+ "description": ""
891
+ },
892
+ {
893
+ "name": "noPadding",
894
+ "type": "boolean",
895
+ "description": ""
896
+ },
897
+ {
898
+ "name": "config",
899
+ "type": "object",
900
+ "default": "{}",
901
+ "description": ""
902
+ },
903
+ {
904
+ "name": "startOpen",
905
+ "type": "boolean",
906
+ "description": ""
907
+ },
908
+ {
909
+ "name": "activeClass",
910
+ "type": "string",
782
911
  "default": "\"is-active\"",
783
- "description": "Active class for trigger button"
912
+ "description": ""
784
913
  },
785
914
  {
786
915
  "name": "classes",
787
916
  "type": "object",
788
917
  "default": "{}",
789
- "description": "Add custom classes to specific elements\n{ trigger, content }"
918
+ "description": ""
790
919
  },
791
920
  {
792
921
  "name": "clickOutsideCloses",
793
922
  "type": "boolean",
794
923
  "default": "true",
795
- "description": "Close popover when click is outside"
924
+ "description": ""
796
925
  },
797
926
  {
798
927
  "name": "directFocus",
799
928
  "type": "func",
800
- "default": "({ isOpen, content }) => {\n if (isOpen) {\n content.focus({ preventScroll: true });\n }\n}",
801
- "description": "Direct focus when open/closing popover"
929
+ "description": "Direct focus when open/closing popover.\nOverrides UluPopoverBase's default focus management."
802
930
  }
803
931
  ],
804
932
  "events": [
@@ -4864,6 +4992,60 @@
4864
4992
  }
4865
4993
  },
4866
4994
  "reference": {
4995
+ "UluTourPager": {
4996
+ "raw_ast_dump": {
4997
+ "exportName": "default",
4998
+ "displayName": "UluTourPager",
4999
+ "description": "",
5000
+ "tags": {},
5001
+ "sourceFiles": [
5002
+ "lib/plugins/tour/UluTourPager.vue"
5003
+ ]
5004
+ }
5005
+ },
5006
+ "UluTourDisplay": {
5007
+ "raw_ast_dump": {
5008
+ "exportName": "default",
5009
+ "displayName": "UluTourDisplay",
5010
+ "description": "",
5011
+ "tags": {},
5012
+ "sourceFiles": [
5013
+ "lib/plugins/tour/UluTourDisplay.vue"
5014
+ ]
5015
+ }
5016
+ },
5017
+ "UluTourContent": {
5018
+ "raw_ast_dump": {
5019
+ "exportName": "default",
5020
+ "displayName": "UluTourContent",
5021
+ "description": "",
5022
+ "tags": {},
5023
+ "props": [
5024
+ {
5025
+ "name": "step",
5026
+ "description": "The tour step configuration object",
5027
+ "type": {
5028
+ "name": "object"
5029
+ },
5030
+ "required": true
5031
+ },
5032
+ {
5033
+ "name": "isModal",
5034
+ "description": "Adjusts the typography to match a modal context rather than a popover context",
5035
+ "type": {
5036
+ "name": "boolean"
5037
+ },
5038
+ "defaultValue": {
5039
+ "func": false,
5040
+ "value": "false"
5041
+ }
5042
+ }
5043
+ ],
5044
+ "sourceFiles": [
5045
+ "lib/plugins/tour/UluTourContent.vue"
5046
+ ]
5047
+ }
5048
+ },
4867
5049
  "UluToastDisplay": {
4868
5050
  "raw_ast_dump": {
4869
5051
  "exportName": "default",
@@ -4968,58 +5150,214 @@
4968
5150
  ]
4969
5151
  }
4970
5152
  },
5153
+ "UluPopoverBase": {
5154
+ "raw_ast_dump": {
5155
+ "exportName": "default",
5156
+ "displayName": "UluPopoverBase",
5157
+ "description": "",
5158
+ "tags": {},
5159
+ "expose": [
5160
+ {
5161
+ "name": "close",
5162
+ "description": "Emits the close event"
5163
+ },
5164
+ {
5165
+ "name": "update",
5166
+ "description": "Manually trigger a floating UI position update"
5167
+ },
5168
+ {
5169
+ "name": "content",
5170
+ "description": "The internal root popover element reference"
5171
+ }
5172
+ ],
5173
+ "props": [
5174
+ {
5175
+ "name": "isOpen",
5176
+ "description": "Controls the open/active state of the popover",
5177
+ "type": {
5178
+ "name": "boolean"
5179
+ },
5180
+ "defaultValue": {
5181
+ "func": false,
5182
+ "value": "false"
5183
+ }
5184
+ },
5185
+ {
5186
+ "name": "clickOutsideCloses",
5187
+ "description": "Close popover when click is outside",
5188
+ "type": {
5189
+ "name": "boolean"
5190
+ },
5191
+ "defaultValue": {
5192
+ "func": false,
5193
+ "value": "true"
5194
+ }
5195
+ },
5196
+ {
5197
+ "name": "escapeCloses",
5198
+ "description": "Close popover when escape key is pressed",
5199
+ "type": {
5200
+ "name": "boolean"
5201
+ },
5202
+ "defaultValue": {
5203
+ "func": false,
5204
+ "value": "true"
5205
+ }
5206
+ },
5207
+ {
5208
+ "name": "directFocus",
5209
+ "description": "Direct focus when open/closing popover",
5210
+ "type": {
5211
+ "name": "func"
5212
+ },
5213
+ "defaultValue": {
5214
+ "func": true,
5215
+ "value": "({ isOpen, trigger, content }) => {\n if (isOpen && content) {\n content.focus({ preventScroll: true });\n } else if (!isOpen && trigger && trigger instanceof HTMLElement) {\n // Note: using nextTick prevents scroll jumping in some cases\n trigger.focus({ preventScroll: true });\n }\n}"
5216
+ }
5217
+ },
5218
+ {
5219
+ "name": "trigger",
5220
+ "description": "The target element for the popover to float alongside",
5221
+ "type": {
5222
+ "name": "object"
5223
+ },
5224
+ "defaultValue": {
5225
+ "func": false,
5226
+ "value": "null"
5227
+ }
5228
+ },
5229
+ {
5230
+ "name": "config",
5231
+ "description": "Floating UI configuration",
5232
+ "type": {
5233
+ "name": "object"
5234
+ },
5235
+ "defaultValue": {
5236
+ "func": false,
5237
+ "value": "{}"
5238
+ }
5239
+ },
5240
+ {
5241
+ "name": "modifiers",
5242
+ "description": "Modifiers (to add any modifier classes based on base class [ie. 'large'])",
5243
+ "type": {
5244
+ "name": "string|array|object"
5245
+ }
5246
+ }
5247
+ ],
5248
+ "events": [
5249
+ {
5250
+ "name": "close"
5251
+ }
5252
+ ],
5253
+ "slots": [
5254
+ {
5255
+ "name": "default",
5256
+ "scoped": true,
5257
+ "bindings": [
5258
+ {
5259
+ "name": "isOpen",
5260
+ "title": "binding"
5261
+ },
5262
+ {
5263
+ "name": "close",
5264
+ "title": "binding"
5265
+ }
5266
+ ]
5267
+ },
5268
+ {
5269
+ "name": "footer",
5270
+ "scoped": true,
5271
+ "bindings": [
5272
+ {
5273
+ "name": "isOpen",
5274
+ "title": "binding"
5275
+ },
5276
+ {
5277
+ "name": "close",
5278
+ "title": "binding"
5279
+ }
5280
+ ]
5281
+ }
5282
+ ],
5283
+ "sourceFiles": [
5284
+ "lib/plugins/popovers/UluPopoverBase.vue"
5285
+ ]
5286
+ }
5287
+ },
4971
5288
  "UluPopover": {
4972
5289
  "raw_ast_dump": {
4973
5290
  "exportName": "default",
4974
5291
  "displayName": "UluPopover",
4975
5292
  "description": "",
4976
5293
  "tags": {},
5294
+ "expose": [
5295
+ {
5296
+ "name": "isOpen",
5297
+ "description": "The reactive internal open/closed state of the popover"
5298
+ },
5299
+ {
5300
+ "name": "toggle",
5301
+ "description": "Method to toggle the popover open/closed"
5302
+ },
5303
+ {
5304
+ "name": "close",
5305
+ "description": "Method to force the popover closed"
5306
+ },
5307
+ {
5308
+ "name": "changeTo",
5309
+ "description": "Method to explicitly set the open state",
5310
+ "tags": [
5311
+ {
5312
+ "title": "param",
5313
+ "type": {
5314
+ "name": "Boolean"
5315
+ },
5316
+ "name": "toOpen",
5317
+ "description": "The desired state"
5318
+ }
5319
+ ]
5320
+ }
5321
+ ],
4977
5322
  "props": [
4978
5323
  {
4979
5324
  "name": "triggerText",
4980
- "description": "Text for popover button",
4981
5325
  "type": {
4982
5326
  "name": "string"
4983
5327
  }
4984
5328
  },
4985
5329
  {
4986
5330
  "name": "triggerAlt",
4987
- "description": "Add optional aria-label to button for icons/etc",
4988
5331
  "type": {
4989
5332
  "name": "string"
4990
5333
  }
4991
5334
  },
4992
5335
  {
4993
5336
  "name": "disabled",
4994
- "description": "Disable trigger button",
4995
5337
  "type": {
4996
5338
  "name": "boolean"
4997
5339
  }
4998
5340
  },
4999
5341
  {
5000
5342
  "name": "tooltip",
5001
- "description": "Tooltip text for trigger button",
5002
5343
  "type": {
5003
5344
  "name": "string"
5004
5345
  }
5005
5346
  },
5006
5347
  {
5007
5348
  "name": "size",
5008
- "description": "Popover size (ie large, etc)",
5009
5349
  "type": {
5010
5350
  "name": "string"
5011
5351
  }
5012
5352
  },
5013
5353
  {
5014
5354
  "name": "noPadding",
5015
- "description": "No padding on popover content",
5016
5355
  "type": {
5017
5356
  "name": "boolean"
5018
5357
  }
5019
5358
  },
5020
5359
  {
5021
5360
  "name": "config",
5022
- "description": "Floating UI config (merged with defaults for popover)\n- See useUluFloating() composable for config API",
5023
5361
  "type": {
5024
5362
  "name": "object"
5025
5363
  },
@@ -5030,14 +5368,12 @@
5030
5368
  },
5031
5369
  {
5032
5370
  "name": "startOpen",
5033
- "description": "Mount this component already open state",
5034
5371
  "type": {
5035
5372
  "name": "boolean"
5036
5373
  }
5037
5374
  },
5038
5375
  {
5039
5376
  "name": "activeClass",
5040
- "description": "Active class for trigger button",
5041
5377
  "type": {
5042
5378
  "name": "string"
5043
5379
  },
@@ -5048,7 +5384,6 @@
5048
5384
  },
5049
5385
  {
5050
5386
  "name": "classes",
5051
- "description": "Add custom classes to specific elements\n{ trigger, content }",
5052
5387
  "type": {
5053
5388
  "name": "object"
5054
5389
  },
@@ -5059,7 +5394,6 @@
5059
5394
  },
5060
5395
  {
5061
5396
  "name": "clickOutsideCloses",
5062
- "description": "Close popover when click is outside",
5063
5397
  "type": {
5064
5398
  "name": "boolean"
5065
5399
  },
@@ -5070,13 +5404,9 @@
5070
5404
  },
5071
5405
  {
5072
5406
  "name": "directFocus",
5073
- "description": "Direct focus when open/closing popover",
5407
+ "description": "Direct focus when open/closing popover.\nOverrides UluPopoverBase's default focus management.",
5074
5408
  "type": {
5075
5409
  "name": "func"
5076
- },
5077
- "defaultValue": {
5078
- "func": true,
5079
- "value": "({ isOpen, content }) => {\n if (isOpen) {\n content.focus({ preventScroll: true });\n }\n}"
5080
5410
  }
5081
5411
  }
5082
5412
  ],
@@ -12239,7 +12569,7 @@
12239
12569
  "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
12570
  },
12241
12571
  "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### 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* `utils.props.resolveClassOverride`\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"
12572
+ "raw_markdown": "import { 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* `UluPopover`\n* `UluPopoverBase`\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* `UluTooltipDisplay`\n* `UluTooltipPopover`\n* `UluTourDisplay`\n* `UluTourPager`\n* `UluTourContent`\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* `useTour`\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* `tourPlugin`\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* `utils.props.resolveClassOverride`\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
12573
  },
12244
12574
  "ChangeLog": {
12245
12575
  "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>"
@@ -12262,6 +12592,9 @@
12262
12592
  "useBreakpointManager": {
12263
12593
  "raw_markdown": "# useBreakpointManager\n\nComposable for adding breakpoint manager and related breakpoint info (via breakpoint manager from `@ulu/frontend/js/ui/breakpoints.js > BreakpointManager`).\n\n**Note:** Using the composable is only necessary for unique situations. For basic breakpoint setup use the `breakpointsPlugin`. Which uses this composable.\n\n## Options for this composable\n\n```js\nconst defaults = {\n /**\n * Set an initial value (value in mounted, SSR)\n */\n initialValue: null,\n /**\n * Function called after init (passed manager)\n */\n onReady: null,\n /**\n * Options sent to CssBreakpoints library (ulu/frontend/js/breakpoints <BreakpointManager>)\n */\n plugin: {\n customProperty: \"--breakpoint\"\n }\n}\n```\n\n## Example Usage\n\n```html\n<script setup>\n import { ref, computed, provide } from \"vue\";\n import { useBreakpointManager } from \"./useBreakpointManager.js\";\n\n const isMobile = ref(false);\n\n // Example using the onReady callback to set reactive value isMobile\n // - In this situation isMobile is being used as a primary change in \n // the applications layout \n const options = { \n onReady(manager) {\n manager.at(\"small\").max(() => isMobile.value = true);\n manager.at(\"large\").min(() => isMobile.value = false);\n }\n };\n\n // Composable returns the following\n const { \n /**\n * Reference to underlying BreakpointManager class\n */\n breakpointManager, \n /**\n * Active breakpoint name\n */\n breakpointActive, \n /**\n * Current resizeDirection (\"up\"|\"down\"|null)\n */\n breakpointDirection \n } = useBreakpointManager(options);\n\n\n // Allowing all components to access these values\n provide(\"uluBreakpointActive\", computed(() => breakpointActive));\n provide(\"uluBreakpointDirection\", computed(() => breakpointDirection));\n provide(\"uluBreakpointManager\", computed(() => breakpointManager));\n provide(\"uluIsMobile\", computed(() => isMobile));\n\n</script>\n```"
12264
12594
  },
12595
+ "tour": {
12596
+ "raw_markdown": "import { Canvas } from '@storybook/addon-docs/blocks';\nimport * as TourStories from './tour.stories.js';\n\n# Tour Plugin\n\nThe Tour plugin allows configuring an app-wide guided tour that leverages `UluModal` and `@floating-ui/vue`. Register the plugin, and use the global API (or composable) to start step-by-step onboarding flows.\n\n## Installing the plugin\n\nExample `./src/main.js`\n\n```js\nimport UluTour from \"@ulu/frontend-vue/plugins/tour/index.js\";\n\n//...\n\napp.use(UluTour);\n```\n\nTo display the tour, you must include the `UluTourDisplay` component somewhere in your application root (e.g. `App.vue`):\n\n```html\n<template>\n <div id=\"app\">\n <router-view />\n <UluTourDisplay />\n </div>\n</template>\n```\n\n## Creating a Tour\n\nA tour is defined as an object containing a `name` and an array of `steps`. You can also define global `modalProps` or `popoverProps` on the root tour object to apply them to all steps by default.\n\n```js\nconst demoTour = {\n name: 'demo-tour',\n popoverProps: { modifiers: 'large' }, // Global popover styling for all steps\n steps: [\n {\n title: 'Welcome!',\n content: 'This step is a modal because it has no target element. Click next to continue.',\n modalProps: { size: 'small' } // Step-specific override\n },\n {\n target: '#step-1-btn',\n title: 'First Feature',\n content: 'This points to a simple button.',\n placement: 'bottom'\n }\n ]\n};\n```\n\n### Step API Structure\n\nEach step object can accept the following properties:\n\n* **`target`**: *(String)* The CSS selector for the target element. If omitted, the step renders as a centered modal.\n* **`title`**: *(String)* The title text for the step.\n* **`content`**: *(String)* The body content text for the step.\n* **`contentComponent`**: *(Object)* A Vue component to replace only the text content (keeps the modal/popover shell and default footer intact).\n* **`component`**: *(Object)* A Vue component to completely replace the outer wrapper (bypasses modal/popover entirely).\n* **`componentProps`**: *(Object)* Props to bind to `contentComponent` or `component`.\n* **`hideFooter`**: *(Boolean)* If true, hides the default tour footer (Next/Back buttons). Useful if you want the standard text but no buttons.\n* **`placement`**: *(String)* Floating UI placement string (e.g. `'bottom'`, `'right'`).\n* **`highlight`**: *(Boolean)* If true, darkens the backdrop around the target element.\n* **`modalProps`**: *(Object)* Props to pass to the modal (only applies if `target` is omitted).\n* **`popoverProps`**: *(Object)* Props to pass to the popover (only applies if `target` is present).\n* **`onEnter`**: *(Function)* An async hook called before the step is rendered.\n\n## Starting the Tour\n\nYou can control the tour programmatically using the `useTour` composable:\n\n```html\n<template>\n <button @click=\"startTour\">Start Tour</button>\n</template>\n\n<script setup>\n import { useTour } from \"@ulu/frontend-vue\";\n\n const { api } = useTour();\n\n const startTour = () => {\n api.start(demoTour);\n };\n</script>\n```\n\nAlternatively, you can use the global API:\n\n```js\nthis.$uluTour.start(demoTour);\nthis.$uluTour.next();\nthis.$uluTour.prev();\nthis.$uluTour.stop();\n```\n\n## Custom Components & Layouts\n\nIf you need custom designs, the plugin supports two levels of control:\n\n### 1. Custom Inner Content (`contentComponent`)\n\nUse `contentComponent` if you want to render an image, form, or custom layout inside the step, but want to **keep** the default popover/modal wrappers and the Next/Back footer buttons.\n\n```html\n<template>\n <div style=\"text-align: center;\">\n <img src=\"/logo.png\" />\n <p>This is my custom graphic step.</p>\n </div>\n</template>\n```\n\n### 2. Full Wrapper Takeover (`component`)\n\nUse `component` if you want to bypass the `<UluModal>` and `<UluPopoverBase>` wrappers entirely. This allows you to build custom off-canvas drawers, alert banners, or custom absolute-positioned panels. \n\nYou are responsible for your own positioning, styling, and wiring up the Next/Back buttons via `useTour()`.\n\n```html\n<template>\n <div class=\"my-custom-floating-drawer\">\n <h3>Custom Design</h3>\n <!-- Wire up your own buttons -->\n <button @click=\"api.next()\">Got it!</button>\n </div>\n</template>\n\n<script setup>\n import { useTour } from \"@ulu/frontend-vue\";\n const { api } = useTour();\n</script>\n```\n\n## Demonstration\n\n<Canvas of={TourStories.Default} />\n"
12597
+ },
12265
12598
  "core": {
12266
12599
  "raw_markdown": "# Core Plugin\n\n## Purpose\n\nThe Core Plugin is the central, **required** plugin for the `@ulu/frontend-vue` library. Its primary purpose is to establish a single, reactive source of truth for configuration settings that are shared across multiple components. \n\nBy using Vue's `provide`/`inject` system, this plugin ensures that all components within your application access the same configuration, preventing inconsistencies that can arise from separate module imports.\n\n## Installation\n\nTo use this library, you must register the `corePlugin` on your Vue app instance. You can also pass an options object to override the default settings.\n\n```javascript\n// src/main.js\nimport { createApp } from 'vue';\nimport App from './App.vue';\nimport { corePlugin } from '@ulu/frontend-vue';\n\nconst app = createApp(App);\n\n// Register the core plugin\napp.use(corePlugin, {\n // Optional: override general settings\n fontAwesomeStatic: true,\n\n // Optional: override specific icons safely\n iconsByType: {\n danger: 'my-custom-danger-icon',\n close: 'my-custom-close-icon'\n }\n});\n\napp.mount('#app');\n```\n\n## API Reference\n\nThe plugin provides its API to your application in two ways:\n\n- **Composition API:** `inject('uluCore')`\n- **Options API:** `this.$uluCore`\n\nThe API object contains the following methods:\n\n- `getSettings()`: Returns the full reactive settings object.\n- `getSetting(key)`: Retrieves a single setting by its key (e.g., `'fontAwesomeStatic'`).\n- `updateSetting(key, value)`: Updates a single setting.\n- `updateSettings(changes)`: Merges an object of changes into the settings.\n- `getDefaultSettings()`: Returns a non-reactive copy of the original default settings.\n- `getIcon(type)`: Retrieves a specific icon class string by its semantic type (e.g., `'danger'`, `'close'`).\n- `setIcon(type, definition)`: Safely sets or overrides a single icon definition.\n\n### Example Usage\n\n**Composition API (`<script setup>`)**\n```vue\n<script setup>\nimport { inject, onMounted } from 'vue';\n\nconst uluCore = inject('uluCore');\n\nonMounted(() => {\n const icons = uluCore.getSetting('iconsByType');\n console.log('Danger Icon:', icons.danger);\n\n // Example of updating a single icon dynamically\n uluCore.setIcon('success', 'my-awesome-success-icon');\n});\n</script>\n```\n\n**Options API**\n```vue\n<script>\nexport default {\n mounted() {\n const icons = this.$uluCore.getSetting('icons');\n console.log('Danger Icon:', icons.danger);\n }\n}\n</script>\n```\n\n"
12267
12600
  },
@@ -12274,6 +12607,9 @@
12274
12607
  "forms": {
12275
12608
  "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
12609
  },
12610
+ "facets": {
12611
+ "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>"
12612
+ },
12277
12613
  "useScrollAnchors": {
12278
12614
  "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"
12279
12615
  },
@@ -12283,9 +12619,6 @@
12283
12619
  "useScrollAnchorSection": {
12284
12620
  "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"
12285
12621
  },
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
12622
  "jsdoc": [
12290
12623
  {
12291
12624
  "id": "module:vite",
@@ -12406,16 +12739,42 @@
12406
12739
  "level": 0
12407
12740
  },
12408
12741
  {
12409
- "id": "module:useWindowResize",
12410
- "longname": "module:useWindowResize",
12411
- "name": "useWindowResize",
12412
- "kind": "module",
12742
+ "id": "module:components",
12743
+ "longname": "module:components",
12744
+ "name": "components",
12745
+ "kind": "module",
12746
+ "meta": {
12747
+ "lineno": 1,
12748
+ "filename": "index.js",
12749
+ "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components"
12750
+ },
12751
+ "order": 31,
12752
+ "level": 0
12753
+ },
12754
+ {
12755
+ "id": "components/index.js\nResponsible for exporting all components\n- Used in main plugin and bundle exportsmodule:",
12756
+ "longname": "components/index.js\nResponsible for exporting all components\n- Used in main plugin and bundle exportsmodule:",
12757
+ "name": "components/index.js\nResponsible for exporting all components\n- Used in main plugin and bundle exports",
12758
+ "kind": "module",
12759
+ "meta": {
12760
+ "lineno": 4,
12761
+ "filename": "index.js",
12762
+ "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components"
12763
+ },
12764
+ "order": 32,
12765
+ "level": 0
12766
+ },
12767
+ {
12768
+ "id": "module:useWindowResize",
12769
+ "longname": "module:useWindowResize",
12770
+ "name": "useWindowResize",
12771
+ "kind": "module",
12413
12772
  "meta": {
12414
12773
  "lineno": 1,
12415
12774
  "filename": "useWindowResize.js",
12416
12775
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
12417
12776
  },
12418
- "order": 31,
12777
+ "order": 33,
12419
12778
  "level": 0
12420
12779
  },
12421
12780
  {
@@ -12428,7 +12787,7 @@
12428
12787
  "filename": "useUluFloating.js",
12429
12788
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
12430
12789
  },
12431
- "order": 34,
12790
+ "order": 36,
12432
12791
  "level": 0
12433
12792
  },
12434
12793
  {
@@ -12441,7 +12800,7 @@
12441
12800
  "filename": "useTableData.js",
12442
12801
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
12443
12802
  },
12444
- "order": 38,
12803
+ "order": 40,
12445
12804
  "level": 0
12446
12805
  },
12447
12806
  {
@@ -12454,7 +12813,7 @@
12454
12813
  "filename": "useRequiredInject.js",
12455
12814
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
12456
12815
  },
12457
- "order": 46,
12816
+ "order": 48,
12458
12817
  "level": 0
12459
12818
  },
12460
12819
  {
@@ -12467,7 +12826,7 @@
12467
12826
  "filename": "usePagination.js",
12468
12827
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
12469
12828
  },
12470
- "order": 48,
12829
+ "order": 50,
12471
12830
  "level": 0
12472
12831
  },
12473
12832
  {
@@ -12480,7 +12839,7 @@
12480
12839
  "filename": "useModifiers.js",
12481
12840
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
12482
12841
  },
12483
- "order": 50,
12842
+ "order": 52,
12484
12843
  "level": 0
12485
12844
  },
12486
12845
  {
@@ -12493,7 +12852,7 @@
12493
12852
  "filename": "useIcon.js",
12494
12853
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
12495
12854
  },
12496
- "order": 52,
12855
+ "order": 54,
12497
12856
  "level": 0
12498
12857
  },
12499
12858
  {
@@ -12506,7 +12865,7 @@
12506
12865
  "filename": "useDocumentTitle.js",
12507
12866
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
12508
12867
  },
12509
- "order": 55,
12868
+ "order": 57,
12510
12869
  "level": 0
12511
12870
  },
12512
12871
  {
@@ -12519,7 +12878,7 @@
12519
12878
  "filename": "useBreakpointManager.js",
12520
12879
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
12521
12880
  },
12522
- "order": 57,
12881
+ "order": 59,
12523
12882
  "level": 0
12524
12883
  },
12525
12884
  {
@@ -12532,33 +12891,20 @@
12532
12891
  "filename": "index.js",
12533
12892
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
12534
12893
  },
12535
- "order": 62,
12894
+ "order": 64,
12536
12895
  "level": 0
12537
12896
  },
12538
12897
  {
12539
- "id": "module:components",
12540
- "longname": "module:components",
12541
- "name": "components",
12898
+ "id": "module:tourPlugin",
12899
+ "longname": "module:tourPlugin",
12900
+ "name": "tourPlugin",
12542
12901
  "kind": "module",
12543
12902
  "meta": {
12544
12903
  "lineno": 1,
12545
12904
  "filename": "index.js",
12546
- "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components"
12547
- },
12548
- "order": 63,
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"
12905
+ "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/tour"
12560
12906
  },
12561
- "order": 64,
12907
+ "order": 66,
12562
12908
  "level": 0
12563
12909
  },
12564
12910
  {
@@ -12571,7 +12917,7 @@
12571
12917
  "filename": "useToast.js",
12572
12918
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/toast"
12573
12919
  },
12574
- "order": 65,
12920
+ "order": 74,
12575
12921
  "level": 0
12576
12922
  },
12577
12923
  {
@@ -12584,7 +12930,7 @@
12584
12930
  "filename": "store.js",
12585
12931
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/toast"
12586
12932
  },
12587
- "order": 67,
12933
+ "order": 76,
12588
12934
  "level": 0
12589
12935
  },
12590
12936
  {
@@ -12597,7 +12943,7 @@
12597
12943
  "filename": "index.js",
12598
12944
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/toast"
12599
12945
  },
12600
- "order": 74,
12946
+ "order": 83,
12601
12947
  "level": 0
12602
12948
  },
12603
12949
  {
@@ -12610,7 +12956,7 @@
12610
12956
  "filename": "defaults.js",
12611
12957
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/toast"
12612
12958
  },
12613
- "order": 76,
12959
+ "order": 85,
12614
12960
  "level": 0
12615
12961
  },
12616
12962
  {
@@ -12623,7 +12969,7 @@
12623
12969
  "filename": "useTooltipFollow.js",
12624
12970
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
12625
12971
  },
12626
- "order": 82,
12972
+ "order": 91,
12627
12973
  "level": 0
12628
12974
  },
12629
12975
  {
@@ -12636,7 +12982,7 @@
12636
12982
  "filename": "useTooltip.js",
12637
12983
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
12638
12984
  },
12639
- "order": 83,
12985
+ "order": 92,
12640
12986
  "level": 0
12641
12987
  },
12642
12988
  {
@@ -12649,7 +12995,7 @@
12649
12995
  "filename": "index.js",
12650
12996
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
12651
12997
  },
12652
- "order": 85,
12998
+ "order": 94,
12653
12999
  "level": 0
12654
13000
  },
12655
13001
  {
@@ -12662,7 +13008,7 @@
12662
13008
  "filename": "defaults.js",
12663
13009
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
12664
13010
  },
12665
- "order": 91
13011
+ "order": 100
12666
13012
  },
12667
13013
  {
12668
13014
  "id": "module:useModals",
@@ -12674,7 +13020,7 @@
12674
13020
  "filename": "useModals.js",
12675
13021
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/modals"
12676
13022
  },
12677
- "order": 113,
13023
+ "order": 122,
12678
13024
  "level": 0
12679
13025
  },
12680
13026
  {
@@ -12688,7 +13034,7 @@
12688
13034
  "filename": "index.js",
12689
13035
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/modals"
12690
13036
  },
12691
- "order": 115,
13037
+ "order": 124,
12692
13038
  "level": 0
12693
13039
  },
12694
13040
  {
@@ -12701,7 +13047,7 @@
12701
13047
  "filename": "api.js",
12702
13048
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/modals"
12703
13049
  },
12704
- "order": 118,
13050
+ "order": 127,
12705
13051
  "level": 0
12706
13052
  },
12707
13053
  {
@@ -12715,7 +13061,7 @@
12715
13061
  "filename": "index.js",
12716
13062
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/core"
12717
13063
  },
12718
- "order": 127,
13064
+ "order": 136,
12719
13065
  "level": 0
12720
13066
  },
12721
13067
  {
@@ -12728,7 +13074,7 @@
12728
13074
  "filename": "index.js",
12729
13075
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/breakpoints"
12730
13076
  },
12731
- "order": 129,
13077
+ "order": 138,
12732
13078
  "level": 0
12733
13079
  },
12734
13080
  {
@@ -12741,7 +13087,7 @@
12741
13087
  "filename": "index.js",
12742
13088
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems"
12743
13089
  },
12744
- "order": 134,
13090
+ "order": 143,
12745
13091
  "level": 0
12746
13092
  },
12747
13093
  {
@@ -12754,7 +13100,7 @@
12754
13100
  "filename": "useScrollAnchors.js",
12755
13101
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/scroll-anchors"
12756
13102
  },
12757
- "order": 135,
13103
+ "order": 144,
12758
13104
  "level": 0
12759
13105
  },
12760
13106
  {
@@ -12767,7 +13113,7 @@
12767
13113
  "filename": "useScrollAnchorSections.js",
12768
13114
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/scroll-anchors"
12769
13115
  },
12770
- "order": 145,
13116
+ "order": 154,
12771
13117
  "level": 0
12772
13118
  },
12773
13119
  {
@@ -12780,7 +13126,7 @@
12780
13126
  "filename": "useScrollAnchorSection.js",
12781
13127
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/scroll-anchors"
12782
13128
  },
12783
- "order": 147,
13129
+ "order": 156,
12784
13130
  "level": 0
12785
13131
  },
12786
13132
  {
@@ -12793,7 +13139,7 @@
12793
13139
  "filename": "useFacets.js",
12794
13140
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/facets"
12795
13141
  },
12796
- "order": 149,
13142
+ "order": 158,
12797
13143
  "level": 0
12798
13144
  },
12799
13145
  {
@@ -12809,7 +13155,7 @@
12809
13155
  "filename": "index.js",
12810
13156
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/toast"
12811
13157
  },
12812
- "order": 75,
13158
+ "order": 84,
12813
13159
  "level": 0
12814
13160
  },
12815
13161
  {
@@ -12833,190 +13179,510 @@
12833
13179
  {
12834
13180
  "type": {
12835
13181
  "names": [
12836
- "object"
13182
+ "object"
13183
+ ]
13184
+ },
13185
+ "description": "User-defined options to override defaults.",
13186
+ "name": "userOptions"
13187
+ }
13188
+ ],
13189
+ "meta": {
13190
+ "lineno": 59,
13191
+ "filename": "index.js",
13192
+ "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13193
+ },
13194
+ "order": 99,
13195
+ "level": 0
13196
+ },
13197
+ {
13198
+ "id": "module:modalsPlugin--module.exports",
13199
+ "longname": "module:modalsPlugin",
13200
+ "name": "module.exports",
13201
+ "kind": "function",
13202
+ "isExported": true,
13203
+ "description": "Modals Vue Plugin",
13204
+ "memberof": "module:modalsPlugin",
13205
+ "params": [
13206
+ {
13207
+ "type": {
13208
+ "names": [
13209
+ "Object"
13210
+ ]
13211
+ },
13212
+ "description": "Vue app instance passed to plugin",
13213
+ "name": "App"
13214
+ },
13215
+ {
13216
+ "type": {
13217
+ "names": [
13218
+ "module:modalsPlugin~UluModalsPluginOptions"
13219
+ ]
13220
+ },
13221
+ "description": "Options to change (see defaults)",
13222
+ "name": "userOptions"
13223
+ }
13224
+ ],
13225
+ "meta": {
13226
+ "lineno": 28,
13227
+ "filename": "index.js",
13228
+ "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/modals"
13229
+ },
13230
+ "order": 126,
13231
+ "level": 0
13232
+ },
13233
+ {
13234
+ "id": "module:corePlugin--module.exports",
13235
+ "longname": "module:corePlugin",
13236
+ "name": "module.exports",
13237
+ "kind": "function",
13238
+ "isExported": true,
13239
+ "description": "Installs the core plugin, which provides a centralized, reactive configuration for the entire library.\nIt is essential for managing global settings, particularly for the icon system.",
13240
+ "memberof": "module:corePlugin",
13241
+ "params": [
13242
+ {
13243
+ "type": {
13244
+ "names": [
13245
+ "object"
13246
+ ]
13247
+ },
13248
+ "description": "The Vue app instance.",
13249
+ "name": "app"
13250
+ },
13251
+ {
13252
+ "type": {
13253
+ "names": [
13254
+ "object"
13255
+ ]
13256
+ },
13257
+ "optional": true,
13258
+ "description": "User-defined settings to override defaults.",
13259
+ "name": "userSettings"
13260
+ },
13261
+ {
13262
+ "type": {
13263
+ "names": [
13264
+ "boolean"
13265
+ ]
13266
+ },
13267
+ "optional": true,
13268
+ "description": "If true, uses static FontAwesome CSS classes instead of the Vue component.",
13269
+ "name": "userSettings.fontAwesomeStatic"
13270
+ },
13271
+ {
13272
+ "type": {
13273
+ "names": [
13274
+ "object"
13275
+ ]
13276
+ },
13277
+ "optional": true,
13278
+ "description": "A custom component to use for rendering icons.",
13279
+ "name": "userSettings.iconComponent"
13280
+ },
13281
+ {
13282
+ "type": {
13283
+ "names": [
13284
+ "function"
13285
+ ]
13286
+ },
13287
+ "optional": true,
13288
+ "description": "A function to resolve props for the custom icon component.",
13289
+ "name": "userSettings.iconPropResolver"
13290
+ },
13291
+ {
13292
+ "type": {
13293
+ "names": [
13294
+ "object"
13295
+ ]
13296
+ },
13297
+ "optional": true,
13298
+ "description": "An object to override default icon definitions by type (e.g., `{ danger: 'my-icon' }`).",
13299
+ "name": "userSettings.iconsByType"
13300
+ }
13301
+ ],
13302
+ "meta": {
13303
+ "lineno": 49,
13304
+ "filename": "index.js",
13305
+ "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/core"
13306
+ },
13307
+ "order": 137,
13308
+ "level": 0
13309
+ },
13310
+ {
13311
+ "id": "module:breakpointsPlugin--module.exports",
13312
+ "longname": "module:breakpointsPlugin",
13313
+ "name": "module.exports",
13314
+ "kind": "function",
13315
+ "isExported": true,
13316
+ "description": "Installs the breakpoints plugin, providing app-wide reactive breakpoint information.\nIt uses `useBreakpointManager` internally and provides `uluIsMobile`,\n`uluBreakpointActive`, `uluBreakpointDirection`, and `uluBreakpointManager` to all components.",
13317
+ "memberof": "module:breakpointsPlugin",
13318
+ "params": [
13319
+ {
13320
+ "type": {
13321
+ "names": [
13322
+ "object"
13323
+ ]
13324
+ },
13325
+ "description": "The Vue app instance.",
13326
+ "name": "app"
13327
+ },
13328
+ {
13329
+ "type": {
13330
+ "names": [
13331
+ "object"
13332
+ ]
13333
+ },
13334
+ "description": "User-defined options.",
13335
+ "name": "userOptions"
13336
+ },
13337
+ {
13338
+ "type": {
13339
+ "names": [
13340
+ "string"
13341
+ ]
13342
+ },
13343
+ "optional": true,
13344
+ "defaultvalue": "\"small\"",
13345
+ "description": "The breakpoint name to use for `isMobile` detection.",
13346
+ "name": "userOptions.breakpointMobile"
13347
+ },
13348
+ {
13349
+ "type": {
13350
+ "names": [
13351
+ "object"
13352
+ ]
13353
+ },
13354
+ "optional": true,
13355
+ "description": "Options to pass to the underlying `useBreakpointManager`.",
13356
+ "name": "userOptions.managerOptions"
13357
+ }
13358
+ ],
13359
+ "meta": {
13360
+ "lineno": 31,
13361
+ "filename": "index.js",
13362
+ "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/breakpoints"
13363
+ },
13364
+ "order": 142,
13365
+ "level": 0
13366
+ },
13367
+ {
13368
+ "id": "createApi",
13369
+ "longname": "createApi",
13370
+ "name": "createApi",
13371
+ "kind": "constant",
13372
+ "scope": "global",
13373
+ "description": "Creates the tour API methods used to control the tour lifecycle",
13374
+ "params": [
13375
+ {
13376
+ "type": {
13377
+ "names": [
13378
+ "Object"
13379
+ ]
13380
+ },
13381
+ "description": "The reactive state object",
13382
+ "name": "state"
13383
+ }
13384
+ ],
13385
+ "returns": [
13386
+ {
13387
+ "type": {
13388
+ "names": [
13389
+ "Object"
13390
+ ]
13391
+ },
13392
+ "description": "Tour API object"
13393
+ }
13394
+ ],
13395
+ "meta": {
13396
+ "lineno": 24,
13397
+ "filename": "api.js",
13398
+ "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/tour"
13399
+ },
13400
+ "order": 68
13401
+ },
13402
+ {
13403
+ "id": "useTour",
13404
+ "longname": "useTour",
13405
+ "name": "useTour",
13406
+ "kind": "function",
13407
+ "scope": "global",
13408
+ "description": "Composable for accessing the Tour API and state",
13409
+ "meta": {
13410
+ "lineno": 6,
13411
+ "filename": "useTour.js",
13412
+ "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/tour"
13413
+ },
13414
+ "order": 65
13415
+ },
13416
+ {
13417
+ "id": "start",
13418
+ "longname": "start",
13419
+ "name": "start",
13420
+ "kind": "function",
13421
+ "scope": "global",
13422
+ "description": "Starts a new tour",
13423
+ "params": [
13424
+ {
13425
+ "type": {
13426
+ "names": [
13427
+ "Object"
13428
+ ]
13429
+ },
13430
+ "description": "The tour configuration object",
13431
+ "name": "tour"
13432
+ },
13433
+ {
13434
+ "type": {
13435
+ "names": [
13436
+ "Array.<module:plugins/tour/api~TourStep>"
13437
+ ]
13438
+ },
13439
+ "description": "Array of steps for the tour",
13440
+ "name": "tour.steps"
13441
+ },
13442
+ {
13443
+ "type": {
13444
+ "names": [
13445
+ "String"
13446
+ ]
13447
+ },
13448
+ "optional": true,
13449
+ "description": "Optional name for the tour",
13450
+ "name": "tour.name"
13451
+ },
13452
+ {
13453
+ "type": {
13454
+ "names": [
13455
+ "Object"
13456
+ ]
13457
+ },
13458
+ "optional": true,
13459
+ "description": "Global props applied to all modal steps in this tour (can be overridden by step)",
13460
+ "name": "tour.modalProps"
13461
+ },
13462
+ {
13463
+ "type": {
13464
+ "names": [
13465
+ "Object"
13466
+ ]
13467
+ },
13468
+ "optional": true,
13469
+ "description": "Global props applied to all popover steps in this tour (can be overridden by step)",
13470
+ "name": "tour.popoverProps"
13471
+ }
13472
+ ],
13473
+ "meta": {
13474
+ "lineno": 33,
13475
+ "filename": "api.js",
13476
+ "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/tour"
13477
+ },
13478
+ "order": 69
13479
+ },
13480
+ {
13481
+ "id": "next",
13482
+ "longname": "next",
13483
+ "name": "next",
13484
+ "kind": "function",
13485
+ "scope": "global",
13486
+ "description": "Advances the tour to the next step, or stops if it is the last step",
13487
+ "meta": {
13488
+ "lineno": 42,
13489
+ "filename": "api.js",
13490
+ "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/tour"
13491
+ },
13492
+ "order": 70
13493
+ },
13494
+ {
13495
+ "id": "prev",
13496
+ "longname": "prev",
13497
+ "name": "prev",
13498
+ "kind": "function",
13499
+ "scope": "global",
13500
+ "description": "Returns the tour to the previous step",
13501
+ "meta": {
13502
+ "lineno": 57,
13503
+ "filename": "api.js",
13504
+ "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/tour"
13505
+ },
13506
+ "order": 71
13507
+ },
13508
+ {
13509
+ "id": "stop",
13510
+ "longname": "stop",
13511
+ "name": "stop",
13512
+ "kind": "function",
13513
+ "scope": "global",
13514
+ "description": "Stops and closes the current tour",
13515
+ "meta": {
13516
+ "lineno": 70,
13517
+ "filename": "api.js",
13518
+ "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/tour"
13519
+ },
13520
+ "order": 72
13521
+ },
13522
+ {
13523
+ "id": "_runHooks",
13524
+ "longname": "_runHooks",
13525
+ "name": "_runHooks",
13526
+ "kind": "function",
13527
+ "scope": "global",
13528
+ "description": "Internal method to run asynchronous lifecycle hooks on a step",
13529
+ "params": [
13530
+ {
13531
+ "type": {
13532
+ "names": [
13533
+ "Object"
12837
13534
  ]
12838
13535
  },
12839
- "description": "User-defined options to override defaults.",
12840
- "name": "userOptions"
13536
+ "description": "The tour step configuration",
13537
+ "name": "step"
12841
13538
  }
12842
13539
  ],
12843
13540
  "meta": {
12844
- "lineno": 58,
12845
- "filename": "index.js",
12846
- "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13541
+ "lineno": 78,
13542
+ "filename": "api.js",
13543
+ "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/tour"
12847
13544
  },
12848
- "order": 90,
12849
- "level": 0
13545
+ "order": 73
12850
13546
  },
12851
13547
  {
12852
- "id": "module:modalsPlugin--module.exports",
12853
- "longname": "module:modalsPlugin",
12854
- "name": "module.exports",
12855
- "kind": "function",
12856
- "isExported": true,
12857
- "description": "Modals Vue Plugin",
12858
- "memberof": "module:modalsPlugin",
12859
- "params": [
13548
+ "id": "TourStep",
13549
+ "longname": "TourStep",
13550
+ "name": "TourStep",
13551
+ "kind": "typedef",
13552
+ "scope": "global",
13553
+ "type": {
13554
+ "names": [
13555
+ "Object"
13556
+ ]
13557
+ },
13558
+ "properties": [
12860
13559
  {
12861
13560
  "type": {
12862
13561
  "names": [
12863
- "Object"
13562
+ "String"
12864
13563
  ]
12865
13564
  },
12866
- "description": "Vue app instance passed to plugin",
12867
- "name": "App"
13565
+ "optional": true,
13566
+ "description": "The CSS selector for the target element. If omitted, step renders as a modal.",
13567
+ "name": "target"
12868
13568
  },
12869
13569
  {
12870
13570
  "type": {
12871
13571
  "names": [
12872
- "module:modalsPlugin~UluModalsPluginOptions"
13572
+ "String"
12873
13573
  ]
12874
13574
  },
12875
- "description": "Options to change (see defaults)",
12876
- "name": "userOptions"
12877
- }
12878
- ],
12879
- "meta": {
12880
- "lineno": 28,
12881
- "filename": "index.js",
12882
- "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/modals"
12883
- },
12884
- "order": 117,
12885
- "level": 0
12886
- },
12887
- {
12888
- "id": "module:corePlugin--module.exports",
12889
- "longname": "module:corePlugin",
12890
- "name": "module.exports",
12891
- "kind": "function",
12892
- "isExported": true,
12893
- "description": "Installs the core plugin, which provides a centralized, reactive configuration for the entire library.\nIt is essential for managing global settings, particularly for the icon system.",
12894
- "memberof": "module:corePlugin",
12895
- "params": [
13575
+ "optional": true,
13576
+ "description": "The title text for the step.",
13577
+ "name": "title"
13578
+ },
12896
13579
  {
12897
13580
  "type": {
12898
13581
  "names": [
12899
- "object"
13582
+ "String"
12900
13583
  ]
12901
13584
  },
12902
- "description": "The Vue app instance.",
12903
- "name": "app"
13585
+ "optional": true,
13586
+ "description": "The content text for the step.",
13587
+ "name": "content"
12904
13588
  },
12905
13589
  {
12906
13590
  "type": {
12907
13591
  "names": [
12908
- "object"
13592
+ "Object"
12909
13593
  ]
12910
13594
  },
12911
13595
  "optional": true,
12912
- "description": "User-defined settings to override defaults.",
12913
- "name": "userSettings"
13596
+ "description": "A Vue component to completely replace the modal/popover wrapper and layout.",
13597
+ "name": "component"
12914
13598
  },
12915
13599
  {
12916
13600
  "type": {
12917
13601
  "names": [
12918
- "boolean"
13602
+ "Object"
12919
13603
  ]
12920
13604
  },
12921
13605
  "optional": true,
12922
- "description": "If true, uses static FontAwesome CSS classes instead of the Vue component.",
12923
- "name": "userSettings.fontAwesomeStatic"
13606
+ "description": "A Vue component to replace the step text content, keeping the modal/popover wrappers and default footer.",
13607
+ "name": "contentComponent"
12924
13608
  },
12925
13609
  {
12926
13610
  "type": {
12927
13611
  "names": [
12928
- "object"
13612
+ "Object"
12929
13613
  ]
12930
13614
  },
12931
13615
  "optional": true,
12932
- "description": "A custom component to use for rendering icons.",
12933
- "name": "userSettings.iconComponent"
13616
+ "description": "Props to bind to the custom component.",
13617
+ "name": "componentProps"
12934
13618
  },
12935
13619
  {
12936
13620
  "type": {
12937
13621
  "names": [
12938
- "function"
13622
+ "Boolean"
12939
13623
  ]
12940
13624
  },
12941
13625
  "optional": true,
12942
- "description": "A function to resolve props for the custom icon component.",
12943
- "name": "userSettings.iconPropResolver"
13626
+ "description": "If true, hides the default tour footer (Next/Back buttons).",
13627
+ "name": "hideFooter"
12944
13628
  },
12945
13629
  {
12946
13630
  "type": {
12947
13631
  "names": [
12948
- "object"
13632
+ "String"
12949
13633
  ]
12950
13634
  },
12951
13635
  "optional": true,
12952
- "description": "An object to override default icon definitions by type (e.g., `{ danger: 'my-icon' }`).",
12953
- "name": "userSettings.iconsByType"
12954
- }
12955
- ],
12956
- "meta": {
12957
- "lineno": 49,
12958
- "filename": "index.js",
12959
- "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/core"
12960
- },
12961
- "order": 128,
12962
- "level": 0
12963
- },
12964
- {
12965
- "id": "module:breakpointsPlugin--module.exports",
12966
- "longname": "module:breakpointsPlugin",
12967
- "name": "module.exports",
12968
- "kind": "function",
12969
- "isExported": true,
12970
- "description": "Installs the breakpoints plugin, providing app-wide reactive breakpoint information.\nIt uses `useBreakpointManager` internally and provides `uluIsMobile`,\n`uluBreakpointActive`, `uluBreakpointDirection`, and `uluBreakpointManager` to all components.",
12971
- "memberof": "module:breakpointsPlugin",
12972
- "params": [
13636
+ "description": "Floating UI placement string (e.g. 'bottom', 'right').",
13637
+ "name": "placement"
13638
+ },
12973
13639
  {
12974
13640
  "type": {
12975
13641
  "names": [
12976
- "object"
13642
+ "Boolean"
12977
13643
  ]
12978
13644
  },
12979
- "description": "The Vue app instance.",
12980
- "name": "app"
13645
+ "optional": true,
13646
+ "description": "If true, darkens the backdrop around the target element.",
13647
+ "name": "highlight"
12981
13648
  },
12982
13649
  {
12983
13650
  "type": {
12984
13651
  "names": [
12985
- "object"
13652
+ "Object"
12986
13653
  ]
12987
13654
  },
12988
- "description": "User-defined options.",
12989
- "name": "userOptions"
13655
+ "optional": true,
13656
+ "description": "Props to pass to the modal (if target is omitted).",
13657
+ "name": "modalProps"
12990
13658
  },
12991
13659
  {
12992
13660
  "type": {
12993
13661
  "names": [
12994
- "string"
13662
+ "Object"
12995
13663
  ]
12996
13664
  },
12997
13665
  "optional": true,
12998
- "defaultvalue": "\"small\"",
12999
- "description": "The breakpoint name to use for `isMobile` detection.",
13000
- "name": "userOptions.breakpointMobile"
13666
+ "description": "Props to pass to the popover (if target is present).",
13667
+ "name": "popoverProps"
13001
13668
  },
13002
13669
  {
13003
13670
  "type": {
13004
13671
  "names": [
13005
- "object"
13672
+ "function"
13006
13673
  ]
13007
13674
  },
13008
13675
  "optional": true,
13009
- "description": "Options to pass to the underlying `useBreakpointManager`.",
13010
- "name": "userOptions.managerOptions"
13676
+ "description": "Async hook called before the step is rendered.",
13677
+ "name": "onEnter"
13011
13678
  }
13012
13679
  ],
13013
13680
  "meta": {
13014
- "lineno": 31,
13015
- "filename": "index.js",
13016
- "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/breakpoints"
13681
+ "lineno": 3,
13682
+ "filename": "api.js",
13683
+ "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/tour"
13017
13684
  },
13018
- "order": 133,
13019
- "level": 0
13685
+ "order": 67
13020
13686
  },
13021
13687
  {
13022
13688
  "id": "module:useBreakpointManager~defaults.initialValue",
@@ -13031,7 +13697,7 @@
13031
13697
  "filename": "useBreakpointManager.js",
13032
13698
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
13033
13699
  },
13034
- "order": 58
13700
+ "order": 60
13035
13701
  },
13036
13702
  {
13037
13703
  "id": "module:useBreakpointManager~defaults.onReady",
@@ -13046,7 +13712,7 @@
13046
13712
  "filename": "useBreakpointManager.js",
13047
13713
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
13048
13714
  },
13049
- "order": 59
13715
+ "order": 61
13050
13716
  },
13051
13717
  {
13052
13718
  "id": "module:useBreakpointManager~defaults.plugin",
@@ -13061,7 +13727,7 @@
13061
13727
  "filename": "useBreakpointManager.js",
13062
13728
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
13063
13729
  },
13064
- "order": 60
13730
+ "order": 62
13065
13731
  },
13066
13732
  {
13067
13733
  "id": "toast.module:defaults--module.exports",
@@ -13077,7 +13743,7 @@
13077
13743
  "filename": "defaults.js",
13078
13744
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/toast"
13079
13745
  },
13080
- "order": 77,
13746
+ "order": 86,
13081
13747
  "level": 0
13082
13748
  },
13083
13749
  {
@@ -13093,7 +13759,7 @@
13093
13759
  "filename": "defaults.js",
13094
13760
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/toast"
13095
13761
  },
13096
- "order": 78
13762
+ "order": 87
13097
13763
  },
13098
13764
  {
13099
13765
  "id": "toast.module:defaults--module.exports.toastOptions.duration",
@@ -13108,7 +13774,7 @@
13108
13774
  "filename": "defaults.js",
13109
13775
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/toast"
13110
13776
  },
13111
- "order": 79
13777
+ "order": 88
13112
13778
  },
13113
13779
  {
13114
13780
  "id": "toast.module:defaults--module.exports.toastOptions.actions",
@@ -13123,7 +13789,7 @@
13123
13789
  "filename": "defaults.js",
13124
13790
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/toast"
13125
13791
  },
13126
- "order": 80
13792
+ "order": 89
13127
13793
  },
13128
13794
  {
13129
13795
  "id": "toast.module:defaults--module.exports.pluginOptions.position",
@@ -13138,7 +13804,7 @@
13138
13804
  "filename": "defaults.js",
13139
13805
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/toast"
13140
13806
  },
13141
- "order": 81
13807
+ "order": 90
13142
13808
  },
13143
13809
  {
13144
13810
  "id": "popovers.module:defaults.plugin",
@@ -13158,7 +13824,7 @@
13158
13824
  "filename": "defaults.js",
13159
13825
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13160
13826
  },
13161
- "order": 92
13827
+ "order": 101
13162
13828
  },
13163
13829
  {
13164
13830
  "id": "popovers.module:defaults.plugin.directiveName",
@@ -13178,7 +13844,7 @@
13178
13844
  "filename": "defaults.js",
13179
13845
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13180
13846
  },
13181
- "order": 93
13847
+ "order": 102
13182
13848
  },
13183
13849
  {
13184
13850
  "id": "popovers.module:defaults.popover",
@@ -13193,7 +13859,7 @@
13193
13859
  "filename": "defaults.js",
13194
13860
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13195
13861
  },
13196
- "order": 94
13862
+ "order": 103
13197
13863
  },
13198
13864
  {
13199
13865
  "id": "popovers.module:defaults.popover.inline",
@@ -13213,7 +13879,7 @@
13213
13879
  "filename": "defaults.js",
13214
13880
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13215
13881
  },
13216
- "order": 95
13882
+ "order": 104
13217
13883
  },
13218
13884
  {
13219
13885
  "id": "popovers.module:defaults.popover.delay",
@@ -13233,7 +13899,7 @@
13233
13899
  "filename": "defaults.js",
13234
13900
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13235
13901
  },
13236
- "order": 96
13902
+ "order": 105
13237
13903
  },
13238
13904
  {
13239
13905
  "id": "popovers.module:defaults.popover.placement",
@@ -13253,7 +13919,7 @@
13253
13919
  "filename": "defaults.js",
13254
13920
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13255
13921
  },
13256
- "order": 97
13922
+ "order": 106
13257
13923
  },
13258
13924
  {
13259
13925
  "id": "popovers.module:defaults.popover.strategy",
@@ -13273,7 +13939,7 @@
13273
13939
  "filename": "defaults.js",
13274
13940
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13275
13941
  },
13276
- "order": 98
13942
+ "order": 107
13277
13943
  },
13278
13944
  {
13279
13945
  "id": "popovers.module:defaults.popover.offset",
@@ -13293,7 +13959,7 @@
13293
13959
  "filename": "defaults.js",
13294
13960
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13295
13961
  },
13296
- "order": 99
13962
+ "order": 108
13297
13963
  },
13298
13964
  {
13299
13965
  "id": "popovers.module:defaults.popover.arrow",
@@ -13313,7 +13979,7 @@
13313
13979
  "filename": "defaults.js",
13314
13980
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13315
13981
  },
13316
- "order": 100
13982
+ "order": 109
13317
13983
  },
13318
13984
  {
13319
13985
  "id": "popovers.module:defaults.tooltip",
@@ -13333,7 +13999,7 @@
13333
13999
  "filename": "defaults.js",
13334
14000
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13335
14001
  },
13336
- "order": 101
14002
+ "order": 110
13337
14003
  },
13338
14004
  {
13339
14005
  "id": "popovers.module:defaults.tooltip.teleportTo",
@@ -13353,7 +14019,7 @@
13353
14019
  "filename": "defaults.js",
13354
14020
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13355
14021
  },
13356
- "order": 102
14022
+ "order": 111
13357
14023
  },
13358
14024
  {
13359
14025
  "id": "popovers.module:defaults.tooltip.class",
@@ -13375,7 +14041,7 @@
13375
14041
  "filename": "defaults.js",
13376
14042
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13377
14043
  },
13378
- "order": 103
14044
+ "order": 112
13379
14045
  },
13380
14046
  {
13381
14047
  "id": "popovers.module:defaults.tooltip.showEvents",
@@ -13395,7 +14061,7 @@
13395
14061
  "filename": "defaults.js",
13396
14062
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13397
14063
  },
13398
- "order": 104
14064
+ "order": 113
13399
14065
  },
13400
14066
  {
13401
14067
  "id": "popovers.module:defaults.tooltip.hideEvents",
@@ -13415,7 +14081,7 @@
13415
14081
  "filename": "defaults.js",
13416
14082
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13417
14083
  },
13418
- "order": 105
14084
+ "order": 114
13419
14085
  },
13420
14086
  {
13421
14087
  "id": "popovers.module:defaults.tooltip.isHtml",
@@ -13435,7 +14101,7 @@
13435
14101
  "filename": "defaults.js",
13436
14102
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13437
14103
  },
13438
- "order": 106
14104
+ "order": 115
13439
14105
  },
13440
14106
  {
13441
14107
  "id": "popovers.module:defaults.tooltip.trigger",
@@ -13456,7 +14122,7 @@
13456
14122
  "filename": "defaults.js",
13457
14123
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13458
14124
  },
13459
- "order": 107
14125
+ "order": 116
13460
14126
  },
13461
14127
  {
13462
14128
  "id": "popovers.module:defaults.tooltip.content",
@@ -13477,7 +14143,7 @@
13477
14143
  "filename": "defaults.js",
13478
14144
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13479
14145
  },
13480
- "order": 108
14146
+ "order": 117
13481
14147
  },
13482
14148
  {
13483
14149
  "id": "popovers.module:defaults.tooltip.delay",
@@ -13497,7 +14163,7 @@
13497
14163
  "filename": "defaults.js",
13498
14164
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13499
14165
  },
13500
- "order": 109
14166
+ "order": 118
13501
14167
  },
13502
14168
  {
13503
14169
  "id": "popovers.module:defaults.tooltip.onReady",
@@ -13512,7 +14178,7 @@
13512
14178
  "filename": "defaults.js",
13513
14179
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13514
14180
  },
13515
- "order": 110
14181
+ "order": 119
13516
14182
  },
13517
14183
  {
13518
14184
  "id": "popovers.module:defaults.tooltip.component",
@@ -13527,7 +14193,7 @@
13527
14193
  "filename": "defaults.js",
13528
14194
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13529
14195
  },
13530
- "order": 111
14196
+ "order": 120
13531
14197
  },
13532
14198
  {
13533
14199
  "id": "popovers.module:defaults.tooltip.componentProps",
@@ -13542,7 +14208,7 @@
13542
14208
  "filename": "defaults.js",
13543
14209
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13544
14210
  },
13545
- "order": 112
14211
+ "order": 121
13546
14212
  },
13547
14213
  {
13548
14214
  "id": "module:breakpointsPlugin--module.exports~defaults.breakpointMobile",
@@ -13557,7 +14223,7 @@
13557
14223
  "filename": "index.js",
13558
14224
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/breakpoints"
13559
14225
  },
13560
- "order": 131,
14226
+ "order": 140,
13561
14227
  "level": 0
13562
14228
  },
13563
14229
  {
@@ -13573,7 +14239,7 @@
13573
14239
  "filename": "index.js",
13574
14240
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/breakpoints"
13575
14241
  },
13576
- "order": 132,
14242
+ "order": 141,
13577
14243
  "level": 0
13578
14244
  },
13579
14245
  {
@@ -13612,7 +14278,7 @@
13612
14278
  "filename": "useToast.js",
13613
14279
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/toast"
13614
14280
  },
13615
- "order": 66,
14281
+ "order": 75,
13616
14282
  "level": 0
13617
14283
  },
13618
14284
  {
@@ -13628,7 +14294,7 @@
13628
14294
  "filename": "store.js",
13629
14295
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/toast"
13630
14296
  },
13631
- "order": 68,
14297
+ "order": 77,
13632
14298
  "level": 0
13633
14299
  },
13634
14300
  {
@@ -13644,7 +14310,7 @@
13644
14310
  "filename": "store.js",
13645
14311
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/toast"
13646
14312
  },
13647
- "order": 70,
14313
+ "order": 79,
13648
14314
  "level": 0
13649
14315
  },
13650
14316
  {
@@ -13656,11 +14322,11 @@
13656
14322
  "description": "Injection key for popover options (merged/resolved with users defaults)",
13657
14323
  "memberof": "module:popoversPlugin--module.exports",
13658
14324
  "meta": {
13659
- "lineno": 13,
14325
+ "lineno": 14,
13660
14326
  "filename": "index.js",
13661
14327
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13662
14328
  },
13663
- "order": 86,
14329
+ "order": 95,
13664
14330
  "level": 0
13665
14331
  },
13666
14332
  {
@@ -13672,11 +14338,11 @@
13672
14338
  "description": "Injection key for tooltip state object (used in tooltip composable, display, etc)",
13673
14339
  "memberof": "module:popoversPlugin--module.exports",
13674
14340
  "meta": {
13675
- "lineno": 18,
14341
+ "lineno": 19,
13676
14342
  "filename": "index.js",
13677
14343
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13678
14344
  },
13679
- "order": 87,
14345
+ "order": 96,
13680
14346
  "level": 0
13681
14347
  },
13682
14348
  {
@@ -13688,11 +14354,11 @@
13688
14354
  "description": "The id for the global tooltip (which is on the tooltip and put on the element aria-describedby)",
13689
14355
  "memberof": "module:popoversPlugin--module.exports",
13690
14356
  "meta": {
13691
- "lineno": 23,
14357
+ "lineno": 24,
13692
14358
  "filename": "index.js",
13693
14359
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13694
14360
  },
13695
- "order": 88,
14361
+ "order": 97,
13696
14362
  "level": 0
13697
14363
  },
13698
14364
  {
@@ -13735,11 +14401,11 @@
13735
14401
  }
13736
14402
  ],
13737
14403
  "meta": {
13738
- "lineno": 37,
14404
+ "lineno": 38,
13739
14405
  "filename": "index.js",
13740
14406
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
13741
14407
  },
13742
- "order": 89,
14408
+ "order": 98,
13743
14409
  "level": 0
13744
14410
  },
13745
14411
  {
@@ -13775,7 +14441,7 @@
13775
14441
  "filename": "useModals.js",
13776
14442
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/modals"
13777
14443
  },
13778
- "order": 114,
14444
+ "order": 123,
13779
14445
  "level": 0
13780
14446
  },
13781
14447
  {
@@ -14744,7 +15410,7 @@
14744
15410
  "filename": "useWindowResize.js",
14745
15411
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
14746
15412
  },
14747
- "order": 33,
15413
+ "order": 35,
14748
15414
  "level": 0
14749
15415
  },
14750
15416
  {
@@ -14798,7 +15464,7 @@
14798
15464
  "filename": "useUluFloating.js",
14799
15465
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
14800
15466
  },
14801
- "order": 37,
15467
+ "order": 39,
14802
15468
  "level": 0
14803
15469
  },
14804
15470
  {
@@ -14835,7 +15501,7 @@
14835
15501
  "filename": "useTableData.js",
14836
15502
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
14837
15503
  },
14838
- "order": 39,
15504
+ "order": 41,
14839
15505
  "level": 0
14840
15506
  },
14841
15507
  {
@@ -14867,7 +15533,7 @@
14867
15533
  "filename": "useRequiredInject.js",
14868
15534
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
14869
15535
  },
14870
- "order": 47,
15536
+ "order": 49,
14871
15537
  "level": 0
14872
15538
  },
14873
15539
  {
@@ -14913,7 +15579,7 @@
14913
15579
  "filename": "usePagination.js",
14914
15580
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
14915
15581
  },
14916
- "order": 49,
15582
+ "order": 51,
14917
15583
  "level": 0
14918
15584
  },
14919
15585
  {
@@ -14986,7 +15652,7 @@
14986
15652
  "filename": "useModifiers.js",
14987
15653
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
14988
15654
  },
14989
- "order": 51,
15655
+ "order": 53,
14990
15656
  "level": 0
14991
15657
  },
14992
15658
  {
@@ -15012,7 +15678,7 @@
15012
15678
  "filename": "useIcon.js",
15013
15679
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
15014
15680
  },
15015
- "order": 53,
15681
+ "order": 55,
15016
15682
  "level": 0
15017
15683
  },
15018
15684
  {
@@ -15082,7 +15748,7 @@
15082
15748
  "filename": "useDocumentTitle.js",
15083
15749
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
15084
15750
  },
15085
- "order": 56,
15751
+ "order": 58,
15086
15752
  "level": 0
15087
15753
  },
15088
15754
  {
@@ -15150,7 +15816,7 @@
15150
15816
  "filename": "useBreakpointManager.js",
15151
15817
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
15152
15818
  },
15153
- "order": 61,
15819
+ "order": 63,
15154
15820
  "level": 0
15155
15821
  },
15156
15822
  {
@@ -15181,7 +15847,7 @@
15181
15847
  "filename": "store.js",
15182
15848
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/toast"
15183
15849
  },
15184
- "order": 71
15850
+ "order": 80
15185
15851
  },
15186
15852
  {
15187
15853
  "id": "toast.module:store~api.remove",
@@ -15206,7 +15872,7 @@
15206
15872
  "filename": "store.js",
15207
15873
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/toast"
15208
15874
  },
15209
- "order": 72
15875
+ "order": 81
15210
15876
  },
15211
15877
  {
15212
15878
  "id": "toast.module:store~api.removeAll",
@@ -15221,7 +15887,7 @@
15221
15887
  "filename": "store.js",
15222
15888
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/toast"
15223
15889
  },
15224
- "order": 73
15890
+ "order": 82
15225
15891
  },
15226
15892
  {
15227
15893
  "id": "module:useTooltip.useTooltip",
@@ -15245,7 +15911,7 @@
15245
15911
  "filename": "useTooltip.js",
15246
15912
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/popovers"
15247
15913
  },
15248
- "order": 84,
15914
+ "order": 93,
15249
15915
  "level": 0
15250
15916
  },
15251
15917
  {
@@ -15271,7 +15937,7 @@
15271
15937
  "filename": "useScrollAnchors.js",
15272
15938
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/scroll-anchors"
15273
15939
  },
15274
- "order": 136,
15940
+ "order": 145,
15275
15941
  "level": 0
15276
15942
  },
15277
15943
  {
@@ -15297,7 +15963,7 @@
15297
15963
  "filename": "useScrollAnchorSections.js",
15298
15964
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/scroll-anchors"
15299
15965
  },
15300
- "order": 146,
15966
+ "order": 155,
15301
15967
  "level": 0
15302
15968
  },
15303
15969
  {
@@ -15334,7 +16000,7 @@
15334
16000
  "filename": "useScrollAnchorSection.js",
15335
16001
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/scroll-anchors"
15336
16002
  },
15337
- "order": 148,
16003
+ "order": 157,
15338
16004
  "level": 0
15339
16005
  },
15340
16006
  {
@@ -15506,7 +16172,7 @@
15506
16172
  "filename": "useFacets.js",
15507
16173
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/facets"
15508
16174
  },
15509
- "order": 154,
16175
+ "order": 163,
15510
16176
  "level": 0
15511
16177
  },
15512
16178
  {
@@ -15522,7 +16188,7 @@
15522
16188
  "filename": "store.js",
15523
16189
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/toast"
15524
16190
  },
15525
- "order": 69,
16191
+ "order": 78,
15526
16192
  "level": 0
15527
16193
  },
15528
16194
  {
@@ -15538,7 +16204,7 @@
15538
16204
  "filename": "api.js",
15539
16205
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/modals"
15540
16206
  },
15541
- "order": 120,
16207
+ "order": 129,
15542
16208
  "level": 0
15543
16209
  },
15544
16210
  {
@@ -15554,7 +16220,7 @@
15554
16220
  "filename": "api.js",
15555
16221
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/modals"
15556
16222
  },
15557
- "order": 121,
16223
+ "order": 130,
15558
16224
  "level": 0
15559
16225
  },
15560
16226
  {
@@ -15588,7 +16254,7 @@
15588
16254
  "filename": "useTableData.js",
15589
16255
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
15590
16256
  },
15591
- "order": 45,
16257
+ "order": 47,
15592
16258
  "level": 0
15593
16259
  },
15594
16260
  {
@@ -15605,7 +16271,7 @@
15605
16271
  "filename": "api.js",
15606
16272
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/modals"
15607
16273
  },
15608
- "order": 119,
16274
+ "order": 128,
15609
16275
  "level": 0
15610
16276
  },
15611
16277
  {
@@ -15622,7 +16288,7 @@
15622
16288
  "filename": "api.js",
15623
16289
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/modals"
15624
16290
  },
15625
- "order": 122,
16291
+ "order": 131,
15626
16292
  "level": 0
15627
16293
  },
15628
16294
  {
@@ -15639,7 +16305,7 @@
15639
16305
  "filename": "index.js",
15640
16306
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/breakpoints"
15641
16307
  },
15642
- "order": 130,
16308
+ "order": 139,
15643
16309
  "level": 0
15644
16310
  },
15645
16311
  {
@@ -15656,7 +16322,7 @@
15656
16322
  "filename": "useScrollAnchors.js",
15657
16323
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/scroll-anchors"
15658
16324
  },
15659
- "order": 143,
16325
+ "order": 152,
15660
16326
  "level": 0
15661
16327
  },
15662
16328
  {
@@ -15701,7 +16367,7 @@
15701
16367
  "filename": "useWindowResize.js",
15702
16368
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
15703
16369
  },
15704
- "order": 32,
16370
+ "order": 34,
15705
16371
  "level": 0
15706
16372
  },
15707
16373
  {
@@ -15718,7 +16384,7 @@
15718
16384
  "filename": "useTableData.js",
15719
16385
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
15720
16386
  },
15721
- "order": 40,
16387
+ "order": 42,
15722
16388
  "level": 0
15723
16389
  },
15724
16390
  {
@@ -15735,7 +16401,7 @@
15735
16401
  "filename": "useTableData.js",
15736
16402
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
15737
16403
  },
15738
- "order": 41,
16404
+ "order": 43,
15739
16405
  "level": 0
15740
16406
  },
15741
16407
  {
@@ -15752,7 +16418,7 @@
15752
16418
  "filename": "useTableData.js",
15753
16419
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
15754
16420
  },
15755
- "order": 42,
16421
+ "order": 44,
15756
16422
  "level": 0
15757
16423
  },
15758
16424
  {
@@ -15769,7 +16435,7 @@
15769
16435
  "filename": "useTableData.js",
15770
16436
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
15771
16437
  },
15772
- "order": 43,
16438
+ "order": 45,
15773
16439
  "level": 0
15774
16440
  },
15775
16441
  {
@@ -15786,7 +16452,7 @@
15786
16452
  "filename": "useTableData.js",
15787
16453
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
15788
16454
  },
15789
- "order": 44,
16455
+ "order": 46,
15790
16456
  "level": 0
15791
16457
  },
15792
16458
  {
@@ -15826,7 +16492,7 @@
15826
16492
  "filename": "useIcon.js",
15827
16493
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
15828
16494
  },
15829
- "order": 54,
16495
+ "order": 56,
15830
16496
  "level": 0
15831
16497
  },
15832
16498
  {
@@ -15857,7 +16523,7 @@
15857
16523
  "filename": "api.js",
15858
16524
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/modals"
15859
16525
  },
15860
- "order": 123,
16526
+ "order": 132,
15861
16527
  "level": 0
15862
16528
  },
15863
16529
  {
@@ -15883,7 +16549,7 @@
15883
16549
  "filename": "api.js",
15884
16550
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/modals"
15885
16551
  },
15886
- "order": 124,
16552
+ "order": 133,
15887
16553
  "level": 0
15888
16554
  },
15889
16555
  {
@@ -15899,7 +16565,7 @@
15899
16565
  "filename": "api.js",
15900
16566
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/modals"
15901
16567
  },
15902
- "order": 125,
16568
+ "order": 134,
15903
16569
  "level": 0
15904
16570
  },
15905
16571
  {
@@ -15925,7 +16591,7 @@
15925
16591
  "filename": "api.js",
15926
16592
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/modals"
15927
16593
  },
15928
- "order": 126,
16594
+ "order": 135,
15929
16595
  "level": 0
15930
16596
  },
15931
16597
  {
@@ -15942,7 +16608,7 @@
15942
16608
  "filename": "useScrollAnchors.js",
15943
16609
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/scroll-anchors"
15944
16610
  },
15945
- "order": 137,
16611
+ "order": 146,
15946
16612
  "level": 0
15947
16613
  },
15948
16614
  {
@@ -15959,7 +16625,7 @@
15959
16625
  "filename": "useScrollAnchors.js",
15960
16626
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/scroll-anchors"
15961
16627
  },
15962
- "order": 138,
16628
+ "order": 147,
15963
16629
  "level": 0
15964
16630
  },
15965
16631
  {
@@ -15976,7 +16642,7 @@
15976
16642
  "filename": "useScrollAnchors.js",
15977
16643
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/scroll-anchors"
15978
16644
  },
15979
- "order": 139,
16645
+ "order": 148,
15980
16646
  "level": 0
15981
16647
  },
15982
16648
  {
@@ -15993,7 +16659,7 @@
15993
16659
  "filename": "useScrollAnchors.js",
15994
16660
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/scroll-anchors"
15995
16661
  },
15996
- "order": 140,
16662
+ "order": 149,
15997
16663
  "level": 0
15998
16664
  },
15999
16665
  {
@@ -16010,7 +16676,7 @@
16010
16676
  "filename": "useScrollAnchors.js",
16011
16677
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/scroll-anchors"
16012
16678
  },
16013
- "order": 141,
16679
+ "order": 150,
16014
16680
  "level": 0
16015
16681
  },
16016
16682
  {
@@ -16027,7 +16693,7 @@
16027
16693
  "filename": "useScrollAnchors.js",
16028
16694
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/scroll-anchors"
16029
16695
  },
16030
- "order": 142,
16696
+ "order": 151,
16031
16697
  "level": 0
16032
16698
  },
16033
16699
  {
@@ -16044,7 +16710,7 @@
16044
16710
  "filename": "useScrollAnchors.js",
16045
16711
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/scroll-anchors"
16046
16712
  },
16047
- "order": 144,
16713
+ "order": 153,
16048
16714
  "level": 0
16049
16715
  },
16050
16716
  {
@@ -16081,7 +16747,7 @@
16081
16747
  "filename": "useFacets.js",
16082
16748
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/facets"
16083
16749
  },
16084
- "order": 150,
16750
+ "order": 159,
16085
16751
  "level": 0
16086
16752
  },
16087
16753
  {
@@ -16118,7 +16784,7 @@
16118
16784
  "filename": "useFacets.js",
16119
16785
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/facets"
16120
16786
  },
16121
- "order": 151,
16787
+ "order": 160,
16122
16788
  "level": 0
16123
16789
  },
16124
16790
  {
@@ -16173,7 +16839,7 @@
16173
16839
  "filename": "useFacets.js",
16174
16840
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/facets"
16175
16841
  },
16176
- "order": 152,
16842
+ "order": 161,
16177
16843
  "level": 0
16178
16844
  },
16179
16845
  {
@@ -16219,7 +16885,7 @@
16219
16885
  "filename": "useFacets.js",
16220
16886
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/components/systems/facets"
16221
16887
  },
16222
- "order": 153,
16888
+ "order": 162,
16223
16889
  "level": 0
16224
16890
  },
16225
16891
  {
@@ -16280,7 +16946,7 @@
16280
16946
  "filename": "useUluFloating.js",
16281
16947
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
16282
16948
  },
16283
- "order": 35,
16949
+ "order": 37,
16284
16950
  "level": 0
16285
16951
  },
16286
16952
  {
@@ -16367,7 +17033,7 @@
16367
17033
  "filename": "useUluFloating.js",
16368
17034
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/composables"
16369
17035
  },
16370
- "order": 36,
17036
+ "order": 38,
16371
17037
  "level": 0
16372
17038
  },
16373
17039
  {
@@ -16408,7 +17074,7 @@
16408
17074
  "filename": "index.js",
16409
17075
  "path": "/Users/joescherben/Personal/Projects/ULU/frontend-vue/lib/plugins/modals"
16410
17076
  },
16411
- "order": 116,
17077
+ "order": 125,
16412
17078
  "level": 0
16413
17079
  }
16414
17080
  ],