@dillingerstaffing/strand-vue 0.16.1 → 0.17.0

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 +1248 -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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dillingerstaffing/strand-vue",
3
- "version": "0.16.1",
3
+ "version": "0.17.0",
4
4
  "description": "Strand UI - Vue 3 component library built on the Strand Design Language",
5
5
  "author": "Dillinger Staffing <engineering@dillingerstaffing.com> (https://dillingerstaffing.com)",
6
6
  "license": "MIT",
@@ -53,7 +53,7 @@
53
53
  "vue": "^3.4.0"
54
54
  },
55
55
  "dependencies": {
56
- "@dillingerstaffing/strand": "^0.16.1"
56
+ "@dillingerstaffing/strand": "^0.17.0"
57
57
  },
58
58
  "devDependencies": {
59
59
  "@testing-library/jest-dom": "^6.6.0",
@@ -0,0 +1,51 @@
1
+ import { describe, it, expect } from 'vitest'
2
+ import { render } from '@testing-library/vue'
3
+ import CardSection from './CardSection.vue'
4
+
5
+ describe('CardSection', () => {
6
+ it('renders a div element', () => {
7
+ const { container } = render(CardSection, { slots: { default: 'Content' } })
8
+ expect(container.firstElementChild?.tagName).toBe('DIV')
9
+ })
10
+
11
+ it('renders slot content', () => {
12
+ const { getByText } = render(CardSection, { slots: { default: 'Hello world' } })
13
+ expect(getByText('Hello world')).toBeTruthy()
14
+ })
15
+
16
+ it('applies the strand-card__section base class', () => {
17
+ const { container } = render(CardSection, { slots: { default: 'Test' } })
18
+ expect(container.firstElementChild?.className).toContain('strand-card__section')
19
+ })
20
+
21
+ it('does not apply --header modifier by default', () => {
22
+ const { container } = render(CardSection, { slots: { default: 'Test' } })
23
+ expect(container.firstElementChild?.className).not.toContain('strand-card__section--header')
24
+ })
25
+
26
+ it('applies --header modifier when header prop is true', () => {
27
+ const { container } = render(CardSection, {
28
+ props: { header: true },
29
+ slots: { default: 'Test' },
30
+ })
31
+ expect(container.firstElementChild?.className).toContain('strand-card__section--header')
32
+ })
33
+
34
+ it('merges custom className', () => {
35
+ const { container } = render(CardSection, {
36
+ props: { className: 'custom' },
37
+ slots: { default: 'Test' },
38
+ })
39
+ const el = container.firstElementChild
40
+ expect(el?.className).toContain('strand-card__section')
41
+ expect(el?.className).toContain('custom')
42
+ })
43
+
44
+ it('forwards additional attributes', () => {
45
+ const { container } = render(CardSection, {
46
+ attrs: { id: 's-1' },
47
+ slots: { default: 'Test' },
48
+ })
49
+ expect(container.firstElementChild?.getAttribute('id')).toBe('s-1')
50
+ })
51
+ })
@@ -0,0 +1,42 @@
1
+ <!--! Strand Vue | MIT License | dillingerstaffing.com -->
2
+ <!--
3
+ A horizontal row inside a composed card, separated from siblings
4
+ by a hairline rule. Use multiple CardSection children inside a
5
+ Card with padding="none" to stack header / body / cta rows. The
6
+ first child's top rule is suppressed automatically.
7
+
8
+ Distinct from the standalone strand-card-section molecule
9
+ (DL 11.10 section-boundary production), which is a same-named
10
+ block used outside cards.
11
+ -->
12
+ <script setup lang="ts">
13
+ import { computed } from 'vue'
14
+
15
+ interface Props {
16
+ /** When true, applies the --header layout (baseline, space-between, gap) */
17
+ header?: boolean
18
+ /** Additional CSS class */
19
+ className?: string
20
+ }
21
+
22
+ const props = withDefaults(defineProps<Props>(), {
23
+ header: false,
24
+ className: '',
25
+ })
26
+
27
+ const classes = computed(() =>
28
+ [
29
+ 'strand-card__section',
30
+ props.header ? 'strand-card__section--header' : '',
31
+ props.className,
32
+ ]
33
+ .filter(Boolean)
34
+ .join(' '),
35
+ )
36
+ </script>
37
+
38
+ <template>
39
+ <div :class="classes" v-bind="$attrs">
40
+ <slot />
41
+ </div>
42
+ </template>
@@ -0,0 +1 @@
1
+ export { default as CardSection } from './CardSection.vue'
@@ -0,0 +1,42 @@
1
+ import { describe, it, expect } from 'vitest'
2
+ import { render } from '@testing-library/vue'
3
+ import ContainerScale from './ContainerScale.vue'
4
+ import ContainerScaleRow from './ContainerScaleRow.vue'
5
+ import ContainerScaleLabel from './ContainerScaleLabel.vue'
6
+ import ContainerScaleCaption from './ContainerScaleCaption.vue'
7
+ import ContainerScaleTrack from './ContainerScaleTrack.vue'
8
+ import ContainerScaleBar from './ContainerScaleBar.vue'
9
+ import ContainerScalePx from './ContainerScalePx.vue'
10
+ import ContainerScaleAxis from './ContainerScaleAxis.vue'
11
+
12
+ describe('ContainerScale (Vue)', () => {
13
+ it('root base class', () => {
14
+ const { container } = render(ContainerScale, { slots: { default: 'x' } })
15
+ expect(container.firstElementChild?.className).toContain('strand-container-scale')
16
+ })
17
+
18
+ it('BEM parts render with scoped classes', () => {
19
+ const pairs: Array<[any, string]> = [
20
+ [ContainerScaleRow, 'strand-container-scale__row'],
21
+ [ContainerScaleLabel, 'strand-container-scale__label'],
22
+ [ContainerScaleCaption, 'strand-container-scale__caption'],
23
+ [ContainerScaleTrack, 'strand-container-scale__track'],
24
+ [ContainerScalePx, 'strand-container-scale__px'],
25
+ [ContainerScaleAxis, 'strand-container-scale__axis'],
26
+ ]
27
+ for (const [C, cls] of pairs) {
28
+ const { container } = render(C, { slots: { default: 'x' } })
29
+ expect(container.firstElementChild?.className).toContain(cls)
30
+ }
31
+ })
32
+
33
+ it('Bar applies inline width', () => {
34
+ const { container } = render(ContainerScaleBar, {
35
+ props: { width: '60%' },
36
+ slots: { default: 'x' },
37
+ })
38
+ const el = container.firstElementChild as HTMLElement
39
+ expect(el.style.width).toBe('60%')
40
+ expect(el.className).toContain('strand-container-scale__bar')
41
+ })
42
+ })
@@ -0,0 +1,8 @@
1
+ <!--! Strand Vue | MIT License | dillingerstaffing.com -->
2
+ <script setup lang="ts">
3
+ import { computed } from 'vue'
4
+ interface Props { className?: string }
5
+ const props = withDefaults(defineProps<Props>(), { className: '' })
6
+ const classes = computed(() => ['strand-container-scale', props.className].filter(Boolean).join(' '))
7
+ </script>
8
+ <template><div :class="classes" v-bind="$attrs"><slot /></div></template>
@@ -0,0 +1,8 @@
1
+ <!--! Strand Vue | MIT License | dillingerstaffing.com -->
2
+ <script setup lang="ts">
3
+ import { computed } from 'vue'
4
+ interface Props { className?: string }
5
+ const props = withDefaults(defineProps<Props>(), { className: '' })
6
+ const classes = computed(() => ['strand-container-scale__axis', props.className].filter(Boolean).join(' '))
7
+ </script>
8
+ <template><div :class="classes" v-bind="$attrs"><slot /></div></template>
@@ -0,0 +1,17 @@
1
+ <!--! Strand Vue | MIT License | dillingerstaffing.com -->
2
+ <script setup lang="ts">
3
+ import { computed } from 'vue'
4
+
5
+ interface Props {
6
+ width?: string
7
+ className?: string
8
+ }
9
+ const props = withDefaults(defineProps<Props>(), { className: '' })
10
+
11
+ const classes = computed(() => ['strand-container-scale__bar', props.className].filter(Boolean).join(' '))
12
+ const barStyle = computed(() => (props.width ? { width: props.width } : {}))
13
+ </script>
14
+
15
+ <template>
16
+ <div :class="classes" :style="barStyle" v-bind="$attrs"><slot /></div>
17
+ </template>
@@ -0,0 +1,8 @@
1
+ <!--! Strand Vue | MIT License | dillingerstaffing.com -->
2
+ <script setup lang="ts">
3
+ import { computed } from 'vue'
4
+ interface Props { className?: string }
5
+ const props = withDefaults(defineProps<Props>(), { className: '' })
6
+ const classes = computed(() => ['strand-container-scale__caption', props.className].filter(Boolean).join(' '))
7
+ </script>
8
+ <template><span :class="classes" v-bind="$attrs"><slot /></span></template>
@@ -0,0 +1,8 @@
1
+ <!--! Strand Vue | MIT License | dillingerstaffing.com -->
2
+ <script setup lang="ts">
3
+ import { computed } from 'vue'
4
+ interface Props { className?: string }
5
+ const props = withDefaults(defineProps<Props>(), { className: '' })
6
+ const classes = computed(() => ['strand-container-scale__label', props.className].filter(Boolean).join(' '))
7
+ </script>
8
+ <template><div :class="classes" v-bind="$attrs"><slot /></div></template>
@@ -0,0 +1,8 @@
1
+ <!--! Strand Vue | MIT License | dillingerstaffing.com -->
2
+ <script setup lang="ts">
3
+ import { computed } from 'vue'
4
+ interface Props { className?: string }
5
+ const props = withDefaults(defineProps<Props>(), { className: '' })
6
+ const classes = computed(() => ['strand-container-scale__px', props.className].filter(Boolean).join(' '))
7
+ </script>
8
+ <template><span :class="classes" v-bind="$attrs"><slot /></span></template>
@@ -0,0 +1,8 @@
1
+ <!--! Strand Vue | MIT License | dillingerstaffing.com -->
2
+ <script setup lang="ts">
3
+ import { computed } from 'vue'
4
+ interface Props { className?: string }
5
+ const props = withDefaults(defineProps<Props>(), { className: '' })
6
+ const classes = computed(() => ['strand-container-scale__row', props.className].filter(Boolean).join(' '))
7
+ </script>
8
+ <template><div :class="classes" v-bind="$attrs"><slot /></div></template>
@@ -0,0 +1,8 @@
1
+ <!--! Strand Vue | MIT License | dillingerstaffing.com -->
2
+ <script setup lang="ts">
3
+ import { computed } from 'vue'
4
+ interface Props { className?: string }
5
+ const props = withDefaults(defineProps<Props>(), { className: '' })
6
+ const classes = computed(() => ['strand-container-scale__track', props.className].filter(Boolean).join(' '))
7
+ </script>
8
+ <template><div :class="classes" v-bind="$attrs"><slot /></div></template>
@@ -0,0 +1,8 @@
1
+ export { default as ContainerScale } from './ContainerScale.vue'
2
+ export { default as ContainerScaleRow } from './ContainerScaleRow.vue'
3
+ export { default as ContainerScaleLabel } from './ContainerScaleLabel.vue'
4
+ export { default as ContainerScaleCaption } from './ContainerScaleCaption.vue'
5
+ export { default as ContainerScaleTrack } from './ContainerScaleTrack.vue'
6
+ export { default as ContainerScaleBar } from './ContainerScaleBar.vue'
7
+ export { default as ContainerScalePx } from './ContainerScalePx.vue'
8
+ export { default as ContainerScaleAxis } from './ContainerScaleAxis.vue'
@@ -0,0 +1,43 @@
1
+ import { describe, it, expect } from 'vitest'
2
+ import { render } from '@testing-library/vue'
3
+ import KvEditorial from './KvEditorial.vue'
4
+
5
+ describe('KvEditorial', () => {
6
+ it('renders a div with strand-kv base class', () => {
7
+ const { container } = render(KvEditorial, {
8
+ props: { label: 'A', value: 'B' },
9
+ })
10
+ expect(container.firstElementChild?.className).toContain('strand-kv')
11
+ })
12
+
13
+ it('applies --editorial modifier', () => {
14
+ const { container } = render(KvEditorial, {
15
+ props: { label: 'A', value: 'B' },
16
+ })
17
+ expect(container.firstElementChild?.className).toContain('strand-kv--editorial')
18
+ })
19
+
20
+ it('renders label and value', () => {
21
+ const { getByText } = render(KvEditorial, {
22
+ props: { label: 'Owner', value: 'DS' },
23
+ })
24
+ expect(getByText('Owner')).toBeTruthy()
25
+ expect(getByText('DS')).toBeTruthy()
26
+ })
27
+
28
+ it('does not apply --status by default', () => {
29
+ const { container } = render(KvEditorial, {
30
+ props: { label: 'A', value: 'B' },
31
+ })
32
+ const valueEl = container.querySelector('.strand-kv__value')
33
+ expect(valueEl?.className).not.toContain('strand-kv__value--status')
34
+ })
35
+
36
+ it('applies --status modifier when status is true', () => {
37
+ const { container } = render(KvEditorial, {
38
+ props: { label: 'A', value: 'B', status: true },
39
+ })
40
+ const valueEl = container.querySelector('.strand-kv__value')
41
+ expect(valueEl?.className).toContain('strand-kv__value--status')
42
+ })
43
+ })
@@ -0,0 +1,56 @@
1
+ <!--! Strand Vue | MIT License | dillingerstaffing.com -->
2
+ <!--
3
+ Card-metadata key-value row. Editorial sibling of the default
4
+ instrument strand-kv readout. Use inside CardSection bodies to
5
+ produce soft sans-serif Blue-midnight values separated by a
6
+ dashed divider.
7
+ -->
8
+ <script setup lang="ts">
9
+ import { computed } from 'vue'
10
+
11
+ interface Props {
12
+ /** Label column content (mono, uppercase, left) */
13
+ label: string
14
+ /** Value column content (sans, blue-midnight, right) */
15
+ value: string
16
+ /** When true, applies --status color (teal-vital) to the value */
17
+ status?: boolean
18
+ /** Additional CSS class */
19
+ className?: string
20
+ }
21
+
22
+ const props = withDefaults(defineProps<Props>(), {
23
+ status: false,
24
+ className: '',
25
+ })
26
+
27
+ const classes = computed(() =>
28
+ [
29
+ 'strand-kv',
30
+ 'strand-kv--editorial',
31
+ props.className,
32
+ ]
33
+ .filter(Boolean)
34
+ .join(' '),
35
+ )
36
+
37
+ const valueClasses = computed(() =>
38
+ [
39
+ 'strand-kv__value',
40
+ props.status ? 'strand-kv__value--status' : '',
41
+ ]
42
+ .filter(Boolean)
43
+ .join(' '),
44
+ )
45
+ </script>
46
+
47
+ <template>
48
+ <div :class="classes" v-bind="$attrs">
49
+ <span class="strand-kv__label">
50
+ <slot name="label">{{ label }}</slot>
51
+ </span>
52
+ <span :class="valueClasses">
53
+ <slot name="value">{{ value }}</slot>
54
+ </span>
55
+ </div>
56
+ </template>
@@ -0,0 +1 @@
1
+ export { default as KvEditorial } from './KvEditorial.vue'
@@ -0,0 +1,89 @@
1
+ import { describe, it, expect, vi } from 'vitest'
2
+ import { fireEvent, render } from '@testing-library/vue'
3
+ import LabFrame from './LabFrame.vue'
4
+ import LabFrameChrome from './LabFrameChrome.vue'
5
+ import LabFrameDot from './LabFrameDot.vue'
6
+ import LabFrameTitle from './LabFrameTitle.vue'
7
+ import LabFrameBody from './LabFrameBody.vue'
8
+ import LabFrameContent from './LabFrameContent.vue'
9
+ import LabFrameContentHead from './LabFrameContentHead.vue'
10
+ import LabFrameActions from './LabFrameActions.vue'
11
+ import LabFrameOverlay from './LabFrameOverlay.vue'
12
+ import LabFramePanel from './LabFramePanel.vue'
13
+ import LabFramePanelHeader from './LabFramePanelHeader.vue'
14
+ import LabFramePanelTitle from './LabFramePanelTitle.vue'
15
+ import LabFramePanelClose from './LabFramePanelClose.vue'
16
+ import LabFramePanelBody from './LabFramePanelBody.vue'
17
+ import LabFramePanelFooter from './LabFramePanelFooter.vue'
18
+
19
+ describe('LabFrame family (Vue)', () => {
20
+ it('LabFrame base class', () => {
21
+ const { container } = render(LabFrame, { slots: { default: 'x' } })
22
+ expect(container.firstElementChild?.className).toContain('strand-ref-frame')
23
+ })
24
+
25
+ it('Chrome + Title + Body render', () => {
26
+ expect(render(LabFrameChrome, { slots: { default: 'x' } }).container.firstElementChild?.className).toContain('strand-ref-frame__chrome')
27
+ expect(render(LabFrameTitle, { slots: { default: 'x' } }).container.firstElementChild?.className).toContain('strand-ref-frame__title')
28
+ expect(render(LabFrameBody, { slots: { default: 'x' } }).container.firstElementChild?.className).toContain('strand-ref-frame__body')
29
+ })
30
+
31
+ it('Dot applies inline background', () => {
32
+ const { container } = render(LabFrameDot, { props: { color: '#ff5f57' } })
33
+ const el = container.firstElementChild as HTMLElement
34
+ expect(el.style.background).toBe('rgb(255, 95, 87)')
35
+ })
36
+
37
+ it('Content aria-hidden when hidden prop is true', () => {
38
+ const { container } = render(LabFrameContent, {
39
+ props: { hidden: true },
40
+ slots: { default: 'x' },
41
+ })
42
+ expect(container.firstElementChild?.getAttribute('aria-hidden')).toBe('true')
43
+ })
44
+
45
+ it('Content no aria-hidden by default', () => {
46
+ const { container } = render(LabFrameContent, { slots: { default: 'x' } })
47
+ expect(container.firstElementChild?.getAttribute('aria-hidden')).toBeNull()
48
+ })
49
+
50
+ it('Overlay and Panel render with roles', () => {
51
+ expect(render(LabFrameOverlay, { slots: { default: 'x' } }).container.firstElementChild?.className).toContain('strand-ref-frame__overlay')
52
+ const { container } = render(LabFramePanel, { slots: { default: 'x' } })
53
+ const panel = container.firstElementChild as HTMLElement
54
+ expect(panel.className).toContain('strand-ref-frame__panel')
55
+ expect(panel.getAttribute('role')).toBe('dialog')
56
+ expect(panel.getAttribute('aria-modal')).toBe('true')
57
+ })
58
+
59
+ it('Panel sub-elements render', () => {
60
+ expect(render(LabFramePanelHeader, { slots: { default: 'x' } }).container.firstElementChild?.className).toContain('strand-ref-frame__panel-header')
61
+ const { container } = render(LabFramePanelTitle, { slots: { default: 'x' } })
62
+ expect(container.firstElementChild?.tagName).toBe('H2')
63
+ expect(render(LabFramePanelBody, { slots: { default: 'x' } }).container.firstElementChild?.className).toContain('strand-ref-frame__panel-body')
64
+ expect(render(LabFramePanelFooter, { slots: { default: 'x' } }).container.firstElementChild?.className).toContain('strand-ref-frame__panel-footer')
65
+ })
66
+
67
+ it('Panel close renders button + default aria-label', () => {
68
+ const { container } = render(LabFramePanelClose)
69
+ const btn = container.firstElementChild as HTMLButtonElement
70
+ expect(btn.tagName).toBe('BUTTON')
71
+ expect(btn.type).toBe('button')
72
+ expect(btn.getAttribute('aria-label')).toBe('Close')
73
+ })
74
+
75
+ it('Panel close accepts custom ariaLabel and children', () => {
76
+ const { container } = render(LabFramePanelClose, {
77
+ props: { ariaLabel: 'Close dialog' },
78
+ slots: { default: 'x' },
79
+ })
80
+ const btn = container.firstElementChild as HTMLButtonElement
81
+ expect(btn.getAttribute('aria-label')).toBe('Close dialog')
82
+ expect(btn.textContent).toBe('x')
83
+ })
84
+
85
+ it('ContentHead + Actions render', () => {
86
+ expect(render(LabFrameContentHead, { slots: { default: 'x' } }).container.firstElementChild?.className).toContain('strand-ref-frame__content-head')
87
+ expect(render(LabFrameActions, { slots: { default: 'x' } }).container.firstElementChild?.className).toContain('strand-ref-frame__actions')
88
+ })
89
+ })
@@ -0,0 +1,8 @@
1
+ <!--! Strand Vue | MIT License | dillingerstaffing.com -->
2
+ <script setup lang="ts">
3
+ import { computed } from 'vue'
4
+ interface Props { className?: string }
5
+ const props = withDefaults(defineProps<Props>(), { className: '' })
6
+ const classes = computed(() => ['strand-ref-frame', props.className].filter(Boolean).join(' '))
7
+ </script>
8
+ <template><div :class="classes" v-bind="$attrs"><slot /></div></template>
@@ -0,0 +1,8 @@
1
+ <!--! Strand Vue | MIT License | dillingerstaffing.com -->
2
+ <script setup lang="ts">
3
+ import { computed } from 'vue'
4
+ interface Props { className?: string }
5
+ const props = withDefaults(defineProps<Props>(), { className: '' })
6
+ const classes = computed(() => ['strand-ref-frame__actions', props.className].filter(Boolean).join(' '))
7
+ </script>
8
+ <template><div :class="classes" v-bind="$attrs"><slot /></div></template>
@@ -0,0 +1,8 @@
1
+ <!--! Strand Vue | MIT License | dillingerstaffing.com -->
2
+ <script setup lang="ts">
3
+ import { computed } from 'vue'
4
+ interface Props { className?: string }
5
+ const props = withDefaults(defineProps<Props>(), { className: '' })
6
+ const classes = computed(() => ['strand-ref-frame__body', props.className].filter(Boolean).join(' '))
7
+ </script>
8
+ <template><div :class="classes" v-bind="$attrs"><slot /></div></template>
@@ -0,0 +1,8 @@
1
+ <!--! Strand Vue | MIT License | dillingerstaffing.com -->
2
+ <script setup lang="ts">
3
+ import { computed } from 'vue'
4
+ interface Props { className?: string }
5
+ const props = withDefaults(defineProps<Props>(), { className: '' })
6
+ const classes = computed(() => ['strand-ref-frame__chrome', props.className].filter(Boolean).join(' '))
7
+ </script>
8
+ <template><div :class="classes" v-bind="$attrs"><slot /></div></template>
@@ -0,0 +1,17 @@
1
+ <!--! Strand Vue | MIT License | dillingerstaffing.com -->
2
+ <script setup lang="ts">
3
+ import { computed } from 'vue'
4
+
5
+ interface Props {
6
+ hidden?: boolean
7
+ className?: string
8
+ }
9
+ const props = withDefaults(defineProps<Props>(), { hidden: false, className: '' })
10
+
11
+ const classes = computed(() => ['strand-ref-frame__content', props.className].filter(Boolean).join(' '))
12
+ const ariaHidden = computed(() => (props.hidden ? 'true' : undefined))
13
+ </script>
14
+
15
+ <template>
16
+ <div :class="classes" :aria-hidden="ariaHidden" v-bind="$attrs"><slot /></div>
17
+ </template>
@@ -0,0 +1,8 @@
1
+ <!--! Strand Vue | MIT License | dillingerstaffing.com -->
2
+ <script setup lang="ts">
3
+ import { computed } from 'vue'
4
+ interface Props { className?: string }
5
+ const props = withDefaults(defineProps<Props>(), { className: '' })
6
+ const classes = computed(() => ['strand-ref-frame__content-head', props.className].filter(Boolean).join(' '))
7
+ </script>
8
+ <template><div :class="classes" v-bind="$attrs"><slot /></div></template>
@@ -0,0 +1,15 @@
1
+ <!--! Strand Vue | MIT License | dillingerstaffing.com -->
2
+ <script setup lang="ts">
3
+ import { computed } from 'vue'
4
+
5
+ interface Props {
6
+ color?: string
7
+ className?: string
8
+ }
9
+ const props = withDefaults(defineProps<Props>(), { className: '' })
10
+
11
+ const classes = computed(() => ['strand-ref-frame__dot', props.className].filter(Boolean).join(' '))
12
+ const dotStyle = computed(() => (props.color ? { background: props.color } : {}))
13
+ </script>
14
+
15
+ <template><span :class="classes" :style="dotStyle" v-bind="$attrs" /></template>
@@ -0,0 +1,8 @@
1
+ <!--! Strand Vue | MIT License | dillingerstaffing.com -->
2
+ <script setup lang="ts">
3
+ import { computed } from 'vue'
4
+ interface Props { className?: string }
5
+ const props = withDefaults(defineProps<Props>(), { className: '' })
6
+ const classes = computed(() => ['strand-ref-frame__overlay', props.className].filter(Boolean).join(' '))
7
+ </script>
8
+ <template><div :class="classes" v-bind="$attrs"><slot /></div></template>
@@ -0,0 +1,11 @@
1
+ <!--! Strand Vue | MIT License | dillingerstaffing.com -->
2
+ <script setup lang="ts">
3
+ import { computed } from 'vue'
4
+ interface Props { className?: string }
5
+ const props = withDefaults(defineProps<Props>(), { className: '' })
6
+ const classes = computed(() => ['strand-ref-frame__panel', props.className].filter(Boolean).join(' '))
7
+ </script>
8
+
9
+ <template>
10
+ <div :class="classes" role="dialog" aria-modal="true" v-bind="$attrs"><slot /></div>
11
+ </template>
@@ -0,0 +1,8 @@
1
+ <!--! Strand Vue | MIT License | dillingerstaffing.com -->
2
+ <script setup lang="ts">
3
+ import { computed } from 'vue'
4
+ interface Props { className?: string }
5
+ const props = withDefaults(defineProps<Props>(), { className: '' })
6
+ const classes = computed(() => ['strand-ref-frame__panel-body', props.className].filter(Boolean).join(' '))
7
+ </script>
8
+ <template><div :class="classes" v-bind="$attrs"><slot /></div></template>
@@ -0,0 +1,26 @@
1
+ <!--! Strand Vue | MIT License | dillingerstaffing.com -->
2
+ <script setup lang="ts">
3
+ import { computed } from 'vue'
4
+
5
+ interface Props {
6
+ ariaLabel?: string
7
+ className?: string
8
+ }
9
+ const props = withDefaults(defineProps<Props>(), {
10
+ ariaLabel: 'Close',
11
+ className: '',
12
+ })
13
+
14
+ const classes = computed(() => ['strand-ref-frame__panel-close', props.className].filter(Boolean).join(' '))
15
+ </script>
16
+
17
+ <template>
18
+ <button
19
+ type="button"
20
+ :class="classes"
21
+ :aria-label="props.ariaLabel"
22
+ v-bind="$attrs"
23
+ >
24
+ <slot>×</slot>
25
+ </button>
26
+ </template>
@@ -0,0 +1,8 @@
1
+ <!--! Strand Vue | MIT License | dillingerstaffing.com -->
2
+ <script setup lang="ts">
3
+ import { computed } from 'vue'
4
+ interface Props { className?: string }
5
+ const props = withDefaults(defineProps<Props>(), { className: '' })
6
+ const classes = computed(() => ['strand-ref-frame__panel-footer', props.className].filter(Boolean).join(' '))
7
+ </script>
8
+ <template><div :class="classes" v-bind="$attrs"><slot /></div></template>
@@ -0,0 +1,8 @@
1
+ <!--! Strand Vue | MIT License | dillingerstaffing.com -->
2
+ <script setup lang="ts">
3
+ import { computed } from 'vue'
4
+ interface Props { className?: string }
5
+ const props = withDefaults(defineProps<Props>(), { className: '' })
6
+ const classes = computed(() => ['strand-ref-frame__panel-header', props.className].filter(Boolean).join(' '))
7
+ </script>
8
+ <template><div :class="classes" v-bind="$attrs"><slot /></div></template>
@@ -0,0 +1,8 @@
1
+ <!--! Strand Vue | MIT License | dillingerstaffing.com -->
2
+ <script setup lang="ts">
3
+ import { computed } from 'vue'
4
+ interface Props { className?: string }
5
+ const props = withDefaults(defineProps<Props>(), { className: '' })
6
+ const classes = computed(() => ['strand-ref-frame__panel-title', props.className].filter(Boolean).join(' '))
7
+ </script>
8
+ <template><h2 :class="classes" v-bind="$attrs"><slot /></h2></template>
@@ -0,0 +1,8 @@
1
+ <!--! Strand Vue | MIT License | dillingerstaffing.com -->
2
+ <script setup lang="ts">
3
+ import { computed } from 'vue'
4
+ interface Props { className?: string }
5
+ const props = withDefaults(defineProps<Props>(), { className: '' })
6
+ const classes = computed(() => ['strand-ref-frame__title', props.className].filter(Boolean).join(' '))
7
+ </script>
8
+ <template><span :class="classes" v-bind="$attrs"><slot /></span></template>