@k-int/stripes-kint-components 5.30.0 → 5.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (278) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/es/index.js +8 -0
  3. package/es/lib/ButtonTypedown/ButtonTypedown.js +58 -0
  4. package/es/lib/ButtonTypedown/index.js +13 -0
  5. package/es/lib/Typedown/Typedown.js +85 -44
  6. package/es/lib/hooks/typedownHooks/useTypedown.js +104 -81
  7. package/package.json +1 -1
  8. package/src/artifacts/coverage-jest/ActionList/ActionList.js.html +1 -1
  9. package/src/artifacts/coverage-jest/ActionList/ActionListFieldArray.js.html +1 -1
  10. package/src/artifacts/coverage-jest/ActionList/index.html +1 -1
  11. package/src/artifacts/coverage-jest/ActionList/index.js.html +1 -1
  12. package/src/artifacts/coverage-jest/ButtonTypedown/ButtonTypedown.js.html +241 -0
  13. package/src/artifacts/coverage-jest/ButtonTypedown/index.html +131 -0
  14. package/src/artifacts/coverage-jest/ButtonTypedown/index.js.html +88 -0
  15. package/src/artifacts/coverage-jest/ComboButton/ComboButton.js.html +1 -1
  16. package/src/artifacts/coverage-jest/ComboButton/index.html +1 -1
  17. package/src/artifacts/coverage-jest/ComboButton/index.js.html +1 -1
  18. package/src/artifacts/coverage-jest/CustomProperties/Config/CustomPropertiesLookup.js.html +1 -1
  19. package/src/artifacts/coverage-jest/CustomProperties/Config/CustomPropertiesSettings.js.html +1 -1
  20. package/src/artifacts/coverage-jest/CustomProperties/Config/CustomPropertyForm.js.html +1 -1
  21. package/src/artifacts/coverage-jest/CustomProperties/Config/CustomPropertyView.js.html +1 -1
  22. package/src/artifacts/coverage-jest/CustomProperties/Config/index.html +1 -1
  23. package/src/artifacts/coverage-jest/CustomProperties/Config/index.js.html +1 -1
  24. package/src/artifacts/coverage-jest/CustomProperties/Edit/CustomPropertiesEdit.js.html +1 -1
  25. package/src/artifacts/coverage-jest/CustomProperties/Edit/CustomPropertiesEditCtx.js.html +1 -1
  26. package/src/artifacts/coverage-jest/CustomProperties/Edit/CustomPropertiesListField.js.html +1 -1
  27. package/src/artifacts/coverage-jest/CustomProperties/Edit/CustomPropertyField.js.html +1 -1
  28. package/src/artifacts/coverage-jest/CustomProperties/Edit/CustomPropertyFormCard.js.html +1 -1
  29. package/src/artifacts/coverage-jest/CustomProperties/Edit/index.html +1 -1
  30. package/src/artifacts/coverage-jest/CustomProperties/Edit/index.js.html +1 -1
  31. package/src/artifacts/coverage-jest/CustomProperties/Edit/testResources.js.html +1 -1
  32. package/src/artifacts/coverage-jest/CustomProperties/Filter/CustomPropertiesFilter.js.html +1 -1
  33. package/src/artifacts/coverage-jest/CustomProperties/Filter/CustomPropertiesFilterField.js.html +1 -1
  34. package/src/artifacts/coverage-jest/CustomProperties/Filter/CustomPropertiesFilterFieldArray.js.html +1 -1
  35. package/src/artifacts/coverage-jest/CustomProperties/Filter/CustomPropertiesFilterForm.js.html +1 -1
  36. package/src/artifacts/coverage-jest/CustomProperties/Filter/CustomPropertiesRule.js.html +1 -1
  37. package/src/artifacts/coverage-jest/CustomProperties/Filter/index.html +1 -1
  38. package/src/artifacts/coverage-jest/CustomProperties/Filter/index.js.html +1 -1
  39. package/src/artifacts/coverage-jest/CustomProperties/Filter/testResources.js.html +1 -1
  40. package/src/artifacts/coverage-jest/CustomProperties/Filter/useOperators.js.html +1 -1
  41. package/src/artifacts/coverage-jest/CustomProperties/Filter/useParseActiveFilterStrings.js.html +1 -1
  42. package/src/artifacts/coverage-jest/CustomProperties/Filter/useValueProps.js.html +1 -1
  43. package/src/artifacts/coverage-jest/CustomProperties/View/CustomPropertiesView.js.html +1 -1
  44. package/src/artifacts/coverage-jest/CustomProperties/View/CustomPropertiesViewCtx.js.html +1 -1
  45. package/src/artifacts/coverage-jest/CustomProperties/View/CustomPropertyCard.js.html +1 -1
  46. package/src/artifacts/coverage-jest/CustomProperties/View/index.html +1 -1
  47. package/src/artifacts/coverage-jest/CustomProperties/View/index.js.html +1 -1
  48. package/src/artifacts/coverage-jest/CustomProperties/View/testResources.js.html +1 -1
  49. package/src/artifacts/coverage-jest/CustomProperties/index.html +1 -1
  50. package/src/artifacts/coverage-jest/CustomProperties/index.js.html +1 -1
  51. package/src/artifacts/coverage-jest/CycleButton/CycleButton.js.html +1 -1
  52. package/src/artifacts/coverage-jest/CycleButton/index.html +1 -1
  53. package/src/artifacts/coverage-jest/CycleButton/index.js.html +1 -1
  54. package/src/artifacts/coverage-jest/FieldLabel/FieldLabel.js.html +1 -1
  55. package/src/artifacts/coverage-jest/FieldLabel/index.html +1 -1
  56. package/src/artifacts/coverage-jest/FieldLabel/index.js.html +1 -1
  57. package/src/artifacts/coverage-jest/FormModal/FormModal.js.html +1 -1
  58. package/src/artifacts/coverage-jest/FormModal/index.html +1 -1
  59. package/src/artifacts/coverage-jest/FormModal/index.js.html +1 -1
  60. package/src/artifacts/coverage-jest/FormattedKintMessage/FormattedKintMessage.js.html +1 -1
  61. package/src/artifacts/coverage-jest/FormattedKintMessage/index.html +1 -1
  62. package/src/artifacts/coverage-jest/FormattedKintMessage/index.js.html +1 -1
  63. package/src/artifacts/coverage-jest/IconSelect/IconSelect.js.html +1 -1
  64. package/src/artifacts/coverage-jest/IconSelect/index.html +1 -1
  65. package/src/artifacts/coverage-jest/IconSelect/index.js.html +1 -1
  66. package/src/artifacts/coverage-jest/NoResultsMessage/NoResultsMessage.js.html +1 -1
  67. package/src/artifacts/coverage-jest/NoResultsMessage/index.html +1 -1
  68. package/src/artifacts/coverage-jest/NoResultsMessage/index.js.html +1 -1
  69. package/src/artifacts/coverage-jest/NumberField/NumberField.js.html +1 -1
  70. package/src/artifacts/coverage-jest/NumberField/index.html +1 -1
  71. package/src/artifacts/coverage-jest/NumberField/index.js.html +1 -1
  72. package/src/artifacts/coverage-jest/QueryTypedown/QueryTypedown.js.html +1 -1
  73. package/src/artifacts/coverage-jest/QueryTypedown/index.html +1 -1
  74. package/src/artifacts/coverage-jest/QueryTypedown/index.js.html +1 -1
  75. package/src/artifacts/coverage-jest/RefdataButtons/RefdataButtons.js.html +1 -1
  76. package/src/artifacts/coverage-jest/RefdataButtons/index.html +1 -1
  77. package/src/artifacts/coverage-jest/RefdataButtons/index.js.html +1 -1
  78. package/src/artifacts/coverage-jest/ResponsiveButtonGroup/ResponsiveButtonGroup.js.html +1 -1
  79. package/src/artifacts/coverage-jest/ResponsiveButtonGroup/index.html +1 -1
  80. package/src/artifacts/coverage-jest/ResponsiveButtonGroup/index.js.html +1 -1
  81. package/src/artifacts/coverage-jest/ResponsiveButtonGroup/useResponsiveButtonGroupSizing.js.html +1 -1
  82. package/src/artifacts/coverage-jest/RichSelect/RichSelect.js.html +1 -1
  83. package/src/artifacts/coverage-jest/RichSelect/index.html +1 -1
  84. package/src/artifacts/coverage-jest/RichSelect/index.js.html +1 -1
  85. package/src/artifacts/coverage-jest/RichSelect/useSelectedOption.js.html +1 -1
  86. package/src/artifacts/coverage-jest/SASQLookupComponent/SASQLookupComponent.js.html +1 -1
  87. package/src/artifacts/coverage-jest/SASQLookupComponent/TableBody/TableBody.js.html +1 -1
  88. package/src/artifacts/coverage-jest/SASQLookupComponent/TableBody/index.html +1 -1
  89. package/src/artifacts/coverage-jest/SASQLookupComponent/TableBody/index.js.html +1 -1
  90. package/src/artifacts/coverage-jest/SASQLookupComponent/index.html +1 -1
  91. package/src/artifacts/coverage-jest/SASQLookupComponent/index.js.html +1 -1
  92. package/src/artifacts/coverage-jest/SASQRoute/SASQRoute.js.html +1 -1
  93. package/src/artifacts/coverage-jest/SASQRoute/index.html +1 -1
  94. package/src/artifacts/coverage-jest/SASQRoute/index.js.html +1 -1
  95. package/src/artifacts/coverage-jest/SASQViewComponent/SASQViewComponent.js.html +1 -1
  96. package/src/artifacts/coverage-jest/SASQViewComponent/index.html +1 -1
  97. package/src/artifacts/coverage-jest/SASQViewComponent/index.js.html +1 -1
  98. package/src/artifacts/coverage-jest/SearchField/SearchField.js.html +1 -1
  99. package/src/artifacts/coverage-jest/SearchField/index.html +1 -1
  100. package/src/artifacts/coverage-jest/SearchField/index.js.html +1 -1
  101. package/src/artifacts/coverage-jest/SearchKeyControl/SearchKeyControl.js.html +1 -1
  102. package/src/artifacts/coverage-jest/SearchKeyControl/index.html +1 -1
  103. package/src/artifacts/coverage-jest/SearchKeyControl/index.js.html +1 -1
  104. package/src/artifacts/coverage-jest/Settings/EditableRefdataCategoryList/EditableRefdataCategoryList.js.html +1 -1
  105. package/src/artifacts/coverage-jest/Settings/EditableRefdataCategoryList/index.html +1 -1
  106. package/src/artifacts/coverage-jest/Settings/EditableRefdataCategoryList/index.js.html +1 -1
  107. package/src/artifacts/coverage-jest/Settings/EditableRefdataList/EditableRefdataList.js.html +1 -1
  108. package/src/artifacts/coverage-jest/Settings/EditableRefdataList/index.html +1 -1
  109. package/src/artifacts/coverage-jest/Settings/EditableRefdataList/index.js.html +1 -1
  110. package/src/artifacts/coverage-jest/Settings/EditableSettingsList/EditableSettingsList.js.html +1 -1
  111. package/src/artifacts/coverage-jest/Settings/EditableSettingsList/EditableSettingsListFieldArray/EditableSettingsListFieldArray.js.html +1 -1
  112. package/src/artifacts/coverage-jest/Settings/EditableSettingsList/EditableSettingsListFieldArray/index.html +1 -1
  113. package/src/artifacts/coverage-jest/Settings/EditableSettingsList/EditableSettingsListFieldArray/index.js.html +1 -1
  114. package/src/artifacts/coverage-jest/Settings/EditableSettingsList/SettingField/EditSettingValue/EditSettingValue.js.html +1 -1
  115. package/src/artifacts/coverage-jest/Settings/EditableSettingsList/SettingField/EditSettingValue/index.html +1 -1
  116. package/src/artifacts/coverage-jest/Settings/EditableSettingsList/SettingField/EditSettingValue/index.js.html +1 -1
  117. package/src/artifacts/coverage-jest/Settings/EditableSettingsList/SettingField/RenderSettingValue/RenderSettingValue.js.html +1 -1
  118. package/src/artifacts/coverage-jest/Settings/EditableSettingsList/SettingField/RenderSettingValue/index.html +1 -1
  119. package/src/artifacts/coverage-jest/Settings/EditableSettingsList/SettingField/RenderSettingValue/index.js.html +1 -1
  120. package/src/artifacts/coverage-jest/Settings/EditableSettingsList/SettingField/SettingField.js.html +1 -1
  121. package/src/artifacts/coverage-jest/Settings/EditableSettingsList/SettingField/index.html +1 -1
  122. package/src/artifacts/coverage-jest/Settings/EditableSettingsList/SettingField/index.js.html +1 -1
  123. package/src/artifacts/coverage-jest/Settings/EditableSettingsList/index.html +1 -1
  124. package/src/artifacts/coverage-jest/Settings/EditableSettingsList/index.js.html +1 -1
  125. package/src/artifacts/coverage-jest/Settings/RefdataCategoriesSettings/RefdataCategoriesSettings.js.html +1 -1
  126. package/src/artifacts/coverage-jest/Settings/RefdataCategoriesSettings/index.html +1 -1
  127. package/src/artifacts/coverage-jest/Settings/RefdataCategoriesSettings/index.js.html +1 -1
  128. package/src/artifacts/coverage-jest/Settings/SettingPage/SettingPage.js.html +1 -1
  129. package/src/artifacts/coverage-jest/Settings/SettingPage/SettingPagePane/SettingPagePane.js.html +1 -1
  130. package/src/artifacts/coverage-jest/Settings/SettingPage/SettingPagePane/index.html +1 -1
  131. package/src/artifacts/coverage-jest/Settings/SettingPage/SettingPagePane/index.js.html +1 -1
  132. package/src/artifacts/coverage-jest/Settings/SettingPage/index.html +1 -1
  133. package/src/artifacts/coverage-jest/Settings/SettingPage/index.js.html +1 -1
  134. package/src/artifacts/coverage-jest/Settings/SettingsFormContainer/SettingsFormContainer.js.html +1 -1
  135. package/src/artifacts/coverage-jest/Settings/SettingsFormContainer/index.html +1 -1
  136. package/src/artifacts/coverage-jest/Settings/SettingsFormContainer/index.js.html +1 -1
  137. package/src/artifacts/coverage-jest/Settings/StaticSettingsField/StaticSettingsField.js.html +1 -1
  138. package/src/artifacts/coverage-jest/Settings/StaticSettingsField/StaticSettingsFieldComponent/StaticSettingsFieldComponent.js.html +1 -1
  139. package/src/artifacts/coverage-jest/Settings/StaticSettingsField/StaticSettingsFieldComponent/index.html +1 -1
  140. package/src/artifacts/coverage-jest/Settings/StaticSettingsField/StaticSettingsFieldComponent/index.js.html +1 -1
  141. package/src/artifacts/coverage-jest/Settings/StaticSettingsField/index.html +1 -1
  142. package/src/artifacts/coverage-jest/Settings/StaticSettingsField/index.js.html +1 -1
  143. package/src/artifacts/coverage-jest/Settings/constants/index.html +1 -1
  144. package/src/artifacts/coverage-jest/Settings/constants/index.js.html +1 -1
  145. package/src/artifacts/coverage-jest/Settings/constants/queryKeys.js.html +1 -1
  146. package/src/artifacts/coverage-jest/Settings/contexts/SettingsContext.js.html +1 -1
  147. package/src/artifacts/coverage-jest/Settings/contexts/index.html +1 -1
  148. package/src/artifacts/coverage-jest/Settings/contexts/index.js.html +1 -1
  149. package/src/artifacts/coverage-jest/Settings/hooks/index.html +1 -1
  150. package/src/artifacts/coverage-jest/Settings/hooks/index.js.html +1 -1
  151. package/src/artifacts/coverage-jest/Settings/hooks/staticSettingsPages/index.html +1 -1
  152. package/src/artifacts/coverage-jest/Settings/hooks/staticSettingsPages/index.js.html +1 -1
  153. package/src/artifacts/coverage-jest/Settings/hooks/staticSettingsPages/useSettingCallout/index.html +1 -1
  154. package/src/artifacts/coverage-jest/Settings/hooks/staticSettingsPages/useSettingCallout/index.js.html +1 -1
  155. package/src/artifacts/coverage-jest/Settings/hooks/staticSettingsPages/useSettingCallout/useSettingCallout.js.html +1 -1
  156. package/src/artifacts/coverage-jest/Settings/hooks/staticSettingsPages/useSettingsSectionInitalValues/index.html +1 -1
  157. package/src/artifacts/coverage-jest/Settings/hooks/staticSettingsPages/useSettingsSectionInitalValues/index.js.html +1 -1
  158. package/src/artifacts/coverage-jest/Settings/hooks/staticSettingsPages/useSettingsSectionInitalValues/useSettingsSectionInitalValues.js.html +1 -1
  159. package/src/artifacts/coverage-jest/Settings/hooks/staticSettingsPages/useStaticSettingsSection.js.html +1 -1
  160. package/src/artifacts/coverage-jest/Settings/hooks/useAppSettings/index.html +1 -1
  161. package/src/artifacts/coverage-jest/Settings/hooks/useAppSettings/index.js.html +1 -1
  162. package/src/artifacts/coverage-jest/Settings/hooks/useAppSettings/useAppSettings.js.html +1 -1
  163. package/src/artifacts/coverage-jest/Settings/hooks/useSettingSection/index.html +1 -1
  164. package/src/artifacts/coverage-jest/Settings/hooks/useSettingSection/index.js.html +1 -1
  165. package/src/artifacts/coverage-jest/Settings/hooks/useSettingSection/useSettingSection.js.html +1 -1
  166. package/src/artifacts/coverage-jest/Settings/hooks/useSettings/index.html +1 -1
  167. package/src/artifacts/coverage-jest/Settings/hooks/useSettings/index.js.html +1 -1
  168. package/src/artifacts/coverage-jest/Settings/hooks/useSettings/useSettings.js.html +1 -1
  169. package/src/artifacts/coverage-jest/Settings/index.html +1 -1
  170. package/src/artifacts/coverage-jest/Settings/index.js.html +1 -1
  171. package/src/artifacts/coverage-jest/Tags/Tags.js.html +1 -1
  172. package/src/artifacts/coverage-jest/Tags/hooks/index.html +1 -1
  173. package/src/artifacts/coverage-jest/Tags/hooks/index.js.html +1 -1
  174. package/src/artifacts/coverage-jest/Tags/hooks/useTags.js.html +1 -1
  175. package/src/artifacts/coverage-jest/Tags/hooks/useTagsEnabled.js.html +1 -1
  176. package/src/artifacts/coverage-jest/Tags/index.html +1 -1
  177. package/src/artifacts/coverage-jest/Tags/index.js.html +1 -1
  178. package/src/artifacts/coverage-jest/Tags/tagsConfig.js.html +1 -1
  179. package/src/artifacts/coverage-jest/Typedown/Typedown.js.html +219 -60
  180. package/src/artifacts/coverage-jest/Typedown/index.html +15 -15
  181. package/src/artifacts/coverage-jest/Typedown/index.js.html +1 -1
  182. package/src/artifacts/coverage-jest/cobertura-coverage.xml +196 -99
  183. package/src/artifacts/coverage-jest/constants/comparators.js.html +1 -1
  184. package/src/artifacts/coverage-jest/constants/customProperties.js.html +1 -1
  185. package/src/artifacts/coverage-jest/constants/endpoints.js.html +1 -1
  186. package/src/artifacts/coverage-jest/constants/eventCodes.js.html +1 -1
  187. package/src/artifacts/coverage-jest/constants/index.html +1 -1
  188. package/src/artifacts/coverage-jest/constants/pagination.js.html +1 -1
  189. package/src/artifacts/coverage-jest/hooks/index.html +1 -1
  190. package/src/artifacts/coverage-jest/hooks/index.js.html +1 -1
  191. package/src/artifacts/coverage-jest/hooks/intlHooks/index.html +1 -1
  192. package/src/artifacts/coverage-jest/hooks/intlHooks/index.js.html +1 -1
  193. package/src/artifacts/coverage-jest/hooks/intlHooks/useIntlKey/index.html +1 -1
  194. package/src/artifacts/coverage-jest/hooks/intlHooks/useIntlKey/index.js.html +1 -1
  195. package/src/artifacts/coverage-jest/hooks/intlHooks/useIntlKey/useIntlKey.js.html +1 -1
  196. package/src/artifacts/coverage-jest/hooks/intlHooks/useIntlKeyStore/index.html +1 -1
  197. package/src/artifacts/coverage-jest/hooks/intlHooks/useIntlKeyStore/index.js.html +1 -1
  198. package/src/artifacts/coverage-jest/hooks/intlHooks/useIntlKeyStore/useIntlKeyStore.js.html +1 -1
  199. package/src/artifacts/coverage-jest/hooks/intlHooks/useKintIntl/index.html +1 -1
  200. package/src/artifacts/coverage-jest/hooks/intlHooks/useKintIntl/index.js.html +1 -1
  201. package/src/artifacts/coverage-jest/hooks/intlHooks/useKintIntl/useKintIntl.js.html +1 -1
  202. package/src/artifacts/coverage-jest/hooks/typedownHooks/index.html +14 -14
  203. package/src/artifacts/coverage-jest/hooks/typedownHooks/index.js.html +1 -1
  204. package/src/artifacts/coverage-jest/hooks/typedownHooks/useTypedown.js.html +170 -116
  205. package/src/artifacts/coverage-jest/hooks/typedownHooks/useTypedownData.js.html +1 -1
  206. package/src/artifacts/coverage-jest/hooks/typedownHooks/useTypedownToggle.js.html +1 -1
  207. package/src/artifacts/coverage-jest/hooks/useActionListRef.js.html +1 -1
  208. package/src/artifacts/coverage-jest/hooks/useActiveElement.js.html +1 -1
  209. package/src/artifacts/coverage-jest/hooks/useCustomProperties.js.html +1 -1
  210. package/src/artifacts/coverage-jest/hooks/useHelperApp.js.html +1 -1
  211. package/src/artifacts/coverage-jest/hooks/useInvalidateRefdata/index.html +1 -1
  212. package/src/artifacts/coverage-jest/hooks/useInvalidateRefdata/index.js.html +1 -1
  213. package/src/artifacts/coverage-jest/hooks/useInvalidateRefdata/useInvalidateRefdata.js.html +1 -1
  214. package/src/artifacts/coverage-jest/hooks/useKiwtFieldArray.js.html +1 -1
  215. package/src/artifacts/coverage-jest/hooks/useKiwtSASQuery.js.html +1 -1
  216. package/src/artifacts/coverage-jest/hooks/useLocalPageStore.js.html +1 -1
  217. package/src/artifacts/coverage-jest/hooks/useLocalStorageState.js.html +1 -1
  218. package/src/artifacts/coverage-jest/hooks/useModConfigEntries.js.html +1 -1
  219. package/src/artifacts/coverage-jest/hooks/useMutateCustomProperties/index.html +1 -1
  220. package/src/artifacts/coverage-jest/hooks/useMutateCustomProperties/index.js.html +1 -1
  221. package/src/artifacts/coverage-jest/hooks/useMutateCustomProperties/useMutateCustomProperties.js.html +1 -1
  222. package/src/artifacts/coverage-jest/hooks/useMutateGeneric/index.html +1 -1
  223. package/src/artifacts/coverage-jest/hooks/useMutateGeneric/index.js.html +1 -1
  224. package/src/artifacts/coverage-jest/hooks/useMutateGeneric/useMutateGeneric.js.html +1 -1
  225. package/src/artifacts/coverage-jest/hooks/useMutateModConfigEntry.js.html +1 -1
  226. package/src/artifacts/coverage-jest/hooks/useMutateRefdataCategory/index.html +1 -1
  227. package/src/artifacts/coverage-jest/hooks/useMutateRefdataCategory/index.js.html +1 -1
  228. package/src/artifacts/coverage-jest/hooks/useMutateRefdataCategory/useMutateRefdataCategory.js.html +1 -1
  229. package/src/artifacts/coverage-jest/hooks/useMutateRefdataValue/index.html +1 -1
  230. package/src/artifacts/coverage-jest/hooks/useMutateRefdataValue/index.js.html +1 -1
  231. package/src/artifacts/coverage-jest/hooks/useMutateRefdataValue/useMutateRefdataValue.js.html +1 -1
  232. package/src/artifacts/coverage-jest/hooks/usePrevNextPagination.js.html +1 -1
  233. package/src/artifacts/coverage-jest/hooks/useQIndex.js.html +1 -1
  234. package/src/artifacts/coverage-jest/hooks/useRefdata.js.html +1 -1
  235. package/src/artifacts/coverage-jest/hooks/useSASQQueryMeta.js.html +1 -1
  236. package/src/artifacts/coverage-jest/hooks/useStandaloneSASQQueryParameter/index.html +1 -1
  237. package/src/artifacts/coverage-jest/hooks/useStandaloneSASQQueryParameter/index.js.html +1 -1
  238. package/src/artifacts/coverage-jest/hooks/useStandaloneSASQQueryParameter/useStandaloneSASQQueryParameter.js.html +1 -1
  239. package/src/artifacts/coverage-jest/hooks/useTemplates.js.html +1 -1
  240. package/src/artifacts/coverage-jest/index.html +39 -24
  241. package/src/artifacts/coverage-jest/utils/buildUrl.js.html +1 -1
  242. package/src/artifacts/coverage-jest/utils/filterParsers/deparseKiwtQueryFilters.js.html +1 -1
  243. package/src/artifacts/coverage-jest/utils/filterParsers/index.html +1 -1
  244. package/src/artifacts/coverage-jest/utils/filterParsers/index.js.html +1 -1
  245. package/src/artifacts/coverage-jest/utils/filterParsers/parseKiwtQueryFilters.js.html +1 -1
  246. package/src/artifacts/coverage-jest/utils/filterParsers/parseKiwtQueryGroups.js.html +1 -1
  247. package/src/artifacts/coverage-jest/utils/filterParsers/parseKiwtQueryString.js.html +1 -1
  248. package/src/artifacts/coverage-jest/utils/generateKiwtQuery.js.html +1 -1
  249. package/src/artifacts/coverage-jest/utils/generateKiwtQueryParams/generateKiwtQueryParams.js.html +1 -1
  250. package/src/artifacts/coverage-jest/utils/generateKiwtQueryParams/index.html +1 -1
  251. package/src/artifacts/coverage-jest/utils/generateKiwtQueryParams/index.js.html +1 -1
  252. package/src/artifacts/coverage-jest/utils/groupCustomPropertiesByCtx.js.html +1 -1
  253. package/src/artifacts/coverage-jest/utils/highlightString.js.html +1 -1
  254. package/src/artifacts/coverage-jest/utils/index.html +1 -1
  255. package/src/artifacts/coverage-jest/utils/index.js.html +1 -1
  256. package/src/artifacts/coverage-jest/utils/matchString.js.html +1 -1
  257. package/src/artifacts/coverage-jest/utils/modConfigEntriesQueryKey.js.html +1 -1
  258. package/src/artifacts/coverage-jest/utils/parseErrorResponse.js.html +1 -1
  259. package/src/artifacts/coverage-jest/utils/parseModConfigEntry.js.html +1 -1
  260. package/src/artifacts/coverage-jest/utils/refdataOptions.js.html +1 -1
  261. package/src/artifacts/coverage-jest/utils/refdataQueryKey/index.html +1 -1
  262. package/src/artifacts/coverage-jest/utils/refdataQueryKey/index.js.html +1 -1
  263. package/src/artifacts/coverage-jest/utils/refdataQueryKey/refdataQueryKey.js.html +1 -1
  264. package/src/artifacts/coverage-jest/utils/selectorSafe.js.html +1 -1
  265. package/src/artifacts/coverage-jest/utils/sortByLabel.js.html +1 -1
  266. package/src/artifacts/coverage-jest/utils/toCamelCase.js.html +1 -1
  267. package/src/artifacts/coverage-jest/utils/typedownQueryKey.js.html +1 -1
  268. package/src/artifacts/coverage-jest/validators/index.html +1 -1
  269. package/src/artifacts/coverage-jest/validators/index.js.html +1 -1
  270. package/src/artifacts/coverage-jest/validators/validators.js.html +1 -1
  271. package/src/index.js +4 -0
  272. package/src/lib/ButtonTypedown/ButtonTypedown.js +52 -0
  273. package/src/lib/ButtonTypedown/README.md +53 -0
  274. package/src/lib/ButtonTypedown/index.js +1 -0
  275. package/src/lib/Typedown/README.md +24 -21
  276. package/src/lib/Typedown/Typedown.js +101 -48
  277. package/src/lib/hooks/typedownHooks/useTypedown.js +105 -87
  278. package/styles/TypeDown.css +4 -0
