@nice2dev/ui-3d 1.1.0 → 1.1.1

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 (206) hide show
  1. package/dist/cjs/collaborative/collaborativeScene.js +16 -8
  2. package/dist/cjs/collaborative/collaborativeScene.js.map +1 -1
  3. package/dist/cjs/core/i18n.js +3 -3
  4. package/dist/cjs/dance/DanceBridge.js +65 -30
  5. package/dist/cjs/dance/DanceBridge.js.map +1 -1
  6. package/dist/cjs/dance/DanceScoreEngine.js +37 -23
  7. package/dist/cjs/dance/DanceScoreEngine.js.map +1 -1
  8. package/dist/cjs/dance/PoseDetector.js +92 -49
  9. package/dist/cjs/dance/PoseDetector.js.map +1 -1
  10. package/dist/cjs/material/NiceMaterialEditor.js +134 -91
  11. package/dist/cjs/material/NiceMaterialEditor.js.map +1 -1
  12. package/dist/cjs/material/materialEditorUtils.js +86 -55
  13. package/dist/cjs/material/materialEditorUtils.js.map +1 -1
  14. package/dist/cjs/model/ModelEditor.js +16 -14
  15. package/dist/cjs/model/ModelEditor.js.map +1 -1
  16. package/dist/cjs/model/ModelEditorLeftPanel.js +21 -15
  17. package/dist/cjs/model/ModelEditorLeftPanel.js.map +1 -1
  18. package/dist/cjs/model/ModelEditorMenuBar.js +23 -10
  19. package/dist/cjs/model/ModelEditorMenuBar.js.map +1 -1
  20. package/dist/cjs/model/ModelEditorRightPanel.js +32 -27
  21. package/dist/cjs/model/ModelEditorRightPanel.js.map +1 -1
  22. package/dist/cjs/model/ModelEditorSubComponents.js +20 -20
  23. package/dist/cjs/model/ModelEditorSubComponents.js.map +1 -1
  24. package/dist/cjs/model/ModelEditorTimeline.js +12 -11
  25. package/dist/cjs/model/ModelEditorTimeline.js.map +1 -1
  26. package/dist/cjs/model/ModelEditorToolbar.js +5 -5
  27. package/dist/cjs/model/ModelEditorToolbar.js.map +1 -1
  28. package/dist/cjs/model/ModelEditorViewport.js +12 -8
  29. package/dist/cjs/model/ModelEditorViewport.js.map +1 -1
  30. package/dist/cjs/model/ModelViewer.js +16 -15
  31. package/dist/cjs/model/ModelViewer.js.map +1 -1
  32. package/dist/cjs/model/NiceArmatureEditor.js +53 -30
  33. package/dist/cjs/model/NiceArmatureEditor.js.map +1 -1
  34. package/dist/cjs/model/NiceMorphTargetEditor.js +51 -30
  35. package/dist/cjs/model/NiceMorphTargetEditor.js.map +1 -1
  36. package/dist/cjs/model/NiceOctree.js +62 -37
  37. package/dist/cjs/model/NiceOctree.js.map +1 -1
  38. package/dist/cjs/model/NicePhysicsSimulation.js +74 -36
  39. package/dist/cjs/model/NicePhysicsSimulation.js.map +1 -1
  40. package/dist/cjs/model/NiceProceduralGeometry.js +101 -31
  41. package/dist/cjs/model/NiceProceduralGeometry.js.map +1 -1
  42. package/dist/cjs/model/NiceTerrainEditor.js +88 -38
  43. package/dist/cjs/model/NiceTerrainEditor.js.map +1 -1
  44. package/dist/cjs/model/NiceWeightPainter.js +46 -24
  45. package/dist/cjs/model/NiceWeightPainter.js.map +1 -1
  46. package/dist/cjs/model/NiceXRPreview.js +89 -43
  47. package/dist/cjs/model/NiceXRPreview.js.map +1 -1
  48. package/dist/cjs/model/cadModeUtils.js +2 -2
  49. package/dist/cjs/model/cadModeUtils.js.map +1 -1
  50. package/dist/cjs/model/editorShortcuts.js +69 -35
  51. package/dist/cjs/model/editorShortcuts.js.map +1 -1
  52. package/dist/cjs/model/modelEditorTypes.js +56 -52
  53. package/dist/cjs/model/modelEditorTypes.js.map +1 -1
  54. package/dist/cjs/model/modelEditorUtils.js +356 -131
  55. package/dist/cjs/model/modelEditorUtils.js.map +1 -1
  56. package/dist/cjs/model/simsModeUtils.js +819 -74
  57. package/dist/cjs/model/simsModeUtils.js.map +1 -1
  58. package/dist/cjs/model/useModelEditor.js +501 -394
  59. package/dist/cjs/model/useModelEditor.js.map +1 -1
  60. package/dist/cjs/model/useModelViewer.js +117 -86
  61. package/dist/cjs/model/useModelViewer.js.map +1 -1
  62. package/dist/cjs/particle/NiceParticleEditor.js +126 -69
  63. package/dist/cjs/particle/NiceParticleEditor.js.map +1 -1
  64. package/dist/cjs/particle/particleEditorUtils.js +64 -27
  65. package/dist/cjs/particle/particleEditorUtils.js.map +1 -1
  66. package/dist/cjs/rendering/NiceCascadedShadows.js +35 -23
  67. package/dist/cjs/rendering/NiceCascadedShadows.js.map +1 -1
  68. package/dist/cjs/rendering/NiceRenderExport.js +26 -12
  69. package/dist/cjs/rendering/NiceRenderExport.js.map +1 -1
  70. package/dist/cjs/rendering/NiceSSAO.js +28 -23
  71. package/dist/cjs/rendering/NiceSSAO.js.map +1 -1
  72. package/dist/cjs/rendering/NiceSSR.js +22 -18
  73. package/dist/cjs/rendering/NiceSSR.js.map +1 -1
  74. package/dist/cjs/rendering/NiceWebGPURenderer.js +60 -37
  75. package/dist/cjs/rendering/NiceWebGPURenderer.js.map +1 -1
  76. package/dist/cjs/ui/dist/NiceErrorBoundary-D75yr_WE.js +572 -0
  77. package/dist/cjs/ui/dist/NiceErrorBoundary-D75yr_WE.js.map +1 -0
  78. package/dist/cjs/ui/dist/NiceForm-CKoJA6NG.js +4979 -0
  79. package/dist/cjs/ui/dist/NiceForm-CKoJA6NG.js.map +1 -0
  80. package/dist/cjs/ui/dist/NiceModal-1QX7NhyH.js +98 -0
  81. package/dist/cjs/ui/dist/NiceModal-1QX7NhyH.js.map +1 -0
  82. package/dist/cjs/ui/dist/NiceModuleLifecyclePanel-CMrPbSw9.js +5244 -0
  83. package/dist/cjs/ui/dist/NiceModuleLifecyclePanel-CMrPbSw9.js.map +1 -0
  84. package/dist/cjs/ui/dist/NicePagination-DbE-uOkl.js +174 -0
  85. package/dist/cjs/ui/dist/NicePagination-DbE-uOkl.js.map +1 -0
  86. package/dist/cjs/ui/dist/NicePinCodeInput-B8cI8zu8.js +10459 -0
  87. package/dist/cjs/ui/dist/NicePinCodeInput-B8cI8zu8.js.map +1 -0
  88. package/dist/cjs/ui/dist/NiceSavedQueryPanel-CZ5bYOe_.js +6313 -0
  89. package/dist/cjs/ui/dist/NiceSavedQueryPanel-CZ5bYOe_.js.map +1 -0
  90. package/dist/cjs/ui/dist/NiceTabs-DzLHzwuA.js +1639 -0
  91. package/dist/cjs/ui/dist/NiceTabs-DzLHzwuA.js.map +1 -0
  92. package/dist/cjs/ui/dist/NiceWindow-DeC83yfE.js +807 -0
  93. package/dist/cjs/ui/dist/NiceWindow-DeC83yfE.js.map +1 -0
  94. package/dist/cjs/ui/dist/charts-BAS21jkC.js +3833 -0
  95. package/dist/cjs/ui/dist/charts-BAS21jkC.js.map +1 -0
  96. package/dist/cjs/ui/dist/core-Da43q-pO.js +11683 -0
  97. package/dist/cjs/ui/dist/core-Da43q-pO.js.map +1 -0
  98. package/dist/cjs/ui/dist/index-pAuGTbuB.js +28876 -0
  99. package/dist/cjs/ui/dist/index-pAuGTbuB.js.map +1 -0
  100. package/dist/cjs/uv/NiceUVEditor.js +115 -86
  101. package/dist/cjs/uv/NiceUVEditor.js.map +1 -1
  102. package/dist/cjs/uv/uvEditorUtils.js +41 -23
  103. package/dist/cjs/uv/uvEditorUtils.js.map +1 -1
  104. package/dist/esm/collaborative/collaborativeScene.js +16 -8
  105. package/dist/esm/collaborative/collaborativeScene.js.map +1 -1
  106. package/dist/esm/dance/DanceBridge.js +55 -20
  107. package/dist/esm/dance/DanceBridge.js.map +1 -1
  108. package/dist/esm/dance/DanceScoreEngine.js +29 -15
  109. package/dist/esm/dance/DanceScoreEngine.js.map +1 -1
  110. package/dist/esm/dance/PoseDetector.js +73 -30
  111. package/dist/esm/dance/PoseDetector.js.map +1 -1
  112. package/dist/esm/material/NiceMaterialEditor.js +115 -72
  113. package/dist/esm/material/NiceMaterialEditor.js.map +1 -1
  114. package/dist/esm/material/materialEditorUtils.js +86 -55
  115. package/dist/esm/material/materialEditorUtils.js.map +1 -1
  116. package/dist/esm/model/ModelEditor.js +16 -14
  117. package/dist/esm/model/ModelEditor.js.map +1 -1
  118. package/dist/esm/model/ModelEditorLeftPanel.js +21 -15
  119. package/dist/esm/model/ModelEditorLeftPanel.js.map +1 -1
  120. package/dist/esm/model/ModelEditorMenuBar.js +23 -10
  121. package/dist/esm/model/ModelEditorMenuBar.js.map +1 -1
  122. package/dist/esm/model/ModelEditorRightPanel.js +32 -27
  123. package/dist/esm/model/ModelEditorRightPanel.js.map +1 -1
  124. package/dist/esm/model/ModelEditorSubComponents.js +17 -17
  125. package/dist/esm/model/ModelEditorSubComponents.js.map +1 -1
  126. package/dist/esm/model/ModelEditorTimeline.js +12 -11
  127. package/dist/esm/model/ModelEditorTimeline.js.map +1 -1
  128. package/dist/esm/model/ModelEditorToolbar.js +5 -5
  129. package/dist/esm/model/ModelEditorToolbar.js.map +1 -1
  130. package/dist/esm/model/ModelEditorViewport.js +12 -8
  131. package/dist/esm/model/ModelEditorViewport.js.map +1 -1
  132. package/dist/esm/model/ModelViewer.js +8 -7
  133. package/dist/esm/model/ModelViewer.js.map +1 -1
  134. package/dist/esm/model/NiceArmatureEditor.js +36 -13
  135. package/dist/esm/model/NiceArmatureEditor.js.map +1 -1
  136. package/dist/esm/model/NiceMorphTargetEditor.js +34 -13
  137. package/dist/esm/model/NiceMorphTargetEditor.js.map +1 -1
  138. package/dist/esm/model/NiceOctree.js +47 -22
  139. package/dist/esm/model/NiceOctree.js.map +1 -1
  140. package/dist/esm/model/NicePhysicsSimulation.js +51 -13
  141. package/dist/esm/model/NicePhysicsSimulation.js.map +1 -1
  142. package/dist/esm/model/NiceProceduralGeometry.js +94 -24
  143. package/dist/esm/model/NiceProceduralGeometry.js.map +1 -1
  144. package/dist/esm/model/NiceTerrainEditor.js +70 -20
  145. package/dist/esm/model/NiceTerrainEditor.js.map +1 -1
  146. package/dist/esm/model/NiceWeightPainter.js +33 -11
  147. package/dist/esm/model/NiceWeightPainter.js.map +1 -1
  148. package/dist/esm/model/NiceXRPreview.js +72 -26
  149. package/dist/esm/model/NiceXRPreview.js.map +1 -1
  150. package/dist/esm/model/cadModeUtils.js +2 -2
  151. package/dist/esm/model/cadModeUtils.js.map +1 -1
  152. package/dist/esm/model/editorShortcuts.js +69 -35
  153. package/dist/esm/model/editorShortcuts.js.map +1 -1
  154. package/dist/esm/model/modelEditorTypes.js +56 -52
  155. package/dist/esm/model/modelEditorTypes.js.map +1 -1
  156. package/dist/esm/model/modelEditorUtils.js +356 -131
  157. package/dist/esm/model/modelEditorUtils.js.map +1 -1
  158. package/dist/esm/model/simsModeUtils.js +819 -74
  159. package/dist/esm/model/simsModeUtils.js.map +1 -1
  160. package/dist/esm/model/useModelEditor.js +384 -277
  161. package/dist/esm/model/useModelEditor.js.map +1 -1
  162. package/dist/esm/model/useModelViewer.js +56 -25
  163. package/dist/esm/model/useModelViewer.js.map +1 -1
  164. package/dist/esm/particle/NiceParticleEditor.js +116 -59
  165. package/dist/esm/particle/NiceParticleEditor.js.map +1 -1
  166. package/dist/esm/particle/particleEditorUtils.js +64 -27
  167. package/dist/esm/particle/particleEditorUtils.js.map +1 -1
  168. package/dist/esm/rendering/NiceCascadedShadows.js +24 -12
  169. package/dist/esm/rendering/NiceCascadedShadows.js.map +1 -1
  170. package/dist/esm/rendering/NiceRenderExport.js +22 -8
  171. package/dist/esm/rendering/NiceRenderExport.js.map +1 -1
  172. package/dist/esm/rendering/NiceSSAO.js +11 -6
  173. package/dist/esm/rendering/NiceSSAO.js.map +1 -1
  174. package/dist/esm/rendering/NiceSSR.js +9 -5
  175. package/dist/esm/rendering/NiceSSR.js.map +1 -1
  176. package/dist/esm/rendering/NiceWebGPURenderer.js +40 -17
  177. package/dist/esm/rendering/NiceWebGPURenderer.js.map +1 -1
  178. package/dist/esm/ui/dist/NiceErrorBoundary-D75yr_WE.js +563 -0
  179. package/dist/esm/ui/dist/NiceErrorBoundary-D75yr_WE.js.map +1 -0
  180. package/dist/esm/ui/dist/NiceForm-CKoJA6NG.js +4960 -0
  181. package/dist/esm/ui/dist/NiceForm-CKoJA6NG.js.map +1 -0
  182. package/dist/esm/ui/dist/NiceModal-1QX7NhyH.js +96 -0
  183. package/dist/esm/ui/dist/NiceModal-1QX7NhyH.js.map +1 -0
  184. package/dist/esm/ui/dist/NiceModuleLifecyclePanel-CMrPbSw9.js +5201 -0
  185. package/dist/esm/ui/dist/NiceModuleLifecyclePanel-CMrPbSw9.js.map +1 -0
  186. package/dist/esm/ui/dist/NicePagination-DbE-uOkl.js +172 -0
  187. package/dist/esm/ui/dist/NicePagination-DbE-uOkl.js.map +1 -0
  188. package/dist/esm/ui/dist/NicePinCodeInput-B8cI8zu8.js +10408 -0
  189. package/dist/esm/ui/dist/NicePinCodeInput-B8cI8zu8.js.map +1 -0
  190. package/dist/esm/ui/dist/NiceSavedQueryPanel-CZ5bYOe_.js +6296 -0
  191. package/dist/esm/ui/dist/NiceSavedQueryPanel-CZ5bYOe_.js.map +1 -0
  192. package/dist/esm/ui/dist/NiceTabs-DzLHzwuA.js +1630 -0
  193. package/dist/esm/ui/dist/NiceTabs-DzLHzwuA.js.map +1 -0
  194. package/dist/esm/ui/dist/NiceWindow-DeC83yfE.js +796 -0
  195. package/dist/esm/ui/dist/NiceWindow-DeC83yfE.js.map +1 -0
  196. package/dist/esm/ui/dist/charts-BAS21jkC.js +3809 -0
  197. package/dist/esm/ui/dist/charts-BAS21jkC.js.map +1 -0
  198. package/dist/esm/ui/dist/core-Da43q-pO.js +11502 -0
  199. package/dist/esm/ui/dist/core-Da43q-pO.js.map +1 -0
  200. package/dist/esm/ui/dist/index-pAuGTbuB.js +28792 -0
  201. package/dist/esm/ui/dist/index-pAuGTbuB.js.map +1 -0
  202. package/dist/esm/uv/NiceUVEditor.js +91 -62
  203. package/dist/esm/uv/NiceUVEditor.js.map +1 -1
  204. package/dist/esm/uv/uvEditorUtils.js +41 -23
  205. package/dist/esm/uv/uvEditorUtils.js.map +1 -1
  206. package/package.json +2 -2
