@alphacifer/slidev-addon-theme 0.0.10 → 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 (225) 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-did/ArcDiD.vue → arc-defense-in-depth/ArcDefenseInDepth.vue} +167 -97
  50. package/components/defense-in-depth/arc-defense-in-depth/ArcDefenseInDepthLayer.vue +240 -0
  51. package/components/defense-in-depth/{arc-did/ArcDiDLayerTitle.vue → arc-defense-in-depth/ArcDefenseInDepthLayerHeading.vue} +27 -29
  52. package/components/defense-in-depth/{arc-did/ArcDiDLayerPart.vue → arc-defense-in-depth/ArcDefenseInDepthLayerPart.vue} +91 -39
  53. package/components/defense-in-depth/{arc-did/ArcDiDLayerSector.vue → arc-defense-in-depth/ArcDefenseInDepthLayerSector.vue} +37 -23
  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 +269 -170
  95. package/components/pyramid/circular-pyramid/CircularPyramidStack.vue +70 -52
  96. package/components/pyramid/circular-pyramid/CircularPyramidStackContent.vue +47 -37
  97. package/components/pyramid/circular-pyramid/{CircularPyramidStackTitle.vue → CircularPyramidStackHeading.vue} +49 -45
  98. package/components/pyramid/circular-pyramid/style.css +26 -0
  99. package/components/pyramid/square-pyramid/SquarePyramid.vue +191 -62
  100. package/components/pyramid/square-pyramid/SquarePyramidStack.vue +74 -49
  101. package/components/pyramid/square-pyramid/SquarePyramidStackContent.vue +47 -33
  102. package/components/pyramid/square-pyramid/{SquarePyramidStackTitle.vue → SquarePyramidStackHeading.vue} +49 -41
  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/{defenseInDepth/arcDid → defense-in-depth/arc-defense-in-depth}/context.ts +34 -31
  130. package/utils/{defenseInDepth/arcDid/createArcDiDGeometry.ts → defense-in-depth/arc-defense-in-depth/createArcDefenseInDepthGeometry.ts} +69 -39
  131. package/utils/{defenseInDepth/arcDid → defense-in-depth/arc-defense-in-depth}/types.ts +39 -35
  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/{defenseInDepth → defense-in-depth}/shared/types.ts +0 -5
  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 +2 -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 +8 -6
  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/defense-in-depth/arc-did/ArcDiDLayer.vue +0 -321
  172. package/components/defense-in-depth/arc-did/ArcDiDLayerParts.vue +0 -11
  173. package/components/facets/tetrad/rect-orbit-tetrad/RectOrbitTetradCenter.vue +0 -53
  174. package/components/facets/tetrad/rect-orbit-tetrad/RectOrbitTetradContent.vue +0 -39
  175. package/components/facets/tetrad/rect-orbit-tetrad/RectOrbitTetradHeading.vue +0 -44
  176. package/components/facets/triad/gear-triad/GearTriadContents.vue +0 -111
  177. package/components/facets/triad/gear-triad/GearTriadDescription.vue +0 -38
  178. package/components/facets/triad/hex-triad/HexTriadCenterBadge.vue +0 -51
  179. package/components/facets/triad/hex-triad/HexTriadContent.vue +0 -20
  180. package/components/facets/triad/hex-triad/HexTriadHeading.vue +0 -28
  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/defenseInDepth/arcDid/index.ts +0 -3
  187. package/utils/defenseInDepth/index.ts +0 -2
  188. package/utils/defenseInDepth/shared/colors.ts +0 -121
  189. package/utils/defenseInDepth/shared/constants.ts +0 -14
  190. package/utils/defenseInDepth/shared/index.ts +0 -3
  191. package/utils/hexTriad/context.ts +0 -25
  192. package/utils/hexTriad/index.ts +0 -3
  193. package/utils/hexTriad/resolveHexTriadItems.ts +0 -63
  194. package/utils/horizCard/context.ts +0 -13
  195. package/utils/horizCard/index.ts +0 -2
  196. package/utils/pyramid/index.ts +0 -3
  197. package/utils/rectOrbitTetrad/context.ts +0 -31
  198. package/utils/rectOrbitTetrad/index.ts +0 -3
  199. package/utils/tableComparison/constants.ts +0 -72
  200. package/utils/tableOfContents/calculateTocCenterAlignmentOffset.ts +0 -11
  201. package/utils/vertCard/context.ts +0 -18
  202. package/utils/vertCard/index.ts +0 -2
  203. package/utils/{arcComparison → comparisons/arc-comparison}/index.ts +0 -0
  204. package/utils/{tableComparison → comparisons/table-comparison}/index.ts +0 -0
  205. package/utils/{arcOrbit → core/arc-orbit}/context.ts +0 -0
  206. package/utils/{arcOrbit → core/arc-orbit}/createArcOrbitGeometry.ts +0 -0
  207. package/utils/{arcOrbit → core/arc-orbit}/index.ts +0 -0
  208. package/utils/{arrowTriad → facets/triad/arrow-triad}/context.ts +0 -0
  209. package/utils/{arrowTriad → facets/triad/arrow-triad}/createArrowTriadGeometry.ts +0 -0
  210. package/utils/{arrowTriad → facets/triad/arrow-triad}/index.ts +0 -0
  211. package/utils/{gearTriad → facets/triad/gear-triad}/index.ts +0 -0
  212. package/utils/{tableOfContents → layouts/table-of-contents}/calculateUniformTocArticleWidth.ts +0 -0
  213. package/utils/{tableOfContents → layouts/table-of-contents}/createTocArcPath.ts +0 -0
  214. package/utils/{tableOfContents → layouts/table-of-contents}/index.ts +0 -0
  215. package/utils/{mergeUno → merge-uno}/classifyLayout.ts +0 -0
  216. package/utils/{mergeUno → merge-uno}/classifySimple.ts +0 -0
  217. package/utils/{mergeUno → merge-uno}/classifyTypography.ts +0 -0
  218. package/utils/{mergeUno → merge-uno}/classifyUtility.ts +0 -0
  219. package/utils/{mergeUno → merge-uno}/index.ts +0 -0
  220. package/utils/{mergeUno → merge-uno}/mergeClassValues.ts +0 -0
  221. package/utils/{mergeUno → merge-uno}/splitVariantScope.ts +1 -1
  222. package/utils/{mergeUno → merge-uno}/types.ts +0 -0
  223. package/utils/{arcArrowProcess → process/arc-arrow-process}/context.ts +1 -1
  224. /package/utils/{arcArrowProcess → process/arc-arrow-process}/createArcArrowProcessGeometry.ts +0 -0
  225. /package/utils/{arcArrowProcess → process/arc-arrow-process}/index.ts +0 -0
