@sth87/shadcn-design-system 0.1.0 → 0.1.2

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 (63) hide show
  1. package/dist/cjs/components/Checkbox/Checkbox.cjs +1 -1
  2. package/dist/cjs/components/Checkbox/Checkbox.cjs.map +1 -1
  3. package/dist/cjs/components/Input/Input.cjs +1 -1
  4. package/dist/cjs/components/Input/Input.cjs.map +1 -1
  5. package/dist/cjs/components/Rate/Rate.cjs +1 -1
  6. package/dist/cjs/components/Rate/Rate.cjs.map +1 -1
  7. package/dist/cjs/components/Sheet/Sheet.cjs +1 -1
  8. package/dist/cjs/components/Sheet/Sheet.cjs.map +1 -1
  9. package/dist/cjs/components/Slider/Slider.cjs +1 -1
  10. package/dist/cjs/components/Slider/Slider.cjs.map +1 -1
  11. package/dist/cjs/components/Stepper/Stepper.cjs +1 -1
  12. package/dist/cjs/components/Stepper/Stepper.cjs.map +1 -1
  13. package/dist/cjs/components/Stepper/StepperWrapper.cjs +1 -1
  14. package/dist/cjs/components/Stepper/StepperWrapper.cjs.map +1 -1
  15. package/dist/cjs/components/Switch/Switch.cjs +1 -1
  16. package/dist/cjs/components/Switch/Switch.cjs.map +1 -1
  17. package/dist/cjs/components/Table/data-table-column-header.cjs +1 -1
  18. package/dist/cjs/components/Table/data-table-column-header.cjs.map +1 -1
  19. package/dist/cjs/components/Tabs/classes.cjs +1 -1
  20. package/dist/cjs/components/Tabs/classes.cjs.map +1 -1
  21. package/dist/cjs/components/TimeGridView.cjs +1 -1
  22. package/dist/cjs/components/TimeGridView.cjs.map +1 -1
  23. package/dist/cjs/components/Toast/Toast.cjs +1 -1
  24. package/dist/cjs/components/Toast/Toast.cjs.map +1 -1
  25. package/dist/cjs/components/Tooltip/Tooltip.cjs +1 -1
  26. package/dist/cjs/components/Tooltip/Tooltip.cjs.map +1 -1
  27. package/dist/cjs/components/WheelColumn.cjs +1 -1
  28. package/dist/cjs/components/WheelColumn.cjs.map +1 -1
  29. package/dist/cjs/packages/ui/src/components/calendar.cjs +1 -1
  30. package/dist/cjs/packages/ui/src/components/calendar.cjs.map +1 -1
  31. package/dist/cjs/styles/index.css +1 -1
  32. package/dist/esm/components/Checkbox/Checkbox.js +20 -20
  33. package/dist/esm/components/Checkbox/Checkbox.js.map +1 -1
  34. package/dist/esm/components/Input/Input.js +43 -43
  35. package/dist/esm/components/Input/Input.js.map +1 -1
  36. package/dist/esm/components/Rate/Rate.js +15 -15
  37. package/dist/esm/components/Rate/Rate.js.map +1 -1
  38. package/dist/esm/components/Sheet/Sheet.js +25 -25
  39. package/dist/esm/components/Sheet/Sheet.js.map +1 -1
  40. package/dist/esm/components/Slider/Slider.js +139 -139
  41. package/dist/esm/components/Slider/Slider.js.map +1 -1
  42. package/dist/esm/components/Stepper/Stepper.js +52 -52
  43. package/dist/esm/components/Stepper/Stepper.js.map +1 -1
  44. package/dist/esm/components/Stepper/StepperWrapper.js +25 -25
  45. package/dist/esm/components/Stepper/StepperWrapper.js.map +1 -1
  46. package/dist/esm/components/Switch/Switch.js +19 -19
  47. package/dist/esm/components/Switch/Switch.js.map +1 -1
  48. package/dist/esm/components/Table/data-table-column-header.js +22 -22
  49. package/dist/esm/components/Table/data-table-column-header.js.map +1 -1
  50. package/dist/esm/components/Tabs/classes.js +128 -128
  51. package/dist/esm/components/Tabs/classes.js.map +1 -1
  52. package/dist/esm/components/TimeGridView.js +27 -27
  53. package/dist/esm/components/TimeGridView.js.map +1 -1
  54. package/dist/esm/components/Toast/Toast.js +26 -26
  55. package/dist/esm/components/Toast/Toast.js.map +1 -1
  56. package/dist/esm/components/Tooltip/Tooltip.js +42 -42
  57. package/dist/esm/components/Tooltip/Tooltip.js.map +1 -1
  58. package/dist/esm/components/WheelColumn.js +9 -9
  59. package/dist/esm/components/WheelColumn.js.map +1 -1
  60. package/dist/esm/packages/ui/src/components/calendar.js +73 -73
  61. package/dist/esm/packages/ui/src/components/calendar.js.map +1 -1
  62. package/dist/esm/styles/index.css +1 -1
  63. package/package.json +1 -1
@@ -75,188 +75,188 @@ const J = {
75
75
  root: "ds:flex ds:flex-row-reverse",
76
76
  list: "ds:flex-col ds:h-fit"
77
77
  }
