@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
@@ -0,0 +1,240 @@
1
+ <script setup lang="ts">
2
+ import {
3
+ type ComputedRef,
4
+ computed,
5
+ inject,
6
+ onUnmounted,
7
+ provide,
8
+ ref,
9
+ watch,
10
+ } from 'vue';
11
+
12
+ import {
13
+ ARC_DID_LAYER_KEY,
14
+ ARC_DID_ROOT_KEY,
15
+ type IArcDefenseInDepthLayerContext,
16
+ type IArcDefenseInDepthRegisteredLayerData,
17
+ type IArcDefenseInDepthRegisteredSectorData,
18
+ } from '../../../utils/defense-in-depth/arc-defense-in-depth/context';
19
+ import type {
20
+ IArcDefenseInDepthPartItem,
21
+ IArcDefenseInDepthSectorItem,
22
+ } from '../../../utils/defense-in-depth/arc-defense-in-depth/types';
23
+
24
+ import { useMergedUnoAttrs } from '../../../utils/useMergedUnoAttrs';
25
+
26
+ defineOptions({
27
+ inheritAttrs: false,
28
+ name: 'ArcDefenseInDepthLayer',
29
+ });
30
+
31
+ export interface IArcDefenseInDepthLayerProps {
32
+ readonly color?: string;
33
+ readonly textColor?: string;
34
+ readonly index?: number;
35
+ readonly active?: boolean;
36
+ }
37
+
38
+ const props = withDefaults(defineProps<IArcDefenseInDepthLayerProps>(), {
39
+ color: undefined,
40
+ textColor: undefined,
41
+ index: undefined,
42
+ active: undefined,
43
+ });
44
+
45
+ const rootContext = inject(ARC_DID_ROOT_KEY, undefined);
46
+ const currentTitle = ref<string | undefined>();
47
+
48
+ // Manage sector and part registrations within this layer
49
+ const registeredSectorTokens = ref<symbol[]>([]);
50
+ const registeredSectorData = ref<
51
+ Map<symbol, IArcDefenseInDepthRegisteredSectorData>
52
+ >(new Map());
53
+
54
+ function registerSector(
55
+ token?: symbol,
56
+ sectorDataRef?: ComputedRef<
57
+ IArcDefenseInDepthRegisteredSectorData | undefined
58
+ >,
59
+ ) {
60
+ const sToken = token ?? Symbol();
61
+ if (!registeredSectorTokens.value.includes(sToken)) {
62
+ registeredSectorTokens.value = [...registeredSectorTokens.value, sToken];
63
+ }
64
+
65
+ let stopWatch: (() => void) | undefined;
66
+ if (sectorDataRef) {
67
+ stopWatch = watch(
68
+ sectorDataRef,
69
+ (val) => {
70
+ const nextMap = new Map(registeredSectorData.value);
71
+ if (val) {
72
+ nextMap.set(sToken, val);
73
+ } else {
74
+ nextMap.delete(sToken);
75
+ }
76
+
77
+ registeredSectorData.value = nextMap;
78
+ },
79
+ { immediate: true },
80
+ );
81
+ }
82
+
83
+ const index = computed(() => registeredSectorTokens.value.indexOf(sToken));
84
+
85
+ return {
86
+ index,
87
+ unregister: () => {
88
+ stopWatch?.();
89
+ registeredSectorTokens.value = registeredSectorTokens.value.filter(
90
+ (t) => t !== sToken,
91
+ );
92
+ const nextMap = new Map(registeredSectorData.value);
93
+ nextMap.delete(sToken);
94
+ registeredSectorData.value = nextMap;
95
+ },
96
+ };
97
+ }
98
+
99
+ function registerPart(
100
+ token?: symbol,
101
+ partDataRef?: ComputedRef<IArcDefenseInDepthPartItem | undefined>,
102
+ ) {
103
+ const pToken = token ?? Symbol();
104
+ const sectorDataRef = computed<
105
+ IArcDefenseInDepthRegisteredSectorData | undefined
106
+ >(() => {
107
+ const pData = partDataRef?.value;
108
+ if (!pData) {
109
+ return undefined;
110
+ }
111
+
112
+ return {
113
+ parts: [pData],
114
+ split: false,
115
+ angle: pData.angle,
116
+ span: pData.span,
117
+ color: pData.color,
118
+ };
119
+ });
120
+ return registerSector(pToken, sectorDataRef);
121
+ }
122
+
123
+ const registeredSectorsList = computed<IArcDefenseInDepthSectorItem[]>(() => {
124
+ return registeredSectorTokens.value
125
+ .map((token) => registeredSectorData.value.get(token))
126
+ .filter(
127
+ (item): item is IArcDefenseInDepthRegisteredSectorData =>
128
+ item !== undefined,
129
+ )
130
+ .map((data) => ({
131
+ parts: data.parts ?? [],
132
+ split: data.split,
133
+ angle: data.angle,
134
+ span: data.span,
135
+ color: data.color,
136
+ }));
137
+ });
138
+
139
+ const registeredPartsList = computed<IArcDefenseInDepthPartItem[]>(() => {
140
+ return registeredSectorsList.value.flatMap(
141
+ (s) => s.parts as IArcDefenseInDepthPartItem[],
142
+ );
143
+ });
144
+
145
+ const layerToken = Symbol();
146
+ const layerRegistrationData = computed<IArcDefenseInDepthRegisteredLayerData>(
147
+ () => ({
148
+ title: currentTitle.value,
149
+ color: props.color,
150
+ sectors: registeredSectorsList.value,
151
+ parts: registeredPartsList.value,
152
+ index: props.index !== undefined ? Number(props.index) : undefined,
153
+ }),
154
+ );
155
+
156
+ const registration = rootContext?.registerLayer(
157
+ layerToken,
158
+ layerRegistrationData,
159
+ );
160
+
161
+ onUnmounted(() => {
162
+ registration?.unregister();
163
+ });
164
+
165
+ const resolvedIndex = computed<number>(() => {
166
+ if (props.index !== undefined) {
167
+ return Number(props.index);
168
+ }
169
+
170
+ return registration?.index.value ?? 0;
171
+ });
172
+
173
+ const layerGeo = computed(() => {
174
+ if (!rootContext) {
175
+ return undefined;
176
+ }
177
+
178
+ return rootContext.geo.value.layers[resolvedIndex.value];
179
+ });
180
+
181
+ const isActive = computed<boolean>(() => {
182
+ if (props.active !== undefined) {
183
+ return props.active;
184
+ }
185
+
186
+ if (!rootContext) {
187
+ return false;
188
+ }
189
+
190
+ return (
191
+ rootContext.activeIndex.value === -1 ||
192
+ rootContext.activeIndex.value === resolvedIndex.value
193
+ );
194
+ });
195
+
196
+ const effectiveColor = computed<string>(() => {
197
+ if (props.color) {
198
+ return props.color;
199
+ }
200
+
201
+ if (rootContext) {
202
+ return rootContext.getLayerColor(resolvedIndex.value);
203
+ }
204
+
205
+ return 'var(--alpha-arc-defense-in-depth-layer-accent)';
206
+ });
207
+
208
+ const layerContext: IArcDefenseInDepthLayerContext = {
209
+ layerIndex: resolvedIndex,
210
+ layerGeo,
211
+ isActive,
212
+ color: effectiveColor,
213
+ textColor: computed(() => props.textColor),
214
+ title: computed(() => currentTitle.value),
215
+ setTitle: (title: string) => {
216
+ currentTitle.value = title;
217
+ },
218
+ partsCount: computed(() => registeredPartsList.value.length),
219
+ registerPart,
220
+ registerSector,
221
+ };
222
+
223
+ provide(ARC_DID_LAYER_KEY, layerContext);
224
+
225
+ const { className, forwardedAttrs } = useMergedUnoAttrs(
226
+ 'alpha-arc-defense-in-depth__layer contents',
227
+ );
228
+ </script>
229
+
230
+ <template>
231
+ <div
232
+ v-bind="forwardedAttrs()"
233
+ :class="className()"
234
+ :data-index="resolvedIndex"
235
+ :data-active="isActive"
236
+ >
237
+ <!-- Default children slots -->
238
+ <slot />
239
+ </div>
240
+ </template>
@@ -1,21 +1,19 @@
1
1
  <script setup lang="ts">
