@adam-milo/ui 1.0.32 → 1.0.34

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 (152) hide show
  1. package/dist/index.cjs +1 -1
  2. package/dist/index.js +58 -22
  3. package/dist/index10.cjs +1 -1
  4. package/dist/index10.js +94 -56
  5. package/dist/index11.cjs +1 -1
  6. package/dist/index11.js +199 -40
  7. package/dist/index12.cjs +1 -1
  8. package/dist/index12.js +305 -105
  9. package/dist/index13.cjs +1 -1
  10. package/dist/index13.js +260 -74
  11. package/dist/index14.cjs +1 -1
  12. package/dist/index14.js +135 -27
  13. package/dist/index15.cjs +1 -1
  14. package/dist/index15.js +52 -469
  15. package/dist/index16.cjs +1 -1
  16. package/dist/index16.js +57 -111
  17. package/dist/index17.cjs +1 -1
  18. package/dist/index17.js +101 -20
  19. package/dist/index18.cjs +1 -1
  20. package/dist/index18.js +76 -21
  21. package/dist/index19.cjs +1 -1
  22. package/dist/index19.js +25 -29
  23. package/dist/index2.cjs +1 -1
  24. package/dist/index2.js +6 -4
  25. package/dist/index20.cjs +1 -1
  26. package/dist/index20.js +468 -31
  27. package/dist/index21.cjs +1 -1
  28. package/dist/index21.js +155 -41
  29. package/dist/index22.cjs +1 -1
  30. package/dist/index22.js +42 -12
  31. package/dist/index23.cjs +1 -0
  32. package/dist/index23.js +38 -0
  33. package/dist/index24.cjs +1 -1
  34. package/dist/index24.js +32 -287
  35. package/dist/index25.cjs +1 -1
  36. package/dist/index25.js +115 -13
  37. package/dist/index26.cjs +1 -0
  38. package/dist/index26.js +55 -0
  39. package/dist/index27.cjs +1 -0
  40. package/dist/index27.js +45 -0
  41. package/dist/index28.cjs +1 -0
  42. package/dist/index28.js +53 -0
  43. package/dist/index29.cjs +1 -0
  44. package/dist/index29.js +55 -0
  45. package/dist/index3.cjs +1 -1
  46. package/dist/index3.js +33 -33
  47. package/dist/index30.cjs +1 -0
  48. package/dist/index30.js +72 -0
  49. package/dist/index31.cjs +1 -0
  50. package/dist/index31.js +14 -0
  51. package/dist/index32.cjs +1 -0
  52. package/dist/index32.js +332 -0
  53. package/dist/index36.cjs +1 -0
  54. package/dist/index36.js +386 -0
  55. package/dist/index37.cjs +1 -0
  56. package/dist/index37.js +16 -0
  57. package/dist/index4.cjs +1 -1
  58. package/dist/index4.js +59 -11
  59. package/dist/index5.cjs +1 -1
  60. package/dist/index5.js +19 -35
  61. package/dist/index6.cjs +1 -1
  62. package/dist/index6.js +11 -101
  63. package/dist/index62.cjs +1 -0
  64. package/dist/index62.js +502 -0
  65. package/dist/index64.cjs +1 -0
  66. package/dist/index64.js +11 -0
  67. package/dist/index65.cjs +1 -0
  68. package/dist/index65.js +39 -0
  69. package/dist/index66.cjs +1 -0
  70. package/dist/index66.js +64 -0
  71. package/dist/index67.cjs +1 -0
  72. package/dist/index67.js +212 -0
  73. package/dist/index68.cjs +1 -0
  74. package/dist/index68.js +14 -0
  75. package/dist/index69.cjs +1 -0
  76. package/dist/index69.js +293 -0
  77. package/dist/index7.cjs +1 -1
  78. package/dist/index7.js +46 -97
  79. package/dist/index70.cjs +1 -0
  80. package/dist/index70.js +18 -0
  81. package/dist/index71.cjs +1 -0
  82. package/dist/index71.js +129 -0
  83. package/dist/index72.cjs +1 -0
  84. package/dist/index72.js +43 -0
  85. package/dist/index73.cjs +1 -0
  86. package/dist/index73.js +99 -0
  87. package/dist/index74.cjs +1 -0
  88. package/dist/index74.js +71 -0
  89. package/dist/index75.cjs +1 -0
  90. package/dist/index75.js +36 -0
  91. package/dist/index76.cjs +1 -0
  92. package/dist/index76.js +14 -0
  93. package/dist/index77.cjs +1 -0
  94. package/dist/index77.js +17 -0
  95. package/dist/index78.cjs +1 -0
  96. package/dist/index78.js +6 -0
  97. package/dist/index79.cjs +1 -0
  98. package/dist/index79.js +297 -0
  99. package/dist/index8.cjs +1 -1
  100. package/dist/index8.js +97 -88
  101. package/dist/index80.cjs +1 -0
  102. package/dist/index80.js +25 -0
  103. package/dist/index81.cjs +1 -0
  104. package/dist/index81.js +39 -0
  105. package/dist/index82.cjs +1 -0
  106. package/dist/index82.js +625 -0
  107. package/dist/index83.cjs +1 -0
  108. package/dist/index83.js +721 -0
  109. package/dist/index84.cjs +1 -0
  110. package/dist/index84.js +154 -0
  111. package/dist/index85.cjs +1 -0
  112. package/dist/index85.js +173 -0
  113. package/dist/index9.cjs +1 -1
  114. package/dist/index9.js +55 -197
  115. package/dist/src/components/core/button/Button.component.d.ts +13 -7
  116. package/dist/src/components/core/button/Button.component.d.ts.map +1 -1
  117. package/dist/src/components/core/icon/Icon.component.d.ts +1 -1
  118. package/dist/src/components/core/icon/Icon.component.d.ts.map +1 -1
  119. package/dist/src/components/core/icon-button/IconButton.component.d.ts +36 -0
  120. package/dist/src/components/core/icon-button/IconButton.component.d.ts.map +1 -0
  121. package/dist/src/components/core/menu-icon-button/MenuIconButton.component.d.ts +79 -0
  122. package/dist/src/components/core/menu-icon-button/MenuIconButton.component.d.ts.map +1 -0
  123. package/dist/src/components/feedback/spinner/Spinner.component.d.ts +62 -0
  124. package/dist/src/components/feedback/spinner/Spinner.component.d.ts.map +1 -0
  125. package/dist/src/components/forms/input/Input.component.d.ts +5 -0
  126. package/dist/src/components/forms/input/Input.component.d.ts.map +1 -1
  127. package/dist/src/components/forms/otp-input/OTPInput.component.d.ts +82 -0
  128. package/dist/src/components/forms/otp-input/OTPInput.component.d.ts.map +1 -0
  129. package/dist/src/components/forms/phone-input/PhoneInput.component.d.ts +96 -0
  130. package/dist/src/components/forms/phone-input/PhoneInput.component.d.ts.map +1 -0
  131. package/dist/src/components/forms/phone-input/countries.d.ts +93 -0
  132. package/dist/src/components/forms/phone-input/countries.d.ts.map +1 -0
  133. package/dist/src/components/forms/select/Select.component.d.ts +5 -1
  134. package/dist/src/components/forms/select/Select.component.d.ts.map +1 -1
  135. package/dist/src/components/forms/toggle/Toggle.component.d.ts +80 -0
  136. package/dist/src/components/forms/toggle/Toggle.component.d.ts.map +1 -0
  137. package/dist/src/components/layout/auth-layout/AuthLayout.component.d.ts +86 -0
  138. package/dist/src/components/layout/auth-layout/AuthLayout.component.d.ts.map +1 -0
  139. package/dist/src/components/overlays/dialog/Dialog.component.d.ts +36 -2
  140. package/dist/src/components/overlays/dialog/Dialog.component.d.ts.map +1 -1
  141. package/dist/src/components/typography/heading/Heading.component.d.ts +92 -0
  142. package/dist/src/components/typography/heading/Heading.component.d.ts.map +1 -0
  143. package/dist/src/components/typography/link/Link.component.d.ts +80 -0
  144. package/dist/src/components/typography/link/Link.component.d.ts.map +1 -0
  145. package/dist/src/index.d.ts +24 -5
  146. package/dist/src/index.d.ts.map +1 -1
  147. package/dist/style.css +1 -1
  148. package/package.json +2 -1
  149. /package/dist/{index35.cjs → index50.cjs} +0 -0
  150. /package/dist/{index35.js → index50.js} +0 -0
  151. /package/dist/{index42.cjs → index61.cjs} +0 -0
  152. /package/dist/{index42.js → index61.js} +0 -0
