@k-int/stripes-kint-components 5.30.0 → 5.31.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/CHANGELOG.md +22 -0
- package/es/index.js +8 -0
- package/es/lib/ButtonTypedown/ButtonTypedown.js +59 -0
- package/es/lib/ButtonTypedown/index.js +13 -0
- package/es/lib/Typedown/Typedown.js +89 -46
- package/es/lib/hooks/typedownHooks/useTypedown.js +148 -85
- package/package.json +1 -1
- package/src/artifacts/coverage-jest/ActionList/ActionList.js.html +1 -1
- package/src/artifacts/coverage-jest/ActionList/ActionListFieldArray.js.html +1 -1
- package/src/artifacts/coverage-jest/ActionList/index.html +1 -1
- package/src/artifacts/coverage-jest/ActionList/index.js.html +1 -1
- package/src/artifacts/coverage-jest/ButtonTypedown/ButtonTypedown.js.html +244 -0
- package/src/artifacts/coverage-jest/ButtonTypedown/index.html +131 -0
- package/src/artifacts/coverage-jest/ButtonTypedown/index.js.html +88 -0
- package/src/artifacts/coverage-jest/ComboButton/ComboButton.js.html +1 -1
- package/src/artifacts/coverage-jest/ComboButton/index.html +1 -1
- package/src/artifacts/coverage-jest/ComboButton/index.js.html +1 -1
- package/src/artifacts/coverage-jest/CustomProperties/Config/CustomPropertiesLookup.js.html +1 -1
- package/src/artifacts/coverage-jest/CustomProperties/Config/CustomPropertiesSettings.js.html +1 -1
- package/src/artifacts/coverage-jest/CustomProperties/Config/CustomPropertyForm.js.html +1 -1
- package/src/artifacts/coverage-jest/CustomProperties/Config/CustomPropertyView.js.html +1 -1
- package/src/artifacts/coverage-jest/CustomProperties/Config/index.html +1 -1
- package/src/artifacts/coverage-jest/CustomProperties/Config/index.js.html +1 -1
- package/src/artifacts/coverage-jest/CustomProperties/Edit/CustomPropertiesEdit.js.html +1 -1
- package/src/artifacts/coverage-jest/CustomProperties/Edit/CustomPropertiesEditCtx.js.html +1 -1
- package/src/artifacts/coverage-jest/CustomProperties/Edit/CustomPropertiesListField.js.html +1 -1
- package/src/artifacts/coverage-jest/CustomProperties/Edit/CustomPropertyField.js.html +1 -1
- package/src/artifacts/coverage-jest/CustomProperties/Edit/CustomPropertyFormCard.js.html +1 -1
- package/src/artifacts/coverage-jest/CustomProperties/Edit/index.html +1 -1
- package/src/artifacts/coverage-jest/CustomProperties/Edit/index.js.html +1 -1
- package/src/artifacts/coverage-jest/CustomProperties/Edit/testResources.js.html +1 -1
- package/src/artifacts/coverage-jest/CustomProperties/Filter/CustomPropertiesFilter.js.html +1 -1
- package/src/artifacts/coverage-jest/CustomProperties/Filter/CustomPropertiesFilterField.js.html +1 -1
- package/src/artifacts/coverage-jest/CustomProperties/Filter/CustomPropertiesFilterFieldArray.js.html +1 -1
- package/src/artifacts/coverage-jest/CustomProperties/Filter/CustomPropertiesFilterForm.js.html +1 -1
- package/src/artifacts/coverage-jest/CustomProperties/Filter/CustomPropertiesRule.js.html +1 -1
- package/src/artifacts/coverage-jest/CustomProperties/Filter/index.html +1 -1
- package/src/artifacts/coverage-jest/CustomProperties/Filter/index.js.html +1 -1
- package/src/artifacts/coverage-jest/CustomProperties/Filter/testResources.js.html +1 -1
- package/src/artifacts/coverage-jest/CustomProperties/Filter/useOperators.js.html +1 -1
- package/src/artifacts/coverage-jest/CustomProperties/Filter/useParseActiveFilterStrings.js.html +1 -1
- package/src/artifacts/coverage-jest/CustomProperties/Filter/useValueProps.js.html +1 -1
- package/src/artifacts/coverage-jest/CustomProperties/View/CustomPropertiesView.js.html +1 -1
- package/src/artifacts/coverage-jest/CustomProperties/View/CustomPropertiesViewCtx.js.html +1 -1
- package/src/artifacts/coverage-jest/CustomProperties/View/CustomPropertyCard.js.html +1 -1
- package/src/artifacts/coverage-jest/CustomProperties/View/index.html +1 -1
- package/src/artifacts/coverage-jest/CustomProperties/View/index.js.html +1 -1
- package/src/artifacts/coverage-jest/CustomProperties/View/testResources.js.html +1 -1
- package/src/artifacts/coverage-jest/CustomProperties/index.html +1 -1
- package/src/artifacts/coverage-jest/CustomProperties/index.js.html +1 -1
- package/src/artifacts/coverage-jest/CycleButton/CycleButton.js.html +1 -1
- package/src/artifacts/coverage-jest/CycleButton/index.html +1 -1
- package/src/artifacts/coverage-jest/CycleButton/index.js.html +1 -1
- package/src/artifacts/coverage-jest/FieldLabel/FieldLabel.js.html +1 -1
- package/src/artifacts/coverage-jest/FieldLabel/index.html +1 -1
- package/src/artifacts/coverage-jest/FieldLabel/index.js.html +1 -1
- package/src/artifacts/coverage-jest/FormModal/FormModal.js.html +1 -1
- package/src/artifacts/coverage-jest/FormModal/index.html +1 -1
- package/src/artifacts/coverage-jest/FormModal/index.js.html +1 -1
- package/src/artifacts/coverage-jest/FormattedKintMessage/FormattedKintMessage.js.html +1 -1
- package/src/artifacts/coverage-jest/FormattedKintMessage/index.html +1 -1
- package/src/artifacts/coverage-jest/FormattedKintMessage/index.js.html +1 -1
- package/src/artifacts/coverage-jest/IconSelect/IconSelect.js.html +1 -1
- package/src/artifacts/coverage-jest/IconSelect/index.html +1 -1
- package/src/artifacts/coverage-jest/IconSelect/index.js.html +1 -1
- package/src/artifacts/coverage-jest/NoResultsMessage/NoResultsMessage.js.html +1 -1
- package/src/artifacts/coverage-jest/NoResultsMessage/index.html +1 -1
- package/src/artifacts/coverage-jest/NoResultsMessage/index.js.html +1 -1
- package/src/artifacts/coverage-jest/NumberField/NumberField.js.html +1 -1
- package/src/artifacts/coverage-jest/NumberField/index.html +1 -1
- package/src/artifacts/coverage-jest/NumberField/index.js.html +1 -1
- package/src/artifacts/coverage-jest/QueryTypedown/QueryTypedown.js.html +1 -1
- package/src/artifacts/coverage-jest/QueryTypedown/index.html +1 -1
- package/src/artifacts/coverage-jest/QueryTypedown/index.js.html +1 -1
- package/src/artifacts/coverage-jest/RefdataButtons/RefdataButtons.js.html +1 -1
- package/src/artifacts/coverage-jest/RefdataButtons/index.html +1 -1
- package/src/artifacts/coverage-jest/RefdataButtons/index.js.html +1 -1
- package/src/artifacts/coverage-jest/ResponsiveButtonGroup/ResponsiveButtonGroup.js.html +1 -1
- package/src/artifacts/coverage-jest/ResponsiveButtonGroup/index.html +1 -1
- package/src/artifacts/coverage-jest/ResponsiveButtonGroup/index.js.html +1 -1
- package/src/artifacts/coverage-jest/ResponsiveButtonGroup/useResponsiveButtonGroupSizing.js.html +1 -1
- package/src/artifacts/coverage-jest/RichSelect/RichSelect.js.html +1 -1
- package/src/artifacts/coverage-jest/RichSelect/index.html +1 -1
- package/src/artifacts/coverage-jest/RichSelect/index.js.html +1 -1
- package/src/artifacts/coverage-jest/RichSelect/useSelectedOption.js.html +1 -1
- package/src/artifacts/coverage-jest/SASQLookupComponent/SASQLookupComponent.js.html +1 -1
- package/src/artifacts/coverage-jest/SASQLookupComponent/TableBody/TableBody.js.html +1 -1
- package/src/artifacts/coverage-jest/SASQLookupComponent/TableBody/index.html +1 -1
- package/src/artifacts/coverage-jest/SASQLookupComponent/TableBody/index.js.html +1 -1
- package/src/artifacts/coverage-jest/SASQLookupComponent/index.html +1 -1
- package/src/artifacts/coverage-jest/SASQLookupComponent/index.js.html +1 -1
- package/src/artifacts/coverage-jest/SASQRoute/SASQRoute.js.html +1 -1
- package/src/artifacts/coverage-jest/SASQRoute/index.html +1 -1
- package/src/artifacts/coverage-jest/SASQRoute/index.js.html +1 -1
- package/src/artifacts/coverage-jest/SASQViewComponent/SASQViewComponent.js.html +1 -1
- package/src/artifacts/coverage-jest/SASQViewComponent/index.html +1 -1
- package/src/artifacts/coverage-jest/SASQViewComponent/index.js.html +1 -1
- package/src/artifacts/coverage-jest/SearchField/SearchField.js.html +1 -1
- package/src/artifacts/coverage-jest/SearchField/index.html +1 -1
- package/src/artifacts/coverage-jest/SearchField/index.js.html +1 -1
- package/src/artifacts/coverage-jest/SearchKeyControl/SearchKeyControl.js.html +1 -1
- package/src/artifacts/coverage-jest/SearchKeyControl/index.html +1 -1
- package/src/artifacts/coverage-jest/SearchKeyControl/index.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/EditableRefdataCategoryList/EditableRefdataCategoryList.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/EditableRefdataCategoryList/index.html +1 -1
- package/src/artifacts/coverage-jest/Settings/EditableRefdataCategoryList/index.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/EditableRefdataList/EditableRefdataList.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/EditableRefdataList/index.html +1 -1
- package/src/artifacts/coverage-jest/Settings/EditableRefdataList/index.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/EditableSettingsList/EditableSettingsList.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/EditableSettingsList/EditableSettingsListFieldArray/EditableSettingsListFieldArray.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/EditableSettingsList/EditableSettingsListFieldArray/index.html +1 -1
- package/src/artifacts/coverage-jest/Settings/EditableSettingsList/EditableSettingsListFieldArray/index.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/EditableSettingsList/SettingField/EditSettingValue/EditSettingValue.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/EditableSettingsList/SettingField/EditSettingValue/index.html +1 -1
- package/src/artifacts/coverage-jest/Settings/EditableSettingsList/SettingField/EditSettingValue/index.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/EditableSettingsList/SettingField/RenderSettingValue/RenderSettingValue.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/EditableSettingsList/SettingField/RenderSettingValue/index.html +1 -1
- package/src/artifacts/coverage-jest/Settings/EditableSettingsList/SettingField/RenderSettingValue/index.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/EditableSettingsList/SettingField/SettingField.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/EditableSettingsList/SettingField/index.html +1 -1
- package/src/artifacts/coverage-jest/Settings/EditableSettingsList/SettingField/index.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/EditableSettingsList/index.html +1 -1
- package/src/artifacts/coverage-jest/Settings/EditableSettingsList/index.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/RefdataCategoriesSettings/RefdataCategoriesSettings.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/RefdataCategoriesSettings/index.html +1 -1
- package/src/artifacts/coverage-jest/Settings/RefdataCategoriesSettings/index.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/SettingPage/SettingPage.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/SettingPage/SettingPagePane/SettingPagePane.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/SettingPage/SettingPagePane/index.html +1 -1
- package/src/artifacts/coverage-jest/Settings/SettingPage/SettingPagePane/index.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/SettingPage/index.html +1 -1
- package/src/artifacts/coverage-jest/Settings/SettingPage/index.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/SettingsFormContainer/SettingsFormContainer.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/SettingsFormContainer/index.html +1 -1
- package/src/artifacts/coverage-jest/Settings/SettingsFormContainer/index.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/StaticSettingsField/StaticSettingsField.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/StaticSettingsField/StaticSettingsFieldComponent/StaticSettingsFieldComponent.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/StaticSettingsField/StaticSettingsFieldComponent/index.html +1 -1
- package/src/artifacts/coverage-jest/Settings/StaticSettingsField/StaticSettingsFieldComponent/index.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/StaticSettingsField/index.html +1 -1
- package/src/artifacts/coverage-jest/Settings/StaticSettingsField/index.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/constants/index.html +1 -1
- package/src/artifacts/coverage-jest/Settings/constants/index.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/constants/queryKeys.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/contexts/SettingsContext.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/contexts/index.html +1 -1
- package/src/artifacts/coverage-jest/Settings/contexts/index.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/hooks/index.html +1 -1
- package/src/artifacts/coverage-jest/Settings/hooks/index.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/hooks/staticSettingsPages/index.html +1 -1
- package/src/artifacts/coverage-jest/Settings/hooks/staticSettingsPages/index.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/hooks/staticSettingsPages/useSettingCallout/index.html +1 -1
- package/src/artifacts/coverage-jest/Settings/hooks/staticSettingsPages/useSettingCallout/index.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/hooks/staticSettingsPages/useSettingCallout/useSettingCallout.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/hooks/staticSettingsPages/useSettingsSectionInitalValues/index.html +1 -1
- package/src/artifacts/coverage-jest/Settings/hooks/staticSettingsPages/useSettingsSectionInitalValues/index.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/hooks/staticSettingsPages/useSettingsSectionInitalValues/useSettingsSectionInitalValues.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/hooks/staticSettingsPages/useStaticSettingsSection.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/hooks/useAppSettings/index.html +1 -1
- package/src/artifacts/coverage-jest/Settings/hooks/useAppSettings/index.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/hooks/useAppSettings/useAppSettings.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/hooks/useSettingSection/index.html +1 -1
- package/src/artifacts/coverage-jest/Settings/hooks/useSettingSection/index.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/hooks/useSettingSection/useSettingSection.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/hooks/useSettings/index.html +1 -1
- package/src/artifacts/coverage-jest/Settings/hooks/useSettings/index.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/hooks/useSettings/useSettings.js.html +1 -1
- package/src/artifacts/coverage-jest/Settings/index.html +1 -1
- package/src/artifacts/coverage-jest/Settings/index.js.html +1 -1
- package/src/artifacts/coverage-jest/Tags/Tags.js.html +1 -1
- package/src/artifacts/coverage-jest/Tags/hooks/index.html +1 -1
- package/src/artifacts/coverage-jest/Tags/hooks/index.js.html +1 -1
- package/src/artifacts/coverage-jest/Tags/hooks/useTags.js.html +1 -1
- package/src/artifacts/coverage-jest/Tags/hooks/useTagsEnabled.js.html +1 -1
- package/src/artifacts/coverage-jest/Tags/index.html +1 -1
- package/src/artifacts/coverage-jest/Tags/index.js.html +1 -1
- package/src/artifacts/coverage-jest/Tags/tagsConfig.js.html +1 -1
- package/src/artifacts/coverage-jest/Typedown/Typedown.js.html +230 -62
- package/src/artifacts/coverage-jest/Typedown/index.html +15 -15
- package/src/artifacts/coverage-jest/Typedown/index.js.html +1 -1
- package/src/artifacts/coverage-jest/cobertura-coverage.xml +252 -103
- package/src/artifacts/coverage-jest/constants/comparators.js.html +1 -1
- package/src/artifacts/coverage-jest/constants/customProperties.js.html +1 -1
- package/src/artifacts/coverage-jest/constants/endpoints.js.html +1 -1
- package/src/artifacts/coverage-jest/constants/eventCodes.js.html +1 -1
- package/src/artifacts/coverage-jest/constants/index.html +1 -1
- package/src/artifacts/coverage-jest/constants/pagination.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/index.html +1 -1
- package/src/artifacts/coverage-jest/hooks/index.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/intlHooks/index.html +1 -1
- package/src/artifacts/coverage-jest/hooks/intlHooks/index.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/intlHooks/useIntlKey/index.html +1 -1
- package/src/artifacts/coverage-jest/hooks/intlHooks/useIntlKey/index.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/intlHooks/useIntlKey/useIntlKey.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/intlHooks/useIntlKeyStore/index.html +1 -1
- package/src/artifacts/coverage-jest/hooks/intlHooks/useIntlKeyStore/index.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/intlHooks/useIntlKeyStore/useIntlKeyStore.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/intlHooks/useKintIntl/index.html +1 -1
- package/src/artifacts/coverage-jest/hooks/intlHooks/useKintIntl/index.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/intlHooks/useKintIntl/useKintIntl.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/typedownHooks/index.html +14 -14
- package/src/artifacts/coverage-jest/hooks/typedownHooks/index.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/typedownHooks/useTypedown.js.html +318 -105
- package/src/artifacts/coverage-jest/hooks/typedownHooks/useTypedownData.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/typedownHooks/useTypedownToggle.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/useActionListRef.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/useActiveElement.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/useCustomProperties.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/useHelperApp.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/useInvalidateRefdata/index.html +1 -1
- package/src/artifacts/coverage-jest/hooks/useInvalidateRefdata/index.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/useInvalidateRefdata/useInvalidateRefdata.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/useKiwtFieldArray.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/useKiwtSASQuery.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/useLocalPageStore.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/useLocalStorageState.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/useModConfigEntries.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/useMutateCustomProperties/index.html +1 -1
- package/src/artifacts/coverage-jest/hooks/useMutateCustomProperties/index.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/useMutateCustomProperties/useMutateCustomProperties.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/useMutateGeneric/index.html +1 -1
- package/src/artifacts/coverage-jest/hooks/useMutateGeneric/index.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/useMutateGeneric/useMutateGeneric.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/useMutateModConfigEntry.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/useMutateRefdataCategory/index.html +1 -1
- package/src/artifacts/coverage-jest/hooks/useMutateRefdataCategory/index.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/useMutateRefdataCategory/useMutateRefdataCategory.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/useMutateRefdataValue/index.html +1 -1
- package/src/artifacts/coverage-jest/hooks/useMutateRefdataValue/index.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/useMutateRefdataValue/useMutateRefdataValue.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/usePrevNextPagination.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/useQIndex.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/useRefdata.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/useSASQQueryMeta.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/useStandaloneSASQQueryParameter/index.html +1 -1
- package/src/artifacts/coverage-jest/hooks/useStandaloneSASQQueryParameter/index.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/useStandaloneSASQQueryParameter/useStandaloneSASQQueryParameter.js.html +1 -1
- package/src/artifacts/coverage-jest/hooks/useTemplates.js.html +1 -1
- package/src/artifacts/coverage-jest/index.html +40 -25
- package/src/artifacts/coverage-jest/utils/buildUrl.js.html +1 -1
- package/src/artifacts/coverage-jest/utils/filterParsers/deparseKiwtQueryFilters.js.html +1 -1
- package/src/artifacts/coverage-jest/utils/filterParsers/index.html +1 -1
- package/src/artifacts/coverage-jest/utils/filterParsers/index.js.html +1 -1
- package/src/artifacts/coverage-jest/utils/filterParsers/parseKiwtQueryFilters.js.html +1 -1
- package/src/artifacts/coverage-jest/utils/filterParsers/parseKiwtQueryGroups.js.html +1 -1
- package/src/artifacts/coverage-jest/utils/filterParsers/parseKiwtQueryString.js.html +1 -1
- package/src/artifacts/coverage-jest/utils/generateKiwtQuery.js.html +1 -1
- package/src/artifacts/coverage-jest/utils/generateKiwtQueryParams/generateKiwtQueryParams.js.html +1 -1
- package/src/artifacts/coverage-jest/utils/generateKiwtQueryParams/index.html +1 -1
- package/src/artifacts/coverage-jest/utils/generateKiwtQueryParams/index.js.html +1 -1
- package/src/artifacts/coverage-jest/utils/groupCustomPropertiesByCtx.js.html +1 -1
- package/src/artifacts/coverage-jest/utils/highlightString.js.html +1 -1
- package/src/artifacts/coverage-jest/utils/index.html +1 -1
- package/src/artifacts/coverage-jest/utils/index.js.html +1 -1
- package/src/artifacts/coverage-jest/utils/matchString.js.html +1 -1
- package/src/artifacts/coverage-jest/utils/modConfigEntriesQueryKey.js.html +1 -1
- package/src/artifacts/coverage-jest/utils/parseErrorResponse.js.html +1 -1
- package/src/artifacts/coverage-jest/utils/parseModConfigEntry.js.html +1 -1
- package/src/artifacts/coverage-jest/utils/refdataOptions.js.html +1 -1
- package/src/artifacts/coverage-jest/utils/refdataQueryKey/index.html +1 -1
- package/src/artifacts/coverage-jest/utils/refdataQueryKey/index.js.html +1 -1
- package/src/artifacts/coverage-jest/utils/refdataQueryKey/refdataQueryKey.js.html +1 -1
- package/src/artifacts/coverage-jest/utils/selectorSafe.js.html +1 -1
- package/src/artifacts/coverage-jest/utils/sortByLabel.js.html +1 -1
- package/src/artifacts/coverage-jest/utils/toCamelCase.js.html +1 -1
- package/src/artifacts/coverage-jest/utils/typedownQueryKey.js.html +1 -1
- package/src/artifacts/coverage-jest/validators/index.html +1 -1
- package/src/artifacts/coverage-jest/validators/index.js.html +1 -1
- package/src/artifacts/coverage-jest/validators/validators.js.html +1 -1
- package/src/index.js +4 -0
- package/src/lib/ButtonTypedown/ButtonTypedown.js +53 -0
- package/src/lib/ButtonTypedown/README.md +53 -0
- package/src/lib/ButtonTypedown/index.js +1 -0
- package/src/lib/Typedown/README.md +24 -21
- package/src/lib/Typedown/Typedown.js +106 -50
- package/src/lib/hooks/typedownHooks/useTypedown.js +165 -94
- package/styles/TypeDown.css +4 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,25 @@
|
|
|
1
|
+
## [5.31.1](https://gitlab.com/knowledge-integration/folio/stripes-kint-components/compare/v5.31.0...v5.31.1) (2025-12-12)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Bug Fixes
|
|
5
|
+
|
|
6
|
+
* **Typedown:** OverlayContainer catches previous focus when Typedown is first element in module ([a516fca](https://gitlab.com/knowledge-integration/folio/stripes-kint-components/commit/a516fca4d89c30b916f6ac09c27e9e995f9b5391))
|
|
7
|
+
* **Typedown:** Typedown focus issues have been sorted, ButtonTypedown remembers what was typed ([15f8e11](https://gitlab.com/knowledge-integration/folio/stripes-kint-components/commit/15f8e111fbbe3a125f95e61ba1d21727de293607))
|
|
8
|
+
|
|
9
|
+
# [5.31.0](https://gitlab.com/knowledge-integration/folio/stripes-kint-components/compare/v5.30.0...v5.31.0) (2025-12-12)
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
### Bug Fixes
|
|
13
|
+
|
|
14
|
+
* **Typedown:** Prevent typedown from closing when scrollbar is clicked ([34d072a](https://gitlab.com/knowledge-integration/folio/stripes-kint-components/commit/34d072ab76570953343f6ab221eb7a87e0e0957b))
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Features
|
|
18
|
+
|
|
19
|
+
* **ButtonTypedown:** Added new Typedown variant specifically designed to work more like a dropdown with the search inside the list ([7d2be52](https://gitlab.com/knowledge-integration/folio/stripes-kint-components/commit/7d2be52ab9015cfbd11920c7ba193d3f7a2fff9f))
|
|
20
|
+
* **Typedown:** Ability to renderHeader, improvements to focus handling ([d7cd617](https://gitlab.com/knowledge-integration/folio/stripes-kint-components/commit/d7cd617f5e66840d83deca046d3dc51979f6be69))
|
|
21
|
+
* **Typedown:** Typedown renderTrigger and getDisplayValue ([3c492ca](https://gitlab.com/knowledge-integration/folio/stripes-kint-components/commit/3c492ca8de9cb3a0c2d48d99670a4e6b187bb3d0))
|
|
22
|
+
|
|
1
23
|
# [5.30.0](https://gitlab.com/knowledge-integration/folio/stripes-kint-components/compare/v5.29.1...v5.30.0) (2025-12-10)
|
|
2
24
|
|
|
3
25
|
|
package/es/index.js
CHANGED
|
@@ -7,6 +7,7 @@ var _exportNames = {
|
|
|
7
7
|
ActionList: true,
|
|
8
8
|
Typedown: true,
|
|
9
9
|
QueryTypedown: true,
|
|
10
|
+
ButtonTypedown: true,
|
|
10
11
|
SearchField: true,
|
|
11
12
|
SearchKeyControl: true,
|
|
12
13
|
SASQRoute: true,
|
|
@@ -53,6 +54,12 @@ Object.defineProperty(exports, "ActionList", {
|
|
|
53
54
|
return _ActionList.default;
|
|
54
55
|
}
|
|
55
56
|
});
|
|
57
|
+
Object.defineProperty(exports, "ButtonTypedown", {
|
|
58
|
+
enumerable: true,
|
|
59
|
+
get: function () {
|
|
60
|
+
return _ButtonTypedown.default;
|
|
61
|
+
}
|
|
62
|
+
});
|
|
56
63
|
Object.defineProperty(exports, "ComboButton", {
|
|
57
64
|
enumerable: true,
|
|
58
65
|
get: function () {
|
|
@@ -339,6 +346,7 @@ Object.keys(_Settings).forEach(function (key) {
|
|
|
339
346
|
var _ActionList = _interopRequireDefault(require("./lib/ActionList"));
|
|
340
347
|
var _Typedown = _interopRequireDefault(require("./lib/Typedown"));
|
|
341
348
|
var _QueryTypedown = _interopRequireDefault(require("./lib/QueryTypedown"));
|
|
349
|
+
var _ButtonTypedown = _interopRequireDefault(require("./lib/ButtonTypedown"));
|
|
342
350
|
var _SearchField = _interopRequireDefault(require("./lib/SearchField"));
|
|
343
351
|
var _SearchKeyControl = _interopRequireDefault(require("./lib/SearchKeyControl"));
|
|
344
352
|
var _SASQRoute = _interopRequireDefault(require("./lib/SASQRoute"));
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
8
|
+
var _components = require("@folio/stripes/components");
|
|
9
|
+
var _SearchField = _interopRequireDefault(require("../SearchField"));
|
|
10
|
+
var _Typedown = _interopRequireDefault(require("../Typedown"));
|
|
11
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
12
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
13
|
+
const ButtonTypedown = _ref => {
|
|
14
|
+
let {
|
|
15
|
+
id,
|
|
16
|
+
renderListItem,
|
|
17
|
+
...typedownProps
|
|
18
|
+
} = _ref;
|
|
19
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typedown.default, {
|
|
20
|
+
getDisplayValue: () => false,
|
|
21
|
+
renderHeader: _ref2 => {
|
|
22
|
+
let {
|
|
23
|
+
handleType,
|
|
24
|
+
currentlyTyped
|
|
25
|
+
} = _ref2;
|
|
26
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_SearchField.default, {
|
|
27
|
+
id: `button-typedown-searchfield-${id}`,
|
|
28
|
+
marginBottom0: true,
|
|
29
|
+
onChange: handleType,
|
|
30
|
+
value: currentlyTyped
|
|
31
|
+
});
|
|
32
|
+
},
|
|
33
|
+
renderListItem: renderListItem,
|
|
34
|
+
renderTrigger: _ref3 => {
|
|
35
|
+
let {
|
|
36
|
+
selectedValue,
|
|
37
|
+
triggerComponentRef,
|
|
38
|
+
triggerId,
|
|
39
|
+
typedownTriggerKeyDownHandler
|
|
40
|
+
} = _ref3;
|
|
41
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.DropdownButton, {
|
|
42
|
+
ref: triggerComponentRef,
|
|
43
|
+
buttonStyle: "dropdownItem",
|
|
44
|
+
fullWidth: true,
|
|
45
|
+
id: triggerId,
|
|
46
|
+
marginBottom0: true,
|
|
47
|
+
onKeyDown: typedownTriggerKeyDownHandler,
|
|
48
|
+
children: renderListItem(selectedValue)
|
|
49
|
+
});
|
|
50
|
+
},
|
|
51
|
+
...typedownProps
|
|
52
|
+
});
|
|
53
|
+
};
|
|
54
|
+
var _default = exports.default = ButtonTypedown;
|
|
55
|
+
ButtonTypedown.propTypes = {
|
|
56
|
+
onType: _propTypes.default.func.isRequired,
|
|
57
|
+
renderListItem: _propTypes.default.func.isRequired
|
|
58
|
+
// REST OF TYPEDOWN PROPS
|
|
59
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "default", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _ButtonTypedown.default;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
var _ButtonTypedown = _interopRequireDefault(require("./ButtonTypedown"));
|
|
13
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
var _react =
|
|
7
|
+
var _react = require("react");
|
|
8
8
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
9
9
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
10
10
|
var _get = _interopRequireDefault(require("lodash/get"));
|
|
@@ -15,7 +15,6 @@ var _typedownHooks = require("../hooks/typedownHooks");
|
|
|
15
15
|
var _selectorSafe = _interopRequireDefault(require("../utils/selectorSafe"));
|
|
16
16
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
17
17
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
18
|
-
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
19
18
|
const Typedown = _ref => {
|
|
20
19
|
let {
|
|
21
20
|
className,
|
|
@@ -23,6 +22,8 @@ const Typedown = _ref => {
|
|
|
23
22
|
displayClearItem = true,
|
|
24
23
|
displayValueWhileOpen = true,
|
|
25
24
|
endOfList,
|
|
25
|
+
getDisplayValue,
|
|
26
|
+
// Can overrule displayValue entirely
|
|
26
27
|
id,
|
|
27
28
|
initialOpenDelay = 800,
|
|
28
29
|
// Initial opening delay of 800ms (handles any stripes animations)
|
|
@@ -34,13 +35,16 @@ const Typedown = _ref => {
|
|
|
34
35
|
onChange,
|
|
35
36
|
onType,
|
|
36
37
|
renderFooter = null,
|
|
38
|
+
renderHeader = null,
|
|
37
39
|
renderListItem = null,
|
|
40
|
+
renderTrigger = null,
|
|
38
41
|
required,
|
|
39
42
|
selectedStyles,
|
|
40
43
|
// A way to pass any styles that need to be applied globally on selection
|
|
41
44
|
uniqueIdentificationPath = 'id'
|
|
42
45
|
} = _ref;
|
|
43
46
|
const selectedUniqueId = (0, _get.default)(input.value, uniqueIdentificationPath);
|
|
47
|
+
const [selectedValue, setSelectedValue] = (0, _react.useState)(input.value); // Track what's been selected in state as well
|
|
44
48
|
|
|
45
49
|
// Display data needs to be in line with data options but also able to react to default handleType
|
|
46
50
|
const [displayData, setDisplayData] = (0, _react.useState)(dataOptions);
|
|
@@ -53,7 +57,7 @@ const Typedown = _ref => {
|
|
|
53
57
|
}, [dataOptions]);
|
|
54
58
|
|
|
55
59
|
// Setup default handleType
|
|
56
|
-
const handleType = e => {
|
|
60
|
+
const handleType = (0, _react.useCallback)(e => {
|
|
57
61
|
const regex = new RegExp(`${e.target.value.toLowerCase()}`);
|
|
58
62
|
if (onType) {
|
|
59
63
|
onType(e);
|
|
@@ -70,20 +74,20 @@ const Typedown = _ref => {
|
|
|
70
74
|
} else {
|
|
71
75
|
setExactMatch(false);
|
|
72
76
|
}
|
|
73
|
-
};
|
|
77
|
+
}, [dataOptions, displayData, filterPath, onType, uniqueIdentificationPath]);
|
|
74
78
|
|
|
75
79
|
// Hook to set up all the essentials
|
|
76
80
|
const {
|
|
77
81
|
refs: {
|
|
78
82
|
listRef,
|
|
79
83
|
triggerRef,
|
|
84
|
+
triggerComponentRef,
|
|
80
85
|
overlayRef,
|
|
81
|
-
footerRef
|
|
86
|
+
footerRef,
|
|
87
|
+
headerRef
|
|
82
88
|
},
|
|
83
89
|
handlers: {
|
|
84
|
-
handleNextFocus
|
|
85
|
-
listKeyDownHandler,
|
|
86
|
-
searchFieldKeyDownHandler
|
|
90
|
+
handleNextFocus
|
|
87
91
|
},
|
|
88
92
|
variables: {
|
|
89
93
|
open,
|
|
@@ -92,21 +96,50 @@ const Typedown = _ref => {
|
|
|
92
96
|
searchWidth
|
|
93
97
|
}
|
|
94
98
|
} = (0, _typedownHooks.useTypedown)(input.name, {
|
|
99
|
+
dataOptions,
|
|
95
100
|
timeout: initialOpenDelay
|
|
96
101
|
});
|
|
97
102
|
const renderItem = (0, _react.useCallback)(function (option) {
|
|
98
103
|
let optionIsSelected = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
99
104
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
100
105
|
className: _TypeDown.default.listItem,
|
|
101
|
-
children: renderListItem ? renderListItem(option, currentlyTyped, exactMatch, optionIsSelected) : (0, _get.default)(option, uniqueIdentificationPath)
|
|
106
|
+
children: renderListItem ? renderListItem(option, currentlyTyped, exactMatch, optionIsSelected, selectedValue) : (0, _get.default)(option, uniqueIdentificationPath)
|
|
102
107
|
});
|
|
103
|
-
}, [currentlyTyped, exactMatch, renderListItem, uniqueIdentificationPath]);
|
|
108
|
+
}, [currentlyTyped, exactMatch, renderListItem, selectedValue, uniqueIdentificationPath]);
|
|
104
109
|
const handleChange = (0, _react.useCallback)(value => {
|
|
105
110
|
input.onChange(value);
|
|
111
|
+
setSelectedValue(value);
|
|
106
112
|
if (typeof onChange === 'function') {
|
|
107
113
|
onChange(value);
|
|
108
114
|
}
|
|
109
115
|
}, [input, onChange]);
|
|
116
|
+
const renderTypedownTrigger = () => {
|
|
117
|
+
const triggerComponentId = `typedown-trigger-${(0, _selectorSafe.default)(input.name)}`;
|
|
118
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
119
|
+
ref: triggerRef,
|
|
120
|
+
id: `typedown-parent-${(0, _selectorSafe.default)(input.name)}-trigger`,
|
|
121
|
+
children: renderTrigger ? renderTrigger({
|
|
122
|
+
// Pass all props in that searchfield uses.
|
|
123
|
+
handleType,
|
|
124
|
+
input,
|
|
125
|
+
// Pass input? Useful when not controlled I guess
|
|
126
|
+
meta,
|
|
127
|
+
selectedValue,
|
|
128
|
+
triggerComponentId,
|
|
129
|
+
triggerComponentRef
|
|
130
|
+
}) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_SearchField.default, {
|
|
131
|
+
ref: triggerComponentRef
|
|
132
|
+
// Pass meta through so correct styling gets applied to the TextField
|
|
133
|
+
,
|
|
134
|
+
id: triggerComponentId,
|
|
135
|
+
label: label,
|
|
136
|
+
marginBottom0: true,
|
|
137
|
+
meta: meta,
|
|
138
|
+
onChange: handleType,
|
|
139
|
+
required: required
|
|
140
|
+
})
|
|
141
|
+
});
|
|
142
|
+
};
|
|
110
143
|
const dropDown = (0, _react.useCallback)(() => {
|
|
111
144
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
112
145
|
className: _TypeDown.default.dropdownMenu,
|
|
@@ -114,27 +147,43 @@ const Typedown = _ref => {
|
|
|
114
147
|
style: {
|
|
115
148
|
'--searchWidth': `${searchWidth}px`
|
|
116
149
|
},
|
|
117
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
150
|
+
children: [renderHeader && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
151
|
+
ref: headerRef,
|
|
152
|
+
className: _TypeDown.default.header,
|
|
153
|
+
id: `typedown-header-${(0, _selectorSafe.default)(input.name)}`,
|
|
154
|
+
children: renderHeader({
|
|
155
|
+
currentlyTyped,
|
|
156
|
+
displayData,
|
|
157
|
+
handleType,
|
|
158
|
+
exactMatch
|
|
159
|
+
})
|
|
160
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
118
161
|
ref: listRef,
|
|
119
162
|
className: _TypeDown.default.listContainer,
|
|
120
|
-
id: "typedown-list"
|
|
163
|
+
id: "typedown-list"
|
|
164
|
+
/* This is an acceptable exception to the no-static-element-interactions
|
|
165
|
+
* as we are only PREVENTING interactions, namely focus change on scrollbar click
|
|
166
|
+
* Without this, the typedown closes instantly when the scrollbar is clicked or dragged.
|
|
167
|
+
* This does NOT prevent item click, as e.propagation is not prevented.
|
|
168
|
+
*/,
|
|
169
|
+
onMouseDown: e => e.preventDefault(),
|
|
121
170
|
children: displayData?.length ? displayData?.map((d, index) => {
|
|
122
171
|
const isSelectedEval = isSelected ? isSelected(input.value, d) : (0, _get.default)(input.value, uniqueIdentificationPath) === (0, _get.default)(d, uniqueIdentificationPath);
|
|
123
172
|
const selectedCSS = selectedStyles ?? _TypeDown.default.selectedMenuButton;
|
|
173
|
+
const uniqueButtonKey = `typedown-button-[${(0, _get.default)(d, uniqueIdentificationPath)}]`;
|
|
124
174
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)("button", {
|
|
125
175
|
className: (0, _classnames.default)(_TypeDown.default.fullWidth, _TypeDown.default.menuButton, {
|
|
126
176
|
[`${selectedCSS}`]: isSelectedEval
|
|
127
177
|
}),
|
|
128
178
|
"data-selected": isSelectedEval,
|
|
129
|
-
id:
|
|
179
|
+
id: uniqueButtonKey,
|
|
130
180
|
onClick: () => {
|
|
131
181
|
handleChange(d);
|
|
132
182
|
handleNextFocus();
|
|
133
183
|
},
|
|
134
|
-
onKeyDown: listKeyDownHandler,
|
|
135
184
|
type: "button",
|
|
136
185
|
children: renderItem(d, isSelectedEval)
|
|
137
|
-
},
|
|
186
|
+
}, uniqueButtonKey);
|
|
138
187
|
}) : endOfList || /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.EndOfList, {})
|
|
139
188
|
}), renderFooter && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
140
189
|
ref: footerRef,
|
|
@@ -143,32 +192,33 @@ const Typedown = _ref => {
|
|
|
143
192
|
children: renderFooter(displayData, currentlyTyped, exactMatch)
|
|
144
193
|
})]
|
|
145
194
|
});
|
|
146
|
-
}, [currentlyTyped, displayData, endOfList, exactMatch, footerRef, handleChange, handleNextFocus, input.name, input.value, isSelected,
|
|
147
|
-
const
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
children:
|
|
152
|
-
|
|
153
|
-
,
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
onChange: handleType,
|
|
159
|
-
onKeyDown: searchFieldKeyDownHandler,
|
|
160
|
-
required: required
|
|
161
|
-
})
|
|
162
|
-
});
|
|
163
|
-
};
|
|
195
|
+
}, [currentlyTyped, displayData, endOfList, exactMatch, footerRef, handleChange, handleNextFocus, handleType, headerRef, input.name, input.value, isSelected, listRef, renderFooter, renderHeader, renderItem, searchWidth, selectedStyles, uniqueIdentificationPath]);
|
|
196
|
+
const renderSelectedItem = (0, _react.useCallback)(() => /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
197
|
+
className: (0, _classnames.default)(_TypeDown.default.selectedDisplay),
|
|
198
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
199
|
+
className: _TypeDown.default.selectedItem,
|
|
200
|
+
children: renderItem(input.value)
|
|
201
|
+
}), displayClearItem && /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.IconButton, {
|
|
202
|
+
className: _TypeDown.default.clearItem,
|
|
203
|
+
icon: "times-circle-solid",
|
|
204
|
+
onClick: () => handleChange()
|
|
205
|
+
})]
|
|
206
|
+
}), [displayClearItem, handleChange, input.value, renderItem]);
|
|
164
207
|
const displayValue = (0, _react.useMemo)(() => {
|
|
208
|
+
// Allow full control over whether to display the value
|
|
209
|
+
if (getDisplayValue) {
|
|
210
|
+
return getDisplayValue({
|
|
211
|
+
selectedUniqueId,
|
|
212
|
+
open
|
|
213
|
+
});
|
|
214
|
+
}
|
|
165
215
|
return !!selectedUniqueId && (!open || displayValueWhileOpen);
|
|
166
|
-
}, [displayValueWhileOpen, open, selectedUniqueId]);
|
|
216
|
+
}, [displayValueWhileOpen, getDisplayValue, open, selectedUniqueId]);
|
|
167
217
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
|
|
168
218
|
ref: resizeRef,
|
|
169
219
|
className: (0, _classnames.default)(_TypeDown.default.typedown, className),
|
|
170
220
|
id: `typedown-id-${id}`,
|
|
171
|
-
children: [
|
|
221
|
+
children: [renderTypedownTrigger(), /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Popper, {
|
|
172
222
|
anchorRef: triggerRef,
|
|
173
223
|
className: (0, _classnames.default)(_TypeDown.default.dropdown, _TypeDown.default.fullWidth),
|
|
174
224
|
isOpen: open,
|
|
@@ -192,17 +242,7 @@ const Typedown = _ref => {
|
|
|
192
242
|
overlayRef: overlayRef,
|
|
193
243
|
portal: portal,
|
|
194
244
|
children: dropDown()
|
|
195
|
-
}, "typedown-menu-toggle"), displayValue &&
|
|
196
|
-
className: (0, _classnames.default)(_TypeDown.default.selectedDisplay),
|
|
197
|
-
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
198
|
-
className: _TypeDown.default.selectedItem,
|
|
199
|
-
children: renderItem(input.value)
|
|
200
|
-
}), displayClearItem && /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.IconButton, {
|
|
201
|
-
className: _TypeDown.default.clearItem,
|
|
202
|
-
icon: "times-circle-solid",
|
|
203
|
-
onClick: () => handleChange()
|
|
204
|
-
})]
|
|
205
|
-
})]
|
|
245
|
+
}, "typedown-menu-toggle"), displayValue && renderSelectedItem()]
|
|
206
246
|
});
|
|
207
247
|
};
|
|
208
248
|
Typedown.propTypes = {
|
|
@@ -212,6 +252,7 @@ Typedown.propTypes = {
|
|
|
212
252
|
displayValueWhileOpen: _propTypes.default.bool,
|
|
213
253
|
endOfList: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.node, _propTypes.default.element]),
|
|
214
254
|
filterPath: _propTypes.default.string,
|
|
255
|
+
getDisplayValue: _propTypes.default.func,
|
|
215
256
|
id: _propTypes.default.string,
|
|
216
257
|
initialOpenDelay: _propTypes.default.number,
|
|
217
258
|
input: _propTypes.default.object,
|
|
@@ -220,8 +261,10 @@ Typedown.propTypes = {
|
|
|
220
261
|
meta: _propTypes.default.object,
|
|
221
262
|
onChange: _propTypes.default.func,
|
|
222
263
|
onType: _propTypes.default.func,
|
|
264
|
+
renderHeader: _propTypes.default.func,
|
|
223
265
|
renderFooter: _propTypes.default.func,
|
|
224
266
|
renderListItem: _propTypes.default.func,
|
|
267
|
+
renderTrigger: _propTypes.default.func,
|
|
225
268
|
required: _propTypes.default.bool,
|
|
226
269
|
selectedStyles: _propTypes.default.string,
|
|
227
270
|
uniqueIdentificationPath: _propTypes.default.string
|
|
@@ -8,97 +8,163 @@ var _react = require("react");
|
|
|
8
8
|
var _reactResizeDetector = require("react-resize-detector");
|
|
9
9
|
var _components = require("@folio/stripes/components");
|
|
10
10
|
var _eventCodes = require("../../constants/eventCodes");
|
|
11
|
-
var _selectorSafe = _interopRequireDefault(require("../../utils/selectorSafe"));
|
|
12
11
|
var _useTypedownToggle = _interopRequireDefault(require("./useTypedownToggle"));
|
|
13
12
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
13
|
const useTypedown = function (name) {
|
|
15
14
|
let {
|
|
15
|
+
dataOptions,
|
|
16
16
|
timeout = 800
|
|
17
17
|
} = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
18
|
-
//
|
|
19
|
-
const
|
|
18
|
+
// SET UP STATE HOLDING DOM ELEMENTS
|
|
19
|
+
const [list, setList] = (0, _react.useState)();
|
|
20
|
+
const [trigger, setTrigger] = (0, _react.useState)();
|
|
21
|
+
const [footer, setFooter] = (0, _react.useState)();
|
|
22
|
+
const [header, setHeader] = (0, _react.useState)();
|
|
20
23
|
|
|
21
24
|
// SET UP REFS
|
|
22
|
-
const listRef = (0, _react.useRef)();
|
|
23
25
|
const triggerRef = (0, _react.useRef)();
|
|
24
26
|
const overlayRef = (0, _react.useRef)();
|
|
25
|
-
const
|
|
26
|
-
const
|
|
27
|
-
|
|
27
|
+
const listRef = (0, _react.useCallback)(node => setList(node), []);
|
|
28
|
+
const triggerComponentRef = (0, _react.useCallback)(node => setTrigger(node), []);
|
|
29
|
+
const footerRef = (0, _react.useCallback)(node => setFooter(node), []);
|
|
30
|
+
const headerRef = (0, _react.useCallback)(node => setHeader(node), []);
|
|
28
31
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
// Focus on next focusable element
|
|
39
|
-
elem.focus();
|
|
40
|
-
} else if (e.shiftKey) {
|
|
41
|
-
// We are at the beginning of the list, refocus on search bar
|
|
42
|
-
searchFieldComponent.focus();
|
|
43
|
-
} else {
|
|
44
|
-
// We are at the end of the list, move onto next focusable element in page
|
|
45
|
-
(0, _components.getNextFocusable)(searchFieldComponent, false).focus();
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
footer.setAttribute('hasListener', 'true');
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
// SET UP HANDLERS
|
|
53
|
-
const searchFieldKeyDownHandler = e => {
|
|
54
|
-
if (e.code === _eventCodes.UP_ARROW) {
|
|
55
|
-
const elem = (0, _components.getLastFocusable)(listRef.current, true, true);
|
|
56
|
-
if (elem) {
|
|
57
|
-
elem.focus();
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
if (e.code === _eventCodes.DOWN_ARROW) {
|
|
61
|
-
const elem = (0, _components.getFirstFocusable)(listRef.current, true, true);
|
|
62
|
-
if (elem) {
|
|
63
|
-
elem.focus();
|
|
64
|
-
}
|
|
32
|
+
// OVERLAY PORTAL
|
|
33
|
+
const portal = document.getElementById('OverlayContainer');
|
|
34
|
+
const getPreviousToTrigger = (0, _react.useCallback)(() => {
|
|
35
|
+
const prevElem = (0, _components.getPreviousFocusable)(trigger, false, false, false);
|
|
36
|
+
if (prevElem.closest('[id^=OverlayContainer]') !== null) {
|
|
37
|
+
// If we find ourselves inside the OverlayContainer when heading backwards from the trigger
|
|
38
|
+
// then we must be the first focusable element on the page.
|
|
39
|
+
// From here we need to skip over the overlay container and head backwards
|
|
40
|
+
return (0, _components.getPreviousFocusable)(portal, false, false, false);
|
|
65
41
|
}
|
|
42
|
+
return prevElem;
|
|
43
|
+
}, [portal, trigger]);
|
|
44
|
+
(0, _react.useEffect)(() => {
|
|
45
|
+
const cleanups = [];
|
|
66
46
|
|
|
67
|
-
//
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
//
|
|
71
|
-
const
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
47
|
+
// There appears to be some BIZARRE off-by-one issue with selectors here, that can be fixed by introducing a 1ms delay...
|
|
48
|
+
// I hate it but it is effective
|
|
49
|
+
setTimeout(() => {
|
|
50
|
+
// Split these out to shut up the linter
|
|
51
|
+
const rawFirstItemInList = list ? (0, _components.getFirstFocusable)(list) : null;
|
|
52
|
+
const rawLastItemInList = list ? (0, _components.getLastFocusable)(list) : null;
|
|
53
|
+
|
|
54
|
+
// If there are no dataOptions, this can get a bit stuck, so deliberately set to null when no dataOptions are present
|
|
55
|
+
const firstItemInList = dataOptions.length > 0 ? rawFirstItemInList : null;
|
|
56
|
+
const lastItemInList = dataOptions.length > 0 ? rawLastItemInList : null;
|
|
57
|
+
const configs = [
|
|
58
|
+
// --- HEADER CONFIG ---
|
|
59
|
+
{
|
|
60
|
+
element: header,
|
|
61
|
+
allowTabThroughContents: true,
|
|
62
|
+
previousElement: trigger,
|
|
63
|
+
nextElement: (footer ? (0, _components.getFirstFocusable)(footer) : null) ?? (0, _components.getNextFocusable)(trigger, false),
|
|
64
|
+
downElement: firstItemInList,
|
|
65
|
+
upElement: lastItemInList
|
|
66
|
+
},
|
|
67
|
+
// --- FOOTER CONFIG ---
|
|
68
|
+
{
|
|
69
|
+
element: footer,
|
|
70
|
+
allowTabThroughContents: true,
|
|
71
|
+
previousElement: (header ? (0, _components.getLastFocusable)(header) : null) ?? trigger,
|
|
72
|
+
nextElement: (0, _components.getNextFocusable)(trigger, false),
|
|
73
|
+
downElement: firstItemInList,
|
|
74
|
+
upElement: lastItemInList
|
|
75
|
+
},
|
|
76
|
+
// --- LIST/CONTAINER CONFIG ---
|
|
77
|
+
{
|
|
78
|
+
element: list,
|
|
79
|
+
allowUpDownThroughContents: true,
|
|
80
|
+
previousElement: (header ? (0, _components.getLastFocusable)(header) : null) ?? trigger,
|
|
81
|
+
nextElement: (footer ? (0, _components.getFirstFocusable)(footer) : null) ?? (0, _components.getNextFocusable)(trigger, false)
|
|
82
|
+
},
|
|
83
|
+
// --- TRIGGER CONFIG ---
|
|
84
|
+
{
|
|
85
|
+
element: trigger,
|
|
86
|
+
nextElement: (header ? (0, _components.getFirstFocusable)(header) : null) ?? (footer ? (0, _components.getFirstFocusable)(footer) : null) ?? (0, _components.getNextFocusable)(trigger, false),
|
|
87
|
+
previousElement: getPreviousToTrigger(),
|
|
88
|
+
downElement: firstItemInList,
|
|
89
|
+
upElement: lastItemInList
|
|
90
|
+
}].filter(c => c.element); // Filter out configs where the element (e.g., header) is null
|
|
91
|
+
|
|
92
|
+
const setupListener = config => {
|
|
93
|
+
const {
|
|
94
|
+
element,
|
|
95
|
+
allowTabThroughContents,
|
|
96
|
+
previousElement,
|
|
97
|
+
nextElement,
|
|
98
|
+
allowUpDownThroughContents,
|
|
99
|
+
downElement,
|
|
100
|
+
upElement
|
|
101
|
+
} = config;
|
|
102
|
+
const handleTab = e => {
|
|
103
|
+
const IS_SHIFT = e.shiftKey;
|
|
104
|
+
const tabIgnoreContents = () => {
|
|
105
|
+
if (IS_SHIFT) {
|
|
106
|
+
return previousElement?.focus();
|
|
107
|
+
}
|
|
108
|
+
return nextElement?.focus();
|
|
109
|
+
};
|
|
110
|
+
if (!allowTabThroughContents) {
|
|
111
|
+
return tabIgnoreContents();
|
|
112
|
+
}
|
|
113
|
+
const focusFunc = IS_SHIFT ? _components.getPreviousFocusable : _components.getNextFocusable;
|
|
114
|
+
const elem = focusFunc(element, true, true, false, true);
|
|
115
|
+
if (elem) {
|
|
116
|
+
return elem.focus();
|
|
117
|
+
}
|
|
118
|
+
return tabIgnoreContents();
|
|
119
|
+
};
|
|
120
|
+
const handleUpDown = e => {
|
|
121
|
+
// Prevent the default behaviour
|
|
122
|
+
const IS_UP = e.code === _eventCodes.UP_ARROW;
|
|
123
|
+
const upDownIgnoreContents = () => {
|
|
124
|
+
if (IS_UP) {
|
|
125
|
+
return upElement?.focus();
|
|
126
|
+
}
|
|
127
|
+
return downElement?.focus();
|
|
128
|
+
};
|
|
129
|
+
if (!allowUpDownThroughContents) {
|
|
130
|
+
return upDownIgnoreContents();
|
|
131
|
+
}
|
|
132
|
+
const focusFunc = IS_UP ? _components.getPreviousFocusable : _components.getNextFocusable;
|
|
133
|
+
const elem = focusFunc(element, true, true, true, true); // Allow looping through elements
|
|
134
|
+
if (elem) {
|
|
135
|
+
return elem.focus();
|
|
136
|
+
}
|
|
137
|
+
return upDownIgnoreContents();
|
|
138
|
+
};
|
|
139
|
+
const handler = e => {
|
|
140
|
+
if (!element.contains(document.activeElement)) {
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
if (e.code === _eventCodes.TAB) {
|
|
144
|
+
e.preventDefault();
|
|
145
|
+
handleTab(e);
|
|
146
|
+
} else if (e.code === _eventCodes.DOWN_ARROW || e.code === _eventCodes.UP_ARROW) {
|
|
147
|
+
e.preventDefault();
|
|
148
|
+
handleUpDown(e);
|
|
149
|
+
}
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
// Add event listener and add the removal of said event listener to the cleanup function
|
|
153
|
+
element.addEventListener('keydown', handler);
|
|
154
|
+
cleanups.push(() => element.removeEventListener('keydown', handler));
|
|
155
|
+
};
|
|
156
|
+
|
|
157
|
+
// Set up the event listener for each config entry
|
|
158
|
+
configs.forEach(setupListener);
|
|
159
|
+
}, 0);
|
|
160
|
+
|
|
161
|
+
// Cleanup any event listeners
|
|
162
|
+
return () => {
|
|
163
|
+
cleanups.forEach(cleanup => cleanup());
|
|
164
|
+
};
|
|
165
|
+
// Re-add the listener ANY time any of the elements changes (this is why we're using callback refs)
|
|
166
|
+
}, [dataOptions, header, trigger, footer, list, getPreviousToTrigger]);
|
|
167
|
+
const handleNextFocus = () => (0, _components.getNextFocusable)(trigger, false).focus();
|
|
102
168
|
|
|
103
169
|
// SET UP VARIABLES
|
|
104
170
|
const {
|
|
@@ -120,20 +186,17 @@ const useTypedown = function (name) {
|
|
|
120
186
|
width: searchWidth,
|
|
121
187
|
ref: resizeRef
|
|
122
188
|
} = (0, _reactResizeDetector.useResizeDetector)();
|
|
123
|
-
|
|
124
|
-
// OVERLAY PORTAL
|
|
125
|
-
const portal = document.getElementById('OverlayContainer');
|
|
126
189
|
return {
|
|
127
190
|
refs: {
|
|
128
191
|
listRef,
|
|
129
192
|
triggerRef,
|
|
193
|
+
triggerComponentRef,
|
|
130
194
|
overlayRef,
|
|
131
|
-
footerRef
|
|
195
|
+
footerRef,
|
|
196
|
+
headerRef
|
|
132
197
|
},
|
|
133
198
|
handlers: {
|
|
134
|
-
handleNextFocus
|
|
135
|
-
listKeyDownHandler,
|
|
136
|
-
searchFieldKeyDownHandler
|
|
199
|
+
handleNextFocus
|
|
137
200
|
},
|
|
138
201
|
variables: {
|
|
139
202
|
open: useOpen ? open : false,
|