@flatbiz/antd 4.5.55 → 4.5.56

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 (242) hide show
  1. package/esm/ace-editor-groovy/index.js +1 -1
  2. package/esm/ace-editor-groovy/index.js.map +1 -1
  3. package/esm/ace-editor-java/index.js +1 -1
  4. package/esm/ace-editor-java/index.js.map +1 -1
  5. package/esm/ace-editor-json/index.js +1 -1
  6. package/esm/ace-editor-json/index.js.map +1 -1
  7. package/esm/ace-editor-mysql/index.js +1 -1
  8. package/esm/ace-editor-mysql/index.js.map +1 -1
  9. package/esm/ace-editor-xml/index.js +1 -1
  10. package/esm/ace-editor-xml/index.js.map +1 -1
  11. package/esm/anchor-steps/index.js +1 -1
  12. package/esm/anchor-steps/index.js.map +1 -1
  13. package/esm/bootstrap/index.js +1 -1
  14. package/esm/bootstrap/index.js.map +1 -1
  15. package/esm/box-grid/index.js +1 -1
  16. package/esm/box-grid/index.js.map +1 -1
  17. package/esm/button-operate/index.js +1 -1
  18. package/esm/button-operate/index.js.map +1 -1
  19. package/esm/button-wrapper/index.js +1 -1
  20. package/esm/button-wrapper/index.js.map +1 -1
  21. package/esm/card-layout/index.js +1 -1
  22. package/esm/card-layout/index.js.map +1 -1
  23. package/esm/cascader-wrapper/index.js +1 -1
  24. package/esm/cascader-wrapper/index.js.map +1 -1
  25. package/esm/check-list/index.js +1 -1
  26. package/esm/check-list/index.js.map +1 -1
  27. package/esm/checkbox-wrapper/index.js +1 -1
  28. package/esm/checkbox-wrapper/index.js.map +1 -1
  29. package/esm/code-render/index.css +1 -0
  30. package/esm/code-render/index.js +5 -0
  31. package/esm/code-render/index.js.map +1 -0
  32. package/esm/color-picker-wrapper/index.css +1 -1
  33. package/esm/color-picker-wrapper/index.js +1 -1
  34. package/esm/color-picker-wrapper/index.js.map +1 -1
  35. package/esm/config-provider-wrapper/index.js +1 -1
  36. package/esm/copy-wrapper/index.js +1 -1
  37. package/esm/copy-wrapper/index.js.map +1 -1
  38. package/esm/date-picker-wrapper/index.js +1 -1
  39. package/esm/date-picker-wrapper/index.js.map +1 -1
  40. package/esm/date-range-picker-wrapper/index.js +1 -1
  41. package/esm/date-range-picker-wrapper/index.js.map +1 -1
  42. package/esm/date-range-picker-wrapper-form-item/index.js +1 -1
  43. package/esm/date-range-picker-wrapper-form-item/index.js.map +1 -1
  44. package/esm/delete-node/index.js +1 -1
  45. package/esm/delete-node/index.js.map +1 -1
  46. package/esm/dialog-alert/index.js +1 -1
  47. package/esm/dialog-confirm/index.js +1 -1
  48. package/esm/dialog-drag-modal/index.js +1 -1
  49. package/esm/dialog-drag-modal/index.js.map +1 -1
  50. package/esm/dialog-drawer/index.js +1 -1
  51. package/esm/dialog-drawer/index.js.map +1 -1
  52. package/esm/dialog-drawer-content/index.js +1 -1
  53. package/esm/dialog-drawer-content/index.js.map +1 -1
  54. package/esm/dialog-loading/index.js +1 -1
  55. package/esm/dialog-loading/index.js.map +1 -1
  56. package/esm/dialog-modal/index.js +1 -1
  57. package/esm/dialog-modal/index.js.map +1 -1
  58. package/esm/dialog-preview-image/index.js +1 -1
  59. package/esm/dialog-preview-image/index.js.map +1 -1
  60. package/esm/drag-collapse/index.js +1 -1
  61. package/esm/drag-collapse/index.js.map +1 -1
  62. package/esm/drag-collapse-form-list/index.js +1 -1
  63. package/esm/drag-collapse-form-list/index.js.map +1 -1
  64. package/esm/drag-editable-card/index.js +1 -1
  65. package/esm/drag-editable-card/index.js.map +1 -1
  66. package/esm/drag-editable-table/index.js +1 -1
  67. package/esm/drag-editable-table/index.js.map +1 -1
  68. package/esm/drag-editable-table-pro/index.js +1 -1
  69. package/esm/drag-editable-table-pro/index.js.map +1 -1
  70. package/esm/drag-form-list/index.js +1 -1
  71. package/esm/drag-form-list/index.js.map +1 -1
  72. package/esm/drag-table/index.js +1 -1
  73. package/esm/drag-table/index.js.map +1 -1
  74. package/esm/drawer-wrapper/index.js +1 -1
  75. package/esm/drawer-wrapper/index.js.map +1 -1
  76. package/esm/dropdown-menu-wrapper/index.js +1 -1
  77. package/esm/dropdown-menu-wrapper/index.js.map +1 -1
  78. package/esm/easy-form/index.js +1 -1
  79. package/esm/easy-form/index.js.map +1 -1
  80. package/esm/easy-table/index.js +1 -1
  81. package/esm/easy-table/index.js.map +1 -1
  82. package/esm/editable-card/index.js +1 -1
  83. package/esm/editable-card/index.js.map +1 -1
  84. package/esm/editable-field/index.js +1 -1
  85. package/esm/editable-field/index.js.map +1 -1
  86. package/esm/editable-table/index.js +1 -1
  87. package/esm/editable-table/index.js.map +1 -1
  88. package/esm/editable-table-pro/index.js +1 -1
  89. package/esm/editable-table-pro/index.js.map +1 -1
  90. package/esm/editor-wrapper/index.js +1 -1
  91. package/esm/editor-wrapper/index.js.map +1 -1
  92. package/esm/fba-app/index.js +1 -1
  93. package/esm/fba-app/index.js.map +1 -1
  94. package/esm/fba-hooks/index.js +1 -1
  95. package/esm/fba-hooks/index.js.map +1 -1
  96. package/esm/fba-utils/index.js +1 -1
  97. package/esm/fba-utils/index.js.map +1 -1
  98. package/esm/file-export/index.js +1 -1
  99. package/esm/file-export/index.js.map +1 -1
  100. package/esm/file-import/index.js +1 -1
  101. package/esm/file-import/index.js.map +1 -1
  102. package/esm/file-select/index.js +1 -1
  103. package/esm/file-select/index.js.map +1 -1
  104. package/esm/flex-layout/index.js +1 -1
  105. package/esm/flex-layout/index.js.map +1 -1
  106. package/esm/form-grid/index.js +1 -1
  107. package/esm/form-grid/index.js.map +1 -1
  108. package/esm/form-item-group/index.js +1 -1
  109. package/esm/form-item-group/index.js.map +1 -1
  110. package/esm/form-item-text/index.js +1 -1
  111. package/esm/form-item-text/index.js.map +1 -1
  112. package/esm/form-item-wrapper/index.js +1 -1
  113. package/esm/form-item-wrapper/index.js.map +1 -1
  114. package/esm/form-list-wrapper/index.js +1 -1
  115. package/esm/form-list-wrapper/index.js.map +1 -1
  116. package/esm/form-wrapper/index.js +1 -1
  117. package/esm/form-wrapper/index.js.map +1 -1
  118. package/esm/full-screen/index.js +1 -1
  119. package/esm/full-screen/index.js.map +1 -1
  120. package/esm/icon-wrapper/index.js +1 -1
  121. package/esm/icon-wrapper/index.js.map +1 -1
  122. package/esm/{index-83bede1b.js → index-853b36e6.js} +2 -2
  123. package/esm/{index-83bede1b.js.map → index-853b36e6.js.map} +1 -1
  124. package/esm/index.js +2 -1
  125. package/esm/input-search-wrapper/index.js +1 -1
  126. package/esm/input-search-wrapper/index.js.map +1 -1
  127. package/esm/input-text-area-wrapper/index.js +1 -1
  128. package/esm/input-text-area-wrapper/index.js.map +1 -1
  129. package/esm/input-wrapper/index.js +1 -1
  130. package/esm/input-wrapper/index.js.map +1 -1
  131. package/esm/json-editor/index.js +1 -1
  132. package/esm/json-editor/index.js.map +1 -1
  133. package/esm/label-value-layout/index.js +1 -1
  134. package/esm/label-value-layout/index.js.map +1 -1
  135. package/esm/label-value-render/index.js +1 -1
  136. package/esm/label-value-render/index.js.map +1 -1
  137. package/esm/local-loading/index.js +1 -1
  138. package/esm/local-loading/index.js.map +1 -1
  139. package/esm/mention-editor/index.js +1 -1
  140. package/esm/mention-editor/index.js.map +1 -1
  141. package/esm/mentions-wrapper/index.js +1 -1
  142. package/esm/mentions-wrapper/index.js.map +1 -1
  143. package/esm/modal-action/index.js +1 -1
  144. package/esm/modal-action/index.js.map +1 -1
  145. package/esm/modal-wrapper/index.js +1 -1
  146. package/esm/modal-wrapper/index.js.map +1 -1
  147. package/esm/number-range-form-item/index.js +1 -1
  148. package/esm/number-range-form-item/index.js.map +1 -1
  149. package/esm/pdf/index.js +1 -1
  150. package/esm/pdf/index.js.map +1 -1
  151. package/esm/pdf-preview/index.js +1 -1
  152. package/esm/pdf-preview/index.js.map +1 -1
  153. package/esm/radio-group-wrapper/index.js +1 -1
  154. package/esm/radio-group-wrapper/index.js.map +1 -1
  155. package/esm/relation-tree/index.js +1 -1
  156. package/esm/relation-tree/index.js.map +1 -1
  157. package/esm/request-status/index.js +1 -1
  158. package/esm/request-status/index.js.map +1 -1
  159. package/esm/resizable-drawer/index.js +1 -1
  160. package/esm/resizable-drawer/index.js.map +1 -1
  161. package/esm/rich-text-editor/index.js +1 -1
  162. package/esm/rich-text-editor/index.js.map +1 -1
  163. package/esm/rich-text-viewer/index.js +1 -1
  164. package/esm/rich-text-viewer/index.js.map +1 -1
  165. package/esm/roll-location-center/index.js +1 -1
  166. package/esm/roll-location-center/index.js.map +1 -1
  167. package/esm/roll-location-in-view/index.js +1 -1
  168. package/esm/roll-location-in-view/index.js.map +1 -1
  169. package/esm/rule-describe/index.js +1 -1
  170. package/esm/rule-describe/index.js.map +1 -1
  171. package/esm/search-form/index.js +1 -1
  172. package/esm/search-form/index.js.map +1 -1
  173. package/esm/search-menu/index.js +1 -1
  174. package/esm/search-menu/index.js.map +1 -1
  175. package/esm/selector-wrapper/index.js +1 -1
  176. package/esm/selector-wrapper/index.js.map +1 -1
  177. package/esm/selector-wrapper-search/index.js +1 -1
  178. package/esm/selector-wrapper-search/index.js.map +1 -1
  179. package/esm/selector-wrapper-simple/index.js +1 -1
  180. package/esm/selector-wrapper-simple/index.js.map +1 -1
  181. package/esm/simple-layout/index.js +1 -1
  182. package/esm/simple-layout/index.js.map +1 -1
  183. package/esm/sms-count-down/index.js +1 -1
  184. package/esm/sms-count-down/index.js.map +1 -1
  185. package/esm/split-wrapper/index.js +1 -1
  186. package/esm/split-wrapper/index.js.map +1 -1
  187. package/esm/styles/index.css +1 -1
  188. package/esm/svg-http-view/index.js +1 -1
  189. package/esm/svg-http-view/index.js.map +1 -1
  190. package/esm/switch-confirm-wrapper/index.js +1 -1
  191. package/esm/switch-confirm-wrapper/index.js.map +1 -1
  192. package/esm/switch-wrapper/index.js +1 -1
  193. package/esm/switch-wrapper/index.js.map +1 -1
  194. package/esm/table-cell-render/index.js +1 -1
  195. package/esm/table-cell-render/index.js.map +1 -1
  196. package/esm/table-scrollbar/index.js +1 -1
  197. package/esm/table-scrollbar/index.js.map +1 -1
  198. package/esm/tabs-sticky/index.js +1 -1
  199. package/esm/tabs-sticky/index.js.map +1 -1
  200. package/esm/tabs-wrapper/index.js +1 -1
  201. package/esm/tabs-wrapper/index.js.map +1 -1
  202. package/esm/tag-group/index.js +1 -1
  203. package/esm/tag-group/index.js.map +1 -1
  204. package/esm/tag-list-render/index.js +1 -1
  205. package/esm/tag-list-render/index.js.map +1 -1
  206. package/esm/tag-list-select/index.js +1 -1
  207. package/esm/tag-list-select/index.js.map +1 -1
  208. package/esm/tag-wrapper/index.js +1 -1
  209. package/esm/tag-wrapper/index.js.map +1 -1
  210. package/esm/text-css-ellipsis/index.js +1 -1
  211. package/esm/text-css-ellipsis/index.js.map +1 -1
  212. package/esm/text-overflow/index.js +1 -1
  213. package/esm/text-overflow/index.js.map +1 -1
  214. package/esm/text-overflow-render/index.js +1 -1
  215. package/esm/text-symbol-wrapper/index.js +1 -1
  216. package/esm/text-symbol-wrapper/index.js.map +1 -1
  217. package/esm/time-ea73b2fb.js +3 -0
  218. package/esm/{time-53b3f55f.js.map → time-ea73b2fb.js.map} +1 -1
  219. package/esm/time-picker-wrapper/index.js +1 -1
  220. package/esm/time-picker-wrapper/index.js.map +1 -1
  221. package/esm/time-range-picker-wrapper/index.js +1 -1
  222. package/esm/time-range-picker-wrapper/index.js.map +1 -1
  223. package/esm/time-range-picker-wrapper-form-item/index.js +1 -1
  224. package/esm/time-range-picker-wrapper-form-item/index.js.map +1 -1
  225. package/esm/tree-modal/index.js +1 -1
  226. package/esm/tree-modal/index.js.map +1 -1
  227. package/esm/tree-modal-selector/index.js +1 -1
  228. package/esm/tree-modal-selector/index.js.map +1 -1
  229. package/esm/tree-selector-wrapper/index.js +1 -1
  230. package/esm/tree-selector-wrapper/index.js.map +1 -1
  231. package/esm/tree-wrapper/index.js +1 -1
  232. package/esm/tree-wrapper/index.js.map +1 -1
  233. package/esm/upload-wrapper/index.js +1 -1
  234. package/esm/upload-wrapper/index.js.map +1 -1
  235. package/esm/use-responsive-point-1e6d93d9.js +3 -0
  236. package/esm/{use-responsive-point-21b8c601.js.map → use-responsive-point-1e6d93d9.js.map} +1 -1
  237. package/esm/x-mind-preview/index.js +1 -1
  238. package/esm/x-mind-preview/index.js.map +1 -1
  239. package/index.d.ts +43 -4
  240. package/package.json +4 -5
  241. package/esm/time-53b3f55f.js +0 -3
  242. package/esm/use-responsive-point-21b8c601.js +0 -3
@@ -3,5 +3,5 @@ import './../error-boundary-wrapper/index.css';
3
3
  import './../flex-layout/index.css';
4
4
  import './index.css';
5
5
  /*! @flatjs/forge MIT @flatbiz/antd */
