@dillingerstaffing/strand-vue 0.16.1 → 0.17.1

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 (292) hide show
  1. package/dist/components/CardSection/CardSection.vue.d.ts +27 -0
  2. package/dist/components/CardSection/CardSection.vue.d.ts.map +1 -0
  3. package/dist/components/CardSection/index.d.ts +2 -0
  4. package/dist/components/CardSection/index.d.ts.map +1 -0
  5. package/dist/components/ContainerScale/ContainerScale.vue.d.ts +23 -0
  6. package/dist/components/ContainerScale/ContainerScale.vue.d.ts.map +1 -0
  7. package/dist/components/ContainerScale/ContainerScaleAxis.vue.d.ts +23 -0
  8. package/dist/components/ContainerScale/ContainerScaleAxis.vue.d.ts.map +1 -0
  9. package/dist/components/ContainerScale/ContainerScaleBar.vue.d.ts +24 -0
  10. package/dist/components/ContainerScale/ContainerScaleBar.vue.d.ts.map +1 -0
  11. package/dist/components/ContainerScale/ContainerScaleCaption.vue.d.ts +23 -0
  12. package/dist/components/ContainerScale/ContainerScaleCaption.vue.d.ts.map +1 -0
  13. package/dist/components/ContainerScale/ContainerScaleLabel.vue.d.ts +23 -0
  14. package/dist/components/ContainerScale/ContainerScaleLabel.vue.d.ts.map +1 -0
  15. package/dist/components/ContainerScale/ContainerScalePx.vue.d.ts +23 -0
  16. package/dist/components/ContainerScale/ContainerScalePx.vue.d.ts.map +1 -0
  17. package/dist/components/ContainerScale/ContainerScaleRow.vue.d.ts +23 -0
  18. package/dist/components/ContainerScale/ContainerScaleRow.vue.d.ts.map +1 -0
  19. package/dist/components/ContainerScale/ContainerScaleTrack.vue.d.ts +23 -0
  20. package/dist/components/ContainerScale/ContainerScaleTrack.vue.d.ts.map +1 -0
  21. package/dist/components/ContainerScale/index.d.ts +9 -0
  22. package/dist/components/ContainerScale/index.d.ts.map +1 -0
  23. package/dist/components/KvEditorial/KvEditorial.vue.d.ts +32 -0
  24. package/dist/components/KvEditorial/KvEditorial.vue.d.ts.map +1 -0
  25. package/dist/components/KvEditorial/index.d.ts +2 -0
  26. package/dist/components/KvEditorial/index.d.ts.map +1 -0
  27. package/dist/components/LabFrame/LabFrame.vue.d.ts +23 -0
  28. package/dist/components/LabFrame/LabFrame.vue.d.ts.map +1 -0
  29. package/dist/components/LabFrame/LabFrameActions.vue.d.ts +23 -0
  30. package/dist/components/LabFrame/LabFrameActions.vue.d.ts.map +1 -0
  31. package/dist/components/LabFrame/LabFrameBody.vue.d.ts +23 -0
  32. package/dist/components/LabFrame/LabFrameBody.vue.d.ts.map +1 -0
  33. package/dist/components/LabFrame/LabFrameChrome.vue.d.ts +23 -0
  34. package/dist/components/LabFrame/LabFrameChrome.vue.d.ts.map +1 -0
  35. package/dist/components/LabFrame/LabFrameContent.vue.d.ts +25 -0
  36. package/dist/components/LabFrame/LabFrameContent.vue.d.ts.map +1 -0
  37. package/dist/components/LabFrame/LabFrameContentHead.vue.d.ts +23 -0
  38. package/dist/components/LabFrame/LabFrameContentHead.vue.d.ts.map +1 -0
  39. package/dist/components/LabFrame/LabFrameDot.vue.d.ts +9 -0
  40. package/dist/components/LabFrame/LabFrameDot.vue.d.ts.map +1 -0
  41. package/dist/components/LabFrame/LabFrameOverlay.vue.d.ts +23 -0
  42. package/dist/components/LabFrame/LabFrameOverlay.vue.d.ts.map +1 -0
  43. package/dist/components/LabFrame/LabFramePanel.vue.d.ts +23 -0
  44. package/dist/components/LabFrame/LabFramePanel.vue.d.ts.map +1 -0
  45. package/dist/components/LabFrame/LabFramePanelBody.vue.d.ts +23 -0
  46. package/dist/components/LabFrame/LabFramePanelBody.vue.d.ts.map +1 -0
  47. package/dist/components/LabFrame/LabFramePanelClose.vue.d.ts +25 -0
  48. package/dist/components/LabFrame/LabFramePanelClose.vue.d.ts.map +1 -0
  49. package/dist/components/LabFrame/LabFramePanelFooter.vue.d.ts +23 -0
  50. package/dist/components/LabFrame/LabFramePanelFooter.vue.d.ts.map +1 -0
  51. package/dist/components/LabFrame/LabFramePanelHeader.vue.d.ts +23 -0
  52. package/dist/components/LabFrame/LabFramePanelHeader.vue.d.ts.map +1 -0
  53. package/dist/components/LabFrame/LabFramePanelTitle.vue.d.ts +23 -0
  54. package/dist/components/LabFrame/LabFramePanelTitle.vue.d.ts.map +1 -0
  55. package/dist/components/LabFrame/LabFrameTitle.vue.d.ts +23 -0
  56. package/dist/components/LabFrame/LabFrameTitle.vue.d.ts.map +1 -0
  57. package/dist/components/LabFrame/index.d.ts +16 -0
  58. package/dist/components/LabFrame/index.d.ts.map +1 -0
  59. package/dist/components/LabGlassStage/LabGlassPanel.vue.d.ts +23 -0
  60. package/dist/components/LabGlassStage/LabGlassPanel.vue.d.ts.map +1 -0
  61. package/dist/components/LabGlassStage/LabGlassStage.vue.d.ts +23 -0
  62. package/dist/components/LabGlassStage/LabGlassStage.vue.d.ts.map +1 -0
  63. package/dist/components/LabGlassStage/index.d.ts +3 -0
  64. package/dist/components/LabGlassStage/index.d.ts.map +1 -0
  65. package/dist/components/LabRevealStage/LabRevealLine.vue.d.ts +23 -0
  66. package/dist/components/LabRevealStage/LabRevealLine.vue.d.ts.map +1 -0
  67. package/dist/components/LabRevealStage/LabRevealStage.vue.d.ts +23 -0
  68. package/dist/components/LabRevealStage/LabRevealStage.vue.d.ts.map +1 -0
  69. package/dist/components/LabRevealStage/index.d.ts +3 -0
  70. package/dist/components/LabRevealStage/index.d.ts.map +1 -0
  71. package/dist/components/LabShell/LabBrand.vue.d.ts +23 -0
  72. package/dist/components/LabShell/LabBrand.vue.d.ts.map +1 -0
  73. package/dist/components/LabShell/LabBrandMark.vue.d.ts +23 -0
  74. package/dist/components/LabShell/LabBrandMark.vue.d.ts.map +1 -0
  75. package/dist/components/LabShell/LabBrandSub.vue.d.ts +23 -0
  76. package/dist/components/LabShell/LabBrandSub.vue.d.ts.map +1 -0
  77. package/dist/components/LabShell/LabBrandTitle.vue.d.ts +23 -0
  78. package/dist/components/LabShell/LabBrandTitle.vue.d.ts.map +1 -0
  79. package/dist/components/LabShell/LabExample.vue.d.ts +23 -0
  80. package/dist/components/LabShell/LabExample.vue.d.ts.map +1 -0
  81. package/dist/components/LabShell/LabExampleCaption.vue.d.ts +23 -0
  82. package/dist/components/LabShell/LabExampleCaption.vue.d.ts.map +1 -0
  83. package/dist/components/LabShell/LabExampleCode.vue.d.ts +23 -0
  84. package/dist/components/LabShell/LabExampleCode.vue.d.ts.map +1 -0
  85. package/dist/components/LabShell/LabExampleDemo.vue.d.ts +27 -0
  86. package/dist/components/LabShell/LabExampleDemo.vue.d.ts.map +1 -0
  87. package/dist/components/LabShell/LabExampleLabel.vue.d.ts +23 -0
  88. package/dist/components/LabShell/LabExampleLabel.vue.d.ts.map +1 -0
  89. package/dist/components/LabShell/LabExampleMeta.vue.d.ts +23 -0
  90. package/dist/components/LabShell/LabExampleMeta.vue.d.ts.map +1 -0
  91. package/dist/components/LabShell/LabHeader.vue.d.ts +23 -0
  92. package/dist/components/LabShell/LabHeader.vue.d.ts.map +1 -0
  93. package/dist/components/LabShell/LabHeaderLead.vue.d.ts +23 -0
  94. package/dist/components/LabShell/LabHeaderLead.vue.d.ts.map +1 -0
  95. package/dist/components/LabShell/LabHeaderMeta.vue.d.ts +23 -0
  96. package/dist/components/LabShell/LabHeaderMeta.vue.d.ts.map +1 -0
  97. package/dist/components/LabShell/LabHeaderMetaItem.vue.d.ts +23 -0
  98. package/dist/components/LabShell/LabHeaderMetaItem.vue.d.ts.map +1 -0
  99. package/dist/components/LabShell/LabHeaderMetaLabel.vue.d.ts +23 -0
  100. package/dist/components/LabShell/LabHeaderMetaLabel.vue.d.ts.map +1 -0
  101. package/dist/components/LabShell/LabHeaderMetaValue.vue.d.ts +23 -0
  102. package/dist/components/LabShell/LabHeaderMetaValue.vue.d.ts.map +1 -0
  103. package/dist/components/LabShell/LabHeaderTitle.vue.d.ts +23 -0
  104. package/dist/components/LabShell/LabHeaderTitle.vue.d.ts.map +1 -0
  105. package/dist/components/LabShell/LabMain.vue.d.ts +23 -0
  106. package/dist/components/LabShell/LabMain.vue.d.ts.map +1 -0
  107. package/dist/components/LabShell/LabSection.vue.d.ts +23 -0
  108. package/dist/components/LabShell/LabSection.vue.d.ts.map +1 -0
  109. package/dist/components/LabShell/LabSectionBody.vue.d.ts +23 -0
  110. package/dist/components/LabShell/LabSectionBody.vue.d.ts.map +1 -0
  111. package/dist/components/LabShell/LabSectionHead.vue.d.ts +23 -0
  112. package/dist/components/LabShell/LabSectionHead.vue.d.ts.map +1 -0
  113. package/dist/components/LabShell/LabSectionHeadNote.vue.d.ts +23 -0
  114. package/dist/components/LabShell/LabSectionHeadNote.vue.d.ts.map +1 -0
  115. package/dist/components/LabShell/LabShell.vue.d.ts +23 -0
  116. package/dist/components/LabShell/LabShell.vue.d.ts.map +1 -0
  117. package/dist/components/LabShell/LabSidebar.vue.d.ts +23 -0
  118. package/dist/components/LabShell/LabSidebar.vue.d.ts.map +1 -0
  119. package/dist/components/LabShell/LabSidebarGroup.vue.d.ts +23 -0
  120. package/dist/components/LabShell/LabSidebarGroup.vue.d.ts.map +1 -0
  121. package/dist/components/LabShell/LabSidebarGroupDot.vue.d.ts +8 -0
  122. package/dist/components/LabShell/LabSidebarGroupDot.vue.d.ts.map +1 -0
  123. package/dist/components/LabShell/LabSidebarGroupLabel.vue.d.ts +23 -0
  124. package/dist/components/LabShell/LabSidebarGroupLabel.vue.d.ts.map +1 -0
  125. package/dist/components/LabShell/LabSidebarGroupLink.vue.d.ts +25 -0
  126. package/dist/components/LabShell/LabSidebarGroupLink.vue.d.ts.map +1 -0
  127. package/dist/components/LabShell/LabSidebarGroupList.vue.d.ts +23 -0
  128. package/dist/components/LabShell/LabSidebarGroupList.vue.d.ts.map +1 -0
  129. package/dist/components/LabShell/LabSidebarHead.vue.d.ts +23 -0
  130. package/dist/components/LabShell/LabSidebarHead.vue.d.ts.map +1 -0
  131. package/dist/components/LabShell/LabSidebarScroll.vue.d.ts +23 -0
  132. package/dist/components/LabShell/LabSidebarScroll.vue.d.ts.map +1 -0
  133. package/dist/components/LabShell/LabTaxonomy.vue.d.ts +23 -0
  134. package/dist/components/LabShell/LabTaxonomy.vue.d.ts.map +1 -0
  135. package/dist/components/LabShell/LabTaxonomyList.vue.d.ts +23 -0
  136. package/dist/components/LabShell/LabTaxonomyList.vue.d.ts.map +1 -0
  137. package/dist/components/LabShell/LabTaxonomyTitle.vue.d.ts +23 -0
  138. package/dist/components/LabShell/LabTaxonomyTitle.vue.d.ts.map +1 -0
  139. package/dist/components/LabShell/index.d.ts +35 -0
  140. package/dist/components/LabShell/index.d.ts.map +1 -0
  141. package/dist/components/LabTip/LabTip.vue.d.ts +25 -0
  142. package/dist/components/LabTip/LabTip.vue.d.ts.map +1 -0
  143. package/dist/components/LabTip/LabTipBubble.vue.d.ts +26 -0
  144. package/dist/components/LabTip/LabTipBubble.vue.d.ts.map +1 -0
  145. package/dist/components/LabTip/index.d.ts +3 -0
  146. package/dist/components/LabTip/index.d.ts.map +1 -0
  147. package/dist/components/LabUtilCell/LabUtilCell.vue.d.ts +23 -0
  148. package/dist/components/LabUtilCell/LabUtilCell.vue.d.ts.map +1 -0
  149. package/dist/components/LabUtilCell/LabUtilCellBlock.vue.d.ts +23 -0
  150. package/dist/components/LabUtilCell/LabUtilCellBlock.vue.d.ts.map +1 -0
  151. package/dist/components/LabUtilCell/LabUtilCellCaption.vue.d.ts +23 -0
  152. package/dist/components/LabUtilCell/LabUtilCellCaption.vue.d.ts.map +1 -0
  153. package/dist/components/LabUtilCell/LabUtilCellCode.vue.d.ts +23 -0
  154. package/dist/components/LabUtilCell/LabUtilCellCode.vue.d.ts.map +1 -0
  155. package/dist/components/LabUtilCell/LabUtilCellDemo.vue.d.ts +23 -0
  156. package/dist/components/LabUtilCell/LabUtilCellDemo.vue.d.ts.map +1 -0
  157. package/dist/components/LabUtilCell/LabUtilRow.vue.d.ts +23 -0
  158. package/dist/components/LabUtilCell/LabUtilRow.vue.d.ts.map +1 -0
  159. package/dist/components/LabUtilCell/index.d.ts +7 -0
  160. package/dist/components/LabUtilCell/index.d.ts.map +1 -0
  161. package/dist/components/Swatch/Swatch.vue.d.ts +12 -0
  162. package/dist/components/Swatch/Swatch.vue.d.ts.map +1 -0
  163. package/dist/components/Swatch/SwatchGrid.vue.d.ts +23 -0
  164. package/dist/components/Swatch/SwatchGrid.vue.d.ts.map +1 -0
  165. package/dist/components/Swatch/index.d.ts +3 -0
  166. package/dist/components/Swatch/index.d.ts.map +1 -0
  167. package/dist/components/TokenSpecimen/TokenSpecimen.vue.d.ts +23 -0
  168. package/dist/components/TokenSpecimen/TokenSpecimen.vue.d.ts.map +1 -0
  169. package/dist/components/TokenSpecimen/TokenSpecimenBox.vue.d.ts +10 -0
  170. package/dist/components/TokenSpecimen/TokenSpecimenBox.vue.d.ts.map +1 -0
  171. package/dist/components/TokenSpecimen/TokenSpecimenGrid.vue.d.ts +23 -0
  172. package/dist/components/TokenSpecimen/TokenSpecimenGrid.vue.d.ts.map +1 -0
  173. package/dist/components/TokenSpecimen/TokenSpecimenSpacer.vue.d.ts +9 -0
  174. package/dist/components/TokenSpecimen/TokenSpecimenSpacer.vue.d.ts.map +1 -0
  175. package/dist/components/TokenSpecimen/index.d.ts +5 -0
  176. package/dist/components/TokenSpecimen/index.d.ts.map +1 -0
  177. package/dist/components/TypeSpecimen/TypeSpecimen.vue.d.ts +23 -0
  178. package/dist/components/TypeSpecimen/TypeSpecimen.vue.d.ts.map +1 -0
  179. package/dist/components/TypeSpecimen/TypeSpecimenMeta.vue.d.ts +23 -0
  180. package/dist/components/TypeSpecimen/TypeSpecimenMeta.vue.d.ts.map +1 -0
  181. package/dist/components/TypeSpecimen/index.d.ts +3 -0
  182. package/dist/components/TypeSpecimen/index.d.ts.map +1 -0
  183. package/dist/css/strand-ui.css +1312 -82
  184. package/dist/index.d.ts +12 -0
  185. package/dist/index.d.ts.map +1 -1
  186. package/dist/index.js +1797 -756
  187. package/dist/index.js.map +1 -1
  188. package/package.json +2 -2
  189. package/src/components/CardSection/CardSection.test.ts +51 -0
  190. package/src/components/CardSection/CardSection.vue +42 -0
  191. package/src/components/CardSection/index.ts +1 -0
  192. package/src/components/ContainerScale/ContainerScale.test.ts +42 -0
  193. package/src/components/ContainerScale/ContainerScale.vue +8 -0
  194. package/src/components/ContainerScale/ContainerScaleAxis.vue +8 -0
  195. package/src/components/ContainerScale/ContainerScaleBar.vue +17 -0
  196. package/src/components/ContainerScale/ContainerScaleCaption.vue +8 -0
  197. package/src/components/ContainerScale/ContainerScaleLabel.vue +8 -0
  198. package/src/components/ContainerScale/ContainerScalePx.vue +8 -0
  199. package/src/components/ContainerScale/ContainerScaleRow.vue +8 -0
  200. package/src/components/ContainerScale/ContainerScaleTrack.vue +8 -0
  201. package/src/components/ContainerScale/index.ts +8 -0
  202. package/src/components/KvEditorial/KvEditorial.test.ts +43 -0
  203. package/src/components/KvEditorial/KvEditorial.vue +56 -0
  204. package/src/components/KvEditorial/index.ts +1 -0
  205. package/src/components/LabFrame/LabFrame.test.ts +89 -0
  206. package/src/components/LabFrame/LabFrame.vue +8 -0
  207. package/src/components/LabFrame/LabFrameActions.vue +8 -0
  208. package/src/components/LabFrame/LabFrameBody.vue +8 -0
  209. package/src/components/LabFrame/LabFrameChrome.vue +8 -0
  210. package/src/components/LabFrame/LabFrameContent.vue +17 -0
  211. package/src/components/LabFrame/LabFrameContentHead.vue +8 -0
  212. package/src/components/LabFrame/LabFrameDot.vue +15 -0
  213. package/src/components/LabFrame/LabFrameOverlay.vue +8 -0
  214. package/src/components/LabFrame/LabFramePanel.vue +11 -0
  215. package/src/components/LabFrame/LabFramePanelBody.vue +8 -0
  216. package/src/components/LabFrame/LabFramePanelClose.vue +26 -0
  217. package/src/components/LabFrame/LabFramePanelFooter.vue +8 -0
  218. package/src/components/LabFrame/LabFramePanelHeader.vue +8 -0
  219. package/src/components/LabFrame/LabFramePanelTitle.vue +8 -0
  220. package/src/components/LabFrame/LabFrameTitle.vue +8 -0
  221. package/src/components/LabFrame/index.ts +15 -0
  222. package/src/components/LabGlassStage/LabGlassPanel.vue +8 -0
  223. package/src/components/LabGlassStage/LabGlassStage.test.ts +16 -0
  224. package/src/components/LabGlassStage/LabGlassStage.vue +8 -0
  225. package/src/components/LabGlassStage/index.ts +2 -0
  226. package/src/components/LabRevealStage/LabRevealLine.vue +8 -0
  227. package/src/components/LabRevealStage/LabRevealStage.test.ts +16 -0
  228. package/src/components/LabRevealStage/LabRevealStage.vue +8 -0
  229. package/src/components/LabRevealStage/index.ts +2 -0
  230. package/src/components/LabShell/LabBrand.vue +8 -0
  231. package/src/components/LabShell/LabBrandMark.vue +8 -0
  232. package/src/components/LabShell/LabBrandSub.vue +8 -0
  233. package/src/components/LabShell/LabBrandTitle.vue +8 -0
  234. package/src/components/LabShell/LabExample.vue +8 -0
  235. package/src/components/LabShell/LabExampleCaption.vue +8 -0
  236. package/src/components/LabShell/LabExampleCode.vue +8 -0
  237. package/src/components/LabShell/LabExampleDemo.vue +30 -0
  238. package/src/components/LabShell/LabExampleLabel.vue +8 -0
  239. package/src/components/LabShell/LabExampleMeta.vue +8 -0
  240. package/src/components/LabShell/LabHeader.vue +8 -0
  241. package/src/components/LabShell/LabHeaderLead.vue +8 -0
  242. package/src/components/LabShell/LabHeaderMeta.vue +8 -0
  243. package/src/components/LabShell/LabHeaderMetaItem.vue +8 -0
  244. package/src/components/LabShell/LabHeaderMetaLabel.vue +8 -0
  245. package/src/components/LabShell/LabHeaderMetaValue.vue +8 -0
  246. package/src/components/LabShell/LabHeaderTitle.vue +8 -0
  247. package/src/components/LabShell/LabMain.vue +8 -0
  248. package/src/components/LabShell/LabSection.vue +8 -0
  249. package/src/components/LabShell/LabSectionBody.vue +8 -0
  250. package/src/components/LabShell/LabSectionHead.vue +8 -0
  251. package/src/components/LabShell/LabSectionHeadNote.vue +8 -0
  252. package/src/components/LabShell/LabShell.test.ts +166 -0
  253. package/src/components/LabShell/LabShell.vue +12 -0
  254. package/src/components/LabShell/LabSidebar.vue +8 -0
  255. package/src/components/LabShell/LabSidebarGroup.vue +8 -0
  256. package/src/components/LabShell/LabSidebarGroupDot.vue +8 -0
  257. package/src/components/LabShell/LabSidebarGroupLabel.vue +8 -0
  258. package/src/components/LabShell/LabSidebarGroupLink.vue +14 -0
  259. package/src/components/LabShell/LabSidebarGroupList.vue +8 -0
  260. package/src/components/LabShell/LabSidebarHead.vue +8 -0
  261. package/src/components/LabShell/LabSidebarScroll.vue +8 -0
  262. package/src/components/LabShell/LabTaxonomy.vue +8 -0
  263. package/src/components/LabShell/LabTaxonomyList.vue +8 -0
  264. package/src/components/LabShell/LabTaxonomyTitle.vue +8 -0
  265. package/src/components/LabShell/index.ts +34 -0
  266. package/src/components/LabTip/LabTip.test.ts +39 -0
  267. package/src/components/LabTip/LabTip.vue +18 -0
  268. package/src/components/LabTip/LabTipBubble.vue +19 -0
  269. package/src/components/LabTip/index.ts +2 -0
  270. package/src/components/LabUtilCell/LabUtilCell.test.ts +25 -0
  271. package/src/components/LabUtilCell/LabUtilCell.vue +8 -0
  272. package/src/components/LabUtilCell/LabUtilCellBlock.vue +8 -0
  273. package/src/components/LabUtilCell/LabUtilCellCaption.vue +8 -0
  274. package/src/components/LabUtilCell/LabUtilCellCode.vue +8 -0
  275. package/src/components/LabUtilCell/LabUtilCellDemo.vue +8 -0
  276. package/src/components/LabUtilCell/LabUtilRow.vue +8 -0
  277. package/src/components/LabUtilCell/index.ts +6 -0
  278. package/src/components/Swatch/Swatch.test.ts +29 -0
  279. package/src/components/Swatch/Swatch.vue +23 -0
  280. package/src/components/Swatch/SwatchGrid.vue +8 -0
  281. package/src/components/Swatch/index.ts +2 -0
  282. package/src/components/TokenSpecimen/TokenSpecimen.test.ts +41 -0
  283. package/src/components/TokenSpecimen/TokenSpecimen.vue +8 -0
  284. package/src/components/TokenSpecimen/TokenSpecimenBox.vue +23 -0
  285. package/src/components/TokenSpecimen/TokenSpecimenGrid.vue +8 -0
  286. package/src/components/TokenSpecimen/TokenSpecimenSpacer.vue +20 -0
  287. package/src/components/TokenSpecimen/index.ts +4 -0
  288. package/src/components/TypeSpecimen/TypeSpecimen.test.ts +17 -0
  289. package/src/components/TypeSpecimen/TypeSpecimen.vue +8 -0
  290. package/src/components/TypeSpecimen/TypeSpecimenMeta.vue +8 -0
  291. package/src/components/TypeSpecimen/index.ts +2 -0
  292. package/src/index.ts +18 -0
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/components/Button/Button.vue","../src/components/Input/Input.vue","../src/components/Textarea/Textarea.vue","../src/components/Select/Select.vue","../src/components/Checkbox/Checkbox.vue","../src/components/Radio/Radio.vue","../src/components/Switch/Switch.vue","../src/components/Slider/Slider.vue","../src/components/FormField/FormField.vue","../src/components/Card/Card.vue","../src/components/Badge/Badge.vue","../src/components/Avatar/Avatar.vue","../src/components/Tag/Tag.vue","../src/components/Table/Table.vue","../src/components/DataReadout/DataReadout.vue","../src/components/CodeBlock/CodeBlock.vue","../src/components/Stack/Stack.vue","../src/components/Grid/Grid.vue","../src/components/Container/Container.vue","../src/components/Divider/Divider.vue","../src/components/Section/Section.vue","../src/components/InstrumentViewport/InstrumentViewport.vue","../src/components/ScrollReveal/ScrollReveal.vue","../src/components/Link/Link.vue","../src/components/Tabs/Tabs.vue","../src/components/Breadcrumb/Breadcrumb.vue","../src/components/Nav/Nav.vue","../src/components/Toast/Toast.vue","../src/components/Toast/useToast.ts","../src/components/Toast/ToastProvider.vue","../src/components/Alert/Alert.vue","../src/components/Dialog/Dialog.vue","../src/components/Tooltip/Tooltip.vue","../src/components/Progress/Progress.vue","../src/components/Spinner/Spinner.vue","../src/components/Skeleton/Skeleton.vue","../src/components/StarRating/StarRating.vue"],"sourcesContent":["<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Primary action trigger with multiple visual variants and sizes.\n\n @example\n ```vue\n <script setup>\n import { Button } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <Button variant=\"primary\" size=\"md\" @click=\"handleClick\">\n Submit\n </Button>\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nexport interface ButtonProps {\n /** Visual style variant */\n variant?: 'primary' | 'secondary' | 'ghost' | 'danger'\n /** Button size */\n size?: 'sm' | 'md' | 'lg'\n /** Show loading spinner and disable interaction */\n loading?: boolean\n /** Square button for icon-only use */\n iconOnly?: boolean\n /** HTML button type */\n type?: 'button' | 'submit' | 'reset'\n /** Disabled state */\n disabled?: boolean\n /** Stretch to full container width */\n fullWidth?: boolean\n}\n\nconst props = withDefaults(defineProps<ButtonProps>(), {\n variant: 'primary',\n size: 'md',\n loading: false,\n iconOnly: false,\n type: 'button',\n disabled: false,\n fullWidth: false,\n})\n\nconst emit = defineEmits<{\n (e: 'click', event: MouseEvent): void\n}>()\n\nconst isDisabled = computed(() => props.disabled || props.loading)\n\nconst classes = computed(() =>\n [\n 'strand-btn',\n `strand-btn--${props.variant}`,\n `strand-btn--${props.size}`,\n props.iconOnly && 'strand-btn--icon-only',\n props.fullWidth && 'strand-btn--full-width',\n props.loading && 'strand-btn--loading',\n ]\n .filter(Boolean)\n .join(' '),\n)\n\nfunction handleClick(event: MouseEvent) {\n if (!isDisabled.value) {\n emit('click', event)\n }\n}\n</script>\n\n<template>\n <button\n :type=\"type\"\n :class=\"classes\"\n :disabled=\"isDisabled\"\n :aria-disabled=\"isDisabled ? 'true' : undefined\"\n :aria-busy=\"loading ? 'true' : undefined\"\n @click=\"handleClick\"\n >\n <span v-if=\"loading\" class=\"strand-btn__spinner\" aria-hidden=\"true\" />\n <span\n class=\"strand-btn__content\"\n :style=\"loading ? { visibility: 'hidden' } : undefined\"\n >\n <slot />\n </span>\n </button>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Text input field with optional leading/trailing addons and error state.\n\n @example\n ```vue\n <script setup>\n import { Input } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <Input type=\"email\" placeholder=\"you@example.com\" />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed, useSlots } from 'vue'\n\nexport interface InputProps {\n /** Input type */\n type?: 'text' | 'email' | 'password' | 'search' | 'number'\n /** Show error styling */\n error?: boolean\n /** Disabled state */\n disabled?: boolean\n /** Current value */\n modelValue?: string\n}\n\nconst props = withDefaults(defineProps<InputProps>(), {\n type: 'text',\n error: false,\n disabled: false,\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: string): void\n}>()\n\nconst slots = useSlots()\n\nconst wrapperClasses = computed(() =>\n [\n 'strand-input',\n props.error && 'strand-input--error',\n props.disabled && 'strand-input--disabled',\n !!slots.leading && 'strand-input--has-leading',\n !!slots.trailing && 'strand-input--has-trailing',\n ]\n .filter(Boolean)\n .join(' '),\n)\n\nfunction handleInput(event: Event) {\n const target = event.target as HTMLInputElement\n emit('update:modelValue', target.value)\n}\n</script>\n\n<template>\n <div :class=\"wrapperClasses\">\n <span v-if=\"$slots.leading\" class=\"strand-input__leading\" aria-hidden=\"true\">\n <slot name=\"leading\" />\n </span>\n <input\n :type=\"type\"\n class=\"strand-input__field\"\n :disabled=\"disabled\"\n :aria-invalid=\"error ? 'true' : undefined\"\n :value=\"modelValue\"\n @input=\"handleInput\"\n />\n <span v-if=\"$slots.trailing\" class=\"strand-input__trailing\" aria-hidden=\"true\">\n <slot name=\"trailing\" />\n </span>\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Multi-line text input with auto-resize, character count, and error state.\n\n @example\n ```vue\n <script setup>\n import { ref } from 'vue';\n import { Textarea } from '@dillingerstaffing/strand-vue';\n const text = ref('');\n </script>\n\n <template>\n <Textarea v-model:value=\"text\" :max-length=\"500\" show-count auto-resize />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed, ref, onMounted, watch } from 'vue'\n\nexport interface TextareaProps {\n /** Auto-resize to fit content */\n autoResize?: boolean\n /** Show character count (requires maxLength) */\n showCount?: boolean\n /** Show error styling */\n error?: boolean\n /** Maximum character count */\n maxLength?: number\n /** Disabled state */\n disabled?: boolean\n /** Controlled value */\n modelValue?: string\n}\n\nconst props = withDefaults(defineProps<TextareaProps>(), {\n autoResize: false,\n showCount: false,\n error: false,\n disabled: false,\n modelValue: '',\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: string): void\n}>()\n\nconst textareaRef = ref<HTMLTextAreaElement | null>(null)\n\nconst wrapperClasses = computed(() =>\n [\n 'strand-textarea',\n props.error && 'strand-textarea--error',\n props.disabled && 'strand-textarea--disabled',\n props.autoResize && 'strand-textarea--auto-resize',\n ]\n .filter(Boolean)\n .join(' '),\n)\n\nconst currentLength = computed(() =>\n typeof props.modelValue === 'string' ? props.modelValue.length : 0,\n)\n\nfunction resize() {\n if (props.autoResize && textareaRef.value) {\n textareaRef.value.style.height = 'auto'\n textareaRef.value.style.height = `${textareaRef.value.scrollHeight}px`\n }\n}\n\nfunction handleInput(event: Event) {\n const target = event.target as HTMLTextAreaElement\n emit('update:modelValue', target.value)\n resize()\n}\n\nwatch(() => props.modelValue, () => {\n resize()\n})\n\nonMounted(() => {\n resize()\n})\n</script>\n\n<template>\n <div :class=\"wrapperClasses\">\n <textarea\n ref=\"textareaRef\"\n class=\"strand-textarea__field\"\n :disabled=\"disabled\"\n :aria-invalid=\"error ? 'true' : undefined\"\n :maxlength=\"maxLength\"\n :value=\"modelValue\"\n @input=\"handleInput\"\n />\n <span\n v-if=\"showCount && maxLength != null\"\n class=\"strand-textarea__count\"\n aria-live=\"polite\"\n >\n {{ currentLength }}/{{ maxLength }}\n </span>\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Native select dropdown with styled wrapper, error state, and placeholder support.\n\n @example\n ```vue\n <script setup>\n import { ref } from 'vue';\n import { Select } from '@dillingerstaffing/strand-vue';\n const role = ref('eng');\n const options = [\n { value: 'eng', label: 'Engineer' },\n { value: 'design', label: 'Designer' },\n ];\n </script>\n\n <template>\n <Select placeholder=\"Choose a role\" :options=\"options\" v-model:value=\"role\" />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nexport interface SelectOption {\n value: string\n label: string\n}\n\nexport interface SelectProps {\n /** Array of options to display */\n options: SelectOption[]\n /** Disabled state */\n disabled?: boolean\n /** Currently selected value */\n modelValue?: string\n /** Show error styling */\n error?: boolean\n /** Placeholder text shown as first disabled option */\n placeholder?: string\n}\n\nconst props = withDefaults(defineProps<SelectProps>(), {\n disabled: false,\n error: false,\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: string): void\n}>()\n\nconst wrapperClasses = computed(() =>\n [\n 'strand-select',\n props.error && 'strand-select--error',\n props.disabled && 'strand-select--disabled',\n ]\n .filter(Boolean)\n .join(' '),\n)\n\nfunction handleChange(event: Event) {\n const target = event.target as HTMLSelectElement\n emit('update:modelValue', target.value)\n}\n</script>\n\n<template>\n <div :class=\"wrapperClasses\">\n <select\n class=\"strand-select__field\"\n :value=\"modelValue\"\n :disabled=\"disabled\"\n :aria-invalid=\"error ? 'true' : undefined\"\n @change=\"handleChange\"\n >\n <option v-if=\"placeholder\" value=\"\" disabled>\n {{ placeholder }}\n </option>\n <option\n v-for=\"opt in options\"\n :key=\"opt.value\"\n :value=\"opt.value\"\n >\n {{ opt.label }}\n </option>\n </select>\n <span class=\"strand-select__arrow\" aria-hidden=\"true\" />\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Toggle control for boolean or indeterminate selections with optional label.\n\n @example\n ```vue\n <script setup>\n import { ref } from 'vue';\n import { Checkbox } from '@dillingerstaffing/strand-vue';\n const accepted = ref(false);\n </script>\n\n <template>\n <Checkbox v-model:checked=\"accepted\" label=\"Accept terms\" />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed, ref, watch, onMounted } from 'vue'\n\nexport interface CheckboxProps {\n /** Controlled checked state */\n checked?: boolean\n /** Indeterminate visual state */\n indeterminate?: boolean\n /** Disabled state */\n disabled?: boolean\n /** Label text */\n label?: string\n}\n\nconst props = withDefaults(defineProps<CheckboxProps>(), {\n checked: false,\n indeterminate: false,\n disabled: false,\n})\n\nconst emit = defineEmits<{\n (e: 'change', event: Event): void\n}>()\n\nconst inputRef = ref<HTMLInputElement | null>(null)\n\nonMounted(() => {\n if (inputRef.value) {\n inputRef.value.indeterminate = props.indeterminate\n }\n})\n\nwatch(() => props.indeterminate, (val) => {\n if (inputRef.value) {\n inputRef.value.indeterminate = val\n }\n})\n\nconst classes = computed(() =>\n [\n 'strand-checkbox',\n props.checked && 'strand-checkbox--checked',\n props.indeterminate && 'strand-checkbox--indeterminate',\n props.disabled && 'strand-checkbox--disabled',\n ]\n .filter(Boolean)\n .join(' '),\n)\n\nconst ariaChecked = computed(() =>\n props.indeterminate ? 'mixed' : props.checked ? 'true' : 'false',\n)\n\nfunction handleChange(event: Event) {\n if (!props.disabled) {\n emit('change', event)\n }\n}\n\nfunction handleKeyDown(event: KeyboardEvent) {\n if (event.key === ' ' && !props.disabled) {\n event.preventDefault()\n if (inputRef.value) {\n inputRef.value.click()\n }\n }\n}\n</script>\n\n<template>\n <label :class=\"classes\" @keydown=\"handleKeyDown\">\n <input\n ref=\"inputRef\"\n type=\"checkbox\"\n class=\"strand-checkbox__native\"\n :checked=\"checked\"\n :disabled=\"disabled\"\n :aria-checked=\"ariaChecked\"\n role=\"checkbox\"\n @change=\"handleChange\"\n />\n <span class=\"strand-checkbox__control\" aria-hidden=\"true\">\n <svg\n v-if=\"indeterminate\"\n class=\"strand-checkbox__icon\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <line\n x1=\"4\"\n y1=\"8\"\n x2=\"12\"\n y2=\"8\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n />\n </svg>\n <svg\n v-else-if=\"checked\"\n class=\"strand-checkbox__icon\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <path\n d=\"M3.5 8L6.5 11L12.5 5\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </span>\n <span v-if=\"label\" class=\"strand-checkbox__label\">{{ label }}</span>\n </label>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Single-selection control for use within a radio group.\n\n @example\n ```vue\n <script setup>\n import { ref } from 'vue';\n import { Radio } from '@dillingerstaffing/strand-vue';\n const selected = ref('pro');\n </script>\n\n <template>\n <Radio name=\"plan\" value=\"pro\" label=\"Pro\" :checked=\"selected === 'pro'\" @change=\"selected = 'pro'\" />\n <Radio name=\"plan\" value=\"free\" label=\"Free\" :checked=\"selected === 'free'\" @change=\"selected = 'free'\" />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nexport interface RadioProps {\n /** Controlled checked state */\n checked?: boolean\n /** Disabled state */\n disabled?: boolean\n /** Label text */\n label?: string\n /** Radio group name */\n name?: string\n /** Radio value */\n value?: string\n}\n\nconst props = withDefaults(defineProps<RadioProps>(), {\n checked: false,\n disabled: false,\n})\n\nconst emit = defineEmits<{\n (e: 'change', event: Event): void\n}>()\n\nconst classes = computed(() =>\n [\n 'strand-radio',\n props.checked && 'strand-radio--checked',\n props.disabled && 'strand-radio--disabled',\n ]\n .filter(Boolean)\n .join(' '),\n)\n\nfunction handleChange(event: Event) {\n if (!props.disabled) {\n emit('change', event)\n }\n}\n</script>\n\n<template>\n <label :class=\"classes\">\n <input\n type=\"radio\"\n class=\"strand-radio__native\"\n :checked=\"checked\"\n :disabled=\"disabled\"\n :name=\"name\"\n :value=\"value\"\n @change=\"handleChange\"\n />\n <span class=\"strand-radio__control\" aria-hidden=\"true\">\n <span class=\"strand-radio__dot\" />\n </span>\n <span v-if=\"label\" class=\"strand-radio__label\">{{ label }}</span>\n </label>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Toggle switch for binary on/off settings with optional inline label.\n\n @example\n ```vue\n <script setup>\n import { ref } from 'vue';\n import { Switch } from '@dillingerstaffing/strand-vue';\n const darkMode = ref(false);\n </script>\n\n <template>\n <Switch v-model:checked=\"darkMode\" label=\"Dark mode\" />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nexport interface SwitchProps {\n /** Controlled checked state */\n checked?: boolean\n /** Disabled state */\n disabled?: boolean\n /** Inline label text */\n label?: string\n}\n\nconst props = withDefaults(defineProps<SwitchProps>(), {\n checked: false,\n disabled: false,\n})\n\nconst emit = defineEmits<{\n (e: 'change', checked: boolean): void\n}>()\n\nconst classes = computed(() =>\n [\n 'strand-switch',\n props.checked && 'strand-switch--checked',\n props.disabled && 'strand-switch--disabled',\n ]\n .filter(Boolean)\n .join(' '),\n)\n\nfunction handleClick() {\n if (!props.disabled) {\n emit('change', !props.checked)\n }\n}\n\nfunction handleKeyDown(event: KeyboardEvent) {\n if ((event.key === ' ' || event.key === 'Enter') && !props.disabled) {\n event.preventDefault()\n emit('change', !props.checked)\n }\n}\n</script>\n\n<template>\n <label :class=\"classes\">\n <button\n type=\"button\"\n role=\"switch\"\n class=\"strand-switch__track\"\n :aria-checked=\"checked ? 'true' : 'false'\"\n :disabled=\"disabled\"\n @click=\"handleClick\"\n @keydown=\"handleKeyDown\"\n >\n <span class=\"strand-switch__thumb\" aria-hidden=\"true\" />\n </button>\n <span v-if=\"label\" class=\"strand-switch__label\">{{ label }}</span>\n </label>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Range input control for selecting a numeric value within a bounded interval.\n\n @example\n ```vue\n <script setup>\n import { ref } from 'vue';\n import { Slider } from '@dillingerstaffing/strand-vue';\n const value = ref(50);\n </script>\n\n <template>\n <Slider :min=\"0\" :max=\"100\" :step=\"5\" v-model:value=\"value\" />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nexport interface SliderProps {\n /** Minimum value */\n min?: number\n /** Maximum value */\n max?: number\n /** Step increment */\n step?: number\n /** Current value */\n modelValue?: number\n /** Disabled state */\n disabled?: boolean\n}\n\nconst props = withDefaults(defineProps<SliderProps>(), {\n min: 0,\n max: 100,\n step: 1,\n disabled: false,\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: number): void\n}>()\n\nconst wrapperClasses = computed(() =>\n [\n 'strand-slider',\n props.disabled && 'strand-slider--disabled',\n ]\n .filter(Boolean)\n .join(' '),\n)\n\nfunction handleInput(event: Event) {\n const target = event.target as HTMLInputElement\n emit('update:modelValue', Number(target.value))\n}\n</script>\n\n<template>\n <div :class=\"wrapperClasses\">\n <input\n type=\"range\"\n class=\"strand-slider__field\"\n :min=\"min\"\n :max=\"max\"\n :step=\"step\"\n :value=\"modelValue\"\n :disabled=\"disabled\"\n :aria-valuemin=\"min\"\n :aria-valuemax=\"max\"\n :aria-valuenow=\"modelValue\"\n @input=\"handleInput\"\n />\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Form control wrapper providing label, hint text, error messaging, and required indicator.\n\n @example\n ```vue\n <script setup>\n import { FormField, Input } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <FormField label=\"Email\" html-for=\"email\" hint=\"Work email preferred\" required>\n <Input id=\"email\" type=\"email\" />\n </FormField>\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nexport interface FormFieldProps {\n /** Label text */\n label: string\n /** Associates the label with a form control */\n htmlFor: string\n /** Hint text displayed below the input */\n hint?: string\n /** Error text displayed below the input (replaces hint) */\n error?: string\n /** Show required indicator */\n required?: boolean\n}\n\nconst props = withDefaults(defineProps<FormFieldProps>(), {\n required: false,\n})\n\nconst classes = computed(() =>\n [\n 'strand-form-field',\n props.error && 'strand-form-field--error',\n ]\n .filter(Boolean)\n .join(' '),\n)\n</script>\n\n<template>\n <div :class=\"classes\">\n <label class=\"strand-form-field__label\" :for=\"htmlFor\">\n {{ label }}\n <span v-if=\"required\" class=\"strand-form-field__required\" aria-hidden=\"true\">\n *\n </span>\n </label>\n <div class=\"strand-form-field__control\">\n <slot />\n </div>\n <p\n v-if=\"error\"\n class=\"strand-form-field__error\"\n :id=\"`${htmlFor}-error`\"\n role=\"alert\"\n >\n {{ error }}\n </p>\n <p\n v-else-if=\"hint\"\n class=\"strand-form-field__hint\"\n :id=\"`${htmlFor}-hint`\"\n >\n {{ hint }}\n </p>\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Contained surface for grouping related content with elevation and padding options.\n\n @example\n ```vue\n <script setup>\n import { Card } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <Card variant=\"elevated\" padding=\"lg\">\n <h3>Card Title</h3>\n <p>Card content goes here.</p>\n </Card>\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n /** Visual style variant */\n variant?: 'elevated' | 'outlined' | 'interactive'\n /** Inner padding */\n padding?: 'none' | 'sm' | 'md' | 'lg'\n /** Additional CSS class */\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n variant: 'elevated',\n padding: 'md',\n className: '',\n})\n\nconst classes = computed(() =>\n [\n 'strand-card',\n `strand-card--${props.variant}`,\n `strand-card--pad-${props.padding}`,\n props.className,\n ]\n .filter(Boolean)\n .join(' '),\n)\n</script>\n\n<template>\n <div :class=\"classes\" v-bind=\"$attrs\">\n <slot />\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Small status indicator or notification count, displayed inline or overlaid on content.\n\n @example\n ```vue\n <script setup>\n import { Badge } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <Badge variant=\"count\" status=\"red\" :count=\"5\">\n <button>Notifications</button>\n </Badge>\n <Badge variant=\"dot\" status=\"teal\" />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed, useSlots } from 'vue'\n\ninterface Props {\n /** Badge display mode */\n variant?: 'dot' | 'count'\n /** Color status */\n status?: 'default' | 'teal' | 'blue' | 'amber' | 'red'\n /** Number to display (count variant only) */\n count?: number\n /** Maximum count before showing \"N+\" */\n maxCount?: number\n /** Additional CSS class */\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n variant: 'count',\n status: 'default',\n maxCount: 99,\n className: '',\n})\n\nconst slots = useSlots()\n\nconst hasChildren = computed(() => !!slots.default)\n\nconst displayValue = computed(() => {\n if (props.variant === 'count') {\n return props.count != null && props.count > props.maxCount\n ? `${props.maxCount}+`\n : props.count\n }\n return null\n})\n\nconst ariaLabel = computed(() => {\n if (props.variant === 'dot') return 'Status indicator'\n if (props.count != null) return `${props.count} notifications`\n return undefined\n})\n\nconst badgeClasses = computed(() =>\n [\n 'strand-badge__indicator',\n `strand-badge--${props.variant}`,\n `strand-badge--${props.status}`,\n ]\n .filter(Boolean)\n .join(' '),\n)\n\nconst wrapperClasses = computed(() =>\n hasChildren.value\n ? ['strand-badge', props.className].filter(Boolean).join(' ')\n : ['strand-badge', 'strand-badge--inline', props.className].filter(Boolean).join(' '),\n)\n</script>\n\n<template>\n <span :class=\"wrapperClasses\" v-bind=\"$attrs\">\n <slot />\n <span :class=\"badgeClasses\" :aria-label=\"ariaLabel\" role=\"status\">{{ displayValue }}</span>\n </span>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Circular user representation with image, initials fallback, and multiple sizes.\n\n @example\n ```vue\n <script setup>\n import { Avatar } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <Avatar src=\"/photo.jpg\" alt=\"Jane Doe\" size=\"lg\" />\n <Avatar initials=\"JD\" size=\"md\" />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\n\ninterface Props {\n /** Image URL */\n src?: string\n /** Alt text for image */\n alt?: string\n /** Fallback initials (1-2 characters) */\n initials?: string\n /** Avatar size */\n size?: 'sm' | 'md' | 'lg' | 'xl'\n /** Additional CSS class */\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n alt: '',\n initials: '',\n size: 'md',\n className: '',\n})\n\nconst imgError = ref(false)\n\nconst handleError = () => {\n imgError.value = true\n}\n\nconst showImage = computed(() => props.src && !imgError.value)\nconst displayInitials = computed(() => props.initials.slice(0, 2).toUpperCase())\n\nconst classes = computed(() =>\n [\n 'strand-avatar',\n `strand-avatar--${props.size}`,\n props.className,\n ]\n .filter(Boolean)\n .join(' '),\n)\n</script>\n\n<template>\n <div :class=\"classes\" role=\"img\" :aria-label=\"alt || displayInitials\" v-bind=\"$attrs\">\n <img\n v-if=\"showImage\"\n class=\"strand-avatar__img\"\n :src=\"src\"\n :alt=\"alt\"\n @error=\"handleError\"\n />\n <span v-else class=\"strand-avatar__initials\" aria-hidden=\"true\">{{ displayInitials }}</span>\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Compact label for categorization, filtering, or status display.\n\n @example\n ```vue\n <script setup>\n import { Tag } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <Tag variant=\"solid\" status=\"teal\" removable @remove=\"handleRemove\">\n Active\n </Tag>\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n /** Visual style variant */\n variant?: 'solid' | 'outlined'\n /** Color status */\n status?: 'default' | 'teal' | 'blue' | 'amber' | 'red'\n /** Show remove button */\n removable?: boolean\n /** Additional CSS class */\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n variant: 'solid',\n status: 'default',\n removable: false,\n className: '',\n})\n\nconst emit = defineEmits<{\n remove: []\n}>()\n\nconst classes = computed(() =>\n [\n 'strand-tag',\n `strand-tag--${props.variant}`,\n `strand-tag--${props.status}`,\n props.className,\n ]\n .filter(Boolean)\n .join(' '),\n)\n</script>\n\n<template>\n <span :class=\"classes\" v-bind=\"$attrs\">\n <span class=\"strand-tag__text\"><slot /></span>\n <button\n v-if=\"removable\"\n type=\"button\"\n class=\"strand-tag__remove\"\n aria-label=\"Remove\"\n @click=\"emit('remove')\"\n >\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M3 3l6 6M9 3l-6 6\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n </svg>\n </button>\n </span>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Data table with column definitions, sortable headers, and row rendering.\n\n @example\n ```vue\n <script setup>\n import { Table } from '@dillingerstaffing/strand-vue';\n\n const columns = [\n { key: 'name', header: 'Name', sortable: true },\n { key: 'role', header: 'Role' },\n ];\n const data = [\n { name: 'Jane', role: 'Engineer' },\n { name: 'Alex', role: 'Designer' },\n ];\n </script>\n\n <template>\n <Table :columns=\"columns\" :data=\"data\" @sort=\"(key, dir) => console.log(key, dir)\" />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\n\nexport interface TableColumn {\n /** Unique key matching the data field */\n key: string\n /** Display header text */\n header: string\n /** Whether the column is sortable */\n sortable?: boolean\n /** Optional fixed width */\n width?: string\n}\n\nexport interface TableProps {\n /** Column definitions */\n columns: TableColumn[]\n /** Row data */\n data: Array<Record<string, unknown>>\n}\n\nconst props = defineProps<TableProps>()\n\nconst emit = defineEmits<{\n (e: 'sort', key: string, direction: 'asc' | 'desc'): void\n}>()\n\nconst sortKey = ref<string | null>(null)\nconst sortDirection = ref<'asc' | 'desc'>('asc')\n\nconst wrapperClasses = computed(() =>\n ['strand-table-wrapper'].filter(Boolean).join(' '),\n)\n\nfunction handleSort(key: string) {\n const nextDirection =\n sortKey.value === key && sortDirection.value === 'asc' ? 'desc' : 'asc'\n sortKey.value = key\n sortDirection.value = nextDirection\n emit('sort', key, nextDirection)\n}\n\nfunction sortIndicator(key: string): string {\n if (sortKey.value === key) {\n return sortDirection.value === 'asc' ? '\\u2191' : '\\u2193'\n }\n return '\\u2195'\n}\n</script>\n\n<template>\n <div :class=\"wrapperClasses\">\n <table class=\"strand-table\">\n <thead class=\"strand-table__head\">\n <tr>\n <th\n v-for=\"col in columns\"\n :key=\"col.key\"\n class=\"strand-table__th\"\n :style=\"col.width ? { width: col.width } : undefined\"\n >\n <button\n v-if=\"col.sortable\"\n type=\"button\"\n class=\"strand-table__sort-btn\"\n :aria-label=\"`Sort by ${col.header}`\"\n @click=\"handleSort(col.key)\"\n >\n {{ col.header }}\n <span class=\"strand-table__sort-indicator\" aria-hidden=\"true\">\n {{ sortIndicator(col.key) }}\n </span>\n </button>\n <template v-else>\n {{ col.header }}\n </template>\n </th>\n </tr>\n </thead>\n <tbody class=\"strand-table__body\">\n <tr\n v-for=\"(row, rowIndex) in data\"\n :key=\"rowIndex\"\n class=\"strand-table__row\"\n >\n <td\n v-for=\"col in columns\"\n :key=\"col.key\"\n class=\"strand-table__td\"\n >\n {{ row[col.key] }}\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Instrument-panel metric display with overline label and prominent value.\n\n @example\n ```vue\n <script setup>\n import { DataReadout } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <DataReadout label=\"Conversion Rate\" value=\"94%\" size=\"lg\" />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n /** Overline label text */\n label: string\n /** The large displayed value */\n value: string | number\n /** Size variant: sm (compact), md (default), lg (hero), xl (primary instrument) */\n size?: 'sm' | 'md' | 'lg' | 'xl'\n /** Additional CSS class */\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n className: '',\n})\n\nconst classes = computed(() =>\n [\n 'strand-data-readout',\n props.size && props.size !== 'md' ? `strand-data-readout--${props.size}` : '',\n props.className,\n ]\n .filter(Boolean)\n .join(' '),\n)\n</script>\n\n<template>\n <div :class=\"classes\" v-bind=\"$attrs\">\n <span class=\"strand-data-readout__label\">{{ label }}</span>\n <span class=\"strand-data-readout__value\">{{ value }}</span>\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Syntax-highlighted code display with optional language label and copy-to-clipboard.\n\n @example\n ```vue\n <script setup>\n import { CodeBlock } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <CodeBlock code=\"const x = 42;\" language=\"js\" copyable />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, ref } from 'vue'\n\ninterface Props {\n /** The code content to display */\n code: string\n /** Optional language label (e.g. \"html\", \"css\", \"bash\") */\n language?: string\n /** Additional CSS class */\n className?: string\n /**\n * Render the one-click copy-to-clipboard button. Defaults to true so\n * every CodeBlock is copyable out of the box; pass false to opt out\n * for blocks that should not advertise a copy affordance.\n */\n copyable?: boolean\n}\n\nconst COPIED_DURATION_MS = 1500\n\nconst props = withDefaults(defineProps<Props>(), {\n className: '',\n copyable: true,\n})\n\nconst classes = computed(() =>\n ['strand-code-block', props.className].filter(Boolean).join(' '),\n)\n\nconst copied = ref(false)\nlet timer: number | null = null\n\nonBeforeUnmount(() => {\n if (timer !== null) window.clearTimeout(timer)\n})\n\nasync function handleCopy() {\n try {\n if (navigator.clipboard?.writeText) {\n await navigator.clipboard.writeText(props.code)\n } else {\n const ta = document.createElement('textarea')\n ta.value = props.code\n ta.setAttribute('readonly', '')\n ta.style.position = 'absolute'\n ta.style.left = '-9999px'\n document.body.appendChild(ta)\n ta.select()\n document.execCommand('copy')\n document.body.removeChild(ta)\n }\n copied.value = true\n if (timer !== null) window.clearTimeout(timer)\n timer = window.setTimeout(() => {\n copied.value = false\n }, COPIED_DURATION_MS)\n } catch {\n // Ignore copy failures.\n }\n}\n</script>\n\n<template>\n <div :class=\"classes\" :data-strand-copy=\"copyable ? '' : undefined\" v-bind=\"$attrs\">\n <span v-if=\"language\" class=\"strand-code-block__label\">{{ language }}</span>\n <pre class=\"strand-code-block__pre\"><code>{{ code }}</code></pre>\n <button\n v-if=\"copyable\"\n type=\"button\"\n :class=\"['strand-code-block__copy', copied ? 'strand-code-block__copy--copied' : '']\"\n :aria-label=\"copied ? 'Copied' : 'Copy code to clipboard'\"\n @click=\"handleCopy\"\n >\n <svg\n class=\"strand-code-block__copy-icon strand-code-block__copy-icon--clipboard\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.75\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path d=\"M6 3 V2 a1 1 0 0 1 1-1 h2 a1 1 0 0 1 1 1 v1 M5 3 h6 a1 1 0 0 1 1 1 v9 a1 1 0 0 1 -1 1 h-6 a1 1 0 0 1 -1 -1 v-9 a1 1 0 0 1 1 -1 z\" />\n </svg>\n <svg\n class=\"strand-code-block__copy-icon strand-code-block__copy-icon--check\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.75\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path d=\"M3 8 l3 3 l7 -7\" />\n </svg>\n </button>\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Flexbox layout container for arranging children with consistent spacing.\n\n @example\n ```vue\n <script setup>\n import { Stack, Button } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <Stack direction=\"horizontal\" :gap=\"4\" align=\"center\">\n <Button variant=\"primary\">Save</Button>\n <Button variant=\"secondary\">Cancel</Button>\n </Stack>\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n /** Flex direction */\n direction?: 'vertical' | 'horizontal'\n /** Gap between items, maps to --strand-space-{n} */\n gap?: number\n /** Cross-axis alignment */\n align?: 'start' | 'center' | 'end' | 'stretch'\n /** Main-axis alignment */\n justify?: 'start' | 'center' | 'end' | 'between' | 'around'\n /** Enable flex-wrap */\n wrap?: boolean\n /** Additional CSS class */\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n direction: 'vertical',\n gap: 4,\n align: 'stretch',\n wrap: false,\n className: '',\n})\n\nconst classes = computed(() =>\n [\n 'strand-stack',\n `strand-stack--${props.direction}`,\n props.align !== 'stretch' && `strand-stack--align-${props.align}`,\n props.justify && `strand-stack--justify-${props.justify}`,\n props.wrap && 'strand-stack--wrap',\n props.className,\n ]\n .filter(Boolean)\n .join(' '),\n)\n\nconst inlineStyle = computed(() => ({\n gap: `var(--strand-space-${props.gap})`,\n}))\n</script>\n\n<template>\n <div :class=\"classes\" :style=\"inlineStyle\" v-bind=\"$attrs\">\n <slot />\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n CSS Grid layout with configurable column count and gap spacing.\n\n @example\n ```vue\n <script setup>\n import { Grid, Card } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <Grid :columns=\"3\" :gap=\"6\">\n <Card>Item 1</Card>\n <Card>Item 2</Card>\n <Card>Item 3</Card>\n </Grid>\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n /** Number of equal-width columns */\n columns?: number\n /** Gap between items, maps to --strand-space-{n} */\n gap?: number\n /** Additional CSS class */\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n columns: 1,\n gap: 4,\n className: '',\n})\n\nconst classes = computed(() =>\n ['strand-grid', props.className].filter(Boolean).join(' '),\n)\n\nconst inlineStyle = computed(() => ({\n gridTemplateColumns: `repeat(${props.columns}, 1fr)`,\n gap: `var(--strand-space-${props.gap})`,\n}))\n</script>\n\n<template>\n <div :class=\"classes\" :style=\"inlineStyle\" v-bind=\"$attrs\">\n <slot />\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Centered max-width wrapper for constraining page content.\n\n @example\n ```vue\n <script setup>\n import { Container } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <Container size=\"default\">\n <p>Content constrained to default max width.</p>\n </Container>\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n /** Max-width constraint */\n size?: 'narrow' | 'default' | 'wide' | 'full'\n /** Additional CSS class */\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n size: 'default',\n className: '',\n})\n\nconst classes = computed(() =>\n [\n 'strand-container',\n `strand-container--${props.size}`,\n props.className,\n ]\n .filter(Boolean)\n .join(' '),\n)\n</script>\n\n<template>\n <div :class=\"classes\" v-bind=\"$attrs\">\n <slot />\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Visual separator line between content sections, horizontal or vertical.\n\n @example\n ```vue\n <script setup>\n import { Divider } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <Divider direction=\"horizontal\" label=\"OR\" />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n /** Separator direction */\n direction?: 'horizontal' | 'vertical'\n /** Optional label text displayed in the middle of the line */\n label?: string\n /** Additional CSS class */\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n direction: 'horizontal',\n className: '',\n})\n\nconst isVertical = computed(() => props.direction === 'vertical')\nconst isLabeled = computed(() => !isVertical.value && !!props.label)\nconst isPlainHorizontal = computed(() => !isVertical.value && !props.label)\n\nconst classes = computed(() => {\n if (isVertical.value) {\n return ['strand-divider', 'strand-divider--vertical', props.className]\n .filter(Boolean)\n .join(' ')\n }\n if (isLabeled.value) {\n return ['strand-divider', 'strand-divider--horizontal', 'strand-divider--labeled', props.className]\n .filter(Boolean)\n .join(' ')\n }\n return ['strand-divider', 'strand-divider--horizontal', props.className]\n .filter(Boolean)\n .join(' ')\n})\n</script>\n\n<template>\n <div\n v-if=\"isVertical\"\n :class=\"classes\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n />\n <div\n v-else-if=\"isLabeled\"\n :class=\"classes\"\n role=\"separator\"\n aria-orientation=\"horizontal\"\n >\n <span class=\"strand-divider__line\" />\n <span class=\"strand-divider__label\">{{ label }}</span>\n <span class=\"strand-divider__line\" />\n </div>\n <hr\n v-else\n :class=\"classes\"\n role=\"separator\"\n aria-orientation=\"horizontal\"\n />\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Page-level content region with padding, background, and optional top border.\n\n @example\n ```vue\n <script setup>\n import { Section, Container } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <Section variant=\"hero\" background=\"recessed\">\n <Container>\n <h1>Hero Section</h1>\n </Container>\n </Section>\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n /** Padding variant */\n variant?: 'standard' | 'hero' | 'compact'\n /** Surface background */\n background?: 'primary' | 'elevated' | 'recessed'\n /** Top border separator */\n borderTop?: boolean\n /** Additional CSS class */\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n variant: 'standard',\n background: 'primary',\n borderTop: false,\n className: '',\n})\n\nconst classes = computed(() =>\n [\n 'strand-section',\n `strand-section--${props.variant}`,\n `strand-section--bg-${props.background}`,\n props.borderTop && 'strand-section--border-top',\n props.className,\n ]\n .filter(Boolean)\n .join(' '),\n)\n</script>\n\n<template>\n <section :class=\"classes\" v-bind=\"$attrs\">\n <slot />\n </section>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Recessed dark surface for displaying instrument-style UI components.\n\n @example\n ```vue\n <script setup>\n import { InstrumentViewport, DataReadout } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <InstrumentViewport grid>\n <DataReadout label=\"Uptime\" value=\"99.9%\" />\n </InstrumentViewport>\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n /** Show grid overlay lines */\n grid?: boolean\n /** Render as page-filling instrument cabinet (DL Part 9.3 full-bleed mode).\n * Requires the host page to apply `strand-body--instrument` to <body>\n * so the dark surface reaches the screen edge. */\n fullBleed?: boolean\n /** Additional CSS class */\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n grid: false,\n fullBleed: false,\n className: '',\n})\n\nconst classes = computed(() =>\n [\n 'strand-instrument-viewport',\n props.grid && 'strand-instrument-viewport--grid',\n props.fullBleed && 'strand-instrument-viewport--full-bleed',\n props.className,\n ]\n .filter(Boolean)\n .join(' '),\n)\n</script>\n\n<template>\n <div :class=\"classes\" v-bind=\"$attrs\">\n <slot />\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Intersection Observer wrapper that reveals children with a transition on scroll.\n\n @example\n ```vue\n <script setup>\n import { ScrollReveal } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <ScrollReveal :threshold=\"0.2\" once>\n <p>This content fades in on scroll.</p>\n </ScrollReveal>\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed, ref, onMounted, onUnmounted } from 'vue'\n\ninterface Props {\n /** Intersection threshold (0-1) to trigger reveal */\n threshold?: number\n /** Only reveal once (do not hide on exit) */\n once?: boolean\n /** Additional CSS class */\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n threshold: 0.1,\n once: true,\n className: '',\n})\n\nconst elRef = ref<HTMLDivElement | null>(null)\nconst visible = ref(false)\nlet observer: IntersectionObserver | null = null\n\nconst classes = computed(() =>\n [\n 'strand-reveal',\n visible.value && 'strand-reveal--visible',\n props.className,\n ]\n .filter(Boolean)\n .join(' '),\n)\n\nonMounted(() => {\n if (!elRef.value) return\n\n observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n visible.value = true\n if (props.once && observer && elRef.value) {\n observer.unobserve(elRef.value)\n }\n } else if (!props.once) {\n visible.value = false\n }\n }\n },\n { threshold: props.threshold },\n )\n\n observer.observe(elRef.value)\n})\n\nonUnmounted(() => {\n if (observer) {\n observer.disconnect()\n observer = null\n }\n})\n</script>\n\n<template>\n <div ref=\"elRef\" :class=\"classes\" v-bind=\"$attrs\">\n <slot />\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Styled anchor element with external-link handling and visual variants.\n\n @example\n ```vue\n <script setup>\n import { Link } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <Link href=\"/docs\" variant=\"cta\">Read the docs</Link>\n <Link href=\"https://example.com\" external>External site</Link>\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n /** URL destination */\n href: string\n /** Opens in new tab with rel=\"noopener noreferrer\" */\n external?: boolean\n /** Style variant */\n variant?: 'default' | 'cta' | 'mono'\n /** Additional CSS class */\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n external: false,\n variant: 'default',\n className: '',\n})\n\nconst classes = computed(() =>\n ['strand-link', props.variant !== 'default' && `strand-link--${props.variant}`, props.className].filter(Boolean).join(' '),\n)\n</script>\n\n<template>\n <a\n :href=\"href\"\n :class=\"classes\"\n v-bind=\"{\n ...(external ? { target: '_blank', rel: 'noopener noreferrer' } : {}),\n ...$attrs,\n }\"\n >\n <slot />\n </a>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Tabbed content switcher with keyboard navigation and ARIA tab pattern.\n\n @example\n ```vue\n <script setup>\n import { ref } from 'vue';\n import { Tabs } from '@dillingerstaffing/strand-vue';\n const activeTab = ref('overview');\n const tabs = [\n { id: 'overview', label: 'Overview' },\n { id: 'details', label: 'Details' },\n ];\n </script>\n\n <template>\n <Tabs :tabs=\"tabs\" v-model:active-tab=\"activeTab\">\n <template #overview><p>Overview content</p></template>\n <template #details><p>Details content</p></template>\n </Tabs>\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\n\nexport interface TabItem {\n id: string\n label: string\n}\n\nexport interface TabsProps {\n /** Tab definitions (id + label only; content is provided via slots) */\n tabs: TabItem[]\n /** Currently active tab id (controlled) */\n activeTab: string\n}\n\nconst props = defineProps<TabsProps>()\n\nconst emit = defineEmits<{\n (e: 'change', id: string): void\n}>()\n\nconst tablistRef = ref<HTMLDivElement | null>(null)\n\nconst classes = computed(() => ['strand-tabs'].filter(Boolean).join(' '))\n\nfunction focusAndSelect(index: number) {\n const tab = props.tabs[index]\n if (tab) {\n emit('change', tab.id)\n const buttons = tablistRef.value?.querySelectorAll<HTMLButtonElement>('[role=\"tab\"]')\n buttons?.[index]?.focus()\n }\n}\n\nfunction handleKeyDown(event: KeyboardEvent) {\n const currentIndex = props.tabs.findIndex((t) => t.id === props.activeTab)\n let nextIndex: number | null = null\n\n switch (event.key) {\n case 'ArrowRight':\n nextIndex = (currentIndex + 1) % props.tabs.length\n break\n case 'ArrowLeft':\n nextIndex = (currentIndex - 1 + props.tabs.length) % props.tabs.length\n break\n case 'Home':\n nextIndex = 0\n break\n case 'End':\n nextIndex = props.tabs.length - 1\n break\n default:\n return\n }\n\n event.preventDefault()\n focusAndSelect(nextIndex)\n}\n</script>\n\n<template>\n <div :class=\"classes\">\n <div ref=\"tablistRef\" role=\"tablist\" @keydown=\"handleKeyDown\">\n <button\n v-for=\"tab in tabs\"\n :key=\"tab.id\"\n :id=\"`tab-${tab.id}`\"\n role=\"tab\"\n type=\"button\"\n :class=\"[\n 'strand-tabs__tab',\n tab.id === activeTab && 'strand-tabs__tab--active',\n ].filter(Boolean).join(' ')\"\n :aria-selected=\"tab.id === activeTab ? 'true' : 'false'\"\n :aria-controls=\"`panel-${tab.id}`\"\n :tabindex=\"tab.id === activeTab ? 0 : -1\"\n @click=\"emit('change', tab.id)\"\n >\n {{ tab.label }}\n </button>\n </div>\n\n <div\n v-for=\"tab in tabs\"\n :key=\"tab.id\"\n :id=\"`panel-${tab.id}`\"\n role=\"tabpanel\"\n :aria-labelledby=\"`tab-${tab.id}`\"\n :hidden=\"tab.id !== activeTab || undefined\"\n :tabindex=\"0\"\n >\n <slot :name=\"`panel-${tab.id}`\" />\n </div>\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Hierarchical navigation path showing the current page location.\n\n @example\n ```vue\n <script setup>\n import { Breadcrumb } from '@dillingerstaffing/strand-vue';\n\n const items = [\n { label: 'Home', href: '/' },\n { label: 'Settings', href: '/settings' },\n { label: 'Profile' },\n ];\n </script>\n\n <template>\n <Breadcrumb :items=\"items\" />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nexport interface BreadcrumbItem {\n label: string\n href?: string\n}\n\nexport interface BreadcrumbProps {\n /** Breadcrumb path items; last item is treated as current page */\n items: BreadcrumbItem[]\n /** Separator character between items */\n separator?: string\n}\n\nconst props = withDefaults(defineProps<BreadcrumbProps>(), {\n separator: '/',\n})\n\nconst classes = computed(() =>\n ['strand-breadcrumb'].filter(Boolean).join(' '),\n)\n</script>\n\n<template>\n <nav aria-label=\"Breadcrumb\" :class=\"classes\">\n <ol class=\"strand-breadcrumb__list\">\n <li\n v-for=\"(item, index) in items\"\n :key=\"`${item.label}-${index}`\"\n class=\"strand-breadcrumb__item\"\n >\n <span\n v-if=\"index > 0\"\n class=\"strand-breadcrumb__separator\"\n aria-hidden=\"true\"\n >\n {{ separator }}\n </span>\n <span\n v-if=\"index === items.length - 1\"\n class=\"strand-breadcrumb__current\"\n aria-current=\"page\"\n >\n {{ item.label }}\n </span>\n <a\n v-else\n :href=\"item.href\"\n class=\"strand-breadcrumb__link\"\n >\n {{ item.label }}\n </a>\n </li>\n </ol>\n </nav>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Top-level navigation bar with logo slot, link items, actions, and responsive mobile menu.\n\n @example\n ```vue\n <script setup>\n import { Nav } from '@dillingerstaffing/strand-vue';\n\n const items = [\n { label: 'Home', href: '/', active: true },\n { label: 'About', href: '/about' },\n ];\n </script>\n\n <template>\n <Nav :items=\"items\" glass>\n <template #logo>\n <img src=\"/logo.svg\" alt=\"Brand\" />\n </template>\n </Nav>\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed, ref, onMounted, onUnmounted, watch } from 'vue'\n\nexport interface NavItem {\n label: string\n href: string\n active?: boolean\n}\n\nexport interface NavProps {\n /** Navigation items */\n items?: NavItem[]\n /** Glassmorphic variant (fixed, backdrop-filter, DL 11.5) */\n glass?: boolean\n}\n\nconst props = withDefaults(defineProps<NavProps>(), {\n items: () => [],\n glass: false,\n})\n\nconst menuOpen = ref(false)\n\nfunction toggleMenu() {\n menuOpen.value = !menuOpen.value\n}\n\nfunction syncGlassClass(isGlass: boolean) {\n if (isGlass) {\n document.body.classList.add('strand-glass-nav-active')\n } else {\n document.body.classList.remove('strand-glass-nav-active')\n }\n}\n\nonMounted(() => syncGlassClass(props.glass))\nonUnmounted(() => document.body.classList.remove('strand-glass-nav-active'))\nwatch(() => props.glass, syncGlassClass)\n\nconst classes = computed(() => ['strand-nav', props.glass && 'strand-nav--glass'].filter(Boolean).join(' '))\n</script>\n\n<template>\n <nav :class=\"classes\" aria-label=\"Main navigation\">\n <div class=\"strand-nav__inner\">\n <div v-if=\"$slots.logo\" class=\"strand-nav__logo\">\n <slot name=\"logo\" />\n </div>\n\n <div class=\"strand-nav__items\">\n <a\n v-for=\"item in items\"\n :key=\"item.href\"\n :href=\"item.href\"\n :class=\"[\n 'strand-nav__link',\n item.active && 'strand-nav__link--active',\n ].filter(Boolean).join(' ')\"\n :aria-current=\"item.active ? 'page' : undefined\"\n >\n {{ item.label }}\n </a>\n </div>\n\n <div v-if=\"$slots.actions\" class=\"strand-nav__actions\">\n <slot name=\"actions\" />\n </div>\n\n <button\n type=\"button\"\n class=\"strand-nav__hamburger\"\n :aria-expanded=\"menuOpen ? 'true' : 'false'\"\n :aria-label=\"menuOpen ? 'Close menu' : 'Menu'\"\n @click=\"toggleMenu\"\n >\n <span class=\"strand-nav__hamburger-icon\" aria-hidden=\"true\" />\n </button>\n </div>\n\n <div v-if=\"menuOpen\" class=\"strand-nav__mobile-menu\">\n <a\n v-for=\"item in items\"\n :key=\"item.href\"\n :href=\"item.href\"\n :class=\"[\n 'strand-nav__mobile-link',\n item.active && 'strand-nav__mobile-link--active',\n ].filter(Boolean).join(' ')\"\n :aria-current=\"item.active ? 'page' : undefined\"\n >\n {{ item.label }}\n </a>\n </div>\n </nav>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Standalone notification message with status indicator and optional dismiss.\n\n @example\n ```vue\n <script setup>\n import { Toast } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <Toast status=\"success\" message=\"Changes saved.\" @dismiss=\"handleDismiss\" />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport type { ToastStatus } from './useToast'\n\nexport interface ToastProps {\n /** Visual status */\n status?: ToastStatus\n /** Toast message text */\n message: string\n}\n\nconst props = withDefaults(defineProps<ToastProps>(), {\n status: 'info',\n})\n\nconst emit = defineEmits<{\n (e: 'dismiss'): void\n}>()\n\nconst isUrgent = computed(\n () => props.status === 'error' || props.status === 'warning',\n)\n\nconst classes = computed(() =>\n ['strand-toast', `strand-toast--${props.status}`]\n .filter(Boolean)\n .join(' '),\n)\n\nconst statusLabels: Record<string, string> = {\n info: 'INFO',\n success: 'COMPLETE',\n warning: 'WARNING',\n error: 'ERROR',\n}\n\nconst statusLabel = computed(() => statusLabels[props.status] ?? props.status.toUpperCase())\n</script>\n\n<template>\n <div\n :class=\"classes\"\n role=\"status\"\n :aria-live=\"isUrgent ? 'assertive' : 'polite'\"\n >\n <span class=\"strand-toast__status\">{{ statusLabel }}</span>\n <span class=\"strand-toast__message\">{{ message }}</span>\n <button\n type=\"button\"\n class=\"strand-toast__dismiss\"\n aria-label=\"Dismiss\"\n @click=\"emit('dismiss')\"\n >\n &#215;\n </button>\n </div>\n</template>\n","/*! Strand Vue | MIT License | dillingerstaffing.com */\n\nimport { inject } from 'vue'\nimport type { InjectionKey } from 'vue'\n\nexport type ToastStatus = 'info' | 'success' | 'warning' | 'error'\n\nexport interface ToastOptions {\n message: string\n status?: ToastStatus\n duration?: number\n}\n\nexport interface ToastContextValue {\n toast: (options: ToastOptions) => void\n}\n\nexport const ToastKey: InjectionKey<ToastContextValue> = Symbol('StrandToast')\n\nexport function useToast(): ToastContextValue {\n const ctx = inject(ToastKey)\n if (!ctx) {\n throw new Error('useToast must be used within a ToastProvider')\n }\n return ctx\n}\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Context provider that manages toast notifications for its subtree.\n\n @example\n ```vue\n <script setup>\n import { ToastProvider } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <ToastProvider>\n <App />\n </ToastProvider>\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { ref, provide, onUnmounted } from 'vue'\nimport { ToastKey } from './useToast'\nimport type { ToastOptions, ToastStatus } from './useToast'\n\ninterface ToastEntry {\n id: number\n message: string\n status: ToastStatus\n duration: number\n}\n\nlet toastIdCounter = 0\n\nconst toasts = ref<ToastEntry[]>([])\nconst timers = new Map<number, ReturnType<typeof setTimeout>>()\n\nfunction removeToast(id: number) {\n const timer = timers.get(id)\n if (timer !== undefined) {\n clearTimeout(timer)\n timers.delete(id)\n }\n toasts.value = toasts.value.filter((t) => t.id !== id)\n}\n\nfunction addToast(options: ToastOptions) {\n const entry: ToastEntry = {\n id: ++toastIdCounter,\n message: options.message,\n status: options.status ?? 'info',\n duration: options.duration ?? 5000,\n }\n toasts.value = [...toasts.value, entry]\n\n if (entry.duration > 0) {\n const timer = setTimeout(() => {\n removeToast(entry.id)\n }, entry.duration)\n timers.set(entry.id, timer)\n }\n}\n\nprovide(ToastKey, { toast: addToast })\n\nonUnmounted(() => {\n for (const timer of timers.values()) {\n clearTimeout(timer)\n }\n timers.clear()\n})\n\nfunction isUrgent(status: ToastStatus): boolean {\n return status === 'error' || status === 'warning'\n}\n\nconst statusLabels: Record<string, string> = {\n info: 'INFO',\n success: 'COMPLETE',\n warning: 'WARNING',\n error: 'ERROR',\n}\n\nfunction statusLabel(status: ToastStatus): string {\n return statusLabels[status] ?? status.toUpperCase()\n}\n</script>\n\n<template>\n <slot />\n <div v-if=\"toasts.length > 0\" class=\"strand-toast__container\">\n <div\n v-for=\"entry in toasts\"\n :key=\"entry.id\"\n :class=\"['strand-toast', `strand-toast--${entry.status}`].join(' ')\"\n role=\"status\"\n :aria-live=\"isUrgent(entry.status) ? 'assertive' : 'polite'\"\n >\n <span class=\"strand-toast__status\">{{ statusLabel(entry.status) }}</span>\n <span class=\"strand-toast__message\">{{ entry.message }}</span>\n <button\n type=\"button\"\n class=\"strand-toast__dismiss\"\n aria-label=\"Dismiss\"\n @click=\"removeToast(entry.id)\"\n >\n &#215;\n </button>\n </div>\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Contextual feedback banner for status messages, warnings, and errors.\n\n @example\n ```vue\n <script setup>\n import { Alert } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <Alert status=\"success\" dismissible @dismiss=\"handleDismiss\">\n Operation completed successfully.\n </Alert>\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nexport interface AlertProps {\n /** Visual status of the alert */\n status?: 'info' | 'success' | 'warning' | 'error'\n /** Show dismiss button */\n dismissible?: boolean\n}\n\nconst props = withDefaults(defineProps<AlertProps>(), {\n status: 'info',\n dismissible: false,\n})\n\nconst emit = defineEmits<{\n (e: 'dismiss'): void\n}>()\n\nconst role = computed(() =>\n props.status === 'error' || props.status === 'warning' ? 'alert' : 'status',\n)\n\nconst classes = computed(() =>\n [\n 'strand-alert',\n `strand-alert--${props.status}`,\n ]\n .filter(Boolean)\n .join(' '),\n)\n\nconst statusLabels: Record<string, string> = {\n info: 'INFO',\n success: 'COMPLETE',\n warning: 'WARNING',\n error: 'ERROR',\n}\n\nconst statusLabel = computed(() => statusLabels[props.status] ?? props.status.toUpperCase())\n\nfunction handleDismiss() {\n emit('dismiss')\n}\n</script>\n\n<template>\n <div :class=\"classes\" :role=\"role\">\n <span class=\"strand-alert__status\">{{ statusLabel }}</span>\n <div class=\"strand-alert__content\">\n <slot />\n </div>\n <button\n v-if=\"dismissible\"\n type=\"button\"\n class=\"strand-alert__dismiss\"\n aria-label=\"Dismiss\"\n @click=\"handleDismiss\"\n >\n &#215;\n </button>\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Modal overlay with focus trapping, scroll lock, and backdrop click dismissal.\n\n @example\n ```vue\n <script setup>\n import { ref } from 'vue';\n import { Dialog } from '@dillingerstaffing/strand-vue';\n const isOpen = ref(false);\n </script>\n\n <template>\n <Dialog :open=\"isOpen\" title=\"Confirm\" @close=\"isOpen = false\">\n <p>Are you sure?</p>\n </Dialog>\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed, ref, watch, onUnmounted, nextTick } from 'vue'\n\nexport interface DialogProps {\n /** Whether the dialog is open */\n open: boolean\n /** Optional title rendered in the dialog header */\n title?: string\n /** Close when clicking the backdrop */\n closeOnOutsideClick?: boolean\n /** Close when pressing Escape */\n closeOnEscape?: boolean\n}\n\nconst props = withDefaults(defineProps<DialogProps>(), {\n closeOnOutsideClick: true,\n closeOnEscape: true,\n})\n\nconst emit = defineEmits<{\n (e: 'close'): void\n}>()\n\nconst FOCUSABLE_SELECTOR =\n 'a[href], button:not(:disabled), textarea:not(:disabled), input:not(:disabled), select:not(:disabled), [tabindex]:not([tabindex=\"-1\"])'\n\nlet dialogIdCounter = 0\nconst titleId = `strand-dialog-title-${++dialogIdCounter}`\n\nconst panelRef = ref<HTMLDivElement | null>(null)\nlet previousFocus: Element | null = null\nlet originalOverflow = ''\n\nconst panelClasses = computed(() =>\n ['strand-dialog__panel'].filter(Boolean).join(' '),\n)\n\nfunction handleKeyDown(event: KeyboardEvent) {\n if (event.key === 'Escape' && props.closeOnEscape) {\n event.stopPropagation()\n emit('close')\n return\n }\n\n if (event.key === 'Tab') {\n const panel = panelRef.value\n if (!panel) return\n\n const focusable = Array.from(\n panel.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR),\n )\n if (focusable.length === 0) return\n\n const first = focusable[0]\n const last = focusable[focusable.length - 1]\n\n if (event.shiftKey) {\n if (document.activeElement === first) {\n event.preventDefault()\n last.focus()\n }\n } else {\n if (document.activeElement === last) {\n event.preventDefault()\n first.focus()\n }\n }\n }\n}\n\nfunction handleBackdropClick(event: MouseEvent) {\n if (props.closeOnOutsideClick && event.target === event.currentTarget) {\n emit('close')\n }\n}\n\nwatch(\n () => props.open,\n async (isOpen) => {\n if (isOpen) {\n previousFocus = document.activeElement\n originalOverflow = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n\n await nextTick()\n const panel = panelRef.value\n if (panel) {\n const focusable = panel.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)\n if (focusable.length > 0) {\n focusable[0].focus()\n } else {\n panel.focus()\n }\n }\n } else {\n document.body.style.overflow = originalOverflow\n if (previousFocus && previousFocus instanceof HTMLElement) {\n previousFocus.focus()\n }\n }\n },\n { immediate: true },\n)\n\nonUnmounted(() => {\n if (props.open) {\n document.body.style.overflow = originalOverflow\n }\n})\n</script>\n\n<template>\n <div\n v-if=\"open\"\n class=\"strand-dialog__backdrop\"\n @click=\"handleBackdropClick\"\n @keydown=\"handleKeyDown\"\n >\n <div\n ref=\"panelRef\"\n :class=\"panelClasses\"\n role=\"dialog\"\n aria-modal=\"true\"\n :aria-labelledby=\"title ? titleId : undefined\"\n :tabindex=\"-1\"\n >\n <div v-if=\"title\" class=\"strand-dialog__header\">\n <h2 :id=\"titleId\" class=\"strand-dialog__title\">\n {{ title }}\n </h2>\n </div>\n <button\n type=\"button\"\n class=\"strand-dialog__close\"\n aria-label=\"Close\"\n @click=\"emit('close')\"\n >\n &#215;\n </button>\n <div class=\"strand-dialog__body\">\n <slot />\n </div>\n </div>\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Hover/focus-triggered text popup anchored to a trigger element.\n\n @example\n ```vue\n <script setup>\n import { Tooltip, Button } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <Tooltip content=\"Save your progress\" position=\"top\">\n <Button variant=\"primary\">Save</Button>\n </Tooltip>\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed, ref, onUnmounted } from 'vue'\n\nexport interface TooltipProps {\n /** Tooltip text */\n content: string\n /** Position relative to trigger */\n position?: 'top' | 'right' | 'bottom' | 'left'\n /** Delay in ms before showing */\n delay?: number\n}\n\nconst props = withDefaults(defineProps<TooltipProps>(), {\n position: 'top',\n delay: 200,\n})\n\nlet tooltipIdCounter = 0\nconst tooltipId = `strand-tooltip-${++tooltipIdCounter}`\n\nconst visible = ref(false)\nlet timer: ReturnType<typeof setTimeout> | null = null\n\nfunction show() {\n timer = setTimeout(() => {\n visible.value = true\n }, props.delay)\n}\n\nfunction hide() {\n if (timer !== null) {\n clearTimeout(timer)\n timer = null\n }\n visible.value = false\n}\n\nonUnmounted(() => {\n if (timer !== null) {\n clearTimeout(timer)\n }\n})\n\nconst wrapperClasses = computed(() =>\n ['strand-tooltip__wrapper'].filter(Boolean).join(' '),\n)\n\nconst tooltipClasses = computed(() =>\n [\n 'strand-tooltip',\n `strand-tooltip--${props.position}`,\n visible.value && 'strand-tooltip--visible',\n ]\n .filter(Boolean)\n .join(' '),\n)\n</script>\n\n<template>\n <span\n :class=\"wrapperClasses\"\n :aria-describedby=\"tooltipId\"\n @mouseenter=\"show\"\n @mouseleave=\"hide\"\n @focus=\"show\"\n @blur=\"hide\"\n >\n <slot />\n <span\n :id=\"tooltipId\"\n :class=\"tooltipClasses\"\n role=\"tooltip\"\n :aria-hidden=\"!visible\"\n >\n {{ content }}\n </span>\n </span>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Determinate or indeterminate progress indicator in bar or ring form.\n\n @example\n ```vue\n <script setup>\n import { Progress } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <Progress variant=\"bar\" :value=\"65\" size=\"md\" />\n <Progress variant=\"ring\" size=\"lg\" />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n /** Visual variant */\n variant?: 'bar' | 'ring'\n /** Completion percentage (0-100). Omit for indeterminate. */\n value?: number\n /** Size of the progress indicator */\n size?: 'sm' | 'md' | 'lg'\n /** Additional CSS class */\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n variant: 'bar',\n size: 'md',\n className: '',\n})\n\nconst RING_SIZES: Record<string, number> = { sm: 24, md: 40, lg: 56 }\nconst RING_STROKE = 3\n\nconst isDeterminate = computed(() => props.value != null)\n\nconst classes = computed(() =>\n [\n 'strand-progress',\n `strand-progress--${props.variant}`,\n `strand-progress--${props.size}`,\n !isDeterminate.value && 'strand-progress--indeterminate',\n props.className,\n ]\n .filter(Boolean)\n .join(' '),\n)\n\nconst dim = computed(() => RING_SIZES[props.size] ?? RING_SIZES.md)\nconst radius = computed(() => (dim.value - RING_STROKE) / 2)\nconst circumference = computed(() => 2 * Math.PI * radius.value)\nconst offset = computed(() =>\n isDeterminate.value\n ? circumference.value - (circumference.value * (props.value as number)) / 100\n : 0,\n)\n</script>\n\n<template>\n <div\n :class=\"classes\"\n role=\"progressbar\"\n :aria-valuemin=\"0\"\n :aria-valuemax=\"100\"\n :aria-valuenow=\"isDeterminate ? value : undefined\"\n v-bind=\"$attrs\"\n >\n <!-- Ring variant -->\n <template v-if=\"variant === 'ring'\">\n <svg\n :width=\"dim\"\n :height=\"dim\"\n :viewBox=\"`0 0 ${dim} ${dim}`\"\n class=\"strand-progress__ring\"\n >\n <circle\n :cx=\"dim / 2\"\n :cy=\"dim / 2\"\n :r=\"radius\"\n fill=\"none\"\n :stroke-width=\"RING_STROKE\"\n class=\"strand-progress__track\"\n />\n <circle\n :cx=\"dim / 2\"\n :cy=\"dim / 2\"\n :r=\"radius\"\n fill=\"none\"\n :stroke-width=\"RING_STROKE\"\n :stroke-dasharray=\"circumference\"\n :stroke-dashoffset=\"isDeterminate ? offset : undefined\"\n stroke-linecap=\"round\"\n class=\"strand-progress__fill\"\n :transform=\"`rotate(-90 ${dim / 2} ${dim / 2})`\"\n />\n </svg>\n </template>\n <!-- Bar variant -->\n <template v-else>\n <div\n class=\"strand-progress__fill\"\n :style=\"isDeterminate ? { width: `${value}%` } : undefined\"\n />\n </template>\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Animated loading indicator with screen-reader-accessible status text.\n\n @example\n ```vue\n <script setup>\n import { Spinner } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <Spinner size=\"lg\" />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n /** Size of the spinner */\n size?: 'sm' | 'md' | 'lg'\n /** Additional CSS class */\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n size: 'md',\n className: '',\n})\n\nconst classes = computed(() =>\n [\n 'strand-spinner',\n `strand-spinner--${props.size}`,\n props.className,\n ]\n .filter(Boolean)\n .join(' '),\n)\n</script>\n\n<template>\n <span :class=\"classes\" role=\"status\" v-bind=\"$attrs\">\n <span class=\"strand-spinner__ring\" aria-hidden=\"true\" />\n <span class=\"strand-spinner__sr-only\">Loading</span>\n </span>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Placeholder shimmer shape used while content is loading.\n\n @example\n ```vue\n <script setup>\n import { Skeleton } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <Skeleton variant=\"text\" width=\"60%\" />\n <Skeleton variant=\"circle\" width=\"48px\" />\n <Skeleton variant=\"rectangle\" width=\"100%\" height=\"200px\" />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n /** Shape variant */\n variant?: 'text' | 'rectangle' | 'circle'\n /** CSS width value */\n width?: string\n /** CSS height value */\n height?: string\n /** Additional CSS class */\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n variant: 'text',\n className: '',\n})\n\nconst effectiveWidth = computed(() =>\n props.width ?? (props.variant === 'text' ? '100%' : undefined),\n)\n\nconst effectiveHeight = computed(() =>\n props.variant === 'circle' ? effectiveWidth.value : props.height,\n)\n\nconst classes = computed(() =>\n [\n 'strand-skeleton',\n `strand-skeleton--${props.variant}`,\n 'strand-skeleton--shimmer',\n props.className,\n ]\n .filter(Boolean)\n .join(' '),\n)\n\nconst inlineStyle = computed(() => ({\n width: effectiveWidth.value,\n height: effectiveHeight.value,\n}))\n</script>\n\n<template>\n <div :class=\"classes\" aria-hidden=\"true\" :style=\"inlineStyle\" v-bind=\"$attrs\" />\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Interactive 1-to-5 star rating control. Mirrors the Preact and Svelte\n StarRating APIs for cross-consumer parity.\n\n @example\n ```vue\n <script setup>\n import { ref } from 'vue';\n import { StarRating } from '@dillingerstaffing/strand-vue';\n const value = ref(0);\n </script>\n\n <template>\n <StarRating\n :value=\"value\"\n :onChange=\"(v) => value = v\"\n ariaLabel=\"Rate this event\"\n size=\"md\"\n />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\n\nexport interface StarRatingProps {\n value: number\n onChange?: (v: number) => void\n size?: 'sm' | 'md' | 'lg'\n readOnly?: boolean\n ariaLabel: string\n}\n\nconst props = withDefaults(defineProps<StarRatingProps>(), {\n size: 'md',\n readOnly: false,\n})\n\nconst hover = ref(0)\n\nconst classes = computed(() =>\n [\n 'strand-star-rating',\n `strand-star-rating--${props.size}`,\n props.readOnly && 'strand-star-rating--readonly',\n ]\n .filter(Boolean)\n .join(' '),\n)\n\nconst display = computed(() => hover.value || props.value)\n\nfunction select(n: number): void {\n if (props.readOnly) return\n props.onChange?.(n)\n}\n\nfunction onKey(e: KeyboardEvent, n: number): void {\n if (props.readOnly) return\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault()\n select(n)\n }\n}\n</script>\n\n<template>\n <div\n :class=\"classes\"\n role=\"radiogroup\"\n :aria-label=\"ariaLabel\"\n data-strand-component=\"star-rating\"\n :data-value=\"String(value)\"\n >\n <button\n v-for=\"n in 5\"\n :key=\"n\"\n type=\"button\"\n :class=\"`strand-star-rating__star${n <= display ? ' strand-star-rating__star--active' : ''}`\"\n role=\"radio\"\n :aria-checked=\"n === value ? 'true' : 'false'\"\n :aria-label=\"`${n} star${n > 1 ? 's' : ''}`\"\n :tabindex=\"readOnly ? -1 : 0\"\n :disabled=\"readOnly\"\n :data-star-value=\"String(n)\"\n @click=\"select(n)\"\n @keydown=\"(e: KeyboardEvent) => onKey(e, n)\"\n @mouseenter=\"!readOnly && (hover = n)\"\n @mouseleave=\"!readOnly && (hover = 0)\"\n @focus=\"!readOnly && (hover = n)\"\n @blur=\"!readOnly && (hover = 0)\"\n >\n <span class=\"strand-star-rating__glyph\" aria-hidden=\"true\">{{ \"\\u2605\" }}</span>\n </button>\n </div>\n</template>\n"],"names":["props","__props","emit","__emit","isDisabled","computed","classes","handleClick","event","_createElementBlock","_openBlock","_hoisted_2","_createElementVNode","_normalizeStyle","_renderSlot","_ctx","slots","useSlots","wrapperClasses","handleInput","target","$slots","_hoisted_1","_hoisted_3","textareaRef","ref","currentLength","resize","watch","onMounted","_toDisplayString","handleChange","_Fragment","_renderList","opt","inputRef","val","ariaChecked","handleKeyDown","_cache","_hoisted_4","_hoisted_5","_createTextVNode","_mergeProps","$attrs","hasChildren","displayValue","ariaLabel","badgeClasses","imgError","handleError","showImage","displayInitials","sortKey","sortDirection","handleSort","key","nextDirection","sortIndicator","col","$event","row","rowIndex","COPIED_DURATION_MS","copied","timer","onBeforeUnmount","handleCopy","_a","ta","inlineStyle","isVertical","isLabeled","elRef","visible","observer","entries","entry","onUnmounted","tablistRef","focusAndSelect","index","tab","buttons","_b","currentIndex","t","nextIndex","_normalizeClass","item","menuOpen","toggleMenu","syncGlassClass","isGlass","_hoisted_7","_hoisted_8","isUrgent","statusLabels","statusLabel","ToastKey","useToast","ctx","inject","toastIdCounter","toasts","timers","removeToast","id","addToast","options","provide","status","role","handleDismiss","FOCUSABLE_SELECTOR","dialogIdCounter","titleId","panelRef","previousFocus","originalOverflow","panelClasses","panel","focusable","first","last","handleBackdropClick","isOpen","nextTick","tooltipIdCounter","tooltipId","show","hide","tooltipClasses","RING_STROKE","RING_SIZES","isDeterminate","dim","radius","circumference","offset","effectiveWidth","effectiveHeight","hover","display","select","n","onKey","e"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/components/Button/Button.vue","../src/components/Input/Input.vue","../src/components/Textarea/Textarea.vue","../src/components/Select/Select.vue","../src/components/Checkbox/Checkbox.vue","../src/components/Radio/Radio.vue","../src/components/Switch/Switch.vue","../src/components/Slider/Slider.vue","../src/components/FormField/FormField.vue","../src/components/Card/Card.vue","../src/components/Badge/Badge.vue","../src/components/Avatar/Avatar.vue","../src/components/Tag/Tag.vue","../src/components/Table/Table.vue","../src/components/DataReadout/DataReadout.vue","../src/components/CodeBlock/CodeBlock.vue","../src/components/Stack/Stack.vue","../src/components/Grid/Grid.vue","../src/components/Container/Container.vue","../src/components/Divider/Divider.vue","../src/components/Section/Section.vue","../src/components/InstrumentViewport/InstrumentViewport.vue","../src/components/ScrollReveal/ScrollReveal.vue","../src/components/Link/Link.vue","../src/components/Tabs/Tabs.vue","../src/components/Breadcrumb/Breadcrumb.vue","../src/components/Nav/Nav.vue","../src/components/Toast/Toast.vue","../src/components/Toast/useToast.ts","../src/components/Toast/ToastProvider.vue","../src/components/Alert/Alert.vue","../src/components/Dialog/Dialog.vue","../src/components/Tooltip/Tooltip.vue","../src/components/Progress/Progress.vue","../src/components/Spinner/Spinner.vue","../src/components/Skeleton/Skeleton.vue","../src/components/StarRating/StarRating.vue","../src/components/CardSection/CardSection.vue","../src/components/KvEditorial/KvEditorial.vue","../src/components/LabShell/LabShell.vue","../src/components/LabShell/LabSidebar.vue","../src/components/LabShell/LabSidebarHead.vue","../src/components/LabShell/LabSidebarScroll.vue","../src/components/LabShell/LabBrand.vue","../src/components/LabShell/LabBrandMark.vue","../src/components/LabShell/LabBrandTitle.vue","../src/components/LabShell/LabBrandSub.vue","../src/components/LabShell/LabSidebarGroup.vue","../src/components/LabShell/LabSidebarGroupLabel.vue","../src/components/LabShell/LabSidebarGroupList.vue","../src/components/LabShell/LabSidebarGroupLink.vue","../src/components/LabShell/LabSidebarGroupDot.vue","../src/components/LabShell/LabMain.vue","../src/components/LabShell/LabHeader.vue","../src/components/LabShell/LabHeaderTitle.vue","../src/components/LabShell/LabHeaderLead.vue","../src/components/LabShell/LabHeaderMeta.vue","../src/components/LabShell/LabHeaderMetaItem.vue","../src/components/LabShell/LabHeaderMetaLabel.vue","../src/components/LabShell/LabHeaderMetaValue.vue","../src/components/LabShell/LabTaxonomy.vue","../src/components/LabShell/LabTaxonomyTitle.vue","../src/components/LabShell/LabTaxonomyList.vue","../src/components/LabShell/LabSection.vue","../src/components/LabShell/LabSectionHead.vue","../src/components/LabShell/LabSectionHeadNote.vue","../src/components/LabShell/LabSectionBody.vue","../src/components/LabShell/LabExample.vue","../src/components/LabShell/LabExampleMeta.vue","../src/components/LabShell/LabExampleLabel.vue","../src/components/LabShell/LabExampleCode.vue","../src/components/LabShell/LabExampleDemo.vue","../src/components/LabShell/LabExampleCaption.vue","../src/components/LabFrame/LabFrame.vue","../src/components/LabFrame/LabFrameChrome.vue","../src/components/LabFrame/LabFrameDot.vue","../src/components/LabFrame/LabFrameTitle.vue","../src/components/LabFrame/LabFrameBody.vue","../src/components/LabFrame/LabFrameContent.vue","../src/components/LabFrame/LabFrameContentHead.vue","../src/components/LabFrame/LabFrameActions.vue","../src/components/LabFrame/LabFrameOverlay.vue","../src/components/LabFrame/LabFramePanel.vue","../src/components/LabFrame/LabFramePanelHeader.vue","../src/components/LabFrame/LabFramePanelTitle.vue","../src/components/LabFrame/LabFramePanelClose.vue","../src/components/LabFrame/LabFramePanelBody.vue","../src/components/LabFrame/LabFramePanelFooter.vue","../src/components/LabGlassStage/LabGlassStage.vue","../src/components/LabGlassStage/LabGlassPanel.vue","../src/components/LabRevealStage/LabRevealStage.vue","../src/components/LabRevealStage/LabRevealLine.vue","../src/components/LabTip/LabTip.vue","../src/components/LabTip/LabTipBubble.vue","../src/components/LabUtilCell/LabUtilRow.vue","../src/components/LabUtilCell/LabUtilCell.vue","../src/components/LabUtilCell/LabUtilCellCode.vue","../src/components/LabUtilCell/LabUtilCellCaption.vue","../src/components/LabUtilCell/LabUtilCellDemo.vue","../src/components/LabUtilCell/LabUtilCellBlock.vue","../src/components/Swatch/Swatch.vue","../src/components/Swatch/SwatchGrid.vue","../src/components/TypeSpecimen/TypeSpecimen.vue","../src/components/TypeSpecimen/TypeSpecimenMeta.vue","../src/components/TokenSpecimen/TokenSpecimen.vue","../src/components/TokenSpecimen/TokenSpecimenGrid.vue","../src/components/TokenSpecimen/TokenSpecimenSpacer.vue","../src/components/TokenSpecimen/TokenSpecimenBox.vue","../src/components/ContainerScale/ContainerScale.vue","../src/components/ContainerScale/ContainerScaleRow.vue","../src/components/ContainerScale/ContainerScaleLabel.vue","../src/components/ContainerScale/ContainerScaleCaption.vue","../src/components/ContainerScale/ContainerScaleTrack.vue","../src/components/ContainerScale/ContainerScaleBar.vue","../src/components/ContainerScale/ContainerScalePx.vue","../src/components/ContainerScale/ContainerScaleAxis.vue"],"sourcesContent":["<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Primary action trigger with multiple visual variants and sizes.\n\n @example\n ```vue\n <script setup>\n import { Button } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <Button variant=\"primary\" size=\"md\" @click=\"handleClick\">\n Submit\n </Button>\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nexport interface ButtonProps {\n /** Visual style variant */\n variant?: 'primary' | 'secondary' | 'ghost' | 'danger'\n /** Button size */\n size?: 'sm' | 'md' | 'lg'\n /** Show loading spinner and disable interaction */\n loading?: boolean\n /** Square button for icon-only use */\n iconOnly?: boolean\n /** HTML button type */\n type?: 'button' | 'submit' | 'reset'\n /** Disabled state */\n disabled?: boolean\n /** Stretch to full container width */\n fullWidth?: boolean\n}\n\nconst props = withDefaults(defineProps<ButtonProps>(), {\n variant: 'primary',\n size: 'md',\n loading: false,\n iconOnly: false,\n type: 'button',\n disabled: false,\n fullWidth: false,\n})\n\nconst emit = defineEmits<{\n (e: 'click', event: MouseEvent): void\n}>()\n\nconst isDisabled = computed(() => props.disabled || props.loading)\n\nconst classes = computed(() =>\n [\n 'strand-btn',\n `strand-btn--${props.variant}`,\n `strand-btn--${props.size}`,\n props.iconOnly && 'strand-btn--icon-only',\n props.fullWidth && 'strand-btn--full-width',\n props.loading && 'strand-btn--loading',\n ]\n .filter(Boolean)\n .join(' '),\n)\n\nfunction handleClick(event: MouseEvent) {\n if (!isDisabled.value) {\n emit('click', event)\n }\n}\n</script>\n\n<template>\n <button\n :type=\"type\"\n :class=\"classes\"\n :disabled=\"isDisabled\"\n :aria-disabled=\"isDisabled ? 'true' : undefined\"\n :aria-busy=\"loading ? 'true' : undefined\"\n @click=\"handleClick\"\n >\n <span v-if=\"loading\" class=\"strand-btn__spinner\" aria-hidden=\"true\" />\n <span\n class=\"strand-btn__content\"\n :style=\"loading ? { visibility: 'hidden' } : undefined\"\n >\n <slot />\n </span>\n </button>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Text input field with optional leading/trailing addons and error state.\n\n @example\n ```vue\n <script setup>\n import { Input } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <Input type=\"email\" placeholder=\"you@example.com\" />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed, useSlots } from 'vue'\n\nexport interface InputProps {\n /** Input type */\n type?: 'text' | 'email' | 'password' | 'search' | 'number'\n /** Show error styling */\n error?: boolean\n /** Disabled state */\n disabled?: boolean\n /** Current value */\n modelValue?: string\n}\n\nconst props = withDefaults(defineProps<InputProps>(), {\n type: 'text',\n error: false,\n disabled: false,\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: string): void\n}>()\n\nconst slots = useSlots()\n\nconst wrapperClasses = computed(() =>\n [\n 'strand-input',\n props.error && 'strand-input--error',\n props.disabled && 'strand-input--disabled',\n !!slots.leading && 'strand-input--has-leading',\n !!slots.trailing && 'strand-input--has-trailing',\n ]\n .filter(Boolean)\n .join(' '),\n)\n\nfunction handleInput(event: Event) {\n const target = event.target as HTMLInputElement\n emit('update:modelValue', target.value)\n}\n</script>\n\n<template>\n <div :class=\"wrapperClasses\">\n <span v-if=\"$slots.leading\" class=\"strand-input__leading\" aria-hidden=\"true\">\n <slot name=\"leading\" />\n </span>\n <input\n :type=\"type\"\n class=\"strand-input__field\"\n :disabled=\"disabled\"\n :aria-invalid=\"error ? 'true' : undefined\"\n :value=\"modelValue\"\n @input=\"handleInput\"\n />\n <span v-if=\"$slots.trailing\" class=\"strand-input__trailing\" aria-hidden=\"true\">\n <slot name=\"trailing\" />\n </span>\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Multi-line text input with auto-resize, character count, and error state.\n\n @example\n ```vue\n <script setup>\n import { ref } from 'vue';\n import { Textarea } from '@dillingerstaffing/strand-vue';\n const text = ref('');\n </script>\n\n <template>\n <Textarea v-model:value=\"text\" :max-length=\"500\" show-count auto-resize />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed, ref, onMounted, watch } from 'vue'\n\nexport interface TextareaProps {\n /** Auto-resize to fit content */\n autoResize?: boolean\n /** Show character count (requires maxLength) */\n showCount?: boolean\n /** Show error styling */\n error?: boolean\n /** Maximum character count */\n maxLength?: number\n /** Disabled state */\n disabled?: boolean\n /** Controlled value */\n modelValue?: string\n}\n\nconst props = withDefaults(defineProps<TextareaProps>(), {\n autoResize: false,\n showCount: false,\n error: false,\n disabled: false,\n modelValue: '',\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: string): void\n}>()\n\nconst textareaRef = ref<HTMLTextAreaElement | null>(null)\n\nconst wrapperClasses = computed(() =>\n [\n 'strand-textarea',\n props.error && 'strand-textarea--error',\n props.disabled && 'strand-textarea--disabled',\n props.autoResize && 'strand-textarea--auto-resize',\n ]\n .filter(Boolean)\n .join(' '),\n)\n\nconst currentLength = computed(() =>\n typeof props.modelValue === 'string' ? props.modelValue.length : 0,\n)\n\nfunction resize() {\n if (props.autoResize && textareaRef.value) {\n textareaRef.value.style.height = 'auto'\n textareaRef.value.style.height = `${textareaRef.value.scrollHeight}px`\n }\n}\n\nfunction handleInput(event: Event) {\n const target = event.target as HTMLTextAreaElement\n emit('update:modelValue', target.value)\n resize()\n}\n\nwatch(() => props.modelValue, () => {\n resize()\n})\n\nonMounted(() => {\n resize()\n})\n</script>\n\n<template>\n <div :class=\"wrapperClasses\">\n <textarea\n ref=\"textareaRef\"\n class=\"strand-textarea__field\"\n :disabled=\"disabled\"\n :aria-invalid=\"error ? 'true' : undefined\"\n :maxlength=\"maxLength\"\n :value=\"modelValue\"\n @input=\"handleInput\"\n />\n <span\n v-if=\"showCount && maxLength != null\"\n class=\"strand-textarea__count\"\n aria-live=\"polite\"\n >\n {{ currentLength }}/{{ maxLength }}\n </span>\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Native select dropdown with styled wrapper, error state, and placeholder support.\n\n @example\n ```vue\n <script setup>\n import { ref } from 'vue';\n import { Select } from '@dillingerstaffing/strand-vue';\n const role = ref('eng');\n const options = [\n { value: 'eng', label: 'Engineer' },\n { value: 'design', label: 'Designer' },\n ];\n </script>\n\n <template>\n <Select placeholder=\"Choose a role\" :options=\"options\" v-model:value=\"role\" />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nexport interface SelectOption {\n value: string\n label: string\n}\n\nexport interface SelectProps {\n /** Array of options to display */\n options: SelectOption[]\n /** Disabled state */\n disabled?: boolean\n /** Currently selected value */\n modelValue?: string\n /** Show error styling */\n error?: boolean\n /** Placeholder text shown as first disabled option */\n placeholder?: string\n}\n\nconst props = withDefaults(defineProps<SelectProps>(), {\n disabled: false,\n error: false,\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: string): void\n}>()\n\nconst wrapperClasses = computed(() =>\n [\n 'strand-select',\n props.error && 'strand-select--error',\n props.disabled && 'strand-select--disabled',\n ]\n .filter(Boolean)\n .join(' '),\n)\n\nfunction handleChange(event: Event) {\n const target = event.target as HTMLSelectElement\n emit('update:modelValue', target.value)\n}\n</script>\n\n<template>\n <div :class=\"wrapperClasses\">\n <select\n class=\"strand-select__field\"\n :value=\"modelValue\"\n :disabled=\"disabled\"\n :aria-invalid=\"error ? 'true' : undefined\"\n @change=\"handleChange\"\n >\n <option v-if=\"placeholder\" value=\"\" disabled>\n {{ placeholder }}\n </option>\n <option\n v-for=\"opt in options\"\n :key=\"opt.value\"\n :value=\"opt.value\"\n >\n {{ opt.label }}\n </option>\n </select>\n <span class=\"strand-select__arrow\" aria-hidden=\"true\" />\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Toggle control for boolean or indeterminate selections with optional label.\n\n @example\n ```vue\n <script setup>\n import { ref } from 'vue';\n import { Checkbox } from '@dillingerstaffing/strand-vue';\n const accepted = ref(false);\n </script>\n\n <template>\n <Checkbox v-model:checked=\"accepted\" label=\"Accept terms\" />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed, ref, watch, onMounted } from 'vue'\n\nexport interface CheckboxProps {\n /** Controlled checked state */\n checked?: boolean\n /** Indeterminate visual state */\n indeterminate?: boolean\n /** Disabled state */\n disabled?: boolean\n /** Label text */\n label?: string\n}\n\nconst props = withDefaults(defineProps<CheckboxProps>(), {\n checked: false,\n indeterminate: false,\n disabled: false,\n})\n\nconst emit = defineEmits<{\n (e: 'change', event: Event): void\n}>()\n\nconst inputRef = ref<HTMLInputElement | null>(null)\n\nonMounted(() => {\n if (inputRef.value) {\n inputRef.value.indeterminate = props.indeterminate\n }\n})\n\nwatch(() => props.indeterminate, (val) => {\n if (inputRef.value) {\n inputRef.value.indeterminate = val\n }\n})\n\nconst classes = computed(() =>\n [\n 'strand-checkbox',\n props.checked && 'strand-checkbox--checked',\n props.indeterminate && 'strand-checkbox--indeterminate',\n props.disabled && 'strand-checkbox--disabled',\n ]\n .filter(Boolean)\n .join(' '),\n)\n\nconst ariaChecked = computed(() =>\n props.indeterminate ? 'mixed' : props.checked ? 'true' : 'false',\n)\n\nfunction handleChange(event: Event) {\n if (!props.disabled) {\n emit('change', event)\n }\n}\n\nfunction handleKeyDown(event: KeyboardEvent) {\n if (event.key === ' ' && !props.disabled) {\n event.preventDefault()\n if (inputRef.value) {\n inputRef.value.click()\n }\n }\n}\n</script>\n\n<template>\n <label :class=\"classes\" @keydown=\"handleKeyDown\">\n <input\n ref=\"inputRef\"\n type=\"checkbox\"\n class=\"strand-checkbox__native\"\n :checked=\"checked\"\n :disabled=\"disabled\"\n :aria-checked=\"ariaChecked\"\n role=\"checkbox\"\n @change=\"handleChange\"\n />\n <span class=\"strand-checkbox__control\" aria-hidden=\"true\">\n <svg\n v-if=\"indeterminate\"\n class=\"strand-checkbox__icon\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <line\n x1=\"4\"\n y1=\"8\"\n x2=\"12\"\n y2=\"8\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n />\n </svg>\n <svg\n v-else-if=\"checked\"\n class=\"strand-checkbox__icon\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n >\n <path\n d=\"M3.5 8L6.5 11L12.5 5\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </span>\n <span v-if=\"label\" class=\"strand-checkbox__label\">{{ label }}</span>\n </label>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Single-selection control for use within a radio group.\n\n @example\n ```vue\n <script setup>\n import { ref } from 'vue';\n import { Radio } from '@dillingerstaffing/strand-vue';\n const selected = ref('pro');\n </script>\n\n <template>\n <Radio name=\"plan\" value=\"pro\" label=\"Pro\" :checked=\"selected === 'pro'\" @change=\"selected = 'pro'\" />\n <Radio name=\"plan\" value=\"free\" label=\"Free\" :checked=\"selected === 'free'\" @change=\"selected = 'free'\" />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nexport interface RadioProps {\n /** Controlled checked state */\n checked?: boolean\n /** Disabled state */\n disabled?: boolean\n /** Label text */\n label?: string\n /** Radio group name */\n name?: string\n /** Radio value */\n value?: string\n}\n\nconst props = withDefaults(defineProps<RadioProps>(), {\n checked: false,\n disabled: false,\n})\n\nconst emit = defineEmits<{\n (e: 'change', event: Event): void\n}>()\n\nconst classes = computed(() =>\n [\n 'strand-radio',\n props.checked && 'strand-radio--checked',\n props.disabled && 'strand-radio--disabled',\n ]\n .filter(Boolean)\n .join(' '),\n)\n\nfunction handleChange(event: Event) {\n if (!props.disabled) {\n emit('change', event)\n }\n}\n</script>\n\n<template>\n <label :class=\"classes\">\n <input\n type=\"radio\"\n class=\"strand-radio__native\"\n :checked=\"checked\"\n :disabled=\"disabled\"\n :name=\"name\"\n :value=\"value\"\n @change=\"handleChange\"\n />\n <span class=\"strand-radio__control\" aria-hidden=\"true\">\n <span class=\"strand-radio__dot\" />\n </span>\n <span v-if=\"label\" class=\"strand-radio__label\">{{ label }}</span>\n </label>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Toggle switch for binary on/off settings with optional inline label.\n\n @example\n ```vue\n <script setup>\n import { ref } from 'vue';\n import { Switch } from '@dillingerstaffing/strand-vue';\n const darkMode = ref(false);\n </script>\n\n <template>\n <Switch v-model:checked=\"darkMode\" label=\"Dark mode\" />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nexport interface SwitchProps {\n /** Controlled checked state */\n checked?: boolean\n /** Disabled state */\n disabled?: boolean\n /** Inline label text */\n label?: string\n}\n\nconst props = withDefaults(defineProps<SwitchProps>(), {\n checked: false,\n disabled: false,\n})\n\nconst emit = defineEmits<{\n (e: 'change', checked: boolean): void\n}>()\n\nconst classes = computed(() =>\n [\n 'strand-switch',\n props.checked && 'strand-switch--checked',\n props.disabled && 'strand-switch--disabled',\n ]\n .filter(Boolean)\n .join(' '),\n)\n\nfunction handleClick() {\n if (!props.disabled) {\n emit('change', !props.checked)\n }\n}\n\nfunction handleKeyDown(event: KeyboardEvent) {\n if ((event.key === ' ' || event.key === 'Enter') && !props.disabled) {\n event.preventDefault()\n emit('change', !props.checked)\n }\n}\n</script>\n\n<template>\n <label :class=\"classes\">\n <button\n type=\"button\"\n role=\"switch\"\n class=\"strand-switch__track\"\n :aria-checked=\"checked ? 'true' : 'false'\"\n :disabled=\"disabled\"\n @click=\"handleClick\"\n @keydown=\"handleKeyDown\"\n >\n <span class=\"strand-switch__thumb\" aria-hidden=\"true\" />\n </button>\n <span v-if=\"label\" class=\"strand-switch__label\">{{ label }}</span>\n </label>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Range input control for selecting a numeric value within a bounded interval.\n\n @example\n ```vue\n <script setup>\n import { ref } from 'vue';\n import { Slider } from '@dillingerstaffing/strand-vue';\n const value = ref(50);\n </script>\n\n <template>\n <Slider :min=\"0\" :max=\"100\" :step=\"5\" v-model:value=\"value\" />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nexport interface SliderProps {\n /** Minimum value */\n min?: number\n /** Maximum value */\n max?: number\n /** Step increment */\n step?: number\n /** Current value */\n modelValue?: number\n /** Disabled state */\n disabled?: boolean\n}\n\nconst props = withDefaults(defineProps<SliderProps>(), {\n min: 0,\n max: 100,\n step: 1,\n disabled: false,\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: number): void\n}>()\n\nconst wrapperClasses = computed(() =>\n [\n 'strand-slider',\n props.disabled && 'strand-slider--disabled',\n ]\n .filter(Boolean)\n .join(' '),\n)\n\nfunction handleInput(event: Event) {\n const target = event.target as HTMLInputElement\n emit('update:modelValue', Number(target.value))\n}\n</script>\n\n<template>\n <div :class=\"wrapperClasses\">\n <input\n type=\"range\"\n class=\"strand-slider__field\"\n :min=\"min\"\n :max=\"max\"\n :step=\"step\"\n :value=\"modelValue\"\n :disabled=\"disabled\"\n :aria-valuemin=\"min\"\n :aria-valuemax=\"max\"\n :aria-valuenow=\"modelValue\"\n @input=\"handleInput\"\n />\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Form control wrapper providing label, hint text, error messaging, and required indicator.\n\n @example\n ```vue\n <script setup>\n import { FormField, Input } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <FormField label=\"Email\" html-for=\"email\" hint=\"Work email preferred\" required>\n <Input id=\"email\" type=\"email\" />\n </FormField>\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nexport interface FormFieldProps {\n /** Label text */\n label: string\n /** Associates the label with a form control */\n htmlFor: string\n /** Hint text displayed below the input */\n hint?: string\n /** Error text displayed below the input (replaces hint) */\n error?: string\n /** Show required indicator */\n required?: boolean\n}\n\nconst props = withDefaults(defineProps<FormFieldProps>(), {\n required: false,\n})\n\nconst classes = computed(() =>\n [\n 'strand-form-field',\n props.error && 'strand-form-field--error',\n ]\n .filter(Boolean)\n .join(' '),\n)\n</script>\n\n<template>\n <div :class=\"classes\">\n <label class=\"strand-form-field__label\" :for=\"htmlFor\">\n {{ label }}\n <span v-if=\"required\" class=\"strand-form-field__required\" aria-hidden=\"true\">\n *\n </span>\n </label>\n <div class=\"strand-form-field__control\">\n <slot />\n </div>\n <p\n v-if=\"error\"\n class=\"strand-form-field__error\"\n :id=\"`${htmlFor}-error`\"\n role=\"alert\"\n >\n {{ error }}\n </p>\n <p\n v-else-if=\"hint\"\n class=\"strand-form-field__hint\"\n :id=\"`${htmlFor}-hint`\"\n >\n {{ hint }}\n </p>\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Contained surface for grouping related content with elevation and padding options.\n\n @example\n ```vue\n <script setup>\n import { Card } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <Card variant=\"elevated\" padding=\"lg\">\n <h3>Card Title</h3>\n <p>Card content goes here.</p>\n </Card>\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n /** Visual style variant */\n variant?: 'elevated' | 'outlined' | 'interactive'\n /** Inner padding */\n padding?: 'none' | 'sm' | 'md' | 'lg'\n /** Additional CSS class */\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n variant: 'elevated',\n padding: 'md',\n className: '',\n})\n\nconst classes = computed(() =>\n [\n 'strand-card',\n `strand-card--${props.variant}`,\n `strand-card--pad-${props.padding}`,\n props.className,\n ]\n .filter(Boolean)\n .join(' '),\n)\n</script>\n\n<template>\n <div :class=\"classes\" v-bind=\"$attrs\">\n <slot />\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Small status indicator or notification count, displayed inline or overlaid on content.\n\n @example\n ```vue\n <script setup>\n import { Badge } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <Badge variant=\"count\" status=\"red\" :count=\"5\">\n <button>Notifications</button>\n </Badge>\n <Badge variant=\"dot\" status=\"teal\" />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed, useSlots } from 'vue'\n\ninterface Props {\n /** Badge display mode */\n variant?: 'dot' | 'count'\n /** Color status */\n status?: 'default' | 'teal' | 'blue' | 'amber' | 'red'\n /** Number to display (count variant only) */\n count?: number\n /** Maximum count before showing \"N+\" */\n maxCount?: number\n /** Additional CSS class */\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n variant: 'count',\n status: 'default',\n maxCount: 99,\n className: '',\n})\n\nconst slots = useSlots()\n\nconst hasChildren = computed(() => !!slots.default)\n\nconst displayValue = computed(() => {\n if (props.variant === 'count') {\n return props.count != null && props.count > props.maxCount\n ? `${props.maxCount}+`\n : props.count\n }\n return null\n})\n\nconst ariaLabel = computed(() => {\n if (props.variant === 'dot') return 'Status indicator'\n if (props.count != null) return `${props.count} notifications`\n return undefined\n})\n\nconst badgeClasses = computed(() =>\n [\n 'strand-badge__indicator',\n `strand-badge--${props.variant}`,\n `strand-badge--${props.status}`,\n ]\n .filter(Boolean)\n .join(' '),\n)\n\nconst wrapperClasses = computed(() =>\n hasChildren.value\n ? ['strand-badge', props.className].filter(Boolean).join(' ')\n : ['strand-badge', 'strand-badge--inline', props.className].filter(Boolean).join(' '),\n)\n</script>\n\n<template>\n <span :class=\"wrapperClasses\" v-bind=\"$attrs\">\n <slot />\n <span :class=\"badgeClasses\" :aria-label=\"ariaLabel\" role=\"status\">{{ displayValue }}</span>\n </span>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Circular user representation with image, initials fallback, and multiple sizes.\n\n @example\n ```vue\n <script setup>\n import { Avatar } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <Avatar src=\"/photo.jpg\" alt=\"Jane Doe\" size=\"lg\" />\n <Avatar initials=\"JD\" size=\"md\" />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\n\ninterface Props {\n /** Image URL */\n src?: string\n /** Alt text for image */\n alt?: string\n /** Fallback initials (1-2 characters) */\n initials?: string\n /** Avatar size */\n size?: 'sm' | 'md' | 'lg' | 'xl'\n /** Additional CSS class */\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n alt: '',\n initials: '',\n size: 'md',\n className: '',\n})\n\nconst imgError = ref(false)\n\nconst handleError = () => {\n imgError.value = true\n}\n\nconst showImage = computed(() => props.src && !imgError.value)\nconst displayInitials = computed(() => props.initials.slice(0, 2).toUpperCase())\n\nconst classes = computed(() =>\n [\n 'strand-avatar',\n `strand-avatar--${props.size}`,\n props.className,\n ]\n .filter(Boolean)\n .join(' '),\n)\n</script>\n\n<template>\n <div :class=\"classes\" role=\"img\" :aria-label=\"alt || displayInitials\" v-bind=\"$attrs\">\n <img\n v-if=\"showImage\"\n class=\"strand-avatar__img\"\n :src=\"src\"\n :alt=\"alt\"\n @error=\"handleError\"\n />\n <span v-else class=\"strand-avatar__initials\" aria-hidden=\"true\">{{ displayInitials }}</span>\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Compact label for categorization, filtering, or status display.\n\n @example\n ```vue\n <script setup>\n import { Tag } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <Tag variant=\"solid\" status=\"teal\" removable @remove=\"handleRemove\">\n Active\n </Tag>\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n /** Visual style variant */\n variant?: 'solid' | 'outlined'\n /** Color status */\n status?: 'default' | 'teal' | 'blue' | 'amber' | 'red'\n /** Show remove button */\n removable?: boolean\n /** Additional CSS class */\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n variant: 'solid',\n status: 'default',\n removable: false,\n className: '',\n})\n\nconst emit = defineEmits<{\n remove: []\n}>()\n\nconst classes = computed(() =>\n [\n 'strand-tag',\n `strand-tag--${props.variant}`,\n `strand-tag--${props.status}`,\n props.className,\n ]\n .filter(Boolean)\n .join(' '),\n)\n</script>\n\n<template>\n <span :class=\"classes\" v-bind=\"$attrs\">\n <span class=\"strand-tag__text\"><slot /></span>\n <button\n v-if=\"removable\"\n type=\"button\"\n class=\"strand-tag__remove\"\n aria-label=\"Remove\"\n @click=\"emit('remove')\"\n >\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n aria-hidden=\"true\"\n >\n <path\n d=\"M3 3l6 6M9 3l-6 6\"\n stroke=\"currentColor\"\n stroke-width=\"1.5\"\n stroke-linecap=\"round\"\n />\n </svg>\n </button>\n </span>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Data table with column definitions, sortable headers, and row rendering.\n\n @example\n ```vue\n <script setup>\n import { Table } from '@dillingerstaffing/strand-vue';\n\n const columns = [\n { key: 'name', header: 'Name', sortable: true },\n { key: 'role', header: 'Role' },\n ];\n const data = [\n { name: 'Jane', role: 'Engineer' },\n { name: 'Alex', role: 'Designer' },\n ];\n </script>\n\n <template>\n <Table :columns=\"columns\" :data=\"data\" @sort=\"(key, dir) => console.log(key, dir)\" />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\n\nexport interface TableColumn {\n /** Unique key matching the data field */\n key: string\n /** Display header text */\n header: string\n /** Whether the column is sortable */\n sortable?: boolean\n /** Optional fixed width */\n width?: string\n}\n\nexport interface TableProps {\n /** Column definitions */\n columns: TableColumn[]\n /** Row data */\n data: Array<Record<string, unknown>>\n}\n\nconst props = defineProps<TableProps>()\n\nconst emit = defineEmits<{\n (e: 'sort', key: string, direction: 'asc' | 'desc'): void\n}>()\n\nconst sortKey = ref<string | null>(null)\nconst sortDirection = ref<'asc' | 'desc'>('asc')\n\nconst wrapperClasses = computed(() =>\n ['strand-table-wrapper'].filter(Boolean).join(' '),\n)\n\nfunction handleSort(key: string) {\n const nextDirection =\n sortKey.value === key && sortDirection.value === 'asc' ? 'desc' : 'asc'\n sortKey.value = key\n sortDirection.value = nextDirection\n emit('sort', key, nextDirection)\n}\n\nfunction sortIndicator(key: string): string {\n if (sortKey.value === key) {\n return sortDirection.value === 'asc' ? '\\u2191' : '\\u2193'\n }\n return '\\u2195'\n}\n</script>\n\n<template>\n <div :class=\"wrapperClasses\">\n <table class=\"strand-table\">\n <thead class=\"strand-table__head\">\n <tr>\n <th\n v-for=\"col in columns\"\n :key=\"col.key\"\n class=\"strand-table__th\"\n :style=\"col.width ? { width: col.width } : undefined\"\n >\n <button\n v-if=\"col.sortable\"\n type=\"button\"\n class=\"strand-table__sort-btn\"\n :aria-label=\"`Sort by ${col.header}`\"\n @click=\"handleSort(col.key)\"\n >\n {{ col.header }}\n <span class=\"strand-table__sort-indicator\" aria-hidden=\"true\">\n {{ sortIndicator(col.key) }}\n </span>\n </button>\n <template v-else>\n {{ col.header }}\n </template>\n </th>\n </tr>\n </thead>\n <tbody class=\"strand-table__body\">\n <tr\n v-for=\"(row, rowIndex) in data\"\n :key=\"rowIndex\"\n class=\"strand-table__row\"\n >\n <td\n v-for=\"col in columns\"\n :key=\"col.key\"\n class=\"strand-table__td\"\n >\n {{ row[col.key] }}\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Instrument-panel metric display with overline label and prominent value.\n\n @example\n ```vue\n <script setup>\n import { DataReadout } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <DataReadout label=\"Conversion Rate\" value=\"94%\" size=\"lg\" />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n /** Overline label text */\n label: string\n /** The large displayed value */\n value: string | number\n /** Size variant: sm (compact), md (default), lg (hero), xl (primary instrument) */\n size?: 'sm' | 'md' | 'lg' | 'xl'\n /** Additional CSS class */\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n className: '',\n})\n\nconst classes = computed(() =>\n [\n 'strand-data-readout',\n props.size && props.size !== 'md' ? `strand-data-readout--${props.size}` : '',\n props.className,\n ]\n .filter(Boolean)\n .join(' '),\n)\n</script>\n\n<template>\n <div :class=\"classes\" v-bind=\"$attrs\">\n <span class=\"strand-data-readout__label\">{{ label }}</span>\n <span class=\"strand-data-readout__value\">{{ value }}</span>\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Syntax-highlighted code display with optional language label and copy-to-clipboard.\n\n @example\n ```vue\n <script setup>\n import { CodeBlock } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <CodeBlock code=\"const x = 42;\" language=\"js\" copyable />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed, onBeforeUnmount, ref } from 'vue'\n\ninterface Props {\n /** The code content to display */\n code: string\n /** Optional language label (e.g. \"html\", \"css\", \"bash\") */\n language?: string\n /** Additional CSS class */\n className?: string\n /**\n * Render the one-click copy-to-clipboard button. Defaults to true so\n * every CodeBlock is copyable out of the box; pass false to opt out\n * for blocks that should not advertise a copy affordance.\n */\n copyable?: boolean\n}\n\nconst COPIED_DURATION_MS = 1500\n\nconst props = withDefaults(defineProps<Props>(), {\n className: '',\n copyable: true,\n})\n\nconst classes = computed(() =>\n ['strand-code-block', props.className].filter(Boolean).join(' '),\n)\n\nconst copied = ref(false)\nlet timer: number | null = null\n\nonBeforeUnmount(() => {\n if (timer !== null) window.clearTimeout(timer)\n})\n\nasync function handleCopy() {\n try {\n if (navigator.clipboard?.writeText) {\n await navigator.clipboard.writeText(props.code)\n } else {\n const ta = document.createElement('textarea')\n ta.value = props.code\n ta.setAttribute('readonly', '')\n ta.style.position = 'absolute'\n ta.style.left = '-9999px'\n document.body.appendChild(ta)\n ta.select()\n document.execCommand('copy')\n document.body.removeChild(ta)\n }\n copied.value = true\n if (timer !== null) window.clearTimeout(timer)\n timer = window.setTimeout(() => {\n copied.value = false\n }, COPIED_DURATION_MS)\n } catch {\n // Ignore copy failures.\n }\n}\n</script>\n\n<template>\n <div :class=\"classes\" :data-strand-copy=\"copyable ? '' : undefined\" v-bind=\"$attrs\">\n <span v-if=\"language\" class=\"strand-code-block__label\">{{ language }}</span>\n <pre class=\"strand-code-block__pre\"><code>{{ code }}</code></pre>\n <button\n v-if=\"copyable\"\n type=\"button\"\n :class=\"['strand-code-block__copy', copied ? 'strand-code-block__copy--copied' : '']\"\n :aria-label=\"copied ? 'Copied' : 'Copy code to clipboard'\"\n @click=\"handleCopy\"\n >\n <svg\n class=\"strand-code-block__copy-icon strand-code-block__copy-icon--clipboard\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.75\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path d=\"M6 3 V2 a1 1 0 0 1 1-1 h2 a1 1 0 0 1 1 1 v1 M5 3 h6 a1 1 0 0 1 1 1 v9 a1 1 0 0 1 -1 1 h-6 a1 1 0 0 1 -1 -1 v-9 a1 1 0 0 1 1 -1 z\" />\n </svg>\n <svg\n class=\"strand-code-block__copy-icon strand-code-block__copy-icon--check\"\n viewBox=\"0 0 16 16\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"1.75\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n aria-hidden=\"true\"\n focusable=\"false\"\n >\n <path d=\"M3 8 l3 3 l7 -7\" />\n </svg>\n </button>\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Flexbox layout container for arranging children with consistent spacing.\n\n @example\n ```vue\n <script setup>\n import { Stack, Button } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <Stack direction=\"horizontal\" :gap=\"4\" align=\"center\">\n <Button variant=\"primary\">Save</Button>\n <Button variant=\"secondary\">Cancel</Button>\n </Stack>\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n /** Flex direction */\n direction?: 'vertical' | 'horizontal'\n /** Gap between items, maps to --strand-space-{n} */\n gap?: number\n /** Cross-axis alignment */\n align?: 'start' | 'center' | 'end' | 'stretch'\n /** Main-axis alignment */\n justify?: 'start' | 'center' | 'end' | 'between' | 'around'\n /** Enable flex-wrap */\n wrap?: boolean\n /** Additional CSS class */\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n direction: 'vertical',\n gap: 4,\n align: 'stretch',\n wrap: false,\n className: '',\n})\n\nconst classes = computed(() =>\n [\n 'strand-stack',\n `strand-stack--${props.direction}`,\n props.align !== 'stretch' && `strand-stack--align-${props.align}`,\n props.justify && `strand-stack--justify-${props.justify}`,\n props.wrap && 'strand-stack--wrap',\n props.className,\n ]\n .filter(Boolean)\n .join(' '),\n)\n\nconst inlineStyle = computed(() => ({\n gap: `var(--strand-space-${props.gap})`,\n}))\n</script>\n\n<template>\n <div :class=\"classes\" :style=\"inlineStyle\" v-bind=\"$attrs\">\n <slot />\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n CSS Grid layout with configurable column count and gap spacing.\n\n @example\n ```vue\n <script setup>\n import { Grid, Card } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <Grid :columns=\"3\" :gap=\"6\">\n <Card>Item 1</Card>\n <Card>Item 2</Card>\n <Card>Item 3</Card>\n </Grid>\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n /** Number of equal-width columns */\n columns?: number\n /** Gap between items, maps to --strand-space-{n} */\n gap?: number\n /** Additional CSS class */\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n columns: 1,\n gap: 4,\n className: '',\n})\n\nconst classes = computed(() =>\n ['strand-grid', props.className].filter(Boolean).join(' '),\n)\n\nconst inlineStyle = computed(() => ({\n gridTemplateColumns: `repeat(${props.columns}, 1fr)`,\n gap: `var(--strand-space-${props.gap})`,\n}))\n</script>\n\n<template>\n <div :class=\"classes\" :style=\"inlineStyle\" v-bind=\"$attrs\">\n <slot />\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Centered max-width wrapper for constraining page content.\n\n @example\n ```vue\n <script setup>\n import { Container } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <Container size=\"default\">\n <p>Content constrained to default max width.</p>\n </Container>\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n /** Max-width constraint */\n size?: 'narrow' | 'default' | 'wide' | 'full'\n /** Additional CSS class */\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n size: 'default',\n className: '',\n})\n\nconst classes = computed(() =>\n [\n 'strand-container',\n `strand-container--${props.size}`,\n props.className,\n ]\n .filter(Boolean)\n .join(' '),\n)\n</script>\n\n<template>\n <div :class=\"classes\" v-bind=\"$attrs\">\n <slot />\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Visual separator line between content sections, horizontal or vertical.\n\n @example\n ```vue\n <script setup>\n import { Divider } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <Divider direction=\"horizontal\" label=\"OR\" />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n /** Separator direction */\n direction?: 'horizontal' | 'vertical'\n /** Optional label text displayed in the middle of the line */\n label?: string\n /** Additional CSS class */\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n direction: 'horizontal',\n className: '',\n})\n\nconst isVertical = computed(() => props.direction === 'vertical')\nconst isLabeled = computed(() => !isVertical.value && !!props.label)\nconst isPlainHorizontal = computed(() => !isVertical.value && !props.label)\n\nconst classes = computed(() => {\n if (isVertical.value) {\n return ['strand-divider', 'strand-divider--vertical', props.className]\n .filter(Boolean)\n .join(' ')\n }\n if (isLabeled.value) {\n return ['strand-divider', 'strand-divider--horizontal', 'strand-divider--labeled', props.className]\n .filter(Boolean)\n .join(' ')\n }\n return ['strand-divider', 'strand-divider--horizontal', props.className]\n .filter(Boolean)\n .join(' ')\n})\n</script>\n\n<template>\n <div\n v-if=\"isVertical\"\n :class=\"classes\"\n role=\"separator\"\n aria-orientation=\"vertical\"\n />\n <div\n v-else-if=\"isLabeled\"\n :class=\"classes\"\n role=\"separator\"\n aria-orientation=\"horizontal\"\n >\n <span class=\"strand-divider__line\" />\n <span class=\"strand-divider__label\">{{ label }}</span>\n <span class=\"strand-divider__line\" />\n </div>\n <hr\n v-else\n :class=\"classes\"\n role=\"separator\"\n aria-orientation=\"horizontal\"\n />\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Page-level content region with padding, background, and optional top border.\n\n @example\n ```vue\n <script setup>\n import { Section, Container } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <Section variant=\"hero\" background=\"recessed\">\n <Container>\n <h1>Hero Section</h1>\n </Container>\n </Section>\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n /** Padding variant */\n variant?: 'standard' | 'hero' | 'compact'\n /** Surface background */\n background?: 'primary' | 'elevated' | 'recessed'\n /** Top border separator */\n borderTop?: boolean\n /** Additional CSS class */\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n variant: 'standard',\n background: 'primary',\n borderTop: false,\n className: '',\n})\n\nconst classes = computed(() =>\n [\n 'strand-section',\n `strand-section--${props.variant}`,\n `strand-section--bg-${props.background}`,\n props.borderTop && 'strand-section--border-top',\n props.className,\n ]\n .filter(Boolean)\n .join(' '),\n)\n</script>\n\n<template>\n <section :class=\"classes\" v-bind=\"$attrs\">\n <slot />\n </section>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Recessed dark surface for displaying instrument-style UI components.\n\n @example\n ```vue\n <script setup>\n import { InstrumentViewport, DataReadout } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <InstrumentViewport grid>\n <DataReadout label=\"Uptime\" value=\"99.9%\" />\n </InstrumentViewport>\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n /** Show grid overlay lines */\n grid?: boolean\n /** Render as page-filling instrument cabinet (DL Part 9.3 full-bleed mode).\n * Requires the host page to apply `strand-body--instrument` to <body>\n * so the dark surface reaches the screen edge. */\n fullBleed?: boolean\n /** Additional CSS class */\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n grid: false,\n fullBleed: false,\n className: '',\n})\n\nconst classes = computed(() =>\n [\n 'strand-instrument-viewport',\n props.grid && 'strand-instrument-viewport--grid',\n props.fullBleed && 'strand-instrument-viewport--full-bleed',\n props.className,\n ]\n .filter(Boolean)\n .join(' '),\n)\n</script>\n\n<template>\n <div :class=\"classes\" v-bind=\"$attrs\">\n <slot />\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Intersection Observer wrapper that reveals children with a transition on scroll.\n\n @example\n ```vue\n <script setup>\n import { ScrollReveal } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <ScrollReveal :threshold=\"0.2\" once>\n <p>This content fades in on scroll.</p>\n </ScrollReveal>\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed, ref, onMounted, onUnmounted } from 'vue'\n\ninterface Props {\n /** Intersection threshold (0-1) to trigger reveal */\n threshold?: number\n /** Only reveal once (do not hide on exit) */\n once?: boolean\n /** Additional CSS class */\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n threshold: 0.1,\n once: true,\n className: '',\n})\n\nconst elRef = ref<HTMLDivElement | null>(null)\nconst visible = ref(false)\nlet observer: IntersectionObserver | null = null\n\nconst classes = computed(() =>\n [\n 'strand-reveal',\n visible.value && 'strand-reveal--visible',\n props.className,\n ]\n .filter(Boolean)\n .join(' '),\n)\n\nonMounted(() => {\n if (!elRef.value) return\n\n observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n visible.value = true\n if (props.once && observer && elRef.value) {\n observer.unobserve(elRef.value)\n }\n } else if (!props.once) {\n visible.value = false\n }\n }\n },\n { threshold: props.threshold },\n )\n\n observer.observe(elRef.value)\n})\n\nonUnmounted(() => {\n if (observer) {\n observer.disconnect()\n observer = null\n }\n})\n</script>\n\n<template>\n <div ref=\"elRef\" :class=\"classes\" v-bind=\"$attrs\">\n <slot />\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Styled anchor element with external-link handling and visual variants.\n\n @example\n ```vue\n <script setup>\n import { Link } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <Link href=\"/docs\" variant=\"cta\">Read the docs</Link>\n <Link href=\"https://example.com\" external>External site</Link>\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n /** URL destination */\n href: string\n /** Opens in new tab with rel=\"noopener noreferrer\" */\n external?: boolean\n /** Style variant */\n variant?: 'default' | 'cta' | 'mono'\n /** Additional CSS class */\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n external: false,\n variant: 'default',\n className: '',\n})\n\nconst classes = computed(() =>\n ['strand-link', props.variant !== 'default' && `strand-link--${props.variant}`, props.className].filter(Boolean).join(' '),\n)\n</script>\n\n<template>\n <a\n :href=\"href\"\n :class=\"classes\"\n v-bind=\"{\n ...(external ? { target: '_blank', rel: 'noopener noreferrer' } : {}),\n ...$attrs,\n }\"\n >\n <slot />\n </a>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Tabbed content switcher with keyboard navigation and ARIA tab pattern.\n\n @example\n ```vue\n <script setup>\n import { ref } from 'vue';\n import { Tabs } from '@dillingerstaffing/strand-vue';\n const activeTab = ref('overview');\n const tabs = [\n { id: 'overview', label: 'Overview' },\n { id: 'details', label: 'Details' },\n ];\n </script>\n\n <template>\n <Tabs :tabs=\"tabs\" v-model:active-tab=\"activeTab\">\n <template #overview><p>Overview content</p></template>\n <template #details><p>Details content</p></template>\n </Tabs>\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\n\nexport interface TabItem {\n id: string\n label: string\n}\n\nexport interface TabsProps {\n /** Tab definitions (id + label only; content is provided via slots) */\n tabs: TabItem[]\n /** Currently active tab id (controlled) */\n activeTab: string\n}\n\nconst props = defineProps<TabsProps>()\n\nconst emit = defineEmits<{\n (e: 'change', id: string): void\n}>()\n\nconst tablistRef = ref<HTMLDivElement | null>(null)\n\nconst classes = computed(() => ['strand-tabs'].filter(Boolean).join(' '))\n\nfunction focusAndSelect(index: number) {\n const tab = props.tabs[index]\n if (tab) {\n emit('change', tab.id)\n const buttons = tablistRef.value?.querySelectorAll<HTMLButtonElement>('[role=\"tab\"]')\n buttons?.[index]?.focus()\n }\n}\n\nfunction handleKeyDown(event: KeyboardEvent) {\n const currentIndex = props.tabs.findIndex((t) => t.id === props.activeTab)\n let nextIndex: number | null = null\n\n switch (event.key) {\n case 'ArrowRight':\n nextIndex = (currentIndex + 1) % props.tabs.length\n break\n case 'ArrowLeft':\n nextIndex = (currentIndex - 1 + props.tabs.length) % props.tabs.length\n break\n case 'Home':\n nextIndex = 0\n break\n case 'End':\n nextIndex = props.tabs.length - 1\n break\n default:\n return\n }\n\n event.preventDefault()\n focusAndSelect(nextIndex)\n}\n</script>\n\n<template>\n <div :class=\"classes\">\n <div ref=\"tablistRef\" role=\"tablist\" @keydown=\"handleKeyDown\">\n <button\n v-for=\"tab in tabs\"\n :key=\"tab.id\"\n :id=\"`tab-${tab.id}`\"\n role=\"tab\"\n type=\"button\"\n :class=\"[\n 'strand-tabs__tab',\n tab.id === activeTab && 'strand-tabs__tab--active',\n ].filter(Boolean).join(' ')\"\n :aria-selected=\"tab.id === activeTab ? 'true' : 'false'\"\n :aria-controls=\"`panel-${tab.id}`\"\n :tabindex=\"tab.id === activeTab ? 0 : -1\"\n @click=\"emit('change', tab.id)\"\n >\n {{ tab.label }}\n </button>\n </div>\n\n <div\n v-for=\"tab in tabs\"\n :key=\"tab.id\"\n :id=\"`panel-${tab.id}`\"\n role=\"tabpanel\"\n :aria-labelledby=\"`tab-${tab.id}`\"\n :hidden=\"tab.id !== activeTab || undefined\"\n :tabindex=\"0\"\n >\n <slot :name=\"`panel-${tab.id}`\" />\n </div>\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Hierarchical navigation path showing the current page location.\n\n @example\n ```vue\n <script setup>\n import { Breadcrumb } from '@dillingerstaffing/strand-vue';\n\n const items = [\n { label: 'Home', href: '/' },\n { label: 'Settings', href: '/settings' },\n { label: 'Profile' },\n ];\n </script>\n\n <template>\n <Breadcrumb :items=\"items\" />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nexport interface BreadcrumbItem {\n label: string\n href?: string\n}\n\nexport interface BreadcrumbProps {\n /** Breadcrumb path items; last item is treated as current page */\n items: BreadcrumbItem[]\n /** Separator character between items */\n separator?: string\n}\n\nconst props = withDefaults(defineProps<BreadcrumbProps>(), {\n separator: '/',\n})\n\nconst classes = computed(() =>\n ['strand-breadcrumb'].filter(Boolean).join(' '),\n)\n</script>\n\n<template>\n <nav aria-label=\"Breadcrumb\" :class=\"classes\">\n <ol class=\"strand-breadcrumb__list\">\n <li\n v-for=\"(item, index) in items\"\n :key=\"`${item.label}-${index}`\"\n class=\"strand-breadcrumb__item\"\n >\n <span\n v-if=\"index > 0\"\n class=\"strand-breadcrumb__separator\"\n aria-hidden=\"true\"\n >\n {{ separator }}\n </span>\n <span\n v-if=\"index === items.length - 1\"\n class=\"strand-breadcrumb__current\"\n aria-current=\"page\"\n >\n {{ item.label }}\n </span>\n <a\n v-else\n :href=\"item.href\"\n class=\"strand-breadcrumb__link\"\n >\n {{ item.label }}\n </a>\n </li>\n </ol>\n </nav>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Top-level navigation bar with logo slot, link items, actions, and responsive mobile menu.\n\n @example\n ```vue\n <script setup>\n import { Nav } from '@dillingerstaffing/strand-vue';\n\n const items = [\n { label: 'Home', href: '/', active: true },\n { label: 'About', href: '/about' },\n ];\n </script>\n\n <template>\n <Nav :items=\"items\" glass>\n <template #logo>\n <img src=\"/logo.svg\" alt=\"Brand\" />\n </template>\n </Nav>\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed, ref, onMounted, onUnmounted, watch } from 'vue'\n\nexport interface NavItem {\n label: string\n href: string\n active?: boolean\n}\n\nexport interface NavProps {\n /** Navigation items */\n items?: NavItem[]\n /** Glassmorphic variant (fixed, backdrop-filter, DL 11.5) */\n glass?: boolean\n}\n\nconst props = withDefaults(defineProps<NavProps>(), {\n items: () => [],\n glass: false,\n})\n\nconst menuOpen = ref(false)\n\nfunction toggleMenu() {\n menuOpen.value = !menuOpen.value\n}\n\nfunction syncGlassClass(isGlass: boolean) {\n if (isGlass) {\n document.body.classList.add('strand-glass-nav-active')\n } else {\n document.body.classList.remove('strand-glass-nav-active')\n }\n}\n\nonMounted(() => syncGlassClass(props.glass))\nonUnmounted(() => document.body.classList.remove('strand-glass-nav-active'))\nwatch(() => props.glass, syncGlassClass)\n\nconst classes = computed(() => ['strand-nav', props.glass && 'strand-nav--glass'].filter(Boolean).join(' '))\n</script>\n\n<template>\n <nav :class=\"classes\" aria-label=\"Main navigation\">\n <div class=\"strand-nav__inner\">\n <div v-if=\"$slots.logo\" class=\"strand-nav__logo\">\n <slot name=\"logo\" />\n </div>\n\n <div class=\"strand-nav__items\">\n <a\n v-for=\"item in items\"\n :key=\"item.href\"\n :href=\"item.href\"\n :class=\"[\n 'strand-nav__link',\n item.active && 'strand-nav__link--active',\n ].filter(Boolean).join(' ')\"\n :aria-current=\"item.active ? 'page' : undefined\"\n >\n {{ item.label }}\n </a>\n </div>\n\n <div v-if=\"$slots.actions\" class=\"strand-nav__actions\">\n <slot name=\"actions\" />\n </div>\n\n <button\n type=\"button\"\n class=\"strand-nav__hamburger\"\n :aria-expanded=\"menuOpen ? 'true' : 'false'\"\n :aria-label=\"menuOpen ? 'Close menu' : 'Menu'\"\n @click=\"toggleMenu\"\n >\n <span class=\"strand-nav__hamburger-icon\" aria-hidden=\"true\" />\n </button>\n </div>\n\n <div v-if=\"menuOpen\" class=\"strand-nav__mobile-menu\">\n <a\n v-for=\"item in items\"\n :key=\"item.href\"\n :href=\"item.href\"\n :class=\"[\n 'strand-nav__mobile-link',\n item.active && 'strand-nav__mobile-link--active',\n ].filter(Boolean).join(' ')\"\n :aria-current=\"item.active ? 'page' : undefined\"\n >\n {{ item.label }}\n </a>\n </div>\n </nav>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Standalone notification message with status indicator and optional dismiss.\n\n @example\n ```vue\n <script setup>\n import { Toast } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <Toast status=\"success\" message=\"Changes saved.\" @dismiss=\"handleDismiss\" />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport type { ToastStatus } from './useToast'\n\nexport interface ToastProps {\n /** Visual status */\n status?: ToastStatus\n /** Toast message text */\n message: string\n}\n\nconst props = withDefaults(defineProps<ToastProps>(), {\n status: 'info',\n})\n\nconst emit = defineEmits<{\n (e: 'dismiss'): void\n}>()\n\nconst isUrgent = computed(\n () => props.status === 'error' || props.status === 'warning',\n)\n\nconst classes = computed(() =>\n ['strand-toast', `strand-toast--${props.status}`]\n .filter(Boolean)\n .join(' '),\n)\n\nconst statusLabels: Record<string, string> = {\n info: 'INFO',\n success: 'COMPLETE',\n warning: 'WARNING',\n error: 'ERROR',\n}\n\nconst statusLabel = computed(() => statusLabels[props.status] ?? props.status.toUpperCase())\n</script>\n\n<template>\n <div\n :class=\"classes\"\n role=\"status\"\n :aria-live=\"isUrgent ? 'assertive' : 'polite'\"\n >\n <span class=\"strand-toast__status\">{{ statusLabel }}</span>\n <span class=\"strand-toast__message\">{{ message }}</span>\n <button\n type=\"button\"\n class=\"strand-toast__dismiss\"\n aria-label=\"Dismiss\"\n @click=\"emit('dismiss')\"\n >\n &#215;\n </button>\n </div>\n</template>\n","/*! Strand Vue | MIT License | dillingerstaffing.com */\n\nimport { inject } from 'vue'\nimport type { InjectionKey } from 'vue'\n\nexport type ToastStatus = 'info' | 'success' | 'warning' | 'error'\n\nexport interface ToastOptions {\n message: string\n status?: ToastStatus\n duration?: number\n}\n\nexport interface ToastContextValue {\n toast: (options: ToastOptions) => void\n}\n\nexport const ToastKey: InjectionKey<ToastContextValue> = Symbol('StrandToast')\n\nexport function useToast(): ToastContextValue {\n const ctx = inject(ToastKey)\n if (!ctx) {\n throw new Error('useToast must be used within a ToastProvider')\n }\n return ctx\n}\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Context provider that manages toast notifications for its subtree.\n\n @example\n ```vue\n <script setup>\n import { ToastProvider } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <ToastProvider>\n <App />\n </ToastProvider>\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { ref, provide, onUnmounted } from 'vue'\nimport { ToastKey } from './useToast'\nimport type { ToastOptions, ToastStatus } from './useToast'\n\ninterface ToastEntry {\n id: number\n message: string\n status: ToastStatus\n duration: number\n}\n\nlet toastIdCounter = 0\n\nconst toasts = ref<ToastEntry[]>([])\nconst timers = new Map<number, ReturnType<typeof setTimeout>>()\n\nfunction removeToast(id: number) {\n const timer = timers.get(id)\n if (timer !== undefined) {\n clearTimeout(timer)\n timers.delete(id)\n }\n toasts.value = toasts.value.filter((t) => t.id !== id)\n}\n\nfunction addToast(options: ToastOptions) {\n const entry: ToastEntry = {\n id: ++toastIdCounter,\n message: options.message,\n status: options.status ?? 'info',\n duration: options.duration ?? 5000,\n }\n toasts.value = [...toasts.value, entry]\n\n if (entry.duration > 0) {\n const timer = setTimeout(() => {\n removeToast(entry.id)\n }, entry.duration)\n timers.set(entry.id, timer)\n }\n}\n\nprovide(ToastKey, { toast: addToast })\n\nonUnmounted(() => {\n for (const timer of timers.values()) {\n clearTimeout(timer)\n }\n timers.clear()\n})\n\nfunction isUrgent(status: ToastStatus): boolean {\n return status === 'error' || status === 'warning'\n}\n\nconst statusLabels: Record<string, string> = {\n info: 'INFO',\n success: 'COMPLETE',\n warning: 'WARNING',\n error: 'ERROR',\n}\n\nfunction statusLabel(status: ToastStatus): string {\n return statusLabels[status] ?? status.toUpperCase()\n}\n</script>\n\n<template>\n <slot />\n <div v-if=\"toasts.length > 0\" class=\"strand-toast__container\">\n <div\n v-for=\"entry in toasts\"\n :key=\"entry.id\"\n :class=\"['strand-toast', `strand-toast--${entry.status}`].join(' ')\"\n role=\"status\"\n :aria-live=\"isUrgent(entry.status) ? 'assertive' : 'polite'\"\n >\n <span class=\"strand-toast__status\">{{ statusLabel(entry.status) }}</span>\n <span class=\"strand-toast__message\">{{ entry.message }}</span>\n <button\n type=\"button\"\n class=\"strand-toast__dismiss\"\n aria-label=\"Dismiss\"\n @click=\"removeToast(entry.id)\"\n >\n &#215;\n </button>\n </div>\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Contextual feedback banner for status messages, warnings, and errors.\n\n @example\n ```vue\n <script setup>\n import { Alert } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <Alert status=\"success\" dismissible @dismiss=\"handleDismiss\">\n Operation completed successfully.\n </Alert>\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nexport interface AlertProps {\n /** Visual status of the alert */\n status?: 'info' | 'success' | 'warning' | 'error'\n /** Show dismiss button */\n dismissible?: boolean\n}\n\nconst props = withDefaults(defineProps<AlertProps>(), {\n status: 'info',\n dismissible: false,\n})\n\nconst emit = defineEmits<{\n (e: 'dismiss'): void\n}>()\n\nconst role = computed(() =>\n props.status === 'error' || props.status === 'warning' ? 'alert' : 'status',\n)\n\nconst classes = computed(() =>\n [\n 'strand-alert',\n `strand-alert--${props.status}`,\n ]\n .filter(Boolean)\n .join(' '),\n)\n\nconst statusLabels: Record<string, string> = {\n info: 'INFO',\n success: 'COMPLETE',\n warning: 'WARNING',\n error: 'ERROR',\n}\n\nconst statusLabel = computed(() => statusLabels[props.status] ?? props.status.toUpperCase())\n\nfunction handleDismiss() {\n emit('dismiss')\n}\n</script>\n\n<template>\n <div :class=\"classes\" :role=\"role\">\n <span class=\"strand-alert__status\">{{ statusLabel }}</span>\n <div class=\"strand-alert__content\">\n <slot />\n </div>\n <button\n v-if=\"dismissible\"\n type=\"button\"\n class=\"strand-alert__dismiss\"\n aria-label=\"Dismiss\"\n @click=\"handleDismiss\"\n >\n &#215;\n </button>\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Modal overlay with focus trapping, scroll lock, and backdrop click dismissal.\n\n @example\n ```vue\n <script setup>\n import { ref } from 'vue';\n import { Dialog } from '@dillingerstaffing/strand-vue';\n const isOpen = ref(false);\n </script>\n\n <template>\n <Dialog :open=\"isOpen\" title=\"Confirm\" @close=\"isOpen = false\">\n <p>Are you sure?</p>\n </Dialog>\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed, ref, watch, onUnmounted, nextTick } from 'vue'\n\nexport interface DialogProps {\n /** Whether the dialog is open */\n open: boolean\n /** Optional title rendered in the dialog header */\n title?: string\n /** Close when clicking the backdrop */\n closeOnOutsideClick?: boolean\n /** Close when pressing Escape */\n closeOnEscape?: boolean\n}\n\nconst props = withDefaults(defineProps<DialogProps>(), {\n closeOnOutsideClick: true,\n closeOnEscape: true,\n})\n\nconst emit = defineEmits<{\n (e: 'close'): void\n}>()\n\nconst FOCUSABLE_SELECTOR =\n 'a[href], button:not(:disabled), textarea:not(:disabled), input:not(:disabled), select:not(:disabled), [tabindex]:not([tabindex=\"-1\"])'\n\nlet dialogIdCounter = 0\nconst titleId = `strand-dialog-title-${++dialogIdCounter}`\n\nconst panelRef = ref<HTMLDivElement | null>(null)\nlet previousFocus: Element | null = null\nlet originalOverflow = ''\n\nconst panelClasses = computed(() =>\n ['strand-dialog__panel'].filter(Boolean).join(' '),\n)\n\nfunction handleKeyDown(event: KeyboardEvent) {\n if (event.key === 'Escape' && props.closeOnEscape) {\n event.stopPropagation()\n emit('close')\n return\n }\n\n if (event.key === 'Tab') {\n const panel = panelRef.value\n if (!panel) return\n\n const focusable = Array.from(\n panel.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR),\n )\n if (focusable.length === 0) return\n\n const first = focusable[0]\n const last = focusable[focusable.length - 1]\n\n if (event.shiftKey) {\n if (document.activeElement === first) {\n event.preventDefault()\n last.focus()\n }\n } else {\n if (document.activeElement === last) {\n event.preventDefault()\n first.focus()\n }\n }\n }\n}\n\nfunction handleBackdropClick(event: MouseEvent) {\n if (props.closeOnOutsideClick && event.target === event.currentTarget) {\n emit('close')\n }\n}\n\nwatch(\n () => props.open,\n async (isOpen) => {\n if (isOpen) {\n previousFocus = document.activeElement\n originalOverflow = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n\n await nextTick()\n const panel = panelRef.value\n if (panel) {\n const focusable = panel.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)\n if (focusable.length > 0) {\n focusable[0].focus()\n } else {\n panel.focus()\n }\n }\n } else {\n document.body.style.overflow = originalOverflow\n if (previousFocus && previousFocus instanceof HTMLElement) {\n previousFocus.focus()\n }\n }\n },\n { immediate: true },\n)\n\nonUnmounted(() => {\n if (props.open) {\n document.body.style.overflow = originalOverflow\n }\n})\n</script>\n\n<template>\n <div\n v-if=\"open\"\n class=\"strand-dialog__backdrop\"\n @click=\"handleBackdropClick\"\n @keydown=\"handleKeyDown\"\n >\n <div\n ref=\"panelRef\"\n :class=\"panelClasses\"\n role=\"dialog\"\n aria-modal=\"true\"\n :aria-labelledby=\"title ? titleId : undefined\"\n :tabindex=\"-1\"\n >\n <div v-if=\"title\" class=\"strand-dialog__header\">\n <h2 :id=\"titleId\" class=\"strand-dialog__title\">\n {{ title }}\n </h2>\n </div>\n <button\n type=\"button\"\n class=\"strand-dialog__close\"\n aria-label=\"Close\"\n @click=\"emit('close')\"\n >\n &#215;\n </button>\n <div class=\"strand-dialog__body\">\n <slot />\n </div>\n </div>\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Hover/focus-triggered text popup anchored to a trigger element.\n\n @example\n ```vue\n <script setup>\n import { Tooltip, Button } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <Tooltip content=\"Save your progress\" position=\"top\">\n <Button variant=\"primary\">Save</Button>\n </Tooltip>\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed, ref, onUnmounted } from 'vue'\n\nexport interface TooltipProps {\n /** Tooltip text */\n content: string\n /** Position relative to trigger */\n position?: 'top' | 'right' | 'bottom' | 'left'\n /** Delay in ms before showing */\n delay?: number\n}\n\nconst props = withDefaults(defineProps<TooltipProps>(), {\n position: 'top',\n delay: 200,\n})\n\nlet tooltipIdCounter = 0\nconst tooltipId = `strand-tooltip-${++tooltipIdCounter}`\n\nconst visible = ref(false)\nlet timer: ReturnType<typeof setTimeout> | null = null\n\nfunction show() {\n timer = setTimeout(() => {\n visible.value = true\n }, props.delay)\n}\n\nfunction hide() {\n if (timer !== null) {\n clearTimeout(timer)\n timer = null\n }\n visible.value = false\n}\n\nonUnmounted(() => {\n if (timer !== null) {\n clearTimeout(timer)\n }\n})\n\nconst wrapperClasses = computed(() =>\n ['strand-tooltip__wrapper'].filter(Boolean).join(' '),\n)\n\nconst tooltipClasses = computed(() =>\n [\n 'strand-tooltip',\n `strand-tooltip--${props.position}`,\n visible.value && 'strand-tooltip--visible',\n ]\n .filter(Boolean)\n .join(' '),\n)\n</script>\n\n<template>\n <span\n :class=\"wrapperClasses\"\n :aria-describedby=\"tooltipId\"\n @mouseenter=\"show\"\n @mouseleave=\"hide\"\n @focus=\"show\"\n @blur=\"hide\"\n >\n <slot />\n <span\n :id=\"tooltipId\"\n :class=\"tooltipClasses\"\n role=\"tooltip\"\n :aria-hidden=\"!visible\"\n >\n {{ content }}\n </span>\n </span>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Determinate or indeterminate progress indicator in bar or ring form.\n\n @example\n ```vue\n <script setup>\n import { Progress } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <Progress variant=\"bar\" :value=\"65\" size=\"md\" />\n <Progress variant=\"ring\" size=\"lg\" />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n /** Visual variant */\n variant?: 'bar' | 'ring'\n /** Completion percentage (0-100). Omit for indeterminate. */\n value?: number\n /** Size of the progress indicator */\n size?: 'sm' | 'md' | 'lg'\n /** Additional CSS class */\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n variant: 'bar',\n size: 'md',\n className: '',\n})\n\nconst RING_SIZES: Record<string, number> = { sm: 24, md: 40, lg: 56 }\nconst RING_STROKE = 3\n\nconst isDeterminate = computed(() => props.value != null)\n\nconst classes = computed(() =>\n [\n 'strand-progress',\n `strand-progress--${props.variant}`,\n `strand-progress--${props.size}`,\n !isDeterminate.value && 'strand-progress--indeterminate',\n props.className,\n ]\n .filter(Boolean)\n .join(' '),\n)\n\nconst dim = computed(() => RING_SIZES[props.size] ?? RING_SIZES.md)\nconst radius = computed(() => (dim.value - RING_STROKE) / 2)\nconst circumference = computed(() => 2 * Math.PI * radius.value)\nconst offset = computed(() =>\n isDeterminate.value\n ? circumference.value - (circumference.value * (props.value as number)) / 100\n : 0,\n)\n</script>\n\n<template>\n <div\n :class=\"classes\"\n role=\"progressbar\"\n :aria-valuemin=\"0\"\n :aria-valuemax=\"100\"\n :aria-valuenow=\"isDeterminate ? value : undefined\"\n v-bind=\"$attrs\"\n >\n <!-- Ring variant -->\n <template v-if=\"variant === 'ring'\">\n <svg\n :width=\"dim\"\n :height=\"dim\"\n :viewBox=\"`0 0 ${dim} ${dim}`\"\n class=\"strand-progress__ring\"\n >\n <circle\n :cx=\"dim / 2\"\n :cy=\"dim / 2\"\n :r=\"radius\"\n fill=\"none\"\n :stroke-width=\"RING_STROKE\"\n class=\"strand-progress__track\"\n />\n <circle\n :cx=\"dim / 2\"\n :cy=\"dim / 2\"\n :r=\"radius\"\n fill=\"none\"\n :stroke-width=\"RING_STROKE\"\n :stroke-dasharray=\"circumference\"\n :stroke-dashoffset=\"isDeterminate ? offset : undefined\"\n stroke-linecap=\"round\"\n class=\"strand-progress__fill\"\n :transform=\"`rotate(-90 ${dim / 2} ${dim / 2})`\"\n />\n </svg>\n </template>\n <!-- Bar variant -->\n <template v-else>\n <div\n class=\"strand-progress__fill\"\n :style=\"isDeterminate ? { width: `${value}%` } : undefined\"\n />\n </template>\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Animated loading indicator with screen-reader-accessible status text.\n\n @example\n ```vue\n <script setup>\n import { Spinner } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <Spinner size=\"lg\" />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n /** Size of the spinner */\n size?: 'sm' | 'md' | 'lg'\n /** Additional CSS class */\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n size: 'md',\n className: '',\n})\n\nconst classes = computed(() =>\n [\n 'strand-spinner',\n `strand-spinner--${props.size}`,\n props.className,\n ]\n .filter(Boolean)\n .join(' '),\n)\n</script>\n\n<template>\n <span :class=\"classes\" role=\"status\" v-bind=\"$attrs\">\n <span class=\"strand-spinner__ring\" aria-hidden=\"true\" />\n <span class=\"strand-spinner__sr-only\">Loading</span>\n </span>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Placeholder shimmer shape used while content is loading.\n\n @example\n ```vue\n <script setup>\n import { Skeleton } from '@dillingerstaffing/strand-vue';\n </script>\n\n <template>\n <Skeleton variant=\"text\" width=\"60%\" />\n <Skeleton variant=\"circle\" width=\"48px\" />\n <Skeleton variant=\"rectangle\" width=\"100%\" height=\"200px\" />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n /** Shape variant */\n variant?: 'text' | 'rectangle' | 'circle'\n /** CSS width value */\n width?: string\n /** CSS height value */\n height?: string\n /** Additional CSS class */\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n variant: 'text',\n className: '',\n})\n\nconst effectiveWidth = computed(() =>\n props.width ?? (props.variant === 'text' ? '100%' : undefined),\n)\n\nconst effectiveHeight = computed(() =>\n props.variant === 'circle' ? effectiveWidth.value : props.height,\n)\n\nconst classes = computed(() =>\n [\n 'strand-skeleton',\n `strand-skeleton--${props.variant}`,\n 'strand-skeleton--shimmer',\n props.className,\n ]\n .filter(Boolean)\n .join(' '),\n)\n\nconst inlineStyle = computed(() => ({\n width: effectiveWidth.value,\n height: effectiveHeight.value,\n}))\n</script>\n\n<template>\n <div :class=\"classes\" aria-hidden=\"true\" :style=\"inlineStyle\" v-bind=\"$attrs\" />\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Interactive 1-to-5 star rating control. Mirrors the Preact and Svelte\n StarRating APIs for cross-consumer parity.\n\n @example\n ```vue\n <script setup>\n import { ref } from 'vue';\n import { StarRating } from '@dillingerstaffing/strand-vue';\n const value = ref(0);\n </script>\n\n <template>\n <StarRating\n :value=\"value\"\n :onChange=\"(v) => value = v\"\n ariaLabel=\"Rate this event\"\n size=\"md\"\n />\n </template>\n ```\n-->\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue'\n\nexport interface StarRatingProps {\n value: number\n onChange?: (v: number) => void\n size?: 'sm' | 'md' | 'lg'\n readOnly?: boolean\n ariaLabel: string\n}\n\nconst props = withDefaults(defineProps<StarRatingProps>(), {\n size: 'md',\n readOnly: false,\n})\n\nconst hover = ref(0)\n\nconst classes = computed(() =>\n [\n 'strand-star-rating',\n `strand-star-rating--${props.size}`,\n props.readOnly && 'strand-star-rating--readonly',\n ]\n .filter(Boolean)\n .join(' '),\n)\n\nconst display = computed(() => hover.value || props.value)\n\nfunction select(n: number): void {\n if (props.readOnly) return\n props.onChange?.(n)\n}\n\nfunction onKey(e: KeyboardEvent, n: number): void {\n if (props.readOnly) return\n if (e.key === ' ' || e.key === 'Enter') {\n e.preventDefault()\n select(n)\n }\n}\n</script>\n\n<template>\n <div\n :class=\"classes\"\n role=\"radiogroup\"\n :aria-label=\"ariaLabel\"\n data-strand-component=\"star-rating\"\n :data-value=\"String(value)\"\n >\n <button\n v-for=\"n in 5\"\n :key=\"n\"\n type=\"button\"\n :class=\"`strand-star-rating__star${n <= display ? ' strand-star-rating__star--active' : ''}`\"\n role=\"radio\"\n :aria-checked=\"n === value ? 'true' : 'false'\"\n :aria-label=\"`${n} star${n > 1 ? 's' : ''}`\"\n :tabindex=\"readOnly ? -1 : 0\"\n :disabled=\"readOnly\"\n :data-star-value=\"String(n)\"\n @click=\"select(n)\"\n @keydown=\"(e: KeyboardEvent) => onKey(e, n)\"\n @mouseenter=\"!readOnly && (hover = n)\"\n @mouseleave=\"!readOnly && (hover = 0)\"\n @focus=\"!readOnly && (hover = n)\"\n @blur=\"!readOnly && (hover = 0)\"\n >\n <span class=\"strand-star-rating__glyph\" aria-hidden=\"true\">{{ \"\\u2605\" }}</span>\n </button>\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n A horizontal row inside a composed card, separated from siblings\n by a hairline rule. Use multiple CardSection children inside a\n Card with padding=\"none\" to stack header / body / cta rows. The\n first child's top rule is suppressed automatically.\n\n Distinct from the standalone strand-card-section molecule\n (DL 11.10 section-boundary production), which is a same-named\n block used outside cards.\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n /** When true, applies the --header layout (baseline, space-between, gap) */\n header?: boolean\n /** Additional CSS class */\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n header: false,\n className: '',\n})\n\nconst classes = computed(() =>\n [\n 'strand-card__section',\n props.header ? 'strand-card__section--header' : '',\n props.className,\n ]\n .filter(Boolean)\n .join(' '),\n)\n</script>\n\n<template>\n <div :class=\"classes\" v-bind=\"$attrs\">\n <slot />\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<!--\n Card-metadata key-value row. Editorial sibling of the default\n instrument strand-kv readout. Use inside CardSection bodies to\n produce soft sans-serif Blue-midnight values separated by a\n dashed divider.\n-->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n /** Label column content (mono, uppercase, left) */\n label: string\n /** Value column content (sans, blue-midnight, right) */\n value: string\n /** When true, applies --status color (teal-vital) to the value */\n status?: boolean\n /** Additional CSS class */\n className?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n status: false,\n className: '',\n})\n\nconst classes = computed(() =>\n [\n 'strand-kv',\n 'strand-kv--editorial',\n props.className,\n ]\n .filter(Boolean)\n .join(' '),\n)\n\nconst valueClasses = computed(() =>\n [\n 'strand-kv__value',\n props.status ? 'strand-kv__value--status' : '',\n ]\n .filter(Boolean)\n .join(' '),\n)\n</script>\n\n<template>\n <div :class=\"classes\" v-bind=\"$attrs\">\n <span class=\"strand-kv__label\">\n <slot name=\"label\">{{ label }}</slot>\n </span>\n <span :class=\"valueClasses\">\n <slot name=\"value\">{{ value }}</slot>\n </span>\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-shell', props.className].filter(Boolean).join(' '))\n</script>\n\n<template>\n <div :class=\"classes\" v-bind=\"$attrs\"><slot /></div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-shell__sidebar', props.className].filter(Boolean).join(' '))\n</script>\n<template><aside :class=\"classes\" v-bind=\"$attrs\"><slot /></aside></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-shell__sidebar-head', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-shell__sidebar-scroll', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-shell__brand', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-shell__brand-mark', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-shell__brand-title', props.className].filter(Boolean).join(' '))\n</script>\n<template><span :class=\"classes\" v-bind=\"$attrs\"><slot /></span></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-shell__brand-sub', props.className].filter(Boolean).join(' '))\n</script>\n<template><span :class=\"classes\" v-bind=\"$attrs\"><slot /></span></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-shell__group', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-shell__group-label', props.className].filter(Boolean).join(' '))\n</script>\n<template><span :class=\"classes\" v-bind=\"$attrs\"><slot /></span></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-shell__group-list', props.className].filter(Boolean).join(' '))\n</script>\n<template><nav :class=\"classes\" v-bind=\"$attrs\"><slot /></nav></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { href?: string; className?: string }\nconst props = withDefaults(defineProps<Props>(), { href: '#', className: '' })\nconst classes = computed(() => ['strand-ref-shell__group-link', props.className].filter(Boolean).join(' '))\n</script>\n\n<template>\n <a :class=\"classes\" :href=\"props.href\" v-bind=\"$attrs\">\n <span class=\"strand-ref-shell__group-dot\"></span>\n <slot />\n </a>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-shell__group-dot', props.className].filter(Boolean).join(' '))\n</script>\n<template><span :class=\"classes\" v-bind=\"$attrs\" /></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-shell__main', props.className].filter(Boolean).join(' '))\n</script>\n<template><main :class=\"classes\" v-bind=\"$attrs\"><slot /></main></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-header', props.className].filter(Boolean).join(' '))\n</script>\n<template><header :class=\"classes\" v-bind=\"$attrs\"><slot /></header></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-header__title', props.className].filter(Boolean).join(' '))\n</script>\n<template><h1 :class=\"classes\" v-bind=\"$attrs\"><slot /></h1></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-header__lead', props.className].filter(Boolean).join(' '))\n</script>\n<template><p :class=\"classes\" v-bind=\"$attrs\"><slot /></p></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-header__meta', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-header__meta-item', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-header__meta-label', props.className].filter(Boolean).join(' '))\n</script>\n<template><span :class=\"classes\" v-bind=\"$attrs\"><slot /></span></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-header__meta-value', props.className].filter(Boolean).join(' '))\n</script>\n<template><span :class=\"classes\" v-bind=\"$attrs\"><slot /></span></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-taxonomy', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-taxonomy__title', props.className].filter(Boolean).join(' '))\n</script>\n<template><span :class=\"classes\" v-bind=\"$attrs\"><slot /></span></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-taxonomy__list', props.className].filter(Boolean).join(' '))\n</script>\n<template><dl :class=\"classes\" v-bind=\"$attrs\"><slot /></dl></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-section', props.className].filter(Boolean).join(' '))\n</script>\n<template><section :class=\"classes\" v-bind=\"$attrs\"><slot /></section></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-section__head', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-section__head-note', props.className].filter(Boolean).join(' '))\n</script>\n<template><span :class=\"classes\" v-bind=\"$attrs\"><slot /></span></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-section__body', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-example', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-example__meta', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-example__label', props.className].filter(Boolean).join(' '))\n</script>\n<template><span :class=\"classes\" v-bind=\"$attrs\"><slot /></span></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-example__code', props.className].filter(Boolean).join(' '))\n</script>\n<template><span :class=\"classes\" v-bind=\"$attrs\"><slot /></span></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n padNone?: boolean\n recessed?: boolean\n className?: string\n}\nconst props = withDefaults(defineProps<Props>(), {\n padNone: false,\n recessed: false,\n className: '',\n})\n\nconst classes = computed(() =>\n [\n 'strand-ref-example__demo',\n props.padNone ? 'strand-ref-example__demo--pad-none' : '',\n props.recessed ? 'strand-ref-example__demo--recessed' : '',\n props.className,\n ]\n .filter(Boolean)\n .join(' '),\n)\n</script>\n\n<template>\n <div :class=\"classes\" v-bind=\"$attrs\"><slot /></div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-example__caption', props.className].filter(Boolean).join(' '))\n</script>\n<template><p :class=\"classes\" v-bind=\"$attrs\"><slot /></p></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-frame', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-frame__chrome', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n color?: string\n className?: string\n}\nconst props = withDefaults(defineProps<Props>(), { className: '' })\n\nconst classes = computed(() => ['strand-ref-frame__dot', props.className].filter(Boolean).join(' '))\nconst dotStyle = computed(() => (props.color ? { background: props.color } : {}))\n</script>\n\n<template><span :class=\"classes\" :style=\"dotStyle\" v-bind=\"$attrs\" /></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-frame__title', props.className].filter(Boolean).join(' '))\n</script>\n<template><span :class=\"classes\" v-bind=\"$attrs\"><slot /></span></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-frame__body', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n hidden?: boolean\n className?: string\n}\nconst props = withDefaults(defineProps<Props>(), { hidden: false, className: '' })\n\nconst classes = computed(() => ['strand-ref-frame__content', props.className].filter(Boolean).join(' '))\nconst ariaHidden = computed(() => (props.hidden ? 'true' : undefined))\n</script>\n\n<template>\n <div :class=\"classes\" :aria-hidden=\"ariaHidden\" v-bind=\"$attrs\"><slot /></div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-frame__content-head', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-frame__actions', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-frame__overlay', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-frame__panel', props.className].filter(Boolean).join(' '))\n</script>\n\n<template>\n <div :class=\"classes\" role=\"dialog\" aria-modal=\"true\" v-bind=\"$attrs\"><slot /></div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-frame__panel-header', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-frame__panel-title', props.className].filter(Boolean).join(' '))\n</script>\n<template><h2 :class=\"classes\" v-bind=\"$attrs\"><slot /></h2></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n ariaLabel?: string\n className?: string\n}\nconst props = withDefaults(defineProps<Props>(), {\n ariaLabel: 'Close',\n className: '',\n})\n\nconst classes = computed(() => ['strand-ref-frame__panel-close', props.className].filter(Boolean).join(' '))\n</script>\n\n<template>\n <button\n type=\"button\"\n :class=\"classes\"\n :aria-label=\"props.ariaLabel\"\n v-bind=\"$attrs\"\n >\n <slot>×</slot>\n </button>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-frame__panel-body', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-frame__panel-footer', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-glass-stage', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-glass-panel', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-reveal-stage', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-reveal-line', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n pinned?: boolean\n className?: string\n}\nconst props = withDefaults(defineProps<Props>(), { pinned: false, className: '' })\n\nconst classes = computed(() =>\n ['strand-ref-tip', props.pinned ? 'strand-ref-tip--pinned' : '', props.className]\n .filter(Boolean)\n .join(' '),\n)\n</script>\n\n<template><span :class=\"classes\" v-bind=\"$attrs\"><slot /></span></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ntype Placement = 'top' | 'bottom' | 'left' | 'right'\ninterface Props {\n placement?: Placement\n className?: string\n}\nconst props = withDefaults(defineProps<Props>(), { placement: 'top', className: '' })\n\nconst classes = computed(() =>\n ['strand-ref-tip__bubble', `strand-ref-tip__bubble--${props.placement}`, props.className]\n .filter(Boolean)\n .join(' '),\n)\n</script>\n\n<template><span :class=\"classes\" role=\"tooltip\" v-bind=\"$attrs\"><slot /></span></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-util-row', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-util-cell', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-util-cell__code', props.className].filter(Boolean).join(' '))\n</script>\n<template><span :class=\"classes\" v-bind=\"$attrs\"><slot /></span></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-util-cell__caption', props.className].filter(Boolean).join(' '))\n</script>\n<template><span :class=\"classes\" v-bind=\"$attrs\"><slot /></span></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-util-cell__demo', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-ref-util-cell__block', props.className].filter(Boolean).join(' '))\n</script>\n<template><span :class=\"classes\" v-bind=\"$attrs\"><slot /></span></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n name: string\n hex: string\n background: string\n color: string\n className?: string\n}\nconst props = withDefaults(defineProps<Props>(), { className: '' })\n\nconst classes = computed(() => ['strand-swatch', props.className].filter(Boolean).join(' '))\nconst swatchStyle = computed(() => ({ background: props.background, color: props.color }))\n</script>\n\n<template>\n <div :class=\"classes\" :style=\"swatchStyle\" v-bind=\"$attrs\">\n <span class=\"strand-swatch__name\">{{ name }}</span>\n <span class=\"strand-swatch__hex\">{{ hex }}</span>\n </div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-swatch-grid', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-type-specimen', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-type-specimen__meta', props.className].filter(Boolean).join(' '))\n</script>\n<template><span :class=\"classes\" v-bind=\"$attrs\"><slot /></span></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-token-specimen', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-token-specimen-grid', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n width?: string | number\n className?: string\n}\nconst props = withDefaults(defineProps<Props>(), { className: '' })\n\nconst classes = computed(() => ['strand-token-specimen__spacer', props.className].filter(Boolean).join(' '))\nconst barStyle = computed(() => {\n const w = typeof props.width === 'number' ? props.width + 'px' : props.width\n return w ? { width: w } : {}\n})\n</script>\n\n<template>\n <span :class=\"classes\" :style=\"barStyle\" v-bind=\"$attrs\" />\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n radius?: string\n shadow?: string\n className?: string\n}\nconst props = withDefaults(defineProps<Props>(), { className: '' })\n\nconst classes = computed(() => ['strand-token-specimen__box', props.className].filter(Boolean).join(' '))\nconst boxStyle = computed(() => {\n const s: Record<string, string> = {}\n if (props.radius) s.borderRadius = props.radius\n if (props.shadow) s.boxShadow = props.shadow\n return s\n})\n</script>\n\n<template>\n <span :class=\"classes\" :style=\"boxStyle\" v-bind=\"$attrs\" />\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-container-scale', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-container-scale__row', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-container-scale__label', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-container-scale__caption', props.className].filter(Boolean).join(' '))\n</script>\n<template><span :class=\"classes\" v-bind=\"$attrs\"><slot /></span></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-container-scale__track', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\ninterface Props {\n width?: string\n className?: string\n}\nconst props = withDefaults(defineProps<Props>(), { className: '' })\n\nconst classes = computed(() => ['strand-container-scale__bar', props.className].filter(Boolean).join(' '))\nconst barStyle = computed(() => (props.width ? { width: props.width } : {}))\n</script>\n\n<template>\n <div :class=\"classes\" :style=\"barStyle\" v-bind=\"$attrs\"><slot /></div>\n</template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-container-scale__px', props.className].filter(Boolean).join(' '))\n</script>\n<template><span :class=\"classes\" v-bind=\"$attrs\"><slot /></span></template>\n","<!--! Strand Vue | MIT License | dillingerstaffing.com -->\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\ninterface Props { className?: string }\nconst props = withDefaults(defineProps<Props>(), { className: '' })\nconst classes = computed(() => ['strand-container-scale__axis', props.className].filter(Boolean).join(' '))\n</script>\n<template><div :class=\"classes\" v-bind=\"$attrs\"><slot /></div></template>\n"],"names":["props","__props","emit","__emit","isDisabled","computed","classes","handleClick","event","_createElementBlock","_openBlock","_hoisted_2","_createElementVNode","_normalizeStyle","_renderSlot","_ctx","slots","useSlots","wrapperClasses","handleInput","target","$slots","_hoisted_1","_hoisted_3","textareaRef","ref","currentLength","resize","watch","onMounted","_toDisplayString","handleChange","_Fragment","_renderList","opt","inputRef","val","ariaChecked","handleKeyDown","_cache","_hoisted_4","_hoisted_5","_createTextVNode","_mergeProps","$attrs","hasChildren","displayValue","ariaLabel","badgeClasses","imgError","handleError","showImage","displayInitials","sortKey","sortDirection","handleSort","key","nextDirection","sortIndicator","col","$event","row","rowIndex","COPIED_DURATION_MS","copied","timer","onBeforeUnmount","handleCopy","_a","ta","inlineStyle","isVertical","isLabeled","elRef","visible","observer","entries","entry","onUnmounted","tablistRef","focusAndSelect","index","tab","buttons","_b","currentIndex","t","nextIndex","_normalizeClass","item","menuOpen","toggleMenu","syncGlassClass","isGlass","_hoisted_7","_hoisted_8","isUrgent","statusLabels","statusLabel","ToastKey","useToast","ctx","inject","toastIdCounter","toasts","timers","removeToast","id","addToast","options","provide","status","role","handleDismiss","FOCUSABLE_SELECTOR","dialogIdCounter","titleId","panelRef","previousFocus","originalOverflow","panelClasses","panel","focusable","first","last","handleBackdropClick","isOpen","nextTick","tooltipIdCounter","tooltipId","show","hide","tooltipClasses","RING_STROKE","RING_SIZES","isDeterminate","dim","radius","circumference","offset","effectiveWidth","effectiveHeight","hover","display","select","n","onKey","e","valueClasses","dotStyle","ariaHidden","swatchStyle","barStyle","w","boxStyle","s"],"mappings":";;;;;;;;;;;;;;;;;;AAqCA,UAAMA,IAAQC,GAURC,IAAOC,GAIPC,IAAaC,EAAS,MAAML,EAAM,YAAYA,EAAM,OAAO,GAE3DM,IAAUD;AAAA,MAAS,MACvB;AAAA,QACE;AAAA,QACA,eAAeL,EAAM,OAAO;AAAA,QAC5B,eAAeA,EAAM,IAAI;AAAA,QACzBA,EAAM,YAAY;AAAA,QAClBA,EAAM,aAAa;AAAA,QACnBA,EAAM,WAAW;AAAA,MAAA,EAEhB,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IAAA;AAGb,aAASO,EAAYC,GAAmB;AACtC,MAAKJ,EAAW,SACdF,EAAK,SAASM,CAAK;AAAA,IAEvB;2BAIEC,EAeS,UAAA;AAAA,MAdN,MAAMR,EAAA;AAAA,MACN,SAAOK,EAAA,KAAO;AAAA,MACd,UAAUF,EAAA;AAAA,MACV,iBAAeA,EAAA,QAAU,SAAY;AAAA,MACrC,aAAWH,EAAA,UAAO,SAAY;AAAA,MAC9B,SAAOM;AAAA,IAAA;MAEIN,EAAA,WAAZS,EAAA,GAAAD,EAAsE,QAAtEE,CAAsE;MACtEC,EAKO,QAAA;AAAA,QAJL,OAAM;AAAA,QACL,OAAKC,EAAEZ,EAAA,UAAO,EAAA,YAAA,SAAA,IAA8B,MAAS;AAAA,MAAA;QAEtDa,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;;;;;;;;;;;;;;;;;AC1Dd,UAAMf,IAAQC,GAMRC,IAAOC,GAIPa,IAAQC,EAAA,GAERC,IAAiBb;AAAA,MAAS,MAC9B;AAAA,QACE;AAAA,QACAL,EAAM,SAAS;AAAA,QACfA,EAAM,YAAY;AAAA,QAClB,CAAC,CAACgB,EAAM,WAAW;AAAA,QACnB,CAAC,CAACA,EAAM,YAAY;AAAA,MAAA,EAEnB,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IAAA;AAGb,aAASG,EAAYX,GAAc;AACjC,YAAMY,IAASZ,EAAM;AACrB,MAAAN,EAAK,qBAAqBkB,EAAO,KAAK;AAAA,IACxC;2BAIEX,EAeM,OAAA;AAAA,MAfA,SAAOS,EAAA,KAAc;AAAA,IAAA;MACbG,EAAAA,OAAO,WAAnBX,KAAAD,EAEO,QAFPa,GAEO;AAAA,QADLR,EAAuBC,EAAA,QAAA,SAAA;AAAA,MAAA;MAEzBH,EAOE,SAAA;AAAA,QANC,MAAMX,EAAA;AAAA,QACP,OAAM;AAAA,QACL,UAAUA,EAAA;AAAA,QACV,gBAAcA,EAAA,QAAK,SAAY;AAAA,QAC/B,OAAOA,EAAA;AAAA,QACP,SAAOkB;AAAA,MAAA;MAEEE,EAAAA,OAAO,YAAnBX,KAAAD,EAEO,QAFPc,GAEO;AAAA,QADLT,EAAwBC,EAAA,QAAA,UAAA;AAAA,MAAA;;;;;;;;;;;;;;;;;;;ACtC9B,UAAMf,IAAQC,GAQRC,IAAOC,GAIPqB,IAAcC,EAAgC,IAAI,GAElDP,IAAiBb;AAAA,MAAS,MAC9B;AAAA,QACE;AAAA,QACAL,EAAM,SAAS;AAAA,QACfA,EAAM,YAAY;AAAA,QAClBA,EAAM,cAAc;AAAA,MAAA,EAEnB,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IAAA,GAGP0B,IAAgBrB;AAAA,MAAS,MAC7B,OAAOL,EAAM,cAAe,WAAWA,EAAM,WAAW,SAAS;AAAA,IAAA;AAGnE,aAAS2B,IAAS;AAChB,MAAI3B,EAAM,cAAcwB,EAAY,UAClCA,EAAY,MAAM,MAAM,SAAS,QACjCA,EAAY,MAAM,MAAM,SAAS,GAAGA,EAAY,MAAM,YAAY;AAAA,IAEtE;AAEA,aAASL,EAAYX,GAAc;AACjC,YAAMY,IAASZ,EAAM;AACrB,MAAAN,EAAK,qBAAqBkB,EAAO,KAAK,GACtCO,EAAA;AAAA,IACF;AAEA,WAAAC,EAAM,MAAM5B,EAAM,YAAY,MAAM;AAClC,MAAA2B,EAAA;AAAA,IACF,CAAC,GAEDE,EAAU,MAAM;AACd,MAAAF,EAAA;AAAA,IACF,CAAC,mBAIClB,EAiBM,OAAA;AAAA,MAjBA,SAAOS,EAAA,KAAc;AAAA,IAAA;MACzBN,EAQE,YAAA;AAAA,iBAPI;AAAA,QAAJ,KAAIY;AAAA,QACJ,OAAM;AAAA,QACL,UAAUvB,EAAA;AAAA,QACV,gBAAcA,EAAA,QAAK,SAAY;AAAA,QAC/B,WAAWA,EAAA;AAAA,QACX,OAAOA,EAAA;AAAA,QACP,SAAOkB;AAAA,MAAA;MAGFlB,EAAA,aAAaA,EAAA,aAAS,QAD9BS,EAAA,GAAAD,EAMO,QANPE,GAMOmB,EADFJ,OAAa,IAAG,QAAIzB,EAAA,SAAS,GAAA,CAAA;;;;;;;;;;;;;;;;;;AC5DtC,UAAMD,IAAQC,GAKRC,IAAOC,GAIPe,IAAiBb;AAAA,MAAS,MAC9B;AAAA,QACE;AAAA,QACAL,EAAM,SAAS;AAAA,QACfA,EAAM,YAAY;AAAA,MAAA,EAEjB,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IAAA;AAGb,aAAS+B,EAAavB,GAAc;AAClC,YAAMY,IAASZ,EAAM;AACrB,MAAAN,EAAK,qBAAqBkB,EAAO,KAAK;AAAA,IACxC;2BAIEX,EAoBM,OAAA;AAAA,MApBA,SAAOS,EAAA,KAAc;AAAA,IAAA;MACzBN,EAiBS,UAAA;AAAA,QAhBP,OAAM;AAAA,QACL,OAAOX,EAAA;AAAA,QACP,UAAUA,EAAA;AAAA,QACV,gBAAcA,EAAA,QAAK,SAAY;AAAA,QAC/B,UAAQ8B;AAAA,MAAA;QAEK9B,EAAA,oBAAdQ,EAES,UAFTE,GAESmB,EADJ7B,EAAA,WAAW,GAAA,CAAA;gBAEhBQ,EAMSuB,GAAA,MAAAC,EALOhC,EAAA,SAAO,CAAdiC,YADTzB,EAMS,UAAA;AAAA,UAJN,KAAKyB,EAAI;AAAA,UACT,OAAOA,EAAI;AAAA,QAAA,GAETJ,EAAAI,EAAI,KAAK,GAAA,GAAAX,CAAA;;sBAGhBX,EAAwD,QAAA;AAAA,QAAlD,OAAM;AAAA,QAAuB,eAAY;AAAA,MAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACxDnD,UAAMZ,IAAQC,GAMRC,IAAOC,GAIPgC,IAAWV,EAA6B,IAAI;AAElD,IAAAI,EAAU,MAAM;AACd,MAAIM,EAAS,UACXA,EAAS,MAAM,gBAAgBnC,EAAM;AAAA,IAEzC,CAAC,GAED4B,EAAM,MAAM5B,EAAM,eAAe,CAACoC,MAAQ;AACxC,MAAID,EAAS,UACXA,EAAS,MAAM,gBAAgBC;AAAA,IAEnC,CAAC;AAED,UAAM9B,IAAUD;AAAA,MAAS,MACvB;AAAA,QACE;AAAA,QACAL,EAAM,WAAW;AAAA,QACjBA,EAAM,iBAAiB;AAAA,QACvBA,EAAM,YAAY;AAAA,MAAA,EAEjB,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IAAA,GAGPqC,IAAchC;AAAA,MAAS,MAC3BL,EAAM,gBAAgB,UAAUA,EAAM,UAAU,SAAS;AAAA,IAAA;AAG3D,aAAS+B,EAAavB,GAAc;AAClC,MAAKR,EAAM,YACTE,EAAK,UAAUM,CAAK;AAAA,IAExB;AAEA,aAAS8B,EAAc9B,GAAsB;AAC3C,MAAIA,EAAM,QAAQ,OAAO,CAACR,EAAM,aAC9BQ,EAAM,eAAA,GACF2B,EAAS,SACXA,EAAS,MAAM,MAAA;AAAA,IAGrB;2BAIE1B,EA4CQ,SAAA;AAAA,MA5CA,SAAOH,EAAA,KAAO;AAAA,MAAG,WAASgC;AAAA,IAAA;MAChC1B,EASE,SAAA;AAAA,iBARI;AAAA,QAAJ,KAAIuB;AAAA,QACJ,MAAK;AAAA,QACL,OAAM;AAAA,QACL,SAASlC,EAAA;AAAA,QACT,UAAUA,EAAA;AAAA,QACV,gBAAcoC,EAAA;AAAA,QACf,MAAK;AAAA,QACJ,UAAQN;AAAA,MAAA;MAEXnB,EA+BO,QA/BPD,IA+BO;AAAA,QA7BGV,EAAA,iBADRS,KAAAD,EAeM,OAfNc,IAeM,CAAA,GAAAgB,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,UATJ3B,EAQE,QAAA;AAAA,YAPA,IAAG;AAAA,YACH,IAAG;AAAA,YACH,IAAG;AAAA,YACH,IAAG;AAAA,YACH,QAAO;AAAA,YACP,gBAAa;AAAA,YACb,kBAAe;AAAA,UAAA;gBAINX,EAAA,WADbS,KAAAD,EAaM,OAbN+B,IAaM,CAAA,GAAAD,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,UAPJ3B,EAME,QAAA;AAAA,YALA,GAAE;AAAA,YACF,QAAO;AAAA,YACP,gBAAa;AAAA,YACb,kBAAe;AAAA,YACf,mBAAgB;AAAA,UAAA;;;MAIVX,EAAA,cAAZQ,EAAoE,QAApEgC,IAAoEX,EAAf7B,EAAA,KAAK,GAAA,CAAA;;;;;;;;;;;;;;;;;AChG9D,UAAMD,IAAQC,GAKRC,IAAOC,GAIPG,IAAUD;AAAA,MAAS,MACvB;AAAA,QACE;AAAA,QACAL,EAAM,WAAW;AAAA,QACjBA,EAAM,YAAY;AAAA,MAAA,EAEjB,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IAAA;AAGb,aAAS+B,EAAavB,GAAc;AAClC,MAAKR,EAAM,YACTE,EAAK,UAAUM,CAAK;AAAA,IAExB;2BAIEC,EAcQ,SAAA;AAAA,MAdA,SAAOH,EAAA,KAAO;AAAA,IAAA;MACpBM,EAQE,SAAA;AAAA,QAPA,MAAK;AAAA,QACL,OAAM;AAAA,QACL,SAASX,EAAA;AAAA,QACT,UAAUA,EAAA;AAAA,QACV,MAAMA,EAAA;AAAA,QACN,OAAOA,EAAA;AAAA,QACP,UAAQ8B;AAAA,MAAA;sBAEXnB,EAEO,QAAA;AAAA,QAFD,OAAM;AAAA,QAAwB,eAAY;AAAA,MAAA;QAC9CA,EAAkC,QAAA,EAA5B,OAAM,qBAAmB;AAAA,MAAA;MAErBX,EAAA,cAAZQ,EAAiE,QAAjEE,IAAiEmB,EAAf7B,EAAA,KAAK,GAAA,CAAA;;;;;;;;;;;;;;;AC7C3D,UAAMD,IAAQC,GAKRC,IAAOC,GAIPG,IAAUD;AAAA,MAAS,MACvB;AAAA,QACE;AAAA,QACAL,EAAM,WAAW;AAAA,QACjBA,EAAM,YAAY;AAAA,MAAA,EAEjB,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IAAA;AAGb,aAASO,IAAc;AACrB,MAAKP,EAAM,YACTE,EAAK,UAAU,CAACF,EAAM,OAAO;AAAA,IAEjC;AAEA,aAASsC,EAAc9B,GAAsB;AAC3C,OAAKA,EAAM,QAAQ,OAAOA,EAAM,QAAQ,YAAY,CAACR,EAAM,aACzDQ,EAAM,eAAA,GACNN,EAAK,UAAU,CAACF,EAAM,OAAO;AAAA,IAEjC;2BAIES,EAaQ,SAAA;AAAA,MAbA,SAAOH,EAAA,KAAO;AAAA,IAAA;MACpBM,EAUS,UAAA;AAAA,QATP,MAAK;AAAA,QACL,MAAK;AAAA,QACL,OAAM;AAAA,QACL,gBAAcX,EAAA,UAAO,SAAA;AAAA,QACrB,UAAUA,EAAA;AAAA,QACV,SAAOM;AAAA,QACP,WAAS+B;AAAA,MAAA;QAEV1B,EAAwD,QAAA;AAAA,UAAlD,OAAM;AAAA,UAAuB,eAAY;AAAA,QAAA;;MAErCX,EAAA,cAAZQ,EAAkE,QAAlEE,IAAkEmB,EAAf7B,EAAA,KAAK,GAAA,CAAA;;;;;;;;;;;;;;AC1C5D,UAAMD,IAAQC,GAORC,IAAOC,GAIPe,IAAiBb;AAAA,MAAS,MAC9B;AAAA,QACE;AAAA,QACAL,EAAM,YAAY;AAAA,MAAA,EAEjB,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IAAA;AAGb,aAASmB,EAAYX,GAAc;AACjC,YAAMY,IAASZ,EAAM;AACrB,MAAAN,EAAK,qBAAqB,OAAOkB,EAAO,KAAK,CAAC;AAAA,IAChD;2BAIEX,EAcM,OAAA;AAAA,MAdA,SAAOS,EAAA,KAAc;AAAA,IAAA;MACzBN,EAYE,SAAA;AAAA,QAXA,MAAK;AAAA,QACL,OAAM;AAAA,QACL,KAAKX,EAAA;AAAA,QACL,KAAKA,EAAA;AAAA,QACL,MAAMA,EAAA;AAAA,QACN,OAAOA,EAAA;AAAA,QACP,UAAUA,EAAA;AAAA,QACV,iBAAeA,EAAA;AAAA,QACf,iBAAeA,EAAA;AAAA,QACf,iBAAeA,EAAA;AAAA,QACf,SAAOkB;AAAA,MAAA;;;;;;;;;;;;;;;;;ACvCd,UAAMnB,IAAQC,GAIRK,IAAUD;AAAA,MAAS,MACvB;AAAA,QACE;AAAA,QACAL,EAAM,SAAS;AAAA,MAAA,EAEd,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IAAA;2BAKXS,EAyBM,OAAA;AAAA,MAzBA,SAAOH,EAAA,KAAO;AAAA,IAAA;MAClBM,EAKQ,SAAA;AAAA,QALD,OAAM;AAAA,QAA4B,KAAKX,EAAA;AAAA,MAAA;QACzCyC,EAAAZ,EAAA7B,EAAA,KAAK,IAAG,KACX,CAAA;AAAA,QAAYA,EAAA,iBAAZQ,EAEO,QAFPE,IAA6E,KAE7E;;MAEFC,EAEM,OAFNW,IAEM;AAAA,QADJT,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;MAGFd,EAAA,cADRQ,EAOI,KAAA;AAAA;QALF,OAAM;AAAA,QACL,OAAOR,EAAA,OAAO;AAAA,QACf,MAAK;AAAA,MAAA,KAEFA,EAAA,KAAK,GAAA,GAAAuC,EAAA,KAGGvC,EAAA,aADbQ,EAMI,KAAA;AAAA;QAJF,OAAM;AAAA,QACL,OAAOR,EAAA,OAAO;AAAA,MAAA,KAEZA,EAAA,IAAI,GAAA,GAAAwC,EAAA;;;;;;;;;;;ACzCb,UAAMzC,IAAQC,GAMRK,IAAUD;AAAA,MAAS,MACvB;AAAA,QACE;AAAA,QACA,gBAAgBL,EAAM,OAAO;AAAA,QAC7B,oBAAoBA,EAAM,OAAO;AAAA,QACjCA,EAAM;AAAA,MAAA,EAEL,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IAAA;sBAKXU,EAAA,GAAAD,EAEM,OAFNkC,EAEM,EAFA,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAClC9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;;;;AChBZ,UAAMf,IAAQC,GAORe,IAAQC,EAAA,GAER4B,IAAcxC,EAAS,MAAM,CAAC,CAACW,EAAM,OAAO,GAE5C8B,IAAezC,EAAS,MACxBL,EAAM,YAAY,UACbA,EAAM,SAAS,QAAQA,EAAM,QAAQA,EAAM,WAC9C,GAAGA,EAAM,QAAQ,MACjBA,EAAM,QAEL,IACR,GAEK+C,IAAY1C,EAAS,MAAM;AAC/B,UAAIL,EAAM,YAAY,MAAO,QAAO;AACpC,UAAIA,EAAM,SAAS,KAAM,QAAO,GAAGA,EAAM,KAAK;AAAA,IAEhD,CAAC,GAEKgD,IAAe3C;AAAA,MAAS,MAC5B;AAAA,QACE;AAAA,QACA,iBAAiBL,EAAM,OAAO;AAAA,QAC9B,iBAAiBA,EAAM,MAAM;AAAA,MAAA,EAE5B,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IAAA,GAGPkB,IAAiBb;AAAA,MAAS,MAC9BwC,EAAY,QACR,CAAC,gBAAgB7C,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,IAC1D,CAAC,gBAAgB,wBAAwBA,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,IAAA;sBAKtFU,EAAA,GAAAD,EAGO,QAHPkC,EAGO,EAHA,OAAOzB,EAAA,MAAA,GAAwB0B,EAAAA,MAAM,GAAA;AAAA,MAC1C9B,EAAQC,EAAA,QAAA,SAAA;AAAA,MACRH,EAA2F,QAAA;AAAA,QAApF,SAAOoC,EAAA,KAAY;AAAA,QAAG,cAAYD,EAAA;AAAA,QAAW,MAAK;AAAA,MAAA,KAAYD,EAAA,KAAY,GAAA,IAAAxB,EAAA;AAAA,IAAA;;;;;;;;;;;;;;;;AChDrF,UAAMtB,IAAQC,GAORgD,IAAWxB,EAAI,EAAK,GAEpByB,IAAc,MAAM;AACxB,MAAAD,EAAS,QAAQ;AAAA,IACnB,GAEME,IAAY9C,EAAS,MAAML,EAAM,OAAO,CAACiD,EAAS,KAAK,GACvDG,IAAkB/C,EAAS,MAAML,EAAM,SAAS,MAAM,GAAG,CAAC,EAAE,aAAa,GAEzEM,IAAUD;AAAA,MAAS,MACvB;AAAA,QACE;AAAA,QACA,kBAAkBL,EAAM,IAAI;AAAA,QAC5BA,EAAM;AAAA,MAAA,EAEL,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IAAA;sBAKXU,EAAA,GAAAD,EASM,OATNkC,EASM;AAAA,MATA,OAAOrC,EAAA;AAAA,MAAS,MAAK;AAAA,MAAO,cAAYL,EAAA,OAAOmD,EAAA;AAAA,IAAA,GAAyBR,EAAAA,MAAM,GAAA;AAAA,MAE1EO,EAAA,cADR1C,EAME,OAAA;AAAA;QAJA,OAAM;AAAA,QACL,KAAKR,EAAA;AAAA,QACL,KAAKA,EAAA;AAAA,QACL,SAAOiD;AAAA,MAAA,0BAEVzC,EAA4F,QAA5Fc,IAA4FO,EAAzBsB,EAAA,KAAe,GAAA,CAAA;AAAA,IAAA;;;;;;;;;;;;ACrCtF,UAAMpD,IAAQC,GAORC,IAAOC,GAIPG,IAAUD;AAAA,MAAS,MACvB;AAAA,QACE;AAAA,QACA,eAAeL,EAAM,OAAO;AAAA,QAC5B,eAAeA,EAAM,MAAM;AAAA,QAC3BA,EAAM;AAAA,MAAA,EAEL,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IAAA;sBAKXU,EAAA,GAAAD,EAwBO,QAxBPkC,EAwBO,EAxBA,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MACnChC,EAA8C,QAA9CU,IAA8C;AAAA,QAAfR,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;MAE/Bd,EAAA,kBADRQ,EAqBS,UAAA;AAAA;QAnBP,MAAK;AAAA,QACL,OAAM;AAAA,QACN,cAAW;AAAA,QACV,gCAAOP,EAAI,QAAA;AAAA,MAAA;QAEZU,EAaM,OAAA;AAAA,UAZJ,OAAM;AAAA,UACN,QAAO;AAAA,UACP,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,eAAY;AAAA,QAAA;UAEZA,EAKE,QAAA;AAAA,YAJA,GAAE;AAAA,YACF,QAAO;AAAA,YACP,gBAAa;AAAA,YACb,kBAAe;AAAA,UAAA;;;;;;;;;;;;;;;;AC5BzB,UAAMV,IAAOC,GAIPkD,IAAU5B,EAAmB,IAAI,GACjC6B,IAAgB7B,EAAoB,KAAK,GAEzCP,IAAiBb;AAAA,MAAS,MAC9B,CAAC,sBAAsB,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,IAAA;AAGnD,aAASkD,EAAWC,GAAa;AAC/B,YAAMC,IACJJ,EAAQ,UAAUG,KAAOF,EAAc,UAAU,QAAQ,SAAS;AACpE,MAAAD,EAAQ,QAAQG,GAChBF,EAAc,QAAQG,GACtBvD,EAAK,QAAQsD,GAAKC,CAAa;AAAA,IACjC;AAEA,aAASC,EAAcF,GAAqB;AAC1C,aAAIH,EAAQ,UAAUG,IACbF,EAAc,UAAU,QAAQ,MAAW,MAE7C;AAAA,IACT;2BAIE7C,EA4CM,OAAA;AAAA,MA5CA,SAAOS,EAAA,KAAc;AAAA,IAAA;MACzBN,EA0CQ,SA1CRU,IA0CQ;AAAA,QAzCNV,EAyBQ,SAzBRD,IAyBQ;AAAA,UAxBNC,EAuBK,MAAA,MAAA;AAAA,oBAtBHH,EAqBKuB,GAAA,MAAAC,EApBWhC,EAAA,SAAO,CAAd0D,YADTlD,EAqBK,MAAA;AAAA,cAnBF,KAAKkD,EAAI;AAAA,cACV,OAAM;AAAA,cACL,OAAK9C,EAAE8C,EAAI,iBAAiBA,EAAI,MAAA,IAAU,MAAS;AAAA,YAAA;cAG5CA,EAAI,iBADZlD,EAWS,UAAA;AAAA;gBATP,MAAK;AAAA,gBACL,OAAM;AAAA,gBACL,cAAU,WAAakD,EAAI,MAAM;AAAA,gBACjC,SAAK,CAAAC,MAAEL,EAAWI,EAAI,GAAG;AAAA,cAAA;oBAEvBA,EAAI,MAAM,IAAG,KAChB,CAAA;AAAA,gBAAA/C,EAEO,QAFP4B,IAEOV,EADF4B,EAAcC,EAAI,GAAG,CAAA,GAAA,CAAA;AAAA,cAAA,mBAG5BlD,EAEWuB,GAAA,EAAA,KAAA,KAAA;AAAA,gBADNU,EAAAZ,EAAA6B,EAAI,MAAM,GAAA,CAAA;AAAA,cAAA;;;;QAKrB/C,EAcQ,SAdR6B,IAcQ;AAAA,WAbN/B,EAAA,EAAA,GAAAD,EAYKuB,GAAA,MAAAC,EAXuBhC,EAAA,MAAI,CAAtB4D,GAAKC,YADfrD,EAYK,MAAA;AAAA,YAVF,KAAKqD;AAAA,YACN,OAAM;AAAA,UAAA;oBAENrD,EAMKuB,GAAA,MAAAC,EALWhC,EAAA,SAAO,CAAd0D,YADTlD,EAMK,MAAA;AAAA,cAJF,KAAKkD,EAAI;AAAA,cACV,OAAM;AAAA,YAAA,KAEHE,EAAIF,EAAI,GAAG,CAAA,GAAA,CAAA;;;;;;;;;;;;;;;ACrF1B,UAAM3D,IAAQC,GAIRK,IAAUD;AAAA,MAAS,MACvB;AAAA,QACE;AAAA,QACAL,EAAM,QAAQA,EAAM,SAAS,OAAO,wBAAwBA,EAAM,IAAI,KAAK;AAAA,QAC3EA,EAAM;AAAA,MAAA,EAEL,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IAAA;sBAKXU,EAAA,GAAAD,EAGM,OAHNkC,EAGM,EAHA,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAClChC,EAA2D,QAA3DU,IAA2DQ,EAAf7B,EAAA,KAAK,GAAA,CAAA;AAAA,MACjDW,EAA2D,QAA3DD,IAA2DmB,EAAf7B,EAAA,KAAK,GAAA,CAAA;AAAA,IAAA;;;;;kECd/C8D,KAAqB;;;;;;;;;AAE3B,UAAM/D,IAAQC,GAKRK,IAAUD;AAAA,MAAS,MACvB,CAAC,qBAAqBL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,IAAA,GAG3DgE,IAASvC,EAAI,EAAK;AACxB,QAAIwC,IAAuB;AAE3B,IAAAC,EAAgB,MAAM;AACpB,MAAID,MAAU,QAAM,OAAO,aAAaA,CAAK;AAAA,IAC/C,CAAC;AAED,mBAAeE,IAAa;;AAC1B,UAAI;AACF,aAAIC,IAAA,UAAU,cAAV,QAAAA,EAAqB;AACvB,gBAAM,UAAU,UAAU,UAAUpE,EAAM,IAAI;AAAA,aACzC;AACL,gBAAMqE,IAAK,SAAS,cAAc,UAAU;AAC5C,UAAAA,EAAG,QAAQrE,EAAM,MACjBqE,EAAG,aAAa,YAAY,EAAE,GAC9BA,EAAG,MAAM,WAAW,YACpBA,EAAG,MAAM,OAAO,WAChB,SAAS,KAAK,YAAYA,CAAE,GAC5BA,EAAG,OAAA,GACH,SAAS,YAAY,MAAM,GAC3B,SAAS,KAAK,YAAYA,CAAE;AAAA,QAC9B;AACA,QAAAL,EAAO,QAAQ,IACXC,MAAU,QAAM,OAAO,aAAaA,CAAK,GAC7CA,IAAQ,OAAO,WAAW,MAAM;AAC9B,UAAAD,EAAO,QAAQ;AAAA,QACjB,GAAGD,EAAkB;AAAA,MACvB,QAAQ;AAAA,MAER;AAAA,IACF;sBAIErD,EAAA,GAAAD,EAqCM,OArCNkC,EAqCM;AAAA,MArCA,OAAOrC,EAAA;AAAA,MAAU,oBAAkBL,EAAA,WAAQ,KAAQ;AAAA,IAAA,GAAmB2C,EAAAA,MAAM,GAAA;AAAA,MACpE3C,EAAA,iBAAZQ,EAA4E,QAA5EE,IAA4EmB,EAAlB7B,EAAA,QAAQ,GAAA,CAAA;MAClEW,EAAiE,OAAjEW,IAAiE;AAAA,QAA7BX,EAAuB,gBAAdX,EAAA,IAAI,GAAA,CAAA;AAAA,MAAA;MAEzCA,EAAA,iBADRQ,EAiCS,UAAA;AAAA;QA/BP,MAAK;AAAA,QACJ,qCAAmCuD,EAAA,QAAM,oCAAA,EAAA,CAAA;AAAA,QACzC,cAAYA,EAAA,QAAM,WAAA;AAAA,QAClB,SAAOG;AAAA,MAAA;QAERvD,EAYM,OAAA;AAAA,UAXJ,OAAM;AAAA,UACN,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,QAAO;AAAA,UACP,gBAAa;AAAA,UACb,kBAAe;AAAA,UACf,mBAAgB;AAAA,UAChB,eAAY;AAAA,UACZ,WAAU;AAAA,QAAA;UAEVA,EAA6I,QAAA,EAAvI,GAAE,oIAAkI;AAAA,QAAA;QAE5IA,EAYM,OAAA;AAAA,UAXJ,OAAM;AAAA,UACN,SAAQ;AAAA,UACR,MAAK;AAAA,UACL,QAAO;AAAA,UACP,gBAAa;AAAA,UACb,kBAAe;AAAA,UACf,mBAAgB;AAAA,UAChB,eAAY;AAAA,UACZ,WAAU;AAAA,QAAA;UAEVA,EAA4B,QAAA,EAAtB,GAAE,mBAAiB;AAAA,QAAA;;;;;;;;;;;;;;;AC5EjC,UAAMZ,IAAQC,GAQRK,IAAUD;AAAA,MAAS,MACvB;AAAA,QACE;AAAA,QACA,iBAAiBL,EAAM,SAAS;AAAA,QAChCA,EAAM,UAAU,aAAa,uBAAuBA,EAAM,KAAK;AAAA,QAC/DA,EAAM,WAAW,yBAAyBA,EAAM,OAAO;AAAA,QACvDA,EAAM,QAAQ;AAAA,QACdA,EAAM;AAAA,MAAA,EAEL,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IAAA,GAGPsE,IAAcjE,EAAS,OAAO;AAAA,MAClC,KAAK,sBAAsBL,EAAM,GAAG;AAAA,IAAA,EACpC;sBAIAU,EAAA,GAAAD,EAEM,OAFNkC,EAEM;AAAA,MAFA,OAAOrC,EAAA;AAAA,MAAU,OAAOgE,EAAA;AAAA,IAAA,GAAqB1B,EAAAA,MAAM,GAAA;AAAA,MACvD9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;;ACjCZ,UAAMf,IAAQC,GAMRK,IAAUD;AAAA,MAAS,MACvB,CAAC,eAAeL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,IAAA,GAGrDsE,IAAcjE,EAAS,OAAO;AAAA,MAClC,qBAAqB,UAAUL,EAAM,OAAO;AAAA,MAC5C,KAAK,sBAAsBA,EAAM,GAAG;AAAA,IAAA,EACpC;sBAIAU,EAAA,GAAAD,EAEM,OAFNkC,EAEM;AAAA,MAFA,OAAOrC,EAAA;AAAA,MAAU,OAAOgE,EAAA;AAAA,IAAA,GAAqB1B,EAAAA,MAAM,GAAA;AAAA,MACvD9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;ACtBZ,UAAMf,IAAQC,GAKRK,IAAUD;AAAA,MAAS,MACvB;AAAA,QACE;AAAA,QACA,qBAAqBL,EAAM,IAAI;AAAA,QAC/BA,EAAM;AAAA,MAAA,EAEL,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IAAA;sBAKXU,EAAA,GAAAD,EAEM,OAFNkC,EAEM,EAFA,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAClC9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;;AClBZ,UAAMf,IAAQC,GAKRsE,IAAalE,EAAS,MAAML,EAAM,cAAc,UAAU,GAC1DwE,IAAYnE,EAAS,MAAM,CAACkE,EAAW,SAAS,CAAC,CAACvE,EAAM,KAAK;AACzC,IAAAK,EAAS,MAAM,CAACkE,EAAW,SAAS,CAACvE,EAAM,KAAK;AAE1E,UAAMM,IAAUD,EAAS,MACnBkE,EAAW,QACN,CAAC,kBAAkB,4BAA4BvE,EAAM,SAAS,EAClE,OAAO,OAAO,EACd,KAAK,GAAG,IAETwE,EAAU,QACL,CAAC,kBAAkB,8BAA8B,2BAA2BxE,EAAM,SAAS,EAC/F,OAAO,OAAO,EACd,KAAK,GAAG,IAEN,CAAC,kBAAkB,8BAA8BA,EAAM,SAAS,EACpE,OAAO,OAAO,EACd,KAAK,GAAG,CACZ;qBAKSuE,EAAA,cADR9D,EAKE,OAAA;AAAA;MAHC,SAAOH,EAAA,KAAO;AAAA,MACf,MAAK;AAAA,MACL,oBAAiB;AAAA,IAAA,eAGNkE,EAAA,cADb/D,EASM,OAAA;AAAA;MAPH,SAAOH,EAAA,KAAO;AAAA,MACf,MAAK;AAAA,MACL,oBAAiB;AAAA,IAAA;sBAEjBM,EAAqC,QAAA,EAA/B,OAAM,uBAAA,GAAsB,MAAA,EAAA;AAAA,MAClCA,EAAsD,QAAtDU,IAAsDQ,EAAf7B,EAAA,KAAK,GAAA,CAAA;AAAA,sBAC5CW,EAAqC,QAAA,EAA/B,OAAM,0BAAsB,MAAA,EAAA;AAAA,IAAA,eAEpCH,EAKE,MAAA;AAAA;MAHC,SAAOH,EAAA,KAAO;AAAA,MACf,MAAK;AAAA,MACL,oBAAiB;AAAA,IAAA;;;;;;;;;;;ACzCrB,UAAMN,IAAQC,GAORK,IAAUD;AAAA,MAAS,MACvB;AAAA,QACE;AAAA,QACA,mBAAmBL,EAAM,OAAO;AAAA,QAChC,sBAAsBA,EAAM,UAAU;AAAA,QACtCA,EAAM,aAAa;AAAA,QACnBA,EAAM;AAAA,MAAA,EAEL,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IAAA;sBAKXU,EAAA,GAAAD,EAEU,WAFVkC,EAEU,EAFA,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MACtC9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;;ACxBZ,UAAMf,IAAQC,GAMRK,IAAUD;AAAA,MAAS,MACvB;AAAA,QACE;AAAA,QACAL,EAAM,QAAQ;AAAA,QACdA,EAAM,aAAa;AAAA,QACnBA,EAAM;AAAA,MAAA,EAEL,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IAAA;sBAKXU,EAAA,GAAAD,EAEM,OAFNkC,EAEM,EAFA,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAClC9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;;ACtBZ,UAAMf,IAAQC,GAMRwE,IAAQhD,EAA2B,IAAI,GACvCiD,IAAUjD,EAAI,EAAK;AACzB,QAAIkD,IAAwC;AAE5C,UAAMrE,IAAUD;AAAA,MAAS,MACvB;AAAA,QACE;AAAA,QACAqE,EAAQ,SAAS;AAAA,QACjB1E,EAAM;AAAA,MAAA,EAEL,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IAAA;AAGb,WAAA6B,EAAU,MAAM;AACd,MAAK4C,EAAM,UAEXE,IAAW,IAAI;AAAA,QACb,CAACC,MAAY;AACX,qBAAWC,KAASD;AAClB,YAAIC,EAAM,kBACRH,EAAQ,QAAQ,IACZ1E,EAAM,QAAQ2E,KAAYF,EAAM,SAClCE,EAAS,UAAUF,EAAM,KAAK,KAEtBzE,EAAM,SAChB0E,EAAQ,QAAQ;AAAA,QAGtB;AAAA,QACA,EAAE,WAAW1E,EAAM,UAAA;AAAA,MAAU,GAG/B2E,EAAS,QAAQF,EAAM,KAAK;AAAA,IAC9B,CAAC,GAEDK,EAAY,MAAM;AAChB,MAAIH,MACFA,EAAS,WAAA,GACTA,IAAW;AAAA,IAEf,CAAC,cAICjE,EAAA,GAAAD,EAEM,OAFNkC,EAEM;AAAA,eAFG;AAAA,MAAJ,KAAI8B;AAAA,MAAS,OAAOnE,EAAA;AAAA,IAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAC9C9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;;;ACnDZ,UAAMf,IAAQC,GAMRK,IAAUD;AAAA,MAAS,MACvB,CAAC,eAAeL,EAAM,YAAY,aAAa,gBAAgBA,EAAM,OAAO,IAAIA,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,IAAA;sBAKzHU,EAAA,GAAAD,EASI,KATJkC,EASI;AAAA,MARD,MAAM1C,EAAA;AAAA,MACN,OAAOK,EAAA;AAAA,IAAA;SACYL,EAAA,WAAQ,EAAA,QAAA,UAAA,KAAA,sBAAA,IAAA,CAAA;AAAA,SAAoE2C,EAAAA;AAAAA,IAAAA;MAKhG9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;;ACXZ,UAAMf,IAAQC,GAERC,IAAOC,GAIP4E,IAAatD,EAA2B,IAAI,GAE5CnB,IAAUD,EAAS,MAAM,CAAC,aAAa,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;AAExE,aAAS2E,EAAeC,GAAe;;AACrC,YAAMC,IAAMlF,EAAM,KAAKiF,CAAK;AAC5B,UAAIC,GAAK;AACP,QAAAhF,EAAK,UAAUgF,EAAI,EAAE;AACrB,cAAMC,KAAUf,IAAAW,EAAW,UAAX,gBAAAX,EAAkB,iBAAoC;AACtE,SAAAgB,IAAAD,KAAA,gBAAAA,EAAUF,OAAV,QAAAG,EAAkB;AAAA,MACpB;AAAA,IACF;AAEA,aAAS9C,EAAc9B,GAAsB;AAC3C,YAAM6E,IAAerF,EAAM,KAAK,UAAU,CAACsF,MAAMA,EAAE,OAAOtF,EAAM,SAAS;AACzE,UAAIuF,IAA2B;AAE/B,cAAQ/E,EAAM,KAAA;AAAA,QACZ,KAAK;AACH,UAAA+E,KAAaF,IAAe,KAAKrF,EAAM,KAAK;AAC5C;AAAA,QACF,KAAK;AACH,UAAAuF,KAAaF,IAAe,IAAIrF,EAAM,KAAK,UAAUA,EAAM,KAAK;AAChE;AAAA,QACF,KAAK;AACH,UAAAuF,IAAY;AACZ;AAAA,QACF,KAAK;AACH,UAAAA,IAAYvF,EAAM,KAAK,SAAS;AAChC;AAAA,QACF;AACE;AAAA,MAAA;AAGJ,MAAAQ,EAAM,eAAA,GACNwE,EAAeO,CAAS;AAAA,IAC1B;2BAIE9E,EAgCM,OAAA;AAAA,MAhCA,SAAOH,EAAA,KAAO;AAAA,IAAA;MAClBM,EAkBM,OAAA;AAAA,iBAlBG;AAAA,QAAJ,KAAImE;AAAA,QAAa,MAAK;AAAA,QAAW,WAASzC;AAAA,MAAA;gBAC7C7B,EAgBSuB,GAAA,MAAAC,EAfOhC,EAAA,MAAI,CAAXiF,YADTzE,EAgBS,UAAA;AAAA,UAdN,KAAKyE,EAAI;AAAA,UACT,IAAE,OAASA,EAAI,EAAE;AAAA,UAClB,MAAK;AAAA,UACL,MAAK;AAAA,UACJ,OAAKM,EAAA;AAAA;YAA4CN,EAAI,OAAOjF,EAAA,aAAS;AAAA,UAAA,EAA0C,OAAO,OAAO,EAAE,KAAI,GAAA,CAAA;AAAA,UAInI,iBAAeiF,EAAI,OAAOjF,EAAA,YAAS,SAAA;AAAA,UACnC,iBAAa,SAAWiF,EAAI,EAAE;AAAA,UAC9B,UAAUA,EAAI,OAAOjF,EAAA,YAAS,IAAA;AAAA,UAC9B,SAAK,CAAA2D,MAAE1D,EAAI,UAAWgF,EAAI,EAAE;AAAA,QAAA,GAE1BpD,EAAAoD,EAAI,KAAK,GAAA,IAAA5D,EAAA;;cAIhBb,EAUMuB,GAAA,MAAAC,EATUhC,EAAA,MAAI,CAAXiF,YADTzE,EAUM,OAAA;AAAA,QARH,KAAKyE,EAAI;AAAA,QACT,IAAE,SAAWA,EAAI,EAAE;AAAA,QACpB,MAAK;AAAA,QACJ,mBAAe,OAASA,EAAI,EAAE;AAAA,QAC9B,QAAQA,EAAI,OAAOjF,EAAA,aAAa;AAAA,QAChC,UAAU;AAAA,MAAA;QAEXa,EAAkCC,EAAA,QAAA,SAAZmE,EAAI,EAAE,EAAA;AAAA,MAAA;;;;;;;;;;;;;;;;;;AC3ElC,UAAM5E,IAAUD;AAAA,MAAS,MACvB,CAAC,mBAAmB,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,IAAA;2BAK9CI,EA8BM,OAAA;AAAA,MA9BD,cAAW;AAAA,MAAc,SAAOH,EAAA,KAAO;AAAA,IAAA;MAC1CM,EA4BK,MA5BLU,IA4BK;AAAA,SA3BHZ,EAAA,EAAA,GAAAD,EA0BKuB,GAAA,MAAAC,EAzBqBhC,EAAA,OAAK,CAArBwF,GAAMR,YADhBxE,EA0BK,MAAA;AAAA,UAxBF,KAAG,GAAKgF,EAAK,KAAK,IAAIR,CAAK;AAAA,UAC5B,OAAM;AAAA,QAAA;UAGEA,IAAK,UADbxE,EAMO,QANPE,IAMOmB,EADF7B,EAAA,SAAS,GAAA,CAAA;UAGNgF,MAAUhF,EAAA,MAAM,SAAM,KAD9BS,EAAA,GAAAD,EAMO,QANPc,IAMOO,EADF2D,EAAK,KAAK,GAAA,CAAA,WAEfhF,EAMI,KAAA;AAAA;YAJD,MAAMgF,EAAK;AAAA,YACZ,OAAM;AAAA,UAAA,GAEH3D,EAAA2D,EAAK,KAAK,GAAA,GAAAjD,EAAA;AAAA,QAAA;;;;;;;;;;;;;;;;;;;;AChCvB,UAAMxC,IAAQC,GAKRyF,IAAWjE,EAAI,EAAK;AAE1B,aAASkE,IAAa;AACpB,MAAAD,EAAS,QAAQ,CAACA,EAAS;AAAA,IAC7B;AAEA,aAASE,EAAeC,GAAkB;AACxC,MAAIA,IACF,SAAS,KAAK,UAAU,IAAI,yBAAyB,IAErD,SAAS,KAAK,UAAU,OAAO,yBAAyB;AAAA,IAE5D;AAEA,IAAAhE,EAAU,MAAM+D,EAAe5F,EAAM,KAAK,CAAC,GAC3C8E,EAAY,MAAM,SAAS,KAAK,UAAU,OAAO,yBAAyB,CAAC,GAC3ElD,EAAM,MAAM5B,EAAM,OAAO4F,CAAc;AAEvC,UAAMtF,IAAUD,EAAS,MAAM,CAAC,cAAcL,EAAM,SAAS,mBAAmB,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;2BAIzGS,EAkDM,OAAA;AAAA,MAlDA,SAAOH,EAAA,KAAO;AAAA,MAAE,cAAW;AAAA,IAAA;MAC/BM,EAiCM,OAjCNU,IAiCM;AAAA,QAhCOD,EAAAA,OAAO,QAAlBX,KAAAD,EAEM,OAFNE,IAEM;AAAA,UADJG,EAAoBC,EAAA,QAAA,MAAA;AAAA,QAAA;QAGtBH,EAaM,OAbNW,IAaM;AAAA,kBAZJd,EAWIuB,GAAA,MAAAC,EAVahC,EAAA,OAAK,CAAbwF,YADThF,EAWI,KAAA;AAAA,YATD,KAAKgF,EAAK;AAAA,YACV,MAAMA,EAAK;AAAA,YACX,OAAKD,EAAA;AAAA;cAAgDC,EAAK,UAAM;AAAA,YAAA,EAA4C,OAAO,OAAO,EAAE,KAAI,GAAA,CAAA;AAAA,YAIhI,gBAAcA,EAAK,kBAAkB;AAAA,UAAA,GAEnC3D,EAAA2D,EAAK,KAAK,GAAA,IAAAjD,EAAA;;QAINnB,EAAAA,OAAO,WAAlBX,KAAAD,EAEM,OAFNgC,IAEM;AAAA,UADJ3B,EAAuBC,EAAA,QAAA,SAAA;AAAA,QAAA;QAGzBH,EAQS,UAAA;AAAA,UAPP,MAAK;AAAA,UACL,OAAM;AAAA,UACL,iBAAe8E,EAAA,QAAQ,SAAA;AAAA,UACvB,cAAYA,EAAA,QAAQ,eAAA;AAAA,UACpB,SAAOC;AAAA,QAAA;UAER/E,EAA8D,QAAA;AAAA,YAAxD,OAAM;AAAA,YAA6B,eAAY;AAAA,UAAA;;;MAI9C8E,EAAA,SAAXhF,EAAA,GAAAD,EAaM,OAbNqF,IAaM;AAAA,gBAZJrF,EAWIuB,GAAA,MAAAC,EAVahC,EAAA,OAAK,CAAbwF,YADThF,EAWI,KAAA;AAAA,UATD,KAAKgF,EAAK;AAAA,UACV,MAAMA,EAAK;AAAA,UACX,OAAKD,EAAA;AAAA;YAAmDC,EAAK,UAAM;AAAA,UAAA,EAAiD,OAAO,OAAO,EAAE,KAAI,GAAA,CAAA;AAAA,UAIxI,gBAAcA,EAAK,kBAAkB;AAAA,QAAA,GAEnC3D,EAAA2D,EAAK,KAAK,GAAA,IAAAM,EAAA;;;;;;;;;;;;ACxFrB,UAAM/F,IAAQC,GAIRC,IAAOC,GAIP6F,IAAW3F;AAAA,MACf,MAAML,EAAM,WAAW,WAAWA,EAAM,WAAW;AAAA,IAAA,GAG/CM,IAAUD;AAAA,MAAS,MACvB,CAAC,gBAAgB,iBAAiBL,EAAM,MAAM,EAAE,EAC7C,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IAAA,GAGPiG,IAAuC;AAAA,MAC3C,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,IAAA,GAGHC,IAAc7F,EAAS,MAAM4F,EAAajG,EAAM,MAAM,KAAKA,EAAM,OAAO,aAAa;2BAIzFS,EAeM,OAAA;AAAA,MAdH,SAAOH,EAAA,KAAO;AAAA,MACf,MAAK;AAAA,MACJ,aAAW0F,EAAA,QAAQ,cAAA;AAAA,IAAA;MAEpBpF,EAA2D,QAA3DD,IAA2DmB,EAArBoE,EAAA,KAAW,GAAA,CAAA;AAAA,MACjDtF,EAAwD,QAAxDW,IAAwDO,EAAjB7B,EAAA,OAAO,GAAA,CAAA;AAAA,MAC9CW,EAOS,UAAA;AAAA,QANP,MAAK;AAAA,QACL,OAAM;AAAA,QACN,cAAW;AAAA,QACV,gCAAOV,EAAI,SAAA;AAAA,MAAA,GACb,KAED;AAAA,IAAA;;;ACrEJ;AAiBO,MAAMiG,IAA4C,OAAO,aAAa;AAEtE,SAASC,KAA8B;AAC5C,QAAMC,IAAMC,EAAOH,CAAQ;AAC3B,MAAI,CAACE;AACH,UAAM,IAAI,MAAM,8CAA8C;AAEhE,SAAOA;AACT;;;;;;;ACIA,QAAIE,IAAiB;AAErB,UAAMC,IAAS/E,EAAkB,EAAE,GAC7BgF,wBAAa,IAAA;AAEnB,aAASC,EAAYC,GAAY;AAC/B,YAAM1C,IAAQwC,EAAO,IAAIE,CAAE;AAC3B,MAAI1C,MAAU,WACZ,aAAaA,CAAK,GAClBwC,EAAO,OAAOE,CAAE,IAElBH,EAAO,QAAQA,EAAO,MAAM,OAAO,CAAClB,MAAMA,EAAE,OAAOqB,CAAE;AAAA,IACvD;AAEA,aAASC,EAASC,GAAuB;AACvC,YAAMhC,IAAoB;AAAA,QACxB,IAAI,EAAE0B;AAAA,QACN,SAASM,EAAQ;AAAA,QACjB,QAAQA,EAAQ,UAAU;AAAA,QAC1B,UAAUA,EAAQ,YAAY;AAAA,MAAA;AAIhC,UAFAL,EAAO,QAAQ,CAAC,GAAGA,EAAO,OAAO3B,CAAK,GAElCA,EAAM,WAAW,GAAG;AACtB,cAAMZ,IAAQ,WAAW,MAAM;AAC7B,UAAAyC,EAAY7B,EAAM,EAAE;AAAA,QACtB,GAAGA,EAAM,QAAQ;AACjB,QAAA4B,EAAO,IAAI5B,EAAM,IAAIZ,CAAK;AAAA,MAC5B;AAAA,IACF;AAEA,IAAA6C,EAAQX,GAAU,EAAE,OAAOS,EAAA,CAAU,GAErC9B,EAAY,MAAM;AAChB,iBAAWb,KAASwC,EAAO;AACzB,qBAAaxC,CAAK;AAEpB,MAAAwC,EAAO,MAAA;AAAA,IACT,CAAC;AAED,aAAST,EAASe,GAA8B;AAC9C,aAAOA,MAAW,WAAWA,MAAW;AAAA,IAC1C;AAEA,UAAMd,IAAuC;AAAA,MAC3C,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,IAAA;AAGT,aAASC,EAAYa,GAA6B;AAChD,aAAOd,EAAac,CAAM,KAAKA,EAAO,YAAA;AAAA,IACxC;;MAIEjG,EAAQC,EAAA,QAAA,SAAA;AAAA,MACGyF,EAAA,MAAO,SAAM,KAAxB9F,KAAAD,EAmBM,OAnBNa,IAmBM;AAAA,gBAlBJb,EAiBMuB,GAAA,MAAAC,EAhBYuE,EAAA,OAAM,CAAf3B,YADTpE,EAiBM,OAAA;AAAA,UAfH,KAAKoE,EAAM;AAAA,UACX,OAAKW,EAAA,CAAA,gBAAA,iBAAoCX,EAAM,MAAM,IAAI,KAAI,GAAA,CAAA;AAAA,UAC9D,MAAK;AAAA,UACJ,aAAWmB,EAASnB,EAAM,MAAM,IAAA,cAAA;AAAA,QAAA;UAEjCjE,EAAyE,QAAzEW,IAAyEO,EAAnCoE,EAAYrB,EAAM,MAAM,CAAA,GAAA,CAAA;AAAA,UAC9DjE,EAA8D,QAA9D4B,IAA8DV,EAAvB+C,EAAM,OAAO,GAAA,CAAA;AAAA,UACpDjE,EAOS,UAAA;AAAA,YANP,MAAK;AAAA,YACL,OAAM;AAAA,YACN,cAAW;AAAA,YACV,SAAK,CAAAgD,MAAE8C,EAAY7B,EAAM,EAAE;AAAA,UAAA,GAC7B,OAED,GAAApC,EAAA;AAAA,QAAA;;;;;;;;;;;;AC7EN,UAAMzC,IAAQC,GAKRC,IAAOC,GAIP6G,IAAO3G;AAAA,MAAS,MACpBL,EAAM,WAAW,WAAWA,EAAM,WAAW,YAAY,UAAU;AAAA,IAAA,GAG/DM,IAAUD;AAAA,MAAS,MACvB;AAAA,QACE;AAAA,QACA,iBAAiBL,EAAM,MAAM;AAAA,MAAA,EAE5B,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IAAA,GAGPiG,IAAuC;AAAA,MAC3C,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,IAAA,GAGHC,IAAc7F,EAAS,MAAM4F,EAAajG,EAAM,MAAM,KAAKA,EAAM,OAAO,aAAa;AAE3F,aAASiH,IAAgB;AACvB,MAAA/G,EAAK,SAAS;AAAA,IAChB;2BAIEO,EAcM,OAAA;AAAA,MAdA,SAAOH,EAAA,KAAO;AAAA,MAAG,MAAM0G,EAAA;AAAA,IAAA;MAC3BpG,EAA2D,QAA3DD,IAA2DmB,EAArBoE,EAAA,KAAW,GAAA,CAAA;AAAA,MACjDtF,EAEM,OAFNW,IAEM;AAAA,QADJT,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;MAGFd,EAAA,oBADRQ,EAQS,UAAA;AAAA;QANP,MAAK;AAAA,QACL,OAAM;AAAA,QACN,cAAW;AAAA,QACV,SAAOwG;AAAA,MAAA,GACT,KAED;;;;;;0CCnCEC,IACJ;;;;;;;;;;AAVF,UAAMlH,IAAQC,GAKRC,IAAOC;AAOb,QAAIgH,IAAkB;AACtB,UAAMC,IAAU,uBAAuB,EAAED,CAAe,IAElDE,IAAW5F,EAA2B,IAAI;AAChD,QAAI6F,IAAgC,MAChCC,IAAmB;AAEvB,UAAMC,IAAenH;AAAA,MAAS,MAC5B,CAAC,sBAAsB,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,IAAA;AAGnD,aAASiC,EAAc9B,GAAsB;AAC3C,UAAIA,EAAM,QAAQ,YAAYR,EAAM,eAAe;AACjD,QAAAQ,EAAM,gBAAA,GACNN,EAAK,OAAO;AACZ;AAAA,MACF;AAEA,UAAIM,EAAM,QAAQ,OAAO;AACvB,cAAMiH,IAAQJ,EAAS;AACvB,YAAI,CAACI,EAAO;AAEZ,cAAMC,IAAY,MAAM;AAAA,UACtBD,EAAM,iBAA8BP,CAAkB;AAAA,QAAA;AAExD,YAAIQ,EAAU,WAAW,EAAG;AAE5B,cAAMC,IAAQD,EAAU,CAAC,GACnBE,IAAOF,EAAUA,EAAU,SAAS,CAAC;AAE3C,QAAIlH,EAAM,WACJ,SAAS,kBAAkBmH,MAC7BnH,EAAM,eAAA,GACNoH,EAAK,MAAA,KAGH,SAAS,kBAAkBA,MAC7BpH,EAAM,eAAA,GACNmH,EAAM,MAAA;AAAA,MAGZ;AAAA,IACF;AAEA,aAASE,EAAoBrH,GAAmB;AAC9C,MAAIR,EAAM,uBAAuBQ,EAAM,WAAWA,EAAM,iBACtDN,EAAK,OAAO;AAAA,IAEhB;AAEA,WAAA0B;AAAA,MACE,MAAM5B,EAAM;AAAA,MACZ,OAAO8H,MAAW;AAChB,YAAIA,GAAQ;AACV,UAAAR,IAAgB,SAAS,eACzBC,IAAmB,SAAS,KAAK,MAAM,UACvC,SAAS,KAAK,MAAM,WAAW,UAE/B,MAAMQ,EAAA;AACN,gBAAMN,IAAQJ,EAAS;AACvB,cAAII,GAAO;AACT,kBAAMC,IAAYD,EAAM,iBAA8BP,CAAkB;AACxE,YAAIQ,EAAU,SAAS,IACrBA,EAAU,CAAC,EAAE,MAAA,IAEbD,EAAM,MAAA;AAAA,UAEV;AAAA,QACF;AACE,mBAAS,KAAK,MAAM,WAAWF,GAC3BD,KAAiBA,aAAyB,eAC5CA,EAAc,MAAA;AAAA,MAGpB;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK,GAGpBxC,EAAY,MAAM;AAChB,MAAI9E,EAAM,SACR,SAAS,KAAK,MAAM,WAAWuH;AAAA,IAEnC,CAAC,aAKStH,EAAA,aADRQ,EA+BM,OAAA;AAAA;MA7BJ,OAAM;AAAA,MACL,SAAOoH;AAAA,MACP,WAASvF;AAAA,IAAA;MAEV1B,EAwBM,OAAA;AAAA,iBAvBA;AAAA,QAAJ,KAAIyG;AAAA,QACH,SAAOG,EAAA,KAAY;AAAA,QACpB,MAAK;AAAA,QACL,cAAW;AAAA,QACV,mBAAiBvH,EAAA,QAAQmH,IAAU;AAAA,QACnC,UAAU;AAAA,MAAA;QAEAnH,EAAA,SAAXS,EAAA,GAAAD,EAIM,OAJNE,IAIM;AAAA,UAHJC,EAEK,MAAA;AAAA,YAFA,IAAIwG;AAAA,YAAS,OAAM;AAAA,UAAA,KACnBnH,EAAA,KAAK,GAAA,CAAA;AAAA,QAAA;QAGZW,EAOS,UAAA;AAAA,UANP,MAAK;AAAA,UACL,OAAM;AAAA,UACN,cAAW;AAAA,UACV,gCAAOV,EAAI,OAAA;AAAA,QAAA,GACb,KAED;AAAA,QACAU,EAEM,OAFNW,IAEM;AAAA,UADJT,EAAQC,EAAA,QAAA,SAAA;AAAA,QAAA;;;;;;;;;;;;AClIhB,UAAMf,IAAQC;AAKd,QAAI+H,IAAmB;AACvB,UAAMC,IAAY,kBAAkB,EAAED,CAAgB,IAEhDtD,IAAUjD,EAAI,EAAK;AACzB,QAAIwC,IAA8C;AAElD,aAASiE,IAAO;AACd,MAAAjE,IAAQ,WAAW,MAAM;AACvB,QAAAS,EAAQ,QAAQ;AAAA,MAClB,GAAG1E,EAAM,KAAK;AAAA,IAChB;AAEA,aAASmI,IAAO;AACd,MAAIlE,MAAU,SACZ,aAAaA,CAAK,GAClBA,IAAQ,OAEVS,EAAQ,QAAQ;AAAA,IAClB;AAEA,IAAAI,EAAY,MAAM;AAChB,MAAIb,MAAU,QACZ,aAAaA,CAAK;AAAA,IAEtB,CAAC;AAED,UAAM/C,IAAiBb;AAAA,MAAS,MAC9B,CAAC,yBAAyB,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,IAAA,GAGhD+H,IAAiB/H;AAAA,MAAS,MAC9B;AAAA,QACE;AAAA,QACA,mBAAmBL,EAAM,QAAQ;AAAA,QACjC0E,EAAQ,SAAS;AAAA,MAAA,EAEhB,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IAAA;2BAKXjE,EAiBO,QAAA;AAAA,MAhBJ,SAAOS,EAAA,KAAc;AAAA,MACrB,oBAAkB+G;AAAA,MAClB,cAAYC;AAAA,MACZ,cAAYC;AAAA,MACZ,SAAOD;AAAA,MACP,QAAMC;AAAA,IAAA;MAEPrH,EAAQC,EAAA,QAAA,SAAA;AAAA,MACRH,EAOO,QAAA;AAAA,QANJ,IAAIqH;AAAA,QACJ,SAAOG,EAAA,KAAc;AAAA,QACtB,MAAK;AAAA,QACJ,gBAAc1D,EAAA;AAAA,MAAA,KAEZzE,EAAA,OAAO,GAAA,IAAAqB,EAAA;AAAA,IAAA;;uKCtDV+G,IAAc;;;;;;;;;AAPpB,UAAMrI,IAAQC,GAMRqI,IAAqC,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,GAAA,GAG3DC,IAAgBlI,EAAS,MAAML,EAAM,SAAS,IAAI,GAElDM,IAAUD;AAAA,MAAS,MACvB;AAAA,QACE;AAAA,QACA,oBAAoBL,EAAM,OAAO;AAAA,QACjC,oBAAoBA,EAAM,IAAI;AAAA,QAC9B,CAACuI,EAAc,SAAS;AAAA,QACxBvI,EAAM;AAAA,MAAA,EAEL,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IAAA,GAGPwI,IAAMnI,EAAS,MAAMiI,EAAWtI,EAAM,IAAI,KAAKsI,EAAW,EAAE,GAC5DG,IAASpI,EAAS,OAAOmI,EAAI,QAAQH,KAAe,CAAC,GACrDK,IAAgBrI,EAAS,MAAM,IAAI,KAAK,KAAKoI,EAAO,KAAK,GACzDE,IAAStI;AAAA,MAAS,MACtBkI,EAAc,QACVG,EAAc,QAASA,EAAc,QAAS1I,EAAM,QAAoB,MACxE;AAAA,IAAA;sBAKJU,EAAA,GAAAD,EA6CM,OA7CNkC,EA6CM;AAAA,MA5CH,OAAOrC,EAAA;AAAA,MACR,MAAK;AAAA,MACJ,iBAAe;AAAA,MACf,iBAAe;AAAA,MACf,iBAAeiI,EAAA,QAAgBtI,EAAA,QAAQ;AAAA,IAAA,GAChC2C,EAAAA,MAAM,GAAA;AAAA,MAGE3C,EAAA,YAAO,eACrBQ,EA0BM,OAAA;AAAA;QAzBH,OAAO+H,EAAA;AAAA,QACP,QAAQA,EAAA;AAAA,QACR,SAAO,OAASA,EAAA,KAAG,IAAIA,EAAA,KAAG;AAAA,QAC3B,OAAM;AAAA,MAAA;QAEN5H,EAOE,UAAA;AAAA,UANC,IAAI4H,EAAA,QAAG;AAAA,UACP,IAAIA,EAAA,QAAG;AAAA,UACP,GAAGC,EAAA;AAAA,UACJ,MAAK;AAAA,UACJ,gBAAcJ;AAAA,UACf,OAAM;AAAA,QAAA;QAERzH,EAWE,UAAA;AAAA,UAVC,IAAI4H,EAAA,QAAG;AAAA,UACP,IAAIA,EAAA,QAAG;AAAA,UACP,GAAGC,EAAA;AAAA,UACJ,MAAK;AAAA,UACJ,gBAAcJ;AAAA,UACd,oBAAkBK,EAAA;AAAA,UAClB,qBAAmBH,EAAA,QAAgBI,EAAA,QAAS;AAAA,UAC7C,kBAAe;AAAA,UACf,OAAM;AAAA,UACL,WAAS,cAAgBH,EAAA,QAAG,CAAA,IAAQA,EAAA,QAAG,CAAA;AAAA,QAAA;yBAM5C/H,EAGE,OAAA;AAAA;QAFA,OAAM;AAAA,QACL,OAAKI,EAAE0H,EAAA,QAAa,EAAA,OAAA,GAAetI,EAAA,KAAK,IAAA,IAAQ,MAAS;AAAA,MAAA;;;;;;;;;;ACjFlE,UAAMD,IAAQC,GAKRK,IAAUD;AAAA,MAAS,MACvB;AAAA,QACE;AAAA,QACA,mBAAmBL,EAAM,IAAI;AAAA,QAC7BA,EAAM;AAAA,MAAA,EAEL,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IAAA;sBAKXU,EAAA,GAAAD,EAGO,QAHPkC,EAGO;AAAA,MAHA,OAAOrC,EAAA;AAAA,MAAS,MAAK;AAAA,IAAA,GAAiBsC,EAAAA,MAAM,GAAA,CAAA,GAAAL,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,MACjD3B,EAAwD,QAAA;AAAA,QAAlD,OAAM;AAAA,QAAuB,eAAY;AAAA,MAAA;MAC/CA,EAAoD,QAAA,EAA9C,OAAM,0BAAA,GAA0B,WAAO,EAAA;AAAA,IAAA;;;;;;;;;;;ACbjD,UAAMZ,IAAQC,GAKR2I,IAAiBvI;AAAA,MAAS,MAC9BL,EAAM,UAAUA,EAAM,YAAY,SAAS,SAAS;AAAA,IAAA,GAGhD6I,IAAkBxI;AAAA,MAAS,MAC/BL,EAAM,YAAY,WAAW4I,EAAe,QAAQ5I,EAAM;AAAA,IAAA,GAGtDM,IAAUD;AAAA,MAAS,MACvB;AAAA,QACE;AAAA,QACA,oBAAoBL,EAAM,OAAO;AAAA,QACjC;AAAA,QACAA,EAAM;AAAA,MAAA,EAEL,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IAAA,GAGPsE,IAAcjE,EAAS,OAAO;AAAA,MAClC,OAAOuI,EAAe;AAAA,MACtB,QAAQC,EAAgB;AAAA,IAAA,EACxB;sBAIAnI,EAAA,GAAAD,EAAgF,OAAhFkC,EAAgF;AAAA,MAA1E,OAAOrC,EAAA;AAAA,MAAS,eAAY;AAAA,MAAQ,OAAOgE,EAAA;AAAA,IAAA,GAAqB1B,EAAAA,MAAM,GAAA,MAAA,EAAA;AAAA;;;;;;;;;;;AC5B9E,UAAM5C,IAAQC,GAKR6I,IAAQrH,EAAI,CAAC,GAEbnB,IAAUD;AAAA,MAAS,MACvB;AAAA,QACE;AAAA,QACA,uBAAuBL,EAAM,IAAI;AAAA,QACjCA,EAAM,YAAY;AAAA,MAAA,EAEjB,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IAAA,GAGP+I,IAAU1I,EAAS,MAAMyI,EAAM,SAAS9I,EAAM,KAAK;AAEzD,aAASgJ,EAAOC,GAAiB;;AAC/B,MAAIjJ,EAAM,aACVoE,IAAApE,EAAM,aAAN,QAAAoE,EAAA,KAAApE,GAAiBiJ;AAAA,IACnB;AAEA,aAASC,EAAMC,GAAkBF,GAAiB;AAChD,MAAIjJ,EAAM,aACNmJ,EAAE,QAAQ,OAAOA,EAAE,QAAQ,aAC7BA,EAAE,eAAA,GACFH,EAAOC,CAAC;AAAA,IAEZ;2BAIExI,EA2BM,OAAA;AAAA,MA1BH,SAAOH,EAAA,KAAO;AAAA,MACf,MAAK;AAAA,MACJ,cAAYL,EAAA;AAAA,MACb,yBAAsB;AAAA,MACrB,cAAY,OAAOA,EAAA,KAAK;AAAA,IAAA;YAEzBQ,EAmBSuB,GAAA,MAAAC,EAlBK,GAAC,CAANgH,MADTrI,EAmBS,UAAA;AAAA,QAjBN,KAAKqI;AAAA,QACN,MAAK;AAAA,QACJ,OAAKzD,EAAA,2BAA6ByD,KAAKF,EAAA,QAAO,sCAAA,EAAA,EAAA;AAAA,QAC/C,MAAK;AAAA,QACJ,gBAAcE,MAAMhJ,EAAA,QAAK,SAAA;AAAA,QACzB,cAAU,GAAKgJ,CAAC,QAAQA,IAAC,IAAA,MAAA,EAAA;AAAA,QACzB,UAAUhJ,EAAA,WAAQ,KAAA;AAAA,QAClB,UAAUA,EAAA;AAAA,QACV,mBAAiB,OAAOgJ,CAAC;AAAA,QACzB,SAAK,CAAArF,MAAEoF,EAAOC,CAAC;AAAA,QACf,YAAUE,MAAqBD,EAAMC,GAAGF,CAAC;AAAA,QACzC,cAAU,CAAArF,MAAA,CAAG3D,EAAA,aAAa6I,EAAA,QAAQG;AAAA,QAClC,cAAU1G,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAqB,MAAA,CAAG3D,EAAA,aAAa6I,EAAA,QAAK;AAAA,QAC/B,SAAK,CAAAlF,MAAA,CAAG3D,EAAA,aAAa6I,EAAA,QAAQG;AAAA,QAC7B,QAAI1G,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAqB,MAAA,CAAG3D,EAAA,aAAa6I,EAAA,QAAK;AAAA,MAAA;QAE1BlI,EAAgF,QAAA;AAAA,UAA1E,OAAM;AAAA,UAA4B,eAAY;AAAA,QAAA,KAAU,GAAQ,GAAA,EAAA;AAAA,MAAA;;;;;;;;;;ACxE5E,UAAMZ,IAAQC,GAKRK,IAAUD;AAAA,MAAS,MACvB;AAAA,QACE;AAAA,QACAL,EAAM,SAAS,iCAAiC;AAAA,QAChDA,EAAM;AAAA,MAAA,EAEL,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IAAA;sBAKXU,EAAA,GAAAD,EAEM,OAFNkC,EAEM,EAFA,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAClC9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;;;AClBZ,UAAMf,IAAQC,GAKRK,IAAUD;AAAA,MAAS,MACvB;AAAA,QACE;AAAA,QACA;AAAA,QACAL,EAAM;AAAA,MAAA,EAEL,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IAAA,GAGPoJ,IAAe/I;AAAA,MAAS,MAC5B;AAAA,QACE;AAAA,QACAL,EAAM,SAAS,6BAA6B;AAAA,MAAA,EAE3C,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IAAA;sBAKXU,EAAA,GAAAD,EAOM,OAPNkC,EAOM,EAPA,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAClChC,EAEO,QAFPU,IAEO;AAAA,QADLR,EAAqCC,uBAArC,MAAqC;AAAA,cAAfd,EAAA,KAAK,GAAA,CAAA;AAAA,QAAA;;MAE7BW,EAEO,QAAA;AAAA,QAFA,SAAOwI,EAAA,KAAY;AAAA,MAAA;QACxBtI,EAAqCC,uBAArC,MAAqC;AAAA,cAAfd,EAAA,KAAK,GAAA,CAAA;AAAA,QAAA;;;;;;;;;;AC/CjC,UAAMD,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,oBAAoBL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAI5FU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACNhD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,6BAA6BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAE7FU,EAAA,GAAAD,EAAwD,SAAxDkC,EAAwD,EAAhD,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACH1D,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,kCAAkCL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAElGU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHxD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,oCAAoCL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAEpGU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHxD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,2BAA2BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAE3FU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHxD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,gCAAgCL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAEhGU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHxD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,iCAAiCL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAEjGU,EAAA,GAAAD,EAAsD,QAAtDkC,EAAsD,EAA/C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHzD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,+BAA+BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAE/FU,EAAA,GAAAD,EAAsD,QAAtDkC,EAAsD,EAA/C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHzD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,2BAA2BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAE3FU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHxD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,iCAAiCL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAEjGU,EAAA,GAAAD,EAAsD,QAAtDkC,EAAsD,EAA/C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHzD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,gCAAgCL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAEhGU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;ACHxD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,gCAAgCL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAIxGU,EAAA,GAAAD,EAGI,KAHJkC,EAGI;AAAA,MAHA,OAAOrC,EAAA;AAAA,MAAU,MAAMN,EAAM;AAAA,IAAA,GAAc4C,EAAAA,MAAM,GAAA;AAAA,sBACnDhC,EAAiD,QAAA,EAA3C,OAAM,8BAAA,GAA6B,MAAA,EAAA;AAAA,MACzCE,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACPZ,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,+BAA+BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAE/FU,EAAA,GAAAD,EAAyC,QAAzCkC,EAAyC,EAAlC,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA,MAAA,EAAA;AAAA;;;;;;;ACH/C,UAAM5C,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,0BAA0BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAE1FU,EAAA,GAAAD,EAAsD,QAAtDkC,EAAsD,EAA/C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHzD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,qBAAqBL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAErFU,EAAA,GAAAD,EAA0D,UAA1DkC,EAA0D,EAAjD,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACH3D,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,4BAA4BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAE5FU,EAAA,GAAAD,EAAkD,MAAlDkC,EAAkD,EAA7C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHvD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,2BAA2BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAE3FU,EAAA,GAAAD,EAAgD,KAAhDkC,EAAgD,EAA5C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHtD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,2BAA2BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAE3FU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHxD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,gCAAgCL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAEhGU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHxD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,iCAAiCL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAEjGU,EAAA,GAAAD,EAAsD,QAAtDkC,EAAsD,EAA/C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHzD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,iCAAiCL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAEjGU,EAAA,GAAAD,EAAsD,QAAtDkC,EAAsD,EAA/C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHzD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,uBAAuBL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAEvFU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHxD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,8BAA8BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAE9FU,EAAA,GAAAD,EAAsD,QAAtDkC,EAAsD,EAA/C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHzD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,6BAA6BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAE7FU,EAAA,GAAAD,EAAkD,MAAlDkC,EAAkD,EAA7C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHvD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,sBAAsBL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAEtFU,EAAA,GAAAD,EAA4D,WAA5DkC,EAA4D,EAAlD,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACH5D,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,4BAA4BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAE5FU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHxD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,iCAAiCL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAEjGU,EAAA,GAAAD,EAAsD,QAAtDkC,EAAsD,EAA/C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHzD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,4BAA4BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAE5FU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHxD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,sBAAsBL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAEtFU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHxD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,4BAA4BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAE5FU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHxD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,6BAA6BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAE7FU,EAAA,GAAAD,EAAsD,QAAtDkC,EAAsD,EAA/C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHzD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,4BAA4BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAE5FU,EAAA,GAAAD,EAAsD,QAAtDkC,EAAsD,EAA/C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;;ACEzD,UAAMf,IAAQC,GAMRK,IAAUD;AAAA,MAAS,MACvB;AAAA,QACE;AAAA,QACAL,EAAM,UAAU,uCAAuC;AAAA,QACvDA,EAAM,WAAW,uCAAuC;AAAA,QACxDA,EAAM;AAAA,MAAA,EAEL,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IAAA;sBAKXU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACxBhD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,+BAA+BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAE/FU,EAAA,GAAAD,EAAgD,KAAhDkC,EAAgD,EAA5C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHtD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,oBAAoBL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAEpFU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHxD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,4BAA4BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAE5FU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;ACCxD,UAAMf,IAAQC,GAERK,IAAUD,EAAS,MAAM,CAAC,yBAAyBL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC,GAC7FqJ,IAAWhJ,EAAS,MAAOL,EAAM,QAAQ,EAAE,YAAYA,EAAM,MAAA,IAAU,EAAG;sBAGtEU,EAAA,GAAAD,EAA2D,QAA3DkC,EAA2D;AAAA,MAApD,OAAOrC,EAAA;AAAA,MAAU,OAAO+I,EAAA;AAAA,IAAA,GAAkBzG,EAAAA,MAAM,GAAA,MAAA,EAAA;AAAA;;;;;;;ACVjE,UAAM5C,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,2BAA2BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAE3FU,EAAA,GAAAD,EAAsD,QAAtDkC,EAAsD,EAA/C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHzD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,0BAA0BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAE1FU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;ACCxD,UAAMf,IAAQC,GAERK,IAAUD,EAAS,MAAM,CAAC,6BAA6BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC,GACjGsJ,IAAajJ,EAAS,MAAOL,EAAM,SAAS,SAAS,MAAU;sBAInEU,EAAA,GAAAD,EAA8E,OAA9EkC,EAA8E;AAAA,MAAxE,OAAOrC,EAAA;AAAA,MAAU,eAAagJ,EAAA;AAAA,IAAA,GAAoB1G,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACX1E,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,kCAAkCL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAElGU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHxD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,6BAA6BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAE7FU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHxD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,6BAA6BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAE7FU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHxD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,2BAA2BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAInGU,EAAA,GAAAD,EAAoF,OAApFkC,EAAoF;AAAA,MAA9E,OAAOrC,EAAA;AAAA,MAAS,MAAK;AAAA,MAAS,cAAW;AAAA,IAAA,GAAesC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACLhF,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,kCAAkCL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAElGU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHxD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,iCAAiCL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAEjGU,EAAA,GAAAD,EAAkD,MAAlDkC,EAAkD,EAA7C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;ACCvD,UAAMf,IAAQC,GAKRK,IAAUD,EAAS,MAAM,CAAC,iCAAiCL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAIzGU,EAAA,GAAAD,EAOS,UAPTkC,EAOS;AAAA,MANP,MAAK;AAAA,MACJ,OAAOrC,EAAA;AAAA,MACP,cAAYN,EAAM;AAAA,IAAA,GACX4C,EAAAA,MAAM,GAAA;AAAA,MAEd9B,EAAcC,yBAAd,MAAc;AAAA,0BAAR,KAAC,EAAA;AAAA,MAAA;;;;;;;;;ACnBX,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,gCAAgCL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAEhGU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHxD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,kCAAkCL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAElGU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHxD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,0BAA0BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAE1FU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHxD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,0BAA0BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAE1FU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHxD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,2BAA2BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAE3FU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHxD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,0BAA0BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAE1FU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;ACCxD,UAAMf,IAAQC,GAERK,IAAUD;AAAA,MAAS,MACvB,CAAC,kBAAkBL,EAAM,SAAS,2BAA2B,IAAIA,EAAM,SAAS,EAC7E,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IAAA;sBAIHU,EAAA,GAAAD,EAAsD,QAAtDkC,EAAsD,EAA/C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;ACRzD,UAAMf,IAAQC,GAERK,IAAUD;AAAA,MAAS,MACvB,CAAC,0BAA0B,2BAA2BL,EAAM,SAAS,IAAIA,EAAM,SAAS,EACrF,OAAO,OAAO,EACd,KAAK,GAAG;AAAA,IAAA;sBAIHU,EAAA,GAAAD,EAAqE,QAArEkC,EAAqE;AAAA,MAA9D,OAAOrC,EAAA;AAAA,MAAS,MAAK;AAAA,IAAA,GAAkBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACdxE,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,uBAAuBL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAEvFU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHxD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,wBAAwBL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAExFU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHxD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,8BAA8BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAE9FU,EAAA,GAAAD,EAAsD,QAAtDkC,EAAsD,EAA/C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHzD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,iCAAiCL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAEjGU,EAAA,GAAAD,EAAsD,QAAtDkC,EAAsD,EAA/C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHzD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,8BAA8BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAE9FU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHxD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,+BAA+BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAE/FU,EAAA,GAAAD,EAAsD,QAAtDkC,EAAsD,EAA/C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;;;;ACIzD,UAAMf,IAAQC,GAERK,IAAUD,EAAS,MAAM,CAAC,iBAAiBL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC,GACrFuJ,IAAclJ,EAAS,OAAO,EAAE,YAAYL,EAAM,YAAY,OAAOA,EAAM,MAAA,EAAQ;sBAIvFU,EAAA,GAAAD,EAGM,OAHNkC,EAGM;AAAA,MAHA,OAAOrC,EAAA;AAAA,MAAU,OAAOiJ,EAAA;AAAA,IAAA,GAAqB3G,EAAAA,MAAM,GAAA;AAAA,MACvDhC,EAAmD,QAAnDU,IAAmDQ,EAAd7B,EAAA,IAAI,GAAA,CAAA;AAAA,MACzCW,EAAiD,QAAjDD,IAAiDmB,EAAb7B,EAAA,GAAG,GAAA,CAAA;AAAA,IAAA;;;;;;;;AChB3C,UAAMD,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,sBAAsBL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAEtFU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHxD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,wBAAwBL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAExFU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHxD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,8BAA8BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAE9FU,EAAA,GAAAD,EAAsD,QAAtDkC,EAAsD,EAA/C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHzD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,yBAAyBL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAEzFU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHxD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,8BAA8BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAE9FU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;ACCxD,UAAMf,IAAQC,GAERK,IAAUD,EAAS,MAAM,CAAC,iCAAiCL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC,GACrGwJ,IAAWnJ,EAAS,MAAM;AAC9B,YAAMoJ,IAAI,OAAOzJ,EAAM,SAAU,WAAWA,EAAM,QAAQ,OAAOA,EAAM;AACvE,aAAOyJ,IAAI,EAAE,OAAOA,EAAA,IAAM,CAAA;AAAA,IAC5B,CAAC;sBAIC/I,EAAA,GAAAD,EAA2D,QAA3DkC,EAA2D;AAAA,MAApD,OAAOrC,EAAA;AAAA,MAAU,OAAOkJ,EAAA;AAAA,IAAA,GAAkB5G,EAAAA,MAAM,GAAA,MAAA,EAAA;AAAA;;;;;;;;;ACTzD,UAAM5C,IAAQC,GAERK,IAAUD,EAAS,MAAM,CAAC,8BAA8BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC,GAClG0J,IAAWrJ,EAAS,MAAM;AAC9B,YAAMsJ,IAA4B,CAAA;AAClC,aAAI3J,EAAM,WAAQ2J,EAAE,eAAe3J,EAAM,SACrCA,EAAM,WAAQ2J,EAAE,YAAY3J,EAAM,SAC/B2J;AAAA,IACT,CAAC;sBAICjJ,EAAA,GAAAD,EAA2D,QAA3DkC,EAA2D;AAAA,MAApD,OAAOrC,EAAA;AAAA,MAAU,OAAOoJ,EAAA;AAAA,IAAA,GAAkB9G,EAAAA,MAAM,GAAA,MAAA,EAAA;AAAA;;;;;;;ACjBzD,UAAM5C,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,0BAA0BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAE1FU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHxD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,+BAA+BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAE/FU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHxD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,iCAAiCL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAEjGU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHxD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,mCAAmCL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAEnGU,EAAA,GAAAD,EAAsD,QAAtDkC,EAAsD,EAA/C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHzD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,iCAAiCL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAEjGU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;;ACCxD,UAAMf,IAAQC,GAERK,IAAUD,EAAS,MAAM,CAAC,+BAA+BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC,GACnGwJ,IAAWnJ,EAAS,MAAOL,EAAM,QAAQ,EAAE,OAAOA,EAAM,MAAA,IAAU,EAAG;sBAIzEU,EAAA,GAAAD,EAAsE,OAAtEkC,EAAsE;AAAA,MAAhE,OAAOrC,EAAA;AAAA,MAAU,OAAOkJ,EAAA;AAAA,IAAA,GAAkB5G,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACXlE,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,8BAA8BL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAE9FU,EAAA,GAAAD,EAAsD,QAAtDkC,EAAsD,EAA/C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;;;;;;ACHzD,UAAMf,IAAQC,GACRK,IAAUD,EAAS,MAAM,CAAC,gCAAgCL,EAAM,SAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;sBAEhGU,EAAA,GAAAD,EAAoD,OAApDkC,EAAoD,EAA9C,OAAOrC,EAAA,MAAA,GAAiBsC,EAAAA,MAAM,GAAA;AAAA,MAAE9B,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;"}