@dillingerstaffing/strand-svelte 0.16.0 → 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 (213) hide show
  1. package/dist/components/CardSection/CardSection.svelte.d.ts +1 -0
  2. package/dist/components/CardSection/index.d.ts +3 -0
  3. package/dist/components/CardSection/index.d.ts.map +1 -0
  4. package/dist/components/ContainerScale/ContainerScale.svelte.d.ts +1 -0
  5. package/dist/components/ContainerScale/ContainerScaleAxis.svelte.d.ts +1 -0
  6. package/dist/components/ContainerScale/ContainerScaleBar.svelte.d.ts +1 -0
  7. package/dist/components/ContainerScale/ContainerScaleCaption.svelte.d.ts +1 -0
  8. package/dist/components/ContainerScale/ContainerScaleLabel.svelte.d.ts +1 -0
  9. package/dist/components/ContainerScale/ContainerScalePx.svelte.d.ts +1 -0
  10. package/dist/components/ContainerScale/ContainerScaleRow.svelte.d.ts +1 -0
  11. package/dist/components/ContainerScale/ContainerScaleTrack.svelte.d.ts +1 -0
  12. package/dist/components/ContainerScale/index.d.ts +10 -0
  13. package/dist/components/ContainerScale/index.d.ts.map +1 -0
  14. package/dist/components/KvEditorial/KvEditorial.svelte.d.ts +1 -0
  15. package/dist/components/KvEditorial/index.d.ts +3 -0
  16. package/dist/components/KvEditorial/index.d.ts.map +1 -0
  17. package/dist/components/LabFrame/LabFrame.svelte.d.ts +1 -0
  18. package/dist/components/LabFrame/LabFrameActions.svelte.d.ts +1 -0
  19. package/dist/components/LabFrame/LabFrameBody.svelte.d.ts +1 -0
  20. package/dist/components/LabFrame/LabFrameChrome.svelte.d.ts +1 -0
  21. package/dist/components/LabFrame/LabFrameContent.svelte.d.ts +1 -0
  22. package/dist/components/LabFrame/LabFrameContentHead.svelte.d.ts +1 -0
  23. package/dist/components/LabFrame/LabFrameDot.svelte.d.ts +1 -0
  24. package/dist/components/LabFrame/LabFrameOverlay.svelte.d.ts +1 -0
  25. package/dist/components/LabFrame/LabFramePanel.svelte.d.ts +1 -0
  26. package/dist/components/LabFrame/LabFramePanelBody.svelte.d.ts +1 -0
  27. package/dist/components/LabFrame/LabFramePanelClose.svelte.d.ts +1 -0
  28. package/dist/components/LabFrame/LabFramePanelFooter.svelte.d.ts +1 -0
  29. package/dist/components/LabFrame/LabFramePanelHeader.svelte.d.ts +1 -0
  30. package/dist/components/LabFrame/LabFramePanelTitle.svelte.d.ts +1 -0
  31. package/dist/components/LabFrame/LabFrameTitle.svelte.d.ts +1 -0
  32. package/dist/components/LabFrame/index.d.ts +17 -0
  33. package/dist/components/LabFrame/index.d.ts.map +1 -0
  34. package/dist/components/LabGlassStage/LabGlassPanel.svelte.d.ts +1 -0
  35. package/dist/components/LabGlassStage/LabGlassStage.svelte.d.ts +1 -0
  36. package/dist/components/LabGlassStage/index.d.ts +4 -0
  37. package/dist/components/LabGlassStage/index.d.ts.map +1 -0
  38. package/dist/components/LabRevealStage/LabRevealLine.svelte.d.ts +1 -0
  39. package/dist/components/LabRevealStage/LabRevealStage.svelte.d.ts +1 -0
  40. package/dist/components/LabRevealStage/index.d.ts +4 -0
  41. package/dist/components/LabRevealStage/index.d.ts.map +1 -0
  42. package/dist/components/LabShell/LabBrand.svelte.d.ts +1 -0
  43. package/dist/components/LabShell/LabBrandMark.svelte.d.ts +1 -0
  44. package/dist/components/LabShell/LabBrandSub.svelte.d.ts +1 -0
  45. package/dist/components/LabShell/LabBrandTitle.svelte.d.ts +1 -0
  46. package/dist/components/LabShell/LabExample.svelte.d.ts +1 -0
  47. package/dist/components/LabShell/LabExampleCaption.svelte.d.ts +1 -0
  48. package/dist/components/LabShell/LabExampleCode.svelte.d.ts +1 -0
  49. package/dist/components/LabShell/LabExampleDemo.svelte.d.ts +1 -0
  50. package/dist/components/LabShell/LabExampleLabel.svelte.d.ts +1 -0
  51. package/dist/components/LabShell/LabExampleMeta.svelte.d.ts +1 -0
  52. package/dist/components/LabShell/LabHeader.svelte.d.ts +1 -0
  53. package/dist/components/LabShell/LabHeaderLead.svelte.d.ts +1 -0
  54. package/dist/components/LabShell/LabHeaderMeta.svelte.d.ts +1 -0
  55. package/dist/components/LabShell/LabHeaderMetaItem.svelte.d.ts +1 -0
  56. package/dist/components/LabShell/LabHeaderMetaLabel.svelte.d.ts +1 -0
  57. package/dist/components/LabShell/LabHeaderMetaValue.svelte.d.ts +1 -0
  58. package/dist/components/LabShell/LabHeaderTitle.svelte.d.ts +1 -0
  59. package/dist/components/LabShell/LabMain.svelte.d.ts +1 -0
  60. package/dist/components/LabShell/LabSection.svelte.d.ts +1 -0
  61. package/dist/components/LabShell/LabSectionBody.svelte.d.ts +1 -0
  62. package/dist/components/LabShell/LabSectionHead.svelte.d.ts +1 -0
  63. package/dist/components/LabShell/LabSectionHeadNote.svelte.d.ts +1 -0
  64. package/dist/components/LabShell/LabShell.svelte.d.ts +1 -0
  65. package/dist/components/LabShell/LabSidebar.svelte.d.ts +1 -0
  66. package/dist/components/LabShell/LabSidebarGroup.svelte.d.ts +1 -0
  67. package/dist/components/LabShell/LabSidebarGroupDot.svelte.d.ts +1 -0
  68. package/dist/components/LabShell/LabSidebarGroupLabel.svelte.d.ts +1 -0
  69. package/dist/components/LabShell/LabSidebarGroupLink.svelte.d.ts +1 -0
  70. package/dist/components/LabShell/LabSidebarGroupList.svelte.d.ts +1 -0
  71. package/dist/components/LabShell/LabSidebarHead.svelte.d.ts +1 -0
  72. package/dist/components/LabShell/LabSidebarScroll.svelte.d.ts +1 -0
  73. package/dist/components/LabShell/LabTaxonomy.svelte.d.ts +1 -0
  74. package/dist/components/LabShell/LabTaxonomyList.svelte.d.ts +1 -0
  75. package/dist/components/LabShell/LabTaxonomyTitle.svelte.d.ts +1 -0
  76. package/dist/components/LabShell/index.d.ts +36 -0
  77. package/dist/components/LabShell/index.d.ts.map +1 -0
  78. package/dist/components/LabTip/LabTip.svelte.d.ts +1 -0
  79. package/dist/components/LabTip/LabTipBubble.svelte.d.ts +1 -0
  80. package/dist/components/LabTip/index.d.ts +4 -0
  81. package/dist/components/LabTip/index.d.ts.map +1 -0
  82. package/dist/components/LabUtilCell/LabUtilCell.svelte.d.ts +1 -0
  83. package/dist/components/LabUtilCell/LabUtilCellBlock.svelte.d.ts +1 -0
  84. package/dist/components/LabUtilCell/LabUtilCellCaption.svelte.d.ts +1 -0
  85. package/dist/components/LabUtilCell/LabUtilCellCode.svelte.d.ts +1 -0
  86. package/dist/components/LabUtilCell/LabUtilCellDemo.svelte.d.ts +1 -0
  87. package/dist/components/LabUtilCell/LabUtilRow.svelte.d.ts +1 -0
  88. package/dist/components/LabUtilCell/index.d.ts +8 -0
  89. package/dist/components/LabUtilCell/index.d.ts.map +1 -0
  90. package/dist/components/Swatch/Swatch.svelte.d.ts +1 -0
  91. package/dist/components/Swatch/SwatchGrid.svelte.d.ts +1 -0
  92. package/dist/components/Swatch/index.d.ts +4 -0
  93. package/dist/components/Swatch/index.d.ts.map +1 -0
  94. package/dist/components/TokenSpecimen/TokenSpecimen.svelte.d.ts +1 -0
  95. package/dist/components/TokenSpecimen/TokenSpecimenBox.svelte.d.ts +1 -0
  96. package/dist/components/TokenSpecimen/TokenSpecimenGrid.svelte.d.ts +1 -0
  97. package/dist/components/TokenSpecimen/TokenSpecimenSpacer.svelte.d.ts +1 -0
  98. package/dist/components/TokenSpecimen/index.d.ts +6 -0
  99. package/dist/components/TokenSpecimen/index.d.ts.map +1 -0
  100. package/dist/components/TypeSpecimen/TypeSpecimen.svelte.d.ts +1 -0
  101. package/dist/components/TypeSpecimen/TypeSpecimenMeta.svelte.d.ts +1 -0
  102. package/dist/components/TypeSpecimen/index.d.ts +4 -0
  103. package/dist/components/TypeSpecimen/index.d.ts.map +1 -0
  104. package/dist/css/strand-ui.css +1268 -87
  105. package/dist/index.d.ts +12 -0
  106. package/dist/index.d.ts.map +1 -1
  107. package/dist/index.js +3453 -2625
  108. package/dist/index.js.map +1 -1
  109. package/package.json +2 -2
  110. package/src/components/CardSection/CardSection.svelte +20 -0
  111. package/src/components/CardSection/CardSection.test.ts +27 -0
  112. package/src/components/CardSection/index.ts +2 -0
  113. package/src/components/ContainerScale/ContainerScale.svelte +4 -0
  114. package/src/components/ContainerScale/ContainerScale.test.ts +34 -0
  115. package/src/components/ContainerScale/ContainerScaleAxis.svelte +4 -0
  116. package/src/components/ContainerScale/ContainerScaleBar.svelte +9 -0
  117. package/src/components/ContainerScale/ContainerScaleCaption.svelte +4 -0
  118. package/src/components/ContainerScale/ContainerScaleLabel.svelte +4 -0
  119. package/src/components/ContainerScale/ContainerScalePx.svelte +4 -0
  120. package/src/components/ContainerScale/ContainerScaleRow.svelte +4 -0
  121. package/src/components/ContainerScale/ContainerScaleTrack.svelte +4 -0
  122. package/src/components/ContainerScale/index.ts +9 -0
  123. package/src/components/KvEditorial/KvEditorial.svelte +20 -0
  124. package/src/components/KvEditorial/KvEditorial.test.ts +32 -0
  125. package/src/components/KvEditorial/index.ts +2 -0
  126. package/src/components/LabFrame/LabFrame.svelte +4 -0
  127. package/src/components/LabFrame/LabFrame.test.ts +76 -0
  128. package/src/components/LabFrame/LabFrameActions.svelte +4 -0
  129. package/src/components/LabFrame/LabFrameBody.svelte +4 -0
  130. package/src/components/LabFrame/LabFrameChrome.svelte +4 -0
  131. package/src/components/LabFrame/LabFrameContent.svelte +12 -0
  132. package/src/components/LabFrame/LabFrameContentHead.svelte +4 -0
  133. package/src/components/LabFrame/LabFrameDot.svelte +7 -0
  134. package/src/components/LabFrame/LabFrameOverlay.svelte +4 -0
  135. package/src/components/LabFrame/LabFramePanel.svelte +4 -0
  136. package/src/components/LabFrame/LabFramePanelBody.svelte +4 -0
  137. package/src/components/LabFrame/LabFramePanelClose.svelte +8 -0
  138. package/src/components/LabFrame/LabFramePanelFooter.svelte +4 -0
  139. package/src/components/LabFrame/LabFramePanelHeader.svelte +4 -0
  140. package/src/components/LabFrame/LabFramePanelTitle.svelte +4 -0
  141. package/src/components/LabFrame/LabFrameTitle.svelte +4 -0
  142. package/src/components/LabFrame/index.ts +16 -0
  143. package/src/components/LabGlassStage/LabGlassPanel.svelte +4 -0
  144. package/src/components/LabGlassStage/LabGlassStage.svelte +4 -0
  145. package/src/components/LabGlassStage/LabGlassStage.test.ts +18 -0
  146. package/src/components/LabGlassStage/index.ts +3 -0
  147. package/src/components/LabRevealStage/LabRevealLine.svelte +4 -0
  148. package/src/components/LabRevealStage/LabRevealStage.svelte +4 -0
  149. package/src/components/LabRevealStage/LabRevealStage.test.ts +18 -0
  150. package/src/components/LabRevealStage/index.ts +3 -0
  151. package/src/components/LabShell/LabBrand.svelte +4 -0
  152. package/src/components/LabShell/LabBrandMark.svelte +4 -0
  153. package/src/components/LabShell/LabBrandSub.svelte +4 -0
  154. package/src/components/LabShell/LabBrandTitle.svelte +4 -0
  155. package/src/components/LabShell/LabExample.svelte +4 -0
  156. package/src/components/LabShell/LabExampleCaption.svelte +4 -0
  157. package/src/components/LabShell/LabExampleCode.svelte +4 -0
  158. package/src/components/LabShell/LabExampleDemo.svelte +15 -0
  159. package/src/components/LabShell/LabExampleLabel.svelte +4 -0
  160. package/src/components/LabShell/LabExampleMeta.svelte +4 -0
  161. package/src/components/LabShell/LabHeader.svelte +4 -0
  162. package/src/components/LabShell/LabHeaderLead.svelte +4 -0
  163. package/src/components/LabShell/LabHeaderMeta.svelte +4 -0
  164. package/src/components/LabShell/LabHeaderMetaItem.svelte +4 -0
  165. package/src/components/LabShell/LabHeaderMetaLabel.svelte +4 -0
  166. package/src/components/LabShell/LabHeaderMetaValue.svelte +4 -0
  167. package/src/components/LabShell/LabHeaderTitle.svelte +4 -0
  168. package/src/components/LabShell/LabMain.svelte +4 -0
  169. package/src/components/LabShell/LabSection.svelte +4 -0
  170. package/src/components/LabShell/LabSectionBody.svelte +4 -0
  171. package/src/components/LabShell/LabSectionHead.svelte +4 -0
  172. package/src/components/LabShell/LabSectionHeadNote.svelte +4 -0
  173. package/src/components/LabShell/LabShell.svelte +4 -0
  174. package/src/components/LabShell/LabShell.test.ts +148 -0
  175. package/src/components/LabShell/LabSidebar.svelte +4 -0
  176. package/src/components/LabShell/LabSidebarGroup.svelte +4 -0
  177. package/src/components/LabShell/LabSidebarGroupDot.svelte +2 -0
  178. package/src/components/LabShell/LabSidebarGroupLabel.svelte +4 -0
  179. package/src/components/LabShell/LabSidebarGroupLink.svelte +9 -0
  180. package/src/components/LabShell/LabSidebarGroupList.svelte +4 -0
  181. package/src/components/LabShell/LabSidebarHead.svelte +4 -0
  182. package/src/components/LabShell/LabSidebarScroll.svelte +4 -0
  183. package/src/components/LabShell/LabTaxonomy.svelte +4 -0
  184. package/src/components/LabShell/LabTaxonomyList.svelte +4 -0
  185. package/src/components/LabShell/LabTaxonomyTitle.svelte +4 -0
  186. package/src/components/LabShell/index.ts +35 -0
  187. package/src/components/LabTip/LabTip.svelte +11 -0
  188. package/src/components/LabTip/LabTip.test.ts +35 -0
  189. package/src/components/LabTip/LabTipBubble.svelte +12 -0
  190. package/src/components/LabTip/index.ts +3 -0
  191. package/src/components/LabUtilCell/LabUtilCell.svelte +4 -0
  192. package/src/components/LabUtilCell/LabUtilCell.test.ts +27 -0
  193. package/src/components/LabUtilCell/LabUtilCellBlock.svelte +4 -0
  194. package/src/components/LabUtilCell/LabUtilCellCaption.svelte +4 -0
  195. package/src/components/LabUtilCell/LabUtilCellCode.svelte +4 -0
  196. package/src/components/LabUtilCell/LabUtilCellDemo.svelte +4 -0
  197. package/src/components/LabUtilCell/LabUtilRow.svelte +4 -0
  198. package/src/components/LabUtilCell/index.ts +7 -0
  199. package/src/components/Swatch/Swatch.svelte +12 -0
  200. package/src/components/Swatch/Swatch.test.ts +31 -0
  201. package/src/components/Swatch/SwatchGrid.svelte +4 -0
  202. package/src/components/Swatch/index.ts +3 -0
  203. package/src/components/TokenSpecimen/TokenSpecimen.svelte +4 -0
  204. package/src/components/TokenSpecimen/TokenSpecimen.test.ts +42 -0
  205. package/src/components/TokenSpecimen/TokenSpecimenBox.svelte +11 -0
  206. package/src/components/TokenSpecimen/TokenSpecimenGrid.svelte +4 -0
  207. package/src/components/TokenSpecimen/TokenSpecimenSpacer.svelte +8 -0
  208. package/src/components/TokenSpecimen/index.ts +5 -0
  209. package/src/components/TypeSpecimen/TypeSpecimen.svelte +4 -0
  210. package/src/components/TypeSpecimen/TypeSpecimen.test.ts +18 -0
  211. package/src/components/TypeSpecimen/TypeSpecimenMeta.svelte +4 -0
  212. package/src/components/TypeSpecimen/index.ts +3 -0
  213. package/src/index.ts +18 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dillingerstaffing/strand-svelte",