package/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ # [5.31.0](https://gitlab.com/knowledge-integration/folio/stripes-kint-components/compare/v5.30.0...v5.31.0) (2025-12-12)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **Typedown:** Prevent typedown from closing when scrollbar is clicked ([34d072a](https://gitlab.com/knowledge-integration/folio/stripes-kint-components/commit/34d072ab76570953343f6ab221eb7a87e0e0957b))
7
+
8
+
9
+ ### Features
10
+
11
+ * **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))
12
+ * **Typedown:** Ability to renderHeader, improvements to focus handling ([d7cd617](https://gitlab.com/knowledge-integration/folio/stripes-kint-components/commit/d7cd617f5e66840d83deca046d3dc51979f6be69))
13
+ * **Typedown:** Typedown renderTrigger and getDisplayValue ([3c492ca](https://gitlab.com/knowledge-integration/folio/stripes-kint-components/commit/3c492ca8de9cb3a0c2d48d99670a4e6b187bb3d0))
14
+
1
15
  # [5.30.0](https://gitlab.com/knowledge-integration/folio/stripes-kint-components/compare/v5.29.1...v5.30.0) (2025-12-10)
2
16
 
3
17
 
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,58 @@
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
+ onType,
16
+ // We need these manually
17
+ renderListItem,
18
+ ...typedownProps
19
+ } = _ref;
20
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_Typedown.default, {
21
+ getDisplayValue: () => false,
22
+ renderHeader: _ref2 => {
23
+ let {
24
+ currentlyTyped
25
+ } = _ref2;
26
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_SearchField.default, {
27
+ marginBottom0: true,
28
+ onChange: onType,
29
+ value: currentlyTyped
30
+ });
31
+ },
32
+ renderListItem: renderListItem,
33
+ renderTrigger: _ref3 => {
34
+ let {
35
+ selectedValue,
36
+ triggerComponentRef,
37
+ triggerId,
38
+ typedownTriggerKeyDownHandler
39
+ } = _ref3;
40
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.DropdownButton, {
41
+ ref: triggerComponentRef,
42
+ buttonStyle: "dropdownItem",
43
+ fullWidth: true,
44
+ id: triggerId,
45
+ marginBottom0: true,
46
+ onKeyDown: typedownTriggerKeyDownHandler,
47
+ children: renderListItem(selectedValue)
48
+ });
49
+ },
50
+ ...typedownProps
51
+ });
52
+ };
53
+ var _default = exports.default = ButtonTypedown;
54
+ ButtonTypedown.propTypes = {
55
+ onType: _propTypes.default.func.isRequired,
56
+ renderListItem: _propTypes.default.func.isRequired
57
+ // REST OF TYPEDOWN PROPS
58
+ };
@@ -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 = _interopRequireWildcard(require("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,
@@ -98,15 +102,43 @@ const Typedown = _ref => {
98
102
  let optionIsSelected = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
99
103
  return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
100
104
  className: _TypeDown.default.listItem,
101
- children: renderListItem ? renderListItem(option, currentlyTyped, exactMatch, optionIsSelected) : (0, _get.default)(option, uniqueIdentificationPath)
105
+ children: renderListItem ? renderListItem(option, currentlyTyped, exactMatch, optionIsSelected, selectedValue) : (0, _get.default)(option, uniqueIdentificationPath)
102
106
  });
103
- }, [currentlyTyped, exactMatch, renderListItem, uniqueIdentificationPath]);
107
+ }, [currentlyTyped, exactMatch, renderListItem, selectedValue, uniqueIdentificationPath]);
104
108
  const handleChange = (0, _react.useCallback)(value => {
105
109
  input.onChange(value);
110
+ setSelectedValue(value);
106
111
  if (typeof onChange === 'function') {
107
112
  onChange(value);
108
113
  }
109
114
  }, [input, onChange]);
