@sewadah/selaras 0.2.0 → 0.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. package/README.md +36 -7
  2. package/dist/module.json +1 -1
  3. package/dist/module.mjs +31 -15
  4. package/dist/runtime/components/Autocomplete.vue +3 -1
  5. package/dist/runtime/components/Badge.d.vue.ts +1 -1
  6. package/dist/runtime/components/Badge.vue.d.ts +1 -1
  7. package/dist/runtime/components/Calendar.d.vue.ts +69 -0
  8. package/dist/runtime/components/Calendar.vue +163 -0
  9. package/dist/runtime/components/Calendar.vue.d.ts +69 -0
  10. package/dist/runtime/components/Callout.vue +12 -1
  11. package/dist/runtime/components/CodeGroup.vue +13 -3
  12. package/dist/runtime/components/CodeTree.d.vue.ts +2 -0
  13. package/dist/runtime/components/CodeTree.vue +52 -1
  14. package/dist/runtime/components/CodeTree.vue.d.ts +2 -0
  15. package/dist/runtime/components/ColorPicker.d.vue.ts +8 -0
  16. package/dist/runtime/components/ColorPicker.vue +66 -45
  17. package/dist/runtime/components/ColorPicker.vue.d.ts +8 -0
  18. package/dist/runtime/components/Column.js +1 -1
  19. package/dist/runtime/components/CommandPalette.d.vue.ts +3 -1
  20. package/dist/runtime/components/CommandPalette.vue +5 -0
  21. package/dist/runtime/components/CommandPalette.vue.d.ts +3 -1
  22. package/dist/runtime/components/ContentNavigation.d.vue.ts +8 -1
  23. package/dist/runtime/components/ContentNavigation.vue +9 -2
  24. package/dist/runtime/components/ContentNavigation.vue.d.ts +8 -1
  25. package/dist/runtime/components/ContentToc.vue +14 -7
  26. package/dist/runtime/components/ContextMenu.d.vue.ts +8 -1
  27. package/dist/runtime/components/ContextMenu.vue +16 -4
  28. package/dist/runtime/components/ContextMenu.vue.d.ts +8 -1
  29. package/dist/runtime/components/DatePicker.d.vue.ts +10 -3
  30. package/dist/runtime/components/DatePicker.vue +24 -16
  31. package/dist/runtime/components/DatePicker.vue.d.ts +10 -3
  32. package/dist/runtime/components/Dropdown.d.vue.ts +33 -6
  33. package/dist/runtime/components/Dropdown.vue +143 -11
  34. package/dist/runtime/components/Dropdown.vue.d.ts +33 -6
  35. package/dist/runtime/components/FileTree.d.vue.ts +2 -0
  36. package/dist/runtime/components/FileTree.vue +8 -4
  37. package/dist/runtime/components/FileTree.vue.d.ts +2 -0
  38. package/dist/runtime/components/FileUpload.vue +1 -1
  39. package/dist/runtime/components/FormField.d.vue.ts +4 -0
  40. package/dist/runtime/components/FormField.vue +19 -4
  41. package/dist/runtime/components/FormField.vue.d.ts +4 -0
  42. package/dist/runtime/components/Input.vue +3 -2
  43. package/dist/runtime/components/Kbd.vue +12 -2
  44. package/dist/runtime/components/NavigationMenu.d.vue.ts +10 -10
  45. package/dist/runtime/components/NavigationMenu.vue +13 -7
  46. package/dist/runtime/components/NavigationMenu.vue.d.ts +10 -10
  47. package/dist/runtime/components/NavigationMenuAccordionItem.vue +5 -1
  48. package/dist/runtime/components/NavigationMenuFlyoutList.vue +7 -4
  49. package/dist/runtime/components/PinInput.vue +1 -1
  50. package/dist/runtime/components/Popover.d.vue.ts +8 -2
  51. package/dist/runtime/components/Popover.vue +9 -4
  52. package/dist/runtime/components/Popover.vue.d.ts +8 -2
  53. package/dist/runtime/components/ProsePre.d.vue.ts +6 -2
  54. package/dist/runtime/components/ProsePre.vue +11 -4
  55. package/dist/runtime/components/ProsePre.vue.d.ts +6 -2
  56. package/dist/runtime/components/Select.vue +3 -1
  57. package/dist/runtime/components/SplitterPanel.d.vue.ts +2 -2
  58. package/dist/runtime/components/SplitterPanel.vue.d.ts +2 -2
  59. package/dist/runtime/components/Table.vue +95 -26
  60. package/dist/runtime/components/Tabs.d.vue.ts +44 -4
  61. package/dist/runtime/components/Tabs.vue +171 -18
  62. package/dist/runtime/components/Tabs.vue.d.ts +44 -4
  63. package/dist/runtime/components/Textarea.vue +3 -2
  64. package/dist/runtime/components/Timeline.d.vue.ts +19 -0
  65. package/dist/runtime/components/Timeline.vue +99 -0
  66. package/dist/runtime/components/Timeline.vue.d.ts +19 -0
  67. package/dist/runtime/components/Toast.d.vue.ts +10 -1
  68. package/dist/runtime/components/Toast.vue +94 -8
  69. package/dist/runtime/components/Toast.vue.d.ts +10 -1
  70. package/dist/runtime/components/Tooltip.d.vue.ts +8 -2
  71. package/dist/runtime/components/Tooltip.vue +9 -4
  72. package/dist/runtime/components/Tooltip.vue.d.ts +8 -2
  73. package/dist/runtime/composables/use-form-field.d.ts +1 -0
  74. package/dist/runtime/composables/use-table.d.ts +3 -0
  75. package/dist/runtime/composables/use-table.js +10 -4
  76. package/dist/runtime/composables/use-toast.js +5 -1
  77. package/dist/runtime/default-colors.css +1 -1
  78. package/dist/runtime/directives/hotkey.d.ts +13 -0
  79. package/dist/runtime/directives/hotkey.js +107 -0
  80. package/dist/runtime/directives/index.d.ts +2 -0
  81. package/dist/runtime/directives/index.js +2 -0
  82. package/dist/runtime/directives/mask.d.ts +30 -0
  83. package/dist/runtime/directives/mask.js +165 -0
  84. package/dist/runtime/internal/ComboboxSelectBase.d.vue.ts +29 -25
  85. package/dist/runtime/internal/ComboboxSelectBase.vue +104 -20
  86. package/dist/runtime/internal/ComboboxSelectBase.vue.d.ts +29 -25
  87. package/dist/runtime/internal/ComboboxSelectBody.d.vue.ts +16 -11
  88. package/dist/runtime/internal/ComboboxSelectBody.vue +49 -10
  89. package/dist/runtime/internal/ComboboxSelectBody.vue.d.ts +16 -11
  90. package/dist/runtime/internal/DatePickerCalendarBody.vue +1 -1
  91. package/dist/runtime/internal/DatePickerRangeCalendarBody.vue +1 -1
  92. package/dist/runtime/internal/ShortcutHint.d.vue.ts +6 -0
  93. package/dist/runtime/internal/ShortcutHint.vue +13 -0
  94. package/dist/runtime/internal/ShortcutHint.vue.d.ts +6 -0
  95. package/dist/runtime/internal/ToastItemRenderer.d.vue.ts +9 -1
  96. package/dist/runtime/internal/ToastItemRenderer.vue +55 -8
  97. package/dist/runtime/internal/ToastItemRenderer.vue.d.ts +9 -1
  98. package/dist/runtime/internal/combobox-select.js +2 -1
  99. package/dist/runtime/internal/programmatic-services.d.ts +2 -0
  100. package/dist/runtime/internal/programmatic-services.js +8 -0
  101. package/dist/runtime/internal/toast-stack.d.ts +36 -0
  102. package/dist/runtime/internal/toast-stack.js +36 -0
  103. package/dist/runtime/structural.css +1 -1
  104. package/dist/runtime/table.d.ts +1 -1
  105. package/dist/runtime/theme/alert-dialog.js +1 -1
  106. package/dist/runtime/theme/avatar.js +7 -7
  107. package/dist/runtime/theme/badge.js +2 -2
  108. package/dist/runtime/theme/calendar.d.ts +86 -0
  109. package/dist/runtime/theme/calendar.js +19 -0
  110. package/dist/runtime/theme/callout.d.ts +0 -12
  111. package/dist/runtime/theme/callout.js +8 -8
  112. package/dist/runtime/theme/checkbox.js +1 -1
  113. package/dist/runtime/theme/code-tree.js +1 -1
  114. package/dist/runtime/theme/command-palette.js +1 -1
  115. package/dist/runtime/theme/content-navigation.d.ts +3 -0
  116. package/dist/runtime/theme/content-navigation.js +1 -0
  117. package/dist/runtime/theme/date-picker.js +1 -1
  118. package/dist/runtime/theme/drawer.js +1 -1
  119. package/dist/runtime/theme/dropdown.d.ts +21 -0
  120. package/dist/runtime/theme/dropdown.js +15 -2
  121. package/dist/runtime/theme/file-tree.js +1 -1
  122. package/dist/runtime/theme/file-upload.js +2 -2
  123. package/dist/runtime/theme/form-field.d.ts +18 -0
  124. package/dist/runtime/theme/form-field.js +6 -1
  125. package/dist/runtime/theme/icon.js +1 -1
  126. package/dist/runtime/theme/input-number.js +1 -1
  127. package/dist/runtime/theme/input.js +1 -1
  128. package/dist/runtime/theme/modal.js +1 -1
  129. package/dist/runtime/theme/pin-input.js +1 -1
  130. package/dist/runtime/theme/progress.js +2 -2
  131. package/dist/runtime/theme/prose.d.ts +6 -0
  132. package/dist/runtime/theme/prose.js +2 -0
  133. package/dist/runtime/theme/radio-group.js +4 -4
  134. package/dist/runtime/theme/rating.js +1 -1
  135. package/dist/runtime/theme/select.js +2 -2
  136. package/dist/runtime/theme/separator.js +1 -1
  137. package/dist/runtime/theme/slideover.js +1 -1
  138. package/dist/runtime/theme/slider.js +2 -2
  139. package/dist/runtime/theme/splitter-resize-handle.js +1 -1
  140. package/dist/runtime/theme/switch.js +1 -1
  141. package/dist/runtime/theme/table.d.ts +27 -0
  142. package/dist/runtime/theme/table.js +11 -2
  143. package/dist/runtime/theme/tabs.d.ts +87 -3
  144. package/dist/runtime/theme/tabs.js +46 -22
  145. package/dist/runtime/theme/textarea.js +1 -1
  146. package/dist/runtime/theme/timeline.d.ts +251 -0
  147. package/dist/runtime/theme/timeline.js +84 -0
  148. package/dist/runtime/theme/toast.d.ts +92 -0
  149. package/dist/runtime/theme/toast.js +29 -7
  150. package/dist/runtime/theme-config.d.ts +12 -1
  151. package/dist/runtime/types/index.d.ts +6 -1
  152. package/dist/runtime/utils/arrow.d.ts +21 -0
  153. package/dist/runtime/utils/arrow.js +10 -0
  154. package/dist/runtime/utils/color-registry.d.ts +3 -1
  155. package/dist/runtime/utils/color-registry.js +4 -0
  156. package/dist/runtime/utils/file-icons.d.ts +8 -0
  157. package/dist/runtime/utils/file-icons.js +133 -0
  158. package/dist/runtime/utils/functional-tokens.d.ts +1 -1
  159. package/dist/runtime/utils/functional-tokens.js +1 -1
  160. package/dist/runtime/utils/icons.d.ts +2 -0
  161. package/dist/runtime/utils/icons.js +2 -0
  162. package/dist/runtime/utils/messages.d.ts +6 -0
  163. package/dist/runtime/utils/messages.js +6 -0
  164. package/dist/runtime/utils/navigation-menu.d.ts +10 -0
  165. package/dist/runtime/utils/navigation-menu.js +3 -0
  166. package/dist/runtime/utils/overlay.d.ts +17 -0
  167. package/dist/runtime/utils/overlay.js +7 -0
  168. package/dist/runtime/utils/seed-colors.d.ts +2 -1
  169. package/dist/runtime/utils/seed-colors.js +24 -16
  170. package/dist/runtime/utils/select-contracts.d.ts +7 -1
  171. package/dist/runtime/utils/table-columns.js +1 -1
  172. package/dist/runtime/utils/table-contracts.d.ts +9 -1
  173. package/dist/runtime/utils/timeline-contracts.d.ts +42 -0
  174. package/dist/runtime/utils/timeline-contracts.js +0 -0
  175. package/dist/tokens/default-colors.tokens.json +100 -100
  176. package/package.json +21 -9
