@sovereignfs/ui 0.40.0 → 0.45.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 (186) hide show
  1. package/dist/Accordion.module.css +3 -0
  2. package/dist/Alert.module.css +62 -0
  3. package/dist/AspectRatio.module.css +15 -0
  4. package/dist/Badge.module.css +75 -9
  5. package/dist/BalanceChip.module.css +32 -0
  6. package/dist/Breadcrumb.module.css +49 -0
  7. package/dist/Button.module.css +12 -3
  8. package/dist/ButtonGroup.module.css +29 -0
  9. package/dist/Card.module.css +6 -0
  10. package/dist/Checkbox.module.css +3 -1
  11. package/dist/Collapsible.module.css +70 -0
  12. package/dist/Combobox.module.css +122 -0
  13. package/dist/Command.module.css +80 -0
  14. package/dist/ConfirmDialog.module.css +5 -1
  15. package/dist/DataTable.module.css +28 -0
  16. package/dist/DatePicker.module.css +6 -2
  17. package/dist/Dialog.module.css +3 -0
  18. package/dist/HoverCard.module.css +3 -0
  19. package/dist/Input.module.css +6 -1
  20. package/dist/Item.module.css +70 -0
  21. package/dist/Kbd.module.css +14 -0
  22. package/dist/Label.module.css +11 -0
  23. package/dist/Marker.module.css +33 -0
  24. package/dist/MemberMultiSelect.module.css +27 -0
  25. package/dist/Menu.module.css +8 -1
  26. package/dist/Message.module.css +99 -0
  27. package/dist/MessageScroller.module.css +54 -0
  28. package/dist/NavigationMenu.module.css +53 -0
  29. package/dist/Pagination.module.css +98 -0
  30. package/dist/Progress.module.css +20 -0
  31. package/dist/RadioGroup.module.css +88 -0
  32. package/dist/Resizable.module.css +70 -0
  33. package/dist/ScrollArea.module.css +20 -0
  34. package/dist/Select.module.css +7 -3
  35. package/dist/Slider.module.css +95 -0
  36. package/dist/Table.module.css +45 -0
  37. package/dist/Tabs.module.css +6 -1
  38. package/dist/Toggle.module.css +6 -1
  39. package/dist/Typography.module.css +47 -0
  40. package/dist/index.d.ts +698 -5
  41. package/dist/index.js +1938 -482
  42. package/dist/tokens/primitives.css +22 -8
  43. package/package.json +1 -1
  44. package/src/components/Accordion/Accordion.module.css +3 -0
  45. package/src/components/Accordion/Accordion.stories.tsx +110 -0
  46. package/src/components/Accordion/Accordion.tsx +53 -0
  47. package/src/components/Accordion/__tests__/Accordion.test.tsx +61 -0
  48. package/src/components/Alert/Alert.module.css +62 -0
  49. package/src/components/Alert/Alert.stories.tsx +96 -0
  50. package/src/components/Alert/Alert.tsx +58 -0
  51. package/src/components/Alert/__tests__/Alert.test.tsx +75 -0
  52. package/src/components/AspectRatio/AspectRatio.module.css +15 -0
  53. package/src/components/AspectRatio/AspectRatio.stories.tsx +78 -0
  54. package/src/components/AspectRatio/AspectRatio.tsx +21 -0
  55. package/src/components/AspectRatio/__tests__/AspectRatio.test.tsx +27 -0
  56. package/src/components/Badge/Badge.module.css +75 -9
  57. package/src/components/Badge/Badge.stories.tsx +109 -1
  58. package/src/components/Badge/Badge.tsx +30 -2
  59. package/src/components/Badge/__tests__/Badge.test.tsx +26 -2
  60. package/src/components/BalanceChip/BalanceChip.module.css +32 -0
  61. package/src/components/BalanceChip/BalanceChip.stories.tsx +45 -0
  62. package/src/components/BalanceChip/BalanceChip.tsx +33 -0
  63. package/src/components/Breadcrumb/Breadcrumb.module.css +49 -0
  64. package/src/components/Breadcrumb/Breadcrumb.stories.tsx +47 -0
  65. package/src/components/Breadcrumb/Breadcrumb.tsx +57 -0
  66. package/src/components/Breadcrumb/__tests__/Breadcrumb.test.tsx +52 -0
  67. package/src/components/Button/Button.module.css +12 -3
  68. package/src/components/Button/Button.stories.tsx +3 -2
  69. package/src/components/Button/Button.tsx +1 -1
  70. package/src/components/Button/__tests__/Button.test.tsx +10 -0
  71. package/src/components/ButtonGroup/ButtonGroup.module.css +29 -0
  72. package/src/components/ButtonGroup/ButtonGroup.stories.tsx +57 -0
  73. package/src/components/ButtonGroup/ButtonGroup.tsx +27 -0
  74. package/src/components/ButtonGroup/__tests__/ButtonGroup.test.tsx +29 -0
  75. package/src/components/Card/Card.module.css +6 -0
  76. package/src/components/Checkbox/Checkbox.module.css +3 -1
  77. package/src/components/Collapsible/Collapsible.module.css +70 -0
  78. package/src/components/Collapsible/Collapsible.stories.tsx +62 -0
  79. package/src/components/Collapsible/Collapsible.tsx +66 -0
  80. package/src/components/Collapsible/__tests__/Collapsible.test.tsx +71 -0
  81. package/src/components/Combobox/Combobox.module.css +122 -0
  82. package/src/components/Combobox/Combobox.stories.tsx +79 -0
  83. package/src/components/Combobox/Combobox.tsx +186 -0
  84. package/src/components/Combobox/__tests__/Combobox.test.tsx +158 -0
  85. package/src/components/Command/Command.module.css +80 -0
  86. package/src/components/Command/Command.stories.tsx +104 -0
  87. package/src/components/Command/Command.tsx +168 -0
  88. package/src/components/Command/__tests__/Command.test.tsx +162 -0
  89. package/src/components/ConfirmDialog/ConfirmDialog.module.css +5 -1
  90. package/src/components/ContextMenu/ContextMenu.stories.tsx +81 -0
  91. package/src/components/ContextMenu/ContextMenu.tsx +100 -0
  92. package/src/components/ContextMenu/__tests__/ContextMenu.test.tsx +87 -0
  93. package/src/components/CurrencyInput/CurrencyInput.stories.tsx +50 -0
  94. package/src/components/CurrencyInput/CurrencyInput.tsx +60 -0
  95. package/src/components/DataTable/DataTable.module.css +28 -0
  96. package/src/components/DataTable/DataTable.stories.tsx +74 -0
  97. package/src/components/DataTable/DataTable.tsx +154 -0
  98. package/src/components/DataTable/__tests__/DataTable.test.tsx +123 -0
  99. package/src/components/DatePicker/DatePicker.module.css +6 -2
  100. package/src/components/Dialog/Dialog.module.css +3 -0
  101. package/src/components/HoverCard/HoverCard.module.css +3 -0
  102. package/src/components/HoverCard/HoverCard.stories.tsx +66 -0
  103. package/src/components/HoverCard/HoverCard.tsx +111 -0
  104. package/src/components/HoverCard/__tests__/HoverCard.test.tsx +99 -0
  105. package/src/components/Icon/icons/circle-check.tsx +21 -0
  106. package/src/components/Icon/icons/circle-x.tsx +22 -0
  107. package/src/components/Icon/icons/index.ts +8 -0
  108. package/src/components/Input/Input.module.css +6 -1
  109. package/src/components/Item/Item.module.css +70 -0
  110. package/src/components/Item/Item.stories.tsx +62 -0
  111. package/src/components/Item/Item.tsx +54 -0
  112. package/src/components/Item/__tests__/Item.test.tsx +39 -0
  113. package/src/components/Kbd/Kbd.module.css +14 -0
  114. package/src/components/Kbd/Kbd.stories.tsx +32 -0
  115. package/src/components/Kbd/Kbd.tsx +12 -0
  116. package/src/components/Kbd/__tests__/Kbd.test.tsx +14 -0
  117. package/src/components/Label/Label.module.css +11 -0
  118. package/src/components/Label/Label.stories.tsx +40 -0
  119. package/src/components/Label/Label.tsx +24 -0
  120. package/src/components/Label/__tests__/Label.test.tsx +32 -0
  121. package/src/components/Marker/Marker.module.css +33 -0
  122. package/src/components/Marker/Marker.stories.tsx +39 -0
  123. package/src/components/Marker/Marker.tsx +34 -0
  124. package/src/components/Marker/__tests__/Marker.test.tsx +23 -0
  125. package/src/components/MemberMultiSelect/MemberMultiSelect.module.css +27 -0
  126. package/src/components/MemberMultiSelect/MemberMultiSelect.stories.tsx +74 -0
  127. package/src/components/MemberMultiSelect/MemberMultiSelect.tsx +67 -0
  128. package/src/components/Menu/Menu.module.css +8 -1
  129. package/src/components/Menu/Menu.tsx +30 -8
  130. package/src/components/Menubar/Menubar.stories.tsx +52 -0
  131. package/src/components/Menubar/Menubar.tsx +42 -0
  132. package/src/components/Menubar/__tests__/Menubar.test.tsx +45 -0
  133. package/src/components/Message/Message.module.css +99 -0
  134. package/src/components/Message/Message.stories.tsx +79 -0
  135. package/src/components/Message/Message.tsx +41 -0
  136. package/src/components/Message/__tests__/Message.test.tsx +46 -0
  137. package/src/components/MessageScroller/MessageScroller.module.css +54 -0
  138. package/src/components/MessageScroller/MessageScroller.stories.tsx +84 -0
  139. package/src/components/MessageScroller/MessageScroller.tsx +72 -0
  140. package/src/components/MessageScroller/__tests__/MessageScroller.test.tsx +105 -0
  141. package/src/components/NavigationMenu/NavigationMenu.module.css +53 -0
  142. package/src/components/NavigationMenu/NavigationMenu.stories.tsx +58 -0
  143. package/src/components/NavigationMenu/NavigationMenu.tsx +125 -0
  144. package/src/components/NavigationMenu/__tests__/NavigationMenu.test.tsx +93 -0
  145. package/src/components/Pagination/Pagination.module.css +98 -0
  146. package/src/components/Pagination/Pagination.stories.tsx +49 -0
  147. package/src/components/Pagination/Pagination.tsx +87 -0
  148. package/src/components/Pagination/__tests__/Pagination.test.tsx +56 -0
  149. package/src/components/Progress/Progress.module.css +20 -0
  150. package/src/components/Progress/Progress.stories.tsx +40 -0
  151. package/src/components/Progress/Progress.tsx +35 -0
  152. package/src/components/Progress/__tests__/Progress.test.tsx +31 -0
  153. package/src/components/RadioGroup/RadioGroup.module.css +88 -0
  154. package/src/components/RadioGroup/RadioGroup.stories.tsx +69 -0
  155. package/src/components/RadioGroup/RadioGroup.tsx +99 -0
  156. package/src/components/RadioGroup/__tests__/RadioGroup.test.tsx +59 -0
  157. package/src/components/Resizable/Resizable.module.css +70 -0
  158. package/src/components/Resizable/Resizable.stories.tsx +82 -0
  159. package/src/components/Resizable/Resizable.tsx +313 -0
  160. package/src/components/Resizable/__tests__/Resizable.test.tsx +128 -0
  161. package/src/components/ScrollArea/ScrollArea.module.css +20 -0
  162. package/src/components/ScrollArea/ScrollArea.stories.tsx +57 -0
  163. package/src/components/ScrollArea/ScrollArea.tsx +27 -0
  164. package/src/components/ScrollArea/__tests__/ScrollArea.test.tsx +39 -0
  165. package/src/components/Select/Select.module.css +7 -3
  166. package/src/components/Slider/Slider.module.css +95 -0
  167. package/src/components/Slider/Slider.stories.tsx +64 -0
  168. package/src/components/Slider/Slider.tsx +77 -0
  169. package/src/components/Slider/__tests__/Slider.test.tsx +45 -0
  170. package/src/components/SplitMethodSelector/SplitMethodSelector.stories.tsx +33 -0
  171. package/src/components/SplitMethodSelector/SplitMethodSelector.tsx +43 -0
  172. package/src/components/Table/Table.module.css +45 -0
  173. package/src/components/Table/Table.stories.tsx +125 -0
  174. package/src/components/Table/Table.tsx +51 -0
  175. package/src/components/Table/__tests__/Table.test.tsx +50 -0
  176. package/src/components/Tabs/Tabs.module.css +6 -1
  177. package/src/components/Toggle/Toggle.module.css +6 -1
  178. package/src/components/Typography/Typography.module.css +47 -0
  179. package/src/components/Typography/Typography.stories.tsx +62 -0
  180. package/src/components/Typography/Typography.tsx +30 -0
  181. package/src/components/Typography/__tests__/Typography.test.tsx +34 -0
  182. package/src/index.ts +92 -1
  183. package/src/stories/DesignSystemOverview.stories.tsx +706 -2
  184. package/src/stories/MobilePatterns.stories.tsx +8 -2
  185. package/src/stories/TokenGallery.stories.tsx +112 -16
  186. package/src/tokens/primitives.css +22 -8
