chop-logic-components 3.7.2 → 4.0.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 (238) hide show
  1. package/README.md +4 -4
  2. package/dist/components/atoms/button/Button.css +1 -0
  3. package/dist/components/atoms/button/Button.js +66 -0
  4. package/dist/components/atoms/button/icon-button/IconButton.css +1 -0
  5. package/dist/components/atoms/button/icon-button/IconButton.js +15 -0
  6. package/dist/components/atoms/button/icon-button/index.js +3 -0
  7. package/dist/components/atoms/button/index.js +3 -0
  8. package/dist/components/atoms/button/inner-button/InnerButton.css +1 -0
  9. package/dist/components/atoms/button/inner-button/InnerButton.js +28 -0
  10. package/dist/components/atoms/button/inner-button/index.js +3 -0
  11. package/dist/components/atoms/button/primary-button/PrimaryButton.css +1 -0
  12. package/dist/components/atoms/button/primary-button/PrimaryButton.js +18 -0
  13. package/dist/components/atoms/button/primary-button/index.js +3 -0
  14. package/dist/components/atoms/button/secondary-button/SecondaryButton.css +1 -0
  15. package/dist/components/atoms/button/secondary-button/SecondaryButton.js +18 -0
  16. package/dist/components/atoms/button/secondary-button/index.js +3 -0
  17. package/dist/components/atoms/editable-text/EditView.js +37 -0
  18. package/dist/components/atoms/editable-text/EditableText.css +1 -0
  19. package/dist/components/atoms/editable-text/EditableText.js +71 -0
  20. package/dist/components/atoms/editable-text/ReadView.js +25 -0
  21. package/dist/components/atoms/editable-text/index.js +3 -0
  22. package/dist/components/atoms/editable-text/useEditModeState.js +17 -0
  23. package/dist/components/atoms/editable-text/useInputFocus.js +9 -0
  24. package/dist/components/atoms/editable-text/useValueState.js +21 -0
  25. package/dist/components/atoms/error-message/ErrorMessage.css +1 -0
  26. package/dist/components/atoms/error-message/ErrorMessage.js +30 -0
  27. package/dist/components/atoms/error-message/index.js +3 -0
  28. package/dist/components/atoms/header/Header.css +1 -0
  29. package/dist/components/atoms/header/Header.js +22 -0
  30. package/dist/components/atoms/header/index.js +3 -0
  31. package/dist/components/atoms/icon/Icon.css +1 -0
  32. package/dist/components/atoms/icon/Icon.js +31 -0
  33. package/dist/components/atoms/icon/index.js +3 -0
  34. package/dist/components/atoms/image/BasicImage.js +27 -0
  35. package/dist/components/atoms/image/FallBackImage.js +10 -0
  36. package/dist/components/atoms/image/Image.css +1 -0
  37. package/dist/components/atoms/image/Image.js +24 -0
  38. package/dist/components/atoms/image/ResponsivePicture.js +17 -0
  39. package/dist/components/atoms/image/index.js +3 -0
  40. package/dist/components/atoms/input/Input.css +1 -0
  41. package/dist/components/atoms/input/Input.js +10 -0
  42. package/dist/components/atoms/input/index.js +3 -0
  43. package/dist/components/atoms/label/Label.css +1 -0
  44. package/dist/components/atoms/label/Label.js +30 -0
  45. package/dist/components/atoms/label/index.js +3 -0
  46. package/dist/components/atoms/link/Link.css +1 -0
  47. package/dist/components/atoms/link/Link.js +39 -0
  48. package/dist/components/atoms/link/index.js +3 -0
  49. package/dist/components/atoms/portal/Portal.js +11 -0
  50. package/dist/components/atoms/portal/index.js +2 -0
  51. package/dist/components/atoms/tooltip/Tooltip.controller.js +35 -0
  52. package/dist/components/atoms/tooltip/Tooltip.css +1 -0
  53. package/dist/components/atoms/tooltip/Tooltip.js +70 -0
  54. package/dist/components/atoms/tooltip/index.js +3 -0
  55. package/dist/components/contexts/form/FormContext.js +5 -0
  56. package/dist/components/contexts/theme/ThemeContext.js +11 -0
  57. package/dist/components/contexts/theme/ThemeProvider.js +21 -0
  58. package/dist/components/hocs/with-figure-caption/Figure.css +1 -0
  59. package/dist/components/hocs/with-figure-caption/index.js +2 -0
  60. package/dist/components/hocs/with-figure-caption/with-figure-caption.js +11 -0
  61. package/dist/components/hocs/with-tooltip/index.js +2 -0
  62. package/dist/components/hocs/with-tooltip/with-tooltip.js +8 -0
  63. package/dist/components/molecules/accordion/Accordion.css +1 -0
  64. package/dist/components/molecules/accordion/Accordion.js +11 -0
  65. package/dist/components/molecules/accordion/AccordionItem.css +1 -0
  66. package/dist/components/molecules/accordion/AccordionItem.js +24 -0
  67. package/dist/components/molecules/accordion/index.js +3 -0
  68. package/dist/components/molecules/alert/Alert.css +1 -0
  69. package/dist/components/molecules/alert/Alert.helpers.js +41 -0
  70. package/dist/components/molecules/alert/Alert.js +59 -0
  71. package/dist/components/molecules/alert/AlertProgressBar.js +13 -0
  72. package/dist/components/molecules/alert/index.js +3 -0
  73. package/dist/components/molecules/breadcrumbs/BreadcrumbItem.js +27 -0
  74. package/dist/components/molecules/breadcrumbs/BreadcrumbList.js +6 -0
  75. package/dist/components/molecules/breadcrumbs/Breadcrumbs.css +1 -0
  76. package/dist/components/molecules/breadcrumbs/Breadcrumbs.js +31 -0
  77. package/dist/components/molecules/breadcrumbs/index.js +3 -0
  78. package/dist/components/molecules/checkbox/Checkbox.controller.js +25 -0
  79. package/dist/components/molecules/checkbox/Checkbox.css +1 -0
  80. package/dist/components/molecules/checkbox/Checkbox.helpers.js +10 -0
  81. package/dist/components/molecules/checkbox/Checkbox.js +7 -0
  82. package/dist/components/molecules/checkbox/CheckboxStateful.js +61 -0
  83. package/dist/components/molecules/checkbox/CheckboxStateless.js +59 -0
  84. package/dist/components/molecules/checkbox/index.js +3 -0
  85. package/dist/components/molecules/multi-select/MultiSelect.Combobox.js +47 -0
  86. package/dist/components/molecules/multi-select/MultiSelect.Dropdown.js +31 -0
  87. package/dist/components/molecules/multi-select/MultiSelect.controller.js +37 -0
  88. package/dist/components/molecules/multi-select/MultiSelect.helpers.js +22 -0
  89. package/dist/components/molecules/multi-select/MultiSelect.js +61 -0
  90. package/dist/components/molecules/multi-select/MultiSelectComboboxSelectedValues.js +8 -0
  91. package/dist/components/molecules/multi-select/Option.js +40 -0
  92. package/dist/components/molecules/multi-select/index.js +2 -0
  93. package/dist/components/molecules/numeric-input/NumericInput.controller.js +45 -0
  94. package/dist/components/molecules/numeric-input/NumericInput.css +1 -0
  95. package/dist/components/molecules/numeric-input/NumericInput.helpers.js +20 -0
  96. package/dist/components/molecules/numeric-input/NumericInput.js +7 -0
  97. package/dist/components/molecules/numeric-input/NumericInputStateful.js +108 -0
  98. package/dist/components/molecules/numeric-input/NumericInputStateless.js +96 -0
  99. package/dist/components/molecules/numeric-input/index.js +3 -0
  100. package/dist/components/molecules/search/Search.controller.js +42 -0
  101. package/dist/components/molecules/search/Search.css +1 -0
  102. package/dist/components/molecules/search/Search.js +112 -0
  103. package/dist/components/molecules/search/index.js +3 -0
  104. package/dist/components/molecules/select/Select.controller.js +32 -0
  105. package/dist/components/molecules/select/Select.css +1 -0
  106. package/dist/components/molecules/select/Select.helpers.js +16 -0
  107. package/dist/components/molecules/select/Select.js +64 -0
  108. package/dist/components/molecules/select/combobox/Combobox.css +1 -0
  109. package/dist/components/molecules/select/combobox/Combobox.js +46 -0
  110. package/dist/components/molecules/select/combobox/index.js +3 -0
  111. package/dist/components/molecules/select/dropdown/Dropdown.css +1 -0
  112. package/dist/components/molecules/select/dropdown/Dropdown.js +46 -0
  113. package/dist/components/molecules/select/dropdown/index.js +3 -0
  114. package/dist/components/molecules/select/index.js +3 -0
  115. package/dist/components/molecules/select/option/Option.css +1 -0
  116. package/dist/components/molecules/select/option/Option.js +38 -0
  117. package/dist/components/molecules/select/option/index.js +3 -0
  118. package/dist/components/molecules/switch/Switch.controller.js +33 -0
  119. package/dist/components/molecules/switch/Switch.css +1 -0
  120. package/dist/components/molecules/switch/Switch.helpers.js +10 -0
  121. package/dist/components/molecules/switch/Switch.js +68 -0
  122. package/dist/components/molecules/switch/index.js +3 -0
  123. package/dist/components/molecules/text-input/TextInput.controller.js +36 -0
  124. package/dist/components/molecules/text-input/TextInput.css +1 -0
  125. package/dist/components/molecules/text-input/TextInput.helpers.js +18 -0
  126. package/dist/components/molecules/text-input/TextInput.js +7 -0
  127. package/dist/components/molecules/text-input/TextInputButtons.js +37 -0
  128. package/dist/components/molecules/text-input/TextInputStateful.js +92 -0
  129. package/dist/components/molecules/text-input/TextInputStateless.js +89 -0
  130. package/dist/components/molecules/text-input/index.js +3 -0
  131. package/dist/components/organisms/dialog/Dialog.css +1 -0
  132. package/dist/components/organisms/dialog/Dialog.js +32 -0
  133. package/dist/components/organisms/dialog/index.js +3 -0
  134. package/dist/components/organisms/form/Form.controller.js +29 -0
  135. package/dist/components/organisms/form/Form.css +1 -0
  136. package/dist/components/organisms/form/Form.helpers.js +14 -0
  137. package/dist/components/organisms/form/Form.js +48 -0
  138. package/dist/components/organisms/form/index.js +3 -0
  139. package/dist/components/organisms/grid/Grid.controller.js +34 -0
  140. package/dist/components/organisms/grid/Grid.css +1 -0
  141. package/dist/components/organisms/grid/Grid.helpers.js +15 -0
  142. package/dist/components/organisms/grid/Grid.js +60 -0
  143. package/dist/components/organisms/grid/body/GridBody.css +1 -0
  144. package/dist/components/organisms/grid/body/GridBody.js +31 -0
  145. package/dist/components/organisms/grid/checkbox/GridCheckbox.css +1 -0
  146. package/dist/components/organisms/grid/checkbox/GridCheckbox.js +52 -0
  147. package/dist/components/organisms/grid/column-group/GridColumnGroup.css +1 -0
  148. package/dist/components/organisms/grid/column-group/GridColumnGroup.js +26 -0
  149. package/dist/components/organisms/grid/data-cell/GridDataCell.js +5 -0
  150. package/dist/components/organisms/grid/grid-row/GridRow.css +1 -0
  151. package/dist/components/organisms/grid/grid-row/GridRow.js +35 -0
  152. package/dist/components/organisms/grid/grid-row/index.js +3 -0
  153. package/dist/components/organisms/grid/head/GridHead.css +1 -0
  154. package/dist/components/organisms/grid/head/GridHead.js +35 -0
  155. package/dist/components/organisms/grid/header-cell/HeaderCell.js +8 -0
  156. package/dist/components/organisms/grid/header-cell/index.js +2 -0
  157. package/dist/components/organisms/grid/index.js +3 -0
  158. package/dist/components/organisms/grid/select-all-grid-rows-cell/SelectAllGridRowsCell.js +24 -0
  159. package/dist/components/organisms/grid/select-all-grid-rows-cell/index.js +2 -0
  160. package/dist/components/organisms/grid/select-grid-row-cell/SelectGridRowCell.js +24 -0
  161. package/dist/components/organisms/grid/select-grid-row-cell/index.js +2 -0
  162. package/dist/components/organisms/menu/Menu.css +1 -0
  163. package/dist/components/organisms/menu/Menu.js +22 -0
  164. package/dist/components/organisms/menu/index.js +3 -0
  165. package/dist/components/organisms/menu/leaf/MenuLeaf.css +1 -0
  166. package/dist/components/organisms/menu/leaf/MenuLeaf.js +28 -0
  167. package/dist/components/organisms/menu/list-item/MenuListItem.css +1 -0
  168. package/dist/components/organisms/menu/list-item/MenuListItem.js +35 -0
  169. package/dist/components/organisms/menu/sub-menu/SubMenu.css +1 -0
  170. package/dist/components/organisms/menu/sub-menu/SubMenu.js +67 -0
  171. package/dist/components/organisms/menu/sub-menu/index.js +3 -0
  172. package/dist/components/organisms/tabs/Tabs.css +1 -0
  173. package/dist/components/organisms/tabs/Tabs.js +80 -0
  174. package/dist/components/organisms/tabs/button/TabButton.css +1 -0
  175. package/dist/components/organisms/tabs/button/TabButton.js +111 -0
  176. package/dist/components/organisms/tabs/content/TabContent.css +1 -0
  177. package/dist/components/organisms/tabs/content/TabContent.js +19 -0
  178. package/dist/components/organisms/tabs/edit-input/TabEditInput.css +1 -0
  179. package/dist/components/organisms/tabs/edit-input/TabEditInput.js +64 -0
  180. package/dist/components/organisms/tabs/index.js +3 -0
  181. package/dist/components/organisms/tabs/list/TabList.css +1 -0
  182. package/dist/components/organisms/tabs/list/TabList.js +67 -0
  183. package/dist/enums/alert-mode.js +4 -0
  184. package/dist/enums/button-view.js +4 -0
  185. package/dist/enums/element-size.js +4 -0
  186. package/dist/enums/icon-name.js +4 -0
  187. package/dist/enums/index.js +8 -0
  188. package/dist/enums/loader-view.js +4 -0
  189. package/dist/enums/orientation-mode.js +4 -0
  190. package/dist/enums/semantic-color.js +4 -0
  191. package/dist/enums/tooltip-container.js +4 -0
  192. package/dist/hooks/index.js +15 -0
  193. package/dist/hooks/use-auto-close/index.js +2 -0
  194. package/dist/hooks/use-auto-close/use-auto-close.js +18 -0
  195. package/dist/hooks/use-click-outside/index.js +2 -0
  196. package/dist/hooks/use-click-outside/use-click-outside.js +19 -0
  197. package/dist/hooks/use-container-dimensions/index.js +2 -0
  198. package/dist/hooks/use-container-dimensions/use-container-dimensions.js +16 -0
  199. package/dist/hooks/use-debounce/index.js +2 -0
  200. package/dist/hooks/use-debounce/use-debounce.js +15 -0
  201. package/dist/hooks/use-element-ids/index.js +2 -0
  202. package/dist/hooks/use-element-ids/use-element-ids.js +12 -0
  203. package/dist/hooks/use-is-hovered/index.js +2 -0
  204. package/dist/hooks/use-is-hovered/use-is-hovered.js +15 -0
  205. package/dist/hooks/use-is-mounted/index.js +2 -0
  206. package/dist/hooks/use-is-mounted/use-is-mounted.js +15 -0
  207. package/dist/hooks/use-is-overflow/index.js +2 -0
  208. package/dist/hooks/use-is-overflow/use-is-overflow.js +27 -0
  209. package/dist/hooks/use-key-press/index.js +2 -0
  210. package/dist/hooks/use-key-press/use-key-press.js +14 -0
  211. package/dist/hooks/use-modal-focus-trap/index.js +2 -0
  212. package/dist/hooks/use-modal-focus-trap/use-modal-focus-trap.js +20 -0
  213. package/dist/hooks/use-remaining-timer/index.js +2 -0
  214. package/dist/hooks/use-remaining-timer/use-remaining-timer.js +38 -0
  215. package/dist/hooks/use-reset-form-input/index.js +2 -0
  216. package/dist/hooks/use-reset-form-input/use-reset-form-input.js +11 -0
  217. package/dist/hooks/use-theme/index.js +2 -0
  218. package/dist/hooks/use-theme/use-theme.js +6 -0
  219. package/dist/hooks/use-tooltip-position/index.js +2 -0
  220. package/dist/hooks/use-tooltip-position/use-tooltip-position.js +31 -0
  221. package/dist/hooks/use-window-dimensions/index.js +2 -0
  222. package/dist/hooks/use-window-dimensions/use-window-dimensions.js +17 -0
  223. package/dist/index.d.ts +329 -71
  224. package/dist/index.es.js +109 -4667
  225. package/dist/styles/icons.css +1 -0
  226. package/dist/styles/main.css +1 -0
  227. package/dist/utils/get-class-name.js +16 -0
  228. package/dist/utils/handle-dropdown-list-key-press.js +32 -0
  229. package/dist/utils/index.js +3 -0
  230. package/dist/utils/move-focus-on-element-by-id.js +7 -0
  231. package/package.json +80 -23
  232. package/dist/favicon.ico +0 -0
  233. package/dist/index.cjs.js +0 -7
  234. package/dist/index.cjs.js.map +0 -1
  235. package/dist/index.css +0 -1
  236. package/dist/index.es.js.map +0 -1
  237. package/dist/logo.jpeg +0 -0
  238. package/dist/logo.png +0 -0
