@digdir/designsystemet-react 0.0.0-main-20251027091428 → 0.0.0-main-20260410175907
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 +2 -2
- package/dist/cjs/components/Combobox/Combobox.js +4 -1
- package/dist/cjs/components/Combobox/Option/useComboboxOption.js +4 -1
- package/dist/cjs/components/Combobox/internal/ComboboxClearButton.js +1 -1
- package/dist/cjs/components/Combobox/internal/ComboboxInput.js +1 -1
- package/dist/cjs/components/Combobox/useComboboxKeyboard.js +5 -1
- package/dist/cjs/components/avatar/avatar.js +3 -2
- package/dist/cjs/components/avatar-stack/avatar-stack.js +33 -0
- package/dist/cjs/components/breadcrumbs/breadcrumbs-link.js +2 -1
- package/dist/cjs/components/breadcrumbs/breadcrumbs-list.js +1 -11
- package/dist/cjs/components/breadcrumbs/breadcrumbs.js +2 -1
- package/dist/cjs/components/button/button.js +9 -3
- package/dist/cjs/components/card/card.js +17 -9
- package/dist/cjs/components/details/details-summary.js +3 -3
- package/dist/cjs/components/details/details.js +2 -2
- package/dist/cjs/components/dialog/dialog-trigger-context.js +2 -2
- package/dist/cjs/components/dialog/dialog-trigger.js +3 -2
- package/dist/cjs/components/dialog/dialog.js +22 -50
- package/dist/cjs/components/dropdown/dropdown-heading.js +1 -1
- package/dist/cjs/components/dropdown/dropdown-item.js +1 -1
- package/dist/cjs/components/dropdown/dropdown-list.js +1 -1
- package/dist/cjs/components/error-summary/error-summary-heading.js +2 -8
- package/dist/cjs/components/error-summary/error-summary.js +4 -9
- package/dist/cjs/components/field/field-counter.js +6 -39
- package/dist/cjs/components/field/field-description.js +2 -1
- package/dist/cjs/components/field/field.js +6 -4
- package/dist/cjs/components/fieldset/fieldset-description.js +2 -1
- package/dist/cjs/components/fieldset/fieldset-legend.js +2 -1
- package/dist/cjs/components/fieldset/fieldset.js +2 -1
- package/dist/cjs/components/input/input.js +2 -1
- package/dist/cjs/components/label/label.js +2 -1
- package/dist/cjs/components/pagination/pagination-button.js +1 -1
- package/dist/cjs/components/pagination/pagination.js +7 -3
- package/dist/cjs/components/popover/popover-trigger.js +6 -10
- package/dist/cjs/components/popover/popover.js +21 -66
- package/dist/cjs/components/select/select.js +3 -12
- package/dist/cjs/components/skeleton/skeleton.js +4 -1
- package/dist/cjs/components/spinner/spinner.js +4 -1
- package/dist/cjs/components/suggestion/suggestion-clear.js +5 -3
- package/dist/cjs/components/suggestion/suggestion-empty.js +3 -1
- package/dist/cjs/components/suggestion/suggestion-input.js +4 -3
- package/dist/cjs/components/suggestion/suggestion-list.js +6 -29
- package/dist/cjs/components/suggestion/suggestion-option.js +3 -1
- package/dist/cjs/components/suggestion/suggestion.js +17 -14
- package/dist/cjs/components/tabs/tabs-list.js +4 -7
- package/dist/cjs/components/tabs/tabs-panel.js +5 -28
- package/dist/cjs/components/tabs/tabs-tab.js +16 -9
- package/dist/cjs/components/tabs/tabs.js +26 -8
- package/dist/cjs/components/tag/tag.js +2 -2
- package/dist/cjs/components/toggle-group/index.js +1 -1
- package/dist/cjs/components/toggle-group/toggle-group-item.js +9 -6
- package/dist/cjs/components/toggle-group/toggle-group.js +7 -6
- package/dist/cjs/components/tooltip/tooltip.js +6 -145
- package/dist/cjs/components/validation-message/validation-message.js +2 -1
- package/dist/cjs/index.js +104 -100
- package/dist/cjs/utilities/hooks/use-pagination/use-pagination.js +13 -25
- package/dist/cjs/utilities/index.js +17 -0
- package/dist/cjs/utilities/roving-focus/roving-focus-item.js +3 -1
- package/dist/cjs/utilities/roving-focus/roving-focus-root.js +4 -0
- package/dist/cjs/utilities/roving-focus/use-roving-focus.js +3 -1
- package/dist/esm/components/Combobox/Combobox.js +5 -2
- package/dist/esm/components/Combobox/ComboboxIdContext.js +1 -1
- package/dist/esm/components/Combobox/Option/useComboboxOption.js +4 -1
- package/dist/esm/components/Combobox/internal/ComboboxClearButton.js +1 -1
- package/dist/esm/components/Combobox/internal/ComboboxInput.js +1 -1
- package/dist/esm/components/Combobox/useComboboxKeyboard.js +5 -1
- package/dist/esm/components/avatar/avatar.js +3 -2
- package/dist/esm/components/avatar-stack/avatar-stack.js +31 -0
- package/dist/esm/components/breadcrumbs/breadcrumbs-link.js +2 -1
- package/dist/esm/components/breadcrumbs/breadcrumbs-list.js +2 -12
- package/dist/esm/components/breadcrumbs/breadcrumbs.js +2 -1
- package/dist/esm/components/button/button.js +10 -4
- package/dist/esm/components/card/card.js +18 -10
- package/dist/esm/components/chip/index.js +1 -1
- package/dist/esm/components/details/details-summary.js +3 -3
- package/dist/esm/components/details/details.js +2 -2
- package/dist/esm/components/dialog/dialog-trigger-context.js +2 -2
- package/dist/esm/components/dialog/dialog-trigger.js +3 -2
- package/dist/esm/components/dialog/dialog.js +23 -51
- package/dist/esm/components/dropdown/dropdown-heading.js +1 -1
- package/dist/esm/components/dropdown/dropdown-item.js +1 -1
- package/dist/esm/components/dropdown/dropdown-list.js +1 -1
- package/dist/esm/components/error-summary/error-summary-heading.js +3 -9
- package/dist/esm/components/error-summary/error-summary.js +6 -10
- package/dist/esm/components/field/field-counter.js +8 -41
- package/dist/esm/components/field/field-description.js +2 -1
- package/dist/esm/components/field/field.js +7 -5
- package/dist/esm/components/fieldset/fieldset-description.js +2 -1
- package/dist/esm/components/fieldset/fieldset-legend.js +2 -1
- package/dist/esm/components/fieldset/fieldset.js +2 -1
- package/dist/esm/components/input/input.js +2 -1
- package/dist/esm/components/label/label.js +2 -1
- package/dist/esm/components/list/index.js +1 -1
- package/dist/esm/components/pagination/pagination-button.js +1 -1
- package/dist/esm/components/pagination/pagination.js +7 -3
- package/dist/esm/components/popover/popover-trigger.js +6 -10
- package/dist/esm/components/popover/popover.js +21 -66
- package/dist/esm/components/select/select.js +3 -12
- package/dist/esm/components/skeleton/skeleton.js +4 -1
- package/dist/esm/components/spinner/spinner.js +4 -1
- package/dist/esm/components/suggestion/suggestion-clear.js +5 -3
- package/dist/esm/components/suggestion/suggestion-empty.js +3 -1
- package/dist/esm/components/suggestion/suggestion-input.js +4 -3
- package/dist/esm/components/suggestion/suggestion-list.js +6 -29
- package/dist/esm/components/suggestion/suggestion-option.js +3 -1
- package/dist/esm/components/suggestion/suggestion.js +17 -14
- package/dist/esm/components/tabs/tabs-list.js +5 -8
- package/dist/esm/components/tabs/tabs-panel.js +6 -29
- package/dist/esm/components/tabs/tabs-tab.js +17 -10
- package/dist/esm/components/tabs/tabs.js +27 -9
- package/dist/esm/components/tag/tag.js +2 -2
- package/dist/esm/components/toggle-group/index.js +1 -1
- package/dist/esm/components/toggle-group/toggle-group-item.js +11 -8
- package/dist/esm/components/toggle-group/toggle-group.js +9 -8
- package/dist/esm/components/tooltip/tooltip.js +8 -147
- package/dist/esm/components/validation-message/validation-message.js +2 -1
- package/dist/esm/index.js +53 -50
- package/dist/esm/utilities/hooks/use-pagination/use-pagination.js +13 -25
- package/dist/esm/utilities/index.js +11 -0
- package/dist/esm/utilities/roving-focus/roving-focus-item.js +3 -1
- package/dist/esm/utilities/roving-focus/roving-focus-root.js +5 -1
- package/dist/esm/utilities/roving-focus/use-roving-focus.js +3 -1
- package/dist/react-types.d.ts +9 -2
- package/dist/types/colors.d.ts +1 -1
- package/dist/types/components/Combobox/Combobox.d.ts +2 -2
- package/dist/types/components/Combobox/index.d.ts +1 -1
- package/dist/types/components/Combobox/index.d.ts.map +1 -1
- package/dist/types/components/Combobox/useFormField/useFormField.d.ts +1 -1
- package/dist/types/components/alert/alert.d.ts +1 -1
- package/dist/types/components/avatar/avatar.d.ts +18 -8
- package/dist/types/components/avatar/avatar.d.ts.map +1 -1
- package/dist/types/components/avatar-stack/avatar-stack.d.ts +70 -0
- package/dist/types/components/avatar-stack/avatar-stack.d.ts.map +1 -0
- package/dist/types/components/badge/badge-position.d.ts +1 -1
- package/dist/types/components/badge/badge.d.ts +1 -1
- package/dist/types/components/badge/index.d.ts +3 -3
- package/dist/types/components/badge/index.d.ts.map +1 -1
- package/dist/types/components/breadcrumbs/breadcrumbs-link.d.ts.map +1 -1
- package/dist/types/components/breadcrumbs/breadcrumbs-list.d.ts.map +1 -1
- package/dist/types/components/breadcrumbs/breadcrumbs.d.ts +5 -3
- package/dist/types/components/breadcrumbs/breadcrumbs.d.ts.map +1 -1
- package/dist/types/components/breadcrumbs/index.d.ts +1 -1
- package/dist/types/components/button/button.d.ts +25 -3
- package/dist/types/components/button/button.d.ts.map +1 -1
- package/dist/types/components/card/card.d.ts.map +1 -1
- package/dist/types/components/card/index.d.ts +1 -1
- package/dist/types/components/card/index.d.ts.map +1 -1
- package/dist/types/components/chip/index.d.ts +1 -1
- package/dist/types/components/chip/index.d.ts.map +1 -1
- package/dist/types/components/details/details-summary.d.ts.map +1 -1
- package/dist/types/components/details/details.d.ts +3 -3
- package/dist/types/components/details/details.d.ts.map +1 -1
- package/dist/types/components/dialog/dialog-trigger-context.d.ts +3 -3
- package/dist/types/components/dialog/dialog-trigger-context.d.ts.map +1 -1
- package/dist/types/components/dialog/dialog-trigger.d.ts +5 -2
- package/dist/types/components/dialog/dialog-trigger.d.ts.map +1 -1
- package/dist/types/components/dialog/dialog.d.ts +21 -5
- package/dist/types/components/dialog/dialog.d.ts.map +1 -1
- package/dist/types/components/dialog/index.d.ts +1 -1
- package/dist/types/components/dialog/index.d.ts.map +1 -1
- package/dist/types/components/dropdown/dropdown.d.ts +1 -2
- package/dist/types/components/dropdown/dropdown.d.ts.map +1 -1
- package/dist/types/components/dropdown/index.d.ts +1 -1
- package/dist/types/components/dropdown/index.d.ts.map +1 -1
- package/dist/types/components/error-summary/error-summary-heading.d.ts.map +1 -1
- package/dist/types/components/error-summary/error-summary.d.ts +9 -9
- package/dist/types/components/error-summary/error-summary.d.ts.map +1 -1
- package/dist/types/components/error-summary/index.d.ts +1 -1
- package/dist/types/components/error-summary/index.d.ts.map +1 -1
- package/dist/types/components/field/field-counter.d.ts +3 -9
- package/dist/types/components/field/field-counter.d.ts.map +1 -1
- package/dist/types/components/field/field-description.d.ts.map +1 -1
- package/dist/types/components/field/field.d.ts +6 -2
- package/dist/types/components/field/field.d.ts.map +1 -1
- package/dist/types/components/field/index.d.ts +1 -1
- package/dist/types/components/field/index.d.ts.map +1 -1
- package/dist/types/components/fieldset/fieldset-description.d.ts.map +1 -1
- package/dist/types/components/fieldset/fieldset-legend.d.ts.map +1 -1
- package/dist/types/components/fieldset/fieldset.d.ts.map +1 -1
- package/dist/types/components/fieldset/index.d.ts +1 -1
- package/dist/types/components/fieldset/index.d.ts.map +1 -1
- package/dist/types/components/index.d.ts +3 -0
- package/dist/types/components/index.d.ts.map +1 -1
- package/dist/types/components/input/input.d.ts +13 -1
- package/dist/types/components/input/input.d.ts.map +1 -1
- package/dist/types/components/label/label.d.ts.map +1 -1
- package/dist/types/components/list/index.d.ts +1 -1
- package/dist/types/components/list/index.d.ts.map +1 -1
- package/dist/types/components/pagination/index.d.ts +1 -1
- package/dist/types/components/pagination/index.d.ts.map +1 -1
- package/dist/types/components/pagination/pagination-button.d.ts.map +1 -1
- package/dist/types/components/pagination/pagination.d.ts +27 -5
- package/dist/types/components/pagination/pagination.d.ts.map +1 -1
- package/dist/types/components/popover/index.d.ts +1 -1
- package/dist/types/components/popover/index.d.ts.map +1 -1
- package/dist/types/components/popover/popover-trigger.d.ts +2 -2
- package/dist/types/components/popover/popover-trigger.d.ts.map +1 -1
- package/dist/types/components/popover/popover.d.ts +3 -15
- package/dist/types/components/popover/popover.d.ts.map +1 -1
- package/dist/types/components/search/index.d.ts +1 -1
- package/dist/types/components/search/index.d.ts.map +1 -1
- package/dist/types/components/search/search-button.d.ts +5 -2
- package/dist/types/components/search/search-button.d.ts.map +1 -1
- package/dist/types/components/search/search-clear.d.ts.map +1 -1
- package/dist/types/components/search/search-input.d.ts +3 -2
- package/dist/types/components/search/search-input.d.ts.map +1 -1
- package/dist/types/components/search/search.d.ts +3 -2
- package/dist/types/components/search/search.d.ts.map +1 -1
- package/dist/types/components/select/index.d.ts +1 -1
- package/dist/types/components/select/index.d.ts.map +1 -1
- package/dist/types/components/select/select.d.ts +2 -0
- package/dist/types/components/select/select.d.ts.map +1 -1
- package/dist/types/components/suggestion/index.d.ts +1 -1
- package/dist/types/components/suggestion/index.d.ts.map +1 -1
- package/dist/types/components/suggestion/suggestion-clear.d.ts +7 -5
- package/dist/types/components/suggestion/suggestion-clear.d.ts.map +1 -1
- package/dist/types/components/suggestion/suggestion-empty.d.ts +1 -0
- package/dist/types/components/suggestion/suggestion-empty.d.ts.map +1 -1
- package/dist/types/components/suggestion/suggestion-input.d.ts +2 -1
- package/dist/types/components/suggestion/suggestion-input.d.ts.map +1 -1
- package/dist/types/components/suggestion/suggestion-list.d.ts +12 -2
- package/dist/types/components/suggestion/suggestion-list.d.ts.map +1 -1
- package/dist/types/components/suggestion/suggestion-option.d.ts +1 -0
- package/dist/types/components/suggestion/suggestion-option.d.ts.map +1 -1
- package/dist/types/components/suggestion/suggestion.d.ts +8 -9
- package/dist/types/components/suggestion/suggestion.d.ts.map +1 -1
- package/dist/types/components/table/index.d.ts +2 -2
- package/dist/types/components/table/index.d.ts.map +1 -1
- package/dist/types/components/tabs/index.d.ts +1 -1
- package/dist/types/components/tabs/index.d.ts.map +1 -1
- package/dist/types/components/tabs/tabs-list.d.ts +4 -2
- package/dist/types/components/tabs/tabs-list.d.ts.map +1 -1
- package/dist/types/components/tabs/tabs-panel.d.ts +4 -2
- package/dist/types/components/tabs/tabs-panel.d.ts.map +1 -1
- package/dist/types/components/tabs/tabs-tab.d.ts +4 -2
- package/dist/types/components/tabs/tabs-tab.d.ts.map +1 -1
- package/dist/types/components/tabs/tabs.d.ts +8 -8
- package/dist/types/components/tabs/tabs.d.ts.map +1 -1
- package/dist/types/components/tag/tag.d.ts +14 -2
- package/dist/types/components/tag/tag.d.ts.map +1 -1
- package/dist/types/components/textfield/textfield.d.ts.map +1 -1
- package/dist/types/components/toggle-group/index.d.ts +1 -1
- package/dist/types/components/toggle-group/toggle-group-item.d.ts +12 -3
- package/dist/types/components/toggle-group/toggle-group-item.d.ts.map +1 -1
- package/dist/types/components/toggle-group/toggle-group.d.ts +12 -4
- package/dist/types/components/toggle-group/toggle-group.d.ts.map +1 -1
- package/dist/types/components/tooltip/tooltip.d.ts +21 -4
- package/dist/types/components/tooltip/tooltip.d.ts.map +1 -1
- package/dist/types/components/validation-message/validation-message.d.ts +1 -1
- package/dist/types/components/validation-message/validation-message.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/types.d.ts +3 -1
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/utilities/hooks/use-checkbox-group/use-checkbox-group.d.ts +3 -3
- package/dist/types/utilities/hooks/use-checkbox-group/use-checkbox-group.d.ts.map +1 -1
- package/dist/types/utilities/hooks/use-pagination/use-pagination.d.ts +1 -1
- package/dist/types/utilities/hooks/use-pagination/use-pagination.d.ts.map +1 -1
- package/dist/types/utilities/hooks/use-radio-group/use-radio-group.d.ts +3 -3
- package/dist/types/utilities/hooks/use-radio-group/use-radio-group.d.ts.map +1 -1
- package/dist/types/utilities/index.d.ts +6 -0
- package/dist/types/utilities/index.d.ts.map +1 -1
- package/dist/types/utilities/roving-focus/roving-focus-item.d.ts +1 -0
- package/dist/types/utilities/roving-focus/roving-focus-item.d.ts.map +1 -1
- package/dist/types/utilities/roving-focus/roving-focus-root.d.ts +1 -0
- package/dist/types/utilities/roving-focus/roving-focus-root.d.ts.map +1 -1
- package/dist/types/utilities/roving-focus/use-roving-focus.d.ts +20 -18
- package/dist/types/utilities/roving-focus/use-roving-focus.d.ts.map +1 -1
- package/package.json +27 -32
- package/dist/cjs/components/field/field-observer.js +0 -112
- package/dist/cjs/components/toggle-group/use-toggle-groupitem.js +0 -34
- package/dist/esm/components/field/field-observer.js +0 -107
- package/dist/esm/components/toggle-group/use-toggle-groupitem.js +0 -32
- package/dist/types/components/field/field-observer.d.ts +0 -5
- package/dist/types/components/field/field-observer.d.ts.map +0 -1
- package/dist/types/components/toggle-group/use-toggle-groupitem.d.ts +0 -12
- package/dist/types/components/toggle-group/use-toggle-groupitem.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
React implementation of the Designsystemet components
|
|
4
4
|
|
|
5
5
|
- Uses `@digdir/designsystemet-css` for styling.
|
|
6
|
-
- Uses `@digdir/designsystemet-theme` or CSS file generated from `@digdir/designsystemet tokens build` for theming.
|
|
7
|
-
- Build your own theme on https://theme.designsystemet.no/
|
|
6
|
+
- Uses `@digdir/designsystemet-css/theme` or CSS file generated from `@digdir/designsystemet tokens build` for theming.
|
|
7
|
+
- Build your own theme on https://theme.designsystemet.no/en
|
|
8
8
|
- All components support `ref`.
|
|
9
9
|
- All components support SSR.
|
|
10
10
|
- Use full component name, e.g. `CardBlock` instead of `Card.Block`
|
|
@@ -6,6 +6,10 @@ var react$1 = require('@floating-ui/react');
|
|
|
6
6
|
var reactVirtual = require('@tanstack/react-virtual');
|
|
7
7
|
var cl = require('clsx/lite');
|
|
8
8
|
var react = require('react');
|
|
9
|
+
var useDebounceCallback = require('../../utilities/hooks/deprecated/use-debounce-callback/use-debounce-callback.js');
|
|
10
|
+
require('@digdir/designsystemet-web');
|
|
11
|
+
require('../../utilities/roving-focus/roving-focus-item.js');
|
|
12
|
+
require('../../utilities/roving-focus/roving-focus-root.js');
|
|
9
13
|
var spinner = require('../spinner/spinner.js');
|
|
10
14
|
var ComboboxContext = require('./ComboboxContext.js');
|
|
11
15
|
var ComboboxIdContext = require('./ComboboxIdContext.js');
|
|
@@ -20,7 +24,6 @@ var useComboboxKeyboard = require('./useComboboxKeyboard.js');
|
|
|
20
24
|
var useFloatingCombobox = require('./useFloatingCombobox.js');
|
|
21
25
|
var useFormField = require('./useFormField/useFormField.js');
|
|
22
26
|
var utilities = require('./utilities.js');
|
|
23
|
-
var useDebounceCallback = require('../../utilities/hooks/deprecated/use-debounce-callback/use-debounce-callback.js');
|
|
24
27
|
|
|
25
28
|
/**
|
|
26
29
|
* @deprecated Use `Suggestion` instead
|
|
@@ -3,10 +3,13 @@
|
|
|
3
3
|
|
|
4
4
|
var react$1 = require('@floating-ui/react');
|
|
5
5
|
var react = require('react');
|
|
6
|
+
var useDebounceCallback = require('../../../utilities/hooks/deprecated/use-debounce-callback/use-debounce-callback.js');
|
|
7
|
+
require('@digdir/designsystemet-web');
|
|
8
|
+
require('../../../utilities/roving-focus/roving-focus-item.js');
|
|
9
|
+
require('../../../utilities/roving-focus/roving-focus-root.js');
|
|
6
10
|
var ComboboxContext = require('../ComboboxContext.js');
|
|
7
11
|
var ComboboxIdContext = require('../ComboboxIdContext.js');
|
|
8
12
|
var utilities = require('../utilities.js');
|
|
9
|
-
var useDebounceCallback = require('../../../utilities/hooks/deprecated/use-debounce-callback/use-debounce-callback.js');
|
|
10
13
|
|
|
11
14
|
const useComboboxOption = ({ id, ref, value, }) => {
|
|
12
15
|
const generatedId = react.useId();
|
|
@@ -28,7 +28,7 @@ const ComboboxClearButton = react.forwardRef((props, ref) => {
|
|
|
28
28
|
e.stopPropagation();
|
|
29
29
|
handleSelectOption({ option: null, clear: true });
|
|
30
30
|
}
|
|
31
|
-
}, type: 'button', "aria-label": clearButtonLabel, children: jsxRuntime.jsx(akselIcons.XMarkIcon, {
|
|
31
|
+
}, type: 'button', "aria-label": clearButtonLabel, children: jsxRuntime.jsx(akselIcons.XMarkIcon, { height: '1.5em', width: '1.5em', title: 'Clear selection' }) }));
|
|
32
32
|
});
|
|
33
33
|
ComboboxClearButton.displayName = 'ComboboxClearButton';
|
|
34
34
|
|
|
@@ -74,7 +74,7 @@ const ComboboxInput = ({ hideClearButton, listId, error, hideChips, handleKeyDow
|
|
|
74
74
|
onChange(e);
|
|
75
75
|
!open && setOpen(true);
|
|
76
76
|
rest.onChange?.(e);
|
|
77
|
-
} }) })] }), showClearButton && jsxRuntime.jsx(ComboboxClearButton, { ref: clearButtonRef }), jsxRuntime.jsx("div", { className: 'ds-combobox__arrow', children: open ? (jsxRuntime.jsx(akselIcons.ChevronUpIcon, { title: 'arrow up',
|
|
77
|
+
} }) })] }), showClearButton && jsxRuntime.jsx(ComboboxClearButton, { ref: clearButtonRef }), jsxRuntime.jsx("div", { className: 'ds-combobox__arrow', children: open ? (jsxRuntime.jsx(akselIcons.ChevronUpIcon, { title: 'arrow up', height: '1.5em', width: '1.5em' })) : (jsxRuntime.jsx(akselIcons.ChevronDownIcon, { title: 'arrow down', height: '1.5em', width: '1.5em' })) })] }) }));
|
|
78
78
|
};
|
|
79
79
|
ComboboxInput.displayName = 'ComboboxInput';
|
|
80
80
|
|
|
@@ -1,8 +1,12 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var ComboboxIdContext = require('./ComboboxIdContext.js');
|
|
5
4
|
var useDebounceCallback = require('../../utilities/hooks/deprecated/use-debounce-callback/use-debounce-callback.js');
|
|
5
|
+
require('react');
|
|
6
|
+
require('@digdir/designsystemet-web');
|
|
7
|
+
require('../../utilities/roving-focus/roving-focus-item.js');
|
|
8
|
+
require('../../utilities/roving-focus/roving-focus-root.js');
|
|
9
|
+
var ComboboxIdContext = require('./ComboboxIdContext.js');
|
|
6
10
|
|
|
7
11
|
const useComboboxKeyboard = ({ readOnly, disabled, interactiveChildren, filteredOptions, inputValue, selectedOptions, multiple, open, options, setOpen, handleSelectOption, }) => {
|
|
8
12
|
const { activeIndex } = ComboboxIdContext.useComboboxId();
|
|
@@ -22,11 +22,12 @@ var react = require('react');
|
|
|
22
22
|
* <Icon />
|
|
23
23
|
* </Avatar>
|
|
24
24
|
*/
|
|
25
|
-
const Avatar = react.forwardRef(function Avatar({ 'aria-label': ariaLabel, variant = 'circle', className, children, initials, ...rest }, ref) {
|
|
25
|
+
const Avatar = react.forwardRef(function Avatar({ 'aria-label': ariaLabel, 'data-tooltip': dataTooltip, variant = 'circle', className, children, initials, asChild, ...rest }, ref) {
|
|
26
|
+
const OuterComponent = asChild ? reactSlot.Slot : 'span';
|
|
26
27
|
const useSlot = children && typeof children !== 'string';
|
|
27
28
|
const textChild = children && typeof children === 'string';
|
|
28
29
|
const Component = useSlot ? reactSlot.Slot : react.Fragment;
|
|
29
|
-
return (jsxRuntime.jsx(
|
|
30
|
+
return (jsxRuntime.jsx(OuterComponent, { ref: ref, className: cl('ds-avatar', className), "data-variant": variant, "data-initials": initials, role: asChild ? undefined : 'img', "aria-label": ariaLabel || dataTooltip, "data-tooltip": dataTooltip, tabIndex: dataTooltip ? 0 : undefined, ...rest, children: jsxRuntime.jsx(Component, { ...(useSlot && !asChild ? { 'aria-hidden': true } : {}), children: textChild ? jsxRuntime.jsx("span", { children: children }) : children }) }));
|
|
30
31
|
});
|
|
31
32
|
|
|
32
33
|
exports.Avatar = Avatar;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
5
|
+
var cl = require('clsx/lite');
|
|
6
|
+
var react = require('react');
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Use `AvatarStack` to constrain Avatars into a stack.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* <EXPERIMENTAL_AvatarStack>
|
|
13
|
+
* <Avatar aria-label='name'>
|
|
14
|
+
* <img src={cat1} alt='' />
|
|
15
|
+
* </Avatar>
|
|
16
|
+
* <Avatar aria-label='name'>
|
|
17
|
+
* <BriefcaseIcon />
|
|
18
|
+
* </Avatar>
|
|
19
|
+
* <Avatar aria-label='name' initials='sm' />
|
|
20
|
+
* </EXPERIMENTAL_AvatarStack>
|
|
21
|
+
*/
|
|
22
|
+
const EXPERIMENTAL_AvatarStack = react.forwardRef(function AvatarStack({ className, gap, suffix, avatarSize, overlap, expandable, children, ...rest }, ref) {
|
|
23
|
+
const style = {
|
|
24
|
+
...(rest.style || {}),
|
|
25
|
+
'--dsc-avatar-stack-gap': gap !== undefined ? `${gap}` : undefined,
|
|
26
|
+
'--dsc-avatar-stack-size': avatarSize ? `${avatarSize}` : undefined,
|
|
27
|
+
'--dsc-avatar-stack-overlap': overlap !== undefined ? `${overlap}` : undefined,
|
|
28
|
+
'--dsc-avatar-count': expandable === 'fixed' ? react.Children.count(children) : undefined,
|
|
29
|
+
};
|
|
30
|
+
return (jsxRuntime.jsx("span", { tabIndex: rest.tabIndex !== undefined ? rest.tabIndex : expandable ? 0 : undefined, ref: ref, className: cl(`ds-avatar-stack`, className), style: style, "data-expandable": expandable, "data-suffix": suffix, ...rest, children: children }));
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
exports.EXPERIMENTAL_AvatarStack = EXPERIMENTAL_AvatarStack;
|
|
@@ -6,7 +6,8 @@ var react = require('react');
|
|
|
6
6
|
var link = require('../link/link.js');
|
|
7
7
|
|
|
8
8
|
const BreadcrumbsLink = react.forwardRef(function BreadcrumbsLink(rest, ref) {
|
|
9
|
-
return jsxRuntime.jsx(link.Link, {
|
|
9
|
+
return (jsxRuntime.jsx(link.Link, { suppressHydrationWarning // Since <ds-breadcrumbs> adds aria-current="page"
|
|
10
|
+
: true, ref: ref, ...rest }));
|
|
10
11
|
});
|
|
11
12
|
|
|
12
13
|
exports.BreadcrumbsLink = BreadcrumbsLink;
|
|
@@ -3,19 +3,9 @@
|
|
|
3
3
|
|
|
4
4
|
var jsxRuntime = require('react/jsx-runtime');
|
|
5
5
|
var react = require('react');
|
|
6
|
-
var useMergeRefs = require('../../utilities/hooks/use-merge-refs/use-merge-refs.js');
|
|
7
6
|
|
|
8
7
|
const BreadcrumbsList = react.forwardRef(function BreadcrumbsList(rest, ref) {
|
|
9
|
-
|
|
10
|
-
const mergedRefs = useMergeRefs.useMergeRefs([innerRef, ref]);
|
|
11
|
-
// Set aria-current on last link
|
|
12
|
-
react.useEffect(() => {
|
|
13
|
-
const links = innerRef.current?.querySelectorAll(':scope > * > *') || [];
|
|
14
|
-
const lastLink = links[links?.length - 1];
|
|
15
|
-
lastLink?.setAttribute('aria-current', 'page');
|
|
16
|
-
return () => lastLink?.removeAttribute('aria-current'); // Remove on re-render as React can re-use DOM elements
|
|
17
|
-
});
|
|
18
|
-
return jsxRuntime.jsx("ol", { ref: mergedRefs, ...rest });
|
|
8
|
+
return jsxRuntime.jsx("ol", { ref: ref, ...rest });
|
|
19
9
|
});
|
|
20
10
|
|
|
21
11
|
exports.BreadcrumbsList = BreadcrumbsList;
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var jsxRuntime = require('react/jsx-runtime');
|
|
5
|
+
require('@digdir/designsystemet-web');
|
|
5
6
|
var cl = require('clsx/lite');
|
|
6
7
|
var react = require('react');
|
|
7
8
|
|
|
@@ -23,6 +24,6 @@ var react = require('react');
|
|
|
23
24
|
* </Breadcrumbs.List>
|
|
24
25
|
* </Breadcrumbs>
|
|
25
26
|
*/
|
|
26
|
-
const Breadcrumbs = react.forwardRef(({
|
|
27
|
+
const Breadcrumbs = react.forwardRef(({ className, ...rest }, ref) => (jsxRuntime.jsx("ds-breadcrumbs", { suppressHydrationWarning: true, class: cl('ds-breadcrumbs', className), ref: ref, ...rest })));
|
|
27
28
|
|
|
28
29
|
exports.Breadcrumbs = Breadcrumbs;
|
|
@@ -13,12 +13,18 @@ var spinner = require('../spinner/spinner.js');
|
|
|
13
13
|
* @example
|
|
14
14
|
* <Button>Click me</Button>
|
|
15
15
|
*/
|
|
16
|
-
const Button = react.forwardRef(function Button({ asChild, className, children, icon = false, loading = false, variant = 'primary', ...rest }, ref) {
|
|
16
|
+
const Button = react.forwardRef(function Button({ asChild, className, children, icon = false, loading = false, variant = 'primary', popoverTarget, popovertarget, commandfor, commandFor, ...rest }, ref) {
|
|
17
17
|
const Component = asChild ? reactSlot.Slot : 'button';
|
|
18
|
+
const popoverVal = popoverTarget ?? popovertarget;
|
|
19
|
+
const popoverKey = react.version.startsWith('19')
|
|
20
|
+
? 'popoverTarget'
|
|
21
|
+
: 'popovertarget';
|
|
22
|
+
const commandForVal = commandFor ?? commandfor;
|
|
18
23
|
// Fallbacks to undefined to prevent rendering attribute="false"
|
|
19
|
-
return (jsxRuntime.jsxs(Component, {
|
|
24
|
+
return (jsxRuntime.jsxs(Component, { suppressHydrationWarning // Might get augmented through designsystemet-web with aria-haspopup etc.
|
|
25
|
+
: true, "aria-busy": Boolean(loading) || undefined, "aria-disabled": Boolean(loading) || undefined, className: cl('ds-button', className), "data-icon": icon || undefined, commandfor: commandForVal, "data-variant": variant, ref: ref,
|
|
20
26
|
/* don't set type when we use `asChild` */
|
|
21
|
-
type: asChild ? undefined : 'button', ...rest, children: [loading === true ? (jsxRuntime.jsx(spinner.Spinner, { "aria-hidden": 'true' })) : (loading // Allow custom loading spinner
|
|
27
|
+
type: asChild ? undefined : 'button', [popoverKey]: popoverVal, ...rest, children: [loading === true ? (jsxRuntime.jsx(spinner.Spinner, { "aria-hidden": 'true' })) : (loading // Allow custom loading spinner
|
|
22
28
|
), jsxRuntime.jsx(reactSlot.Slottable, { children: icon && loading ? null : children })] }));
|
|
23
29
|
});
|
|
24
30
|
|
|
@@ -6,7 +6,11 @@ var reactSlot = require('@radix-ui/react-slot');
|
|
|
6
6
|
var cl = require('clsx/lite');
|
|
7
7
|
var react = require('react');
|
|
8
8
|
var useMergeRefs = require('../../utilities/hooks/use-merge-refs/use-merge-refs.js');
|
|
9
|
+
require('@digdir/designsystemet-web');
|
|
9
10
|
|
|
11
|
+
const ATTR_CLICKDELEGATE = 'data-clickdelegatefor';
|
|
12
|
+
const SELECTOR_LINK = `:is(h1,h2,h3,h4,h5,h6) a`;
|
|
13
|
+
const SELECTOR_SKIP = 'a,button,label,details,dialog,[role="button"],[popover],[contenteditable]';
|
|
10
14
|
/**
|
|
11
15
|
* Card component to present content in a structured way.
|
|
12
16
|
*
|
|
@@ -20,22 +24,26 @@ var useMergeRefs = require('../../utilities/hooks/use-merge-refs/use-merge-refs.
|
|
|
20
24
|
const Card = react.forwardRef(function Card({ asChild = false, variant = 'default', className, ...rest }, ref) {
|
|
21
25
|
const Component = asChild ? reactSlot.Slot : 'div';
|
|
22
26
|
const cardRef = react.useRef(null);
|
|
27
|
+
const linkGeneratedId = react.useId();
|
|
23
28
|
const mergedRefs = useMergeRefs.useMergeRefs([cardRef, ref]);
|
|
24
29
|
// Forward click on card to heading links for better accessibility
|
|
25
30
|
// https://adrianroselli.com/2020/02/block-links-cards-clickable-regions-etc.html
|
|
26
31
|
react.useEffect(() => {
|
|
27
32
|
const card = cardRef.current;
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
33
|
+
const link = card?.querySelector(SELECTOR_LINK);
|
|
34
|
+
const skip = !link || link.parentElement?.closest(SELECTOR_SKIP); // Using parentElement as link variable will always match a selector
|
|
35
|
+
const id = link?.id;
|
|
36
|
+
if (card?.hasAttribute(ATTR_CLICKDELEGATE) || skip)
|
|
37
|
+
return; // Already delegated or skipped
|
|
38
|
+
link.id = id || linkGeneratedId;
|
|
39
|
+
card?.setAttribute(ATTR_CLICKDELEGATE, link.id);
|
|
40
|
+
return () => {
|
|
41
|
+
if (id && link)
|
|
42
|
+
link.id = id;
|
|
34
43
|
else
|
|
35
|
-
link
|
|
44
|
+
link?.removeAttribute('id');
|
|
45
|
+
card?.removeAttribute(ATTR_CLICKDELEGATE);
|
|
36
46
|
};
|
|
37
|
-
card?.addEventListener('click', handleClick);
|
|
38
|
-
return () => card?.removeEventListener('click', handleClick);
|
|
39
47
|
}, []);
|
|
40
48
|
return (jsxRuntime.jsx(Component, { className: cl(`ds-card`, className), "data-variant": variant, ref: mergedRefs, ...rest }));
|
|
41
49
|
});
|
|
@@ -10,9 +10,9 @@ var react = require('react');
|
|
|
10
10
|
* @example
|
|
11
11
|
* <Details.Summary>Heading</Details.Summary>
|
|
12
12
|
*/
|
|
13
|
-
const DetailsSummary = react.forwardRef(function DetailsSummary(
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
const DetailsSummary = react.forwardRef(function DetailsSummary(rest, ref) {
|
|
14
|
+
return (jsxRuntime.jsx("summary", { suppressHydrationWarning // Since <details> polyfill adds attributes
|
|
15
|
+
: true, ref: ref, ...rest }));
|
|
16
16
|
});
|
|
17
17
|
|
|
18
18
|
exports.DetailsSummary = DetailsSummary;
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
var jsxRuntime = require('react/jsx-runtime');
|
|
5
5
|
var cl = require('clsx/lite');
|
|
6
6
|
var react = require('react');
|
|
7
|
-
require('@u-elements/u-details');
|
|
8
7
|
var useMergeRefs = require('../../utilities/hooks/use-merge-refs/use-merge-refs.js');
|
|
8
|
+
require('@digdir/designsystemet-web');
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* Details component, contains `Details.Summary` and `Details.Content` components.
|
|
@@ -37,7 +37,7 @@ const Details = react.forwardRef(function Details({ className, open, defaultOpen
|
|
|
37
37
|
details?.addEventListener('toggle', handleToggle, true);
|
|
38
38
|
return () => details?.removeEventListener('toggle', handleToggle, true);
|
|
39
39
|
}, []);
|
|
40
|
-
return (jsxRuntime.jsx("
|
|
40
|
+
return (jsxRuntime.jsx("details", { className: cl('ds-details', className), open: (open ?? initialOpen.current) || undefined, "data-variant": variant, ref: mergedRefs, ...rest }));
|
|
41
41
|
});
|
|
42
42
|
|
|
43
43
|
exports.Details = Details;
|
|
@@ -18,9 +18,9 @@ const Context = react.createContext({
|
|
|
18
18
|
* </Dialog>
|
|
19
19
|
* </Dialog.TriggerContext>
|
|
20
20
|
*/
|
|
21
|
-
const DialogTriggerContext = (
|
|
21
|
+
const DialogTriggerContext = (rest) => {
|
|
22
22
|
const contextRef = react.useRef(null);
|
|
23
|
-
return jsxRuntime.jsx(Context.Provider, { value: contextRef,
|
|
23
|
+
return jsxRuntime.jsx(Context.Provider, { value: contextRef, ...rest });
|
|
24
24
|
};
|
|
25
25
|
DialogTriggerContext.displayName = 'DialogTriggerContext';
|
|
26
26
|
|
|
@@ -19,7 +19,7 @@ var dialogTriggerContext = require('./dialog-trigger-context.js');
|
|
|
19
19
|
* </Dialog.TriggerContext>
|
|
20
20
|
*/
|
|
21
21
|
const DialogTrigger = react.forwardRef(function DialogTrigger({ asChild, ...rest }, ref) {
|
|
22
|
-
const contextRef = react.useContext(dialogTriggerContext.Context);
|
|
22
|
+
const contextRef = react.useContext(dialogTriggerContext.Context); // Using contextRef instead of command as this is instantly available and plays nice with tests
|
|
23
23
|
const Component = asChild ? reactSlot.Slot : button.Button;
|
|
24
24
|
const openDialog = () => {
|
|
25
25
|
/* check if element has `data-modal`, it it has, use `showModal` */
|
|
@@ -27,7 +27,8 @@ const DialogTrigger = react.forwardRef(function DialogTrigger({ asChild, ...rest
|
|
|
27
27
|
? contextRef.current?.showModal()
|
|
28
28
|
: contextRef.current?.show();
|
|
29
29
|
};
|
|
30
|
-
return (jsxRuntime.jsx(Component, { "aria-haspopup": 'dialog', onClick: openDialog, ref: ref,
|
|
30
|
+
return (jsxRuntime.jsx(Component, { "aria-haspopup": 'dialog', onClick: openDialog, ref: ref, suppressHydrationWarning // Might get augmented through designsystemet-web with aria-haspopup
|
|
31
|
+
: true, ...rest }));
|
|
31
32
|
});
|
|
32
33
|
|
|
33
34
|
exports.DialogTrigger = DialogTrigger;
|
|
@@ -5,9 +5,10 @@ var jsxRuntime = require('react/jsx-runtime');
|
|
|
5
5
|
var reactSlot = require('@radix-ui/react-slot');
|
|
6
6
|
var cl = require('clsx/lite');
|
|
7
7
|
var react = require('react');
|
|
8
|
+
var useMergeRefs = require('../../utilities/hooks/use-merge-refs/use-merge-refs.js');
|
|
9
|
+
require('@digdir/designsystemet-web');
|
|
8
10
|
var button = require('../button/button.js');
|
|
9
11
|
var dialogTriggerContext = require('./dialog-trigger-context.js');
|
|
10
|
-
var useMergeRefs = require('../../utilities/hooks/use-merge-refs/use-merge-refs.js');
|
|
11
12
|
|
|
12
13
|
/**
|
|
13
14
|
* Dialog component, used to display a dialog dialog.
|
|
@@ -27,65 +28,36 @@ var useMergeRefs = require('../../utilities/hooks/use-merge-refs/use-merge-refs.
|
|
|
27
28
|
*
|
|
28
29
|
* ...
|
|
29
30
|
*
|
|
30
|
-
* <Button
|
|
31
|
-
* <Dialog
|
|
31
|
+
* <Button command="show-modal" commandfor="my-dialog">Open Dialog</Button>
|
|
32
|
+
* <Dialog id="my-dialog">
|
|
32
33
|
* Content
|
|
33
34
|
* </Dialog>
|
|
34
35
|
*/
|
|
35
|
-
const Dialog = react.forwardRef(function Dialog({ asChild, children, className, closeButton = 'Lukk dialogvindu',
|
|
36
|
+
const Dialog = react.forwardRef(function Dialog({ asChild, children, className, closeButton = 'Lukk dialogvindu', id, modal = true, onAnimationEnd, onClick, onClose, open, placement = 'center', ...rest }, ref) {
|
|
36
37
|
const contextRef = react.useContext(dialogTriggerContext.Context);
|
|
37
38
|
const dialogRef = react.useRef(null); // This local ref is used to make sure the dialog works without a DialogTriggerContext
|
|
38
39
|
const Component = asChild ? reactSlot.Slot : 'dialog';
|
|
39
40
|
const mergedRefs = useMergeRefs.useMergeRefs([contextRef, ref, dialogRef]);
|
|
40
41
|
const showProp = modal ? 'showModal' : 'show';
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
const {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
/* Check if clicked element or its closest parent has data-command='close' */
|
|
53
|
-
if (target instanceof Element) {
|
|
54
|
-
const closeElement = target.closest('[data-command="close"]');
|
|
55
|
-
if (closeElement)
|
|
56
|
-
return dialog?.close();
|
|
57
|
-
}
|
|
58
|
-
if (window.getSelection()?.toString())
|
|
59
|
-
return; // Fix bug where if you select text spanning two divs it thinks you clicked outside
|
|
60
|
-
if (dialog && target === dialog && closedby === 'any') {
|
|
61
|
-
const { top, left, right, bottom } = dialog.getBoundingClientRect();
|
|
62
|
-
const isInDialog = top <= y && y <= bottom && left <= x && x <= right;
|
|
63
|
-
if (!isInDialog)
|
|
64
|
-
dialog?.close(); // Both <dialog> and ::backdrop is considered same event.target
|
|
42
|
+
const autoId = react.useId();
|
|
43
|
+
const usedId = id ?? autoId;
|
|
44
|
+
// Toggle open based on prop
|
|
45
|
+
react.useEffect(() => dialogRef.current?.[open ? showProp : 'close'](), [open]);
|
|
46
|
+
return (jsxRuntime.jsxs(Component, { className: cl('ds-dialog', className), "data-placement": placement, "data-modal": modal, id: usedId, onClose: (event) => onClose?.(event.nativeEvent), onClick: (event) => {
|
|
47
|
+
onClick?.(event);
|
|
48
|
+
const { currentTarget: dialog, target: el, defaultPrevented } = event;
|
|
49
|
+
const isClose = el?.closest?.('[data-command="close"]');
|
|
50
|
+
if (!defaultPrevented && isClose) {
|
|
51
|
+
dialog.close();
|
|
52
|
+
console.warn('Designsystemet: data-command="close" is deprecated. Use command="close" and commandfor="DIALOG-ID" instead.');
|
|
65
53
|
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
const autofocus = dialog
|
|
54
|
+
}, onAnimationEnd: (event) => {
|
|
55
|
+
const { currentTarget: dialog } = event;
|
|
56
|
+
const autofocus = dialog.querySelector('[autofocus]');
|
|
69
57
|
if (document.activeElement !== autofocus)
|
|
70
|
-
autofocus?.focus();
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
dialog?.addEventListener('click', handleClosedby);
|
|
74
|
-
dialog?.addEventListener('keydown', handleClosedby);
|
|
75
|
-
return () => {
|
|
76
|
-
dialog?.removeEventListener('animationend', handleAutoFocus);
|
|
77
|
-
dialog?.removeEventListener('click', handleClosedby);
|
|
78
|
-
dialog?.removeEventListener('keydown', handleClosedby);
|
|
79
|
-
};
|
|
80
|
-
}, [closedby]);
|
|
81
|
-
/* handle closing */
|
|
82
|
-
react.useEffect(() => {
|
|
83
|
-
const handleClose = (event) => onClose?.(event);
|
|
84
|
-
const currentRef = dialogRef.current;
|
|
85
|
-
currentRef?.addEventListener('close', handleClose);
|
|
86
|
-
return () => currentRef?.removeEventListener('close', handleClose);
|
|
87
|
-
}, [onClose]);
|
|
88
|
-
return (jsxRuntime.jsxs(Component, { className: cl('ds-dialog', className), ref: mergedRefs, "data-modal": modal, ...rest, children: [closeButton !== false && (jsxRuntime.jsx(button.Button, { "aria-label": closeButton, "data-color": 'neutral', icon: true, variant: 'tertiary', "data-command": 'close' })), children] }));
|
|
58
|
+
autofocus?.focus(); // Handle autofocus on open
|
|
59
|
+
onAnimationEnd?.(event);
|
|
60
|
+
}, ref: mergedRefs, ...rest, children: [closeButton !== false && (jsxRuntime.jsx(button.Button, { "aria-label": closeButton, "data-color": 'neutral', icon: true, variant: 'tertiary', command: 'close', commandfor: usedId })), children] }));
|
|
89
61
|
});
|
|
90
62
|
|
|
91
63
|
exports.Dialog = Dialog;
|
|
@@ -13,7 +13,7 @@ var heading = require('../heading/heading.js');
|
|
|
13
13
|
* <DropdownHeading>Heading</DropdownHeading>
|
|
14
14
|
* </Dropdown>
|
|
15
15
|
*/
|
|
16
|
-
const DropdownHeading = react.forwardRef(function DropdownHeading(
|
|
16
|
+
const DropdownHeading = react.forwardRef(function DropdownHeading(rest, ref) {
|
|
17
17
|
return jsxRuntime.jsx(heading.Heading, { ref: ref, ...rest });
|
|
18
18
|
});
|
|
19
19
|
|
|
@@ -16,7 +16,7 @@ var react = require('react');
|
|
|
16
16
|
* </DropdownList>
|
|
17
17
|
* </Dropdown>
|
|
18
18
|
*/
|
|
19
|
-
const DropdownItem = react.forwardRef(function DropdownItem(
|
|
19
|
+
const DropdownItem = react.forwardRef(function DropdownItem(rest, ref) {
|
|
20
20
|
return jsxRuntime.jsx("li", { ref: ref, ...rest });
|
|
21
21
|
});
|
|
22
22
|
|
|
@@ -16,7 +16,7 @@ var react = require('react');
|
|
|
16
16
|
* </DropdownList>
|
|
17
17
|
* </Dropdown>
|
|
18
18
|
*/
|
|
19
|
-
const DropdownList = react.forwardRef(function DropdownList(
|
|
19
|
+
const DropdownList = react.forwardRef(function DropdownList(rest, ref) {
|
|
20
20
|
return jsxRuntime.jsx("ul", { ref: ref, ...rest });
|
|
21
21
|
});
|
|
22
22
|
|
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
var jsxRuntime = require('react/jsx-runtime');
|
|
5
5
|
var react = require('react');
|
|
6
6
|
var heading = require('../heading/heading.js');
|
|
7
|
-
var errorSummary = require('./error-summary.js');
|
|
8
7
|
|
|
9
8
|
/**
|
|
10
9
|
* ErrorSummary heading component, used to display a heading for the error summary.
|
|
@@ -14,13 +13,8 @@ var errorSummary = require('./error-summary.js');
|
|
|
14
13
|
* <ErrorSummaryHeading>Heading</ErrorSummaryHeading>
|
|
15
14
|
* </ErrorSummary>
|
|
16
15
|
*/
|
|
17
|
-
const ErrorSummaryHeading = react.forwardRef(function ErrorSummaryHeading(
|
|
18
|
-
|
|
19
|
-
react.useEffect(() => {
|
|
20
|
-
if (id && headingId !== id)
|
|
21
|
-
setHeadingId(id);
|
|
22
|
-
}, [headingId, id, setHeadingId]);
|
|
23
|
-
return jsxRuntime.jsx(heading.Heading, { id: headingId, ref: ref, ...rest });
|
|
16
|
+
const ErrorSummaryHeading = react.forwardRef(function ErrorSummaryHeading(rest, ref) {
|
|
17
|
+
return jsxRuntime.jsx(heading.Heading, { ref: ref, suppressHydrationWarning: true, ...rest }); // Suppress hydration warning since we will get an ID from <ds-error-summary>
|
|
24
18
|
});
|
|
25
19
|
|
|
26
20
|
exports.ErrorSummaryHeading = ErrorSummaryHeading;
|
|
@@ -6,10 +6,6 @@ var reactSlot = require('@radix-ui/react-slot');
|
|
|
6
6
|
var cl = require('clsx/lite');
|
|
7
7
|
var react = require('react');
|
|
8
8
|
|
|
9
|
-
const ErrorSummaryContext = react.createContext({
|
|
10
|
-
headingId: 'heading',
|
|
11
|
-
setHeadingId: () => { },
|
|
12
|
-
});
|
|
13
9
|
/**
|
|
14
10
|
* ErrorSummary component, used to display a list of errors.
|
|
15
11
|
*
|
|
@@ -27,11 +23,10 @@ const ErrorSummaryContext = react.createContext({
|
|
|
27
23
|
* </ErrorSummary>
|
|
28
24
|
*/
|
|
29
25
|
const ErrorSummary = react.forwardRef(function ErrorSummary({ asChild, className, ...rest }, ref) {
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
26
|
+
const Component = asChild ? reactSlot.Slot : 'ds-error-summary';
|
|
27
|
+
return (jsxRuntime.jsx(Component, { ...(asChild
|
|
28
|
+
? { className: cl('ds-error-summary', className) }
|
|
29
|
+
: { class: cl('ds-error-summary', className) }), ref: ref, suppressHydrationWarning: true, ...rest }));
|
|
34
30
|
});
|
|
35
31
|
|
|
36
32
|
exports.ErrorSummary = ErrorSummary;
|
|
37
|
-
exports.ErrorSummaryContext = ErrorSummaryContext;
|
|
@@ -3,12 +3,9 @@
|
|
|
3
3
|
|
|
4
4
|
var jsxRuntime = require('react/jsx-runtime');
|
|
5
5
|
var react = require('react');
|
|
6
|
-
var
|
|
6
|
+
var index = require('../../utilities/index.js');
|
|
7
7
|
var validationMessage = require('../validation-message/validation-message.js');
|
|
8
|
-
var fieldObserver = require('./field-observer.js');
|
|
9
|
-
var useDebounceCallback = require('../../utilities/hooks/deprecated/use-debounce-callback/use-debounce-callback.js');
|
|
10
8
|
|
|
11
|
-
const label = (text, count) => text.replace('%d', Math.abs(count).toString());
|
|
12
9
|
/**
|
|
13
10
|
* FieldCounter component, used to display a counter for a form field.
|
|
14
11
|
*
|
|
@@ -18,41 +15,11 @@ const label = (text, count) => text.replace('%d', Math.abs(count).toString());
|
|
|
18
15
|
* <Field.Counter limit={100} under='%d tegn igjen' over='%d tegn for mye' />
|
|
19
16
|
* </Field>
|
|
20
17
|
*/
|
|
21
|
-
const FieldCounter = react.forwardRef(function FieldCounter({ limit, under
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
const hasExceededLimit = count > limit;
|
|
27
|
-
const remainder = limit - count;
|
|
28
|
-
const debouncedSetLiveRegionText = useDebounceCallback.useDebounceCallback((text) => setLiveRegionText(text), 1200);
|
|
29
|
-
// Listen to native input events (user typing) to update the counter in real time
|
|
30
|
-
react.useEffect(() => {
|
|
31
|
-
const field = counterRef.current?.closest('.ds-field');
|
|
32
|
-
const input = Array.from(field?.getElementsByTagName('*') || []).find(fieldObserver.isInputLike);
|
|
33
|
-
const onInput = ({ target }) => {
|
|
34
|
-
if (fieldObserver.isInputLike(target))
|
|
35
|
-
setCount(target.value.length);
|
|
36
|
-
};
|
|
37
|
-
if (input)
|
|
38
|
-
onInput({ target: input }); // Initial setup
|
|
39
|
-
fieldInputRef.current = input;
|
|
40
|
-
field?.addEventListener('input', onInput);
|
|
41
|
-
return () => field?.removeEventListener('input', onInput);
|
|
42
|
-
}, []);
|
|
43
|
-
/* React does not dispatch a native input event when the value prop changes externally.
|
|
44
|
-
Since the parent re-renders this component when value changes, we can sync on render. */
|
|
45
|
-
react.useEffect(() => {
|
|
46
|
-
if (fieldInputRef.current) {
|
|
47
|
-
const valueLength = fieldInputRef.current.value.length;
|
|
48
|
-
setCount((prev) => (prev === valueLength ? prev : valueLength));
|
|
49
|
-
}
|
|
50
|
-
});
|
|
51
|
-
// Update live region text when count or limit changes
|
|
52
|
-
react.useEffect(() => {
|
|
53
|
-
debouncedSetLiveRegionText(label(hasExceededLimit ? over : under, remainder));
|
|
54
|
-
}, [count, limit, over, under, hasExceededLimit, remainder]);
|
|
55
|
-
return (jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [jsxRuntime.jsx("div", { className: 'ds-sr-only', "aria-live": 'polite', ref: counterRef, children: liveRegionText }), hasExceededLimit ? (jsxRuntime.jsx(validationMessage.ValidationMessage, { ref: ref, ...rest, "aria-hidden": 'true', "data-field": null, children: label(over, remainder) })) : (jsxRuntime.jsx(paragraph.Paragraph, { ref: ref, ...rest, "aria-hidden": 'true', children: label(under, remainder) })), jsxRuntime.jsx("div", { className: 'ds-sr-only', "aria-hidden": 'true', "data-field": 'description', children: label(hint, limit) })] }));
|
|
18
|
+
const FieldCounter = react.forwardRef(function FieldCounter({ limit, under, over, hint, ...rest }, _ref) {
|
|
19
|
+
if (hint)
|
|
20
|
+
index.warn('hint attribute is deprecated on Field.Counter');
|
|
21
|
+
return (jsxRuntime.jsx(validationMessage.ValidationMessage, { suppressHydrationWarning // Since <ds-field> adds attributes
|
|
22
|
+
: true, "data-field": 'counter', "data-limit": limit, "data-under": under, "data-over": over, ...rest }));
|
|
56
23
|
});
|
|
57
24
|
|
|
58
25
|
exports.FieldCounter = FieldCounter;
|
|
@@ -11,7 +11,8 @@ var react = require('react');
|
|
|
11
11
|
* <FieldDescription>Additional information</FieldDescription>
|
|
12
12
|
*/
|
|
13
13
|
const FieldDescription = react.forwardRef(function FieldDescription(rest, ref) {
|
|
14
|
-
return jsxRuntime.jsx("div", {
|
|
14
|
+
return (jsxRuntime.jsx("div", { suppressHydrationWarning // Since <ds-field> adds attributes
|
|
15
|
+
: true, "data-field": 'description', ref: ref, ...rest }));
|
|
15
16
|
});
|
|
16
17
|
|
|
17
18
|
exports.FieldDescription = FieldDescription;
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var jsxRuntime = require('react/jsx-runtime');
|
|
5
|
+
require('@digdir/designsystemet-web');
|
|
5
6
|
var reactSlot = require('@radix-ui/react-slot');
|
|
6
7
|
var cl = require('clsx/lite');
|
|
7
8
|
var react = require('react');
|
|
8
|
-
var fieldObserver = require('./field-observer.js');
|
|
9
9
|
var useMergeRefs = require('../../utilities/hooks/use-merge-refs/use-merge-refs.js');
|
|
10
10
|
|
|
11
11
|
/**
|
|
@@ -20,11 +20,13 @@ var useMergeRefs = require('../../utilities/hooks/use-merge-refs/use-merge-refs.
|
|
|
20
20
|
* </Field>
|
|
21
21
|
*/
|
|
22
22
|
const Field = react.forwardRef(function Field({ className, position, asChild, ...rest }, ref) {
|
|
23
|
-
const Component = asChild ? reactSlot.Slot : '
|
|
23
|
+
const Component = asChild ? reactSlot.Slot : 'ds-field';
|
|
24
24
|
const fieldRef = react.useRef(null);
|
|
25
25
|
const mergedRefs = useMergeRefs.useMergeRefs([fieldRef, ref]);
|
|
26
|
-
|
|
27
|
-
|
|
26
|
+
return (jsxRuntime.jsx(Component, { ...(asChild
|
|
27
|
+
? { className: cl('ds-field', className) }
|
|
28
|
+
: { class: cl('ds-field', className) }), suppressHydrationWarning // Since <ds-field> adds attributes
|
|
29
|
+
: true, "data-position": position, ref: mergedRefs, ...rest }));
|
|
28
30
|
});
|
|
29
31
|
|
|
30
32
|
exports.Field = Field;
|