@neo4j-ndl/react 4.21.2 → 4.22.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/lib/cjs/_common/form-control/FormFieldLabel.js +52 -0
- package/lib/cjs/_common/form-control/FormFieldLabel.js.map +1 -0
- package/lib/cjs/_common/form-control/FormFieldMessage.js +72 -0
- package/lib/cjs/_common/form-control/FormFieldMessage.js.map +1 -0
- package/lib/cjs/_common/form-control/form-control-types.js +23 -0
- package/lib/cjs/_common/form-control/form-control-types.js.map +1 -0
- package/lib/cjs/_common/form-control/index.js +39 -0
- package/lib/cjs/_common/form-control/index.js.map +1 -0
- package/lib/cjs/_common/form-control/use-form-field.js +76 -0
- package/lib/cjs/_common/form-control/use-form-field.js.map +1 -0
- package/lib/cjs/_common/form-control/use-inline-field-label.js +76 -0
- package/lib/cjs/_common/form-control/use-inline-field-label.js.map +1 -0
- package/lib/cjs/checkbox/Checkbox.js +9 -21
- package/lib/cjs/checkbox/Checkbox.js.map +1 -1
- package/lib/cjs/combobox/Combobox.js +61 -45
- package/lib/cjs/combobox/Combobox.js.map +1 -1
- package/lib/cjs/combobox/combobox-types.js.map +1 -1
- package/lib/cjs/date-picker/DatePicker.js.map +1 -1
- package/lib/cjs/dropzone/stories/dropzone-full.story.js +5 -5
- package/lib/cjs/dropzone/stories/dropzone-full.story.js.map +1 -1
- package/lib/cjs/helpers/index.js +1 -0
- package/lib/cjs/helpers/index.js.map +1 -1
- package/lib/cjs/helpers/platform.js +59 -0
- package/lib/cjs/helpers/platform.js.map +1 -0
- package/lib/cjs/kbd/kbd-utils.js +6 -22
- package/lib/cjs/kbd/kbd-utils.js.map +1 -1
- package/lib/cjs/next/tree-view/TreeView.js +384 -66
- package/lib/cjs/next/tree-view/TreeView.js.map +1 -1
- package/lib/cjs/next/tree-view/selection.js +181 -0
- package/lib/cjs/next/tree-view/selection.js.map +1 -0
- package/lib/cjs/next/tree-view/stories/index.js +13 -1
- package/lib/cjs/next/tree-view/stories/index.js.map +1 -1
- package/lib/cjs/next/tree-view/stories/tree-view-large.story.js +57 -0
- package/lib/cjs/next/tree-view/stories/tree-view-large.story.js.map +1 -0
- package/lib/cjs/next/tree-view/stories/tree-view-lazy.story.js +1 -0
- package/lib/cjs/next/tree-view/stories/tree-view-lazy.story.js.map +1 -1
- package/lib/cjs/next/tree-view/stories/tree-view-multi.story.js +16 -40
- package/lib/cjs/next/tree-view/stories/tree-view-multi.story.js.map +1 -1
- package/lib/cjs/next/tree-view/stories/tree-view-multiple-replace.story.js +38 -0
- package/lib/cjs/next/tree-view/stories/tree-view-multiple-replace.story.js.map +1 -0
- package/lib/cjs/next/tree-view/stories/tree-view-non-selectable-folders.story.js +7 -4
- package/lib/cjs/next/tree-view/stories/tree-view-non-selectable-folders.story.js.map +1 -1
- package/lib/cjs/next/tree-view/stories/tree-view-root-selection.story.js +125 -0
- package/lib/cjs/next/tree-view/stories/tree-view-root-selection.story.js.map +1 -0
- package/lib/cjs/radio/Radio.js +12 -22
- package/lib/cjs/radio/Radio.js.map +1 -1
- package/lib/cjs/select/Select.js +14 -5
- package/lib/cjs/select/Select.js.map +1 -1
- package/lib/cjs/select/types.js.map +1 -1
- package/lib/cjs/switch/Switch.js +9 -21
- package/lib/cjs/switch/Switch.js.map +1 -1
- package/lib/cjs/text-area/TextArea.js +8 -21
- package/lib/cjs/text-area/TextArea.js.map +1 -1
- package/lib/cjs/text-input/TextInput.js +15 -38
- package/lib/cjs/text-input/TextInput.js.map +1 -1
- package/lib/cjs/text-input/stories/text-input-sizes.story.js +1 -1
- package/lib/cjs/text-input/stories/text-input-sizes.story.js.map +1 -1
- package/lib/cjs/time-picker/TimePicker.js +13 -7
- package/lib/cjs/time-picker/TimePicker.js.map +1 -1
- package/lib/cjs/timezone-picker/TimeZonePicker.js +13 -7
- package/lib/cjs/timezone-picker/TimeZonePicker.js.map +1 -1
- package/lib/cjs/toast/ToastControlled.js +1 -1
- package/lib/cjs/toast/ToastControlled.js.map +1 -1
- package/lib/esm/_common/form-control/FormFieldLabel.js +45 -0
- package/lib/esm/_common/form-control/FormFieldLabel.js.map +1 -0
- package/lib/esm/_common/form-control/FormFieldMessage.js +65 -0
- package/lib/esm/_common/form-control/FormFieldMessage.js.map +1 -0
- package/lib/esm/_common/form-control/form-control-types.js +22 -0
- package/lib/esm/_common/form-control/form-control-types.js.map +1 -0
- package/lib/esm/_common/form-control/index.js +32 -0
- package/lib/esm/_common/form-control/index.js.map +1 -0
- package/lib/esm/_common/form-control/use-form-field.js +72 -0
- package/lib/esm/_common/form-control/use-form-field.js.map +1 -0
- package/lib/esm/_common/form-control/use-inline-field-label.js +69 -0
- package/lib/esm/_common/form-control/use-inline-field-label.js.map +1 -0
- package/lib/esm/checkbox/Checkbox.js +10 -22
- package/lib/esm/checkbox/Checkbox.js.map +1 -1
- package/lib/esm/combobox/Combobox.js +62 -46
- package/lib/esm/combobox/Combobox.js.map +1 -1
- package/lib/esm/combobox/combobox-types.js.map +1 -1
- package/lib/esm/date-picker/DatePicker.js.map +1 -1
- package/lib/esm/dropzone/stories/dropzone-full.story.js +5 -5
- package/lib/esm/dropzone/stories/dropzone-full.story.js.map +1 -1
- package/lib/esm/helpers/index.js +1 -0
- package/lib/esm/helpers/index.js.map +1 -1
- package/lib/esm/helpers/platform.js +55 -0
- package/lib/esm/helpers/platform.js.map +1 -0
- package/lib/esm/kbd/kbd-utils.js +2 -18
- package/lib/esm/kbd/kbd-utils.js.map +1 -1
- package/lib/esm/next/tree-view/TreeView.js +385 -67
- package/lib/esm/next/tree-view/TreeView.js.map +1 -1
- package/lib/esm/next/tree-view/selection.js +175 -0
- package/lib/esm/next/tree-view/selection.js.map +1 -0
- package/lib/esm/next/tree-view/stories/index.js +9 -0
- package/lib/esm/next/tree-view/stories/index.js.map +1 -1
- package/lib/esm/next/tree-view/stories/tree-view-large.story.js +55 -0
- package/lib/esm/next/tree-view/stories/tree-view-large.story.js.map +1 -0
- package/lib/esm/next/tree-view/stories/tree-view-lazy.story.js +1 -0
- package/lib/esm/next/tree-view/stories/tree-view-lazy.story.js.map +1 -1
- package/lib/esm/next/tree-view/stories/tree-view-multi.story.js +16 -40
- package/lib/esm/next/tree-view/stories/tree-view-multi.story.js.map +1 -1
- package/lib/esm/next/tree-view/stories/tree-view-multiple-replace.story.js +36 -0
- package/lib/esm/next/tree-view/stories/tree-view-multiple-replace.story.js.map +1 -0
- package/lib/esm/next/tree-view/stories/tree-view-non-selectable-folders.story.js +7 -4
- package/lib/esm/next/tree-view/stories/tree-view-non-selectable-folders.story.js.map +1 -1
- package/lib/esm/next/tree-view/stories/tree-view-root-selection.story.js +123 -0
- package/lib/esm/next/tree-view/stories/tree-view-root-selection.story.js.map +1 -0
- package/lib/esm/radio/Radio.js +12 -22
- package/lib/esm/radio/Radio.js.map +1 -1
- package/lib/esm/select/Select.js +14 -5
- package/lib/esm/select/Select.js.map +1 -1
- package/lib/esm/select/types.js.map +1 -1
- package/lib/esm/switch/Switch.js +10 -22
- package/lib/esm/switch/Switch.js.map +1 -1
- package/lib/esm/text-area/TextArea.js +9 -22
- package/lib/esm/text-area/TextArea.js.map +1 -1
- package/lib/esm/text-input/TextInput.js +15 -38
- package/lib/esm/text-input/TextInput.js.map +1 -1
- package/lib/esm/text-input/stories/text-input-sizes.story.js +1 -1
- package/lib/esm/text-input/stories/text-input-sizes.story.js.map +1 -1
- package/lib/esm/time-picker/TimePicker.js +13 -7
- package/lib/esm/time-picker/TimePicker.js.map +1 -1
- package/lib/esm/timezone-picker/TimeZonePicker.js +13 -7
- package/lib/esm/timezone-picker/TimeZonePicker.js.map +1 -1
- package/lib/esm/toast/ToastControlled.js +1 -1
- package/lib/esm/toast/ToastControlled.js.map +1 -1
- package/lib/types/_common/form-control/FormFieldLabel.d.ts +58 -0
- package/lib/types/_common/form-control/FormFieldLabel.d.ts.map +1 -0
- package/lib/types/_common/form-control/FormFieldMessage.d.ts +46 -0
- package/lib/types/_common/form-control/FormFieldMessage.d.ts.map +1 -0
- package/lib/types/_common/form-control/form-control-types.d.ts +92 -0
- package/lib/types/_common/form-control/form-control-types.d.ts.map +1 -0
- package/lib/types/_common/form-control/index.d.ts +33 -0
- package/lib/types/_common/form-control/index.d.ts.map +1 -0
- package/lib/types/_common/form-control/use-form-field.d.ts +53 -0
- package/lib/types/_common/form-control/use-form-field.d.ts.map +1 -0
- package/lib/types/_common/form-control/use-inline-field-label.d.ts +69 -0
- package/lib/types/_common/form-control/use-inline-field-label.d.ts.map +1 -0
- package/lib/types/checkbox/Checkbox.d.ts.map +1 -1
- package/lib/types/combobox/Combobox.d.ts.map +1 -1
- package/lib/types/combobox/combobox-types.d.ts +1 -1
- package/lib/types/combobox/combobox-types.d.ts.map +1 -1
- package/lib/types/helpers/index.d.ts +1 -0
- package/lib/types/helpers/index.d.ts.map +1 -1
- package/lib/types/helpers/platform.d.ts +29 -0
- package/lib/types/helpers/platform.d.ts.map +1 -0
- package/lib/types/kbd/kbd-utils.d.ts +2 -5
- package/lib/types/kbd/kbd-utils.d.ts.map +1 -1
- package/lib/types/next/tree-view/TreeView.d.ts +29 -5
- package/lib/types/next/tree-view/TreeView.d.ts.map +1 -1
- package/lib/types/next/tree-view/selection.d.ts +78 -0
- package/lib/types/next/tree-view/selection.d.ts.map +1 -0
- package/lib/types/next/tree-view/stories/index.d.ts +6 -0
- package/lib/types/next/tree-view/stories/index.d.ts.map +1 -1
- package/lib/types/next/tree-view/stories/tree-view-large.story.d.ts +24 -0
- package/lib/types/next/tree-view/stories/tree-view-large.story.d.ts.map +1 -0
- package/lib/types/next/tree-view/stories/tree-view-lazy.story.d.ts.map +1 -1
- package/lib/types/next/tree-view/stories/tree-view-multi.story.d.ts +10 -0
- package/lib/types/next/tree-view/stories/tree-view-multi.story.d.ts.map +1 -1
- package/lib/types/next/tree-view/stories/tree-view-multiple-replace.story.d.ts +29 -0
- package/lib/types/next/tree-view/stories/tree-view-multiple-replace.story.d.ts.map +1 -0
- package/lib/types/next/tree-view/stories/tree-view-non-selectable-folders.story.d.ts +5 -0
- package/lib/types/next/tree-view/stories/tree-view-non-selectable-folders.story.d.ts.map +1 -1
- package/lib/types/next/tree-view/stories/tree-view-root-selection.story.d.ts +24 -0
- package/lib/types/next/tree-view/stories/tree-view-root-selection.story.d.ts.map +1 -0
- package/lib/types/radio/Radio.d.ts.map +1 -1
- package/lib/types/select/Select.d.ts.map +1 -1
- package/lib/types/select/types.d.ts.map +1 -1
- package/lib/types/switch/Switch.d.ts.map +1 -1
- package/lib/types/text-area/TextArea.d.ts.map +1 -1
- package/lib/types/text-input/TextInput.d.ts.map +1 -1
- package/lib/types/text-input/stories/text-input-sizes.story.d.ts.map +1 -1
- package/lib/types/time-picker/TimePicker.d.ts +3 -1
- package/lib/types/time-picker/TimePicker.d.ts.map +1 -1
- package/lib/types/timezone-picker/TimeZonePicker.d.ts +4 -1
- package/lib/types/timezone-picker/TimeZonePicker.d.ts.map +1 -1
- package/package.json +2 -2
- package/skills/ndl-react/SKILL.md +1 -1
- package/skills/ndl-react/components/color-picker.md +32 -32
- package/skills/ndl-react/components/combobox.md +2 -2
- package/skills/ndl-react/components/dropzone.md +5 -5
- package/skills/ndl-react/components/next/tree-view.md +444 -104
- package/skills/ndl-react/components/text-input.md +6 -0
- package/skills/ndl-react/components/time-picker.md +1 -0
- package/skills/ndl-react/components/timezone-picker.md +1 -0
|
@@ -40,6 +40,7 @@ const react_1 = require("@floating-ui/react");
|
|
|
40
40
|
const react_virtual_1 = require("@tanstack/react-virtual");
|
|
41
41
|
const classnames_1 = __importDefault(require("classnames"));
|
|
42
42
|
const react_2 = require("react");
|
|
43
|
+
const form_control_1 = require("../_common/form-control");
|
|
43
44
|
const use_semi_controlled_state_1 = require("../_common/use-semi-controlled-state");
|
|
44
45
|
const utils_1 = require("../_common/utils");
|
|
45
46
|
const checkbox_1 = require("../checkbox");
|
|
@@ -108,9 +109,6 @@ const Combobox = ({ label, name, formId, autoComplete, triggerRef, hasVisuallyHi
|
|
|
108
109
|
const listboxId = `${baseId}-listbox`;
|
|
109
110
|
const panelId = `${baseId}-panel`;
|
|
110
111
|
const triggerId = `${baseId}-trigger`;
|
|
111
|
-
const labelId = `${baseId}-label`;
|
|
112
|
-
const helpTextId = `${baseId}-help-text`;
|
|
113
|
-
const errorTextId = `${baseId}-error-text`;
|
|
114
112
|
const initialValue = (0, combobox_utils_1.getInitialValue)(value, defaultValue, isMulti);
|
|
115
113
|
const [selectedValue, setSelectedValue, resetSelectedValue] = (0, use_semi_controlled_state_1.useSemicontrolledState)({
|
|
116
114
|
isControlled: value !== undefined,
|
|
@@ -468,13 +466,22 @@ const Combobox = ({ label, name, formId, autoComplete, triggerRef, hasVisuallyHi
|
|
|
468
466
|
? actionRows.map((row) => getOptionId(row)).join(' ')
|
|
469
467
|
: undefined;
|
|
470
468
|
const isDialogPanel = isSearchable;
|
|
471
|
-
//
|
|
472
|
-
//
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
const
|
|
476
|
-
|
|
477
|
-
|
|
469
|
+
// The shared form field resolves the ids and which message is displayed -
|
|
470
|
+
// an error always replaces the help text. A native validation failure
|
|
471
|
+
// reported by the hidden form control acts as the error while no errorText
|
|
472
|
+
// is set.
|
|
473
|
+
const { field: formField, controlProps: fieldControlProps } = (0, form_control_1.useFormField)({
|
|
474
|
+
baseId,
|
|
475
|
+
controlId: triggerId,
|
|
476
|
+
errorText: errorText !== null && errorText !== void 0 ? errorText : nativeValidationMessage,
|
|
477
|
+
hasRequiredIndicator,
|
|
478
|
+
hasVisuallyHiddenLabel,
|
|
479
|
+
helpText,
|
|
480
|
+
isRequired,
|
|
481
|
+
label,
|
|
482
|
+
});
|
|
483
|
+
const hasError = formField.hasError;
|
|
484
|
+
const labelId = formField.labelId;
|
|
478
485
|
const triggerAria = {
|
|
479
486
|
'aria-activedescendant': isPanelOpen && !isSearchable ? activeOptionId : undefined,
|
|
480
487
|
'aria-controls': getTriggerControlsId({
|
|
@@ -484,11 +491,11 @@ const Combobox = ({ label, name, formId, autoComplete, triggerRef, hasVisuallyHi
|
|
|
484
491
|
listboxId,
|
|
485
492
|
panelId,
|
|
486
493
|
}),
|
|
487
|
-
'aria-describedby':
|
|
494
|
+
'aria-describedby': fieldControlProps['aria-describedby'],
|
|
488
495
|
'aria-disabled': isDisabled ? true : undefined,
|
|
489
496
|
'aria-expanded': isPanelOpen,
|
|
490
497
|
'aria-haspopup': isDialogPanel ? 'dialog' : 'listbox',
|
|
491
|
-
'aria-invalid':
|
|
498
|
+
'aria-invalid': fieldControlProps['aria-invalid'],
|
|
492
499
|
'aria-required': isRequired ? true : undefined,
|
|
493
500
|
// The label points at the trigger through `htmlFor`, so clicking it moves
|
|
494
501
|
// focus to the trigger.
|
|
@@ -508,13 +515,13 @@ const Combobox = ({ label, name, formId, autoComplete, triggerRef, hasVisuallyHi
|
|
|
508
515
|
// is referenced, keeping "Optional" out of the accessible name.
|
|
509
516
|
'aria-labelledby': labelId, ref: builtInTriggerRef });
|
|
510
517
|
const field = {
|
|
511
|
-
errorText:
|
|
512
|
-
errorTextId,
|
|
518
|
+
errorText: formField.errorText,
|
|
519
|
+
errorTextId: formField.errorTextId,
|
|
513
520
|
hasError,
|
|
514
521
|
hasRequiredIndicator,
|
|
515
522
|
hasVisuallyHiddenLabel,
|
|
516
523
|
helpText,
|
|
517
|
-
helpTextId,
|
|
524
|
+
helpTextId: formField.helpTextId,
|
|
518
525
|
isRequired,
|
|
519
526
|
label,
|
|
520
527
|
labelId,
|
|
@@ -602,6 +609,42 @@ const getSelectedOptions = (value) => {
|
|
|
602
609
|
}
|
|
603
610
|
return value === null ? [] : [value];
|
|
604
611
|
};
|
|
612
|
+
/**
|
|
613
|
+
* The public `ComboboxFieldState` keeps its own shape - a custom trigger
|
|
614
|
+
* renders from it - so the built-in field parts map it onto the shared form
|
|
615
|
+
* field state (`_common/form-control`) instead of taking it directly.
|
|
616
|
+
*/
|
|
617
|
+
const toFormFieldState = (field) => {
|
|
618
|
+
const hasHelpText = Boolean(field.helpText) && !field.hasError;
|
|
619
|
+
return {
|
|
620
|
+
controlId: field.triggerId,
|
|
621
|
+
errorText: field.errorText,
|
|
622
|
+
errorTextId: field.errorTextId,
|
|
623
|
+
hasError: field.hasError,
|
|
624
|
+
hasRequiredIndicator: field.hasRequiredIndicator,
|
|
625
|
+
hasVisuallyHiddenLabel: field.hasVisuallyHiddenLabel,
|
|
626
|
+
helpText: field.helpText,
|
|
627
|
+
helpTextId: field.helpTextId,
|
|
628
|
+
isRequired: field.isRequired,
|
|
629
|
+
label: field.label,
|
|
630
|
+
labelId: field.labelId,
|
|
631
|
+
message: field.hasError
|
|
632
|
+
? field.errorText
|
|
633
|
+
: hasHelpText
|
|
634
|
+
? field.helpText
|
|
635
|
+
: undefined,
|
|
636
|
+
messageId: field.hasError
|
|
637
|
+
? field.errorTextId
|
|
638
|
+
: hasHelpText
|
|
639
|
+
? field.helpTextId
|
|
640
|
+
: undefined,
|
|
641
|
+
messageSeverity: field.hasError
|
|
642
|
+
? 'error'
|
|
643
|
+
: hasHelpText
|
|
644
|
+
? 'help'
|
|
645
|
+
: undefined,
|
|
646
|
+
};
|
|
647
|
+
};
|
|
605
648
|
/**
|
|
606
649
|
* A native select mirrors the custom control for submission, autofill,
|
|
607
650
|
* constraint validation, and reset. It is hidden from assistive technology
|
|
@@ -698,6 +741,7 @@ const Control = ({ triggerProps, state, field, placeholder, isClearable, isClean
|
|
|
698
741
|
const { isOpen, isMulti, isDisabled, selectedOptions, clear, remove } = state;
|
|
699
742
|
const { MultiValue, SingleValue } = components;
|
|
700
743
|
const { ref: triggerRef } = triggerProps, triggerAria = __rest(triggerProps, ["ref"]);
|
|
744
|
+
const sharedField = toFormFieldState(field);
|
|
701
745
|
const hasValue = selectedOptions.length > 0;
|
|
702
746
|
const singleValueOption = isMulti ? undefined : selectedOptions[0];
|
|
703
747
|
// Selected values are shown as tags, so the trigger renders nothing and is
|
|
@@ -807,7 +851,7 @@ const Control = ({ triggerProps, state, field, placeholder, isClearable, isClean
|
|
|
807
851
|
return (
|
|
808
852
|
// A fragment, so the label, the control, and the message are rows of the
|
|
809
853
|
// combobox itself. A custom trigger replaces all three.
|
|
810
|
-
(0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(
|
|
854
|
+
(0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(form_control_1.FormFieldLabel, { field: sharedField, size: size, onLabelClick: handleLabelClick }), (0, jsx_runtime_1.jsxs)("div", Object.assign({ ref: referenceRef, className: (0, classnames_1.default)('ndl-combobox-control', {
|
|
811
855
|
'ndl-clean': isClean,
|
|
812
856
|
'ndl-disabled': isDisabled,
|
|
813
857
|
'ndl-has-error': field.hasError,
|
|
@@ -853,35 +897,7 @@ const Control = ({ triggerProps, state, field, placeholder, isClearable, isClean
|
|
|
853
897
|
// Select.
|
|
854
898
|
(0, jsx_runtime_1.jsxs)("div", { className: "ndl-combobox-clear", children: [(0, jsx_runtime_1.jsx)("button", { type: "button", className: "ndl-combobox-clear-button", "aria-label": "Clear selection", onKeyDown: handleAuxiliaryActionKeyDown, onClick: handleClear, children: (0, jsx_runtime_1.jsx)(heroIcons_1.XMarkIconOutline, {}) }), (0, jsx_runtime_1.jsx)("div", { className: "ndl-combobox-divider" })] })), (0, jsx_runtime_1.jsx)("div", { className: (0, classnames_1.default)('ndl-combobox-dropdown-indicator', {
|
|
855
899
|
'ndl-open': isOpen,
|
|
856
|
-
}), children: (0, jsx_runtime_1.jsx)(heroIcons_1.ChevronDownIconOutline, { "aria-hidden": "true", className: "ndl-combobox-icon" }) })] })] })), (0, jsx_runtime_1.jsx)(
|
|
857
|
-
};
|
|
858
|
-
/**
|
|
859
|
-
* The trigger is a button with `role="combobox"`, which takes its accessible
|
|
860
|
-
* name from the author rather than from its content, so the label is referenced
|
|
861
|
-
* through `aria-labelledby` instead of wrapping the control in a `<label>`.
|
|
862
|
-
* The label is still a `<label>` associated through `htmlFor`, and clicking it
|
|
863
|
-
* moves focus to the trigger, as with a native select. It deliberately does
|
|
864
|
-
* not open the panel, which is also what a native select label leaves alone.
|
|
865
|
-
*/
|
|
866
|
-
const FieldLabel = ({ field, size, onLabelClick }) => {
|
|
867
|
-
const { label, labelId, triggerId, hasVisuallyHiddenLabel, hasRequiredIndicator, isRequired, } = field;
|
|
868
|
-
const variant = size === 'large' ? 'body-large' : 'body-medium';
|
|
869
|
-
return ((0, jsx_runtime_1.jsxs)("div", { className: (0, classnames_1.default)('ndl-combobox-label-row', {
|
|
870
|
-
'ndl-visually-hidden': hasVisuallyHiddenLabel,
|
|
871
|
-
}), children: [(0, jsx_runtime_1.jsx)(typography_1.Typography, { as: "label", variant: variant, className: "ndl-combobox-label", htmlAttributes: {
|
|
872
|
-
htmlFor: triggerId,
|
|
873
|
-
id: labelId,
|
|
874
|
-
onClick: onLabelClick,
|
|
875
|
-
}, children: label }), hasRequiredIndicator && ((0, jsx_runtime_1.jsx)(typography_1.Typography, { variant: variant, className: "ndl-combobox-label-indicator", children: isRequired ? 'Required' : 'Optional' }))] }));
|
|
876
|
-
};
|
|
877
|
-
/**
|
|
878
|
-
* Rendered whether or not there is a message, so the live region is in the
|
|
879
|
-
* document before the text arrives and a validation error is announced.
|
|
880
|
-
*/
|
|
881
|
-
const FieldMessage = ({ field, size }) => {
|
|
882
|
-
const { errorText, hasError, helpText, helpTextId, errorTextId } = field;
|
|
883
|
-
const variant = size === 'large' ? 'body-medium' : 'body-small';
|
|
884
|
-
return ((0, jsx_runtime_1.jsxs)("div", { className: "ndl-combobox-message", "aria-live": "polite", children: [hasError && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", { className: "ndl-error-icon", children: (0, jsx_runtime_1.jsx)(heroIcons_1.ExclamationCircleIconSolid, {}) }), (0, jsx_runtime_1.jsx)(typography_1.Typography, { variant: variant, className: "ndl-error-text", htmlAttributes: { id: errorTextId }, children: errorText })] })), !hasError && Boolean(helpText) && ((0, jsx_runtime_1.jsx)(typography_1.Typography, { variant: variant, htmlAttributes: { id: helpTextId }, children: helpText }))] }));
|
|
900
|
+
}), children: (0, jsx_runtime_1.jsx)(heroIcons_1.ChevronDownIconOutline, { "aria-hidden": "true", className: "ndl-combobox-icon" }) })] })] })), (0, jsx_runtime_1.jsx)(form_control_1.FormFieldMessage, { field: sharedField, size: size })] }));
|
|
885
901
|
};
|
|
886
902
|
const Panel = (_a) => {
|
|
887
903
|
var { children, ref, id, ariaLabel, isDialog, className, style } = _a, restProps = __rest(_a, ["children", "ref", "id", "ariaLabel", "isDialog", "className", "style"]);
|