{"version":3,"sources":["../src/widgets/IconWidget.tsx","../src/constants/widgets.ts","../src/widgets/TablePrimaryKeyWidget.tsx","../src/widgets/index.ts"],"sourcesContent":["import React, { useCallback, useMemo, useState } from 'react';\nimport {\n  WidgetProps,\n  implementWidget,\n  ComponentFormElementId,\n} from '@sunmao-ui/editor-sdk';\nimport * as Icons from '@arco-design/web-react/icon';\nimport IconsMessage from '@arco-design/web-react/icon/icons.json';\nimport { Popover, Input, Button, Radio, Space } from '@arco-design/web-react';\nimport { css } from '@emotion/css';\nimport { mapValues } from 'lodash';\nimport { ARCO_V1_VERSION } from '../constants/widgets';\n\ntype IconWidgetWidgetID = 'arco/v1/icon';\n\nconst iconButtonStyle = css`\n  background: transparent !important;\n  border: 0 !important;\n  width: 40px !important;\n  height: 40px !important;\n  margin-right: 5px;\n  &:hover {\n    background-color: var(--color-secondary-hover) !important;\n  }\n`;\n\nconst iconListWrapperStyle = css`\n  height: 350px;\n  width: 380px;\n  overflow: auto;\n  margin-top: 10px;\n`;\nconst popoverStyle = css`\n  height: 500px;\n  max-width: none !important;\n  .arco-trigger-arrow.arco-popover-arrow {\n    display: none;\n  }\n  .arco-popover-content {\n    padding: 12px 0 12px 12px;\n  }\n`;\n\nconst selectButtonStyle = css`\n  background: transparent !important;\n  border: 1px solid var(--color-secondary) !important;\n  width: 100%;\n  text-align: left;\n  padding: 0 5px !important;\n  &:hover {\n    border-color: var(--color-secondary-hover) !important;\n  }\n`;\n\nconst IconCategories = IconsMessage.icons;\nconst eng = IconsMessage.i18n['en-US'];\n\nconst iconStyle = {\n  outline: 'Stroke',\n  fill: 'Fill',\n  color: 'Color',\n};\ntype IconStyle = keyof typeof iconStyle;\n\nexport const PopoverContent: React.FC<{\n  onChange: (iconName: string) => void;\n  closePopover: () => void;\n}> = ({ onChange, closePopover }) => {\n  const [style, setStyle] = useState<IconStyle>('outline');\n  const [searchValue, setSearchValue] = useState('');\n\n  const categories = useMemo(() => {\n    return mapValues(IconCategories, o => {\n      return mapValues(o, iconComps => {\n        return iconComps.filter(iconComp =>\n          new RegExp(searchValue, 'i').test(iconComp.componentName)\n        );\n      });\n    });\n  }, [searchValue]);\n\n  return (\n    <div>\n      <Space direction=\"horizontal\">\n        <Radio.Group\n          size=\"small\"\n          type=\"button\"\n          value={style}\n          onChange={style => {\n            setStyle(style);\n          }}\n        >\n          {Object.keys(iconStyle).map(key => (\n            <Radio key={key} value={key}>\n              {iconStyle[key as IconStyle]}\n            </Radio>\n          ))}\n        </Radio.Group>\n        <Input\n          value={searchValue}\n          onChange={v => {\n            setSearchValue(v);\n          }}\n          placeholder=\"Search icon by name\"\n          size=\"small\"\n        />\n      </Space>\n      <div className={iconListWrapperStyle}>\n        {Object.keys(categories).map(category => {\n          const curCategory = categories[category as keyof typeof categories];\n          const currentIcons = curCategory[style as keyof typeof curCategory];\n\n          return (\n            <div key={category}>\n              {currentIcons && currentIcons.length > 0 && (\n                <div>\n                  <div className=\"title\">{eng[category as keyof typeof categories]}</div>\n                  <div className=\"content\">\n                    {currentIcons.map(component => {\n                      const iconName = component.componentName;\n                      const Icon = Icons[iconName as keyof typeof Icons];\n                      return (\n                        <Button\n                          onClick={() => {\n                            onChange(iconName);\n                            closePopover();\n                          }}\n                          title={iconName}\n                          key={iconName}\n                          icon={<Icon />}\n                          className={iconButtonStyle}\n                        />\n                      );\n                    })}\n                  </div>\n                </div>\n              )}\n            </div>\n          );\n        })}\n      </div>\n    </div>\n  );\n};\n\nconst _IconWidget: React.FC<WidgetProps<IconWidgetWidgetID, string>> = props => {\n  const { value, onChange, spec } = props;\n  const CurrentIcon = Icons[value as keyof typeof Icons];\n  const [visible, setVisible] = useState(false);\n\n  const closePopover = useCallback(() => {\n    setVisible(false);\n  }, []);\n\n  return (\n    <Popover\n      unmountOnExit={false}\n      triggerProps={{\n        onClickOutside: () => {\n          closePopover();\n        },\n      }}\n      getPopupContainer={_node =>\n        spec.widgetOptions?.appendToBody\n          ? document.body\n          : document.getElementById(ComponentFormElementId)!\n      }\n      popupVisible={visible}\n      position=\"left\"\n      className={popoverStyle}\n      content={<PopoverContent closePopover={closePopover} onChange={onChange} />}\n      title=\"Select Icon\"\n      trigger=\"click\"\n      {...(spec.widgetOptions?.appendToBody ? {} : { style: { left: '-390px' } })}\n    >\n      <Button\n        onClick={() => {\n          setVisible(!visible);\n        }}\n        className={selectButtonStyle}\n        icon={<CurrentIcon />}\n      >\n        {value}\n      </Button>\n    </Popover>\n  );\n};\n\nexport const IconWidget = implementWidget<IconWidgetWidgetID>({\n  version: ARCO_V1_VERSION,\n  metadata: {\n    name: 'icon',\n  },\n})(_IconWidget);\n","export const ARCO_V1_VERSION = 'arco/v1';\n","import React from 'react';\nimport { WidgetProps, implementWidget, isExpression } from '@sunmao-ui/editor-sdk';\nimport { ColumnSpec } from '../generated/types/Table';\nimport { Static } from '@sinclair/typebox';\nimport { Select } from '@arco-design/web-react';\nimport { ARCO_V1_VERSION } from '../constants/widgets';\n\ntype TablePrimaryKeyWidgetID = 'arco/v1/primaryKey';\n\nexport const _TablePrimaryKeyWidget: React.FC<\n  WidgetProps<TablePrimaryKeyWidgetID, string>\n> = props => {\n  const { value, onChange, component, services } = props;\n  const { properties } = component;\n  const columns = (\n    isExpression(properties.columns)\n      ? services.stateManager.deepEval(properties.columns as string)\n      : properties.columns\n  ) as Static<typeof ColumnSpec>[];\n\n  const keys = columns.map(c => c.dataIndex);\n\n  return (\n    <Select\n      value={value}\n      allowCreate\n      onChange={value => {\n        onChange(value);\n      }}\n    >\n      {keys.map(key => {\n        return (\n          <Select.Option key={key} value={key}>\n            {key}\n          </Select.Option>\n        );\n      })}\n    </Select>\n  );\n};\n\nexport const TablePrimaryKeyWidget = implementWidget<TablePrimaryKeyWidgetID>({\n  version: ARCO_V1_VERSION,\n  metadata: {\n    name: 'primaryKey',\n  },\n})(_TablePrimaryKeyWidget);\n","import { IconWidget } from './IconWidget';\nimport { TablePrimaryKeyWidget } from './TablePrimaryKeyWidget';\n\nexport const widgets = [TablePrimaryKeyWidget, IconWidget];\n"],"mappings":"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","names":["style","_a","implementWidget","jsx","value","implementWidget"]}