@alphacifer/slidev-addon-theme 0.0.9 → 0.0.11

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 (220) hide show
  1. package/README.md +133 -75
  2. package/components/card/chevron-card/ChevronCard.vue +44 -32
  3. package/components/card/chevron-card/ChevronCardBadge.vue +14 -8
  4. package/components/card/chevron-card/ChevronCardContent.vue +15 -13
  5. package/components/card/chevron-card/style.css +12 -0
  6. package/components/card/{horiz-card/HorizCard.vue → horizontal-card/HorizontalCard.vue} +78 -85
  7. package/components/card/{horiz-card/HorizCardBadge.vue → horizontal-card/HorizontalCardBadge.vue} +15 -10
  8. package/components/card/{horiz-card/HorizCardContent.vue → horizontal-card/HorizontalCardContent.vue} +11 -11
  9. package/components/card/{horiz-card/HorizCardIcon.vue → horizontal-card/HorizontalCardIcon.vue} +24 -38
  10. package/components/card/horizontal-card/style.css +17 -0
  11. package/components/card/{vert-card/VertCard.vue → vertical-card/VerticalCard.vue} +80 -103
  12. package/components/card/{vert-card/VertCardBadge.vue → vertical-card/VerticalCardBadge.vue} +15 -10
  13. package/components/card/{vert-card/VertCardContent.vue → vertical-card/VerticalCardContent.vue} +13 -12
  14. package/components/card/{vert-card/VertCardIcon.vue → vertical-card/VerticalCardIcon.vue} +15 -33
  15. package/components/card/vertical-card/style.css +19 -0
  16. package/components/comparisons/arc-comparison/ArcComparison.vue +376 -80
  17. package/components/comparisons/arc-comparison/ArcComparisonBadge.vue +9 -4
  18. package/components/comparisons/arc-comparison/ArcComparisonContent.vue +9 -4
  19. package/components/comparisons/arc-comparison/ArcComparisonHeading.vue +9 -4
  20. package/components/comparisons/arc-comparison/ArcComparisonLeft.vue +39 -63
  21. package/components/comparisons/arc-comparison/ArcComparisonOrbit.vue +9 -8
  22. package/components/comparisons/arc-comparison/ArcComparisonRight.vue +39 -63
  23. package/components/comparisons/arc-comparison/style.css +27 -0
  24. package/components/comparisons/table-comparison/TableComparison.vue +17 -97
  25. package/components/comparisons/table-comparison/TableComparisonCell.vue +22 -20
  26. package/components/comparisons/table-comparison/{TableComparisonCol.vue → TableComparisonColumn.vue} +16 -14
  27. package/components/comparisons/table-comparison/{TableComparisonCols.vue → TableComparisonColumns.vue} +5 -8
  28. package/components/comparisons/table-comparison/TableComparisonRow.vue +10 -14
  29. package/components/comparisons/table-comparison/TableComparisonRows.vue +1 -4
  30. package/components/comparisons/table-comparison/style.css +15 -0
  31. package/components/core/Date.vue +2 -5
  32. package/components/core/QnA.vue +1 -1
  33. package/components/core/Quote.vue +3 -6
  34. package/components/core/ReflectedTitle.vue +2 -6
  35. package/components/core/Speaker.vue +5 -10
  36. package/components/core/TransitionHeading.vue +2 -5
  37. package/components/core/arc-orbit/ArcOrbit.vue +65 -84
  38. package/components/core/arc-orbit/ArcOrbitBadge.vue +9 -11
  39. package/components/core/arc-orbit/ArcOrbitCallout.vue +30 -32
  40. package/components/core/arc-orbit/ArcOrbitContent.vue +6 -12
  41. package/components/core/arc-orbit/ArcOrbitHeading.vue +13 -11
  42. package/components/core/arc-orbit/style.css +20 -0
  43. package/components/core/style.css +9 -0
  44. package/components/core/thanks/{ThanksContent.vue → SquareThanks.vue} +36 -31
  45. package/components/core/thanks/SquareThanksContent.vue +89 -0
  46. package/components/core/thanks/ThanksOutlineSquare.vue +2 -5
  47. package/components/core/thanks/ThanksSquare.vue +2 -5
  48. package/components/core/thanks/style.css +30 -0
  49. package/components/defense-in-depth/arc-defense-in-depth/ArcDefenseInDepth.vue +802 -0
  50. package/components/defense-in-depth/arc-defense-in-depth/ArcDefenseInDepthLayer.vue +240 -0
  51. package/components/defense-in-depth/arc-defense-in-depth/ArcDefenseInDepthLayerHeading.vue +96 -0
  52. package/components/defense-in-depth/arc-defense-in-depth/ArcDefenseInDepthLayerPart.vue +501 -0
  53. package/components/defense-in-depth/arc-defense-in-depth/ArcDefenseInDepthLayerSector.vue +162 -0
  54. package/components/defense-in-depth/arc-defense-in-depth/style.css +38 -0
  55. package/components/facets/tetrad/{rect-orbit-tetrad/RectOrbitTetrad.vue → rectangle-orbit-tetrad/RectangleOrbitTetrad.vue} +66 -63
  56. package/components/facets/tetrad/{rect-orbit-tetrad/RectOrbitTetradCallout.vue → rectangle-orbit-tetrad/RectangleOrbitTetradCallout.vue} +62 -48
  57. package/components/facets/tetrad/rectangle-orbit-tetrad/RectangleOrbitTetradCenter.vue +54 -0
  58. package/components/facets/tetrad/rectangle-orbit-tetrad/RectangleOrbitTetradContent.vue +44 -0
  59. package/components/facets/tetrad/rectangle-orbit-tetrad/RectangleOrbitTetradHeading.vue +27 -0
  60. package/components/facets/tetrad/{rect-orbit-tetrad/RectOrbitTetradIcon.vue → rectangle-orbit-tetrad/RectangleOrbitTetradIcon.vue} +23 -13
  61. package/components/facets/tetrad/rectangle-orbit-tetrad/style.css +22 -0
  62. package/components/facets/triad/arrow-triad/ArrowTriad.vue +99 -109
  63. package/components/facets/triad/arrow-triad/ArrowTriadCallout.vue +31 -59
  64. package/components/facets/triad/arrow-triad/ArrowTriadContent.vue +18 -13
  65. package/components/facets/triad/arrow-triad/ArrowTriadHeading.vue +20 -13
  66. package/components/facets/triad/arrow-triad/ArrowTriadIcon.vue +14 -9
  67. package/components/facets/triad/arrow-triad/style.css +15 -0
  68. package/components/facets/triad/gear-triad/GearTriad.vue +73 -64
  69. package/components/facets/triad/gear-triad/GearTriadCallout.vue +58 -53
  70. package/components/facets/triad/gear-triad/GearTriadCenter.vue +9 -4
  71. package/components/facets/triad/gear-triad/GearTriadContent.vue +21 -36
  72. package/components/facets/triad/gear-triad/GearTriadDetail.vue +92 -0
  73. package/components/facets/triad/gear-triad/GearTriadDetails.vue +169 -0
  74. package/components/facets/triad/gear-triad/GearTriadDetailsContent.vue +18 -0
  75. package/components/facets/triad/gear-triad/GearTriadDetailsHeading.vue +60 -0
  76. package/components/facets/triad/gear-triad/GearTriadHeading.vue +19 -13
  77. package/components/facets/triad/gear-triad/GearTriadIcon.vue +22 -9
  78. package/components/facets/triad/gear-triad/style.css +26 -0
  79. package/components/facets/triad/{hex-triad/HexTriad.vue → hexagon-triad/HexagonTriad.vue} +81 -63
  80. package/components/facets/triad/{hex-triad/HexTriadBadge.vue → hexagon-triad/HexagonTriadBadge.vue} +38 -12
  81. package/components/facets/triad/{hex-triad/HexTriadCallout.vue → hexagon-triad/HexagonTriadCallout.vue} +35 -31
  82. package/components/facets/triad/hexagon-triad/HexagonTriadCenterBadge.vue +74 -0
  83. package/components/facets/triad/hexagon-triad/HexagonTriadContent.vue +34 -0
  84. package/components/facets/triad/hexagon-triad/HexagonTriadHeading.vue +44 -0
  85. package/components/facets/triad/{hex-triad/HexTriadLayer.vue → hexagon-triad/HexagonTriadLayer.vue} +12 -4
  86. package/components/facets/triad/hexagon-triad/style.css +22 -0
  87. package/components/process/arc-arrow-process/ArcArrowProcess.vue +13 -35
  88. package/components/process/arc-arrow-process/ArcArrowProcessArrow.vue +20 -21
  89. package/components/process/arc-arrow-process/ArcArrowProcessCallout.vue +30 -71
  90. package/components/process/arc-arrow-process/ArcArrowProcessContent.vue +18 -13
  91. package/components/process/arc-arrow-process/ArcArrowProcessHeading.vue +18 -18
  92. package/components/process/arc-arrow-process/ArcArrowProcessIcon.vue +23 -11
  93. package/components/process/arc-arrow-process/style.css +20 -0
  94. package/components/pyramid/circular-pyramid/CircularPyramid.vue +276 -190
  95. package/components/pyramid/circular-pyramid/CircularPyramidStack.vue +83 -98
  96. package/components/pyramid/circular-pyramid/CircularPyramidStackContent.vue +136 -29
  97. package/components/pyramid/circular-pyramid/CircularPyramidStackHeading.vue +212 -0
  98. package/components/pyramid/circular-pyramid/style.css +26 -0
  99. package/components/pyramid/square-pyramid/SquarePyramid.vue +199 -83
  100. package/components/pyramid/square-pyramid/SquarePyramidStack.vue +87 -95
  101. package/components/pyramid/square-pyramid/SquarePyramidStackContent.vue +138 -27
  102. package/components/pyramid/square-pyramid/SquarePyramidStackHeading.vue +212 -0
  103. package/components/pyramid/square-pyramid/style.css +48 -0
  104. package/components/style.css +35 -0
  105. package/layouts/core/arc-toc.vue +40 -45
  106. package/layouts/core/bg-center.vue +7 -6
  107. package/layouts/core/style.css +17 -0
  108. package/layouts/shifting-heading/shifting-intro.vue +4 -13
  109. package/layouts/thanks/thanks.vue +5 -5
  110. package/package.json +8 -6
  111. package/style.css +17 -0
  112. package/uno.config.ts +1 -0
  113. package/utils/activateOnKeyboard.ts +14 -0
  114. package/utils/{chevronCard → card/chevron-card}/context.ts +1 -1
  115. package/utils/card/chevron-card/index.ts +1 -0
  116. package/utils/card/horizontal-card/context.ts +12 -0
  117. package/utils/{horizCard/createHorizCardGeometry.ts → card/horizontal-card/createHorizontalCardGeometry.ts} +10 -45
  118. package/utils/card/horizontal-card/index.ts +2 -0
  119. package/utils/card/vertical-card/context.ts +19 -0
  120. package/utils/{vertCard/createVertCardGeometry.ts → card/vertical-card/createVerticalCardGeometry.ts} +9 -130
  121. package/utils/card/vertical-card/index.ts +2 -0
  122. package/utils/colors.ts +93 -0
  123. package/utils/{arcComparison → comparisons/arc-comparison}/context.ts +0 -11
  124. package/utils/{arcComparison → comparisons/arc-comparison}/createArcComparisonGeometry.ts +1 -1
  125. package/utils/comparisons/arc-comparison/resolveArcComparisonItems.ts +33 -0
  126. package/utils/comparisons/table-comparison/constants.ts +47 -0
  127. package/utils/{tableComparison → comparisons/table-comparison}/context.ts +2 -2
  128. package/utils/{arcOrbit → core/arc-orbit}/resolveArcOrbitItems.ts +11 -15
  129. package/utils/defense-in-depth/arc-defense-in-depth/context.ts +113 -0
  130. package/utils/defense-in-depth/arc-defense-in-depth/createArcDefenseInDepthGeometry.ts +600 -0
  131. package/utils/defense-in-depth/arc-defense-in-depth/types.ts +144 -0
  132. package/utils/defense-in-depth/shared/colors.ts +51 -0
  133. package/utils/defense-in-depth/shared/constants.ts +22 -0
  134. package/utils/defense-in-depth/shared/types.ts +7 -0
  135. package/utils/facets/tetrad/rectangle-orbit-tetrad/context.ts +31 -0
  136. package/utils/{rectOrbitTetrad/createRectOrbitTetradGeometry.ts → facets/tetrad/rectangle-orbit-tetrad/createRectangleOrbitTetradGeometry.ts} +5 -104
  137. package/utils/facets/tetrad/rectangle-orbit-tetrad/index.ts +3 -0
  138. package/utils/{rectOrbitTetrad/resolveRectOrbitTetradItems.ts → facets/tetrad/rectangle-orbit-tetrad/resolveRectangleOrbitTetradItems.ts} +41 -49
  139. package/utils/{arrowTriad → facets/triad/arrow-triad}/resolveArrowTriadItems.ts +27 -28
  140. package/utils/{gearTriad → facets/triad/gear-triad}/context.ts +5 -5
  141. package/utils/{gearTriad → facets/triad/gear-triad}/createGearTriadGeometry.ts +2 -0
  142. package/utils/{gearTriad → facets/triad/gear-triad}/resolveGearTriadItems.ts +23 -24
  143. package/utils/facets/triad/hexagon-triad/context.ts +25 -0
  144. package/utils/{hexTriad/createHexTriadGeometry.ts → facets/triad/hexagon-triad/createHexagonTriadGeometry.ts} +11 -27
  145. package/utils/facets/triad/hexagon-triad/index.ts +3 -0
  146. package/utils/facets/triad/hexagon-triad/resolveHexagonTriadItems.ts +60 -0
  147. package/utils/{shiftingHeading → layouts/shifting-heading}/collectShiftingIntroNodes.ts +1 -0
  148. package/utils/layouts/table-of-contents/calculateTocCenterAlignmentOffset.ts +17 -0
  149. package/utils/{tableOfContents → layouts/table-of-contents}/calculateTocMarkerPositions.ts +0 -12
  150. package/utils/{tableOfContents → layouts/table-of-contents}/createTocConnectorPath.ts +11 -5
  151. package/utils/{mergeUno → merge-uno}/classifyVisual.ts +1 -1
  152. package/utils/{mergeUno → merge-uno}/collectClassNames.ts +9 -3
  153. package/utils/process/arc-arrow-process/resolveArcArrowProcessItems.ts +180 -0
  154. package/utils/pyramid/circular-pyramid/context.ts +1 -4
  155. package/utils/pyramid/circular-pyramid/createCircularPyramidGeometry.ts +6 -10
  156. package/utils/pyramid/shared/colors.ts +33 -83
  157. package/utils/pyramid/shared/constants.ts +3 -2
  158. package/utils/pyramid/shared/types.ts +0 -5
  159. package/utils/pyramid/square-pyramid/context.ts +1 -4
  160. package/utils/pyramid/square-pyramid/createSquarePyramidGeometry.ts +6 -10
  161. package/utils/useDiagramAutoScale.ts +64 -16
  162. package/utils/useMergedUnoAttrs.ts +9 -5
  163. package/components/card/chevron-card/ChevronCardHeading.vue +0 -39
  164. package/components/card/horiz-card/HorizCardHeading.vue +0 -47
  165. package/components/card/vert-card/VertCardHeading.vue +0 -68
  166. package/components/card/vert-card/VertCardTitle.vue +0 -76
  167. package/components/comparisons/arc-comparison/ArcComparisonContents.vue +0 -17
  168. package/components/comparisons/arc-comparison/ArcComparisonTitle.vue +0 -29
  169. package/components/core/arc-orbit/ArcOrbitContents.vue +0 -18
  170. package/components/core/arc-orbit/ArcOrbitTitle.vue +0 -50
  171. package/components/facets/tetrad/rect-orbit-tetrad/RectOrbitTetradCenter.vue +0 -53
  172. package/components/facets/tetrad/rect-orbit-tetrad/RectOrbitTetradContent.vue +0 -39
  173. package/components/facets/tetrad/rect-orbit-tetrad/RectOrbitTetradHeading.vue +0 -44
  174. package/components/facets/triad/gear-triad/GearTriadContents.vue +0 -111
  175. package/components/facets/triad/gear-triad/GearTriadDescription.vue +0 -38
  176. package/components/facets/triad/hex-triad/HexTriadCenterBadge.vue +0 -51
  177. package/components/facets/triad/hex-triad/HexTriadContent.vue +0 -20
  178. package/components/facets/triad/hex-triad/HexTriadHeading.vue +0 -28
  179. package/components/pyramid/circular-pyramid/CircularPyramidStackTitle.vue +0 -138
  180. package/components/pyramid/square-pyramid/SquarePyramidStackTitle.vue +0 -134
  181. package/layouts/core/table-of-contents.vue +0 -30
  182. package/utils/arcArrowProcess/resolveArcArrowProcessItems.ts +0 -189
  183. package/utils/arcComparison/resolveArcComparisonItems.ts +0 -102
  184. package/utils/chevronCard/createChevronCardGeometry.ts +0 -48
  185. package/utils/chevronCard/index.ts +0 -2
  186. package/utils/hexTriad/context.ts +0 -25
  187. package/utils/hexTriad/index.ts +0 -3
  188. package/utils/hexTriad/resolveHexTriadItems.ts +0 -63
  189. package/utils/horizCard/context.ts +0 -13
  190. package/utils/horizCard/index.ts +0 -2
  191. package/utils/pyramid/index.ts +0 -3
  192. package/utils/rectOrbitTetrad/context.ts +0 -31
  193. package/utils/rectOrbitTetrad/index.ts +0 -3
  194. package/utils/tableComparison/constants.ts +0 -72
  195. package/utils/tableOfContents/calculateTocCenterAlignmentOffset.ts +0 -11
  196. package/utils/vertCard/context.ts +0 -18
  197. package/utils/vertCard/index.ts +0 -2
  198. package/utils/{arcComparison → comparisons/arc-comparison}/index.ts +0 -0
  199. package/utils/{tableComparison → comparisons/table-comparison}/index.ts +0 -0
  200. package/utils/{arcOrbit → core/arc-orbit}/context.ts +0 -0
  201. package/utils/{arcOrbit → core/arc-orbit}/createArcOrbitGeometry.ts +0 -0
  202. package/utils/{arcOrbit → core/arc-orbit}/index.ts +0 -0
  203. package/utils/{arrowTriad → facets/triad/arrow-triad}/context.ts +0 -0
  204. package/utils/{arrowTriad → facets/triad/arrow-triad}/createArrowTriadGeometry.ts +0 -0
  205. package/utils/{arrowTriad → facets/triad/arrow-triad}/index.ts +0 -0
  206. package/utils/{gearTriad → facets/triad/gear-triad}/index.ts +0 -0
  207. package/utils/{tableOfContents → layouts/table-of-contents}/calculateUniformTocArticleWidth.ts +0 -0
  208. package/utils/{tableOfContents → layouts/table-of-contents}/createTocArcPath.ts +0 -0
  209. package/utils/{tableOfContents → layouts/table-of-contents}/index.ts +0 -0
  210. package/utils/{mergeUno → merge-uno}/classifyLayout.ts +0 -0
  211. package/utils/{mergeUno → merge-uno}/classifySimple.ts +0 -0
  212. package/utils/{mergeUno → merge-uno}/classifyTypography.ts +0 -0
  213. package/utils/{mergeUno → merge-uno}/classifyUtility.ts +0 -0
  214. package/utils/{mergeUno → merge-uno}/index.ts +0 -0
  215. package/utils/{mergeUno → merge-uno}/mergeClassValues.ts +0 -0
  216. package/utils/{mergeUno → merge-uno}/splitVariantScope.ts +1 -1
  217. package/utils/{mergeUno → merge-uno}/types.ts +0 -0
  218. package/utils/{arcArrowProcess → process/arc-arrow-process}/context.ts +1 -1
  219. /package/utils/{arcArrowProcess → process/arc-arrow-process}/createArcArrowProcessGeometry.ts +0 -0
  220. /package/utils/{arcArrowProcess → process/arc-arrow-process}/index.ts +0 -0