2
- import { computed, inject, ref, useSlots, type VNode, watch } from 'vue';
2
+ import { computed, inject, useSlots, type VNode, watch } from 'vue';
3
3
 
4
- import { ARC_DID_LAYER_KEY } from '../../../utils/defenseInDepth/arcDid/context';
4
+ import { ARC_DID_LAYER_KEY } from '../../../utils/defense-in-depth/arc-defense-in-depth/context';
5
+ import { useMergedUnoAttrs } from '../../../utils/useMergedUnoAttrs';
5
6
 
6
7
  defineOptions({
7
- name: 'ArcDiDLayerTitle',
8
+ inheritAttrs: false,
9
+ name: 'ArcDefenseInDepthLayerHeading',
8
10
  });
9
11
 
10
- export interface IArcDiDLayerTitleProps {
11
- readonly title?: string;
12
+ export interface IArcDefenseInDepthLayerHeadingProps {
12
13
  readonly color?: string;
13
14
  }
14
15
 
15
- const props = withDefaults(defineProps<IArcDiDLayerTitleProps>(), {
16
- title: undefined,
17
- color: undefined,
18
- });
16
+ const props = defineProps<IArcDefenseInDepthLayerHeadingProps>();
19
17
 
20
18
  const slots = useSlots();
21
19
  const layerContext = inject(ARC_DID_LAYER_KEY, undefined);
@@ -31,16 +29,15 @@ function extractTextFromVNodes(nodes: VNode[]): string {
31
29
  text += extractTextFromVNodes(node.children as VNode[]);
32
30
  }
33
31
  }
