@getgreenline/blaze-ui 1.0.3 → 1.0.4-5.02-beta
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/dist/components/accordion.d.ts +8 -0
- package/dist/components/accordion.d.ts.map +1 -0
- package/dist/components/accordion.js +19 -0
- package/dist/components/alert-dialog.d.ts +18 -0
- package/dist/components/alert-dialog.d.ts.map +1 -0
- package/dist/components/alert-dialog.js +41 -0
- package/dist/components/alert.d.ts +10 -0
- package/dist/components/alert.d.ts.map +1 -0
- package/dist/components/alert.js +26 -0
- package/dist/components/aspect-ratio.d.ts +4 -0
- package/dist/components/aspect-ratio.d.ts.map +1 -0
- package/dist/components/aspect-ratio.js +8 -0
- package/dist/components/avatar.d.ts +7 -0
- package/dist/components/avatar.d.ts.map +1 -0
- package/dist/components/avatar.js +15 -0
- package/dist/components/badge.d.ts +10 -0
- package/dist/components/badge.d.ts.map +1 -0
- package/dist/components/badge.js +24 -0
- package/dist/components/breadcrumb.d.ts +12 -0
- package/dist/components/breadcrumb.d.ts.map +1 -0
- package/dist/components/breadcrumb.js +29 -0
- package/dist/components/button-group.d.ts +12 -0
- package/dist/components/button-group.d.ts.map +1 -0
- package/dist/components/button-group.js +29 -0
- package/dist/components/button.d.ts +16 -0
- package/dist/components/button.d.ts.map +1 -0
- package/dist/components/button.js +37 -0
- package/dist/components/card.d.ts +10 -0
- package/dist/components/card.d.ts.map +1 -0
- package/dist/components/card.js +26 -0
- package/dist/components/carousel.d.ts +20 -0
- package/dist/components/carousel.d.ts.map +1 -0
- package/dist/components/carousel.js +92 -0
- package/dist/components/chart.d.ts +63 -0
- package/dist/components/chart.d.ts.map +1 -0
- package/dist/components/chart.js +133 -0
- package/dist/components/checkbox.d.ts +5 -0
- package/dist/components/checkbox.d.ts.map +1 -0
- package/dist/components/checkbox.js +10 -0
- package/dist/components/collapsible.d.ts +6 -0
- package/dist/components/collapsible.d.ts.map +1 -0
- package/dist/components/collapsible.js +15 -0
- package/dist/components/command.d.ts +19 -0
- package/dist/components/command.d.ts.map +1 -0
- package/dist/components/command.js +35 -0
- package/dist/components/context-menu.d.ts +26 -0
- package/dist/components/context-menu.d.ts.map +1 -0
- package/dist/components/context-menu.js +52 -0
- package/dist/components/data-table.d.ts +85 -0
- package/dist/components/data-table.d.ts.map +1 -0
- package/dist/components/data-table.js +390 -0
- package/dist/components/dialog.d.ts +16 -0
- package/dist/components/dialog.d.ts.map +1 -0
- package/dist/components/dialog.js +37 -0
- package/dist/components/drawer.d.ts +14 -0
- package/dist/components/drawer.d.ts.map +1 -0
- package/dist/components/drawer.js +36 -0
- package/dist/components/dropdown-menu.d.ts +26 -0
- package/dist/components/dropdown-menu.d.ts.map +1 -0
- package/dist/components/dropdown-menu.js +52 -0
- package/dist/components/empty.d.ts +12 -0
- package/dist/components/empty.d.ts.map +1 -0
- package/dist/components/empty.js +35 -0
- package/dist/components/field.d.ts +25 -0
- package/dist/components/field.d.ts.map +1 -0
- package/dist/components/field.js +74 -0
- package/dist/components/form.d.ts +25 -0
- package/dist/components/form.d.ts.map +1 -0
- package/dist/components/form.js +60 -0
- package/dist/components/header-app-switcher.d.ts +53 -0
- package/dist/components/header-app-switcher.d.ts.map +1 -0
- package/dist/components/header-app-switcher.js +154 -0
- package/dist/components/hierarchical-select.d.ts +31 -0
- package/dist/components/hierarchical-select.d.ts.map +1 -0
- package/dist/components/hierarchical-select.js +143 -0
- package/dist/components/hover-card.d.ts +7 -0
- package/dist/components/hover-card.d.ts.map +1 -0
- package/dist/components/hover-card.js +15 -0
- package/dist/components/input-group.d.ts +17 -0
- package/dist/components/input-group.d.ts.map +1 -0
- package/dist/components/input-group.js +66 -0
- package/dist/components/input-otp.d.ts +12 -0
- package/dist/components/input-otp.d.ts.map +1 -0
- package/dist/components/input-otp.js +22 -0
- package/dist/components/input.d.ts +8 -0
- package/dist/components/input.d.ts.map +1 -0
- package/dist/components/input.js +15 -0
- package/dist/components/item.d.ts +24 -0
- package/dist/components/item.d.ts.map +1 -0
- package/dist/components/item.js +68 -0
- package/dist/components/kbd.d.ts +4 -0
- package/dist/components/kbd.d.ts.map +1 -0
- package/dist/components/kbd.js +11 -0
- package/dist/components/label.d.ts +8 -0
- package/dist/components/label.d.ts.map +1 -0
- package/dist/components/label.js +9 -0
- package/dist/components/login-screen.d.ts +4 -0
- package/dist/components/login-screen.d.ts.map +1 -0
- package/dist/components/login-screen.js +300 -0
- package/dist/components/login-screen.types.d.ts +82 -0
- package/dist/components/login-screen.types.d.ts.map +1 -0
- package/dist/components/login-screen.views.d.ts +114 -0
- package/dist/components/login-screen.views.d.ts.map +1 -0
- package/dist/components/login-screen.views.js +53 -0
- package/dist/components/menubar.d.ts +27 -0
- package/dist/components/menubar.d.ts.map +1 -0
- package/dist/components/menubar.js +55 -0
- package/dist/components/multi-search-select.d.ts +24 -0
- package/dist/components/multi-search-select.d.ts.map +1 -0
- package/dist/components/multi-search-select.js +125 -0
- package/dist/components/multi-select.d.ts +19 -0
- package/dist/components/multi-select.d.ts.map +1 -0
- package/dist/components/multi-select.js +87 -0
- package/dist/components/navigation-menu.d.ts +15 -0
- package/dist/components/navigation-menu.d.ts.map +1 -0
- package/dist/components/navigation-menu.js +33 -0
- package/dist/components/page-header/actions.d.ts +9 -0
- package/dist/components/page-header/actions.d.ts.map +1 -0
- package/dist/components/page-header/actions.js +21 -0
- package/dist/components/page-header/types.d.ts +33 -0
- package/dist/components/page-header/types.d.ts.map +1 -0
- package/dist/components/page-header/utils.d.ts +4 -0
- package/dist/components/page-header/utils.d.ts.map +1 -0
- package/dist/components/page-header/utils.js +17 -0
- package/dist/components/page-header.d.ts +4 -0
- package/dist/components/page-header.d.ts.map +1 -0
- package/dist/components/page-header.js +12 -0
- package/dist/components/pagination.d.ts +14 -0
- package/dist/components/pagination.d.ts.map +1 -0
- package/dist/components/pagination.js +31 -0
- package/dist/components/popover.d.ts +8 -0
- package/dist/components/popover.d.ts.map +1 -0
- package/dist/components/popover.js +18 -0
- package/dist/components/progress.d.ts +5 -0
- package/dist/components/progress.d.ts.map +1 -0
- package/dist/components/progress.js +9 -0
- package/dist/components/radio-group.d.ts +6 -0
- package/dist/components/radio-group.d.ts.map +1 -0
- package/dist/components/radio-group.js +13 -0
- package/dist/components/resizable.d.ts +9 -0
- package/dist/components/resizable.d.ts.map +1 -0
- package/dist/components/resizable.js +16 -0
- package/dist/components/scroll-area.d.ts +6 -0
- package/dist/components/scroll-area.d.ts.map +1 -0
- package/dist/components/scroll-area.js +14 -0
- package/dist/components/search-bar.d.ts +15 -0
- package/dist/components/search-bar.d.ts.map +1 -0
- package/dist/components/search-bar.js +25 -0
- package/dist/components/segmented-control.d.ts +24 -0
- package/dist/components/segmented-control.d.ts.map +1 -0
- package/dist/components/segmented-control.js +88 -0
- package/dist/components/select.d.ts +16 -0
- package/dist/components/select.d.ts.map +1 -0
- package/dist/components/select.js +39 -0
- package/dist/components/selection-panel.d.ts +29 -0
- package/dist/components/selection-panel.d.ts.map +1 -0
- package/dist/components/selection-panel.js +255 -0
- package/dist/components/separator.d.ts +5 -0
- package/dist/components/separator.d.ts.map +1 -0
- package/dist/components/separator.js +11 -0
- package/dist/components/sheet.d.ts +17 -0
- package/dist/components/sheet.d.ts.map +1 -0
- package/dist/components/sheet.js +42 -0
- package/dist/components/sidebar.d.ts +70 -0
- package/dist/components/sidebar.d.ts.map +1 -0
- package/dist/components/sidebar.js +213 -0
- package/dist/components/skeleton.d.ts +3 -0
- package/dist/components/skeleton.d.ts.map +1 -0
- package/dist/components/skeleton.js +8 -0
- package/dist/components/slider.d.ts +5 -0
- package/dist/components/slider.d.ts.map +1 -0
- package/dist/components/slider.js +19 -0
- package/dist/components/sonner.d.ts +4 -0
- package/dist/components/sonner.d.ts.map +1 -0
- package/dist/components/sonner.js +22 -0
- package/dist/components/spinner.d.ts +4 -0
- package/dist/components/spinner.d.ts.map +1 -0
- package/dist/components/spinner.js +9 -0
- package/dist/components/switch.d.ts +5 -0
- package/dist/components/switch.d.ts.map +1 -0
- package/dist/components/switch.js +9 -0
- package/dist/components/table.d.ts +11 -0
- package/dist/components/table.d.ts.map +1 -0
- package/dist/components/table.js +29 -0
- package/dist/components/tabs.d.ts +8 -0
- package/dist/components/tabs.d.ts.map +1 -0
- package/dist/components/tabs.js +18 -0
- package/dist/components/textarea.d.ts +8 -0
- package/dist/components/textarea.d.ts.map +1 -0
- package/dist/components/textarea.js +15 -0
- package/dist/components/toggle-group.d.ts +8 -0
- package/dist/components/toggle-group.d.ts.map +1 -0
- package/dist/components/toggle-group.js +22 -0
- package/dist/components/toggle.d.ts +10 -0
- package/dist/components/toggle.d.ts.map +1 -0
- package/dist/components/toggle.js +27 -0
- package/dist/components/tooltip.d.ts +8 -0
- package/dist/components/tooltip.d.ts.map +1 -0
- package/dist/components/tooltip.js +18 -0
- package/dist/components/visually-hidden.d.ts +16 -0
- package/dist/components/visually-hidden.d.ts.map +1 -0
- package/dist/components/visually-hidden.js +22 -0
- package/dist/globals.css +719 -0
- package/dist/hooks/use-invalid-attention.d.ts +20 -0
- package/dist/hooks/use-invalid-attention.d.ts.map +1 -0
- package/dist/hooks/use-invalid-attention.js +65 -0
- package/dist/hooks/use-mobile.d.ts +2 -0
- package/dist/hooks/use-mobile.d.ts.map +1 -0
- package/dist/hooks/use-mobile.js +18 -0
- package/dist/index.d.ts +68 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +68 -0
- package/dist/lib/portal-wrapper.d.ts +32 -0
- package/dist/lib/portal-wrapper.d.ts.map +1 -0
- package/dist/lib/portal-wrapper.js +34 -0
- package/dist/lib/utils.js +8 -0
- package/dist/svgs/blaze-dispatch-logo.d.ts +5 -0
- package/dist/svgs/blaze-dispatch-logo.d.ts.map +1 -0
- package/dist/svgs/blaze-ecom-logo.d.ts +7 -0
- package/dist/svgs/blaze-ecom-logo.d.ts.map +1 -0
- package/dist/svgs/blaze-insights-logo.d.ts +5 -0
- package/dist/svgs/blaze-insights-logo.d.ts.map +1 -0
- package/dist/svgs/blaze-lighthouse-logo.d.ts +6 -0
- package/dist/svgs/blaze-lighthouse-logo.d.ts.map +1 -0
- package/dist/svgs/blaze-pay-logo.d.ts +5 -0
- package/dist/svgs/blaze-pay-logo.d.ts.map +1 -0
- package/dist/svgs/blaze-pos-logo.d.ts +5 -0
- package/dist/svgs/blaze-pos-logo.d.ts.map +1 -0
- package/dist/svgs/blaze-retail-logo.d.ts +7 -0
- package/dist/svgs/blaze-retail-logo.d.ts.map +1 -0
- package/dist/svgs/blaze-sites-logo.d.ts +5 -0
- package/dist/svgs/blaze-sites-logo.d.ts.map +1 -0
- package/dist/svgs/header-app-switcher-logos.d.ts +15 -0
- package/dist/svgs/header-app-switcher-logos.d.ts.map +1 -0
- package/dist/svgs/header-app-switcher-logos.js +22 -0
- package/package.json +95 -31
- package/README.md +0 -80
- package/build/components/button.d.ts +0 -12
- package/build/components/button.d.ts.map +0 -1
- package/build/components/button.js +0 -106
- package/build/components/button.js.map +0 -1
- package/build/index.d.ts +0 -4
- package/build/index.d.ts.map +0 -1
- package/build/index.js +0 -11
- package/build/index.js.map +0 -1
- package/build/index.mjs +0 -6
- package/build/lib/utils.js +0 -9
- package/build/lib/utils.js.map +0 -1
- package/build/styles/blaze-ui.css +0 -97
- package/build/styles/blaze-ui.css.map +0 -1
- package/build/styles/styles.d.ts +0 -3
- package/build/styles/styles.d.ts.map +0 -1
- package/build/styles/styles.js +0 -8
- package/build/styles/styles.js.map +0 -1
- package/src/styles/blaze-ui.css +0 -157
- package/src/styles/styles.ts +0 -5
- /package/{build → dist}/lib/utils.d.ts +0 -0
- /package/{build → dist}/lib/utils.d.ts.map +0 -0
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import * as PopoverPrimitive from '@radix-ui/react-popover';
|
|
4
|
+
import { XIcon, ChevronDownIcon, SearchIcon, FolderTreeIcon, CheckIcon } from 'lucide-react';
|
|
5
|
+
import { cn } from '../lib/utils.js';
|
|
6
|
+
|
|
7
|
+
function buildHierarchy(items) {
|
|
8
|
+
const parents = items.filter((item) => !item.parentId);
|
|
9
|
+
const childrenMap = new Map();
|
|
10
|
+
for (const item of items) {
|
|
11
|
+
if (item.parentId) {
|
|
12
|
+
const existing = childrenMap.get(item.parentId) ?? [];
|
|
13
|
+
existing.push(item);
|
|
14
|
+
childrenMap.set(item.parentId, existing);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
return parents.map((parent) => ({
|
|
18
|
+
parent,
|
|
19
|
+
children: childrenMap.get(parent.id) ?? [],
|
|
20
|
+
}));
|
|
21
|
+
}
|
|
22
|
+
function filterHierarchy(groups, search) {
|
|
23
|
+
if (!search)
|
|
24
|
+
return groups;
|
|
25
|
+
const query = search.toLowerCase();
|
|
26
|
+
return groups.reduce((acc, group) => {
|
|
27
|
+
const parentMatches = group.parent.label.toLowerCase().includes(query);
|
|
28
|
+
if (parentMatches) {
|
|
29
|
+
acc.push(group);
|
|
30
|
+
return acc;
|
|
31
|
+
}
|
|
32
|
+
const matchingChildren = group.children.filter((child) => child.label.toLowerCase().includes(query));
|
|
33
|
+
if (matchingChildren.length > 0) {
|
|
34
|
+
acc.push({ parent: group.parent, children: matchingChildren });
|
|
35
|
+
}
|
|
36
|
+
return acc;
|
|
37
|
+
}, []);
|
|
38
|
+
}
|
|
39
|
+
function getDisplayValue(items, value) {
|
|
40
|
+
if (!value)
|
|
41
|
+
return undefined;
|
|
42
|
+
const selected = items.find((item) => item.id === value);
|
|
43
|
+
if (!selected)
|
|
44
|
+
return undefined;
|
|
45
|
+
if (selected.parentId) {
|
|
46
|
+
const parent = items.find((item) => item.id === selected.parentId);
|
|
47
|
+
return parent ? `${parent.label} > ${selected.label}` : selected.label;
|
|
48
|
+
}
|
|
49
|
+
return selected.label;
|
|
50
|
+
}
|
|
51
|
+
function getDisplayValueMulti(items, values) {
|
|
52
|
+
if (values.length === 0)
|
|
53
|
+
return undefined;
|
|
54
|
+
if (values.length === 1)
|
|
55
|
+
return getDisplayValue(items, values[0]);
|
|
56
|
+
return `${values.length} categories selected`;
|
|
57
|
+
}
|
|
58
|
+
function countVisibleCategories(groups) {
|
|
59
|
+
return groups.reduce((count, group) => count + 1 + group.children.length, 0);
|
|
60
|
+
}
|
|
61
|
+
function HierarchicalSelect(props) {
|
|
62
|
+
const { items, placeholder = "Select an option...", searchPlaceholder = "Search...", emptyMessage = "No results found", className, triggerStyle, disabled = false, label, } = props;
|
|
63
|
+
const isMulti = props.multi === true;
|
|
64
|
+
const multiValues = React.useMemo(() => (isMulti ? (props.value ?? []) : []), [isMulti, props.value]);
|
|
65
|
+
const singleValue = !isMulti ? props.value : undefined;
|
|
66
|
+
const [open, setOpen] = React.useState(false);
|
|
67
|
+
const [search, setSearch] = React.useState("");
|
|
68
|
+
const searchInputRef = React.useRef(null);
|
|
69
|
+
const [portalContainer, setPortalContainer] = React.useState(null);
|
|
70
|
+
const listboxId = React.useId();
|
|
71
|
+
const searchId = React.useId();
|
|
72
|
+
React.useEffect(() => {
|
|
73
|
+
const el = document.createElement("div");
|
|
74
|
+
el.className = "blaze-ui-root";
|
|
75
|
+
document.body.appendChild(el);
|
|
76
|
+
setPortalContainer(el);
|
|
77
|
+
return () => {
|
|
78
|
+
document.body.removeChild(el);
|
|
79
|
+
};
|
|
80
|
+
}, []);
|
|
81
|
+
const hierarchy = React.useMemo(() => buildHierarchy(items), [items]);
|
|
82
|
+
const filtered = React.useMemo(() => filterHierarchy(hierarchy, search), [hierarchy, search]);
|
|
83
|
+
const displayValue = React.useMemo(() => {
|
|
84
|
+
if (isMulti)
|
|
85
|
+
return getDisplayValueMulti(items, multiValues);
|
|
86
|
+
return getDisplayValue(items, singleValue);
|
|
87
|
+
}, [isMulti, items, multiValues, singleValue]);
|
|
88
|
+
const hasSelection = isMulti ? multiValues.length > 0 : !!singleValue;
|
|
89
|
+
const visibleCount = React.useMemo(() => countVisibleCategories(filtered), [filtered]);
|
|
90
|
+
const handleOpenChange = React.useCallback((nextOpen) => {
|
|
91
|
+
setOpen(nextOpen);
|
|
92
|
+
if (!nextOpen) {
|
|
93
|
+
setSearch("");
|
|
94
|
+
}
|
|
95
|
+
}, []);
|
|
96
|
+
const selectedIds = React.useMemo(() => {
|
|
97
|
+
if (isMulti)
|
|
98
|
+
return new Set(multiValues);
|
|
99
|
+
return new Set(singleValue ? [singleValue] : []);
|
|
100
|
+
}, [isMulti, multiValues, singleValue]);
|
|
101
|
+
const isSelected = React.useCallback((id) => selectedIds.has(id), [selectedIds]);
|
|
102
|
+
const handleSelect = React.useCallback((id) => {
|
|
103
|
+
if (isMulti) {
|
|
104
|
+
const next = selectedIds.has(id)
|
|
105
|
+
? multiValues.filter((v) => v !== id)
|
|
106
|
+
: [...multiValues, id];
|
|
107
|
+
props.onValueChange?.(next);
|
|
108
|
+
// keep popover open in multi mode
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
props.onValueChange?.(id);
|
|
112
|
+
setOpen(false);
|
|
113
|
+
setSearch("");
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
117
|
+
[isMulti, selectedIds, multiValues, props.onValueChange]);
|
|
118
|
+
const handleClear = React.useCallback((e) => {
|
|
119
|
+
e.stopPropagation();
|
|
120
|
+
props.onValueChange?.([]);
|
|
121
|
+
},
|
|
122
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
123
|
+
[props.onValueChange]);
|
|
124
|
+
React.useEffect(() => {
|
|
125
|
+
if (open) {
|
|
126
|
+
const frame = requestAnimationFrame(() => {
|
|
127
|
+
searchInputRef.current?.focus();
|
|
128
|
+
});
|
|
129
|
+
return () => cancelAnimationFrame(frame);
|
|
130
|
+
}
|
|
131
|
+
}, [open]);
|
|
132
|
+
return (jsxs(PopoverPrimitive.Root, { open: open, onOpenChange: handleOpenChange, children: [jsx(PopoverPrimitive.Trigger, { asChild: true, children: jsxs("div", { "data-slot": "hierarchical-select-trigger", role: "combobox", tabIndex: disabled ? -1 : 0, "aria-label": label ?? placeholder, "aria-disabled": disabled || undefined, onKeyDown: (e) => {
|
|
133
|
+
if (!disabled && (e.key === "Enter" || e.key === " ")) {
|
|
134
|
+
e.preventDefault();
|
|
135
|
+
e.currentTarget.click();
|
|
136
|
+
}
|
|
137
|
+
}, className: cn("tw:!flex tw:!w-full tw:!items-center tw:!justify-between tw:!gap-2 tw:!rounded-md tw:!border tw:!border-input tw:!bg-transparent tw:px-3 tw:py-2 tw:!text-[length:var(--hs-font-size,14px)] tw:!whitespace-nowrap tw:!shadow-xs tw:!transition-[color,box-shadow] tw:!outline-none tw:h-9 tw:!cursor-default", "focus-visible:tw:!border-ring focus-visible:tw:!ring-ring/50 focus-visible:tw:!ring-[3px]", disabled &&
|
|
138
|
+
"tw:!cursor-not-allowed tw:!opacity-50 tw:!pointer-events-none", "dark:tw:!bg-input/30 dark:hover:tw:!bg-input/50", !displayValue && "tw:!text-muted-foreground", className), style: triggerStyle, children: [jsx("span", { "data-slot": "hierarchical-select-value", className: "tw:!truncate tw:!flex-1 tw:!text-left", children: displayValue ?? placeholder }), isMulti && hasSelection && (jsx("button", { type: "button", "data-slot": "hierarchical-select-clear", "aria-label": "Clear selection", onClick: handleClear, className: "tw:!shrink-0 tw:!flex tw:!items-center tw:!justify-center tw:!size-4 tw:!rounded-sm tw:!text-muted-foreground hover:tw:!text-foreground tw:!transition-colors tw:!pointer-events-auto", children: jsx(XIcon, { className: "tw:!size-3" }) })), jsx(ChevronDownIcon, { "data-slot": "hierarchical-select-chevron", "aria-hidden": true, className: cn("tw:!size-4 tw:!shrink-0 tw:!opacity-50 tw:!transition-transform tw:!duration-200", open && "tw:!rotate-180") })] }) }), jsx(PopoverPrimitive.Portal, { container: portalContainer, children: jsxs(PopoverPrimitive.Content, { "data-slot": "hierarchical-select-content", align: "start", sideOffset: 4, className: cn("tw:!bg-popover tw:!text-popover-foreground tw:!z-[9999] tw:!w-[var(--radix-popover-trigger-width)] tw:!origin-(--radix-popover-content-transform-origin) tw:!rounded-md tw:!border tw:!shadow-md tw:!outline-hidden", "data-[state=open]:tw:!animate-in data-[state=closed]:tw:!animate-out data-[state=closed]:tw:!fade-out-0 data-[state=open]:tw:!fade-in-0 data-[state=closed]:tw:!zoom-out-95 data-[state=open]:tw:!zoom-in-95", "data-[side=bottom]:tw:!slide-in-from-top-2 data-[side=left]:tw:!slide-in-from-right-2 data-[side=right]:tw:!slide-in-from-left-2 data-[side=top]:tw:!slide-in-from-bottom-2"), children: [jsxs("div", { "data-slot": "hierarchical-select-search", className: "tw:!flex tw:!items-center tw:!gap-2 tw:!border-b tw:!px-3 tw:!sticky tw:!top-0 tw:!bg-popover tw:!z-10", children: [jsx(SearchIcon, { className: "tw:!size-4 tw:!shrink-0 tw:!text-muted-foreground" }), jsx("input", { ref: searchInputRef, id: searchId, "data-slot": "hierarchical-select-search-input", type: "text", role: "searchbox", "aria-label": searchPlaceholder, "aria-autocomplete": "list", value: search, onChange: (e) => setSearch(e.target.value), placeholder: searchPlaceholder, className: "tw:!flex tw:!h-9 tw:!w-full tw:!bg-transparent tw:!py-2 tw:!text-[14px] tw:!outline-none placeholder:tw:!text-muted-foreground" })] }), jsx("div", { id: listboxId, "data-slot": "hierarchical-select-list", role: "listbox", "aria-multiselectable": isMulti, "aria-label": label ?? placeholder, className: "tw:!max-h-[320px] tw:!overflow-y-auto tw:!overflow-x-hidden tw:!p-1", children: filtered.length === 0 ? (jsxs("div", { "data-slot": "hierarchical-select-empty", role: "status", "aria-live": "polite", className: "tw:!flex tw:!flex-col tw:!items-center tw:!justify-center tw:!gap-2 tw:!py-8 tw:!text-center", children: [jsx("div", { className: "tw:!flex tw:!size-10 tw:!items-center tw:!justify-center tw:!rounded-full tw:!bg-muted", children: jsx(SearchIcon, { "aria-hidden": true, className: "tw:!size-4 tw:!text-muted-foreground" }) }), jsx("div", { className: "tw:!text-[14px] tw:!font-medium", children: emptyMessage }), jsx("p", { className: "tw:!text-[12px] tw:!text-muted-foreground", children: "Try adjusting your search query" })] })) : (filtered.map((group) => (jsxs("div", { "data-slot": "hierarchical-select-group", role: "group", "aria-label": group.parent.label, className: "tw:!mb-1", children: [jsxs("button", { type: "button", "data-slot": "hierarchical-select-parent", role: "option", "aria-selected": isSelected(group.parent.id), onClick: () => handleSelect(group.parent.id), className: cn("tw:!relative tw:!flex tw:!w-full tw:!cursor-default tw:!items-center tw:!gap-2 tw:!rounded-sm tw:!px-2 tw:!py-1.5 tw:!text-[14px] tw:!font-semibold tw:!outline-hidden tw:!select-none tw:!transition-colors", "hover:tw:!bg-accent hover:tw:!text-accent-foreground", isSelected(group.parent.id) &&
|
|
139
|
+
"tw:!bg-accent tw:!text-accent-foreground"), children: [jsx(FolderTreeIcon, { "aria-hidden": true, className: "tw:!size-4 tw:!shrink-0 tw:!text-muted-foreground" }), jsx("span", { className: "tw:!flex-1 tw:!text-left tw:!truncate", children: group.parent.label }), group.children.length > 0 && (jsx("span", { "data-slot": "hierarchical-select-badge", className: "tw:!inline-flex tw:!items-center tw:!justify-center tw:!rounded-full tw:!bg-muted tw:!px-1.5 tw:!py-0.5 tw:!text-[10px] tw:!font-medium tw:!text-muted-foreground tw:!leading-none", children: group.children.length })), isSelected(group.parent.id) && (jsx(CheckIcon, { "aria-hidden": true, className: "tw:!size-4 tw:!shrink-0" }))] }), group.children.length > 0 && (jsx("div", { "data-slot": "hierarchical-select-children", role: "group", "aria-label": `${group.parent.label} subcategories`, className: "tw:!ml-4 tw:!border-l tw:!border-border tw:!pl-2", children: group.children.map((child) => (jsxs("button", { type: "button", "data-slot": "hierarchical-select-child", role: "option", "aria-selected": isSelected(child.id), onClick: () => handleSelect(child.id), className: cn("tw:!relative tw:!flex tw:!w-full tw:!cursor-default tw:!items-center tw:!gap-2 tw:!rounded-sm tw:!px-2 tw:!py-1.5 tw:!text-[14px] tw:!outline-hidden tw:!select-none tw:!transition-colors", "hover:tw:!bg-accent hover:tw:!text-accent-foreground", "tw:!text-muted-foreground", isSelected(child.id) &&
|
|
140
|
+
"tw:!bg-accent tw:!text-accent-foreground"), children: [jsx("span", { "aria-hidden": true, className: "tw:!size-1.5 tw:!rounded-full tw:!bg-muted-foreground/50 tw:!shrink-0" }), jsx("span", { className: "tw:!flex-1 tw:!text-left tw:!truncate", children: child.label }), isSelected(child.id) && (jsx(CheckIcon, { "aria-hidden": true, className: "tw:!size-4 tw:!shrink-0" }))] }, child.id))) }))] }, group.parent.id)))) }), jsx("div", { "data-slot": "hierarchical-select-footer", "aria-live": "polite", "aria-atomic": "true", className: "tw:!border-t tw:!px-3 tw:!py-2 tw:!text-[12px] tw:!text-muted-foreground", children: search ? (jsxs("span", { children: [visibleCount, " result", visibleCount !== 1 ? "s" : "", " for \u201C", search, "\u201D"] })) : (jsxs("span", { children: [visibleCount, " categor", visibleCount !== 1 ? "ies" : "y"] })) })] }) })] }));
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
export { HierarchicalSelect };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import * as HoverCardPrimitive from "@radix-ui/react-hover-card";
|
|
3
|
+
declare function HoverCard({ ...props }: React.ComponentProps<typeof HoverCardPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
declare function HoverCardTrigger({ ...props }: React.ComponentProps<typeof HoverCardPrimitive.Trigger>): import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
declare function HoverCardContent({ className, align, sideOffset, ...props }: React.ComponentProps<typeof HoverCardPrimitive.Content>): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
export { HoverCard, HoverCardTrigger, HoverCardContent };
|
|
7
|
+
//# sourceMappingURL=hover-card.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hover-card.d.ts","sourceRoot":"","sources":["../../src/components/hover-card.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,kBAAkB,MAAM,4BAA4B,CAAA;AAIhE,iBAAS,SAAS,CAAC,EACjB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,IAAI,CAAC,2CAEtD;AAED,iBAAS,gBAAgB,CAAC,EACxB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,OAAO,CAAC,2CAIzD;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,KAAgB,EAChB,UAAc,EACd,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,kBAAkB,CAAC,OAAO,CAAC,2CAezD;AAED,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import * as HoverCardPrimitive from '@radix-ui/react-hover-card';
|
|
3
|
+
import { cn } from '../lib/utils.js';
|
|
4
|
+
|
|
5
|
+
function HoverCard({ ...props }) {
|
|
6
|
+
return jsx(HoverCardPrimitive.Root, { "data-slot": "hover-card", ...props });
|
|
7
|
+
}
|
|
8
|
+
function HoverCardTrigger({ ...props }) {
|
|
9
|
+
return (jsx(HoverCardPrimitive.Trigger, { "data-slot": "hover-card-trigger", ...props }));
|
|
10
|
+
}
|
|
11
|
+
function HoverCardContent({ className, align = "center", sideOffset = 4, ...props }) {
|
|
12
|
+
return (jsx(HoverCardPrimitive.Portal, { "data-slot": "hover-card-portal", children: jsx(HoverCardPrimitive.Content, { "data-slot": "hover-card-content", align: align, sideOffset: sideOffset, className: cn("tw:bg-popover tw:text-popover-foreground tw:data-[state=open]:animate-in tw:data-[state=closed]:animate-out tw:data-[state=closed]:fade-out-0 tw:data-[state=open]:fade-in-0 tw:data-[state=closed]:zoom-out-95 tw:data-[state=open]:zoom-in-95 tw:data-[side=bottom]:slide-in-from-top-2 tw:data-[side=left]:slide-in-from-right-2 tw:data-[side=right]:slide-in-from-left-2 tw:data-[side=top]:slide-in-from-bottom-2 tw:z-50 tw:w-64 tw:origin-(--radix-hover-card-content-transform-origin) tw:rounded-md tw:border tw:p-4 tw:shadow-md tw:outline-hidden", className), ...props }) }));
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export { HoverCard, HoverCardContent, HoverCardTrigger };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { type VariantProps } from "class-variance-authority";
|
|
3
|
+
import { Button } from "../components/button";
|
|
4
|
+
declare function InputGroup({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
declare const inputGroupAddonVariants: (props?: ({
|
|
6
|
+
align?: "inline-end" | "inline-start" | "block-end" | "block-start" | null | undefined;
|
|
7
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
8
|
+
declare function InputGroupAddon({ className, align, ...props }: React.ComponentProps<"div"> & VariantProps<typeof inputGroupAddonVariants>): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
declare const inputGroupButtonVariants: (props?: ({
|
|
10
|
+
size?: "sm" | "xs" | "icon-xs" | "icon-sm" | null | undefined;
|
|
11
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
12
|
+
declare function InputGroupButton({ className, type, variant, size, ...props }: Omit<React.ComponentProps<typeof Button>, "size"> & VariantProps<typeof inputGroupButtonVariants>): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
declare function InputGroupText({ className, ...props }: React.ComponentProps<"span">): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
declare function InputGroupInput({ className, ...props }: React.ComponentProps<"input">): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
declare function InputGroupTextarea({ className, ...props }: React.ComponentProps<"textarea">): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export { InputGroup, InputGroupAddon, InputGroupButton, InputGroupText, InputGroupInput, InputGroupTextarea, };
|
|
17
|
+
//# sourceMappingURL=input-group.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-group.d.ts","sourceRoot":"","sources":["../../src/components/input-group.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAGjE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAI7C,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CA8BvE;AAED,QAAA,MAAM,uBAAuB;;8EAmB5B,CAAA;AAED,iBAAS,eAAe,CAAC,EACvB,SAAS,EACT,KAAsB,EACtB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,OAAO,uBAAuB,CAAC,2CAgB5E;AAED,QAAA,MAAM,wBAAwB;;8EAgB7B,CAAA;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,IAAe,EACf,OAAiB,EACjB,IAAW,EACX,GAAG,KAAK,EACT,EAAE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,EAAE,MAAM,CAAC,GAClD,YAAY,CAAC,OAAO,wBAAwB,CAAC,2CAU9C;AAED,iBAAS,cAAc,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,2CAU5E;AAED,iBAAS,eAAe,CAAC,EACvB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,2CAW/B;AAED,iBAAS,kBAAkB,CAAC,EAC1B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,2CAWlC;AAED,OAAO,EACL,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,eAAe,EACf,kBAAkB,GACnB,CAAA"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { cva } from 'class-variance-authority';
|
|
3
|
+
import { cn } from '../lib/utils.js';
|
|
4
|
+
import { Button } from './button.js';
|
|
5
|
+
import { Input } from './input.js';
|
|
6
|
+
import { Textarea } from './textarea.js';
|
|
7
|
+
|
|
8
|
+
function InputGroup({ className, ...props }) {
|
|
9
|
+
return (jsx("div", { "data-slot": "input-group", role: "group", className: cn("group/input-group tw:border-input tw:dark:bg-input/30 tw:relative tw:flex tw:w-full tw:items-center tw:rounded-md tw:border tw:shadow-xs tw:transition-[color,box-shadow] tw:outline-none", "tw:h-9 tw:min-w-0 tw:has-[>textarea]:h-auto",
|
|
10
|
+
// Variants based on alignment.
|
|
11
|
+
"tw:has-[>[data-align=inline-start]]:[&>input]:pl-2", "tw:has-[>[data-align=inline-end]]:[&>input]:pr-2", "tw:has-[>[data-align=block-start]]:h-auto tw:has-[>[data-align=block-start]]:flex-col tw:has-[>[data-align=block-start]]:[&>input]:pb-3", "tw:has-[>[data-align=block-end]]:h-auto tw:has-[>[data-align=block-end]]:flex-col tw:has-[>[data-align=block-end]]:[&>input]:pt-3",
|
|
12
|
+
// Focus state.
|
|
13
|
+
"tw:focus-within:border-ring tw:focus-within:ring-ring/50 tw:focus-within:ring-[3px]",
|
|
14
|
+
// Error state.
|
|
15
|
+
"tw:has-[[data-slot][aria-invalid=true]]:ring-destructive/20 tw:has-[[data-slot][aria-invalid=true]]:border-destructive tw:dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40",
|
|
16
|
+
// Disabled state.
|
|
17
|
+
"tw:has-[[data-slot=input-group-control]:disabled]:cursor-not-allowed tw:has-[[data-slot=input-group-control]:disabled]:opacity-50", "tw:[&:has([data-slot=input-group-control]:disabled)_[data-slot=input-group-addon]]:cursor-not-allowed tw:[&:has([data-slot=input-group-control]:disabled)_[data-slot=input-group-addon]]:opacity-50", className), ...props }));
|
|
18
|
+
}
|
|
19
|
+
const inputGroupAddonVariants = cva("tw:text-muted-foreground tw:flex tw:h-auto tw:cursor-text tw:items-center tw:justify-center tw:gap-2 tw:py-1.5 tw:text-sm tw:font-medium tw:select-none tw:[&>svg:not([class*='size-'])]:size-4 tw:[&>kbd]:rounded-[calc(var(--radius)-5px)] tw:group-data-[disabled=true]/input-group:opacity-50 tw:group-has-[[data-slot=input-group-control]:disabled]/input-group:cursor-not-allowed tw:group-has-[[data-slot=input-group-control]:disabled]/input-group:opacity-50", {
|
|
20
|
+
variants: {
|
|
21
|
+
align: {
|
|
22
|
+
"inline-start": "tw:order-first tw:pl-3 tw:has-[>button]:ml-[-0.45rem] tw:has-[>kbd]:ml-[-0.35rem]",
|
|
23
|
+
"inline-end": "tw:order-last tw:pr-3 tw:has-[>button]:mr-[-0.45rem] tw:has-[>kbd]:mr-[-0.35rem]",
|
|
24
|
+
"block-start": "tw:order-first tw:w-full tw:justify-start tw:px-3 tw:pt-3 tw:[&[class~='tw:border-b']]:pb-3 tw:group-has-[>input]/input-group:pt-2.5",
|
|
25
|
+
"block-end": "tw:order-last tw:w-full tw:justify-start tw:px-3 tw:pb-3 tw:[&[class~='tw:border-t']]:pt-3 tw:group-has-[>input]/input-group:pb-2.5",
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
defaultVariants: {
|
|
29
|
+
align: "inline-start",
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
function InputGroupAddon({ className, align = "inline-start", ...props }) {
|
|
33
|
+
return (jsx("div", { role: "group", "data-slot": "input-group-addon", "data-align": align, className: cn(inputGroupAddonVariants({ align }), className), onClick: (e) => {
|
|
34
|
+
if (e.target.closest("button")) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
e.currentTarget.parentElement?.querySelector("input")?.focus();
|
|
38
|
+
}, ...props }));
|
|
39
|
+
}
|
|
40
|
+
const inputGroupButtonVariants = cva("tw:text-sm tw:shadow-none tw:flex tw:gap-2 tw:items-center", {
|
|
41
|
+
variants: {
|
|
42
|
+
size: {
|
|
43
|
+
xs: "tw:h-6 tw:gap-1 tw:px-2 tw:rounded-[calc(var(--radius)-5px)] tw:[&>svg:not([class*='size-'])]:size-3.5 tw:has-[>svg]:px-2",
|
|
44
|
+
sm: "tw:h-8 tw:px-2.5 tw:gap-1.5 tw:rounded-md tw:has-[>svg]:px-2.5",
|
|
45
|
+
"icon-xs": "tw:size-6 tw:rounded-[calc(var(--radius)-5px)] tw:p-0 tw:has-[>svg]:p-0",
|
|
46
|
+
"icon-sm": "tw:size-8 tw:p-0 tw:has-[>svg]:p-0",
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
defaultVariants: {
|
|
50
|
+
size: "xs",
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
function InputGroupButton({ className, type = "button", variant = "ghost", size = "xs", ...props }) {
|
|
54
|
+
return (jsx(Button, { type: type, "data-size": size, variant: variant, className: cn(inputGroupButtonVariants({ size }), className), ...props }));
|
|
55
|
+
}
|
|
56
|
+
function InputGroupText({ className, ...props }) {
|
|
57
|
+
return (jsx("span", { className: cn("tw:text-muted-foreground tw:flex tw:items-center tw:gap-2 tw:text-sm tw:[&_svg]:pointer-events-none tw:[&_svg:not([class*='size-'])]:size-4", className), ...props }));
|
|
58
|
+
}
|
|
59
|
+
function InputGroupInput({ className, ...props }) {
|
|
60
|
+
return (jsx(Input, { "data-slot": "input-group-control", className: cn("tw:flex-1 tw:rounded-none tw:border-0 tw:bg-transparent tw:shadow-none tw:focus-visible:ring-0 tw:dark:bg-transparent", className), ...props }));
|
|
61
|
+
}
|
|
62
|
+
function InputGroupTextarea({ className, ...props }) {
|
|
63
|
+
return (jsx(Textarea, { "data-slot": "input-group-control", className: cn("tw:flex-1 tw:resize-none tw:rounded-none tw:border-0 tw:bg-transparent tw:py-3 tw:shadow-none tw:focus-visible:ring-0 tw:dark:bg-transparent", className), ...props }));
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { OTPInput } from "input-otp";
|
|
3
|
+
declare function InputOTP({ className, containerClassName, ...props }: React.ComponentProps<typeof OTPInput> & {
|
|
4
|
+
containerClassName?: string;
|
|
5
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
declare function InputOTPGroup({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
declare function InputOTPSlot({ index, className, ...props }: React.ComponentProps<"div"> & {
|
|
8
|
+
index: number;
|
|
9
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
declare function InputOTPSeparator({ ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
export { InputOTP, InputOTPGroup, InputOTPSlot, InputOTPSeparator };
|
|
12
|
+
//# sourceMappingURL=input-otp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-otp.d.ts","sourceRoot":"","sources":["../../src/components/input-otp.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,QAAQ,EAAqC,MAAM,WAAW,CAAA;AAKvE,iBAAS,QAAQ,CAAC,EAChB,SAAS,EACT,kBAAkB,EAClB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,QAAQ,CAAC,GAAG;IACzC,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B,2CAYA;AAED,iBAAS,aAAa,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAQ1E;AAED,iBAAS,YAAY,CAAC,EACpB,KAAK,EACL,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAA;CACd,2CAsBA;AAED,iBAAS,iBAAiB,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAMnE;AAED,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,YAAY,EAAE,iBAAiB,EAAE,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { OTPInput, OTPInputContext } from 'input-otp';
|
|
4
|
+
import { MinusIcon } from 'lucide-react';
|
|
5
|
+
import { cn } from '../lib/utils.js';
|
|
6
|
+
|
|
7
|
+
function InputOTP({ className, containerClassName, ...props }) {
|
|
8
|
+
return (jsx(OTPInput, { "data-slot": "input-otp", containerClassName: cn("tw:flex tw:items-center tw:gap-2 tw:has-disabled:opacity-50", containerClassName), className: cn("tw:disabled:cursor-not-allowed", className), ...props }));
|
|
9
|
+
}
|
|
10
|
+
function InputOTPGroup({ className, ...props }) {
|
|
11
|
+
return (jsx("div", { "data-slot": "input-otp-group", className: cn("tw:flex tw:items-center", className), ...props }));
|
|
12
|
+
}
|
|
13
|
+
function InputOTPSlot({ index, className, ...props }) {
|
|
14
|
+
const inputOTPContext = React.useContext(OTPInputContext);
|
|
15
|
+
const { char, hasFakeCaret, isActive } = inputOTPContext?.slots[index] ?? {};
|
|
16
|
+
return (jsxs("div", { "data-slot": "input-otp-slot", "data-active": isActive, className: cn("tw:data-[active=true]:border-ring tw:data-[active=true]:ring-ring/50 tw:data-[active=true]:aria-invalid:ring-destructive/20 tw:dark:data-[active=true]:aria-invalid:ring-destructive/40 tw:aria-invalid:border-destructive tw:data-[active=true]:aria-invalid:border-destructive tw:dark:bg-input/30 tw:border-input tw:relative tw:flex tw:h-9 tw:w-9 tw:items-center tw:justify-center tw:border-y tw:border-r tw:text-sm tw:shadow-xs tw:transition-all tw:outline-none tw:first:rounded-l-md tw:first:border-l tw:last:rounded-r-md tw:data-[active=true]:z-10 tw:data-[active=true]:ring-[3px]", className), ...props, children: [char, hasFakeCaret && (jsx("div", { className: "tw:pointer-events-none tw:absolute tw:inset-0 tw:flex tw:items-center tw:justify-center", children: jsx("div", { className: "tw:animate-caret-blink tw:bg-foreground tw:h-4 tw:w-px tw:duration-1000" }) }))] }));
|
|
17
|
+
}
|
|
18
|
+
function InputOTPSeparator({ ...props }) {
|
|
19
|
+
return (jsx("div", { "data-slot": "input-otp-separator", role: "separator", ...props, children: jsx(MinusIcon, {}) }));
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { type AttentionKey } from "../hooks/use-invalid-attention";
|
|
3
|
+
type InputProps = React.ComponentProps<"input"> & {
|
|
4
|
+
attentionKey?: AttentionKey;
|
|
5
|
+
};
|
|
6
|
+
declare function Input({ attentionKey, className, style, type, ...props }: InputProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export { Input };
|
|
8
|
+
//# sourceMappingURL=input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../src/components/input.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,EACL,KAAK,YAAY,EAGlB,MAAM,gCAAgC,CAAA;AAEvC,KAAK,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG;IAChD,YAAY,CAAC,EAAE,YAAY,CAAA;CAC5B,CAAA;AAED,iBAAS,KAAK,CAAC,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,2CAsB5E;AAED,OAAO,EAAE,KAAK,EAAE,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { cn } from '../lib/utils.js';
|
|
3
|
+
import { isAriaInvalid, useInvalidAttention } from '../hooks/use-invalid-attention.js';
|
|
4
|
+
|
|
5
|
+
function Input({ attentionKey, className, style, type, ...props }) {
|
|
6
|
+
const isInvalid = isAriaInvalid(props["aria-invalid"]);
|
|
7
|
+
const { attentionProps } = useInvalidAttention({
|
|
8
|
+
attentionKey,
|
|
9
|
+
invalid: isInvalid,
|
|
10
|
+
style,
|
|
11
|
+
});
|
|
12
|
+
return (jsx("input", { type: type, "data-slot": "input", className: cn("tw:file:text-foreground tw:placeholder:text-input-placeholder tw:selection:bg-primary tw:selection:text-primary-foreground tw:dark:bg-input/30 tw:border-border tw:h-10 tw:w-full tw:min-w-0 tw:rounded-md tw:border tw:bg-transparent tw:px-3 tw:py-1 tw:text-base tw:shadow-xs tw:transition-[color,box-shadow] tw:outline-none tw:file:inline-flex tw:file:h-7 tw:file:border-0 tw:file:bg-transparent tw:file:text-sm tw:file:font-medium tw:disabled:cursor-not-allowed tw:disabled:select-none tw:disabled:bg-input tw:disabled:text-muted-foreground tw:disabled:placeholder:text-muted-foreground tw:disabled:opacity-50 tw:disabled:shadow-none tw:dark:disabled:bg-input/80 tw:md:text-sm", "tw:focus-visible:border-ring tw:focus-visible:ring-ring/50 tw:focus-visible:ring-[3px]", "tw:aria-invalid:ring-destructive/20 tw:dark:aria-invalid:ring-destructive/40 tw:aria-invalid:border-destructive", className), ...attentionProps, ...props }));
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export { Input };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import { type VariantProps } from "class-variance-authority";
|
|
3
|
+
import { Separator } from "../components/separator";
|
|
4
|
+
declare function ItemGroup({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
declare function ItemSeparator({ className, ...props }: React.ComponentProps<typeof Separator>): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
declare const itemVariants: (props?: ({
|
|
7
|
+
variant?: "default" | "outline" | "muted" | null | undefined;
|
|
8
|
+
size?: "default" | "sm" | null | undefined;
|
|
9
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
10
|
+
declare function Item({ className, variant, size, asChild, ...props }: React.ComponentProps<"div"> & VariantProps<typeof itemVariants> & {
|
|
11
|
+
asChild?: boolean;
|
|
12
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
declare const itemMediaVariants: (props?: ({
|
|
14
|
+
variant?: "default" | "icon" | "image" | null | undefined;
|
|
15
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
16
|
+
declare function ItemMedia({ className, variant, ...props }: React.ComponentProps<"div"> & VariantProps<typeof itemMediaVariants>): import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
declare function ItemContent({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
|
|
18
|
+
declare function ItemTitle({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
|
|
19
|
+
declare function ItemDescription({ className, ...props }: React.ComponentProps<"p">): import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
declare function ItemActions({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
declare function ItemHeader({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
|
|
22
|
+
declare function ItemFooter({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
export { Item, ItemMedia, ItemContent, ItemActions, ItemGroup, ItemSeparator, ItemTitle, ItemDescription, ItemHeader, ItemFooter, };
|
|
24
|
+
//# sourceMappingURL=item.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"item.d.ts","sourceRoot":"","sources":["../../src/components/item.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAGjE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAEnD,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAStE;AAED,iBAAS,aAAa,CAAC,EACrB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,SAAS,CAAC,2CASxC;AAED,QAAA,MAAM,YAAY;;;8EAmBjB,CAAA;AAED,iBAAS,IAAI,CAAC,EACZ,SAAS,EACT,OAAmB,EACnB,IAAgB,EAChB,OAAe,EACf,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAC5B,YAAY,CAAC,OAAO,YAAY,CAAC,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,2CAW1D;AAED,QAAA,MAAM,iBAAiB;;8EAetB,CAAA;AAED,iBAAS,SAAS,CAAC,EACjB,SAAS,EACT,OAAmB,EACnB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,OAAO,iBAAiB,CAAC,2CAStE;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAWxE;AAED,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAWtE;AAED,iBAAS,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,2CAY1E;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAQxE;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAWvE;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAWvE;AAED,OAAO,EACL,IAAI,EACJ,SAAS,EACT,WAAW,EACX,WAAW,EACX,SAAS,EACT,aAAa,EACb,SAAS,EACT,eAAe,EACf,UAAU,EACV,UAAU,GACX,CAAA"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { Slot } from '@radix-ui/react-slot';
|
|
3
|
+
import { cva } from 'class-variance-authority';
|
|
4
|
+
import { cn } from '../lib/utils.js';
|
|
5
|
+
import { Separator } from './separator.js';
|
|
6
|
+
|
|
7
|
+
function ItemGroup({ className, ...props }) {
|
|
8
|
+
return (jsx("div", { role: "list", "data-slot": "item-group", className: cn("group/item-group tw:flex tw:flex-col", className), ...props }));
|
|
9
|
+
}
|
|
10
|
+
function ItemSeparator({ className, ...props }) {
|
|
11
|
+
return (jsx(Separator, { "data-slot": "item-separator", orientation: "horizontal", className: cn("tw:my-0", className), ...props }));
|
|
12
|
+
}
|
|
13
|
+
const itemVariants = cva("group/item tw:flex tw:items-center tw:border tw:border-transparent tw:text-sm tw:rounded-md tw:transition-colors [a]:hover:tw:bg-accent/50 [a]:tw:transition-colors tw:duration-100 tw:flex-wrap tw:outline-none focus-visible:tw:border-ring focus-visible:tw:ring-ring/50 focus-visible:tw:ring-[3px]", {
|
|
14
|
+
variants: {
|
|
15
|
+
variant: {
|
|
16
|
+
default: "tw:bg-transparent",
|
|
17
|
+
outline: "tw:border-border",
|
|
18
|
+
muted: "tw:bg-muted/50",
|
|
19
|
+
},
|
|
20
|
+
size: {
|
|
21
|
+
default: "tw:p-4 tw:gap-4 ",
|
|
22
|
+
sm: "tw:py-3 tw:px-4 tw:gap-2.5",
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
defaultVariants: {
|
|
26
|
+
variant: "default",
|
|
27
|
+
size: "default",
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
function Item({ className, variant = "default", size = "default", asChild = false, ...props }) {
|
|
31
|
+
const Comp = asChild ? Slot : "div";
|
|
32
|
+
return (jsx(Comp, { "data-slot": "item", "data-variant": variant, "data-size": size, className: cn(itemVariants({ variant, size, className })), ...props }));
|
|
33
|
+
}
|
|
34
|
+
const itemMediaVariants = cva("tw:flex tw:shrink-0 tw:items-center tw:justify-center tw:gap-2 group-has-[[data-slot=item-description]]/item:tw:self-start [&_svg]:tw:pointer-events-none group-has-[[data-slot=item-description]]/item:tw:translate-y-0.5", {
|
|
35
|
+
variants: {
|
|
36
|
+
variant: {
|
|
37
|
+
default: "tw:bg-transparent",
|
|
38
|
+
icon: "tw:size-8 tw:border tw:rounded-sm tw:bg-muted [&_svg:not([class*='size-'])]:tw:size-4",
|
|
39
|
+
image: "tw:size-10 tw:rounded-sm tw:overflow-hidden [&_img]:tw:size-full [&_img]:tw:object-cover",
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
defaultVariants: {
|
|
43
|
+
variant: "default",
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
function ItemMedia({ className, variant = "default", ...props }) {
|
|
47
|
+
return (jsx("div", { "data-slot": "item-media", "data-variant": variant, className: cn(itemMediaVariants({ variant, className })), ...props }));
|
|
48
|
+
}
|
|
49
|
+
function ItemContent({ className, ...props }) {
|
|
50
|
+
return (jsx("div", { "data-slot": "item-content", className: cn("tw:flex tw:flex-1 tw:flex-col tw:gap-1 [&+[data-slot=item-content]]:tw:flex-none", className), ...props }));
|
|
51
|
+
}
|
|
52
|
+
function ItemTitle({ className, ...props }) {
|
|
53
|
+
return (jsx("div", { "data-slot": "item-title", className: cn("tw:flex tw:w-fit tw:items-center tw:gap-2 tw:text-sm tw:leading-snug tw:font-medium", className), ...props }));
|
|
54
|
+
}
|
|
55
|
+
function ItemDescription({ className, ...props }) {
|
|
56
|
+
return (jsx("p", { "data-slot": "item-description", className: cn("tw:text-muted-foreground tw:line-clamp-2 tw:text-sm tw:leading-normal tw:font-normal tw:text-balance", "[&>a:hover]:tw:text-primary [&>a]:tw:underline [&>a]:tw:underline-offset-4", className), ...props }));
|
|
57
|
+
}
|
|
58
|
+
function ItemActions({ className, ...props }) {
|
|
59
|
+
return (jsx("div", { "data-slot": "item-actions", className: cn("tw:flex tw:items-center tw:gap-2", className), ...props }));
|
|
60
|
+
}
|
|
61
|
+
function ItemHeader({ className, ...props }) {
|
|
62
|
+
return (jsx("div", { "data-slot": "item-header", className: cn("tw:flex tw:basis-full tw:items-center tw:justify-between tw:gap-2", className), ...props }));
|
|
63
|
+
}
|
|
64
|
+
function ItemFooter({ className, ...props }) {
|
|
65
|
+
return (jsx("div", { "data-slot": "item-footer", className: cn("tw:flex tw:basis-full tw:items-center tw:justify-between tw:gap-2", className), ...props }));
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export { Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
declare function Kbd({ className, ...props }: React.ComponentProps<"kbd">): import("react/jsx-runtime").JSX.Element;
|
|
2
|
+
declare function KbdGroup({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
|
|
3
|
+
export { Kbd, KbdGroup };
|
|
4
|
+
//# sourceMappingURL=kbd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kbd.d.ts","sourceRoot":"","sources":["../../src/components/kbd.tsx"],"names":[],"mappings":"AAEA,iBAAS,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAahE;AAED,iBAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAQrE;AAED,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { cn } from '../lib/utils.js';
|
|
3
|
+
|
|
4
|
+
function Kbd({ className, ...props }) {
|
|
5
|
+
return (jsx("kbd", { "data-slot": "kbd", className: cn("tw:bg-muted tw:text-muted-foreground tw:pointer-events-none tw:inline-flex tw:h-5 tw:w-fit tw:min-w-5 tw:items-center tw:justify-center tw:gap-1 tw:rounded-sm tw:px-1 tw:font-sans tw:text-xs tw:font-medium tw:select-none", "tw:[&_svg:not([class*='size-'])]:size-3", "tw:[[data-slot=tooltip-content]_&]:bg-background/20 tw:[[data-slot=tooltip-content]_&]:text-background tw:dark:[[data-slot=tooltip-content]_&]:bg-background/10", className), ...props }));
|
|
6
|
+
}
|
|
7
|
+
function KbdGroup({ className, ...props }) {
|
|
8
|
+
return (jsx("kbd", { "data-slot": "kbd-group", className: cn("tw:inline-flex tw:items-center tw:gap-1", className), ...props }));
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export { Kbd, KbdGroup };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import * as LabelPrimitive from "@radix-ui/react-label";
|
|
3
|
+
interface LabelProps extends React.ComponentProps<typeof LabelPrimitive.Root> {
|
|
4
|
+
isRequired?: boolean;
|
|
5
|
+
}
|
|
6
|
+
declare function Label({ className, isRequired, children, ...props }: LabelProps): import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export { Label };
|
|
8
|
+
//# sourceMappingURL=label.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"label.d.ts","sourceRoot":"","sources":["../../src/components/label.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAA;AAIvD,UAAU,UAAW,SAAQ,KAAK,CAAC,cAAc,CAAC,OAAO,cAAc,CAAC,IAAI,CAAC;IAC3E,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,iBAAS,KAAK,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,2CAmBvE;AAED,OAAO,EAAE,KAAK,EAAE,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import * as LabelPrimitive from '@radix-ui/react-label';
|
|
3
|
+
import { cn } from '../lib/utils.js';
|
|
4
|
+
|
|
5
|
+
function Label({ className, isRequired, children, ...props }) {
|
|
6
|
+
return (jsxs(LabelPrimitive.Root, { "data-slot": "label", className: cn("tw:flex tw:items-center tw:gap-2 tw:text-sm tw:leading-none tw:font-medium tw:select-none tw:group-data-[disabled=true]:pointer-events-none tw:group-data-[disabled=true]:opacity-50 tw:peer-disabled:!cursor-not-allowed tw:peer-disabled:!opacity-50 tw:peer-data-[disabled]:!cursor-not-allowed tw:peer-data-[disabled]:!opacity-50 tw:peer-aria-disabled:!cursor-not-allowed tw:peer-aria-disabled:!opacity-50", className), "aria-required": isRequired, ...props, children: [children, isRequired && (jsx("span", { className: "tw:text-destructive", "aria-hidden": "true", children: "*" }))] }));
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export { Label };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { LoginScreenProps } from "./login-screen.types";
|
|
2
|
+
export type { LoginScreenIdentifierMode, LoginScreenTab, LoginScreenFooterLink, LoginScreenSubmitPayload, LoginScreenTestimonial, LoginScreenProps, } from "./login-screen.types";
|
|
3
|
+
export declare function LoginScreen({ className, splitLayout, splitImageWidthPercent, imageSrc, imageAlt, imageOverlayContent, testimonial, imageOverlayOpacity, logo, title, description, tabs, defaultTabId, tabId, onTabChange, identifierMode, identifierLabel, identifierPlaceholder, passwordLabel, passwordPlaceholder, rememberMeLabel, forgotPasswordLabel, forgotPasswordTitle, forgotPasswordDescription, forgotPasswordEmailLabel, forgotPasswordEmailPlaceholder, forgotPasswordSubmitLabel, forgotPasswordBackLabel, forgotPasswordSentTitle, forgotPasswordSentDescriptionPrefix, forgotPasswordSentInstructions, forgotPasswordResendLabel, forgotPasswordResendDelaySeconds, submitLabel, submitLoadingLabel, ssoLabel, ssoButtonLabel, ssoEmailTitle, ssoEmailDescription, ssoEmailLabel, ssoEmailPlaceholder, ssoEmailSubmitLabel, ssoEmailHint, ssoEmailBackAriaLabel, legalNotice, footerLinks, isSubmitting, isForgotPasswordSubmitting, isSsoSubmitting, onSubmit, onForgotPasswordSubmit, onSsoClick, onSsoSubmit, }: LoginScreenProps): import("react/jsx-runtime").JSX.Element;
|
|
4
|
+
//# sourceMappingURL=login-screen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"login-screen.d.ts","sourceRoot":"","sources":["../../src/components/login-screen.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAEV,gBAAgB,EAGjB,MAAM,sBAAsB,CAAA;AAE7B,YAAY,EACV,yBAAyB,EACzB,cAAc,EACd,qBAAqB,EACrB,wBAAwB,EACxB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,sBAAsB,CAAA;AAwF7B,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,WAAkB,EAClB,sBAA2B,EAC3B,QAA0B,EAC1B,QAA6B,EAC7B,mBAAmB,EACnB,WAAiC,EACjC,mBAA0B,EAC1B,IAAI,EACJ,KAA0B,EAC1B,WAAoD,EACpD,IAAS,EACT,YAAY,EACZ,KAAK,EACL,WAAW,EACX,cAAwB,EACxB,eAAe,EACf,qBAAqB,EACrB,aAA0B,EAC1B,mBAA2C,EAC3C,eAA+B,EAC/B,mBAAwC,EACxC,mBAA2C,EAC3C,yBAAmF,EACnF,wBAAkC,EAClC,8BAA2D,EAC3D,yBAA6C,EAC7C,uBAA2C,EAC3C,uBAA4C,EAC5C,mCAAwE,EACxE,8BAAmI,EACnI,yBAA0C,EAC1C,gCAAqC,EACrC,WAAsB,EACtB,kBAAoC,EACpC,QAAe,EACf,cAA+C,EAC/C,aAAkC,EAClC,mBAAyF,EACzF,aAA+B,EAC/B,mBAAwC,EACxC,mBAAgC,EAChC,YAAkF,EAClF,qBAAiC,EACjC,WAAW,EACX,WAAkC,EAClC,YAAoB,EACpB,0BAAkC,EAClC,eAAuB,EACvB,QAAQ,EACR,sBAAsB,EACtB,UAAU,EACV,WAAW,GACZ,EAAE,gBAAgB,2CA+clB"}
|