3
- "version": "0.16.0",
3
+ "version": "0.17.0",
4
4
  "description": "Strand UI - Svelte component library built on the Strand Design Language",
5
5
  "author": "Dillinger Staffing <engineering@dillingerstaffing.com> (https://dillingerstaffing.com)",
6
6
  "license": "MIT",
@@ -56,7 +56,7 @@
56
56
  "svelte": "^4.0.0 || ^5.0.0"
57
57
  },
58
58
  "dependencies": {
59
- "@dillingerstaffing/strand": "^0.16.0"
59
+ "@dillingerstaffing/strand": "^0.17.0"
60
60
  },
61
61
  "devDependencies": {
62
62
  "@sveltejs/vite-plugin-svelte": "^5.0.0",
@@ -0,0 +1,20 @@
1
+ <!--! Strand Svelte | 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
+ <script lang="ts">
9
+ /** When true, applies the --header layout (baseline, space-between, gap) */
10
+ export let header: boolean = false
11
+
12
+ $: classes = [
13
+ 'strand-card__section',
14
+ header ? 'strand-card__section--header' : '',
15
+ ].filter(Boolean).join(' ')
16
+ </script>
17
+
18
+ <div class={classes} {...$$restProps}>
19
+ <slot />
20
+ </div>
@@ -0,0 +1,27 @@
1
+ /*! Strand Svelte | MIT License | dillingerstaffing.com */
2
+
3
+ import { describe, it, expect } from 'vitest'
4
+ import { render } from '@testing-library/svelte'
5
+ import CardSection from './CardSection.svelte'
6
+
7
+ describe('CardSection', () => {
8
+ it('renders with base class', () => {
9
+ const { container } = render(CardSection)
10
+ const el = container.querySelector('.strand-card__section')
11
+ expect(el).toBeInTheDocument()
12
+ })
13
+
14
+ it('does not apply header modifier by default', () => {
15
+ const { container } = render(CardSection)
16
+ expect(container.querySelector('.strand-card__section')).not.toHaveClass(
17
+ 'strand-card__section--header',
18
+ )
19
+ })
20
+
21
+ it('applies header modifier when header prop is true', () => {
22
+ const { container } = render(CardSection, { props: { header: true } })
23
+ expect(container.querySelector('.strand-card__section')).toHaveClass(
24
+ 'strand-card__section--header',
25
+ )
26
+ })
27
+ })
@@ -0,0 +1,2 @@
1
+ /*! Strand Svelte | MIT License | dillingerstaffing.com */
2
+ export { default as CardSection } from './CardSection.svelte'
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <div class="strand-container-scale" {...$$restProps}>
3
+ <slot />
4
+ </div>
@@ -0,0 +1,34 @@
1
+ /*! Strand Svelte | MIT License | dillingerstaffing.com */
2
+
3
+ import { describe, it, expect } from 'vitest'
4
+ import { render } from '@testing-library/svelte'
5
+ import ContainerScale from './ContainerScale.svelte'
6
+ import ContainerScaleRow from './ContainerScaleRow.svelte'
7
+ import ContainerScaleLabel from './ContainerScaleLabel.svelte'
8
+ import ContainerScaleCaption from './ContainerScaleCaption.svelte'
9
+ import ContainerScaleTrack from './ContainerScaleTrack.svelte'
10
+ import ContainerScaleBar from './ContainerScaleBar.svelte'
11
+ import ContainerScalePx from './ContainerScalePx.svelte'
12
+ import ContainerScaleAxis from './ContainerScaleAxis.svelte'
13
+
14
+ describe('ContainerScale (Svelte)', () => {
15
+ it('root base class', () => {
16
+ const { container } = render(ContainerScale)
17
+ expect(container.querySelector('.strand-container-scale')).toBeInTheDocument()
18
+ })
19
+
20
+ it('BEM parts render with scoped classes', () => {
21
+ expect(render(ContainerScaleRow).container.querySelector('.strand-container-scale__row')).toBeInTheDocument()
22
+ expect(render(ContainerScaleLabel).container.querySelector('.strand-container-scale__label')).toBeInTheDocument()
23
+ expect(render(ContainerScaleCaption).container.querySelector('.strand-container-scale__caption')).toBeInTheDocument()
24
+ expect(render(ContainerScaleTrack).container.querySelector('.strand-container-scale__track')).toBeInTheDocument()
25
+ expect(render(ContainerScalePx).container.querySelector('.strand-container-scale__px')).toBeInTheDocument()
26
+ expect(render(ContainerScaleAxis).container.querySelector('.strand-container-scale__axis')).toBeInTheDocument()
27
+ })
28
+
29
+ it('Bar inline width', () => {
30
+ const { container } = render(ContainerScaleBar, { props: { width: '60%' } })
31
+ const el = container.querySelector('.strand-container-scale__bar') as HTMLElement
32
+ expect(el.style.width).toBe('60%')
33
+ })
34
+ })
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <div class="strand-container-scale__axis" {...$$restProps}>
3
+ <slot />
4
+ </div>
@@ -0,0 +1,9 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <script lang="ts">
3
+ export let width: string | undefined = undefined
4
+ $: styleAttr = width ? `width: ${width};` : ''
5
+ </script>
6
+
7
+ <div class="strand-container-scale__bar" style={styleAttr} {...$$restProps}>
8
+ <slot />
9
+ </div>
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <span class="strand-container-scale__caption" {...$$restProps}>
3
+ <slot />
4
+ </span>
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <div class="strand-container-scale__label" {...$$restProps}>
3
+ <slot />
4
+ </div>
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <span class="strand-container-scale__px" {...$$restProps}>
3
+ <slot />
4
+ </span>
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <div class="strand-container-scale__row" {...$$restProps}>
3
+ <slot />
4
+ </div>
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <div class="strand-container-scale__track" {...$$restProps}>
3
+ <slot />
4
+ </div>
@@ -0,0 +1,9 @@
1
+ /*! Strand Svelte | MIT License | dillingerstaffing.com */
2
+ export { default as ContainerScale } from './ContainerScale.svelte'
3
+ export { default as ContainerScaleRow } from './ContainerScaleRow.svelte'
4
+ export { default as ContainerScaleLabel } from './ContainerScaleLabel.svelte'
5
+ export { default as ContainerScaleCaption } from './ContainerScaleCaption.svelte'
6
+ export { default as ContainerScaleTrack } from './ContainerScaleTrack.svelte'
7
+ export { default as ContainerScaleBar } from './ContainerScaleBar.svelte'
8
+ export { default as ContainerScalePx } from './ContainerScalePx.svelte'
9
+ export { default as ContainerScaleAxis } from './ContainerScaleAxis.svelte'
@@ -0,0 +1,20 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <script lang="ts">
3
+ /** Label column content (mono, uppercase, left) */
4
+ export let label: string
5
+ /** Value column content (sans, blue-midnight, right) */
6
+ export let value: string
7
+ /** When true, applies --status color (teal-vital) to the value */
8
+ export let status: boolean = false
9
+
10
+ $: classes = ['strand-kv', 'strand-kv--editorial'].join(' ')
11
+ $: valueClasses = [
12
+ 'strand-kv__value',
13
+ status ? 'strand-kv__value--status' : '',
14
+ ].filter(Boolean).join(' ')
15
+ </script>
16
+
17
+ <div class={classes} {...$$restProps}>
18
+ <span class="strand-kv__label">{label}</span>
19
+ <span class={valueClasses}>{value}</span>
20
+ </div>
@@ -0,0 +1,32 @@
1
+ /*! Strand Svelte | MIT License | dillingerstaffing.com */
2
+
3
+ import { describe, it, expect } from 'vitest'
4
+ import { render } from '@testing-library/svelte'
5
+ import KvEditorial from './KvEditorial.svelte'
6
+
7
+ describe('KvEditorial', () => {
8
+ it('renders base + --editorial classes', () => {
9
+ const { container } = render(KvEditorial, {
10
+ props: { label: 'A', value: 'B' },
11
+ })
12
+ const el = container.querySelector('.strand-kv')
13
+ expect(el).toBeInTheDocument()
14
+ expect(el).toHaveClass('strand-kv--editorial')
15
+ })
16
+
17
+ it('renders label and value', () => {
18
+ const { getByText } = render(KvEditorial, {
19
+ props: { label: 'Owner', value: 'DS' },
20
+ })
21
+ expect(getByText('Owner')).toBeInTheDocument()
22
+ expect(getByText('DS')).toBeInTheDocument()
23
+ })
24
+
25
+ it('applies --status modifier when status is true', () => {
26
+ const { container } = render(KvEditorial, {
27
+ props: { label: 'A', value: 'B', status: true },
28
+ })
29
+ const valueEl = container.querySelector('.strand-kv__value')
30
+ expect(valueEl).toHaveClass('strand-kv__value--status')
31
+ })
32
+ })
@@ -0,0 +1,2 @@
1
+ /*! Strand Svelte | MIT License | dillingerstaffing.com */
2
+ export { default as KvEditorial } from './KvEditorial.svelte'
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <div class="strand-ref-frame" {...$$restProps}>
3
+ <slot />
4
+ </div>
@@ -0,0 +1,76 @@
1
+ /*! Strand Svelte | MIT License | dillingerstaffing.com */
2
+
3
+ import { describe, it, expect } from 'vitest'
4
+ import { render } from '@testing-library/svelte'
5
+ import LabFrame from './LabFrame.svelte'
6
+ import LabFrameChrome from './LabFrameChrome.svelte'
7
+ import LabFrameDot from './LabFrameDot.svelte'
8
+ import LabFrameTitle from './LabFrameTitle.svelte'
9
+ import LabFrameBody from './LabFrameBody.svelte'
10
+ import LabFrameContent from './LabFrameContent.svelte'
11
+ import LabFrameContentHead from './LabFrameContentHead.svelte'
12
+ import LabFrameActions from './LabFrameActions.svelte'
13
+ import LabFrameOverlay from './LabFrameOverlay.svelte'
14
+ import LabFramePanel from './LabFramePanel.svelte'
15
+ import LabFramePanelHeader from './LabFramePanelHeader.svelte'
16
+ import LabFramePanelTitle from './LabFramePanelTitle.svelte'
17
+ import LabFramePanelClose from './LabFramePanelClose.svelte'
18
+ import LabFramePanelBody from './LabFramePanelBody.svelte'
19
+ import LabFramePanelFooter from './LabFramePanelFooter.svelte'
20
+
21
+ describe('LabFrame family (Svelte)', () => {
22
+ it('LabFrame base class', () => {
23
+ const { container } = render(LabFrame)
24
+ expect(container.querySelector('.strand-ref-frame')).toBeInTheDocument()
25
+ })
26
+
27
+ it('Chrome / Title / Body render', () => {
28
+ expect(render(LabFrameChrome).container.querySelector('.strand-ref-frame__chrome')).toBeInTheDocument()
29
+ expect(render(LabFrameTitle).container.querySelector('span.strand-ref-frame__title')).toBeInTheDocument()
30
+ expect(render(LabFrameBody).container.querySelector('.strand-ref-frame__body')).toBeInTheDocument()
31
+ })
32
+
33
+ it('Dot applies inline background', () => {
34
+ const { container } = render(LabFrameDot, { props: { color: '#ff5f57' } })
35
+ const el = container.querySelector('.strand-ref-frame__dot') as HTMLElement
36
+ expect(el.style.background).toBe('rgb(255, 95, 87)')
37
+ })
38
+
39
+ it('Content aria-hidden when hidden=true', () => {
40
+ const { container } = render(LabFrameContent, { props: { hidden: true } })
41
+ expect(container.querySelector('.strand-ref-frame__content')?.getAttribute('aria-hidden')).toBe('true')
42
+ })
43
+
44
+ it('Content no aria-hidden default', () => {
45
+ const { container } = render(LabFrameContent)
46
+ expect(container.querySelector('.strand-ref-frame__content')?.getAttribute('aria-hidden')).toBeNull()
47
+ })
48
+
49
+ it('Overlay + Panel (role=dialog, aria-modal)', () => {
50
+ expect(render(LabFrameOverlay).container.querySelector('.strand-ref-frame__overlay')).toBeInTheDocument()
51
+ const { container } = render(LabFramePanel)
52
+ const panel = container.querySelector('.strand-ref-frame__panel') as HTMLElement
53
+ expect(panel.getAttribute('role')).toBe('dialog')
54
+ expect(panel.getAttribute('aria-modal')).toBe('true')
55
+ })
56
+
57
+ it('Panel parts render correct tags', () => {
58
+ expect(render(LabFramePanelHeader).container.querySelector('.strand-ref-frame__panel-header')).toBeInTheDocument()
59
+ expect(render(LabFramePanelTitle).container.querySelector('h2.strand-ref-frame__panel-title')).toBeInTheDocument()
60
+ expect(render(LabFramePanelBody).container.querySelector('.strand-ref-frame__panel-body')).toBeInTheDocument()
61
+ expect(render(LabFramePanelFooter).container.querySelector('.strand-ref-frame__panel-footer')).toBeInTheDocument()
62
+ })
63
+
64
+ it('Panel close is a button with default aria-label', () => {
65
+ const { container } = render(LabFramePanelClose)
66
+ const btn = container.querySelector('button.strand-ref-frame__panel-close') as HTMLButtonElement
67
+ expect(btn).toBeInTheDocument()
68
+ expect(btn.type).toBe('button')
69
+ expect(btn.getAttribute('aria-label')).toBe('Close')
70
+ })
71
+
72
+ it('ContentHead + Actions render', () => {
73
+ expect(render(LabFrameContentHead).container.querySelector('.strand-ref-frame__content-head')).toBeInTheDocument()
74
+ expect(render(LabFrameActions).container.querySelector('.strand-ref-frame__actions')).toBeInTheDocument()
75
+ })
76
+ })
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <div class="strand-ref-frame__actions" {...$$restProps}>
3
+ <slot />
4
+ </div>
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <div class="strand-ref-frame__body" {...$$restProps}>
3
+ <slot />
4
+ </div>
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <div class="strand-ref-frame__chrome" {...$$restProps}>
3
+ <slot />
4
+ </div>
@@ -0,0 +1,12 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <script lang="ts">
3
+ export let hidden: boolean = false
4
+ </script>
5
+
6
+ <div
7
+ class="strand-ref-frame__content"
8
+ aria-hidden={hidden ? 'true' : undefined}
9
+ {...$$restProps}
10
+ >
11
+ <slot />
12
+ </div>
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <div class="strand-ref-frame__content-head" {...$$restProps}>
3
+ <slot />
4
+ </div>
@@ -0,0 +1,7 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <script lang="ts">
3
+ export let color: string | undefined = undefined
4
+ $: styleAttr = color ? `background: ${color};` : ''
5
+ </script>
6
+
7
+ <span class="strand-ref-frame__dot" style={styleAttr} {...$$restProps}></span>
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <div class="strand-ref-frame__overlay" {...$$restProps}>
3
+ <slot />
4
+ </div>
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <div class="strand-ref-frame__panel" role="dialog" aria-modal="true" {...$$restProps}>
3
+ <slot />
4
+ </div>
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <div class="strand-ref-frame__panel-body" {...$$restProps}>
3
+ <slot />
4
+ </div>
@@ -0,0 +1,8 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <script lang="ts">
3
+ export let ariaLabel: string = 'Close'
4
+ </script>
5
+
6
+ <button type="button" class="strand-ref-frame__panel-close" aria-label={ariaLabel} {...$$restProps}>
7
+ <slot>×</slot>
8
+ </button>
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <div class="strand-ref-frame__panel-footer" {...$$restProps}>
3
+ <slot />
4
+ </div>
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <div class="strand-ref-frame__panel-header" {...$$restProps}>
3
+ <slot />
4
+ </div>
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <h2 class="strand-ref-frame__panel-title" {...$$restProps}>
3
+ <slot />
4
+ </h2>
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <span class="strand-ref-frame__title" {...$$restProps}>
3
+ <slot />
4
+ </span>
@@ -0,0 +1,16 @@
1
+ /*! Strand Svelte | MIT License | dillingerstaffing.com */
2
+ export { default as LabFrame } from './LabFrame.svelte'
3
+ export { default as LabFrameChrome } from './LabFrameChrome.svelte'
4
+ export { default as LabFrameDot } from './LabFrameDot.svelte'
5
+ export { default as LabFrameTitle } from './LabFrameTitle.svelte'
6
+ export { default as LabFrameBody } from './LabFrameBody.svelte'
7
+ export { default as LabFrameContent } from './LabFrameContent.svelte'
8
+ export { default as LabFrameContentHead } from './LabFrameContentHead.svelte'
9
+ export { default as LabFrameActions } from './LabFrameActions.svelte'
10
+ export { default as LabFrameOverlay } from './LabFrameOverlay.svelte'
11
+ export { default as LabFramePanel } from './LabFramePanel.svelte'
12
+ export { default as LabFramePanelHeader } from './LabFramePanelHeader.svelte'
13
+ export { default as LabFramePanelTitle } from './LabFramePanelTitle.svelte'
14
+ export { default as LabFramePanelClose } from './LabFramePanelClose.svelte'
15
+ export { default as LabFramePanelBody } from './LabFramePanelBody.svelte'
16
+ export { default as LabFramePanelFooter } from './LabFramePanelFooter.svelte'
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <div class="strand-ref-glass-panel" {...$$restProps}>
3
+ <slot />
4
+ </div>
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <div class="strand-ref-glass-stage" {...$$restProps}>
3
+ <slot />
4
+ </div>
@@ -0,0 +1,18 @@
1
+ /*! Strand Svelte | MIT License | dillingerstaffing.com */
2
+
3
+ import { describe, it, expect } from 'vitest'
4
+ import { render } from '@testing-library/svelte'
5
+ import LabGlassStage from './LabGlassStage.svelte'
6
+ import LabGlassPanel from './LabGlassPanel.svelte'
7
+
8
+ describe('LabGlassStage (Svelte)', () => {
9
+ it('Stage base class', () => {
10
+ const { container } = render(LabGlassStage)
11
+ expect(container.querySelector('.strand-ref-glass-stage')).toBeInTheDocument()
12
+ })
13
+
14
+ it('Panel base class', () => {
15
+ const { container } = render(LabGlassPanel)
16
+ expect(container.querySelector('.strand-ref-glass-panel')).toBeInTheDocument()
17
+ })
18
+ })
@@ -0,0 +1,3 @@
1
+ /*! Strand Svelte | MIT License | dillingerstaffing.com */
2
+ export { default as LabGlassStage } from './LabGlassStage.svelte'
3
+ export { default as LabGlassPanel } from './LabGlassPanel.svelte'
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <div class="strand-ref-reveal-line" {...$$restProps}>
3
+ <slot />
4
+ </div>
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <div class="strand-ref-reveal-stage" {...$$restProps}>
3
+ <slot />
4
+ </div>
@@ -0,0 +1,18 @@
1
+ /*! Strand Svelte | MIT License | dillingerstaffing.com */
2
+
3
+ import { describe, it, expect } from 'vitest'
4
+ import { render } from '@testing-library/svelte'
5
+ import LabRevealStage from './LabRevealStage.svelte'
6
+ import LabRevealLine from './LabRevealLine.svelte'
7
+
8
+ describe('LabRevealStage (Svelte)', () => {
9
+ it('Stage base class', () => {
10
+ const { container } = render(LabRevealStage)
11
+ expect(container.querySelector('.strand-ref-reveal-stage')).toBeInTheDocument()
12
+ })
13
+
14
+ it('Line base class', () => {
15
+ const { container } = render(LabRevealLine)
16
+ expect(container.querySelector('.strand-ref-reveal-line')).toBeInTheDocument()
17
+ })
18
+ })
@@ -0,0 +1,3 @@
1
+ /*! Strand Svelte | MIT License | dillingerstaffing.com */
2
+ export { default as LabRevealStage } from './LabRevealStage.svelte'
3
+ export { default as LabRevealLine } from './LabRevealLine.svelte'
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <div class="strand-ref-shell__brand" {...$$restProps}>
3
+ <slot />
4
+ </div>
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <div class="strand-ref-shell__brand-mark" {...$$restProps}>
3
+ <slot />
4
+ </div>
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <span class="strand-ref-shell__brand-sub" {...$$restProps}>
3
+ <slot />
4
+ </span>
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <span class="strand-ref-shell__brand-title" {...$$restProps}>
3
+ <slot />
4
+ </span>
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <div class="strand-ref-example" {...$$restProps}>
3
+ <slot />
4
+ </div>
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <p class="strand-ref-example__caption" {...$$restProps}>
3
+ <slot />
4
+ </p>
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <span class="strand-ref-example__code" {...$$restProps}>
3
+ <slot />
4
+ </span>
@@ -0,0 +1,15 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <script lang="ts">
3
+ export let padNone: boolean = false
4
+ export let recessed: boolean = false
5
+
6
+ $: classes = [
7
+ 'strand-ref-example__demo',
8
+ padNone ? 'strand-ref-example__demo--pad-none' : '',
9
+ recessed ? 'strand-ref-example__demo--recessed' : '',
10
+ ].filter(Boolean).join(' ')
11
+ </script>
12
+
13
+ <div class={classes} {...$$restProps}>
14
+ <slot />
15
+ </div>
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <span class="strand-ref-example__label" {...$$restProps}>
3
+ <slot />
4
+ </span>
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <div class="strand-ref-example__meta" {...$$restProps}>
3
+ <slot />
4
+ </div>
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <header class="strand-ref-header" {...$$restProps}>
3
+ <slot />
4
+ </header>
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <p class="strand-ref-header__lead" {...$$restProps}>
3
+ <slot />
4
+ </p>
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <div class="strand-ref-header__meta" {...$$restProps}>
3
+ <slot />
4
+ </div>
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <div class="strand-ref-header__meta-item" {...$$restProps}>
3
+ <slot />
4
+ </div>
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <span class="strand-ref-header__meta-label" {...$$restProps}>
3
+ <slot />
4
+ </span>
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <span class="strand-ref-header__meta-value" {...$$restProps}>
3
+ <slot />
4
+ </span>
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <h1 class="strand-ref-header__title" {...$$restProps}>
3
+ <slot />
4
+ </h1>
@@ -0,0 +1,4 @@
1
+ <!--! Strand Svelte | MIT License | dillingerstaffing.com -->
2
+ <main class="strand-ref-shell__main" {...$$restProps}>
3
+ <slot />
4
+ </main>