@arkyn/components 3.0.2 → 3.0.4

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 (196) hide show
  1. package/README.md +24 -24
  2. package/dist/components/alert/alertContainer/index.d.ts +7 -7
  3. package/dist/components/alert/alertContent/index.d.ts +1 -1
  4. package/dist/components/alert/alertDescription/index.d.ts +1 -1
  5. package/dist/components/alert/alertIcon/index.d.ts +1 -1
  6. package/dist/components/alert/alertTitle/index.d.ts +1 -1
  7. package/dist/components/audioPlayer/index.d.ts +1 -1
  8. package/dist/components/audioUpload/index.d.ts +2 -2
  9. package/dist/components/badge/index.d.ts +1 -1
  10. package/dist/components/button/index.d.ts +1 -1
  11. package/dist/components/cardTab/cardTabButton/index.d.ts +1 -1
  12. package/dist/components/cardTab/cardTabContainer/index.d.ts +1 -1
  13. package/dist/components/checkbox/index.d.ts +3 -3
  14. package/dist/components/checkbox/index.d.ts.map +1 -1
  15. package/dist/components/clientOnly.d.ts +2 -2
  16. package/dist/components/clientOnly.d.ts.map +1 -1
  17. package/dist/components/currencyInput/index.d.ts +2 -2
  18. package/dist/components/datePicker/datePickerCalendarContainer/index.d.ts +9 -0
  19. package/dist/components/datePicker/datePickerCalendarContainer/index.d.ts.map +1 -0
  20. package/dist/components/datePicker/datePickerChevron/index.d.ts +11 -0
  21. package/dist/components/datePicker/datePickerChevron/index.d.ts.map +1 -0
  22. package/dist/components/datePicker/datePickerContainer/index.d.ts +19 -0
  23. package/dist/components/datePicker/datePickerContainer/index.d.ts.map +1 -0
  24. package/dist/components/datePicker/datePickerContent/index.d.ts +9 -0
  25. package/dist/components/datePicker/datePickerContent/index.d.ts.map +1 -0
  26. package/dist/components/datePicker/datePickerOverlay/index.d.ts +8 -0
  27. package/dist/components/datePicker/datePickerOverlay/index.d.ts.map +1 -0
  28. package/dist/components/datePicker/datePickerSpinner/index.d.ts +8 -0
  29. package/dist/components/datePicker/datePickerSpinner/index.d.ts.map +1 -0
  30. package/dist/components/datePicker/index.d.ts +155 -0
  31. package/dist/components/datePicker/index.d.ts.map +1 -0
  32. package/dist/components/divider/index.d.ts +1 -1
  33. package/dist/components/drawer/drawerContainer/index.d.ts +1 -1
  34. package/dist/components/drawer/drawerHeader/index.d.ts +1 -1
  35. package/dist/components/facebookPixel/index.d.ts +1 -1
  36. package/dist/components/fieldError/index.d.ts +1 -1
  37. package/dist/components/fieldLabel/index.d.ts +1 -1
  38. package/dist/components/fieldWrapper/index.d.ts +1 -1
  39. package/dist/components/fileUpload/index.d.ts +2 -2
  40. package/dist/components/googleAnalytics/index.d.ts +1 -1
  41. package/dist/components/googleTagManager/index.d.ts +1 -1
  42. package/dist/components/iconButton/index.d.ts +1 -1
  43. package/dist/components/imageUpload/index.d.ts +2 -2
  44. package/dist/components/input/index.d.ts +1 -1
  45. package/dist/components/mapView/index.d.ts +2 -2
  46. package/dist/components/mapView/index.d.ts.map +1 -1
  47. package/dist/components/maskedInput/index.d.ts +3 -3
  48. package/dist/components/modal/modalContainer/index.d.ts +1 -1
  49. package/dist/components/modal/modalFooter/index.d.ts +1 -1
  50. package/dist/components/modal/modalHeader/index.d.ts +1 -1
  51. package/dist/components/multiSelect/index.d.ts +1 -1
  52. package/dist/components/pagination/index.d.ts +1 -1
  53. package/dist/components/phoneInput/index.d.ts +2 -2
  54. package/dist/components/phoneInput/index.d.ts.map +1 -1
  55. package/dist/components/popover/index.d.ts +2 -2
  56. package/dist/components/popover/index.d.ts.map +1 -1
  57. package/dist/components/radio/radioBox/index.d.ts +4 -4
  58. package/dist/components/radio/radioGroup/index.d.ts +3 -3
  59. package/dist/components/richText/index.d.ts +3 -3
  60. package/dist/components/searchPlaces.d.ts +3 -3
  61. package/dist/components/select/index.d.ts +1 -1
  62. package/dist/components/slider/index.d.ts +1 -1
  63. package/dist/components/switch/index.d.ts +3 -3
  64. package/dist/components/switch/index.d.ts.map +1 -1
  65. package/dist/components/tab/tabButton/index.d.ts +1 -1
  66. package/dist/components/tab/tabContainer/index.d.ts +1 -1
  67. package/dist/components/table/tableBody/index.d.ts +1 -1
  68. package/dist/components/table/tableCaption/index.d.ts +2 -2
  69. package/dist/components/table/tableContainer/index.d.ts +1 -1
  70. package/dist/components/table/tableFooter/index.d.ts +1 -1
  71. package/dist/components/table/tableHeader/index.d.ts +2 -2
  72. package/dist/components/textarea/index.d.ts +1 -1
  73. package/dist/components/tooltip/index.d.ts +1 -1
  74. package/dist/hooks/useAutomation.d.ts +1 -1
  75. package/dist/hooks/useDrawer.d.ts +5 -5
  76. package/dist/hooks/useForm.d.ts +2 -2
  77. package/dist/hooks/useHydrated.d.ts +1 -1
  78. package/dist/hooks/useModal.d.ts +5 -5
  79. package/dist/hooks/useScopedParams.d.ts +5 -5
  80. package/dist/hooks/useScrollLock.d.ts +2 -2
  81. package/dist/hooks/useSearchAutomation.d.ts +6 -6
  82. package/dist/hooks/useSlider.d.ts +2 -2
  83. package/dist/hooks/useToast.d.ts +1 -1
  84. package/dist/index.d.ts +1 -0
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.js +642 -389
  87. package/dist/index.js.map +1 -1
  88. package/dist/modules/components/alert/alertContainer/index.js.map +1 -1
  89. package/dist/modules/components/alert/alertContent/index.js.map +1 -1
  90. package/dist/modules/components/alert/alertDescription/index.js.map +1 -1
  91. package/dist/modules/components/alert/alertIcon/index.js.map +1 -1
  92. package/dist/modules/components/alert/alertTitle/index.js.map +1 -1
  93. package/dist/modules/components/audioPlayer/index.js.map +1 -1
  94. package/dist/modules/components/audioUpload/index.js.map +1 -1
  95. package/dist/modules/components/badge/index.js.map +1 -1
  96. package/dist/modules/components/button/index.js.map +1 -1
  97. package/dist/modules/components/cardTab/cardTabButton/index.js.map +1 -1
  98. package/dist/modules/components/cardTab/cardTabContainer/index.js.map +1 -1
  99. package/dist/modules/components/checkbox/index.js.map +1 -1
  100. package/dist/modules/components/clientOnly.js.map +1 -1
  101. package/dist/modules/components/currencyInput/index.js.map +1 -1
  102. package/dist/modules/components/datePicker/datePickerCalendarContainer/index.js +25 -0
  103. package/dist/modules/components/datePicker/datePickerCalendarContainer/index.js.map +1 -0
  104. package/dist/modules/components/datePicker/datePickerCalendarContainer/styles.css +1 -0
  105. package/dist/modules/components/datePicker/datePickerChevron/index.js +21 -0
  106. package/dist/modules/components/datePicker/datePickerChevron/index.js.map +1 -0
  107. package/dist/modules/components/datePicker/datePickerChevron/styles.css +1 -0
  108. package/dist/modules/components/datePicker/datePickerContainer/index.js +16 -0
  109. package/dist/modules/components/datePicker/datePickerContainer/index.js.map +1 -0
  110. package/dist/modules/components/datePicker/datePickerContainer/styles.css +1 -0
  111. package/dist/modules/components/datePicker/datePickerContent/index.js +14 -0
  112. package/dist/modules/components/datePicker/datePickerContent/index.js.map +1 -0
  113. package/dist/modules/components/datePicker/datePickerContent/styles.css +1 -0
  114. package/dist/modules/components/datePicker/datePickerOverlay/index.js +14 -0
  115. package/dist/modules/components/datePicker/datePickerOverlay/index.js.map +1 -0
  116. package/dist/modules/components/datePicker/datePickerOverlay/styles.css +1 -0
  117. package/dist/modules/components/datePicker/datePickerSpinner/index.js +16 -0
  118. package/dist/modules/components/datePicker/datePickerSpinner/index.js.map +1 -0
  119. package/dist/modules/components/datePicker/datePickerSpinner/styles.css +1 -0
  120. package/dist/modules/components/datePicker/index.js +194 -0
  121. package/dist/modules/components/datePicker/index.js.map +1 -0
  122. package/dist/modules/components/datePicker/styles.css +79 -0
  123. package/dist/modules/components/divider/index.js.map +1 -1
  124. package/dist/modules/components/drawer/drawerContainer/index.js.map +1 -1
  125. package/dist/modules/components/drawer/drawerHeader/index.js.map +1 -1
  126. package/dist/modules/components/facebookPixel/index.js.map +1 -1
  127. package/dist/modules/components/fieldError/index.js.map +1 -1
  128. package/dist/modules/components/fieldLabel/index.js.map +1 -1
  129. package/dist/modules/components/fieldWrapper/index.js.map +1 -1
  130. package/dist/modules/components/fileUpload/index.js.map +1 -1
  131. package/dist/modules/components/googleAnalytics/index.js.map +1 -1
  132. package/dist/modules/components/googleTagManager/index.js.map +1 -1
  133. package/dist/modules/components/iconButton/index.js.map +1 -1
  134. package/dist/modules/components/imageUpload/index.js.map +1 -1
  135. package/dist/modules/components/input/index.js.map +1 -1
  136. package/dist/modules/components/mapView/index.js.map +1 -1
  137. package/dist/modules/components/maskedInput/index.js.map +1 -1
  138. package/dist/modules/components/modal/modalContainer/index.js.map +1 -1
  139. package/dist/modules/components/modal/modalFooter/index.js.map +1 -1
  140. package/dist/modules/components/modal/modalHeader/index.js.map +1 -1
  141. package/dist/modules/components/multiSelect/index.js.map +1 -1
  142. package/dist/modules/components/pagination/index.js.map +1 -1
  143. package/dist/modules/components/phoneInput/index.js +68 -63
  144. package/dist/modules/components/phoneInput/index.js.map +1 -1
  145. package/dist/modules/components/popover/index.js.map +1 -1
  146. package/dist/modules/components/radio/radioBox/index.js.map +1 -1
  147. package/dist/modules/components/radio/radioGroup/index.js.map +1 -1
  148. package/dist/modules/components/richText/index.js.map +1 -1
  149. package/dist/modules/components/searchPlaces.js.map +1 -1
  150. package/dist/modules/components/select/index.js.map +1 -1
  151. package/dist/modules/components/slider/index.js.map +1 -1
  152. package/dist/modules/components/switch/index.js.map +1 -1
  153. package/dist/modules/components/tab/tabButton/index.js.map +1 -1
  154. package/dist/modules/components/tab/tabContainer/index.js.map +1 -1
  155. package/dist/modules/components/table/tableBody/index.js.map +1 -1
  156. package/dist/modules/components/table/tableCaption/index.js.map +1 -1
  157. package/dist/modules/components/table/tableContainer/index.js.map +1 -1
  158. package/dist/modules/components/table/tableFooter/index.js.map +1 -1
  159. package/dist/modules/components/table/tableHeader/index.js.map +1 -1
  160. package/dist/modules/components/textarea/index.js.map +1 -1
  161. package/dist/modules/components/tooltip/index.js.map +1 -1
  162. package/dist/modules/hooks/useAutomation.js.map +1 -1
  163. package/dist/modules/hooks/useDrawer.js.map +1 -1
  164. package/dist/modules/hooks/useForm.js.map +1 -1
  165. package/dist/modules/hooks/useHydrated.js.map +1 -1
  166. package/dist/modules/hooks/useModal.js.map +1 -1
  167. package/dist/modules/hooks/useScopedParams.js.map +1 -1
  168. package/dist/modules/hooks/useScrollLock.js.map +1 -1
  169. package/dist/modules/hooks/useSearchAutomation.js.map +1 -1
  170. package/dist/modules/hooks/useSlider.js.map +1 -1
  171. package/dist/modules/hooks/useToast.js.map +1 -1
  172. package/dist/modules/providers/drawerProvider.js.map +1 -1
  173. package/dist/modules/providers/formProvider.js.map +1 -1
  174. package/dist/modules/providers/modalProvider.js +27 -33
  175. package/dist/modules/providers/modalProvider.js.map +1 -1
  176. package/dist/modules/providers/placesProvider.js.map +1 -1
  177. package/dist/modules/providers/toastProvider.js.map +1 -1
  178. package/dist/modules/services/fieldTemplate.js +1 -0
  179. package/dist/modules/services/fieldTemplate.js.map +1 -1
  180. package/dist/modules/services/toHtml.js.map +1 -1
  181. package/dist/modules/services/toRichTextValue.js.map +1 -1
  182. package/dist/modules/utils/phoneInputUtilities.js +5 -5
  183. package/dist/modules/utils/phoneInputUtilities.js.map +1 -1
  184. package/dist/providers/drawerProvider.d.ts +1 -1
  185. package/dist/providers/formProvider.d.ts +1 -1
  186. package/dist/providers/modalProvider.d.ts +1 -1
  187. package/dist/providers/modalProvider.d.ts.map +1 -1
  188. package/dist/providers/placesProvider.d.ts +1 -1
  189. package/dist/providers/toastProvider.d.ts +1 -1
  190. package/dist/services/fieldTemplate.d.ts.map +1 -1
  191. package/dist/services/toHtml.d.ts +1 -1
  192. package/dist/services/toRichTextValue.d.ts +1 -1
  193. package/dist/style.css +1 -1
  194. package/dist/utils/phoneInputUtilities.d.ts +1 -1
  195. package/dist/utils/phoneInputUtilities.d.ts.map +1 -1
  196. package/package.json +17 -1