package/dist/index13.js CHANGED
@@ -1,93 +1,279 @@
1
- import { jsx, jsxs } from "react/jsx-runtime";
2
- import { forwardRef } from "react";
3
- import { cn } from "./index22.js";
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { forwardRef, useId, useRef, useState, useEffect, useCallback, useImperativeHandle } from "react";
3
+ import { cn } from "./index31.js";
4
4
  /* empty css */
5
- const DataTable = forwardRef(
5
+ const OTPInput = forwardRef(
6
6
  ({
7
- columns,
8
- data,
9
- striped = false,
10
- hoverable = false,
11
- className,
7
+ length = 4,
8
+ label,
9
+ value = "",
10
+ onChange,
11
+ onComplete,
12
+ error,
13
+ helperText,
14
+ disabled = false,
15
+ autoFocus = false,
16
+ fullWidth = false,
17
+ centered = false,
18
+ type = "numeric",
19
+ required = false,
12
20
  "data-cy": dataCy,
13
- "data-testid": dataTestId,
14
- ...props
21
+ "data-testid": dataTestId
15
22
  }, ref) => {
16
- const finalDataCy = dataCy || "datatable";
17
- const finalTestId = dataTestId || "datatable";
18
- return /* @__PURE__ */ jsx(
23
+ const generatedId = useId();
24
+ const errorId = `${generatedId}-error`;
25
+ const helperId = `${generatedId}-helper`;
26
+ const finalDataCy = dataCy || "otp-input";
27
+ const finalTestId = dataTestId || "otp-input";
28
+ const inputRefs = useRef([]);
29
+ const [otp, setOtp] = useState(
30
+ () => value.split("").slice(0, length).concat(Array(length).fill("")).slice(0, length)
31
+ );
32
+ useEffect(() => {
33
+ const newOtp = value.split("").slice(0, length).concat(Array(length).fill("")).slice(0, length);
34
+ setOtp(newOtp);
35
+ }, [value, length]);
36
+ const isValidInput = useCallback(
37
+ (char) => {
38
+ if (type === "numeric") {
39
+ return /^\d$/.test(char);
40
+ }
41
+ return /^[a-zA-Z0-9]$/.test(char);
42
+ },
43
+ [type]
44
+ );
45
+ const updateOtp = useCallback(
46
+ (newOtp) => {
47
+ setOtp(newOtp);
48
+ const otpValue = newOtp.join("");
49
+ onChange == null ? void 0 : onChange(otpValue);
50
+ if (newOtp.every((digit) => digit !== "") && newOtp.length === length) {
51
+ onComplete == null ? void 0 : onComplete(otpValue);
52
+ }
53
+ },
54
+ [onChange, onComplete, length]
55
+ );
56
+ const focusInput = useCallback((index) => {
57
+ const input = inputRefs.current[index];
58
+ if (input) {
59
+ input.focus();
60
+ input.select();
61
+ }
62
+ }, []);
63
+ const handleChange = useCallback(
64
+ (index, e) => {
65
+ const inputValue = e.target.value;
66
+ if (inputValue.length === 1 && isValidInput(inputValue)) {
67
+ const newOtp = [...otp];
68
+ newOtp[index] = inputValue;
69
+ updateOtp(newOtp);
70
+ if (index < length - 1) {
71
+ focusInput(index + 1);
72
+ }
73
+ } else if (inputValue.length > 1) {
74
+ const chars = inputValue.split("").filter(isValidInput);
75
+ const newOtp = [...otp];
76
+ chars.forEach((char, i) => {
77
+ if (index + i < length) {
78
+ newOtp[index + i] = char;
79
+ }
80
+ });
81
+ updateOtp(newOtp);
82
+ const nextEmptyIndex = newOtp.findIndex((d) => d === "");
83
+ focusInput(nextEmptyIndex === -1 ? length - 1 : nextEmptyIndex);
84
+ }
85
+ },
86
+ [otp, length, isValidInput, updateOtp, focusInput]
87
+ );
88
+ const handleKeyDown = useCallback(
89
+ (index, e) => {
90
+ switch (e.key) {
91
+ case "Backspace":
92
+ e.preventDefault();
93
+ if (otp[index]) {
94
+ const newOtp = [...otp];
95
+ newOtp[index] = "";
96
+ updateOtp(newOtp);
97
+ } else if (index > 0) {
98
+ const newOtp = [...otp];
99
+ newOtp[index - 1] = "";
100
+ updateOtp(newOtp);
101
+ focusInput(index - 1);
102
+ }
103
+ break;
104
+ case "Delete":
105
+ e.preventDefault();
106
+ if (otp[index]) {
107
+ const newOtp = [...otp];
108
+ newOtp[index] = "";
109
+ updateOtp(newOtp);
110
+ }
111
+ break;
112
+ case "ArrowLeft":
113
+ e.preventDefault();
114
+ if (index > 0) {
115
+ focusInput(index - 1);
116
+ }
117
+ break;
118
+ case "ArrowRight":
119
+ e.preventDefault();
120
+ if (index < length - 1) {
121
+ focusInput(index + 1);
122
+ }
123
+ break;
124
+ case "Home":
125
+ e.preventDefault();
126
+ focusInput(0);
127
+ break;
128
+ case "End":
129
+ e.preventDefault();
130
+ focusInput(length - 1);
131
+ break;
132
+ default:
133
+ if (e.key.length === 1 && isValidInput(e.key)) {
134
+ e.preventDefault();
135
+ const newOtp = [...otp];
136
+ newOtp[index] = e.key;
137
+ updateOtp(newOtp);
138
+ if (index < length - 1) {
139
+ focusInput(index + 1);
140
+ }
141
+ }
142
+ break;
143
+ }
144
+ },
145
+ [otp, length, isValidInput, updateOtp, focusInput]
146
+ );
147
+ const handlePaste = useCallback(
148
+ (index, e) => {
149
+ e.preventDefault();
150
+ const pastedData = e.clipboardData.getData("text");
151
+ const chars = pastedData.split("").filter(isValidInput);
152
+ if (chars.length === 0) return;
153
+ const newOtp = [...otp];
154
+ chars.forEach((char, i) => {
155
+ if (index + i < length) {
156
+ newOtp[index + i] = char;
157
+ }
158
+ });
159
+ updateOtp(newOtp);
160
+ const nextEmptyIndex = newOtp.findIndex((d) => d === "");
161
+ focusInput(nextEmptyIndex === -1 ? length - 1 : nextEmptyIndex);
162
+ },
163
+ [otp, length, isValidInput, updateOtp, focusInput]
164
+ );
165
+ const handleFocus = useCallback((e) => {
166
+ e.target.select();
167
+ }, []);
168
+ useImperativeHandle(
169
+ ref,
170
+ () => ({
171
+ focus: () => {
172
+ const emptyIndex = otp.findIndex((d) => d === "");
173
+ focusInput(emptyIndex === -1 ? length - 1 : emptyIndex);
174
+ },
175
+ clear: () => {
176
+ const newOtp = Array(length).fill("");
177
+ updateOtp(newOtp);
178
+ focusInput(0);
179
+ },
180
+ getValue: () => otp.join("")
181
+ }),
182
+ [otp, length, focusInput, updateOtp]
183
+ );
184
+ useEffect(() => {
185
+ if (autoFocus && !disabled) {
186
+ focusInput(0);
187
+ }
188
+ }, [autoFocus, disabled, focusInput]);
189
+ return /* @__PURE__ */ jsxs(
19
190
  "div",
20
191
  {
21
- className: "datatable-wrapper",
192
+ className: cn("otp-input-wrapper", fullWidth && "otp-input-wrapper--full-width"),
22
193
  "data-cy": `${finalDataCy}-wrapper`,
23
194
  "data-testid": `${finalTestId}-wrapper`,
24
- children: /* @__PURE__ */ jsxs(
25
- "table",
26
- {
27
- ref,
28
- className: cn("datatable", className),
29
- "data-cy": finalDataCy,
30
- "data-testid": finalTestId,
31
- ...props,
32
- children: [
33
- /* @__PURE__ */ jsx(
34
- "thead",
35
- {
36
- className: "datatable__head",
37
- "data-cy": `${finalDataCy}-head`,
38
- "data-testid": `${finalTestId}-head`,
39
- children: /* @__PURE__ */ jsx("tr", { children: columns.map((column) => /* @__PURE__ */ jsx(
40
- "th",
41
- {
42
- className: "datatable__header-cell",
43
- "data-cy": `${finalDataCy}-header-${column.key}`,
44
- "data-testid": `${finalTestId}-header-${column.key}`,
45
- children: column.header
46
- },
47
- column.key
48
- )) })
49
- }
195
+ children: [
196
+ label && /* @__PURE__ */ jsx(
197
+ "label",
198
+ {
199
+ className: cn(
200
+ "otp-input__label",
201
+ error && "otp-input__label--error",
202
+ disabled && "otp-input__label--disabled"
50
203
  ),
51
- /* @__PURE__ */ jsx("tbody", { "data-cy": `${finalDataCy}-body`, "data-testid": `${finalTestId}-body`, children: data.length === 0 ? /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx(
52
- "td",
53
- {
54
- colSpan: columns.length,
55
- className: "datatable__empty",
56
- "data-cy": `${finalDataCy}-empty`,
57
- "data-testid": `${finalTestId}-empty`,
58
- children: "No data available"
59
- }
60
- ) }) : data.map((row, rowIndex) => /* @__PURE__ */ jsx(
61
- "tr",
204
+ "data-cy": `${finalDataCy}-label`,
205
+ "data-testid": `${finalTestId}-label`,
206
+ children: label
207
+ }
208
+ ),
209
+ /* @__PURE__ */ jsx(
210
+ "div",
211
+ {
212
+ className: cn("otp-input__container", centered && "otp-input__container--centered"),
213
+ role: "group",
214
+ "aria-label": label || "OTP Input",
215
+ "data-cy": `${finalDataCy}-container`,
216
+ "data-testid": `${finalTestId}-container`,
217
+ children: Array.from({ length }, (_, index) => /* @__PURE__ */ jsx(
218
+ "input",
62
219
  {
220
+ ref: (el) => {
221
+ inputRefs.current[index] = el;
222
+ },
223
+ type: "text",
224
+ inputMode: type === "numeric" ? "numeric" : "text",
225
+ pattern: type === "numeric" ? "[0-9]*" : "[a-zA-Z0-9]*",
226
+ maxLength: 1,
227
+ value: otp[index] || "",
228
+ onChange: (e) => handleChange(index, e),
229
+ onKeyDown: (e) => handleKeyDown(index, e),
230
+ onPaste: (e) => handlePaste(index, e),
231
+ onFocus: handleFocus,
232
+ disabled,
233
+ required,
234
+ "aria-label": `Digit ${index + 1} of ${length}`,
235
+ "aria-invalid": error ? "true" : "false",
236
+ "aria-describedby": error ? errorId : helperText ? helperId : void 0,
63
237
  className: cn(
64
- "datatable__body-row",
65
- hoverable && "datatable__body-row--hoverable",
66
- striped && "datatable__body-row--striped"
238
+ "otp-input__digit",
239
+ otp[index] && "otp-input__digit--filled",
240
+ error && "otp-input__digit--error"
67
241
  ),
68
- "data-cy": `${finalDataCy}-row-${rowIndex}`,
69
- "data-testid": `${finalTestId}-row-${rowIndex}`,
70
- children: columns.map((column) => /* @__PURE__ */ jsx(
71
- "td",
72
- {
73
- className: "datatable__body-cell",
74
- "data-cy": `${finalDataCy}-cell-${rowIndex}-${column.key}`,
75
- "data-testid": `${finalTestId}-cell-${rowIndex}-${column.key}`,
76
- children: String(row[column.key] ?? "")
77
- },
78
- column.key
79
- ))
242
+ "data-cy": `${finalDataCy}-digit-${index}`,
243
+ "data-testid": `${finalTestId}-digit-${index}`,
244
+ autoComplete: "one-time-code"
80
245
  },
81
- rowIndex
82
- )) })
83
- ]
84
- }
85
- )
246
+ index
247
+ ))
248
+ }
249
+ ),
250
+ error && /* @__PURE__ */ jsx(
251
+ "span",
252
+ {
253
+ id: errorId,
254
+ className: "otp-input__error",
255
+ role: "alert",
256
+ "data-cy": `${finalDataCy}-error`,
257
+ "data-testid": `${finalTestId}-error`,
258
+ children: error
259
+ }
260
+ ),
261
+ helperText && !error && /* @__PURE__ */ jsx(
262
+ "span",
263
+ {
264
+ id: helperId,
265
+ className: "otp-input__helper",
266
+ "data-cy": `${finalDataCy}-helper`,
267
+ "data-testid": `${finalTestId}-helper`,
268
+ children: helperText
269
+ }
270
+ )
271
+ ]
86
272
  }
87
273
  );
88
274
  }
89
275
  );
90
- DataTable.displayName = "DataTable";
276
+ OTPInput.displayName = "OTPInput";
91
277
  export {
92
- DataTable
278
+ OTPInput
93
279
  };
package/dist/index14.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),a=require("react"),i=require("./index22.cjs");;/* empty css */const r=a.forwardRef(({variant:a="primary",selected:r=!1,disabled:s=!1,className:t,children:c,"data-testid":d,"data-cy":l,...n},p)=>{const h=i.cn("chip",`chip--${a}`,r&&"chip--selected",s&&"chip--disabled",t);return e.jsx("div",{ref:p,className:h,"data-testid":d||`chip-${a}`,"data-cy":l||`chip-${a}`,"aria-selected":r,"aria-disabled":s,"aria-label":"string"==typeof c?c:void 0,...n,children:e.jsx("span",{className:"chip__label",children:c})})});r.displayName="Chip",exports.Chip=r;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),a=require("react"),t=require("./index31.cjs");;/* empty css */const l=a.forwardRef(({label:l,labelPosition:r="end",helperText:s,size:d="md",className:c,id:n,disabled:o,checked:i,defaultChecked:g,"data-cy":p,"data-testid":u,...b},_)=>{const h=a.useId(),k=n||h,$=`${k}-helper`,x=p||"toggle",m=u||"toggle",[y,j]=a.useState(!1),N=a.useRef(null),f=a.useCallback(e=>{N.current=e,_&&("function"==typeof _?_(e):"current"in _&&(_.current=e))},[_]);return e.jsxs("div",{className:t.cn("toggle-wrapper",o&&"toggle-wrapper--disabled",`toggle-wrapper--${d}`),"data-cy":`${x}-wrapper`,"data-testid":`${m}-wrapper`,children:[e.jsxs("label",{className:t.cn("toggle__container","start"===r&&"toggle__container--label-start"),htmlFor:k,onMouseEnter:()=>{o||j(!0)},onMouseLeave:()=>{j(!1)},children:[l&&"start"===r&&e.jsx("span",{className:"toggle__label","data-cy":`${x}-label`,"data-testid":`${m}-label`,children:l}),e.jsx("input",{ref:f,id:k,type:"checkbox",role:"switch",checked:i,defaultChecked:g,className:t.cn("toggle__input",c),"aria-describedby":s?$:void 0,"data-cy":x,"data-testid":m,disabled:o,...b}),e.jsx("span",{className:t.cn("toggle__track",`toggle__track--${d}`,y&&!o&&"toggle__track--hover"),"data-cy":`${x}-track`,"data-testid":`${m}-track`,"aria-hidden":"true",children:e.jsx("span",{className:t.cn("toggle__knob",`toggle__knob--${d}`,y&&!o&&"toggle__knob--hover"),"data-cy":`${x}-knob`,"data-testid":`${m}-knob`})}),l&&"end"===r&&e.jsx("span",{className:"toggle__label","data-cy":`${x}-label`,"data-testid":`${m}-label`,children:l})]}),s&&e.jsx("span",{id:$,className:"toggle__helper","data-cy":`${x}-helper`,"data-testid":`${m}-helper`,children:s})]})});l.displayName="Toggle",exports.Toggle=l;
package/dist/index14.js CHANGED
@@ -1,42 +1,150 @@
1
- import { jsx } from "react/jsx-runtime";
2
- import { forwardRef } from "react";
3
- import { cn } from "./index22.js";
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { forwardRef, useId, useState, useRef, useCallback } from "react";
3
+ import { cn } from "./index31.js";
4
4
  /* empty css */
