@fxhash/params 0.0.4 → 0.0.7

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 (194) hide show
  1. package/dist/BaseInput.cjs +13 -0
  2. package/dist/BaseInput.cjs.map +1 -0
  3. package/dist/BaseInput.css +112 -0
  4. package/dist/BaseInput.css.map +1 -0
  5. package/dist/BaseInput.d.ts +12 -0
  6. package/dist/BaseInput.js +13 -0
  7. package/dist/BaseInput.js.map +1 -0
  8. package/dist/Context.cjs +49 -0
  9. package/dist/Context.cjs.map +1 -0
  10. package/dist/Context.d.ts +19 -0
  11. package/dist/Context.js +49 -0
  12. package/dist/Context.js.map +1 -0
  13. package/dist/Controller/BigInt.cjs +10 -0
  14. package/dist/Controller/BigInt.cjs.map +1 -0
  15. package/dist/Controller/BigInt.css +183 -0
  16. package/dist/Controller/BigInt.css.map +1 -0
  17. package/dist/Controller/BigInt.d.ts +8 -0
  18. package/dist/Controller/BigInt.js +10 -0
  19. package/dist/Controller/BigInt.js.map +1 -0
  20. package/dist/Controller/Boolean.cjs +9 -0
  21. package/dist/Controller/Boolean.cjs.map +1 -0
  22. package/dist/Controller/Boolean.css +183 -0
  23. package/dist/Controller/Boolean.css.map +1 -0
  24. package/dist/Controller/Boolean.d.ts +8 -0
  25. package/dist/Controller/Boolean.js +9 -0
  26. package/dist/Controller/Boolean.js.map +1 -0
  27. package/dist/Controller/Bytes.cjs +9 -0
  28. package/dist/Controller/Bytes.cjs.map +1 -0
  29. package/dist/Controller/Bytes.css +191 -0
  30. package/dist/Controller/Bytes.css.map +1 -0
  31. package/dist/Controller/Bytes.d.ts +8 -0
  32. package/dist/Controller/Bytes.js +9 -0
  33. package/dist/Controller/Bytes.js.map +1 -0
  34. package/dist/Controller/Color.cjs +10 -0
  35. package/dist/Controller/Color.cjs.map +1 -0
  36. package/dist/Controller/Color.css +227 -0
  37. package/dist/Controller/Color.css.map +1 -0
  38. package/dist/Controller/Color.d.ts +8 -0
  39. package/dist/Controller/Color.js +10 -0
  40. package/dist/Controller/Color.js.map +1 -0
  41. package/dist/Controller/Controller.cjs +14 -0
  42. package/dist/Controller/Controller.cjs.map +1 -0
  43. package/dist/Controller/Controller.css +183 -0
  44. package/dist/Controller/Controller.css.map +1 -0
  45. package/dist/Controller/Controller.d.ts +41 -0
  46. package/dist/Controller/Controller.js +14 -0
  47. package/dist/Controller/Controller.js.map +1 -0
  48. package/dist/Controller/Invalid.cjs +7 -0
  49. package/dist/Controller/Invalid.cjs.map +1 -0
  50. package/dist/Controller/Invalid.css +48 -0
  51. package/dist/Controller/Invalid.css.map +1 -0
  52. package/dist/Controller/Invalid.d.ts +11 -0
  53. package/dist/Controller/Invalid.js +7 -0
  54. package/dist/Controller/Invalid.js.map +1 -0
  55. package/dist/Controller/Number.cjs +9 -0
  56. package/dist/Controller/Number.cjs.map +1 -0
  57. package/dist/Controller/Number.css +183 -0
  58. package/dist/Controller/Number.css.map +1 -0
  59. package/dist/Controller/Number.d.ts +8 -0
  60. package/dist/Controller/Number.js +9 -0
  61. package/dist/Controller/Number.js.map +1 -0
  62. package/dist/Controller/Param.cjs +21 -0
  63. package/dist/Controller/Param.cjs.map +1 -0
  64. package/dist/Controller/Param.css +283 -0
  65. package/dist/Controller/Param.css.map +1 -0
  66. package/dist/Controller/Param.d.ts +25 -0
  67. package/dist/Controller/Param.js +21 -0
  68. package/dist/Controller/Param.js.map +1 -0
  69. package/dist/Controller/Select.cjs +9 -0
  70. package/dist/Controller/Select.cjs.map +1 -0
  71. package/dist/Controller/Select.css +183 -0
  72. package/dist/Controller/Select.css.map +1 -0
  73. package/dist/Controller/Select.d.ts +8 -0
  74. package/dist/Controller/Select.js +9 -0
  75. package/dist/Controller/Select.js.map +1 -0
  76. package/dist/Controller/String.cjs +9 -0
  77. package/dist/Controller/String.cjs.map +1 -0
  78. package/dist/Controller/String.css +183 -0
  79. package/dist/Controller/String.css.map +1 -0
  80. package/dist/Controller/String.d.ts +8 -0
  81. package/dist/Controller/String.js +9 -0
  82. package/dist/Controller/String.js.map +1 -0
  83. package/dist/Controls.cjs +102 -0
  84. package/dist/Controls.cjs.map +1 -0
  85. package/dist/Controls.css +304 -0
  86. package/dist/Controls.css.map +1 -0
  87. package/dist/Controls.d.ts +17 -0
  88. package/dist/Controls.js +102 -0
  89. package/dist/Controls.js.map +1 -0
  90. package/dist/LockButton/LockButton.cjs +8 -0
  91. package/dist/LockButton/LockButton.cjs.map +1 -0
  92. package/dist/LockButton/LockButton.css +117 -0
  93. package/dist/LockButton/LockButton.css.map +1 -0
  94. package/dist/LockButton/LockButton.d.ts +11 -0
  95. package/dist/LockButton/LockButton.js +8 -0
  96. package/dist/LockButton/LockButton.js.map +1 -0
  97. package/dist/ParamsHistory.cjs +89 -0
  98. package/dist/ParamsHistory.cjs.map +1 -0
  99. package/dist/ParamsHistory.d.ts +22 -0
  100. package/dist/ParamsHistory.js +89 -0
  101. package/dist/ParamsHistory.js.map +1 -0
  102. package/dist/RuntimeContext.cjs +10 -0
  103. package/dist/RuntimeContext.cjs.map +1 -0
  104. package/dist/RuntimeContext.d.ts +44 -0
  105. package/dist/RuntimeContext.js +10 -0
  106. package/dist/RuntimeContext.js.map +1 -0
  107. package/dist/chunk-2BHABOFI.js +43 -0
  108. package/dist/chunk-2BHABOFI.js.map +1 -0
  109. package/dist/chunk-2QIAF3U7.js +39 -0
  110. package/dist/chunk-2QIAF3U7.js.map +1 -0
  111. package/dist/chunk-2QU65L2O.cjs +399 -0
  112. package/dist/chunk-2QU65L2O.cjs.map +1 -0
  113. package/dist/chunk-4FX3ATAX.js +110 -0
  114. package/dist/chunk-4FX3ATAX.js.map +1 -0
  115. package/dist/chunk-4OV7OX5A.js +37 -0
  116. package/dist/chunk-4OV7OX5A.js.map +1 -0
  117. package/dist/chunk-6VMIOQSE.js +34 -0
  118. package/dist/chunk-6VMIOQSE.js.map +1 -0
  119. package/dist/chunk-7NOMBXLG.js +120 -0
  120. package/dist/chunk-7NOMBXLG.js.map +1 -0
  121. package/dist/chunk-CE3TPOSO.js +135 -0
  122. package/dist/chunk-CE3TPOSO.js.map +1 -0
  123. package/dist/chunk-D4RVVQC7.cjs +23 -0
  124. package/dist/chunk-D4RVVQC7.cjs.map +1 -0
  125. package/dist/chunk-DP5CBORY.cjs +46 -0
  126. package/dist/chunk-DP5CBORY.cjs.map +1 -0
  127. package/dist/chunk-EACKNC6C.cjs +103 -0
  128. package/dist/chunk-EACKNC6C.cjs.map +1 -0
  129. package/dist/chunk-EIQHQNZJ.js +115 -0
  130. package/dist/chunk-EIQHQNZJ.js.map +1 -0
  131. package/dist/chunk-FDUCXROE.cjs +120 -0
  132. package/dist/chunk-FDUCXROE.cjs.map +1 -0
  133. package/dist/chunk-H5IMTNFG.js +44 -0
  134. package/dist/chunk-H5IMTNFG.js.map +1 -0
  135. package/dist/chunk-HJBHIE5T.cjs +135 -0
  136. package/dist/chunk-HJBHIE5T.cjs.map +1 -0
  137. package/dist/chunk-JAU4ONF2.cjs +24 -0
  138. package/dist/chunk-JAU4ONF2.cjs.map +1 -0
  139. package/dist/chunk-K4EW6YY3.cjs +34 -0
  140. package/dist/chunk-K4EW6YY3.cjs.map +1 -0
  141. package/dist/chunk-MWP7SJWC.js +103 -0
  142. package/dist/chunk-MWP7SJWC.js.map +1 -0
  143. package/dist/chunk-OFUKQ2TB.cjs +43 -0
  144. package/dist/chunk-OFUKQ2TB.cjs.map +1 -0
  145. package/dist/chunk-PTXBICTZ.js +67 -0
  146. package/dist/chunk-PTXBICTZ.js.map +1 -0
  147. package/dist/chunk-QM6EKPI6.cjs +67 -0
  148. package/dist/chunk-QM6EKPI6.cjs.map +1 -0
  149. package/dist/chunk-SDPENM2L.js +399 -0
  150. package/dist/chunk-SDPENM2L.js.map +1 -0
  151. package/dist/chunk-TKKYM77A.cjs +44 -0
  152. package/dist/chunk-TKKYM77A.cjs.map +1 -0
  153. package/dist/chunk-VED7SCYX.cjs +39 -0
  154. package/dist/chunk-VED7SCYX.cjs.map +1 -0
  155. package/dist/chunk-WQVPKBSN.cjs +110 -0
  156. package/dist/chunk-WQVPKBSN.cjs.map +1 -0
  157. package/dist/chunk-X4O42D2P.cjs +37 -0
  158. package/dist/chunk-X4O42D2P.cjs.map +1 -0
  159. package/dist/chunk-YBV33YPC.cjs +115 -0
  160. package/dist/chunk-YBV33YPC.cjs.map +1 -0
  161. package/dist/chunk-YOS2HCIS.js +23 -0
  162. package/dist/chunk-YOS2HCIS.js.map +1 -0
  163. package/dist/chunk-YYEIYDDF.js +24 -0
  164. package/dist/chunk-YYEIYDDF.js.map +1 -0
  165. package/dist/chunk-ZUITF5XX.js +46 -0
  166. package/dist/chunk-ZUITF5XX.js.map +1 -0
  167. package/dist/hooks.cjs +29 -0
  168. package/dist/hooks.cjs.map +1 -0
  169. package/dist/hooks.d.ts +6 -0
  170. package/dist/hooks.js +29 -0
  171. package/dist/hooks.js.map +1 -0
  172. package/dist/index.cjs +7 -0
  173. package/dist/index.cjs.map +1 -0
  174. package/dist/index.css +112 -0
  175. package/dist/index.css.map +1 -0
  176. package/dist/index.d.ts +3 -0
  177. package/dist/index.js +7 -0
  178. package/dist/index.js.map +1 -0
  179. package/dist/types.cjs +1 -0
  180. package/dist/types.cjs.map +1 -0
  181. package/dist/types.d.ts +100 -0
  182. package/dist/types.js +1 -0
  183. package/dist/types.js.map +1 -0
  184. package/dist/utils.cjs +33 -0
  185. package/dist/utils.cjs.map +1 -0
  186. package/dist/utils.d.ts +50 -0
  187. package/dist/utils.js +33 -0
  188. package/dist/utils.js.map +1 -0
  189. package/dist/validation.cjs +9 -0
  190. package/dist/validation.cjs.map +1 -0
  191. package/dist/validation.d.ts +241 -0
  192. package/dist/validation.js +9 -0
  193. package/dist/validation.js.map +1 -0
  194. package/package.json +1 -1