@@ -10,7 +10,7 @@ export const separatorTheme = tv({
10
10
  // plain bar; with a label, a second one of these renders after it
11
11
  // (see Separator.vue), splitting the available space evenly on both
12
12
  // sides of the text.
13
- line: "shrink-0 border-[var(--_selaras-color-fill)]",
13
+ line: "shrink-0 border-[var(--_selaras-color-indicator)]",
14
14
  // Always muted, independent of `color` - a colored line with
15
15
  // matching bright label text reads as garish rather than
16
16
  // informative; the label stays legible/neutral regardless of how
@@ -1,7 +1,7 @@
1
1
  import { tv } from "tailwind-variants";
2
2
  export const slideoverTheme = tv({
3
3
  slots: {
4
- overlay: "fixed inset-0 z-[var(--selaras-resolved-z-modal-overlay)] bg-[var(--selaras-resolved-scrim)]",
4
+ overlay: "fixed inset-0 z-[var(--selaras-resolved-z-modal-overlay)] bg-[var(--selaras-resolved-scrim)] backdrop-blur-[2px]",
5
5
  content: "fixed z-[var(--selaras-resolved-z-modal)] flex flex-col bg-[var(--selaras-resolved-surface-default)] shadow-[var(--selaras-resolved-shadow-lg)] focus:outline-none",
6
6
  header: "flex items-start justify-between gap-4 p-4 sm:px-6",
7
7
  title: "text-base font-semibold text-[var(--selaras-resolved-text-default)]",
@@ -10,8 +10,8 @@ export const sliderTheme = tv({
10
10
  // positioned element with no top/bottom of its own collapses to 0
11
11
  // height. inset-y-0/inset-x-0 below (in the orientation variant)
12
12
  // supply that missing cross-axis size.
13
- range: "absolute rounded-full bg-[var(--_selaras-color-fill)]",
14
- thumb: "block shrink-0 rounded-full bg-[var(--selaras-resolved-surface-default)] shadow-[var(--selaras-resolved-shadow-sm)] ring-2 ring-[var(--_selaras-color-fill)] transition-shadow focus-visible:outline-none focus-visible:ring-4",
13
+ range: "absolute rounded-full bg-[var(--_selaras-color-indicator)]",
14
+ thumb: "block shrink-0 rounded-full bg-[var(--selaras-resolved-surface-default)] shadow-[var(--selaras-resolved-shadow-sm)] ring-2 ring-[var(--_selaras-color-indicator)] transition-shadow focus-visible:outline-none focus-visible:ring-4",
15
15
  // Own addition - Reka's Slider has no tick/mark concept of its own.
16
16
  // Positioned via an inline style (percent along the track), not a
17
17
  // variant - see Slider.vue's own `ticks` computed.
@@ -4,7 +4,7 @@ export const splitterResizeHandleTheme = tv({
4
4
  // A slim hit area with a thinner visible line inside it - the visible
5
5
  // line alone would be too narrow a target to reliably grab.
6
6
  root: "group relative shrink-0 bg-transparent outline-none",
7
- line: "absolute bg-[var(--selaras-resolved-border-default)] transition-colors group-hover:bg-[var(--_selaras-color-fill)] group-data-[state=drag]:bg-[var(--_selaras-color-fill)]"
7
+ line: "absolute bg-[var(--selaras-resolved-border-default)] transition-colors group-hover:bg-[var(--_selaras-color-indicator)] group-data-[state=drag]:bg-[var(--_selaras-color-indicator)]"
8
8
  },
9
9
  variants: {
10
10
  color: {
@@ -74,7 +74,7 @@ export const switchTheme = tv({
74
74
  // its own to recolor (unlike Radio/Checkbox's ring-inset), but an
75
75
  // offset outline left a visible gap between it and the pill, unlike
76
76
  // every other invalid state in this library, which sits flush.
77
- true: { track: "ring-2 ring-[var(--_selaras-color-fill)]", thumb: "data-[state=checked]:before:bg-[var(--_selaras-color-fill-hover)]" }
77
+ true: { track: "ring-2 ring-[var(--_selaras-color-border)]", thumb: "data-[state=checked]:before:bg-[var(--_selaras-color-fill-hover)]" }
78
78
  }
79
79
  },
80
80
  defaultVariants: {
@@ -34,6 +34,11 @@ export declare const tableTheme: import("tailwind-variants").TVReturnType<{
34
34
  table: string;
35
35
  };
36
36
  };
37
+ rowHover: {
38
+ true: {
39
+ table: string;
40
+ };
41
+ };
37
42
  scrollable: {
38
43
  true: {
39
44
  wrapper: string;
@@ -52,6 +57,9 @@ export declare const tableTheme: import("tailwind-variants").TVReturnType<{
52
57
  td: string;
53
58
  tfoot: string;
54
59
  emptyState: string;
60
+ filterButton: string;
61
+ filterIcon: string;
62
+ filterPopover: string;
55
63
  filterInput: string;
56
64
  paginationWrapper: string;
57
65
  paginationInfo: string;
@@ -60,6 +68,7 @@ export declare const tableTheme: import("tailwind-variants").TVReturnType<{
60
68
  loadingIcon: string;
61
69
  expandButton: string;
62
70
  expandChevron: string;
71
+ treeCell: string;
63
72
  expandedRow: string;
64
73
  expandedCell: string;
65
74
  columnToggle: string;
@@ -101,6 +110,11 @@ export declare const tableTheme: import("tailwind-variants").TVReturnType<{
101
110
  table: string;
102
111
  };
103
112
  };
113
+ rowHover: {
114
+ true: {
115
+ table: string;
116
+ };
117
+ };
104
118
  scrollable: {
105
119
  true: {
106
120
  wrapper: string;
@@ -119,6 +133,9 @@ export declare const tableTheme: import("tailwind-variants").TVReturnType<{
119
133
  td: string;
120
134
  tfoot: string;
121
135
  emptyState: string;
136
+ filterButton: string;
137
+ filterIcon: string;
138
+ filterPopover: string;
122
139
  filterInput: string;
123
140
  paginationWrapper: string;
124
141
  paginationInfo: string;
@@ -127,6 +144,7 @@ export declare const tableTheme: import("tailwind-variants").TVReturnType<{
127
144
  loadingIcon: string;
128
145
  expandButton: string;
129
146
  expandChevron: string;
147
+ treeCell: string;
130
148
  expandedRow: string;
131
149
  expandedCell: string;
132
150
  columnToggle: string;
@@ -168,6 +186,11 @@ export declare const tableTheme: import("tailwind-variants").TVReturnType<{
168
186
  table: string;
169
187
  };
170
188
  };
189
+ rowHover: {
190
+ true: {
191
+ table: string;
192
+ };
193
+ };
171
194
  scrollable: {
172
195
  true: {
173
196
  wrapper: string;
@@ -186,6 +209,9 @@ export declare const tableTheme: import("tailwind-variants").TVReturnType<{
186
209
  td: string;
187
210
  tfoot: string;
188
211
  emptyState: string;
212
+ filterButton: string;
213
+ filterIcon: string;
214
+ filterPopover: string;
189
215
  filterInput: string;
190
216
  paginationWrapper: string;
191
217
  paginationInfo: string;
@@ -194,6 +220,7 @@ export declare const tableTheme: import("tailwind-variants").TVReturnType<{
194
220
  loadingIcon: string;
195
221
  expandButton: string;
196
222
  expandChevron: string;
223
+ treeCell: string;
197
224
  expandedRow: string;
198
225
  expandedCell: string;
199
226
  columnToggle: string;
@@ -8,11 +8,14 @@ export const tableTheme = tv({
8
8
  tr: "border-b border-[var(--selaras-resolved-border-default)] last:border-b-0",
9
9
  th: "text-start font-medium text-[var(--selaras-resolved-text-muted)] whitespace-nowrap data-[pinned]:sticky data-[pinned]:z-[1] data-[pinned]:bg-[var(--selaras-resolved-surface-elevated)]",
10
10
  thSortable: "cursor-pointer select-none hover:text-[var(--selaras-resolved-text-default)] focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-[var(--_selaras-color-focus)]",
11
- sortIcon: "ms-1 inline-block size-3.5 align-text-bottom text-[var(--selaras-resolved-text-muted)]",
11
+ sortIcon: "ms-1 inline-block size-3.5 align-text-bottom text-[var(--selaras-resolved-text-muted)] data-[sort-state=none]:opacity-50",
12
12
  td: "text-[var(--selaras-resolved-text-default)] data-[pinned]:sticky data-[pinned]:z-[1] data-[pinned]:bg-[var(--selaras-resolved-surface-default)]",
13
13
  tfoot: "bg-[var(--selaras-resolved-surface-elevated)] font-medium",
14
14
  emptyState: "px-3 py-8 text-center text-sm text-[var(--selaras-resolved-text-muted)]",
15
- filterInput: "mt-1",
15
+ filterButton: "shrink-0",
16
+ filterIcon: "size-4",
17
+ filterPopover: "w-64 p-3",
18
+ filterInput: "",
16
19
  paginationWrapper: "flex items-center justify-between gap-3 px-3 py-2",
17
20
  paginationInfo: "text-sm text-[var(--selaras-resolved-text-muted)]",
18
21
  paginationButtons: "flex items-center gap-2",
@@ -27,6 +30,7 @@ export const tableTheme = tv({
27
30
  // for the one case where both conditions hold at once, rather than
28
31
  // leaving the outcome to rely on Tailwind's variant cascade order.
29
32
  expandChevron: "size-4 transition-transform rtl:rotate-180 data-[expanded]:rotate-90 rtl:data-[expanded]:rotate-90",
33
+ treeCell: "flex items-center gap-1",
30
34
  expandedRow: "border-b border-[var(--selaras-resolved-border-default)] last:border-b-0",
31
35
  expandedCell: "bg-[var(--selaras-resolved-surface-elevated)] px-3 py-3 text-[var(--selaras-resolved-text-default)]",
32
36
  columnToggle: "relative",
@@ -58,6 +62,11 @@ export const tableTheme = tv({
58
62
  striped: {
59
63
  true: { table: "[&>tbody>tr:nth-child(even)]:bg-[var(--selaras-resolved-surface-elevated)]" }
60
64
  },
65
+ rowHover: {
66
+ // Body rows only, like `striped` - header and footer rows share the `tr`
67
+ // slot but aren't selectable. Cells repaint too, for pinned columns.
68
+ true: { table: "[&>tbody>tr]:transition-colors [&>tbody>tr:hover]:bg-[var(--selaras-resolved-surface-elevated)] [&>tbody>tr:hover>td]:bg-[var(--selaras-resolved-surface-elevated)]" }
69
+ },
61
70
  scrollable: {
62
71
  true: { wrapper: "overflow-y-auto", thead: "sticky top-0 z-[1]" }
63
72
  }
@@ -1,7 +1,7 @@
1
1
  export declare const tabsTheme: import("tailwind-variants").TVReturnType<{
2
2
  variant: {
3
3
  underline: {
4
- list: string;
4
+ trigger: string;
5
5
  indicator: string;
6
6
  };
7
7
  pill: {
@@ -10,6 +10,18 @@ export declare const tabsTheme: import("tailwind-variants").TVReturnType<{
10
10
  indicator: string;
11
11
  };
12
12
  };
13
+ orientation: {
14
+ horizontal: {
15
+ indicator: string;
16
+ };
17
+ vertical: {
18
+ root: string;
19
+ list: string;
20
+ trigger: string;
21
+ indicator: string;
22
+ content: string;
23
+ };
24
+ };
13
25
  color: {
14
26
  primary: "";
15
27
  neutral: "";
@@ -19,8 +31,24 @@ export declare const tabsTheme: import("tailwind-variants").TVReturnType<{
19
31
  info: "";
20
32
  warning: "";
21
33
  };
34
+ scrollable: {
35
+ false: {
36
+ scrollRoot: string;
37
+ scrollViewport: string;
38
+ };
39
+ true: {
40
+ scrollRoot: string;
41
+ scrollViewport: string;
42
+ list: string;
43
+ trigger: string;
44
+ };
45
+ };
22
46
  }, {
23
47
  root: string;
48
+ scrollRoot: string;
49
+ scrollViewport: string;
50
+ scrollButton: string;
51
+ scrollIcon: string;
24
52
  list: string;
25
53
  trigger: string;
26
54
  icon: string;
@@ -29,7 +57,7 @@ export declare const tabsTheme: import("tailwind-variants").TVReturnType<{
29
57
  }, undefined, {
30
58
  variant: {
31
59
  underline: {
32
- list: string;
60
+ trigger: string;
33
61
  indicator: string;
34
62
  };
35
63
  pill: {
@@ -38,6 +66,18 @@ export declare const tabsTheme: import("tailwind-variants").TVReturnType<{
38
66
  indicator: string;
39
67
  };
40
68
  };
69
+ orientation: {
70
+ horizontal: {
71
+ indicator: string;
72
+ };
73
+ vertical: {
74
+ root: string;
75
+ list: string;
76
+ trigger: string;
77
+ indicator: string;
78
+ content: string;
79
+ };
80
+ };
41
81
  color: {
42
82
  primary: "";
43
83
  neutral: "";
@@ -47,8 +87,24 @@ export declare const tabsTheme: import("tailwind-variants").TVReturnType<{
47
87
  info: "";
48
88
  warning: "";
49
89
  };
90
+ scrollable: {
91
+ false: {
92
+ scrollRoot: string;
93
+ scrollViewport: string;
94
+ };
95
+ true: {
96
+ scrollRoot: string;
97
+ scrollViewport: string;
98
+ list: string;
99
+ trigger: string;
100
+ };
101
+ };
50
102
  }, {
51
103
  root: string;
104
+ scrollRoot: string;
105
+ scrollViewport: string;
106
+ scrollButton: string;
107
+ scrollIcon: string;
52
108
  list: string;
53
109
  trigger: string;
54
110
  icon: string;
@@ -57,7 +113,7 @@ export declare const tabsTheme: import("tailwind-variants").TVReturnType<{
57
113
  }, import("tailwind-variants").TVReturnTypeLike<{
58
114
  variant: {
59
115
  underline: {
60
- list: string;
116
+ trigger: string;
61
117
  indicator: string;
62
118
  };
63
119
  pill: {
@@ -66,6 +122,18 @@ export declare const tabsTheme: import("tailwind-variants").TVReturnType<{
66
122
  indicator: string;
67
123
  };
68
124
  };
125
+ orientation: {
126
+ horizontal: {
127
+ indicator: string;
128
+ };
129
+ vertical: {
130
+ root: string;
131
+ list: string;
132
+ trigger: string;
133
+ indicator: string;
134
+ content: string;
135
+ };
136
+ };
69
137
  color: {
70
138
  primary: "";
71
139
  neutral: "";
@@ -75,8 +143,24 @@ export declare const tabsTheme: import("tailwind-variants").TVReturnType<{
75
143
  info: "";
76
144
  warning: "";
77
145
  };
146
+ scrollable: {
147
+ false: {
148
+ scrollRoot: string;
149
+ scrollViewport: string;
150
+ };
151
+ true: {
152
+ scrollRoot: string;
153
+ scrollViewport: string;
154
+ list: string;
155
+ trigger: string;
156
+ };
157
+ };
78
158
  }, {
79
159
  root: string;
160
+ scrollRoot: string;
161
+ scrollViewport: string;
162
+ scrollButton: string;
163
+ scrollIcon: string;
80
164
  list: string;
81
165
  trigger: string;
82
166
  icon: string;
@@ -2,39 +2,46 @@ import { tv } from "tailwind-variants";
2
2
  export const tabsTheme = tv({
3
3
  slots: {
4
4
  root: "w-full",
5
- // relative - the positioned ancestor both the triggers' own offsetLeft
6
- // and the sliding indicator's absolute positioning resolve against.
5
+ scrollRoot: "",
6
+ scrollViewport: "",
7
+ // Button supplies the neutral ghost styling and sm icon size. These slots
8
+ // let Tabs authors adjust either control without duplicating Button CSS.
9
+ scrollButton: "",
10
+ scrollIcon: "",
11
+ // Relative positioning anchors Reka's measured indicator in either axis.
7
12
  list: "relative flex items-center border-b border-[var(--selaras-resolved-border-default)]",
8
13
  // z-10 unconditionally (not just for `pill`) - harmless for `underline`
9
14
  // (its indicator never overlaps the trigger's own text anyway) and
10
15
  // keeps this one class instead of a compound variant.
11
- trigger: "relative z-10 inline-flex items-center gap-1.5 px-1 py-2 text-sm font-medium text-[var(--selaras-resolved-text-muted)] transition-colors hover:text-[var(--selaras-resolved-text-default)] disabled:opacity-50 disabled:pointer-events-none data-[state=active]:text-[var(--_selaras-color-text)]",
16
+ trigger: "relative z-10 inline-flex items-center gap-1.5 px-1 py-2 text-sm font-medium text-[var(--selaras-resolved-text-muted)] transition-colors hover:text-[var(--selaras-resolved-text-default)] disabled:opacity-50 disabled:pointer-events-none",
12
17
  icon: "size-4 shrink-0",
13
- // Positioned via Reka's own TabsIndicator - it measures the active
14
- // trigger's offsetLeft/offsetWidth itself (ResizeObserver-driven, and
15
- // re-runs on every active-tab change whether Tabs is controlled or
16
- // uncontrolled) and exposes the result as these two CSS custom
17
- // properties, the same `var(...)` arbitrary-value pattern
18
- // theme/select.ts's own `content` slot already uses for
19
- // --reka-combobox-trigger-width. The transition is the only thing
20
- // actually driving the slide - JS never animates it directly.
21
- // `translate-x-*` compiles to the standalone CSS `translate` property
22
- // (not `transform`) in this version of Tailwind, so the transition
23
- // list has to say `translate`, not `transform` - watching the wrong
24
- // property meant this never animated at all, just snapped instantly.
25
- indicator: "absolute translate-x-[var(--reka-tabs-indicator-position)] w-[var(--reka-tabs-indicator-size)] transition-[translate,width] duration-200 ease-out",
18
+ // Reka measures width/left horizontally and height/top vertically.
19
+ // Tailwind's translate utilities use the CSS `translate` property.
20
+ indicator: "absolute transition-[translate,width,height] duration-200 ease-out",
26
21
  content: "pt-4 focus-visible:outline-none data-[state=active]:animate-in data-[state=active]:fade-in-0"
27
22
  },
28
23
  variants: {
29
24
  variant: {
30
25
  underline: {
31
- list: "gap-4",
32
- indicator: "inset-x-0 bottom-0 h-0.5 rounded-full bg-[var(--_selaras-color-fill)]"
26
+ trigger: "data-[state=active]:text-[var(--_selaras-color-text)]",
27
+ indicator: "rounded-full bg-[var(--_selaras-color-fill)]"
33
28
  },
34
29
  pill: {
35
- list: "gap-1 rounded-[var(--selaras-resolved-radius-md)] border-0 bg-[var(--selaras-resolved-surface-elevated)] p-1",
36
- trigger: "rounded-[var(--selaras-resolved-radius-sm)] px-3",
37
- indicator: "inset-y-1 rounded-[var(--selaras-resolved-radius-sm)] bg-[var(--selaras-resolved-surface-default)] shadow-[var(--selaras-resolved-shadow-sm)]"
30
+ list: "gap-1 rounded-[var(--selaras-resolved-radius-md)] border-0 bg-[color-mix(in_oklab,var(--selaras-resolved-surface-elevated)_96%,var(--selaras-resolved-surface-inverted))] p-1",
31
+ trigger: "justify-center text-center rounded-[var(--selaras-resolved-radius-sm)] px-3 data-[state=active]:text-[var(--_selaras-color-on-fill)]",
32
+ indicator: "rounded-[var(--selaras-resolved-radius-sm)] bg-[var(--_selaras-color-fill)] shadow-[var(--selaras-resolved-shadow-sm)]"
33
+ }
34
+ },
35
+ orientation: {
36
+ horizontal: {
37
+ indicator: "left-0 w-[var(--reka-tabs-indicator-size)] translate-x-[var(--reka-tabs-indicator-position)]"
38
+ },
39
+ vertical: {
40
+ root: "flex items-start gap-4",
41
+ list: "shrink-0 flex-col items-stretch border-b-0 border-e",
42
+ trigger: "w-full justify-start text-start px-3",
43
+ indicator: "top-0 h-[var(--reka-tabs-indicator-size)] translate-y-[var(--reka-tabs-indicator-position)]",
44
+ content: "min-w-0 flex-1 pt-0"
38
45
  }
39
46
  },
40
47
  color: {
@@ -45,10 +52,27 @@ export const tabsTheme = tv({
45
52
  danger: "",
46
53
  info: "",
47
54
  warning: ""
55
+ },
56
+ scrollable: {
57
+ false: { scrollRoot: "contents", scrollViewport: "contents" },
58
+ true: {
59
+ scrollRoot: "flex w-full min-w-0 items-center gap-1",
60
+ scrollViewport: "min-w-0 flex-1 overflow-x-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",
61
+ list: "w-max min-w-full flex-nowrap",
62
+ trigger: "shrink-0 whitespace-nowrap"
63
+ }
48
64
  }
49
65
  },
66
+ compoundVariants: [
67
+ { variant: "underline", orientation: "horizontal", class: { list: "gap-4", indicator: "bottom-0 h-0.5" } },
68
+ { variant: "underline", orientation: "vertical", class: { list: "gap-1", indicator: "end-0 w-0.5" } },
69
+ { variant: "pill", orientation: "horizontal", class: { indicator: "inset-y-1" } },
70
+ { variant: "pill", orientation: "vertical", class: { list: "border-0", indicator: "inset-x-1" } }
71
+ ],
50
72
  defaultVariants: {
51
73
  variant: "underline",
52
- color: "primary"
74
+ orientation: "horizontal",
75
+ color: "primary",
76
+ scrollable: false
53
77
  }
54
78
  });
@@ -46,7 +46,7 @@ export const textareaTheme = tv({
46
46
  // override win over color's - see input.ts for why declaration order
47
47
  // (not runtime call order) is what decides this.
48
48
  invalid: {
49
- true: { base: "ring-[var(--_selaras-color-fill)] hover:ring-[var(--_selaras-color-fill)] focus:ring-[var(--_selaras-color-fill)]" }
49
+ true: { base: "ring-[var(--_selaras-color-border)] hover:ring-[var(--_selaras-color-border)] focus:ring-[var(--_selaras-color-focus)]" }
50
50
  }
51
51
  },
52
52
  defaultVariants: {
@@ -0,0 +1,251 @@
1
+ export declare const timelineTheme: import("tailwind-variants").TVReturnType<{
2
+ orientation: {
3
+ vertical: {
4
+ root: string;
5
+ item: string;
6
+ track: string;
7
+ connector: string;
8
+ content: string;
9
+ };
10
+ horizontal: {
11
+ root: string;
12
+ item: string;
13
+ track: string;
14
+ marker: string;
15
+ connector: string;
16
+ content: string;
17
+ };
18
+ };
19
+ align: {
20
+ start: {
21
+ item: string;
22
+ track: string;
23
+ content: string;
24
+ };
25
+ end: {
26
+ item: string;
27
+ track: string;
28
+ content: string;
29
+ };
30
+ alternate: {
31
+ item: string;
32
+ track: string;
33
+ content: string;
34
+ };
35
+ };
36
+ size: {
37
+ sm: {
38
+ marker: string;
39
+ title: string;
40
+ };
41
+ md: {
42
+ marker: string;
43
+ title: string;
44
+ };
45
+ lg: {
46
+ marker: string;
47
+ title: string;
48
+ };
49
+ };
50
+ color: {
51
+ primary: {
52
+ marker: string;
53
+ };
54
+ neutral: {
55
+ marker: string;
56
+ };
57
+ secondary: {
58
+ marker: string;
59
+ };
60
+ success: {
61
+ marker: string;
62
+ };
63
+ danger: {
64
+ marker: string;
65
+ };
66
+ info: {
67
+ marker: string;
68
+ };
69
+ warning: {
70
+ marker: string;
71
+ };
72
+ };
73
+ }, {
74
+ root: string;
75
+ item: string;
76
+ track: string;
77
+ marker: string;
78
+ icon: string;
79
+ connector: string;
80
+ content: string;
81
+ date: string;
82
+ title: string;
83
+ description: string;
84
+ }, undefined, {
85
+ orientation: {
86
+ vertical: {
87
+ root: string;
88
+ item: string;
89
+ track: string;
90
+ connector: string;
91
+ content: string;
92
+ };
93
+ horizontal: {
94
+ root: string;
95
+ item: string;
96
+ track: string;
97
+ marker: string;
98
+ connector: string;
99
+ content: string;
100
+ };
101
+ };
102
+ align: {
103
+ start: {
104
+ item: string;
105
+ track: string;
106
+ content: string;
107
+ };
108
+ end: {
109
+ item: string;
110
+ track: string;
111
+ content: string;
112
+ };
113
+ alternate: {
114
+ item: string;
115
+ track: string;
116
+ content: string;
117
+ };
118
+ };
119
+ size: {
120
+ sm: {
121
+ marker: string;
122
+ title: string;
123
+ };
124
+ md: {
125
+ marker: string;
126
+ title: string;
127
+ };
128
+ lg: {
129
+ marker: string;
130
+ title: string;
131
+ };
132
+ };
133
+ color: {
134
+ primary: {
135
+ marker: string;
136
+ };
137
+ neutral: {
138
+ marker: string;
139
+ };
140
+ secondary: {
141
+ marker: string;
142
+ };
143
+ success: {
144
+ marker: string;
145
+ };
146
+ danger: {
147
+ marker: string;
148
+ };
149
+ info: {
150
+ marker: string;
151
+ };
152
+ warning: {
153
+ marker: string;
154
+ };
155
+ };
156
+ }, {
157
+ root: string;
158
+ item: string;
159
+ track: string;
160
+ marker: string;
161
+ icon: string;
162
+ connector: string;
163
+ content: string;
164
+ date: string;
165
+ title: string;
166
+ description: string;
167
+ }, import("tailwind-variants").TVReturnTypeLike<{
168
+ orientation: {
169
+ vertical: {
170
+ root: string;
171
+ item: string;
172
+ track: string;
173
+ connector: string;
174
+ content: string;
175
+ };
176
+ horizontal: {
177
+ root: string;
178
+ item: string;
179
+ track: string;
180
+ marker: string;
181
+ connector: string;
182
+ content: string;
183
+ };
184
+ };
185
+ align: {
186
+ start: {
187
+ item: string;
188
+ track: string;
189
+ content: string;
190
+ };
191
+ end: {
192
+ item: string;
193
+ track: string;
194
+ content: string;
195
+ };
196
+ alternate: {
197
+ item: string;
198
+ track: string;
199
+ content: string;
200
+ };
201
+ };
202
+ size: {
203
+ sm: {
204
+ marker: string;
205
+ title: string;
206
+ };
207
+ md: {
208
+ marker: string;
209
+ title: string;
210
+ };
211
+ lg: {
212
+ marker: string;
213
+ title: string;
214
+ };
215
+ };
216
+ color: {
217
+ primary: {
218
+ marker: string;
219
+ };
220
+ neutral: {
221
+ marker: string;
222
+ };
223
+ secondary: {
224
+ marker: string;
225
+ };
226
+ success: {
227
+ marker: string;
228
+ };
229
+ danger: {
230
+ marker: string;
231
+ };
232
+ info: {
233
+ marker: string;
234
+ };
235
+ warning: {
236
+ marker: string;
237
+ };
238
+ };
239
+ }, {
240
+ root: string;
241
+ item: string;
242
+ track: string;
243
+ marker: string;
244
+ icon: string;
245
+ connector: string;
246
+ content: string;
247
+ date: string;
248
+ title: string;
249
+ description: string;
250
+ }>>;
251
+ export type TimelineThemeSlots = keyof (typeof timelineTheme)['slots'];