@canvas-components/react-components 0.3.17 → 0.3.19

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.
package/dist/index.cjs CHANGED
@@ -738,7 +738,7 @@ var ReactVirtualList = React.forwardRef(function ReactVirtualListInner(props, re
738
738
  });
739
739
 
740
740
  // src/components/select/style.css
741
- styleInject('@import "../../styles/variables.css";\n.canvas-react-select-wrap {\n position: relative;\n display: inline-flex;\n width: 100%;\n height: 100%;\n}\n.canvas-react-select {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n width: 100%;\n min-width: 0;\n height: var(--canvas-react-control-height);\n padding: var(--canvas-react-control-padding-block, 0px) var(--canvas-react-control-padding-inline, 11px);\n border: 1px solid var(--canvas-react-color-border);\n border-radius: var(--canvas-react-radius-sm);\n background: var(--canvas-react-color-bg);\n color: var(--canvas-react-color-text);\n font-size: var(--canvas-react-font-size);\n outline: none;\n cursor: pointer;\n transition:\n border-color 0.2s ease,\n box-shadow 0.2s ease,\n background-color 0.2s ease;\n}\n.canvas-react-select-input-wrap {\n flex: 1 1 auto;\n width: 100%;\n height: 100%;\n border: none;\n background: transparent;\n box-shadow: none;\n}\n.canvas-react-select .canvas-react-input-affix-wrapper {\n height: 100%;\n min-height: 0;\n}\n.canvas-react-select-input-wrap:hover,\n.canvas-react-select-input-wrap:focus-within {\n border-color: transparent;\n box-shadow: none;\n}\n.canvas-react-select-input {\n width: 100%;\n min-width: 0;\n height: 100%;\n padding: 0;\n line-height: normal;\n}\n.canvas-react-select-input::placeholder {\n color: #9ca3af;\n}\n.canvas-react-select:hover {\n border-color: var(--canvas-react-color-primary-hover);\n}\n.canvas-react-select:focus,\n.canvas-react-select:focus-within {\n border-color: var(--canvas-react-color-primary);\n box-shadow: var(--canvas-react-shadow-focus);\n}\n.canvas-react-select-open {\n border-color: var(--canvas-react-color-primary);\n box-shadow: var(--canvas-react-shadow-focus);\n}\n.canvas-react-select-disabled {\n color: #9ca3af;\n background: #fafafa;\n cursor: not-allowed;\n}\n.canvas-react-select-actions {\n position: relative;\n display: inline-flex;\n flex: 0 0 auto;\n align-items: center;\n justify-content: center;\n width: 1em;\n min-width: 12px;\n height: 1em;\n min-height: 12px;\n margin-left: max(6px, calc(var(--canvas-react-control-padding-inline, 11px) * 0.5));\n}\n.canvas-react-select-arrow {\n pointer-events: none;\n position: absolute;\n top: 50%;\n left: 50%;\n width: 0.5em;\n height: 0.5em;\n min-width: 6px;\n min-height: 6px;\n border-right: 1.5px solid var(--canvas-react-color-text-muted);\n border-bottom: 1.5px solid var(--canvas-react-color-text-muted);\n transform: translate(-50%, -58%) rotate(45deg);\n opacity: 1;\n transition:\n opacity 0.18s ease,\n transform 0.18s ease,\n border-color 0.18s ease;\n}\n.canvas-react-select:hover .canvas-react-select-arrow,\n.canvas-react-select-open .canvas-react-select-arrow {\n border-color: #6b7280;\n}\n.canvas-react-select-arrow-open {\n border-color: #6b7280;\n transform: translate(-50%, -42%) rotate(225deg);\n}\n.canvas-react-select-clear {\n position: absolute;\n top: 50%;\n left: 50%;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 12px;\n height: 12px;\n padding: 0;\n border: none;\n background: transparent;\n color: #9ca3af;\n opacity: 0;\n pointer-events: none;\n cursor: pointer;\n transform: translate(-50%, -50%) rotate(0deg);\n transition:\n color 0.2s ease,\n opacity 0.2s ease,\n transform 0.18s ease;\n}\n.canvas-react-select-clear:hover {\n color: #6b7280;\n transform: translate(-50%, -50%) rotate(90deg);\n}\n.canvas-react-select:hover .canvas-react-select-clear,\n.canvas-react-select-open .canvas-react-select-clear,\n.canvas-react-select:focus-within .canvas-react-select-clear,\n.canvas-react-cascader:hover .canvas-react-select-clear,\n.canvas-react-cascader-open .canvas-react-select-clear,\n.canvas-react-cascader:focus-within .canvas-react-select-clear {\n opacity: 1;\n pointer-events: auto;\n}\n.canvas-react-select:hover .canvas-react-select-actions-clearable .canvas-react-select-arrow,\n.canvas-react-select-open .canvas-react-select-actions-clearable .canvas-react-select-arrow,\n.canvas-react-select:focus-within .canvas-react-select-actions-clearable .canvas-react-select-arrow,\n.canvas-react-cascader:hover .canvas-react-select-actions-clearable .canvas-react-select-arrow,\n.canvas-react-cascader-open .canvas-react-select-actions-clearable .canvas-react-select-arrow,\n.canvas-react-cascader:focus-within .canvas-react-select-actions-clearable .canvas-react-select-arrow {\n opacity: 0;\n}\n.canvas-react-select-clear-icon,\n.canvas-react-select-clear-icon::before {\n position: absolute;\n top: 50%;\n left: 50%;\n width: 8px;\n height: 1.25px;\n margin-top: -0.625px;\n margin-left: -4px;\n border-radius: 999px;\n background: currentColor;\n content: "";\n}\n.canvas-react-select-clear-icon {\n transform: rotate(45deg);\n}\n.canvas-react-select-clear-icon::before {\n transform: rotate(90deg);\n}\n.canvas-react-select-dropdown {\n padding: 4px;\n}\n.canvas-react-select-list {\n position: relative;\n overflow-y: auto;\n}\n.canvas-react-select-list-inner {\n position: relative;\n}\n.canvas-react-select-option {\n display: flex;\n align-items: center;\n box-sizing: border-box;\n width: 100%;\n padding: 0 11px;\n border-radius: var(--canvas-react-radius-sm);\n color: var(--canvas-react-color-text);\n font-size: var(--canvas-react-font-size);\n cursor: pointer;\n}\n.canvas-react-select-option:hover,\n.canvas-react-select-option-active {\n background: var(--canvas-react-color-bg-hover);\n}\n.canvas-react-select-option-selected {\n background: var(--canvas-react-color-bg-active);\n}\n.canvas-react-select-option-searching {\n color: var(--canvas-react-color-text);\n}\n.canvas-react-select-option-searching:hover,\n.canvas-react-select-option-searching.canvas-react-select-option-active {\n background: var(--canvas-react-color-bg-active);\n}\n.canvas-react-select-option-disabled {\n color: #9ca3af;\n cursor: not-allowed;\n}\n.canvas-react-select-option-highlight {\n color: var(--canvas-react-color-primary);\n font-weight: 600;\n}\n.canvas-react-select-option-disabled .canvas-react-select-option-highlight {\n color: inherit;\n}\n.canvas-react-select-empty {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 0 11px;\n color: #9ca3af;\n font-size: var(--canvas-react-font-size);\n}\n');
741
+ styleInject('@import "../../styles/variables.css";\n.canvas-react-select-wrap {\n position: relative;\n display: inline-flex;\n width: 100%;\n height: 100%;\n}\n.canvas-react-select {\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n width: 100%;\n min-width: 0;\n height: var(--canvas-react-control-height);\n padding: var(--canvas-react-control-padding-block, 0px) var(--canvas-react-control-padding-inline, 11px);\n border: 1px solid var(--canvas-react-color-border);\n border-radius: var(--canvas-react-radius-sm);\n background: var(--canvas-react-color-bg);\n color: var(--canvas-react-color-text);\n font-size: var(--canvas-react-font-size);\n outline: none;\n cursor: pointer;\n transition:\n border-color 0.2s ease,\n box-shadow 0.2s ease,\n background-color 0.2s ease;\n}\n.canvas-react-select-input-wrap {\n flex: 1 1 auto;\n width: 100%;\n height: 100%;\n border: none;\n background: transparent;\n box-shadow: none;\n}\n.canvas-react-select .canvas-react-input-affix-wrapper {\n height: 100%;\n min-height: 0;\n}\n.canvas-react-select-input-wrap:hover,\n.canvas-react-select-input-wrap:focus-within {\n border-color: transparent;\n box-shadow: none;\n}\n.canvas-react-select-input {\n width: 100%;\n min-width: 0;\n height: 100%;\n padding: 0;\n line-height: normal;\n}\n.canvas-react-select-input::placeholder {\n color: #9ca3af;\n}\n.canvas-react-select:hover {\n border-color: var(--canvas-react-color-primary-hover);\n}\n.canvas-react-select:focus,\n.canvas-react-select:focus-within {\n border-color: var(--canvas-react-color-primary);\n box-shadow: var(--canvas-react-shadow-focus);\n}\n.canvas-react-select-open {\n border-color: var(--canvas-react-color-primary);\n box-shadow: var(--canvas-react-shadow-focus);\n}\n.canvas-react-select-disabled {\n color: #9ca3af;\n background: #fafafa;\n cursor: not-allowed;\n}\n.canvas-react-select-actions {\n position: relative;\n display: inline-flex;\n flex: 0 0 auto;\n align-items: center;\n justify-content: center;\n width: 1em;\n min-width: 12px;\n height: 1em;\n min-height: 12px;\n margin-left: max(6px, calc(var(--canvas-react-control-padding-inline, 11px) * 0.5));\n}\n.canvas-react-select-arrow {\n pointer-events: none;\n position: absolute;\n top: 50%;\n left: 50%;\n width: 0.5em;\n height: 0.5em;\n min-width: 6px;\n min-height: 6px;\n border-right: 1.5px solid var(--canvas-react-color-text-muted);\n border-bottom: 1.5px solid var(--canvas-react-color-text-muted);\n transform: translate(-50%, -58%) rotate(45deg);\n opacity: 1;\n transition:\n opacity 0.18s ease,\n transform 0.18s ease,\n border-color 0.18s ease;\n}\n.canvas-react-select:hover .canvas-react-select-arrow,\n.canvas-react-select-open .canvas-react-select-arrow {\n border-color: #6b7280;\n}\n.canvas-react-select-arrow-open {\n border-color: #6b7280;\n transform: translate(-50%, -42%) rotate(225deg);\n}\n.canvas-react-select-clear {\n position: absolute;\n top: 50%;\n left: 50%;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 12px;\n height: 12px;\n padding: 0;\n border: none;\n background: transparent;\n color: #9ca3af;\n opacity: 0;\n pointer-events: none;\n cursor: pointer;\n transform: translate(-50%, -50%) rotate(0deg);\n transition:\n color 0.2s ease,\n opacity 0.2s ease,\n transform 0.18s ease;\n}\n.canvas-react-select-clear:hover {\n color: #6b7280;\n transform: translate(-50%, -50%) rotate(90deg);\n}\n.canvas-react-select:hover .canvas-react-select-clear,\n.canvas-react-select-open .canvas-react-select-clear,\n.canvas-react-select:focus-within .canvas-react-select-clear,\n.canvas-react-cascader:hover .canvas-react-select-clear,\n.canvas-react-cascader-open .canvas-react-select-clear,\n.canvas-react-cascader:focus-within .canvas-react-select-clear {\n opacity: 1;\n pointer-events: auto;\n}\n.canvas-react-select:hover .canvas-react-select-actions-clearable .canvas-react-select-arrow,\n.canvas-react-select-open .canvas-react-select-actions-clearable .canvas-react-select-arrow,\n.canvas-react-select:focus-within .canvas-react-select-actions-clearable .canvas-react-select-arrow,\n.canvas-react-cascader:hover .canvas-react-select-actions-clearable .canvas-react-select-arrow,\n.canvas-react-cascader-open .canvas-react-select-actions-clearable .canvas-react-select-arrow,\n.canvas-react-cascader:focus-within .canvas-react-select-actions-clearable .canvas-react-select-arrow {\n opacity: 0;\n}\n.canvas-react-select-clear-icon,\n.canvas-react-select-clear-icon::before {\n position: absolute;\n top: 50%;\n left: 50%;\n width: 8px;\n height: 1.25px;\n margin-top: -0.625px;\n margin-left: -4px;\n border-radius: 999px;\n background: currentColor;\n content: "";\n}\n.canvas-react-select-clear-icon {\n transform: rotate(45deg);\n}\n.canvas-react-select-clear-icon::before {\n transform: rotate(90deg);\n}\n.canvas-react-select-dropdown {\n padding: 4px;\n}\n.canvas-react-select-list {\n position: relative;\n overflow-y: auto;\n}\n.canvas-react-select-list-inner {\n position: relative;\n}\n.canvas-react-select-option {\n display: flex;\n align-items: center;\n box-sizing: border-box;\n width: 100%;\n padding: 0 11px;\n border-radius: var(--canvas-react-radius-sm);\n color: var(--canvas-react-color-text);\n font-size: var(--canvas-react-font-size);\n cursor: pointer;\n}\n.canvas-react-select-option:hover,\n.canvas-react-select-option-active {\n background: var(--canvas-react-color-bg-hover);\n}\n.canvas-react-select-option-label {\n display: block;\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n}\n.canvas-react-select-option-selected {\n background: var(--canvas-react-color-bg-active);\n}\n.canvas-react-select-option-searching {\n color: var(--canvas-react-color-text);\n}\n.canvas-react-select-option-searching:hover,\n.canvas-react-select-option-searching.canvas-react-select-option-active {\n background: var(--canvas-react-color-bg-active);\n}\n.canvas-react-select-option-disabled {\n color: #9ca3af;\n cursor: not-allowed;\n}\n.canvas-react-select-option-highlight {\n color: var(--canvas-react-color-primary);\n font-weight: 600;\n}\n.canvas-react-select-option-disabled .canvas-react-select-option-highlight {\n color: inherit;\n}\n.canvas-react-select-empty {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n padding: 0 11px;\n color: #9ca3af;\n font-size: var(--canvas-react-font-size);\n}\n');
742
742
  var ReactSelect = React.forwardRef(
743
743
  function ReactSelect2(props, ref) {
744
744
  const {
@@ -1062,9 +1062,16 @@ var ReactSelect = React.forwardRef(
1062
1062
  }
1063
1063
  selectOption(option, "mouse");
1064
1064
  },
1065
- children: renderSelectOptionLabel(
1066
- option.label,
1067
- showSearch ? searchKeyword : ""
1065
+ children: /* @__PURE__ */ jsxRuntime.jsx(
1066
+ "span",
1067
+ {
1068
+ className: `${REACT_COMPONENT_PREFIX}-select-option-label`,
1069
+ title: option.label,
1070
+ children: renderSelectOptionLabel(
1071
+ option.label,
1072
+ showSearch ? searchKeyword : ""
1073
+ )
1074
+ }
1068
1075
  )
1069
1076
  },
1070
1077
  String(option.value)
@@ -1511,6 +1518,275 @@ function actionStyle(primary) {
1511
1518
  return { minWidth: 72, height: 32, padding: "0 12px", borderRadius: 6, border: primary ? "1px solid #1677ff" : "1px solid #d9d9d9", background: primary ? "#1677ff" : "#fff", color: primary ? "#fff" : "#374151", cursor: "pointer" };
1512
1519
  }
1513
1520
 
1521
+ // src/components/form/style.css
1522
+ styleInject(".canvas-react-form {\n min-width: 0;\n}\n.canvas-react-form-vertical {\n display: grid;\n gap: 16px;\n}\n.canvas-react-form-horizontal {\n display: grid;\n gap: 12px;\n}\n.canvas-react-form-inline {\n display: flex;\n flex-wrap: wrap;\n align-items: flex-start;\n gap: 12px 16px;\n}\n.canvas-react-form-item {\n box-sizing: border-box;\n min-width: 0;\n}\n.canvas-react-form-item-vertical {\n display: grid;\n gap: 6px;\n}\n.canvas-react-form-item-horizontal {\n display: grid;\n grid-template-columns: auto minmax(0, 1fr);\n align-items: center;\n column-gap: 10px;\n row-gap: 4px;\n}\n.canvas-react-form-item-inline {\n display: inline-grid;\n grid-template-columns: auto minmax(0, 1fr);\n align-items: center;\n column-gap: 8px;\n}\n.canvas-react-form-item-no-wrap {\n flex-wrap: nowrap;\n}\n.canvas-react-form-item-horizontal.canvas-react-form-item-no-wrap {\n display: grid;\n grid-template-columns: max-content minmax(0, 1fr);\n}\n.canvas-react-form-horizontal > .canvas-react-form-item {\n margin-bottom: var(--canvas-react-form-item-spacing, 16px);\n}\n.canvas-react-form-item-inline.canvas-react-form-item-no-wrap {\n display: inline-grid;\n grid-template-columns: max-content minmax(0, 1fr);\n}\n.canvas-react-form-item-no-wrap > .canvas-react-form-label {\n white-space: nowrap;\n}\n.canvas-react-form-label {\n display: inline-flex;\n align-items: center;\n gap: 3px;\n min-width: 0;\n color: #475569;\n font-size: 13px;\n line-height: 1.4;\n}\n.canvas-react-form-horizontal > .canvas-react-form-item > .canvas-react-form-label {\n min-height: 32px;\n}\n.canvas-react-form-required {\n color: #dc2626;\n}\n.canvas-react-form-control {\n display: flex;\n flex-direction: column;\n min-width: 0;\n}\n.canvas-react-form-error {\n color: #dc2626;\n font-size: 12px;\n}\n.canvas-react-form-help,\n.canvas-react-form-extra {\n color: #64748b;\n font-size: 12px;\n}\n.canvas-react-form-item-error .canvas-react-form-control > input,\n.canvas-react-form-item-error .canvas-react-form-control > textarea {\n border-color: #dc2626;\n}\n");
1523
+ function createFormInstance() {
1524
+ const store = {
1525
+ values: {},
1526
+ initialValues: {},
1527
+ errors: {},
1528
+ rules: /* @__PURE__ */ new Map(),
1529
+ listeners: /* @__PURE__ */ new Set(),
1530
+ revision: 0,
1531
+ notify() {
1532
+ store.revision += 1;
1533
+ store.listeners.forEach((listener) => listener());
1534
+ }
1535
+ };
1536
+ return {
1537
+ __store: store,
1538
+ getFieldValue: (name) => store.values[name],
1539
+ setFieldsValue(values) {
1540
+ store.values = { ...store.values, ...values };
1541
+ Object.keys(values).forEach((name) => {
1542
+ delete store.errors[name];
1543
+ });
1544
+ store.notify();
1545
+ },
1546
+ resetFields() {
1547
+ store.values = { ...store.initialValues };
1548
+ store.errors = {};
1549
+ store.notify();
1550
+ },
1551
+ async validateFields() {
1552
+ const errors = {};
1553
+ for (const [name, rules] of store.rules) {
1554
+ const value = store.values[name];
1555
+ for (const rawRule of rules) {
1556
+ const rule = typeof rawRule === "function" ? rawRule({ getFieldValue: (field) => store.values[field] }) : rawRule;
1557
+ if (rule.required && (value === void 0 || value === null || value === "")) {
1558
+ errors[name] = rule.message ?? "\u6B64\u9879\u4E3A\u5FC5\u586B\u9879";
1559
+ break;
1560
+ }
1561
+ if ((rule.type === "number" || rule.type === "integer") && typeof value === "number" && rule.min !== void 0 && value < rule.min) {
1562
+ errors[name] = rule.message ?? `\u4E0D\u80FD\u5C0F\u4E8E ${rule.min}`;
1563
+ break;
1564
+ }
1565
+ if ((rule.type === "number" || rule.type === "integer") && typeof value === "number" && rule.max !== void 0 && value > rule.max) {
1566
+ errors[name] = rule.message ?? `\u4E0D\u80FD\u5927\u4E8E ${rule.max}`;
1567
+ break;
1568
+ }
1569
+ if (rule.type === "integer" && typeof value === "number" && !Number.isInteger(value)) {
1570
+ errors[name] = rule.message ?? "\u8BF7\u8F93\u5165\u6574\u6570";
1571
+ break;
1572
+ }
1573
+ if (rule.validator) {
1574
+ try {
1575
+ await rule.validator(rule, value);
1576
+ } catch (error) {
1577
+ errors[name] = error instanceof Error ? error.message : "\u6821\u9A8C\u5931\u8D25";
1578
+ break;
1579
+ }
1580
+ }
1581
+ }
1582
+ }
1583
+ store.errors = errors;
1584
+ store.notify();
1585
+ if (Object.keys(errors).length > 0) {
1586
+ return Promise.reject({
1587
+ errorFields: errors,
1588
+ values: { ...store.values }
1589
+ });
1590
+ }
1591
+ return { ...store.values };
1592
+ }
1593
+ };
1594
+ }
1595
+ function useReactForm() {
1596
+ const formRef = React.useRef(null);
1597
+ if (!formRef.current) formRef.current = createFormInstance();
1598
+ return [formRef.current];
1599
+ }
1600
+ function useReactFormWatch(name, form) {
1601
+ React.useSyncExternalStore(
1602
+ (listener) => {
1603
+ form.__store.listeners.add(listener);
1604
+ return () => form.__store.listeners.delete(listener);
1605
+ },
1606
+ () => form.__store.revision,
1607
+ () => 0
1608
+ );
1609
+ return form.getFieldValue(name);
1610
+ }
1611
+ var FormContext = React.createContext(null);
1612
+ var emptySubscribe = () => () => {
1613
+ };
1614
+ var emptySnapshot = () => 0;
1615
+ function ReactFormRoot({
1616
+ form: formProp,
1617
+ initialValues,
1618
+ layout = "vertical",
1619
+ noWrap = false,
1620
+ itemSpacing,
1621
+ labelWidth,
1622
+ labelAlign = "right",
1623
+ colon = false,
1624
+ requiredMark = true,
1625
+ className,
1626
+ children,
1627
+ ...props
1628
+ }) {
1629
+ const internalForm = React.useRef(null);
1630
+ if (!internalForm.current) internalForm.current = createFormInstance();
1631
+ const form = formProp ?? internalForm.current;
1632
+ const initialKey = React.useMemo(
1633
+ () => JSON.stringify(initialValues ?? {}),
1634
+ [initialValues]
1635
+ );
1636
+ React.useEffect(() => {
1637
+ form.__store.initialValues = { ...initialValues };
1638
+ form.__store.values = { ...initialValues, ...form.__store.values };
1639
+ form.__store.notify();
1640
+ }, [form, initialKey]);
1641
+ const contextValue = React.useMemo(
1642
+ () => ({
1643
+ form,
1644
+ layout,
1645
+ noWrap,
1646
+ labelWidth,
1647
+ labelAlign,
1648
+ colon,
1649
+ requiredMark
1650
+ }),
1651
+ [colon, form, labelAlign, labelWidth, layout, noWrap, requiredMark]
1652
+ );
1653
+ return /* @__PURE__ */ jsxRuntime.jsx(FormContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxRuntime.jsx(
1654
+ "form",
1655
+ {
1656
+ ...props,
1657
+ style: itemSpacing === void 0 ? props.style : {
1658
+ ...props.style,
1659
+ "--canvas-react-form-item-spacing": itemSpacing
1660
+ },
1661
+ className: joinClassNames(
1662
+ `${REACT_COMPONENT_PREFIX}-form`,
1663
+ `${REACT_COMPONENT_PREFIX}-form-${layout}`,
1664
+ className
1665
+ ),
1666
+ onSubmit: (event) => event.preventDefault(),
1667
+ children
1668
+ }
1669
+ ) });
1670
+ }
1671
+ function ReactFormItem({
1672
+ label,
1673
+ name,
1674
+ children,
1675
+ rules = [],
1676
+ initialValue,
1677
+ required,
1678
+ colon,
1679
+ labelWidth,
1680
+ labelAlign,
1681
+ labelStyle,
1682
+ controlStyle,
1683
+ help,
1684
+ extra,
1685
+ className,
1686
+ style,
1687
+ noWrap
1688
+ }) {
1689
+ const context = React.useContext(FormContext);
1690
+ const form = context?.form ?? null;
1691
+ if (name && !form) throw new Error("ReactForm.Item \u5FC5\u987B\u5728 ReactForm \u5185\u4F7F\u7528");
1692
+ React.useSyncExternalStore(
1693
+ form ? (listener) => {
1694
+ form.__store.listeners.add(listener);
1695
+ return () => form.__store.listeners.delete(listener);
1696
+ } : emptySubscribe,
1697
+ form ? () => form.__store.revision : emptySnapshot,
1698
+ emptySnapshot
1699
+ );
1700
+ React.useEffect(() => {
1701
+ if (!form || !name) return;
1702
+ form.__store.rules.set(name, rules);
1703
+ if (form.getFieldValue(name) === void 0 && initialValue !== void 0) {
1704
+ form.setFieldsValue({ [name]: initialValue });
1705
+ }
1706
+ return () => {
1707
+ form.__store.rules.delete(name);
1708
+ };
1709
+ }, [form, initialValue, name, rules]);
1710
+ const childProps = React.isValidElement(children) ? children.props : {};
1711
+ const value = form && name ? form.getFieldValue(name) : void 0;
1712
+ const child = form && name && React.isValidElement(children) ? React.cloneElement(children, {
1713
+ value: value ?? "",
1714
+ onChange: (...args) => {
1715
+ const first = args[0];
1716
+ const nextValue = typeof first === "object" && first !== null && "target" in first ? first.target?.value : first;
1717
+ form.setFieldsValue({ [name]: nextValue });
1718
+ const childOnChange = childProps.onChange;
1719
+ if (typeof childOnChange === "function") childOnChange(...args);
1720
+ }
1721
+ }) : children;
1722
+ const error = form && name ? form.__store.errors[name] : void 0;
1723
+ const isRequired = required ?? rules.some((rule) => typeof rule !== "function" && rule.required === true);
1724
+ const resolvedLabelWidth = labelWidth ?? context?.labelWidth;
1725
+ const resolvedLabelAlign = labelAlign ?? context?.labelAlign ?? "right";
1726
+ const showColon = colon ?? context?.colon ?? false;
1727
+ const shouldMarkRequired = context?.requiredMark ?? true;
1728
+ const resolvedLayout = context?.layout ?? "vertical";
1729
+ const resolvedNoWrap = noWrap ?? context?.noWrap ?? false;
1730
+ const labelElementId = typeof childProps.id === "string" ? childProps.id : void 0;
1731
+ return /* @__PURE__ */ jsxRuntime.jsxs(
1732
+ "div",
1733
+ {
1734
+ className: joinClassNames(
1735
+ `${REACT_COMPONENT_PREFIX}-form-item`,
1736
+ `${REACT_COMPONENT_PREFIX}-form-item-${resolvedLayout}`,
1737
+ resolvedNoWrap && `${REACT_COMPONENT_PREFIX}-form-item-no-wrap`,
1738
+ className,
1739
+ error && `${REACT_COMPONENT_PREFIX}-form-item-error`
1740
+ ),
1741
+ style,
1742
+ children: [
1743
+ label ? /* @__PURE__ */ jsxRuntime.jsxs(
1744
+ "label",
1745
+ {
1746
+ className: `${REACT_COMPONENT_PREFIX}-form-label`,
1747
+ htmlFor: labelElementId,
1748
+ style: {
1749
+ width: resolvedLabelWidth,
1750
+ flexBasis: resolvedLabelWidth,
1751
+ textAlign: resolvedLabelAlign,
1752
+ ...labelStyle
1753
+ },
1754
+ children: [
1755
+ shouldMarkRequired && isRequired ? /* @__PURE__ */ jsxRuntime.jsx(
1756
+ "span",
1757
+ {
1758
+ "aria-hidden": "true",
1759
+ className: `${REACT_COMPONENT_PREFIX}-form-required`,
1760
+ children: "*"
1761
+ }
1762
+ ) : null,
1763
+ /* @__PURE__ */ jsxRuntime.jsx("span", { children: label }),
1764
+ showColon ? /* @__PURE__ */ jsxRuntime.jsx("span", { "aria-hidden": "true", children: ":" }) : null
1765
+ ]
1766
+ }
1767
+ ) : null,
1768
+ /* @__PURE__ */ jsxRuntime.jsxs(
1769
+ "div",
1770
+ {
1771
+ className: `${REACT_COMPONENT_PREFIX}-form-control`,
1772
+ style: controlStyle,
1773
+ children: [
1774
+ child,
1775
+ error ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${REACT_COMPONENT_PREFIX}-form-error`, children: error }) : help ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${REACT_COMPONENT_PREFIX}-form-help`, children: help }) : null,
1776
+ extra ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${REACT_COMPONENT_PREFIX}-form-extra`, children: extra }) : null
1777
+ ]
1778
+ }
1779
+ )
1780
+ ]
1781
+ }
1782
+ );
1783
+ }
1784
+ var ReactForm = Object.assign(ReactFormRoot, {
1785
+ Item: ReactFormItem,
1786
+ useForm: useReactForm,
1787
+ useWatch: useReactFormWatch
1788
+ });
1789
+
1514
1790
  // src/components/color/style.css
1515
1791
  styleInject(".canvas-react-color-wrap {\n display: inline-flex;\n width: 100%;\n height: 100%;\n min-height: 0;\n box-sizing: border-box;\n}\n.canvas-react-color {\n display: flex;\n align-items: center;\n width: 100%;\n min-width: 0;\n height: var(--canvas-react-control-height);\n min-height: 0;\n box-sizing: border-box;\n border: 1px solid var(--canvas-react-color-border);\n border-radius: var(--canvas-react-radius-sm);\n background: var(--canvas-react-color-bg);\n color: var(--canvas-react-color-text);\n font-size: var(--canvas-react-font-size);\n transition: border-color 0.2s ease, box-shadow 0.2s ease;\n cursor: pointer;\n}\n.canvas-react-color:hover {\n border-color: var(--canvas-react-color-primary-hover);\n}\n.canvas-react-color-open,\n.canvas-react-color:focus-within {\n border-color: var(--canvas-react-color-primary);\n box-shadow: var(--canvas-react-shadow-focus);\n}\n.canvas-react-color-disabled {\n color: #9ca3af;\n background: var(--canvas-react-color-bg-soft);\n cursor: not-allowed;\n}\n.canvas-react-color-preview {\n flex: 0 0 auto;\n width: calc(24px * var(--canvas-react-content-zoom, 1));\n height: calc(24px * var(--canvas-react-content-zoom, 1));\n margin-left: 3px;\n box-sizing: border-box;\n border: 1px solid rgba(0, 0, 0, 0.12);\n border-radius: 4px;\n}\n.canvas-react-color-input-wrap {\n flex: 1;\n min-width: 0;\n height: 100%;\n min-height: 0;\n border: 0;\n box-shadow: none;\n}\n.canvas-react-color .canvas-react-input-affix-wrapper {\n height: 100%;\n min-height: 0;\n}\n.canvas-react-color-input-wrap:hover,\n.canvas-react-color-input-wrap:focus-within {\n border-color: transparent;\n box-shadow: none;\n}\n.canvas-react-color-input {\n cursor: pointer;\n text-transform: uppercase;\n}\n.canvas-react-color-arrow {\n flex: 0 0 auto;\n width: 0.5em;\n height: 0.5em;\n min-width: 6px;\n min-height: 6px;\n margin-right: var(--canvas-react-control-padding-inline, 11px);\n border-right: 1.5px solid var(--canvas-react-color-text-muted);\n border-bottom: 1.5px solid var(--canvas-react-color-text-muted);\n transform: rotate(45deg) translateY(-2px);\n transition: transform 0.18s ease;\n}\n.canvas-react-color-arrow-open {\n transform: rotate(225deg) translate(-1px, -1px);\n}\n.canvas-react-color-dropdown {\n overflow: hidden;\n}\n.canvas-react-color-panel {\n padding: 12px;\n box-sizing: border-box;\n}\n.canvas-react-color-saturation {\n position: relative;\n height: 150px;\n overflow: hidden;\n border-radius: 6px;\n cursor: crosshair;\n background-image:\n linear-gradient(\n to top,\n #000,\n transparent),\n linear-gradient(\n to right,\n #fff,\n transparent);\n touch-action: none;\n}\n.canvas-react-color-saturation-thumb {\n position: absolute;\n width: 12px;\n height: 12px;\n border: 2px solid #fff;\n border-radius: 50%;\n box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.28), 0 1px 3px rgba(0, 0, 0, 0.28);\n transform: translate(-50%, -50%);\n pointer-events: none;\n}\n.canvas-react-color-controls {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-top: 12px;\n}\n.canvas-react-color-current {\n flex: 0 0 28px;\n height: 28px;\n box-sizing: border-box;\n border: 1px solid rgba(0, 0, 0, 0.12);\n border-radius: 50%;\n}\n.canvas-react-color-hue {\n width: 100%;\n height: 12px;\n margin: 0;\n appearance: none;\n border-radius: 999px;\n background:\n linear-gradient(\n to right,\n #f00,\n #ff0,\n #0f0,\n #0ff,\n #00f,\n #f0f,\n #f00);\n cursor: pointer;\n}\n.canvas-react-color-hue::-webkit-slider-thumb {\n width: 14px;\n height: 14px;\n appearance: none;\n border: 2px solid #fff;\n border-radius: 50%;\n background: transparent;\n box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.28);\n}\n.canvas-react-color-value-row {\n display: grid;\n grid-template-columns: 36px 1fr;\n align-items: center;\n gap: 8px;\n margin-top: 12px;\n color: var(--canvas-react-color-text-muted);\n font-size: 12px;\n}\n.canvas-react-color-value-row .canvas-react-input-affix-wrapper {\n height: 28px;\n}\n.canvas-react-color-presets {\n display: grid;\n grid-template-columns: repeat(8, 20px);\n gap: 7px;\n margin-top: 12px;\n}\n.canvas-react-color-preset {\n width: 20px;\n height: 20px;\n padding: 0;\n box-sizing: border-box;\n border: 1px solid rgba(0, 0, 0, 0.12);\n border-radius: 4px;\n cursor: pointer;\n transition: transform 0.16s ease, box-shadow 0.16s ease;\n}\n.canvas-react-color-preset:hover {\n transform: scale(1.12);\n}\n.canvas-react-color-preset-selected {\n box-shadow: 0 0 0 2px #fff, 0 0 0 3px var(--canvas-react-color-primary);\n}\n");
1516
1792
  var DEFAULT_COLOR = "#1677ff";
@@ -5907,7 +6183,7 @@ function isPromiseLike(value) {
5907
6183
  }
5908
6184
 
5909
6185
  // src/components/compat/style.css
5910
- styleInject(".canvas-react-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n min-height: 32px;\n padding: 4px 14px;\n border: 1px solid var(--cc-border-color, #d9d9d9);\n border-radius: 6px;\n color: var(--cc-text-color, #1f2937);\n background: var(--cc-surface-color, #fff);\n cursor: pointer;\n}\n.canvas-react-button:hover:not(:disabled) {\n color: #1677ff;\n border-color: #1677ff;\n}\n.canvas-react-button:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n.canvas-react-button-primary {\n color: #fff;\n border-color: #1677ff;\n background: #1677ff;\n}\n.canvas-react-button-danger {\n color: #dc2626;\n border-color: #fca5a5;\n}\n.canvas-react-button-small {\n min-height: 24px;\n padding: 2px 8px;\n}\n.canvas-react-button-large {\n min-height: 40px;\n padding: 6px 18px;\n}\n.canvas-react-button-icon {\n display: inline-flex;\n}\n.canvas-react-row {\n display: flex;\n flex-flow: row wrap;\n}\n.canvas-react-col {\n min-width: 0;\n padding-inline: 8px;\n}\n.canvas-react-radio-group {\n display: flex;\n gap: 16px;\n}\n.canvas-react-radio {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n cursor: pointer;\n}\n.canvas-react-radio input {\n position: absolute;\n opacity: 0;\n pointer-events: none;\n}\n.canvas-react-radio-mark {\n width: 14px;\n height: 14px;\n border: 1px solid #94a3b8;\n border-radius: 50%;\n box-sizing: border-box;\n}\n.canvas-react-radio input:checked + .canvas-react-radio-mark {\n border: 4px solid #1677ff;\n}\n.canvas-react-form-item {\n display: flex;\n flex-direction: column;\n gap: 6px;\n margin-bottom: 16px;\n}\n.canvas-react-form-label {\n color: #334155;\n font-size: 14px;\n}\n.canvas-react-form-error {\n color: #dc2626;\n font-size: 12px;\n}\n.canvas-react-textarea {\n width: 100%;\n min-height: 72px;\n padding: 8px 10px;\n border: 1px solid #d9d9d9;\n border-radius: 6px;\n box-sizing: border-box;\n font: inherit;\n resize: vertical;\n}\n.canvas-react-message-host {\n position: fixed;\n z-index: 3000;\n top: 24px;\n left: 50%;\n display: flex;\n flex-direction: column;\n gap: 8px;\n transform: translateX(-50%);\n pointer-events: none;\n}\n.canvas-react-message {\n padding: 9px 14px;\n border: 1px solid #e2e8f0;\n border-radius: 8px;\n color: #334155;\n background: #fff;\n box-shadow: 0 8px 24px rgba(15, 23, 42, 0.14);\n}\n.canvas-react-message-error {\n color: #b91c1c;\n border-color: #fecaca;\n}\n");
6186
+ styleInject(".canvas-react-button {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n min-height: 32px;\n padding: 4px 14px;\n border: 1px solid var(--cc-border-color, #d9d9d9);\n border-radius: 6px;\n color: var(--cc-text-color, #1f2937);\n background: var(--cc-surface-color, #fff);\n cursor: pointer;\n}\n.canvas-react-button:hover:not(:disabled) {\n color: #1677ff;\n border-color: #1677ff;\n}\n.canvas-react-button:disabled {\n cursor: not-allowed;\n opacity: 0.5;\n}\n.canvas-react-button-primary {\n color: #fff;\n border-color: #1677ff;\n background: #1677ff;\n}\n.canvas-react-button-primary:hover:not(:disabled) {\n color: #fff;\n border-color: #4096ff;\n background: #4096ff;\n}\n.canvas-react-button-danger {\n color: #dc2626;\n border-color: #fca5a5;\n}\n.canvas-react-button-small {\n min-height: 24px;\n padding: 2px 8px;\n}\n.canvas-react-button-large {\n min-height: 40px;\n padding: 6px 18px;\n}\n.canvas-react-button-icon {\n display: inline-flex;\n}\n.canvas-react-row {\n display: flex;\n flex-flow: row wrap;\n}\n.canvas-react-col {\n min-width: 0;\n padding-inline: 8px;\n}\n.canvas-react-radio-group {\n display: flex;\n gap: 16px;\n}\n.canvas-react-radio {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n cursor: pointer;\n}\n.canvas-react-radio input {\n position: absolute;\n opacity: 0;\n pointer-events: none;\n}\n.canvas-react-radio-mark {\n width: 14px;\n height: 14px;\n border: 1px solid #94a3b8;\n border-radius: 50%;\n box-sizing: border-box;\n}\n.canvas-react-radio input:checked + .canvas-react-radio-mark {\n border: 4px solid #1677ff;\n}\n.canvas-react-form-item {\n display: flex;\n flex-direction: column;\n gap: 6px;\n margin-bottom: 16px;\n}\n.canvas-react-form-label {\n color: #334155;\n font-size: 14px;\n}\n.canvas-react-form-error {\n color: #dc2626;\n font-size: 12px;\n}\n.canvas-react-textarea {\n width: 100%;\n min-height: 72px;\n padding: 8px 10px;\n border: 1px solid #d9d9d9;\n border-radius: 6px;\n box-sizing: border-box;\n font: inherit;\n resize: vertical;\n}\n.canvas-react-message-host {\n position: fixed;\n z-index: 3000;\n top: 24px;\n left: 50%;\n display: flex;\n flex-direction: column;\n gap: 8px;\n transform: translateX(-50%);\n pointer-events: none;\n}\n.canvas-react-message {\n padding: 9px 14px;\n border: 1px solid #e2e8f0;\n border-radius: 8px;\n color: #334155;\n background: #fff;\n box-shadow: 0 8px 24px rgba(15, 23, 42, 0.14);\n}\n.canvas-react-message-error {\n color: #b91c1c;\n border-color: #fecaca;\n}\n");
5911
6187
  function ReactButton({
5912
6188
  children,
5913
6189
  className,
@@ -6069,173 +6345,6 @@ function ReactTextArea({ className, ...props }) {
6069
6345
  }
6070
6346
  );
6071
6347
  }
6072
- function createFormInstance() {
6073
- const store = {
6074
- values: {},
6075
- initialValues: {},
6076
- errors: {},
6077
- rules: /* @__PURE__ */ new Map(),
6078
- listeners: /* @__PURE__ */ new Set(),
6079
- revision: 0,
6080
- notify() {
6081
- store.revision += 1;
6082
- store.listeners.forEach((listener) => listener());
6083
- }
6084
- };
6085
- return {
6086
- __store: store,
6087
- getFieldValue: (name) => store.values[name],
6088
- setFieldsValue(values) {
6089
- store.values = { ...store.values, ...values };
6090
- Object.keys(values).forEach((name) => {
6091
- delete store.errors[name];
6092
- });
6093
- store.notify();
6094
- },
6095
- resetFields() {
6096
- store.values = { ...store.initialValues };
6097
- store.errors = {};
6098
- store.notify();
6099
- },
6100
- async validateFields() {
6101
- const errors = {};
6102
- for (const [name, rules] of store.rules) {
6103
- const value = store.values[name];
6104
- for (const rawRule of rules) {
6105
- const rule = typeof rawRule === "function" ? rawRule({ getFieldValue: (field) => store.values[field] }) : rawRule;
6106
- if (rule.required && (value === void 0 || value === null || value === "")) {
6107
- errors[name] = rule.message ?? "\u6B64\u9879\u4E3A\u5FC5\u586B\u9879";
6108
- break;
6109
- }
6110
- if ((rule.type === "number" || rule.type === "integer") && typeof value === "number" && rule.min !== void 0 && value < rule.min) {
6111
- errors[name] = rule.message ?? `\u4E0D\u80FD\u5C0F\u4E8E ${rule.min}`;
6112
- break;
6113
- }
6114
- if ((rule.type === "number" || rule.type === "integer") && typeof value === "number" && rule.max !== void 0 && value > rule.max) {
6115
- errors[name] = rule.message ?? `\u4E0D\u80FD\u5927\u4E8E ${rule.max}`;
6116
- break;
6117
- }
6118
- if (rule.type === "integer" && typeof value === "number" && !Number.isInteger(value)) {
6119
- errors[name] = rule.message ?? "\u8BF7\u8F93\u5165\u6574\u6570";
6120
- break;
6121
- }
6122
- if (rule.validator) {
6123
- try {
6124
- await rule.validator(rule, value);
6125
- } catch (error) {
6126
- errors[name] = error instanceof Error ? error.message : "\u6821\u9A8C\u5931\u8D25";
6127
- break;
6128
- }
6129
- }
6130
- }
6131
- }
6132
- store.errors = errors;
6133
- store.notify();
6134
- if (Object.keys(errors).length > 0) {
6135
- return Promise.reject({
6136
- errorFields: errors,
6137
- values: { ...store.values }
6138
- });
6139
- }
6140
- return { ...store.values };
6141
- }
6142
- };
6143
- }
6144
- function useReactForm() {
6145
- const formRef = React.useRef();
6146
- if (!formRef.current) formRef.current = createFormInstance();
6147
- return [formRef.current];
6148
- }
6149
- function useReactFormWatch(name, form) {
6150
- return React.useSyncExternalStore(
6151
- (listener) => {
6152
- form.__store.listeners.add(listener);
6153
- return () => form.__store.listeners.delete(listener);
6154
- },
6155
- () => form.__store.revision,
6156
- () => 0
6157
- ) >= 0 ? form.getFieldValue(name) : void 0;
6158
- }
6159
- var FormContext = React.createContext(null);
6160
- function ReactFormRoot({
6161
- form,
6162
- initialValues,
6163
- layout = "vertical",
6164
- className,
6165
- children,
6166
- ...props
6167
- }) {
6168
- const initialKey = React.useMemo(
6169
- () => JSON.stringify(initialValues ?? {}),
6170
- [initialValues]
6171
- );
6172
- React.useEffect(() => {
6173
- form.__store.initialValues = { ...initialValues };
6174
- form.__store.values = { ...initialValues, ...form.__store.values };
6175
- form.__store.notify();
6176
- }, [form, initialKey]);
6177
- return /* @__PURE__ */ jsxRuntime.jsx(FormContext.Provider, { value: form, children: /* @__PURE__ */ jsxRuntime.jsx(
6178
- "form",
6179
- {
6180
- ...props,
6181
- className: joinClassNames(
6182
- `${REACT_COMPONENT_PREFIX}-form`,
6183
- `${REACT_COMPONENT_PREFIX}-form-${layout}`,
6184
- className
6185
- ),
6186
- onSubmit: (event) => event.preventDefault(),
6187
- children
6188
- }
6189
- ) });
6190
- }
6191
- function ReactFormItem({
6192
- label,
6193
- name,
6194
- children,
6195
- rules = [],
6196
- initialValue
6197
- }) {
6198
- const form = React.useContext(FormContext);
6199
- if (!form) throw new Error("ReactForm.Item \u5FC5\u987B\u5728 ReactForm \u5185\u4F7F\u7528");
6200
- React.useSyncExternalStore(
6201
- (listener) => {
6202
- form.__store.listeners.add(listener);
6203
- return () => form.__store.listeners.delete(listener);
6204
- },
6205
- () => form.__store.revision,
6206
- () => 0
6207
- );
6208
- React.useEffect(() => {
6209
- form.__store.rules.set(name, rules);
6210
- if (form.getFieldValue(name) === void 0 && initialValue !== void 0) {
6211
- form.setFieldsValue({ [name]: initialValue });
6212
- }
6213
- return () => {
6214
- form.__store.rules.delete(name);
6215
- };
6216
- }, [form, initialValue, name, rules]);
6217
- const childProps = children.props;
6218
- const value = form.getFieldValue(name);
6219
- return /* @__PURE__ */ jsxRuntime.jsxs("label", { className: `${REACT_COMPONENT_PREFIX}-form-item`, children: [
6220
- label ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${REACT_COMPONENT_PREFIX}-form-label`, children: label }) : null,
6221
- React.cloneElement(children, {
6222
- value: value ?? "",
6223
- onChange: (...args) => {
6224
- const first = args[0];
6225
- const nextValue = typeof first === "object" && first !== null && "target" in first ? first.target?.value : first;
6226
- form.setFieldsValue({ [name]: nextValue });
6227
- const childOnChange = childProps.onChange;
6228
- if (typeof childOnChange === "function") childOnChange(...args);
6229
- }
6230
- }),
6231
- form.__store.errors[name] ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: `${REACT_COMPONENT_PREFIX}-form-error`, children: form.__store.errors[name] }) : null
6232
- ] });
6233
- }
6234
- var ReactForm = Object.assign(ReactFormRoot, {
6235
- Item: ReactFormItem,
6236
- useForm: useReactForm,
6237
- useWatch: useReactFormWatch
6238
- });
6239
6348
  function showMessage(type, content) {
6240
6349
  if (typeof document === "undefined") return;
6241
6350
  const hostId = `${REACT_COMPONENT_PREFIX}-message-host`;
@@ -9834,6 +9943,7 @@ exports.ReactDateTimeRangePicker = ReactDateTimeRangePicker;
9834
9943
  exports.ReactFilterPanel = ReactFilterPanel;
9835
9944
  exports.ReactFlex = ReactFlex;
9836
9945
  exports.ReactForm = ReactForm;
9946
+ exports.ReactFormItem = ReactFormItem;
9837
9947
  exports.ReactImagePreview = ReactImagePreview;
9838
9948
  exports.ReactInput = ReactInput;
9839
9949
  exports.ReactInputNumber = ReactInputNumber;