@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
@@ -0,0 +1,61 @@
1
+ import { View as e } from "./primitives/View.js";
2
+ import "./primitives.js";
3
+ import { NineSlice as t } from "./NineSlice.js";
4
+ import { applyEffect as n, createElement as r, resolveEffect as i, useEffect as a, useRef as o, useState as s } from "@number10/jsx-core";
5
+ import { jsx as c } from "@number10/jsx-core/jsx-runtime";
6
+ //#region src/NineSliceButton.tsx
7
+ function l(l) {
8
+ let { texture: u, frame: d, leftWidth: f, rightWidth: p, topHeight: m = 0, bottomHeight: h = 0, width: g, height: _, tint: v, onClick: y, disabled: b, children: x, alignItems: S = "center", justifyContent: C = "center", gap: w, padding: T, renderMode: E, theme: D, key: O, effect: k, effectConfig: A } = l, j = o(null), [M, N] = s(!1);
9
+ a(() => {
10
+ N(!0);
11
+ }, []);
12
+ let P = b ? void 0 : (e) => {
13
+ let t = i({
14
+ effect: k,
15
+ effectConfig: A
16
+ }, {});
17
+ n(j.current, t.effect, t.effectConfig), y?.();
18
+ }, F = P ? { onTouch: P } : {}, I = x != null && x !== !1;
19
+ return /* @__PURE__ */ r(e, {
20
+ ref: j,
21
+ direction: "stack",
22
+ width: g,
23
+ height: _,
24
+ visible: M,
25
+ enableGestures: !b,
26
+ ...F,
27
+ key: O,
28
+ theme: D
29
+ }, I ? /* @__PURE__ */ c(t, {
30
+ texture: u,
31
+ frame: d,
32
+ leftWidth: f,
33
+ rightWidth: p,
34
+ topHeight: m,
35
+ bottomHeight: h,
36
+ width: g,
37
+ height: _,
38
+ tint: v,
39
+ renderMode: E,
40
+ alignItems: S,
41
+ justifyContent: C,
42
+ gap: w,
43
+ padding: T,
44
+ theme: D,
45
+ children: x
46
+ }) : /* @__PURE__ */ c(t, {
47
+ texture: u,
48
+ frame: d,
49
+ leftWidth: f,
50
+ rightWidth: p,
51
+ topHeight: m,
52
+ bottomHeight: h,
53
+ width: g,
54
+ height: _,
55
+ tint: v,
56
+ renderMode: E,
57
+ theme: D
58
+ }));
59
+ }
60
+ //#endregion
61
+ export { l as NineSliceButton };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=NineSliceButton.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NineSliceButton.test.d.ts","sourceRoot":"","sources":["../src/NineSliceButton.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`);const r=require(`./Button.cjs`);let i=require(`@number10/jsx-core`),a=require(`@number10/jsx-core/jsx-runtime`);var o={decrement:`-`,increment:`+`,value:`Value`};function s(e){return e===`decrement`?`left`:`right`}function c(e,t,n){let r=n/2,i=n*.32,a=n*.68,o=n*.3,s=n*.7;e.beginPath(),t===`left`?e.moveTo(a,o).lineTo(i,r).lineTo(a,s):t===`right`?e.moveTo(i,o).lineTo(a,r).lineTo(i,s):t===`up`?e.moveTo(i,s).lineTo(r,o).lineTo(a,s):e.moveTo(i,o).lineTo(r,s).lineTo(a,o),e.strokePath()}function l(e,t,n){let r=n/2,i=n*.3,a=n*.7;e.beginPath().moveTo(i,r).lineTo(a,r).strokePath(),t===`increment`&&e.beginPath().moveTo(r,i).lineTo(r,a).strokePath()}function u(e){let{variant:n=`sign`,action:r=`increment`,direction:i,size:o=24,color:u=16777215,activeColor:d=u,disabled:f=!1,framed:p=!1,backgroundAlpha:m=.12,borderAlpha:h=1,...g}=e,_=i??s(r);return(0,a.jsx)(t.VectorDrawContent,{...g,width:o,height:o,dependencies:[n,r,_,o,u,d,f,p,m,h],onDraw:e=>{let t=f?.45:1,i=Math.max(3,Math.round(o*.16)),a=Math.max(2,Math.round(o*.12)),s=f?u:d;e.clear(),p&&e.fillStyle(s,m*t).lineStyle(2,s,h*t).fillRoundedRect(i,i,o-i*2,o-i*2,o*.18).strokeRoundedRect(i,i,o-i*2,o-i*2,o*.18),e.lineStyle(a,s,t),n===`chevron`?c(e,_,o):l(e,r,o)}})}function d(e){return typeof e==`number`&&Number.isFinite(e)}function f(e,t){let n=d(e)?e:-1/0,r=d(t)?t:1/0;return{min:Math.min(n,r),max:Math.max(n,r)}}function p(e){if(!Number.isFinite(e)||Number.isInteger(e))return 0;let[,t=``]=e.toString().split(`.`);return t.length}function m(e=1,t){return d(t)&&t>=0?Math.floor(t):p(Math.abs(e))}function h(e,t={}){let{min:n,max:r}=f(t.min,t.max),i=Number.isFinite(n)?n:Number.isFinite(r)?r:0,a=d(e)?e:i,o=Math.max(n,Math.min(r,a)),s=10**m(t.step,t.precision);return Math.round(o*s)/s}function g(e,t,n={}){return h(e+(d(n.step)&&n.step>0?n.step:1)*t,n)}function _(t){let{value:s,defaultValue:c,onChange:l,min:u,max:d,step:f=1,precision:p,label:m,labelPosition:_,formatValue:ee,renderValue:te,labels:ne,decrementContent:re,incrementContent:ie,renderButtonContent:ae,disabled:v=!1,buttonPlacement:oe,buttonDirection:se,buttonVariant:ce,buttonSize:le,buttonTextStyle:ue,buttonIndicatorColor:de,buttonIndicatorActiveColor:fe,repeatOnHold:pe,holdDelay:me,repeatInterval:he,valueWidth:ge,controlHeight:_e,theme:y,...b}=t,x=(0,i.useTheme)(),ve=y?(0,i.mergeThemes)(x??{},y):x,{props:S,nestedTheme:C}=(0,i.resolveComponentTheme)({componentName:`NumberInput`,globalTheme:(0,i.getGlobalThemeDefaults)(),localTheme:ve,knownComponents:i.KNOWN_COMPONENTS}),w={...u===void 0?{}:{min:u},...d===void 0?{}:{max:d},step:f,...p===void 0?{}:{precision:p}},T=h(c??s??u??0,w),[E,D]=(0,i.useState)(T),O=(0,i.useRef)(T),k=(0,i.useRef)(null),A=s!==void 0,j=h(A?s:E,w);O.current=j;let M=()=>{k.current&&=(clearInterval(k.current),null)};(0,i.useEffect)(()=>{!A&&E!==j&&D(j)},[A,E,j]),(0,i.useEffect)(()=>()=>M(),[]);let N={...o,...S.labels??{},...ne??{}},P=_??S.labelPosition??`left`,F=oe??S.buttonPlacement??`split`,I=se??S.buttonDirection??`row`,ye=ce??S.buttonVariant??`secondary`,be=le??S.buttonSize??`small`,xe=ue??S.buttonTextStyle??{color:`#111827`,fontSize:`16px`},L=de??S.buttonIndicatorColor??16777215,Se=fe??S.buttonIndicatorActiveColor??L,Ce=pe??S.repeatOnHold??!0,we=me??S.holdDelay??350,Te=he??S.repeatInterval??90,R=ge??S.valueWidth??78,z=_e??S.controlHeight??34,Ee=S.labelStyle??{color:`#ffffff`,fontSize:`14px`},De=S.valueStyle??{color:`#ffffff`,fontSize:`14px`},B=S.buttonControlSize??z,V=ee?.(j)??`${j}`,H=m??N.value,Oe=P!==`none`&&H.length>0,U=g(j,-1,w),W=g(j,1,w),G=U!==j,K=W!==j,ke=te?.({value:j,displayText:V,...u===void 0?{}:{min:u},...d===void 0?{}:{max:d},step:f,disabled:v,canDecrement:G,canIncrement:K,valueWidth:R,controlHeight:z}),Ae=e=>{let t=h(e,w);t!==O.current&&(O.current=t,A||D(t),l?.(t))},q=e=>{Ae(g(O.current,e,w))},je=e=>{!Ce||v||(M(),q(e),k.current=setInterval(()=>{q(e)},Te))},Me=e=>{e.state===`end`&&M()},J=e=>{let t=e===-1,n=t?`decrement`:`increment`,i=t?G:K,o=t?re:ie,s=t?N.decrement:N.increment,c=t?U:W,l=v||!i,u=o??ae?.({action:n,disabled:l,value:j,nextValue:c,size:B,color:L,activeColor:Se});return(0,a.jsx)(r.Button,{label:u?void 0:s,width:B,height:B,padding:0,variant:ye,size:be,textStyle:xe,disabled:l,onClick:()=>q(e),onLongPress:()=>je(e),onTouchMove:Me,longPressDuration:we,children:u},t?`decrement`:`increment`)},Y=(0,a.jsxs)(n.View,{direction:I,alignItems:`center`,gap:S.buttonGap??S.controlGap??0,theme:C,children:[J(-1),J(1)]}),X=(0,a.jsx)(n.View,{width:R,height:z,alignItems:`center`,justifyContent:`center`,backgroundColor:S.valueBackgroundColor??0,backgroundAlpha:S.valueBackgroundAlpha??.12,borderColor:S.valueBorderColor??S.borderColor,borderWidth:S.valueBorderWidth??1,cornerRadius:S.valueCornerRadius??S.cornerRadius??6,padding:S.valuePadding??{left:8,right:8,top:4,bottom:4},theme:C,children:ke??(0,a.jsx)(e.Text,{text:V,style:De})}),Z=F===`left`?(0,a.jsxs)(n.View,{direction:`row`,alignItems:`center`,gap:S.controlGap??0,theme:C,children:[Y,X]}):F===`right`?(0,a.jsxs)(n.View,{direction:`row`,alignItems:`center`,gap:S.controlGap??0,theme:C,children:[X,Y]}):(0,a.jsxs)(n.View,{direction:`row`,alignItems:`center`,gap:S.controlGap??0,theme:C,children:[J(-1),X,J(1)]}),Q=Oe?(0,a.jsx)(e.Text,{text:H,style:Ee}):null,Ne=P===`top`||P===`bottom`,$=v?S.disabledAlpha??.5:b.alpha,Pe=P===`right`||P===`bottom`?(0,a.jsxs)(a.Fragment,{children:[Z,Q]}):(0,a.jsxs)(a.Fragment,{children:[Q,Z]});return(0,a.jsx)(n.View,{...b,direction:Ne?`column`:`row`,alignItems:`center`,gap:S.gap??10,padding:S.padding??0,...$===void 0?{}:{alpha:$},theme:C,children:Pe})}exports.NumberInput=_,exports.NumberInputIndicator=u,exports.getNextNumberInputValue=g,exports.getNumberInputPrecision=m,exports.normalizeNumberInputValue=h;
@@ -0,0 +1,90 @@
1
+ import { ChildrenType, PortableTextStyle, VectorDrawContentPrimitivePropsComplete, ViewPrimitivePropsComplete, VNodeLike } from '@number10/jsx-core';
2
+ import { ButtonSize, ButtonVariant } from './Button';
3
+ import { PortableComponentPartialTheme } from './theme-types';
4
+ export interface NumberInputLabels {
5
+ decrement?: string;
6
+ increment?: string;
7
+ value?: string;
8
+ }
9
+ export type NumberInputLabelPosition = 'left' | 'right' | 'top' | 'bottom' | 'none';
10
+ export type NumberInputButtonPlacement = 'split' | 'left' | 'right';
11
+ export type NumberInputButtonDirection = 'row' | 'column';
12
+ export type NumberInputButtonAction = 'decrement' | 'increment';
13
+ export type NumberInputIndicatorDirection = 'left' | 'right' | 'up' | 'down';
14
+ export type NumberInputIndicatorVariant = 'sign' | 'chevron';
15
+ export interface NumberInputButtonRenderProps {
16
+ action: NumberInputButtonAction;
17
+ disabled: boolean;
18
+ value: number;
19
+ nextValue: number;
20
+ size: number;
21
+ color: number;
22
+ activeColor: number;
23
+ }
24
+ export interface NumberInputValueRenderProps {
25
+ value: number;
26
+ displayText: string;
27
+ min?: number;
28
+ max?: number;
29
+ step: number;
30
+ disabled: boolean;
31
+ canDecrement: boolean;
32
+ canIncrement: boolean;
33
+ valueWidth: number;
34
+ controlHeight: number;
35
+ }
36
+ export interface NumberInputIndicatorProps extends Omit<VectorDrawContentPrimitivePropsComplete, 'children' | 'dependencies' | 'direction' | 'onDraw'> {
37
+ variant?: NumberInputIndicatorVariant;
38
+ action?: NumberInputButtonAction;
39
+ direction?: NumberInputIndicatorDirection;
40
+ size?: number;
41
+ color?: number;
42
+ activeColor?: number;
43
+ disabled?: boolean;
44
+ framed?: boolean;
45
+ backgroundAlpha?: number;
46
+ borderAlpha?: number;
47
+ }
48
+ export interface NumberInputProps extends Omit<ViewPrimitivePropsComplete, 'children'> {
49
+ value?: number;
50
+ defaultValue?: number;
51
+ onChange?: (value: number) => void;
52
+ min?: number;
53
+ max?: number;
54
+ step?: number;
55
+ precision?: number;
56
+ label?: string;
57
+ labelPosition?: NumberInputLabelPosition;
58
+ formatValue?: (value: number) => string;
59
+ renderValue?: (props: NumberInputValueRenderProps) => ChildrenType;
60
+ labels?: NumberInputLabels;
61
+ decrementContent?: ChildrenType;
62
+ incrementContent?: ChildrenType;
63
+ renderButtonContent?: (props: NumberInputButtonRenderProps) => ChildrenType;
64
+ disabled?: boolean;
65
+ buttonPlacement?: NumberInputButtonPlacement;
66
+ buttonDirection?: NumberInputButtonDirection;
67
+ buttonVariant?: ButtonVariant;
68
+ buttonSize?: ButtonSize;
69
+ buttonTextStyle?: PortableTextStyle;
70
+ buttonIndicatorColor?: number;
71
+ buttonIndicatorActiveColor?: number;
72
+ repeatOnHold?: boolean;
73
+ holdDelay?: number;
74
+ repeatInterval?: number;
75
+ valueWidth?: number;
76
+ controlHeight?: number;
77
+ theme?: PortableComponentPartialTheme<'NumberInput'>;
78
+ }
79
+ export interface NumberInputValueOptions {
80
+ min?: number;
81
+ max?: number;
82
+ step?: number;
83
+ precision?: number;
84
+ }
85
+ export declare function NumberInputIndicator(props: NumberInputIndicatorProps): VNodeLike;
86
+ export declare function getNumberInputPrecision(step?: number, precision?: number): number;
87
+ export declare function normalizeNumberInputValue(value: number, options?: NumberInputValueOptions): number;
88
+ export declare function getNextNumberInputValue(currentValue: number, direction: -1 | 1, options?: NumberInputValueOptions): number;
89
+ export declare function NumberInput(props: NumberInputProps): VNodeLike;
90
+ //# sourceMappingURL=NumberInput.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NumberInput.d.ts","sourceRoot":"","sources":["../src/NumberInput.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,222 @@
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 { Button as r } from "./Button.js";
6
+ import { KNOWN_COMPONENTS as i, getGlobalThemeDefaults as a, mergeThemes as o, resolveComponentTheme as s, useEffect as c, useRef as l, useState as u, useTheme as d } from "@number10/jsx-core";
7
+ import { Fragment as f, jsx as p, jsxs as m } from "@number10/jsx-core/jsx-runtime";
8
+ //#region src/NumberInput.tsx
9
+ var ee = {
10
+ decrement: "-",
11
+ increment: "+",
12
+ value: "Value"
13
+ };
14
+ function h(e) {
15
+ return e === "decrement" ? "left" : "right";
16
+ }
17
+ function g(e, t, n) {
18
+ let r = n / 2, i = n * .32, a = n * .68, o = n * .3, s = n * .7;
19
+ e.beginPath(), t === "left" ? e.moveTo(a, o).lineTo(i, r).lineTo(a, s) : t === "right" ? e.moveTo(i, o).lineTo(a, r).lineTo(i, s) : t === "up" ? e.moveTo(i, s).lineTo(r, o).lineTo(a, s) : e.moveTo(i, o).lineTo(r, s).lineTo(a, o), e.strokePath();
20
+ }
21
+ function _(e, t, n) {
22
+ let r = n / 2, i = n * .3, a = n * .7;
23
+ e.beginPath().moveTo(i, r).lineTo(a, r).strokePath(), t === "increment" && e.beginPath().moveTo(r, i).lineTo(r, a).strokePath();
24
+ }
25
+ function v(e) {
26
+ let { variant: n = "sign", action: r = "increment", direction: i, size: a = 24, color: o = 16777215, activeColor: s = o, disabled: c = !1, framed: l = !1, backgroundAlpha: u = .12, borderAlpha: d = 1, ...f } = e, m = i ?? h(r);
27
+ return /* @__PURE__ */ p(t, {
28
+ ...f,
29
+ width: a,
30
+ height: a,
31
+ dependencies: [
32
+ n,
33
+ r,
34
+ m,
35
+ a,
36
+ o,
37
+ s,
38
+ c,
39
+ l,
40
+ u,
41
+ d
42
+ ],
43
+ onDraw: (e) => {
44
+ let t = c ? .45 : 1, i = Math.max(3, Math.round(a * .16)), f = Math.max(2, Math.round(a * .12)), p = c ? o : s;
45
+ e.clear(), l && e.fillStyle(p, u * t).lineStyle(2, p, d * t).fillRoundedRect(i, i, a - i * 2, a - i * 2, a * .18).strokeRoundedRect(i, i, a - i * 2, a - i * 2, a * .18), e.lineStyle(f, p, t), n === "chevron" ? g(e, m, a) : _(e, r, a);
46
+ }
47
+ });
48
+ }
49
+ function y(e) {
50
+ return typeof e == "number" && Number.isFinite(e);
51
+ }
52
+ function b(e, t) {
53
+ let n = y(e) ? e : -Infinity, r = y(t) ? t : Infinity;
54
+ return {
55
+ min: Math.min(n, r),
56
+ max: Math.max(n, r)
57
+ };
58
+ }
59
+ function x(e) {
60
+ if (!Number.isFinite(e) || Number.isInteger(e)) return 0;
61
+ let [, t = ""] = e.toString().split(".");
62
+ return t.length;
63
+ }
64
+ function S(e = 1, t) {
65
+ return y(t) && t >= 0 ? Math.floor(t) : x(Math.abs(e));
66
+ }
67
+ function C(e, t = {}) {
68
+ let { min: n, max: r } = b(t.min, t.max), i = Number.isFinite(n) ? n : Number.isFinite(r) ? r : 0, a = y(e) ? e : i, o = Math.max(n, Math.min(r, a)), s = 10 ** S(t.step, t.precision);
69
+ return Math.round(o * s) / s;
70
+ }
71
+ function w(e, t, n = {}) {
72
+ return C(e + (y(n.step) && n.step > 0 ? n.step : 1) * t, n);
73
+ }
74
+ function T(t) {
75
+ let { value: h, defaultValue: g, onChange: _, min: v, max: y, step: b = 1, precision: x, label: S, labelPosition: T, formatValue: te, renderValue: ne, labels: re, decrementContent: ie, incrementContent: ae, renderButtonContent: oe, disabled: E = !1, buttonPlacement: se, buttonDirection: ce, buttonVariant: le, buttonSize: ue, buttonTextStyle: de, buttonIndicatorColor: fe, buttonIndicatorActiveColor: pe, repeatOnHold: me, holdDelay: he, repeatInterval: ge, valueWidth: _e, controlHeight: ve, theme: D, ...O } = t, k = d(), ye = D ? o(k ?? {}, D) : k, { props: A, nestedTheme: j } = s({
76
+ componentName: "NumberInput",
77
+ globalTheme: a(),
78
+ localTheme: ye,
79
+ knownComponents: i
80
+ }), M = {
81
+ ...v === void 0 ? {} : { min: v },
82
+ ...y === void 0 ? {} : { max: y },
83
+ step: b,
84
+ ...x === void 0 ? {} : { precision: x }
85
+ }, N = C(g ?? h ?? v ?? 0, M), [P, F] = u(N), I = l(N), L = l(null), R = h !== void 0, z = C(R ? h : P, M);
86
+ I.current = z;
87
+ let B = () => {
88
+ L.current &&= (clearInterval(L.current), null);
89
+ };
90
+ c(() => {
91
+ !R && P !== z && F(z);
92
+ }, [
93
+ R,
94
+ P,
95
+ z
96
+ ]), c(() => () => B(), []);
97
+ let V = {
98
+ ...ee,
99
+ ...A.labels ?? {},
100
+ ...re ?? {}
101
+ }, H = T ?? A.labelPosition ?? "left", U = se ?? A.buttonPlacement ?? "split", be = ce ?? A.buttonDirection ?? "row", xe = le ?? A.buttonVariant ?? "secondary", Se = ue ?? A.buttonSize ?? "small", Ce = de ?? A.buttonTextStyle ?? {
102
+ color: "#111827",
103
+ fontSize: "16px"
104
+ }, W = fe ?? A.buttonIndicatorColor ?? 16777215, we = pe ?? A.buttonIndicatorActiveColor ?? W, Te = me ?? A.repeatOnHold ?? !0, Ee = he ?? A.holdDelay ?? 350, De = ge ?? A.repeatInterval ?? 90, G = _e ?? A.valueWidth ?? 78, K = ve ?? A.controlHeight ?? 34, Oe = A.labelStyle ?? {
105
+ color: "#ffffff",
106
+ fontSize: "14px"
107
+ }, ke = A.valueStyle ?? {
108
+ color: "#ffffff",
109
+ fontSize: "14px"
110
+ }, q = A.buttonControlSize ?? K, J = te?.(z) ?? `${z}`, Ae = S ?? V.value, je = H !== "none" && Ae.length > 0, Me = w(z, -1, M), Ne = w(z, 1, M), Pe = Me !== z, Y = Ne !== z, Fe = ne?.({
111
+ value: z,
112
+ displayText: J,
113
+ ...v === void 0 ? {} : { min: v },
114
+ ...y === void 0 ? {} : { max: y },
115
+ step: b,
116
+ disabled: E,
117
+ canDecrement: Pe,
118
+ canIncrement: Y,
119
+ valueWidth: G,
120
+ controlHeight: K
121
+ }), Ie = (e) => {
122
+ let t = C(e, M);
123
+ t !== I.current && (I.current = t, R || F(t), _?.(t));
124
+ }, X = (e) => {
125
+ Ie(w(I.current, e, M));
126
+ }, Le = (e) => {
127
+ !Te || E || (B(), X(e), L.current = setInterval(() => {
128
+ X(e);
129
+ }, De));
130
+ }, Re = (e) => {
131
+ e.state === "end" && B();
132
+ }, Z = (e) => {
133
+ let t = e === -1, n = t ? "decrement" : "increment", i = t ? Pe : Y, a = t ? ie : ae, o = t ? V.decrement : V.increment, s = t ? Me : Ne, c = E || !i, l = a ?? oe?.({
134
+ action: n,
135
+ disabled: c,
136
+ value: z,
137
+ nextValue: s,
138
+ size: q,
139
+ color: W,
140
+ activeColor: we
141
+ });
142
+ return /* @__PURE__ */ p(r, {
143
+ label: l ? void 0 : o,
144
+ width: q,
145
+ height: q,
146
+ padding: 0,
147
+ variant: xe,
148
+ size: Se,
149
+ textStyle: Ce,
150
+ disabled: c,
151
+ onClick: () => X(e),
152
+ onLongPress: () => Le(e),
153
+ onTouchMove: Re,
154
+ longPressDuration: Ee,
155
+ children: l
156
+ }, t ? "decrement" : "increment");
157
+ }, ze = /* @__PURE__ */ m(n, {
158
+ direction: be,
159
+ alignItems: "center",
160
+ gap: A.buttonGap ?? A.controlGap ?? 0,
161
+ theme: j,
162
+ children: [Z(-1), Z(1)]
163
+ }), Q = /* @__PURE__ */ p(n, {
164
+ width: G,
165
+ height: K,
166
+ alignItems: "center",
167
+ justifyContent: "center",
168
+ backgroundColor: A.valueBackgroundColor ?? 0,
169
+ backgroundAlpha: A.valueBackgroundAlpha ?? .12,
170
+ borderColor: A.valueBorderColor ?? A.borderColor,
171
+ borderWidth: A.valueBorderWidth ?? 1,
172
+ cornerRadius: A.valueCornerRadius ?? A.cornerRadius ?? 6,
173
+ padding: A.valuePadding ?? {
174
+ left: 8,
175
+ right: 8,
176
+ top: 4,
177
+ bottom: 4
178
+ },
179
+ theme: j,
180
+ children: Fe ?? /* @__PURE__ */ p(e, {
181
+ text: J,
182
+ style: ke
183
+ })
184
+ }), Be = U === "left" ? /* @__PURE__ */ m(n, {
185
+ direction: "row",
186
+ alignItems: "center",
187
+ gap: A.controlGap ?? 0,
188
+ theme: j,
189
+ children: [ze, Q]
190
+ }) : U === "right" ? /* @__PURE__ */ m(n, {
191
+ direction: "row",
192
+ alignItems: "center",
193
+ gap: A.controlGap ?? 0,
194
+ theme: j,
195
+ children: [Q, ze]
196
+ }) : /* @__PURE__ */ m(n, {
197
+ direction: "row",
198
+ alignItems: "center",
199
+ gap: A.controlGap ?? 0,
200
+ theme: j,
201
+ children: [
202
+ Z(-1),
203
+ Q,
204
+ Z(1)
205
+ ]
206
+ }), Ve = je ? /* @__PURE__ */ p(e, {
207
+ text: Ae,
208
+ style: Oe
209
+ }) : null, He = H === "top" || H === "bottom", $ = E ? A.disabledAlpha ?? .5 : O.alpha, Ue = H === "right" || H === "bottom" ? /* @__PURE__ */ m(f, { children: [Be, Ve] }) : /* @__PURE__ */ m(f, { children: [Ve, Be] });
210
+ return /* @__PURE__ */ p(n, {
211
+ ...O,
212
+ direction: He ? "column" : "row",
213
+ alignItems: "center",
214
+ gap: A.gap ?? 10,
215
+ padding: A.padding ?? 0,
216
+ ...$ === void 0 ? {} : { alpha: $ },
217
+ theme: j,
218
+ children: Ue
219
+ });
220
+ }
221
+ //#endregion
222
+ export { T as NumberInput, v as NumberInputIndicator, w as getNextNumberInputValue, S as getNumberInputPrecision, C as normalizeNumberInputValue };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=NumberInput.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NumberInput.test.d.ts","sourceRoot":"","sources":["../src/NumberInput.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`);var a={title:`Palette`,empty:`No colors`};function o(e){let t=typeof e==`number`?{value:e}:e,n=(0,r.normalizeColorNumber)(t.value);return{...t,value:n,hex:(0,r.numberToHex)(n).toUpperCase()}}function s(e){return e.map(o)}function c(e,t,n){if(t!==void 0){let n=(0,r.normalizeColorNumber)(t);return e.some(e=>e.value===n)?n:void 0}if(n!==void 0){let t=(0,r.normalizeColorNumber)(n),i=e.find(e=>e.value===t);if(i)return i.value}return e.find(e=>!e.disabled)?.value??e[0]?.value}function l(e,t){let n=Math.max(1,Math.floor(t)),r=[];for(let t=0;t<e.length;t+=n)r.push(e.slice(t,t+n));return r}function u(e,t=16777215){return(0,r.ensureContrast)(t,e,4.5)}function d(e,t){return!t&&!e.disabled}function f(e,t,n){e.clear().lineStyle(Math.max(2,Math.round(t*.09)),n,1).beginPath().moveTo(t*.25,t*.52).lineTo(t*.43,t*.7).lineTo(t*.77,t*.3).strokePath()}function p(o){let{colors:p,value:m,defaultValue:h,onChange:g,columns:_,swatchSize:v,showTitle:y,showHex:b,labels:x,disabled:S=!1,renderSwatch:C,theme:w,alpha:T,...E}=o,D=(0,r.useTheme)(),O=w?(0,r.mergeThemes)(D??{},w):D,{props:k,nestedTheme:A}=(0,r.resolveComponentTheme)({componentName:`PalettePicker`,globalTheme:(0,r.getGlobalThemeDefaults)(),localTheme:O,knownComponents:r.KNOWN_COMPONENTS}),j=s(p),M=m!==void 0,[N,P]=(0,r.useState)(c(j,m,h)),F=M?c(j,m):c(j,N);(0,r.useEffect)(()=>{!M&&N!==F&&P(F)},[M,N,F]);let I={...a,...k.labels??{},...x??{}},L=Math.max(1,Math.floor(_??k.columns??6)),R=v??k.swatchSize??28,z=y??k.showTitle??!0,B=b??k.showHex??!1,V=k.swatchGap??8,H=k.rowGap??V,U=k.itemWidth??(B?Math.max(56,R):R),W=k.titleStyle??{color:`#ffffff`,fontSize:`14px`,fontStyle:`bold`},G=k.emptyStyle??{color:`#9fb3c8`,fontSize:`13px`},K=k.hexStyle??{color:`#9fb3c8`,fontSize:`11px`},q=S?k.disabledAlpha??.5:T,J=l(j,L),Y=e=>{d(e,S)&&(M||P(e.value),g?.(e.value,e))},X=e=>(0,i.jsx)(n.View,{width:e.size,height:e.size,backgroundColor:e.color,borderColor:e.selected?e.selectedBorderColor:k.swatchBorderColor,borderWidth:e.selected?k.swatchSelectedBorderWidth??3:k.swatchBorderWidth??1,cornerRadius:k.swatchCornerRadius??5,alignItems:`center`,justifyContent:`center`,alpha:e.disabled?k.swatchDisabledAlpha??.45:1,theme:A,children:e.selected?(0,i.jsx)(t.VectorDrawContent,{width:e.size,height:e.size,dependencies:[e.size,e.checkColor],onDraw:t=>f(t,e.size,e.checkColor)}):null}),Z=(t,a)=>{let o=F===t.value,s=S||!!t.disabled,c=d(t,S),l=(0,r.ensureContrast)(k.swatchSelectedBorderColor??16777215,t.value,3),f=u(t.value,k.selectedCheckColor??16777215),p={option:t,color:t.value,hex:t.hex,selected:o,disabled:s,index:a,size:R,selectedBorderColor:l,checkColor:f},m=C?.(p)??X(p),h=I.formatHex?.(t.value)??t.hex;return(0,i.jsxs)(n.View,{width:U,alignItems:`center`,gap:4,enableGestures:c,...c?{onTouch:()=>Y(t)}:{},theme:A,children:[m,B?(0,i.jsx)(e.Text,{text:h,style:K}):null]},`${t.value}-${a}`)};return(0,i.jsxs)(n.View,{...E,direction:`column`,gap:k.gap??10,padding:k.padding??0,...k.backgroundColor===void 0?{}:{backgroundColor:k.backgroundColor},...k.backgroundAlpha===void 0?{}:{backgroundAlpha:k.backgroundAlpha},...k.borderColor===void 0?{}:{borderColor:k.borderColor},...k.borderWidth===void 0?{}:{borderWidth:k.borderWidth},...k.cornerRadius===void 0?{}:{cornerRadius:k.cornerRadius},...q===void 0?{}:{alpha:q},theme:A,children:[z?(0,i.jsx)(e.Text,{text:I.title,style:W}):null,j.length===0?(0,i.jsx)(e.Text,{text:I.empty,style:G}):(0,i.jsx)(n.View,{direction:`column`,gap:H,theme:A,children:J.map((e,t)=>(0,i.jsx)(n.View,{direction:`row`,gap:V,theme:A,children:e.map((e,n)=>Z(e,t*L+n))},`row-${t}`))})]})}exports.PalettePicker=p,exports.chunkPalettePickerColors=l,exports.getPalettePickerContrastColor=u,exports.normalizePalettePickerColor=o,exports.normalizePalettePickerColors=s,exports.resolvePalettePickerValue=c;
@@ -0,0 +1,49 @@
1
+ import { ChildrenType, ViewPrimitivePropsComplete, VNodeLike } from '@number10/jsx-core';
2
+ import { PortableComponentPartialTheme } from './theme-types';
3
+ export type PalettePickerColor = number | PalettePickerOption;
4
+ export interface PalettePickerLabels {
5
+ title?: string;
6
+ empty?: string;
7
+ formatHex?: (color: number) => string;
8
+ }
9
+ export interface PalettePickerOption {
10
+ value: number;
11
+ label?: string;
12
+ disabled?: boolean;
13
+ }
14
+ export interface NormalizedPalettePickerOption extends PalettePickerOption {
15
+ value: number;
16
+ hex: string;
17
+ }
18
+ export interface PalettePickerSwatchRenderProps {
19
+ option: NormalizedPalettePickerOption;
20
+ color: number;
21
+ hex: string;
22
+ selected: boolean;
23
+ disabled: boolean;
24
+ index: number;
25
+ size: number;
26
+ selectedBorderColor: number;
27
+ checkColor: number;
28
+ }
29
+ export interface PalettePickerProps extends Omit<ViewPrimitivePropsComplete, 'children'> {
30
+ colors: PalettePickerColor[];
31
+ value?: number;
32
+ defaultValue?: number;
33
+ onChange?: (color: number, option: NormalizedPalettePickerOption) => void;
34
+ columns?: number;
35
+ swatchSize?: number;
36
+ showTitle?: boolean;
37
+ showHex?: boolean;
38
+ labels?: PalettePickerLabels;
39
+ disabled?: boolean;
40
+ renderSwatch?: (props: PalettePickerSwatchRenderProps) => ChildrenType;
41
+ theme?: PortableComponentPartialTheme<'PalettePicker'>;
42
+ }
43
+ export declare function normalizePalettePickerColor(color: PalettePickerColor): NormalizedPalettePickerOption;
44
+ export declare function normalizePalettePickerColors(colors: PalettePickerColor[]): NormalizedPalettePickerOption[];
45
+ export declare function resolvePalettePickerValue(colors: NormalizedPalettePickerOption[], value?: number, defaultValue?: number): number | undefined;
46
+ export declare function chunkPalettePickerColors<T>(colors: T[], columns: number): T[][];
47
+ export declare function getPalettePickerContrastColor(color: number, preferred?: number): number;
48
+ export declare function PalettePicker(props: PalettePickerProps): VNodeLike;
49
+ //# sourceMappingURL=PalettePicker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PalettePicker.d.ts","sourceRoot":"","sources":["../src/PalettePicker.tsx"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C;;GAEG;AAEH,OAAO,KAAK,EACV,YAAY,EAEZ,0BAA0B,EAC1B,SAAS,EACV,MAAM,oBAAoB,CAAA;AAc3B,OAAO,KAAK,EAAsB,6BAA6B,EAAE,MAAM,eAAe,CAAA;AAEtF,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,mBAAmB,CAAA;AAE7D,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAA;CACtC;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,6BAA8B,SAAQ,mBAAmB;IACxE,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,8BAA8B;IAC7C,MAAM,EAAE,6BAA6B,CAAA;IACrC,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,OAAO,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,mBAAmB,EAAE,MAAM,CAAA;IAC3B,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,0BAA0B,EAAE,UAAU,CAAC;IACtF,MAAM,EAAE,kBAAkB,EAAE,CAAA;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,6BAA6B,KAAK,IAAI,CAAA;IACzE,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,MAAM,CAAC,EAAE,mBAAmB,CAAA;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,8BAA8B,KAAK,YAAY,CAAA;IACtE,KAAK,CAAC,EAAE,6BAA6B,CAAC,eAAe,CAAC,CAAA;CACvD;AAOD,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,kBAAkB,GACxB,6BAA6B,CAS/B;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,kBAAkB,EAAE,GAC3B,6BAA6B,EAAE,CAEjC;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,6BAA6B,EAAE,EACvC,KAAK,CAAC,EAAE,MAAM,EACd,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM,GAAG,SAAS,CAapB;AAED,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,CAAC,EAAE,EAAE,CAS/E;AAED,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,SAAW,GAAG,MAAM,CAEzF;AAiBD,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,SAAS,CAiLlE"}
@@ -0,0 +1,152 @@
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 { KNOWN_COMPONENTS as r, ensureContrast as i, getGlobalThemeDefaults as a, mergeThemes as o, normalizeColorNumber as s, numberToHex as c, resolveComponentTheme as l, useEffect as u, useState as d, useTheme as f } from "@number10/jsx-core";
6
+ import { jsx as p, jsxs as m } from "@number10/jsx-core/jsx-runtime";
7
+ //#region src/PalettePicker.tsx
8
+ var h = {
9
+ title: "Palette",
10
+ empty: "No colors"
11
+ };
12
+ function g(e) {
13
+ let t = typeof e == "number" ? { value: e } : e, n = s(t.value);
14
+ return {
15
+ ...t,
16
+ value: n,
17
+ hex: c(n).toUpperCase()
18
+ };
19
+ }
20
+ function _(e) {
21
+ return e.map(g);
22
+ }
23
+ function v(e, t, n) {
24
+ if (t !== void 0) {
25
+ let n = s(t);
26
+ return e.some((e) => e.value === n) ? n : void 0;
27
+ }
28
+ if (n !== void 0) {
29
+ let t = s(n), r = e.find((e) => e.value === t);
30
+ if (r) return r.value;
31
+ }
32
+ return e.find((e) => !e.disabled)?.value ?? e[0]?.value;
33
+ }
34
+ function y(e, t) {
35
+ let n = Math.max(1, Math.floor(t)), r = [];
36
+ for (let t = 0; t < e.length; t += n) r.push(e.slice(t, t + n));
37
+ return r;
38
+ }
39
+ function b(e, t = 16777215) {
40
+ return i(t, e, 4.5);
41
+ }
42
+ function x(e, t) {
43
+ return !t && !e.disabled;
44
+ }
45
+ function S(e, t, n) {
46
+ e.clear().lineStyle(Math.max(2, Math.round(t * .09)), n, 1).beginPath().moveTo(t * .25, t * .52).lineTo(t * .43, t * .7).lineTo(t * .77, t * .3).strokePath();
47
+ }
48
+ function C(s) {
49
+ let { colors: c, value: g, defaultValue: C, onChange: w, columns: T, swatchSize: ee, showTitle: E, showHex: D, labels: O, disabled: k = !1, renderSwatch: A, theme: j, alpha: M, ...N } = s, P = f(), F = j ? o(P ?? {}, j) : P, { props: I, nestedTheme: L } = l({
50
+ componentName: "PalettePicker",
51
+ globalTheme: a(),
52
+ localTheme: F,
53
+ knownComponents: r
54
+ }), R = _(c), z = g !== void 0, [B, V] = d(v(R, g, C)), H = z ? v(R, g) : v(R, B);
55
+ u(() => {
56
+ !z && B !== H && V(H);
57
+ }, [
58
+ z,
59
+ B,
60
+ H
61
+ ]);
62
+ let U = {
63
+ ...h,
64
+ ...I.labels ?? {},
65
+ ...O ?? {}
66
+ }, W = Math.max(1, Math.floor(T ?? I.columns ?? 6)), G = ee ?? I.swatchSize ?? 28, K = E ?? I.showTitle ?? !0, q = D ?? I.showHex ?? !1, J = I.swatchGap ?? 8, Y = I.rowGap ?? J, X = I.itemWidth ?? (q ? Math.max(56, G) : G), Z = I.titleStyle ?? {
67
+ color: "#ffffff",
68
+ fontSize: "14px",
69
+ fontStyle: "bold"
70
+ }, Q = I.emptyStyle ?? {
71
+ color: "#9fb3c8",
72
+ fontSize: "13px"
73
+ }, te = I.hexStyle ?? {
74
+ color: "#9fb3c8",
75
+ fontSize: "11px"
76
+ }, $ = k ? I.disabledAlpha ?? .5 : M, ne = y(R, W), re = (e) => {
77
+ x(e, k) && (z || V(e.value), w?.(e.value, e));
78
+ }, ie = (e) => /* @__PURE__ */ p(n, {
79
+ width: e.size,
80
+ height: e.size,
81
+ backgroundColor: e.color,
82
+ borderColor: e.selected ? e.selectedBorderColor : I.swatchBorderColor,
83
+ borderWidth: e.selected ? I.swatchSelectedBorderWidth ?? 3 : I.swatchBorderWidth ?? 1,
84
+ cornerRadius: I.swatchCornerRadius ?? 5,
85
+ alignItems: "center",
86
+ justifyContent: "center",
87
+ alpha: e.disabled ? I.swatchDisabledAlpha ?? .45 : 1,
88
+ theme: L,
89
+ children: e.selected ? /* @__PURE__ */ p(t, {
90
+ width: e.size,
91
+ height: e.size,
92
+ dependencies: [e.size, e.checkColor],
93
+ onDraw: (t) => S(t, e.size, e.checkColor)
94
+ }) : null
95
+ }), ae = (t, r) => {
96
+ let a = H === t.value, o = k || !!t.disabled, s = x(t, k), c = i(I.swatchSelectedBorderColor ?? 16777215, t.value, 3), l = b(t.value, I.selectedCheckColor ?? 16777215), u = {
97
+ option: t,
98
+ color: t.value,
99
+ hex: t.hex,
100
+ selected: a,
101
+ disabled: o,
102
+ index: r,
103
+ size: G,
104
+ selectedBorderColor: c,
105
+ checkColor: l
106
+ }, d = A?.(u) ?? ie(u), f = U.formatHex?.(t.value) ?? t.hex;
107
+ return /* @__PURE__ */ m(n, {
108
+ width: X,
109
+ alignItems: "center",
110
+ gap: 4,
111
+ enableGestures: s,
112
+ ...s ? { onTouch: () => re(t) } : {},
113
+ theme: L,
114
+ children: [d, q ? /* @__PURE__ */ p(e, {
115
+ text: f,
116
+ style: te
117
+ }) : null]
118
+ }, `${t.value}-${r}`);
119
+ };
120
+ return /* @__PURE__ */ m(n, {
121
+ ...N,
122
+ direction: "column",
123
+ gap: I.gap ?? 10,
124
+ padding: I.padding ?? 0,
125
+ ...I.backgroundColor === void 0 ? {} : { backgroundColor: I.backgroundColor },
126
+ ...I.backgroundAlpha === void 0 ? {} : { backgroundAlpha: I.backgroundAlpha },
127
+ ...I.borderColor === void 0 ? {} : { borderColor: I.borderColor },
128
+ ...I.borderWidth === void 0 ? {} : { borderWidth: I.borderWidth },
129
+ ...I.cornerRadius === void 0 ? {} : { cornerRadius: I.cornerRadius },
130
+ ...$ === void 0 ? {} : { alpha: $ },
131
+ theme: L,
132
+ children: [K ? /* @__PURE__ */ p(e, {
133
+ text: U.title,
134
+ style: Z
135
+ }) : null, R.length === 0 ? /* @__PURE__ */ p(e, {
136
+ text: U.empty,
137
+ style: Q
138
+ }) : /* @__PURE__ */ p(n, {
139
+ direction: "column",
140
+ gap: Y,
141
+ theme: L,
142
+ children: ne.map((e, t) => /* @__PURE__ */ p(n, {
143
+ direction: "row",
144
+ gap: J,
145
+ theme: L,
146
+ children: e.map((e, n) => ae(e, t * W + n))
147
+ }, `row-${t}`))
148
+ })]
149
+ });
150
+ }
151
+ //#endregion
152
+ export { C as PalettePicker, y as chunkPalettePickerColors, b as getPalettePickerContrastColor, g as normalizePalettePickerColor, _ as normalizePalettePickerColors, v as resolvePalettePickerValue };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=PalettePicker.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PalettePicker.test.d.ts","sourceRoot":"","sources":["../src/PalettePicker.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ const e=require(`./primitives/Text.cjs`),t=require(`./primitives/View.cjs`);require(`./primitives.cjs`);const n=require(`./Portal.cjs`),r=require(`./useOverlayPresence.cjs`);let i=require(`@number10/jsx-core`),a=require(`@number10/jsx-core/jsx-runtime`);function o(e){return e.split(`-`)[0]}function s(e){return e.split(`-`)[1]??`center`}function c(e){let{anchor:t,content:n,placement:r,offset:i}=e,a=o(r),c=s(r),l,u;a===`top`||a===`bottom`?(u=a===`top`?t.y-n.height-i:t.y+t.height+i,l=c===`start`?t.x:c===`end`?t.x+t.width-n.width:t.x+(t.width-n.width)/2):(l=a===`left`?t.x-n.width-i:t.x+t.width+i,u=c===`start`?t.y:c===`end`?t.y+t.height-n.height:t.y+(t.height-n.height)/2);let d=e.viewport;if(d){let t=e.viewportPadding??8;l=Math.min(Math.max(t,l),Math.max(t,d.width-n.width-t)),u=Math.min(Math.max(t,u),Math.max(t,d.height-n.height-t))}return{x:l,y:u,placement:r}}function l(e){return e?.__getLayoutSize?.()??e?.__cachedLayoutSize??{width:0,height:0}}function u(e){let t=e;if(typeof t.getAbsolutePosition==`function`){let e=t.getAbsolutePosition();return{x:e.x,y:e.y}}let n=e;if(typeof n.getGlobalPosition==`function`){let e=n.getGlobalPosition();return{x:e.x,y:e.y}}let r=e.x??0,i=e.y??0,a=e.parent;for(;a;)r+=a.x??0,i+=a.y??0,a=a.parent;return{x:r,y:i}}function d(e){if(!e)return{x:0,y:0,width:0,height:0};let t=l(e),n=u(e);return{x:n.x,y:n.y,width:t.width,height:t.height}}var f={width:220,height:120};function p(e,t){if(e){if(typeof e==`function`){e(t);return}e.current=t}}function m(e){let o=(0,i.useTheme)(),s=e.theme?(0,i.mergeThemes)(o??{},e.theme):o,{props:u,nestedTheme:m}=(0,i.resolveComponentTheme)({componentName:`Popover`,globalTheme:(0,i.getGlobalThemeDefaults)(),localTheme:s,knownComponents:i.KNOWN_COMPONENTS}),h=(0,i.useRef)(null),g=(0,i.useRef)(null),[_,v]=(0,i.useState)(null),[y,b]=(0,i.useState)(e.defaultOpen??!1),x=e.isOpen!==void 0,S=x?e.isOpen===!0:y,C=r.useOverlayPresence(S),w=e.placement??u.placement??`bottom`,T=e.offset??u.offset??8,E=e.depth??u.depth??1100,D=e.closeOnOutside??u.closeOnOutside??!0,O=e.closeOnEscape??u.closeOnEscape??!0,k=e.viewportPadding??u.viewportPadding??8,A=e.openEffect??u.openEffect??`fadeIn`,j=e.closeEffect??u.closeEffect??`fadeOut`,M=e.openDuration??u.openDuration??120,N=e.closeDuration??u.closeDuration??100,P=e.contentWidth??u.contentWidth,F=e.contentHeight??u.contentHeight,I=(0,i.useViewportSize)(),[L,R]=(0,i.useState)(d(h.current)),z=_?.width??f.width,B=_?.height??f.height,V=P===void 0||F===void 0,H=!V||_!==null,U=e.matchTriggerWidth?Math.max(L.width,P??z):P??z,W=c({anchor:L,content:{width:U,height:F??B},placement:w,offset:T,viewport:I,viewportPadding:k}),G=t=>{e.disabled&&t||(x||b(t),e.onOpenChange?.(t))},K=e=>{e.stopPropagation(),G(!S)},q=e=>{e?.stopPropagation(),G(!1)},J=e.contentProps??{},Y=J.ref,X=J.alpha,Z=e=>{let t=e;g.current=t,p(Y,t)},Q=C.phase===`entered`||C.phase===`exiting`?X:0;return(0,i.useEffect)(()=>{if(!O||!S)return;let e=e=>{e.key===`Escape`&&G(!1)};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[O,S]),(0,i.useEffect)(()=>{if(!C.isPresent)return;let e=!1,t=()=>{if(e)return;let n=d(h.current);R(e=>Math.abs(e.x-n.x)<.5&&Math.abs(e.y-n.y)<.5&&Math.abs(e.width-n.width)<.5&&Math.abs(e.height-n.height)<.5?e:n),i.DeferredLayoutQueue.defer(t)};return i.DeferredLayoutQueue.defer(t),()=>{e=!0}},[C.isPresent]),(0,i.useEffect)(()=>{if(!C.isPresent||!V)return;let e=!1,t=()=>{if(e)return;let n=l(g.current);n.width>0&&n.height>0&&v(e=>e&&Math.abs(e.width-n.width)<.5&&Math.abs(e.height-n.height)<.5?e:{width:n.width,height:n.height}),i.DeferredLayoutQueue.defer(t)};return i.DeferredLayoutQueue.defer(t),()=>{e=!0}},[C.isPresent,V,e.children,P,F]),(0,i.useEffect)(()=>{let e=g.current;if(!(!e||!C.isPresent))if(C.phase===`entering`){if(!H)return;(0,i.stopEffect)(e),e.setVisible?.(!0),(0,i.applyEffect)(e,A,{time:M,onComplete:C.finishEnter})}else C.phase===`exiting`&&((0,i.stopEffect)(e),(0,i.applyEffect)(e,j,{time:N,onComplete:()=>{g.current?.setVisible?.(!1),v(null),C.finishExit()}}))},[C.phase,C.isPresent,H,M,N]),(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(t.View,{...e.triggerProps??{},ref:h,enableGestures:!e.disabled,onTouch:K,children:e.trigger}),C.isPresent&&(0,a.jsxs)(n.Portal,{depth:E,blockEvents:!1,children:[D&&(0,a.jsx)(t.View,{width:I.width,height:I.height,backgroundColor:0,backgroundAlpha:0,onTouch:q,onTouchMove:e=>e.stopPropagation()}),(0,a.jsx)(t.View,{direction:`column`,backgroundColor:u.backgroundColor??1120295,borderColor:u.borderColor??3359061,borderWidth:u.borderWidth??1,cornerRadius:u.cornerRadius??8,padding:u.padding??10,gap:u.gap??8,...J,ref:Z,x:W.x,y:W.y,...e.matchTriggerWidth||P!==void 0?{width:U}:{},...Q===void 0?{}:{alpha:Q},onTouch:e=>e.stopPropagation(),theme:m,children:e.children})]})]})}function h(n){let{items:r,width:o,onSelect:s,isOpen:c,defaultOpen:l,onOpenChange:u,...d}=n,f=(0,i.useTheme)(),p=n.theme?(0,i.mergeThemes)(f??{},n.theme):f,{props:h,nestedTheme:g}=(0,i.resolveComponentTheme)({componentName:`ContextMenu`,globalTheme:(0,i.getGlobalThemeDefaults)(),localTheme:p,knownComponents:i.KNOWN_COMPONENTS}),[_,v]=(0,i.useState)(l??!1),y=c!==void 0,b=y?c===!0:_,x=o??h.width??220,S=h.itemHeight??34,C=e=>{y||v(e),u?.(e)},w=e=>{e.disabled||(e.onSelect?.(),s?.(e),C(!1))};return(0,a.jsx)(m,{...d,isOpen:b,onOpenChange:C,contentWidth:x,contentHeight:Math.max(1,r.length)*S+20,contentProps:{padding:h.padding??6,gap:h.gap??2,backgroundColor:h.backgroundColor,borderColor:h.borderColor,borderWidth:h.borderWidth,cornerRadius:h.cornerRadius,theme:g},children:r.map(n=>{let r=h.textStyle,i=n.disabled?h.disabledTextColor??`#64748b`:n.danger?h.dangerTextColor??`#fecaca`:r?.color??`#f8fafc`;return(0,a.jsxs)(t.View,{width:`fill`,height:S,direction:`row`,alignItems:`center`,justifyContent:`space-between`,backgroundColor:n.disabled?void 0:h.itemBackgroundColor,borderColor:n.disabled?void 0:h.itemBorderColor,cornerRadius:h.itemCornerRadius??4,padding:h.itemPadding??{left:10,right:10},enableGestures:!n.disabled,onTouch:e=>{e.stopPropagation(),w(n)},theme:g,children:[(0,a.jsxs)(t.View,{direction:`row`,alignItems:`center`,gap:h.itemGap??8,children:[n.prefix,(0,a.jsx)(e.Text,{text:n.label,style:{color:i,fontSize:`14px`}})]}),n.suffix]},n.id)})})}exports.ContextMenu=h,exports.Popover=m,exports.calculateOverlayPosition=c;