@eifi1/ui-kit 0.21.0 → 0.23.0
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 +42 -25
- package/dist/chart.d.ts +19 -14
- package/dist/components/account-chips.d.ts +10 -3
- package/dist/components/account-chips.js +5 -2
- package/dist/components/account-chips.js.map +1 -1
- package/dist/components/account-settings.d.ts +33 -2
- package/dist/components/account-settings.js +43 -21
- package/dist/components/account-settings.js.map +1 -1
- package/dist/components/amount-input.d.ts +53 -14
- package/dist/components/amount-input.js +17 -28
- package/dist/components/amount-input.js.map +1 -1
- package/dist/components/autocomplete.d.ts +29 -0
- package/dist/components/autocomplete.js +134 -104
- package/dist/components/autocomplete.js.map +1 -1
- package/dist/components/button-group.d.ts +19 -14
- package/dist/components/calculator.d.ts +19 -14
- package/dist/components/checkbox-group.d.ts +104 -0
- package/dist/components/checkbox-group.js +111 -0
- package/dist/components/checkbox-group.js.map +1 -0
- package/dist/components/checkbox.d.ts +19 -0
- package/dist/components/checkbox.js +30 -7
- package/dist/components/checkbox.js.map +1 -1
- package/dist/components/chip.d.ts +18 -0
- package/dist/components/chip.js +47 -10
- package/dist/components/chip.js.map +1 -1
- package/dist/components/column-mapper.d.ts +182 -0
- package/dist/components/column-mapper.js +375 -0
- package/dist/components/column-mapper.js.map +1 -0
- package/dist/components/combobox-core.d.ts +39 -2
- package/dist/components/combobox-core.js +29 -6
- package/dist/components/combobox-core.js.map +1 -1
- package/dist/components/combobox.d.ts +91 -2
- package/dist/components/combobox.js +454 -308
- package/dist/components/combobox.js.map +1 -1
- package/dist/components/confirm-dialog.d.ts +69 -161
- package/dist/components/confirm-dialog.js +7 -8
- package/dist/components/confirm-dialog.js.map +1 -1
- package/dist/components/copy-button.d.ts +16 -11
- package/dist/components/country-select.d.ts +167 -0
- package/dist/components/country-select.js +293 -0
- package/dist/components/country-select.js.map +1 -0
- package/dist/components/currency-select.d.ts +17 -1
- package/dist/components/currency-select.js +56 -23
- package/dist/components/currency-select.js.map +1 -1
- package/dist/components/danger-confirm.d.ts +69 -166
- package/dist/components/danger-confirm.js +144 -50
- package/dist/components/danger-confirm.js.map +1 -1
- package/dist/components/data-table-cells.d.ts +1 -2
- package/dist/components/data-table-filter-popover.d.ts +1 -2
- package/dist/components/data-table-filters.d.ts +1 -2
- package/dist/components/data-table-labels.d.ts +4 -97
- package/dist/components/data-table-labels.js +9 -1
- package/dist/components/data-table-labels.js.map +1 -1
- package/dist/components/data-table-pagination.d.ts +3 -1
- package/dist/components/data-table.d.ts +1 -2
- package/dist/components/data-table.js +98 -3
- package/dist/components/data-table.js.map +1 -1
- package/dist/components/date-picker.d.ts +66 -5
- package/dist/components/date-picker.js +378 -66
- package/dist/components/date-picker.js.map +1 -1
- package/dist/components/entity-combobox.d.ts +42 -1
- package/dist/components/entity-combobox.js +154 -113
- package/dist/components/entity-combobox.js.map +1 -1
- package/dist/components/facing-pair.d.ts +19 -14
- package/dist/components/field-parts.d.ts +224 -0
- package/dist/components/field-parts.js +156 -0
- package/dist/components/field-parts.js.map +1 -0
- package/dist/components/field-strip.d.ts +105 -0
- package/dist/components/field-strip.js +46 -0
- package/dist/components/field-strip.js.map +1 -0
- package/dist/components/file-button.d.ts +19 -14
- package/dist/components/file-button.js +13 -3
- package/dist/components/file-button.js.map +1 -1
- package/dist/components/file-dropzone.d.ts +41 -15
- package/dist/components/file-dropzone.js +57 -34
- package/dist/components/file-dropzone.js.map +1 -1
- package/dist/components/form-actions.d.ts +18 -13
- package/dist/components/form-actions.js +69 -5
- package/dist/components/form-actions.js.map +1 -1
- package/dist/components/iban-input.d.ts +69 -0
- package/dist/components/iban-input.js +125 -0
- package/dist/components/iban-input.js.map +1 -0
- package/dist/components/icon-picker.d.ts +21 -2
- package/dist/components/icon-picker.js +19 -4
- package/dist/components/icon-picker.js.map +1 -1
- package/dist/components/inline-edit-field.d.ts +167 -0
- package/dist/components/inline-edit-field.js +293 -0
- package/dist/components/inline-edit-field.js.map +1 -0
- package/dist/components/language-select.d.ts +130 -0
- package/dist/components/language-select.js +18 -0
- package/dist/components/language-select.js.map +1 -0
- package/dist/components/line-items.d.ts +25 -3
- package/dist/components/line-items.js +55 -46
- package/dist/components/line-items.js.map +1 -1
- package/dist/components/list.d.ts +25 -0
- package/dist/components/list.js +16 -5
- package/dist/components/list.js.map +1 -1
- package/dist/components/money-field.d.ts +32 -14
- package/dist/components/money-field.js.map +1 -1
- package/dist/components/month-picker.d.ts +52 -4
- package/dist/components/month-picker.js +291 -86
- package/dist/components/month-picker.js.map +1 -1
- package/dist/components/multi-entity-combobox.d.ts +26 -1
- package/dist/components/multi-entity-combobox.js +143 -102
- package/dist/components/multi-entity-combobox.js.map +1 -1
- package/dist/components/multi-select.d.ts +8 -1
- package/dist/components/multi-select.js +9 -4
- package/dist/components/multi-select.js.map +1 -1
- package/dist/components/number-field.d.ts +34 -19
- package/dist/components/number-field.js +6 -20
- package/dist/components/number-field.js.map +1 -1
- package/dist/components/number-input.d.ts +79 -19
- package/dist/components/number-input.js +90 -38
- package/dist/components/number-input.js.map +1 -1
- package/dist/components/numpad-sheet.d.ts +19 -14
- package/dist/components/one-time-code-input.d.ts +100 -0
- package/dist/components/one-time-code-input.js +137 -0
- package/dist/components/one-time-code-input.js.map +1 -0
- package/dist/components/phone-input.d.ts +69 -0
- package/dist/components/phone-input.js +171 -0
- package/dist/components/phone-input.js.map +1 -0
- package/dist/components/reauth-dialog.d.ts +2 -2
- package/dist/components/reauth-dialog.js +6 -8
- package/dist/components/reauth-dialog.js.map +1 -1
- package/dist/components/series-chart.d.ts +19 -14
- package/dist/components/settings-fields.d.ts +19 -14
- package/dist/components/share-card.d.ts +16 -11
- package/dist/components/sign-chip.d.ts +66 -0
- package/dist/components/sign-chip.js +39 -0
- package/dist/components/sign-chip.js.map +1 -0
- package/dist/components/swatch-picker.d.ts +43 -2
- package/dist/components/swatch-picker.js +80 -32
- package/dist/components/swatch-picker.js.map +1 -1
- package/dist/components/switch.d.ts +19 -0
- package/dist/components/switch.js +24 -6
- package/dist/components/switch.js.map +1 -1
- package/dist/components/text-link.d.ts +18 -13
- package/dist/components/tile-radio.d.ts +88 -13
- package/dist/components/tile-radio.js +28 -11
- package/dist/components/tile-radio.js.map +1 -1
- package/dist/components/time-input.d.ts +24 -15
- package/dist/components/time-input.js.map +1 -1
- package/dist/components/toggle-group.d.ts +47 -1
- package/dist/components/toggle-group.js +110 -69
- package/dist/components/toggle-group.js.map +1 -1
- package/dist/components/trigger-aria.d.ts +3 -0
- package/dist/components/trigger-aria.js +3 -1
- package/dist/components/trigger-aria.js.map +1 -1
- package/dist/components/ui.d.ts +16 -11
- package/dist/components/ui.js +284 -88
- package/dist/components/ui.js.map +1 -1
- package/dist/components/use-table-state.d.ts +1 -2
- package/dist/{data-table-3mi2R3so.d.ts → data-table-labels-B7OdnM0S.d.ts} +140 -3
- package/dist/data-table.d.ts +1 -2
- package/dist/data-table.js +2 -1
- package/dist/data-table.js.map +1 -1
- package/dist/feedback/feedback-attachment.d.ts +1 -1
- package/dist/feedback/feedback-attachment.js +348 -41
- package/dist/feedback/feedback-attachment.js.map +1 -1
- package/dist/feedback/feedback-dialog.d.ts +1 -1
- package/dist/feedback/feedback-dialog.js.map +1 -1
- package/dist/feedback/feedback-inbox.d.ts +3 -2
- package/dist/feedback/feedback-inbox.js.map +1 -1
- package/dist/feedback/feedback-thread.d.ts +68 -253
- package/dist/feedback/feedback-thread.js +46 -10
- package/dist/feedback/feedback-thread.js.map +1 -1
- package/dist/{kit-labels-D1J2_jyD.d.ts → feedback-BxeQVzwq.d.ts} +1206 -20
- package/dist/{feedback-attachment-WFiXJ8We.d.ts → feedback-attachment-fGAzZPf0.d.ts} +178 -11
- package/dist/feedback.d.ts +66 -2
- package/dist/hooks/use-file-drop.d.ts +19 -14
- package/dist/i18n/defaults.d.ts +19 -14
- package/dist/i18n/defaults.js +19 -2
- package/dist/i18n/defaults.js.map +1 -1
- package/dist/i18n/german.d.ts +19 -14
- package/dist/i18n/german.js +84 -5
- package/dist/i18n/german.js.map +1 -1
- package/dist/i18n/kit-labels.d.ts +15 -10
- package/dist/i18n/kit-labels.js +8 -2
- package/dist/i18n/kit-labels.js.map +1 -1
- package/dist/i18n/languages.d.ts +19 -14
- package/dist/i18n/locales/de-CH.d.ts +19 -14
- package/dist/i18n/locales/en.d.ts +19 -14
- package/dist/i18n/locales/en.js +16 -0
- package/dist/i18n/locales/en.js.map +1 -1
- package/dist/i18n/locales/es.d.ts +19 -14
- package/dist/i18n/locales/es.js +83 -5
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.d.ts +19 -14
- package/dist/i18n/locales/fr.js +82 -5
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hu.d.ts +19 -14
- package/dist/i18n/locales/hu.js +85 -5
- package/dist/i18n/locales/hu.js.map +1 -1
- package/dist/i18n/locales/it.d.ts +19 -14
- package/dist/i18n/locales/it.js +84 -5
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/zh.d.ts +19 -14
- package/dist/i18n/locales/zh.js +80 -5
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/i18n/review.d.ts +19 -14
- package/dist/i18n/review.js +27 -1
- package/dist/i18n/review.js.map +1 -1
- package/dist/index.d.ts +21 -10
- package/dist/index.js +73 -2
- package/dist/index.js.map +1 -1
- package/dist/lib/column-mapping.d.ts +81 -0
- package/dist/lib/column-mapping.js +108 -0
- package/dist/lib/column-mapping.js.map +1 -0
- package/dist/lib/countries.d.ts +43 -0
- package/dist/lib/countries.js +39 -0
- package/dist/lib/countries.js.map +1 -0
- package/dist/lib/decimal-marks.d.ts +46 -0
- package/dist/lib/decimal-marks.js +40 -0
- package/dist/lib/decimal-marks.js.map +1 -0
- package/dist/lib/iban.d.ts +98 -0
- package/dist/lib/iban.js +154 -0
- package/dist/lib/iban.js.map +1 -0
- package/dist/lib/isin.d.ts +30 -0
- package/dist/lib/isin.js +36 -0
- package/dist/lib/isin.js.map +1 -0
- package/dist/lib/phone.d.ts +69 -0
- package/dist/lib/phone.js +121 -0
- package/dist/lib/phone.js.map +1 -0
- package/dist/lib/table-text.d.ts +109 -1
- package/dist/lib/table-text.js +122 -1
- package/dist/lib/table-text.js.map +1 -1
- package/dist/rhf/fields.d.ts +233 -18
- package/dist/rhf/fields.js +456 -3
- package/dist/rhf/fields.js.map +1 -1
- package/dist/rhf/form.d.ts +19 -14
- package/dist/rhf.d.ts +22 -15
- package/dist/rhf.js.map +1 -1
- package/dist/shell/app-shell.d.ts +18 -13
- package/dist/shell/top-bar-brand.d.ts +19 -14
- package/dist/shell/topbar-action-menu.d.ts +36 -3
- package/dist/shell/topbar-action-menu.js +74 -33
- package/dist/shell/topbar-action-menu.js.map +1 -1
- package/dist/shell.d.ts +18 -13
- package/dist/table-text.d.ts +1 -1
- package/dist/tour/tour.js +20 -24
- package/dist/tour/tour.js.map +1 -1
- package/dist/wizard/stepper-nav.d.ts +49 -16
- package/dist/wizard/stepper-nav.js +4 -0
- package/dist/wizard/stepper-nav.js.map +1 -1
- package/dist/wizard.d.ts +19 -14
- package/package.json +1 -1
- package/src/components/account-chips.tsx +17 -3
- package/src/components/account-settings.tsx +92 -26
- package/src/components/amount-input.tsx +68 -56
- package/src/components/autocomplete.tsx +198 -114
- package/src/components/checkbox-group.tsx +229 -0
- package/src/components/checkbox.tsx +72 -8
- package/src/components/chip.tsx +80 -10
- package/src/components/column-mapper.tsx +666 -0
- package/src/components/combobox-core.tsx +82 -9
- package/src/components/combobox.tsx +661 -340
- package/src/components/confirm-dialog.tsx +12 -8
- package/src/components/country-select.tsx +556 -0
- package/src/components/currency-select.tsx +109 -33
- package/src/components/danger-confirm.tsx +429 -82
- package/src/components/data-table-labels.ts +16 -1
- package/src/components/data-table.tsx +175 -6
- package/src/components/date-picker.tsx +595 -71
- package/src/components/entity-combobox.tsx +235 -124
- package/src/components/field-parts.tsx +403 -0
- package/src/components/field-strip.tsx +149 -0
- package/src/components/file-button.tsx +36 -3
- package/src/components/file-dropzone.tsx +106 -38
- package/src/components/form-actions.tsx +147 -6
- package/src/components/iban-input.tsx +231 -0
- package/src/components/icon-picker.tsx +47 -6
- package/src/components/inline-edit-field.tsx +533 -0
- package/src/components/language-select.tsx +78 -0
- package/src/components/line-items.tsx +35 -2
- package/src/components/list.tsx +55 -6
- package/src/components/money-field.tsx +13 -0
- package/src/components/month-picker.tsx +400 -63
- package/src/components/multi-entity-combobox.tsx +207 -120
- package/src/components/multi-select.tsx +80 -58
- package/src/components/number-field.tsx +28 -46
- package/src/components/number-input.tsx +210 -43
- package/src/components/one-time-code-input.tsx +288 -0
- package/src/components/phone-input.tsx +299 -0
- package/src/components/reauth-dialog.tsx +17 -18
- package/src/components/sign-chip.tsx +103 -0
- package/src/components/swatch-picker.tsx +143 -31
- package/src/components/switch.tsx +58 -7
- package/src/components/tile-radio.tsx +145 -29
- package/src/components/time-input.tsx +8 -1
- package/src/components/toggle-group.tsx +206 -73
- package/src/components/trigger-aria.ts +5 -0
- package/src/components/ui.tsx +479 -138
- package/src/data-table.ts +2 -1
- package/src/feedback/feedback-attachment.tsx +597 -46
- package/src/feedback/feedback-dialog.tsx +9 -3
- package/src/feedback/feedback-inbox.tsx +3 -2
- package/src/feedback/feedback-thread.tsx +113 -9
- package/src/i18n/defaults.ts +18 -1
- package/src/i18n/german.ts +89 -0
- package/src/i18n/kit-labels.tsx +82 -2
- package/src/i18n/locales/en.ts +36 -4
- package/src/i18n/locales/es.ts +87 -0
- package/src/i18n/locales/fr.ts +87 -0
- package/src/i18n/locales/hu.ts +83 -0
- package/src/i18n/locales/it.ts +88 -0
- package/src/i18n/locales/zh.ts +76 -0
- package/src/i18n/review.ts +26 -0
- package/src/index.ts +71 -3
- package/src/lib/column-mapping.ts +234 -0
- package/src/lib/countries.ts +91 -0
- package/src/lib/decimal-marks.ts +99 -0
- package/src/lib/iban.ts +171 -0
- package/src/lib/isin.ts +62 -0
- package/src/lib/phone.ts +211 -0
- package/src/lib/table-text.ts +271 -0
- package/src/rhf/fields.tsx +860 -9
- package/src/rhf.ts +3 -1
- package/src/shell/topbar-action-menu.tsx +134 -38
- package/src/tour/tour.tsx +66 -28
- package/src/wizard/stepper-nav.tsx +35 -1
|
@@ -101,6 +101,53 @@ export function settleEnabled(rows: readonly { disabled?: boolean }[], i: number
|
|
|
101
101
|
* kit's soft-disabled look (`DangerConfirm`, `SignaturePad`). */
|
|
102
102
|
export const DISABLED_ROW_CLASS = "cursor-not-allowed opacity-50 hover:bg-transparent";
|
|
103
103
|
|
|
104
|
+
/**
|
|
105
|
+
* Whether an entity picker offers its create row — one rule for
|
|
106
|
+
* {@link EntityCombobox}, {@link MultiEntityCombobox} and {@link InlineEntityCombobox}.
|
|
107
|
+
*
|
|
108
|
+
* With a query: while the trimmed query names no option exactly (case-insensitive) —
|
|
109
|
+
* an exact hit is a record the list is already showing, and a second way to "make" it
|
|
110
|
+
* would mint a duplicate. With NO query: only when the caller named the row for that
|
|
111
|
+
* case (`createEmptyLabel`) — a row reading `Create “”` says nothing, and the kit cannot
|
|
112
|
+
* know the noun ("Create cash account") that would make it say something (keksdose G9).
|
|
113
|
+
*
|
|
114
|
+
* `names` is what the query is compared against: the loaded rows for a panel picker
|
|
115
|
+
* (its async list is all it knows), every option for the inline one.
|
|
116
|
+
*/
|
|
117
|
+
export function offersCreate(
|
|
118
|
+
onCreate: unknown,
|
|
119
|
+
query: string,
|
|
120
|
+
names: readonly string[],
|
|
121
|
+
createEmptyLabel: string | undefined,
|
|
122
|
+
): boolean {
|
|
123
|
+
if (!onCreate) return false;
|
|
124
|
+
if (!query) return Boolean(createEmptyLabel);
|
|
125
|
+
const q = query.toLowerCase();
|
|
126
|
+
return !names.some((n) => n.toLowerCase() === q);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* {@link EndHintRow}'s `hint` and `className` for a combobox-family field, keeping the
|
|
131
|
+
* 0.22 rule (keksdose): a field that was passed `hint` at all — even `undefined` — keeps
|
|
132
|
+
* ONE box, so a hint coming and going never rebuilds the control under the cursor.
|
|
133
|
+
*
|
|
134
|
+
* A text hint is a caption after the control and never moved it; the case this covers
|
|
135
|
+
* is the "?" (a {@link FieldHint}) on a field with no label line, which sits at the end
|
|
136
|
+
* edge in a row of its own. Without this the row existed only while the "?" did, and
|
|
137
|
+
* the control was re-parented — remounted, focus and caret lost — each time it came or
|
|
138
|
+
* went. With `hint` passed the row stays, its end slot empty and its gap closed, so
|
|
139
|
+
* nothing on screen moves either.
|
|
140
|
+
*/
|
|
141
|
+
export function endHintRowProps(
|
|
142
|
+
hintPassed: boolean,
|
|
143
|
+
hasLabel: boolean,
|
|
144
|
+
labelHint: ReactNode | undefined,
|
|
145
|
+
): { hint: ReactNode | undefined; className?: string } {
|
|
146
|
+
if (hasLabel) return { hint: undefined };
|
|
147
|
+
if (labelHint !== undefined) return { hint: labelHint };
|
|
148
|
+
return hintPassed ? { hint: null, className: "gap-0" } : { hint: undefined };
|
|
149
|
+
}
|
|
150
|
+
|
|
104
151
|
/**
|
|
105
152
|
* The family's floating label, as a real `<label for>` (lenkbank): the input is then
|
|
106
153
|
* named the way {@link Input}'s is, so `getByLabelText` and any helper that walks
|
|
@@ -463,6 +510,13 @@ export interface ComboboxPanelProps<V extends string | number>
|
|
|
463
510
|
showCreate: boolean;
|
|
464
511
|
onCreate: () => void;
|
|
465
512
|
createContent: ReactNode;
|
|
513
|
+
/**
|
|
514
|
+
* The create row is shown but not takeable, and this says why — the lock's reason
|
|
515
|
+
* when the picker's `createCommit` meets a locked {@link WriteLockProvider}. Rendered
|
|
516
|
+
* as the row's second line rather than a tooltip, as {@link ComboOption.disabled}
|
|
517
|
+
* asks of every disabled row: a hover is the one explanation a phone cannot show.
|
|
518
|
+
*/
|
|
519
|
+
createDisabledReason?: ReactNode;
|
|
466
520
|
/** What the sheet calls itself on a phone — the field's label. Ignored on
|
|
467
521
|
* desktop, where the panel sits under the field that already says it. */
|
|
468
522
|
sheetTitle?: ReactNode;
|
|
@@ -508,6 +562,7 @@ export function ComboboxPanel<V extends string | number>({
|
|
|
508
562
|
showCreate,
|
|
509
563
|
onCreate,
|
|
510
564
|
createContent,
|
|
565
|
+
createDisabledReason,
|
|
511
566
|
sheetTitle,
|
|
512
567
|
closeLabel,
|
|
513
568
|
loadErrorLabel,
|
|
@@ -515,6 +570,7 @@ export function ComboboxPanel<V extends string | number>({
|
|
|
515
570
|
style,
|
|
516
571
|
...rest
|
|
517
572
|
}: ComboboxPanelProps<V>) {
|
|
573
|
+
const createLocked = hasMessage(createDisabledReason);
|
|
518
574
|
const {
|
|
519
575
|
rect,
|
|
520
576
|
placement,
|
|
@@ -534,8 +590,11 @@ export function ComboboxPanel<V extends string | number>({
|
|
|
534
590
|
// Same core, same results, same handlers — only the container differs, so the
|
|
535
591
|
// two presentations cannot drift in what they offer.
|
|
536
592
|
const isPhone = useMediaQuery(PHONE_QUERY, false);
|
|
537
|
-
// Every row the keyboard can land on, the create row included
|
|
538
|
-
|
|
593
|
+
// Every row the keyboard can land on, the create row included — passed over, like a
|
|
594
|
+
// disabled option, while a write lock holds it.
|
|
595
|
+
const rows: readonly { disabled?: boolean }[] = showCreate
|
|
596
|
+
? [...results, { disabled: createLocked }]
|
|
597
|
+
: results;
|
|
539
598
|
const rowCount = rows.length;
|
|
540
599
|
const optionId = (index: number) => `${listboxId}-option-${index}`;
|
|
541
600
|
// The core opens on row 0 and knows nothing of `disabled`; the highlight is settled
|
|
@@ -575,7 +634,7 @@ export function ComboboxPanel<V extends string | number>({
|
|
|
575
634
|
e.preventDefault();
|
|
576
635
|
if (current < 0) return;
|
|
577
636
|
if (current < results.length) onChoose(results[current]);
|
|
578
|
-
else if (showCreate) onCreate();
|
|
637
|
+
else if (showCreate && !createLocked) onCreate();
|
|
579
638
|
} else if (e.key === "Tab") {
|
|
580
639
|
// The panel is PORTALLED to <body>, so the browser's own Tab would move from
|
|
581
640
|
// here to whatever follows the portal — i.e. off the end of the document. The
|
|
@@ -747,24 +806,38 @@ export function ComboboxPanel<V extends string | number>({
|
|
|
747
806
|
// been taken. Whether the keyboard is ON it is `aria-activedescendant`'s
|
|
748
807
|
// job to say.
|
|
749
808
|
aria-selected={false}
|
|
809
|
+
aria-disabled={createLocked || undefined}
|
|
750
810
|
tabIndex={-1}
|
|
751
811
|
onMouseDown={(e) => {
|
|
752
812
|
e.preventDefault();
|
|
753
|
-
onCreate();
|
|
813
|
+
if (!createLocked) onCreate();
|
|
814
|
+
}}
|
|
815
|
+
onMouseEnter={() => {
|
|
816
|
+
if (!createLocked) setActive(results.length);
|
|
754
817
|
}}
|
|
755
|
-
onMouseEnter={() => setActive(results.length)}
|
|
756
818
|
className={cn(
|
|
757
819
|
isPhone
|
|
758
820
|
? SHEET_ROW_CLASS
|
|
759
821
|
: "flex w-full items-center gap-2 px-3 py-1.5 text-start text-sm",
|
|
760
822
|
"text-[var(--text-secondary)]",
|
|
761
|
-
|
|
762
|
-
?
|
|
763
|
-
:
|
|
823
|
+
createLocked
|
|
824
|
+
? DISABLED_ROW_CLASS
|
|
825
|
+
: current === results.length && !isPhone
|
|
826
|
+
? "bg-[var(--bg-active)]"
|
|
827
|
+
: !isPhone && "hover:bg-[var(--bg-hover)]",
|
|
828
|
+
// After SHEET_ROW_CLASS, so its hover is the one cancelled.
|
|
829
|
+
createLocked && isPhone && DISABLED_ROW_CLASS,
|
|
764
830
|
)}
|
|
765
831
|
>
|
|
766
832
|
<Plus className="size-4 shrink-0" />
|
|
767
|
-
<span className="
|
|
833
|
+
<span className="min-w-0 flex-1">
|
|
834
|
+
<span className="block truncate">{createContent}</span>
|
|
835
|
+
{createLocked && (
|
|
836
|
+
<span className="block truncate text-xs text-[var(--text-placeholder)]">
|
|
837
|
+
{createDisabledReason}
|
|
838
|
+
</span>
|
|
839
|
+
)}
|
|
840
|
+
</span>
|
|
768
841
|
</button>
|
|
769
842
|
</li>
|
|
770
843
|
)}
|