srcdev-nuxt-components 9.6.18 → 9.6.20

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 (187) hide show
  1. package/.claude/rules/consumer/css-relative-colour-calc.md +15 -0
  2. package/.claude/rules/consumer/ids-from-useid.md +3 -2
  3. package/.claude/rules/consumer/vue-dynamic-arg-no-spaces.md +16 -0
  4. package/.claude/skills/component-compliance-checklist.md +11 -1
  5. package/.claude/skills/component-dynamic-slots.md +2 -2
  6. package/.claude/skills/component-naming.md +1 -1
  7. package/.claude/skills/components/accordion-chat.md +99 -0
  8. package/.claude/skills/components/accordion-group.md +98 -0
  9. package/.claude/skills/components/action-menu.md +11 -5
  10. package/.claude/skills/components/auto-grid.md +3 -1
  11. package/.claude/skills/components/capture-qr-code.md +9 -5
  12. package/.claude/skills/components/carousel-flip.md +41 -30
  13. package/.claude/skills/components/column-flow-grid.md +2 -0
  14. package/.claude/skills/components/dashboard-quad-grid.md +7 -2
  15. package/.claude/skills/components/dashboard-stats-grid.md +4 -0
  16. package/.claude/skills/components/decode-qr-code.md +7 -2
  17. package/.claude/skills/components/deep-expanding-menu-classic.md +31 -30
  18. package/.claude/skills/components/deep-expanding-menu.md +22 -21
  19. package/.claude/skills/components/expanding-panel-classic.md +9 -7
  20. package/.claude/skills/components/expanding-panel.md +9 -8
  21. package/.claude/skills/components/grid-stack.md +2 -0
  22. package/.claude/skills/components/layout-grid-by-cols.md +2 -0
  23. package/.claude/skills/components/masonry-grid.md +9 -1
  24. package/.claude/skills/components/page-row.md +3 -0
  25. package/.claude/skills/components/samaritan-prompt.md +24 -8
  26. package/.claude/skills/components/site-header.md +16 -2
  27. package/.claude/skills/components/sparkle-effect.md +79 -0
  28. package/.claude/skills/index.md +16 -14
  29. package/.claude/skills/storybook-add-story.md +33 -0
  30. package/.claude/skills/testing-add-unit-test.md +26 -0
  31. package/.claude/skills/using-component-skills.md +1 -1
  32. package/.vscode/srcdev-component-accordion-chat.code-snippets +42 -0
  33. package/.vscode/srcdev-component-accordion-group.code-snippets +38 -0
  34. package/.vscode/srcdev-component-action-menu.code-snippets +3 -3
  35. package/.vscode/srcdev-component-capture-decode-qr-code.code-snippets +11 -2
  36. package/.vscode/srcdev-component-carousel-flip.code-snippets +22 -4
  37. package/.vscode/srcdev-component-deep-expanding-menu-classic.code-snippets +32 -2
  38. package/.vscode/srcdev-component-deep-expanding-menu.code-snippets +31 -1
  39. package/.vscode/srcdev-component-samaritan-prompt.code-snippets +5 -4
  40. package/.vscode/srcdev-component-site-header.code-snippets +13 -1
  41. package/.vscode/srcdev-component-sparkle-effect.code-snippets +33 -0
  42. package/app/components/01.atoms/animations/sparkle-effect/CONSUMER-STYLING.md +75 -0
  43. package/app/components/01.atoms/animations/sparkle-effect/SparkleEffect.vue +213 -0
  44. package/app/components/01.atoms/animations/sparkle-effect/stories/SparkleEffect.stories.ts +303 -0
  45. package/app/components/01.atoms/animations/sparkle-effect/tests/SparkleEffect.spec.ts +150 -0
  46. package/app/components/01.atoms/content-wrappers/docs-pages/ContentDocs.vue +1 -1
  47. package/app/components/01.atoms/content-wrappers/layout-grid/dashboard-quad-grid/CONSUMER-STYLING.md +12 -2
  48. package/app/components/01.atoms/content-wrappers/layout-grid/dashboard-quad-grid/DashboardQuadGrid.vue +19 -17
  49. package/app/components/01.atoms/content-wrappers/layout-grid/dashboard-quad-grid/stories/DashboardQuadGrid.stories.ts +42 -0
  50. package/app/components/01.atoms/content-wrappers/layout-grid/dashboard-quad-grid/tests/DashboardQuadGrid.spec.ts +31 -44
  51. package/app/components/01.atoms/content-wrappers/layout-grid/dashboard-stats-grid/CONSUMER-STYLING.md +13 -1
  52. package/app/components/01.atoms/content-wrappers/layout-grid/dashboard-stats-grid/DashboardStatsGrid.vue +40 -31
  53. package/app/components/01.atoms/content-wrappers/layout-grid/dashboard-stats-grid/stories/DashboardStatsGrid.stories.ts +47 -0
  54. package/app/components/01.atoms/content-wrappers/layout-grid/dashboard-stats-grid/tests/DashboardStatsGrid.spec.ts +51 -53
  55. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-cols/CONSUMER-STYLING.md +3 -0
  56. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-cols/LayoutGridByCols.vue +4 -0
  57. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-cols/stories/LayoutGridByCols.stories.ts +47 -2
  58. package/app/components/01.atoms/content-wrappers/layout-grid/layout-grid-by-cols/tests/LayoutGridByCols.spec.ts +36 -23
  59. package/app/components/01.atoms/grids/auto-grid/AutoGrid.vue +7 -3
  60. package/app/components/01.atoms/grids/auto-grid/CONSUMER-STYLING.md +1 -1
  61. package/app/components/01.atoms/grids/auto-grid/stories/AutoGrid.stories.ts +46 -1
  62. package/app/components/01.atoms/grids/auto-grid/tests/AutoGrid.spec.ts +40 -27
  63. package/app/components/01.atoms/grids/auto-grid/tests/__snapshots__/AutoGrid.spec.ts.snap +1 -1
  64. package/app/components/01.atoms/grids/column-flow-grid/CONSUMER-STYLING.md +9 -0
  65. package/app/components/01.atoms/grids/column-flow-grid/ColumnFlowGrid.vue +3 -2
  66. package/app/components/01.atoms/grids/column-flow-grid/stories/ColumnFlowGrid.stories.ts +46 -0
  67. package/app/components/01.atoms/grids/column-flow-grid/tests/ColumnFlowGrid.spec.ts +24 -11
  68. package/app/components/01.atoms/grids/grid-stack/CONSUMER-STYLING.md +3 -0
  69. package/app/components/01.atoms/grids/grid-stack/GridStack.vue +2 -0
  70. package/app/components/01.atoms/grids/grid-stack/stories/GridStack.stories.ts +41 -0
  71. package/app/components/01.atoms/grids/grid-stack/tests/GridStack.spec.ts +26 -13
  72. package/app/components/01.atoms/grids/masonry-grid/CONSUMER-STYLING.md +15 -0
  73. package/app/components/01.atoms/grids/masonry-grid/MasonryGrid.vue +51 -31
  74. package/app/components/01.atoms/grids/masonry-grid/stories/MasonryGrid.stories.ts +48 -0
  75. package/app/components/01.atoms/grids/masonry-grid/tests/MasonryGrid.spec.ts +84 -29
  76. package/app/components/01.atoms/page-row/CONSUMER-STYLING.md +6 -1
  77. package/app/components/01.atoms/page-row/PageRow.vue +16 -15
  78. package/app/components/01.atoms/page-row/stories/PageRow.stories.ts +23 -0
  79. package/app/components/01.atoms/page-row/tests/PageRow.spec.ts +6 -5
  80. package/app/components/02.molecules/action-menu/ActionMenu.vue +6 -2
  81. package/app/components/02.molecules/action-menu/ActionMenuItem.vue +6 -3
  82. package/app/components/02.molecules/action-menu/CONSUMER-STYLING.md +11 -4
  83. package/app/components/02.molecules/action-menu/stories/ActionMenu.stories.ts +130 -18
  84. package/app/components/02.molecules/expandable/accordion-chat/AccordionChat.vue +227 -0
  85. package/app/components/02.molecules/expandable/accordion-chat/CONSUMER-STYLING.md +150 -0
  86. package/app/components/02.molecules/expandable/accordion-chat/stories/AccordionChat.stories.ts +347 -0
  87. package/app/components/02.molecules/expandable/accordion-chat/tests/AccordionChat.spec.ts +205 -0
  88. package/app/components/02.molecules/expandable/accordion-chat/tests/__snapshots__/AccordionChat.spec.ts.snap +40 -0
  89. package/app/components/02.molecules/expandable/{accordian/AccordianCore.vue → accordion-group/AccordionGroup.vue} +32 -20
  90. package/app/components/02.molecules/expandable/accordion-group/CONSUMER-STYLING.md +66 -0
  91. package/app/components/02.molecules/expandable/accordion-group/stories/AccordionGroup.stories.ts +238 -0
  92. package/app/components/02.molecules/expandable/accordion-group/tests/AccordionGroup.spec.ts +172 -0
  93. package/app/components/02.molecules/expandable/accordion-group/tests/__snapshots__/AccordionGroup.spec.ts.snap +45 -0
  94. package/app/components/02.molecules/expandable/expanding-panel/CONSUMER-STYLING.md +1 -0
  95. package/app/components/02.molecules/expandable/expanding-panel/ExpandingPanel.vue +11 -6
  96. package/app/components/02.molecules/expandable/expanding-panel/stories/ExpandingPanel.stories.ts +82 -1
  97. package/app/components/02.molecules/expandable/expanding-panel/tests/ExpandingPanel.spec.ts +24 -30
  98. package/app/components/02.molecules/expandable/expanding-panel/tests/__snapshots__/ExpandingPanel.spec.ts.snap +8 -8
  99. package/app/components/02.molecules/expandable/expanding-panel-classic/CONSUMER-STYLING.md +1 -0
  100. package/app/components/02.molecules/expandable/expanding-panel-classic/ExpandingPanelClassic.vue +10 -5
  101. package/app/components/02.molecules/expandable/expanding-panel-classic/stories/ExpandingPanelClassic.stories.ts +83 -1
  102. package/app/components/02.molecules/expandable/expanding-panel-classic/tests/ExpandingPanelClassic.spec.ts +24 -30
  103. package/app/components/02.molecules/expandable/expanding-panel-classic/tests/__snapshots__/ExpandingPanelClassic.spec.ts.snap +8 -8
  104. package/app/components/02.molecules/navigation/deep-expanding-menu/CONSUMER-STYLING.md +63 -44
  105. package/app/components/02.molecules/navigation/deep-expanding-menu/DeepExpandingMenu.vue +74 -37
  106. package/app/components/02.molecules/navigation/deep-expanding-menu/stories/DeepExpandingMenu.stories.ts +139 -19
  107. package/app/components/02.molecules/navigation/deep-expanding-menu/tests/DeepExpandingMenu.spec.ts +90 -27
  108. package/app/components/02.molecules/navigation/deep-expanding-menu/tests/__snapshots__/DeepExpandingMenu.spec.ts.snap +8 -8
  109. package/app/components/02.molecules/navigation/deep-expanding-menu-classic/CONSUMER-STYLING.md +58 -26
  110. package/app/components/02.molecules/navigation/deep-expanding-menu-classic/DeepExpandingMenuClassic.vue +113 -57
  111. package/app/components/02.molecules/navigation/deep-expanding-menu-classic/stories/DeepExpandingMenuClassic.stories.ts +139 -19
  112. package/app/components/02.molecules/navigation/deep-expanding-menu-classic/tests/DeepExpandingMenuClassic.spec.ts +140 -22
  113. package/app/components/02.molecules/navigation/deep-expanding-menu-classic/tests/__snapshots__/DeepExpandingMenuClassic.spec.ts.snap +9 -9
  114. package/app/components/02.molecules/qr-code/CONSUMER-STYLING.md +22 -7
  115. package/app/components/02.molecules/qr-code/CaptureQrCode.vue +63 -71
  116. package/app/components/02.molecules/qr-code/DecodeQrCode.vue +47 -10
  117. package/app/components/02.molecules/qr-code/stories/CaptureQrCode.stories.ts +114 -26
  118. package/app/components/02.molecules/qr-code/stories/DecodeQrCode.stories.ts +115 -24
  119. package/app/components/02.molecules/qr-code/tests/CaptureQrCode.spec.ts +124 -51
  120. package/app/components/02.molecules/qr-code/tests/DecodeQrCode.spec.ts +74 -25
  121. package/app/components/02.molecules/samaritan-prompt/CONSUMER-STYLING.md +22 -10
  122. package/app/components/02.molecules/samaritan-prompt/SamaritanPrompt.vue +30 -12
  123. package/app/components/02.molecules/samaritan-prompt/SamaritanPromptMixed.vue +34 -10
  124. package/app/components/02.molecules/samaritan-prompt/stories/SamaritanPrompt.stories.ts +55 -4
  125. package/app/components/02.molecules/samaritan-prompt/stories/SamaritanPromptMixed.stories.ts +67 -7
  126. package/app/components/02.molecules/samaritan-prompt/tests/SamaritanPrompt.spec.ts +113 -29
  127. package/app/components/02.molecules/samaritan-prompt/tests/SamaritanPromptMixed.spec.ts +92 -45
  128. package/app/components/03.organisms/image-galleries/carousel-flip/CONSUMER-STYLING.md +82 -29
  129. package/app/components/03.organisms/image-galleries/carousel-flip/CarouselFlip.vue +176 -113
  130. package/app/components/03.organisms/image-galleries/carousel-flip/stories/CarouselFlip.stories.ts +153 -23
  131. package/app/components/03.organisms/image-galleries/carousel-flip/tests/CarouselFlip.spec.ts +119 -63
  132. package/app/components/03.organisms/responsive-header/tests/__snapshots__/NavigationItems.spec.ts.snap +2 -2
  133. package/app/components/03.organisms/responsive-header/tests/__snapshots__/ResponsiveHeader.spec.ts.snap +2 -2
  134. package/app/components/03.organisms/services/service-detail/tests/ServiceDetail.spec.ts +8 -8
  135. package/app/components/03.organisms/services/service-detail/tests/__snapshots__/ServiceDetail.spec.ts.snap +4 -4
  136. package/app/components/03.organisms/site-header/CONSUMER-STYLING.md +41 -23
  137. package/app/components/03.organisms/site-header/SiteHeader.vue +16 -21
  138. package/app/components/03.organisms/site-header/stories/SiteHeader.stories.ts +138 -0
  139. package/app/components/03.organisms/site-header/tests/SiteHeader.spec.ts +53 -26
  140. package/app/components/03.organisms/site-header/tests/__snapshots__/SiteHeader.spec.ts.snap +2 -2
  141. package/app/types/components/qr-code.d.ts +12 -0
  142. package/app/utils/graphemes.ts +8 -0
  143. package/package.json +1 -1
  144. package/.claude/skills/components/accordian-core.md +0 -180
  145. package/.vscode/srcdev-component-accordian-core.code-snippets +0 -74
  146. package/app/components/01.atoms/animations/entry/.nuxt/app.config.mjs +0 -21
  147. package/app/components/01.atoms/animations/entry/.nuxt/components.d.ts +0 -66
  148. package/app/components/01.atoms/animations/entry/.nuxt/imports.d.ts +0 -30
  149. package/app/components/01.atoms/animations/entry/.nuxt/manifest/meta/test.json +0 -1
  150. package/app/components/01.atoms/animations/entry/.nuxt/types/app.config.d.ts +0 -35
  151. package/app/components/01.atoms/animations/entry/.nuxt/types/build.d.ts +0 -23
  152. package/app/components/01.atoms/animations/entry/.nuxt/types/builder-env.d.ts +0 -1
  153. package/app/components/01.atoms/animations/entry/.nuxt/types/components.d.ts +0 -71
  154. package/app/components/01.atoms/animations/entry/.nuxt/types/imports.d.ts +0 -386
  155. package/app/components/01.atoms/animations/entry/.nuxt/types/middleware.d.ts +0 -11
  156. package/app/components/01.atoms/animations/entry/.nuxt/types/modules.d.ts +0 -79
  157. package/app/components/01.atoms/animations/entry/.nuxt/types/nitro-layouts.d.ts +0 -17
  158. package/app/components/01.atoms/animations/entry/.nuxt/types/nitro-nuxt.d.ts +0 -64
  159. package/app/components/01.atoms/animations/entry/.nuxt/types/plugins.d.ts +0 -29
  160. package/app/components/01.atoms/animations/entry/.nuxt/types/runtime-config.d.ts +0 -32
  161. package/app/components/01.atoms/animations/entry/.nuxt/types/shared-imports.d.ts +0 -10
  162. package/app/components/01.atoms/animations/entry/.nuxt/types/vue-shim.d.ts +0 -0
  163. package/app/components/01.atoms/animations/entry/.nuxtrc +0 -1
  164. package/app/components/01.atoms/animations/entry/node_modules/.cache/nuxt/chrome-workspace.json +0 -1
  165. package/app/components/01.atoms/animations/entry/node_modules/.cache/vite/client/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
  166. package/app/components/02.molecules/expandable/accordian/CONSUMER-STYLING.md +0 -100
  167. package/app/components/02.molecules/expandable/accordian/stories/AccordianCore.stories.ts +0 -272
  168. package/app/components/02.molecules/expandable/accordian/tests/AccordianCore.spec.ts +0 -257
  169. package/app/components/02.molecules/expandable/accordian/tests/__snapshots__/AccordianCore.spec.ts.snap +0 -95
  170. package/app/components/03.organisms/responsive-header/tests/.nuxt/app.config.mjs +0 -21
  171. package/app/components/03.organisms/responsive-header/tests/.nuxt/components.d.ts +0 -66
  172. package/app/components/03.organisms/responsive-header/tests/.nuxt/imports.d.ts +0 -30
  173. package/app/components/03.organisms/responsive-header/tests/.nuxt/manifest/meta/test.json +0 -1
  174. package/app/components/03.organisms/responsive-header/tests/.nuxt/types/app.config.d.ts +0 -35
  175. package/app/components/03.organisms/responsive-header/tests/.nuxt/types/build.d.ts +0 -23
  176. package/app/components/03.organisms/responsive-header/tests/.nuxt/types/builder-env.d.ts +0 -1
  177. package/app/components/03.organisms/responsive-header/tests/.nuxt/types/components.d.ts +0 -71
  178. package/app/components/03.organisms/responsive-header/tests/.nuxt/types/imports.d.ts +0 -386
  179. package/app/components/03.organisms/responsive-header/tests/.nuxt/types/middleware.d.ts +0 -11
  180. package/app/components/03.organisms/responsive-header/tests/.nuxt/types/modules.d.ts +0 -79
  181. package/app/components/03.organisms/responsive-header/tests/.nuxt/types/nitro-layouts.d.ts +0 -17
  182. package/app/components/03.organisms/responsive-header/tests/.nuxt/types/nitro-nuxt.d.ts +0 -64
  183. package/app/components/03.organisms/responsive-header/tests/.nuxt/types/plugins.d.ts +0 -29
  184. package/app/components/03.organisms/responsive-header/tests/.nuxt/types/runtime-config.d.ts +0 -32
  185. package/app/components/03.organisms/responsive-header/tests/.nuxt/types/shared-imports.d.ts +0 -10
  186. package/app/components/03.organisms/responsive-header/tests/.nuxt/types/vue-shim.d.ts +0 -0
  187. package/app/components/03.organisms/responsive-header/tests/node_modules/.cache/nuxt/chrome-workspace.json +0 -1
