@plasmicpkgs/plasmic-rich-components 1.0.231 → 1.0.232

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 (40) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/index.js +16 -8
  3. package/dist/index.js.map +1 -1
  4. package/dist/plasmic-rich-components.esm.js +16 -8
  5. package/dist/plasmic-rich-components.esm.js.map +1 -1
  6. package/dist/utils.d.ts +4 -4
  7. package/package.json +3 -3
  8. package/skinny/{common-prop-types-94b20130.cjs.js → common-prop-types-691f4a06.cjs.js} +3 -3
  9. package/skinny/{common-prop-types-94b20130.cjs.js.map → common-prop-types-691f4a06.cjs.js.map} +1 -1
  10. package/skinny/{common-prop-types-82f3a4ed.esm.js → common-prop-types-758ece78.esm.js} +3 -3
  11. package/skinny/{common-prop-types-82f3a4ed.esm.js.map → common-prop-types-758ece78.esm.js.map} +1 -1
  12. package/skinny/{field-react-utils-c717ec94.cjs.js → field-react-utils-2bbbadc7.cjs.js} +2 -2
  13. package/skinny/{field-react-utils-c717ec94.cjs.js.map → field-react-utils-2bbbadc7.cjs.js.map} +1 -1
  14. package/skinny/{field-react-utils-26fba31e.esm.js → field-react-utils-46bb1f20.esm.js} +2 -2
  15. package/skinny/{field-react-utils-26fba31e.esm.js.map → field-react-utils-46bb1f20.esm.js.map} +1 -1
  16. package/skinny/{formatting-6f22c9d6.esm.js → formatting-b434487b.esm.js} +2 -2
  17. package/skinny/{formatting-6f22c9d6.esm.js.map → formatting-b434487b.esm.js.map} +1 -1
  18. package/skinny/{formatting-939d0aa3.cjs.js → formatting-c37b4133.cjs.js} +2 -2
  19. package/skinny/{formatting-939d0aa3.cjs.js.map → formatting-c37b4133.cjs.js.map} +1 -1
  20. package/skinny/rich-calendar/index.cjs.js +3 -3
  21. package/skinny/rich-calendar/index.esm.js +3 -3
  22. package/skinny/rich-details/index.cjs.js +2 -2
  23. package/skinny/rich-details/index.esm.js +2 -2
  24. package/skinny/rich-layout/index.cjs.js +1 -1
  25. package/skinny/rich-layout/index.cjs.js.map +1 -1
  26. package/skinny/rich-layout/index.esm.js +1 -1
  27. package/skinny/rich-layout/index.esm.js.map +1 -1
  28. package/skinny/rich-list/index.cjs.js +4 -4
  29. package/skinny/rich-list/index.cjs.js.map +1 -1
  30. package/skinny/rich-list/index.esm.js +4 -4
  31. package/skinny/rich-list/index.esm.js.map +1 -1
  32. package/skinny/rich-table/index.cjs.js +4 -4
  33. package/skinny/rich-table/index.esm.js +4 -4
  34. package/skinny/{utils-c32bd7ed.esm.js → utils-546b05e4.esm.js} +17 -9
  35. package/skinny/utils-546b05e4.esm.js.map +1 -0
  36. package/skinny/{utils-65c486f0.cjs.js → utils-da451c58.cjs.js} +17 -9
  37. package/skinny/utils-da451c58.cjs.js.map +1 -0
  38. package/skinny/utils.d.ts +4 -4
  39. package/skinny/utils-65c486f0.cjs.js.map +0 -1
  40. package/skinny/utils-c32bd7ed.esm.js.map +0 -1
@@ -2,15 +2,15 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var commonPropTypes = require('../common-prop-types-94b20130.cjs.js');
6
- var utils = require('../utils-65c486f0.cjs.js');
5
+ var commonPropTypes = require('../common-prop-types-691f4a06.cjs.js');
6
+ var utils = require('../utils-da451c58.cjs.js');
7
7
  var dataSources = require('@plasmicapp/data-sources');
8
8
  var antd = require('antd');
9
9
  var classNames = require('classnames');
10
10
  var groupBy = require('lodash/groupBy');
11
11
  var React = require('react');
12
- var fieldReactUtils = require('../field-react-utils-c717ec94.cjs.js');
13
- var formatting = require('../formatting-939d0aa3.cjs.js');
12
+ var fieldReactUtils = require('../field-react-utils-2bbbadc7.cjs.js');
13
+ var formatting = require('../formatting-c37b4133.cjs.js');
14
14
  require('../common-e1d76791.cjs.js');
15
15
  require('@ctrl/tinycolor');
