srcdev-nuxt-components 9.5.6 → 9.6.0

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 (113) hide show
  1. package/.claude/skills/component-compliance-checklist.md +6 -2
  2. package/.claude/skills/components/breadcrumb.md +5 -0
  3. package/.claude/skills/components/display-pill.md +2 -0
  4. package/.claude/skills/components/input-button.md +3 -0
  5. package/.claude/skills/components/navigation-items.md +1 -0
  6. package/.claude/skills/components/opening-hours.md +12 -0
  7. package/.claude/skills/components/price-list.md +10 -1
  8. package/.claude/skills/components/responsive-header.md +74 -0
  9. package/.claude/skills/components/service-detail.md +32 -0
  10. package/.claude/skills/components/service-summary.md +8 -0
  11. package/.claude/skills/components/services-card-grid.md +5 -3
  12. package/.claude/skills/components/services-card.md +22 -12
  13. package/.claude/skills/components/site-header.md +2 -0
  14. package/.claude/skills/components/slider-gallery.md +10 -4
  15. package/.claude/skills/components/tab-navigation.md +25 -9
  16. package/.claude/skills/index.md +1 -2
  17. package/.claude/skills/storybook-add-story.md +14 -0
  18. package/.vscode/srcdev-component-responsive-header.code-snippets +13 -1
  19. package/.vscode/srcdev-component-service-detail.code-snippets +1 -0
  20. package/.vscode/srcdev-component-service-summary.code-snippets +3 -1
  21. package/.vscode/srcdev-component-services-card.code-snippets +38 -36
  22. package/.vscode/srcdev-component-services-grids.code-snippets +2 -1
  23. package/.vscode/srcdev-component-site-header.code-snippets +3 -1
  24. package/.vscode/srcdev-component-tab-navigation.code-snippets +1 -1
  25. package/app/components/01.atoms/display-pill/CONSUMER-STYLING.md +3 -0
  26. package/app/components/01.atoms/display-pill/DisplayPill.vue +5 -2
  27. package/app/components/01.atoms/navigation/breadcrumb/Breadcrumb.vue +16 -4
  28. package/app/components/01.atoms/navigation/breadcrumb/CONSUMER-STYLING.md +28 -5
  29. package/app/components/01.atoms/navigation/breadcrumb/stories/Breadcrumb.stories.ts +94 -0
  30. package/app/components/01.atoms/navigation/breadcrumb/tests/Breadcrumb.spec.ts +27 -0
  31. package/app/components/02.molecules/navigation/tab-navigation/CONSUMER-STYLING.md +52 -11
  32. package/app/components/02.molecules/navigation/tab-navigation/TabNavigation.vue +55 -23
  33. package/app/components/02.molecules/navigation/tab-navigation/stories/TabNavigation.stories.ts +176 -257
  34. package/app/components/02.molecules/navigation/tab-navigation/tests/TabNavigation.spec.ts +42 -2
  35. package/app/components/02.molecules/opening-hours/CONSUMER-STYLING.md +11 -1
  36. package/app/components/02.molecules/opening-hours/OpeningHours.vue +71 -43
  37. package/app/components/02.molecules/opening-hours/stories/OpeningHours.stories.ts +138 -6
  38. package/app/components/02.molecules/opening-hours/tests/OpeningHours.spec.ts +53 -0
  39. package/app/components/02.molecules/opening-hours/tests/__snapshots__/OpeningHours.spec.ts.snap +1 -1
  40. package/app/components/02.molecules/opening-hours/tests/buildOpeningHoursSpecification.spec.ts +37 -1
  41. package/app/components/02.molecules/price-list/CONSUMER-STYLING.md +17 -5
  42. package/app/components/02.molecules/price-list/PriceList.vue +32 -9
  43. package/app/components/02.molecules/price-list/stories/PriceList.stories.ts +125 -29
  44. package/app/components/02.molecules/price-list/tests/PriceList.spec.ts +20 -0
  45. package/app/components/03.organisms/google-reviews/stories/GoogleReviews.stories.ts +9 -4
  46. package/app/components/03.organisms/image-galleries/slider-gallery/CONSUMER-STYLING.md +19 -1
  47. package/app/components/03.organisms/image-galleries/slider-gallery/SliderGallery.vue +65 -7
  48. package/app/components/03.organisms/image-galleries/slider-gallery/stories/SliderGallery.stories.ts +201 -63
  49. package/app/components/03.organisms/image-galleries/slider-gallery/tests/SliderGallery.spec.ts +41 -2
  50. package/app/components/03.organisms/image-galleries/slider-gallery/tests/__snapshots__/SliderGallery.spec.ts.snap +6 -6
  51. package/app/components/03.organisms/responsive-header/CONSUMER-STYLING.md +18 -0
  52. package/app/components/03.organisms/responsive-header/NavigationItems.vue +56 -18
  53. package/app/components/03.organisms/responsive-header/ResponsiveHeader.vue +106 -31
  54. package/app/components/03.organisms/responsive-header/stories/ResponsiveHeader.stories.ts +201 -18
  55. package/app/components/03.organisms/responsive-header/tests/.nuxt/app.config.mjs +21 -0
  56. package/app/components/03.organisms/responsive-header/tests/.nuxt/components.d.ts +66 -0
  57. package/app/components/03.organisms/responsive-header/tests/.nuxt/imports.d.ts +30 -0
  58. package/app/components/03.organisms/responsive-header/tests/.nuxt/manifest/meta/test.json +1 -0
  59. package/app/components/03.organisms/responsive-header/tests/.nuxt/types/app.config.d.ts +35 -0
  60. package/app/components/03.organisms/responsive-header/tests/.nuxt/types/build.d.ts +23 -0
  61. package/app/components/03.organisms/responsive-header/tests/.nuxt/types/builder-env.d.ts +1 -0
  62. package/app/components/03.organisms/responsive-header/tests/.nuxt/types/components.d.ts +71 -0
  63. package/app/components/03.organisms/responsive-header/tests/.nuxt/types/imports.d.ts +386 -0
  64. package/app/components/03.organisms/responsive-header/tests/.nuxt/types/middleware.d.ts +11 -0
  65. package/app/components/03.organisms/responsive-header/tests/.nuxt/types/modules.d.ts +79 -0
  66. package/app/components/03.organisms/responsive-header/tests/.nuxt/types/nitro-layouts.d.ts +17 -0
  67. package/app/components/03.organisms/responsive-header/tests/.nuxt/types/nitro-nuxt.d.ts +64 -0
  68. package/app/components/03.organisms/responsive-header/tests/.nuxt/types/plugins.d.ts +29 -0
  69. package/app/components/03.organisms/responsive-header/tests/.nuxt/types/runtime-config.d.ts +32 -0
  70. package/app/components/03.organisms/responsive-header/tests/.nuxt/types/shared-imports.d.ts +10 -0
  71. package/app/components/03.organisms/responsive-header/tests/.nuxt/types/vue-shim.d.ts +0 -0
  72. package/app/components/03.organisms/responsive-header/tests/NavigationItems.spec.ts +36 -0
  73. package/app/components/03.organisms/responsive-header/tests/ResponsiveHeader.spec.ts +131 -6
  74. package/app/components/03.organisms/responsive-header/tests/__snapshots__/ResponsiveHeader.spec.ts.snap +9 -9
  75. package/app/components/03.organisms/responsive-header/tests/node_modules/.cache/nuxt/chrome-workspace.json +1 -0
  76. package/app/components/03.organisms/services/service-detail/CONSUMER-STYLING.md +92 -41
  77. package/app/components/03.organisms/services/service-detail/ServiceDetail.vue +198 -73
  78. package/app/components/03.organisms/services/service-detail/stories/ServiceDetail.stories.ts +157 -9
  79. package/app/components/03.organisms/services/service-detail/tests/ServiceDetail.spec.ts +58 -0
  80. package/app/components/03.organisms/services/service-detail/tests/__snapshots__/ServiceDetail.spec.ts.snap +4 -3
  81. package/app/components/03.organisms/services/service-summary/CONSUMER-STYLING.md +30 -0
  82. package/app/components/03.organisms/services/service-summary/ServiceSummary.vue +32 -8
  83. package/app/components/03.organisms/services/service-summary/stories/ServiceSummary.stories.ts +147 -0
  84. package/app/components/03.organisms/services/service-summary/tests/ServiceSummary.spec.ts +26 -0
  85. package/app/components/03.organisms/services/service-summary/tests/__snapshots__/ServiceSummary.spec.ts.snap +1 -1
  86. package/app/components/03.organisms/services/services-card/CONSUMER-STYLING.md +104 -63
  87. package/app/components/03.organisms/services/services-card/ServicesCard.vue +92 -66
  88. package/app/components/03.organisms/services/services-card/stories/ServicesCard.stories.ts +194 -27
  89. package/app/components/03.organisms/services/services-card/tests/ServicesCard.spec.ts +34 -8
  90. package/app/components/03.organisms/services/services-card/tests/__snapshots__/ServicesCard.spec.ts.snap +8 -8
  91. package/app/components/03.organisms/services/services-grids/CONSUMER-STYLING.md +9 -0
  92. package/app/components/03.organisms/services/services-grids/ServicesCardGrid.vue +2 -1
  93. package/app/components/03.organisms/services/services-grids/stories/ServiceSummaryGrid.stories.ts +46 -6
  94. package/app/components/03.organisms/services/services-grids/stories/ServicesCardGrid.stories.ts +89 -11
  95. package/app/components/03.organisms/services/services-grids/tests/ServicesCardGrid.spec.ts +8 -0
  96. package/app/components/03.organisms/services/services-grids/tests/__snapshots__/ServiceSummaryGrid.spec.ts.snap +3 -3
  97. package/app/components/03.organisms/services/services-grids/tests/__snapshots__/ServicesCardGrid.spec.ts.snap +24 -24
  98. package/app/components/03.organisms/site-header/SiteHeader.vue +8 -0
  99. package/app/components/03.organisms/site-header/tests/__snapshots__/SiteHeader.spec.ts.snap +1 -1
  100. package/app/components/05.forms/input-button/CONSUMER-STYLING.md +8 -0
  101. package/app/components/05.forms/input-button/InputButton.vue +3 -1
  102. package/app/composables/tests/useAnchorScroll.spec.ts +8 -0
  103. package/app/composables/useAnchorScroll.ts +1 -1
  104. package/app/utils/opening-hours.ts +23 -2
  105. package/nuxt.config.ts +1 -1
  106. package/package.json +1 -1
  107. package/.claude/skills/components/site-navigation.md +0 -145
  108. package/.vscode/srcdev-component-site-navigation.code-snippets +0 -38
  109. package/app/components/02.molecules/navigation/site-navigation/CONSUMER-STYLING.md +0 -109
  110. package/app/components/02.molecules/navigation/site-navigation/SiteNavigation.vue +0 -751
  111. package/app/components/02.molecules/navigation/site-navigation/stories/SiteNavigation.stories.ts +0 -356
  112. package/app/components/02.molecules/navigation/site-navigation/tests/SiteNavigation.spec.ts +0 -367
  113. package/app/components/02.molecules/navigation/site-navigation/tests/__snapshots__/SiteNavigation.spec.ts.snap +0 -30
