@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
@@ -1,4 +1,5 @@
1
1
  <script setup lang="ts">
2
+ import { useMergedUnoAttrs } from '../../../utils/useMergedUnoAttrs';
2
3
  import ArcOrbitBadge, {
3
4
  type IArcOrbitBadgeProps,
4
5
  } from '../../core/arc-orbit/ArcOrbitBadge.vue';
@@ -11,19 +12,23 @@ defineOptions({
11
12
  export interface IArcComparisonBadgeProps extends IArcOrbitBadgeProps {}
12
13
 
13
14
  const props = defineProps<IArcComparisonBadgeProps>();
15
+
16
+ const { className, forwardedAttrs } = useMergedUnoAttrs(
17
+ 'alpha-arc-comparison-badge text-(--alpha-arc-comparison-badge)',
18
+ );
14
19
  </script>
15
20
 
16
21
  <template>
17
22
  <ArcOrbitBadge
18
23
  v-if="$slots.default"
19
- v-bind="{ ...props, ...$attrs }"
20
- class="alpha-arc-comparison-badge"
24
+ v-bind="{ ...props, ...forwardedAttrs() }"
25
+ :class="className()"
21
26
  >
22
27
  <slot />
23
28
  </ArcOrbitBadge>
24
29
  <ArcOrbitBadge
25
30
  v-else
26
- v-bind="{ ...props, ...$attrs }"
27
- class="alpha-arc-comparison-badge"
31
+ v-bind="{ ...props, ...forwardedAttrs() }"
32
+ :class="className()"
28
33
  />
29
34
  </template>
@@ -1,4 +1,5 @@
1
1
  <script setup lang="ts">
2
+ import { useMergedUnoAttrs } from '../../../utils/useMergedUnoAttrs';
2
3
  import ArcOrbitContent, {
3
4
  type IArcOrbitContentProps,
4
5
  } from '../../core/arc-orbit/ArcOrbitContent.vue';
@@ -11,19 +12,23 @@ defineOptions({
11
12
  export interface IArcComparisonContentProps extends IArcOrbitContentProps {}
12
13
 
13
14
  const props = defineProps<IArcComparisonContentProps>();
15
+
16
+ const { className, forwardedAttrs } = useMergedUnoAttrs(
17
+ 'alpha-arc-comparison-content text-(--alpha-arc-comparison-content)',
18
+ );
14
19
  </script>
15
20
 
16
21
  <template>
17
22
  <ArcOrbitContent
18
23
  v-if="$slots.default"
19
- v-bind="{ ...props, ...$attrs }"
20
- class="alpha-arc-comparison-content"
24
+ v-bind="{ ...props, ...forwardedAttrs() }"
25
+ :class="className()"
21
26
  >
22
27
  <slot />
23
28
  </ArcOrbitContent>
24
29
  <ArcOrbitContent
25
30
  v-else
26
- v-bind="{ ...props, ...$attrs }"
27
- class="alpha-arc-comparison-content"
31
+ v-bind="{ ...props, ...forwardedAttrs() }"
32
+ :class="className()"
28
33
  />
29
34
  </template>
@@ -1,4 +1,5 @@
1
1
  <script setup lang="ts">
2
+ import { useMergedUnoAttrs } from '../../../utils/useMergedUnoAttrs';
2
3
  import ArcOrbitHeading, {
3
4
  type IArcOrbitHeadingProps,
4
5
  } from '../../core/arc-orbit/ArcOrbitHeading.vue';
@@ -11,19 +12,23 @@ defineOptions({
11
12
  export interface IArcComparisonHeadingProps extends IArcOrbitHeadingProps {}
12
13
 
13
14
  const props = defineProps<IArcComparisonHeadingProps>();
15
+
16
+ const { className, forwardedAttrs } = useMergedUnoAttrs(
17
+ 'alpha-arc-comparison-heading text-(--alpha-arc-comparison-heading)',
18
+ );
14
19
  </script>
15
20
 
16
21
  <template>
17
22
  <ArcOrbitHeading
18
23
  v-if="$slots.default"
19
- v-bind="{ ...props, ...$attrs }"
20
- class="alpha-arc-comparison-heading"
24
+ v-bind="{ ...props, ...forwardedAttrs() }"
25
+ :class="className()"
21
26
  >
22
27
  <slot />
23
28
  </ArcOrbitHeading>
24
29
  <ArcOrbitHeading
25
30
  v-else
26
- v-bind="{ ...props, ...$attrs }"
27
- class="alpha-arc-comparison-heading"
31
+ v-bind="{ ...props, ...forwardedAttrs() }"
32
+ :class="className()"
28
33
  />
29
34
  </template>
@@ -7,24 +7,22 @@ import {
7
7
  provide,
8
8
  ref,
9
9
  useSlots,
10
+ isVNode,
10
11
  type VNode,
12
+ watch,
11
13
  } from 'vue';
12
14
 
13
15
  import {
14
16
  ARC_COMPARISON_ROOT_KEY,
15
17
  ARC_COMPARISON_SIDE_KEY,
16
18
  DEFAULT_LEFT_COLOR,
17
- DEFAULT_LEFT_ITEMS,
18
- } from '../../../utils/arcComparison';
19
+ } from '../../../utils/comparisons/arc-comparison';
19
20
  import {
20
21
  ARC_ORBIT_ROOT_KEY,
21
22
  type IArcOrbitGeometry,
22
23
  type TArcOrbitPosition,
23
- } from '../../../utils/arcOrbit';
24
+ } from '../../../utils/core/arc-orbit';
24
25
  import { useMergedUnoAttrs } from '../../../utils/useMergedUnoAttrs';
25
- import ArcComparisonContents from './ArcComparisonContents.vue';
26
- import ArcComparisonOrbit from './ArcComparisonOrbit.vue';
27
- import ArcComparisonTitle from './ArcComparisonTitle.vue';
28
26
 
29
27
  defineOptions({
30
28
  inheritAttrs: false,
@@ -33,7 +31,7 @@ defineOptions({
33
31
 
34
32
  export interface IArcComparisonLeftProps {
35
33
  readonly color?: string;
36
- readonly title?: string;
34
+ readonly title?: string | VNode;
37
35
  readonly count?: number;
38
36
  }
39
37
 
@@ -47,25 +45,6 @@ const rootContext = inject(ARC_COMPARISON_ROOT_KEY, undefined);
47
45
 
48
46
  const slots = useSlots();
49
47
 
50
- interface INamedComponent {
51
- readonly name?: string;
52
- readonly __name?: string;
53
- }
54
-
55
- function hasComponentName(type: unknown, name: string): boolean {
56
- if (typeof type === 'object' && type !== null) {
57
- const comp = type as INamedComponent;
58
-
59
- return comp.name === name || comp.__name === name;
60
- }
61
-
62
- if (typeof type === 'function') {
63
- return (type as { name?: string }).name === name;
64
- }
65
-
66
- return false;
67
- }
68
-
69
48
  const registeredCalloutIds = ref<symbol[]>([]);
70
49
 
71
50
  const registerCallout = (id?: symbol): number | ComputedRef<number> => {
@@ -73,6 +52,7 @@ const registerCallout = (id?: symbol): number | ComputedRef<number> => {
73
52
  if (!registeredCalloutIds.value.includes(id)) {
74
53
  registeredCalloutIds.value.push(id);
75
54
  }
55
+
76
56
  return computed(() => registeredCalloutIds.value.indexOf(id));
77
57
  }
78
58
 
@@ -95,7 +75,15 @@ const resolvedCount = computed(() => {
95
75
  return props.count ?? rootContext?.pointsCount.value ?? 3;
96
76
  });
97
77
 
98
- const currentTitle = ref<string>(props.title ?? 'Add Project\nName');
78
+ const currentTitle = ref<string>(
79
+ typeof props.title === 'string' ? props.title : '',
80
+ );
81
+ watch(
82
+ () => props.title,
83
+ (title) => {
84
+ currentTitle.value = typeof title === 'string' ? title : '';
85
+ },
86
+ );
99
87
 
100
88
  provide(ARC_COMPARISON_SIDE_KEY, {
101
89
  side: 'left',
@@ -143,7 +131,7 @@ provide(ARC_ORBIT_ROOT_KEY, {
143
131
  registerCallout,
144
132
  unregisterCallout,
145
133
  edgeOffset: computed(() => rootContext?.edgeOffset?.value ?? 30),
146
- items: computed(() => DEFAULT_LEFT_ITEMS),
134
+ items: computed(() => []),
147
135
  });
148
136
 
149
137
  function isSignificantNode(node: VNode): boolean {
@@ -174,14 +162,6 @@ function flattenVNodes(nodes: VNode[]): VNode[] {
174
162
  return result;
175
163
  }
176
164
 
177
- function isTitleNode(node: VNode): boolean {
178
- return (
179
- hasComponentName(node.type, 'ArcComparisonTitle') ||
180
- hasComponentName(node.type, 'ArcOrbitTitle') ||
181
- node.type === ArcComparisonTitle
182
- );
183
- }
184
-
185
165
  const defaultNodes = computed(() => {
186
166
  if (!slots.default) {
187
167
  return [];
@@ -190,14 +170,6 @@ const defaultNodes = computed(() => {
190
170
  return flattenVNodes(slots.default());
191
171
  });
192
172
 
193
- const titleNode = computed(() => {
194
- return defaultNodes.value.find(isTitleNode);
195
- });
196
-
197
- const bodyNodes = computed(() => {
198
- return defaultNodes.value.filter((node) => !isTitleNode(node));
199
- });
200
-
201
173
  const hubStyle = computed(() => {
202
174
  const hubR = rootContext?.geo.value.left.hubRadius ?? 170;
203
175
  const centerY = rootContext?.geo.value.centerY ?? 240;
@@ -220,24 +192,33 @@ const hubStyle = computed(() => {
220
192
  };
221
193
  });
222
194
 
195
+ const rootStyle = computed(() => {
196
+ if (!props.color || props.color === DEFAULT_LEFT_COLOR) {
197
+ return undefined;
198
+ }
199
+
200
+ return {
201
+ '--alpha-arc-comparison-left-title': props.color,
202
+ '--alpha-arc-comparison-left-accent': props.color,
203
+ };
204
+ });
205
+
223
206
  const { className, forwardedAttrs } = useMergedUnoAttrs(
224
207
  'alpha-arc-comparison-left absolute inset-0 w-full h-full pointer-events-none',
225
208
  );
226
209
  </script>
227
210
 
228
211
  <template>
229
- <div v-bind="forwardedAttrs()" :class="className()">
212
+ <div v-bind="forwardedAttrs()" :class="className()" :style="rootStyle">
230
213
  <!-- Left Hub Title Display -->
231
- <div
232
- class="alpha-arc-comparison__hub-title alpha-arc-comparison__hub-title--left absolute flex items-center justify-center z-10 pointer-events-auto"
214
+ <h3
215
+ class="alpha-arc-comparison__hub-title alpha-arc-comparison__hub-title--left absolute flex items-center justify-center z-10 pointer-events-auto font-sans font-bold text-center px-2 leading-tight select-none tracking-tight whitespace-pre-line text-[18px] text-(--alpha-arc-comparison-left-title)"
233
216
  :style="hubStyle"
234
217
  >
235
- <component :is="titleNode" v-if="titleNode" />
236
- <ArcComparisonTitle v-else-if="props.title">
237
- {{ props.title }}
238
- </ArcComparisonTitle>
239
- <ArcComparisonTitle v-else />
240
- </div>
218
+ <slot v-if="$slots.title" name="title" />
219
+ <component :is="props.title" v-else-if="isVNode(props.title)" />
220
+ <span v-else-if="typeof props.title === 'string'">{{ props.title }}</span>
221
+ </h3>
241
222
  <!-- Contents & Callouts -->
242
223
  <div
243
224
  v-if="rootContext?.as?.value !== 'layout' || rootContext?.isMoved?.value"
@@ -253,16 +234,11 @@ const { className, forwardedAttrs } = useMergedUnoAttrs(
253
234
  : '0ms',
254
235
  }"
255
236
  >
256
- <template v-if="bodyNodes.length > 0">
257
- <component :is="node" v-for="(node, i) in bodyNodes" :key="i" />
258
- </template>
259
- <ArcComparisonContents v-else>
260
- <ArcComparisonOrbit
261
- v-for="idx in resolvedCount"
262
- :key="idx"
263
- :index="idx - 1"
264
- />
265
- </ArcComparisonContents>
237
+ <div
238
+ class="alpha-arc-comparison-contents absolute inset-0 w-full h-full pointer-events-none"
239
+ >
240
+ <component :is="node" v-for="(node, i) in defaultNodes" :key="i" />
241
+ </div>
266
242
  </div>
267
243
  </div>
268
244
  </template>
@@ -1,4 +1,5 @@
1
1
  <script setup lang="ts">
2
+ import { useMergedUnoAttrs } from '../../../utils/useMergedUnoAttrs';
2
3
  import ArcOrbitCallout from '../../core/arc-orbit/ArcOrbitCallout.vue';
3
4
 
4
5
  defineOptions({
@@ -10,8 +11,6 @@ export interface IArcComparisonOrbitProps {
10
11
  readonly side?: 'left' | 'right';
11
12
  readonly index?: number;
12
13
  readonly id?: string | number;
13
- readonly title?: string;
14
- readonly description?: string;
15
14
  readonly color?: string;
16
15
  readonly textColor?: string;
17
16
  readonly textGap?: number;
@@ -21,27 +20,29 @@ const props = withDefaults(defineProps<IArcComparisonOrbitProps>(), {
21
20
  side: undefined,
22
21
  index: undefined,
23
22
  id: undefined,
24
- title: undefined,
25
- description: undefined,
26
23
  color: undefined,
27
24
  textColor: undefined,
28
25
  textGap: undefined,
29
26
  });
27
+
28
+ const { className, forwardedAttrs } = useMergedUnoAttrs(
29
+ 'alpha-arc-comparison-orbit',
30
+ );
30
31
  </script>
31
32
 
32
33
  <template>
33
34
  <ArcOrbitCallout
34
35
  v-if="$slots.default"
35
- v-bind="{ ...props, ...$attrs }"
36
+ v-bind="{ ...props, ...forwardedAttrs() }"
36
37
  :position="props.side"
37
- class="alpha-arc-comparison-orbit"
38
+ :class="className()"
38
39
  >
39
40
  <slot />
40
41
  </ArcOrbitCallout>
41
42
  <ArcOrbitCallout
42
43
  v-else
43
- v-bind="{ ...props, ...$attrs }"
44
+ v-bind="{ ...props, ...forwardedAttrs() }"
44
45
  :position="props.side"
45
- class="alpha-arc-comparison-orbit"
46
+ :class="className()"
46
47
  />
47
48
  </template>
@@ -7,24 +7,22 @@ import {
7
7
  provide,
8
8
  ref,
9
9
  useSlots,
10
+ isVNode,
10
11
  type VNode,
12
+ watch,
11
13
  } from 'vue';
12
14
 
13
15
  import {
14
16
  ARC_COMPARISON_ROOT_KEY,
15
17
  ARC_COMPARISON_SIDE_KEY,
16
18
  DEFAULT_RIGHT_COLOR,
17
- DEFAULT_RIGHT_ITEMS,
18
- } from '../../../utils/arcComparison';
19
+ } from '../../../utils/comparisons/arc-comparison';
19
20
  import {
20
21
  ARC_ORBIT_ROOT_KEY,
21
22
  type IArcOrbitGeometry,
22
23
  type TArcOrbitPosition,
23
- } from '../../../utils/arcOrbit';
24
+ } from '../../../utils/core/arc-orbit';
24
25
  import { useMergedUnoAttrs } from '../../../utils/useMergedUnoAttrs';
25
- import ArcComparisonContents from './ArcComparisonContents.vue';
26
- import ArcComparisonOrbit from './ArcComparisonOrbit.vue';
27
- import ArcComparisonTitle from './ArcComparisonTitle.vue';
28
26
 
29
27
  defineOptions({
30
28
  inheritAttrs: false,
@@ -33,7 +31,7 @@ defineOptions({
33
31
 
34
32
  export interface IArcComparisonRightProps {
35
33
  readonly color?: string;
36
- readonly title?: string;
34
+ readonly title?: string | VNode;
37
35
  readonly count?: number;
38
36
  }
39
37
 
@@ -47,25 +45,6 @@ const rootContext = inject(ARC_COMPARISON_ROOT_KEY, undefined);
47
45
 
48
46
  const slots = useSlots();
49
47
 
50
- interface INamedComponent {
51
- readonly name?: string;
52
- readonly __name?: string;
53
- }
54
-
55
- function hasComponentName(type: unknown, name: string): boolean {
56
- if (typeof type === 'object' && type !== null) {
57
- const comp = type as INamedComponent;
58
-
59
- return comp.name === name || comp.__name === name;
60
- }
61
-
62
- if (typeof type === 'function') {
63
- return (type as { name?: string }).name === name;
64
- }
65
-
66
- return false;
67
- }
68
-
69
48
  const registeredCalloutIds = ref<symbol[]>([]);
70
49
 
71
50
  const registerCallout = (id?: symbol): number | ComputedRef<number> => {
@@ -73,6 +52,7 @@ const registerCallout = (id?: symbol): number | ComputedRef<number> => {
73
52
  if (!registeredCalloutIds.value.includes(id)) {
74
53
  registeredCalloutIds.value.push(id);
75
54
  }
55
+
76
56
  return computed(() => registeredCalloutIds.value.indexOf(id));
77
57
  }
78
58
 
@@ -95,7 +75,15 @@ const resolvedCount = computed(() => {
95
75
  return props.count ?? rootContext?.pointsCount.value ?? 3;
96
76
  });
97
77
 
98
- const currentTitle = ref<string>(props.title ?? 'Add Project\nName');
78
+ const currentTitle = ref<string>(
79
+ typeof props.title === 'string' ? props.title : '',
80
+ );
81
+ watch(
82
+ () => props.title,
83
+ (title) => {
84
+ currentTitle.value = typeof title === 'string' ? title : '';
85
+ },
86
+ );
99
87
 
100
88
  provide(ARC_COMPARISON_SIDE_KEY, {
101
89
  side: 'right',
@@ -143,7 +131,7 @@ provide(ARC_ORBIT_ROOT_KEY, {
143
131
  registerCallout,
144
132
  unregisterCallout,
145
133
  edgeOffset: computed(() => rootContext?.edgeOffset?.value ?? 30),
146
- items: computed(() => DEFAULT_RIGHT_ITEMS),
134
+ items: computed(() => []),
147
135
  });
148
136
 
149
137
  function isSignificantNode(node: VNode): boolean {
@@ -174,14 +162,6 @@ function flattenVNodes(nodes: VNode[]): VNode[] {
174
162
  return result;
175
163
  }
176
164
 
177
- function isTitleNode(node: VNode): boolean {
178
- return (
179
- hasComponentName(node.type, 'ArcComparisonTitle') ||
180
- hasComponentName(node.type, 'ArcOrbitTitle') ||
181
- node.type === ArcComparisonTitle
182
- );
183
- }
184
-
185
165
  const defaultNodes = computed(() => {
186
166
  if (!slots.default) {
187
167
  return [];
@@ -190,14 +170,6 @@ const defaultNodes = computed(() => {
190
170
  return flattenVNodes(slots.default());
191
171
  });
192
172
 
193
- const titleNode = computed(() => {
194
- return defaultNodes.value.find(isTitleNode);
195
- });
196
-
197
- const bodyNodes = computed(() => {
198
- return defaultNodes.value.filter((node) => !isTitleNode(node));
199
- });
200
-
201
173
  const hubStyle = computed(() => {
202
174
  const hubR = rootContext?.geo.value.right.hubRadius ?? 170;
203
175
  const centerY = rootContext?.geo.value.centerY ?? 240;
@@ -223,24 +195,33 @@ const hubStyle = computed(() => {
223
195
  };
224
196
  });
225
197
 
198
+ const rootStyle = computed(() => {
199
+ if (!props.color || props.color === DEFAULT_RIGHT_COLOR) {
200
+ return undefined;
201
+ }
202
+
203
+ return {
204
+ '--alpha-arc-comparison-right-title': props.color,
205
+ '--alpha-arc-comparison-right-accent': props.color,
206
+ };
207
+ });
208
+
226
209
  const { className, forwardedAttrs } = useMergedUnoAttrs(
227
210
  'alpha-arc-comparison-right absolute inset-0 w-full h-full pointer-events-none',
228
211
  );
229
212
  </script>
230
213
 
231
214
  <template>
232
- <div v-bind="forwardedAttrs()" :class="className()">
215
+ <div v-bind="forwardedAttrs()" :class="className()" :style="rootStyle">
233
216
  <!-- Right Hub Title Display -->
234
- <div
235
- class="alpha-arc-comparison__hub-title alpha-arc-comparison__hub-title--right absolute flex items-center justify-center z-10 pointer-events-auto"
217
+ <h3
218
+ class="alpha-arc-comparison__hub-title alpha-arc-comparison__hub-title--right absolute flex items-center justify-center z-10 pointer-events-auto font-sans font-bold text-center px-2 leading-tight select-none tracking-tight whitespace-pre-line text-[18px] text-(--alpha-arc-comparison-right-title)"
236
219
  :style="hubStyle"
237
220
  >
238
- <component :is="titleNode" v-if="titleNode" />
239
- <ArcComparisonTitle v-else-if="props.title">
240
- {{ props.title }}
241
- </ArcComparisonTitle>
242
- <ArcComparisonTitle v-else />
243
- </div>
221
+ <slot v-if="$slots.title" name="title" />
222
+ <component :is="props.title" v-else-if="isVNode(props.title)" />
223
+ <span v-else-if="typeof props.title === 'string'">{{ props.title }}</span>
224
+ </h3>
244
225
  <!-- Contents & Callouts -->
245
226
  <div
246
227
  v-if="rootContext?.as?.value !== 'layout' || rootContext?.isMoved?.value"
@@ -256,16 +237,11 @@ const { className, forwardedAttrs } = useMergedUnoAttrs(
256
237
  : '0ms',
257
238
  }"
258
239
  >
259
- <template v-if="bodyNodes.length > 0">
260
- <component :is="node" v-for="(node, i) in bodyNodes" :key="i" />
261
- </template>
262
- <ArcComparisonContents v-else>
263
- <ArcComparisonOrbit
264
- v-for="idx in resolvedCount"
265
- :key="idx"
266
- :index="idx - 1"
267
- />
268
- </ArcComparisonContents>
240
+ <div
241
+ class="alpha-arc-comparison-contents absolute inset-0 w-full h-full pointer-events-none"
242
+ >
243
+ <component :is="node" v-for="(node, i) in defaultNodes" :key="i" />
244
+ </div>
269
245
  </div>
270
246
  </div>
271
247
  </template>
@@ -0,0 +1,27 @@
1
+ /* Color defaults shared by this component family. */
2
+ @layer alpha-theme-tokens {
3
+ :root {
4
+ --alpha-arc-comparison-badge: #ffffff;
5
+ --alpha-arc-comparison-content: var(--alpha-foreground-primary, #475569);
6
+ --alpha-arc-comparison-left-accent: #e87a36;
7
+ --alpha-arc-comparison-right-accent: #208b9e;
8
+ --alpha-arc-comparison-left-title: var(--alpha-arc-comparison-left-accent);
9
+ --alpha-arc-comparison-right-title: var(--alpha-arc-comparison-right-accent);
10
+ --alpha-arc-comparison-heading: var(--alpha-foreground-primary, #1e293b);
11
+ --alpha-arc-comparison-guide-dot: #94a3b8;
12
+ --alpha-arc-comparison-guide-stroke: var(--alpha-stroke-primary);
13
+ --alpha-arc-comparison-hub-fill: #f1f3f6;
14
+ --alpha-arc-comparison-vs: var(--alpha-foreground-primary);
15
+ --alpha-arc-comparison-vs-bg: #ffffff;
16
+ --alpha-arc-comparison-vs-shadow: drop-shadow(0 2px 6px rgba(0, 0, 0, 0.22));
17
+ }
18
+
19
+ .dark,
20
+ html.dark {
21
+ --alpha-arc-comparison-guide-dot: #475569;
22
+ --alpha-arc-comparison-guide-stroke: #334155;
23
+ --alpha-arc-comparison-hub-fill: #1e293bcc;
24
+ --alpha-arc-comparison-vs: #0f172a;
25
+ --alpha-arc-comparison-vs-bg: #f1f5f9;
26
+ }
27
+ }