@@ -0,0 +1,42 @@
1
+ import { useState as y, useRef as s, useEffect as E, useCallback as r } from "react";
2
+ import { useDebounce as B } from "../../../hooks/use-debounce/use-debounce.js";
3
+ function x({
4
+ onSearch: o,
5
+ onClear: i,
6
+ maxLength: S = 50,
7
+ minLength: b = 1,
8
+ searchMode: c = "automatic",
9
+ debounceDelay: d = 500
10
+ }) {
11
+ const [e, h] = y(""), f = c === "manual", g = !f, p = e.length > 0, a = e.length >= b && e.trim().length > 0 && e.length <= S, u = B(e, d), n = s(o), V = s(c), m = s(a);
12
+ n.current = o, V.current = c, m.current = a, E(() => {
13
+ u.trim().length > 0 && V.current === "automatic" && m.current && n.current?.(u);
14
+ }, [u]);
15
+ const C = r((t) => {
16
+ const R = t.target.value;
17
+ h(R);
18
+ }, []), l = r(() => {
19
+ h(""), i?.();
20
+ }, [i]), k = r(() => {
21
+ n.current?.(e);
22
+ }, [e]), D = r(
23
+ (t) => {
24
+ t.key === "Enter" ? (t.preventDefault(), n.current && n.current(e)) : t.key === "Escape" && (t.preventDefault(), l());
25
+ },
26
+ [l, e]
27
+ );
28
+ return {
29
+ searchValue: e,
30
+ isSearchButtonVisible: f,
31
+ isLabelIconVisible: g,
32
+ isClearButtonVisible: p,
33
+ isSearchValueValid: a,
34
+ handleChange: C,
35
+ handleClear: l,
36
+ handleSearchClick: k,
37
+ handleKeyDown: D
38
+ };
39
+ }
40
+ export {
41
+ x as useSearchController
42
+ };
@@ -0,0 +1 @@
1
+ .cl-search{display:flex;flex-direction:column;gap:var(--cl-m-gap);width:100%}.cl-search input[type=search]::-webkit-search-decoration,.cl-search input[type=search]::-webkit-search-cancel-button,.cl-search input[type=search]::-webkit-search-results-button,.cl-search input[type=search]::-webkit-search-results-decoration{display:none;-webkit-appearance:none}.cl-search input[type=search]::-ms-clear,.cl-search input[type=search]::-ms-reveal{display:none;width:0;height:0}.cl-search input:placeholder-shown+span{display:inline-block}
@@ -0,0 +1,112 @@
1
+ import { jsxs as m, jsx as e } from "react/jsx-runtime";
2
+ import { getClassName as W } from "../../../utils/get-class-name.js";
3
+ import { useRef as $ } from "react";
4
+ import './Search.css';/* empty css */
5
+ import { useSearchController as z } from "./Search.controller.js";
6
+ import { useElementIds as A } from "../../../hooks/use-element-ids/use-element-ids.js";
7
+ import G from "../../atoms/label/Label.js";
8
+ import { IconName as r } from "../../../enums/icon-name.js";
9
+ import H from "../../atoms/input/Input.js";
10
+ import u from "../../atoms/button/Button.js";
11
+ import { ButtonView as f } from "../../../enums/button-view.js";
12
+ const oe = ({
13
+ label: i,
14
+ onSearch: h,
15
+ onBlur: p,
16
+ onFocus: d,
17
+ onClear: C,
18
+ id: I,
19
+ tabIndex: S,
20
+ className: V,
21
+ maxLength: n = 50,
22
+ minLength: t = 1,
23
+ searchMode: b = "automatic",
24
+ name: v = "q",
25
+ placeholder: w = "Type to search...",
26
+ disabled: a = !1,
27
+ clearable: y = !0,
28
+ spellCheck: B = !1,
29
+ autoComplete: k = "off",
30
+ debounceDelay: D = 500,
31
+ required: l,
32
+ ...N
33
+ }) => {
34
+ const { elementId: s } = A(I), o = $(null), j = W(["cl-search", V]), {
35
+ searchValue: x,
36
+ isSearchButtonVisible: K,
37
+ isLabelIconVisible: c,
38
+ isClearButtonVisible: P,
39
+ isSearchValueValid: R,
40
+ handleChange: g,
41
+ handleClear: q,
42
+ handleSearchClick: E,
43
+ handleKeyDown: F
44
+ } = z({
45
+ onSearch: h,
46
+ onClear: C,
47
+ maxLength: n,
48
+ minLength: t,
49
+ searchMode: b,
50
+ debounceDelay: D
51
+ }), T = () => {
52
+ q(), o.current && o.current.focus();
53
+ };
54
+ return /* @__PURE__ */ m("div", { ...N, className: j, children: [
55
+ /* @__PURE__ */ e(
56
+ G,
57
+ {
58
+ label: i,
59
+ required: !!l,
60
+ inputId: s,
61
+ icon: c ? r.Search : void 0,
62
+ iconPosition: c ? "left" : void 0
63
+ }
64
+ ),
65
+ /* @__PURE__ */ e(
66
+ H,
67
+ {
68
+ ref: o,
69
+ id: s,
70
+ name: v,
71
+ type: "search",
72
+ value: x,
73
+ onChange: g,
74
+ onKeyDown: F,
75
+ onBlur: p,
76
+ onFocus: d,
77
+ disabled: a,
78
+ placeholder: w,
79
+ autoComplete: k,
80
+ maxLength: n,
81
+ minLength: t,
82
+ spellCheck: B,
83
+ tabIndex: S,
84
+ required: l,
85
+ children: /* @__PURE__ */ m("span", { children: [
86
+ y && P && /* @__PURE__ */ e(
87
+ u,
88
+ {
89
+ view: f.Inner,
90
+ onClick: T,
91
+ label: `Clear search input for ${i}`,
92
+ icon: r.Delete
93
+ }
94
+ ),
95
+ K && /* @__PURE__ */ e(
96
+ u,
97
+ {
98
+ view: f.Inner,
99
+ onClick: E,
100
+ label: "Perform search",
101
+ icon: r.Search,
102
+ disabled: a || !R
103
+ }
104
+ )
105
+ ] })
106
+ }
107
+ )
108
+ ] });
109
+ };
110
+ export {
111
+ oe as default
112
+ };
@@ -0,0 +1,3 @@
1
+ export { default } from './Search.js';
2
+ export * from './Search.js';
3
+ import './Search.css';
@@ -0,0 +1,32 @@
1
+ import { useContext as I, useState as d, useRef as f, useCallback as x } from "react";
2
+ import { getSelectInitialValue as b } from "./Select.helpers.js";
3
+ import { FormContext as k } from "../../contexts/form/FormContext.js";
4
+ import { useResetFormInput as w } from "../../../hooks/use-reset-form-input/use-reset-form-input.js";
5
+ function y({
6
+ name: e,
7
+ defaultValue: m,
8
+ onChange: c,
9
+ options: u
10
+ }) {
11
+ const { onChangeFormInput: t, initialValues: p } = I(k), n = b({ name: e, options: u, defaultValue: m, initialValues: p }), [a, o] = d(!1), [C, l] = d(n), i = f(t), r = f(n);
12
+ i.current = t, r.current = n;
13
+ const h = () => o(!1), R = () => o(!a), S = (v) => {
14
+ const s = u.find((F) => F.id === v);
15
+ l(s), c?.(s), t?.({ name: e, value: s?.id });
16
+ }, V = () => {
17
+ l(void 0), c?.(void 0);
18
+ }, g = x(() => {
19
+ o(!1), l(r.current), i.current?.({ name: e, value: r.current?.id });
20
+ }, [e]);
21
+ return w(g), {
22
+ selected: C,
23
+ opened: a,
24
+ handleClear: V,
25
+ handleClose: h,
26
+ handleToggle: R,
27
+ handleSelect: S
28
+ };
29
+ }
30
+ export {
31
+ y as useSelectController
32
+ };
@@ -0,0 +1 @@
1
+ .cl-select{position:relative;display:flex;justify-content:space-between;flex-direction:column;gap:var(--cl-m-gap);background:transparent}
@@ -0,0 +1,16 @@
1
+ function d({
2
+ name: o,
3
+ options: n,
4
+ initialValues: t,
5
+ defaultValue: r
6
+ }) {
7
+ let f;
8
+ if (t && Object.hasOwn(t, o)) {
9
+ const c = t[o];
10
+ f = c?.id ?? c;
11
+ }
12
+ return !t?.[o] && r && typeof r == "string" && (f = r), n.find((c) => c.id === f);
13
+ }
14
+ export {
15
+ d as getSelectInitialValue
16
+ };
@@ -0,0 +1,64 @@
1
+ import { jsxs as g, jsx as t } from "react/jsx-runtime";
2
+ import { getClassName as y } from "../../../utils/get-class-name.js";
3
+ import { useRef as N } from "react";
4
+ import './Select.css';/* empty css */
5
+ import { SelectCombobox as j } from "./combobox/Combobox.js";
6
+ import { SelectDropdown as w } from "./dropdown/Dropdown.js";
7
+ import { useSelectController as E } from "./Select.controller.js";
8
+ import { useElementIds as K } from "../../../hooks/use-element-ids/use-element-ids.js";
9
+ import { useClickOutside as O } from "../../../hooks/use-click-outside/use-click-outside.js";
10
+ import { useKeyPress as P } from "../../../hooks/use-key-press/use-key-press.js";
11
+ import v from "../../atoms/label/Label.js";
12
+ const M = ({
13
+ options: s,
14
+ onChange: a,
15
+ name: r,
16
+ label: i,
17
+ defaultValue: p,
18
+ id: f,
19
+ placeholder: C = "Not selected",
20
+ required: m = !1,
21
+ disabled: u = !1,
22
+ className: b,
23
+ ...x
24
+ }) => {
25
+ const e = N(null), { elementId: o, dropdownId: c } = K(f), { handleClear: I, handleClose: l, handleSelect: S, handleToggle: h, selected: n, opened: d } = E({
26
+ options: s,
27
+ onChange: a,
28
+ defaultValue: p,
29
+ name: r
30
+ }), k = y(["cl-select", b]);
31
+ return O({ ref: e, onClickOutsideHandler: l }), P({ keyCode: "Escape", ref: e, onKeyPress: l }), /* @__PURE__ */ g("div", { ref: e, ...x, className: k, children: [
32
+ /* @__PURE__ */ t(v, { label: i, required: m, inputId: o }),
33
+ /* @__PURE__ */ t(
34
+ j,
35
+ {
36
+ name: r,
37
+ opened: d,
38
+ comboboxId: o,
39
+ dropdownId: c,
40
+ onClick: h,
41
+ selected: n,
42
+ placeholder: C,
43
+ disabled: u,
44
+ required: m
45
+ }
46
+ ),
47
+ /* @__PURE__ */ t(
48
+ w,
49
+ {
50
+ options: s,
51
+ selected: n,
52
+ opened: d,
53
+ onClose: l,
54
+ dropdownId: c,
55
+ comboboxId: o,
56
+ onSelect: S,
57
+ onClear: I
58
+ }
59
+ )
60
+ ] });
61
+ };
62
+ export {
63
+ M as default
64
+ };
@@ -0,0 +1 @@
1
+ .cl-select-combobox{text-align:left;cursor:pointer;display:flex;justify-content:space-between;align-items:center;gap:var(--cl-m-gap);padding:var(--cl-m-gap);border:var(--cl-light-border);border-radius:var(--cl-border-radius);white-space:nowrap;text-overflow:ellipsis;overflow:hidden;background-color:var(--cl-surface-a10)}.cl-select-combobox>span:nth-child(1){color:var(--cl-base-font-color);overflow:hidden;text-overflow:ellipsis;font-family:var(--cl-core-font);font-size:var(--cl-typography-base-mobile);font-weight:400;line-height:1.5;letter-spacing:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media(min-width:640px){.cl-select-combobox>span:nth-child(1){font-size:var(--cl-typography-base-tablet)}}@media(min-width:1024px){.cl-select-combobox>span:nth-child(1){font-size:var(--cl-typography-base-desktop)}}.cl-select-combobox:focus-visible{outline:var(--cl-outline-border);outline-offset:2px}.cl-select-combobox[disabled]{pointer-events:none;opacity:.5}.cl-select-combobox__icon{transition:transform .3s ease}.cl-select-combobox__icon_opened{transform:rotate(180deg)}
@@ -0,0 +1,46 @@
1
+ import { jsxs as b, jsx as e } from "react/jsx-runtime";
2
+ import { getClassName as p } from "../../../../utils/get-class-name.js";
3
+ import './Combobox.css';/* empty css */
4
+ import x from "../../../atoms/icon/Icon.js";
5
+ import { ElementSize as d } from "../../../../enums/element-size.js";
6
+ import { IconName as u } from "../../../../enums/icon-name.js";
7
+ const j = ({
8
+ opened: r,
9
+ onClick: a,
10
+ comboboxId: l,
11
+ dropdownId: m,
12
+ selected: o,
13
+ name: c,
14
+ placeholder: i,
15
+ disabled: n,
16
+ required: t
17
+ }) => {
18
+ const s = p([
19
+ "cl-select-combobox__icon",
20
+ { "cl-select-combobox__icon_opened": r }
21
+ ]);
22
+ return /* @__PURE__ */ b(
23
+ "button",
24
+ {
25
+ type: "button",
26
+ name: c,
27
+ value: o?.id,
28
+ role: "combobox",
29
+ "aria-haspopup": "listbox",
30
+ "aria-expanded": r,
31
+ "aria-controls": m,
32
+ id: l,
33
+ onClick: a,
34
+ disabled: n,
35
+ "aria-required": t,
36
+ className: "cl-select-combobox",
37
+ children: [
38
+ o?.label ? /* @__PURE__ */ e("span", { children: o?.label }) : /* @__PURE__ */ e("span", { children: i }),
39
+ /* @__PURE__ */ e(x, { name: u.ChevronDown, className: s, size: d.Small })
40
+ ]
41
+ }
42
+ );
43
+ };
44
+ export {
45
+ j as SelectCombobox
46
+ };
@@ -0,0 +1,3 @@
1
+ export { default } from './Combobox.js';
2
+ export * from './Combobox.js';
3
+ import './Combobox.css';
@@ -0,0 +1 @@
1
+ .cl-select-dropdown{visibility:hidden;opacity:0;transition:visibility 0s,opacity .3s linear;position:absolute;background:var(--cl-base-background-color);margin:0;padding:0;list-style:none;z-index:var(--cl-z-index-popup);width:100%;border:var(--cl-light-border);border-radius:var(--cl-border-radius);box-shadow:var(--cl-box-shadow);overflow-y:auto;max-height:180px;left:0;top:76px;background-color:var(--cl-surface-a10)}@media screen and (min-width:640px){.cl-select-dropdown{top:82px;max-height:220px}}@media screen and (min-width:1024px){.cl-select-dropdown{top:88px;max-height:260px}}.cl-select-dropdown_opened{visibility:visible;opacity:1}
@@ -0,0 +1,46 @@
1
+ import { jsx as t } from "react/jsx-runtime";
2
+ import { getClassName as a } from "../../../../utils/get-class-name.js";
3
+ import { handleDropdownListKeyPress as w } from "../../../../utils/handle-dropdown-list-key-press.js";
4
+ import { moveFocusOnElementById as f } from "../../../../utils/move-focus-on-element-by-id.js";
5
+ import './Dropdown.css';/* empty css */
6
+ import { SelectOption as u } from "../option/Option.js";
7
+ const b = ({
8
+ options: e,
9
+ opened: d,
10
+ onClose: r,
11
+ onSelect: l,
12
+ dropdownId: n,
13
+ comboboxId: s,
14
+ selected: c,
15
+ onClear: p
16
+ }) => {
17
+ const m = (o) => {
18
+ l(o), r(), f(s);
19
+ }, i = a([
20
+ "cl-select-dropdown",
21
+ { "cl-select-dropdown_opened": d }
22
+ ]);
23
+ return /* @__PURE__ */ t(
24
+ "ul",
25
+ {
26
+ role: "listbox",
27
+ id: n,
28
+ tabIndex: -1,
29
+ onKeyDown: (o) => w({ e: o, options: e, onClose: r }),
30
+ className: i,
31
+ children: e.map((o) => /* @__PURE__ */ t(
32
+ u,
33
+ {
34
+ value: o,
35
+ onSelect: () => m(o.id),
36
+ onClear: p,
37
+ selected: o.id === c?.id
38
+ },
39
+ o.id
40
+ ))
41
+ }
42
+ );
43
+ };
44
+ export {
45
+ b as SelectDropdown
46
+ };
@@ -0,0 +1,3 @@
1
+ export { default } from './Dropdown.js';
2
+ export * from './Dropdown.js';
3
+ import './Dropdown.css';
@@ -0,0 +1,3 @@
1
+ export { default } from './Select.js';
2
+ export * from './Select.js';
3
+ import './Select.css';
@@ -0,0 +1 @@
1
+ .cl-select-option{padding:var(--cl-m-gap);cursor:pointer;display:flex;justify-content:space-between;align-items:baseline;gap:var(--cl-m-gap);color:var(--cl-base-font-color);font-family:var(--cl-core-font);font-size:var(--cl-typography-base-mobile);font-weight:400;line-height:1.5;letter-spacing:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media(min-width:640px){.cl-select-option{font-size:var(--cl-typography-base-tablet)}}@media(min-width:1024px){.cl-select-option{font-size:var(--cl-typography-base-desktop)}}.cl-select-option:hover,.cl-select-option:active{text-shadow:var(--cl-text-shadow)}.cl-select-option:focus-visible{outline:var(--cl-outline-border);outline-offset:-4px}.cl-select-option svg{color:var(--cl-base-font-color);width:var(--cl-icon-size);height:var(--cl-icon-size)}.cl-select-option_selected svg{color:var(--cl-accent-a0)}.cl-select-option_multi{justify-content:flex-start}
@@ -0,0 +1,38 @@
1
+ import { jsxs as p, jsx as l } from "react/jsx-runtime";
2
+ import { getClassName as f } from "../../../../utils/get-class-name.js";
3
+ import './Option.css';/* empty css */
4
+ import h from "../../../atoms/icon/Icon.js";
5
+ import { ElementSize as d } from "../../../../enums/element-size.js";
6
+ import { IconName as S } from "../../../../enums/icon-name.js";
7
+ const I = ({ value: c, selected: e, onSelect: i, onClear: r }) => {
8
+ const { id: o, label: s } = c, m = f(["cl-select-option", { "cl-select-option_selected": e }]), t = (n) => {
9
+ e ? r() : i(n);
10
+ };
11
+ return /* @__PURE__ */ p(
12
+ "li",
13
+ {
14
+ id: o,
15
+ role: "option",
16
+ "aria-selected": e,
17
+ tabIndex: 0,
18
+ onKeyDown: ((n) => (a) => {
19
+ switch (a.key) {
20
+ case " ":
21
+ case "SpaceBar":
22
+ case "Enter":
23
+ a.preventDefault(), t(n);
24
+ break;
25
+ }
26
+ })(o),
27
+ onClick: () => t(o),
28
+ className: m,
29
+ children: [
30
+ /* @__PURE__ */ l("span", { children: s }),
31
+ e && /* @__PURE__ */ l(h, { name: S.Check, size: d.Small })
32
+ ]
33
+ }
34
+ );
35
+ };
36
+ export {
37
+ I as SelectOption
38
+ };
@@ -0,0 +1,3 @@
1
+ export { default } from './Option.js';
2
+ export * from './Option.js';
3
+ import './Option.css';
@@ -0,0 +1,33 @@
1
+ import { useContext as I, useState as d, useRef as s, useCallback as i } from "react";
2
+ import { getSwitchInitialValue as g } from "./Switch.helpers.js";
3
+ import { FormContext as k } from "../../contexts/form/FormContext.js";
4
+ import { useResetFormInput as F } from "../../../hooks/use-reset-form-input/use-reset-form-input.js";
5
+ function S({
6
+ name: e,
7
+ defaultChecked: p,
8
+ onChange: l
9
+ }) {
10
+ const { onChangeFormInput: a, initialValues: C } = I(k), n = g({ initialValues: C, name: e, defaultChecked: p }), [r, f] = d(n), o = s(a), u = s(n), h = s(l);
11
+ o.current = a, u.current = n, h.current = l;
12
+ const c = i(
13
+ (t) => {
14
+ f(t), h.current?.(t), o.current?.({ name: e, value: t });
15
+ },
16
+ [e]
17
+ ), m = i(
18
+ (t) => {
19
+ (t.key === " " || t.key === "Enter") && (t.preventDefault(), c(!r));
20
+ },
21
+ [r, c]
22
+ ), R = i(() => {
23
+ f(u.current), o.current?.({ name: e, value: u.current });
24
+ }, [e]);
25
+ return F(R), {
26
+ checked: r,
27
+ handleChange: c,
28
+ handleKeyDown: m
29
+ };
30
+ }
31
+ export {
32
+ S as useSwitchController
33
+ };
@@ -0,0 +1 @@
1
+ .cl-switch{display:inline-flex;justify-content:flex-start;align-items:center;gap:var(--cl-l-gap);padding:var(--cl-m-gap);border:none;background:none;cursor:pointer;-webkit-user-select:none;user-select:none;transition:all .2s ease;border-radius:var(--cl-border-radius);outline:none;background-position:center}.cl-switch:hover{text-shadow:var(--cl-text-shadow)}.cl-switch:focus-visible{outline:var(--cl-outline-border)}.cl-switch__input{position:absolute;opacity:0;pointer-events:none}.cl-switch__label{color:var(--cl-base-font-color);font-family:var(--cl-core-font);font-size:var(--cl-typography-base-mobile);font-weight:400;line-height:1.5;letter-spacing:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media(min-width:640px){.cl-switch__label{font-size:var(--cl-typography-base-tablet)}}@media(min-width:1024px){.cl-switch__label{font-size:var(--cl-typography-base-desktop)}}.cl-switch__track{position:relative;width:52px;height:28px;background-color:var(--cl-surface-a10);border-radius:14px;transition:background-color .2s ease;order:3;flex-shrink:0}.cl-switch__checked .cl-switch__track{background-color:var(--cl-accent-a0)}.cl-switch__thumb{position:absolute;top:2px;left:2px;width:var(--cl-thumb-size);height:var(--cl-thumb-size);background-color:var(--cl-base-background-color);border-radius:50%;box-shadow:var(--cl-box-shadow);transition:transform .2s ease}.cl-switch__checked .cl-switch__thumb{transform:translate(24px)}.cl-switch__indicator{color:var(--cl-accent-a0);text-transform:uppercase;display:inline-block;width:var(--cl-thumb-size);text-align:center;font-family:var(--cl-core-font);font-size:var(--cl-typography-small-mobile);font-weight:400;line-height:1.5;letter-spacing:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media(min-width:640px){.cl-switch__indicator{font-size:var(--cl-typography-small-tablet)}}@media(min-width:1024px){.cl-switch__indicator{font-size:var(--cl-typography-small-desktop)}}.cl-switch_disabled{pointer-events:none;opacity:.5}
@@ -0,0 +1,10 @@
1
+ function e({
2
+ defaultChecked: r,
3
+ initialValues: t,
4
+ name: o
5
+ }) {
6
+ return t?.[o] !== void 0 ? !!t?.[o] : !!r;
7
+ }
8
+ export {
9
+ e as getSwitchInitialValue
10
+ };
@@ -0,0 +1,68 @@
1
+ import { jsxs as p, jsx as e } from "react/jsx-runtime";
2
+ import { getClassName as _ } from "../../../utils/get-class-name.js";
3
+ import { useSwitchController as k } from "./Switch.controller.js";
4
+ import './Switch.css';/* empty css */
5
+ const y = ({
6
+ checked: l,
7
+ onChange: i,
8
+ label: s,
9
+ disabled: t = !1,
10
+ className: n,
11
+ id: h,
12
+ name: a,
13
+ value: r = "on",
14
+ hasIndicator: o
15
+ }) => {
16
+ const {
17
+ checked: c,
18
+ handleChange: d,
19
+ handleKeyDown: w
20
+ } = k({
21
+ name: a,
22
+ defaultChecked: l,
23
+ onChange: i
24
+ }), m = _([
25
+ "cl-switch",
26
+ n,
27
+ {
28
+ "cl-switch__checked": c,
29
+ "cl-switch_disabled": t
30
+ }
31
+ ]);
32
+ return /* @__PURE__ */ p(
33
+ "div",
34
+ {
35
+ role: "switch",
36
+ "aria-checked": c,
37
+ "aria-label": s,
38
+ tabIndex: t ? -1 : 0,
39
+ className: m,
40
+ onClick: () => {
41
+ t || d(!c);
42
+ },
43
+ onKeyDown: w,
44
+ id: h,
45
+ children: [
46
+ /* @__PURE__ */ e(
47
+ "input",
48
+ {
49
+ type: "checkbox",
50
+ name: a,
51
+ value: r,
52
+ checked: c,
53
+ disabled: t,
54
+ className: "cl-switch__input",
55
+ readOnly: !0,
56
+ "data-testid": "switch-input"
57
+ }
58
+ ),
59
+ /* @__PURE__ */ e("span", { className: "cl-switch__label", children: s }),
60
+ o && /* @__PURE__ */ e("span", { className: "cl-switch__indicator", "aria-hidden": "true", children: c ? "On" : "Off" }),
61
+ /* @__PURE__ */ e("span", { className: "cl-switch__track", children: /* @__PURE__ */ e("span", { className: "cl-switch__thumb" }) })
62
+ ]
63
+ }
64
+ );
65
+ };
66
+ export {
67
+ y as default
68
+ };
@@ -0,0 +1,3 @@
1
+ export { default } from './Switch.js';
2
+ export * from './Switch.js';
3
+ import './Switch.css';
@@ -0,0 +1,36 @@
1
+ import { useContext as T, useState as l, useRef as p, useCallback as P } from "react";
2
+ import { getTextInputInitialValue as b, validateTextInputValue as k } from "./TextInput.helpers.js";
3
+ import { FormContext as j } from "../../contexts/form/FormContext.js";
4
+ import { useResetFormInput as q } from "../../../hooks/use-reset-form-input/use-reset-form-input.js";
5
+ function D({
6
+ name: t,
7
+ defaultValue: v,
8
+ onChange: f,
9
+ onClear: h,
10
+ required: m,
11
+ validator: C
12
+ }) {
13
+ const { onChangeFormInput: e, initialValues: g } = T(j), n = b({ initialValues: g, defaultValue: v, name: t }), [I, o] = l(n), [V, r] = l(!0), [s, x] = l(!1), i = p(e), u = p(n);
14
+ i.current = e, u.current = n;
15
+ const w = (c) => {
16
+ const a = c.target.value, d = k({ value: a, required: m, validator: C });
17
+ o(a), r(d), e?.({ name: t, value: a, valid: d }), f?.(c);
18
+ }, R = () => {
19
+ o(""), r(!0), e?.({ name: t, value: "", valid: !0 }), h?.();
20
+ }, F = P(() => {
21
+ o(u.current), r(!0), i.current?.({ name: t, value: u.current, valid: !0 });
22
+ }, [t]), S = () => {
23
+ x(!s);
24
+ };
25
+ return q(F), {
26
+ value: I,
27
+ valid: V,
28
+ passwordShown: s,
29
+ handleChange: w,
30
+ handleClear: R,
31
+ togglePassword: S
32
+ };
33
+ }
34
+ export {
35
+ D as useTextInputController
36
+ };
@@ -0,0 +1 @@
1
+ .cl-text-input{display:flex;flex-direction:column;gap:var(--cl-m-gap);width:100%}.cl-text-input__error-message{position:absolute;right:0;top:44px}@media screen and (min-width:640px){.cl-text-input__error-message{top:48px}}@media screen and (min-width:1024px){.cl-text-input__error-message{top:52px}}
@@ -0,0 +1,18 @@
1
+ function r({
2
+ value: e,
3
+ required: n,
4
+ validator: t
5
+ }) {
6
+ return n && !t && !e.length ? !1 : t && typeof t == "function" ? t(e) : t && typeof t == "object" ? new RegExp(t.regexp, t?.flags).test(e) : !0;
7
+ }
8
+ function f({
9
+ name: e,
10
+ initialValues: n,
11
+ defaultValue: t
12
+ }) {
13
+ return n?.[e] ? n[e].toString() : t && typeof t == "string" ? t : "";
14
+ }
15
+ export {
16
+ f as getTextInputInitialValue,
17
+ r as validateTextInputValue
18
+ };
@@ -0,0 +1,7 @@
1
+ import { jsx as e } from "react/jsx-runtime";
2
+ import r from "./TextInputStateful.js";
3
+ import u from "./TextInputStateless.js";
4
+ const o = (t) => t.stateless ? /* @__PURE__ */ e(u, { ...t }) : /* @__PURE__ */ e(r, { ...t });
5
+ export {
6
+ o as default
7
+ };