6
- import{a as e,_ as o}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{classNames as t}from"@dimjs/utils/cjs/class-names";import{hooks as r}from"@wove/react/cjs/hooks";import{isObject as n}from"@dimjs/lang/cjs/is-object";import{isUndefinedOrNull as i}from"@flatbiz/utils";import{useState as a,useRef as s,useMemo as l}from"react";import u from"react-ace";import{ErrorBoundaryWrapper as m}from"../error-boundary-wrapper/index.js";import"ace-builds/src-noconflict/ext-language_tools";import"ace-builds/src-noconflict/mode-groovy";import"ace-builds/src-noconflict/snippets/groovy";import{jsx as c}from"react/jsx-runtime";import"antd";import"../flex-layout/index.js";var p=["value","onChange","height","autoCompleterList","onLoad"];var f=function f(d){var h=d.value,v=d.onChange,g=d.height,b=d.autoCompleterList,j=d.onLoad,y=e(d,p);var w=i(g)?"100%":g;var C=a(Date.now()),L=C[0],x=C[1];var N=s();var S=l((function(){if(n(h)){return JSON.stringify(h,null,2)}return h}),[h]);var k=r.useCallbackRef((function(e,o,t,r,n){n(null,b==null?void 0:b.map((function(e){return{name:e.name,value:e.name,meta:e.desc}})))}));var z=function e(o){N.current=o;var t=o.completers.findIndex((function(e){return e.id==="custom"}));if(t>=0){o.completers[t]={getCompletions:k,id:"custom"}}else{o.completers.push({getCompletions:k,id:"custom"})}j==null||j(o)};return c("div",{className:t("ace-editor-groovy",d.className),style:o({height:w},d.style),children:c(m,{onRenderReset:function e(){v==null||v(undefined);x(Date.now())},children:c(u,o({fontSize:14,showPrintMargin:true,showGutter:true,highlightActiveLine:true,height:"100%",width:"auto",placeholder:"请输入"},y,{setOptions:o({useWorker:false,enableBasicAutocompletion:false,enableLiveAutocompletion:true,enableSnippets:false,showLineNumbers:true,tabSize:2},y.setOptions),mode:"groovy",onLoad:z,onChange:v,value:S}))})},L)};export{f as AceEditorGroovy};
6
+ import{a as e,_ as o}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{classNames as t}from"@dimjs/utils/cjs/class-names";import{hooks as r}from"@wove/react/cjs/hooks";import{isObject as n}from"@dimjs/lang/cjs/is-object";import{isUndefinedOrNull as i}from"@flatbiz/utils";import{useState as a,useRef as s,useMemo as l}from"react";import u from"react-ace";import{ErrorBoundaryWrapper as m}from"../error-boundary-wrapper/index.js";import"ace-builds/src-noconflict/ext-language_tools";import"ace-builds/src-noconflict/mode-groovy";import"ace-builds/src-noconflict/snippets/groovy";import{jsx as c}from"react/jsx-runtime";import"antd";import"../flex-layout/index.js";var p=["value","onChange","height","autoCompleterList","onLoad"];var f=function f(d){var h=d.value,v=d.onChange,g=d.height,b=d.autoCompleterList,j=d.onLoad,y=e(d,p);var w=i(g)?"100%":g;var C=a(Date.now()),L=C[0],x=C[1];var N=s();var S=l(function(){if(n(h)){return JSON.stringify(h,null,2)}return h},[h]);var k=r.useCallbackRef(function(e,o,t,r,n){n(null,b==null?void 0:b.map(function(e){return{name:e.name,value:e.name,meta:e.desc}}))});var z=function e(o){N.current=o;var t=o.completers.findIndex(function(e){return e.id==="custom"});if(t>=0){o.completers[t]={getCompletions:k,id:"custom"}}else{o.completers.push({getCompletions:k,id:"custom"})}j==null||j(o)};return c("div",{className:t("ace-editor-groovy",d.className),style:o({height:w},d.style),children:c(m,{onRenderReset:function e(){v==null||v(undefined);x(Date.now())},children:c(u,o({fontSize:14,showPrintMargin:true,showGutter:true,highlightActiveLine:true,height:"100%",width:"auto",placeholder:"请输入"},y,{setOptions:o({useWorker:false,enableBasicAutocompletion:false,enableLiveAutocompletion:true,enableSnippets:false,showLineNumbers:true,tabSize:2},y.setOptions),mode:"groovy",onLoad:z,onChange:v,value:S}))})},L)};export{f as AceEditorGroovy};
7
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/ace-editor-groovy/editor.tsx"],"sourcesContent":["import { isObject } from '@dimjs/lang';\nimport { isUndefinedOrNull, type TAny, type TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\n\nimport { useMemo, useRef, useState } from 'react';\nimport Ace, { type IAceEditorProps } from 'react-ace';\nimport { ErrorBoundaryWrapper } from '../error-boundary-wrapper';\n\nimport { classNames } from '@dimjs/utils';\nimport 'ace-builds/src-noconflict/ext-language_tools';\nimport 'ace-builds/src-noconflict/mode-groovy';\nimport 'ace-builds/src-noconflict/snippets/groovy';\n\nexport type AceEditorGroovyProps = Omit<IAceEditorProps, 'mode' | 'value' | 'onChange' | 'theme'> & {\n /** 编辑器高度,默认值:100%,可输入值例如 300px、100% */\n height?: string;\n value?: string | TPlainObject | TPlainObject[];\n onChange?: (value?: string | TPlainObject | TPlainObject[]) => void;\n /** 配置输入自动提示关键字 */\n autoCompleterList?: { name: string; desc?: string }[];\n /**\n * 编辑器主题配置,例如:github、terminal、xcode\n * ```\n * 1. 顶部引入 import 'ace-builds/src-noconflict/theme-xxxx';\n * 2. 配置 theme = xxxx\n * ```\n */\n theme?: string;\n};\n\n/**\n * groovy编辑器\n * ```\n * 1. 受控组件,需要使用value、onChange配合显示数据\n * 2. heigth 默认为100%,如果外层无高度,需要自定义设置height属性\n * 3. 通过 autoCompleterList 配置自动提示关键字\n * 4. 通过 hiddenVerifyBtn、hiddenFormatterBtn可隐藏底部操作按钮\n * 5. 通过 theme 配置编辑器主题,例如:\n * 5.1 顶部引入 import 'ace-builds/src-noconflict/theme-xxxx';\n * 5.2 配置 theme = xxxx\n * ```\n */\nexport const AceEditorGroovy = (props: AceEditorGroovyProps) => {\n const { value, onChange, height, autoCompleterList, onLoad, ...otherProps } = props;\n const heightFt = isUndefinedOrNull(height) ? '100%' : height;\n\n const [rootNodekey, setRootNodekey] = useState(Date.now());\n\n const editorRef = useRef<TAny>();\n\n const valueNew = useMemo(() => {\n if (isObject(value)) {\n return JSON.stringify(value, null, 2);\n }\n return value as string | undefined;\n }, [value]);\n\n const getCompletions = hooks.useCallbackRef((_a, _b, _c, _d, callback) => {\n callback(\n null,\n autoCompleterList?.map((item) => ({\n name: item.name,\n value: item.name,\n // score: 100,\n meta: item.desc,\n })),\n );\n });\n\n const onLoadHandle = (editor) => {\n editorRef.current = editor;\n /** 向编辑器中添加自动补全列表 */\n const findIndex = editor.completers.findIndex((item) => item.id === 'custom');\n if (findIndex >= 0) {\n editor.completers[findIndex] = { getCompletions, id: 'custom' };\n } else {\n editor.completers.push({ getCompletions, id: 'custom' });\n }\n onLoad?.(editor);\n };\n\n return (\n <div\n key={rootNodekey}\n className={classNames('ace-editor-groovy', props.className)}\n style={{ height: heightFt, ...props.style }}\n >\n <ErrorBoundaryWrapper\n onRenderReset={() => {\n onChange?.(undefined);\n setRootNodekey(Date.now());\n }}\n >\n <Ace\n fontSize={14}\n showPrintMargin={true}\n showGutter={true}\n highlightActiveLine={true}\n height=\"100%\"\n width=\"auto\"\n placeholder=\"请输入\"\n // theme={'github'}\n {...otherProps}\n setOptions={{\n useWorker: false,\n enableBasicAutocompletion: false,\n enableLiveAutocompletion: true,\n enableSnippets: false,\n showLineNumbers: true,\n tabSize: 2,\n ...otherProps.setOptions,\n }}\n mode=\"groovy\"\n onLoad={onLoadHandle}\n onChange={onChange}\n value={valueNew}\n />\n </ErrorBoundaryWrapper>\n </div>\n );\n};\n"],"names":["AceEditorGroovy","props","value","onChange","height","autoCompleterList","onLoad","otherProps","_objectWithoutPropertiesLoose","_excluded","heightFt","isUndefinedOrNull","_useState","useState","Date","now","rootNodekey","setRootNodekey","editorRef","useRef","valueNew","useMemo","_isObject","JSON","stringify","getCompletions","_hooks","useCallbackRef","_a","_b","_c","_d","callback","map","item","name","meta","desc","onLoadHandle","editor","current","findIndex","completers","id","push","_jsx","className","_classNames","style","_extends","children","ErrorBoundaryWrapper","onRenderReset","undefined","Ace","fontSize","showPrintMargin","showGutter","highlightActiveLine","width","placeholder","setOptions","useWorker","enableBasicAutocompletion","enableLiveAutocompletion","enableSnippets","showLineNumbers","tabSize","mode"],"mappings":";guBA0CaA,EAAkB,SAAlBA,EAAmBC,GAC9B,IAAQC,EAAsED,EAAtEC,MAAOC,EAA+DF,EAA/DE,SAAUC,EAAqDH,EAArDG,OAAQC,EAA6CJ,EAA7CI,kBAAmBC,EAA0BL,EAA1BK,OAAWC,EAAUC,EAAKP,EAAKQ,GACnF,IAAMC,EAAWC,EAAkBP,GAAU,OAASA,EAEtD,IAAAQ,EAAsCC,EAASC,KAAKC,OAA7CC,EAAWJ,EAAA,GAAEK,EAAcL,EAAA,GAElC,IAAMM,EAAYC,IAElB,IAAMC,EAAWC,GAAQ,WACvB,GAAIC,EAASpB,GAAQ,CACnB,OAAOqB,KAAKC,UAAUtB,EAAO,KAAM,EACrC,CACA,OAAOA,CACT,GAAG,CAACA,IAEJ,IAAMuB,EAAiBC,EAAMC,gBAAe,SAACC,EAAIC,EAAIC,EAAIC,EAAIC,GAC3DA,EACE,KACA3B,GAAiB,UAAA,EAAjBA,EAAmB4B,KAAI,SAACC,GAAI,MAAM,CAChCC,KAAMD,EAAKC,KACXjC,MAAOgC,EAAKC,KAEZC,KAAMF,EAAKG,KACX,IAEN,IAEA,IAAMC,EAAe,SAAfA,EAAgBC,GACpBrB,EAAUsB,QAAUD,EAEpB,IAAME,EAAYF,EAAOG,WAAWD,WAAU,SAACP,GAAI,OAAKA,EAAKS,KAAO,YACpE,GAAIF,GAAa,EAAG,CAClBF,EAAOG,WAAWD,GAAa,CAAEhB,eAAAA,EAAgBkB,GAAI,SACvD,KAAO,CACLJ,EAAOG,WAAWE,KAAK,CAAEnB,eAAAA,EAAgBkB,GAAI,UAC/C,CACArC,GAAAA,MAAAA,EAASiC,IAGX,OACEM,EAAA,MAAA,CAEEC,UAAWC,EAAW,oBAAqB9C,EAAM6C,WACjDE,MAAKC,EAAA,CAAI7C,OAAQM,GAAaT,EAAM+C,OAAQE,SAE5CL,EAACM,EAAoB,CACnBC,cAAe,SAAfA,IACEjD,GAAAA,MAAAA,EAAWkD,WACXpC,EAAeH,KAAKC,MACpB,EAAAmC,SAEFL,EAACS,EAAGL,EAAA,CACFM,SAAU,GACVC,gBAAiB,KACjBC,WAAY,KACZC,oBAAqB,KACrBtD,OAAO,OACPuD,MAAM,OACNC,YAAY,OAERrD,EAAU,CACdsD,WAAUZ,EAAA,CACRa,UAAW,MACXC,0BAA2B,MAC3BC,yBAA0B,KAC1BC,eAAgB,MAChBC,gBAAiB,KACjBC,QAAS,GACN5D,EAAWsD,YAEhBO,KAAK,SACL9D,OAAQgC,EACRnC,SAAUA,EACVD,MAAOkB,QAhCNJ,EAqCX"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/ace-editor-groovy/editor.tsx"],"sourcesContent":["import { isObject } from '@dimjs/lang';\nimport { isUndefinedOrNull, type TAny, type TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\n\nimport { useMemo, useRef, useState } from 'react';\nimport Ace, { type IAceEditorProps } from 'react-ace';\nimport { ErrorBoundaryWrapper } from '../error-boundary-wrapper';\n\nimport { classNames } from '@dimjs/utils';\nimport 'ace-builds/src-noconflict/ext-language_tools';\nimport 'ace-builds/src-noconflict/mode-groovy';\nimport 'ace-builds/src-noconflict/snippets/groovy';\n\nexport type AceEditorGroovyProps = Omit<IAceEditorProps, 'mode' | 'value' | 'onChange' | 'theme'> & {\n /** 编辑器高度,默认值:100%,可输入值例如 300px、100% */\n height?: string;\n value?: string | TPlainObject | TPlainObject[];\n onChange?: (value?: string | TPlainObject | TPlainObject[]) => void;\n /** 配置输入自动提示关键字 */\n autoCompleterList?: { name: string; desc?: string }[];\n /**\n * 编辑器主题配置,例如:github、terminal、xcode\n * ```\n * 1. 顶部引入 import 'ace-builds/src-noconflict/theme-xxxx';\n * 2. 配置 theme = xxxx\n * ```\n */\n theme?: string;\n};\n\n/**\n * groovy编辑器\n * ```\n * 1. 受控组件,需要使用value、onChange配合显示数据\n * 2. heigth 默认为100%,如果外层无高度,需要自定义设置height属性\n * 3. 通过 autoCompleterList 配置自动提示关键字\n * 4. 通过 hiddenVerifyBtn、hiddenFormatterBtn可隐藏底部操作按钮\n * 5. 通过 theme 配置编辑器主题,例如:\n * 5.1 顶部引入 import 'ace-builds/src-noconflict/theme-xxxx';\n * 5.2 配置 theme = xxxx\n * ```\n */\nexport const AceEditorGroovy = (props: AceEditorGroovyProps) => {\n const { value, onChange, height, autoCompleterList, onLoad, ...otherProps } = props;\n const heightFt = isUndefinedOrNull(height) ? '100%' : height;\n\n const [rootNodekey, setRootNodekey] = useState(Date.now());\n\n const editorRef = useRef<TAny>();\n\n const valueNew = useMemo(() => {\n if (isObject(value)) {\n return JSON.stringify(value, null, 2);\n }\n return value as string | undefined;\n }, [value]);\n\n const getCompletions = hooks.useCallbackRef((_a, _b, _c, _d, callback) => {\n callback(\n null,\n autoCompleterList?.map((item) => ({\n name: item.name,\n value: item.name,\n // score: 100,\n meta: item.desc,\n })),\n );\n });\n\n const onLoadHandle = (editor) => {\n editorRef.current = editor;\n /** 向编辑器中添加自动补全列表 */\n const findIndex = editor.completers.findIndex((item) => item.id === 'custom');\n if (findIndex >= 0) {\n editor.completers[findIndex] = { getCompletions, id: 'custom' };\n } else {\n editor.completers.push({ getCompletions, id: 'custom' });\n }\n onLoad?.(editor);\n };\n\n return (\n <div\n key={rootNodekey}\n className={classNames('ace-editor-groovy', props.className)}\n style={{ height: heightFt, ...props.style }}\n >\n <ErrorBoundaryWrapper\n onRenderReset={() => {\n onChange?.(undefined);\n setRootNodekey(Date.now());\n }}\n >\n <Ace\n fontSize={14}\n showPrintMargin={true}\n showGutter={true}\n highlightActiveLine={true}\n height=\"100%\"\n width=\"auto\"\n placeholder=\"请输入\"\n // theme={'github'}\n {...otherProps}\n setOptions={{\n useWorker: false,\n enableBasicAutocompletion: false,\n enableLiveAutocompletion: true,\n enableSnippets: false,\n showLineNumbers: true,\n tabSize: 2,\n ...otherProps.setOptions,\n }}\n mode=\"groovy\"\n onLoad={onLoadHandle}\n onChange={onChange}\n value={valueNew}\n />\n </ErrorBoundaryWrapper>\n </div>\n );\n};\n"],"names":["AceEditorGroovy","props","value","onChange","height","autoCompleterList","onLoad","otherProps","_objectWithoutPropertiesLoose","_excluded","heightFt","isUndefinedOrNull","_useState","useState","Date","now","rootNodekey","setRootNodekey","editorRef","useRef","valueNew","useMemo","_isObject","JSON","stringify","getCompletions","_hooks","useCallbackRef","_a","_b","_c","_d","callback","map","item","name","meta","desc","onLoadHandle","editor","current","findIndex","completers","id","push","_jsx","className","_classNames","style","_extends","children","ErrorBoundaryWrapper","onRenderReset","undefined","Ace","fontSize","showPrintMargin","showGutter","highlightActiveLine","width","placeholder","setOptions","useWorker","enableBasicAutocompletion","enableLiveAutocompletion","enableSnippets","showLineNumbers","tabSize","mode"],"mappings":";guBA0CaA,EAAkB,SAAlBA,EAAmBC,GAC9B,IAAQC,EAAsED,EAAtEC,MAAOC,EAA+DF,EAA/DE,SAAUC,EAAqDH,EAArDG,OAAQC,EAA6CJ,EAA7CI,kBAAmBC,EAA0BL,EAA1BK,OAAWC,EAAUC,EAAKP,EAAKQ,GACnF,IAAMC,EAAWC,EAAkBP,GAAU,OAASA,EAEtD,IAAAQ,EAAsCC,EAASC,KAAKC,OAA7CC,EAAWJ,EAAA,GAAEK,EAAcL,EAAA,GAElC,IAAMM,EAAYC,IAElB,IAAMC,EAAWC,EAAQ,WACvB,GAAIC,EAASpB,GAAQ,CACnB,OAAOqB,KAAKC,UAAUtB,EAAO,KAAM,EACrC,CACA,OAAOA,CACT,EAAG,CAACA,IAEJ,IAAMuB,EAAiBC,EAAMC,eAAe,SAACC,EAAIC,EAAIC,EAAIC,EAAIC,GAC3DA,EACE,KACA3B,GAAiB,UAAA,EAAjBA,EAAmB4B,IAAI,SAACC,GAAI,MAAM,CAChCC,KAAMD,EAAKC,KACXjC,MAAOgC,EAAKC,KAEZC,KAAMF,EAAKG,KACX,GAEN,GAEA,IAAMC,EAAe,SAAfA,EAAgBC,GACpBrB,EAAUsB,QAAUD,EAEpB,IAAME,EAAYF,EAAOG,WAAWD,UAAU,SAACP,GAAI,OAAKA,EAAKS,KAAO,WACpE,GAAIF,GAAa,EAAG,CAClBF,EAAOG,WAAWD,GAAa,CAAEhB,eAAAA,EAAgBkB,GAAI,SACvD,KAAO,CACLJ,EAAOG,WAAWE,KAAK,CAAEnB,eAAAA,EAAgBkB,GAAI,UAC/C,CACArC,GAAAA,MAAAA,EAASiC,IAGX,OACEM,EAAA,MAAA,CAEEC,UAAWC,EAAW,oBAAqB9C,EAAM6C,WACjDE,MAAKC,EAAA,CAAI7C,OAAQM,GAAaT,EAAM+C,OAAQE,SAE5CL,EAACM,EAAoB,CACnBC,cAAe,SAAfA,IACEjD,GAAAA,MAAAA,EAAWkD,WACXpC,EAAeH,KAAKC,MACpB,EAAAmC,SAEFL,EAACS,EAAGL,EAAA,CACFM,SAAU,GACVC,gBAAiB,KACjBC,WAAY,KACZC,oBAAqB,KACrBtD,OAAO,OACPuD,MAAM,OACNC,YAAY,OAERrD,EAAU,CACdsD,WAAUZ,EAAA,CACRa,UAAW,MACXC,0BAA2B,MAC3BC,yBAA0B,KAC1BC,eAAgB,MAChBC,gBAAiB,KACjBC,QAAS,GACN5D,EAAWsD,YAEhBO,KAAK,SACL9D,OAAQgC,EACRnC,SAAUA,EACVD,MAAOkB,QAhCNJ,EAqCX"}
@@ -3,5 +3,5 @@ import './../error-boundary-wrapper/index.css';
3
3
  import './../flex-layout/index.css';
4
4
  import './index.css';
5
5
  /*! @flatjs/forge MIT @flatbiz/antd */
6
- import{a as e,_ as t}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{classNames as o}from"@dimjs/utils/cjs/class-names";import{hooks as r}from"@wove/react/cjs/hooks";import{isObject as n}from"@dimjs/lang/cjs/is-object";import{isUndefinedOrNull as a}from"@flatbiz/utils";import{useState as i,useRef as s,useMemo as l}from"react";import u from"react-ace";import{ErrorBoundaryWrapper as m}from"../error-boundary-wrapper/index.js";import"ace-builds/src-noconflict/ext-language_tools";import"ace-builds/src-noconflict/mode-java";import"ace-builds/src-noconflict/snippets/java";import{jsx as c}from"react/jsx-runtime";import"antd";import"../flex-layout/index.js";var p=["value","onChange","height","autoCompleterList","onLoad"];var f=function f(d){var h=d.value,v=d.onChange,g=d.height,j=d.autoCompleterList,b=d.onLoad,w=e(d,p);var C=a(g)?"100%":g;var L=i(Date.now()),x=L[0],y=L[1];var N=s();var S=l((function(){if(n(h)){return JSON.stringify(h,null,2)}return h}),[h]);var k=r.useCallbackRef((function(e,t,o,r,n){n(null,j==null?void 0:j.map((function(e){return{name:e.name,value:e.name,meta:e.desc}})))}));var z=function e(t){N.current=t;var o=t.completers.findIndex((function(e){return e.id==="custom"}));if(o>=0){t.completers[o]={getCompletions:k,id:"custom"}}else{t.completers.push({getCompletions:k,id:"custom"})}b==null||b(t)};return c("div",{className:o("ace-editor-java",d.className),style:t({height:C},d.style),children:c(m,{onRenderReset:function e(){v==null||v(undefined);y(Date.now())},children:c(u,t({fontSize:14,showPrintMargin:true,showGutter:true,highlightActiveLine:true,height:"100%",width:"auto",placeholder:"请输入"},w,{setOptions:t({useWorker:false,enableBasicAutocompletion:false,enableLiveAutocompletion:true,enableSnippets:false,showLineNumbers:true,tabSize:2},w.setOptions),mode:"java",onLoad:z,onChange:v,value:S}))})},x)};export{f as AceEditorJava};
6
+ import{a as e,_ as t}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{classNames as o}from"@dimjs/utils/cjs/class-names";import{hooks as r}from"@wove/react/cjs/hooks";import{isObject as n}from"@dimjs/lang/cjs/is-object";import{isUndefinedOrNull as a}from"@flatbiz/utils";import{useState as i,useRef as s,useMemo as l}from"react";import u from"react-ace";import{ErrorBoundaryWrapper as m}from"../error-boundary-wrapper/index.js";import"ace-builds/src-noconflict/ext-language_tools";import"ace-builds/src-noconflict/mode-java";import"ace-builds/src-noconflict/snippets/java";import{jsx as c}from"react/jsx-runtime";import"antd";import"../flex-layout/index.js";var p=["value","onChange","height","autoCompleterList","onLoad"];var f=function f(d){var h=d.value,v=d.onChange,g=d.height,j=d.autoCompleterList,b=d.onLoad,w=e(d,p);var C=a(g)?"100%":g;var L=i(Date.now()),x=L[0],y=L[1];var N=s();var S=l(function(){if(n(h)){return JSON.stringify(h,null,2)}return h},[h]);var k=r.useCallbackRef(function(e,t,o,r,n){n(null,j==null?void 0:j.map(function(e){return{name:e.name,value:e.name,meta:e.desc}}))});var z=function e(t){N.current=t;var o=t.completers.findIndex(function(e){return e.id==="custom"});if(o>=0){t.completers[o]={getCompletions:k,id:"custom"}}else{t.completers.push({getCompletions:k,id:"custom"})}b==null||b(t)};return c("div",{className:o("ace-editor-java",d.className),style:t({height:C},d.style),children:c(m,{onRenderReset:function e(){v==null||v(undefined);y(Date.now())},children:c(u,t({fontSize:14,showPrintMargin:true,showGutter:true,highlightActiveLine:true,height:"100%",width:"auto",placeholder:"请输入"},w,{setOptions:t({useWorker:false,enableBasicAutocompletion:false,enableLiveAutocompletion:true,enableSnippets:false,showLineNumbers:true,tabSize:2},w.setOptions),mode:"java",onLoad:z,onChange:v,value:S}))})},x)};export{f as AceEditorJava};
7
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/ace-editor-java/editor.tsx"],"sourcesContent":["import { isObject } from '@dimjs/lang';\nimport { isUndefinedOrNull, type TAny, type TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\n\nimport { useMemo, useRef, useState } from 'react';\nimport Ace, { type IAceEditorProps } from 'react-ace';\nimport { ErrorBoundaryWrapper } from '../error-boundary-wrapper';\n\nimport { classNames } from '@dimjs/utils';\nimport 'ace-builds/src-noconflict/ext-language_tools';\nimport 'ace-builds/src-noconflict/mode-java';\nimport 'ace-builds/src-noconflict/snippets/java';\n\nexport type AceEditorJavaProps = Omit<IAceEditorProps, 'mode' | 'value' | 'onChange' | 'theme'> & {\n /** 编辑器高度,默认值:100%,可输入值例如 300px、100% */\n height?: string;\n value?: string | TPlainObject | TPlainObject[];\n onChange?: (value?: string | TPlainObject | TPlainObject[]) => void;\n /** 配置输入自动提示关键字 */\n autoCompleterList?: { name: string; desc?: string }[];\n /**\n * 编辑器主题配置,例如:github、terminal、xcode\n * ```\n * 1. 顶部引入 import 'ace-builds/src-noconflict/theme-xxxx';\n * 2. 配置 theme = xxxx\n * ```\n */\n theme?: string;\n};\n\n/**\n * java编辑器\n * ```\n * 1. 受控组件,需要使用value、onChange配合显示数据\n * 2. heigth 默认为100%,如果外层无高度,需要自定义设置height属性\n * 3. 通过 autoCompleterList 配置自动提示关键字\n * 4. 通过 hiddenVerifyBtn、hiddenFormatterBtn可隐藏底部操作按钮\n * 5. 通过 theme 配置编辑器主题,例如:\n * 5.1 顶部引入 import 'ace-builds/src-noconflict/theme-xxxx';\n * 5.2 配置 theme = xxxx\n * ```\n */\nexport const AceEditorJava = (props: AceEditorJavaProps) => {\n const { value, onChange, height, autoCompleterList, onLoad, ...otherProps } = props;\n const heightFt = isUndefinedOrNull(height) ? '100%' : height;\n\n const [rootNodekey, setRootNodekey] = useState(Date.now());\n\n const editorRef = useRef<TAny>();\n\n const valueNew = useMemo(() => {\n if (isObject(value)) {\n return JSON.stringify(value, null, 2);\n }\n return value as string | undefined;\n }, [value]);\n\n const getCompletions = hooks.useCallbackRef((_a, _b, _c, _d, callback) => {\n callback(\n null,\n autoCompleterList?.map((item) => ({\n name: item.name,\n value: item.name,\n // score: 100,\n meta: item.desc,\n })),\n );\n });\n\n const onLoadHandle = (editor) => {\n editorRef.current = editor;\n /** 向编辑器中添加自动补全列表 */\n const findIndex = editor.completers.findIndex((item) => item.id === 'custom');\n if (findIndex >= 0) {\n editor.completers[findIndex] = { getCompletions, id: 'custom' };\n } else {\n editor.completers.push({ getCompletions, id: 'custom' });\n }\n onLoad?.(editor);\n };\n\n return (\n <div\n key={rootNodekey}\n className={classNames('ace-editor-java', props.className)}\n style={{ height: heightFt, ...props.style }}\n >\n <ErrorBoundaryWrapper\n onRenderReset={() => {\n onChange?.(undefined);\n setRootNodekey(Date.now());\n }}\n >\n <Ace\n fontSize={14}\n showPrintMargin={true}\n showGutter={true}\n highlightActiveLine={true}\n height=\"100%\"\n width=\"auto\"\n placeholder=\"请输入\"\n {...otherProps}\n setOptions={{\n useWorker: false,\n enableBasicAutocompletion: false,\n enableLiveAutocompletion: true,\n enableSnippets: false,\n showLineNumbers: true,\n tabSize: 2,\n ...otherProps.setOptions,\n }}\n mode=\"java\"\n onLoad={onLoadHandle}\n onChange={onChange}\n value={valueNew}\n />\n </ErrorBoundaryWrapper>\n </div>\n );\n};\n"],"names":["AceEditorJava","props","value","onChange","height","autoCompleterList","onLoad","otherProps","_objectWithoutPropertiesLoose","_excluded","heightFt","isUndefinedOrNull","_useState","useState","Date","now","rootNodekey","setRootNodekey","editorRef","useRef","valueNew","useMemo","_isObject","JSON","stringify","getCompletions","_hooks","useCallbackRef","_a","_b","_c","_d","callback","map","item","name","meta","desc","onLoadHandle","editor","current","findIndex","completers","id","push","_jsx","className","_classNames","style","_extends","children","ErrorBoundaryWrapper","onRenderReset","undefined","Ace","fontSize","showPrintMargin","showGutter","highlightActiveLine","width","placeholder","setOptions","useWorker","enableBasicAutocompletion","enableLiveAutocompletion","enableSnippets","showLineNumbers","tabSize","mode"],"mappings":";4tBA0CaA,EAAgB,SAAhBA,EAAiBC,GAC5B,IAAQC,EAAsED,EAAtEC,MAAOC,EAA+DF,EAA/DE,SAAUC,EAAqDH,EAArDG,OAAQC,EAA6CJ,EAA7CI,kBAAmBC,EAA0BL,EAA1BK,OAAWC,EAAUC,EAAKP,EAAKQ,GACnF,IAAMC,EAAWC,EAAkBP,GAAU,OAASA,EAEtD,IAAAQ,EAAsCC,EAASC,KAAKC,OAA7CC,EAAWJ,EAAA,GAAEK,EAAcL,EAAA,GAElC,IAAMM,EAAYC,IAElB,IAAMC,EAAWC,GAAQ,WACvB,GAAIC,EAASpB,GAAQ,CACnB,OAAOqB,KAAKC,UAAUtB,EAAO,KAAM,EACrC,CACA,OAAOA,CACT,GAAG,CAACA,IAEJ,IAAMuB,EAAiBC,EAAMC,gBAAe,SAACC,EAAIC,EAAIC,EAAIC,EAAIC,GAC3DA,EACE,KACA3B,GAAiB,UAAA,EAAjBA,EAAmB4B,KAAI,SAACC,GAAI,MAAM,CAChCC,KAAMD,EAAKC,KACXjC,MAAOgC,EAAKC,KAEZC,KAAMF,EAAKG,KACX,IAEN,IAEA,IAAMC,EAAe,SAAfA,EAAgBC,GACpBrB,EAAUsB,QAAUD,EAEpB,IAAME,EAAYF,EAAOG,WAAWD,WAAU,SAACP,GAAI,OAAKA,EAAKS,KAAO,YACpE,GAAIF,GAAa,EAAG,CAClBF,EAAOG,WAAWD,GAAa,CAAEhB,eAAAA,EAAgBkB,GAAI,SACvD,KAAO,CACLJ,EAAOG,WAAWE,KAAK,CAAEnB,eAAAA,EAAgBkB,GAAI,UAC/C,CACArC,GAAAA,MAAAA,EAASiC,IAGX,OACEM,EAAA,MAAA,CAEEC,UAAWC,EAAW,kBAAmB9C,EAAM6C,WAC/CE,MAAKC,EAAA,CAAI7C,OAAQM,GAAaT,EAAM+C,OAAQE,SAE5CL,EAACM,EAAoB,CACnBC,cAAe,SAAfA,IACEjD,GAAAA,MAAAA,EAAWkD,WACXpC,EAAeH,KAAKC,MACpB,EAAAmC,SAEFL,EAACS,EAAGL,EAAA,CACFM,SAAU,GACVC,gBAAiB,KACjBC,WAAY,KACZC,oBAAqB,KACrBtD,OAAO,OACPuD,MAAM,OACNC,YAAY,OACRrD,EAAU,CACdsD,WAAUZ,EAAA,CACRa,UAAW,MACXC,0BAA2B,MAC3BC,yBAA0B,KAC1BC,eAAgB,MAChBC,gBAAiB,KACjBC,QAAS,GACN5D,EAAWsD,YAEhBO,KAAK,OACL9D,OAAQgC,EACRnC,SAAUA,EACVD,MAAOkB,QA/BNJ,EAoCX"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/ace-editor-java/editor.tsx"],"sourcesContent":["import { isObject } from '@dimjs/lang';\nimport { isUndefinedOrNull, type TAny, type TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\n\nimport { useMemo, useRef, useState } from 'react';\nimport Ace, { type IAceEditorProps } from 'react-ace';\nimport { ErrorBoundaryWrapper } from '../error-boundary-wrapper';\n\nimport { classNames } from '@dimjs/utils';\nimport 'ace-builds/src-noconflict/ext-language_tools';\nimport 'ace-builds/src-noconflict/mode-java';\nimport 'ace-builds/src-noconflict/snippets/java';\n\nexport type AceEditorJavaProps = Omit<IAceEditorProps, 'mode' | 'value' | 'onChange' | 'theme'> & {\n /** 编辑器高度,默认值:100%,可输入值例如 300px、100% */\n height?: string;\n value?: string | TPlainObject | TPlainObject[];\n onChange?: (value?: string | TPlainObject | TPlainObject[]) => void;\n /** 配置输入自动提示关键字 */\n autoCompleterList?: { name: string; desc?: string }[];\n /**\n * 编辑器主题配置,例如:github、terminal、xcode\n * ```\n * 1. 顶部引入 import 'ace-builds/src-noconflict/theme-xxxx';\n * 2. 配置 theme = xxxx\n * ```\n */\n theme?: string;\n};\n\n/**\n * java编辑器\n * ```\n * 1. 受控组件,需要使用value、onChange配合显示数据\n * 2. heigth 默认为100%,如果外层无高度,需要自定义设置height属性\n * 3. 通过 autoCompleterList 配置自动提示关键字\n * 4. 通过 hiddenVerifyBtn、hiddenFormatterBtn可隐藏底部操作按钮\n * 5. 通过 theme 配置编辑器主题,例如:\n * 5.1 顶部引入 import 'ace-builds/src-noconflict/theme-xxxx';\n * 5.2 配置 theme = xxxx\n * ```\n */\nexport const AceEditorJava = (props: AceEditorJavaProps) => {\n const { value, onChange, height, autoCompleterList, onLoad, ...otherProps } = props;\n const heightFt = isUndefinedOrNull(height) ? '100%' : height;\n\n const [rootNodekey, setRootNodekey] = useState(Date.now());\n\n const editorRef = useRef<TAny>();\n\n const valueNew = useMemo(() => {\n if (isObject(value)) {\n return JSON.stringify(value, null, 2);\n }\n return value as string | undefined;\n }, [value]);\n\n const getCompletions = hooks.useCallbackRef((_a, _b, _c, _d, callback) => {\n callback(\n null,\n autoCompleterList?.map((item) => ({\n name: item.name,\n value: item.name,\n // score: 100,\n meta: item.desc,\n })),\n );\n });\n\n const onLoadHandle = (editor) => {\n editorRef.current = editor;\n /** 向编辑器中添加自动补全列表 */\n const findIndex = editor.completers.findIndex((item) => item.id === 'custom');\n if (findIndex >= 0) {\n editor.completers[findIndex] = { getCompletions, id: 'custom' };\n } else {\n editor.completers.push({ getCompletions, id: 'custom' });\n }\n onLoad?.(editor);\n };\n\n return (\n <div\n key={rootNodekey}\n className={classNames('ace-editor-java', props.className)}\n style={{ height: heightFt, ...props.style }}\n >\n <ErrorBoundaryWrapper\n onRenderReset={() => {\n onChange?.(undefined);\n setRootNodekey(Date.now());\n }}\n >\n <Ace\n fontSize={14}\n showPrintMargin={true}\n showGutter={true}\n highlightActiveLine={true}\n height=\"100%\"\n width=\"auto\"\n placeholder=\"请输入\"\n {...otherProps}\n setOptions={{\n useWorker: false,\n enableBasicAutocompletion: false,\n enableLiveAutocompletion: true,\n enableSnippets: false,\n showLineNumbers: true,\n tabSize: 2,\n ...otherProps.setOptions,\n }}\n mode=\"java\"\n onLoad={onLoadHandle}\n onChange={onChange}\n value={valueNew}\n />\n </ErrorBoundaryWrapper>\n </div>\n );\n};\n"],"names":["AceEditorJava","props","value","onChange","height","autoCompleterList","onLoad","otherProps","_objectWithoutPropertiesLoose","_excluded","heightFt","isUndefinedOrNull","_useState","useState","Date","now","rootNodekey","setRootNodekey","editorRef","useRef","valueNew","useMemo","_isObject","JSON","stringify","getCompletions","_hooks","useCallbackRef","_a","_b","_c","_d","callback","map","item","name","meta","desc","onLoadHandle","editor","current","findIndex","completers","id","push","_jsx","className","_classNames","style","_extends","children","ErrorBoundaryWrapper","onRenderReset","undefined","Ace","fontSize","showPrintMargin","showGutter","highlightActiveLine","width","placeholder","setOptions","useWorker","enableBasicAutocompletion","enableLiveAutocompletion","enableSnippets","showLineNumbers","tabSize","mode"],"mappings":";4tBA0CaA,EAAgB,SAAhBA,EAAiBC,GAC5B,IAAQC,EAAsED,EAAtEC,MAAOC,EAA+DF,EAA/DE,SAAUC,EAAqDH,EAArDG,OAAQC,EAA6CJ,EAA7CI,kBAAmBC,EAA0BL,EAA1BK,OAAWC,EAAUC,EAAKP,EAAKQ,GACnF,IAAMC,EAAWC,EAAkBP,GAAU,OAASA,EAEtD,IAAAQ,EAAsCC,EAASC,KAAKC,OAA7CC,EAAWJ,EAAA,GAAEK,EAAcL,EAAA,GAElC,IAAMM,EAAYC,IAElB,IAAMC,EAAWC,EAAQ,WACvB,GAAIC,EAASpB,GAAQ,CACnB,OAAOqB,KAAKC,UAAUtB,EAAO,KAAM,EACrC,CACA,OAAOA,CACT,EAAG,CAACA,IAEJ,IAAMuB,EAAiBC,EAAMC,eAAe,SAACC,EAAIC,EAAIC,EAAIC,EAAIC,GAC3DA,EACE,KACA3B,GAAiB,UAAA,EAAjBA,EAAmB4B,IAAI,SAACC,GAAI,MAAM,CAChCC,KAAMD,EAAKC,KACXjC,MAAOgC,EAAKC,KAEZC,KAAMF,EAAKG,KACX,GAEN,GAEA,IAAMC,EAAe,SAAfA,EAAgBC,GACpBrB,EAAUsB,QAAUD,EAEpB,IAAME,EAAYF,EAAOG,WAAWD,UAAU,SAACP,GAAI,OAAKA,EAAKS,KAAO,WACpE,GAAIF,GAAa,EAAG,CAClBF,EAAOG,WAAWD,GAAa,CAAEhB,eAAAA,EAAgBkB,GAAI,SACvD,KAAO,CACLJ,EAAOG,WAAWE,KAAK,CAAEnB,eAAAA,EAAgBkB,GAAI,UAC/C,CACArC,GAAAA,MAAAA,EAASiC,IAGX,OACEM,EAAA,MAAA,CAEEC,UAAWC,EAAW,kBAAmB9C,EAAM6C,WAC/CE,MAAKC,EAAA,CAAI7C,OAAQM,GAAaT,EAAM+C,OAAQE,SAE5CL,EAACM,EAAoB,CACnBC,cAAe,SAAfA,IACEjD,GAAAA,MAAAA,EAAWkD,WACXpC,EAAeH,KAAKC,MACpB,EAAAmC,SAEFL,EAACS,EAAGL,EAAA,CACFM,SAAU,GACVC,gBAAiB,KACjBC,WAAY,KACZC,oBAAqB,KACrBtD,OAAO,OACPuD,MAAM,OACNC,YAAY,OACRrD,EAAU,CACdsD,WAAUZ,EAAA,CACRa,UAAW,MACXC,0BAA2B,MAC3BC,yBAA0B,KAC1BC,eAAgB,MAChBC,gBAAiB,KACjBC,QAAS,GACN5D,EAAWsD,YAEhBO,KAAK,OACL9D,OAAQgC,EACRnC,SAAUA,EACVD,MAAOkB,QA/BNJ,EAoCX"}
@@ -8,5 +8,5 @@ import './../error-boundary-wrapper/index.css';
8
8
  import './../flex-layout/index.css';
9
9
  import './index.css';
10
10
  /*! @flatjs/forge MIT @flatbiz/antd */
11
- import{a as e,_ as o}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{classNames as r}from"@dimjs/utils/cjs/class-names";import{hooks as t}from"@wove/react/cjs/hooks";import{isObject as i}from"@dimjs/lang/cjs/is-object";import{isUndefinedOrNull as n,jsonStringToJsonObject as a}from"@flatbiz/utils";import{useState as s,useRef as l,useMemo as m,Fragment as u}from"react";import d from"react-ace";import{ButtonWrapper as c}from"../button-wrapper/index.js";import{ErrorBoundaryWrapper as p}from"../error-boundary-wrapper/index.js";import{FlexLayout as f}from"../flex-layout/index.js";import"ace-builds/src-noconflict/ext-language_tools";import"ace-builds/src-noconflict/mode-json";import"ace-builds/src-noconflict/snippets/json";import{jsxs as j,jsx as h}from"react/jsx-runtime";import"@ant-design/icons/es/icons/LoadingOutlined";import"@dimjs/lang/cjs/is-promise";import"antd";import"../index-83bede1b.js";import"antd/es/locale/en_US";import"antd/es/locale/zh_CN";import"dayjs";import"dayjs/locale/en";import"dayjs/locale/zh-cn";import"dayjs/plugin/advancedFormat";import"dayjs/plugin/customParseFormat";import"dayjs/plugin/localeData";import"dayjs/plugin/utc";import"dayjs/plugin/weekday";import"dayjs/plugin/weekOfYear";import"dayjs/plugin/weekYear";import"../fba-hooks/index.js";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-21b8c601.js";import"@dimjs/utils/cjs/uuid";import"@dimjs/utils/cjs/extend";import"../fba-utils/index.js";import"@dimjs/model";var g=["value","onChange","height","hiddenVerifyBtn","autoCompleterList","onLoad","hiddenErrorMsg"];var v=function v(y){var b=y.value,x=y.onChange,w=y.height,C=y.hiddenVerifyBtn,k=y.autoCompleterList,L=y.onLoad,N=y.hiddenErrorMsg,R=e(y,g);var S=n(w)?"100%":w;var z=s(Date.now()),B=z[0],O=z[1];var _=s(),E=_[0],V=_[1];var A=l();var D=m((function(){if(i(b)){return JSON.stringify(b,null,2)}return b}),[b]);var M=t.useCallbackRef((function(e){if(E){V(undefined)}x==null||x(e)}));var P=t.useCallbackRef((function(e,o,r,t,i){i(null,k==null?void 0:k.map((function(e){return{name:e.name,value:e.name,meta:e.desc}})))}));var F=function e(o){A.current=o;var r=o.completers.findIndex((function(e){return e.id==="custom"}));if(r>=0){o.completers[r]={getCompletions:P,id:"custom"}}else{o.completers.push({getCompletions:P,id:"custom"})}L==null||L(o)};var I=function e(o){try{var r=a(o);x==null||x(r)}catch(e){V('数据解析异常,正确格式:{"name":"张三", "age": 20}')}};var Y=j(u,{children:[h(c,{hidden:C===true,type:"primary",block:false,ghost:true,onClick:function e(){var o;var r=(o=A.current)==null?void 0:o.getValue();if(!r){x==null||x(r);return}I(r)},children:"验证&格式化数据"}),!N&&E?h("span",{style:{color:"red",marginLeft:10},children:E}):null]});return j(f,{fullIndex:0,className:r("ace-editor-json",y.className),style:o({height:S},y.style),children:[h("div",{className:"aej-content",children:h(p,{onRenderReset:function e(){x==null||x(undefined);O(Date.now())},children:h(d,o({fontSize:14,showPrintMargin:true,showGutter:true,highlightActiveLine:true,height:"100%",width:"auto",placeholder:"请输入"},R,{setOptions:o({useWorker:false,enableBasicAutocompletion:false,enableLiveAutocompletion:true,enableSnippets:false,showLineNumbers:true,tabSize:2},R.setOptions),mode:"json",onLoad:F,onChange:M,onBlur:function e(o,r){var t=r==null?void 0:r.getValue();if(t){I(t)}},value:D}))})}),h("div",{className:"ace-editor-json-footer",style:o({marginTop:10},y.footerStyle),children:y.footerExtraRender?y.footerExtraRender(Y):h(u,{children:Y})})]},B)};export{v as AceEditorJson};
11
+ import{a as e,_ as o}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{classNames as r}from"@dimjs/utils/cjs/class-names";import{hooks as t}from"@wove/react/cjs/hooks";import{isObject as i}from"@dimjs/lang/cjs/is-object";import{isUndefinedOrNull as n,jsonStringToJsonObject as a}from"@flatbiz/utils";import{useState as s,useRef as l,useMemo as m,Fragment as u}from"react";import d from"react-ace";import{ButtonWrapper as c}from"../button-wrapper/index.js";import{ErrorBoundaryWrapper as p}from"../error-boundary-wrapper/index.js";import{FlexLayout as f}from"../flex-layout/index.js";import"ace-builds/src-noconflict/ext-language_tools";import"ace-builds/src-noconflict/mode-json";import"ace-builds/src-noconflict/snippets/json";import{jsxs as j,jsx as h}from"react/jsx-runtime";import"@ant-design/icons/es/icons/LoadingOutlined";import"@dimjs/lang/cjs/is-promise";import"antd";import"../index-853b36e6.js";import"antd/es/locale/en_US";import"antd/es/locale/zh_CN";import"dayjs";import"dayjs/locale/en";import"dayjs/locale/zh-cn";import"dayjs/plugin/advancedFormat";import"dayjs/plugin/customParseFormat";import"dayjs/plugin/localeData";import"dayjs/plugin/utc";import"dayjs/plugin/weekday";import"dayjs/plugin/weekOfYear";import"dayjs/plugin/weekYear";import"../fba-hooks/index.js";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-1e6d93d9.js";import"@dimjs/utils/cjs/uuid";import"@dimjs/utils/cjs/extend";import"../fba-utils/index.js";import"@dimjs/model";var g=["value","onChange","height","hiddenVerifyBtn","autoCompleterList","onLoad","hiddenErrorMsg"];var v=function v(y){var b=y.value,x=y.onChange,w=y.height,C=y.hiddenVerifyBtn,k=y.autoCompleterList,L=y.onLoad,N=y.hiddenErrorMsg,R=e(y,g);var S=n(w)?"100%":w;var z=s(Date.now()),B=z[0],O=z[1];var _=s(),E=_[0],V=_[1];var A=l();var D=m(function(){if(i(b)){return JSON.stringify(b,null,2)}return b},[b]);var M=t.useCallbackRef(function(e){if(E){V(undefined)}x==null||x(e)});var P=t.useCallbackRef(function(e,o,r,t,i){i(null,k==null?void 0:k.map(function(e){return{name:e.name,value:e.name,meta:e.desc}}))});var F=function e(o){A.current=o;var r=o.completers.findIndex(function(e){return e.id==="custom"});if(r>=0){o.completers[r]={getCompletions:P,id:"custom"}}else{o.completers.push({getCompletions:P,id:"custom"})}L==null||L(o)};var I=function e(o){try{var r=a(o);x==null||x(r)}catch(e){V('数据解析异常,正确格式:{"name":"张三", "age": 20}')}};var Y=j(u,{children:[h(c,{hidden:C===true,type:"primary",block:false,ghost:true,onClick:function e(){var o;var r=(o=A.current)==null?void 0:o.getValue();if(!r){x==null||x(r);return}I(r)},children:"验证&格式化数据"}),!N&&E?h("span",{style:{color:"red",marginLeft:10},children:E}):null]});return j(f,{fullIndex:0,className:r("ace-editor-json",y.className),style:o({height:S},y.style),children:[h("div",{className:"aej-content",children:h(p,{onRenderReset:function e(){x==null||x(undefined);O(Date.now())},children:h(d,o({fontSize:14,showPrintMargin:true,showGutter:true,highlightActiveLine:true,height:"100%",width:"auto",placeholder:"请输入"},R,{setOptions:o({useWorker:false,enableBasicAutocompletion:false,enableLiveAutocompletion:true,enableSnippets:false,showLineNumbers:true,tabSize:2},R.setOptions),mode:"json",onLoad:F,onChange:M,onBlur:function e(o,r){var t=r==null?void 0:r.getValue();if(t){I(t)}},value:D}))})}),h("div",{className:"ace-editor-json-footer",style:o({marginTop:10},y.footerStyle),children:y.footerExtraRender?y.footerExtraRender(Y):h(u,{children:Y})})]},B)};export{v as AceEditorJson};
12
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/ace-editor-json/editor.tsx"],"sourcesContent":["import { isObject } from '@dimjs/lang';\nimport { isUndefinedOrNull, jsonStringToJsonObject, type TAny, type TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { CSSProperties, Fragment, ReactElement, useMemo, useRef, useState } from 'react';\nimport Ace, { type IAceEditorProps } from 'react-ace';\n\nimport { ButtonWrapper } from '../button-wrapper';\nimport { ErrorBoundaryWrapper } from '../error-boundary-wrapper';\nimport { FlexLayout } from '../flex-layout';\n\nimport { classNames } from '@dimjs/utils';\nimport 'ace-builds/src-noconflict/ext-language_tools';\nimport 'ace-builds/src-noconflict/mode-json';\nimport 'ace-builds/src-noconflict/snippets/json';\n\nexport type AceEditorJsonProps = Omit<IAceEditorProps, 'mode' | 'value' | 'onChange' | 'theme'> & {\n /** 编辑器高度,默认值:100%,可输入值例如 300px、100% */\n height?: string;\n value?: string | TPlainObject | TPlainObject[];\n onChange?: (value?: string | TPlainObject | TPlainObject[]) => void;\n /** 配置输入自动提示关键字 */\n autoCompleterList?: { name: string; desc?: string }[];\n /** 是否隐藏【验证数据】按钮 */\n hiddenVerifyBtn?: boolean;\n /** 是否隐藏内部验证异常文案 */\n hiddenErrorMsg?: boolean;\n /**\n * 编辑器主题配置,例如:github、terminal、xcode\n * ```\n * 1. 顶部引入 import 'ace-builds/src-noconflict/theme-xxxx';\n * 2. 配置 theme = xxxx\n * ```\n */\n theme?: string;\n /** 底部额外布局 */\n footerExtraRender?: (children: ReactElement) => ReactElement;\n footerStyle?: CSSProperties;\n};\n\n/**\n * Json编辑器\n * ```\n * 1. 受控组件,需要使用value、onChange配合显示数据\n * 2. heigth 默认为100%,如果外层无高度,需要自定义设置height属性\n * 3. 通过 autoCompleterList 配置自动提示关键字\n * 4. 通过 hiddenVerifyBtn 配置隐藏底部操作按钮\n * 5. 通过 theme 配置编辑器主题,例如:\n * 5.1 顶部引入 import 'ace-builds/src-noconflict/theme-xxxx';\n * 5.2 配置 theme = xxxx\n * ```\n */\nexport const AceEditorJson = (props: AceEditorJsonProps) => {\n const {\n value,\n onChange,\n height,\n hiddenVerifyBtn,\n autoCompleterList,\n onLoad,\n hiddenErrorMsg,\n ...otherProps\n } = props;\n const heightFt = isUndefinedOrNull(height) ? '100%' : height;\n\n const [rootNodekey, setRootNodekey] = useState(Date.now());\n const [errorMsg, setErrorMsg] = useState<string>();\n\n const editorRef = useRef<TAny>();\n\n const valueNew = useMemo(() => {\n if (isObject(value)) {\n return JSON.stringify(value, null, 2);\n }\n return value as string | undefined;\n }, [value]);\n\n const handleChange = hooks.useCallbackRef((content: string) => {\n if (errorMsg) {\n setErrorMsg(undefined);\n }\n onChange?.(content);\n });\n\n const getCompletions = hooks.useCallbackRef((_a, _b, _c, _d, callback) => {\n callback(\n null,\n autoCompleterList?.map((item) => ({\n name: item.name,\n value: item.name,\n // score: 100,\n meta: item.desc,\n })),\n );\n });\n\n const onLoadHandle = (editor) => {\n editorRef.current = editor;\n /** 向编辑器中添加自动补全列表 */\n const findIndex = editor.completers.findIndex((item) => item.id === 'custom');\n if (findIndex >= 0) {\n editor.completers[findIndex] = { getCompletions, id: 'custom' };\n } else {\n editor.completers.push({ getCompletions, id: 'custom' });\n }\n onLoad?.(editor);\n };\n\n const inputValueVerify = (inputValue: string) => {\n try {\n const result = jsonStringToJsonObject(inputValue);\n onChange?.(result);\n } catch (error: TAny) {\n setErrorMsg('数据解析异常,正确格式:{\"name\":\"张三\", \"age\": 20}');\n }\n };\n const footer = (\n <Fragment>\n <ButtonWrapper\n hidden={hiddenVerifyBtn === true}\n type=\"primary\"\n block={false}\n ghost\n onClick={() => {\n const currentValue = editorRef.current?.getValue();\n if (!currentValue) {\n onChange?.(currentValue);\n return;\n }\n inputValueVerify(currentValue);\n }}\n >\n 验证&格式化数据\n </ButtonWrapper>\n {!hiddenErrorMsg && errorMsg ? <span style={{ color: 'red', marginLeft: 10 }}>{errorMsg}</span> : null}\n </Fragment>\n );\n\n return (\n <FlexLayout\n fullIndex={0}\n className={classNames('ace-editor-json', props.className)}\n style={{ height: heightFt, ...props.style }}\n key={rootNodekey}\n >\n <div className=\"aej-content\">\n <ErrorBoundaryWrapper\n onRenderReset={() => {\n onChange?.(undefined);\n setRootNodekey(Date.now());\n }}\n >\n <Ace\n fontSize={14}\n showPrintMargin={true}\n showGutter={true}\n highlightActiveLine={true}\n height=\"100%\"\n width=\"auto\"\n placeholder=\"请输入\"\n {...otherProps}\n setOptions={{\n useWorker: false,\n enableBasicAutocompletion: false,\n enableLiveAutocompletion: true,\n enableSnippets: false,\n showLineNumbers: true,\n tabSize: 2,\n ...otherProps.setOptions,\n }}\n mode=\"json\"\n onLoad={onLoadHandle}\n onChange={handleChange}\n onBlur={(_event, editor) => {\n const value = editor?.getValue();\n if (value) {\n inputValueVerify(value);\n }\n }}\n value={valueNew}\n />\n </ErrorBoundaryWrapper>\n </div>\n <div className=\"ace-editor-json-footer\" style={{ marginTop: 10, ...props.footerStyle }}>\n {props.footerExtraRender ? props.footerExtraRender(footer) : <Fragment>{footer}</Fragment>}\n </div>\n </FlexLayout>\n );\n};\n"],"names":["AceEditorJson","props","value","onChange","height","hiddenVerifyBtn","autoCompleterList","onLoad","hiddenErrorMsg","otherProps","_objectWithoutPropertiesLoose","_excluded","heightFt","isUndefinedOrNull","_useState","useState","Date","now","rootNodekey","setRootNodekey","_useState2","errorMsg","setErrorMsg","editorRef","useRef","valueNew","useMemo","_isObject","JSON","stringify","handleChange","_hooks","useCallbackRef","content","undefined","getCompletions","_a","_b","_c","_d","callback","map","item","name","meta","desc","onLoadHandle","editor","current","findIndex","completers","id","push","inputValueVerify","inputValue","result","jsonStringToJsonObject","error","footer","_jsxs","Fragment","children","_jsx","ButtonWrapper","hidden","type","block","ghost","onClick","_editorRef$current","currentValue","getValue","style","color","marginLeft","FlexLayout","fullIndex","className","_classNames","_extends","ErrorBoundaryWrapper","onRenderReset","Ace","fontSize","showPrintMargin","showGutter","highlightActiveLine","width","placeholder","setOptions","useWorker","enableBasicAutocompletion","enableLiveAutocompletion","enableSnippets","showLineNumbers","tabSize","mode","onBlur","_event","marginTop","footerStyle","footerExtraRender"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/ace-editor-json/editor.tsx"],"sourcesContent":["import { isObject } from '@dimjs/lang';\nimport { isUndefinedOrNull, jsonStringToJsonObject, type TAny, type TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { CSSProperties, Fragment, ReactElement, useMemo, useRef, useState } from 'react';\nimport Ace, { type IAceEditorProps } from 'react-ace';\n\nimport { ButtonWrapper } from '../button-wrapper';\nimport { ErrorBoundaryWrapper } from '../error-boundary-wrapper';\nimport { FlexLayout } from '../flex-layout';\n\nimport { classNames } from '@dimjs/utils';\nimport 'ace-builds/src-noconflict/ext-language_tools';\nimport 'ace-builds/src-noconflict/mode-json';\nimport 'ace-builds/src-noconflict/snippets/json';\n\nexport type AceEditorJsonProps = Omit<IAceEditorProps, 'mode' | 'value' | 'onChange' | 'theme'> & {\n /** 编辑器高度,默认值:100%,可输入值例如 300px、100% */\n height?: string;\n value?: string | TPlainObject | TPlainObject[];\n onChange?: (value?: string | TPlainObject | TPlainObject[]) => void;\n /** 配置输入自动提示关键字 */\n autoCompleterList?: { name: string; desc?: string }[];\n /** 是否隐藏【验证数据】按钮 */\n hiddenVerifyBtn?: boolean;\n /** 是否隐藏内部验证异常文案 */\n hiddenErrorMsg?: boolean;\n /**\n * 编辑器主题配置,例如:github、terminal、xcode\n * ```\n * 1. 顶部引入 import 'ace-builds/src-noconflict/theme-xxxx';\n * 2. 配置 theme = xxxx\n * ```\n */\n theme?: string;\n /** 底部额外布局 */\n footerExtraRender?: (children: ReactElement) => ReactElement;\n footerStyle?: CSSProperties;\n};\n\n/**\n * Json编辑器\n * ```\n * 1. 受控组件,需要使用value、onChange配合显示数据\n * 2. heigth 默认为100%,如果外层无高度,需要自定义设置height属性\n * 3. 通过 autoCompleterList 配置自动提示关键字\n * 4. 通过 hiddenVerifyBtn 配置隐藏底部操作按钮\n * 5. 通过 theme 配置编辑器主题,例如:\n * 5.1 顶部引入 import 'ace-builds/src-noconflict/theme-xxxx';\n * 5.2 配置 theme = xxxx\n * ```\n */\nexport const AceEditorJson = (props: AceEditorJsonProps) => {\n const {\n value,\n onChange,\n height,\n hiddenVerifyBtn,\n autoCompleterList,\n onLoad,\n hiddenErrorMsg,\n ...otherProps\n } = props;\n const heightFt = isUndefinedOrNull(height) ? '100%' : height;\n\n const [rootNodekey, setRootNodekey] = useState(Date.now());\n const [errorMsg, setErrorMsg] = useState<string>();\n\n const editorRef = useRef<TAny>();\n\n const valueNew = useMemo(() => {\n if (isObject(value)) {\n return JSON.stringify(value, null, 2);\n }\n return value as string | undefined;\n }, [value]);\n\n const handleChange = hooks.useCallbackRef((content: string) => {\n if (errorMsg) {\n setErrorMsg(undefined);\n }\n onChange?.(content);\n });\n\n const getCompletions = hooks.useCallbackRef((_a, _b, _c, _d, callback) => {\n callback(\n null,\n autoCompleterList?.map((item) => ({\n name: item.name,\n value: item.name,\n // score: 100,\n meta: item.desc,\n })),\n );\n });\n\n const onLoadHandle = (editor) => {\n editorRef.current = editor;\n /** 向编辑器中添加自动补全列表 */\n const findIndex = editor.completers.findIndex((item) => item.id === 'custom');\n if (findIndex >= 0) {\n editor.completers[findIndex] = { getCompletions, id: 'custom' };\n } else {\n editor.completers.push({ getCompletions, id: 'custom' });\n }\n onLoad?.(editor);\n };\n\n const inputValueVerify = (inputValue: string) => {\n try {\n const result = jsonStringToJsonObject(inputValue);\n onChange?.(result);\n } catch (error: TAny) {\n setErrorMsg('数据解析异常,正确格式:{\"name\":\"张三\", \"age\": 20}');\n }\n };\n const footer = (\n <Fragment>\n <ButtonWrapper\n hidden={hiddenVerifyBtn === true}\n type=\"primary\"\n block={false}\n ghost\n onClick={() => {\n const currentValue = editorRef.current?.getValue();\n if (!currentValue) {\n onChange?.(currentValue);\n return;\n }\n inputValueVerify(currentValue);\n }}\n >\n 验证&格式化数据\n </ButtonWrapper>\n {!hiddenErrorMsg && errorMsg ? <span style={{ color: 'red', marginLeft: 10 }}>{errorMsg}</span> : null}\n </Fragment>\n );\n\n return (\n <FlexLayout\n fullIndex={0}\n className={classNames('ace-editor-json', props.className)}\n style={{ height: heightFt, ...props.style }}\n key={rootNodekey}\n >\n <div className=\"aej-content\">\n <ErrorBoundaryWrapper\n onRenderReset={() => {\n onChange?.(undefined);\n setRootNodekey(Date.now());\n }}\n >\n <Ace\n fontSize={14}\n showPrintMargin={true}\n showGutter={true}\n highlightActiveLine={true}\n height=\"100%\"\n width=\"auto\"\n placeholder=\"请输入\"\n {...otherProps}\n setOptions={{\n useWorker: false,\n enableBasicAutocompletion: false,\n enableLiveAutocompletion: true,\n enableSnippets: false,\n showLineNumbers: true,\n tabSize: 2,\n ...otherProps.setOptions,\n }}\n mode=\"json\"\n onLoad={onLoadHandle}\n onChange={handleChange}\n onBlur={(_event, editor) => {\n const value = editor?.getValue();\n if (value) {\n inputValueVerify(value);\n }\n }}\n value={valueNew}\n />\n </ErrorBoundaryWrapper>\n </div>\n <div className=\"ace-editor-json-footer\" style={{ marginTop: 10, ...props.footerStyle }}>\n {props.footerExtraRender ? props.footerExtraRender(footer) : <Fragment>{footer}</Fragment>}\n </div>\n </FlexLayout>\n );\n};\n"],"names":["AceEditorJson","props","value","onChange","height","hiddenVerifyBtn","autoCompleterList","onLoad","hiddenErrorMsg","otherProps","_objectWithoutPropertiesLoose","_excluded","heightFt","isUndefinedOrNull","_useState","useState","Date","now","rootNodekey","setRootNodekey","_useState2","errorMsg","setErrorMsg","editorRef","useRef","valueNew","useMemo","_isObject","JSON","stringify","handleChange","_hooks","useCallbackRef","content","undefined","getCompletions","_a","_b","_c","_d","callback","map","item","name","meta","desc","onLoadHandle","editor","current","findIndex","completers","id","push","inputValueVerify","inputValue","result","jsonStringToJsonObject","error","footer","_jsxs","Fragment","children","_jsx","ButtonWrapper","hidden","type","block","ghost","onClick","_editorRef$current","currentValue","getValue","style","color","marginLeft","FlexLayout","fullIndex","className","_classNames","_extends","ErrorBoundaryWrapper","onRenderReset","Ace","fontSize","showPrintMargin","showGutter","highlightActiveLine","width","placeholder","setOptions","useWorker","enableBasicAutocompletion","enableLiveAutocompletion","enableSnippets","showLineNumbers","tabSize","mode","onBlur","_event","marginTop","footerStyle","footerExtraRender"],"mappings":"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"}
@@ -8,5 +8,5 @@ import './../error-boundary-wrapper/index.css';
8
8
  import './../flex-layout/index.css';
9
9
  import './index.css';
10
10
  /*! @flatjs/forge MIT @flatbiz/antd */
11
- import{a as e,_ as t}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{classNames as o}from"@dimjs/utils/cjs/class-names";import{hooks as r}from"@wove/react/cjs/hooks";import{useState as i,useRef as a}from"react";import n from"react-ace";import{format as s}from"sql-formatter";import"ace-builds/src-noconflict/ext-language_tools";import"ace-builds/src-noconflict/mode-mysql";import"ace-builds/src-noconflict/snippets/mysql";import{ButtonWrapper as l}from"../button-wrapper/index.js";import{ErrorBoundaryWrapper as m}from"../error-boundary-wrapper/index.js";import{jsxs as p,jsx as u}from"react/jsx-runtime";import"@ant-design/icons/es/icons/LoadingOutlined";import"@dimjs/lang/cjs/is-promise";import"@flatbiz/utils";import"antd";import"../index-83bede1b.js";import"antd/es/locale/en_US";import"antd/es/locale/zh_CN";import"dayjs";import"dayjs/locale/en";import"dayjs/locale/zh-cn";import"dayjs/plugin/advancedFormat";import"dayjs/plugin/customParseFormat";import"dayjs/plugin/localeData";import"dayjs/plugin/utc";import"dayjs/plugin/weekday";import"dayjs/plugin/weekOfYear";import"dayjs/plugin/weekYear";import"../fba-hooks/index.js";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-21b8c601.js";import"@dimjs/utils/cjs/uuid";import"@dimjs/utils/cjs/extend";import"../fba-utils/index.js";import"@dimjs/model";import"../flex-layout/index.js";var c=["value","hiddenFormatterBtn","autoCompleterList","onChange","onLoad"];var d=function e(t){return s(t,{language:"sql"}).replace(/\$ /g,"$").replace(/\{ /g,"{").replace(/ \}/g,"}")};var f=function s(f){var g=i(Date.now()),j=g[0],h=g[1];var v=f.value,y=f.hiddenFormatterBtn,b=f.autoCompleterList,x=f.onChange,w=f.onLoad,C=e(f,c);var L=a();var k=r.useCallbackRef((function(e){x==null||x(e)}));var q=r.useCallbackRef((function(e,t,o,r,i){i(null,b==null?void 0:b.map((function(e){return{name:e.name,value:e.name,meta:e.desc}})))}));var R=function e(t){L.current=t;var o=t.completers.findIndex((function(e){return e.id==="custom"}));if(o>=0){t.completers[o]={getCompletions:q,id:"custom"}}else{t.completers.push({getCompletions:q,id:"custom"})}w==null||w(t)};var S=u(l,{hidden:y===true,type:"primary",ghost:true,onClick:function e(){var t;var o=(t=L.current)==null?void 0:t.getValue();x==null||x(d(o||""))},children:"美化"});return p("div",{className:o("ace-editor-mysql",f.className),style:f.style,children:[u(m,{onRenderReset:function e(){x==null||x(undefined);h(Date.now())},children:u(n,t({fontSize:14,showPrintMargin:true,showGutter:true,highlightActiveLine:true,placeholder:"输入SQL",height:"250px",width:"auto"},C,{setOptions:t({useWorker:false,enableBasicAutocompletion:false,enableLiveAutocompletion:true,enableSnippets:false,showLineNumbers:true,tabSize:2},C.setOptions),mode:"mysql",onLoad:R,onChange:k,value:v}))}),u("div",{className:"ace-editor-mysql-footer",style:t({marginTop:10},f.footerStyle),children:f.footerExtraRender?f.footerExtraRender(S):S})]},j)};export{f as AceEditorMysql};
11
+ import{a as e,_ as t}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{classNames as o}from"@dimjs/utils/cjs/class-names";import{hooks as r}from"@wove/react/cjs/hooks";import{useState as i,useRef as a}from"react";import n from"react-ace";import{format as s}from"sql-formatter";import"ace-builds/src-noconflict/ext-language_tools";import"ace-builds/src-noconflict/mode-mysql";import"ace-builds/src-noconflict/snippets/mysql";import{ButtonWrapper as l}from"../button-wrapper/index.js";import{ErrorBoundaryWrapper as m}from"../error-boundary-wrapper/index.js";import{jsxs as p,jsx as u}from"react/jsx-runtime";import"@ant-design/icons/es/icons/LoadingOutlined";import"@dimjs/lang/cjs/is-promise";import"@flatbiz/utils";import"antd";import"../index-853b36e6.js";import"antd/es/locale/en_US";import"antd/es/locale/zh_CN";import"dayjs";import"dayjs/locale/en";import"dayjs/locale/zh-cn";import"dayjs/plugin/advancedFormat";import"dayjs/plugin/customParseFormat";import"dayjs/plugin/localeData";import"dayjs/plugin/utc";import"dayjs/plugin/weekday";import"dayjs/plugin/weekOfYear";import"dayjs/plugin/weekYear";import"../fba-hooks/index.js";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-1e6d93d9.js";import"@dimjs/utils/cjs/uuid";import"@dimjs/utils/cjs/extend";import"../fba-utils/index.js";import"@dimjs/model";import"../flex-layout/index.js";var c=["value","hiddenFormatterBtn","autoCompleterList","onChange","onLoad"];var d=function e(t){return s(t,{language:"sql"}).replace(/\$ /g,"$").replace(/\{ /g,"{").replace(/ \}/g,"}")};var f=function s(f){var g=i(Date.now()),j=g[0],h=g[1];var v=f.value,y=f.hiddenFormatterBtn,b=f.autoCompleterList,x=f.onChange,w=f.onLoad,C=e(f,c);var L=a();var k=r.useCallbackRef(function(e){x==null||x(e)});var q=r.useCallbackRef(function(e,t,o,r,i){i(null,b==null?void 0:b.map(function(e){return{name:e.name,value:e.name,meta:e.desc}}))});var R=function e(t){L.current=t;var o=t.completers.findIndex(function(e){return e.id==="custom"});if(o>=0){t.completers[o]={getCompletions:q,id:"custom"}}else{t.completers.push({getCompletions:q,id:"custom"})}w==null||w(t)};var S=u(l,{hidden:y===true,type:"primary",ghost:true,onClick:function e(){var t;var o=(t=L.current)==null?void 0:t.getValue();x==null||x(d(o||""))},children:"美化"});return p("div",{className:o("ace-editor-mysql",f.className),style:f.style,children:[u(m,{onRenderReset:function e(){x==null||x(undefined);h(Date.now())},children:u(n,t({fontSize:14,showPrintMargin:true,showGutter:true,highlightActiveLine:true,placeholder:"输入SQL",height:"250px",width:"auto"},C,{setOptions:t({useWorker:false,enableBasicAutocompletion:false,enableLiveAutocompletion:true,enableSnippets:false,showLineNumbers:true,tabSize:2},C.setOptions),mode:"mysql",onLoad:R,onChange:k,value:v}))}),u("div",{className:"ace-editor-mysql-footer",style:t({marginTop:10},f.footerStyle),children:f.footerExtraRender?f.footerExtraRender(S):S})]},j)};export{f as AceEditorMysql};
12
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/ace-editor-mysql/editor.tsx"],"sourcesContent":["import { type TAny } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { CSSProperties, ReactElement, useRef, useState } from 'react';\nimport type { IAceEditorProps } from 'react-ace';\nimport Ace from 'react-ace';\nimport { format } from 'sql-formatter';\n\nimport 'ace-builds/src-noconflict/ext-language_tools';\nimport 'ace-builds/src-noconflict/mode-mysql';\nimport 'ace-builds/src-noconflict/snippets/mysql';\n\nimport { classNames } from '@dimjs/utils';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { ErrorBoundaryWrapper } from '../error-boundary-wrapper';\n\nconst formatSql = (sqlContent: string) => {\n return format(sqlContent, { language: 'sql' })\n .replace(/\\$ /g, '$')\n .replace(/\\{ /g, '{')\n .replace(/ \\}/g, '}');\n};\n\nexport type AceEditorMysqlProps = Omit<IAceEditorProps, 'theme' | 'mode' | 'value' | 'onChange'> & {\n /** 编辑器高度,默认值:100%,可输入值例如 300px、100% */\n height?: string;\n value?: string;\n onChange?: (value?: string) => void;\n /** 配置输入自动提示关键字 */\n autoCompleterList?: { name: string; desc?: string }[];\n /** 隐藏【美化】按钮 */\n hiddenFormatterBtn?: boolean;\n /**\n * 编辑器主题配置,例如:github、terminal、xcode\n * ```\n * 1. 顶部引入 import 'ace-builds/src-noconflict/theme-xxxx';\n * 2. 配置 theme = xxxx\n * ```\n */\n theme?: string;\n /** 底部额外布局 */\n footerExtraRender?: (children: ReactElement) => ReactElement;\n footerStyle?: CSSProperties;\n};\n\nexport const AceEditorMysql = (props: AceEditorMysqlProps) => {\n const [rootNodekey, setRootNodekey] = useState(Date.now());\n const { value, hiddenFormatterBtn, autoCompleterList, onChange, onLoad, ...otherProps } = props;\n\n const editorRef = useRef<TAny>();\n\n const handleChange = hooks.useCallbackRef((content: string) => {\n onChange?.(content);\n });\n\n const getCompletions = hooks.useCallbackRef((_a, _b, _c, _d, callback) => {\n callback(\n null,\n autoCompleterList?.map((item) => ({\n name: item.name,\n value: item.name,\n // score: 100,\n meta: item.desc,\n })),\n );\n });\n\n const onLoadHandle = (editor) => {\n editorRef.current = editor;\n /** 向编辑器中添加自动补全列表 */\n const findIndex = editor.completers.findIndex((item) => item.id === 'custom');\n if (findIndex >= 0) {\n editor.completers[findIndex] = { getCompletions, id: 'custom' };\n } else {\n editor.completers.push({ getCompletions, id: 'custom' });\n }\n onLoad?.(editor);\n };\n\n const footer = (\n <ButtonWrapper\n hidden={hiddenFormatterBtn === true}\n type=\"primary\"\n ghost\n onClick={() => {\n const currentValue = editorRef.current?.getValue();\n onChange?.(formatSql(currentValue || ''));\n }}\n >\n 美化\n </ButtonWrapper>\n );\n\n return (\n <div key={rootNodekey} className={classNames('ace-editor-mysql', props.className)} style={props.style}>\n <ErrorBoundaryWrapper\n onRenderReset={() => {\n onChange?.(undefined);\n setRootNodekey(Date.now());\n }}\n >\n <Ace\n fontSize={14}\n showPrintMargin={true}\n showGutter={true}\n highlightActiveLine={true}\n placeholder=\"输入SQL\"\n height=\"250px\"\n width=\"auto\"\n {...otherProps}\n setOptions={{\n useWorker: false,\n enableBasicAutocompletion: false,\n enableLiveAutocompletion: true,\n enableSnippets: false,\n showLineNumbers: true,\n tabSize: 2,\n ...otherProps.setOptions,\n }}\n mode=\"mysql\"\n onLoad={onLoadHandle}\n onChange={handleChange}\n value={value}\n />\n </ErrorBoundaryWrapper>\n <div className=\"ace-editor-mysql-footer\" style={{ marginTop: 10, ...props.footerStyle }}>\n {props.footerExtraRender ? props.footerExtraRender(footer) : footer}\n </div>\n </div>\n );\n};\n"],"names":["formatSql","sqlContent","format","language","replace","AceEditorMysql","props","_useState","useState","Date","now","rootNodekey","setRootNodekey","value","hiddenFormatterBtn","autoCompleterList","onChange","onLoad","otherProps","_objectWithoutPropertiesLoose","_excluded","editorRef","useRef","handleChange","_hooks","useCallbackRef","content","getCompletions","_a","_b","_c","_d","callback","map","item","name","meta","desc","onLoadHandle","editor","current","findIndex","completers","id","push","footer","_jsx","ButtonWrapper","hidden","type","ghost","onClick","_editorRef$current","currentValue","getValue","children","_jsxs","className","_classNames","style","ErrorBoundaryWrapper","onRenderReset","undefined","Ace","_extends","fontSize","showPrintMargin","showGutter","highlightActiveLine","placeholder","height","width","setOptions","useWorker","enableBasicAutocompletion","enableLiveAutocompletion","enableSnippets","showLineNumbers","tabSize","mode","marginTop","footerStyle","footerExtraRender"],"mappings":";65CAeA,IAAMA,EAAY,SAAZA,EAAaC,GACjB,OAAOC,EAAOD,EAAY,CAAEE,SAAU,QACnCC,QAAQ,OAAQ,KAChBA,QAAQ,OAAQ,KAChBA,QAAQ,OAAQ,IACrB,MAwBaC,EAAiB,SAAjBA,EAAkBC,GAC7B,IAAAC,EAAsCC,EAASC,KAAKC,OAA7CC,EAAWJ,EAAA,GAAEK,EAAcL,EAAA,GAClC,IAAQM,EAAkFP,EAAlFO,MAAOC,EAA2ER,EAA3EQ,mBAAoBC,EAAuDT,EAAvDS,kBAAmBC,EAAoCV,EAApCU,SAAUC,EAA0BX,EAA1BW,OAAWC,EAAUC,EAAKb,EAAKc,GAE/F,IAAMC,EAAYC,IAElB,IAAMC,EAAeC,EAAMC,gBAAe,SAACC,GACzCV,GAAAA,MAAAA,EAAWU,EACb,IAEA,IAAMC,EAAiBH,EAAMC,gBAAe,SAACG,EAAIC,EAAIC,EAAIC,EAAIC,GAC3DA,EACE,KACAjB,GAAiB,UAAA,EAAjBA,EAAmBkB,KAAI,SAACC,GAAI,MAAM,CAChCC,KAAMD,EAAKC,KACXtB,MAAOqB,EAAKC,KAEZC,KAAMF,EAAKG,KACX,IAEN,IAEA,IAAMC,EAAe,SAAfA,EAAgBC,GACpBlB,EAAUmB,QAAUD,EAEpB,IAAME,EAAYF,EAAOG,WAAWD,WAAU,SAACP,GAAI,OAAKA,EAAKS,KAAO,YACpE,GAAIF,GAAa,EAAG,CAClBF,EAAOG,WAAWD,GAAa,CAAEd,eAAAA,EAAgBgB,GAAI,SACvD,KAAO,CACLJ,EAAOG,WAAWE,KAAK,CAAEjB,eAAAA,EAAgBgB,GAAI,UAC/C,CACA1B,GAAAA,MAAAA,EAASsB,IAGX,IAAMM,EACJC,EAACC,EAAa,CACZC,OAAQlC,IAAuB,KAC/BmC,KAAK,UACLC,MAAK,KACLC,QAAS,SAATA,IAAe,IAAAC,EACb,IAAMC,GAAYD,EAAG/B,EAAUmB,UAAO,UAAA,EAAjBY,EAAmBE,WACxCtC,GAAQ,MAARA,EAAWhB,EAAUqD,GAAgB,IACrC,EAAAE,SACH,OAKH,OACEC,EAAA,MAAA,CAAuBC,UAAWC,EAAW,mBAAoBpD,EAAMmD,WAAYE,MAAOrD,EAAMqD,MAAMJ,SAAA,CACpGT,EAACc,EAAoB,CACnBC,cAAe,SAAfA,IACE7C,GAAAA,MAAAA,EAAW8C,WACXlD,EAAeH,KAAKC,MACpB,EAAA6C,SAEFT,EAACiB,EAAGC,EAAA,CACFC,SAAU,GACVC,gBAAiB,KACjBC,WAAY,KACZC,oBAAqB,KACrBC,YAAY,QACZC,OAAO,QACPC,MAAM,QACFrD,EAAU,CACdsD,WAAUR,EAAA,CACRS,UAAW,MACXC,0BAA2B,MAC3BC,yBAA0B,KAC1BC,eAAgB,MAChBC,gBAAiB,KACjBC,QAAS,GACN5D,EAAWsD,YAEhBO,KAAK,QACL9D,OAAQqB,EACRtB,SAAUO,EACVV,MAAOA,OAGXiC,EAAA,MAAA,CAAKW,UAAU,0BAA0BE,MAAKK,EAAA,CAAIgB,UAAW,IAAO1E,EAAM2E,aAAc1B,SACrFjD,EAAM4E,kBAAoB5E,EAAM4E,kBAAkBrC,GAAUA,MAhCvDlC,EAoCd"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/ace-editor-mysql/editor.tsx"],"sourcesContent":["import { type TAny } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\nimport { CSSProperties, ReactElement, useRef, useState } from 'react';\nimport type { IAceEditorProps } from 'react-ace';\nimport Ace from 'react-ace';\nimport { format } from 'sql-formatter';\n\nimport 'ace-builds/src-noconflict/ext-language_tools';\nimport 'ace-builds/src-noconflict/mode-mysql';\nimport 'ace-builds/src-noconflict/snippets/mysql';\n\nimport { classNames } from '@dimjs/utils';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { ErrorBoundaryWrapper } from '../error-boundary-wrapper';\n\nconst formatSql = (sqlContent: string) => {\n return format(sqlContent, { language: 'sql' })\n .replace(/\\$ /g, '$')\n .replace(/\\{ /g, '{')\n .replace(/ \\}/g, '}');\n};\n\nexport type AceEditorMysqlProps = Omit<IAceEditorProps, 'theme' | 'mode' | 'value' | 'onChange'> & {\n /** 编辑器高度,默认值:100%,可输入值例如 300px、100% */\n height?: string;\n value?: string;\n onChange?: (value?: string) => void;\n /** 配置输入自动提示关键字 */\n autoCompleterList?: { name: string; desc?: string }[];\n /** 隐藏【美化】按钮 */\n hiddenFormatterBtn?: boolean;\n /**\n * 编辑器主题配置,例如:github、terminal、xcode\n * ```\n * 1. 顶部引入 import 'ace-builds/src-noconflict/theme-xxxx';\n * 2. 配置 theme = xxxx\n * ```\n */\n theme?: string;\n /** 底部额外布局 */\n footerExtraRender?: (children: ReactElement) => ReactElement;\n footerStyle?: CSSProperties;\n};\n\nexport const AceEditorMysql = (props: AceEditorMysqlProps) => {\n const [rootNodekey, setRootNodekey] = useState(Date.now());\n const { value, hiddenFormatterBtn, autoCompleterList, onChange, onLoad, ...otherProps } = props;\n\n const editorRef = useRef<TAny>();\n\n const handleChange = hooks.useCallbackRef((content: string) => {\n onChange?.(content);\n });\n\n const getCompletions = hooks.useCallbackRef((_a, _b, _c, _d, callback) => {\n callback(\n null,\n autoCompleterList?.map((item) => ({\n name: item.name,\n value: item.name,\n // score: 100,\n meta: item.desc,\n })),\n );\n });\n\n const onLoadHandle = (editor) => {\n editorRef.current = editor;\n /** 向编辑器中添加自动补全列表 */\n const findIndex = editor.completers.findIndex((item) => item.id === 'custom');\n if (findIndex >= 0) {\n editor.completers[findIndex] = { getCompletions, id: 'custom' };\n } else {\n editor.completers.push({ getCompletions, id: 'custom' });\n }\n onLoad?.(editor);\n };\n\n const footer = (\n <ButtonWrapper\n hidden={hiddenFormatterBtn === true}\n type=\"primary\"\n ghost\n onClick={() => {\n const currentValue = editorRef.current?.getValue();\n onChange?.(formatSql(currentValue || ''));\n }}\n >\n 美化\n </ButtonWrapper>\n );\n\n return (\n <div key={rootNodekey} className={classNames('ace-editor-mysql', props.className)} style={props.style}>\n <ErrorBoundaryWrapper\n onRenderReset={() => {\n onChange?.(undefined);\n setRootNodekey(Date.now());\n }}\n >\n <Ace\n fontSize={14}\n showPrintMargin={true}\n showGutter={true}\n highlightActiveLine={true}\n placeholder=\"输入SQL\"\n height=\"250px\"\n width=\"auto\"\n {...otherProps}\n setOptions={{\n useWorker: false,\n enableBasicAutocompletion: false,\n enableLiveAutocompletion: true,\n enableSnippets: false,\n showLineNumbers: true,\n tabSize: 2,\n ...otherProps.setOptions,\n }}\n mode=\"mysql\"\n onLoad={onLoadHandle}\n onChange={handleChange}\n value={value}\n />\n </ErrorBoundaryWrapper>\n <div className=\"ace-editor-mysql-footer\" style={{ marginTop: 10, ...props.footerStyle }}>\n {props.footerExtraRender ? props.footerExtraRender(footer) : footer}\n </div>\n </div>\n );\n};\n"],"names":["formatSql","sqlContent","format","language","replace","AceEditorMysql","props","_useState","useState","Date","now","rootNodekey","setRootNodekey","value","hiddenFormatterBtn","autoCompleterList","onChange","onLoad","otherProps","_objectWithoutPropertiesLoose","_excluded","editorRef","useRef","handleChange","_hooks","useCallbackRef","content","getCompletions","_a","_b","_c","_d","callback","map","item","name","meta","desc","onLoadHandle","editor","current","findIndex","completers","id","push","footer","_jsx","ButtonWrapper","hidden","type","ghost","onClick","_editorRef$current","currentValue","getValue","children","_jsxs","className","_classNames","style","ErrorBoundaryWrapper","onRenderReset","undefined","Ace","_extends","fontSize","showPrintMargin","showGutter","highlightActiveLine","placeholder","height","width","setOptions","useWorker","enableBasicAutocompletion","enableLiveAutocompletion","enableSnippets","showLineNumbers","tabSize","mode","marginTop","footerStyle","footerExtraRender"],"mappings":";65CAeA,IAAMA,EAAY,SAAZA,EAAaC,GACjB,OAAOC,EAAOD,EAAY,CAAEE,SAAU,QACnCC,QAAQ,OAAQ,KAChBA,QAAQ,OAAQ,KAChBA,QAAQ,OAAQ,IACrB,MAwBaC,EAAiB,SAAjBA,EAAkBC,GAC7B,IAAAC,EAAsCC,EAASC,KAAKC,OAA7CC,EAAWJ,EAAA,GAAEK,EAAcL,EAAA,GAClC,IAAQM,EAAkFP,EAAlFO,MAAOC,EAA2ER,EAA3EQ,mBAAoBC,EAAuDT,EAAvDS,kBAAmBC,EAAoCV,EAApCU,SAAUC,EAA0BX,EAA1BW,OAAWC,EAAUC,EAAKb,EAAKc,GAE/F,IAAMC,EAAYC,IAElB,IAAMC,EAAeC,EAAMC,eAAe,SAACC,GACzCV,GAAAA,MAAAA,EAAWU,EACb,GAEA,IAAMC,EAAiBH,EAAMC,eAAe,SAACG,EAAIC,EAAIC,EAAIC,EAAIC,GAC3DA,EACE,KACAjB,GAAiB,UAAA,EAAjBA,EAAmBkB,IAAI,SAACC,GAAI,MAAM,CAChCC,KAAMD,EAAKC,KACXtB,MAAOqB,EAAKC,KAEZC,KAAMF,EAAKG,KACX,GAEN,GAEA,IAAMC,EAAe,SAAfA,EAAgBC,GACpBlB,EAAUmB,QAAUD,EAEpB,IAAME,EAAYF,EAAOG,WAAWD,UAAU,SAACP,GAAI,OAAKA,EAAKS,KAAO,WACpE,GAAIF,GAAa,EAAG,CAClBF,EAAOG,WAAWD,GAAa,CAAEd,eAAAA,EAAgBgB,GAAI,SACvD,KAAO,CACLJ,EAAOG,WAAWE,KAAK,CAAEjB,eAAAA,EAAgBgB,GAAI,UAC/C,CACA1B,GAAAA,MAAAA,EAASsB,IAGX,IAAMM,EACJC,EAACC,EAAa,CACZC,OAAQlC,IAAuB,KAC/BmC,KAAK,UACLC,MAAK,KACLC,QAAS,SAATA,IAAe,IAAAC,EACb,IAAMC,GAAYD,EAAG/B,EAAUmB,UAAO,UAAA,EAAjBY,EAAmBE,WACxCtC,GAAQ,MAARA,EAAWhB,EAAUqD,GAAgB,IACrC,EAAAE,SACH,OAKH,OACEC,EAAA,MAAA,CAAuBC,UAAWC,EAAW,mBAAoBpD,EAAMmD,WAAYE,MAAOrD,EAAMqD,MAAMJ,SAAA,CACpGT,EAACc,EAAoB,CACnBC,cAAe,SAAfA,IACE7C,GAAAA,MAAAA,EAAW8C,WACXlD,EAAeH,KAAKC,MACpB,EAAA6C,SAEFT,EAACiB,EAAGC,EAAA,CACFC,SAAU,GACVC,gBAAiB,KACjBC,WAAY,KACZC,oBAAqB,KACrBC,YAAY,QACZC,OAAO,QACPC,MAAM,QACFrD,EAAU,CACdsD,WAAUR,EAAA,CACRS,UAAW,MACXC,0BAA2B,MAC3BC,yBAA0B,KAC1BC,eAAgB,MAChBC,gBAAiB,KACjBC,QAAS,GACN5D,EAAWsD,YAEhBO,KAAK,QACL9D,OAAQqB,EACRtB,SAAUO,EACVV,MAAOA,OAGXiC,EAAA,MAAA,CAAKW,UAAU,0BAA0BE,MAAKK,EAAA,CAAIgB,UAAW,IAAO1E,EAAM2E,aAAc1B,SACrFjD,EAAM4E,kBAAoB5E,EAAM4E,kBAAkBrC,GAAUA,MAhCvDlC,EAoCd"}
@@ -8,5 +8,5 @@ import './../error-boundary-wrapper/index.css';
8
8
  import './../flex-layout/index.css';
9
9
  import './index.css';
10
10
  /*! @flatjs/forge MIT @flatbiz/antd */
11
- import{a as e,_ as r}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{hooks as t}from"@wove/react/cjs/hooks";import{isObject as o}from"@dimjs/lang/cjs/is-object";import{isUndefinedOrNull as n}from"@flatbiz/utils";import{Space as i}from"antd";import{useState as a,useRef as l,useMemo as s}from"react";import m from"react-ace";import u from"xml-formatter";import{ButtonWrapper as d}from"../button-wrapper/index.js";import{ErrorBoundaryWrapper as c}from"../error-boundary-wrapper/index.js";import{FlexLayout as p}from"../flex-layout/index.js";import"ace-builds/src-noconflict/ext-language_tools";import"ace-builds/src-noconflict/mode-xml";import"ace-builds/src-noconflict/snippets/xml";import{jsxs as f,jsx as g}from"react/jsx-runtime";import"@ant-design/icons/es/icons/LoadingOutlined";import"@dimjs/lang/cjs/is-promise";import"@dimjs/utils/cjs/class-names";import"../index-83bede1b.js";import"antd/es/locale/en_US";import"antd/es/locale/zh_CN";import"dayjs";import"dayjs/locale/en";import"dayjs/locale/zh-cn";import"dayjs/plugin/advancedFormat";import"dayjs/plugin/customParseFormat";import"dayjs/plugin/localeData";import"dayjs/plugin/utc";import"dayjs/plugin/weekday";import"dayjs/plugin/weekOfYear";import"dayjs/plugin/weekYear";import"../fba-hooks/index.js";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-21b8c601.js";import"@dimjs/utils/cjs/uuid";import"@dimjs/utils/cjs/extend";import"../fba-utils/index.js";import"@dimjs/model";var h=function e(r){var t=0;var o;if(window["ActiveXObject"]){var n=new window["ActiveXObject"]("Microsoft.XMLDOM");n.async="false";n.loadXML(r);if(n.parseError.errorCode!=0){o="错误code: "+n.parseError.errorCode+" \n";o=o+" 错误原因: "+n.parseError.reason+" \n";o=o+" 错误位置: "+n.parseError.line;t=1}else{o="格式正确"}}else if(document.implementation["createDocument"]){var i=new DOMParser;var a=i.parseFromString(r,"text/xml");var l=a.getElementsByTagName("parsererror");if(l.length>0){if(a.documentElement.nodeName=="parsererror"){t=1;o=a.documentElement.childNodes[0].nodeValue}else{t=1;o=a.getElementsByTagName("parsererror")[0].innerHTML}}else{o="格式正确"}}else{t=2;o="浏览器不支持验证,无法验证xml正确性"}return{message:o,result:t==0?true:false}};var v=["value","onChange","height","hiddenVerifyBtn","hiddenFormatterBtn","autoCompleterList","onLoad","hiddenErrorMsg"];var j=function j(y){var x=y.value,b=y.onChange,w=y.height,C=y.hiddenVerifyBtn,L=y.hiddenFormatterBtn,E=y.autoCompleterList,k=y.onLoad,M=y.hiddenErrorMsg,N=e(y,v);var B=n(w)?"100%":w;var O=a(Date.now()),S=O[0],_=O[1];var D=a(),R=D[0],V=D[1];var z=l();var A=s((function(){if(o(x)){return JSON.stringify(x,null,2)}return x}),[x]);var F=t.useCallbackRef((function(e){if(R){V(undefined)}b==null||b(e)}));var T=t.useCallbackRef((function(e,r,t,o,n){n(null,E==null?void 0:E.map((function(e){return{name:e.name,value:e.name,meta:e.desc}})))}));var I=function e(r){z.current=r;var t=r.completers.findIndex((function(e){return e.id==="custom"}));if(t>=0){r.completers[t]={getCompletions:T,id:"custom"}}else{r.completers.push({getCompletions:T,id:"custom"})}k==null||k(r)};var P=function e(r){var t=h(r);if(t.result){b==null||b(r)}else{V(t.message)}};var X=f(i,{style:{alignItems:"flex-start"},children:[g(d,{hidden:L===true,type:"primary",ghost:true,onClick:function e(){var r;var t=(r=z.current)==null?void 0:r.getValue();b==null||b(u(t||""))},children:"美化"}),g(d,{hidden:C===true,type:"primary",ghost:true,onClick:function e(){var r;var t=(r=z.current)==null?void 0:r.getValue();if(!t){b==null||b(t);return}P(t)},children:"验证&格式化数据"}),!M&&R?g("span",{style:{color:"red"},dangerouslySetInnerHTML:{__html:R}}):null]});return f(p,{fullIndex:0,className:"ace-editor-xml",style:{height:B},children:[g("div",{className:"aex-content",children:g(c,{onRenderReset:function e(){b==null||b(undefined);_(Date.now())},children:g(m,r({fontSize:14,showPrintMargin:true,showGutter:true,highlightActiveLine:true,height:"100%",width:"auto",placeholder:"请输入"},N,{setOptions:r({useWorker:false,enableBasicAutocompletion:false,enableLiveAutocompletion:true,enableSnippets:false,showLineNumbers:true,tabSize:2},N.setOptions),mode:"xml",onLoad:I,onChange:F,onBlur:function e(r,t){var o=t==null?void 0:t.getValue();if(o){P(o)}},value:A}))})}),g("div",{className:"ace-editor-xml-footer",style:r({marginTop:10},y.footerStyle),children:y.footerExtraRender?y.footerExtraRender(X):X})]},S)};export{j as AceEditorXml};
11
+ import{a as e,_ as r}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{hooks as t}from"@wove/react/cjs/hooks";import{isObject as o}from"@dimjs/lang/cjs/is-object";import{isUndefinedOrNull as n}from"@flatbiz/utils";import{Space as i}from"antd";import{useState as a,useRef as l,useMemo as s}from"react";import m from"react-ace";import u from"xml-formatter";import{ButtonWrapper as d}from"../button-wrapper/index.js";import{ErrorBoundaryWrapper as c}from"../error-boundary-wrapper/index.js";import{FlexLayout as p}from"../flex-layout/index.js";import"ace-builds/src-noconflict/ext-language_tools";import"ace-builds/src-noconflict/mode-xml";import"ace-builds/src-noconflict/snippets/xml";import{jsxs as f,jsx as g}from"react/jsx-runtime";import"@ant-design/icons/es/icons/LoadingOutlined";import"@dimjs/lang/cjs/is-promise";import"@dimjs/utils/cjs/class-names";import"../index-853b36e6.js";import"antd/es/locale/en_US";import"antd/es/locale/zh_CN";import"dayjs";import"dayjs/locale/en";import"dayjs/locale/zh-cn";import"dayjs/plugin/advancedFormat";import"dayjs/plugin/customParseFormat";import"dayjs/plugin/localeData";import"dayjs/plugin/utc";import"dayjs/plugin/weekday";import"dayjs/plugin/weekOfYear";import"dayjs/plugin/weekYear";import"../fba-hooks/index.js";import"@dimjs/lang/cjs/is-array";import"../use-responsive-point-1e6d93d9.js";import"@dimjs/utils/cjs/uuid";import"@dimjs/utils/cjs/extend";import"../fba-utils/index.js";import"@dimjs/model";var h=function e(r){var t=0;var o;if(window["ActiveXObject"]){var n=new window["ActiveXObject"]("Microsoft.XMLDOM");n.async="false";n.loadXML(r);if(n.parseError.errorCode!=0){o="错误code: "+n.parseError.errorCode+" \n";o=o+" 错误原因: "+n.parseError.reason+" \n";o=o+" 错误位置: "+n.parseError.line;t=1}else{o="格式正确"}}else if(document.implementation["createDocument"]){var i=new DOMParser;var a=i.parseFromString(r,"text/xml");var l=a.getElementsByTagName("parsererror");if(l.length>0){if(a.documentElement.nodeName=="parsererror"){t=1;o=a.documentElement.childNodes[0].nodeValue}else{t=1;o=a.getElementsByTagName("parsererror")[0].innerHTML}}else{o="格式正确"}}else{t=2;o="浏览器不支持验证,无法验证xml正确性"}return{message:o,result:t==0?true:false}};var v=["value","onChange","height","hiddenVerifyBtn","hiddenFormatterBtn","autoCompleterList","onLoad","hiddenErrorMsg"];var j=function j(y){var x=y.value,b=y.onChange,w=y.height,C=y.hiddenVerifyBtn,L=y.hiddenFormatterBtn,E=y.autoCompleterList,k=y.onLoad,M=y.hiddenErrorMsg,N=e(y,v);var B=n(w)?"100%":w;var O=a(Date.now()),S=O[0],_=O[1];var D=a(),R=D[0],V=D[1];var z=l();var A=s(function(){if(o(x)){return JSON.stringify(x,null,2)}return x},[x]);var F=t.useCallbackRef(function(e){if(R){V(undefined)}b==null||b(e)});var T=t.useCallbackRef(function(e,r,t,o,n){n(null,E==null?void 0:E.map(function(e){return{name:e.name,value:e.name,meta:e.desc}}))});var I=function e(r){z.current=r;var t=r.completers.findIndex(function(e){return e.id==="custom"});if(t>=0){r.completers[t]={getCompletions:T,id:"custom"}}else{r.completers.push({getCompletions:T,id:"custom"})}k==null||k(r)};var P=function e(r){var t=h(r);if(t.result){b==null||b(r)}else{V(t.message)}};var X=f(i,{style:{alignItems:"flex-start"},children:[g(d,{hidden:L===true,type:"primary",ghost:true,onClick:function e(){var r;var t=(r=z.current)==null?void 0:r.getValue();b==null||b(u(t||""))},children:"美化"}),g(d,{hidden:C===true,type:"primary",ghost:true,onClick:function e(){var r;var t=(r=z.current)==null?void 0:r.getValue();if(!t){b==null||b(t);return}P(t)},children:"验证&格式化数据"}),!M&&R?g("span",{style:{color:"red"},dangerouslySetInnerHTML:{__html:R}}):null]});return f(p,{fullIndex:0,className:"ace-editor-xml",style:{height:B},children:[g("div",{className:"aex-content",children:g(c,{onRenderReset:function e(){b==null||b(undefined);_(Date.now())},children:g(m,r({fontSize:14,showPrintMargin:true,showGutter:true,highlightActiveLine:true,height:"100%",width:"auto",placeholder:"请输入"},N,{setOptions:r({useWorker:false,enableBasicAutocompletion:false,enableLiveAutocompletion:true,enableSnippets:false,showLineNumbers:true,tabSize:2},N.setOptions),mode:"xml",onLoad:I,onChange:F,onBlur:function e(r,t){var o=t==null?void 0:t.getValue();if(o){P(o)}},value:A}))})}),g("div",{className:"ace-editor-xml-footer",style:r({marginTop:10},y.footerStyle),children:y.footerExtraRender?y.footerExtraRender(X):X})]},S)};export{j as AceEditorXml};
12
12
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/ace-editor-xml/validate-xml.ts","@flatbiz/antd/src/ace-editor-xml/editor.tsx"],"sourcesContent":["/**\n * 验证xml格式的正确性\n * ```\n * result / true 验证通过\n * result / false 验证不通过,message为失败描述(使用富文本渲染)\n * ```\n */\nexport const validateXML = (xmlContent: string) => {\n // errorCode 0是xml正确,1是xml错误,2是无法验证\n let errorCode = 0;\n let errorMessage;\n // code for IE\n if (window['ActiveXObject']) {\n const xmlDoc = new window['ActiveXObject']('Microsoft.XMLDOM');\n xmlDoc.async = 'false';\n xmlDoc.loadXML(xmlContent);\n\n if (xmlDoc.parseError.errorCode != 0) {\n errorMessage = `错误code: ${xmlDoc.parseError.errorCode} \\n`;\n errorMessage = `${errorMessage} 错误原因: ${xmlDoc.parseError.reason} \\n`;\n errorMessage = `${errorMessage} 错误位置: ${xmlDoc.parseError.line}`;\n errorCode = 1;\n } else {\n errorMessage = '格式正确';\n }\n }\n // code for Mozilla, Firefox, Opera, chrome, safari,etc.\n else if (document.implementation['createDocument']) {\n const parser = new DOMParser();\n const xmlDoc = parser.parseFromString(xmlContent, 'text/xml');\n const error = xmlDoc.getElementsByTagName('parsererror');\n if (error.length > 0) {\n if (xmlDoc.documentElement.nodeName == 'parsererror') {\n errorCode = 1;\n errorMessage = xmlDoc.documentElement.childNodes[0].nodeValue;\n } else {\n errorCode = 1;\n errorMessage = xmlDoc.getElementsByTagName('parsererror')[0].innerHTML;\n }\n } else {\n errorMessage = '格式正确';\n }\n } else {\n errorCode = 2;\n errorMessage = '浏览器不支持验证,无法验证xml正确性';\n }\n return {\n message: errorMessage,\n result: errorCode == 0 ? true : false,\n };\n};\n","import { isObject } from '@dimjs/lang';\nimport { isUndefinedOrNull, type TAny, type TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\n\nimport { Space } from 'antd';\nimport { CSSProperties, ReactElement, useMemo, useRef, useState } from 'react';\nimport Ace, { type IAceEditorProps } from 'react-ace';\nimport xmlFormat from 'xml-formatter';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { ErrorBoundaryWrapper } from '../error-boundary-wrapper';\nimport { FlexLayout } from '../flex-layout';\nimport { validateXML } from './validate-xml';\n\nimport 'ace-builds/src-noconflict/ext-language_tools';\nimport 'ace-builds/src-noconflict/mode-xml';\nimport 'ace-builds/src-noconflict/snippets/xml';\n\nexport type AceEditorXmlProps = Omit<IAceEditorProps, 'mode' | 'value' | 'onChange' | 'theme'> & {\n /** 编辑器高度,默认值:100%,可输入值例如 300px、100% */\n height?: string;\n value?: string | TPlainObject | TPlainObject[];\n onChange?: (value?: string | TPlainObject | TPlainObject[]) => void;\n /** 配置输入自动提示关键字 */\n autoCompleterList?: { name: string; desc?: string }[];\n /** 隐藏【验证数据】按钮 */\n hiddenVerifyBtn?: boolean;\n /** 是否隐藏内部验证异常文案 */\n hiddenErrorMsg?: boolean;\n /** 隐藏【美化】按钮 */\n hiddenFormatterBtn?: boolean;\n /**\n * 编辑器主题配置,例如:github、terminal、xcode\n * ```\n * 1. 顶部引入 import 'ace-builds/src-noconflict/theme-xxxx';\n * 2. 配置 theme = xxxx\n * ```\n */\n theme?: string;\n /** 底部额外布局 */\n footerExtraRender?: (children: ReactElement) => ReactElement;\n footerStyle?: CSSProperties;\n};\n\n/**\n * xml编辑器\n * ```\n * 1. 受控组件,需要使用value、onChange配合显示数据\n * 2. heigth 默认为100%,如果外层无高度,需要自定义设置height属性\n * 3. 通过 autoCompleterList 配置自动提示关键字\n * 4. 通过 hiddenVerifyBtn、hiddenFormatterBtn可隐藏底部操作按钮\n * 5. 通过 theme 配置编辑器主题,例如:\n * 5.1 顶部引入 import 'ace-builds/src-noconflict/theme-xxxx';\n * 5.2 配置 theme = xxxx\n * ```\n */\nexport const AceEditorXml = (props: AceEditorXmlProps) => {\n const {\n value,\n onChange,\n height,\n hiddenVerifyBtn,\n hiddenFormatterBtn,\n autoCompleterList,\n onLoad,\n hiddenErrorMsg,\n ...otherProps\n } = props;\n const heightFt = isUndefinedOrNull(height) ? '100%' : height;\n\n const [rootNodekey, setRootNodekey] = useState(Date.now());\n const [errorMsg, setErrorMsg] = useState<string>();\n\n const editorRef = useRef<TAny>();\n\n const valueNew = useMemo(() => {\n if (isObject(value)) {\n return JSON.stringify(value, null, 2);\n }\n return value as string | undefined;\n }, [value]);\n\n const handleChange = hooks.useCallbackRef((content: string) => {\n if (errorMsg) {\n setErrorMsg(undefined);\n }\n onChange?.(content);\n });\n\n const getCompletions = hooks.useCallbackRef((_a, _b, _c, _d, callback) => {\n callback(\n null,\n autoCompleterList?.map((item) => ({\n name: item.name,\n value: item.name,\n // score: 100,\n meta: item.desc,\n })),\n );\n });\n\n const onLoadHandle = (editor) => {\n editorRef.current = editor;\n /** 向编辑器中添加自动补全列表 */\n const findIndex = editor.completers.findIndex((item) => item.id === 'custom');\n if (findIndex >= 0) {\n editor.completers[findIndex] = { getCompletions, id: 'custom' };\n } else {\n editor.completers.push({ getCompletions, id: 'custom' });\n }\n onLoad?.(editor);\n };\n\n const inputValueVerify = (inputValue: string) => {\n const result = validateXML(inputValue);\n if (result.result) {\n onChange?.(inputValue);\n } else {\n setErrorMsg(result.message);\n }\n };\n\n const footer = (\n <Space style={{ alignItems: 'flex-start' }}>\n <ButtonWrapper\n hidden={hiddenFormatterBtn === true}\n type=\"primary\"\n ghost\n onClick={() => {\n const currentValue = editorRef.current?.getValue();\n onChange?.(xmlFormat(currentValue || ''));\n }}\n >\n 美化\n </ButtonWrapper>\n <ButtonWrapper\n hidden={hiddenVerifyBtn === true}\n type=\"primary\"\n ghost\n onClick={() => {\n const currentValue = editorRef.current?.getValue();\n if (!currentValue) {\n onChange?.(currentValue);\n return;\n }\n inputValueVerify(currentValue);\n }}\n >\n 验证&格式化数据\n </ButtonWrapper>\n {!hiddenErrorMsg && errorMsg ? (\n <span style={{ color: 'red' }} dangerouslySetInnerHTML={{ __html: errorMsg }}></span>\n ) : null}\n </Space>\n );\n\n return (\n <FlexLayout fullIndex={0} className=\"ace-editor-xml\" key={rootNodekey} style={{ height: heightFt }}>\n <div className=\"aex-content\">\n <ErrorBoundaryWrapper\n onRenderReset={() => {\n onChange?.(undefined);\n setRootNodekey(Date.now());\n }}\n >\n <Ace\n fontSize={14}\n showPrintMargin={true}\n showGutter={true}\n highlightActiveLine={true}\n height=\"100%\"\n width=\"auto\"\n placeholder=\"请输入\"\n {...otherProps}\n setOptions={{\n useWorker: false,\n enableBasicAutocompletion: false,\n enableLiveAutocompletion: true,\n enableSnippets: false,\n showLineNumbers: true,\n tabSize: 2,\n ...otherProps.setOptions,\n }}\n mode=\"xml\"\n onLoad={onLoadHandle}\n onChange={handleChange}\n onBlur={(_event, editor) => {\n const value = editor?.getValue();\n if (value) {\n inputValueVerify(value);\n }\n }}\n value={valueNew}\n />\n </ErrorBoundaryWrapper>\n </div>\n <div className=\"ace-editor-xml-footer\" style={{ marginTop: 10, ...props.footerStyle }}>\n {props.footerExtraRender ? props.footerExtraRender(footer) : footer}\n </div>\n </FlexLayout>\n );\n};\n"],"names":["validateXML","xmlContent","errorCode","errorMessage","window","xmlDoc","async","loadXML","parseError","reason","line","document","implementation","parser","DOMParser","parseFromString","error","getElementsByTagName","length","documentElement","nodeName","childNodes","nodeValue","innerHTML","message","result","AceEditorXml","props","value","onChange","height","hiddenVerifyBtn","hiddenFormatterBtn","autoCompleterList","onLoad","hiddenErrorMsg","otherProps","_objectWithoutPropertiesLoose","_excluded","heightFt","isUndefinedOrNull","_useState","useState","Date","now","rootNodekey","setRootNodekey","_useState2","errorMsg","setErrorMsg","editorRef","useRef","valueNew","useMemo","_isObject","JSON","stringify","handleChange","_hooks","useCallbackRef","content","undefined","getCompletions","_a","_b","_c","_d","callback","map","item","name","meta","desc","onLoadHandle","editor","current","findIndex","completers","id","push","inputValueVerify","inputValue","footer","_jsxs","Space","style","alignItems","children","_jsx","ButtonWrapper","hidden","type","ghost","onClick","_editorRef$current","currentValue","getValue","xmlFormat","_editorRef$current2","color","dangerouslySetInnerHTML","__html","FlexLayout","fullIndex","className","ErrorBoundaryWrapper","onRenderReset","Ace","_extends","fontSize","showPrintMargin","showGutter","highlightActiveLine","width","placeholder","setOptions","useWorker","enableBasicAutocompletion","enableLiveAutocompletion","enableSnippets","showLineNumbers","tabSize","mode","onBlur","_event","marginTop","footerStyle","footerExtraRender"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/ace-editor-xml/validate-xml.ts","@flatbiz/antd/src/ace-editor-xml/editor.tsx"],"sourcesContent":["/**\n * 验证xml格式的正确性\n * ```\n * result / true 验证通过\n * result / false 验证不通过,message为失败描述(使用富文本渲染)\n * ```\n */\nexport const validateXML = (xmlContent: string) => {\n // errorCode 0是xml正确,1是xml错误,2是无法验证\n let errorCode = 0;\n let errorMessage;\n // code for IE\n if (window['ActiveXObject']) {\n const xmlDoc = new window['ActiveXObject']('Microsoft.XMLDOM');\n xmlDoc.async = 'false';\n xmlDoc.loadXML(xmlContent);\n\n if (xmlDoc.parseError.errorCode != 0) {\n errorMessage = `错误code: ${xmlDoc.parseError.errorCode} \\n`;\n errorMessage = `${errorMessage} 错误原因: ${xmlDoc.parseError.reason} \\n`;\n errorMessage = `${errorMessage} 错误位置: ${xmlDoc.parseError.line}`;\n errorCode = 1;\n } else {\n errorMessage = '格式正确';\n }\n }\n // code for Mozilla, Firefox, Opera, chrome, safari,etc.\n else if (document.implementation['createDocument']) {\n const parser = new DOMParser();\n const xmlDoc = parser.parseFromString(xmlContent, 'text/xml');\n const error = xmlDoc.getElementsByTagName('parsererror');\n if (error.length > 0) {\n if (xmlDoc.documentElement.nodeName == 'parsererror') {\n errorCode = 1;\n errorMessage = xmlDoc.documentElement.childNodes[0].nodeValue;\n } else {\n errorCode = 1;\n errorMessage = xmlDoc.getElementsByTagName('parsererror')[0].innerHTML;\n }\n } else {\n errorMessage = '格式正确';\n }\n } else {\n errorCode = 2;\n errorMessage = '浏览器不支持验证,无法验证xml正确性';\n }\n return {\n message: errorMessage,\n result: errorCode == 0 ? true : false,\n };\n};\n","import { isObject } from '@dimjs/lang';\nimport { isUndefinedOrNull, type TAny, type TPlainObject } from '@flatbiz/utils';\nimport { hooks } from '@wove/react';\n\nimport { Space } from 'antd';\nimport { CSSProperties, ReactElement, useMemo, useRef, useState } from 'react';\nimport Ace, { type IAceEditorProps } from 'react-ace';\nimport xmlFormat from 'xml-formatter';\nimport { ButtonWrapper } from '../button-wrapper';\nimport { ErrorBoundaryWrapper } from '../error-boundary-wrapper';\nimport { FlexLayout } from '../flex-layout';\nimport { validateXML } from './validate-xml';\n\nimport 'ace-builds/src-noconflict/ext-language_tools';\nimport 'ace-builds/src-noconflict/mode-xml';\nimport 'ace-builds/src-noconflict/snippets/xml';\n\nexport type AceEditorXmlProps = Omit<IAceEditorProps, 'mode' | 'value' | 'onChange' | 'theme'> & {\n /** 编辑器高度,默认值:100%,可输入值例如 300px、100% */\n height?: string;\n value?: string | TPlainObject | TPlainObject[];\n onChange?: (value?: string | TPlainObject | TPlainObject[]) => void;\n /** 配置输入自动提示关键字 */\n autoCompleterList?: { name: string; desc?: string }[];\n /** 隐藏【验证数据】按钮 */\n hiddenVerifyBtn?: boolean;\n /** 是否隐藏内部验证异常文案 */\n hiddenErrorMsg?: boolean;\n /** 隐藏【美化】按钮 */\n hiddenFormatterBtn?: boolean;\n /**\n * 编辑器主题配置,例如:github、terminal、xcode\n * ```\n * 1. 顶部引入 import 'ace-builds/src-noconflict/theme-xxxx';\n * 2. 配置 theme = xxxx\n * ```\n */\n theme?: string;\n /** 底部额外布局 */\n footerExtraRender?: (children: ReactElement) => ReactElement;\n footerStyle?: CSSProperties;\n};\n\n/**\n * xml编辑器\n * ```\n * 1. 受控组件,需要使用value、onChange配合显示数据\n * 2. heigth 默认为100%,如果外层无高度,需要自定义设置height属性\n * 3. 通过 autoCompleterList 配置自动提示关键字\n * 4. 通过 hiddenVerifyBtn、hiddenFormatterBtn可隐藏底部操作按钮\n * 5. 通过 theme 配置编辑器主题,例如:\n * 5.1 顶部引入 import 'ace-builds/src-noconflict/theme-xxxx';\n * 5.2 配置 theme = xxxx\n * ```\n */\nexport const AceEditorXml = (props: AceEditorXmlProps) => {\n const {\n value,\n onChange,\n height,\n hiddenVerifyBtn,\n hiddenFormatterBtn,\n autoCompleterList,\n onLoad,\n hiddenErrorMsg,\n ...otherProps\n } = props;\n const heightFt = isUndefinedOrNull(height) ? '100%' : height;\n\n const [rootNodekey, setRootNodekey] = useState(Date.now());\n const [errorMsg, setErrorMsg] = useState<string>();\n\n const editorRef = useRef<TAny>();\n\n const valueNew = useMemo(() => {\n if (isObject(value)) {\n return JSON.stringify(value, null, 2);\n }\n return value as string | undefined;\n }, [value]);\n\n const handleChange = hooks.useCallbackRef((content: string) => {\n if (errorMsg) {\n setErrorMsg(undefined);\n }\n onChange?.(content);\n });\n\n const getCompletions = hooks.useCallbackRef((_a, _b, _c, _d, callback) => {\n callback(\n null,\n autoCompleterList?.map((item) => ({\n name: item.name,\n value: item.name,\n // score: 100,\n meta: item.desc,\n })),\n );\n });\n\n const onLoadHandle = (editor) => {\n editorRef.current = editor;\n /** 向编辑器中添加自动补全列表 */\n const findIndex = editor.completers.findIndex((item) => item.id === 'custom');\n if (findIndex >= 0) {\n editor.completers[findIndex] = { getCompletions, id: 'custom' };\n } else {\n editor.completers.push({ getCompletions, id: 'custom' });\n }\n onLoad?.(editor);\n };\n\n const inputValueVerify = (inputValue: string) => {\n const result = validateXML(inputValue);\n if (result.result) {\n onChange?.(inputValue);\n } else {\n setErrorMsg(result.message);\n }\n };\n\n const footer = (\n <Space style={{ alignItems: 'flex-start' }}>\n <ButtonWrapper\n hidden={hiddenFormatterBtn === true}\n type=\"primary\"\n ghost\n onClick={() => {\n const currentValue = editorRef.current?.getValue();\n onChange?.(xmlFormat(currentValue || ''));\n }}\n >\n 美化\n </ButtonWrapper>\n <ButtonWrapper\n hidden={hiddenVerifyBtn === true}\n type=\"primary\"\n ghost\n onClick={() => {\n const currentValue = editorRef.current?.getValue();\n if (!currentValue) {\n onChange?.(currentValue);\n return;\n }\n inputValueVerify(currentValue);\n }}\n >\n 验证&格式化数据\n </ButtonWrapper>\n {!hiddenErrorMsg && errorMsg ? (\n <span style={{ color: 'red' }} dangerouslySetInnerHTML={{ __html: errorMsg }}></span>\n ) : null}\n </Space>\n );\n\n return (\n <FlexLayout fullIndex={0} className=\"ace-editor-xml\" key={rootNodekey} style={{ height: heightFt }}>\n <div className=\"aex-content\">\n <ErrorBoundaryWrapper\n onRenderReset={() => {\n onChange?.(undefined);\n setRootNodekey(Date.now());\n }}\n >\n <Ace\n fontSize={14}\n showPrintMargin={true}\n showGutter={true}\n highlightActiveLine={true}\n height=\"100%\"\n width=\"auto\"\n placeholder=\"请输入\"\n {...otherProps}\n setOptions={{\n useWorker: false,\n enableBasicAutocompletion: false,\n enableLiveAutocompletion: true,\n enableSnippets: false,\n showLineNumbers: true,\n tabSize: 2,\n ...otherProps.setOptions,\n }}\n mode=\"xml\"\n onLoad={onLoadHandle}\n onChange={handleChange}\n onBlur={(_event, editor) => {\n const value = editor?.getValue();\n if (value) {\n inputValueVerify(value);\n }\n }}\n value={valueNew}\n />\n </ErrorBoundaryWrapper>\n </div>\n <div className=\"ace-editor-xml-footer\" style={{ marginTop: 10, ...props.footerStyle }}>\n {props.footerExtraRender ? props.footerExtraRender(footer) : footer}\n </div>\n </FlexLayout>\n );\n};\n"],"names":["validateXML","xmlContent","errorCode","errorMessage","window","xmlDoc","async","loadXML","parseError","reason","line","document","implementation","parser","DOMParser","parseFromString","error","getElementsByTagName","length","documentElement","nodeName","childNodes","nodeValue","innerHTML","message","result","AceEditorXml","props","value","onChange","height","hiddenVerifyBtn","hiddenFormatterBtn","autoCompleterList","onLoad","hiddenErrorMsg","otherProps","_objectWithoutPropertiesLoose","_excluded","heightFt","isUndefinedOrNull","_useState","useState","Date","now","rootNodekey","setRootNodekey","_useState2","errorMsg","setErrorMsg","editorRef","useRef","valueNew","useMemo","_isObject","JSON","stringify","handleChange","_hooks","useCallbackRef","content","undefined","getCompletions","_a","_b","_c","_d","callback","map","item","name","meta","desc","onLoadHandle","editor","current","findIndex","completers","id","push","inputValueVerify","inputValue","footer","_jsxs","Space","style","alignItems","children","_jsx","ButtonWrapper","hidden","type","ghost","onClick","_editorRef$current","currentValue","getValue","xmlFormat","_editorRef$current2","color","dangerouslySetInnerHTML","__html","FlexLayout","fullIndex","className","ErrorBoundaryWrapper","onRenderReset","Ace","_extends","fontSize","showPrintMargin","showGutter","highlightActiveLine","width","placeholder","setOptions","useWorker","enableBasicAutocompletion","enableLiveAutocompletion","enableSnippets","showLineNumbers","tabSize","mode","onBlur","_event","marginTop","footerStyle","footerExtraRender"],"mappings":"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"}
@@ -2,5 +2,5 @@
2
2
  import './../gap/index.css';
3
3
  import './index.css';
4
4
  /*! @flatjs/forge MIT @flatbiz/antd */
5
- import{classNames as e}from"@dimjs/utils/cjs/class-names";import{Anchor as t,Steps as r}from"antd";import{useState as n,useRef as i}from"react";import{Gap as a}from"../gap/index.js";import{jsxs as o,jsx as s}from"react/jsx-runtime";import"../_rollupPluginBabelHelpers-c0dbec57.js";function c(e){var t=1;return e.tagName!=="HTML"&&e.tagName!=="BODY"&&e.nodeType===t}function u(e){var t=e;while(t&&c(t)){var r=window.getComputedStyle(t),n=r.overflowY;if(/scroll|auto/i.test(n)){return t}t=t.parentNode}return undefined}var f=function c(f){var l=n(),d=l[0],m=l[1];var p=i();var v=function e(t){if(t){m(t.replace("#vas-",""))}};var h=function e(){return u(p.current)||window};var g=function e(t){if(t){p.current=t}};return o("div",{className:e("v-anchor-steps",f.className),ref:g,children:[s(t,{onChange:v,className:"v-fixed-anchor",onClick:function e(t){t.preventDefault()},affix:false,getContainer:h,children:s(r,{size:"small",direction:"vertical",current:f.steps.findIndex((function(e){return e.id===d})),items:f.steps.map((function(e){return{title:s(t.Link,{href:"#vas-"+e.id,title:e.title}),description:s(a,{height:20}),status:e.id===d?"process":"wait"}}))})}),f.steps.map((function(e){return s("div",{id:"vas-"+e.id,children:e.content},e.id)}))]})};export{f as AnchorSteps};
5
+ import{classNames as e}from"@dimjs/utils/cjs/class-names";import{Anchor as t,Steps as r}from"antd";import{useState as n,useRef as i}from"react";import{Gap as a}from"../gap/index.js";import{jsxs as o,jsx as s}from"react/jsx-runtime";import"../_rollupPluginBabelHelpers-c0dbec57.js";function c(e){var t=1;return e.tagName!=="HTML"&&e.tagName!=="BODY"&&e.nodeType===t}function u(e){var t=e;while(t&&c(t)){var r=window.getComputedStyle(t),n=r.overflowY;if(/scroll|auto/i.test(n)){return t}t=t.parentNode}return undefined}var f=function c(f){var l=n(),d=l[0],m=l[1];var p=i();var v=function e(t){if(t){m(t.replace("#vas-",""))}};var h=function e(){return u(p.current)||window};var g=function e(t){if(t){p.current=t}};return o("div",{className:e("v-anchor-steps",f.className),ref:g,children:[s(t,{onChange:v,className:"v-fixed-anchor",onClick:function e(t){t.preventDefault()},affix:false,getContainer:h,children:s(r,{size:"small",direction:"vertical",current:f.steps.findIndex(function(e){return e.id===d}),items:f.steps.map(function(e){return{title:s(t.Link,{href:"#vas-"+e.id,title:e.title}),description:s(a,{height:20}),status:e.id===d?"process":"wait"}})})}),f.steps.map(function(e){return s("div",{id:"vas-"+e.id,children:e.content},e.id)})]})};export{f as AnchorSteps};
6
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/anchor-steps/anchor-steps.tsx"],"sourcesContent":["import { classNames } from '@dimjs/utils';\nimport { Anchor, Steps } from 'antd';\nimport { ReactElement, useRef, useState } from 'react';\nimport { Gap } from '../gap';\nimport './style.less';\n\nfunction isElement(node: Element) {\n const ELEMENT_NODE_TYPE = 1;\n return node.tagName !== 'HTML' && node.tagName !== 'BODY' && node.nodeType === ELEMENT_NODE_TYPE;\n}\n\nfunction getParentScroll(el: HTMLElement) {\n let node = el;\n\n while (node && isElement(node)) {\n const { overflowY } = window.getComputedStyle(node);\n if (/scroll|auto/i.test(overflowY)) {\n return node;\n }\n node = node.parentNode as HTMLElement;\n }\n return undefined;\n}\n\nexport type AnchorStepsProps = {\n steps: {\n id: string;\n title: string;\n content: ReactElement;\n }[];\n className?: string;\n};\n\n/**\n * 锚点步骤组件\n * @param props\n * @returns\n */\nexport const AnchorSteps = (props: AnchorStepsProps) => {\n const [activeKey, setActiveKey] = useState<string>();\n const rootNode = useRef<HTMLDivElement>();\n\n const onChange = (link: string) => {\n if (link) {\n setActiveKey(link.replace('#vas-', ''));\n }\n };\n\n const getContainer = () => {\n return getParentScroll(rootNode.current as HTMLElement) || (window as Window);\n };\n const refHandle = (node) => {\n if (node) {\n rootNode.current = node;\n }\n };\n\n return (\n <div className={classNames('v-anchor-steps', props.className)} ref={refHandle}>\n <Anchor\n onChange={onChange}\n className=\"v-fixed-anchor\"\n onClick={(e) => {\n e.preventDefault();\n }}\n affix={false}\n getContainer={getContainer}\n >\n <Steps\n size=\"small\"\n direction=\"vertical\"\n current={props.steps.findIndex((item) => item.id === activeKey)}\n items={props.steps.map((item) => {\n return {\n title: <Anchor.Link href={`#vas-${item.id}`} title={item.title} />,\n description: <Gap height={20} />,\n status: item.id === activeKey ? 'process' : 'wait',\n };\n })}\n />\n </Anchor>\n {props.steps.map((item) => {\n return (\n <div id={`vas-${item.id}`} key={item.id}>\n {item.content}\n </div>\n );\n })}\n </div>\n );\n};\n"],"names":["isElement","node","ELEMENT_NODE_TYPE","tagName","nodeType","getParentScroll","el","_window$getComputedSt","window","getComputedStyle","overflowY","test","parentNode","undefined","AnchorSteps","props","_useState","useState","activeKey","setActiveKey","rootNode","useRef","onChange","link","replace","getContainer","current","refHandle","_jsxs","className","_classNames","ref","children","_jsx","Anchor","onClick","e","preventDefault","affix","Steps","size","direction","steps","findIndex","item","id","items","map","title","Link","href","description","Gap","height","status","content"],"mappings":";yRAMA,SAASA,EAAUC,GACjB,IAAMC,EAAoB,EAC1B,OAAOD,EAAKE,UAAY,QAAUF,EAAKE,UAAY,QAAUF,EAAKG,WAAaF,CACjF,CAEA,SAASG,EAAgBC,GACvB,IAAIL,EAAOK,EAEX,MAAOL,GAAQD,EAAUC,GAAO,CAC9B,IAAAM,EAAsBC,OAAOC,iBAAiBR,GAAtCS,EAASH,EAATG,UACR,GAAI,eAAeC,KAAKD,GAAY,CAClC,OAAOT,CACT,CACAA,EAAOA,EAAKW,UACd,CACA,OAAOC,SACT,KAgBaC,EAAc,SAAdA,EAAeC,GAC1B,IAAAC,EAAkCC,IAA3BC,EAASF,EAAA,GAAEG,EAAYH,EAAA,GAC9B,IAAMI,EAAWC,IAEjB,IAAMC,EAAW,SAAXA,EAAYC,GAChB,GAAIA,EAAM,CACRJ,EAAaI,EAAKC,QAAQ,QAAS,IACrC,GAGF,IAAMC,EAAe,SAAfA,IACJ,OAAOpB,EAAgBe,EAASM,UAA4BlB,QAE9D,IAAMmB,EAAY,SAAZA,EAAa1B,GACjB,GAAIA,EAAM,CACRmB,EAASM,QAAUzB,CACrB,GAGF,OACE2B,EAAA,MAAA,CAAKC,UAAWC,EAAW,iBAAkBf,EAAMc,WAAYE,IAAKJ,EAAUK,SAAA,CAC5EC,EAACC,EAAM,CACLZ,SAAUA,EACVO,UAAU,iBACVM,QAAS,SAATA,EAAUC,GACRA,EAAEC,gBACF,EACFC,MAAO,MACPb,aAAcA,EAAaO,SAE3BC,EAACM,EAAK,CACJC,KAAK,QACLC,UAAU,WACVf,QAASX,EAAM2B,MAAMC,WAAU,SAACC,GAAI,OAAKA,EAAKC,KAAO3B,KACrD4B,MAAO/B,EAAM2B,MAAMK,KAAI,SAACH,GACtB,MAAO,CACLI,MAAOf,EAACC,EAAOe,KAAI,CAACC,KAAI,QAAUN,EAAKC,GAAMG,MAAOJ,EAAKI,QACzDG,YAAalB,EAACmB,EAAG,CAACC,OAAQ,KAC1BC,OAAQV,EAAKC,KAAO3B,EAAY,UAAY,eAKnDH,EAAM2B,MAAMK,KAAI,SAACH,GAChB,OACEX,EAAA,MAAA,CAAKY,GAAE,OAASD,EAAKC,GAAKb,SACvBY,EAAKW,SADwBX,EAAKC,GAIzC,MAGN"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/anchor-steps/anchor-steps.tsx"],"sourcesContent":["import { classNames } from '@dimjs/utils';\nimport { Anchor, Steps } from 'antd';\nimport { ReactElement, useRef, useState } from 'react';\nimport { Gap } from '../gap';\nimport './style.less';\n\nfunction isElement(node: Element) {\n const ELEMENT_NODE_TYPE = 1;\n return node.tagName !== 'HTML' && node.tagName !== 'BODY' && node.nodeType === ELEMENT_NODE_TYPE;\n}\n\nfunction getParentScroll(el: HTMLElement) {\n let node = el;\n\n while (node && isElement(node)) {\n const { overflowY } = window.getComputedStyle(node);\n if (/scroll|auto/i.test(overflowY)) {\n return node;\n }\n node = node.parentNode as HTMLElement;\n }\n return undefined;\n}\n\nexport type AnchorStepsProps = {\n steps: {\n id: string;\n title: string;\n content: ReactElement;\n }[];\n className?: string;\n};\n\n/**\n * 锚点步骤组件\n * @param props\n * @returns\n */\nexport const AnchorSteps = (props: AnchorStepsProps) => {\n const [activeKey, setActiveKey] = useState<string>();\n const rootNode = useRef<HTMLDivElement>();\n\n const onChange = (link: string) => {\n if (link) {\n setActiveKey(link.replace('#vas-', ''));\n }\n };\n\n const getContainer = () => {\n return getParentScroll(rootNode.current as HTMLElement) || (window as Window);\n };\n const refHandle = (node) => {\n if (node) {\n rootNode.current = node;\n }\n };\n\n return (\n <div className={classNames('v-anchor-steps', props.className)} ref={refHandle}>\n <Anchor\n onChange={onChange}\n className=\"v-fixed-anchor\"\n onClick={(e) => {\n e.preventDefault();\n }}\n affix={false}\n getContainer={getContainer}\n >\n <Steps\n size=\"small\"\n direction=\"vertical\"\n current={props.steps.findIndex((item) => item.id === activeKey)}\n items={props.steps.map((item) => {\n return {\n title: <Anchor.Link href={`#vas-${item.id}`} title={item.title} />,\n description: <Gap height={20} />,\n status: item.id === activeKey ? 'process' : 'wait',\n };\n })}\n />\n </Anchor>\n {props.steps.map((item) => {\n return (\n <div id={`vas-${item.id}`} key={item.id}>\n {item.content}\n </div>\n );\n })}\n </div>\n );\n};\n"],"names":["isElement","node","ELEMENT_NODE_TYPE","tagName","nodeType","getParentScroll","el","_window$getComputedSt","window","getComputedStyle","overflowY","test","parentNode","undefined","AnchorSteps","props","_useState","useState","activeKey","setActiveKey","rootNode","useRef","onChange","link","replace","getContainer","current","refHandle","_jsxs","className","_classNames","ref","children","_jsx","Anchor","onClick","e","preventDefault","affix","Steps","size","direction","steps","findIndex","item","id","items","map","title","Link","href","description","Gap","height","status","content"],"mappings":";yRAMA,SAASA,EAAUC,GACjB,IAAMC,EAAoB,EAC1B,OAAOD,EAAKE,UAAY,QAAUF,EAAKE,UAAY,QAAUF,EAAKG,WAAaF,CACjF,CAEA,SAASG,EAAgBC,GACvB,IAAIL,EAAOK,EAEX,MAAOL,GAAQD,EAAUC,GAAO,CAC9B,IAAAM,EAAsBC,OAAOC,iBAAiBR,GAAtCS,EAASH,EAATG,UACR,GAAI,eAAeC,KAAKD,GAAY,CAClC,OAAOT,CACT,CACAA,EAAOA,EAAKW,UACd,CACA,OAAOC,SACT,KAgBaC,EAAc,SAAdA,EAAeC,GAC1B,IAAAC,EAAkCC,IAA3BC,EAASF,EAAA,GAAEG,EAAYH,EAAA,GAC9B,IAAMI,EAAWC,IAEjB,IAAMC,EAAW,SAAXA,EAAYC,GAChB,GAAIA,EAAM,CACRJ,EAAaI,EAAKC,QAAQ,QAAS,IACrC,GAGF,IAAMC,EAAe,SAAfA,IACJ,OAAOpB,EAAgBe,EAASM,UAA4BlB,QAE9D,IAAMmB,EAAY,SAAZA,EAAa1B,GACjB,GAAIA,EAAM,CACRmB,EAASM,QAAUzB,CACrB,GAGF,OACE2B,EAAA,MAAA,CAAKC,UAAWC,EAAW,iBAAkBf,EAAMc,WAAYE,IAAKJ,EAAUK,SAAA,CAC5EC,EAACC,EAAM,CACLZ,SAAUA,EACVO,UAAU,iBACVM,QAAS,SAATA,EAAUC,GACRA,EAAEC,gBACF,EACFC,MAAO,MACPb,aAAcA,EAAaO,SAE3BC,EAACM,EAAK,CACJC,KAAK,QACLC,UAAU,WACVf,QAASX,EAAM2B,MAAMC,UAAU,SAACC,GAAI,OAAKA,EAAKC,KAAO3B,IACrD4B,MAAO/B,EAAM2B,MAAMK,IAAI,SAACH,GACtB,MAAO,CACLI,MAAOf,EAACC,EAAOe,KAAI,CAACC,KAAI,QAAUN,EAAKC,GAAMG,MAAOJ,EAAKI,QACzDG,YAAalB,EAACmB,EAAG,CAACC,OAAQ,KAC1BC,OAAQV,EAAKC,KAAO3B,EAAY,UAAY,cAKnDH,EAAM2B,MAAMK,IAAI,SAACH,GAChB,OACEX,EAAA,MAAA,CAAKY,GAAE,OAASD,EAAKC,GAAKb,SACvBY,EAAKW,SADwBX,EAAKC,GAIzC,KAGN"}
@@ -9,5 +9,5 @@ import './../flex-layout/index.css';
9
9
  import './../block-layout/index.css';
10
10
  import './index.css';
11
11
  /*! @flatjs/forge MIT @flatbiz/antd */
12
- import{_ as o}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{get as r}from"@dimjs/utils/cjs/get";import{toArray as i}from"@flatbiz/utils";import{theme as t,App as e}from"antd";import{useEffect as a}from"react";import{C as l}from"../index-83bede1b.js";import{FbaApp as s}from"../fba-app/index.js";import{fbaHooks as m}from"../fba-hooks/index.js";import{jsx as c}from"react/jsx-runtime";import"antd/es/locale/en_US";import"antd/es/locale/zh_CN";import"dayjs";import"dayjs/locale/en";import"dayjs/locale/zh-cn";import"dayjs/plugin/advancedFormat";import"dayjs/plugin/customParseFormat";import"dayjs/plugin/localeData";import"dayjs/plugin/utc";import"dayjs/plugin/weekday";import"dayjs/plugin/weekOfYear";import"dayjs/plugin/weekYear";import"@dimjs/utils/cjs/extend";import"../fba-utils/index.js";import"@dimjs/lang/cjs/is-array";import"@dimjs/model";import"@wove/react/cjs/hooks";import"@dimjs/utils/cjs/class-names";import"@dimjs/lang/cjs/is-promise";import"ahooks";import"../button-wrapper/index.js";import"@ant-design/icons/es/icons/LoadingOutlined";import"../flex-layout/index.js";import"@wove/react/cjs/create-ctx";import"../block-layout/index.js";import"../use-responsive-point-21b8c601.js";import"@dimjs/utils/cjs/uuid";var d=function d(n){var p,g;a((function(){var o=document.body.style.cssText;var i={};if(o){var t=/(.+?):\s*(.+?);/g;var e;while(e=t.exec(o)){var a=e[1].trim();var l=e[2];i[a]=l}}if(n.dark){i["--bg-color"]=r(n,"bgColorConfig.dark.bgColor","#1b1a1a");i["--block-bg-color"]=r(n,"bgColorConfig.dark.blockBgColor","#000")}else{i["--bg-color"]=r(n,"bgColorConfig.light.bgColor","#f9f9f9");i["--block-bg-color"]=r(n,"bgColorConfig.light.blockBgColor","#FFF")}var s="";Object.keys(i).forEach((function(o){if(i[o]){s=s+(o+":"+i[o]+";")}}));document.body.style.cssText=s;if(n.dark){document.body.classList.add("dark-theme")}else{document.body.classList.add("light-theme")}if(n.compact){document.body.classList.add("compact-theme")}}),[n.bgColorConfig,n.dark]);var u=m.useThemeToken();var f=(p=n.configProviderProps)==null||(p=p.theme)==null?void 0:p.algorithm;var j=i(f);j=[].concat(j,[n.dark?t.darkAlgorithm:null,n.compact?t.compactAlgorithm:null]).filter(Boolean);return c(l,o({locale:n.locale,componentSize:"middle",space:{size:"middle"}},n.configProviderProps,{theme:o({},(g=n.configProviderProps)==null?void 0:g.theme,{algorithm:j}),children:c(e,{style:{"--color-primary":u.colorPrimary},className:"bootstrap-app",children:c(s,{children:n.children})})}))};export{d as Bootstrap};
12
+ import{_ as o}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{get as r}from"@dimjs/utils/cjs/get";import{toArray as i}from"@flatbiz/utils";import{theme as t,App as e}from"antd";import{useEffect as a}from"react";import{C as l}from"../index-853b36e6.js";import{FbaApp as s}from"../fba-app/index.js";import{fbaHooks as m}from"../fba-hooks/index.js";import{jsx as c}from"react/jsx-runtime";import"antd/es/locale/en_US";import"antd/es/locale/zh_CN";import"dayjs";import"dayjs/locale/en";import"dayjs/locale/zh-cn";import"dayjs/plugin/advancedFormat";import"dayjs/plugin/customParseFormat";import"dayjs/plugin/localeData";import"dayjs/plugin/utc";import"dayjs/plugin/weekday";import"dayjs/plugin/weekOfYear";import"dayjs/plugin/weekYear";import"@dimjs/utils/cjs/extend";import"../fba-utils/index.js";import"@dimjs/lang/cjs/is-array";import"@dimjs/model";import"@wove/react/cjs/hooks";import"@dimjs/utils/cjs/class-names";import"@dimjs/lang/cjs/is-promise";import"ahooks";import"../button-wrapper/index.js";import"@ant-design/icons/es/icons/LoadingOutlined";import"../flex-layout/index.js";import"@wove/react/cjs/create-ctx";import"../block-layout/index.js";import"../use-responsive-point-1e6d93d9.js";import"@dimjs/utils/cjs/uuid";var d=function d(n){var p,g;a(function(){var o=document.body.style.cssText;var i={};if(o){var t=/(.+?):\s*(.+?);/g;var e;while(e=t.exec(o)){var a=e[1].trim();var l=e[2];i[a]=l}}if(n.dark){i["--bg-color"]=r(n,"bgColorConfig.dark.bgColor","#1b1a1a");i["--block-bg-color"]=r(n,"bgColorConfig.dark.blockBgColor","#000")}else{i["--bg-color"]=r(n,"bgColorConfig.light.bgColor","#f9f9f9");i["--block-bg-color"]=r(n,"bgColorConfig.light.blockBgColor","#FFF")}var s="";Object.keys(i).forEach(function(o){if(i[o]){s=s+(o+":"+i[o]+";")}});document.body.style.cssText=s;if(n.dark){document.body.classList.add("dark-theme")}else{document.body.classList.add("light-theme")}if(n.compact){document.body.classList.add("compact-theme")}},[n.bgColorConfig,n.dark]);var u=m.useThemeToken();var f=(p=n.configProviderProps)==null||(p=p.theme)==null?void 0:p.algorithm;var j=i(f);j=[].concat(j,[n.dark?t.darkAlgorithm:null,n.compact?t.compactAlgorithm:null]).filter(Boolean);return c(l,o({locale:n.locale,componentSize:"middle",space:{size:"middle"}},n.configProviderProps,{theme:o({},(g=n.configProviderProps)==null?void 0:g.theme,{algorithm:j}),children:c(e,{style:{"--color-primary":u.colorPrimary},className:"bootstrap-app",children:c(s,{children:n.children})})}))};export{d as Bootstrap};
13
13
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/bootstrap/bootstrap.tsx"],"sourcesContent":["import { get } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { App, theme } from 'antd';\nimport { CSSProperties, ReactNode, useEffect } from 'react';\nimport { ConfigProviderWrapper, ConfigProviderWrapperProps } from '../config-provider-wrapper';\nimport { FbaApp } from '../fba-app';\nimport { fbaHooks } from '../fba-hooks';\nimport './style.less';\n\nexport type BootstrapProps = {\n /** 是否紧凑模式 */\n compact?: boolean;\n /** 是否drak模式 */\n dark?: boolean;\n children: ReactNode;\n configProviderProps?: ConfigProviderWrapperProps;\n /** @default zhCN */\n locale?: 'en' | 'zh-cn';\n /**\n * 背景颜色配置\n * ```\n * 默认值:\n * dark: { bgColor: '#1b1a1a', blockBgColor: '#000' }\n * light: { bgColor: '#f9f9f9', blockBgColor: '#FFF' }\n * ```\n */\n bgColorConfig?: {\n dark?: {\n bgColor?: string;\n blockBgColor?: string;\n };\n light?: {\n bgColor?: string;\n blockBgColor?: string;\n };\n };\n};\n/**\n * 如果当前项目入口不使用@flatbiz/pro-layout,必须使用 Bootstrap 组件包装\n * ```\n * Bootstrap 内部\n * 1. 封装 antd App组件\n * 2. 封装 @flatbiz/antd FbaApp组件\n * 3. 适配 light/dark模式\n * 4. 封装 antd ConfigProvider 可配置主题\n * ```\n */\nexport const Bootstrap = (props: BootstrapProps) => {\n useEffect(() => {\n const bodyStyle = document.body.style.cssText;\n const keyValuePairs = {};\n if (bodyStyle) {\n const regex = /(.+?):\\s*(.+?);/g;\n\n let match;\n while ((match = regex.exec(bodyStyle))) {\n const key = match[1].trim();\n const value = match[2];\n keyValuePairs[key] = value;\n }\n }\n if (props.dark) {\n keyValuePairs['--bg-color'] = get(props, 'bgColorConfig.dark.bgColor', '#1b1a1a');\n keyValuePairs['--block-bg-color'] = get(props, 'bgColorConfig.dark.blockBgColor', '#000');\n } else {\n keyValuePairs['--bg-color'] = get(props, 'bgColorConfig.light.bgColor', '#f9f9f9');\n keyValuePairs['--block-bg-color'] = get(props, 'bgColorConfig.light.blockBgColor', '#FFF');\n }\n let varStyleText = '';\n Object.keys(keyValuePairs).forEach((key) => {\n if (keyValuePairs[key]) {\n varStyleText = varStyleText + `${key}:${keyValuePairs[key]};`;\n }\n });\n document.body.style.cssText = varStyleText;\n\n if (props.dark) {\n document.body.classList.add('dark-theme');\n } else {\n document.body.classList.add('light-theme');\n }\n if (props.compact) {\n document.body.classList.add('compact-theme');\n }\n }, [props.bgColorConfig, props.dark]);\n\n const innerTheme = fbaHooks.useThemeToken();\n\n const algorithm = props.configProviderProps?.theme?.algorithm;\n\n let algorithmArray = toArray<any>(algorithm);\n\n algorithmArray = [\n ...algorithmArray,\n props.dark ? theme.darkAlgorithm : null,\n props.compact ? theme.compactAlgorithm : null,\n ].filter(Boolean);\n\n return (\n <ConfigProviderWrapper\n locale={props.locale}\n componentSize={'middle'}\n space={{ size: 'middle' }}\n {...props.configProviderProps}\n theme={{\n ...props.configProviderProps?.theme,\n algorithm: algorithmArray,\n }}\n >\n <App style={{ '--color-primary': innerTheme.colorPrimary } as CSSProperties} className=\"bootstrap-app\">\n <FbaApp>{props.children}</FbaApp>\n </App>\n </ConfigProviderWrapper>\n );\n};\n"],"names":["Bootstrap","props","_props$configProvider","_props$configProvider2","useEffect","bodyStyle","document","body","style","cssText","keyValuePairs","regex","match","exec","key","trim","value","dark","_get","varStyleText","Object","keys","forEach","classList","add","compact","bgColorConfig","innerTheme","fbaHooks","useThemeToken","algorithm","configProviderProps","theme","algorithmArray","toArray","concat","darkAlgorithm","compactAlgorithm","filter","Boolean","_jsx","ConfigProviderWrapper","_extends","locale","componentSize","space","size","children","App","colorPrimary","className","FbaApp"],"mappings":";mtCA+CaA,EAAY,SAAZA,EAAaC,GAA0B,IAAAC,EAAAC,EAClDC,GAAU,WACR,IAAMC,EAAYC,SAASC,KAAKC,MAAMC,QACtC,IAAMC,EAAgB,CAAA,EACtB,GAAIL,EAAW,CACb,IAAMM,EAAQ,mBAEd,IAAIC,EACJ,MAAQA,EAAQD,EAAME,KAAKR,GAAa,CACtC,IAAMS,EAAMF,EAAM,GAAGG,OACrB,IAAMC,EAAQJ,EAAM,GACpBF,EAAcI,GAAOE,CACvB,CACF,CACA,GAAIf,EAAMgB,KAAM,CACdP,EAAc,cAAgBQ,EAAIjB,EAAO,6BAA8B,WACvES,EAAc,oBAAsBQ,EAAIjB,EAAO,kCAAmC,OACpF,KAAO,CACLS,EAAc,cAAgBQ,EAAIjB,EAAO,8BAA+B,WACxES,EAAc,oBAAsBQ,EAAIjB,EAAO,mCAAoC,OACrF,CACA,IAAIkB,EAAe,GACnBC,OAAOC,KAAKX,GAAeY,SAAQ,SAACR,GAClC,GAAIJ,EAAcI,GAAM,CACtBK,EAAeA,GAAkBL,MAAOJ,EAAcI,GAAO,IAC/D,CACF,IACAR,SAASC,KAAKC,MAAMC,QAAUU,EAE9B,GAAIlB,EAAMgB,KAAM,CACdX,SAASC,KAAKgB,UAAUC,IAAI,aAC9B,KAAO,CACLlB,SAASC,KAAKgB,UAAUC,IAAI,cAC9B,CACA,GAAIvB,EAAMwB,QAAS,CACjBnB,SAASC,KAAKgB,UAAUC,IAAI,gBAC9B,CACD,GAAE,CAACvB,EAAMyB,cAAezB,EAAMgB,OAE/B,IAAMU,EAAaC,EAASC,gBAE5B,IAAMC,GAAS5B,EAAGD,EAAM8B,sBAAmB,OAAA7B,EAAzBA,EAA2B8B,QAA3B9B,UAAAA,EAAAA,EAAkC4B,UAEpD,IAAIG,EAAiBC,EAAaJ,GAElCG,EAAiB,GAAAE,OACZF,EAAc,CACjBhC,EAAMgB,KAAOe,EAAMI,cAAgB,KACnCnC,EAAMwB,QAAUO,EAAMK,iBAAmB,OACzCC,OAAOC,SAET,OACEC,EAACC,EAAqBC,EAAA,CACpBC,OAAQ1C,EAAM0C,OACdC,cAAe,SACfC,MAAO,CAAEC,KAAM,WACX7C,EAAM8B,oBAAmB,CAC7BC,MAAKU,EAAA,IAAAvC,EACAF,EAAM8B,sBAAmB,UAAA,EAAzB5B,EAA2B6B,MAAK,CACnCF,UAAWG,IACXc,SAEFP,EAACQ,EAAG,CAACxC,MAAO,CAAE,kBAAmBmB,EAAWsB,cAAiCC,UAAU,gBAAeH,SACpGP,EAACW,EAAM,CAAAJ,SAAE9C,EAAM8C,eAIvB"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/bootstrap/bootstrap.tsx"],"sourcesContent":["import { get } from '@dimjs/utils';\nimport { toArray } from '@flatbiz/utils';\nimport { App, theme } from 'antd';\nimport { CSSProperties, ReactNode, useEffect } from 'react';\nimport { ConfigProviderWrapper, ConfigProviderWrapperProps } from '../config-provider-wrapper';\nimport { FbaApp } from '../fba-app';\nimport { fbaHooks } from '../fba-hooks';\nimport './style.less';\n\nexport type BootstrapProps = {\n /** 是否紧凑模式 */\n compact?: boolean;\n /** 是否drak模式 */\n dark?: boolean;\n children: ReactNode;\n configProviderProps?: ConfigProviderWrapperProps;\n /** @default zhCN */\n locale?: 'en' | 'zh-cn';\n /**\n * 背景颜色配置\n * ```\n * 默认值:\n * dark: { bgColor: '#1b1a1a', blockBgColor: '#000' }\n * light: { bgColor: '#f9f9f9', blockBgColor: '#FFF' }\n * ```\n */\n bgColorConfig?: {\n dark?: {\n bgColor?: string;\n blockBgColor?: string;\n };\n light?: {\n bgColor?: string;\n blockBgColor?: string;\n };\n };\n};\n/**\n * 如果当前项目入口不使用@flatbiz/pro-layout,必须使用 Bootstrap 组件包装\n * ```\n * Bootstrap 内部\n * 1. 封装 antd App组件\n * 2. 封装 @flatbiz/antd FbaApp组件\n * 3. 适配 light/dark模式\n * 4. 封装 antd ConfigProvider 可配置主题\n * ```\n */\nexport const Bootstrap = (props: BootstrapProps) => {\n useEffect(() => {\n const bodyStyle = document.body.style.cssText;\n const keyValuePairs = {};\n if (bodyStyle) {\n const regex = /(.+?):\\s*(.+?);/g;\n\n let match;\n while ((match = regex.exec(bodyStyle))) {\n const key = match[1].trim();\n const value = match[2];\n keyValuePairs[key] = value;\n }\n }\n if (props.dark) {\n keyValuePairs['--bg-color'] = get(props, 'bgColorConfig.dark.bgColor', '#1b1a1a');\n keyValuePairs['--block-bg-color'] = get(props, 'bgColorConfig.dark.blockBgColor', '#000');\n } else {\n keyValuePairs['--bg-color'] = get(props, 'bgColorConfig.light.bgColor', '#f9f9f9');\n keyValuePairs['--block-bg-color'] = get(props, 'bgColorConfig.light.blockBgColor', '#FFF');\n }\n let varStyleText = '';\n Object.keys(keyValuePairs).forEach((key) => {\n if (keyValuePairs[key]) {\n varStyleText = varStyleText + `${key}:${keyValuePairs[key]};`;\n }\n });\n document.body.style.cssText = varStyleText;\n\n if (props.dark) {\n document.body.classList.add('dark-theme');\n } else {\n document.body.classList.add('light-theme');\n }\n if (props.compact) {\n document.body.classList.add('compact-theme');\n }\n }, [props.bgColorConfig, props.dark]);\n\n const innerTheme = fbaHooks.useThemeToken();\n\n const algorithm = props.configProviderProps?.theme?.algorithm;\n\n let algorithmArray = toArray<any>(algorithm);\n\n algorithmArray = [\n ...algorithmArray,\n props.dark ? theme.darkAlgorithm : null,\n props.compact ? theme.compactAlgorithm : null,\n ].filter(Boolean);\n\n return (\n <ConfigProviderWrapper\n locale={props.locale}\n componentSize={'middle'}\n space={{ size: 'middle' }}\n {...props.configProviderProps}\n theme={{\n ...props.configProviderProps?.theme,\n algorithm: algorithmArray,\n }}\n >\n <App style={{ '--color-primary': innerTheme.colorPrimary } as CSSProperties} className=\"bootstrap-app\">\n <FbaApp>{props.children}</FbaApp>\n </App>\n </ConfigProviderWrapper>\n );\n};\n"],"names":["Bootstrap","props","_props$configProvider","_props$configProvider2","useEffect","bodyStyle","document","body","style","cssText","keyValuePairs","regex","match","exec","key","trim","value","dark","_get","varStyleText","Object","keys","forEach","classList","add","compact","bgColorConfig","innerTheme","fbaHooks","useThemeToken","algorithm","configProviderProps","theme","algorithmArray","toArray","concat","darkAlgorithm","compactAlgorithm","filter","Boolean","_jsx","ConfigProviderWrapper","_extends","locale","componentSize","space","size","children","App","colorPrimary","className","FbaApp"],"mappings":";mtCA+CaA,EAAY,SAAZA,EAAaC,GAA0B,IAAAC,EAAAC,EAClDC,EAAU,WACR,IAAMC,EAAYC,SAASC,KAAKC,MAAMC,QACtC,IAAMC,EAAgB,CAAA,EACtB,GAAIL,EAAW,CACb,IAAMM,EAAQ,mBAEd,IAAIC,EACJ,MAAQA,EAAQD,EAAME,KAAKR,GAAa,CACtC,IAAMS,EAAMF,EAAM,GAAGG,OACrB,IAAMC,EAAQJ,EAAM,GACpBF,EAAcI,GAAOE,CACvB,CACF,CACA,GAAIf,EAAMgB,KAAM,CACdP,EAAc,cAAgBQ,EAAIjB,EAAO,6BAA8B,WACvES,EAAc,oBAAsBQ,EAAIjB,EAAO,kCAAmC,OACpF,KAAO,CACLS,EAAc,cAAgBQ,EAAIjB,EAAO,8BAA+B,WACxES,EAAc,oBAAsBQ,EAAIjB,EAAO,mCAAoC,OACrF,CACA,IAAIkB,EAAe,GACnBC,OAAOC,KAAKX,GAAeY,QAAQ,SAACR,GAClC,GAAIJ,EAAcI,GAAM,CACtBK,EAAeA,GAAkBL,MAAOJ,EAAcI,GAAO,IAC/D,CACF,GACAR,SAASC,KAAKC,MAAMC,QAAUU,EAE9B,GAAIlB,EAAMgB,KAAM,CACdX,SAASC,KAAKgB,UAAUC,IAAI,aAC9B,KAAO,CACLlB,SAASC,KAAKgB,UAAUC,IAAI,cAC9B,CACA,GAAIvB,EAAMwB,QAAS,CACjBnB,SAASC,KAAKgB,UAAUC,IAAI,gBAC9B,CACD,EAAE,CAACvB,EAAMyB,cAAezB,EAAMgB,OAE/B,IAAMU,EAAaC,EAASC,gBAE5B,IAAMC,GAAS5B,EAAGD,EAAM8B,sBAAmB,OAAA7B,EAAzBA,EAA2B8B,QAA3B9B,UAAAA,EAAAA,EAAkC4B,UAEpD,IAAIG,EAAiBC,EAAaJ,GAElCG,EAAiB,GAAAE,OACZF,EAAc,CACjBhC,EAAMgB,KAAOe,EAAMI,cAAgB,KACnCnC,EAAMwB,QAAUO,EAAMK,iBAAmB,OACzCC,OAAOC,SAET,OACEC,EAACC,EAAqBC,EAAA,CACpBC,OAAQ1C,EAAM0C,OACdC,cAAe,SACfC,MAAO,CAAEC,KAAM,WACX7C,EAAM8B,oBAAmB,CAC7BC,MAAKU,EAAA,IAAAvC,EACAF,EAAM8B,sBAAmB,UAAA,EAAzB5B,EAA2B6B,MAAK,CACnCF,UAAWG,IACXc,SAEFP,EAACQ,EAAG,CAACxC,MAAO,CAAE,kBAAmBmB,EAAWsB,cAAiCC,UAAU,gBAAeH,SACpGP,EAACW,EAAM,CAAAJ,SAAE9C,EAAM8C,eAIvB"}
@@ -1,5 +1,5 @@
1
1
  /* eslint-disable */
2
2
  import './index.css';
3
3
  /*! @flatjs/forge MIT @flatbiz/antd */
4
- import{classNames as r}from"@dimjs/utils/cjs/class-names";import{_ as e}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{createContext as a,useContext as t,useMemo as n,Children as l,cloneElement as i,useRef as o,useEffect as s}from"react";import{jsx as u}from"react/jsx-runtime";import{isNumber as v}from"@dimjs/lang/cjs/is-number";import{useSize as c}from"ahooks";var p={xs:24,sm:12,md:12,lg:8,xl:8,xxl:6};var d={xs:8,sm:16,md:16,lg:24,xl:24,xxl:32};var f={top:"flex-start",middle:"center",bottom:"flex-end",stretch:"stretch"};var m={start:"flex-start",end:"flex-end",center:"center","space-around":"space-around","space-between":"space-between","space-evenly":"space-evenly"};var x={boxBreakpoint:"lg",defaultGrid:p,horizontalGap:10,verticalGap:10};var h=a(x);var g=function a(o){var s=o.children,v=o.className,c=o.style,p=o.removeWrapper;var d=t(h),f=d.defaultGrid,m=d.horizontalGap,x=d.boxBreakpoint;var g=n((function(){return o.span||o[x||"lg"]||(f==null?void 0:f[x||"lg"])||8}),[o,x,f]);var G=e({},c,{flex:"0 0 "+g/24*100+"%",maxWidth:g/24*100+"%",padding:"0 "+m/2+"px"});if(p&&l.count(s)===1){var y,b;var B=(s==null||(y=s["props"])==null?void 0:y.style)||{};var j=(s==null||(b=s["props"])==null?void 0:b.className)||{};return i(s,e({},s==null?void 0:s["props"],{style:e({},G,B),className:r("box-grad-col",j,v)}))}return u("div",{className:r(v,"box-grad-col"),style:G,children:s})};g["domTypeName"]="BoxGridCol";var G=function r(e){var a=c(e)||{},t=a.width;var l=n((function(){var r=t||(e==null?void 0:e.clientWidth);if(!r){return"lg"}if(r>=1600){return"xxl"}else if(r>=1200){return"xl"}else if(r>=992){return"lg"}else if(r>=768){return"md"}else if(r>=576){return"sm"}else{return"xs"}}),[t]);return{boxBreakpoint:l,isInit:!!t,haveWidth:!!t}};var y=function r(a,t){if(a===void 0){a=d}return n((function(){var r;var n;var l=function r(a){if(typeof a==="number"){return a}if(typeof a==="object"){return e({},d,a)[t]}};if(Array.isArray(a)){var i=a,o=i[0],s=i[1];r=l(o);n=l(s)}else{r=l(a);n=x.verticalGap}return{horizontalGap:v(r)?r:x.horizontalGap,verticalGap:v(n)?n:x.verticalGap}}),[a,t])};var b=function a(t){var n=t.defaultGrid,l=n===void 0?p:n,i=t.children,v=t.className,c=t.style,d=t.gutter,g=t.align,b=t.justify,B=t.onBoxBreakpointChange;var j=o(null);var N=G(j),k=N.boxBreakpoint,w=N.haveWidth;var z=y(d,k),W=z.horizontalGap,C=z.verticalGap;s((function(){B==null||B(k)}),[k]);return u(h.Provider,{value:e({},x,{defaultGrid:e({},p,l),boxBreakpoint:k,horizontalGap:W,verticalGap:C}),children:u("div",{className:r("box-grad-root",v),ref:j,style:c,children:u("div",{className:"box-grad-row",style:{alignItems:g?f[g]:"normal",justifyContent:b?m[b]:"normal",marginLeft:"-"+W/2+"px",marginRight:"-"+W/2+"px",rowGap:C+"px",opacity:w?1:0},children:i})})})};var B=function r(e){var a=function r(a){var t=Math.ceil(e*24/a);return[1,2,3,4,6,8,12,24].find((function(r){return r>=t}))||24};return{xxl:a(1600),xl:a(1200),lg:a(992),md:a(768),sm:a(576),xs:a(200)}};var j={Row:b,Col:g,getGridMapByRange:B};export{j as BoxGrid,G as useBoxBreakpoint};
4
+ import{classNames as r}from"@dimjs/utils/cjs/class-names";import{_ as e}from"../_rollupPluginBabelHelpers-c0dbec57.js";import{createContext as a,useContext as t,useMemo as n,Children as l,cloneElement as i,useRef as o,useEffect as s}from"react";import{jsx as u}from"react/jsx-runtime";import{isNumber as v}from"@dimjs/lang/cjs/is-number";import{useSize as c}from"ahooks";var p={xs:24,sm:12,md:12,lg:8,xl:8,xxl:6};var d={xs:8,sm:16,md:16,lg:24,xl:24,xxl:32};var f={top:"flex-start",middle:"center",bottom:"flex-end",stretch:"stretch"};var m={start:"flex-start",end:"flex-end",center:"center","space-around":"space-around","space-between":"space-between","space-evenly":"space-evenly"};var x={boxBreakpoint:"lg",defaultGrid:p,horizontalGap:10,verticalGap:10};var h=a(x);var g=function a(o){var s=o.children,v=o.className,c=o.style,p=o.removeWrapper;var d=t(h),f=d.defaultGrid,m=d.horizontalGap,x=d.boxBreakpoint;var g=n(function(){return o.span||o[x||"lg"]||(f==null?void 0:f[x||"lg"])||8},[o,x,f]);var G=e({},c,{flex:"0 0 "+g/24*100+"%",maxWidth:g/24*100+"%",padding:"0 "+m/2+"px"});if(p&&l.count(s)===1){var y,b;var B=(s==null||(y=s["props"])==null?void 0:y.style)||{};var j=(s==null||(b=s["props"])==null?void 0:b.className)||{};return i(s,e({},s==null?void 0:s["props"],{style:e({},G,B),className:r("box-grad-col",j,v)}))}return u("div",{className:r(v,"box-grad-col"),style:G,children:s})};g["domTypeName"]="BoxGridCol";var G=function r(e){var a=c(e)||{},t=a.width;var l=n(function(){var r=t||(e==null?void 0:e.clientWidth);if(!r){return"lg"}if(r>=1600){return"xxl"}else if(r>=1200){return"xl"}else if(r>=992){return"lg"}else if(r>=768){return"md"}else if(r>=576){return"sm"}else{return"xs"}},[t]);return{boxBreakpoint:l,isInit:!!t,haveWidth:!!t}};var y=function r(a,t){if(a===void 0){a=d}return n(function(){var r;var n;var l=function r(a){if(typeof a==="number"){return a}if(typeof a==="object"){return e({},d,a)[t]}};if(Array.isArray(a)){var i=a,o=i[0],s=i[1];r=l(o);n=l(s)}else{r=l(a);n=x.verticalGap}return{horizontalGap:v(r)?r:x.horizontalGap,verticalGap:v(n)?n:x.verticalGap}},[a,t])};var b=function a(t){var n=t.defaultGrid,l=n===void 0?p:n,i=t.children,v=t.className,c=t.style,d=t.gutter,g=t.align,b=t.justify,B=t.onBoxBreakpointChange;var j=o(null);var N=G(j),k=N.boxBreakpoint,w=N.haveWidth;var z=y(d,k),W=z.horizontalGap,C=z.verticalGap;s(function(){B==null||B(k)},[k]);return u(h.Provider,{value:e({},x,{defaultGrid:e({},p,l),boxBreakpoint:k,horizontalGap:W,verticalGap:C}),children:u("div",{className:r("box-grad-root",v),ref:j,style:c,children:u("div",{className:"box-grad-row",style:{alignItems:g?f[g]:"normal",justifyContent:b?m[b]:"normal",marginLeft:"-"+W/2+"px",marginRight:"-"+W/2+"px",rowGap:C+"px",opacity:w?1:0},children:i})})})};var B=function r(e){var a=function r(a){var t=Math.ceil(e*24/a);return[1,2,3,4,6,8,12,24].find(function(r){return r>=t})||24};return{xxl:a(1600),xl:a(1200),lg:a(992),md:a(768),sm:a(576),xs:a(200)}};var j={Row:b,Col:g,getGridMapByRange:B};export{j as BoxGrid,G as useBoxBreakpoint};
5
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/box-grid/constant.tsx","@flatbiz/antd/src/box-grid/ctx.ts","@flatbiz/antd/src/box-grid/col.tsx","@flatbiz/antd/src/box-grid/hooks.ts","@flatbiz/antd/src/box-grid/row.tsx","@flatbiz/antd/src/box-grid/utils.ts","@flatbiz/antd/src/box-grid/index.ts"],"sourcesContent":["export const PresetDefaultGrid = {\n xs: 24,\n sm: 12,\n md: 12,\n lg: 8,\n xl: 8,\n xxl: 6,\n};\n\nexport const DefaultGutter = { xs: 8, sm: 16, md: 16, lg: 24, xl: 24, xxl: 32 };\n\nexport const RowAligns = ['top', 'middle', 'bottom', 'stretch'] as const;\nexport const RowJustify = [\n 'start',\n 'end',\n 'center',\n 'space-around',\n 'space-between',\n 'space-evenly',\n] as const;\n\nexport const alignPropsMap: Record<(typeof RowAligns)[number], string> = {\n top: 'flex-start',\n middle: 'center',\n bottom: 'flex-end',\n stretch: 'stretch',\n};\n\nexport const justifyPropsMap: Record<(typeof RowJustify)[number], string> = {\n start: 'flex-start',\n end: 'flex-end',\n center: 'center',\n 'space-around': 'space-around',\n 'space-between': 'space-between',\n 'space-evenly': 'space-evenly',\n};\n","import { createContext } from 'react';\nimport { PresetDefaultGrid } from './constant';\nimport { type TBoxBreakpoint } from './type';\n\nexport type BoxGridProviderContextType = {\n horizontalGap: number;\n verticalGap: number;\n boxBreakpoint: TBoxBreakpoint;\n defaultGrid: {\n xs: number;\n sm: number;\n md: number;\n lg: number;\n xl: number;\n xxl: number;\n };\n};\n\nexport const defaultCtx: BoxGridProviderContextType = {\n boxBreakpoint: 'lg',\n defaultGrid: PresetDefaultGrid,\n horizontalGap: 10,\n verticalGap: 10,\n};\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const BoxGridProviderCtx = createContext<BoxGridProviderContextType>(defaultCtx);\n","import { classNames } from '@dimjs/utils';\nimport { Children, cloneElement, useContext, useMemo, type FC, type ReactElement } from 'react';\nimport { BoxGridProviderCtx } from './ctx';\nimport { type ICommonReact } from './type';\n\nexport type BoxColProps = {\n /**\n * 栅格占位格数\n * span 优先级最高:配置了span后,其他的响应式配置将失效;\n * 范围 0 ~ 24\n * 为 0 相当于隐藏\n * 为 24 相当于独占一行\n */\n span?: number;\n /** 屏幕 < 576px */\n xs?: number;\n /** 屏幕 ≥ 576px */\n sm?: number;\n /** 屏幕 ≥ 768px */\n md?: number;\n /** 屏幕 ≥ 992px */\n lg?: number;\n /** 屏幕 ≥ 1200px */\n xl?: number;\n /** 屏幕 ≥ 1600px */\n xxl?: number;\n /**\n * 是否移除 外部包装div\n * ```\n * 1. 如果children 为数组,则此配置不生效\n * 2. 如果移除,会在children中添加style和className(所以children组件必须要有style、className属性)\n * ```\n */\n removeWrapper?: boolean;\n};\n\nexport const Col: FC<BoxColProps & ICommonReact> = (props) => {\n const { children, className, style, removeWrapper } = props;\n const { defaultGrid, horizontalGap, boxBreakpoint } = useContext(BoxGridProviderCtx);\n\n const span = useMemo(() => {\n return props.span || props[boxBreakpoint || 'lg'] || defaultGrid?.[boxBreakpoint || 'lg'] || 8;\n }, [props, boxBreakpoint, defaultGrid]);\n\n const styles = {\n ...style,\n flex: `0 0 ${(span / 24) * 100}%`,\n maxWidth: `${(span / 24) * 100}%`,\n padding: `0 ${horizontalGap / 2}px`,\n };\n\n if (removeWrapper && Children.count(children) === 1) {\n const innerStyle = children?.['props']?.style || {};\n const innerClassName = children?.['props']?.className || {};\n return cloneElement(children as ReactElement, {\n ...children?.['props'],\n style: { ...styles, ...innerStyle },\n className: classNames('box-grad-col', innerClassName, className),\n });\n }\n\n return (\n <div className={classNames(className, 'box-grad-col')} style={styles}>\n {children}\n </div>\n );\n};\n\nCol['domTypeName'] = 'BoxGridCol';\n","import { isNumber } from '@dimjs/lang';\nimport { useSize } from 'ahooks';\nimport { useMemo } from 'react';\nimport { DefaultGutter } from './constant';\nimport { defaultCtx } from './ctx';\nimport { type GutterParams, type TBoxBreakpoint } from './type';\n\n/**\n * 监听盒子大小变化,返回当前的断点\n * @param dom\n * @returns\n */\nexport const useBoxBreakpoint = (dom) => {\n const { width } = useSize(dom) || {};\n\n const boxBreakpoint = useMemo<TBoxBreakpoint>(() => {\n const w = width || dom?.clientWidth;\n if (!w) {\n return 'lg';\n }\n\n if (w >= 1600) {\n return 'xxl';\n } else if (w >= 1200) {\n return 'xl';\n } else if (w >= 992) {\n return 'lg';\n } else if (w >= 768) {\n return 'md';\n } else if (w >= 576) {\n return 'sm';\n } else {\n return 'xs';\n }\n }, [width]);\n\n return {\n boxBreakpoint,\n /**\n * @deprecated\n * 使用 haveWidth 替代\n */\n isInit: !!width,\n /** width为0,或者不存在 */\n haveWidth: !!width,\n };\n};\n\n/**\n * 处理间距\n * @param gutter\n * @param boxBreakpoint\n * @returns\n */\nexport const useGutter = (gutter: GutterParams = DefaultGutter, boxBreakpoint: TBoxBreakpoint) => {\n return useMemo(() => {\n let horizontalGap: number;\n let verticalGap: number;\n\n const getCommonGutter = (gutter) => {\n if (typeof gutter === 'number') {\n return gutter;\n }\n if (typeof gutter === 'object') {\n return { ...DefaultGutter, ...gutter }[boxBreakpoint];\n }\n };\n\n if (Array.isArray(gutter)) {\n const [h, v] = gutter;\n horizontalGap = getCommonGutter(h);\n verticalGap = getCommonGutter(v);\n } else {\n horizontalGap = getCommonGutter(gutter);\n verticalGap = defaultCtx.verticalGap;\n }\n\n return {\n horizontalGap: isNumber(horizontalGap) ? horizontalGap : defaultCtx.horizontalGap,\n verticalGap: isNumber(verticalGap) ? verticalGap : defaultCtx.verticalGap,\n };\n }, [gutter, boxBreakpoint]);\n};\n","import { classNames } from '@dimjs/utils';\nimport { FC, useEffect, useRef } from 'react';\nimport { alignPropsMap, justifyPropsMap, PresetDefaultGrid } from './constant';\nimport { BoxGridProviderCtx, defaultCtx } from './ctx';\nimport { useBoxBreakpoint, useGutter } from './hooks';\nimport { TBoxBreakpoint, type GutterParams, type ICommonReact } from './type';\n\nexport interface BoxRowProps {\n /**\n * 在不同响应尺寸下的元素占位格数\n * 应用到所有Col子元素上\n */\n defaultGrid?: Partial<typeof PresetDefaultGrid>;\n /** 间距 */\n gutter?: GutterParams;\n /** flex 布局的垂直对齐方式 */\n align?: 'top' | 'middle' | 'bottom' | 'stretch';\n /** flex 布局的水平排列方式 */\n justify?: 'start' | 'end' | 'center' | 'space-around' | 'space-between' | 'space-evenly';\n /** 尺寸变化回调 */\n onBoxBreakpointChange?: (breakpoint: TBoxBreakpoint) => void;\n}\n\nexport const Row: FC<BoxRowProps & ICommonReact> = (props) => {\n const {\n defaultGrid = PresetDefaultGrid,\n children,\n className,\n style,\n gutter,\n align,\n justify,\n onBoxBreakpointChange,\n } = props;\n const comRef = useRef<HTMLDivElement>(null);\n const { boxBreakpoint, haveWidth } = useBoxBreakpoint(comRef);\n const { horizontalGap, verticalGap } = useGutter(gutter, boxBreakpoint);\n\n useEffect(() => {\n onBoxBreakpointChange?.(boxBreakpoint);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [boxBreakpoint]);\n\n return (\n <BoxGridProviderCtx.Provider\n value={{\n ...defaultCtx,\n defaultGrid: {\n ...PresetDefaultGrid,\n ...defaultGrid,\n },\n boxBreakpoint,\n horizontalGap,\n verticalGap,\n }}\n >\n <div className={classNames('box-grad-root', className)} ref={comRef} style={style}>\n <div\n className=\"box-grad-row\"\n style={{\n alignItems: align ? alignPropsMap[align] : 'normal',\n justifyContent: justify ? justifyPropsMap[justify] : 'normal',\n marginLeft: `-${horizontalGap / 2}px`,\n marginRight: `-${horizontalGap / 2}px`,\n rowGap: `${verticalGap}px`,\n /**\n * fix: boxBreakpoint多次变化,闪一下的问题\n * 子元素拿不到宽度,boxBreakpoint 会快速变化,导致元素闪烁\n * 场景:\n * 1. 使用 Tabs 组件时,任意父级元素disabled,子元素拿不到宽度\n * 2. 初始渲染,拿不到宽度\n */\n opacity: haveWidth ? 1 : 0,\n }}\n >\n {children}\n </div>\n </div>\n </BoxGridProviderCtx.Provider>\n );\n};\n","import { type TBoxBreakpoint } from './type';\n\n/**\n * 获取栅格响应式布局的配置\n * @param minSize 元素的最小可接受宽度\n * @returns\n */\nexport const getGridMapByRange = (minSize: number): Record<TBoxBreakpoint, number> => {\n const getSpan = (threshold: number) => {\n const result = Math.ceil((minSize * 24) / threshold);\n return [1, 2, 3, 4, 6, 8, 12, 24].find((item) => item >= result) || 24;\n };\n\n return {\n xxl: getSpan(1600),\n xl: getSpan(1200),\n lg: getSpan(992),\n md: getSpan(768),\n sm: getSpan(576),\n xs: getSpan(200),\n };\n};\n","import { Col } from './col';\nimport './index.less';\nimport { Row } from './row';\nimport { getGridMapByRange } from './utils';\n\nexport { useBoxBreakpoint } from './hooks';\n\nexport const BoxGrid = {\n /**\n * 网格响应式布局\n *```\n * 1. 应用场景:根据盒子大小决定内部元素的布局\n * 2. 子元素只能是 BoxGrid.Col\n */\n Row,\n /**\n * 网格响应式布局,\n * 默认值:\n * { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 }\n * xs={24} sm={12} md={12} lg={8} xl={8} xxl={6}\n *```\n * 1. 设置 span 栅格占位格数,0 ~ 24\n * 2. grid 自定义响应式网格布局\n * xs: 容器尺寸 < 576px\n * sm: 容器尺寸 ≥ 576px\n * md: 容器尺寸 ≥ 768px\n * lg: 容器尺寸 ≥ 992px\n * xl: 容器尺寸 ≥ 1200px\n * xxl: 容器尺寸 ≥ 1600px\n * ```\n */\n Col,\n /**\n * 获取栅格响应式布局的配置\n * @param minSize 元素的最小可接受宽度\n * @returns { xs: num, sm: num, md: num, lg: num, xl: num, xxl: num }\n */\n getGridMapByRange,\n};\n"],"names":["PresetDefaultGrid","xs","sm","md","lg","xl","xxl","DefaultGutter","alignPropsMap","top","middle","bottom","stretch","justifyPropsMap","start","end","center","defaultCtx","boxBreakpoint","defaultGrid","horizontalGap","verticalGap","BoxGridProviderCtx","createContext","Col","props","children","className","style","removeWrapper","_useContext","useContext","span","useMemo","styles","_extends","flex","maxWidth","padding","Children","count","_children$props","_children$props2","innerStyle","innerClassName","cloneElement","_classNames","_jsx","useBoxBreakpoint","dom","_ref","useSize","width","w","clientWidth","isInit","haveWidth","useGutter","gutter","getCommonGutter","Array","isArray","_gutter","h","v","_isNumber","Row","_props$defaultGrid","align","justify","onBoxBreakpointChange","comRef","useRef","_useBoxBreakpoint","_useGutter","useEffect","Provider","value","ref","alignItems","justifyContent","marginLeft","marginRight","rowGap","opacity","getGridMapByRange","minSize","getSpan","threshold","result","Math","ceil","find","item","BoxGrid"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["@flatbiz/antd/src/box-grid/constant.tsx","@flatbiz/antd/src/box-grid/ctx.ts","@flatbiz/antd/src/box-grid/col.tsx","@flatbiz/antd/src/box-grid/hooks.ts","@flatbiz/antd/src/box-grid/row.tsx","@flatbiz/antd/src/box-grid/utils.ts","@flatbiz/antd/src/box-grid/index.ts"],"sourcesContent":["export const PresetDefaultGrid = {\n xs: 24,\n sm: 12,\n md: 12,\n lg: 8,\n xl: 8,\n xxl: 6,\n};\n\nexport const DefaultGutter = { xs: 8, sm: 16, md: 16, lg: 24, xl: 24, xxl: 32 };\n\nexport const RowAligns = ['top', 'middle', 'bottom', 'stretch'] as const;\nexport const RowJustify = [\n 'start',\n 'end',\n 'center',\n 'space-around',\n 'space-between',\n 'space-evenly',\n] as const;\n\nexport const alignPropsMap: Record<(typeof RowAligns)[number], string> = {\n top: 'flex-start',\n middle: 'center',\n bottom: 'flex-end',\n stretch: 'stretch',\n};\n\nexport const justifyPropsMap: Record<(typeof RowJustify)[number], string> = {\n start: 'flex-start',\n end: 'flex-end',\n center: 'center',\n 'space-around': 'space-around',\n 'space-between': 'space-between',\n 'space-evenly': 'space-evenly',\n};\n","import { createContext } from 'react';\nimport { PresetDefaultGrid } from './constant';\nimport { type TBoxBreakpoint } from './type';\n\nexport type BoxGridProviderContextType = {\n horizontalGap: number;\n verticalGap: number;\n boxBreakpoint: TBoxBreakpoint;\n defaultGrid: {\n xs: number;\n sm: number;\n md: number;\n lg: number;\n xl: number;\n xxl: number;\n };\n};\n\nexport const defaultCtx: BoxGridProviderContextType = {\n boxBreakpoint: 'lg',\n defaultGrid: PresetDefaultGrid,\n horizontalGap: 10,\n verticalGap: 10,\n};\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const BoxGridProviderCtx = createContext<BoxGridProviderContextType>(defaultCtx);\n","import { classNames } from '@dimjs/utils';\nimport { Children, cloneElement, useContext, useMemo, type FC, type ReactElement } from 'react';\nimport { BoxGridProviderCtx } from './ctx';\nimport { type ICommonReact } from './type';\n\nexport type BoxColProps = {\n /**\n * 栅格占位格数\n * span 优先级最高:配置了span后,其他的响应式配置将失效;\n * 范围 0 ~ 24\n * 为 0 相当于隐藏\n * 为 24 相当于独占一行\n */\n span?: number;\n /** 屏幕 < 576px */\n xs?: number;\n /** 屏幕 ≥ 576px */\n sm?: number;\n /** 屏幕 ≥ 768px */\n md?: number;\n /** 屏幕 ≥ 992px */\n lg?: number;\n /** 屏幕 ≥ 1200px */\n xl?: number;\n /** 屏幕 ≥ 1600px */\n xxl?: number;\n /**\n * 是否移除 外部包装div\n * ```\n * 1. 如果children 为数组,则此配置不生效\n * 2. 如果移除,会在children中添加style和className(所以children组件必须要有style、className属性)\n * ```\n */\n removeWrapper?: boolean;\n};\n\nexport const Col: FC<BoxColProps & ICommonReact> = (props) => {\n const { children, className, style, removeWrapper } = props;\n const { defaultGrid, horizontalGap, boxBreakpoint } = useContext(BoxGridProviderCtx);\n\n const span = useMemo(() => {\n return props.span || props[boxBreakpoint || 'lg'] || defaultGrid?.[boxBreakpoint || 'lg'] || 8;\n }, [props, boxBreakpoint, defaultGrid]);\n\n const styles = {\n ...style,\n flex: `0 0 ${(span / 24) * 100}%`,\n maxWidth: `${(span / 24) * 100}%`,\n padding: `0 ${horizontalGap / 2}px`,\n };\n\n if (removeWrapper && Children.count(children) === 1) {\n const innerStyle = children?.['props']?.style || {};\n const innerClassName = children?.['props']?.className || {};\n return cloneElement(children as ReactElement, {\n ...children?.['props'],\n style: { ...styles, ...innerStyle },\n className: classNames('box-grad-col', innerClassName, className),\n });\n }\n\n return (\n <div className={classNames(className, 'box-grad-col')} style={styles}>\n {children}\n </div>\n );\n};\n\nCol['domTypeName'] = 'BoxGridCol';\n","import { isNumber } from '@dimjs/lang';\nimport { useSize } from 'ahooks';\nimport { useMemo } from 'react';\nimport { DefaultGutter } from './constant';\nimport { defaultCtx } from './ctx';\nimport { type GutterParams, type TBoxBreakpoint } from './type';\n\n/**\n * 监听盒子大小变化,返回当前的断点\n * @param dom\n * @returns\n */\nexport const useBoxBreakpoint = (dom) => {\n const { width } = useSize(dom) || {};\n\n const boxBreakpoint = useMemo<TBoxBreakpoint>(() => {\n const w = width || dom?.clientWidth;\n if (!w) {\n return 'lg';\n }\n\n if (w >= 1600) {\n return 'xxl';\n } else if (w >= 1200) {\n return 'xl';\n } else if (w >= 992) {\n return 'lg';\n } else if (w >= 768) {\n return 'md';\n } else if (w >= 576) {\n return 'sm';\n } else {\n return 'xs';\n }\n }, [width]);\n\n return {\n boxBreakpoint,\n /**\n * @deprecated\n * 使用 haveWidth 替代\n */\n isInit: !!width,\n /** width为0,或者不存在 */\n haveWidth: !!width,\n };\n};\n\n/**\n * 处理间距\n * @param gutter\n * @param boxBreakpoint\n * @returns\n */\nexport const useGutter = (gutter: GutterParams = DefaultGutter, boxBreakpoint: TBoxBreakpoint) => {\n return useMemo(() => {\n let horizontalGap: number;\n let verticalGap: number;\n\n const getCommonGutter = (gutter) => {\n if (typeof gutter === 'number') {\n return gutter;\n }\n if (typeof gutter === 'object') {\n return { ...DefaultGutter, ...gutter }[boxBreakpoint];\n }\n };\n\n if (Array.isArray(gutter)) {\n const [h, v] = gutter;\n horizontalGap = getCommonGutter(h);\n verticalGap = getCommonGutter(v);\n } else {\n horizontalGap = getCommonGutter(gutter);\n verticalGap = defaultCtx.verticalGap;\n }\n\n return {\n horizontalGap: isNumber(horizontalGap) ? horizontalGap : defaultCtx.horizontalGap,\n verticalGap: isNumber(verticalGap) ? verticalGap : defaultCtx.verticalGap,\n };\n }, [gutter, boxBreakpoint]);\n};\n","import { classNames } from '@dimjs/utils';\nimport { FC, useEffect, useRef } from 'react';\nimport { alignPropsMap, justifyPropsMap, PresetDefaultGrid } from './constant';\nimport { BoxGridProviderCtx, defaultCtx } from './ctx';\nimport { useBoxBreakpoint, useGutter } from './hooks';\nimport { TBoxBreakpoint, type GutterParams, type ICommonReact } from './type';\n\nexport interface BoxRowProps {\n /**\n * 在不同响应尺寸下的元素占位格数\n * 应用到所有Col子元素上\n */\n defaultGrid?: Partial<typeof PresetDefaultGrid>;\n /** 间距 */\n gutter?: GutterParams;\n /** flex 布局的垂直对齐方式 */\n align?: 'top' | 'middle' | 'bottom' | 'stretch';\n /** flex 布局的水平排列方式 */\n justify?: 'start' | 'end' | 'center' | 'space-around' | 'space-between' | 'space-evenly';\n /** 尺寸变化回调 */\n onBoxBreakpointChange?: (breakpoint: TBoxBreakpoint) => void;\n}\n\nexport const Row: FC<BoxRowProps & ICommonReact> = (props) => {\n const {\n defaultGrid = PresetDefaultGrid,\n children,\n className,\n style,\n gutter,\n align,\n justify,\n onBoxBreakpointChange,\n } = props;\n const comRef = useRef<HTMLDivElement>(null);\n const { boxBreakpoint, haveWidth } = useBoxBreakpoint(comRef);\n const { horizontalGap, verticalGap } = useGutter(gutter, boxBreakpoint);\n\n useEffect(() => {\n onBoxBreakpointChange?.(boxBreakpoint);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [boxBreakpoint]);\n\n return (\n <BoxGridProviderCtx.Provider\n value={{\n ...defaultCtx,\n defaultGrid: {\n ...PresetDefaultGrid,\n ...defaultGrid,\n },\n boxBreakpoint,\n horizontalGap,\n verticalGap,\n }}\n >\n <div className={classNames('box-grad-root', className)} ref={comRef} style={style}>\n <div\n className=\"box-grad-row\"\n style={{\n alignItems: align ? alignPropsMap[align] : 'normal',\n justifyContent: justify ? justifyPropsMap[justify] : 'normal',\n marginLeft: `-${horizontalGap / 2}px`,\n marginRight: `-${horizontalGap / 2}px`,\n rowGap: `${verticalGap}px`,\n /**\n * fix: boxBreakpoint多次变化,闪一下的问题\n * 子元素拿不到宽度,boxBreakpoint 会快速变化,导致元素闪烁\n * 场景:\n * 1. 使用 Tabs 组件时,任意父级元素disabled,子元素拿不到宽度\n * 2. 初始渲染,拿不到宽度\n */\n opacity: haveWidth ? 1 : 0,\n }}\n >\n {children}\n </div>\n </div>\n </BoxGridProviderCtx.Provider>\n );\n};\n","import { type TBoxBreakpoint } from './type';\n\n/**\n * 获取栅格响应式布局的配置\n * @param minSize 元素的最小可接受宽度\n * @returns\n */\nexport const getGridMapByRange = (minSize: number): Record<TBoxBreakpoint, number> => {\n const getSpan = (threshold: number) => {\n const result = Math.ceil((minSize * 24) / threshold);\n return [1, 2, 3, 4, 6, 8, 12, 24].find((item) => item >= result) || 24;\n };\n\n return {\n xxl: getSpan(1600),\n xl: getSpan(1200),\n lg: getSpan(992),\n md: getSpan(768),\n sm: getSpan(576),\n xs: getSpan(200),\n };\n};\n","import { Col } from './col';\nimport './index.less';\nimport { Row } from './row';\nimport { getGridMapByRange } from './utils';\n\nexport { useBoxBreakpoint } from './hooks';\n\nexport const BoxGrid = {\n /**\n * 网格响应式布局\n *```\n * 1. 应用场景:根据盒子大小决定内部元素的布局\n * 2. 子元素只能是 BoxGrid.Col\n */\n Row,\n /**\n * 网格响应式布局,\n * 默认值:\n * { xs: 24, sm: 12, md: 12, lg: 8, xl: 8, xxl: 6 }\n * xs={24} sm={12} md={12} lg={8} xl={8} xxl={6}\n *```\n * 1. 设置 span 栅格占位格数,0 ~ 24\n * 2. grid 自定义响应式网格布局\n * xs: 容器尺寸 < 576px\n * sm: 容器尺寸 ≥ 576px\n * md: 容器尺寸 ≥ 768px\n * lg: 容器尺寸 ≥ 992px\n * xl: 容器尺寸 ≥ 1200px\n * xxl: 容器尺寸 ≥ 1600px\n * ```\n */\n Col,\n /**\n * 获取栅格响应式布局的配置\n * @param minSize 元素的最小可接受宽度\n * @returns { xs: num, sm: num, md: num, lg: num, xl: num, xxl: num }\n */\n getGridMapByRange,\n};\n"],"names":["PresetDefaultGrid","xs","sm","md","lg","xl","xxl","DefaultGutter","alignPropsMap","top","middle","bottom","stretch","justifyPropsMap","start","end","center","defaultCtx","boxBreakpoint","defaultGrid","horizontalGap","verticalGap","BoxGridProviderCtx","createContext","Col","props","children","className","style","removeWrapper","_useContext","useContext","span","useMemo","styles","_extends","flex","maxWidth","padding","Children","count","_children$props","_children$props2","innerStyle","innerClassName","cloneElement","_classNames","_jsx","useBoxBreakpoint","dom","_ref","useSize","width","w","clientWidth","isInit","haveWidth","useGutter","gutter","getCommonGutter","Array","isArray","_gutter","h","v","_isNumber","Row","_props$defaultGrid","align","justify","onBoxBreakpointChange","comRef","useRef","_useBoxBreakpoint","_useGutter","useEffect","Provider","value","ref","alignItems","justifyContent","marginLeft","marginRight","rowGap","opacity","getGridMapByRange","minSize","getSpan","threshold","result","Math","ceil","find","item","BoxGrid"],"mappings":";mXAAO,IAAMA,EAAoB,CAC/BC,GAAI,GACJC,GAAI,GACJC,GAAI,GACJC,GAAI,EACJC,GAAI,EACJC,IAAK,GAGA,IAAMC,EAAgB,CAAEN,GAAI,EAAGC,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAIC,IAAK,IAYpE,IAAME,EAA4D,CACvEC,IAAK,aACLC,OAAQ,SACRC,OAAQ,WACRC,QAAS,WAGJ,IAAMC,EAA+D,CAC1EC,MAAO,aACPC,IAAK,WACLC,OAAQ,SACR,eAAgB,eAChB,gBAAiB,gBACjB,eAAgB,gBChBX,IAAMC,EAAyC,CACpDC,cAAe,KACfC,YAAanB,EACboB,cAAe,GACfC,YAAa,IAIR,IAAMC,EAAqBC,EAA0CN,GCUrE,IAAMO,EAAsC,SAAtCA,EAAuCC,GAClD,IAAQC,EAA8CD,EAA9CC,SAAUC,EAAoCF,EAApCE,UAAWC,EAAyBH,EAAzBG,MAAOC,EAAkBJ,EAAlBI,cACpC,IAAAC,EAAsDC,EAAWT,GAAzDH,EAAWW,EAAXX,YAAaC,EAAaU,EAAbV,cAAeF,EAAaY,EAAbZ,cAEpC,IAAMc,EAAOC,EAAQ,WACnB,OAAOR,EAAMO,MAAQP,EAAMP,GAAiB,QAASC,GAAW,UAAA,EAAXA,EAAcD,GAAiB,QAAS,CAC9F,EAAE,CAACO,EAAOP,EAAeC,IAE1B,IAAMe,EAAMC,EAAA,CAAA,EACPP,EAAK,CACRQ,YAAcJ,EAAO,GAAM,IAAM,IACjCK,SAAcL,EAAO,GAAM,IAAM,IACjCM,QAAO,KAAOlB,EAAgB,EAAC,OAGjC,GAAIS,GAAiBU,EAASC,MAAMd,KAAc,EAAG,CAAA,IAAAe,EAAAC,EACnD,IAAMC,GAAajB,GAAQ,OAAAe,EAARf,EAAW,WAAXe,UAAAA,EAAAA,EAAqBb,QAAS,CAAA,EACjD,IAAMgB,GAAiBlB,GAAQ,OAAAgB,EAARhB,EAAW,WAAXgB,UAAAA,EAAAA,EAAqBf,YAAa,CAAA,EACzD,OAAOkB,EAAanB,EAAQS,EACvBT,GAAAA,GAAAA,UAAAA,EAAAA,EAAW,SAAQ,CACtBE,MAAKO,EAAA,GAAOD,EAAWS,GACvBhB,UAAWmB,EAAW,eAAgBF,EAAgBjB,KAE1D,CAEA,OACEoB,EAAA,MAAA,CAAKpB,UAAWmB,EAAWnB,EAAW,gBAAiBC,MAAOM,EAAOR,SAClEA,GAGP,EAEAF,EAAI,eAAiB,iBCxDRwB,EAAmB,SAAnBA,EAAoBC,GAC/B,IAAAC,EAAkBC,EAAQF,IAAQ,CAAE,EAA5BG,EAAKF,EAALE,MAER,IAAMlC,EAAgBe,EAAwB,WAC5C,IAAMoB,EAAID,IAASH,GAAAA,UAAAA,EAAAA,EAAKK,aACxB,IAAKD,EAAG,CACN,MAAO,IACT,CAEA,GAAIA,GAAK,KAAM,CACb,MAAO,KACT,MAAO,GAAIA,GAAK,KAAM,CACpB,MAAO,IACT,MAAO,GAAIA,GAAK,IAAK,CACnB,MAAO,IACT,MAAO,GAAIA,GAAK,IAAK,CACnB,MAAO,IACT,MAAO,GAAIA,GAAK,IAAK,CACnB,MAAO,IACT,KAAO,CACL,MAAO,IACT,CACF,EAAG,CAACD,IAEJ,MAAO,CACLlC,cAAAA,EAKAqC,SAAUH,EAEVI,YAAaJ,EAEjB,EAQO,IAAMK,EAAY,SAAZA,EAAaC,EAAsCxC,GAAkC,GAAxEwC,SAAoB,EAAA,CAApBA,EAAuBnD,CAAa,CAC5D,OAAO0B,EAAQ,WACb,IAAIb,EACJ,IAAIC,EAEJ,IAAMsC,EAAkB,SAAlBA,EAAmBD,GACvB,UAAWA,IAAW,SAAU,CAC9B,OAAOA,CACT,CACA,UAAWA,IAAW,SAAU,CAC9B,OAAOvB,EAAK5B,CAAAA,EAAAA,EAAkBmD,GAASxC,EACzC,GAGF,GAAI0C,MAAMC,QAAQH,GAAS,CACzB,IAAAI,EAAeJ,EAARK,EAACD,EAAA,GAAEE,EAACF,EAAA,GACX1C,EAAgBuC,EAAgBI,GAChC1C,EAAcsC,EAAgBK,EAChC,KAAO,CACL5C,EAAgBuC,EAAgBD,GAChCrC,EAAcJ,EAAWI,WAC3B,CAEA,MAAO,CACLD,cAAe6C,EAAS7C,GAAiBA,EAAgBH,EAAWG,cACpEC,YAAa4C,EAAS5C,GAAeA,EAAcJ,EAAWI,YAElE,EAAG,CAACqC,EAAQxC,GACd,EC3DO,IAAMgD,EAAsC,SAAtCA,EAAuCzC,GAClD,IAAA0C,EASI1C,EARFN,YAAAA,EAAWgD,SAAGnE,EAAAA,EAAiBmE,EAC/BzC,EAOED,EAPFC,SACAC,EAMEF,EANFE,UACAC,EAKEH,EALFG,MACA8B,EAIEjC,EAJFiC,OACAU,EAGE3C,EAHF2C,MACAC,EAEE5C,EAFF4C,QACAC,EACE7C,EADF6C,sBAEF,IAAMC,EAASC,EAAuB,MACtC,IAAAC,EAAqCzB,EAAiBuB,GAA9CrD,EAAauD,EAAbvD,cAAesC,EAASiB,EAATjB,UACvB,IAAAkB,EAAuCjB,EAAUC,EAAQxC,GAAjDE,EAAasD,EAAbtD,cAAeC,EAAWqD,EAAXrD,YAEvBsD,EAAU,WACRL,GAAAA,MAAAA,EAAwBpD,EAE1B,EAAG,CAACA,IAEJ,OACE6B,EAACzB,EAAmBsD,SAAQ,CAC1BC,MAAK1C,EAAA,CAAA,EACAlB,EAAU,CACbE,YAAWgB,EAAA,GACNnC,EACAmB,GAELD,cAAAA,EACAE,cAAAA,EACAC,YAAAA,IACAK,SAEFqB,EAAA,MAAA,CAAKpB,UAAWmB,EAAW,gBAAiBnB,GAAYmD,IAAKP,EAAQ3C,MAAOA,EAAMF,SAChFqB,EAAA,MAAA,CACEpB,UAAU,eACVC,MAAO,CACLmD,WAAYX,EAAQ5D,EAAc4D,GAAS,SAC3CY,eAAgBX,EAAUxD,EAAgBwD,GAAW,SACrDY,WAAgB7D,IAAAA,EAAgB,EAAK,KACrC8D,YAAiB9D,IAAAA,EAAgB,EAAK,KACtC+D,OAAW9D,EAAe,KAQ1B+D,QAAS5B,EAAY,EAAI,GACzB9B,SAEDA,OAKX,ECzEO,IAAM2D,EAAoB,SAApBA,EAAqBC,GAChC,IAAMC,EAAU,SAAVA,EAAWC,GACf,IAAMC,EAASC,KAAKC,KAAML,EAAU,GAAME,GAC1C,MAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,IAAII,KAAK,SAACC,GAAI,OAAKA,GAAQJ,CAAM,IAAK,IAGtE,MAAO,CACLnF,IAAKiF,EAAQ,MACblF,GAAIkF,EAAQ,MACZnF,GAAImF,EAAQ,KACZpF,GAAIoF,EAAQ,KACZrF,GAAIqF,EAAQ,KACZtF,GAAIsF,EAAQ,KAEhB,ECdO,IAAMO,EAAU,CAOrB5B,IAAAA,EAiBA1C,IAAAA,EAMA6D,kBAAAA"}