@tcn/ui 0.16.0 → 0.17.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 (185) hide show
  1. package/dist/card.css +1 -0
  2. package/dist/column.css +1 -1
  3. package/dist/containers.css +1 -1
  4. package/dist/containers.module-BmICKsOK.js +5 -0
  5. package/dist/containers.module-BmICKsOK.js.map +1 -0
  6. package/dist/form/field/field.js +11 -8
  7. package/dist/form/field/field.js.map +1 -1
  8. package/dist/inputs/color_input/color_picker.js +5 -2
  9. package/dist/inputs/color_input/color_picker.js.map +1 -1
  10. package/dist/inputs/combo_box/combo_box.js +18 -15
  11. package/dist/inputs/combo_box/combo_box.js.map +1 -1
  12. package/dist/inputs/date_picker/date_picker.js +13 -10
  13. package/dist/inputs/date_picker/date_picker.js.map +1 -1
  14. package/dist/inputs/date_picker/date_picker_input.js +20 -17
  15. package/dist/inputs/date_picker/date_picker_input.js.map +1 -1
  16. package/dist/inputs/date_picker/date_picker_year_selector.js +5 -2
  17. package/dist/inputs/date_picker/date_picker_year_selector.js.map +1 -1
  18. package/dist/inputs/mask_input/key_capture_input.js +26 -23
  19. package/dist/inputs/mask_input/key_capture_input.js.map +1 -1
  20. package/dist/inputs/mask_input/mask_input.js +5 -2
  21. package/dist/inputs/mask_input/mask_input.js.map +1 -1
  22. package/dist/inputs/multiselect/multiselect.js +22 -19
  23. package/dist/inputs/multiselect/multiselect.js.map +1 -1
  24. package/dist/inputs/phone_number_input/phone_number_context.js +7 -4
  25. package/dist/inputs/phone_number_input/phone_number_context.js.map +1 -1
  26. package/dist/inputs/select/select.js +5 -2
  27. package/dist/inputs/select/select.js.map +1 -1
  28. package/dist/inputs/slider/slider.js +19 -16
  29. package/dist/inputs/slider/slider.js.map +1 -1
  30. package/dist/inputs/suggestions/suggestion_list.js +5 -2
  31. package/dist/inputs/suggestions/suggestion_list.js.map +1 -1
  32. package/dist/inputs/switch/switch.js +18 -15
  33. package/dist/inputs/switch/switch.js.map +1 -1
  34. package/dist/inputs/unit_input/unit_input.js +15 -12
  35. package/dist/inputs/unit_input/unit_input.js.map +1 -1
  36. package/dist/layouts/containers/columns/columns.d.ts +6 -1
  37. package/dist/layouts/containers/columns/columns.d.ts.map +1 -1
  38. package/dist/layouts/containers/columns/columns.js +30 -7
  39. package/dist/layouts/containers/columns/columns.js.map +1 -1
  40. package/dist/layouts/containers/rail.d.ts +2 -5
  41. package/dist/layouts/containers/rail.d.ts.map +1 -1
  42. package/dist/layouts/containers/rail.js +17 -55
  43. package/dist/layouts/containers/rail.js.map +1 -1
  44. package/dist/layouts/containers/rows/index.d.ts +3 -0
  45. package/dist/layouts/containers/rows/index.d.ts.map +1 -0
  46. package/dist/layouts/containers/rows/index.js +7 -0
  47. package/dist/layouts/containers/rows/index.js.map +1 -0
  48. package/dist/layouts/containers/rows/row.d.ts +6 -0
  49. package/dist/layouts/containers/rows/row.d.ts.map +1 -0
  50. package/dist/layouts/containers/rows/row.js +20 -0
  51. package/dist/layouts/containers/rows/row.js.map +1 -0
  52. package/dist/layouts/containers/rows/rows.d.ts +11 -0
  53. package/dist/layouts/containers/rows/rows.d.ts.map +1 -0
  54. package/dist/layouts/containers/rows/rows.js +34 -0
  55. package/dist/layouts/containers/rows/rows.js.map +1 -0
  56. package/dist/layouts/containers/scaffold.d.ts +2 -5
  57. package/dist/layouts/containers/scaffold.d.ts.map +1 -1
  58. package/dist/layouts/containers/scaffold.js +17 -55
  59. package/dist/layouts/containers/scaffold.js.map +1 -1
  60. package/dist/layouts/index.d.ts +2 -0
  61. package/dist/layouts/index.d.ts.map +1 -1
  62. package/dist/layouts/index.js +26 -22
  63. package/dist/layouts/index.js.map +1 -1
  64. package/dist/mobile/inputs/date_picker/mobile_date_picker_header.js +5 -2
  65. package/dist/mobile/inputs/date_picker/mobile_date_picker_header.js.map +1 -1
  66. package/dist/mobile/inputs/date_picker/mobile_date_picker_input.js +5 -2
  67. package/dist/mobile/inputs/date_picker/mobile_date_picker_input.js.map +1 -1
  68. package/dist/mobile/inputs/date_picker/mobile_date_picker_year_selector.js +8 -5
  69. package/dist/mobile/inputs/date_picker/mobile_date_picker_year_selector.js.map +1 -1
  70. package/dist/navigation/tabs/state/link/tab_link.js +9 -6
  71. package/dist/navigation/tabs/state/link/tab_link.js.map +1 -1
  72. package/dist/overlay/menu/menu.js +3 -0
  73. package/dist/overlay/menu/menu.js.map +1 -1
  74. package/dist/overlay/popper/context_popper.js +8 -5
  75. package/dist/overlay/popper/context_popper.js.map +1 -1
  76. package/dist/overlay/popper/element_popper.js +9 -6
  77. package/dist/overlay/popper/element_popper.js.map +1 -1
  78. package/dist/overlay/popper/legacy/popper.js +13 -10
  79. package/dist/overlay/popper/legacy/popper.js.map +1 -1
  80. package/dist/overlay/popper/preview_popper.js +10 -7
  81. package/dist/overlay/popper/preview_popper.js.map +1 -1
  82. package/dist/overlay/tethered/tethered.js +11 -8
  83. package/dist/overlay/tethered/tethered.js.map +1 -1
  84. package/dist/resizable.css +1 -0
  85. package/dist/resizable.module-I6iyBAvM.js +5 -0
  86. package/dist/resizable.module-I6iyBAvM.js.map +1 -0
  87. package/dist/resize_handle.css +1 -0
  88. package/dist/row.css +1 -0
  89. package/dist/stacks/box/box.js +12 -9
  90. package/dist/stacks/box/box.js.map +1 -1
  91. package/dist/stacks/box/detect_resize_bounds.d.ts +1 -0
  92. package/dist/stacks/box/detect_resize_bounds.d.ts.map +1 -1
  93. package/dist/stacks/box/detect_resize_bounds.js +22 -20
  94. package/dist/stacks/box/detect_resize_bounds.js.map +1 -1
  95. package/dist/stacks/h_collapsible_box.js +17 -14
  96. package/dist/stacks/h_collapsible_box.js.map +1 -1
  97. package/dist/stacks/v_collapsible_box.js +19 -16
  98. package/dist/stacks/v_collapsible_box.js.map +1 -1
  99. package/dist/surfaces/card/card.d.ts.map +1 -1
  100. package/dist/surfaces/card/card.js +14 -6
  101. package/dist/surfaces/card/card.js.map +1 -1
  102. package/dist/surfaces/pop_confirm/pop_confirm.js +4 -2
  103. package/dist/surfaces/pop_confirm/pop_confirm.js.map +1 -1
  104. package/dist/test-setup.d.ts +2 -0
  105. package/dist/test-setup.d.ts.map +1 -0
  106. package/dist/test-setup.js +10 -0
  107. package/dist/test-setup.js.map +1 -0
  108. package/dist/themes/theme.d.ts.map +1 -1
  109. package/dist/themes/theme.js +17 -22
  110. package/dist/themes/theme.js.map +1 -1
  111. package/dist/themes/themes/ergo/ergo_theme.css +1 -1
  112. package/dist/themes/themes/ergo/ergo_theme.js +201 -21
  113. package/dist/themes/themes/ergo/ergo_theme.js.map +1 -1
  114. package/dist/utils/index.d.ts +1 -0
  115. package/dist/utils/index.d.ts.map +1 -1
  116. package/dist/utils/index.js +39 -26
  117. package/dist/utils/index.js.map +1 -1
  118. package/dist/utils/resize/context.d.ts +4 -0
  119. package/dist/utils/resize/context.d.ts.map +1 -0
  120. package/dist/utils/resize/context.js +10 -0
  121. package/dist/utils/resize/context.js.map +1 -0
  122. package/dist/utils/resize/handle_config.d.ts +32 -0
  123. package/dist/utils/resize/handle_config.d.ts.map +1 -0
  124. package/dist/utils/resize/handle_config.js +85 -0
  125. package/dist/utils/resize/handle_config.js.map +1 -0
  126. package/dist/utils/resize/index.d.ts +10 -0
  127. package/dist/utils/resize/index.d.ts.map +1 -0
  128. package/dist/utils/resize/index.js +16 -0
  129. package/dist/utils/resize/index.js.map +1 -0
  130. package/dist/utils/resize/resizable.d.ts +11 -0
  131. package/dist/utils/resize/resizable.d.ts.map +1 -0
  132. package/dist/utils/resize/resizable.js +52 -0
  133. package/dist/utils/resize/resizable.js.map +1 -0
  134. package/dist/utils/resize/resize_handle.d.ts +7 -0
  135. package/dist/utils/resize/resize_handle.d.ts.map +1 -0
  136. package/dist/utils/resize/resize_handle.js +100 -0
  137. package/dist/utils/resize/resize_handle.js.map +1 -0
  138. package/dist/utils/resize/resize_strategy.d.ts +47 -0
  139. package/dist/utils/resize/resize_strategy.d.ts.map +1 -0
  140. package/dist/utils/resize/resize_strategy.js +108 -0
  141. package/dist/utils/resize/resize_strategy.js.map +1 -0
  142. package/dist/utils/resize/types.d.ts +28 -0
  143. package/dist/utils/resize/types.d.ts.map +1 -0
  144. package/dist/utils/resize/types.js +2 -0
  145. package/dist/utils/resize/types.js.map +1 -0
  146. package/package.json +3 -3
  147. package/src/layouts/__stories__/columns.stories.tsx +31 -0
  148. package/src/layouts/__stories__/composed.stories.tsx +77 -8
  149. package/src/layouts/__stories__/rows.stories.tsx +77 -0
  150. package/src/layouts/__stories__/utils.tsx +2 -84
  151. package/src/layouts/containers/columns/column.module.css +3 -2
  152. package/src/layouts/containers/columns/columns.tsx +29 -3
  153. package/src/layouts/containers/containers.module.css +27 -29
  154. package/src/layouts/containers/rail.tsx +9 -51
  155. package/src/layouts/containers/rows/index.ts +2 -0
  156. package/src/layouts/containers/rows/row.module.css +15 -0
  157. package/src/layouts/containers/rows/row.tsx +22 -0
  158. package/src/layouts/containers/rows/rows.tsx +42 -0
  159. package/src/layouts/containers/scaffold.tsx +9 -49
  160. package/src/layouts/index.ts +2 -0
  161. package/src/stacks/box/detect_resize_bounds.ts +5 -1
  162. package/src/surfaces/card/card.module.css +5 -0
  163. package/src/surfaces/card/card.stories.tsx +66 -8
  164. package/src/surfaces/card/card.tsx +6 -2
  165. package/src/surfaces/page/page.stories.tsx +84 -4
  166. package/src/surfaces/panel/__stories__/panel.stories.tsx +84 -9
  167. package/src/test-setup.ts +11 -0
  168. package/src/themes/theme.tsx +6 -16
  169. package/src/themes/themes/ergo/ergo_theme.css +199 -19
  170. package/src/utils/index.ts +2 -0
  171. package/src/utils/resize/__stories__/resizable.stories.tsx +214 -0
  172. package/src/utils/resize/__stories__/resizable_stories.module.css +47 -0
  173. package/src/utils/resize/__tests__/handle_config.test.ts +269 -0
  174. package/src/utils/resize/__tests__/resize_strategy.test.ts +163 -0
  175. package/src/utils/resize/context.ts +9 -0
  176. package/src/utils/resize/handle_config.ts +142 -0
  177. package/src/utils/resize/index.ts +37 -0
  178. package/src/utils/resize/resizable.module.css +5 -0
  179. package/src/utils/resize/resizable.tsx +97 -0
  180. package/src/utils/resize/resize_handle.module.css +146 -0
  181. package/src/utils/resize/resize_handle.tsx +165 -0
  182. package/src/utils/resize/resize_strategy.ts +190 -0
  183. package/src/utils/resize/types.ts +64 -0
  184. package/dist/containers.module-DlGySre0.js +0 -5
  185. package/dist/containers.module-DlGySre0.js.map +0 -1
