@helpwave/hightide 0.1.37 → 0.1.39

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 (144) hide show
  1. package/dist/components/date/DatePicker.js.map +1 -1
  2. package/dist/components/date/DatePicker.mjs.map +1 -1
  3. package/dist/components/date/DayPicker.js.map +1 -1
  4. package/dist/components/date/DayPicker.mjs.map +1 -1
  5. package/dist/components/date/TimeDisplay.js.map +1 -1
  6. package/dist/components/date/TimeDisplay.mjs.map +1 -1
  7. package/dist/components/date/YearMonthPicker.js.map +1 -1
  8. package/dist/components/date/YearMonthPicker.mjs.map +1 -1
  9. package/dist/components/date/index.js.map +1 -1
  10. package/dist/components/date/index.mjs.map +1 -1
  11. package/dist/components/dialog/ConfirmDialog.js +15 -9
  12. package/dist/components/dialog/ConfirmDialog.js.map +1 -1
  13. package/dist/components/dialog/ConfirmDialog.mjs +16 -10
  14. package/dist/components/dialog/ConfirmDialog.mjs.map +1 -1
  15. package/dist/components/dialog/Dialog.d.mts +4 -5
  16. package/dist/components/dialog/Dialog.d.ts +4 -5
  17. package/dist/components/dialog/Dialog.js +15 -9
  18. package/dist/components/dialog/Dialog.js.map +1 -1
  19. package/dist/components/dialog/Dialog.mjs +16 -10
  20. package/dist/components/dialog/Dialog.mjs.map +1 -1
  21. package/dist/components/dialog/DiscardChangesDialog.js +15 -9
  22. package/dist/components/dialog/DiscardChangesDialog.js.map +1 -1
  23. package/dist/components/dialog/DiscardChangesDialog.mjs +16 -10
  24. package/dist/components/dialog/DiscardChangesDialog.mjs.map +1 -1
  25. package/dist/components/dialog/InputDialog.js +15 -9
  26. package/dist/components/dialog/InputDialog.js.map +1 -1
  27. package/dist/components/dialog/InputDialog.mjs +16 -10
  28. package/dist/components/dialog/InputDialog.mjs.map +1 -1
  29. package/dist/components/dialog/LanguageDialog.js +188 -154
  30. package/dist/components/dialog/LanguageDialog.js.map +1 -1
  31. package/dist/components/dialog/LanguageDialog.mjs +151 -116
  32. package/dist/components/dialog/LanguageDialog.mjs.map +1 -1
  33. package/dist/components/dialog/ThemeDialog.js +191 -157
  34. package/dist/components/dialog/ThemeDialog.js.map +1 -1
  35. package/dist/components/dialog/ThemeDialog.mjs +151 -116
  36. package/dist/components/dialog/ThemeDialog.mjs.map +1 -1
  37. package/dist/components/dialog/index.js +205 -171
  38. package/dist/components/dialog/index.js.map +1 -1
  39. package/dist/components/dialog/index.mjs +152 -117
  40. package/dist/components/dialog/index.mjs.map +1 -1
  41. package/dist/components/index.js +337 -299
  42. package/dist/components/index.js.map +1 -1
  43. package/dist/components/index.mjs +198 -159
  44. package/dist/components/index.mjs.map +1 -1
  45. package/dist/components/layout/Carousel.d.mts +2 -1
  46. package/dist/components/layout/Carousel.d.ts +2 -1
  47. package/dist/components/layout/Carousel.js +4 -0
  48. package/dist/components/layout/Carousel.js.map +1 -1
  49. package/dist/components/layout/Carousel.mjs +4 -0
  50. package/dist/components/layout/Carousel.mjs.map +1 -1
  51. package/dist/components/layout/TextImage.js.map +1 -1
  52. package/dist/components/layout/TextImage.mjs.map +1 -1
  53. package/dist/components/layout/index.js +4 -0
  54. package/dist/components/layout/index.js.map +1 -1
  55. package/dist/components/layout/index.mjs +4 -0
  56. package/dist/components/layout/index.mjs.map +1 -1
  57. package/dist/components/loading-states/ErrorComponent.js.map +1 -1
  58. package/dist/components/loading-states/ErrorComponent.mjs.map +1 -1
  59. package/dist/components/loading-states/LoadingAnimation.js.map +1 -1
  60. package/dist/components/loading-states/LoadingAnimation.mjs.map +1 -1
  61. package/dist/components/loading-states/index.js.map +1 -1
  62. package/dist/components/loading-states/index.mjs.map +1 -1
  63. package/dist/components/navigation/Pagination.js.map +1 -1
  64. package/dist/components/navigation/Pagination.mjs.map +1 -1
  65. package/dist/components/navigation/StepperBar.js.map +1 -1
  66. package/dist/components/navigation/StepperBar.mjs.map +1 -1
  67. package/dist/components/navigation/index.js.map +1 -1
  68. package/dist/components/navigation/index.mjs.map +1 -1
  69. package/dist/components/properties/CheckboxProperty.js.map +1 -1
  70. package/dist/components/properties/CheckboxProperty.mjs.map +1 -1
  71. package/dist/components/properties/DateProperty.js.map +1 -1
  72. package/dist/components/properties/DateProperty.mjs.map +1 -1
  73. package/dist/components/properties/MultiSelectProperty.js +129 -101
  74. package/dist/components/properties/MultiSelectProperty.js.map +1 -1
  75. package/dist/components/properties/MultiSelectProperty.mjs +131 -102
  76. package/dist/components/properties/MultiSelectProperty.mjs.map +1 -1
  77. package/dist/components/properties/NumberProperty.js.map +1 -1
  78. package/dist/components/properties/NumberProperty.mjs.map +1 -1
  79. package/dist/components/properties/PropertyBase.js.map +1 -1
  80. package/dist/components/properties/PropertyBase.mjs.map +1 -1
  81. package/dist/components/properties/SelectProperty.js +129 -101
  82. package/dist/components/properties/SelectProperty.js.map +1 -1
  83. package/dist/components/properties/SelectProperty.mjs +131 -102
  84. package/dist/components/properties/SelectProperty.mjs.map +1 -1
  85. package/dist/components/properties/TextProperty.js.map +1 -1
  86. package/dist/components/properties/TextProperty.mjs.map +1 -1
  87. package/dist/components/properties/index.js +129 -101
  88. package/dist/components/properties/index.js.map +1 -1
  89. package/dist/components/properties/index.mjs +131 -102
  90. package/dist/components/properties/index.mjs.map +1 -1
  91. package/dist/components/table/Table.js.map +1 -1
  92. package/dist/components/table/Table.mjs.map +1 -1
  93. package/dist/components/table/TableFilterButton.js.map +1 -1
  94. package/dist/components/table/TableFilterButton.mjs.map +1 -1
  95. package/dist/components/table/index.js.map +1 -1
  96. package/dist/components/table/index.mjs.map +1 -1
  97. package/dist/components/user-action/CopyToClipboardWrapper.js.map +1 -1
  98. package/dist/components/user-action/CopyToClipboardWrapper.mjs.map +1 -1
  99. package/dist/components/user-action/DateAndTimePicker.js.map +1 -1
  100. package/dist/components/user-action/DateAndTimePicker.mjs.map +1 -1
  101. package/dist/components/user-action/SearchBar.js.map +1 -1
  102. package/dist/components/user-action/SearchBar.mjs.map +1 -1
  103. package/dist/components/user-action/index.js +129 -101
  104. package/dist/components/user-action/index.js.map +1 -1
  105. package/dist/components/user-action/index.mjs +131 -102
  106. package/dist/components/user-action/index.mjs.map +1 -1
  107. package/dist/components/user-action/select/Select.d.mts +2 -0
  108. package/dist/components/user-action/select/Select.d.ts +2 -0
  109. package/dist/components/user-action/select/Select.js +129 -101
  110. package/dist/components/user-action/select/Select.js.map +1 -1
  111. package/dist/components/user-action/select/Select.mjs +131 -102
  112. package/dist/components/user-action/select/Select.mjs.map +1 -1
  113. package/dist/components/user-action/select/index.js +129 -101
  114. package/dist/components/user-action/select/index.js.map +1 -1
  115. package/dist/components/user-action/select/index.mjs +131 -102
  116. package/dist/components/user-action/select/index.mjs.map +1 -1
  117. package/dist/hooks/index.js.map +1 -1
  118. package/dist/hooks/index.mjs.map +1 -1
  119. package/dist/hooks/useValidators.js.map +1 -1
  120. package/dist/hooks/useValidators.mjs.map +1 -1
  121. package/dist/index.js +362 -324
  122. package/dist/index.js.map +1 -1
  123. package/dist/index.mjs +206 -167
  124. package/dist/index.mjs.map +1 -1
  125. package/dist/localization/LanguageProvider.js +1 -1
  126. package/dist/localization/LanguageProvider.js.map +1 -1
  127. package/dist/localization/LanguageProvider.mjs +1 -1
  128. package/dist/localization/LanguageProvider.mjs.map +1 -1
  129. package/dist/localization/index.js +1 -1
  130. package/dist/localization/index.js.map +1 -1
  131. package/dist/localization/index.mjs +1 -1
  132. package/dist/localization/index.mjs.map +1 -1
  133. package/dist/localization/useTranslation.js.map +1 -1
  134. package/dist/localization/useTranslation.mjs.map +1 -1
  135. package/dist/style/globals.css +0 -3
  136. package/dist/theming/index.js +1 -1
  137. package/dist/theming/index.js.map +1 -1
  138. package/dist/theming/index.mjs +1 -1
  139. package/dist/theming/index.mjs.map +1 -1
  140. package/dist/theming/useTheme.js +1 -1
  141. package/dist/theming/useTheme.js.map +1 -1
  142. package/dist/theming/useTheme.mjs +1 -1
  143. package/dist/theming/useTheme.mjs.map +1 -1
  144. package/package.json +1 -1
