@tcn/ui 0.12.4 → 0.12.6

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 (150) hide show
  1. package/dist/inputs/color_input/color_input.js +18 -18
  2. package/dist/inputs/color_input/color_input.js.map +1 -1
  3. package/dist/inputs/control/control.d.ts +10 -0
  4. package/dist/inputs/control/control.d.ts.map +1 -0
  5. package/dist/inputs/control/control.js +17 -0
  6. package/dist/inputs/control/control.js.map +1 -0
  7. package/dist/inputs/control_set/control_set.d.ts +5 -0
  8. package/dist/inputs/control_set/control_set.d.ts.map +1 -0
  9. package/dist/inputs/control_set/control_set.js +20 -0
  10. package/dist/inputs/{input_group/input_group.js.map → control_set/control_set.js.map} +1 -1
  11. package/dist/inputs/date_picker/date_picker_input.js +20 -20
  12. package/dist/inputs/date_picker/date_picker_input.js.map +1 -1
  13. package/dist/inputs/index.d.ts +2 -1
  14. package/dist/inputs/index.d.ts.map +1 -1
  15. package/dist/inputs/index.js +27 -24
  16. package/dist/inputs/index.js.map +1 -1
  17. package/dist/inputs/input/input.js +6 -6
  18. package/dist/inputs/input/input.js.map +1 -1
  19. package/dist/inputs/phone_number_input/phone_number_country_select_adapter.js +15 -15
  20. package/dist/inputs/phone_number_input/phone_number_country_select_adapter.js.map +1 -1
  21. package/dist/inputs/phone_number_input/phone_number_input.js +24 -24
  22. package/dist/inputs/phone_number_input/phone_number_input.js.map +1 -1
  23. package/dist/inputs/phone_number_input/phone_number_input_adapter.js +21 -21
  24. package/dist/inputs/phone_number_input/phone_number_input_adapter.js.map +1 -1
  25. package/dist/inputs/phone_number_input/sip_input.js +14 -14
  26. package/dist/inputs/phone_number_input/sip_input.js.map +1 -1
  27. package/dist/inputs/select/select.js +6 -6
  28. package/dist/inputs/select/select.js.map +1 -1
  29. package/dist/inputs/textarea/textarea.js +8 -8
  30. package/dist/inputs/textarea/textarea.js.map +1 -1
  31. package/dist/inputs/unit_input/unit_input.js +20 -20
  32. package/dist/inputs/unit_input/unit_input.js.map +1 -1
  33. package/dist/overlay/frame/frame.d.ts +2 -2
  34. package/dist/overlay/frame/frame.d.ts.map +1 -1
  35. package/dist/overlay/frame/frame.js +68 -66
  36. package/dist/overlay/frame/frame.js.map +1 -1
  37. package/dist/overlay/slide/slide.d.ts +9 -0
  38. package/dist/overlay/slide/slide.d.ts.map +1 -0
  39. package/dist/overlay/slide/slide.js +29 -0
  40. package/dist/overlay/slide/slide.js.map +1 -0
  41. package/dist/slide.css +1 -0
  42. package/dist/stacks/box/box.d.ts +5 -4
  43. package/dist/stacks/box/box.d.ts.map +1 -1
  44. package/dist/stacks/box/box.js.map +1 -1
  45. package/dist/stacks/box/detect_resize_bounds.d.ts +15 -0
  46. package/dist/stacks/box/detect_resize_bounds.d.ts.map +1 -0
  47. package/dist/stacks/box/detect_resize_bounds.js +49 -0
  48. package/dist/stacks/box/detect_resize_bounds.js.map +1 -0
  49. package/dist/stacks/box/resize_handlers.d.ts.map +1 -1
  50. package/dist/stacks/box/resize_handlers.js +51 -44
  51. package/dist/stacks/box/resize_handlers.js.map +1 -1
  52. package/dist/stacks/box/start_resize_handle.d.ts.map +1 -1
  53. package/dist/stacks/box/start_resize_handle.js +2 -1
  54. package/dist/stacks/box/start_resize_handle.js.map +1 -1
  55. package/dist/stacks/box/types.d.ts +17 -4
  56. package/dist/stacks/box/types.d.ts.map +1 -1
  57. package/dist/surfaces/drawers/drawer.d.ts +5 -0
  58. package/dist/surfaces/drawers/drawer.d.ts.map +1 -0
  59. package/dist/surfaces/drawers/drawer.js +23 -0
  60. package/dist/surfaces/drawers/drawer.js.map +1 -0
  61. package/dist/surfaces/index.d.ts +1 -4
  62. package/dist/surfaces/index.d.ts.map +1 -1
  63. package/dist/surfaces/index.js +20 -26
  64. package/dist/surfaces/index.js.map +1 -1
  65. package/dist/surfaces/modal/modal.d.ts +1 -1
  66. package/dist/surfaces/modal/modal.d.ts.map +1 -1
  67. package/dist/surfaces/modal/modal.js +22 -13
  68. package/dist/surfaces/modal/modal.js.map +1 -1
  69. package/dist/surfaces/window/window.d.ts +1 -1
  70. package/dist/surfaces/window/window.d.ts.map +1 -1
  71. package/dist/surfaces/window/window.js +21 -24
  72. package/dist/surfaces/window/window.js.map +1 -1
  73. package/dist/themes/stylesheets/reset.css +1 -1
  74. package/dist/themes/stylesheets/reset.js +2 -2
  75. package/dist/themes/stylesheets/reset.js.map +1 -1
  76. package/dist/themes/themes/ergo/ergo_theme.css +1 -1
  77. package/dist/themes/themes/ergo/ergo_theme.js +70 -6
  78. package/dist/themes/themes/ergo/ergo_theme.js.map +1 -1
  79. package/dist/utils/dnd/hooks/use_drag_container.d.ts.map +1 -1
  80. package/dist/utils/dnd/hooks/use_drag_container.js.map +1 -1
  81. package/package.json +2 -2
  82. package/src/inputs/color_input/color_input.tsx +3 -3
  83. package/src/inputs/control/control.stories.tsx +158 -0
  84. package/src/inputs/control/control.tsx +32 -0
  85. package/src/inputs/control/control_stories.module.css +7 -0
  86. package/src/inputs/control_set/control_set.stories.tsx +46 -0
  87. package/src/inputs/{input_group/input_group.tsx → control_set/control_set.tsx} +5 -5
  88. package/src/inputs/date_picker/date_picker_input.stories.tsx +1 -1
  89. package/src/inputs/date_picker/date_picker_input.tsx +1 -1
  90. package/src/inputs/index.ts +2 -1
  91. package/src/inputs/input/input.tsx +1 -1
  92. package/src/inputs/phone_number_input/phone_number_country_select_adapter.tsx +1 -1
  93. package/src/inputs/phone_number_input/phone_number_input.tsx +1 -1
  94. package/src/inputs/phone_number_input/phone_number_input_adapter.tsx +2 -2
  95. package/src/inputs/phone_number_input/sip_input.tsx +4 -4
  96. package/src/inputs/select/select.tsx +1 -1
  97. package/src/inputs/textarea/textarea.stories.tsx +1 -1
  98. package/src/inputs/textarea/textarea.tsx +1 -1
  99. package/src/inputs/unit_input/unit_input.tsx +3 -3
  100. package/src/overlay/frame/frame.tsx +43 -63
  101. package/src/overlay/slide/slide.module.css +30 -0
  102. package/src/overlay/slide/slide.stories.tsx +58 -0
  103. package/src/overlay/slide/slide.tsx +51 -0
  104. package/src/stacks/box/box.tsx +10 -16
  105. package/src/stacks/box/detect_resize_bounds.ts +84 -0
  106. package/src/stacks/box/resize_handlers.ts +27 -15
  107. package/src/stacks/box/start_resize_handle.tsx +6 -3
  108. package/src/stacks/box/types.ts +23 -25
  109. package/src/surfaces/drawers/drawer.stories.tsx +130 -0
  110. package/src/surfaces/drawers/drawer.tsx +26 -0
  111. package/src/surfaces/index.ts +1 -4
  112. package/src/surfaces/modal/__stories__/modal.stories.tsx +70 -3
  113. package/src/surfaces/modal/modal.tsx +11 -2
  114. package/src/surfaces/window/window.stories.tsx +64 -8
  115. package/src/surfaces/window/window.tsx +6 -9
  116. package/src/themes/stylesheets/reset.css +2 -2
  117. package/src/themes/themes/ergo/ergo_theme.css +70 -6
  118. package/src/utils/dnd/hooks/use_drag_container.ts +0 -7
  119. package/dist/drawer_bottom.css +0 -1
  120. package/dist/drawer_end.css +0 -1
  121. package/dist/drawer_start.css +0 -1
  122. package/dist/drawer_top.css +0 -1
  123. package/dist/inputs/input_group/input_group.d.ts +0 -5
  124. package/dist/inputs/input_group/input_group.d.ts.map +0 -1
  125. package/dist/inputs/input_group/input_group.js +0 -20
  126. package/dist/surfaces/drawers/drawer_bottom/drawer_bottom.d.ts +0 -7
  127. package/dist/surfaces/drawers/drawer_bottom/drawer_bottom.d.ts.map +0 -1
  128. package/dist/surfaces/drawers/drawer_bottom/drawer_bottom.js +0 -22
  129. package/dist/surfaces/drawers/drawer_bottom/drawer_bottom.js.map +0 -1
  130. package/dist/surfaces/drawers/drawer_end/drawer_end.d.ts +0 -7
  131. package/dist/surfaces/drawers/drawer_end/drawer_end.d.ts.map +0 -1
  132. package/dist/surfaces/drawers/drawer_end/drawer_end.js +0 -20
  133. package/dist/surfaces/drawers/drawer_end/drawer_end.js.map +0 -1
  134. package/dist/surfaces/drawers/drawer_start/drawer_start.d.ts +0 -7
  135. package/dist/surfaces/drawers/drawer_start/drawer_start.d.ts.map +0 -1
  136. package/dist/surfaces/drawers/drawer_start/drawer_start.js +0 -22
  137. package/dist/surfaces/drawers/drawer_start/drawer_start.js.map +0 -1
  138. package/dist/surfaces/drawers/drawer_top/drawer_top.d.ts +0 -7
  139. package/dist/surfaces/drawers/drawer_top/drawer_top.d.ts.map +0 -1
  140. package/dist/surfaces/drawers/drawer_top/drawer_top.js +0 -20
  141. package/dist/surfaces/drawers/drawer_top/drawer_top.js.map +0 -1
  142. package/src/surfaces/drawers/__stories__/drawers.stories.tsx +0 -26
  143. package/src/surfaces/drawers/drawer_bottom/drawer_bottom.module.css +0 -5
  144. package/src/surfaces/drawers/drawer_bottom/drawer_bottom.tsx +0 -23
  145. package/src/surfaces/drawers/drawer_end/drawer_end.module.css +0 -5
  146. package/src/surfaces/drawers/drawer_end/drawer_end.tsx +0 -24
  147. package/src/surfaces/drawers/drawer_start/drawer_start.module.css +0 -5
  148. package/src/surfaces/drawers/drawer_start/drawer_start.tsx +0 -23
  149. package/src/surfaces/drawers/drawer_top/drawer_top.module.css +0 -5
  150. package/src/surfaces/drawers/drawer_top/drawer_top.tsx +0 -24