16
16
  require('@plasmicapp/host/registerComponent');
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs.js","sources":["../../src/rich-list/RichList.tsx","../../src/rich-list/index.tsx"],"sourcesContent":["import {\n deriveFieldConfigs,\n NormalizedData,\n useNormalizedData,\n} from \"@plasmicapp/data-sources\";\nimport { Card, Input, List, Tag } from \"antd\";\nimport type { GetRowKey } from \"antd/es/table/interface\";\nimport classNames from \"classnames\";\nimport groupBy from \"lodash/groupBy\";\nimport React, { ReactNode } from \"react\";\nimport { BaseColumnConfig, FieldfulProps, RowFunc } from \"../field-mappings\";\nimport {\n deriveKeyOfRow,\n deriveRowKey,\n renderActions,\n tagDataArray,\n useSortedFilteredData,\n} from \"../field-react-utils\";\nimport { maybeRenderString, multiRenderValue } from \"../formatting\";\nimport {\n ensure,\n ensureArray,\n isInteractable,\n isLikeImage,\n maybe,\n mkShortId,\n} from \"../utils\";\n\n// Avoid csv-stringify, it doesn't directly work in browser without Buffer polyfill.\n\nexport interface Action {\n type: \"edit\" | \"view\" | \"delete\" | \"custom\";\n label?: string;\n moreMenu?: boolean;\n}\n\ninterface RowActionItem {\n type: \"item\";\n label: string;\n onClick: (rowKey: string, row: any) => void;\n}\n\ninterface RowActionMenu {\n type: \"menu\";\n label: string;\n children?: RowActionItem[];\n}\n\ntype RowAction = RowActionItem | RowActionMenu;\n\nexport interface RichListProps extends FieldfulProps<ListColumnConfig> {\n // Pass through\n size?: \"default\" | \"large\" | \"small\";\n header?: ReactNode;\n footer?: ReactNode;\n\n bordered?: boolean;\n pagination?: boolean;\n\n rowKey?: string | GetRowKey<any>;\n rowActions?: RowAction[];\n onRowClick?: (rowKey: string, row: any, event: React.MouseEvent) => void;\n\n pageSize?: number;\n\n hideSearch?: boolean;\n\n /** ListColumnConfig is obsolete for linkTo */\n linkTo?: ListColumnConfig | ((row: any) => string);\n image?: ListColumnConfig;\n title?: ListColumnConfig[];\n subtitle?: ListColumnConfig[];\n beforeTitle?: ListColumnConfig[];\n afterTitle?: ListColumnConfig[];\n content?: ListColumnConfig[];\n\n type?: \"grid\" | \"list\";\n}\n\n// Should really be using token colorFillTertiary instead of #8881.\nconst listCss = `\n.plasmic-list--grid .ant-list-items {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));\n gap: 16px;\n}\n\n.plasmic-list-search {\n /* Matches RichTable search. */\n max-width: 200px;\n margin-bottom: 8px;\n}\n\n.plasmic-list-item-content--unbordered {\n padding-left: 8px;\n padding-right: 8px;\n}\n\n.ant-list .plasmic-list-item {\n align-items: stretch;\n}\n\n.plasmic-list-item--clickable:hover {\n background-color: #8881;\n}\n\n.plasmic-list-item-image {\n max-width: 80px;\n max-height: 80px;\n aspect-ratio: 1/1;\n object-fit: cover;\n border-radius: 8px;\n}\n\n.plasmic-list-item-card {\n /* Unsure why needed, but cards otherwise can be much narrower. */\n width: 100%;\n /* For the body to fill the height, so all cards are the same height. */\n display: flex;\n flex-direction: column;\n}\n\n.plasmic-list-item-card > .ant-card-body {\n flex: 1;\n}\n\n.plasmic-list-item-card-cover {\n max-height: 300px;\n aspect-ratio: 1/1;\n object-fit: cover;\n}\n`;\n\nexport function RichList(props: RichListProps) {\n const {\n data: rawData = {\n data: [],\n schema: {\n id: \"inferred\",\n fields: [\n {\n id: \"id\",\n type: \"string\",\n readOnly: false,\n },\n ],\n },\n },\n type = \"list\",\n bordered = true,\n\n className,\n size,\n header,\n footer,\n\n rowActions = [],\n pageSize = 10,\n hideSearch,\n rowKey,\n pagination = true,\n onRowClick,\n ..._rest\n } = props;\n\n const normalizedData = useNormalizedData(rawData);\n\n const data = React.useMemo(() => {\n if (!normalizedData?.data) {\n return normalizedData;\n }\n return { ...normalizedData, data: tagDataArray(normalizedData.data) };\n }, [normalizedData]);\n\n const { normalized, finalRoles: roleConfigs } = useRoleDefinitions(\n data,\n props\n );\n\n // Simply ignore the linkTo if it's not a function.\n const linkTo = typeof props.linkTo === \"function\" ? props.linkTo : undefined;\n\n const { finalData, search, setSearch } = useSortedFilteredData(\n data,\n normalized\n );\n\n const actuallyBordered = type === \"list\" ? bordered : false;\n return (\n <div className={className}>\n <style dangerouslySetInnerHTML={{ __html: listCss }} />\n {!hideSearch && (\n <Input.Search\n className={\"plasmic-list-search\"}\n onChange={(e) => setSearch(e.target.value)}\n value={search}\n placeholder={\"Search\"}\n />\n )}\n <List\n className={classNames({\n // We use CSS grid instead of the built-in Ant grid which can only define fixed # columns, and only at screen (and not container) breakpoints.\n \"plasmic-list--grid\": type === \"grid\",\n })}\n size={size}\n header={header}\n footer={footer}\n dataSource={finalData}\n itemLayout={\"horizontal\"}\n bordered={actuallyBordered}\n pagination={\n pagination\n ? {\n pageSize: pageSize,\n showSizeChanger: false,\n }\n : false\n }\n renderItem={(record) => {\n // Currently, actions are nested inside the list item / card, so can't have both linkTo and actions or else hydration error.\n // Eventually can fork the Ant components to make the main linkTo area and actions not nest.\n const actions = renderActions(rowActions, record, data, rowKey);\n // actions={[\n // <SettingOutlined key=\"setting\" />,\n // <EditOutlined key=\"edit\" />,\n // <EllipsisOutlined key=\"ellipsis\" />,\n // ]}\n const image = maybe(\n maybeRenderString(record, roleConfigs.image?.[0]),\n (src) => (\n <img\n src={src}\n className={\n type === \"list\"\n ? \"plasmic-list-item-image\"\n : \"plasmic-list-item-card-cover\"\n }\n />\n )\n );\n const content = (\n <ListItemContent\n bordered={actuallyBordered}\n image={type === \"list\" ? image : undefined}\n title={multiRenderValue(record, roleConfigs.title)}\n subtitle={multiRenderValue(record, roleConfigs.subtitle)}\n beforeTitle={multiRenderValue(record, roleConfigs.beforeTitle)}\n afterTitle={multiRenderValue(record, roleConfigs.afterTitle)}\n content={multiRenderValue(record, roleConfigs.content)}\n />\n );\n\n function makeLinkWrapper() {\n if ((actions ?? []).length > 0) {\n return undefined;\n }\n const href = linkTo?.(record);\n if (!href && !onRowClick) {\n return undefined;\n }\n const _linkWrapper = (x: ReactNode) => (\n <a\n href={href}\n onClick={(event) => {\n const key = deriveKeyOfRow(\n record,\n deriveRowKey(data, rowKey)\n );\n if (\n key != null &&\n !isInteractable(event.target as HTMLElement)\n ) {\n onRowClick?.(key, record, event);\n }\n }}\n >\n {x}\n </a>\n );\n return _linkWrapper;\n }\n\n const linkWrapper = makeLinkWrapper();\n\n const hasLink = !!linkWrapper;\n\n function maybeLink(x: ReactNode) {\n return linkWrapper?.(x) ?? x;\n }\n\n return type === \"grid\" ? (\n <List.Item className={\"plasmic-list-item\"}>\n {maybeLink(\n <Card\n className={\"plasmic-list-item-card\"}\n size={\"small\"}\n cover={image}\n hoverable={hasLink}\n actions={actions}\n >\n {content}\n </Card>\n )}\n </List.Item>\n ) : (\n maybeLink(\n <List.Item\n actions={actions}\n className={classNames({\n \"plasmic-list-item\": true,\n \"plasmic-list-item--clickable\": hasLink,\n })}\n >\n {content}\n </List.Item>\n )\n );\n }}\n />\n </div>\n );\n}\n\nfunction ListItemContent({\n className,\n title,\n subtitle,\n image,\n beforeTitle,\n afterTitle,\n content,\n bordered,\n ...others\n}: {\n className?: string;\n title?: ReactNode;\n subtitle?: ReactNode;\n image?: ReactNode;\n beforeTitle?: ReactNode;\n afterTitle?: ReactNode;\n content?: ReactNode;\n bordered?: boolean;\n}) {\n const prefixCls = \"ant-list\";\n const classString = classNames(`${prefixCls}-item-meta`, className);\n\n return (\n <div\n {...others}\n className={classNames(\n {\n \"plasmic-list-item-content--unbordered\": !bordered,\n },\n classString\n )}\n >\n {image && <div className={`${prefixCls}-item-meta-avatar`}>{image}</div>}\n <div\n className={`${prefixCls}-item-meta-content`}\n style={{ display: \"flex\", flexDirection: \"column\", gap: 4 }}\n >\n {beforeTitle && (\n <div>\n <Tag>{beforeTitle}</Tag>\n </div>\n )}\n <div style={{ display: \"flex\", gap: 8 }}>\n {title && (\n <h4\n className={`${prefixCls}-item-meta-title`}\n style={{ margin: 0 }}\n >\n {title}\n </h4>\n )}\n {afterTitle && (\n <div className={`${prefixCls}-item-meta-description`}>\n {afterTitle}\n </div>\n )}\n </div>\n {subtitle && (\n <div className={`${prefixCls}-item-meta-description`}>{subtitle}</div>\n )}\n {content && <div>{content}</div>}\n </div>\n </div>\n );\n}\n\ninterface StyleConfig {\n styles: Record<string, any>;\n align: \"left\" | \"center\" | \"right\";\n freeze: \"off\" | \"left\" | \"right\";\n}\n\nconst defaultColumnConfig = (): ListColumnConfig =>\n ({\n key: mkShortId(),\n isEditableExpr: () => false,\n disableSorting: false,\n sortByExpr: undefined,\n isHidden: false,\n formatting: {\n styles: {},\n align: \"left\",\n freeze: \"off\",\n },\n dataType: \"auto\" as const,\n role: undefined,\n } as const);\n\nconst roles = [\n \"content\",\n \"title\",\n \"subtitle\",\n \"beforeTitle\",\n \"afterTitle\",\n \"image\",\n \"unset\",\n] as const;\n\nexport type Role = (typeof roles)[number];\n\nexport type ListColumnConfig = BaseColumnConfig & {\n isEditableExpr: RowFunc<boolean>;\n disableSorting: boolean;\n sortByExpr?: RowFunc<any>;\n formatting: StyleConfig;\n\n /**\n * The default inferred role, not the actual user-set role.\n */\n role: undefined | Role | \"unset\";\n};\n\n// This component is different from Table/Details since it has various different roles, so the UX is one of setting the choices for each role rather than a single list of fields.\n//\n// We first infer the defaults for each role.\n// This we always need to do because we want the choices to be 'stable'.\n// If the user sets one of the roles, without setting the others, we don't want to shift things around on the other roles as a result.\n// So the defaults need to always be there (they would only be irrelevant if all roles that would have had defaults were set/overridden by the user).\n//\n// Then, we layer on the user role choices.\n//\n// One UX wart is that unsetting a role will restore the default selection instead of clearing it.\n// User must know to actually set fieldId to none or (for arrays) remove the item.\n// Just another reason to fill in few roles by default.\nfunction useRoleDefinitions(\n data: NormalizedData | undefined,\n props: React.ComponentProps<typeof RichList>\n) {\n const { fields, setControlContextData, rowActions } = props;\n\n return React.useMemo(() => {\n const schema = data?.schema;\n const schemaMap = new Map(data?.schema?.fields.map((f) => [f.id, f]));\n if (!data || !schema) {\n return { normalized: [], finalRoles: {} };\n }\n\n function tagFieldConfigs(role: Role) {\n if (role !== \"unset\") {\n return ensureArray(props[role] ?? []).map((field) => {\n return {\n ...field,\n role,\n };\n });\n } else {\n return [];\n }\n }\n\n // This is only being computed to get the default role choices.\n const specifiedFieldsPartial = [\n ...tagFieldConfigs(\"image\"),\n ...tagFieldConfigs(\"content\"),\n ...tagFieldConfigs(\"title\"),\n ...tagFieldConfigs(\"beforeTitle\"),\n ...tagFieldConfigs(\"afterTitle\"),\n ...tagFieldConfigs(\"subtitle\"),\n ];\n\n function doDeriveFieldConfigs(mode: \"existing\" | \"defaults\") {\n return deriveFieldConfigs<ListColumnConfig>(\n mode === \"defaults\" ? [] : specifiedFieldsPartial,\n schema,\n (field) => ({\n ...defaultColumnConfig(),\n ...(field && {\n key: field.id,\n fieldId: field.id,\n title: field.label || field.id,\n // undefined means not yet determined in this routine, not 'unset'\n role: undefined,\n expr: (currentItem) => currentItem[field.id],\n }),\n })\n );\n }\n\n // Now we derive the defaults.\n //\n // We always start from a blank slate for this. We want stability - we don't want a situation where we are constantly shifting around the defaults based on what else the user has set.\n //\n // For instance,\n // (1) we derive `city` to be content,\n // (2) user sets `city` as title,\n // (3) we now derive a different content because `city` is used.\n const {\n mergedFields: defaultMergedFields,\n minimalFullLengthFields: defaultMinimalFullLengthFields,\n } = doDeriveFieldConfigs(\"defaults\");\n\n // Find a good default image field.\n // Filter mergedFields where there are mostly values (in the sampleRows) that are a string that looks like a URL or path to an image file.\n // Of these, prefer the one with a name like image, picture, pic, img, avatar, profile, photo, icon.\n // Otherwise, prefer the one with a title with that substring.\n // Otherwise, pick any remaining one.\n if (\n data.data.length > 0 &&\n !defaultMergedFields.some((field) => field.role === \"image\")\n ) {\n const sampleRows = Array.from(\n new Set(\n [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].map((i) =>\n Math.round((i / 9) * (data.data.length - 1))\n )\n )\n ).map((i) => data.data[i]);\n const imageFieldCandidates = defaultMergedFields.filter(\n (field) =>\n !field.role &&\n sampleRows.filter(\n (row) => field.fieldId && isLikeImage(row[field.fieldId])\n ).length >=\n sampleRows.length / 2\n );\n const imageField =\n imageFieldCandidates.find((f) =>\n f.fieldId?.match(\n /^(image|picture|pic|img|avatar|profile|photo|icon)$/i\n )\n ) ??\n imageFieldCandidates.find((f) =>\n f.fieldId?.match(\n /.*(image|picture|pic|img|avatar|profile|photo|icon).*/i\n )\n ) ??\n imageFieldCandidates[0];\n if (imageField) {\n imageField.role = \"image\";\n }\n }\n\n // Find a good default title field, just based on the field name.\n if (!defaultMergedFields.some((field) => field.role === \"title\")) {\n const titleField = defaultMergedFields.find(\n (field) =>\n !field.role &&\n field.fieldId\n ?.toLowerCase()\n .match(/^(title|name|first[ _-]?name|full[ _-]?name)$/)\n );\n if (titleField) {\n titleField.role = \"title\";\n }\n }\n\n // Find a good default content field - just any remaining text field.\n if (!defaultMergedFields.some((field) => field.role === \"content\")) {\n const contentField = defaultMergedFields.find(\n (field) =>\n !field.role &&\n field.fieldId &&\n schemaMap.get(field.fieldId)?.type === \"string\"\n );\n if (contentField) {\n contentField.role = \"content\";\n }\n }\n\n const fieldIdToDefaultRole = new Map(\n defaultMergedFields.map((f) => [f.fieldId, f.role])\n );\n for (const f of defaultMinimalFullLengthFields) {\n f.role = fieldIdToDefaultRole.get(f.fieldId);\n }\n\n // Now we have the defaults!\n //\n // We once again derive field configs, this time using existing props.\n // Then we add on the derived defaults for the \"real merged\" fields.\n //\n // Note this is kind of an awkward/wasteful use of deriveFieldConfigs since it was more for table columns originally, and this by-role usage is a different shape of problem. We're mainly using it to fill in / \"inflate\" the additional settings on these FieldConfigs. Haven't yet bothered finding a better utility interface.\n const { mergedFields, minimalFullLengthFields } =\n doDeriveFieldConfigs(\"existing\");\n\n const minimalFullLengthFieldsWithDefaults = [\n ...minimalFullLengthFields.filter((f) => f.role && f.role !== \"unset\"),\n ...defaultMinimalFullLengthFields.filter(\n (f) => f.role && f.role !== \"unset\" && !props[f.role]\n ),\n ];\n const mergedFieldsWithDefaults = [\n ...mergedFields.filter((f) => f.role && f.role !== \"unset\"),\n ...defaultMergedFields.filter(\n (f) => f.role && f.role !== \"unset\" && !props[f.role]\n ),\n ];\n\n // We now get by-role grouping which is needed by the component.\n const roleConfigs = ensure(\n groupBy(mergedFieldsWithDefaults, (f) => f.role)\n );\n\n const finalRoles: Partial<Record<Role, ListColumnConfig[]>> = {};\n for (const role of roles) {\n if (role !== \"unset\") {\n finalRoles[role] = maybe(props[role], ensureArray) ?? roleConfigs[role];\n }\n }\n\n setControlContextData?.({\n ...data,\n mergedFields: mergedFieldsWithDefaults,\n minimalFullLengthFields: minimalFullLengthFieldsWithDefaults,\n });\n\n const normalized = mergedFieldsWithDefaults;\n return { normalized, finalRoles };\n }, [fields, data, setControlContextData, rowActions]);\n}\n","import { ComponentMeta } from \"@plasmicapp/host/registerComponent\";\nimport {\n commonProps,\n dataProp,\n onRowClickProp,\n roleProp,\n rowActionsProp,\n} from \"../common-prop-types\";\nimport { Registerable, registerComponentHelper } from \"../utils\";\nimport { RichList, RichListProps } from \"./RichList\";\n\nexport * from \"./RichList\";\nexport default RichList;\nconst richListMeta: ComponentMeta<RichListProps> = {\n name: \"hostless-rich-list\",\n displayName: \"Data List\",\n defaultStyles: {\n width: \"stretch\",\n padding: \"16px\",\n maxHeight: \"100%\",\n },\n defaultDisplay: \"block\",\n props: {\n data: dataProp(),\n type: {\n type: \"choice\",\n options: [\n { value: \"list\", label: \"List\" },\n { value: \"grid\", label: \"Grid\" },\n ],\n defaultValueHint: \"list\",\n },\n\n header: {\n type: \"slot\",\n hidePlaceholder: true,\n },\n footer: {\n type: \"slot\",\n hidePlaceholder: true,\n },\n\n title: roleProp({ role: \"title\" }),\n content: roleProp({ role: \"content\" }),\n image: roleProp({ role: \"image\", singular: true }),\n subtitle: roleProp({\n role: \"subtitle\",\n advanced: true,\n }),\n // Haven't styled these yet!\n // beforeTitle: roleProp({ role: \"beforeTitle\", advanced: true }),\n // afterTitle: roleProp({ role: \"afterTitle\", advanced: true }),\n\n linkTo: {\n type: \"function\",\n control: {\n type: \"href\",\n },\n argNames: [\"currentItem\"],\n argValues: (_props: any, ctx: any) => [ctx?.data?.[0]],\n } as any,\n\n onRowClick: onRowClickProp(),\n rowActions: rowActionsProp(),\n\n bordered: {\n type: \"boolean\",\n defaultValue: true,\n hidden: (ps) => (ps.type ?? \"list\") !== \"list\",\n },\n\n ...commonProps(),\n },\n importName: \"RichList\",\n importPath: \"@plasmicpkgs/plasmic-rich-components/skinny/rich-list\",\n};\n\nexport function registerRichList(loader?: Registerable) {\n registerComponentHelper(loader, RichList, richListMeta);\n}\n"],"names":["useNormalizedData","React","tagDataArray","useSortedFilteredData","Input","List","classNames","_a","renderActions","maybe","maybeRenderString","multiRenderValue","deriveKeyOfRow","deriveRowKey","isInteractable","Card","__spreadValues","Tag","mkShortId","ensureArray","deriveFieldConfigs","isLikeImage","ensure","groupBy","dataProp","roleProp","onRowClickProp","rowActionsProp","commonProps","registerComponentHelper"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs.js","sources":["../../src/rich-list/RichList.tsx","../../src/rich-list/index.tsx"],"sourcesContent":["import {\n deriveFieldConfigs,\n NormalizedData,\n useNormalizedData,\n} from \"@plasmicapp/data-sources\";\nimport { Card, Input, List, Tag } from \"antd\";\nimport type { GetRowKey } from \"antd/es/table/interface\";\nimport classNames from \"classnames\";\nimport groupBy from \"lodash/groupBy\";\nimport React, { ReactNode } from \"react\";\nimport { BaseColumnConfig, FieldfulProps, RowFunc } from \"../field-mappings\";\nimport {\n deriveKeyOfRow,\n deriveRowKey,\n renderActions,\n tagDataArray,\n useSortedFilteredData,\n} from \"../field-react-utils\";\nimport { maybeRenderString, multiRenderValue } from \"../formatting\";\nimport {\n ensure,\n ensureArray,\n isInteractable,\n isLikeImage,\n maybe,\n mkShortId,\n} from \"../utils\";\n\n// Avoid csv-stringify, it doesn't directly work in browser without Buffer polyfill.\n\nexport interface Action {\n type: \"edit\" | \"view\" | \"delete\" | \"custom\";\n label?: string;\n moreMenu?: boolean;\n}\n\ninterface RowActionItem {\n type: \"item\";\n label: string;\n onClick: (rowKey: string, row: any) => void;\n}\n\ninterface RowActionMenu {\n type: \"menu\";\n label: string;\n children?: RowActionItem[];\n}\n\ntype RowAction = RowActionItem | RowActionMenu;\n\nexport interface RichListProps extends FieldfulProps<ListColumnConfig> {\n // Pass through\n size?: \"default\" | \"large\" | \"small\";\n header?: ReactNode;\n footer?: ReactNode;\n\n bordered?: boolean;\n pagination?: boolean;\n\n rowKey?: string | GetRowKey<any>;\n rowActions?: RowAction[];\n onRowClick?: (rowKey: string, row: any, event: React.MouseEvent) => void;\n\n pageSize?: number;\n\n hideSearch?: boolean;\n\n /** ListColumnConfig is obsolete for linkTo */\n linkTo?: ListColumnConfig | ((row: any) => string);\n image?: ListColumnConfig;\n title?: ListColumnConfig[];\n subtitle?: ListColumnConfig[];\n beforeTitle?: ListColumnConfig[];\n afterTitle?: ListColumnConfig[];\n content?: ListColumnConfig[];\n\n type?: \"grid\" | \"list\";\n}\n\n// Should really be using token colorFillTertiary instead of #8881.\nconst listCss = `\n.plasmic-list--grid .ant-list-items {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));\n gap: 16px;\n}\n\n.plasmic-list-search {\n /* Matches RichTable search. */\n max-width: 200px;\n margin-bottom: 8px;\n}\n\n.plasmic-list-item-content--unbordered {\n padding-left: 8px;\n padding-right: 8px;\n}\n\n.ant-list .plasmic-list-item {\n align-items: stretch;\n}\n\n.plasmic-list-item--clickable:hover {\n background-color: #8881;\n}\n\n.plasmic-list-item-image {\n max-width: 80px;\n max-height: 80px;\n aspect-ratio: 1/1;\n object-fit: cover;\n border-radius: 8px;\n}\n\n.plasmic-list-item-card {\n /* Unsure why needed, but cards otherwise can be much narrower. */\n width: 100%;\n /* For the body to fill the height, so all cards are the same height. */\n display: flex;\n flex-direction: column;\n}\n\n.plasmic-list-item-card > .ant-card-body {\n flex: 1;\n}\n\n.plasmic-list-item-card-cover {\n max-height: 300px;\n aspect-ratio: 1/1;\n object-fit: cover;\n}\n`;\n\nexport function RichList(props: RichListProps) {\n const {\n data: rawData = {\n data: [],\n schema: {\n id: \"inferred\",\n fields: [\n {\n id: \"id\",\n type: \"string\",\n readOnly: false,\n },\n ],\n },\n },\n type = \"list\",\n bordered = true,\n\n className,\n size,\n header,\n footer,\n\n rowActions = [],\n pageSize = 10,\n hideSearch,\n rowKey,\n pagination = true,\n onRowClick,\n ..._rest\n } = props;\n\n const normalizedData = useNormalizedData(rawData);\n\n const data = React.useMemo(() => {\n if (!normalizedData?.data) {\n return normalizedData;\n }\n return { ...normalizedData, data: tagDataArray(normalizedData.data) };\n }, [normalizedData]);\n\n const { normalized, finalRoles: roleConfigs } = useRoleDefinitions(\n data,\n props\n );\n\n // Simply ignore the linkTo if it's not a function.\n const linkTo = typeof props.linkTo === \"function\" ? props.linkTo : undefined;\n\n const { finalData, search, setSearch } = useSortedFilteredData(\n data,\n normalized\n );\n\n const actuallyBordered = type === \"list\" ? bordered : false;\n return (\n <div className={className}>\n <style dangerouslySetInnerHTML={{ __html: listCss }} />\n {!hideSearch && (\n <Input.Search\n className={\"plasmic-list-search\"}\n onChange={(e) => setSearch(e.target.value)}\n value={search}\n placeholder={\"Search\"}\n />\n )}\n <List\n className={classNames({\n // We use CSS grid instead of the built-in Ant grid which can only define fixed # columns, and only at screen (and not container) breakpoints.\n \"plasmic-list--grid\": type === \"grid\",\n })}\n size={size}\n header={header}\n footer={footer}\n dataSource={finalData}\n itemLayout={\"horizontal\"}\n bordered={actuallyBordered}\n pagination={\n pagination\n ? {\n pageSize: pageSize,\n showSizeChanger: false,\n }\n : false\n }\n renderItem={(record) => {\n // Currently, actions are nested inside the list item / card, so can't have both linkTo and actions or else hydration error.\n // Eventually can fork the Ant components to make the main linkTo area and actions not nest.\n const actions = renderActions(rowActions, record, data, rowKey);\n // actions={[\n // <SettingOutlined key=\"setting\" />,\n // <EditOutlined key=\"edit\" />,\n // <EllipsisOutlined key=\"ellipsis\" />,\n // ]}\n const image = maybe(\n maybeRenderString(record, roleConfigs.image?.[0]),\n (src) => (\n <img\n src={src}\n className={\n type === \"list\"\n ? \"plasmic-list-item-image\"\n : \"plasmic-list-item-card-cover\"\n }\n />\n )\n );\n const content = (\n <ListItemContent\n bordered={actuallyBordered}\n image={type === \"list\" ? image : undefined}\n title={multiRenderValue(record, roleConfigs.title)}\n subtitle={multiRenderValue(record, roleConfigs.subtitle)}\n beforeTitle={multiRenderValue(record, roleConfigs.beforeTitle)}\n afterTitle={multiRenderValue(record, roleConfigs.afterTitle)}\n content={multiRenderValue(record, roleConfigs.content)}\n />\n );\n\n function makeLinkWrapper() {\n if ((actions ?? []).length > 0) {\n return undefined;\n }\n const href = linkTo?.(record);\n if (!href && !onRowClick) {\n return undefined;\n }\n const _linkWrapper = (x: ReactNode) => (\n <a\n href={href}\n onClick={(event) => {\n const key = deriveKeyOfRow(\n record,\n deriveRowKey(data, rowKey)\n );\n if (\n key != null &&\n !isInteractable(event.target as HTMLElement)\n ) {\n onRowClick?.(key, record, event);\n }\n }}\n >\n {x}\n </a>\n );\n return _linkWrapper;\n }\n\n const linkWrapper = makeLinkWrapper();\n\n const hasLink = !!linkWrapper;\n\n function maybeLink(x: ReactNode) {\n return linkWrapper?.(x) ?? x;\n }\n\n return type === \"grid\" ? (\n <List.Item className={\"plasmic-list-item\"}>\n {maybeLink(\n <Card\n className={\"plasmic-list-item-card\"}\n size={\"small\"}\n cover={image}\n hoverable={hasLink}\n actions={actions}\n >\n {content}\n </Card>\n )}\n </List.Item>\n ) : (\n maybeLink(\n <List.Item\n actions={actions}\n className={classNames({\n \"plasmic-list-item\": true,\n \"plasmic-list-item--clickable\": hasLink,\n })}\n >\n {content}\n </List.Item>\n )\n );\n }}\n />\n </div>\n );\n}\n\nfunction ListItemContent({\n className,\n title,\n subtitle,\n image,\n beforeTitle,\n afterTitle,\n content,\n bordered,\n ...others\n}: {\n className?: string;\n title?: ReactNode;\n subtitle?: ReactNode;\n image?: ReactNode;\n beforeTitle?: ReactNode;\n afterTitle?: ReactNode;\n content?: ReactNode;\n bordered?: boolean;\n}) {\n const prefixCls = \"ant-list\";\n const classString = classNames(`${prefixCls}-item-meta`, className);\n\n return (\n <div\n {...others}\n className={classNames(\n {\n \"plasmic-list-item-content--unbordered\": !bordered,\n },\n classString\n )}\n >\n {image && <div className={`${prefixCls}-item-meta-avatar`}>{image}</div>}\n <div\n className={`${prefixCls}-item-meta-content`}\n style={{ display: \"flex\", flexDirection: \"column\", gap: 4 }}\n >\n {beforeTitle && (\n <div>\n <Tag>{beforeTitle}</Tag>\n </div>\n )}\n <div style={{ display: \"flex\", gap: 8 }}>\n {title && (\n <h4\n className={`${prefixCls}-item-meta-title`}\n style={{ margin: 0 }}\n >\n {title}\n </h4>\n )}\n {afterTitle && (\n <div className={`${prefixCls}-item-meta-description`}>\n {afterTitle}\n </div>\n )}\n </div>\n {subtitle && (\n <div className={`${prefixCls}-item-meta-description`}>{subtitle}</div>\n )}\n {content && <div>{content}</div>}\n </div>\n </div>\n );\n}\n\ninterface StyleConfig {\n styles: Record<string, any>;\n align: \"left\" | \"center\" | \"right\";\n freeze: \"off\" | \"left\" | \"right\";\n}\n\nconst defaultColumnConfig = (): ListColumnConfig =>\n ({\n key: mkShortId(),\n isEditableExpr: () => false,\n disableSorting: false,\n sortByExpr: undefined,\n isHidden: false,\n formatting: {\n styles: {},\n align: \"left\",\n freeze: \"off\",\n },\n dataType: \"auto\" as const,\n role: undefined,\n } as const);\n\nconst roles = [\n \"content\",\n \"title\",\n \"subtitle\",\n \"beforeTitle\",\n \"afterTitle\",\n \"image\",\n \"unset\",\n] as const;\n\nexport type Role = (typeof roles)[number];\n\nexport type ListColumnConfig = BaseColumnConfig & {\n isEditableExpr: RowFunc<boolean>;\n disableSorting: boolean;\n sortByExpr?: RowFunc<any>;\n formatting: StyleConfig;\n\n /**\n * The default inferred role, not the actual user-set role.\n */\n role: undefined | Role | \"unset\";\n};\n\n// This component is different from Table/Details since it has various different roles, so the UX is one of setting the choices for each role rather than a single list of fields.\n//\n// We first infer the defaults for each role.\n// This we always need to do because we want the choices to be 'stable'.\n// If the user sets one of the roles, without setting the others, we don't want to shift things around on the other roles as a result.\n// So the defaults need to always be there (they would only be irrelevant if all roles that would have had defaults were set/overridden by the user).\n//\n// Then, we layer on the user role choices.\n//\n// One UX wart is that unsetting a role will restore the default selection instead of clearing it.\n// User must know to actually set fieldId to none or (for arrays) remove the item.\n// Just another reason to fill in few roles by default.\nfunction useRoleDefinitions(\n data: NormalizedData | undefined,\n props: React.ComponentProps<typeof RichList>\n) {\n const { fields, setControlContextData, rowActions } = props;\n\n return React.useMemo(() => {\n const schema = data?.schema;\n const schemaMap = new Map(data?.schema?.fields.map((f) => [f.id, f]));\n if (!data || !schema) {\n return { normalized: [], finalRoles: {} };\n }\n\n function tagFieldConfigs(role: Role) {\n if (role !== \"unset\") {\n return ensureArray(props[role] ?? []).map((field) => {\n return {\n ...field,\n role,\n };\n });\n } else {\n return [];\n }\n }\n\n // This is only being computed to get the default role choices.\n const specifiedFieldsPartial = [\n ...tagFieldConfigs(\"image\"),\n ...tagFieldConfigs(\"content\"),\n ...tagFieldConfigs(\"title\"),\n ...tagFieldConfigs(\"beforeTitle\"),\n ...tagFieldConfigs(\"afterTitle\"),\n ...tagFieldConfigs(\"subtitle\"),\n ];\n\n function doDeriveFieldConfigs(mode: \"existing\" | \"defaults\") {\n return deriveFieldConfigs<ListColumnConfig>(\n mode === \"defaults\" ? [] : specifiedFieldsPartial,\n schema,\n (field) => ({\n ...defaultColumnConfig(),\n ...(field && {\n key: field.id,\n fieldId: field.id,\n title: field.label || field.id,\n // undefined means not yet determined in this routine, not 'unset'\n role: undefined,\n expr: (currentItem) => currentItem[field.id],\n }),\n })\n );\n }\n\n // Now we derive the defaults.\n //\n // We always start from a blank slate for this. We want stability - we don't want a situation where we are constantly shifting around the defaults based on what else the user has set.\n //\n // For instance,\n // (1) we derive `city` to be content,\n // (2) user sets `city` as title,\n // (3) we now derive a different content because `city` is used.\n const {\n mergedFields: defaultMergedFields,\n minimalFullLengthFields: defaultMinimalFullLengthFields,\n } = doDeriveFieldConfigs(\"defaults\");\n\n // Find a good default image field.\n // Filter mergedFields where there are mostly values (in the sampleRows) that are a string that looks like a URL or path to an image file.\n // Of these, prefer the one with a name like image, picture, pic, img, avatar, profile, photo, icon.\n // Otherwise, prefer the one with a title with that substring.\n // Otherwise, pick any remaining one.\n if (\n data.data.length > 0 &&\n !defaultMergedFields.some((field) => field.role === \"image\")\n ) {\n const sampleRows = Array.from(\n new Set(\n [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].map((i) =>\n Math.round((i / 9) * (data.data.length - 1))\n )\n )\n ).map((i) => data.data[i]);\n const imageFieldCandidates = defaultMergedFields.filter(\n (field) =>\n !field.role &&\n sampleRows.filter(\n (row) => field.fieldId && isLikeImage(row[field.fieldId])\n ).length >=\n sampleRows.length / 2\n );\n const imageField =\n imageFieldCandidates.find((f) =>\n f.fieldId?.match(\n /^(image|picture|pic|img|avatar|profile|photo|icon)$/i\n )\n ) ??\n imageFieldCandidates.find((f) =>\n f.fieldId?.match(\n /.*(image|picture|pic|img|avatar|profile|photo|icon).*/i\n )\n ) ??\n imageFieldCandidates[0];\n if (imageField) {\n imageField.role = \"image\";\n }\n }\n\n // Find a good default title field, just based on the field name.\n if (!defaultMergedFields.some((field) => field.role === \"title\")) {\n const titleField = defaultMergedFields.find(\n (field) =>\n !field.role &&\n field.fieldId\n ?.toLowerCase()\n .match(/^(title|name|first[ _-]?name|full[ _-]?name)$/)\n );\n if (titleField) {\n titleField.role = \"title\";\n }\n }\n\n // Find a good default content field - just any remaining text field.\n if (!defaultMergedFields.some((field) => field.role === \"content\")) {\n const contentField = defaultMergedFields.find(\n (field) =>\n !field.role &&\n field.fieldId &&\n schemaMap.get(field.fieldId)?.type === \"string\"\n );\n if (contentField) {\n contentField.role = \"content\";\n }\n }\n\n const fieldIdToDefaultRole = new Map(\n defaultMergedFields.map((f) => [f.fieldId, f.role])\n );\n for (const f of defaultMinimalFullLengthFields) {\n f.role = fieldIdToDefaultRole.get(f.fieldId);\n }\n\n // Now we have the defaults!\n //\n // We once again derive field configs, this time using existing props.\n // Then we add on the derived defaults for the \"real merged\" fields.\n //\n // Note this is kind of an awkward/wasteful use of deriveFieldConfigs since it was more for table columns originally, and this by-role usage is a different shape of problem. We're mainly using it to fill in / \"inflate\" the additional settings on these FieldConfigs. Haven't yet bothered finding a better utility interface.\n const { mergedFields, minimalFullLengthFields } =\n doDeriveFieldConfigs(\"existing\");\n\n const minimalFullLengthFieldsWithDefaults = [\n ...minimalFullLengthFields.filter((f) => f.role && f.role !== \"unset\"),\n ...defaultMinimalFullLengthFields.filter(\n (f) => f.role && f.role !== \"unset\" && !props[f.role]\n ),\n ];\n const mergedFieldsWithDefaults = [\n ...mergedFields.filter((f) => f.role && f.role !== \"unset\"),\n ...defaultMergedFields.filter(\n (f) => f.role && f.role !== \"unset\" && !props[f.role]\n ),\n ];\n\n // We now get by-role grouping which is needed by the component.\n const roleConfigs = ensure(\n groupBy(mergedFieldsWithDefaults, (f) => f.role)\n );\n\n const finalRoles: Partial<Record<Role, ListColumnConfig[]>> = {};\n for (const role of roles) {\n if (role !== \"unset\") {\n finalRoles[role] = maybe(props[role], ensureArray) ?? roleConfigs[role];\n }\n }\n\n setControlContextData?.({\n ...data,\n mergedFields: mergedFieldsWithDefaults,\n minimalFullLengthFields: minimalFullLengthFieldsWithDefaults,\n });\n\n const normalized = mergedFieldsWithDefaults;\n return { normalized, finalRoles };\n }, [fields, data, setControlContextData, rowActions]);\n}\n","import { type CodeComponentMeta } from \"@plasmicapp/host/registerComponent\";\nimport {\n commonProps,\n dataProp,\n onRowClickProp,\n roleProp,\n rowActionsProp,\n} from \"../common-prop-types\";\nimport { Registerable, registerComponentHelper } from \"../utils\";\nimport { RichList, RichListProps } from \"./RichList\";\n\nexport * from \"./RichList\";\nexport default RichList;\nconst richListMeta: CodeComponentMeta<RichListProps> = {\n name: \"hostless-rich-list\",\n displayName: \"Data List\",\n defaultStyles: {\n width: \"stretch\",\n padding: \"16px\",\n maxHeight: \"100%\",\n },\n defaultDisplay: \"block\",\n props: {\n data: dataProp(),\n type: {\n type: \"choice\",\n options: [\n { value: \"list\", label: \"List\" },\n { value: \"grid\", label: \"Grid\" },\n ],\n defaultValueHint: \"list\",\n },\n\n header: {\n type: \"slot\",\n hidePlaceholder: true,\n },\n footer: {\n type: \"slot\",\n hidePlaceholder: true,\n },\n\n title: roleProp({ role: \"title\" }),\n content: roleProp({ role: \"content\" }),\n image: roleProp({ role: \"image\", singular: true }),\n subtitle: roleProp({\n role: \"subtitle\",\n advanced: true,\n }),\n // Haven't styled these yet!\n // beforeTitle: roleProp({ role: \"beforeTitle\", advanced: true }),\n // afterTitle: roleProp({ role: \"afterTitle\", advanced: true }),\n\n linkTo: {\n type: \"function\",\n control: {\n type: \"href\",\n },\n argNames: [\"currentItem\"],\n argValues: (_props: any, ctx: any) => [ctx?.data?.[0]],\n } as any,\n\n onRowClick: onRowClickProp(),\n rowActions: rowActionsProp(),\n\n bordered: {\n type: \"boolean\",\n defaultValue: true,\n hidden: (ps) => (ps.type ?? \"list\") !== \"list\",\n },\n\n ...commonProps(),\n },\n importName: \"RichList\",\n importPath: \"@plasmicpkgs/plasmic-rich-components/skinny/rich-list\",\n};\n\nexport function registerRichList(loader?: Registerable) {\n registerComponentHelper(loader, RichList, richListMeta);\n}\n"],"names":["useNormalizedData","React","tagDataArray","useSortedFilteredData","Input","List","classNames","_a","renderActions","maybe","maybeRenderString","multiRenderValue","deriveKeyOfRow","deriveRowKey","isInteractable","Card","__spreadValues","Tag","mkShortId","ensureArray","deriveFieldConfigs","isLikeImage","ensure","groupBy","dataProp","roleProp","onRowClickProp","rowActionsProp","commonProps","registerComponentHelper"],"mappings":"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"}
@@ -1,12 +1,12 @@
1
- import { d as dataProp, r as roleProp, o as onRowClickProp, a as rowActionsProp, c as commonProps } from '../common-prop-types-82f3a4ed.esm.js';
2
- import { m as maybe, f as isLikeImage, e as ensure, c as ensureArray, g as isInteractable, d as mkShortId, r as registerComponentHelper } from '../utils-c32bd7ed.esm.js';
1
+ import { d as dataProp, r as roleProp, o as onRowClickProp, a as rowActionsProp, c as commonProps } from '../common-prop-types-758ece78.esm.js';
2
+ import { m as maybe, f as isLikeImage, e as ensure, c as ensureArray, g as isInteractable, d as mkShortId, r as registerComponentHelper } from '../utils-546b05e4.esm.js';
3
3
  import { useNormalizedData, deriveFieldConfigs } from '@plasmicapp/data-sources';
