kmcom-nuxt-layers 6.2.1 → 6.3.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 (64) hide show
  1. package/docs/MIGRATION-v6.3.0.md +234 -0
  2. package/docs/MIGRATION.md +2 -0
  3. package/docs/component-levels.md +116 -0
  4. package/layers/content/app/components/Blog/ItemPage.vue +2 -7
  5. package/layers/content/app/components/Blog/List.vue +9 -2
  6. package/layers/content/app/components/Blog/Page.vue +9 -19
  7. package/layers/content/app/components/Gallery/Detail.vue +1 -0
  8. package/layers/content/app/components/Gallery/Grid.vue +9 -2
  9. package/layers/content/app/components/Gallery/ImageDetail.vue +0 -6
  10. package/layers/content/app/components/Gallery/ImagePage.vue +10 -6
  11. package/layers/content/app/components/Gallery/Page.vue +9 -19
  12. package/layers/content/app/components/Gallery/SlugPage.vue +2 -7
  13. package/layers/content/app/components/NuxtContent/Detail.vue +20 -11
  14. package/layers/content/app/components/NuxtContent/IndexTemplate.vue +21 -0
  15. package/layers/content/app/components/NuxtContent/List.vue +6 -1
  16. package/layers/content/app/components/Portfolio/ColorPalette.vue +2 -2
  17. package/layers/content/app/components/Portfolio/ItemPage.vue +2 -6
  18. package/layers/content/app/components/Portfolio/List.vue +19 -8
  19. package/layers/content/app/components/Portfolio/Page.vue +9 -19
  20. package/layers/content/app/composables/useContentItemSeo.ts +19 -0
  21. package/layers/content/app/composables/useContentSection.ts +9 -0
  22. package/layers/content/app/utils/galleryImageMeta.test.ts +30 -0
  23. package/layers/content/app/utils/galleryImageMeta.ts +11 -0
  24. package/layers/content/nuxt.config.ts +1 -1
  25. package/layers/core/app/assets/css/core.css +5 -11
  26. package/layers/core/app/assets/css/tokens/z-index.css +16 -0
  27. package/layers/core/app/components/DiagnosticsPage.vue +41 -41
  28. package/layers/core/app/components/LoadingScreen.vue +2 -0
  29. package/layers/delivery/feeds/app/components/Feeds/Index.vue +36 -75
  30. package/layers/delivery/feeds/app/components/Feeds/RouteCard.vue +6 -8
  31. package/layers/design-system/theming/nuxt.config.ts +1 -3
  32. package/layers/design-system/visual/app/components/Base/Modal.vue +34 -86
  33. package/layers/design-system/visual/app/components/HoverDimGroup.vue +46 -0
  34. package/layers/design-system/visual/app/components/Progress/Bar.vue +9 -29
  35. package/layers/motion/animations/app/components/Motion/Cursor.vue +1 -1
  36. package/layers/motion/animations/app/components/Motion/Marquee.vue +5 -0
  37. package/layers/motion/animations/app/components/Motion/MarqueeText.vue +2 -1
  38. package/layers/motion/animations/app/components/Motion/Staggered.test.ts +40 -0
  39. package/layers/motion/animations/app/components/Motion/Staggered.vue +37 -42
  40. package/layers/motion/animations/app/components/Motion/TextReveal.vue +8 -1
  41. package/layers/motion/animations/app/components/Motion/VelocityEffect.vue +6 -0
  42. package/layers/motion/animations/app/composables/useCountUp.ts +6 -0
  43. package/layers/motion/animations/app/composables/useCursorFollower.ts +4 -1
  44. package/layers/motion/animations/app/utils/pointerMotion.ts +7 -2
  45. package/layers/motion/scroll/app/components/Motion/HorizontalScroll.vue +9 -0
  46. package/layers/motion/scroll/app/components/Motion/Parallax.vue +13 -12
  47. package/layers/motion/scroll/app/components/Motion/PinnedSection.vue +16 -9
  48. package/layers/motion/scroll/app/composables/useReducedMotion.test.ts +23 -0
  49. package/layers/motion/scroll/app/composables/useReducedMotion.ts +14 -0
  50. package/layers/motion/scroll/app/utils/parallax.test.ts +24 -0
  51. package/layers/motion/scroll/app/utils/parallax.ts +16 -0
  52. package/layers/motion/scroll/nuxt.config.ts +1 -1
  53. package/layers/structure/layout/app/components/Layout/Grid/Debug.vue +1 -1
  54. package/layers/structure/layout/app/components/Layout/Page/index.vue +9 -10
  55. package/layers/structure/navigation/app/components/Links/Group.vue +12 -38
  56. package/layers/structure/navigation/app/components/Links/Named.vue +9 -0
  57. package/layers/structure/navigation/app/components/Mast/Footer.vue +1 -1
  58. package/layers/structure/navigation/app/components/Mast/Nav.vue +3 -1
  59. package/layers/structure/navigation/app/components/Mast/NavModal.vue +34 -39
  60. package/layers/structure/navigation/app/components/Site/Subtitle.vue +10 -0
  61. package/layers/structure/navigation/app/components/Site/Title.vue +8 -0
  62. package/layers/structure/navigation/nuxt.config.ts +7 -1
  63. package/package.json +1 -1
  64. /package/layers/{design-system/theming/app/assets/css/tokens.css → core/app/assets/css/tokens/elevation-motion.css} +0 -0