@@ -0,0 +1,194 @@
1
+ import { useForm as e } from "../../hooks/useForm.js";
2
+ import { IconRenderer as t } from "../../services/iconRenderer.js";
3
+ import { FieldTemplate as n } from "../../services/fieldTemplate.js";
4
+ import { Calendar as r } from "../calendar/index.js";
5
+ import { DatePickerCalendarContainer as i } from "./datePickerCalendarContainer/index.js";
6
+ import { DatePickerChevron as a } from "./datePickerChevron/index.js";
7
+ import { DatePickerContainer as o } from "./datePickerContainer/index.js";
8
+ import { DatePickerContent as s } from "./datePickerContent/index.js";
9
+ import { DatePickerOverlay as c } from "./datePickerOverlay/index.js";
10
+ import { DatePickerSpinner as l } from "./datePickerSpinner/index.js";
11
+ import { useId as u, useRef as d, useState as f } from "react";
12
+ import { jsx as p, jsxs as m } from "react/jsx-runtime";
13
+ //#region src/components/datePicker/index.tsx
14
+ function h(e) {
15
+ let t = (e) => String(e).padStart(2, "0");
16
+ return `${e.getFullYear()}-${t(e.getMonth() + 1)}-${t(e.getDate())}`;
17
+ }
18
+ function g(e) {
19
+ return e.toLocaleDateString("pt-BR");
20
+ }
21
+ function _(_) {
22
+ let { name: v, className: y = "", placeholder: b = "Selecione uma data...", errorMessage: ee, isLoading: x = !1, readOnly: S = !1, id: C, label: w, showAsterisk: T, leftIcon: E, onFocus: te, onBlur: D, disabled: O = !1, prefix: k, size: A = "md", value: j, variant: M = "solid", orientation: N = "vertical", unShowFieldTemplate: P = !1, calendarVariant: F = "complete" } = _, I = _.closeOnSelect ?? _.type === "single", { fieldErrors: L } = e(), R = d(null), z = u(), B = C || z, V = ee || L?.[v], H = !!V, U = O || x || S, W = {
23
+ md: 20,
24
+ lg: 20
25
+ }[A], [G, K] = f(!1), [q, J] = f(_.type === "single" ? _.defaultValue : void 0), [Y, X] = f(_.type === "range" ? _.defaultValue : void 0);
26
+ function Z() {
27
+ U || !R?.current || G || (K(!0), R.current.focus(), te?.());
28
+ }
29
+ function Q() {
30
+ K(!1), D && R.current && R.current.blur();
31
+ }
32
+ function ne(e) {
33
+ j === void 0 && J(e), _.type === "single" && _.onChange?.(e), I && Q();
34
+ }
35
+ function re(e) {
36
+ j === void 0 && X(e), _.type === "range" && _.onChange?.(e), I && Q();
37
+ }
38
+ if (_.type === "range") {
39
+ let e = _.rangeSeparator ?? " até ", u = j === void 0 ? Y : j, d = u ? JSON.stringify([h(u[0]), h(u[1])]) : "";
40
+ return /* @__PURE__ */ p(n, {
41
+ name: v,
42
+ label: w,
43
+ showAsterisk: T,
44
+ className: y,
45
+ errorMessage: V,
46
+ unShowFieldTemplate: P,
47
+ orientation: N,
48
+ children: /* @__PURE__ */ m(o, {
49
+ handleContainerFocus: Z,
50
+ disabled: U,
51
+ isError: H,
52
+ isFocused: G,
53
+ isLoading: x,
54
+ readOnly: S,
55
+ size: A,
56
+ variant: M,
57
+ prefixExists: !!k,
58
+ id: B,
59
+ children: [
60
+ /* @__PURE__ */ p("input", {
61
+ ref: R,
62
+ name: v,
63
+ value: d,
64
+ type: "hidden"
65
+ }),
66
+ /* @__PURE__ */ p(t, {
67
+ iconSize: W,
68
+ icon: k,
69
+ className: "prefix"
70
+ }),
71
+ E && /* @__PURE__ */ p(E, {
72
+ size: W,
73
+ strokeWidth: 2.5
74
+ }),
75
+ /* @__PURE__ */ p(s, {
76
+ size: A,
77
+ children: u ? /* @__PURE__ */ m("p", {
78
+ className: "hasValue",
79
+ children: [
80
+ g(u[0]),
81
+ e,
82
+ g(u[1])
83
+ ]
84
+ }) : /* @__PURE__ */ p("p", { children: b })
85
+ }),
86
+ /* @__PURE__ */ p(i, {
87
+ isFocused: G,
88
+ children: /* @__PURE__ */ p(r, {
89
+ type: "range",
90
+ variant: F,
91
+ value: u,
92
+ onChange: re,
93
+ viewValue: _.viewValue,
94
+ defaultViewValue: _.defaultViewValue,
95
+ onChangeView: _.onChangeView
96
+ })
97
+ }),
98
+ /* @__PURE__ */ p(a, {
99
+ disabled: U,
100
+ isFocused: G,
101
+ readOnly: S,
102
+ iconSize: W,
103
+ isLoading: x
104
+ }),
105
+ /* @__PURE__ */ p(l, {
106
+ iconSize: W,
107
+ isLoading: x
108
+ }),
109
+ /* @__PURE__ */ p(c, {
110
+ handleBlur: Q,
111
+ isFocused: G
112
+ })
113
+ ]
114
+ })
115
+ });
116
+ }
117
+ let $ = j === void 0 ? q : j, ie = $ ? h($) : "";
118
+ return /* @__PURE__ */ p(n, {
119
+ name: v,
120
+ label: w,
121
+ showAsterisk: T,
122
+ className: y,
123
+ errorMessage: V,
124
+ unShowFieldTemplate: P,
125
+ orientation: N,
126
+ children: /* @__PURE__ */ m(o, {
127
+ handleContainerFocus: Z,
128
+ disabled: U,
129
+ isError: H,
130
+ isFocused: G,
131
+ isLoading: x,
132
+ readOnly: S,
133
+ size: A,
134
+ variant: M,
135
+ prefixExists: !!k,
136
+ id: B,
137
+ children: [
138
+ /* @__PURE__ */ p("input", {
139
+ ref: R,
140
+ name: v,
141
+ value: ie,
142
+ type: "hidden"
143
+ }),
144
+ /* @__PURE__ */ p(t, {
145
+ iconSize: W,
146
+ icon: k,
147
+ className: "prefix"
148
+ }),
149
+ E && /* @__PURE__ */ p(E, {
150
+ size: W,
151
+ strokeWidth: 2.5
152
+ }),
153
+ /* @__PURE__ */ p(s, {
154
+ size: A,
155
+ children: $ ? /* @__PURE__ */ p("p", {
156
+ className: "hasValue",
157
+ children: g($)
158
+ }) : /* @__PURE__ */ p("p", { children: b })
159
+ }),
160
+ /* @__PURE__ */ p(i, {
161
+ isFocused: G,
162
+ children: /* @__PURE__ */ p(r, {
163
+ type: "single",
164
+ variant: F,
165
+ value: $,
166
+ onChange: ne,
167
+ viewValue: _.viewValue,
168
+ defaultViewValue: _.defaultViewValue,
169
+ onChangeView: _.onChangeView
170
+ })
171
+ }),
172
+ /* @__PURE__ */ p(a, {
173
+ disabled: U,
174
+ isFocused: G,
175
+ readOnly: S,
176
+ iconSize: W,
177
+ isLoading: x
178
+ }),
179
+ /* @__PURE__ */ p(l, {
180
+ iconSize: W,
181
+ isLoading: x
182
+ }),
183
+ /* @__PURE__ */ p(c, {
184
+ handleBlur: Q,
185
+ isFocused: G
186
+ })
187
+ ]
188
+ })
189
+ });
190
+ }
191
+ //#endregion
192
+ export { _ as DatePicker };
193
+
194
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/datePicker/index.tsx"],"sourcesContent":["import type { LucideIcon } from \"lucide-react\";\nimport { type FocusEvent, useId, useRef, useState } from \"react\";\n\nimport { useForm } from \"../../hooks/useForm\";\nimport { FieldTemplate } from \"../../services/fieldTemplate\";\nimport { IconRenderer } from \"../../services/iconRenderer\";\n\nimport { Calendar } from \"../calendar\";\n\nimport { DatePickerCalendarContainer } from \"./datePickerCalendarContainer\";\nimport { DatePickerChevron } from \"./datePickerChevron\";\nimport { DatePickerContainer } from \"./datePickerContainer\";\nimport { DatePickerContent } from \"./datePickerContent\";\nimport { DatePickerOverlay } from \"./datePickerOverlay\";\nimport { DatePickerSpinner } from \"./datePickerSpinner\";\n\nfunction toInputDateValue(date: Date) {\n\tconst pad = (value: number) => String(value).padStart(2, \"0\");\n\treturn `${date.getFullYear()}-${pad(date.getMonth() + 1)}-${pad(date.getDate())}`;\n}\n\nfunction toDisplayDateValue(date: Date) {\n\treturn date.toLocaleDateString(\"pt-BR\");\n}\n\ntype BaseDatePickerProps = {\n\t/** Field name for form submission. Required. */\n\tname: string;\n\t/** Optional HTML id for the underlying hidden input. */\n\tid?: string;\n\t/** Displays an asterisk on the label to signal a required field. */\n\tshowAsterisk?: boolean;\n\t/** Optional label text displayed above the date picker. */\n\tlabel?: string;\n\t/** Validation error message displayed below the date picker. */\n\terrorMessage?: string;\n\t/** Placeholder text shown when no date is selected. @default \"Selecione uma data...\" */\n\tplaceholder?: string;\n\t/** Additional CSS class applied to the wrapper element. */\n\tclassName?: string;\n\t/** Disables all interactions. @default false */\n\tdisabled?: boolean;\n\t/** Prevents value changes while keeping the current value visible. @default false */\n\treadOnly?: boolean;\n\t/** Shows a loading spinner and disables interactions. @default false */\n\tisLoading?: boolean;\n\t/**\n\t * Closes the calendar after a date is picked.\n\t * @default true for `single`, `false` for `range`.\n\t */\n\tcloseOnSelect?: boolean;\n\t/** Callback fired when the date picker gains focus. */\n\tonFocus?: () => void;\n\t/** Callback fired when the date picker loses focus. */\n\tonBlur?: (e: FocusEvent<HTMLDivElement>) => void;\n\t/**\n\t * DatePicker size.\n\t * @default \"md\"\n\t */\n\tsize?: \"md\" | \"lg\";\n\t/**\n\t * Visual style variant.\n\t * - `solid`: filled background.\n\t * - `outline`: bordered, transparent background.\n\t * - `underline`: bottom border only.\n\t * @default \"solid\"\n\t */\n\tvariant?: \"solid\" | \"outline\" | \"underline\";\n\t/** Text or icon rendered at the far left, outside the date picker area. */\n\tprefix?: string | LucideIcon;\n\t/** Lucide icon rendered inside the date picker on the left. */\n\tleftIcon?: LucideIcon;\n\t/** When true, skips `FieldTemplate` wrapper (label and error text). @default false */\n\tunShowFieldTemplate?: boolean;\n\t/**\n\t * Layout direction forwarded to `FieldTemplate`.\n\t * @default \"vertical\"\n\t */\n\torientation?: \"horizontal\" | \"vertical\" | \"horizontalReverse\";\n\t/**\n\t * Visual/behavioral variant forwarded to the internal `Calendar`.\n\t * @default \"complete\"\n\t */\n\tcalendarVariant?: \"basic\" | \"complete\";\n};\n\n/**\n * Props for DatePicker single-date selection mode.\n */\ntype SingleDatePickerProps = BaseDatePickerProps & {\n\t/** Sets single-date selection mode. */\n\ttype: \"single\";\n\t/** Controlled selected date. */\n\tvalue?: Date;\n\t/** Uncontrolled default selected date. */\n\tdefaultValue?: Date;\n\t/** Callback fired when the selected date changes. */\n\tonChange?: (date: Date) => void;\n\t/** Currently focused calendar view date. */\n\tviewValue?: Date;\n\t/** Initial focused calendar view date. */\n\tdefaultViewValue?: Date;\n\t/** Callback fired when the calendar view (month/year) changes. */\n\tonChangeView?: (date: Date) => void;\n};\n\n/**\n * Props for DatePicker range selection mode.\n */\ntype RangeDatePickerProps = BaseDatePickerProps & {\n\t/** Sets range selection mode. */\n\ttype: \"range\";\n\t/** Controlled selected range in `[start, end]` format. */\n\tvalue?: [Date, Date];\n\t/** Uncontrolled default range in `[start, end]` format. */\n\tdefaultValue?: [Date, Date];\n\t/** Callback fired when the selected range changes. */\n\tonChange?: (date: [Date, Date]) => void;\n\t/** Currently focused calendar view date. */\n\tviewValue?: Date;\n\t/** Initial focused calendar view date. */\n\tdefaultViewValue?: Date;\n\t/** Callback fired when the calendar view (month/year) changes. */\n\tonChangeView?: (date: Date) => void;\n\t/** Text placed between the start and end dates. @default \" até \" */\n\trangeSeparator?: string;\n};\n\n/**\n * Discriminated union of DatePicker props.\n */\ntype DatePickerProps = SingleDatePickerProps | RangeDatePickerProps;\n\n/**\n * DatePicker, date input field with a popover `Calendar`, supporting single-date\n * (`single`) and range (`range`) selection modes.\n *\n * Opens the calendar on click, the same way `Select` opens its options list, flipping\n * upward or downward depending on the available viewport space so it never renders\n * off-screen. Integrates with `useForm` to display validation errors by field name.\n *\n * @param props.name - Field name for form submission. Required.\n * @param props.type - Selection mode (`single` | `range`). Required.\n * @param props.value - Controlled selected date (`single`) or range (`range`).\n * @param props.defaultValue - Uncontrolled default date or range.\n * @param props.label - Label text displayed above the date picker.\n * @param props.placeholder - Placeholder shown when nothing is selected. Default: \"Selecione uma data...\"\n * @param props.errorMessage - Validation error message.\n * @param props.isLoading - Shows a loading spinner and disables interactions. Default: false\n * @param props.closeOnSelect - Closes the calendar after picking. Default: `true` for `single`, `false` for `range`.\n * @param props.onChange - Callback fired when the selected date/range changes.\n * @param props.calendarVariant - Visual/behavioral variant of the internal `Calendar`. Default: \"complete\"\n * @param props.size - DatePicker size (`md` | `lg`). Default: \"md\"\n * @param props.variant - Visual style variant. Default: \"solid\"\n * @param props.orientation - Layout direction. Default: \"vertical\"\n * @param props.unShowFieldTemplate - Skips wrapper, label, and error rendering. Default: false\n *\n * @returns DatePicker JSX element wrapped in `FieldTemplate`.\n *\n * @example\n * ```tsx\n * // Single date\n * <DatePicker\n * type=\"single\"\n * name=\"birthDate\"\n * label=\"Data de nascimento\"\n * onChange={(date) => console.log(\"Selected date:\", date)}\n * />\n *\n * // Range\n * <DatePicker\n * type=\"range\"\n * name=\"stay\"\n * label=\"Período da estadia\"\n * calendarVariant=\"basic\"\n * onChange={([start, end]) => console.log(\"Range:\", start, end)}\n * />\n * ```\n */\nfunction DatePicker(props: DatePickerProps) {\n\tconst {\n\t\tname,\n\t\tclassName: wrapperClassName = \"\",\n\t\tplaceholder = \"Selecione uma data...\",\n\t\terrorMessage: baseErrorMessage,\n\t\tisLoading = false,\n\t\treadOnly = false,\n\t\tid,\n\t\tlabel,\n\t\tshowAsterisk,\n\t\tleftIcon: LeftIcon,\n\t\tonFocus,\n\t\tonBlur,\n\t\tdisabled: baseDisabled = false,\n\t\tprefix,\n\t\tsize = \"md\",\n\t\tvalue,\n\t\tvariant = \"solid\",\n\t\torientation = \"vertical\",\n\t\tunShowFieldTemplate = false,\n\t\tcalendarVariant = \"complete\",\n\t} = props;\n\n\tconst closeOnSelect = props.closeOnSelect ?? props.type === \"single\";\n\n\tconst { fieldErrors } = useForm();\n\n\tconst datePickerRef = useRef<HTMLInputElement>(null);\n\tconst generatedId = useId();\n\tconst datePickerId = id || generatedId;\n\n\tconst errorMessage = baseErrorMessage || fieldErrors?.[name];\n\tconst isError = !!errorMessage;\n\tconst disabled = baseDisabled || isLoading || readOnly;\n\n\tconst iconSizes = { md: 20, lg: 20 };\n\tconst iconSize = iconSizes[size];\n\n\tconst [isFocused, setIsFocused] = useState(false);\n\tconst [internalSingleValue, setInternalSingleValue] = useState<\n\t\tDate | undefined\n\t>(props.type === \"single\" ? props.defaultValue : undefined);\n\tconst [internalRangeValue, setInternalRangeValue] = useState<\n\t\t[Date, Date] | undefined\n\t>(props.type === \"range\" ? props.defaultValue : undefined);\n\n\tfunction handleContainerFocus() {\n\t\tif (disabled || !datePickerRef?.current || isFocused) return;\n\t\tsetIsFocused(true);\n\t\tdatePickerRef.current.focus();\n\t\tonFocus?.();\n\t}\n\n\tfunction handleBlur() {\n\t\tsetIsFocused(false);\n\t\tif (onBlur && datePickerRef.current) datePickerRef.current.blur();\n\t}\n\n\tfunction handleChangeSingleDate(date: Date) {\n\t\tif (value === undefined) setInternalSingleValue(date);\n\t\tif (props.type === \"single\") props.onChange?.(date);\n\t\tif (closeOnSelect) handleBlur();\n\t}\n\n\tfunction handleChangeRangeDate(range: [Date, Date]) {\n\t\tif (value === undefined) setInternalRangeValue(range);\n\t\tif (props.type === \"range\") props.onChange?.(range);\n\t\tif (closeOnSelect) handleBlur();\n\t}\n\n\tif (props.type === \"range\") {\n\t\tconst rangeSeparator = props.rangeSeparator ?? \" até \";\n\t\tconst forceValue =\n\t\t\tvalue !== undefined ? (value as [Date, Date]) : internalRangeValue;\n\n\t\tconst hiddenInputValue = forceValue\n\t\t\t? JSON.stringify([\n\t\t\t\t\ttoInputDateValue(forceValue[0]),\n\t\t\t\t\ttoInputDateValue(forceValue[1]),\n\t\t\t\t])\n\t\t\t: \"\";\n\n\t\treturn (\n\t\t\t<FieldTemplate\n\t\t\t\tname={name}\n\t\t\t\tlabel={label}\n\t\t\t\tshowAsterisk={showAsterisk}\n\t\t\t\tclassName={wrapperClassName}\n\t\t\t\terrorMessage={errorMessage}\n\t\t\t\tunShowFieldTemplate={unShowFieldTemplate}\n\t\t\t\torientation={orientation}\n\t\t\t>\n\t\t\t\t<DatePickerContainer\n\t\t\t\t\thandleContainerFocus={handleContainerFocus}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tisError={isError}\n\t\t\t\t\tisFocused={isFocused}\n\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\tsize={size}\n\t\t\t\t\tvariant={variant}\n\t\t\t\t\tprefixExists={!!prefix}\n\t\t\t\t\tid={datePickerId}\n\t\t\t\t>\n\t\t\t\t\t<input\n\t\t\t\t\t\tref={datePickerRef}\n\t\t\t\t\t\tname={name}\n\t\t\t\t\t\tvalue={hiddenInputValue}\n\t\t\t\t\t\ttype=\"hidden\"\n\t\t\t\t\t/>\n\n\t\t\t\t\t<IconRenderer iconSize={iconSize} icon={prefix} className=\"prefix\" />\n\n\t\t\t\t\t{LeftIcon && <LeftIcon size={iconSize} strokeWidth={2.5} />}\n\n\t\t\t\t\t<DatePickerContent size={size}>\n\t\t\t\t\t\t{forceValue ? (\n\t\t\t\t\t\t\t<p className=\"hasValue\">\n\t\t\t\t\t\t\t\t{toDisplayDateValue(forceValue[0])}\n\t\t\t\t\t\t\t\t{rangeSeparator}\n\t\t\t\t\t\t\t\t{toDisplayDateValue(forceValue[1])}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<p>{placeholder}</p>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</DatePickerContent>\n\n\t\t\t\t\t<DatePickerCalendarContainer isFocused={isFocused}>\n\t\t\t\t\t\t<Calendar\n\t\t\t\t\t\t\ttype=\"range\"\n\t\t\t\t\t\t\tvariant={calendarVariant}\n\t\t\t\t\t\t\tvalue={forceValue}\n\t\t\t\t\t\t\tonChange={handleChangeRangeDate}\n\t\t\t\t\t\t\tviewValue={props.viewValue}\n\t\t\t\t\t\t\tdefaultViewValue={props.defaultViewValue}\n\t\t\t\t\t\t\tonChangeView={props.onChangeView}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</DatePickerCalendarContainer>\n\n\t\t\t\t\t<DatePickerChevron\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tisFocused={isFocused}\n\t\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\t\ticonSize={iconSize}\n\t\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\t/>\n\n\t\t\t\t\t<DatePickerSpinner iconSize={iconSize} isLoading={isLoading} />\n\t\t\t\t\t<DatePickerOverlay handleBlur={handleBlur} isFocused={isFocused} />\n\t\t\t\t</DatePickerContainer>\n\t\t\t</FieldTemplate>\n\t\t);\n\t}\n\n\tconst forceValue =\n\t\tvalue !== undefined ? (value as Date) : internalSingleValue;\n\n\tconst hiddenInputValue = forceValue ? toInputDateValue(forceValue) : \"\";\n\n\treturn (\n\t\t<FieldTemplate\n\t\t\tname={name}\n\t\t\tlabel={label}\n\t\t\tshowAsterisk={showAsterisk}\n\t\t\tclassName={wrapperClassName}\n\t\t\terrorMessage={errorMessage}\n\t\t\tunShowFieldTemplate={unShowFieldTemplate}\n\t\t\torientation={orientation}\n\t\t>\n\t\t\t<DatePickerContainer\n\t\t\t\thandleContainerFocus={handleContainerFocus}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tisError={isError}\n\t\t\t\tisFocused={isFocused}\n\t\t\t\tisLoading={isLoading}\n\t\t\t\treadOnly={readOnly}\n\t\t\t\tsize={size}\n\t\t\t\tvariant={variant}\n\t\t\t\tprefixExists={!!prefix}\n\t\t\t\tid={datePickerId}\n\t\t\t>\n\t\t\t\t<input\n\t\t\t\t\tref={datePickerRef}\n\t\t\t\t\tname={name}\n\t\t\t\t\tvalue={hiddenInputValue}\n\t\t\t\t\ttype=\"hidden\"\n\t\t\t\t/>\n\n\t\t\t\t<IconRenderer iconSize={iconSize} icon={prefix} className=\"prefix\" />\n\n\t\t\t\t{LeftIcon && <LeftIcon size={iconSize} strokeWidth={2.5} />}\n\n\t\t\t\t<DatePickerContent size={size}>\n\t\t\t\t\t{forceValue ? (\n\t\t\t\t\t\t<p className=\"hasValue\">{toDisplayDateValue(forceValue)}</p>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<p>{placeholder}</p>\n\t\t\t\t\t)}\n\t\t\t\t</DatePickerContent>\n\n\t\t\t\t<DatePickerCalendarContainer isFocused={isFocused}>\n\t\t\t\t\t<Calendar\n\t\t\t\t\t\ttype=\"single\"\n\t\t\t\t\t\tvariant={calendarVariant}\n\t\t\t\t\t\tvalue={forceValue}\n\t\t\t\t\t\tonChange={handleChangeSingleDate}\n\t\t\t\t\t\tviewValue={props.viewValue}\n\t\t\t\t\t\tdefaultViewValue={props.defaultViewValue}\n\t\t\t\t\t\tonChangeView={props.onChangeView}\n\t\t\t\t\t/>\n\t\t\t\t</DatePickerCalendarContainer>\n\n\t\t\t\t<DatePickerChevron\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tisFocused={isFocused}\n\t\t\t\t\treadOnly={readOnly}\n\t\t\t\t\ticonSize={iconSize}\n\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t/>\n\n\t\t\t\t<DatePickerSpinner iconSize={iconSize} isLoading={isLoading} />\n\t\t\t\t<DatePickerOverlay handleBlur={handleBlur} isFocused={isFocused} />\n\t\t\t</DatePickerContainer>\n\t\t</FieldTemplate>\n\t);\n}\n\nexport { DatePicker };\n"],"mappings":";;;;;;;;;;;;;AAgBA,SAAS,EAAiB,GAAY;CACrC,IAAM,KAAO,MAAkB,OAAO,CAAK,CAAC,CAAC,SAAS,GAAG,GAAG;CAC5D,OAAO,GAAG,EAAK,YAAY,EAAE,GAAG,EAAI,EAAK,SAAS,IAAI,CAAC,EAAE,GAAG,EAAI,EAAK,QAAQ,CAAC;AAC/E;AAEA,SAAS,EAAmB,GAAY;CACvC,OAAO,EAAK,mBAAmB,OAAO;AACvC;AA4JA,SAAS,EAAW,GAAwB;CAC3C,IAAM,EACL,SACA,WAAW,IAAmB,IAC9B,iBAAc,yBACd,cAAc,IACd,eAAY,IACZ,cAAW,IACX,OACA,UACA,iBACA,UAAU,GACV,aACA,WACA,UAAU,IAAe,IACzB,WACA,UAAO,MACP,UACA,aAAU,SACV,iBAAc,YACd,yBAAsB,IACtB,qBAAkB,eACf,GAEE,IAAgB,EAAM,iBAAiB,EAAM,SAAS,UAEtD,EAAE,mBAAgB,EAAQ,GAE1B,IAAgB,EAAyB,IAAI,GAC7C,IAAc,EAAM,GACpB,IAAe,KAAM,GAErB,IAAe,MAAoB,IAAc,IACjD,IAAU,CAAC,CAAC,GACZ,IAAW,KAAgB,KAAa,GAGxC,IAAW;EADG,IAAI;EAAI,IAAI;CACf,EAAU,IAErB,CAAC,GAAW,KAAgB,EAAS,EAAK,GAC1C,CAAC,GAAqB,KAA0B,EAEpD,EAAM,SAAS,WAAW,EAAM,eAAe,KAAA,CAAS,GACpD,CAAC,GAAoB,KAAyB,EAElD,EAAM,SAAS,UAAU,EAAM,eAAe,KAAA,CAAS;CAEzD,SAAS,IAAuB;EAC3B,KAAY,CAAC,GAAe,WAAW,MAC3C,EAAa,EAAI,GACjB,EAAc,QAAQ,MAAM,GAC5B,KAAU;CACX;CAEA,SAAS,IAAa;EAErB,AADA,EAAa,EAAK,GACd,KAAU,EAAc,WAAS,EAAc,QAAQ,KAAK;CACjE;CAEA,SAAS,GAAuB,GAAY;EAG3C,AAFI,MAAU,KAAA,KAAW,EAAuB,CAAI,GAChD,EAAM,SAAS,YAAU,EAAM,WAAW,CAAI,GAC9C,KAAe,EAAW;CAC/B;CAEA,SAAS,GAAsB,GAAqB;EAGnD,AAFI,MAAU,KAAA,KAAW,EAAsB,CAAK,GAChD,EAAM,SAAS,WAAS,EAAM,WAAW,CAAK,GAC9C,KAAe,EAAW;CAC/B;CAEA,IAAI,EAAM,SAAS,SAAS;EAC3B,IAAM,IAAiB,EAAM,kBAAkB,SACzC,IACL,MAAU,KAAA,IAAsC,IAAzB,GAElB,IAAmB,IACtB,KAAK,UAAU,CACf,EAAiB,EAAW,EAAE,GAC9B,EAAiB,EAAW,EAAE,CAC/B,CAAC,IACA;EAEH,OACC,kBAAC,GAAD;GACO;GACC;GACO;GACd,WAAW;GACG;GACO;GACR;aAEb,kBAAC,GAAD;IACuB;IACZ;IACD;IACE;IACA;IACD;IACJ;IACG;IACT,cAAc,CAAC,CAAC;IAChB,IAAI;cAVL;KAYC,kBAAC,SAAD;MACC,KAAK;MACC;MACN,OAAO;MACP,MAAK;KACL,CAAA;KAED,kBAAC,GAAD;MAAwB;MAAU,MAAM;MAAQ,WAAU;KAAU,CAAA;KAEnE,KAAY,kBAAC,GAAD;MAAU,MAAM;MAAU,aAAa;KAAM,CAAA;KAE1D,kBAAC,GAAD;MAAyB;gBACvB,IACA,kBAAC,KAAD;OAAG,WAAU;iBAAb;QACE,EAAmB,EAAW,EAAE;QAChC;QACA,EAAmB,EAAW,EAAE;OAC/B;WAEH,kBAAC,KAAD,EAAA,UAAI,EAAe,CAAA;KAEF,CAAA;KAEnB,kBAAC,GAAD;MAAwC;gBACvC,kBAAC,GAAD;OACC,MAAK;OACL,SAAS;OACT,OAAO;OACP,UAAU;OACV,WAAW,EAAM;OACjB,kBAAkB,EAAM;OACxB,cAAc,EAAM;MACpB,CAAA;KAC2B,CAAA;KAE7B,kBAAC,GAAD;MACW;MACC;MACD;MACA;MACC;KACX,CAAA;KAED,kBAAC,GAAD;MAA6B;MAAqB;KAAY,CAAA;KAC9D,kBAAC,GAAD;MAA+B;MAAuB;KAAY,CAAA;IAC9C;;EACP,CAAA;CAEjB;CAEA,IAAM,IACL,MAAU,KAAA,IAA8B,IAAjB,GAElB,KAAmB,IAAa,EAAiB,CAAU,IAAI;CAErE,OACC,kBAAC,GAAD;EACO;EACC;EACO;EACd,WAAW;EACG;EACO;EACR;YAEb,kBAAC,GAAD;GACuB;GACZ;GACD;GACE;GACA;GACD;GACJ;GACG;GACT,cAAc,CAAC,CAAC;GAChB,IAAI;aAVL;IAYC,kBAAC,SAAD;KACC,KAAK;KACC;KACN,OAAO;KACP,MAAK;IACL,CAAA;IAED,kBAAC,GAAD;KAAwB;KAAU,MAAM;KAAQ,WAAU;IAAU,CAAA;IAEnE,KAAY,kBAAC,GAAD;KAAU,MAAM;KAAU,aAAa;IAAM,CAAA;IAE1D,kBAAC,GAAD;KAAyB;eACvB,IACA,kBAAC,KAAD;MAAG,WAAU;gBAAY,EAAmB,CAAU;KAAK,CAAA,IAE3D,kBAAC,KAAD,EAAA,UAAI,EAAe,CAAA;IAEF,CAAA;IAEnB,kBAAC,GAAD;KAAwC;eACvC,kBAAC,GAAD;MACC,MAAK;MACL,SAAS;MACT,OAAO;MACP,UAAU;MACV,WAAW,EAAM;MACjB,kBAAkB,EAAM;MACxB,cAAc,EAAM;KACpB,CAAA;IAC2B,CAAA;IAE7B,kBAAC,GAAD;KACW;KACC;KACD;KACA;KACC;IACX,CAAA;IAED,kBAAC,GAAD;KAA6B;KAAqB;IAAY,CAAA;IAC9D,kBAAC,GAAD;KAA+B;KAAuB;IAAY,CAAA;GAC9C;;CACP,CAAA;AAEjB"}
@@ -0,0 +1,79 @@
1
+ @layer arkyn{.arkynFieldError{color:rgb(var(--spotlight-danger,244, 63, 94));font-size:12px;font-weight:600;line-height:12px}}
2
+
3
+ @layer arkyn{.arkynFieldLabel{color:var(--text-body,#52525b);font-size:14px;font-weight:600;line-height:19.07px}.arkynFieldLabel.asteriskTrue:before{content:"* ";text-align:left;color:rgb(var(--spotlight-danger,244, 63, 94));font-size:12px;font-weight:600;line-height:16.34px}}
4
+
5
+ @layer arkyn{.arkynFieldWrapper{gap:6px;height:max-content;display:flex}.arkynFieldWrapper.horizontal{flex-direction:row;align-items:center}.arkynFieldWrapper.horizontalReverse{flex-direction:row-reverse;align-items:center;margin-right:auto}.arkynFieldWrapper.vertical{flex-direction:column;align-items:flex-start}}
6
+
7
+ @layer arkyn{.arkynCalendarContainer{border:1px solid var(--border,#e2e8f0);background-color:var(--background-foreground,#fff);border-radius:8px;flex-direction:column;gap:32px;max-width:400px;padding:16px;display:flex}}
8
+
9
+ @layer arkyn{.arkynCalendarHeader{justify-content:space-between;align-items:center;gap:16px;display:flex}.arkynCalendarHeader>p{color:var(--text-body,#52525b);font-size:14px;font-weight:500}.arkynCalendarHeader .arkynCalendarButton{border:unset;background-color:unset;color:var(--text-muted,#a1a1aa);cursor:pointer;align-items:center;gap:4px;display:flex}.arkynCalendarHeader .arkynCalendarButton:hover svg{color:rgb(var(--spotlight-primary,17, 109, 220))}.arkynCalendarHeader>div{align-items:center;gap:12px;display:flex}.arkynCalendarHeader div .arkynSelectContainer{padding:unset;min-width:70px;min-height:24px}}
10
+
11
+ @layer arkyn{.arkynFieldError{color:rgb(var(--spotlight-danger,244, 63, 94));font-size:12px;font-weight:600;line-height:12px}}
12
+
13
+ @layer arkyn{.arkynFieldLabel{color:var(--text-body,#52525b);font-size:14px;font-weight:600;line-height:19.07px}.arkynFieldLabel.asteriskTrue:before{content:"* ";text-align:left;color:rgb(var(--spotlight-danger,244, 63, 94));font-size:12px;font-weight:600;line-height:16.34px}}
14
+
15
+ @layer arkyn{.arkynFieldWrapper{gap:6px;height:max-content;display:flex}.arkynFieldWrapper.horizontal{flex-direction:row;align-items:center}.arkynFieldWrapper.horizontalReverse{flex-direction:row-reverse;align-items:center;margin-right:auto}.arkynFieldWrapper.vertical{flex-direction:column;align-items:flex-start}}
16
+
17
+ @layer arkyn{.arkynSelectChevron{color:var(--text-muted,#a1a1aa);transition:all .15s ease-in-out}.arkynSelectChevron:not(.notAnimate).focused{transform:rotate(180deg)}}
18
+
19
+ @layer arkyn{.arkynSelectContainer{border:1px solid #0000;border-radius:8px;outline:1px solid #0000;align-items:center;gap:8px;width:100%;padding:0 16px;display:flex;position:relative}.arkynSelectContainer:hover{cursor:pointer}.arkynSelectContainer.opacity{opacity:.5}.arkynSelectContainer .prefix{color:var(--text-body,#52525b);background:var(--border,#e2e8f0);border-right:1px solid var(--border,#e2e8f0);border-radius:5px 0 0 5px;justify-content:center;align-items:center;font-weight:400;display:flex;position:absolute;top:0;bottom:0;left:0}.arkynSelectContainer>svg{color:var(--text-muted,#a1a1aa)}.arkynSelectContainer.errored>svg{color:rgb(var(--spotlight-danger,244, 63, 94))}.arkynSelectContainer:not(.opacity).focused>svg{color:rgb(var(--spotlight-primary,17, 109, 220))}.arkynSelectContainer.solid{border-color:var(--border,#e2e8f0);background-color:var(--input-background,#fafafa)}.arkynSelectContainer.solid.errored{border-color:rgb(var(--spotlight-danger,244, 63, 94));outline-color:rgb(var(--spotlight-danger,244, 63, 94))}.arkynSelectContainer:not(.opacity).solid.focused{border-color:rgb(var(--spotlight-primary,17, 109, 220));outline-color:rgb(var(--spotlight-primary,17, 109, 220))}.arkynSelectContainer.outline{border-color:var(--border,#e2e8f0);background-color:var(--background-foreground,#fff)}.arkynSelectContainer.outline.errored{border-color:rgb(var(--spotlight-danger,244, 63, 94));outline-color:rgb(var(--spotlight-danger,244, 63, 94))}.arkynSelectContainer:not(.opacity).outline.focused{border-color:rgb(var(--spotlight-primary,17, 109, 220));outline-color:rgb(var(--spotlight-primary,17, 109, 220))}.arkynSelectContainer.underline{border-top:none;border-left:none;border-right:none;border-color:var(--border,#e2e8f0);border-radius:0;outline:none}.arkynSelectContainer.underline .prefix{display:none}.arkynSelectContainer.underline:before{content:" ";background:0 0;height:1px;position:absolute;bottom:-2px;left:0;right:0}.arkynSelectContainer.underline.errored{border-color:rgba(var(--spotlight-danger,244, 63, 94))}.arkynSelectContainer.underline.errored:before{background:rgba(var(--spotlight-danger,244, 63, 94))}.arkynSelectContainer:not(.opacity).underline.focused{border-color:rgba(var(--spotlight-primary,17, 109, 220))}.arkynSelectContainer:not(.opacity).underline.focused:before{background:rgba(var(--spotlight-primary,17, 109, 220))}.arkynSelectContainer.md{min-height:40px}.arkynSelectContainer.md.hasPrefix{padding-left:60px}.arkynSelectContainer.md .prefix{width:44px;height:40px;font-size:14px}.arkynSelectContainer.lg{min-height:44px}.arkynSelectContainer.lg .prefix{width:48px;height:44px;font-size:16px}.arkynSelectContainer.lg.hasPrefix{padding-left:64px}}
20
+
21
+ @layer arkyn{.arkynSelectContent{flex-wrap:wrap;flex:1;align-items:start;gap:4px;display:flex}.arkynSelectContent>p{color:var(--text-muted,#a1a1aa);-webkit-user-select:none;user-select:none;font-weight:400}.arkynSelectContent>p.hasValue{color:var(--text-body,#52525b)}.arkynSelectContent.md>p{font-size:14px;line-height:14px}.arkynSelectContent.lg>p{font-size:16px;line-height:16px}}
22
+
23
+ @layer arkyn{.arkynSelectOption{color:var(--text-body,#52525b);background-color:inherit;-webkit-user-select:none;user-select:none;border:none;justify-content:space-between;align-items:center;font-weight:400;line-height:21.79px;display:flex}.arkynSelectOption.md{padding:8px 16px;font-size:14px}.arkynSelectOption.lg{padding:8px 16px;font-size:16px}.arkynSelectOption svg{width:20px;height:20px;color:rgb(var(--spotlight-primary,17, 109, 220));display:none}.arkynSelectOption:hover{cursor:pointer;filter:brightness(.98)}.arkynSelectOption.active{color:var(--text-heading,#09090b);filter:brightness(.95);font-weight:600}.arkynSelectOption.active svg{display:unset}html.dark .arkynSelectOption:hover,html.dark .arkynSelectOption.active{filter:brightness(1.2)}}
24
+
25
+ @layer arkyn{.arkynSelectOptionsContainer{z-index:7;border:1px solid var(--border,#e2e8f0);background-color:var(--background-foreground,#fff);border-radius:6px;flex-direction:column;flex:1;height:max-content;max-height:300px;list-style:none;display:flex;position:absolute;left:-2px;right:-2px;overflow:auto;box-shadow:0 4px 8px #0000001a}.arkynSelectOptionsContainer.bottom{top:calc(100% + 5px)}.arkynSelectOptionsContainer.top{bottom:calc(100% + 5px)}.arkynSelectOptionsContainer>p{text-align:center;color:var(--text-body,#52525b);padding:16px;font-size:14px;font-weight:400;line-height:21.79px}}
26
+
27
+ @layer arkyn{.arkynInput{border:1px solid #0000;border-radius:8px;outline:1px solid #0000;align-items:center;gap:8px;width:100%;padding:0 16px;display:flex;position:relative}.arkynInput:hover{cursor:text}.arkynInput input{width:100%;color:var(--text-heading,#09090b);background:0 0;border:none;outline:none;line-height:100%}.arkynInput input:disabled{-webkit-user-select:none;user-select:none}.arkynInput .prefix,.arkynInput .suffix{color:var(--text-body,#52525b);background:var(--border,#e2e8f0);justify-content:center;align-items:center;font-weight:400;line-height:100%;display:flex;position:absolute}.arkynInput .prefix{border-right:1px solid var(--border,#e2e8f0);border-radius:7px 0 0 7px;top:0;bottom:0;left:0}.arkynInput .suffix{border-left:1px solid var(--border,#e2e8f0);border-radius:0 7px 7px 0;top:0;bottom:0;right:0}.arkynInput input::placeholder{color:var(--text-muted,#a1a1aa);line-height:100%}.arkynInput svg{color:var(--text-muted,#a1a1aa)}.arkynInput.errored svg{color:rgb(var(--spotlight-danger,244, 63, 94))}.arkynInput:not(.opacity).focused svg{color:rgb(var(--spotlight-primary,17, 109, 220))}.arkynInput.opacity{opacity:.5}.arkynInput.solid{border-color:var(--border,#e2e8f0);background-color:var(--input-background,#fafafa)}.arkynInput.solid.errored{border-color:rgb(var(--spotlight-danger,244, 63, 94));outline-color:rgb(var(--spotlight-danger,244, 63, 94))}.arkynInput:not(.opacity).solid.focused{border-color:rgb(var(--spotlight-primary,17, 109, 220));outline-color:rgb(var(--spotlight-primary,17, 109, 220))}.arkynInput.outline{border-color:var(--border,#e2e8f0);background-color:var(--background-foreground,#fff)}.arkynInput.outline.errored{border-color:rgb(var(--spotlight-danger,244, 63, 94));outline-color:rgb(var(--spotlight-danger,244, 63, 94))}.arkynInput:not(.opacity).outline.focused{border-color:rgb(var(--spotlight-primary,17, 109, 220));outline-color:rgb(var(--spotlight-primary,17, 109, 220))}.arkynInput.underline{border-top:none;border-left:none;border-right:none;border-color:var(--border,#e2e8f0);border-radius:0;outline:none}.arkynInput.underline .suffix,.arkynInput.underline .prefix{display:none}.arkynInput.underline:before{content:" ";background:0 0;height:1px;position:absolute;bottom:-2px;left:0;right:0}.arkynInput.underline.errored{border-color:rgb(var(--spotlight-danger,244, 63, 94))}.arkynInput.underline.errored:before{background:rgb(var(--spotlight-danger,244, 63, 94))}.arkynInput:not(.opacity).underline.focused{border-color:rgb(var(--spotlight-primary,17, 109, 220))}.arkynInput:not(.opacity).underline.focused:before{background:rgb(var(--spotlight-primary,17, 109, 220))}.arkynInput.md input{min-height:38px;max-height:38px;font-size:14px;font-weight:400;line-height:14px}.arkynInput.md input::placeholder{font-size:14px;font-weight:400;line-height:14px}.arkynInput.md.hasPrefix{padding-left:60px}.arkynInput.md.hasSuffix{padding-right:60px}.arkynInput.md .prefix,.arkynInput.md .suffix{width:44px;height:38px;font-size:14px}.arkynInput.lg input{min-height:44px;max-height:44px;font-size:16px;font-weight:400;line-height:16px}.arkynInput.lg input::placeholder{font-size:16px;font-weight:400;line-height:16px}.arkynInput.lg .prefix,.arkynInput.lg .suffix{width:48px;height:44px;font-size:16px}.arkynInput.lg.hasPrefix{padding-left:64px}.arkynInput.lg.hasSuffix{padding-right:64px}.arkynInput .spinner{animation:2s linear infinite spin}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}}
28
+
29
+ @layer arkyn{.arkynSelectOverlay{z-index:5;position:fixed;inset:0}}
30
+
31
+ @layer arkyn{.arkynSelectSpinner{animation:2s linear infinite spin}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}}
32
+
33
+ @layer arkyn{.arkynCalendarTableBody{border-collapse:collapse;border-spacing:0}.arkynCalendarTableBody td p{text-align:center;padding:16px;font-size:14px}.arkynCalendarTableBody tr:first-child td{padding-top:8px}}
34
+
35
+ @layer arkyn{.arkynCalendarTableTd{-webkit-user-select:none;user-select:none;cursor:pointer}.arkynCalendarTableTd p{text-align:center;border-radius:8px;justify-content:center;align-items:center;width:40px;height:40px;margin:auto;font-size:14px;display:flex}.arkynCalendarTableTd.previous p,.arkynCalendarTableTd.next p{color:var(--text-muted,#a1a1aa)}.arkynCalendarTableTd.current p{color:var(--text-body,#52525b)}.arkynCalendarTableTd:hover p{color:rgb(var(--spotlight-primary,17, 109, 220))}.arkynCalendarTableTd.today:not(.checkedDay) p{color:var(--text-body,#52525b);background-color:var(--background-underground,#fafafa);filter:brightness(.97);font-weight:500}.arkynCalendarTableTd .textGroup{width:40px;height:40px;margin:auto;position:relative}.arkynCalendarTableTd.checkedDay .textGroup span{content:" ";background-color:rgb(var(--spotlight-primary,17, 109, 220));z-index:2;border-radius:8px;position:absolute;inset:0}.arkynCalendarTableTd.checkedDay .textGroup p{color:var(--white,#fff);z-index:3;font-weight:600;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.arkynCalendarTableTd.middleDay .textGroup span{content:" ";background-color:var(--background-underground,#fafafa);filter:brightness(.95);z-index:1;position:absolute;inset:0 -15px}.arkynCalendarTableTd:first-child.middleDay .textGroup span{border-top-left-radius:6px;border-bottom-left-radius:6px;left:0;right:-15px}.arkynCalendarTableTd:last-child.middleDay .textGroup span{border-top-right-radius:6px;border-bottom-right-radius:6px;left:-15px;right:0}.arkynCalendarTableTd.middleDay .textGroup p{color:var(--text-muted,#a1a1aa);z-index:2;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.arkynCalendarTableTd.current.middleDay .textGroup p{color:var(--text-body,#52525b)}}
36
+
37
+ @layer arkyn{.arkynCalendarTableContainer{border-collapse:collapse;border-spacing:0}}
38
+
39
+ @layer arkyn{.arkynCalendarTableHeader th{color:var(--text-muted,#a1a1aa);padding-bottom:8px;font-size:14px;font-weight:500}.arkynCalendarTableHeader{border-bottom:1px solid var(--border,#e2e8f0)}}
40
+
41
+ @layer arkyn{.arkynCalendarContainer{border:1px solid var(--border,#e2e8f0);background-color:var(--background-foreground,#fff);border-radius:8px;flex-direction:column;gap:32px;max-width:400px;padding:16px;display:flex}}
42
+
43
+ @layer arkyn{.arkynCalendarHeader{justify-content:space-between;align-items:center;gap:16px;display:flex}.arkynCalendarHeader>p{color:var(--text-body,#52525b);font-size:14px;font-weight:500}.arkynCalendarHeader .arkynCalendarButton{border:unset;background-color:unset;color:var(--text-muted,#a1a1aa);cursor:pointer;align-items:center;gap:4px;display:flex}.arkynCalendarHeader .arkynCalendarButton:hover svg{color:rgb(var(--spotlight-primary,17, 109, 220))}.arkynCalendarHeader>div{align-items:center;gap:12px;display:flex}.arkynCalendarHeader div .arkynSelectContainer{padding:unset;min-width:70px;min-height:24px}}
44
+
45
+ @layer arkyn{.arkynSelectChevron{color:var(--text-muted,#a1a1aa);transition:all .15s ease-in-out}.arkynSelectChevron:not(.notAnimate).focused{transform:rotate(180deg)}}
46
+
47
+ @layer arkyn{.arkynSelectContainer{border:1px solid #0000;border-radius:8px;outline:1px solid #0000;align-items:center;gap:8px;width:100%;padding:0 16px;display:flex;position:relative}.arkynSelectContainer:hover{cursor:pointer}.arkynSelectContainer.opacity{opacity:.5}.arkynSelectContainer .prefix{color:var(--text-body,#52525b);background:var(--border,#e2e8f0);border-right:1px solid var(--border,#e2e8f0);border-radius:5px 0 0 5px;justify-content:center;align-items:center;font-weight:400;display:flex;position:absolute;top:0;bottom:0;left:0}.arkynSelectContainer>svg{color:var(--text-muted,#a1a1aa)}.arkynSelectContainer.errored>svg{color:rgb(var(--spotlight-danger,244, 63, 94))}.arkynSelectContainer:not(.opacity).focused>svg{color:rgb(var(--spotlight-primary,17, 109, 220))}.arkynSelectContainer.solid{border-color:var(--border,#e2e8f0);background-color:var(--input-background,#fafafa)}.arkynSelectContainer.solid.errored{border-color:rgb(var(--spotlight-danger,244, 63, 94));outline-color:rgb(var(--spotlight-danger,244, 63, 94))}.arkynSelectContainer:not(.opacity).solid.focused{border-color:rgb(var(--spotlight-primary,17, 109, 220));outline-color:rgb(var(--spotlight-primary,17, 109, 220))}.arkynSelectContainer.outline{border-color:var(--border,#e2e8f0);background-color:var(--background-foreground,#fff)}.arkynSelectContainer.outline.errored{border-color:rgb(var(--spotlight-danger,244, 63, 94));outline-color:rgb(var(--spotlight-danger,244, 63, 94))}.arkynSelectContainer:not(.opacity).outline.focused{border-color:rgb(var(--spotlight-primary,17, 109, 220));outline-color:rgb(var(--spotlight-primary,17, 109, 220))}.arkynSelectContainer.underline{border-top:none;border-left:none;border-right:none;border-color:var(--border,#e2e8f0);border-radius:0;outline:none}.arkynSelectContainer.underline .prefix{display:none}.arkynSelectContainer.underline:before{content:" ";background:0 0;height:1px;position:absolute;bottom:-2px;left:0;right:0}.arkynSelectContainer.underline.errored{border-color:rgba(var(--spotlight-danger,244, 63, 94))}.arkynSelectContainer.underline.errored:before{background:rgba(var(--spotlight-danger,244, 63, 94))}.arkynSelectContainer:not(.opacity).underline.focused{border-color:rgba(var(--spotlight-primary,17, 109, 220))}.arkynSelectContainer:not(.opacity).underline.focused:before{background:rgba(var(--spotlight-primary,17, 109, 220))}.arkynSelectContainer.md{min-height:40px}.arkynSelectContainer.md.hasPrefix{padding-left:60px}.arkynSelectContainer.md .prefix{width:44px;height:40px;font-size:14px}.arkynSelectContainer.lg{min-height:44px}.arkynSelectContainer.lg .prefix{width:48px;height:44px;font-size:16px}.arkynSelectContainer.lg.hasPrefix{padding-left:64px}}
48
+
49
+ @layer arkyn{.arkynSelectContent{flex-wrap:wrap;flex:1;align-items:start;gap:4px;display:flex}.arkynSelectContent>p{color:var(--text-muted,#a1a1aa);-webkit-user-select:none;user-select:none;font-weight:400}.arkynSelectContent>p.hasValue{color:var(--text-body,#52525b)}.arkynSelectContent.md>p{font-size:14px;line-height:14px}.arkynSelectContent.lg>p{font-size:16px;line-height:16px}}
50
+
51
+ @layer arkyn{.arkynSelectOption{color:var(--text-body,#52525b);background-color:inherit;-webkit-user-select:none;user-select:none;border:none;justify-content:space-between;align-items:center;font-weight:400;line-height:21.79px;display:flex}.arkynSelectOption.md{padding:8px 16px;font-size:14px}.arkynSelectOption.lg{padding:8px 16px;font-size:16px}.arkynSelectOption svg{width:20px;height:20px;color:rgb(var(--spotlight-primary,17, 109, 220));display:none}.arkynSelectOption:hover{cursor:pointer;filter:brightness(.98)}.arkynSelectOption.active{color:var(--text-heading,#09090b);filter:brightness(.95);font-weight:600}.arkynSelectOption.active svg{display:unset}html.dark .arkynSelectOption:hover,html.dark .arkynSelectOption.active{filter:brightness(1.2)}}
52
+
53
+ @layer arkyn{.arkynSelectOptionsContainer{z-index:7;border:1px solid var(--border,#e2e8f0);background-color:var(--background-foreground,#fff);border-radius:6px;flex-direction:column;flex:1;height:max-content;max-height:300px;list-style:none;display:flex;position:absolute;left:-2px;right:-2px;overflow:auto;box-shadow:0 4px 8px #0000001a}.arkynSelectOptionsContainer.bottom{top:calc(100% + 5px)}.arkynSelectOptionsContainer.top{bottom:calc(100% + 5px)}.arkynSelectOptionsContainer>p{text-align:center;color:var(--text-body,#52525b);padding:16px;font-size:14px;font-weight:400;line-height:21.79px}}
54
+
55
+ @layer arkyn{.arkynInput{border:1px solid #0000;border-radius:8px;outline:1px solid #0000;align-items:center;gap:8px;width:100%;padding:0 16px;display:flex;position:relative}.arkynInput:hover{cursor:text}.arkynInput input{width:100%;color:var(--text-heading,#09090b);background:0 0;border:none;outline:none;line-height:100%}.arkynInput input:disabled{-webkit-user-select:none;user-select:none}.arkynInput .prefix,.arkynInput .suffix{color:var(--text-body,#52525b);background:var(--border,#e2e8f0);justify-content:center;align-items:center;font-weight:400;line-height:100%;display:flex;position:absolute}.arkynInput .prefix{border-right:1px solid var(--border,#e2e8f0);border-radius:7px 0 0 7px;top:0;bottom:0;left:0}.arkynInput .suffix{border-left:1px solid var(--border,#e2e8f0);border-radius:0 7px 7px 0;top:0;bottom:0;right:0}.arkynInput input::placeholder{color:var(--text-muted,#a1a1aa);line-height:100%}.arkynInput svg{color:var(--text-muted,#a1a1aa)}.arkynInput.errored svg{color:rgb(var(--spotlight-danger,244, 63, 94))}.arkynInput:not(.opacity).focused svg{color:rgb(var(--spotlight-primary,17, 109, 220))}.arkynInput.opacity{opacity:.5}.arkynInput.solid{border-color:var(--border,#e2e8f0);background-color:var(--input-background,#fafafa)}.arkynInput.solid.errored{border-color:rgb(var(--spotlight-danger,244, 63, 94));outline-color:rgb(var(--spotlight-danger,244, 63, 94))}.arkynInput:not(.opacity).solid.focused{border-color:rgb(var(--spotlight-primary,17, 109, 220));outline-color:rgb(var(--spotlight-primary,17, 109, 220))}.arkynInput.outline{border-color:var(--border,#e2e8f0);background-color:var(--background-foreground,#fff)}.arkynInput.outline.errored{border-color:rgb(var(--spotlight-danger,244, 63, 94));outline-color:rgb(var(--spotlight-danger,244, 63, 94))}.arkynInput:not(.opacity).outline.focused{border-color:rgb(var(--spotlight-primary,17, 109, 220));outline-color:rgb(var(--spotlight-primary,17, 109, 220))}.arkynInput.underline{border-top:none;border-left:none;border-right:none;border-color:var(--border,#e2e8f0);border-radius:0;outline:none}.arkynInput.underline .suffix,.arkynInput.underline .prefix{display:none}.arkynInput.underline:before{content:" ";background:0 0;height:1px;position:absolute;bottom:-2px;left:0;right:0}.arkynInput.underline.errored{border-color:rgb(var(--spotlight-danger,244, 63, 94))}.arkynInput.underline.errored:before{background:rgb(var(--spotlight-danger,244, 63, 94))}.arkynInput:not(.opacity).underline.focused{border-color:rgb(var(--spotlight-primary,17, 109, 220))}.arkynInput:not(.opacity).underline.focused:before{background:rgb(var(--spotlight-primary,17, 109, 220))}.arkynInput.md input{min-height:38px;max-height:38px;font-size:14px;font-weight:400;line-height:14px}.arkynInput.md input::placeholder{font-size:14px;font-weight:400;line-height:14px}.arkynInput.md.hasPrefix{padding-left:60px}.arkynInput.md.hasSuffix{padding-right:60px}.arkynInput.md .prefix,.arkynInput.md .suffix{width:44px;height:38px;font-size:14px}.arkynInput.lg input{min-height:44px;max-height:44px;font-size:16px;font-weight:400;line-height:16px}.arkynInput.lg input::placeholder{font-size:16px;font-weight:400;line-height:16px}.arkynInput.lg .prefix,.arkynInput.lg .suffix{width:48px;height:44px;font-size:16px}.arkynInput.lg.hasPrefix{padding-left:64px}.arkynInput.lg.hasSuffix{padding-right:64px}.arkynInput .spinner{animation:2s linear infinite spin}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}}
56
+
57
+ @layer arkyn{.arkynSelectOverlay{z-index:5;position:fixed;inset:0}}
58
+
59
+ @layer arkyn{.arkynSelectSpinner{animation:2s linear infinite spin}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}}
60
+
61
+ @layer arkyn{.arkynCalendarTableBody{border-collapse:collapse;border-spacing:0}.arkynCalendarTableBody td p{text-align:center;padding:16px;font-size:14px}.arkynCalendarTableBody tr:first-child td{padding-top:8px}}
62
+
63
+ @layer arkyn{.arkynCalendarTableTd{-webkit-user-select:none;user-select:none;cursor:pointer}.arkynCalendarTableTd p{text-align:center;border-radius:8px;justify-content:center;align-items:center;width:40px;height:40px;margin:auto;font-size:14px;display:flex}.arkynCalendarTableTd.previous p,.arkynCalendarTableTd.next p{color:var(--text-muted,#a1a1aa)}.arkynCalendarTableTd.current p{color:var(--text-body,#52525b)}.arkynCalendarTableTd:hover p{color:rgb(var(--spotlight-primary,17, 109, 220))}.arkynCalendarTableTd.today:not(.checkedDay) p{color:var(--text-body,#52525b);background-color:var(--background-underground,#fafafa);filter:brightness(.97);font-weight:500}.arkynCalendarTableTd .textGroup{width:40px;height:40px;margin:auto;position:relative}.arkynCalendarTableTd.checkedDay .textGroup span{content:" ";background-color:rgb(var(--spotlight-primary,17, 109, 220));z-index:2;border-radius:8px;position:absolute;inset:0}.arkynCalendarTableTd.checkedDay .textGroup p{color:var(--white,#fff);z-index:3;font-weight:600;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.arkynCalendarTableTd.middleDay .textGroup span{content:" ";background-color:var(--background-underground,#fafafa);filter:brightness(.95);z-index:1;position:absolute;inset:0 -15px}.arkynCalendarTableTd:first-child.middleDay .textGroup span{border-top-left-radius:6px;border-bottom-left-radius:6px;left:0;right:-15px}.arkynCalendarTableTd:last-child.middleDay .textGroup span{border-top-right-radius:6px;border-bottom-right-radius:6px;left:-15px;right:0}.arkynCalendarTableTd.middleDay .textGroup p{color:var(--text-muted,#a1a1aa);z-index:2;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.arkynCalendarTableTd.current.middleDay .textGroup p{color:var(--text-body,#52525b)}}
64
+
65
+ @layer arkyn{.arkynCalendarTableContainer{border-collapse:collapse;border-spacing:0}}
66
+
67
+ @layer arkyn{.arkynCalendarTableHeader th{color:var(--text-muted,#a1a1aa);padding-bottom:8px;font-size:14px;font-weight:500}.arkynCalendarTableHeader{border-bottom:1px solid var(--border,#e2e8f0)}}
68
+
69
+ @layer arkyn{.arkynDatePickerCalendarContainer{z-index:7;border-radius:8px;width:max-content;max-width:calc(100vw - 32px);position:absolute;left:0;box-shadow:0 4px 8px #0000001a}.arkynDatePickerCalendarContainer.bottom{top:calc(100% + 5px)}.arkynDatePickerCalendarContainer.top{bottom:calc(100% + 5px)}.arkynDatePickerCalendarContainer .arkynCalendarContainer{max-width:100%}}
70
+
71
+ @layer arkyn{.arkynDatePickerChevron{color:var(--text-muted,#a1a1aa);transition:all .15s ease-in-out}.arkynDatePickerChevron:not(.notAnimate).focused{transform:rotate(180deg)}}
72
+
73
+ @layer arkyn{.arkynDatePickerContainer{border:1px solid #0000;border-radius:8px;outline:1px solid #0000;align-items:center;gap:8px;width:100%;padding:0 16px;display:flex;position:relative}.arkynDatePickerContainer:hover{cursor:pointer}.arkynDatePickerContainer.opacity{opacity:.5}.arkynDatePickerContainer .prefix{color:var(--text-body,#52525b);background:var(--border,#e2e8f0);border-right:1px solid var(--border,#e2e8f0);border-radius:5px 0 0 5px;justify-content:center;align-items:center;font-weight:400;display:flex;position:absolute;top:0;bottom:0;left:0}.arkynDatePickerContainer>svg{color:var(--text-muted,#a1a1aa)}.arkynDatePickerContainer.errored>svg{color:rgb(var(--spotlight-danger,244, 63, 94))}.arkynDatePickerContainer:not(.opacity).focused>svg{color:rgb(var(--spotlight-primary,17, 109, 220))}.arkynDatePickerContainer.solid{border-color:var(--border,#e2e8f0);background-color:var(--input-background,#fafafa)}.arkynDatePickerContainer.solid.errored{border-color:rgb(var(--spotlight-danger,244, 63, 94));outline-color:rgb(var(--spotlight-danger,244, 63, 94))}.arkynDatePickerContainer:not(.opacity).solid.focused{border-color:rgb(var(--spotlight-primary,17, 109, 220));outline-color:rgb(var(--spotlight-primary,17, 109, 220))}.arkynDatePickerContainer.outline{border-color:var(--border,#e2e8f0);background-color:var(--background-foreground,#fff)}.arkynDatePickerContainer.outline.errored{border-color:rgb(var(--spotlight-danger,244, 63, 94));outline-color:rgb(var(--spotlight-danger,244, 63, 94))}.arkynDatePickerContainer:not(.opacity).outline.focused{border-color:rgb(var(--spotlight-primary,17, 109, 220));outline-color:rgb(var(--spotlight-primary,17, 109, 220))}.arkynDatePickerContainer.underline{border-top:none;border-left:none;border-right:none;border-color:var(--border,#e2e8f0);border-radius:0;outline:none}.arkynDatePickerContainer.underline .prefix{display:none}.arkynDatePickerContainer.underline:before{content:" ";background:0 0;height:1px;position:absolute;bottom:-2px;left:0;right:0}.arkynDatePickerContainer.underline.errored{border-color:rgba(var(--spotlight-danger,244, 63, 94))}.arkynDatePickerContainer.underline.errored:before{background:rgba(var(--spotlight-danger,244, 63, 94))}.arkynDatePickerContainer:not(.opacity).underline.focused{border-color:rgba(var(--spotlight-primary,17, 109, 220))}.arkynDatePickerContainer:not(.opacity).underline.focused:before{background:rgba(var(--spotlight-primary,17, 109, 220))}.arkynDatePickerContainer.md{min-height:40px}.arkynDatePickerContainer.md.hasPrefix{padding-left:60px}.arkynDatePickerContainer.md .prefix{width:44px;height:40px;font-size:14px}.arkynDatePickerContainer.lg{min-height:44px}.arkynDatePickerContainer.lg .prefix{width:48px;height:44px;font-size:16px}.arkynDatePickerContainer.lg.hasPrefix{padding-left:64px}}
74
+
75
+ @layer arkyn{.arkynDatePickerContent{flex-wrap:wrap;flex:1;align-items:start;gap:4px;display:flex}.arkynDatePickerContent>p{color:var(--text-muted,#a1a1aa);-webkit-user-select:none;user-select:none;font-weight:400}.arkynDatePickerContent>p.hasValue{color:var(--text-body,#52525b)}.arkynDatePickerContent.md>p{font-size:14px;line-height:14px}.arkynDatePickerContent.lg>p{font-size:16px;line-height:16px}}
76
+
77
+ @layer arkyn{.arkynDatePickerOverlay{z-index:5;position:fixed;inset:0}}
78
+
79
+ @layer arkyn{.arkynDatePickerSpinner{animation:2s linear infinite spin}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/divider/index.tsx"],"sourcesContent":["import type { HTMLAttributes } from \"react\";\nimport \"./styles.css\";\n\ntype DividerProps = HTMLAttributes<HTMLDivElement> & {\n\t/**\n\t * Divider orientation.\n\t * @default \"horizontal\"\n\t */\n\torientation?: \"horizontal\" | \"vertical\";\n};\n\n/**\n * Divider visually separates content sections.\n *\n * @param props.orientation - Line direction (`horizontal` | `vertical`). Default: \"horizontal\"\n *\n * **...Other valid HTML properties for `<div>`**\n *\n * @returns Divider JSX element.\n *\n * @example\n * ```tsx\n * // Between sections\n * <h2>Section 1</h2>\n * <Divider />\n * <h2>Section 2</h2>\n *\n * // Vertical (e.g. between sidebar and content)\n * <Divider orientation=\"vertical\" />\n * ```\n */\n\nfunction Divider(props: DividerProps) {\n\tconst {\n\t\tclassName: baseClassName,\n\t\torientation = \"horizontal\",\n\t\t...rest\n\t} = props;\n\n\tconst className = `arkynDivider ${orientation} ${baseClassName}`;\n\n\treturn <div className={className.trim()} {...rest} />;\n}\n\nexport { Divider };\n"],"mappings":";;;AAgCA,SAAS,EAAQ,GAAqB;CACrC,IAAM,EACL,WAAW,GACX,iBAAc,cACd,GAAG,MACA;CAIJ,OAAO,kBAAC,OAAD;EAAK,WAAW,gBAFW,EAAY,GAAG,IAEhB,KAAK;EAAG,GAAI;CAAO,CAAA;AACrD"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/divider/index.tsx"],"sourcesContent":["import type { HTMLAttributes } from \"react\";\nimport \"./styles.css\";\n\ntype DividerProps = HTMLAttributes<HTMLDivElement> & {\n\t/**\n\t * Divider orientation.\n\t * @default \"horizontal\"\n\t */\n\torientation?: \"horizontal\" | \"vertical\";\n};\n\n/**\n * Divider, visually separates content sections.\n *\n * @param props.orientation - Line direction (`horizontal` | `vertical`). Default: \"horizontal\"\n *\n * **...Other valid HTML properties for `<div>`**\n *\n * @returns Divider JSX element.\n *\n * @example\n * ```tsx\n * // Between sections\n * <h2>Section 1</h2>\n * <Divider />\n * <h2>Section 2</h2>\n *\n * // Vertical (e.g. between sidebar and content)\n * <Divider orientation=\"vertical\" />\n * ```\n */\n\nfunction Divider(props: DividerProps) {\n\tconst {\n\t\tclassName: baseClassName,\n\t\torientation = \"horizontal\",\n\t\t...rest\n\t} = props;\n\n\tconst className = `arkynDivider ${orientation} ${baseClassName}`;\n\n\treturn <div className={className.trim()} {...rest} />;\n}\n\nexport { Divider };\n"],"mappings":";;;AAgCA,SAAS,EAAQ,GAAqB;CACrC,IAAM,EACL,WAAW,GACX,iBAAc,cACd,GAAG,MACA;CAIJ,OAAO,kBAAC,OAAD;EAAK,WAAW,gBAFW,EAAY,GAAG,IAEhB,KAAK;EAAG,GAAI;CAAO,CAAA;AACrD"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../../src/components/drawer/drawerContainer/index.tsx"],"sourcesContent":["import {\n\ttype AnimationEvent,\n\ttype HTMLAttributes,\n\tuseEffect,\n\tuseState,\n} from \"react\";\n\nimport { useScrollLock } from \"../../../hooks/useScrollLock\";\nimport { DrawerProvider } from \"../drawerContext\";\nimport \"./styles.css\";\n\ntype DrawerContainerProps = HTMLAttributes<HTMLElement> & {\n\t/** Controls whether the drawer is visible. */\n\tisVisible: boolean;\n\t/** Callback invoked when the overlay is clicked to close the drawer. */\n\tmakeInvisible: () => void;\n\t/** Side from which the drawer slides in. @default \"left\" */\n\torientation?: \"left\" | \"right\";\n};\n\n/**\n * DrawerContainer animated slide-in panel rendered over an overlay backdrop.\n *\n * Locks body scroll while open. Closes when the overlay is clicked.\n * Provides context consumed by `DrawerHeader` (close button).\n *\n * @param props.isVisible - Whether the drawer is open. Required.\n * @param props.makeInvisible - Called when the overlay or close button is clicked. Required.\n * @param props.orientation - Slide direction. Default: `\"left\"`\n *\n * **...Other valid HTML `<aside>` properties**\n *\n * @returns DrawerContainer JSX element.\n *\n * @example\n * ```tsx\n * const [isOpen, setIsOpen] = useState(false);\n *\n * <DrawerContainer isVisible={isOpen} makeInvisible={() => setIsOpen(false)} orientation=\"right\">\n * <DrawerHeader><h2>Navigation</h2></DrawerHeader>\n * <nav>...</nav>\n * </DrawerContainer>\n * ```\n */\n\nfunction DrawerContainer(props: DrawerContainerProps) {\n\tconst {\n\t\tisVisible,\n\t\tmakeInvisible,\n\t\torientation = \"left\",\n\t\tchildren,\n\t\tclassName: baseClassName,\n\t\t...rest\n\t} = props;\n\n\tconst [mounted, setMounted] = useState(isVisible);\n\tconst [isExiting, setIsExiting] = useState(false);\n\n\tuseEffect(() => {\n\t\tif (isVisible) {\n\t\t\tsetMounted(true);\n\t\t\tsetIsExiting(false);\n\t\t} else if (mounted) {\n\t\t\tsetIsExiting(true);\n\t\t}\n\t}, [isVisible, mounted]);\n\n\tuseScrollLock(isVisible);\n\n\tfunction handleOverlayAnimationEnd(e: AnimationEvent<HTMLDivElement>) {\n\t\tif (e.target === e.currentTarget && isExiting) {\n\t\t\tsetIsExiting(false);\n\t\t\tsetMounted(false);\n\t\t\tmakeInvisible();\n\t\t}\n\t}\n\n\tif (!mounted) return null;\n\n\tconst className = [\n\t\t\"arkynDrawerContainer\",\n\t\torientation,\n\t\tisExiting ? \"exiting\" : \"\",\n\t\tbaseClassName,\n\t]\n\t\t.filter(Boolean)\n\t\t.join(\" \");\n\n\treturn (\n\t\t<DrawerProvider makeInvisible={() => setIsExiting(true)}>\n\t\t\t<aside className={className} {...rest}>\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"arkynDrawerContainerOverlay\"\n\t\t\t\t\tonClick={() => setIsExiting(true)}\n\t\t\t\t\tonAnimationEnd={handleOverlayAnimationEnd}\n\t\t\t\t/>\n\t\t\t\t<div className=\"arkynDrawerContainerContent\">{children}</div>\n\t\t\t</aside>\n\t\t</DrawerProvider>\n\t);\n}\n\nexport { DrawerContainer };\n"],"mappings":";;;;;;AA6CA,SAAS,EAAgB,GAA6B;CACrD,IAAM,EACL,cACA,kBACA,iBAAc,QACd,aACA,WAAW,GACX,GAAG,MACA,GAEE,CAAC,GAAS,KAAc,EAAS,CAAS,GAC1C,CAAC,GAAW,KAAgB,EAAS,EAAK;CAWhD,AATA,QAAgB;EACf,AAAI,KACH,EAAW,EAAI,GACf,EAAa,EAAK,KACR,KACV,EAAa,EAAI;CAEnB,GAAG,CAAC,GAAW,CAAO,CAAC,GAEvB,EAAc,CAAS;CAEvB,SAAS,EAA0B,GAAmC;EACrE,AAAI,EAAE,WAAW,EAAE,iBAAiB,MACnC,EAAa,EAAK,GAClB,EAAW,EAAK,GAChB,EAAc;CAEhB;CAaA,OAXK,IAYJ,kBAAC,GAAD;EAAgB,qBAAqB,EAAa,EAAI;YACrD,kBAAC,SAAD;GAAkB,WAXF;IACjB;IACA;IACA,IAAY,YAAY;IACxB;GACD,CAAC,CACC,OAAO,OAAO,CAAC,CACf,KAAK,GAIa;GAAW,GAAI;aAAjC,CACC,kBAAC,OAAD;IACC,WAAU;IACV,eAAe,EAAa,EAAI;IAChC,gBAAgB;GAChB,CAAA,GACD,kBAAC,OAAD;IAAK,WAAU;IAA+B;GAAc,CAAA,CACtD;;CACQ,CAAA,IArBI;AAuBtB"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../../src/components/drawer/drawerContainer/index.tsx"],"sourcesContent":["import {\n\ttype AnimationEvent,\n\ttype HTMLAttributes,\n\tuseEffect,\n\tuseState,\n} from \"react\";\n\nimport { useScrollLock } from \"../../../hooks/useScrollLock\";\nimport { DrawerProvider } from \"../drawerContext\";\nimport \"./styles.css\";\n\ntype DrawerContainerProps = HTMLAttributes<HTMLElement> & {\n\t/** Controls whether the drawer is visible. */\n\tisVisible: boolean;\n\t/** Callback invoked when the overlay is clicked to close the drawer. */\n\tmakeInvisible: () => void;\n\t/** Side from which the drawer slides in. @default \"left\" */\n\torientation?: \"left\" | \"right\";\n};\n\n/**\n * DrawerContainer, animated slide-in panel rendered over an overlay backdrop.\n *\n * Locks body scroll while open. Closes when the overlay is clicked.\n * Provides context consumed by `DrawerHeader` (close button).\n *\n * @param props.isVisible - Whether the drawer is open. Required.\n * @param props.makeInvisible - Called when the overlay or close button is clicked. Required.\n * @param props.orientation - Slide direction. Default: `\"left\"`\n *\n * **...Other valid HTML `<aside>` properties**\n *\n * @returns DrawerContainer JSX element.\n *\n * @example\n * ```tsx\n * const [isOpen, setIsOpen] = useState(false);\n *\n * <DrawerContainer isVisible={isOpen} makeInvisible={() => setIsOpen(false)} orientation=\"right\">\n * <DrawerHeader><h2>Navigation</h2></DrawerHeader>\n * <nav>...</nav>\n * </DrawerContainer>\n * ```\n */\n\nfunction DrawerContainer(props: DrawerContainerProps) {\n\tconst {\n\t\tisVisible,\n\t\tmakeInvisible,\n\t\torientation = \"left\",\n\t\tchildren,\n\t\tclassName: baseClassName,\n\t\t...rest\n\t} = props;\n\n\tconst [mounted, setMounted] = useState(isVisible);\n\tconst [isExiting, setIsExiting] = useState(false);\n\n\tuseEffect(() => {\n\t\tif (isVisible) {\n\t\t\tsetMounted(true);\n\t\t\tsetIsExiting(false);\n\t\t} else if (mounted) {\n\t\t\tsetIsExiting(true);\n\t\t}\n\t}, [isVisible, mounted]);\n\n\tuseScrollLock(isVisible);\n\n\tfunction handleOverlayAnimationEnd(e: AnimationEvent<HTMLDivElement>) {\n\t\tif (e.target === e.currentTarget && isExiting) {\n\t\t\tsetIsExiting(false);\n\t\t\tsetMounted(false);\n\t\t\tmakeInvisible();\n\t\t}\n\t}\n\n\tif (!mounted) return null;\n\n\tconst className = [\n\t\t\"arkynDrawerContainer\",\n\t\torientation,\n\t\tisExiting ? \"exiting\" : \"\",\n\t\tbaseClassName,\n\t]\n\t\t.filter(Boolean)\n\t\t.join(\" \");\n\n\treturn (\n\t\t<DrawerProvider makeInvisible={() => setIsExiting(true)}>\n\t\t\t<aside className={className} {...rest}>\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"arkynDrawerContainerOverlay\"\n\t\t\t\t\tonClick={() => setIsExiting(true)}\n\t\t\t\t\tonAnimationEnd={handleOverlayAnimationEnd}\n\t\t\t\t/>\n\t\t\t\t<div className=\"arkynDrawerContainerContent\">{children}</div>\n\t\t\t</aside>\n\t\t</DrawerProvider>\n\t);\n}\n\nexport { DrawerContainer };\n"],"mappings":";;;;;;AA6CA,SAAS,EAAgB,GAA6B;CACrD,IAAM,EACL,cACA,kBACA,iBAAc,QACd,aACA,WAAW,GACX,GAAG,MACA,GAEE,CAAC,GAAS,KAAc,EAAS,CAAS,GAC1C,CAAC,GAAW,KAAgB,EAAS,EAAK;CAWhD,AATA,QAAgB;EACf,AAAI,KACH,EAAW,EAAI,GACf,EAAa,EAAK,KACR,KACV,EAAa,EAAI;CAEnB,GAAG,CAAC,GAAW,CAAO,CAAC,GAEvB,EAAc,CAAS;CAEvB,SAAS,EAA0B,GAAmC;EACrE,AAAI,EAAE,WAAW,EAAE,iBAAiB,MACnC,EAAa,EAAK,GAClB,EAAW,EAAK,GAChB,EAAc;CAEhB;CAaA,OAXK,IAYJ,kBAAC,GAAD;EAAgB,qBAAqB,EAAa,EAAI;YACrD,kBAAC,SAAD;GAAkB,WAXF;IACjB;IACA;IACA,IAAY,YAAY;IACxB;GACD,CAAC,CACC,OAAO,OAAO,CAAC,CACf,KAAK,GAIa;GAAW,GAAI;aAAjC,CACC,kBAAC,OAAD;IACC,WAAU;IACV,eAAe,EAAa,EAAI;IAChC,gBAAgB;GAChB,CAAA,GACD,kBAAC,OAAD;IAAK,WAAU;IAA+B;GAAc,CAAA,CACtD;;CACQ,CAAA,IArBI;AAuBtB"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../../src/components/drawer/drawerHeader/index.tsx"],"sourcesContent":["import { X } from \"lucide-react\";\nimport type { HTMLAttributes } from \"react\";\n\nimport { useDrawer } from \"../drawerContext\";\nimport \"./styles.css\";\n\ntype DrawerHeaderProps = HTMLAttributes<HTMLElement> & {\n\t/** Whether to render the X close button. @default true */\n\tshowCloseButton?: boolean;\n};\n\n/**\n * DrawerHeader header section for a `DrawerContainer`, with an optional close button.\n *\n * The close button calls `makeInvisible` from the nearest `DrawerContainer` context.\n * Must be rendered inside a `DrawerContainer`.\n *\n * @param props.showCloseButton - Renders the X close button. Default: true\n *\n * **...Other valid HTML `<header>` properties**\n *\n * @returns DrawerHeader JSX element.\n *\n * @example\n * ```tsx\n * <DrawerContainer isVisible={isOpen} makeInvisible={() => setIsOpen(false)}>\n * <DrawerHeader>\n * <h2>Navigation</h2>\n * </DrawerHeader>\n * <nav>...</nav>\n * </DrawerContainer>\n * ```\n */\n\nfunction DrawerHeader(props: DrawerHeaderProps) {\n\tconst {\n\t\tshowCloseButton = true,\n\t\tclassName: baseClassName,\n\t\tchildren,\n\t\t...rest\n\t} = props;\n\n\tconst { makeInvisible } = useDrawer();\n\tconst className = `arkynDrawerHeader ${baseClassName}`;\n\n\treturn (\n\t\t<header className={className.trim()} {...rest}>\n\t\t\t{children}\n\n\t\t\t{showCloseButton && (\n\t\t\t\t<button\n\t\t\t\t\tclassName=\"arkynDrawerHeaderCloseButton\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={makeInvisible}\n\t\t\t\t\taria-label=\"Close drawer\"\n\t\t\t\t>\n\t\t\t\t\t<X size={24} />\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</header>\n\t);\n}\n\nexport { DrawerHeader };\n"],"mappings":";;;;;AAkCA,SAAS,EAAa,GAA0B;CAC/C,IAAM,EACL,qBAAkB,IAClB,WAAW,GACX,aACA,GAAG,MACA,GAEE,EAAE,qBAAkB,EAAU;CAGpC,OACC,kBAAC,UAAD;EAAQ,WAAW,qBAHmB,IAGT,KAAK;EAAG,GAAI;YAAzC,CACE,GAEA,KACA,kBAAC,UAAD;GACC,WAAU;GACV,MAAK;GACL,SAAS;GACT,cAAW;aAEX,kBAAC,GAAD,EAAG,MAAM,GAAK,CAAA;EACP,CAAA,CAEF;;AAEV"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../../src/components/drawer/drawerHeader/index.tsx"],"sourcesContent":["import { X } from \"lucide-react\";\nimport type { HTMLAttributes } from \"react\";\n\nimport { useDrawer } from \"../drawerContext\";\nimport \"./styles.css\";\n\ntype DrawerHeaderProps = HTMLAttributes<HTMLElement> & {\n\t/** Whether to render the X close button. @default true */\n\tshowCloseButton?: boolean;\n};\n\n/**\n * DrawerHeader, header section for a `DrawerContainer`, with an optional close button.\n *\n * The close button calls `makeInvisible` from the nearest `DrawerContainer` context.\n * Must be rendered inside a `DrawerContainer`.\n *\n * @param props.showCloseButton - Renders the X close button. Default: true\n *\n * **...Other valid HTML `<header>` properties**\n *\n * @returns DrawerHeader JSX element.\n *\n * @example\n * ```tsx\n * <DrawerContainer isVisible={isOpen} makeInvisible={() => setIsOpen(false)}>\n * <DrawerHeader>\n * <h2>Navigation</h2>\n * </DrawerHeader>\n * <nav>...</nav>\n * </DrawerContainer>\n * ```\n */\n\nfunction DrawerHeader(props: DrawerHeaderProps) {\n\tconst {\n\t\tshowCloseButton = true,\n\t\tclassName: baseClassName,\n\t\tchildren,\n\t\t...rest\n\t} = props;\n\n\tconst { makeInvisible } = useDrawer();\n\tconst className = `arkynDrawerHeader ${baseClassName}`;\n\n\treturn (\n\t\t<header className={className.trim()} {...rest}>\n\t\t\t{children}\n\n\t\t\t{showCloseButton && (\n\t\t\t\t<button\n\t\t\t\t\tclassName=\"arkynDrawerHeaderCloseButton\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonClick={makeInvisible}\n\t\t\t\t\taria-label=\"Close drawer\"\n\t\t\t\t>\n\t\t\t\t\t<X size={24} />\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</header>\n\t);\n}\n\nexport { DrawerHeader };\n"],"mappings":";;;;;AAkCA,SAAS,EAAa,GAA0B;CAC/C,IAAM,EACL,qBAAkB,IAClB,WAAW,GACX,aACA,GAAG,MACA,GAEE,EAAE,qBAAkB,EAAU;CAGpC,OACC,kBAAC,UAAD;EAAQ,WAAW,qBAHmB,IAGT,KAAK;EAAG,GAAI;YAAzC,CACE,GAEA,KACA,kBAAC,UAAD;GACC,WAAU;GACV,MAAK;GACL,SAAS;GACT,cAAW;aAEX,kBAAC,GAAD,EAAG,MAAM,GAAK,CAAA;EACP,CAAA,CAEF;;AAEV"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/facebookPixel/index.tsx"],"sourcesContent":["import { ClientOnly } from \"../clientOnly\";\nimport { FacebookPixelClient } from \"./facebookPixel.client\";\n\ntype FacebookPixelProps = {\n\t/** Facebook Pixel ID from your Ads Manager account. Required. */\n\tpixelId: string;\n\t/** When true, renders the pixel in development mode (bypasses the production check). @default false */\n\tshowInDevMode?: boolean;\n\t/** Pixel initialization options. */\n\toptions?: {\n\t\t/** Enables automatic configuration. @default true */\n\t\tautoConfig?: boolean;\n\t\t/** Enables debug logging in the browser console. @default false */\n\t\tdebug?: boolean;\n\t};\n\t/** When true, fires a standard `PageView` event on mount. */\n\tpageView?: boolean;\n\t/** When true, grants cookie/tracking consent via `fbq(\"consent\", \"grant\")`. */\n\tgrantConsent?: boolean;\n\t/** When true, revokes cookie/tracking consent via `fbq(\"consent\", \"revoke\")`. */\n\trevokeConsent?: boolean;\n\t/** Standard event to track: `[eventName, eventData?]`. */\n\t// biome-ignore lint/suspicious/noExplicitAny: intentional\n\ttrack?: [string, any?];\n\t/** Custom event to track: `[eventName, eventData?]`. */\n\t// biome-ignore lint/suspicious/noExplicitAny: intentional\n\ttrackCustom?: [string, any?];\n\t/** Single-pixel standard event: `[eventName, eventData?]`. */\n\t// biome-ignore lint/suspicious/noExplicitAny: intentional\n\ttrackSingle?: [string, any?];\n\t/** Single-pixel custom event: `[eventName, eventData?]`. */\n\t// biome-ignore lint/suspicious/noExplicitAny: intentional\n\ttrackSingleCustom?: [string, any?];\n};\n\n/**\n * FacebookPixel injects the Facebook Pixel tracking script client-side.\n *\n * Renders nothing in development mode unless `showInDevMode` is `true`.\n * Wrapped in `ClientOnly` to avoid SSR errors.\n *\n * @param props.pixelId - Facebook Pixel ID. Required.\n * @param props.showInDevMode - Renders in development mode. Default: false\n * @param props.pageView - Fires a `PageView` event on mount.\n * @param props.grantConsent - Grants tracking consent.\n * @param props.revokeConsent - Revokes tracking consent.\n * @param props.track - Standard event to fire: `[eventName, params?]`.\n * @param props.trackCustom - Custom event to fire: `[eventName, params?]`.\n *\n * @returns Empty fragment in dev mode; otherwise the pixel script component.\n *\n * @example\n * ```tsx\n * // Basic page view tracking in root layout\n * <FacebookPixel pixelId=\"123456789012345\" pageView />\n *\n * // With LGPD consent handling\n * <FacebookPixel\n * pixelId=\"123456789012345\"\n * pageView\n * grantConsent={userAcceptedCookies}\n * />\n *\n * // Track a purchase event\n * <FacebookPixel\n * pixelId=\"123456789012345\"\n * track={[\"Purchase\", { value: 99.90, currency: \"BRL\" }]}\n * />\n * ```\n */\nfunction FacebookPixel(props: FacebookPixelProps) {\n\tif (process.env.NODE_ENV !== \"production\" && !props.showInDevMode) {\n\t\treturn null;\n\t}\n\n\treturn <ClientOnly>{() => <FacebookPixelClient {...props} />}</ClientOnly>;\n}\n\nexport { FacebookPixel, type FacebookPixelProps };\n"],"mappings":";;;;AAsEA,SAAS,EAAc,GAA2B;CAKjD,OAJA,QAAA,IAAA,aAA6B,gBAAgB,CAAC,EAAM,gBAC5C,OAGD,kBAAC,GAAD,EAAA,gBAAmB,kBAAC,GAAD,EAAqB,GAAI,EAAQ,CAAA,EAAc,CAAA;AAC1E"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/facebookPixel/index.tsx"],"sourcesContent":["import { ClientOnly } from \"../clientOnly\";\nimport { FacebookPixelClient } from \"./facebookPixel.client\";\n\ntype FacebookPixelProps = {\n\t/** Facebook Pixel ID from your Ads Manager account. Required. */\n\tpixelId: string;\n\t/** When true, renders the pixel in development mode (bypasses the production check). @default false */\n\tshowInDevMode?: boolean;\n\t/** Pixel initialization options. */\n\toptions?: {\n\t\t/** Enables automatic configuration. @default true */\n\t\tautoConfig?: boolean;\n\t\t/** Enables debug logging in the browser console. @default false */\n\t\tdebug?: boolean;\n\t};\n\t/** When true, fires a standard `PageView` event on mount. */\n\tpageView?: boolean;\n\t/** When true, grants cookie/tracking consent via `fbq(\"consent\", \"grant\")`. */\n\tgrantConsent?: boolean;\n\t/** When true, revokes cookie/tracking consent via `fbq(\"consent\", \"revoke\")`. */\n\trevokeConsent?: boolean;\n\t/** Standard event to track: `[eventName, eventData?]`. */\n\t// biome-ignore lint/suspicious/noExplicitAny: intentional\n\ttrack?: [string, any?];\n\t/** Custom event to track: `[eventName, eventData?]`. */\n\t// biome-ignore lint/suspicious/noExplicitAny: intentional\n\ttrackCustom?: [string, any?];\n\t/** Single-pixel standard event: `[eventName, eventData?]`. */\n\t// biome-ignore lint/suspicious/noExplicitAny: intentional\n\ttrackSingle?: [string, any?];\n\t/** Single-pixel custom event: `[eventName, eventData?]`. */\n\t// biome-ignore lint/suspicious/noExplicitAny: intentional\n\ttrackSingleCustom?: [string, any?];\n};\n\n/**\n * FacebookPixel, injects the Facebook Pixel tracking script client-side.\n *\n * Renders nothing in development mode unless `showInDevMode` is `true`.\n * Wrapped in `ClientOnly` to avoid SSR errors.\n *\n * @param props.pixelId - Facebook Pixel ID. Required.\n * @param props.showInDevMode - Renders in development mode. Default: false\n * @param props.pageView - Fires a `PageView` event on mount.\n * @param props.grantConsent - Grants tracking consent.\n * @param props.revokeConsent - Revokes tracking consent.\n * @param props.track - Standard event to fire: `[eventName, params?]`.\n * @param props.trackCustom - Custom event to fire: `[eventName, params?]`.\n *\n * @returns Empty fragment in dev mode; otherwise the pixel script component.\n *\n * @example\n * ```tsx\n * // Basic page view tracking in root layout\n * <FacebookPixel pixelId=\"123456789012345\" pageView />\n *\n * // With LGPD consent handling\n * <FacebookPixel\n * pixelId=\"123456789012345\"\n * pageView\n * grantConsent={userAcceptedCookies}\n * />\n *\n * // Track a purchase event\n * <FacebookPixel\n * pixelId=\"123456789012345\"\n * track={[\"Purchase\", { value: 99.90, currency: \"BRL\" }]}\n * />\n * ```\n */\nfunction FacebookPixel(props: FacebookPixelProps) {\n\tif (process.env.NODE_ENV !== \"production\" && !props.showInDevMode) {\n\t\treturn null;\n\t}\n\n\treturn <ClientOnly>{() => <FacebookPixelClient {...props} />}</ClientOnly>;\n}\n\nexport { FacebookPixel, type FacebookPixelProps };\n"],"mappings":";;;;AAsEA,SAAS,EAAc,GAA2B;CAKjD,OAJA,QAAA,IAAA,aAA6B,gBAAgB,CAAC,EAAM,gBAC5C,OAGD,kBAAC,GAAD,EAAA,gBAAmB,kBAAC,GAAD,EAAqB,GAAI,EAAQ,CAAA,EAAc,CAAA;AAC1E"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/fieldError/index.tsx"],"sourcesContent":["import type { HTMLAttributes } from \"react\";\nimport \"./styles.css\";\n\ntype FieldErrorProps = HTMLAttributes<HTMLElement>;\n\n/**\n * FieldError displays a validation error message below a form field.\n *\n * Renders nothing when `children` is empty or falsy.\n *\n * **...Other valid HTML properties for `<strong>`**\n *\n * @returns FieldError `<strong>` element, or an empty fragment when there is no message.\n *\n * @example\n * ```tsx\n * <FieldError>This field is required</FieldError>\n *\n * {error && <FieldError>{error}</FieldError>}\n * ```\n */\n\nfunction FieldError(props: FieldErrorProps) {\n\tconst { children, className: baseClassName, ...rest } = props;\n\tconst className = `arkynFieldError ${baseClassName}`;\n\n\tif (!children) return null;\n\n\treturn (\n\t\t<strong className={className.trim()} {...rest}>\n\t\t\t{children}\n\t\t</strong>\n\t);\n}\n\nexport { FieldError };\n"],"mappings":";;;AAsBA,SAAS,EAAW,GAAwB;CAC3C,IAAM,EAAE,aAAU,WAAW,GAAe,GAAG,MAAS,GAClD,IAAY,mBAAmB;CAIrC,OAFK,IAGJ,kBAAC,UAAD;EAAQ,WAAW,EAAU,KAAK;EAAG,GAAI;EACvC;CACM,CAAA,IALa;AAOvB"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/fieldError/index.tsx"],"sourcesContent":["import type { HTMLAttributes } from \"react\";\nimport \"./styles.css\";\n\ntype FieldErrorProps = HTMLAttributes<HTMLElement>;\n\n/**\n * FieldError, displays a validation error message below a form field.\n *\n * Renders nothing when `children` is empty or falsy.\n *\n * **...Other valid HTML properties for `<strong>`**\n *\n * @returns FieldError `<strong>` element, or an empty fragment when there is no message.\n *\n * @example\n * ```tsx\n * <FieldError>This field is required</FieldError>\n *\n * {error && <FieldError>{error}</FieldError>}\n * ```\n */\n\nfunction FieldError(props: FieldErrorProps) {\n\tconst { children, className: baseClassName, ...rest } = props;\n\tconst className = `arkynFieldError ${baseClassName}`;\n\n\tif (!children) return null;\n\n\treturn (\n\t\t<strong className={className.trim()} {...rest}>\n\t\t\t{children}\n\t\t</strong>\n\t);\n}\n\nexport { FieldError };\n"],"mappings":";;;AAsBA,SAAS,EAAW,GAAwB;CAC3C,IAAM,EAAE,aAAU,WAAW,GAAe,GAAG,MAAS,GAClD,IAAY,mBAAmB;CAIrC,OAFK,IAGJ,kBAAC,UAAD;EAAQ,WAAW,EAAU,KAAK;EAAG,GAAI;EACvC;CACM,CAAA,IALa;AAOvB"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/fieldLabel/index.tsx"],"sourcesContent":["import type { LabelHTMLAttributes } from \"react\";\nimport \"./styles.css\";\n\ntype FieldLabelProps = LabelHTMLAttributes<HTMLLabelElement> & {\n\t/** When true, appends an asterisk (*) to signal a required field. @default false */\n\tshowAsterisk?: boolean;\n};\n\n/**\n * FieldLabel label for form fields, with an optional required-field asterisk.\n *\n * @param props.showAsterisk - Appends `*` to the label. Default: false\n *\n * **...Other valid HTML properties for `<label>`**\n *\n * @returns FieldLabel JSX element.\n *\n * @example\n * ```tsx\n * <FieldLabel htmlFor=\"email\" showAsterisk>Email Address</FieldLabel>\n * ```\n */\n\nfunction FieldLabel(props: FieldLabelProps) {\n\tconst {\n\t\tshowAsterisk = false,\n\t\tclassName: baseClassName = \"\",\n\t\t...rest\n\t} = props;\n\n\tconst show = showAsterisk ? \"asteriskTrue\" : \"asteriskFalse\";\n\tconst className = `arkynFieldLabel ${show} ${baseClassName}`;\n\n\t// biome-ignore lint/a11y/noLabelWithoutControl: htmlFor is passed via ...rest\n\treturn <label className={className.trim()} {...rest} />;\n}\n\nexport { FieldLabel };\n"],"mappings":";;;AAuBA,SAAS,EAAW,GAAwB;CAC3C,IAAM,EACL,kBAAe,IACf,WAAW,IAAgB,IAC3B,GAAG,MACA;CAMJ,OAAO,kBAAC,SAAD;EAAO,WAAW,mBAJZ,IAAe,iBAAiB,gBACH,GAAG,IAGV,KAAK;EAAG,GAAI;CAAO,CAAA;AACvD"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/fieldLabel/index.tsx"],"sourcesContent":["import type { LabelHTMLAttributes } from \"react\";\nimport \"./styles.css\";\n\ntype FieldLabelProps = LabelHTMLAttributes<HTMLLabelElement> & {\n\t/** When true, appends an asterisk (*) to signal a required field. @default false */\n\tshowAsterisk?: boolean;\n};\n\n/**\n * FieldLabel, label for form fields, with an optional required-field asterisk.\n *\n * @param props.showAsterisk - Appends `*` to the label. Default: false\n *\n * **...Other valid HTML properties for `<label>`**\n *\n * @returns FieldLabel JSX element.\n *\n * @example\n * ```tsx\n * <FieldLabel htmlFor=\"email\" showAsterisk>Email Address</FieldLabel>\n * ```\n */\n\nfunction FieldLabel(props: FieldLabelProps) {\n\tconst {\n\t\tshowAsterisk = false,\n\t\tclassName: baseClassName = \"\",\n\t\t...rest\n\t} = props;\n\n\tconst show = showAsterisk ? \"asteriskTrue\" : \"asteriskFalse\";\n\tconst className = `arkynFieldLabel ${show} ${baseClassName}`;\n\n\t// biome-ignore lint/a11y/noLabelWithoutControl: htmlFor is passed via ...rest\n\treturn <label className={className.trim()} {...rest} />;\n}\n\nexport { FieldLabel };\n"],"mappings":";;;AAuBA,SAAS,EAAW,GAAwB;CAC3C,IAAM,EACL,kBAAe,IACf,WAAW,IAAgB,IAC3B,GAAG,MACA;CAMJ,OAAO,kBAAC,SAAD;EAAO,WAAW,mBAJZ,IAAe,iBAAiB,gBACH,GAAG,IAGV,KAAK;EAAG,GAAI;CAAO,CAAA;AACvD"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/fieldWrapper/index.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from \"react\";\nimport \"./styles.css\";\n\ntype FieldWrapperProps = HTMLAttributes<HTMLElement> & {\n\t/** Field elements to render inside the wrapper (label, input, error, etc.). Required. */\n\tchildren: ReactNode;\n\t/**\n\t * Layout orientation of the wrapper.\n\t * @default \"vertical\"\n\t */\n\torientation?: \"vertical\" | \"horizontal\" | \"horizontalReverse\";\n};\n\n/**\n * FieldWrapper `<section>` container that groups a form field with its label and error message.\n *\n * @param props.children - Field elements (label, input, error, etc.).\n * @param props.orientation - Layout direction. Default: \"vertical\"\n *\n * **...Other valid HTML properties for `<section>`**\n *\n * @returns FieldWrapper JSX element.\n *\n * @example\n * ```tsx\n * <FieldWrapper>\n * <FieldLabel showAsterisk>Email</FieldLabel>\n * <Input name=\"email\" type=\"email\" />\n * <FieldError>Invalid email address</FieldError>\n * </FieldWrapper>\n * ```\n */\n\nfunction FieldWrapper(props: FieldWrapperProps) {\n\tconst {\n\t\tchildren,\n\t\tclassName: baseClassName,\n\t\torientation = \"vertical\",\n\t\t...rest\n\t} = props;\n\n\tconst className = `arkynFieldWrapper ${baseClassName} ${orientation}`;\n\n\treturn (\n\t\t<section className={className.trim()} {...rest}>\n\t\t\t{children}\n\t\t</section>\n\t);\n}\n\nexport { FieldWrapper };\n"],"mappings":";;;AAiCA,SAAS,EAAa,GAA0B;CAC/C,IAAM,EACL,aACA,WAAW,GACX,iBAAc,YACd,GAAG,MACA;CAIJ,OACC,kBAAC,WAAD;EAAS,WAAW,qBAHkB,EAAc,GAAG,IAGzB,KAAK;EAAG,GAAI;EACxC;CACO,CAAA;AAEX"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/fieldWrapper/index.tsx"],"sourcesContent":["import type { HTMLAttributes, ReactNode } from \"react\";\nimport \"./styles.css\";\n\ntype FieldWrapperProps = HTMLAttributes<HTMLElement> & {\n\t/** Field elements to render inside the wrapper (label, input, error, etc.). Required. */\n\tchildren: ReactNode;\n\t/**\n\t * Layout orientation of the wrapper.\n\t * @default \"vertical\"\n\t */\n\torientation?: \"vertical\" | \"horizontal\" | \"horizontalReverse\";\n};\n\n/**\n * FieldWrapper, `<section>` container that groups a form field with its label and error message.\n *\n * @param props.children - Field elements (label, input, error, etc.).\n * @param props.orientation - Layout direction. Default: \"vertical\"\n *\n * **...Other valid HTML properties for `<section>`**\n *\n * @returns FieldWrapper JSX element.\n *\n * @example\n * ```tsx\n * <FieldWrapper>\n * <FieldLabel showAsterisk>Email</FieldLabel>\n * <Input name=\"email\" type=\"email\" />\n * <FieldError>Invalid email address</FieldError>\n * </FieldWrapper>\n * ```\n */\n\nfunction FieldWrapper(props: FieldWrapperProps) {\n\tconst {\n\t\tchildren,\n\t\tclassName: baseClassName,\n\t\torientation = \"vertical\",\n\t\t...rest\n\t} = props;\n\n\tconst className = `arkynFieldWrapper ${baseClassName} ${orientation}`;\n\n\treturn (\n\t\t<section className={className.trim()} {...rest}>\n\t\t\t{children}\n\t\t</section>\n\t);\n}\n\nexport { FieldWrapper };\n"],"mappings":";;;AAiCA,SAAS,EAAa,GAA0B;CAC/C,IAAM,EACL,aACA,WAAW,GACX,iBAAc,YACd,GAAG,MACA;CAIJ,OACC,kBAAC,WAAD;EAAS,WAAW,qBAHkB,EAAc,GAAG,IAGzB,KAAK;EAAG,GAAI;EACxC;CACO,CAAA;AAEX"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/fileUpload/index.tsx"],"sourcesContent":["import { useState } from \"react\";\n\nimport { useForm } from \"../../hooks/useForm\";\nimport { FieldError } from \"../fieldError\";\nimport { FieldLabel } from \"../fieldLabel\";\nimport { FieldWrapper } from \"../fieldWrapper\";\n\nimport { HasFileContent } from \"./hasFileContent\";\nimport { NoFileContent } from \"./noFileContent\";\nimport \"./styles.css\";\n\ntype FileUploadProps = {\n\t/** Field name for form submission (stores the uploaded file URL). Required. */\n\tname: string;\n\t/** Server endpoint URL that receives the `multipart/form-data` upload request. Required. */\n\taction: string;\n\t/** Disables file selection and upload. @default false */\n\tdisabled?: boolean;\n\t/** Optional label text displayed above the upload area. */\n\tlabel?: string;\n\t/** Displays an asterisk on the label to signal a required field. @default false */\n\tshowAsterisk?: boolean;\n\t/** Label for the file-picker button after a file is selected. @default \"Alterar arquivo\" */\n\tchangeFileButtonText?: string;\n\t/** Label for the file-picker button before a file is selected. @default \"Selecionar arquivo\" */\n\tselectFileButtonText?: string;\n\t/** Text displayed in the drag-and-drop zone. @default \"Ou arraste e solte o arquivo aqui\" */\n\tdropFileText?: string;\n\t/** HTTP method for the upload request. @default \"POST\" */\n\tmethod?: string;\n\t/** Form-data field name used for the file. @default \"file\" */\n\tfileName?: string;\n\t/** Property name in the server response that contains the file URL. @default \"url\" */\n\tfileResponseName?: string;\n\t/** Accepted file MIME types or extensions (e.g. `\".pdf\"`, `\"image/*\"`). @default \"*\" */\n\tacceptFile?: string;\n\t/** Callback fired after a successful upload. Receives the URL returned by the server. */\n\tonChange?: (url?: string) => void;\n};\n\n/**\n * FileUpload drag-and-drop file uploader with server upload and file-name preview.\n *\n * Sends the file via `fetch` as `multipart/form-data` and stores the returned URL\n * in a hidden `<input>` for form submission.\n * Integrates with `useForm` to display validation errors by field name.\n *\n * @param props.name - Field name for form submission. Required.\n * @param props.action - Upload endpoint URL. Required.\n * @param props.disabled - Disables file selection and upload. Default: false\n * @param props.label - Label text displayed above the upload area.\n * @param props.showAsterisk - Appends `*` to the label. Default: false\n * @param props.acceptFile - Accepted MIME types or extensions. Default: \"*\"\n * @param props.method - HTTP method. Default: \"POST\"\n * @param props.fileName - Form-data field name for the file. Default: \"file\"\n * @param props.fileResponseName - Server response property containing the URL. Default: \"url\"\n * @param props.onChange - Callback fired after a successful upload receives the file URL.\n *\n * @returns FileUpload JSX element wrapped in `FieldWrapper`.\n *\n * @example\n * ```tsx\n * // Basic\n * <FileUpload name=\"document\" action=\"/api/upload\" />\n *\n * // PDF only with label and callback\n * <FileUpload\n * name=\"contract\"\n * action=\"/api/upload/docs\"\n * label=\"Contract (PDF)\"\n * showAsterisk\n * acceptFile=\".pdf\"\n * fileResponseName=\"documentUrl\"\n * onChange={(url) => setContractUrl(url)}\n * />\n * ```\n */\n\nfunction FileUpload(props: FileUploadProps) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tshowAsterisk = false,\n\t\taction,\n\t\tfileName = \"file\",\n\t\tmethod = \"POST\",\n\t\tacceptFile = \"*\",\n\t\tfileResponseName = \"url\",\n\t\tchangeFileButtonText = \"Alterar arquivo\",\n\t\tselectFileButtonText = \"Selecionar arquivo\",\n\t\tdropFileText = \"Ou arraste e solte o arquivo aqui\",\n\t\tonChange,\n\t\tdisabled = false,\n\t} = props;\n\n\tconst { fieldErrors } = useForm();\n\tconst fieldError = fieldErrors?.[name];\n\n\tconst [value, setValue] = useState(\"\");\n\tconst [error, setError] = useState(\"\");\n\tconst [file, setFile] = useState<File | null>(null);\n\tconst [isLoading, setIsLoading] = useState(false);\n\n\tasync function handleUploadFile(file: File) {\n\t\tif (disabled) return;\n\n\t\tsetIsLoading(true);\n\t\tsetFile(file);\n\t\tsetError(\"\");\n\n\t\tconst formData = new FormData();\n\t\tformData.append(fileName, file);\n\n\t\tawait fetch(action, { method: method, body: formData })\n\t\t\t.then(async (response) => await response.json())\n\t\t\t.then((response) => {\n\t\t\t\tif (response?.error) setError(response.error);\n\t\t\t\telse setValue(response?.[fileResponseName]);\n\t\t\t\tonChange?.(response?.[fileResponseName]);\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tconsole.error(error);\n\t\t\t\tsetError(\"Erro ao enviar o arquivo\");\n\t\t\t})\n\t\t\t.finally(() => setIsLoading(false));\n\t}\n\n\tfunction handleSelectFile(file: File) {\n\t\tif (disabled) return;\n\t\thandleUploadFile(file);\n\t}\n\n\tconst errorMessage = fieldError || error;\n\n\tconst hasErrorClassName = errorMessage ? \"hasError\" : \"noHasError\";\n\tconst hasFileClassName = file ? \"hasFile\" : \"noHasFile\";\n\tconst className = `arkynFileUpload ${hasErrorClassName} ${hasFileClassName}`;\n\n\treturn (\n\t\t<FieldWrapper>\n\t\t\t{label && <FieldLabel showAsterisk={showAsterisk}>{label}</FieldLabel>}\n\n\t\t\t<div className={className}>\n\t\t\t\t<input type=\"hidden\" name={name} value={value || \"\"} />\n\n\t\t\t\t{!file && (\n\t\t\t\t\t<NoFileContent\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\t\tacceptFile={acceptFile}\n\t\t\t\t\t\tdropFileText={dropFileText}\n\t\t\t\t\t\thandleSelectFile={handleSelectFile}\n\t\t\t\t\t\tselectFileButtonText={selectFileButtonText}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t{file && (\n\t\t\t\t\t<HasFileContent\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\t\tacceptFile={acceptFile}\n\t\t\t\t\t\tfile={file}\n\t\t\t\t\t\thandleSelectFile={handleSelectFile}\n\t\t\t\t\t\tchangeFileButtonText={changeFileButtonText}\n\t\t\t\t\t\treSendFile={\n\t\t\t\t\t\t\terrorMessage && file ? () => handleUploadFile(file) : undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{errorMessage && <FieldError>{errorMessage}</FieldError>}\n\t\t</FieldWrapper>\n\t);\n}\n\nexport { FileUpload };\n"],"mappings":";;;;;;;;;;AA8EA,SAAS,EAAW,GAAwB;CAC3C,IAAM,EACL,SACA,UACA,kBAAe,IACf,WACA,cAAW,QACX,YAAS,QACT,gBAAa,KACb,sBAAmB,OACnB,0BAAuB,mBACvB,0BAAuB,sBACvB,kBAAe,qCACf,aACA,cAAW,OACR,GAEE,EAAE,mBAAgB,EAAQ,GAC1B,IAAa,IAAc,IAE3B,CAAC,GAAO,KAAY,EAAS,EAAE,GAC/B,CAAC,GAAO,KAAY,EAAS,EAAE,GAC/B,CAAC,GAAM,KAAW,EAAsB,IAAI,GAC5C,CAAC,GAAW,KAAgB,EAAS,EAAK;CAEhD,eAAe,EAAiB,GAAY;EAC3C,IAAI,GAAU;EAId,AAFA,EAAa,EAAI,GACjB,EAAQ,CAAI,GACZ,EAAS,EAAE;EAEX,IAAM,IAAW,IAAI,SAAS;EAG9B,AAFA,EAAS,OAAO,GAAU,CAAI,GAE9B,MAAM,MAAM,GAAQ;GAAU;GAAQ,MAAM;EAAS,CAAC,CAAC,CACrD,KAAK,OAAO,MAAa,MAAM,EAAS,KAAK,CAAC,CAAC,CAC/C,MAAM,MAAa;GAGnB,AAFI,GAAU,QAAO,EAAS,EAAS,KAAK,IACvC,EAAS,IAAW,EAAiB,GAC1C,IAAW,IAAW,EAAiB;EACxC,CAAC,CAAC,CACD,OAAO,MAAU;GAEjB,AADA,QAAQ,MAAM,CAAK,GACnB,EAAS,0BAA0B;EACpC,CAAC,CAAC,CACD,cAAc,EAAa,EAAK,CAAC;CACpC;CAEA,SAAS,EAAiB,GAAY;EACjC,KACJ,EAAiB,CAAI;CACtB;CAEA,IAAM,IAAe,KAAc;CAMnC,OACC,kBAAC,GAAD,EAAA,UAAA;EACE,KAAS,kBAAC,GAAD;GAA0B;aAAe;EAAkB,CAAA;EAErE,kBAAC,OAAD;GAAgB,WAAA,mBARQ,IAAe,aAAa,aAEC,GAD9B,IAAO,YAAY;aAO1C;IACC,kBAAC,SAAD;KAAO,MAAK;KAAe;KAAM,OAAO,KAAS;IAAK,CAAA;IAErD,CAAC,KACD,kBAAC,GAAD;KACW;KACC;KACC;KACE;KACI;KACI;IACtB,CAAA;IAGD,KACA,kBAAC,GAAD;KACW;KACC;KACC;KACN;KACY;KACI;KACtB,YACC,KAAgB,UAAa,EAAiB,CAAI,IAAI,KAAA;IAEvD,CAAA;GAEE;;EAEJ,KAAgB,kBAAC,GAAD,EAAA,UAAa,EAAyB,CAAA;CAC1C,EAAA,CAAA;AAEhB"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/fileUpload/index.tsx"],"sourcesContent":["import { useState } from \"react\";\n\nimport { useForm } from \"../../hooks/useForm\";\nimport { FieldError } from \"../fieldError\";\nimport { FieldLabel } from \"../fieldLabel\";\nimport { FieldWrapper } from \"../fieldWrapper\";\n\nimport { HasFileContent } from \"./hasFileContent\";\nimport { NoFileContent } from \"./noFileContent\";\nimport \"./styles.css\";\n\ntype FileUploadProps = {\n\t/** Field name for form submission (stores the uploaded file URL). Required. */\n\tname: string;\n\t/** Server endpoint URL that receives the `multipart/form-data` upload request. Required. */\n\taction: string;\n\t/** Disables file selection and upload. @default false */\n\tdisabled?: boolean;\n\t/** Optional label text displayed above the upload area. */\n\tlabel?: string;\n\t/** Displays an asterisk on the label to signal a required field. @default false */\n\tshowAsterisk?: boolean;\n\t/** Label for the file-picker button after a file is selected. @default \"Alterar arquivo\" */\n\tchangeFileButtonText?: string;\n\t/** Label for the file-picker button before a file is selected. @default \"Selecionar arquivo\" */\n\tselectFileButtonText?: string;\n\t/** Text displayed in the drag-and-drop zone. @default \"Ou arraste e solte o arquivo aqui\" */\n\tdropFileText?: string;\n\t/** HTTP method for the upload request. @default \"POST\" */\n\tmethod?: string;\n\t/** Form-data field name used for the file. @default \"file\" */\n\tfileName?: string;\n\t/** Property name in the server response that contains the file URL. @default \"url\" */\n\tfileResponseName?: string;\n\t/** Accepted file MIME types or extensions (e.g. `\".pdf\"`, `\"image/*\"`). @default \"*\" */\n\tacceptFile?: string;\n\t/** Callback fired after a successful upload. Receives the URL returned by the server. */\n\tonChange?: (url?: string) => void;\n};\n\n/**\n * FileUpload, drag-and-drop file uploader with server upload and file-name preview.\n *\n * Sends the file via `fetch` as `multipart/form-data` and stores the returned URL\n * in a hidden `<input>` for form submission.\n * Integrates with `useForm` to display validation errors by field name.\n *\n * @param props.name - Field name for form submission. Required.\n * @param props.action - Upload endpoint URL. Required.\n * @param props.disabled - Disables file selection and upload. Default: false\n * @param props.label - Label text displayed above the upload area.\n * @param props.showAsterisk - Appends `*` to the label. Default: false\n * @param props.acceptFile - Accepted MIME types or extensions. Default: \"*\"\n * @param props.method - HTTP method. Default: \"POST\"\n * @param props.fileName - Form-data field name for the file. Default: \"file\"\n * @param props.fileResponseName - Server response property containing the URL. Default: \"url\"\n * @param props.onChange - Callback fired after a successful upload, receives the file URL.\n *\n * @returns FileUpload JSX element wrapped in `FieldWrapper`.\n *\n * @example\n * ```tsx\n * // Basic\n * <FileUpload name=\"document\" action=\"/api/upload\" />\n *\n * // PDF only with label and callback\n * <FileUpload\n * name=\"contract\"\n * action=\"/api/upload/docs\"\n * label=\"Contract (PDF)\"\n * showAsterisk\n * acceptFile=\".pdf\"\n * fileResponseName=\"documentUrl\"\n * onChange={(url) => setContractUrl(url)}\n * />\n * ```\n */\n\nfunction FileUpload(props: FileUploadProps) {\n\tconst {\n\t\tname,\n\t\tlabel,\n\t\tshowAsterisk = false,\n\t\taction,\n\t\tfileName = \"file\",\n\t\tmethod = \"POST\",\n\t\tacceptFile = \"*\",\n\t\tfileResponseName = \"url\",\n\t\tchangeFileButtonText = \"Alterar arquivo\",\n\t\tselectFileButtonText = \"Selecionar arquivo\",\n\t\tdropFileText = \"Ou arraste e solte o arquivo aqui\",\n\t\tonChange,\n\t\tdisabled = false,\n\t} = props;\n\n\tconst { fieldErrors } = useForm();\n\tconst fieldError = fieldErrors?.[name];\n\n\tconst [value, setValue] = useState(\"\");\n\tconst [error, setError] = useState(\"\");\n\tconst [file, setFile] = useState<File | null>(null);\n\tconst [isLoading, setIsLoading] = useState(false);\n\n\tasync function handleUploadFile(file: File) {\n\t\tif (disabled) return;\n\n\t\tsetIsLoading(true);\n\t\tsetFile(file);\n\t\tsetError(\"\");\n\n\t\tconst formData = new FormData();\n\t\tformData.append(fileName, file);\n\n\t\tawait fetch(action, { method: method, body: formData })\n\t\t\t.then(async (response) => await response.json())\n\t\t\t.then((response) => {\n\t\t\t\tif (response?.error) setError(response.error);\n\t\t\t\telse setValue(response?.[fileResponseName]);\n\t\t\t\tonChange?.(response?.[fileResponseName]);\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tconsole.error(error);\n\t\t\t\tsetError(\"Erro ao enviar o arquivo\");\n\t\t\t})\n\t\t\t.finally(() => setIsLoading(false));\n\t}\n\n\tfunction handleSelectFile(file: File) {\n\t\tif (disabled) return;\n\t\thandleUploadFile(file);\n\t}\n\n\tconst errorMessage = fieldError || error;\n\n\tconst hasErrorClassName = errorMessage ? \"hasError\" : \"noHasError\";\n\tconst hasFileClassName = file ? \"hasFile\" : \"noHasFile\";\n\tconst className = `arkynFileUpload ${hasErrorClassName} ${hasFileClassName}`;\n\n\treturn (\n\t\t<FieldWrapper>\n\t\t\t{label && <FieldLabel showAsterisk={showAsterisk}>{label}</FieldLabel>}\n\n\t\t\t<div className={className}>\n\t\t\t\t<input type=\"hidden\" name={name} value={value || \"\"} />\n\n\t\t\t\t{!file && (\n\t\t\t\t\t<NoFileContent\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\t\tacceptFile={acceptFile}\n\t\t\t\t\t\tdropFileText={dropFileText}\n\t\t\t\t\t\thandleSelectFile={handleSelectFile}\n\t\t\t\t\t\tselectFileButtonText={selectFileButtonText}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t{file && (\n\t\t\t\t\t<HasFileContent\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tisLoading={isLoading}\n\t\t\t\t\t\tacceptFile={acceptFile}\n\t\t\t\t\t\tfile={file}\n\t\t\t\t\t\thandleSelectFile={handleSelectFile}\n\t\t\t\t\t\tchangeFileButtonText={changeFileButtonText}\n\t\t\t\t\t\treSendFile={\n\t\t\t\t\t\t\terrorMessage && file ? () => handleUploadFile(file) : undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{errorMessage && <FieldError>{errorMessage}</FieldError>}\n\t\t</FieldWrapper>\n\t);\n}\n\nexport { FileUpload };\n"],"mappings":";;;;;;;;;;AA8EA,SAAS,EAAW,GAAwB;CAC3C,IAAM,EACL,SACA,UACA,kBAAe,IACf,WACA,cAAW,QACX,YAAS,QACT,gBAAa,KACb,sBAAmB,OACnB,0BAAuB,mBACvB,0BAAuB,sBACvB,kBAAe,qCACf,aACA,cAAW,OACR,GAEE,EAAE,mBAAgB,EAAQ,GAC1B,IAAa,IAAc,IAE3B,CAAC,GAAO,KAAY,EAAS,EAAE,GAC/B,CAAC,GAAO,KAAY,EAAS,EAAE,GAC/B,CAAC,GAAM,KAAW,EAAsB,IAAI,GAC5C,CAAC,GAAW,KAAgB,EAAS,EAAK;CAEhD,eAAe,EAAiB,GAAY;EAC3C,IAAI,GAAU;EAId,AAFA,EAAa,EAAI,GACjB,EAAQ,CAAI,GACZ,EAAS,EAAE;EAEX,IAAM,IAAW,IAAI,SAAS;EAG9B,AAFA,EAAS,OAAO,GAAU,CAAI,GAE9B,MAAM,MAAM,GAAQ;GAAU;GAAQ,MAAM;EAAS,CAAC,CAAC,CACrD,KAAK,OAAO,MAAa,MAAM,EAAS,KAAK,CAAC,CAAC,CAC/C,MAAM,MAAa;GAGnB,AAFI,GAAU,QAAO,EAAS,EAAS,KAAK,IACvC,EAAS,IAAW,EAAiB,GAC1C,IAAW,IAAW,EAAiB;EACxC,CAAC,CAAC,CACD,OAAO,MAAU;GAEjB,AADA,QAAQ,MAAM,CAAK,GACnB,EAAS,0BAA0B;EACpC,CAAC,CAAC,CACD,cAAc,EAAa,EAAK,CAAC;CACpC;CAEA,SAAS,EAAiB,GAAY;EACjC,KACJ,EAAiB,CAAI;CACtB;CAEA,IAAM,IAAe,KAAc;CAMnC,OACC,kBAAC,GAAD,EAAA,UAAA;EACE,KAAS,kBAAC,GAAD;GAA0B;aAAe;EAAkB,CAAA;EAErE,kBAAC,OAAD;GAAgB,WAAA,mBARQ,IAAe,aAAa,aAEC,GAD9B,IAAO,YAAY;aAO1C;IACC,kBAAC,SAAD;KAAO,MAAK;KAAe;KAAM,OAAO,KAAS;IAAK,CAAA;IAErD,CAAC,KACD,kBAAC,GAAD;KACW;KACC;KACC;KACE;KACI;KACI;IACtB,CAAA;IAGD,KACA,kBAAC,GAAD;KACW;KACC;KACC;KACN;KACY;KACI;KACtB,YACC,KAAgB,UAAa,EAAiB,CAAI,IAAI,KAAA;IAEvD,CAAA;GAEE;;EAEJ,KAAgB,kBAAC,GAAD,EAAA,UAAa,EAAyB,CAAA;CAC1C,EAAA,CAAA;AAEhB"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/googleAnalytics/index.tsx"],"sourcesContent":["import type { JSX } from \"react\";\nimport { ClientOnly } from \"../clientOnly\";\nimport { GoogleAnalyticsClient } from \"./googleAnalytics.client\";\n\ntype GoogleAnalyticsProps = {\n\t/** Google Analytics 4 Measurement ID (e.g. `\"G-XXXXXXXXXX\"`). Required. */\n\tmeasurementId: string;\n\t/** When true, renders the GA4 snippet in development mode (bypasses the production check). @default false */\n\tshowInDevMode?: boolean;\n};\n\n/**\n * GoogleAnalytics injects the Google Analytics 4 script into the page client-side.\n *\n * Renders nothing in development mode unless `showInDevMode` is `true`.\n * Wrapped in `ClientOnly` to avoid SSR errors.\n *\n * @param props.measurementId - GA4 Measurement ID (e.g. `\"G-XXXXXXXXXX\"`). Required.\n * @param props.showInDevMode - Renders in development mode. Default: false\n *\n * @returns GoogleAnalytics JSX element, or an empty fragment in dev mode.\n *\n * @example\n * ```tsx\n * // In your root layout\n * <GoogleAnalytics measurementId=\"G-XXXXXXXXXX\" />\n *\n * // Enable in development for testing\n * <GoogleAnalytics measurementId=\"G-XXXXXXXXXX\" showInDevMode />\n * ```\n */\n\nfunction GoogleAnalytics(props: GoogleAnalyticsProps): JSX.Element | null {\n\tconst { measurementId, showInDevMode = false } = props;\n\n\tif (process.env.NODE_ENV !== \"production\" && !showInDevMode) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<ClientOnly>\n\t\t\t{() => <GoogleAnalyticsClient measurementId={measurementId} />}\n\t\t</ClientOnly>\n\t);\n}\n\nexport { GoogleAnalytics };\n"],"mappings":";;;;AAgCA,SAAS,EAAgB,GAAiD;CACzE,IAAM,EAAE,kBAAe,mBAAgB,OAAU;CAMjD,OAJA,QAAA,IAAA,aAA6B,gBAAgB,CAAC,IACtC,OAIP,kBAAC,GAAD,EAAA,gBACQ,kBAAC,GAAD,EAAsC,iBAAgB,CAAA,EAClD,CAAA;AAEd"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/googleAnalytics/index.tsx"],"sourcesContent":["import type { JSX } from \"react\";\nimport { ClientOnly } from \"../clientOnly\";\nimport { GoogleAnalyticsClient } from \"./googleAnalytics.client\";\n\ntype GoogleAnalyticsProps = {\n\t/** Google Analytics 4 Measurement ID (e.g. `\"G-XXXXXXXXXX\"`). Required. */\n\tmeasurementId: string;\n\t/** When true, renders the GA4 snippet in development mode (bypasses the production check). @default false */\n\tshowInDevMode?: boolean;\n};\n\n/**\n * GoogleAnalytics, injects the Google Analytics 4 script into the page client-side.\n *\n * Renders nothing in development mode unless `showInDevMode` is `true`.\n * Wrapped in `ClientOnly` to avoid SSR errors.\n *\n * @param props.measurementId - GA4 Measurement ID (e.g. `\"G-XXXXXXXXXX\"`). Required.\n * @param props.showInDevMode - Renders in development mode. Default: false\n *\n * @returns GoogleAnalytics JSX element, or an empty fragment in dev mode.\n *\n * @example\n * ```tsx\n * // In your root layout\n * <GoogleAnalytics measurementId=\"G-XXXXXXXXXX\" />\n *\n * // Enable in development for testing\n * <GoogleAnalytics measurementId=\"G-XXXXXXXXXX\" showInDevMode />\n * ```\n */\n\nfunction GoogleAnalytics(props: GoogleAnalyticsProps): JSX.Element | null {\n\tconst { measurementId, showInDevMode = false } = props;\n\n\tif (process.env.NODE_ENV !== \"production\" && !showInDevMode) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<ClientOnly>\n\t\t\t{() => <GoogleAnalyticsClient measurementId={measurementId} />}\n\t\t</ClientOnly>\n\t);\n}\n\nexport { GoogleAnalytics };\n"],"mappings":";;;;AAgCA,SAAS,EAAgB,GAAiD;CACzE,IAAM,EAAE,kBAAe,mBAAgB,OAAU;CAMjD,OAJA,QAAA,IAAA,aAA6B,gBAAgB,CAAC,IACtC,OAIP,kBAAC,GAAD,EAAA,gBACQ,kBAAC,GAAD,EAAsC,iBAAgB,CAAA,EAClD,CAAA;AAEd"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/googleTagManager/index.tsx"],"sourcesContent":["import { ClientOnly } from \"../clientOnly\";\nimport { GoogleTagManagerClient } from \"./googleTagManager.client\";\n\ntype GoogleTagManagerProps = {\n\t/** Google Tag Manager container ID (e.g. `\"GTM-XXXXXXX\"`). Required. */\n\tgtmId: string;\n\t/** Additional key-value pairs pushed to the dataLayer on initialization. */\n\tevents?: Record<string, string>;\n\t/** Initial key-value pairs added to the dataLayer before GTM loads. */\n\tdataLayer?: Record<string, string>;\n\t/** Global variable name for the dataLayer array. @default \"dataLayer\" */\n\tdataLayerName?: string;\n\t/** GTM environment auth token (for staging/testing environments). */\n\tauth?: string;\n\t/** GTM environment preview token (e.g. `\"env-3\"`). */\n\tpreview?: string;\n\t/** When true, renders the GTM snippet in development mode (bypasses the production check). @default false */\n\tshowInDevMode?: boolean;\n};\n\n/**\n * GoogleTagManager injects the GTM `<script>` and `<noscript>` snippets into the page client-side.\n *\n * Renders nothing in development mode unless `showInDevMode` is `true`.\n * Wrapped in `ClientOnly` to avoid SSR errors.\n *\n * @param props.gtmId - GTM container ID (e.g. `\"GTM-XXXXXXX\"`). Required.\n * @param props.dataLayer - Initial key-value pairs for the dataLayer.\n * @param props.dataLayerName - Global dataLayer variable name. Default: \"dataLayer\"\n * @param props.events - Additional key-value pairs pushed on initialization.\n * @param props.auth - GTM environment auth token.\n * @param props.preview - GTM environment preview token (e.g. `\"env-3\"`).\n * @param props.showInDevMode - Renders in development mode. Default: false\n *\n * @returns GoogleTagManager JSX element, or an empty fragment in dev mode.\n *\n * @example\n * ```tsx\n * // Basic setup in your root layout\n * <GoogleTagManager gtmId=\"GTM-XXXXXXX\" />\n *\n * // With initial dataLayer values\n * <GoogleTagManager\n * gtmId=\"GTM-XXXXXXX\"\n * dataLayer={{ pageType: \"home\", userType: \"anonymous\" }}\n * />\n *\n * // Staging/preview environment\n * <GoogleTagManager\n * gtmId=\"GTM-XXXXXXX\"\n * auth=\"your-auth-token\"\n * preview=\"env-3\"\n * showInDevMode\n * />\n * ```\n */\n\nfunction GoogleTagManager(props: GoogleTagManagerProps) {\n\tconst {\n\t\tgtmId,\n\t\tauth = \"\",\n\t\tpreview = \"\",\n\t\tdataLayerName = \"dataLayer\",\n\t\tevents = {},\n\t\tdataLayer = {},\n\t\tshowInDevMode = false,\n\t} = props;\n\n\tif (process.env.NODE_ENV !== \"production\" && !showInDevMode) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<ClientOnly>\n\t\t\t{() => (\n\t\t\t\t<GoogleTagManagerClient\n\t\t\t\t\tauth={auth}\n\t\t\t\t\tdataLayer={dataLayer}\n\t\t\t\t\tdataLayerName={dataLayerName}\n\t\t\t\t\tevents={events}\n\t\t\t\t\tgtmId={gtmId}\n\t\t\t\t\tpreview={preview}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</ClientOnly>\n\t);\n}\n\nexport { GoogleTagManager };\n"],"mappings":";;;;AAyDA,SAAS,EAAiB,GAA8B;CACvD,IAAM,EACL,UACA,UAAO,IACP,aAAU,IACV,mBAAgB,aAChB,YAAS,CAAC,GACV,eAAY,CAAC,GACb,mBAAgB,OACb;CAMJ,OAJA,QAAA,IAAA,aAA6B,gBAAgB,CAAC,IACtC,OAIP,kBAAC,GAAD,EAAA,gBAEE,kBAAC,GAAD;EACO;EACK;EACI;EACP;EACD;EACE;CACT,CAAA,EAES,CAAA;AAEd"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/googleTagManager/index.tsx"],"sourcesContent":["import { ClientOnly } from \"../clientOnly\";\nimport { GoogleTagManagerClient } from \"./googleTagManager.client\";\n\ntype GoogleTagManagerProps = {\n\t/** Google Tag Manager container ID (e.g. `\"GTM-XXXXXXX\"`). Required. */\n\tgtmId: string;\n\t/** Additional key-value pairs pushed to the dataLayer on initialization. */\n\tevents?: Record<string, string>;\n\t/** Initial key-value pairs added to the dataLayer before GTM loads. */\n\tdataLayer?: Record<string, string>;\n\t/** Global variable name for the dataLayer array. @default \"dataLayer\" */\n\tdataLayerName?: string;\n\t/** GTM environment auth token (for staging/testing environments). */\n\tauth?: string;\n\t/** GTM environment preview token (e.g. `\"env-3\"`). */\n\tpreview?: string;\n\t/** When true, renders the GTM snippet in development mode (bypasses the production check). @default false */\n\tshowInDevMode?: boolean;\n};\n\n/**\n * GoogleTagManager, injects the GTM `<script>` and `<noscript>` snippets into the page client-side.\n *\n * Renders nothing in development mode unless `showInDevMode` is `true`.\n * Wrapped in `ClientOnly` to avoid SSR errors.\n *\n * @param props.gtmId - GTM container ID (e.g. `\"GTM-XXXXXXX\"`). Required.\n * @param props.dataLayer - Initial key-value pairs for the dataLayer.\n * @param props.dataLayerName - Global dataLayer variable name. Default: \"dataLayer\"\n * @param props.events - Additional key-value pairs pushed on initialization.\n * @param props.auth - GTM environment auth token.\n * @param props.preview - GTM environment preview token (e.g. `\"env-3\"`).\n * @param props.showInDevMode - Renders in development mode. Default: false\n *\n * @returns GoogleTagManager JSX element, or an empty fragment in dev mode.\n *\n * @example\n * ```tsx\n * // Basic setup in your root layout\n * <GoogleTagManager gtmId=\"GTM-XXXXXXX\" />\n *\n * // With initial dataLayer values\n * <GoogleTagManager\n * gtmId=\"GTM-XXXXXXX\"\n * dataLayer={{ pageType: \"home\", userType: \"anonymous\" }}\n * />\n *\n * // Staging/preview environment\n * <GoogleTagManager\n * gtmId=\"GTM-XXXXXXX\"\n * auth=\"your-auth-token\"\n * preview=\"env-3\"\n * showInDevMode\n * />\n * ```\n */\n\nfunction GoogleTagManager(props: GoogleTagManagerProps) {\n\tconst {\n\t\tgtmId,\n\t\tauth = \"\",\n\t\tpreview = \"\",\n\t\tdataLayerName = \"dataLayer\",\n\t\tevents = {},\n\t\tdataLayer = {},\n\t\tshowInDevMode = false,\n\t} = props;\n\n\tif (process.env.NODE_ENV !== \"production\" && !showInDevMode) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<ClientOnly>\n\t\t\t{() => (\n\t\t\t\t<GoogleTagManagerClient\n\t\t\t\t\tauth={auth}\n\t\t\t\t\tdataLayer={dataLayer}\n\t\t\t\t\tdataLayerName={dataLayerName}\n\t\t\t\t\tevents={events}\n\t\t\t\t\tgtmId={gtmId}\n\t\t\t\t\tpreview={preview}\n\t\t\t\t/>\n\t\t\t)}\n\t\t</ClientOnly>\n\t);\n}\n\nexport { GoogleTagManager };\n"],"mappings":";;;;AAyDA,SAAS,EAAiB,GAA8B;CACvD,IAAM,EACL,UACA,UAAO,IACP,aAAU,IACV,mBAAgB,aAChB,YAAS,CAAC,GACV,eAAY,CAAC,GACb,mBAAgB,OACb;CAMJ,OAJA,QAAA,IAAA,aAA6B,gBAAgB,CAAC,IACtC,OAIP,kBAAC,GAAD,EAAA,gBAEE,kBAAC,GAAD;EACO;EACK;EACI;EACP;EACD;EACE;CACT,CAAA,EAES,CAAA;AAEd"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/iconButton/index.tsx"],"sourcesContent":["import { Loader2, type LucideIcon } from \"lucide-react\";\nimport type { ButtonHTMLAttributes } from \"react\";\n\nimport \"./styles.css\";\n\ntype IconButtonProps = Omit<\n\tButtonHTMLAttributes<HTMLButtonElement>,\n\t\"children\" | \"aria-label\"\n> & {\n\t/** Lucide icon component rendered inside the button. Required. */\n\ticon: LucideIcon;\n\t/** Accessible label for screen readers. Required. */\n\t\"aria-label\": string;\n\t/** Shows a spinner and disables the button during async operations. @default false */\n\tisLoading?: boolean;\n\t/**\n\t * Button size.\n\t * @default \"md\"\n\t */\n\tsize?: \"xs\" | \"sm\" | \"md\" | \"lg\";\n\t/**\n\t * Visual style variant.\n\t * - `solid`: filled background.\n\t * - `outline`: bordered, transparent background.\n\t * - `ghost`: no border, subtle hover.\n\t * - `invisible`: no visual styling.\n\t * @default \"solid\"\n\t */\n\tvariant?: \"solid\" | \"outline\" | \"ghost\" | \"invisible\";\n\t/**\n\t * Color scheme applied to the button.\n\t * @default \"primary\"\n\t */\n\tscheme?: \"primary\" | \"secondary\" | \"success\" | \"warning\" | \"danger\" | \"info\";\n};\n\n/**\n * IconButton compact button that renders a single icon without a text label.\n *\n * Always requires `aria-label` for accessibility.\n *\n * @param props.icon - Lucide icon component to render. Required.\n * @param props[\"aria-label\"] - Accessible label for screen readers. Required.\n * @param props.isLoading - Shows a spinner and disables the button. Default: false\n * @param props.size - Button size (`xs` | `sm` | `md` | `lg`). Default: \"md\"\n * @param props.variant - Visual style variant. Default: \"solid\"\n * @param props.scheme - Color scheme. Default: \"primary\"\n *\n * **...Other valid HTML properties for `<button>` (children not supported)**\n *\n * @returns IconButton JSX element.\n *\n * @example\n * ```tsx\n * <IconButton icon={Plus} aria-label=\"Add item\" />\n *\n * <IconButton icon={Trash2} aria-label=\"Delete\" scheme=\"danger\" variant=\"outline\" />\n *\n * <IconButton icon={Save} aria-label=\"Saving\" isLoading />\n *\n * <IconButton icon={MoreVertical} aria-label=\"More options\" size=\"sm\" />\n * ```\n */\n\nfunction IconButton(props: IconButtonProps) {\n\tconst {\n\t\tisLoading = false,\n\t\tscheme = \"primary\",\n\t\tvariant = \"solid\",\n\t\tsize = \"md\",\n\t\ticon: Icon,\n\t\tdisabled,\n\t\tclassName: baseClassName = \"\",\n\t\t...rest\n\t} = props;\n\n\tconst iconSize = { xs: 12, sm: 16, md: 20, lg: 24 };\n\tconst loading = isLoading ? \"loadingTrue\" : \"loadingFalse\";\n\tconst className = `arkynIconButton ${variant} ${scheme} ${size} ${loading} ${baseClassName}`;\n\n\treturn (\n\t\t<button\n\t\t\tdisabled={disabled || isLoading}\n\t\t\tclassName={className.trim()}\n\t\t\t{...rest}\n\t\t>\n\t\t\t<div className=\"arkynIconButtonSpinner\">\n\t\t\t\t<Loader2 size={iconSize[size]} strokeWidth={2.5} />\n\t\t\t</div>\n\n\t\t\t<div className=\"arkynIconButtonContent\">\n\t\t\t\t<Icon size={iconSize[size]} strokeWidth={2.5} />\n\t\t\t</div>\n\t\t</button>\n\t);\n}\n\nexport { IconButton };\n"],"mappings":";;;;AAgEA,SAAS,EAAW,GAAwB;CAC3C,IAAM,EACL,eAAY,IACZ,YAAS,WACT,aAAU,SACV,UAAO,MACP,MAAM,GACN,aACA,WAAW,IAAgB,IAC3B,GAAG,MACA,GAEE,IAAW;EAAE,IAAI;EAAI,IAAI;EAAI,IAAI;EAAI,IAAI;CAAG,GAE5C,IAAY,mBAAmB,EAAQ,GAAG,EAAO,GAAG,EAAK,GAD/C,IAAY,gBAAgB,eAC8B,GAAG;CAE7E,OACC,kBAAC,UAAD;EACC,UAAU,KAAY;EACtB,WAAW,EAAU,KAAK;EAC1B,GAAI;YAHL,CAKC,kBAAC,OAAD;GAAK,WAAU;aACd,kBAAC,GAAD;IAAS,MAAM,EAAS;IAAO,aAAa;GAAM,CAAA;EAC9C,CAAA,GAEL,kBAAC,OAAD;GAAK,WAAU;aACd,kBAAC,GAAD;IAAM,MAAM,EAAS;IAAO,aAAa;GAAM,CAAA;EAC3C,CAAA,CACE;;AAEV"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/iconButton/index.tsx"],"sourcesContent":["import { Loader2, type LucideIcon } from \"lucide-react\";\nimport type { ButtonHTMLAttributes } from \"react\";\n\nimport \"./styles.css\";\n\ntype IconButtonProps = Omit<\n\tButtonHTMLAttributes<HTMLButtonElement>,\n\t\"children\" | \"aria-label\"\n> & {\n\t/** Lucide icon component rendered inside the button. Required. */\n\ticon: LucideIcon;\n\t/** Accessible label for screen readers. Required. */\n\t\"aria-label\": string;\n\t/** Shows a spinner and disables the button during async operations. @default false */\n\tisLoading?: boolean;\n\t/**\n\t * Button size.\n\t * @default \"md\"\n\t */\n\tsize?: \"xs\" | \"sm\" | \"md\" | \"lg\";\n\t/**\n\t * Visual style variant.\n\t * - `solid`: filled background.\n\t * - `outline`: bordered, transparent background.\n\t * - `ghost`: no border, subtle hover.\n\t * - `invisible`: no visual styling.\n\t * @default \"solid\"\n\t */\n\tvariant?: \"solid\" | \"outline\" | \"ghost\" | \"invisible\";\n\t/**\n\t * Color scheme applied to the button.\n\t * @default \"primary\"\n\t */\n\tscheme?: \"primary\" | \"secondary\" | \"success\" | \"warning\" | \"danger\" | \"info\";\n};\n\n/**\n * IconButton, compact button that renders a single icon without a text label.\n *\n * Always requires `aria-label` for accessibility.\n *\n * @param props.icon - Lucide icon component to render. Required.\n * @param props[\"aria-label\"] - Accessible label for screen readers. Required.\n * @param props.isLoading - Shows a spinner and disables the button. Default: false\n * @param props.size - Button size (`xs` | `sm` | `md` | `lg`). Default: \"md\"\n * @param props.variant - Visual style variant. Default: \"solid\"\n * @param props.scheme - Color scheme. Default: \"primary\"\n *\n * **...Other valid HTML properties for `<button>` (children not supported)**\n *\n * @returns IconButton JSX element.\n *\n * @example\n * ```tsx\n * <IconButton icon={Plus} aria-label=\"Add item\" />\n *\n * <IconButton icon={Trash2} aria-label=\"Delete\" scheme=\"danger\" variant=\"outline\" />\n *\n * <IconButton icon={Save} aria-label=\"Saving\" isLoading />\n *\n * <IconButton icon={MoreVertical} aria-label=\"More options\" size=\"sm\" />\n * ```\n */\n\nfunction IconButton(props: IconButtonProps) {\n\tconst {\n\t\tisLoading = false,\n\t\tscheme = \"primary\",\n\t\tvariant = \"solid\",\n\t\tsize = \"md\",\n\t\ticon: Icon,\n\t\tdisabled,\n\t\tclassName: baseClassName = \"\",\n\t\t...rest\n\t} = props;\n\n\tconst iconSize = { xs: 12, sm: 16, md: 20, lg: 24 };\n\tconst loading = isLoading ? \"loadingTrue\" : \"loadingFalse\";\n\tconst className = `arkynIconButton ${variant} ${scheme} ${size} ${loading} ${baseClassName}`;\n\n\treturn (\n\t\t<button\n\t\t\tdisabled={disabled || isLoading}\n\t\t\tclassName={className.trim()}\n\t\t\t{...rest}\n\t\t>\n\t\t\t<div className=\"arkynIconButtonSpinner\">\n\t\t\t\t<Loader2 size={iconSize[size]} strokeWidth={2.5} />\n\t\t\t</div>\n\n\t\t\t<div className=\"arkynIconButtonContent\">\n\t\t\t\t<Icon size={iconSize[size]} strokeWidth={2.5} />\n\t\t\t</div>\n\t\t</button>\n\t);\n}\n\nexport { IconButton };\n"],"mappings":";;;;AAgEA,SAAS,EAAW,GAAwB;CAC3C,IAAM,EACL,eAAY,IACZ,YAAS,WACT,aAAU,SACV,UAAO,MACP,MAAM,GACN,aACA,WAAW,IAAgB,IAC3B,GAAG,MACA,GAEE,IAAW;EAAE,IAAI;EAAI,IAAI;EAAI,IAAI;EAAI,IAAI;CAAG,GAE5C,IAAY,mBAAmB,EAAQ,GAAG,EAAO,GAAG,EAAK,GAD/C,IAAY,gBAAgB,eAC8B,GAAG;CAE7E,OACC,kBAAC,UAAD;EACC,UAAU,KAAY;EACtB,WAAW,EAAU,KAAK;EAC1B,GAAI;YAHL,CAKC,kBAAC,OAAD;GAAK,WAAU;aACd,kBAAC,GAAD;IAAS,MAAM,EAAS;IAAO,aAAa;GAAM,CAAA;EAC9C,CAAA,GAEL,kBAAC,OAAD;GAAK,WAAU;aACd,kBAAC,GAAD;IAAM,MAAM,EAAS;IAAO,aAAa;GAAM,CAAA;EAC3C,CAAA,CACE;;AAEV"}