@@ -1,10 +1,50 @@
1
+ import { computed, ref } from "vue";
1
2
  import ResponsiveHeader from "../ResponsiveHeader.vue";
3
+ import CanvasSwitcher from "../../../01.atoms/canvas-switcher/CanvasSwitcher.vue";
2
4
  import type { Meta, StoryObj } from "@nuxtjs/storybook";
5
+ import type { MediaCanvas, ResponsiveHeaderProp } from "~/types/components";
3
6
 
4
- const meta: Meta<typeof ResponsiveHeader> = {
7
+ type MainNavJustify = "space-between" | "flex-start" | "safe center" | "safe end";
8
+
9
+ // Story-only arg: drives a CSS token, not a ResponsiveHeader prop. See the argTypes entry.
10
+ type StoryArgs = InstanceType<typeof ResponsiveHeader>["$props"] & {
11
+ mainNavJustifyContent: MainNavJustify;
12
+ };
13
+
14
+ function useStorySetup(args: StoryArgs) {
15
+ const componentArgs = computed(() => {
16
+ const { mainNavJustifyContent: _mainNavJustifyContent, ...rest } = args;
17
+ return rest;
18
+ });
19
+ const tokenStyles = computed(() => ({
20
+ "--responsive-header-main-nav-justify-content": args.mainNavJustifyContent,
21
+ }));
22
+ return { componentArgs, tokenStyles };
23
+ }
24
+
25
+ const renderWith = (template: string) => (args: StoryArgs) => ({
26
+ components: { ResponsiveHeader },
27
+ setup() {
28
+ return useStorySetup(args);
29
+ },
30
+ template: `<div :style="tokenStyles">${template}</div>`,
31
+ });
32
+
33
+ const render = renderWith(`<ResponsiveHeader v-bind="componentArgs" />`);
34
+
35
+ const meta: Meta<StoryArgs> = {
5
36
  title: "Organisms/Responsive Header",
6
37
  component: ResponsiveHeader,
7
38
  argTypes: {
39
+ mainNavJustifyContent: {
40
+ control: "select",
41
+ options: ["space-between", "flex-start", "safe center", "safe end"] satisfies MainNavJustify[],
42
+ description:
43
+ "**Story control, not a prop.** Sets the `--responsive-header-main-nav-justify-content` CSS token on a wrapper. " +
44
+ "To use it in an app, set the token in your own CSS, e.g. `.site-nav { --responsive-header-main-nav-justify-content: flex-start; }`. " +
45
+ "Use `safe end` / `safe center` rather than plain `end` / `center`, so items that don't fit aren't clipped off the start edge.",
46
+ table: { category: "CSS tokens (story only, set in your CSS)", defaultValue: { summary: "space-between" } },
47
+ },
8
48
  responsiveNavLinks: {
9
49
  control: "object",
10
50
  description: "Nav groups keyed by name — each item is either a link (`path`) or a dropdown (`childLinks`)",
@@ -29,12 +69,52 @@ const meta: Meta<typeof ResponsiveHeader> = {
29
69
  control: "boolean",
30
70
  description: "Allow a dropdown to open on hover/focus, not just click",
31
71
  },
72
+ mainNavAriaLabel: { control: "text", table: { category: "Labels", defaultValue: { summary: "Main navigation" } } },
73
+ secondaryNavAriaLabel: { control: "text", table: { category: "Labels", defaultValue: { summary: "Secondary navigation" } } },
74
+ overflowMenuAriaLabel: { control: "text", table: { category: "Labels", defaultValue: { summary: "Overflow navigation menu" } } },
75
+ overflowButtonLabel: {
76
+ control: "text",
77
+ description: "Accessible name of the icon-only overflow/burger button",
78
+ table: { category: "Labels", defaultValue: { summary: "More navigation" } },
79
+ },
80
+ submenuAriaLabel: {
81
+ control: "text",
82
+ description: "aria-label on each dropdown summary; {title} is replaced with the item's title",
83
+ table: { category: "Labels", defaultValue: { summary: "{title} submenu" } },
84
+ },
85
+ anchorScrollOffset: {
86
+ control: { type: "number", min: 0, step: 10 },
87
+ description: "Pixels left above a section when a #anchor link scrolls to it (e.g. a sticky header's height)",
88
+ table: { category: "Behaviour", defaultValue: { summary: "0" } },
89
+ },
32
90
  styleClassPassthrough: {
33
91
  control: "object",
34
92
  description: "Extra CSS classes applied to the root element",
35
93
  },
36
94
  },
95
+ decorators: [
96
+ (story, context) => ({
97
+ components: { story, CanvasSwitcher },
98
+ setup() {
99
+ const canvasName = ref<MediaCanvas>(context.parameters.initialCanvas ?? "fullWidthCanvas");
100
+ return { canvasName };
101
+ },
102
+ template: `
103
+ <div style="padding: 1.2rem 1.6rem; border-block-end: 1px solid currentColor;">
104
+ <CanvasSwitcher v-model:canvas-name="canvasName" />
105
+ </div>
106
+ <div :class="canvasName" style="margin-inline: auto; padding: 2rem; outline: 1px dashed currentColor;">
107
+ <story />
108
+ </div>
109
+ `,
110
+ }),
111
+ ],
112
+ parameters: {
113
+ layout: "fullscreen",
114
+ },
115
+ render,
37
116
  args: {
117
+ mainNavJustifyContent: "space-between",
38
118
  gapBetweenFirstAndSecondNav: 12,
39
119
  collapseBreakpoint: null,
40
120
  collapseAtMainNavIntersection: false,
@@ -44,7 +124,8 @@ const meta: Meta<typeof ResponsiveHeader> = {
44
124
  };
45
125
 
46
126
  export default meta;
47
- type Story = StoryObj<typeof ResponsiveHeader>;
127
+ type Story = StoryObj<StoryArgs>;
128
+
48
129
 
49
130
  const responsiveNavLinks = {
50
131
  firstNav: [
@@ -73,13 +154,7 @@ export const Default: Story = {
73
154
  export const ConstrainedWidth: Story = {
74
155
  name: "Constrained Width (items overflow)",
75
156
  args: { responsiveNavLinks },
76
- render: (args) => ({
77
- components: { ResponsiveHeader },
78
- setup() {
79
- return { args };
80
- },
81
- template: `<div style="max-width: 420px"><ResponsiveHeader v-bind="args" /></div>`,
82
- }),
157
+ render: renderWith(`<div style="max-width: 420px"><ResponsiveHeader v-bind="componentArgs" /></div>`),
83
158
  };
84
159
 
85
160
  export const CustomOverflowIcons: Story = {
@@ -92,19 +167,13 @@ export const CustomOverflowIcons: Story = {
92
167
  export const WithSecondaryNavigationSlot: Story = {
93
168
  name: "With secondaryNavigation slot",
94
169
  args: { responsiveNavLinks },
95
- render: (args) => ({
96
- components: { ResponsiveHeader },
97
- setup() {
98
- return { args };
99
- },
100
- template: `
101
- <ResponsiveHeader v-bind="args">
170
+ render: renderWith(`
171
+ <ResponsiveHeader v-bind="componentArgs">
102
172
  <template #secondaryNavigation>
103
173
  <a href="/settings" aria-label="Settings">⚙</a>
104
174
  </template>
105
175
  </ResponsiveHeader>
106
- `,
107
- }),
176
+ `),
108
177
  };
109
178
 
110
179
  export const SingleFlatGroup: Story = {
@@ -120,3 +189,117 @@ export const SingleFlatGroup: Story = {
120
189
  },
121
190
  },
122
191
  };
192
+
193
+ export const MainNavAlignment: Story = {
194
+ name: "Main Nav Alignment",
195
+ args: { responsiveNavLinks, mainNavJustifyContent: "flex-start" },
196
+ parameters: {
197
+ docs: {
198
+ description: {
199
+ story:
200
+ "The main nav's two groups are spread with `space-between` by default. Use the Main nav justify content control " +
201
+ "(a CSS token set by the story, not a prop) to try `flex-start`, `safe center` and `safe end`. " +
202
+ "Narrow the canvas to check items still collapse into the overflow menu from the end, whatever the alignment.",
203
+ },
204
+ },
205
+ },
206
+ };
207
+
208
+ export const SamePageAnchorLinks: Story = {
209
+ name: "Same-Page Anchor Links",
210
+ args: {
211
+ responsiveNavLinks: {
212
+ main: [
213
+ { name: "Home", path: "#rh-home" },
214
+ { name: "About", path: "#rh-about" },
215
+ { name: "Testimonials", path: "#rh-testimonials" },
216
+ {
217
+ name: "More",
218
+ childLinks: [
219
+ { name: "Prices", path: "#rh-prices" },
220
+ { name: "Blog (a route)", path: "/blog" },
221
+ ],
222
+ },
223
+ { name: "Contact", path: "#rh-contact" },
224
+ ],
225
+ },
226
+ anchorScrollOffset: 80,
227
+ },
228
+ render: renderWith(`
229
+ <div style="position: sticky; top: 0; z-index: 2; background: var(--page-bg, white); border-block-end: 1px solid currentColor;">
230
+ <ResponsiveHeader v-bind="componentArgs" />
231
+ </div>
232
+ <section
233
+ v-for="id in ['rh-home', 'rh-about', 'rh-testimonials', 'rh-prices', 'rh-contact']"
234
+ :id="id"
235
+ :key="id"
236
+ style="min-block-size: 70vh; padding: 2.4rem; border-block-end: 1px dashed currentColor;"
237
+ >
238
+ <h2 style="margin: 0;">#{{ id }}</h2>
239
+ </section>
240
+ `),
241
+ parameters: {
242
+ docs: {
243
+ description: {
244
+ story:
245
+ "Items whose `path` starts with `#` are same-page section links: they render as plain `<a>` (not NuxtLink), " +
246
+ "smooth-scroll to the section (an instant jump under reduced motion), and are active by hash rather than by " +
247
+ "route; the first anchor is active on load. `anchorScrollOffset` (80 here) leaves room for the sticky header. " +
248
+ "Route links like Blog mix in as normal. Narrow the canvas so items move into the overflow menu: anchor links " +
249
+ "there scroll the same way and close the menu. This replaces TabNavigation's anchor mode.",
250
+ },
251
+ },
252
+ },
253
+ };
254
+
255
+ // ─── Stress test ──────────────────────────────────────────────────────────────
256
+
257
+ const stressNavLinks: ResponsiveHeaderProp = {
258
+ primary: [
259
+ { name: "Startseite", path: "/" },
260
+ { name: "Pneumonoultramicroscopicsilicovolcanoconiosisbehandlungohneleerzeichen", path: "/long" },
261
+ {
262
+ name: "Leistungen und Behandlungen",
263
+ iconName: "lucide:this-icon-does-not-exist",
264
+ childLinks: [
265
+ ...Array.from({ length: 26 }, (_, i) => ({ name: `Behandlung ${i + 1}`, path: `/treatment-${i + 1}` })),
266
+ { name: "Same name", path: "/same-a" },
267
+ { name: "Same name", path: "/same-b" },
268
+ { name: "Kopfhautbehandlungmitspeziellenätherischenölenohneleerzeichendurchgehend", path: "/unbroken" },
269
+ { name: "💇‍♀️ Emoji first", path: "/emoji" },
270
+ ],
271
+ },
272
+ { name: "One child", childLinksTitle: "Only one", childLinks: [{ name: "The one", path: "/one" }] },
273
+ { name: "<b>not bold</b>", path: "/html" },
274
+ { name: "من نحن", path: "/rtl" },
275
+ ...Array.from({ length: 8 }, (_, i) => ({ name: `Item ${i + 1}`, path: `/item-${i + 1}` })),
276
+ ],
277
+ secondary: [{ name: "Kontakt und Terminvereinbarung", path: "/contact" }],
278
+ };
279
+
280
+ export const StressTest: Story = {
281
+ name: "Stress Test (Worst-Case Data)",
282
+ args: {
283
+ responsiveNavLinks: stressNavLinks,
284
+ mainNavAriaLabel: "Hauptnavigation",
285
+ secondaryNavAriaLabel: "Sekundäre Navigation",
286
+ overflowMenuAriaLabel: "Weitere Navigationspunkte",
287
+ overflowButtonLabel: "Weitere Navigationspunkte anzeigen",
288
+ submenuAriaLabel: "Untermenü {title}",
289
+ },
290
+ parameters: {
291
+ initialCanvas: "laptopCanvas",
292
+ docs: {
293
+ description: {
294
+ story:
295
+ "Deliberately hostile data to find breakage: 16 top-level items in group keys other than firstNav/secondNav, " +
296
+ "a 70-character unbroken item name, a dropdown with no childLinksTitle (its name is shown instead) and 30 children " +
297
+ "including duplicate names, an unbroken name and emoji, a dropdown with one child, a broken icon name, HTML-like text " +
298
+ "(must render as text), right-to-left Arabic and German labels throughout. Check at every canvas width: items that " +
299
+ "don't fit collapse into the overflow menu, the burger only appears when something has collapsed, the top-bar dropdown " +
300
+ "and the overflow panel never run off-screen (long names wrap, 30 children scroll inside the panel), and nothing " +
301
+ "shows 'undefined'. Resize the canvas back and forth to check items return to the bar.",
302
+ },
303
+ },
304
+ },
305
+ };
@@ -0,0 +1,21 @@
1
+
2
+ import { defuFn } from 'defu'
3
+
4
+ const inlineConfig = {
5
+ "nuxt": {}
6
+ }
7
+
8
+ /** client **/
9
+ import { _replaceAppConfig } from '#app/config'
10
+
11
+ // Vite - webpack is handled directly in #app/config
12
+ if (import.meta.dev && !import.meta.nitro && import.meta.hot) {
13
+ import.meta.hot.accept((newModule) => {
14
+ _replaceAppConfig(newModule.default)
15
+ })
16
+ }
17
+ /** client-end **/
18
+
19
+
20
+
21
+ export default /*@__PURE__*/ defuFn(inlineConfig)
@@ -0,0 +1,66 @@
1
+
2
+ import type { DefineComponent, SlotsType } from 'vue'
3
+ type IslandComponent<T> = DefineComponent<{}, {refresh: () => Promise<void>}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, SlotsType<{ fallback: { error: unknown } }>> & T
4
+
5
+ type HydrationStrategies = {
6
+ hydrateOnVisible?: IntersectionObserverInit | true
7
+ hydrateOnIdle?: number | true
8
+ hydrateOnInteraction?: keyof HTMLElementEventMap | Array<keyof HTMLElementEventMap> | true
9
+ hydrateOnMediaQuery?: string
10
+ hydrateAfter?: number
11
+ hydrateWhen?: boolean
12
+ hydrateNever?: true
13
+ }
14
+ type LazyComponent<T> = DefineComponent<HydrationStrategies, {}, {}, {}, {}, {}, {}, { hydrated: () => void }> & T
15
+
16
+
17
+ export const NuxtWelcome: typeof import("../../../../../../node_modules/nuxt/dist/app/components/welcome.vue")['default']
18
+ export const NuxtLayout: typeof import("../../../../../../node_modules/nuxt/dist/app/components/nuxt-layout")['default']
19
+ export const NuxtErrorBoundary: typeof import("../../../../../../node_modules/nuxt/dist/app/components/nuxt-error-boundary.vue")['default']
20
+ export const ClientOnly: typeof import("../../../../../../node_modules/nuxt/dist/app/components/client-only")['default']
21
+ export const DevOnly: typeof import("../../../../../../node_modules/nuxt/dist/app/components/dev-only")['default']
22
+ export const ServerPlaceholder: typeof import("../../../../../../node_modules/nuxt/dist/app/components/server-placeholder")['default']
23
+ export const NuxtLink: typeof import("../../../../../../node_modules/nuxt/dist/app/components/nuxt-link")['default']
24
+ export const NuxtLoadingIndicator: typeof import("../../../../../../node_modules/nuxt/dist/app/components/nuxt-loading-indicator")['default']
25
+ export const NuxtTime: typeof import("../../../../../../node_modules/nuxt/dist/app/components/nuxt-time.vue")['default']
26
+ export const NuxtRouteAnnouncer: typeof import("../../../../../../node_modules/nuxt/dist/app/components/nuxt-route-announcer")['default']
27
+ export const NuxtAnnouncer: typeof import("../../../../../../node_modules/nuxt/dist/app/components/nuxt-announcer")['default']
28
+ export const NuxtImg: typeof import("../../../../../../node_modules/nuxt/dist/app/components/nuxt-stubs")['NuxtImg']
29
+ export const NuxtPicture: typeof import("../../../../../../node_modules/nuxt/dist/app/components/nuxt-stubs")['NuxtPicture']
30
+ export const NuxtPage: typeof import("../../../../../../node_modules/nuxt/dist/pages/runtime/page-placeholder")['default']
31
+ export const NoScript: typeof import("../../../../../../node_modules/nuxt/dist/head/runtime/components")['NoScript']
32
+ export const Link: typeof import("../../../../../../node_modules/nuxt/dist/head/runtime/components")['Link']
33
+ export const Base: typeof import("../../../../../../node_modules/nuxt/dist/head/runtime/components")['Base']
34
+ export const Title: typeof import("../../../../../../node_modules/nuxt/dist/head/runtime/components")['Title']
35
+ export const Meta: typeof import("../../../../../../node_modules/nuxt/dist/head/runtime/components")['Meta']
36
+ export const Style: typeof import("../../../../../../node_modules/nuxt/dist/head/runtime/components")['Style']
37
+ export const Head: typeof import("../../../../../../node_modules/nuxt/dist/head/runtime/components")['Head']
38
+ export const Html: typeof import("../../../../../../node_modules/nuxt/dist/head/runtime/components")['Html']
39
+ export const Body: typeof import("../../../../../../node_modules/nuxt/dist/head/runtime/components")['Body']
40
+ export const NuxtIsland: typeof import("../../../../../../node_modules/nuxt/dist/app/components/nuxt-island")['default']
41
+ export const LazyNuxtWelcome: LazyComponent<typeof import("../../../../../../node_modules/nuxt/dist/app/components/welcome.vue")['default']>
42
+ export const LazyNuxtLayout: LazyComponent<typeof import("../../../../../../node_modules/nuxt/dist/app/components/nuxt-layout")['default']>
43
+ export const LazyNuxtErrorBoundary: LazyComponent<typeof import("../../../../../../node_modules/nuxt/dist/app/components/nuxt-error-boundary.vue")['default']>
44
+ export const LazyClientOnly: LazyComponent<typeof import("../../../../../../node_modules/nuxt/dist/app/components/client-only")['default']>
45
+ export const LazyDevOnly: LazyComponent<typeof import("../../../../../../node_modules/nuxt/dist/app/components/dev-only")['default']>
46
+ export const LazyServerPlaceholder: LazyComponent<typeof import("../../../../../../node_modules/nuxt/dist/app/components/server-placeholder")['default']>
47
+ export const LazyNuxtLink: LazyComponent<typeof import("../../../../../../node_modules/nuxt/dist/app/components/nuxt-link")['default']>
48
+ export const LazyNuxtLoadingIndicator: LazyComponent<typeof import("../../../../../../node_modules/nuxt/dist/app/components/nuxt-loading-indicator")['default']>
49
+ export const LazyNuxtTime: LazyComponent<typeof import("../../../../../../node_modules/nuxt/dist/app/components/nuxt-time.vue")['default']>
50
+ export const LazyNuxtRouteAnnouncer: LazyComponent<typeof import("../../../../../../node_modules/nuxt/dist/app/components/nuxt-route-announcer")['default']>
51
+ export const LazyNuxtAnnouncer: LazyComponent<typeof import("../../../../../../node_modules/nuxt/dist/app/components/nuxt-announcer")['default']>
52
+ export const LazyNuxtImg: LazyComponent<typeof import("../../../../../../node_modules/nuxt/dist/app/components/nuxt-stubs")['NuxtImg']>
53
+ export const LazyNuxtPicture: LazyComponent<typeof import("../../../../../../node_modules/nuxt/dist/app/components/nuxt-stubs")['NuxtPicture']>
54
+ export const LazyNuxtPage: LazyComponent<typeof import("../../../../../../node_modules/nuxt/dist/pages/runtime/page-placeholder")['default']>
55
+ export const LazyNoScript: LazyComponent<typeof import("../../../../../../node_modules/nuxt/dist/head/runtime/components")['NoScript']>
56
+ export const LazyLink: LazyComponent<typeof import("../../../../../../node_modules/nuxt/dist/head/runtime/components")['Link']>
57
+ export const LazyBase: LazyComponent<typeof import("../../../../../../node_modules/nuxt/dist/head/runtime/components")['Base']>
58
+ export const LazyTitle: LazyComponent<typeof import("../../../../../../node_modules/nuxt/dist/head/runtime/components")['Title']>
59
+ export const LazyMeta: LazyComponent<typeof import("../../../../../../node_modules/nuxt/dist/head/runtime/components")['Meta']>
60
+ export const LazyStyle: LazyComponent<typeof import("../../../../../../node_modules/nuxt/dist/head/runtime/components")['Style']>
61
+ export const LazyHead: LazyComponent<typeof import("../../../../../../node_modules/nuxt/dist/head/runtime/components")['Head']>
62
+ export const LazyHtml: LazyComponent<typeof import("../../../../../../node_modules/nuxt/dist/head/runtime/components")['Html']>
63
+ export const LazyBody: LazyComponent<typeof import("../../../../../../node_modules/nuxt/dist/head/runtime/components")['Body']>
64
+ export const LazyNuxtIsland: LazyComponent<typeof import("../../../../../../node_modules/nuxt/dist/app/components/nuxt-island")['default']>
65
+
66
+ export const componentNames: string[]
@@ -0,0 +1,30 @@
1
+ export { useScriptTriggerConsent, useScriptEventPage, useScriptTriggerElement, useScript, useScriptGoogleAnalytics, useScriptPlausibleAnalytics, useScriptCrisp, useScriptClarity, useScriptCloudflareWebAnalytics, useScriptVercelAnalytics, useScriptPostHog, useScriptFathomAnalytics, useScriptMatomoAnalytics, useScriptMixpanelAnalytics, useScriptBingUet, useScriptGoogleTagManager, useScriptGoogleAdsense, useScriptGoogleRecaptcha, useScriptGoogleSignIn, useScriptSegment, useScriptMetaPixel, useScriptXPixel, useScriptTikTokPixel, useScriptIntercom, useScriptHotjar, useScriptStripe, useScriptLemonSqueezy, useScriptVimeoPlayer, useScriptYouTubePlayer, useScriptGoogleMaps, useScriptNpm, useScriptUmamiAnalytics, useScriptSnapchatPixel, useScriptRybbitAnalytics, useScriptDatabuddyAnalytics, useScriptRedditPixel, useScriptPayPal, useScriptGravatar, useScriptAhrefsAnalytics, useScriptLinkedInInsight, useScriptCalendly, useScriptUsercentrics } from '#app/composables/script-stubs';
2
+ export { isVue2, isVue3 } from 'vue-demi';
3
+ export { defineNuxtLink } from '#app/components/nuxt-link';
4
+ export { useNuxtApp, tryUseNuxtApp, defineNuxtPlugin, definePayloadPlugin, useRuntimeConfig, defineAppConfig } from '#app/nuxt';
5
+ export { useAppConfig, updateAppConfig } from '#app/config';
6
+ export { defineNuxtComponent } from '#app/composables/component';
7
+ export { useAsyncData, useLazyAsyncData, useNuxtData, refreshNuxtData, clearNuxtData, createUseAsyncData } from '#app/composables/asyncData';
8
+ export { useHydration } from '#app/composables/hydrate';
9
+ export { callOnce } from '#app/composables/once';
10
+ export { useState, clearNuxtState } from '#app/composables/state';
11
+ export { clearError, createError, isNuxtError, showError, useError } from '#app/composables/error';
12
+ export { useFetch, useLazyFetch, createUseFetch } from '#app/composables/fetch';
13
+ export { useCookie, refreshCookie } from '#app/composables/cookie';
14
+ export { onPrehydrate, prerenderRoutes, useRequestHeader, useRequestHeaders, useResponseHeader, useRequestEvent, useRequestFetch, setResponseStatus } from '#app/composables/ssr';
15
+ export { onNuxtReady } from '#app/composables/ready';
16
+ export { preloadComponents, prefetchComponents, preloadRouteComponents } from '#app/composables/preload';
17
+ export { abortNavigation, addRouteMiddleware, defineNuxtRouteMiddleware, setPageLayout, navigateTo, useRoute, useRouter, onBeforeRouteLeave, onBeforeRouteUpdate } from '#app/composables/router';
18
+ export { isPrerendered, loadPayload, preloadPayload, definePayloadReducer, definePayloadReviver } from '#app/composables/payload';
19
+ export { useLoadingIndicator } from '#app/composables/loading-indicator';
20
+ export { getAppManifest, getRouteRules } from '#app/composables/manifest';
21
+ export { reloadNuxtApp } from '#app/composables/chunk';
22
+ export { useRequestURL } from '#app/composables/url';
23
+ export { usePreviewMode } from '#app/composables/preview';
24
+ export { useRouteAnnouncer } from '#app/composables/route-announcer';
25
+ export { useAnnouncer } from '#app/composables/announcer';
26
+ export { useRuntimeHook } from '#app/composables/runtime-hook';
27
+ export { useHead, useHeadSafe, useServerHeadSafe, useServerHead, useSeoMeta, useServerSeoMeta, injectHead } from '#app/composables/head';
28
+ export { withCtx, withDirectives, withKeys, withMemo, withModifiers, withScopeId, onActivated, onBeforeMount, onBeforeUnmount, onBeforeUpdate, onDeactivated, onErrorCaptured, onMounted, onRenderTracked, onRenderTriggered, onServerPrefetch, onUnmounted, onUpdated, computed, customRef, isProxy, isReactive, isReadonly, isRef, markRaw, proxyRefs, reactive, readonly, ref, shallowReactive, shallowReadonly, shallowRef, toRaw, toRef, toRefs, triggerRef, unref, watch, watchEffect, watchPostEffect, watchSyncEffect, onWatcherCleanup, isShallow, effect, effectScope, getCurrentScope, onScopeDispose, defineComponent, defineAsyncComponent, resolveComponent, getCurrentInstance, h, inject, hasInjectionContext, nextTick, provide, toValue, useModel, useAttrs, useCssModule, useSlots, useTransitionState, useId, useTemplateRef, useShadowRoot, useCssVars, Component, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue';
29
+ export { requestIdleCallback, cancelIdleCallback } from '#app/compat/idle-callback';
30
+ export { defineLazyHydrationComponent } from '#app/composables/lazy-hydration';
@@ -0,0 +1,35 @@
1
+
2
+ import type { AppConfigInput, CustomAppConfig } from 'nuxt/schema'
3
+ import type { Defu } from 'defu'
4
+
5
+
6
+ declare global {
7
+ const defineAppConfig: <C extends AppConfigInput> (config: C) => C
8
+ }
9
+
10
+ declare const inlineConfig = {
11
+ "nuxt": {}
12
+ }
13
+ type ResolvedAppConfig = Defu<typeof inlineConfig, []>
14
+ type IsAny<T> = 0 extends 1 & T ? true : false
15
+
16
+ type MergedAppConfig<Resolved extends Record<string, unknown>, Custom extends Record<string, unknown>> = {
17
+ [K in keyof (Resolved & Custom)]: K extends keyof Custom
18
+ ? unknown extends Custom[K]
19
+ ? Resolved[K]
20
+ : IsAny<Custom[K]> extends true
21
+ ? Resolved[K]
22
+ : Custom[K] extends Record<string, any>
23
+ ? Resolved[K] extends Record<string, any>
24
+ ? MergedAppConfig<Resolved[K], Custom[K]>
25
+ : Exclude<Custom[K], undefined>
26
+ : Exclude<Custom[K], undefined>
27
+ : Resolved[K]
28
+ }
29
+
30
+ declare module 'nuxt/schema' {
31
+ interface AppConfig extends MergedAppConfig<ResolvedAppConfig, CustomAppConfig> { }
32
+ }
33
+ declare module '@nuxt/schema' {
34
+ interface AppConfig extends MergedAppConfig<ResolvedAppConfig, CustomAppConfig> { }
35
+ }
@@ -0,0 +1,23 @@
1
+ declare module "#build/app-component.mjs";
2
+ declare module "#build/nitro.client.mjs";
3
+ declare module "#build/plugins.client.mjs";
4
+ declare module "#build/css.mjs";
5
+ declare module "#build/fetch.mjs";
6
+ declare module "#build/error-component.mjs";
7
+ declare module "#build/global-polyfills.mjs";
8
+ declare module "#build/layouts.mjs";
9
+ declare module "#build/middleware.mjs";
10
+ declare module "#build/nuxt.config.mjs";
11
+ declare module "#build/paths.mjs";
12
+ declare module "#build/root-component.mjs";
13
+ declare module "#build/plugins.server.mjs";
14
+ declare module "#build/test-component-wrapper.mjs";
15
+ declare module "#build/pages.mjs";
16
+ declare module "#build/router.options.mjs";
17
+ declare module "#build/unhead-options.mjs";
18
+ declare module "#build/unhead.config.mjs";
19
+ declare module "#build/components.plugin.mjs";
20
+ declare module "#build/component-names.mjs";
21
+ declare module "#build/components.islands.mjs";
22
+ declare module "#build/component-chunk.mjs";
23
+ declare module "#build/route-rules.mjs";
@@ -0,0 +1,71 @@
1
+
2
+ import type { DefineComponent, SlotsType } from 'vue'
3
+ type IslandComponent<T> = DefineComponent<{}, {refresh: () => Promise<void>}, {}, {}, {}, {}, {}, {}, {}, {}, {}, {}, SlotsType<{ fallback: { error: unknown } }>> & T
4
+
5
+ type HydrationStrategies = {
6
+ hydrateOnVisible?: IntersectionObserverInit | true
7
+ hydrateOnIdle?: number | true
8
+ hydrateOnInteraction?: keyof HTMLElementEventMap | Array<keyof HTMLElementEventMap> | true
9
+ hydrateOnMediaQuery?: string
10
+ hydrateAfter?: number
11
+ hydrateWhen?: boolean
12
+ hydrateNever?: true
13
+ }
14
+ type LazyComponent<T> = DefineComponent<HydrationStrategies, {}, {}, {}, {}, {}, {}, { hydrated: () => void }> & T
15
+
16
+ interface _GlobalComponents {
17
+ NuxtWelcome: typeof import("../../../../../../../node_modules/nuxt/dist/app/components/welcome.vue")['default']
18
+ NuxtLayout: typeof import("../../../../../../../node_modules/nuxt/dist/app/components/nuxt-layout")['default']
19
+ NuxtErrorBoundary: typeof import("../../../../../../../node_modules/nuxt/dist/app/components/nuxt-error-boundary.vue")['default']
20
+ ClientOnly: typeof import("../../../../../../../node_modules/nuxt/dist/app/components/client-only")['default']
21
+ DevOnly: typeof import("../../../../../../../node_modules/nuxt/dist/app/components/dev-only")['default']
22
+ ServerPlaceholder: typeof import("../../../../../../../node_modules/nuxt/dist/app/components/server-placeholder")['default']
23
+ NuxtLink: typeof import("../../../../../../../node_modules/nuxt/dist/app/components/nuxt-link")['default']
24
+ NuxtLoadingIndicator: typeof import("../../../../../../../node_modules/nuxt/dist/app/components/nuxt-loading-indicator")['default']
25
+ NuxtTime: typeof import("../../../../../../../node_modules/nuxt/dist/app/components/nuxt-time.vue")['default']
26
+ NuxtRouteAnnouncer: typeof import("../../../../../../../node_modules/nuxt/dist/app/components/nuxt-route-announcer")['default']
27
+ NuxtAnnouncer: typeof import("../../../../../../../node_modules/nuxt/dist/app/components/nuxt-announcer")['default']
28
+ NuxtImg: typeof import("../../../../../../../node_modules/nuxt/dist/app/components/nuxt-stubs")['NuxtImg']
29
+ NuxtPicture: typeof import("../../../../../../../node_modules/nuxt/dist/app/components/nuxt-stubs")['NuxtPicture']
30
+ NuxtPage: typeof import("../../../../../../../node_modules/nuxt/dist/pages/runtime/page-placeholder")['default']
31
+ NoScript: typeof import("../../../../../../../node_modules/nuxt/dist/head/runtime/components")['NoScript']
32
+ Link: typeof import("../../../../../../../node_modules/nuxt/dist/head/runtime/components")['Link']
33
+ Base: typeof import("../../../../../../../node_modules/nuxt/dist/head/runtime/components")['Base']
34
+ Title: typeof import("../../../../../../../node_modules/nuxt/dist/head/runtime/components")['Title']
35
+ Meta: typeof import("../../../../../../../node_modules/nuxt/dist/head/runtime/components")['Meta']
36
+ Style: typeof import("../../../../../../../node_modules/nuxt/dist/head/runtime/components")['Style']
37
+ Head: typeof import("../../../../../../../node_modules/nuxt/dist/head/runtime/components")['Head']
38
+ Html: typeof import("../../../../../../../node_modules/nuxt/dist/head/runtime/components")['Html']
39
+ Body: typeof import("../../../../../../../node_modules/nuxt/dist/head/runtime/components")['Body']
40
+ NuxtIsland: typeof import("../../../../../../../node_modules/nuxt/dist/app/components/nuxt-island")['default']
41
+ LazyNuxtWelcome: LazyComponent<typeof import("../../../../../../../node_modules/nuxt/dist/app/components/welcome.vue")['default']>
42
+ LazyNuxtLayout: LazyComponent<typeof import("../../../../../../../node_modules/nuxt/dist/app/components/nuxt-layout")['default']>
43
+ LazyNuxtErrorBoundary: LazyComponent<typeof import("../../../../../../../node_modules/nuxt/dist/app/components/nuxt-error-boundary.vue")['default']>
44
+ LazyClientOnly: LazyComponent<typeof import("../../../../../../../node_modules/nuxt/dist/app/components/client-only")['default']>
45
+ LazyDevOnly: LazyComponent<typeof import("../../../../../../../node_modules/nuxt/dist/app/components/dev-only")['default']>
46
+ LazyServerPlaceholder: LazyComponent<typeof import("../../../../../../../node_modules/nuxt/dist/app/components/server-placeholder")['default']>
47
+ LazyNuxtLink: LazyComponent<typeof import("../../../../../../../node_modules/nuxt/dist/app/components/nuxt-link")['default']>
48
+ LazyNuxtLoadingIndicator: LazyComponent<typeof import("../../../../../../../node_modules/nuxt/dist/app/components/nuxt-loading-indicator")['default']>
49
+ LazyNuxtTime: LazyComponent<typeof import("../../../../../../../node_modules/nuxt/dist/app/components/nuxt-time.vue")['default']>
50
+ LazyNuxtRouteAnnouncer: LazyComponent<typeof import("../../../../../../../node_modules/nuxt/dist/app/components/nuxt-route-announcer")['default']>
51
+ LazyNuxtAnnouncer: LazyComponent<typeof import("../../../../../../../node_modules/nuxt/dist/app/components/nuxt-announcer")['default']>
52
+ LazyNuxtImg: LazyComponent<typeof import("../../../../../../../node_modules/nuxt/dist/app/components/nuxt-stubs")['NuxtImg']>
53
+ LazyNuxtPicture: LazyComponent<typeof import("../../../../../../../node_modules/nuxt/dist/app/components/nuxt-stubs")['NuxtPicture']>
54
+ LazyNuxtPage: LazyComponent<typeof import("../../../../../../../node_modules/nuxt/dist/pages/runtime/page-placeholder")['default']>
55
+ LazyNoScript: LazyComponent<typeof import("../../../../../../../node_modules/nuxt/dist/head/runtime/components")['NoScript']>
56
+ LazyLink: LazyComponent<typeof import("../../../../../../../node_modules/nuxt/dist/head/runtime/components")['Link']>
57
+ LazyBase: LazyComponent<typeof import("../../../../../../../node_modules/nuxt/dist/head/runtime/components")['Base']>
58
+ LazyTitle: LazyComponent<typeof import("../../../../../../../node_modules/nuxt/dist/head/runtime/components")['Title']>
59
+ LazyMeta: LazyComponent<typeof import("../../../../../../../node_modules/nuxt/dist/head/runtime/components")['Meta']>
60
+ LazyStyle: LazyComponent<typeof import("../../../../../../../node_modules/nuxt/dist/head/runtime/components")['Style']>
61
+ LazyHead: LazyComponent<typeof import("../../../../../../../node_modules/nuxt/dist/head/runtime/components")['Head']>
62
+ LazyHtml: LazyComponent<typeof import("../../../../../../../node_modules/nuxt/dist/head/runtime/components")['Html']>
63
+ LazyBody: LazyComponent<typeof import("../../../../../../../node_modules/nuxt/dist/head/runtime/components")['Body']>
64
+ LazyNuxtIsland: LazyComponent<typeof import("../../../../../../../node_modules/nuxt/dist/app/components/nuxt-island")['default']>
65
+ }
66
+
67
+ declare module 'vue' {
68
+ export interface GlobalComponents extends _GlobalComponents { }
69
+ }
70
+
71
+ export {}