115
+ const renderTypedownTrigger = () => {
116
+ const triggerComponentId = `typedown-trigger-${(0, _selectorSafe.default)(input.name)}`;
117
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
118
+ ref: triggerRef,
119
+ id: `typedown-parent-${(0, _selectorSafe.default)(input.name)}-trigger`,
120
+ children: renderTrigger ? renderTrigger({
121
+ // Pass all props in that searchfield uses.
122
+ handleType,
123
+ input,
124
+ // Pass input? Useful when not controlled I guess
125
+ meta,
126
+ selectedValue,
127
+ triggerComponentId,
128
+ triggerComponentRef
129
+ }) : /*#__PURE__*/(0, _jsxRuntime.jsx)(_SearchField.default, {
130
+ ref: triggerComponentRef
131
+ // Pass meta through so correct styling gets applied to the TextField
132
+ ,
133
+ id: triggerComponentId,
134
+ label: label,
135
+ marginBottom0: true,
136
+ meta: meta,
137
+ onChange: handleType,
138
+ required: required
139
+ })
140
+ });
141
+ };
110
142
  const dropDown = (0, _react.useCallback)(() => {
111
143
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
112
144
  className: _TypeDown.default.dropdownMenu,
@@ -114,10 +146,26 @@ const Typedown = _ref => {
114
146
  style: {
115
147
  '--searchWidth': `${searchWidth}px`
116
148
  },
117
- children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
149
+ children: [renderHeader && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
150
+ ref: headerRef,
151
+ className: _TypeDown.default.header,
152
+ id: `typedown-header-${(0, _selectorSafe.default)(input.name)}`,
153
+ children: renderHeader({
154
+ currentlyTyped,
155
+ displayData,
156
+ handleType,
157
+ exactMatch
158
+ })
159
+ }), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
118
160
  ref: listRef,
119
161
  className: _TypeDown.default.listContainer,
120
- id: "typedown-list",
162
+ id: "typedown-list"
163
+ /* This is an acceptable exception to the no-static-element-interactions
164
+ * as we are only PREVENTING interactions, namely focus change on scrollbar click
165
+ * Without this, the typedown closes instantly when the scrollbar is clicked or dragged.
166
+ * This does NOT prevent item click, as e.propagation is not prevented.
167
+ */,
168
+ onMouseDown: e => e.preventDefault(),
121
169
  children: displayData?.length ? displayData?.map((d, index) => {
122
170
  const isSelectedEval = isSelected ? isSelected(input.value, d) : (0, _get.default)(input.value, uniqueIdentificationPath) === (0, _get.default)(d, uniqueIdentificationPath);
123
171
  const selectedCSS = selectedStyles ?? _TypeDown.default.selectedMenuButton;
@@ -131,7 +179,6 @@ const Typedown = _ref => {
131
179
  handleChange(d);
132
180
  handleNextFocus();
133
181
  },
134
- onKeyDown: listKeyDownHandler,
135
182
  type: "button",
136
183
  children: renderItem(d, isSelectedEval)
137
184
  }, `typedown-button-[${index}]`);
@@ -143,32 +190,33 @@ const Typedown = _ref => {
143
190
  children: renderFooter(displayData, currentlyTyped, exactMatch)
144
191
  })]