@@ -0,0 +1,120 @@
1
+ import {
2
+ BaseParamsInput,
3
+ Controller
4
+ } from "./chunk-CE3TPOSO.js";
5
+ import {
6
+ hexToRgba,
7
+ rgbaToHex
8
+ } from "./chunk-SDPENM2L.js";
9
+ import {
10
+ BaseButton
11
+ } from "./chunk-2BHABOFI.js";
12
+
13
+ // src/Controller/Color.tsx
14
+ import {
15
+ useState,
16
+ useEffect,
17
+ useRef,
18
+ useMemo
19
+ } from "react";
20
+
21
+ // src/Controller/Color.module.scss
22
+ var Color_module_default = {
23
+ "squaredButton": "_squaredButton_13v06_1",
24
+ "active": "_active_13v06_9",
25
+ "square": "_square_13v06_1",
26
+ "pickerWrapper": "_pickerWrapper_13v06_24",
27
+ "pickerAbsoluteWrapper": "_pickerAbsoluteWrapper_13v06_28",
28
+ "picker": "_picker_13v06_24",
29
+ "colorful": "_colorful_13v06_42"
30
+ };
31
+
32
+ // src/Controller/Color.tsx
33
+ import { RgbaColorPicker } from "react-colorful";
34
+ import cx from "classnames";
35
+ import { jsx, jsxs } from "react/jsx-runtime";
36
+ function ColorController(props) {
37
+ const ref = useRef(null);
38
+ const { label, id, onChange, value, layout = "box", isCodeDriven } = props;
39
+ const [showPicker, setShowPicker] = useState(false);
40
+ const handleToggleShowPicker = () => {
41
+ setShowPicker((show) => !show);
42
+ };
43
+ const handleInputChange = (e) => {
44
+ onChange(e.target.value);
45
+ };
46
+ useEffect(() => {
47
+ function handleClickOutside(event) {
48
+ if (ref.current && !ref.current?.contains(event.target)) {
49
+ setShowPicker(false);
50
+ }
51
+ }
52
+ window.addEventListener("mousedown", handleClickOutside);
53
+ return () => {
54
+ window.removeEventListener("mousedown", handleClickOutside);
55
+ };
56
+ }, [ref]);
57
+ const handleChangeColor = (newColor) => {
58
+ onChange(rgbaToHex(newColor.r, newColor.g, newColor.b, newColor.a));
59
+ };
60
+ const color = useMemo(() => hexToRgba(value), [value]);
61
+ return /* @__PURE__ */ jsxs(
62
+ Controller,
63
+ {
64
+ id,
65
+ label,
66
+ layout,
67
+ className: Color_module_default.pickerWrapper,
68
+ inputContainerProps: { ref },
69
+ isCodeDriven,
70
+ children: [
71
+ /* @__PURE__ */ jsx(
72
+ BaseButton,
73
+ {
74
+ className: cx(Color_module_default.squaredButton, { [Color_module_default.active]: showPicker }),
75
+ onClick: handleToggleShowPicker,
76
+ disabled: isCodeDriven,
77
+ children: /* @__PURE__ */ jsx(
78
+ "div",
79
+ {
80
+ className: cx(Color_module_default.square, Color_module_default.leftTop),
81
+ style: {
82
+ background: `linear-gradient(-45deg, ${value} 0%, ${value} 50%, ${value.slice(
83
+ 0,
84
+ 7
85
+ )} 50%, ${value.slice(0, 7)} 100%)`
86
+ }
87
+ }
88
+ )
89
+ }
90
+ ),
91
+ /* @__PURE__ */ jsx(
92
+ BaseParamsInput,
93
+ {
94
+ type: "text",
95
+ id: `text-${id}`,
96
+ onChange: handleInputChange,
97
+ value,
98
+ autoComplete: "off",
99
+ maxLength: 9,
100
+ minLength: 2,
101
+ disabled: isCodeDriven
102
+ }
103
+ ),
104
+ showPicker && /* @__PURE__ */ jsx("div", { className: Color_module_default.pickerAbsoluteWrapper, children: /* @__PURE__ */ jsx("div", { className: Color_module_default.picker, children: /* @__PURE__ */ jsx(
105
+ RgbaColorPicker,
106
+ {
107
+ color,
108
+ onChange: handleChangeColor,
109
+ className: Color_module_default.colorful
110
+ }
111
+ ) }) })
112
+ ]
113
+ }
114
+ );
115
+ }
116
+
117
+ export {
118
+ ColorController
119
+ };
120
+ //# sourceMappingURL=chunk-7NOMBXLG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/Controller/Color.tsx","../src/Controller/Color.module.scss"],"sourcesContent":["import {\n useState,\n useEffect,\n useRef,\n LegacyRef,\n MutableRefObject,\n RefObject,\n ChangeEvent,\n useMemo,\n} from \"react\"\nimport { hexToRgba, rgbaToHex } from \"../utils\"\nimport {\n FxParamControllerProps,\n Controller,\n BaseParamsInput,\n} from \"./Controller\"\nimport classes from \"./Color.module.scss\"\nimport { RgbaColor, RgbaColorPicker } from \"react-colorful\"\nimport cx from \"classnames\"\nimport { BaseButton } from \"../BaseInput\"\n\nexport function ColorController(props: FxParamControllerProps<\"color\">) {\n const ref = useRef<HTMLDivElement>(null)\n const { label, id, onChange, value, layout = \"box\", isCodeDriven } = props\n const [showPicker, setShowPicker] = useState(false)\n const handleToggleShowPicker = () => {\n setShowPicker((show) => !show)\n }\n const handleInputChange = (e: ChangeEvent<HTMLInputElement>) => {\n onChange(e.target.value)\n }\n useEffect(() => {\n function handleClickOutside(event: MouseEvent) {\n if (ref.current && !ref.current?.contains(event.target as Node)) {\n setShowPicker(false)\n }\n }\n window.addEventListener(\"mousedown\", handleClickOutside)\n return () => {\n window.removeEventListener(\"mousedown\", handleClickOutside)\n }\n }, [ref])\n const handleChangeColor = (newColor: RgbaColor) => {\n onChange(rgbaToHex(newColor.r, newColor.g, newColor.b, newColor.a))\n }\n const color = useMemo(() => hexToRgba(value), [value])\n\n return (\n <Controller\n id={id}\n label={label}\n layout={layout}\n className={classes.pickerWrapper}\n inputContainerProps={{ ref }}\n isCodeDriven={isCodeDriven}\n >\n <BaseButton\n className={cx(classes.squaredButton, { [classes.active]: showPicker })}\n onClick={handleToggleShowPicker}\n disabled={isCodeDriven}\n >\n <div\n className={cx(classes.square, classes.leftTop)}\n style={{\n background: `linear-gradient(-45deg, ${value} 0%, ${value} 50%, ${value.slice(\n 0,\n 7\n )} 50%, ${value.slice(0, 7)} 100%)`,\n }}\n />\n </BaseButton>\n <BaseParamsInput\n type=\"text\"\n id={`text-${id}`}\n onChange={handleInputChange}\n value={value}\n autoComplete=\"off\"\n maxLength={9}\n minLength={2}\n disabled={isCodeDriven}\n />\n {showPicker && (\n <div className={classes.pickerAbsoluteWrapper}>\n <div className={classes.picker}>\n <RgbaColorPicker\n color={color}\n onChange={handleChangeColor}\n className={classes.colorful}\n />\n </div>\n </div>\n )}\n </Controller>\n )\n}\n","import 'css-chunk:src/Controller/Color.module.scss';export default {\n \"squaredButton\": \"_squaredButton_13v06_1\",\n \"active\": \"_active_13v06_9\",\n \"square\": \"_square_13v06_1\",\n \"pickerWrapper\": \"_pickerWrapper_13v06_24\",\n \"pickerAbsoluteWrapper\": \"_pickerAbsoluteWrapper_13v06_28\",\n \"picker\": \"_picker_13v06_24\",\n \"colorful\": \"_colorful_13v06_42\"\n};"],"mappings":";;;;;;;;;;;;;AAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EAKA;AAAA,OACK;;;ACT6C,IAAO,uBAAQ;AAAA,EACjE,iBAAiB;AAAA,EACjB,UAAU;AAAA,EACV,UAAU;AAAA,EACV,iBAAiB;AAAA,EACjB,yBAAyB;AAAA,EACzB,UAAU;AAAA,EACV,YAAY;AACd;;;ADSA,SAAoB,uBAAuB;AAC3C,OAAO,QAAQ;AA8BX,SAaI,KAbJ;AA3BG,SAAS,gBAAgB,OAAwC;AACtE,QAAM,MAAM,OAAuB,IAAI;AACvC,QAAM,EAAE,OAAO,IAAI,UAAU,OAAO,SAAS,OAAO,aAAa,IAAI;AACrE,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,KAAK;AAClD,QAAM,yBAAyB,MAAM;AACnC,kBAAc,CAAC,SAAS,CAAC,IAAI;AAAA,EAC/B;AACA,QAAM,oBAAoB,CAAC,MAAqC;AAC9D,aAAS,EAAE,OAAO,KAAK;AAAA,EACzB;AACA,YAAU,MAAM;AACd,aAAS,mBAAmB,OAAmB;AAC7C,UAAI,IAAI,WAAW,CAAC,IAAI,SAAS,SAAS,MAAM,MAAc,GAAG;AAC/D,sBAAc,KAAK;AAAA,MACrB;AAAA,IACF;AACA,WAAO,iBAAiB,aAAa,kBAAkB;AACvD,WAAO,MAAM;AACX,aAAO,oBAAoB,aAAa,kBAAkB;AAAA,IAC5D;AAAA,EACF,GAAG,CAAC,GAAG,CAAC;AACR,QAAM,oBAAoB,CAAC,aAAwB;AACjD,aAAS,UAAU,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC,CAAC;AAAA,EACpE;AACA,QAAM,QAAQ,QAAQ,MAAM,UAAU,KAAK,GAAG,CAAC,KAAK,CAAC;AAErD,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW,qBAAQ;AAAA,MACnB,qBAAqB,EAAE,IAAI;AAAA,MAC3B;AAAA,MAEA;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,GAAG,qBAAQ,eAAe,EAAE,CAAC,qBAAQ,MAAM,GAAG,WAAW,CAAC;AAAA,YACrE,SAAS;AAAA,YACT,UAAU;AAAA,YAEV;AAAA,cAAC;AAAA;AAAA,gBACC,WAAW,GAAG,qBAAQ,QAAQ,qBAAQ,OAAO;AAAA,gBAC7C,OAAO;AAAA,kBACL,YAAY,2BAA2B,aAAa,cAAc,MAAM;AAAA,oBACtE;AAAA,oBACA;AAAA,kBACF,UAAU,MAAM,MAAM,GAAG,CAAC;AAAA,gBAC5B;AAAA;AAAA,YACF;AAAA;AAAA,QACF;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,IAAI,QAAQ;AAAA,YACZ,UAAU;AAAA,YACV;AAAA,YACA,cAAa;AAAA,YACb,WAAW;AAAA,YACX,WAAW;AAAA,YACX,UAAU;AAAA;AAAA,QACZ;AAAA,QACC,cACC,oBAAC,SAAI,WAAW,qBAAQ,uBACtB,8BAAC,SAAI,WAAW,qBAAQ,QACtB;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA,UAAU;AAAA,YACV,WAAW,qBAAQ;AAAA;AAAA,QACrB,GACF,GACF;AAAA;AAAA;AAAA,EAEJ;AAEJ;","names":[]}
@@ -0,0 +1,135 @@
1
+ import {
2
+ BaseInput
3
+ } from "./chunk-2BHABOFI.js";
4
+
5
+ // src/Controller/Controller.module.scss
6
+ var Controller_module_default = {
7
+ "controller": "_controller_1rjbl_1",
8
+ "inputContainer": "_inputContainer_1rjbl_12",
9
+ "default": "_default_1rjbl_18",
10
+ "invert": "_invert_1rjbl_31",
11
+ "box": "_box_1rjbl_44",
12
+ "numberInput": "_numberInput_1rjbl_58"
13
+ };
14
+
15
+ // src/Controller/Controller.tsx
16
+ import cx from "classnames";
17
+ import { jsx, jsxs } from "react/jsx-runtime";
18
+ function BaseParamsInput(props) {
19
+ const { id } = props;
20
+ return /* @__PURE__ */ jsx(BaseInput, { name: `${id}-params-search`, autoComplete: "off", ...props });
21
+ }
22
+ function Controller(props) {
23
+ const {
24
+ id,
25
+ label,
26
+ layout = "default",
27
+ className,
28
+ inputContainerProps,
29
+ isCodeDriven
30
+ } = props;
31
+ return /* @__PURE__ */ jsxs(
32
+ "div",
33
+ {
34
+ className: cx(Controller_module_default.controller, Controller_module_default[layout], className),
35
+ title: isCodeDriven ? "This parameter is solely code-driven. Controller is just shown for debugging purposes." : "",
36
+ children: [
37
+ id && /* @__PURE__ */ jsx("label", { htmlFor: id, children: label || id }),
38
+ /* @__PURE__ */ jsx("div", { className: Controller_module_default.inputContainer, ...inputContainerProps, children: props.children })
39
+ ]
40
+ }
41
+ );
42
+ }
43
+ function HTMLInputController(props) {
44
+ const {
45
+ label,
46
+ id,
47
+ onChange,
48
+ value,
49
+ type,
50
+ className,
51
+ inputProps,
52
+ layout = "default",
53
+ isCodeDriven
54
+ } = props;
55
+ return /* @__PURE__ */ jsx(
56
+ Controller,
57
+ {
58
+ id,
59
+ label,
60
+ layout,
61
+ isCodeDriven,
62
+ children: /* @__PURE__ */ jsx(
63
+ BaseParamsInput,
64
+ {
65
+ className,
66
+ type,
67
+ id,
68
+ onChange,
69
+ value,
70
+ disabled: isCodeDriven,
71
+ ...inputProps
72
+ }
73
+ )
74
+ }
75
+ );
76
+ }
77
+ function HTMLInputControllerWithTextInput(props) {
78
+ const {
79
+ label,
80
+ id,
81
+ onChange,
82
+ value,
83
+ type,
84
+ className,
85
+ inputProps = {},
86
+ layout = "default",
87
+ textInputProps,
88
+ isCodeDriven
89
+ } = props;
90
+ return /* @__PURE__ */ jsxs(
91
+ Controller,
92
+ {
93
+ id,
94
+ label,
95
+ layout,
96
+ isCodeDriven,
97
+ children: [
98
+ /* @__PURE__ */ jsx(
99
+ BaseParamsInput,
100
+ {
101
+ className,
102
+ type,
103
+ id,
104
+ onChange,
105
+ value,
106
+ autoComplete: "off",
107
+ disabled: isCodeDriven,
108
+ ...inputProps
109
+ }
110
+ ),
111
+ /* @__PURE__ */ jsx(
112
+ BaseParamsInput,
113
+ {
114
+ type: "text",
115
+ id: `text-${id}`,
116
+ onChange,
117
+ value,
118
+ autoComplete: "off",
119
+ disabled: isCodeDriven,
120
+ ...textInputProps
121
+ }
122
+ )
123
+ ]
124
+ }
125
+ );
126
+ }
127
+
128
+ export {
129
+ Controller_module_default,
130
+ BaseParamsInput,
131
+ Controller,
132
+ HTMLInputController,
133
+ HTMLInputControllerWithTextInput
134
+ };
135
+ //# sourceMappingURL=chunk-CE3TPOSO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/Controller/Controller.module.scss","../src/Controller/Controller.tsx"],"sourcesContent":["import 'css-chunk:src/Controller/Controller.module.scss';export default {\n \"controller\": \"_controller_1rjbl_1\",\n \"inputContainer\": \"_inputContainer_1rjbl_12\",\n \"default\": \"_default_1rjbl_18\",\n \"invert\": \"_invert_1rjbl_31\",\n \"box\": \"_box_1rjbl_44\",\n \"numberInput\": \"_numberInput_1rjbl_58\"\n};","import {\n HTMLInputTypeAttribute,\n InputHTMLAttributes,\n ReactNode,\n RefObject,\n} from \"react\"\nimport { FxParamOptionsMap, FxParamType } from \"../types\"\nimport classes from \"./Controller.module.scss\"\nimport cx from \"classnames\"\nimport { BaseInput } from \"../BaseInput\"\n\n/*\n * Providing a name starting or ending with `search` prevents\n * 1Password extension to appear in the input fields\n * https://1password.community/discussion/comment/606453/#Comment_606453\n */\nexport function BaseParamsInput(props: InputHTMLAttributes<HTMLInputElement>) {\n const { id } = props\n return (\n <BaseInput name={`${id}-params-search`} autoComplete=\"off\" {...props} />\n )\n}\n\nexport type FxParamInputChangeHandler = (e: any) => void\n\nexport interface ControllerProps {\n label?: string\n id?: string\n children: ReactNode\n layout?: \"default\" | \"invert\" | \"box\"\n className?: string\n inputContainerProps?: {\n ref: RefObject<HTMLDivElement>\n }\n isCodeDriven?: boolean\n}\n\nexport function Controller(props: ControllerProps) {\n const {\n id,\n label,\n layout = \"default\",\n className,\n inputContainerProps,\n isCodeDriven,\n } = props\n return (\n <div\n className={cx(classes.controller, classes[layout], className)}\n title={\n isCodeDriven\n ? \"This parameter is solely code-driven. Controller is just shown for debugging purposes.\"\n : \"\"\n }\n >\n {id && <label htmlFor={id}>{label || id}</label>}\n <div className={classes.inputContainer} {...inputContainerProps}>\n {props.children}\n </div>\n </div>\n )\n}\n\nexport interface HTMLInputControllerProps {\n id: string\n value: string\n onChange: FxParamInputChangeHandler\n type: HTMLInputTypeAttribute\n inputProps?: InputHTMLAttributes<HTMLInputElement | HTMLSelectElement>\n className?: string\n label?: string\n layout?: \"default\" | \"invert\" | \"box\"\n isCodeDriven?: boolean\n}\n\nexport type FxParamControllerProps<Type extends FxParamType> = Omit<\n HTMLInputControllerProps,\n \"type\"\n> & {\n value: any\n options?: FxParamOptionsMap[Type]\n onChange: FxParamInputChangeHandler\n}\n\nexport function HTMLInputController(props: HTMLInputControllerProps) {\n const {\n label,\n id,\n onChange,\n value,\n type,\n className,\n inputProps,\n layout = \"default\",\n isCodeDriven,\n } = props\n return (\n <Controller\n id={id}\n label={label}\n layout={layout}\n isCodeDriven={isCodeDriven}\n >\n <BaseParamsInput\n className={className}\n type={type}\n id={id}\n onChange={onChange}\n value={value}\n disabled={isCodeDriven}\n {...inputProps}\n />\n </Controller>\n )\n}\n\nexport interface HTMLInputControllerWithTextInputProps\n extends HTMLInputControllerProps {\n textInputProps?: InputHTMLAttributes<HTMLInputElement>\n}\n\nexport function HTMLInputControllerWithTextInput(\n props: HTMLInputControllerWithTextInputProps\n) {\n const {\n label,\n id,\n onChange,\n value,\n type,\n className,\n inputProps = {},\n layout = \"default\",\n textInputProps,\n isCodeDriven,\n } = props\n return (\n <Controller\n id={id}\n label={label}\n layout={layout}\n isCodeDriven={isCodeDriven}\n >\n <BaseParamsInput\n className={className}\n type={type}\n id={id}\n onChange={onChange}\n value={value}\n autoComplete=\"off\"\n disabled={isCodeDriven}\n {...inputProps}\n />\n <BaseParamsInput\n type=\"text\"\n id={`text-${id}`}\n onChange={onChange}\n value={value}\n autoComplete=\"off\"\n disabled={isCodeDriven}\n {...textInputProps}\n />\n </Controller>\n )\n}\n"],"mappings":";;;;;AAAyD,IAAO,4BAAQ;AAAA,EACtE,cAAc;AAAA,EACd,kBAAkB;AAAA,EAClB,WAAW;AAAA,EACX,UAAU;AAAA,EACV,OAAO;AAAA,EACP,eAAe;AACjB;;;ACCA,OAAO,QAAQ;AAWX,cA4BA,YA5BA;AAHG,SAAS,gBAAgB,OAA8C;AAC5E,QAAM,EAAE,GAAG,IAAI;AACf,SACE,oBAAC,aAAU,MAAM,GAAG,oBAAoB,cAAa,OAAO,GAAG,OAAO;AAE1E;AAgBO,SAAS,WAAW,OAAwB;AACjD,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AACJ,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,0BAAQ,YAAY,0BAAQ,MAAM,GAAG,SAAS;AAAA,MAC5D,OACE,eACI,2FACA;AAAA,MAGL;AAAA,cAAM,oBAAC,WAAM,SAAS,IAAK,mBAAS,IAAG;AAAA,QACxC,oBAAC,SAAI,WAAW,0BAAQ,gBAAiB,GAAG,qBACzC,gBAAM,UACT;AAAA;AAAA;AAAA,EACF;AAEJ;AAuBO,SAAS,oBAAoB,OAAiC;AACnE,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT;AAAA,EACF,IAAI;AACJ,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,UAAU;AAAA,UACT,GAAG;AAAA;AAAA,MACN;AAAA;AAAA,EACF;AAEJ;AAOO,SAAS,iCACd,OACA;AACA,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa,CAAC;AAAA,IACd,SAAS;AAAA,IACT;AAAA,IACA;AAAA,EACF,IAAI;AACJ,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEA;AAAA;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,cAAa;AAAA,YACb,UAAU;AAAA,YACT,GAAG;AAAA;AAAA,QACN;AAAA,QACA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,IAAI,QAAQ;AAAA,YACZ;AAAA,YACA;AAAA,YACA,cAAa;AAAA,YACb,UAAU;AAAA,YACT,GAAG;AAAA;AAAA,QACN;AAAA;AAAA;AAAA,EACF;AAEJ;","names":[]}
@@ -0,0 +1,23 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
+
3
+ var _chunkHJBHIE5Tcjs = require('./chunk-HJBHIE5T.cjs');
4
+
5
+ // src/Controller/Boolean.tsx
6
+ var _jsxruntime = require('react/jsx-runtime');
7
+ function BooleanController(props) {
8
+ const { ...rest } = props;
9
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
10
+ _chunkHJBHIE5Tcjs.HTMLInputController,
11
+ {
12
+ type: "checkbox",
13
+ layout: "box",
14
+ inputProps: { checked: props.value },
15
+ ...rest
16
+ }
17
+ );
18
+ }
19
+
20
+
21
+
22
+ exports.BooleanController = BooleanController;
23
+ //# sourceMappingURL=chunk-D4RVVQC7.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/Controller/Boolean.tsx"],"names":[],"mappings":";;;;;AAMI;AAHG,SAAS,kBAAkB,OAA0C;AAC1E,QAAM,EAAE,GAAG,KAAK,IAAI;AACpB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,QAAO;AAAA,MACP,YAAY,EAAE,SAAS,MAAM,MAAM;AAAA,MAClC,GAAG;AAAA;AAAA,EACN;AAEJ","sourcesContent":["import { FxParamControllerProps, HTMLInputController } from \"./Controller\"\nimport classes from \"./Controller.module.scss\"\n\nexport function BooleanController(props: FxParamControllerProps<\"boolean\">) {\n const { ...rest } = props\n return (\n <HTMLInputController\n type=\"checkbox\"\n layout=\"box\"\n inputProps={{ checked: props.value }}\n {...rest}\n />\n )\n}\n"]}
@@ -0,0 +1,46 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
+
3
+
4
+ var _chunkHJBHIE5Tcjs = require('./chunk-HJBHIE5T.cjs');
5
+
6
+
7
+
8
+ var _chunk2QU65L2Ocjs = require('./chunk-2QU65L2O.cjs');
9
+
10
+ // src/Controller/BigInt.tsx
11
+ var _react = require('react');
12
+ var _jsxruntime = require('react/jsx-runtime');
13
+ function BigIntController(props) {
14
+ const { options, value } = props;
15
+ const min = _react.useMemo.call(void 0, () => {
16
+ if (typeof _optionalChain([options, 'optionalAccess', _ => _.min]) === "undefined")
17
+ return _chunk2QU65L2Ocjs.MIN_SAFE_INT64;
18
+ return options.min;
19
+ }, [_optionalChain([options, 'optionalAccess', _2 => _2.min])]);
20
+ const max = _react.useMemo.call(void 0, () => {
21
+ if (typeof _optionalChain([options, 'optionalAccess', _3 => _3.max]) === "undefined")
22
+ return _chunk2QU65L2Ocjs.MAX_SAFE_INT64;
23
+ return options.max;
24
+ }, [_optionalChain([options, 'optionalAccess', _4 => _4.max])]);
25
+ const stringValue = `${value}`;
26
+ return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
27
+ _chunkHJBHIE5Tcjs.HTMLInputControllerWithTextInput,
28
+ {
29
+ type: "range",
30
+ inputProps: { min: `${min}`, max: `${max}` },
31
+ textInputProps: {
32
+ type: "number",
33
+ min: `${min}`,
34
+ max: `${max}`,
35
+ className: _chunkHJBHIE5Tcjs.Controller_module_default.numberInput
36
+ },
37
+ ...props,
38
+ value: stringValue
39
+ }
40
+ );
41
+ }
42
+
43
+
44
+
45
+ exports.BigIntController = BigIntController;
46
+ //# sourceMappingURL=chunk-DP5CBORY.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/Controller/BigInt.tsx"],"names":[],"mappings":";;;;;;;;;;AAMA,SAAS,eAAe;AAcpB;AAZG,SAAS,iBAAiB,OAAyC;AACxE,QAAM,EAAE,SAAS,MAAM,IAAI;AAC3B,QAAM,MAAM,QAAQ,MAAM;AACxB,QAAI,OAAO,SAAS,QAAQ;AAAa,aAAO;AAChD,WAAO,QAAQ;AAAA,EACjB,GAAG,CAAC,SAAS,GAAG,CAAC;AACjB,QAAM,MAAM,QAAQ,MAAM;AACxB,QAAI,OAAO,SAAS,QAAQ;AAAa,aAAO;AAChD,WAAO,QAAQ;AAAA,EACjB,GAAG,CAAC,SAAS,GAAG,CAAC;AACjB,QAAM,cAAc,GAAG;AACvB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,YAAY,EAAE,KAAK,GAAG,OAAO,KAAK,GAAG,MAAM;AAAA,MAC3C,gBAAgB;AAAA,QACd,MAAM;AAAA,QACN,KAAK,GAAG;AAAA,QACR,KAAK,GAAG;AAAA,QACR,WAAW,0BAAQ;AAAA,MACrB;AAAA,MACC,GAAG;AAAA,MACJ,OAAO;AAAA;AAAA,EACT;AAEJ","sourcesContent":["import {\n FxParamControllerProps,\n HTMLInputControllerWithTextInput,\n} from \"./Controller\"\nimport classes from \"./Controller.module.scss\"\nimport { MAX_SAFE_INT64, MIN_SAFE_INT64 } from \"../utils\"\nimport { useMemo } from \"react\"\n\nexport function BigIntController(props: FxParamControllerProps<\"bigint\">) {\n const { options, value } = props\n const min = useMemo(() => {\n if (typeof options?.min === \"undefined\") return MIN_SAFE_INT64\n return options.min\n }, [options?.min])\n const max = useMemo(() => {\n if (typeof options?.max === \"undefined\") return MAX_SAFE_INT64\n return options.max\n }, [options?.max])\n const stringValue = `${value}`\n return (\n <HTMLInputControllerWithTextInput\n type=\"range\"\n inputProps={{ min: `${min}`, max: `${max}` }}\n textInputProps={{\n type: \"number\",\n min: `${min}`,\n max: `${max}`,\n className: classes.numberInput,\n }}\n {...props}\n value={stringValue}\n />\n )\n}\n"]}
@@ -0,0 +1,103 @@
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// src/validation.ts
2
+ var _zod = require('zod');
3
+ var ControllerTypeSchema = _zod.z.enum([
4
+ "number",
5
+ "bigint",
6
+ "color",
7
+ "string",
8
+ "bytes",
9
+ "boolean",
10
+ "select"
11
+ ]);
12
+ var FxParamOptions_bigintSchema = _zod.z.object({
13
+ min: _zod.z.number().or(_zod.z.bigint()).optional(),
14
+ max: _zod.z.number().or(_zod.z.bigint()).optional()
15
+ });
16
+ var FxParamOptions_numberSchema = _zod.z.object({
17
+ min: _zod.z.number().gte(Number.MIN_SAFE_INTEGER).optional(),
18
+ max: _zod.z.number().lte(Number.MAX_SAFE_INTEGER).optional(),
19
+ step: _zod.z.number().optional()
20
+ });
21
+ var FxParamOptions_stringSchema = _zod.z.object({
22
+ minLength: _zod.z.number().gte(0).optional(),
23
+ maxLength: _zod.z.number().optional()
24
+ });
25
+ var FxParamOptions_bytesSchema = _zod.z.object({
26
+ length: _zod.z.number().gt(0)
27
+ });
28
+ var FxParamOptions_selectSchema = _zod.z.object({
29
+ options: _zod.z.string().array().nonempty()
30
+ });
31
+ var BaseControllerDefinitionSchema = _zod.z.object({
32
+ id: _zod.z.string(),
33
+ name: _zod.z.string().optional(),
34
+ exposedAsFeature: _zod.z.boolean().optional()
35
+ });
36
+ var StringControllerSchema = BaseControllerDefinitionSchema.extend({
37
+ type: _zod.z.literal(ControllerTypeSchema.enum.string),
38
+ options: FxParamOptions_stringSchema.optional(),
39
+ default: _zod.z.string().optional()
40
+ });
41
+ var BytesControllerSchema = BaseControllerDefinitionSchema.extend({
42
+ type: _zod.z.literal(ControllerTypeSchema.enum.bytes),
43
+ options: FxParamOptions_bytesSchema,
44
+ default: _zod.z.any().optional(),
45
+ update: _zod.z.literal("code-driven", {
46
+ invalid_type_error: "Bytes parameters must be code-driven",
47
+ required_error: "Bytes parameters must be code-driven"
48
+ })
49
+ });
50
+ var NumberControllerSchema = BaseControllerDefinitionSchema.extend({
51
+ type: _zod.z.literal(ControllerTypeSchema.enum.number),
52
+ options: FxParamOptions_numberSchema.optional(),
53
+ default: _zod.z.number().gte(Number.MIN_SAFE_INTEGER).lte(Number.MAX_SAFE_INTEGER).optional()
54
+ });
55
+ var BigIntControllerSchema = BaseControllerDefinitionSchema.extend({
56
+ type: _zod.z.literal(ControllerTypeSchema.enum.bigint),
57
+ options: FxParamOptions_bigintSchema.optional(),
58
+ default: _zod.z.bigint().optional()
59
+ });
60
+ var SelectControllerSchema = BaseControllerDefinitionSchema.extend({
61
+ type: _zod.z.literal(ControllerTypeSchema.enum.select),
62
+ options: FxParamOptions_selectSchema,
63
+ default: _zod.z.string().optional()
64
+ });
65
+ var BooleanControllerSchema = BaseControllerDefinitionSchema.extend({
66
+ type: _zod.z.literal(ControllerTypeSchema.enum.boolean),
67
+ options: _zod.z.undefined(),
68
+ default: _zod.z.boolean().optional()
69
+ });
70
+ var ColorControllerSchema = BaseControllerDefinitionSchema.extend({
71
+ type: _zod.z.literal(ControllerTypeSchema.enum.color),
72
+ options: _zod.z.undefined(),
73
+ default: _zod.z.string().optional()
74
+ });
75
+ var ControllerDefinitionSchema = _zod.z.union([
76
+ StringControllerSchema,
77
+ NumberControllerSchema,
78
+ BigIntControllerSchema,
79
+ SelectControllerSchema,
80
+ BytesControllerSchema,
81
+ BooleanControllerSchema,
82
+ ColorControllerSchema
83
+ ]);
84
+ var controllerSchema = {
85
+ number: NumberControllerSchema,
86
+ bigint: BigIntControllerSchema,
87
+ color: ColorControllerSchema,
88
+ string: StringControllerSchema,
89
+ bytes: BytesControllerSchema,
90
+ boolean: BooleanControllerSchema,
91
+ select: SelectControllerSchema
92
+ };
93
+ function validateParameterDefinition(parameterDefinition) {
94
+ return _optionalChain([controllerSchema, 'access', _ => _[parameterDefinition.type], 'optionalAccess', _2 => _2.safeParse, 'call', _3 => _3(
95
+ parameterDefinition
96
+ )]);
97
+ }
98
+
99
+
100
+
101
+
102
+ exports.BaseControllerDefinitionSchema = BaseControllerDefinitionSchema; exports.validateParameterDefinition = validateParameterDefinition;
103
+ //# sourceMappingURL=chunk-EACKNC6C.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/validation.ts"],"names":[],"mappings":"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","sourcesContent":["import { SafeParseError, SafeParseSuccess, z } from \"zod\"\nimport { FxParamDefinition, FxParamType } from \"./types\"\n\nconst ControllerTypeSchema = z.enum([\n \"number\",\n \"bigint\",\n \"color\",\n \"string\",\n \"bytes\",\n \"boolean\",\n \"select\",\n])\n\nconst FxParamOptions_bigintSchema = z.object({\n min: z.number().or(z.bigint()).optional(),\n max: z.number().or(z.bigint()).optional(),\n})\n\nconst FxParamOptions_numberSchema = z.object({\n min: z.number().gte(Number.MIN_SAFE_INTEGER).optional(),\n max: z.number().lte(Number.MAX_SAFE_INTEGER).optional(),\n step: z.number().optional(),\n})\n\nconst FxParamOptions_stringSchema = z.object({\n minLength: z.number().gte(0).optional(),\n maxLength: z.number().optional(),\n})\n\nconst FxParamOptions_bytesSchema = z.object({\n length: z.number().gt(0),\n})\n\nconst FxParamOptions_selectSchema = z.object({\n options: z.string().array().nonempty(),\n})\n\nexport const BaseControllerDefinitionSchema = z.object({\n id: z.string(),\n name: z.string().optional(),\n exposedAsFeature: z.boolean().optional(),\n})\n\nconst StringControllerSchema = BaseControllerDefinitionSchema.extend({\n type: z.literal(ControllerTypeSchema.enum.string),\n options: FxParamOptions_stringSchema.optional(),\n default: z.string().optional(),\n})\n\nconst BytesControllerSchema = BaseControllerDefinitionSchema.extend({\n type: z.literal(ControllerTypeSchema.enum.bytes),\n options: FxParamOptions_bytesSchema,\n default: z.any().optional(),\n update: z.literal(\"code-driven\", {\n invalid_type_error: \"Bytes parameters must be code-driven\",\n required_error: \"Bytes parameters must be code-driven\",\n }),\n})\n\nconst NumberControllerSchema = BaseControllerDefinitionSchema.extend({\n type: z.literal(ControllerTypeSchema.enum.number),\n options: FxParamOptions_numberSchema.optional(),\n default: z\n .number()\n .gte(Number.MIN_SAFE_INTEGER)\n .lte(Number.MAX_SAFE_INTEGER)\n .optional(),\n})\n\nconst BigIntControllerSchema = BaseControllerDefinitionSchema.extend({\n type: z.literal(ControllerTypeSchema.enum.bigint),\n options: FxParamOptions_bigintSchema.optional(),\n default: z.bigint().optional(),\n})\n\nconst SelectControllerSchema = BaseControllerDefinitionSchema.extend({\n type: z.literal(ControllerTypeSchema.enum.select),\n options: FxParamOptions_selectSchema,\n default: z.string().optional(),\n})\n\nconst BooleanControllerSchema = BaseControllerDefinitionSchema.extend({\n type: z.literal(ControllerTypeSchema.enum.boolean),\n options: z.undefined(),\n default: z.boolean().optional(),\n})\n\nconst ColorControllerSchema = BaseControllerDefinitionSchema.extend({\n type: z.literal(ControllerTypeSchema.enum.color),\n options: z.undefined(),\n default: z.string().optional(),\n})\n\nconst ControllerDefinitionSchema = z.union([\n StringControllerSchema,\n NumberControllerSchema,\n BigIntControllerSchema,\n SelectControllerSchema,\n BytesControllerSchema,\n BooleanControllerSchema,\n ColorControllerSchema,\n])\n\nexport type ControllerDefinitionSchemaType = z.infer<\n typeof ControllerDefinitionSchema\n>\n\nconst controllerSchema = {\n number: NumberControllerSchema,\n bigint: BigIntControllerSchema,\n color: ColorControllerSchema,\n string: StringControllerSchema,\n bytes: BytesControllerSchema,\n boolean: BooleanControllerSchema,\n select: SelectControllerSchema,\n}\n\nexport function validateParameterDefinition(\n parameterDefinition: FxParamDefinition<FxParamType>\n):\n | SafeParseError<ControllerDefinitionSchemaType>\n | SafeParseSuccess<ControllerDefinitionSchemaType>\n | undefined {\n return controllerSchema[parameterDefinition.type]?.safeParse(\n parameterDefinition\n )\n}\n"]}
@@ -0,0 +1,115 @@
1
+ import {
2
+ jsonStringifyBigint,
3
+ sumBytesParams
4
+ } from "./chunk-SDPENM2L.js";
5
+
6
+ // src/RuntimeContext.tsx
7
+ import { useMemo, useState } from "react";
8
+ import { createContext } from "react";
9
+ import sha1 from "sha1";
10
+ import { jsx } from "react/jsx-runtime";
11
+ function hashRuntimeState(state) {
12
+ return sha1(jsonStringifyBigint(state));
13
+ }
14
+ function hashRuntimeHardState(state, definition) {
15
+ const staticParams = {};
16
+ for (const id in state.params) {
17
+ const def = definition?.find((def2) => def2.id === id);
18
+ if (!def || !def.update || def.update === "page-reload") {
19
+ staticParams[id] = state.params[id];
20
+ }
21
+ }
22
+ return hashRuntimeState({
23
+ ...state,
24
+ params: staticParams
25
+ });
26
+ }
27
+ var defaultRuntimeContext = {
28
+ state: {
29
+ hash: "",
30
+ minter: "",
31
+ params: {},
32
+ update: () => {
33
+ },
34
+ iteration: 1,
35
+ context: "standalone"
36
+ },
37
+ definition: {
38
+ params: null,
39
+ version: null,
40
+ update: () => {
41
+ }
42
+ },
43
+ details: {
44
+ paramsByteSize: 0,
45
+ stateHash: {
46
+ soft: "",
47
+ hard: ""
48
+ }
49
+ }
50
+ };
51
+ var RuntimeContext = createContext(defaultRuntimeContext);
52
+ function RuntimeProvider({ children }) {
53
+ const [state, setState] = useState({
54
+ hash: "",
55
+ minter: "",
56
+ params: {},
57
+ iteration: 1,
58
+ context: new URLSearchParams(window.location.search).get(
59
+ "fxcontext"
60
+ ) || "standalone"
61
+ });
62
+ const [definition, setDefinition] = useState({
63
+ params: null,
64
+ version: null
65
+ });
66
+ const update = (data) => {
67
+ setState((lastState) => ({
68
+ ...lastState,
69
+ ...data
70
+ }));
71
+ };
72
+ const updateDefinition = (data) => {
73
+ setDefinition((lastDefinition) => ({
74
+ ...lastDefinition,
75
+ ...data
76
+ }));
77
+ };
78
+ const definitionEnhanced = useMemo(
79
+ () => ({
80
+ ...definition,
81
+ params: definition.params?.map((p) => ({
82
+ ...p,
83
+ version: definition.version || "0"
84
+ })) || null
85
+ }),
86
+ [definition]
87
+ );
88
+ const ctx = {
89
+ state: {
90
+ ...state,
91
+ update
92
+ },
93
+ definition: {
94
+ ...definitionEnhanced,
95
+ update: updateDefinition
96
+ },
97
+ details: useMemo(
98
+ () => ({
99
+ paramsByteSize: sumBytesParams(definition.params || []),
100
+ stateHash: {
101
+ soft: hashRuntimeState(state),
102
+ hard: hashRuntimeHardState(state, definition.params)
103
+ }
104
+ }),
105
+ [state, definition.params]
106
+ )
107
+ };
108
+ return /* @__PURE__ */ jsx(RuntimeContext.Provider, { value: ctx, children });
109
+ }
110
+
111
+ export {
112
+ RuntimeContext,
113
+ RuntimeProvider
114
+ };
115
+ //# sourceMappingURL=chunk-EIQHQNZJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/RuntimeContext.tsx"],"sourcesContent":["import {\n FxParamDefinition,\n FxParamType,\n FxParamsData,\n} from \"types\"\nimport { PropsWithChildren, useMemo, useState } from \"react\"\nimport { createContext } from \"react\"\nimport sha1 from \"sha1\"\nimport { jsonStringifyBigint, sumBytesParams } from \"utils\"\n\nexport type TUpdateStateFn<T> = (data: Partial<T>) => void\n\nexport type TUpdateableState<T> = T & {\n update: TUpdateStateFn<T>\n}\n/**\n * The Runtime Context is responsible for managing the state of a project ran\n * in a frame. It centralizes any source of data to derive the project and\n * facilitate their manipulation from the outside.\n *\n * See comments on IRuntimeContext for more details.\n */\n\nexport type TExecutionContext = \"minting\" | \"standalone\" | \"capture\"\n\nexport interface RuntimeState {\n hash: string\n minter: string\n params: FxParamsData\n iteration: number\n context: TExecutionContext\n}\n\nexport interface RuntimeDefinition {\n params: FxParamDefinition<FxParamType>[] | null\n version: string | null\n}\n\n/**\n * Hashes a runtime state using sha1\n */\nfunction hashRuntimeState(state: RuntimeState): string {\n return sha1(jsonStringifyBigint(state))\n}\n\n/**\n * Hashes the hard-refresh properties of a runtime state:\n * - hash\n * - minter address\n * - params in update mode \"page-reload\"\n */\nfunction hashRuntimeHardState(\n state: RuntimeState,\n definition: FxParamDefinition<FxParamType>[] | null\n): string {\n const staticParams: FxParamsData = {}\n for (const id in state.params) {\n const def = definition?.find((def) => def.id === id)\n // if no definition, or update == \"page-reload\" (which is default value)\n if (!def || !def.update || def.update === \"page-reload\") {\n staticParams[id] = state.params[id]\n }\n }\n return hashRuntimeState({\n ...state,\n params: staticParams,\n })\n}\n\nexport interface IRuntimeContext {\n // the base state of the runtime\n state: TUpdateableState<RuntimeState>\n // definitions, used to manipulate the state\n definition: TUpdateableState<RuntimeDefinition>\n // extra details derived from the state & definition\n details: {\n paramsByteSize: number\n stateHash: {\n soft: string\n hard: string\n }\n }\n}\n\nconst defaultRuntimeContext: IRuntimeContext = {\n state: {\n hash: \"\",\n minter: \"\",\n params: {},\n update: () => {},\n iteration: 1,\n context: \"standalone\",\n },\n definition: {\n params: null,\n version: null,\n update: () => {},\n },\n details: {\n paramsByteSize: 0,\n stateHash: {\n soft: \"\",\n hard: \"\",\n },\n },\n}\n\nexport const RuntimeContext = createContext(defaultRuntimeContext)\n\ntype Props = PropsWithChildren<any>\nexport function RuntimeProvider({ children }: Props) {\n const [state, setState] = useState<RuntimeState>({\n hash: \"\",\n minter: \"\",\n params: {},\n iteration: 1,\n context:\n (new URLSearchParams(window.location.search).get(\n \"fxcontext\"\n ) as TExecutionContext) || \"standalone\",\n })\n const [definition, setDefinition] = useState<RuntimeDefinition>({\n params: null,\n version: null,\n })\n\n const update: TUpdateStateFn<RuntimeState> = (data) => {\n setState((lastState) => ({\n ...lastState,\n ...data,\n }))\n }\n\n const updateDefinition: TUpdateStateFn<RuntimeDefinition> = (data) => {\n setDefinition((lastDefinition) => ({\n ...lastDefinition,\n ...data,\n }))\n }\n\n // enhance each param definition with the version (useful for serialization)\n const definitionEnhanced = useMemo(\n () => ({\n ...definition,\n params:\n definition.params?.map((p: FxParamDefinition<FxParamType>) => ({\n ...p,\n version: definition.version || \"0\",\n })) || null,\n }),\n [definition]\n )\n\n const ctx: IRuntimeContext = {\n state: {\n ...state,\n update,\n },\n definition: {\n ...definitionEnhanced,\n update: updateDefinition,\n },\n details: useMemo(\n () => ({\n paramsByteSize: sumBytesParams(definition.params || []),\n stateHash: {\n soft: hashRuntimeState(state),\n hard: hashRuntimeHardState(state, definition.params),\n },\n }),\n [state, definition.params]\n ),\n }\n\n return (\n <RuntimeContext.Provider value={ctx}>{children}</RuntimeContext.Provider>\n )\n}\n"],"mappings":";;;;;;AAKA,SAA4B,SAAS,gBAAgB;AACrD,SAAS,qBAAqB;AAC9B,OAAO,UAAU;AAwKb;AAtIJ,SAAS,iBAAiB,OAA6B;AACrD,SAAO,KAAK,oBAAoB,KAAK,CAAC;AACxC;AAQA,SAAS,qBACP,OACA,YACQ;AACR,QAAM,eAA6B,CAAC;AACpC,aAAW,MAAM,MAAM,QAAQ;AAC7B,UAAM,MAAM,YAAY,KAAK,CAACA,SAAQA,KAAI,OAAO,EAAE;AAEnD,QAAI,CAAC,OAAO,CAAC,IAAI,UAAU,IAAI,WAAW,eAAe;AACvD,mBAAa,EAAE,IAAI,MAAM,OAAO,EAAE;AAAA,IACpC;AAAA,EACF;AACA,SAAO,iBAAiB;AAAA,IACtB,GAAG;AAAA,IACH,QAAQ;AAAA,EACV,CAAC;AACH;AAiBA,IAAM,wBAAyC;AAAA,EAC7C,OAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ,CAAC;AAAA,IACT,QAAQ,MAAM;AAAA,IAAC;AAAA,IACf,WAAW;AAAA,IACX,SAAS;AAAA,EACX;AAAA,EACA,YAAY;AAAA,IACV,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,QAAQ,MAAM;AAAA,IAAC;AAAA,EACjB;AAAA,EACA,SAAS;AAAA,IACP,gBAAgB;AAAA,IAChB,WAAW;AAAA,MACT,MAAM;AAAA,MACN,MAAM;AAAA,IACR;AAAA,EACF;AACF;AAEO,IAAM,iBAAiB,cAAc,qBAAqB;AAG1D,SAAS,gBAAgB,EAAE,SAAS,GAAU;AACnD,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAuB;AAAA,IAC/C,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,QAAQ,CAAC;AAAA,IACT,WAAW;AAAA,IACX,SACG,IAAI,gBAAgB,OAAO,SAAS,MAAM,EAAE;AAAA,MAC3C;AAAA,IACF,KAA2B;AAAA,EAC/B,CAAC;AACD,QAAM,CAAC,YAAY,aAAa,IAAI,SAA4B;AAAA,IAC9D,QAAQ;AAAA,IACR,SAAS;AAAA,EACX,CAAC;AAED,QAAM,SAAuC,CAAC,SAAS;AACrD,aAAS,CAAC,eAAe;AAAA,MACvB,GAAG;AAAA,MACH,GAAG;AAAA,IACL,EAAE;AAAA,EACJ;AAEA,QAAM,mBAAsD,CAAC,SAAS;AACpE,kBAAc,CAAC,oBAAoB;AAAA,MACjC,GAAG;AAAA,MACH,GAAG;AAAA,IACL,EAAE;AAAA,EACJ;AAGA,QAAM,qBAAqB;AAAA,IACzB,OAAO;AAAA,MACL,GAAG;AAAA,MACH,QACE,WAAW,QAAQ,IAAI,CAAC,OAAuC;AAAA,QAC7D,GAAG;AAAA,QACH,SAAS,WAAW,WAAW;AAAA,MACjC,EAAE,KAAK;AAAA,IACX;AAAA,IACA,CAAC,UAAU;AAAA,EACb;AAEA,QAAM,MAAuB;AAAA,IAC3B,OAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,IACF;AAAA,IACA,YAAY;AAAA,MACV,GAAG;AAAA,MACH,QAAQ;AAAA,IACV;AAAA,IACA,SAAS;AAAA,MACP,OAAO;AAAA,QACL,gBAAgB,eAAe,WAAW,UAAU,CAAC,CAAC;AAAA,QACtD,WAAW;AAAA,UACT,MAAM,iBAAiB,KAAK;AAAA,UAC5B,MAAM,qBAAqB,OAAO,WAAW,MAAM;AAAA,QACrD;AAAA,MACF;AAAA,MACA,CAAC,OAAO,WAAW,MAAM;AAAA,IAC3B;AAAA,EACF;AAEA,SACE,oBAAC,eAAe,UAAf,EAAwB,OAAO,KAAM,UAAS;AAEnD;","names":["def"]}