32
+
34
33
  return text.trim();
35
34
  }
36
35
 
37
36
  const rawTitle = computed(() => {
38
- if (props.title) {
39
- return props.title;
40
- }
41
37
  if (slots.default) {
42
38
  return extractTextFromVNodes(slots.default());
43
39
  }
40
+
44
41
  return '';
45
42
  });
46
43
 
@@ -59,40 +56,41 @@ const maxTitleWidth = computed(() => {
59
56
  if (!geo) {
60
57
  return 130;
61
58
  }
59
+
62
60
  const arcLen = geo.midRadius * (40 * (Math.PI / 180));
63
61
  return Math.max(75, Math.min(130, Math.round(arcLen * 0.82)));
64
62
  });
65
63
 
64
+ const headingColor = computed(() => {
65
+ return props.color ?? layerContext?.textColor?.value;
66
+ });
67
+
66
68
  const positionStyle = computed(() => {
67
69
  const geo = layerContext?.layerGeo.value;
70
+ const colorVars = headingColor.value
71
+ ? { '--alpha-arc-defense-in-depth-layer-heading': headingColor.value }
72
+ : {};
73
+
68
74
  if (!geo) {
69
- return {};
75
+ return colorVars;
70
76
  }
77
+
71
78
  return {
72
79
  left: `${geo.titlePosition.x}px`,
73
80
  top: `${geo.titlePosition.y}px`,
74
81
  transform: 'translate(-50%, -50%)',
75
82
  maxWidth: `${maxTitleWidth.value}px`,
83
+ ...colorVars,
76
84
  };
77
85
  });
86
+
87
+ const { className, forwardedAttrs } = useMergedUnoAttrs(
88
+ 'alpha-arc-defense-in-depth__layer-title absolute z-20 max-w-[140px] pointer-events-auto select-none text-center font-semibold text-(--alpha-arc-defense-in-depth-layer-heading) tracking-tight leading-snug whitespace-pre-line text-sm md:text-base transition-colors duration-200',
89
+ );
78
90
  </script>
79
91
 
80
92
  <template>
81
- <div
82
- class="alpha-arc-did__layer-title absolute z-20 pointer-events-auto select-none text-center"
83
- :style="positionStyle"
84
- >
85
- <div
86
- class="font-semibold text-slate-800 dark:text-slate-100 tracking-tight leading-snug whitespace-pre-line text-sm md:text-base transition-colors duration-200"
87
- :style="{ color: props.color ?? layerContext?.textColor?.value }"
88
- >
89
- <slot>{{ props.title }}</slot>
90
- </div>
93
+ <div v-bind="forwardedAttrs()" :class="className()" :style="positionStyle">
94
+ <slot />
91
95
  </div>
92
96
  </template>
93
-
94
- <style scoped>
95
- .alpha-arc-did__layer-title {
96
- max-width: 140px;
97
- }
98
- </style>