@@ -0,0 +1,1630 @@
1
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
+ import _e, { forwardRef, useCallback, useMemo, useState, useRef, useLayoutEffect, useEffect } from 'react';
3
+ import { h as rl, c as xs, d as ks, W as me, b as Is, i as Ms, j as vl, k as zr, D as As, l as _d, f as Bs, C as yl } from './core-Da43q-pO.js';
4
+ import ze from 'react-dom';
5
+
6
+ const Je = forwardRef(
7
+ ({
8
+ label: l,
9
+ helperText: h,
10
+ error: t,
11
+ required: d,
12
+ disabled: i,
13
+ readOnly: n,
14
+ size: a = "md",
15
+ name: y,
16
+ id: u,
17
+ className: o,
18
+ style: f,
19
+ accessMode: D,
20
+ displayStyle: z,
21
+ variant: m,
22
+ value: w,
23
+ defaultValue: R,
24
+ onChange: p,
25
+ onBlur: J,
26
+ onKeyDown: E,
27
+ placeholder: $,
28
+ type: L = "text",
29
+ maxLength: b,
30
+ prefix: F,
31
+ suffix: T,
32
+ clearable: x,
33
+ autoFocus: M,
34
+ submitOnEnter: U,
35
+ onSubmit: V,
36
+ showKeyboardHints: I,
37
+ labelPlacement: j,
38
+ errorPlacement: ae,
39
+ loading: ue,
40
+ labelWidth: ne,
41
+ controlWidth: X,
42
+ displayMode: P,
43
+ ...k
44
+ }, _) => {
45
+ const q = rl(D, u);
46
+ if (q === "hidden")
47
+ return null;
48
+ q === "disabled" && (i = true), q === "readOnly" && (n = true);
49
+ const { t: S } = me(), A = Is(u), G = xs("input", z), se = ks("input", z), ve = m === "filled" ? "filled" : m === "underlined" ? "underlined" : "", O = useCallback(() => p?.(""), [p]), Y = Ms({ enabled: P, readOnly: n, disabled: i }), re = vl({
50
+ enabled: U,
51
+ onSubmit: V
52
+ }), ie = useCallback(
53
+ (g) => {
54
+ re(g), E?.(g);
55
+ },
56
+ [re, E]
57
+ ), r = useMemo(() => {
58
+ const g = [];
59
+ return U && g.push({ key: "Enter", description: S("shortcuts.submit", "Submit") }), x && g.push({ key: "Escape", description: S("shortcuts.clear", "Clear") }), g;
60
+ }, [U, x, S]);
61
+ return /* @__PURE__ */ jsxs(
62
+ "div",
63
+ {
64
+ className: `nice-field nice-field--${a} ${j === "left" ? "nice-field--label-left" : ""} ${j === "inside" ? "nice-field--label-inside" : ""} ${ue ? "nice-field--loading" : ""} ${o || ""}`,
65
+ style: {
66
+ ...f,
67
+ ...ne != null && {
68
+ "--nice-field-label-width": typeof ne == "number" ? `${ne}px` : ne
69
+ },
70
+ ...X != null && {
71
+ "--nice-field-control-width": typeof X == "number" ? `${X}px` : X
72
+ }
73
+ },
74
+ "aria-busy": ue || void 0,
75
+ "data-floating": j === "inside" && w ? "true" : void 0,
76
+ children: [
77
+ l && j !== "inside" && /* @__PURE__ */ jsxs(
78
+ "label",
79
+ {
80
+ htmlFor: A,
81
+ className: `nice-field__label ${d ? "nice-field__label--required" : ""}`,
82
+ children: [
83
+ l,
84
+ I && r.length > 0 && /* @__PURE__ */ jsx(zr, { shortcuts: r, size: "sm" })
85
+ ]
86
+ }
87
+ ),
88
+ /* @__PURE__ */ jsxs("div", { className: "nice-field__control", children: [
89
+ Y.isDisplay ? /* @__PURE__ */ jsx(
90
+ As,
91
+ {
92
+ value: w ?? R ?? "",
93
+ placeholder: $,
94
+ disabled: i,
95
+ readOnly: n,
96
+ onActivate: Y.enterEdit,
97
+ ariaLabel: l
98
+ }
99
+ ) : /* @__PURE__ */ jsxs(
100
+ "div",
101
+ {
102
+ className: `nice-input nice-input--${a} nice-input--ds-${ve || se} ${t ? "nice-input--error" : ""} ${i ? "nice-input--disabled" : ""} ${n ? "nice-input--readonly" : ""}`,
103
+ style: m ? void 0 : G,
104
+ children: [
105
+ F && /* @__PURE__ */ jsx("span", { className: "nice-input__icon", children: F }),
106
+ /* @__PURE__ */ jsx(
107
+ "input",
108
+ {
109
+ ref: (g) => {
110
+ typeof _ == "function" ? _(g) : _ && (_.current = g), Y.autoFocusRef(g);
111
+ },
112
+ id: A,
113
+ className: "nice-input__native",
114
+ type: L,
115
+ name: y,
116
+ value: w,
117
+ defaultValue: R,
118
+ placeholder: $,
119
+ disabled: i || ue,
120
+ readOnly: n,
121
+ maxLength: b,
122
+ autoFocus: M,
123
+ "aria-invalid": !!t,
124
+ "aria-describedby": t ? `${A}-error` : h ? `${A}-helper` : void 0,
125
+ onChange: (g) => p?.(g.target.value),
126
+ onBlur: (g) => {
127
+ P && Y.exitEdit(), J?.(g);
128
+ },
129
+ onKeyDown: ie,
130
+ ...k
131
+ }
132
+ ),
133
+ x && w && /* @__PURE__ */ jsx(
134
+ "button",
135
+ {
136
+ type: "button",
137
+ className: "nice-input__clear",
138
+ onClick: O,
139
+ "aria-label": S("controls.clear", "Clear"),
140
+ children: "✕"
141
+ }
142
+ ),
143
+ T && /* @__PURE__ */ jsx("span", { className: "nice-input__icon", children: T }),
144
+ l && j === "inside" && /* @__PURE__ */ jsx(
145
+ "label",
146
+ {
147
+ htmlFor: A,
148
+ className: `nice-input__floating-label ${d ? "nice-input__floating-label--required" : ""}`,
149
+ children: l
150
+ }
151
+ )
152
+ ]
153
+ }
154
+ ),
155
+ ue && /* @__PURE__ */ jsx("span", { className: "nice-field__spinner", children: /* @__PURE__ */ jsx("span", { className: "nice-spinner nice-spinner--sm" }) }),
156
+ ae === "right" && t && /* @__PURE__ */ jsx("div", { id: `${A}-error`, className: "nice-field__error", role: "alert", children: t }),
157
+ ae === "right" && !t && h && /* @__PURE__ */ jsx("div", { id: `${A}-helper`, className: "nice-field__helper", children: h })
158
+ ] }),
159
+ ae !== "right" && t && /* @__PURE__ */ jsx("div", { id: `${A}-error`, className: "nice-field__error", role: "alert", children: t }),
160
+ ae !== "right" && !t && h && /* @__PURE__ */ jsx("div", { id: `${A}-helper`, className: "nice-field__helper", children: h })
161
+ ]
162
+ }
163
+ );
164
+ }
165
+ );
166
+ Je.displayName = "NiceTextInput";
167
+ const Qe = forwardRef(
168
+ ({
169
+ label: l,
170
+ helperText: h,
171
+ error: t,
172
+ required: d,
173
+ disabled: i,
174
+ readOnly: n,
175
+ size: a = "md",
176
+ name: y,
177
+ id: u,
178
+ className: o,
179
+ style: f,
180
+ accessMode: D,
181
+ displayStyle: z,
182
+ value: m,
183
+ onChange: w,
184
+ onBlur: R,
185
+ onKeyDown: p,
186
+ placeholder: J,
187
+ min: E,
188
+ max: $,
189
+ step: L = 1,
190
+ precision: b,
191
+ prefix: F,
192
+ prefixType: T = "label",
193
+ prefixOptions: x,
194
+ prefixValue: M,
195
+ onPrefixChange: U,
196
+ suffix: V,
197
+ showStepper: I = true,
198
+ submitOnEnter: j,
199
+ onSubmit: ae,
200
+ showKeyboardHints: ue,
201
+ labelPlacement: ne,
202
+ errorPlacement: X,
203
+ loading: P,
204
+ labelWidth: k,
205
+ controlWidth: _,
206
+ formatPreset: q,
207
+ format: S,
208
+ suffixType: A = "label",
209
+ suffixOptions: G,
210
+ suffixValue: se,
211
+ onSuffixChange: ve,
212
+ displayMode: O
213
+ }, Y) => {
214
+ const re = rl(D, u);
215
+ if (re === "hidden")
216
+ return null;
217
+ re === "disabled" && (i = true), re === "readOnly" && (n = true);
218
+ const { t: ie } = me(), r = Is(u), g = xs("input", z), K = ks("input", z), [C, Q] = useState(false), [Z, ge] = useState(null), be = Ms({ enabled: O, readOnly: n, disabled: i }), pe = useMemo(() => {
219
+ let c = 3;
220
+ return $ != null && (c = String(Math.abs(Math.floor($))).length), E != null && E < 0 && (c += 1), b && (c += b + 1), Math.max(3, c) + 1;
221
+ }, [$, E, b]), Me = useCallback(
222
+ (c) => {
223
+ if (S)
224
+ return S(c);
225
+ if (!q)
226
+ return b != null ? c.toFixed(b) : String(c);
227
+ switch (q) {
228
+ case "integer":
229
+ return Math.round(c).toLocaleString();
230
+ case "decimal":
231
+ return c.toLocaleString(void 0, {
232
+ minimumFractionDigits: b ?? 2,
233
+ maximumFractionDigits: b ?? 2
234
+ });
235
+ case "money":
236
+ return c.toLocaleString(void 0, {
237
+ minimumFractionDigits: b ?? 2,
238
+ maximumFractionDigits: b ?? 2,
239
+ useGrouping: true
240
+ });
241
+ case "percent":
242
+ return (c * 100).toLocaleString(void 0, {
243
+ minimumFractionDigits: b ?? 0,
244
+ maximumFractionDigits: b ?? 2
245
+ }) + "%";
246
+ default:
247
+ return String(c);
248
+ }
249
+ },
250
+ [S, q, b]
251
+ ), Ce = useMemo(() => C && Z !== null ? Z : m == null ? "" : C ? b != null ? m.toFixed(b) : String(m) : Me(m), [m, C, Z, Me, b]), he = m != null && m < 0, te = !!(F || T === "select" && x && x.length > 0), W = he && te && !C, He = W ? Ce.replace(/^[-−]/, "") : Ce, fe = useCallback(
252
+ (c) => {
253
+ let N = c;
254
+ return E !== void 0 && (N = Math.max(E, N)), $ !== void 0 && (N = Math.min($, N)), b !== void 0 && (N = parseFloat(N.toFixed(b))), N;
255
+ },
256
+ [E, $, b]
257
+ ), Te = useCallback(
258
+ (c) => {
259
+ const N = c.target.value;
260
+ if (ge(N), N === "" || N === "-" || N === "." || N === "-.") {
261
+ N === "" && w?.(null);
262
+ return;
263
+ }
264
+ const le = parseFloat(N);
265
+ if (!isNaN(le)) {
266
+ let _e = le;
267
+ E !== void 0 && (_e = Math.max(E, _e)), $ !== void 0 && (_e = Math.min($, _e)), w?.(_e);
268
+ }
269
+ },
270
+ [w, E, $]
271
+ ), Ne = useCallback(() => {
272
+ const c = $e.current, N = fe((c ?? 0) + L);
273
+ $e.current = N, w?.(N);
274
+ }, [L, w, fe]), De = useCallback(() => {
275
+ const c = $e.current, N = fe((c ?? 0) - L);
276
+ $e.current = N, w?.(N);
277
+ }, [L, w, fe]), $e = useRef(m);
278
+ $e.current = m;
279
+ const s = useRef(null), H = useCallback(() => {
280
+ s.current && (clearTimeout(s.current), s.current = null);
281
+ }, []), B = useCallback(
282
+ (c) => {
283
+ H();
284
+ let N = 300;
285
+ const le = () => {
286
+ c(), N = Math.max(30, N * 0.82), s.current = setTimeout(le, N);
287
+ };
288
+ s.current = setTimeout(le, 400);
289
+ },
290
+ [H]
291
+ ), me$1 = vl({
292
+ enabled: j,
293
+ onSubmit: ae
294
+ }), Se = useCallback(
295
+ (c) => {
296
+ me$1(c), c.key === "ArrowUp" ? (c.preventDefault(), Ne()) : c.key === "ArrowDown" && (c.preventDefault(), De()), p?.(c);
297
+ },
298
+ [me$1, p, Ne, De]
299
+ ), ce = useMemo(() => {
300
+ const c = [];
301
+ return j && c.push(yl.submit), I && (c.push({ key: "ArrowUp", description: ie("shortcuts.increment", "Increase value") }), c.push({ key: "ArrowDown", description: ie("shortcuts.decrement", "Decrease value") })), c;
302
+ }, [j, I, ie]);
303
+ return /* @__PURE__ */ jsxs(
304
+ "div",
305
+ {
306
+ className: `nice-field nice-field--${a} ${ne === "left" ? "nice-field--label-left" : ""} ${P ? "nice-field--loading" : ""} ${o || ""}`,
307
+ style: {
308
+ ...f,
309
+ ...k != null && {
310
+ "--nice-field-label-width": typeof k == "number" ? `${k}px` : k
311
+ },
312
+ ..._ != null && {
313
+ "--nice-field-control-width": typeof _ == "number" ? `${_}px` : _
314
+ }
315
+ },
316
+ "aria-busy": P || void 0,
317
+ children: [
318
+ l && /* @__PURE__ */ jsxs(
319
+ "label",
320
+ {
321
+ htmlFor: r,
322
+ className: `nice-field__label ${d ? "nice-field__label--required" : ""}`,
323
+ children: [
324
+ l,
325
+ ue && ce.length > 0 && /* @__PURE__ */ jsx(zr, { shortcuts: ce, size: "sm" })
326
+ ]
327
+ }
328
+ ),
329
+ /* @__PURE__ */ jsxs("div", { className: "nice-field__control", children: [
330
+ be.isDisplay ? /* @__PURE__ */ jsx(
331
+ As,
332
+ {
333
+ value: m == null ? "" : F ? /* @__PURE__ */ jsxs(Fragment, { children: [
334
+ F,
335
+ Ce
336
+ ] }) : Ce,
337
+ placeholder: J,
338
+ disabled: i,
339
+ readOnly: n,
340
+ onActivate: be.enterEdit,
341
+ ariaLabel: l
342
+ }
343
+ ) : /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(
344
+ "div",
345
+ {
346
+ className: `nice-input nice-input--number nice-input--${a} nice-input--ds-${K} ${t ? "nice-input--error" : ""} ${i ? "nice-input--disabled" : ""} ${n ? "nice-input--readonly" : ""}`,
347
+ style: g,
348
+ children: [
349
+ I && !n && /* @__PURE__ */ jsx(
350
+ "button",
351
+ {
352
+ type: "button",
353
+ className: "nice-input__clear nice-input__minus",
354
+ onClick: De,
355
+ onMouseDown: () => B(De),
356
+ onMouseUp: H,
357
+ onMouseLeave: H,
358
+ disabled: i,
359
+ "aria-label": ie("controls.decrement", "Decrement"),
360
+ children: "−"
361
+ }
362
+ ),
363
+ T === "select" && x && x.length > 0 ? /* @__PURE__ */ jsxs(Fragment, { children: [
364
+ W && /* @__PURE__ */ jsx("span", { className: "nice-input__sign", children: "−" }),
365
+ /* @__PURE__ */ jsx(
366
+ "select",
367
+ {
368
+ className: "nice-input__suffix-select nice-input__icon--prefix",
369
+ value: M ?? x[0]?.value,
370
+ disabled: i,
371
+ onChange: (c) => {
372
+ const N = c.target.value, le = x.find(
373
+ (ke) => ke.value === (M ?? x[0]?.value)
374
+ ), _e = x.find((ke) => ke.value === N);
375
+ U?.(N, le?.weight, _e?.weight);
376
+ },
377
+ children: x.map((c) => /* @__PURE__ */ jsx("option", { value: c.value, children: c.label }, c.value))
378
+ }
379
+ )
380
+ ] }) : F ? /* @__PURE__ */ jsxs("span", { className: "nice-input__icon nice-input__icon--prefix", children: [
381
+ W && /* @__PURE__ */ jsx("span", { className: "nice-input__sign", children: "−" }),
382
+ F
383
+ ] }) : null,
384
+ /* @__PURE__ */ jsx(
385
+ "input",
386
+ {
387
+ ref: (c) => {
388
+ typeof Y == "function" ? Y(c) : Y && (Y.current = c), be.autoFocusRef(c);
389
+ },
390
+ id: r,
391
+ className: "nice-input__native",
392
+ type: !C && (S || q) ? "text" : "number",
393
+ name: y,
394
+ value: He,
395
+ placeholder: J,
396
+ min: E,
397
+ max: $,
398
+ step: L,
399
+ disabled: i || P,
400
+ readOnly: n,
401
+ "aria-invalid": !!t,
402
+ onChange: Te,
403
+ onFocus: (c) => {
404
+ Q(true), ge(null), c.target.select();
405
+ },
406
+ onBlur: (c) => {
407
+ if (Q(false), ge(null), m != null && b !== void 0) {
408
+ const N = parseFloat(m.toFixed(b));
409
+ N !== m && w?.(N);
410
+ }
411
+ O && be.exitEdit(), R?.(c);
412
+ },
413
+ onKeyDown: Se,
414
+ style: { width: `${pe}ch` }
415
+ }
416
+ ),
417
+ A === "select" && G && G.length > 0 ? /* @__PURE__ */ jsx(
418
+ "select",
419
+ {
420
+ className: "nice-input__suffix-select nice-input__icon--suffix",
421
+ value: se ?? G[0]?.value,
422
+ disabled: i,
423
+ onChange: (c) => {
424
+ const N = c.target.value, le = G.find(
425
+ (ke) => ke.value === (se ?? G[0]?.value)
426
+ ), _e = G.find((ke) => ke.value === N);
427
+ ve?.(N, le?.weight, _e?.weight);
428
+ },
429
+ children: G.map((c) => /* @__PURE__ */ jsx("option", { value: c.value, children: c.label }, c.value))
430
+ }
431
+ ) : V ? /* @__PURE__ */ jsx("span", { className: "nice-input__icon nice-input__icon--suffix", children: V }) : null,
432
+ I && !n && /* @__PURE__ */ jsx(
433
+ "button",
434
+ {
435
+ type: "button",
436
+ className: "nice-input__clear nice-input__plus",
437
+ onClick: Ne,
438
+ onMouseDown: () => B(Ne),
439
+ onMouseUp: H,
440
+ onMouseLeave: H,
441
+ disabled: i,
442
+ "aria-label": ie("controls.increment", "Increment"),
443
+ children: "+"
444
+ }
445
+ )
446
+ ]
447
+ }
448
+ ) }),
449
+ P && /* @__PURE__ */ jsx("span", { className: "nice-field__spinner", children: /* @__PURE__ */ jsx("span", { className: "nice-spinner nice-spinner--sm" }) }),
450
+ X === "right" && t && /* @__PURE__ */ jsx("div", { className: "nice-field__error", role: "alert", children: t }),
451
+ X === "right" && !t && h && /* @__PURE__ */ jsx("div", { className: "nice-field__helper", children: h })
452
+ ] }),
453
+ X !== "right" && t && /* @__PURE__ */ jsx("div", { className: "nice-field__error", role: "alert", children: t }),
454
+ X !== "right" && !t && h && /* @__PURE__ */ jsx("div", { className: "nice-field__helper", children: h })
455
+ ]
456
+ }
457
+ );
458
+ }
459
+ );
460
+ Qe.displayName = "NiceNumberInput";
461
+ const Ze = forwardRef(
462
+ ({
463
+ label: l,
464
+ helperText: h,
465
+ error: t,
466
+ required: d,
467
+ disabled: i,
468
+ size: n = "md",
469
+ name: a,
470
+ id: y,
471
+ className: u,
472
+ style: o,
473
+ accessMode: f,
474
+ displayStyle: D,
475
+ options: z,
476
+ value: m,
477
+ onChange: w,
478
+ placeholder: R,
479
+ multiple: p = false,
480
+ searchable: J = false,
481
+ clearable: E = false,
482
+ emptyText: $,
483
+ maxHeight: L = 240,
484
+ optionsSource: b,
485
+ valueField: F,
486
+ labelField: T,
487
+ virtualScroll: x,
488
+ optionHeight: M = 36,
489
+ onSearch: U,
490
+ loading: V,
491
+ renderOption: I,
492
+ multipleAutosize: j = false,
493
+ showKeyboardHints: ae,
494
+ labelPlacement: ue,
495
+ errorPlacement: ne,
496
+ labelWidth: X,
497
+ controlWidth: P,
498
+ displayMode: k
499
+ }, _) => {
500
+ const q = rl(f, y);
501
+ if (q === "hidden")
502
+ return null;
503
+ (q === "disabled" || q === "readOnly") && (i = true);
504
+ const { t: S } = me(), A = xs("input", D), G = ks("input", D), se = Is(y), ve = Ms({ enabled: k, disabled: i }), [O, Y] = useState(false), [re, ie] = useState(""), [r, g] = useState(-1), [K, C] = useState(0), Q = useRef(null), Z = useRef(null), [ge, be] = useState(null);
505
+ useLayoutEffect(() => {
506
+ !V && Z.current && be(Z.current.offsetWidth);
507
+ }, [V, m, D]);
508
+ const [pe, Me] = useState(null);
509
+ useLayoutEffect(() => {
510
+ p && !j && Z.current && pe == null && Me(Z.current.offsetWidth);
511
+ }, [p, j, pe]);
512
+ const Ce = _d(
513
+ b ?? null,
514
+ F ?? b?.keyField ?? "id",
515
+ T ?? "name"
516
+ ), he = b ? Ce.options : (z ?? []).map(
517
+ (s) => typeof s == "string" ? { value: s, label: s } : s
518
+ );
519
+ Bs(Q, () => {
520
+ Y(false), ie("");
521
+ });
522
+ const te = useMemo(() => m ? Array.isArray(m) ? m : [m] : [], [m]), W = useMemo(() => {
523
+ if (!re && !U || U)
524
+ return he;
525
+ const s = re.toLowerCase();
526
+ return he.filter(
527
+ (H) => H.label.toLowerCase().includes(s) || String(H.value).toLowerCase().includes(s)
528
+ );
529
+ }, [he, re, U]), He = useMemo(() => {
530
+ const s = /* @__PURE__ */ new Map();
531
+ for (const H of W) {
532
+ const B = H.group || "";
533
+ s.has(B) || s.set(B, []), s.get(B).push(H);
534
+ }
535
+ return s;
536
+ }, [W]), fe = useCallback(
537
+ (s) => {
538
+ if (p) {
539
+ const H = te.includes(s) ? te.filter((B) => B !== s) : [...te, s];
540
+ w?.(H);
541
+ } else
542
+ w?.(s), Y(false), ie("");
543
+ },
544
+ [p, te, w]
545
+ ), Te = useCallback(
546
+ (s) => {
547
+ if (s.key === "Escape") {
548
+ Y(false), ie("");
549
+ return;
550
+ }
551
+ if (s.key === "Enter" || s.key === " ") {
552
+ if (!O) {
553
+ Y(true), s.preventDefault();
554
+ return;
555
+ }
556
+ r >= 0 && W[r] && (fe(W[r].value), s.preventDefault());
557
+ return;
558
+ }
559
+ s.key === "ArrowDown" && (s.preventDefault(), g((H) => Math.min(H + 1, W.length - 1))), s.key === "ArrowUp" && (s.preventDefault(), g((H) => Math.max(H - 1, 0)));
560
+ },
561
+ [O, r, W, fe]
562
+ ), Ne = useMemo(() => te.length === 0 ? null : p ? te.map((s) => he.find((H) => H.value === s)?.label || s).join(", ") : he.find((s) => s.value === te[0])?.label || te[0], [te, he, p]), De = useCallback(
563
+ (s) => {
564
+ s.stopPropagation(), w?.(p ? [] : "");
565
+ },
566
+ [w, p]
567
+ ), $e = useMemo(
568
+ () => [
569
+ { key: "Enter", description: S("shortcuts.select", "Select") },
570
+ { key: "Space", description: S("shortcuts.openDropdown", "Open dropdown") },
571
+ yl.moveUp,
572
+ yl.moveDown,
573
+ yl.cancel
574
+ ],
575
+ [S]
576
+ );
577
+ return /* @__PURE__ */ jsxs(
578
+ "div",
579
+ {
580
+ className: `nice-field ${P == null ? "nice-field--select-auto" : ""} nice-field--${n} ${ue === "left" ? "nice-field--label-left" : ""} ${V ? "nice-field--loading" : ""} ${u || ""}`,
581
+ style: {
582
+ ...o,
583
+ ...X != null && {
584
+ "--nice-field-label-width": typeof X == "number" ? `${X}px` : X
585
+ },
586
+ ...P != null && {
587
+ "--nice-field-control-width": typeof P == "number" ? `${P}px` : P
588
+ },
589
+ ...V && ge != null && { "--nice-select-locked-width": `${ge}px` }
590
+ },
591
+ "aria-busy": V || void 0,
592
+ children: [
593
+ l && /* @__PURE__ */ jsxs(
594
+ "label",
595
+ {
596
+ htmlFor: se,
597
+ className: `nice-field__label ${d ? "nice-field__label--required" : ""}`,
598
+ children: [
599
+ l,
600
+ ae && /* @__PURE__ */ jsx(zr, { shortcuts: $e, size: "sm" })
601
+ ]
602
+ }
603
+ ),
604
+ /* @__PURE__ */ jsxs("div", { className: "nice-field__control", children: [
605
+ ve.isDisplay ? /* @__PURE__ */ jsx(
606
+ As,
607
+ {
608
+ value: Ne,
609
+ placeholder: R || S("controls.select", "Select..."),
610
+ disabled: i,
611
+ onActivate: () => {
612
+ ve.enterEdit(), Y(true);
613
+ },
614
+ ariaLabel: l
615
+ }
616
+ ) : /* @__PURE__ */ jsxs("div", { className: "nice-select", ref: Q, children: [
617
+ /* @__PURE__ */ jsxs(
618
+ "button",
619
+ {
620
+ ref: (s) => {
621
+ Z.current = s, typeof _ == "function" ? _(s) : _ && (_.current = s);
622
+ },
623
+ type: "button",
624
+ id: se,
625
+ role: "combobox",
626
+ "aria-expanded": O,
627
+ "aria-haspopup": "listbox",
628
+ "aria-invalid": !!t,
629
+ className: `nice-select__trigger nice-select__trigger--${n} nice-select--ds-${G} ${O ? "nice-select__trigger--open" : ""} ${t ? "nice-select__trigger--error" : ""} ${i ? "nice-select__trigger--disabled" : ""}`,
630
+ style: {
631
+ ...A,
632
+ ...p && !j && pe != null ? {
633
+ width: pe,
634
+ maxWidth: pe,
635
+ overflow: "hidden"
636
+ } : {}
637
+ },
638
+ disabled: i,
639
+ onClick: () => Y(!O),
640
+ onKeyDown: Te,
641
+ children: [
642
+ Ne ? /* @__PURE__ */ jsx(
643
+ "span",
644
+ {
645
+ style: p && !j ? {
646
+ flex: 1,
647
+ minWidth: 0,
648
+ overflow: "hidden",
649
+ textOverflow: "ellipsis",
650
+ whiteSpace: "nowrap"
651
+ } : void 0,
652
+ children: Ne
653
+ }
654
+ ) : /* @__PURE__ */ jsx("span", { className: "nice-select__placeholder", children: R || S("controls.select", "Select...") }),
655
+ /* @__PURE__ */ jsxs("span", { style: { display: "flex", alignItems: "center", gap: 4 }, children: [
656
+ E && te.length > 0 && /* @__PURE__ */ jsx(
657
+ "span",
658
+ {
659
+ className: "nice-input__clear",
660
+ onClick: De,
661
+ role: "button",
662
+ "aria-label": S("controls.clear", "Clear"),
663
+ children: "✕"
664
+ }
665
+ ),
666
+ /* @__PURE__ */ jsx(
667
+ "svg",
668
+ {
669
+ className: `nice-select__chevron ${O ? "nice-select__chevron--open" : ""}`,
670
+ viewBox: "0 0 20 20",
671
+ fill: "currentColor",
672
+ children: /* @__PURE__ */ jsx(
673
+ "path",
674
+ {
675
+ fillRule: "evenodd",
676
+ d: "M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z",
677
+ clipRule: "evenodd"
678
+ }
679
+ )
680
+ }
681
+ )
682
+ ] })
683
+ ]
684
+ }
685
+ ),
686
+ O && /* @__PURE__ */ jsxs(
687
+ "div",
688
+ {
689
+ className: "nice-select__dropdown",
690
+ role: "listbox",
691
+ style: { maxHeight: L },
692
+ onScroll: x ? (s) => C(s.currentTarget.scrollTop) : void 0,
693
+ children: [
694
+ (J || U) && /* @__PURE__ */ jsx("div", { className: "nice-select__search", children: /* @__PURE__ */ jsx(
695
+ "input",
696
+ {
697
+ type: "text",
698
+ value: re,
699
+ onChange: (s) => {
700
+ ie(s.target.value), g(0), U?.(s.target.value);
701
+ },
702
+ placeholder: S("controls.search", "Search..."),
703
+ autoFocus: true
704
+ }
705
+ ) }),
706
+ V && /* @__PURE__ */ jsx("div", { className: "nice-select__loading", children: /* @__PURE__ */ jsx(
707
+ "div",
708
+ {
709
+ className: "nice-spinner nice-spinner--sm",
710
+ style: { margin: "8px auto" }
711
+ }
712
+ ) }),
713
+ !V && W.length === 0 ? /* @__PURE__ */ jsx("div", { className: "nice-select__empty", children: $ || S("controls.noResults", "No results found") }) : x && !Array.from(He.keys()).some((s) => s !== "") ? (() => {
714
+ const H = W.length * M, B = Math.max(
715
+ 0,
716
+ Math.floor(K / M) - 3
717
+ ), me = Math.min(
718
+ W.length,
719
+ Math.ceil((K + L) / M) + 3
720
+ ), Se = W.slice(B, me);
721
+ return /* @__PURE__ */ jsx("div", { style: { height: H, position: "relative" }, children: Se.map((ce, c) => {
722
+ const N = B + c, le = te.includes(ce.value);
723
+ return /* @__PURE__ */ jsx(
724
+ "div",
725
+ {
726
+ role: "option",
727
+ "aria-selected": le,
728
+ className: `nice-select__option ${le ? "nice-select__option--selected" : ""} ${N === r ? "nice-select__option--highlighted" : ""} ${ce.disabled ? "nice-select__option--disabled" : ""}`,
729
+ style: {
730
+ position: "absolute",
731
+ top: N * M,
732
+ left: 0,
733
+ right: 0,
734
+ height: M,
735
+ display: "flex",
736
+ alignItems: "center",
737
+ padding: "0 12px"
738
+ },
739
+ onClick: () => !ce.disabled && fe(String(ce.value)),
740
+ onMouseEnter: () => g(N),
741
+ children: I ? I(ce, le) : /* @__PURE__ */ jsxs(Fragment, { children: [
742
+ ce.icon && /* @__PURE__ */ jsx("span", { children: ce.icon }),
743
+ /* @__PURE__ */ jsxs("div", { style: { flex: 1 }, children: [
744
+ /* @__PURE__ */ jsx("div", { children: ce.label }),
745
+ ce.description && /* @__PURE__ */ jsx("div", { className: "nice-select__option-desc", children: ce.description })
746
+ ] }),
747
+ le && /* @__PURE__ */ jsx(
748
+ "svg",
749
+ {
750
+ className: "nice-select__option-check",
751
+ viewBox: "0 0 20 20",
752
+ fill: "currentColor",
753
+ children: /* @__PURE__ */ jsx(
754
+ "path",
755
+ {
756
+ fillRule: "evenodd",
757
+ d: "M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z",
758
+ clipRule: "evenodd"
759
+ }
760
+ )
761
+ }
762
+ )
763
+ ] })
764
+ },
765
+ ce.value
766
+ );
767
+ }) });
768
+ })() : Array.from(He.entries()).map(([s, H]) => /* @__PURE__ */ jsxs(_e.Fragment, { children: [
769
+ s && /* @__PURE__ */ jsx("div", { className: "nice-select__group-label", children: s }),
770
+ H.map((B) => {
771
+ const me = te.includes(B.value), Se = W.indexOf(B);
772
+ return /* @__PURE__ */ jsx(
773
+ "div",
774
+ {
775
+ role: "option",
776
+ "aria-selected": me,
777
+ className: `nice-select__option ${me ? "nice-select__option--selected" : ""} ${Se === r ? "nice-select__option--highlighted" : ""} ${B.disabled ? "nice-select__option--disabled" : ""}`,
778
+ onClick: () => !B.disabled && fe(String(B.value)),
779
+ onMouseEnter: () => g(Se),
780
+ children: I ? I(B, me) : /* @__PURE__ */ jsxs(Fragment, { children: [
781
+ B.icon && /* @__PURE__ */ jsx("span", { children: B.icon }),
782
+ /* @__PURE__ */ jsxs("div", { style: { flex: 1 }, children: [
783
+ /* @__PURE__ */ jsx("div", { children: B.label }),
784
+ B.description && /* @__PURE__ */ jsx("div", { className: "nice-select__option-desc", children: B.description })
785
+ ] }),
786
+ me && /* @__PURE__ */ jsx(
787
+ "svg",
788
+ {
789
+ className: "nice-select__option-check",
790
+ viewBox: "0 0 20 20",
791
+ fill: "currentColor",
792
+ children: /* @__PURE__ */ jsx(
793
+ "path",
794
+ {
795
+ fillRule: "evenodd",
796
+ d: "M16.704 4.153a.75.75 0 01.143 1.052l-8 10.5a.75.75 0 01-1.127.075l-4.5-4.5a.75.75 0 011.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 011.05-.143z",
797
+ clipRule: "evenodd"
798
+ }
799
+ )
800
+ }
801
+ )
802
+ ] })
803
+ },
804
+ B.value
805
+ );
806
+ })
807
+ ] }, s))
808
+ ]
809
+ }
810
+ )
811
+ ] }),
812
+ V && /* @__PURE__ */ jsx("span", { className: "nice-field__spinner", children: /* @__PURE__ */ jsx("span", { className: "nice-spinner nice-spinner--sm" }) }),
813
+ ne === "right" && t && /* @__PURE__ */ jsx("div", { id: `${se}-error`, className: "nice-field__error", role: "alert", children: t }),
814
+ ne === "right" && !t && h && /* @__PURE__ */ jsx("div", { id: `${se}-helper`, className: "nice-field__helper", children: h })
815
+ ] }),
816
+ ne !== "right" && t && /* @__PURE__ */ jsx("div", { id: `${se}-error`, className: "nice-field__error", role: "alert", children: t }),
817
+ ne !== "right" && !t && h && /* @__PURE__ */ jsx("div", { id: `${se}-helper`, className: "nice-field__helper", children: h })
818
+ ]
819
+ }
820
+ );
821
+ }
822
+ );
823
+ Ze.displayName = "NiceSelect";
824
+ const Pe = forwardRef(
825
+ ({
826
+ label: l,
827
+ checked: h = false,
828
+ indeterminate: t = false,
829
+ onChange: d,
830
+ disabled: i,
831
+ readOnly: n,
832
+ loading: a,
833
+ required: y,
834
+ size: u = "md",
835
+ name: o,
836
+ id: f,
837
+ className: D,
838
+ style: z,
839
+ error: m,
840
+ helperText: w,
841
+ accessMode: R,
842
+ displayStyle: p,
843
+ showKeyboardHints: J,
844
+ labelPlacement: E,
845
+ errorPlacement: $,
846
+ labelWidth: L,
847
+ controlWidth: b
848
+ }, F) => {
849
+ const T = rl(R, f);
850
+ if (T === "hidden")
851
+ return null;
852
+ (T === "disabled" || T === "readOnly") && (i = true);
853
+ const { t: x } = me(), M = Is(f);
854
+ ks("toggle", p);
855
+ const U = useMemo(
856
+ () => [{ key: "Space", description: x("shortcuts.toggle", "Toggle") }],
857
+ [x]
858
+ ), V = _e.useCallback(
859
+ (I) => {
860
+ I && (I.indeterminate = t), typeof F == "function" ? F(I) : F && (F.current = I);
861
+ },
862
+ [t, F]
863
+ );
864
+ return /* @__PURE__ */ jsxs(
865
+ "div",
866
+ {
867
+ className: `nice-field nice-field--inline nice-field--${u} ${E === "left" ? "nice-field--label-left" : ""} ${$ === "right" ? "nice-field--error-right" : ""} ${a ? "nice-field--loading" : ""} ${D || ""}`,
868
+ style: {
869
+ ...z,
870
+ ...L != null && {
871
+ "--nice-field-label-width": typeof L == "number" ? `${L}px` : L
872
+ },
873
+ ...b != null && {
874
+ "--nice-field-control-width": typeof b == "number" ? `${b}px` : b
875
+ }
876
+ },
877
+ "aria-busy": a || void 0,
878
+ children: [
879
+ E === "left" && l && /* @__PURE__ */ jsx("span", { className: `nice-field__label ${y ? "nice-field__label--required" : ""}`, children: l }),
880
+ /* @__PURE__ */ jsxs("div", { className: "nice-field__control", children: [
881
+ /* @__PURE__ */ jsxs(
882
+ "label",
883
+ {
884
+ className: `nice-checkbox ${u !== "md" ? `nice-checkbox--${u}` : ""} ${i || a ? "nice-checkbox--disabled" : ""}`,
885
+ htmlFor: M,
886
+ children: [
887
+ /* @__PURE__ */ jsx(
888
+ "input",
889
+ {
890
+ ref: V,
891
+ id: M,
892
+ type: "checkbox",
893
+ className: "nice-checkbox__input",
894
+ name: o,
895
+ checked: h,
896
+ disabled: i || a,
897
+ readOnly: n,
898
+ "aria-invalid": !!m,
899
+ onChange: (I) => {
900
+ n || a || d?.(I.target.checked);
901
+ }
902
+ }
903
+ ),
904
+ /* @__PURE__ */ jsx("span", { className: "nice-checkbox__box", children: /* @__PURE__ */ jsx(
905
+ "svg",
906
+ {
907
+ viewBox: "0 0 12 12",
908
+ fill: "none",
909
+ stroke: "currentColor",
910
+ strokeWidth: "2",
911
+ strokeLinecap: "round",
912
+ strokeLinejoin: "round",
913
+ children: t ? /* @__PURE__ */ jsx("line", { x1: "2", y1: "6", x2: "10", y2: "6" }) : /* @__PURE__ */ jsx("polyline", { points: "2 6 5 9 10 3" })
914
+ }
915
+ ) }),
916
+ E !== "left" && l && /* @__PURE__ */ jsx("span", { children: l }),
917
+ J && /* @__PURE__ */ jsx(zr, { shortcuts: U, size: "sm" })
918
+ ]
919
+ }
920
+ ),
921
+ a && /* @__PURE__ */ jsx("span", { className: "nice-field__spinner", children: /* @__PURE__ */ jsx("span", { className: "nice-spinner nice-spinner--sm" }) }),
922
+ $ === "right" && m && /* @__PURE__ */ jsx("div", { id: `${M}-error`, className: "nice-field__error", role: "alert", children: m }),
923
+ $ === "right" && !m && w && /* @__PURE__ */ jsx("div", { id: `${M}-helper`, className: "nice-field__helper", children: w })
924
+ ] }),
925
+ $ !== "right" && m && /* @__PURE__ */ jsx("div", { id: `${M}-error`, className: "nice-field__error", role: "alert", children: m }),
926
+ $ !== "right" && !m && w && /* @__PURE__ */ jsx("div", { id: `${M}-helper`, className: "nice-field__helper", children: w })
927
+ ]
928
+ }
929
+ );
930
+ }
931
+ );
932
+ Pe.displayName = "NiceCheckbox";
933
+ const Oe = forwardRef(
934
+ ({
935
+ label: l,
936
+ checked: h = false,
937
+ onChange: t,
938
+ disabled: d,
939
+ readOnly: i,
940
+ loading: n,
941
+ required: a,
942
+ size: y = "md",
943
+ name: u,
944
+ id: o,
945
+ className: f,
946
+ style: D,
947
+ accessMode: z,
948
+ displayStyle: m,
949
+ showKeyboardHints: w,
950
+ error: R,
951
+ helperText: p,
952
+ labelPlacement: J,
953
+ errorPlacement: E,
954
+ labelWidth: $,
955
+ controlWidth: L
956
+ }, b) => {
957
+ const F = rl(z, o);
958
+ if (F === "hidden")
959
+ return null;
960
+ (F === "disabled" || F === "readOnly") && (d = true);
961
+ const { t: T } = me(), x = Is(o);
962
+ xs("toggle", m);
963
+ const M = ks("toggle", m), U = useMemo(
964
+ () => [{ key: "Space", description: T("shortcuts.toggle", "Toggle on/off") }],
965
+ [T]
966
+ );
967
+ return /* @__PURE__ */ jsxs(
968
+ "div",
969
+ {
970
+ className: `nice-field nice-field--inline nice-field--${y} ${J === "left" ? "nice-field--label-left" : ""} ${n ? "nice-field--loading" : ""} ${f || ""}`,
971
+ style: {
972
+ ...D,
973
+ ...$ != null && {
974
+ "--nice-field-label-width": typeof $ == "number" ? `${$}px` : $
975
+ },
976
+ ...L != null && {
977
+ "--nice-field-control-width": typeof L == "number" ? `${L}px` : L
978
+ }
979
+ },
980
+ "aria-busy": n || void 0,
981
+ children: [
982
+ J === "left" && l && /* @__PURE__ */ jsx("span", { className: `nice-field__label ${a ? "nice-field__label--required" : ""}`, children: l }),
983
+ /* @__PURE__ */ jsxs("div", { className: "nice-field__control", children: [
984
+ /* @__PURE__ */ jsxs(
985
+ "label",
986
+ {
987
+ className: `nice-toggle nice-toggle--ds-${M} ${y !== "md" ? `nice-toggle--${y}` : ""} ${d || n ? "nice-toggle--disabled" : ""}`,
988
+ htmlFor: x,
989
+ children: [
990
+ /* @__PURE__ */ jsx(
991
+ "input",
992
+ {
993
+ ref: b,
994
+ id: x,
995
+ type: "checkbox",
996
+ className: "nice-toggle__input",
997
+ name: u,
998
+ checked: h,
999
+ disabled: d || n,
1000
+ readOnly: i,
1001
+ role: "switch",
1002
+ "aria-checked": h,
1003
+ "aria-invalid": !!R,
1004
+ onChange: (V) => {
1005
+ i || n || t?.(V.target.checked);
1006
+ }
1007
+ }
1008
+ ),
1009
+ /* @__PURE__ */ jsx("span", { className: "nice-toggle__track", children: /* @__PURE__ */ jsx("span", { className: "nice-toggle__thumb" }) }),
1010
+ J !== "left" && l && /* @__PURE__ */ jsx("span", { children: l }),
1011
+ w && /* @__PURE__ */ jsx(zr, { shortcuts: U, size: "sm" })
1012
+ ]
1013
+ }
1014
+ ),
1015
+ n && /* @__PURE__ */ jsx("span", { className: "nice-field__spinner", children: /* @__PURE__ */ jsx("span", { className: "nice-spinner nice-spinner--sm" }) }),
1016
+ E === "right" && R && /* @__PURE__ */ jsx("div", { id: `${x}-error`, className: "nice-field__error", role: "alert", children: R }),
1017
+ E === "right" && !R && p && /* @__PURE__ */ jsx("div", { id: `${x}-helper`, className: "nice-field__helper", children: p })
1018
+ ] }),
1019
+ E !== "right" && R && /* @__PURE__ */ jsx("div", { id: `${x}-error`, className: "nice-field__error", role: "alert", children: R }),
1020
+ E !== "right" && !R && p && /* @__PURE__ */ jsx("div", { id: `${x}-helper`, className: "nice-field__helper", children: p })
1021
+ ]
1022
+ }
1023
+ );
1024
+ }
1025
+ );
1026
+ Oe.displayName = "NiceToggle";
1027
+ const We = [
1028
+ "#ef4444",
1029
+ "#f97316",
1030
+ "#f59e0b",
1031
+ "#84cc16",
1032
+ "#10b981",
1033
+ "#06b6d4",
1034
+ "#3b82f6",
1035
+ "#6366f1",
1036
+ "#8b5cf6",
1037
+ "#ec4899",
1038
+ "#64748b",
1039
+ "#1e293b"
1040
+ ];
1041
+ function en() {
1042
+ return "#" + Math.floor(Math.random() * 16777215).toString(16).padStart(6, "0");
1043
+ }
1044
+ function nn(l, h, t) {
1045
+ const d = l / 255, i = h / 255, n = t / 255, a = Math.max(d, i, n), y = Math.min(d, i, n), u = (a + y) / 2;
1046
+ let o = 0, f = 0;
1047
+ if (a !== y) {
1048
+ const D = a - y;
1049
+ switch (f = u > 0.5 ? D / (2 - a - y) : D / (a + y), a) {
1050
+ case d:
1051
+ o = (i - n) / D + (i < n ? 6 : 0);
1052
+ break;
1053
+ case i:
1054
+ o = (n - d) / D + 2;
1055
+ break;
1056
+ case n:
1057
+ o = (d - i) / D + 4;
1058
+ break;
1059
+ }
1060
+ o *= 60;
1061
+ }
1062
+ return { h: Math.round(o), s: Math.round(f * 100), l: Math.round(u * 100) };
1063
+ }
1064
+ function tn(l, h, t) {
1065
+ const d = h / 100, i = t / 100, n = (1 - Math.abs(2 * i - 1)) * d, a = n * (1 - Math.abs(l / 60 % 2 - 1)), y = i - n / 2;
1066
+ let u = 0, o = 0, f = 0;
1067
+ return l < 60 ? [u, o, f] = [n, a, 0] : l < 120 ? [u, o, f] = [a, n, 0] : l < 180 ? [u, o, f] = [0, n, a] : l < 240 ? [u, o, f] = [0, a, n] : l < 300 ? [u, o, f] = [a, 0, n] : [u, o, f] = [n, 0, a], {
1068
+ r: Math.round((u + y) * 255),
1069
+ g: Math.round((o + y) * 255),
1070
+ b: Math.round((f + y) * 255)
1071
+ };
1072
+ }
1073
+ function cn(l, h, t) {
1074
+ const d = l / 255, i = h / 255, n = t / 255, a = Math.max(d, i, n), y = Math.min(d, i, n), u = a - y;
1075
+ let o = 0;
1076
+ u !== 0 && (a === d ? o = (i - n) / u % 6 : a === i ? o = (n - d) / u + 2 : o = (d - i) / u + 4, o *= 60, o < 0 && (o += 360));
1077
+ const f = a === 0 ? 0 : u / a;
1078
+ return { h: Math.round(o), s: Math.round(f * 100), v: Math.round(a * 100) };
1079
+ }
1080
+ function ln(l, h, t) {
1081
+ const d = h / 100, i = t / 100, n = i * d, a = n * (1 - Math.abs(l / 60 % 2 - 1)), y = i - n;
1082
+ let u = 0, o = 0, f = 0;
1083
+ return l < 60 ? [u, o, f] = [n, a, 0] : l < 120 ? [u, o, f] = [a, n, 0] : l < 180 ? [u, o, f] = [0, n, a] : l < 240 ? [u, o, f] = [0, a, n] : l < 300 ? [u, o, f] = [a, 0, n] : [u, o, f] = [n, 0, a], {
1084
+ r: Math.round((u + y) * 255),
1085
+ g: Math.round((o + y) * 255),
1086
+ b: Math.round((f + y) * 255)
1087
+ };
1088
+ }
1089
+ function sn(l) {
1090
+ const h = /^#?([0-9a-f]{6})$/i.exec(l.trim()), t = /^#?([0-9a-f]{8})$/i.exec(l.trim());
1091
+ if (t) {
1092
+ const d = t[1];
1093
+ return {
1094
+ r: parseInt(d.slice(0, 2), 16),
1095
+ g: parseInt(d.slice(2, 4), 16),
1096
+ b: parseInt(d.slice(4, 6), 16),
1097
+ a: parseInt(d.slice(6, 8), 16) / 255
1098
+ };
1099
+ }
1100
+ if (h) {
1101
+ const d = parseInt(h[1], 16);
1102
+ return { r: d >> 16 & 255, g: d >> 8 & 255, b: d & 255, a: 1 };
1103
+ }
1104
+ return { r: 0, g: 0, b: 0, a: 1 };
1105
+ }
1106
+ function rn(l, h, t, d, i) {
1107
+ const n = (y) => Math.max(0, Math.min(255, Math.round(y))).toString(16).padStart(2, "0"), a = `#${n(l)}${n(h)}${n(t)}`;
1108
+ return i ? `${a}${n(d * 255)}` : a;
1109
+ }
1110
+ const an = forwardRef(
1111
+ ({
1112
+ label: l,
1113
+ helperText: h,
1114
+ error: t,
1115
+ required: d,
1116
+ disabled: i,
1117
+ id: n,
1118
+ className: a,
1119
+ style: y,
1120
+ accessMode: u,
1121
+ displayStyle: o,
1122
+ value: f = "#3b82f6",
1123
+ onChange: D,
1124
+ presets: z = We,
1125
+ showInput: m = true,
1126
+ showRandom: w = true,
1127
+ withAlpha: R = false,
1128
+ showKeyboardHints: p,
1129
+ size: J = "md",
1130
+ labelPlacement: E,
1131
+ errorPlacement: $,
1132
+ labelWidth: L,
1133
+ controlWidth: b,
1134
+ loading: F
1135
+ }, T) => {
1136
+ const x = rl(u, n);
1137
+ if (x === "hidden")
1138
+ return null;
1139
+ (x === "disabled" || x === "readOnly") && (i = true);
1140
+ const { t: M } = me(), U = Is(n);
1141
+ ks("input", o);
1142
+ const V = useCallback(() => {
1143
+ i || D?.(en());
1144
+ }, [i, D]), [I, j] = useState(false), [ae, ue] = useState(null), ne = useRef(null), X = useRef(null);
1145
+ useLayoutEffect(() => {
1146
+ if (!I || !X.current)
1147
+ return;
1148
+ const k = () => {
1149
+ const _ = X.current?.getBoundingClientRect();
1150
+ if (!_)
1151
+ return;
1152
+ const q = 280, S = 360;
1153
+ let A = _.left, G = _.bottom + 6;
1154
+ A + q > window.innerWidth - 8 && (A = Math.max(8, window.innerWidth - q - 8)), G + S > window.innerHeight - 8 && (G = Math.max(8, _.top - S - 6)), ue({ left: A, top: G });
1155
+ };
1156
+ return k(), window.addEventListener("scroll", k, true), window.addEventListener("resize", k), () => {
1157
+ window.removeEventListener("scroll", k, true), window.removeEventListener("resize", k);
1158
+ };
1159
+ }, [I]), useEffect(() => {
1160
+ if (!I)
1161
+ return;
1162
+ const k = (q) => {
1163
+ const S = q.target;
1164
+ ne.current?.contains(S) || X.current?.contains(S) || j(false);
1165
+ }, _ = (q) => {
1166
+ q.key === "Escape" && j(false);
1167
+ };
1168
+ return document.addEventListener("mousedown", k), document.addEventListener("keydown", _), () => {
1169
+ document.removeEventListener("mousedown", k), document.removeEventListener("keydown", _);
1170
+ };
1171
+ }, [I]);
1172
+ const P = useMemo(
1173
+ () => [
1174
+ { key: "Enter", description: M("shortcuts.openPicker", "Open color picker") },
1175
+ { key: "Arrow keys", description: M("shortcuts.navigatePresets", "Navigate presets") }
1176
+ ],
1177
+ [M]
1178
+ );
1179
+ return /* @__PURE__ */ jsxs(
1180
+ "div",
1181
+ {
1182
+ className: `nice-field nice-field--${J} ${E === "left" ? "nice-field--label-left" : ""} ${F ? "nice-field--loading" : ""} ${a || ""}`,
1183
+ style: {
1184
+ ...y,
1185
+ ...L != null && {
1186
+ "--nice-field-label-width": typeof L == "number" ? `${L}px` : L
1187
+ },
1188
+ ...b != null && {
1189
+ "--nice-field-control-width": typeof b == "number" ? `${b}px` : b
1190
+ }
1191
+ },
1192
+ "aria-busy": F || void 0,
1193
+ children: [
1194
+ l && /* @__PURE__ */ jsxs(
1195
+ "label",
1196
+ {
1197
+ htmlFor: U,
1198
+ className: `nice-field__label ${d ? "nice-field__label--required" : ""}`,
1199
+ children: [
1200
+ l,
1201
+ p && /* @__PURE__ */ jsx(zr, { shortcuts: P, size: "sm" })
1202
+ ]
1203
+ }
1204
+ ),
1205
+ /* @__PURE__ */ jsx("div", { className: "nice-field__control", children: /* @__PURE__ */ jsxs("div", { className: "nice-color-picker", children: [
1206
+ /* @__PURE__ */ jsxs("div", { className: "nice-color-picker__preview-row", children: [
1207
+ /* @__PURE__ */ jsx(
1208
+ "div",
1209
+ {
1210
+ ref: X,
1211
+ className: "nice-color-picker__swatch",
1212
+ id: U,
1213
+ style: { background: f },
1214
+ onClick: (k) => {
1215
+ k.stopPropagation(), i || j((_) => !_);
1216
+ },
1217
+ onKeyDown: (k) => {
1218
+ !i && (k.key === "Enter" || k.key === " ") && (k.preventDefault(), j((_) => !_));
1219
+ },
1220
+ role: "button",
1221
+ tabIndex: 0,
1222
+ "aria-label": M("colorPicker.openPalette", "Open color palette"),
1223
+ "aria-haspopup": "dialog",
1224
+ "aria-expanded": I,
1225
+ children: /* @__PURE__ */ jsx(
1226
+ "input",
1227
+ {
1228
+ ref: (k) => {
1229
+ typeof T == "function" ? T(k) : T && (T.current = k);
1230
+ },
1231
+ type: "hidden",
1232
+ value: f,
1233
+ disabled: i,
1234
+ readOnly: true
1235
+ }
1236
+ )
1237
+ }
1238
+ ),
1239
+ m && /* @__PURE__ */ jsx("div", { className: "nice-input nice-input--sm", style: { width: 100 }, children: /* @__PURE__ */ jsx(
1240
+ "input",
1241
+ {
1242
+ className: "nice-input__native",
1243
+ type: "text",
1244
+ value: f,
1245
+ disabled: i,
1246
+ onChange: (k) => D?.(k.target.value),
1247
+ maxLength: 7
1248
+ }
1249
+ ) }),
1250
+ w && /* @__PURE__ */ jsx(
1251
+ "button",
1252
+ {
1253
+ type: "button",
1254
+ className: "nice-btn nice-btn--outline nice-btn--sm nice-color-picker__random",
1255
+ onClick: V,
1256
+ disabled: i,
1257
+ title: M("colorPicker.random", "Random"),
1258
+ "aria-label": M("colorPicker.random", "Random"),
1259
+ style: {
1260
+ fontSize: "0.65rem",
1261
+ textTransform: "uppercase",
1262
+ letterSpacing: "0.05em"
1263
+ },
1264
+ children: M("colorPicker.random", "Random")
1265
+ }
1266
+ ),
1267
+ F && /* @__PURE__ */ jsx("span", { className: "nice-field__spinner", children: /* @__PURE__ */ jsx("span", { className: "nice-spinner nice-spinner--sm" }) }),
1268
+ $ === "right" && t && /* @__PURE__ */ jsx("div", { id: `${U}-error`, className: "nice-field__error", role: "alert", children: t }),
1269
+ $ === "right" && !t && h && /* @__PURE__ */ jsx("div", { id: `${U}-helper`, className: "nice-field__helper", children: h })
1270
+ ] }),
1271
+ I && ae && typeof document < "u" && ze.createPortal(
1272
+ /* @__PURE__ */ jsx(
1273
+ "div",
1274
+ {
1275
+ ref: ne,
1276
+ className: "nice-color-picker__popup nice-color-picker__popup--portal",
1277
+ role: "dialog",
1278
+ "aria-label": M("colorPicker.palette", "Color palette"),
1279
+ style: { position: "fixed", left: ae.left, top: ae.top },
1280
+ onClick: (k) => k.stopPropagation(),
1281
+ children: (() => {
1282
+ const k = sn(f), _ = { r: k.r, g: k.g, b: k.b }, q = R ? k.a : 1, S = nn(_.r, _.g, _.b), A = cn(_.r, _.g, _.b), G = (r, g, K, C = q) => D?.(rn(r, g, K, C, R)), se = (r, g, K) => G(r, g, K), ve = (r, g, K) => {
1283
+ const C = tn(r, g, K);
1284
+ G(C.r, C.g, C.b);
1285
+ }, O = (r, g, K) => {
1286
+ const C = ln(r, g, K);
1287
+ G(C.r, C.g, C.b);
1288
+ }, Y = (r) => G(_.r, _.g, _.b, r), re = (r) => {
1289
+ if (i)
1290
+ return;
1291
+ const g = r.currentTarget, K = (Q) => {
1292
+ const Z = g.getBoundingClientRect(), ge = Math.max(0, Math.min(Z.width, Q.clientX - Z.left)), be = Math.max(0, Math.min(Z.height, Q.clientY - Z.top)), pe = Math.round(ge / Z.width * 100), Me = 100 - Math.round(be / Z.height * 100);
1293
+ O(A.h, pe, Me);
1294
+ };
1295
+ K(r);
1296
+ const C = () => {
1297
+ document.removeEventListener("pointermove", K), document.removeEventListener("pointerup", C);
1298
+ };
1299
+ document.addEventListener("pointermove", K), document.addEventListener("pointerup", C);
1300
+ }, ie = `hsl(${A.h}, 100%, 50%)`;
1301
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
1302
+ /* @__PURE__ */ jsx("div", { className: "nice-color-picker__popup-header", children: /* @__PURE__ */ jsx(
1303
+ "input",
1304
+ {
1305
+ type: "text",
1306
+ className: "nice-input__native nice-color-picker__popup-hex",
1307
+ value: f,
1308
+ disabled: i,
1309
+ onChange: (r) => D?.(r.target.value),
1310
+ maxLength: R ? 9 : 7,
1311
+ "aria-label": M("colorPicker.hexValue", "Hex value")
1312
+ }
1313
+ ) }),
1314
+ /* @__PURE__ */ jsx(
1315
+ "input",
1316
+ {
1317
+ type: "range",
1318
+ min: 0,
1319
+ max: 360,
1320
+ value: A.h,
1321
+ disabled: i,
1322
+ onChange: (r) => O(Number(r.target.value), A.s, A.v),
1323
+ className: "nice-color-picker__hue-slider",
1324
+ "aria-label": M("colorPicker.hue", "Hue")
1325
+ }
1326
+ ),
1327
+ /* @__PURE__ */ jsx(
1328
+ "div",
1329
+ {
1330
+ className: "nice-color-picker__sv",
1331
+ style: {
1332
+ background: `linear-gradient(to top, #000, transparent), linear-gradient(to right, #fff, ${ie})`
1333
+ },
1334
+ onPointerDown: re,
1335
+ role: "application",
1336
+ "aria-label": M("colorPicker.svPalette", "Saturation/value palette"),
1337
+ children: /* @__PURE__ */ jsx(
1338
+ "span",
1339
+ {
1340
+ className: "nice-color-picker__sv-marker",
1341
+ style: { left: `${A.s}%`, top: `${100 - A.v}%` }
1342
+ }
1343
+ )
1344
+ }
1345
+ ),
1346
+ /* @__PURE__ */ jsxs("div", { className: "nice-color-picker__sliders", children: [
1347
+ /* @__PURE__ */ jsx("div", { className: "nice-color-picker__slider-col", children: ["h", "s", "l"].map((r) => {
1348
+ const g = r === "h" ? 360 : 100, K = S[r], C = (Q) => ve(
1349
+ r === "h" ? Q : S.h,
1350
+ r === "s" ? Q : S.s,
1351
+ r === "l" ? Q : S.l
1352
+ );
1353
+ return /* @__PURE__ */ jsxs("div", { className: "nice-color-picker__slider-row", children: [
1354
+ /* @__PURE__ */ jsx("label", { className: "nice-color-picker__slider-label", children: r.toUpperCase() }),
1355
+ /* @__PURE__ */ jsx(
1356
+ "input",
1357
+ {
1358
+ type: "range",
1359
+ min: 0,
1360
+ max: g,
1361
+ value: K,
1362
+ disabled: i,
1363
+ onChange: (Q) => C(Number(Q.target.value))
1364
+ }
1365
+ ),
1366
+ /* @__PURE__ */ jsx(
1367
+ "input",
1368
+ {
1369
+ type: "number",
1370
+ min: 0,
1371
+ max: g,
1372
+ value: K,
1373
+ disabled: i,
1374
+ onChange: (Q) => C(Number(Q.target.value) || 0),
1375
+ className: "nice-input__native nice-color-picker__slider-num"
1376
+ }
1377
+ )
1378
+ ] }, r);
1379
+ }) }),
1380
+ /* @__PURE__ */ jsx("div", { className: "nice-color-picker__slider-col", children: ["r", "g", "b"].map((r) => {
1381
+ const g = _[r], K = (C) => se(
1382
+ r === "r" ? C : _.r,
1383
+ r === "g" ? C : _.g,
1384
+ r === "b" ? C : _.b
1385
+ );
1386
+ return /* @__PURE__ */ jsxs("div", { className: "nice-color-picker__slider-row", children: [
1387
+ /* @__PURE__ */ jsx("label", { className: "nice-color-picker__slider-label", children: r.toUpperCase() }),
1388
+ /* @__PURE__ */ jsx(
1389
+ "input",
1390
+ {
1391
+ type: "range",
1392
+ min: 0,
1393
+ max: 255,
1394
+ value: g,
1395
+ disabled: i,
1396
+ onChange: (C) => K(Number(C.target.value))
1397
+ }
1398
+ ),
1399
+ /* @__PURE__ */ jsx(
1400
+ "input",
1401
+ {
1402
+ type: "number",
1403
+ min: 0,
1404
+ max: 255,
1405
+ value: g,
1406
+ disabled: i,
1407
+ onChange: (C) => K(Number(C.target.value) || 0),
1408
+ className: "nice-input__native nice-color-picker__slider-num"
1409
+ }
1410
+ )
1411
+ ] }, r);
1412
+ }) })
1413
+ ] }),
1414
+ R && /* @__PURE__ */ jsxs("div", { className: "nice-color-picker__alpha-row", children: [
1415
+ /* @__PURE__ */ jsx("label", { className: "nice-color-picker__slider-label", children: "A" }),
1416
+ /* @__PURE__ */ jsx(
1417
+ "input",
1418
+ {
1419
+ type: "range",
1420
+ min: 0,
1421
+ max: 100,
1422
+ value: Math.round(q * 100),
1423
+ disabled: i,
1424
+ onChange: (r) => Y(Number(r.target.value) / 100),
1425
+ className: "nice-color-picker__alpha-slider",
1426
+ style: {
1427
+ background: `linear-gradient(to right, transparent, rgb(${_.r},${_.g},${_.b}))`
1428
+ },
1429
+ "aria-label": M("colorPicker.alpha", "Alpha")
1430
+ }
1431
+ ),
1432
+ /* @__PURE__ */ jsx(
1433
+ "input",
1434
+ {
1435
+ type: "number",
1436
+ min: 0,
1437
+ max: 100,
1438
+ value: Math.round(q * 100),
1439
+ disabled: i,
1440
+ onChange: (r) => Y((Number(r.target.value) || 0) / 100),
1441
+ className: "nice-input__native nice-color-picker__slider-num"
1442
+ }
1443
+ )
1444
+ ] }),
1445
+ z.length > 0 && /* @__PURE__ */ jsx("div", { className: "nice-color-picker__popup-presets", children: z.map((r) => /* @__PURE__ */ jsx(
1446
+ "div",
1447
+ {
1448
+ className: `nice-color-picker__preset ${f === r ? "nice-color-picker__preset--active" : ""}`,
1449
+ style: { background: r },
1450
+ onClick: () => {
1451
+ D?.(r), j(false);
1452
+ },
1453
+ role: "button",
1454
+ tabIndex: 0,
1455
+ "aria-label": r,
1456
+ onKeyDown: (g) => {
1457
+ (g.key === "Enter" || g.key === " ") && (g.preventDefault(), D?.(r), j(false));
1458
+ }
1459
+ },
1460
+ r
1461
+ )) })
1462
+ ] });
1463
+ })()
1464
+ }
1465
+ ),
1466
+ document.body
1467
+ )
1468
+ ] }) }),
1469
+ $ !== "right" && t && /* @__PURE__ */ jsx("div", { id: `${U}-error`, className: "nice-field__error", role: "alert", children: t }),
1470
+ $ !== "right" && !t && h && /* @__PURE__ */ jsx("div", { id: `${U}-helper`, className: "nice-field__helper", children: h })
1471
+ ]
1472
+ }
1473
+ );
1474
+ }
1475
+ );
1476
+ an.displayName = "NiceColorPicker";
1477
+ const on = forwardRef(
1478
+ ({
1479
+ children: l,
1480
+ variant: h = "primary",
1481
+ size: t = "md",
1482
+ type: d = "button",
1483
+ disabled: i,
1484
+ loading: n,
1485
+ fullWidth: a,
1486
+ onClick: y,
1487
+ leftIcon: u,
1488
+ rightIcon: o,
1489
+ error: f,
1490
+ errorPlacement: D = "bottom",
1491
+ className: z,
1492
+ style: m,
1493
+ id: w,
1494
+ accessMode: R,
1495
+ displayStyle: p,
1496
+ ...J
1497
+ }, E) => {
1498
+ const $ = rl(R, w);
1499
+ if ($ === "hidden")
1500
+ return null;
1501
+ ($ === "disabled" || $ === "readOnly") && (i = true);
1502
+ const L = xs("button", p), b = ks("button", p), F = h !== "primary" ? (({ background: M, color: U, ...V }) => V)(
1503
+ L
1504
+ ) : L, T = /* @__PURE__ */ jsxs(
1505
+ "button",
1506
+ {
1507
+ ref: E,
1508
+ type: d,
1509
+ id: w,
1510
+ className: `nice-btn nice-btn--${h} nice-btn--${t} nice-btn--ds-${b} ${a ? "nice-btn--full-width" : ""} ${n ? "nice-btn--loading" : ""} ${f && !D ? "nice-btn--has-error" : ""} ${z || ""}`,
1511
+ style: { ...F, ...m },
1512
+ disabled: i || n,
1513
+ "aria-busy": n || void 0,
1514
+ "aria-disabled": i || n || void 0,
1515
+ onClick: y,
1516
+ ...J,
1517
+ children: [
1518
+ n && /* @__PURE__ */ jsx(
1519
+ "svg",
1520
+ {
1521
+ className: "nice-btn__spinner",
1522
+ viewBox: "0 0 24 24",
1523
+ fill: "none",
1524
+ stroke: "currentColor",
1525
+ strokeWidth: "3",
1526
+ "aria-hidden": "true",
1527
+ children: /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10", strokeDasharray: "31.4 31.4", strokeLinecap: "round" })
1528
+ }
1529
+ ),
1530
+ !n && u && /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: u }),
1531
+ !n && /* @__PURE__ */ jsx("span", { children: l }),
1532
+ n && /* @__PURE__ */ jsx("span", { style: { visibility: "hidden" }, "aria-hidden": "true", children: l }),
1533
+ !n && o && /* @__PURE__ */ jsx("span", { "aria-hidden": "true", children: o })
1534
+ ]
1535
+ }
1536
+ );
1537
+ if (!f)
1538
+ return T;
1539
+ const x = /* @__PURE__ */ jsx("div", { className: "nice-field__error", role: "alert", children: f });
1540
+ return D === "right" ? /* @__PURE__ */ jsxs(
1541
+ "span",
1542
+ {
1543
+ className: `nice-btn-field nice-btn-field--right nice-field--${t}`,
1544
+ style: {
1545
+ display: "inline-flex",
1546
+ flexDirection: "row",
1547
+ alignItems: "center",
1548
+ gap: "8px",
1549
+ width: "fit-content"
1550
+ },
1551
+ children: [
1552
+ T,
1553
+ x
1554
+ ]
1555
+ }
1556
+ ) : /* @__PURE__ */ jsxs(
1557
+ "span",
1558
+ {
1559
+ className: `nice-btn-field nice-btn-field--bottom nice-field--${t}`,
1560
+ style: {
1561
+ display: "inline-flex",
1562
+ flexDirection: "column",
1563
+ alignItems: "flex-start",
1564
+ gap: "4px",
1565
+ width: "fit-content"
1566
+ },
1567
+ children: [
1568
+ T,
1569
+ x
1570
+ ]
1571
+ }
1572
+ );
1573
+ }
1574
+ );
1575
+ on.displayName = "NiceButton";
1576
+ const fn = ({
1577
+ tabs: l,
1578
+ activeTab: h,
1579
+ onChange: t,
1580
+ variant: d = "default",
1581
+ vertical: i,
1582
+ size: n = "md",
1583
+ className: a,
1584
+ style: y,
1585
+ displayStyle: u
1586
+ }) => {
1587
+ const o = xs("tab", u), f = ks("tab", u), [D, z] = useState(h || l[0]?.id), m = h ?? D, w = useCallback(
1588
+ (p) => {
1589
+ z(p), t?.(p);
1590
+ },
1591
+ [t]
1592
+ ), R = l.find((p) => p.id === m)?.content;
1593
+ return /* @__PURE__ */ jsxs(
1594
+ "div",
1595
+ {
1596
+ className: `nice-tabs nice-tabs--${n} nice-tabs--ds-${f} ${a || ""}`,
1597
+ style: { ...o, ...y, ...i ? { display: "flex", gap: 16 } : {} },
1598
+ children: [
1599
+ /* @__PURE__ */ jsx(
1600
+ "div",
1601
+ {
1602
+ className: `nice-tabs__list ${d !== "default" ? `nice-tabs__list--${d}` : ""} ${i ? "nice-tabs__list--vertical" : ""}`,
1603
+ role: "tablist",
1604
+ children: l.map((p) => /* @__PURE__ */ jsxs(
1605
+ "button",
1606
+ {
1607
+ type: "button",
1608
+ role: "tab",
1609
+ "aria-selected": m === p.id,
1610
+ className: `nice-tabs__tab ${m === p.id ? "nice-tabs__tab--active" : ""} ${p.disabled ? "nice-tabs__tab--disabled" : ""}`,
1611
+ disabled: p.disabled,
1612
+ onClick: () => w(p.id),
1613
+ children: [
1614
+ p.icon,
1615
+ /* @__PURE__ */ jsx("span", { children: p.label }),
1616
+ p.badge !== void 0 && /* @__PURE__ */ jsx("span", { className: "nice-tabs__badge", children: p.badge })
1617
+ ]
1618
+ },
1619
+ p.id
1620
+ ))
1621
+ }
1622
+ ),
1623
+ R && /* @__PURE__ */ jsx("div", { className: "nice-tabs__panel", role: "tabpanel", children: R })
1624
+ ]
1625
+ }
1626
+ );
1627
+ };
1628
+
1629
+ export { Pe as N, an as a, Qe as b, Ze as c, Je as d, Oe as e, fn as f, on as g };
1630
+ //# sourceMappingURL=NiceTabs-DzLHzwuA.js.map