@@ -1,13 +1,13 @@
1
1
  import { jsx as a } from "react/jsx-runtime";
2
2
  import b from "react";
3
- import { Select as g } from "../select/select.js";
3
+ import { Select as I } from "../select/select.js";
4
4
  import { Option as d } from "../options/option.js";
5
- import I from "clsx";
6
- import { countriesPhoneInformation as P } from "./countries_phone_information.js";
5
+ import P from "clsx";
6
+ import { countriesPhoneInformation as g } from "./countries_phone_information.js";
7
7
  import { usePhoneContext as v } from "./phone_number_context.js";
8
- const n = /* @__PURE__ */ new Map(), u = /* @__PURE__ */ new Map();
9
- P.forEach((r) => {
10
- u.set(r.code, r), n.has(r.prefix) ? n.get(r.prefix)?.push(r) : n.set(r.prefix, [r]);
8
+ const n = /* @__PURE__ */ new Map(), f = /* @__PURE__ */ new Map();
9
+ g.forEach((r) => {
10
+ f.set(r.code, r), n.has(r.prefix) ? n.get(r.prefix)?.push(r) : n.set(r.prefix, [r]);
11
11
  });
12
12
  function F(r) {
13
13
  for (let t = 5; t > 1; t--) {
@@ -18,7 +18,7 @@ function F(r) {
18
18
  return i;
19
19
  }
20
20
  }
21
- return u.get("US");
21
+ return f.get("US");
22
22
  }
23
23
  function U({
24
24
  value: r,
@@ -29,21 +29,21 @@ function U({
29
29
  "aria-label": l
30
30
  }) {
31
31
  const {
32
- setValue: p,
33
- sipAddress: f,
32
+ setValue: u,
33
+ sipAddress: p,
34
34
  allowSip: h,
35
35
  value: x,
36
36
  setFocusNumberInput: c
37
37
  } = v(), S = b.useCallback(
38
38
  (e) => {
39
39
  if (e === "SIP") {
40
- p(`sip:${f}`), c(!0);
40
+ u(`sip:${p}`), c(!0);
41
41
  return;
42
42
  }
43
43
  t(e === "ZZ" ? void 0 : e);
44
44
  },
45
- [t, f, p, c]
46
- ), m = s.filter((e) => !e.divider).map((e) => u.get(e.value || "ZZ")).filter((e) => e != null).sort((e, Z) => e.code === "US" ? -1 : Number(e.prefix) - Number(Z.prefix)).map((e) => /* @__PURE__ */ a(
45
+ [t, p, u, c]
46
+ ), m = s.filter((e) => !e.divider).map((e) => f.get(e.value || "ZZ")).filter((e) => e != null).sort((e, Z) => e.code === "US" ? -1 : Number(e.prefix) - Number(Z.prefix)).map((e) => /* @__PURE__ */ a(
47
47
  d,
48
48
  {
49
49
  value: e?.code || "ZZ",
@@ -56,13 +56,13 @@ function U({
56
56
  return (h || x?.startsWith("sip:")) && m.unshift(
57
57
  /* @__PURE__ */ a(d, { value: "SIP", label: "sip:", keywords: ["sip"], children: "SIP" }, "SIP")
58
58
  ), /* @__PURE__ */ a(
59
- g,
59
+ I,
60
60
  {
61
61
  value: r || "ZZ",
62
62
  onChange: S,
63
63
  disabled: o,
64
64
  "aria-label": l ?? "Country",
65
- className: I(i, "tcn-input-group-slot"),
65
+ className: P(i, "tcn-control-set-item"),
66
66
  width: "auto",
67
67
  children: m
68
68
  }
@@ -70,7 +70,7 @@ function U({
70
70
  }
71
71
  export {
72
72
  U as PhoneNumberCountrySelectAdapter,
73
- u as countryCodeMap,
73
+ f as countryCodeMap,
74
74
  n as countryPrefixMap,
75
75
  F as getCountryFromValue
76
76
  };
@@ -1 +1 @@
1
- {"version":3,"file":"phone_number_country_select_adapter.js","sources":["../../../src/inputs/phone_number_input/phone_number_country_select_adapter.tsx"],"sourcesContent":["import React from 'react';\nimport { Select } from '../select/select.js';\nimport { Option } from '../options/option.js';\nimport clsx from 'clsx';\nimport {\n countriesPhoneInformation,\n CountryPhoneInformation,\n} from './countries_phone_information.js';\nimport { usePhoneContext } from './phone_number_context.js';\n\nexport const countryPrefixMap: Map<string, CountryPhoneInformation[]> = new Map();\nexport const countryCodeMap: Map<string, CountryPhoneInformation> = new Map();\ncountriesPhoneInformation.forEach(i => {\n countryCodeMap.set(i.code, i);\n if (countryPrefixMap.has(i.prefix)) {\n countryPrefixMap.get(i.prefix)?.push(i);\n } else {\n countryPrefixMap.set(i.prefix, [i]);\n }\n});\n\nexport function getCountryFromValue(value: string) {\n for (let x = 5; x > 1; x--) {\n const prefix = value.slice(0, x);\n const countriesInformation = countryPrefixMap.get(prefix);\n\n if (countriesInformation != null) {\n const countryInformation = countriesInformation.find(c => c.code === 'US');\n\n if (countryInformation != null) {\n return countryInformation;\n }\n }\n }\n\n return countryCodeMap.get('US');\n}\n\nexport interface CountryOption {\n value?: string;\n label?: string;\n divider?: boolean;\n}\n\nexport interface CountrySelectProps {\n value?: string;\n onChange: (value?: string) => void;\n options: CountryOption[];\n disabled?: boolean;\n className?: string;\n 'aria-label'?: string;\n}\n\nexport function PhoneNumberCountrySelectAdapter({\n value,\n onChange,\n options,\n disabled,\n className,\n 'aria-label': ariaLabel,\n}: CountrySelectProps) {\n const {\n setValue,\n sipAddress,\n allowSip,\n value: phoneValue,\n setFocusNumberInput,\n } = usePhoneContext();\n\n const handleChange = React.useCallback(\n (newValue: string) => {\n if (newValue === 'SIP') {\n setValue(`sip:${sipAddress}`);\n setFocusNumberInput(true);\n return;\n }\n\n onChange(newValue === 'ZZ' ? undefined : newValue);\n },\n [onChange, sipAddress, setValue, setFocusNumberInput]\n );\n\n const items = options\n .filter(opt => !opt.divider)\n .map(opt => countryCodeMap.get(opt.value || 'ZZ'))\n .filter(country => country != null)\n .sort((a, b) => {\n if (a.code === 'US') {\n return -1;\n }\n return Number(a.prefix) - Number(b.prefix);\n })\n .map(country => {\n return (\n <Option\n key={country?.code || 'ZZ'}\n value={country?.code || 'ZZ'}\n label={country.prefix || ''}\n keywords={country.keywords}\n >\n {`${country.prefix} (${country.code}) ${country.unicodeFlag}`}\n </Option>\n );\n });\n\n if (allowSip || phoneValue?.startsWith('sip:')) {\n items.unshift(\n <Option key=\"SIP\" value=\"SIP\" label=\"sip:\" keywords={['sip']}>\n SIP\n </Option>\n );\n }\n\n return (\n <Select\n value={value || 'ZZ'}\n onChange={handleChange}\n disabled={disabled}\n aria-label={ariaLabel ?? 'Country'}\n className={clsx(className, 'tcn-input-group-slot')}\n width=\"auto\"\n >\n {items}\n </Select>\n );\n}\n"],"names":["countryPrefixMap","countryCodeMap","countriesPhoneInformation","i","getCountryFromValue","value","x","prefix","countriesInformation","countryInformation","c","PhoneNumberCountrySelectAdapter","onChange","options","disabled","className","ariaLabel","setValue","sipAddress","allowSip","phoneValue","setFocusNumberInput","usePhoneContext","handleChange","React","newValue","items","opt","country","a","b","jsx","Option","Select","clsx"],"mappings":";;;;;;;AAUO,MAAMA,wBAA+D,IAAA,GAC/DC,wBAA2D,IAAA;AACxEC,EAA0B,QAAQ,CAAAC,MAAK;AACrC,EAAAF,EAAe,IAAIE,EAAE,MAAMA,CAAC,GACxBH,EAAiB,IAAIG,EAAE,MAAM,IAC/BH,EAAiB,IAAIG,EAAE,MAAM,GAAG,KAAKA,CAAC,IAEtCH,EAAiB,IAAIG,EAAE,QAAQ,CAACA,CAAC,CAAC;AAEtC,CAAC;AAEM,SAASC,EAAoBC,GAAe;AACjD,WAASC,IAAI,GAAGA,IAAI,GAAGA,KAAK;AAC1B,UAAMC,IAASF,EAAM,MAAM,GAAGC,CAAC,GACzBE,IAAuBR,EAAiB,IAAIO,CAAM;AAExD,QAAIC,KAAwB,MAAM;AAChC,YAAMC,IAAqBD,EAAqB,KAAK,CAAAE,MAAKA,EAAE,SAAS,IAAI;AAEzE,UAAID,KAAsB;AACxB,eAAOA;AAAA,IAEX;AAAA,EACF;AAEA,SAAOR,EAAe,IAAI,IAAI;AAChC;AAiBO,SAASU,EAAgC;AAAA,EAC9C,OAAAN;AAAA,EACA,UAAAO;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,cAAcC;AAChB,GAAuB;AACrB,QAAM;AAAA,IACJ,UAAAC;AAAA,IACA,YAAAC;AAAA,IACA,UAAAC;AAAA,IACA,OAAOC;AAAA,IACP,qBAAAC;AAAA,EAAA,IACEC,EAAA,GAEEC,IAAeC,EAAM;AAAA,IACzB,CAACC,MAAqB;AACpB,UAAIA,MAAa,OAAO;AACtB,QAAAR,EAAS,OAAOC,CAAU,EAAE,GAC5BG,EAAoB,EAAI;AACxB;AAAA,MACF;AAEA,MAAAT,EAASa,MAAa,OAAO,SAAYA,CAAQ;AAAA,IACnD;AAAA,IACA,CAACb,GAAUM,GAAYD,GAAUI,CAAmB;AAAA,EAAA,GAGhDK,IAAQb,EACX,OAAO,CAAAc,MAAO,CAACA,EAAI,OAAO,EAC1B,IAAI,CAAAA,MAAO1B,EAAe,IAAI0B,EAAI,SAAS,IAAI,CAAC,EAChD,OAAO,CAAAC,MAAWA,KAAW,IAAI,EACjC,KAAK,CAACC,GAAGC,MACJD,EAAE,SAAS,OACN,KAEF,OAAOA,EAAE,MAAM,IAAI,OAAOC,EAAE,MAAM,CAC1C,EACA,IAAI,CAAAF,MAED,gBAAAG;AAAA,IAACC;AAAA,IAAA;AAAA,MAEC,OAAOJ,GAAS,QAAQ;AAAA,MACxB,OAAOA,EAAQ,UAAU;AAAA,MACzB,UAAUA,EAAQ;AAAA,MAEjB,UAAA,GAAGA,EAAQ,MAAM,KAAKA,EAAQ,IAAI,KAAKA,EAAQ,WAAW;AAAA,IAAA;AAAA,IALtDA,GAAS,QAAQ;AAAA,EAAA,CAQ3B;AAEH,UAAIT,KAAYC,GAAY,WAAW,MAAM,MAC3CM,EAAM;AAAA,IACJ,gBAAAK,EAACC,GAAA,EAAiB,OAAM,OAAM,OAAM,QAAO,UAAU,CAAC,KAAK,GAAG,UAAA,MAAA,GAAlD,KAEZ;AAAA,EAAA,GAKF,gBAAAD;AAAA,IAACE;AAAA,IAAA;AAAA,MACC,OAAO5B,KAAS;AAAA,MAChB,UAAUkB;AAAA,MACV,UAAAT;AAAA,MACA,cAAYE,KAAa;AAAA,MACzB,WAAWkB,EAAKnB,GAAW,sBAAsB;AAAA,MACjD,OAAM;AAAA,MAEL,UAAAW;AAAA,IAAA;AAAA,EAAA;AAGP;"}
1
+ {"version":3,"file":"phone_number_country_select_adapter.js","sources":["../../../src/inputs/phone_number_input/phone_number_country_select_adapter.tsx"],"sourcesContent":["import React from 'react';\nimport { Select } from '../select/select.js';\nimport { Option } from '../options/option.js';\nimport clsx from 'clsx';\nimport {\n countriesPhoneInformation,\n CountryPhoneInformation,\n} from './countries_phone_information.js';\nimport { usePhoneContext } from './phone_number_context.js';\n\nexport const countryPrefixMap: Map<string, CountryPhoneInformation[]> = new Map();\nexport const countryCodeMap: Map<string, CountryPhoneInformation> = new Map();\ncountriesPhoneInformation.forEach(i => {\n countryCodeMap.set(i.code, i);\n if (countryPrefixMap.has(i.prefix)) {\n countryPrefixMap.get(i.prefix)?.push(i);\n } else {\n countryPrefixMap.set(i.prefix, [i]);\n }\n});\n\nexport function getCountryFromValue(value: string) {\n for (let x = 5; x > 1; x--) {\n const prefix = value.slice(0, x);\n const countriesInformation = countryPrefixMap.get(prefix);\n\n if (countriesInformation != null) {\n const countryInformation = countriesInformation.find(c => c.code === 'US');\n\n if (countryInformation != null) {\n return countryInformation;\n }\n }\n }\n\n return countryCodeMap.get('US');\n}\n\nexport interface CountryOption {\n value?: string;\n label?: string;\n divider?: boolean;\n}\n\nexport interface CountrySelectProps {\n value?: string;\n onChange: (value?: string) => void;\n options: CountryOption[];\n disabled?: boolean;\n className?: string;\n 'aria-label'?: string;\n}\n\nexport function PhoneNumberCountrySelectAdapter({\n value,\n onChange,\n options,\n disabled,\n className,\n 'aria-label': ariaLabel,\n}: CountrySelectProps) {\n const {\n setValue,\n sipAddress,\n allowSip,\n value: phoneValue,\n setFocusNumberInput,\n } = usePhoneContext();\n\n const handleChange = React.useCallback(\n (newValue: string) => {\n if (newValue === 'SIP') {\n setValue(`sip:${sipAddress}`);\n setFocusNumberInput(true);\n return;\n }\n\n onChange(newValue === 'ZZ' ? undefined : newValue);\n },\n [onChange, sipAddress, setValue, setFocusNumberInput]\n );\n\n const items = options\n .filter(opt => !opt.divider)\n .map(opt => countryCodeMap.get(opt.value || 'ZZ'))\n .filter(country => country != null)\n .sort((a, b) => {\n if (a.code === 'US') {\n return -1;\n }\n return Number(a.prefix) - Number(b.prefix);\n })\n .map(country => {\n return (\n <Option\n key={country?.code || 'ZZ'}\n value={country?.code || 'ZZ'}\n label={country.prefix || ''}\n keywords={country.keywords}\n >\n {`${country.prefix} (${country.code}) ${country.unicodeFlag}`}\n </Option>\n );\n });\n\n if (allowSip || phoneValue?.startsWith('sip:')) {\n items.unshift(\n <Option key=\"SIP\" value=\"SIP\" label=\"sip:\" keywords={['sip']}>\n SIP\n </Option>\n );\n }\n\n return (\n <Select\n value={value || 'ZZ'}\n onChange={handleChange}\n disabled={disabled}\n aria-label={ariaLabel ?? 'Country'}\n className={clsx(className, 'tcn-control-set-item')}\n width=\"auto\"\n >\n {items}\n </Select>\n );\n}\n"],"names":["countryPrefixMap","countryCodeMap","countriesPhoneInformation","i","getCountryFromValue","value","x","prefix","countriesInformation","countryInformation","c","PhoneNumberCountrySelectAdapter","onChange","options","disabled","className","ariaLabel","setValue","sipAddress","allowSip","phoneValue","setFocusNumberInput","usePhoneContext","handleChange","React","newValue","items","opt","country","a","b","jsx","Option","Select","clsx"],"mappings":";;;;;;;AAUO,MAAMA,wBAA+D,IAAA,GAC/DC,wBAA2D,IAAA;AACxEC,EAA0B,QAAQ,CAAAC,MAAK;AACrC,EAAAF,EAAe,IAAIE,EAAE,MAAMA,CAAC,GACxBH,EAAiB,IAAIG,EAAE,MAAM,IAC/BH,EAAiB,IAAIG,EAAE,MAAM,GAAG,KAAKA,CAAC,IAEtCH,EAAiB,IAAIG,EAAE,QAAQ,CAACA,CAAC,CAAC;AAEtC,CAAC;AAEM,SAASC,EAAoBC,GAAe;AACjD,WAASC,IAAI,GAAGA,IAAI,GAAGA,KAAK;AAC1B,UAAMC,IAASF,EAAM,MAAM,GAAGC,CAAC,GACzBE,IAAuBR,EAAiB,IAAIO,CAAM;AAExD,QAAIC,KAAwB,MAAM;AAChC,YAAMC,IAAqBD,EAAqB,KAAK,CAAAE,MAAKA,EAAE,SAAS,IAAI;AAEzE,UAAID,KAAsB;AACxB,eAAOA;AAAA,IAEX;AAAA,EACF;AAEA,SAAOR,EAAe,IAAI,IAAI;AAChC;AAiBO,SAASU,EAAgC;AAAA,EAC9C,OAAAN;AAAA,EACA,UAAAO;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,WAAAC;AAAA,EACA,cAAcC;AAChB,GAAuB;AACrB,QAAM;AAAA,IACJ,UAAAC;AAAA,IACA,YAAAC;AAAA,IACA,UAAAC;AAAA,IACA,OAAOC;AAAA,IACP,qBAAAC;AAAA,EAAA,IACEC,EAAA,GAEEC,IAAeC,EAAM;AAAA,IACzB,CAACC,MAAqB;AACpB,UAAIA,MAAa,OAAO;AACtB,QAAAR,EAAS,OAAOC,CAAU,EAAE,GAC5BG,EAAoB,EAAI;AACxB;AAAA,MACF;AAEA,MAAAT,EAASa,MAAa,OAAO,SAAYA,CAAQ;AAAA,IACnD;AAAA,IACA,CAACb,GAAUM,GAAYD,GAAUI,CAAmB;AAAA,EAAA,GAGhDK,IAAQb,EACX,OAAO,CAAAc,MAAO,CAACA,EAAI,OAAO,EAC1B,IAAI,CAAAA,MAAO1B,EAAe,IAAI0B,EAAI,SAAS,IAAI,CAAC,EAChD,OAAO,CAAAC,MAAWA,KAAW,IAAI,EACjC,KAAK,CAACC,GAAGC,MACJD,EAAE,SAAS,OACN,KAEF,OAAOA,EAAE,MAAM,IAAI,OAAOC,EAAE,MAAM,CAC1C,EACA,IAAI,CAAAF,MAED,gBAAAG;AAAA,IAACC;AAAA,IAAA;AAAA,MAEC,OAAOJ,GAAS,QAAQ;AAAA,MACxB,OAAOA,EAAQ,UAAU;AAAA,MACzB,UAAUA,EAAQ;AAAA,MAEjB,UAAA,GAAGA,EAAQ,MAAM,KAAKA,EAAQ,IAAI,KAAKA,EAAQ,WAAW;AAAA,IAAA;AAAA,IALtDA,GAAS,QAAQ;AAAA,EAAA,CAQ3B;AAEH,UAAIT,KAAYC,GAAY,WAAW,MAAM,MAC3CM,EAAM;AAAA,IACJ,gBAAAK,EAACC,GAAA,EAAiB,OAAM,OAAM,OAAM,QAAO,UAAU,CAAC,KAAK,GAAG,UAAA,MAAA,GAAlD,KAEZ;AAAA,EAAA,GAKF,gBAAAD;AAAA,IAACE;AAAA,IAAA;AAAA,MACC,OAAO5B,KAAS;AAAA,MAChB,UAAUkB;AAAA,MACV,UAAAT;AAAA,MACA,cAAYE,KAAa;AAAA,MACzB,WAAWkB,EAAKnB,GAAW,sBAAsB;AAAA,MACjD,OAAM;AAAA,MAEL,UAAAW;AAAA,IAAA;AAAA,EAAA;AAGP;"}
@@ -1,4 +1,4 @@
1
- import { jsx as o } from "react/jsx-runtime";
1
+ import { jsx as r } from "react/jsx-runtime";
2
2
  import e, { useLayoutEffect as x } from "react";
3
3
  import w from "react-phone-number-input";
4
4
  import "react-phone-number-input/style.css";
@@ -9,15 +9,15 @@ import { Option as L } from "../options/option.js";
9
9
  import { PhoneNumberInputAdapter as R } from "./phone_number_input_adapter.js";
10
10
  import { clsx as U } from "clsx";
11
11
  import { SipInput as W } from "./sip_input.js";
12
- import { defaultCountries as g } from "./countries_phone_information.js";
13
- import '../../phone_number_input.css';const q = "_phone-number-input_5c4483d", z = { "phone-number-input": q };
12
+ import { defaultCountries as q } from "./countries_phone_information.js";
13
+ import '../../phone_number_input.css';const z = "_phone-number-input_5c4483d", D = { "phone-number-input": z };
14
14
  function tt({
15
15
  value: t = "",
16
16
  allowSip: m = !0,
17
17
  onChange: n,
18
18
  defaultCountry: k = "US",
19
- allowedCountryCodes: p,
20
- disabled: u,
19
+ allowedCountryCodes: s,
20
+ disabled: p,
21
21
  name: i,
22
22
  "aria-label": f,
23
23
  autoFocus: c,
@@ -29,16 +29,16 @@ function tt({
29
29
  children: h,
30
30
  ...E
31
31
  }) {
32
- const [s, b] = e.useState(!1), r = t?.toLocaleLowerCase().startsWith("sip:") || !1, [y, M] = e.useState(r ? "" : t), [N, C] = e.useState(
33
- r ? t?.substring(4).trim() : ""
32
+ const [u, b] = e.useState(!1), o = t?.toLocaleLowerCase().startsWith("sip:") || !1, [y, M] = e.useState(o ? "" : t), [N, C] = e.useState(
33
+ o ? t?.substring(4).trim() : ""
34
34
  ), [I, j] = e.useState(
35
35
  k
36
36
  );
37
- p = p || g, x(() => {
38
- r && C(t?.substring(4).trim() || "");
39
- }, [r, t]), x(() => {
40
- s && b(!1);
41
- }, [s]);
37
+ s = s || q, x(() => {
38
+ o && C(t?.substring(4).trim() || "");
39
+ }, [o, t]), x(() => {
40
+ u && b(!1);
41
+ }, [u]);
42
42
  const S = e.useMemo(() => e.Children.toArray(h).filter(
43
43
  (P) => e.isValidElement(P) && P.type === L
44
44
  ), [h]), A = e.useMemo(() => ({
@@ -48,13 +48,13 @@ function tt({
48
48
  setValue: n,
49
49
  ariaPhoneBookButtonLabel: d,
50
50
  ariaSelectLabel: l,
51
- disabled: u,
51
+ disabled: p,
52
52
  setCountry: j,
53
53
  sipAddress: N,
54
54
  setSipAddress: C,
55
55
  cachedNumber: y,
56
56
  setCachedNumber: M,
57
- focusNumberInput: s,
57
+ focusNumberInput: u,
58
58
  setFocusNumberInput: b
59
59
  }), [
60
60
  t,
@@ -63,33 +63,33 @@ function tt({
63
63
  n,
64
64
  d,
65
65
  l,
66
- u,
66
+ p,
67
67
  N,
68
68
  y,
69
- s
69
+ u
70
70
  ]);
71
- return r ? /* @__PURE__ */ o(_, { value: A, children: /* @__PURE__ */ o(
71
+ return o ? /* @__PURE__ */ r(_, { value: A, children: /* @__PURE__ */ r(
72
72
  W,
73
73
  {
74
74
  onChange: n,
75
- disabled: u,
75
+ disabled: p,
76
76
  name: i,
77
77
  "aria-label": f,
78
78
  autoFocus: c,
79
79
  placeholder: a,
80
- countries: p
80
+ countries: s
81
81
  }
82
- ) }) : /* @__PURE__ */ o(_, { value: A, children: /* @__PURE__ */ o(B, { ...E, children: /* @__PURE__ */ o(
82
+ ) }) : /* @__PURE__ */ r(_, { value: A, children: /* @__PURE__ */ r(B, { ...E, children: /* @__PURE__ */ r(
83
83
  w,
84
84
  {
85
85
  value: t,
86
86
  onChange: n,
87
87
  defaultCountry: I,
88
88
  country: I,
89
- countries: p,
89
+ countries: s,
90
90
  countrySelectComponent: H,
91
91
  inputComponent: R,
92
- disabled: u,
92
+ disabled: p,
93
93
  name: i,
94
94
  "aria-label": f,
95
95
  autoFocus: c,
@@ -97,9 +97,9 @@ function tt({
97
97
  onCountryChange: O,
98
98
  limitMaxLength: V,
99
99
  className: U(
100
- z["phone-number-input"],
100
+ D["phone-number-input"],
101
101
  "tcn-phone-number-input",
102
- "tcn-input-group"
102
+ "tcn-control-set"
103
103
  ),
104
104
  displayInitialValueAsLocalNumber: !0,
105
105
  addInternationalOption: !1
@@ -1 +1 @@
1
- {"version":3,"file":"phone_number_input.js","sources":["../../../src/inputs/phone_number_input/phone_number_input.tsx"],"sourcesContent":["import React, { useLayoutEffect } from 'react';\nimport PhoneInput from 'react-phone-number-input';\nimport 'react-phone-number-input/style.css';\nimport type { CountryCode } from 'libphonenumber-js';\nimport { HStack, type HStackProps } from '../../stacks/h_stack.js';\nimport styles from './phone_number_input.module.css';\nimport { PhoneBookProvider, type PhoneContext } from './phone_number_context.js';\nimport { PhoneNumberCountrySelectAdapter } from './phone_number_country_select_adapter.js';\nimport { type OptionProps, Option } from '../options/option.js';\nimport { PhoneNumberInputAdapter } from './phone_number_input_adapter.js';\nimport { clsx } from 'clsx';\nimport { SipInput } from './sip_input.js';\nimport { defaultCountries } from './countries_phone_information.js';\n\nexport interface PhoneNumberInputProps\n extends Omit<HStackProps, 'onChange' | 'children'> {\n value?: string;\n allowSip?: boolean;\n onChange: (value?: string) => void;\n defaultCountry?: string;\n allowedCountryCodes?: string[];\n disabled?: boolean;\n name?: string;\n 'aria-label'?: string;\n autoFocus?: boolean;\n placeholder?: string;\n className?: string;\n width?: string;\n onCountryChange?: (country: CountryCode) => void;\n limitMaxLength?: boolean;\n ariaSelectLabel?: string;\n ariaPhoneBookButtonLabel?: string;\n children?: React.ReactElement<OptionProps> | React.ReactElement<OptionProps>[];\n}\n\nexport function PhoneNumberInput({\n value = '',\n allowSip = true,\n onChange,\n defaultCountry = 'US',\n allowedCountryCodes: countries,\n disabled,\n name,\n 'aria-label': ariaLabel,\n autoFocus,\n placeholder,\n onCountryChange,\n limitMaxLength,\n ariaSelectLabel,\n ariaPhoneBookButtonLabel,\n children,\n ...props\n}: PhoneNumberInputProps) {\n const [focusNumberInput, setFocusNumberInput] = React.useState<boolean>(false);\n const isSip = value?.toLocaleLowerCase().startsWith('sip:') || false;\n const [cachedNumber, setCachedNumber] = React.useState<string>(isSip ? '' : value);\n const [sipAddress, setSipAddress] = React.useState<string>(\n isSip ? value?.substring(4).trim() : ''\n );\n const [country, setCountry] = React.useState<CountryCode | undefined>(\n defaultCountry as CountryCode\n );\n\n countries = countries || defaultCountries;\n\n useLayoutEffect(() => {\n if (isSip) {\n setSipAddress(value?.substring(4).trim() || '');\n }\n }, [isSip, value]);\n\n useLayoutEffect(() => {\n if (focusNumberInput) {\n setFocusNumberInput(false);\n }\n }, [focusNumberInput]);\n\n // Extract valid Option components from children\n const phoneBookOptions = React.useMemo(() => {\n return React.Children.toArray(children).filter(\n (child): child is React.ReactElement<OptionProps> =>\n React.isValidElement(child) && child.type === Option\n );\n }, [children]);\n\n const phoneContext = React.useMemo<PhoneContext>(() => {\n return {\n value,\n allowSip,\n phoneBook: phoneBookOptions,\n setValue: onChange,\n ariaPhoneBookButtonLabel,\n ariaSelectLabel,\n disabled,\n setCountry,\n sipAddress,\n setSipAddress,\n cachedNumber,\n setCachedNumber,\n focusNumberInput,\n setFocusNumberInput,\n };\n }, [\n value,\n allowSip,\n phoneBookOptions,\n onChange,\n ariaPhoneBookButtonLabel,\n ariaSelectLabel,\n disabled,\n sipAddress,\n cachedNumber,\n focusNumberInput,\n ]);\n\n if (isSip) {\n return (\n <PhoneBookProvider value={phoneContext}>\n <SipInput\n onChange={onChange}\n disabled={disabled}\n name={name}\n aria-label={ariaLabel}\n autoFocus={autoFocus}\n placeholder={placeholder}\n countries={countries as CountryCode[]}\n />\n </PhoneBookProvider>\n );\n }\n\n return (\n <PhoneBookProvider value={phoneContext}>\n <HStack {...props}>\n <PhoneInput\n value={value}\n onChange={onChange}\n defaultCountry={country}\n country={country}\n countries={countries as CountryCode[]}\n countrySelectComponent={PhoneNumberCountrySelectAdapter}\n inputComponent={PhoneNumberInputAdapter}\n disabled={disabled}\n name={name}\n aria-label={ariaLabel}\n autoFocus={autoFocus}\n placeholder={placeholder}\n onCountryChange={onCountryChange}\n limitMaxLength={limitMaxLength}\n className={clsx(\n styles['phone-number-input'],\n 'tcn-phone-number-input',\n 'tcn-input-group'\n )}\n displayInitialValueAsLocalNumber\n addInternationalOption={false}\n />\n </HStack>\n </PhoneBookProvider>\n );\n}\n"],"names":["PhoneNumberInput","value","allowSip","onChange","defaultCountry","countries","disabled","name","ariaLabel","autoFocus","placeholder","onCountryChange","limitMaxLength","ariaSelectLabel","ariaPhoneBookButtonLabel","children","props","focusNumberInput","setFocusNumberInput","React","isSip","cachedNumber","setCachedNumber","sipAddress","setSipAddress","country","setCountry","defaultCountries","useLayoutEffect","phoneBookOptions","child","Option","phoneContext","jsx","PhoneBookProvider","SipInput","HStack","PhoneInput","PhoneNumberCountrySelectAdapter","PhoneNumberInputAdapter","clsx","styles"],"mappings":"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"}
1
+ {"version":3,"file":"phone_number_input.js","sources":["../../../src/inputs/phone_number_input/phone_number_input.tsx"],"sourcesContent":["import React, { useLayoutEffect } from 'react';\nimport PhoneInput from 'react-phone-number-input';\nimport 'react-phone-number-input/style.css';\nimport type { CountryCode } from 'libphonenumber-js';\nimport { HStack, type HStackProps } from '../../stacks/h_stack.js';\nimport styles from './phone_number_input.module.css';\nimport { PhoneBookProvider, type PhoneContext } from './phone_number_context.js';\nimport { PhoneNumberCountrySelectAdapter } from './phone_number_country_select_adapter.js';\nimport { type OptionProps, Option } from '../options/option.js';\nimport { PhoneNumberInputAdapter } from './phone_number_input_adapter.js';\nimport { clsx } from 'clsx';\nimport { SipInput } from './sip_input.js';\nimport { defaultCountries } from './countries_phone_information.js';\n\nexport interface PhoneNumberInputProps\n extends Omit<HStackProps, 'onChange' | 'children'> {\n value?: string;\n allowSip?: boolean;\n onChange: (value?: string) => void;\n defaultCountry?: string;\n allowedCountryCodes?: string[];\n disabled?: boolean;\n name?: string;\n 'aria-label'?: string;\n autoFocus?: boolean;\n placeholder?: string;\n className?: string;\n width?: string;\n onCountryChange?: (country: CountryCode) => void;\n limitMaxLength?: boolean;\n ariaSelectLabel?: string;\n ariaPhoneBookButtonLabel?: string;\n children?: React.ReactElement<OptionProps> | React.ReactElement<OptionProps>[];\n}\n\nexport function PhoneNumberInput({\n value = '',\n allowSip = true,\n onChange,\n defaultCountry = 'US',\n allowedCountryCodes: countries,\n disabled,\n name,\n 'aria-label': ariaLabel,\n autoFocus,\n placeholder,\n onCountryChange,\n limitMaxLength,\n ariaSelectLabel,\n ariaPhoneBookButtonLabel,\n children,\n ...props\n}: PhoneNumberInputProps) {\n const [focusNumberInput, setFocusNumberInput] = React.useState<boolean>(false);\n const isSip = value?.toLocaleLowerCase().startsWith('sip:') || false;\n const [cachedNumber, setCachedNumber] = React.useState<string>(isSip ? '' : value);\n const [sipAddress, setSipAddress] = React.useState<string>(\n isSip ? value?.substring(4).trim() : ''\n );\n const [country, setCountry] = React.useState<CountryCode | undefined>(\n defaultCountry as CountryCode\n );\n\n countries = countries || defaultCountries;\n\n useLayoutEffect(() => {\n if (isSip) {\n setSipAddress(value?.substring(4).trim() || '');\n }\n }, [isSip, value]);\n\n useLayoutEffect(() => {\n if (focusNumberInput) {\n setFocusNumberInput(false);\n }\n }, [focusNumberInput]);\n\n // Extract valid Option components from children\n const phoneBookOptions = React.useMemo(() => {\n return React.Children.toArray(children).filter(\n (child): child is React.ReactElement<OptionProps> =>\n React.isValidElement(child) && child.type === Option\n );\n }, [children]);\n\n const phoneContext = React.useMemo<PhoneContext>(() => {\n return {\n value,\n allowSip,\n phoneBook: phoneBookOptions,\n setValue: onChange,\n ariaPhoneBookButtonLabel,\n ariaSelectLabel,\n disabled,\n setCountry,\n sipAddress,\n setSipAddress,\n cachedNumber,\n setCachedNumber,\n focusNumberInput,\n setFocusNumberInput,\n };\n }, [\n value,\n allowSip,\n phoneBookOptions,\n onChange,\n ariaPhoneBookButtonLabel,\n ariaSelectLabel,\n disabled,\n sipAddress,\n cachedNumber,\n focusNumberInput,\n ]);\n\n if (isSip) {\n return (\n <PhoneBookProvider value={phoneContext}>\n <SipInput\n onChange={onChange}\n disabled={disabled}\n name={name}\n aria-label={ariaLabel}\n autoFocus={autoFocus}\n placeholder={placeholder}\n countries={countries as CountryCode[]}\n />\n </PhoneBookProvider>\n );\n }\n\n return (\n <PhoneBookProvider value={phoneContext}>\n <HStack {...props}>\n <PhoneInput\n value={value}\n onChange={onChange}\n defaultCountry={country}\n country={country}\n countries={countries as CountryCode[]}\n countrySelectComponent={PhoneNumberCountrySelectAdapter}\n inputComponent={PhoneNumberInputAdapter}\n disabled={disabled}\n name={name}\n aria-label={ariaLabel}\n autoFocus={autoFocus}\n placeholder={placeholder}\n onCountryChange={onCountryChange}\n limitMaxLength={limitMaxLength}\n className={clsx(\n styles['phone-number-input'],\n 'tcn-phone-number-input',\n 'tcn-control-set'\n )}\n displayInitialValueAsLocalNumber\n addInternationalOption={false}\n />\n </HStack>\n </PhoneBookProvider>\n );\n}\n"],"names":["PhoneNumberInput","value","allowSip","onChange","defaultCountry","countries","disabled","name","ariaLabel","autoFocus","placeholder","onCountryChange","limitMaxLength","ariaSelectLabel","ariaPhoneBookButtonLabel","children","props","focusNumberInput","setFocusNumberInput","React","isSip","cachedNumber","setCachedNumber","sipAddress","setSipAddress","country","setCountry","defaultCountries","useLayoutEffect","phoneBookOptions","child","Option","phoneContext","jsx","PhoneBookProvider","SipInput","HStack","PhoneInput","PhoneNumberCountrySelectAdapter","PhoneNumberInputAdapter","clsx","styles"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { jsxs as S, Fragment as A, jsx as n } from "react/jsx-runtime";
1
+ import { jsxs as S, Fragment as A, jsx as e } from "react/jsx-runtime";
2
2
  import { NotebookIcon as C } from "@tcn/icons/notebook_icon.js";
3
3
  import f from "clsx";
4
4
  import { forwardRef as F, useState as R, useRef as y, useCallback as z, useLayoutEffect as E } from "react";
@@ -12,72 +12,72 @@ import { usePhoneContext as j } from "./phone_number_context.js";
12
12
  import { getCountryFromValue as T } from "./phone_number_country_select_adapter.js";
13
13
  import { Input as V } from "../input/input.js";
14
14
  import { useForkRef as q } from "../../utils/hooks/use_fork_ref.js";
15
- const to = F(function({ onChange: e, value: t = "", className: a, ...h }, g) {
15
+ const to = F(function({ onChange: n, value: t = "", className: a, ...h }, g) {
16
16
  t = t.toString();
17
17
  const [s, r] = R(
18
18
  null
19
- ), u = s != null, c = y(null), d = q(g, c), {
19
+ ), c = s != null, u = y(null), d = q(g, u), {
20
20
  phoneBook: l,
21
21
  setValue: k,
22
22
  ariaPhoneBookButtonLabel: b,
23
23
  disabled: B,
24
24
  setFocusNumberInput: P,
25
- focusNumberInput: p
25
+ focusNumberInput: m
26
26
  } = j(), x = l.length > 0;
27
27
  function I(o) {
28
- r(u ? null : o.currentTarget);
28
+ r(c ? null : o.currentTarget);
29
29
  }
30
- function m() {
30
+ function p() {
31
31
  r(null);
32
32
  }
33
33
  function N(o) {
34
- m(), P(!0), k(o);
34
+ p(), P(!0), k(o);
35
35
  }
36
36
  const O = z(
37
37
  (o, i) => {
38
- if (!e) return;
39
- e(i ?? {
38
+ if (!n) return;
39
+ n(i ?? {
40
40
  target: { value: o },
41
41
  currentTarget: { value: o }
42
42
  });
43
43
  },
44
- [e]
44
+ [n]
45
45
  );
46
46
  if (t.startsWith("+")) {
47
47
  const i = T(t)?.prefix?.length || 0;
48
48
  t = t.substring(i);
49
49
  }
50
50
  return E(() => {
51
- const o = c?.current;
52
- o == null || !p || requestAnimationFrame(() => {
51
+ const o = u?.current;
52
+ o == null || !m || requestAnimationFrame(() => {
53
53
  o.value.length > 0 ? o.select() : o.focus();
54
54
  });
55
- }, [p]), /* @__PURE__ */ S(A, { children: [
56
- /* @__PURE__ */ n(
55
+ }, [m]), /* @__PURE__ */ S(A, { children: [
56
+ /* @__PURE__ */ e(
57
57
  V,
58
58
  {
59
59
  ref: d,
60
60
  value: t,
61
61
  ...h,
62
- className: f(a, "tcn-input-group-slot"),
62
+ className: f(a, "tcn-control-set-item"),
63
63
  onChange: O
64
64
  }
65
65
  ),
66
- x && /* @__PURE__ */ n(
66
+ x && /* @__PURE__ */ e(
67
67
  L,
68
68
  {
69
69
  disabled: B,
70
- className: f("tcn-input-group-slot", "tcn-phone-number-phone-book"),
70
+ className: f("tcn-control-set-item", "tcn-phone-number-phone-book"),
71
71
  "aria-label": b,
72
72
  onClick: I,
73
73
  size: "md",
74
- children: /* @__PURE__ */ n(C, { size: "md" })
74
+ children: /* @__PURE__ */ e(C, { size: "md" })
75
75
  }
76
76
  ),
77
- /* @__PURE__ */ n(
77
+ /* @__PURE__ */ e(
78
78
  w,
79
79
  {
80
- open: u,
80
+ open: c,
81
81
  anchorElement: s,
82
82
  horizontalAnchor: "end",
83
83
  horizontalOrigin: "end",
@@ -85,7 +85,7 @@ const to = F(function({ onChange: e, value: t = "", className: a, ...h }, g) {
85
85
  verticalOrigin: "top",
86
86
  width: "300px",
87
87
  onOptionSelect: N,
88
- onClose: m,
88
+ onClose: p,
89
89
  noSuggestionMessage: "No phone numbers found",
90
90
  children: l
91
91
  }
@@ -1 +1 @@
1
- {"version":3,"file":"phone_number_input_adapter.js","sources":["../../../src/inputs/phone_number_input/phone_number_input_adapter.tsx"],"sourcesContent":["import { NotebookIcon } from '@tcn/icons/notebook_icon.js';\nimport clsx from 'clsx';\nimport { forwardRef, useState, useCallback, useLayoutEffect, useRef } from 'react';\nimport { Button } from '../../actions/index.js';\nimport { SuggestionList } from '../suggestions/suggestion_list.js';\nimport { usePhoneContext } from './phone_number_context.js';\nimport { getCountryFromValue } from './phone_number_country_select_adapter.js';\nimport { Input } from '../input/input.js';\nimport { useForkRef } from '../../utils/hooks/use_fork_ref.js';\n\n/**\n * Bridges `@tcn/ui/inputs` Input (onChange: (value, event?) => void)\n * with react-phone-number-input's expectation (onChange: (event) => void).\n */\nexport const PhoneNumberInputAdapter = forwardRef<\n HTMLInputElement,\n React.InputHTMLAttributes<HTMLInputElement>\n>(function InputAdapter({ onChange, value = '', className, ...rest }, ref) {\n value = value.toString();\n const [phoneBookElement, setPhoneBookElement] = useState<HTMLButtonElement | null>(\n null\n );\n const isPhoneBookOpen = phoneBookElement != null;\n const internalInputRef = useRef<HTMLInputElement | null>(null);\n const forkedRef = useForkRef(ref, internalInputRef);\n\n const {\n phoneBook: phoneBookOptions,\n setValue,\n ariaPhoneBookButtonLabel,\n disabled,\n setFocusNumberInput,\n focusNumberInput,\n } = usePhoneContext();\n\n const showPhoneBook = phoneBookOptions.length > 0;\n\n function togglePhoneBook(e: React.MouseEvent<HTMLButtonElement>) {\n if (isPhoneBookOpen) {\n setPhoneBookElement(null);\n } else {\n setPhoneBookElement(e.currentTarget);\n }\n }\n\n function closePhoneBook() {\n setPhoneBookElement(null);\n }\n\n function handlePhoneBookOptionSelect(value: string) {\n closePhoneBook();\n setFocusNumberInput(true);\n setValue(value);\n }\n\n const handleChange = useCallback(\n (value: string, event?: React.ChangeEvent<HTMLInputElement>) => {\n if (!onChange) return;\n const e =\n event ??\n ({\n target: { value },\n currentTarget: { value },\n } as React.ChangeEvent<HTMLInputElement>);\n onChange(e);\n },\n [onChange]\n );\n\n if (value.startsWith('+')) {\n const country = getCountryFromValue(value);\n const prefixLength = country?.prefix?.length || 0;\n value = value.substring(prefixLength);\n }\n\n useLayoutEffect(() => {\n const input = internalInputRef?.current;\n\n if (input == null || !focusNumberInput) {\n return;\n }\n\n requestAnimationFrame(() => {\n if (input.value.length > 0) {\n input.select();\n } else {\n input.focus();\n }\n });\n }, [focusNumberInput]);\n\n return (\n <>\n <Input\n ref={forkedRef}\n value={value}\n {...(rest as any)}\n className={clsx(className, 'tcn-input-group-slot')}\n onChange={handleChange}\n />\n {showPhoneBook && (\n <Button\n disabled={disabled}\n className={clsx('tcn-input-group-slot', 'tcn-phone-number-phone-book')}\n aria-label={ariaPhoneBookButtonLabel}\n onClick={togglePhoneBook}\n size=\"md\"\n >\n <NotebookIcon size=\"md\" />\n </Button>\n )}\n <SuggestionList\n open={isPhoneBookOpen}\n anchorElement={phoneBookElement}\n horizontalAnchor=\"end\"\n horizontalOrigin=\"end\"\n verticalAnchor=\"top\"\n verticalOrigin=\"top\"\n width=\"300px\"\n onOptionSelect={handlePhoneBookOptionSelect}\n onClose={closePhoneBook}\n noSuggestionMessage=\"No phone numbers found\"\n >\n {phoneBookOptions}\n </SuggestionList>\n </>\n );\n});\n"],"names":["PhoneNumberInputAdapter","forwardRef","onChange","value","className","rest","ref","phoneBookElement","setPhoneBookElement","useState","isPhoneBookOpen","internalInputRef","useRef","forkedRef","useForkRef","phoneBookOptions","setValue","ariaPhoneBookButtonLabel","disabled","setFocusNumberInput","focusNumberInput","usePhoneContext","showPhoneBook","togglePhoneBook","e","closePhoneBook","handlePhoneBookOptionSelect","handleChange","useCallback","event","prefixLength","getCountryFromValue","useLayoutEffect","input","jsxs","Fragment","jsx","Input","clsx","Button","NotebookIcon","SuggestionList"],"mappings":";;;;;;;;;;;;;;AAcO,MAAMA,KAA0BC,EAGrC,SAAsB,EAAE,UAAAC,GAAU,OAAAC,IAAQ,IAAI,WAAAC,GAAW,GAAGC,EAAA,GAAQC,GAAK;AACzE,EAAAH,IAAQA,EAAM,SAAA;AACd,QAAM,CAACI,GAAkBC,CAAmB,IAAIC;AAAA,IAC9C;AAAA,EAAA,GAEIC,IAAkBH,KAAoB,MACtCI,IAAmBC,EAAgC,IAAI,GACvDC,IAAYC,EAAWR,GAAKK,CAAgB,GAE5C;AAAA,IACJ,WAAWI;AAAA,IACX,UAAAC;AAAA,IACA,0BAAAC;AAAA,IACA,UAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,kBAAAC;AAAA,EAAA,IACEC,EAAA,GAEEC,IAAgBP,EAAiB,SAAS;AAEhD,WAASQ,EAAgBC,GAAwC;AAC/D,IACEhB,EADEE,IACkB,OAEAc,EAAE,aAFE;AAAA,EAI5B;AAEA,WAASC,IAAiB;AACxB,IAAAjB,EAAoB,IAAI;AAAA,EAC1B;AAEA,WAASkB,EAA4BvB,GAAe;AAClD,IAAAsB,EAAA,GACAN,EAAoB,EAAI,GACxBH,EAASb,CAAK;AAAA,EAChB;AAEA,QAAMwB,IAAeC;AAAA,IACnB,CAACzB,GAAe0B,MAAgD;AAC9D,UAAI,CAAC3B,EAAU;AAOf,MAAAA,EALE2B,KACC;AAAA,QACC,QAAQ,EAAE,OAAA1B,EAAAA;AAAAA,QACV,eAAe,EAAE,OAAAA,EAAAA;AAAAA,MAAM,CAEjB;AAAA,IACZ;AAAA,IACA,CAACD,CAAQ;AAAA,EAAA;AAGX,MAAIC,EAAM,WAAW,GAAG,GAAG;AAEzB,UAAM2B,IADUC,EAAoB5B,CAAK,GACX,QAAQ,UAAU;AAChD,IAAAA,IAAQA,EAAM,UAAU2B,CAAY;AAAA,EACtC;AAEA,SAAAE,EAAgB,MAAM;AACpB,UAAMC,IAAQtB,GAAkB;AAEhC,IAAIsB,KAAS,QAAQ,CAACb,KAItB,sBAAsB,MAAM;AAC1B,MAAIa,EAAM,MAAM,SAAS,IACvBA,EAAM,OAAA,IAENA,EAAM,MAAA;AAAA,IAEV,CAAC;AAAA,EACH,GAAG,CAACb,CAAgB,CAAC,GAGnB,gBAAAc,EAAAC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,KAAKxB;AAAA,QACL,OAAAV;AAAA,QACC,GAAIE;AAAA,QACL,WAAWiC,EAAKlC,GAAW,sBAAsB;AAAA,QACjD,UAAUuB;AAAA,MAAA;AAAA,IAAA;AAAA,IAEXL,KACC,gBAAAc;AAAA,MAACG;AAAA,MAAA;AAAA,QACC,UAAArB;AAAA,QACA,WAAWoB,EAAK,wBAAwB,6BAA6B;AAAA,QACrE,cAAYrB;AAAA,QACZ,SAASM;AAAA,QACT,MAAK;AAAA,QAEL,UAAA,gBAAAa,EAACI,GAAA,EAAa,MAAK,KAAA,CAAK;AAAA,MAAA;AAAA,IAAA;AAAA,IAG5B,gBAAAJ;AAAA,MAACK;AAAA,MAAA;AAAA,QACC,MAAM/B;AAAA,QACN,eAAeH;AAAA,QACf,kBAAiB;AAAA,QACjB,kBAAiB;AAAA,QACjB,gBAAe;AAAA,QACf,gBAAe;AAAA,QACf,OAAM;AAAA,QACN,gBAAgBmB;AAAA,QAChB,SAASD;AAAA,QACT,qBAAoB;AAAA,QAEnB,UAAAV;AAAA,MAAA;AAAA,IAAA;AAAA,EACH,GACF;AAEJ,CAAC;"}
1
+ {"version":3,"file":"phone_number_input_adapter.js","sources":["../../../src/inputs/phone_number_input/phone_number_input_adapter.tsx"],"sourcesContent":["import { NotebookIcon } from '@tcn/icons/notebook_icon.js';\nimport clsx from 'clsx';\nimport { forwardRef, useState, useCallback, useLayoutEffect, useRef } from 'react';\nimport { Button } from '../../actions/index.js';\nimport { SuggestionList } from '../suggestions/suggestion_list.js';\nimport { usePhoneContext } from './phone_number_context.js';\nimport { getCountryFromValue } from './phone_number_country_select_adapter.js';\nimport { Input } from '../input/input.js';\nimport { useForkRef } from '../../utils/hooks/use_fork_ref.js';\n\n/**\n * Bridges `@tcn/ui/inputs` Input (onChange: (value, event?) => void)\n * with react-phone-number-input's expectation (onChange: (event) => void).\n */\nexport const PhoneNumberInputAdapter = forwardRef<\n HTMLInputElement,\n React.InputHTMLAttributes<HTMLInputElement>\n>(function InputAdapter({ onChange, value = '', className, ...rest }, ref) {\n value = value.toString();\n const [phoneBookElement, setPhoneBookElement] = useState<HTMLButtonElement | null>(\n null\n );\n const isPhoneBookOpen = phoneBookElement != null;\n const internalInputRef = useRef<HTMLInputElement | null>(null);\n const forkedRef = useForkRef(ref, internalInputRef);\n\n const {\n phoneBook: phoneBookOptions,\n setValue,\n ariaPhoneBookButtonLabel,\n disabled,\n setFocusNumberInput,\n focusNumberInput,\n } = usePhoneContext();\n\n const showPhoneBook = phoneBookOptions.length > 0;\n\n function togglePhoneBook(e: React.MouseEvent<HTMLButtonElement>) {\n if (isPhoneBookOpen) {\n setPhoneBookElement(null);\n } else {\n setPhoneBookElement(e.currentTarget);\n }\n }\n\n function closePhoneBook() {\n setPhoneBookElement(null);\n }\n\n function handlePhoneBookOptionSelect(value: string) {\n closePhoneBook();\n setFocusNumberInput(true);\n setValue(value);\n }\n\n const handleChange = useCallback(\n (value: string, event?: React.ChangeEvent<HTMLInputElement>) => {\n if (!onChange) return;\n const e =\n event ??\n ({\n target: { value },\n currentTarget: { value },\n } as React.ChangeEvent<HTMLInputElement>);\n onChange(e);\n },\n [onChange]\n );\n\n if (value.startsWith('+')) {\n const country = getCountryFromValue(value);\n const prefixLength = country?.prefix?.length || 0;\n value = value.substring(prefixLength);\n }\n\n useLayoutEffect(() => {\n const input = internalInputRef?.current;\n\n if (input == null || !focusNumberInput) {\n return;\n }\n\n requestAnimationFrame(() => {\n if (input.value.length > 0) {\n input.select();\n } else {\n input.focus();\n }\n });\n }, [focusNumberInput]);\n\n return (\n <>\n <Input\n ref={forkedRef}\n value={value}\n {...(rest as any)}\n className={clsx(className, 'tcn-control-set-item')}\n onChange={handleChange}\n />\n {showPhoneBook && (\n <Button\n disabled={disabled}\n className={clsx('tcn-control-set-item', 'tcn-phone-number-phone-book')}\n aria-label={ariaPhoneBookButtonLabel}\n onClick={togglePhoneBook}\n size=\"md\"\n >\n <NotebookIcon size=\"md\" />\n </Button>\n )}\n <SuggestionList\n open={isPhoneBookOpen}\n anchorElement={phoneBookElement}\n horizontalAnchor=\"end\"\n horizontalOrigin=\"end\"\n verticalAnchor=\"top\"\n verticalOrigin=\"top\"\n width=\"300px\"\n onOptionSelect={handlePhoneBookOptionSelect}\n onClose={closePhoneBook}\n noSuggestionMessage=\"No phone numbers found\"\n >\n {phoneBookOptions}\n </SuggestionList>\n </>\n );\n});\n"],"names":["PhoneNumberInputAdapter","forwardRef","onChange","value","className","rest","ref","phoneBookElement","setPhoneBookElement","useState","isPhoneBookOpen","internalInputRef","useRef","forkedRef","useForkRef","phoneBookOptions","setValue","ariaPhoneBookButtonLabel","disabled","setFocusNumberInput","focusNumberInput","usePhoneContext","showPhoneBook","togglePhoneBook","e","closePhoneBook","handlePhoneBookOptionSelect","handleChange","useCallback","event","prefixLength","getCountryFromValue","useLayoutEffect","input","jsxs","Fragment","jsx","Input","clsx","Button","NotebookIcon","SuggestionList"],"mappings":";;;;;;;;;;;;;;AAcO,MAAMA,KAA0BC,EAGrC,SAAsB,EAAE,UAAAC,GAAU,OAAAC,IAAQ,IAAI,WAAAC,GAAW,GAAGC,EAAA,GAAQC,GAAK;AACzE,EAAAH,IAAQA,EAAM,SAAA;AACd,QAAM,CAACI,GAAkBC,CAAmB,IAAIC;AAAA,IAC9C;AAAA,EAAA,GAEIC,IAAkBH,KAAoB,MACtCI,IAAmBC,EAAgC,IAAI,GACvDC,IAAYC,EAAWR,GAAKK,CAAgB,GAE5C;AAAA,IACJ,WAAWI;AAAA,IACX,UAAAC;AAAA,IACA,0BAAAC;AAAA,IACA,UAAAC;AAAA,IACA,qBAAAC;AAAA,IACA,kBAAAC;AAAA,EAAA,IACEC,EAAA,GAEEC,IAAgBP,EAAiB,SAAS;AAEhD,WAASQ,EAAgBC,GAAwC;AAC/D,IACEhB,EADEE,IACkB,OAEAc,EAAE,aAFE;AAAA,EAI5B;AAEA,WAASC,IAAiB;AACxB,IAAAjB,EAAoB,IAAI;AAAA,EAC1B;AAEA,WAASkB,EAA4BvB,GAAe;AAClD,IAAAsB,EAAA,GACAN,EAAoB,EAAI,GACxBH,EAASb,CAAK;AAAA,EAChB;AAEA,QAAMwB,IAAeC;AAAA,IACnB,CAACzB,GAAe0B,MAAgD;AAC9D,UAAI,CAAC3B,EAAU;AAOf,MAAAA,EALE2B,KACC;AAAA,QACC,QAAQ,EAAE,OAAA1B,EAAAA;AAAAA,QACV,eAAe,EAAE,OAAAA,EAAAA;AAAAA,MAAM,CAEjB;AAAA,IACZ;AAAA,IACA,CAACD,CAAQ;AAAA,EAAA;AAGX,MAAIC,EAAM,WAAW,GAAG,GAAG;AAEzB,UAAM2B,IADUC,EAAoB5B,CAAK,GACX,QAAQ,UAAU;AAChD,IAAAA,IAAQA,EAAM,UAAU2B,CAAY;AAAA,EACtC;AAEA,SAAAE,EAAgB,MAAM;AACpB,UAAMC,IAAQtB,GAAkB;AAEhC,IAAIsB,KAAS,QAAQ,CAACb,KAItB,sBAAsB,MAAM;AAC1B,MAAIa,EAAM,MAAM,SAAS,IACvBA,EAAM,OAAA,IAENA,EAAM,MAAA;AAAA,IAEV,CAAC;AAAA,EACH,GAAG,CAACb,CAAgB,CAAC,GAGnB,gBAAAc,EAAAC,GAAA,EACE,UAAA;AAAA,IAAA,gBAAAC;AAAA,MAACC;AAAA,MAAA;AAAA,QACC,KAAKxB;AAAA,QACL,OAAAV;AAAA,QACC,GAAIE;AAAA,QACL,WAAWiC,EAAKlC,GAAW,sBAAsB;AAAA,QACjD,UAAUuB;AAAA,MAAA;AAAA,IAAA;AAAA,IAEXL,KACC,gBAAAc;AAAA,MAACG;AAAA,MAAA;AAAA,QACC,UAAArB;AAAA,QACA,WAAWoB,EAAK,wBAAwB,6BAA6B;AAAA,QACrE,cAAYrB;AAAA,QACZ,SAASM;AAAA,QACT,MAAK;AAAA,QAEL,UAAA,gBAAAa,EAACI,GAAA,EAAa,MAAK,KAAA,CAAK;AAAA,MAAA;AAAA,IAAA;AAAA,IAG5B,gBAAAJ;AAAA,MAACK;AAAA,MAAA;AAAA,QACC,MAAM/B;AAAA,QACN,eAAeH;AAAA,QACf,kBAAiB;AAAA,QACjB,kBAAiB;AAAA,QACjB,gBAAe;AAAA,QACf,gBAAe;AAAA,QACf,OAAM;AAAA,QACN,gBAAgBmB;AAAA,QAChB,SAASD;AAAA,QACT,qBAAoB;AAAA,QAEnB,UAAAV;AAAA,MAAA;AAAA,IAAA;AAAA,EACH,GACF;AAEJ,CAAC;"}
@@ -7,7 +7,7 @@ import "../../actions/button/button_group/button_group.js";
7
7
  import "../../actions/button/slim_button/slim_button.js";
8
8
  import { Button as R } from "../../actions/button/button/button.js";
9
9
  import "../../actions/toggle/toggle.js";
10
- import { InputGroup as j } from "../input_group/input_group.js";
10
+ import { ControlSet as j } from "../control_set/control_set.js";
11
11
  import w from "clsx";
12
12
  import { usePhoneContext as y } from "./phone_number_context.js";
13
13
  import { PhoneNumberCountrySelectAdapter as V } from "./phone_number_country_select_adapter.js";
@@ -16,22 +16,22 @@ function Z({
16
16
  disabled: n,
17
17
  countries: d,
18
18
  name: k,
19
- "aria-label": B,
20
- autoFocus: S,
19
+ "aria-label": S,
20
+ autoFocus: B,
21
21
  placeholder: P
22
22
  }) {
23
- const i = g.useRef(null), [u, t] = g.useState(null), l = u != null, {
23
+ const i = g.useRef(null), [l, t] = g.useState(null), u = l != null, {
24
24
  phoneBook: s,
25
25
  setValue: r,
26
26
  setCountry: b,
27
- ariaPhoneBookButtonLabel: I,
27
+ ariaPhoneBookButtonLabel: C,
28
28
  sipAddress: p,
29
29
  setSipAddress: c,
30
30
  focusNumberInput: m,
31
31
  setFocusNumberInput: a
32
- } = y(), C = s.length > 0;
32
+ } = y(), I = s.length > 0;
33
33
  function x(o) {
34
- t(l ? null : o.currentTarget);
34
+ t(u ? null : o.currentTarget);
35
35
  }
36
36
  function h() {
37
37
  t(null);
@@ -73,17 +73,17 @@ function Z({
73
73
  disabled: n,
74
74
  onChange: v,
75
75
  name: k,
76
- "aria-label": B,
77
- autoFocus: S,
76
+ "aria-label": S,
77
+ autoFocus: B,
78
78
  placeholder: P
79
79
  }
80
80
  ),
81
- C && /* @__PURE__ */ e(
81
+ I && /* @__PURE__ */ e(
82
82
  R,
83
83
  {
84
84
  disabled: n,
85
- className: w("tcn-input-group-slot", "tcn-phone-number-phone-book"),
86
- "aria-label": I,
85
+ className: w("tcn-control-set-item", "tcn-phone-number-phone-book"),
86
+ "aria-label": C,
87
87
  onClick: x,
88
88
  size: "md",
89
89
  children: /* @__PURE__ */ e(F, { size: "md" })
@@ -93,8 +93,8 @@ function Z({
93
93
  /* @__PURE__ */ e(
94
94
  _,
95
95
  {
96
- open: l,
97
- anchorElement: u,
96
+ open: u,
97
+ anchorElement: l,
98
98
  onOptionSelect: A,
99
99
  onClose: h,
100
100
  width: "300px",
@@ -1 +1 @@
1
- {"version":3,"file":"sip_input.js","sources":["../../../src/inputs/phone_number_input/sip_input.tsx"],"sourcesContent":["import React, { useLayoutEffect } from 'react';\nimport { NotebookIcon } from '@tcn/icons/notebook_icon.js';\nimport { Input } from '../input/input.js';\nimport { Button } from '../../actions/index.js';\nimport { InputGroup } from '../input_group/input_group.js';\nimport clsx from 'clsx';\nimport { usePhoneContext } from './phone_number_context.js';\nimport type { CountryCode } from 'libphonenumber-js';\nimport {\n PhoneNumberCountrySelectAdapter,\n type CountryOption,\n} from './phone_number_country_select_adapter.js';\nimport { SuggestionList } from '../suggestions/suggestion_list.js';\n\nexport interface SipInputProps {\n onChange: (value: string) => void;\n countries?: CountryCode[];\n disabled?: boolean;\n name?: string;\n 'aria-label'?: string;\n autoFocus?: boolean;\n placeholder?: string;\n}\n\nexport function SipInput({\n disabled,\n countries,\n name,\n 'aria-label': ariaLabel,\n autoFocus,\n placeholder,\n}: SipInputProps) {\n const inputRef = React.useRef<HTMLInputElement>(null);\n const [phoneBookElement, setPhoneBookElement] =\n React.useState<HTMLButtonElement | null>(null);\n const isPhoneBookOpen = phoneBookElement != null;\n\n const {\n phoneBook: phoneBookOptions,\n setValue,\n setCountry,\n ariaPhoneBookButtonLabel,\n sipAddress,\n setSipAddress,\n focusNumberInput,\n setFocusNumberInput,\n } = usePhoneContext();\n\n const showPhoneBook = phoneBookOptions.length > 0;\n\n function togglePhoneBook(e: React.MouseEvent<HTMLButtonElement>) {\n if (isPhoneBookOpen) {\n setPhoneBookElement(null);\n } else {\n setPhoneBookElement(e.currentTarget);\n }\n }\n\n function closePhoneBook() {\n setPhoneBookElement(null);\n }\n\n function handlePhoneBookOptionSelect(value: string) {\n closePhoneBook();\n setFocusNumberInput(true);\n setValue(value);\n }\n\n const options: CountryOption[] =\n countries?.map(country => ({\n value: country,\n label: country,\n })) || [];\n\n function selectCountry(countryCode?: string) {\n if (countryCode !== 'SIP') {\n setSipAddress(sipAddress);\n setFocusNumberInput(true);\n setValue('');\n setCountry((countryCode as CountryCode) || 'US');\n }\n }\n\n function updateSipValue(value: string) {\n setSipAddress(value);\n setValue(`sip:${value}`);\n }\n\n useLayoutEffect(() => {\n const input = inputRef.current;\n\n if (input == null || !focusNumberInput) {\n return;\n }\n\n requestAnimationFrame(() => {\n if (input.value.length > 0) {\n input.select();\n } else {\n input.focus();\n }\n });\n }, [focusNumberInput]);\n\n return (\n <>\n <InputGroup>\n <PhoneNumberCountrySelectAdapter\n value=\"SIP\"\n onChange={selectCountry}\n options={options}\n disabled={disabled}\n />\n <Input\n ref={inputRef}\n value={sipAddress}\n disabled={disabled}\n onChange={updateSipValue}\n name={name}\n aria-label={ariaLabel}\n autoFocus={autoFocus}\n placeholder={placeholder}\n />\n {showPhoneBook && (\n <Button\n disabled={disabled}\n className={clsx('tcn-input-group-slot', 'tcn-phone-number-phone-book')}\n aria-label={ariaPhoneBookButtonLabel}\n onClick={togglePhoneBook}\n size=\"md\"\n >\n <NotebookIcon size=\"md\" />\n </Button>\n )}\n </InputGroup>\n <SuggestionList\n open={isPhoneBookOpen}\n anchorElement={phoneBookElement}\n onOptionSelect={handlePhoneBookOptionSelect}\n onClose={closePhoneBook}\n width=\"300px\"\n noSuggestionMessage=\"No phone numbers found\"\n horizontalAnchor=\"end\"\n horizontalOrigin=\"end\"\n verticalAnchor=\"top\"\n verticalOrigin=\"top\"\n >\n {phoneBookOptions}\n </SuggestionList>\n </>\n );\n}\n"],"names":["SipInput","disabled","countries","name","ariaLabel","autoFocus","placeholder","inputRef","React","phoneBookElement","setPhoneBookElement","isPhoneBookOpen","phoneBookOptions","setValue","setCountry","ariaPhoneBookButtonLabel","sipAddress","setSipAddress","focusNumberInput","setFocusNumberInput","usePhoneContext","showPhoneBook","togglePhoneBook","e","closePhoneBook","handlePhoneBookOptionSelect","value","options","country","selectCountry","countryCode","updateSipValue","useLayoutEffect","input","jsxs","Fragment","InputGroup","jsx","PhoneNumberCountrySelectAdapter","Input","Button","clsx","NotebookIcon","SuggestionList"],"mappings":"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"}
1
+ {"version":3,"file":"sip_input.js","sources":["../../../src/inputs/phone_number_input/sip_input.tsx"],"sourcesContent":["import React, { useLayoutEffect } from 'react';\nimport { NotebookIcon } from '@tcn/icons/notebook_icon.js';\nimport { Input } from '../input/input.js';\nimport { Button } from '../../actions/index.js';\nimport { ControlSet } from '../control_set/control_set.js';\nimport clsx from 'clsx';\nimport { usePhoneContext } from './phone_number_context.js';\nimport type { CountryCode } from 'libphonenumber-js';\nimport {\n PhoneNumberCountrySelectAdapter,\n type CountryOption,\n} from './phone_number_country_select_adapter.js';\nimport { SuggestionList } from '../suggestions/suggestion_list.js';\n\nexport interface SipInputProps {\n onChange: (value: string) => void;\n countries?: CountryCode[];\n disabled?: boolean;\n name?: string;\n 'aria-label'?: string;\n autoFocus?: boolean;\n placeholder?: string;\n}\n\nexport function SipInput({\n disabled,\n countries,\n name,\n 'aria-label': ariaLabel,\n autoFocus,\n placeholder,\n}: SipInputProps) {\n const inputRef = React.useRef<HTMLInputElement>(null);\n const [phoneBookElement, setPhoneBookElement] =\n React.useState<HTMLButtonElement | null>(null);\n const isPhoneBookOpen = phoneBookElement != null;\n\n const {\n phoneBook: phoneBookOptions,\n setValue,\n setCountry,\n ariaPhoneBookButtonLabel,\n sipAddress,\n setSipAddress,\n focusNumberInput,\n setFocusNumberInput,\n } = usePhoneContext();\n\n const showPhoneBook = phoneBookOptions.length > 0;\n\n function togglePhoneBook(e: React.MouseEvent<HTMLButtonElement>) {\n if (isPhoneBookOpen) {\n setPhoneBookElement(null);\n } else {\n setPhoneBookElement(e.currentTarget);\n }\n }\n\n function closePhoneBook() {\n setPhoneBookElement(null);\n }\n\n function handlePhoneBookOptionSelect(value: string) {\n closePhoneBook();\n setFocusNumberInput(true);\n setValue(value);\n }\n\n const options: CountryOption[] =\n countries?.map(country => ({\n value: country,\n label: country,\n })) || [];\n\n function selectCountry(countryCode?: string) {\n if (countryCode !== 'SIP') {\n setSipAddress(sipAddress);\n setFocusNumberInput(true);\n setValue('');\n setCountry((countryCode as CountryCode) || 'US');\n }\n }\n\n function updateSipValue(value: string) {\n setSipAddress(value);\n setValue(`sip:${value}`);\n }\n\n useLayoutEffect(() => {\n const input = inputRef.current;\n\n if (input == null || !focusNumberInput) {\n return;\n }\n\n requestAnimationFrame(() => {\n if (input.value.length > 0) {\n input.select();\n } else {\n input.focus();\n }\n });\n }, [focusNumberInput]);\n\n return (\n <>\n <ControlSet>\n <PhoneNumberCountrySelectAdapter\n value=\"SIP\"\n onChange={selectCountry}\n options={options}\n disabled={disabled}\n />\n <Input\n ref={inputRef}\n value={sipAddress}\n disabled={disabled}\n onChange={updateSipValue}\n name={name}\n aria-label={ariaLabel}\n autoFocus={autoFocus}\n placeholder={placeholder}\n />\n {showPhoneBook && (\n <Button\n disabled={disabled}\n className={clsx('tcn-control-set-item', 'tcn-phone-number-phone-book')}\n aria-label={ariaPhoneBookButtonLabel}\n onClick={togglePhoneBook}\n size=\"md\"\n >\n <NotebookIcon size=\"md\" />\n </Button>\n )}\n </ControlSet>\n <SuggestionList\n open={isPhoneBookOpen}\n anchorElement={phoneBookElement}\n onOptionSelect={handlePhoneBookOptionSelect}\n onClose={closePhoneBook}\n width=\"300px\"\n noSuggestionMessage=\"No phone numbers found\"\n horizontalAnchor=\"end\"\n horizontalOrigin=\"end\"\n verticalAnchor=\"top\"\n verticalOrigin=\"top\"\n >\n {phoneBookOptions}\n </SuggestionList>\n </>\n );\n}\n"],"names":["SipInput","disabled","countries","name","ariaLabel","autoFocus","placeholder","inputRef","React","phoneBookElement","setPhoneBookElement","isPhoneBookOpen","phoneBookOptions","setValue","setCountry","ariaPhoneBookButtonLabel","sipAddress","setSipAddress","focusNumberInput","setFocusNumberInput","usePhoneContext","showPhoneBook","togglePhoneBook","e","closePhoneBook","handlePhoneBookOptionSelect","value","options","country","selectCountry","countryCode","updateSipValue","useLayoutEffect","input","jsxs","Fragment","ControlSet","jsx","PhoneNumberCountrySelectAdapter","Input","Button","clsx","NotebookIcon","SuggestionList"],"mappings":"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"}
@@ -34,7 +34,7 @@ const de = F.forwardRef(function({
34
34
  }, K) {
35
35
  const M = F.Children.toArray(
36
36
  t
37
- ), l = c(""), j = c(!1), h = c(!1), [q, S] = w(null), i = c(null), [y, b] = w(!1), B = J(K, i), R = Z(M, m || ""), k = R == null ? x || "" : R.props.label;
37
+ ), l = c(""), j = c(!1), h = c(!1), [q, y] = w(null), i = c(null), [S, b] = w(!1), B = J(K, i), R = Z(M, m || ""), k = R == null ? x || "" : R.props.label;
38
38
  function _() {
39
39
  b(!0);
40
40
  }
@@ -58,14 +58,14 @@ const de = F.forwardRef(function({
58
58
  l.current = s, n && n(e);
59
59
  }
60
60
  function I(e) {
61
- S(e.currentTarget);
61
+ y(e.currentTarget);
62
62
  const s = l.current = e.key;
63
63
  l.current = "";
64
64
  const r = e.key;
65
- s && (r === "Enter" || r === " ") && (y ? o() : _()), f && f(e);
65
+ s && (r === "Enter" || r === " ") && (S ? o() : _()), f && f(e);
66
66
  }
67
67
  function P(e) {
68
- S(e.currentTarget), j.current = document.activeElement === e.currentTarget, p && p(e);
68
+ y(e.currentTarget), j.current = document.activeElement === e.currentTarget, p && p(e);
69
69
  }
70
70
  function z(e) {
71
71
  h.current && (h.current = !1, o()), _(), d && d(e);
@@ -75,7 +75,7 @@ const de = F.forwardRef(function({
75
75
  W,
76
76
  {
77
77
  ref: B,
78
- className: L(T, "tcn-select", "tcn-control", O.select),
78
+ className: L(T, "tcn-select", "tcn-entry", O.select),
79
79
  width: "100%",
80
80
  ...D,
81
81
  hAlign: "start",
@@ -90,7 +90,7 @@ const de = F.forwardRef(function({
90
90
  /* @__PURE__ */ u(
91
91
  Q,
92
92
  {
93
- open: y,
93
+ open: S,
94
94
  anchorElement: q,
95
95
  onClose: N,
96
96
  value: "",
@@ -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-control', 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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"}