145
192
  });
146
- }, [currentlyTyped, displayData, endOfList, exactMatch, footerRef, handleChange, handleNextFocus, input.name, input.value, isSelected, listKeyDownHandler, listRef, renderFooter, renderItem, searchWidth, selectedStyles, uniqueIdentificationPath]);
147
- const renderSearchField = () => {
148
- return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
149
- ref: triggerRef,
150
- id: `typedown-parent-${(0, _selectorSafe.default)(input.name)}-searchField`,
151
- children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_SearchField.default
152
- // Pass meta through so correct styling gets applied to the TextField
153
- , {
154
- id: `typedown-searchField-${(0, _selectorSafe.default)(input.name)}`,
155
- label: label,
156
- marginBottom0: true,
157
- meta: meta,
158
- onChange: handleType,
159
- onKeyDown: searchFieldKeyDownHandler,
160
- required: required
161
- })
162
- });
163
- };
193
+ }, [currentlyTyped, displayData, endOfList, exactMatch, footerRef, handleChange, handleNextFocus, handleType, headerRef, input.name, input.value, isSelected, listRef, renderFooter, renderHeader, renderItem, searchWidth, selectedStyles, uniqueIdentificationPath]);
194
+ const renderSelectedItem = (0, _react.useCallback)(() => /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
195
+ className: (0, _classnames.default)(_TypeDown.default.selectedDisplay),
196
+ children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
197
+ className: _TypeDown.default.selectedItem,
198
+ children: renderItem(input.value)
199
+ }), displayClearItem && /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.IconButton, {
200
+ className: _TypeDown.default.clearItem,
201
+ icon: "times-circle-solid",
202
+ onClick: () => handleChange()
203
+ })]
204
+ }), [displayClearItem, handleChange, input.value, renderItem]);
164
205
  const displayValue = (0, _react.useMemo)(() => {
206
+ // Allow full control over whether to display the value
207
+ if (getDisplayValue) {
208
+ return getDisplayValue({
209
+ selectedUniqueId,
210
+ open
211
+ });
212
+ }
165
213
  return !!selectedUniqueId && (!open || displayValueWhileOpen);
166
- }, [displayValueWhileOpen, open, selectedUniqueId]);
214
+ }, [displayValueWhileOpen, getDisplayValue, open, selectedUniqueId]);
167
215
  return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
