@adsgency_npm/adsgency-ads-ui 0.1.0-alpha.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.
- package/README.md +82 -0
- package/dist/chunk-YJFQM6IB.js +71 -0
- package/dist/chunk-YJFQM6IB.js.map +1 -0
- package/dist/index.cjs +4300 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +743 -0
- package/dist/index.d.ts +743 -0
- package/dist/index.js +4080 -0
- package/dist/index.js.map +1 -0
- package/dist/styles/tokens.css +121 -0
- package/dist/tokens/designTokens.cjs +94 -0
- package/dist/tokens/designTokens.cjs.map +1 -0
- package/dist/tokens/designTokens.d.cts +66 -0
- package/dist/tokens/designTokens.d.ts +66 -0
- package/dist/tokens/designTokens.js +8 -0
- package/dist/tokens/designTokens.js.map +1 -0
- package/dist/tokens/tailwindPreset.cjs +140 -0
- package/dist/tokens/tailwindPreset.cjs.map +1 -0
- package/dist/tokens/tailwindPreset.d.cts +114 -0
- package/dist/tokens/tailwindPreset.d.ts +114 -0
- package/dist/tokens/tailwindPreset.js +120 -0
- package/dist/tokens/tailwindPreset.js.map +1 -0
- package/package.json +112 -0
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,4300 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
"use strict";
|
|
3
|
+
"use client";
|
|
4
|
+
var __create = Object.create;
|
|
5
|
+
var __defProp = Object.defineProperty;
|
|
6
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
7
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
8
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
9
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
10
|
+
var __export = (target, all) => {
|
|
11
|
+
for (var name in all)
|
|
12
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
13
|
+
};
|
|
14
|
+
var __copyProps = (to, from, except, desc) => {
|
|
15
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
16
|
+
for (let key of __getOwnPropNames(from))
|
|
17
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
18
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
19
|
+
}
|
|
20
|
+
return to;
|
|
21
|
+
};
|
|
22
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
23
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
24
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
25
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
26
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
27
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
28
|
+
mod
|
|
29
|
+
));
|
|
30
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
31
|
+
|
|
32
|
+
// src/index.ts
|
|
33
|
+
var src_exports = {};
|
|
34
|
+
__export(src_exports, {
|
|
35
|
+
AdsAccordion: () => AdsAccordion,
|
|
36
|
+
AdsAlert: () => Alert2,
|
|
37
|
+
AdsAlertDescription: () => AlertDescription2,
|
|
38
|
+
AdsAlertDialog: () => AdsAlertDialog,
|
|
39
|
+
AdsAlertDialogAction: () => AdsAlertDialogAction,
|
|
40
|
+
AdsAlertDialogCancel: () => AdsAlertDialogCancel,
|
|
41
|
+
AdsAlertDialogContent: () => AdsAlertDialogContent,
|
|
42
|
+
AdsAlertDialogDescription: () => AdsAlertDialogDescription,
|
|
43
|
+
AdsAlertDialogFooter: () => AdsAlertDialogFooter,
|
|
44
|
+
AdsAlertDialogHeader: () => AdsAlertDialogHeader,
|
|
45
|
+
AdsAlertDialogOverlay: () => AdsAlertDialogOverlay,
|
|
46
|
+
AdsAlertDialogPortal: () => AdsAlertDialogPortal,
|
|
47
|
+
AdsAlertDialogTitle: () => AdsAlertDialogTitle,
|
|
48
|
+
AdsAlertDialogTrigger: () => AdsAlertDialogTrigger,
|
|
49
|
+
AdsAlertTitle: () => AlertTitle2,
|
|
50
|
+
AdsBadge: () => AdsBadge,
|
|
51
|
+
AdsBreadcrumb: () => AdsBreadcrumb,
|
|
52
|
+
AdsBreadcrumbEllipsis: () => AdsBreadcrumbEllipsis,
|
|
53
|
+
AdsBreadcrumbItem: () => AdsBreadcrumbItem,
|
|
54
|
+
AdsBreadcrumbLink: () => AdsBreadcrumbLink,
|
|
55
|
+
AdsBreadcrumbList: () => AdsBreadcrumbList,
|
|
56
|
+
AdsBreadcrumbPage: () => AdsBreadcrumbPage,
|
|
57
|
+
AdsBreadcrumbSeparator: () => AdsBreadcrumbSeparator,
|
|
58
|
+
AdsButton: () => AdsButton,
|
|
59
|
+
AdsButtonGroup: () => AdsButtonGroup,
|
|
60
|
+
AdsButtonGroupInput: () => AdsButtonGroupInput,
|
|
61
|
+
AdsButtonGroupSeparator: () => AdsButtonGroupSeparator,
|
|
62
|
+
AdsButtonGroupText: () => AdsButtonGroupText,
|
|
63
|
+
AdsCheckbox: () => AdsCheckbox,
|
|
64
|
+
AdsDialog: () => AdsDialog,
|
|
65
|
+
AdsDialogClose: () => AdsDialogClose,
|
|
66
|
+
AdsDialogContent: () => AdsDialogContent,
|
|
67
|
+
AdsDialogDescription: () => AdsDialogDescription,
|
|
68
|
+
AdsDialogFooter: () => AdsDialogFooter,
|
|
69
|
+
AdsDialogHeader: () => AdsDialogHeader,
|
|
70
|
+
AdsDialogOverlay: () => AdsDialogOverlay,
|
|
71
|
+
AdsDialogPortal: () => AdsDialogPortal,
|
|
72
|
+
AdsDialogTitle: () => AdsDialogTitle,
|
|
73
|
+
AdsDialogTrigger: () => AdsDialogTrigger,
|
|
74
|
+
AdsEmpty: () => AdsEmpty,
|
|
75
|
+
AdsEmptyActions: () => AdsEmptyActions,
|
|
76
|
+
AdsEmptyContent: () => AdsEmptyContent,
|
|
77
|
+
AdsEmptyDescription: () => AdsEmptyDescription,
|
|
78
|
+
AdsEmptyFooter: () => AdsEmptyFooter,
|
|
79
|
+
AdsEmptyHeader: () => AdsEmptyHeader,
|
|
80
|
+
AdsEmptyMedia: () => AdsEmptyMedia,
|
|
81
|
+
AdsEmptyTitle: () => AdsEmptyTitle,
|
|
82
|
+
AdsField: () => AdsField,
|
|
83
|
+
AdsFieldActions: () => AdsFieldActions,
|
|
84
|
+
AdsFieldCheckboxRow: () => AdsFieldCheckboxRow,
|
|
85
|
+
AdsFieldChoiceCard: () => AdsFieldChoiceCard,
|
|
86
|
+
AdsFieldDescription: () => AdsFieldDescription,
|
|
87
|
+
AdsFieldError: () => AdsFieldError,
|
|
88
|
+
AdsFieldGroup: () => AdsFieldGroup,
|
|
89
|
+
AdsFieldHeader: () => AdsFieldHeader,
|
|
90
|
+
AdsFieldItem: () => AdsFieldItem,
|
|
91
|
+
AdsFieldLabel: () => AdsFieldLabel,
|
|
92
|
+
AdsFieldLegend: () => AdsFieldLegend,
|
|
93
|
+
AdsFieldSeparator: () => AdsFieldSeparator,
|
|
94
|
+
AdsFieldSet: () => AdsFieldSet,
|
|
95
|
+
AdsI18nProvider: () => AdsI18nProvider,
|
|
96
|
+
AdsInput: () => AdsInput,
|
|
97
|
+
AdsInputGroup: () => AdsInputGroup,
|
|
98
|
+
AdsInputGroupInput: () => AdsInputGroupInput,
|
|
99
|
+
AdsInputGroupTextarea: () => AdsInputGroupTextarea,
|
|
100
|
+
AdsInputOTP: () => AdsInputOTP,
|
|
101
|
+
AdsInputOTPGroup: () => AdsInputOTPGroup,
|
|
102
|
+
AdsInputOTPSeparator: () => AdsInputOTPSeparator,
|
|
103
|
+
AdsInputOTPSlot: () => AdsInputOTPSlot,
|
|
104
|
+
AdsPagination: () => AdsPagination,
|
|
105
|
+
AdsPaginationContent: () => AdsPaginationContent,
|
|
106
|
+
AdsPaginationEllipsis: () => AdsPaginationEllipsis,
|
|
107
|
+
AdsPaginationItem: () => AdsPaginationItem,
|
|
108
|
+
AdsPaginationLink: () => AdsPaginationLink,
|
|
109
|
+
AdsPaginationNext: () => AdsPaginationNext,
|
|
110
|
+
AdsPaginationPrevious: () => AdsPaginationPrevious,
|
|
111
|
+
AdsPopover: () => AdsPopover,
|
|
112
|
+
AdsPopoverBody: () => AdsPopoverBody,
|
|
113
|
+
AdsPopoverContent: () => AdsPopoverContent,
|
|
114
|
+
AdsPopoverDescription: () => AdsPopoverDescription,
|
|
115
|
+
AdsPopoverHeader: () => AdsPopoverHeader,
|
|
116
|
+
AdsPopoverTitle: () => AdsPopoverTitle,
|
|
117
|
+
AdsPopoverTrigger: () => AdsPopoverTrigger,
|
|
118
|
+
AdsProgress: () => AdsProgress,
|
|
119
|
+
AdsRadioGroup: () => AdsRadioGroup,
|
|
120
|
+
AdsRadioGroupCardOption: () => AdsRadioGroupCardOption,
|
|
121
|
+
AdsRadioGroupOption: () => AdsRadioGroupOption,
|
|
122
|
+
AdsSelect: () => AdsSelect,
|
|
123
|
+
AdsSelectContent: () => SelectContent,
|
|
124
|
+
AdsSelectGroup: () => SelectGroup,
|
|
125
|
+
AdsSelectItem: () => SelectItem,
|
|
126
|
+
AdsSelectLabel: () => SelectLabel,
|
|
127
|
+
AdsSelectRoot: () => Select,
|
|
128
|
+
AdsSelectScrollDownButton: () => SelectScrollDownButton,
|
|
129
|
+
AdsSelectScrollUpButton: () => SelectScrollUpButton,
|
|
130
|
+
AdsSelectSeparator: () => SelectSeparator,
|
|
131
|
+
AdsSelectTrigger: () => SelectTrigger,
|
|
132
|
+
AdsSelectValue: () => SelectValue,
|
|
133
|
+
AdsSeparator: () => AdsSeparator,
|
|
134
|
+
AdsSkeleton: () => AdsSkeleton,
|
|
135
|
+
AdsSlider: () => AdsSlider,
|
|
136
|
+
AdsSwitch: () => AdsSwitch,
|
|
137
|
+
AdsTable: () => AdsTable,
|
|
138
|
+
AdsTableBody: () => AdsTableBody,
|
|
139
|
+
AdsTableCaption: () => AdsTableCaption,
|
|
140
|
+
AdsTableCell: () => AdsTableCell,
|
|
141
|
+
AdsTableFooter: () => AdsTableFooter,
|
|
142
|
+
AdsTableHead: () => AdsTableHead,
|
|
143
|
+
AdsTableHeader: () => AdsTableHeader,
|
|
144
|
+
AdsTableRow: () => AdsTableRow,
|
|
145
|
+
AdsTabs: () => AdsTabs,
|
|
146
|
+
AdsTabsContent: () => AdsTabsContent,
|
|
147
|
+
AdsTabsList: () => AdsTabsList,
|
|
148
|
+
AdsTabsTrigger: () => AdsTabsTrigger,
|
|
149
|
+
AdsTextarea: () => AdsTextarea,
|
|
150
|
+
AdsToast: () => AdsToast,
|
|
151
|
+
AdsToastManager: () => AdsToastManager,
|
|
152
|
+
AdsToaster: () => AdsToaster,
|
|
153
|
+
AdsToggle: () => AdsToggle,
|
|
154
|
+
AdsToggleGroup: () => AdsToggleGroup,
|
|
155
|
+
AdsToggleGroupItem: () => AdsToggleGroupItem,
|
|
156
|
+
AdsTooltip: () => AdsTooltip,
|
|
157
|
+
AdsTooltipArrow: () => AdsTooltipArrow,
|
|
158
|
+
AdsTooltipContent: () => AdsTooltipContent,
|
|
159
|
+
AdsTooltipProvider: () => AdsTooltipProvider,
|
|
160
|
+
AdsTooltipTrigger: () => AdsTooltipTrigger,
|
|
161
|
+
adsDefaultMessages: () => adsDefaultMessages,
|
|
162
|
+
designTokens: () => designTokens,
|
|
163
|
+
useAdsI18n: () => useAdsI18n
|
|
164
|
+
});
|
|
165
|
+
module.exports = __toCommonJS(src_exports);
|
|
166
|
+
|
|
167
|
+
// src/components/AdsAccordion/index.tsx
|
|
168
|
+
var React3 = __toESM(require("react"), 1);
|
|
169
|
+
|
|
170
|
+
// src/i18n/AdsI18nProvider.tsx
|
|
171
|
+
var React = __toESM(require("react"), 1);
|
|
172
|
+
|
|
173
|
+
// src/i18n/defaultMessages.ts
|
|
174
|
+
var adsDefaultMessages = {
|
|
175
|
+
en: {
|
|
176
|
+
accordion: {
|
|
177
|
+
expand: "Expand section",
|
|
178
|
+
collapse: "Collapse section"
|
|
179
|
+
},
|
|
180
|
+
button: {
|
|
181
|
+
loading: "Loading"
|
|
182
|
+
},
|
|
183
|
+
dialog: {
|
|
184
|
+
close: "Close dialog"
|
|
185
|
+
},
|
|
186
|
+
input: {
|
|
187
|
+
chooseFile: "Choose File",
|
|
188
|
+
noFileChosen: "No file chosen",
|
|
189
|
+
optional: "Optional"
|
|
190
|
+
},
|
|
191
|
+
toast: {
|
|
192
|
+
notifications: "Notifications"
|
|
193
|
+
},
|
|
194
|
+
pagination: {
|
|
195
|
+
previous: "Previous",
|
|
196
|
+
next: "Next",
|
|
197
|
+
morePages: "More pages"
|
|
198
|
+
}
|
|
199
|
+
},
|
|
200
|
+
zh: {
|
|
201
|
+
accordion: {
|
|
202
|
+
expand: "\u5C55\u5F00\u5185\u5BB9",
|
|
203
|
+
collapse: "\u6536\u8D77\u5185\u5BB9"
|
|
204
|
+
},
|
|
205
|
+
button: {
|
|
206
|
+
loading: "\u52A0\u8F7D\u4E2D"
|
|
207
|
+
},
|
|
208
|
+
dialog: {
|
|
209
|
+
close: "\u5173\u95ED\u5F39\u7A97"
|
|
210
|
+
},
|
|
211
|
+
input: {
|
|
212
|
+
chooseFile: "\u9009\u62E9\u6587\u4EF6",
|
|
213
|
+
noFileChosen: "\u672A\u9009\u62E9\u6587\u4EF6",
|
|
214
|
+
optional: "\u53EF\u9009"
|
|
215
|
+
},
|
|
216
|
+
toast: {
|
|
217
|
+
notifications: "\u901A\u77E5"
|
|
218
|
+
},
|
|
219
|
+
pagination: {
|
|
220
|
+
previous: "\u4E0A\u4E00\u9875",
|
|
221
|
+
next: "\u4E0B\u4E00\u9875",
|
|
222
|
+
morePages: "\u66F4\u591A\u9875\u7801"
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
// src/i18n/AdsI18nProvider.tsx
|
|
228
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
229
|
+
var AdsI18nContext = React.createContext({
|
|
230
|
+
locale: "en",
|
|
231
|
+
messages: adsDefaultMessages.en
|
|
232
|
+
});
|
|
233
|
+
function mergeMessages(locale, messages) {
|
|
234
|
+
const baseMessages = adsDefaultMessages[locale];
|
|
235
|
+
return {
|
|
236
|
+
accordion: {
|
|
237
|
+
...baseMessages.accordion,
|
|
238
|
+
...messages?.accordion
|
|
239
|
+
},
|
|
240
|
+
button: {
|
|
241
|
+
...baseMessages.button,
|
|
242
|
+
...messages?.button
|
|
243
|
+
},
|
|
244
|
+
dialog: {
|
|
245
|
+
...baseMessages.dialog,
|
|
246
|
+
...messages?.dialog
|
|
247
|
+
},
|
|
248
|
+
input: {
|
|
249
|
+
...baseMessages.input,
|
|
250
|
+
...messages?.input
|
|
251
|
+
},
|
|
252
|
+
toast: {
|
|
253
|
+
...baseMessages.toast,
|
|
254
|
+
...messages?.toast
|
|
255
|
+
},
|
|
256
|
+
pagination: {
|
|
257
|
+
...baseMessages.pagination,
|
|
258
|
+
...messages?.pagination
|
|
259
|
+
}
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
function AdsI18nProvider({
|
|
263
|
+
children,
|
|
264
|
+
locale = "en",
|
|
265
|
+
messages
|
|
266
|
+
}) {
|
|
267
|
+
const value = React.useMemo(
|
|
268
|
+
() => ({
|
|
269
|
+
locale,
|
|
270
|
+
messages: mergeMessages(locale, messages)
|
|
271
|
+
}),
|
|
272
|
+
[locale, messages]
|
|
273
|
+
);
|
|
274
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(AdsI18nContext.Provider, { value, children });
|
|
275
|
+
}
|
|
276
|
+
function useAdsI18n() {
|
|
277
|
+
return React.useContext(AdsI18nContext);
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
// src/lib/cn.ts
|
|
281
|
+
var import_clsx = require("clsx");
|
|
282
|
+
var import_tailwind_merge = require("tailwind-merge");
|
|
283
|
+
function cn(...inputs) {
|
|
284
|
+
return (0, import_tailwind_merge.twMerge)((0, import_clsx.clsx)(inputs));
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
// src/primitives/accordion.tsx
|
|
288
|
+
var React2 = __toESM(require("react"), 1);
|
|
289
|
+
var AccordionPrimitive = __toESM(require("@radix-ui/react-accordion"), 1);
|
|
290
|
+
var import_lucide_react = require("lucide-react");
|
|
291
|
+
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
292
|
+
var Accordion = AccordionPrimitive.Root;
|
|
293
|
+
var AccordionItem = React2.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
294
|
+
AccordionPrimitive.Item,
|
|
295
|
+
{
|
|
296
|
+
ref,
|
|
297
|
+
className: cn("border-b", className),
|
|
298
|
+
...props
|
|
299
|
+
}
|
|
300
|
+
));
|
|
301
|
+
AccordionItem.displayName = "AccordionItem";
|
|
302
|
+
var AccordionTrigger = React2.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(AccordionPrimitive.Header, { className: "flex", children: /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
|
|
303
|
+
AccordionPrimitive.Trigger,
|
|
304
|
+
{
|
|
305
|
+
ref,
|
|
306
|
+
className: cn(
|
|
307
|
+
"flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180",
|
|
308
|
+
className
|
|
309
|
+
),
|
|
310
|
+
...props,
|
|
311
|
+
children: [
|
|
312
|
+
children,
|
|
313
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_lucide_react.ChevronDown, { className: "h-4 w-4 shrink-0 transition-transform duration-200" })
|
|
314
|
+
]
|
|
315
|
+
}
|
|
316
|
+
) }));
|
|
317
|
+
AccordionTrigger.displayName = AccordionPrimitive.Trigger.displayName;
|
|
318
|
+
var AccordionContent = React2.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
319
|
+
AccordionPrimitive.Content,
|
|
320
|
+
{
|
|
321
|
+
ref,
|
|
322
|
+
className: "overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",
|
|
323
|
+
...props,
|
|
324
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)("div", { className: cn("pb-4 pt-0", className), children })
|
|
325
|
+
}
|
|
326
|
+
));
|
|
327
|
+
AccordionContent.displayName = AccordionPrimitive.Content.displayName;
|
|
328
|
+
|
|
329
|
+
// src/components/AdsAccordion/index.tsx
|
|
330
|
+
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
331
|
+
function toValueSet(value) {
|
|
332
|
+
if (!value || value === "") {
|
|
333
|
+
return /* @__PURE__ */ new Set();
|
|
334
|
+
}
|
|
335
|
+
return new Set(Array.isArray(value) ? value : [value]);
|
|
336
|
+
}
|
|
337
|
+
function toExternalValue(value, mode) {
|
|
338
|
+
if (mode === "single") {
|
|
339
|
+
return Array.from(value)[0] ?? "";
|
|
340
|
+
}
|
|
341
|
+
return Array.from(value);
|
|
342
|
+
}
|
|
343
|
+
function toPrimitiveValue(value, mode) {
|
|
344
|
+
if (mode === "single") {
|
|
345
|
+
return Array.isArray(value) ? value[0] ?? "" : value ?? "";
|
|
346
|
+
}
|
|
347
|
+
if (!value) {
|
|
348
|
+
return [];
|
|
349
|
+
}
|
|
350
|
+
return Array.isArray(value) ? value : [value];
|
|
351
|
+
}
|
|
352
|
+
var AdsAccordion = React3.forwardRef(
|
|
353
|
+
({
|
|
354
|
+
className,
|
|
355
|
+
defaultValue,
|
|
356
|
+
getToggleLabel,
|
|
357
|
+
items,
|
|
358
|
+
mode = "single",
|
|
359
|
+
onValueChange,
|
|
360
|
+
value,
|
|
361
|
+
...props
|
|
362
|
+
}, ref) => {
|
|
363
|
+
const { messages } = useAdsI18n();
|
|
364
|
+
const isControlled = value !== void 0;
|
|
365
|
+
const [internalValue, setInternalValue] = React3.useState(
|
|
366
|
+
() => mode === "single" ? toPrimitiveValue(defaultValue, "single") : toPrimitiveValue(defaultValue, "multiple")
|
|
367
|
+
);
|
|
368
|
+
const resolvedValue = isControlled ? toPrimitiveValue(value, mode) : internalValue;
|
|
369
|
+
const openValues = toValueSet(
|
|
370
|
+
Array.isArray(resolvedValue) ? resolvedValue : resolvedValue || void 0
|
|
371
|
+
);
|
|
372
|
+
const handleValueChange = (nextValue) => {
|
|
373
|
+
if (!isControlled) {
|
|
374
|
+
setInternalValue(nextValue);
|
|
375
|
+
}
|
|
376
|
+
onValueChange?.(toExternalValue(toValueSet(nextValue), mode));
|
|
377
|
+
};
|
|
378
|
+
const content = items.map((item, index) => {
|
|
379
|
+
const isOpen = openValues.has(item.value);
|
|
380
|
+
const isLastItem = index === items.length - 1;
|
|
381
|
+
const toggleLabel = getToggleLabel?.(item, isOpen) ?? (isOpen ? messages.accordion.collapse : messages.accordion.expand);
|
|
382
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
383
|
+
AccordionItem,
|
|
384
|
+
{
|
|
385
|
+
className: cn("w-full border-border", (!isLastItem || isOpen) && "border-b"),
|
|
386
|
+
disabled: item.disabled,
|
|
387
|
+
value: item.value,
|
|
388
|
+
children: [
|
|
389
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
390
|
+
AccordionTrigger,
|
|
391
|
+
{
|
|
392
|
+
className: cn(
|
|
393
|
+
"group flex h-[52px] w-full items-center py-lg text-left text-sm font-medium leading-5 text-foreground transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background hover:no-underline [&>svg]:ml-md [&>svg]:text-foreground",
|
|
394
|
+
item.disabled ? "cursor-not-allowed opacity-50" : "cursor-pointer hover:text-foreground"
|
|
395
|
+
),
|
|
396
|
+
children: [
|
|
397
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "min-w-0 flex-1 pr-md", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "break-words group-hover:underline", children: item.title }) }),
|
|
398
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)("span", { className: "sr-only", children: toggleLabel })
|
|
399
|
+
]
|
|
400
|
+
}
|
|
401
|
+
),
|
|
402
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(AccordionContent, { className: "grid overflow-hidden transition-[grid-template-rows,opacity] duration-200 ease-out data-[state=closed]:grid-rows-[0fr] data-[state=closed]:opacity-0 data-[state=open]:grid-rows-[1fr] data-[state=open]:opacity-100", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "min-h-0 overflow-hidden", children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { className: "flex w-full flex-col gap-lg pb-lg text-sm font-normal leading-5 text-foreground", children: item.content }) }) })
|
|
403
|
+
]
|
|
404
|
+
},
|
|
405
|
+
item.value
|
|
406
|
+
);
|
|
407
|
+
});
|
|
408
|
+
if (mode === "single") {
|
|
409
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
410
|
+
Accordion,
|
|
411
|
+
{
|
|
412
|
+
className: cn("flex w-full max-w-[503px] flex-col", className),
|
|
413
|
+
collapsible: true,
|
|
414
|
+
onValueChange: handleValueChange,
|
|
415
|
+
ref,
|
|
416
|
+
type: "single",
|
|
417
|
+
value: typeof resolvedValue === "string" ? resolvedValue : "",
|
|
418
|
+
...props,
|
|
419
|
+
children: content
|
|
420
|
+
}
|
|
421
|
+
);
|
|
422
|
+
}
|
|
423
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
424
|
+
Accordion,
|
|
425
|
+
{
|
|
426
|
+
className: cn("flex w-full max-w-[503px] flex-col", className),
|
|
427
|
+
onValueChange: handleValueChange,
|
|
428
|
+
ref,
|
|
429
|
+
type: "multiple",
|
|
430
|
+
value: Array.isArray(resolvedValue) ? resolvedValue : [],
|
|
431
|
+
...props,
|
|
432
|
+
children: content
|
|
433
|
+
}
|
|
434
|
+
);
|
|
435
|
+
}
|
|
436
|
+
);
|
|
437
|
+
AdsAccordion.displayName = "AdsAccordion";
|
|
438
|
+
|
|
439
|
+
// src/components/AdsAlert/index.tsx
|
|
440
|
+
var React5 = __toESM(require("react"), 1);
|
|
441
|
+
var import_class_variance_authority2 = require("class-variance-authority");
|
|
442
|
+
var import_lucide_react2 = require("lucide-react");
|
|
443
|
+
|
|
444
|
+
// src/primitives/alert.tsx
|
|
445
|
+
var React4 = __toESM(require("react"), 1);
|
|
446
|
+
var import_class_variance_authority = require("class-variance-authority");
|
|
447
|
+
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
448
|
+
var alertVariants = (0, import_class_variance_authority.cva)(
|
|
449
|
+
"relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground",
|
|
450
|
+
{
|
|
451
|
+
variants: {
|
|
452
|
+
variant: {
|
|
453
|
+
default: "bg-background text-foreground",
|
|
454
|
+
destructive: "border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive"
|
|
455
|
+
}
|
|
456
|
+
},
|
|
457
|
+
defaultVariants: {
|
|
458
|
+
variant: "default"
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
);
|
|
462
|
+
var Alert = React4.forwardRef(({ className, variant, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
463
|
+
"div",
|
|
464
|
+
{
|
|
465
|
+
ref,
|
|
466
|
+
role: "alert",
|
|
467
|
+
className: cn(alertVariants({ variant }), className),
|
|
468
|
+
...props
|
|
469
|
+
}
|
|
470
|
+
));
|
|
471
|
+
Alert.displayName = "Alert";
|
|
472
|
+
var AlertTitle = React4.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
473
|
+
"h5",
|
|
474
|
+
{
|
|
475
|
+
ref,
|
|
476
|
+
className: cn("mb-1 font-medium leading-none tracking-tight", className),
|
|
477
|
+
...props
|
|
478
|
+
}
|
|
479
|
+
));
|
|
480
|
+
AlertTitle.displayName = "AlertTitle";
|
|
481
|
+
var AlertDescription = React4.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
482
|
+
"div",
|
|
483
|
+
{
|
|
484
|
+
ref,
|
|
485
|
+
className: cn("text-sm [&_p]:leading-relaxed", className),
|
|
486
|
+
...props
|
|
487
|
+
}
|
|
488
|
+
));
|
|
489
|
+
AlertDescription.displayName = "AlertDescription";
|
|
490
|
+
|
|
491
|
+
// src/components/AdsAlert/index.tsx
|
|
492
|
+
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
493
|
+
var adsAlertVariants = (0, import_class_variance_authority2.cva)(
|
|
494
|
+
"relative flex w-full rounded-radius-lg border border-border bg-card px-4 py-3 [&>[data-slot=alert-icon]]:!text-[inherit]",
|
|
495
|
+
{
|
|
496
|
+
variants: {
|
|
497
|
+
variant: {
|
|
498
|
+
default: "text-foreground",
|
|
499
|
+
destructive: "text-destructive",
|
|
500
|
+
success: "text-success",
|
|
501
|
+
warning: "text-warning",
|
|
502
|
+
info: "text-info"
|
|
503
|
+
},
|
|
504
|
+
hasSupportingContent: {
|
|
505
|
+
true: "items-start gap-3",
|
|
506
|
+
false: "items-center gap-3"
|
|
507
|
+
}
|
|
508
|
+
},
|
|
509
|
+
defaultVariants: {
|
|
510
|
+
variant: "default",
|
|
511
|
+
hasSupportingContent: true
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
);
|
|
515
|
+
var descriptionVariants = (0, import_class_variance_authority2.cva)(
|
|
516
|
+
"min-w-0 text-sm leading-5 text-current [&_p]:leading-5",
|
|
517
|
+
{
|
|
518
|
+
variants: {
|
|
519
|
+
variant: {
|
|
520
|
+
default: "font-light",
|
|
521
|
+
destructive: "font-normal",
|
|
522
|
+
success: "font-normal",
|
|
523
|
+
warning: "font-normal",
|
|
524
|
+
info: "font-normal"
|
|
525
|
+
}
|
|
526
|
+
},
|
|
527
|
+
defaultVariants: {
|
|
528
|
+
variant: "default"
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
);
|
|
532
|
+
var defaultVariantIcons = {
|
|
533
|
+
default: import_lucide_react2.CircleCheck,
|
|
534
|
+
destructive: import_lucide_react2.CircleAlert,
|
|
535
|
+
success: import_lucide_react2.CircleCheck,
|
|
536
|
+
warning: import_lucide_react2.TriangleAlert,
|
|
537
|
+
info: import_lucide_react2.Info
|
|
538
|
+
};
|
|
539
|
+
function isComponentElement(child, component) {
|
|
540
|
+
return React5.isValidElement(child) && child.type === component;
|
|
541
|
+
}
|
|
542
|
+
function cloneWithClassName(child, className, dataSlot, extraProps) {
|
|
543
|
+
const element = child;
|
|
544
|
+
return React5.cloneElement(element, {
|
|
545
|
+
className: cn(className, element.props.className),
|
|
546
|
+
"data-slot": dataSlot,
|
|
547
|
+
style: {
|
|
548
|
+
...element.props.style,
|
|
549
|
+
...extraProps?.style
|
|
550
|
+
}
|
|
551
|
+
});
|
|
552
|
+
}
|
|
553
|
+
var Alert2 = React5.forwardRef(
|
|
554
|
+
({ children, className, variant, ...props }, ref) => {
|
|
555
|
+
const items = React5.Children.toArray(children);
|
|
556
|
+
let title = null;
|
|
557
|
+
let description = null;
|
|
558
|
+
let icon = null;
|
|
559
|
+
const extras = [];
|
|
560
|
+
let hasSeenBodyContent = false;
|
|
561
|
+
for (const child of items) {
|
|
562
|
+
if (!title && isComponentElement(child, AlertTitle2)) {
|
|
563
|
+
title = child;
|
|
564
|
+
hasSeenBodyContent = true;
|
|
565
|
+
continue;
|
|
566
|
+
}
|
|
567
|
+
if (!description && isComponentElement(child, AlertDescription2)) {
|
|
568
|
+
description = child;
|
|
569
|
+
hasSeenBodyContent = true;
|
|
570
|
+
continue;
|
|
571
|
+
}
|
|
572
|
+
if (!icon && !hasSeenBodyContent && React5.isValidElement(child)) {
|
|
573
|
+
icon = child;
|
|
574
|
+
continue;
|
|
575
|
+
}
|
|
576
|
+
extras.push(child);
|
|
577
|
+
}
|
|
578
|
+
const hasSupportingContent = Boolean(description || extras.length > 0);
|
|
579
|
+
const resolvedIcon = cloneWithClassName(
|
|
580
|
+
icon ?? React5.createElement(defaultVariantIcons[variant ?? "default"], {
|
|
581
|
+
"aria-hidden": true
|
|
582
|
+
}),
|
|
583
|
+
"size-4 shrink-0",
|
|
584
|
+
"alert-icon",
|
|
585
|
+
{
|
|
586
|
+
style: { color: "inherit" }
|
|
587
|
+
}
|
|
588
|
+
);
|
|
589
|
+
const resolvedTitle = title ? cloneWithClassName(
|
|
590
|
+
title,
|
|
591
|
+
"min-w-0 text-sm font-medium leading-5 tracking-normal text-current",
|
|
592
|
+
"alert-title"
|
|
593
|
+
) : null;
|
|
594
|
+
const supportingContent = description || extras.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex min-w-0 w-full flex-col gap-1", "data-slot": "alert-supporting", children: [
|
|
595
|
+
description ? cloneWithClassName(
|
|
596
|
+
description,
|
|
597
|
+
descriptionVariants({ variant }),
|
|
598
|
+
"alert-description"
|
|
599
|
+
) : null,
|
|
600
|
+
extras.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
601
|
+
"div",
|
|
602
|
+
{
|
|
603
|
+
className: cn(
|
|
604
|
+
"min-w-0 text-sm leading-5 text-current",
|
|
605
|
+
"w-full",
|
|
606
|
+
"[&_ol]:list-decimal [&_ol]:pl-[21px] [&_ol]:space-y-0",
|
|
607
|
+
"[&_ul]:list-disc [&_ul]:pl-[21px] [&_ul]:space-y-0"
|
|
608
|
+
),
|
|
609
|
+
"data-slot": "alert-extra",
|
|
610
|
+
children: extras
|
|
611
|
+
}
|
|
612
|
+
) : null
|
|
613
|
+
] }) : null;
|
|
614
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
615
|
+
Alert,
|
|
616
|
+
{
|
|
617
|
+
ref,
|
|
618
|
+
className: cn(
|
|
619
|
+
adsAlertVariants({ variant, hasSupportingContent }),
|
|
620
|
+
className
|
|
621
|
+
),
|
|
622
|
+
role: "alert",
|
|
623
|
+
...props,
|
|
624
|
+
children: hasSupportingContent ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col gap-0.5", "data-slot": "alert-body", children: [
|
|
625
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex min-w-0 items-center gap-3", "data-slot": "alert-heading-row", children: [
|
|
626
|
+
resolvedIcon,
|
|
627
|
+
resolvedTitle
|
|
628
|
+
] }),
|
|
629
|
+
supportingContent ? /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex min-w-0 gap-3", "data-slot": "alert-content-row", children: [
|
|
630
|
+
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { "aria-hidden": true, className: "size-4 shrink-0" }),
|
|
631
|
+
supportingContent
|
|
632
|
+
] }) : null
|
|
633
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { className: "flex min-w-0 flex-1 flex-col gap-0.5", "data-slot": "alert-body", children: /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)("div", { className: "flex min-w-0 items-center gap-3", "data-slot": "alert-heading-row", children: [
|
|
634
|
+
resolvedIcon,
|
|
635
|
+
resolvedTitle ?? children
|
|
636
|
+
] }) })
|
|
637
|
+
}
|
|
638
|
+
);
|
|
639
|
+
}
|
|
640
|
+
);
|
|
641
|
+
Alert2.displayName = "AdsAlert";
|
|
642
|
+
var AlertTitle2 = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(AlertTitle, { ref, className: cn(className), ...props }));
|
|
643
|
+
AlertTitle2.displayName = "AlertTitle";
|
|
644
|
+
var AlertDescription2 = React5.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(AlertDescription, { ref, className: cn(className), ...props }));
|
|
645
|
+
AlertDescription2.displayName = "AlertDescription";
|
|
646
|
+
|
|
647
|
+
// src/components/AdsBadge/index.tsx
|
|
648
|
+
var React6 = __toESM(require("react"), 1);
|
|
649
|
+
var import_class_variance_authority4 = require("class-variance-authority");
|
|
650
|
+
|
|
651
|
+
// src/primitives/badge.tsx
|
|
652
|
+
var import_class_variance_authority3 = require("class-variance-authority");
|
|
653
|
+
var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
654
|
+
var badgeVariants = (0, import_class_variance_authority3.cva)(
|
|
655
|
+
"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
|
|
656
|
+
{
|
|
657
|
+
variants: {
|
|
658
|
+
variant: {
|
|
659
|
+
default: "border-transparent bg-primary text-primary-foreground hover:bg-primary/80",
|
|
660
|
+
secondary: "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
|
|
661
|
+
destructive: "border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",
|
|
662
|
+
outline: "text-foreground"
|
|
663
|
+
}
|
|
664
|
+
},
|
|
665
|
+
defaultVariants: {
|
|
666
|
+
variant: "default"
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
);
|
|
670
|
+
function Badge({ className, variant, ...props }) {
|
|
671
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)("div", { className: cn(badgeVariants({ variant }), className), ...props });
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
// src/components/AdsBadge/index.tsx
|
|
675
|
+
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
676
|
+
var adsBadgeVariants = (0, import_class_variance_authority4.cva)(
|
|
677
|
+
[
|
|
678
|
+
"h-5 min-h-5",
|
|
679
|
+
"border text-xs font-medium leading-4 tracking-normal",
|
|
680
|
+
"shadow-none",
|
|
681
|
+
"focus:ring-offset-background"
|
|
682
|
+
],
|
|
683
|
+
{
|
|
684
|
+
variants: {
|
|
685
|
+
variant: {
|
|
686
|
+
default: "border-transparent bg-primary text-primary-foreground hover:bg-primary",
|
|
687
|
+
secondary: "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary",
|
|
688
|
+
destructive: "border-transparent bg-destructive text-primary-foreground hover:bg-destructive",
|
|
689
|
+
outline: "border-border bg-transparent text-foreground hover:bg-transparent"
|
|
690
|
+
},
|
|
691
|
+
format: {
|
|
692
|
+
label: "!rounded-radius-lg px-[10px] py-[2px]",
|
|
693
|
+
icon: "!rounded-radius-lg gap-1 px-[10px] py-[2px]",
|
|
694
|
+
number: "!rounded-full px-[10px] py-[2px]"
|
|
695
|
+
}
|
|
696
|
+
},
|
|
697
|
+
compoundVariants: [
|
|
698
|
+
{
|
|
699
|
+
format: "number",
|
|
700
|
+
variant: "outline",
|
|
701
|
+
className: "px-1 font-mono"
|
|
702
|
+
}
|
|
703
|
+
],
|
|
704
|
+
defaultVariants: {
|
|
705
|
+
format: "label",
|
|
706
|
+
variant: "default"
|
|
707
|
+
}
|
|
708
|
+
}
|
|
709
|
+
);
|
|
710
|
+
function renderIcon(icon) {
|
|
711
|
+
if (!icon) {
|
|
712
|
+
return null;
|
|
713
|
+
}
|
|
714
|
+
if (React6.isValidElement(icon)) {
|
|
715
|
+
return React6.cloneElement(icon, {
|
|
716
|
+
className: cn("h-3 w-3 shrink-0", icon.props.className)
|
|
717
|
+
});
|
|
718
|
+
}
|
|
719
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "inline-flex h-3 w-3 shrink-0 items-center justify-center", children: icon });
|
|
720
|
+
}
|
|
721
|
+
function AdsBadge({ children, className, format, icon, variant, ...props }) {
|
|
722
|
+
const resolvedFormat = format ?? (icon ? "icon" : "label");
|
|
723
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
|
|
724
|
+
Badge,
|
|
725
|
+
{
|
|
726
|
+
className: cn(adsBadgeVariants({ format: resolvedFormat, variant }), className),
|
|
727
|
+
variant,
|
|
728
|
+
...props,
|
|
729
|
+
children: [
|
|
730
|
+
renderIcon(icon),
|
|
731
|
+
children
|
|
732
|
+
]
|
|
733
|
+
}
|
|
734
|
+
);
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
// src/components/AdsAlertDialog/index.tsx
|
|
738
|
+
var React7 = __toESM(require("react"), 1);
|
|
739
|
+
var AlertDialogPrimitive = __toESM(require("@radix-ui/react-alert-dialog"), 1);
|
|
740
|
+
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
741
|
+
var overlayClassName = "fixed inset-0 z-50 bg-black/80 backdrop-blur-[2px] data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0";
|
|
742
|
+
var contentClassName = "fixed left-1/2 top-1/2 z-50 grid w-[calc(100%-2rem)] max-w-[512px] -translate-x-1/2 -translate-y-1/2 gap-lg rounded-radius-lg border border-border bg-card p-xl text-foreground shadow-[0px_4px_6px_-4px_rgba(0,0,0,0.1),0px_10px_15px_-3px_rgba(0,0,0,0.1)] duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]";
|
|
743
|
+
var actionClassName = "inline-flex h-9 items-center justify-center rounded-radius-md border-0 bg-brand-gradient px-lg py-sm text-sm font-medium leading-5 tracking-normal text-primary-foreground shadow-[0px_1px_2px_rgba(0,0,0,0.1)] transition-opacity hover:opacity-90 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-card disabled:pointer-events-none disabled:opacity-[0.65]";
|
|
744
|
+
var cancelClassName = "inline-flex h-9 items-center justify-center rounded-radius-md border border-border bg-card px-lg py-sm text-sm font-medium leading-5 tracking-normal text-secondary-foreground shadow-[0px_1px_2px_rgba(0,0,0,0.1)] transition-colors hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-card disabled:pointer-events-none disabled:opacity-[0.65]";
|
|
745
|
+
var AlertDialog = AlertDialogPrimitive.Root;
|
|
746
|
+
var AlertDialogTrigger = AlertDialogPrimitive.Trigger;
|
|
747
|
+
var AlertDialogPortal = AlertDialogPrimitive.Portal;
|
|
748
|
+
var AlertDialogOverlay = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
749
|
+
AlertDialogPrimitive.Overlay,
|
|
750
|
+
{
|
|
751
|
+
className: cn(overlayClassName, className),
|
|
752
|
+
ref,
|
|
753
|
+
...props
|
|
754
|
+
}
|
|
755
|
+
));
|
|
756
|
+
AlertDialogOverlay.displayName = "AlertDialogOverlay";
|
|
757
|
+
var AlertDialogContent = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(AlertDialogPortal, { children: [
|
|
758
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(AlertDialogOverlay, {}),
|
|
759
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
760
|
+
AlertDialogPrimitive.Content,
|
|
761
|
+
{
|
|
762
|
+
className: cn(contentClassName, className),
|
|
763
|
+
ref,
|
|
764
|
+
...props
|
|
765
|
+
}
|
|
766
|
+
)
|
|
767
|
+
] }));
|
|
768
|
+
AlertDialogContent.displayName = "AlertDialogContent";
|
|
769
|
+
var AlertDialogHeader = React7.forwardRef(
|
|
770
|
+
({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
771
|
+
"div",
|
|
772
|
+
{
|
|
773
|
+
className: cn("flex flex-col gap-sm text-left", className),
|
|
774
|
+
ref,
|
|
775
|
+
...props
|
|
776
|
+
}
|
|
777
|
+
)
|
|
778
|
+
);
|
|
779
|
+
AlertDialogHeader.displayName = "AlertDialogHeader";
|
|
780
|
+
var AlertDialogFooter = React7.forwardRef(
|
|
781
|
+
({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
782
|
+
"div",
|
|
783
|
+
{
|
|
784
|
+
className: cn(
|
|
785
|
+
"flex flex-col-reverse gap-sm sm:flex-row sm:justify-end",
|
|
786
|
+
className
|
|
787
|
+
),
|
|
788
|
+
ref,
|
|
789
|
+
...props
|
|
790
|
+
}
|
|
791
|
+
)
|
|
792
|
+
);
|
|
793
|
+
AlertDialogFooter.displayName = "AlertDialogFooter";
|
|
794
|
+
var AlertDialogTitle = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
795
|
+
AlertDialogPrimitive.Title,
|
|
796
|
+
{
|
|
797
|
+
className: cn("text-lg font-semibold leading-7 text-foreground", className),
|
|
798
|
+
ref,
|
|
799
|
+
...props
|
|
800
|
+
}
|
|
801
|
+
));
|
|
802
|
+
AlertDialogTitle.displayName = "AlertDialogTitle";
|
|
803
|
+
var AlertDialogDescription = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
804
|
+
AlertDialogPrimitive.Description,
|
|
805
|
+
{
|
|
806
|
+
className: cn("text-sm font-normal leading-5 text-muted-foreground", className),
|
|
807
|
+
ref,
|
|
808
|
+
...props
|
|
809
|
+
}
|
|
810
|
+
));
|
|
811
|
+
AlertDialogDescription.displayName = "AlertDialogDescription";
|
|
812
|
+
var AlertDialogAction = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
813
|
+
AlertDialogPrimitive.Action,
|
|
814
|
+
{
|
|
815
|
+
className: cn(actionClassName, className),
|
|
816
|
+
ref,
|
|
817
|
+
...props
|
|
818
|
+
}
|
|
819
|
+
));
|
|
820
|
+
AlertDialogAction.displayName = "AlertDialogAction";
|
|
821
|
+
var AlertDialogCancel = React7.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
822
|
+
AlertDialogPrimitive.Cancel,
|
|
823
|
+
{
|
|
824
|
+
className: cn(cancelClassName, className),
|
|
825
|
+
ref,
|
|
826
|
+
...props
|
|
827
|
+
}
|
|
828
|
+
));
|
|
829
|
+
AlertDialogCancel.displayName = "AlertDialogCancel";
|
|
830
|
+
var AdsAlertDialog = AlertDialog;
|
|
831
|
+
var AdsAlertDialogTrigger = AlertDialogTrigger;
|
|
832
|
+
var AdsAlertDialogPortal = AlertDialogPortal;
|
|
833
|
+
var AdsAlertDialogOverlay = AlertDialogOverlay;
|
|
834
|
+
var AdsAlertDialogContent = AlertDialogContent;
|
|
835
|
+
var AdsAlertDialogHeader = AlertDialogHeader;
|
|
836
|
+
var AdsAlertDialogFooter = AlertDialogFooter;
|
|
837
|
+
var AdsAlertDialogTitle = AlertDialogTitle;
|
|
838
|
+
var AdsAlertDialogDescription = AlertDialogDescription;
|
|
839
|
+
var AdsAlertDialogAction = AlertDialogAction;
|
|
840
|
+
var AdsAlertDialogCancel = AlertDialogCancel;
|
|
841
|
+
|
|
842
|
+
// src/components/AdsButton/index.tsx
|
|
843
|
+
var React9 = __toESM(require("react"), 1);
|
|
844
|
+
|
|
845
|
+
// src/primitives/button.tsx
|
|
846
|
+
var React8 = __toESM(require("react"), 1);
|
|
847
|
+
var import_react_slot = require("@radix-ui/react-slot");
|
|
848
|
+
var import_class_variance_authority5 = require("class-variance-authority");
|
|
849
|
+
var import_jsx_runtime9 = require("react/jsx-runtime");
|
|
850
|
+
var buttonVariants = (0, import_class_variance_authority5.cva)(
|
|
851
|
+
"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
|
|
852
|
+
{
|
|
853
|
+
variants: {
|
|
854
|
+
variant: {
|
|
855
|
+
default: "bg-primary text-primary-foreground hover:bg-primary/90",
|
|
856
|
+
destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
|
|
857
|
+
outline: "border border-input bg-background hover:bg-accent hover:text-accent-foreground",
|
|
858
|
+
secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
|
|
859
|
+
ghost: "hover:bg-accent hover:text-accent-foreground",
|
|
860
|
+
link: "text-primary underline-offset-4 hover:underline"
|
|
861
|
+
},
|
|
862
|
+
size: {
|
|
863
|
+
default: "h-10 px-4 py-2",
|
|
864
|
+
sm: "h-9 rounded-md px-3",
|
|
865
|
+
lg: "h-11 rounded-md px-8",
|
|
866
|
+
icon: "h-10 w-10"
|
|
867
|
+
}
|
|
868
|
+
},
|
|
869
|
+
defaultVariants: {
|
|
870
|
+
variant: "default",
|
|
871
|
+
size: "default"
|
|
872
|
+
}
|
|
873
|
+
}
|
|
874
|
+
);
|
|
875
|
+
var Button = React8.forwardRef(
|
|
876
|
+
({ className, variant, size, asChild = false, ...props }, ref) => {
|
|
877
|
+
const Comp = asChild ? import_react_slot.Slot : "button";
|
|
878
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
879
|
+
Comp,
|
|
880
|
+
{
|
|
881
|
+
className: cn(buttonVariants({ variant, size, className })),
|
|
882
|
+
ref,
|
|
883
|
+
...props
|
|
884
|
+
}
|
|
885
|
+
);
|
|
886
|
+
}
|
|
887
|
+
);
|
|
888
|
+
Button.displayName = "Button";
|
|
889
|
+
|
|
890
|
+
// src/components/AdsButton/index.tsx
|
|
891
|
+
var import_jsx_runtime10 = require("react/jsx-runtime");
|
|
892
|
+
var intentClassName = {
|
|
893
|
+
brand: "border-0 bg-brand-gradient text-primary-foreground shadow-[0px_1px_2px_rgba(0,0,0,0.1)] hover:opacity-90",
|
|
894
|
+
primary: "border-0 bg-primary text-primary-foreground shadow-[0px_1px_2px_rgba(0,0,0,0.1)] hover:bg-brand-primary-hover",
|
|
895
|
+
secondary: "border border-border bg-card text-secondary-foreground shadow-[0px_1px_2px_rgba(0,0,0,0.1)] hover:bg-accent",
|
|
896
|
+
tertiary: "border-0 bg-card text-foreground shadow-none hover:bg-accent hover:shadow-[0px_1px_2px_rgba(0,0,0,0.1)]",
|
|
897
|
+
ghost: "border-0 bg-card text-foreground shadow-none hover:bg-accent hover:shadow-[0px_1px_2px_rgba(0,0,0,0.1)]",
|
|
898
|
+
danger: "border-0 bg-destructive text-primary-foreground shadow-[0px_1px_2px_rgba(0,0,0,0.1)] hover:bg-destructive/90",
|
|
899
|
+
destructive: "border-0 bg-destructive text-primary-foreground shadow-[0px_1px_2px_rgba(0,0,0,0.1)] hover:bg-destructive/90",
|
|
900
|
+
link: "border-0 bg-transparent text-primary shadow-none underline-offset-2 hover:bg-transparent hover:text-primary hover:underline"
|
|
901
|
+
};
|
|
902
|
+
var sizeClassName = {
|
|
903
|
+
sm: "!h-8 px-md py-sm",
|
|
904
|
+
md: "!h-9 px-lg py-sm",
|
|
905
|
+
lg: "!h-10 px-xl py-[10px]"
|
|
906
|
+
};
|
|
907
|
+
var focusClassName = {
|
|
908
|
+
brand: "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
|
|
909
|
+
primary: "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
|
|
910
|
+
secondary: "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
|
|
911
|
+
tertiary: "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
|
|
912
|
+
ghost: "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
|
|
913
|
+
danger: "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
|
|
914
|
+
destructive: "focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
|
|
915
|
+
link: "focus-visible:border focus-visible:border-ring focus-visible:ring-0 focus-visible:ring-offset-0"
|
|
916
|
+
};
|
|
917
|
+
function renderLeadingIcon(icon) {
|
|
918
|
+
if (!icon) {
|
|
919
|
+
return null;
|
|
920
|
+
}
|
|
921
|
+
if (React9.isValidElement(icon)) {
|
|
922
|
+
const sizedIcon = React9.cloneElement(icon, {
|
|
923
|
+
className: cn("!h-4 !w-4 h-4 w-4", icon.props.className)
|
|
924
|
+
});
|
|
925
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "inline-flex h-4 w-4 items-center justify-center [&>svg]:!h-4 [&>svg]:!w-4", children: sizedIcon });
|
|
926
|
+
}
|
|
927
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "inline-flex h-4 w-4 items-center justify-center", children: icon });
|
|
928
|
+
}
|
|
929
|
+
function AdsButtonLoadingIcon() {
|
|
930
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
931
|
+
"svg",
|
|
932
|
+
{
|
|
933
|
+
"aria-hidden": true,
|
|
934
|
+
className: "!h-4 !w-4 h-4 w-4 animate-spin",
|
|
935
|
+
"data-testid": "ads-button-loading-icon",
|
|
936
|
+
fill: "none",
|
|
937
|
+
viewBox: "0 0 20 20",
|
|
938
|
+
xmlns: "http://www.w3.org/2000/svg",
|
|
939
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
|
940
|
+
"g",
|
|
941
|
+
{
|
|
942
|
+
stroke: "currentColor",
|
|
943
|
+
strokeLinecap: "round",
|
|
944
|
+
strokeWidth: "1.6",
|
|
945
|
+
transform: "translate(1.675 1.675)",
|
|
946
|
+
children: [
|
|
947
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("path", { d: "M8.1667 0.6667V3.1667" }),
|
|
948
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("path", { d: "M8.1667 13.1667V15.6667" }),
|
|
949
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("path", { d: "M15.6667 8.1667H13.1667" }),
|
|
950
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("path", { d: "M3.1667 8.1667H0.6667" }),
|
|
951
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("path", { d: "M13.4696 2.8631L11.7018 4.6309" }),
|
|
952
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("path", { d: "M4.6317 11.7018L2.8639 13.4696" }),
|
|
953
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("path", { d: "M13.4696 13.4696L11.7018 11.7018" }),
|
|
954
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("path", { d: "M4.6317 4.6309L2.8639 2.8631" })
|
|
955
|
+
]
|
|
956
|
+
}
|
|
957
|
+
)
|
|
958
|
+
}
|
|
959
|
+
);
|
|
960
|
+
}
|
|
961
|
+
var AdsButton = React9.forwardRef(
|
|
962
|
+
({
|
|
963
|
+
children,
|
|
964
|
+
className,
|
|
965
|
+
disabled = false,
|
|
966
|
+
icon,
|
|
967
|
+
intent = "brand",
|
|
968
|
+
leadingIcon,
|
|
969
|
+
loading = false,
|
|
970
|
+
loadingLabel,
|
|
971
|
+
size = "md",
|
|
972
|
+
type = "button",
|
|
973
|
+
...props
|
|
974
|
+
}, ref) => {
|
|
975
|
+
const { messages } = useAdsI18n();
|
|
976
|
+
const isDisabled = disabled || loading;
|
|
977
|
+
const resolvedIcon = icon ?? leadingIcon;
|
|
978
|
+
const resolvedLoadingLabel = loadingLabel ?? messages.button.loading;
|
|
979
|
+
const hasTextContent = React9.Children.count(children) > 0;
|
|
980
|
+
const isIconOnly = Boolean(resolvedIcon) && !hasTextContent;
|
|
981
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
982
|
+
Button,
|
|
983
|
+
{
|
|
984
|
+
"aria-busy": loading || void 0,
|
|
985
|
+
className: cn(
|
|
986
|
+
"min-w-0 rounded-radius-md text-sm font-medium leading-5 tracking-normal",
|
|
987
|
+
"active:translate-y-px",
|
|
988
|
+
"active:not-aria-[haspopup]:translate-y-px",
|
|
989
|
+
"focus-visible:outline-none",
|
|
990
|
+
"disabled:pointer-events-none",
|
|
991
|
+
intentClassName[intent],
|
|
992
|
+
focusClassName[intent],
|
|
993
|
+
sizeClassName[size],
|
|
994
|
+
isIconOnly && (size === "sm" ? "!w-8 px-0" : size === "lg" ? "!w-10 px-0" : "!w-9 px-0"),
|
|
995
|
+
loading ? "disabled:opacity-100" : "disabled:opacity-[0.65]",
|
|
996
|
+
className
|
|
997
|
+
),
|
|
998
|
+
disabled: isDisabled,
|
|
999
|
+
ref,
|
|
1000
|
+
type,
|
|
1001
|
+
variant: "ghost",
|
|
1002
|
+
...props,
|
|
1003
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("span", { className: "inline-flex items-center justify-center gap-1", children: [
|
|
1004
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("span", { className: "inline-flex items-center justify-center gap-sm", children: [
|
|
1005
|
+
renderLeadingIcon(resolvedIcon),
|
|
1006
|
+
hasTextContent ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { children }) : null
|
|
1007
|
+
] }),
|
|
1008
|
+
loading ? /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
|
1009
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(AdsButtonLoadingIcon, {}),
|
|
1010
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "sr-only", children: resolvedLoadingLabel })
|
|
1011
|
+
] }) : null
|
|
1012
|
+
] })
|
|
1013
|
+
}
|
|
1014
|
+
);
|
|
1015
|
+
}
|
|
1016
|
+
);
|
|
1017
|
+
AdsButton.displayName = "AdsButton";
|
|
1018
|
+
|
|
1019
|
+
// src/components/AdsBreadcrumb/index.tsx
|
|
1020
|
+
var React11 = __toESM(require("react"), 1);
|
|
1021
|
+
var import_lucide_react4 = require("lucide-react");
|
|
1022
|
+
|
|
1023
|
+
// src/primitives/breadcrumb.tsx
|
|
1024
|
+
var React10 = __toESM(require("react"), 1);
|
|
1025
|
+
var import_react_slot2 = require("@radix-ui/react-slot");
|
|
1026
|
+
var import_lucide_react3 = require("lucide-react");
|
|
1027
|
+
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
1028
|
+
var Breadcrumb = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
1029
|
+
"nav",
|
|
1030
|
+
{
|
|
1031
|
+
"aria-label": "breadcrumb",
|
|
1032
|
+
className: cn("w-full", className),
|
|
1033
|
+
ref,
|
|
1034
|
+
...props
|
|
1035
|
+
}
|
|
1036
|
+
));
|
|
1037
|
+
Breadcrumb.displayName = "Breadcrumb";
|
|
1038
|
+
var BreadcrumbList = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
1039
|
+
"ul",
|
|
1040
|
+
{
|
|
1041
|
+
className: cn(
|
|
1042
|
+
"flex flex-wrap items-center gap-1.5 break-words text-sm text-muted-foreground",
|
|
1043
|
+
className
|
|
1044
|
+
),
|
|
1045
|
+
ref,
|
|
1046
|
+
...props
|
|
1047
|
+
}
|
|
1048
|
+
));
|
|
1049
|
+
BreadcrumbList.displayName = "BreadcrumbList";
|
|
1050
|
+
var BreadcrumbItem = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
1051
|
+
"li",
|
|
1052
|
+
{
|
|
1053
|
+
className: cn("inline-flex items-center gap-1.5", className),
|
|
1054
|
+
ref,
|
|
1055
|
+
...props
|
|
1056
|
+
}
|
|
1057
|
+
));
|
|
1058
|
+
BreadcrumbItem.displayName = "BreadcrumbItem";
|
|
1059
|
+
var BreadcrumbLink = React10.forwardRef(
|
|
1060
|
+
({ asChild = false, className, ...props }, ref) => {
|
|
1061
|
+
const Comp = asChild ? import_react_slot2.Slot : "a";
|
|
1062
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Comp, { className: cn("transition-colors", className), ref, ...props });
|
|
1063
|
+
}
|
|
1064
|
+
);
|
|
1065
|
+
BreadcrumbLink.displayName = "BreadcrumbLink";
|
|
1066
|
+
var BreadcrumbPage = React10.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
1067
|
+
"span",
|
|
1068
|
+
{
|
|
1069
|
+
"aria-current": "page",
|
|
1070
|
+
"aria-disabled": "true",
|
|
1071
|
+
className: cn("font-normal text-foreground", className),
|
|
1072
|
+
ref,
|
|
1073
|
+
role: "link",
|
|
1074
|
+
...props
|
|
1075
|
+
}
|
|
1076
|
+
));
|
|
1077
|
+
BreadcrumbPage.displayName = "BreadcrumbPage";
|
|
1078
|
+
var BreadcrumbSeparator = ({
|
|
1079
|
+
children,
|
|
1080
|
+
className,
|
|
1081
|
+
...props
|
|
1082
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
1083
|
+
"li",
|
|
1084
|
+
{
|
|
1085
|
+
"aria-hidden": "true",
|
|
1086
|
+
className: cn("[&_svg]:size-3.5", className),
|
|
1087
|
+
role: "presentation",
|
|
1088
|
+
...props,
|
|
1089
|
+
children: children ?? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_lucide_react3.ChevronRight, {})
|
|
1090
|
+
}
|
|
1091
|
+
);
|
|
1092
|
+
BreadcrumbSeparator.displayName = "BreadcrumbSeparator";
|
|
1093
|
+
var BreadcrumbEllipsis = ({
|
|
1094
|
+
className,
|
|
1095
|
+
...props
|
|
1096
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
|
|
1097
|
+
"span",
|
|
1098
|
+
{
|
|
1099
|
+
"aria-hidden": "true",
|
|
1100
|
+
className: cn("flex size-3.5 items-center justify-center", className),
|
|
1101
|
+
role: "presentation",
|
|
1102
|
+
...props,
|
|
1103
|
+
children: [
|
|
1104
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_lucide_react3.MoreHorizontal, { className: "size-3.5" }),
|
|
1105
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "sr-only", children: "More" })
|
|
1106
|
+
]
|
|
1107
|
+
}
|
|
1108
|
+
);
|
|
1109
|
+
BreadcrumbEllipsis.displayName = "BreadcrumbEllipsis";
|
|
1110
|
+
|
|
1111
|
+
// src/components/AdsBreadcrumb/index.tsx
|
|
1112
|
+
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
1113
|
+
var AdsBreadcrumb = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Breadcrumb, { className: cn("w-full", className), ref, ...props }));
|
|
1114
|
+
AdsBreadcrumb.displayName = "AdsBreadcrumb";
|
|
1115
|
+
var AdsBreadcrumbList = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1116
|
+
BreadcrumbList,
|
|
1117
|
+
{
|
|
1118
|
+
className: cn(
|
|
1119
|
+
"flex flex-wrap items-center gap-1.5 text-sm leading-5 text-muted-foreground",
|
|
1120
|
+
className
|
|
1121
|
+
),
|
|
1122
|
+
ref,
|
|
1123
|
+
...props
|
|
1124
|
+
}
|
|
1125
|
+
));
|
|
1126
|
+
AdsBreadcrumbList.displayName = "AdsBreadcrumbList";
|
|
1127
|
+
var AdsBreadcrumbItem = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1128
|
+
BreadcrumbItem,
|
|
1129
|
+
{
|
|
1130
|
+
className: cn("inline-flex items-center gap-1.5", className),
|
|
1131
|
+
ref,
|
|
1132
|
+
...props
|
|
1133
|
+
}
|
|
1134
|
+
));
|
|
1135
|
+
AdsBreadcrumbItem.displayName = "AdsBreadcrumbItem";
|
|
1136
|
+
var AdsBreadcrumbLink = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1137
|
+
BreadcrumbLink,
|
|
1138
|
+
{
|
|
1139
|
+
className: cn(
|
|
1140
|
+
"text-sm font-normal leading-5 text-muted-foreground transition-colors hover:text-foreground",
|
|
1141
|
+
className
|
|
1142
|
+
),
|
|
1143
|
+
ref,
|
|
1144
|
+
...props
|
|
1145
|
+
}
|
|
1146
|
+
));
|
|
1147
|
+
AdsBreadcrumbLink.displayName = "AdsBreadcrumbLink";
|
|
1148
|
+
var AdsBreadcrumbPage = React11.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1149
|
+
BreadcrumbPage,
|
|
1150
|
+
{
|
|
1151
|
+
className: cn("text-sm font-normal leading-5 text-foreground", className),
|
|
1152
|
+
ref,
|
|
1153
|
+
...props
|
|
1154
|
+
}
|
|
1155
|
+
));
|
|
1156
|
+
AdsBreadcrumbPage.displayName = "AdsBreadcrumbPage";
|
|
1157
|
+
var separatorIcons = {
|
|
1158
|
+
chevron: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react4.ChevronRight, { className: "size-3.5" }),
|
|
1159
|
+
slash: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react4.Slash, { className: "size-3.5" })
|
|
1160
|
+
};
|
|
1161
|
+
var AdsBreadcrumbSeparator = ({
|
|
1162
|
+
children,
|
|
1163
|
+
className,
|
|
1164
|
+
icon = "chevron",
|
|
1165
|
+
...props
|
|
1166
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1167
|
+
BreadcrumbSeparator,
|
|
1168
|
+
{
|
|
1169
|
+
className: cn("text-muted-foreground [&_svg]:size-3.5", className),
|
|
1170
|
+
...props,
|
|
1171
|
+
children: children ?? separatorIcons[icon]
|
|
1172
|
+
}
|
|
1173
|
+
);
|
|
1174
|
+
AdsBreadcrumbSeparator.displayName = "AdsBreadcrumbSeparator";
|
|
1175
|
+
var AdsBreadcrumbEllipsis = ({
|
|
1176
|
+
className,
|
|
1177
|
+
children,
|
|
1178
|
+
...props
|
|
1179
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1180
|
+
BreadcrumbEllipsis,
|
|
1181
|
+
{
|
|
1182
|
+
className: cn("size-3.5 text-muted-foreground", className),
|
|
1183
|
+
...props,
|
|
1184
|
+
children: children ?? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react4.MoreHorizontal, { className: "size-3.5" })
|
|
1185
|
+
}
|
|
1186
|
+
);
|
|
1187
|
+
AdsBreadcrumbEllipsis.displayName = "AdsBreadcrumbEllipsis";
|
|
1188
|
+
|
|
1189
|
+
// src/components/AdsCheckbox/index.tsx
|
|
1190
|
+
var React16 = __toESM(require("react"), 1);
|
|
1191
|
+
|
|
1192
|
+
// src/primitives/checkbox.tsx
|
|
1193
|
+
var React12 = __toESM(require("react"), 1);
|
|
1194
|
+
var CheckboxPrimitive = __toESM(require("@radix-ui/react-checkbox"), 1);
|
|
1195
|
+
var import_lucide_react5 = require("lucide-react");
|
|
1196
|
+
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
1197
|
+
var Checkbox = React12.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
1198
|
+
CheckboxPrimitive.Root,
|
|
1199
|
+
{
|
|
1200
|
+
ref,
|
|
1201
|
+
className: cn(
|
|
1202
|
+
"grid place-content-center peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground",
|
|
1203
|
+
className
|
|
1204
|
+
),
|
|
1205
|
+
...props,
|
|
1206
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
1207
|
+
CheckboxPrimitive.Indicator,
|
|
1208
|
+
{
|
|
1209
|
+
className: cn("grid place-content-center text-current"),
|
|
1210
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_lucide_react5.Check, { className: "h-4 w-4" })
|
|
1211
|
+
}
|
|
1212
|
+
)
|
|
1213
|
+
}
|
|
1214
|
+
));
|
|
1215
|
+
Checkbox.displayName = CheckboxPrimitive.Root.displayName;
|
|
1216
|
+
|
|
1217
|
+
// src/components/AdsField/index.tsx
|
|
1218
|
+
var React15 = __toESM(require("react"), 1);
|
|
1219
|
+
|
|
1220
|
+
// src/primitives/field.tsx
|
|
1221
|
+
var import_react = require("react");
|
|
1222
|
+
var import_class_variance_authority7 = require("class-variance-authority");
|
|
1223
|
+
|
|
1224
|
+
// src/primitives/label.tsx
|
|
1225
|
+
var React13 = __toESM(require("react"), 1);
|
|
1226
|
+
var LabelPrimitive = __toESM(require("@radix-ui/react-label"), 1);
|
|
1227
|
+
var import_class_variance_authority6 = require("class-variance-authority");
|
|
1228
|
+
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
1229
|
+
var labelVariants = (0, import_class_variance_authority6.cva)(
|
|
1230
|
+
"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
|
|
1231
|
+
);
|
|
1232
|
+
var Label = React13.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1233
|
+
LabelPrimitive.Root,
|
|
1234
|
+
{
|
|
1235
|
+
ref,
|
|
1236
|
+
className: cn(labelVariants(), className),
|
|
1237
|
+
...props
|
|
1238
|
+
}
|
|
1239
|
+
));
|
|
1240
|
+
Label.displayName = LabelPrimitive.Root.displayName;
|
|
1241
|
+
|
|
1242
|
+
// src/primitives/separator.tsx
|
|
1243
|
+
var React14 = __toESM(require("react"), 1);
|
|
1244
|
+
var SeparatorPrimitive = __toESM(require("@radix-ui/react-separator"), 1);
|
|
1245
|
+
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
1246
|
+
var Separator = React14.forwardRef(
|
|
1247
|
+
({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1248
|
+
SeparatorPrimitive.Root,
|
|
1249
|
+
{
|
|
1250
|
+
ref,
|
|
1251
|
+
decorative,
|
|
1252
|
+
orientation,
|
|
1253
|
+
className: cn(
|
|
1254
|
+
"shrink-0 bg-border",
|
|
1255
|
+
orientation === "horizontal" ? "h-[1px] w-full" : "h-full w-[1px]",
|
|
1256
|
+
className
|
|
1257
|
+
),
|
|
1258
|
+
...props
|
|
1259
|
+
}
|
|
1260
|
+
)
|
|
1261
|
+
);
|
|
1262
|
+
Separator.displayName = SeparatorPrimitive.Root.displayName;
|
|
1263
|
+
|
|
1264
|
+
// src/primitives/field.tsx
|
|
1265
|
+
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
1266
|
+
function FieldSet({ className, ...props }) {
|
|
1267
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1268
|
+
"fieldset",
|
|
1269
|
+
{
|
|
1270
|
+
"data-slot": "field-set",
|
|
1271
|
+
className: cn(
|
|
1272
|
+
"flex flex-col gap-6",
|
|
1273
|
+
"has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3",
|
|
1274
|
+
className
|
|
1275
|
+
),
|
|
1276
|
+
...props
|
|
1277
|
+
}
|
|
1278
|
+
);
|
|
1279
|
+
}
|
|
1280
|
+
function FieldLegend({
|
|
1281
|
+
className,
|
|
1282
|
+
variant = "legend",
|
|
1283
|
+
...props
|
|
1284
|
+
}) {
|
|
1285
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1286
|
+
"legend",
|
|
1287
|
+
{
|
|
1288
|
+
"data-slot": "field-legend",
|
|
1289
|
+
"data-variant": variant,
|
|
1290
|
+
className: cn(
|
|
1291
|
+
"mb-3 font-medium",
|
|
1292
|
+
"data-[variant=legend]:text-base",
|
|
1293
|
+
"data-[variant=label]:text-sm",
|
|
1294
|
+
className
|
|
1295
|
+
),
|
|
1296
|
+
...props
|
|
1297
|
+
}
|
|
1298
|
+
);
|
|
1299
|
+
}
|
|
1300
|
+
function FieldGroup({ className, ...props }) {
|
|
1301
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1302
|
+
"div",
|
|
1303
|
+
{
|
|
1304
|
+
"data-slot": "field-group",
|
|
1305
|
+
className: cn(
|
|
1306
|
+
"group/field-group @container/field-group flex w-full flex-col gap-7 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4",
|
|
1307
|
+
className
|
|
1308
|
+
),
|
|
1309
|
+
...props
|
|
1310
|
+
}
|
|
1311
|
+
);
|
|
1312
|
+
}
|
|
1313
|
+
var fieldVariants = (0, import_class_variance_authority7.cva)(
|
|
1314
|
+
"group/field data-[invalid=true]:text-destructive flex w-full gap-3",
|
|
1315
|
+
{
|
|
1316
|
+
variants: {
|
|
1317
|
+
orientation: {
|
|
1318
|
+
vertical: ["flex-col [&>*]:w-full [&>.sr-only]:w-auto"],
|
|
1319
|
+
horizontal: [
|
|
1320
|
+
"flex-row items-center",
|
|
1321
|
+
"[&>[data-slot=field-label]]:flex-auto",
|
|
1322
|
+
"has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px has-[>[data-slot=field-content]]:items-start"
|
|
1323
|
+
],
|
|
1324
|
+
responsive: [
|
|
1325
|
+
"@md/field-group:flex-row @md/field-group:items-center @md/field-group:[&>*]:w-auto flex-col [&>*]:w-full [&>.sr-only]:w-auto",
|
|
1326
|
+
"@md/field-group:[&>[data-slot=field-label]]:flex-auto",
|
|
1327
|
+
"@md/field-group:has-[>[data-slot=field-content]]:items-start @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px"
|
|
1328
|
+
]
|
|
1329
|
+
}
|
|
1330
|
+
},
|
|
1331
|
+
defaultVariants: {
|
|
1332
|
+
orientation: "vertical"
|
|
1333
|
+
}
|
|
1334
|
+
}
|
|
1335
|
+
);
|
|
1336
|
+
function Field({
|
|
1337
|
+
className,
|
|
1338
|
+
orientation = "vertical",
|
|
1339
|
+
...props
|
|
1340
|
+
}) {
|
|
1341
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1342
|
+
"div",
|
|
1343
|
+
{
|
|
1344
|
+
role: "group",
|
|
1345
|
+
"data-slot": "field",
|
|
1346
|
+
"data-orientation": orientation,
|
|
1347
|
+
className: cn(fieldVariants({ orientation }), className),
|
|
1348
|
+
...props
|
|
1349
|
+
}
|
|
1350
|
+
);
|
|
1351
|
+
}
|
|
1352
|
+
function FieldLabel({
|
|
1353
|
+
className,
|
|
1354
|
+
...props
|
|
1355
|
+
}) {
|
|
1356
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1357
|
+
Label,
|
|
1358
|
+
{
|
|
1359
|
+
"data-slot": "field-label",
|
|
1360
|
+
className: cn(
|
|
1361
|
+
"group/field-label peer/field-label flex w-fit gap-2 leading-snug group-data-[disabled=true]/field:opacity-50",
|
|
1362
|
+
"has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border [&>[data-slot=field]]:p-4",
|
|
1363
|
+
"has-data-[state=checked]:bg-primary/5 has-data-[state=checked]:border-primary dark:has-data-[state=checked]:bg-primary/10",
|
|
1364
|
+
className
|
|
1365
|
+
),
|
|
1366
|
+
...props
|
|
1367
|
+
}
|
|
1368
|
+
);
|
|
1369
|
+
}
|
|
1370
|
+
function FieldTitle({ className, ...props }) {
|
|
1371
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1372
|
+
"div",
|
|
1373
|
+
{
|
|
1374
|
+
"data-slot": "field-label",
|
|
1375
|
+
className: cn(
|
|
1376
|
+
"flex w-fit items-center gap-2 text-sm font-medium leading-snug group-data-[disabled=true]/field:opacity-50",
|
|
1377
|
+
className
|
|
1378
|
+
),
|
|
1379
|
+
...props
|
|
1380
|
+
}
|
|
1381
|
+
);
|
|
1382
|
+
}
|
|
1383
|
+
function FieldDescription({ className, ...props }) {
|
|
1384
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1385
|
+
"p",
|
|
1386
|
+
{
|
|
1387
|
+
"data-slot": "field-description",
|
|
1388
|
+
className: cn(
|
|
1389
|
+
"text-muted-foreground text-sm font-normal leading-normal group-has-[[data-orientation=horizontal]]/field:text-balance",
|
|
1390
|
+
"nth-last-2:-mt-1 last:mt-0 [[data-variant=legend]+&]:-mt-1.5",
|
|
1391
|
+
"[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4",
|
|
1392
|
+
className
|
|
1393
|
+
),
|
|
1394
|
+
...props
|
|
1395
|
+
}
|
|
1396
|
+
);
|
|
1397
|
+
}
|
|
1398
|
+
function FieldSeparator({
|
|
1399
|
+
children,
|
|
1400
|
+
className,
|
|
1401
|
+
...props
|
|
1402
|
+
}) {
|
|
1403
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
|
|
1404
|
+
"div",
|
|
1405
|
+
{
|
|
1406
|
+
"data-slot": "field-separator",
|
|
1407
|
+
"data-content": !!children,
|
|
1408
|
+
className: cn(
|
|
1409
|
+
"relative -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2",
|
|
1410
|
+
className
|
|
1411
|
+
),
|
|
1412
|
+
...props,
|
|
1413
|
+
children: [
|
|
1414
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Separator, { className: "absolute inset-0 top-1/2" }),
|
|
1415
|
+
children && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1416
|
+
"span",
|
|
1417
|
+
{
|
|
1418
|
+
className: "bg-background text-muted-foreground relative mx-auto block w-fit px-2",
|
|
1419
|
+
"data-slot": "field-separator-content",
|
|
1420
|
+
children
|
|
1421
|
+
}
|
|
1422
|
+
)
|
|
1423
|
+
]
|
|
1424
|
+
}
|
|
1425
|
+
);
|
|
1426
|
+
}
|
|
1427
|
+
function FieldError({
|
|
1428
|
+
className,
|
|
1429
|
+
children,
|
|
1430
|
+
errors,
|
|
1431
|
+
...props
|
|
1432
|
+
}) {
|
|
1433
|
+
const content = (0, import_react.useMemo)(() => {
|
|
1434
|
+
if (children) {
|
|
1435
|
+
return children;
|
|
1436
|
+
}
|
|
1437
|
+
if (!errors) {
|
|
1438
|
+
return null;
|
|
1439
|
+
}
|
|
1440
|
+
if (errors?.length === 1 && errors[0]?.message) {
|
|
1441
|
+
return errors[0].message;
|
|
1442
|
+
}
|
|
1443
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("ul", { className: "ml-4 flex list-disc flex-col gap-1", children: errors.map(
|
|
1444
|
+
(error, index) => error?.message && /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("li", { children: error.message }, index)
|
|
1445
|
+
) });
|
|
1446
|
+
}, [children, errors]);
|
|
1447
|
+
if (!content) {
|
|
1448
|
+
return null;
|
|
1449
|
+
}
|
|
1450
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1451
|
+
"div",
|
|
1452
|
+
{
|
|
1453
|
+
role: "alert",
|
|
1454
|
+
"data-slot": "field-error",
|
|
1455
|
+
className: cn("text-destructive text-sm font-normal", className),
|
|
1456
|
+
...props,
|
|
1457
|
+
children: content
|
|
1458
|
+
}
|
|
1459
|
+
);
|
|
1460
|
+
}
|
|
1461
|
+
|
|
1462
|
+
// src/components/AdsField/index.tsx
|
|
1463
|
+
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
1464
|
+
function useAdsFieldDescription({
|
|
1465
|
+
describedBy,
|
|
1466
|
+
errorText,
|
|
1467
|
+
helperText,
|
|
1468
|
+
id
|
|
1469
|
+
}) {
|
|
1470
|
+
const generatedId = React15.useId();
|
|
1471
|
+
const inputId = id ?? generatedId;
|
|
1472
|
+
const helperId = helperText ? `${inputId}-helper` : void 0;
|
|
1473
|
+
const errorId = errorText ? `${inputId}-error` : void 0;
|
|
1474
|
+
const descriptionIds = [describedBy, helperId, errorId].filter(Boolean).join(" ");
|
|
1475
|
+
return {
|
|
1476
|
+
describedBy: descriptionIds || void 0,
|
|
1477
|
+
errorId,
|
|
1478
|
+
helperId,
|
|
1479
|
+
inputId
|
|
1480
|
+
};
|
|
1481
|
+
}
|
|
1482
|
+
var AdsField = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1483
|
+
FieldGroup,
|
|
1484
|
+
{
|
|
1485
|
+
className: cn("w-full gap-7", className),
|
|
1486
|
+
ref,
|
|
1487
|
+
...props
|
|
1488
|
+
}
|
|
1489
|
+
));
|
|
1490
|
+
AdsField.displayName = "AdsField";
|
|
1491
|
+
var AdsFieldHeader = React15.forwardRef(
|
|
1492
|
+
({ className, description, title, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: cn("flex w-full flex-col gap-3", className), ref, ...props, children: [
|
|
1493
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(FieldTitle, { className: "w-full text-base font-medium leading-6 text-foreground", children: title }),
|
|
1494
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(FieldDescription, { className: "w-full text-sm leading-5 text-muted-foreground", children: description }) : null
|
|
1495
|
+
] })
|
|
1496
|
+
);
|
|
1497
|
+
AdsFieldHeader.displayName = "AdsFieldHeader";
|
|
1498
|
+
var AdsFieldItem = React15.forwardRef(({ className, orientation = "vertical", ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1499
|
+
Field,
|
|
1500
|
+
{
|
|
1501
|
+
className: cn("w-full gap-3", className),
|
|
1502
|
+
orientation,
|
|
1503
|
+
ref,
|
|
1504
|
+
...props
|
|
1505
|
+
}
|
|
1506
|
+
));
|
|
1507
|
+
AdsFieldItem.displayName = "AdsFieldItem";
|
|
1508
|
+
var AdsFieldLabel = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1509
|
+
FieldLabel,
|
|
1510
|
+
{
|
|
1511
|
+
className: cn("w-full text-sm font-medium leading-5 text-foreground", className),
|
|
1512
|
+
ref,
|
|
1513
|
+
...props
|
|
1514
|
+
}
|
|
1515
|
+
));
|
|
1516
|
+
AdsFieldLabel.displayName = "AdsFieldLabel";
|
|
1517
|
+
var AdsFieldLegend = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1518
|
+
FieldLegend,
|
|
1519
|
+
{
|
|
1520
|
+
className: cn("mb-3 text-base font-medium leading-6 text-foreground", className),
|
|
1521
|
+
ref,
|
|
1522
|
+
...props
|
|
1523
|
+
}
|
|
1524
|
+
));
|
|
1525
|
+
AdsFieldLegend.displayName = "AdsFieldLegend";
|
|
1526
|
+
var AdsFieldDescription = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1527
|
+
FieldDescription,
|
|
1528
|
+
{
|
|
1529
|
+
className: cn("text-sm leading-5 text-muted-foreground", className),
|
|
1530
|
+
ref,
|
|
1531
|
+
...props
|
|
1532
|
+
}
|
|
1533
|
+
));
|
|
1534
|
+
AdsFieldDescription.displayName = "AdsFieldDescription";
|
|
1535
|
+
var AdsFieldError = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1536
|
+
FieldError,
|
|
1537
|
+
{
|
|
1538
|
+
className: cn("text-sm leading-5 text-destructive", className),
|
|
1539
|
+
ref,
|
|
1540
|
+
...props
|
|
1541
|
+
}
|
|
1542
|
+
));
|
|
1543
|
+
AdsFieldError.displayName = "AdsFieldError";
|
|
1544
|
+
var AdsFieldSeparator = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1545
|
+
FieldSeparator,
|
|
1546
|
+
{
|
|
1547
|
+
className: cn("py-2 text-muted-foreground", className),
|
|
1548
|
+
ref,
|
|
1549
|
+
...props
|
|
1550
|
+
}
|
|
1551
|
+
));
|
|
1552
|
+
AdsFieldSeparator.displayName = "AdsFieldSeparator";
|
|
1553
|
+
var AdsFieldGroup = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1554
|
+
FieldGroup,
|
|
1555
|
+
{
|
|
1556
|
+
className: cn("w-full gap-6", className),
|
|
1557
|
+
ref,
|
|
1558
|
+
...props
|
|
1559
|
+
}
|
|
1560
|
+
));
|
|
1561
|
+
AdsFieldGroup.displayName = "AdsFieldGroup";
|
|
1562
|
+
var AdsFieldSet = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(FieldSet, { className: cn("w-full gap-6", className), ref, ...props }));
|
|
1563
|
+
AdsFieldSet.displayName = "AdsFieldSet";
|
|
1564
|
+
var AdsFieldCheckboxRow = React15.forwardRef(
|
|
1565
|
+
({ className, control, description, label, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
|
|
1566
|
+
"div",
|
|
1567
|
+
{
|
|
1568
|
+
className: cn("flex w-full items-start gap-3", description ? "min-h-5" : "items-center", className),
|
|
1569
|
+
ref,
|
|
1570
|
+
...props,
|
|
1571
|
+
children: [
|
|
1572
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "shrink-0 pt-px", children: control }),
|
|
1573
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col gap-1.5", children: [
|
|
1574
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "text-sm leading-5 text-foreground", children: label }),
|
|
1575
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(AdsFieldDescription, { className: "text-sm leading-5", children: description }) : null
|
|
1576
|
+
] })
|
|
1577
|
+
]
|
|
1578
|
+
}
|
|
1579
|
+
)
|
|
1580
|
+
);
|
|
1581
|
+
AdsFieldCheckboxRow.displayName = "AdsFieldCheckboxRow";
|
|
1582
|
+
var AdsFieldChoiceCard = React15.forwardRef(
|
|
1583
|
+
({ checked, className, control, description, title, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
|
|
1584
|
+
"label",
|
|
1585
|
+
{
|
|
1586
|
+
className: cn(
|
|
1587
|
+
"flex w-full items-start gap-3 rounded-radius-md border border-border bg-card p-md shadow-[0px_1px_2px_rgba(0,0,0,0.1)] transition-colors",
|
|
1588
|
+
checked ? "border-primary bg-primary/5" : void 0,
|
|
1589
|
+
className
|
|
1590
|
+
),
|
|
1591
|
+
ref,
|
|
1592
|
+
...props,
|
|
1593
|
+
children: [
|
|
1594
|
+
control ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "shrink-0 pt-px", children: control }) : null,
|
|
1595
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col gap-1.5", children: [
|
|
1596
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "text-sm font-medium leading-5 text-foreground", children: title }),
|
|
1597
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(AdsFieldDescription, { className: "text-sm leading-5", children: description }) : null
|
|
1598
|
+
] })
|
|
1599
|
+
]
|
|
1600
|
+
}
|
|
1601
|
+
)
|
|
1602
|
+
);
|
|
1603
|
+
AdsFieldChoiceCard.displayName = "AdsFieldChoiceCard";
|
|
1604
|
+
var AdsFieldActions = React15.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1605
|
+
"div",
|
|
1606
|
+
{
|
|
1607
|
+
className: cn("flex w-full flex-wrap items-center gap-3", className),
|
|
1608
|
+
ref,
|
|
1609
|
+
...props
|
|
1610
|
+
}
|
|
1611
|
+
));
|
|
1612
|
+
AdsFieldActions.displayName = "AdsFieldActions";
|
|
1613
|
+
|
|
1614
|
+
// src/components/AdsCheckbox/index.tsx
|
|
1615
|
+
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
1616
|
+
var checkboxBaseClassName = "h-4 w-4 rounded-[4px] border-border bg-card text-primary shadow-[0px_1px_2px_rgba(0,0,0,0.1)] focus-visible:ring-[3px] focus-visible:ring-[rgba(161,161,161,0.5)] focus-visible:ring-offset-0 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground";
|
|
1617
|
+
var Checkbox2 = React16.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Checkbox, { className: cn(checkboxBaseClassName, className), ref, ...props }));
|
|
1618
|
+
Checkbox2.displayName = "Checkbox";
|
|
1619
|
+
var AdsCheckbox = React16.forwardRef(({ checkboxClassName, className, description, id, label, wrapperClassName, ...props }, ref) => {
|
|
1620
|
+
const generatedId = React16.useId();
|
|
1621
|
+
const inputId = id ?? generatedId;
|
|
1622
|
+
if (!label) {
|
|
1623
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
1624
|
+
Checkbox2,
|
|
1625
|
+
{
|
|
1626
|
+
className: cn(className, checkboxClassName),
|
|
1627
|
+
id: inputId,
|
|
1628
|
+
ref,
|
|
1629
|
+
...props
|
|
1630
|
+
}
|
|
1631
|
+
);
|
|
1632
|
+
}
|
|
1633
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("label", { className: cn("block w-full cursor-pointer", wrapperClassName), htmlFor: inputId, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
1634
|
+
AdsFieldCheckboxRow,
|
|
1635
|
+
{
|
|
1636
|
+
control: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
1637
|
+
Checkbox2,
|
|
1638
|
+
{
|
|
1639
|
+
className: cn(className, checkboxClassName),
|
|
1640
|
+
id: inputId,
|
|
1641
|
+
ref,
|
|
1642
|
+
...props
|
|
1643
|
+
}
|
|
1644
|
+
),
|
|
1645
|
+
description,
|
|
1646
|
+
label
|
|
1647
|
+
}
|
|
1648
|
+
) });
|
|
1649
|
+
});
|
|
1650
|
+
AdsCheckbox.displayName = "AdsCheckbox";
|
|
1651
|
+
|
|
1652
|
+
// src/components/AdsButtonGroup/index.tsx
|
|
1653
|
+
var React18 = __toESM(require("react"), 1);
|
|
1654
|
+
var import_react_slot4 = require("@radix-ui/react-slot");
|
|
1655
|
+
|
|
1656
|
+
// src/primitives/input.tsx
|
|
1657
|
+
var React17 = __toESM(require("react"), 1);
|
|
1658
|
+
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
1659
|
+
var Input = React17.forwardRef(
|
|
1660
|
+
({ className, type, ...props }, ref) => {
|
|
1661
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
1662
|
+
"input",
|
|
1663
|
+
{
|
|
1664
|
+
type,
|
|
1665
|
+
className: cn(
|
|
1666
|
+
"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
|
|
1667
|
+
className
|
|
1668
|
+
),
|
|
1669
|
+
ref,
|
|
1670
|
+
...props
|
|
1671
|
+
}
|
|
1672
|
+
);
|
|
1673
|
+
}
|
|
1674
|
+
);
|
|
1675
|
+
Input.displayName = "Input";
|
|
1676
|
+
|
|
1677
|
+
// src/primitives/button-group.tsx
|
|
1678
|
+
var import_react_slot3 = require("@radix-ui/react-slot");
|
|
1679
|
+
var import_class_variance_authority8 = require("class-variance-authority");
|
|
1680
|
+
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
1681
|
+
var buttonGroupVariants = (0, import_class_variance_authority8.cva)(
|
|
1682
|
+
"flex w-fit items-stretch has-[>[data-slot=button-group]]:gap-2 [&>*]:focus-visible:relative [&>*]:focus-visible:z-10 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-md [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1",
|
|
1683
|
+
{
|
|
1684
|
+
variants: {
|
|
1685
|
+
orientation: {
|
|
1686
|
+
horizontal: "[&>*:not(:first-child)]:rounded-l-none [&>*:not(:first-child)]:border-l-0 [&>*:not(:last-child)]:rounded-r-none",
|
|
1687
|
+
vertical: "flex-col [&>*:not(:first-child)]:rounded-t-none [&>*:not(:first-child)]:border-t-0 [&>*:not(:last-child)]:rounded-b-none"
|
|
1688
|
+
}
|
|
1689
|
+
},
|
|
1690
|
+
defaultVariants: {
|
|
1691
|
+
orientation: "horizontal"
|
|
1692
|
+
}
|
|
1693
|
+
}
|
|
1694
|
+
);
|
|
1695
|
+
function ButtonGroupSeparator({
|
|
1696
|
+
className,
|
|
1697
|
+
orientation = "vertical",
|
|
1698
|
+
...props
|
|
1699
|
+
}) {
|
|
1700
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
1701
|
+
Separator,
|
|
1702
|
+
{
|
|
1703
|
+
"data-slot": "button-group-separator",
|
|
1704
|
+
orientation,
|
|
1705
|
+
className: cn(
|
|
1706
|
+
"pointer-events-none relative !m-0 shrink-0 self-stretch overflow-visible bg-transparent",
|
|
1707
|
+
"data-[orientation=vertical]:h-auto data-[orientation=vertical]:w-0",
|
|
1708
|
+
"data-[orientation=horizontal]:h-0 data-[orientation=horizontal]:w-full",
|
|
1709
|
+
"data-[orientation=vertical]:before:absolute data-[orientation=vertical]:before:inset-y-0 data-[orientation=vertical]:before:left-0 data-[orientation=vertical]:before:w-px data-[orientation=vertical]:before:bg-border",
|
|
1710
|
+
"data-[orientation=horizontal]:before:absolute data-[orientation=horizontal]:before:inset-x-0 data-[orientation=horizontal]:before:top-0 data-[orientation=horizontal]:before:h-px data-[orientation=horizontal]:before:bg-border",
|
|
1711
|
+
className
|
|
1712
|
+
),
|
|
1713
|
+
...props
|
|
1714
|
+
}
|
|
1715
|
+
);
|
|
1716
|
+
}
|
|
1717
|
+
|
|
1718
|
+
// src/components/AdsButtonGroup/index.tsx
|
|
1719
|
+
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
1720
|
+
var buttonGroupPressClassName = "[&_button]:transition-[background-color,box-shadow,filter] [&_button]:active:translate-y-0 [&_button]:active:brightness-95";
|
|
1721
|
+
var segmentSizeClassName = {
|
|
1722
|
+
sm: "h-8 px-md text-sm",
|
|
1723
|
+
md: "h-9 px-lg text-sm",
|
|
1724
|
+
lg: "h-10 px-xl text-base"
|
|
1725
|
+
};
|
|
1726
|
+
function isAdsButtonElement(child) {
|
|
1727
|
+
return React18.isValidElement(child) && child.type === AdsButton;
|
|
1728
|
+
}
|
|
1729
|
+
function enhanceChildren(children, attached, size, surface) {
|
|
1730
|
+
return React18.Children.map(children, (child) => {
|
|
1731
|
+
if (!isAdsButtonElement(child)) {
|
|
1732
|
+
return child;
|
|
1733
|
+
}
|
|
1734
|
+
return React18.cloneElement(child, {
|
|
1735
|
+
className: cn(
|
|
1736
|
+
attached && "rounded-none shadow-none",
|
|
1737
|
+
attached && surface === "secondary" && "bg-secondary hover:bg-secondary/90",
|
|
1738
|
+
child.props.className
|
|
1739
|
+
),
|
|
1740
|
+
size: child.props.size ?? size
|
|
1741
|
+
});
|
|
1742
|
+
});
|
|
1743
|
+
}
|
|
1744
|
+
var AdsButtonGroup = React18.forwardRef(
|
|
1745
|
+
({
|
|
1746
|
+
attached = true,
|
|
1747
|
+
children,
|
|
1748
|
+
className,
|
|
1749
|
+
gap,
|
|
1750
|
+
orientation = "horizontal",
|
|
1751
|
+
size,
|
|
1752
|
+
surface = "default",
|
|
1753
|
+
variant = "default",
|
|
1754
|
+
...props
|
|
1755
|
+
}, ref) => {
|
|
1756
|
+
const isVertical = orientation === "vertical";
|
|
1757
|
+
const resolvedAttached = attached || variant === "connected";
|
|
1758
|
+
const resolvedGapClassName = gap === "none" ? "gap-0" : gap === "sm" ? "gap-sm" : gap === "md" ? "gap-md" : resolvedAttached && isVertical ? "gap-0" : "gap-2";
|
|
1759
|
+
const attachedClassName = cn(
|
|
1760
|
+
buttonGroupVariants({ orientation }),
|
|
1761
|
+
surface === "pill" ? "rounded-full" : "rounded-radius-md"
|
|
1762
|
+
);
|
|
1763
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
1764
|
+
"div",
|
|
1765
|
+
{
|
|
1766
|
+
"aria-orientation": orientation,
|
|
1767
|
+
className: cn(
|
|
1768
|
+
"inline-flex w-fit items-stretch",
|
|
1769
|
+
isVertical ? "flex-col" : "flex-row",
|
|
1770
|
+
resolvedGapClassName,
|
|
1771
|
+
resolvedAttached && attachedClassName,
|
|
1772
|
+
buttonGroupPressClassName,
|
|
1773
|
+
className
|
|
1774
|
+
),
|
|
1775
|
+
"data-attached": resolvedAttached ? "true" : "false",
|
|
1776
|
+
"data-orientation": orientation,
|
|
1777
|
+
"data-surface": surface,
|
|
1778
|
+
"data-slot": "button-group",
|
|
1779
|
+
"data-variant": variant,
|
|
1780
|
+
role: "group",
|
|
1781
|
+
ref,
|
|
1782
|
+
...props,
|
|
1783
|
+
children: enhanceChildren(children, resolvedAttached, size, surface)
|
|
1784
|
+
}
|
|
1785
|
+
);
|
|
1786
|
+
}
|
|
1787
|
+
);
|
|
1788
|
+
AdsButtonGroup.displayName = "AdsButtonGroup";
|
|
1789
|
+
var textToneClassName = {
|
|
1790
|
+
default: "bg-transparent text-foreground",
|
|
1791
|
+
muted: "bg-transparent text-muted-foreground",
|
|
1792
|
+
secondary: "bg-secondary text-secondary-foreground",
|
|
1793
|
+
field: "bg-transparent text-muted-foreground"
|
|
1794
|
+
};
|
|
1795
|
+
var textAlignClassName = {
|
|
1796
|
+
start: "justify-start",
|
|
1797
|
+
center: "justify-center",
|
|
1798
|
+
between: "justify-between"
|
|
1799
|
+
};
|
|
1800
|
+
var inputSizeClassName = {
|
|
1801
|
+
sm: "h-8 text-sm leading-5",
|
|
1802
|
+
md: "h-9 text-sm leading-5",
|
|
1803
|
+
lg: "h-10 text-base leading-6"
|
|
1804
|
+
};
|
|
1805
|
+
var AdsButtonGroupText = React18.forwardRef(
|
|
1806
|
+
({
|
|
1807
|
+
align = "start",
|
|
1808
|
+
asChild = false,
|
|
1809
|
+
className,
|
|
1810
|
+
shape = "default",
|
|
1811
|
+
size = "md",
|
|
1812
|
+
tone = "default",
|
|
1813
|
+
...props
|
|
1814
|
+
}, ref) => {
|
|
1815
|
+
const Comp = asChild ? import_react_slot4.Slot : "div";
|
|
1816
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
1817
|
+
Comp,
|
|
1818
|
+
{
|
|
1819
|
+
className: cn(
|
|
1820
|
+
"inline-flex min-w-0 items-center gap-sm border border-border font-medium leading-5 shadow-[0px_1px_2px_rgba(0,0,0,0.08)] outline-none",
|
|
1821
|
+
segmentSizeClassName[size],
|
|
1822
|
+
textToneClassName[tone],
|
|
1823
|
+
textAlignClassName[align],
|
|
1824
|
+
shape === "pill" ? "rounded-full" : "rounded-radius-md",
|
|
1825
|
+
"[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none",
|
|
1826
|
+
className
|
|
1827
|
+
),
|
|
1828
|
+
"data-slot": "button-group-text",
|
|
1829
|
+
ref,
|
|
1830
|
+
...props
|
|
1831
|
+
}
|
|
1832
|
+
);
|
|
1833
|
+
}
|
|
1834
|
+
);
|
|
1835
|
+
AdsButtonGroupText.displayName = "AdsButtonGroupText";
|
|
1836
|
+
var AdsButtonGroupInput = React18.forwardRef(({ className, size = "md", type = "text", ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
1837
|
+
Input,
|
|
1838
|
+
{
|
|
1839
|
+
className: cn(
|
|
1840
|
+
"min-w-0 rounded-none bg-card px-md py-0 text-foreground outline-none placeholder:text-muted-foreground focus-visible:ring-0 focus-visible:ring-offset-0 focus-visible:[box-shadow:none] disabled:cursor-not-allowed disabled:opacity-50",
|
|
1841
|
+
inputSizeClassName[size],
|
|
1842
|
+
className
|
|
1843
|
+
),
|
|
1844
|
+
ref,
|
|
1845
|
+
type,
|
|
1846
|
+
...props
|
|
1847
|
+
}
|
|
1848
|
+
));
|
|
1849
|
+
AdsButtonGroupInput.displayName = "AdsButtonGroupInput";
|
|
1850
|
+
var AdsButtonGroupSeparator = ButtonGroupSeparator;
|
|
1851
|
+
|
|
1852
|
+
// src/components/AdsSeparator/index.tsx
|
|
1853
|
+
var React19 = __toESM(require("react"), 1);
|
|
1854
|
+
var import_jsx_runtime22 = require("react/jsx-runtime");
|
|
1855
|
+
var toneClassName = {
|
|
1856
|
+
default: "bg-border",
|
|
1857
|
+
muted: "bg-border-muted"
|
|
1858
|
+
};
|
|
1859
|
+
var AdsSeparator = React19.forwardRef(({ className, orientation = "horizontal", tone = "default", ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
1860
|
+
Separator,
|
|
1861
|
+
{
|
|
1862
|
+
className: cn(
|
|
1863
|
+
"shrink-0",
|
|
1864
|
+
orientation === "horizontal" ? "h-px w-full" : "h-full w-px",
|
|
1865
|
+
toneClassName[tone],
|
|
1866
|
+
className
|
|
1867
|
+
),
|
|
1868
|
+
orientation,
|
|
1869
|
+
ref,
|
|
1870
|
+
...props
|
|
1871
|
+
}
|
|
1872
|
+
));
|
|
1873
|
+
AdsSeparator.displayName = "AdsSeparator";
|
|
1874
|
+
|
|
1875
|
+
// src/components/AdsSkeleton/index.tsx
|
|
1876
|
+
var React21 = __toESM(require("react"), 1);
|
|
1877
|
+
|
|
1878
|
+
// src/primitives/skeleton.tsx
|
|
1879
|
+
var React20 = __toESM(require("react"), 1);
|
|
1880
|
+
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
1881
|
+
var Skeleton = React20.forwardRef(
|
|
1882
|
+
({ animated = true, className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
1883
|
+
"div",
|
|
1884
|
+
{
|
|
1885
|
+
className: cn(
|
|
1886
|
+
"shrink-0 bg-accent",
|
|
1887
|
+
animated ? "animate-pulse" : void 0,
|
|
1888
|
+
className
|
|
1889
|
+
),
|
|
1890
|
+
ref,
|
|
1891
|
+
...props
|
|
1892
|
+
}
|
|
1893
|
+
)
|
|
1894
|
+
);
|
|
1895
|
+
Skeleton.displayName = "Skeleton";
|
|
1896
|
+
|
|
1897
|
+
// src/components/AdsSkeleton/index.tsx
|
|
1898
|
+
var import_jsx_runtime24 = require("react/jsx-runtime");
|
|
1899
|
+
var shapeClassName = {
|
|
1900
|
+
default: "rounded-radius-md",
|
|
1901
|
+
line: "h-4 w-full rounded-full",
|
|
1902
|
+
circle: "rounded-full"
|
|
1903
|
+
};
|
|
1904
|
+
var toneClassName2 = {
|
|
1905
|
+
default: "bg-secondary",
|
|
1906
|
+
muted: "bg-accent"
|
|
1907
|
+
};
|
|
1908
|
+
var AdsSkeleton = React21.forwardRef(
|
|
1909
|
+
({ className, shape = "default", tone = "default", ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
1910
|
+
Skeleton,
|
|
1911
|
+
{
|
|
1912
|
+
className: cn(shapeClassName[shape], toneClassName2[tone], className),
|
|
1913
|
+
ref,
|
|
1914
|
+
...props
|
|
1915
|
+
}
|
|
1916
|
+
)
|
|
1917
|
+
);
|
|
1918
|
+
AdsSkeleton.displayName = "AdsSkeleton";
|
|
1919
|
+
|
|
1920
|
+
// src/components/AdsInput/index.tsx
|
|
1921
|
+
var React22 = __toESM(require("react"), 1);
|
|
1922
|
+
var import_jsx_runtime25 = require("react/jsx-runtime");
|
|
1923
|
+
var inputBaseClassName = "flex w-full rounded-md border border-border bg-card px-3 py-2 ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm";
|
|
1924
|
+
var inputSizeClasses = {
|
|
1925
|
+
sm: "h-8 text-sm leading-5",
|
|
1926
|
+
md: "h-9 text-base leading-6",
|
|
1927
|
+
lg: "h-10 text-base leading-6"
|
|
1928
|
+
};
|
|
1929
|
+
function getInputSurfaceClassName({
|
|
1930
|
+
className,
|
|
1931
|
+
errorText,
|
|
1932
|
+
hasPrefix,
|
|
1933
|
+
hasSuffix,
|
|
1934
|
+
size
|
|
1935
|
+
}) {
|
|
1936
|
+
return cn(
|
|
1937
|
+
inputBaseClassName,
|
|
1938
|
+
inputSizeClasses[size],
|
|
1939
|
+
errorText ? "border-destructive focus-visible:border-destructive" : "focus-visible:border-border-focus",
|
|
1940
|
+
"focus-visible:ring-[3px] focus-visible:ring-[rgba(161,161,161,0.5)]",
|
|
1941
|
+
hasPrefix ? "pl-2xl" : void 0,
|
|
1942
|
+
hasSuffix ? "pr-2xl" : void 0,
|
|
1943
|
+
className
|
|
1944
|
+
);
|
|
1945
|
+
}
|
|
1946
|
+
var AdsInput = React22.forwardRef(
|
|
1947
|
+
({
|
|
1948
|
+
action,
|
|
1949
|
+
className,
|
|
1950
|
+
descriptionPlacement = "below",
|
|
1951
|
+
emptyFileLabel,
|
|
1952
|
+
errorText,
|
|
1953
|
+
fileTriggerLabel,
|
|
1954
|
+
helperText,
|
|
1955
|
+
id,
|
|
1956
|
+
label,
|
|
1957
|
+
onChange,
|
|
1958
|
+
prefix,
|
|
1959
|
+
type = "text",
|
|
1960
|
+
size = "md",
|
|
1961
|
+
suffix,
|
|
1962
|
+
...props
|
|
1963
|
+
}, ref) => {
|
|
1964
|
+
const { messages } = useAdsI18n();
|
|
1965
|
+
const [selectedFiles, setSelectedFiles] = React22.useState([]);
|
|
1966
|
+
const description = useAdsFieldDescription({
|
|
1967
|
+
describedBy: props["aria-describedby"],
|
|
1968
|
+
errorText,
|
|
1969
|
+
helperText,
|
|
1970
|
+
id
|
|
1971
|
+
});
|
|
1972
|
+
const inputSurfaceClassName = getInputSurfaceClassName({
|
|
1973
|
+
className,
|
|
1974
|
+
errorText,
|
|
1975
|
+
hasPrefix: Boolean(prefix),
|
|
1976
|
+
hasSuffix: Boolean(suffix),
|
|
1977
|
+
size
|
|
1978
|
+
});
|
|
1979
|
+
const isFileInput = type === "file";
|
|
1980
|
+
const resolvedFileTriggerLabel = fileTriggerLabel ?? messages.input.chooseFile;
|
|
1981
|
+
const resolvedEmptyFileLabel = emptyFileLabel ?? messages.input.noFileChosen;
|
|
1982
|
+
const handleChange = React22.useCallback(
|
|
1983
|
+
(event) => {
|
|
1984
|
+
if (isFileInput) {
|
|
1985
|
+
setSelectedFiles(Array.from(event.target.files ?? [], (file) => file.name));
|
|
1986
|
+
}
|
|
1987
|
+
onChange?.(event);
|
|
1988
|
+
},
|
|
1989
|
+
[isFileInput, onChange]
|
|
1990
|
+
);
|
|
1991
|
+
const fileNameText = selectedFiles.length > 0 ? selectedFiles.join(", ") : resolvedEmptyFileLabel;
|
|
1992
|
+
const helperNode = helperText ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(AdsFieldDescription, { id: description.helperId, children: helperText }) : null;
|
|
1993
|
+
const errorNode = errorText ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(AdsFieldError, { id: description.errorId, children: errorText }) : null;
|
|
1994
|
+
const inputNode = isFileInput ? /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "relative flex w-full min-w-0 flex-1 items-center", children: [
|
|
1995
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
1996
|
+
Input,
|
|
1997
|
+
{
|
|
1998
|
+
"aria-describedby": description.describedBy,
|
|
1999
|
+
"aria-invalid": errorText ? true : void 0,
|
|
2000
|
+
className: cn(
|
|
2001
|
+
inputSurfaceClassName,
|
|
2002
|
+
"absolute inset-0 z-10 cursor-pointer opacity-0 file:hidden",
|
|
2003
|
+
props.disabled ? "cursor-not-allowed" : void 0
|
|
2004
|
+
),
|
|
2005
|
+
id: description.inputId,
|
|
2006
|
+
onChange: handleChange,
|
|
2007
|
+
ref,
|
|
2008
|
+
type: "file",
|
|
2009
|
+
...props
|
|
2010
|
+
}
|
|
2011
|
+
),
|
|
2012
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
|
|
2013
|
+
"div",
|
|
2014
|
+
{
|
|
2015
|
+
"aria-hidden": "true",
|
|
2016
|
+
className: cn(
|
|
2017
|
+
inputSurfaceClassName,
|
|
2018
|
+
"items-center text-sm leading-5",
|
|
2019
|
+
props.disabled ? "cursor-not-allowed opacity-50" : void 0
|
|
2020
|
+
),
|
|
2021
|
+
children: [
|
|
2022
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "shrink-0 pr-sm text-sm font-medium leading-5 text-foreground", children: resolvedFileTriggerLabel }),
|
|
2023
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
2024
|
+
"span",
|
|
2025
|
+
{
|
|
2026
|
+
className: cn(
|
|
2027
|
+
"min-w-0 flex-1 truncate text-sm leading-5",
|
|
2028
|
+
selectedFiles.length > 0 ? "text-foreground" : "text-muted-foreground"
|
|
2029
|
+
),
|
|
2030
|
+
children: fileNameText
|
|
2031
|
+
}
|
|
2032
|
+
)
|
|
2033
|
+
]
|
|
2034
|
+
}
|
|
2035
|
+
)
|
|
2036
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "relative flex w-full min-w-0 flex-1 items-center", children: [
|
|
2037
|
+
prefix ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "pointer-events-none absolute left-md inline-flex text-icon-muted", children: prefix }) : null,
|
|
2038
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
|
|
2039
|
+
Input,
|
|
2040
|
+
{
|
|
2041
|
+
"aria-describedby": description.describedBy,
|
|
2042
|
+
"aria-invalid": errorText ? true : void 0,
|
|
2043
|
+
className: inputSurfaceClassName,
|
|
2044
|
+
id: description.inputId,
|
|
2045
|
+
onChange: handleChange,
|
|
2046
|
+
ref,
|
|
2047
|
+
type,
|
|
2048
|
+
...props
|
|
2049
|
+
}
|
|
2050
|
+
),
|
|
2051
|
+
suffix ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "absolute right-md inline-flex items-center text-icon-muted", children: suffix }) : null
|
|
2052
|
+
] });
|
|
2053
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(AdsFieldItem, { children: [
|
|
2054
|
+
label ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(AdsFieldLabel, { htmlFor: description.inputId, children: label }) : null,
|
|
2055
|
+
descriptionPlacement === "above" ? helperNode : null,
|
|
2056
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { className: "flex w-full items-center gap-sm", children: [
|
|
2057
|
+
inputNode,
|
|
2058
|
+
action ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { className: "shrink-0", children: action }) : null
|
|
2059
|
+
] }),
|
|
2060
|
+
descriptionPlacement === "below" ? helperNode : null,
|
|
2061
|
+
errorNode
|
|
2062
|
+
] });
|
|
2063
|
+
}
|
|
2064
|
+
);
|
|
2065
|
+
AdsInput.displayName = "AdsInput";
|
|
2066
|
+
|
|
2067
|
+
// src/components/AdsInputGroup/index.tsx
|
|
2068
|
+
var React24 = __toESM(require("react"), 1);
|
|
2069
|
+
|
|
2070
|
+
// src/primitives/textarea.tsx
|
|
2071
|
+
var React23 = __toESM(require("react"), 1);
|
|
2072
|
+
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
2073
|
+
var Textarea = React23.forwardRef(({ className, ...props }, ref) => {
|
|
2074
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
2075
|
+
"textarea",
|
|
2076
|
+
{
|
|
2077
|
+
className: cn(
|
|
2078
|
+
"flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
|
|
2079
|
+
className
|
|
2080
|
+
),
|
|
2081
|
+
ref,
|
|
2082
|
+
...props
|
|
2083
|
+
}
|
|
2084
|
+
);
|
|
2085
|
+
});
|
|
2086
|
+
Textarea.displayName = "Textarea";
|
|
2087
|
+
|
|
2088
|
+
// src/components/AdsInputGroup/index.tsx
|
|
2089
|
+
var import_jsx_runtime27 = require("react/jsx-runtime");
|
|
2090
|
+
function useAdsInputGroupDescription(describedBy, helperText, errorText, idBase) {
|
|
2091
|
+
const helperId = helperText ? `${idBase}-helper` : void 0;
|
|
2092
|
+
const errorId = errorText ? `${idBase}-error` : void 0;
|
|
2093
|
+
const descriptionIds = [describedBy, helperId, errorId].filter(Boolean).join(" ");
|
|
2094
|
+
return {
|
|
2095
|
+
describedBy: descriptionIds || void 0,
|
|
2096
|
+
errorId,
|
|
2097
|
+
helperId
|
|
2098
|
+
};
|
|
2099
|
+
}
|
|
2100
|
+
function AdsInputGroupChrome({
|
|
2101
|
+
children,
|
|
2102
|
+
errorId,
|
|
2103
|
+
errorText,
|
|
2104
|
+
helperId,
|
|
2105
|
+
helperText,
|
|
2106
|
+
label
|
|
2107
|
+
}) {
|
|
2108
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "flex w-full flex-col gap-md", children: [
|
|
2109
|
+
label ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "text-sm font-medium leading-5 text-foreground", children: label }) : null,
|
|
2110
|
+
children,
|
|
2111
|
+
helperText ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "text-sm leading-5 text-muted-foreground", id: helperId, children: helperText }) : null,
|
|
2112
|
+
errorText ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "text-sm leading-5 text-destructive", id: errorId, children: errorText }) : null
|
|
2113
|
+
] });
|
|
2114
|
+
}
|
|
2115
|
+
var addonBaseClassName = "flex shrink-0 items-center self-stretch bg-secondary px-lg text-sm leading-5 text-foreground";
|
|
2116
|
+
var inputGroupControlBaseClassName = "w-full min-w-0 rounded-none border-0 bg-transparent px-0 py-0 text-sm leading-5 text-foreground shadow-none placeholder:text-muted-foreground focus-visible:border-transparent focus-visible:outline-none focus-visible:ring-0 disabled:cursor-not-allowed disabled:opacity-50 read-only:text-muted-foreground";
|
|
2117
|
+
function AdsInputGroup({
|
|
2118
|
+
children,
|
|
2119
|
+
className,
|
|
2120
|
+
controlWrapperClassName,
|
|
2121
|
+
errorText,
|
|
2122
|
+
footer,
|
|
2123
|
+
header,
|
|
2124
|
+
helperText,
|
|
2125
|
+
id,
|
|
2126
|
+
label,
|
|
2127
|
+
leadingAddon,
|
|
2128
|
+
leadingAddonClassName,
|
|
2129
|
+
surfaceClassName,
|
|
2130
|
+
trailingAddon,
|
|
2131
|
+
trailingAddonClassName
|
|
2132
|
+
}) {
|
|
2133
|
+
const generatedId = React24.useId();
|
|
2134
|
+
const description = useAdsInputGroupDescription(
|
|
2135
|
+
void 0,
|
|
2136
|
+
helperText,
|
|
2137
|
+
errorText,
|
|
2138
|
+
id ?? generatedId
|
|
2139
|
+
);
|
|
2140
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
2141
|
+
AdsInputGroupChrome,
|
|
2142
|
+
{
|
|
2143
|
+
errorText,
|
|
2144
|
+
helperText,
|
|
2145
|
+
label,
|
|
2146
|
+
...description,
|
|
2147
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: cn("w-full", className), children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
|
|
2148
|
+
"div",
|
|
2149
|
+
{
|
|
2150
|
+
className: cn(
|
|
2151
|
+
"overflow-hidden rounded-radius-md border border-border bg-card shadow-[0px_1px_2px_rgba(0,0,0,0.1)] transition-colors",
|
|
2152
|
+
errorText ? "border-destructive focus-within:border-destructive" : "focus-within:border-border-focus",
|
|
2153
|
+
"focus-within:ring-[3px] focus-within:ring-[rgba(161,161,161,0.5)]",
|
|
2154
|
+
surfaceClassName
|
|
2155
|
+
),
|
|
2156
|
+
children: [
|
|
2157
|
+
header ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "border-b border-border px-md py-md text-sm text-foreground", children: header }) : null,
|
|
2158
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { className: "flex min-h-11 w-full items-stretch", children: [
|
|
2159
|
+
leadingAddon ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
2160
|
+
"div",
|
|
2161
|
+
{
|
|
2162
|
+
className: cn(
|
|
2163
|
+
addonBaseClassName,
|
|
2164
|
+
"border-r border-border",
|
|
2165
|
+
leadingAddonClassName
|
|
2166
|
+
),
|
|
2167
|
+
children: leadingAddon
|
|
2168
|
+
}
|
|
2169
|
+
) : null,
|
|
2170
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
2171
|
+
"div",
|
|
2172
|
+
{
|
|
2173
|
+
className: cn(
|
|
2174
|
+
"flex min-w-0 flex-1 items-center gap-sm px-md py-[10px]",
|
|
2175
|
+
controlWrapperClassName
|
|
2176
|
+
),
|
|
2177
|
+
children
|
|
2178
|
+
}
|
|
2179
|
+
),
|
|
2180
|
+
trailingAddon ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
2181
|
+
"div",
|
|
2182
|
+
{
|
|
2183
|
+
className: cn(
|
|
2184
|
+
addonBaseClassName,
|
|
2185
|
+
"justify-end border-l border-border",
|
|
2186
|
+
trailingAddonClassName
|
|
2187
|
+
),
|
|
2188
|
+
children: trailingAddon
|
|
2189
|
+
}
|
|
2190
|
+
) : null
|
|
2191
|
+
] }),
|
|
2192
|
+
footer ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "border-t border-border px-md py-sm text-sm text-muted-foreground", children: footer }) : null
|
|
2193
|
+
]
|
|
2194
|
+
}
|
|
2195
|
+
) })
|
|
2196
|
+
}
|
|
2197
|
+
);
|
|
2198
|
+
}
|
|
2199
|
+
var AdsInputGroupInput = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
2200
|
+
Input,
|
|
2201
|
+
{
|
|
2202
|
+
className: cn(
|
|
2203
|
+
inputGroupControlBaseClassName,
|
|
2204
|
+
"h-5 text-sm leading-5",
|
|
2205
|
+
className
|
|
2206
|
+
),
|
|
2207
|
+
ref,
|
|
2208
|
+
...props
|
|
2209
|
+
}
|
|
2210
|
+
));
|
|
2211
|
+
AdsInputGroupInput.displayName = "AdsInputGroupInput";
|
|
2212
|
+
var AdsInputGroupTextarea = React24.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
2213
|
+
Textarea,
|
|
2214
|
+
{
|
|
2215
|
+
className: cn(
|
|
2216
|
+
inputGroupControlBaseClassName,
|
|
2217
|
+
"min-h-[64px] resize-none text-sm leading-5",
|
|
2218
|
+
className
|
|
2219
|
+
),
|
|
2220
|
+
ref,
|
|
2221
|
+
...props
|
|
2222
|
+
}
|
|
2223
|
+
));
|
|
2224
|
+
AdsInputGroupTextarea.displayName = "AdsInputGroupTextarea";
|
|
2225
|
+
|
|
2226
|
+
// src/components/AdsInputOTP/index.tsx
|
|
2227
|
+
var React26 = __toESM(require("react"), 1);
|
|
2228
|
+
|
|
2229
|
+
// src/primitives/input-otp.tsx
|
|
2230
|
+
var React25 = __toESM(require("react"), 1);
|
|
2231
|
+
var import_input_otp = require("input-otp");
|
|
2232
|
+
var import_lucide_react6 = require("lucide-react");
|
|
2233
|
+
var import_jsx_runtime28 = require("react/jsx-runtime");
|
|
2234
|
+
var InputOTP = React25.forwardRef(({ className, containerClassName, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
2235
|
+
import_input_otp.OTPInput,
|
|
2236
|
+
{
|
|
2237
|
+
ref,
|
|
2238
|
+
containerClassName: cn(
|
|
2239
|
+
"flex items-center gap-2 has-[:disabled]:opacity-50",
|
|
2240
|
+
containerClassName
|
|
2241
|
+
),
|
|
2242
|
+
className: cn("disabled:cursor-not-allowed", className),
|
|
2243
|
+
...props
|
|
2244
|
+
}
|
|
2245
|
+
));
|
|
2246
|
+
InputOTP.displayName = "InputOTP";
|
|
2247
|
+
var InputOTPGroup = React25.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { ref, className: cn("flex items-center", className), ...props }));
|
|
2248
|
+
InputOTPGroup.displayName = "InputOTPGroup";
|
|
2249
|
+
var InputOTPSlot = React25.forwardRef(({ index, className, ...props }, ref) => {
|
|
2250
|
+
const inputOTPContext = React25.useContext(import_input_otp.OTPInputContext);
|
|
2251
|
+
const { char, hasFakeCaret, isActive } = inputOTPContext.slots[index];
|
|
2252
|
+
return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(
|
|
2253
|
+
"div",
|
|
2254
|
+
{
|
|
2255
|
+
ref,
|
|
2256
|
+
className: cn(
|
|
2257
|
+
"relative flex h-10 w-10 items-center justify-center border-y border-r border-input text-sm transition-all first:rounded-l-md first:border-l last:rounded-r-md",
|
|
2258
|
+
isActive && "z-10 ring-2 ring-ring ring-offset-background",
|
|
2259
|
+
className
|
|
2260
|
+
),
|
|
2261
|
+
...props,
|
|
2262
|
+
children: [
|
|
2263
|
+
char,
|
|
2264
|
+
hasFakeCaret && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "pointer-events-none absolute inset-0 flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "h-4 w-px animate-caret-blink bg-foreground duration-1000" }) })
|
|
2265
|
+
]
|
|
2266
|
+
}
|
|
2267
|
+
);
|
|
2268
|
+
});
|
|
2269
|
+
InputOTPSlot.displayName = "InputOTPSlot";
|
|
2270
|
+
var InputOTPSeparator = React25.forwardRef(({ ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { ref, role: "separator", ...props, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_lucide_react6.Dot, {}) }));
|
|
2271
|
+
InputOTPSeparator.displayName = "InputOTPSeparator";
|
|
2272
|
+
|
|
2273
|
+
// src/components/AdsInputOTP/index.tsx
|
|
2274
|
+
var import_jsx_runtime29 = require("react/jsx-runtime");
|
|
2275
|
+
function useFieldDescription(id, describedBy, helperText, errorText) {
|
|
2276
|
+
const generatedId = React26.useId();
|
|
2277
|
+
const inputId = id ?? generatedId;
|
|
2278
|
+
const helperId = helperText ? `${inputId}-helper` : void 0;
|
|
2279
|
+
const errorId = errorText ? `${inputId}-error` : void 0;
|
|
2280
|
+
const descriptionIds = [describedBy, helperId, errorId].filter(Boolean).join(" ");
|
|
2281
|
+
return {
|
|
2282
|
+
describedBy: descriptionIds || void 0,
|
|
2283
|
+
errorId,
|
|
2284
|
+
helperId,
|
|
2285
|
+
inputId
|
|
2286
|
+
};
|
|
2287
|
+
}
|
|
2288
|
+
function AdsInputOTPChrome({
|
|
2289
|
+
children,
|
|
2290
|
+
errorId,
|
|
2291
|
+
errorText,
|
|
2292
|
+
helperId,
|
|
2293
|
+
helperText,
|
|
2294
|
+
inputId,
|
|
2295
|
+
label
|
|
2296
|
+
}) {
|
|
2297
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "flex w-full flex-col gap-md", children: [
|
|
2298
|
+
label ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("label", { className: "text-sm font-medium leading-5 text-foreground", htmlFor: inputId, children: label }) : null,
|
|
2299
|
+
children,
|
|
2300
|
+
helperText ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("p", { className: "text-sm leading-5 text-muted-foreground", id: helperId, children: helperText }) : null,
|
|
2301
|
+
errorText ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("p", { className: "text-sm leading-5 text-destructive", id: errorId, children: errorText }) : null
|
|
2302
|
+
] });
|
|
2303
|
+
}
|
|
2304
|
+
function buildSeparator(node, key) {
|
|
2305
|
+
if (node === void 0) {
|
|
2306
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(AdsInputOTPSeparator, {}, key);
|
|
2307
|
+
}
|
|
2308
|
+
if (React26.isValidElement(node)) {
|
|
2309
|
+
return React26.cloneElement(node, { key });
|
|
2310
|
+
}
|
|
2311
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { children: node }, key);
|
|
2312
|
+
}
|
|
2313
|
+
function buildOtpChildren(groups, separator) {
|
|
2314
|
+
const defaultGroup = groups.length > 0 ? groups : [6];
|
|
2315
|
+
const items = [];
|
|
2316
|
+
let index = 0;
|
|
2317
|
+
defaultGroup.forEach((size, indexOfGroup) => {
|
|
2318
|
+
items.push(
|
|
2319
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(AdsInputOTPGroup, { children: Array.from({ length: size }, (_, slotOffset) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
2320
|
+
AdsInputOTPSlot,
|
|
2321
|
+
{
|
|
2322
|
+
index: index + slotOffset
|
|
2323
|
+
},
|
|
2324
|
+
`slot-${index + slotOffset}`
|
|
2325
|
+
)) }, `group-${indexOfGroup}`)
|
|
2326
|
+
);
|
|
2327
|
+
index += size;
|
|
2328
|
+
if (indexOfGroup < defaultGroup.length - 1) {
|
|
2329
|
+
items.push(buildSeparator(separator, `sep-${indexOfGroup}`));
|
|
2330
|
+
}
|
|
2331
|
+
});
|
|
2332
|
+
return items;
|
|
2333
|
+
}
|
|
2334
|
+
var AdsInputOTP = React26.forwardRef(({ action, errorText, groups, helperText, label, separator, children, id, ...props }, ref) => {
|
|
2335
|
+
const totalSlots = groups && groups.length > 0 ? groups.reduce((sum, value) => sum + value, 0) : 6;
|
|
2336
|
+
const description = useFieldDescription(id, props["aria-describedby"], helperText, errorText);
|
|
2337
|
+
const otpChildren = children ?? buildOtpChildren(groups ?? [], separator);
|
|
2338
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
2339
|
+
AdsInputOTPChrome,
|
|
2340
|
+
{
|
|
2341
|
+
errorText,
|
|
2342
|
+
errorId: description.errorId,
|
|
2343
|
+
helperText,
|
|
2344
|
+
helperId: description.helperId,
|
|
2345
|
+
inputId: description.inputId,
|
|
2346
|
+
label,
|
|
2347
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "flex w-full items-center gap-sm", children: [
|
|
2348
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
2349
|
+
InputOTP,
|
|
2350
|
+
{
|
|
2351
|
+
"aria-describedby": description.describedBy,
|
|
2352
|
+
"aria-invalid": errorText ? true : void 0,
|
|
2353
|
+
id: description.inputId,
|
|
2354
|
+
maxLength: totalSlots,
|
|
2355
|
+
ref,
|
|
2356
|
+
...props,
|
|
2357
|
+
children: otpChildren
|
|
2358
|
+
}
|
|
2359
|
+
),
|
|
2360
|
+
action ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: "shrink-0", children: action }) : null
|
|
2361
|
+
] })
|
|
2362
|
+
}
|
|
2363
|
+
);
|
|
2364
|
+
});
|
|
2365
|
+
AdsInputOTP.displayName = "AdsInputOTP";
|
|
2366
|
+
var AdsInputOTPGroup = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(InputOTPGroup, { className, ref, ...props }));
|
|
2367
|
+
AdsInputOTPGroup.displayName = "AdsInputOTPGroup";
|
|
2368
|
+
var AdsInputOTPSeparator = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
2369
|
+
InputOTPSeparator,
|
|
2370
|
+
{
|
|
2371
|
+
className: className ?? "h-px w-6 shrink-0 bg-border text-transparent [&_svg]:hidden",
|
|
2372
|
+
ref,
|
|
2373
|
+
...props
|
|
2374
|
+
}
|
|
2375
|
+
));
|
|
2376
|
+
AdsInputOTPSeparator.displayName = "AdsInputOTPSeparator";
|
|
2377
|
+
var AdsInputOTPSlot = React26.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
2378
|
+
InputOTPSlot,
|
|
2379
|
+
{
|
|
2380
|
+
className: [
|
|
2381
|
+
"border-border bg-card text-foreground shadow-[0px_1px_2px_rgba(0,0,0,0.1)]",
|
|
2382
|
+
"first:border-r-0 first:rounded-l-radius-md last:border-r last:rounded-r-radius-md",
|
|
2383
|
+
"data-[active=true]:border-border-focus data-[active=true]:shadow-[0px_0px_0px_3px_rgba(161,161,161,0.5)]",
|
|
2384
|
+
"h-9 w-9 text-sm leading-5",
|
|
2385
|
+
className
|
|
2386
|
+
].filter(Boolean).join(" "),
|
|
2387
|
+
ref,
|
|
2388
|
+
...props
|
|
2389
|
+
}
|
|
2390
|
+
));
|
|
2391
|
+
AdsInputOTPSlot.displayName = "AdsInputOTPSlot";
|
|
2392
|
+
|
|
2393
|
+
// src/components/AdsPagination/index.tsx
|
|
2394
|
+
var React28 = __toESM(require("react"), 1);
|
|
2395
|
+
var import_lucide_react8 = require("lucide-react");
|
|
2396
|
+
|
|
2397
|
+
// src/primitives/pagination.tsx
|
|
2398
|
+
var React27 = __toESM(require("react"), 1);
|
|
2399
|
+
var import_lucide_react7 = require("lucide-react");
|
|
2400
|
+
var import_jsx_runtime30 = require("react/jsx-runtime");
|
|
2401
|
+
var Pagination = ({ className, ...props }) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
2402
|
+
"nav",
|
|
2403
|
+
{
|
|
2404
|
+
role: "navigation",
|
|
2405
|
+
"aria-label": "pagination",
|
|
2406
|
+
className: cn("mx-auto flex w-full justify-center", className),
|
|
2407
|
+
...props
|
|
2408
|
+
}
|
|
2409
|
+
);
|
|
2410
|
+
Pagination.displayName = "Pagination";
|
|
2411
|
+
var PaginationContent = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
2412
|
+
"ul",
|
|
2413
|
+
{
|
|
2414
|
+
ref,
|
|
2415
|
+
className: cn("flex flex-row items-center gap-1", className),
|
|
2416
|
+
...props
|
|
2417
|
+
}
|
|
2418
|
+
));
|
|
2419
|
+
PaginationContent.displayName = "PaginationContent";
|
|
2420
|
+
var PaginationItem = React27.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("li", { ref, className: cn("", className), ...props }));
|
|
2421
|
+
PaginationItem.displayName = "PaginationItem";
|
|
2422
|
+
var PaginationLink = ({
|
|
2423
|
+
className,
|
|
2424
|
+
isActive,
|
|
2425
|
+
size = "icon",
|
|
2426
|
+
...props
|
|
2427
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
2428
|
+
"a",
|
|
2429
|
+
{
|
|
2430
|
+
"aria-current": isActive ? "page" : void 0,
|
|
2431
|
+
className: cn(
|
|
2432
|
+
buttonVariants({
|
|
2433
|
+
variant: isActive ? "outline" : "ghost",
|
|
2434
|
+
size
|
|
2435
|
+
}),
|
|
2436
|
+
className
|
|
2437
|
+
),
|
|
2438
|
+
...props
|
|
2439
|
+
}
|
|
2440
|
+
);
|
|
2441
|
+
PaginationLink.displayName = "PaginationLink";
|
|
2442
|
+
var PaginationPrevious = ({
|
|
2443
|
+
className,
|
|
2444
|
+
...props
|
|
2445
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
|
|
2446
|
+
PaginationLink,
|
|
2447
|
+
{
|
|
2448
|
+
"aria-label": "Go to previous page",
|
|
2449
|
+
size: "default",
|
|
2450
|
+
className: cn("gap-1 pl-2.5", className),
|
|
2451
|
+
...props,
|
|
2452
|
+
children: [
|
|
2453
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_lucide_react7.ChevronLeft, { className: "h-4 w-4" }),
|
|
2454
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { children: "Previous" })
|
|
2455
|
+
]
|
|
2456
|
+
}
|
|
2457
|
+
);
|
|
2458
|
+
PaginationPrevious.displayName = "PaginationPrevious";
|
|
2459
|
+
var PaginationNext = ({
|
|
2460
|
+
className,
|
|
2461
|
+
...props
|
|
2462
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
|
|
2463
|
+
PaginationLink,
|
|
2464
|
+
{
|
|
2465
|
+
"aria-label": "Go to next page",
|
|
2466
|
+
size: "default",
|
|
2467
|
+
className: cn("gap-1 pr-2.5", className),
|
|
2468
|
+
...props,
|
|
2469
|
+
children: [
|
|
2470
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { children: "Next" }),
|
|
2471
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_lucide_react7.ChevronRight, { className: "h-4 w-4" })
|
|
2472
|
+
]
|
|
2473
|
+
}
|
|
2474
|
+
);
|
|
2475
|
+
PaginationNext.displayName = "PaginationNext";
|
|
2476
|
+
var PaginationEllipsis = ({
|
|
2477
|
+
className,
|
|
2478
|
+
...props
|
|
2479
|
+
}) => /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
|
|
2480
|
+
"span",
|
|
2481
|
+
{
|
|
2482
|
+
"aria-hidden": true,
|
|
2483
|
+
className: cn("flex h-9 w-9 items-center justify-center", className),
|
|
2484
|
+
...props,
|
|
2485
|
+
children: [
|
|
2486
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_lucide_react7.MoreHorizontal, { className: "h-4 w-4" }),
|
|
2487
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "sr-only", children: "More pages" })
|
|
2488
|
+
]
|
|
2489
|
+
}
|
|
2490
|
+
);
|
|
2491
|
+
PaginationEllipsis.displayName = "PaginationEllipsis";
|
|
2492
|
+
|
|
2493
|
+
// src/components/AdsPagination/index.tsx
|
|
2494
|
+
var import_jsx_runtime31 = require("react/jsx-runtime");
|
|
2495
|
+
var paginationLinkBaseClassName = "inline-flex h-9 min-w-9 items-center justify-center rounded-radius-md border text-sm font-medium leading-5 tracking-normal transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background";
|
|
2496
|
+
var paginationLinkInactiveClassName = "border-transparent bg-transparent px-[10px] text-foreground shadow-none hover:bg-accent hover:shadow-[0px_1px_2px_rgba(0,0,0,0.1)]";
|
|
2497
|
+
var paginationLinkActiveClassName = "border-border bg-card px-[10px] text-foreground shadow-[0px_1px_2px_rgba(0,0,0,0.1)]";
|
|
2498
|
+
function AdsPagination({ className, ...props }) {
|
|
2499
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
2500
|
+
Pagination,
|
|
2501
|
+
{
|
|
2502
|
+
className: cn("mx-0 w-auto justify-start", className),
|
|
2503
|
+
...props
|
|
2504
|
+
}
|
|
2505
|
+
);
|
|
2506
|
+
}
|
|
2507
|
+
AdsPagination.displayName = "AdsPagination";
|
|
2508
|
+
var AdsPaginationContent = React28.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(PaginationContent, { ref, className: cn("gap-1", className), ...props }));
|
|
2509
|
+
AdsPaginationContent.displayName = "AdsPaginationContent";
|
|
2510
|
+
var AdsPaginationItem = React28.forwardRef(
|
|
2511
|
+
({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(PaginationItem, { ref, className, ...props })
|
|
2512
|
+
);
|
|
2513
|
+
AdsPaginationItem.displayName = "AdsPaginationItem";
|
|
2514
|
+
var AdsPaginationLink = React28.forwardRef(
|
|
2515
|
+
({ className, isActive = false, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
2516
|
+
"a",
|
|
2517
|
+
{
|
|
2518
|
+
"aria-current": isActive ? "page" : void 0,
|
|
2519
|
+
className: cn(
|
|
2520
|
+
paginationLinkBaseClassName,
|
|
2521
|
+
isActive ? paginationLinkActiveClassName : paginationLinkInactiveClassName,
|
|
2522
|
+
className
|
|
2523
|
+
),
|
|
2524
|
+
ref,
|
|
2525
|
+
...props
|
|
2526
|
+
}
|
|
2527
|
+
)
|
|
2528
|
+
);
|
|
2529
|
+
AdsPaginationLink.displayName = "AdsPaginationLink";
|
|
2530
|
+
var AdsPaginationPrevious = React28.forwardRef(({ "aria-label": ariaLabel, children, className, ...props }, ref) => {
|
|
2531
|
+
const { messages } = useAdsI18n();
|
|
2532
|
+
const label = children ?? messages.pagination.previous;
|
|
2533
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
|
|
2534
|
+
AdsPaginationLink,
|
|
2535
|
+
{
|
|
2536
|
+
"aria-label": ariaLabel ?? messages.pagination.previous,
|
|
2537
|
+
className: cn("gap-1 px-md py-sm", className),
|
|
2538
|
+
ref,
|
|
2539
|
+
...props,
|
|
2540
|
+
children: [
|
|
2541
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_lucide_react8.ChevronLeft, { "aria-hidden": true, className: "h-4 w-4" }),
|
|
2542
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { children: label })
|
|
2543
|
+
]
|
|
2544
|
+
}
|
|
2545
|
+
);
|
|
2546
|
+
});
|
|
2547
|
+
AdsPaginationPrevious.displayName = "AdsPaginationPrevious";
|
|
2548
|
+
var AdsPaginationNext = React28.forwardRef(
|
|
2549
|
+
({ "aria-label": ariaLabel, children, className, ...props }, ref) => {
|
|
2550
|
+
const { messages } = useAdsI18n();
|
|
2551
|
+
const label = children ?? messages.pagination.next;
|
|
2552
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
|
|
2553
|
+
AdsPaginationLink,
|
|
2554
|
+
{
|
|
2555
|
+
"aria-label": ariaLabel ?? messages.pagination.next,
|
|
2556
|
+
className: cn("gap-1 px-md py-sm", className),
|
|
2557
|
+
ref,
|
|
2558
|
+
...props,
|
|
2559
|
+
children: [
|
|
2560
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { children: label }),
|
|
2561
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_lucide_react8.ChevronRight, { "aria-hidden": true, className: "h-4 w-4" })
|
|
2562
|
+
]
|
|
2563
|
+
}
|
|
2564
|
+
);
|
|
2565
|
+
}
|
|
2566
|
+
);
|
|
2567
|
+
AdsPaginationNext.displayName = "AdsPaginationNext";
|
|
2568
|
+
function AdsPaginationEllipsis({
|
|
2569
|
+
className,
|
|
2570
|
+
label,
|
|
2571
|
+
...props
|
|
2572
|
+
}) {
|
|
2573
|
+
const { messages } = useAdsI18n();
|
|
2574
|
+
const resolvedLabel = label ?? messages.pagination.morePages;
|
|
2575
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(
|
|
2576
|
+
"span",
|
|
2577
|
+
{
|
|
2578
|
+
"aria-hidden": true,
|
|
2579
|
+
className: cn(
|
|
2580
|
+
"inline-flex h-9 w-9 items-center justify-center rounded-radius-md border border-transparent text-foreground",
|
|
2581
|
+
className
|
|
2582
|
+
),
|
|
2583
|
+
...props,
|
|
2584
|
+
children: [
|
|
2585
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_lucide_react8.MoreHorizontal, { className: "h-4 w-4" }),
|
|
2586
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "sr-only", children: resolvedLabel })
|
|
2587
|
+
]
|
|
2588
|
+
}
|
|
2589
|
+
);
|
|
2590
|
+
}
|
|
2591
|
+
AdsPaginationEllipsis.displayName = "AdsPaginationEllipsis";
|
|
2592
|
+
|
|
2593
|
+
// src/components/AdsPopover/index.tsx
|
|
2594
|
+
var React30 = __toESM(require("react"), 1);
|
|
2595
|
+
|
|
2596
|
+
// src/primitives/popover.tsx
|
|
2597
|
+
var React29 = __toESM(require("react"), 1);
|
|
2598
|
+
var PopoverPrimitive = __toESM(require("@radix-ui/react-popover"), 1);
|
|
2599
|
+
var import_jsx_runtime32 = require("react/jsx-runtime");
|
|
2600
|
+
var Popover = PopoverPrimitive.Root;
|
|
2601
|
+
var PopoverTrigger = PopoverPrimitive.Trigger;
|
|
2602
|
+
var PopoverContent = React29.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(PopoverPrimitive.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
2603
|
+
PopoverPrimitive.Content,
|
|
2604
|
+
{
|
|
2605
|
+
ref,
|
|
2606
|
+
align,
|
|
2607
|
+
sideOffset,
|
|
2608
|
+
className: cn(
|
|
2609
|
+
"z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-popover-content-transform-origin]",
|
|
2610
|
+
className
|
|
2611
|
+
),
|
|
2612
|
+
...props
|
|
2613
|
+
}
|
|
2614
|
+
) }));
|
|
2615
|
+
PopoverContent.displayName = PopoverPrimitive.Content.displayName;
|
|
2616
|
+
|
|
2617
|
+
// src/components/AdsPopover/index.tsx
|
|
2618
|
+
var import_jsx_runtime33 = require("react/jsx-runtime");
|
|
2619
|
+
var popoverContentClassName = "z-50 w-[320px] rounded-radius-lg border border-border bg-popover p-lg text-popover-foreground shadow-[0px_2px_4px_-2px_rgba(0,0,0,0.1),0px_4px_6px_-1px_rgba(0,0,0,0.1)] outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-popover-content-transform-origin]";
|
|
2620
|
+
var AdsPopover = Popover;
|
|
2621
|
+
var AdsPopoverTrigger = PopoverTrigger;
|
|
2622
|
+
var AdsPopoverContent = React30.forwardRef(({ align = "center", className, inset = false, sideOffset = 8, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
2623
|
+
PopoverContent,
|
|
2624
|
+
{
|
|
2625
|
+
align,
|
|
2626
|
+
className: cn(
|
|
2627
|
+
popoverContentClassName,
|
|
2628
|
+
inset ? "p-0" : void 0,
|
|
2629
|
+
className
|
|
2630
|
+
),
|
|
2631
|
+
ref,
|
|
2632
|
+
sideOffset,
|
|
2633
|
+
...props
|
|
2634
|
+
}
|
|
2635
|
+
));
|
|
2636
|
+
AdsPopoverContent.displayName = "AdsPopoverContent";
|
|
2637
|
+
var AdsPopoverHeader = React30.forwardRef(
|
|
2638
|
+
({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
2639
|
+
"div",
|
|
2640
|
+
{
|
|
2641
|
+
className: cn("flex flex-col gap-sm", className),
|
|
2642
|
+
ref,
|
|
2643
|
+
...props
|
|
2644
|
+
}
|
|
2645
|
+
)
|
|
2646
|
+
);
|
|
2647
|
+
AdsPopoverHeader.displayName = "AdsPopoverHeader";
|
|
2648
|
+
var AdsPopoverBody = React30.forwardRef(
|
|
2649
|
+
({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: cn("mt-md flex flex-col gap-md", className), ref, ...props })
|
|
2650
|
+
);
|
|
2651
|
+
AdsPopoverBody.displayName = "AdsPopoverBody";
|
|
2652
|
+
var AdsPopoverTitle = React30.forwardRef(
|
|
2653
|
+
({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
2654
|
+
"h4",
|
|
2655
|
+
{
|
|
2656
|
+
className: cn("text-base font-medium leading-6 text-foreground", className),
|
|
2657
|
+
ref,
|
|
2658
|
+
...props
|
|
2659
|
+
}
|
|
2660
|
+
)
|
|
2661
|
+
);
|
|
2662
|
+
AdsPopoverTitle.displayName = "AdsPopoverTitle";
|
|
2663
|
+
var AdsPopoverDescription = React30.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
2664
|
+
"p",
|
|
2665
|
+
{
|
|
2666
|
+
className: cn("text-sm leading-5 text-muted-foreground", className),
|
|
2667
|
+
ref,
|
|
2668
|
+
...props
|
|
2669
|
+
}
|
|
2670
|
+
));
|
|
2671
|
+
AdsPopoverDescription.displayName = "AdsPopoverDescription";
|
|
2672
|
+
|
|
2673
|
+
// src/components/AdsProgress/index.tsx
|
|
2674
|
+
var React32 = __toESM(require("react"), 1);
|
|
2675
|
+
|
|
2676
|
+
// src/primitives/progress.tsx
|
|
2677
|
+
var React31 = __toESM(require("react"), 1);
|
|
2678
|
+
var ProgressPrimitive = __toESM(require("@radix-ui/react-progress"), 1);
|
|
2679
|
+
var import_jsx_runtime34 = require("react/jsx-runtime");
|
|
2680
|
+
var Progress = React31.forwardRef(({ className, indicatorClassName, value, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
|
|
2681
|
+
ProgressPrimitive.Root,
|
|
2682
|
+
{
|
|
2683
|
+
className: cn("relative h-4 w-full overflow-hidden rounded-full bg-secondary", className),
|
|
2684
|
+
ref,
|
|
2685
|
+
value,
|
|
2686
|
+
...props,
|
|
2687
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
|
|
2688
|
+
ProgressPrimitive.Indicator,
|
|
2689
|
+
{
|
|
2690
|
+
className: cn("h-full w-full flex-1 bg-primary transition-all", indicatorClassName),
|
|
2691
|
+
style: { transform: `translateX(-${100 - (value ?? 0)}%)` }
|
|
2692
|
+
}
|
|
2693
|
+
)
|
|
2694
|
+
}
|
|
2695
|
+
));
|
|
2696
|
+
Progress.displayName = ProgressPrimitive.Root.displayName;
|
|
2697
|
+
|
|
2698
|
+
// src/components/AdsProgress/index.tsx
|
|
2699
|
+
var import_jsx_runtime35 = require("react/jsx-runtime");
|
|
2700
|
+
var progressBaseClassName = "h-2 rounded-radius-full bg-[color:color-mix(in_srgb,var(--primary)_20%,transparent)]";
|
|
2701
|
+
var progressIndicatorVariantClassName = {
|
|
2702
|
+
ai: "bg-brand-gradient",
|
|
2703
|
+
default: "bg-primary"
|
|
2704
|
+
};
|
|
2705
|
+
var Progress2 = React32.forwardRef(({ className, indicatorClassName, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
|
|
2706
|
+
Progress,
|
|
2707
|
+
{
|
|
2708
|
+
className: cn(progressBaseClassName, className),
|
|
2709
|
+
indicatorClassName: cn(progressIndicatorVariantClassName.default, indicatorClassName),
|
|
2710
|
+
ref,
|
|
2711
|
+
...props
|
|
2712
|
+
}
|
|
2713
|
+
));
|
|
2714
|
+
Progress2.displayName = "Progress";
|
|
2715
|
+
var AdsProgress = React32.forwardRef(
|
|
2716
|
+
({
|
|
2717
|
+
className,
|
|
2718
|
+
descriptionPlacement = "above",
|
|
2719
|
+
errorText,
|
|
2720
|
+
helperText,
|
|
2721
|
+
id,
|
|
2722
|
+
indicatorClassName,
|
|
2723
|
+
label,
|
|
2724
|
+
trackClassName,
|
|
2725
|
+
variant = "default",
|
|
2726
|
+
...props
|
|
2727
|
+
}, ref) => {
|
|
2728
|
+
const description = useAdsFieldDescription({
|
|
2729
|
+
errorText,
|
|
2730
|
+
helperText,
|
|
2731
|
+
id
|
|
2732
|
+
});
|
|
2733
|
+
const labelId = label ? `${description.inputId}-label` : void 0;
|
|
2734
|
+
const helperNode = helperText ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(AdsFieldDescription, { id: description.helperId, children: helperText }) : null;
|
|
2735
|
+
const errorNode = errorText ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(AdsFieldError, { id: description.errorId, children: errorText }) : null;
|
|
2736
|
+
return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(AdsFieldItem, { children: [
|
|
2737
|
+
label ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(AdsFieldLabel, { id: labelId, children: label }) : null,
|
|
2738
|
+
descriptionPlacement === "above" ? helperNode : null,
|
|
2739
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
|
|
2740
|
+
Progress,
|
|
2741
|
+
{
|
|
2742
|
+
"aria-describedby": description.describedBy,
|
|
2743
|
+
"aria-invalid": errorText ? true : void 0,
|
|
2744
|
+
"aria-labelledby": labelId,
|
|
2745
|
+
className: cn(progressBaseClassName, trackClassName, className),
|
|
2746
|
+
id: description.inputId,
|
|
2747
|
+
indicatorClassName: cn(
|
|
2748
|
+
progressIndicatorVariantClassName[variant],
|
|
2749
|
+
indicatorClassName
|
|
2750
|
+
),
|
|
2751
|
+
ref,
|
|
2752
|
+
...props
|
|
2753
|
+
}
|
|
2754
|
+
),
|
|
2755
|
+
descriptionPlacement === "below" ? helperNode : null,
|
|
2756
|
+
errorNode
|
|
2757
|
+
] });
|
|
2758
|
+
}
|
|
2759
|
+
);
|
|
2760
|
+
AdsProgress.displayName = "AdsProgress";
|
|
2761
|
+
|
|
2762
|
+
// src/components/AdsRadioGroup/index.tsx
|
|
2763
|
+
var React34 = __toESM(require("react"), 1);
|
|
2764
|
+
|
|
2765
|
+
// src/primitives/radio-group.tsx
|
|
2766
|
+
var React33 = __toESM(require("react"), 1);
|
|
2767
|
+
var RadioGroupPrimitive = __toESM(require("@radix-ui/react-radio-group"), 1);
|
|
2768
|
+
var import_lucide_react9 = require("lucide-react");
|
|
2769
|
+
var import_jsx_runtime36 = require("react/jsx-runtime");
|
|
2770
|
+
var RadioGroup = React33.forwardRef(({ className, ...props }, ref) => {
|
|
2771
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
2772
|
+
RadioGroupPrimitive.Root,
|
|
2773
|
+
{
|
|
2774
|
+
className: cn("grid gap-2", className),
|
|
2775
|
+
...props,
|
|
2776
|
+
ref
|
|
2777
|
+
}
|
|
2778
|
+
);
|
|
2779
|
+
});
|
|
2780
|
+
RadioGroup.displayName = RadioGroupPrimitive.Root.displayName;
|
|
2781
|
+
var RadioGroupItem = React33.forwardRef(({ className, ...props }, ref) => {
|
|
2782
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
2783
|
+
RadioGroupPrimitive.Item,
|
|
2784
|
+
{
|
|
2785
|
+
ref,
|
|
2786
|
+
className: cn(
|
|
2787
|
+
"aspect-square h-4 w-4 rounded-full border border-primary text-primary ring-offset-background focus:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",
|
|
2788
|
+
className
|
|
2789
|
+
),
|
|
2790
|
+
...props,
|
|
2791
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(RadioGroupPrimitive.Indicator, { className: "flex items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_lucide_react9.Circle, { className: "h-2.5 w-2.5 fill-current text-current" }) })
|
|
2792
|
+
}
|
|
2793
|
+
);
|
|
2794
|
+
});
|
|
2795
|
+
RadioGroupItem.displayName = RadioGroupPrimitive.Item.displayName;
|
|
2796
|
+
|
|
2797
|
+
// src/components/AdsRadioGroup/index.tsx
|
|
2798
|
+
var import_jsx_runtime37 = require("react/jsx-runtime");
|
|
2799
|
+
var radioGroupBaseClassName = "gap-3";
|
|
2800
|
+
var radioItemBaseClassName = "h-4 w-4 border-border bg-card text-primary shadow-[0px_1px_2px_rgba(0,0,0,0.1)] focus-visible:ring-[3px] focus-visible:ring-[rgba(161,161,161,0.5)] focus-visible:ring-offset-0";
|
|
2801
|
+
var RadioGroup2 = React34.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(RadioGroup, { className: cn(radioGroupBaseClassName, className), ref, ...props }));
|
|
2802
|
+
RadioGroup2.displayName = "RadioGroup";
|
|
2803
|
+
var RadioGroupItem2 = React34.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
2804
|
+
RadioGroupItem,
|
|
2805
|
+
{
|
|
2806
|
+
className: cn(radioItemBaseClassName, className),
|
|
2807
|
+
ref,
|
|
2808
|
+
...props
|
|
2809
|
+
}
|
|
2810
|
+
));
|
|
2811
|
+
RadioGroupItem2.displayName = "RadioGroupItem";
|
|
2812
|
+
var AdsRadioGroup = React34.forwardRef(
|
|
2813
|
+
({
|
|
2814
|
+
children,
|
|
2815
|
+
className,
|
|
2816
|
+
descriptionPlacement = "below",
|
|
2817
|
+
errorText,
|
|
2818
|
+
helperText,
|
|
2819
|
+
id,
|
|
2820
|
+
label,
|
|
2821
|
+
...props
|
|
2822
|
+
}, ref) => {
|
|
2823
|
+
const description = useAdsFieldDescription({
|
|
2824
|
+
errorText,
|
|
2825
|
+
helperText,
|
|
2826
|
+
id
|
|
2827
|
+
});
|
|
2828
|
+
const helperNode = helperText ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(AdsFieldDescription, { id: description.helperId, children: helperText }) : null;
|
|
2829
|
+
const errorNode = errorText ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(AdsFieldError, { id: description.errorId, children: errorText }) : null;
|
|
2830
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(AdsFieldItem, { children: [
|
|
2831
|
+
label ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(AdsFieldLabel, { children: label }) : null,
|
|
2832
|
+
descriptionPlacement === "above" ? helperNode : null,
|
|
2833
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
2834
|
+
RadioGroup2,
|
|
2835
|
+
{
|
|
2836
|
+
"aria-describedby": description.describedBy,
|
|
2837
|
+
className,
|
|
2838
|
+
ref,
|
|
2839
|
+
...props,
|
|
2840
|
+
children
|
|
2841
|
+
}
|
|
2842
|
+
),
|
|
2843
|
+
descriptionPlacement === "below" ? helperNode : null,
|
|
2844
|
+
errorNode
|
|
2845
|
+
] });
|
|
2846
|
+
}
|
|
2847
|
+
);
|
|
2848
|
+
AdsRadioGroup.displayName = "AdsRadioGroup";
|
|
2849
|
+
var AdsRadioGroupOption = React34.forwardRef(({ className, description, id, label, value, ...props }, ref) => {
|
|
2850
|
+
const generatedId = React34.useId();
|
|
2851
|
+
const inputId = id ?? generatedId;
|
|
2852
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("label", { className: "flex w-full cursor-pointer items-start gap-2", htmlFor: inputId, children: [
|
|
2853
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
2854
|
+
RadioGroupItem2,
|
|
2855
|
+
{
|
|
2856
|
+
className: cn(className),
|
|
2857
|
+
id: inputId,
|
|
2858
|
+
ref,
|
|
2859
|
+
value,
|
|
2860
|
+
...props
|
|
2861
|
+
}
|
|
2862
|
+
),
|
|
2863
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col gap-1.5", children: [
|
|
2864
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "text-sm leading-5 text-foreground", children: label }),
|
|
2865
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(AdsFieldDescription, { className: "text-sm leading-5", children: description }) : null
|
|
2866
|
+
] })
|
|
2867
|
+
] });
|
|
2868
|
+
});
|
|
2869
|
+
AdsRadioGroupOption.displayName = "AdsRadioGroupOption";
|
|
2870
|
+
var AdsRadioGroupCardOption = React34.forwardRef(({ className, description, disabled, id, label, value, ...props }, ref) => {
|
|
2871
|
+
const generatedId = React34.useId();
|
|
2872
|
+
const inputId = id ?? generatedId;
|
|
2873
|
+
const titleId = `${inputId}-label`;
|
|
2874
|
+
const descriptionId = description ? `${inputId}-description` : void 0;
|
|
2875
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "relative", children: [
|
|
2876
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
2877
|
+
RadioGroupItem2,
|
|
2878
|
+
{
|
|
2879
|
+
"aria-describedby": descriptionId,
|
|
2880
|
+
"aria-labelledby": titleId,
|
|
2881
|
+
className: "peer absolute inset-0 h-full w-full rounded-radius-md opacity-0 focus-visible:outline-none focus-visible:ring-0",
|
|
2882
|
+
disabled,
|
|
2883
|
+
id: inputId,
|
|
2884
|
+
ref,
|
|
2885
|
+
value,
|
|
2886
|
+
...props
|
|
2887
|
+
}
|
|
2888
|
+
),
|
|
2889
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
|
|
2890
|
+
"div",
|
|
2891
|
+
{
|
|
2892
|
+
className: cn(
|
|
2893
|
+
"flex min-h-[72px] w-full items-center gap-3 rounded-radius-md border border-border bg-card p-md shadow-[0px_1px_2px_rgba(0,0,0,0.1)] transition-colors [&_[data-indicator]]:border-border [&_[data-indicator-span]]:opacity-0 peer-data-[state=checked]:border-primary peer-data-[state=checked]:bg-accent peer-data-[state=checked]:[&_[data-indicator]]:border-primary peer-data-[state=checked]:[&_[data-indicator-span]]:opacity-100 peer-focus-visible:ring-[3px] peer-focus-visible:ring-[rgba(161,161,161,0.5)] peer-focus-visible:ring-offset-0",
|
|
2894
|
+
disabled ? "cursor-not-allowed opacity-50" : "cursor-pointer",
|
|
2895
|
+
className
|
|
2896
|
+
),
|
|
2897
|
+
children: [
|
|
2898
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col gap-1.5", children: [
|
|
2899
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "text-sm font-medium leading-5 text-foreground", id: titleId, children: label }),
|
|
2900
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(AdsFieldDescription, { className: "text-xs leading-4", id: descriptionId, children: description }) : null
|
|
2901
|
+
] }),
|
|
2902
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "flex h-full shrink-0 items-start justify-center pt-px", children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
2903
|
+
"div",
|
|
2904
|
+
{
|
|
2905
|
+
className: "grid h-4 w-4 place-content-center rounded-full border bg-card shadow-[0px_1px_2px_rgba(0,0,0,0.1)]",
|
|
2906
|
+
"data-indicator": true,
|
|
2907
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
2908
|
+
"span",
|
|
2909
|
+
{
|
|
2910
|
+
className: "h-2 w-2 rounded-full bg-primary transition-opacity",
|
|
2911
|
+
"data-indicator-span": true
|
|
2912
|
+
}
|
|
2913
|
+
)
|
|
2914
|
+
}
|
|
2915
|
+
) })
|
|
2916
|
+
]
|
|
2917
|
+
}
|
|
2918
|
+
)
|
|
2919
|
+
] });
|
|
2920
|
+
});
|
|
2921
|
+
AdsRadioGroupCardOption.displayName = "AdsRadioGroupCardOption";
|
|
2922
|
+
|
|
2923
|
+
// src/primitives/select.tsx
|
|
2924
|
+
var React35 = __toESM(require("react"), 1);
|
|
2925
|
+
var SelectPrimitive = __toESM(require("@radix-ui/react-select"), 1);
|
|
2926
|
+
var import_lucide_react10 = require("lucide-react");
|
|
2927
|
+
var import_jsx_runtime38 = require("react/jsx-runtime");
|
|
2928
|
+
var Select = SelectPrimitive.Root;
|
|
2929
|
+
var SelectGroup = SelectPrimitive.Group;
|
|
2930
|
+
var SelectValue = SelectPrimitive.Value;
|
|
2931
|
+
var SelectTrigger = React35.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
2932
|
+
SelectPrimitive.Trigger,
|
|
2933
|
+
{
|
|
2934
|
+
ref,
|
|
2935
|
+
className: cn(
|
|
2936
|
+
"flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background data-[placeholder]:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",
|
|
2937
|
+
className
|
|
2938
|
+
),
|
|
2939
|
+
...props,
|
|
2940
|
+
children: [
|
|
2941
|
+
children,
|
|
2942
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SelectPrimitive.Icon, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react10.ChevronDown, { className: "h-4 w-4 opacity-50" }) })
|
|
2943
|
+
]
|
|
2944
|
+
}
|
|
2945
|
+
));
|
|
2946
|
+
SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
|
|
2947
|
+
var SelectScrollUpButton = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
2948
|
+
SelectPrimitive.ScrollUpButton,
|
|
2949
|
+
{
|
|
2950
|
+
ref,
|
|
2951
|
+
className: cn(
|
|
2952
|
+
"flex cursor-default items-center justify-center py-1",
|
|
2953
|
+
className
|
|
2954
|
+
),
|
|
2955
|
+
...props,
|
|
2956
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react10.ChevronUp, { className: "h-4 w-4" })
|
|
2957
|
+
}
|
|
2958
|
+
));
|
|
2959
|
+
SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
|
|
2960
|
+
var SelectScrollDownButton = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
2961
|
+
SelectPrimitive.ScrollDownButton,
|
|
2962
|
+
{
|
|
2963
|
+
ref,
|
|
2964
|
+
className: cn(
|
|
2965
|
+
"flex cursor-default items-center justify-center py-1",
|
|
2966
|
+
className
|
|
2967
|
+
),
|
|
2968
|
+
...props,
|
|
2969
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react10.ChevronDown, { className: "h-4 w-4" })
|
|
2970
|
+
}
|
|
2971
|
+
));
|
|
2972
|
+
SelectScrollDownButton.displayName = SelectPrimitive.ScrollDownButton.displayName;
|
|
2973
|
+
var SelectContent = React35.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SelectPrimitive.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
2974
|
+
SelectPrimitive.Content,
|
|
2975
|
+
{
|
|
2976
|
+
ref,
|
|
2977
|
+
className: cn(
|
|
2978
|
+
"relative z-50 max-h-[--radix-select-content-available-height] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-select-content-transform-origin]",
|
|
2979
|
+
position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
|
|
2980
|
+
className
|
|
2981
|
+
),
|
|
2982
|
+
position,
|
|
2983
|
+
...props,
|
|
2984
|
+
children: [
|
|
2985
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SelectScrollUpButton, {}),
|
|
2986
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
2987
|
+
SelectPrimitive.Viewport,
|
|
2988
|
+
{
|
|
2989
|
+
className: cn(
|
|
2990
|
+
"p-1",
|
|
2991
|
+
position === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"
|
|
2992
|
+
),
|
|
2993
|
+
children
|
|
2994
|
+
}
|
|
2995
|
+
),
|
|
2996
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SelectScrollDownButton, {})
|
|
2997
|
+
]
|
|
2998
|
+
}
|
|
2999
|
+
) }));
|
|
3000
|
+
SelectContent.displayName = SelectPrimitive.Content.displayName;
|
|
3001
|
+
var SelectLabel = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
3002
|
+
SelectPrimitive.Label,
|
|
3003
|
+
{
|
|
3004
|
+
ref,
|
|
3005
|
+
className: cn("py-1.5 pl-8 pr-2 text-sm font-semibold", className),
|
|
3006
|
+
...props
|
|
3007
|
+
}
|
|
3008
|
+
));
|
|
3009
|
+
SelectLabel.displayName = SelectPrimitive.Label.displayName;
|
|
3010
|
+
var SelectItem = React35.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
3011
|
+
SelectPrimitive.Item,
|
|
3012
|
+
{
|
|
3013
|
+
ref,
|
|
3014
|
+
className: cn(
|
|
3015
|
+
"relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
|
3016
|
+
className
|
|
3017
|
+
),
|
|
3018
|
+
...props,
|
|
3019
|
+
children: [
|
|
3020
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SelectPrimitive.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_lucide_react10.Check, { className: "h-4 w-4" }) }) }),
|
|
3021
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(SelectPrimitive.ItemText, { children })
|
|
3022
|
+
]
|
|
3023
|
+
}
|
|
3024
|
+
));
|
|
3025
|
+
SelectItem.displayName = SelectPrimitive.Item.displayName;
|
|
3026
|
+
var SelectSeparator = React35.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
3027
|
+
SelectPrimitive.Separator,
|
|
3028
|
+
{
|
|
3029
|
+
ref,
|
|
3030
|
+
className: cn("-mx-1 my-1 h-px bg-muted", className),
|
|
3031
|
+
...props
|
|
3032
|
+
}
|
|
3033
|
+
));
|
|
3034
|
+
SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
|
|
3035
|
+
|
|
3036
|
+
// src/components/AdsSelect/index.tsx
|
|
3037
|
+
var import_jsx_runtime39 = require("react/jsx-runtime");
|
|
3038
|
+
var selectTriggerBaseClassName = "h-9 rounded-radius-md border border-border bg-card px-md py-2 text-sm leading-5 text-foreground shadow-[0px_1px_2px_rgba(0,0,0,0.1)] focus:border-border-focus focus:ring-[3px] focus:ring-[rgba(161,161,161,0.5)] focus:ring-offset-0 data-[placeholder]:text-muted-foreground";
|
|
3039
|
+
var selectContentBaseClassName = "rounded-radius-md border-border bg-popover text-popover-foreground shadow-[0px_8px_24px_rgba(0,0,0,0.22)]";
|
|
3040
|
+
function AdsSelect({
|
|
3041
|
+
children,
|
|
3042
|
+
contentClassName: contentClassName3,
|
|
3043
|
+
descriptionPlacement = "below",
|
|
3044
|
+
errorText,
|
|
3045
|
+
helperText,
|
|
3046
|
+
id,
|
|
3047
|
+
label,
|
|
3048
|
+
placeholder,
|
|
3049
|
+
triggerClassName,
|
|
3050
|
+
...props
|
|
3051
|
+
}) {
|
|
3052
|
+
const description = useAdsFieldDescription({
|
|
3053
|
+
describedBy: void 0,
|
|
3054
|
+
errorText,
|
|
3055
|
+
helperText,
|
|
3056
|
+
id
|
|
3057
|
+
});
|
|
3058
|
+
const helperNode = helperText ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(AdsFieldDescription, { id: description.helperId, children: helperText }) : null;
|
|
3059
|
+
const errorNode = errorText ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(AdsFieldError, { id: description.errorId, children: errorText }) : null;
|
|
3060
|
+
return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(AdsFieldItem, { children: [
|
|
3061
|
+
label ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(AdsFieldLabel, { htmlFor: description.inputId, children: label }) : null,
|
|
3062
|
+
descriptionPlacement === "above" ? helperNode : null,
|
|
3063
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(Select, { ...props, children: [
|
|
3064
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
3065
|
+
SelectTrigger,
|
|
3066
|
+
{
|
|
3067
|
+
"aria-describedby": description.describedBy,
|
|
3068
|
+
"aria-invalid": errorText ? true : void 0,
|
|
3069
|
+
className: cn(selectTriggerBaseClassName, triggerClassName),
|
|
3070
|
+
id: description.inputId,
|
|
3071
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(SelectValue, { placeholder })
|
|
3072
|
+
}
|
|
3073
|
+
),
|
|
3074
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(SelectContent, { className: cn(selectContentBaseClassName, contentClassName3), children })
|
|
3075
|
+
] }),
|
|
3076
|
+
descriptionPlacement === "below" ? helperNode : null,
|
|
3077
|
+
errorNode
|
|
3078
|
+
] });
|
|
3079
|
+
}
|
|
3080
|
+
|
|
3081
|
+
// src/components/AdsSlider/index.tsx
|
|
3082
|
+
var React37 = __toESM(require("react"), 1);
|
|
3083
|
+
|
|
3084
|
+
// src/primitives/slider.tsx
|
|
3085
|
+
var React36 = __toESM(require("react"), 1);
|
|
3086
|
+
var SliderPrimitive = __toESM(require("@radix-ui/react-slider"), 1);
|
|
3087
|
+
var import_jsx_runtime40 = require("react/jsx-runtime");
|
|
3088
|
+
var Slider = React36.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
|
|
3089
|
+
SliderPrimitive.Root,
|
|
3090
|
+
{
|
|
3091
|
+
ref,
|
|
3092
|
+
className: cn(
|
|
3093
|
+
"relative flex w-full touch-none select-none items-center",
|
|
3094
|
+
className
|
|
3095
|
+
),
|
|
3096
|
+
...props,
|
|
3097
|
+
children: [
|
|
3098
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)(SliderPrimitive.Track, { className: "relative h-1.5 w-full grow overflow-hidden rounded-full bg-secondary", children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(SliderPrimitive.Range, { className: "absolute h-full bg-primary" }) }),
|
|
3099
|
+
Array.from({
|
|
3100
|
+
length: Array.isArray(props.value) ? props.value.length : Array.isArray(props.defaultValue) ? props.defaultValue.length : 1
|
|
3101
|
+
}).map((_, index) => /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
|
|
3102
|
+
SliderPrimitive.Thumb,
|
|
3103
|
+
{
|
|
3104
|
+
className: "block h-5 w-5 rounded-full border border-primary bg-background ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50"
|
|
3105
|
+
},
|
|
3106
|
+
index
|
|
3107
|
+
))
|
|
3108
|
+
]
|
|
3109
|
+
}
|
|
3110
|
+
));
|
|
3111
|
+
Slider.displayName = SliderPrimitive.Root.displayName;
|
|
3112
|
+
|
|
3113
|
+
// src/components/AdsSlider/index.tsx
|
|
3114
|
+
var import_jsx_runtime41 = require("react/jsx-runtime");
|
|
3115
|
+
var sliderBaseClassName = "py-1";
|
|
3116
|
+
var Slider2 = React37.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Slider, { className: cn(sliderBaseClassName, className), ref, ...props }));
|
|
3117
|
+
Slider2.displayName = "Slider";
|
|
3118
|
+
var AdsSlider = React37.forwardRef(
|
|
3119
|
+
({
|
|
3120
|
+
className,
|
|
3121
|
+
descriptionPlacement = "above",
|
|
3122
|
+
errorText,
|
|
3123
|
+
helperText,
|
|
3124
|
+
id,
|
|
3125
|
+
label,
|
|
3126
|
+
...props
|
|
3127
|
+
}, ref) => {
|
|
3128
|
+
const description = useAdsFieldDescription({
|
|
3129
|
+
errorText,
|
|
3130
|
+
helperText,
|
|
3131
|
+
id
|
|
3132
|
+
});
|
|
3133
|
+
const helperNode = helperText ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(AdsFieldDescription, { id: description.helperId, children: helperText }) : null;
|
|
3134
|
+
const errorNode = errorText ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(AdsFieldError, { id: description.errorId, children: errorText }) : null;
|
|
3135
|
+
return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(AdsFieldItem, { children: [
|
|
3136
|
+
label ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(AdsFieldLabel, { children: label }) : null,
|
|
3137
|
+
descriptionPlacement === "above" ? helperNode : null,
|
|
3138
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
3139
|
+
Slider2,
|
|
3140
|
+
{
|
|
3141
|
+
"aria-describedby": description.describedBy,
|
|
3142
|
+
className,
|
|
3143
|
+
ref,
|
|
3144
|
+
...props
|
|
3145
|
+
}
|
|
3146
|
+
),
|
|
3147
|
+
descriptionPlacement === "below" ? helperNode : null,
|
|
3148
|
+
errorNode
|
|
3149
|
+
] });
|
|
3150
|
+
}
|
|
3151
|
+
);
|
|
3152
|
+
AdsSlider.displayName = "AdsSlider";
|
|
3153
|
+
|
|
3154
|
+
// src/components/AdsSwitch/index.tsx
|
|
3155
|
+
var React39 = __toESM(require("react"), 1);
|
|
3156
|
+
|
|
3157
|
+
// src/primitives/switch.tsx
|
|
3158
|
+
var React38 = __toESM(require("react"), 1);
|
|
3159
|
+
var SwitchPrimitives = __toESM(require("@radix-ui/react-switch"), 1);
|
|
3160
|
+
var import_jsx_runtime42 = require("react/jsx-runtime");
|
|
3161
|
+
var Switch = React38.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
|
|
3162
|
+
SwitchPrimitives.Root,
|
|
3163
|
+
{
|
|
3164
|
+
className: cn(
|
|
3165
|
+
"peer inline-flex h-[18px] w-8 shrink-0 cursor-pointer items-center rounded-full border border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input",
|
|
3166
|
+
className
|
|
3167
|
+
),
|
|
3168
|
+
...props,
|
|
3169
|
+
ref,
|
|
3170
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
|
|
3171
|
+
SwitchPrimitives.Thumb,
|
|
3172
|
+
{
|
|
3173
|
+
className: cn(
|
|
3174
|
+
"pointer-events-none block h-5 w-5 rounded-full bg-background shadow-[0px_1px_2px_rgba(0,0,0,0.1)] ring-0 transition-transform data-[state=checked]:translate-x-[20px] data-[state=unchecked]:translate-x-[2px]"
|
|
3175
|
+
)
|
|
3176
|
+
}
|
|
3177
|
+
)
|
|
3178
|
+
}
|
|
3179
|
+
));
|
|
3180
|
+
Switch.displayName = SwitchPrimitives.Root.displayName;
|
|
3181
|
+
|
|
3182
|
+
// src/components/AdsSwitch/index.tsx
|
|
3183
|
+
var import_jsx_runtime43 = require("react/jsx-runtime");
|
|
3184
|
+
var switchBaseClassName = "h-6 w-11 border border-transparent bg-muted shadow-[0px_1px_2px_rgba(0,0,0,0.1)] focus-visible:ring-[3px] focus-visible:ring-[rgba(161,161,161,0.5)] focus-visible:ring-offset-0 data-[state=checked]:bg-primary data-[state=unchecked]:bg-muted";
|
|
3185
|
+
var Switch2 = React39.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Switch, { className: cn(switchBaseClassName, className), ref, ...props }));
|
|
3186
|
+
Switch2.displayName = "Switch";
|
|
3187
|
+
var AdsSwitch = React39.forwardRef(({ className, description, id, label, switchClassName, wrapperClassName, ...props }, ref) => {
|
|
3188
|
+
const generatedId = React39.useId();
|
|
3189
|
+
const inputId = id ?? generatedId;
|
|
3190
|
+
if (!label) {
|
|
3191
|
+
return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
|
|
3192
|
+
Switch2,
|
|
3193
|
+
{
|
|
3194
|
+
className: cn(className, switchClassName),
|
|
3195
|
+
id: inputId,
|
|
3196
|
+
ref,
|
|
3197
|
+
...props
|
|
3198
|
+
}
|
|
3199
|
+
);
|
|
3200
|
+
}
|
|
3201
|
+
return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("label", { className: cn("block w-full cursor-pointer", wrapperClassName), htmlFor: inputId, children: /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { className: "flex w-full items-start gap-3", children: [
|
|
3202
|
+
/* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col gap-1.5 pt-0.5", children: [
|
|
3203
|
+
/* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { className: "text-sm font-medium leading-5 text-foreground", children: label }),
|
|
3204
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(AdsFieldDescription, { className: "text-sm leading-5", children: description }) : null
|
|
3205
|
+
] }),
|
|
3206
|
+
/* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { className: "shrink-0", children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
|
|
3207
|
+
Switch2,
|
|
3208
|
+
{
|
|
3209
|
+
className: cn(className, switchClassName),
|
|
3210
|
+
id: inputId,
|
|
3211
|
+
ref,
|
|
3212
|
+
...props
|
|
3213
|
+
}
|
|
3214
|
+
) })
|
|
3215
|
+
] }) });
|
|
3216
|
+
});
|
|
3217
|
+
AdsSwitch.displayName = "AdsSwitch";
|
|
3218
|
+
|
|
3219
|
+
// src/components/AdsTabs/index.tsx
|
|
3220
|
+
var React41 = __toESM(require("react"), 1);
|
|
3221
|
+
|
|
3222
|
+
// src/primitives/tabs.tsx
|
|
3223
|
+
var React40 = __toESM(require("react"), 1);
|
|
3224
|
+
var TabsPrimitive = __toESM(require("@radix-ui/react-tabs"), 1);
|
|
3225
|
+
var import_jsx_runtime44 = require("react/jsx-runtime");
|
|
3226
|
+
var Tabs = TabsPrimitive.Root;
|
|
3227
|
+
var TabsList = React40.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
|
|
3228
|
+
TabsPrimitive.List,
|
|
3229
|
+
{
|
|
3230
|
+
className: cn("inline-flex items-center", className),
|
|
3231
|
+
ref,
|
|
3232
|
+
...props
|
|
3233
|
+
}
|
|
3234
|
+
));
|
|
3235
|
+
TabsList.displayName = TabsPrimitive.List.displayName;
|
|
3236
|
+
var TabsTrigger = React40.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
|
|
3237
|
+
TabsPrimitive.Trigger,
|
|
3238
|
+
{
|
|
3239
|
+
className: cn(
|
|
3240
|
+
"inline-flex items-center justify-center whitespace-nowrap focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50",
|
|
3241
|
+
className
|
|
3242
|
+
),
|
|
3243
|
+
ref,
|
|
3244
|
+
...props
|
|
3245
|
+
}
|
|
3246
|
+
));
|
|
3247
|
+
TabsTrigger.displayName = TabsPrimitive.Trigger.displayName;
|
|
3248
|
+
var TabsContent = React40.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
|
|
3249
|
+
TabsPrimitive.Content,
|
|
3250
|
+
{
|
|
3251
|
+
className: cn("focus-visible:outline-none", className),
|
|
3252
|
+
ref,
|
|
3253
|
+
...props
|
|
3254
|
+
}
|
|
3255
|
+
));
|
|
3256
|
+
TabsContent.displayName = TabsPrimitive.Content.displayName;
|
|
3257
|
+
|
|
3258
|
+
// src/components/AdsTabs/index.tsx
|
|
3259
|
+
var import_jsx_runtime45 = require("react/jsx-runtime");
|
|
3260
|
+
var AdsTabs = Tabs;
|
|
3261
|
+
var AdsTabsList = React41.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
|
|
3262
|
+
TabsList,
|
|
3263
|
+
{
|
|
3264
|
+
className: cn(
|
|
3265
|
+
"inline-flex items-center gap-0 rounded-radius-lg bg-muted p-[2px]",
|
|
3266
|
+
className
|
|
3267
|
+
),
|
|
3268
|
+
ref,
|
|
3269
|
+
...props
|
|
3270
|
+
}
|
|
3271
|
+
));
|
|
3272
|
+
AdsTabsList.displayName = "AdsTabsList";
|
|
3273
|
+
var AdsTabsTrigger = React41.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
|
|
3274
|
+
TabsTrigger,
|
|
3275
|
+
{
|
|
3276
|
+
className: cn(
|
|
3277
|
+
"inline-flex h-8 items-center justify-center rounded-radius-md px-md py-xs text-sm font-medium leading-5 text-foreground transition-[background-color,border-color,box-shadow] focus-visible:ring-[3px] focus-visible:ring-[rgba(161,161,161,0.5)] focus-visible:ring-offset-0 data-[state=active]:border data-[state=active]:border-border data-[state=active]:bg-card data-[state=active]:shadow-[0px_1px_1.5px_rgba(0,0,0,0.1)]",
|
|
3278
|
+
className
|
|
3279
|
+
),
|
|
3280
|
+
ref,
|
|
3281
|
+
...props
|
|
3282
|
+
}
|
|
3283
|
+
));
|
|
3284
|
+
AdsTabsTrigger.displayName = "AdsTabsTrigger";
|
|
3285
|
+
var AdsTabsContent = React41.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
|
|
3286
|
+
TabsContent,
|
|
3287
|
+
{
|
|
3288
|
+
className: cn(
|
|
3289
|
+
"mt-2 rounded-[12px] border border-border bg-card shadow-[0px_1px_1.5px_rgba(0,0,0,0.1)] focus-visible:ring-0",
|
|
3290
|
+
className
|
|
3291
|
+
),
|
|
3292
|
+
ref,
|
|
3293
|
+
...props
|
|
3294
|
+
}
|
|
3295
|
+
));
|
|
3296
|
+
AdsTabsContent.displayName = "AdsTabsContent";
|
|
3297
|
+
|
|
3298
|
+
// src/components/AdsToggle/index.tsx
|
|
3299
|
+
var React43 = __toESM(require("react"), 1);
|
|
3300
|
+
|
|
3301
|
+
// src/primitives/toggle.tsx
|
|
3302
|
+
var React42 = __toESM(require("react"), 1);
|
|
3303
|
+
var TogglePrimitive = __toESM(require("@radix-ui/react-toggle"), 1);
|
|
3304
|
+
var import_jsx_runtime46 = require("react/jsx-runtime");
|
|
3305
|
+
var Toggle = React42.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
|
|
3306
|
+
TogglePrimitive.Root,
|
|
3307
|
+
{
|
|
3308
|
+
className: cn(
|
|
3309
|
+
"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium transition-[background-color,box-shadow,color] focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
|
|
3310
|
+
className
|
|
3311
|
+
),
|
|
3312
|
+
ref,
|
|
3313
|
+
...props
|
|
3314
|
+
}
|
|
3315
|
+
));
|
|
3316
|
+
Toggle.displayName = TogglePrimitive.Root.displayName;
|
|
3317
|
+
|
|
3318
|
+
// src/components/AdsToggle/index.tsx
|
|
3319
|
+
var import_jsx_runtime47 = require("react/jsx-runtime");
|
|
3320
|
+
var sizeClassName2 = {
|
|
3321
|
+
sm: "!h-8 px-[6px] text-sm",
|
|
3322
|
+
md: "!h-9 px-md text-sm",
|
|
3323
|
+
lg: "!h-10 px-[10px] text-sm"
|
|
3324
|
+
};
|
|
3325
|
+
var iconOnlySizeClassName = {
|
|
3326
|
+
sm: "!w-8",
|
|
3327
|
+
md: "!w-9",
|
|
3328
|
+
lg: "!w-10"
|
|
3329
|
+
};
|
|
3330
|
+
var variantClassName = {
|
|
3331
|
+
default: "border border-transparent bg-transparent text-foreground shadow-none hover:bg-muted/70 data-[state=on]:bg-muted data-[state=on]:shadow-[0px_1px_1px_rgba(0,0,0,0.1)]",
|
|
3332
|
+
outline: "border border-border bg-transparent text-foreground shadow-none hover:bg-muted/70 data-[state=on]:border-transparent data-[state=on]:bg-muted data-[state=on]:shadow-[0px_1px_1px_rgba(0,0,0,0.1)]"
|
|
3333
|
+
};
|
|
3334
|
+
var AdsToggle = React43.forwardRef(({ children, className, size = "md", variant = "default", ...props }, ref) => {
|
|
3335
|
+
const childCount = React43.Children.count(children);
|
|
3336
|
+
const isIconOnly = childCount === 1 && React43.isValidElement(children);
|
|
3337
|
+
return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
|
|
3338
|
+
Toggle,
|
|
3339
|
+
{
|
|
3340
|
+
className: cn(
|
|
3341
|
+
"inline-flex shrink-0 items-center justify-center gap-2 rounded-radius-md font-medium leading-5 text-foreground focus-visible:ring-[3px] focus-visible:ring-[rgba(161,161,161,0.5)] focus-visible:ring-offset-0 disabled:opacity-50",
|
|
3342
|
+
sizeClassName2[size],
|
|
3343
|
+
variantClassName[variant],
|
|
3344
|
+
isIconOnly && iconOnlySizeClassName[size],
|
|
3345
|
+
className
|
|
3346
|
+
),
|
|
3347
|
+
ref,
|
|
3348
|
+
...props,
|
|
3349
|
+
children
|
|
3350
|
+
}
|
|
3351
|
+
);
|
|
3352
|
+
});
|
|
3353
|
+
AdsToggle.displayName = "AdsToggle";
|
|
3354
|
+
|
|
3355
|
+
// src/components/AdsToggleGroup/index.tsx
|
|
3356
|
+
var React45 = __toESM(require("react"), 1);
|
|
3357
|
+
|
|
3358
|
+
// src/primitives/toggle-group.tsx
|
|
3359
|
+
var React44 = __toESM(require("react"), 1);
|
|
3360
|
+
var ToggleGroupPrimitive = __toESM(require("@radix-ui/react-toggle-group"), 1);
|
|
3361
|
+
var import_jsx_runtime48 = require("react/jsx-runtime");
|
|
3362
|
+
var ToggleGroup = React44.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
3363
|
+
ToggleGroupPrimitive.Root,
|
|
3364
|
+
{
|
|
3365
|
+
className: cn("inline-flex items-center justify-start", className),
|
|
3366
|
+
ref,
|
|
3367
|
+
...props
|
|
3368
|
+
}
|
|
3369
|
+
));
|
|
3370
|
+
ToggleGroup.displayName = ToggleGroupPrimitive.Root.displayName;
|
|
3371
|
+
var ToggleGroupItem = React44.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
3372
|
+
ToggleGroupPrimitive.Item,
|
|
3373
|
+
{
|
|
3374
|
+
className: cn(
|
|
3375
|
+
"inline-flex items-center justify-center whitespace-nowrap text-sm font-medium transition-[background-color,box-shadow,color] focus-visible:outline-none disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
|
|
3376
|
+
className
|
|
3377
|
+
),
|
|
3378
|
+
ref,
|
|
3379
|
+
...props
|
|
3380
|
+
}
|
|
3381
|
+
));
|
|
3382
|
+
ToggleGroupItem.displayName = ToggleGroupPrimitive.Item.displayName;
|
|
3383
|
+
|
|
3384
|
+
// src/components/AdsToggleGroup/index.tsx
|
|
3385
|
+
var import_jsx_runtime49 = require("react/jsx-runtime");
|
|
3386
|
+
var sizeClassName3 = {
|
|
3387
|
+
sm: "h-8 min-w-7 px-[6px] text-sm",
|
|
3388
|
+
md: "h-9 min-w-[34px] px-md text-sm",
|
|
3389
|
+
lg: "h-10 min-w-9 px-[10px] text-sm"
|
|
3390
|
+
};
|
|
3391
|
+
var variantClassName2 = {
|
|
3392
|
+
default: "border-transparent bg-transparent text-foreground hover:bg-muted/70 data-[state=on]:bg-muted data-[state=on]:shadow-[0px_1px_1px_rgba(0,0,0,0.1)]",
|
|
3393
|
+
outline: "border border-border bg-transparent text-foreground hover:bg-muted/70 data-[state=on]:border-transparent data-[state=on]:bg-muted data-[state=on]:shadow-[0px_1px_1px_rgba(0,0,0,0.1)]"
|
|
3394
|
+
};
|
|
3395
|
+
var AdsToggleGroupContext = React45.createContext(null);
|
|
3396
|
+
var AdsToggleGroup = React45.forwardRef(
|
|
3397
|
+
({
|
|
3398
|
+
children,
|
|
3399
|
+
className,
|
|
3400
|
+
orientation = "horizontal",
|
|
3401
|
+
size = "md",
|
|
3402
|
+
variant = "default",
|
|
3403
|
+
...props
|
|
3404
|
+
}, ref) => /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(AdsToggleGroupContext.Provider, { value: { orientation, size, variant }, children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
|
|
3405
|
+
ToggleGroup,
|
|
3406
|
+
{
|
|
3407
|
+
className: cn(
|
|
3408
|
+
"inline-flex items-start justify-start",
|
|
3409
|
+
orientation === "vertical" ? "flex-col" : "flex-row",
|
|
3410
|
+
className
|
|
3411
|
+
),
|
|
3412
|
+
orientation,
|
|
3413
|
+
ref,
|
|
3414
|
+
...props,
|
|
3415
|
+
children
|
|
3416
|
+
}
|
|
3417
|
+
) })
|
|
3418
|
+
);
|
|
3419
|
+
AdsToggleGroup.displayName = "AdsToggleGroup";
|
|
3420
|
+
var AdsToggleGroupItem = React45.forwardRef(({ className, size, variant, ...props }, ref) => {
|
|
3421
|
+
const context = React45.useContext(AdsToggleGroupContext);
|
|
3422
|
+
const resolvedOrientation = context?.orientation ?? "horizontal";
|
|
3423
|
+
const resolvedSize = size ?? context?.size ?? "md";
|
|
3424
|
+
const resolvedVariant = variant ?? context?.variant ?? "default";
|
|
3425
|
+
return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
|
|
3426
|
+
ToggleGroupItem,
|
|
3427
|
+
{
|
|
3428
|
+
className: cn(
|
|
3429
|
+
"inline-flex shrink-0 items-center justify-center font-medium leading-5 text-foreground focus-visible:relative focus-visible:z-10 focus-visible:ring-[3px] focus-visible:ring-[rgba(161,161,161,0.5)] focus-visible:ring-offset-0 disabled:opacity-50",
|
|
3430
|
+
sizeClassName3[resolvedSize],
|
|
3431
|
+
variantClassName2[resolvedVariant],
|
|
3432
|
+
resolvedOrientation === "horizontal" ? "first:rounded-l-radius-md first:rounded-r-none last:rounded-l-none last:rounded-r-radius-md not-first:not-last:rounded-none" : "first:rounded-t-radius-md first:rounded-b-none last:rounded-t-none last:rounded-b-radius-md not-first:not-last:rounded-none",
|
|
3433
|
+
className
|
|
3434
|
+
),
|
|
3435
|
+
ref,
|
|
3436
|
+
...props
|
|
3437
|
+
}
|
|
3438
|
+
);
|
|
3439
|
+
});
|
|
3440
|
+
AdsToggleGroupItem.displayName = "AdsToggleGroupItem";
|
|
3441
|
+
|
|
3442
|
+
// src/components/AdsTextarea/index.tsx
|
|
3443
|
+
var React46 = __toESM(require("react"), 1);
|
|
3444
|
+
var import_jsx_runtime50 = require("react/jsx-runtime");
|
|
3445
|
+
var textareaBaseClassName = "w-full rounded-radius-md border border-border bg-card px-md py-md text-base leading-6 text-foreground shadow-[0px_1px_2px_rgba(0,0,0,0.1)] placeholder:text-muted-foreground focus-visible:border-border-focus focus-visible:outline-none focus-visible:ring-[3px] focus-visible:ring-[rgba(161,161,161,0.5)] disabled:cursor-not-allowed disabled:opacity-50";
|
|
3446
|
+
var AdsTextarea = React46.forwardRef(
|
|
3447
|
+
({
|
|
3448
|
+
action,
|
|
3449
|
+
className,
|
|
3450
|
+
descriptionPlacement = "below",
|
|
3451
|
+
errorText,
|
|
3452
|
+
helperText,
|
|
3453
|
+
id,
|
|
3454
|
+
label,
|
|
3455
|
+
resizable = true,
|
|
3456
|
+
rows = 3,
|
|
3457
|
+
...props
|
|
3458
|
+
}, ref) => {
|
|
3459
|
+
const description = useAdsFieldDescription({
|
|
3460
|
+
describedBy: props["aria-describedby"],
|
|
3461
|
+
errorText,
|
|
3462
|
+
helperText,
|
|
3463
|
+
id
|
|
3464
|
+
});
|
|
3465
|
+
const helperNode = helperText ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(AdsFieldDescription, { id: description.helperId, children: helperText }) : null;
|
|
3466
|
+
const errorNode = errorText ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(AdsFieldError, { id: description.errorId, children: errorText }) : null;
|
|
3467
|
+
return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(AdsFieldItem, { children: [
|
|
3468
|
+
label ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(AdsFieldLabel, { htmlFor: description.inputId, children: label }) : null,
|
|
3469
|
+
descriptionPlacement === "above" ? helperNode : null,
|
|
3470
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
|
|
3471
|
+
Textarea,
|
|
3472
|
+
{
|
|
3473
|
+
"aria-describedby": description.describedBy,
|
|
3474
|
+
"aria-invalid": errorText ? true : void 0,
|
|
3475
|
+
className: cn(
|
|
3476
|
+
textareaBaseClassName,
|
|
3477
|
+
"min-h-[80px]",
|
|
3478
|
+
resizable ? "resize-y" : "resize-none",
|
|
3479
|
+
className
|
|
3480
|
+
),
|
|
3481
|
+
id: description.inputId,
|
|
3482
|
+
ref,
|
|
3483
|
+
rows,
|
|
3484
|
+
...props
|
|
3485
|
+
}
|
|
3486
|
+
),
|
|
3487
|
+
action ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: "w-full [&>*]:w-full", children: action }) : null,
|
|
3488
|
+
descriptionPlacement === "below" ? helperNode : null,
|
|
3489
|
+
errorNode
|
|
3490
|
+
] });
|
|
3491
|
+
}
|
|
3492
|
+
);
|
|
3493
|
+
AdsTextarea.displayName = "AdsTextarea";
|
|
3494
|
+
|
|
3495
|
+
// src/components/AdsTooltip/index.tsx
|
|
3496
|
+
var React48 = __toESM(require("react"), 1);
|
|
3497
|
+
|
|
3498
|
+
// src/primitives/tooltip.tsx
|
|
3499
|
+
var React47 = __toESM(require("react"), 1);
|
|
3500
|
+
var TooltipPrimitive = __toESM(require("@radix-ui/react-tooltip"), 1);
|
|
3501
|
+
var import_jsx_runtime51 = require("react/jsx-runtime");
|
|
3502
|
+
var TooltipProvider = TooltipPrimitive.Provider;
|
|
3503
|
+
var Tooltip = TooltipPrimitive.Root;
|
|
3504
|
+
var TooltipTrigger = TooltipPrimitive.Trigger;
|
|
3505
|
+
var TooltipArrow = TooltipPrimitive.Arrow;
|
|
3506
|
+
var TooltipContent = React47.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(TooltipPrimitive.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
|
|
3507
|
+
TooltipPrimitive.Content,
|
|
3508
|
+
{
|
|
3509
|
+
className: cn(
|
|
3510
|
+
"z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md outline-none data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-tooltip-content-transform-origin]",
|
|
3511
|
+
className
|
|
3512
|
+
),
|
|
3513
|
+
ref,
|
|
3514
|
+
sideOffset,
|
|
3515
|
+
...props
|
|
3516
|
+
}
|
|
3517
|
+
) }));
|
|
3518
|
+
TooltipContent.displayName = TooltipPrimitive.Content.displayName;
|
|
3519
|
+
|
|
3520
|
+
// src/components/AdsTooltip/index.tsx
|
|
3521
|
+
var import_jsx_runtime52 = require("react/jsx-runtime");
|
|
3522
|
+
var tooltipContentClassName = "z-50 rounded-[6px] border-0 bg-[#844fff] px-3 py-2 text-sm font-normal leading-5 text-[#fdfdfd] shadow-[0px_8px_24px_rgba(0,0,0,0.22)]";
|
|
3523
|
+
var AdsTooltipProvider = TooltipProvider;
|
|
3524
|
+
var AdsTooltip = Tooltip;
|
|
3525
|
+
var AdsTooltipTrigger = TooltipTrigger;
|
|
3526
|
+
var AdsTooltipContent = React48.forwardRef(({ align = "center", className, sideOffset = 10, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
|
|
3527
|
+
TooltipContent,
|
|
3528
|
+
{
|
|
3529
|
+
align,
|
|
3530
|
+
className: cn(tooltipContentClassName, className),
|
|
3531
|
+
ref,
|
|
3532
|
+
sideOffset,
|
|
3533
|
+
...props
|
|
3534
|
+
}
|
|
3535
|
+
));
|
|
3536
|
+
AdsTooltipContent.displayName = "AdsTooltipContent";
|
|
3537
|
+
var AdsTooltipArrow = React48.forwardRef(({ className, height = 5, width = 10, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
|
|
3538
|
+
TooltipArrow,
|
|
3539
|
+
{
|
|
3540
|
+
className: cn("fill-[#844fff]", className),
|
|
3541
|
+
height,
|
|
3542
|
+
ref,
|
|
3543
|
+
width,
|
|
3544
|
+
...props
|
|
3545
|
+
}
|
|
3546
|
+
));
|
|
3547
|
+
AdsTooltipArrow.displayName = "AdsTooltipArrow";
|
|
3548
|
+
|
|
3549
|
+
// src/components/AdsToast/index.tsx
|
|
3550
|
+
var React49 = __toESM(require("react"), 1);
|
|
3551
|
+
var import_lucide_react11 = require("lucide-react");
|
|
3552
|
+
var import_sonner = require("sonner");
|
|
3553
|
+
var import_jsx_runtime53 = require("react/jsx-runtime");
|
|
3554
|
+
var adsToastIconMap = {
|
|
3555
|
+
success: import_lucide_react11.CircleCheck,
|
|
3556
|
+
info: import_lucide_react11.Info,
|
|
3557
|
+
warning: import_lucide_react11.TriangleAlert,
|
|
3558
|
+
error: import_lucide_react11.OctagonX,
|
|
3559
|
+
loading: import_lucide_react11.LoaderCircle
|
|
3560
|
+
};
|
|
3561
|
+
function resolveToastIcon(intent, icon) {
|
|
3562
|
+
if (icon) {
|
|
3563
|
+
return icon;
|
|
3564
|
+
}
|
|
3565
|
+
if (intent === "default") {
|
|
3566
|
+
return null;
|
|
3567
|
+
}
|
|
3568
|
+
const Icon2 = adsToastIconMap[intent];
|
|
3569
|
+
return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
3570
|
+
Icon2,
|
|
3571
|
+
{
|
|
3572
|
+
"aria-hidden": true,
|
|
3573
|
+
className: cn("h-4 w-4 shrink-0 text-foreground", intent === "loading" && "animate-spin"),
|
|
3574
|
+
"data-testid": "ads-toast-icon"
|
|
3575
|
+
}
|
|
3576
|
+
);
|
|
3577
|
+
}
|
|
3578
|
+
var AdsToast = React49.forwardRef(
|
|
3579
|
+
({
|
|
3580
|
+
action,
|
|
3581
|
+
className,
|
|
3582
|
+
description,
|
|
3583
|
+
icon,
|
|
3584
|
+
intent = "default",
|
|
3585
|
+
title,
|
|
3586
|
+
...props
|
|
3587
|
+
}, ref) => {
|
|
3588
|
+
const resolvedIcon = resolveToastIcon(intent, icon);
|
|
3589
|
+
return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(
|
|
3590
|
+
"div",
|
|
3591
|
+
{
|
|
3592
|
+
className: cn(
|
|
3593
|
+
"flex min-w-[356px] max-w-[356px] items-center rounded-radius-lg border border-border bg-popover p-4 text-foreground",
|
|
3594
|
+
"shadow-[0px_10px_15px_-3px_rgba(0,0,0,0.1),0px_4px_6px_-4px_rgba(0,0,0,0.1)]",
|
|
3595
|
+
resolvedIcon ? "gap-1.5" : action ? "gap-6" : "gap-0",
|
|
3596
|
+
className
|
|
3597
|
+
),
|
|
3598
|
+
"data-testid": "ads-toast",
|
|
3599
|
+
ref,
|
|
3600
|
+
...props,
|
|
3601
|
+
children: [
|
|
3602
|
+
resolvedIcon,
|
|
3603
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { className: "flex min-w-0 flex-1 flex-col gap-0.5", children: [
|
|
3604
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)("p", { className: "text-sm font-medium leading-5 text-foreground", children: title }),
|
|
3605
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("p", { className: "text-xs font-normal leading-4 text-muted-foreground", children: description }) : null
|
|
3606
|
+
] }),
|
|
3607
|
+
action ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
3608
|
+
AdsButton,
|
|
3609
|
+
{
|
|
3610
|
+
className: "shrink-0 rounded-radius-lg",
|
|
3611
|
+
intent: "primary",
|
|
3612
|
+
onClick: action.onClick,
|
|
3613
|
+
size: "sm",
|
|
3614
|
+
children: action.label
|
|
3615
|
+
}
|
|
3616
|
+
) : null
|
|
3617
|
+
]
|
|
3618
|
+
}
|
|
3619
|
+
);
|
|
3620
|
+
}
|
|
3621
|
+
);
|
|
3622
|
+
AdsToast.displayName = "AdsToast";
|
|
3623
|
+
function AdsToaster({
|
|
3624
|
+
containerAriaLabel,
|
|
3625
|
+
duration = 4e3,
|
|
3626
|
+
expand = false,
|
|
3627
|
+
gap = 16,
|
|
3628
|
+
position = "bottom-right",
|
|
3629
|
+
visibleToasts = 6,
|
|
3630
|
+
...props
|
|
3631
|
+
}) {
|
|
3632
|
+
const { messages } = useAdsI18n();
|
|
3633
|
+
return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
3634
|
+
import_sonner.Toaster,
|
|
3635
|
+
{
|
|
3636
|
+
closeButton: false,
|
|
3637
|
+
containerAriaLabel: containerAriaLabel ?? messages.toast.notifications,
|
|
3638
|
+
duration,
|
|
3639
|
+
expand,
|
|
3640
|
+
gap,
|
|
3641
|
+
position,
|
|
3642
|
+
toastOptions: {
|
|
3643
|
+
unstyled: true
|
|
3644
|
+
},
|
|
3645
|
+
visibleToasts,
|
|
3646
|
+
...props
|
|
3647
|
+
}
|
|
3648
|
+
);
|
|
3649
|
+
}
|
|
3650
|
+
function toStageNode(intent, title, options) {
|
|
3651
|
+
return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
3652
|
+
AdsToast,
|
|
3653
|
+
{
|
|
3654
|
+
action: options?.action,
|
|
3655
|
+
description: options?.description,
|
|
3656
|
+
icon: options?.icon,
|
|
3657
|
+
intent,
|
|
3658
|
+
title
|
|
3659
|
+
}
|
|
3660
|
+
);
|
|
3661
|
+
}
|
|
3662
|
+
function showAdsToast(intent, title, options) {
|
|
3663
|
+
const { action, description, icon, ...toastOptions } = options ?? {};
|
|
3664
|
+
return import_sonner.toast.custom(
|
|
3665
|
+
(id) => /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
|
|
3666
|
+
AdsToast,
|
|
3667
|
+
{
|
|
3668
|
+
action: action ? {
|
|
3669
|
+
...action,
|
|
3670
|
+
onClick: (event) => {
|
|
3671
|
+
action.onClick?.(event);
|
|
3672
|
+
import_sonner.toast.dismiss(id);
|
|
3673
|
+
}
|
|
3674
|
+
} : void 0,
|
|
3675
|
+
description,
|
|
3676
|
+
icon,
|
|
3677
|
+
intent,
|
|
3678
|
+
title
|
|
3679
|
+
}
|
|
3680
|
+
),
|
|
3681
|
+
{
|
|
3682
|
+
...toastOptions,
|
|
3683
|
+
unstyled: true
|
|
3684
|
+
}
|
|
3685
|
+
);
|
|
3686
|
+
}
|
|
3687
|
+
function resolvePromiseStage(stage, value) {
|
|
3688
|
+
return typeof stage === "function" ? stage(value) : stage;
|
|
3689
|
+
}
|
|
3690
|
+
var AdsToastManager = Object.assign(
|
|
3691
|
+
(title, options) => showAdsToast("default", title, options),
|
|
3692
|
+
{
|
|
3693
|
+
success: (title, options) => showAdsToast("success", title, options),
|
|
3694
|
+
info: (title, options) => showAdsToast("info", title, options),
|
|
3695
|
+
warning: (title, options) => showAdsToast("warning", title, options),
|
|
3696
|
+
error: (title, options) => showAdsToast("error", title, options),
|
|
3697
|
+
loading: (title, options) => showAdsToast("loading", title, options),
|
|
3698
|
+
dismiss: (id) => import_sonner.toast.dismiss(id),
|
|
3699
|
+
promise: (promise, options) => {
|
|
3700
|
+
const { error, loading, success, ...toastOptions } = options;
|
|
3701
|
+
return import_sonner.toast.promise(promise, {
|
|
3702
|
+
...toastOptions,
|
|
3703
|
+
unstyled: true,
|
|
3704
|
+
loading: toStageNode("loading", loading.title, loading),
|
|
3705
|
+
success: (value) => {
|
|
3706
|
+
const stage = resolvePromiseStage(success, value);
|
|
3707
|
+
return toStageNode("success", stage.title, stage);
|
|
3708
|
+
},
|
|
3709
|
+
error: (reason) => {
|
|
3710
|
+
const stage = resolvePromiseStage(error, reason);
|
|
3711
|
+
return toStageNode("error", stage.title, stage);
|
|
3712
|
+
}
|
|
3713
|
+
});
|
|
3714
|
+
}
|
|
3715
|
+
}
|
|
3716
|
+
);
|
|
3717
|
+
|
|
3718
|
+
// src/components/AdsDialog/index.tsx
|
|
3719
|
+
var React50 = __toESM(require("react"), 1);
|
|
3720
|
+
var DialogPrimitive = __toESM(require("@radix-ui/react-dialog"), 1);
|
|
3721
|
+
var import_lucide_react12 = require("lucide-react");
|
|
3722
|
+
var import_jsx_runtime54 = require("react/jsx-runtime");
|
|
3723
|
+
var overlayClassName2 = "fixed inset-0 z-50 bg-black/80 backdrop-blur-[2px] data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0";
|
|
3724
|
+
var contentClassName2 = "fixed left-1/2 top-1/2 z-50 grid w-[calc(100%-2rem)] max-w-[423px] -translate-x-1/2 -translate-y-1/2 gap-lg rounded-radius-md border border-border bg-card p-xl text-foreground shadow-[0px_4px_6px_-4px_rgba(0,0,0,0.1),0px_10px_15px_-3px_rgba(0,0,0,0.1)] duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]";
|
|
3725
|
+
var closeButtonClassName = "absolute right-xl top-xl inline-flex h-6 w-6 items-center justify-center rounded-sm text-foreground/80 transition-opacity hover:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-card disabled:pointer-events-none";
|
|
3726
|
+
var Dialog = DialogPrimitive.Root;
|
|
3727
|
+
var DialogTrigger = DialogPrimitive.Trigger;
|
|
3728
|
+
var DialogPortal = DialogPrimitive.Portal;
|
|
3729
|
+
var DialogOverlay = React50.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
3730
|
+
DialogPrimitive.Overlay,
|
|
3731
|
+
{
|
|
3732
|
+
className: cn(overlayClassName2, className),
|
|
3733
|
+
ref,
|
|
3734
|
+
...props
|
|
3735
|
+
}
|
|
3736
|
+
));
|
|
3737
|
+
DialogOverlay.displayName = "DialogOverlay";
|
|
3738
|
+
var DialogClose = React50.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
3739
|
+
DialogPrimitive.Close,
|
|
3740
|
+
{
|
|
3741
|
+
className: cn(
|
|
3742
|
+
"inline-flex items-center justify-center rounded-radius-md focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-card disabled:pointer-events-none",
|
|
3743
|
+
className
|
|
3744
|
+
),
|
|
3745
|
+
ref,
|
|
3746
|
+
...props
|
|
3747
|
+
}
|
|
3748
|
+
));
|
|
3749
|
+
DialogClose.displayName = "DialogClose";
|
|
3750
|
+
var DialogContent = React50.forwardRef(({ children, className, closeLabel, hideCloseButton = false, ...props }, ref) => {
|
|
3751
|
+
const { messages } = useAdsI18n();
|
|
3752
|
+
const resolvedCloseLabel = closeLabel ?? messages.dialog.close;
|
|
3753
|
+
return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(DialogPortal, { children: [
|
|
3754
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(DialogOverlay, {}),
|
|
3755
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
|
|
3756
|
+
DialogPrimitive.Content,
|
|
3757
|
+
{
|
|
3758
|
+
className: cn(contentClassName2, className),
|
|
3759
|
+
ref,
|
|
3760
|
+
...props,
|
|
3761
|
+
children: [
|
|
3762
|
+
children,
|
|
3763
|
+
!hideCloseButton ? /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
|
|
3764
|
+
DialogPrimitive.Close,
|
|
3765
|
+
{
|
|
3766
|
+
"aria-label": resolvedCloseLabel,
|
|
3767
|
+
className: closeButtonClassName,
|
|
3768
|
+
children: [
|
|
3769
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_lucide_react12.X, { "aria-hidden": true, className: "h-4 w-4" }),
|
|
3770
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "sr-only", children: resolvedCloseLabel })
|
|
3771
|
+
]
|
|
3772
|
+
}
|
|
3773
|
+
) : null
|
|
3774
|
+
]
|
|
3775
|
+
}
|
|
3776
|
+
)
|
|
3777
|
+
] });
|
|
3778
|
+
});
|
|
3779
|
+
DialogContent.displayName = "DialogContent";
|
|
3780
|
+
var DialogHeader = React50.forwardRef(
|
|
3781
|
+
({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
3782
|
+
"div",
|
|
3783
|
+
{
|
|
3784
|
+
className: cn("flex flex-col gap-sm pr-8 text-left", className),
|
|
3785
|
+
ref,
|
|
3786
|
+
...props
|
|
3787
|
+
}
|
|
3788
|
+
)
|
|
3789
|
+
);
|
|
3790
|
+
DialogHeader.displayName = "DialogHeader";
|
|
3791
|
+
var DialogFooter = React50.forwardRef(
|
|
3792
|
+
({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
3793
|
+
"div",
|
|
3794
|
+
{
|
|
3795
|
+
className: cn(
|
|
3796
|
+
"flex flex-col-reverse gap-sm sm:flex-row sm:justify-end",
|
|
3797
|
+
className
|
|
3798
|
+
),
|
|
3799
|
+
ref,
|
|
3800
|
+
...props
|
|
3801
|
+
}
|
|
3802
|
+
)
|
|
3803
|
+
);
|
|
3804
|
+
DialogFooter.displayName = "DialogFooter";
|
|
3805
|
+
var DialogTitle = React50.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
3806
|
+
DialogPrimitive.Title,
|
|
3807
|
+
{
|
|
3808
|
+
className: cn("text-lg font-semibold leading-7 text-foreground", className),
|
|
3809
|
+
ref,
|
|
3810
|
+
...props
|
|
3811
|
+
}
|
|
3812
|
+
));
|
|
3813
|
+
DialogTitle.displayName = "DialogTitle";
|
|
3814
|
+
var DialogDescription = React50.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
3815
|
+
DialogPrimitive.Description,
|
|
3816
|
+
{
|
|
3817
|
+
className: cn("text-sm leading-5 text-muted-foreground", className),
|
|
3818
|
+
ref,
|
|
3819
|
+
...props
|
|
3820
|
+
}
|
|
3821
|
+
));
|
|
3822
|
+
DialogDescription.displayName = "DialogDescription";
|
|
3823
|
+
var AdsDialog = Dialog;
|
|
3824
|
+
var AdsDialogTrigger = DialogTrigger;
|
|
3825
|
+
var AdsDialogPortal = DialogPortal;
|
|
3826
|
+
var AdsDialogOverlay = DialogOverlay;
|
|
3827
|
+
var AdsDialogClose = DialogClose;
|
|
3828
|
+
var AdsDialogContent = DialogContent;
|
|
3829
|
+
var AdsDialogHeader = DialogHeader;
|
|
3830
|
+
var AdsDialogFooter = DialogFooter;
|
|
3831
|
+
var AdsDialogTitle = DialogTitle;
|
|
3832
|
+
var AdsDialogDescription = DialogDescription;
|
|
3833
|
+
|
|
3834
|
+
// src/components/AdsEmpty/index.tsx
|
|
3835
|
+
var import_class_variance_authority9 = require("class-variance-authority");
|
|
3836
|
+
var import_jsx_runtime55 = require("react/jsx-runtime");
|
|
3837
|
+
var adsEmptyVariants = (0, import_class_variance_authority9.cva)(
|
|
3838
|
+
"flex w-full flex-col items-center justify-center gap-6 p-12 text-center",
|
|
3839
|
+
{
|
|
3840
|
+
variants: {
|
|
3841
|
+
variant: {
|
|
3842
|
+
default: "bg-transparent",
|
|
3843
|
+
outline: "rounded-radius-lg border border-dashed border-border",
|
|
3844
|
+
background: "rounded-radius-lg bg-popover"
|
|
3845
|
+
}
|
|
3846
|
+
},
|
|
3847
|
+
defaultVariants: {
|
|
3848
|
+
variant: "default"
|
|
3849
|
+
}
|
|
3850
|
+
}
|
|
3851
|
+
);
|
|
3852
|
+
function AdsEmpty({ className, variant, ...props }) {
|
|
3853
|
+
return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
|
|
3854
|
+
"div",
|
|
3855
|
+
{
|
|
3856
|
+
"data-slot": "ads-empty",
|
|
3857
|
+
className: cn(adsEmptyVariants({ variant }), className),
|
|
3858
|
+
...props
|
|
3859
|
+
}
|
|
3860
|
+
);
|
|
3861
|
+
}
|
|
3862
|
+
function AdsEmptyHeader({ className, ...props }) {
|
|
3863
|
+
return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
|
|
3864
|
+
"div",
|
|
3865
|
+
{
|
|
3866
|
+
"data-slot": "ads-empty-header",
|
|
3867
|
+
className: cn("flex w-full max-w-[384px] flex-col items-center gap-2", className),
|
|
3868
|
+
...props
|
|
3869
|
+
}
|
|
3870
|
+
);
|
|
3871
|
+
}
|
|
3872
|
+
function AdsEmptyMedia({ className, ...props }) {
|
|
3873
|
+
return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
|
|
3874
|
+
"div",
|
|
3875
|
+
{
|
|
3876
|
+
"data-slot": "ads-empty-media",
|
|
3877
|
+
"data-testid": "ads-empty-media",
|
|
3878
|
+
className: cn(
|
|
3879
|
+
"flex size-10 items-center justify-center rounded-radius-lg bg-muted text-muted-foreground [&_svg]:size-6 [&_svg]:shrink-0",
|
|
3880
|
+
className
|
|
3881
|
+
),
|
|
3882
|
+
...props
|
|
3883
|
+
}
|
|
3884
|
+
);
|
|
3885
|
+
}
|
|
3886
|
+
function AdsEmptyTitle({ className, ...props }) {
|
|
3887
|
+
return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
|
|
3888
|
+
"div",
|
|
3889
|
+
{
|
|
3890
|
+
"data-slot": "ads-empty-title",
|
|
3891
|
+
className: cn("text-lg font-medium leading-7 text-foreground", className),
|
|
3892
|
+
...props
|
|
3893
|
+
}
|
|
3894
|
+
);
|
|
3895
|
+
}
|
|
3896
|
+
function AdsEmptyDescription({ className, ...props }) {
|
|
3897
|
+
return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
|
|
3898
|
+
"p",
|
|
3899
|
+
{
|
|
3900
|
+
"data-slot": "ads-empty-description",
|
|
3901
|
+
className: cn("max-w-[384px] text-sm leading-5 text-muted-foreground text-center", className),
|
|
3902
|
+
...props
|
|
3903
|
+
}
|
|
3904
|
+
);
|
|
3905
|
+
}
|
|
3906
|
+
function AdsEmptyContent({ className, ...props }) {
|
|
3907
|
+
return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
|
|
3908
|
+
"div",
|
|
3909
|
+
{
|
|
3910
|
+
"data-slot": "ads-empty-content",
|
|
3911
|
+
className: cn("flex w-full max-w-[384px] flex-col items-center gap-4", className),
|
|
3912
|
+
...props
|
|
3913
|
+
}
|
|
3914
|
+
);
|
|
3915
|
+
}
|
|
3916
|
+
function AdsEmptyActions({ className, ...props }) {
|
|
3917
|
+
return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
|
|
3918
|
+
"div",
|
|
3919
|
+
{
|
|
3920
|
+
"data-slot": "ads-empty-actions",
|
|
3921
|
+
className: cn("flex flex-wrap items-center justify-center gap-3", className),
|
|
3922
|
+
...props
|
|
3923
|
+
}
|
|
3924
|
+
);
|
|
3925
|
+
}
|
|
3926
|
+
function AdsEmptyFooter({ className, ...props }) {
|
|
3927
|
+
return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
|
|
3928
|
+
"div",
|
|
3929
|
+
{
|
|
3930
|
+
"data-slot": "ads-empty-footer",
|
|
3931
|
+
className: cn("text-sm font-medium leading-5 text-muted-foreground", className),
|
|
3932
|
+
...props
|
|
3933
|
+
}
|
|
3934
|
+
);
|
|
3935
|
+
}
|
|
3936
|
+
|
|
3937
|
+
// src/components/AdsTable/index.tsx
|
|
3938
|
+
var React52 = __toESM(require("react"), 1);
|
|
3939
|
+
|
|
3940
|
+
// src/primitives/table.tsx
|
|
3941
|
+
var React51 = __toESM(require("react"), 1);
|
|
3942
|
+
var import_jsx_runtime56 = require("react/jsx-runtime");
|
|
3943
|
+
var Table = React51.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "relative w-full overflow-auto", children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
3944
|
+
"table",
|
|
3945
|
+
{
|
|
3946
|
+
ref,
|
|
3947
|
+
className: cn("w-full caption-bottom text-sm", className),
|
|
3948
|
+
...props
|
|
3949
|
+
}
|
|
3950
|
+
) }));
|
|
3951
|
+
Table.displayName = "Table";
|
|
3952
|
+
var TableHeader = React51.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("thead", { ref, className: cn("[&_tr]:border-b", className), ...props }));
|
|
3953
|
+
TableHeader.displayName = "TableHeader";
|
|
3954
|
+
var TableBody = React51.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
3955
|
+
"tbody",
|
|
3956
|
+
{
|
|
3957
|
+
ref,
|
|
3958
|
+
className: cn("[&_tr:last-child]:border-0", className),
|
|
3959
|
+
...props
|
|
3960
|
+
}
|
|
3961
|
+
));
|
|
3962
|
+
TableBody.displayName = "TableBody";
|
|
3963
|
+
var TableFooter = React51.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
3964
|
+
"tfoot",
|
|
3965
|
+
{
|
|
3966
|
+
ref,
|
|
3967
|
+
className: cn(
|
|
3968
|
+
"border-t bg-muted/50 font-medium [&>tr]:last:border-b-0",
|
|
3969
|
+
className
|
|
3970
|
+
),
|
|
3971
|
+
...props
|
|
3972
|
+
}
|
|
3973
|
+
));
|
|
3974
|
+
TableFooter.displayName = "TableFooter";
|
|
3975
|
+
var TableRow = React51.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
3976
|
+
"tr",
|
|
3977
|
+
{
|
|
3978
|
+
ref,
|
|
3979
|
+
className: cn(
|
|
3980
|
+
"border-b transition-colors hover:bg-muted/50 data-[state=selected]:bg-muted",
|
|
3981
|
+
className
|
|
3982
|
+
),
|
|
3983
|
+
...props
|
|
3984
|
+
}
|
|
3985
|
+
));
|
|
3986
|
+
TableRow.displayName = "TableRow";
|
|
3987
|
+
var TableHead = React51.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
3988
|
+
"th",
|
|
3989
|
+
{
|
|
3990
|
+
ref,
|
|
3991
|
+
className: cn(
|
|
3992
|
+
"h-12 px-4 text-left align-middle font-medium text-muted-foreground [&:has([role=checkbox])]:pr-0",
|
|
3993
|
+
className
|
|
3994
|
+
),
|
|
3995
|
+
...props
|
|
3996
|
+
}
|
|
3997
|
+
));
|
|
3998
|
+
TableHead.displayName = "TableHead";
|
|
3999
|
+
var TableCell = React51.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
4000
|
+
"td",
|
|
4001
|
+
{
|
|
4002
|
+
ref,
|
|
4003
|
+
className: cn("p-4 align-middle [&:has([role=checkbox])]:pr-0", className),
|
|
4004
|
+
...props
|
|
4005
|
+
}
|
|
4006
|
+
));
|
|
4007
|
+
TableCell.displayName = "TableCell";
|
|
4008
|
+
var TableCaption = React51.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
4009
|
+
"caption",
|
|
4010
|
+
{
|
|
4011
|
+
ref,
|
|
4012
|
+
className: cn("mt-4 text-sm text-muted-foreground", className),
|
|
4013
|
+
...props
|
|
4014
|
+
}
|
|
4015
|
+
));
|
|
4016
|
+
TableCaption.displayName = "TableCaption";
|
|
4017
|
+
|
|
4018
|
+
// src/components/AdsTable/index.tsx
|
|
4019
|
+
var import_jsx_runtime57 = require("react/jsx-runtime");
|
|
4020
|
+
var AdsTable = React52.forwardRef(
|
|
4021
|
+
({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "w-full overflow-hidden rounded-radius-md border border-border bg-card", children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
4022
|
+
Table,
|
|
4023
|
+
{
|
|
4024
|
+
ref,
|
|
4025
|
+
className: cn("w-full caption-bottom text-sm text-foreground", className),
|
|
4026
|
+
...props
|
|
4027
|
+
}
|
|
4028
|
+
) })
|
|
4029
|
+
);
|
|
4030
|
+
AdsTable.displayName = "AdsTable";
|
|
4031
|
+
var AdsTableHeader = React52.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
4032
|
+
TableHeader,
|
|
4033
|
+
{
|
|
4034
|
+
ref,
|
|
4035
|
+
className: cn("[&_tr]:border-border", className),
|
|
4036
|
+
...props
|
|
4037
|
+
}
|
|
4038
|
+
));
|
|
4039
|
+
AdsTableHeader.displayName = "AdsTableHeader";
|
|
4040
|
+
var AdsTableBody = React52.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
4041
|
+
TableBody,
|
|
4042
|
+
{
|
|
4043
|
+
ref,
|
|
4044
|
+
className: cn("[&_tr:last-child]:border-0", className),
|
|
4045
|
+
...props
|
|
4046
|
+
}
|
|
4047
|
+
));
|
|
4048
|
+
AdsTableBody.displayName = "AdsTableBody";
|
|
4049
|
+
var AdsTableFooter = React52.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
4050
|
+
TableFooter,
|
|
4051
|
+
{
|
|
4052
|
+
ref,
|
|
4053
|
+
className: cn("border-border bg-card text-foreground", className),
|
|
4054
|
+
...props
|
|
4055
|
+
}
|
|
4056
|
+
));
|
|
4057
|
+
AdsTableFooter.displayName = "AdsTableFooter";
|
|
4058
|
+
var AdsTableRow = React52.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
4059
|
+
TableRow,
|
|
4060
|
+
{
|
|
4061
|
+
ref,
|
|
4062
|
+
className: cn(
|
|
4063
|
+
"border-border hover:bg-transparent data-[state=selected]:bg-accent/30",
|
|
4064
|
+
className
|
|
4065
|
+
),
|
|
4066
|
+
...props
|
|
4067
|
+
}
|
|
4068
|
+
));
|
|
4069
|
+
AdsTableRow.displayName = "AdsTableRow";
|
|
4070
|
+
var AdsTableHead = React52.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
4071
|
+
TableHead,
|
|
4072
|
+
{
|
|
4073
|
+
ref,
|
|
4074
|
+
className: cn(
|
|
4075
|
+
"h-10 px-2 align-middle text-sm font-medium leading-5 text-foreground [&:has([role=checkbox])]:pr-0",
|
|
4076
|
+
className
|
|
4077
|
+
),
|
|
4078
|
+
...props
|
|
4079
|
+
}
|
|
4080
|
+
));
|
|
4081
|
+
AdsTableHead.displayName = "AdsTableHead";
|
|
4082
|
+
var AdsTableCell = React52.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
4083
|
+
TableCell,
|
|
4084
|
+
{
|
|
4085
|
+
ref,
|
|
4086
|
+
className: cn(
|
|
4087
|
+
"p-2 align-middle text-sm font-normal leading-5 text-foreground [&:has([role=checkbox])]:pr-0",
|
|
4088
|
+
className
|
|
4089
|
+
),
|
|
4090
|
+
...props
|
|
4091
|
+
}
|
|
4092
|
+
));
|
|
4093
|
+
AdsTableCell.displayName = "AdsTableCell";
|
|
4094
|
+
var AdsTableCaption = React52.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
4095
|
+
TableCaption,
|
|
4096
|
+
{
|
|
4097
|
+
ref,
|
|
4098
|
+
className: cn("text-sm leading-5 text-muted-foreground", className),
|
|
4099
|
+
...props
|
|
4100
|
+
}
|
|
4101
|
+
));
|
|
4102
|
+
AdsTableCaption.displayName = "AdsTableCaption";
|
|
4103
|
+
|
|
4104
|
+
// src/tokens/designTokens.ts
|
|
4105
|
+
var designTokens = {
|
|
4106
|
+
background: "#151619",
|
|
4107
|
+
foreground: "#fdfdfd",
|
|
4108
|
+
card: "#1b1c21",
|
|
4109
|
+
cardForeground: "#fdfdfd",
|
|
4110
|
+
popover: "#2a2b2f",
|
|
4111
|
+
popoverForeground: "#fdfdfd",
|
|
4112
|
+
primary: "#844fff",
|
|
4113
|
+
primaryForeground: "#fdfdfd",
|
|
4114
|
+
secondary: "#3f4043",
|
|
4115
|
+
secondaryForeground: "#fdfdfd",
|
|
4116
|
+
muted: "#3f4043",
|
|
4117
|
+
mutedForeground: "#7e7f81",
|
|
4118
|
+
accent: "#3f4043",
|
|
4119
|
+
accentForeground: "#fdfdfd",
|
|
4120
|
+
destructive: "#dc2626",
|
|
4121
|
+
destructiveForeground: "#ff9b9b",
|
|
4122
|
+
border: "#545558",
|
|
4123
|
+
input: "#151619",
|
|
4124
|
+
ring: "#a984ff",
|
|
4125
|
+
brandSecondary: "#af41ff",
|
|
4126
|
+
brandSecondaryForeground: "#151619",
|
|
4127
|
+
brandGradientFrom: "#6859ff",
|
|
4128
|
+
brandGradientTo: "#af41ff",
|
|
4129
|
+
success: "#008e61",
|
|
4130
|
+
successForeground: "#fdfdfd",
|
|
4131
|
+
warning: "#cd6c00",
|
|
4132
|
+
warningForeground: "#fdfdfd",
|
|
4133
|
+
info: "#844fff",
|
|
4134
|
+
infoForeground: "#fdfdfd",
|
|
4135
|
+
borderMuted: "#3f4043",
|
|
4136
|
+
active: "#422880",
|
|
4137
|
+
activeForeground: "#fdfdfd",
|
|
4138
|
+
labelForeground: "#a8a9aa",
|
|
4139
|
+
icon: "#939496",
|
|
4140
|
+
iconMuted: "#545558",
|
|
4141
|
+
spacing: {
|
|
4142
|
+
xs: "0.25rem",
|
|
4143
|
+
sm: "0.5rem",
|
|
4144
|
+
md: "0.75rem",
|
|
4145
|
+
lg: "1rem",
|
|
4146
|
+
xl: "1.5rem",
|
|
4147
|
+
"2xl": "2rem"
|
|
4148
|
+
},
|
|
4149
|
+
radius: {
|
|
4150
|
+
sm: "0.25rem",
|
|
4151
|
+
md: "0.375rem",
|
|
4152
|
+
lg: "0.5rem",
|
|
4153
|
+
xl: "0.75rem",
|
|
4154
|
+
full: "9999px"
|
|
4155
|
+
},
|
|
4156
|
+
size: {
|
|
4157
|
+
controlHeight: "2.5rem",
|
|
4158
|
+
modalWidth: "42rem",
|
|
4159
|
+
sidebarWidth: "17.5rem"
|
|
4160
|
+
},
|
|
4161
|
+
zIndex: {
|
|
4162
|
+
toolbar: 30,
|
|
4163
|
+
overlay: 40,
|
|
4164
|
+
modal: 50,
|
|
4165
|
+
toast: 60
|
|
4166
|
+
}
|
|
4167
|
+
};
|
|
4168
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
4169
|
+
0 && (module.exports = {
|
|
4170
|
+
AdsAccordion,
|
|
4171
|
+
AdsAlert,
|
|
4172
|
+
AdsAlertDescription,
|
|
4173
|
+
AdsAlertDialog,
|
|
4174
|
+
AdsAlertDialogAction,
|
|
4175
|
+
AdsAlertDialogCancel,
|
|
4176
|
+
AdsAlertDialogContent,
|
|
4177
|
+
AdsAlertDialogDescription,
|
|
4178
|
+
AdsAlertDialogFooter,
|
|
4179
|
+
AdsAlertDialogHeader,
|
|
4180
|
+
AdsAlertDialogOverlay,
|
|
4181
|
+
AdsAlertDialogPortal,
|
|
4182
|
+
AdsAlertDialogTitle,
|
|
4183
|
+
AdsAlertDialogTrigger,
|
|
4184
|
+
AdsAlertTitle,
|
|
4185
|
+
AdsBadge,
|
|
4186
|
+
AdsBreadcrumb,
|
|
4187
|
+
AdsBreadcrumbEllipsis,
|
|
4188
|
+
AdsBreadcrumbItem,
|
|
4189
|
+
AdsBreadcrumbLink,
|
|
4190
|
+
AdsBreadcrumbList,
|
|
4191
|
+
AdsBreadcrumbPage,
|
|
4192
|
+
AdsBreadcrumbSeparator,
|
|
4193
|
+
AdsButton,
|
|
4194
|
+
AdsButtonGroup,
|
|
4195
|
+
AdsButtonGroupInput,
|
|
4196
|
+
AdsButtonGroupSeparator,
|
|
4197
|
+
AdsButtonGroupText,
|
|
4198
|
+
AdsCheckbox,
|
|
4199
|
+
AdsDialog,
|
|
4200
|
+
AdsDialogClose,
|
|
4201
|
+
AdsDialogContent,
|
|
4202
|
+
AdsDialogDescription,
|
|
4203
|
+
AdsDialogFooter,
|
|
4204
|
+
AdsDialogHeader,
|
|
4205
|
+
AdsDialogOverlay,
|
|
4206
|
+
AdsDialogPortal,
|
|
4207
|
+
AdsDialogTitle,
|
|
4208
|
+
AdsDialogTrigger,
|
|
4209
|
+
AdsEmpty,
|
|
4210
|
+
AdsEmptyActions,
|
|
4211
|
+
AdsEmptyContent,
|
|
4212
|
+
AdsEmptyDescription,
|
|
4213
|
+
AdsEmptyFooter,
|
|
4214
|
+
AdsEmptyHeader,
|
|
4215
|
+
AdsEmptyMedia,
|
|
4216
|
+
AdsEmptyTitle,
|
|
4217
|
+
AdsField,
|
|
4218
|
+
AdsFieldActions,
|
|
4219
|
+
AdsFieldCheckboxRow,
|
|
4220
|
+
AdsFieldChoiceCard,
|
|
4221
|
+
AdsFieldDescription,
|
|
4222
|
+
AdsFieldError,
|
|
4223
|
+
AdsFieldGroup,
|
|
4224
|
+
AdsFieldHeader,
|
|
4225
|
+
AdsFieldItem,
|
|
4226
|
+
AdsFieldLabel,
|
|
4227
|
+
AdsFieldLegend,
|
|
4228
|
+
AdsFieldSeparator,
|
|
4229
|
+
AdsFieldSet,
|
|
4230
|
+
AdsI18nProvider,
|
|
4231
|
+
AdsInput,
|
|
4232
|
+
AdsInputGroup,
|
|
4233
|
+
AdsInputGroupInput,
|
|
4234
|
+
AdsInputGroupTextarea,
|
|
4235
|
+
AdsInputOTP,
|
|
4236
|
+
AdsInputOTPGroup,
|
|
4237
|
+
AdsInputOTPSeparator,
|
|
4238
|
+
AdsInputOTPSlot,
|
|
4239
|
+
AdsPagination,
|
|
4240
|
+
AdsPaginationContent,
|
|
4241
|
+
AdsPaginationEllipsis,
|
|
4242
|
+
AdsPaginationItem,
|
|
4243
|
+
AdsPaginationLink,
|
|
4244
|
+
AdsPaginationNext,
|
|
4245
|
+
AdsPaginationPrevious,
|
|
4246
|
+
AdsPopover,
|
|
4247
|
+
AdsPopoverBody,
|
|
4248
|
+
AdsPopoverContent,
|
|
4249
|
+
AdsPopoverDescription,
|
|
4250
|
+
AdsPopoverHeader,
|
|
4251
|
+
AdsPopoverTitle,
|
|
4252
|
+
AdsPopoverTrigger,
|
|
4253
|
+
AdsProgress,
|
|
4254
|
+
AdsRadioGroup,
|
|
4255
|
+
AdsRadioGroupCardOption,
|
|
4256
|
+
AdsRadioGroupOption,
|
|
4257
|
+
AdsSelect,
|
|
4258
|
+
AdsSelectContent,
|
|
4259
|
+
AdsSelectGroup,
|
|
4260
|
+
AdsSelectItem,
|
|
4261
|
+
AdsSelectLabel,
|
|
4262
|
+
AdsSelectRoot,
|
|
4263
|
+
AdsSelectScrollDownButton,
|
|
4264
|
+
AdsSelectScrollUpButton,
|
|
4265
|
+
AdsSelectSeparator,
|
|
4266
|
+
AdsSelectTrigger,
|
|
4267
|
+
AdsSelectValue,
|
|
4268
|
+
AdsSeparator,
|
|
4269
|
+
AdsSkeleton,
|
|
4270
|
+
AdsSlider,
|
|
4271
|
+
AdsSwitch,
|
|
4272
|
+
AdsTable,
|
|
4273
|
+
AdsTableBody,
|
|
4274
|
+
AdsTableCaption,
|
|
4275
|
+
AdsTableCell,
|
|
4276
|
+
AdsTableFooter,
|
|
4277
|
+
AdsTableHead,
|
|
4278
|
+
AdsTableHeader,
|
|
4279
|
+
AdsTableRow,
|
|
4280
|
+
AdsTabs,
|
|
4281
|
+
AdsTabsContent,
|
|
4282
|
+
AdsTabsList,
|
|
4283
|
+
AdsTabsTrigger,
|
|
4284
|
+
AdsTextarea,
|
|
4285
|
+
AdsToast,
|
|
4286
|
+
AdsToastManager,
|
|
4287
|
+
AdsToaster,
|
|
4288
|
+
AdsToggle,
|
|
4289
|
+
AdsToggleGroup,
|
|
4290
|
+
AdsToggleGroupItem,
|
|
4291
|
+
AdsTooltip,
|
|
4292
|
+
AdsTooltipArrow,
|
|
4293
|
+
AdsTooltipContent,
|
|
4294
|
+
AdsTooltipProvider,
|
|
4295
|
+
AdsTooltipTrigger,
|
|
4296
|
+
adsDefaultMessages,
|
|
4297
|
+
designTokens,
|
|
4298
|
+
useAdsI18n
|
|
4299
|
+
});
|
|
4300
|
+
//# sourceMappingURL=index.cjs.map
|