@@ -14,7 +14,6 @@
14
14
  const activeSection = useState<string>('activeSection', () => '')
15
15
  const route = useRoute()
16
16
  const { close: closeNav } = useMastNav()
17
- const { useZIndex } = useGridConfig()
18
17
 
19
18
  function dismiss() {
20
19
  emit('update:open', false)
@@ -35,43 +34,39 @@
35
34
  </script>
36
35
 
37
36
  <template>
38
- <Transition name="nav-modal">
39
- <div
40
- v-if="open"
41
- class="bg-default text-default fixed inset-0 flex flex-col items-center justify-center"
42
- :style="{ zIndex: useZIndex('modal') }"
43
- >
44
- <button
45
- class="absolute top-[3vh] right-[5vw] cursor-pointer border-0 bg-transparent p-2"
46
- aria-label="Close navigation"
47
- @click="dismiss"
48
- >
49
- <UIcon name="lucide:x" class="size-7" />
50
- </button>
37
+ <!-- UModal supplies the dialog role, focus trap, Escape and portal; the title stays
38
+ visually hidden because the content slot replaces the header. -->
39
+ <UModal
40
+ :open
41
+ fullscreen
42
+ title="Site navigation"
43
+ :ui="{ overlay: 'z-(--z-modal)', content: 'bg-default text-default z-(--z-modal)' }"
44
+ @update:open="(value) => !value && dismiss()"
45
+ >
46
+ <template #content>
47
+ <div class="relative flex h-full flex-col items-center justify-center">
48
+ <UButton
49
+ icon="lucide:x"
50
+ color="neutral"
51
+ variant="ghost"
52
+ size="xl"
53
+ aria-label="Close navigation"
54
+ class="absolute top-4 right-4"
55
+ @click="dismiss"
56
+ />
51
57
 
52
- <LinksGroup tag="nav" class="flex flex-col items-center gap-2">
53
- <button
54
- v-for="link in links"
55
- :key="link.id"
56
- class="cursor-pointer border-0 bg-transparent px-4 py-3 text-3xl tracking-widest uppercase transition-all"
57
- :class="activeSection === link.id ? 'font-normal' : 'font-light'"
58
- @click="() => handleNav(link)"
59
- >
60
- {{ link.label }}
61
- </button>
62
- </LinksGroup>
63
- </div>
64
- </Transition>
58
+ <HoverDimGroup tag="nav" class="flex flex-col items-center gap-2">
59
+ <button
60
+ v-for="link in links"
61
+ :key="link.id"
62
+ class="cursor-pointer border-0 bg-transparent px-4 py-3 text-3xl tracking-widest uppercase transition-all"
63
+ :class="activeSection === link.id ? 'font-normal' : 'font-light'"
64
+ @click="() => handleNav(link)"
65
+ >
66
+ {{ link.label }}
67
+ </button>
68
+ </HoverDimGroup>
69
+ </div>
70
+ </template>
71
+ </UModal>
65
72
  </template>
66
-
67
- <style scoped>
68
- .nav-modal-enter-active,
69
- .nav-modal-leave-active {
70
- transition: opacity 300ms ease;
71
- }
72
-
73
- .nav-modal-enter-from,
74
- .nav-modal-leave-to {
75
- opacity: 0;
76
- }
77
- </style>
@@ -1,4 +1,14 @@
1
1
  <script setup lang="ts">
2
+ /**
3
+ * @deprecated Render `useSite().subtitleWords` directly. Unused in this repo and KMCOMv5;
4
+ * remove in the next major.
5
+ */
6
+ if (import.meta.dev)
7
+ // eslint-disable-next-line no-console -- one-time deprecation notice, dev only
8
+ console.warn(
9
+ '[navigation] <SiteSubtitle> is deprecated — render useSite().subtitleWords directly.'
10
+ )
11
+
2
12
  const site = useSite()
3
13
  </script>
4
14
 
@@ -1,4 +1,12 @@
1
1
  <script setup lang="ts">
2
+ /**
3
+ * @deprecated Render `useSite().titleWords` directly. Unused in this repo and KMCOMv5;
4
+ * remove in the next major.
5
+ */
6
+ if (import.meta.dev)
7
+ // eslint-disable-next-line no-console -- one-time deprecation notice, dev only
8
+ console.warn('[navigation] <SiteTitle> is deprecated — render useSite().titleWords directly.')
9
+
2
10
  const site = useSite()
3
11
  </script>
4
12
 
@@ -1,7 +1,13 @@
1
1
  export default defineNuxtConfig({
2
2
  $meta: { name: 'navigation' },
3
3
 
4
- extends: ['../../core', '../../motion/scroll', '../layout', '../../design-system/typography'],
4
+ extends: [
5
+ '../../core',
6
+ '../../motion/scroll',
7
+ '../layout',
8
+ '../../design-system/typography',
9
+ '../../design-system/visual',
10
+ ],
5
11
 
6
12
  alias: {
7
13
  '#layers/navigation': import.meta.dirname,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "kmcom-nuxt-layers",
3
3
  "private": false,
4
- "version": "6.2.1",
4
+ "version": "6.3.0",
5
5
  "description": "Composable Nuxt 4 layers for building scalable Vue applications",
6
6
  "exports": {
7
7
  "./layers/core": "./layers/core/nuxt.config.ts",