168
216
  ref: resizeRef,
169
217
  className: (0, _classnames.default)(_TypeDown.default.typedown, className),
170
218
  id: `typedown-id-${id}`,
171
- children: [renderSearchField(), /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Popper, {
219
+ children: [renderTypedownTrigger(), /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.Popper, {
172
220
  anchorRef: triggerRef,
173
221
  className: (0, _classnames.default)(_TypeDown.default.dropdown, _TypeDown.default.fullWidth),
174
222
  isOpen: open,
@@ -192,17 +240,7 @@ const Typedown = _ref => {
192
240
  overlayRef: overlayRef,
193
241
  portal: portal,
194
242
  children: dropDown()
195
- }, "typedown-menu-toggle"), displayValue && /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
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
- })]
243
+ }, "typedown-menu-toggle"), displayValue && renderSelectedItem()]
206
244
  });
207
245
  };
208
246
  Typedown.propTypes = {
@@ -212,6 +250,7 @@ Typedown.propTypes = {
212
250
  displayValueWhileOpen: _propTypes.default.bool,
213
251
  endOfList: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.node, _propTypes.default.element]),
214
252
  filterPath: _propTypes.default.string,
253
+ getDisplayValue: _propTypes.default.func,
215
254
  id: _propTypes.default.string,
216
255
  initialOpenDelay: _propTypes.default.number,