@@ -8,39 +8,32 @@ import {
8
8
  type IGearTriadItem,
9
9
  type IResolvedGearTriadItem,
10
10
  resolveSingleGearTriadItem,
11
- type TGearTriadIcon,
12
- } from '../../../../utils/gearTriad';
13
- import GearTriadDescription from './GearTriadDescription.vue';
14
- import GearTriadHeading from './GearTriadHeading.vue';
11
+ } from '../../../../utils/facets/triad/gear-triad';
12
+ import { useMergedUnoAttrs } from '../../../../utils/useMergedUnoAttrs';
15
13
 
16
14
  defineOptions({
15
+ inheritAttrs: false,
17
16
  name: 'GearTriadCallout',
18
17
  });
19
18
 
20
19
  export interface IGearTriadCalloutProps {
21
20
  readonly id?: string | number;
22
21
  readonly index?: number;
23
- readonly icon?: TGearTriadIcon;
24
22
  readonly color?: string;
25
23
  readonly depthColor?: string;
26
24
  readonly cardBg?: string;
27
25
  readonly textColor?: string;
28
26
  readonly titleColor?: string;
29
- readonly title?: string;
30
- readonly description?: string;
31
27
  }
32
28
 
33
29
  const props = withDefaults(defineProps<IGearTriadCalloutProps>(), {
34
30
  id: undefined,
35
31
  index: undefined,
36
- icon: undefined,
37
32
  color: undefined,
38
33
  depthColor: undefined,
39
34
  cardBg: undefined,
40
35
  textColor: undefined,
41
36
  titleColor: undefined,
42
- title: undefined,
43
- description: undefined,
44
37
  });
45
38
 