@@ -0,0 +1,212 @@
1
+ <script setup lang="ts">
2
+ import { computed, inject } from 'vue';
3
+
4
+ import {
5
+ SQUARE_PYRAMID_ROOT_KEY,
6
+ SQUARE_PYRAMID_STACK_KEY,
7
+ } from '../../../utils/pyramid/square-pyramid';
8
+ import { useMergedUnoAttrs } from '../../../utils/useMergedUnoAttrs';
9
+
10
+ defineOptions({
11
+ name: 'SquarePyramidStackHeading',
12
+ inheritAttrs: false,
13
+ });
14
+
15
+ export interface ISquarePyramidStackHeadingProps {
16
+ readonly step?: string | number;
17
+ readonly color?: string;
18
+ readonly minWidth?: number;
19
+ }
20
+
21
+ const props = withDefaults(defineProps<ISquarePyramidStackHeadingProps>(), {
22
+ step: undefined,
23
+ color: undefined,
24
+ minWidth: 150,
25
+ });
26
+
27
+ const rootContext = inject(SQUARE_PYRAMID_ROOT_KEY, undefined);
28
+ const stackContext = inject(SQUARE_PYRAMID_STACK_KEY, undefined);
29
+
30
+ const isActive = computed(() => {
31
+ return stackContext?.isActive.value ?? false;
32
+ });
33
+
34
+ const isAnimated = computed(() => {
35
+ return rootContext?.animation.value ?? false;
36
+ });
37
+
38
+ const stepIndex = computed(() => {
39
+ return stackContext?.index.value ?? 0;
40
+ });
41
+
42
+ const resolvedStep = computed(() => {
43
+ if (props.step !== undefined) {
44
+ return props.step;
45
+ }
46
+
47
+ if (stackContext?.step.value !== undefined) {
48
+ return stackContext.step.value;
49
+ }
50
+
51
+ return '01';
52
+ });
53
+
54
+ const minPillWidth = computed(() => props.minWidth ?? 150);
55
+
56
+ const stackColor = computed(() => {
57
+ return (
58
+ props.color ??
59
+ stackContext?.color?.value ??
60
+ rootContext?.color.value ??
61
+ 'var(--alpha-square-pyramid-stack-heading-accent)'
62
+ );
63
+ });
64
+
65
+ const { className, forwardedAttrs } = useMergedUnoAttrs(() => [
66
+ 'alpha-square-pyramid-stack-heading__pill flex items-center gap-2 px-2.5 py-1 rounded-full text-xs font-semibold tracking-tight leading-tight transition-all duration-300 border shrink-0',
67
+ isActive.value
68
+ ? 'bg-(--alpha-square-pyramid-stack-heading-border-active) text-(--alpha-square-pyramid-stack-heading-active)'
69
+ : 'bg-(--alpha-square-pyramid-stack-heading-border) text-(--alpha-square-pyramid-stack-heading)',
70
+ ]);
71
+ </script>
72
+
73
+ <template>
74
+ <div
75
+ class="alpha-square-pyramid-stack-heading relative w-full flex items-center select-none"
76
+ :class="[
77
+ isActive
78
+ ? 'alpha-square-pyramid-stack-heading--active'
79
+ : 'alpha-square-pyramid-stack-heading--default',
80
+ ]"
81
+ :style="{
82
+ '--title-delay': `calc(var(--alpha-square-pyramid-start-delay, 0ms) + ${460 + stepIndex * 320}ms)`,
83
+ }"
84
+ >
85
+ <!-- Pill Badge Container -->
86
+ <div
87
+ v-bind="forwardedAttrs()"
88
+ :class="
89
+ className({
90
+ 'alpha-square-pyramid-stack-heading__pill--animated': isAnimated,
91
+ })
92
+ "
93
+ :style="{
94
+ minWidth: `${minPillWidth}px`,
95
+ maxWidth: 'calc(100% - 30px)',
96
+ width: 'fit-content',
97
+ boxSizing: 'border-box',
98
+ borderColor: stackColor,
99
+ boxShadow: isActive
100
+ ? `0 4px 14px color-mix(in srgb, ${stackColor} 15%, transparent)`
101
+ : 'none',
102
+ }"
103
+ >
104
+ <!-- Circular Step Indicator -->
105
+ <div
106
+ class="w-5.5 h-5.5 rounded-full flex items-center justify-center text-[10px] font-bold tracking-tight text-(--alpha-square-pyramid-stack-heading-number) transition-all duration-300 shrink-0"
107
+ :style="{
108
+ backgroundColor: stackColor,
109
+ }"
110
+ >
111
+ <slot name="step">{{ resolvedStep }}</slot>
112
+ </div>
113
+ <!-- Title Text -->
114
+ <h4
115
+ class="text-xs font-semibold tracking-tight leading-tight transition-colors duration-300 pr-1 truncate flex-1"
116
+ >
117
+ <slot>{{ '' }}</slot>
118
+ </h4>
119
+ </div>
120
+ <!-- Scalable Line between Title and Dot -->
121
+ <div
122
+ class="alpha-square-pyramid-stack-heading__connector flex-1 flex items-center min-w-7.5 pointer-events-none"
123
+ >
124
+ <div
125
+ class="alpha-square-pyramid-stack-heading__line flex-1 h-px transition-colors duration-300"
126
+ :class="{
127
+ 'alpha-square-pyramid-stack-heading__line--animated': isAnimated,
128
+ }"
129
+ :style="{
130
+ backgroundColor: stackColor,
131
+ opacity: isActive ? 1 : 0.65,
132
+ }"
133
+ />
134
+ <div
135
+ class="alpha-square-pyramid-stack-heading__dot w-1.5 h-1.5 rounded-full shrink-0 -ml-1 transition-all duration-300"
136
+ :class="{
137
+ 'alpha-square-pyramid-stack-heading__dot--animated': isAnimated,
138
+ }"
139
+ :style="{
140
+ backgroundColor: stackColor,
141
+ boxShadow: isActive
142
+ ? `0 0 6px ${stackColor}`
143
+ : `0 0 2px color-mix(in srgb, ${stackColor} 50%, transparent)`,
144
+ }"
145
+ />
146
+ </div>
147
+ </div>
148
+ </template>
149
+
150
+ <style scoped>
151
+ .alpha-square-pyramid-stack-heading {
152
+ box-sizing: border-box;
153
+ }
154
+
155
+ .alpha-square-pyramid-stack-heading--active
156
+ .alpha-square-pyramid-stack-heading__pill {
157
+ backdrop-filter: blur(8px);
158
+ }
159
+
160
+ .alpha-square-pyramid-stack-heading__dot--animated {
161
+ animation: alpha-pyramid-title-dot-pop 120ms cubic-bezier(0.16, 1, 0.3, 1)
162
+ var(--title-delay) both;
163
+ }
164
+
165
+ @keyframes alpha-pyramid-title-dot-pop {
166
+ 0% {
167
+ opacity: 0;
168
+ transform: scale(0);
169
+ }
170
+ 100% {
171
+ opacity: 1;
172
+ transform: scale(1);
173
+ }
174
+ }
175
+
176
+ .alpha-square-pyramid-stack-heading__line--animated {
177
+ transform-origin: right center;
178
+ animation: alpha-pyramid-title-line-draw 500ms cubic-bezier(0.4, 0, 0.2, 1)
179
+ calc(var(--title-delay) + 120ms) both;
180
+ }
181
+
182
+ @keyframes alpha-pyramid-title-line-draw {
183
+ 0% {
184
+ opacity: 0;
185
+ transform: scaleX(0);
186
+ }
187
+ 2% {
188
+ opacity: 1;
189
+ transform: scaleX(0);
190
+ }
191
+ 100% {
192
+ opacity: 1;
193
+ transform: scaleX(1);
194
+ }
195
+ }
196
+
197
+ .alpha-square-pyramid-stack-heading__pill--animated {
198
+ animation: alpha-pyramid-title-pill-in 240ms cubic-bezier(0.16, 1, 0.3, 1)
199
+ calc(var(--title-delay) + 380ms) both;
200
+ }
201
+
202
+ @keyframes alpha-pyramid-title-pill-in {
203
+ 0% {
204
+ opacity: 0;
205
+ transform: translateX(-10px);
206
+ }
207
+ 100% {
208
+ opacity: 1;
209
+ transform: translateX(0);
210
+ }
211
+ }
212
+ </style>
@@ -0,0 +1,48 @@
1
+ /* Color defaults shared by this component family. */
2
+ @layer alpha-theme-tokens {
3
+ :root {
4
+ --alpha-square-pyramid-accent: #3b82f6;
5
+ --alpha-square-pyramid-center: #0f172a;
6
+
7
+ --alpha-square-pyramid-connector-fill: #ffffff;
8
+ --alpha-square-pyramid-connector-highlight: rgba(255, 255, 255, 0.5);
9
+
10
+ --alpha-square-pyramid-stack-1-color: #ec4899;
11
+ --alpha-square-pyramid-stack-2-color: #8b5cf6;
12
+ --alpha-square-pyramid-stack-3-color: #3b82f6;
13
+ --alpha-square-pyramid-stack-4-color: #06b6d4;
14
+ --alpha-square-pyramid-stack-5-color: #14b8a6;
15
+ --alpha-square-pyramid-stack-6-color: #f59e0b;
16
+
17
+ --alpha-square-pyramid-stack-content: var(
18
+ --alpha-foreground-primary,
19
+ #475569
20
+ );
21
+ --alpha-square-pyramid-stack-content-accent: #3b82f6;
22
+ --alpha-square-pyramid-stack-content-active: #0f172a;
23
+ --alpha-square-pyramid-stack-content-border: rgba(255, 255, 255, 0.85);
24
+ --alpha-square-pyramid-stack-content-border-active: rgba(
25
+ 255,
26
+ 255,
27
+ 255,
28
+ 0.95
29
+ );
30
+
31
+ --alpha-square-pyramid-highlight: #ffffff;
32
+
33
+ --alpha-square-pyramid-stack-heading: var(
34
+ --alpha-foreground-primary,
35
+ #334155
36
+ );
37
+ --alpha-square-pyramid-stack-heading-accent: #3b82f6;
38
+ --alpha-square-pyramid-stack-heading-active: #0f172a;
39
+ --alpha-square-pyramid-stack-heading-border: rgba(255, 255, 255, 0.85);
40
+ --alpha-square-pyramid-stack-heading-border-active: rgba(
41
+ 255,
42
+ 255,
43
+ 255,
44
+ 0.95
45
+ );
46
+ --alpha-square-pyramid-stack-heading-number: #ffffff;
47
+ }
48
+ }
@@ -0,0 +1,35 @@
1
+ @layer alpha-theme-tokens {
2
+ :root {
3
+ --alpha-pyramid-accent: #3b82f6;
4
+ --alpha-pyramid-highlight: #ffffff;
5
+ }
6
+ }
7
+
8
+ .alpha-interaction-control {
9
+ position: absolute;
10
+ inset: 0;
11
+ z-index: 20;
12
+ width: 100%;
13
+ height: 100%;
14
+ padding: 0;
15
+ margin: 0;
16
+ color: transparent;
17
+ appearance: none;
18
+ cursor: pointer;
19
+ background: transparent;
20
+ border: 0;
21
+ }
22
+
23
+ .alpha-interaction-control:disabled {
24
+ cursor: default;
25
+ }
26
+
27
+ .alpha-interaction-control:focus-visible {
28
+ outline: 0.2rem solid var(--alpha-foreground-accent, #0284c7);
29
+ outline-offset: -0.3rem;
30
+ background: color-mix(
31
+ in srgb,
32
+ var(--alpha-foreground-accent, #0284c7) 20%,
33
+ transparent
34
+ );
35
+ }
@@ -22,7 +22,7 @@ import {
22
22
  calculateUniformTocArticleWidthPx,
23
23
  createTocArcPath,
24
24
  createTocConnectorPath,
25
- } from '../../utils/tableOfContents';
25
+ } from '../../utils/layouts/table-of-contents';
26
26
  import { useMergedUnoAttrs } from '../../utils/useMergedUnoAttrs';
27
27
 
28
28
  defineOptions({
@@ -49,13 +49,13 @@ const { className, forwardedAttrs } = useMergedUnoAttrs(
49
49
  );
50
50
 
51
51
  const markerColors = [
52
- '#ffad21',
53
- '#24b9aa',
54
- '#3188e4',
55
- '#59d875',
56
- '#f53270',
57
- '#8b5cf6',
58
- '#ef4444',
52
+ 'var(--alpha-arc-toc-marker-orange)',
53
+ 'var(--alpha-arc-toc-marker-teal)',
54
+ 'var(--alpha-arc-toc-marker-blue)',
55
+ 'var(--alpha-arc-toc-marker-green)',
56
+ 'var(--alpha-arc-toc-marker-pink)',
57
+ 'var(--alpha-arc-toc-marker-purple)',
58
+ 'var(--alpha-arc-toc-marker-red)',
59
59
  ] as const;
60
60
 
61
61
  interface ITocConnector {
@@ -87,7 +87,7 @@ const markerPositions = computed(() => {
87
87
  });
88
88
  const tocContentStyle = computed(() => {
89
89
  return {
90
- '--toc-list-gap': `${calculateTocListGapRem(tocItemCount.value)}rem`,
90
+ '--alpha-arc-toc-list-gap': `${calculateTocListGapRem(tocItemCount.value)}rem`,
91
91
  left: `calc(40.4% + ${calculateTocMiddleMarkerOffsetPx(tocItemCount.value)}px)`,
92
92
  } satisfies CSSProperties;
93
93
  });
@@ -95,7 +95,7 @@ const markerStyles = computed(() => {
95
95
  return markerPositions.value.map(
96
96
  ({ offsetFromMiddlePx, rightShiftPx, topPercent }, index) => {
97
97
  return {
98
- '--marker-color': markerColors[index],
98
+ '--alpha-arc-toc-marker-color': markerColors[index],
99
99
  left: `calc(40.4% - ${offsetFromMiddlePx}px + ${rightShiftPx}px)`,
100
100
  top: `${topPercent}%`,
101
101
  } satisfies CSSProperties;
@@ -109,6 +109,7 @@ let connectorResizeObserver: ResizeObserver | undefined;
109
109
 
110
110
  function isMiddleItem(index: number, count: number): boolean {
111
111
  const middleIndex = (count - 1) / 2;
112
+
112
113
  return Math.abs(index - middleIndex) < 1;
113
114
  }
114
115
 
@@ -118,6 +119,7 @@ function updateConnectors(): void {
118
119
  if (!root || root.clientWidth === 0 || root.clientHeight === 0) {
119
120
  arcPath.value = '';
120
121
  connectors.value = [];
122
+
121
123
  return;
122
124
  }
123
125
 
@@ -173,18 +175,20 @@ function updateConnectors(): void {
173
175
  const markerCenterY =
174
176
  middleIndices.reduce((sum, index) => {
175
177
  const rect = markers[index]?.getBoundingClientRect();
178
+
176
179
  return sum + (rect ? rect.top + rect.height / 2 : 0);
177
180
  }, 0) / middleIndices.length;
178
181
  const articleCenterY =
179
182
  middleIndices.reduce((sum, index) => {
180
183
  const rect = articles[index]?.getBoundingClientRect();
184
+
181
185
  return sum + (rect ? rect.top + rect.height / 2 : 0);
182
186
  }, 0) / middleIndices.length;
183
- const offsetPx = calculateTocCenterAlignmentOffsetPx(
187
+ const offsetPx = calculateTocCenterAlignmentOffsetPx({
184
188
  markerCenterY,
185
189
  articleCenterY,
186
190
  scaleY,
187
- );
191
+ });
188
192
 
189
193
  tocContent.style.transform = `translateY(${offsetPx}px)`;
190
194
  }
@@ -212,7 +216,11 @@ function updateConnectors(): void {
212
216
 
213
217
  nextConnectors.push({
214
218
  color: markerColors[index % markerColors.length] ?? markerColors[0],
215
- path: createTocConnectorPath(start, end, isMiddleItem(index, count)),
219
+ path: createTocConnectorPath({
220
+ start,
221
+ end,
222
+ isMiddle: isMiddleItem(index, count),
223
+ }),
216
224
  });
217
225
  }
218
226
 
@@ -249,11 +257,13 @@ onMounted(async () => {
249
257
  subtree: true,
250
258
  });
251
259
  }
260
+
252
261
  window.addEventListener('resize', scheduleConnectorUpdate);
253
262
  });
254
263
 
255
264
  watch(tocItemCount, async () => {
256
265
  await nextTick();
266
+
257
267
  scheduleConnectorUpdate();
258
268
  });
259
269
 
@@ -269,11 +279,7 @@ onBeforeUnmount(() => {
269
279
  </script>
270
280
 
271
281
  <template>
272
- <div
273
- ref="rootElement"
274
- v-bind="forwardedAttrs()"
275
- :class="className()"
276
- >
282
+ <div ref="rootElement" v-bind="forwardedAttrs()" :class="className()">
277
283
  <header class="alpha-arc-toc__heading">
278
284
  <slot>
279
285
  <h1>Table of Contents</h1>
@@ -308,26 +314,25 @@ onBeforeUnmount(() => {
308
314
  :stroke="connector.color"
309
315
  />
310
316
  </svg>
311
- <nav
312
- class="alpha-arc-toc__content"
313
- :style="tocContentStyle"
314
- >
317
+ <nav class="alpha-arc-toc__content" :style="tocContentStyle">
315
318
  <ol class="alpha-arc-toc__list">
316
319
  <li
317
320
  v-for="(item, index) in visibleTocItems"
318
321
  :key="item.path"
319
322
  class="alpha-arc-toc__item"
320
323
  :class="{ 'alpha-arc-toc__item--active': item.active }"
321
- :style="{ '--toc-color': markerColors[index % markerColors.length] }"
324
+ :style="{
325
+ '--alpha-arc-toc-marker-color':
326
+ markerColors[index % markerColors.length],
327
+ }"
322
328
  >
323
329
  <RouterLink
324
330
  :to="isPresenter ? `/presenter${item.path}` : item.path"
325
331
  @click="($event.target as HTMLElement)?.blur()"
326
332
  >
327
- <span
328
- v-if="props.indexed"
329
- class="alpha-arc-toc__item-index"
330
- >{{ index + 1 }}. </span>
333
+ <span v-if="props.indexed" class="alpha-arc-toc__item-index"
334
+ >{{ index + 1 }}.
335
+ </span>
331
336
  <span class="alpha-arc-toc__item-text">{{ item.title }}</span>
332
337
  </RouterLink>
333
338
  </li>
@@ -337,16 +342,6 @@ onBeforeUnmount(() => {
337
342
  </template>
338
343
 
339
344
  <style scoped>
340
- .alpha-arc-toc {
341
- --toc-orange: #ffad21;
342
- --toc-teal: #24b9aa;
343
- --toc-blue: #3188e4;
344
- --toc-green: #59d875;
345
- --toc-pink: #f53270;
346
- --toc-purple: #8b5cf6;
347
- --toc-red: #ef4444;
348
- }
349
-
350
345
  .alpha-arc-toc.slidev-layout {
351
346
  position: relative;
352
347
  overflow: hidden;
@@ -392,7 +387,7 @@ onBeforeUnmount(() => {
392
387
 
393
388
  .alpha-arc-toc__curve path {
394
389
  fill: none;
395
- stroke: #d7d7d5;
390
+ stroke: var(--alpha-arc-toc-curve-stroke);
396
391
  stroke-width: 2;
397
392
  vector-effect: non-scaling-stroke;
398
393
  }
@@ -402,10 +397,10 @@ onBeforeUnmount(() => {
402
397
  z-index: 2;
403
398
  width: 1rem;
404
399
  height: 1rem;
405
- border: 0.23rem solid #f8f8f7;
400
+ border: 0.23rem solid var(--alpha-arc-toc-marker-border);
406
401
  border-radius: 50%;
407
- background: var(--marker-color);
408
- box-shadow: 0 0 0 2px var(--marker-color);
402
+ background: var(--alpha-arc-toc-marker-color);
403
+ box-shadow: 0 0 0 2px var(--alpha-arc-toc-marker-color);
409
404
  transform: translate(-50%, -50%);
410
405
  }
411
406
 
@@ -438,7 +433,7 @@ onBeforeUnmount(() => {
438
433
  .alpha-arc-toc__list {
439
434
  display: flex;
440
435
  flex-direction: column;
441
- gap: var(--toc-list-gap);
436
+ gap: var(--alpha-arc-toc-list-gap);
442
437
  margin: 0;
443
438
  padding: 0;
444
439
  list-style: none;
@@ -461,9 +456,9 @@ onBeforeUnmount(() => {
461
456
  padding: 0.5rem 1.25rem;
462
457
  border: 0;
463
458
  border-radius: 999px;
464
- background: var(--toc-color);
465
- box-shadow: 0.45rem 0.65rem 0.85rem rgb(15 23 42 / 18%);
466
- color: white;
459
+ background: var(--alpha-arc-toc-marker-color);
460
+ box-shadow: var(--alpha-arc-toc-item-shadow);
461
+ color: var(--alpha-arc-toc-item);
467
462
  font-family: inherit;
468
463
  font-size: 0.9rem;
469
464
  font-weight: 700;
@@ -45,16 +45,17 @@ const tocIndex = computed(() => {
45
45
  </script>
46
46
 
47
47
  <template>
48
- <div
49
- v-bind="forwardedAttrs()"
50
- :class="className()"
51
- :style="style"
52
- >
48
+ <div v-bind="forwardedAttrs()" :class="className()" :style="style">
53
49
  <div
54
50
  v-if="indexed && tocIndex !== null"
55
51
  class="alpha-bg-center__indexed-content flex flex-col items-center gap-2"
56
52
  >
57
- <span class="alpha-bg-center__index text-5xl font-extrabold leading-none text-white opacity-50 tracking-tighter">{{ tocIndex }}</span>
53
+ <span
54
+ class="alpha-bg-center__index text-5xl font-extrabold leading-none text-(--alpha-bg-center-text) opacity-50 tracking-tighter"
55
+ >{{
56
+ tocIndex
57
+ }}</span
58
+ >
58
59
  <slot />
59
60
  </div>
60
61
  <slot v-else />
@@ -0,0 +1,17 @@
1
+ @layer alpha-theme-tokens {
2
+ :root {
3
+ --alpha-arc-toc-curve-stroke: #d7d7d5;
4
+ --alpha-arc-toc-item: #ffffff;
5
+ --alpha-arc-toc-item-shadow: 0.45rem 0.65rem 0.85rem rgb(15 23 42 / 18%);
6
+ --alpha-arc-toc-marker-border: #f8f8f7;
7
+ --alpha-arc-toc-marker-orange: #ffad21;
8
+ --alpha-arc-toc-marker-teal: #24b9aa;
9
+ --alpha-arc-toc-marker-blue: #3188e4;
10
+ --alpha-arc-toc-marker-green: #59d875;
11
+ --alpha-arc-toc-marker-pink: #f53270;
12
+ --alpha-arc-toc-marker-purple: #8b5cf6;
13
+ --alpha-arc-toc-marker-red: #ef4444;
14
+
15
+ --alpha-bg-center-text: var(--alpha-foreground-accent, #fff);
16
+ }
17
+ }
@@ -11,7 +11,7 @@ import {
11
11
  watchEffect,
12
12
  } from 'vue';
13
13
 
14
- import { collectShiftingIntroNodes } from '../../utils/shiftingHeading/collectShiftingIntroNodes';
14
+ import { collectShiftingIntroNodes } from '../../utils/layouts/shifting-heading/collectShiftingIntroNodes';
15
15
  import { useMergedUnoAttrs } from '../../utils/useMergedUnoAttrs';
16
16
 
17
17
  defineOptions({
@@ -65,10 +65,7 @@ const { className, forwardedAttrs } = useMergedUnoAttrs(
65
65
  </script>
66
66
 
67
67
  <template>
68
- <div
69
- v-bind="forwardedAttrs()"
70
- :class="className()"
71
- >
68
+ <div v-bind="forwardedAttrs()" :class="className()">
72
69
  <component
73
70
  :is="nodes.title"
74
71
  v-if="nodes.title"
@@ -82,10 +79,7 @@ const { className, forwardedAttrs } = useMergedUnoAttrs(
82
79
  >
83
80
  <component :is="nodes.title" />
84
81
  </TransitionHeading>
85
- <div
86
- v-click
87
- class="hidden"
88
- />
82
+ <div v-click class="hidden" />
89
83
  <div
90
84
  :class="[
91
85
  $clicks > 0 ? 'opacity-100' : 'opacity-0',
@@ -98,10 +92,7 @@ const { className, forwardedAttrs } = useMergedUnoAttrs(
98
92
  :is="content.node"
99
93
  v-click="nodes.clickRef.get(content.key)"
100
94
  />
101
- <component
102
- v-else
103
- :is="content.node"
104
- />
95
+ <component v-else :is="content.node" />
105
96
  </template>
106
97
  </div>
107
98
  </div>
@@ -1,4 +1,5 @@
1
1
  <script setup lang="ts">
2
+ import SquareThanks from '../../components/core/thanks/SquareThanks.vue';
2
3
  import { useMergedUnoAttrs } from '../../utils/useMergedUnoAttrs';
3
4
 
4
5
  defineOptions({
@@ -11,10 +12,9 @@ const { className, forwardedAttrs } = useMergedUnoAttrs(
11
12
  </script>
12
13
 
13
14
  <template>
14
- <div
15
- v-bind="forwardedAttrs()"
16
- :class="className()"
17
- >
18
- <ThanksContent />
15
+ <div v-bind="forwardedAttrs()" :class="className()">
16
+ <SquareThanks>
17
+ <slot />
18
+ </SquareThanks>
19
19
  </div>
20
20
  </template>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alphacifer/slidev-addon-theme",
3
- "version": "0.0.9",
3
+ "version": "0.0.11",
4
4
  "description": "All Slidev addons for Alpha presentations",
5
5
  "type": "module",
6
6
  "keywords": [
@@ -11,6 +11,8 @@
11
11
  "components",
12
12
  "layouts",
13
13
  "utils",
14
+ "style.css",
15
+ "uno.config.ts",
14
16
  "README.md"
15
17
  ],
16
18
  "publishConfig": {
@@ -30,16 +32,16 @@
30
32
  },
31
33
  "dependencies": {
32
34
  "@vueuse/motion": "3.0.3",
33
- "@alphacifer/core-utils": "^0.0.10"
35
+ "@alphacifer/core-utils": "^0.0.10",
36
+ "@alphacifer/slidev-core-theme": "^0.0.1"
34
37
  },
35
38
  "devDependencies": {
36
- "@slidev/client": "52.19.0",
37
39
  "@slidev/cli": "52.19.0",
38
- "@slidev/theme-seriph": "0.25.0",
39
- "vue": "3.5.40"
40
+ "@slidev/client": "52.19.0",
41
+ "@slidev/theme-seriph": "0.25.0"
40
42
  },
41
43
  "scripts": {
42
- "test": "vitest run --coverage",
44
+ "test": "vitest run --globals",
43
45
  "dev": "slidev slides.md --open",
44
46
  "dev:academic": "slidev academic-slides.md --open",
45
47
  "preview:build": "slidev build slides.md"
package/style.css ADDED
@@ -0,0 +1,17 @@
1
+ @import '@alphacifer/slidev-core-theme/style.css';
2
+ @import './layouts/core/style.css';
3
+ @import './components/style.css';
4
+ @import './components/core/style.css';
5
+ @import './components/card/chevron-card/style.css';
6
+ @import './components/card/horizontal-card/style.css';
7
+ @import './components/card/vertical-card/style.css';
8
+ @import './components/comparisons/arc-comparison/style.css';
9
+ @import './components/comparisons/table-comparison/style.css';
10
+ @import './components/defense-in-depth/arc-defense-in-depth/style.css';
11
+ @import './components/facets/tetrad/rectangle-orbit-tetrad/style.css';
12
+ @import './components/facets/triad/arrow-triad/style.css';
13
+ @import './components/facets/triad/gear-triad/style.css';
14
+ @import './components/facets/triad/hexagon-triad/style.css';
15
+ @import './components/process/arc-arrow-process/style.css';
16
+ @import './components/pyramid/circular-pyramid/style.css';
17
+ @import './components/pyramid/square-pyramid/style.css';
package/uno.config.ts ADDED
@@ -0,0 +1 @@
1
+ export { default } from '@alphacifer/slidev-core-theme/uno';