217
256
  input: _propTypes.default.object,
@@ -220,8 +259,10 @@ Typedown.propTypes = {
220
259
  meta: _propTypes.default.object,
221
260
  onChange: _propTypes.default.func,
222
261
  onType: _propTypes.default.func,
262
+ renderHeader: _propTypes.default.func,
223
263
  renderFooter: _propTypes.default.func,
224
264
  renderListItem: _propTypes.default.func,
265
+ renderTrigger: _propTypes.default.func,
225
266
  required: _propTypes.default.bool,
226
267
  selectedStyles: _propTypes.default.string,
227
268
  uniqueIdentificationPath: _propTypes.default.string
@@ -8,97 +8,120 @@ 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 {
16
15
  timeout = 800
17
16
  } = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
18
- // SEARCHFIELD COMPONENT
19
- const searchFieldComponent = document.getElementById(`typedown-searchField-${(0, _selectorSafe.default)(name)}`);
17
+ // SET UP STATE HOLDING DOM ELEMENTS
18
+ const [list, setListElement] = (0, _react.useState)();
19
+ const [trigger, setTriggerElement] = (0, _react.useState)();
20
+ const [footer, setFooterElement] = (0, _react.useState)();
21
+ const [header, setHeaderElement] = (0, _react.useState)();
20
22
 
21
23
  // SET UP REFS
22
- const listRef = (0, _react.useRef)();
23
24
  const triggerRef = (0, _react.useRef)();
24
25
  const overlayRef = (0, _react.useRef)();
25
- const footerRef = (0, _react.useRef)();
26
- const footer = document.getElementById(`typedown-footer-${(0, _selectorSafe.default)(name)}`);
27
- // Add an event listener to the footer, so that we can control tab behaviour between footer elements
26
+ const listRef = (0, _react.useCallback)(node => setListElement(node), []);
27
+ const triggerComponentRef = (0, _react.useCallback)(node => setTriggerElement(node), []);
28
+ const footerRef = (0, _react.useCallback)(node => setFooterElement(node), []);
29
+ const headerRef = (0, _react.useCallback)(node => setHeaderElement(node), []);
30
+ (0, _react.useEffect)(() => {
31
+ const configs = [
32
+ // --- HEADER CONFIG ---
33
+ {
34
+ element: header,
35
+ allowTabThroughContents: true,
36
+ previousElement: trigger,
37
+ nextElement: (footer && (0, _components.getFirstFocusable)(footer)) ?? (0, _components.getNextFocusable)(trigger, false),
38
+ downElement: list && (0, _components.getFirstFocusable)(list),
39
+ upElement: list && (0, _components.getLastFocusable)(list)
40
+ },
41
+ // --- FOOTER CONFIG ---
42
+ {
43
+ element: footer,
44
+ allowTabThroughContents: true,
45
+ previousElement: (header && (0, _components.getLastFocusable)(header)) ?? trigger,
46
+ nextElement: (0, _components.getNextFocusable)(trigger, false),
47
+ downElement: list && (0, _components.getFirstFocusable)(list),
48
+ upElement: list && (0, _components.getLastFocusable)(list)
49
+ },
50
+ // --- LIST/CONTAINER CONFIG ---
51
+ {
52
+ element: list,
53
+ allowUpDownThroughContents: true,
54
+ previousElement: (header && (0, _components.getLastFocusable)(header)) ?? trigger,
55
+ nextElement: (footer && (0, _components.getFirstFocusable)(footer)) ?? (0, _components.getNextFocusable)(trigger, false)
56
+ },
57
+ // --- TRIGGER CONFIG ---
58
+ {
59
+ element: trigger,
60
+ nextElement: (header && (0, _components.getFirstFocusable)(header)) ?? (footer && (0, _components.getFirstFocusable)(footer)) ?? (0, _components.getNextFocusable)(trigger, false),
61
+ previousElement: (0, _components.getPreviousFocusable)(trigger, false),
62
+ downElement: list && (0, _components.getFirstFocusable)(list),
63
+ upElement: list && (0, _components.getLastFocusable)(list)
64
+ }].filter(c => c.element); // Filter out configs where the element (e.g., header) is null
28
65
 
29
- if (footer && footer.getAttribute('hasListener') !== 'true') {
30
- footer.addEventListener('keydown', e => {
31
- // We want special behaviour on tab
32
- if (e.code === _eventCodes.TAB) {
33
- // Prevent the default behaviour
34
- e.preventDefault();
35
- const focusFunc = e.shiftKey ? _components.getPreviousFocusable : _components.getNextFocusable;
36
- const elem = focusFunc(footerRef.current, true, true, false, true);
37
- if (elem) {
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();
66
+ const cleanups = [];
67
+ const setupListener = config => {
68
+ const handler = e => {
69
+ if (e.code === _eventCodes.TAB) {
70
+ e.preventDefault();
71
+ if (config.allowTabThroughContents) {
72
+ const focusFunc = e.shiftKey ? _components.getPreviousFocusable : _components.getNextFocusable;
73
+ const elem = focusFunc(config.element, true, true, false, true);
74
+ if (elem) {
75
+ // Focus on next focusable element
76
+ elem.focus();
77
+ } else if (e.shiftKey) {
78
+ // We are at the beginning of the list moving backwards, focus on the previous element
79
+ config.previousElement.focus();
80
+ } else {
81
+ // We are at the end of the list, move onto next focusable element in page
82
+ config.nextElement.focus();
83
+ }
84
+ } else if (e.shiftKey) {
85
+ config.previousElement.focus();
86
+ } else {
87
+ config.nextElement.focus();
88
+ }
89
+ } else if (e.code === _eventCodes.DOWN_ARROW || e.code === _eventCodes.UP_ARROW) {
90
+ e.preventDefault();
91
+ // Prevent the default behaviour
92
+ e.preventDefault();
93
+ if (config.allowUpDownThroughContents) {
94
+ const focusFunc = e.code === _eventCodes.UP_ARROW ? _components.getPreviousFocusable : _components.getNextFocusable;
95
+ const elem = focusFunc(config.element, true, true, true, true); // Allow looping through elements
96
+ if (elem) {
97
+ elem.focus();
98
+ }
99
+ } else if (e.code === _eventCodes.UP_ARROW) {
100
+ config.upElement.focus();
101
+ } else {
102
+ config.downElement.focus();
103
+ }
46
104
  }
47
- }
48
- });
49
- footer.setAttribute('hasListener', 'true');
50
- }
105
+ };
51
106
 
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
- }
65
- }
107
+ // Add event listener and add the removal of said event listener to the cleanup function
108
+ config.element.addEventListener('keydown', handler);
109
+ cleanups.push(() => config.element.removeEventListener('keydown', handler));
110
+ };
66
111
 
67
- // Tab key (But not while shifting)
68
- if (e.code === _eventCodes.TAB && !e.shiftKey) {
69
- e.preventDefault();
70
- // If we have focusable elements in the footer, then focus on them, else unfocus searchbar
71
- const elem = (0, _components.getNextFocusable)(footerRef.current, true, true, true, true);
72
- if (elem) {
73
- elem.focus();
74
- } else {
75
- (0, _components.getNextFocusable)(searchFieldComponent, false).focus();
76
- }
77
- }
78
- };
79
- const listKeyDownHandler = e => {
80
- if (e.code === _eventCodes.DOWN_ARROW) {
81
- const elem = (0, _components.getNextFocusable)(listRef.current, true, true);
82
- elem.focus();
83
- }
84
- if (e.code === _eventCodes.UP_ARROW) {
85
- const elem = (0, _components.getPreviousFocusable)(listRef.current, true, true);
86
- elem.focus();
87
- }
88
- if (e.code === _eventCodes.TAB) {
89
- e.preventDefault();
90
- let elem;
91
- if (!e.shiftKey && !footerRef.current) {
92
- elem = (0, _components.getNextFocusable)(searchFieldComponent, false);
93
- } else if (!e.shiftKey) {
94
- elem = (0, _components.getNextFocusable)(footerRef.current, true, true, true, true);
95
- } else {
96
- elem = searchFieldComponent;
97
- }
98
- elem.focus();
99
- }
100
- };
101
- const handleNextFocus = () => (0, _components.getNextFocusable)(searchFieldComponent, false).focus();
112
+ // Setup the event listener for each config entry
113
+ configs.forEach(setupListener);
114
+
115
+ // Cleanup any event listeners
116
+ return () => {
117
+ cleanups.forEach(cleanup => cleanup());
118
+ };
119
+
120
+ // Re-add the listener ANY time any of the elements changes (this is why we're using callback refs)
121
+ }, [header, trigger, footer, list]);
122
+
123
+ // TODO is this still necessary?
124
+ const handleNextFocus = () => (0, _components.getNextFocusable)(trigger, false).focus();
102
125
 
