@ioca/react 1.5.9 → 1.5.10

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 (229) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +33 -31
  3. package/lib/cjs/components/affix/affix.js.map +1 -1
  4. package/lib/cjs/components/affix/totop.js.map +1 -1
  5. package/lib/cjs/components/badge/badge.js.map +1 -1
  6. package/lib/cjs/components/button/button.js.map +1 -1
  7. package/lib/cjs/components/button/confirm.js.map +1 -1
  8. package/lib/cjs/components/button/group.js.map +1 -1
  9. package/lib/cjs/components/button/toggle.js.map +1 -1
  10. package/lib/cjs/components/card/card.js.map +1 -1
  11. package/lib/cjs/components/checkbox/checkbox.js +1 -1
  12. package/lib/cjs/components/checkbox/checkbox.js.map +1 -1
  13. package/lib/cjs/components/checkbox/item.js.map +1 -1
  14. package/lib/cjs/components/collapse/collapse.js.map +1 -1
  15. package/lib/cjs/components/collapse/item.js.map +1 -1
  16. package/lib/cjs/components/datagrid/cell.js +5 -2
  17. package/lib/cjs/components/datagrid/cell.js.map +1 -1
  18. package/lib/cjs/components/datagrid/datagrid.js +148 -50
  19. package/lib/cjs/components/datagrid/datagrid.js.map +1 -1
  20. package/lib/cjs/components/datagrid/helper.js +83 -0
  21. package/lib/cjs/components/datagrid/helper.js.map +1 -0
  22. package/lib/cjs/components/datagrid/resize.js +35 -7
  23. package/lib/cjs/components/datagrid/resize.js.map +1 -1
  24. package/lib/cjs/components/datagrid/row.js +17 -3
  25. package/lib/cjs/components/datagrid/row.js.map +1 -1
  26. package/lib/cjs/components/datagrid/sorter.js.map +1 -1
  27. package/lib/cjs/components/datagrid/virtual.js +283 -0
  28. package/lib/cjs/components/datagrid/virtual.js.map +1 -0
  29. package/lib/cjs/components/description/description.js.map +1 -1
  30. package/lib/cjs/components/drawer/drawer.js.map +1 -1
  31. package/lib/cjs/components/dropdown/dropdown.js.map +1 -1
  32. package/lib/cjs/components/dropdown/item.js.map +1 -1
  33. package/lib/cjs/components/editor/controls.js.map +1 -1
  34. package/lib/cjs/components/editor/editor.js +5 -0
  35. package/lib/cjs/components/editor/editor.js.map +1 -1
  36. package/lib/cjs/components/editor/memtion.js.map +1 -1
  37. package/lib/cjs/components/flex/flex.js.map +1 -1
  38. package/lib/cjs/components/form/context.js.map +1 -1
  39. package/lib/cjs/components/form/field.js.map +1 -1
  40. package/lib/cjs/components/form/form.js.map +1 -1
  41. package/lib/cjs/components/form/useConfig.js.map +1 -1
  42. package/lib/cjs/components/form/useForm.js.map +1 -1
  43. package/lib/cjs/components/icon/icon.js.map +1 -1
  44. package/lib/cjs/components/image/image.js.map +1 -1
  45. package/lib/cjs/components/image/list.js.map +1 -1
  46. package/lib/cjs/components/input/container.js.map +1 -1
  47. package/lib/cjs/components/input/input.js.map +1 -1
  48. package/lib/cjs/components/input/number.js.map +1 -1
  49. package/lib/cjs/components/input/range.js.map +1 -1
  50. package/lib/cjs/components/input/textarea.js.map +1 -1
  51. package/lib/cjs/components/list/item.js.map +1 -1
  52. package/lib/cjs/components/list/list.js.map +1 -1
  53. package/lib/cjs/components/loading/loading.js.map +1 -1
  54. package/lib/cjs/components/message/message.js.map +1 -1
  55. package/lib/cjs/components/modal/content.js.map +1 -1
  56. package/lib/cjs/components/modal/context.js.map +1 -1
  57. package/lib/cjs/components/modal/hookModal.js.map +1 -1
  58. package/lib/cjs/components/modal/modal.js.map +1 -1
  59. package/lib/cjs/components/modal/useModal.js.map +1 -1
  60. package/lib/cjs/components/pagination/page.js.map +1 -1
  61. package/lib/cjs/components/pagination/pagination.js.map +1 -1
  62. package/lib/cjs/components/picker/colors/footer.js.map +1 -1
  63. package/lib/cjs/components/picker/colors/handle.js.map +1 -1
  64. package/lib/cjs/components/picker/colors/index.js.map +1 -1
  65. package/lib/cjs/components/picker/dates/dates.js.map +1 -1
  66. package/lib/cjs/components/picker/dates/index.js.map +1 -1
  67. package/lib/cjs/components/picker/dates/panel.js.map +1 -1
  68. package/lib/cjs/components/picker/time/index.js.map +1 -1
  69. package/lib/cjs/components/picker/time/item.js.map +1 -1
  70. package/lib/cjs/components/picker/time/panel.js.map +1 -1
  71. package/lib/cjs/components/popconfirm/popconfirm.js.map +1 -1
  72. package/lib/cjs/components/popup/content.js.map +1 -1
  73. package/lib/cjs/components/popup/popup.js.map +1 -1
  74. package/lib/cjs/components/progress/circle.js.map +1 -1
  75. package/lib/cjs/components/progress/line.js.map +1 -1
  76. package/lib/cjs/components/progress/progress.js.map +1 -1
  77. package/lib/cjs/components/radio/item.js.map +1 -1
  78. package/lib/cjs/components/radio/radio.js +2 -2
  79. package/lib/cjs/components/radio/radio.js.map +1 -1
  80. package/lib/cjs/components/resizable/resizable.js.map +1 -1
  81. package/lib/cjs/components/river/river.js.map +1 -1
  82. package/lib/cjs/components/select/options.js.map +1 -1
  83. package/lib/cjs/components/select/select.js.map +1 -1
  84. package/lib/cjs/components/step/divider.js.map +1 -1
  85. package/lib/cjs/components/step/item.js.map +1 -1
  86. package/lib/cjs/components/step/step.js.map +1 -1
  87. package/lib/cjs/components/swiper/item.js.map +1 -1
  88. package/lib/cjs/components/swiper/swiper.js.map +1 -1
  89. package/lib/cjs/components/tabs/item.js.map +1 -1
  90. package/lib/cjs/components/tabs/tabs.js.map +1 -1
  91. package/lib/cjs/components/tag/tag.js.map +1 -1
  92. package/lib/cjs/components/text/highlight.js.map +1 -1
  93. package/lib/cjs/components/text/number.js.map +1 -1
  94. package/lib/cjs/components/text/text.js.map +1 -1
  95. package/lib/cjs/components/text/time.js.map +1 -1
  96. package/lib/cjs/components/tree/item.js.map +1 -1
  97. package/lib/cjs/components/tree/tree.js.map +1 -1
  98. package/lib/cjs/components/upload/renderFile.js.map +1 -1
  99. package/lib/cjs/components/upload/upload.js.map +1 -1
  100. package/lib/cjs/components/utils/empty/index.js.map +1 -1
  101. package/lib/cjs/components/utils/helpericon/helpericon.js.map +1 -1
  102. package/lib/cjs/components/video/video.js.map +1 -1
  103. package/lib/cjs/js/hooks.js +7 -0
  104. package/lib/cjs/js/hooks.js.map +1 -1
  105. package/lib/cjs/js/usePreview/content.js.map +1 -1
  106. package/lib/cjs/js/usePreview/index.js.map +1 -1
  107. package/lib/cjs/js/usePreview/renderFile.js.map +1 -1
  108. package/lib/cjs/js/usePreview/type.js.map +1 -1
  109. package/lib/cjs/js/useRipple/index.js +6 -6
  110. package/lib/cjs/js/useRipple/index.js.map +1 -1
  111. package/lib/cjs/js/useTheme/index.js.map +1 -1
  112. package/lib/cjs/js/utils.js.map +1 -1
  113. package/lib/css/colors.css +784 -779
  114. package/lib/css/index.css +1 -2
  115. package/lib/css/index.css.map +1 -1
  116. package/lib/css/reset.css +59 -69
  117. package/lib/es/components/affix/affix.js.map +1 -1
  118. package/lib/es/components/affix/totop.js.map +1 -1
  119. package/lib/es/components/badge/badge.js.map +1 -1
  120. package/lib/es/components/button/button.js.map +1 -1
  121. package/lib/es/components/button/confirm.js.map +1 -1
  122. package/lib/es/components/button/group.js.map +1 -1
  123. package/lib/es/components/button/toggle.js.map +1 -1
  124. package/lib/es/components/card/card.js.map +1 -1
  125. package/lib/es/components/checkbox/checkbox.js +1 -1
  126. package/lib/es/components/checkbox/checkbox.js.map +1 -1
  127. package/lib/es/components/checkbox/item.js.map +1 -1
  128. package/lib/es/components/collapse/collapse.js.map +1 -1
  129. package/lib/es/components/collapse/item.js.map +1 -1
  130. package/lib/es/components/datagrid/cell.js +5 -2
  131. package/lib/es/components/datagrid/cell.js.map +1 -1
  132. package/lib/es/components/datagrid/datagrid.js +149 -51
  133. package/lib/es/components/datagrid/datagrid.js.map +1 -1
  134. package/lib/es/components/datagrid/helper.js +79 -0
  135. package/lib/es/components/datagrid/helper.js.map +1 -0
  136. package/lib/es/components/datagrid/resize.js +35 -7
  137. package/lib/es/components/datagrid/resize.js.map +1 -1
  138. package/lib/es/components/datagrid/row.js +17 -3
  139. package/lib/es/components/datagrid/row.js.map +1 -1
  140. package/lib/es/components/datagrid/sorter.js.map +1 -1
  141. package/lib/es/components/datagrid/virtual.js +275 -0
  142. package/lib/es/components/datagrid/virtual.js.map +1 -0
  143. package/lib/es/components/description/description.js.map +1 -1
  144. package/lib/es/components/drawer/drawer.js.map +1 -1
  145. package/lib/es/components/dropdown/dropdown.js.map +1 -1
  146. package/lib/es/components/dropdown/item.js.map +1 -1
  147. package/lib/es/components/editor/controls.js.map +1 -1
  148. package/lib/es/components/editor/editor.js +5 -0
  149. package/lib/es/components/editor/editor.js.map +1 -1
  150. package/lib/es/components/editor/memtion.js.map +1 -1
  151. package/lib/es/components/flex/flex.js.map +1 -1
  152. package/lib/es/components/form/context.js.map +1 -1
  153. package/lib/es/components/form/field.js.map +1 -1
  154. package/lib/es/components/form/form.js.map +1 -1
  155. package/lib/es/components/form/useConfig.js.map +1 -1
  156. package/lib/es/components/form/useForm.js.map +1 -1
  157. package/lib/es/components/icon/icon.js.map +1 -1
  158. package/lib/es/components/image/image.js.map +1 -1
  159. package/lib/es/components/image/list.js.map +1 -1
  160. package/lib/es/components/input/container.js.map +1 -1
  161. package/lib/es/components/input/input.js.map +1 -1
  162. package/lib/es/components/input/number.js.map +1 -1
  163. package/lib/es/components/input/range.js.map +1 -1
  164. package/lib/es/components/input/textarea.js.map +1 -1
  165. package/lib/es/components/list/item.js.map +1 -1
  166. package/lib/es/components/list/list.js.map +1 -1
  167. package/lib/es/components/loading/loading.js.map +1 -1
  168. package/lib/es/components/message/message.js.map +1 -1
  169. package/lib/es/components/modal/content.js.map +1 -1
  170. package/lib/es/components/modal/context.js.map +1 -1
  171. package/lib/es/components/modal/hookModal.js.map +1 -1
  172. package/lib/es/components/modal/modal.js.map +1 -1
  173. package/lib/es/components/modal/useModal.js.map +1 -1
  174. package/lib/es/components/pagination/page.js.map +1 -1
  175. package/lib/es/components/pagination/pagination.js.map +1 -1
  176. package/lib/es/components/picker/colors/footer.js.map +1 -1
  177. package/lib/es/components/picker/colors/handle.js.map +1 -1
  178. package/lib/es/components/picker/colors/index.js.map +1 -1
  179. package/lib/es/components/picker/dates/dates.js.map +1 -1
  180. package/lib/es/components/picker/dates/index.js.map +1 -1
  181. package/lib/es/components/picker/dates/panel.js.map +1 -1
  182. package/lib/es/components/picker/time/index.js.map +1 -1
  183. package/lib/es/components/picker/time/item.js.map +1 -1
  184. package/lib/es/components/picker/time/panel.js.map +1 -1
  185. package/lib/es/components/popconfirm/popconfirm.js.map +1 -1
  186. package/lib/es/components/popup/content.js.map +1 -1
  187. package/lib/es/components/popup/popup.js.map +1 -1
  188. package/lib/es/components/progress/circle.js.map +1 -1
  189. package/lib/es/components/progress/line.js.map +1 -1
  190. package/lib/es/components/progress/progress.js.map +1 -1
  191. package/lib/es/components/radio/item.js.map +1 -1
  192. package/lib/es/components/radio/radio.js +2 -2
  193. package/lib/es/components/radio/radio.js.map +1 -1
  194. package/lib/es/components/resizable/resizable.js.map +1 -1
  195. package/lib/es/components/river/river.js.map +1 -1
  196. package/lib/es/components/select/options.js.map +1 -1
  197. package/lib/es/components/select/select.js.map +1 -1
  198. package/lib/es/components/step/divider.js.map +1 -1
  199. package/lib/es/components/step/item.js.map +1 -1
  200. package/lib/es/components/step/step.js.map +1 -1
  201. package/lib/es/components/swiper/item.js.map +1 -1
  202. package/lib/es/components/swiper/swiper.js.map +1 -1
  203. package/lib/es/components/tabs/item.js.map +1 -1
  204. package/lib/es/components/tabs/tabs.js.map +1 -1
  205. package/lib/es/components/tag/tag.js.map +1 -1
  206. package/lib/es/components/text/highlight.js.map +1 -1
  207. package/lib/es/components/text/number.js.map +1 -1
  208. package/lib/es/components/text/text.js.map +1 -1
  209. package/lib/es/components/text/time.js.map +1 -1
  210. package/lib/es/components/tree/item.js.map +1 -1
  211. package/lib/es/components/tree/tree.js.map +1 -1
  212. package/lib/es/components/upload/renderFile.js.map +1 -1
  213. package/lib/es/components/upload/upload.js.map +1 -1
  214. package/lib/es/components/utils/empty/index.js.map +1 -1
  215. package/lib/es/components/utils/helpericon/helpericon.js.map +1 -1
  216. package/lib/es/components/video/video.js.map +1 -1
  217. package/lib/es/js/hooks.js +8 -1
  218. package/lib/es/js/hooks.js.map +1 -1
  219. package/lib/es/js/usePreview/content.js.map +1 -1
  220. package/lib/es/js/usePreview/index.js.map +1 -1
  221. package/lib/es/js/usePreview/renderFile.js.map +1 -1
  222. package/lib/es/js/usePreview/type.js.map +1 -1
  223. package/lib/es/js/useRipple/index.js +6 -6
  224. package/lib/es/js/useRipple/index.js.map +1 -1
  225. package/lib/es/js/useTheme/index.js.map +1 -1
  226. package/lib/es/js/utils.js.map +1 -1
  227. package/lib/index.js +563 -71
  228. package/lib/types/components/datagrid/type.d.ts +10 -1
  229. package/package.json +97 -98
@@ -1 +1 @@
1
- {"version":3,"file":"controls.js","sources":["../../../../packages/components/editor/controls.tsx"],"sourcesContent":["import {\r\n ClearAllRound,\r\n FormatBoldRound,\r\n FormatItalicRound,\r\n FormatUnderlinedRound,\r\n RedoRound,\r\n StrikethroughSRound,\r\n UndoRound,\r\n} from \"@ricons/material\";\r\nimport { MouseEvent, ReactNode } from \"react\";\r\nimport { type IFilterXSSOptions } from \"xss\";\r\nimport Button from \"../button\";\r\nimport { IButton } from \"../button/type\";\r\nimport Icon from \"../icon\";\r\nimport { IEditorAddtionControl } from \"./type\";\r\n\r\nexport const exec = (a, b?, c?) => {\r\n if (typeof document === \"undefined\") return;\r\n return document.execCommand(a, b, c);\r\n};\r\n\r\nconst escapeHtmlAttr = (value: string) =>\r\n value\r\n .replaceAll(\"&\", \"&amp;\")\r\n .replaceAll('\"', \"&quot;\")\r\n .replaceAll(\"<\", \"&lt;\")\r\n .replaceAll(\">\", \"&gt;\");\r\n\r\nexport const xssOptions: IFilterXSSOptions = {\r\n onIgnoreTagAttr(tag, name, value) {\r\n if ([\"class\", \"contenteditable\"].includes(name)) {\r\n return name + '=\"' + escapeHtmlAttr(value) + '\"';\r\n }\r\n if ([\"data-\", \"style\"].includes(name.substring(0, 5))) {\r\n return name + '=\"' + escapeHtmlAttr(value) + '\"';\r\n }\r\n },\r\n};\r\n\r\nconst handleMouseDown = (e: MouseEvent<HTMLElement>) => {\r\n e.preventDefault();\r\n};\r\n\r\ntype ControlItem = {\r\n key: string;\n icon: ReactNode;\r\n onClick: () => void;\r\n};\r\n\r\nconst defaultControls: ControlItem[] = [\n { key: \"undo\", icon: <UndoRound />, onClick: () => exec(\"undo\") },\n { key: \"redo\", icon: <RedoRound />, onClick: () => exec(\"redo\") },\n { key: \"bold\", icon: <FormatBoldRound />, onClick: () => exec(\"bold\") },\n { key: \"italic\", icon: <FormatItalicRound />, onClick: () => exec(\"italic\") },\n {\n key: \"underline\",\n icon: <FormatUnderlinedRound />,\n onClick: () => exec(\"underline\"),\n },\n {\n key: \"strike\",\n icon: <StrikethroughSRound />,\n onClick: () => exec(\"strikeThrough\"),\n },\n {\n key: \"clear\",\n icon: <ClearAllRound />,\n onClick: () => exec(\"removeFormat\"),\n },\n];\n\r\nexport default function getControls(options: {\r\n controlBtnProps: IButton;\r\n addtionControls?: IEditorAddtionControl[];\r\n getSelection: () => Range | null;\r\n}) {\r\n const { controlBtnProps, addtionControls, getSelection } = options;\r\n\r\n const controls = defaultControls.map(({ key, icon, onClick }) => (\n <Button\n key={key}\n {...controlBtnProps}\n onMouseDown={handleMouseDown}\n onClick={onClick}\n >\n <Icon icon={icon} />\n </Button>\n ));\n\r\n const extControls = (addtionControls ?? []).map((item, index) => (\r\n <Button\r\n key={`addtion-${index}`}\r\n {...controlBtnProps}\r\n onMouseDown={handleMouseDown}\r\n onClick={(e) => item.onClick?.(getSelection(), e)}\r\n >\r\n {item.icon}\r\n </Button>\r\n ));\r\n\r\n return [...controls, ...extControls];\r\n}\r\n"],"names":["_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"controls.js","sources":["../../../../packages/components/editor/controls.tsx"],"sourcesContent":["import {\n ClearAllRound,\n FormatBoldRound,\n FormatItalicRound,\n FormatUnderlinedRound,\n RedoRound,\n StrikethroughSRound,\n UndoRound,\n} from \"@ricons/material\";\nimport { MouseEvent, ReactNode } from \"react\";\nimport { type IFilterXSSOptions } from \"xss\";\nimport Button from \"../button\";\nimport { IButton } from \"../button/type\";\nimport Icon from \"../icon\";\nimport { IEditorAddtionControl } from \"./type\";\n\nexport const exec = (a, b?, c?) => {\n if (typeof document === \"undefined\") return;\n return document.execCommand(a, b, c);\n};\n\nconst escapeHtmlAttr = (value: string) =>\n value\n .replaceAll(\"&\", \"&amp;\")\n .replaceAll('\"', \"&quot;\")\n .replaceAll(\"<\", \"&lt;\")\n .replaceAll(\">\", \"&gt;\");\n\nexport const xssOptions: IFilterXSSOptions = {\n onIgnoreTagAttr(tag, name, value) {\n if ([\"class\", \"contenteditable\"].includes(name)) {\n return name + '=\"' + escapeHtmlAttr(value) + '\"';\n }\n if ([\"data-\", \"style\"].includes(name.substring(0, 5))) {\n return name + '=\"' + escapeHtmlAttr(value) + '\"';\n }\n },\n};\n\nconst handleMouseDown = (e: MouseEvent<HTMLElement>) => {\n e.preventDefault();\n};\n\ntype ControlItem = {\n key: string;\n icon: ReactNode;\n onClick: () => void;\n};\n\nconst defaultControls: ControlItem[] = [\n { key: \"undo\", icon: <UndoRound />, onClick: () => exec(\"undo\") },\n { key: \"redo\", icon: <RedoRound />, onClick: () => exec(\"redo\") },\n { key: \"bold\", icon: <FormatBoldRound />, onClick: () => exec(\"bold\") },\n { key: \"italic\", icon: <FormatItalicRound />, onClick: () => exec(\"italic\") },\n {\n key: \"underline\",\n icon: <FormatUnderlinedRound />,\n onClick: () => exec(\"underline\"),\n },\n {\n key: \"strike\",\n icon: <StrikethroughSRound />,\n onClick: () => exec(\"strikeThrough\"),\n },\n {\n key: \"clear\",\n icon: <ClearAllRound />,\n onClick: () => exec(\"removeFormat\"),\n },\n];\n\nexport default function getControls(options: {\n controlBtnProps: IButton;\n addtionControls?: IEditorAddtionControl[];\n getSelection: () => Range | null;\n}) {\n const { controlBtnProps, addtionControls, getSelection } = options;\n\n const controls = defaultControls.map(({ key, icon, onClick }) => (\n <Button\n key={key}\n {...controlBtnProps}\n onMouseDown={handleMouseDown}\n onClick={onClick}\n >\n <Icon icon={icon} />\n </Button>\n ));\n\n const extControls = (addtionControls ?? []).map((item, index) => (\n <Button\n key={`addtion-${index}`}\n {...controlBtnProps}\n onMouseDown={handleMouseDown}\n onClick={(e) => item.onClick?.(getSelection(), e)}\n >\n {item.icon}\n </Button>\n ));\n\n return [...controls, ...extControls];\n}\n"],"names":["_jsx"],"mappings":"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"}
@@ -79,6 +79,10 @@ const Editor = (props) => {
79
79
  setMemtionKeyword("");
80
80
  setMemtionActiveIndex(0);
81
81
  };
