@eifi1/ui-kit 0.5.1 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +50 -1
- package/dist/components/amount-input.d.ts +7 -0
- package/dist/components/autocomplete.d.ts +103 -0
- package/dist/components/autocomplete.js +260 -0
- package/dist/components/autocomplete.js.map +1 -0
- package/dist/components/calculator.d.ts +7 -0
- package/dist/components/checkbox.d.ts +9 -0
- package/dist/components/checkbox.js +7 -2
- package/dist/components/checkbox.js.map +1 -1
- package/dist/components/chip.d.ts +3 -2
- package/dist/components/chip.js +14 -1
- package/dist/components/chip.js.map +1 -1
- package/dist/components/choice-card.d.ts +100 -0
- package/dist/components/choice-card.js +170 -0
- package/dist/components/choice-card.js.map +1 -0
- package/dist/components/combobox-core.d.ts +76 -6
- package/dist/components/combobox-core.js +119 -49
- package/dist/components/combobox-core.js.map +1 -1
- package/dist/components/combobox.d.ts +12 -2
- package/dist/components/combobox.js +42 -17
- package/dist/components/combobox.js.map +1 -1
- package/dist/components/danger-confirm.d.ts +91 -0
- package/dist/components/danger-confirm.js +181 -0
- package/dist/components/danger-confirm.js.map +1 -0
- package/dist/components/dialog-frame.d.ts +84 -0
- package/dist/components/dialog-frame.js +86 -0
- package/dist/components/dialog-frame.js.map +1 -0
- package/dist/components/disclosure.d.ts +108 -0
- package/dist/components/disclosure.js +127 -0
- package/dist/components/disclosure.js.map +1 -0
- package/dist/components/entity-combobox.d.ts +17 -3
- package/dist/components/entity-combobox.js +25 -5
- package/dist/components/entity-combobox.js.map +1 -1
- package/dist/components/file-button.d.ts +161 -0
- package/dist/components/file-button.js +243 -0
- package/dist/components/file-button.js.map +1 -0
- package/dist/components/file-dropzone.d.ts +72 -23
- package/dist/components/file-dropzone.js +219 -94
- package/dist/components/file-dropzone.js.map +1 -1
- package/dist/components/icon-picker.d.ts +72 -0
- package/dist/components/icon-picker.js +104 -0
- package/dist/components/icon-picker.js.map +1 -0
- package/dist/components/mini-calendar.d.ts +3 -0
- package/dist/components/mini-calendar.js +4 -3
- package/dist/components/mini-calendar.js.map +1 -1
- package/dist/components/modal.d.ts +8 -1
- package/dist/components/modal.js +4 -2
- package/dist/components/modal.js.map +1 -1
- package/dist/components/multi-entity-combobox.d.ts +16 -3
- package/dist/components/multi-entity-combobox.js +25 -5
- package/dist/components/multi-entity-combobox.js.map +1 -1
- package/dist/components/number-field.d.ts +41 -1
- package/dist/components/number-field.js +42 -10
- package/dist/components/number-field.js.map +1 -1
- package/dist/components/number-input.d.ts +35 -2
- package/dist/components/number-input.js +35 -4
- package/dist/components/number-input.js.map +1 -1
- package/dist/components/numpad-sheet.d.ts +7 -0
- package/dist/components/search-field.d.ts +16 -0
- package/dist/components/search-field.js +29 -7
- package/dist/components/search-field.js.map +1 -1
- package/dist/components/signature-pad.d.ts +43 -1
- package/dist/components/signature-pad.js +74 -2
- package/dist/components/signature-pad.js.map +1 -1
- package/dist/components/swatch-picker.d.ts +69 -0
- package/dist/components/swatch-picker.js +75 -0
- package/dist/components/swatch-picker.js.map +1 -0
- package/dist/components/switch.d.ts +9 -0
- package/dist/components/switch.js +7 -2
- package/dist/components/switch.js.map +1 -1
- package/dist/components/tile-radio.d.ts +50 -0
- package/dist/components/tile-radio.js +140 -0
- package/dist/components/tile-radio.js.map +1 -0
- package/dist/components/toggle-group.d.ts +27 -5
- package/dist/components/toggle-group.js +22 -15
- package/dist/components/toggle-group.js.map +1 -1
- package/dist/components/ui.d.ts +150 -12
- package/dist/components/ui.js +196 -22
- package/dist/components/ui.js.map +1 -1
- package/dist/i18n/defaults.d.ts +7 -0
- package/dist/i18n/defaults.js +13 -2
- package/dist/i18n/defaults.js.map +1 -1
- package/dist/i18n/kit-labels.d.ts +38 -5
- package/dist/i18n/kit-labels.js +12 -4
- package/dist/i18n/kit-labels.js.map +1 -1
- package/dist/index.d.ts +16 -7
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/table-text.d.ts +127 -0
- package/dist/lib/table-text.js +82 -0
- package/dist/lib/table-text.js.map +1 -0
- package/dist/rhf/form.d.ts +79 -0
- package/dist/rhf/form.js +143 -0
- package/dist/rhf/form.js.map +1 -0
- package/dist/rhf.d.ts +4 -0
- package/dist/rhf.js +3 -0
- package/dist/rhf.js.map +1 -0
- package/dist/shell/app-shell.js +3 -1
- package/dist/shell/app-shell.js.map +1 -1
- package/dist/table-text.d.ts +1 -0
- package/dist/table-text.js +3 -0
- package/dist/table-text.js.map +1 -0
- package/package.json +14 -1
- package/src/components/autocomplete.tsx +429 -0
- package/src/components/checkbox.tsx +16 -0
- package/src/components/chip.tsx +24 -2
- package/src/components/choice-card.tsx +305 -0
- package/src/components/combobox-core.tsx +228 -58
- package/src/components/combobox.tsx +58 -21
- package/src/components/danger-confirm.tsx +286 -0
- package/src/components/dialog-frame.tsx +179 -0
- package/src/components/disclosure.tsx +259 -0
- package/src/components/entity-combobox.tsx +41 -6
- package/src/components/file-button.tsx +458 -0
- package/src/components/file-dropzone.tsx +323 -117
- package/src/components/icon-picker.tsx +181 -0
- package/src/components/mini-calendar.tsx +7 -3
- package/src/components/modal.tsx +10 -2
- package/src/components/multi-entity-combobox.tsx +40 -6
- package/src/components/number-field.tsx +86 -10
- package/src/components/number-input.tsx +79 -2
- package/src/components/search-field.tsx +49 -6
- package/src/components/signature-pad.tsx +112 -0
- package/src/components/swatch-picker.tsx +141 -0
- package/src/components/switch.tsx +16 -0
- package/src/components/tile-radio.tsx +228 -0
- package/src/components/toggle-group.tsx +54 -18
- package/src/components/ui.tsx +400 -24
- package/src/i18n/defaults.ts +12 -1
- package/src/i18n/kit-labels.tsx +45 -5
- package/src/index.ts +19 -0
- package/src/lib/table-text.ts +265 -0
- package/src/rhf/form.tsx +300 -0
- package/src/rhf.ts +9 -0
- package/src/shell/app-shell.tsx +3 -1
- package/src/table-text.ts +8 -0
|
@@ -16,10 +16,8 @@ export interface ToggleOption<T extends string> {
|
|
|
16
16
|
* accepted and the component ignored would be a prop that silently does nothing —
|
|
17
17
|
* worse than one that does not compile.
|
|
18
18
|
*/
|
|
19
|
-
export interface
|
|
19
|
+
export interface ToggleGroupBaseProps<T extends string>
|
|
20
20
|
extends Omit<ComponentPropsWithoutRef<"div">, "onChange" | "children"> {
|
|
21
|
-
value: T;
|
|
22
|
-
onChange: (value: T) => void;
|
|
23
21
|
options: ToggleOption<T>[];
|
|
24
22
|
className?: string;
|
|
25
23
|
/** Applied to every option button (e.g. to tune height/rounding to match
|
|
@@ -47,17 +45,54 @@ export interface ToggleGroupProps<T extends string>
|
|
|
47
45
|
disabled?: boolean;
|
|
48
46
|
}
|
|
49
47
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
48
|
+
/** The group as it has always been: one option is always the answer. */
|
|
49
|
+
export interface ToggleGroupRequiredProps<T extends string> extends ToggleGroupBaseProps<T> {
|
|
50
|
+
allowEmpty?: false;
|
|
51
|
+
value: T;
|
|
52
|
+
onChange: (value: T) => void;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* A group that can be emptied: clicking the active option clears it, and `onChange`
|
|
57
|
+
* receives `null` (Keksdose's support-panel filters, where "no filter" is reached by
|
|
58
|
+
* clicking the filter that is on).
|
|
59
|
+
*
|
|
60
|
+
* The options become TOGGLE BUTTONS (`aria-pressed`, in a `role="group"`) rather than
|
|
61
|
+
* radios. A radio cannot be unchecked by activating it — no screen reader user expects
|
|
62
|
+
* a second press on "Open, radio, checked" to leave nothing checked, and nothing would
|
|
63
|
+
* tell them it had. "Open, toggle button, pressed" says exactly what a press will do.
|
|
64
|
+
*/
|
|
65
|
+
export interface ToggleGroupClearableProps<T extends string> extends ToggleGroupBaseProps<T> {
|
|
66
|
+
allowEmpty: true;
|
|
67
|
+
value: T | null;
|
|
68
|
+
onChange: (value: T | null) => void;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/** `allowEmpty` picks the shape, so `onChange` is typed `(T) => void` unless the group
|
|
72
|
+
* can actually emit `null` — no existing caller has a `null` to handle. */
|
|
73
|
+
export type ToggleGroupProps<T extends string> =
|
|
74
|
+
| ToggleGroupRequiredProps<T>
|
|
75
|
+
| ToggleGroupClearableProps<T>;
|
|
76
|
+
|
|
77
|
+
export function ToggleGroup<T extends string>(props: ToggleGroupProps<T>) {
|
|
78
|
+
const {
|
|
79
|
+
value,
|
|
80
|
+
options,
|
|
81
|
+
className,
|
|
82
|
+
optionClassName,
|
|
83
|
+
ariaLabel,
|
|
84
|
+
disabled = false,
|
|
85
|
+
"aria-label": ariaLabelAttr,
|
|
86
|
+
...restWithMode
|
|
87
|
+
} = props;
|
|
88
|
+
// Taken off the rest so neither reaches the DOM; `props` keeps them paired, which is
|
|
89
|
+
// what lets the `onChange` below be called with `null` only in the mode that allows it.
|
|
90
|
+
const { allowEmpty: _allowEmpty, onChange: _onChange, ...rest } = restWithMode;
|
|
91
|
+
const choose = (next: T) => {
|
|
92
|
+
if (props.allowEmpty) props.onChange(next === value ? null : next);
|
|
93
|
+
else props.onChange(next);
|
|
94
|
+
};
|
|
95
|
+
const clearable = props.allowEmpty === true;
|
|
61
96
|
return (
|
|
62
97
|
<div
|
|
63
98
|
// The audit's named example of a closed prop list (§"Public API design"): the
|
|
@@ -71,7 +106,7 @@ export function ToggleGroup<T extends string>({
|
|
|
71
106
|
// radiogroup role or the disabled state by accident. `className` is destructured
|
|
72
107
|
// out entirely and merged through `cn`, so it is never in here.
|
|
73
108
|
{...rest}
|
|
74
|
-
role="radiogroup"
|
|
109
|
+
role={clearable ? "group" : "radiogroup"}
|
|
75
110
|
// The DOM spelling wins; `ariaLabel` is the fallback for the call sites that
|
|
76
111
|
// have not moved yet.
|
|
77
112
|
aria-label={ariaLabelAttr ?? ariaLabel}
|
|
@@ -106,10 +141,11 @@ export function ToggleGroup<T extends string>({
|
|
|
106
141
|
<button
|
|
107
142
|
key={opt.value}
|
|
108
143
|
type="button"
|
|
109
|
-
role="radio"
|
|
110
|
-
aria-checked={active}
|
|
144
|
+
role={clearable ? undefined : "radio"}
|
|
145
|
+
aria-checked={clearable ? undefined : active}
|
|
146
|
+
aria-pressed={clearable ? active : undefined}
|
|
111
147
|
disabled={disabled}
|
|
112
|
-
onClick={() =>
|
|
148
|
+
onClick={() => choose(opt.value)}
|
|
113
149
|
className={cn(
|
|
114
150
|
// `truncate` (which carries whitespace-nowrap) rather than letting a
|
|
115
151
|
// label wrap: a segmented control sizes its whole row to the tallest
|