46
39
  interface INamedComponent {
@@ -69,12 +62,9 @@ const overrideProps = computed<IGearTriadItem>(() => {
69
62
  id: props.id,
70
63
  color: props.color,
71
64
  depthColor: props.depthColor,
72
- icon: props.icon,
73
65
  cardBg: props.cardBg,
74
66
  textColor: props.textColor,
75
67
  titleColor: props.titleColor,
76
- title: props.title,
77
- description: props.description,
78
68
  };
79
69
 
80
70
  return Object.fromEntries(
@@ -146,7 +136,7 @@ const headingNode = computed(() => {
146
136
 
147
137
  const descriptionNode = computed(() => {
148
138
  return defaultNodes.value.find((node) => {
149
- return hasComponentName(node.type, 'GearTriadDescription');
139
+ return hasComponentName(node.type, 'GearTriadContent');
150
140
  });
151
141
  });
152
142
 
@@ -163,7 +153,7 @@ const otherSlottedNodes = computed(() => {
163
153
  return (
164
154
  isValidSlottedNode(node) &&
165
155
  !hasComponentName(node.type, 'GearTriadHeading') &&
166
- !hasComponentName(node.type, 'GearTriadDescription')
156
+ !hasComponentName(node.type, 'GearTriadContent')
167
157
  );
168
158
  });
169
159
  });
@@ -172,15 +162,16 @@ const positionStyle = computed(() => {
172
162
  switch (resolvedIndex.value) {
173
163
  case 0: {
174
164
  // Option 1: Left side, vertically level with Cyan petal
175
- return 'right: calc(50% + 185px); top: calc(50% - 115px); text-align: right; width: 250px;';
165
+ return 'right: calc(50% + 185px); top: calc(50% - 115px);';
176
166
  }
167
+
177
168
  case 1: {
178
169
  // Option 2: Right side, vertically level with Orange petal
179
- return 'left: calc(50% + 185px); top: calc(50% - 115px); text-align: left; width: 250px;';
170
+ return 'left: calc(50% + 185px); top: calc(50% - 115px);';
180
171
  }
181
172
  case 2: {
182
173
  // Option 3: Bottom centered, below Pink teeth
183
- return 'left: 50%; transform: translateX(-50%); top: calc(50% + 155px); text-align: center; width: 280px;';
174
+ return 'left: 50%; top: calc(50% + 155px);';
184
175
  }
185
176
  default: {
186
177
  return '';
@@ -191,74 +182,88 @@ const positionStyle = computed(() => {
191
182
  const animation = computed(() => {
192
183
  return rootContext?.animation?.value ?? true;
193
184
  });
185
+
186
+ const { className, forwardedAttrs } = useMergedUnoAttrs(() => {
187
+ const layoutClasses =
188
+ resolvedIndex.value === 0
189
+ ? 'text-right w-[250px]'
190
+ : resolvedIndex.value === 1
191
+ ? 'text-left w-[250px]'
192
+ : 'text-center w-[280px]';
193
+ const bgClass = activeItem.value.cardBg
194
+ ? 'bg-(--alpha-gear-triad-valley)'
195
+ : 'bg-transparent';
196
+ const pointerClass = rootContext?.isShifted.value
197
+ ? 'pointer-events-none'
198
+ : 'pointer-events-auto';
199
+
200
+ return `alpha-gear-triad-callout absolute flex flex-col z-10 font-sans select-none box-border transition-all duration-500 ease-out ${layoutClasses} ${bgClass} ${pointerClass}`;
201
+ });
194
202
  </script>
195
203
 
196
204
  <template>
197
205
  <div
198
206
  v-if="resolvedIndex < 3"
207
+ v-bind="forwardedAttrs()"
199
208
  :class="[
200
- 'alpha-gear-triad-callout absolute flex flex-col z-10 select-none box-border pointer-events-auto transition-all duration-500 ease-out',
209
+ className(),
201
210
  `alpha-gear-triad-callout--${resolvedIndex}`,
202
211
  { 'alpha-gear-triad-callout--animated': animation },
203
212
  { 'alpha-gear-triad-callout--shifted': rootContext?.isShifted.value },
204
213
  ]"
205
214
  :style="[
206
215
  positionStyle,
207
- {
208
- backgroundColor: activeItem.cardBg ?? 'transparent',
209
- fontFamily:
210
- 'ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \'Segoe UI\', Roboto, sans-serif',
211
- },
216
+ activeItem.cardBg
217
+ ? { '--alpha-gear-triad-valley': activeItem.cardBg }
218
+ : undefined,
212
219
  ]"
213
220
  >
214
221
  <!-- Title Slot / Heading -->
215
- <slot name="title">
216
- <component :is="headingNode" v-if="headingNode" />
217
- <GearTriadHeading v-else :color="activeItem.titleColor">
218
- {{ activeItem.title }}
219
- </GearTriadHeading>
220
- </slot>
221
- <!-- Description Slot -->
222
- <slot name="description">
223
- <component :is="descriptionNode" v-if="descriptionNode" />
224
- <GearTriadDescription v-else :color="activeItem.textColor">
225
- {{ activeItem.description }}
226
- </GearTriadDescription>
227
- </slot>
222
+ <component :is="headingNode" v-if="headingNode" />
223
+ <component :is="descriptionNode" v-if="descriptionNode" />
228
224
  <!-- Other Slotted Nodes -->
229
- <component
230
- :is="node"
231
- v-for="(node, idx) in otherSlottedNodes"
232
- :key="idx"
233
- />
225
+ <component :is="node" v-for="(node, idx) in otherSlottedNodes" :key="idx" />
234
226
  </div>
235
227
  </template>
236
228
 
237
229
  <style scoped>
238
- .alpha-gear-triad-callout--animated.alpha-gear-triad-callout--0 {
239
- animation: gear-triad-callout-fade 450ms cubic-bezier(0.16, 1, 0.3, 1) calc(var(--gear-start-delay, 0ms) + 150ms) both;
230
+ .alpha-gear-triad-callout--2 {
231
+ transform: translateX(-50%);
232
+ }
233
+
234
+ .alpha-gear-triad-callout--animated:not(
235
+ .alpha-gear-triad-callout--shifted
236
+ ).alpha-gear-triad-callout--0 {
237
+ animation: gear-triad-callout-fade 450ms cubic-bezier(0.16, 1, 0.3, 1)
238
+ calc(var(--gear-start-delay, 0ms) + 150ms) both;
240
239
  }
241
240
 
242
- .alpha-gear-triad-callout--animated.alpha-gear-triad-callout--1 {
243
- animation: gear-triad-callout-fade 450ms cubic-bezier(0.16, 1, 0.3, 1) calc(var(--gear-start-delay, 0ms) + 300ms) both;
241
+ .alpha-gear-triad-callout--animated:not(
242
+ .alpha-gear-triad-callout--shifted
243
+ ).alpha-gear-triad-callout--1 {
244
+ animation: gear-triad-callout-fade 450ms cubic-bezier(0.16, 1, 0.3, 1)
245
+ calc(var(--gear-start-delay, 0ms) + 300ms) both;
244
246
  }
245
247
 
246
- .alpha-gear-triad-callout--animated.alpha-gear-triad-callout--2 {
247
- animation: gear-triad-callout-fade-center 450ms cubic-bezier(0.16, 1, 0.3, 1) calc(var(--gear-start-delay, 0ms) + 450ms) both;
248
+ .alpha-gear-triad-callout--animated:not(
249
+ .alpha-gear-triad-callout--shifted
250
+ ).alpha-gear-triad-callout--2 {
251
+ animation: gear-triad-callout-fade-center 450ms cubic-bezier(0.16, 1, 0.3, 1)
252
+ calc(var(--gear-start-delay, 0ms) + 450ms) both;
248
253
  }
249
254
 
250
255
  .alpha-gear-triad-callout--shifted {
251
- opacity: 0 !important;
252
- pointer-events: none !important;
253
- transform: rotate(-25deg) scale(0.85) !important;
256
+ opacity: 0;
257
+ pointer-events: none;
258
+ transform: rotate(-25deg) scale(0.85);
254
259
  }
255
260
 
256
261
  .alpha-gear-triad-callout--shifted.alpha-gear-triad-callout--1 {
257
- transform: rotate(25deg) scale(0.85) !important;
262
+ transform: rotate(25deg) scale(0.85);
258
263
  }
259
264
 
260
265
  .alpha-gear-triad-callout--shifted.alpha-gear-triad-callout--2 {
261
- transform: translateX(-50%) rotate(-15deg) scale(0.85) !important;
266
+ transform: translateX(-50%) rotate(-15deg) scale(0.85);
262
267
  }
263
268
 
264
269
  @keyframes gear-triad-callout-fade {
@@ -1,7 +1,9 @@
1
1
  <script setup lang="ts">
2
+ import { useMergedUnoAttrs } from '../../../../utils/useMergedUnoAttrs';
2
3
  import GearTriadIcon from './GearTriadIcon.vue';
3
4
 
4
5
  defineOptions({
6
+ inheritAttrs: false,
5
7
  name: 'GearTriadCenter',
6
8
  });
7
9
 
@@ -16,16 +18,19 @@ const props = withDefaults(defineProps<IGearTriadCenterProps>(), {
16
18
  icon: 'gear',
17
19
  iconSize: 42,
18
20
  });
21
+
22
+ const { className, forwardedAttrs } = useMergedUnoAttrs(
23
+ 'alpha-gear-triad-center absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 z-20 rounded-full flex items-center justify-center bg-linear-145 from-(--alpha-gear-triad-center-bg-start) to-(--alpha-gear-triad-center-bg-end) shadow-(--alpha-gear-triad-center-shadow) pointer-events-auto select-none',
24
+ );
19
25
  </script>
20
26
 
21
27
  <template>
22
28
  <div
23
- class="alpha-gear-triad-center absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 z-20 rounded-full flex items-center justify-center pointer-events-auto select-none"
29
+ v-bind="forwardedAttrs()"
30
+ :class="className()"
24
31
  :style="{
25
32
  width: `${props.radius * 2}px`,
26
33
  height: `${props.radius * 2}px`,
27
- background: 'linear-gradient(145deg, #ffffff 0%, #f1f5f9 100%)',
28
- boxShadow: '0 6px 20px -2px rgba(0, 0, 0, 0.22), 0 2px 6px -1px rgba(0, 0, 0, 0.12)',
29
34
  }"
30
35
  >
31
36
  <slot>
@@ -33,7 +38,7 @@ const props = withDefaults(defineProps<IGearTriadCenterProps>(), {
33
38
  v-if="props.icon"
34
39
  :icon="props.icon"
35
40
  :size="props.iconSize"
36
- color="#0f172a"
41
+ color="var(--alpha-gear-triad-center-icon)"
37
42
  :stroke-width="1.75"
38
43
  />
39
44
  </slot>
@@ -1,58 +1,43 @@
1
1
  <script setup lang="ts">
2
2
  import { computed, inject } from 'vue';
3
3
 
4
- import { GEAR_TRIAD_CONTENTS_KEY } from '../../../../utils/gearTriad';
4
+ import { GEAR_TRIAD_CALLOUT_KEY } from '../../../../utils/facets/triad/gear-triad';
5
+ import { useMergedUnoAttrs } from '../../../../utils/useMergedUnoAttrs';
5
6
 
6
7
  defineOptions({
8
+ inheritAttrs: false,
7
9
  name: 'GearTriadContent',
8
10
  });
9
11
 
10
12
  export interface IGearTriadContentProps {
11
- readonly step?: string | number;
12
- readonly option?: number;
13
+ readonly color?: string;
13
14
  }
14
15
 
15
16
  const props = withDefaults(defineProps<IGearTriadContentProps>(), {
16
- step: undefined,
17
- option: undefined,
17
+ color: undefined,
18
18
  });
19
19
 
20
- const contentsContext = inject(GEAR_TRIAD_CONTENTS_KEY, undefined);
20
+ const calloutContext = inject(GEAR_TRIAD_CALLOUT_KEY, undefined);
21
21
 
22
- const registration = contentsContext
23
- ? contentsContext.registerContent(props.option)
24
- : undefined;
25
-
26
- const isVisible = computed(() => {
27
- if (props.option !== undefined && contentsContext) {
28
- return props.option === contentsContext.activeOptionIndex.value + 1;
29
- }
30
- return true;
22
+ const contentColor = computed(() => {
23
+ return props.color ?? calloutContext?.item.value.textColor ?? undefined;
31
24
  });
32
25
 
33
- const resolvedStep = computed(() => {
34
- if (props.step !== undefined) {
35
- if (typeof props.step === 'number') {
36
- return String(props.step).padStart(2, '0');
37
- }
38
- return String(props.step);
39
- }
40
-
41
- const idx = (registration?.index ?? 0) + 1;
42
- return String(idx).padStart(2, '0');
43
- });
26
+ const { className, forwardedAttrs } = useMergedUnoAttrs(
27
+ 'alpha-gear-triad-content font-sans leading-[1.45] font-normal text-(--alpha-gear-triad-content) select-none',
28
+ );
44
29
  </script>
45
30
 
46
31
  <template>
47
- <div
48
- v-if="isVisible"
49
- class="alpha-gear-triad-content flex items-start gap-4 select-none"
32
+ <p
33
+ v-bind="forwardedAttrs()"
34
+ :class="className()"
35
+ :style="
36
+ contentColor && !contentColor.includes('--alpha-gear-triad-content')
37
+ ? { '--alpha-gear-triad-content': contentColor }
38
+ : undefined
39
+ "
50
40
  >
51
- <span class="alpha-gear-triad-content__step font-bold text-2xl text-slate-700 w-10 flex-shrink-0 leading-tight font-sans tracking-tight">
52
- {{ resolvedStep }}
53
- </span>
54
- <div class="alpha-gear-triad-content__body flex-1 text-[0.92rem] text-slate-600 font-normal font-sans leading-[1.45]">
55
- <slot />
56
- </div>
57
- </div>
41
+ <slot />
42
+ </p>
58
43
  </template>
@@ -0,0 +1,92 @@
1
+ <script setup lang="ts">
2
+ import { computed, inject } from 'vue';
3
+
4
+ import {
5
+ GEAR_TRIAD_DETAILS_KEY,
6
+ GEAR_TRIAD_ROOT_KEY,
7
+ } from '../../../../utils/facets/triad/gear-triad';
8
+ import { useMergedUnoAttrs } from '../../../../utils/useMergedUnoAttrs';
9
+
10
+ defineOptions({
11
+ inheritAttrs: false,
12
+ name: 'GearTriadDetail',
13
+ });
14
+
15
+ export interface IGearTriadDetailProps {
16
+ readonly step?: string | number;
17
+ readonly option?: number;
18
+ readonly color?: string;
19
+ }
20
+
21
+ const props = withDefaults(defineProps<IGearTriadDetailProps>(), {
22
+ step: undefined,
23
+ option: undefined,
24
+ color: undefined,
25
+ });
26
+
27
+ const rootContext = inject(GEAR_TRIAD_ROOT_KEY, undefined);
28
+ const detailsContext = inject(GEAR_TRIAD_DETAILS_KEY, undefined);
29
+
30
+ const registration = detailsContext
31
+ ? detailsContext.registerContent(props.option)
32
+ : undefined;
33
+
34
+ const isVisible = computed(() => {
35
+ if (props.option !== undefined && detailsContext) {
36
+ return props.option === detailsContext.activeOptionIndex.value + 1;
37
+ }
38
+
39
+ return true;
40
+ });
41
+
42
+ const resolvedStep = computed(() => {
43
+ if (props.step !== undefined) {
44
+ if (typeof props.step === 'number') {
45
+ return String(props.step).padStart(2, '0');
46
+ }
47
+
48
+ return String(props.step);
49
+ }
50
+
51
+ const idx = (registration?.index ?? 0) + 1;
52
+ return String(idx).padStart(2, '0');
53
+ });
54
+
55
+ const stepColor = computed(() => {
56
+ if (props.color) {
57
+ return props.color;
58
+ }
59
+
60
+ if (props.option !== undefined && rootContext?.items.value) {
61
+ const item = rootContext.items.value[props.option - 1];
62
+ if (item?.color) {
63
+ return item.color;
64
+ }
65
+ }
66
+
67
+ return (
68
+ detailsContext?.activeItem.value.color ??
69
+ 'var(--alpha-gear-triad-detail-number)'
70
+ );
71
+ });
72
+
73
+ const { className, forwardedAttrs } = useMergedUnoAttrs(
74
+ 'alpha-gear-triad-detail flex items-center gap-4 select-none',
75
+ );
76
+ </script>
77
+
78
+ <template>
79
+ <div v-if="isVisible" v-bind="forwardedAttrs()" :class="className()">
80
+ <span
81
+ class="alpha-gear-triad-detail__step font-bold text-2xl w-10 shrink-0 leading-tight font-sans tracking-tight"
82
+ :style="{ color: stepColor }"
83
+ >
84
+ {{ resolvedStep }}
85
+ </span>
86
+ <p
87
+ class="alpha-gear-triad-detail__body flex-1 text-(--alpha-gear-triad-detail) font-normal font-sans leading-[1.45]"
88
+ >
89
+ <slot />
90
+ </p>
91
+ </div>
92
+ </template>
@@ -0,0 +1,169 @@
1
+ <script setup lang="ts">
2
+ import {
3
+ computed,
4
+ Fragment,
5
+ inject,
6
+ onBeforeUpdate,
7
+ provide,
8
+ useSlots,
9
+ type VNode,
10
+ } from 'vue';
11
+
12
+ import {
13
+ GEAR_TRIAD_DETAILS_KEY,
14
+ GEAR_TRIAD_ROOT_KEY,
15
+ getDefaultGearTriadItem,
16
+ type IResolvedGearTriadItem,
17
+ } from '../../../../utils/facets/triad/gear-triad';
18
+ import { useMergedUnoAttrs } from '../../../../utils/useMergedUnoAttrs';
19
+
20
+ defineOptions({
21
+ inheritAttrs: false,
22
+ name: 'GearTriadDetails',
23
+ });
24
+
25
+ export interface IGearTriadDetailsProps {
26
+ readonly option?: number;
27
+ }
28
+
29
+ const props = withDefaults(defineProps<IGearTriadDetailsProps>(), {
30
+ option: undefined,
31
+ });
32
+
33
+ const slots = useSlots();
34
+
35
+ function flattenVNodes(nodes: VNode[]): VNode[] {
36
+ const result: VNode[] = [];
37
+ for (const node of nodes) {
38
+ if (node.type === Fragment && Array.isArray(node.children)) {
39
+ result.push(...flattenVNodes(node.children as VNode[]));
40
+ } else {
41
+ result.push(node);
42
+ }
43
+ }
44
+
45
+ return result;
46
+ }
47
+
48
+ const defaultNodes = computed(() =>
49
+ slots.default ? flattenVNodes(slots.default()) : [],
50
+ );
51
+ const headingNode = computed(() =>
52
+ defaultNodes.value.find((node) => {
53
+ const type = node.type as { name?: string; __name?: string };
54
+
55
+ return (
56
+ type?.name === 'GearTriadDetailsHeading' ||
57
+ type?.__name === 'GearTriadDetailsHeading'
58
+ );
59
+ }),
60
+ );
61
+ const descriptionNode = computed(() =>
62
+ defaultNodes.value.find((node) => {
63
+ const type = node.type as { name?: string; __name?: string };
64
+
65
+ return (
66
+ type?.name === 'GearTriadDetailsContent' ||
67
+ type?.__name === 'GearTriadDetailsContent'
68
+ );
69
+ }),
70
+ );
71
+ const detailNodes = computed(() =>
72
+ defaultNodes.value.filter((node) => {
73
+ const type = node.type as { name?: string; __name?: string };
74
+
75
+ return !['GearTriadDetailsHeading', 'GearTriadDetailsContent'].includes(
76
+ type?.name ?? type?.__name ?? '',
77
+ );
78
+ }),
79
+ );
80
+ const rootContext = inject(GEAR_TRIAD_ROOT_KEY, undefined);
81
+ rootContext?.registerDetails();
82
+
83
+ let contentCounter = 0;
84
+ const optionCounters: Record<number, number> = {};
85
+ onBeforeUpdate(() => {
86
+ contentCounter = 0;
87
+ for (const k in optionCounters) {
88
+ optionCounters[k] = 0;
89
+ }
90
+ });
91
+
92
+ const registerContent = (option?: number) => {
93
+ if (option !== undefined) {
94
+ optionCounters[option] = (optionCounters[option] ?? 0) + 1;
95
+ return { index: optionCounters[option] - 1 };
96
+ }
97
+
98
+ const idx = contentCounter++;
99
+ return { index: idx };
100
+ };
101
+
102
+ const resolvedOptionIndex = computed(() => {
103
+ if (props.option !== undefined) {
104
+ return Math.max(0, props.option - 1);
105
+ }
106
+
107
+ return rootContext?.activeOptionIndex.value ?? 0;
108
+ });
109
+
110
+ const activeItem = computed<IResolvedGearTriadItem>(() => {
111
+ if (rootContext?.items.value) {
112
+ const item = rootContext.items.value[resolvedOptionIndex.value];
113
+ if (item) {
114
+ return item;
115
+ }
116
+ }
117
+
118
+ return getDefaultGearTriadItem(resolvedOptionIndex.value);
119
+ });
120
+
121
+ provide(GEAR_TRIAD_DETAILS_KEY, {
122
+ activeItem,
123
+ activeOptionIndex: resolvedOptionIndex,
124
+ registerContent,
125
+ });
126
+
127
+ const isVisible = computed(() => {
128
+ if (!rootContext?.isShifted.value) {
129
+ return false;
130
+ }
131
+
132
+ if (props.option !== undefined) {
133
+ return props.option - 1 === rootContext.activeOptionIndex.value;
134
+ }
135
+
136
+ return true;
137
+ });
138
+
139
+ const { className, forwardedAttrs } = useMergedUnoAttrs(() => {
140
+ const visibilityClasses = isVisible.value
141
+ ? 'opacity-100 pointer-events-auto translate-x-0 delay-200'
142
+ : 'opacity-0 pointer-events-none translate-x-8';
143
+
144
+ return `alpha-gear-triad-details absolute right-2.5 top-1/2 -translate-y-1/2 w-122.5 flex flex-col select-none box-border transition-all duration-500 ease-out ${visibilityClasses}`;
145
+ });
146
+ </script>
147
+
148
+ <template>
149
+ <div v-bind="forwardedAttrs()" :class="className()">
150
+ <component :is="headingNode" v-if="headingNode" />
151
+ <component :is="descriptionNode" v-if="descriptionNode" />
152
+ <div class="alpha-gear-triad-details__items flex flex-col gap-3.5">
153
+ <slot
154
+ v-if="$slots[String(resolvedOptionIndex + 1)]"
155
+ :name="String(resolvedOptionIndex + 1)"
156
+ />
157
+ <slot
158
+ v-else-if="$slots[`option-${resolvedOptionIndex + 1}`]"
159
+ :name="`option-${resolvedOptionIndex + 1}`"
160
+ />
161
+ <component
162
+ :is="node"
163
+ v-for="(node, index) in detailNodes"
164
+ v-else
165
+ :key="index"
166
+ />
167
+ </div>
168
+ </div>
169
+ </template>
@@ -0,0 +1,18 @@
1
+ <script setup lang="ts">
2
+ import { useMergedUnoAttrs } from '../../../../utils/useMergedUnoAttrs';
3
+
4
+ defineOptions({
5
+ inheritAttrs: false,
6
+ name: 'GearTriadDetailsContent',
7
+ });
8
+
9
+ const { className, forwardedAttrs } = useMergedUnoAttrs(
10
+ 'alpha-gear-triad-details-content mb-6 text-sm font-sans leading-relaxed text-(--alpha-gear-triad-details-content)',
11
+ );
12
+ </script>
13
+
14
+ <template>
15
+ <p v-bind="forwardedAttrs()" :class="className()">
16
+ <slot />
17
+ </p>
18
+ </template>
@@ -0,0 +1,60 @@
1
+ <script setup lang="ts">
2
+ import { computed, inject } from 'vue';
3
+
4
+ import {
5
+ GEAR_TRIAD_DETAILS_KEY,
6
+ GEAR_TRIAD_ROOT_KEY,
7
+ } from '../../../../utils/facets/triad/gear-triad';
8
+ import { useMergedUnoAttrs } from '../../../../utils/useMergedUnoAttrs';
9
+
10
+ defineOptions({
11
+ inheritAttrs: false,
12
+ name: 'GearTriadDetailsHeading',
13
+ });
14
+
15
+ export interface IGearTriadDetailsHeadingProps {
16
+ readonly color?: string;
17
+ readonly option?: number;
18
+ }
19
+
20
+ const props = withDefaults(defineProps<IGearTriadDetailsHeadingProps>(), {
21
+ color: undefined,
22
+ option: undefined,
23
+ });
24
+
25
+ const rootContext = inject(GEAR_TRIAD_ROOT_KEY, undefined);
26
+ const detailsContext = inject(GEAR_TRIAD_DETAILS_KEY, undefined);
27
+
28
+ const headingColor = computed(() => {
29
+ if (props.color) {
30
+ return props.color;
31
+ }
32
+
33
+ if (props.option !== undefined && rootContext?.items.value) {
34
+ const item = rootContext.items.value[props.option - 1];
35
+ if (item?.color) {
36
+ return item.color;
37
+ }
38
+ }
39
+
40
+ return (
41
+ detailsContext?.activeItem.value.color ??
42
+ 'var(--alpha-gear-triad-details-heading)'
43
+ );
44
+ });
45
+
46
+ const { className, forwardedAttrs } = useMergedUnoAttrs(
47
+ 'alpha-gear-triad-details-heading mb-2 font-bold font-sans tracking-tight',
48
+ );
49
+ </script>
50
+
51
+ <template>
52
+ <h3
53
+ v-if="$slots.default"
54
+ v-bind="forwardedAttrs()"
55
+ :class="className()"
56
+ :style="{ color: headingColor }"
57
+ >
58
+ <slot>{{ '' }}</slot>
59
+ </h3>
60
+ </template>