@@ -8,8 +8,11 @@
8
8
  .select {
9
9
  display: block;
10
10
  width: 100%;
11
- /* Right-pad to clear the custom chevron */
12
- padding: var(--sv-space-2) var(--sv-space-8) var(--sv-space-2) var(--sv-space-3);
11
+ /* 36px rendered height. Explicit height + border-box, same technique as
12
+ Input. Right-pad to clear the custom chevron. */
13
+ height: 36px;
14
+ box-sizing: border-box;
15
+ padding: 4px var(--sv-space-8) 4px var(--sv-space-3);
13
16
  font-family: var(--sv-font-family);
14
17
  font-size: var(--sv-font-size-sm);
15
18
  line-height: 1.5;
@@ -25,8 +28,9 @@
25
28
  box-shadow 0.15s ease;
26
29
  }
27
30
 
28
- /* sm — compact for table cells and inline controls */
31
+ /* sm — compact for table cells and inline controls. 32px height. */
29
32
  .sm .select {
33
+ height: 32px;
30
34
  padding: 2px var(--sv-space-6) 2px var(--sv-space-2);
31
35
  font-size: var(--sv-font-size-sm);
32
36
  line-height: 1.4;
@@ -0,0 +1,95 @@
1
+ .root {
2
+ display: flex;
3
+ flex-direction: column;
4
+ gap: var(--sv-space-2);
5
+ }
6
+
7
+ .label {
8
+ font-size: var(--sv-font-size-sm);
9
+ color: var(--sv-color-text-primary);
10
+ }
11
+
12
+ .slider {
13
+ appearance: none;
14
+ width: 100%;
15
+ height: 20px;
16
+ background: transparent;
17
+ cursor: pointer;
18
+ margin: 0;
19
+ }
20
+
21
+ /* Expand the vertical hit area for touch dragging without thickening the
22
+ visible track — same rationale as Button/Checkbox's touch-target
23
+ expansion, gated to the primary pointer. */
24
+ @media (pointer: coarse) {
25
+ .slider {
26
+ height: var(--sv-touch-target-min, 44px);
27
+ }
28
+ }
29
+
30
+ .slider:disabled {
31
+ opacity: 0.5;
32
+ cursor: not-allowed;
33
+ }
34
+
35
+ .slider:focus-visible {
36
+ outline: 2px solid var(--sv-color-focus-ring);
37
+ outline-offset: 2px;
38
+ }
39
+
40
+ /* Track — WebKit/Blink. The filled portion is a gradient computed from the
41
+ --slider-fill custom property the component sets inline; no JS-measured
42
+ pixel math, just a CSS variable driving a hard color stop. */
43
+ .slider::-webkit-slider-runnable-track {
44
+ height: 4px;
45
+ border-radius: var(--sv-radius-full);
46
+ background: linear-gradient(
47
+ to right,
48
+ var(--sv-color-accent) var(--slider-fill),
49
+ var(--sv-color-border-strong) var(--slider-fill)
50
+ );
51
+ }
52
+
53
+ .slider::-webkit-slider-thumb {
54
+ appearance: none;
55
+ width: 16px;
56
+ height: 16px;
57
+ margin-top: -6px;
58
+ border-radius: var(--sv-radius-full);
59
+ background: var(--sv-color-accent);
60
+ box-shadow: var(--sv-shadow-control);
61
+ cursor: pointer;
62
+ }
63
+
64
+ .slider:disabled::-webkit-slider-thumb {
65
+ cursor: not-allowed;
66
+ }
67
+
68
+ /* Track — Firefox. Separate track/progress pseudo-elements instead of a
69
+ gradient — Firefox renders the filled portion natively via
70
+ ::-moz-range-progress. */
71
+ .slider::-moz-range-track {
72
+ height: 4px;
73
+ border-radius: var(--sv-radius-full);
74
+ background: var(--sv-color-border-strong);
75
+ }
76
+
77
+ .slider::-moz-range-progress {
78
+ height: 4px;
79
+ border-radius: var(--sv-radius-full);
80
+ background: var(--sv-color-accent);
81
+ }
82
+
83
+ .slider::-moz-range-thumb {
84
+ width: 16px;
85
+ height: 16px;
86
+ border: none;
87
+ border-radius: var(--sv-radius-full);
88
+ background: var(--sv-color-accent);
89
+ box-shadow: var(--sv-shadow-control);
90
+ cursor: pointer;
91
+ }
92
+
93
+ .slider:disabled::-moz-range-thumb {
94
+ cursor: not-allowed;
95
+ }
@@ -0,0 +1,45 @@
1
+ /* Horizontal scroll container — masked-edge fade + hidden scrollbar, same
2
+ technique as NavTabs. Always active (not gated to a narrow viewport):
3
+ unlike NavTabs' item count, a table's column count is content-driven and
4
+ can overflow at any screen size. */
5
+ .scrollContainer {
6
+ overflow-x: auto;
7
+ scrollbar-width: none;
8
+ -webkit-overflow-scrolling: touch;
9
+ mask-image: linear-gradient(to right, black calc(100% - 32px), transparent 100%);
10
+ }
11
+
12
+ .scrollContainer::-webkit-scrollbar {
13
+ display: none;
14
+ }
15
+
16
+ .table {
17
+ width: 100%;
18
+ border-collapse: collapse;
19
+ font-size: var(--sv-font-size-sm);
20
+ }
21
+
22
+ .head .row {
23
+ border-bottom: 1px solid var(--sv-color-border-strong);
24
+ }
25
+
26
+ .body .row {
27
+ border-bottom: 1px solid var(--sv-color-border);
28
+ }
29
+
30
+ .body .row:last-child {
31
+ border-bottom: none;
32
+ }
33
+
34
+ .th {
35
+ padding: var(--sv-space-2) var(--sv-space-3);
36
+ text-align: left;
37
+ font-weight: var(--sv-font-weight-semibold);
38
+ color: var(--sv-color-text-muted);
39
+ white-space: nowrap;
40
+ }
41
+
42
+ .td {
43
+ padding: var(--sv-space-2) var(--sv-space-3);
44
+ color: var(--sv-color-text-primary);
45
+ }
@@ -12,7 +12,12 @@
12
12
 
13
13
  .tab {
14
14
  flex-shrink: 0;
15
- padding: var(--sv-space-2) var(--sv-space-4);
15
+ /* 36px rendered height, matching this scale's other 36px controls (Input,
16
+ Select). Vertical padding hardcoded to hit the exact height, same
17
+ reasoning as Button — accounting for the 2px border-bottom below,
18
+ which (content-box) adds to the rendered height on top of font-size +
19
+ padding. */
20
+ padding: 10px var(--sv-space-4);
16
21
  border: none;
17
22
  border-bottom: 2px solid transparent;
18
23
  /* Negative margin pulls the 2px border flush with the tablist border-bottom */
@@ -1,5 +1,10 @@
1
1
  .track {
2
- /* 38×22px pill — spec dimensions */
2
+ /* 38×22px pill — spec dimensions. Sizing audit: despite the component
3
+ name, this renders as a binary pill switch (role="switch"), not a
4
+ pressable toggle button — reviewed against this scale's other compact
5
+ controls with that in mind. Kept dimensions unchanged, generously
6
+ sized for touch-friendliness. (The name vs. actual behavior mismatch
7
+ is a separate, pre-existing naming note, not addressed here.) */
3
8
  display: inline-flex;
4
9
  align-items: center;
5
10
  width: 38px;
@@ -0,0 +1,47 @@
1
+ .h1 {
2
+ margin: 0;
3
+ font-size: var(--sv-font-size-2xl);
4
+ font-weight: var(--sv-font-weight-semibold);
5
+ color: var(--sv-color-text-primary);
6
+ }
7
+
8
+ .h2 {
9
+ margin: 0;
10
+ font-size: var(--sv-font-size-xl);
11
+ font-weight: var(--sv-font-weight-semibold);
12
+ color: var(--sv-color-text-primary);
13
+ }
14
+
15
+ .h3 {
16
+ margin: 0;
17
+ font-size: var(--sv-font-size-lg);
18
+ font-weight: var(--sv-font-weight-semibold);
19
+ color: var(--sv-color-text-primary);
20
+ }
21
+
22
+ .h4 {
23
+ margin: 0;
24
+ font-size: var(--sv-font-size-md);
25
+ font-weight: var(--sv-font-weight-semibold);
26
+ color: var(--sv-color-text-primary);
27
+ }
28
+
29
+ .body {
30
+ margin: 0;
31
+ font-size: var(--sv-font-size-sm);
32
+ color: var(--sv-color-text-primary);
33
+ }
34
+
35
+ .caption {
36
+ margin: 0;
37
+ font-size: var(--sv-font-size-caption);
38
+ color: var(--sv-color-text-muted);
39
+ }
40
+
41
+ .label {
42
+ font-size: var(--sv-font-size-label);
43
+ font-weight: var(--sv-font-weight-semibold);
44
+ color: var(--sv-color-text-muted);
45
+ text-transform: uppercase;
46
+ letter-spacing: 0.04em;
47
+ }