103
126
  // SET UP VARIABLES
104
127
  const {
@@ -127,13 +150,13 @@ const useTypedown = function (name) {
127
150
  refs: {
128
151
  listRef,
129
152
  triggerRef,
153
+ triggerComponentRef,
130
154
  overlayRef,
131
- footerRef
155
+ footerRef,
156
+ headerRef
132
157
  },
133
158
  handlers: {
134
- handleNextFocus,
135
- listKeyDownHandler,
136
- searchFieldKeyDownHandler
159
+ handleNextFocus
137
160
  },
138
161
  variables: {
139
162
  open: useOpen ? open : false,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@k-int/stripes-kint-components",
3
- "version": "5.30.0",
3
+ "version": "5.31.0",
4
4
  "description": "Stripes Component library for K-Int specific applications",
5
5
  "sideEffects": [
6
6
  "*.css"
@@ -358,7 +358,7 @@ export default ActionList;
358
358
  <div class='footer quiet pad2 space-top1 center small'>
359
359
  Code coverage generated by
360
360
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
361
- at 2025-12-10T12:12:10.913Z
361
+ at 2025-12-12T16:39:50.848Z
362
362
  </div>
363
363
  <script src="../prettify.js"></script>
364
364
  <script>
@@ -1495,7 +1495,7 @@ export default ActionListFieldArray;
1495
1495
  <div class='footer quiet pad2 space-top1 center small'>
1496
1496
  Code coverage generated by
1497
1497
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1498
- at 2025-12-10T12:12:10.913Z
1498
+ at 2025-12-12T16:39:50.848Z
1499
1499
  </div>
1500
1500
  <script src="../prettify.js"></script>
1501
1501
  <script>
@@ -131,7 +131,7 @@
131
131
  <div class='footer quiet pad2 space-top1 center small'>
132
132
  Code coverage generated by
133
133
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
134
- at 2025-12-10T12:12:10.913Z
134
+ at 2025-12-12T16:39:50.848Z
135
135
  </div>
136
136
  <script src="../prettify.js"></script>
137
137
  <script>
@@ -73,7 +73,7 @@
73
73
  <div class='footer quiet pad2 space-top1 center small'>
74
74
  Code coverage generated by
75
75
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
76
- at 2025-12-10T12:12:10.913Z
76
+ at 2025-12-12T16:39:50.848Z
77
77
  </div>
78
78
  <script src="../prettify.js"></script>
79
79
  <script>