@lerianstudio/sindarian-ui 1.4.0-beta.8 → 2.0.0-beta.10
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/breadcrumb/index.d.ts.map +1 -1
- package/dist/components/breadcrumb/index.js +25 -1
- package/dist/components/card/account-card/index.d.ts.map +1 -1
- package/dist/components/card/account-card/index.js +5 -5
- package/dist/components/card/basic-card/index.d.ts.map +1 -1
- package/dist/components/card/basic-card/index.js +2 -2
- package/dist/components/card/entity-card/index.js +4 -4
- package/dist/components/dialog/confirmation-dialog/index.d.ts +36 -5
- package/dist/components/dialog/confirmation-dialog/index.d.ts.map +1 -1
- package/dist/components/dialog/confirmation-dialog/index.js +5 -2
- package/dist/components/entity-box/index.d.ts +18 -2
- package/dist/components/entity-box/index.d.ts.map +1 -1
- package/dist/components/entity-box/index.js +33 -5
- package/dist/components/entity-data-table/index.d.ts.map +1 -1
- package/dist/components/entity-data-table/index.js +1 -1
- package/dist/components/form/file-upload-field/index.d.ts +11 -2
- package/dist/components/form/file-upload-field/index.d.ts.map +1 -1
- package/dist/components/form/file-upload-field/index.js +8 -3
- package/dist/components/form/input-field/index.d.ts +41 -2
- package/dist/components/form/input-field/index.d.ts.map +1 -1
- package/dist/components/form/input-field/index.js +73 -15
- package/dist/components/form/password-field/index.d.ts +5 -1
- package/dist/components/form/password-field/index.d.ts.map +1 -1
- package/dist/components/form/password-field/index.js +2 -2
- package/dist/components/form/select-field/index.d.ts +9 -1
- package/dist/components/form/select-field/index.d.ts.map +1 -1
- package/dist/components/form/select-field/index.js +2 -2
- package/dist/components/page-header/index.d.ts.map +1 -1
- package/dist/components/page-header/index.js +2 -2
- package/dist/components/table/id-table-cell.d.ts +5 -1
- package/dist/components/table/id-table-cell.d.ts.map +1 -1
- package/dist/components/table/id-table-cell.js +48 -6
- package/dist/components/ui/autocomplete/index.d.ts +58 -6
- package/dist/components/ui/autocomplete/index.d.ts.map +1 -1
- package/dist/components/ui/autocomplete/index.js +96 -16
- package/dist/components/ui/badge/index.d.ts +11 -7
- package/dist/components/ui/badge/index.d.ts.map +1 -1
- package/dist/components/ui/badge/index.js +31 -9
- package/dist/components/ui/button/styles.css +31 -1
- package/dist/components/ui/calendar/index.d.ts.map +1 -1
- package/dist/components/ui/calendar/index.js +7 -1
- package/dist/components/ui/card/index.d.ts.map +1 -1
- package/dist/components/ui/card/index.js +1 -1
- package/dist/components/ui/copy-field/index.d.ts.map +1 -1
- package/dist/components/ui/copy-field/index.js +1 -1
- package/dist/components/ui/dropdown-menu/index.d.ts.map +1 -1
- package/dist/components/ui/dropdown-menu/index.js +4 -1
- package/dist/components/ui/field/index.d.ts.map +1 -1
- package/dist/components/ui/field/index.js +5 -2
- package/dist/components/ui/file-upload/index.d.ts +235 -9
- package/dist/components/ui/file-upload/index.d.ts.map +1 -1
- package/dist/components/ui/file-upload/index.js +354 -17
- package/dist/components/ui/form.d.ts +4 -0
- package/dist/components/ui/form.d.ts.map +1 -1
- package/dist/components/ui/form.js +53 -8
- package/dist/components/ui/input/styles.css +30 -2
- package/dist/components/ui/multiple-select/index.js +2 -2
- package/dist/components/ui/progress/index.d.ts +15 -1
- package/dist/components/ui/progress/index.d.ts.map +1 -1
- package/dist/components/ui/progress/index.js +25 -2
- package/dist/components/ui/sheet/index.d.ts.map +1 -1
- package/dist/components/ui/sheet/index.js +2 -2
- package/dist/components/ui/sidebar/index.d.ts +1 -0
- package/dist/components/ui/sidebar/index.d.ts.map +1 -1
- package/dist/components/ui/sidebar/index.js +1 -0
- package/dist/components/ui/sidebar/sidebar-expand-button.d.ts +1 -1
- package/dist/components/ui/sidebar/sidebar-expand-button.d.ts.map +1 -1
- package/dist/components/ui/sidebar/sidebar-expand-button.js +32 -2
- package/dist/components/ui/sidebar/sidebar-item.d.ts +1 -1
- package/dist/components/ui/sidebar/sidebar-item.d.ts.map +1 -1
- package/dist/components/ui/sidebar/sidebar-item.js +28 -4
- package/dist/components/ui/sidebar/sidebar-provider.d.ts +37 -0
- package/dist/components/ui/sidebar/sidebar-provider.d.ts.map +1 -1
- package/dist/components/ui/sidebar/sidebar-provider.js +125 -4
- package/dist/components/ui/sidebar/sidebar-root.d.ts +38 -1
- package/dist/components/ui/sidebar/sidebar-root.d.ts.map +1 -1
- package/dist/components/ui/sidebar/sidebar-root.js +100 -5
- package/dist/components/ui/sidebar/sidebar-trigger.d.ts +18 -0
- package/dist/components/ui/sidebar/sidebar-trigger.d.ts.map +1 -0
- package/dist/components/ui/sidebar/sidebar-trigger.js +30 -0
- package/dist/components/ui/toggle-group/index.d.ts +1 -1
- package/dist/components/ui/toggle-group/index.d.ts.map +1 -1
- package/dist/components/ui/toggle-group/index.js +73 -4
- package/dist/components/ui/tooltip/index.d.ts +15 -0
- package/dist/components/ui/tooltip/index.d.ts.map +1 -1
- package/dist/components/ui/tooltip/index.js +16 -1
- package/dist/domain/blotter/index.d.ts +4 -2
- package/dist/domain/blotter/index.d.ts.map +1 -1
- package/dist/domain/delinquency-aging/aging-buckets.d.ts.map +1 -1
- package/dist/domain/delinquency-aging/aging-buckets.js +8 -3
- package/dist/domain/delinquency-aging/index.d.ts.map +1 -1
- package/dist/domain/delinquency-aging/index.js +8 -3
- package/dist/domain/key-id/index.js +1 -1
- package/dist/domain/status-rail/index.js +1 -1
- package/dist/domain/threshold-gauge/index.d.ts.map +1 -1
- package/dist/domain/threshold-gauge/index.js +9 -5
- package/dist/enterprise/stat-card/index.d.ts.map +1 -1
- package/dist/enterprise/stat-card/index.js +12 -4
- package/dist/esm/components/breadcrumb/index.d.ts.map +1 -1
- package/dist/esm/components/breadcrumb/index.js +25 -1
- package/dist/esm/components/card/account-card/index.d.ts.map +1 -1
- package/dist/esm/components/card/account-card/index.js +5 -5
- package/dist/esm/components/card/basic-card/index.d.ts.map +1 -1
- package/dist/esm/components/card/basic-card/index.js +2 -2
- package/dist/esm/components/card/entity-card/index.js +4 -4
- package/dist/esm/components/dialog/confirmation-dialog/index.d.ts +36 -5
- package/dist/esm/components/dialog/confirmation-dialog/index.d.ts.map +1 -1
- package/dist/esm/components/dialog/confirmation-dialog/index.js +5 -2
- package/dist/esm/components/entity-box/index.d.ts +18 -2
- package/dist/esm/components/entity-box/index.d.ts.map +1 -1
- package/dist/esm/components/entity-box/index.js +30 -5
- package/dist/esm/components/entity-data-table/index.d.ts.map +1 -1
- package/dist/esm/components/entity-data-table/index.js +1 -1
- package/dist/esm/components/form/file-upload-field/index.d.ts +11 -2
- package/dist/esm/components/form/file-upload-field/index.d.ts.map +1 -1
- package/dist/esm/components/form/file-upload-field/index.js +8 -3
- package/dist/esm/components/form/input-field/index.d.ts +41 -2
- package/dist/esm/components/form/input-field/index.d.ts.map +1 -1
- package/dist/esm/components/form/input-field/index.js +73 -15
- package/dist/esm/components/form/password-field/index.d.ts +5 -1
- package/dist/esm/components/form/password-field/index.d.ts.map +1 -1
- package/dist/esm/components/form/password-field/index.js +2 -2
- package/dist/esm/components/form/select-field/index.d.ts +9 -1
- package/dist/esm/components/form/select-field/index.d.ts.map +1 -1
- package/dist/esm/components/form/select-field/index.js +2 -2
- package/dist/esm/components/page-header/index.d.ts.map +1 -1
- package/dist/esm/components/page-header/index.js +2 -2
- package/dist/esm/components/table/id-table-cell.d.ts +5 -1
- package/dist/esm/components/table/id-table-cell.d.ts.map +1 -1
- package/dist/esm/components/table/id-table-cell.js +48 -3
- package/dist/esm/components/ui/autocomplete/index.d.ts +58 -6
- package/dist/esm/components/ui/autocomplete/index.d.ts.map +1 -1
- package/dist/esm/components/ui/autocomplete/index.js +96 -16
- package/dist/esm/components/ui/badge/index.d.ts +11 -7
- package/dist/esm/components/ui/badge/index.d.ts.map +1 -1
- package/dist/esm/components/ui/badge/index.js +31 -9
- package/dist/esm/components/ui/calendar/index.d.ts.map +1 -1
- package/dist/esm/components/ui/calendar/index.js +8 -2
- package/dist/esm/components/ui/card/index.d.ts.map +1 -1
- package/dist/esm/components/ui/card/index.js +1 -1
- package/dist/esm/components/ui/copy-field/index.d.ts.map +1 -1
- package/dist/esm/components/ui/copy-field/index.js +1 -1
- package/dist/esm/components/ui/dropdown-menu/index.d.ts.map +1 -1
- package/dist/esm/components/ui/dropdown-menu/index.js +4 -1
- package/dist/esm/components/ui/field/index.d.ts.map +1 -1
- package/dist/esm/components/ui/field/index.js +5 -2
- package/dist/esm/components/ui/file-upload/index.d.ts +235 -9
- package/dist/esm/components/ui/file-upload/index.d.ts.map +1 -1
- package/dist/esm/components/ui/file-upload/index.js +353 -17
- package/dist/esm/components/ui/form.d.ts +4 -0
- package/dist/esm/components/ui/form.d.ts.map +1 -1
- package/dist/esm/components/ui/form.js +53 -8
- package/dist/esm/components/ui/multiple-select/index.js +2 -2
- package/dist/esm/components/ui/progress/index.d.ts +15 -1
- package/dist/esm/components/ui/progress/index.d.ts.map +1 -1
- package/dist/esm/components/ui/progress/index.js +25 -2
- package/dist/esm/components/ui/sheet/index.d.ts.map +1 -1
- package/dist/esm/components/ui/sheet/index.js +2 -2
- package/dist/esm/components/ui/sidebar/index.d.ts +1 -0
- package/dist/esm/components/ui/sidebar/index.d.ts.map +1 -1
- package/dist/esm/components/ui/sidebar/index.js +1 -0
- package/dist/esm/components/ui/sidebar/sidebar-expand-button.d.ts +1 -1
- package/dist/esm/components/ui/sidebar/sidebar-expand-button.d.ts.map +1 -1
- package/dist/esm/components/ui/sidebar/sidebar-expand-button.js +32 -2
- package/dist/esm/components/ui/sidebar/sidebar-item.d.ts +1 -1
- package/dist/esm/components/ui/sidebar/sidebar-item.d.ts.map +1 -1
- package/dist/esm/components/ui/sidebar/sidebar-item.js +28 -4
- package/dist/esm/components/ui/sidebar/sidebar-provider.d.ts +37 -0
- package/dist/esm/components/ui/sidebar/sidebar-provider.d.ts.map +1 -1
- package/dist/esm/components/ui/sidebar/sidebar-provider.js +122 -1
- package/dist/esm/components/ui/sidebar/sidebar-root.d.ts +38 -1
- package/dist/esm/components/ui/sidebar/sidebar-root.d.ts.map +1 -1
- package/dist/esm/components/ui/sidebar/sidebar-root.js +102 -7
- package/dist/esm/components/ui/sidebar/sidebar-trigger.d.ts +18 -0
- package/dist/esm/components/ui/sidebar/sidebar-trigger.d.ts.map +1 -0
- package/dist/esm/components/ui/sidebar/sidebar-trigger.js +26 -0
- package/dist/esm/components/ui/toggle-group/index.d.ts +1 -1
- package/dist/esm/components/ui/toggle-group/index.d.ts.map +1 -1
- package/dist/esm/components/ui/toggle-group/index.js +73 -4
- package/dist/esm/components/ui/tooltip/index.d.ts +15 -0
- package/dist/esm/components/ui/tooltip/index.d.ts.map +1 -1
- package/dist/esm/components/ui/tooltip/index.js +16 -1
- package/dist/esm/domain/blotter/index.d.ts +4 -2
- package/dist/esm/domain/blotter/index.d.ts.map +1 -1
- package/dist/esm/domain/delinquency-aging/aging-buckets.d.ts.map +1 -1
- package/dist/esm/domain/delinquency-aging/aging-buckets.js +8 -3
- package/dist/esm/domain/delinquency-aging/index.d.ts.map +1 -1
- package/dist/esm/domain/delinquency-aging/index.js +8 -3
- package/dist/esm/domain/key-id/index.js +1 -1
- package/dist/esm/domain/status-rail/index.js +1 -1
- package/dist/esm/domain/threshold-gauge/index.d.ts.map +1 -1
- package/dist/esm/domain/threshold-gauge/index.js +9 -5
- package/dist/esm/enterprise/stat-card/index.d.ts.map +1 -1
- package/dist/esm/enterprise/stat-card/index.js +12 -4
- package/dist/globals.css +101 -32
- package/package.json +5 -3
|
@@ -75,12 +75,31 @@ const useAutocomplete = () => {
|
|
|
75
75
|
}
|
|
76
76
|
return context;
|
|
77
77
|
};
|
|
78
|
-
|
|
78
|
+
/**
|
|
79
|
+
* The text a value reads as.
|
|
80
|
+
*
|
|
81
|
+
* An item registers a label only when it HAS one to give: a string child, or an
|
|
82
|
+
* explicit `label` when its children are markup. Everything downstream renders
|
|
83
|
+
* this map as text (the input's value, a chip's `aria-label`), so a value with
|
|
84
|
+
* no registered label falls back to the value itself. The alternatives are both
|
|
85
|
+
* defects that shipped: `undefined` drops a controlled input to uncontrolled,
|
|
86
|
+
* and a React element interpolates into a template literal as "[object
|
|
87
|
+
* Object]".
|
|
88
|
+
*/
|
|
89
|
+
function labelOf(options, value) {
|
|
90
|
+
return options[value] ?? value;
|
|
91
|
+
}
|
|
92
|
+
function AutocompleteTrigger({ ref, className, onClear, clearLabel = 'Clear', children }) {
|
|
79
93
|
const _ref = react_1.default.useRef(null);
|
|
80
94
|
const { open, readOnly, setOpen, disabled, value, inputRef, handleClear } = useAutocomplete();
|
|
81
95
|
react_1.default.useImperativeHandle(ref, () => _ref.current);
|
|
82
96
|
const isNoSelection = disabled || readOnly || value.length < 1;
|
|
83
|
-
return ((0, jsx_runtime_1.jsxs)("div", { ref: _ref, className: (0, utils_1.cn)(
|
|
97
|
+
return ((0, jsx_runtime_1.jsxs)("div", { ref: _ref, className: (0, utils_1.cn)(
|
|
98
|
+
// `border-input-border`, NOT `border-input`: `--input` is a SURFACE
|
|
99
|
+
// token and is white in light, so the border it paints is invisible
|
|
100
|
+
// against the field's own `bg-background`. This is the same edge
|
|
101
|
+
// MultipleSelect and DateRangePicker draw, and the same token.
|
|
102
|
+
'bg-background ring-offset-background placeholder:text-input-placeholder data-[disabled=true]:bg-shadcn-100 data-[read-only=true]:bg-shadcn-100 border-input-border flex rounded-md border text-sm focus:outline-hidden focus-visible:outline-hidden data-[disabled=true]:cursor-not-allowed data-[disabled=true]:opacity-50 data-[read-only=true]:opacity-50 md:text-sm [&>span]:line-clamp-1', {
|
|
84
103
|
'h-9': value.length === 0,
|
|
85
104
|
'min-h-9': value.length > 0,
|
|
86
105
|
'cursor-text': !disabled && value.length !== 0
|
|
@@ -96,11 +115,19 @@ function AutocompleteTrigger({ ref, className, onClear, children }) {
|
|
|
96
115
|
inputRef?.current?.focus();
|
|
97
116
|
}
|
|
98
117
|
setOpen(!open);
|
|
99
|
-
}, "data-disabled": disabled, "data-read-only": readOnly, children: [(0, jsx_runtime_1.jsx)("div", { className: "flex grow flex-wrap gap-1 px-3 py-2", children: children }), (0, jsx_runtime_1.jsxs)("div", { className: "flex shrink-0 items-center justify-end", children: [(0, jsx_runtime_1.jsx)("button", { type: "button", className: (0, utils_1.cn)(isNoSelection && 'hidden'),
|
|
118
|
+
}, "data-disabled": disabled, "data-read-only": readOnly, children: [(0, jsx_runtime_1.jsx)("div", { className: "flex grow flex-wrap gap-1 px-3 py-2", children: children }), (0, jsx_runtime_1.jsxs)("div", { className: "flex shrink-0 items-center justify-end", children: [(0, jsx_runtime_1.jsx)("button", { type: "button", "aria-label": clearLabel, className: (0, utils_1.cn)('cursor-pointer', isNoSelection && 'hidden'), onKeyDown: (event) => {
|
|
119
|
+
// cmdk's Command root calls preventDefault() on EVERY Enter that
|
|
120
|
+
// reaches it, which cancels this button's implicit activation, so
|
|
121
|
+
// the keydown must not get there. Enter only: the root's other
|
|
122
|
+
// keys (Escape, the arrows) still belong to the panel.
|
|
123
|
+
if (event.key === 'Enter') {
|
|
100
124
|
event.stopPropagation();
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
125
|
+
}
|
|
126
|
+
}, onClick: (event) => {
|
|
127
|
+
event.stopPropagation();
|
|
128
|
+
handleClear();
|
|
129
|
+
onClear?.();
|
|
130
|
+
}, children: (0, jsx_runtime_1.jsx)(lucide_react_1.X, { "aria-hidden": true, className: "text-muted-foreground mx-2 h-4" }) }), (0, jsx_runtime_1.jsx)(separator_1.Separator, { orientation: "vertical", className: (0, utils_1.cn)(isNoSelection && 'hidden') }), (0, jsx_runtime_1.jsx)(SelectPrimitive.Icon, { className: "cursor-pointer data-[disabled=true]:cursor-not-allowed data-[read-only=true]:cursor-default", "data-disabled": disabled, "data-read-only": readOnly, children: (0, jsx_runtime_1.jsx)(lucide_react_1.ChevronDown, { className: "mx-3 my-2 h-4 w-4 opacity-50" }) })] })] }));
|
|
104
131
|
}
|
|
105
132
|
function AutocompleteValue({ ref, className, value: valueProp, onValueChange, onBlur, ...props }) {
|
|
106
133
|
const [search, setSearch] = react_1.default.useState(valueProp);
|
|
@@ -115,7 +142,7 @@ function AutocompleteValue({ ref, className, value: valueProp, onValueChange, on
|
|
|
115
142
|
handleValueChange('');
|
|
116
143
|
return;
|
|
117
144
|
}
|
|
118
|
-
handleValueChange(showValue ? v : options
|
|
145
|
+
handleValueChange(showValue ? v : labelOf(options, v));
|
|
119
146
|
};
|
|
120
147
|
const handleValueChange = (value) => {
|
|
121
148
|
setSearch(value);
|
|
@@ -134,21 +161,29 @@ function AutocompleteValue({ ref, className, value: valueProp, onValueChange, on
|
|
|
134
161
|
if (v === '') {
|
|
135
162
|
return;
|
|
136
163
|
}
|
|
137
|
-
setSearch(showValue ? v : options
|
|
164
|
+
setSearch(showValue ? v : labelOf(options, v));
|
|
138
165
|
}, [options]);
|
|
139
166
|
react_1.default.useEffect(() => {
|
|
140
167
|
updateSearch(value);
|
|
141
168
|
}, [value]);
|
|
142
169
|
return ((0, jsx_runtime_1.jsx)(cmdk_1.Command.Input, { ...props, ref: inputRef, value: search, onValueChange: handleValueChange, disabled: disabled, readOnly: readOnly, className: (0, utils_1.cn)('placeholder:text-muted-foreground w-full bg-transparent outline-hidden read-only:opacity-50 read-only:placeholder:opacity-0 focus:outline-hidden disabled:cursor-not-allowed disabled:opacity-50 disabled:placeholder:opacity-0', className), onBlur: handleBlur }));
|
|
143
170
|
}
|
|
144
|
-
function AutocompleteMultipleValue({ ref, className, ...props }) {
|
|
171
|
+
function AutocompleteMultipleValue({ ref, className, clearLabel = 'Clear', ...props }) {
|
|
145
172
|
const { value, disabled, handleChange, options, showValue, inputRef } = useAutocomplete();
|
|
146
173
|
react_1.default.useImperativeHandle(ref, () => inputRef.current);
|
|
147
174
|
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [options &&
|
|
148
|
-
value?.map((value) => ((0, jsx_runtime_1.jsxs)(badge_1.Badge, { variant: "secondary", className: (0, utils_1.cn)('data-disabled:bg-muted-foreground data-fixed:bg-muted-foreground data-disabled:text-muted data-fixed:text-muted data-disabled:hover:bg-muted-foreground data-fixed:hover:bg-muted-foreground'), children: [showValue ? value : options
|
|
175
|
+
value?.map((value) => ((0, jsx_runtime_1.jsxs)(badge_1.Badge, { variant: "secondary", className: (0, utils_1.cn)('data-disabled:bg-muted-foreground data-fixed:bg-muted-foreground data-disabled:text-muted data-fixed:text-muted data-disabled:hover:bg-muted-foreground data-fixed:hover:bg-muted-foreground'), children: [showValue ? value : labelOf(options, value), (0, jsx_runtime_1.jsx)("button", { type: "button", "aria-label": `${clearLabel} ${showValue ? value : labelOf(options, value)}`, className: (0, utils_1.cn)('ring-offset-background focus:ring-ring ml-1 rounded-full outline-hidden focus:ring-2 focus:ring-offset-2', disabled && 'hidden'), onKeyDown: (event) => {
|
|
176
|
+
// cmdk's Command root calls preventDefault() on EVERY Enter that
|
|
177
|
+
// reaches it, which cancels this button's implicit activation, so
|
|
178
|
+
// the keydown must not get there. Enter only: the root's other
|
|
179
|
+
// keys (Escape, the arrows) still belong to the panel.
|
|
180
|
+
if (event.key === 'Enter') {
|
|
149
181
|
event.stopPropagation();
|
|
150
|
-
|
|
151
|
-
|
|
182
|
+
}
|
|
183
|
+
}, onClick: (event) => {
|
|
184
|
+
event.stopPropagation();
|
|
185
|
+
handleChange(value);
|
|
186
|
+
}, children: (0, jsx_runtime_1.jsx)(lucide_react_1.X, { "aria-hidden": true, className: "text-muted-foreground hover:text-foreground h-3 w-3" }) })] }, value))), (0, jsx_runtime_1.jsx)(cmdk_1.Command.Input, { ...props, ref: inputRef, disabled: disabled, className: (0, utils_1.cn)('placeholder:text-muted-foreground w-full bg-transparent outline-hidden focus:outline-hidden disabled:cursor-not-allowed disabled:opacity-50 disabled:placeholder:opacity-0', className) })] }));
|
|
152
187
|
}
|
|
153
188
|
function AutocompleteEmpty({ className, ...props }) {
|
|
154
189
|
const render = (0, cmdk_1.useCommandState)((state) => state.filtered.count === 0);
|
|
@@ -200,9 +235,16 @@ function AutocompleteContent({ className, position = 'popper', side = 'bottom',
|
|
|
200
235
|
child.type.displayName === 'AutocompleteItem') {
|
|
201
236
|
// Check if the item was proper filled with a value prop
|
|
202
237
|
if (child.props.value) {
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
238
|
+
// NOT `children as string`. That cast is how a React ELEMENT got into
|
|
239
|
+
// a map every reader treats as text. An item with markup children
|
|
240
|
+
// registers nothing unless it declares a `label`, and `labelOf` reads
|
|
241
|
+
// the absence as "use the value".
|
|
242
|
+
const { label, children: itemChildren } = child.props;
|
|
243
|
+
const text = label ??
|
|
244
|
+
(typeof itemChildren === 'string' ? itemChildren : undefined);
|
|
245
|
+
if (text !== undefined) {
|
|
246
|
+
addOption({ [child.props.value]: text });
|
|
247
|
+
}
|
|
206
248
|
}
|
|
207
249
|
return;
|
|
208
250
|
}
|
|
@@ -258,7 +300,11 @@ function AutocompleteContent({ className, position = 'popper', side = 'bottom',
|
|
|
258
300
|
function AutocompleteGroup({ className, ...props }) {
|
|
259
301
|
return ((0, jsx_runtime_1.jsx)(cmdk_1.Command.Group, { "data-slot": "autocomplete-group", className: (0, utils_1.cn)('text-foreground [&_[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium', className), ...props }));
|
|
260
302
|
}
|
|
261
|
-
function AutocompleteItem({ className, value,
|
|
303
|
+
function AutocompleteItem({ className, value,
|
|
304
|
+
// Read off the element by `AutocompleteContent._searchChildren`, never
|
|
305
|
+
// rendered: destructured here only to keep it out of `...props` and off the
|
|
306
|
+
// div cmdk spreads them onto.
|
|
307
|
+
label: _label, onSelect, ...props }) {
|
|
262
308
|
const { handleChange } = useAutocomplete();
|
|
263
309
|
return ((0, jsx_runtime_1.jsx)(cmdk_1.Command.Item, { "data-slot": "autocomplete-item", value: value, className: (0, utils_1.cn)("data-[selected='true']:bg-accent data-[selected=true]:text-accent-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", className), ...props, onMouseDown: (e) => {
|
|
264
310
|
e.preventDefault();
|
|
@@ -268,6 +314,16 @@ function AutocompleteItem({ className, value, onSelect, ...props }) {
|
|
|
268
314
|
onSelect?.(value);
|
|
269
315
|
} }));
|
|
270
316
|
}
|
|
317
|
+
/**
|
|
318
|
+
* ⛔ LOAD-BEARING, NOT A DEBUG LABEL. `AutocompleteContent._searchChildren`
|
|
319
|
+
* recognises an option by `child.type.displayName === 'AutocompleteItem'`, and
|
|
320
|
+
* a function component carries no displayName unless it is assigned one. It
|
|
321
|
+
* never was, so the walk matched nothing and the option registry stayed empty
|
|
322
|
+
* for every consumer: a multiple-select chip rendered `options[value]` as
|
|
323
|
+
* `undefined` (an empty chip), and `AutocompleteValue.updateSearch` set the
|
|
324
|
+
* input to `undefined` on every selection outside `showValue` mode.
|
|
325
|
+
*/
|
|
326
|
+
AutocompleteItem.displayName = 'AutocompleteItem';
|
|
271
327
|
function Autocomplete({ ref, value, defaultValue, onValueChange, onClear, className, open: openProp, onOpenChange, showValue, readOnly, disabled, multiple, onKeyDown, children, ...props }) {
|
|
272
328
|
const _ref = react_1.default.useRef(null);
|
|
273
329
|
const [open, _setOpen] = react_1.default.useState(openProp);
|
|
@@ -358,3 +414,27 @@ function Autocomplete({ ref, value, defaultValue, onValueChange, onClear, classN
|
|
|
358
414
|
onKeyDown?.(e);
|
|
359
415
|
}, children: children }) }));
|
|
360
416
|
}
|
|
417
|
+
/**
|
|
418
|
+
* ⛔ THE REST OF THE SET, FOR THE SAME REASON AS `AutocompleteItem` ABOVE.
|
|
419
|
+
*
|
|
420
|
+
* A function component's `name` is whatever the bundler left it — one letter in
|
|
421
|
+
* a production build — so any lookup written against `child.type` needs an
|
|
422
|
+
* explicit string to compare. `AutocompleteItem` is the only part the walk
|
|
423
|
+
* reads TODAY, and it is the part that shipped an empty option registry to
|
|
424
|
+
* every consumer while it was anonymous. Naming the whole set costs a line each
|
|
425
|
+
* and removes the next instance of that defect before it is written; it also
|
|
426
|
+
* makes these parts legible in a React tree, which `MultipleSelect` next door
|
|
427
|
+
* has always done.
|
|
428
|
+
*
|
|
429
|
+
* `__tests__`-style enumeration lives in `autocomplete.test.tsx`: it reads the
|
|
430
|
+
* module's exports rather than a list, so a new part added without a name fails
|
|
431
|
+
* without anyone remembering to extend anything.
|
|
432
|
+
*/
|
|
433
|
+
Autocomplete.displayName = 'Autocomplete';
|
|
434
|
+
AutocompleteTrigger.displayName = 'AutocompleteTrigger';
|
|
435
|
+
AutocompleteValue.displayName = 'AutocompleteValue';
|
|
436
|
+
AutocompleteMultipleValue.displayName = 'AutocompleteMultipleValue';
|
|
437
|
+
AutocompleteContent.displayName = 'AutocompleteContent';
|
|
438
|
+
AutocompleteGroup.displayName = 'AutocompleteGroup';
|
|
439
|
+
AutocompleteEmpty.displayName = 'AutocompleteEmpty';
|
|
440
|
+
AutocompleteLoading.displayName = 'AutocompleteLoading';
|
|
@@ -1,12 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { type VariantProps } from 'class-variance-authority';
|
|
3
|
-
/**
|
|
4
|
-
* `credit` is the accounting reading of a credit amount, NOT an alias of
|
|
5
|
-
* `destructive` (an error/alarm). The credit role is a tint-and-ink pair:
|
|
6
|
-
* `--credit-foreground` mirrors `--credit` by contract, so the red carries the
|
|
7
|
-
* role as text over a tinted surface. Do not "fix" this into a solid
|
|
8
|
-
* `bg-credit` fill — that renders red-on-red and is invisible.
|
|
9
|
-
*/
|
|
10
3
|
/**
|
|
11
4
|
* `gap-1` is load-bearing, not decoration: a badge holding a label AND an
|
|
12
5
|
* element child (`ID<code>ctx-123</code>`) has nothing between them otherwise —
|
|
@@ -14,6 +7,17 @@ import { type VariantProps } from 'class-variance-authority';
|
|
|
14
7
|
* anonymous flex item — so the screen reads `IDctx-123`. Consumers were pasting
|
|
15
8
|
* `className="gap-1"` per call site; `cn` runs tailwind-merge, so an explicit
|
|
16
9
|
* `gap-2` still wins. Single-child badges are unaffected: gap needs two items.
|
|
10
|
+
*
|
|
11
|
+
* `whitespace-nowrap` keeps the pill a pill. `rounded-full` draws the ends as
|
|
12
|
+
* semicircles sized to ONE line box, so a label that wraps stretches those caps
|
|
13
|
+
* over two lines and the shape reads as a rounded blob, not a token. It bit a
|
|
14
|
+
* consumer table whose column was sized to its content: `min-content` on
|
|
15
|
+
* wrappable text resolves to the WIDEST WORD, so a three-word group name landed
|
|
16
|
+
* at 112px wide and 46px tall against the 26px of a single-line badge. Nowrap
|
|
17
|
+
* also pins `min-content` to the full label, which is what lets a caller cap the
|
|
18
|
+
* box with `max-w-*` plus a truncating child and get an ellipsis. A caller that
|
|
19
|
+
* genuinely wants a wrapping badge passes `whitespace-normal`; tailwind-merge
|
|
20
|
+
* lets it win.
|
|
17
21
|
*/
|
|
18
22
|
declare const badgeVariants: (props?: ({
|
|
19
23
|
variant?: "default" | "secondary" | "outline" | "destructive" | "alert" | "success" | "active" | "inactive" | "credit" | "error" | "info" | "purple" | null | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/badge/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAKjE
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/badge/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAKjE;;;;;;;;;;;;;;;;;;GAkBG;AACH,QAAA,MAAM,aAAa;;;8EAqDlB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,GACnD,YAAY,CAAC,OAAO,aAAa,CAAC,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAE5D,iBAAS,KAAK,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,qBAsBzE;AAED,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAA"}
|
|
@@ -6,13 +6,6 @@ const jsx_runtime_1 = require("react/jsx-runtime");
|
|
|
6
6
|
const class_variance_authority_1 = require("class-variance-authority");
|
|
7
7
|
const utils_1 = require("../../../lib/utils");
|
|
8
8
|
const react_slot_1 = require("@radix-ui/react-slot");
|
|
9
|
-
/**
|
|
10
|
-
* `credit` is the accounting reading of a credit amount, NOT an alias of
|
|
11
|
-
* `destructive` (an error/alarm). The credit role is a tint-and-ink pair:
|
|
12
|
-
* `--credit-foreground` mirrors `--credit` by contract, so the red carries the
|
|
13
|
-
* role as text over a tinted surface. Do not "fix" this into a solid
|
|
14
|
-
* `bg-credit` fill — that renders red-on-red and is invisible.
|
|
15
|
-
*/
|
|
16
9
|
/**
|
|
17
10
|
* `gap-1` is load-bearing, not decoration: a badge holding a label AND an
|
|
18
11
|
* element child (`ID<code>ctx-123</code>`) has nothing between them otherwise —
|
|
@@ -20,8 +13,19 @@ const react_slot_1 = require("@radix-ui/react-slot");
|
|
|
20
13
|
* anonymous flex item — so the screen reads `IDctx-123`. Consumers were pasting
|
|
21
14
|
* `className="gap-1"` per call site; `cn` runs tailwind-merge, so an explicit
|
|
22
15
|
* `gap-2` still wins. Single-child badges are unaffected: gap needs two items.
|
|
16
|
+
*
|
|
17
|
+
* `whitespace-nowrap` keeps the pill a pill. `rounded-full` draws the ends as
|
|
18
|
+
* semicircles sized to ONE line box, so a label that wraps stretches those caps
|
|
19
|
+
* over two lines and the shape reads as a rounded blob, not a token. It bit a
|
|
20
|
+
* consumer table whose column was sized to its content: `min-content` on
|
|
21
|
+
* wrappable text resolves to the WIDEST WORD, so a three-word group name landed
|
|
22
|
+
* at 112px wide and 46px tall against the 26px of a single-line badge. Nowrap
|
|
23
|
+
* also pins `min-content` to the full label, which is what lets a caller cap the
|
|
24
|
+
* box with `max-w-*` plus a truncating child and get an ellipsis. A caller that
|
|
25
|
+
* genuinely wants a wrapping badge passes `whitespace-normal`; tailwind-merge
|
|
26
|
+
* lets it win.
|
|
23
27
|
*/
|
|
24
|
-
const badgeVariants = (0, class_variance_authority_1.cva)('inline-flex items-center gap-1 rounded-full border border-border px-2.5 py-0.5 text-sm font-medium transition-colors focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2', {
|
|
28
|
+
const badgeVariants = (0, class_variance_authority_1.cva)('inline-flex items-center gap-1 whitespace-nowrap rounded-full border border-border px-2.5 py-0.5 text-sm font-medium transition-colors focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2', {
|
|
25
29
|
variants: {
|
|
26
30
|
variant: {
|
|
27
31
|
default: 'border-transparent bg-primary text-primary-foreground hover:bg-primary/80',
|
|
@@ -29,6 +33,14 @@ const badgeVariants = (0, class_variance_authority_1.cva)('inline-flex items-cen
|
|
|
29
33
|
inactive: 'bg-muted text-foreground border-muted-foreground/40 py-[2px] px-3',
|
|
30
34
|
secondary: 'border-transparent bg-muted-foreground text-white dark:text-black',
|
|
31
35
|
destructive: 'border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80',
|
|
36
|
+
/**
|
|
37
|
+
* The accounting reading of a credit amount, NOT an alias of
|
|
38
|
+
* `destructive` (an error/alarm). The credit role is a tint-and-ink
|
|
39
|
+
* pair: `--credit-foreground` mirrors `--credit` by contract, so the
|
|
40
|
+
* red carries the role as text over a tinted surface. Do not "fix"
|
|
41
|
+
* this into a solid `bg-credit` fill — that renders red-on-red and is
|
|
42
|
+
* invisible.
|
|
43
|
+
*/
|
|
32
44
|
credit: 'border-credit/30 bg-credit/10 text-credit-foreground px-[10px] py-1',
|
|
33
45
|
error: 'border-system-error-border bg-system-error-surface text-system-error-text px-[10px] py-1',
|
|
34
46
|
success: 'border-system-success-border bg-system-success-surface text-system-success-text px-[10px] py-1',
|
|
@@ -57,5 +69,15 @@ const badgeVariants = (0, class_variance_authority_1.cva)('inline-flex items-cen
|
|
|
57
69
|
exports.badgeVariants = badgeVariants;
|
|
58
70
|
function Badge({ className, variant, size, asChild, ...props }) {
|
|
59
71
|
const Comp = asChild ? react_slot_1.Slot : 'span';
|
|
60
|
-
|
|
72
|
+
/**
|
|
73
|
+
* A bare `span` is generic, and ARIA prohibits an accessible name on a
|
|
74
|
+
* generic element: a caller's `aria-label` was dropped by assistive tech and
|
|
75
|
+
* flagged by axe as `aria-prohibited-attr`. `role="img"` is the smallest role
|
|
76
|
+
* that permits the name and lets it stand in for the visible text, which is
|
|
77
|
+
* exactly what a labelled span badge wants. Unlabelled badges stay generic;
|
|
78
|
+
* `asChild` keeps the child's native role; and a caller's own `role` still wins
|
|
79
|
+
* because it arrives with the spread below.
|
|
80
|
+
*/
|
|
81
|
+
const labelled = props['aria-label'] !== undefined || props['aria-labelledby'] !== undefined;
|
|
82
|
+
return ((0, jsx_runtime_1.jsx)(Comp, { "data-slot": "badge", role: !asChild && labelled ? 'img' : undefined, className: (0, utils_1.cn)(badgeVariants({ variant, size }), className), ...props }));
|
|
61
83
|
}
|
|
@@ -34,7 +34,12 @@
|
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
.button-plain {
|
|
37
|
-
|
|
37
|
+
/* The dark counterpart is not optional: black/5 over a dark ground is
|
|
38
|
+
invisible, so the hover affordance simply vanished in dark mode. Same
|
|
39
|
+
/5-light, /10-dark pairing the kit already uses for translucent state
|
|
40
|
+
fills (`ui/field`: `has-data-checked:bg-primary/5
|
|
41
|
+
dark:has-data-checked:bg-primary/10`). */
|
|
42
|
+
@apply bg-transparent text-inherit shadow-none hover:bg-black/5 dark:hover:bg-white/10;
|
|
38
43
|
}
|
|
39
44
|
|
|
40
45
|
.button-primary {
|
|
@@ -63,6 +68,31 @@
|
|
|
63
68
|
@apply !text-button-link !h-4 !p-0 !px-0 !py-0 underline shadow-none;
|
|
64
69
|
}
|
|
65
70
|
|
|
71
|
+
/*
|
|
72
|
+
WCAG 2.5.8 (AA) asks a pointer target for 24 by 24 CSS px. This variant pins
|
|
73
|
+
its box at 16, and pins it with `!important` on the height and all three
|
|
74
|
+
padding axes — so unlike an ordinary too-small target, no consumer can
|
|
75
|
+
correct it at the call site. That is what makes it a library defect rather
|
|
76
|
+
than a call-site one; the 16px itself is not new.
|
|
77
|
+
|
|
78
|
+
The hit area grows instead of the box. `.button-base` is already
|
|
79
|
+
`position: relative`, so an inset pseudo-element takes the target to 24px
|
|
80
|
+
tall at zero layout cost: the element's own box, and every line box around
|
|
81
|
+
it, stay at 16. Growing the box was the alternative and it was rejected —
|
|
82
|
+
link buttons sit inside running text, where a taller box reflows the
|
|
83
|
+
sentence, and in table cells and filter bars, where it shifts the row.
|
|
84
|
+
|
|
85
|
+
Horizontal size is left to the label. SC 2.5.8 exempts a target whose size
|
|
86
|
+
is constrained by the line-height of the text around it, and stealing
|
|
87
|
+
horizontal space from adjacent words would take clicks that belong to them.
|
|
88
|
+
|
|
89
|
+
Overridable: Tailwind's `utilities` layer wins over `components`, so a
|
|
90
|
+
consumer that needs the band gone writes `before:inset-y-0`.
|
|
91
|
+
*/
|
|
92
|
+
.button-link::before {
|
|
93
|
+
@apply absolute inset-x-0 -inset-y-1 content-[''];
|
|
94
|
+
}
|
|
95
|
+
|
|
66
96
|
.button-disabled {
|
|
67
97
|
@apply disabled:pointer-events-none disabled:border-transparent disabled:opacity-50 disabled:shadow-none;
|
|
68
98
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/calendar/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EACL,SAAS,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/calendar/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EACL,SAAS,EAGT,KAAK,SAAS,EACf,MAAM,kBAAkB,CAAA;AAGzB,OAAO,EAAE,MAAM,EAAkB,MAAM,wBAAwB,CAAA;AAO/D,iBAAS,QAAQ,CAAC,EAChB,SAAS,EACT,UAAU,EACV,eAAsB,EACtB,aAAuB,EACvB,aAAuB,EACvB,UAAU,EACV,UAAU,EACV,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,SAAS,CAAC,GAAG;IAC1C,aAAa,CAAC,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,MAAM,CAAC,CAAC,SAAS,CAAC,CAAA;CAC/D,qBAgKA;AAED,iBAAS,iBAAiB,CAAC,EACzB,SAAS,EACT,GAAG,EACH,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,SAAS,CAAC,qBAqCxC;AAED,OAAO,EAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAA"}
|
|
@@ -45,7 +45,13 @@ const lucide_react_1 = require("lucide-react");
|
|
|
45
45
|
function Calendar({ className, classNames, showOutsideDays = true, captionLayout = 'label', buttonVariant = 'plain', formatters, components, ...props }) {
|
|
46
46
|
const defaultClassNames = (0, react_day_picker_1.getDefaultClassNames)();
|
|
47
47
|
return ((0, jsx_runtime_1.jsx)(react_day_picker_1.DayPicker, { showOutsideDays: showOutsideDays, className: (0, utils_1.cn)('bg-background group/calendar p-2 [--cell-radius:var(--radius-md)] [--cell-size:34px] [--nav-size:28px] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent', String.raw `rtl:**:[.rdp-button\_next>svg]:rotate-180`, String.raw `rtl:**:[.rdp-button\_previous>svg]:rotate-180`, className), captionLayout: captionLayout, formatters: {
|
|
48
|
-
|
|
48
|
+
// react-day-picker's own default is dateLib.format(month, 'LLLL'), the
|
|
49
|
+
// full month name in the locale it was given. Shortening it has to go
|
|
50
|
+
// through the same dateLib: Date.toLocaleString('default') reads the
|
|
51
|
+
// runtime locale instead, so the dropdown fell back to English while
|
|
52
|
+
// the weekdays and the caption around it stayed in the consumer's
|
|
53
|
+
// language. 'LLL' is the abbreviated form of the same standalone month.
|
|
54
|
+
formatMonthDropdown: (month, dateLib = react_day_picker_1.defaultDateLib) => dateLib.format(month, 'LLL'),
|
|
49
55
|
...formatters
|
|
50
56
|
}, classNames: {
|
|
51
57
|
root: (0, utils_1.cn)('w-fit', defaultClassNames.root),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/card/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,iBAAS,IAAI,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAWjE;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQvE;AAED,KAAK,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG;IACjD;;;;OAIG;IACH,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;CAC7C,CAAA;AAED,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,IAAW,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/card/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,iBAAS,IAAI,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAWjE;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQvE;AAED,KAAK,cAAc,GAAG,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG;IACjD;;;;OAIG;IACH,EAAE,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;CAC7C,CAAA;AAED,iBAAS,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,IAAW,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,qBAQ1E;AAED,iBAAS,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,qBAQ1E;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAWvE;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQxE;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQvE;AAED,OAAO,EACL,IAAI,EACJ,UAAU,EACV,UAAU,EACV,SAAS,EACT,UAAU,EACV,eAAe,EACf,WAAW,EACZ,CAAA"}
|
|
@@ -16,7 +16,7 @@ function CardHeader({ className, ...props }) {
|
|
|
16
16
|
return ((0, jsx_runtime_1.jsx)("div", { "data-slot": "card-header", className: (0, utils_1.cn)('flex flex-col space-y-1.5', className), ...props }));
|
|
17
17
|
}
|
|
18
18
|
function CardTitle({ className, as: Comp = 'h3', ...props }) {
|
|
19
|
-
return ((0, jsx_runtime_1.jsx)(Comp, { "data-slot": "card-title", className: (0, utils_1.cn)('text-sm leading-none font-medium
|
|
19
|
+
return ((0, jsx_runtime_1.jsx)(Comp, { "data-slot": "card-title", className: (0, utils_1.cn)('text-sm leading-none font-medium', className), ...props }));
|
|
20
20
|
}
|
|
21
21
|
function CardDescription({ className, ...props }) {
|
|
22
22
|
return ((0, jsx_runtime_1.jsx)("p", { "data-slot": "card-description", className: (0, utils_1.cn)('text-muted-foreground text-sm', className), ...props }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/copy-field/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAM9B,MAAM,MAAM,cAAc,GAAG;IAC3B;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;;;;;;;OAUG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC7B,CAAA;AAmCD,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,KAAK,EACL,MAAc,EACd,WAAW,EACX,WAA0B,EAC1B,SAAwB,EACxB,UAA4B,EAC5B,mBAAmB,EACpB,EAAE,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/copy-field/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAM9B,MAAM,MAAM,cAAc,GAAG;IAC3B;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;;OAIG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;;;;;;;;OAUG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC7B,CAAA;AAmCD,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,KAAK,EACL,MAAc,EACd,WAAW,EACX,WAA0B,EAC1B,SAAwB,EACxB,UAA4B,EAC5B,mBAAmB,EACpB,EAAE,cAAc,qBAkKhB"}
|
|
@@ -151,5 +151,5 @@ function CopyField({ value, label, masked = false, onCopyLabel, revealLabel = 'S
|
|
|
151
151
|
// long value (e.g. a UUID recovery code) scrolls inside the field
|
|
152
152
|
// instead of overflowing its container. No `font-mono`: the value
|
|
153
153
|
// inherits the app sans font (Inter) so it matches every other field.
|
|
154
|
-
className: "text-input-foreground h-full min-w-0 flex-1 cursor-text border-none bg-transparent text-sm outline-none select-text focus:ring-0 focus:ring-offset-0" }), masked ? ((0, jsx_runtime_1.jsx)(icon_button_1.IconButton, { type: "button", variant: "outline", size: "small", rounded: true, "aria-
|
|
154
|
+
className: "text-input-foreground h-full min-w-0 flex-1 cursor-text border-none bg-transparent text-sm outline-none select-text focus:ring-0 focus:ring-offset-0" }), masked ? ((0, jsx_runtime_1.jsx)(icon_button_1.IconButton, { type: "button", variant: "outline", size: "small", rounded: true, "aria-label": revealed ? hideLabel : revealLabel, onClick: () => setRevealed((prev) => !prev), children: revealed ? (0, jsx_runtime_1.jsx)(lucide_react_1.EyeOff, {}) : (0, jsx_runtime_1.jsx)(lucide_react_1.Eye, {}) })) : null, (0, jsx_runtime_1.jsx)(icon_button_1.IconButton, { type: "button", variant: "outline", size: "small", rounded: true, "aria-label": copyAccessibleName, onClick: handleCopy, children: copied ? (0, jsx_runtime_1.jsx)(lucide_react_1.Check, {}) : (0, jsx_runtime_1.jsx)(lucide_react_1.Copy, {}) })] })] }));
|
|
155
155
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/dropdown-menu/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,qBAAqB,MAAM,+BAA+B,CAAA;AAKtE,iBAAS,YAAY,CAAC,EACpB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,qBAAqB,CAAC,IAAI,CAAC,qBAEzD;AAED,iBAAS,kBAAkB,CAAC,EAC1B,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,qBAAqB,CAAC,MAAM,CAAC,qBAI3D;AAED,iBAAS,mBAAmB,CAAC,EAC3B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,qBAAqB,CAAC,OAAO,CAAC,qBAW5D;AAED,iBAAS,mBAAmB,CAAC,EAC3B,SAAS,EACT,UAAc,EACd,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,qBAAqB,CAAC,OAAO,CAAC,qBAc5D;AAED,iBAAS,iBAAiB,CAAC,EACzB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,qBAAqB,CAAC,KAAK,CAAC,qBAI1D;AAED,iBAAS,gBAAgB,CAAC,EACxB,SAAS,EACT,KAAK,EACL,OAAmB,EACnB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,qBAAqB,CAAC,IAAI,CAAC,GAAG;IAC3D,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,OAAO,CAAC,EAAE,SAAS,GAAG,aAAa,CAAA;CACpC,qBAaA;AAED,iBAAS,oBAAoB,CAAC,EAC5B,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/dropdown-menu/index.tsx"],"names":[],"mappings":"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"}
|
|
@@ -74,7 +74,10 @@ function DropdownMenuItem({ className, inset, variant = 'default', ...props }) {
|
|
|
74
74
|
return ((0, jsx_runtime_1.jsx)(DropdownMenuPrimitive.Item, { "data-slot": "dropdown-menu-item", "data-inset": inset, "data-variant": variant, className: (0, utils_1.cn)('focus:bg-shadcn-100 focus:text-accent-foreground text-muted-foreground relative flex cursor-pointer items-center gap-3 px-3 py-2 text-sm font-medium outline-hidden transition-colors select-none data-disabled:pointer-events-none data-disabled:opacity-50', className), ...props }));
|
|
75
75
|
}
|
|
76
76
|
function DropdownMenuItemIcon({ className, children, ...props }) {
|
|
77
|
-
return ((0, jsx_runtime_1.jsx)("span", { "data-slot": "dropdown-menu-item-icon",
|
|
77
|
+
return ((0, jsx_runtime_1.jsx)("span", { "data-slot": "dropdown-menu-item-icon",
|
|
78
|
+
// A meaningful glyph inside an interactive item answers to the 3:1 floor
|
|
79
|
+
// of SC 1.4.11. base/400 reads 2.56:1 on the popover surface in light.
|
|
80
|
+
className: (0, utils_1.cn)('text-muted-foreground', className), ...props, children: React.Children.map(React.Children.toArray(children), (child) => React.isValidElement(child)
|
|
78
81
|
? React.cloneElement(child, { size: 16 })
|
|
79
82
|
: child) }));
|
|
80
83
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/field/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAGjE,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAG7C,iBAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,+BAW1E;AAED,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,OAAkB,EAClB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG;IAAE,OAAO,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;CAAE,+BAYnE;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,+BAWvE;AAED,QAAA,MAAM,aAAa;;8EAgBlB,CAAA;AAED,iBAAS,KAAK,CAAC,EACb,SAAS,EACT,WAAwB,EACxB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,OAAO,aAAa,CAAC,+BAUlE;AAED,iBAAS,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,+BAWzE;AAED,iBAAS,UAAU,CAAC,EAClB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,KAAK,CAAC,+BAYpC;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,+BAWvE;AAED,iBAAS,gBAAgB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,+BAa3E;AAED,iBAAS,cAAc,CAAC,EACtB,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC3B,+BAsBA;AAED,iBAAS,UAAU,CAAC,EAClB,SAAS,EACT,QAAQ,EACR,MAAM,EACN,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC,CAAA;CACjD,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/field/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAGjE,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAG7C,iBAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,+BAW1E;AAED,iBAAS,WAAW,CAAC,EACnB,SAAS,EACT,OAAkB,EAClB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG;IAAE,OAAO,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAA;CAAE,+BAYnE;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,+BAWvE;AAED,QAAA,MAAM,aAAa;;8EAgBlB,CAAA;AAED,iBAAS,KAAK,CAAC,EACb,SAAS,EACT,WAAwB,EACxB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,YAAY,CAAC,OAAO,aAAa,CAAC,+BAUlE;AAED,iBAAS,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,+BAWzE;AAED,iBAAS,UAAU,CAAC,EAClB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,KAAK,CAAC,+BAYpC;AAED,iBAAS,UAAU,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,+BAWvE;AAED,iBAAS,gBAAgB,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,+BAa3E;AAED,iBAAS,cAAc,CAAC,EACtB,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CAC3B,+BAsBA;AAED,iBAAS,UAAU,CAAC,EAClB,SAAS,EACT,QAAQ,EACR,MAAM,EACN,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC/B,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC,CAAA;CACjD,sCA4CA;AAED,OAAO,EACL,KAAK,EACL,UAAU,EACV,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,WAAW,EACX,cAAc,EACd,QAAQ,EACR,YAAY,EACZ,UAAU,EACX,CAAA"}
|
|
@@ -26,7 +26,7 @@ function FieldLegend({ className, variant = 'legend', ...props }) {
|
|
|
26
26
|
function FieldGroup({ className, ...props }) {
|
|
27
27
|
return ((0, jsx_runtime_1.jsx)("div", { "data-slot": "field-group", className: (0, utils_1.cn)('group/field-group @container/field-group flex w-full flex-col gap-5 data-[slot=checkbox-group]:gap-3 [&>[data-slot=field-group]]:gap-4', className), ...props }));
|
|
28
28
|
}
|
|
29
|
-
const fieldVariants = (0, class_variance_authority_1.cva)('data-[invalid=true]:text-
|
|
29
|
+
const fieldVariants = (0, class_variance_authority_1.cva)('data-[invalid=true]:text-system-error-h1a gap-2 group/field flex w-full', {
|
|
30
30
|
variants: {
|
|
31
31
|
orientation: {
|
|
32
32
|
vertical: 'flex-col [&>*]:w-full [&>.sr-only]:w-auto',
|
|
@@ -75,5 +75,8 @@ function FieldError({ className, children, errors, ...props }) {
|
|
|
75
75
|
if (!content) {
|
|
76
76
|
return null;
|
|
77
77
|
}
|
|
78
|
-
return ((0, jsx_runtime_1.jsx)("div", { role: "alert", "data-slot": "field-error",
|
|
78
|
+
return ((0, jsx_runtime_1.jsx)("div", { role: "alert", "data-slot": "field-error",
|
|
79
|
+
// The error TEXT token, not `text-destructive`: that is the badge/fill
|
|
80
|
+
// family and measures 3.80:1 as ink on the dark card, under AA.
|
|
81
|
+
className: (0, utils_1.cn)('text-system-error-h1a text-sm font-normal', className), ...props, children: content }));
|
|
79
82
|
}
|