@lobehub/ui 5.55.0 → 5.56.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.
- package/es/EditableText/ControlInput.mjs +2 -2
- package/es/EditableText/ControlInput.mjs.map +1 -1
- package/es/SearchBar/SearchBar.mjs +2 -2
- package/es/SearchBar/SearchBar.mjs.map +1 -1
- package/es/base-ui/Checkbox/Checkbox.d.mts +6 -2
- package/es/base-ui/Checkbox/Checkbox.mjs +2 -1
- package/es/base-ui/Checkbox/Checkbox.mjs.map +1 -1
- package/es/base-ui/Checkbox/CheckboxGroup.mjs +2 -2
- package/es/base-ui/Checkbox/CheckboxGroup.mjs.map +1 -1
- package/es/base-ui/Checkbox/index.d.mts +2 -2
- package/es/base-ui/ColorPicker/ColorPicker.mjs +4 -4
- package/es/base-ui/ColorPicker/ColorPicker.mjs.map +1 -1
- package/es/base-ui/DatePicker/style.mjs +1 -0
- package/es/base-ui/DatePicker/style.mjs.map +1 -1
- package/es/base-ui/Form/components/FormGroup.mjs +13 -5
- package/es/base-ui/Form/components/FormGroup.mjs.map +1 -1
- package/es/base-ui/Form/index.d.mts +3 -0
- package/es/base-ui/Form/index.mjs +3 -0
- package/es/base-ui/Form/index.mjs.map +1 -1
- package/es/base-ui/Form/style.mjs +32 -6
- package/es/base-ui/Form/style.mjs.map +1 -1
- package/es/base-ui/FormKit/Field.d.mts +9 -0
- package/es/base-ui/FormKit/Field.mjs +167 -0
- package/es/base-ui/FormKit/Field.mjs.map +1 -0
- package/es/base-ui/FormKit/Form.mjs +96 -0
- package/es/base-ui/FormKit/Form.mjs.map +1 -0
- package/es/base-ui/FormKit/List.d.mts +34 -0
- package/es/base-ui/FormKit/List.mjs +102 -0
- package/es/base-ui/FormKit/List.mjs.map +1 -0
- package/es/base-ui/FormKit/SubmitFooter.d.mts +6 -0
- package/es/base-ui/FormKit/SubmitFooter.mjs +36 -0
- package/es/base-ui/FormKit/SubmitFooter.mjs.map +1 -0
- package/es/base-ui/FormKit/binding.mjs +23 -0
- package/es/base-ui/FormKit/binding.mjs.map +1 -0
- package/es/base-ui/FormKit/context.d.mts +7 -0
- package/es/base-ui/FormKit/context.mjs +14 -0
- package/es/base-ui/FormKit/context.mjs.map +1 -0
- package/es/base-ui/FormKit/engine/tanstack.mjs +293 -0
- package/es/base-ui/FormKit/engine/tanstack.mjs.map +1 -0
- package/es/base-ui/FormKit/engine/types.d.mts +6 -0
- package/es/base-ui/FormKit/index.d.mts +31 -0
- package/es/base-ui/FormKit/index.mjs +28 -0
- package/es/base-ui/FormKit/index.mjs.map +1 -0
- package/es/base-ui/FormKit/instance.mjs +67 -0
- package/es/base-ui/FormKit/instance.mjs.map +1 -0
- package/es/base-ui/FormKit/schema.d.mts +33 -0
- package/es/base-ui/FormKit/schema.mjs +23 -0
- package/es/base-ui/FormKit/schema.mjs.map +1 -0
- package/es/base-ui/FormKit/style.mjs +119 -0
- package/es/base-ui/FormKit/style.mjs.map +1 -0
- package/es/base-ui/FormKit/type.d.mts +122 -0
- package/es/base-ui/FormKit/useForm.d.mts +10 -0
- package/es/base-ui/FormKit/useForm.mjs +54 -0
- package/es/base-ui/FormKit/useForm.mjs.map +1 -0
- package/es/base-ui/FormKit/useStoreSelector.mjs +25 -0
- package/es/base-ui/FormKit/useStoreSelector.mjs.map +1 -0
- package/es/base-ui/FormKit/useWatch.d.mts +7 -0
- package/es/base-ui/FormKit/useWatch.mjs +12 -0
- package/es/base-ui/FormKit/useWatch.mjs.map +1 -0
- package/es/base-ui/Input/Input.d.mts +6 -2
- package/es/base-ui/Input/Input.mjs +2 -1
- package/es/base-ui/Input/Input.mjs.map +1 -1
- package/es/base-ui/Input/InputNumber.d.mts +6 -2
- package/es/base-ui/Input/InputNumber.mjs +13 -6
- package/es/base-ui/Input/InputNumber.mjs.map +1 -1
- package/es/base-ui/Input/InputPassword.d.mts +6 -2
- package/es/base-ui/Input/InputPassword.mjs +4 -3
- package/es/base-ui/Input/InputPassword.mjs.map +1 -1
- package/es/base-ui/Input/TextArea.d.mts +6 -2
- package/es/base-ui/Input/TextArea.mjs +2 -1
- package/es/base-ui/Input/TextArea.mjs.map +1 -1
- package/es/base-ui/Input/index.d.mts +5 -5
- package/es/base-ui/Input/style.d.mts +4 -1
- package/es/base-ui/Input/style.mjs +21 -8
- package/es/base-ui/Input/style.mjs.map +1 -1
- package/es/base-ui/Modal/Modal.mjs +4 -8
- package/es/base-ui/Modal/Modal.mjs.map +1 -1
- package/es/base-ui/Slider/SliderWithInput.mjs +2 -2
- package/es/base-ui/Slider/SliderWithInput.mjs.map +1 -1
- package/es/base-ui/Switch/Switch.mjs +2 -2
- package/es/base-ui/Switch/Switch.mjs.map +1 -1
- package/es/base-ui/Tree/TreeNode.mjs +2 -2
- package/es/base-ui/Tree/TreeNode.mjs.map +1 -1
- package/es/base-ui/index.d.mts +8 -8
- package/es/base-ui/index.mjs +6 -6
- package/es/chat/ChatInputArea/components/ChatInputAreaInner.mjs +2 -2
- package/es/chat/ChatInputArea/components/ChatInputAreaInner.mjs.map +1 -1
- package/es/chat/MessageInput/MessageInput.mjs +2 -2
- package/es/chat/MessageInput/MessageInput.mjs.map +1 -1
- package/es/chat/MessageModal/MessageModal.mjs +2 -2
- package/es/chat/MessageModal/MessageModal.mjs.map +1 -1
- package/es/eslint/index.d.mts +27 -3
- package/es/eslint/index.mjs +7 -2
- package/es/eslint/index.mjs.map +1 -1
- package/es/eslint/noInlineFormSchema.mjs +44 -0
- package/es/eslint/noInlineFormSchema.mjs.map +1 -0
- package/es/i18n/resources/en/form.d.mts +4 -0
- package/es/i18n/resources/en/form.mjs +4 -0
- package/es/i18n/resources/en/form.mjs.map +1 -1
- package/es/i18n/resources/zhCn/form.d.mts +4 -0
- package/es/i18n/resources/zhCn/form.mjs +4 -0
- package/es/i18n/resources/zhCn/form.mjs.map +1 -1
- package/es/node_modules/.pnpm/@eslint_core@0.17.0/node_modules/@eslint/core/dist/esm/types.d.mts +1139 -0
- package/es/node_modules/.pnpm/@types_estree@1.0.9/node_modules/@types/estree/index.d.mts +528 -0
- package/es/node_modules/.pnpm/@types_json-schema@7.0.15/node_modules/@types/json-schema/index.d.mts +201 -0
- package/es/node_modules/.pnpm/eslint@9.39.5_jiti@2.6.1_supports-color@10.2.2/node_modules/eslint/lib/types/index.d.mts +962 -0
- package/package.json +6 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageInput.mjs","names":["Flexbox"],"sources":["../../../src/chat/MessageInput/MessageInput.tsx"],"sourcesContent":["'use client';\n\nimport { cx, useResponsive } from 'antd-style';\nimport { memo, useState } from 'react';\nimport { useHotkeys } from 'react-hotkeys-hook';\n\nimport Button from '@/base-ui/Button';\nimport { TextArea } from '@/base-ui/Input';\nimport CodeEditor from '@/CodeEditor';\nimport { Flexbox } from '@/Flex';\nimport { KeyMapEnum } from '@/Hotkey/const';\nimport { combineKeys } from '@/Hotkey/utils';\nimport Tooltip from '@/Tooltip';\n\nimport { styles } from './style';\nimport type { MessageInputProps } from './type';\n\nconst MessageInput = memo<MessageInputProps>(\n ({\n text,\n variant = 'borderless',\n onCancel,\n defaultValue,\n onConfirm,\n renderButtons,\n placeholder,\n styles: customStyles,\n style,\n editButtonSize = 'middle',\n classNames,\n shortcut,\n language = 'markdown',\n ...rest\n }) => {\n const { mobile } = useResponsive();\n const [temporaryValue, setValue] = useState<string>(defaultValue || '');\n const confirmHotkey = combineKeys([KeyMapEnum.Mod, KeyMapEnum.Enter]);\n const confirmText = text?.confirm || 'Confirm';\n const cancelHotkey = combineKeys([KeyMapEnum.Esc]);\n const cancelText = text?.cancel || 'Cancel';\n\n const handleConfirm = () => onConfirm?.(temporaryValue);\n const handleCancel = () => onCancel?.();\n\n useHotkeys(confirmHotkey, handleConfirm, {\n enableOnFormTags: true,\n enabled: shortcut,\n preventDefault: true,\n });\n\n const confirmButton = (\n <Button size={editButtonSize} type=\"primary\" onClick={handleConfirm}>\n {confirmText}\n </Button>\n );\n\n const cancllButton = (\n <Button size={editButtonSize} type={'fill'} onClick={handleCancel}>\n {text?.cancel || 'Cancel'}\n </Button>\n );\n\n return (\n <Flexbox gap={16} style={{ flex: 1, width: '100%', ...style }} {...rest}>\n {mobile ? (\n <TextArea\n autoSize\n className={cx(styles, classNames?.editor)}\n placeholder={placeholder}\n style={customStyles?.editor}\n value={temporaryValue}\n variant={variant}\n onBlur={(e) => setValue(e.target.value)}\n onChange={(e) => setValue(e.target.value)}\n />\n ) : (\n <CodeEditor\n className={cx(styles, classNames?.editor)}\n classNames={classNames}\n language={language}\n placeholder={placeholder}\n style={customStyles?.editor}\n styles={customStyles}\n value={temporaryValue}\n variant={variant}\n onBlur={(e) => setValue(e.target.value)}\n onValueChange={(e) => setValue(e)}\n />\n )}\n <Flexbox direction={'horizontal-reverse'} gap={8}>\n {renderButtons ? (\n renderButtons(temporaryValue).map((buttonProps, index) => (\n <Button key={index} size={editButtonSize} {...buttonProps} />\n ))\n ) : (\n <>\n {shortcut ? (\n <Tooltip hotkey={confirmHotkey} title={confirmText}>\n {confirmButton}\n </Tooltip>\n ) : (\n confirmButton\n )}\n {shortcut ? (\n <Tooltip hotkey={cancelHotkey} title={cancelText}>\n {cancllButton}\n </Tooltip>\n ) : (\n cancllButton\n )}\n </>\n )}\n </Flexbox>\n </Flexbox>\n );\n },\n);\n\nexport default MessageInput;\n"],"mappings":";;;;;;;;;;;;;;AAiBA,MAAM,eAAe,MAClB,EACC,MACA,UAAU,cACV,UACA,cACA,WACA,eACA,aACA,QAAQ,cACR,OACA,iBAAiB,UACjB,YACA,UACA,WAAW,YACX,GAAG,WACC;CACJ,MAAM,EAAE,WAAW,cAAc;CACjC,MAAM,CAAC,gBAAgB,YAAY,SAAiB,gBAAgB,EAAE;CACtE,MAAM,gBAAgB,YAAY,CAAC,WAAW,KAAK,WAAW,KAAK,CAAC;CACpE,MAAM,cAAc,MAAM,WAAW;CACrC,MAAM,eAAe,YAAY,CAAC,WAAW,GAAG,CAAC;CACjD,MAAM,aAAa,MAAM,UAAU;CAEnC,MAAM,sBAAsB,YAAY,cAAc;CACtD,MAAM,qBAAqB,WAAW;CAEtC,WAAW,eAAe,eAAe;EACvC,kBAAkB;EAClB,SAAS;EACT,gBAAgB;CAClB,CAAC;CAED,MAAM,gBACJ,oBAAC,QAAD;EAAQ,MAAM;EAAgB,MAAK;EAAU,SAAS;EACnD,UAAA;CACK,CAAA;CAGV,MAAM,eACJ,oBAAC,QAAD;EAAQ,MAAM;EAAgB,MAAM;EAAQ,SAAS;EAClD,UAAA,MAAM,UAAU;CACX,CAAA;CAGV,OACE,qBAACA,mBAAD;EAAS,KAAK;EAAI,OAAO;GAAE,MAAM;GAAG,OAAO;GAAQ,GAAG;EAAM;EAAG,GAAI;EAAnE,UAAA,CACG,SACC,
|
|
1
|
+
{"version":3,"file":"MessageInput.mjs","names":["Flexbox","TextArea"],"sources":["../../../src/chat/MessageInput/MessageInput.tsx"],"sourcesContent":["'use client';\n\nimport { cx, useResponsive } from 'antd-style';\nimport { memo, useState } from 'react';\nimport { useHotkeys } from 'react-hotkeys-hook';\n\nimport Button from '@/base-ui/Button';\nimport { TextArea } from '@/base-ui/Input';\nimport CodeEditor from '@/CodeEditor';\nimport { Flexbox } from '@/Flex';\nimport { KeyMapEnum } from '@/Hotkey/const';\nimport { combineKeys } from '@/Hotkey/utils';\nimport Tooltip from '@/Tooltip';\n\nimport { styles } from './style';\nimport type { MessageInputProps } from './type';\n\nconst MessageInput = memo<MessageInputProps>(\n ({\n text,\n variant = 'borderless',\n onCancel,\n defaultValue,\n onConfirm,\n renderButtons,\n placeholder,\n styles: customStyles,\n style,\n editButtonSize = 'middle',\n classNames,\n shortcut,\n language = 'markdown',\n ...rest\n }) => {\n const { mobile } = useResponsive();\n const [temporaryValue, setValue] = useState<string>(defaultValue || '');\n const confirmHotkey = combineKeys([KeyMapEnum.Mod, KeyMapEnum.Enter]);\n const confirmText = text?.confirm || 'Confirm';\n const cancelHotkey = combineKeys([KeyMapEnum.Esc]);\n const cancelText = text?.cancel || 'Cancel';\n\n const handleConfirm = () => onConfirm?.(temporaryValue);\n const handleCancel = () => onCancel?.();\n\n useHotkeys(confirmHotkey, handleConfirm, {\n enableOnFormTags: true,\n enabled: shortcut,\n preventDefault: true,\n });\n\n const confirmButton = (\n <Button size={editButtonSize} type=\"primary\" onClick={handleConfirm}>\n {confirmText}\n </Button>\n );\n\n const cancllButton = (\n <Button size={editButtonSize} type={'fill'} onClick={handleCancel}>\n {text?.cancel || 'Cancel'}\n </Button>\n );\n\n return (\n <Flexbox gap={16} style={{ flex: 1, width: '100%', ...style }} {...rest}>\n {mobile ? (\n <TextArea\n autoSize\n className={cx(styles, classNames?.editor)}\n placeholder={placeholder}\n style={customStyles?.editor}\n value={temporaryValue}\n variant={variant}\n onBlur={(e) => setValue(e.target.value)}\n onChange={(e) => setValue(e.target.value)}\n />\n ) : (\n <CodeEditor\n className={cx(styles, classNames?.editor)}\n classNames={classNames}\n language={language}\n placeholder={placeholder}\n style={customStyles?.editor}\n styles={customStyles}\n value={temporaryValue}\n variant={variant}\n onBlur={(e) => setValue(e.target.value)}\n onValueChange={(e) => setValue(e)}\n />\n )}\n <Flexbox direction={'horizontal-reverse'} gap={8}>\n {renderButtons ? (\n renderButtons(temporaryValue).map((buttonProps, index) => (\n <Button key={index} size={editButtonSize} {...buttonProps} />\n ))\n ) : (\n <>\n {shortcut ? (\n <Tooltip hotkey={confirmHotkey} title={confirmText}>\n {confirmButton}\n </Tooltip>\n ) : (\n confirmButton\n )}\n {shortcut ? (\n <Tooltip hotkey={cancelHotkey} title={cancelText}>\n {cancllButton}\n </Tooltip>\n ) : (\n cancllButton\n )}\n </>\n )}\n </Flexbox>\n </Flexbox>\n );\n },\n);\n\nexport default MessageInput;\n"],"mappings":";;;;;;;;;;;;;;AAiBA,MAAM,eAAe,MAClB,EACC,MACA,UAAU,cACV,UACA,cACA,WACA,eACA,aACA,QAAQ,cACR,OACA,iBAAiB,UACjB,YACA,UACA,WAAW,YACX,GAAG,WACC;CACJ,MAAM,EAAE,WAAW,cAAc;CACjC,MAAM,CAAC,gBAAgB,YAAY,SAAiB,gBAAgB,EAAE;CACtE,MAAM,gBAAgB,YAAY,CAAC,WAAW,KAAK,WAAW,KAAK,CAAC;CACpE,MAAM,cAAc,MAAM,WAAW;CACrC,MAAM,eAAe,YAAY,CAAC,WAAW,GAAG,CAAC;CACjD,MAAM,aAAa,MAAM,UAAU;CAEnC,MAAM,sBAAsB,YAAY,cAAc;CACtD,MAAM,qBAAqB,WAAW;CAEtC,WAAW,eAAe,eAAe;EACvC,kBAAkB;EAClB,SAAS;EACT,gBAAgB;CAClB,CAAC;CAED,MAAM,gBACJ,oBAAC,QAAD;EAAQ,MAAM;EAAgB,MAAK;EAAU,SAAS;EACnD,UAAA;CACK,CAAA;CAGV,MAAM,eACJ,oBAAC,QAAD;EAAQ,MAAM;EAAgB,MAAM;EAAQ,SAAS;EAClD,UAAA,MAAM,UAAU;CACX,CAAA;CAGV,OACE,qBAACA,mBAAD;EAAS,KAAK;EAAI,OAAO;GAAE,MAAM;GAAG,OAAO;GAAQ,GAAG;EAAM;EAAG,GAAI;EAAnE,UAAA,CACG,SACC,oBAACC,kBAAD;GACE,UAAA;GACA,WAAW,GAAG,QAAQ,YAAY,MAAM;GAC3B;GACb,OAAO,cAAc;GACrB,OAAO;GACE;GACT,SAAS,MAAM,SAAS,EAAE,OAAO,KAAK;GACtC,WAAW,MAAM,SAAS,EAAE,OAAO,KAAK;EACzC,CAAA,IAED,oBAAC,YAAD;GACE,WAAW,GAAG,QAAQ,YAAY,MAAM;GAC5B;GACF;GACG;GACb,OAAO,cAAc;GACrB,QAAQ;GACR,OAAO;GACE;GACT,SAAS,MAAM,SAAS,EAAE,OAAO,KAAK;GACtC,gBAAgB,MAAM,SAAS,CAAC;EACjC,CAAA,GAEH,oBAACD,mBAAD;GAAS,WAAW;GAAsB,KAAK;GAC5C,UAAA,gBACC,cAAc,cAAc,CAAC,CAAC,KAAK,aAAa,UAC9C,oBAAC,QAAD;IAAoB,MAAM;IAAgB,GAAI;GAAc,GAA/C,KAA+C,CAC7D,IAED,qBAAA,YAAA,EAAA,UAAA,CACG,WACC,oBAAC,SAAD;IAAS,QAAQ;IAAe,OAAO;IACpC,UAAA;GACM,CAAA,IAET,eAED,WACC,oBAAC,SAAD;IAAS,QAAQ;IAAc,OAAO;IACnC,UAAA;GACM,CAAA,IAET,YAEF,EAAA,CAAA;EAEG,CAAA,CACF;;AAEb,CACF"}
|
|
@@ -3,7 +3,7 @@ import FlexBasic_default from "../../Flex/FlexBasic.mjs";
|
|
|
3
3
|
import Button from "../../base-ui/Button/Button.mjs";
|
|
4
4
|
import CodeEditor from "../../CodeEditor/CodeEditor.mjs";
|
|
5
5
|
import { useTranslation } from "../../i18n/useTranslation.mjs";
|
|
6
|
-
import
|
|
6
|
+
import TextArea_default from "../../base-ui/Input/TextArea.mjs";
|
|
7
7
|
import Markdown from "../../Markdown/Markdown.mjs";
|
|
8
8
|
import Modal from "../../base-ui/Modal/Modal.mjs";
|
|
9
9
|
import { styles } from "../MessageInput/style.mjs";
|
|
@@ -61,7 +61,7 @@ const MessageModal = memo(({ editing, open, height = "75vh", onOpenChange, onEdi
|
|
|
61
61
|
setTyping(false);
|
|
62
62
|
setMessage(value);
|
|
63
63
|
},
|
|
64
|
-
children: isEdit ? mobile ? /* @__PURE__ */ jsx(
|
|
64
|
+
children: isEdit ? mobile ? /* @__PURE__ */ jsx(TextArea_default, {
|
|
65
65
|
autoSize: true,
|
|
66
66
|
className: styles,
|
|
67
67
|
defaultValue: temporaryValue,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageModal.mjs","names":["messageModalMessages","useControlledState","Flexbox","textStyles"],"sources":["../../../src/chat/MessageModal/MessageModal.tsx"],"sourcesContent":["'use client';\n\nimport { useResponsive } from 'antd-style';\nimport { memo, useState } from 'react';\nimport useControlledState from 'use-merge-value';\n\nimport Button from '@/base-ui/Button';\nimport { TextArea } from '@/base-ui/Input';\nimport { Modal } from '@/base-ui/Modal';\nimport { styles as textStyles } from '@/chat/MessageInput/style';\nimport CodeEditor from '@/CodeEditor';\nimport { Flexbox } from '@/Flex';\nimport messageModalMessages from '@/i18n/resources/en/messageModal';\nimport { useTranslation } from '@/i18n/useTranslation';\nimport Markdown from '@/Markdown';\n\nimport { type MessageModalProps } from './type';\n\nconst MessageModal = memo<MessageModalProps>(\n ({\n editing,\n open,\n height = '75vh',\n onOpenChange,\n onEditingChange,\n placeholder,\n value,\n language = 'markdown',\n onChange,\n text,\n footer,\n extra,\n }) => {\n const { mobile } = useResponsive();\n const { t } = useTranslation(messageModalMessages);\n const [isEdit, setTyping] = useControlledState(false, {\n onChange: onEditingChange,\n value: editing,\n });\n\n const [showModal, setShowModal] = useControlledState(false, {\n onChange: onOpenChange,\n value: open,\n });\n\n const [temporaryValue, setMessage] = useState(value);\n\n const confirmText = text?.confirm ?? t('messageModal.confirm');\n const cancelText = text?.cancel ?? t('messageModal.cancel');\n const editText = text?.edit ?? t('messageModal.edit');\n\n const modalFooter = isEdit ? (\n <Flexbox direction={'horizontal-reverse'} gap={8}>\n <Button\n type=\"primary\"\n onClick={() => {\n setTyping(false);\n onChange?.(temporaryValue);\n setMessage(value);\n }}\n >\n {confirmText}\n </Button>\n <Button\n onClick={() => {\n setTyping(false);\n setMessage(value);\n }}\n >\n {cancelText}\n </Button>\n </Flexbox>\n ) : (\n footer\n );\n\n return (\n <Modal\n allowFullscreen\n destroyOnHidden\n cancelText={cancelText}\n footer={modalFooter}\n height={height}\n okText={editText}\n open={showModal}\n title={text?.title}\n onOk={() => setTyping(true)}\n onCancel={() => {\n setShowModal(false);\n setTyping(false);\n setMessage(value);\n }}\n >\n {isEdit ? (\n mobile ? (\n <TextArea\n autoSize\n className={textStyles}\n defaultValue={temporaryValue}\n placeholder={placeholder}\n value={temporaryValue}\n variant={'borderless'}\n onBlur={(e) => setMessage(e.target.value)}\n onChange={(value) => setMessage(value.target.value)}\n />\n ) : (\n <CodeEditor\n className={textStyles}\n defaultValue={temporaryValue}\n language={language}\n placeholder={placeholder}\n value={temporaryValue}\n variant={'borderless'}\n onBlur={(e) => setMessage(e.target.value)}\n onValueChange={(value) => setMessage(value)}\n />\n )\n ) : (\n <>\n {extra}\n <Markdown variant={'chat'}>{String(value || placeholder)}</Markdown>\n </>\n )}\n </Modal>\n );\n },\n);\n\nMessageModal.displayName = 'MessageModal';\n\nexport default MessageModal;\n"],"mappings":";;;;;;;;;;;;;;;AAkBA,MAAM,eAAe,MAClB,EACC,SACA,MACA,SAAS,QACT,cACA,iBACA,aACA,OACA,WAAW,YACX,UACA,MACA,QACA,YACI;CACJ,MAAM,EAAE,WAAW,cAAc;CACjC,MAAM,EAAE,MAAM,eAAeA,oBAAoB;CACjD,MAAM,CAAC,QAAQ,aAAaC,cAAmB,OAAO;EACpD,UAAU;EACV,OAAO;CACT,CAAC;CAED,MAAM,CAAC,WAAW,gBAAgBA,cAAmB,OAAO;EAC1D,UAAU;EACV,OAAO;CACT,CAAC;CAED,MAAM,CAAC,gBAAgB,cAAc,SAAS,KAAK;CAEnD,MAAM,cAAc,MAAM,WAAW,EAAE,sBAAsB;CAC7D,MAAM,aAAa,MAAM,UAAU,EAAE,qBAAqB;CAC1D,MAAM,WAAW,MAAM,QAAQ,EAAE,mBAAmB;CA2BpD,OACE,oBAAC,OAAD;EACE,iBAAA;EACA,iBAAA;EACY;EACZ,QA9BgB,SAClB,qBAACC,mBAAD;GAAS,WAAW;GAAsB,KAAK;GAA/C,UAAA,CACE,oBAAC,QAAD;IACE,MAAK;IACL,eAAe;KACb,UAAU,KAAK;KACf,WAAW,cAAc;KACzB,WAAW,KAAK;IAClB;IAEC,UAAA;GACK,CAAA,GACR,oBAAC,QAAD;IACE,eAAe;KACb,UAAU,KAAK;KACf,WAAW,KAAK;IAClB;IAEC,UAAA;GACK,CAAA,CACD;EAET,CAAA,IAAA;EASU;EACR,QAAQ;EACR,MAAM;EACN,OAAO,MAAM;EACb,YAAY,UAAU,IAAI;EAC1B,gBAAgB;GACd,aAAa,KAAK;GAClB,UAAU,KAAK;GACf,WAAW,KAAK;EAClB;EAEC,UAAA,SACC,SACE,
|
|
1
|
+
{"version":3,"file":"MessageModal.mjs","names":["messageModalMessages","useControlledState","Flexbox","TextArea","textStyles"],"sources":["../../../src/chat/MessageModal/MessageModal.tsx"],"sourcesContent":["'use client';\n\nimport { useResponsive } from 'antd-style';\nimport { memo, useState } from 'react';\nimport useControlledState from 'use-merge-value';\n\nimport Button from '@/base-ui/Button';\nimport { TextArea } from '@/base-ui/Input';\nimport { Modal } from '@/base-ui/Modal';\nimport { styles as textStyles } from '@/chat/MessageInput/style';\nimport CodeEditor from '@/CodeEditor';\nimport { Flexbox } from '@/Flex';\nimport messageModalMessages from '@/i18n/resources/en/messageModal';\nimport { useTranslation } from '@/i18n/useTranslation';\nimport Markdown from '@/Markdown';\n\nimport { type MessageModalProps } from './type';\n\nconst MessageModal = memo<MessageModalProps>(\n ({\n editing,\n open,\n height = '75vh',\n onOpenChange,\n onEditingChange,\n placeholder,\n value,\n language = 'markdown',\n onChange,\n text,\n footer,\n extra,\n }) => {\n const { mobile } = useResponsive();\n const { t } = useTranslation(messageModalMessages);\n const [isEdit, setTyping] = useControlledState(false, {\n onChange: onEditingChange,\n value: editing,\n });\n\n const [showModal, setShowModal] = useControlledState(false, {\n onChange: onOpenChange,\n value: open,\n });\n\n const [temporaryValue, setMessage] = useState(value);\n\n const confirmText = text?.confirm ?? t('messageModal.confirm');\n const cancelText = text?.cancel ?? t('messageModal.cancel');\n const editText = text?.edit ?? t('messageModal.edit');\n\n const modalFooter = isEdit ? (\n <Flexbox direction={'horizontal-reverse'} gap={8}>\n <Button\n type=\"primary\"\n onClick={() => {\n setTyping(false);\n onChange?.(temporaryValue);\n setMessage(value);\n }}\n >\n {confirmText}\n </Button>\n <Button\n onClick={() => {\n setTyping(false);\n setMessage(value);\n }}\n >\n {cancelText}\n </Button>\n </Flexbox>\n ) : (\n footer\n );\n\n return (\n <Modal\n allowFullscreen\n destroyOnHidden\n cancelText={cancelText}\n footer={modalFooter}\n height={height}\n okText={editText}\n open={showModal}\n title={text?.title}\n onOk={() => setTyping(true)}\n onCancel={() => {\n setShowModal(false);\n setTyping(false);\n setMessage(value);\n }}\n >\n {isEdit ? (\n mobile ? (\n <TextArea\n autoSize\n className={textStyles}\n defaultValue={temporaryValue}\n placeholder={placeholder}\n value={temporaryValue}\n variant={'borderless'}\n onBlur={(e) => setMessage(e.target.value)}\n onChange={(value) => setMessage(value.target.value)}\n />\n ) : (\n <CodeEditor\n className={textStyles}\n defaultValue={temporaryValue}\n language={language}\n placeholder={placeholder}\n value={temporaryValue}\n variant={'borderless'}\n onBlur={(e) => setMessage(e.target.value)}\n onValueChange={(value) => setMessage(value)}\n />\n )\n ) : (\n <>\n {extra}\n <Markdown variant={'chat'}>{String(value || placeholder)}</Markdown>\n </>\n )}\n </Modal>\n );\n },\n);\n\nMessageModal.displayName = 'MessageModal';\n\nexport default MessageModal;\n"],"mappings":";;;;;;;;;;;;;;;AAkBA,MAAM,eAAe,MAClB,EACC,SACA,MACA,SAAS,QACT,cACA,iBACA,aACA,OACA,WAAW,YACX,UACA,MACA,QACA,YACI;CACJ,MAAM,EAAE,WAAW,cAAc;CACjC,MAAM,EAAE,MAAM,eAAeA,oBAAoB;CACjD,MAAM,CAAC,QAAQ,aAAaC,cAAmB,OAAO;EACpD,UAAU;EACV,OAAO;CACT,CAAC;CAED,MAAM,CAAC,WAAW,gBAAgBA,cAAmB,OAAO;EAC1D,UAAU;EACV,OAAO;CACT,CAAC;CAED,MAAM,CAAC,gBAAgB,cAAc,SAAS,KAAK;CAEnD,MAAM,cAAc,MAAM,WAAW,EAAE,sBAAsB;CAC7D,MAAM,aAAa,MAAM,UAAU,EAAE,qBAAqB;CAC1D,MAAM,WAAW,MAAM,QAAQ,EAAE,mBAAmB;CA2BpD,OACE,oBAAC,OAAD;EACE,iBAAA;EACA,iBAAA;EACY;EACZ,QA9BgB,SAClB,qBAACC,mBAAD;GAAS,WAAW;GAAsB,KAAK;GAA/C,UAAA,CACE,oBAAC,QAAD;IACE,MAAK;IACL,eAAe;KACb,UAAU,KAAK;KACf,WAAW,cAAc;KACzB,WAAW,KAAK;IAClB;IAEC,UAAA;GACK,CAAA,GACR,oBAAC,QAAD;IACE,eAAe;KACb,UAAU,KAAK;KACf,WAAW,KAAK;IAClB;IAEC,UAAA;GACK,CAAA,CACD;EAET,CAAA,IAAA;EASU;EACR,QAAQ;EACR,MAAM;EACN,OAAO,MAAM;EACb,YAAY,UAAU,IAAI;EAC1B,gBAAgB;GACd,aAAa,KAAK;GAClB,UAAU,KAAK;GACf,WAAW,KAAK;EAClB;EAEC,UAAA,SACC,SACE,oBAACC,kBAAD;GACE,UAAA;GACA,WAAWC;GACX,cAAc;GACD;GACb,OAAO;GACP,SAAS;GACT,SAAS,MAAM,WAAW,EAAE,OAAO,KAAK;GACxC,WAAW,UAAU,WAAW,MAAM,OAAO,KAAK;EACnD,CAAA,IAED,oBAAC,YAAD;GACE,WAAWA;GACX,cAAc;GACJ;GACG;GACb,OAAO;GACP,SAAS;GACT,SAAS,MAAM,WAAW,EAAE,OAAO,KAAK;GACxC,gBAAgB,UAAU,WAAW,KAAK;EAC3C,CAAA,IAGH,qBAAA,YAAA,EAAA,UAAA,CACG,OACD,oBAAC,UAAD;GAAU,SAAS;GAAS,UAAA,OAAO,SAAS,WAAW;EAAY,CAAA,CACnE,EAAA,CAAA;CAEC,CAAA;AAEX,CACF;AAEA,aAAa,cAAc"}
|
package/es/eslint/index.d.mts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Rule } from "../node_modules/.pnpm/eslint@9.39.5_jiti@2.6.1_supports-color@10.2.2/node_modules/eslint/lib/types/index.mjs";
|
|
1
2
|
//#region src/eslint/index.d.ts
|
|
2
3
|
declare const restrictedImports: {
|
|
3
4
|
rules: {
|
|
@@ -18,7 +19,19 @@ declare const restrictedImports: {
|
|
|
18
19
|
})[];
|
|
19
20
|
};
|
|
20
21
|
};
|
|
21
|
-
declare const
|
|
22
|
+
declare const formSchemaRules: {
|
|
23
|
+
plugins: {
|
|
24
|
+
'@lobehub/ui': {
|
|
25
|
+
rules: {
|
|
26
|
+
'no-inline-form-schema': Rule.RuleModule;
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
rules: {
|
|
31
|
+
'@lobehub/ui/no-inline-form-schema': string;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
declare const _default: ({
|
|
22
35
|
rules: {
|
|
23
36
|
'no-restricted-imports': (string | {
|
|
24
37
|
paths: ({
|
|
@@ -36,7 +49,18 @@ declare const _default: {
|
|
|
36
49
|
}[];
|
|
37
50
|
})[];
|
|
38
51
|
};
|
|
39
|
-
}
|
|
52
|
+
} | {
|
|
53
|
+
plugins: {
|
|
54
|
+
'@lobehub/ui': {
|
|
55
|
+
rules: {
|
|
56
|
+
'no-inline-form-schema': Rule.RuleModule;
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
rules: {
|
|
61
|
+
'@lobehub/ui/no-inline-form-schema': string;
|
|
62
|
+
};
|
|
63
|
+
})[];
|
|
40
64
|
//#endregion
|
|
41
|
-
export { _default as default, restrictedImports };
|
|
65
|
+
export { _default as default, formSchemaRules, restrictedImports };
|
|
42
66
|
//# sourceMappingURL=index.d.mts.map
|
package/es/eslint/index.mjs
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { noInlineFormSchema } from "./noInlineFormSchema.mjs";
|
|
1
2
|
//#region src/eslint/index.ts
|
|
2
3
|
const DEPRECATED_UI_COMPONENTS = [
|
|
3
4
|
"Accordion",
|
|
@@ -274,8 +275,12 @@ const restrictedImports = { rules: { "no-restricted-imports": ["error", {
|
|
|
274
275
|
message: "Direct antd component import is deprecated. Import from \"@lobehub/ui/base-ui\" instead."
|
|
275
276
|
}]
|
|
276
277
|
}] } };
|
|
277
|
-
|
|
278
|
+
const formSchemaRules = {
|
|
279
|
+
plugins: { "@lobehub/ui": { rules: { "no-inline-form-schema": noInlineFormSchema } } },
|
|
280
|
+
rules: { "@lobehub/ui/no-inline-form-schema": "warn" }
|
|
281
|
+
};
|
|
282
|
+
var eslint_default = [restrictedImports, formSchemaRules];
|
|
278
283
|
//#endregion
|
|
279
|
-
export { eslint_default as default, restrictedImports };
|
|
284
|
+
export { eslint_default as default, formSchemaRules, restrictedImports };
|
|
280
285
|
|
|
281
286
|
//# sourceMappingURL=index.mjs.map
|
package/es/eslint/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/eslint/index.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/eslint/index.ts"],"sourcesContent":["import { noInlineFormSchema } from './noInlineFormSchema';\n\nconst DEPRECATED_UI_COMPONENTS = [\n 'Accordion',\n 'AccordionItem',\n 'ActionIcon',\n 'Alert',\n 'AutoComplete',\n 'Avatar',\n 'AvatarGroup',\n 'Burger',\n 'Button',\n 'Checkbox',\n 'CheckboxGroup',\n 'Collapse',\n 'DatePicker',\n 'DraggablePanel',\n 'DraggablePanelBody',\n 'DraggablePanelContainer',\n 'DraggablePanelFooter',\n 'DraggablePanelHeader',\n 'Drawer',\n 'Dropdown',\n 'FormSubmitFooter',\n 'FormTitle',\n 'Input',\n 'InputNumber',\n 'InputOPT',\n 'InputPassword',\n 'Modal',\n 'ModalHost',\n 'Radio',\n 'RadioGroup',\n 'Segmented',\n 'Select',\n 'Skeleton',\n 'SkeletonAvatar',\n 'SkeletonBlock',\n 'SkeletonButton',\n 'SkeletonParagraph',\n 'SkeletonTags',\n 'SkeletonTitle',\n 'Slider',\n 'SliderWithInput',\n 'Switch',\n 'Tabs',\n 'Tag',\n 'Text',\n 'TextArea',\n 'Tree',\n];\n\nconst DEPRECATED_ANTD_ONLY = [\n 'Anchor',\n 'Badge',\n 'Breadcrumb',\n 'Card',\n 'Carousel',\n 'ColorPicker',\n 'Descriptions',\n 'Divider',\n 'Empty',\n 'FloatButton',\n 'List',\n 'Menu',\n 'Pagination',\n 'Popover',\n 'Progress',\n 'QRCode',\n 'Rate',\n 'Result',\n 'Spin',\n 'Statistic',\n 'Steps',\n 'Table',\n 'Tooltip',\n 'Typography',\n 'Upload',\n];\n\nconst DEPRECATED_ANTD_COMPONENT_PATHS = [\n 'antd/es/alert',\n 'antd/es/alert/*',\n 'antd/es/anchor',\n 'antd/es/anchor/*',\n 'antd/es/auto-complete',\n 'antd/es/auto-complete/*',\n 'antd/es/badge',\n 'antd/es/badge/*',\n 'antd/es/breadcrumb',\n 'antd/es/breadcrumb/*',\n 'antd/es/card',\n 'antd/es/card/*',\n 'antd/es/carousel',\n 'antd/es/carousel/*',\n 'antd/es/checkbox',\n 'antd/es/checkbox/*',\n 'antd/es/collapse',\n 'antd/es/collapse/*',\n 'antd/es/color-picker',\n 'antd/es/color-picker/*',\n 'antd/es/date-picker',\n 'antd/es/date-picker/*',\n 'antd/es/descriptions',\n 'antd/es/descriptions/*',\n 'antd/es/divider',\n 'antd/es/divider/*',\n 'antd/es/dropdown',\n 'antd/es/dropdown/*',\n 'antd/es/empty',\n 'antd/es/empty/*',\n 'antd/es/float-button',\n 'antd/es/float-button/*',\n 'antd/es/input',\n 'antd/es/input-number',\n 'antd/es/input-number/*',\n 'antd/es/input/*',\n 'antd/es/list',\n 'antd/es/list/*',\n 'antd/es/message',\n 'antd/es/message/*',\n 'antd/es/notification',\n 'antd/es/notification/*',\n 'antd/es/pagination',\n 'antd/es/pagination/*',\n 'antd/es/popover',\n 'antd/es/popover/*',\n 'antd/es/progress',\n 'antd/es/progress/*',\n 'antd/es/qr-code',\n 'antd/es/qr-code/*',\n 'antd/es/radio',\n 'antd/es/radio/*',\n 'antd/es/rate',\n 'antd/es/rate/*',\n 'antd/es/result',\n 'antd/es/result/*',\n 'antd/es/skeleton',\n 'antd/es/skeleton/*',\n 'antd/es/slider',\n 'antd/es/slider/*',\n 'antd/es/spin',\n 'antd/es/spin/*',\n 'antd/es/statistic',\n 'antd/es/statistic/*',\n 'antd/es/steps',\n 'antd/es/steps/*',\n 'antd/es/switch',\n 'antd/es/switch/*',\n 'antd/es/table',\n 'antd/es/table/*',\n 'antd/es/tooltip',\n 'antd/es/tooltip/*',\n 'antd/es/tree',\n 'antd/es/tree/*',\n 'antd/es/typography',\n 'antd/es/typography/*',\n 'antd/es/upload',\n 'antd/es/upload/*',\n 'antd/lib/alert',\n 'antd/lib/alert/*',\n 'antd/lib/anchor',\n 'antd/lib/anchor/*',\n 'antd/lib/auto-complete',\n 'antd/lib/auto-complete/*',\n 'antd/lib/badge',\n 'antd/lib/badge/*',\n 'antd/lib/breadcrumb',\n 'antd/lib/breadcrumb/*',\n 'antd/lib/card',\n 'antd/lib/card/*',\n 'antd/lib/carousel',\n 'antd/lib/carousel/*',\n 'antd/lib/checkbox',\n 'antd/lib/checkbox/*',\n 'antd/lib/collapse',\n 'antd/lib/collapse/*',\n 'antd/lib/color-picker',\n 'antd/lib/color-picker/*',\n 'antd/lib/date-picker',\n 'antd/lib/date-picker/*',\n 'antd/lib/descriptions',\n 'antd/lib/descriptions/*',\n 'antd/lib/divider',\n 'antd/lib/divider/*',\n 'antd/lib/dropdown',\n 'antd/lib/dropdown/*',\n 'antd/lib/empty',\n 'antd/lib/empty/*',\n 'antd/lib/float-button',\n 'antd/lib/float-button/*',\n 'antd/lib/input',\n 'antd/lib/input-number',\n 'antd/lib/input-number/*',\n 'antd/lib/input/*',\n 'antd/lib/list',\n 'antd/lib/list/*',\n 'antd/lib/message',\n 'antd/lib/message/*',\n 'antd/lib/notification',\n 'antd/lib/notification/*',\n 'antd/lib/pagination',\n 'antd/lib/pagination/*',\n 'antd/lib/popover',\n 'antd/lib/popover/*',\n 'antd/lib/progress',\n 'antd/lib/progress/*',\n 'antd/lib/qr-code',\n 'antd/lib/qr-code/*',\n 'antd/lib/radio',\n 'antd/lib/radio/*',\n 'antd/lib/rate',\n 'antd/lib/rate/*',\n 'antd/lib/result',\n 'antd/lib/result/*',\n 'antd/lib/skeleton',\n 'antd/lib/skeleton/*',\n 'antd/lib/slider',\n 'antd/lib/slider/*',\n 'antd/lib/spin',\n 'antd/lib/spin/*',\n 'antd/lib/statistic',\n 'antd/lib/statistic/*',\n 'antd/lib/steps',\n 'antd/lib/steps/*',\n 'antd/lib/switch',\n 'antd/lib/switch/*',\n 'antd/lib/table',\n 'antd/lib/table/*',\n 'antd/lib/tooltip',\n 'antd/lib/tooltip/*',\n 'antd/lib/tree',\n 'antd/lib/tree/*',\n 'antd/lib/typography',\n 'antd/lib/typography/*',\n 'antd/lib/upload',\n 'antd/lib/upload/*',\n];\n\nexport const restrictedImports = {\n rules: {\n 'no-restricted-imports': [\n 'error',\n {\n paths: [\n {\n importNames: DEPRECATED_UI_COMPONENTS,\n message:\n 'The antd-based wrapper is deprecated. Import from \"@lobehub/ui/base-ui\" instead.',\n name: '@lobehub/ui',\n },\n {\n importNames: ['createStyles'],\n message:\n '`createStyles` is banned in this project. Use `createStaticStyles` from \"antd-style\" instead.',\n name: 'antd-style',\n },\n {\n importNames: [...DEPRECATED_UI_COMPONENTS, ...DEPRECATED_ANTD_ONLY],\n message: 'Direct antd import is deprecated. Import from \"@lobehub/ui/base-ui\" instead.',\n name: 'antd',\n },\n {\n importNames: ['message', 'notification'],\n message: 'antd feedback APIs are deprecated. Use `toast` from \"@lobehub/ui/base-ui\".',\n name: 'antd',\n },\n {\n importNames: ['LoadingOutlined'],\n message: 'Use `Spin` from \"@lobehub/ui/base-ui\" instead of a hand-rolled spinner.',\n name: '@ant-design/icons',\n },\n {\n message: 'Use `Spin variant=\"network\"` from \"@lobehub/ui/base-ui\" instead.',\n name: 'thinking-orbs',\n },\n {\n message:\n 'ProComponents are deprecated. Use `Table` from \"@lobehub/ui/base-ui\" instead.',\n name: '@ant-design/pro-components',\n },\n ],\n patterns: [\n {\n group: DEPRECATED_ANTD_COMPONENT_PATHS,\n message:\n 'Direct antd component import is deprecated. Import from \"@lobehub/ui/base-ui\" instead.',\n },\n ],\n },\n ],\n },\n};\n\nexport const formSchemaRules = {\n plugins: {\n '@lobehub/ui': { rules: { 'no-inline-form-schema': noInlineFormSchema } },\n },\n rules: {\n '@lobehub/ui/no-inline-form-schema': 'warn',\n },\n};\n\nexport default [restrictedImports, formSchemaRules];\n"],"mappings":";;AAEA,MAAM,2BAA2B;CAC/B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,MAAM,uBAAuB;CAC3B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,MAAM,kCAAkC;CACtC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AAEA,MAAa,oBAAoB,EAC/B,OAAO,EACL,yBAAyB,CACvB,SACA;CACE,OAAO;EACL;GACE,aAAa;GACb,SACE;GACF,MAAM;EACR;EACA;GACE,aAAa,CAAC,cAAc;GAC5B,SACE;GACF,MAAM;EACR;EACA;GACE,aAAa,CAAC,GAAG,0BAA0B,GAAG,oBAAoB;GAClE,SAAS;GACT,MAAM;EACR;EACA;GACE,aAAa,CAAC,WAAW,cAAc;GACvC,SAAS;GACT,MAAM;EACR;EACA;GACE,aAAa,CAAC,iBAAiB;GAC/B,SAAS;GACT,MAAM;EACR;EACA;GACE,SAAS;GACT,MAAM;EACR;EACA;GACE,SACE;GACF,MAAM;EACR;CACF;CACA,UAAU,CACR;EACE,OAAO;EACP,SACE;CACJ,CACF;AACF,CACF,EACF,EACF;AAEA,MAAa,kBAAkB;CAC7B,SAAS,EACP,eAAe,EAAE,OAAO,EAAE,yBAAyB,mBAAmB,EAAE,EAC1E;CACA,OAAO,EACL,qCAAqC,OACvC;AACF;AAEA,IAAA,iBAAe,CAAC,mBAAmB,eAAe"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
//#region src/eslint/noInlineFormSchema.ts
|
|
2
|
+
const SCHEMA_NAMESPACES = /* @__PURE__ */ new Set([
|
|
3
|
+
"z",
|
|
4
|
+
"v",
|
|
5
|
+
"yup"
|
|
6
|
+
]);
|
|
7
|
+
const rootIdentifier = (node) => {
|
|
8
|
+
let current = node;
|
|
9
|
+
while (current) {
|
|
10
|
+
if (current.type === "Identifier") return current.name;
|
|
11
|
+
if (current.type === "CallExpression") current = current.callee;
|
|
12
|
+
else if (current.type === "MemberExpression") current = current.object;
|
|
13
|
+
else return void 0;
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
const isInlineSchema = (node) => node?.type === "CallExpression" && SCHEMA_NAMESPACES.has(rootIdentifier(node) ?? "");
|
|
17
|
+
const MESSAGE = "Schemas built inline are recreated on every render. Define the schema at module scope (or in useMemo) and pass the reference.";
|
|
18
|
+
const noInlineFormSchema = {
|
|
19
|
+
create: (context) => ({
|
|
20
|
+
"CallExpression[callee.name=\"useForm\"] > ObjectExpression > Property": function(node) {
|
|
21
|
+
if (node.key?.name === "schema" && isInlineSchema(node.value)) context.report({
|
|
22
|
+
message: MESSAGE,
|
|
23
|
+
node: node.value
|
|
24
|
+
});
|
|
25
|
+
},
|
|
26
|
+
"JSXAttribute": function(node) {
|
|
27
|
+
if (node.name?.name !== "validate") return;
|
|
28
|
+
const expression = node.value?.expression;
|
|
29
|
+
if (isInlineSchema(expression)) context.report({
|
|
30
|
+
message: MESSAGE,
|
|
31
|
+
node: expression
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}),
|
|
35
|
+
meta: {
|
|
36
|
+
docs: { description: "Disallow constructing form schemas inline in render" },
|
|
37
|
+
schema: [],
|
|
38
|
+
type: "suggestion"
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
//#endregion
|
|
42
|
+
export { noInlineFormSchema };
|
|
43
|
+
|
|
44
|
+
//# sourceMappingURL=noInlineFormSchema.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noInlineFormSchema.mjs","names":[],"sources":["../../src/eslint/noInlineFormSchema.ts"],"sourcesContent":["import type { Rule } from 'eslint';\n\nconst SCHEMA_NAMESPACES = new Set(['z', 'v', 'yup']);\n\nconst rootIdentifier = (node: any): string | undefined => {\n let current = node;\n while (current) {\n if (current.type === 'Identifier') return current.name;\n if (current.type === 'CallExpression') current = current.callee;\n else if (current.type === 'MemberExpression') current = current.object;\n else return undefined;\n }\n return undefined;\n};\n\nconst isInlineSchema = (node: any) =>\n node?.type === 'CallExpression' && SCHEMA_NAMESPACES.has(rootIdentifier(node) ?? '');\n\nconst MESSAGE =\n 'Schemas built inline are recreated on every render. Define the schema at module scope (or in useMemo) and pass the reference.';\n\nexport const noInlineFormSchema: Rule.RuleModule = {\n create: (context) => ({\n 'CallExpression[callee.name=\"useForm\"] > ObjectExpression > Property': function (node: any) {\n if (node.key?.name === 'schema' && isInlineSchema(node.value))\n context.report({ message: MESSAGE, node: node.value });\n },\n 'JSXAttribute': function(node: any) {\n if (node.name?.name !== 'validate') return;\n const expression = node.value?.expression;\n if (isInlineSchema(expression)) context.report({ message: MESSAGE, node: expression });\n },\n }),\n meta: {\n docs: { description: 'Disallow constructing form schemas inline in render' },\n schema: [],\n type: 'suggestion',\n },\n};\n"],"mappings":";AAEA,MAAM,oCAAoB,IAAI,IAAI;CAAC;CAAK;CAAK;AAAK,CAAC;AAEnD,MAAM,kBAAkB,SAAkC;CACxD,IAAI,UAAU;CACd,OAAO,SAAS;EACd,IAAI,QAAQ,SAAS,cAAc,OAAO,QAAQ;EAClD,IAAI,QAAQ,SAAS,kBAAkB,UAAU,QAAQ;OACpD,IAAI,QAAQ,SAAS,oBAAoB,UAAU,QAAQ;OAC3D,OAAO,KAAA;CACd;AAEF;AAEA,MAAM,kBAAkB,SACtB,MAAM,SAAS,oBAAoB,kBAAkB,IAAI,eAAe,IAAI,KAAK,EAAE;AAErF,MAAM,UACJ;AAEF,MAAa,qBAAsC;CACjD,SAAS,aAAa;EACpB,yEAAuE,SAAU,MAAW;GAC1F,IAAI,KAAK,KAAK,SAAS,YAAY,eAAe,KAAK,KAAK,GAC1D,QAAQ,OAAO;IAAE,SAAS;IAAS,MAAM,KAAK;GAAM,CAAC;EACzD;EACA,gBAAgB,SAAS,MAAW;GAClC,IAAI,KAAK,MAAM,SAAS,YAAY;GACpC,MAAM,aAAa,KAAK,OAAO;GAC/B,IAAI,eAAe,UAAU,GAAG,QAAQ,OAAO;IAAE,SAAS;IAAS,MAAM;GAAW,CAAC;EACvF;CACF;CACA,MAAM;EACJ,MAAM,EAAE,aAAa,sDAAsD;EAC3E,QAAQ,CAAC;EACT,MAAM;CACR;AACF"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
//#region src/i18n/resources/en/form.d.ts
|
|
2
2
|
declare const _default: {
|
|
3
|
+
readonly 'form.list.add': "Add";
|
|
4
|
+
readonly 'form.list.empty': "No items yet";
|
|
5
|
+
readonly 'form.list.remove': "Remove";
|
|
6
|
+
readonly 'form.required': "This field is required";
|
|
3
7
|
readonly 'form.reset': "Reset";
|
|
4
8
|
readonly 'form.submit': "Submit";
|
|
5
9
|
readonly 'form.unsavedChanges': "Unsaved changes";
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
//#region src/i18n/resources/en/form.ts
|
|
2
2
|
var form_default = {
|
|
3
|
+
"form.list.add": "Add",
|
|
4
|
+
"form.list.empty": "No items yet",
|
|
5
|
+
"form.list.remove": "Remove",
|
|
6
|
+
"form.required": "This field is required",
|
|
3
7
|
"form.reset": "Reset",
|
|
4
8
|
"form.submit": "Submit",
|
|
5
9
|
"form.unsavedChanges": "Unsaved changes",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form.mjs","names":[],"sources":["../../../../src/i18n/resources/en/form.ts"],"sourcesContent":["export default {\n 'form.reset': 'Reset',\n 'form.submit': 'Submit',\n 'form.unsavedChanges': 'Unsaved changes',\n 'form.unsavedWarning': 'You have unsaved changes. Are you sure you want to leave?',\n} as const;\n"],"mappings":";AAAA,IAAA,eAAe;CACb,cAAc;CACd,eAAe;CACf,uBAAuB;CACvB,uBAAuB;AACzB"}
|
|
1
|
+
{"version":3,"file":"form.mjs","names":[],"sources":["../../../../src/i18n/resources/en/form.ts"],"sourcesContent":["export default {\n 'form.list.add': 'Add',\n 'form.list.empty': 'No items yet',\n 'form.list.remove': 'Remove',\n 'form.required': 'This field is required',\n 'form.reset': 'Reset',\n 'form.submit': 'Submit',\n 'form.unsavedChanges': 'Unsaved changes',\n 'form.unsavedWarning': 'You have unsaved changes. Are you sure you want to leave?',\n} as const;\n"],"mappings":";AAAA,IAAA,eAAe;CACb,iBAAiB;CACjB,mBAAmB;CACnB,oBAAoB;CACpB,iBAAiB;CACjB,cAAc;CACd,eAAe;CACf,uBAAuB;CACvB,uBAAuB;AACzB"}
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
//#region src/i18n/resources/zhCn/form.d.ts
|
|
2
2
|
declare const _default: {
|
|
3
|
+
readonly 'form.list.add': "添加";
|
|
4
|
+
readonly 'form.list.empty': "暂无内容";
|
|
5
|
+
readonly 'form.list.remove': "删除";
|
|
6
|
+
readonly 'form.required': "此项为必填项";
|
|
3
7
|
readonly 'form.reset': "重置";
|
|
4
8
|
readonly 'form.submit': "提交";
|
|
5
9
|
readonly 'form.unsavedChanges': "未保存的更改";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"form.mjs","names":[],"sources":["../../../../src/i18n/resources/zhCn/form.ts"],"sourcesContent":["export default {\n 'form.reset': '重置',\n 'form.submit': '提交',\n 'form.unsavedChanges': '未保存的更改',\n 'form.unsavedWarning': '您有未保存的更改。确定要离开吗?',\n} as const;\n"],"mappings":";AAAA,IAAA,eAAe;CACb,cAAc;CACd,eAAe;CACf,uBAAuB;CACvB,uBAAuB;AACzB"}
|
|
1
|
+
{"version":3,"file":"form.mjs","names":[],"sources":["../../../../src/i18n/resources/zhCn/form.ts"],"sourcesContent":["export default {\n 'form.list.add': '添加',\n 'form.list.empty': '暂无内容',\n 'form.list.remove': '删除',\n 'form.required': '此项为必填项',\n 'form.reset': '重置',\n 'form.submit': '提交',\n 'form.unsavedChanges': '未保存的更改',\n 'form.unsavedWarning': '您有未保存的更改。确定要离开吗?',\n} as const;\n"],"mappings":";AAAA,IAAA,eAAe;CACb,iBAAiB;CACjB,mBAAmB;CACnB,oBAAoB;CACpB,iBAAiB;CACjB,cAAc;CACd,eAAe;CACf,uBAAuB;CACvB,uBAAuB;AACzB"}
|