@@ -7,6 +7,7 @@ import {
7
7
  useEffect as useEffect6,
8
8
  useId as useId3,
9
9
  useImperativeHandle,
10
+ useMemo as useMemo2,
10
11
  useRef as useRef2,
11
12
  useState as useState7
12
13
  } from "react";
@@ -834,9 +835,9 @@ function useFloatingElement({
834
835
 
835
836
  // src/components/user-action/select/Select.tsx
836
837
  import { createPortal } from "react-dom";
837
- import { Fragment as Fragment2, jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
838
+ import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
838
839
  var defaultToggleOpenOptions = {
839
- highlightStartPosition: "first"
840
+ highlightStartPositionBehavior: "first"
840
841
  };
841
842
  var SelectContext = createContext2(null);
842
843
  function useSelectContext() {
@@ -859,47 +860,62 @@ var SelectRoot = ({
859
860
  isMultiSelect = false,
860
861
  iconAppearance = "left"
861
862
  }) => {
862
- const [options, setOptions] = useState7([]);
863
863
  const triggerRef = useRef2(null);
864
864
  const generatedId = useId3();
865
865
  const usedId = id ?? generatedId;
866
866
  const [internalState, setInternalState] = useState7({
867
- isOpen
867
+ isOpen,
868
+ options: []
868
869
  });
869
- const selectedValues = isMultiSelect ? values ?? [] : [value].filter(Boolean);
870
+ const selectedValues = useMemo2(
871
+ () => isMultiSelect ? values ?? [] : [value].filter(Boolean),
872
+ [isMultiSelect, value, values]
873
+ );
874
+ const selectedOptions = useMemo2(
875
+ () => selectedValues.map((value2) => internalState.options.find((option) => value2 === option.value)).filter(Boolean),
876
+ [selectedValues, internalState.options]
877
+ );
870
878
  const state = {
871
879
  ...internalState,
872
880
  id: usedId,
873
881
  disabled,
874
882
  invalid,
875
883
  value: selectedValues,
876
- options,
877
- selectedOptions: selectedValues.map((value2) => options.find((option) => value2 === option.value)).filter(Boolean)
884
+ selectedOptions
878
885
  };
879
886
  const config = {
880
887
  isMultiSelect,
881
888
  iconAppearance
882
889
  };
883
890
  const registerItem = useCallback5((item) => {
884
- setOptions((prev) => {
885
- const updated = [...prev, item];
886
- updated.sort((a, b) => {
891
+ setInternalState((prev) => {
892
+ const updatedOptions = [...prev.options, item];
893
+ updatedOptions.sort((a, b) => {
887
894
  const aEl = a.ref.current;
888
895
  const bEl = b.ref.current;
889
896
  if (!aEl || !bEl) return 0;
890
897
  return aEl.compareDocumentPosition(bEl) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1;
891
898
  });
892
- return updated;
899
+ return {
900
+ ...prev,
901
+ options: updatedOptions
902
+ };
893
903
  });
894
904
  }, []);
895
905
  const unregisterItem = useCallback5((value2) => {
896
- setOptions((prev) => prev.filter((i) => i.value !== value2));
906
+ setInternalState((prev) => {
907
+ const updatedOptions = prev.options.filter((i) => i.value !== value2);
908
+ return {
909
+ ...prev,
910
+ options: updatedOptions
911
+ };
912
+ });
897
913
  }, []);
898
914
  const toggleSelection = (value2, isSelected) => {
899
915
  if (disabled) {
900
916
  return;
901
917
  }
902
- const option = options.find((i) => i.value === value2);
918
+ const option = state.options.find((i) => i.value === value2);
903
919
  if (!option) {
904
920
  console.error(`SelectOption with value: ${value2} not found`);
905
921
  return;
@@ -942,35 +958,40 @@ var SelectRoot = ({
942
958
  triggerRef.current = null;
943
959
  }, []);
944
960
  const toggleOpen = (isOpen2, toggleOpenOptions) => {
945
- const { highlightStartPosition } = { ...defaultToggleOpenOptions, ...toggleOpenOptions };
946
- let highlightedIndex;
947
- if (highlightStartPosition === "first") {
948
- highlightedIndex = options.findIndex((option) => !option.disabled);
949
- } else {
950
- highlightedIndex = options.length - 1 - [...options].reverse().findIndex((option) => !option.disabled);
951
- }
952
- if (highlightedIndex === -1 || highlightedIndex === options.length) {
953
- highlightedIndex = 0;
961
+ const { highlightStartPositionBehavior } = { ...defaultToggleOpenOptions, ...toggleOpenOptions };
962
+ let firstSelectedValue;
963
+ let firstEnabledValue;
964
+ for (let i = 0; i < state.options.length; i++) {
965
+ const currentOption = state.options[highlightStartPositionBehavior === "first" ? i : state.options.length - i - 1];
966
+ if (!currentOption.disabled) {
967
+ if (!firstEnabledValue) {
968
+ firstEnabledValue = currentOption.value;
969
+ }
970
+ if (selectedValues.includes(currentOption.value)) {
971
+ firstSelectedValue = currentOption.value;
972
+ break;
973
+ }
974
+ }
954
975
  }
955
976
  setInternalState((prevState) => ({
956
977
  ...prevState,
957
978
  isOpen: isOpen2 ?? !prevState.isOpen,
958
- highlightedValue: options[highlightedIndex].value
979
+ highlightedValue: firstSelectedValue ?? firstEnabledValue
959
980
  }));
960
981
  };
961
982
  const moveHighlightedIndex = (delta) => {
962
- let highlightedIndex = options.findIndex((value2) => value2.value === internalState.highlightedValue);
983
+ let highlightedIndex = state.options.findIndex((value2) => value2.value === internalState.highlightedValue);
963
984
  if (highlightedIndex === -1) {
964
985
  highlightedIndex = 0;
965
986
  }
966
- const optionLength = options.length;
987
+ const optionLength = state.options.length;
967
988
  const startIndex = (highlightedIndex + delta % optionLength + optionLength) % optionLength;
968
989
  const isForward = delta >= 0;
969
- let highlightedValue = options[startIndex].value;
970
- for (let i = 0; i < options.length; i++) {
990
+ let highlightedValue = state.options[startIndex].value;
991
+ for (let i = 0; i < state.options.length; i++) {
971
992
  const index = (startIndex + (isForward ? i : -i) + optionLength) % optionLength;
972
- if (!options[index].disabled) {
973
- highlightedValue = options[index].value;
993
+ if (!state.options[index].disabled) {
994
+ highlightedValue = state.options[index].value;
974
995
  break;
975
996
  }
976
997
  }
@@ -981,9 +1002,9 @@ var SelectRoot = ({
981
1002
  };
982
1003
  useEffect6(() => {
983
1004
  if (!internalState.highlightedValue) return;
984
- const highlighted = options.find((value2) => value2.value === internalState.highlightedValue);
1005
+ const highlighted = internalState.options.find((value2) => value2.value === internalState.highlightedValue);
985
1006
  if (highlighted) {
986
- highlighted.ref.current.scrollIntoView({ behavior: "instant", block: "nearest" });
1007
+ highlighted.ref.current?.scrollIntoView({ behavior: "instant", block: "nearest" });
987
1008
  } else {
988
1009
  console.error(`SelectRoot: Could not find highlighted value (${internalState.highlightedValue})`);
989
1010
  }
@@ -1120,12 +1141,12 @@ var SelectButton = forwardRef3(function SelectButton2({ placeholder, selectedDis
1120
1141
  props.onKeyDown?.(event);
1121
1142
  switch (event.key) {
1122
1143
  case "ArrowDown":
1123
- toggleOpen(true, { highlightStartPosition: "first" });
1144
+ toggleOpen(true, { highlightStartPositionBehavior: "first" });
1124
1145
  event.preventDefault();
1125
1146
  event.stopPropagation();
1126
1147
  break;
1127
1148
  case "ArrowUp":
1128
- toggleOpen(true, { highlightStartPosition: "last" });
1149
+ toggleOpen(true, { highlightStartPositionBehavior: "last" });
1129
1150
  event.preventDefault();
1130
1151
  event.stopPropagation();
1131
1152
  break;
@@ -1219,10 +1240,10 @@ var SelectChipDisplay = forwardRef3(function SelectChipDisplay2({ ...props }, re
1219
1240
  onKeyDown: (event) => {
1220
1241
  switch (event.key) {
1221
1242
  case "ArrowDown":
1222
- toggleOpen(true, { highlightStartPosition: "first" });
1243
+ toggleOpen(true, { highlightStartPositionBehavior: "first" });
1223
1244
  break;
1224
1245
  case "ArrowUp":
1225
- toggleOpen(true, { highlightStartPosition: "last" });
1246
+ toggleOpen(true, { highlightStartPositionBehavior: "last" });
1226
1247
  }
1227
1248
  },
1228
1249
  size: "small",
@@ -1243,6 +1264,7 @@ var SelectContent = forwardRef3(
1243
1264
  function SelectContent2({
1244
1265
  alignment,
1245
1266
  orientation = "vertical",
1267
+ containerClassName,
1246
1268
  ...props
1247
1269
  }, ref) {
1248
1270
  const innerRef = useRef2(null);
@@ -1259,76 +1281,83 @@ var SelectContent = forwardRef3(
1259
1281
  active: state.isOpen && !!position
1260
1282
  });
1261
1283
  return createPortal(
1262
- /* @__PURE__ */ jsxs4(Fragment2, { children: [
1263
- /* @__PURE__ */ jsx5(
1264
- "div",
1265
- {
1266
- hidden: !state.isOpen,
1267
- onClick: () => trigger.toggleOpen(false),
1268
- className: clsx4("fixed w-screen h-screen inset-0")
1269
- }
1270
- ),
1271
- /* @__PURE__ */ jsx5(
1272
- "ul",
1273
- {
1274
- ...props,
1275
- id: `${state.id}-listbox`,
1276
- ref: innerRef,
1277
- hidden: !state.isOpen,
1278
- onKeyDown: (event) => {
1279
- switch (event.key) {
1280
- case "Escape":
1281
- trigger.toggleOpen(false);
1282
- event.preventDefault();
1283
- event.stopPropagation();
1284
- break;
1285
- case match(orientation, {
1286
- vertical: "ArrowDown",
1287
- horizontal: "ArrowUp"
1288
- }):
1289
- item.moveHighlightedIndex(1);
1290
- event.preventDefault();
1291
- break;
1292
- case match(orientation, {
1293
- vertical: "ArrowUp",
1294
- horizontal: "ArrowDown"
1295
- }):
1296
- item.moveHighlightedIndex(-1);
1297
- event.preventDefault();
1298
- break;
1299
- case "Home":
1300
- event.preventDefault();
1301
- break;
1302
- case "End":
1303
- event.preventDefault();
1304
- break;
1305
- case "Enter":
1306
- // Fall through
1307
- case " ":
1308
- if (state.highlightedValue) {
1309
- item.toggleSelection(state.highlightedValue);
1310
- if (!config.isMultiSelect) {
1284
+ /* @__PURE__ */ jsxs4(
1285
+ "div",
1286
+ {
1287
+ id: `select-container-${state.id}`,
1288
+ className: clsx4("fixed inset-0 w-screen h-screen", containerClassName),
1289
+ hidden: !state.isOpen,
1290
+ children: [
1291
+ /* @__PURE__ */ jsx5(
1292
+ "div",
1293
+ {
1294
+ id: `select-background-${state.id}`,
1295
+ onClick: () => trigger.toggleOpen(false),
1296
+ className: clsx4("fixed inset-0 w-screen h-screen")
1297
+ }
1298
+ ),
1299
+ /* @__PURE__ */ jsx5(
1300
+ "ul",
1301
+ {
1302
+ ...props,
1303
+ id: `${state.id}-listbox`,
1304
+ ref: innerRef,
1305
+ onKeyDown: (event) => {
1306
+ switch (event.key) {
1307
+ case "Escape":
1311
1308
  trigger.toggleOpen(false);
1312
- }
1313
- event.preventDefault();
1309
+ event.preventDefault();
1310
+ event.stopPropagation();
1311
+ break;
1312
+ case match(orientation, {
1313
+ vertical: "ArrowDown",
1314
+ horizontal: "ArrowUp"
1315
+ }):
1316
+ item.moveHighlightedIndex(1);
1317
+ event.preventDefault();
1318
+ break;
1319
+ case match(orientation, {
1320
+ vertical: "ArrowUp",
1321
+ horizontal: "ArrowDown"
1322
+ }):
1323
+ item.moveHighlightedIndex(-1);
1324
+ event.preventDefault();
1325
+ break;
1326
+ case "Home":
1327
+ event.preventDefault();
1328
+ break;
1329
+ case "End":
1330
+ event.preventDefault();
1331
+ break;
1332
+ case "Enter":
1333
+ // Fall through
1334
+ case " ":
1335
+ if (state.highlightedValue) {
1336
+ item.toggleSelection(state.highlightedValue);
1337
+ if (!config.isMultiSelect) {
1338
+ trigger.toggleOpen(false);
1339
+ }
1340
+ event.preventDefault();
1341
+ }
1342
+ break;
1314
1343
  }
1315
- break;
1344
+ },
1345
+ className: clsx4("flex-col-0 p-2 bg-menu-background text-menu-text rounded-md shadow-hw-bottom focus-style-within overflow-auto", props.className),
1346
+ style: {
1347
+ opacity: position ? void 0 : 0,
1348
+ position: "fixed",
1349
+ ...position
1350
+ },
1351
+ role: "listbox",
1352
+ "aria-multiselectable": config.isMultiSelect,
1353
+ "aria-orientation": orientation,
1354
+ tabIndex: position ? 0 : void 0,
1355
+ children: props.children
1316
1356
  }
1317
- },
1318
- className: clsx4("flex-col-0 p-2 bg-menu-background text-menu-text rounded-md shadow-hw-bottom focus-style-within overflow-auto", props.className),
1319
- style: {
1320
- opacity: position ? void 0 : 0,
1321
- position: "fixed",
1322
- ...position
1323
- },
1324
- role: "listbox",
1325
- "aria-multiselectable": config.isMultiSelect,
1326
- "aria-orientation": orientation,
1327
- tabIndex: position ? 0 : void 0,
1328
- children: props.children
1329
- }
1330
- )
1331
- ] }),
1357
+ )
1358
+ ]
1359
+ }
1360
+ ),
1332
1361
  document.body
1333
1362
  );
1334
1363
  }