@alphacifer/slidev-addon-theme 0.0.10 → 0.0.12

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 (227) hide show
  1. package/README.md +134 -76
  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 +8 -90
  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/MetaList.vue +50 -0
  33. package/components/core/QnA.vue +1 -1
  34. package/components/core/Quote.vue +3 -6
  35. package/components/core/ReflectedTitle.vue +2 -6
  36. package/components/core/Speaker.vue +6 -11
  37. package/components/core/TransitionHeading.vue +2 -5
  38. package/components/core/arc-orbit/ArcOrbit.vue +65 -84
  39. package/components/core/arc-orbit/ArcOrbitBadge.vue +9 -11
  40. package/components/core/arc-orbit/ArcOrbitCallout.vue +19 -23
  41. package/components/core/arc-orbit/ArcOrbitContent.vue +6 -12
  42. package/components/core/arc-orbit/ArcOrbitHeading.vue +13 -11
  43. package/components/core/arc-orbit/style.css +20 -0
  44. package/components/core/style.css +9 -0
  45. package/components/core/thanks/{ThanksContent.vue → SquareThanks.vue} +36 -31
  46. package/components/core/thanks/SquareThanksContent.vue +87 -0
  47. package/components/core/thanks/ThanksOutlineSquare.vue +2 -5
  48. package/components/core/thanks/ThanksSquare.vue +2 -5
  49. package/components/core/thanks/style.css +30 -0
  50. package/components/defense-in-depth/{arc-did/ArcDiD.vue → arc-defense-in-depth/ArcDefenseInDepth.vue} +167 -97
  51. package/components/defense-in-depth/arc-defense-in-depth/ArcDefenseInDepthLayer.vue +240 -0
  52. package/components/defense-in-depth/{arc-did/ArcDiDLayerTitle.vue → arc-defense-in-depth/ArcDefenseInDepthLayerHeading.vue} +27 -29
  53. package/components/defense-in-depth/{arc-did/ArcDiDLayerPart.vue → arc-defense-in-depth/ArcDefenseInDepthLayerPart.vue} +91 -39
  54. package/components/defense-in-depth/{arc-did/ArcDiDLayerSector.vue → arc-defense-in-depth/ArcDefenseInDepthLayerSector.vue} +37 -23
  55. package/components/defense-in-depth/arc-defense-in-depth/style.css +38 -0
  56. package/components/facets/tetrad/{rect-orbit-tetrad/RectOrbitTetrad.vue → rectangle-orbit-tetrad/RectangleOrbitTetrad.vue} +66 -63
  57. package/components/facets/tetrad/{rect-orbit-tetrad/RectOrbitTetradCallout.vue → rectangle-orbit-tetrad/RectangleOrbitTetradCallout.vue} +58 -46
  58. package/components/facets/tetrad/rectangle-orbit-tetrad/RectangleOrbitTetradCenter.vue +54 -0
  59. package/components/facets/tetrad/rectangle-orbit-tetrad/RectangleOrbitTetradContent.vue +44 -0
  60. package/components/facets/tetrad/rectangle-orbit-tetrad/RectangleOrbitTetradHeading.vue +27 -0
  61. package/components/facets/tetrad/{rect-orbit-tetrad/RectOrbitTetradIcon.vue → rectangle-orbit-tetrad/RectangleOrbitTetradIcon.vue} +23 -13
  62. package/components/facets/tetrad/rectangle-orbit-tetrad/style.css +22 -0
  63. package/components/facets/triad/arrow-triad/ArrowTriad.vue +99 -109
  64. package/components/facets/triad/arrow-triad/ArrowTriadCallout.vue +31 -59
  65. package/components/facets/triad/arrow-triad/ArrowTriadContent.vue +18 -13
  66. package/components/facets/triad/arrow-triad/ArrowTriadHeading.vue +20 -13
  67. package/components/facets/triad/arrow-triad/ArrowTriadIcon.vue +14 -9
  68. package/components/facets/triad/arrow-triad/style.css +15 -0
  69. package/components/facets/triad/gear-triad/GearTriad.vue +73 -64
  70. package/components/facets/triad/gear-triad/GearTriadCallout.vue +58 -53
  71. package/components/facets/triad/gear-triad/GearTriadCenter.vue +9 -4
  72. package/components/facets/triad/gear-triad/GearTriadContent.vue +21 -36
  73. package/components/facets/triad/gear-triad/GearTriadDetail.vue +92 -0
  74. package/components/facets/triad/gear-triad/GearTriadDetails.vue +169 -0
  75. package/components/facets/triad/gear-triad/GearTriadDetailsContent.vue +18 -0
  76. package/components/facets/triad/gear-triad/GearTriadDetailsHeading.vue +60 -0
  77. package/components/facets/triad/gear-triad/GearTriadHeading.vue +19 -13
  78. package/components/facets/triad/gear-triad/GearTriadIcon.vue +22 -9
  79. package/components/facets/triad/gear-triad/style.css +26 -0
  80. package/components/facets/triad/{hex-triad/HexTriad.vue → hexagon-triad/HexagonTriad.vue} +81 -63
  81. package/components/facets/triad/{hex-triad/HexTriadBadge.vue → hexagon-triad/HexagonTriadBadge.vue} +38 -12
  82. package/components/facets/triad/{hex-triad/HexTriadCallout.vue → hexagon-triad/HexagonTriadCallout.vue} +35 -31
  83. package/components/facets/triad/hexagon-triad/HexagonTriadCenterBadge.vue +74 -0
  84. package/components/facets/triad/hexagon-triad/HexagonTriadContent.vue +34 -0
  85. package/components/facets/triad/hexagon-triad/HexagonTriadHeading.vue +44 -0
  86. package/components/facets/triad/{hex-triad/HexTriadLayer.vue → hexagon-triad/HexagonTriadLayer.vue} +12 -4
  87. package/components/facets/triad/hexagon-triad/style.css +22 -0
  88. package/components/process/arc-arrow-process/ArcArrowProcess.vue +13 -35
  89. package/components/process/arc-arrow-process/ArcArrowProcessArrow.vue +20 -21
  90. package/components/process/arc-arrow-process/ArcArrowProcessCallout.vue +30 -71
  91. package/components/process/arc-arrow-process/ArcArrowProcessContent.vue +18 -13
  92. package/components/process/arc-arrow-process/ArcArrowProcessHeading.vue +18 -18
  93. package/components/process/arc-arrow-process/ArcArrowProcessIcon.vue +23 -11
  94. package/components/process/arc-arrow-process/style.css +20 -0
  95. package/components/pyramid/circular-pyramid/CircularPyramid.vue +269 -170
  96. package/components/pyramid/circular-pyramid/CircularPyramidStack.vue +70 -52
  97. package/components/pyramid/circular-pyramid/CircularPyramidStackContent.vue +47 -37
  98. package/components/pyramid/circular-pyramid/{CircularPyramidStackTitle.vue → CircularPyramidStackHeading.vue} +49 -45
  99. package/components/pyramid/circular-pyramid/style.css +26 -0
  100. package/components/pyramid/square-pyramid/SquarePyramid.vue +191 -62
  101. package/components/pyramid/square-pyramid/SquarePyramidStack.vue +74 -49
  102. package/components/pyramid/square-pyramid/SquarePyramidStackContent.vue +47 -33
  103. package/components/pyramid/square-pyramid/{SquarePyramidStackTitle.vue → SquarePyramidStackHeading.vue} +49 -41
  104. package/components/pyramid/square-pyramid/style.css +48 -0
  105. package/components/style.css +35 -0
  106. package/layouts/core/arc-toc.vue +40 -45
  107. package/layouts/core/bg-center.vue +7 -6
  108. package/layouts/core/references.vue +84 -0
  109. package/layouts/core/style.css +47 -0
  110. package/layouts/shifting-heading/shifting-intro.vue +4 -13
  111. package/layouts/thanks/thanks.vue +5 -5
  112. package/package.json +7 -5
  113. package/style.css +17 -0
  114. package/uno.config.ts +1 -0
  115. package/utils/activateOnKeyboard.ts +14 -0
  116. package/utils/{chevronCard → card/chevron-card}/context.ts +1 -1
  117. package/utils/card/chevron-card/index.ts +1 -0
  118. package/utils/card/horizontal-card/context.ts +12 -0
  119. package/utils/{horizCard/createHorizCardGeometry.ts → card/horizontal-card/createHorizontalCardGeometry.ts} +10 -45
  120. package/utils/card/horizontal-card/index.ts +2 -0
  121. package/utils/card/vertical-card/context.ts +19 -0
  122. package/utils/{vertCard/createVertCardGeometry.ts → card/vertical-card/createVerticalCardGeometry.ts} +9 -130
  123. package/utils/card/vertical-card/index.ts +2 -0
  124. package/utils/colors.ts +93 -0
  125. package/utils/{arcComparison → comparisons/arc-comparison}/context.ts +0 -11
  126. package/utils/{arcComparison → comparisons/arc-comparison}/createArcComparisonGeometry.ts +1 -1
  127. package/utils/comparisons/arc-comparison/resolveArcComparisonItems.ts +33 -0
  128. package/utils/comparisons/table-comparison/constants.ts +47 -0
  129. package/utils/{tableComparison → comparisons/table-comparison}/context.ts +2 -2
  130. package/utils/{arcOrbit → core/arc-orbit}/resolveArcOrbitItems.ts +11 -15
  131. package/utils/{defenseInDepth/arcDid → defense-in-depth/arc-defense-in-depth}/context.ts +34 -31
  132. package/utils/{defenseInDepth/arcDid/createArcDiDGeometry.ts → defense-in-depth/arc-defense-in-depth/createArcDefenseInDepthGeometry.ts} +69 -39
  133. package/utils/{defenseInDepth/arcDid → defense-in-depth/arc-defense-in-depth}/types.ts +39 -35
  134. package/utils/defense-in-depth/shared/colors.ts +51 -0
  135. package/utils/defense-in-depth/shared/constants.ts +22 -0
  136. package/utils/{defenseInDepth → defense-in-depth}/shared/types.ts +0 -5
  137. package/utils/facets/tetrad/rectangle-orbit-tetrad/context.ts +31 -0
  138. package/utils/{rectOrbitTetrad/createRectOrbitTetradGeometry.ts → facets/tetrad/rectangle-orbit-tetrad/createRectangleOrbitTetradGeometry.ts} +5 -104
  139. package/utils/facets/tetrad/rectangle-orbit-tetrad/index.ts +3 -0
  140. package/utils/{rectOrbitTetrad/resolveRectOrbitTetradItems.ts → facets/tetrad/rectangle-orbit-tetrad/resolveRectangleOrbitTetradItems.ts} +41 -49
  141. package/utils/{arrowTriad → facets/triad/arrow-triad}/resolveArrowTriadItems.ts +27 -28
  142. package/utils/{gearTriad → facets/triad/gear-triad}/context.ts +5 -5
  143. package/utils/{gearTriad → facets/triad/gear-triad}/createGearTriadGeometry.ts +2 -0
  144. package/utils/{gearTriad → facets/triad/gear-triad}/resolveGearTriadItems.ts +23 -24
  145. package/utils/facets/triad/hexagon-triad/context.ts +25 -0
  146. package/utils/{hexTriad/createHexTriadGeometry.ts → facets/triad/hexagon-triad/createHexagonTriadGeometry.ts} +11 -27
  147. package/utils/facets/triad/hexagon-triad/index.ts +3 -0
  148. package/utils/facets/triad/hexagon-triad/resolveHexagonTriadItems.ts +60 -0
  149. package/utils/{shiftingHeading → layouts/shifting-heading}/collectShiftingIntroNodes.ts +1 -0
  150. package/utils/layouts/table-of-contents/calculateTocCenterAlignmentOffset.ts +17 -0
  151. package/utils/{tableOfContents → layouts/table-of-contents}/calculateTocMarkerPositions.ts +0 -12
  152. package/utils/{tableOfContents → layouts/table-of-contents}/createTocConnectorPath.ts +11 -5
  153. package/utils/{mergeUno → merge-uno}/classifyVisual.ts +1 -1
  154. package/utils/{mergeUno → merge-uno}/collectClassNames.ts +9 -3
  155. package/utils/process/arc-arrow-process/resolveArcArrowProcessItems.ts +180 -0
  156. package/utils/pyramid/circular-pyramid/context.ts +1 -4
  157. package/utils/pyramid/circular-pyramid/createCircularPyramidGeometry.ts +6 -10
  158. package/utils/pyramid/shared/colors.ts +33 -83
  159. package/utils/pyramid/shared/constants.ts +2 -2
  160. package/utils/pyramid/shared/types.ts +0 -5
  161. package/utils/pyramid/square-pyramid/context.ts +1 -4
  162. package/utils/pyramid/square-pyramid/createSquarePyramidGeometry.ts +6 -10
  163. package/utils/useDiagramAutoScale.ts +8 -6
  164. package/utils/useMergedUnoAttrs.ts +9 -5
  165. package/components/card/chevron-card/ChevronCardHeading.vue +0 -39
  166. package/components/card/horiz-card/HorizCardHeading.vue +0 -47
  167. package/components/card/vert-card/VertCardHeading.vue +0 -68
  168. package/components/card/vert-card/VertCardTitle.vue +0 -76
  169. package/components/comparisons/arc-comparison/ArcComparisonContents.vue +0 -17
  170. package/components/comparisons/arc-comparison/ArcComparisonTitle.vue +0 -29
  171. package/components/core/arc-orbit/ArcOrbitContents.vue +0 -18
  172. package/components/core/arc-orbit/ArcOrbitTitle.vue +0 -50
  173. package/components/defense-in-depth/arc-did/ArcDiDLayer.vue +0 -321
  174. package/components/defense-in-depth/arc-did/ArcDiDLayerParts.vue +0 -11
  175. package/components/facets/tetrad/rect-orbit-tetrad/RectOrbitTetradCenter.vue +0 -53
  176. package/components/facets/tetrad/rect-orbit-tetrad/RectOrbitTetradContent.vue +0 -39
  177. package/components/facets/tetrad/rect-orbit-tetrad/RectOrbitTetradHeading.vue +0 -44
  178. package/components/facets/triad/gear-triad/GearTriadContents.vue +0 -111
  179. package/components/facets/triad/gear-triad/GearTriadDescription.vue +0 -38
  180. package/components/facets/triad/hex-triad/HexTriadCenterBadge.vue +0 -51
  181. package/components/facets/triad/hex-triad/HexTriadContent.vue +0 -20
  182. package/components/facets/triad/hex-triad/HexTriadHeading.vue +0 -28
  183. package/layouts/core/table-of-contents.vue +0 -30
  184. package/utils/arcArrowProcess/resolveArcArrowProcessItems.ts +0 -189
  185. package/utils/arcComparison/resolveArcComparisonItems.ts +0 -102
  186. package/utils/chevronCard/createChevronCardGeometry.ts +0 -48
  187. package/utils/chevronCard/index.ts +0 -2
  188. package/utils/defenseInDepth/arcDid/index.ts +0 -3
  189. package/utils/defenseInDepth/index.ts +0 -2
  190. package/utils/defenseInDepth/shared/colors.ts +0 -121
  191. package/utils/defenseInDepth/shared/constants.ts +0 -14
  192. package/utils/defenseInDepth/shared/index.ts +0 -3
  193. package/utils/hexTriad/context.ts +0 -25
  194. package/utils/hexTriad/index.ts +0 -3
  195. package/utils/hexTriad/resolveHexTriadItems.ts +0 -63
  196. package/utils/horizCard/context.ts +0 -13
  197. package/utils/horizCard/index.ts +0 -2
  198. package/utils/pyramid/index.ts +0 -3
  199. package/utils/rectOrbitTetrad/context.ts +0 -31
  200. package/utils/rectOrbitTetrad/index.ts +0 -3
  201. package/utils/tableComparison/constants.ts +0 -72
  202. package/utils/tableOfContents/calculateTocCenterAlignmentOffset.ts +0 -11
  203. package/utils/vertCard/context.ts +0 -18
  204. package/utils/vertCard/index.ts +0 -2
  205. package/utils/{arcComparison → comparisons/arc-comparison}/index.ts +0 -0
  206. package/utils/{tableComparison → comparisons/table-comparison}/index.ts +0 -0
  207. package/utils/{arcOrbit → core/arc-orbit}/context.ts +0 -0
  208. package/utils/{arcOrbit → core/arc-orbit}/createArcOrbitGeometry.ts +0 -0
  209. package/utils/{arcOrbit → core/arc-orbit}/index.ts +0 -0
  210. package/utils/{arrowTriad → facets/triad/arrow-triad}/context.ts +0 -0
  211. package/utils/{arrowTriad → facets/triad/arrow-triad}/createArrowTriadGeometry.ts +0 -0
  212. package/utils/{arrowTriad → facets/triad/arrow-triad}/index.ts +0 -0
  213. package/utils/{gearTriad → facets/triad/gear-triad}/index.ts +0 -0
  214. package/utils/{tableOfContents → layouts/table-of-contents}/calculateUniformTocArticleWidth.ts +0 -0
  215. package/utils/{tableOfContents → layouts/table-of-contents}/createTocArcPath.ts +0 -0
  216. package/utils/{tableOfContents → layouts/table-of-contents}/index.ts +0 -0
  217. package/utils/{mergeUno → merge-uno}/classifyLayout.ts +0 -0
  218. package/utils/{mergeUno → merge-uno}/classifySimple.ts +0 -0
  219. package/utils/{mergeUno → merge-uno}/classifyTypography.ts +0 -0
  220. package/utils/{mergeUno → merge-uno}/classifyUtility.ts +0 -0
  221. package/utils/{mergeUno → merge-uno}/index.ts +0 -0
  222. package/utils/{mergeUno → merge-uno}/mergeClassValues.ts +0 -0
  223. package/utils/{mergeUno → merge-uno}/splitVariantScope.ts +1 -1
  224. package/utils/{mergeUno → merge-uno}/types.ts +0 -0
  225. package/utils/{arcArrowProcess → process/arc-arrow-process}/context.ts +1 -1
  226. /package/utils/{arcArrowProcess → process/arc-arrow-process}/createArcArrowProcessGeometry.ts +0 -0
  227. /package/utils/{arcArrowProcess → process/arc-arrow-process}/index.ts +0 -0
