@number10/jsx-components 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (256) hide show
  1. package/LICENSE +667 -0
  2. package/README.md +43 -0
  3. package/dist/Accordion.cjs +1 -0
  4. package/dist/Accordion.d.ts +43 -0
  5. package/dist/Accordion.d.ts.map +1 -0
  6. package/dist/Accordion.js +71 -0
  7. package/dist/Accordion.test.d.ts +2 -0
  8. package/dist/Accordion.test.d.ts.map +1 -0
  9. package/dist/ActivityIndicator.cjs +1 -0
  10. package/dist/ActivityIndicator.d.ts +21 -0
  11. package/dist/ActivityIndicator.d.ts.map +1 -0
  12. package/dist/ActivityIndicator.js +133 -0
  13. package/dist/AlertDialog.cjs +1 -0
  14. package/dist/AlertDialog.d.ts +53 -0
  15. package/dist/AlertDialog.d.ts.map +1 -0
  16. package/dist/AlertDialog.js +76 -0
  17. package/dist/Badge.cjs +1 -0
  18. package/dist/Badge.d.ts +96 -0
  19. package/dist/Badge.d.ts.map +1 -0
  20. package/dist/Badge.js +238 -0
  21. package/dist/Badge.test.d.ts +2 -0
  22. package/dist/Badge.test.d.ts.map +1 -0
  23. package/dist/BottomSheet.cjs +1 -0
  24. package/dist/BottomSheet.d.ts +72 -0
  25. package/dist/BottomSheet.d.ts.map +1 -0
  26. package/dist/BottomSheet.js +132 -0
  27. package/dist/Button.cjs +1 -0
  28. package/dist/Button.d.ts +61 -0
  29. package/dist/Button.d.ts.map +1 -0
  30. package/dist/Button.js +251 -0
  31. package/dist/Checkbox.cjs +1 -0
  32. package/dist/Checkbox.d.ts +40 -0
  33. package/dist/Checkbox.d.ts.map +1 -0
  34. package/dist/Checkbox.js +84 -0
  35. package/dist/Checkbox.test.d.ts +2 -0
  36. package/dist/Checkbox.test.d.ts.map +1 -0
  37. package/dist/ColorPicker.cjs +1 -0
  38. package/dist/ColorPicker.d.ts +48 -0
  39. package/dist/ColorPicker.d.ts.map +1 -0
  40. package/dist/ColorPicker.js +256 -0
  41. package/dist/DebugPanel.cjs +1 -0
  42. package/dist/DebugPanel.d.ts +63 -0
  43. package/dist/DebugPanel.d.ts.map +1 -0
  44. package/dist/DebugPanel.js +116 -0
  45. package/dist/Dialog.cjs +1 -0
  46. package/dist/Dialog.d.ts +59 -0
  47. package/dist/Dialog.d.ts.map +1 -0
  48. package/dist/Dialog.js +142 -0
  49. package/dist/Divider.cjs +1 -0
  50. package/dist/Divider.d.ts +19 -0
  51. package/dist/Divider.d.ts.map +1 -0
  52. package/dist/Divider.js +15 -0
  53. package/dist/Divider.test.d.ts +2 -0
  54. package/dist/Divider.test.d.ts.map +1 -0
  55. package/dist/Dropdown.cjs +1 -0
  56. package/dist/Dropdown.d.ts +35 -0
  57. package/dist/Dropdown.d.ts.map +1 -0
  58. package/dist/Dropdown.js +222 -0
  59. package/dist/Icon.cjs +1 -0
  60. package/dist/Icon.d.ts +71 -0
  61. package/dist/Icon.d.ts.map +1 -0
  62. package/dist/Icon.js +57 -0
  63. package/dist/Icon.test.d.ts +2 -0
  64. package/dist/Icon.test.d.ts.map +1 -0
  65. package/dist/Image.cjs +1 -0
  66. package/dist/Image.d.ts +10 -0
  67. package/dist/Image.d.ts.map +1 -0
  68. package/dist/Image.js +18 -0
  69. package/dist/Joystick.cjs +1 -0
  70. package/dist/Joystick.d.ts +32 -0
  71. package/dist/Joystick.d.ts.map +1 -0
  72. package/dist/Joystick.js +185 -0
  73. package/dist/ListBox.cjs +1 -0
  74. package/dist/ListBox.d.ts +67 -0
  75. package/dist/ListBox.d.ts.map +1 -0
  76. package/dist/ListBox.js +104 -0
  77. package/dist/ListBox.test.d.ts +2 -0
  78. package/dist/ListBox.test.d.ts.map +1 -0
  79. package/dist/MenuButton.cjs +1 -0
  80. package/dist/MenuButton.d.ts +33 -0
  81. package/dist/MenuButton.d.ts.map +1 -0
  82. package/dist/MenuButton.js +63 -0
  83. package/dist/Modal.cjs +1 -0
  84. package/dist/Modal.d.ts +27 -0
  85. package/dist/Modal.d.ts.map +1 -0
  86. package/dist/Modal.js +174 -0
  87. package/dist/Modal.test.d.ts +2 -0
  88. package/dist/Modal.test.d.ts.map +1 -0
  89. package/dist/NineSlice.cjs +1 -0
  90. package/dist/NineSlice.d.ts +40 -0
  91. package/dist/NineSlice.d.ts.map +1 -0
  92. package/dist/NineSlice.js +314 -0
  93. package/dist/NineSlice.props.test.d.ts +2 -0
  94. package/dist/NineSlice.props.test.d.ts.map +1 -0
  95. package/dist/NineSlice.test.d.ts +2 -0
  96. package/dist/NineSlice.test.d.ts.map +1 -0
  97. package/dist/NineSliceButton.cjs +1 -0
  98. package/dist/NineSliceButton.d.ts +94 -0
  99. package/dist/NineSliceButton.d.ts.map +1 -0
  100. package/dist/NineSliceButton.js +61 -0
  101. package/dist/NineSliceButton.test.d.ts +2 -0
  102. package/dist/NineSliceButton.test.d.ts.map +1 -0
  103. package/dist/NumberInput.cjs +1 -0
  104. package/dist/NumberInput.d.ts +90 -0
  105. package/dist/NumberInput.d.ts.map +1 -0
  106. package/dist/NumberInput.js +222 -0
  107. package/dist/NumberInput.test.d.ts +2 -0
  108. package/dist/NumberInput.test.d.ts.map +1 -0
  109. package/dist/PalettePicker.cjs +1 -0
  110. package/dist/PalettePicker.d.ts +49 -0
  111. package/dist/PalettePicker.d.ts.map +1 -0
  112. package/dist/PalettePicker.js +152 -0
  113. package/dist/PalettePicker.test.d.ts +2 -0
  114. package/dist/PalettePicker.test.d.ts.map +1 -0
  115. package/dist/Popover.cjs +1 -0
  116. package/dist/Popover.d.ts +95 -0
  117. package/dist/Popover.d.ts.map +1 -0
  118. package/dist/Popover.js +267 -0
  119. package/dist/Portal.cjs +1 -0
  120. package/dist/Portal.d.ts +30 -0
  121. package/dist/Portal.d.ts.map +1 -0
  122. package/dist/Portal.js +64 -0
  123. package/dist/Portal.test.d.ts +2 -0
  124. package/dist/Portal.test.d.ts.map +1 -0
  125. package/dist/ProgressBar.cjs +1 -0
  126. package/dist/ProgressBar.d.ts +61 -0
  127. package/dist/ProgressBar.d.ts.map +1 -0
  128. package/dist/ProgressBar.js +80 -0
  129. package/dist/ProgressBar.test.d.ts +2 -0
  130. package/dist/ProgressBar.test.d.ts.map +1 -0
  131. package/dist/ProgressView.cjs +1 -0
  132. package/dist/ProgressView.d.ts +37 -0
  133. package/dist/ProgressView.d.ts.map +1 -0
  134. package/dist/ProgressView.js +71 -0
  135. package/dist/RadioButton.cjs +1 -0
  136. package/dist/RadioButton.d.ts +21 -0
  137. package/dist/RadioButton.d.ts.map +1 -0
  138. package/dist/RadioButton.js +53 -0
  139. package/dist/RadioGroup.cjs +1 -0
  140. package/dist/RadioGroup.d.ts +26 -0
  141. package/dist/RadioGroup.d.ts.map +1 -0
  142. package/dist/RadioGroup.js +32 -0
  143. package/dist/RatingBar.cjs +1 -0
  144. package/dist/RatingBar.d.ts +24 -0
  145. package/dist/RatingBar.d.ts.map +1 -0
  146. package/dist/RatingBar.js +84 -0
  147. package/dist/ScrollSlider.cjs +1 -0
  148. package/dist/ScrollSlider.d.ts +48 -0
  149. package/dist/ScrollSlider.d.ts.map +1 -0
  150. package/dist/ScrollSlider.js +93 -0
  151. package/dist/ScrollView.cjs +1 -0
  152. package/dist/ScrollView.d.ts +121 -0
  153. package/dist/ScrollView.d.ts.map +1 -0
  154. package/dist/ScrollView.js +541 -0
  155. package/dist/ScrollView.test.d.ts +2 -0
  156. package/dist/ScrollView.test.d.ts.map +1 -0
  157. package/dist/SegmentedControl.cjs +1 -0
  158. package/dist/SegmentedControl.d.ts +50 -0
  159. package/dist/SegmentedControl.d.ts.map +1 -0
  160. package/dist/SegmentedControl.js +201 -0
  161. package/dist/SegmentedControl.test.d.ts +2 -0
  162. package/dist/SegmentedControl.test.d.ts.map +1 -0
  163. package/dist/Sidebar.cjs +1 -0
  164. package/dist/Sidebar.d.ts +36 -0
  165. package/dist/Sidebar.d.ts.map +1 -0
  166. package/dist/Sidebar.js +122 -0
  167. package/dist/Slider.cjs +1 -0
  168. package/dist/Slider.d.ts +80 -0
  169. package/dist/Slider.d.ts.map +1 -0
  170. package/dist/Slider.js +233 -0
  171. package/dist/Tabs.cjs +1 -0
  172. package/dist/Tabs.d.ts +23 -0
  173. package/dist/Tabs.d.ts.map +1 -0
  174. package/dist/Tabs.js +101 -0
  175. package/dist/TextInput.cjs +17 -0
  176. package/dist/TextInput.d.ts +82 -0
  177. package/dist/TextInput.d.ts.map +1 -0
  178. package/dist/TextInput.js +441 -0
  179. package/dist/Toast.cjs +1 -0
  180. package/dist/Toast.d.ts +66 -0
  181. package/dist/Toast.d.ts.map +1 -0
  182. package/dist/Toast.js +188 -0
  183. package/dist/Toast.test.d.ts +2 -0
  184. package/dist/Toast.test.d.ts.map +1 -0
  185. package/dist/Toggle.cjs +1 -0
  186. package/dist/Toggle.d.ts +14 -0
  187. package/dist/Toggle.d.ts.map +1 -0
  188. package/dist/Toggle.js +135 -0
  189. package/dist/Toolbar.cjs +1 -0
  190. package/dist/Toolbar.d.ts +129 -0
  191. package/dist/Toolbar.d.ts.map +1 -0
  192. package/dist/Toolbar.js +159 -0
  193. package/dist/Toolbar.test.d.ts +2 -0
  194. package/dist/Toolbar.test.d.ts.map +1 -0
  195. package/dist/TransformOriginView.cjs +1 -0
  196. package/dist/TransformOriginView.d.ts +8 -0
  197. package/dist/TransformOriginView.d.ts.map +1 -0
  198. package/dist/TransformOriginView.js +38 -0
  199. package/dist/WheelPicker.cjs +1 -0
  200. package/dist/WheelPicker.d.ts +58 -0
  201. package/dist/WheelPicker.d.ts.map +1 -0
  202. package/dist/WheelPicker.js +167 -0
  203. package/dist/WrapText.cjs +1 -0
  204. package/dist/WrapText.d.ts +83 -0
  205. package/dist/WrapText.d.ts.map +1 -0
  206. package/dist/WrapText.js +93 -0
  207. package/dist/WrapText.test.d.ts +2 -0
  208. package/dist/WrapText.test.d.ts.map +1 -0
  209. package/dist/contrast-slot-map.d.ts +33 -0
  210. package/dist/contrast-slot-map.d.ts.map +1 -0
  211. package/dist/index.cjs +1 -0
  212. package/dist/index.d.ts +64 -0
  213. package/dist/index.d.ts.map +1 -0
  214. package/dist/index.js +54 -0
  215. package/dist/primitives/Image.cjs +1 -0
  216. package/dist/primitives/Image.d.ts +11 -0
  217. package/dist/primitives/Image.d.ts.map +1 -0
  218. package/dist/primitives/Image.js +7 -0
  219. package/dist/primitives/Sprite.cjs +1 -0
  220. package/dist/primitives/Sprite.d.ts +11 -0
  221. package/dist/primitives/Sprite.d.ts.map +1 -0
  222. package/dist/primitives/Sprite.js +7 -0
  223. package/dist/primitives/Text.cjs +1 -0
  224. package/dist/primitives/Text.d.ts +14 -0
  225. package/dist/primitives/Text.d.ts.map +1 -0
  226. package/dist/primitives/Text.js +15 -0
  227. package/dist/primitives/VectorDrawContent.cjs +1 -0
  228. package/dist/primitives/VectorDrawContent.d.ts +3 -0
  229. package/dist/primitives/VectorDrawContent.d.ts.map +1 -0
  230. package/dist/primitives/VectorDrawContent.js +7 -0
  231. package/dist/primitives/View.cjs +1 -0
  232. package/dist/primitives/View.d.ts +13 -0
  233. package/dist/primitives/View.d.ts.map +1 -0
  234. package/dist/primitives/View.js +7 -0
  235. package/dist/primitives/index.d.ts +13 -0
  236. package/dist/primitives/index.d.ts.map +1 -0
  237. package/dist/primitives/primitives.test.d.ts +2 -0
  238. package/dist/primitives/primitives.test.d.ts.map +1 -0
  239. package/dist/primitives.cjs +1 -0
  240. package/dist/primitives.d.ts +2 -0
  241. package/dist/primitives.js +6 -0
  242. package/dist/theme-defaults.cjs +1 -0
  243. package/dist/theme-defaults.d.ts +12 -0
  244. package/dist/theme-defaults.d.ts.map +1 -0
  245. package/dist/theme-defaults.js +1288 -0
  246. package/dist/theme-defaults.test.d.ts +2 -0
  247. package/dist/theme-defaults.test.d.ts.map +1 -0
  248. package/dist/theme-types.cjs +0 -0
  249. package/dist/theme-types.d.ts +708 -0
  250. package/dist/theme-types.d.ts.map +1 -0
  251. package/dist/theme-types.js +0 -0
  252. package/dist/useOverlayPresence.cjs +1 -0
  253. package/dist/useOverlayPresence.d.ts +24 -0
  254. package/dist/useOverlayPresence.d.ts.map +1 -0
  255. package/dist/useOverlayPresence.js +19 -0
  256. package/package.json +83 -0