78
- }, O = (r, t) => {
79
- const a = {
78
+ }, O = (a, t) => {
79
+ const d = {
80
80
  primary: {
81
- bg: "data-[state=active]:bg-primary dark:data-[state=active]:bg-primary data-[state=active]:text-primary-foreground dark:data-[state=active]:text-primary-foreground",
82
- text: "data-[state=active]:text-primary dark:data-[state=active]:text-primary",
83
- border: "data-[state=active]:border-primary dark:data-[state=active]:border-primary"
81
+ bg: "ds:data-[state=active]:bg-primary ds:dark:data-[state=active]:bg-primary ds:data-[state=active]:text-primary-foreground ds:dark:data-[state=active]:text-primary-foreground",
82
+ text: "ds:data-[state=active]:text-primary ds:dark:data-[state=active]:text-primary",
83
+ border: "ds:data-[state=active]:border-primary ds:dark:data-[state=active]:border-primary"
84
84
  },
85
85
  secondary: {
86
- bg: "data-[state=active]:bg-secondary dark:data-[state=active]:bg-secondary data-[state=active]:text-secondary-foreground dark:data-[state=active]:text-secondary-foreground",
87
- text: "data-[state=active]:text-secondary dark:data-[state=active]:text-secondary",
88
- border: "data-[state=active]:border-secondary dark:data-[state=active]:border-secondary"
86
+ bg: "ds:data-[state=active]:bg-secondary ds:dark:data-[state=active]:bg-secondary ds:data-[state=active]:text-secondary-foreground ds:dark:data-[state=active]:text-secondary-foreground",
87
+ text: "ds:data-[state=active]:text-secondary ds:dark:data-[state=active]:text-secondary",
88
+ border: "ds:data-[state=active]:border-secondary ds:dark:data-[state=active]:border-secondary"
89
89
  },
90
90
  muted: {
91
- bg: "data-[state=active]:bg-muted dark:data-[state=active]:bg-muted data-[state=active]:text-muted-foreground dark:data-[state=active]:text-muted-foreground",
92
- text: "data-[state=active]:text-muted-foreground dark:data-[state=active]:text-muted-foreground",
93
- border: "data-[state=active]:border-border dark:data-[state=active]:border-border"
91
+ bg: "ds:data-[state=active]:bg-muted ds:dark:data-[state=active]:bg-muted ds:data-[state=active]:text-muted-foreground ds:dark:data-[state=active]:text-muted-foreground",
92
+ text: "ds:data-[state=active]:text-muted-foreground ds:dark:data-[state=active]:text-muted-foreground",
93
+ border: "ds:data-[state=active]:border-border ds:dark:data-[state=active]:border-border"
94
94
  },
95
95
  accent: {
96
- bg: "data-[state=active]:bg-accent dark:data-[state=active]:bg-accent data-[state=active]:text-accent-foreground dark:data-[state=active]:text-accent-foreground",
97
- text: "data-[state=active]:text-accent-foreground dark:data-[state=active]:text-accent-foreground",
98
- border: "data-[state=active]:border-accent dark:data-[state=active]:border-accent"
96
+ bg: "ds:data-[state=active]:bg-accent ds:dark:data-[state=active]:bg-accent ds:data-[state=active]:text-accent-foreground ds:dark:data-[state=active]:text-accent-foreground",
97
+ text: "ds:data-[state=active]:text-accent-foreground ds:dark:data-[state=active]:text-accent-foreground",
98
+ border: "ds:data-[state=active]:border-accent ds:dark:data-[state=active]:border-accent"
99
99
  },
100
100
  destructive: {
101
- bg: "data-[state=active]:bg-destructive dark:data-[state=active]:bg-destructive data-[state=active]:text-destructive-foreground dark:data-[state=active]:text-destructive-foreground",
102
- text: "data-[state=active]:text-destructive dark:data-[state=active]:text-destructive",
103
- border: "data-[state=active]:border-destructive dark:data-[state=active]:border-destructive"
101
+ bg: "ds:data-[state=active]:bg-destructive ds:dark:data-[state=active]:bg-destructive ds:data-[state=active]:text-destructive-foreground ds:dark:data-[state=active]:text-destructive-foreground",
102
+ text: "ds:data-[state=active]:text-destructive ds:dark:data-[state=active]:text-destructive",
103
+ border: "ds:data-[state=active]:border-destructive ds:dark:data-[state=active]:border-destructive"
104
104
  },
105
105
  success: {
106
- bg: "data-[state=active]:bg-success dark:data-[state=active]:bg-success data-[state=active]:text-success-foreground dark:data-[state=active]:text-success-foreground",
107
- text: "data-[state=active]:text-success dark:data-[state=active]:text-success",
108
- border: "data-[state=active]:border-success dark:data-[state=active]:border-success"
106
+ bg: "ds:data-[state=active]:bg-success ds:dark:data-[state=active]:bg-success ds:data-[state=active]:text-success-foreground ds:dark:data-[state=active]:text-success-foreground",
107
+ text: "ds:data-[state=active]:text-success ds:dark:data-[state=active]:text-success",
108
+ border: "ds:data-[state=active]:border-success ds:dark:data-[state=active]:border-success"
109
109
  },
110
110
  warning: {
111
- bg: "data-[state=active]:bg-warning dark:data-[state=active]:bg-warning data-[state=active]:text-warning-foreground dark:data-[state=active]:text-warning-foreground",
112
- text: "data-[state=active]:text-warning dark:data-[state=active]:text-warning",
113
- border: "data-[state=active]:border-warning dark:data-[state=active]:border-warning"
111
+ bg: "ds:data-[state=active]:bg-warning ds:dark:data-[state=active]:bg-warning ds:data-[state=active]:text-warning-foreground ds:dark:data-[state=active]:text-warning-foreground",
112
+ text: "ds:data-[state=active]:text-warning ds:dark:data-[state=active]:text-warning",
113
+ border: "ds:data-[state=active]:border-warning ds:dark:data-[state=active]:border-warning"
114
114
  }
115
115
  }[t];
116
- switch (r) {
116
+ switch (a) {
117
117
  case "bordered":
118
118
  case "pills":
119
- return `${a.bg} dark:data-[state=active]:border-transparent`;
119
+ return `${d.bg} ds:dark:data-[state=active]:border-transparent`;
120
120
  case "pill-stroke":
121
- return "data-[state=active]:bg-transparent dark:data-[state=active]:bg-transparent";
121
+ return "ds:data-[state=active]:bg-transparent ds:dark:data-[state=active]:bg-transparent";
122
122
  case "text":
123
- return a.text;
123
+ return d.text;
124
124
  case "outline":
125
- return a.border;
125
+ return d.border;
126
126
  case "underlined":
127
- return s(a.border, a.text);
127
+ return s(d.border, d.text);
128
128
  case "enclosed":
129
- return s(a.border, a.text);
129
+ return s(d.border, d.text);
130
130
  case "enclosed-fill":
131
- return s(a.border, a.text);
131
+ return s(d.border, d.text);
132
132
  default:
133
133
  return "";
134
134
  }
135
- }, Q = (r, t, e) => {
136
- if (r === "underlined")
135
+ }, Q = (a, t, r) => {
136
+ if (a === "underlined")
137
137
  return {
138
- top: "border-b",
139
- bottom: "border-t",
140
- left: "border-r",
141
- right: "border-l"
142
- }[e];
143
- if (r === "enclosed") {
144
- const a = {
145
- top: "border-b",
146
- bottom: "border-t",
147
- left: "border-r",
148
- right: "border-l"
149
- }, d = {
138
+ top: "ds:border-b",
139
+ bottom: "ds:border-t",
140
+ left: "ds:border-r",
141
+ right: "ds:border-l"
142
+ }[r];
143
+ if (a === "enclosed") {
144
+ const d = {
145
+ top: "ds:border-b",
146
+ bottom: "ds:border-t",
147
+ left: "ds:border-r",
148
+ right: "ds:border-l"
149
+ }, e = {
150
150
  top: {
151
- primary: "border-b-primary",
152
- secondary: "border-b-secondary",
153
- muted: "border-b-border",
154
- accent: "border-b-accent",
155
- destructive: "border-b-destructive",
156
- success: "border-b-success",
157
- warning: "border-b-warning"
151
+ primary: "ds:border-b-primary",
152
+ secondary: "ds:border-b-secondary",
153
+ muted: "ds:border-b-border",
154
+ accent: "ds:border-b-accent",
155
+ destructive: "ds:border-b-destructive",
156
+ success: "ds:border-b-success",
157
+ warning: "ds:border-b-warning"
158
158
  },
159
159
  bottom: {
160
- primary: "border-t-primary",
161
- secondary: "border-t-secondary",
162
- muted: "border-t-border",
163
- accent: "border-t-accent",
164
- destructive: "border-t-destructive",
165
- success: "border-t-success",
166
- warning: "border-t-warning"
160
+ primary: "ds:border-t-primary",
161
+ secondary: "ds:border-t-secondary",
162
+ muted: "ds:border-t-border",
163
+ accent: "ds:border-t-accent",
164
+ destructive: "ds:border-t-destructive",
165
+ success: "ds:border-t-success",
166
+ warning: "ds:border-t-warning"
167
167
  },
168
168
  left: {
169
- primary: "border-r-primary",
170
- secondary: "border-r-secondary",
171
- muted: "border-r-border",
172
- accent: "border-r-accent",
173
- destructive: "border-r-destructive",
174
- success: "border-r-success",
175
- warning: "border-r-warning"
169
+ primary: "ds:border-r-primary",
170
+ secondary: "ds:border-r-secondary",
171
+ muted: "ds:border-r-border",
172
+ accent: "ds:border-r-accent",
173
+ destructive: "ds:border-r-destructive",
174
+ success: "ds:border-r-success",
175
+ warning: "ds:border-r-warning"
176
176
  },
177
177
  right: {
178
- primary: "border-l-primary",
179
- secondary: "border-l-secondary",
180
- muted: "border-l-border",
181
- accent: "border-l-accent",
182
- destructive: "border-l-destructive",
183
- success: "border-l-success",
184
- warning: "border-l-warning"
178
+ primary: "ds:border-l-primary",
179
+ secondary: "ds:border-l-secondary",
180
+ muted: "ds:border-l-border",
181
+ accent: "ds:border-l-accent",
182
+ destructive: "ds:border-l-destructive",
183
+ success: "ds:border-l-success",
184
+ warning: "ds:border-l-warning"
185
185
  }
186
186
  };
187
- return `${a[e]} ${d[e][t]}`;
187
+ return `${d[r]} ${e[r][t]}`;
188
188
  }
189
- if (r === "enclosed-fill") {
190
- const a = {
191
- top: "border-b",
192
- bottom: "border-t",
193
- left: "border-r",
194
- right: "border-l"
195
- }, d = {
189
+ if (a === "enclosed-fill") {
190
+ const d = {
191
+ top: "ds:border-b",
192
+ bottom: "ds:border-t",
193
+ left: "ds:border-r",
194
+ right: "ds:border-l"
195
+ }, e = {
196
196
  top: {
197
- primary: "border-b-primary",
198
- secondary: "border-b-secondary",
199
- muted: "border-b-border",
200
- accent: "border-b-accent",
201
- destructive: "border-b-destructive",
202
- success: "border-b-success",
203
- warning: "border-b-warning"
197
+ primary: "ds:border-b-primary",
198
+ secondary: "ds:border-b-secondary",
199
+ muted: "ds:border-b-border",
200
+ accent: "ds:border-b-accent",
201
+ destructive: "ds:border-b-destructive",
202
+ success: "ds:border-b-success",
203
+ warning: "ds:border-b-warning"
204
204
  },
205
205
  bottom: {
206
- primary: "border-t-primary",
207
- secondary: "border-t-secondary",
208
- muted: "border-t-border",
209
- accent: "border-t-accent",
210
- destructive: "border-t-destructive",
211
- success: "border-t-success",
212
- warning: "border-t-warning"
206
+ primary: "ds:border-t-primary",
207
+ secondary: "ds:border-t-secondary",
208
+ muted: "ds:border-t-border",
209
+ accent: "ds:border-t-accent",
210
+ destructive: "ds:border-t-destructive",
211
+ success: "ds:border-t-success",
212
+ warning: "ds:border-t-warning"
213
213
  },
214
214
  left: {
215
- primary: "border-r-primary",
216
- secondary: "border-r-secondary",
217
- muted: "border-r-border",
218
- accent: "border-r-accent",
219
- destructive: "border-r-destructive",
220
- success: "border-r-success",
221
- warning: "border-r-warning"
215
+ primary: "ds:border-r-primary",
216
+ secondary: "ds:border-r-secondary",
217
+ muted: "ds:border-r-border",
218
+ accent: "ds:border-r-accent",
219
+ destructive: "ds:border-r-destructive",
220
+ success: "ds:border-r-success",
221
+ warning: "ds:border-r-warning"
222
222
  },
223
223
  right: {
224
- primary: "border-l-primary",
225
- secondary: "border-l-secondary",
226
- muted: "border-l-border",
227
- accent: "border-l-accent",
228
- destructive: "border-l-destructive",
229
- success: "border-l-success",
230
- warning: "border-l-warning"
224
+ primary: "ds:border-l-primary",
225
+ secondary: "ds:border-l-secondary",
226
+ muted: "ds:border-l-border",
227
+ accent: "ds:border-l-accent",
228
+ destructive: "ds:border-l-destructive",
229
+ success: "ds:border-l-success",
230
+ warning: "ds:border-l-warning"
231
231
  }
232
232
  };
233
- return `${a[e]} ${d[e][t]}`;
233
+ return `${d[r]} ${e[r][t]}`;
234
234
  }
235
235
  return "";
236
- }, R = (r) => {
236
+ }, R = (a) => {
237
237
  const t = "ds:bg-background ds:dark:bg-background ds:rounded-none ds:border-0 ds:border-transparent ds:data-[state=active]:shadow-none";
238
238
  return {
239
- top: `${t} border-b-2 h-full`,
240
- bottom: `${t} border-t-2 h-full`,
241
- left: `${t} border-r-2 w-full`,
242
- right: `${t} border-l-2 w-full`
243
- }[r];
244
- }, S = (r) => {
239
+ top: `${t} ds:border-b-2 ds:h-full`,
240
+ bottom: `${t} ds:border-t-2 ds:h-full`,
241
+ left: `${t} ds:border-r-2 ds:w-full`,
242
+ right: `${t} ds:border-l-2 ds:w-full`
243
+ }[a];
244
+ }, S = (a) => {
245
245
  const t = "ds:bg-background ds:dark:bg-background ds:border ds:border-transparent ds:data-[state=active]:shadow-none ds:rounded-none";
246
246
  return {
247
- top: `${t} rounded-t-md data-[state=active]:border-t data-[state=active]:border-l data-[state=active]:border-r data-[state=active]:border-b-0 data-[state=active]:border-b-background dark:data-[state=active]:border-b-background h-full data-[state=active]:-mb-0.5 data-[state=active]:translate-y-[0px]`,
248
- bottom: `${t} rounded-b-md data-[state=active]:border-b data-[state=active]:border-l data-[state=active]:border-r data-[state=active]:border-t-0 data-[state=active]:border-t-background dark:data-[state=active]:border-t-background h-full data-[state=active]:-mt-0.5 data-[state=active]:translate-y-[0px]`,
249
- left: `${t} rounded-l-md data-[state=active]:border-t data-[state=active]:border-l data-[state=active]:border-b data-[state=active]:border-r-0 data-[state=active]:border-r-background dark:data-[state=active]:border-r-background w-full data-[state=active]:-mr-0.5 data-[state=active]:translate-x-[1px]`,
250
- right: `${t} rounded-r-md data-[state=active]:border-t data-[state=active]:border-r data-[state=active]:border-b data-[state=active]:border-l-0 data-[state=active]:border-l-background dark:data-[state=active]:border-l-background w-full data-[state=active]:-ml-0.5 data-[state=active]:translate-x-[1px]`
251
- }[r];
252
- }, V = (r) => {
247
+ top: `${t} ds:rounded-t-md ds:data-[state=active]:border-t ds:data-[state=active]:border-l ds:data-[state=active]:border-r ds:data-[state=active]:border-b-0 ds:data-[state=active]:border-b-background dark:ds:data-[state=active]:border-b-background ds:h-full ds:data-[state=active]:-mb-0.5 ds:data-[state=active]:translate-y-[0px]`,
248
+ bottom: `${t} ds:rounded-b-md ds:data-[state=active]:border-b ds:data-[state=active]:border-l ds:data-[state=active]:border-r ds:data-[state=active]:border-t-0 ds:data-[state=active]:border-t-background dark:ds:data-[state=active]:border-t-background ds:h-full ds:data-[state=active]:-mt-0.5 ds:data-[state=active]:translate-y-[0px]`,
249
+ left: `${t} ds:rounded-l-md ds:data-[state=active]:border-t ds:data-[state=active]:border-l ds:data-[state=active]:border-b ds:data-[state=active]:border-r-0 ds:data-[state=active]:border-r-background dark:ds:data-[state=active]:border-r-background ds:w-full ds:data-[state=active]:-mr-0.5 ds:data-[state=active]:translate-x-[1px]`,
250
+ right: `${t} ds:rounded-r-md ds:data-[state=active]:border-t ds:data-[state=active]:border-r ds:data-[state=active]:border-b ds:data-[state=active]:border-l-0 ds:data-[state=active]:border-l-background dark:ds:data-[state=active]:border-l-background ds:w-full ds:data-[state=active]:-ml-0.5 ds:data-[state=active]:translate-x-[1px]`
251
+ }[a];
252
+ }, V = (a) => {
253
253
  const t = "ds:bg-muted ds:dark:bg-muted ds:border ds:border-transparent ds:data-[state=active]:bg-background ds:dark:data-[state=active]:bg-background ds:data-[state=active]:shadow-none ds:rounded-none";
254
254
  return {
255
- top: `${t} rounded-t-md data-[state=active]:border-t data-[state=active]:border-l data-[state=active]:border-r data-[state=active]:border-b-0 data-[state=active]:border-b-background dark:data-[state=active]:border-b-background h-full data-[state=active]:-mb-0.5 data-[state=active]:translate-y-[0px]`,
256
- bottom: `${t} rounded-b-md data-[state=active]:border-b data-[state=active]:border-l data-[state=active]:border-r data-[state=active]:border-t-0 data-[state=active]:border-t-background dark:data-[state=active]:border-t-background h-full data-[state=active]:-mt-0.5 data-[state=active]:translate-y-[0px]`,
257
- left: `${t} rounded-l-md data-[state=active]:border-t data-[state=active]:border-l data-[state=active]:border-b data-[state=active]:border-r-0 data-[state=active]:border-r-background dark:data-[state=active]:border-r-background w-full data-[state=active]:-mr-0.5 data-[state=active]:translate-x-[1px]`,
258
- right: `${t} rounded-r-md data-[state=active]:border-t data-[state=active]:border-r data-[state=active]:border-b data-[state=active]:border-l-0 data-[state=active]:border-l-background dark:data-[state=active]:border-l-background w-full data-[state=active]:-ml-0.5 data-[state=active]:translate-x-[1px]`
259
- }[r];
255
+ top: `${t} ds:rounded-t-md ds:data-[state=active]:border-t ds:data-[state=active]:border-l ds:data-[state=active]:border-r ds:data-[state=active]:border-b-0 ds:data-[state=active]:border-b-background dark:ds:data-[state=active]:border-b-background ds:h-full ds:data-[state=active]:-mb-0.5 ds:data-[state=active]:translate-y-[0px]`,
256
+ bottom: `${t} ds:rounded-b-md ds:data-[state=active]:border-b ds:data-[state=active]:border-l ds:data-[state=active]:border-r ds:data-[state=active]:border-t-0 ds:data-[state=active]:border-t-background dark:ds:data-[state=active]:border-t-background ds:h-full ds:data-[state=active]:-mt-0.5 ds:data-[state=active]:translate-y-[0px]`,
257
+ left: `${t} ds:rounded-l-md ds:data-[state=active]:border-t ds:data-[state=active]:border-l ds:data-[state=active]:border-b ds:data-[state=active]:border-r-0 ds:data-[state=active]:border-r-background dark:ds:data-[state=active]:border-r-background ds:w-full ds:data-[state=active]:-mr-0.5 ds:data-[state=active]:translate-x-[1px]`,
258
+ right: `${t} ds:rounded-r-md ds:data-[state=active]:border-t ds:data-[state=active]:border-r ds:data-[state=active]:border-b ds:data-[state=active]:border-l-0 ds:data-[state=active]:border-l-background dark:ds:data-[state=active]:border-l-background ds:w-full ds:data-[state=active]:-ml-0.5 ds:data-[state=active]:translate-x-[1px]`
259
+ }[a];
260
260
  }, W = {
261
261
  // Solid: Default style (muted background, active has white background)
262
262
  solid: {
@@ -1 +1 @@
1
- {"version":3,"file":"classes.js","sources":["../../../../src/components/Tabs/classes.ts"],"sourcesContent":["import { cn } from \"@dsui/ui/index\";\nimport type {\n TabAlignment,\n TabColor,\n TabPosition,\n TabSize,\n TabVariant,\n} from \"./types\";\n\nexport const sizeClasses: Record<\n TabSize,\n { horizontal: string; vertical: string }\n> = {\n sm: {\n horizontal: \"ds:text-xs ds:h-7 ds:[&>button]:px-2\",\n vertical: \"ds:text-xs ds:[&>button]:py-0.5\",\n },\n md: {\n horizontal: \"ds:text-sm ds:h-9 ds:[&>button]:px-3\",\n vertical: \"ds:text-sm ds:[&>button]:py-1\",\n },\n lg: {\n horizontal: \"ds:text-base ds:h-11 ds:[&>button]:px-4\",\n vertical: \"ds:text-base ds:[&>button]:py-1.5\",\n },\n};\n\nexport const alignmentClasses: Record<\n TabAlignment,\n { horizontal: string; vertical: string }\n> = {\n start: {\n horizontal: \"ds:justify-start\",\n vertical: \"ds:items-start\",\n },\n center: {\n horizontal: \"ds:justify-center\",\n vertical: \"ds:items-center\",\n },\n end: {\n horizontal: \"ds:justify-end\",\n vertical: \"ds:items-end\",\n },\n};\n\nexport const positionClasses: Record<\n TabPosition,\n { root: string; list: string }\n> = {\n top: {\n root: \"ds:flex ds:flex-col\",\n list: \"ds:flex-row\",\n },\n bottom: {\n root: \"ds:flex ds:flex-col-reverse\",\n list: \"ds:flex-row\",\n },\n left: {\n root: \"ds:flex ds:flex-row\",\n list: \"ds:flex-col ds:h-fit\",\n },\n right: {\n root: \"ds:flex ds:flex-row-reverse\",\n list: \"ds:flex-col ds:h-fit\",\n },\n};\n\n// Color classes for backgrounds, text, and borders\nexport const getColorClasses = (\n variant: TabVariant,\n color: TabColor\n): string => {\n // Helper to generate color-specific classes based on variant\n const colorMap: Record<\n TabColor,\n { bg: string; text: string; border: string }\n > = {\n primary: {\n bg: \"data-[state=active]:bg-primary dark:data-[state=active]:bg-primary data-[state=active]:text-primary-foreground dark:data-[state=active]:text-primary-foreground\",\n text: \"data-[state=active]:text-primary dark:data-[state=active]:text-primary\",\n border:\n \"data-[state=active]:border-primary dark:data-[state=active]:border-primary\",\n },\n secondary: {\n bg: \"data-[state=active]:bg-secondary dark:data-[state=active]:bg-secondary data-[state=active]:text-secondary-foreground dark:data-[state=active]:text-secondary-foreground\",\n text: \"data-[state=active]:text-secondary dark:data-[state=active]:text-secondary\",\n border:\n \"data-[state=active]:border-secondary dark:data-[state=active]:border-secondary\",\n },\n muted: {\n bg: \"data-[state=active]:bg-muted dark:data-[state=active]:bg-muted data-[state=active]:text-muted-foreground dark:data-[state=active]:text-muted-foreground\",\n text: \"data-[state=active]:text-muted-foreground dark:data-[state=active]:text-muted-foreground\",\n border:\n \"data-[state=active]:border-border dark:data-[state=active]:border-border\",\n },\n accent: {\n bg: \"data-[state=active]:bg-accent dark:data-[state=active]:bg-accent data-[state=active]:text-accent-foreground dark:data-[state=active]:text-accent-foreground\",\n text: \"data-[state=active]:text-accent-foreground dark:data-[state=active]:text-accent-foreground\",\n border:\n \"data-[state=active]:border-accent dark:data-[state=active]:border-accent\",\n },\n destructive: {\n bg: \"data-[state=active]:bg-destructive dark:data-[state=active]:bg-destructive data-[state=active]:text-destructive-foreground dark:data-[state=active]:text-destructive-foreground\",\n text: \"data-[state=active]:text-destructive dark:data-[state=active]:text-destructive\",\n border:\n \"data-[state=active]:border-destructive dark:data-[state=active]:border-destructive\",\n },\n success: {\n bg: \"data-[state=active]:bg-success dark:data-[state=active]:bg-success data-[state=active]:text-success-foreground dark:data-[state=active]:text-success-foreground\",\n text: \"data-[state=active]:text-success dark:data-[state=active]:text-success\",\n border:\n \"data-[state=active]:border-success dark:data-[state=active]:border-success\",\n },\n warning: {\n bg: \"data-[state=active]:bg-warning dark:data-[state=active]:bg-warning data-[state=active]:text-warning-foreground dark:data-[state=active]:text-warning-foreground\",\n text: \"data-[state=active]:text-warning dark:data-[state=active]:text-warning\",\n border:\n \"data-[state=active]:border-warning dark:data-[state=active]:border-warning\",\n },\n };\n\n const colors = colorMap[color];\n\n switch (variant) {\n case \"bordered\":\n case \"pills\":\n // Background color on active state\n return `${colors.bg} dark:data-[state=active]:border-transparent`;\n case \"pill-stroke\":\n // Border color on active state, no background\n return `data-[state=active]:bg-transparent dark:data-[state=active]:bg-transparent`;\n case \"text\":\n // Text color only on active state\n return colors.text;\n case \"outline\":\n // Border color on active state\n return colors.border;\n case \"underlined\":\n // Bottom/side border color on active state\n return cn(colors.border, colors.text);\n case \"enclosed\":\n // Border color on active state (except bottom/side)\n return cn(colors.border, colors.text);\n case \"enclosed-fill\":\n // Border color on active state (except bottom/side)\n return cn(colors.border, colors.text);\n default:\n return \"\";\n }\n};\n\n// Get TabsList border classes based on position\nexport const getListBorderClasses = (\n variant: TabVariant,\n color: TabColor,\n tabPosition: TabPosition\n): string => {\n if (variant === \"underlined\") {\n // Underlined variant: border on the opposite side from where tabs connect\n const borderMap: Record<TabPosition, string> = {\n top: \"border-b\",\n bottom: \"border-t\",\n left: \"border-r\",\n right: \"border-l\",\n };\n return borderMap[tabPosition];\n }\n\n if (variant === \"enclosed\") {\n // Enclosed variant: colored border on the opposite side\n const borderBaseMap: Record<TabPosition, string> = {\n top: \"border-b\",\n bottom: \"border-t\",\n left: \"border-r\",\n right: \"border-l\",\n };\n\n const colorBorderMap: Record<TabPosition, Record<TabColor, string>> = {\n top: {\n primary: \"border-b-primary\",\n secondary: \"border-b-secondary\",\n muted: \"border-b-border\",\n accent: \"border-b-accent\",\n destructive: \"border-b-destructive\",\n success: \"border-b-success\",\n warning: \"border-b-warning\",\n },\n bottom: {\n primary: \"border-t-primary\",\n secondary: \"border-t-secondary\",\n muted: \"border-t-border\",\n accent: \"border-t-accent\",\n destructive: \"border-t-destructive\",\n success: \"border-t-success\",\n warning: \"border-t-warning\",\n },\n left: {\n primary: \"border-r-primary\",\n secondary: \"border-r-secondary\",\n muted: \"border-r-border\",\n accent: \"border-r-accent\",\n destructive: \"border-r-destructive\",\n success: \"border-r-success\",\n warning: \"border-r-warning\",\n },\n right: {\n primary: \"border-l-primary\",\n secondary: \"border-l-secondary\",\n muted: \"border-l-border\",\n accent: \"border-l-accent\",\n destructive: \"border-l-destructive\",\n success: \"border-l-success\",\n warning: \"border-l-warning\",\n },\n };\n return `${borderBaseMap[tabPosition]} ${colorBorderMap[tabPosition][color]}`;\n }\n\n if (variant === \"enclosed-fill\") {\n // Enclosed-fill variant: colored border on the opposite side\n const borderBaseMap: Record<TabPosition, string> = {\n top: \"border-b\",\n bottom: \"border-t\",\n left: \"border-r\",\n right: \"border-l\",\n };\n\n const colorBorderMap: Record<TabPosition, Record<TabColor, string>> = {\n top: {\n primary: \"border-b-primary\",\n secondary: \"border-b-secondary\",\n muted: \"border-b-border\",\n accent: \"border-b-accent\",\n destructive: \"border-b-destructive\",\n success: \"border-b-success\",\n warning: \"border-b-warning\",\n },\n bottom: {\n primary: \"border-t-primary\",\n secondary: \"border-t-secondary\",\n muted: \"border-t-border\",\n accent: \"border-t-accent\",\n destructive: \"border-t-destructive\",\n success: \"border-t-success\",\n warning: \"border-t-warning\",\n },\n left: {\n primary: \"border-r-primary\",\n secondary: \"border-r-secondary\",\n muted: \"border-r-border\",\n accent: \"border-r-accent\",\n destructive: \"border-r-destructive\",\n success: \"border-r-success\",\n warning: \"border-r-warning\",\n },\n right: {\n primary: \"border-l-primary\",\n secondary: \"border-l-secondary\",\n muted: \"border-l-border\",\n accent: \"border-l-accent\",\n destructive: \"border-l-destructive\",\n success: \"border-l-success\",\n warning: \"border-l-warning\",\n },\n };\n return `${borderBaseMap[tabPosition]} ${colorBorderMap[tabPosition][color]}`;\n }\n\n return \"\";\n};\n\n// Get trigger border classes for underlined variant based on position\nexport const getUnderlinedTriggerClasses = (\n tabPosition: TabPosition\n): string => {\n const baseClasses =\n \"ds:bg-background ds:dark:bg-background ds:rounded-none ds:border-0 ds:border-transparent ds:data-[state=active]:shadow-none\";\n\n const positionMap: Record<TabPosition, string> = {\n top: `${baseClasses} border-b-2 h-full`,\n bottom: `${baseClasses} border-t-2 h-full`,\n left: `${baseClasses} border-r-2 w-full`,\n right: `${baseClasses} border-l-2 w-full`,\n };\n\n return positionMap[tabPosition];\n};\n\n// Get trigger border classes for enclosed variant based on position\nexport const getEnclosedTriggerClasses = (tabPosition: TabPosition): string => {\n const baseClasses =\n \"ds:bg-background ds:dark:bg-background ds:border ds:border-transparent ds:data-[state=active]:shadow-none ds:rounded-none\";\n\n const positionMap: Record<TabPosition, string> = {\n top: `${baseClasses} rounded-t-md data-[state=active]:border-t data-[state=active]:border-l data-[state=active]:border-r data-[state=active]:border-b-0 data-[state=active]:border-b-background dark:data-[state=active]:border-b-background h-full data-[state=active]:-mb-0.5 data-[state=active]:translate-y-[0px]`,\n bottom: `${baseClasses} rounded-b-md data-[state=active]:border-b data-[state=active]:border-l data-[state=active]:border-r data-[state=active]:border-t-0 data-[state=active]:border-t-background dark:data-[state=active]:border-t-background h-full data-[state=active]:-mt-0.5 data-[state=active]:translate-y-[0px]`,\n left: `${baseClasses} rounded-l-md data-[state=active]:border-t data-[state=active]:border-l data-[state=active]:border-b data-[state=active]:border-r-0 data-[state=active]:border-r-background dark:data-[state=active]:border-r-background w-full data-[state=active]:-mr-0.5 data-[state=active]:translate-x-[1px]`,\n right: `${baseClasses} rounded-r-md data-[state=active]:border-t data-[state=active]:border-r data-[state=active]:border-b data-[state=active]:border-l-0 data-[state=active]:border-l-background dark:data-[state=active]:border-l-background w-full data-[state=active]:-ml-0.5 data-[state=active]:translate-x-[1px]`,\n };\n\n return positionMap[tabPosition];\n};\n\n// Get trigger border classes for enclosed-fill variant based on position\nexport const getEnclosedFillTriggerClasses = (\n tabPosition: TabPosition\n): string => {\n const baseClasses =\n \"ds:bg-muted ds:dark:bg-muted ds:border ds:border-transparent ds:data-[state=active]:bg-background ds:dark:data-[state=active]:bg-background ds:data-[state=active]:shadow-none ds:rounded-none\";\n\n const positionMap: Record<TabPosition, string> = {\n top: `${baseClasses} rounded-t-md data-[state=active]:border-t data-[state=active]:border-l data-[state=active]:border-r data-[state=active]:border-b-0 data-[state=active]:border-b-background dark:data-[state=active]:border-b-background h-full data-[state=active]:-mb-0.5 data-[state=active]:translate-y-[0px]`,\n bottom: `${baseClasses} rounded-b-md data-[state=active]:border-b data-[state=active]:border-l data-[state=active]:border-r data-[state=active]:border-t-0 data-[state=active]:border-t-background dark:data-[state=active]:border-t-background h-full data-[state=active]:-mt-0.5 data-[state=active]:translate-y-[0px]`,\n left: `${baseClasses} rounded-l-md data-[state=active]:border-t data-[state=active]:border-l data-[state=active]:border-b data-[state=active]:border-r-0 data-[state=active]:border-r-background dark:data-[state=active]:border-r-background w-full data-[state=active]:-mr-0.5 data-[state=active]:translate-x-[1px]`,\n right: `${baseClasses} rounded-r-md data-[state=active]:border-t data-[state=active]:border-r data-[state=active]:border-b data-[state=active]:border-l-0 data-[state=active]:border-l-background dark:data-[state=active]:border-l-background w-full data-[state=active]:-ml-0.5 data-[state=active]:translate-x-[1px]`,\n };\n\n return positionMap[tabPosition];\n};\n\nexport const variantClasses: Record<\n TabVariant,\n {\n list: { horizontal: string; vertical: string };\n trigger: { horizontal: string; vertical: string };\n }\n> = {\n // Solid: Default style (muted background, active has white background)\n solid: {\n list: {\n horizontal: \"ds:bg-muted ds:dark:bg-muted ds:rounded-lg ds:p-[3px]\",\n vertical: \"ds:bg-muted ds:dark:bg-muted ds:rounded-lg ds:p-[3px]\",\n },\n trigger: {\n horizontal: \"\",\n vertical: \"\",\n },\n },\n\n // Bordered: With border on group and colored active background\n bordered: {\n list: {\n horizontal:\n \"ds:bg-background ds:dark:bg-background ds:border ds:p-1 ds:gap-1 ds:rounded-lg\",\n vertical: \"ds:bg-background ds:dark:bg-background ds:border ds:p-1 ds:gap-1 ds:rounded-lg\",\n },\n trigger: {\n horizontal: \"\",\n vertical: \"\",\n },\n },\n\n // Pills: No border/background on group, colored background on active button\n pills: {\n list: {\n horizontal: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n vertical: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n },\n trigger: {\n horizontal: \"\",\n vertical: \"\",\n },\n },\n\n // Pill-stroke: Pill-style with stroke border, stronger border radius, no background on active\n \"pill-stroke\": {\n list: {\n horizontal: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n vertical: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n },\n trigger: {\n horizontal: \"ds:border ds:border-border ds:rounded-full ds:bg-transparent\",\n vertical: \"ds:border ds:border-border ds:rounded-full ds:bg-transparent\",\n },\n },\n\n // Text: No border/background on group, colored text on active button\n text: {\n list: {\n horizontal: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n vertical: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n },\n trigger: {\n horizontal:\n \"ds:bg-transparent ds:data-[state=active]:bg-transparent ds:data-[state=active]:shadow-none\",\n vertical:\n \"ds:bg-transparent ds:data-[state=active]:bg-transparent ds:data-[state=active]:shadow-none\",\n },\n },\n\n // Outline: No border/background on group, colored border (stroke) on active button\n outline: {\n list: {\n horizontal: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n vertical: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n },\n trigger: {\n horizontal:\n \"ds:bg-transparent ds:border ds:border-transparent ds:data-[state=active]:bg-transparent ds:data-[state=active]:shadow-none\",\n vertical:\n \"ds:bg-transparent ds:border ds:border-transparent ds:data-[state=active]:bg-transparent ds:data-[state=active]:shadow-none\",\n },\n },\n\n // Underlined: Bottom border on group, bottom border on active tab\n underlined: {\n list: {\n horizontal: \"ds:bg-background ds:dark:bg-background ds:rounded-none ds:p-0\",\n vertical: \"ds:bg-background ds:dark:bg-background ds:rounded-none ds:p-0\",\n },\n trigger: {\n horizontal: \"\", // Will be set dynamically\n vertical: \"\", // Will be set dynamically\n },\n },\n\n // Enclosed: Border on active tab except bottom border (tab style)\n enclosed: {\n list: {\n horizontal:\n \"ds:bg-background ds:dark:bg-background ds:justify-start ds:rounded-none ds:p-0\",\n vertical: \"ds:bg-background ds:dark:bg-background ds:items-start ds:rounded-none ds:p-0\",\n },\n trigger: {\n horizontal: \"\", // Will be set dynamically\n vertical: \"\", // Will be set dynamically\n },\n },\n\n // Enclosed-fill: Border on active tab except bottom border with background on inactive tabs\n \"enclosed-fill\": {\n list: {\n horizontal:\n \"ds:bg-background ds:dark:bg-background ds:justify-start ds:rounded-none ds:p-0 ds:gap-1\",\n vertical:\n \"ds:bg-background ds:dark:bg-background ds:items-start ds:rounded-none ds:p-0 ds:gap-1\",\n },\n trigger: {\n horizontal: \"\", // Will be set dynamically\n vertical: \"\", // Will be set dynamically\n },\n },\n};\n"],"names":["sizeClasses","alignmentClasses","positionClasses","getColorClasses","variant","color","colors","cn","getListBorderClasses","tabPosition","borderBaseMap","colorBorderMap","getUnderlinedTriggerClasses","baseClasses","getEnclosedTriggerClasses","getEnclosedFillTriggerClasses","variantClasses"],"mappings":"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"}
1
+ {"version":3,"file":"classes.js","sources":["../../../../src/components/Tabs/classes.ts"],"sourcesContent":["import { cn } from \"@dsui/ui/index\";\nimport type {\n TabAlignment,\n TabColor,\n TabPosition,\n TabSize,\n TabVariant,\n} from \"./types\";\n\nexport const sizeClasses: Record<\n TabSize,\n { horizontal: string; vertical: string }\n> = {\n sm: {\n horizontal: \"ds:text-xs ds:h-7 ds:[&>button]:px-2\",\n vertical: \"ds:text-xs ds:[&>button]:py-0.5\",\n },\n md: {\n horizontal: \"ds:text-sm ds:h-9 ds:[&>button]:px-3\",\n vertical: \"ds:text-sm ds:[&>button]:py-1\",\n },\n lg: {\n horizontal: \"ds:text-base ds:h-11 ds:[&>button]:px-4\",\n vertical: \"ds:text-base ds:[&>button]:py-1.5\",\n },\n};\n\nexport const alignmentClasses: Record<\n TabAlignment,\n { horizontal: string; vertical: string }\n> = {\n start: {\n horizontal: \"ds:justify-start\",\n vertical: \"ds:items-start\",\n },\n center: {\n horizontal: \"ds:justify-center\",\n vertical: \"ds:items-center\",\n },\n end: {\n horizontal: \"ds:justify-end\",\n vertical: \"ds:items-end\",\n },\n};\n\nexport const positionClasses: Record<\n TabPosition,\n { root: string; list: string }\n> = {\n top: {\n root: \"ds:flex ds:flex-col\",\n list: \"ds:flex-row\",\n },\n bottom: {\n root: \"ds:flex ds:flex-col-reverse\",\n list: \"ds:flex-row\",\n },\n left: {\n root: \"ds:flex ds:flex-row\",\n list: \"ds:flex-col ds:h-fit\",\n },\n right: {\n root: \"ds:flex ds:flex-row-reverse\",\n list: \"ds:flex-col ds:h-fit\",\n },\n};\n\n// Color classes for backgrounds, text, and borders\nexport const getColorClasses = (\n variant: TabVariant,\n color: TabColor\n): string => {\n // Helper to generate color-specific classes based on variant\n const colorMap: Record<\n TabColor,\n { bg: string; text: string; border: string }\n > = {\n primary: {\n bg: \"ds:data-[state=active]:bg-primary ds:dark:data-[state=active]:bg-primary ds:data-[state=active]:text-primary-foreground ds:dark:data-[state=active]:text-primary-foreground\",\n text: \"ds:data-[state=active]:text-primary ds:dark:data-[state=active]:text-primary\",\n border:\n \"ds:data-[state=active]:border-primary ds:dark:data-[state=active]:border-primary\",\n },\n secondary: {\n bg: \"ds:data-[state=active]:bg-secondary ds:dark:data-[state=active]:bg-secondary ds:data-[state=active]:text-secondary-foreground ds:dark:data-[state=active]:text-secondary-foreground\",\n text: \"ds:data-[state=active]:text-secondary ds:dark:data-[state=active]:text-secondary\",\n border:\n \"ds:data-[state=active]:border-secondary ds:dark:data-[state=active]:border-secondary\",\n },\n muted: {\n bg: \"ds:data-[state=active]:bg-muted ds:dark:data-[state=active]:bg-muted ds:data-[state=active]:text-muted-foreground ds:dark:data-[state=active]:text-muted-foreground\",\n text: \"ds:data-[state=active]:text-muted-foreground ds:dark:data-[state=active]:text-muted-foreground\",\n border:\n \"ds:data-[state=active]:border-border ds:dark:data-[state=active]:border-border\",\n },\n accent: {\n bg: \"ds:data-[state=active]:bg-accent ds:dark:data-[state=active]:bg-accent ds:data-[state=active]:text-accent-foreground ds:dark:data-[state=active]:text-accent-foreground\",\n text: \"ds:data-[state=active]:text-accent-foreground ds:dark:data-[state=active]:text-accent-foreground\",\n border:\n \"ds:data-[state=active]:border-accent ds:dark:data-[state=active]:border-accent\",\n },\n destructive: {\n bg: \"ds:data-[state=active]:bg-destructive ds:dark:data-[state=active]:bg-destructive ds:data-[state=active]:text-destructive-foreground ds:dark:data-[state=active]:text-destructive-foreground\",\n text: \"ds:data-[state=active]:text-destructive ds:dark:data-[state=active]:text-destructive\",\n border:\n \"ds:data-[state=active]:border-destructive ds:dark:data-[state=active]:border-destructive\",\n },\n success: {\n bg: \"ds:data-[state=active]:bg-success ds:dark:data-[state=active]:bg-success ds:data-[state=active]:text-success-foreground ds:dark:data-[state=active]:text-success-foreground\",\n text: \"ds:data-[state=active]:text-success ds:dark:data-[state=active]:text-success\",\n border:\n \"ds:data-[state=active]:border-success ds:dark:data-[state=active]:border-success\",\n },\n warning: {\n bg: \"ds:data-[state=active]:bg-warning ds:dark:data-[state=active]:bg-warning ds:data-[state=active]:text-warning-foreground ds:dark:data-[state=active]:text-warning-foreground\",\n text: \"ds:data-[state=active]:text-warning ds:dark:data-[state=active]:text-warning\",\n border:\n \"ds:data-[state=active]:border-warning ds:dark:data-[state=active]:border-warning\",\n },\n };\n\n const colors = colorMap[color];\n\n switch (variant) {\n case \"bordered\":\n case \"pills\":\n // Background color on active state\n return `${colors.bg} ds:dark:data-[state=active]:border-transparent`;\n case \"pill-stroke\":\n // Border color on active state, no background\n return `ds:data-[state=active]:bg-transparent ds:dark:data-[state=active]:bg-transparent`;\n case \"text\":\n // Text color only on active state\n return colors.text;\n case \"outline\":\n // Border color on active state\n return colors.border;\n case \"underlined\":\n // Bottom/side border color on active state\n return cn(colors.border, colors.text);\n case \"enclosed\":\n // Border color on active state (except bottom/side)\n return cn(colors.border, colors.text);\n case \"enclosed-fill\":\n // Border color on active state (except bottom/side)\n return cn(colors.border, colors.text);\n default:\n return \"\";\n }\n};\n\n// Get TabsList border classes based on position\nexport const getListBorderClasses = (\n variant: TabVariant,\n color: TabColor,\n tabPosition: TabPosition\n): string => {\n if (variant === \"underlined\") {\n // Underlined variant: border on the opposite side from where tabs connect\n const borderMap: Record<TabPosition, string> = {\n top: \"ds:border-b\",\n bottom: \"ds:border-t\",\n left: \"ds:border-r\",\n right: \"ds:border-l\",\n };\n return borderMap[tabPosition];\n }\n\n if (variant === \"enclosed\") {\n // Enclosed variant: colored border on the opposite side\n const borderBaseMap: Record<TabPosition, string> = {\n top: \"ds:border-b\",\n bottom: \"ds:border-t\",\n left: \"ds:border-r\",\n right: \"ds:border-l\",\n };\n\n const colorBorderMap: Record<TabPosition, Record<TabColor, string>> = {\n top: {\n primary: \"ds:border-b-primary\",\n secondary: \"ds:border-b-secondary\",\n muted: \"ds:border-b-border\",\n accent: \"ds:border-b-accent\",\n destructive: \"ds:border-b-destructive\",\n success: \"ds:border-b-success\",\n warning: \"ds:border-b-warning\",\n },\n bottom: {\n primary: \"ds:border-t-primary\",\n secondary: \"ds:border-t-secondary\",\n muted: \"ds:border-t-border\",\n accent: \"ds:border-t-accent\",\n destructive: \"ds:border-t-destructive\",\n success: \"ds:border-t-success\",\n warning: \"ds:border-t-warning\",\n },\n left: {\n primary: \"ds:border-r-primary\",\n secondary: \"ds:border-r-secondary\",\n muted: \"ds:border-r-border\",\n accent: \"ds:border-r-accent\",\n destructive: \"ds:border-r-destructive\",\n success: \"ds:border-r-success\",\n warning: \"ds:border-r-warning\",\n },\n right: {\n primary: \"ds:border-l-primary\",\n secondary: \"ds:border-l-secondary\",\n muted: \"ds:border-l-border\",\n accent: \"ds:border-l-accent\",\n destructive: \"ds:border-l-destructive\",\n success: \"ds:border-l-success\",\n warning: \"ds:border-l-warning\",\n },\n };\n return `${borderBaseMap[tabPosition]} ${colorBorderMap[tabPosition][color]}`;\n }\n\n if (variant === \"enclosed-fill\") {\n // Enclosed-fill variant: colored border on the opposite side\n const borderBaseMap: Record<TabPosition, string> = {\n top: \"ds:border-b\",\n bottom: \"ds:border-t\",\n left: \"ds:border-r\",\n right: \"ds:border-l\",\n };\n\n const colorBorderMap: Record<TabPosition, Record<TabColor, string>> = {\n top: {\n primary: \"ds:border-b-primary\",\n secondary: \"ds:border-b-secondary\",\n muted: \"ds:border-b-border\",\n accent: \"ds:border-b-accent\",\n destructive: \"ds:border-b-destructive\",\n success: \"ds:border-b-success\",\n warning: \"ds:border-b-warning\",\n },\n bottom: {\n primary: \"ds:border-t-primary\",\n secondary: \"ds:border-t-secondary\",\n muted: \"ds:border-t-border\",\n accent: \"ds:border-t-accent\",\n destructive: \"ds:border-t-destructive\",\n success: \"ds:border-t-success\",\n warning: \"ds:border-t-warning\",\n },\n left: {\n primary: \"ds:border-r-primary\",\n secondary: \"ds:border-r-secondary\",\n muted: \"ds:border-r-border\",\n accent: \"ds:border-r-accent\",\n destructive: \"ds:border-r-destructive\",\n success: \"ds:border-r-success\",\n warning: \"ds:border-r-warning\",\n },\n right: {\n primary: \"ds:border-l-primary\",\n secondary: \"ds:border-l-secondary\",\n muted: \"ds:border-l-border\",\n accent: \"ds:border-l-accent\",\n destructive: \"ds:border-l-destructive\",\n success: \"ds:border-l-success\",\n warning: \"ds:border-l-warning\",\n },\n };\n return `${borderBaseMap[tabPosition]} ${colorBorderMap[tabPosition][color]}`;\n }\n\n return \"\";\n};\n\n// Get trigger border classes for underlined variant based on position\nexport const getUnderlinedTriggerClasses = (\n tabPosition: TabPosition\n): string => {\n const baseClasses =\n \"ds:bg-background ds:dark:bg-background ds:rounded-none ds:border-0 ds:border-transparent ds:data-[state=active]:shadow-none\";\n\n const positionMap: Record<TabPosition, string> = {\n top: `${baseClasses} ds:border-b-2 ds:h-full`,\n bottom: `${baseClasses} ds:border-t-2 ds:h-full`,\n left: `${baseClasses} ds:border-r-2 ds:w-full`,\n right: `${baseClasses} ds:border-l-2 ds:w-full`,\n };\n\n return positionMap[tabPosition];\n};\n\n// Get trigger border classes for enclosed variant based on position\nexport const getEnclosedTriggerClasses = (tabPosition: TabPosition): string => {\n const baseClasses =\n \"ds:bg-background ds:dark:bg-background ds:border ds:border-transparent ds:data-[state=active]:shadow-none ds:rounded-none\";\n\n const positionMap: Record<TabPosition, string> = {\n top: `${baseClasses} ds:rounded-t-md ds:data-[state=active]:border-t ds:data-[state=active]:border-l ds:data-[state=active]:border-r ds:data-[state=active]:border-b-0 ds:data-[state=active]:border-b-background dark:ds:data-[state=active]:border-b-background ds:h-full ds:data-[state=active]:-mb-0.5 ds:data-[state=active]:translate-y-[0px]`,\n bottom: `${baseClasses} ds:rounded-b-md ds:data-[state=active]:border-b ds:data-[state=active]:border-l ds:data-[state=active]:border-r ds:data-[state=active]:border-t-0 ds:data-[state=active]:border-t-background dark:ds:data-[state=active]:border-t-background ds:h-full ds:data-[state=active]:-mt-0.5 ds:data-[state=active]:translate-y-[0px]`,\n left: `${baseClasses} ds:rounded-l-md ds:data-[state=active]:border-t ds:data-[state=active]:border-l ds:data-[state=active]:border-b ds:data-[state=active]:border-r-0 ds:data-[state=active]:border-r-background dark:ds:data-[state=active]:border-r-background ds:w-full ds:data-[state=active]:-mr-0.5 ds:data-[state=active]:translate-x-[1px]`,\n right: `${baseClasses} ds:rounded-r-md ds:data-[state=active]:border-t ds:data-[state=active]:border-r ds:data-[state=active]:border-b ds:data-[state=active]:border-l-0 ds:data-[state=active]:border-l-background dark:ds:data-[state=active]:border-l-background ds:w-full ds:data-[state=active]:-ml-0.5 ds:data-[state=active]:translate-x-[1px]`,\n };\n\n return positionMap[tabPosition];\n};\n\n// Get trigger border classes for enclosed-fill variant based on position\nexport const getEnclosedFillTriggerClasses = (\n tabPosition: TabPosition\n): string => {\n const baseClasses =\n \"ds:bg-muted ds:dark:bg-muted ds:border ds:border-transparent ds:data-[state=active]:bg-background ds:dark:data-[state=active]:bg-background ds:data-[state=active]:shadow-none ds:rounded-none\";\n\n const positionMap: Record<TabPosition, string> = {\n top: `${baseClasses} ds:rounded-t-md ds:data-[state=active]:border-t ds:data-[state=active]:border-l ds:data-[state=active]:border-r ds:data-[state=active]:border-b-0 ds:data-[state=active]:border-b-background dark:ds:data-[state=active]:border-b-background ds:h-full ds:data-[state=active]:-mb-0.5 ds:data-[state=active]:translate-y-[0px]`,\n bottom: `${baseClasses} ds:rounded-b-md ds:data-[state=active]:border-b ds:data-[state=active]:border-l ds:data-[state=active]:border-r ds:data-[state=active]:border-t-0 ds:data-[state=active]:border-t-background dark:ds:data-[state=active]:border-t-background ds:h-full ds:data-[state=active]:-mt-0.5 ds:data-[state=active]:translate-y-[0px]`,\n left: `${baseClasses} ds:rounded-l-md ds:data-[state=active]:border-t ds:data-[state=active]:border-l ds:data-[state=active]:border-b ds:data-[state=active]:border-r-0 ds:data-[state=active]:border-r-background dark:ds:data-[state=active]:border-r-background ds:w-full ds:data-[state=active]:-mr-0.5 ds:data-[state=active]:translate-x-[1px]`,\n right: `${baseClasses} ds:rounded-r-md ds:data-[state=active]:border-t ds:data-[state=active]:border-r ds:data-[state=active]:border-b ds:data-[state=active]:border-l-0 ds:data-[state=active]:border-l-background dark:ds:data-[state=active]:border-l-background ds:w-full ds:data-[state=active]:-ml-0.5 ds:data-[state=active]:translate-x-[1px]`,\n };\n\n return positionMap[tabPosition];\n};\n\nexport const variantClasses: Record<\n TabVariant,\n {\n list: { horizontal: string; vertical: string };\n trigger: { horizontal: string; vertical: string };\n }\n> = {\n // Solid: Default style (muted background, active has white background)\n solid: {\n list: {\n horizontal: \"ds:bg-muted ds:dark:bg-muted ds:rounded-lg ds:p-[3px]\",\n vertical: \"ds:bg-muted ds:dark:bg-muted ds:rounded-lg ds:p-[3px]\",\n },\n trigger: {\n horizontal: \"\",\n vertical: \"\",\n },\n },\n\n // Bordered: With border on group and colored active background\n bordered: {\n list: {\n horizontal:\n \"ds:bg-background ds:dark:bg-background ds:border ds:p-1 ds:gap-1 ds:rounded-lg\",\n vertical: \"ds:bg-background ds:dark:bg-background ds:border ds:p-1 ds:gap-1 ds:rounded-lg\",\n },\n trigger: {\n horizontal: \"\",\n vertical: \"\",\n },\n },\n\n // Pills: No border/background on group, colored background on active button\n pills: {\n list: {\n horizontal: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n vertical: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n },\n trigger: {\n horizontal: \"\",\n vertical: \"\",\n },\n },\n\n // Pill-stroke: Pill-style with stroke border, stronger border radius, no background on active\n \"pill-stroke\": {\n list: {\n horizontal: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n vertical: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n },\n trigger: {\n horizontal: \"ds:border ds:border-border ds:rounded-full ds:bg-transparent\",\n vertical: \"ds:border ds:border-border ds:rounded-full ds:bg-transparent\",\n },\n },\n\n // Text: No border/background on group, colored text on active button\n text: {\n list: {\n horizontal: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n vertical: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n },\n trigger: {\n horizontal:\n \"ds:bg-transparent ds:data-[state=active]:bg-transparent ds:data-[state=active]:shadow-none\",\n vertical:\n \"ds:bg-transparent ds:data-[state=active]:bg-transparent ds:data-[state=active]:shadow-none\",\n },\n },\n\n // Outline: No border/background on group, colored border (stroke) on active button\n outline: {\n list: {\n horizontal: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n vertical: \"ds:bg-transparent ds:p-0 ds:gap-1\",\n },\n trigger: {\n horizontal:\n \"ds:bg-transparent ds:border ds:border-transparent ds:data-[state=active]:bg-transparent ds:data-[state=active]:shadow-none\",\n vertical:\n \"ds:bg-transparent ds:border ds:border-transparent ds:data-[state=active]:bg-transparent ds:data-[state=active]:shadow-none\",\n },\n },\n\n // Underlined: Bottom border on group, bottom border on active tab\n underlined: {\n list: {\n horizontal: \"ds:bg-background ds:dark:bg-background ds:rounded-none ds:p-0\",\n vertical: \"ds:bg-background ds:dark:bg-background ds:rounded-none ds:p-0\",\n },\n trigger: {\n horizontal: \"\", // Will be set dynamically\n vertical: \"\", // Will be set dynamically\n },\n },\n\n // Enclosed: Border on active tab except bottom border (tab style)\n enclosed: {\n list: {\n horizontal:\n \"ds:bg-background ds:dark:bg-background ds:justify-start ds:rounded-none ds:p-0\",\n vertical: \"ds:bg-background ds:dark:bg-background ds:items-start ds:rounded-none ds:p-0\",\n },\n trigger: {\n horizontal: \"\", // Will be set dynamically\n vertical: \"\", // Will be set dynamically\n },\n },\n\n // Enclosed-fill: Border on active tab except bottom border with background on inactive tabs\n \"enclosed-fill\": {\n list: {\n horizontal:\n \"ds:bg-background ds:dark:bg-background ds:justify-start ds:rounded-none ds:p-0 ds:gap-1\",\n vertical:\n \"ds:bg-background ds:dark:bg-background ds:items-start ds:rounded-none ds:p-0 ds:gap-1\",\n },\n trigger: {\n horizontal: \"\", // Will be set dynamically\n vertical: \"\", // Will be set dynamically\n },\n },\n};\n"],"names":["sizeClasses","alignmentClasses","positionClasses","getColorClasses","variant","color","colors","cn","getListBorderClasses","tabPosition","borderBaseMap","colorBorderMap","getUnderlinedTriggerClasses","baseClasses","getEnclosedTriggerClasses","getEnclosedFillTriggerClasses","variantClasses"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { jsx as s } from "react/jsx-runtime";
1
+ import { jsx as i } from "react/jsx-runtime";
2
2
  import * as w from "react";
3
3
  import { memo as $, useMemo as h } from "react";
4
4
  import "@radix-ui/react-slot";
@@ -34,49 +34,49 @@ import "@radix-ui/react-slider";
34
34
  import "../packages/ui/src/components/tabs.js";
35
35
  import "../packages/ui/src/components/toggle.js";
36
36
  import N from "./Button/Button.js";
37
- const i = (o) => String(o).padStart(2, "0"), V = (o = "primary") => ({
37
+ const s = (o) => String(o).padStart(2, "0"), V = (o = "primary") => ({
38
38
  primary: {
39
- bg: "bg-primary",
40
- text: "text-primary-foreground"
39
+ bg: "ds:bg-primary",
40
+ text: "ds:text-primary-foreground"
41
41
  },
42
42
  secondary: {
43
- bg: "bg-secondary",
44
- text: "text-secondary-foreground"
43
+ bg: "ds:bg-secondary",
44
+ text: "ds:text-secondary-foreground"
45
45
  },
46
46
  accent: {
47
- bg: "bg-accent",
48
- text: "text-accent-foreground"
47
+ bg: "ds:bg-accent",
48
+ text: "ds:text-accent-foreground"
49
49
  },
50
50
  destructive: {
51
- bg: "bg-destructive",
52
- text: "text-destructive-foreground"
51
+ bg: "ds:bg-destructive",
52
+ text: "ds:text-destructive-foreground"
53
53
  },
54
54
  muted: {
55
- bg: "bg-muted",
56
- text: "text-muted-foreground"
55
+ bg: "ds:bg-muted",
56
+ text: "ds:text-muted-foreground"
57
57
  },
58
58
  success: {
59
- bg: "bg-success",
60
- text: "text-success-foreground"
59
+ bg: "ds:bg-success",
60
+ text: "ds:text-success-foreground"
61
61
  },
62
62
  error: {
63
- bg: "bg-error",
64
- text: "text-error-foreground"
63
+ bg: "ds:bg-error",
64
+ text: "ds:text-error-foreground"
65
65
  },
66
66
  warning: {
67
- bg: "bg-warning",
68
- text: "text-warning-foreground"
67
+ bg: "ds:bg-warning",
68
+ text: "ds:text-warning-foreground"
69
69
  },
70
70
  foreground: {
71
- bg: "bg-foreground",
72
- text: "text-background"
71
+ bg: "ds:bg-foreground",
72
+ text: "ds:text-background"
73
73
  }
74
74
  })[o], k = $(
75
75
  w.forwardRef(
76
76
  ({
77
77
  HOURS: o,
78
- MINUTES: m,
79
- hours: d,
78
+ MINUTES: d,
79
+ hours: m,
80
80
  minutes: n,
81
81
  disabled: g,
82
82
  isTimeDisabled: p,
@@ -86,24 +86,24 @@ const i = (o) => String(o).padStart(2, "0"), V = (o = "primary") => ({
86
86
  const x = h(() => {
87
87
  const t = [];
88
88
  for (const r of o)
89
- for (const e of m)
89
+ for (const e of d)
90
90
  t.push({
91
91
  h: r,
92
92
  m: e,
93
- display: `${i(r)}:${i(e)}`
93
+ display: `${s(r)}:${s(e)}`
94
94
  });
95
95
  return t;
96
- }, [o, m]), b = d !== void 0 && n !== void 0 ? `${i(d)}:${i(n)}` : "", v = (t, r) => {
96
+ }, [o, d]), b = m !== void 0 && n !== void 0 ? `${s(m)}:${s(n)}` : "", v = (t, r) => {
97
97
  p(t, r, 0) || u(t, r);
98
98
  };
99
- return /* @__PURE__ */ s("div", { className: "ds:flex ds:flex-col ds:gap-2", children: /* @__PURE__ */ s(
99
+ return /* @__PURE__ */ i("div", { className: "ds:flex ds:flex-col ds:gap-2", children: /* @__PURE__ */ i(
100
100
  "div",
101
101
  {
102
102
  ref: l,
103
103
  className: "ds:flex ds:flex-col ds:gap-1 ds:h-64 ds:overflow-y-auto ds:p-2 ds:rounded-md",
104
104
  children: x.map(({ h: t, m: r, display: e }) => {
105
105
  const y = p(t, r, 0), c = e === b, a = V(f);
106
- return /* @__PURE__ */ s(
106
+ return /* @__PURE__ */ i(
107
107
  N,
108
108
  {
109
109
  type: "button",
@@ -1 +1 @@
1
- {"version":3,"file":"TimeGridView.js","sources":["../../../src/components/TimeGridView.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { memo, useMemo } from \"react\";\nimport { cn } from \"@dsui/ui/index\";\nimport Button from \"./Button/Button\";\nimport type { CalendarColor } from \"./Calendar/Calendar\";\n\nconst pad = (num: number): string => String(num).padStart(2, \"0\");\n\n// Color variants for time grid items\nconst getColorClasses = (color: CalendarColor = \"primary\") => {\n const colorMap = {\n primary: {\n bg: \"bg-primary\",\n text: \"text-primary-foreground\",\n },\n secondary: {\n bg: \"bg-secondary\",\n text: \"text-secondary-foreground\",\n },\n accent: {\n bg: \"bg-accent\",\n text: \"text-accent-foreground\",\n },\n destructive: {\n bg: \"bg-destructive\",\n text: \"text-destructive-foreground\",\n },\n muted: {\n bg: \"bg-muted\",\n text: \"text-muted-foreground\",\n },\n success: {\n bg: \"bg-success\",\n text: \"text-success-foreground\",\n },\n error: {\n bg: \"bg-error\",\n text: \"text-error-foreground\",\n },\n warning: {\n bg: \"bg-warning\",\n text: \"text-warning-foreground\",\n },\n foreground: {\n bg: \"bg-foreground\",\n text: \"text-background\",\n },\n };\n return colorMap[color];\n};\n\ntype TimeGridViewProps = {\n HOURS: number[];\n MINUTES: number[];\n hours: number | undefined;\n minutes: number | undefined;\n disabled: boolean;\n isTimeDisabled: (h: number, m: number, s: number) => boolean;\n onTimeSelect: (h: number, m: number) => void;\n color?: CalendarColor;\n};\n\nexport const TimeGridView = memo(\n React.forwardRef<HTMLDivElement, TimeGridViewProps>(\n (\n {\n HOURS,\n MINUTES,\n hours,\n minutes,\n disabled,\n isTimeDisabled,\n onTimeSelect,\n color = \"primary\",\n },\n ref\n ) => {\n // Generate all time combinations based on intervals (always HH:mm, never shows seconds)\n const timeOptions = useMemo(() => {\n const options: Array<{ h: number; m: number; display: string }> = [];\n\n for (const h of HOURS) {\n for (const m of MINUTES) {\n options.push({\n h,\n m,\n display: `${pad(h)}:${pad(m)}`,\n });\n }\n }\n\n return options;\n }, [HOURS, MINUTES]);\n\n const currentValue =\n hours !== undefined && minutes !== undefined\n ? `${pad(hours)}:${pad(minutes)}`\n : \"\";\n\n const handleTimeSelect = (h: number, m: number) => {\n // Always set seconds to 0 in grid mode\n if (!isTimeDisabled(h, m, 0)) {\n onTimeSelect(h, m);\n }\n };\n\n return (\n <div className=\"ds:flex ds:flex-col ds:gap-2\">\n <div\n ref={ref}\n className=\"ds:flex ds:flex-col ds:gap-1 ds:h-64 ds:overflow-y-auto ds:p-2 ds:rounded-md\"\n >\n {timeOptions.map(({ h, m, display }) => {\n const itemDisabled = isTimeDisabled(h, m, 0);\n const isSelected = display === currentValue;\n const colorClasses = getColorClasses(color);\n\n return (\n <Button\n key={display}\n type=\"button\"\n variant=\"outline\"\n onClick={() => handleTimeSelect(h, m)}\n data-selected={isSelected || undefined}\n disabled={disabled || itemDisabled}\n size=\"sm\"\n className={cn(\n isSelected\n ? `${colorClasses.bg} ${colorClasses.text} ds:font-semibold`\n : \"ds:text-foreground\"\n )}\n >\n {display}\n </Button>\n );\n })}\n </div>\n </div>\n );\n }\n )\n);\n\nTimeGridView.displayName = \"TimeGridView\";\n"],"names":["pad","num","getColorClasses","color","TimeGridView","memo","React","HOURS","MINUTES","hours","minutes","disabled","isTimeDisabled","onTimeSelect","ref","timeOptions","useMemo","options","h","m","currentValue","handleTimeSelect","jsx","display","itemDisabled","isSelected","colorClasses","Button","cn"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,MAAMA,IAAM,CAACC,MAAwB,OAAOA,CAAG,EAAE,SAAS,GAAG,GAAG,GAG1DC,IAAkB,CAACC,IAAuB,eAC7B;AAAA,EACf,SAAS;AAAA,IACP,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AAAA,EAER,WAAW;AAAA,IACT,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AAAA,EAER,QAAQ;AAAA,IACN,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AAAA,EAER,aAAa;AAAA,IACX,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AAAA,EAER,OAAO;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AAAA,EAER,SAAS;AAAA,IACP,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AAAA,EAER,OAAO;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AAAA,EAER,SAAS;AAAA,IACP,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AAAA,EAER,YAAY;AAAA,IACV,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AACR,GAEcA,CAAK,GAcVC,IAAeC;AAAA,EAC1BC,EAAM;AAAA,IACJ,CACE;AAAA,MACE,OAAAC;AAAA,MACA,SAAAC;AAAA,MACA,OAAAC;AAAA,MACA,SAAAC;AAAA,MACA,UAAAC;AAAA,MACA,gBAAAC;AAAA,MACA,cAAAC;AAAA,MACA,OAAAV,IAAQ;AAAA,IAAA,GAEVW,MACG;AAEH,YAAMC,IAAcC,EAAQ,MAAM;AAChC,cAAMC,IAA4D,CAAA;AAElE,mBAAWC,KAAKX;AACd,qBAAWY,KAAKX;AACd,YAAAS,EAAQ,KAAK;AAAA,cACX,GAAAC;AAAA,cACA,GAAAC;AAAA,cACA,SAAS,GAAGnB,EAAIkB,CAAC,CAAC,IAAIlB,EAAImB,CAAC,CAAC;AAAA,YAAA,CAC7B;AAIL,eAAOF;AAAA,MACT,GAAG,CAACV,GAAOC,CAAO,CAAC,GAEbY,IACJX,MAAU,UAAaC,MAAY,SAC/B,GAAGV,EAAIS,CAAK,CAAC,IAAIT,EAAIU,CAAO,CAAC,KAC7B,IAEAW,IAAmB,CAACH,GAAWC,MAAc;AAEjD,QAAKP,EAAeM,GAAGC,GAAG,CAAC,KACzBN,EAAaK,GAAGC,CAAC;AAAA,MAErB;AAEA,aACE,gBAAAG,EAAC,OAAA,EAAI,WAAU,gCACb,UAAA,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAAR;AAAA,UACA,WAAU;AAAA,UAET,YAAY,IAAI,CAAC,EAAE,GAAAI,GAAG,GAAAC,GAAG,SAAAI,QAAc;AACtC,kBAAMC,IAAeZ,EAAeM,GAAGC,GAAG,CAAC,GACrCM,IAAaF,MAAYH,GACzBM,IAAexB,EAAgBC,CAAK;AAE1C,mBACE,gBAAAmB;AAAA,cAACK;AAAA,cAAA;AAAA,gBAEC,MAAK;AAAA,gBACL,SAAQ;AAAA,gBACR,SAAS,MAAMN,EAAiBH,GAAGC,CAAC;AAAA,gBACpC,iBAAeM,KAAc;AAAA,gBAC7B,UAAUd,KAAYa;AAAA,gBACtB,MAAK;AAAA,gBACL,WAAWI;AAAA,kBACTH,IACI,GAAGC,EAAa,EAAE,IAAIA,EAAa,IAAI,sBACvC;AAAA,gBAAA;AAAA,gBAGL,UAAAH;AAAA,cAAA;AAAA,cAbIA;AAAA,YAAA;AAAA,UAgBX,CAAC;AAAA,QAAA;AAAA,MAAA,GAEL;AAAA,IAEJ;AAAA,EAAA;AAEJ;AAEAnB,EAAa,cAAc;"}
1
+ {"version":3,"file":"TimeGridView.js","sources":["../../../src/components/TimeGridView.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { memo, useMemo } from \"react\";\nimport { cn } from \"@dsui/ui/index\";\nimport Button from \"./Button/Button\";\nimport type { CalendarColor } from \"./Calendar/Calendar\";\n\nconst pad = (num: number): string => String(num).padStart(2, \"0\");\n\n// Color variants for time grid items\nconst getColorClasses = (color: CalendarColor = \"primary\") => {\n const colorMap = {\n primary: {\n bg: \"ds:bg-primary\",\n text: \"ds:text-primary-foreground\",\n },\n secondary: {\n bg: \"ds:bg-secondary\",\n text: \"ds:text-secondary-foreground\",\n },\n accent: {\n bg: \"ds:bg-accent\",\n text: \"ds:text-accent-foreground\",\n },\n destructive: {\n bg: \"ds:bg-destructive\",\n text: \"ds:text-destructive-foreground\",\n },\n muted: {\n bg: \"ds:bg-muted\",\n text: \"ds:text-muted-foreground\",\n },\n success: {\n bg: \"ds:bg-success\",\n text: \"ds:text-success-foreground\",\n },\n error: {\n bg: \"ds:bg-error\",\n text: \"ds:text-error-foreground\",\n },\n warning: {\n bg: \"ds:bg-warning\",\n text: \"ds:text-warning-foreground\",\n },\n foreground: {\n bg: \"ds:bg-foreground\",\n text: \"ds:text-background\",\n },\n };\n return colorMap[color];\n};\n\ntype TimeGridViewProps = {\n HOURS: number[];\n MINUTES: number[];\n hours: number | undefined;\n minutes: number | undefined;\n disabled: boolean;\n isTimeDisabled: (h: number, m: number, s: number) => boolean;\n onTimeSelect: (h: number, m: number) => void;\n color?: CalendarColor;\n};\n\nexport const TimeGridView = memo(\n React.forwardRef<HTMLDivElement, TimeGridViewProps>(\n (\n {\n HOURS,\n MINUTES,\n hours,\n minutes,\n disabled,\n isTimeDisabled,\n onTimeSelect,\n color = \"primary\",\n },\n ref\n ) => {\n // Generate all time combinations based on intervals (always HH:mm, never shows seconds)\n const timeOptions = useMemo(() => {\n const options: Array<{ h: number; m: number; display: string }> = [];\n\n for (const h of HOURS) {\n for (const m of MINUTES) {\n options.push({\n h,\n m,\n display: `${pad(h)}:${pad(m)}`,\n });\n }\n }\n\n return options;\n }, [HOURS, MINUTES]);\n\n const currentValue =\n hours !== undefined && minutes !== undefined\n ? `${pad(hours)}:${pad(minutes)}`\n : \"\";\n\n const handleTimeSelect = (h: number, m: number) => {\n // Always set seconds to 0 in grid mode\n if (!isTimeDisabled(h, m, 0)) {\n onTimeSelect(h, m);\n }\n };\n\n return (\n <div className=\"ds:flex ds:flex-col ds:gap-2\">\n <div\n ref={ref}\n className=\"ds:flex ds:flex-col ds:gap-1 ds:h-64 ds:overflow-y-auto ds:p-2 ds:rounded-md\"\n >\n {timeOptions.map(({ h, m, display }) => {\n const itemDisabled = isTimeDisabled(h, m, 0);\n const isSelected = display === currentValue;\n const colorClasses = getColorClasses(color);\n\n return (\n <Button\n key={display}\n type=\"button\"\n variant=\"outline\"\n onClick={() => handleTimeSelect(h, m)}\n data-selected={isSelected || undefined}\n disabled={disabled || itemDisabled}\n size=\"sm\"\n className={cn(\n isSelected\n ? `${colorClasses.bg} ${colorClasses.text} ds:font-semibold`\n : \"ds:text-foreground\"\n )}\n >\n {display}\n </Button>\n );\n })}\n </div>\n </div>\n );\n }\n )\n);\n\nTimeGridView.displayName = \"TimeGridView\";\n"],"names":["pad","num","getColorClasses","color","TimeGridView","memo","React","HOURS","MINUTES","hours","minutes","disabled","isTimeDisabled","onTimeSelect","ref","timeOptions","useMemo","options","h","m","currentValue","handleTimeSelect","jsx","display","itemDisabled","isSelected","colorClasses","Button","cn"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,MAAMA,IAAM,CAACC,MAAwB,OAAOA,CAAG,EAAE,SAAS,GAAG,GAAG,GAG1DC,IAAkB,CAACC,IAAuB,eAC7B;AAAA,EACf,SAAS;AAAA,IACP,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AAAA,EAER,WAAW;AAAA,IACT,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AAAA,EAER,QAAQ;AAAA,IACN,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AAAA,EAER,aAAa;AAAA,IACX,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AAAA,EAER,OAAO;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AAAA,EAER,SAAS;AAAA,IACP,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AAAA,EAER,OAAO;AAAA,IACL,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AAAA,EAER,SAAS;AAAA,IACP,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AAAA,EAER,YAAY;AAAA,IACV,IAAI;AAAA,IACJ,MAAM;AAAA,EAAA;AACR,GAEcA,CAAK,GAcVC,IAAeC;AAAA,EAC1BC,EAAM;AAAA,IACJ,CACE;AAAA,MACE,OAAAC;AAAA,MACA,SAAAC;AAAA,MACA,OAAAC;AAAA,MACA,SAAAC;AAAA,MACA,UAAAC;AAAA,MACA,gBAAAC;AAAA,MACA,cAAAC;AAAA,MACA,OAAAV,IAAQ;AAAA,IAAA,GAEVW,MACG;AAEH,YAAMC,IAAcC,EAAQ,MAAM;AAChC,cAAMC,IAA4D,CAAA;AAElE,mBAAWC,KAAKX;AACd,qBAAWY,KAAKX;AACd,YAAAS,EAAQ,KAAK;AAAA,cACX,GAAAC;AAAA,cACA,GAAAC;AAAA,cACA,SAAS,GAAGnB,EAAIkB,CAAC,CAAC,IAAIlB,EAAImB,CAAC,CAAC;AAAA,YAAA,CAC7B;AAIL,eAAOF;AAAA,MACT,GAAG,CAACV,GAAOC,CAAO,CAAC,GAEbY,IACJX,MAAU,UAAaC,MAAY,SAC/B,GAAGV,EAAIS,CAAK,CAAC,IAAIT,EAAIU,CAAO,CAAC,KAC7B,IAEAW,IAAmB,CAACH,GAAWC,MAAc;AAEjD,QAAKP,EAAeM,GAAGC,GAAG,CAAC,KACzBN,EAAaK,GAAGC,CAAC;AAAA,MAErB;AAEA,aACE,gBAAAG,EAAC,OAAA,EAAI,WAAU,gCACb,UAAA,gBAAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAAR;AAAA,UACA,WAAU;AAAA,UAET,YAAY,IAAI,CAAC,EAAE,GAAAI,GAAG,GAAAC,GAAG,SAAAI,QAAc;AACtC,kBAAMC,IAAeZ,EAAeM,GAAGC,GAAG,CAAC,GACrCM,IAAaF,MAAYH,GACzBM,IAAexB,EAAgBC,CAAK;AAE1C,mBACE,gBAAAmB;AAAA,cAACK;AAAA,cAAA;AAAA,gBAEC,MAAK;AAAA,gBACL,SAAQ;AAAA,gBACR,SAAS,MAAMN,EAAiBH,GAAGC,CAAC;AAAA,gBACpC,iBAAeM,KAAc;AAAA,gBAC7B,UAAUd,KAAYa;AAAA,gBACtB,MAAK;AAAA,gBACL,WAAWI;AAAA,kBACTH,IACI,GAAGC,EAAa,EAAE,IAAIA,EAAa,IAAI,sBACvC;AAAA,gBAAA;AAAA,gBAGL,UAAAH;AAAA,cAAA;AAAA,cAbIA;AAAA,YAAA;AAAA,UAgBX,CAAC;AAAA,QAAA;AAAA,MAAA,GAEL;AAAA,IAEJ;AAAA,EAAA;AAEJ;AAEAnB,EAAa,cAAc;"}