5
- const Chip = forwardRef(
5
+ const Toggle = forwardRef(
6
6
  ({
7
- variant = "primary",
8
- selected = false,
9
- disabled = false,
7
+ label,
8
+ labelPosition = "end",
9
+ helperText,
10
+ size = "md",
10
11
  className,
11
- children,
12
- "data-testid": dataTestId,
12
+ id: providedId,
13
+ disabled,
14
+ checked,
15
+ defaultChecked,
13
16
  "data-cy": dataCy,
17
+ "data-testid": dataTestId,
14
18
  ...props
15
19
  }, ref) => {
16
- const classes = cn(
17
- "chip",
18
- `chip--${variant}`,
19
- selected && "chip--selected",
20
- disabled && "chip--disabled",
21
- className
20
+ const generatedId = useId();
21
+ const id = providedId || generatedId;
22
+ const helperId = `${id}-helper`;
23
+ const finalDataCy = dataCy || "toggle";
24
+ const finalTestId = dataTestId || "toggle";
25
+ const [isHovered, setIsHovered] = useState(false);
26
+ const internalRef = useRef(null);
27
+ const combinedRef = useCallback(
28
+ (element) => {
29
+ internalRef.current = element;
30
+ if (!ref) return;
31
+ if (typeof ref === "function") {
32
+ ref(element);
33
+ } else if ("current" in ref) {
34
+ ref.current = element;
35
+ }
36
+ },
37
+ [ref]
22
38
  );
23
- return /* @__PURE__ */ jsx(
39
+ const handleMouseEnter = () => {
40
+ if (!disabled) {
41
+ setIsHovered(true);
42
+ }
43
+ };
44
+ const handleMouseLeave = () => {
45
+ setIsHovered(false);
46
+ };
47
+ return /* @__PURE__ */ jsxs(
24
48
  "div",
25
49
  {
26
- ref,
27
- className: classes,
28
- "data-testid": dataTestId || `chip-${variant}`,
29
- "data-cy": dataCy || `chip-${variant}`,
30
- "aria-selected": selected,
31
- "aria-disabled": disabled,
32
- "aria-label": typeof children === "string" ? children : void 0,
33
- ...props,
34
- children: /* @__PURE__ */ jsx("span", { className: "chip__label", children })
50
+ className: cn(
51
+ "toggle-wrapper",
52
+ disabled && "toggle-wrapper--disabled",
53
+ `toggle-wrapper--${size}`
54
+ ),
55
+ "data-cy": `${finalDataCy}-wrapper`,
56
+ "data-testid": `${finalTestId}-wrapper`,
57
+ children: [
58
+ /* @__PURE__ */ jsxs(
59
+ "label",
60
+ {
61
+ className: cn(
62
+ "toggle__container",
63
+ labelPosition === "start" && "toggle__container--label-start"
64
+ ),
65
+ htmlFor: id,
66
+ onMouseEnter: handleMouseEnter,
67
+ onMouseLeave: handleMouseLeave,
68
+ children: [
69
+ label && labelPosition === "start" && /* @__PURE__ */ jsx(
70
+ "span",
71
+ {
72
+ className: "toggle__label",
73
+ "data-cy": `${finalDataCy}-label`,
74
+ "data-testid": `${finalTestId}-label`,
75
+ children: label
76
+ }
77
+ ),
78
+ /* @__PURE__ */ jsx(
79
+ "input",
80
+ {
81
+ ref: combinedRef,
82
+ id,
83
+ type: "checkbox",
84
+ role: "switch",
85
+ checked,
86
+ defaultChecked,
87
+ className: cn("toggle__input", className),
88
+ "aria-describedby": helperText ? helperId : void 0,
89
+ "data-cy": finalDataCy,
90
+ "data-testid": finalTestId,
91
+ disabled,
92
+ ...props
93
+ }
94
+ ),
95
+ /* @__PURE__ */ jsx(
96
+ "span",
97
+ {
98
+ className: cn(
99
+ "toggle__track",
100
+ `toggle__track--${size}`,
101
+ isHovered && !disabled && "toggle__track--hover"
102
+ ),
103
+ "data-cy": `${finalDataCy}-track`,
104
+ "data-testid": `${finalTestId}-track`,
105
+ "aria-hidden": "true",
106
+ children: /* @__PURE__ */ jsx(
107
+ "span",
108
+ {
109
+ className: cn(
110
+ "toggle__knob",
111
+ `toggle__knob--${size}`,
112
+ isHovered && !disabled && "toggle__knob--hover"
113
+ ),
114
+ "data-cy": `${finalDataCy}-knob`,
115
+ "data-testid": `${finalTestId}-knob`
116
+ }
117
+ )
118
+ }
119
+ ),
120
+ label && labelPosition === "end" && /* @__PURE__ */ jsx(
121
+ "span",
122
+ {
123
+ className: "toggle__label",
124
+ "data-cy": `${finalDataCy}-label`,
125
+ "data-testid": `${finalTestId}-label`,
126
+ children: label
127
+ }
128
+ )
129
+ ]
130
+ }
131
+ ),
132
+ helperText && /* @__PURE__ */ jsx(
133
+ "span",
134
+ {
135
+ id: helperId,
136
+ className: "toggle__helper",
137
+ "data-cy": `${finalDataCy}-helper`,
138
+ "data-testid": `${finalTestId}-helper`,
139
+ children: helperText
140
+ }
141
+ )
142
+ ]
35
143
  }
36
144
  );
37
145
  }
38
146
  );
39
- Chip.displayName = "Chip";
147
+ Toggle.displayName = "Toggle";
40
148
  export {
41
- Chip
149
+ Toggle
42
150
  };
package/dist/index15.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),t=require("react"),r=require("./index22.cjs"),a=require("./index14.cjs");;/* empty css */const i=require("./index35.cjs"),n=require("@adam-milo/icons"),l=(e,r,a,i,n)=>{const[l,o]=t.useState(e.length),u=t.useCallback(()=>{if(void 0!==n)return void o(Math.min(n,e.length));const t=r.current;if(!t)return;const l=t.clientWidth,u=parseFloat(getComputedStyle(document.documentElement).fontSize)||16,s=window.getComputedStyle(t),c=((e,t,r)=>{if(!e)return.5*t;const a=e.match(/^([\d.]+)(px|rem|em)?/);if(!a)return.5*t;const i=parseFloat(a[1]);switch(a[2]||"px"){case"px":return i;case"rem":return i*t;case"em":return i*r;default:return.5*t}})(s.gap,u,parseFloat(s.fontSize)||16),d=3.75*u;for(let r=0;r<e.length;r++){const t=e[r],n=a.current[r];n&&i.current.set(t.value,n.offsetWidth)}const p=((e,t,r,a,i)=>{let n=0,l=0;for(let o=0;o<e.length;o++){const u=e[o],s=t.get(u.value)||0;if(0===s){l++;break}const c=n+(o>0?a:0)+s;if(o<e.length-1){if(c+a+i>r&&l>0)break}else if(c>r&&l>0)break;n=c,l++}return Math.max(1,l)})(e,i.current,l,c,d);o(p)},[e,n,r,a,i]),s=((e,r)=>{const a=t.useRef();return t.useEffect(()=>()=>{a.current&&clearTimeout(a.current)},[]),t.useCallback((...t)=>{a.current&&clearTimeout(a.current),a.current=setTimeout(()=>e(...t),r)},[e,r])})(u,100);t.useEffect(()=>{a.current.length>e.length&&(a.current=a.current.slice(0,e.length));const t=new Set(e.map(e=>e.value));if(i.current.forEach((e,r)=>{t.has(r)||i.current.delete(r)}),void 0===n){e.some(e=>!i.current.has(e.value))?o(e.length):setTimeout(u,0)}},[e,n,u,a,i]),t.useEffect(()=>{const e=r.current;if(!e)return;const t=new ResizeObserver(()=>{s()});return t.observe(e),setTimeout(u,0),()=>{t.disconnect()}},[u,s,r]);const c=e.slice(0,l),d=e.slice(l);return{visibleCount:l,visibleItems:c,hiddenItems:d,hasOverflow:d.length>0}},o=t.forwardRef(({items:o,selectedValue:u,onSelectionChange:s,removable:c=!1,onRemove:d,variant:p="primary",disabled:h=!1,maxVisible:v,className:m,"data-testid":f,"data-cy":g,...b},y)=>{const w=(o&&Array.isArray(o)?o:[]).filter(e=>null!=e&&"object"==typeof e),x=t.useRef(null),k=t.useRef([]),_=t.useRef(new Map),C=t.useRef(null),[E,j]=t.useState(!1),[N,$]=t.useState(!1),D=t.useRef([]),{visibleItems:S,hiddenItems:R,hasOverflow:I}=l(w,x,k,_,v),q=t.useCallback((e,t,r)=>{if(!h&&!t&&s){s(u===e?null:e,r)}},[h,u,s]),A=t.useCallback((e,t)=>{e.stopPropagation(),h||d&&d(t,e)},[h,d]),M=t.useCallback((e,t,r)=>{h||r||"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),q(t,r,e))},[h,q]),P=t.useCallback(e=>{e.stopPropagation(),$(e=>!e),j(!1)},[]),T=t.useCallback((e,t)=>{var r,a,i,n;switch(e.key){case"ArrowDown":e.preventDefault(),t<R.length-1&&(null==(r=D.current[t+1])||r.focus());break;case"ArrowUp":e.preventDefault(),t>0&&(null==(a=D.current[t-1])||a.focus());break;case"Home":e.preventDefault(),null==(i=D.current[0])||i.focus();break;case"End":e.preventDefault(),null==(n=D.current[R.length-1])||n.focus()}},[R.length]),z=t.useRef(),L=t.useRef();return t.useEffect(()=>{z.current=e=>{C.current&&!C.current.contains(e.target)&&$(!1)},L.current=e=>{"Escape"===e.key&&$(!1)}}),t.useEffect(()=>{if(!N)return;const e=e=>{var t;return null==(t=z.current)?void 0:t.call(z,e)},t=e=>{var t;return null==(t=L.current)?void 0:t.call(L,e)};return document.addEventListener("mousedown",e),document.addEventListener("keydown",t),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("keydown",t)}},[N]),t.useEffect(()=>{if("development"===process.env.NODE_ENV&&w.length>0){const e=w.map(e=>e.value),t=new Set(e);e.length!==t.size&&i.devWarn("[ChipGroup] Duplicate values detected in items array. Each item should have a unique value.")}},[w]),t.useEffect(()=>{D.current.length>R.length&&(D.current=D.current.slice(0,R.length))},[R]),o&&Array.isArray(o)?e.jsxs("div",{ref:y,className:r.cn("chip-group",h&&"chip-group--disabled",m),role:"group","aria-label":"Chip group","data-testid":f||"chip-group","data-cy":g||"chip-group",...b,children:[I&&e.jsxs("div",{className:"sr-only",role:"status","aria-live":"polite","aria-atomic":"true","data-testid":"chip-group-live-region","data-cy":"chip-group-live-region",children:[R.length," additional ",1===R.length?"chip":"chips"," hidden"]}),e.jsxs("div",{ref:x,className:"chip-group__container",children:[S.map(t=>{const r=u===t.value,i=t.variant||p,l=h||t.disabled||!1,o=w.findIndex(e=>e.value===t.value);return e.jsx("div",{ref:e=>{k.current[o]=e||null},className:"chip-group__item-wrapper","data-cy":`chip-group-item-wrapper-${t.value}`,"data-testid":`chip-group-item-wrapper-${t.value}`,children:e.jsxs("div",{className:"chip-group__item",onClick:e=>q(t.value,l,e),onKeyDown:e=>M(e,t.value,l),tabIndex:l?-1:0,role:"button","aria-pressed":r?"true":"false","aria-disabled":l?"true":"false","data-cy":`chip-group-item-${t.value}`,"data-testid":`chip-group-item-${t.value}`,children:[e.jsx(a.Chip,{variant:i,selected:r,disabled:l,"data-cy":`chip-${t.value}`,"data-testid":`chip-${t.value}`,children:t.label}),c&&!h&&!l&&e.jsx("button",{className:"chip-group__remove",onClick:e=>A(e,t.value),"aria-label":`Remove ${t.label}`,"data-cy":`chip-remove-${t.value}`,"data-testid":`chip-remove-${t.value}`,type:"button",children:e.jsx(n.Icon,{name:"Cross2Icon",size:"sm",decorative:!0})})]})},t.value)}),I&&e.jsxs("div",{ref:C,className:"chip-group__overflow",role:"button",tabIndex:0,"aria-expanded":N?"true":"false","aria-haspopup":"menu","aria-label":`Show ${R.length} more ${1===R.length?"chip":"chips"}`,onMouseEnter:()=>!N&&j(!0),onMouseLeave:()=>j(!1),onClick:P,onKeyDown:e=>{"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),e.stopPropagation(),$(!N),j(!1))},"data-cy":"chip-group-overflow","data-testid":"chip-group-overflow",children:[e.jsxs(a.Chip,{variant:p,"data-cy":"chip-overflow","data-testid":"chip-overflow",children:["+",R.length]}),E&&!N&&e.jsx("div",{className:"chip-group__tooltip chip-group__tooltip--hover",role:"tooltip","data-cy":"chip-group-tooltip","data-testid":"chip-group-tooltip",children:R.map(t=>e.jsx("div",{className:"chip-group__tooltip-item","data-cy":`chip-group-tooltip-item-${t.value}`,"data-testid":`chip-group-tooltip-item-${t.value}`,children:t.label},t.value))}),N&&e.jsx("div",{className:"chip-group__dropdown",role:"menu","data-cy":"chip-group-dropdown","data-testid":"chip-group-dropdown",children:R.map((t,a)=>e.jsx("div",{ref:e=>{D.current[a]=e||null},className:r.cn("chip-group__dropdown-item",t.disabled&&"chip-group__dropdown-item--disabled"),role:"menuitem",tabIndex:t.disabled?-1:0,"aria-disabled":t.disabled?"true":"false",onClick:e=>{e.stopPropagation(),t.disabled||(q(t.value,!1,e),$(!1))},onKeyDown:e=>{T(e,a),"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),e.stopPropagation(),t.disabled||(q(t.value,!1,e),$(!1)))},"data-cy":`chip-group-dropdown-item-${t.value}`,"data-testid":`chip-group-dropdown-item-${t.value}`,children:t.label},t.value))})]})]})]}):null});o.displayName="ChipGroup",exports.ChipGroup=o;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react/jsx-runtime"),e=require("react"),a=require("@radix-ui/react-tabs"),s=require("./index31.cjs");function r(t){const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t)for(const a in t)if("default"!==a){const s=Object.getOwnPropertyDescriptor(t,a);Object.defineProperty(e,a,s.get?s:{enumerable:!0,get:()=>t[a]})}return e.default=t,Object.freeze(e)};/* empty css */const i=r(a),n=i.Root,c=e.forwardRef(({className:e,"data-cy":a,"data-testid":r,...n},c)=>{const o=a||"tabs-list",d=r||"tabs-list";return t.jsx(i.List,{ref:c,className:s.cn("tabs-list",e),"data-cy":o,"data-testid":d,...n})});c.displayName=i.List.displayName;const o=e.forwardRef(({className:e,value:a,"data-cy":r,"data-testid":n,...c},o)=>{const d=r||(a?`tabs-trigger-${a}`:"tabs-trigger"),l=n||(a?`tabs-trigger-${a}`:"tabs-trigger");return t.jsx(i.Trigger,{ref:o,className:s.cn("tabs-trigger",e),value:a,"data-cy":d,"data-testid":l,...c})});o.displayName=i.Trigger.displayName;const d=e.forwardRef(({className:e,value:a,"data-cy":r,"data-testid":n,...c},o)=>{const d=r||(a?`tabs-content-${a}`:"tabs-content"),l=n||(a?`tabs-content-${a}`:"tabs-content");return t.jsx(i.Content,{ref:o,className:s.cn("tabs-content",e),value:a,"data-cy":d,"data-testid":l,...c})});d.displayName=i.Content.displayName,exports.Tabs=n,exports.TabsContent=d,exports.TabsList=c,exports.TabsTrigger=o;