package/dist/Toast.js ADDED
@@ -0,0 +1,188 @@
1
+ import { Text as e } from "./primitives/Text.js";
2
+ import { View as t } from "./primitives/View.js";
3
+ import "./primitives.js";
4
+ import { Button as n } from "./Button.js";
5
+ import { Portal as r } from "./Portal.js";
6
+ import { WrapText as i } from "./WrapText.js";
7
+ import { KNOWN_COMPONENTS as a, getGlobalThemeDefaults as o, mergeThemes as s, resolveComponentTheme as c, useEffect as l, useMemo as u, useTheme as d, useViewportSize as f } from "@number10/jsx-core";
8
+ import { jsx as p, jsxs as m } from "@number10/jsx-core/jsx-runtime";
9
+ //#region src/Toast.tsx
10
+ function h(e) {
11
+ let t = e.startsWith("bottom") ? "end" : "start";
12
+ return e.endsWith("left") ? {
13
+ justifyContent: t,
14
+ alignItems: "start"
15
+ } : e.endsWith("right") ? {
16
+ justifyContent: t,
17
+ alignItems: "end"
18
+ } : {
19
+ justifyContent: t,
20
+ alignItems: "center"
21
+ };
22
+ }
23
+ function g(e, t) {
24
+ return e.autoDismiss === !1 ? 0 : e.duration ?? t;
25
+ }
26
+ function _(e) {
27
+ if (typeof e == "number") return e * 2;
28
+ if (!e) return 0;
29
+ let t = e;
30
+ return (t.left ?? 0) + (t.right ?? 0);
31
+ }
32
+ function v(e) {
33
+ return typeof e == "number" ? e : e ? e.horizontal ?? 0 : 0;
34
+ }
35
+ function y(e) {
36
+ if (typeof e.width != "number") return;
37
+ let t = 2 + +!!e.hasPrefix + +!!e.hasClose, n = Math.max(0, t - 1) * e.gap, r = _(e.padding) + e.accentWidth + (e.hasPrefix ? e.prefixWidth : 0) + (e.hasClose ? e.closeButtonSize : 0) + n;
38
+ return Math.max(e.minContentWidth ?? 96, e.width - r);
39
+ }
40
+ function b(e) {
41
+ return Number.isFinite(e) && e > 0;
42
+ }
43
+ function x(r) {
44
+ let { variant: l, title: u, message: f, children: h, prefix: g, suffix: _, action: b, dismissible: x = !0, onDismiss: S, labels: C, theme: w, ...T } = r, E = d(), D = w ? s(E ?? {}, w) : E, { props: O, nestedTheme: k } = c({
45
+ componentName: "Toast",
46
+ globalTheme: o(),
47
+ localTheme: D,
48
+ knownComponents: a
49
+ }), A = l ?? O.variant ?? "info", j = O.variants?.[A] ?? {}, M = T.width ?? O.width ?? 320, N = T.padding ?? O.padding ?? {
50
+ left: 10,
51
+ right: 10,
52
+ top: 9,
53
+ bottom: 9
54
+ }, P = v(T.gap ?? O.gap ?? 10), F = O.accentWidth ?? 4, I = O.prefixWidth ?? 24, L = O.closeButtonSize ?? 22, R = g ?? j.prefix, z = O.titleStyle || j.titleStyle ? {
55
+ ...O.titleStyle ?? {},
56
+ ...j.titleStyle ?? {}
57
+ } : void 0, B = O.messageStyle || j.messageStyle ? {
58
+ ...O.messageStyle ?? {},
59
+ ...j.messageStyle ?? {}
60
+ } : void 0, V = C?.close ?? O.labels?.close ?? "x", H = u !== void 0 || f !== void 0 || h !== void 0, U = x && S !== void 0, W = y({
61
+ width: M,
62
+ padding: N,
63
+ gap: P,
64
+ accentWidth: F,
65
+ hasPrefix: R !== void 0,
66
+ prefixWidth: I,
67
+ hasClose: U,
68
+ closeButtonSize: L
69
+ });
70
+ return /* @__PURE__ */ m(t, {
71
+ ...T,
72
+ direction: "row",
73
+ alignItems: "stretch",
74
+ gap: P,
75
+ width: M,
76
+ minHeight: T.minHeight ?? O.minHeight ?? 58,
77
+ padding: N,
78
+ backgroundColor: T.backgroundColor ?? j.backgroundColor ?? O.backgroundColor,
79
+ backgroundAlpha: T.backgroundAlpha ?? j.backgroundAlpha ?? O.backgroundAlpha,
80
+ borderColor: T.borderColor ?? j.borderColor ?? O.borderColor,
81
+ borderWidth: T.borderWidth ?? j.borderWidth ?? O.borderWidth,
82
+ cornerRadius: T.cornerRadius ?? j.cornerRadius ?? O.cornerRadius,
83
+ theme: k,
84
+ children: [
85
+ /* @__PURE__ */ p(t, {
86
+ width: F,
87
+ backgroundColor: j.accentColor ?? j.borderColor ?? 3718648,
88
+ cornerRadius: 2
89
+ }),
90
+ R && /* @__PURE__ */ p(t, {
91
+ width: I,
92
+ alignItems: "center",
93
+ justifyContent: "center",
94
+ padding: { top: 1 },
95
+ children: R
96
+ }),
97
+ H && /* @__PURE__ */ m(t, {
98
+ ...W === void 0 ? { flex: 1 } : {},
99
+ width: W ?? "fill",
100
+ flexShrink: 1,
101
+ gap: O.contentGap ?? 2,
102
+ justifyContent: "center",
103
+ overflow: "hidden",
104
+ children: [
105
+ u !== void 0 && /* @__PURE__ */ p(e, {
106
+ text: u,
107
+ style: z
108
+ }),
109
+ f !== void 0 && /* @__PURE__ */ p(i, {
110
+ text: f,
111
+ style: B
112
+ }),
113
+ h
114
+ ]
115
+ }),
116
+ b,
117
+ _,
118
+ U && /* @__PURE__ */ p(t, {
119
+ alignItems: "center",
120
+ justifyContent: "center",
121
+ padding: { top: 1 },
122
+ children: /* @__PURE__ */ p(n, {
123
+ variant: "ghost",
124
+ maxWidth: L,
125
+ maxHeight: L,
126
+ cornerRadius: L,
127
+ padding: 0,
128
+ onClick: S,
129
+ children: /* @__PURE__ */ p(e, {
130
+ text: V,
131
+ style: O.closeTextStyle
132
+ })
133
+ })
134
+ })
135
+ ]
136
+ });
137
+ }
138
+ function S(e) {
139
+ let { items: n, position: i, width: m, gap: _, offset: v, duration: y, depth: S, labels: C, onDismiss: w, theme: T, ...E } = e, D = d(), O = T ? s(D ?? {}, T) : D, { props: k, nestedTheme: A } = c({
140
+ componentName: "NotificationStack",
141
+ globalTheme: o(),
142
+ localTheme: O,
143
+ knownComponents: a
144
+ }), j = f(), M = i ?? k.position ?? "top-right", N = y ?? k.duration ?? 4e3, P = _ ?? k.gap ?? 8, F = v ?? k.offset ?? 16, I = m ?? k.width ?? 320, L = u(() => n.map((e) => `${e.id}:${g(e, N)}`).join("|"), [n, N]), R = h(M);
145
+ return l(() => {
146
+ if (!w || n.length === 0) return;
147
+ let e = n.map((e) => {
148
+ let t = g(e, N);
149
+ return b(t) ? setTimeout(() => w(e.id), t) : null;
150
+ }).filter((e) => e !== null);
151
+ return () => {
152
+ e.forEach((e) => clearTimeout(e));
153
+ };
154
+ }, [L, w]), /* @__PURE__ */ p(r, {
155
+ depth: S ?? k.depth ?? 1200,
156
+ blockEvents: !1,
157
+ children: /* @__PURE__ */ p(t, {
158
+ ...E,
159
+ width: j.width,
160
+ height: j.height,
161
+ direction: "column",
162
+ justifyContent: R.justifyContent,
163
+ alignItems: R.alignItems,
164
+ padding: E.padding ?? F,
165
+ theme: A,
166
+ children: /* @__PURE__ */ p(t, {
167
+ direction: "column",
168
+ gap: P,
169
+ width: I,
170
+ children: n.map((e) => /* @__PURE__ */ p(x, {
171
+ ...e.variant === void 0 ? {} : { variant: e.variant },
172
+ ...e.title === void 0 ? {} : { title: e.title },
173
+ ...e.message === void 0 ? {} : { message: e.message },
174
+ ...e.prefix === void 0 ? {} : { prefix: e.prefix },
175
+ ...e.suffix === void 0 ? {} : { suffix: e.suffix },
176
+ ...e.action === void 0 ? {} : { action: e.action },
177
+ ...e.dismissible === void 0 ? {} : { dismissible: e.dismissible },
178
+ ...w ? { onDismiss: () => w(e.id) } : {},
179
+ ...C === void 0 ? {} : { labels: C },
180
+ theme: A,
181
+ children: e.content
182
+ }, e.id))
183
+ })
184
+ })
185
+ });
186
+ }
187
+ //#endregion
188
+ export { S as NotificationStack, x as Toast, g as getToastAutoDismissDuration, y as getToastContentWidth, h as resolveNotificationStackAlignment };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Toast.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toast.test.d.ts","sourceRoot":"","sources":["../src/Toast.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ const e=require(`./primitives/Text.cjs`),t=require(`./primitives/VectorDrawContent.cjs`),n=require(`./primitives/View.cjs`);require(`./primitives.cjs`);let r=require(`@number10/jsx-core`),i=require(`@number10/jsx-core/jsx-runtime`);function a(e,t,n){let i=(0,r.numberToRgb)(e),a=(0,r.numberToRgb)(t);return(0,r.rgbToNumber)(Math.round(i.r+(a.r-i.r)*n),Math.round(i.g+(a.g-i.g)*n),Math.round(i.b+(a.b-i.b)*n))}function o(o){let s=(0,r.useTheme)(),c=o.theme?(0,r.mergeThemes)(s??{},o.theme):s,{props:l,nestedTheme:u}=(0,r.resolveComponentTheme)({componentName:`Toggle`,globalTheme:(0,r.getGlobalThemeDefaults)(),localTheme:c,knownComponents:r.KNOWN_COMPONENTS}),d=l.width??50,f=l.height??28,p=l.thumbSize??24,m=l.trackColorOff??10066329,h=l.trackColorOn??5025616,g=l.trackBorderColorOff??7829367,_=l.trackBorderColorOn??h,v=l.trackBorderWidth??1,y=l.thumbColor??16777215,b=l.thumbBorderColor??13751771,x=l.thumbBorderWidth??1,S=l.disabledColor??6710886,C=l.disabledAlpha??.5,w=l.padding??2,T=l.duration??200,E=l.gap??8,D=o.labelPosition??l.labelPosition??`right`,O=p/2,k=f/2,A=w+O,j=d-w-O,M=o.checked??!1,[N,P]=(0,r.useState)(M),F=(0,r.useRef)(M),[I,L]=(0,r.useState)(!1),[R,z]=(0,r.useState)(M?j:A),B=(0,r.useRef)(M?j:A),[V,H]=(0,r.useState)(+!!M),U=(0,r.useRef)(+!!M),W=(0,r.useRef)(null),G=(0,r.useSurface)()?.scheduler??null,K=(0,r.useRef)(G);G&&K.current!==G&&(K.current=G),(0,r.useEffect)(()=>{F.current=N},[N]),(0,r.useEffect)(()=>{B.current=R},[R]),(0,r.useEffect)(()=>{U.current=V},[V]),(0,r.useEffect)(()=>{o.checked!==void 0&&o.checked!==F.current&&q(o.checked)},[o.checked,A,j,T]),(0,r.useEffect)(()=>{I||(z(N?j:A),H(+!!N))},[N,A,j,I]),(0,r.useEffect)(()=>()=>{W.current?.stop(),W.current=null},[]);let q=e=>{let t=K.current,n=U.current,i=B.current,a=+!!e,o=e?j:A;if(W.current?.stop(),W.current=null,L(!0),P(e),!t){H(a),z(o),L(!1);return}W.current=(0,r.createTween)({progress:n,x:i},{to:{progress:a,x:o},duration:T,ease:r.Easing.cubicOut,onUpdate:e=>{H(e.progress),z(e.x)},onComplete:()=>{H(a),z(o),L(!1),W.current=null}},t)},J=()=>{if(o.disabled||I)return;let e=!F.current;q(e),o.onChange?.(e)},Y=o.disabled?a(S,h,V):a(m,h,V),X=a(g,_,V),Z=(0,i.jsxs)(n.View,{direction:`stack`,width:d,height:f,enableGestures:!o.disabled,onTouch:J,alpha:o.disabled?C:1,children:[(0,i.jsx)(t.VectorDrawContent,{width:d,height:f,dependencies:[d,f,Y,X,v],onDraw:e=>{let t=v/2;e.clear(),e.fillStyle(Y,1).fillRoundedRect(0,0,d,f,k),v>0&&e.lineStyle(v,X,1).strokeRoundedRect(t,t,d-v,f-v,Math.max(0,k-t))}}),(0,i.jsx)(t.VectorDrawContent,{width:p,height:p,x:R,y:f/2,dependencies:[p,y,b,x],onDraw:e=>{e.clear().fillStyle(y,1).fillCircle(0,0,O),x>0&&e.lineStyle(x,b,1).strokeCircle(0,0,Math.max(0,O-x/2))}})]}),Q=o.label&&D!==`none`?(0,i.jsx)(e.Text,{text:o.label,style:l.labelStyle,alpha:o.disabled?C:1}):null;return!o.label||D===`none`?(0,i.jsxs)(n.View,{direction:`row`,alignItems:`center`,gap:E,theme:u,children:[o.prefix,Z,o.suffix]}):(0,i.jsxs)(n.View,{direction:`row`,alignItems:`center`,gap:E,theme:u,children:[D===`left`&&Q,o.prefix,Z,o.suffix,D===`right`&&Q]})}exports.Toggle=o;
@@ -0,0 +1,14 @@
1
+ import { VNodeLike } from '@number10/jsx-core';
2
+ import { PortableComponentPartialTheme } from './theme-types';
3
+ export interface ToggleProps {
4
+ checked?: boolean;
5
+ onChange?: (checked: boolean) => void;
6
+ label?: string;
7
+ labelPosition?: 'left' | 'right' | 'none';
8
+ disabled?: boolean;
9
+ prefix?: VNodeLike;
10
+ suffix?: VNodeLike;
11
+ theme?: PortableComponentPartialTheme<'Toggle'>;
12
+ }
13
+ export declare function Toggle(props: ToggleProps): VNodeLike;
14
+ //# sourceMappingURL=Toggle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toggle.d.ts","sourceRoot":"","sources":["../src/Toggle.tsx"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C;;;;;;;GAOG;AAEH,OAAO,EAiBL,KAAK,SAAS,EACf,MAAM,oBAAoB,CAAA;AAE3B,OAAO,KAAK,EAAE,6BAA6B,EAAe,MAAM,eAAe,CAAA;AAa/E,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;IACrC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAA;IACzC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,MAAM,CAAC,EAAE,SAAS,CAAA;IAClB,KAAK,CAAC,EAAE,6BAA6B,CAAC,QAAQ,CAAC,CAAA;CAChD;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,CA2NpD"}
package/dist/Toggle.js ADDED
@@ -0,0 +1,135 @@
1
+ import { Text as e } from "./primitives/Text.js";
2
+ import { VectorDrawContent as t } from "./primitives/VectorDrawContent.js";
3
+ import { View as n } from "./primitives/View.js";
4
+ import "./primitives.js";
5
+ import { Easing as r, KNOWN_COMPONENTS as i, createTween as ee, getGlobalThemeDefaults as a, mergeThemes as o, numberToRgb as s, resolveComponentTheme as te, rgbToNumber as c, useEffect as l, useRef as u, useState as d, useSurface as ne, useTheme as re } from "@number10/jsx-core";
6
+ import { jsx as f, jsxs as p } from "@number10/jsx-core/jsx-runtime";
7
+ //#region src/Toggle.tsx
8
+ function m(e, t, n) {
9
+ let r = s(e), i = s(t);
10
+ return c(Math.round(r.r + (i.r - r.r) * n), Math.round(r.g + (i.g - r.g) * n), Math.round(r.b + (i.b - r.b) * n));
11
+ }
12
+ function h(s) {
13
+ let c = re(), h = s.theme ? o(c ?? {}, s.theme) : c, { props: g, nestedTheme: _ } = te({
14
+ componentName: "Toggle",
15
+ globalTheme: a(),
16
+ localTheme: h,
17
+ knownComponents: i
18
+ }), v = g.width ?? 50, y = g.height ?? 28, b = g.thumbSize ?? 24, ie = g.trackColorOff ?? 10066329, x = g.trackColorOn ?? 5025616, ae = g.trackBorderColorOff ?? 7829367, oe = g.trackBorderColorOn ?? x, S = g.trackBorderWidth ?? 1, C = g.thumbColor ?? 16777215, w = g.thumbBorderColor ?? 13751771, T = g.thumbBorderWidth ?? 1, se = g.disabledColor ?? 6710886, E = g.disabledAlpha ?? .5, D = g.padding ?? 2, O = g.duration ?? 200, k = g.gap ?? 8, A = s.labelPosition ?? g.labelPosition ?? "right", j = b / 2, M = y / 2, N = D + j, P = v - D - j, F = s.checked ?? !1, [I, ce] = d(F), L = u(F), [R, z] = d(!1), [B, V] = d(F ? P : N), H = u(F ? P : N), [U, W] = d(+!!F), G = u(+!!F), K = u(null), q = ne()?.scheduler ?? null, J = u(q);
19
+ q && J.current !== q && (J.current = q), l(() => {
20
+ L.current = I;
21
+ }, [I]), l(() => {
22
+ H.current = B;
23
+ }, [B]), l(() => {
24
+ G.current = U;
25
+ }, [U]), l(() => {
26
+ s.checked !== void 0 && s.checked !== L.current && Y(s.checked);
27
+ }, [
28
+ s.checked,
29
+ N,
30
+ P,
31
+ O
32
+ ]), l(() => {
33
+ R || (V(I ? P : N), W(+!!I));
34
+ }, [
35
+ I,
36
+ N,
37
+ P,
38
+ R
39
+ ]), l(() => () => {
40
+ K.current?.stop(), K.current = null;
41
+ }, []);
42
+ let Y = (e) => {
43
+ let t = J.current, n = G.current, i = H.current, a = +!!e, o = e ? P : N;
44
+ if (K.current?.stop(), K.current = null, z(!0), ce(e), !t) {
45
+ W(a), V(o), z(!1);
46
+ return;
47
+ }
48
+ K.current = ee({
49
+ progress: n,
50
+ x: i
51
+ }, {
52
+ to: {
53
+ progress: a,
54
+ x: o
55
+ },
56
+ duration: O,
57
+ ease: r.cubicOut,
58
+ onUpdate: (e) => {
59
+ W(e.progress), V(e.x);
60
+ },
61
+ onComplete: () => {
62
+ W(a), V(o), z(!1), K.current = null;
63
+ }
64
+ }, t);
65
+ }, le = () => {
66
+ if (s.disabled || R) return;
67
+ let e = !L.current;
68
+ Y(e), s.onChange?.(e);
69
+ }, X = s.disabled ? m(se, x, U) : m(ie, x, U), Z = m(ae, oe, U), Q = /* @__PURE__ */ p(n, {
70
+ direction: "stack",
71
+ width: v,
72
+ height: y,
73
+ enableGestures: !s.disabled,
74
+ onTouch: le,
75
+ alpha: s.disabled ? E : 1,
76
+ children: [/* @__PURE__ */ f(t, {
77
+ width: v,
78
+ height: y,
79
+ dependencies: [
80
+ v,
81
+ y,
82
+ X,
83
+ Z,
84
+ S
85
+ ],
86
+ onDraw: (e) => {
87
+ let t = S / 2;
88
+ e.clear(), e.fillStyle(X, 1).fillRoundedRect(0, 0, v, y, M), S > 0 && e.lineStyle(S, Z, 1).strokeRoundedRect(t, t, v - S, y - S, Math.max(0, M - t));
89
+ }
90
+ }), /* @__PURE__ */ f(t, {
91
+ width: b,
92
+ height: b,
93
+ x: B,
94
+ y: y / 2,
95
+ dependencies: [
96
+ b,
97
+ C,
98
+ w,
99
+ T
100
+ ],
101
+ onDraw: (e) => {
102
+ e.clear().fillStyle(C, 1).fillCircle(0, 0, j), T > 0 && e.lineStyle(T, w, 1).strokeCircle(0, 0, Math.max(0, j - T / 2));
103
+ }
104
+ })]
105
+ }), $ = s.label && A !== "none" ? /* @__PURE__ */ f(e, {
106
+ text: s.label,
107
+ style: g.labelStyle,
108
+ alpha: s.disabled ? E : 1
109
+ }) : null;
110
+ return !s.label || A === "none" ? /* @__PURE__ */ p(n, {
111
+ direction: "row",
112
+ alignItems: "center",
113
+ gap: k,
114
+ theme: _,
115
+ children: [
116
+ s.prefix,
117
+ Q,
118
+ s.suffix
119
+ ]
120
+ }) : /* @__PURE__ */ p(n, {
121
+ direction: "row",
122
+ alignItems: "center",
123
+ gap: k,
124
+ theme: _,
125
+ children: [
126
+ A === "left" && $,
127
+ s.prefix,
128
+ Q,
129
+ s.suffix,
130
+ A === "right" && $
131
+ ]
132
+ });
133
+ }
134
+ //#endregion
135
+ export { h as Toggle };
@@ -0,0 +1 @@
1
+ const e=require(`./primitives/Text.cjs`),t=require(`./primitives/View.cjs`);require(`./primitives.cjs`);const n=require(`./Button.cjs`),r=require(`./Divider.cjs`),i=require(`./MenuButton.cjs`);let a=require(`@number10/jsx-core`),o=require(`@number10/jsx-core/jsx-runtime`);function s(e){return e.type===`separator`}function c(e){return e.type===`toggle`}function l(e){return e.type===`menu`}function u(e,t){return s(e)?e.id??`separator-${t}`:e.id}function d(e,t){if(t)return e.some(e=>!s(e)&&e.id===t)?t:void 0}function f(e){return e.find(e=>c(e)&&!!e.defaultPressed)?.id}function p(...e){let t=Object.assign({},...e.filter(Boolean));return Object.keys(t).length>0?t:void 0}function m(e){if(Array.isArray(e))return e.map(e=>m(e));if(!e||typeof e!=`object`||!(`type`in e))return e;let t=e,n={type:t.type};return t.props!==void 0&&(n.props={...t.props}),t.children!==void 0&&(n.children=t.children.map(e=>m(e))),t.__key!==void 0&&(n.__key=t.__key),t.__addConfig!==void 0&&(n.__addConfig={...t.__addConfig}),t.__memo!==void 0&&(n.__memo=t.__memo),t.__theme!==void 0&&(n.__theme=t.__theme),t.__staticChildren!==void 0&&(n.__staticChildren=t.__staticChildren),n}function h(h){let{items:g,activeId:_,defaultActiveId:v,onSelect:y,onToggle:b,orientation:x,density:S,showLabels:C,disabled:w=!1,labels:T,theme:E,alpha:D}=h,O=(0,a.useTheme)(),k=E?(0,a.mergeThemes)(O??{},E):O,{props:A,nestedTheme:j}=(0,a.resolveComponentTheme)({componentName:`Toolbar`,globalTheme:(0,a.getGlobalThemeDefaults)(),localTheme:k,knownComponents:a.KNOWN_COMPONENTS}),M=_!==void 0,[N,P]=(0,a.useState)(d(g,_??v)??f(g)),F=M?d(g,_):d(g,N);(0,a.useEffect)(()=>{!M&&N!==F&&P(F)},[M,N,F]);let I={...A.labels??{},...T??{}},L=x??A.orientation??`horizontal`,R=S??A.density??`normal`,z=A[R===`compact`?`compactItemWidth`:`itemWidth`]??A.itemWidth??42,B=A[R===`compact`?`compactItemHeight`:`itemHeight`]??A.itemHeight??36,V=(R===`compact`?A.compactButtonSize:void 0)??A.buttonSize??`small`,H=(R===`compact`?A.compactIconSize:void 0)??A.iconSize??18,U=C??R!==`compact`,W=U?void 0:z,G=w?A.disabledAlpha??.55:D,K=A.textStyle??{color:`#e2e8f0`,fontSize:`13px`},q=p(K,A.activeTextStyle),J=p(K,A.disabledTextStyle),Y=A.menuIndicatorStyle??{color:`#94a3b8`,fontSize:`10px`},X=L===`horizontal`?`row`:`column`,Z=L===`horizontal`?`vertical`:`horizontal`,Q=A.separatorLength??(L===`horizontal`?B:z),ee=e=>{if(!(w||e.disabled)){if(c(e)){let t=!((e.pressed??F===e.id)&&e.allowDeselect);!M&&e.pressed===void 0&&P(t?e.id:void 0),e.onToggle?.(t,e.id),b?.(e.id,t,e)}e.onSelect?.(e.id),y?.(e.id,e)}},$=(t,n,r)=>{if(t.children)return m(t.children);let i=t.showLabel??U,a=r?J:n?q:K;return(0,o.jsxs)(o.Fragment,{children:[t.icon?m(t.icon):null,i&&t.label?(0,o.jsx)(e.Text,{text:t.label,...a?{style:a}:{}}):null,l(t)?(0,o.jsx)(e.Text,{text:I.menuIndicator??`v`,...Y?{style:Y}:{}}):null]})},te=(e,d)=>{let f=u(e,d);if(s(e))return(0,o.jsx)(t.View,{alignItems:`center`,justifyContent:`center`,theme:j,children:(0,o.jsx)(r.Divider,{orientation:Z,length:e.length??Q,thickness:e.thickness??A.separatorThickness??1,color:A.separatorColor??4674921})},f);let p=w||!!e.disabled,m=c(e)?e.pressed??F===e.id:F===e.id,h=e.buttonVariant??(m?A.activeButtonVariant??`primary`:l(e)?A.menuButtonVariant??A.buttonVariant??`secondary`:A.buttonVariant??`secondary`),g=p?J:m?q:K,_=(0,a.mergeThemes)(j,{Button:{...g?{textStyle:g}:{},...H===void 0?{}:{iconSize:H}}});return l(e)?(0,o.jsx)(i.MenuButton,{items:e.items??[],onSelect:()=>{e.onSelect?.(e.id),y?.(e.id,e)},placement:L===`horizontal`?`bottom-start`:`right-start`,disabled:p,theme:_,trigger:({isOpen:r})=>(0,o.jsx)(n.Button,{variant:h,size:e.buttonSize??V,disabled:p,width:W,height:B,theme:_,children:(0,o.jsx)(t.View,{direction:`row`,alignItems:`center`,justifyContent:`center`,gap:A.gap??6,children:$(e,r,p)})})},f):(0,o.jsx)(n.Button,{width:W,height:B,variant:h,size:e.buttonSize??V,disabled:p,onClick:()=>ee(e),theme:_,children:(0,o.jsx)(t.View,{direction:`row`,alignItems:`center`,justifyContent:`center`,gap:A.gap??6,children:$(e,m,p)})},f)};return(0,o.jsx)(t.View,{direction:X,alignItems:`center`,gap:A.itemGap??6,padding:A.padding??4,backgroundColor:A.backgroundColor,backgroundAlpha:A.backgroundAlpha,borderColor:A.borderColor,borderWidth:A.borderWidth,cornerRadius:A.cornerRadius,...G===void 0?{}:{alpha:G},theme:j,children:g.map(te)})}function g(e){return(0,o.jsx)(h,{...e})}exports.ToolButtonGroup=g,exports.Toolbar=h,exports.getToolbarItemId=u,exports.isToolbarMenuItem=l,exports.isToolbarSeparatorItem=s,exports.isToolbarToggleItem=c,exports.resolveToolbarActiveId=d;
@@ -0,0 +1,129 @@
1
+ import { VNodeLike } from '@number10/jsx-core';
2
+ import { ButtonSize, ButtonVariant } from './Button';
3
+ import { ContextMenuItem } from './Popover';
4
+ import { PortableComponentPartialTheme } from './theme-types';
5
+ export type ToolbarOrientation = 'horizontal' | 'vertical';
6
+ export type ToolbarDensity = 'compact' | 'normal';
7
+ export type ToolbarItemType = 'action' | 'toggle' | 'separator' | 'menu';
8
+ export interface ToolbarLabels {
9
+ overflow?: string;
10
+ menuIndicator?: string;
11
+ }
12
+ interface ToolbarBaseItem {
13
+ /** Unique item id. Required for action, toggle, and menu items. */
14
+ id?: string;
15
+ /** Item type. Omitted type defaults to action. */
16
+ type?: ToolbarItemType;
17
+ /** Visible or tooltip label. */
18
+ label?: string;
19
+ /** Optional icon/glyph content. */
20
+ icon?: VNodeLike;
21
+ /** Full custom button content. Takes precedence over icon and label. */
22
+ children?: VNodeLike;
23
+ /** Hide generated label text while keeping label available for tooltip metadata. */
24
+ showLabel?: boolean;
25
+ /** Disabled item state. */
26
+ disabled?: boolean;
27
+ /** Tooltip text (metadata, renderer may handle natively). */
28
+ tooltip?: string;
29
+ /** Item-specific button variant. */
30
+ buttonVariant?: ButtonVariant;
31
+ /** Item-specific button size. */
32
+ buttonSize?: ButtonSize;
33
+ /** Called before Toolbar onSelect. */
34
+ onSelect?: (id: string) => void;
35
+ }
36
+ export interface ToolbarActionItem extends ToolbarBaseItem {
37
+ type?: 'action';
38
+ id: string;
39
+ }
40
+ export interface ToolbarToggleItem extends ToolbarBaseItem {
41
+ type: 'toggle';
42
+ id: string;
43
+ /** Controlled pressed state for this toggle. */
44
+ pressed?: boolean;
45
+ /** Initial pressed state for uncontrolled toolbars. */
46
+ defaultPressed?: boolean;
47
+ /** Allow clicking an active toggle to clear it. */
48
+ allowDeselect?: boolean;
49
+ /** Called when the toggle pressed state changes. */
50
+ onToggle?: (pressed: boolean, id: string) => void;
51
+ }
52
+ export interface ToolbarMenuItem extends ToolbarBaseItem {
53
+ type: 'menu';
54
+ id: string;
55
+ /** Menu item payload rendered via MenuButton. */
56
+ items?: ContextMenuItem[];
57
+ }
58
+ export interface ToolbarSeparatorItem {
59
+ type: 'separator';
60
+ id?: string;
61
+ length?: number;
62
+ thickness?: number;
63
+ }
64
+ export type ToolbarItem = ToolbarActionItem | ToolbarToggleItem | ToolbarMenuItem | ToolbarSeparatorItem;
65
+ export interface ToolbarProps {
66
+ /** Toolbar items. */
67
+ items: ToolbarItem[];
68
+ /** Active tool id in controlled mode. */
69
+ activeId?: string;
70
+ /** Initial active tool id in uncontrolled mode. */
71
+ defaultActiveId?: string;
72
+ /** Called when an action, toggle, or menu trigger is selected. */
73
+ onSelect?: (id: string, item: Exclude<ToolbarItem, ToolbarSeparatorItem>) => void;
74
+ /** Called when a toggle item changes pressed state. */
75
+ onToggle?: (id: string, pressed: boolean, item: ToolbarToggleItem) => void;
76
+ /** Layout orientation. */
77
+ orientation?: ToolbarOrientation;
78
+ /** Density preset. */
79
+ density?: ToolbarDensity;
80
+ /** Hide generated labels for compact icon-only toolbars. */
81
+ showLabels?: boolean;
82
+ /** Disable the entire toolbar. */
83
+ disabled?: boolean;
84
+ /** Localized labels. */
85
+ labels?: ToolbarLabels;
86
+ /** Theme overrides. */
87
+ theme?: PortableComponentPartialTheme<'Toolbar'>;
88
+ /** Alpha override. */
89
+ alpha?: number;
90
+ }
91
+ /**
92
+ * Type guard for separator items.
93
+ */
94
+ export declare function isToolbarSeparatorItem(item: ToolbarItem): item is ToolbarSeparatorItem;
95
+ /**
96
+ * Type guard for toggle items.
97
+ */
98
+ export declare function isToolbarToggleItem(item: ToolbarItem): item is ToolbarToggleItem;
99
+ /**
100
+ * Type guard for menu items.
101
+ */
102
+ export declare function isToolbarMenuItem(item: ToolbarItem): item is ToolbarMenuItem;
103
+ /**
104
+ * Returns a stable id for any toolbar item.
105
+ * @param item - The toolbar item.
106
+ * @param index - The item's index in the list.
107
+ */
108
+ export declare function getToolbarItemId(item: ToolbarItem, index: number): string;
109
+ /**
110
+ * Validates and resolves the active tool id from the items list.
111
+ * @param items - The toolbar items.
112
+ * @param activeId - The candidate active id.
113
+ * @returns The active id if valid, undefined otherwise.
114
+ */
115
+ export declare function resolveToolbarActiveId(items: ToolbarItem[], activeId?: string): string | undefined;
116
+ /**
117
+ * Toolbar — compact action/toggle button group for editor tools, HUD controls, and debug panels.
118
+ * @param props - The component props.
119
+ * @returns The rendered VNode tree.
120
+ */
121
+ export declare function Toolbar(props: ToolbarProps): VNodeLike;
122
+ /**
123
+ * ToolButtonGroup — alias for Toolbar when a button-group name fits the UI better.
124
+ * @param props - Same as ToolbarProps.
125
+ * @returns The rendered VNode tree.
126
+ */
127
+ export declare function ToolButtonGroup(props: ToolbarProps): VNodeLike;
128
+ export {};
129
+ //# sourceMappingURL=Toolbar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toolbar.d.ts","sourceRoot":"","sources":["../src/Toolbar.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,159 @@
1
+ import { Text as e } from "./primitives/Text.js";
2
+ import { View as t } from "./primitives/View.js";
3
+ import "./primitives.js";
4
+ import { Button as n } from "./Button.js";
5
+ import { Divider as r } from "./Divider.js";
6
+ import { MenuButton as i } from "./MenuButton.js";
7
+ import { KNOWN_COMPONENTS as a, getGlobalThemeDefaults as o, mergeThemes as s, resolveComponentTheme as c, useEffect as l, useState as u, useTheme as d } from "@number10/jsx-core";
8
+ import { Fragment as f, jsx as p, jsxs as m } from "@number10/jsx-core/jsx-runtime";
9
+ //#region src/Toolbar.tsx
10
+ function h(e) {
11
+ return e.type === "separator";
12
+ }
13
+ function g(e) {
14
+ return e.type === "toggle";
15
+ }
16
+ function _(e) {
17
+ return e.type === "menu";
18
+ }
19
+ function v(e, t) {
20
+ return h(e) ? e.id ?? `separator-${t}` : e.id;
21
+ }
22
+ function y(e, t) {
23
+ if (t) return e.some((e) => !h(e) && e.id === t) ? t : void 0;
24
+ }
25
+ function b(e) {
26
+ return e.find((e) => g(e) && !!e.defaultPressed)?.id;
27
+ }
28
+ function x(...e) {
29
+ let t = Object.assign({}, ...e.filter(Boolean));
30
+ return Object.keys(t).length > 0 ? t : void 0;
31
+ }
32
+ function S(e) {
33
+ if (Array.isArray(e)) return e.map((e) => S(e));
34
+ if (!e || typeof e != "object" || !("type" in e)) return e;
35
+ let t = e, n = { type: t.type };
36
+ return t.props !== void 0 && (n.props = { ...t.props }), t.children !== void 0 && (n.children = t.children.map((e) => S(e))), t.__key !== void 0 && (n.__key = t.__key), t.__addConfig !== void 0 && (n.__addConfig = { ...t.__addConfig }), t.__memo !== void 0 && (n.__memo = t.__memo), t.__theme !== void 0 && (n.__theme = t.__theme), t.__staticChildren !== void 0 && (n.__staticChildren = t.__staticChildren), n;
37
+ }
38
+ function C(C) {
39
+ let { items: w, activeId: T, defaultActiveId: E, onSelect: D, onToggle: ee, orientation: te, density: ne, showLabels: re, disabled: O = !1, labels: ie, theme: k, alpha: ae } = C, A = d(), j = k ? s(A ?? {}, k) : A, { props: M, nestedTheme: N } = c({
40
+ componentName: "Toolbar",
41
+ globalTheme: o(),
42
+ localTheme: j,
43
+ knownComponents: a
44
+ }), P = T !== void 0, [F, I] = u(y(w, T ?? E) ?? b(w)), L = P ? y(w, T) : y(w, F);
45
+ l(() => {
46
+ !P && F !== L && I(L);
47
+ }, [
48
+ P,
49
+ F,
50
+ L
51
+ ]);
52
+ let R = {
53
+ ...M.labels ?? {},
54
+ ...ie ?? {}
55
+ }, z = te ?? M.orientation ?? "horizontal", B = ne ?? M.density ?? "normal", V = M[B === "compact" ? "compactItemWidth" : "itemWidth"] ?? M.itemWidth ?? 42, H = M[B === "compact" ? "compactItemHeight" : "itemHeight"] ?? M.itemHeight ?? 36, U = (B === "compact" ? M.compactButtonSize : void 0) ?? M.buttonSize ?? "small", W = (B === "compact" ? M.compactIconSize : void 0) ?? M.iconSize ?? 18, G = re ?? B !== "compact", K = G ? void 0 : V, q = O ? M.disabledAlpha ?? .55 : ae, J = M.textStyle ?? {
56
+ color: "#e2e8f0",
57
+ fontSize: "13px"
58
+ }, Y = x(J, M.activeTextStyle), X = x(J, M.disabledTextStyle), Z = M.menuIndicatorStyle ?? {
59
+ color: "#94a3b8",
60
+ fontSize: "10px"
61
+ }, oe = z === "horizontal" ? "row" : "column", Q = z === "horizontal" ? "vertical" : "horizontal", se = M.separatorLength ?? (z === "horizontal" ? H : V), ce = (e) => {
62
+ if (!(O || e.disabled)) {
63
+ if (g(e)) {
64
+ let t = !((e.pressed ?? L === e.id) && e.allowDeselect);
65
+ !P && e.pressed === void 0 && I(t ? e.id : void 0), e.onToggle?.(t, e.id), ee?.(e.id, t, e);
66
+ }
67
+ e.onSelect?.(e.id), D?.(e.id, e);
68
+ }
69
+ }, $ = (t, n, r) => {
70
+ if (t.children) return S(t.children);
71
+ let i = t.showLabel ?? G, a = r ? X : n ? Y : J;
72
+ return /* @__PURE__ */ m(f, { children: [
73
+ t.icon ? S(t.icon) : null,
74
+ i && t.label ? /* @__PURE__ */ p(e, {
75
+ text: t.label,
76
+ ...a ? { style: a } : {}
77
+ }) : null,
78
+ _(t) ? /* @__PURE__ */ p(e, {
79
+ text: R.menuIndicator ?? "v",
80
+ ...Z ? { style: Z } : {}
81
+ }) : null
82
+ ] });
83
+ }, le = (e, a) => {
84
+ let o = v(e, a);
85
+ if (h(e)) return /* @__PURE__ */ p(t, {
86
+ alignItems: "center",
87
+ justifyContent: "center",
88
+ theme: N,
89
+ children: /* @__PURE__ */ p(r, {
90
+ orientation: Q,
91
+ length: e.length ?? se,
92
+ thickness: e.thickness ?? M.separatorThickness ?? 1,
93
+ color: M.separatorColor ?? 4674921
94
+ })
95
+ }, o);
96
+ let c = O || !!e.disabled, l = g(e) ? e.pressed ?? L === e.id : L === e.id, u = e.buttonVariant ?? (l ? M.activeButtonVariant ?? "primary" : _(e) ? M.menuButtonVariant ?? M.buttonVariant ?? "secondary" : M.buttonVariant ?? "secondary"), d = c ? X : l ? Y : J, f = s(N, { Button: {
97
+ ...d ? { textStyle: d } : {},
98
+ ...W === void 0 ? {} : { iconSize: W }
99
+ } });
100
+ return _(e) ? /* @__PURE__ */ p(i, {
101
+ items: e.items ?? [],
102
+ onSelect: () => {
103
+ e.onSelect?.(e.id), D?.(e.id, e);
104
+ },
105
+ placement: z === "horizontal" ? "bottom-start" : "right-start",
106
+ disabled: c,
107
+ theme: f,
108
+ trigger: ({ isOpen: r }) => /* @__PURE__ */ p(n, {
109
+ variant: u,
110
+ size: e.buttonSize ?? U,
111
+ disabled: c,
112
+ width: K,
113
+ height: H,
114
+ theme: f,
115
+ children: /* @__PURE__ */ p(t, {
116
+ direction: "row",
117
+ alignItems: "center",
118
+ justifyContent: "center",
119
+ gap: M.gap ?? 6,
120
+ children: $(e, r, c)
121
+ })
122
+ })
123
+ }, o) : /* @__PURE__ */ p(n, {
124
+ width: K,
125
+ height: H,
126
+ variant: u,
127
+ size: e.buttonSize ?? U,
128
+ disabled: c,
129
+ onClick: () => ce(e),
130
+ theme: f,
131
+ children: /* @__PURE__ */ p(t, {
132
+ direction: "row",
133
+ alignItems: "center",
134
+ justifyContent: "center",
135
+ gap: M.gap ?? 6,
136
+ children: $(e, l, c)
137
+ })
138
+ }, o);
139
+ };
140
+ return /* @__PURE__ */ p(t, {
141
+ direction: oe,
142
+ alignItems: "center",
143
+ gap: M.itemGap ?? 6,
144
+ padding: M.padding ?? 4,
145
+ backgroundColor: M.backgroundColor,
146
+ backgroundAlpha: M.backgroundAlpha,
147
+ borderColor: M.borderColor,
148
+ borderWidth: M.borderWidth,
149
+ cornerRadius: M.cornerRadius,
150
+ ...q === void 0 ? {} : { alpha: q },
151
+ theme: N,
152
+ children: w.map(le)
153
+ });
154
+ }
155
+ function w(e) {
156
+ return /* @__PURE__ */ p(C, { ...e });
157
+ }
158
+ //#endregion
159
+ export { w as ToolButtonGroup, C as Toolbar, v as getToolbarItemId, _ as isToolbarMenuItem, h as isToolbarSeparatorItem, g as isToolbarToggleItem, y as resolveToolbarActiveId };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=Toolbar.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toolbar.test.d.ts","sourceRoot":"","sources":["../src/Toolbar.test.tsx"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ const e=require(`./primitives/View.cjs`);require(`./primitives.cjs`);let t=require(`@number10/jsx-core/jsx-runtime`);function n({originX:n=.5,originY:r=.5,width:i,height:a,x:o=0,y:s=0,children:c,rotation:l,scale:u,scaleX:d,scaleY:f,backgroundColor:p,backgroundAlpha:m,cornerRadius:h,borderWidth:g,borderColor:_,borderAlpha:v,...y}){if(typeof i!=`number`||typeof a!=`number`)throw Error(`TransformOriginView requires numeric width and height`);let b=i*n,x=a*r,S={};return l!==void 0&&(S.rotation=l),u!==void 0&&(S.scale=u),d!==void 0&&(S.scaleX=d),f!==void 0&&(S.scaleY=f),p!==void 0&&(S.backgroundColor=p),m!==void 0&&(S.backgroundAlpha=m),h!==void 0&&(S.cornerRadius=h),g!==void 0&&(S.borderWidth=g),_!==void 0&&(S.borderColor=_),v!==void 0&&(S.borderAlpha=v),(0,t.jsx)(e.View,{x:o,y:s,width:i,height:a,padding:0,direction:`stack`,...y,children:(0,t.jsx)(e.View,{x:b,y:x,width:i,height:a,padding:0,direction:`stack`,...S,children:(0,t.jsx)(e.View,{x:-b,y:-x,width:i,height:a,padding:0,direction:`stack`,backgroundAlpha:0,children:c})})})}exports.TransformOriginView=n;