4
4
  import { Input, List, Tag, Card } from 'antd';
5
5
  import classNames from 'classnames';
6
6
  import groupBy from 'lodash/groupBy';
7
7
  import React from 'react';
8
- import { t as tagDataArray, u as useSortedFilteredData, r as renderActions, d as deriveKeyOfRow, a as deriveRowKey } from '../field-react-utils-26fba31e.esm.js';
9
- import { m as maybeRenderString, a as multiRenderValue } from '../formatting-6f22c9d6.esm.js';
8
+ import { t as tagDataArray, u as useSortedFilteredData, r as renderActions, d as deriveKeyOfRow, a as deriveRowKey } from '../field-react-utils-46bb1f20.esm.js';
9
+ import { m as maybeRenderString, a as multiRenderValue } from '../formatting-b434487b.esm.js';
10
10
  import '../common-8cca2977.esm.js';
11
11
  import '@ctrl/tinycolor';
12
12
  import '@plasmicapp/host/registerComponent';
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../../src/rich-list/RichList.tsx","../../src/rich-list/index.tsx"],"sourcesContent":["import {\n deriveFieldConfigs,\n NormalizedData,\n useNormalizedData,\n} from \"@plasmicapp/data-sources\";\nimport { Card, Input, List, Tag } from \"antd\";\nimport type { GetRowKey } from \"antd/es/table/interface\";\nimport classNames from \"classnames\";\nimport groupBy from \"lodash/groupBy\";\nimport React, { ReactNode } from \"react\";\nimport { BaseColumnConfig, FieldfulProps, RowFunc } from \"../field-mappings\";\nimport {\n deriveKeyOfRow,\n deriveRowKey,\n renderActions,\n tagDataArray,\n useSortedFilteredData,\n} from \"../field-react-utils\";\nimport { maybeRenderString, multiRenderValue } from \"../formatting\";\nimport {\n ensure,\n ensureArray,\n isInteractable,\n isLikeImage,\n maybe,\n mkShortId,\n} from \"../utils\";\n\n// Avoid csv-stringify, it doesn't directly work in browser without Buffer polyfill.\n\nexport interface Action {\n type: \"edit\" | \"view\" | \"delete\" | \"custom\";\n label?: string;\n moreMenu?: boolean;\n}\n\ninterface RowActionItem {\n type: \"item\";\n label: string;\n onClick: (rowKey: string, row: any) => void;\n}\n\ninterface RowActionMenu {\n type: \"menu\";\n label: string;\n children?: RowActionItem[];\n}\n\ntype RowAction = RowActionItem | RowActionMenu;\n\nexport interface RichListProps extends FieldfulProps<ListColumnConfig> {\n // Pass through\n size?: \"default\" | \"large\" | \"small\";\n header?: ReactNode;\n footer?: ReactNode;\n\n bordered?: boolean;\n pagination?: boolean;\n\n rowKey?: string | GetRowKey<any>;\n rowActions?: RowAction[];\n onRowClick?: (rowKey: string, row: any, event: React.MouseEvent) => void;\n\n pageSize?: number;\n\n hideSearch?: boolean;\n\n /** ListColumnConfig is obsolete for linkTo */\n linkTo?: ListColumnConfig | ((row: any) => string);\n image?: ListColumnConfig;\n title?: ListColumnConfig[];\n subtitle?: ListColumnConfig[];\n beforeTitle?: ListColumnConfig[];\n afterTitle?: ListColumnConfig[];\n content?: ListColumnConfig[];\n\n type?: \"grid\" | \"list\";\n}\n\n// Should really be using token colorFillTertiary instead of #8881.\nconst listCss = `\n.plasmic-list--grid .ant-list-items {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));\n gap: 16px;\n}\n\n.plasmic-list-search {\n /* Matches RichTable search. */\n max-width: 200px;\n margin-bottom: 8px;\n}\n\n.plasmic-list-item-content--unbordered {\n padding-left: 8px;\n padding-right: 8px;\n}\n\n.ant-list .plasmic-list-item {\n align-items: stretch;\n}\n\n.plasmic-list-item--clickable:hover {\n background-color: #8881;\n}\n\n.plasmic-list-item-image {\n max-width: 80px;\n max-height: 80px;\n aspect-ratio: 1/1;\n object-fit: cover;\n border-radius: 8px;\n}\n\n.plasmic-list-item-card {\n /* Unsure why needed, but cards otherwise can be much narrower. */\n width: 100%;\n /* For the body to fill the height, so all cards are the same height. */\n display: flex;\n flex-direction: column;\n}\n\n.plasmic-list-item-card > .ant-card-body {\n flex: 1;\n}\n\n.plasmic-list-item-card-cover {\n max-height: 300px;\n aspect-ratio: 1/1;\n object-fit: cover;\n}\n`;\n\nexport function RichList(props: RichListProps) {\n const {\n data: rawData = {\n data: [],\n schema: {\n id: \"inferred\",\n fields: [\n {\n id: \"id\",\n type: \"string\",\n readOnly: false,\n },\n ],\n },\n },\n type = \"list\",\n bordered = true,\n\n className,\n size,\n header,\n footer,\n\n rowActions = [],\n pageSize = 10,\n hideSearch,\n rowKey,\n pagination = true,\n onRowClick,\n ..._rest\n } = props;\n\n const normalizedData = useNormalizedData(rawData);\n\n const data = React.useMemo(() => {\n if (!normalizedData?.data) {\n return normalizedData;\n }\n return { ...normalizedData, data: tagDataArray(normalizedData.data) };\n }, [normalizedData]);\n\n const { normalized, finalRoles: roleConfigs } = useRoleDefinitions(\n data,\n props\n );\n\n // Simply ignore the linkTo if it's not a function.\n const linkTo = typeof props.linkTo === \"function\" ? props.linkTo : undefined;\n\n const { finalData, search, setSearch } = useSortedFilteredData(\n data,\n normalized\n );\n\n const actuallyBordered = type === \"list\" ? bordered : false;\n return (\n <div className={className}>\n <style dangerouslySetInnerHTML={{ __html: listCss }} />\n {!hideSearch && (\n <Input.Search\n className={\"plasmic-list-search\"}\n onChange={(e) => setSearch(e.target.value)}\n value={search}\n placeholder={\"Search\"}\n />\n )}\n <List\n className={classNames({\n // We use CSS grid instead of the built-in Ant grid which can only define fixed # columns, and only at screen (and not container) breakpoints.\n \"plasmic-list--grid\": type === \"grid\",\n })}\n size={size}\n header={header}\n footer={footer}\n dataSource={finalData}\n itemLayout={\"horizontal\"}\n bordered={actuallyBordered}\n pagination={\n pagination\n ? {\n pageSize: pageSize,\n showSizeChanger: false,\n }\n : false\n }\n renderItem={(record) => {\n // Currently, actions are nested inside the list item / card, so can't have both linkTo and actions or else hydration error.\n // Eventually can fork the Ant components to make the main linkTo area and actions not nest.\n const actions = renderActions(rowActions, record, data, rowKey);\n // actions={[\n // <SettingOutlined key=\"setting\" />,\n // <EditOutlined key=\"edit\" />,\n // <EllipsisOutlined key=\"ellipsis\" />,\n // ]}\n const image = maybe(\n maybeRenderString(record, roleConfigs.image?.[0]),\n (src) => (\n <img\n src={src}\n className={\n type === \"list\"\n ? \"plasmic-list-item-image\"\n : \"plasmic-list-item-card-cover\"\n }\n />\n )\n );\n const content = (\n <ListItemContent\n bordered={actuallyBordered}\n image={type === \"list\" ? image : undefined}\n title={multiRenderValue(record, roleConfigs.title)}\n subtitle={multiRenderValue(record, roleConfigs.subtitle)}\n beforeTitle={multiRenderValue(record, roleConfigs.beforeTitle)}\n afterTitle={multiRenderValue(record, roleConfigs.afterTitle)}\n content={multiRenderValue(record, roleConfigs.content)}\n />\n );\n\n function makeLinkWrapper() {\n if ((actions ?? []).length > 0) {\n return undefined;\n }\n const href = linkTo?.(record);\n if (!href && !onRowClick) {\n return undefined;\n }\n const _linkWrapper = (x: ReactNode) => (\n <a\n href={href}\n onClick={(event) => {\n const key = deriveKeyOfRow(\n record,\n deriveRowKey(data, rowKey)\n );\n if (\n key != null &&\n !isInteractable(event.target as HTMLElement)\n ) {\n onRowClick?.(key, record, event);\n }\n }}\n >\n {x}\n </a>\n );\n return _linkWrapper;\n }\n\n const linkWrapper = makeLinkWrapper();\n\n const hasLink = !!linkWrapper;\n\n function maybeLink(x: ReactNode) {\n return linkWrapper?.(x) ?? x;\n }\n\n return type === \"grid\" ? (\n <List.Item className={\"plasmic-list-item\"}>\n {maybeLink(\n <Card\n className={\"plasmic-list-item-card\"}\n size={\"small\"}\n cover={image}\n hoverable={hasLink}\n actions={actions}\n >\n {content}\n </Card>\n )}\n </List.Item>\n ) : (\n maybeLink(\n <List.Item\n actions={actions}\n className={classNames({\n \"plasmic-list-item\": true,\n \"plasmic-list-item--clickable\": hasLink,\n })}\n >\n {content}\n </List.Item>\n )\n );\n }}\n />\n </div>\n );\n}\n\nfunction ListItemContent({\n className,\n title,\n subtitle,\n image,\n beforeTitle,\n afterTitle,\n content,\n bordered,\n ...others\n}: {\n className?: string;\n title?: ReactNode;\n subtitle?: ReactNode;\n image?: ReactNode;\n beforeTitle?: ReactNode;\n afterTitle?: ReactNode;\n content?: ReactNode;\n bordered?: boolean;\n}) {\n const prefixCls = \"ant-list\";\n const classString = classNames(`${prefixCls}-item-meta`, className);\n\n return (\n <div\n {...others}\n className={classNames(\n {\n \"plasmic-list-item-content--unbordered\": !bordered,\n },\n classString\n )}\n >\n {image && <div className={`${prefixCls}-item-meta-avatar`}>{image}</div>}\n <div\n className={`${prefixCls}-item-meta-content`}\n style={{ display: \"flex\", flexDirection: \"column\", gap: 4 }}\n >\n {beforeTitle && (\n <div>\n <Tag>{beforeTitle}</Tag>\n </div>\n )}\n <div style={{ display: \"flex\", gap: 8 }}>\n {title && (\n <h4\n className={`${prefixCls}-item-meta-title`}\n style={{ margin: 0 }}\n >\n {title}\n </h4>\n )}\n {afterTitle && (\n <div className={`${prefixCls}-item-meta-description`}>\n {afterTitle}\n </div>\n )}\n </div>\n {subtitle && (\n <div className={`${prefixCls}-item-meta-description`}>{subtitle}</div>\n )}\n {content && <div>{content}</div>}\n </div>\n </div>\n );\n}\n\ninterface StyleConfig {\n styles: Record<string, any>;\n align: \"left\" | \"center\" | \"right\";\n freeze: \"off\" | \"left\" | \"right\";\n}\n\nconst defaultColumnConfig = (): ListColumnConfig =>\n ({\n key: mkShortId(),\n isEditableExpr: () => false,\n disableSorting: false,\n sortByExpr: undefined,\n isHidden: false,\n formatting: {\n styles: {},\n align: \"left\",\n freeze: \"off\",\n },\n dataType: \"auto\" as const,\n role: undefined,\n } as const);\n\nconst roles = [\n \"content\",\n \"title\",\n \"subtitle\",\n \"beforeTitle\",\n \"afterTitle\",\n \"image\",\n \"unset\",\n] as const;\n\nexport type Role = (typeof roles)[number];\n\nexport type ListColumnConfig = BaseColumnConfig & {\n isEditableExpr: RowFunc<boolean>;\n disableSorting: boolean;\n sortByExpr?: RowFunc<any>;\n formatting: StyleConfig;\n\n /**\n * The default inferred role, not the actual user-set role.\n */\n role: undefined | Role | \"unset\";\n};\n\n// This component is different from Table/Details since it has various different roles, so the UX is one of setting the choices for each role rather than a single list of fields.\n//\n// We first infer the defaults for each role.\n// This we always need to do because we want the choices to be 'stable'.\n// If the user sets one of the roles, without setting the others, we don't want to shift things around on the other roles as a result.\n// So the defaults need to always be there (they would only be irrelevant if all roles that would have had defaults were set/overridden by the user).\n//\n// Then, we layer on the user role choices.\n//\n// One UX wart is that unsetting a role will restore the default selection instead of clearing it.\n// User must know to actually set fieldId to none or (for arrays) remove the item.\n// Just another reason to fill in few roles by default.\nfunction useRoleDefinitions(\n data: NormalizedData | undefined,\n props: React.ComponentProps<typeof RichList>\n) {\n const { fields, setControlContextData, rowActions } = props;\n\n return React.useMemo(() => {\n const schema = data?.schema;\n const schemaMap = new Map(data?.schema?.fields.map((f) => [f.id, f]));\n if (!data || !schema) {\n return { normalized: [], finalRoles: {} };\n }\n\n function tagFieldConfigs(role: Role) {\n if (role !== \"unset\") {\n return ensureArray(props[role] ?? []).map((field) => {\n return {\n ...field,\n role,\n };\n });\n } else {\n return [];\n }\n }\n\n // This is only being computed to get the default role choices.\n const specifiedFieldsPartial = [\n ...tagFieldConfigs(\"image\"),\n ...tagFieldConfigs(\"content\"),\n ...tagFieldConfigs(\"title\"),\n ...tagFieldConfigs(\"beforeTitle\"),\n ...tagFieldConfigs(\"afterTitle\"),\n ...tagFieldConfigs(\"subtitle\"),\n ];\n\n function doDeriveFieldConfigs(mode: \"existing\" | \"defaults\") {\n return deriveFieldConfigs<ListColumnConfig>(\n mode === \"defaults\" ? [] : specifiedFieldsPartial,\n schema,\n (field) => ({\n ...defaultColumnConfig(),\n ...(field && {\n key: field.id,\n fieldId: field.id,\n title: field.label || field.id,\n // undefined means not yet determined in this routine, not 'unset'\n role: undefined,\n expr: (currentItem) => currentItem[field.id],\n }),\n })\n );\n }\n\n // Now we derive the defaults.\n //\n // We always start from a blank slate for this. We want stability - we don't want a situation where we are constantly shifting around the defaults based on what else the user has set.\n //\n // For instance,\n // (1) we derive `city` to be content,\n // (2) user sets `city` as title,\n // (3) we now derive a different content because `city` is used.\n const {\n mergedFields: defaultMergedFields,\n minimalFullLengthFields: defaultMinimalFullLengthFields,\n } = doDeriveFieldConfigs(\"defaults\");\n\n // Find a good default image field.\n // Filter mergedFields where there are mostly values (in the sampleRows) that are a string that looks like a URL or path to an image file.\n // Of these, prefer the one with a name like image, picture, pic, img, avatar, profile, photo, icon.\n // Otherwise, prefer the one with a title with that substring.\n // Otherwise, pick any remaining one.\n if (\n data.data.length > 0 &&\n !defaultMergedFields.some((field) => field.role === \"image\")\n ) {\n const sampleRows = Array.from(\n new Set(\n [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].map((i) =>\n Math.round((i / 9) * (data.data.length - 1))\n )\n )\n ).map((i) => data.data[i]);\n const imageFieldCandidates = defaultMergedFields.filter(\n (field) =>\n !field.role &&\n sampleRows.filter(\n (row) => field.fieldId && isLikeImage(row[field.fieldId])\n ).length >=\n sampleRows.length / 2\n );\n const imageField =\n imageFieldCandidates.find((f) =>\n f.fieldId?.match(\n /^(image|picture|pic|img|avatar|profile|photo|icon)$/i\n )\n ) ??\n imageFieldCandidates.find((f) =>\n f.fieldId?.match(\n /.*(image|picture|pic|img|avatar|profile|photo|icon).*/i\n )\n ) ??\n imageFieldCandidates[0];\n if (imageField) {\n imageField.role = \"image\";\n }\n }\n\n // Find a good default title field, just based on the field name.\n if (!defaultMergedFields.some((field) => field.role === \"title\")) {\n const titleField = defaultMergedFields.find(\n (field) =>\n !field.role &&\n field.fieldId\n ?.toLowerCase()\n .match(/^(title|name|first[ _-]?name|full[ _-]?name)$/)\n );\n if (titleField) {\n titleField.role = \"title\";\n }\n }\n\n // Find a good default content field - just any remaining text field.\n if (!defaultMergedFields.some((field) => field.role === \"content\")) {\n const contentField = defaultMergedFields.find(\n (field) =>\n !field.role &&\n field.fieldId &&\n schemaMap.get(field.fieldId)?.type === \"string\"\n );\n if (contentField) {\n contentField.role = \"content\";\n }\n }\n\n const fieldIdToDefaultRole = new Map(\n defaultMergedFields.map((f) => [f.fieldId, f.role])\n );\n for (const f of defaultMinimalFullLengthFields) {\n f.role = fieldIdToDefaultRole.get(f.fieldId);\n }\n\n // Now we have the defaults!\n //\n // We once again derive field configs, this time using existing props.\n // Then we add on the derived defaults for the \"real merged\" fields.\n //\n // Note this is kind of an awkward/wasteful use of deriveFieldConfigs since it was more for table columns originally, and this by-role usage is a different shape of problem. We're mainly using it to fill in / \"inflate\" the additional settings on these FieldConfigs. Haven't yet bothered finding a better utility interface.\n const { mergedFields, minimalFullLengthFields } =\n doDeriveFieldConfigs(\"existing\");\n\n const minimalFullLengthFieldsWithDefaults = [\n ...minimalFullLengthFields.filter((f) => f.role && f.role !== \"unset\"),\n ...defaultMinimalFullLengthFields.filter(\n (f) => f.role && f.role !== \"unset\" && !props[f.role]\n ),\n ];\n const mergedFieldsWithDefaults = [\n ...mergedFields.filter((f) => f.role && f.role !== \"unset\"),\n ...defaultMergedFields.filter(\n (f) => f.role && f.role !== \"unset\" && !props[f.role]\n ),\n ];\n\n // We now get by-role grouping which is needed by the component.\n const roleConfigs = ensure(\n groupBy(mergedFieldsWithDefaults, (f) => f.role)\n );\n\n const finalRoles: Partial<Record<Role, ListColumnConfig[]>> = {};\n for (const role of roles) {\n if (role !== \"unset\") {\n finalRoles[role] = maybe(props[role], ensureArray) ?? roleConfigs[role];\n }\n }\n\n setControlContextData?.({\n ...data,\n mergedFields: mergedFieldsWithDefaults,\n minimalFullLengthFields: minimalFullLengthFieldsWithDefaults,\n });\n\n const normalized = mergedFieldsWithDefaults;\n return { normalized, finalRoles };\n }, [fields, data, setControlContextData, rowActions]);\n}\n","import { ComponentMeta } from \"@plasmicapp/host/registerComponent\";\nimport {\n commonProps,\n dataProp,\n onRowClickProp,\n roleProp,\n rowActionsProp,\n} from \"../common-prop-types\";\nimport { Registerable, registerComponentHelper } from \"../utils\";\nimport { RichList, RichListProps } from \"./RichList\";\n\nexport * from \"./RichList\";\nexport default RichList;\nconst richListMeta: ComponentMeta<RichListProps> = {\n name: \"hostless-rich-list\",\n displayName: \"Data List\",\n defaultStyles: {\n width: \"stretch\",\n padding: \"16px\",\n maxHeight: \"100%\",\n },\n defaultDisplay: \"block\",\n props: {\n data: dataProp(),\n type: {\n type: \"choice\",\n options: [\n { value: \"list\", label: \"List\" },\n { value: \"grid\", label: \"Grid\" },\n ],\n defaultValueHint: \"list\",\n },\n\n header: {\n type: \"slot\",\n hidePlaceholder: true,\n },\n footer: {\n type: \"slot\",\n hidePlaceholder: true,\n },\n\n title: roleProp({ role: \"title\" }),\n content: roleProp({ role: \"content\" }),\n image: roleProp({ role: \"image\", singular: true }),\n subtitle: roleProp({\n role: \"subtitle\",\n advanced: true,\n }),\n // Haven't styled these yet!\n // beforeTitle: roleProp({ role: \"beforeTitle\", advanced: true }),\n // afterTitle: roleProp({ role: \"afterTitle\", advanced: true }),\n\n linkTo: {\n type: \"function\",\n control: {\n type: \"href\",\n },\n argNames: [\"currentItem\"],\n argValues: (_props: any, ctx: any) => [ctx?.data?.[0]],\n } as any,\n\n onRowClick: onRowClickProp(),\n rowActions: rowActionsProp(),\n\n bordered: {\n type: \"boolean\",\n defaultValue: true,\n hidden: (ps) => (ps.type ?? \"list\") !== \"list\",\n },\n\n ...commonProps(),\n },\n importName: \"RichList\",\n importPath: \"@plasmicpkgs/plasmic-rich-components/skinny/rich-list\",\n};\n\nexport function registerRichList(loader?: Registerable) {\n registerComponentHelper(loader, RichList, richListMeta);\n}\n"],"names":["_a","__spreadValues"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgFA,MAAM,OAAU,GAAA,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAAA,CAAA;AAqDT,SAAS,SAAS,KAAsB,EAAA;AAC7C,EAAA,MA6BI,EA5BF,GAAA,KAAA,CAAA,CAAA;AAAA,IAAA,IAAA,EAAM,OAAU,GAAA;AAAA,MACd,MAAM,EAAC;AAAA,MACP,MAAQ,EAAA;AAAA,QACN,EAAI,EAAA,UAAA;AAAA,QACJ,MAAQ,EAAA;AAAA,UACN;AAAA,YACE,EAAI,EAAA,IAAA;AAAA,YACJ,IAAM,EAAA,QAAA;AAAA,YACN,QAAU,EAAA,KAAA;AAAA,WACZ;AAAA,SACF;AAAA,OACF;AAAA,KACF;AAAA,IACA,IAAO,GAAA,MAAA;AAAA,IACP,QAAW,GAAA,IAAA;AAAA,IAEX,SAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IAEA,aAAa,EAAC;AAAA,IACd,QAAW,GAAA,EAAA;AAAA,IACX,UAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAa,GAAA,IAAA;AAAA,IACb,UAAA;AAAA,GAjKJ,GAmKM,EADC,CAAA,CAAA,SAAA,CACD,EADC,EAAA;AAAA,IA3BH,MAAA;AAAA,IAaA,MAAA;AAAA,IACA,UAAA;AAAA,IAEA,WAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IAEA,YAAA;AAAA,IACA,UAAA;AAAA,IACA,YAAA;AAAA,IACA,QAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,GAAA,EAAA;AAIF,EAAM,MAAA,cAAA,GAAiB,kBAAkB,OAAO,CAAA,CAAA;AAEhD,EAAM,MAAA,IAAA,GAAO,KAAM,CAAA,OAAA,CAAQ,MAAM;AAC/B,IAAI,IAAA,EAAC,iDAAgB,IAAM,CAAA,EAAA;AACzB,MAAO,OAAA,cAAA,CAAA;AAAA,KACT;AACA,IAAA,OAAO,mCAAK,cAAL,CAAA,EAAA,EAAqB,MAAM,YAAa,CAAA,cAAA,CAAe,IAAI,CAAE,EAAA,CAAA,CAAA;AAAA,GACtE,EAAG,CAAC,cAAc,CAAC,CAAA,CAAA;AAEnB,EAAA,MAAM,EAAE,UAAA,EAAY,UAAY,EAAA,WAAA,EAAgB,GAAA,kBAAA;AAAA,IAC9C,IAAA;AAAA,IACA,KAAA;AAAA,GACF,CAAA;AAGA,EAAA,MAAM,SAAS,OAAO,KAAA,CAAM,MAAW,KAAA,UAAA,GAAa,MAAM,MAAS,GAAA,KAAA,CAAA,CAAA;AAEnE,EAAA,MAAM,EAAE,SAAA,EAAW,MAAQ,EAAA,SAAA,EAAc,GAAA,qBAAA;AAAA,IACvC,IAAA;AAAA,IACA,UAAA;AAAA,GACF,CAAA;AAEA,EAAM,MAAA,gBAAA,GAAmB,IAAS,KAAA,MAAA,GAAS,QAAW,GAAA,KAAA,CAAA;AACtD,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAI,SACH,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,OAAM,EAAA,EAAA,uBAAA,EAAyB,EAAE,MAAA,EAAQ,OAAQ,EAAA,EAAG,CACpD,EAAA,CAAC,UACA,oBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,KAAM,CAAA,MAAA;AAAA,IAAN;AAAA,MACC,SAAW,EAAA,qBAAA;AAAA,MACX,UAAU,CAAC,CAAA,KAAM,SAAU,CAAA,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,MACzC,KAAO,EAAA,MAAA;AAAA,MACP,WAAa,EAAA,QAAA;AAAA,KAAA;AAAA,GAGjB,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACC,WAAW,UAAW,CAAA;AAAA;AAAA,QAEpB,sBAAsB,IAAS,KAAA,MAAA;AAAA,OAChC,CAAA;AAAA,MACD,IAAA;AAAA,MACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAY,EAAA,SAAA;AAAA,MACZ,UAAY,EAAA,YAAA;AAAA,MACZ,QAAU,EAAA,gBAAA;AAAA,MACV,YACE,UACI,GAAA;AAAA,QACE,QAAA;AAAA,QACA,eAAiB,EAAA,KAAA;AAAA,OAEnB,GAAA,KAAA;AAAA,MAEN,UAAA,EAAY,CAAC,MAAW,KAAA;AA1NhC,QAAAA,IAAAA,GAAAA,CAAAA;AA6NU,QAAA,MAAM,OAAU,GAAA,aAAA,CAAc,UAAY,EAAA,MAAA,EAAQ,MAAM,MAAM,CAAA,CAAA;AAM9D,QAAA,MAAM,KAAQ,GAAA,KAAA;AAAA,UACZ,kBAAkB,MAAQA,EAAAA,CAAAA,GAAAA,GAAA,YAAY,KAAZ,KAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,IAAoB,CAAE,CAAA,CAAA;AAAA,UAChD,CAAC,GACC,qBAAA,KAAA,CAAA,aAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,GAAA;AAAA,cACA,SAAA,EACE,IAAS,KAAA,MAAA,GACL,yBACA,GAAA,8BAAA;AAAA,aAAA;AAAA,WAER;AAAA,SAEJ,CAAA;AACA,QAAA,MAAM,OACJ,mBAAA,KAAA,CAAA,aAAA;AAAA,UAAC,eAAA;AAAA,UAAA;AAAA,YACC,QAAU,EAAA,gBAAA;AAAA,YACV,KAAA,EAAO,IAAS,KAAA,MAAA,GAAS,KAAQ,GAAA,KAAA,CAAA;AAAA,YACjC,KAAO,EAAA,gBAAA,CAAiB,MAAQ,EAAA,WAAA,CAAY,KAAK,CAAA;AAAA,YACjD,QAAU,EAAA,gBAAA,CAAiB,MAAQ,EAAA,WAAA,CAAY,QAAQ,CAAA;AAAA,YACvD,WAAa,EAAA,gBAAA,CAAiB,MAAQ,EAAA,WAAA,CAAY,WAAW,CAAA;AAAA,YAC7D,UAAY,EAAA,gBAAA,CAAiB,MAAQ,EAAA,WAAA,CAAY,UAAU,CAAA;AAAA,YAC3D,OAAS,EAAA,gBAAA,CAAiB,MAAQ,EAAA,WAAA,CAAY,OAAO,CAAA;AAAA,WAAA;AAAA,SACvD,CAAA;AAGF,QAAA,SAAS,eAAkB,GAAA;AACzB,UAAA,IAAA,CAAK,OAAW,IAAA,IAAA,GAAA,OAAA,GAAA,EAAI,EAAA,MAAA,GAAS,CAAG,EAAA;AAC9B,YAAO,OAAA,KAAA,CAAA,CAAA;AAAA,WACT;AACA,UAAA,MAAM,OAAO,MAAS,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAA,MAAA,CAAA,CAAA;AACtB,UAAI,IAAA,CAAC,IAAQ,IAAA,CAAC,UAAY,EAAA;AACxB,YAAO,OAAA,KAAA,CAAA,CAAA;AAAA,WACT;AACA,UAAM,MAAA,YAAA,GAAe,CAAC,CACpB,qBAAA,KAAA,CAAA,aAAA;AAAA,YAAC,GAAA;AAAA,YAAA;AAAA,cACC,IAAA;AAAA,cACA,OAAA,EAAS,CAAC,KAAU,KAAA;AAClB,gBAAA,MAAM,GAAM,GAAA,cAAA;AAAA,kBACV,MAAA;AAAA,kBACA,YAAA,CAAa,MAAM,MAAM,CAAA;AAAA,iBAC3B,CAAA;AACA,gBAAA,IACE,OAAO,IACP,IAAA,CAAC,cAAe,CAAA,KAAA,CAAM,MAAqB,CAC3C,EAAA;AACA,kBAAA,UAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,UAAA,CAAa,KAAK,MAAQ,EAAA,KAAA,CAAA,CAAA;AAAA,iBAC5B;AAAA,eACF;AAAA,aAAA;AAAA,YAEC,CAAA;AAAA,WACH,CAAA;AAEF,UAAO,OAAA,YAAA,CAAA;AAAA,SACT;AAEA,QAAA,MAAM,cAAc,eAAgB,EAAA,CAAA;AAEpC,QAAM,MAAA,OAAA,GAAU,CAAC,CAAC,WAAA,CAAA;AAElB,QAAA,SAAS,UAAU,CAAc,EAAA;AA9R3C,UAAAA,IAAAA,GAAAA,CAAAA;AA+RY,UAAA,OAAA,CAAOA,GAAA,GAAA,WAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,WAAA,CAAc,CAAd,CAAA,KAAA,IAAA,GAAAA,GAAoB,GAAA,CAAA,CAAA;AAAA,SAC7B;AAEA,QAAA,OAAO,SAAS,MACd,mBAAA,KAAA,CAAA,aAAA,CAAC,KAAK,IAAL,EAAA,EAAU,WAAW,mBACnB,EAAA,EAAA,SAAA;AAAA,0BACC,KAAA,CAAA,aAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cACC,SAAW,EAAA,wBAAA;AAAA,cACX,IAAM,EAAA,OAAA;AAAA,cACN,KAAO,EAAA,KAAA;AAAA,cACP,SAAW,EAAA,OAAA;AAAA,cACX,OAAA;AAAA,aAAA;AAAA,YAEC,OAAA;AAAA,WACH;AAAA,SAEJ,CAEA,GAAA,SAAA;AAAA,0BACE,KAAA,CAAA,aAAA;AAAA,YAAC,IAAK,CAAA,IAAA;AAAA,YAAL;AAAA,cACC,OAAA;AAAA,cACA,WAAW,UAAW,CAAA;AAAA,gBACpB,mBAAqB,EAAA,IAAA;AAAA,gBACrB,8BAAgC,EAAA,OAAA;AAAA,eACjC,CAAA;AAAA,aAAA;AAAA,YAEA,OAAA;AAAA,WACH;AAAA,SACF,CAAA;AAAA,OAEJ;AAAA,KAAA;AAAA,GAEJ,CAAA,CAAA;AAEJ,CAAA;AAEA,SAAS,gBAAgB,EAmBtB,EAAA;AAnBsB,EACvB,IAAA,EAAA,GAAA,EAAA,EAAA;AAAA,IAAA,SAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,GA3UF,GAmUyB,EASpB,EAAA,MAAA,GAAA,SAAA,CAToB,EASpB,EAAA;AAAA,IARH,WAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,IACA,aAAA;AAAA,IACA,YAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,GAAA,CAAA,CAAA;AAYA,EAAA,MAAM,SAAY,GAAA,UAAA,CAAA;AAClB,EAAA,MAAM,WAAc,GAAA,UAAA,CAAW,CAAG,EAAA,SAAA,CAAA,UAAA,CAAA,EAAuB,SAAS,CAAA,CAAA;AAElE,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,KAAA;AAAA,IAAA,aAAA,CAAAC,gBAAA,CAAA,EAAA,EACK,MADL,CAAA,EAAA;AAAA,MAEC,SAAW,EAAA,UAAA;AAAA,QACT;AAAA,UACE,yCAAyC,CAAC,QAAA;AAAA,SAC5C;AAAA,QACA,WAAA;AAAA,OACF;AAAA,KAAA,CAAA;AAAA,IAEC,yBAAU,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,CAAA,EAAG,gCAA+B,KAAM,CAAA;AAAA,oBAClE,KAAA,CAAA,aAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,WAAW,CAAG,EAAA,SAAA,CAAA,kBAAA,CAAA;AAAA,QACd,OAAO,EAAE,OAAA,EAAS,QAAQ,aAAe,EAAA,QAAA,EAAU,KAAK,CAAE,EAAA;AAAA,OAAA;AAAA,MAEzD,+BACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA,kBACE,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,IAAA,EAAK,WAAY,CACpB,CAAA;AAAA,sBAEF,KAAA,CAAA,aAAA,CAAC,SAAI,KAAO,EAAA,EAAE,SAAS,MAAQ,EAAA,GAAA,EAAK,CAAE,EAAA,EAAA,EACnC,KACC,oBAAA,KAAA,CAAA,aAAA;AAAA,QAAC,IAAA;AAAA,QAAA;AAAA,UACC,WAAW,CAAG,EAAA,SAAA,CAAA,gBAAA,CAAA;AAAA,UACd,KAAA,EAAO,EAAE,MAAA,EAAQ,CAAE,EAAA;AAAA,SAAA;AAAA,QAElB,KAAA;AAAA,OACH,EAED,8BACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAI,WAAW,CAAG,EAAA,SAAA,CAAA,sBAAA,CAAA,EAAA,EAChB,UACH,CAEJ,CAAA;AAAA,MACC,4BACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,CAAA,EAAG,qCAAoC,QAAS,CAAA;AAAA,MAEjE,OAAA,oBAAY,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA,EAAK,OAAQ,CAAA;AAAA,KAC5B;AAAA,GACF,CAAA;AAEJ,CAAA;AAQA,MAAM,sBAAsB,OACzB;AAAA,EACC,KAAK,SAAU,EAAA;AAAA,EACf,gBAAgB,MAAM,KAAA;AAAA,EACtB,cAAgB,EAAA,KAAA;AAAA,EAChB,UAAY,EAAA,KAAA,CAAA;AAAA,EACZ,QAAU,EAAA,KAAA;AAAA,EACV,UAAY,EAAA;AAAA,IACV,QAAQ,EAAC;AAAA,IACT,KAAO,EAAA,MAAA;AAAA,IACP,MAAQ,EAAA,KAAA;AAAA,GACV;AAAA,EACA,QAAU,EAAA,MAAA;AAAA,EACV,IAAM,EAAA,KAAA,CAAA;AACR,CAAA,CAAA,CAAA;AAEF,MAAM,KAAQ,GAAA;AAAA,EACZ,SAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AACF,CAAA,CAAA;AA4BA,SAAS,kBAAA,CACP,MACA,KACA,EAAA;AACA,EAAA,MAAM,EAAE,MAAA,EAAQ,qBAAuB,EAAA,UAAA,EAAe,GAAA,KAAA,CAAA;AAEtD,EAAO,OAAA,KAAA,CAAM,QAAQ,MAAM;AAtc7B,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAucI,IAAA,MAAM,SAAS,IAAM,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAA,MAAA,CAAA;AACrB,IAAA,MAAM,SAAY,GAAA,IAAI,GAAI,CAAA,CAAA,EAAA,GAAA,IAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAM,WAAN,IAAc,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAA,CAAO,GAAI,CAAA,CAAC,CAAM,KAAA,CAAC,CAAE,CAAA,EAAA,EAAI,CAAC,CAAE,CAAA,CAAA,CAAA;AACpE,IAAI,IAAA,CAAC,IAAQ,IAAA,CAAC,MAAQ,EAAA;AACpB,MAAA,OAAO,EAAE,UAAY,EAAA,EAAI,EAAA,UAAA,EAAY,EAAG,EAAA,CAAA;AAAA,KAC1C;AAEA,IAAA,SAAS,gBAAgB,IAAY,EAAA;AA7czC,MAAAD,IAAAA,GAAAA,CAAAA;AA8cM,MAAA,IAAI,SAAS,OAAS,EAAA;AACpB,QAAA,OAAO,WAAYA,CAAAA,CAAAA,GAAAA,GAAA,KAAM,CAAA,IAAI,CAAV,KAAA,IAAA,GAAAA,GAAe,GAAA,EAAE,CAAA,CAAE,GAAI,CAAA,CAAC,KAAU,KAAA;AACnD,UAAA,OAAO,mCACF,KADE,CAAA,EAAA;AAAA,YAEL,IAAA;AAAA,WACF,CAAA,CAAA;AAAA,SACD,CAAA,CAAA;AAAA,OACI,MAAA;AACL,QAAA,OAAO,EAAC,CAAA;AAAA,OACV;AAAA,KACF;AAGA,IAAA,MAAM,sBAAyB,GAAA;AAAA,MAC7B,GAAG,gBAAgB,OAAO,CAAA;AAAA,MAC1B,GAAG,gBAAgB,SAAS,CAAA;AAAA,MAC5B,GAAG,gBAAgB,OAAO,CAAA;AAAA,MAC1B,GAAG,gBAAgB,aAAa,CAAA;AAAA,MAChC,GAAG,gBAAgB,YAAY,CAAA;AAAA,MAC/B,GAAG,gBAAgB,UAAU,CAAA;AAAA,KAC/B,CAAA;AAEA,IAAA,SAAS,qBAAqB,IAA+B,EAAA;AAC3D,MAAO,OAAA,kBAAA;AAAA,QACL,IAAA,KAAS,UAAa,GAAA,EAAK,GAAA,sBAAA;AAAA,QAC3B,MAAA;AAAA,QACA,CAAC,KAAA,KAAWC,gBACP,CAAAA,gBAAA,CAAA,EAAA,EAAA,mBAAA,KACC,KAAS,IAAA;AAAA,UACX,KAAK,KAAM,CAAA,EAAA;AAAA,UACX,SAAS,KAAM,CAAA,EAAA;AAAA,UACf,KAAA,EAAO,KAAM,CAAA,KAAA,IAAS,KAAM,CAAA,EAAA;AAAA;AAAA,UAE5B,IAAM,EAAA,KAAA,CAAA;AAAA,UACN,IAAM,EAAA,CAAC,WAAgB,KAAA,WAAA,CAAY,MAAM,EAAE,CAAA;AAAA,SAC7C,CAAA;AAAA,OAEJ,CAAA;AAAA,KACF;AAUA,IAAM,MAAA;AAAA,MACJ,YAAc,EAAA,mBAAA;AAAA,MACd,uBAAyB,EAAA,8BAAA;AAAA,KAC3B,GAAI,qBAAqB,UAAU,CAAA,CAAA;AAOnC,IAAA,IACE,IAAK,CAAA,IAAA,CAAK,MAAS,GAAA,CAAA,IACnB,CAAC,mBAAA,CAAoB,IAAK,CAAA,CAAC,KAAU,KAAA,KAAA,CAAM,IAAS,KAAA,OAAO,CAC3D,EAAA;AACA,MAAA,MAAM,aAAa,KAAM,CAAA,IAAA;AAAA,QACvB,IAAI,GAAA;AAAA,UACF,CAAC,CAAG,EAAA,CAAA,EAAG,CAAG,EAAA,CAAA,EAAG,CAAG,EAAA,CAAA,EAAG,CAAG,EAAA,CAAA,EAAG,CAAG,EAAA,CAAC,CAAE,CAAA,GAAA;AAAA,YAAI,CAAC,MAClC,IAAK,CAAA,KAAA,CAAO,IAAI,CAAM,IAAA,IAAA,CAAK,IAAK,CAAA,MAAA,GAAS,CAAE,CAAA,CAAA;AAAA,WAC7C;AAAA,SACF;AAAA,QACA,GAAI,CAAA,CAAC,MAAM,IAAK,CAAA,IAAA,CAAK,CAAC,CAAC,CAAA,CAAA;AACzB,MAAA,MAAM,uBAAuB,mBAAoB,CAAA,MAAA;AAAA,QAC/C,CAAC,KAAA,KACC,CAAC,KAAA,CAAM,QACP,UAAW,CAAA,MAAA;AAAA,UACT,CAAC,QAAQ,KAAM,CAAA,OAAA,IAAW,YAAY,GAAI,CAAA,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,SAC1D,CAAE,MACA,IAAA,UAAA,CAAW,MAAS,GAAA,CAAA;AAAA,OAC1B,CAAA;AACA,MAAA,MAAM,cACJ,EAAqB,GAAA,CAAA,EAAA,GAAA,oBAAA,CAAA,IAAA;AAAA,QAAK,CAAC,CAAG,KAAA;AA5hBtC,UAAAD,IAAAA,GAAAA,CAAAA;AA6hBU,UAAA,OAAA,CAAAA,GAAA,GAAA,CAAA,CAAE,OAAF,KAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,GAAW,CAAA,KAAA;AAAA,YACT,sDAAA;AAAA,WAAA,CAAA;AAAA,SAAA;AAAA,OAEJ,KAJA,YAKA,oBAAqB,CAAA,IAAA;AAAA,QAAK,CAAC,CAAG,KAAA;AAjiBtC,UAAAA,IAAAA,GAAAA,CAAAA;AAkiBU,UAAA,OAAA,CAAAA,GAAA,GAAA,CAAA,CAAE,OAAF,KAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,GAAW,CAAA,KAAA;AAAA,YACT,wDAAA;AAAA,WAAA,CAAA;AAAA,SAAA;AAAA,OAEJ,KATA,IAUA,GAAA,EAAA,GAAA,oBAAA,CAAqB,CAAC,CAAA,CAAA;AACxB,MAAA,IAAI,UAAY,EAAA;AACd,QAAA,UAAA,CAAW,IAAO,GAAA,OAAA,CAAA;AAAA,OACpB;AAAA,KACF;AAGA,IAAI,IAAA,CAAC,oBAAoB,IAAK,CAAA,CAAC,UAAU,KAAM,CAAA,IAAA,KAAS,OAAO,CAAG,EAAA;AAChE,MAAA,MAAM,aAAa,mBAAoB,CAAA,IAAA;AAAA,QACrC,CAAC,KAAO,KAAA;AA/iBhB,UAAAA,IAAAA,GAAAA,CAAAA;AAgjBU,UAAC,OAAA,CAAA,KAAA,CAAM,UACPA,GAAA,GAAA,KAAA,CAAM,YAAN,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,GAAAA,CACI,cACD,KAAM,CAAA,+CAAA,CAAA,CAAA,CAAA;AAAA,SAAA;AAAA,OACb,CAAA;AACA,MAAA,IAAI,UAAY,EAAA;AACd,QAAA,UAAA,CAAW,IAAO,GAAA,OAAA,CAAA;AAAA,OACpB;AAAA,KACF;AAGA,IAAI,IAAA,CAAC,oBAAoB,IAAK,CAAA,CAAC,UAAU,KAAM,CAAA,IAAA,KAAS,SAAS,CAAG,EAAA;AAClE,MAAA,MAAM,eAAe,mBAAoB,CAAA,IAAA;AAAA,QACvC,CAAC,KAAO,KAAA;AA7jBhB,UAAAA,IAAAA,GAAAA,CAAAA;AA8jBU,UAAA,OAAA,CAAC,KAAM,CAAA,IAAA,IACP,KAAM,CAAA,OAAA,IAAA,CAAA,CACNA,GAAA,GAAA,SAAA,CAAU,GAAI,CAAA,KAAA,CAAM,OAAO,CAAA,KAA3B,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,GAAAA,CAA8B,IAAS,MAAA,QAAA,CAAA;AAAA,SAAA;AAAA,OAC3C,CAAA;AACA,MAAA,IAAI,YAAc,EAAA;AAChB,QAAA,YAAA,CAAa,IAAO,GAAA,SAAA,CAAA;AAAA,OACtB;AAAA,KACF;AAEA,IAAA,MAAM,uBAAuB,IAAI,GAAA;AAAA,MAC/B,mBAAA,CAAoB,IAAI,CAAC,CAAA,KAAM,CAAC,CAAE,CAAA,OAAA,EAAS,CAAE,CAAA,IAAI,CAAC,CAAA;AAAA,KACpD,CAAA;AACA,IAAA,KAAA,MAAW,KAAK,8BAAgC,EAAA;AAC9C,MAAA,CAAA,CAAE,IAAO,GAAA,oBAAA,CAAqB,GAAI,CAAA,CAAA,CAAE,OAAO,CAAA,CAAA;AAAA,KAC7C;AAQA,IAAA,MAAM,EAAE,YAAA,EAAc,uBAAwB,EAAA,GAC5C,qBAAqB,UAAU,CAAA,CAAA;AAEjC,IAAA,MAAM,mCAAsC,GAAA;AAAA,MAC1C,GAAG,wBAAwB,MAAO,CAAA,CAAC,MAAM,CAAE,CAAA,IAAA,IAAQ,CAAE,CAAA,IAAA,KAAS,OAAO,CAAA;AAAA,MACrE,GAAG,8BAA+B,CAAA,MAAA;AAAA,QAChC,CAAC,CAAM,KAAA,CAAA,CAAE,IAAQ,IAAA,CAAA,CAAE,SAAS,OAAW,IAAA,CAAC,KAAM,CAAA,CAAA,CAAE,IAAI,CAAA;AAAA,OACtD;AAAA,KACF,CAAA;AACA,IAAA,MAAM,wBAA2B,GAAA;AAAA,MAC/B,GAAG,aAAa,MAAO,CAAA,CAAC,MAAM,CAAE,CAAA,IAAA,IAAQ,CAAE,CAAA,IAAA,KAAS,OAAO,CAAA;AAAA,MAC1D,GAAG,mBAAoB,CAAA,MAAA;AAAA,QACrB,CAAC,CAAM,KAAA,CAAA,CAAE,IAAQ,IAAA,CAAA,CAAE,SAAS,OAAW,IAAA,CAAC,KAAM,CAAA,CAAA,CAAE,IAAI,CAAA;AAAA,OACtD;AAAA,KACF,CAAA;AAGA,IAAA,MAAM,WAAc,GAAA,MAAA;AAAA,MAClB,OAAQ,CAAA,wBAAA,EAA0B,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAAA,KACjD,CAAA;AAEA,IAAA,MAAM,aAAwD,EAAC,CAAA;AAC/D,IAAA,KAAA,MAAW,QAAQ,KAAO,EAAA;AACxB,MAAA,IAAI,SAAS,OAAS,EAAA;AACpB,QAAW,UAAA,CAAA,IAAI,CAAI,GAAA,CAAA,EAAA,GAAA,KAAA,CAAM,KAAM,CAAA,IAAI,GAAG,WAAW,CAAA,KAA9B,IAAmC,GAAA,EAAA,GAAA,WAAA,CAAY,IAAI,CAAA,CAAA;AAAA,OACxE;AAAA,KACF;AAEA,IAAA,qBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAwB,mCACnB,IADmB,CAAA,EAAA;AAAA,MAEtB,YAAc,EAAA,wBAAA;AAAA,MACd,uBAAyB,EAAA,mCAAA;AAAA,KAC3B,CAAA,CAAA,CAAA;AAEA,IAAA,MAAM,UAAa,GAAA,wBAAA,CAAA;AACnB,IAAO,OAAA,EAAE,YAAY,UAAW,EAAA,CAAA;AAAA,KAC/B,CAAC,MAAA,EAAQ,IAAM,EAAA,qBAAA,EAAuB,UAAU,CAAC,CAAA,CAAA;AACtD;;;;;;;;;;;;;;;;;;AC5mBA,MAAM,YAA6C,GAAA;AAAA,EACjD,IAAM,EAAA,oBAAA;AAAA,EACN,WAAa,EAAA,WAAA;AAAA,EACb,aAAe,EAAA;AAAA,IACb,KAAO,EAAA,SAAA;AAAA,IACP,OAAS,EAAA,MAAA;AAAA,IACT,SAAW,EAAA,MAAA;AAAA,GACb;AAAA,EACA,cAAgB,EAAA,OAAA;AAAA,EAChB,KAAO,EAAA,cAAA,CAAA;AAAA,IACL,MAAM,QAAS,EAAA;AAAA,IACf,IAAM,EAAA;AAAA,MACJ,IAAM,EAAA,QAAA;AAAA,MACN,OAAS,EAAA;AAAA,QACP,EAAE,KAAA,EAAO,MAAQ,EAAA,KAAA,EAAO,MAAO,EAAA;AAAA,QAC/B,EAAE,KAAA,EAAO,MAAQ,EAAA,KAAA,EAAO,MAAO,EAAA;AAAA,OACjC;AAAA,MACA,gBAAkB,EAAA,MAAA;AAAA,KACpB;AAAA,IAEA,MAAQ,EAAA;AAAA,MACN,IAAM,EAAA,MAAA;AAAA,MACN,eAAiB,EAAA,IAAA;AAAA,KACnB;AAAA,IACA,MAAQ,EAAA;AAAA,MACN,IAAM,EAAA,MAAA;AAAA,MACN,eAAiB,EAAA,IAAA;AAAA,KACnB;AAAA,IAEA,KAAO,EAAA,QAAA,CAAS,EAAE,IAAA,EAAM,SAAS,CAAA;AAAA,IACjC,OAAS,EAAA,QAAA,CAAS,EAAE,IAAA,EAAM,WAAW,CAAA;AAAA,IACrC,OAAO,QAAS,CAAA,EAAE,MAAM,OAAS,EAAA,QAAA,EAAU,MAAM,CAAA;AAAA,IACjD,UAAU,QAAS,CAAA;AAAA,MACjB,IAAM,EAAA,UAAA;AAAA,MACN,QAAU,EAAA,IAAA;AAAA,KACX,CAAA;AAAA;AAAA;AAAA;AAAA,IAKD,MAAQ,EAAA;AAAA,MACN,IAAM,EAAA,UAAA;AAAA,MACN,OAAS,EAAA;AAAA,QACP,IAAM,EAAA,MAAA;AAAA,OACR;AAAA,MACA,QAAA,EAAU,CAAC,aAAa,CAAA;AAAA,MACxB,SAAA,EAAW,CAAC,MAAA,EAAa,GAAU,KAAA;AA3DzC,QAAA,IAAA,EAAA,CAAA;AA2D4C,QAAC,OAAA,CAAA,CAAA,EAAA,GAAA,GAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAK,IAAL,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAY,CAAE,CAAA,CAAA,CAAA;AAAA,OAAA;AAAA,KACvD;AAAA,IAEA,YAAY,cAAe,EAAA;AAAA,IAC3B,YAAY,cAAe,EAAA;AAAA,IAE3B,QAAU,EAAA;AAAA,MACR,IAAM,EAAA,SAAA;AAAA,MACN,YAAc,EAAA,IAAA;AAAA,MACd,MAAA,EAAQ,CAAC,EAAI,KAAA;AApEnB,QAAA,IAAA,EAAA,CAAA;AAoEuB,QAAG,OAAA,CAAA,CAAA,EAAA,GAAA,EAAA,CAAA,IAAA,KAAH,YAAW,MAAY,MAAA,MAAA,CAAA;AAAA,OAAA;AAAA,KAC1C;AAAA,GAAA,EAEG,WAAY,EAAA,CAAA;AAAA,EAEjB,UAAY,EAAA,UAAA;AAAA,EACZ,UAAY,EAAA,uDAAA;AACd,CAAA,CAAA;AAEO,SAAS,iBAAiB,MAAuB,EAAA;AACtD,EAAwB,uBAAA,CAAA,MAAA,EAAQ,UAAU,YAAY,CAAA,CAAA;AACxD;;;;"}
1
+ {"version":3,"file":"index.esm.js","sources":["../../src/rich-list/RichList.tsx","../../src/rich-list/index.tsx"],"sourcesContent":["import {\n deriveFieldConfigs,\n NormalizedData,\n useNormalizedData,\n} from \"@plasmicapp/data-sources\";\nimport { Card, Input, List, Tag } from \"antd\";\nimport type { GetRowKey } from \"antd/es/table/interface\";\nimport classNames from \"classnames\";\nimport groupBy from \"lodash/groupBy\";\nimport React, { ReactNode } from \"react\";\nimport { BaseColumnConfig, FieldfulProps, RowFunc } from \"../field-mappings\";\nimport {\n deriveKeyOfRow,\n deriveRowKey,\n renderActions,\n tagDataArray,\n useSortedFilteredData,\n} from \"../field-react-utils\";\nimport { maybeRenderString, multiRenderValue } from \"../formatting\";\nimport {\n ensure,\n ensureArray,\n isInteractable,\n isLikeImage,\n maybe,\n mkShortId,\n} from \"../utils\";\n\n// Avoid csv-stringify, it doesn't directly work in browser without Buffer polyfill.\n\nexport interface Action {\n type: \"edit\" | \"view\" | \"delete\" | \"custom\";\n label?: string;\n moreMenu?: boolean;\n}\n\ninterface RowActionItem {\n type: \"item\";\n label: string;\n onClick: (rowKey: string, row: any) => void;\n}\n\ninterface RowActionMenu {\n type: \"menu\";\n label: string;\n children?: RowActionItem[];\n}\n\ntype RowAction = RowActionItem | RowActionMenu;\n\nexport interface RichListProps extends FieldfulProps<ListColumnConfig> {\n // Pass through\n size?: \"default\" | \"large\" | \"small\";\n header?: ReactNode;\n footer?: ReactNode;\n\n bordered?: boolean;\n pagination?: boolean;\n\n rowKey?: string | GetRowKey<any>;\n rowActions?: RowAction[];\n onRowClick?: (rowKey: string, row: any, event: React.MouseEvent) => void;\n\n pageSize?: number;\n\n hideSearch?: boolean;\n\n /** ListColumnConfig is obsolete for linkTo */\n linkTo?: ListColumnConfig | ((row: any) => string);\n image?: ListColumnConfig;\n title?: ListColumnConfig[];\n subtitle?: ListColumnConfig[];\n beforeTitle?: ListColumnConfig[];\n afterTitle?: ListColumnConfig[];\n content?: ListColumnConfig[];\n\n type?: \"grid\" | \"list\";\n}\n\n// Should really be using token colorFillTertiary instead of #8881.\nconst listCss = `\n.plasmic-list--grid .ant-list-items {\n display: grid;\n grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));\n gap: 16px;\n}\n\n.plasmic-list-search {\n /* Matches RichTable search. */\n max-width: 200px;\n margin-bottom: 8px;\n}\n\n.plasmic-list-item-content--unbordered {\n padding-left: 8px;\n padding-right: 8px;\n}\n\n.ant-list .plasmic-list-item {\n align-items: stretch;\n}\n\n.plasmic-list-item--clickable:hover {\n background-color: #8881;\n}\n\n.plasmic-list-item-image {\n max-width: 80px;\n max-height: 80px;\n aspect-ratio: 1/1;\n object-fit: cover;\n border-radius: 8px;\n}\n\n.plasmic-list-item-card {\n /* Unsure why needed, but cards otherwise can be much narrower. */\n width: 100%;\n /* For the body to fill the height, so all cards are the same height. */\n display: flex;\n flex-direction: column;\n}\n\n.plasmic-list-item-card > .ant-card-body {\n flex: 1;\n}\n\n.plasmic-list-item-card-cover {\n max-height: 300px;\n aspect-ratio: 1/1;\n object-fit: cover;\n}\n`;\n\nexport function RichList(props: RichListProps) {\n const {\n data: rawData = {\n data: [],\n schema: {\n id: \"inferred\",\n fields: [\n {\n id: \"id\",\n type: \"string\",\n readOnly: false,\n },\n ],\n },\n },\n type = \"list\",\n bordered = true,\n\n className,\n size,\n header,\n footer,\n\n rowActions = [],\n pageSize = 10,\n hideSearch,\n rowKey,\n pagination = true,\n onRowClick,\n ..._rest\n } = props;\n\n const normalizedData = useNormalizedData(rawData);\n\n const data = React.useMemo(() => {\n if (!normalizedData?.data) {\n return normalizedData;\n }\n return { ...normalizedData, data: tagDataArray(normalizedData.data) };\n }, [normalizedData]);\n\n const { normalized, finalRoles: roleConfigs } = useRoleDefinitions(\n data,\n props\n );\n\n // Simply ignore the linkTo if it's not a function.\n const linkTo = typeof props.linkTo === \"function\" ? props.linkTo : undefined;\n\n const { finalData, search, setSearch } = useSortedFilteredData(\n data,\n normalized\n );\n\n const actuallyBordered = type === \"list\" ? bordered : false;\n return (\n <div className={className}>\n <style dangerouslySetInnerHTML={{ __html: listCss }} />\n {!hideSearch && (\n <Input.Search\n className={\"plasmic-list-search\"}\n onChange={(e) => setSearch(e.target.value)}\n value={search}\n placeholder={\"Search\"}\n />\n )}\n <List\n className={classNames({\n // We use CSS grid instead of the built-in Ant grid which can only define fixed # columns, and only at screen (and not container) breakpoints.\n \"plasmic-list--grid\": type === \"grid\",\n })}\n size={size}\n header={header}\n footer={footer}\n dataSource={finalData}\n itemLayout={\"horizontal\"}\n bordered={actuallyBordered}\n pagination={\n pagination\n ? {\n pageSize: pageSize,\n showSizeChanger: false,\n }\n : false\n }\n renderItem={(record) => {\n // Currently, actions are nested inside the list item / card, so can't have both linkTo and actions or else hydration error.\n // Eventually can fork the Ant components to make the main linkTo area and actions not nest.\n const actions = renderActions(rowActions, record, data, rowKey);\n // actions={[\n // <SettingOutlined key=\"setting\" />,\n // <EditOutlined key=\"edit\" />,\n // <EllipsisOutlined key=\"ellipsis\" />,\n // ]}\n const image = maybe(\n maybeRenderString(record, roleConfigs.image?.[0]),\n (src) => (\n <img\n src={src}\n className={\n type === \"list\"\n ? \"plasmic-list-item-image\"\n : \"plasmic-list-item-card-cover\"\n }\n />\n )\n );\n const content = (\n <ListItemContent\n bordered={actuallyBordered}\n image={type === \"list\" ? image : undefined}\n title={multiRenderValue(record, roleConfigs.title)}\n subtitle={multiRenderValue(record, roleConfigs.subtitle)}\n beforeTitle={multiRenderValue(record, roleConfigs.beforeTitle)}\n afterTitle={multiRenderValue(record, roleConfigs.afterTitle)}\n content={multiRenderValue(record, roleConfigs.content)}\n />\n );\n\n function makeLinkWrapper() {\n if ((actions ?? []).length > 0) {\n return undefined;\n }\n const href = linkTo?.(record);\n if (!href && !onRowClick) {\n return undefined;\n }\n const _linkWrapper = (x: ReactNode) => (\n <a\n href={href}\n onClick={(event) => {\n const key = deriveKeyOfRow(\n record,\n deriveRowKey(data, rowKey)\n );\n if (\n key != null &&\n !isInteractable(event.target as HTMLElement)\n ) {\n onRowClick?.(key, record, event);\n }\n }}\n >\n {x}\n </a>\n );\n return _linkWrapper;\n }\n\n const linkWrapper = makeLinkWrapper();\n\n const hasLink = !!linkWrapper;\n\n function maybeLink(x: ReactNode) {\n return linkWrapper?.(x) ?? x;\n }\n\n return type === \"grid\" ? (\n <List.Item className={\"plasmic-list-item\"}>\n {maybeLink(\n <Card\n className={\"plasmic-list-item-card\"}\n size={\"small\"}\n cover={image}\n hoverable={hasLink}\n actions={actions}\n >\n {content}\n </Card>\n )}\n </List.Item>\n ) : (\n maybeLink(\n <List.Item\n actions={actions}\n className={classNames({\n \"plasmic-list-item\": true,\n \"plasmic-list-item--clickable\": hasLink,\n })}\n >\n {content}\n </List.Item>\n )\n );\n }}\n />\n </div>\n );\n}\n\nfunction ListItemContent({\n className,\n title,\n subtitle,\n image,\n beforeTitle,\n afterTitle,\n content,\n bordered,\n ...others\n}: {\n className?: string;\n title?: ReactNode;\n subtitle?: ReactNode;\n image?: ReactNode;\n beforeTitle?: ReactNode;\n afterTitle?: ReactNode;\n content?: ReactNode;\n bordered?: boolean;\n}) {\n const prefixCls = \"ant-list\";\n const classString = classNames(`${prefixCls}-item-meta`, className);\n\n return (\n <div\n {...others}\n className={classNames(\n {\n \"plasmic-list-item-content--unbordered\": !bordered,\n },\n classString\n )}\n >\n {image && <div className={`${prefixCls}-item-meta-avatar`}>{image}</div>}\n <div\n className={`${prefixCls}-item-meta-content`}\n style={{ display: \"flex\", flexDirection: \"column\", gap: 4 }}\n >\n {beforeTitle && (\n <div>\n <Tag>{beforeTitle}</Tag>\n </div>\n )}\n <div style={{ display: \"flex\", gap: 8 }}>\n {title && (\n <h4\n className={`${prefixCls}-item-meta-title`}\n style={{ margin: 0 }}\n >\n {title}\n </h4>\n )}\n {afterTitle && (\n <div className={`${prefixCls}-item-meta-description`}>\n {afterTitle}\n </div>\n )}\n </div>\n {subtitle && (\n <div className={`${prefixCls}-item-meta-description`}>{subtitle}</div>\n )}\n {content && <div>{content}</div>}\n </div>\n </div>\n );\n}\n\ninterface StyleConfig {\n styles: Record<string, any>;\n align: \"left\" | \"center\" | \"right\";\n freeze: \"off\" | \"left\" | \"right\";\n}\n\nconst defaultColumnConfig = (): ListColumnConfig =>\n ({\n key: mkShortId(),\n isEditableExpr: () => false,\n disableSorting: false,\n sortByExpr: undefined,\n isHidden: false,\n formatting: {\n styles: {},\n align: \"left\",\n freeze: \"off\",\n },\n dataType: \"auto\" as const,\n role: undefined,\n } as const);\n\nconst roles = [\n \"content\",\n \"title\",\n \"subtitle\",\n \"beforeTitle\",\n \"afterTitle\",\n \"image\",\n \"unset\",\n] as const;\n\nexport type Role = (typeof roles)[number];\n\nexport type ListColumnConfig = BaseColumnConfig & {\n isEditableExpr: RowFunc<boolean>;\n disableSorting: boolean;\n sortByExpr?: RowFunc<any>;\n formatting: StyleConfig;\n\n /**\n * The default inferred role, not the actual user-set role.\n */\n role: undefined | Role | \"unset\";\n};\n\n// This component is different from Table/Details since it has various different roles, so the UX is one of setting the choices for each role rather than a single list of fields.\n//\n// We first infer the defaults for each role.\n// This we always need to do because we want the choices to be 'stable'.\n// If the user sets one of the roles, without setting the others, we don't want to shift things around on the other roles as a result.\n// So the defaults need to always be there (they would only be irrelevant if all roles that would have had defaults were set/overridden by the user).\n//\n// Then, we layer on the user role choices.\n//\n// One UX wart is that unsetting a role will restore the default selection instead of clearing it.\n// User must know to actually set fieldId to none or (for arrays) remove the item.\n// Just another reason to fill in few roles by default.\nfunction useRoleDefinitions(\n data: NormalizedData | undefined,\n props: React.ComponentProps<typeof RichList>\n) {\n const { fields, setControlContextData, rowActions } = props;\n\n return React.useMemo(() => {\n const schema = data?.schema;\n const schemaMap = new Map(data?.schema?.fields.map((f) => [f.id, f]));\n if (!data || !schema) {\n return { normalized: [], finalRoles: {} };\n }\n\n function tagFieldConfigs(role: Role) {\n if (role !== \"unset\") {\n return ensureArray(props[role] ?? []).map((field) => {\n return {\n ...field,\n role,\n };\n });\n } else {\n return [];\n }\n }\n\n // This is only being computed to get the default role choices.\n const specifiedFieldsPartial = [\n ...tagFieldConfigs(\"image\"),\n ...tagFieldConfigs(\"content\"),\n ...tagFieldConfigs(\"title\"),\n ...tagFieldConfigs(\"beforeTitle\"),\n ...tagFieldConfigs(\"afterTitle\"),\n ...tagFieldConfigs(\"subtitle\"),\n ];\n\n function doDeriveFieldConfigs(mode: \"existing\" | \"defaults\") {\n return deriveFieldConfigs<ListColumnConfig>(\n mode === \"defaults\" ? [] : specifiedFieldsPartial,\n schema,\n (field) => ({\n ...defaultColumnConfig(),\n ...(field && {\n key: field.id,\n fieldId: field.id,\n title: field.label || field.id,\n // undefined means not yet determined in this routine, not 'unset'\n role: undefined,\n expr: (currentItem) => currentItem[field.id],\n }),\n })\n );\n }\n\n // Now we derive the defaults.\n //\n // We always start from a blank slate for this. We want stability - we don't want a situation where we are constantly shifting around the defaults based on what else the user has set.\n //\n // For instance,\n // (1) we derive `city` to be content,\n // (2) user sets `city` as title,\n // (3) we now derive a different content because `city` is used.\n const {\n mergedFields: defaultMergedFields,\n minimalFullLengthFields: defaultMinimalFullLengthFields,\n } = doDeriveFieldConfigs(\"defaults\");\n\n // Find a good default image field.\n // Filter mergedFields where there are mostly values (in the sampleRows) that are a string that looks like a URL or path to an image file.\n // Of these, prefer the one with a name like image, picture, pic, img, avatar, profile, photo, icon.\n // Otherwise, prefer the one with a title with that substring.\n // Otherwise, pick any remaining one.\n if (\n data.data.length > 0 &&\n !defaultMergedFields.some((field) => field.role === \"image\")\n ) {\n const sampleRows = Array.from(\n new Set(\n [0, 1, 2, 3, 4, 5, 6, 7, 8, 9].map((i) =>\n Math.round((i / 9) * (data.data.length - 1))\n )\n )\n ).map((i) => data.data[i]);\n const imageFieldCandidates = defaultMergedFields.filter(\n (field) =>\n !field.role &&\n sampleRows.filter(\n (row) => field.fieldId && isLikeImage(row[field.fieldId])\n ).length >=\n sampleRows.length / 2\n );\n const imageField =\n imageFieldCandidates.find((f) =>\n f.fieldId?.match(\n /^(image|picture|pic|img|avatar|profile|photo|icon)$/i\n )\n ) ??\n imageFieldCandidates.find((f) =>\n f.fieldId?.match(\n /.*(image|picture|pic|img|avatar|profile|photo|icon).*/i\n )\n ) ??\n imageFieldCandidates[0];\n if (imageField) {\n imageField.role = \"image\";\n }\n }\n\n // Find a good default title field, just based on the field name.\n if (!defaultMergedFields.some((field) => field.role === \"title\")) {\n const titleField = defaultMergedFields.find(\n (field) =>\n !field.role &&\n field.fieldId\n ?.toLowerCase()\n .match(/^(title|name|first[ _-]?name|full[ _-]?name)$/)\n );\n if (titleField) {\n titleField.role = \"title\";\n }\n }\n\n // Find a good default content field - just any remaining text field.\n if (!defaultMergedFields.some((field) => field.role === \"content\")) {\n const contentField = defaultMergedFields.find(\n (field) =>\n !field.role &&\n field.fieldId &&\n schemaMap.get(field.fieldId)?.type === \"string\"\n );\n if (contentField) {\n contentField.role = \"content\";\n }\n }\n\n const fieldIdToDefaultRole = new Map(\n defaultMergedFields.map((f) => [f.fieldId, f.role])\n );\n for (const f of defaultMinimalFullLengthFields) {\n f.role = fieldIdToDefaultRole.get(f.fieldId);\n }\n\n // Now we have the defaults!\n //\n // We once again derive field configs, this time using existing props.\n // Then we add on the derived defaults for the \"real merged\" fields.\n //\n // Note this is kind of an awkward/wasteful use of deriveFieldConfigs since it was more for table columns originally, and this by-role usage is a different shape of problem. We're mainly using it to fill in / \"inflate\" the additional settings on these FieldConfigs. Haven't yet bothered finding a better utility interface.\n const { mergedFields, minimalFullLengthFields } =\n doDeriveFieldConfigs(\"existing\");\n\n const minimalFullLengthFieldsWithDefaults = [\n ...minimalFullLengthFields.filter((f) => f.role && f.role !== \"unset\"),\n ...defaultMinimalFullLengthFields.filter(\n (f) => f.role && f.role !== \"unset\" && !props[f.role]\n ),\n ];\n const mergedFieldsWithDefaults = [\n ...mergedFields.filter((f) => f.role && f.role !== \"unset\"),\n ...defaultMergedFields.filter(\n (f) => f.role && f.role !== \"unset\" && !props[f.role]\n ),\n ];\n\n // We now get by-role grouping which is needed by the component.\n const roleConfigs = ensure(\n groupBy(mergedFieldsWithDefaults, (f) => f.role)\n );\n\n const finalRoles: Partial<Record<Role, ListColumnConfig[]>> = {};\n for (const role of roles) {\n if (role !== \"unset\") {\n finalRoles[role] = maybe(props[role], ensureArray) ?? roleConfigs[role];\n }\n }\n\n setControlContextData?.({\n ...data,\n mergedFields: mergedFieldsWithDefaults,\n minimalFullLengthFields: minimalFullLengthFieldsWithDefaults,\n });\n\n const normalized = mergedFieldsWithDefaults;\n return { normalized, finalRoles };\n }, [fields, data, setControlContextData, rowActions]);\n}\n","import { type CodeComponentMeta } from \"@plasmicapp/host/registerComponent\";\nimport {\n commonProps,\n dataProp,\n onRowClickProp,\n roleProp,\n rowActionsProp,\n} from \"../common-prop-types\";\nimport { Registerable, registerComponentHelper } from \"../utils\";\nimport { RichList, RichListProps } from \"./RichList\";\n\nexport * from \"./RichList\";\nexport default RichList;\nconst richListMeta: CodeComponentMeta<RichListProps> = {\n name: \"hostless-rich-list\",\n displayName: \"Data List\",\n defaultStyles: {\n width: \"stretch\",\n padding: \"16px\",\n maxHeight: \"100%\",\n },\n defaultDisplay: \"block\",\n props: {\n data: dataProp(),\n type: {\n type: \"choice\",\n options: [\n { value: \"list\", label: \"List\" },\n { value: \"grid\", label: \"Grid\" },\n ],\n defaultValueHint: \"list\",\n },\n\n header: {\n type: \"slot\",\n hidePlaceholder: true,\n },\n footer: {\n type: \"slot\",\n hidePlaceholder: true,\n },\n\n title: roleProp({ role: \"title\" }),\n content: roleProp({ role: \"content\" }),\n image: roleProp({ role: \"image\", singular: true }),\n subtitle: roleProp({\n role: \"subtitle\",\n advanced: true,\n }),\n // Haven't styled these yet!\n // beforeTitle: roleProp({ role: \"beforeTitle\", advanced: true }),\n // afterTitle: roleProp({ role: \"afterTitle\", advanced: true }),\n\n linkTo: {\n type: \"function\",\n control: {\n type: \"href\",\n },\n argNames: [\"currentItem\"],\n argValues: (_props: any, ctx: any) => [ctx?.data?.[0]],\n } as any,\n\n onRowClick: onRowClickProp(),\n rowActions: rowActionsProp(),\n\n bordered: {\n type: \"boolean\",\n defaultValue: true,\n hidden: (ps) => (ps.type ?? \"list\") !== \"list\",\n },\n\n ...commonProps(),\n },\n importName: \"RichList\",\n importPath: \"@plasmicpkgs/plasmic-rich-components/skinny/rich-list\",\n};\n\nexport function registerRichList(loader?: Registerable) {\n registerComponentHelper(loader, RichList, richListMeta);\n}\n"],"names":["_a","__spreadValues"],"mappings":"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"}
@@ -2,9 +2,9 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var commonPropTypes = require('../common-prop-types-94b20130.cjs.js');
6
- var formatting = require('../formatting-939d0aa3.cjs.js');
7
- var utils = require('../utils-65c486f0.cjs.js');
5
+ var commonPropTypes = require('../common-prop-types-691f4a06.cjs.js');
6
+ var formatting = require('../formatting-c37b4133.cjs.js');
7
+ var utils = require('../utils-da451c58.cjs.js');
8
8
  var icons = require('@ant-design/icons');
9
9
  var proComponents = require('@ant-design/pro-components');
10
10
  var dataSources = require('@plasmicapp/data-sources');
@@ -13,7 +13,7 @@ var csvWriterBrowser = require('csv-writer-browser');
13
13
  var fastStringify = require('fast-stringify');
14
14
  var React = require('react');
15
15
  var common = require('../common-e1d76791.cjs.js');
16
- var fieldReactUtils = require('../field-react-utils-c717ec94.cjs.js');
16
+ var fieldReactUtils = require('../field-react-utils-2bbbadc7.cjs.js');
17
17
  require('@plasmicpkgs/luxon-parser');
18
18
  require('lodash/get');
19
19
  require('@plasmicapp/host/registerComponent');
@@ -1,6 +1,6 @@
1
- import { d as dataProp, o as onRowClickProp, a as rowActionsProp, c as commonProps } from '../common-prop-types-82f3a4ed.esm.js';
2
- import { d as deriveValueType, r as renderValue, b as buildFieldsPropType } from '../formatting-6f22c9d6.esm.js';
3
- import { E as ErrorBoundary, g as isInteractable, d as mkShortId, r as registerComponentHelper } from '../utils-c32bd7ed.esm.js';
1
+ import { d as dataProp, o as onRowClickProp, a as rowActionsProp, c as commonProps } from '../common-prop-types-758ece78.esm.js';
2
+ import { d as deriveValueType, r as renderValue, b as buildFieldsPropType } from '../formatting-b434487b.esm.js';
3
+ import { E as ErrorBoundary, g as isInteractable, d as mkShortId, r as registerComponentHelper } from '../utils-546b05e4.esm.js';
4
4
  import { PlusOutlined, EllipsisOutlined } from '@ant-design/icons';
5
5
  import { ProTable } from '@ant-design/pro-components';
6
6
  import { useNormalizedData, deriveFieldConfigs } from '@plasmicapp/data-sources';
@@ -9,7 +9,7 @@ import { createObjectCsvStringifier } from 'csv-writer-browser';
9
9
  import fastStringify from 'fast-stringify';
10
10
  import React, { useMemo, useRef } from 'react';
11
11
  import { u as useIsClient } from '../common-8cca2977.esm.js';
12
- import { t as tagDataArray, u as useSortedFilteredData, r as renderActions, d as deriveKeyOfRow, a as deriveRowKey } from '../field-react-utils-26fba31e.esm.js';
12
+ import { t as tagDataArray, u as useSortedFilteredData, r as renderActions, d as deriveKeyOfRow, a as deriveRowKey } from '../field-react-utils-46bb1f20.esm.js';
13
13
  import '@plasmicpkgs/luxon-parser';
14
14
  import 'lodash/get';
15
15
  import '@plasmicapp/host/registerComponent';
@@ -23,27 +23,34 @@ function isOneOf(elem, arr) {
23
23
  return arr.includes(elem);
24
24
  }
25
25
  function maybe(x, f) {
26
- if (x === void 0 || x === null)
26
+ if (x === void 0 || x === null) {
27
27
  return void 0;
28
+ }
28
29
  return f(x);
29
30
  }
30
31
  function isValidIsoDate(str, extendedOnly = false) {
31
- if (!str)
32
+ if (!str) {
32
33
  return false;
33
- if (typeof str !== "string")
34
+ }
35
+ if (typeof str !== "string") {
34
36
  return false;
35
- if (str.includes(" "))
37
+ }
38
+ if (str.includes(" ")) {
36
39
  return false;
40
+ }
37
41
  if (str.length === 10) {
38
- if (extendedOnly)
42
+ if (extendedOnly) {
39
43
  return false;
44
+ }
40
45
  dayjs.extend(customParseFormat);
41
46
  return dayjs(str, "YYYY-MM-DD", true).isValid();
42
47
  }
43
- if (!dayjs(str).isValid())
48
+ if (!dayjs(str).isValid()) {
44
49
  return false;
45
- if (isNaN(new Date(str).getTime()))
50
+ }
51
+ if (isNaN(new Date(str).getTime())) {
46
52
  return false;
53
+ }
47
54
  return true;
48
55
  }
49
56
  function isLikeDate(value) {
@@ -54,8 +61,9 @@ function isLikeImage(value) {
54
61
  return typeof value === "string" ? value.match(/\.(png|jpg|jpeg|gif|svg|webp|avif|ico|bmp|tiff)$/i) : false;
55
62
  }
56
63
  function isLikeColor(value) {
57
- if (typeof value !== "string")
64
+ if (typeof value !== "string") {
58
65
  return false;
66
+ }
59
67
  const hex = /^#?([0-9a-fA-F]{3}([0-9a-fA-F]{3})?|[0-9a-fA-F]{4}([0-9a-fA-F]{4})?)$/;
60
68
  const rgba = /^rgba?\((\s*\d+\s*,\s*\d+\s*,\s*\d+\s*(,\s*(1|0?(\.\d+)?))?\s*)\)$/;
61
69
  const cssNamed = /^(aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen)$/;
@@ -115,4 +123,4 @@ class ErrorBoundary extends React.Component {
115
123
  }
116
124
 
117
125
  export { ErrorBoundary as E, isLikeDate as a, isLikeColor as b, ensureArray as c, mkShortId as d, ensure as e, isLikeImage as f, isInteractable as g, isOneOf as h, isValidIsoDate as i, maybe as m, registerComponentHelper as r, withoutFalsey as w };
118
- //# sourceMappingURL=utils-c32bd7ed.esm.js.map
126
+ //# sourceMappingURL=utils-546b05e4.esm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils-546b05e4.esm.js","sources":["../src/utils.tsx"],"sourcesContent":["import {\n CodeComponentMeta,\n default as registerComponent,\n} from \"@plasmicapp/host/registerComponent\";\nimport {\n GlobalContextMeta,\n default as registerGlobalContext,\n} from \"@plasmicapp/host/registerGlobalContext\";\nimport { default as registerToken } from \"@plasmicapp/host/registerToken\";\nimport { parseDate } from \"@plasmicpkgs/luxon-parser\";\nimport dayjs from \"dayjs\";\nimport customParseFormat from \"dayjs/plugin/customParseFormat\";\nimport React from \"react\";\n\nexport type Registerable = {\n registerComponent: typeof registerComponent;\n registerGlobalContext: typeof registerGlobalContext;\n registerToken: typeof registerToken;\n};\n\nexport function makeRegisterComponent<T extends React.ComponentType<any>>(\n component: T,\n meta: CodeComponentMeta<React.ComponentProps<T>>\n) {\n return function (loader?: Registerable) {\n registerComponentHelper(loader, component, meta);\n };\n}\n\nexport function makeRegisterGlobalContext<T extends React.ComponentType<any>>(\n component: T,\n meta: GlobalContextMeta<React.ComponentProps<T>>\n) {\n return function (loader?: Registerable) {\n if (loader) {\n loader.registerGlobalContext(component, meta);\n } else {\n registerGlobalContext(component, meta);\n }\n };\n}\n\nexport function registerComponentHelper<T extends React.ComponentType<any>>(\n loader: Registerable | undefined,\n component: T,\n meta: CodeComponentMeta<React.ComponentProps<T>>\n) {\n if (loader) {\n loader.registerComponent(component, meta);\n } else {\n registerComponent(component, meta);\n }\n}\n\ntype ReactElt = {\n children: ReactElt | ReactElt[];\n props: {\n children: ReactElt | ReactElt[];\n [prop: string]: any;\n } | null;\n type: React.ComponentType<any> | null;\n key: string | null;\n} | null;\n\nexport function traverseReactEltTree(\n children: React.ReactNode,\n callback: (elt: ReactElt) => void\n) {\n const rec = (elts: ReactElt | ReactElt[] | null) => {\n (Array.isArray(elts) ? elts : [elts]).forEach((elt) => {\n if (elt) {\n callback(elt);\n if (elt.children) {\n rec(elt.children);\n }\n if (elt.props?.children && elt.props.children !== elt.children) {\n rec(elt.props.children);\n }\n }\n });\n };\n rec(children as any);\n}\n\nexport function asArray<T>(x: T[] | T | undefined | null) {\n if (Array.isArray(x)) {\n return x;\n } else if (x == null) {\n return [];\n } else {\n return [x];\n }\n}\n\nexport function ensureNumber(x: number | string): number {\n return x as number;\n}\n\nexport function ensure<T>(x: T | null | undefined): T {\n if (x === null || x === undefined) {\n throw new Error(\"Expected non-null or non-undefined value\");\n }\n return x;\n}\n\nexport function isOneOf<T, U extends T>(elem: T, arr: readonly U[]): elem is U {\n return arr.includes(elem as any);\n}\n\nexport function maybe<T, U>(\n x: T | undefined | null,\n f: (y: T) => U\n): U | undefined {\n if (x === undefined || x === null) {\n return undefined;\n }\n return f(x);\n}\n\n/**\n *\n * @param str iso string\n * @param extendedOnly boolean for extended mode (i.e. time)\n * @returns Returns true for strings in ISO 8601 format\n */\nexport function isValidIsoDate(str: string | undefined, extendedOnly = false) {\n if (!str) {\n return false;\n }\n if (typeof str !== \"string\") {\n return false;\n }\n if (str.includes(\" \")) {\n return false;\n } // spaces not supported\n if (str.length === 10) {\n if (extendedOnly) {\n return false;\n }\n dayjs.extend(customParseFormat);\n return dayjs(str, \"YYYY-MM-DD\", true).isValid();\n }\n if (!dayjs(str).isValid()) {\n return false;\n } // should be a valid dayjs date\n if (isNaN(new Date(str).getTime())) {\n return false;\n } // should be a valid js date\n return true;\n}\n\nexport function isLikeDate(value: unknown) {\n const parsed = parseDate(value);\n return parsed ? true : false;\n}\n\nexport function isLikeImage(value: unknown) {\n return typeof value === \"string\"\n ? value.match(/\\.(png|jpg|jpeg|gif|svg|webp|avif|ico|bmp|tiff)$/i)\n : false;\n}\n\nexport function isLikeColor(value: unknown) {\n if (typeof value !== \"string\") {\n return false;\n }\n\n const hex =\n /^#?([0-9a-fA-F]{3}([0-9a-fA-F]{3})?|[0-9a-fA-F]{4}([0-9a-fA-F]{4})?)$/;\n const rgba =\n /^rgba?\\((\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*\\d+\\s*(,\\s*(1|0?(\\.\\d+)?))?\\s*)\\)$/;\n const cssNamed =\n /^(aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen)$/;\n const hsla =\n /^hsla?\\((\\s*\\d+(\\.\\d+)?\\s*,\\s*\\d+(\\.\\d+)?%\\s*,\\s*\\d+(\\.\\d+)?%\\s*(,\\s*(1|0?\\.\\d+))?\\s*)\\)$/;\n const cmyk =\n /^cmyka?\\((\\s*\\d+(\\.\\d+)?%\\s*,\\s*\\d+(\\.\\d+)?%\\s*,\\s*\\d+(\\.\\d+)?%\\s*,\\s*\\d+(\\.\\d+)?%\\s*(,\\s*(1|0?\\.\\d+))?\\s*)\\)$/;\n const hsv =\n /^hsva?\\((\\s*\\d+(\\.\\d+)?\\s*,\\s*\\d+(\\.\\d+)?%\\s*,\\s*\\d+(\\.\\d+)?%\\s*(,\\s*(1|0?\\.\\d+))?\\s*)\\)$/;\n\n if (\n value.match(hex) ||\n value.match(rgba) ||\n value.match(cssNamed) ||\n value.match(hsla) ||\n value.match(cmyk) ||\n value.match(hsv)\n ) {\n return true;\n }\n\n return false;\n}\n\n// Some heuristics to avoid selecting a row when\n// the object clicked is interactable -- like button, anchor,\n// input, etc. This won't be bulletproof, so just some\n// heuristics!\nexport function isInteractable(target: HTMLElement) {\n if ([\"A\", \"BUTTON\", \"INPUT\", \"TEXTAREA\", \"SELECT\"].includes(target.tagName)) {\n return true;\n }\n if (target.contentEditable === \"true\") {\n return true;\n }\n\n return false;\n}\n\nexport function ensureArray<T>(xs: T | T[]): T[] {\n return Array.isArray(xs) ? xs : [xs];\n}\n\nexport const tuple = <T extends any[]>(...args: T): T => args;\n\nexport interface HasId {\n id: string;\n}\n\nexport function mkIdMap<T extends HasId>(xs: ReadonlyArray<T>): Map<string, T> {\n return new Map(xs.map((x) => tuple(x.id, x) as [string, T]));\n}\n\nexport const mkShortId = () => `${Math.random()}`;\n\nexport function withoutNils<T>(xs: Array<T | undefined | null>): T[] {\n return xs.filter((x): x is T => x != null);\n}\n\nexport type Falsey = null | undefined | false | \"\" | 0 | 0n;\nexport type Truthy<T> = T extends Falsey ? never : T;\n\nexport function withoutFalsey<T>(xs: Array<T | Falsey>): T[] {\n return xs.filter((x): x is T => !!x);\n}\n\n/**\n *\n * Forked from: https://github.com/ant-design/pro-components/blob/master/packages/utils/src/components/ErrorBoundary/index.tsx\n *\n */\nimport { Result } from \"antd\";\nimport type { ErrorInfo } from \"react\";\n\ninterface ErrorBoundaryProps {\n children?: React.ReactNode;\n canvasEnvId?: number;\n}\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n errorInfo: string;\n}\nexport class ErrorBoundary extends React.Component<\n ErrorBoundaryProps,\n ErrorBoundaryState\n> {\n state = { hasError: false, errorInfo: \"\" };\n\n static getDerivedStateFromError(error: Error) {\n return { hasError: true, errorInfo: error.message };\n }\n\n componentDidCatch(error: any, errorInfo: ErrorInfo) {\n // You can also log the error to an error reporting service\n // eslint-disable-next-line no-console\n console.log(error, errorInfo);\n }\n\n componentDidUpdate(\n prevProps: Readonly<ErrorBoundaryProps>,\n prevState: Readonly<ErrorBoundaryState>\n ) {\n if (\n prevProps.canvasEnvId !== this.props.canvasEnvId &&\n prevState.hasError\n ) {\n this.setState({ hasError: false });\n }\n }\n\n render() {\n if (this.state.hasError) {\n // You can render any custom fallback UI\n return (\n <Result\n status=\"error\"\n title=\"Something went wrong.\"\n extra={this.state.errorInfo}\n />\n );\n }\n return this.props.children;\n }\n}\n"],"names":[],"mappings":";;;;;;;;AA0CgB,SAAA,uBAAA,CACd,MACA,EAAA,SAAA,EACA,IACA,EAAA;AACA,EAAA,IAAI,MAAQ,EAAA;AACV,IAAO,MAAA,CAAA,iBAAA,CAAkB,WAAW,IAAI,CAAA,CAAA;AAAA,GACnC,MAAA;AACL,IAAA,iBAAA,CAAkB,WAAW,IAAI,CAAA,CAAA;AAAA,GACnC;AACF,CAAA;AA8CO,SAAS,OAAU,CAA4B,EAAA;AACpD,EAAI,IAAA,CAAA,KAAM,IAAQ,IAAA,CAAA,KAAM,KAAW,CAAA,EAAA;AACjC,IAAM,MAAA,IAAI,MAAM,0CAA0C,CAAA,CAAA;AAAA,GAC5D;AACA,EAAO,OAAA,CAAA,CAAA;AACT,CAAA;AAEgB,SAAA,OAAA,CAAwB,MAAS,GAA8B,EAAA;AAC7E,EAAO,OAAA,GAAA,CAAI,SAAS,IAAW,CAAA,CAAA;AACjC,CAAA;AAEgB,SAAA,KAAA,CACd,GACA,CACe,EAAA;AACf,EAAI,IAAA,CAAA,KAAM,KAAa,CAAA,IAAA,CAAA,KAAM,IAAM,EAAA;AACjC,IAAO,OAAA,KAAA,CAAA,CAAA;AAAA,GACT;AACA,EAAA,OAAO,EAAE,CAAC,CAAA,CAAA;AACZ,CAAA;AAQgB,SAAA,cAAA,CAAe,GAAyB,EAAA,YAAA,GAAe,KAAO,EAAA;AAC5E,EAAA,IAAI,CAAC,GAAK,EAAA;AACR,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AACA,EAAI,IAAA,OAAO,QAAQ,QAAU,EAAA;AAC3B,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AACA,EAAI,IAAA,GAAA,CAAI,QAAS,CAAA,GAAG,CAAG,EAAA;AACrB,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AACA,EAAI,IAAA,GAAA,CAAI,WAAW,EAAI,EAAA;AACrB,IAAA,IAAI,YAAc,EAAA;AAChB,MAAO,OAAA,KAAA,CAAA;AAAA,KACT;AACA,IAAA,KAAA,CAAM,OAAO,iBAAiB,CAAA,CAAA;AAC9B,IAAA,OAAO,KAAM,CAAA,GAAA,EAAK,YAAc,EAAA,IAAI,EAAE,OAAQ,EAAA,CAAA;AAAA,GAChD;AACA,EAAA,IAAI,CAAC,KAAA,CAAM,GAAG,CAAA,CAAE,SAAW,EAAA;AACzB,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AACA,EAAA,IAAI,MAAM,IAAI,IAAA,CAAK,GAAG,CAAE,CAAA,OAAA,EAAS,CAAG,EAAA;AAClC,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AACA,EAAO,OAAA,IAAA,CAAA;AACT,CAAA;AAEO,SAAS,WAAW,KAAgB,EAAA;AACzC,EAAM,MAAA,MAAA,GAAS,UAAU,KAAK,CAAA,CAAA;AAC9B,EAAA,OAAO,SAAS,IAAO,GAAA,KAAA,CAAA;AACzB,CAAA;AAEO,SAAS,YAAY,KAAgB,EAAA;AAC1C,EAAA,OAAO,OAAO,KAAU,KAAA,QAAA,GACpB,KAAM,CAAA,KAAA,CAAM,mDAAmD,CAC/D,GAAA,KAAA,CAAA;AACN,CAAA;AAEO,SAAS,YAAY,KAAgB,EAAA;AAC1C,EAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AAEA,EAAA,MAAM,GACJ,GAAA,uEAAA,CAAA;AACF,EAAA,MAAM,IACJ,GAAA,oEAAA,CAAA;AACF,EAAA,MAAM,QACJ,GAAA,m8CAAA,CAAA;AACF,EAAA,MAAM,IACJ,GAAA,2FAAA,CAAA;AACF,EAAA,MAAM,IACJ,GAAA,gHAAA,CAAA;AACF,EAAA,MAAM,GACJ,GAAA,2FAAA,CAAA;AAEF,EACE,IAAA,KAAA,CAAM,MAAM,GAAG,CAAA,IACf,MAAM,KAAM,CAAA,IAAI,CAChB,IAAA,KAAA,CAAM,KAAM,CAAA,QAAQ,KACpB,KAAM,CAAA,KAAA,CAAM,IAAI,CAAA,IAChB,KAAM,CAAA,KAAA,CAAM,IAAI,CAChB,IAAA,KAAA,CAAM,KAAM,CAAA,GAAG,CACf,EAAA;AACA,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAEA,EAAO,OAAA,KAAA,CAAA;AACT,CAAA;AAMO,SAAS,eAAe,MAAqB,EAAA;AAClD,EAAI,IAAA,CAAC,GAAK,EAAA,QAAA,EAAU,OAAS,EAAA,UAAA,EAAY,QAAQ,CAAE,CAAA,QAAA,CAAS,MAAO,CAAA,OAAO,CAAG,EAAA;AAC3E,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACA,EAAI,IAAA,MAAA,CAAO,oBAAoB,MAAQ,EAAA;AACrC,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAEA,EAAO,OAAA,KAAA,CAAA;AACT,CAAA;AAEO,SAAS,YAAe,EAAkB,EAAA;AAC/C,EAAA,OAAO,MAAM,OAAQ,CAAA,EAAE,CAAI,GAAA,EAAA,GAAK,CAAC,EAAE,CAAA,CAAA;AACrC,CAAA;AAYO,MAAM,SAAY,GAAA,MAAM,CAAG,EAAA,IAAA,CAAK,MAAO,EAAA,CAAA,EAAA;AASvC,SAAS,cAAiB,EAA4B,EAAA;AAC3D,EAAA,OAAO,GAAG,MAAO,CAAA,CAAC,CAAc,KAAA,CAAC,CAAC,CAAC,CAAA,CAAA;AACrC,CAAA;AAmBa,MAAA,aAAA,SAAsB,MAAM,SAGvC,CAAA;AAAA,EAHK,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA,CAAA;AAIL,IAAA,IAAA,CAAA,KAAA,GAAQ,EAAE,QAAA,EAAU,KAAO,EAAA,SAAA,EAAW,EAAG,EAAA,CAAA;AAAA,GAAA;AAAA,EAEzC,OAAO,yBAAyB,KAAc,EAAA;AAC5C,IAAA,OAAO,EAAE,QAAA,EAAU,IAAM,EAAA,SAAA,EAAW,MAAM,OAAQ,EAAA,CAAA;AAAA,GACpD;AAAA,EAEA,iBAAA,CAAkB,OAAY,SAAsB,EAAA;AAGlD,IAAQ,OAAA,CAAA,GAAA,CAAI,OAAO,SAAS,CAAA,CAAA;AAAA,GAC9B;AAAA,EAEA,kBAAA,CACE,WACA,SACA,EAAA;AACA,IAAA,IACE,UAAU,WAAgB,KAAA,IAAA,CAAK,KAAM,CAAA,WAAA,IACrC,UAAU,QACV,EAAA;AACA,MAAA,IAAA,CAAK,QAAS,CAAA,EAAE,QAAU,EAAA,KAAA,EAAO,CAAA,CAAA;AAAA,KACnC;AAAA,GACF;AAAA,EAEA,MAAS,GAAA;AACP,IAAI,IAAA,IAAA,CAAK,MAAM,QAAU,EAAA;AAEvB,MACE,uBAAA,KAAA,CAAA,aAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,MAAO,EAAA,OAAA;AAAA,UACP,KAAM,EAAA,uBAAA;AAAA,UACN,KAAA,EAAO,KAAK,KAAM,CAAA,SAAA;AAAA,SAAA;AAAA,OACpB,CAAA;AAAA,KAEJ;AACA,IAAA,OAAO,KAAK,KAAM,CAAA,QAAA,CAAA;AAAA,GACpB;AACF;;;;"}
@@ -32,27 +32,34 @@ function isOneOf(elem, arr) {
32
32
  return arr.includes(elem);
33
33
  }
34
34
  function maybe(x, f) {
35
- if (x === void 0 || x === null)
35
+ if (x === void 0 || x === null) {
36
36
  return void 0;
37
+ }
37
38
  return f(x);
38
39
  }
39
40
  function isValidIsoDate(str, extendedOnly = false) {
40
- if (!str)
41
+ if (!str) {
41
42
  return false;
42
- if (typeof str !== "string")
43
+ }
44
+ if (typeof str !== "string") {
43
45
  return false;
44
- if (str.includes(" "))
46
+ }
47
+ if (str.includes(" ")) {
45
48
  return false;
49
+ }
46
50
  if (str.length === 10) {
47
- if (extendedOnly)
51
+ if (extendedOnly) {
48
52
  return false;
53
+ }
49
54
  dayjs__default.default.extend(customParseFormat__default.default);
50
55
  return dayjs__default.default(str, "YYYY-MM-DD", true).isValid();
51
56
  }
52
- if (!dayjs__default.default(str).isValid())
57
+ if (!dayjs__default.default(str).isValid()) {
53
58
  return false;
54
- if (isNaN(new Date(str).getTime()))
59
+ }
60
+ if (isNaN(new Date(str).getTime())) {
55
61
  return false;
62
+ }
56
63
  return true;
57
64
  }
58
65
  function isLikeDate(value) {
@@ -63,8 +70,9 @@ function isLikeImage(value) {
63
70
  return typeof value === "string" ? value.match(/\.(png|jpg|jpeg|gif|svg|webp|avif|ico|bmp|tiff)$/i) : false;
64
71
  }
65
72
  function isLikeColor(value) {
66
- if (typeof value !== "string")
73
+ if (typeof value !== "string") {
67
74
  return false;
75
+ }
68
76
  const hex = /^#?([0-9a-fA-F]{3}([0-9a-fA-F]{3})?|[0-9a-fA-F]{4}([0-9a-fA-F]{4})?)$/;
69
77
  const rgba = /^rgba?\((\s*\d+\s*,\s*\d+\s*,\s*\d+\s*(,\s*(1|0?(\.\d+)?))?\s*)\)$/;
70
78
  const cssNamed = /^(aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen)$/;
@@ -136,4 +144,4 @@ exports.maybe = maybe;
136
144
  exports.mkShortId = mkShortId;
137
145
  exports.registerComponentHelper = registerComponentHelper;
138
146
  exports.withoutFalsey = withoutFalsey;
139
- //# sourceMappingURL=utils-65c486f0.cjs.js.map
147
+ //# sourceMappingURL=utils-da451c58.cjs.js.map