@@ -1,64 +0,0 @@
1
-
2
- /// <reference path="nitro-layouts.d.ts" />
3
- /// <reference path="app.config.d.ts" />
4
- /// <reference path="runtime-config.d.ts" />
5
- /// <reference path="../../../../../../../node_modules/@nuxt/nitro-server/dist/index.d.mts" />
6
- /// <reference path="middleware.d.ts" />
7
-
8
- import type { RuntimeConfig } from 'nuxt/schema'
9
- import type { H3Event } from 'h3'
10
- import type { LogObject } from 'consola'
11
- import type { NuxtIslandContext, NuxtIslandResponse, NuxtRenderHTMLContext } from 'nuxt/app'
12
-
13
- declare module 'nitropack' {
14
- interface NitroRuntimeConfigApp {
15
- buildAssetsDir: string
16
- cdnURL: string
17
- }
18
- interface NitroRuntimeConfig extends RuntimeConfig {}
19
- interface NitroRouteConfig {
20
- ssr?: boolean
21
- noScripts?: boolean
22
- /** @deprecated Use `noScripts` instead */
23
- experimentalNoScripts?: boolean
24
- }
25
- interface NitroRouteRules {
26
- ssr?: boolean
27
- noScripts?: boolean
28
- /** @deprecated Use `noScripts` instead */
29
- experimentalNoScripts?: boolean
30
- appMiddleware?: Record<string, boolean>
31
- appLayout?: string | false
32
- }
33
- interface NitroRuntimeHooks {
34
- 'dev:ssr-logs': (ctx: { logs: LogObject[], path: string }) => void | Promise<void>
35
- 'render:html': (htmlContext: NuxtRenderHTMLContext, context: { event: H3Event }) => void | Promise<void>
36
- 'render:island': (islandResponse: NuxtIslandResponse, context: { event: H3Event, islandContext: NuxtIslandContext }) => void | Promise<void>
37
- }
38
- }
39
- declare module 'nitropack/types' {
40
- interface NitroRuntimeConfigApp {
41
- buildAssetsDir: string
42
- cdnURL: string
43
- }
44
- interface NitroRuntimeConfig extends RuntimeConfig {}
45
- interface NitroRouteConfig {
46
- ssr?: boolean
47
- noScripts?: boolean
48
- /** @deprecated Use `noScripts` instead */
49
- experimentalNoScripts?: boolean
50
- }
51
- interface NitroRouteRules {
52
- ssr?: boolean
53
- noScripts?: boolean
54
- /** @deprecated Use `noScripts` instead */
55
- experimentalNoScripts?: boolean
56
- appMiddleware?: Record<string, boolean>
57
- appLayout?: string | false
58
- }
59
- interface NitroRuntimeHooks {
60
- 'dev:ssr-logs': (ctx: { logs: LogObject[], path: string }) => void | Promise<void>
61
- 'render:html': (htmlContext: NuxtRenderHTMLContext, context: { event: H3Event }) => void | Promise<void>
62
- 'render:island': (islandResponse: NuxtIslandResponse, context: { event: H3Event, islandContext: NuxtIslandContext }) => void | Promise<void>
63
- }
64
- }
@@ -1,29 +0,0 @@
1
- // Generated by Nuxt'
2
- import type { Plugin } from '#app'
3
-
4
- type Decorate<T extends Record<string, any>> = { [K in keyof T as K extends string ? `$${K}` : never]: T[K] }
5
-
6
- type InjectionType<A extends Plugin> = A extends {default: Plugin<infer T>} ? Decorate<T> : unknown
7
-
8
- type NuxtAppInjections =
9
- InjectionType<typeof import("../../../../../../../node_modules/nuxt/dist/app/plugins/revive-payload.client.js")> &
10
- InjectionType<typeof import("../../../../../../../node_modules/nuxt/dist/head/runtime/plugins/unhead.js")> &
11
- InjectionType<typeof import("../../../../../../../node_modules/nuxt/dist/app/plugins/router.js")> &
12
- InjectionType<typeof import("../../../../../../../node_modules/nuxt/dist/app/plugins/navigation-repaint.client.js")> &
13
- InjectionType<typeof import("../../../../../../../node_modules/nuxt/dist/app/plugins/check-outdated-build.client.js")> &
14
- InjectionType<typeof import("../../../../../../../node_modules/nuxt/dist/app/plugins/revive-payload.server.js")> &
15
- InjectionType<typeof import("../../../../../../../node_modules/nuxt/dist/app/plugins/chunk-reload.client.js")>
16
-
17
- declare module '#app' {
18
- interface NuxtApp extends NuxtAppInjections { }
19
-
20
- interface NuxtAppLiterals {
21
- pluginName: 'nuxt:revive-payload:client' | 'nuxt:head' | 'nuxt:router' | 'nuxt:revive-payload:server' | 'nuxt:chunk-reload' | 'nuxt:global-components'
22
- }
23
- }
24
-
25
- declare module 'vue' {
26
- interface ComponentCustomProperties extends NuxtAppInjections { }
27
- }
28
-
29
- export { }
@@ -1,32 +0,0 @@
1
- import { RuntimeConfig as UserRuntimeConfig, PublicRuntimeConfig as UserPublicRuntimeConfig } from 'nuxt/schema'
2
- interface SharedRuntimeConfig {
3
- app: {
4
- buildId: string,
5
-
6
- baseURL: string,
7
-
8
- buildAssetsDir: string,
9
-
10
- cdnURL: string,
11
- },
12
-
13
- nitro: {
14
- envPrefix: string,
15
- },
16
- }
17
- interface SharedPublicRuntimeConfig {
18
-
19
- }
20
- declare module '@nuxt/schema' {
21
- interface RuntimeConfig extends UserRuntimeConfig {}
22
- interface PublicRuntimeConfig extends UserPublicRuntimeConfig {}
23
- }
24
- declare module 'nuxt/schema' {
25
- interface RuntimeConfig extends SharedRuntimeConfig {}
26
- interface PublicRuntimeConfig extends SharedPublicRuntimeConfig {}
27
- }
28
- declare module 'vue' {
29
- interface ComponentCustomProperties {
30
- $config: UserRuntimeConfig
31
- }
32
- }
@@ -1,10 +0,0 @@
1
- // Generated by auto imports
2
- export {}
3
- declare global {
4
- const useRuntimeConfig: (event?: import('h3').H3Event) => import('nuxt/schema').RuntimeConfig
5
- const useAppConfig: () => import('nuxt/schema').AppConfig
6
- const defineAppConfig: <C extends import('nuxt/schema').AppConfigInput>(config: C) => C
7
- const createError: typeof import('h3')['createError']
8
- const setResponseStatus: typeof import('h3')['setResponseStatus']
9
-
10
- }
@@ -1 +0,0 @@
1
- setups.@nuxt/test-utils="4.1.0"
@@ -1 +0,0 @@
1
- {"uuid":"4bddd330-9d58-42dc-984e-629f2c5338a9"}
@@ -1 +0,0 @@
1
- {"version":"4.1.11","results":[[":tests/EntryAnimation.spec.ts",{"duration":0,"failed":true}]]}
@@ -1,100 +0,0 @@
1
- # AccordianCore — Consumer Styling Guide
2
-
3
- ## No tokens of its own
4
-
5
- `AccordianCore` doesn't define any `--accordian-*` custom properties. It's a thin wrapper that
6
- renders `itemCount` copies of a panel component (`ExpandingPanel` by default, or
7
- `ExpandingPanelClassic` when `variant="classic"`) and forwards `name`/`animationDuration` to each
8
- one — all real styling surface lives on whichever panel component is active. See that
9
- component's own `CONSUMER-STYLING.md`:
10
-
11
- - [../expanding-panel/CONSUMER-STYLING.md](../expanding-panel/CONSUMER-STYLING.md) (default, `variant="modern"`)
12
- - [../expanding-panel-classic/CONSUMER-STYLING.md](../expanding-panel-classic/CONSUMER-STYLING.md) (`variant="classic"`)
13
-
14
- `--expanding-panel-*` tokens set at any scope (global, page) apply to `AccordianCore`'s panels
15
- too, since they're the same underlying component — no `AccordianCore`-specific override is
16
- needed for summary gap, icon size, etc.
17
-
18
- ---
19
-
20
- ## The `.accordian-item` hook
21
-
22
- Every panel gets `style-class-passthrough="['accordian-item']"` automatically — this is the one
23
- `AccordianCore`-specific override surface, used to target *all* panels in the group without
24
- reaching into `ExpandingPanel`/`ExpandingPanelClassic` internals.
25
-
26
- ```css
27
- /* In the consuming page's unscoped <style> block */
28
- .display-accordian {
29
- .accordian-item.expanding-panel {
30
- /* modern variant (default) */
31
- border-block-end: 1px solid var(--theme-border, #e0e0e0);
32
- }
33
-
34
- /* If this instance uses variant="classic", target the classic root class instead: */
35
- .accordian-item.expanding-panel-classic {
36
- border-block-end: 1px solid var(--theme-border, #e0e0e0);
37
- }
38
- }
39
- ```
40
-
41
- Note the root class differs by variant (`.expanding-panel` vs `.expanding-panel-classic`) — a
42
- selector written for one won't match the other. If you switch `variant` on an existing instance,
43
- check any `.accordian-item.expanding-panel*` overrides still target the right class.
44
-
45
- ---
46
-
47
- ## Local overrides
48
-
49
- There are no public tokens, so override the classes above with direct properties, scoped to an
50
- element you own (a page or section class, or a class added with `:style-class-passthrough`). Keep
51
- the block **unlayered** (no `@layer` wrapper) so it beats the library's `@layer components`. If your
52
- own file uses `<style scoped>`, selectors that reach inside the component need `:deep()`. Patterns
53
- and examples: `.claude/skills/component-local-style-override.md`.
54
-
55
- ### Page or section
56
-
57
- No `:deep()` is required (component styles are unscoped).
58
-
59
- ```css
60
- .faq-section {
61
- .display-accordian {
62
- max-width: 480px;
63
-
64
- .accordian-item.expanding-panel {
65
- --expanding-panel-summary-padding-block: 1.6rem;
66
- }
67
- }
68
- }
69
- ```
70
-
71
- ### One instance
72
-
73
- Use sparingly — prefer global or page-scoped CSS. `styleClassPassthrough` on `AccordianCore`
74
- targets the root `.display-accordian` element, not the individual panels (those already get
75
- `.accordian-item` automatically):
76
-
77
- ```vue
78
- <AccordianCore name="faq" :item-count="3" :style-class-passthrough="['compact-faq']">
79
- ...
80
- </AccordianCore>
81
- ```
82
-
83
- ```css
84
- .display-accordian.compact-faq {
85
- max-width: 400px;
86
- }
87
- ```
88
-
89
- ---
90
-
91
- ## Notes
92
-
93
- - `variant` is group-wide: every panel in one `AccordianCore` renders the same component, so
94
- there's no per-panel styling divergence caused by variant — just remember which root class
95
- (`.expanding-panel` vs `.expanding-panel-classic`) your `.accordian-item` selectors need.
96
- - `contentIsOnTop` isn't exposed on `AccordianCore` — it isn't meaningful for a grouped accordion
97
- (see `ExpandingPanel`'s own docs for why: it's for a single panel overlaying trailing page
98
- content, not stacked/grouped panels). Use `ExpandingPanel`/`ExpandingPanelClassic` directly if
99
- you need an overlay panel.
100
-
@@ -1,272 +0,0 @@
1
- import AccordianCore from "../AccordianCore.vue";
2
- import type { Meta, StoryObj } from "@nuxtjs/storybook";
3
-
4
- const meta: Meta<typeof AccordianCore> = {
5
- title: "Molecules/Expandable/Accordian Core",
6
- component: AccordianCore,
7
- argTypes: {
8
- name: {
9
- control: { type: "text" },
10
- description:
11
- "Shared name attribute passed to each ExpandingPanel — used to group panels so only one can be open at a time (native <details> behaviour)",
12
- },
13
- itemCount: {
14
- control: { type: "number", min: 0, step: 1 },
15
- description: "Number of accordion panels to render",
16
- },
17
- animationDuration: {
18
- control: { type: "number", min: 0, step: 50 },
19
- description: "Expand/collapse animation duration in milliseconds",
20
- },
21
- variant: {
22
- control: { type: "radio" },
23
- options: ["modern", "classic"],
24
- description:
25
- "Which panel implementation to render: 'modern' (ExpandingPanel, ::details-content based) or " +
26
- "'classic' (ExpandingPanelClassic, grid-template-rows based) — use classic when the open/close " +
27
- "animation must run identically in every browser today",
28
- },
29
- styleClassPassthrough: {
30
- control: "object",
31
- description: "Additional CSS classes applied to the root element",
32
- },
33
- },
34
- args: {
35
- name: undefined,
36
- itemCount: 3,
37
- animationDuration: 300,
38
- variant: "modern",
39
- styleClassPassthrough: [],
40
- },
41
- };
42
-
43
- export default meta;
44
- type Story = StoryObj<typeof AccordianCore>;
45
-
46
- // ─── Helpers ──────────────────────────────────────────────────────────────────
47
-
48
- /** Builds a slot object for N items with generic placeholder content. */
49
- function buildGenericSlots(count: number): Record<string, string> {
50
- const slots: Record<string, string> = {};
51
- for (let i = 0; i < count; i++) {
52
- slots[`accordian-${i}-summary`] = `<span>Panel ${i + 1} — Summary</span>`;
53
- slots[`accordian-${i}-icon`] = `<span>▸</span>`;
54
- slots[`accordian-${i}-content`] =
55
- `<p style="margin:0;padding:0.5rem 0">This is the content for panel ${i + 1}. ` +
56
- `Add whatever you need here — text, images, components.</p>`;
57
- }
58
- return slots;
59
- }
60
-
61
- // ─── Stories ─────────────────────────────────────────────────────────────────
62
-
63
- export const Default: Story = {
64
- args: {
65
- itemCount: 3,
66
- animationDuration: 300,
67
- },
68
- render: (args) => ({
69
- components: { AccordianCore },
70
- setup() {
71
- return { args, slots: buildGenericSlots(args.itemCount ?? 3) };
72
- },
73
- template: `
74
- <AccordianCore v-bind="args">
75
- <template v-for="(content, name) in slots" #[name] :key="name">
76
- <span v-html="content" />
77
- </template>
78
- </AccordianCore>
79
- `,
80
- }),
81
- };
82
-
83
- export const ClassicVariant: Story = {
84
- name: "Classic Variant",
85
- args: {
86
- itemCount: 3,
87
- animationDuration: 300,
88
- variant: "classic",
89
- },
90
- render: (args) => ({
91
- components: { AccordianCore },
92
- setup() {
93
- return { args, slots: buildGenericSlots(args.itemCount ?? 3) };
94
- },
95
- template: `
96
- <AccordianCore v-bind="args">
97
- <template v-for="(content, name) in slots" #[name] :key="name">
98
- <span v-html="content" />
99
- </template>
100
- </AccordianCore>
101
- `,
102
- }),
103
- };
104
-
105
- export const SinglePanel: Story = {
106
- args: {
107
- itemCount: 1,
108
- animationDuration: 300,
109
- },
110
- render: (args) => ({
111
- components: { AccordianCore },
112
- setup() {
113
- return { args };
114
- },
115
- template: `
116
- <AccordianCore v-bind="args">
117
- <template #accordian-0-summary>
118
- <span>The only panel</span>
119
- </template>
120
- <template #accordian-0-content>
121
- <p style="margin:0;padding:0.5rem 0">Content for the single panel.</p>
122
- </template>
123
- </AccordianCore>
124
- `,
125
- }),
126
- };
127
-
128
- /** Panels share a name so the browser enforces only one open at a time. */
129
- export const ExclusiveOpen: Story = {
130
- name: "Exclusive Open (name grouped)",
131
- args: {
132
- itemCount: 4,
133
- name: "exclusive-group",
134
- animationDuration: 300,
135
- },
136
- render: (args) => ({
137
- components: { AccordianCore },
138
- setup() {
139
- return { args, slots: buildGenericSlots(args.itemCount ?? 4) };
140
- },
141
- template: `
142
- <AccordianCore v-bind="args">
143
- <template v-for="(content, name) in slots" #[name] :key="name">
144
- <span v-html="content" />
145
- </template>
146
- </AccordianCore>
147
- `,
148
- }),
149
- };
150
-
151
- export const SlowAnimation: Story = {
152
- name: "Slow Animation (800ms)",
153
- args: {
154
- itemCount: 3,
155
- animationDuration: 800,
156
- },
157
- render: (args) => ({
158
- components: { AccordianCore },
159
- setup() {
160
- return { args, slots: buildGenericSlots(args.itemCount ?? 3) };
161
- },
162
- template: `
163
- <AccordianCore v-bind="args">
164
- <template v-for="(content, name) in slots" #[name] :key="name">
165
- <span v-html="content" />
166
- </template>
167
- </AccordianCore>
168
- `,
169
- }),
170
- };
171
-
172
- export const NoAnimation: Story = {
173
- name: "No Animation (0ms)",
174
- args: {
175
- itemCount: 3,
176
- animationDuration: 0,
177
- },
178
- render: (args) => ({
179
- components: { AccordianCore },
180
- setup() {
181
- return { args, slots: buildGenericSlots(args.itemCount ?? 3) };
182
- },
183
- template: `
184
- <AccordianCore v-bind="args">
185
- <template v-for="(content, name) in slots" #[name] :key="name">
186
- <span v-html="content" />
187
- </template>
188
- </AccordianCore>
189
- `,
190
- }),
191
- };
192
-
193
- export const WithStyleClassPassthrough: Story = {
194
- name: "With styleClassPassthrough",
195
- args: {
196
- itemCount: 2,
197
- styleClassPassthrough: ["custom-class", "another-class"],
198
- },
199
- render: (args) => ({
200
- components: { AccordianCore },
201
- setup() {
202
- return { args, slots: buildGenericSlots(args.itemCount ?? 2) };
203
- },
204
- template: `
205
- <AccordianCore v-bind="args">
206
- <template v-for="(content, name) in slots" #[name] :key="name">
207
- <span v-html="content" />
208
- </template>
209
- </AccordianCore>
210
- `,
211
- }),
212
- };
213
-
214
- export const RichContent: Story = {
215
- name: "Rich Slot Content",
216
- args: {
217
- itemCount: 3,
218
- animationDuration: 300,
219
- },
220
- render: (args) => ({
221
- components: { AccordianCore },
222
- setup() {
223
- return { args };
224
- },
225
- template: `
226
- <AccordianCore v-bind="args">
227
- <template #accordian-0-summary>
228
- <strong>Delivery &amp; Returns</strong>
229
- </template>
230
- <template #accordian-0-content>
231
- <p style="margin:0;padding:0.5rem 0">
232
- Free standard delivery on orders over £50. Returns accepted within 30 days.
233
- </p>
234
- </template>
235
-
236
- <template #accordian-1-summary>
237
- <strong>Materials &amp; Care</strong>
238
- </template>
239
- <template #accordian-1-content>
240
- <ul style="margin:0;padding:0.5rem 0 0.5rem 1.2rem">
241
- <li>100% organic cotton</li>
242
- <li>Machine wash at 30°C</li>
243
- <li>Do not tumble dry</li>
244
- </ul>
245
- </template>
246
-
247
- <template #accordian-2-summary>
248
- <strong>Sizing Guide</strong>
249
- </template>
250
- <template #accordian-2-content>
251
- <p style="margin:0;padding:0.5rem 0">
252
- Our pieces run true to size. If you're between sizes, we recommend sizing up.
253
- </p>
254
- </template>
255
- </AccordianCore>
256
- `,
257
- }),
258
- };
259
-
260
- export const Empty: Story = {
261
- name: "Zero Items",
262
- args: {
263
- itemCount: 0,
264
- },
265
- render: (args) => ({
266
- components: { AccordianCore },
267
- setup() {
268
- return { args };
269
- },
270
- template: `<AccordianCore v-bind="args" />`,
271
- }),
272
- };