@@ -16,18 +16,16 @@ import {
16
16
  DEFAULT_CIRCULAR_PYRAMID_STACK_COLORS,
17
17
  } from '../../../utils/pyramid/circular-pyramid';
18
18
  import { PYRAMID_DOT_GAP_PX } from '../../../utils/pyramid/shared';
19
- import CircularPyramidStackContent from './CircularPyramidStackContent.vue';
20
- import CircularPyramidStackTitle from './CircularPyramidStackTitle.vue';
19
+ import { useMergedUnoAttrs } from '../../../utils/useMergedUnoAttrs';
21
20
 
22
21
  defineOptions({
23
22
  name: 'CircularPyramidStack',
23
+ inheritAttrs: false,
24
24
  });
25
25
 
26
26
  export interface ICircularPyramidStackProps {
27
27
  readonly index?: number;
28
28
  readonly step?: string | number;
29
- readonly title?: string;
30
- readonly content?: string;
31
29
  readonly color?: string;
32
30
  readonly active?: boolean;
33
31
  readonly connectorWidth?: number;
@@ -36,8 +34,6 @@ export interface ICircularPyramidStackProps {
36
34
  const props = withDefaults(defineProps<ICircularPyramidStackProps>(), {
37
35
  index: undefined,
38
36
  step: undefined,
39
- title: undefined,
40
- content: undefined,
41
37
  color: undefined,
42
38
  active: undefined,
43
39
  connectorWidth: undefined,
@@ -56,13 +52,16 @@ interface INamedComponent {
56
52
  function hasComponentName(type: unknown, targetName: string): boolean {
57
53
  if (typeof type === 'object' && type !== null) {
58
54
  const comp = type as INamedComponent['type'];
55
+
59
56
  return comp?.name === targetName || comp?.displayName === targetName;
60
57
  }
58
+
61
59
  return false;
62
60
  }
63
61
 
64
62
  function flattenVNodes(nodes: VNode[]): VNode[] {
65
63
  const result: VNode[] = [];
64
+
66
65
  for (const node of nodes) {
67
66
  if (node.type === Fragment && Array.isArray(node.children)) {
68
67
  result.push(...flattenVNodes(node.children as VNode[]));
@@ -70,6 +69,7 @@ function flattenVNodes(nodes: VNode[]): VNode[] {
70
69
  result.push(node);
71
70
  }
72
71
  }
72
+
73
73
  return result;
74
74
  }
75
75
 
@@ -77,12 +77,13 @@ const defaultNodes = computed(() => {
77
77
  if (!slots.default) {
78
78
  return [];
79
79
  }
80
+
80
81
  return flattenVNodes(slots.default());
81
82
  });
82
83
 
83
84
  const slottedTitle = computed(() => {
84
85
  return defaultNodes.value.find((node) =>
85
- hasComponentName(node.type, 'CircularPyramidStackTitle'),
86
+ hasComponentName(node.type, 'CircularPyramidStackHeading'),
86
87
  );
87
88
  });
88
89
 
@@ -108,6 +109,7 @@ const resolvedIndex = computed<number>(() => {
108
109
  if (props.index !== undefined) {
109
110
  return Number(props.index);
110
111
  }
112
+
111
113
  return registration?.index.value ?? 0;
112
114
  });
113
115
 
@@ -115,9 +117,11 @@ const isActive = computed<boolean>(() => {
115
117
  if (props.active !== undefined) {
116
118
  return props.active;
117
119
  }
120
+
118
121
  if (!rootContext) {
119
122
  return false;
120
123
  }
124
+
121
125
  return rootContext.activeIndex.value === resolvedIndex.value;
122
126
  });
123
127
 
@@ -125,6 +129,7 @@ const resolvedStep = computed(() => {
125
129
  if (props.step !== undefined) {
126
130
  return props.step;
127
131
  }
132
+
128
133
  return String(resolvedIndex.value + 1).padStart(2, '0');
129
134
  });
130
135
 
@@ -132,6 +137,7 @@ const layerGeometry = computed(() => {
132
137
  if (!rootContext) {
133
138
  return undefined;
134
139
  }
140
+
135
141
  return rootContext.geo.value.layers[resolvedIndex.value];
136
142
  });
137
143
 
@@ -139,28 +145,25 @@ const posY = computed(() => {
139
145
  if (!layerGeometry.value) {
140
146
  return 0;
141
147
  }
148
+
142
149
  const geo = layerGeometry.value;
150
+
143
151
  return (
144
152
  geo.slabCenterY ??
145
153
  Number((geo.cy + (geo.cylinderHeight ?? 0) / 2).toFixed(2))
146
154
  );
147
155
  });
148
156
 
149
- const discRadiusX = computed(() => {
150
- if (!layerGeometry.value) {
151
- return 140;
152
- }
153
- return layerGeometry.value.rx;
154
- });
155
-
156
157
  const DOT_POSITION_X = 210;
157
158
 
158
159
  const leftWidth = computed(() => {
159
160
  if (layerGeometry.value) {
160
161
  const rx = layerGeometry.value.rx;
161
162
  const cx = 465;
163
+
162
164
  return Math.max(180, Math.round(cx - rx - PYRAMID_DOT_GAP_PX));
163
165
  }
166
+
164
167
  return DOT_POSITION_X;
165
168
  });
166
169
 
@@ -172,26 +175,28 @@ const rightWingWidth = computed(() => {
172
175
  const cx = 465;
173
176
  const dotRightX = cx + rx + PYRAMID_DOT_GAP_PX;
174
177
  const containerW = 960;
178
+
175
179
  return Math.max(rightWidth.value + 20, Math.round(containerW - dotRightX));
176
180
  }
181
+
177
182
  return rightWidth.value + PYRAMID_DOT_GAP_PX;
178
183
  });
179
184
 
180
- const rightOffset = computed(
181
- () => rootContext?.contentRightOffsetPx.value ?? 0,
182
- );
183
-
184
185
  const resolvedColor = computed<string>(() => {
185
186
  if (effectiveColor.value) {
186
187
  return effectiveColor.value;
187
188
  }
189
+
190
+ const stackIndex =
191
+ Math.abs(resolvedIndex.value) %
192
+ DEFAULT_CIRCULAR_PYRAMID_STACK_COLORS.length;
193
+ const stackColor =
194
+ DEFAULT_CIRCULAR_PYRAMID_STACK_COLORS[stackIndex] ??
195
+ DEFAULT_CIRCULAR_PYRAMID_COLOR;
196
+
188
197
  return (
189
198
  rootContext?.getLayerColor(resolvedIndex.value) ??
190
- DEFAULT_CIRCULAR_PYRAMID_STACK_COLORS[
191
- Math.abs(resolvedIndex.value) %
192
- DEFAULT_CIRCULAR_PYRAMID_STACK_COLORS.length
193
- ] ??
194
- DEFAULT_CIRCULAR_PYRAMID_COLOR
199
+ `var(--alpha-circular-pyramid-stack-${stackIndex + 1}-color, ${stackColor})`
195
200
  );
196
201
  });
197
202
 
@@ -231,17 +236,23 @@ provide(CIRCULAR_PYRAMID_STACK_KEY, {
231
236
  connectorWidth,
232
237
  setActive: handleStackClick,
233
238
  });
239
+
240
+ const { className, forwardedAttrs } = useMergedUnoAttrs(
241
+ 'alpha-circular-pyramid-stack absolute inset-x-0 pointer-events-none select-none flex items-center justify-between',
242
+ );
234
243
  </script>
235
244
 
236
245
  <template>
237
246
  <div
238
- class="alpha-circular-pyramid-stack absolute inset-x-0 pointer-events-none select-none flex items-center justify-between"
239
- :class="[
240
- isActive
241
- ? 'alpha-circular-pyramid-stack--active'
242
- : 'alpha-circular-pyramid-stack--inactive',
243
- `alpha-circular-pyramid-stack--${resolvedIndex}`,
244
- ]"
247
+ v-bind="forwardedAttrs()"
248
+ :class="
249
+ className([
250
+ isActive
251
+ ? 'alpha-circular-pyramid-stack--active'
252
+ : 'alpha-circular-pyramid-stack--inactive',
253
+ `alpha-circular-pyramid-stack--${resolvedIndex}`,
254
+ ])
255
+ "
245
256
  :data-index="resolvedIndex"
246
257
  :data-active="isActive"
247
258
  :style="{
@@ -250,14 +261,17 @@ provide(CIRCULAR_PYRAMID_STACK_KEY, {
250
261
  }"
251
262
  >
252
263
  <!-- Left Wing: Title Pill (150px) -->
253
- <div
254
- class="alpha-circular-pyramid-stack__left flex-shrink-0 flex items-center justify-start pointer-events-auto cursor-pointer"
264
+ <button
265
+ type="button"
266
+ class="alpha-circular-pyramid-stack__left shrink-0 flex items-center justify-start pointer-events-auto cursor-pointer bg-transparent border-0 p-0 m-0 appearance-none"
267
+ :disabled="!rootContext?.interactive.value"
268
+ :aria-label="`Select stage ${resolvedStep}`"
255
269
  :class="[
256
270
  `alpha-circular-pyramid-stack__left--${resolvedIndex}`,
257
271
  { 'alpha-circular-pyramid-stack--animated': rootContext?.animation.value },
258
272
  ]"
259
273
  :style="{
260
- '--wing-delay': `calc(var(--circular-pyramid-start-delay, 0ms) + ${460 + stepIndex * 320}ms)`,
274
+ '--wing-delay': `calc(var(--alpha-circular-pyramid-start-delay, 0ms) + ${460 + stepIndex * 320}ms)`,
261
275
  width: `${leftWidth}px`,
262
276
  minWidth: `${leftWidth}px`,
263
277
  maxWidth: `${leftWidth}px`,
@@ -266,36 +280,28 @@ provide(CIRCULAR_PYRAMID_STACK_KEY, {
266
280
  @click="handleStackClick"
267
281
  >
268
282
  <component :is="slottedTitle" v-if="slottedTitle" />
269
- <CircularPyramidStackTitle
270
- v-else
271
- :step="resolvedStep"
272
- :title="props.title || `Stage ${resolvedStep}`"
273
- :connector-width="props.connectorWidth"
274
- />
275
- </div>
283
+ </button>
276
284
  <!-- Right Wing: Dot + Connector + Content Card (10px from slab) -->
277
- <div
278
- class="alpha-circular-pyramid-stack__right flex-shrink-0 flex items-center justify-end pointer-events-auto cursor-pointer"
285
+ <button
286
+ type="button"
287
+ class="alpha-circular-pyramid-stack__right shrink-0 flex items-center justify-end pointer-events-auto cursor-pointer bg-transparent border-0 p-0 m-0 appearance-none"
288
+ :disabled="!rootContext?.interactive.value"
289
+ :aria-label="`Select stage ${resolvedStep}`"
279
290
  :class="[
280
291
  `alpha-circular-pyramid-stack__right--${resolvedIndex}`,
281
292
  { 'alpha-circular-pyramid-stack--animated': rootContext?.animation.value },
282
293
  ]"
283
294
  :style="{
284
- '--wing-delay': `calc(var(--circular-pyramid-start-delay, 0ms) + ${470 + stepIndex * 320}ms)`,
295
+ '--wing-delay': `calc(var(--alpha-circular-pyramid-start-delay, 0ms) + ${470 + stepIndex * 320}ms)`,
285
296
  width: `${rightWingWidth}px`,
286
297
  minWidth: `${rightWidth}px`,
287
298
  maxWidth: `${rightWingWidth}px`,
288
- marginRight: rightOffset ? `${rightOffset}px` : undefined,
289
299
  opacity: !hasActiveStack || isActive ? 1 : 0.65,
290
300
  }"
291
301
  @click="handleStackClick"
292
302
  >
293
303
  <component :is="slottedContent" v-if="slottedContent" />
294
- <CircularPyramidStackContent
295
- v-else
296
- :content="props.content || 'Layer details and operational description.'"
297
- />
298
- </div>
304
+ </button>
299
305
  </div>
300
306
  </template>
301
307
 
@@ -307,11 +313,18 @@ provide(CIRCULAR_PYRAMID_STACK_KEY, {
307
313
 
308
314
  .alpha-circular-pyramid-stack__left,
309
315
  .alpha-circular-pyramid-stack__right {
310
- transition: opacity 0.3s ease, transform 0.3s ease;
316
+ transition:
317
+ opacity 0.3s ease,
318
+ transform 0.3s ease;
311
319
  }
312
320
 
313
321
  .alpha-circular-pyramid-stack--animated .alpha-circular-pyramid-stack__left {
314
- animation: alpha-pyramid-left-in 140ms cubic-bezier(0.16, 1, 0.3, 1) var(--wing-delay, calc(var(--circular-pyramid-start-delay, 0ms) + 460ms)) both;
322
+ animation: alpha-pyramid-left-in 140ms cubic-bezier(0.16, 1, 0.3, 1)
323
+ var(
324
+ --wing-delay,
325
+ calc(var(--alpha-circular-pyramid-start-delay, 0ms) + 460ms)
326
+ )
327
+ both;
315
328
  }
316
329
 
317
330
  @keyframes alpha-pyramid-left-in {
@@ -326,7 +339,12 @@ provide(CIRCULAR_PYRAMID_STACK_KEY, {
326
339
  }
327
340
 
328
341
  .alpha-circular-pyramid-stack--animated .alpha-circular-pyramid-stack__right {
329
- animation: alpha-pyramid-right-in 140ms cubic-bezier(0.16, 1, 0.3, 1) var(--wing-delay, calc(var(--circular-pyramid-start-delay, 0ms) + 470ms)) both;
342
+ animation: alpha-pyramid-right-in 140ms cubic-bezier(0.16, 1, 0.3, 1)
343
+ var(
344
+ --wing-delay,
345
+ calc(var(--alpha-circular-pyramid-start-delay, 0ms) + 470ms)
346
+ )
347
+ both;
330
348
  }
331
349
 
332
350
  @keyframes alpha-pyramid-right-in {
@@ -6,19 +6,19 @@ import {
6
6
  CIRCULAR_PYRAMID_STACK_KEY,
7
7
  } from '../../../utils/pyramid/circular-pyramid';
8
8
  import { createPyramidConnectorPath } from '../../../utils/pyramid/shared';
9
+ import { useMergedUnoAttrs } from '../../../utils/useMergedUnoAttrs';
9
10
 
10
11
  defineOptions({
11
12
  name: 'CircularPyramidStackContent',
13
+ inheritAttrs: false,
12
14
  });
13
15
 
14
16
  export interface ICircularPyramidStackContentProps {
15
- readonly content?: string;
16
17
  readonly color?: string;
17
18
  readonly connectorWidth?: number;
18
19
  }
19
20
 
20
21
  const props = withDefaults(defineProps<ICircularPyramidStackContentProps>(), {
21
- content: undefined,
22
22
  color: undefined,
23
23
  connectorWidth: undefined,
24
24
  });
@@ -61,17 +61,15 @@ const stepIndex = computed(() => {
61
61
  return stackContext?.index.value ?? 0;
62
62
  });
63
63
 
64
- const palette = computed(() => {
65
- return rootContext?.palette.value;
66
- });
67
-
68
64
  const contentWidth = computed(() => rootContext?.contentWidthPx.value ?? 240);
69
65
 
70
66
  const deltaY = computed(() => {
71
67
  if (stackContext?.deltaY?.value !== undefined) {
72
68
  return stackContext.deltaY.value;
73
69
  }
70
+
74
71
  const idx = stackContext?.index.value ?? 0;
72
+
75
73
  return rootContext?.getCardDeltaY?.(idx) ?? 0;
76
74
  });
77
75
 
@@ -81,9 +79,11 @@ const connectorWidth = computed(() => {
81
79
  if (props.connectorWidth !== undefined) {
82
80
  return props.connectorWidth;
83
81
  }
82
+
84
83
  if (stackContext?.connectorWidth?.value !== undefined) {
85
84
  return stackContext.connectorWidth.value;
86
85
  }
86
+
87
87
  return measuredConnectorWidth.value || 40;
88
88
  });
89
89
 
@@ -102,9 +102,16 @@ const svgTop = computed(() => {
102
102
 
103
103
  const connectorPath = computed(() => {
104
104
  const w = connectorWidth.value;
105
+
105
106
  return createPyramidConnectorPath(
106
- { x: 0, y: 0 },
107
- { x: w, y: effectiveDeltaY.value },
107
+ {
108
+ x: 0,
109
+ y: 0,
110
+ },
111
+ {
112
+ x: w,
113
+ y: effectiveDeltaY.value,
114
+ },
108
115
  );
109
116
  });
110
117
 
@@ -113,25 +120,32 @@ const stackColor = computed(() => {
113
120
  props.color ??
114
121
  stackContext?.color?.value ??
115
122
  rootContext?.color.value ??
116
- '#3b82f6'
123
+ 'var(--alpha-circular-pyramid-stack-content-accent)'
117
124
  );
118
125
  });
126
+
127
+ const { className, forwardedAttrs } = useMergedUnoAttrs(() => [
128
+ 'alpha-circular-pyramid-stack-content rounded-xl p-2 px-2.5 text-[10px] leading-snug transition-all duration-300 border select-none box-border shrink-0',
129
+ isActive.value
130
+ ? 'alpha-circular-pyramid-stack-content--active bg-(--alpha-circular-pyramid-stack-content-border-active) text-(--alpha-circular-pyramid-stack-content-active)'
131
+ : 'alpha-circular-pyramid-stack-content--default bg-(--alpha-circular-pyramid-stack-content-border) text-(--alpha-circular-pyramid-stack-content)',
132
+ ]);
119
133
  </script>
120
134
 
121
135
  <template>
122
136
  <div
123
137
  class="alpha-circular-pyramid-stack-content-wrapper relative w-full flex items-center select-none overflow-visible"
124
138
  :style="{
125
- '--content-delay': `calc(var(--circular-pyramid-start-delay, 0ms) + ${470 + stepIndex * 320}ms)`,
139
+ '--content-delay': `calc(var(--alpha-circular-pyramid-start-delay, 0ms) + ${470 + stepIndex * 320}ms)`,
126
140
  }"
127
141
  >
128
142
  <!-- Scalable Line between Dot and Content Card (always at least 20px) -->
129
143
  <div
130
144
  ref="connectorRef"
131
- class="alpha-circular-pyramid-stack-content__connector flex-1 flex items-center min-w-[20px] pointer-events-none relative overflow-visible h-0"
145
+ class="alpha-circular-pyramid-stack-content__connector flex-1 flex items-center min-w-5 pointer-events-none relative overflow-visible h-0"
132
146
  >
133
147
  <div
134
- class="alpha-circular-pyramid-stack-content__dot absolute left-0 top-0 -translate-x-1/2 -translate-y-1/2 w-1.5 h-1.5 rounded-full flex-shrink-0 transition-all duration-300 pointer-events-auto"
148
+ class="alpha-circular-pyramid-stack-content__dot absolute left-0 top-0 -translate-x-1/2 -translate-y-1/2 w-1.5 h-1.5 rounded-full shrink-0 transition-all duration-300 pointer-events-auto"
135
149
  :class="{
136
150
  'alpha-circular-pyramid-stack-content__dot--animated': isAnimated,
137
151
  }"
@@ -139,13 +153,13 @@ const stackColor = computed(() => {
139
153
  backgroundColor: stackColor,
140
154
  boxShadow: isActive
141
155
  ? `0 0 6px ${stackColor}`
142
- : `0 0 2px ${stackColor}80`,
156
+ : `0 0 2px color-mix(in srgb, ${stackColor} 50%, transparent)`,
143
157
  }"
144
158
  />
145
159
  <!-- Straight horizontal line when deltaY is 0 -->
146
160
  <div
147
161
  v-if="!effectiveDeltaY"
148
- class="alpha-circular-pyramid-stack-content__line absolute left-0 top-0 w-full h-[1px] -translate-y-1/2 pointer-events-none transition-colors duration-300"
162
+ class="alpha-circular-pyramid-stack-content__line absolute left-0 top-0 w-full h-px -translate-y-1/2 pointer-events-none transition-colors duration-300"
149
163
  :class="{
150
164
  'alpha-circular-pyramid-stack-content__line--animated': isAnimated,
151
165
  }"
@@ -156,6 +170,7 @@ const stackColor = computed(() => {
156
170
  />
157
171
  <!-- Zigzag SVG connector when deltaY !== 0 -->
158
172
  <svg
173
+ aria-hidden="true"
159
174
  v-else
160
175
  class="alpha-circular-pyramid-stack-content__line-svg absolute left-0 pointer-events-none overflow-visible"
161
176
  :width="connectorWidth"
@@ -187,39 +202,30 @@ const stackColor = computed(() => {
187
202
  </div>
188
203
  <!-- Content Card -->
189
204
  <div
190
- class="alpha-circular-pyramid-stack-content rounded-xl p-2 px-2.5 transition-all duration-300 border select-none box-border flex-shrink-0"
191
- :class="[
192
- isActive
193
- ? 'alpha-circular-pyramid-stack-content--active'
194
- : 'alpha-circular-pyramid-stack-content--default',
195
- {
205
+ v-bind="forwardedAttrs()"
206
+ :class="
207
+ className({
196
208
  'alpha-circular-pyramid-stack-content--animated': isAnimated,
197
- },
198
- ]"
209
+ })
210
+ "
199
211
  :style="{
200
212
  width: `${contentWidth}px`,
201
213
  minWidth: `${contentWidth}px`,
202
214
  maxWidth: `${contentWidth}px`,
203
215
  boxSizing: 'border-box',
204
216
  borderColor: stackColor,
205
- backgroundColor: isActive
206
- ? 'rgba(255, 255, 255, 0.95)'
207
- : 'rgba(255, 255, 255, 0.85)',
208
217
  boxShadow: isActive
209
- ? `0 4px 14px ${stackColor}26`
218
+ ? `0 4px 14px color-mix(in srgb, ${stackColor} 15%, transparent)`
210
219
  : 'none',
211
220
  '--card-transform': deltaY ? `translateY(${deltaY}px)` : 'none',
212
221
  transform: deltaY ? `translateY(${deltaY}px)` : undefined,
213
222
  }"
214
223
  >
215
- <div
216
- class="text-[10px] leading-snug transition-colors duration-300 break-words line-clamp-3"
217
- :style="{
218
- color: isActive ? '#0f172a' : '#475569',
219
- }"
224
+ <p
225
+ class="text-[10px] transition-colors duration-300 wrap-break-word line-clamp-3"
220
226
  >
221
- <slot>{{ props.content }}</slot>
222
- </div>
227
+ <slot />
228
+ </p>
223
229
  </div>
224
230
  </div>
225
231
  </template>
@@ -234,7 +240,8 @@ const stackColor = computed(() => {
234
240
  }
235
241
 
236
242
  .alpha-circular-pyramid-stack-content__dot--animated {
237
- animation: alpha-pyramid-dot-pop 120ms cubic-bezier(0.16, 1, 0.3, 1) var(--content-delay) both;
243
+ animation: alpha-pyramid-dot-pop 120ms cubic-bezier(0.16, 1, 0.3, 1)
244
+ var(--content-delay) both;
238
245
  }
239
246
 
240
247
  @keyframes alpha-pyramid-dot-pop {
@@ -250,7 +257,8 @@ const stackColor = computed(() => {
250
257
 
251
258
  .alpha-circular-pyramid-stack-content__line--animated {
252
259
  transform-origin: left center;
253
- animation: alpha-pyramid-line-draw 500ms cubic-bezier(0.4, 0, 0.2, 1) calc(var(--content-delay) + 120ms) both;
260
+ animation: alpha-pyramid-line-draw 500ms cubic-bezier(0.4, 0, 0.2, 1)
261
+ calc(var(--content-delay) + 120ms) both;
254
262
  }
255
263
 
256
264
  @keyframes alpha-pyramid-line-draw {
@@ -270,7 +278,8 @@ const stackColor = computed(() => {
270
278
 
271
279
  .alpha-circular-pyramid-stack-content__line--svg-animated {
272
280
  stroke-dasharray: 1;
273
- animation: alpha-pyramid-svg-line-draw 500ms cubic-bezier(0.4, 0, 0.2, 1) calc(var(--content-delay) + 120ms) both;
281
+ animation: alpha-pyramid-svg-line-draw 500ms cubic-bezier(0.4, 0, 0.2, 1)
282
+ calc(var(--content-delay) + 120ms) both;
274
283
  }
275
284
 
276
285
  @keyframes alpha-pyramid-svg-line-draw {
@@ -289,7 +298,8 @@ const stackColor = computed(() => {
289
298
  }
290
299
 
291
300
  .alpha-circular-pyramid-stack-content--animated {
292
- animation: alpha-pyramid-card-in 240ms cubic-bezier(0.16, 1, 0.3, 1) calc(var(--content-delay) + 380ms) both;
301
+ animation: alpha-pyramid-card-in 240ms cubic-bezier(0.16, 1, 0.3, 1)
302
+ calc(var(--content-delay) + 380ms) both;
293
303
  }
294
304
 
295
305
  @keyframes alpha-pyramid-card-in {