82
+ const syncEditorState = () => {
83
+ selectionRef.current = null;
84
+ hideMemtion();
85
+ };
82
86
  const insertMemtion = (option) => {
83
87
  const replaceRange = getMemtionReplaceRange(memtionTriggerRangeRef.current, selectionRef.current);
84
88
  const range = insertMemtionOption({
@@ -165,6 +169,7 @@ const Editor = (props) => {
165
169
  if (getEditorValue(true) === nextValue)
166
170
  return;
167
171
  setEditorValue(nextValue);
172
+ syncEditorState();
168
173
  syncHeight();
169
174
  }, [autosize, mode, value]);
170
175
  useEffect(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"editor.js","sources":["../../../../packages/components/editor/editor.tsx"],"sourcesContent":["import classNames from \"classnames\";\r\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\r\nimport xss from \"xss\";\r\nimport { IButton } from \"../button/type\";\r\nimport getControls, { exec, xssOptions } from \"./controls\";\r\nimport \"./index.css\";\r\nimport Memtion, {\r\n filterMemtionOptions,\r\n getMemtionReplaceRange,\r\n getMemtionText,\r\n getSelectionRect,\r\n insertMemtionOption,\r\n removeAdjacentMemtionTag,\r\n sanitizePlaintextOnMemtionHtml,\r\n} from \"./memtion\";\r\nimport { IEditor, IEditorMemtionOption } from \"./type\";\r\n\r\nconst controlBtnProps: IButton = {\r\n square: true,\r\n flat: true,\r\n size: \"small\",\r\n};\r\n\r\nconst Editor = (props: IEditor) => {\r\n const {\r\n ref,\r\n value = \"\",\r\n width,\r\n height = \"10em\",\r\n placeholder,\r\n autosize,\r\n border = true,\r\n mode = \"rich\",\r\n hideControl,\r\n addtionControls,\r\n memtion,\r\n className,\r\n style,\r\n onChange,\r\n onEnter,\r\n onFocus,\r\n onBlur,\r\n onPaste,\r\n onMouseUp,\r\n onKeyUp,\r\n onKeyDown,\r\n ...restProps\r\n } = props;\r\n const editorRef = useRef<HTMLDivElement>(null);\r\n const selectionRef = useRef<Range | null>(null);\r\n const memtionTriggerRangeRef = useRef<Range | null>(null);\r\n const pendingMemtionRef = useRef(false);\r\n const isPlaintextMode = mode === \"plaintext\";\r\n const isRichMode = mode === \"rich\";\r\n const isPlaintextOnMemtionMode = mode === \"plaintextOnMemtion\";\r\n const [memtionVisible, setMemtionVisible] = useState(false);\r\n const [memtionRect, setMemtionRect] = useState<DOMRect | null>(null);\r\n const [memtionKeyword, setMemtionKeyword] = useState(\"\");\r\n const [memtionActiveIndex, setMemtionActiveIndex] = useState(0);\r\n const memtionOptions = useMemo(\r\n () => filterMemtionOptions(memtion?.options ?? [], memtionKeyword),\r\n [memtion?.options, memtionKeyword],\r\n );\r\n\r\n const sanitizeValue = (nextValue: string) => {\r\n if (isPlaintextMode) {\r\n return nextValue === \"\\n\" ? \"\" : nextValue;\r\n }\r\n\r\n const safeHtml = isPlaintextOnMemtionMode\r\n ? sanitizePlaintextOnMemtionHtml(xss(nextValue, xssOptions))\r\n : xss(nextValue, xssOptions);\r\n\r\n return safeHtml === \"<br>\" ? \"\" : safeHtml;\r\n };\r\n\r\n const syncHeight = () => {\r\n if (autosize && editorRef.current) {\r\n editorRef.current.style.height = `${editorRef.current.scrollHeight}px`;\r\n }\r\n };\r\n\r\n const rememberSelection = () => {\r\n if (!editorRef.current) return;\r\n\r\n const selection = window.getSelection();\r\n if (!selection?.rangeCount) return;\r\n\r\n const range = selection.getRangeAt(0);\r\n const container = range.commonAncestorContainer;\r\n const parent =\r\n container.nodeType === Node.ELEMENT_NODE\r\n ? (container as Element)\r\n : container.parentElement;\r\n\r\n if (!parent || !editorRef.current.contains(parent)) return;\r\n\r\n selectionRef.current = range.cloneRange();\r\n };\r\n\r\n const setEditorValue = (nextValue: string) => {\r\n if (!editorRef.current) return;\r\n\r\n const safeValue = sanitizeValue(nextValue);\r\n\r\n if (isPlaintextMode) {\r\n editorRef.current.textContent = safeValue;\r\n return;\r\n }\r\n\r\n editorRef.current.innerHTML = safeValue;\r\n };\r\n\r\n const getEditorValue = (sanitize = false) => {\r\n const nextValue = !editorRef.current\r\n ? \"\"\r\n : isPlaintextMode\r\n ? (editorRef.current.textContent ?? \"\")\r\n : editorRef.current.innerHTML;\r\n\r\n return sanitize ? sanitizeValue(nextValue) : nextValue;\r\n };\r\n\r\n const hideMemtion = () => {\r\n pendingMemtionRef.current = false;\r\n memtionTriggerRangeRef.current = null;\r\n setMemtionVisible(false);\r\n setMemtionRect(null);\r\n setMemtionKeyword(\"\");\r\n setMemtionActiveIndex(0);\r\n };\r\n\r\n const insertMemtion = (option: IEditorMemtionOption) => {\r\n const replaceRange = getMemtionReplaceRange(\r\n memtionTriggerRangeRef.current,\r\n selectionRef.current,\r\n );\r\n\r\n const range = insertMemtionOption({\r\n editor: editorRef.current,\r\n range: replaceRange,\r\n mode,\r\n memtion,\r\n option,\r\n sanitizeValue,\r\n });\r\n\r\n if (!range || !editorRef.current) return;\r\n\r\n selectionRef.current = range.cloneRange();\r\n hideMemtion();\r\n editorRef.current.dispatchEvent(new Event(\"input\", { bubbles: true }));\r\n };\r\n\r\n const handlePaste = (e) => {\r\n onPaste?.(e);\r\n\r\n if (e.defaultPrevented) return;\r\n\r\n e.preventDefault();\r\n\r\n const html = e.clipboardData.getData(\"text/html\");\r\n const text = e.clipboardData.getData(\"text/plain\");\r\n const pasteValue = isPlaintextMode\r\n ? text\r\n : html\r\n ? sanitizeValue(html)\r\n : text;\r\n\r\n exec(isPlaintextMode ? \"insertText\" : \"insertHTML\", false, pasteValue);\r\n };\r\n\r\n const handleKeyDown = (e) => {\r\n onKeyDown?.(e);\r\n\r\n if (\r\n !isPlaintextMode &&\r\n (e.key === \"Backspace\" || e.key === \"Delete\") &&\r\n removeAdjacentMemtionTag(editorRef.current, e.key)\r\n ) {\r\n e.preventDefault();\r\n rememberSelection();\r\n editorRef.current?.dispatchEvent(\r\n new Event(\"input\", { bubbles: true }),\r\n );\r\n return;\r\n }\r\n\r\n const memtionKey = memtion?.key ?? \"@\";\r\n if (memtionVisible && e.key === \" \") {\r\n hideMemtion();\r\n }\r\n\r\n if (memtionVisible && memtionOptions.length) {\r\n switch (e.key) {\r\n case \"ArrowDown\":\r\n e.preventDefault();\r\n setMemtionActiveIndex((index) =>\r\n index + 1 >= memtionOptions.length ? 0 : index + 1,\r\n );\r\n return;\r\n case \"ArrowUp\":\r\n e.preventDefault();\r\n setMemtionActiveIndex((index) =>\r\n index - 1 < 0 ? memtionOptions.length - 1 : index - 1,\r\n );\r\n return;\r\n case \"Enter\":\r\n e.preventDefault();\r\n insertMemtion(memtionOptions[memtionActiveIndex]);\r\n return;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n if (memtion && e.key === memtionKey) {\r\n rememberSelection();\r\n memtionTriggerRangeRef.current =\r\n selectionRef.current?.cloneRange() ?? null;\r\n pendingMemtionRef.current = true;\r\n }\r\n\r\n switch (e.key) {\r\n case \"Tab\":\r\n e.preventDefault();\r\n exec(\r\n isRichMode ? \"insertHTML\" : \"insertText\",\r\n false,\r\n isRichMode ? \"&#09;\" : \"\\t\",\r\n );\r\n break;\r\n case \"Enter\":\r\n if (!onEnter) break;\r\n e.preventDefault();\r\n onEnter(e);\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (!editorRef.current) return;\r\n const nextValue = sanitizeValue(value);\r\n if (getEditorValue(true) === nextValue) return;\r\n\r\n setEditorValue(nextValue);\r\n syncHeight();\r\n }, [autosize, mode, value]);\r\n\r\n useEffect(() => {\r\n if (!memtionOptions.length) {\r\n setMemtionActiveIndex(0);\r\n return;\r\n }\r\n\r\n setMemtionActiveIndex((index) =>\r\n index >= memtionOptions.length ? 0 : index,\r\n );\r\n }, [memtionOptions]);\r\n\r\n const handleInput = (e) => {\r\n const rawValue = getEditorValue();\r\n let nextValue = sanitizeValue(rawValue);\r\n\r\n if (\r\n isPlaintextOnMemtionMode &&\r\n rawValue !== nextValue &&\r\n editorRef.current\r\n ) {\r\n setEditorValue(nextValue);\r\n }\r\n\r\n if (!nextValue && rawValue && editorRef.current) {\r\n nextValue = \"\";\r\n setEditorValue(nextValue);\r\n }\r\n\r\n rememberSelection();\r\n\r\n if (memtion && (pendingMemtionRef.current || memtionVisible)) {\r\n const memtionKey = memtion?.key ?? \"@\";\r\n const memtionText = getMemtionText(\r\n memtionTriggerRangeRef.current,\r\n selectionRef.current,\r\n );\r\n\r\n if (!memtionText.startsWith(memtionKey) || /\\s/.test(memtionText)) {\r\n hideMemtion();\r\n } else {\r\n const keyword = memtionText.slice(memtionKey.length);\r\n pendingMemtionRef.current = false;\r\n setMemtionRect(getSelectionRect(selectionRef.current));\r\n setMemtionKeyword(keyword);\r\n setMemtionActiveIndex(0);\r\n setMemtionVisible(true);\r\n }\r\n }\r\n\r\n syncHeight();\r\n\r\n onChange?.(nextValue, e);\r\n };\r\n\r\n const handleFocus = (e) => {\r\n rememberSelection();\r\n onFocus?.(e);\r\n };\r\n\r\n const handleBlur = (e) => {\r\n hideMemtion();\r\n onBlur?.(e);\r\n };\r\n\r\n const handleMouseUp = (e) => {\r\n rememberSelection();\r\n onMouseUp?.(e);\r\n };\r\n\r\n const handleKeyUp = (e) => {\r\n rememberSelection();\r\n onKeyUp?.(e);\r\n };\r\n\r\n const handleRef = (node: HTMLDivElement | null) => {\r\n editorRef.current = node;\r\n\r\n if (typeof ref === \"function\") {\r\n ref(node);\r\n return;\r\n }\r\n\r\n if (ref) {\r\n ref.current = node;\r\n }\r\n };\r\n\r\n const getSelection = useCallback(\r\n () => selectionRef.current?.cloneRange() ?? null,\r\n [],\r\n );\r\n\r\n const controls = useMemo(\r\n () =>\r\n getControls({\r\n controlBtnProps,\r\n addtionControls,\r\n getSelection,\r\n }),\r\n [addtionControls, getSelection],\r\n );\r\n\r\n return (\r\n <div\r\n className={classNames(\"i-editor\", className, {\r\n \"i-editor-borderless\": !border,\r\n })}\r\n style={{\r\n ...style,\r\n [autosize ? \"minHeight\" : \"height\"]: height,\r\n width,\r\n }}\r\n >\r\n {!hideControl && (\r\n <div className=\"i-editor-controls\">{controls}</div>\r\n )}\r\n\r\n {memtion && (\r\n <Memtion\r\n visible={memtionVisible}\r\n rect={memtionRect}\r\n options={memtionOptions}\r\n activeIndex={memtionActiveIndex}\r\n onActiveChange={setMemtionActiveIndex}\r\n onSelect={insertMemtion}\r\n />\r\n )}\r\n\r\n <div\r\n ref={handleRef}\r\n className=\"i-editor-content\"\r\n data-placeholder={placeholder}\r\n contentEditable={isPlaintextMode ? \"plaintext-only\" : true}\r\n onFocus={handleFocus}\r\n onBlur={handleBlur}\r\n onMouseUp={handleMouseUp}\r\n onPaste={handlePaste}\r\n onInput={handleInput}\r\n onKeyUp={handleKeyUp}\r\n onKeyDown={handleKeyDown}\r\n {...restProps}\r\n />\r\n </div>\r\n );\r\n};\r\n\r\nexport default Editor;\r\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"editor.js","sources":["../../../../packages/components/editor/editor.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport xss from \"xss\";\nimport { IButton } from \"../button/type\";\nimport getControls, { exec, xssOptions } from \"./controls\";\nimport \"./index.css\";\nimport Memtion, {\n filterMemtionOptions,\n getMemtionReplaceRange,\n getMemtionText,\n getSelectionRect,\n insertMemtionOption,\n removeAdjacentMemtionTag,\n sanitizePlaintextOnMemtionHtml,\n} from \"./memtion\";\nimport { IEditor, IEditorMemtionOption } from \"./type\";\n\nconst controlBtnProps: IButton = {\n square: true,\n flat: true,\n size: \"small\",\n};\n\nconst Editor = (props: IEditor) => {\n const {\n ref,\n value = \"\",\n width,\n height = \"10em\",\n placeholder,\n autosize,\n border = true,\n mode = \"rich\",\n hideControl,\n addtionControls,\n memtion,\n className,\n style,\n onChange,\n onEnter,\n onFocus,\n onBlur,\n onPaste,\n onMouseUp,\n onKeyUp,\n onKeyDown,\n ...restProps\n } = props;\n const editorRef = useRef<HTMLDivElement>(null);\n const selectionRef = useRef<Range | null>(null);\n const memtionTriggerRangeRef = useRef<Range | null>(null);\n const pendingMemtionRef = useRef(false);\n const isPlaintextMode = mode === \"plaintext\";\n const isRichMode = mode === \"rich\";\n const isPlaintextOnMemtionMode = mode === \"plaintextOnMemtion\";\n const [memtionVisible, setMemtionVisible] = useState(false);\n const [memtionRect, setMemtionRect] = useState<DOMRect | null>(null);\n const [memtionKeyword, setMemtionKeyword] = useState(\"\");\n const [memtionActiveIndex, setMemtionActiveIndex] = useState(0);\n const memtionOptions = useMemo(\n () => filterMemtionOptions(memtion?.options ?? [], memtionKeyword),\n [memtion?.options, memtionKeyword],\n );\n\n const sanitizeValue = (nextValue: string) => {\n if (isPlaintextMode) {\n return nextValue === \"\\n\" ? \"\" : nextValue;\n }\n\n const safeHtml = isPlaintextOnMemtionMode\n ? sanitizePlaintextOnMemtionHtml(xss(nextValue, xssOptions))\n : xss(nextValue, xssOptions);\n\n return safeHtml === \"<br>\" ? \"\" : safeHtml;\n };\n\n const syncHeight = () => {\n if (autosize && editorRef.current) {\n editorRef.current.style.height = `${editorRef.current.scrollHeight}px`;\n }\n };\n\n const rememberSelection = () => {\n if (!editorRef.current) return;\n\n const selection = window.getSelection();\n if (!selection?.rangeCount) return;\n\n const range = selection.getRangeAt(0);\n const container = range.commonAncestorContainer;\n const parent =\n container.nodeType === Node.ELEMENT_NODE\n ? (container as Element)\n : container.parentElement;\n\n if (!parent || !editorRef.current.contains(parent)) return;\n\n selectionRef.current = range.cloneRange();\n };\n\n const setEditorValue = (nextValue: string) => {\n if (!editorRef.current) return;\n\n const safeValue = sanitizeValue(nextValue);\n\n if (isPlaintextMode) {\n editorRef.current.textContent = safeValue;\n return;\n }\n\n editorRef.current.innerHTML = safeValue;\n };\n\n const getEditorValue = (sanitize = false) => {\n const nextValue = !editorRef.current\n ? \"\"\n : isPlaintextMode\n ? (editorRef.current.textContent ?? \"\")\n : editorRef.current.innerHTML;\n\n return sanitize ? sanitizeValue(nextValue) : nextValue;\n };\n\n const hideMemtion = () => {\n pendingMemtionRef.current = false;\n memtionTriggerRangeRef.current = null;\n setMemtionVisible(false);\n setMemtionRect(null);\n setMemtionKeyword(\"\");\n setMemtionActiveIndex(0);\n };\n\n const syncEditorState = () => {\n selectionRef.current = null;\n hideMemtion();\n };\n\n const insertMemtion = (option: IEditorMemtionOption) => {\n const replaceRange = getMemtionReplaceRange(\n memtionTriggerRangeRef.current,\n selectionRef.current,\n );\n\n const range = insertMemtionOption({\n editor: editorRef.current,\n range: replaceRange,\n mode,\n memtion,\n option,\n sanitizeValue,\n });\n\n if (!range || !editorRef.current) return;\n\n selectionRef.current = range.cloneRange();\n hideMemtion();\n editorRef.current.dispatchEvent(new Event(\"input\", { bubbles: true }));\n };\n\n const handlePaste = (e) => {\n onPaste?.(e);\n\n if (e.defaultPrevented) return;\n\n e.preventDefault();\n\n const html = e.clipboardData.getData(\"text/html\");\n const text = e.clipboardData.getData(\"text/plain\");\n const pasteValue = isPlaintextMode\n ? text\n : html\n ? sanitizeValue(html)\n : text;\n\n exec(isPlaintextMode ? \"insertText\" : \"insertHTML\", false, pasteValue);\n };\n\n const handleKeyDown = (e) => {\n onKeyDown?.(e);\n\n if (\n !isPlaintextMode &&\n (e.key === \"Backspace\" || e.key === \"Delete\") &&\n removeAdjacentMemtionTag(editorRef.current, e.key)\n ) {\n e.preventDefault();\n rememberSelection();\n editorRef.current?.dispatchEvent(\n new Event(\"input\", { bubbles: true }),\n );\n return;\n }\n\n const memtionKey = memtion?.key ?? \"@\";\n if (memtionVisible && e.key === \" \") {\n hideMemtion();\n }\n\n if (memtionVisible && memtionOptions.length) {\n switch (e.key) {\n case \"ArrowDown\":\n e.preventDefault();\n setMemtionActiveIndex((index) =>\n index + 1 >= memtionOptions.length ? 0 : index + 1,\n );\n return;\n case \"ArrowUp\":\n e.preventDefault();\n setMemtionActiveIndex((index) =>\n index - 1 < 0 ? memtionOptions.length - 1 : index - 1,\n );\n return;\n case \"Enter\":\n e.preventDefault();\n insertMemtion(memtionOptions[memtionActiveIndex]);\n return;\n default:\n break;\n }\n }\n\n if (memtion && e.key === memtionKey) {\n rememberSelection();\n memtionTriggerRangeRef.current =\n selectionRef.current?.cloneRange() ?? null;\n pendingMemtionRef.current = true;\n }\n\n switch (e.key) {\n case \"Tab\":\n e.preventDefault();\n exec(\n isRichMode ? \"insertHTML\" : \"insertText\",\n false,\n isRichMode ? \"&#09;\" : \"\\t\",\n );\n break;\n case \"Enter\":\n if (!onEnter) break;\n e.preventDefault();\n onEnter(e);\n break;\n default:\n break;\n }\n };\n\n useEffect(() => {\n if (!editorRef.current) return;\n const nextValue = sanitizeValue(value);\n if (getEditorValue(true) === nextValue) return;\n\n setEditorValue(nextValue);\n syncEditorState();\n syncHeight();\n }, [autosize, mode, value]);\n\n useEffect(() => {\n if (!memtionOptions.length) {\n setMemtionActiveIndex(0);\n return;\n }\n\n setMemtionActiveIndex((index) =>\n index >= memtionOptions.length ? 0 : index,\n );\n }, [memtionOptions]);\n\n const handleInput = (e) => {\n const rawValue = getEditorValue();\n let nextValue = sanitizeValue(rawValue);\n\n if (\n isPlaintextOnMemtionMode &&\n rawValue !== nextValue &&\n editorRef.current\n ) {\n setEditorValue(nextValue);\n }\n\n if (!nextValue && rawValue && editorRef.current) {\n nextValue = \"\";\n setEditorValue(nextValue);\n }\n\n rememberSelection();\n\n if (memtion && (pendingMemtionRef.current || memtionVisible)) {\n const memtionKey = memtion?.key ?? \"@\";\n const memtionText = getMemtionText(\n memtionTriggerRangeRef.current,\n selectionRef.current,\n );\n\n if (!memtionText.startsWith(memtionKey) || /\\s/.test(memtionText)) {\n hideMemtion();\n } else {\n const keyword = memtionText.slice(memtionKey.length);\n pendingMemtionRef.current = false;\n setMemtionRect(getSelectionRect(selectionRef.current));\n setMemtionKeyword(keyword);\n setMemtionActiveIndex(0);\n setMemtionVisible(true);\n }\n }\n\n syncHeight();\n\n onChange?.(nextValue, e);\n };\n\n const handleFocus = (e) => {\n rememberSelection();\n onFocus?.(e);\n };\n\n const handleBlur = (e) => {\n hideMemtion();\n onBlur?.(e);\n };\n\n const handleMouseUp = (e) => {\n rememberSelection();\n onMouseUp?.(e);\n };\n\n const handleKeyUp = (e) => {\n rememberSelection();\n onKeyUp?.(e);\n };\n\n const handleRef = (node: HTMLDivElement | null) => {\n editorRef.current = node;\n\n if (typeof ref === \"function\") {\n ref(node);\n return;\n }\n\n if (ref) {\n ref.current = node;\n }\n };\n\n const getSelection = useCallback(\n () => selectionRef.current?.cloneRange() ?? null,\n [],\n );\n\n const controls = useMemo(\n () =>\n getControls({\n controlBtnProps,\n addtionControls,\n getSelection,\n }),\n [addtionControls, getSelection],\n );\n\n return (\n <div\n className={classNames(\"i-editor\", className, {\n \"i-editor-borderless\": !border,\n })}\n style={{\n ...style,\n [autosize ? \"minHeight\" : \"height\"]: height,\n width,\n }}\n >\n {!hideControl && (\n <div className=\"i-editor-controls\">{controls}</div>\n )}\n\n {memtion && (\n <Memtion\n visible={memtionVisible}\n rect={memtionRect}\n options={memtionOptions}\n activeIndex={memtionActiveIndex}\n onActiveChange={setMemtionActiveIndex}\n onSelect={insertMemtion}\n />\n )}\n\n <div\n ref={handleRef}\n className=\"i-editor-content\"\n data-placeholder={placeholder}\n contentEditable={isPlaintextMode ? \"plaintext-only\" : true}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onMouseUp={handleMouseUp}\n onPaste={handlePaste}\n onInput={handleInput}\n onKeyUp={handleKeyUp}\n onKeyDown={handleKeyDown}\n {...restProps}\n />\n </div>\n );\n};\n\nexport default Editor;\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"memtion.js","sources":["../../../../packages/components/editor/memtion.tsx"],"sourcesContent":["import { memo, ReactNode } from \"react\";\r\nimport { createPortal } from \"react-dom\";\r\nimport { renderToStaticMarkup } from \"react-dom/server\";\r\nimport List from \"../list\";\r\nimport { IEditorMemtion, IEditorMemtionOption } from \"./type\";\r\n\r\nexport const MEMTION_TAG_CLASS_NAME = \"i-memtion-tag\";\r\n\r\nconst blockTags = new Set([\r\n \"ADDRESS\",\r\n \"ARTICLE\",\r\n \"ASIDE\",\r\n \"BLOCKQUOTE\",\r\n \"DIV\",\r\n \"DL\",\r\n \"FIELDSET\",\r\n \"FIGCAPTION\",\r\n \"FIGURE\",\r\n \"FOOTER\",\r\n \"FORM\",\r\n \"H1\",\r\n \"H2\",\r\n \"H3\",\r\n \"H4\",\r\n \"H5\",\r\n \"H6\",\r\n \"HEADER\",\r\n \"LI\",\r\n \"MAIN\",\r\n \"NAV\",\r\n \"OL\",\r\n \"P\",\r\n \"PRE\",\r\n \"SECTION\",\r\n \"TABLE\",\r\n \"TD\",\r\n \"TH\",\r\n \"TR\",\r\n \"UL\",\r\n]);\r\n\r\nconst escapeHtmlAttr = (value: string) =>\r\n value\r\n .replaceAll(\"&\", \"&amp;\")\r\n .replaceAll('\"', \"&quot;\")\r\n .replaceAll(\"<\", \"&lt;\")\r\n .replaceAll(\">\", \"&gt;\");\r\n\r\ninterface IMemtionProps {\r\n visible?: boolean;\r\n rect?: DOMRect | null;\r\n options?: IEditorMemtionOption[];\r\n activeIndex?: number;\r\n onActiveChange?: (index: number) => void;\r\n onSelect?: (option: IEditorMemtionOption) => void;\r\n}\r\n\r\ninterface IInsertMemtionOptionParams {\r\n editor: HTMLDivElement | null;\r\n range: Range | null;\r\n mode: \"rich\" | \"plaintext\" | \"plaintextOnMemtion\";\r\n memtion?: IEditorMemtion;\r\n option: IEditorMemtionOption;\r\n sanitizeValue: (value: string) => string;\r\n}\r\n\r\nconst getInsertNode = (\r\n memtion: IEditorMemtion | undefined,\r\n option: IEditorMemtionOption,\r\n) => memtion?.insert?.(option) ?? option.value;\r\n\r\nconst getInsertText = (\r\n memtion: IEditorMemtion | undefined,\r\n option: IEditorMemtionOption,\r\n) => {\r\n const nextNode = getInsertNode(memtion, option);\r\n\r\n if (typeof nextNode === \"string\" || typeof nextNode === \"number\") {\r\n return `${String(nextNode)} `;\r\n }\r\n\r\n return `${String(option.value)} `;\r\n};\r\n\r\nconst getInsertHtml = (\r\n memtion: IEditorMemtion | undefined,\r\n option: IEditorMemtionOption,\r\n sanitizeValue: (value: string) => string,\r\n) => {\r\n const nextNode = getInsertNode(memtion, option);\r\n\r\n if (nextNode === null || nextNode === undefined || nextNode === false) {\r\n return \"\";\r\n }\r\n\r\n const content = sanitizeValue(\r\n renderToStaticMarkup(<>{nextNode as ReactNode}</>),\r\n );\r\n\r\n return `<span class=\"${MEMTION_TAG_CLASS_NAME}\" contenteditable=\"false\" data-memtion-value=\"${escapeHtmlAttr(String(option.value))}\">${content}</span>`;\r\n};\r\n\r\nexport const getSelectionRect = (range: Range | null) => {\r\n if (!range) return null;\r\n\r\n const rect = range.getBoundingClientRect();\r\n\r\n if (rect.width || rect.height) {\r\n return rect;\r\n }\r\n\r\n return range.getClientRects()[0] ?? rect;\r\n};\r\n\r\nexport const insertMemtionOption = ({\r\n editor,\r\n range,\r\n mode,\r\n memtion,\r\n option,\r\n sanitizeValue,\r\n}: IInsertMemtionOptionParams) => {\r\n if (!editor || !range) return null;\r\n\r\n const browserSelection = window.getSelection();\r\n if (!browserSelection) return null;\r\n\r\n const nextRange = range.cloneRange();\r\n browserSelection.removeAllRanges();\r\n browserSelection.addRange(nextRange);\r\n editor.focus();\r\n nextRange.deleteContents();\r\n\r\n if (mode === \"plaintext\") {\r\n const text = document.createTextNode(getInsertText(memtion, option));\r\n nextRange.insertNode(text);\r\n nextRange.setStartAfter(text);\r\n } else {\r\n const html = getInsertHtml(memtion, option, sanitizeValue);\r\n const fragment = nextRange.createContextualFragment(html);\r\n const lastNode = fragment.lastChild;\r\n\r\n nextRange.insertNode(fragment);\r\n\r\n if (lastNode) {\r\n nextRange.setStartAfter(lastNode);\r\n nextRange.collapse(true);\r\n }\r\n }\r\n\r\n nextRange.collapse(true);\r\n browserSelection.removeAllRanges();\r\n browserSelection.addRange(nextRange);\r\n\r\n return nextRange;\r\n};\r\n\r\nexport const getMemtionText = (\r\n triggerRange: Range | null,\r\n selectionRange: Range | null,\r\n) => {\r\n if (!triggerRange || !selectionRange) return \"\";\r\n\r\n const range = triggerRange.cloneRange();\r\n range.setEnd(selectionRange.endContainer, selectionRange.endOffset);\r\n\r\n return range.toString();\r\n};\r\n\r\nexport const getMemtionReplaceRange = (\r\n triggerRange: Range | null,\r\n selectionRange: Range | null,\r\n) => {\r\n if (!triggerRange || !selectionRange) return null;\r\n\r\n const range = triggerRange.cloneRange();\r\n range.setEnd(selectionRange.endContainer, selectionRange.endOffset);\r\n\r\n return range;\r\n};\r\n\r\nexport const filterMemtionOptions = (\r\n options: IEditorMemtionOption[],\r\n keyword: string,\r\n) => {\r\n const normalizedKeyword = keyword.trim().toLowerCase();\r\n\r\n if (!normalizedKeyword) {\r\n return options;\r\n }\r\n\r\n return options.filter((option) =>\r\n String(option.value).toLowerCase().includes(normalizedKeyword),\r\n );\r\n};\r\n\r\nconst isMemtionTag = (node: Node | null) =>\r\n node instanceof HTMLElement &&\r\n node.classList.contains(MEMTION_TAG_CLASS_NAME);\r\n\r\nconst appendBreak = (container: HTMLElement) => {\r\n if (!container.lastChild || container.lastChild.nodeName === \"BR\") {\r\n return;\r\n }\r\n\r\n container.appendChild(document.createElement(\"br\"));\r\n};\r\n\r\nconst appendPlaintextOnMemtionNode = (\r\n container: HTMLElement,\r\n node: Node | null,\r\n) => {\r\n if (!node) return;\r\n\r\n if (node.nodeType === Node.TEXT_NODE) {\r\n container.appendChild(\r\n document.createTextNode(\r\n (node.textContent ?? \"\").replaceAll(\"\\r\", \"\"),\r\n ),\r\n );\r\n return;\r\n }\r\n\r\n if (!(node instanceof HTMLElement)) {\r\n return;\r\n }\r\n\r\n if (isMemtionTag(node)) {\r\n const tag = document.createElement(\"span\");\r\n const memtionValue = node.getAttribute(\"data-memtion-value\");\r\n\r\n tag.className = MEMTION_TAG_CLASS_NAME;\r\n tag.setAttribute(\"contenteditable\", \"false\");\r\n\r\n if (memtionValue !== null) {\r\n tag.setAttribute(\"data-memtion-value\", memtionValue);\r\n }\r\n\r\n tag.innerHTML = node.innerHTML;\r\n container.appendChild(tag);\r\n return;\r\n }\r\n\r\n if (node.tagName === \"BR\") {\r\n appendBreak(container);\r\n return;\r\n }\r\n\r\n Array.from(node.childNodes).forEach((child) => {\r\n appendPlaintextOnMemtionNode(container, child);\r\n });\r\n\r\n if (blockTags.has(node.tagName)) {\r\n appendBreak(container);\r\n }\r\n};\r\n\r\nexport const sanitizePlaintextOnMemtionHtml = (value: string) => {\r\n if (typeof document === \"undefined\") {\r\n return value;\r\n }\r\n\r\n const source = document.createElement(\"div\");\r\n const result = document.createElement(\"div\");\r\n\r\n source.innerHTML = value;\r\n\r\n Array.from(source.childNodes).forEach((child) => {\r\n appendPlaintextOnMemtionNode(result, child);\r\n });\r\n\r\n while (result.lastChild?.nodeName === \"BR\") {\r\n result.lastChild.remove();\r\n }\r\n\r\n return result.innerHTML;\r\n};\r\n\r\nconst getAdjacentMemtionTag = (\r\n range: Range,\r\n direction: \"backward\" | \"forward\",\r\n) => {\r\n const { startContainer, startOffset } = range;\r\n\r\n if (startContainer.nodeType === Node.TEXT_NODE) {\r\n const textNode = startContainer as Text;\r\n\r\n if (direction === \"backward\" && startOffset === 0) {\r\n return isMemtionTag(textNode.previousSibling)\r\n ? (textNode.previousSibling as HTMLElement)\r\n : null;\r\n }\r\n\r\n if (direction === \"forward\" && startOffset === textNode.data.length) {\r\n return isMemtionTag(textNode.nextSibling)\r\n ? (textNode.nextSibling as HTMLElement)\r\n : null;\r\n }\r\n\r\n return null;\r\n }\r\n\r\n const element = startContainer as Element;\r\n const targetIndex =\r\n direction === \"backward\" ? startOffset - 1 : startOffset;\r\n const targetNode = element.childNodes.item(targetIndex);\r\n\r\n return isMemtionTag(targetNode) ? (targetNode as HTMLElement) : null;\r\n};\r\n\r\nexport const removeAdjacentMemtionTag = (\r\n editor: HTMLDivElement | null,\r\n key: \"Backspace\" | \"Delete\",\r\n) => {\r\n if (!editor) return false;\r\n\r\n const selection = window.getSelection();\r\n if (!selection?.rangeCount || !selection.isCollapsed) return false;\r\n\r\n const activeRange = selection.getRangeAt(0);\r\n const tag = getAdjacentMemtionTag(\r\n activeRange,\r\n key === \"Backspace\" ? \"backward\" : \"forward\",\r\n );\r\n\r\n if (!tag || !tag.parentNode) return false;\r\n\r\n const parent = tag.parentNode;\r\n const nextSibling = tag.nextSibling;\r\n const index = Array.prototype.indexOf.call(parent.childNodes, tag);\r\n\r\n if (nextSibling?.nodeType === Node.TEXT_NODE) {\r\n const textNode = nextSibling as Text;\r\n\r\n if (textNode.data.startsWith(\" \")) {\r\n textNode.deleteData(0, 1);\r\n\r\n if (!textNode.data.length) {\r\n nextSibling.remove();\r\n }\r\n }\r\n }\r\n\r\n tag.remove();\r\n\r\n const range = document.createRange();\r\n range.setStart(parent, Math.min(index, parent.childNodes.length));\r\n range.collapse(true);\r\n selection.removeAllRanges();\r\n selection.addRange(range);\r\n editor.focus();\r\n\r\n return true;\r\n};\r\n\r\nconst Memtion = (props: IMemtionProps) => {\r\n const { visible, rect, options, activeIndex, onActiveChange, onSelect } =\r\n props;\r\n\r\n if (!visible || !rect || !options?.length) {\r\n return null;\r\n }\r\n\r\n const content = (\r\n <List\r\n className=\"i-editor-memtion\"\r\n type=\"option\"\r\n style={{\r\n position: \"fixed\",\r\n top: rect.bottom,\r\n left: rect.left,\r\n }}\r\n >\r\n {options.map((option, i) => (\r\n <List.Item\r\n key={`${option.value}-${i}`}\r\n type=\"option\"\r\n active={i === activeIndex}\r\n onMouseDown={(e) => e.preventDefault()}\r\n onMouseEnter={() => onActiveChange?.(i)}\r\n onClick={() => onSelect?.(option)}\r\n >\r\n {option.label}\r\n </List.Item>\r\n ))}\r\n </List>\r\n );\r\n\r\n if (typeof document === \"undefined\") {\r\n return content;\r\n }\r\n\r\n return createPortal(content, document.body);\r\n};\r\n\r\nexport default memo(Memtion);\r\n"],"names":["_jsx","_Fragment"],"mappings":";;;;;;AAMO,MAAM,sBAAsB,GAAG;AAEtC,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC;IACtB,SAAS;IACT,SAAS;IACT,OAAO;IACP,YAAY;IACZ,KAAK;IACL,IAAI;IACJ,UAAU;IACV,YAAY;IACZ,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,QAAQ;IACR,IAAI;IACJ,MAAM;IACN,KAAK;IACL,IAAI;IACJ,GAAG;IACH,KAAK;IACL,SAAS;IACT,OAAO;IACP,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;AACP,CAAA,CAAC;AAEF,MAAM,cAAc,GAAG,CAAC,KAAa,KACjC;AACK,KAAA,UAAU,CAAC,GAAG,EAAE,OAAO;AACvB,KAAA,UAAU,CAAC,GAAG,EAAE,QAAQ;AACxB,KAAA,UAAU,CAAC,GAAG,EAAE,MAAM;AACtB,KAAA,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC;AAoBhC,MAAM,aAAa,GAAG,CAClB,OAAmC,EACnC,MAA4B,KAC3B,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK;AAE9C,MAAM,aAAa,GAAG,CAClB,OAAmC,EACnC,MAA4B,KAC5B;IACA,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC;IAE/C,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE;AAC9D,QAAA,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG;IACjC;IAEA,OAAO,CAAA,EAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG;AACrC,CAAC;AAED,MAAM,aAAa,GAAG,CAClB,OAAmC,EACnC,MAA4B,EAC5B,aAAwC,KACxC;IACA,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC;AAE/C,IAAA,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,KAAK,EAAE;AACnE,QAAA,OAAO,EAAE;IACb;IAEA,MAAM,OAAO,GAAG,aAAa,CACzB,oBAAoB,CAACA,GAAA,CAAAC,QAAA,EAAA,EAAA,QAAA,EAAG,QAAqB,EAAA,CAAI,CAAC,CACrD;AAED,IAAA,OAAO,CAAA,aAAA,EAAgB,sBAAsB,CAAA,8CAAA,EAAiD,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA,EAAA,EAAK,OAAO,SAAS;AAC3J,CAAC;AAEM,MAAM,gBAAgB,GAAG,CAAC,KAAmB,KAAI;AACpD,IAAA,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,IAAI;AAEvB,IAAA,MAAM,IAAI,GAAG,KAAK,CAAC,qBAAqB,EAAE;IAE1C,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;AAC3B,QAAA,OAAO,IAAI;IACf;IAEA,OAAO,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI;AAC5C;AAEO,MAAM,mBAAmB,GAAG,CAAC,EAChC,MAAM,EACN,KAAK,EACL,IAAI,EACJ,OAAO,EACP,MAAM,EACN,aAAa,GACY,KAAI;AAC7B,IAAA,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK;AAAE,QAAA,OAAO,IAAI;AAElC,IAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,YAAY,EAAE;AAC9C,IAAA,IAAI,CAAC,gBAAgB;AAAE,QAAA,OAAO,IAAI;AAElC,IAAA,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,EAAE;IACpC,gBAAgB,CAAC,eAAe,EAAE;AAClC,IAAA,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC;IACpC,MAAM,CAAC,KAAK,EAAE;IACd,SAAS,CAAC,cAAc,EAAE;AAE1B,IAAA,IAAI,IAAI,KAAK,WAAW,EAAE;AACtB,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACpE,QAAA,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC;AAC1B,QAAA,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC;IACjC;SAAO;QACH,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,aAAa,CAAC;QAC1D,MAAM,QAAQ,GAAG,SAAS,CAAC,wBAAwB,CAAC,IAAI,CAAC;AACzD,QAAA,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS;AAEnC,QAAA,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC;QAE9B,IAAI,QAAQ,EAAE;AACV,YAAA,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC;AACjC,YAAA,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC5B;IACJ;AAEA,IAAA,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC;IACxB,gBAAgB,CAAC,eAAe,EAAE;AAClC,IAAA,gBAAgB,CAAC,QAAQ,CAAC,SAAS,CAAC;AAEpC,IAAA,OAAO,SAAS;AACpB;MAEa,cAAc,GAAG,CAC1B,YAA0B,EAC1B,cAA4B,KAC5B;AACA,IAAA,IAAI,CAAC,YAAY,IAAI,CAAC,cAAc;AAAE,QAAA,OAAO,EAAE;AAE/C,IAAA,MAAM,KAAK,GAAG,YAAY,CAAC,UAAU,EAAE;IACvC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,EAAE,cAAc,CAAC,SAAS,CAAC;AAEnE,IAAA,OAAO,KAAK,CAAC,QAAQ,EAAE;AAC3B;MAEa,sBAAsB,GAAG,CAClC,YAA0B,EAC1B,cAA4B,KAC5B;AACA,IAAA,IAAI,CAAC,YAAY,IAAI,CAAC,cAAc;AAAE,QAAA,OAAO,IAAI;AAEjD,IAAA,MAAM,KAAK,GAAG,YAAY,CAAC,UAAU,EAAE;IACvC,KAAK,CAAC,MAAM,CAAC,cAAc,CAAC,YAAY,EAAE,cAAc,CAAC,SAAS,CAAC;AAEnE,IAAA,OAAO,KAAK;AAChB;MAEa,oBAAoB,GAAG,CAChC,OAA+B,EAC/B,OAAe,KACf;IACA,MAAM,iBAAiB,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;IAEtD,IAAI,CAAC,iBAAiB,EAAE;AACpB,QAAA,OAAO,OAAO;IAClB;IAEA,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,KACzB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CACjE;AACL;AAEA,MAAM,YAAY,GAAG,CAAC,IAAiB,KACnC,IAAI,YAAY,WAAW;AAC3B,IAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,sBAAsB,CAAC;AAEnD,MAAM,WAAW,GAAG,CAAC,SAAsB,KAAI;AAC3C,IAAA,IAAI,CAAC,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,SAAS,CAAC,QAAQ,KAAK,IAAI,EAAE;QAC/D;IACJ;IAEA,SAAS,CAAC,WAAW,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,4BAA4B,GAAG,CACjC,SAAsB,EACtB,IAAiB,KACjB;AACA,IAAA,IAAI,CAAC,IAAI;QAAE;IAEX,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,EAAE;QAClC,SAAS,CAAC,WAAW,CACjB,QAAQ,CAAC,cAAc,CACnB,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAChD,CACJ;QACD;IACJ;AAEA,IAAA,IAAI,EAAE,IAAI,YAAY,WAAW,CAAC,EAAE;QAChC;IACJ;AAEA,IAAA,IAAI,YAAY,CAAC,IAAI,CAAC,EAAE;QACpB,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;QAC1C,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC;AAE5D,QAAA,GAAG,CAAC,SAAS,GAAG,sBAAsB;AACtC,QAAA,GAAG,CAAC,YAAY,CAAC,iBAAiB,EAAE,OAAO,CAAC;AAE5C,QAAA,IAAI,YAAY,KAAK,IAAI,EAAE;AACvB,YAAA,GAAG,CAAC,YAAY,CAAC,oBAAoB,EAAE,YAAY,CAAC;QACxD;AAEA,QAAA,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS;AAC9B,QAAA,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC;QAC1B;IACJ;AAEA,IAAA,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE;QACvB,WAAW,CAAC,SAAS,CAAC;QACtB;IACJ;AAEA,IAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AAC1C,QAAA,4BAA4B,CAAC,SAAS,EAAE,KAAK,CAAC;AAClD,IAAA,CAAC,CAAC;IAEF,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;QAC7B,WAAW,CAAC,SAAS,CAAC;IAC1B;AACJ,CAAC;AAEM,MAAM,8BAA8B,GAAG,CAAC,KAAa,KAAI;AAC5D,IAAA,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACjC,QAAA,OAAO,KAAK;IAChB;IAEA,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;IAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;AAE5C,IAAA,MAAM,CAAC,SAAS,GAAG,KAAK;AAExB,IAAA,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,KAAI;AAC5C,QAAA,4BAA4B,CAAC,MAAM,EAAE,KAAK,CAAC;AAC/C,IAAA,CAAC,CAAC;IAEF,OAAO,MAAM,CAAC,SAAS,EAAE,QAAQ,KAAK,IAAI,EAAE;AACxC,QAAA,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE;IAC7B;IAEA,OAAO,MAAM,CAAC,SAAS;AAC3B;AAEA,MAAM,qBAAqB,GAAG,CAC1B,KAAY,EACZ,SAAiC,KACjC;AACA,IAAA,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,GAAG,KAAK;IAE7C,IAAI,cAAc,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,EAAE;QAC5C,MAAM,QAAQ,GAAG,cAAsB;QAEvC,IAAI,SAAS,KAAK,UAAU,IAAI,WAAW,KAAK,CAAC,EAAE;AAC/C,YAAA,OAAO,YAAY,CAAC,QAAQ,CAAC,eAAe;kBACrC,QAAQ,CAAC;kBACV,IAAI;QACd;AAEA,QAAA,IAAI,SAAS,KAAK,SAAS,IAAI,WAAW,KAAK,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE;AACjE,YAAA,OAAO,YAAY,CAAC,QAAQ,CAAC,WAAW;kBACjC,QAAQ,CAAC;kBACV,IAAI;QACd;AAEA,QAAA,OAAO,IAAI;IACf;IAEA,MAAM,OAAO,GAAG,cAAyB;AACzC,IAAA,MAAM,WAAW,GACb,SAAS,KAAK,UAAU,GAAG,WAAW,GAAG,CAAC,GAAG,WAAW;IAC5D,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC;AAEvD,IAAA,OAAO,YAAY,CAAC,UAAU,CAAC,GAAI,UAA0B,GAAG,IAAI;AACxE,CAAC;MAEY,wBAAwB,GAAG,CACpC,MAA6B,EAC7B,GAA2B,KAC3B;AACA,IAAA,IAAI,CAAC,MAAM;AAAE,QAAA,OAAO,KAAK;AAEzB,IAAA,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,EAAE;IACvC,IAAI,CAAC,SAAS,EAAE,UAAU,IAAI,CAAC,SAAS,CAAC,WAAW;AAAE,QAAA,OAAO,KAAK;IAElE,MAAM,WAAW,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;AAC3C,IAAA,MAAM,GAAG,GAAG,qBAAqB,CAC7B,WAAW,EACX,GAAG,KAAK,WAAW,GAAG,UAAU,GAAG,SAAS,CAC/C;AAED,IAAA,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU;AAAE,QAAA,OAAO,KAAK;AAEzC,IAAA,MAAM,MAAM,GAAG,GAAG,CAAC,UAAU;AAC7B,IAAA,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW;AACnC,IAAA,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC;IAElE,IAAI,WAAW,EAAE,QAAQ,KAAK,IAAI,CAAC,SAAS,EAAE;QAC1C,MAAM,QAAQ,GAAG,WAAmB;QAEpC,IAAI,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE;AAC/B,YAAA,QAAQ,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;AAEzB,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE;gBACvB,WAAW,CAAC,MAAM,EAAE;YACxB;QACJ;IACJ;IAEA,GAAG,CAAC,MAAM,EAAE;AAEZ,IAAA,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE;AACpC,IAAA,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AACjE,IAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;IACpB,SAAS,CAAC,eAAe,EAAE;AAC3B,IAAA,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;IACzB,MAAM,CAAC,KAAK,EAAE;AAEd,IAAA,OAAO,IAAI;AACf;AAEA,MAAM,OAAO,GAAG,CAAC,KAAoB,KAAI;AACrC,IAAA,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,GACnE,KAAK;IAET,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE;AACvC,QAAA,OAAO,IAAI;IACf;AAEA,IAAA,MAAM,OAAO,IACTD,GAAA,CAAC,IAAI,EAAA,EACD,SAAS,EAAC,kBAAkB,EAC5B,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE;AACH,YAAA,QAAQ,EAAE,OAAO;YACjB,GAAG,EAAE,IAAI,CAAC,MAAM;YAChB,IAAI,EAAE,IAAI,CAAC,IAAI;AAClB,SAAA,EAAA,QAAA,EAEA,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,MACnBA,GAAA,CAAC,IAAI,CAAC,IAAI,EAAA,EAEN,IAAI,EAAC,QAAQ,EACb,MAAM,EAAE,CAAC,KAAK,WAAW,EACzB,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,cAAc,EAAE,EACtC,YAAY,EAAE,MAAM,cAAc,GAAG,CAAC,CAAC,EACvC,OAAO,EAAE,MAAM,QAAQ,GAAG,MAAM,CAAC,YAEhC,MAAM,CAAC,KAAK,EAAA,EAPR,GAAG,MAAM,CAAC,KAAK,CAAA,CAAA,EAAI,CAAC,CAAA,CAAE,CAQnB,CACf,CAAC,EAAA,CACC,CACV;AAED,IAAA,IAAI,OAAO,QAAQ,KAAK,WAAW,EAAE;AACjC,QAAA,OAAO,OAAO;IAClB;IAEA,OAAO,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC;AAC/C,CAAC;AAED,gBAAe,IAAI,CAAC,OAAO,CAAC;;;;"}
1
+ {"version":3,"file":"memtion.js","sources":["../../../../packages/components/editor/memtion.tsx"],"sourcesContent":["import { memo, ReactNode } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { renderToStaticMarkup } from \"react-dom/server\";\nimport List from \"../list\";\nimport { IEditorMemtion, IEditorMemtionOption } from \"./type\";\n\nexport const MEMTION_TAG_CLASS_NAME = \"i-memtion-tag\";\n\nconst blockTags = new Set([\n \"ADDRESS\",\n \"ARTICLE\",\n \"ASIDE\",\n \"BLOCKQUOTE\",\n \"DIV\",\n \"DL\",\n \"FIELDSET\",\n \"FIGCAPTION\",\n \"FIGURE\",\n \"FOOTER\",\n \"FORM\",\n \"H1\",\n \"H2\",\n \"H3\",\n \"H4\",\n \"H5\",\n \"H6\",\n \"HEADER\",\n \"LI\",\n \"MAIN\",\n \"NAV\",\n \"OL\",\n \"P\",\n \"PRE\",\n \"SECTION\",\n \"TABLE\",\n \"TD\",\n \"TH\",\n \"TR\",\n \"UL\",\n]);\n\nconst escapeHtmlAttr = (value: string) =>\n value\n .replaceAll(\"&\", \"&amp;\")\n .replaceAll('\"', \"&quot;\")\n .replaceAll(\"<\", \"&lt;\")\n .replaceAll(\">\", \"&gt;\");\n\ninterface IMemtionProps {\n visible?: boolean;\n rect?: DOMRect | null;\n options?: IEditorMemtionOption[];\n activeIndex?: number;\n onActiveChange?: (index: number) => void;\n onSelect?: (option: IEditorMemtionOption) => void;\n}\n\ninterface IInsertMemtionOptionParams {\n editor: HTMLDivElement | null;\n range: Range | null;\n mode: \"rich\" | \"plaintext\" | \"plaintextOnMemtion\";\n memtion?: IEditorMemtion;\n option: IEditorMemtionOption;\n sanitizeValue: (value: string) => string;\n}\n\nconst getInsertNode = (\n memtion: IEditorMemtion | undefined,\n option: IEditorMemtionOption,\n) => memtion?.insert?.(option) ?? option.value;\n\nconst getInsertText = (\n memtion: IEditorMemtion | undefined,\n option: IEditorMemtionOption,\n) => {\n const nextNode = getInsertNode(memtion, option);\n\n if (typeof nextNode === \"string\" || typeof nextNode === \"number\") {\n return `${String(nextNode)} `;\n }\n\n return `${String(option.value)} `;\n};\n\nconst getInsertHtml = (\n memtion: IEditorMemtion | undefined,\n option: IEditorMemtionOption,\n sanitizeValue: (value: string) => string,\n) => {\n const nextNode = getInsertNode(memtion, option);\n\n if (nextNode === null || nextNode === undefined || nextNode === false) {\n return \"\";\n }\n\n const content = sanitizeValue(\n renderToStaticMarkup(<>{nextNode as ReactNode}</>),\n );\n\n return `<span class=\"${MEMTION_TAG_CLASS_NAME}\" contenteditable=\"false\" data-memtion-value=\"${escapeHtmlAttr(String(option.value))}\">${content}</span>`;\n};\n\nexport const getSelectionRect = (range: Range | null) => {\n if (!range) return null;\n\n const rect = range.getBoundingClientRect();\n\n if (rect.width || rect.height) {\n return rect;\n }\n\n return range.getClientRects()[0] ?? rect;\n};\n\nexport const insertMemtionOption = ({\n editor,\n range,\n mode,\n memtion,\n option,\n sanitizeValue,\n}: IInsertMemtionOptionParams) => {\n if (!editor || !range) return null;\n\n const browserSelection = window.getSelection();\n if (!browserSelection) return null;\n\n const nextRange = range.cloneRange();\n browserSelection.removeAllRanges();\n browserSelection.addRange(nextRange);\n editor.focus();\n nextRange.deleteContents();\n\n if (mode === \"plaintext\") {\n const text = document.createTextNode(getInsertText(memtion, option));\n nextRange.insertNode(text);\n nextRange.setStartAfter(text);\n } else {\n const html = getInsertHtml(memtion, option, sanitizeValue);\n const fragment = nextRange.createContextualFragment(html);\n const lastNode = fragment.lastChild;\n\n nextRange.insertNode(fragment);\n\n if (lastNode) {\n nextRange.setStartAfter(lastNode);\n nextRange.collapse(true);\n }\n }\n\n nextRange.collapse(true);\n browserSelection.removeAllRanges();\n browserSelection.addRange(nextRange);\n\n return nextRange;\n};\n\nexport const getMemtionText = (\n triggerRange: Range | null,\n selectionRange: Range | null,\n) => {\n if (!triggerRange || !selectionRange) return \"\";\n\n const range = triggerRange.cloneRange();\n range.setEnd(selectionRange.endContainer, selectionRange.endOffset);\n\n return range.toString();\n};\n\nexport const getMemtionReplaceRange = (\n triggerRange: Range | null,\n selectionRange: Range | null,\n) => {\n if (!triggerRange || !selectionRange) return null;\n\n const range = triggerRange.cloneRange();\n range.setEnd(selectionRange.endContainer, selectionRange.endOffset);\n\n return range;\n};\n\nexport const filterMemtionOptions = (\n options: IEditorMemtionOption[],\n keyword: string,\n) => {\n const normalizedKeyword = keyword.trim().toLowerCase();\n\n if (!normalizedKeyword) {\n return options;\n }\n\n return options.filter((option) =>\n String(option.value).toLowerCase().includes(normalizedKeyword),\n );\n};\n\nconst isMemtionTag = (node: Node | null) =>\n node instanceof HTMLElement &&\n node.classList.contains(MEMTION_TAG_CLASS_NAME);\n\nconst appendBreak = (container: HTMLElement) => {\n if (!container.lastChild || container.lastChild.nodeName === \"BR\") {\n return;\n }\n\n container.appendChild(document.createElement(\"br\"));\n};\n\nconst appendPlaintextOnMemtionNode = (\n container: HTMLElement,\n node: Node | null,\n) => {\n if (!node) return;\n\n if (node.nodeType === Node.TEXT_NODE) {\n container.appendChild(\n document.createTextNode(\n (node.textContent ?? \"\").replaceAll(\"\\r\", \"\"),\n ),\n );\n return;\n }\n\n if (!(node instanceof HTMLElement)) {\n return;\n }\n\n if (isMemtionTag(node)) {\n const tag = document.createElement(\"span\");\n const memtionValue = node.getAttribute(\"data-memtion-value\");\n\n tag.className = MEMTION_TAG_CLASS_NAME;\n tag.setAttribute(\"contenteditable\", \"false\");\n\n if (memtionValue !== null) {\n tag.setAttribute(\"data-memtion-value\", memtionValue);\n }\n\n tag.innerHTML = node.innerHTML;\n container.appendChild(tag);\n return;\n }\n\n if (node.tagName === \"BR\") {\n appendBreak(container);\n return;\n }\n\n Array.from(node.childNodes).forEach((child) => {\n appendPlaintextOnMemtionNode(container, child);\n });\n\n if (blockTags.has(node.tagName)) {\n appendBreak(container);\n }\n};\n\nexport const sanitizePlaintextOnMemtionHtml = (value: string) => {\n if (typeof document === \"undefined\") {\n return value;\n }\n\n const source = document.createElement(\"div\");\n const result = document.createElement(\"div\");\n\n source.innerHTML = value;\n\n Array.from(source.childNodes).forEach((child) => {\n appendPlaintextOnMemtionNode(result, child);\n });\n\n while (result.lastChild?.nodeName === \"BR\") {\n result.lastChild.remove();\n }\n\n return result.innerHTML;\n};\n\nconst getAdjacentMemtionTag = (\n range: Range,\n direction: \"backward\" | \"forward\",\n) => {\n const { startContainer, startOffset } = range;\n\n if (startContainer.nodeType === Node.TEXT_NODE) {\n const textNode = startContainer as Text;\n\n if (direction === \"backward\" && startOffset === 0) {\n return isMemtionTag(textNode.previousSibling)\n ? (textNode.previousSibling as HTMLElement)\n : null;\n }\n\n if (direction === \"forward\" && startOffset === textNode.data.length) {\n return isMemtionTag(textNode.nextSibling)\n ? (textNode.nextSibling as HTMLElement)\n : null;\n }\n\n return null;\n }\n\n const element = startContainer as Element;\n const targetIndex =\n direction === \"backward\" ? startOffset - 1 : startOffset;\n const targetNode = element.childNodes.item(targetIndex);\n\n return isMemtionTag(targetNode) ? (targetNode as HTMLElement) : null;\n};\n\nexport const removeAdjacentMemtionTag = (\n editor: HTMLDivElement | null,\n key: \"Backspace\" | \"Delete\",\n) => {\n if (!editor) return false;\n\n const selection = window.getSelection();\n if (!selection?.rangeCount || !selection.isCollapsed) return false;\n\n const activeRange = selection.getRangeAt(0);\n const tag = getAdjacentMemtionTag(\n activeRange,\n key === \"Backspace\" ? \"backward\" : \"forward\",\n );\n\n if (!tag || !tag.parentNode) return false;\n\n const parent = tag.parentNode;\n const nextSibling = tag.nextSibling;\n const index = Array.prototype.indexOf.call(parent.childNodes, tag);\n\n if (nextSibling?.nodeType === Node.TEXT_NODE) {\n const textNode = nextSibling as Text;\n\n if (textNode.data.startsWith(\" \")) {\n textNode.deleteData(0, 1);\n\n if (!textNode.data.length) {\n nextSibling.remove();\n }\n }\n }\n\n tag.remove();\n\n const range = document.createRange();\n range.setStart(parent, Math.min(index, parent.childNodes.length));\n range.collapse(true);\n selection.removeAllRanges();\n selection.addRange(range);\n editor.focus();\n\n return true;\n};\n\nconst Memtion = (props: IMemtionProps) => {\n const { visible, rect, options, activeIndex, onActiveChange, onSelect } =\n props;\n\n if (!visible || !rect || !options?.length) {\n return null;\n }\n\n const content = (\n <List\n className=\"i-editor-memtion\"\n type=\"option\"\n style={{\n position: \"fixed\",\n top: rect.bottom,\n left: rect.left,\n }}\n >\n {options.map((option, i) => (\n <List.Item\n key={`${option.value}-${i}`}\n type=\"option\"\n active={i === activeIndex}\n onMouseDown={(e) => e.preventDefault()}\n onMouseEnter={() => onActiveChange?.(i)}\n onClick={() => onSelect?.(option)}\n >\n {option.label}\n </List.Item>\n ))}\n </List>\n );\n\n if (typeof document === \"undefined\") {\n return content;\n }\n\n return createPortal(content, document.body);\n};\n\nexport default memo(Memtion);\n"],"names":["_jsx","_Fragment"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"flex.js","sources":["../../../../packages/components/flex/flex.tsx"],"sourcesContent":["import classNames from \"classnames\";\r\nimport { useMemo } from \"react\";\r\nimport \"./index.css\";\r\nimport { IFlex } from \"./type\";\r\n\r\nconst Flex: React.FC<IFlex> = (props: IFlex) => {\r\n\tconst {\r\n\t\tas: Component = \"div\" as any,\r\n\t\talign,\r\n\t\tjustify,\r\n\t\tdirection,\r\n\t\twrap,\r\n\t\tgap,\r\n\t\tcolumns,\r\n\t\tclassName,\r\n\t\tstyle,\r\n\t\t...restProps\r\n\t} = props;\r\n\r\n\tconst gridColumns = useMemo(() => {\r\n\t\tif (!columns) return;\r\n\r\n\t\tif (typeof columns === \"number\") return `repeat(${columns}, 1fr)`;\r\n\r\n\t\treturn columns;\r\n\t}, [columns]);\r\n\r\n\treturn (\r\n\t\t<Component\r\n\t\t\t{...restProps}\r\n\t\t\tstyle={{\r\n\t\t\t\talignItems: align,\r\n\t\t\t\tjustifyContent: justify,\r\n\t\t\t\tgap,\r\n\t\t\t\tflexDirection: direction,\r\n\t\t\t\tflexWrap: wrap === true ? \"wrap\" : wrap,\r\n\t\t\t\tgridTemplateColumns: gridColumns as any,\r\n\t\t\t\t...style,\r\n\t\t\t}}\r\n\t\t\tclassName={classNames(className, {\r\n\t\t\t\t[columns ? \"grid\" : \"flex\"]: true,\r\n\t\t\t})}\r\n\t\t/>\r\n\t);\r\n};\r\n\r\nexport default Flex;\r\n"],"names":["_jsx"],"mappings":";;;;AAKA,MAAM,IAAI,GAAoB,CAAC,KAAY,KAAI;AAC9C,IAAA,MAAM,EACL,EAAE,EAAE,SAAS,GAAG,KAAY,EAC5B,KAAK,EACL,OAAO,EACP,SAAS,EACT,IAAI,EACJ,GAAG,EACH,OAAO,EACP,SAAS,EACT,KAAK,EACL,GAAG,SAAS,EACZ,GAAG,KAAK;AAET,IAAA,MAAM,WAAW,GAAG,OAAO,CAAC,MAAK;AAChC,QAAA,IAAI,CAAC,OAAO;YAAE;QAEd,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,CAAA,OAAA,EAAU,OAAO,CAAA,MAAA,CAAQ;AAEjE,QAAA,OAAO,OAAO;AACf,IAAA,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;AAEb,IAAA,QACCA,GAAA,CAAC,SAAS,OACL,SAAS,EACb,KAAK,EAAE;AACN,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,cAAc,EAAE,OAAO;YACvB,GAAG;AACH,YAAA,aAAa,EAAE,SAAS;YACxB,QAAQ,EAAE,IAAI,KAAK,IAAI,GAAG,MAAM,GAAG,IAAI;AACvC,YAAA,mBAAmB,EAAE,WAAkB;AACvC,YAAA,GAAG,KAAK;AACR,SAAA,EACD,SAAS,EAAE,UAAU,CAAC,SAAS,EAAE;YAChC,CAAC,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI;SACjC,CAAC,EAAA,CACD;AAEJ;;;;"}
1
+ {"version":3,"file":"flex.js","sources":["../../../../packages/components/flex/flex.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport { useMemo } from \"react\";\nimport \"./index.css\";\nimport { IFlex } from \"./type\";\n\nconst Flex: React.FC<IFlex> = (props: IFlex) => {\n\tconst {\n\t\tas: Component = \"div\" as any,\n\t\talign,\n\t\tjustify,\n\t\tdirection,\n\t\twrap,\n\t\tgap,\n\t\tcolumns,\n\t\tclassName,\n\t\tstyle,\n\t\t...restProps\n\t} = props;\n\n\tconst gridColumns = useMemo(() => {\n\t\tif (!columns) return;\n\n\t\tif (typeof columns === \"number\") return `repeat(${columns}, 1fr)`;\n\n\t\treturn columns;\n\t}, [columns]);\n\n\treturn (\n\t\t<Component\n\t\t\t{...restProps}\n\t\t\tstyle={{\n\t\t\t\talignItems: align,\n\t\t\t\tjustifyContent: justify,\n\t\t\t\tgap,\n\t\t\t\tflexDirection: direction,\n\t\t\t\tflexWrap: wrap === true ? \"wrap\" : wrap,\n\t\t\t\tgridTemplateColumns: gridColumns as any,\n\t\t\t\t...style,\n\t\t\t}}\n\t\t\tclassName={classNames(className, {\n\t\t\t\t[columns ? \"grid\" : \"flex\"]: true,\n\t\t\t})}\n\t\t/>\n\t);\n};\n\nexport default Flex;\n"],"names":["_jsx"],"mappings":";;;;AAKA,MAAM,IAAI,GAAoB,CAAC,KAAY,KAAI;AAC9C,IAAA,MAAM,EACL,EAAE,EAAE,SAAS,GAAG,KAAY,EAC5B,KAAK,EACL,OAAO,EACP,SAAS,EACT,IAAI,EACJ,GAAG,EACH,OAAO,EACP,SAAS,EACT,KAAK,EACL,GAAG,SAAS,EACZ,GAAG,KAAK;AAET,IAAA,MAAM,WAAW,GAAG,OAAO,CAAC,MAAK;AAChC,QAAA,IAAI,CAAC,OAAO;YAAE;QAEd,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,CAAA,OAAA,EAAU,OAAO,CAAA,MAAA,CAAQ;AAEjE,QAAA,OAAO,OAAO;AACf,IAAA,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;AAEb,IAAA,QACCA,GAAA,CAAC,SAAS,OACL,SAAS,EACb,KAAK,EAAE;AACN,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,cAAc,EAAE,OAAO;YACvB,GAAG;AACH,YAAA,aAAa,EAAE,SAAS;YACxB,QAAQ,EAAE,IAAI,KAAK,IAAI,GAAG,MAAM,GAAG,IAAI;AACvC,YAAA,mBAAmB,EAAE,WAAkB;AACvC,YAAA,GAAG,KAAK;AACR,SAAA,EACD,SAAS,EAAE,UAAU,CAAC,SAAS,EAAE;YAChC,CAAC,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI;SACjC,CAAC,EAAA,CACD;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sources":["../../../../packages/components/form/context.tsx"],"sourcesContent":["import { createContext } from \"react\";\r\nimport { IFormInstance } from \"./useForm\";\r\n\r\nconst Context = createContext({} as IFormInstance);\r\n\r\nexport default Context;\r\n"],"names":[],"mappings":";;AAGA,MAAM,OAAO,GAAG,aAAa,CAAC,EAAmB;;;;"}
1
+ {"version":3,"file":"context.js","sources":["../../../../packages/components/form/context.tsx"],"sourcesContent":["import { createContext } from \"react\";\nimport { IFormInstance } from \"./useForm\";\n\nconst Context = createContext({} as IFormInstance);\n\nexport default Context;\n"],"names":[],"mappings":";;AAGA,MAAM,OAAO,GAAG,aAAa,CAAC,EAAmB;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"field.js","sources":["../../../../packages/components/form/field.tsx"],"sourcesContent":["import PubSub from \"pubsub-js\";\r\nimport {\r\n\tChildren,\r\n\tcloneElement,\r\n\tisValidElement,\r\n\tuseContext,\r\n\tuseEffect,\r\n\tuseMemo,\r\n\tuseState,\r\n} from \"react\";\r\nimport Context from \"./context\";\r\nimport { IField } from \"./type\";\r\n\r\nfunction Field(props: IField) {\r\n\tconst { name, required, children } = props;\r\n\tconst [fieldValue, setFieldValue] = useState<any>(undefined);\r\n\tconst [fieldStatus, setFieldStatus] = useState(\"normal\");\r\n\tconst [fieldMessage, setFieldMessage] = useState<any>(undefined);\r\n\tconst form = useContext(Context);\r\n\tconst { id } = form;\r\n\r\n\tconst handleChange = (v) => {\r\n\t\tif (!name) return;\r\n\r\n\t\tform.set(name, v);\r\n\t\tPubSub.publish(`${id}:change`, {\r\n\t\t\tname,\r\n\t\t\tvalue: v,\r\n\t\t});\r\n\t};\r\n\r\n\tconst hijackChildren = useMemo(() => {\r\n\t\treturn Children.map(children, (node) => {\r\n\t\t\tif (!isValidElement(node)) return null;\r\n\r\n\t\t\tconst { onChange } = node.props as any;\r\n\r\n\t\t\treturn cloneElement(node, {\r\n\t\t\t\tvalue: fieldValue,\r\n\t\t\t\tstatus: fieldStatus,\r\n\t\t\t\tmessage: fieldMessage,\r\n\t\t\t\trequired,\r\n\t\t\t\tonChange: (...args) => {\r\n\t\t\t\t\thandleChange(args[0]);\r\n\t\t\t\t\tonChange?.(...args);\r\n\t\t\t\t\tsetFieldStatus(\"normal\");\r\n\t\t\t\t\tsetFieldMessage(undefined);\r\n\t\t\t\t},\r\n\t\t\t} as any);\r\n\t\t});\r\n\t}, [children, fieldValue, fieldStatus, fieldMessage, required]);\r\n\r\n\tuseEffect(() => {\r\n\t\tif (!name) return;\r\n\r\n\t\tPubSub.subscribe(`${id}:set:${name}`, (evt, v) => {\r\n\t\t\tsetFieldValue(v);\r\n\t\t});\r\n\t\tPubSub.subscribe(`${id}:invalid:${name}`, (evt, v) => {\r\n\t\t\tif (v?.value !== undefined) setFieldValue(v.value);\r\n\t\t\tif (v?.status) setFieldStatus(v.status);\r\n\t\t\tif (\"message\" in (v ?? {})) setFieldMessage(v.message);\r\n\t\t});\r\n\r\n\t\tPromise.resolve().then(() => {\r\n\t\t\tform.set(name, form.cacheData[name] ?? undefined);\r\n\t\t});\r\n\r\n\t\treturn () => {\r\n\t\t\tPubSub.unsubscribe(`${id}:set:${name}`);\r\n\t\t\tPubSub.unsubscribe(`${id}:invalid:${name}`);\r\n\t\t\tform.delete(name);\r\n\t\t};\r\n\t}, [name, children]);\r\n\r\n\tif (!name) return children;\r\n\r\n\treturn hijackChildren;\r\n}\r\n\r\nexport default Field;\r\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"field.js","sources":["../../../../packages/components/form/field.tsx"],"sourcesContent":["import PubSub from \"pubsub-js\";\nimport {\n\tChildren,\n\tcloneElement,\n\tisValidElement,\n\tuseContext,\n\tuseEffect,\n\tuseMemo,\n\tuseState,\n} from \"react\";\nimport Context from \"./context\";\nimport { IField } from \"./type\";\n\nfunction Field(props: IField) {\n\tconst { name, required, children } = props;\n\tconst [fieldValue, setFieldValue] = useState<any>(undefined);\n\tconst [fieldStatus, setFieldStatus] = useState(\"normal\");\n\tconst [fieldMessage, setFieldMessage] = useState<any>(undefined);\n\tconst form = useContext(Context);\n\tconst { id } = form;\n\n\tconst handleChange = (v) => {\n\t\tif (!name) return;\n\n\t\tform.set(name, v);\n\t\tPubSub.publish(`${id}:change`, {\n\t\t\tname,\n\t\t\tvalue: v,\n\t\t});\n\t};\n\n\tconst hijackChildren = useMemo(() => {\n\t\treturn Children.map(children, (node) => {\n\t\t\tif (!isValidElement(node)) return null;\n\n\t\t\tconst { onChange } = node.props as any;\n\n\t\t\treturn cloneElement(node, {\n\t\t\t\tvalue: fieldValue,\n\t\t\t\tstatus: fieldStatus,\n\t\t\t\tmessage: fieldMessage,\n\t\t\t\trequired,\n\t\t\t\tonChange: (...args) => {\n\t\t\t\t\thandleChange(args[0]);\n\t\t\t\t\tonChange?.(...args);\n\t\t\t\t\tsetFieldStatus(\"normal\");\n\t\t\t\t\tsetFieldMessage(undefined);\n\t\t\t\t},\n\t\t\t} as any);\n\t\t});\n\t}, [children, fieldValue, fieldStatus, fieldMessage, required]);\n\n\tuseEffect(() => {\n\t\tif (!name) return;\n\n\t\tPubSub.subscribe(`${id}:set:${name}`, (evt, v) => {\n\t\t\tsetFieldValue(v);\n\t\t});\n\t\tPubSub.subscribe(`${id}:invalid:${name}`, (evt, v) => {\n\t\t\tif (v?.value !== undefined) setFieldValue(v.value);\n\t\t\tif (v?.status) setFieldStatus(v.status);\n\t\t\tif (\"message\" in (v ?? {})) setFieldMessage(v.message);\n\t\t});\n\n\t\tPromise.resolve().then(() => {\n\t\t\tform.set(name, form.cacheData[name] ?? undefined);\n\t\t});\n\n\t\treturn () => {\n\t\t\tPubSub.unsubscribe(`${id}:set:${name}`);\n\t\t\tPubSub.unsubscribe(`${id}:invalid:${name}`);\n\t\t\tform.delete(name);\n\t\t};\n\t}, [name, children]);\n\n\tif (!name) return children;\n\n\treturn hijackChildren;\n}\n\nexport default Field;\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"form.js","sources":["../../../../packages/components/form/form.tsx"],"sourcesContent":["import classNames from \"classnames\";\r\nimport PubSub from \"pubsub-js\";\r\nimport { CSSProperties, useEffect, useMemo } from \"react\";\r\nimport Context from \"./context\";\r\nimport Field from \"./field\";\r\nimport \"./index.css\";\r\nimport { IForm } from \"./type\";\r\nimport useConfig from \"./useConfig\";\r\nimport useForm, { IFormInstance } from \"./useForm\";\r\n\r\nconst Form = (props: IForm) => {\r\n\tconst {\r\n\t\tform = {} as IFormInstance,\r\n\t\trules,\r\n\t\tinitialValues,\r\n\t\tstyle,\r\n\t\tclassName,\r\n\t\twidth,\r\n\t\tcolumns,\r\n\t\titemMaxWidth,\r\n\t\tgap = \"1em\",\r\n\t\tlabelInline,\r\n\t\tlabelWidth,\r\n\t\tlabelRight,\r\n\t\tchildren,\r\n\t\tonKeyDown,\r\n\t\tonEnter,\r\n\t\tonChange,\r\n\t\t...restProps\r\n\t} = props;\r\n\r\n\tconst handleKeyDown = (e) => {\r\n\t\tonKeyDown?.(e);\r\n\r\n\t\tif (e.keyCode !== 13) return;\r\n\r\n\t\tonEnter?.(e, form.data, form);\r\n\t};\r\n\r\n\tconst gridColumns = useMemo(() => {\r\n\t\tif (!columns && !itemMaxWidth) return;\r\n\r\n\t\tif (itemMaxWidth) {\r\n\t\t\treturn `repeat(auto-fill, minmax(${itemMaxWidth}, 1fr))`;\r\n\t\t}\r\n\r\n\t\tif (typeof columns === \"number\") {\r\n\t\t\treturn `minmax(0, 1fr) `.repeat(columns);\r\n\t\t}\r\n\r\n\t\treturn columns;\r\n\t}, [columns]);\r\n\r\n\tuseEffect(() => {\r\n\t\tObject.assign(form, {\r\n\t\t\tdata: { ...initialValues },\r\n\t\t\trules,\r\n\t\t});\r\n\t}, [form]);\r\n\r\n\tuseEffect(() => {\r\n\t\tPubSub.subscribe(`${form.id}:change`, (evt, v) => {\r\n\t\t\tonChange?.(v.name, v.value);\r\n\t\t});\r\n\r\n\t\treturn () => {\r\n\t\t\tPubSub.unsubscribe(`${form.id}:change`);\r\n\t\t};\r\n\t}, []);\r\n\r\n\treturn (\r\n\t\t<Context value={form}>\r\n\t\t\t<form\r\n\t\t\t\tstyle={\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\t...style,\r\n\t\t\t\t\t\twidth,\r\n\t\t\t\t\t\tgap,\r\n\t\t\t\t\t\tgridTemplateColumns: gridColumns as any,\r\n\t\t\t\t\t\t\"--label-width\": labelWidth,\r\n\t\t\t\t\t\t\"--label-align\": labelRight ? \"right\" : undefined,\r\n\t\t\t\t\t} as CSSProperties\r\n\t\t\t\t}\r\n\t\t\t\tclassName={classNames(\"i-form\", className, {\r\n\t\t\t\t\t\"i-form-inline\": labelInline,\r\n\t\t\t\t})}\r\n\t\t\t\tonKeyDown={handleKeyDown}\r\n\t\t\t\t{...restProps}\r\n\t\t\t>\r\n\t\t\t\t{children}\r\n\t\t\t</form>\r\n\t\t</Context>\r\n\t);\r\n};\r\n\r\nForm.useForm = useForm;\r\nForm.Field = Field;\r\nForm.useConfig = useConfig;\r\n\r\nexport default Form;\r\n"],"names":["_jsx"],"mappings":";;;;;;;;;AAUA,MAAM,IAAI,GAAG,CAAC,KAAY,KAAI;AAC7B,IAAA,MAAM,EACL,IAAI,GAAG,EAAmB,EAC1B,KAAK,EACL,aAAa,EACb,KAAK,EACL,SAAS,EACT,KAAK,EACL,OAAO,EACP,YAAY,EACZ,GAAG,GAAG,KAAK,EACX,WAAW,EACX,UAAU,EACV,UAAU,EACV,QAAQ,EACR,SAAS,EACT,OAAO,EACP,QAAQ,EACR,GAAG,SAAS,EACZ,GAAG,KAAK;AAET,IAAA,MAAM,aAAa,GAAG,CAAC,CAAC,KAAI;AAC3B,QAAA,SAAS,GAAG,CAAC,CAAC;AAEd,QAAA,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;YAAE;QAEtB,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;AAC9B,IAAA,CAAC;AAED,IAAA,MAAM,WAAW,GAAG,OAAO,CAAC,MAAK;AAChC,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,YAAY;YAAE;QAE/B,IAAI,YAAY,EAAE;YACjB,OAAO,CAAA,yBAAA,EAA4B,YAAY,CAAA,OAAA,CAAS;QACzD;AAEA,QAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAChC,YAAA,OAAO,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC;QACzC;AAEA,QAAA,OAAO,OAAO;AACf,IAAA,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IAEb,SAAS,CAAC,MAAK;AACd,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;AACnB,YAAA,IAAI,EAAE,EAAE,GAAG,aAAa,EAAE;YAC1B,KAAK;AACL,SAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAEV,SAAS,CAAC,MAAK;AACd,QAAA,MAAM,CAAC,SAAS,CAAC,CAAA,EAAG,IAAI,CAAC,EAAE,CAAA,OAAA,CAAS,EAAE,CAAC,GAAG,EAAE,CAAC,KAAI;YAChD,QAAQ,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC;AAC5B,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,MAAK;YACX,MAAM,CAAC,WAAW,CAAC,CAAA,EAAG,IAAI,CAAC,EAAE,CAAA,OAAA,CAAS,CAAC;AACxC,QAAA,CAAC;IACF,CAAC,EAAE,EAAE,CAAC;IAEN,QACCA,GAAA,CAAC,OAAO,EAAA,EAAC,KAAK,EAAE,IAAI,EAAA,QAAA,EACnBA,GAAA,CAAA,MAAA,EAAA,EACC,KAAK,EACJ;AACC,gBAAA,GAAG,KAAK;gBACR,KAAK;gBACL,GAAG;AACH,gBAAA,mBAAmB,EAAE,WAAkB;AACvC,gBAAA,eAAe,EAAE,UAAU;gBAC3B,eAAe,EAAE,UAAU,GAAG,OAAO,GAAG,SAAS;AAChC,aAAA,EAEnB,SAAS,EAAE,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE;AAC1C,gBAAA,eAAe,EAAE,WAAW;aAC5B,CAAC,EACF,SAAS,EAAE,aAAa,EAAA,GACpB,SAAS,EAAA,QAAA,EAEZ,QAAQ,EAAA,CACH,EAAA,CACE;AAEZ;AAEA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,IAAI,CAAC,SAAS,GAAG,SAAS;;;;"}
1
+ {"version":3,"file":"form.js","sources":["../../../../packages/components/form/form.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport PubSub from \"pubsub-js\";\nimport { CSSProperties, useEffect, useMemo } from \"react\";\nimport Context from \"./context\";\nimport Field from \"./field\";\nimport \"./index.css\";\nimport { IForm } from \"./type\";\nimport useConfig from \"./useConfig\";\nimport useForm, { IFormInstance } from \"./useForm\";\n\nconst Form = (props: IForm) => {\n\tconst {\n\t\tform = {} as IFormInstance,\n\t\trules,\n\t\tinitialValues,\n\t\tstyle,\n\t\tclassName,\n\t\twidth,\n\t\tcolumns,\n\t\titemMaxWidth,\n\t\tgap = \"1em\",\n\t\tlabelInline,\n\t\tlabelWidth,\n\t\tlabelRight,\n\t\tchildren,\n\t\tonKeyDown,\n\t\tonEnter,\n\t\tonChange,\n\t\t...restProps\n\t} = props;\n\n\tconst handleKeyDown = (e) => {\n\t\tonKeyDown?.(e);\n\n\t\tif (e.keyCode !== 13) return;\n\n\t\tonEnter?.(e, form.data, form);\n\t};\n\n\tconst gridColumns = useMemo(() => {\n\t\tif (!columns && !itemMaxWidth) return;\n\n\t\tif (itemMaxWidth) {\n\t\t\treturn `repeat(auto-fill, minmax(${itemMaxWidth}, 1fr))`;\n\t\t}\n\n\t\tif (typeof columns === \"number\") {\n\t\t\treturn `minmax(0, 1fr) `.repeat(columns);\n\t\t}\n\n\t\treturn columns;\n\t}, [columns]);\n\n\tuseEffect(() => {\n\t\tObject.assign(form, {\n\t\t\tdata: { ...initialValues },\n\t\t\trules,\n\t\t});\n\t}, [form]);\n\n\tuseEffect(() => {\n\t\tPubSub.subscribe(`${form.id}:change`, (evt, v) => {\n\t\t\tonChange?.(v.name, v.value);\n\t\t});\n\n\t\treturn () => {\n\t\t\tPubSub.unsubscribe(`${form.id}:change`);\n\t\t};\n\t}, []);\n\n\treturn (\n\t\t<Context value={form}>\n\t\t\t<form\n\t\t\t\tstyle={\n\t\t\t\t\t{\n\t\t\t\t\t\t...style,\n\t\t\t\t\t\twidth,\n\t\t\t\t\t\tgap,\n\t\t\t\t\t\tgridTemplateColumns: gridColumns as any,\n\t\t\t\t\t\t\"--label-width\": labelWidth,\n\t\t\t\t\t\t\"--label-align\": labelRight ? \"right\" : undefined,\n\t\t\t\t\t} as CSSProperties\n\t\t\t\t}\n\t\t\t\tclassName={classNames(\"i-form\", className, {\n\t\t\t\t\t\"i-form-inline\": labelInline,\n\t\t\t\t})}\n\t\t\t\tonKeyDown={handleKeyDown}\n\t\t\t\t{...restProps}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</form>\n\t\t</Context>\n\t);\n};\n\nForm.useForm = useForm;\nForm.Field = Field;\nForm.useConfig = useConfig;\n\nexport default Form;\n"],"names":["_jsx"],"mappings":";;;;;;;;;AAUA,MAAM,IAAI,GAAG,CAAC,KAAY,KAAI;AAC7B,IAAA,MAAM,EACL,IAAI,GAAG,EAAmB,EAC1B,KAAK,EACL,aAAa,EACb,KAAK,EACL,SAAS,EACT,KAAK,EACL,OAAO,EACP,YAAY,EACZ,GAAG,GAAG,KAAK,EACX,WAAW,EACX,UAAU,EACV,UAAU,EACV,QAAQ,EACR,SAAS,EACT,OAAO,EACP,QAAQ,EACR,GAAG,SAAS,EACZ,GAAG,KAAK;AAET,IAAA,MAAM,aAAa,GAAG,CAAC,CAAC,KAAI;AAC3B,QAAA,SAAS,GAAG,CAAC,CAAC;AAEd,QAAA,IAAI,CAAC,CAAC,OAAO,KAAK,EAAE;YAAE;QAEtB,OAAO,GAAG,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC;AAC9B,IAAA,CAAC;AAED,IAAA,MAAM,WAAW,GAAG,OAAO,CAAC,MAAK;AAChC,QAAA,IAAI,CAAC,OAAO,IAAI,CAAC,YAAY;YAAE;QAE/B,IAAI,YAAY,EAAE;YACjB,OAAO,CAAA,yBAAA,EAA4B,YAAY,CAAA,OAAA,CAAS;QACzD;AAEA,QAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAChC,YAAA,OAAO,iBAAiB,CAAC,MAAM,CAAC,OAAO,CAAC;QACzC;AAEA,QAAA,OAAO,OAAO;AACf,IAAA,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IAEb,SAAS,CAAC,MAAK;AACd,QAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;AACnB,YAAA,IAAI,EAAE,EAAE,GAAG,aAAa,EAAE;YAC1B,KAAK;AACL,SAAA,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;IAEV,SAAS,CAAC,MAAK;AACd,QAAA,MAAM,CAAC,SAAS,CAAC,CAAA,EAAG,IAAI,CAAC,EAAE,CAAA,OAAA,CAAS,EAAE,CAAC,GAAG,EAAE,CAAC,KAAI;YAChD,QAAQ,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC;AAC5B,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,MAAK;YACX,MAAM,CAAC,WAAW,CAAC,CAAA,EAAG,IAAI,CAAC,EAAE,CAAA,OAAA,CAAS,CAAC;AACxC,QAAA,CAAC;IACF,CAAC,EAAE,EAAE,CAAC;IAEN,QACCA,GAAA,CAAC,OAAO,EAAA,EAAC,KAAK,EAAE,IAAI,EAAA,QAAA,EACnBA,GAAA,CAAA,MAAA,EAAA,EACC,KAAK,EACJ;AACC,gBAAA,GAAG,KAAK;gBACR,KAAK;gBACL,GAAG;AACH,gBAAA,mBAAmB,EAAE,WAAkB;AACvC,gBAAA,eAAe,EAAE,UAAU;gBAC3B,eAAe,EAAE,UAAU,GAAG,OAAO,GAAG,SAAS;AAChC,aAAA,EAEnB,SAAS,EAAE,UAAU,CAAC,QAAQ,EAAE,SAAS,EAAE;AAC1C,gBAAA,eAAe,EAAE,WAAW;aAC5B,CAAC,EACF,SAAS,EAAE,aAAa,EAAA,GACpB,SAAS,EAAA,QAAA,EAEZ,QAAQ,EAAA,CACH,EAAA,CACE;AAEZ;AAEA,IAAI,CAAC,OAAO,GAAG,OAAO;AACtB,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,IAAI,CAAC,SAAS,GAAG,SAAS;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useConfig.js","sources":["../../../../packages/components/form/useConfig.tsx"],"sourcesContent":["import { Fragment, useMemo, useState } from \"react\";\r\nimport Field from \"./field\";\r\nimport Form from \"./form\";\r\nimport { IForm, IFormItem } from \"./type\";\r\nimport useForm from \"./useForm\";\r\n\r\nexport default function useConfig(configs: IFormItem[], formProps?: IForm) {\r\n\tconst form = useForm();\r\n\tconst { onChange } = formProps ?? {};\r\n\tconst [values, setValues] = useState({});\r\n\r\n\tconst handleChange = (name, value) => {\r\n\t\tsetValues(() => ({ ...form.get() }));\r\n\t\tonChange?.(name, value);\r\n\t};\r\n\r\n\tconst node = useMemo(() => {\r\n\t\treturn (\r\n\t\t\t<Form {...formProps} onChange={handleChange} form={form}>\r\n\t\t\t\t{configs.map((config) => {\r\n\t\t\t\t\tconst {\r\n\t\t\t\t\t\tname,\r\n\t\t\t\t\t\tlabel,\r\n\t\t\t\t\t\trequired,\r\n\t\t\t\t\t\tcomponent: El,\r\n\t\t\t\t\t\tcomponentProps = {},\r\n\t\t\t\t\t\tcolspan = 1,\r\n\t\t\t\t\t\trender,\r\n\t\t\t\t\t\tshouldUpdate,\r\n\t\t\t\t\t\tshouldRender,\r\n\t\t\t\t\t} = config;\r\n\t\t\t\t\tconst { className, style } = componentProps;\r\n\r\n\t\t\t\t\tif (shouldRender && !shouldRender(values, form)) {\r\n\t\t\t\t\t\treturn <Fragment key={name} />;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\treturn (\r\n\t\t\t\t\t\t<Field key={name} name={name} required={required}>\r\n\t\t\t\t\t\t\t{render?.(config, values) ?? (\r\n\t\t\t\t\t\t\t\t<El\r\n\t\t\t\t\t\t\t\t\tlabel={label}\r\n\t\t\t\t\t\t\t\t\trequired={required}\r\n\t\t\t\t\t\t\t\t\t{...componentProps}\r\n\t\t\t\t\t\t\t\t\tclassName={`${className ?? \"\"} ${\r\n\t\t\t\t\t\t\t\t\t\tcolspan !== 1\r\n\t\t\t\t\t\t\t\t\t\t\t? `colspan-${colspan}`\r\n\t\t\t\t\t\t\t\t\t\t\t: \"\"\r\n\t\t\t\t\t\t\t\t\t}`}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t</Field>\r\n\t\t\t\t\t);\r\n\t\t\t\t})}\r\n\t\t\t</Form>\r\n\t\t);\r\n\t}, [configs, values]);\r\n\r\n\treturn {\r\n\t\tform,\r\n\t\tnode,\r\n\t};\r\n}\r\n"],"names":["_jsx"],"mappings":";;;;;;AAMc,SAAU,SAAS,CAAC,OAAoB,EAAE,SAAiB,EAAA;AACxE,IAAA,MAAM,IAAI,GAAG,OAAO,EAAE;AACtB,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,SAAS,IAAI,EAAE;IACpC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;AAExC,IAAA,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,KAAK,KAAI;AACpC,QAAA,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AACpC,QAAA,QAAQ,GAAG,IAAI,EAAE,KAAK,CAAC;AACxB,IAAA,CAAC;AAED,IAAA,MAAM,IAAI,GAAG,OAAO,CAAC,MAAK;QACzB,QACCA,IAAC,IAAI,EAAA,EAAA,GAAK,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,YACrD,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;gBACvB,MAAM,EACL,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,SAAS,EAAE,EAAE,EACb,cAAc,GAAG,EAAE,EACnB,OAAO,GAAG,CAAC,EACX,MAAM,EACN,YAAY,EACZ,YAAY,GACZ,GAAG,MAAM;AACV,gBAAA,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,cAAc;gBAE3C,IAAI,YAAY,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;AAChD,oBAAA,OAAOA,GAAA,CAAC,QAAQ,EAAA,EAAA,EAAM,IAAI,CAAI;gBAC/B;AAEA,gBAAA,QACCA,GAAA,CAAC,KAAK,IAAY,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAA,QAAA,EAC9C,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,KACxBA,IAAC,EAAE,EAAA,EACF,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAAA,GACd,cAAc,EAClB,SAAS,EAAE,GAAG,SAAS,IAAI,EAAE,CAAA,CAAA,EAC5B,OAAO,KAAK;8BACT,CAAA,QAAA,EAAW,OAAO,CAAA;8BAClB,EACJ,CAAA,CAAE,EAAA,CACD,CACF,EAAA,EAZU,IAAI,CAaR;YAEV,CAAC,CAAC,EAAA,CACI;AAET,IAAA,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAErB,OAAO;QACN,IAAI;QACJ,IAAI;KACJ;AACF;;;;"}
1
+ {"version":3,"file":"useConfig.js","sources":["../../../../packages/components/form/useConfig.tsx"],"sourcesContent":["import { Fragment, useMemo, useState } from \"react\";\nimport Field from \"./field\";\nimport Form from \"./form\";\nimport { IForm, IFormItem } from \"./type\";\nimport useForm from \"./useForm\";\n\nexport default function useConfig(configs: IFormItem[], formProps?: IForm) {\n\tconst form = useForm();\n\tconst { onChange } = formProps ?? {};\n\tconst [values, setValues] = useState({});\n\n\tconst handleChange = (name, value) => {\n\t\tsetValues(() => ({ ...form.get() }));\n\t\tonChange?.(name, value);\n\t};\n\n\tconst node = useMemo(() => {\n\t\treturn (\n\t\t\t<Form {...formProps} onChange={handleChange} form={form}>\n\t\t\t\t{configs.map((config) => {\n\t\t\t\t\tconst {\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tlabel,\n\t\t\t\t\t\trequired,\n\t\t\t\t\t\tcomponent: El,\n\t\t\t\t\t\tcomponentProps = {},\n\t\t\t\t\t\tcolspan = 1,\n\t\t\t\t\t\trender,\n\t\t\t\t\t\tshouldUpdate,\n\t\t\t\t\t\tshouldRender,\n\t\t\t\t\t} = config;\n\t\t\t\t\tconst { className, style } = componentProps;\n\n\t\t\t\t\tif (shouldRender && !shouldRender(values, form)) {\n\t\t\t\t\t\treturn <Fragment key={name} />;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<Field key={name} name={name} required={required}>\n\t\t\t\t\t\t\t{render?.(config, values) ?? (\n\t\t\t\t\t\t\t\t<El\n\t\t\t\t\t\t\t\t\tlabel={label}\n\t\t\t\t\t\t\t\t\trequired={required}\n\t\t\t\t\t\t\t\t\t{...componentProps}\n\t\t\t\t\t\t\t\t\tclassName={`${className ?? \"\"} ${\n\t\t\t\t\t\t\t\t\t\tcolspan !== 1\n\t\t\t\t\t\t\t\t\t\t\t? `colspan-${colspan}`\n\t\t\t\t\t\t\t\t\t\t\t: \"\"\n\t\t\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Field>\n\t\t\t\t\t);\n\t\t\t\t})}\n\t\t\t</Form>\n\t\t);\n\t}, [configs, values]);\n\n\treturn {\n\t\tform,\n\t\tnode,\n\t};\n}\n"],"names":["_jsx"],"mappings":";;;;;;AAMc,SAAU,SAAS,CAAC,OAAoB,EAAE,SAAiB,EAAA;AACxE,IAAA,MAAM,IAAI,GAAG,OAAO,EAAE;AACtB,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,SAAS,IAAI,EAAE;IACpC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC;AAExC,IAAA,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,KAAK,KAAI;AACpC,QAAA,SAAS,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AACpC,QAAA,QAAQ,GAAG,IAAI,EAAE,KAAK,CAAC;AACxB,IAAA,CAAC;AAED,IAAA,MAAM,IAAI,GAAG,OAAO,CAAC,MAAK;QACzB,QACCA,IAAC,IAAI,EAAA,EAAA,GAAK,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,YACrD,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;gBACvB,MAAM,EACL,IAAI,EACJ,KAAK,EACL,QAAQ,EACR,SAAS,EAAE,EAAE,EACb,cAAc,GAAG,EAAE,EACnB,OAAO,GAAG,CAAC,EACX,MAAM,EACN,YAAY,EACZ,YAAY,GACZ,GAAG,MAAM;AACV,gBAAA,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,cAAc;gBAE3C,IAAI,YAAY,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;AAChD,oBAAA,OAAOA,GAAA,CAAC,QAAQ,EAAA,EAAA,EAAM,IAAI,CAAI;gBAC/B;AAEA,gBAAA,QACCA,GAAA,CAAC,KAAK,IAAY,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAA,QAAA,EAC9C,MAAM,GAAG,MAAM,EAAE,MAAM,CAAC,KACxBA,IAAC,EAAE,EAAA,EACF,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAAA,GACd,cAAc,EAClB,SAAS,EAAE,GAAG,SAAS,IAAI,EAAE,CAAA,CAAA,EAC5B,OAAO,KAAK;8BACT,CAAA,QAAA,EAAW,OAAO,CAAA;8BAClB,EACJ,CAAA,CAAE,EAAA,CACD,CACF,EAAA,EAZU,IAAI,CAaR;YAEV,CAAC,CAAC,EAAA,CACI;AAET,IAAA,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAErB,OAAO;QACN,IAAI;QACJ,IAAI;KACJ;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useForm.js","sources":["../../../../packages/components/form/useForm.ts"],"sourcesContent":["import PubSub from \"pubsub-js\";\r\nimport { uid } from \"radash\";\r\nimport { useRef } from \"react\";\r\nimport { IForm, TRule } from \"./type\";\r\n\r\nexport class IFormInstance {\r\n\treadonly id?: string;\r\n\tdata: Record<string, any> = {};\r\n\tcacheData: Record<string, any> = {};\r\n\trules?: Pick<IForm, \"rules\"> = {};\r\n\r\n\tconstructor() {\r\n\t\tthis.id = uid(8);\r\n\t\tthis.data = {};\r\n\t}\r\n\r\n\tget(field?: string) {\r\n\t\treturn field ? this.data[field] : this.data;\r\n\t}\r\n\r\n\tset(field: any, value?: any) {\r\n\t\tconst id = this.id;\r\n\t\tif (!this.data) return;\r\n\r\n\t\tif (typeof field === \"string\") {\r\n\t\t\tthis.data[field] = value;\r\n\t\t\tthis.cacheData[field] = value;\r\n\t\t\tPubSub.publish(`${id}:set:${field}`, value);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tObject.keys(field).map((name) => {\r\n\t\t\tthis.data[name] = field[name];\r\n\t\t\tthis.cacheData[name] = field[name];\r\n\t\t\tPubSub.publish(`${id}:set:${name}`, field[name]);\r\n\t\t});\r\n\t}\r\n\r\n\tdelete(field) {\r\n\t\tdelete this.data[field];\r\n\t}\r\n\r\n\tclear() {\r\n\t\tif (!this.data) return;\r\n\t\tthis.cacheData = {};\r\n\r\n\t\tObject.keys(this.data).map((name) => {\r\n\t\t\tPubSub.publish(`${this.id}:set:${name}`, undefined);\r\n\t\t\tthis.data[name] = undefined;\r\n\t\t});\r\n\t}\r\n\r\n\tasync validate(field?: string) {\r\n\t\tconst { id, rules, data } = this;\r\n\t\tif (!rules) return data;\r\n\r\n\t\tif (field) {\r\n\t\t\tconst o = rules[field];\r\n\t\t\tconst rule: TRule = {\r\n\t\t\t\tvalidator: (v) =>\r\n\t\t\t\t\tArray.isArray(v)\r\n\t\t\t\t\t\t? v.length > 0\r\n\t\t\t\t\t\t: ![undefined, null, \"\"].includes(v),\r\n\t\t\t\tmessage: undefined,\r\n\t\t\t};\r\n\r\n\t\t\tif (typeof o === \"function\") {\r\n\t\t\t\trule.validator = o;\r\n\t\t\t} else if (o === true) {\r\n\t\t\t\trule.validator = (v) => ![undefined, null, \"\"].includes(v);\r\n\t\t\t\trule.message = \"required\";\r\n\t\t\t} else {\r\n\t\t\t\tObject.assign(rule, o);\r\n\t\t\t}\r\n\r\n\t\t\tconst isValid = rule.validator?.(data[field], this);\r\n\t\t\tif (typeof isValid === \"string\") {\r\n\t\t\t\trule.message = isValid;\r\n\t\t\t}\r\n\r\n\t\t\tif (isValid !== true) {\r\n\t\t\t\tPubSub.publish(`${id}:invalid:${field}`, {\r\n\t\t\t\t\tmessage: rule.message,\r\n\t\t\t\t\tstatus: \"error\",\r\n\t\t\t\t});\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\r\n\t\t\tPubSub.publish(`${id}:invalid:${name}`, {\r\n\t\t\t\tmessage: null,\r\n\t\t\t\tstatus: \"normal\",\r\n\t\t\t});\r\n\t\t\treturn true;\r\n\t\t}\r\n\r\n\t\tlet isAllValid = true;\r\n\r\n\t\tObject.keys(data).map((name) => {\r\n\t\t\tconst o = rules[name];\r\n\t\t\tif (o === undefined) return;\r\n\r\n\t\t\tconst rule: TRule = {\r\n\t\t\t\tvalidator: (v) => (Array.isArray(v) ? v.length > 0 : !!v),\r\n\t\t\t\tmessage: undefined,\r\n\t\t\t};\r\n\r\n\t\t\tif (typeof o === \"function\") {\r\n\t\t\t\trule.validator = o;\r\n\t\t\t} else if (o === true) {\r\n\t\t\t\trule.validator = (v) => ![undefined, null, \"\"].includes(v);\r\n\t\t\t\trule.message = \"required\";\r\n\t\t\t} else {\r\n\t\t\t\tObject.assign(rule, o);\r\n\t\t\t}\r\n\r\n\t\t\tconst isValid = rule.validator?.(data[name], this);\r\n\t\t\tif (typeof isValid === \"string\") {\r\n\t\t\t\trule.message = isValid;\r\n\t\t\t}\r\n\r\n\t\t\tif (isValid !== true) {\r\n\t\t\t\tPubSub.publish(`${id}:invalid:${name}`, {\r\n\t\t\t\t\tmessage: rule.message,\r\n\t\t\t\t\tstatus: \"error\",\r\n\t\t\t\t});\r\n\t\t\t\tisAllValid = false;\r\n\t\t\t} else {\r\n\t\t\t\tPubSub.publish(`${id}:invalid:${name}`, {\r\n\t\t\t\t\tmessage: null,\r\n\t\t\t\t\tstatus: \"normal\",\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\treturn isAllValid ? Promise.resolve(data) : false;\r\n\t}\r\n}\r\n\r\nexport default function useForm(form?: IFormInstance) {\r\n\tconst formRef = useRef<IFormInstance>(null);\r\n\r\n\tif (!formRef.current) {\r\n\t\tformRef.current = form ?? new IFormInstance();\r\n\t}\r\n\r\n\treturn formRef.current;\r\n}\r\n"],"names":[],"mappings":";;;;MAKa,aAAa,CAAA;AAChB,IAAA,EAAE;IACX,IAAI,GAAwB,EAAE;IAC9B,SAAS,GAAwB,EAAE;IACnC,KAAK,GAA0B,EAAE;AAEjC,IAAA,WAAA,GAAA;AACC,QAAA,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC;AAChB,QAAA,IAAI,CAAC,IAAI,GAAG,EAAE;IACf;AAEA,IAAA,GAAG,CAAC,KAAc,EAAA;AACjB,QAAA,OAAO,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI;IAC5C;IAEA,GAAG,CAAC,KAAU,EAAE,KAAW,EAAA;AAC1B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE;QAClB,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE;AAEhB,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC9B,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK;AACxB,YAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK;YAC7B,MAAM,CAAC,OAAO,CAAC,CAAA,EAAG,EAAE,CAAA,KAAA,EAAQ,KAAK,CAAA,CAAE,EAAE,KAAK,CAAC;YAC3C;QACD;QAEA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;YAC/B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;YAC7B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;AAClC,YAAA,MAAM,CAAC,OAAO,CAAC,CAAA,EAAG,EAAE,CAAA,KAAA,EAAQ,IAAI,CAAA,CAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;AACjD,QAAA,CAAC,CAAC;IACH;AAEA,IAAA,MAAM,CAAC,KAAK,EAAA;AACX,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;IACxB;IAEA,KAAK,GAAA;QACJ,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE;AAChB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AAEnB,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AACnC,YAAA,MAAM,CAAC,OAAO,CAAC,CAAA,EAAG,IAAI,CAAC,EAAE,CAAA,KAAA,EAAQ,IAAI,CAAA,CAAE,EAAE,SAAS,CAAC;AACnD,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,SAAS;AAC5B,QAAA,CAAC,CAAC;IACH;IAEA,MAAM,QAAQ,CAAC,KAAc,EAAA;QAC5B,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI;AAChC,QAAA,IAAI,CAAC,KAAK;AAAE,YAAA,OAAO,IAAI;QAEvB,IAAI,KAAK,EAAE;AACV,YAAA,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;AACtB,YAAA,MAAM,IAAI,GAAU;gBACnB,SAAS,EAAE,CAAC,CAAC,KACZ,KAAK,CAAC,OAAO,CAAC,CAAC;AACd,sBAAE,CAAC,CAAC,MAAM,GAAG;AACb,sBAAE,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AACtC,gBAAA,OAAO,EAAE,SAAS;aAClB;AAED,YAAA,IAAI,OAAO,CAAC,KAAK,UAAU,EAAE;AAC5B,gBAAA,IAAI,CAAC,SAAS,GAAG,CAAC;YACnB;AAAO,iBAAA,IAAI,CAAC,KAAK,IAAI,EAAE;gBACtB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC1D,gBAAA,IAAI,CAAC,OAAO,GAAG,UAAU;YAC1B;iBAAO;AACN,gBAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACvB;AAEA,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;AACnD,YAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAChC,gBAAA,IAAI,CAAC,OAAO,GAAG,OAAO;YACvB;AAEA,YAAA,IAAI,OAAO,KAAK,IAAI,EAAE;gBACrB,MAAM,CAAC,OAAO,CAAC,CAAA,EAAG,EAAE,CAAA,SAAA,EAAY,KAAK,EAAE,EAAE;oBACxC,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,oBAAA,MAAM,EAAE,OAAO;AACf,iBAAA,CAAC;AACF,gBAAA,OAAO,KAAK;YACb;YAEA,MAAM,CAAC,OAAO,CAAC,CAAA,EAAG,EAAE,CAAA,SAAA,EAAY,IAAI,EAAE,EAAE;AACvC,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,MAAM,EAAE,QAAQ;AAChB,aAAA,CAAC;AACF,YAAA,OAAO,IAAI;QACZ;QAEA,IAAI,UAAU,GAAG,IAAI;QAErB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AAC9B,YAAA,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;YACrB,IAAI,CAAC,KAAK,SAAS;gBAAE;AAErB,YAAA,MAAM,IAAI,GAAU;gBACnB,SAAS,EAAE,CAAC,CAAC,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACzD,gBAAA,OAAO,EAAE,SAAS;aAClB;AAED,YAAA,IAAI,OAAO,CAAC,KAAK,UAAU,EAAE;AAC5B,gBAAA,IAAI,CAAC,SAAS,GAAG,CAAC;YACnB;AAAO,iBAAA,IAAI,CAAC,KAAK,IAAI,EAAE;gBACtB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC1D,gBAAA,IAAI,CAAC,OAAO,GAAG,UAAU;YAC1B;iBAAO;AACN,gBAAA,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACvB;AAEA,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;AAClD,YAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AAChC,gBAAA,IAAI,CAAC,OAAO,GAAG,OAAO;YACvB;AAEA,YAAA,IAAI,OAAO,KAAK,IAAI,EAAE;gBACrB,MAAM,CAAC,OAAO,CAAC,CAAA,EAAG,EAAE,CAAA,SAAA,EAAY,IAAI,EAAE,EAAE;oBACvC,OAAO,EAAE,IAAI,CAAC,OAAO;AACrB,oBAAA,MAAM,EAAE,OAAO;AACf,iBAAA,CAAC;gBACF,UAAU,GAAG,KAAK;YACnB;iBAAO;gBACN,MAAM,CAAC,OAAO,CAAC,CAAA,EAAG,EAAE,CAAA,SAAA,EAAY,IAAI,EAAE,EAAE;AACvC,oBAAA,OAAO,EAAE,IAAI;AACb,oBAAA,MAAM,EAAE,QAAQ;AAChB,iBAAA,CAAC;YACH;AACD,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,KAAK;IAClD;AACA;AAEa,SAAU,OAAO,CAAC,IAAoB,EAAA;AACnD,IAAA,MAAM,OAAO,GAAG,MAAM,CAAgB,IAAI,CAAC;AAE3C,IAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;QACrB,OAAO,CAAC,OAAO,GAAG,IAAI,IAAI,IAAI,aAAa,EAAE;IAC9C;IAEA,OAAO,OAAO,CAAC,OAAO;AACvB;;;;"}
1
+ {"version":3,"file":"useForm.js","sources":["../../../../packages/components/form/useForm.ts"],"sourcesContent":["import PubSub from \"pubsub-js\";\nimport { uid } from \"radash\";\nimport { useRef } from \"react\";\nimport { IForm, TRule } from \"./type\";\n\nexport class IFormInstance {\n\treadonly id?: string;\n\tdata: Record<string, any> = {};\n\tcacheData: Record<string, any> = {};\n\trules?: Pick<IForm, \"rules\"> = {};\n\n\tconstructor() {\n\t\tthis.id = uid(8);\n\t\tthis.data = {};\n\t}\n\n\tget(field?: string) {\n\t\treturn field ? this.data[field] : this.data;\n\t}\n\n\tset(field: any, value?: any) {\n\t\tconst id = this.id;\n\t\tif (!this.data) return;\n\n\t\tif (typeof field === \"string\") {\n\t\t\tthis.data[field] = value;\n\t\t\tthis.cacheData[field] = value;\n\t\t\tPubSub.publish(`${id}:set:${field}`, value);\n\t\t\treturn;\n\t\t}\n\n\t\tObject.keys(field).map((name) => {\n\t\t\tthis.data[name] = field[name];\n\t\t\tthis.cacheData[name] = field[name];\n\t\t\tPubSub.publish(`${id}:set:${name}`, field[name]);\n\t\t});\n\t}\n\n\tdelete(field) {\n\t\tdelete this.data[field];\n\t}\n\n\tclear() {\n\t\tif (!this.data) return;\n\t\tthis.cacheData = {};\n\n\t\tObject.keys(this.data).map((name) => {\n\t\t\tPubSub.publish(`${this.id}:set:${name}`, undefined);\n\t\t\tthis.data[name] = undefined;\n\t\t});\n\t}\n\n\tasync validate(field?: string) {\n\t\tconst { id, rules, data } = this;\n\t\tif (!rules) return data;\n\n\t\tif (field) {\n\t\t\tconst o = rules[field];\n\t\t\tconst rule: TRule = {\n\t\t\t\tvalidator: (v) =>\n\t\t\t\t\tArray.isArray(v)\n\t\t\t\t\t\t? v.length > 0\n\t\t\t\t\t\t: ![undefined, null, \"\"].includes(v),\n\t\t\t\tmessage: undefined,\n\t\t\t};\n\n\t\t\tif (typeof o === \"function\") {\n\t\t\t\trule.validator = o;\n\t\t\t} else if (o === true) {\n\t\t\t\trule.validator = (v) => ![undefined, null, \"\"].includes(v);\n\t\t\t\trule.message = \"required\";\n\t\t\t} else {\n\t\t\t\tObject.assign(rule, o);\n\t\t\t}\n\n\t\t\tconst isValid = rule.validator?.(data[field], this);\n\t\t\tif (typeof isValid === \"string\") {\n\t\t\t\trule.message = isValid;\n\t\t\t}\n\n\t\t\tif (isValid !== true) {\n\t\t\t\tPubSub.publish(`${id}:invalid:${field}`, {\n\t\t\t\t\tmessage: rule.message,\n\t\t\t\t\tstatus: \"error\",\n\t\t\t\t});\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tPubSub.publish(`${id}:invalid:${name}`, {\n\t\t\t\tmessage: null,\n\t\t\t\tstatus: \"normal\",\n\t\t\t});\n\t\t\treturn true;\n\t\t}\n\n\t\tlet isAllValid = true;\n\n\t\tObject.keys(data).map((name) => {\n\t\t\tconst o = rules[name];\n\t\t\tif (o === undefined) return;\n\n\t\t\tconst rule: TRule = {\n\t\t\t\tvalidator: (v) => (Array.isArray(v) ? v.length > 0 : !!v),\n\t\t\t\tmessage: undefined,\n\t\t\t};\n\n\t\t\tif (typeof o === \"function\") {\n\t\t\t\trule.validator = o;\n\t\t\t} else if (o === true) {\n\t\t\t\trule.validator = (v) => ![undefined, null, \"\"].includes(v);\n\t\t\t\trule.message = \"required\";\n\t\t\t} else {\n\t\t\t\tObject.assign(rule, o);\n\t\t\t}\n\n\t\t\tconst isValid = rule.validator?.(data[name], this);\n\t\t\tif (typeof isValid === \"string\") {\n\t\t\t\trule.message = isValid;\n\t\t\t}\n\n\t\t\tif (isValid !== true) {\n\t\t\t\tPubSub.publish(`${id}:invalid:${name}`, {\n\t\t\t\t\tmessage: rule.message,\n\t\t\t\t\tstatus: \"error\",\n\t\t\t\t});\n\t\t\t\tisAllValid = false;\n\t\t\t} else {\n\t\t\t\tPubSub.publish(`${id}:invalid:${name}`, {\n\t\t\t\t\tmessage: null,\n\t\t\t\t\tstatus: \"normal\",\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\treturn isAllValid ? Promise.resolve(data) : false;\n\t}\n}\n\nexport default function useForm(form?: IFormInstance) {\n\tconst formRef = useRef<IFormInstance>(null);\n\n\tif (!formRef.current) {\n\t\tformRef.current = form ?? new IFormInstance();\n\t}\n\n\treturn formRef.current;\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"icon.js","sources":["../../../../packages/components/icon/icon.tsx"],"sourcesContent":["import classNames from \"classnames\";\r\nimport { cloneElement, isValidElement } from \"react\";\r\nimport \"./index.css\";\r\nimport { IIcon } from \"./type\";\r\n\r\nconst Icon = (props: IIcon) => {\r\n\tconst {\r\n\t\tref,\r\n\t\ticon,\r\n\t\tsize = \"1.425em\",\r\n\t\trotate,\r\n\t\tstyle,\r\n\t\tclassName,\r\n\t\t...restProps\r\n\t} = props;\r\n\r\n\tif (!isValidElement(icon)) return icon;\r\n\r\n\tconst iconProps = {\r\n\t\tref,\r\n\t\tstyle: {\r\n\t\t\ttransform: rotate ? `rotate(${rotate}deg)` : undefined,\r\n\t\t\t...style,\r\n\t\t\twidth: size,\r\n\t\t\theight: size,\r\n\t\t},\r\n\t\tclassName: classNames(\"i-icon\", className),\r\n\t\t...restProps,\r\n\t};\r\n\r\n\treturn cloneElement(icon, iconProps);\r\n};\r\n\r\nexport default Icon;\r\n"],"names":[],"mappings":";;;AAKA,MAAM,IAAI,GAAG,CAAC,KAAY,KAAI;IAC7B,MAAM,EACL,GAAG,EACH,IAAI,EACJ,IAAI,GAAG,SAAS,EAChB,MAAM,EACN,KAAK,EACL,SAAS,EACT,GAAG,SAAS,EACZ,GAAG,KAAK;AAET,IAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AAAE,QAAA,OAAO,IAAI;AAEtC,IAAA,MAAM,SAAS,GAAG;QACjB,GAAG;AACH,QAAA,KAAK,EAAE;YACN,SAAS,EAAE,MAAM,GAAG,CAAA,OAAA,EAAU,MAAM,CAAA,IAAA,CAAM,GAAG,SAAS;AACtD,YAAA,GAAG,KAAK;AACR,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,MAAM,EAAE,IAAI;AACZ,SAAA;AACD,QAAA,SAAS,EAAE,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC;AAC1C,QAAA,GAAG,SAAS;KACZ;AAED,IAAA,OAAO,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC;AACrC;;;;"}
1
+ {"version":3,"file":"icon.js","sources":["../../../../packages/components/icon/icon.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport { cloneElement, isValidElement } from \"react\";\nimport \"./index.css\";\nimport { IIcon } from \"./type\";\n\nconst Icon = (props: IIcon) => {\n\tconst {\n\t\tref,\n\t\ticon,\n\t\tsize = \"1.425em\",\n\t\trotate,\n\t\tstyle,\n\t\tclassName,\n\t\t...restProps\n\t} = props;\n\n\tif (!isValidElement(icon)) return icon;\n\n\tconst iconProps = {\n\t\tref,\n\t\tstyle: {\n\t\t\ttransform: rotate ? `rotate(${rotate}deg)` : undefined,\n\t\t\t...style,\n\t\t\twidth: size,\n\t\t\theight: size,\n\t\t},\n\t\tclassName: classNames(\"i-icon\", className),\n\t\t...restProps,\n\t};\n\n\treturn cloneElement(icon, iconProps);\n};\n\nexport default Icon;\n"],"names":[],"mappings":";;;AAKA,MAAM,IAAI,GAAG,CAAC,KAAY,KAAI;IAC7B,MAAM,EACL,GAAG,EACH,IAAI,EACJ,IAAI,GAAG,SAAS,EAChB,MAAM,EACN,KAAK,EACL,SAAS,EACT,GAAG,SAAS,EACZ,GAAG,KAAK;AAET,IAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;AAAE,QAAA,OAAO,IAAI;AAEtC,IAAA,MAAM,SAAS,GAAG;QACjB,GAAG;AACH,QAAA,KAAK,EAAE;YACN,SAAS,EAAE,MAAM,GAAG,CAAA,OAAA,EAAU,MAAM,CAAA,IAAA,CAAM,GAAG,SAAS;AACtD,YAAA,GAAG,KAAK;AACR,YAAA,KAAK,EAAE,IAAI;AACX,YAAA,MAAM,EAAE,IAAI;AACZ,SAAA;AACD,QAAA,SAAS,EAAE,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC;AAC1C,QAAA,GAAG,SAAS;KACZ;AAED,IAAA,OAAO,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC;AACrC;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"image.js","sources":["../../../../packages/components/image/image.tsx"],"sourcesContent":["import classNames from \"classnames\";\r\nimport { memo, useCallback, useEffect, useMemo, useRef } from \"react\";\r\nimport { useIntersectionObserver, useReactive } from \"../../js/hooks\";\r\nimport usePreview from \"../../js/usePreview\";\r\nimport Loading from \"../loading\";\r\nimport \"./index.css\";\r\nimport List from \"./list\";\r\nimport type { CompositionImage, IImage } from \"./type\";\r\n\r\nconst STATUS_LOADING = \"loading\";\r\nconst STATUS_ERROR = \"error\";\r\n\r\nconst Image = (props: IImage) => {\r\n const {\r\n src,\r\n thumb,\r\n round,\r\n size,\r\n height,\r\n width,\r\n ratio,\r\n initSize,\r\n lazyload,\r\n fallback,\r\n fit,\r\n style,\r\n className,\r\n cover,\r\n coverClass,\r\n usePreview: previewable,\r\n onLoad,\r\n onError,\r\n onClick,\r\n ...restProps\r\n } = props;\r\n\r\n const state = useReactive<{ status?: string }>({\r\n status: STATUS_LOADING,\r\n });\r\n const ref = useRef<HTMLImageElement>(null);\r\n\r\n const { observe, unobserve } = useIntersectionObserver();\r\n const preview = usePreview();\r\n\r\n const setStatus = useCallback(\r\n (status?: string) => {\r\n if (state.status === status) return;\r\n state.status = status;\r\n },\r\n [state],\r\n );\r\n\r\n const handleError = useCallback(\r\n (err) => {\r\n onError?.(err);\r\n setStatus(STATUS_ERROR);\r\n },\r\n [onError, setStatus],\r\n );\r\n\r\n const handleLoad = useCallback(\r\n (e) => {\r\n onLoad?.(e);\r\n setStatus(undefined);\r\n },\r\n [onLoad, setStatus],\r\n );\r\n\r\n const handleClick = useCallback(\r\n (e) => {\r\n onClick?.(e);\r\n\r\n if (!previewable || !src) return;\r\n\r\n const previewConfigs =\r\n typeof previewable === \"boolean\" ? {} : previewable;\r\n\r\n preview({\r\n ...previewConfigs,\r\n items: [\r\n {\r\n src,\r\n type: \"IMAGE\",\r\n },\r\n ],\r\n });\r\n },\r\n [onClick, preview, previewable, src],\r\n );\r\n\r\n useEffect(() => {\r\n if (!src || typeof window === \"undefined\") return;\r\n\r\n const img = ref.current;\r\n if (!img) return;\r\n\r\n const hasSrcAttr = img?.getAttribute(\"src\");\r\n const canSyncStatus = Boolean(img && (!lazyload || hasSrcAttr));\r\n if (canSyncStatus && img.complete) {\r\n setStatus(img.naturalWidth > 0 ? undefined : STATUS_ERROR);\r\n }\r\n\r\n if (!img.complete && observe && lazyload) {\r\n setStatus(STATUS_LOADING);\r\n }\r\n\r\n if (!lazyload || !observe) return;\r\n\r\n observe(img, (tar: HTMLElement, visible: boolean) => {\r\n if (!visible) return;\r\n\r\n tar.setAttribute(\"src\", tar.dataset.src || \"\");\r\n unobserve(tar);\r\n });\r\n\r\n return () => {\r\n unobserve(img);\r\n };\r\n }, [lazyload, observe, setStatus, src, unobserve]);\r\n\r\n const imageStatus = state.status;\r\n const iSize = imageStatus === STATUS_LOADING ? initSize : undefined;\r\n\r\n const wrapperStyle = useMemo(\r\n () => ({\r\n width: width ?? size ?? iSize,\r\n height: height ?? size ?? iSize,\r\n aspectRatio: ratio,\r\n ...style,\r\n }),\r\n [height, iSize, ratio, size, style, width],\r\n );\r\n\r\n const wrapperClassName = useMemo(\r\n () =>\r\n classNames(\"i-image\", className, {\r\n rounded: round,\r\n [`i-image-${imageStatus}`]: imageStatus,\r\n }),\r\n [className, imageStatus, round],\r\n );\r\n\r\n const imageStyle = useMemo(() => ({ objectFit: fit }), [fit]);\r\n const imageSrcProps = lazyload\r\n ? { \"data-src\": thumb ?? src }\r\n : { src: thumb ?? src };\r\n\r\n return (\r\n <div\r\n style={wrapperStyle}\r\n className={wrapperClassName}\r\n onClick={handleClick}\r\n >\r\n {imageStatus === STATUS_ERROR ? (\r\n (fallback ?? null)\r\n ) : (\r\n <>\r\n {src && (\r\n <img\r\n ref={ref}\r\n style={imageStyle}\r\n {...imageSrcProps}\r\n {...restProps}\r\n onLoad={handleLoad}\r\n onError={handleError}\r\n />\r\n )}\r\n\r\n {src && imageStatus === STATUS_LOADING && (\r\n <Loading absolute />\r\n )}\r\n\r\n {cover && (\r\n <div\r\n className={classNames(\"i-image-cover\", coverClass)}\r\n >\r\n {cover}\r\n </div>\r\n )}\r\n </>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nconst MemoImage = memo(Image) as unknown as CompositionImage;\r\n\r\nMemoImage.List = List;\r\n\r\nexport default MemoImage;\r\n"],"names":["_jsx","_jsxs"],"mappings":";;;;;;;;AASA,MAAM,cAAc,GAAG,SAAS;AAChC,MAAM,YAAY,GAAG,OAAO;AAE5B,MAAM,KAAK,GAAG,CAAC,KAAa,KAAI;IAC5B,MAAM,EACF,GAAG,EACH,KAAK,EACL,KAAK,EACL,IAAI,EACJ,MAAM,EACN,KAAK,EACL,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,GAAG,EACH,KAAK,EACL,SAAS,EACT,KAAK,EACL,UAAU,EACV,UAAU,EAAE,WAAW,EACvB,MAAM,EACN,OAAO,EACP,OAAO,EACP,GAAG,SAAS,EACf,GAAG,KAAK;IAET,MAAM,KAAK,GAAG,WAAW,CAAsB;AAC3C,QAAA,MAAM,EAAE,cAAc;AACzB,KAAA,CAAC;AACF,IAAA,MAAM,GAAG,GAAG,MAAM,CAAmB,IAAI,CAAC;IAE1C,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,uBAAuB,EAAE;AACxD,IAAA,MAAM,OAAO,GAAG,UAAU,EAAE;AAE5B,IAAA,MAAM,SAAS,GAAG,WAAW,CACzB,CAAC,MAAe,KAAI;AAChB,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;YAAE;AAC7B,QAAA,KAAK,CAAC,MAAM,GAAG,MAAM;AACzB,IAAA,CAAC,EACD,CAAC,KAAK,CAAC,CACV;AAED,IAAA,MAAM,WAAW,GAAG,WAAW,CAC3B,CAAC,GAAG,KAAI;AACJ,QAAA,OAAO,GAAG,GAAG,CAAC;QACd,SAAS,CAAC,YAAY,CAAC;AAC3B,IAAA,CAAC,EACD,CAAC,OAAO,EAAE,SAAS,CAAC,CACvB;AAED,IAAA,MAAM,UAAU,GAAG,WAAW,CAC1B,CAAC,CAAC,KAAI;AACF,QAAA,MAAM,GAAG,CAAC,CAAC;QACX,SAAS,CAAC,SAAS,CAAC;AACxB,IAAA,CAAC,EACD,CAAC,MAAM,EAAE,SAAS,CAAC,CACtB;AAED,IAAA,MAAM,WAAW,GAAG,WAAW,CAC3B,CAAC,CAAC,KAAI;AACF,QAAA,OAAO,GAAG,CAAC,CAAC;AAEZ,QAAA,IAAI,CAAC,WAAW,IAAI,CAAC,GAAG;YAAE;AAE1B,QAAA,MAAM,cAAc,GAChB,OAAO,WAAW,KAAK,SAAS,GAAG,EAAE,GAAG,WAAW;AAEvD,QAAA,OAAO,CAAC;AACJ,YAAA,GAAG,cAAc;AACjB,YAAA,KAAK,EAAE;AACH,gBAAA;oBACI,GAAG;AACH,oBAAA,IAAI,EAAE,OAAO;AAChB,iBAAA;AACJ,aAAA;AACJ,SAAA,CAAC;IACN,CAAC,EACD,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,CAAC,CACvC;IAED,SAAS,CAAC,MAAK;AACX,QAAA,IAAI,CAAC,GAAG,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE;AAE3C,QAAA,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO;AACvB,QAAA,IAAI,CAAC,GAAG;YAAE;QAEV,MAAM,UAAU,GAAG,GAAG,EAAE,YAAY,CAAC,KAAK,CAAC;AAC3C,QAAA,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,IAAI,UAAU,CAAC,CAAC;AAC/D,QAAA,IAAI,aAAa,IAAI,GAAG,CAAC,QAAQ,EAAE;AAC/B,YAAA,SAAS,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,GAAG,SAAS,GAAG,YAAY,CAAC;QAC9D;QAEA,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,OAAO,IAAI,QAAQ,EAAE;YACtC,SAAS,CAAC,cAAc,CAAC;QAC7B;AAEA,QAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO;YAAE;QAE3B,OAAO,CAAC,GAAG,EAAE,CAAC,GAAgB,EAAE,OAAgB,KAAI;AAChD,YAAA,IAAI,CAAC,OAAO;gBAAE;AAEd,YAAA,GAAG,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC;YAC9C,SAAS,CAAC,GAAG,CAAC;AAClB,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,MAAK;YACR,SAAS,CAAC,GAAG,CAAC;AAClB,QAAA,CAAC;AACL,IAAA,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;AAElD,IAAA,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM;AAChC,IAAA,MAAM,KAAK,GAAG,WAAW,KAAK,cAAc,GAAG,QAAQ,GAAG,SAAS;AAEnE,IAAA,MAAM,YAAY,GAAG,OAAO,CACxB,OAAO;AACH,QAAA,KAAK,EAAE,KAAK,IAAI,IAAI,IAAI,KAAK;AAC7B,QAAA,MAAM,EAAE,MAAM,IAAI,IAAI,IAAI,KAAK;AAC/B,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,GAAG,KAAK;AACX,KAAA,CAAC,EACF,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAC7C;AAED,IAAA,MAAM,gBAAgB,GAAG,OAAO,CAC5B,MACI,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE;AAC7B,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,CAAC,CAAA,QAAA,EAAW,WAAW,CAAA,CAAE,GAAG,WAAW;KAC1C,CAAC,EACN,CAAC,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC,CAClC;AAED,IAAA,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAC7D,MAAM,aAAa,GAAG;AAClB,UAAE,EAAE,UAAU,EAAE,KAAK,IAAI,GAAG;UAC1B,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE;IAE3B,QACIA,aACI,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,gBAAgB,EAC3B,OAAO,EAAE,WAAW,YAEnB,WAAW,KAAK,YAAY,KACxB,QAAQ,IAAI,IAAI,MAEjBC,4BACK,GAAG,KACAD,GAAA,CAAA,KAAA,EAAA,EACI,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,UAAU,KACb,aAAa,EAAA,GACb,SAAS,EACb,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,WAAW,GACtB,CACL,EAEA,GAAG,IAAI,WAAW,KAAK,cAAc,KAClCA,GAAA,CAAC,OAAO,IAAC,QAAQ,EAAA,IAAA,EAAA,CAAG,CACvB,EAEA,KAAK,KACFA,GAAA,CAAA,KAAA,EAAA,EACI,SAAS,EAAE,UAAU,CAAC,eAAe,EAAE,UAAU,CAAC,EAAA,QAAA,EAEjD,KAAK,EAAA,CACJ,CACT,IACF,CACN,EAAA,CACC;AAEd,CAAC;AAED,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK;AAE5B,SAAS,CAAC,IAAI,GAAG,IAAI;;;;"}
1
+ {"version":3,"file":"image.js","sources":["../../../../packages/components/image/image.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport { memo, useCallback, useEffect, useMemo, useRef } from \"react\";\nimport { useIntersectionObserver, useReactive } from \"../../js/hooks\";\nimport usePreview from \"../../js/usePreview\";\nimport Loading from \"../loading\";\nimport \"./index.css\";\nimport List from \"./list\";\nimport type { CompositionImage, IImage } from \"./type\";\n\nconst STATUS_LOADING = \"loading\";\nconst STATUS_ERROR = \"error\";\n\nconst Image = (props: IImage) => {\n const {\n src,\n thumb,\n round,\n size,\n height,\n width,\n ratio,\n initSize,\n lazyload,\n fallback,\n fit,\n style,\n className,\n cover,\n coverClass,\n usePreview: previewable,\n onLoad,\n onError,\n onClick,\n ...restProps\n } = props;\n\n const state = useReactive<{ status?: string }>({\n status: STATUS_LOADING,\n });\n const ref = useRef<HTMLImageElement>(null);\n\n const { observe, unobserve } = useIntersectionObserver();\n const preview = usePreview();\n\n const setStatus = useCallback(\n (status?: string) => {\n if (state.status === status) return;\n state.status = status;\n },\n [state],\n );\n\n const handleError = useCallback(\n (err) => {\n onError?.(err);\n setStatus(STATUS_ERROR);\n },\n [onError, setStatus],\n );\n\n const handleLoad = useCallback(\n (e) => {\n onLoad?.(e);\n setStatus(undefined);\n },\n [onLoad, setStatus],\n );\n\n const handleClick = useCallback(\n (e) => {\n onClick?.(e);\n\n if (!previewable || !src) return;\n\n const previewConfigs =\n typeof previewable === \"boolean\" ? {} : previewable;\n\n preview({\n ...previewConfigs,\n items: [\n {\n src,\n type: \"IMAGE\",\n },\n ],\n });\n },\n [onClick, preview, previewable, src],\n );\n\n useEffect(() => {\n if (!src || typeof window === \"undefined\") return;\n\n const img = ref.current;\n if (!img) return;\n\n const hasSrcAttr = img?.getAttribute(\"src\");\n const canSyncStatus = Boolean(img && (!lazyload || hasSrcAttr));\n if (canSyncStatus && img.complete) {\n setStatus(img.naturalWidth > 0 ? undefined : STATUS_ERROR);\n }\n\n if (!img.complete && observe && lazyload) {\n setStatus(STATUS_LOADING);\n }\n\n if (!lazyload || !observe) return;\n\n observe(img, (tar: HTMLElement, visible: boolean) => {\n if (!visible) return;\n\n tar.setAttribute(\"src\", tar.dataset.src || \"\");\n unobserve(tar);\n });\n\n return () => {\n unobserve(img);\n };\n }, [lazyload, observe, setStatus, src, unobserve]);\n\n const imageStatus = state.status;\n const iSize = imageStatus === STATUS_LOADING ? initSize : undefined;\n\n const wrapperStyle = useMemo(\n () => ({\n width: width ?? size ?? iSize,\n height: height ?? size ?? iSize,\n aspectRatio: ratio,\n ...style,\n }),\n [height, iSize, ratio, size, style, width],\n );\n\n const wrapperClassName = useMemo(\n () =>\n classNames(\"i-image\", className, {\n rounded: round,\n [`i-image-${imageStatus}`]: imageStatus,\n }),\n [className, imageStatus, round],\n );\n\n const imageStyle = useMemo(() => ({ objectFit: fit }), [fit]);\n const imageSrcProps = lazyload\n ? { \"data-src\": thumb ?? src }\n : { src: thumb ?? src };\n\n return (\n <div\n style={wrapperStyle}\n className={wrapperClassName}\n onClick={handleClick}\n >\n {imageStatus === STATUS_ERROR ? (\n (fallback ?? null)\n ) : (\n <>\n {src && (\n <img\n ref={ref}\n style={imageStyle}\n {...imageSrcProps}\n {...restProps}\n onLoad={handleLoad}\n onError={handleError}\n />\n )}\n\n {src && imageStatus === STATUS_LOADING && (\n <Loading absolute />\n )}\n\n {cover && (\n <div\n className={classNames(\"i-image-cover\", coverClass)}\n >\n {cover}\n </div>\n )}\n </>\n )}\n </div>\n );\n};\n\nconst MemoImage = memo(Image) as unknown as CompositionImage;\n\nMemoImage.List = List;\n\nexport default MemoImage;\n"],"names":["_jsx","_jsxs"],"mappings":";;;;;;;;AASA,MAAM,cAAc,GAAG,SAAS;AAChC,MAAM,YAAY,GAAG,OAAO;AAE5B,MAAM,KAAK,GAAG,CAAC,KAAa,KAAI;IAC5B,MAAM,EACF,GAAG,EACH,KAAK,EACL,KAAK,EACL,IAAI,EACJ,MAAM,EACN,KAAK,EACL,KAAK,EACL,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,GAAG,EACH,KAAK,EACL,SAAS,EACT,KAAK,EACL,UAAU,EACV,UAAU,EAAE,WAAW,EACvB,MAAM,EACN,OAAO,EACP,OAAO,EACP,GAAG,SAAS,EACf,GAAG,KAAK;IAET,MAAM,KAAK,GAAG,WAAW,CAAsB;AAC3C,QAAA,MAAM,EAAE,cAAc;AACzB,KAAA,CAAC;AACF,IAAA,MAAM,GAAG,GAAG,MAAM,CAAmB,IAAI,CAAC;IAE1C,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,uBAAuB,EAAE;AACxD,IAAA,MAAM,OAAO,GAAG,UAAU,EAAE;AAE5B,IAAA,MAAM,SAAS,GAAG,WAAW,CACzB,CAAC,MAAe,KAAI;AAChB,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM;YAAE;AAC7B,QAAA,KAAK,CAAC,MAAM,GAAG,MAAM;AACzB,IAAA,CAAC,EACD,CAAC,KAAK,CAAC,CACV;AAED,IAAA,MAAM,WAAW,GAAG,WAAW,CAC3B,CAAC,GAAG,KAAI;AACJ,QAAA,OAAO,GAAG,GAAG,CAAC;QACd,SAAS,CAAC,YAAY,CAAC;AAC3B,IAAA,CAAC,EACD,CAAC,OAAO,EAAE,SAAS,CAAC,CACvB;AAED,IAAA,MAAM,UAAU,GAAG,WAAW,CAC1B,CAAC,CAAC,KAAI;AACF,QAAA,MAAM,GAAG,CAAC,CAAC;QACX,SAAS,CAAC,SAAS,CAAC;AACxB,IAAA,CAAC,EACD,CAAC,MAAM,EAAE,SAAS,CAAC,CACtB;AAED,IAAA,MAAM,WAAW,GAAG,WAAW,CAC3B,CAAC,CAAC,KAAI;AACF,QAAA,OAAO,GAAG,CAAC,CAAC;AAEZ,QAAA,IAAI,CAAC,WAAW,IAAI,CAAC,GAAG;YAAE;AAE1B,QAAA,MAAM,cAAc,GAChB,OAAO,WAAW,KAAK,SAAS,GAAG,EAAE,GAAG,WAAW;AAEvD,QAAA,OAAO,CAAC;AACJ,YAAA,GAAG,cAAc;AACjB,YAAA,KAAK,EAAE;AACH,gBAAA;oBACI,GAAG;AACH,oBAAA,IAAI,EAAE,OAAO;AAChB,iBAAA;AACJ,aAAA;AACJ,SAAA,CAAC;IACN,CAAC,EACD,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,CAAC,CACvC;IAED,SAAS,CAAC,MAAK;AACX,QAAA,IAAI,CAAC,GAAG,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE;AAE3C,QAAA,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO;AACvB,QAAA,IAAI,CAAC,GAAG;YAAE;QAEV,MAAM,UAAU,GAAG,GAAG,EAAE,YAAY,CAAC,KAAK,CAAC;AAC3C,QAAA,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,IAAI,UAAU,CAAC,CAAC;AAC/D,QAAA,IAAI,aAAa,IAAI,GAAG,CAAC,QAAQ,EAAE;AAC/B,YAAA,SAAS,CAAC,GAAG,CAAC,YAAY,GAAG,CAAC,GAAG,SAAS,GAAG,YAAY,CAAC;QAC9D;QAEA,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,OAAO,IAAI,QAAQ,EAAE;YACtC,SAAS,CAAC,cAAc,CAAC;QAC7B;AAEA,QAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO;YAAE;QAE3B,OAAO,CAAC,GAAG,EAAE,CAAC,GAAgB,EAAE,OAAgB,KAAI;AAChD,YAAA,IAAI,CAAC,OAAO;gBAAE;AAEd,YAAA,GAAG,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC;YAC9C,SAAS,CAAC,GAAG,CAAC;AAClB,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,MAAK;YACR,SAAS,CAAC,GAAG,CAAC;AAClB,QAAA,CAAC;AACL,IAAA,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;AAElD,IAAA,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM;AAChC,IAAA,MAAM,KAAK,GAAG,WAAW,KAAK,cAAc,GAAG,QAAQ,GAAG,SAAS;AAEnE,IAAA,MAAM,YAAY,GAAG,OAAO,CACxB,OAAO;AACH,QAAA,KAAK,EAAE,KAAK,IAAI,IAAI,IAAI,KAAK;AAC7B,QAAA,MAAM,EAAE,MAAM,IAAI,IAAI,IAAI,KAAK;AAC/B,QAAA,WAAW,EAAE,KAAK;AAClB,QAAA,GAAG,KAAK;AACX,KAAA,CAAC,EACF,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAC7C;AAED,IAAA,MAAM,gBAAgB,GAAG,OAAO,CAC5B,MACI,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE;AAC7B,QAAA,OAAO,EAAE,KAAK;AACd,QAAA,CAAC,CAAA,QAAA,EAAW,WAAW,CAAA,CAAE,GAAG,WAAW;KAC1C,CAAC,EACN,CAAC,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC,CAClC;AAED,IAAA,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAC7D,MAAM,aAAa,GAAG;AAClB,UAAE,EAAE,UAAU,EAAE,KAAK,IAAI,GAAG;UAC1B,EAAE,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE;IAE3B,QACIA,aACI,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,gBAAgB,EAC3B,OAAO,EAAE,WAAW,YAEnB,WAAW,KAAK,YAAY,KACxB,QAAQ,IAAI,IAAI,MAEjBC,4BACK,GAAG,KACAD,GAAA,CAAA,KAAA,EAAA,EACI,GAAG,EAAE,GAAG,EACR,KAAK,EAAE,UAAU,KACb,aAAa,EAAA,GACb,SAAS,EACb,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,WAAW,GACtB,CACL,EAEA,GAAG,IAAI,WAAW,KAAK,cAAc,KAClCA,GAAA,CAAC,OAAO,IAAC,QAAQ,EAAA,IAAA,EAAA,CAAG,CACvB,EAEA,KAAK,KACFA,GAAA,CAAA,KAAA,EAAA,EACI,SAAS,EAAE,UAAU,CAAC,eAAe,EAAE,UAAU,CAAC,EAAA,QAAA,EAEjD,KAAK,EAAA,CACJ,CACT,IACF,CACN,EAAA,CACC;AAEd,CAAC;AAED,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK;AAE5B,SAAS,CAAC,IAAI,GAAG,IAAI;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"list.js","sources":["../../../../packages/components/image/list.tsx"],"sourcesContent":["import { useMemo } from \"react\";\r\nimport usePreview from \"../../js/usePreview\";\r\nimport { TPreviewItem } from \"../../js/usePreview/type\";\r\nimport { getFileType, getSuffixByUrl } from \"../../js/utils\";\r\nimport Flex from \"../flex\";\r\nimport Image from \"./image\";\r\nimport { IImageList } from \"./type\";\r\n\r\nexport default function List(props: IImageList) {\r\n\tconst {\r\n\t\titems = [],\r\n\t\tgap = 8,\r\n\t\tcolumns,\r\n\t\twrap,\r\n\t\tdirection,\r\n\t\tusePreview: previewable,\r\n\t\tonClick,\r\n\t\t...restProps\r\n\t} = props;\r\n\tconst preview = usePreview();\r\n\r\n\tconst files = useMemo(() => {\r\n\t\treturn items.map((item) => {\r\n\t\t\tconst o: TPreviewItem = {\r\n\t\t\t\tsrc: \"\",\r\n\t\t\t};\r\n\t\t\tif (typeof item === \"string\") {\r\n\t\t\t\to.src = item;\r\n\t\t\t} else {\r\n\t\t\t\tObject.assign(o, item);\r\n\t\t\t}\r\n\r\n\t\t\to.suffix = getSuffixByUrl(o.src) || \"\";\r\n\t\t\to.type = getFileType(o.suffix, item[\"type\"]);\r\n\r\n\t\t\treturn o;\r\n\t\t});\r\n\t}, [items]);\r\n\r\n\tconst handleClick = (e, i) => {\r\n\t\tonClick?.(e);\r\n\r\n\t\tpreviewable &&\r\n\t\t\tpreview({\r\n\t\t\t\titems: files,\r\n\t\t\t\tinitial: i,\r\n\t\t\t});\r\n\t};\r\n\r\n\tif (!files.length) return \"\";\r\n\r\n\treturn (\r\n\t\t<Flex\r\n\t\t\tclassName='i-image-list'\r\n\t\t\tgap={gap}\r\n\t\t\tcolumns={columns}\r\n\t\t\twrap={wrap}\r\n\t\t\tdirection={direction}\r\n\t\t>\r\n\t\t\t{files.map((img, i) => {\r\n\t\t\t\treturn (\r\n\t\t\t\t\t<Image\r\n\t\t\t\t\t\tkey={i}\r\n\t\t\t\t\t\tsrc={img.src}\r\n\t\t\t\t\t\tusePreview={false}\r\n\t\t\t\t\t\tonClick={(e) => handleClick(e, i)}\r\n\t\t\t\t\t\t{...restProps}\r\n\t\t\t\t\t/>\r\n\t\t\t\t);\r\n\t\t\t})}\r\n\t\t</Flex>\r\n\t);\r\n}\r\n"],"names":["_jsx","Image"],"mappings":";;;;;;;AAQc,SAAU,IAAI,CAAC,KAAiB,EAAA;IAC7C,MAAM,EACL,KAAK,GAAG,EAAE,EACV,GAAG,GAAG,CAAC,EACP,OAAO,EACP,IAAI,EACJ,SAAS,EACT,UAAU,EAAE,WAAW,EACvB,OAAO,EACP,GAAG,SAAS,EACZ,GAAG,KAAK;AACT,IAAA,MAAM,OAAO,GAAG,UAAU,EAAE;AAE5B,IAAA,MAAM,KAAK,GAAG,OAAO,CAAC,MAAK;AAC1B,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AACzB,YAAA,MAAM,CAAC,GAAiB;AACvB,gBAAA,GAAG,EAAE,EAAE;aACP;AACD,YAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC7B,gBAAA,CAAC,CAAC,GAAG,GAAG,IAAI;YACb;iBAAO;AACN,gBAAA,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC;YACvB;YAEA,CAAC,CAAC,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE;AACtC,YAAA,CAAC,CAAC,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAE5C,YAAA,OAAO,CAAC;AACT,QAAA,CAAC,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAEX,IAAA,MAAM,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC,KAAI;AAC5B,QAAA,OAAO,GAAG,CAAC,CAAC;QAEZ,WAAW;AACV,YAAA,OAAO,CAAC;AACP,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,OAAO,EAAE,CAAC;AACV,aAAA,CAAC;AACJ,IAAA,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,MAAM;AAAE,QAAA,OAAO,EAAE;AAE5B,IAAA,QACCA,GAAA,CAAC,IAAI,EAAA,EACJ,SAAS,EAAC,cAAc,EACxB,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,SAAS,EAAA,QAAA,EAEnB,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,KAAI;AACrB,YAAA,QACCA,GAAA,CAACC,SAAK,EAAA,EAEL,GAAG,EAAE,GAAG,CAAC,GAAG,EACZ,UAAU,EAAE,KAAK,EACjB,OAAO,EAAE,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,KAC7B,SAAS,EAAA,EAJR,CAAC,CAKL;QAEJ,CAAC,CAAC,EAAA,CACI;AAET;;;;"}
1
+ {"version":3,"file":"list.js","sources":["../../../../packages/components/image/list.tsx"],"sourcesContent":["import { useMemo } from \"react\";\nimport usePreview from \"../../js/usePreview\";\nimport { TPreviewItem } from \"../../js/usePreview/type\";\nimport { getFileType, getSuffixByUrl } from \"../../js/utils\";\nimport Flex from \"../flex\";\nimport Image from \"./image\";\nimport { IImageList } from \"./type\";\n\nexport default function List(props: IImageList) {\n\tconst {\n\t\titems = [],\n\t\tgap = 8,\n\t\tcolumns,\n\t\twrap,\n\t\tdirection,\n\t\tusePreview: previewable,\n\t\tonClick,\n\t\t...restProps\n\t} = props;\n\tconst preview = usePreview();\n\n\tconst files = useMemo(() => {\n\t\treturn items.map((item) => {\n\t\t\tconst o: TPreviewItem = {\n\t\t\t\tsrc: \"\",\n\t\t\t};\n\t\t\tif (typeof item === \"string\") {\n\t\t\t\to.src = item;\n\t\t\t} else {\n\t\t\t\tObject.assign(o, item);\n\t\t\t}\n\n\t\t\to.suffix = getSuffixByUrl(o.src) || \"\";\n\t\t\to.type = getFileType(o.suffix, item[\"type\"]);\n\n\t\t\treturn o;\n\t\t});\n\t}, [items]);\n\n\tconst handleClick = (e, i) => {\n\t\tonClick?.(e);\n\n\t\tpreviewable &&\n\t\t\tpreview({\n\t\t\t\titems: files,\n\t\t\t\tinitial: i,\n\t\t\t});\n\t};\n\n\tif (!files.length) return \"\";\n\n\treturn (\n\t\t<Flex\n\t\t\tclassName='i-image-list'\n\t\t\tgap={gap}\n\t\t\tcolumns={columns}\n\t\t\twrap={wrap}\n\t\t\tdirection={direction}\n\t\t>\n\t\t\t{files.map((img, i) => {\n\t\t\t\treturn (\n\t\t\t\t\t<Image\n\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\tsrc={img.src}\n\t\t\t\t\t\tusePreview={false}\n\t\t\t\t\t\tonClick={(e) => handleClick(e, i)}\n\t\t\t\t\t\t{...restProps}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t})}\n\t\t</Flex>\n\t);\n}\n"],"names":["_jsx","Image"],"mappings":";;;;;;;AAQc,SAAU,IAAI,CAAC,KAAiB,EAAA;IAC7C,MAAM,EACL,KAAK,GAAG,EAAE,EACV,GAAG,GAAG,CAAC,EACP,OAAO,EACP,IAAI,EACJ,SAAS,EACT,UAAU,EAAE,WAAW,EACvB,OAAO,EACP,GAAG,SAAS,EACZ,GAAG,KAAK;AACT,IAAA,MAAM,OAAO,GAAG,UAAU,EAAE;AAE5B,IAAA,MAAM,KAAK,GAAG,OAAO,CAAC,MAAK;AAC1B,QAAA,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAI;AACzB,YAAA,MAAM,CAAC,GAAiB;AACvB,gBAAA,GAAG,EAAE,EAAE;aACP;AACD,YAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC7B,gBAAA,CAAC,CAAC,GAAG,GAAG,IAAI;YACb;iBAAO;AACN,gBAAA,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC;YACvB;YAEA,CAAC,CAAC,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE;AACtC,YAAA,CAAC,CAAC,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAE5C,YAAA,OAAO,CAAC;AACT,QAAA,CAAC,CAAC;AACH,IAAA,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;AAEX,IAAA,MAAM,WAAW,GAAG,CAAC,CAAC,EAAE,CAAC,KAAI;AAC5B,QAAA,OAAO,GAAG,CAAC,CAAC;QAEZ,WAAW;AACV,YAAA,OAAO,CAAC;AACP,gBAAA,KAAK,EAAE,KAAK;AACZ,gBAAA,OAAO,EAAE,CAAC;AACV,aAAA,CAAC;AACJ,IAAA,CAAC;IAED,IAAI,CAAC,KAAK,CAAC,MAAM;AAAE,QAAA,OAAO,EAAE;AAE5B,IAAA,QACCA,GAAA,CAAC,IAAI,EAAA,EACJ,SAAS,EAAC,cAAc,EACxB,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,SAAS,EAAA,QAAA,EAEnB,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,KAAI;AACrB,YAAA,QACCA,GAAA,CAACC,SAAK,EAAA,EAEL,GAAG,EAAE,GAAG,CAAC,GAAG,EACZ,UAAU,EAAE,KAAK,EACjB,OAAO,EAAE,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,KAC7B,SAAS,EAAA,EAJR,CAAC,CAKL;QAEJ,CAAC,CAAC,EAAA,CACI;AAET;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"container.js","sources":["../../../../packages/components/input/container.tsx"],"sourcesContent":["import classNames from \"classnames\";\r\nimport { IInputContainer } from \"./type\";\r\n\r\nexport default function InputContainer(props: IInputContainer) {\r\n\tconst {\r\n\t\tas: As = \"label\",\r\n\t\tlabel,\r\n\t\tclassName,\r\n\t\tlabelInline,\r\n\t\tstyle,\r\n\t\tchildren,\r\n\t\tstatus,\r\n\t\ttip,\r\n\t\trequired,\r\n\t} = props;\r\n\r\n\treturn (\r\n\t\t<As\r\n\t\t\tclassName={classNames(\"i-input-label\", className, {\r\n\t\t\t\t\"i-input-inline\": labelInline,\r\n\t\t\t})}\r\n\t\t\tstyle={style}\r\n\t\t>\r\n\t\t\t{label && (\r\n\t\t\t\t<span className='i-input-label-text'>\r\n\t\t\t\t\t{required && <span className='error'>*</span>}\r\n\t\t\t\t\t{label}\r\n\t\t\t\t</span>\r\n\t\t\t)}\r\n\r\n\t\t\t{children}\r\n\r\n\t\t\t{tip && (\r\n\t\t\t\t<span\r\n\t\t\t\t\tclassName={classNames(\"i-input-message\", {\r\n\t\t\t\t\t\t[`i-input-${status}`]: status !== \"normal\",\r\n\t\t\t\t\t})}\r\n\t\t\t\t>\r\n\t\t\t\t\t{tip}\r\n\t\t\t\t</span>\r\n\t\t\t)}\r\n\t\t</As>\r\n\t);\r\n}\r\n"],"names":["_jsxs","_jsx"],"mappings":";;;AAGc,SAAU,cAAc,CAAC,KAAsB,EAAA;IAC5D,MAAM,EACL,EAAE,EAAE,EAAE,GAAG,OAAO,EAChB,KAAK,EACL,SAAS,EACT,WAAW,EACX,KAAK,EACL,QAAQ,EACR,MAAM,EACN,GAAG,EACH,QAAQ,GACR,GAAG,KAAK;IAET,QACCA,IAAA,CAAC,EAAE,EAAA,EACF,SAAS,EAAE,UAAU,CAAC,eAAe,EAAE,SAAS,EAAE;AACjD,YAAA,gBAAgB,EAAE,WAAW;AAC7B,SAAA,CAAC,EACF,KAAK,EAAE,KAAK,EAAA,QAAA,EAAA,CAEX,KAAK,KACLA,IAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,oBAAoB,EAAA,QAAA,EAAA,CAClC,QAAQ,IAAIC,cAAM,SAAS,EAAC,OAAO,EAAA,QAAA,EAAA,GAAA,EAAA,CAAS,EAC5C,KAAK,CAAA,EAAA,CACA,CACP,EAEA,QAAQ,EAER,GAAG,KACHA,cACC,SAAS,EAAE,UAAU,CAAC,iBAAiB,EAAE;AACxC,oBAAA,CAAC,WAAW,MAAM,CAAA,CAAE,GAAG,MAAM,KAAK,QAAQ;AAC1C,iBAAA,CAAC,YAED,GAAG,EAAA,CACE,CACP,CAAA,EAAA,CACG;AAEP;;;;"}
1
+ {"version":3,"file":"container.js","sources":["../../../../packages/components/input/container.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport { IInputContainer } from \"./type\";\n\nexport default function InputContainer(props: IInputContainer) {\n\tconst {\n\t\tas: As = \"label\",\n\t\tlabel,\n\t\tclassName,\n\t\tlabelInline,\n\t\tstyle,\n\t\tchildren,\n\t\tstatus,\n\t\ttip,\n\t\trequired,\n\t} = props;\n\n\treturn (\n\t\t<As\n\t\t\tclassName={classNames(\"i-input-label\", className, {\n\t\t\t\t\"i-input-inline\": labelInline,\n\t\t\t})}\n\t\t\tstyle={style}\n\t\t>\n\t\t\t{label && (\n\t\t\t\t<span className='i-input-label-text'>\n\t\t\t\t\t{required && <span className='error'>*</span>}\n\t\t\t\t\t{label}\n\t\t\t\t</span>\n\t\t\t)}\n\n\t\t\t{children}\n\n\t\t\t{tip && (\n\t\t\t\t<span\n\t\t\t\t\tclassName={classNames(\"i-input-message\", {\n\t\t\t\t\t\t[`i-input-${status}`]: status !== \"normal\",\n\t\t\t\t\t})}\n\t\t\t\t>\n\t\t\t\t\t{tip}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t</As>\n\t);\n}\n"],"names":["_jsxs","_jsx"],"mappings":";;;AAGc,SAAU,cAAc,CAAC,KAAsB,EAAA;IAC5D,MAAM,EACL,EAAE,EAAE,EAAE,GAAG,OAAO,EAChB,KAAK,EACL,SAAS,EACT,WAAW,EACX,KAAK,EACL,QAAQ,EACR,MAAM,EACN,GAAG,EACH,QAAQ,GACR,GAAG,KAAK;IAET,QACCA,IAAA,CAAC,EAAE,EAAA,EACF,SAAS,EAAE,UAAU,CAAC,eAAe,EAAE,SAAS,EAAE;AACjD,YAAA,gBAAgB,EAAE,WAAW;AAC7B,SAAA,CAAC,EACF,KAAK,EAAE,KAAK,EAAA,QAAA,EAAA,CAEX,KAAK,KACLA,IAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,oBAAoB,EAAA,QAAA,EAAA,CAClC,QAAQ,IAAIC,cAAM,SAAS,EAAC,OAAO,EAAA,QAAA,EAAA,GAAA,EAAA,CAAS,EAC5C,KAAK,CAAA,EAAA,CACA,CACP,EAEA,QAAQ,EAER,GAAG,KACHA,cACC,SAAS,EAAE,UAAU,CAAC,iBAAiB,EAAE;AACxC,oBAAA,CAAC,WAAW,MAAM,CAAA,CAAE,GAAG,MAAM,KAAK,QAAQ;AAC1C,iBAAA,CAAC,YAED,GAAG,EAAA,CACE,CACP,CAAA,EAAA,CACG;AAEP;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"input.js","sources":["../../../../packages/components/input/input.tsx"],"sourcesContent":["import { VisibilityOffRound, VisibilityRound } from \"@ricons/material\";\r\nimport classNames from \"classnames\";\r\nimport {\r\n\tChangeEvent,\r\n\tuseEffect,\r\n\tuseMemo,\r\n\tuseState,\r\n\ttype KeyboardEvent,\r\n} from \"react\";\r\nimport \"../../css/input.css\";\r\nimport Helpericon from \"../utils/helpericon\";\r\nimport InputContainer from \"./container\";\r\nimport Number from \"./number\";\r\nimport Range from \"./range\";\r\nimport Textarea from \"./textarea\";\r\nimport type { CompositionInput, IInput } from \"./type\";\r\n\r\nconst Input = ((props: IInput) => {\r\n\tconst {\r\n\t\tref,\r\n\t\ttype = \"text\",\r\n\t\tlabel,\r\n\t\tname,\r\n\t\tvalue = \"\",\r\n\t\tprepend,\r\n\t\tappend,\r\n\t\tlabelInline,\r\n\t\tclassName,\r\n\t\tstatus = \"normal\",\r\n\t\tmessage,\r\n\t\ttip,\r\n\t\tclear,\r\n\t\twidth,\r\n\t\thideVisible,\r\n\t\tborder,\r\n\t\tunderline,\r\n\t\trequired,\r\n\t\tmaxLength,\r\n\t\tonChange,\r\n\t\tonEnter,\r\n\t\tonClear,\r\n\t\tstyle,\r\n\t\t...restProps\r\n\t} = props;\r\n\r\n\tconst [inputValue, setInputValue] = useState(value);\r\n\tconst [inputType, setInputType] = useState(type);\r\n\tconst [visible, setVisible] = useState(false);\r\n\r\n\tconst handleChange = (e: ChangeEvent<HTMLInputElement>) => {\r\n\t\tconst v = e.target.value;\r\n\r\n\t\tsetInputValue(v);\r\n\t\tonChange?.(v, e);\r\n\t};\r\n\r\n\tconst handleKeydown = (e: KeyboardEvent<HTMLInputElement>) => {\r\n\t\te.code === \"Enter\" && onEnter?.(e);\r\n\t};\r\n\r\n\tconst handleHelperClick = () => {\r\n\t\tif (type === \"password\" && !hideVisible) {\r\n\t\t\tsetVisible((v) => {\r\n\t\t\t\tconst next = !v;\r\n\t\t\t\tsetInputType(next ? \"text\" : \"password\");\r\n\t\t\t\treturn next;\r\n\t\t\t});\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst v = \"\";\r\n\t\tsetInputValue(v);\r\n\t\tonChange?.(v);\r\n\t\tonClear?.();\r\n\t};\r\n\r\n\tconst HelperIcon = useMemo(() => {\r\n\t\tif (type === \"password\") {\r\n\t\t\treturn visible ? <VisibilityRound /> : <VisibilityOffRound />;\r\n\t\t}\r\n\r\n\t\treturn undefined;\r\n\t}, [type, visible]);\r\n\r\n\tuseEffect(() => {\r\n\t\tsetInputValue(value);\r\n\t}, [value]);\r\n\r\n\tconst inputProps = {\r\n\t\tref,\r\n\t\ttype: inputType,\r\n\t\tname,\r\n\t\tvalue: inputValue,\r\n\t\tmaxLength,\r\n\t\tclassName: classNames(\"i-input\", `i-input-${type}`),\r\n\t\tonChange: handleChange,\r\n\t\tonKeyDown: handleKeydown,\r\n\t\t...restProps,\r\n\t};\r\n\r\n\tuseEffect(() => {\r\n\t\tsetInputType(type);\r\n\t\tsetVisible(false);\r\n\t}, [type]);\r\n\r\n\tconst clearable = clear && inputValue;\r\n\tconst showHelper = type === \"password\" && !!inputValue;\r\n\r\n\treturn (\r\n\t\t<InputContainer\r\n\t\t\tlabel={label}\r\n\t\t\tlabelInline={labelInline}\r\n\t\t\tclassName={className}\r\n\t\t\tstyle={{ width, ...style }}\r\n\t\t\ttip={message ?? tip}\r\n\t\t\tstatus={status}\r\n\t\t\trequired={required}\r\n\t\t>\r\n\t\t\t<div\r\n\t\t\t\tclassName={classNames(\"i-input-item\", {\r\n\t\t\t\t\t[`i-input-${status}`]: status !== \"normal\",\r\n\t\t\t\t\t\"i-input-borderless\": !border,\r\n\t\t\t\t\t\"i-input-underline\": underline,\r\n\t\t\t\t})}\r\n\t\t\t>\r\n\t\t\t\t{prepend && <div className='i-input-prepend'>{prepend}</div>}\r\n\r\n\t\t\t\t<input {...inputProps} />\r\n\r\n\t\t\t\t{maxLength && inputValue?.length > 0 && (\r\n\t\t\t\t\t<span className='color-8 pr-4 font-sm'>\r\n\t\t\t\t\t\t{inputValue.length} / {maxLength}\r\n\t\t\t\t\t</span>\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t<Helpericon\r\n\t\t\t\t\tactive={!!clearable || showHelper}\r\n\t\t\t\t\ticon={HelperIcon}\r\n\t\t\t\t\tonClick={handleHelperClick}\r\n\t\t\t\t/>\r\n\r\n\t\t\t\t{append && <div className='i-input-append'>{append}</div>}\r\n\t\t\t</div>\r\n\t\t</InputContainer>\r\n\t);\r\n}) as CompositionInput;\r\n\r\nInput.Textarea = Textarea;\r\nInput.Number = Number;\r\nInput.Range = Range;\r\n\r\nexport default Input;\r\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"input.js","sources":["../../../../packages/components/input/input.tsx"],"sourcesContent":["import { VisibilityOffRound, VisibilityRound } from \"@ricons/material\";\nimport classNames from \"classnames\";\nimport {\n\tChangeEvent,\n\tuseEffect,\n\tuseMemo,\n\tuseState,\n\ttype KeyboardEvent,\n} from \"react\";\nimport \"../../css/input.css\";\nimport Helpericon from \"../utils/helpericon\";\nimport InputContainer from \"./container\";\nimport Number from \"./number\";\nimport Range from \"./range\";\nimport Textarea from \"./textarea\";\nimport type { CompositionInput, IInput } from \"./type\";\n\nconst Input = ((props: IInput) => {\n\tconst {\n\t\tref,\n\t\ttype = \"text\",\n\t\tlabel,\n\t\tname,\n\t\tvalue = \"\",\n\t\tprepend,\n\t\tappend,\n\t\tlabelInline,\n\t\tclassName,\n\t\tstatus = \"normal\",\n\t\tmessage,\n\t\ttip,\n\t\tclear,\n\t\twidth,\n\t\thideVisible,\n\t\tborder,\n\t\tunderline,\n\t\trequired,\n\t\tmaxLength,\n\t\tonChange,\n\t\tonEnter,\n\t\tonClear,\n\t\tstyle,\n\t\t...restProps\n\t} = props;\n\n\tconst [inputValue, setInputValue] = useState(value);\n\tconst [inputType, setInputType] = useState(type);\n\tconst [visible, setVisible] = useState(false);\n\n\tconst handleChange = (e: ChangeEvent<HTMLInputElement>) => {\n\t\tconst v = e.target.value;\n\n\t\tsetInputValue(v);\n\t\tonChange?.(v, e);\n\t};\n\n\tconst handleKeydown = (e: KeyboardEvent<HTMLInputElement>) => {\n\t\te.code === \"Enter\" && onEnter?.(e);\n\t};\n\n\tconst handleHelperClick = () => {\n\t\tif (type === \"password\" && !hideVisible) {\n\t\t\tsetVisible((v) => {\n\t\t\t\tconst next = !v;\n\t\t\t\tsetInputType(next ? \"text\" : \"password\");\n\t\t\t\treturn next;\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst v = \"\";\n\t\tsetInputValue(v);\n\t\tonChange?.(v);\n\t\tonClear?.();\n\t};\n\n\tconst HelperIcon = useMemo(() => {\n\t\tif (type === \"password\") {\n\t\t\treturn visible ? <VisibilityRound /> : <VisibilityOffRound />;\n\t\t}\n\n\t\treturn undefined;\n\t}, [type, visible]);\n\n\tuseEffect(() => {\n\t\tsetInputValue(value);\n\t}, [value]);\n\n\tconst inputProps = {\n\t\tref,\n\t\ttype: inputType,\n\t\tname,\n\t\tvalue: inputValue,\n\t\tmaxLength,\n\t\tclassName: classNames(\"i-input\", `i-input-${type}`),\n\t\tonChange: handleChange,\n\t\tonKeyDown: handleKeydown,\n\t\t...restProps,\n\t};\n\n\tuseEffect(() => {\n\t\tsetInputType(type);\n\t\tsetVisible(false);\n\t}, [type]);\n\n\tconst clearable = clear && inputValue;\n\tconst showHelper = type === \"password\" && !!inputValue;\n\n\treturn (\n\t\t<InputContainer\n\t\t\tlabel={label}\n\t\t\tlabelInline={labelInline}\n\t\t\tclassName={className}\n\t\t\tstyle={{ width, ...style }}\n\t\t\ttip={message ?? tip}\n\t\t\tstatus={status}\n\t\t\trequired={required}\n\t\t>\n\t\t\t<div\n\t\t\t\tclassName={classNames(\"i-input-item\", {\n\t\t\t\t\t[`i-input-${status}`]: status !== \"normal\",\n\t\t\t\t\t\"i-input-borderless\": !border,\n\t\t\t\t\t\"i-input-underline\": underline,\n\t\t\t\t})}\n\t\t\t>\n\t\t\t\t{prepend && <div className='i-input-prepend'>{prepend}</div>}\n\n\t\t\t\t<input {...inputProps} />\n\n\t\t\t\t{maxLength && inputValue?.length > 0 && (\n\t\t\t\t\t<span className='color-8 pr-4 font-sm'>\n\t\t\t\t\t\t{inputValue.length} / {maxLength}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\n\t\t\t\t<Helpericon\n\t\t\t\t\tactive={!!clearable || showHelper}\n\t\t\t\t\ticon={HelperIcon}\n\t\t\t\t\tonClick={handleHelperClick}\n\t\t\t\t/>\n\n\t\t\t\t{append && <div className='i-input-append'>{append}</div>}\n\t\t\t</div>\n\t\t</InputContainer>\n\t);\n}) as CompositionInput;\n\nInput.Textarea = Textarea;\nInput.Number = Number;\nInput.Range = Range;\n\nexport default Input;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}