@@ -8,38 +8,41 @@ import "../../utils/hooks/use_resize_observer.js";
8
8
  import "../../utils/dnd/context.js";
9
9
  import "clsx";
10
10
  import "../../draggable.module-BgelQsuJ.js";
11
+ import "../../utils/resize/context.js";
12
+ import "../../resizable.module-I6iyBAvM.js";
13
+ import "../../utils/resize/resize_handle.js";
11
14
  import { Input as B } from "../input/input.js";
12
- const T = _.forwardRef(function({ onKeyCapture: n, onKeyDown: m, onInput: p, ...E }, v) {
13
- const d = e(0), c = e(0), r = e(0), u = e(0), x = e(0), o = e(0), s = e(null), P = j(v, s);
14
- function g(f) {
15
+ const W = _.forwardRef(function({ onKeyCapture: n, onKeyDown: a, onInput: p, ...E }, v) {
16
+ const d = e(0), o = e(0), r = e(0), u = e(0), x = e(0), c = e(0), s = e(null), P = j(v, s);
17
+ function g(m) {
15
18
  const t = s.current;
16
- t != null && (d.current = t.value.length, c.current = t.selectionStart == null ? 0 : t.selectionStart, r.current = t.selectionEnd == null ? 0 : t.selectionEnd, o.current = r.current, u.current = Math.min(
17
- c.current,
19
+ t != null && (d.current = t.value.length, o.current = t.selectionStart == null ? 0 : t.selectionStart, r.current = t.selectionEnd == null ? 0 : t.selectionEnd, c.current = r.current, u.current = Math.min(
20
+ o.current,
18
21
  r.current
19
22
  ), x.current = Math.max(
20
- c.current,
23
+ o.current,
21
24
  r.current
22
- ), m && m(f));
25
+ ), a && a(m));
23
26
  }
24
- function I(f) {
27
+ function I(m) {
25
28
  const t = s.current;
26
29
  if (t == null)
27
30
  return;
28
- const M = t.value.length, k = c.current !== r.current, R = t.selectionStart == null ? 0 : t.selectionStart, a = t.selectionEnd == null ? 0 : t.selectionEnd, w = Math.min(R, a), h = Math.max(R, a), l = a;
31
+ const M = t.value.length, k = o.current !== r.current, R = t.selectionStart == null ? 0 : t.selectionStart, f = t.selectionEnd == null ? 0 : t.selectionEnd, w = Math.min(R, f), h = Math.max(R, f), i = f;
29
32
  if (k) {
30
33
  const S = t.value.slice(
31
34
  u.current,
32
35
  h
33
- ), i = {
34
- start: c.current,
36
+ ), l = {
37
+ start: o.current,
35
38
  end: r.current
36
39
  };
37
40
  n && n(
38
41
  S,
39
42
  "",
40
- i,
41
- o.current,
42
43
  l,
44
+ c.current,
45
+ i,
43
46
  t
44
47
  );
45
48
  } else if (d.current > M)
@@ -47,36 +50,36 @@ const T = _.forwardRef(function({ onKeyCapture: n, onKeyDown: m, onInput: p, ...
47
50
  "",
48
51
  "Delete",
49
52
  null,
50
- o.current,
51
- l,
53
+ c.current,
54
+ i,
52
55
  t
53
56
  ) : n && n(
54
57
  "",
55
58
  "Backspace",
56
59
  null,
57
- o.current,
58
- l,
60
+ c.current,
61
+ i,
59
62
  t
60
63
  );
61
64
  else {
62
- const i = t.value.slice(
65
+ const l = t.value.slice(
63
66
  u.current,
64
67
  h
65
68
  );
66
69
  n && n(
67
- i,
70
+ l,
68
71
  "",
69
72
  null,
70
- o.current,
71
- l,
73
+ c.current,
74
+ i,
72
75
  t
73
76
  );
74
77
  }
75
- p && p(f);
78
+ p && p(m);
76
79
  }
77
80
  return /* @__PURE__ */ L(B, { ref: P, onKeyDown: g, onInput: I, ...E });
78
81
  });
79
82
  export {
80
- T as KeyCaptureInput
83
+ W as KeyCaptureInput
81
84
  };
82
85
  //# sourceMappingURL=key_capture_input.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"key_capture_input.js","sources":["../../../src/inputs/mask_input/key_capture_input.tsx"],"sourcesContent":["import { useForkRef } from '../../utils/index.js';\nimport React from 'react';\nimport { useRef } from 'react';\nimport { Input, InputProps } from '../input/input.js';\n\nexport interface Range {\n start: number;\n end: number;\n}\n\nexport interface KeyCaptureInputProps extends InputProps {\n onKeyCapture?: (\n input: string,\n key: string,\n selection: Range | null,\n cursorPosition: number,\n finalCursorPosition: number,\n inputElement: HTMLInputElement\n ) => void;\n}\n\nexport const KeyCaptureInput = React.forwardRef(function InputCapture(\n { onKeyCapture, onKeyDown, onInput, ...props }: KeyCaptureInputProps,\n ref\n) {\n const valueLengthRef = useRef(0);\n const selectionStartRef = useRef(0);\n const selectionEndRef = useRef(0);\n const minCursorPositionRef = useRef(0);\n const maxCursorPositionRef = useRef(0);\n const cursorPositionRef = useRef(0);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const forkedRef = useForkRef(ref, inputRef);\n\n function handleKeydown(event: React.KeyboardEvent<HTMLInputElement>) {\n const inputElement = inputRef.current;\n\n if (inputElement == null) {\n return;\n }\n\n valueLengthRef.current = inputElement.value.length;\n selectionStartRef.current =\n inputElement.selectionStart == null ? 0 : inputElement.selectionStart;\n selectionEndRef.current =\n inputElement.selectionEnd == null ? 0 : inputElement.selectionEnd;\n cursorPositionRef.current = selectionEndRef.current;\n minCursorPositionRef.current = Math.min(\n selectionStartRef.current,\n selectionEndRef.current\n );\n\n maxCursorPositionRef.current = Math.max(\n selectionStartRef.current,\n selectionEndRef.current\n );\n\n onKeyDown && onKeyDown(event);\n }\n\n function handleInput(event: React.ChangeEvent<HTMLInputElement>) {\n const inputElement = inputRef.current;\n\n if (inputElement == null) {\n return;\n }\n\n const valueLength = inputElement.value.length;\n const hadSelection = selectionStartRef.current !== selectionEndRef.current;\n const inputSelectionStart =\n inputElement.selectionStart == null ? 0 : inputElement.selectionStart;\n const inputSelectionEnd =\n inputElement.selectionEnd == null ? 0 : inputElement.selectionEnd;\n const minCursorPosition = Math.min(inputSelectionStart, inputSelectionEnd);\n const maxCursorPosition = Math.max(inputSelectionStart, inputSelectionEnd);\n const cursorPosition = inputSelectionEnd;\n\n if (hadSelection) {\n const input = inputElement.value.slice(\n minCursorPositionRef.current,\n maxCursorPosition\n );\n const selection = {\n start: selectionStartRef.current,\n end: selectionEndRef.current,\n };\n onKeyCapture &&\n onKeyCapture(\n input,\n '',\n selection,\n cursorPositionRef.current,\n cursorPosition,\n inputElement\n );\n } else {\n const collapsed = valueLengthRef.current > valueLength;\n if (collapsed) {\n const deleted = minCursorPositionRef.current === minCursorPosition;\n\n if (deleted) {\n onKeyCapture &&\n onKeyCapture(\n '',\n 'Delete',\n null,\n cursorPositionRef.current,\n cursorPosition,\n inputElement\n );\n } else {\n onKeyCapture &&\n onKeyCapture(\n '',\n 'Backspace',\n null,\n cursorPositionRef.current,\n cursorPosition,\n inputElement\n );\n }\n } else {\n const input = inputElement.value.slice(\n minCursorPositionRef.current,\n maxCursorPosition\n );\n onKeyCapture &&\n onKeyCapture(\n input,\n '',\n null,\n cursorPositionRef.current,\n cursorPosition,\n inputElement\n );\n }\n }\n onInput && onInput(event);\n }\n\n return (\n <Input ref={forkedRef} onKeyDown={handleKeydown} onInput={handleInput} {...props} />\n );\n});\n"],"names":["KeyCaptureInput","React","onKeyCapture","onKeyDown","onInput","props","ref","valueLengthRef","useRef","selectionStartRef","selectionEndRef","minCursorPositionRef","maxCursorPositionRef","cursorPositionRef","inputRef","forkedRef","useForkRef","handleKeydown","event","inputElement","handleInput","valueLength","hadSelection","inputSelectionStart","inputSelectionEnd","minCursorPosition","maxCursorPosition","cursorPosition","input","selection","jsx","Input"],"mappings":";;;;;;;;;;;AAqBO,MAAMA,IAAkBC,EAAM,WAAW,SAC9C,EAAE,cAAAC,GAAc,WAAAC,GAAW,SAAAC,GAAS,GAAGC,EAAA,GACvCC,GACA;AACA,QAAMC,IAAiBC,EAAO,CAAC,GACzBC,IAAoBD,EAAO,CAAC,GAC5BE,IAAkBF,EAAO,CAAC,GAC1BG,IAAuBH,EAAO,CAAC,GAC/BI,IAAuBJ,EAAO,CAAC,GAC/BK,IAAoBL,EAAO,CAAC,GAC5BM,IAAWN,EAAgC,IAAI,GAC/CO,IAAYC,EAAWV,GAAKQ,CAAQ;AAE1C,WAASG,EAAcC,GAA8C;AACnE,UAAMC,IAAeL,EAAS;AAE9B,IAAIK,KAAgB,SAIpBZ,EAAe,UAAUY,EAAa,MAAM,QAC5CV,EAAkB,UAChBU,EAAa,kBAAkB,OAAO,IAAIA,EAAa,gBACzDT,EAAgB,UACdS,EAAa,gBAAgB,OAAO,IAAIA,EAAa,cACvDN,EAAkB,UAAUH,EAAgB,SAC5CC,EAAqB,UAAU,KAAK;AAAA,MAClCF,EAAkB;AAAA,MAClBC,EAAgB;AAAA,IAAA,GAGlBE,EAAqB,UAAU,KAAK;AAAA,MAClCH,EAAkB;AAAA,MAClBC,EAAgB;AAAA,IAAA,GAGlBP,KAAaA,EAAUe,CAAK;AAAA,EAC9B;AAEA,WAASE,EAAYF,GAA4C;AAC/D,UAAMC,IAAeL,EAAS;AAE9B,QAAIK,KAAgB;AAClB;AAGF,UAAME,IAAcF,EAAa,MAAM,QACjCG,IAAeb,EAAkB,YAAYC,EAAgB,SAC7Da,IACJJ,EAAa,kBAAkB,OAAO,IAAIA,EAAa,gBACnDK,IACJL,EAAa,gBAAgB,OAAO,IAAIA,EAAa,cACjDM,IAAoB,KAAK,IAAIF,GAAqBC,CAAiB,GACnEE,IAAoB,KAAK,IAAIH,GAAqBC,CAAiB,GACnEG,IAAiBH;AAEvB,QAAIF,GAAc;AAChB,YAAMM,IAAQT,EAAa,MAAM;AAAA,QAC/BR,EAAqB;AAAA,QACrBe;AAAA,MAAA,GAEIG,IAAY;AAAA,QAChB,OAAOpB,EAAkB;AAAA,QACzB,KAAKC,EAAgB;AAAA,MAAA;AAEvB,MAAAR,KACEA;AAAA,QACE0B;AAAA,QACA;AAAA,QACAC;AAAA,QACAhB,EAAkB;AAAA,QAClBc;AAAA,QACAR;AAAA,MAAA;AAAA,IAEN,WACoBZ,EAAe,UAAUc;AAIzC,MAFgBV,EAAqB,YAAYc,IAG/CvB,KACEA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACAW,EAAkB;AAAA,QAClBc;AAAA,QACAR;AAAA,MAAA,IAGJjB,KACEA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACAW,EAAkB;AAAA,QAClBc;AAAA,QACAR;AAAA,MAAA;AAAA,SAGD;AACL,YAAMS,IAAQT,EAAa,MAAM;AAAA,QAC/BR,EAAqB;AAAA,QACrBe;AAAA,MAAA;AAEF,MAAAxB,KACEA;AAAA,QACE0B;AAAA,QACA;AAAA,QACA;AAAA,QACAf,EAAkB;AAAA,QAClBc;AAAA,QACAR;AAAA,MAAA;AAAA,IAEN;AAEF,IAAAf,KAAWA,EAAQc,CAAK;AAAA,EAC1B;AAEA,SACE,gBAAAY,EAACC,KAAM,KAAKhB,GAAW,WAAWE,GAAe,SAASG,GAAc,GAAGf,EAAA,CAAO;AAEtF,CAAC;"}
1
+ {"version":3,"file":"key_capture_input.js","sources":["../../../src/inputs/mask_input/key_capture_input.tsx"],"sourcesContent":["import { useForkRef } from '../../utils/index.js';\nimport React from 'react';\nimport { useRef } from 'react';\nimport { Input, InputProps } from '../input/input.js';\n\nexport interface Range {\n start: number;\n end: number;\n}\n\nexport interface KeyCaptureInputProps extends InputProps {\n onKeyCapture?: (\n input: string,\n key: string,\n selection: Range | null,\n cursorPosition: number,\n finalCursorPosition: number,\n inputElement: HTMLInputElement\n ) => void;\n}\n\nexport const KeyCaptureInput = React.forwardRef(function InputCapture(\n { onKeyCapture, onKeyDown, onInput, ...props }: KeyCaptureInputProps,\n ref\n) {\n const valueLengthRef = useRef(0);\n const selectionStartRef = useRef(0);\n const selectionEndRef = useRef(0);\n const minCursorPositionRef = useRef(0);\n const maxCursorPositionRef = useRef(0);\n const cursorPositionRef = useRef(0);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const forkedRef = useForkRef(ref, inputRef);\n\n function handleKeydown(event: React.KeyboardEvent<HTMLInputElement>) {\n const inputElement = inputRef.current;\n\n if (inputElement == null) {\n return;\n }\n\n valueLengthRef.current = inputElement.value.length;\n selectionStartRef.current =\n inputElement.selectionStart == null ? 0 : inputElement.selectionStart;\n selectionEndRef.current =\n inputElement.selectionEnd == null ? 0 : inputElement.selectionEnd;\n cursorPositionRef.current = selectionEndRef.current;\n minCursorPositionRef.current = Math.min(\n selectionStartRef.current,\n selectionEndRef.current\n );\n\n maxCursorPositionRef.current = Math.max(\n selectionStartRef.current,\n selectionEndRef.current\n );\n\n onKeyDown && onKeyDown(event);\n }\n\n function handleInput(event: React.ChangeEvent<HTMLInputElement>) {\n const inputElement = inputRef.current;\n\n if (inputElement == null) {\n return;\n }\n\n const valueLength = inputElement.value.length;\n const hadSelection = selectionStartRef.current !== selectionEndRef.current;\n const inputSelectionStart =\n inputElement.selectionStart == null ? 0 : inputElement.selectionStart;\n const inputSelectionEnd =\n inputElement.selectionEnd == null ? 0 : inputElement.selectionEnd;\n const minCursorPosition = Math.min(inputSelectionStart, inputSelectionEnd);\n const maxCursorPosition = Math.max(inputSelectionStart, inputSelectionEnd);\n const cursorPosition = inputSelectionEnd;\n\n if (hadSelection) {\n const input = inputElement.value.slice(\n minCursorPositionRef.current,\n maxCursorPosition\n );\n const selection = {\n start: selectionStartRef.current,\n end: selectionEndRef.current,\n };\n onKeyCapture &&\n onKeyCapture(\n input,\n '',\n selection,\n cursorPositionRef.current,\n cursorPosition,\n inputElement\n );\n } else {\n const collapsed = valueLengthRef.current > valueLength;\n if (collapsed) {\n const deleted = minCursorPositionRef.current === minCursorPosition;\n\n if (deleted) {\n onKeyCapture &&\n onKeyCapture(\n '',\n 'Delete',\n null,\n cursorPositionRef.current,\n cursorPosition,\n inputElement\n );\n } else {\n onKeyCapture &&\n onKeyCapture(\n '',\n 'Backspace',\n null,\n cursorPositionRef.current,\n cursorPosition,\n inputElement\n );\n }\n } else {\n const input = inputElement.value.slice(\n minCursorPositionRef.current,\n maxCursorPosition\n );\n onKeyCapture &&\n onKeyCapture(\n input,\n '',\n null,\n cursorPositionRef.current,\n cursorPosition,\n inputElement\n );\n }\n }\n onInput && onInput(event);\n }\n\n return (\n <Input ref={forkedRef} onKeyDown={handleKeydown} onInput={handleInput} {...props} />\n );\n});\n"],"names":["KeyCaptureInput","React","onKeyCapture","onKeyDown","onInput","props","ref","valueLengthRef","useRef","selectionStartRef","selectionEndRef","minCursorPositionRef","maxCursorPositionRef","cursorPositionRef","inputRef","forkedRef","useForkRef","handleKeydown","event","inputElement","handleInput","valueLength","hadSelection","inputSelectionStart","inputSelectionEnd","minCursorPosition","maxCursorPosition","cursorPosition","input","selection","jsx","Input"],"mappings":";;;;;;;;;;;;;;AAqBO,MAAMA,IAAkBC,EAAM,WAAW,SAC9C,EAAE,cAAAC,GAAc,WAAAC,GAAW,SAAAC,GAAS,GAAGC,EAAA,GACvCC,GACA;AACA,QAAMC,IAAiBC,EAAO,CAAC,GACzBC,IAAoBD,EAAO,CAAC,GAC5BE,IAAkBF,EAAO,CAAC,GAC1BG,IAAuBH,EAAO,CAAC,GAC/BI,IAAuBJ,EAAO,CAAC,GAC/BK,IAAoBL,EAAO,CAAC,GAC5BM,IAAWN,EAAgC,IAAI,GAC/CO,IAAYC,EAAWV,GAAKQ,CAAQ;AAE1C,WAASG,EAAcC,GAA8C;AACnE,UAAMC,IAAeL,EAAS;AAE9B,IAAIK,KAAgB,SAIpBZ,EAAe,UAAUY,EAAa,MAAM,QAC5CV,EAAkB,UAChBU,EAAa,kBAAkB,OAAO,IAAIA,EAAa,gBACzDT,EAAgB,UACdS,EAAa,gBAAgB,OAAO,IAAIA,EAAa,cACvDN,EAAkB,UAAUH,EAAgB,SAC5CC,EAAqB,UAAU,KAAK;AAAA,MAClCF,EAAkB;AAAA,MAClBC,EAAgB;AAAA,IAAA,GAGlBE,EAAqB,UAAU,KAAK;AAAA,MAClCH,EAAkB;AAAA,MAClBC,EAAgB;AAAA,IAAA,GAGlBP,KAAaA,EAAUe,CAAK;AAAA,EAC9B;AAEA,WAASE,EAAYF,GAA4C;AAC/D,UAAMC,IAAeL,EAAS;AAE9B,QAAIK,KAAgB;AAClB;AAGF,UAAME,IAAcF,EAAa,MAAM,QACjCG,IAAeb,EAAkB,YAAYC,EAAgB,SAC7Da,IACJJ,EAAa,kBAAkB,OAAO,IAAIA,EAAa,gBACnDK,IACJL,EAAa,gBAAgB,OAAO,IAAIA,EAAa,cACjDM,IAAoB,KAAK,IAAIF,GAAqBC,CAAiB,GACnEE,IAAoB,KAAK,IAAIH,GAAqBC,CAAiB,GACnEG,IAAiBH;AAEvB,QAAIF,GAAc;AAChB,YAAMM,IAAQT,EAAa,MAAM;AAAA,QAC/BR,EAAqB;AAAA,QACrBe;AAAA,MAAA,GAEIG,IAAY;AAAA,QAChB,OAAOpB,EAAkB;AAAA,QACzB,KAAKC,EAAgB;AAAA,MAAA;AAEvB,MAAAR,KACEA;AAAA,QACE0B;AAAA,QACA;AAAA,QACAC;AAAA,QACAhB,EAAkB;AAAA,QAClBc;AAAA,QACAR;AAAA,MAAA;AAAA,IAEN,WACoBZ,EAAe,UAAUc;AAIzC,MAFgBV,EAAqB,YAAYc,IAG/CvB,KACEA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACAW,EAAkB;AAAA,QAClBc;AAAA,QACAR;AAAA,MAAA,IAGJjB,KACEA;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACAW,EAAkB;AAAA,QAClBc;AAAA,QACAR;AAAA,MAAA;AAAA,SAGD;AACL,YAAMS,IAAQT,EAAa,MAAM;AAAA,QAC/BR,EAAqB;AAAA,QACrBe;AAAA,MAAA;AAEF,MAAAxB,KACEA;AAAA,QACE0B;AAAA,QACA;AAAA,QACA;AAAA,QACAf,EAAkB;AAAA,QAClBc;AAAA,QACAR;AAAA,MAAA;AAAA,IAEN;AAEF,IAAAf,KAAWA,EAAQc,CAAK;AAAA,EAC1B;AAEA,SACE,gBAAAY,EAACC,KAAM,KAAKhB,GAAW,WAAWE,GAAe,SAASG,GAAc,GAAGf,EAAA,CAAO;AAEtF,CAAC;"}
@@ -9,9 +9,12 @@ import "../../utils/hooks/use_resize_observer.js";
9
9
  import "../../utils/dnd/context.js";
10
10
  import "clsx";
11
11
  import "../../draggable.module-BgelQsuJ.js";
12
+ import "../../utils/resize/context.js";
13
+ import "../../resizable.module-I6iyBAvM.js";
14
+ import "../../utils/resize/resize_handle.js";
12
15
  import { KeyCaptureInput as _ } from "./key_capture_input.js";
13
16
  import { MaskPresenter as F } from "./mask_presenter.js";
14
- const ee = A.forwardRef(
17
+ const oe = A.forwardRef(
15
18
  function({
16
19
  value: m = "",
17
20
  onChange: d,
@@ -120,6 +123,6 @@ const ee = A.forwardRef(
120
123
  }
121
124
  );
122
125
  export {
123
- ee as MaskInput
126
+ oe as MaskInput
124
127
  };
125
128
  //# sourceMappingURL=mask_input.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mask_input.js","sources":["../../../src/inputs/mask_input/mask_input.tsx"],"sourcesContent":["import { useSignalValue } from '@tcn/state';\nimport { useForkRef } from '../../utils/index.js';\nimport React, { useRef, useState, useLayoutEffect } from 'react';\nimport { InputProps } from '../input/input.js';\nimport { KeyCaptureInput, Range } from './key_capture_input.js';\nimport { MaskConfig } from './mask_config.js';\nimport { MaskPresenter } from './mask_presenter.js';\n\nexport interface MaskInputProps extends Omit<InputProps, 'onChange' | 'placeholder'> {\n value?: string;\n mask: MaskConfig | MaskConfig[];\n onChange?: (value: string, isComplete: boolean) => void;\n preparePasteValue?: (value: string) => string;\n prepareCutValue?: (value: string) => string;\n prepareCopyValue?: (value: string) => string;\n}\n\nexport const MaskInput = React.forwardRef<HTMLInputElement, MaskInputProps>(\n function MaskInput(\n {\n value = '',\n onChange,\n mask,\n onPaste,\n onCut,\n onCopy,\n preparePasteValue = s => s,\n prepareCutValue = s => s,\n prepareCopyValue = s => s,\n ...props\n }: MaskInputProps,\n ref\n ) {\n // Fix copy on input, its not working\n const masks = Array.isArray(mask) ? mask : [mask];\n const inputRef = useRef<HTMLInputElement | null>(null);\n const forkedRef = useForkRef(ref, inputRef);\n\n const [presenter] = useState(() => {\n const presenter = new MaskPresenter(masks);\n return presenter;\n });\n\n const internalValue = useSignalValue(presenter.valueBroadcast);\n useSignalValue(presenter.maskConfigsBroadcast);\n\n function handleInput(\n input: string,\n key: string,\n selection: Range | null,\n cursorPosition: number,\n _: number,\n inputElement: HTMLInputElement\n ) {\n if (selection != null) {\n presenter.setSelection(selection.start, selection.end);\n } else {\n presenter.forceMoveCursorTo(cursorPosition);\n }\n\n switch (key) {\n case 'Delete': {\n presenter.delete();\n }\n case 'Backspace': {\n presenter.backspace();\n }\n }\n\n presenter.insertText(input);\n\n const value = presenter.valueBroadcast.get();\n const resolvedCursorPosition = presenter.cursorPositionBroadcast.get();\n\n inputElement.value = value;\n inputElement.setSelectionRange(resolvedCursorPosition, resolvedCursorPosition);\n\n onChange && onChange(value, presenter.isComplete());\n }\n\n useLayoutEffect(() => {\n const masks = Array.isArray(mask) ? mask : [mask];\n\n const oldMaskString = masks.map(m => m.mask).join('|');\n const newMaskString = presenter.maskConfigsBroadcast\n .get()\n .map(m => m.mask)\n .join('|');\n\n if (oldMaskString !== newMaskString) {\n presenter.setMaskConfigs(masks);\n }\n }, [presenter, mask]);\n\n useLayoutEffect(() => {\n presenter.setValue(value);\n const selection = presenter.selectionBroadcast.get();\n const cursorPosition = presenter.cursorPositionBroadcast.get();\n\n const input = inputRef.current;\n\n if (input != null) {\n const hasSelection = selection != null;\n\n if (hasSelection) {\n input.setSelectionRange(selection.start, selection.end);\n } else {\n input.setSelectionRange(cursorPosition, cursorPosition);\n }\n }\n }, [presenter, value]);\n\n function handlePaste(event: React.ClipboardEvent<HTMLInputElement>) {\n const inputElement = event.currentTarget;\n const start = inputElement.selectionStart;\n const end = inputElement.selectionEnd;\n const hasSelection = start != null && end != null && start !== end;\n\n if (hasSelection) {\n presenter.setSelection(start, end);\n } else {\n presenter.moveCursorTo(start || 0);\n }\n\n presenter.insertText(preparePasteValue(event.clipboardData.getData('text/plain')));\n const resolvedCursorPosition = presenter.cursorPositionBroadcast.get();\n\n inputElement.value = presenter.valueBroadcast.get();\n inputElement.setSelectionRange(resolvedCursorPosition, resolvedCursorPosition);\n\n event.preventDefault();\n onPaste && onPaste(event);\n onChange && onChange(presenter.valueBroadcast.get(), presenter.isComplete());\n }\n\n function handleCut(event: React.ClipboardEvent<HTMLInputElement>) {\n const inputElement = event.currentTarget;\n const start = inputElement.selectionStart;\n const end = inputElement.selectionEnd;\n const hasSelection = start != null && end != null && start !== end;\n\n if (hasSelection) {\n presenter.setSelection(start, end);\n const value = prepareCutValue(presenter.getSelectedValue());\n presenter.clearRange(start, end);\n const resolvedCursorPosition = presenter.cursorPositionBroadcast.get();\n\n event.clipboardData.setData('text/plain', value);\n inputElement.value = presenter.valueBroadcast.get();\n inputElement.setSelectionRange(resolvedCursorPosition, resolvedCursorPosition);\n }\n\n event.preventDefault();\n onCut && onCut(event);\n }\n\n function handleCopy(event: React.ClipboardEvent<HTMLInputElement>) {\n const input = event.currentTarget;\n const start = input.selectionStart;\n const end = input.selectionEnd;\n const hasSelection = start != null && end != null && start !== end;\n\n if (hasSelection) {\n presenter.setSelection(start, end);\n const value = prepareCopyValue(presenter.getSelectedValue());\n\n event.clipboardData.setData('text/plain', value);\n }\n\n event.preventDefault();\n onCopy && onCopy(event);\n }\n\n useLayoutEffect(() => {\n let mode = 'unknown';\n\n const input = inputRef.current;\n\n if (input == null) {\n return;\n }\n\n function handleMouseDown() {\n mode = 'mouse';\n }\n\n function handleKeyDown() {\n mode = 'keyboard';\n }\n\n function handleSelection() {\n const input = inputRef.current;\n\n if (input == null) {\n return;\n }\n\n const start = input.selectionStart;\n const end = input.selectionEnd;\n const hasSelection = start != null && end != null && start !== end;\n if (input !== document.activeElement || mode === 'keyboard') {\n mode = 'unknown';\n return;\n }\n\n const value = presenter.filledValueBroadcast.get();\n\n if (hasSelection && value.length === 0) {\n presenter.moveCursorTo(0);\n input.setSelectionRange(0, 0);\n mode = 'unknown';\n return;\n }\n\n if (!hasSelection) {\n presenter.moveCursorTo(end || 0);\n const cursorPosition = presenter.cursorPositionBroadcast.get();\n input.setSelectionRange(cursorPosition, cursorPosition);\n }\n\n mode = 'unknown';\n }\n\n document.addEventListener('selectionchange', handleSelection);\n document.addEventListener('mousedown', handleMouseDown);\n document.addEventListener('keydown', handleKeyDown);\n return () => {\n document.removeEventListener('selectionchange', handleSelection);\n document.removeEventListener('mousedown', handleMouseDown);\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [presenter]);\n\n return (\n <KeyCaptureInput\n value={internalValue}\n ref={forkedRef}\n onCopy={handleCopy}\n onPaste={handlePaste}\n onCut={handleCut}\n onKeyCapture={handleInput}\n {...props}\n />\n );\n }\n);\n"],"names":["MaskInput","React","value","onChange","mask","onPaste","onCut","onCopy","preparePasteValue","s","prepareCutValue","prepareCopyValue","props","ref","masks","inputRef","useRef","forkedRef","useForkRef","presenter","useState","MaskPresenter","internalValue","useSignalValue","handleInput","input","key","selection","cursorPosition","_","inputElement","resolvedCursorPosition","useLayoutEffect","oldMaskString","m","newMaskString","handlePaste","event","start","end","handleCut","handleCopy","mode","handleMouseDown","handleKeyDown","handleSelection","hasSelection","jsx","KeyCaptureInput"],"mappings":"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"}
1
+ {"version":3,"file":"mask_input.js","sources":["../../../src/inputs/mask_input/mask_input.tsx"],"sourcesContent":["import { useSignalValue } from '@tcn/state';\nimport { useForkRef } from '../../utils/index.js';\nimport React, { useRef, useState, useLayoutEffect } from 'react';\nimport { InputProps } from '../input/input.js';\nimport { KeyCaptureInput, Range } from './key_capture_input.js';\nimport { MaskConfig } from './mask_config.js';\nimport { MaskPresenter } from './mask_presenter.js';\n\nexport interface MaskInputProps extends Omit<InputProps, 'onChange' | 'placeholder'> {\n value?: string;\n mask: MaskConfig | MaskConfig[];\n onChange?: (value: string, isComplete: boolean) => void;\n preparePasteValue?: (value: string) => string;\n prepareCutValue?: (value: string) => string;\n prepareCopyValue?: (value: string) => string;\n}\n\nexport const MaskInput = React.forwardRef<HTMLInputElement, MaskInputProps>(\n function MaskInput(\n {\n value = '',\n onChange,\n mask,\n onPaste,\n onCut,\n onCopy,\n preparePasteValue = s => s,\n prepareCutValue = s => s,\n prepareCopyValue = s => s,\n ...props\n }: MaskInputProps,\n ref\n ) {\n // Fix copy on input, its not working\n const masks = Array.isArray(mask) ? mask : [mask];\n const inputRef = useRef<HTMLInputElement | null>(null);\n const forkedRef = useForkRef(ref, inputRef);\n\n const [presenter] = useState(() => {\n const presenter = new MaskPresenter(masks);\n return presenter;\n });\n\n const internalValue = useSignalValue(presenter.valueBroadcast);\n useSignalValue(presenter.maskConfigsBroadcast);\n\n function handleInput(\n input: string,\n key: string,\n selection: Range | null,\n cursorPosition: number,\n _: number,\n inputElement: HTMLInputElement\n ) {\n if (selection != null) {\n presenter.setSelection(selection.start, selection.end);\n } else {\n presenter.forceMoveCursorTo(cursorPosition);\n }\n\n switch (key) {\n case 'Delete': {\n presenter.delete();\n }\n case 'Backspace': {\n presenter.backspace();\n }\n }\n\n presenter.insertText(input);\n\n const value = presenter.valueBroadcast.get();\n const resolvedCursorPosition = presenter.cursorPositionBroadcast.get();\n\n inputElement.value = value;\n inputElement.setSelectionRange(resolvedCursorPosition, resolvedCursorPosition);\n\n onChange && onChange(value, presenter.isComplete());\n }\n\n useLayoutEffect(() => {\n const masks = Array.isArray(mask) ? mask : [mask];\n\n const oldMaskString = masks.map(m => m.mask).join('|');\n const newMaskString = presenter.maskConfigsBroadcast\n .get()\n .map(m => m.mask)\n .join('|');\n\n if (oldMaskString !== newMaskString) {\n presenter.setMaskConfigs(masks);\n }\n }, [presenter, mask]);\n\n useLayoutEffect(() => {\n presenter.setValue(value);\n const selection = presenter.selectionBroadcast.get();\n const cursorPosition = presenter.cursorPositionBroadcast.get();\n\n const input = inputRef.current;\n\n if (input != null) {\n const hasSelection = selection != null;\n\n if (hasSelection) {\n input.setSelectionRange(selection.start, selection.end);\n } else {\n input.setSelectionRange(cursorPosition, cursorPosition);\n }\n }\n }, [presenter, value]);\n\n function handlePaste(event: React.ClipboardEvent<HTMLInputElement>) {\n const inputElement = event.currentTarget;\n const start = inputElement.selectionStart;\n const end = inputElement.selectionEnd;\n const hasSelection = start != null && end != null && start !== end;\n\n if (hasSelection) {\n presenter.setSelection(start, end);\n } else {\n presenter.moveCursorTo(start || 0);\n }\n\n presenter.insertText(preparePasteValue(event.clipboardData.getData('text/plain')));\n const resolvedCursorPosition = presenter.cursorPositionBroadcast.get();\n\n inputElement.value = presenter.valueBroadcast.get();\n inputElement.setSelectionRange(resolvedCursorPosition, resolvedCursorPosition);\n\n event.preventDefault();\n onPaste && onPaste(event);\n onChange && onChange(presenter.valueBroadcast.get(), presenter.isComplete());\n }\n\n function handleCut(event: React.ClipboardEvent<HTMLInputElement>) {\n const inputElement = event.currentTarget;\n const start = inputElement.selectionStart;\n const end = inputElement.selectionEnd;\n const hasSelection = start != null && end != null && start !== end;\n\n if (hasSelection) {\n presenter.setSelection(start, end);\n const value = prepareCutValue(presenter.getSelectedValue());\n presenter.clearRange(start, end);\n const resolvedCursorPosition = presenter.cursorPositionBroadcast.get();\n\n event.clipboardData.setData('text/plain', value);\n inputElement.value = presenter.valueBroadcast.get();\n inputElement.setSelectionRange(resolvedCursorPosition, resolvedCursorPosition);\n }\n\n event.preventDefault();\n onCut && onCut(event);\n }\n\n function handleCopy(event: React.ClipboardEvent<HTMLInputElement>) {\n const input = event.currentTarget;\n const start = input.selectionStart;\n const end = input.selectionEnd;\n const hasSelection = start != null && end != null && start !== end;\n\n if (hasSelection) {\n presenter.setSelection(start, end);\n const value = prepareCopyValue(presenter.getSelectedValue());\n\n event.clipboardData.setData('text/plain', value);\n }\n\n event.preventDefault();\n onCopy && onCopy(event);\n }\n\n useLayoutEffect(() => {\n let mode = 'unknown';\n\n const input = inputRef.current;\n\n if (input == null) {\n return;\n }\n\n function handleMouseDown() {\n mode = 'mouse';\n }\n\n function handleKeyDown() {\n mode = 'keyboard';\n }\n\n function handleSelection() {\n const input = inputRef.current;\n\n if (input == null) {\n return;\n }\n\n const start = input.selectionStart;\n const end = input.selectionEnd;\n const hasSelection = start != null && end != null && start !== end;\n if (input !== document.activeElement || mode === 'keyboard') {\n mode = 'unknown';\n return;\n }\n\n const value = presenter.filledValueBroadcast.get();\n\n if (hasSelection && value.length === 0) {\n presenter.moveCursorTo(0);\n input.setSelectionRange(0, 0);\n mode = 'unknown';\n return;\n }\n\n if (!hasSelection) {\n presenter.moveCursorTo(end || 0);\n const cursorPosition = presenter.cursorPositionBroadcast.get();\n input.setSelectionRange(cursorPosition, cursorPosition);\n }\n\n mode = 'unknown';\n }\n\n document.addEventListener('selectionchange', handleSelection);\n document.addEventListener('mousedown', handleMouseDown);\n document.addEventListener('keydown', handleKeyDown);\n return () => {\n document.removeEventListener('selectionchange', handleSelection);\n document.removeEventListener('mousedown', handleMouseDown);\n document.removeEventListener('keydown', handleKeyDown);\n };\n }, [presenter]);\n\n return (\n <KeyCaptureInput\n value={internalValue}\n ref={forkedRef}\n onCopy={handleCopy}\n onPaste={handlePaste}\n onCut={handleCut}\n onKeyCapture={handleInput}\n {...props}\n />\n );\n }\n);\n"],"names":["MaskInput","React","value","onChange","mask","onPaste","onCut","onCopy","preparePasteValue","s","prepareCutValue","prepareCopyValue","props","ref","masks","inputRef","useRef","forkedRef","useForkRef","presenter","useState","MaskPresenter","internalValue","useSignalValue","handleInput","input","key","selection","cursorPosition","_","inputElement","resolvedCursorPosition","useLayoutEffect","oldMaskString","m","newMaskString","handlePaste","event","start","end","handleCut","handleCopy","mode","handleMouseDown","handleKeyDown","handleSelection","hasSelection","jsx","KeyCaptureInput"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { jsxs as v, Fragment as w, jsx as l } from "react/jsx-runtime";
1
+ import { jsxs as v, Fragment as w, jsx as o } from "react/jsx-runtime";
2
2
  import A, { useRef as V, useLayoutEffect as j } from "react";
3
3
  import { Spacer as q } from "../../stacks/spacer.js";
4
4
  import { VStack as C } from "../../stacks/v_stack.js";
@@ -14,15 +14,18 @@ import "../../utils/hooks/use_resize_observer.js";
14
14
  import "../../utils/dnd/context.js";
15
15
  import $ from "clsx";
16
16
  import "../../draggable.module-BgelQsuJ.js";
17
- import '../../multiselect.css';const z = "_multiselect-container_009951a", B = { "multiselect-container": z }, re = A.forwardRef(function({
17
+ import "../../utils/resize/context.js";
18
+ import "../../resizable.module-I6iyBAvM.js";
19
+ import "../../utils/resize/resize_handle.js";
20
+ import '../../multiselect.css';const z = "_multiselect-container_009951a", B = { "multiselect-container": z }, ie = A.forwardRef(function({
18
21
  value: e = [],
19
- disabled: o = !1,
22
+ disabled: l = !1,
20
23
  children: S,
21
24
  className: G,
22
25
  onChange: r,
23
26
  inline: y = !1,
24
- width: s = "100%",
25
- minWidth: i,
27
+ width: i = "100%",
28
+ minWidth: s,
26
29
  maxWidth: u,
27
30
  ...a
28
31
  }, m) {
@@ -45,11 +48,11 @@ import '../../multiselect.css';const z = "_multiselect-container_009951a", B = {
45
48
  }
46
49
  }
47
50
  return y ? /* @__PURE__ */ v(w, { children: [
48
- /* @__PURE__ */ l(
51
+ /* @__PURE__ */ o(
49
52
  x,
50
53
  {
51
54
  ref: F,
52
- disabled: o,
55
+ disabled: l,
53
56
  onChange: h,
54
57
  width: "auto",
55
58
  value: null,
@@ -58,42 +61,42 @@ import '../../multiselect.css';const z = "_multiselect-container_009951a", B = {
58
61
  children: p
59
62
  }
60
63
  ),
61
- /* @__PURE__ */ l(q, { width: "8px" }),
62
- /* @__PURE__ */ l(
64
+ /* @__PURE__ */ o(q, { width: "8px" }),
65
+ /* @__PURE__ */ o(
63
66
  E,
64
67
  {
65
68
  values: d,
66
69
  onRemove: R,
67
- disabled: o
70
+ disabled: l
68
71
  }
69
72
  )
70
73
  ] }) : /* @__PURE__ */ v(
71
74
  C,
72
75
  {
73
- width: s,
74
- minWidth: i,
76
+ width: i,
77
+ minWidth: s,
75
78
  maxWidth: u,
76
79
  className: $(B["multiselect-container"], "tcn-multiselect-container"),
77
80
  children: [
78
- /* @__PURE__ */ l(
81
+ /* @__PURE__ */ o(
79
82
  x,
80
83
  {
81
84
  ref: m,
82
- disabled: o,
85
+ disabled: l,
83
86
  onChange: h,
84
87
  value: null,
85
88
  placeholder: "Select to Add",
86
- width: s,
87
- minWidth: i,
89
+ width: i,
90
+ minWidth: s,
88
91
  maxWidth: u,
89
92
  ...a,
90
93
  children: p
91
94
  }
92
95
  ),
93
- /* @__PURE__ */ l(
96
+ /* @__PURE__ */ o(
94
97
  N,
95
98
  {
96
- disabled: o,
99
+ disabled: l,
97
100
  values: d,
98
101
  onRemove: R
99
102
  }
@@ -103,6 +106,6 @@ import '../../multiselect.css';const z = "_multiselect-container_009951a", B = {
103
106
  );
104
107
  });
105
108
  export {
106
- re as Multiselect
109
+ ie as Multiselect
107
110
  };
108
111
  //# sourceMappingURL=multiselect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"multiselect.js","sources":["../../../src/inputs/multiselect/multiselect.tsx"],"sourcesContent":["import React, { useLayoutEffect, useRef } from 'react';\nimport { Spacer } from '../../stacks/spacer.js';\nimport { VStack } from '../../stacks/v_stack.js';\nimport { MultiselectInlineValues } from './multiselect_inline_values.js';\nimport { MultiselectValues } from './multiselect_values.js';\nimport { makeAvailableOptions, makeValuesAsOptions } from '../options/utils.js';\nimport { Select, SelectProps } from '../select/select.js';\nimport { OptionProps } from '../options/option.js';\nimport { useForkRef } from '../../utils/index.js';\nimport styles from './multiselect.module.css';\nimport clsx from 'clsx';\n\nexport interface MultiselectProps\n extends Omit<\n SelectProps,\n 'onChange' | 'value' | 'children' | 'minHeight' | 'height' | 'maxHeight'\n > {\n children:\n | React.ReactElement<HTMLOptionElement>\n | React.ReactElement<HTMLOptionElement>[];\n onChange?: (values: string[]) => void;\n value?: string[];\n disabled?: boolean;\n inline?: boolean;\n}\n\nexport const Multiselect = React.forwardRef(function Multiselect(\n {\n value: values = [],\n disabled = false,\n children,\n className,\n onChange,\n inline = false,\n width = '100%',\n minWidth,\n maxWidth,\n ...props\n }: MultiselectProps,\n ref: React.Ref<HTMLButtonElement>\n) {\n const internalSelectRef = useRef<HTMLButtonElement | null>(null);\n const selectRef = useForkRef(ref, internalSelectRef);\n const lastValue = values[values.length - 1] || null;\n const valuesContainerRef = useRef<HTMLDivElement | null>(null);\n const childrenArray = React.Children.toArray(\n children\n ) as React.ReactElement<OptionProps>[];\n\n const availableOptions = makeAvailableOptions(childrenArray, values);\n const valuesAsOptions = makeValuesAsOptions(childrenArray, values);\n\n useLayoutEffect(() => {\n const valuesElement = valuesContainerRef.current;\n const shouldFocus = lastValue != null && valuesElement != null;\n if (shouldFocus) {\n (\n valuesElement.querySelector(`[data-value='${lastValue}']`) as HTMLElement\n )?.focus();\n\n // Safari doesn't respect the first focus if its called too quickly\n requestAnimationFrame(() => {\n internalSelectRef.current && internalSelectRef.current.focus();\n });\n }\n }, [lastValue]);\n\n function addValue(value: string) {\n if (!values.includes(value)) {\n onChange && onChange([...values, value]);\n }\n }\n\n function removeValue(option: React.ReactElement<OptionProps>) {\n const index = values.indexOf(option.props.value);\n\n if (index > -1) {\n const newValues = values.filter(v => v !== option.props.value);\n onChange && onChange(newValues);\n }\n }\n\n if (inline) {\n return (\n <>\n <Select\n ref={selectRef}\n disabled={disabled}\n onChange={addValue}\n width=\"auto\"\n value={null}\n placeholder=\"Select to Add\"\n {...props}\n >\n {availableOptions}\n </Select>\n <Spacer width=\"8px\" />\n <MultiselectInlineValues\n values={valuesAsOptions}\n onRemove={removeValue}\n disabled={disabled}\n />\n </>\n );\n }\n\n return (\n <VStack\n width={width}\n minWidth={minWidth}\n maxWidth={maxWidth}\n className={clsx(styles['multiselect-container'], 'tcn-multiselect-container')}\n >\n <Select\n ref={ref}\n disabled={disabled}\n onChange={addValue}\n value={null}\n placeholder=\"Select to Add\"\n width={width}\n minWidth={minWidth}\n maxWidth={maxWidth}\n {...props}\n >\n {availableOptions}\n </Select>\n <MultiselectValues\n disabled={disabled}\n values={valuesAsOptions}\n onRemove={removeValue}\n />\n </VStack>\n );\n});\n"],"names":["Multiselect","React","values","disabled","children","className","onChange","inline","width","minWidth","maxWidth","props","ref","internalSelectRef","useRef","selectRef","useForkRef","lastValue","valuesContainerRef","childrenArray","availableOptions","makeAvailableOptions","valuesAsOptions","makeValuesAsOptions","useLayoutEffect","valuesElement","addValue","value","removeValue","option","newValues","v","jsxs","Fragment","jsx","Select","Spacer","MultiselectInlineValues","VStack","clsx","styles","MultiselectValues"],"mappings":";;;;;;;;;;;;;;;;gFA0BaA,KAAcC,EAAM,WAAW,SAC1C;AAAA,EACE,OAAOC,IAAS,CAAA;AAAA,EAChB,UAAAC,IAAW;AAAA,EACX,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC,IAAS;AAAA,EACT,OAAAC,IAAQ;AAAA,EACR,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,GAAGC;AACL,GACAC,GACA;AACA,QAAMC,IAAoBC,EAAiC,IAAI,GACzDC,IAAYC,EAAWJ,GAAKC,CAAiB,GAC7CI,IAAYf,EAAOA,EAAO,SAAS,CAAC,KAAK,MACzCgB,IAAqBJ,EAA8B,IAAI,GACvDK,IAAgBlB,EAAM,SAAS;AAAA,IACnCG;AAAA,EAAA,GAGIgB,IAAmBC,EAAqBF,GAAejB,CAAM,GAC7DoB,IAAkBC,EAAoBJ,GAAejB,CAAM;AAEjE,EAAAsB,EAAgB,MAAM;AACpB,UAAMC,IAAgBP,EAAmB;AAEzC,IADoBD,KAAa,QAAQQ,KAAiB,SAGtDA,EAAc,cAAc,gBAAgBR,CAAS,IAAI,GACxD,MAAA,GAGH,sBAAsB,MAAM;AAC1B,MAAAJ,EAAkB,WAAWA,EAAkB,QAAQ,MAAA;AAAA,IACzD,CAAC;AAAA,EAEL,GAAG,CAACI,CAAS,CAAC;AAEd,WAASS,EAASC,GAAe;AAC/B,IAAKzB,EAAO,SAASyB,CAAK,KACxBrB,KAAYA,EAAS,CAAC,GAAGJ,GAAQyB,CAAK,CAAC;AAAA,EAE3C;AAEA,WAASC,EAAYC,GAAyC;AAG5D,QAFc3B,EAAO,QAAQ2B,EAAO,MAAM,KAAK,IAEnC,IAAI;AACd,YAAMC,IAAY5B,EAAO,OAAO,OAAK6B,MAAMF,EAAO,MAAM,KAAK;AAC7D,MAAAvB,KAAYA,EAASwB,CAAS;AAAA,IAChC;AAAA,EACF;AAEA,SAAIvB,IAEA,gBAAAyB,EAAAC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,KAAKpB;AAAA,QACL,UAAAZ;AAAA,QACA,UAAUuB;AAAA,QACV,OAAM;AAAA,QACN,OAAO;AAAA,QACP,aAAY;AAAA,QACX,GAAGf;AAAA,QAEH,UAAAS;AAAA,MAAA;AAAA,IAAA;AAAA,IAEH,gBAAAc,EAACE,GAAA,EAAO,OAAM,MAAA,CAAM;AAAA,IACpB,gBAAAF;AAAA,MAACG;AAAA,MAAA;AAAA,QACC,QAAQf;AAAA,QACR,UAAUM;AAAA,QACV,UAAAzB;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF,IAKF,gBAAA6B;AAAA,IAACM;AAAA,IAAA;AAAA,MACC,OAAA9B;AAAA,MACA,UAAAC;AAAA,MACA,UAAAC;AAAA,MACA,WAAW6B,EAAKC,EAAO,uBAAuB,GAAG,2BAA2B;AAAA,MAE5E,UAAA;AAAA,QAAA,gBAAAN;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,KAAAvB;AAAA,YACA,UAAAT;AAAA,YACA,UAAUuB;AAAA,YACV,OAAO;AAAA,YACP,aAAY;AAAA,YACZ,OAAAlB;AAAA,YACA,UAAAC;AAAA,YACA,UAAAC;AAAA,YACC,GAAGC;AAAA,YAEH,UAAAS;AAAA,UAAA;AAAA,QAAA;AAAA,QAEH,gBAAAc;AAAA,UAACO;AAAA,UAAA;AAAA,YACC,UAAAtC;AAAA,YACA,QAAQmB;AAAA,YACR,UAAUM;AAAA,UAAA;AAAA,QAAA;AAAA,MACZ;AAAA,IAAA;AAAA,EAAA;AAGN,CAAC;"}
1
+ {"version":3,"file":"multiselect.js","sources":["../../../src/inputs/multiselect/multiselect.tsx"],"sourcesContent":["import React, { useLayoutEffect, useRef } from 'react';\nimport { Spacer } from '../../stacks/spacer.js';\nimport { VStack } from '../../stacks/v_stack.js';\nimport { MultiselectInlineValues } from './multiselect_inline_values.js';\nimport { MultiselectValues } from './multiselect_values.js';\nimport { makeAvailableOptions, makeValuesAsOptions } from '../options/utils.js';\nimport { Select, SelectProps } from '../select/select.js';\nimport { OptionProps } from '../options/option.js';\nimport { useForkRef } from '../../utils/index.js';\nimport styles from './multiselect.module.css';\nimport clsx from 'clsx';\n\nexport interface MultiselectProps\n extends Omit<\n SelectProps,\n 'onChange' | 'value' | 'children' | 'minHeight' | 'height' | 'maxHeight'\n > {\n children:\n | React.ReactElement<HTMLOptionElement>\n | React.ReactElement<HTMLOptionElement>[];\n onChange?: (values: string[]) => void;\n value?: string[];\n disabled?: boolean;\n inline?: boolean;\n}\n\nexport const Multiselect = React.forwardRef(function Multiselect(\n {\n value: values = [],\n disabled = false,\n children,\n className,\n onChange,\n inline = false,\n width = '100%',\n minWidth,\n maxWidth,\n ...props\n }: MultiselectProps,\n ref: React.Ref<HTMLButtonElement>\n) {\n const internalSelectRef = useRef<HTMLButtonElement | null>(null);\n const selectRef = useForkRef(ref, internalSelectRef);\n const lastValue = values[values.length - 1] || null;\n const valuesContainerRef = useRef<HTMLDivElement | null>(null);\n const childrenArray = React.Children.toArray(\n children\n ) as React.ReactElement<OptionProps>[];\n\n const availableOptions = makeAvailableOptions(childrenArray, values);\n const valuesAsOptions = makeValuesAsOptions(childrenArray, values);\n\n useLayoutEffect(() => {\n const valuesElement = valuesContainerRef.current;\n const shouldFocus = lastValue != null && valuesElement != null;\n if (shouldFocus) {\n (\n valuesElement.querySelector(`[data-value='${lastValue}']`) as HTMLElement\n )?.focus();\n\n // Safari doesn't respect the first focus if its called too quickly\n requestAnimationFrame(() => {\n internalSelectRef.current && internalSelectRef.current.focus();\n });\n }\n }, [lastValue]);\n\n function addValue(value: string) {\n if (!values.includes(value)) {\n onChange && onChange([...values, value]);\n }\n }\n\n function removeValue(option: React.ReactElement<OptionProps>) {\n const index = values.indexOf(option.props.value);\n\n if (index > -1) {\n const newValues = values.filter(v => v !== option.props.value);\n onChange && onChange(newValues);\n }\n }\n\n if (inline) {\n return (\n <>\n <Select\n ref={selectRef}\n disabled={disabled}\n onChange={addValue}\n width=\"auto\"\n value={null}\n placeholder=\"Select to Add\"\n {...props}\n >\n {availableOptions}\n </Select>\n <Spacer width=\"8px\" />\n <MultiselectInlineValues\n values={valuesAsOptions}\n onRemove={removeValue}\n disabled={disabled}\n />\n </>\n );\n }\n\n return (\n <VStack\n width={width}\n minWidth={minWidth}\n maxWidth={maxWidth}\n className={clsx(styles['multiselect-container'], 'tcn-multiselect-container')}\n >\n <Select\n ref={ref}\n disabled={disabled}\n onChange={addValue}\n value={null}\n placeholder=\"Select to Add\"\n width={width}\n minWidth={minWidth}\n maxWidth={maxWidth}\n {...props}\n >\n {availableOptions}\n </Select>\n <MultiselectValues\n disabled={disabled}\n values={valuesAsOptions}\n onRemove={removeValue}\n />\n </VStack>\n );\n});\n"],"names":["Multiselect","React","values","disabled","children","className","onChange","inline","width","minWidth","maxWidth","props","ref","internalSelectRef","useRef","selectRef","useForkRef","lastValue","valuesContainerRef","childrenArray","availableOptions","makeAvailableOptions","valuesAsOptions","makeValuesAsOptions","useLayoutEffect","valuesElement","addValue","value","removeValue","option","newValues","v","jsxs","Fragment","jsx","Select","Spacer","MultiselectInlineValues","VStack","clsx","styles","MultiselectValues"],"mappings":";;;;;;;;;;;;;;;;;;;gFA0BaA,KAAcC,EAAM,WAAW,SAC1C;AAAA,EACE,OAAOC,IAAS,CAAA;AAAA,EAChB,UAAAC,IAAW;AAAA,EACX,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,UAAAC;AAAA,EACA,QAAAC,IAAS;AAAA,EACT,OAAAC,IAAQ;AAAA,EACR,UAAAC;AAAA,EACA,UAAAC;AAAA,EACA,GAAGC;AACL,GACAC,GACA;AACA,QAAMC,IAAoBC,EAAiC,IAAI,GACzDC,IAAYC,EAAWJ,GAAKC,CAAiB,GAC7CI,IAAYf,EAAOA,EAAO,SAAS,CAAC,KAAK,MACzCgB,IAAqBJ,EAA8B,IAAI,GACvDK,IAAgBlB,EAAM,SAAS;AAAA,IACnCG;AAAA,EAAA,GAGIgB,IAAmBC,EAAqBF,GAAejB,CAAM,GAC7DoB,IAAkBC,EAAoBJ,GAAejB,CAAM;AAEjE,EAAAsB,EAAgB,MAAM;AACpB,UAAMC,IAAgBP,EAAmB;AAEzC,IADoBD,KAAa,QAAQQ,KAAiB,SAGtDA,EAAc,cAAc,gBAAgBR,CAAS,IAAI,GACxD,MAAA,GAGH,sBAAsB,MAAM;AAC1B,MAAAJ,EAAkB,WAAWA,EAAkB,QAAQ,MAAA;AAAA,IACzD,CAAC;AAAA,EAEL,GAAG,CAACI,CAAS,CAAC;AAEd,WAASS,EAASC,GAAe;AAC/B,IAAKzB,EAAO,SAASyB,CAAK,KACxBrB,KAAYA,EAAS,CAAC,GAAGJ,GAAQyB,CAAK,CAAC;AAAA,EAE3C;AAEA,WAASC,EAAYC,GAAyC;AAG5D,QAFc3B,EAAO,QAAQ2B,EAAO,MAAM,KAAK,IAEnC,IAAI;AACd,YAAMC,IAAY5B,EAAO,OAAO,OAAK6B,MAAMF,EAAO,MAAM,KAAK;AAC7D,MAAAvB,KAAYA,EAASwB,CAAS;AAAA,IAChC;AAAA,EACF;AAEA,SAAIvB,IAEA,gBAAAyB,EAAAC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,KAAKpB;AAAA,QACL,UAAAZ;AAAA,QACA,UAAUuB;AAAA,QACV,OAAM;AAAA,QACN,OAAO;AAAA,QACP,aAAY;AAAA,QACX,GAAGf;AAAA,QAEH,UAAAS;AAAA,MAAA;AAAA,IAAA;AAAA,IAEH,gBAAAc,EAACE,GAAA,EAAO,OAAM,MAAA,CAAM;AAAA,IACpB,gBAAAF;AAAA,MAACG;AAAA,MAAA;AAAA,QACC,QAAQf;AAAA,QACR,UAAUM;AAAA,QACV,UAAAzB;AAAA,MAAA;AAAA,IAAA;AAAA,EACF,GACF,IAKF,gBAAA6B;AAAA,IAACM;AAAA,IAAA;AAAA,MACC,OAAA9B;AAAA,MACA,UAAAC;AAAA,MACA,UAAAC;AAAA,MACA,WAAW6B,EAAKC,EAAO,uBAAuB,GAAG,2BAA2B;AAAA,MAE5E,UAAA;AAAA,QAAA,gBAAAN;AAAA,UAACC;AAAA,UAAA;AAAA,YACC,KAAAvB;AAAA,YACA,UAAAT;AAAA,YACA,UAAUuB;AAAA,YACV,OAAO;AAAA,YACP,aAAY;AAAA,YACZ,OAAAlB;AAAA,YACA,UAAAC;AAAA,YACA,UAAAC;AAAA,YACC,GAAGC;AAAA,YAEH,UAAAS;AAAA,UAAA;AAAA,QAAA;AAAA,QAEH,gBAAAc;AAAA,UAACO;AAAA,UAAA;AAAA,YACC,UAAAtC;AAAA,YACA,QAAQmB;AAAA,YACR,UAAUM;AAAA,UAAA;AAAA,QAAA;AAAA,MACZ;AAAA,IAAA;AAAA,EAAA;AAGN,CAAC;"}
@@ -8,8 +8,11 @@ import "../../utils/hooks/use_resize_observer.js";
8
8
  import "../../utils/dnd/context.js";
9
9
  import "clsx";
10
10
  import "../../draggable.module-BgelQsuJ.js";
11
- const o = i.createContext(void 0), h = m(o, "PhoneBookContext");
12
- function s({
11
+ import "../../utils/resize/context.js";
12
+ import "../../resizable.module-I6iyBAvM.js";
13
+ import "../../utils/resize/resize_handle.js";
14
+ const o = i.createContext(void 0), v = m(o, "PhoneBookContext");
15
+ function B({
13
16
  children: t,
14
17
  value: r
15
18
  }) {
@@ -17,7 +20,7 @@ function s({
17
20
  }
18
21
  export {
19
22
  o as PhoneBookContext,
20
- s as PhoneBookProvider,
21
- h as usePhoneContext
23
+ B as PhoneBookProvider,
24
+ v as usePhoneContext
22
25
  };
23
26
  //# sourceMappingURL=phone_number_context.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"phone_number_context.js","sources":["../../../src/inputs/phone_number_input/phone_number_context.tsx"],"sourcesContent":["import React from 'react';\nimport { makeContextHook } from '../../utils/index.js';\nimport { OptionProps } from '../options/option.js';\nimport type { CountryCode } from 'libphonenumber-js';\n\nexport interface PhoneContext {\n allowSip: boolean;\n phoneBook: React.ReactElement<OptionProps>[];\n ariaPhoneBookButtonLabel?: string;\n ariaSelectLabel?: string;\n value: string;\n setValue: (value: string) => void;\n setCountry: (country: CountryCode) => void;\n sipAddress: string;\n setSipAddress: (address: string) => void;\n disabled?: boolean;\n focusNumberInput: boolean;\n setFocusNumberInput: (focus: boolean) => void;\n}\n\nexport const PhoneBookContext = React.createContext<PhoneContext | undefined>(undefined);\nexport const usePhoneContext = makeContextHook(PhoneBookContext, 'PhoneBookContext');\n\nexport function PhoneBookProvider({\n children,\n value,\n}: {\n value: PhoneContext;\n children: React.ReactNode;\n}) {\n return <PhoneBookContext.Provider value={value}>{children}</PhoneBookContext.Provider>;\n}\n"],"names":["PhoneBookContext","React","usePhoneContext","makeContextHook","PhoneBookProvider","children","value","jsx"],"mappings":";;;;;;;;;;AAoBO,MAAMA,IAAmBC,EAAM,cAAwC,MAAS,GAC1EC,IAAkBC,EAAgBH,GAAkB,kBAAkB;AAE5E,SAASI,EAAkB;AAAA,EAChC,UAAAC;AAAA,EACA,OAAAC;AACF,GAGG;AACD,SAAO,gBAAAC,EAACP,EAAiB,UAAjB,EAA0B,OAAAM,GAAe,UAAAD,EAAA,CAAS;AAC5D;"}
1
+ {"version":3,"file":"phone_number_context.js","sources":["../../../src/inputs/phone_number_input/phone_number_context.tsx"],"sourcesContent":["import React from 'react';\nimport { makeContextHook } from '../../utils/index.js';\nimport { OptionProps } from '../options/option.js';\nimport type { CountryCode } from 'libphonenumber-js';\n\nexport interface PhoneContext {\n allowSip: boolean;\n phoneBook: React.ReactElement<OptionProps>[];\n ariaPhoneBookButtonLabel?: string;\n ariaSelectLabel?: string;\n value: string;\n setValue: (value: string) => void;\n setCountry: (country: CountryCode) => void;\n sipAddress: string;\n setSipAddress: (address: string) => void;\n disabled?: boolean;\n focusNumberInput: boolean;\n setFocusNumberInput: (focus: boolean) => void;\n}\n\nexport const PhoneBookContext = React.createContext<PhoneContext | undefined>(undefined);\nexport const usePhoneContext = makeContextHook(PhoneBookContext, 'PhoneBookContext');\n\nexport function PhoneBookProvider({\n children,\n value,\n}: {\n value: PhoneContext;\n children: React.ReactNode;\n}) {\n return <PhoneBookContext.Provider value={value}>{children}</PhoneBookContext.Provider>;\n}\n"],"names":["PhoneBookContext","React","usePhoneContext","makeContextHook","PhoneBookProvider","children","value","jsx"],"mappings":";;;;;;;;;;;;;AAoBO,MAAMA,IAAmBC,EAAM,cAAwC,MAAS,GAC1EC,IAAkBC,EAAgBH,GAAkB,kBAAkB;AAE5E,SAASI,EAAkB;AAAA,EAChC,UAAAC;AAAA,EACA,OAAAC;AACF,GAGG;AACD,SAAO,gBAAAC,EAACP,EAAiB,UAAjB,EAA0B,OAAAM,GAAe,UAAAD,EAAA,CAAS;AAC5D;"}
@@ -8,6 +8,9 @@ import "../../utils/hooks/use_resize_observer.js";
8
8
  import "../../utils/dnd/context.js";
9
9
  import { clsx as L } from "clsx";
10
10
  import "../../draggable.module-BgelQsuJ.js";
11
+ import "../../utils/resize/context.js";
12
+ import "../../resizable.module-I6iyBAvM.js";
13
+ import "../../utils/resize/resize_handle.js";
11
14
  import { SuggestionList as Q } from "../suggestions/suggestion_list.js";
12
15
  import "../../actions/button/base_button/base_button.js";
13
16
  import "../../actions/button/button_group/button_group.js";
@@ -18,7 +21,7 @@ import '../../select.css';const X = "_select_aabe288", Y = "_selectedLabel_b92ff
18
21
  function Z(a, t) {
19
22
  return a.find((n) => n.props.value === t);
20
23
  }
21
- const de = F.forwardRef(function({
24
+ const ye = F.forwardRef(function({
22
25
  children: t = [],
23
26
  onKeyDown: n,
24
27
  onKeyUp: f,
@@ -104,6 +107,6 @@ const de = F.forwardRef(function({
104
107
  ] });
105
108
  });
106
109
  export {
107
- de as Select
110
+ ye as Select
108
111
  };
109
112
  //# sourceMappingURL=select.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"select.js","sources":["../../../src/inputs/select/select.tsx"],"sourcesContent":["import { useForkRef } from '../../utils/index.js';\nimport { clsx } from 'clsx';\nimport React, { useRef, useState } from 'react';\nimport { SuggestionList } from '../suggestions/suggestion_list.js';\nimport { OptionProps } from '../options/option.js';\nimport { Button, type ButtonProps } from '../../actions/index.js';\nimport styles from './select.module.css';\n\nfunction findOptionFromValue(options: React.ReactElement<OptionProps>[], value: string) {\n return options.find(option => option.props.value === value);\n}\n\nexport interface SelectProps\n extends Omit<ButtonProps, 'children' | 'onChange' | 'value'> {\n children?: React.ReactElement<OptionProps>[] | React.ReactElement<OptionProps>;\n onChange?: (value: string) => void;\n value?: string | null;\n placeholder?: string;\n noOptionMatchedMessage?: React.ReactNode;\n trimCustomInput?: boolean;\n}\n\nexport const Select = React.forwardRef(function Select(\n {\n children = [],\n onKeyDown,\n onKeyUp,\n value,\n placeholder = '-- Select --',\n noOptionMatchedMessage,\n trimCustomInput = false,\n className,\n onMouseDown,\n onMouseUp,\n onChange,\n ...props\n }: SelectProps,\n ref: React.Ref<HTMLButtonElement>\n) {\n const safeChildren = React.Children.toArray(\n children\n ) as React.ReactElement<OptionProps>[];\n const keyPressedDownRef = useRef('');\n const isAlreadyFocusedRef = useRef(false);\n const isClosingRef = useRef(false);\n const [anchorElement, setAnchorElement] = useState<HTMLButtonElement | null>(null);\n const internalButtonRef = useRef<HTMLButtonElement | null>(null);\n const [isSuggestionsOpen, setIsSuggestionsOpen] = useState(false);\n const forkedRef = useForkRef(ref, internalButtonRef);\n const selectedOption = findOptionFromValue(safeChildren, value || '');\n const selectedLabel =\n selectedOption == null ? placeholder || '' : selectedOption.props.label;\n\n function openSuggestions() {\n setIsSuggestionsOpen(true);\n }\n\n function closeSuggestions() {\n setIsSuggestionsOpen(false);\n }\n\n function handleClose() {\n const button = internalButtonRef.current;\n\n if (button != null) {\n requestAnimationFrame(() => {\n button.focus();\n });\n }\n\n closeSuggestions();\n }\n\n function handleSelection(value: string, _: string | undefined, isSuggestion: boolean) {\n const button = internalButtonRef.current;\n\n if (button != null) {\n requestAnimationFrame(() => {\n if (isSuggestion) {\n onChange && onChange(value);\n }\n button.focus();\n });\n }\n\n closeSuggestions();\n }\n\n function handleKeyDown(event: React.KeyboardEvent<HTMLButtonElement>) {\n const key = event.key;\n keyPressedDownRef.current = key;\n onKeyDown && onKeyDown(event);\n }\n\n function handleKeyUp(event: React.KeyboardEvent<HTMLButtonElement>) {\n setAnchorElement(event.currentTarget);\n const isSameKey = (keyPressedDownRef.current = event.key);\n\n keyPressedDownRef.current = '';\n const key = event.key;\n\n if (isSameKey && (key === 'Enter' || key === ' ')) {\n if (isSuggestionsOpen) {\n closeSuggestions();\n } else {\n openSuggestions();\n }\n }\n\n onKeyUp && onKeyUp(event);\n }\n\n function handlMouseDown(event: React.MouseEvent<HTMLButtonElement>) {\n setAnchorElement(event.currentTarget);\n isAlreadyFocusedRef.current = document.activeElement === event.currentTarget;\n onMouseDown && onMouseDown(event);\n }\n\n function handleMouseUp(event: React.MouseEvent<HTMLButtonElement>) {\n if (isClosingRef.current) {\n isClosingRef.current = false;\n closeSuggestions();\n }\n\n openSuggestions();\n onMouseUp && onMouseUp(event);\n }\n\n return (\n <>\n <Button\n ref={forkedRef}\n className={clsx(className, 'tcn-select', 'tcn-entry', styles.select)}\n width=\"100%\"\n {...props}\n hAlign=\"start\"\n value={selectedLabel}\n onKeyDown={handleKeyDown}\n onKeyUp={handleKeyUp}\n onMouseDown={handlMouseDown}\n onMouseUp={handleMouseUp}\n >\n <span className={clsx(styles.selectedLabel, 'tcn-select-selected-label')}>\n {selectedLabel}\n </span>\n </Button>\n <SuggestionList\n open={isSuggestionsOpen}\n anchorElement={anchorElement}\n onClose={handleClose}\n value={''}\n scrollToValue={value || ''}\n trimCustomInput={trimCustomInput}\n onOptionSelect={handleSelection}\n noSuggestionMessage={noOptionMatchedMessage}\n >\n {children}\n </SuggestionList>\n </>\n );\n});\n"],"names":["findOptionFromValue","options","value","option","Select","React","children","onKeyDown","onKeyUp","placeholder","noOptionMatchedMessage","trimCustomInput","className","onMouseDown","onMouseUp","onChange","props","ref","safeChildren","keyPressedDownRef","useRef","isAlreadyFocusedRef","isClosingRef","anchorElement","setAnchorElement","useState","internalButtonRef","isSuggestionsOpen","setIsSuggestionsOpen","forkedRef","useForkRef","selectedOption","selectedLabel","openSuggestions","closeSuggestions","handleClose","button","handleSelection","_","isSuggestion","handleKeyDown","event","key","handleKeyUp","isSameKey","handlMouseDown","handleMouseUp","jsxs","Fragment","jsx","Button","clsx","styles","SuggestionList"],"mappings":"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"}
1
+ {"version":3,"file":"select.js","sources":["../../../src/inputs/select/select.tsx"],"sourcesContent":["import { useForkRef } from '../../utils/index.js';\nimport { clsx } from 'clsx';\nimport React, { useRef, useState } from 'react';\nimport { SuggestionList } from '../suggestions/suggestion_list.js';\nimport { OptionProps } from '../options/option.js';\nimport { Button, type ButtonProps } from '../../actions/index.js';\nimport styles from './select.module.css';\n\nfunction findOptionFromValue(options: React.ReactElement<OptionProps>[], value: string) {\n return options.find(option => option.props.value === value);\n}\n\nexport interface SelectProps\n extends Omit<ButtonProps, 'children' | 'onChange' | 'value'> {\n children?: React.ReactElement<OptionProps>[] | React.ReactElement<OptionProps>;\n onChange?: (value: string) => void;\n value?: string | null;\n placeholder?: string;\n noOptionMatchedMessage?: React.ReactNode;\n trimCustomInput?: boolean;\n}\n\nexport const Select = React.forwardRef(function Select(\n {\n children = [],\n onKeyDown,\n onKeyUp,\n value,\n placeholder = '-- Select --',\n noOptionMatchedMessage,\n trimCustomInput = false,\n className,\n onMouseDown,\n onMouseUp,\n onChange,\n ...props\n }: SelectProps,\n ref: React.Ref<HTMLButtonElement>\n) {\n const safeChildren = React.Children.toArray(\n children\n ) as React.ReactElement<OptionProps>[];\n const keyPressedDownRef = useRef('');\n const isAlreadyFocusedRef = useRef(false);\n const isClosingRef = useRef(false);\n const [anchorElement, setAnchorElement] = useState<HTMLButtonElement | null>(null);\n const internalButtonRef = useRef<HTMLButtonElement | null>(null);\n const [isSuggestionsOpen, setIsSuggestionsOpen] = useState(false);\n const forkedRef = useForkRef(ref, internalButtonRef);\n const selectedOption = findOptionFromValue(safeChildren, value || '');\n const selectedLabel =\n selectedOption == null ? placeholder || '' : selectedOption.props.label;\n\n function openSuggestions() {\n setIsSuggestionsOpen(true);\n }\n\n function closeSuggestions() {\n setIsSuggestionsOpen(false);\n }\n\n function handleClose() {\n const button = internalButtonRef.current;\n\n if (button != null) {\n requestAnimationFrame(() => {\n button.focus();\n });\n }\n\n closeSuggestions();\n }\n\n function handleSelection(value: string, _: string | undefined, isSuggestion: boolean) {\n const button = internalButtonRef.current;\n\n if (button != null) {\n requestAnimationFrame(() => {\n if (isSuggestion) {\n onChange && onChange(value);\n }\n button.focus();\n });\n }\n\n closeSuggestions();\n }\n\n function handleKeyDown(event: React.KeyboardEvent<HTMLButtonElement>) {\n const key = event.key;\n keyPressedDownRef.current = key;\n onKeyDown && onKeyDown(event);\n }\n\n function handleKeyUp(event: React.KeyboardEvent<HTMLButtonElement>) {\n setAnchorElement(event.currentTarget);\n const isSameKey = (keyPressedDownRef.current = event.key);\n\n keyPressedDownRef.current = '';\n const key = event.key;\n\n if (isSameKey && (key === 'Enter' || key === ' ')) {\n if (isSuggestionsOpen) {\n closeSuggestions();\n } else {\n openSuggestions();\n }\n }\n\n onKeyUp && onKeyUp(event);\n }\n\n function handlMouseDown(event: React.MouseEvent<HTMLButtonElement>) {\n setAnchorElement(event.currentTarget);\n isAlreadyFocusedRef.current = document.activeElement === event.currentTarget;\n onMouseDown && onMouseDown(event);\n }\n\n function handleMouseUp(event: React.MouseEvent<HTMLButtonElement>) {\n if (isClosingRef.current) {\n isClosingRef.current = false;\n closeSuggestions();\n }\n\n openSuggestions();\n onMouseUp && onMouseUp(event);\n }\n\n return (\n <>\n <Button\n ref={forkedRef}\n className={clsx(className, 'tcn-select', 'tcn-entry', styles.select)}\n width=\"100%\"\n {...props}\n hAlign=\"start\"\n value={selectedLabel}\n onKeyDown={handleKeyDown}\n onKeyUp={handleKeyUp}\n onMouseDown={handlMouseDown}\n onMouseUp={handleMouseUp}\n >\n <span className={clsx(styles.selectedLabel, 'tcn-select-selected-label')}>\n {selectedLabel}\n </span>\n </Button>\n <SuggestionList\n open={isSuggestionsOpen}\n anchorElement={anchorElement}\n onClose={handleClose}\n value={''}\n scrollToValue={value || ''}\n trimCustomInput={trimCustomInput}\n onOptionSelect={handleSelection}\n noSuggestionMessage={noOptionMatchedMessage}\n >\n {children}\n </SuggestionList>\n </>\n );\n});\n"],"names":["findOptionFromValue","options","value","option","Select","React","children","onKeyDown","onKeyUp","placeholder","noOptionMatchedMessage","trimCustomInput","className","onMouseDown","onMouseUp","onChange","props","ref","safeChildren","keyPressedDownRef","useRef","isAlreadyFocusedRef","isClosingRef","anchorElement","setAnchorElement","useState","internalButtonRef","isSuggestionsOpen","setIsSuggestionsOpen","forkedRef","useForkRef","selectedOption","selectedLabel","openSuggestions","closeSuggestions","handleClose","button","handleSelection","_","isSuggestion","handleKeyDown","event","key","handleKeyUp","isSameKey","handlMouseDown","handleMouseUp","jsxs","Fragment","jsx","Button","clsx","styles","SuggestionList"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { jsx as p } from "react/jsx-runtime";
1
+ import { jsx as f } from "react/jsx-runtime";
2
2
  import { clsx as m } from "clsx";
3
3
  import g, { useRef as v, useLayoutEffect as y } from "react";
4
4
  import "../../utils/click_away_listener.js";
@@ -8,37 +8,40 @@ import { useForkRef as R } from "../../utils/hooks/use_fork_ref.js";
8
8
  import "../../utils/hooks/use_resize_observer.js";
9
9
  import "../../utils/dnd/context.js";
10
10
  import "../../draggable.module-BgelQsuJ.js";
11
- import '../../slider.css';const S = "_slider_eb84151", _ = { slider: S }, $ = g.forwardRef(function({ style: l, className: a, width: u, min: t = 0, max: r = 100, onChange: o, ...n }, c) {
12
- const i = v(null), d = R(c, i);
11
+ import "../../utils/resize/context.js";
12
+ import "../../resizable.module-I6iyBAvM.js";
13
+ import "../../utils/resize/resize_handle.js";
14
+ import '../../slider.css';const S = "_slider_eb84151", _ = { slider: S }, A = g.forwardRef(function({ style: l, className: a, width: p, min: t = 0, max: r = 100, onChange: s, ...i }, u) {
15
+ const n = v(null), c = R(u, n);
13
16
  return y(() => {
14
- const e = i.current;
17
+ const e = n.current;
15
18
  if (e == null) return;
16
- const s = () => {
17
- const f = (parseFloat(e.value) - t) / (r - t) * 100;
18
- e.style.setProperty("--progress", `${f}%`);
19
+ const o = () => {
20
+ const d = (parseFloat(e.value) - t) / (r - t) * 100;
21
+ e.style.setProperty("--progress", `${d}%`);
19
22
  };
20
- return e.addEventListener("input", s), s(), () => {
21
- e.removeEventListener("input", s);
23
+ return e.addEventListener("input", o), o(), () => {
24
+ e.removeEventListener("input", o);
22
25
  };
23
- }, [t, r]), /* @__PURE__ */ p(
26
+ }, [t, r]), /* @__PURE__ */ f(
24
27
  "input",
25
28
  {
26
29
  type: "range",
27
30
  className: m(a, _.slider, "tcn-slider"),
28
- "data-is-disabled": n.disabled || !1,
29
- ref: d,
31
+ "data-is-disabled": i.disabled || !1,
32
+ ref: c,
30
33
  onChange: (e) => {
31
- o && o(e.currentTarget.value, e);
34
+ s && s(e.currentTarget.value, e);
32
35
  },
33
- ...n,
36
+ ...i,
34
37
  min: String(t),
35
38
  max: String(r),
36
39
  "data-width": "100%",
37
- style: { width: u, ...l }
40
+ style: { width: p, ...l }
38
41
  }
39
42
  );
40
43
  });
41
44
  export {
42
- $ as Slider
45
+ A as Slider
43
46
  };
44
47
  //# sourceMappingURL=slider.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"slider.js","sources":["../../../src/inputs/slider/slider.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport React, { useLayoutEffect, useRef } from 'react';\nimport { HTMLAttributes } from 'react';\nimport styles from './slider.module.css';\nimport { useForkRef } from '../../utils/index.js';\n\nexport interface SliderProps extends Omit<HTMLAttributes<HTMLInputElement>, 'onChange'> {\n width?: string;\n disabled?: boolean;\n min?: number;\n max?: number;\n value?: string;\n list?: string;\n onChange?: (value: string, event: React.ChangeEvent<HTMLInputElement>) => void;\n}\n\nexport const Slider = React.forwardRef(function Slider(\n { style, className, width, min = 0, max = 100, onChange, ...props }: SliderProps,\n ref: React.Ref<HTMLInputElement>\n) {\n const localRef = useRef<HTMLInputElement>(null);\n const forkedRef = useForkRef(ref, localRef);\n\n useLayoutEffect(() => {\n const range = localRef.current;\n if (range == null) return;\n const updateProgress = () => {\n const value = parseFloat(range.value);\n const percent = ((value - min) / (max - min)) * 100;\n range.style.setProperty('--progress', `${percent}%`);\n };\n\n range.addEventListener('input', updateProgress);\n updateProgress();\n\n return () => {\n range.removeEventListener('input', updateProgress);\n };\n }, [min, max]);\n\n return (\n <input\n type=\"range\"\n className={clsx(className, styles.slider, 'tcn-slider')}\n data-is-disabled={props.disabled || false}\n ref={forkedRef}\n onChange={e => {\n onChange && onChange(e.currentTarget.value, e);\n }}\n {...props}\n min={String(min)}\n max={String(max)}\n data-width=\"100%\"\n style={{ width, ...style }}\n />\n );\n});\n"],"names":["Slider","React","style","className","width","min","max","onChange","props","ref","localRef","useRef","forkedRef","useForkRef","useLayoutEffect","range","updateProgress","percent","jsx","clsx","styles"],"mappings":";;;;;;;;;;gDAgBaA,IAASC,EAAM,WAAW,SACrC,EAAE,OAAAC,GAAO,WAAAC,GAAW,OAAAC,GAAO,KAAAC,IAAM,GAAG,KAAAC,IAAM,KAAK,UAAAC,GAAU,GAAGC,EAAA,GAC5DC,GACA;AACA,QAAMC,IAAWC,EAAyB,IAAI,GACxCC,IAAYC,EAAWJ,GAAKC,CAAQ;AAE1C,SAAAI,EAAgB,MAAM;AACpB,UAAMC,IAAQL,EAAS;AACvB,QAAIK,KAAS,KAAM;AACnB,UAAMC,IAAiB,MAAM;AAE3B,YAAMC,KADQ,WAAWF,EAAM,KAAK,IACVV,MAAQC,IAAMD,KAAQ;AAChD,MAAAU,EAAM,MAAM,YAAY,cAAc,GAAGE,CAAO,GAAG;AAAA,IACrD;AAEA,WAAAF,EAAM,iBAAiB,SAASC,CAAc,GAC9CA,EAAA,GAEO,MAAM;AACX,MAAAD,EAAM,oBAAoB,SAASC,CAAc;AAAA,IACnD;AAAA,EACF,GAAG,CAACX,GAAKC,CAAG,CAAC,GAGX,gBAAAY;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAWC,EAAKhB,GAAWiB,EAAO,QAAQ,YAAY;AAAA,MACtD,oBAAkBZ,EAAM,YAAY;AAAA,MACpC,KAAKI;AAAA,MACL,UAAU,CAAA,MAAK;AACb,QAAAL,KAAYA,EAAS,EAAE,cAAc,OAAO,CAAC;AAAA,MAC/C;AAAA,MACC,GAAGC;AAAA,MACJ,KAAK,OAAOH,CAAG;AAAA,MACf,KAAK,OAAOC,CAAG;AAAA,MACf,cAAW;AAAA,MACX,OAAO,EAAE,OAAAF,GAAO,GAAGF,EAAA;AAAA,IAAM;AAAA,EAAA;AAG/B,CAAC;"}
1
+ {"version":3,"file":"slider.js","sources":["../../../src/inputs/slider/slider.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport React, { useLayoutEffect, useRef } from 'react';\nimport { HTMLAttributes } from 'react';\nimport styles from './slider.module.css';\nimport { useForkRef } from '../../utils/index.js';\n\nexport interface SliderProps extends Omit<HTMLAttributes<HTMLInputElement>, 'onChange'> {\n width?: string;\n disabled?: boolean;\n min?: number;\n max?: number;\n value?: string;\n list?: string;\n onChange?: (value: string, event: React.ChangeEvent<HTMLInputElement>) => void;\n}\n\nexport const Slider = React.forwardRef(function Slider(\n { style, className, width, min = 0, max = 100, onChange, ...props }: SliderProps,\n ref: React.Ref<HTMLInputElement>\n) {\n const localRef = useRef<HTMLInputElement>(null);\n const forkedRef = useForkRef(ref, localRef);\n\n useLayoutEffect(() => {\n const range = localRef.current;\n if (range == null) return;\n const updateProgress = () => {\n const value = parseFloat(range.value);\n const percent = ((value - min) / (max - min)) * 100;\n range.style.setProperty('--progress', `${percent}%`);\n };\n\n range.addEventListener('input', updateProgress);\n updateProgress();\n\n return () => {\n range.removeEventListener('input', updateProgress);\n };\n }, [min, max]);\n\n return (\n <input\n type=\"range\"\n className={clsx(className, styles.slider, 'tcn-slider')}\n data-is-disabled={props.disabled || false}\n ref={forkedRef}\n onChange={e => {\n onChange && onChange(e.currentTarget.value, e);\n }}\n {...props}\n min={String(min)}\n max={String(max)}\n data-width=\"100%\"\n style={{ width, ...style }}\n />\n );\n});\n"],"names":["Slider","React","style","className","width","min","max","onChange","props","ref","localRef","useRef","forkedRef","useForkRef","useLayoutEffect","range","updateProgress","percent","jsx","clsx","styles"],"mappings":";;;;;;;;;;;;;gDAgBaA,IAASC,EAAM,WAAW,SACrC,EAAE,OAAAC,GAAO,WAAAC,GAAW,OAAAC,GAAO,KAAAC,IAAM,GAAG,KAAAC,IAAM,KAAK,UAAAC,GAAU,GAAGC,EAAA,GAC5DC,GACA;AACA,QAAMC,IAAWC,EAAyB,IAAI,GACxCC,IAAYC,EAAWJ,GAAKC,CAAQ;AAE1C,SAAAI,EAAgB,MAAM;AACpB,UAAMC,IAAQL,EAAS;AACvB,QAAIK,KAAS,KAAM;AACnB,UAAMC,IAAiB,MAAM;AAE3B,YAAMC,KADQ,WAAWF,EAAM,KAAK,IACVV,MAAQC,IAAMD,KAAQ;AAChD,MAAAU,EAAM,MAAM,YAAY,cAAc,GAAGE,CAAO,GAAG;AAAA,IACrD;AAEA,WAAAF,EAAM,iBAAiB,SAASC,CAAc,GAC9CA,EAAA,GAEO,MAAM;AACX,MAAAD,EAAM,oBAAoB,SAASC,CAAc;AAAA,IACnD;AAAA,EACF,GAAG,CAACX,GAAKC,CAAG,CAAC,GAGX,gBAAAY;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,WAAWC,EAAKhB,GAAWiB,EAAO,QAAQ,YAAY;AAAA,MACtD,oBAAkBZ,EAAM,YAAY;AAAA,MACpC,KAAKI;AAAA,MACL,UAAU,CAAA,MAAK;AACb,QAAAL,KAAYA,EAAS,EAAE,cAAc,OAAO,CAAC;AAAA,MAC/C;AAAA,MACC,GAAGC;AAAA,MACJ,KAAK,OAAOH,CAAG;AAAA,MACf,KAAK,OAAOC,CAAG;AAAA,MACf,cAAW;AAAA,MACX,OAAO,EAAE,OAAAF,GAAO,GAAGF,EAAA;AAAA,IAAM;AAAA,EAAA;AAG/B,CAAC;"}
@@ -16,6 +16,9 @@ import "../../utils/scroll_away_listener.js";
16
16
  import "../../utils/hooks/use_resize_observer.js";
17
17
  import "../../utils/dnd/context.js";
18
18
  import "../../draggable.module-BgelQsuJ.js";
19
+ import "../../utils/resize/context.js";
20
+ import "../../resizable.module-I6iyBAvM.js";
21
+ import "../../utils/resize/resize_handle.js";
19
22
  import { SuggestionItem as Ce } from "./suggestion_item.js";
20
23
  import { Option as Z } from "../options/option.js";
21
24
  import "../../actions/button/base_button/base_button.js";
@@ -25,7 +28,7 @@ import { Button as Re } from "../../actions/button/button/button.js";
25
28
  import "../../actions/toggle/toggle.js";
26
29
  import { Popper as ve } from "../../overlay/popper/legacy/popper.js";
27
30
  import '../../suggestion_list.css';const _e = "_suggestion-list_711fb17", Ae = "_input_a0df060", B = { "suggestion-list": _e, input: Ae }, C = 50, De = 50;
28
- function ot({
31
+ function lt({
29
32
  value: X = "",
30
33
  initialSearchValue: K,
31
34
  scrollToValue: w,
@@ -290,6 +293,6 @@ function ot({
290
293
  );
291
294
  }
292
295
  export {
293
- ot as SuggestionList
296
+ lt as SuggestionList
294
297
  };
295
298
  //# sourceMappingURL=suggestion_list.js.map