@plasmicpkgs/plasmic-rich-components 1.0.203 → 1.0.205

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.
@@ -1 +1 @@
1
- {"version":3,"file":"plasmic-rich-components.esm.js","sources":["../src/utils.tsx","../src/field-mappings.tsx","../src/formatting.tsx","../src/rich-details/RichDetails.tsx","../src/rich-details/index.tsx","../src/common.ts","../src/widgets.tsx","../src/rich-layout/RichLayout.tsx","../src/rich-layout/index.tsx","../src/common-prop-types.tsx","../src/field-react-utils.tsx","../src/rich-table/RichTable.tsx","../src/rich-table/index.tsx","../src/rich-list/RichList.tsx","../src/rich-list/index.tsx","../src/rich-calendar/RichCalendar.tsx","../src/rich-calendar/index.tsx","../src/index.tsx"],"sourcesContent":["import {\n ComponentMeta,\n default as registerComponent,\n} from \"@plasmicapp/host/registerComponent\";\nimport {\n default as registerGlobalContext,\n GlobalContextMeta,\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: ComponentMeta<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: ComponentMeta<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) return undefined;\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) return false;\n if (typeof str !== \"string\") return false;\n if (str.includes(\" \")) return false; // spaces not supported\n if (str.length === 10) {\n if (extendedOnly) return false;\n dayjs.extend(customParseFormat);\n return dayjs(str, \"YYYY-MM-DD\", true).isValid();\n }\n if (!dayjs(str).isValid()) return false; // should be a valid dayjs date\n if (isNaN(new Date(str).getTime())) return false; // 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\") return false;\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","import { QueryResult, TableSchema } from \"@plasmicapp/data-sources\";\nimport { ContextDependentConfig } from \"@plasmicapp/host\";\nimport { PropType } from \"@plasmicapp/host/registerComponent\";\nimport deepGet from \"lodash/get\";\nimport { isOneOf, withoutFalsey } from \"./utils\";\n\nexport interface AutoSettings {\n dataType: \"auto\";\n}\n\ninterface _SharedNumberSettings {\n notation?: \"standard\" | \"scientific\" | \"engineering\" | \"compact\";\n signDisplay?: \"auto\" | \"always\" | \"exceptZero\";\n maximumFractionDigits?: number;\n minimumFractionDigits?: number;\n locale?: string;\n}\nexport interface DecimalSettings extends _SharedNumberSettings {\n dataType: \"number\";\n}\nexport interface PercentSettings extends _SharedNumberSettings {\n dataType: \"percent\";\n}\nexport interface CurrencySettings extends _SharedNumberSettings {\n dataType: \"currency\";\n currency?: string;\n currencyDisplay?: \"symbol\" | \"narrowSymbol\" | \"code\" | \"name\";\n}\nexport const DEFAULT_CURRENCY_SETTINGS: CurrencySettings = {\n dataType: \"currency\",\n currency: \"USD\",\n currencyDisplay: \"narrowSymbol\",\n};\n\nexport type NumberSettings =\n | DecimalSettings\n | PercentSettings\n | CurrencySettings;\nexport const NUMBER_TYPES = [\"number\", \"percent\", \"currency\"] as const;\n\nexport interface DateTimeSettings {\n dataType: \"datetime\";\n locale?: string;\n dateStyle?: \"none\" | \"full\" | \"long\" | \"medium\" | \"short\";\n timeStyle?: \"none\" | \"full\" | \"long\" | \"medium\" | \"short\";\n hour12?: boolean;\n timeZone?: string;\n}\nexport const DEFAULT_DATETIME_SETTINGS: DateTimeSettings = {\n dataType: \"datetime\",\n locale: \"en-US\",\n dateStyle: \"short\",\n timeStyle: \"short\",\n hour12: true,\n};\n\nexport interface RelativeDateTimeSettings {\n dataType: \"relative-datetime\";\n locale?: string;\n numeric?: \"always\" | \"auto\";\n style?: \"long\" | \"short\" | \"narrow\";\n unit?: \"year\" | \"month\" | \"week\" | \"day\" | \"hour\" | \"minute\" | \"second\";\n}\nexport const DEFAULT_RELATIVE_DATETIME_SETTINGS: RelativeDateTimeSettings = {\n dataType: \"relative-datetime\",\n locale: \"en-US\",\n numeric: \"always\",\n style: \"long\",\n unit: \"day\",\n};\nexport const DATETIME_TYPES = [\"datetime\", \"relative-datetime\"] as const;\n\nexport interface BooleanSettings {\n dataType: \"boolean\";\n showAs?: \"text\" | \"checkbox\" | \"switch\";\n}\nexport const DEFAULT_BOOLEAN_SETTINGS: BooleanSettings = {\n dataType: \"boolean\",\n showAs: \"checkbox\",\n};\n\nexport interface StringSettings {\n dataType: \"string\";\n}\n\nexport type RowFunc<Result> = (row: Record<string, unknown>) => Result;\nexport type CellFunc<Result> = (\n row: Record<string, unknown>,\n value: unknown\n) => Result;\n\n/**\n * Exprs are for things that can must re-evaluate from row to row.\n *\n * Literal values are for things that are column-level. (But in Plasmic Studio, as with all props, you can still use a dynamic value.)\n */\n\ninterface _BaseColumnConfig {\n key: string;\n fieldId?: string;\n title?: string;\n isHidden: boolean;\n expr?: CellFunc<any>;\n}\n\nexport type BaseColumnConfig = _BaseColumnConfig &\n (\n | AutoSettings\n | NumberSettings\n | StringSettings\n | BooleanSettings\n | DateTimeSettings\n | RelativeDateTimeSettings\n );\n\nexport function deriveValueType(cconfig: BaseColumnConfig) {\n return cconfig.dataType === \"auto\"\n ? undefined\n : cconfig.dataType === \"string\"\n ? \"text\"\n : cconfig.dataType === \"number\"\n ? \"digit\"\n : cconfig.dataType === \"boolean\"\n ? \"switch\"\n : undefined;\n}\n\nexport interface ControlContextData<ColumnConfig extends BaseColumnConfig> {\n data: unknown[];\n schema?: TableSchema;\n mergedFields: ColumnConfig[];\n minimalFullLengthFields: Partial<ColumnConfig>[];\n}\n\nexport interface FieldfulProps<ColumnConfig extends BaseColumnConfig> {\n className?: string;\n data?: QueryResult;\n fields?: Partial<ColumnConfig>[];\n setControlContextData?: (ctx: ControlContextData<ColumnConfig>) => void;\n}\n\n// Hacky \"unique\" string values\nexport const NoneField = \"||NoneField||\";\nexport const CustomField = \"\";\n\ninterface FieldSubpropsOpts<ColumnConfig extends BaseColumnConfig> {\n fieldTypes?: Record<string, PropType<any>>;\n canChangeField?: boolean;\n canPickNoneField?: boolean;\n noTitle?: boolean;\n noDataType?: boolean;\n hiddenFieldId?: (\n ps: Record<string, unknown>,\n ctx: ControlContextData<ColumnConfig>,\n extras: { path: (string | number)[] }\n ) => boolean;\n}\n\nexport function getFieldSubprops<ColumnConfig extends BaseColumnConfig>(\n opts: FieldSubpropsOpts<ColumnConfig>\n): Record<string, PropType<any>> {\n return {\n key: {\n type: \"string\",\n hidden: () => true,\n },\n fieldId: {\n type: \"choice\",\n displayName: \"Field name\",\n readOnly: !opts.canChangeField,\n options: (_props, ctx: ControlContextData<BaseColumnConfig>) =>\n withoutFalsey([\n opts.canPickNoneField && { value: NoneField, label: \"None\" },\n ...(ctx?.schema?.fields ?? []).map((f) => ({\n value: f.id,\n label: f.label ?? f.id,\n })),\n { value: CustomField, label: \"Custom value\" },\n ]),\n hidden: (\n ps,\n ctx: ControlContextData<ColumnConfig>,\n { path: _controlPath }\n ) => {\n // If this is change-able.\n if (opts.canChangeField) {\n return false;\n }\n return true;\n // If there's a user-set fieldId\n if (deepGet(ps, _controlPath)) {\n return false;\n }\n return opts.hiddenFieldId?.(ps, ctx, { path: _controlPath }) ?? true;\n },\n },\n title: {\n type: \"string\",\n displayName: \"Title\",\n defaultValueHint: getDefaultValueHint(\"title\"),\n hidden: () => !!opts.noTitle,\n },\n expr: {\n ...rowDataType(\"Custom value\"),\n hidden: (\n ps,\n ctx: ControlContextData<BaseColumnConfig>,\n { item, path: _controlPath }\n ) => {\n return false;\n // HIDE if this is unset.\n if (!item) {\n return true;\n }\n // SHOW if this is change-able *and* user chose \"Custom\".\n if (opts.canChangeField) {\n return false;\n }\n return true;\n },\n },\n isHidden: {\n type: \"boolean\",\n displayName: \"Is hidden\",\n defaultValueHint: getDefaultValueHint(\"isHidden\"),\n },\n ...(!opts.noDataType\n ? {\n dataType: {\n type: \"choice\",\n displayName: \"Data type\",\n options: [\n {\n value: \"auto\",\n label: \"Auto\",\n },\n {\n value: \"number\",\n label: \"Number\",\n },\n {\n value: \"percent\",\n label: \"Percentage\",\n },\n {\n value: \"currency\",\n label: \"Currency\",\n },\n {\n value: \"string\",\n label: \"String\",\n },\n {\n value: \"boolean\",\n label: \"Boolean\",\n },\n {\n value: \"datetime\",\n label: \"Date / Time\",\n },\n {\n value: \"relative-datetime\",\n label: \"Date / Time relative to now\",\n },\n ],\n defaultValueHint: getDefaultValueHint(\"dataType\"),\n },\n currency: {\n displayName: \"Currency\",\n description: \"Must be a valid currency code\",\n type: \"string\",\n defaultValueHint: \"USD\",\n hidden: (ps, ctx, { item }) => item.dataType !== \"currency\",\n },\n locale: {\n displayName: \"Locale\",\n description: \"Must be a valid locale code\",\n type: \"string\",\n defaultValueHint: \"en-US\",\n hidden: (ps, ctx, { item }) =>\n !isOneOf(item.dataType, NUMBER_TYPES) &&\n !isOneOf(item.dataType, DATETIME_TYPES),\n },\n notation: {\n displayName: \"Notation\",\n type: \"choice\",\n options: [\n {\n value: \"standard\",\n label: \"Standard\",\n },\n {\n value: \"scientific\",\n label: \"Scientific notation (like 1E3)\",\n },\n {\n value: \"compact\",\n label: \"Compact (like 10K)\",\n },\n ],\n defaultValueHint: \"standard\",\n hidden: (ps, ctx, { item }) =>\n !isOneOf(item.dataType, NUMBER_TYPES),\n },\n signDisplay: {\n type: \"choice\",\n displayName: \"Number sign\",\n options: [\n {\n value: \"auto\",\n label: \"Only for negative numbers (10, -10)\",\n },\n {\n value: \"exceptZero\",\n label: \"Positive or negative (+10, -10)\",\n },\n ],\n defaultValueHint: \"auto\",\n hidden: (ps, ctx, { item }) =>\n !isOneOf(item.dataType, NUMBER_TYPES),\n },\n maximumFractionDigits: {\n type: \"number\",\n displayName: \"Max decimal places\",\n defaultValueHint: 3,\n min: 0,\n max: 20,\n hidden: (ps, ctx, { item }) =>\n !isOneOf(item.dataType, NUMBER_TYPES),\n },\n minimumFractionDigits: {\n type: \"number\",\n displayName: \"Min decimal places\",\n defaultValueHint: 0,\n min: 0,\n max: 20,\n hidden: (ps, ctx, { item }) =>\n !isOneOf(item.dataType, NUMBER_TYPES),\n },\n showAs: {\n type: \"choice\",\n options: [\n {\n value: \"checkbox\",\n label: \"Checkboxes\",\n },\n {\n value: \"switch\",\n label: \"Toggle switches\",\n },\n {\n value: \"text\",\n label: \"Text\",\n },\n ],\n displayName: \"Show as\",\n defaultValueHint: \"checkbox\",\n hidden: (ps, ctx, { item }) => item.dataType !== \"boolean\",\n },\n dateStyle: {\n displayName: \"Date style\",\n type: \"choice\",\n options: [\n {\n value: \"none\",\n label: \"None (don't display date)\",\n },\n {\n value: \"short\",\n label: \"Short (like 12/25/2023)\",\n },\n {\n value: \"medium\",\n label: \"Medium (like Dec 25, 2023)\",\n },\n {\n value: \"long\",\n label: \"Long (like December 25, 2023)\",\n },\n {\n value: \"full\",\n label: \"Full (like Monday, December 25, 2023)\",\n },\n ],\n defaultValueHint: DEFAULT_DATETIME_SETTINGS.dateStyle,\n hidden: (ps, ctx, { item }) => item.dataType !== \"datetime\",\n },\n timeStyle: {\n displayName: \"Time style\",\n type: \"choice\",\n options: [\n {\n value: \"none\",\n label: \"None (don't display time)\",\n },\n {\n value: \"short\",\n label: \"Short (like 4:00 PM)\",\n },\n {\n value: \"medium\",\n label: \"Medium (like 4:00:00 PM)\",\n },\n {\n value: \"long\",\n label: \"Long (like 4:00:00 PM PST)\",\n },\n {\n value: \"full\",\n label: \"Full (like 4:00:00 PM Pacific Standard Time)\",\n },\n ],\n defaultValueHint: DEFAULT_DATETIME_SETTINGS.timeStyle,\n hidden: (ps, ctx, { item }) => item.dataType !== \"datetime\",\n },\n hour12: {\n displayName: \"Use AM/PM?\",\n description: \"Whether to use AM/PM or 24-hour clock\",\n type: \"boolean\",\n defaultValueHint: DEFAULT_DATETIME_SETTINGS.hour12,\n hidden: (ps, ctx, { item }) => item.dataType !== \"datetime\",\n },\n numeric: {\n type: \"choice\",\n displayName: \"Use numbers?\",\n options: [\n { value: \"always\", label: \"Always use numbers\" },\n {\n value: \"auto\",\n label: \"Use words like 'Yesterday' or 'Tomorrow'\",\n },\n ],\n defaultValueHint: DEFAULT_RELATIVE_DATETIME_SETTINGS.numeric,\n hidden: (ps, ctx, { item }) =>\n item.dataType !== \"relative-datetime\",\n },\n unit: {\n type: \"choice\",\n displayName: \"Time unit\",\n options: [\n {\n value: \"second\",\n label: \"Seconds\",\n },\n {\n value: \"minute\",\n label: \"Minutes\",\n },\n {\n value: \"hour\",\n label: \"Hours\",\n },\n {\n value: \"day\",\n label: \"Days\",\n },\n {\n value: \"week\",\n label: \"Weeks\",\n },\n {\n value: \"month\",\n label: \"Months\",\n },\n {\n value: \"year\",\n label: \"Years\",\n },\n ],\n defaultValueHint: DEFAULT_RELATIVE_DATETIME_SETTINGS.unit,\n hidden: (ps, ctx, { item }) =>\n item.dataType !== \"relative-datetime\",\n },\n }\n : {}),\n ...opts.fieldTypes,\n };\n}\n\nfunction getDefaultValueHint<ColumnConfig extends BaseColumnConfig>(\n field: keyof ColumnConfig\n) {\n return (\n _props: any,\n contextData: ControlContextData<ColumnConfig> | null,\n { item }: any\n ): any => {\n if (item?.fieldId) {\n const fieldSetting = contextData?.mergedFields.find(\n (f) => f.fieldId === item.fieldId\n );\n return fieldSetting?.[field];\n }\n return undefined;\n };\n}\n\nconst rowDataType = (displayName: string, control?: any) =>\n ({\n type: \"function\" as any,\n displayName,\n control,\n argNames: [\"currentItem\", \"currentValue\"],\n argValues: (_props: any, ctx: any, { item }: any) => {\n const row = ctx?.data?.[0];\n const cell = item.fieldId ? row?.[item.fieldId] : undefined;\n return [row, cell];\n },\n } as any);\n\nexport function buildFieldsPropType<\n ColumnConfig extends BaseColumnConfig,\n Props extends FieldfulProps<ColumnConfig>\n>({\n advanced,\n displayName,\n minimalValue = (_props, contextData) => contextData?.minimalFullLengthFields,\n ...opts\n}: {\n advanced?: boolean;\n displayName?: string;\n minimalValue?: ContextDependentConfig<Props, any>;\n} & FieldSubpropsOpts<ColumnConfig>): PropType<Props> {\n return {\n type: \"array\",\n advanced,\n displayName,\n hidden: (ps) => !ps.data,\n unstable__keyFunc: (x) => x.key,\n unstable__minimalValue: minimalValue,\n unstable__canDelete: (ps, _props, ctx, { item }) => {\n if (opts.canChangeField) {\n return true;\n }\n if (!ctx?.schema) {\n // still loading...\n return false;\n }\n if (\n item.fieldId &&\n ctx.schema.fields.some((f) => f.id === item.fieldId)\n ) {\n return false;\n }\n return true;\n },\n itemType: {\n type: \"object\",\n nameFunc: (_item: any) => {\n // Prefer to show the field ID when available, since there's no other indication what field you're edtiing if you relabeled it.\n return _item.fieldId || _item.title || \"Custom value\";\n },\n fields: getFieldSubprops(opts),\n },\n };\n}\n","import { parseDate } from \"@plasmicpkgs/luxon-parser\";\nimport { Checkbox, Switch } from \"antd\";\nimport React from \"react\";\nimport {\n BaseColumnConfig,\n BooleanSettings,\n DateTimeSettings,\n DATETIME_TYPES,\n DEFAULT_BOOLEAN_SETTINGS,\n DEFAULT_CURRENCY_SETTINGS,\n DEFAULT_DATETIME_SETTINGS,\n DEFAULT_RELATIVE_DATETIME_SETTINGS,\n NumberSettings,\n NUMBER_TYPES,\n RelativeDateTimeSettings,\n} from \"./field-mappings\";\nimport { isOneOf, maybe } from \"./utils\";\n\nexport function maybeRenderValue(\n record: any,\n cconfig: BaseColumnConfig | undefined\n) {\n return cconfig ? renderValue(record, cconfig) : undefined;\n}\n\nexport function multiRenderValue(\n record: any,\n cconfigs: BaseColumnConfig[] | undefined\n) {\n return cconfigs\n ?.flatMap((cc) =>\n cc.isHidden ? [] : [` • `, <>{renderValue(record, cc)}</>]\n )\n .slice(1);\n}\n\nexport function maybeRenderString(\n record: any,\n cconfig: BaseColumnConfig | undefined\n) {\n return cconfig && !cconfig.isHidden\n ? maybe(getFieldValue(record, cconfig), asString)\n : undefined;\n}\n\nfunction getFieldValue(record: any, cconfig: BaseColumnConfig) {\n let value = cconfig.fieldId ? record[cconfig.fieldId] : undefined;\n\n if (cconfig.expr) {\n value = cconfig.expr(record, value);\n }\n\n return value;\n}\n\nexport function getFieldAggregateValue(\n record: any,\n cconfigs: BaseColumnConfig[] | undefined,\n separator = \", \"\n) {\n if (!cconfigs?.length) return undefined;\n\n return cconfigs?.length\n ? cconfigs.map((item) => getFieldValue(record, item)).join(separator)\n : undefined;\n}\n\nexport function renderValue(record: any, cconfig: BaseColumnConfig) {\n const value = getFieldValue(record, cconfig);\n\n if (value == null) {\n return \"\";\n }\n\n if (cconfig.dataType === \"auto\") {\n return renderAuto(value);\n } else {\n const coerced = coerceValue(value, cconfig.dataType);\n if (\n isOneOf(cconfig.dataType, NUMBER_TYPES) &&\n typeof coerced === \"number\"\n ) {\n return renderNumber(coerced, cconfig as NumberSettings);\n } else if (cconfig.dataType === \"boolean\" && typeof coerced === \"boolean\") {\n return renderBoolean(coerced, cconfig);\n } else if (cconfig.dataType === \"datetime\" && coerced instanceof Date) {\n return renderDate(coerced, cconfig);\n } else if (\n cconfig.dataType === \"relative-datetime\" &&\n coerced instanceof Date\n ) {\n return renderRelativeDate(coerced, cconfig);\n }\n return asString(value);\n }\n}\n\nfunction renderAuto(value: unknown): React.ReactNode {\n if (typeof value === \"number\") {\n return renderNumber(value, { dataType: \"number\" });\n } else if (typeof value === \"boolean\") {\n return renderBoolean(value, DEFAULT_BOOLEAN_SETTINGS);\n } else if (value instanceof Date) {\n return renderDate(value, DEFAULT_DATETIME_SETTINGS);\n } else {\n const coerced = tryCoerceAuto(value);\n if (coerced === CANNOT_COERCE) {\n return asString(value);\n } else {\n return renderAuto(coerced);\n }\n }\n}\n\nfunction tryCoerceAuto(value: unknown) {\n for (const dataType of [\n \"number\",\n \"datetime\",\n ] as BaseColumnConfig[\"dataType\"][]) {\n const coerced = coerceValue(value, dataType);\n if (coerced !== CANNOT_COERCE) {\n return coerced;\n }\n }\n return CANNOT_COERCE;\n}\n\nfunction renderNumber(value: number, cconfig: NumberSettings) {\n if (cconfig.dataType === \"number\") {\n return new Intl.NumberFormat(cconfig.locale, cconfig).format(value);\n } else if (cconfig.dataType === \"percent\") {\n return new Intl.NumberFormat(cconfig.locale, {\n ...cconfig,\n style: \"percent\",\n }).format(value);\n } else if (cconfig.dataType === \"currency\") {\n return new Intl.NumberFormat(cconfig.locale, {\n ...DEFAULT_CURRENCY_SETTINGS,\n ...cconfig,\n style: \"currency\",\n }).format(value);\n } else {\n throw new Error(`Unexpected dataType ${(cconfig as any).dataType}`);\n }\n}\n\nfunction renderDate(value: Date, cconfig: DateTimeSettings) {\n const opts = {\n ...DEFAULT_DATETIME_SETTINGS,\n ...cconfig,\n };\n if (opts.dateStyle === \"none\") {\n delete opts[\"dateStyle\"];\n }\n if (opts.timeStyle === \"none\") {\n delete opts[\"timeStyle\"];\n }\n return new Intl.DateTimeFormat(cconfig.locale, opts as any).format(value);\n}\n\nconst SECOND_MS = 1000;\nconst MINUTE_MS = 60 * SECOND_MS;\nconst HOUR_MS = 60 * MINUTE_MS;\nconst DAY_MS = 24 * HOUR_MS;\nconst WEEK_MS = 7 * DAY_MS;\nconst UNIT_TO_MS = {\n second: SECOND_MS,\n minute: MINUTE_MS,\n hour: HOUR_MS,\n day: DAY_MS,\n week: WEEK_MS,\n} as const;\nconst UNITS_BY_MS = Object.keys(UNIT_TO_MS) as (keyof typeof UNIT_TO_MS)[];\n\nfunction renderRelativeDate(value: Date, cconfig: RelativeDateTimeSettings) {\n const opts = {\n ...DEFAULT_RELATIVE_DATETIME_SETTINGS,\n ...cconfig,\n };\n const unit = cconfig.unit ?? \"day\";\n const formatter = new Intl.RelativeTimeFormat(cconfig.locale, opts);\n if (isOneOf(unit, UNITS_BY_MS)) {\n // for \"exact\" units, we can do it by just calcluating the difference\n // by ms\n const diff = value.getTime() - new Date().getTime();\n return formatter.format(Math.round(diff / UNIT_TO_MS[unit]), unit);\n } else {\n // otherwise we need to calculate by the specific unit\n if (unit === \"year\") {\n const diff = value.getFullYear() - new Date().getFullYear();\n return formatter.format(diff, unit);\n } else if (unit === \"month\") {\n const months = (d: Date) => d.getFullYear() * 12 + d.getMonth() + 1;\n const diff = months(value) - months(new Date());\n return formatter.format(diff, unit);\n } else {\n throw new Error(`Unexpected relative time unit ${unit}`);\n }\n }\n}\n\nfunction renderBoolean(value: boolean, cconfig: BooleanSettings) {\n const showAs = cconfig.showAs ?? DEFAULT_BOOLEAN_SETTINGS.showAs;\n if (showAs === \"checkbox\") {\n return <Checkbox checked={value} />;\n } else if (showAs === \"switch\") {\n return <Switch checked={value} />;\n } else {\n return value ? \"true\" : \"false\";\n }\n}\n\nconst CANNOT_COERCE = Symbol(\"plasmic-cannot-coerce\");\nfunction coerceValue(value: unknown, dataType: BaseColumnConfig[\"dataType\"]) {\n if (value == null) {\n return null;\n }\n try {\n if (isOneOf(dataType, NUMBER_TYPES)) {\n if (typeof value === \"number\") {\n return value;\n } else if (typeof value === \"string\") {\n const maybeNumber = +value;\n if (!isNaN(maybeNumber)) {\n return maybeNumber;\n }\n }\n } else if (isOneOf(dataType, DATETIME_TYPES)) {\n if (value instanceof Date) {\n return value;\n } else if (typeof value === \"number\") {\n return new Date(value);\n } else if (typeof value === \"string\") {\n // We don't want to simply use Date because it's too loose and varies across platforms.\n // It'll parse even things like \"42\" and \"iPhone 8\" as dates!\n //\n // After a bunch of research, I couldn't find a great simple way to recognize a bunch of common date formats.\n // Closest such resource I could find was this list of formats:\n // https://gist.github.com/brandonjp/ac259099ba95868c4826fc0f58f9e7b4\n // But for now it's probably better to stick to one of the \"standard\" computer formats rather than try to recognize various \"humanized\" date time formats.\n // We could try to expand this in the future.\n //\n // As far as libraries go:\n // dayjs has very buggy and long-neglected support for parsing.\n // Temporal doesn't handle general parsing by format.\n // Luxon is maintained and decent, though it doesn't accept a whole list of formats.\n //\n // Right now we also don't know anything about performance.\n const parsed = parseDate(value);\n return parsed ? parsed : CANNOT_COERCE;\n }\n } else if (dataType === \"boolean\") {\n if (value === true || value === false) {\n return value;\n } else if (typeof value === \"number\") {\n return value !== 0;\n } else if (typeof value === \"string\") {\n return value.toLowerCase() === \"true\";\n }\n } else if (dataType === \"string\") {\n return asString(value);\n } else if (dataType === \"auto\") {\n return value;\n }\n } catch (err) {\n // Ignore error; just fail to coerce\n }\n\n return CANNOT_COERCE;\n}\n\nfunction asString(value: unknown) {\n if (value == null) {\n return \"\";\n } else if (typeof value === \"string\") {\n return value;\n } else if (typeof value === \"object\") {\n if (\"toString\" in value && typeof value.toString === \"function\") {\n return value.toString();\n } else {\n return JSON.stringify(value);\n }\n } else {\n return `${value}`;\n }\n}\n","import {\n deriveFieldConfigs,\n NormalizedData,\n useNormalizedData,\n} from \"@plasmicapp/data-sources\";\nimport { Descriptions, Empty } from \"antd\";\nimport React from \"react\";\nimport { BaseColumnConfig, FieldfulProps } from \"../field-mappings\";\nimport { renderValue } from \"../formatting\";\nimport { mkShortId } from \"../utils\";\n\nexport interface RichDetailsProps extends FieldfulProps<DetailsColumnConfig> {\n size?: \"small\" | \"middle\" | \"default\";\n bordered?: boolean;\n layout?: \"horizontal\" | \"vertical\";\n column?: number;\n}\n\nexport function RichDetails(props: RichDetailsProps) {\n const {\n className,\n data: rawData,\n size,\n bordered,\n layout,\n column = 2,\n } = props;\n const data = useNormalizedData(rawData);\n const { columnDefinitions } = useColumnDefinitions(data, props);\n if (!data || !data.data?.[0]) {\n return <Empty className={className} image={Empty.PRESENTED_IMAGE_SIMPLE} />;\n }\n const row = data.data[0];\n return (\n <Descriptions\n className={className}\n size={size}\n bordered={bordered}\n layout={layout}\n column={{\n xs: 1,\n sm: 1,\n md: column,\n }}\n >\n {columnDefinitions.map((col) => (\n <Descriptions.Item label={col.title} key={col.key} span={col.span}>\n {col.render(row)}\n </Descriptions.Item>\n ))}\n </Descriptions>\n );\n}\n\nexport type DetailsColumnConfig = BaseColumnConfig & {\n span?: number;\n};\n\nfunction useColumnDefinitions(\n data: NormalizedData | undefined,\n props: React.ComponentProps<typeof RichDetails>\n) {\n const { fields, setControlContextData } = props;\n return React.useMemo(() => {\n const schema = data?.schema;\n if (!data || !schema) {\n return { normalized: [], columnDefinitions: [] };\n }\n const { mergedFields, minimalFullLengthFields } =\n deriveFieldConfigs<DetailsColumnConfig>(\n fields ?? [],\n schema,\n (field) => ({\n key: mkShortId(),\n isHidden: false,\n dataType: \"auto\" as const,\n ...(field && {\n key: field.id,\n fieldId: field.id,\n title: field.label || field.id,\n expr: (currentItem) => currentItem[field.id],\n }),\n })\n );\n setControlContextData?.({ ...data, mergedFields, minimalFullLengthFields });\n const normalized = mergedFields;\n const columnDefinitions = normalized\n .filter((cconfig) => !cconfig.isHidden)\n .map((cconfig, _columnIndex, _columnsArray) => {\n const columnDefinition = {\n dataIndex: cconfig.fieldId,\n title: cconfig.title,\n key: cconfig.key,\n span: cconfig.span,\n\n render: (record: any) => {\n return renderValue(record, cconfig);\n },\n };\n\n return columnDefinition;\n });\n return { normalized, columnDefinitions };\n }, [fields, data, setControlContextData]);\n}\n","import { buildFieldsPropType } from \"../field-mappings\";\nimport { Registerable, registerComponentHelper } from \"../utils\";\nimport {\n DetailsColumnConfig,\n RichDetails,\n RichDetailsProps,\n} from \"./RichDetails\";\n\nexport * from \"./RichDetails\";\n\nexport function registerRichDetails(loader?: Registerable) {\n registerComponentHelper(loader, RichDetails, {\n name: \"hostless-rich-details\",\n displayName: \"Data details\",\n defaultStyles: {\n width: \"stretch\",\n maxHeight: \"100%\",\n },\n props: {\n data: {\n type: \"dataSourceOpData\" as any,\n description: \"The data to display\",\n },\n fields: buildFieldsPropType<DetailsColumnConfig, RichDetailsProps>({\n fieldTypes: {\n span: {\n type: \"number\",\n displayName: \"Number of columns to span\",\n defaultValueHint: 1,\n },\n },\n }),\n layout: {\n displayName: \"Layout\",\n type: \"choice\",\n options: [\n { value: \"horizontal\", label: \"Horizontal\" },\n { value: \"vertical\", label: \"Vertical\" },\n ],\n defaultValueHint: \"horizontal\",\n },\n column: {\n displayName: \"Items per row\",\n type: \"number\",\n description: \"Number of items to display per row\",\n defaultValueHint: 2,\n },\n size: {\n displayName: \"Spacing\",\n type: \"choice\",\n options: [\n { value: \"small\", label: \"Small\" },\n { value: \"middle\", label: \"Medium\" },\n { value: \"default\", label: \"Large\" },\n ],\n defaultValueHint: \"default\",\n },\n bordered: {\n displayName: \"Show borders?\",\n type: \"boolean\",\n defaultValue: true,\n },\n },\n importPath: \"@plasmicpkgs/plasmic-rich-components/skinny/rich-details\",\n importName: \"RichDetails\",\n });\n}\n","import React from \"react\";\nimport { tinycolor } from \"@ctrl/tinycolor\";\n\nexport function useIsClient() {\n const [loaded, setLoaded] = React.useState(false);\n useIsomorphicLayoutEffect(() => {\n setLoaded(true);\n });\n return loaded;\n}\n\nconst isBrowser = typeof window !== \"undefined\";\nexport const useIsomorphicLayoutEffect = isBrowser\n ? React.useLayoutEffect\n : React.useEffect;\n\nexport function capitalize(text: string) {\n return text.slice(0, 1).toUpperCase() + text.slice(1);\n}\n\nexport function isLight(color: string) {\n const { r, g, b } = tinycolor(color).toRgb();\n return r * 0.299 + g * 0.587 + b * 0.114 > 186;\n}\n","import React from \"react\";\nexport const AnchorLink = React.forwardRef(function AnchorLink(\n props: React.ComponentProps<\"a\">,\n ref: React.Ref<HTMLAnchorElement>\n) {\n return <a {...props} ref={ref} />;\n});\n","import { LogoutOutlined } from \"@ant-design/icons\";\nimport type { MenuDataItem, ProLayoutProps } from \"@ant-design/pro-components\";\nimport { ProConfigProvider, ProLayout } from \"@ant-design/pro-components\";\nimport { useDataEnv, usePlasmicLink } from \"@plasmicapp/host\";\nimport { ConfigProvider, Dropdown, theme } from \"antd\";\nimport React, { ReactNode, useEffect, useRef, useState } from \"react\";\nimport { isLight, useIsClient } from \"../common\";\nimport { AnchorLink } from \"../widgets\";\n\nfunction omitUndefined(x: object) {\n return Object.fromEntries(\n Object.entries(x).filter(([k, v]) => v !== undefined)\n );\n}\n\ninterface NavMenuItem extends Omit<MenuDataItem, \"routes\"> {\n routes?: NavMenuItem[];\n}\n\nexport interface SimpleNavTheme {\n scheme?: \"default\" | \"light\" | \"dark\" | \"custom\" | \"primary\";\n customBgColor?: string;\n}\n\n/**\n * Filter items by condition, and add missing paths so that any added items are visible.\n */\nfunction processNavItems(navMenuItems: NavMenuItem[]): NavMenuItem[] {\n return navMenuItems\n .filter((item) => item.condition === undefined || item.condition)\n .map((item) => ({\n ...item,\n // We fill a default path because otherwise the item doesn't appear at all.\n path: item.path || \"/\",\n routes: item.routes ? processNavItems(item.routes) : undefined,\n }));\n}\n\nexport interface RichLayoutProps extends ProLayoutProps {\n navMenuItems?: NavMenuItem[];\n rootUrl?: string;\n actionsChildren?: ReactNode;\n footerChildren?: ReactNode;\n avatarLabel?: string;\n avatarImage?: string;\n showAvatarMenu?: boolean;\n simpleNavTheme?: SimpleNavTheme;\n logoElement?: ReactNode;\n}\n\n// width: 100% needed because parent is display: flex, which is needed for the min-height behavior.\nconst baseStyles = `\n.ant-pro-layout-bg-list {\n display: none;\n}\n.ant-pro-layout {\n display: flex;\n width: 100%;\n}\n.ant-pro-layout .ant-pro-layout-content {\n padding: 0;\n}\n`;\n\nexport function RichLayout({\n children,\n navMenuItems,\n rootUrl = \"/\",\n actionsChildren,\n footerChildren,\n avatarLabel,\n avatarImage,\n showAvatarMenu,\n className,\n simpleNavTheme,\n logo,\n logoElement,\n ...layoutProps\n}: RichLayoutProps) {\n const $ctx = useDataEnv();\n const ref = useRef<HTMLDivElement>(null);\n const isClient = useIsClient();\n const [pathname, setPathname] = useState<string | undefined>(undefined);\n const [openKeys, setOpenKeys] = useState<string[]>([]);\n const [ready, setReady] = useState(false);\n useEffect(() => {\n setTimeout(() => {\n setReady(true);\n }, 500);\n\n if (typeof location !== \"undefined\") {\n setPathname(location.pathname);\n }\n }, []);\n\n useEffect(() => {\n if (!ready) return;\n if (!ref.current) return;\n // open selected submenu (only opens the last one in the list!)\n const selectedSubmenus: string[] =\n (Array.from(\n ref.current.querySelectorAll(\n \"ul > li.ant-menu-submenu.ant-menu-submenu-selected > div\"\n )\n )\n .map((el) => el.getAttribute(\"data-menu-id\")?.split(\"/\").pop())\n .filter((i) => i)\n .map((i) => `/${i}`) as string[]) || [];\n setOpenKeys(selectedSubmenus);\n }, [ready]);\n\n // The usePlasmicLink function may be undefined, if host is not up to date\n const PlasmicLink = usePlasmicLink?.() ?? AnchorLink;\n const { token } = theme.useToken();\n const origTextColor = token.colorTextBase;\n function getNavBgColor(): string {\n const scheme = simpleNavTheme?.scheme ?? \"default\";\n switch (scheme) {\n case \"primary\":\n return token.colorPrimary;\n case \"dark\":\n // Ant default dark blue Menu color.\n return \"#011528\";\n case \"custom\":\n return simpleNavTheme?.customBgColor ?? token.colorBgBase;\n case \"light\":\n // Just use this sorta ugly gray if using 'light' scheme in 'dark' mode.\n // Otherwise using light scheme in light mode.\n return \"#fff\";\n case \"default\":\n return token.colorBgBase || \"#fff\";\n }\n }\n const navBgColor = getNavBgColor();\n // Dynamically determine whether we need to change the text to black/white or not, based on background color.\n // We don't want light-on-light or dark-on-dark, so if both isNavBgLight and isOrigTextLight are the same, then need to change.\n // If no need to change, we leave text color as is.\n const isNavBgLight = isLight(navBgColor);\n const isOrigTextLight = isLight(origTextColor);\n // Ant will interpret \"\" as defaulting to \"#fff\" for dark mode and \"#000\" in light mode.\n const navTextColor = isNavBgLight !== isOrigTextLight ? undefined : \"\";\n if (!isClient) {\n return null;\n }\n\n const layoutColorOverrides = isNavBgLight\n ? undefined\n : {\n colorBgCollapsedButton: navBgColor,\n colorTextCollapsedButtonHover: \"rgba(255,255,255,0.85)\",\n colorTextCollapsedButton: \"rgba(255,255,255,0.65)\",\n colorMenuBackground: navBgColor,\n colorBgMenuItemCollapsedHover: \"rgba(0,0,0,0.06)\",\n colorBgMenuItemCollapsedSelected: \"rgba(0,0,0,0.15)\",\n colorBgMenuItemCollapsedElevated: \"rgba(0,0,0,0.85)\",\n colorMenuItemDivider: \"rgba(255,255,255,0.15)\",\n colorBgMenuItemHover: \"rgba(0,0,0,0.06)\",\n colorBgMenuItemSelected: \"rgba(0,0,0,0.15)\",\n colorTextMenuSelected: \"#fff\",\n colorTextMenuItemHover: \"rgba(255,255,255,0.75)\",\n colorTextMenu: \"rgba(255,255,255,0.75)\",\n colorTextMenuSecondary: \"rgba(255,255,255,0.65)\",\n colorTextMenuTitle: \"rgba(255,255,255,0.95)\",\n colorTextMenuActive: \"rgba(255,255,255,0.95)\",\n colorTextSubMenuSelected: \"#fff\",\n };\n return (\n <div ref={ref} className={className} style={{ display: \"flex\" }}>\n {/* Remove the always-on fixed gradient background layer. */}\n <style>{baseStyles}</style>\n <ProLayout\n {...layoutProps}\n // This prevents setting a document title. Normally tries to set to either app title or page title (from routes meta).\n pageTitleRender={() => \"\"}\n logo={logo ?? logoElement}\n // Theme just the header. If you simply pass in navTheme=realDark, it affects all main content as well.\n //\n // What we're doing is telling Ant to use the dark mode algorithm. However, dark mode algorithm doesn't change\n // the seed tokens for colorTextBase and colorBgBase - it only fills in #fff and #000 for these if they are\n // unset (\"\"). So that's why further up we may be setting the text color to \"\".\n //\n // I think it doesn't matter too much what is the colorBgBase, since we are setting (Pro-specific) `tokens`\n // further down for actually setting the fill of the nav sections. What matters is the text color - if we're\n // showing a dark background, then we want the text to be white.\n //\n // We could specify darkAlgorithm to ConfigProvider, but IIRC Pro might be setting some of its own tokens\n // based on whether dark is being specified to the ProConfigProvider. So that's why we need that.\n //\n // ProConfigProvider does first read/inherit the theme/tokens from the surrounding ConfigProvider.\n headerRender={(_props, defaultDom) => (\n <ConfigProvider\n theme={{ token: omitUndefined({ colorTextBase: navTextColor }) }}\n >\n <ProConfigProvider dark={!isNavBgLight}>\n {defaultDom}\n </ProConfigProvider>\n </ConfigProvider>\n )}\n token={{\n header: omitUndefined({\n colorBgHeader: navBgColor,\n ...layoutColorOverrides,\n }),\n // Ideally, we'd do something similar to headerRender above, and just specify general dark mode to specify\n // whether all components/text should be light.\n // But for some reason it doesn't work, causing the bg color to be ignored (just the default dark Menu color),\n // *and* the text is just dark as well.\n // Haven't yet been able to unravel the pro components code to figure out the proper way to do this, so just\n // bluntly specifying tokens here, as recommended in some GitHub issue.\n sider: omitUndefined({\n colorMenuBackground: navBgColor,\n ...layoutColorOverrides,\n }),\n }}\n // Tweak defaults. ProLayout is janky and has terrible docs!\n layout={layoutProps.layout ?? \"top\"}\n fixedHeader={layoutProps.fixedHeader ?? false}\n fixSiderbar={\n // Doesn't stretch full height if you set this to false and you're in mix mode.\n layoutProps.layout === \"mix\"\n ? undefined\n : layoutProps.fixSiderbar ?? false\n }\n // This is always needed if you want layout mix to have effect and look any different from layout side - not clear why this should ever be false.\n splitMenus={layoutProps.layout === \"mix\"}\n route={{\n path: rootUrl,\n routes: navMenuItems ? processNavItems(navMenuItems) : undefined,\n }}\n location={{\n pathname,\n }}\n menu={{\n // collapsedShowGroupTitle: true,\n defaultOpenAll: false,\n // hideMenuWhenCollapsed: true,\n }}\n avatarProps={\n showAvatarMenu\n ? {\n src: avatarImage,\n size: \"small\",\n title: avatarLabel,\n render: (_props, dom) => {\n return (\n <Dropdown\n menu={{\n items: [\n {\n key: \"logout\",\n icon: <LogoutOutlined />,\n label: \"Sign out\",\n },\n ],\n }}\n >\n {dom}\n </Dropdown>\n );\n },\n }\n : undefined\n }\n actionsRender={(_props) => {\n return [actionsChildren];\n }}\n menuFooterRender={(props) => {\n if (props?.collapsed) return undefined;\n return footerChildren;\n }}\n onMenuHeaderClick={(e) => console.log(e)}\n openKeys={openKeys}\n onOpenChange={(keys) =>\n keys === false || !ready ? [] : setOpenKeys(keys)\n }\n selectedKeys={[$ctx?.pagePath]}\n menuItemRender={(item, dom) => (\n <PlasmicLink href={item.path}>{dom}</PlasmicLink>\n )}\n headerTitleRender={(logoEl, title, _) => {\n return (\n <PlasmicLink href={rootUrl}>\n {logoEl}\n {title}\n </PlasmicLink>\n );\n }}\n >\n {children}\n </ProLayout>\n </div>\n );\n}\n","import {\n ComponentMeta,\n JSONLikeType,\n} from \"@plasmicapp/host/registerComponent\";\nimport { capitalize } from \"../common\";\nimport { Registerable, registerComponentHelper } from \"../utils\";\nimport { RichLayout, RichLayoutProps } from \"./RichLayout\";\n\nexport * from \"./RichLayout\";\nexport default RichLayout;\n\nfunction generateNavMenuType(\n isNested: boolean,\n remainingDepth: number,\n displayName?: string,\n defaultValue?: any[]\n): object & JSONLikeType<any> {\n return {\n displayName: displayName ? displayName : \"Nested items\",\n type: \"array\",\n defaultValue,\n advanced: isNested,\n itemType: {\n type: \"object\",\n nameFunc: (item: any) =>\n item.name || (!displayName ? \"Unnamed nested item\" : \"Unnamed item\"),\n fields: {\n path: \"href\",\n name: \"string\",\n condition: {\n advanced: true,\n displayName: \"Show only if\",\n type: \"exprEditor\" as any,\n },\n ...(remainingDepth === 0\n ? {}\n : {\n routes: generateNavMenuType(true, remainingDepth - 1),\n }),\n },\n },\n } as const;\n}\n\nconst richLayoutMeta: ComponentMeta<RichLayoutProps> = {\n name: \"hostless-rich-layout\",\n displayName: \"Rich App Layout\",\n props: {\n children: {\n type: \"slot\",\n unstable__isMainContentSlot: true,\n },\n actionsChildren: {\n type: \"slot\",\n hidePlaceholder: true,\n },\n title: {\n displayName: \"Title\",\n type: \"string\",\n defaultValue: \"App title\",\n },\n logo: {\n displayName: \"Logo\",\n type: \"imageUrl\",\n hidden: (ps) => !ps.logo,\n },\n logoElement: {\n type: \"slot\",\n displayName: \"Logo\",\n defaultValue: {\n type: \"img\",\n src: \"https://static1.plasmic.app/fake-logo.svg\",\n },\n hidden: (ps) => !!ps.logo,\n },\n navMenuItems: generateNavMenuType(false, 2, \"Nav menu items\", [\n {\n path: \"/\",\n name: \"Home\",\n },\n ]),\n\n layout: {\n displayName: \"Layout\",\n type: \"choice\",\n options: [\"side\", \"top\", \"mix\"].map((value) => ({\n value,\n label: capitalize(value),\n })),\n defaultValueHint: \"top\",\n },\n\n simpleNavTheme: {\n displayName: \"Theme\",\n type: \"object\",\n fields: {\n scheme: {\n type: \"choice\",\n options: [\"default\", \"primary\", \"light\", \"dark\", \"custom\"].map(\n (v) => ({\n label: capitalize(v),\n value: v,\n })\n ),\n defaultValueHint: \"default\",\n },\n customBgColor: {\n type: \"color\",\n displayName: \"Custom color\",\n hidden: (props) => !(props.simpleNavTheme?.scheme === \"custom\"),\n defaultValue: \"#D73B58\",\n },\n },\n },\n\n // Advanced, show later\n /*\n siderMenuType: {\n displayName: \"Sidebar mode\",\n type: \"choice\",\n options: [\"sub\", \"group\"].map((value) => ({\n value,\n label: capitalize(value),\n })),\n defaultValue: \"sub\",\n },\n contentWidth: {\n displayName: \"Content width\",\n type: \"choice\",\n options: [\"Fluid\", \"Fixed\"],\n defaultValueHint: \"Fluid\",\n },\n */\n fixedHeader: {\n displayName: \"Sticky header\",\n type: \"boolean\",\n hidden: (ps) => (ps.layout ?? \"top\") !== \"top\",\n defaultValueHint: false,\n },\n fixSiderbar: {\n displayName: \"Sticky sidebar\",\n type: \"boolean\",\n hidden: (ps) => (ps.layout ?? \"top\") !== \"side\",\n defaultValueHint: false,\n },\n /*\n showAvatarMenu: {\n displayName: \"Show avatar\",\n type: \"boolean\",\n defaultValue: true,\n },\n avatarLabel: {\n displayName: \"Avatar label\",\n type: \"string\",\n defaultValue: \"User Name\",\n },\n avatarImage: {\n displayName: \"Avatar image\",\n type: \"imageUrl\",\n defaultValue:\n \"https://gw.alipayobjects.com/zos/antfincdn/efFD%24IOql2/weixintupian_20170331104822.jpg\",\n },\n */\n menu: {\n displayName: \"Menu\",\n type: \"object\",\n fields: {\n defaultOpenAll: {\n displayName: \"Default open all\",\n type: \"boolean\",\n },\n hideMenuWhenCollapsed: {\n // displayName: \"\",\n type: \"boolean\",\n },\n },\n },\n },\n\n defaultStyles: {\n width: \"full-bleed\",\n height: \"stretch\",\n minHeight: \"100vh\",\n },\n\n importName: \"RichLayout\",\n importPath: \"@plasmicpkgs/plasmic-rich-components/skinny/rich-layout\",\n};\n\nexport function registerRichLayout(loader?: Registerable) {\n registerComponentHelper(loader, RichLayout, richLayoutMeta);\n}\n","import { PropType } from \"@plasmicapp/host/registerComponent\";\nimport {\n BaseColumnConfig,\n FieldfulProps,\n buildFieldsPropType,\n getFieldSubprops,\n} from \"./field-mappings\";\nimport { capitalize } from \"./common\";\nimport { maybe } from \"./utils\";\n\nexport function roleProp<P extends FieldfulProps<any>>({\n role,\n singular = false,\n advanced = false,\n displayName,\n}: {\n role: string;\n singular?: boolean;\n advanced?: boolean;\n displayName?: string;\n}): PropType<P> {\n return singular\n ? {\n type: \"object\",\n displayName: displayName || `${capitalize(role)} field`,\n advanced,\n hidden: (ps) => !ps.data,\n nameFunc: (item) =>\n maybe(item, (i) =>\n i.isHidden ? \"Hidden\" : i.fieldId || \"Custom value\"\n ),\n fields: getFieldSubprops({\n canChangeField: true,\n noTitle: true,\n }),\n defaultValueHint: (_props, contextData) =>\n (contextData?.minimalFullLengthFields ?? []).find(\n (f) => f.role === role\n ),\n }\n : buildFieldsPropType<BaseColumnConfig, P>({\n displayName: displayName || `${capitalize(role)} fields`,\n advanced,\n noTitle: true,\n canChangeField: true,\n minimalValue: (_props, contextData) =>\n (contextData?.minimalFullLengthFields ?? []).filter(\n (f) => f.role === role\n ),\n });\n}\n\nexport function dataProp<T>(): PropType<T> {\n return {\n type: \"dataSourceOpData\" as any,\n description: \"The data to display\",\n };\n}\n\nexport function commonProps<T>(): Record<string, PropType<T>> {\n return {\n pagination: {\n type: \"boolean\",\n advanced: true,\n defaultValueHint: true,\n },\n\n pageSize: {\n type: \"number\",\n defaultValueHint: 10,\n advanced: true,\n },\n\n hideSearch: {\n type: \"boolean\",\n description: \"Hides the search toolbar\",\n advanced: true,\n },\n };\n}\n\nexport function rowActionsProp<T>(): PropType<T> {\n return {\n type: \"array\",\n displayName: \"Row actions\",\n advanced: true,\n itemType: {\n type: \"object\",\n nameFunc: (item) => item.label,\n fields: {\n type: {\n type: \"choice\",\n options: [\"item\", \"menu\"],\n defaultValue: \"item\",\n },\n label: {\n type: \"string\",\n displayName: \"Action label\",\n },\n children: {\n type: \"array\",\n displayName: \"Menu items\",\n itemType: {\n type: \"object\",\n fields: {\n label: {\n type: \"string\",\n displayName: \"Action label\",\n },\n onClick: {\n type: \"eventHandler\",\n argTypes: [\n { name: \"rowKey\", type: \"string\" },\n { name: \"row\", type: \"object\" },\n ],\n },\n },\n },\n hidden: (_ps, _ctx, { item }) => item.type !== \"menu\",\n },\n onClick: {\n type: \"eventHandler\",\n displayName: \"Action\",\n argTypes: [\n { name: \"rowKey\", type: \"string\" },\n { name: \"row\", type: \"object\" },\n ],\n hidden: (_ps, _ctx, { item }) => item.type !== \"item\",\n },\n },\n },\n };\n}\n\nexport function onRowClickProp<T>(): PropType<T> {\n return {\n type: \"eventHandler\",\n displayName: \"On row clicked\",\n argTypes: [\n { name: \"rowKey\", type: \"string\" },\n { name: \"row\", type: \"object\" },\n { name: \"event\", type: \"object\" },\n ],\n };\n}\n","import { NormalizedData, QueryResult } from \"@plasmicapp/data-sources\";\nimport { Dropdown } from \"antd\";\nimport type { GetRowKey, SorterResult } from \"antd/es/table/interface\";\nimport fastStringify from \"fast-stringify\";\nimport React, { Key, useState } from \"react\";\nimport { BaseColumnConfig } from \"./field-mappings\";\nimport { ensure } from \"./utils\";\n\nexport function useSortedFilteredData(\n data: NormalizedData | undefined,\n columns: BaseColumnConfig[]\n) {\n const [search, setSearch] = useState(\"\");\n const [sortState, setSortState] = useState<\n undefined | { sorter: SorterResult<Record<string, any>> }\n >(undefined);\n const finalData = React.useMemo(() => {\n const filtered = data?.data?.filter((row) =>\n fastStringify(Object.values(row))\n .toLowerCase()\n .includes(search.toLowerCase())\n );\n const sorted = sortState?.sorter.column\n ? // We use .sort() rather than sortBy to use localeCompare\n (() => {\n const cconfig = columns.find(\n (cc) => cc.key === sortState?.sorter.column?.key\n )!;\n const expr = cconfig.expr ?? ((x) => x);\n return (filtered ?? []).sort((aa, bb) => {\n const a =\n expr(aa, cconfig.fieldId ? aa?.[cconfig.fieldId] : null) ??\n null,\n b =\n expr(bb, cconfig.fieldId ? bb?.[cconfig.fieldId] : null) ??\n null;\n // Default nil to '' here because A < null < z which is weird.\n return typeof a === \"string\"\n ? a.localeCompare(b ?? \"\")\n : typeof b === \"string\"\n ? -b.localeCompare(a ?? \"\")\n : a - b;\n });\n })()\n : filtered;\n const reversed =\n sortState?.sorter.order === \"descend\" ? sorted?.reverse() : sorted;\n return reversed;\n }, [data, columns, sortState, search]);\n\n return {\n finalData,\n search,\n setSearch,\n setSortState,\n };\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\nexport type RowAction = RowActionItem | RowActionMenu;\n\nexport function tagDataArray(xs: object[]) {\n return xs.map((x: object, i) => ({ ...x, __tag: i + 1 }));\n}\n\nexport function getTag(x: unknown) {\n return (x as any).__tag;\n}\n\n/**\n * Don't want to simply return undefined, we prefer always having *some* row key so that users can always (say) click on things without needing to explicitly set a row key.\n */\nexport function deriveRowKey(\n _data: QueryResult | undefined,\n rowKey: string | GetRowKey<Record<any, any>> | undefined\n) {\n if (rowKey) {\n return rowKey;\n }\n // Use the index by default.\n return (x: unknown) => {\n return ensure(getTag(x));\n };\n}\n\nexport function deriveKeyOfRow(\n row: any,\n rowKey: string | GetRowKey<any> | undefined\n) {\n if (typeof rowKey === \"function\") {\n return rowKey(row);\n } else if (typeof rowKey === \"string\") {\n return row[rowKey];\n } else {\n return undefined;\n }\n}\n\nexport function renderActions(\n rowActions: RowAction[],\n row: any,\n data: NormalizedData | undefined,\n rowKey: string | ((record: any, index?: number) => Key) | undefined\n) {\n return rowActions.map((_action) => {\n if (_action.type === \"item\") {\n return (\n <a\n key={_action.label}\n style={{\n whiteSpace: \"nowrap\",\n }}\n onClick={() =>\n _action.onClick?.(\n deriveKeyOfRow(row, deriveRowKey(data, rowKey)),\n row\n )\n }\n >\n {_action.label}\n </a>\n );\n } else {\n return (\n <Dropdown\n key={_action.label}\n menu={{\n items: (_action.children ?? []).map((child) => ({\n key: child.label,\n label: child.label,\n onClick: () =>\n child.onClick?.(\n deriveKeyOfRow(row, deriveRowKey(data, rowKey)),\n row\n ),\n })),\n }}\n >\n <a\n href={\"javascript: void 0\"}\n style={{\n whiteSpace: \"nowrap\",\n }}\n >\n {_action.label}\n </a>\n </Dropdown>\n );\n }\n });\n}\n","import { EllipsisOutlined, PlusOutlined } from \"@ant-design/icons\";\nimport { ActionType, ProColumns, ProTable } from \"@ant-design/pro-components\";\nimport {\n deriveFieldConfigs,\n NormalizedData,\n useNormalizedData,\n} from \"@plasmicapp/data-sources\";\nimport { Button, Dropdown } from \"antd\";\nimport type { SizeType } from \"antd/es/config-provider/SizeContext\";\nimport type { GetRowKey } from \"antd/es/table/interface\";\nimport { createObjectCsvStringifier } from \"csv-writer-browser\";\nimport fastStringify from \"fast-stringify\";\nimport React, { ReactNode, useMemo, useRef } from \"react\";\nimport { useIsClient } from \"../common\";\nimport {\n BaseColumnConfig,\n deriveValueType,\n FieldfulProps,\n RowFunc,\n} from \"../field-mappings\";\nimport {\n deriveKeyOfRow,\n deriveRowKey,\n renderActions,\n RowAction,\n tagDataArray,\n useSortedFilteredData,\n} from \"../field-react-utils\";\nimport { renderValue } from \"../formatting\";\nimport { ErrorBoundary, isInteractable, mkShortId } 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\nexport interface RichTableProps extends FieldfulProps<TableColumnConfig> {\n defaultSize?: SizeType;\n pagination?: boolean;\n\n canSelectRows?: \"none\" | \"click\" | \"single\" | \"multiple\";\n\n selectedRowKey?: string;\n selectedRowKeys?: string[];\n onRowSelectionChanged?: (rowKeys: string[], rows: any[]) => void;\n onRowClick?: (rowKey: string, row: any, event: React.MouseEvent) => void;\n\n rowKey?: string | GetRowKey<any>;\n rowActions?: RowAction[];\n\n title?: ReactNode;\n\n addHref?: string;\n\n actions?: Action[];\n customActionChildren?: ReactNode;\n\n pageSize?: number;\n\n hideSearch?: boolean;\n hideDensity?: boolean;\n hideColumnPicker?: boolean;\n hideExports?: boolean;\n hideSelectionBar?: boolean;\n\n scopeClassName?: string;\n themeResetClassName?: string;\n}\n\n// In this code, ColumnConfigs are Plasmic, while ColumnDefinitions are Ant.\nexport function RichTable(props: RichTableProps) {\n const {\n className,\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 // children,\n pagination = true,\n defaultSize,\n title,\n addHref,\n pageSize = 10,\n hideSearch,\n hideDensity = true,\n hideColumnPicker,\n hideExports,\n hideSelectionBar = true,\n rowKey,\n scopeClassName,\n } = props;\n const isClient = useIsClient();\n\n const normalizedData = useNormalizedData(isClient ? rawData : []);\n\n const data = useMemo(() => {\n if (!normalizedData?.data) {\n return normalizedData;\n }\n return { ...normalizedData, data: tagDataArray(normalizedData.data) };\n }, [normalizedData]);\n\n const { columnDefinitions, normalized } = useColumnDefinitions(data, props);\n\n const actionRef = useRef<ActionType>();\n\n const { finalData, search, setSearch, setSortState } = useSortedFilteredData(\n data,\n normalized\n );\n\n const rowSelectionProps = useRowSelectionProps(data, props);\n\n if (!isClient) {\n return null;\n }\n\n return (\n <div className={`${className} ${scopeClassName ?? \"\"}`}>\n <ErrorBoundary canvasEnvId={(props as any)[\"data-plasmic-canvas-envs\"]}>\n <ProTable\n ErrorBoundary={false}\n rowClassName={\n props.onRowClick || props.canSelectRows === \"click\"\n ? \"plasmic-table-row-clickable\"\n : undefined\n }\n actionRef={actionRef}\n columns={columnDefinitions}\n onChange={(_pagination, _filters, sorter, _extra) => {\n setSortState({ sorter: sorter as any });\n }}\n style={{\n width: \"100%\",\n }}\n cardProps={{\n ghost: true,\n }}\n {...rowSelectionProps}\n dataSource={finalData}\n rowKey={deriveRowKey(data, rowKey)}\n defaultSize={defaultSize}\n editable={{ type: \"multiple\" }}\n search={false}\n options={{\n setting: hideColumnPicker\n ? false\n : {\n listsHeight: 400,\n },\n reload: false,\n density: !hideDensity,\n }}\n pagination={\n pagination\n ? {\n pageSize,\n onChange: (page) => console.log(page),\n showSizeChanger: false,\n }\n : false\n }\n dateFormatter=\"string\"\n headerTitle={title}\n toolbar={{\n search: !hideSearch\n ? {\n value: search,\n onChange: (e) => setSearch(e.target.value),\n onSearch: () => {\n return;\n },\n placeholder: \"Search\",\n }\n : undefined,\n }}\n toolBarRender={() =>\n [\n addHref && (\n <Button\n key=\"button\"\n icon={<PlusOutlined />}\n type=\"primary\"\n href={addHref}\n >\n Add\n </Button>\n ),\n !hideExports && <ExportMenu data={data} />,\n ].filter((x) => !!x)\n }\n />\n </ErrorBoundary>\n {/*Always hide the weird pin left/right buttons for now, which also have render layout issues*/}\n <style\n dangerouslySetInnerHTML={{\n __html: `\n :where(.css-dev-only-do-not-override-1p704s4).ant-pro-table-column-setting-overlay .ant-tree-treenode:hover .ant-pro-table-column-setting-list-item-option {\n display: none;\n }\n .plasmic-table-row-clickable {\n cursor: pointer;\n }\n .ant-pro-table-list-toolbar-right {\n flex-wrap: initial;\n flex-shrink: 0;\n }\n .ant-pro-table, .ant-pro-table > .ant-pro-card, .ant-pro-table .ant-table-wrapper, .ant-pro-table .ant-spin-nested-loading, .ant-pro-table .ant-table-container {\n height: 100%;\n }\n .ant-pro-table .ant-spin-container {\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n .ant-pro-table .ant-table {\n flex-grow: 1;\n min-height: 0;\n }\n .ant-pro-table .ant-pagination {\n flex-shrink: 0;\n }\n .ant-pro-table .ant-table-content {\n overflow: auto !important;\n height: 100%;\n }\n .ant-pro-table > .ant-pro-card > .ant-pro-card-body {\n display: flex;\n flex-direction: column;\n }\n .ant-pro-table .ant-table-wrapper {\n flex-grow: 1;\n min-height: 0;\n }\n .ant-pro-table .ant-table-thead > tr > th, .ant-pro-table .ant-table-thead > tr > td.ant-table-selection-column {\n position: sticky;\n top: 0;\n z-index: 2;\n }\n .ant-pro-table .ant-table-thead > tr > th.ant-table-cell-fix-left, .ant-pro-table .ant-table-thead > tr > th.ant-table-cell-fix-right {\n z-index: 3;\n }\n .ant-pro-table .ant-table-tbody > tr > td {\n z-index: 0;\n }\n .ant-pro-table .ant-table-tbody > tr > td.ant-table-cell-fix-left,.ant-pro-table .ant-table-tbody > tr > td.ant-table-cell-fix-right {\n z-index: 1;\n }\n ${\n scopeClassName && hideSelectionBar\n ? `\n .${scopeClassName} .ant-pro-table-alert {\n display: none;\n }\n `\n : \"\"\n }\n `,\n }}\n />\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 = (): TableColumnConfig =>\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 } as const);\n\nexport type TableColumnConfig = BaseColumnConfig & {\n isEditableExpr: RowFunc<boolean>;\n disableSorting: boolean;\n sortByExpr?: RowFunc<any>;\n formatting: StyleConfig;\n};\n\nfunction useColumnDefinitions(\n data: NormalizedData | undefined,\n props: React.ComponentProps<typeof RichTable>\n) {\n const { fields, setControlContextData, rowActions } = props;\n return React.useMemo(() => {\n const schema = data?.schema;\n if (!data || !schema) {\n return { normalized: [], columnDefinitions: [] };\n }\n const { mergedFields, minimalFullLengthFields } =\n deriveFieldConfigs<TableColumnConfig>(fields ?? [], schema, (field) => ({\n ...defaultColumnConfig(),\n ...(field && {\n key: field.id,\n fieldId: field.id,\n title: field.label || field.id,\n expr: (currentItem) => currentItem[field.id],\n }),\n }));\n setControlContextData?.({ ...data, mergedFields, minimalFullLengthFields });\n const normalized = mergedFields;\n const columnDefinitions: ProColumns<any, any>[] = normalized\n .filter((cconfig) => !cconfig.isHidden)\n .map((cconfig, _columnIndex, _columnsArray) => {\n const columnDefinition: ProColumns<any, any> = {\n dataIndex: cconfig.fieldId,\n title: cconfig.title,\n // dataIndex: cconfig,\n key: cconfig.key,\n valueType: deriveValueType(cconfig),\n\n // To come later\n readonly: false,\n sorter: !cconfig.disableSorting,\n copyable: false,\n ellipsis: false,\n tip: undefined,\n formItemProps: {\n rules: [],\n },\n disable: false,\n valueEnum: undefined,\n search: undefined,\n hideInSearch: false,\n renderFormItem: (_, { defaultRender }) => {\n return defaultRender(_);\n },\n\n render: (_value: any, record: any, _rowIndex: any) => {\n return renderValue(record, cconfig);\n },\n };\n\n return columnDefinition;\n });\n const rowKey = props.rowKey;\n if (rowActions && rowActions.length > 0) {\n columnDefinitions.push({\n title: \"Actions\",\n valueType: \"option\",\n key: \"__plasmicActions\",\n fixed: \"right\",\n className: props.themeResetClassName,\n render: (_text, row) => [\n ...renderActions(rowActions, row, data, rowKey),\n ],\n });\n }\n return { normalized, columnDefinitions };\n }, [fields, data, setControlContextData, rowActions]);\n}\n\nfunction useRowSelectionProps(\n data: NormalizedData | undefined,\n props: React.ComponentProps<typeof RichTable>\n): Partial<React.ComponentProps<typeof ProTable>> {\n const {\n canSelectRows,\n selectedRowKey,\n selectedRowKeys,\n onRowSelectionChanged,\n rowKey,\n onRowClick,\n } = props;\n const deriveSelectedRowKeys = () => {\n if (\n !canSelectRows ||\n canSelectRows === \"none\" ||\n !deriveRowKey(data, rowKey)\n ) {\n return [];\n }\n\n if (canSelectRows === \"multiple\") {\n return selectedRowKeys ?? [];\n } else if (selectedRowKey) {\n return [selectedRowKey];\n } else {\n return [];\n }\n };\n\n const rowSelection: React.ComponentProps<typeof ProTable>[\"rowSelection\"] =\n canSelectRows && canSelectRows !== \"none\"\n ? {\n type:\n canSelectRows === \"single\" || canSelectRows === \"click\"\n ? \"radio\"\n : \"checkbox\",\n selectedRowKeys: deriveSelectedRowKeys(),\n onChange: (rowKeys, rows) => {\n onRowSelectionChanged?.(rowKeys as string[], rows);\n },\n alwaysShowAlert: true,\n ...(canSelectRows === \"click\" && {\n renderCell: () => null,\n columnWidth: 0,\n columnTitle: null,\n hideSelectAll: true,\n }),\n }\n : undefined;\n return {\n rowSelection,\n onRow: (row) => ({\n onClick: (event) => {\n const key = deriveKeyOfRow(row, deriveRowKey(data, rowKey));\n if (key != null && !isInteractable(event.target as HTMLElement)) {\n if (canSelectRows === \"click\") {\n onRowSelectionChanged?.([key], [row]);\n }\n onRowClick?.(key, row, event);\n }\n },\n }),\n };\n}\n\nfunction ExportMenu(props: { data: NormalizedData | undefined }) {\n const { data } = props;\n\n return (\n <Dropdown\n key=\"menu\"\n menu={{\n items: [\n {\n label: \"Download as CSV\",\n key: \"csv\",\n onClick: async () => {\n const writer = createObjectCsvStringifier({\n header:\n data?.schema?.fields.map((f) => ({\n id: f.id,\n title: f.id,\n })) ?? [],\n });\n const dataStr =\n writer.getHeaderString() +\n writer.stringifyRecords(data?.data as any);\n\n // const dataStr = stringify(data?.data as any, {\n // columns:\n // tryGetSchema(data)?.fields.map((f) => f.id) ?? [],\n // header: true,\n // });\n\n const filename = \"data.csv\";\n\n // Adapted from https://stackoverflow.com/a/68771795\n const blob = new Blob([dataStr], {\n type: \"text/csv;charset=utf-8;\",\n });\n if ((navigator as any).msSaveBlob) {\n // In case of IE 10+\n (navigator as any).msSaveBlob(blob, filename);\n } else {\n const link = document.createElement(\"a\");\n if (link.download !== undefined) {\n // Browsers that support HTML5 download attribute\n const url = URL.createObjectURL(blob);\n link.setAttribute(\"href\", url);\n link.setAttribute(\"download\", filename);\n link.style.visibility = \"hidden\";\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n }\n },\n },\n {\n label: \"Download as JSON\",\n key: \"json\",\n onClick: () => {\n const dataStr = fastStringify(data?.data);\n const dataUri = `data:application/json;charset=utf-8, ${encodeURIComponent(\n dataStr\n )}`;\n\n const exportFileDefaultName = \"data.json\";\n\n const linkElement = document.createElement(\"a\");\n linkElement.setAttribute(\"href\", dataUri);\n linkElement.setAttribute(\"download\", exportFileDefaultName);\n linkElement.click();\n },\n },\n ],\n }}\n >\n <Button>\n <EllipsisOutlined />\n </Button>\n </Dropdown>\n );\n}\n","import { ComponentMeta } from \"@plasmicapp/host/registerComponent\";\nimport {\n commonProps,\n dataProp,\n onRowClickProp,\n rowActionsProp,\n} from \"../common-prop-types\";\nimport { buildFieldsPropType } from \"../field-mappings\";\nimport { Registerable, registerComponentHelper } from \"../utils\";\nimport { RichTable, RichTableProps, TableColumnConfig } from \"./RichTable\";\n\nexport * from \"./RichTable\";\nexport default RichTable;\n\nexport const tableHelpers = {\n states: {\n selectedRow: {\n onChangeArgsToValue: (rowKeys: string[], rows: any[]) => {\n return rows[0];\n },\n },\n selectedRows: {\n onChangeArgsToValue: (rowKeys: string[], rows: any[]) => {\n return rows;\n },\n },\n selectedRowKey: {\n onChangeArgsToValue: (rowKeys: string[], rows: any[]) => {\n return rowKeys[0];\n },\n },\n selectedRowKeys: {\n onChangeArgsToValue: (rowKeys: string[], rows: any[]) => {\n return rowKeys;\n },\n },\n },\n};\n\nconst dataTableMeta: ComponentMeta<RichTableProps> = {\n name: \"hostless-rich-table\",\n displayName: \"Table\",\n defaultStyles: {\n width: \"stretch\",\n padding: \"16px\",\n maxHeight: \"100%\",\n },\n props: {\n data: dataProp(),\n\n fields: buildFieldsPropType<TableColumnConfig, RichTableProps>({\n fieldTypes: {\n disableSorting: {\n type: \"boolean\",\n displayName: \"Disable sorting?\",\n defaultValueHint: false,\n },\n },\n }),\n\n canSelectRows: {\n type: \"choice\",\n displayName: \"Select rows?\",\n options: [\n { label: \"No\", value: \"none\" },\n { label: \"By clicking a row\", value: \"click\" },\n { label: \"Using radio buttons\", value: \"single\" },\n { label: \"Using checkboxes\", value: \"multiple\" },\n ],\n defaultValueHint: \"none\",\n description:\n \"Lets user select table rows by clicking on a row, or using radio buttons, or checkboxes if multiple rows can be selected together. If you have interactive elements in your row and you don't want clicking on them to select the row, you may use radio buttons instead.\",\n },\n\n rowKey: {\n type: \"string\",\n displayName: \"Row key\",\n helpText:\n \"Column key to use as row key; can also be a function that takes in a row and returns a key value\",\n hidden: (ps) => !ps.canSelectRows || ps.canSelectRows === \"none\",\n },\n\n selectedRowKey: {\n type: \"string\",\n displayName: \"Selected Row Key\",\n hidden: (ps) =>\n ps.canSelectRows !== \"single\" && ps.canSelectRows !== \"click\",\n advanced: true,\n },\n selectedRowKeys: {\n type: \"array\",\n displayName: \"Selected Row Keys\",\n hidden: (ps) => ps.canSelectRows !== \"multiple\",\n advanced: true,\n },\n onRowSelectionChanged: {\n type: \"eventHandler\",\n displayName: \"On row selection changed\",\n argTypes: [\n { name: \"rowKeys\", type: \"object\" },\n { name: \"rows\", type: \"object\" },\n ],\n },\n\n onRowClick: onRowClickProp(),\n\n rowActions: rowActionsProp(),\n\n defaultSize: {\n displayName: \"Density\",\n type: \"choice\",\n options: [\n {\n value: \"large\",\n label: \"Larger\",\n },\n {\n value: \"middle\",\n label: \"Medium\",\n },\n {\n value: \"small\",\n label: \"Compact\",\n },\n ],\n defaultValueHint: \"large\",\n advanced: true,\n },\n\n ...commonProps(),\n\n hideExports: {\n type: \"boolean\",\n description: \"Hides the button for exporting table data to CSV\",\n advanced: true,\n },\n\n hideDensity: {\n type: \"boolean\",\n description: \"Hides the control for changing the density of the table\",\n advanced: true,\n defaultValueHint: true,\n },\n\n hideColumnPicker: {\n type: \"boolean\",\n description: \"Hides the control for reordering and pinning columns\",\n advanced: true,\n },\n\n hideSelectionBar: {\n type: \"boolean\",\n description: \"Hides the toolbar that allows the user to clear selection\",\n advanced: true,\n hidden: (ps) => !ps.canSelectRows || ps.canSelectRows === \"none\",\n defaultValueHint: true,\n },\n scopeClassName: {\n type: \"styleScopeClass\",\n scopeName: \"instance\",\n } as any,\n themeResetClassName: {\n type: \"themeResetClass\",\n targetAllTags: true,\n },\n },\n states: {\n selectedRowKey: {\n type: \"writable\",\n valueProp: \"selectedRowKey\",\n onChangeProp: \"onRowSelectionChanged\",\n variableType: \"text\",\n hidden: (ps) =>\n !(ps.canSelectRows === \"click\" || ps.canSelectRows === \"single\"),\n ...tableHelpers.states.selectedRowKey,\n },\n selectedRowKeys: {\n type: \"writable\",\n valueProp: \"selectedRowKeys\",\n onChangeProp: \"onRowSelectionChanged\",\n variableType: \"array\",\n hidden: (ps) => !(ps.canSelectRows === \"multiple\"),\n ...tableHelpers.states.selectedRowKeys,\n },\n selectedRow: {\n type: \"readonly\",\n onChangeProp: \"onRowSelectionChanged\",\n variableType: \"object\",\n hidden: (ps) =>\n !(ps.canSelectRows === \"click\" || ps.canSelectRows === \"single\"),\n ...tableHelpers.states.selectedRow,\n },\n selectedRows: {\n type: \"readonly\",\n onChangeProp: \"onRowSelectionChanged\",\n variableType: \"array\",\n hidden: (ps) => !(ps.canSelectRows === \"multiple\"),\n ...tableHelpers.states.selectedRows,\n },\n },\n componentHelpers: {\n helpers: tableHelpers,\n importName: \"tableHelpers\",\n importPath: \"@plasmicpkgs/plasmic-rich-components/skinny/rich-table\",\n },\n importName: \"RichTable\",\n importPath: \"@plasmicpkgs/plasmic-rich-components/skinny/rich-table\",\n};\n\nexport function registerRichTable(loader?: Registerable) {\n registerComponentHelper(loader, RichTable, dataTableMeta);\n}\n","import { ActionType } from \"@ant-design/pro-components\";\nimport {\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, useRef } 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 title,\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 const actionRef = useRef<ActionType>();\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, setSortState } = useSortedFilteredData(\n data,\n normalized\n );\n\n const actuallyBordered = type === \"list\" ? bordered : false;\n return (\n <div className={className}>\n <style>{listCss}</style>\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, index) => {\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) return undefined;\n const href = linkTo?.(record);\n if (!href && !onRowClick) return undefined;\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","import {\n deriveFieldConfigs,\n NormalizedData,\n useNormalizedData,\n} from \"@plasmicapp/data-sources\";\nimport { parseDate } from \"@plasmicpkgs/luxon-parser\";\nimport { Badge, Calendar } from \"antd\";\nimport dayjs, { Dayjs } from \"dayjs\";\nimport groupBy from \"lodash/groupBy\";\nimport React, { useMemo } from \"react\";\nimport { BaseColumnConfig, FieldfulProps, RowFunc } from \"../field-mappings\";\nimport { getFieldAggregateValue } from \"../formatting\";\nimport {\n ensure,\n ensureArray,\n isLikeColor,\n isLikeDate,\n isValidIsoDate,\n maybe,\n mkShortId,\n} from \"../utils\";\n\nimport localeData from \"dayjs/plugin/localeData\";\nimport weekday from \"dayjs/plugin/weekday\";\n\ndayjs.extend(weekday);\ndayjs.extend(localeData);\n\ntype RichCalendarPropsBase = Omit<\n React.ComponentProps<typeof Calendar>,\n \"value\" | \"defaultValue\" | \"validRange\"\n>;\n\nexport interface RichCalendarProps\n extends FieldfulProps<EventsConfig>,\n RichCalendarPropsBase {\n color: EventsConfig[];\n date: EventsConfig[];\n title: EventsConfig[];\n value: string;\n defaultValue: string;\n validRange: [string | undefined, string | undefined] | undefined;\n}\n\ninterface Event {\n date: string;\n title: string;\n color?: string;\n}\n\nfunction getEventFullDate(date?: string): string | undefined {\n const parsed = parseDate(date);\n if (!parsed) return undefined;\n const yyyy = parsed.getFullYear();\n const mm = (parsed.getMonth() + 1).toString().padStart(2, \"0\");\n const dd = parsed.getDate().toString().padStart(2, \"0\");\n return `${yyyy}-${mm}-${dd}`;\n}\n\nfunction getEventMonthYear(date?: string): string | undefined {\n return getEventFullDate(date)?.substring(0, 7);\n}\n\nfunction EventCell({ events }: { events: Event[] }) {\n if (!events || !events.length) return null;\n return (\n <ul style={{ all: \"unset\" }}>\n {events.map((e) => (\n <li key={JSON.stringify(e)} style={{ all: \"unset\", display: \"block\" }}>\n <Badge color={e.color || \"green\"} text={e.title} />\n </li>\n ))}\n </ul>\n );\n}\n\nexport function RichCalendar(props: RichCalendarProps) {\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 value: isoValue,\n defaultValue: isoDefaultValue,\n validRange: isoValidRange,\n dateCellRender,\n dateFullCellRender,\n monthCellRender,\n monthFullCellRender,\n ...rest\n } = props;\n const data = useNormalizedData(rawData);\n\n const { normalized, finalRoles: roleConfigs } = useRoleDefinitions(\n data,\n props\n );\n const {\n eventsByDate,\n eventsByMonth,\n }: {\n eventsByDate: Record<string, Event[]>;\n eventsByMonth: Record<string, Event[]>;\n } = useMemo(() => {\n if (!data) return { eventsByDate: {}, eventsByMonth: {} };\n return data?.data.reduce(\n (acc: any, item: any) => {\n const date = getFieldAggregateValue(item, roleConfigs.date);\n const title = getFieldAggregateValue(item, roleConfigs.title);\n const color = getFieldAggregateValue(item, roleConfigs.color);\n\n const event = {\n date,\n title,\n color,\n };\n\n const keyDate = getEventFullDate(date); // extract the date-only part\n const keyMonth = getEventMonthYear(date); // extract the month-year part\n if (keyDate && keyMonth) {\n acc.eventsByDate[keyDate] = [\n ...(acc.eventsByDate[keyDate] || []),\n event,\n ];\n acc.eventsByMonth[keyMonth] = [\n ...(acc.eventsByMonth[keyMonth] || []),\n event,\n ];\n }\n\n return acc;\n },\n { eventsByDate: {}, eventsByMonth: {} }\n );\n }, [data, roleConfigs.color, roleConfigs.date, roleConfigs.title]);\n\n const value = useMemo(\n () => (isValidIsoDate(isoValue) ? dayjs(isoValue) : dayjs()),\n [isoValue]\n ); // https://day.js.org/docs/en/parse/now`\n const defaultValue = useMemo(\n () => (isValidIsoDate(isoDefaultValue) ? dayjs(isoDefaultValue) : dayjs()),\n [isoDefaultValue]\n ); // https://day.js.org/docs/en/parse/now\n\n const validRange: [Dayjs, Dayjs] | undefined = useMemo(() => {\n if (!isoValidRange) return undefined;\n\n const range = isoValidRange\n .filter((dateIso: string | undefined) => isValidIsoDate(dateIso))\n .map((d: any) => dayjs(d));\n\n if (range.length !== 2) return undefined;\n return [range[0], range[1]];\n }, [isoValidRange]);\n\n const key = useMemo(() => JSON.stringify(roleConfigs), [roleConfigs]);\n\n return (\n <Calendar\n {...rest}\n key={key}\n validRange={validRange}\n // for interactive / preview mode\n defaultValue={defaultValue}\n // for design mode\n value={value}\n dateCellRender={\n dateCellRender\n ? dateCellRender\n : (date: Dayjs) => (\n <EventCell\n events={eventsByDate[getEventFullDate(date.toISOString())!]}\n />\n )\n }\n monthCellRender={\n monthCellRender\n ? monthCellRender\n : (date: Dayjs) => (\n <EventCell\n events={eventsByMonth[getEventMonthYear(date.toISOString())!]}\n />\n )\n }\n dateFullCellRender={dateFullCellRender}\n monthFullCellRender={monthFullCellRender}\n />\n );\n}\n\ninterface StyleConfig {\n styles: Record<string, any>;\n align: \"left\" | \"center\" | \"right\";\n freeze: \"off\" | \"left\" | \"right\";\n}\n\nconst defaultColumnConfig = (): EventsConfig =>\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 = [\"date\", \"title\", \"color\", \"unset\"] as const;\n\nexport type Role = (typeof roles)[number];\n\nexport type EventsConfig = 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 RichCalendar>\n) {\n const { fields, setControlContextData } = props;\n\n return React.useMemo(() => {\n const schema = data?.schema;\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(\"date\"),\n ...tagFieldConfigs(\"color\"),\n ...tagFieldConfigs(\"title\"),\n ];\n\n function doDeriveFieldConfigs(mode: \"existing\" | \"defaults\") {\n return deriveFieldConfigs<EventsConfig>(\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 date field.\n // Filter mergedFields where there are mostly values (in the sampleRows) that are a string that looks like a date in ISO date-only or date-time format, or a timestamp\n // Of these, prefer the one with a name like date, timestamp.\n // Otherwise, prefer the one with a name with that substring.\n // Otherwise, pick any remaining one.\n if (\n data.data.length > 0 &&\n !defaultMergedFields.some((field) => field.role === \"date\")\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 dateFieldCandidates = defaultMergedFields.filter(\n (field) =>\n !field.role &&\n sampleRows.filter(\n (row) => field.fieldId && isLikeDate(row[field.fieldId])\n ).length >=\n sampleRows.length / 2\n );\n const dateField =\n dateFieldCandidates.find((f) =>\n f.fieldId?.match(/^(date|datetime|timestamp|eventdate)$/i)\n ) ??\n dateFieldCandidates.find((f) =>\n f.fieldId?.match(/.*(date|time|event).*/i)\n ) ??\n dateFieldCandidates[0];\n if (dateField) {\n dateField.role = \"date\";\n }\n }\n\n // Find a good default color field.\n // Filter mergedFields where there are mostly values (in the sampleRows) that are a string that looks like a color code.\n // Of these, prefer the one with a name like color.\n // Otherwise, prefer the one with a name with that substring.\n // Otherwise, pick any remaining one.\n if (\n data.data.length > 0 &&\n !defaultMergedFields.some((field) => field.role === \"color\")\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 colorFieldCandidates = defaultMergedFields.filter(\n (field) =>\n !field.role &&\n sampleRows.filter(\n (row) => field.fieldId && isLikeColor(row[field.fieldId])\n ).length >=\n sampleRows.length / 2\n );\n const colorField =\n colorFieldCandidates.find((f) =>\n f.fieldId?.match(/^(color|hex|rgb|hsl|rgba|cmyk|hsv|hsb)$/i)\n ) ??\n colorFieldCandidates.find((f) =>\n f.fieldId?.match(/.*(color|hex|rgb|hsl|rgba|cmyk|hsv|hsb).*/i)\n ) ??\n colorFieldCandidates[0];\n if (colorField) {\n colorField.role = \"color\";\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?.toLowerCase().match(/^(title|name||event[ _-]?name)$/)\n );\n if (titleField) {\n titleField.role = \"title\";\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, EventsConfig[]>> = {};\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 }, [data, setControlContextData, props]);\n}\n","import dayjs, { Dayjs } from \"dayjs\";\nimport { roleProp } from \"../common-prop-types\";\nimport {\n isValidIsoDate,\n Registerable,\n registerComponentHelper,\n} from \"../utils\";\nimport { RichCalendar } from \"./RichCalendar\";\n\nexport * from \"./RichCalendar\";\n\nexport const calendarHelpers = {\n states: {\n mode: {\n onChangeArgsToValue: (_date: Dayjs, mode: string) => mode,\n },\n selectedDate: {\n onChangeArgsToValue: (date: Dayjs) => dayjs(date).toISOString(),\n },\n },\n};\n\nexport const calendarComponentName = \"hostless-rich-calendar\";\n\nexport function registerRichCalendar(loader?: Registerable) {\n registerComponentHelper(loader, RichCalendar, {\n name: calendarComponentName,\n displayName: \"Calendar\",\n props: {\n data: {\n type: \"dataSourceOpData\" as any,\n displayName: \"Events\",\n description:\n \"The events data should be a list of records with some date, title and (optionally) color fields. The component will infer the date field from the provided data, but you can also explicitly specify that below.\",\n },\n title: roleProp({ role: \"title\" }),\n date: roleProp({ role: \"date\", singular: true }),\n color: roleProp({ role: \"color\", singular: true }),\n value: {\n // Must have a corresponding state and eventhandler for any prop that I want to be able to change in interactive mode.\n editOnly: true,\n uncontrolledProp: \"defaultValue\",\n type: \"dateString\",\n description: `The date selected by default as an ISO string`,\n validator: (value, ps) => {\n if (!ps.value) return true;\n if (!ps.validRange) return true;\n if (!isValidIsoDate(value)) return \"Not a valid ISO string.\";\n if (\n dayjs(value).isBefore(ps.validRange[0]) ||\n dayjs(value).isAfter(ps.validRange[1])\n )\n return \"Not within the valid range\";\n return true;\n },\n },\n mode: {\n type: \"choice\",\n options: [\"month\", \"year\"],\n description: \"The default display mode of the calendar.\",\n defaultValueHint: \"month\",\n },\n validRange: {\n type: \"dateRangeStrings\",\n description: \"Only allow selection of dates that lie within this range\",\n advanced: true,\n validator: (value, ps) => {\n if (!value) return true;\n if (!Array.isArray(value) || value.length !== 2)\n return \"Not an array with 2 items\";\n if (!isValidIsoDate(value[0]) || !isValidIsoDate(value[1]))\n return \"Min or max range is not in valid ISO date format.\";\n return true;\n },\n },\n headerRender: {\n type: \"slot\",\n renderPropParams: [\"headerProps\"],\n hidePlaceholder: true,\n displayName: \"Custom Header\",\n },\n dateCellRender: {\n type: \"slot\",\n renderPropParams: [\"dateProps\"],\n hidePlaceholder: true,\n displayName: \"Append Date Cell\",\n },\n dateFullCellRender: {\n type: \"slot\",\n renderPropParams: [\"dateProps\"],\n hidePlaceholder: true,\n displayName: \"Custom Date Cell\",\n },\n monthCellRender: {\n type: \"slot\",\n renderPropParams: [\"dateProps\"],\n hidePlaceholder: true,\n displayName: \"Append Month Cell\",\n },\n monthFullCellRender: {\n type: \"slot\",\n renderPropParams: [\"dateProps\"],\n hidePlaceholder: true,\n displayName: \"Custom Month Cell\",\n },\n onPanelChange: {\n type: \"eventHandler\",\n description:\n \"Triggers when the calendar mode changes (e.g. from month to year mode)\",\n argTypes: [\n { name: \"date\", type: \"object\" },\n { name: \"mode\", type: \"string\" },\n ],\n },\n onChange: {\n type: \"eventHandler\",\n argTypes: [{ name: \"date\", type: \"object\" }],\n },\n },\n states: {\n mode: {\n type: \"writable\",\n valueProp: \"mode\",\n onChangeProp: \"onPanelChange\",\n variableType: \"text\",\n ...calendarHelpers.states.mode,\n },\n selectedDate: {\n type: \"writable\",\n valueProp: \"value\",\n onChangeProp: \"onChange\",\n variableType: \"text\",\n ...calendarHelpers.states.selectedDate,\n },\n },\n componentHelpers: {\n helpers: calendarHelpers,\n importName: \"calendarHelpers\",\n importPath: \"@plasmicpkgs/plasmic-rich-components/skinny/rich-calendar\",\n },\n importPath: \"@plasmicpkgs/plasmic-rich-components/skinny/rich-calendar\",\n importName: \"RichCalendar\",\n });\n}\n","import { registerRichDetails } from \"./rich-details\";\nimport { registerRichLayout } from \"./rich-layout\";\nimport { registerRichTable } from \"./rich-table\";\nimport { Registerable } from \"./utils\";\nimport { registerRichList } from \"./rich-list\";\nimport { registerRichCalendar } from \"./rich-calendar\";\n\nexport { RichLayout } from \"./rich-layout\";\nexport { RichList } from \"./rich-list\";\nexport { RichTable, tableHelpers } from \"./rich-table\";\nexport { RichDetails } from \"./rich-details\";\nexport { RichCalendar, calendarHelpers } from \"./rich-calendar\";\n\nexport function registerAll(loader?: Registerable) {\n registerRichLayout(loader);\n registerRichList(loader);\n registerRichTable(loader);\n registerRichDetails(loader);\n registerRichCalendar(loader);\n}\nexport { useSortedFilteredData } from \"./field-react-utils\";\nexport { isLikeImage } from \"./utils\";\nexport { renderActions } from \"./field-react-utils\";\nexport type { RowAction } from \"./field-react-utils\";\nexport { deriveRowKey } from \"./field-react-utils\";\nexport { deriveKeyOfRow } from \"./field-react-utils\";\nexport { isInteractable } from \"./utils\";\nexport { onRowClickProp } from \"./common-prop-types\";\nexport { rowActionsProp } from \"./common-prop-types\";\nexport { commonProps } from \"./common-prop-types\";\nexport { dataProp } from \"./common-prop-types\";\nexport { ensureArray } from \"./utils\";\n"],"names":["__spreadValues","_a","__spreadProps","__objRest","useColumnDefinitions","AnchorLink","_b","defaultColumnConfig","useRoleDefinitions","roles"],"mappings":"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"}
1
+ {"version":3,"file":"plasmic-rich-components.esm.js","sources":["../src/utils.tsx","../src/field-mappings.tsx","../src/formatting.tsx","../src/rich-details/RichDetails.tsx","../src/rich-details/index.tsx","../src/common.ts","../src/widgets.tsx","../src/rich-layout/RichLayout.tsx","../src/rich-layout/index.tsx","../src/common-prop-types.tsx","../src/field-react-utils.tsx","../src/rich-table/RichTable.tsx","../src/rich-table/index.tsx","../src/rich-list/RichList.tsx","../src/rich-list/index.tsx","../src/rich-calendar/RichCalendar.tsx","../src/rich-calendar/index.tsx","../src/index.tsx"],"sourcesContent":["import {\n ComponentMeta,\n default as registerComponent,\n} from \"@plasmicapp/host/registerComponent\";\nimport {\n default as registerGlobalContext,\n GlobalContextMeta,\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: ComponentMeta<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: ComponentMeta<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) return undefined;\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) return false;\n if (typeof str !== \"string\") return false;\n if (str.includes(\" \")) return false; // spaces not supported\n if (str.length === 10) {\n if (extendedOnly) return false;\n dayjs.extend(customParseFormat);\n return dayjs(str, \"YYYY-MM-DD\", true).isValid();\n }\n if (!dayjs(str).isValid()) return false; // should be a valid dayjs date\n if (isNaN(new Date(str).getTime())) return false; // 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\") return false;\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","import { QueryResult, TableSchema } from \"@plasmicapp/data-sources\";\nimport { ContextDependentConfig } from \"@plasmicapp/host\";\nimport { PropType } from \"@plasmicapp/host/registerComponent\";\nimport deepGet from \"lodash/get\";\nimport { isOneOf, withoutFalsey } from \"./utils\";\n\nexport interface AutoSettings {\n dataType: \"auto\";\n}\n\ninterface _SharedNumberSettings {\n notation?: \"standard\" | \"scientific\" | \"engineering\" | \"compact\";\n signDisplay?: \"auto\" | \"always\" | \"exceptZero\";\n maximumFractionDigits?: number;\n minimumFractionDigits?: number;\n locale?: string;\n}\nexport interface DecimalSettings extends _SharedNumberSettings {\n dataType: \"number\";\n}\nexport interface PercentSettings extends _SharedNumberSettings {\n dataType: \"percent\";\n}\nexport interface CurrencySettings extends _SharedNumberSettings {\n dataType: \"currency\";\n currency?: string;\n currencyDisplay?: \"symbol\" | \"narrowSymbol\" | \"code\" | \"name\";\n}\nexport const DEFAULT_CURRENCY_SETTINGS: CurrencySettings = {\n dataType: \"currency\",\n currency: \"USD\",\n currencyDisplay: \"narrowSymbol\",\n};\n\nexport type NumberSettings =\n | DecimalSettings\n | PercentSettings\n | CurrencySettings;\nexport const NUMBER_TYPES = [\"number\", \"percent\", \"currency\"] as const;\n\nexport interface DateTimeSettings {\n dataType: \"datetime\";\n locale?: string;\n dateStyle?: \"none\" | \"full\" | \"long\" | \"medium\" | \"short\";\n timeStyle?: \"none\" | \"full\" | \"long\" | \"medium\" | \"short\";\n hour12?: boolean;\n timeZone?: string;\n}\nexport const DEFAULT_DATETIME_SETTINGS: DateTimeSettings = {\n dataType: \"datetime\",\n locale: \"en-US\",\n dateStyle: \"short\",\n timeStyle: \"short\",\n hour12: true,\n};\n\nexport interface RelativeDateTimeSettings {\n dataType: \"relative-datetime\";\n locale?: string;\n numeric?: \"always\" | \"auto\";\n style?: \"long\" | \"short\" | \"narrow\";\n unit?: \"year\" | \"month\" | \"week\" | \"day\" | \"hour\" | \"minute\" | \"second\";\n}\nexport const DEFAULT_RELATIVE_DATETIME_SETTINGS: RelativeDateTimeSettings = {\n dataType: \"relative-datetime\",\n locale: \"en-US\",\n numeric: \"always\",\n style: \"long\",\n unit: \"day\",\n};\nexport const DATETIME_TYPES = [\"datetime\", \"relative-datetime\"] as const;\n\nexport interface BooleanSettings {\n dataType: \"boolean\";\n showAs?: \"text\" | \"checkbox\" | \"switch\";\n}\nexport const DEFAULT_BOOLEAN_SETTINGS: BooleanSettings = {\n dataType: \"boolean\",\n showAs: \"checkbox\",\n};\n\nexport interface StringSettings {\n dataType: \"string\";\n}\n\nexport type RowFunc<Result> = (row: Record<string, unknown>) => Result;\nexport type CellFunc<Result> = (\n row: Record<string, unknown>,\n value: unknown\n) => Result;\n\n/**\n * Exprs are for things that can must re-evaluate from row to row.\n *\n * Literal values are for things that are column-level. (But in Plasmic Studio, as with all props, you can still use a dynamic value.)\n */\n\ninterface _BaseColumnConfig {\n key: string;\n fieldId?: string;\n title?: string;\n isHidden: boolean;\n expr?: CellFunc<any>;\n}\n\nexport type BaseColumnConfig = _BaseColumnConfig &\n (\n | AutoSettings\n | NumberSettings\n | StringSettings\n | BooleanSettings\n | DateTimeSettings\n | RelativeDateTimeSettings\n );\n\nexport function deriveValueType(cconfig: BaseColumnConfig) {\n return cconfig.dataType === \"auto\"\n ? undefined\n : cconfig.dataType === \"string\"\n ? \"text\"\n : cconfig.dataType === \"number\"\n ? \"digit\"\n : cconfig.dataType === \"boolean\"\n ? \"switch\"\n : undefined;\n}\n\nexport interface ControlContextData<ColumnConfig extends BaseColumnConfig> {\n data: unknown[];\n schema?: TableSchema;\n mergedFields: ColumnConfig[];\n minimalFullLengthFields: Partial<ColumnConfig>[];\n}\n\nexport interface FieldfulProps<ColumnConfig extends BaseColumnConfig> {\n className?: string;\n data?: QueryResult;\n fields?: Partial<ColumnConfig>[];\n setControlContextData?: (ctx: ControlContextData<ColumnConfig>) => void;\n}\n\n// Hacky \"unique\" string values\nexport const NoneField = \"||NoneField||\";\nexport const CustomField = \"\";\n\ninterface FieldSubpropsOpts<ColumnConfig extends BaseColumnConfig> {\n fieldTypes?: Record<string, PropType<any>>;\n canChangeField?: boolean;\n canPickNoneField?: boolean;\n noTitle?: boolean;\n noDataType?: boolean;\n hiddenFieldId?: (\n ps: Record<string, unknown>,\n ctx: ControlContextData<ColumnConfig>,\n extras: { path: (string | number)[] }\n ) => boolean;\n}\n\nexport function getFieldSubprops<ColumnConfig extends BaseColumnConfig>(\n opts: FieldSubpropsOpts<ColumnConfig>\n): Record<string, PropType<any>> {\n return {\n key: {\n type: \"string\",\n hidden: () => true,\n },\n fieldId: {\n type: \"choice\",\n displayName: \"Field name\",\n readOnly: !opts.canChangeField,\n options: (_props, ctx: ControlContextData<BaseColumnConfig>) =>\n withoutFalsey([\n opts.canPickNoneField && { value: NoneField, label: \"None\" },\n ...(ctx?.schema?.fields ?? []).map((f) => ({\n value: f.id,\n label: f.label ?? f.id,\n })),\n { value: CustomField, label: \"Custom value\" },\n ]),\n hidden: (\n ps,\n ctx: ControlContextData<ColumnConfig>,\n { path: _controlPath }\n ) => {\n // If this is change-able.\n if (opts.canChangeField) {\n return false;\n }\n return true;\n // If there's a user-set fieldId\n if (deepGet(ps, _controlPath)) {\n return false;\n }\n return opts.hiddenFieldId?.(ps, ctx, { path: _controlPath }) ?? true;\n },\n },\n title: {\n type: \"string\",\n displayName: \"Title\",\n defaultValueHint: getDefaultValueHint(\"title\"),\n hidden: () => !!opts.noTitle,\n },\n expr: {\n ...rowDataType(\"Custom value\"),\n hidden: (\n ps,\n ctx: ControlContextData<BaseColumnConfig>,\n { item, path: _controlPath }\n ) => {\n return false;\n // HIDE if this is unset.\n if (!item) {\n return true;\n }\n // SHOW if this is change-able *and* user chose \"Custom\".\n if (opts.canChangeField) {\n return false;\n }\n return true;\n },\n },\n isHidden: {\n type: \"boolean\",\n displayName: \"Is hidden\",\n defaultValueHint: getDefaultValueHint(\"isHidden\"),\n },\n ...(!opts.noDataType\n ? {\n dataType: {\n type: \"choice\",\n displayName: \"Data type\",\n options: [\n {\n value: \"auto\",\n label: \"Auto\",\n },\n {\n value: \"number\",\n label: \"Number\",\n },\n {\n value: \"percent\",\n label: \"Percentage\",\n },\n {\n value: \"currency\",\n label: \"Currency\",\n },\n {\n value: \"string\",\n label: \"String\",\n },\n {\n value: \"boolean\",\n label: \"Boolean\",\n },\n {\n value: \"datetime\",\n label: \"Date / Time\",\n },\n {\n value: \"relative-datetime\",\n label: \"Date / Time relative to now\",\n },\n ],\n defaultValueHint: getDefaultValueHint(\"dataType\"),\n },\n currency: {\n displayName: \"Currency\",\n description: \"Must be a valid currency code\",\n type: \"string\",\n defaultValueHint: \"USD\",\n hidden: (ps, ctx, { item }) => item.dataType !== \"currency\",\n },\n locale: {\n displayName: \"Locale\",\n description: \"Must be a valid locale code\",\n type: \"string\",\n defaultValueHint: \"en-US\",\n hidden: (ps, ctx, { item }) =>\n !isOneOf(item.dataType, NUMBER_TYPES) &&\n !isOneOf(item.dataType, DATETIME_TYPES),\n },\n notation: {\n displayName: \"Notation\",\n type: \"choice\",\n options: [\n {\n value: \"standard\",\n label: \"Standard\",\n },\n {\n value: \"scientific\",\n label: \"Scientific notation (like 1E3)\",\n },\n {\n value: \"compact\",\n label: \"Compact (like 10K)\",\n },\n ],\n defaultValueHint: \"standard\",\n hidden: (ps, ctx, { item }) =>\n !isOneOf(item.dataType, NUMBER_TYPES),\n },\n signDisplay: {\n type: \"choice\",\n displayName: \"Number sign\",\n options: [\n {\n value: \"auto\",\n label: \"Only for negative numbers (10, -10)\",\n },\n {\n value: \"exceptZero\",\n label: \"Positive or negative (+10, -10)\",\n },\n ],\n defaultValueHint: \"auto\",\n hidden: (ps, ctx, { item }) =>\n !isOneOf(item.dataType, NUMBER_TYPES),\n },\n maximumFractionDigits: {\n type: \"number\",\n displayName: \"Max decimal places\",\n defaultValueHint: 3,\n min: 0,\n max: 20,\n hidden: (ps, ctx, { item }) =>\n !isOneOf(item.dataType, NUMBER_TYPES),\n },\n minimumFractionDigits: {\n type: \"number\",\n displayName: \"Min decimal places\",\n defaultValueHint: 0,\n min: 0,\n max: 20,\n hidden: (ps, ctx, { item }) =>\n !isOneOf(item.dataType, NUMBER_TYPES),\n },\n showAs: {\n type: \"choice\",\n options: [\n {\n value: \"checkbox\",\n label: \"Checkboxes\",\n },\n {\n value: \"switch\",\n label: \"Toggle switches\",\n },\n {\n value: \"text\",\n label: \"Text\",\n },\n ],\n displayName: \"Show as\",\n defaultValueHint: \"checkbox\",\n hidden: (ps, ctx, { item }) => item.dataType !== \"boolean\",\n },\n dateStyle: {\n displayName: \"Date style\",\n type: \"choice\",\n options: [\n {\n value: \"none\",\n label: \"None (don't display date)\",\n },\n {\n value: \"short\",\n label: \"Short (like 12/25/2023)\",\n },\n {\n value: \"medium\",\n label: \"Medium (like Dec 25, 2023)\",\n },\n {\n value: \"long\",\n label: \"Long (like December 25, 2023)\",\n },\n {\n value: \"full\",\n label: \"Full (like Monday, December 25, 2023)\",\n },\n ],\n defaultValueHint: DEFAULT_DATETIME_SETTINGS.dateStyle,\n hidden: (ps, ctx, { item }) => item.dataType !== \"datetime\",\n },\n timeStyle: {\n displayName: \"Time style\",\n type: \"choice\",\n options: [\n {\n value: \"none\",\n label: \"None (don't display time)\",\n },\n {\n value: \"short\",\n label: \"Short (like 4:00 PM)\",\n },\n {\n value: \"medium\",\n label: \"Medium (like 4:00:00 PM)\",\n },\n {\n value: \"long\",\n label: \"Long (like 4:00:00 PM PST)\",\n },\n {\n value: \"full\",\n label: \"Full (like 4:00:00 PM Pacific Standard Time)\",\n },\n ],\n defaultValueHint: DEFAULT_DATETIME_SETTINGS.timeStyle,\n hidden: (ps, ctx, { item }) => item.dataType !== \"datetime\",\n },\n hour12: {\n displayName: \"Use AM/PM?\",\n description: \"Whether to use AM/PM or 24-hour clock\",\n type: \"boolean\",\n defaultValueHint: DEFAULT_DATETIME_SETTINGS.hour12,\n hidden: (ps, ctx, { item }) => item.dataType !== \"datetime\",\n },\n numeric: {\n type: \"choice\",\n displayName: \"Use numbers?\",\n options: [\n { value: \"always\", label: \"Always use numbers\" },\n {\n value: \"auto\",\n label: \"Use words like 'Yesterday' or 'Tomorrow'\",\n },\n ],\n defaultValueHint: DEFAULT_RELATIVE_DATETIME_SETTINGS.numeric,\n hidden: (ps, ctx, { item }) =>\n item.dataType !== \"relative-datetime\",\n },\n unit: {\n type: \"choice\",\n displayName: \"Time unit\",\n options: [\n {\n value: \"second\",\n label: \"Seconds\",\n },\n {\n value: \"minute\",\n label: \"Minutes\",\n },\n {\n value: \"hour\",\n label: \"Hours\",\n },\n {\n value: \"day\",\n label: \"Days\",\n },\n {\n value: \"week\",\n label: \"Weeks\",\n },\n {\n value: \"month\",\n label: \"Months\",\n },\n {\n value: \"year\",\n label: \"Years\",\n },\n ],\n defaultValueHint: DEFAULT_RELATIVE_DATETIME_SETTINGS.unit,\n hidden: (ps, ctx, { item }) =>\n item.dataType !== \"relative-datetime\",\n },\n }\n : {}),\n ...opts.fieldTypes,\n };\n}\n\nfunction getDefaultValueHint<ColumnConfig extends BaseColumnConfig>(\n field: keyof ColumnConfig\n) {\n return (\n _props: any,\n contextData: ControlContextData<ColumnConfig> | null,\n { item }: any\n ): any => {\n if (item?.fieldId) {\n const fieldSetting = contextData?.mergedFields.find(\n (f) => f.fieldId === item.fieldId\n );\n return fieldSetting?.[field];\n }\n return undefined;\n };\n}\n\nconst rowDataType = (displayName: string, control?: any) =>\n ({\n type: \"function\" as any,\n displayName,\n control,\n argNames: [\"currentItem\", \"currentValue\"],\n argValues: (_props: any, ctx: any, { item }: any) => {\n const row = ctx?.data?.[0];\n const cell = item.fieldId ? row?.[item.fieldId] : undefined;\n return [row, cell];\n },\n } as any);\n\nexport function buildFieldsPropType<\n ColumnConfig extends BaseColumnConfig,\n Props extends FieldfulProps<ColumnConfig>\n>({\n advanced,\n displayName,\n minimalValue = (_props, contextData) => contextData?.minimalFullLengthFields,\n ...opts\n}: {\n advanced?: boolean;\n displayName?: string;\n minimalValue?: ContextDependentConfig<Props, any>;\n} & FieldSubpropsOpts<ColumnConfig>): PropType<Props> {\n return {\n type: \"array\",\n advanced,\n displayName,\n hidden: (ps) => !ps.data,\n unstable__keyFunc: (x) => x.key,\n unstable__minimalValue: minimalValue,\n unstable__canDelete: (ps, _props, ctx, { item }) => {\n if (opts.canChangeField) {\n return true;\n }\n if (!ctx?.schema) {\n // still loading...\n return false;\n }\n if (\n item.fieldId &&\n ctx.schema.fields.some((f) => f.id === item.fieldId)\n ) {\n return false;\n }\n return true;\n },\n itemType: {\n type: \"object\",\n nameFunc: (_item: any) => {\n // Prefer to show the field ID when available, since there's no other indication what field you're edtiing if you relabeled it.\n return _item.fieldId || _item.title || \"Custom value\";\n },\n fields: getFieldSubprops(opts),\n },\n };\n}\n","import { parseDate } from \"@plasmicpkgs/luxon-parser\";\nimport { Checkbox, Switch } from \"antd\";\nimport React from \"react\";\nimport {\n BaseColumnConfig,\n BooleanSettings,\n DateTimeSettings,\n DATETIME_TYPES,\n DEFAULT_BOOLEAN_SETTINGS,\n DEFAULT_CURRENCY_SETTINGS,\n DEFAULT_DATETIME_SETTINGS,\n DEFAULT_RELATIVE_DATETIME_SETTINGS,\n NumberSettings,\n NUMBER_TYPES,\n RelativeDateTimeSettings,\n} from \"./field-mappings\";\nimport { isOneOf, maybe } from \"./utils\";\n\nexport function maybeRenderValue(\n record: any,\n cconfig: BaseColumnConfig | undefined\n) {\n return cconfig ? renderValue(record, cconfig) : undefined;\n}\n\nexport function multiRenderValue(\n record: any,\n cconfigs: BaseColumnConfig[] | undefined\n) {\n return cconfigs\n ?.flatMap((cc) =>\n cc.isHidden ? [] : [` • `, <>{renderValue(record, cc)}</>]\n )\n .slice(1);\n}\n\nexport function maybeRenderString(\n record: any,\n cconfig: BaseColumnConfig | undefined\n) {\n return cconfig && !cconfig.isHidden\n ? maybe(getFieldValue(record, cconfig), asString)\n : undefined;\n}\n\nfunction getFieldValue(record: any, cconfig: BaseColumnConfig) {\n let value = cconfig.fieldId ? record[cconfig.fieldId] : undefined;\n\n if (cconfig.expr) {\n value = cconfig.expr(record, value);\n }\n\n return value;\n}\n\nexport function getFieldAggregateValue(\n record: any,\n cconfigs: BaseColumnConfig[] | undefined,\n separator = \", \"\n) {\n if (!cconfigs?.length) return undefined;\n\n return cconfigs?.length\n ? cconfigs.map((item) => getFieldValue(record, item)).join(separator)\n : undefined;\n}\n\nexport function renderValue(record: any, cconfig: BaseColumnConfig) {\n const value = getFieldValue(record, cconfig);\n\n if (value == null) {\n return \"\";\n }\n\n if (cconfig.dataType === \"auto\") {\n return renderAuto(value);\n } else {\n const coerced = coerceValue(value, cconfig.dataType);\n if (\n isOneOf(cconfig.dataType, NUMBER_TYPES) &&\n typeof coerced === \"number\"\n ) {\n return renderNumber(coerced, cconfig as NumberSettings);\n } else if (cconfig.dataType === \"boolean\" && typeof coerced === \"boolean\") {\n return renderBoolean(coerced, cconfig);\n } else if (cconfig.dataType === \"datetime\" && coerced instanceof Date) {\n return renderDate(coerced, cconfig);\n } else if (\n cconfig.dataType === \"relative-datetime\" &&\n coerced instanceof Date\n ) {\n return renderRelativeDate(coerced, cconfig);\n }\n return asString(value);\n }\n}\n\nfunction renderAuto(value: unknown): React.ReactNode {\n if (typeof value === \"number\") {\n return renderNumber(value, { dataType: \"number\" });\n } else if (typeof value === \"boolean\") {\n return renderBoolean(value, DEFAULT_BOOLEAN_SETTINGS);\n } else if (value instanceof Date) {\n return renderDate(value, DEFAULT_DATETIME_SETTINGS);\n } else {\n const coerced = tryCoerceAuto(value);\n if (coerced === CANNOT_COERCE) {\n return asString(value);\n } else {\n return renderAuto(coerced);\n }\n }\n}\n\nfunction tryCoerceAuto(value: unknown) {\n for (const dataType of [\n \"number\",\n \"datetime\",\n ] as BaseColumnConfig[\"dataType\"][]) {\n const coerced = coerceValue(value, dataType);\n if (coerced !== CANNOT_COERCE) {\n return coerced;\n }\n }\n return CANNOT_COERCE;\n}\n\nfunction renderNumber(value: number, cconfig: NumberSettings) {\n if (cconfig.dataType === \"number\") {\n return new Intl.NumberFormat(cconfig.locale, cconfig).format(value);\n } else if (cconfig.dataType === \"percent\") {\n return new Intl.NumberFormat(cconfig.locale, {\n ...cconfig,\n style: \"percent\",\n }).format(value);\n } else if (cconfig.dataType === \"currency\") {\n return new Intl.NumberFormat(cconfig.locale, {\n ...DEFAULT_CURRENCY_SETTINGS,\n ...cconfig,\n style: \"currency\",\n }).format(value);\n } else {\n throw new Error(`Unexpected dataType ${(cconfig as any).dataType}`);\n }\n}\n\nfunction renderDate(value: Date, cconfig: DateTimeSettings) {\n const opts = {\n ...DEFAULT_DATETIME_SETTINGS,\n ...cconfig,\n };\n if (opts.dateStyle === \"none\") {\n delete opts[\"dateStyle\"];\n }\n if (opts.timeStyle === \"none\") {\n delete opts[\"timeStyle\"];\n }\n return new Intl.DateTimeFormat(cconfig.locale, opts as any).format(value);\n}\n\nconst SECOND_MS = 1000;\nconst MINUTE_MS = 60 * SECOND_MS;\nconst HOUR_MS = 60 * MINUTE_MS;\nconst DAY_MS = 24 * HOUR_MS;\nconst WEEK_MS = 7 * DAY_MS;\nconst UNIT_TO_MS = {\n second: SECOND_MS,\n minute: MINUTE_MS,\n hour: HOUR_MS,\n day: DAY_MS,\n week: WEEK_MS,\n} as const;\nconst UNITS_BY_MS = Object.keys(UNIT_TO_MS) as (keyof typeof UNIT_TO_MS)[];\n\nfunction renderRelativeDate(value: Date, cconfig: RelativeDateTimeSettings) {\n const opts = {\n ...DEFAULT_RELATIVE_DATETIME_SETTINGS,\n ...cconfig,\n };\n const unit = cconfig.unit ?? \"day\";\n const formatter = new Intl.RelativeTimeFormat(cconfig.locale, opts);\n if (isOneOf(unit, UNITS_BY_MS)) {\n // for \"exact\" units, we can do it by just calcluating the difference\n // by ms\n const diff = value.getTime() - new Date().getTime();\n return formatter.format(Math.round(diff / UNIT_TO_MS[unit]), unit);\n } else {\n // otherwise we need to calculate by the specific unit\n if (unit === \"year\") {\n const diff = value.getFullYear() - new Date().getFullYear();\n return formatter.format(diff, unit);\n } else if (unit === \"month\") {\n const months = (d: Date) => d.getFullYear() * 12 + d.getMonth() + 1;\n const diff = months(value) - months(new Date());\n return formatter.format(diff, unit);\n } else {\n throw new Error(`Unexpected relative time unit ${unit}`);\n }\n }\n}\n\nfunction renderBoolean(value: boolean, cconfig: BooleanSettings) {\n const showAs = cconfig.showAs ?? DEFAULT_BOOLEAN_SETTINGS.showAs;\n if (showAs === \"checkbox\") {\n return <Checkbox checked={value} />;\n } else if (showAs === \"switch\") {\n return <Switch checked={value} />;\n } else {\n return value ? \"true\" : \"false\";\n }\n}\n\nconst CANNOT_COERCE = Symbol(\"plasmic-cannot-coerce\");\nfunction coerceValue(value: unknown, dataType: BaseColumnConfig[\"dataType\"]) {\n if (value == null) {\n return null;\n }\n try {\n if (isOneOf(dataType, NUMBER_TYPES)) {\n if (typeof value === \"number\") {\n return value;\n } else if (typeof value === \"string\") {\n const maybeNumber = +value;\n if (!isNaN(maybeNumber)) {\n return maybeNumber;\n }\n }\n } else if (isOneOf(dataType, DATETIME_TYPES)) {\n if (value instanceof Date) {\n return value;\n } else if (typeof value === \"number\") {\n return new Date(value);\n } else if (typeof value === \"string\") {\n // We don't want to simply use Date because it's too loose and varies across platforms.\n // It'll parse even things like \"42\" and \"iPhone 8\" as dates!\n //\n // After a bunch of research, I couldn't find a great simple way to recognize a bunch of common date formats.\n // Closest such resource I could find was this list of formats:\n // https://gist.github.com/brandonjp/ac259099ba95868c4826fc0f58f9e7b4\n // But for now it's probably better to stick to one of the \"standard\" computer formats rather than try to recognize various \"humanized\" date time formats.\n // We could try to expand this in the future.\n //\n // As far as libraries go:\n // dayjs has very buggy and long-neglected support for parsing.\n // Temporal doesn't handle general parsing by format.\n // Luxon is maintained and decent, though it doesn't accept a whole list of formats.\n //\n // Right now we also don't know anything about performance.\n const parsed = parseDate(value);\n return parsed ? parsed : CANNOT_COERCE;\n }\n } else if (dataType === \"boolean\") {\n if (value === true || value === false) {\n return value;\n } else if (typeof value === \"number\") {\n return value !== 0;\n } else if (typeof value === \"string\") {\n return value.toLowerCase() === \"true\";\n }\n } else if (dataType === \"string\") {\n return asString(value);\n } else if (dataType === \"auto\") {\n return value;\n }\n } catch (err) {\n // Ignore error; just fail to coerce\n }\n\n return CANNOT_COERCE;\n}\n\nfunction asString(value: unknown) {\n if (value == null) {\n return \"\";\n } else if (typeof value === \"string\") {\n return value;\n } else if (typeof value === \"object\") {\n if (\"toString\" in value && typeof value.toString === \"function\") {\n return value.toString();\n } else {\n return JSON.stringify(value);\n }\n } else {\n return `${value}`;\n }\n}\n","import {\n deriveFieldConfigs,\n NormalizedData,\n useNormalizedData,\n} from \"@plasmicapp/data-sources\";\nimport { Descriptions, Empty } from \"antd\";\nimport React from \"react\";\nimport { BaseColumnConfig, FieldfulProps } from \"../field-mappings\";\nimport { renderValue } from \"../formatting\";\nimport { mkShortId } from \"../utils\";\n\nexport interface RichDetailsProps extends FieldfulProps<DetailsColumnConfig> {\n size?: \"small\" | \"middle\" | \"default\";\n bordered?: boolean;\n layout?: \"horizontal\" | \"vertical\";\n column?: number;\n}\n\nexport function RichDetails(props: RichDetailsProps) {\n const {\n className,\n data: rawData,\n size,\n bordered,\n layout,\n column = 2,\n } = props;\n const data = useNormalizedData(rawData);\n const { columnDefinitions } = useColumnDefinitions(data, props);\n if (!data || !data.data?.[0]) {\n return <Empty className={className} image={Empty.PRESENTED_IMAGE_SIMPLE} />;\n }\n const row = data.data[0];\n return (\n <Descriptions\n className={className}\n size={size}\n bordered={bordered}\n layout={layout}\n column={{\n xs: 1,\n sm: 1,\n md: column,\n }}\n >\n {columnDefinitions.map((col) => (\n <Descriptions.Item label={col.title} key={col.key} span={col.span}>\n {col.render(row)}\n </Descriptions.Item>\n ))}\n </Descriptions>\n );\n}\n\nexport type DetailsColumnConfig = BaseColumnConfig & {\n span?: number;\n};\n\nfunction useColumnDefinitions(\n data: NormalizedData | undefined,\n props: React.ComponentProps<typeof RichDetails>\n) {\n const { fields, setControlContextData } = props;\n return React.useMemo(() => {\n const schema = data?.schema;\n if (!data || !schema) {\n return { normalized: [], columnDefinitions: [] };\n }\n const { mergedFields, minimalFullLengthFields } =\n deriveFieldConfigs<DetailsColumnConfig>(\n fields ?? [],\n schema,\n (field) => ({\n key: mkShortId(),\n isHidden: false,\n dataType: \"auto\" as const,\n ...(field && {\n key: field.id,\n fieldId: field.id,\n title: field.label || field.id,\n expr: (currentItem) => currentItem[field.id],\n }),\n })\n );\n setControlContextData?.({ ...data, mergedFields, minimalFullLengthFields });\n const normalized = mergedFields;\n const columnDefinitions = normalized\n .filter((cconfig) => !cconfig.isHidden)\n .map((cconfig, _columnIndex, _columnsArray) => {\n const columnDefinition = {\n dataIndex: cconfig.fieldId,\n title: cconfig.title,\n key: cconfig.key,\n span: cconfig.span,\n\n render: (record: any) => {\n return renderValue(record, cconfig);\n },\n };\n\n return columnDefinition;\n });\n return { normalized, columnDefinitions };\n }, [fields, data, setControlContextData]);\n}\n","import { buildFieldsPropType } from \"../field-mappings\";\nimport { Registerable, registerComponentHelper } from \"../utils\";\nimport {\n DetailsColumnConfig,\n RichDetails,\n RichDetailsProps,\n} from \"./RichDetails\";\n\nexport * from \"./RichDetails\";\n\nexport function registerRichDetails(loader?: Registerable) {\n registerComponentHelper(loader, RichDetails, {\n name: \"hostless-rich-details\",\n displayName: \"Data details\",\n defaultStyles: {\n width: \"stretch\",\n maxHeight: \"100%\",\n },\n props: {\n data: {\n type: \"dataSourceOpData\" as any,\n description: \"The data to display\",\n },\n fields: buildFieldsPropType<DetailsColumnConfig, RichDetailsProps>({\n fieldTypes: {\n span: {\n type: \"number\",\n displayName: \"Number of columns to span\",\n defaultValueHint: 1,\n },\n },\n }),\n layout: {\n displayName: \"Layout\",\n type: \"choice\",\n options: [\n { value: \"horizontal\", label: \"Horizontal\" },\n { value: \"vertical\", label: \"Vertical\" },\n ],\n defaultValueHint: \"horizontal\",\n },\n column: {\n displayName: \"Items per row\",\n type: \"number\",\n description: \"Number of items to display per row\",\n defaultValueHint: 2,\n },\n size: {\n displayName: \"Spacing\",\n type: \"choice\",\n options: [\n { value: \"small\", label: \"Small\" },\n { value: \"middle\", label: \"Medium\" },\n { value: \"default\", label: \"Large\" },\n ],\n defaultValueHint: \"default\",\n },\n bordered: {\n displayName: \"Show borders?\",\n type: \"boolean\",\n defaultValue: true,\n },\n },\n importPath: \"@plasmicpkgs/plasmic-rich-components/skinny/rich-details\",\n importName: \"RichDetails\",\n });\n}\n","import React from \"react\";\nimport { tinycolor } from \"@ctrl/tinycolor\";\n\nexport function useIsClient() {\n const [loaded, setLoaded] = React.useState(false);\n useIsomorphicLayoutEffect(() => {\n setLoaded(true);\n });\n return loaded;\n}\n\nconst isBrowser = typeof window !== \"undefined\";\nexport const useIsomorphicLayoutEffect = isBrowser\n ? React.useLayoutEffect\n : React.useEffect;\n\nexport function capitalize(text: string) {\n return text.slice(0, 1).toUpperCase() + text.slice(1);\n}\n\nexport function isLight(color: string) {\n const { r, g, b } = tinycolor(color).toRgb();\n return r * 0.299 + g * 0.587 + b * 0.114 > 186;\n}\n","import React from \"react\";\nexport const AnchorLink = React.forwardRef(function AnchorLink(\n props: React.ComponentProps<\"a\">,\n ref: React.Ref<HTMLAnchorElement>\n) {\n return <a {...props} ref={ref} />;\n});\n","import { LogoutOutlined } from \"@ant-design/icons\";\nimport type { MenuDataItem, ProLayoutProps } from \"@ant-design/pro-components\";\nimport { ProConfigProvider, ProLayout } from \"@ant-design/pro-components\";\nimport { useDataEnv, usePlasmicLink } from \"@plasmicapp/host\";\nimport { ConfigProvider, Dropdown, theme } from \"antd\";\nimport React, { ReactNode, useEffect, useRef, useState } from \"react\";\nimport { isLight, useIsClient } from \"../common\";\nimport { AnchorLink } from \"../widgets\";\n\nfunction omitUndefined(x: object) {\n return Object.fromEntries(\n Object.entries(x).filter(([k, v]) => v !== undefined)\n );\n}\n\ninterface NavMenuItem extends Omit<MenuDataItem, \"routes\"> {\n routes?: NavMenuItem[];\n}\n\nexport interface SimpleNavTheme {\n scheme?: \"default\" | \"light\" | \"dark\" | \"custom\" | \"primary\";\n customBgColor?: string;\n}\n\n/**\n * Filter items by condition, and add missing paths so that any added items are visible.\n */\nfunction processNavItems(navMenuItems: NavMenuItem[]): NavMenuItem[] {\n return navMenuItems\n .filter((item) => item.condition === undefined || item.condition)\n .map((item) => ({\n ...item,\n // We fill a default path because otherwise the item doesn't appear at all.\n path: item.path || \"/\",\n routes: item.routes ? processNavItems(item.routes) : undefined,\n }));\n}\n\nexport interface RichLayoutProps extends ProLayoutProps {\n navMenuItems?: NavMenuItem[];\n rootUrl?: string;\n actionsChildren?: ReactNode;\n footerChildren?: ReactNode;\n avatarLabel?: string;\n avatarImage?: string;\n showAvatarMenu?: boolean;\n simpleNavTheme?: SimpleNavTheme;\n logoElement?: ReactNode;\n}\n\n// width: 100% needed because parent is display: flex, which is needed for the min-height behavior.\nconst baseStyles = `\n.ant-pro-layout-bg-list {\n display: none;\n}\n.ant-pro-layout {\n display: flex;\n width: 100%;\n}\n.ant-pro-layout .ant-pro-layout-content {\n padding: 0;\n}\n`;\n\nexport function RichLayout({\n children,\n navMenuItems,\n rootUrl = \"/\",\n actionsChildren,\n footerChildren,\n avatarLabel,\n avatarImage,\n showAvatarMenu,\n className,\n simpleNavTheme,\n logo,\n logoElement,\n ...layoutProps\n}: RichLayoutProps) {\n const $ctx = useDataEnv();\n const ref = useRef<HTMLDivElement>(null);\n const isClient = useIsClient();\n const [pathname, setPathname] = useState<string | undefined>(undefined);\n const [openKeys, setOpenKeys] = useState<string[]>([]);\n const [ready, setReady] = useState(false);\n useEffect(() => {\n setTimeout(() => {\n setReady(true);\n }, 500);\n\n if (typeof location !== \"undefined\") {\n setPathname(location.pathname);\n }\n }, []);\n\n useEffect(() => {\n if (!ready) return;\n if (!ref.current) return;\n // open selected submenu (only opens the last one in the list!)\n const selectedSubmenus: string[] =\n (Array.from(\n ref.current.querySelectorAll(\n \"ul > li.ant-menu-submenu.ant-menu-submenu-selected > div\"\n )\n )\n .map((el) => el.getAttribute(\"data-menu-id\")?.split(\"/\").pop())\n .filter((i) => i)\n .map((i) => `/${i}`) as string[]) || [];\n setOpenKeys(selectedSubmenus);\n }, [ready]);\n\n // The usePlasmicLink function may be undefined, if host is not up to date\n const PlasmicLink = usePlasmicLink?.() ?? AnchorLink;\n const { token } = theme.useToken();\n const origTextColor = token.colorTextBase;\n function getNavBgColor(): string {\n const scheme = simpleNavTheme?.scheme ?? \"default\";\n switch (scheme) {\n case \"primary\":\n return token.colorPrimary;\n case \"dark\":\n // Ant default dark blue Menu color.\n return \"#011528\";\n case \"custom\":\n return simpleNavTheme?.customBgColor ?? token.colorBgBase;\n case \"light\":\n // Just use this sorta ugly gray if using 'light' scheme in 'dark' mode.\n // Otherwise using light scheme in light mode.\n return \"#fff\";\n case \"default\":\n return token.colorBgBase || \"#fff\";\n }\n }\n const navBgColor = getNavBgColor();\n // Dynamically determine whether we need to change the text to black/white or not, based on background color.\n // We don't want light-on-light or dark-on-dark, so if both isNavBgLight and isOrigTextLight are the same, then need to change.\n // If no need to change, we leave text color as is.\n const isNavBgLight = isLight(navBgColor);\n const isOrigTextLight = isLight(origTextColor);\n // Ant will interpret \"\" as defaulting to \"#fff\" for dark mode and \"#000\" in light mode.\n const navTextColor = isNavBgLight !== isOrigTextLight ? undefined : \"\";\n if (!isClient) {\n return null;\n }\n\n const layoutColorOverrides = isNavBgLight\n ? undefined\n : {\n colorBgCollapsedButton: navBgColor,\n colorTextCollapsedButtonHover: \"rgba(255,255,255,0.85)\",\n colorTextCollapsedButton: \"rgba(255,255,255,0.65)\",\n colorMenuBackground: navBgColor,\n colorBgMenuItemCollapsedHover: \"rgba(0,0,0,0.06)\",\n colorBgMenuItemCollapsedSelected: \"rgba(0,0,0,0.15)\",\n colorBgMenuItemCollapsedElevated: \"rgba(0,0,0,0.85)\",\n colorMenuItemDivider: \"rgba(255,255,255,0.15)\",\n colorBgMenuItemHover: \"rgba(0,0,0,0.06)\",\n colorBgMenuItemSelected: \"rgba(0,0,0,0.15)\",\n colorTextMenuSelected: \"#fff\",\n colorTextMenuItemHover: \"rgba(255,255,255,0.75)\",\n colorTextMenu: \"rgba(255,255,255,0.75)\",\n colorTextMenuSecondary: \"rgba(255,255,255,0.65)\",\n colorTextMenuTitle: \"rgba(255,255,255,0.95)\",\n colorTextMenuActive: \"rgba(255,255,255,0.95)\",\n colorTextSubMenuSelected: \"#fff\",\n };\n return (\n <div ref={ref} className={className} style={{ display: \"flex\" }}>\n {/* Remove the always-on fixed gradient background layer. */}\n <style>{baseStyles}</style>\n <ProLayout\n {...layoutProps}\n // This prevents setting a document title. Normally tries to set to either app title or page title (from routes meta).\n pageTitleRender={() => \"\"}\n logo={logo ?? logoElement}\n // Theme just the header. If you simply pass in navTheme=realDark, it affects all main content as well.\n //\n // What we're doing is telling Ant to use the dark mode algorithm. However, dark mode algorithm doesn't change\n // the seed tokens for colorTextBase and colorBgBase - it only fills in #fff and #000 for these if they are\n // unset (\"\"). So that's why further up we may be setting the text color to \"\".\n //\n // I think it doesn't matter too much what is the colorBgBase, since we are setting (Pro-specific) `tokens`\n // further down for actually setting the fill of the nav sections. What matters is the text color - if we're\n // showing a dark background, then we want the text to be white.\n //\n // We could specify darkAlgorithm to ConfigProvider, but IIRC Pro might be setting some of its own tokens\n // based on whether dark is being specified to the ProConfigProvider. So that's why we need that.\n //\n // ProConfigProvider does first read/inherit the theme/tokens from the surrounding ConfigProvider.\n headerRender={(_props, defaultDom) => (\n <ConfigProvider\n theme={{ token: omitUndefined({ colorTextBase: navTextColor }) }}\n >\n <ProConfigProvider dark={!isNavBgLight}>\n {defaultDom}\n </ProConfigProvider>\n </ConfigProvider>\n )}\n token={{\n header: omitUndefined({\n colorBgHeader: navBgColor,\n ...layoutColorOverrides,\n }),\n // Ideally, we'd do something similar to headerRender above, and just specify general dark mode to specify\n // whether all components/text should be light.\n // But for some reason it doesn't work, causing the bg color to be ignored (just the default dark Menu color),\n // *and* the text is just dark as well.\n // Haven't yet been able to unravel the pro components code to figure out the proper way to do this, so just\n // bluntly specifying tokens here, as recommended in some GitHub issue.\n sider: omitUndefined({\n colorMenuBackground: navBgColor,\n ...layoutColorOverrides,\n }),\n }}\n // Tweak defaults. ProLayout is janky and has terrible docs!\n layout={layoutProps.layout ?? \"top\"}\n fixedHeader={layoutProps.fixedHeader ?? false}\n fixSiderbar={\n // Doesn't stretch full height if you set this to false and you're in mix mode.\n layoutProps.layout === \"mix\"\n ? undefined\n : layoutProps.fixSiderbar ?? false\n }\n // This is always needed if you want layout mix to have effect and look any different from layout side - not clear why this should ever be false.\n splitMenus={layoutProps.layout === \"mix\"}\n route={{\n path: rootUrl,\n routes: navMenuItems ? processNavItems(navMenuItems) : undefined,\n }}\n location={{\n pathname,\n }}\n menu={{\n // collapsedShowGroupTitle: true,\n defaultOpenAll: false,\n // hideMenuWhenCollapsed: true,\n }}\n avatarProps={\n showAvatarMenu\n ? {\n src: avatarImage,\n size: \"small\",\n title: avatarLabel,\n render: (_props, dom) => {\n return (\n <Dropdown\n menu={{\n items: [\n {\n key: \"logout\",\n icon: <LogoutOutlined />,\n label: \"Sign out\",\n },\n ],\n }}\n >\n {dom}\n </Dropdown>\n );\n },\n }\n : undefined\n }\n actionsRender={(_props) => {\n return [actionsChildren];\n }}\n menuFooterRender={(props) => {\n if (props?.collapsed) return undefined;\n return footerChildren;\n }}\n onMenuHeaderClick={(e) => console.log(e)}\n openKeys={openKeys}\n onOpenChange={(keys) =>\n keys === false || !ready ? [] : setOpenKeys(keys)\n }\n selectedKeys={[$ctx?.pagePath]}\n menuItemRender={(item, dom) => (\n <PlasmicLink href={item.path}>{dom}</PlasmicLink>\n )}\n headerTitleRender={(logoEl, title, _) => {\n return (\n <PlasmicLink href={rootUrl}>\n {logoEl}\n {title}\n </PlasmicLink>\n );\n }}\n >\n {children}\n </ProLayout>\n </div>\n );\n}\n","import {\n ComponentMeta,\n JSONLikeType,\n} from \"@plasmicapp/host/registerComponent\";\nimport { capitalize } from \"../common\";\nimport { Registerable, registerComponentHelper } from \"../utils\";\nimport { RichLayout, RichLayoutProps } from \"./RichLayout\";\n\nexport * from \"./RichLayout\";\nexport default RichLayout;\n\nfunction generateNavMenuType(\n isNested: boolean,\n remainingDepth: number,\n displayName?: string,\n defaultValue?: any[]\n): object & JSONLikeType<any> {\n return {\n displayName: displayName ? displayName : \"Nested items\",\n type: \"array\",\n defaultValue,\n advanced: isNested,\n itemType: {\n type: \"object\",\n nameFunc: (item: any) =>\n item.name || (!displayName ? \"Unnamed nested item\" : \"Unnamed item\"),\n fields: {\n path: \"href\",\n name: \"string\",\n condition: {\n advanced: true,\n displayName: \"Show only if\",\n type: \"exprEditor\" as any,\n },\n ...(remainingDepth === 0\n ? {}\n : {\n routes: generateNavMenuType(true, remainingDepth - 1),\n }),\n },\n },\n } as const;\n}\n\nconst richLayoutMeta: ComponentMeta<RichLayoutProps> = {\n name: \"hostless-rich-layout\",\n displayName: \"Rich App Layout\",\n props: {\n children: {\n type: \"slot\",\n unstable__isMainContentSlot: true,\n },\n actionsChildren: {\n type: \"slot\",\n hidePlaceholder: true,\n },\n title: {\n displayName: \"Title\",\n type: \"string\",\n defaultValue: \"App title\",\n },\n logo: {\n displayName: \"Logo\",\n type: \"imageUrl\",\n hidden: (ps) => !ps.logo,\n },\n logoElement: {\n type: \"slot\",\n displayName: \"Logo\",\n defaultValue: {\n type: \"img\",\n src: \"https://static1.plasmic.app/fake-logo.svg\",\n },\n hidden: (ps) => !!ps.logo,\n },\n navMenuItems: generateNavMenuType(false, 2, \"Nav menu items\", [\n {\n path: \"/\",\n name: \"Home\",\n },\n ]),\n\n layout: {\n displayName: \"Layout\",\n type: \"choice\",\n options: [\"side\", \"top\", \"mix\"].map((value) => ({\n value,\n label: capitalize(value),\n })),\n defaultValueHint: \"top\",\n },\n\n simpleNavTheme: {\n displayName: \"Theme\",\n type: \"object\",\n fields: {\n scheme: {\n type: \"choice\",\n options: [\"default\", \"primary\", \"light\", \"dark\", \"custom\"].map(\n (v) => ({\n label: capitalize(v),\n value: v,\n })\n ),\n defaultValueHint: \"default\",\n },\n customBgColor: {\n type: \"color\",\n displayName: \"Custom color\",\n hidden: (props) => !(props.simpleNavTheme?.scheme === \"custom\"),\n defaultValue: \"#D73B58\",\n },\n },\n },\n\n // Advanced, show later\n /*\n siderMenuType: {\n displayName: \"Sidebar mode\",\n type: \"choice\",\n options: [\"sub\", \"group\"].map((value) => ({\n value,\n label: capitalize(value),\n })),\n defaultValue: \"sub\",\n },\n contentWidth: {\n displayName: \"Content width\",\n type: \"choice\",\n options: [\"Fluid\", \"Fixed\"],\n defaultValueHint: \"Fluid\",\n },\n */\n fixedHeader: {\n displayName: \"Sticky header\",\n type: \"boolean\",\n hidden: (ps) => (ps.layout ?? \"top\") !== \"top\",\n defaultValueHint: false,\n },\n fixSiderbar: {\n displayName: \"Sticky sidebar\",\n type: \"boolean\",\n hidden: (ps) => (ps.layout ?? \"top\") !== \"side\",\n defaultValueHint: false,\n },\n /*\n showAvatarMenu: {\n displayName: \"Show avatar\",\n type: \"boolean\",\n defaultValue: true,\n },\n avatarLabel: {\n displayName: \"Avatar label\",\n type: \"string\",\n defaultValue: \"User Name\",\n },\n avatarImage: {\n displayName: \"Avatar image\",\n type: \"imageUrl\",\n defaultValue:\n \"https://gw.alipayobjects.com/zos/antfincdn/efFD%24IOql2/weixintupian_20170331104822.jpg\",\n },\n */\n menu: {\n displayName: \"Menu\",\n type: \"object\",\n fields: {\n defaultOpenAll: {\n displayName: \"Default open all\",\n type: \"boolean\",\n },\n hideMenuWhenCollapsed: {\n // displayName: \"\",\n type: \"boolean\",\n },\n },\n },\n },\n\n defaultStyles: {\n width: \"full-bleed\",\n height: \"stretch\",\n minHeight: \"100vh\",\n },\n\n importName: \"RichLayout\",\n importPath: \"@plasmicpkgs/plasmic-rich-components/skinny/rich-layout\",\n};\n\nexport function registerRichLayout(loader?: Registerable) {\n registerComponentHelper(loader, RichLayout, richLayoutMeta);\n}\n","import { PropType } from \"@plasmicapp/host/registerComponent\";\nimport {\n BaseColumnConfig,\n FieldfulProps,\n buildFieldsPropType,\n getFieldSubprops,\n} from \"./field-mappings\";\nimport { capitalize } from \"./common\";\nimport { maybe } from \"./utils\";\n\nexport function roleProp<P extends FieldfulProps<any>>({\n role,\n singular = false,\n advanced = false,\n displayName,\n}: {\n role: string;\n singular?: boolean;\n advanced?: boolean;\n displayName?: string;\n}): PropType<P> {\n return singular\n ? {\n type: \"object\",\n displayName: displayName || `${capitalize(role)} field`,\n advanced,\n hidden: (ps) => !ps.data,\n nameFunc: (item) =>\n maybe(item, (i) =>\n i.isHidden ? \"Hidden\" : i.fieldId || \"Custom value\"\n ),\n fields: getFieldSubprops({\n canChangeField: true,\n noTitle: true,\n }),\n defaultValueHint: (_props, contextData) =>\n (contextData?.minimalFullLengthFields ?? []).find(\n (f) => f.role === role\n ),\n }\n : buildFieldsPropType<BaseColumnConfig, P>({\n displayName: displayName || `${capitalize(role)} fields`,\n advanced,\n noTitle: true,\n canChangeField: true,\n minimalValue: (_props, contextData) =>\n (contextData?.minimalFullLengthFields ?? []).filter(\n (f) => f.role === role\n ),\n });\n}\n\nexport function dataProp<T>(): PropType<T> {\n return {\n type: \"dataSourceOpData\" as any,\n description: \"The data to display\",\n };\n}\n\nexport function commonProps<T>(): Record<string, PropType<T>> {\n return {\n pagination: {\n type: \"boolean\",\n advanced: true,\n defaultValueHint: true,\n },\n\n pageSize: {\n type: \"number\",\n defaultValueHint: 10,\n advanced: true,\n },\n\n hideSearch: {\n type: \"boolean\",\n description: \"Hides the search toolbar\",\n advanced: true,\n },\n };\n}\n\nexport function rowActionsProp<T>(): PropType<T> {\n return {\n type: \"array\",\n displayName: \"Row actions\",\n advanced: true,\n itemType: {\n type: \"object\",\n nameFunc: (item) => item.label,\n fields: {\n type: {\n type: \"choice\",\n options: [\"item\", \"menu\"],\n defaultValue: \"item\",\n },\n label: {\n type: \"string\",\n displayName: \"Action label\",\n },\n children: {\n type: \"array\",\n displayName: \"Menu items\",\n itemType: {\n type: \"object\",\n fields: {\n label: {\n type: \"string\",\n displayName: \"Action label\",\n },\n onClick: {\n type: \"eventHandler\",\n argTypes: [\n { name: \"rowKey\", type: \"string\" },\n { name: \"row\", type: \"object\" },\n ],\n },\n },\n },\n hidden: (_ps, _ctx, { item }) => item.type !== \"menu\",\n },\n onClick: {\n type: \"eventHandler\",\n displayName: \"Action\",\n argTypes: [\n { name: \"rowKey\", type: \"string\" },\n { name: \"row\", type: \"object\" },\n ],\n hidden: (_ps, _ctx, { item }) => item.type !== \"item\",\n },\n },\n },\n };\n}\n\nexport function onRowClickProp<T>(): PropType<T> {\n return {\n type: \"eventHandler\",\n displayName: \"On row clicked\",\n argTypes: [\n { name: \"rowKey\", type: \"string\" },\n { name: \"row\", type: \"object\" },\n { name: \"event\", type: \"object\" },\n ],\n };\n}\n","import { NormalizedData, QueryResult } from \"@plasmicapp/data-sources\";\nimport { Dropdown } from \"antd\";\nimport type { GetRowKey, SorterResult } from \"antd/es/table/interface\";\nimport fastStringify from \"fast-stringify\";\nimport React, { Key, useState } from \"react\";\nimport { BaseColumnConfig } from \"./field-mappings\";\nimport { ensure } from \"./utils\";\n\nexport function useSortedFilteredData(\n data: NormalizedData | undefined,\n columns: BaseColumnConfig[]\n) {\n const [search, setSearch] = useState(\"\");\n const [sortState, setSortState] = useState<\n undefined | { sorter: SorterResult<Record<string, any>> }\n >(undefined);\n const finalData = React.useMemo(() => {\n const filtered = data?.data?.filter((row) =>\n fastStringify(Object.values(row))\n .toLowerCase()\n .includes(search.toLowerCase())\n );\n const sorted = sortState?.sorter.column\n ? // We use .sort() rather than sortBy to use localeCompare\n (() => {\n const cconfig = columns.find(\n (cc) => cc.key === sortState?.sorter.column?.key\n )!;\n const expr = cconfig.expr ?? ((x) => x);\n return (filtered ?? []).sort((aa, bb) => {\n const a =\n expr(aa, cconfig.fieldId ? aa?.[cconfig.fieldId] : null) ??\n null,\n b =\n expr(bb, cconfig.fieldId ? bb?.[cconfig.fieldId] : null) ??\n null;\n // Default nil to '' here because A < null < z which is weird.\n return typeof a === \"string\"\n ? a.localeCompare(b ?? \"\")\n : typeof b === \"string\"\n ? -b.localeCompare(a ?? \"\")\n : a - b;\n });\n })()\n : filtered;\n const reversed =\n sortState?.sorter.order === \"descend\" ? sorted?.reverse() : sorted;\n return reversed;\n }, [data, columns, sortState, search]);\n\n return {\n finalData,\n search,\n setSearch,\n setSortState,\n };\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\nexport type RowAction = RowActionItem | RowActionMenu;\n\nexport function tagDataArray(xs: object[]) {\n return xs.map((x: object, i) => ({ ...x, __tag: i + 1 }));\n}\n\nexport function getTag(x: unknown) {\n return (x as any).__tag;\n}\n\n/**\n * Don't want to simply return undefined, we prefer always having *some* row key so that users can always (say) click on things without needing to explicitly set a row key.\n */\nexport function deriveRowKey(\n _data: QueryResult | undefined,\n rowKey: string | GetRowKey<Record<any, any>> | undefined\n) {\n if (rowKey) {\n return rowKey;\n }\n // Use the index by default.\n return (x: unknown) => {\n return ensure(getTag(x));\n };\n}\n\nexport function deriveKeyOfRow(\n row: any,\n rowKey: string | GetRowKey<any> | undefined\n) {\n if (typeof rowKey === \"function\") {\n return rowKey(row);\n } else if (typeof rowKey === \"string\") {\n return row[rowKey];\n } else {\n return undefined;\n }\n}\n\nexport function renderActions(\n rowActions: RowAction[],\n row: any,\n data: NormalizedData | undefined,\n rowKey: string | ((record: any, index?: number) => Key) | undefined\n) {\n return rowActions.map((_action) => {\n if (_action.type === \"item\") {\n return (\n <a\n key={_action.label}\n style={{\n whiteSpace: \"nowrap\",\n }}\n onClick={() =>\n _action.onClick?.(\n deriveKeyOfRow(row, deriveRowKey(data, rowKey)),\n row\n )\n }\n >\n {_action.label}\n </a>\n );\n } else {\n return (\n <Dropdown\n key={_action.label}\n menu={{\n items: (_action.children ?? []).map((child) => ({\n key: child.label,\n label: child.label,\n onClick: () =>\n child.onClick?.(\n deriveKeyOfRow(row, deriveRowKey(data, rowKey)),\n row\n ),\n })),\n }}\n >\n <a\n href={\"javascript: void 0\"}\n style={{\n whiteSpace: \"nowrap\",\n }}\n >\n {_action.label}\n </a>\n </Dropdown>\n );\n }\n });\n}\n","import { EllipsisOutlined, PlusOutlined } from \"@ant-design/icons\";\nimport { ActionType, ProColumns, ProTable } from \"@ant-design/pro-components\";\nimport {\n deriveFieldConfigs,\n NormalizedData,\n useNormalizedData,\n} from \"@plasmicapp/data-sources\";\nimport { Button, Dropdown } from \"antd\";\nimport type { SizeType } from \"antd/es/config-provider/SizeContext\";\nimport type { GetRowKey } from \"antd/es/table/interface\";\nimport { createObjectCsvStringifier } from \"csv-writer-browser\";\nimport fastStringify from \"fast-stringify\";\nimport React, { ReactNode, useMemo, useRef } from \"react\";\nimport { useIsClient } from \"../common\";\nimport {\n BaseColumnConfig,\n deriveValueType,\n FieldfulProps,\n RowFunc,\n} from \"../field-mappings\";\nimport {\n deriveKeyOfRow,\n deriveRowKey,\n renderActions,\n RowAction,\n tagDataArray,\n useSortedFilteredData,\n} from \"../field-react-utils\";\nimport { renderValue } from \"../formatting\";\nimport { ErrorBoundary, isInteractable, mkShortId } 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\nexport interface RichTableProps extends FieldfulProps<TableColumnConfig> {\n defaultSize?: SizeType;\n pagination?: boolean;\n\n canSelectRows?: \"none\" | \"click\" | \"single\" | \"multiple\";\n\n selectedRowKey?: string;\n selectedRowKeys?: string[];\n onRowSelectionChanged?: (rowKeys: string[], rows: any[]) => void;\n onRowClick?: (rowKey: string, row: any, event: React.MouseEvent) => void;\n\n rowKey?: string | GetRowKey<any>;\n rowActions?: RowAction[];\n\n title?: ReactNode;\n\n addHref?: string;\n\n actions?: Action[];\n customActionChildren?: ReactNode;\n\n pageSize?: number;\n\n hideSearch?: boolean;\n hideDensity?: boolean;\n hideColumnPicker?: boolean;\n hideExports?: boolean;\n hideSelectionBar?: boolean;\n\n scopeClassName?: string;\n themeResetClassName?: string;\n}\n\n// In this code, ColumnConfigs are Plasmic, while ColumnDefinitions are Ant.\nexport function RichTable(props: RichTableProps) {\n const {\n className,\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 // children,\n pagination = true,\n defaultSize,\n title,\n addHref,\n pageSize = 10,\n hideSearch,\n hideDensity = true,\n hideColumnPicker,\n hideExports,\n hideSelectionBar = true,\n rowKey,\n scopeClassName,\n } = props;\n const isClient = useIsClient();\n\n const normalizedData = useNormalizedData(isClient ? rawData : []);\n\n const data = useMemo(() => {\n if (!normalizedData?.data) {\n return normalizedData;\n }\n return { ...normalizedData, data: tagDataArray(normalizedData.data) };\n }, [normalizedData]);\n\n const { columnDefinitions, normalized } = useColumnDefinitions(data, props);\n\n const actionRef = useRef<ActionType>();\n\n const { finalData, search, setSearch, setSortState } = useSortedFilteredData(\n data,\n normalized\n );\n\n const rowSelectionProps = useRowSelectionProps(data, props);\n\n if (!isClient) {\n return null;\n }\n\n return (\n <div className={`${className} ${scopeClassName ?? \"\"}`}>\n <ErrorBoundary canvasEnvId={(props as any)[\"data-plasmic-canvas-envs\"]}>\n <ProTable\n ErrorBoundary={false}\n rowClassName={\n props.onRowClick || props.canSelectRows === \"click\"\n ? \"plasmic-table-row-clickable\"\n : undefined\n }\n actionRef={actionRef}\n columns={columnDefinitions}\n onChange={(_pagination, _filters, sorter, _extra) => {\n setSortState({ sorter: sorter as any });\n }}\n style={{\n width: \"100%\",\n }}\n cardProps={{\n ghost: true,\n }}\n {...rowSelectionProps}\n dataSource={finalData}\n rowKey={deriveRowKey(data, rowKey)}\n defaultSize={defaultSize}\n editable={{ type: \"multiple\" }}\n search={false}\n options={{\n setting: hideColumnPicker\n ? false\n : {\n listsHeight: 400,\n },\n reload: false,\n density: !hideDensity,\n }}\n pagination={\n pagination\n ? {\n pageSize,\n onChange: (page) => console.log(page),\n showSizeChanger: false,\n }\n : false\n }\n dateFormatter=\"string\"\n headerTitle={title}\n toolbar={{\n search: !hideSearch\n ? {\n value: search,\n onChange: (e) => setSearch(e.target.value),\n onSearch: () => {\n return;\n },\n placeholder: \"Search\",\n }\n : undefined,\n }}\n toolBarRender={() =>\n [\n addHref && (\n <Button\n key=\"button\"\n icon={<PlusOutlined />}\n type=\"primary\"\n href={addHref}\n >\n Add\n </Button>\n ),\n !hideExports && <ExportMenu data={data} />,\n ].filter((x) => !!x)\n }\n />\n </ErrorBoundary>\n {/*Always hide the weird pin left/right buttons for now, which also have render layout issues*/}\n <style\n dangerouslySetInnerHTML={{\n __html: `\n :where(.css-dev-only-do-not-override-1p704s4).ant-pro-table-column-setting-overlay .ant-tree-treenode:hover .ant-pro-table-column-setting-list-item-option {\n display: none;\n }\n .plasmic-table-row-clickable {\n cursor: pointer;\n }\n .ant-pro-table-list-toolbar-right {\n flex-wrap: initial;\n flex-shrink: 0;\n }\n .ant-pro-table, .ant-pro-table > .ant-pro-card, .ant-pro-table .ant-table-wrapper, .ant-pro-table .ant-spin-nested-loading, .ant-pro-table .ant-table-container {\n height: 100%;\n }\n .ant-pro-table .ant-spin-container {\n height: 100%;\n display: flex;\n flex-direction: column;\n }\n .ant-pro-table .ant-table {\n flex-grow: 1;\n min-height: 0;\n }\n .ant-pro-table .ant-pagination {\n flex-shrink: 0;\n }\n .ant-pro-table .ant-table-content {\n overflow: auto !important;\n height: 100%;\n }\n .ant-pro-table > .ant-pro-card > .ant-pro-card-body {\n display: flex;\n flex-direction: column;\n }\n .ant-pro-table .ant-table-wrapper {\n flex-grow: 1;\n min-height: 0;\n }\n .ant-pro-table .ant-table-thead > tr > th, .ant-pro-table .ant-table-thead > tr > td.ant-table-selection-column {\n position: sticky;\n top: 0;\n z-index: 2;\n }\n .ant-pro-table .ant-table-thead > tr > th.ant-table-cell-fix-left, .ant-pro-table .ant-table-thead > tr > th.ant-table-cell-fix-right {\n z-index: 3;\n }\n .ant-pro-table .ant-table-tbody > tr > td {\n z-index: 0;\n }\n .ant-pro-table .ant-table-tbody > tr > td.ant-table-cell-fix-left,.ant-pro-table .ant-table-tbody > tr > td.ant-table-cell-fix-right {\n z-index: 1;\n }\n ${\n scopeClassName && hideSelectionBar\n ? `\n .${scopeClassName} .ant-pro-table-alert {\n display: none;\n }\n `\n : \"\"\n }\n `,\n }}\n />\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 = (): TableColumnConfig =>\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 } as const);\n\nexport type TableColumnConfig = BaseColumnConfig & {\n isEditableExpr: RowFunc<boolean>;\n disableSorting: boolean;\n sortByExpr?: RowFunc<any>;\n formatting: StyleConfig;\n};\n\nfunction useColumnDefinitions(\n data: NormalizedData | undefined,\n props: React.ComponentProps<typeof RichTable>\n) {\n const { fields, setControlContextData, rowActions } = props;\n return React.useMemo(() => {\n const schema = data?.schema;\n if (!data || !schema) {\n return { normalized: [], columnDefinitions: [] };\n }\n const { mergedFields, minimalFullLengthFields } =\n deriveFieldConfigs<TableColumnConfig>(fields ?? [], schema, (field) => ({\n ...defaultColumnConfig(),\n ...(field && {\n key: field.id,\n fieldId: field.id,\n title: field.label || field.id,\n expr: (currentItem) => currentItem[field.id],\n }),\n }));\n setControlContextData?.({ ...data, mergedFields, minimalFullLengthFields });\n const normalized = mergedFields;\n const columnDefinitions: ProColumns<any, any>[] = normalized\n .filter((cconfig) => !cconfig.isHidden)\n .map((cconfig, _columnIndex, _columnsArray) => {\n const columnDefinition: ProColumns<any, any> = {\n dataIndex: cconfig.fieldId,\n title: cconfig.title,\n // dataIndex: cconfig,\n key: cconfig.key,\n valueType: deriveValueType(cconfig),\n\n // To come later\n readonly: false,\n sorter: !cconfig.disableSorting,\n copyable: false,\n ellipsis: false,\n tip: undefined,\n formItemProps: {\n rules: [],\n },\n disable: false,\n valueEnum: undefined,\n search: undefined,\n hideInSearch: false,\n renderFormItem: (_, { defaultRender }) => {\n return defaultRender(_);\n },\n\n render: (_value: any, record: any, _rowIndex: any) => {\n return renderValue(record, cconfig);\n },\n };\n\n return columnDefinition;\n });\n const rowKey = props.rowKey;\n if (rowActions && rowActions.length > 0) {\n columnDefinitions.push({\n title: \"Actions\",\n valueType: \"option\",\n key: \"__plasmicActions\",\n fixed: \"right\",\n className: props.themeResetClassName,\n render: (_text, row) => [\n ...renderActions(rowActions, row, data, rowKey),\n ],\n });\n }\n return { normalized, columnDefinitions };\n }, [fields, data, setControlContextData, rowActions]);\n}\n\nfunction useRowSelectionProps(\n data: NormalizedData | undefined,\n props: React.ComponentProps<typeof RichTable>\n): Partial<React.ComponentProps<typeof ProTable>> {\n const {\n canSelectRows,\n selectedRowKey,\n selectedRowKeys,\n onRowSelectionChanged,\n rowKey,\n onRowClick,\n } = props;\n const deriveSelectedRowKeys = () => {\n if (\n !canSelectRows ||\n canSelectRows === \"none\" ||\n !deriveRowKey(data, rowKey)\n ) {\n return [];\n }\n\n if (canSelectRows === \"multiple\") {\n return selectedRowKeys ?? [];\n } else if (selectedRowKey) {\n return [selectedRowKey];\n } else {\n return [];\n }\n };\n\n const rowSelection: React.ComponentProps<typeof ProTable>[\"rowSelection\"] =\n canSelectRows && canSelectRows !== \"none\"\n ? {\n type:\n canSelectRows === \"single\" || canSelectRows === \"click\"\n ? \"radio\"\n : \"checkbox\",\n selectedRowKeys: deriveSelectedRowKeys(),\n onChange: (rowKeys, rows) => {\n onRowSelectionChanged?.(rowKeys as string[], rows);\n },\n alwaysShowAlert: true,\n ...(canSelectRows === \"click\" && {\n renderCell: () => null,\n columnWidth: 0,\n columnTitle: null,\n hideSelectAll: true,\n }),\n }\n : undefined;\n return {\n rowSelection,\n onRow: (row) => ({\n onClick: (event) => {\n const key = deriveKeyOfRow(row, deriveRowKey(data, rowKey));\n if (key != null && !isInteractable(event.target as HTMLElement)) {\n if (canSelectRows === \"click\") {\n onRowSelectionChanged?.([key], [row]);\n }\n onRowClick?.(key, row, event);\n }\n },\n }),\n };\n}\n\nfunction ExportMenu(props: { data: NormalizedData | undefined }) {\n const { data } = props;\n\n return (\n <Dropdown\n key=\"menu\"\n menu={{\n items: [\n {\n label: \"Download as CSV\",\n key: \"csv\",\n onClick: async () => {\n const writer = createObjectCsvStringifier({\n header:\n data?.schema?.fields.map((f) => ({\n id: f.id,\n title: f.id,\n })) ?? [],\n });\n const dataStr =\n writer.getHeaderString() +\n writer.stringifyRecords(data?.data as any);\n\n // const dataStr = stringify(data?.data as any, {\n // columns:\n // tryGetSchema(data)?.fields.map((f) => f.id) ?? [],\n // header: true,\n // });\n\n const filename = \"data.csv\";\n\n // Adapted from https://stackoverflow.com/a/68771795\n const blob = new Blob([dataStr], {\n type: \"text/csv;charset=utf-8;\",\n });\n if ((navigator as any).msSaveBlob) {\n // In case of IE 10+\n (navigator as any).msSaveBlob(blob, filename);\n } else {\n const link = document.createElement(\"a\");\n if (link.download !== undefined) {\n // Browsers that support HTML5 download attribute\n const url = URL.createObjectURL(blob);\n link.setAttribute(\"href\", url);\n link.setAttribute(\"download\", filename);\n link.style.visibility = \"hidden\";\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n }\n }\n },\n },\n {\n label: \"Download as JSON\",\n key: \"json\",\n onClick: () => {\n const dataStr = fastStringify(data?.data);\n const dataUri = `data:application/json;charset=utf-8, ${encodeURIComponent(\n dataStr\n )}`;\n\n const exportFileDefaultName = \"data.json\";\n\n const linkElement = document.createElement(\"a\");\n linkElement.setAttribute(\"href\", dataUri);\n linkElement.setAttribute(\"download\", exportFileDefaultName);\n linkElement.click();\n },\n },\n ],\n }}\n >\n <Button>\n <EllipsisOutlined />\n </Button>\n </Dropdown>\n );\n}\n","import { ComponentMeta } from \"@plasmicapp/host/registerComponent\";\nimport {\n commonProps,\n dataProp,\n onRowClickProp,\n rowActionsProp,\n} from \"../common-prop-types\";\nimport { buildFieldsPropType } from \"../field-mappings\";\nimport { Registerable, registerComponentHelper } from \"../utils\";\nimport { RichTable, RichTableProps, TableColumnConfig } from \"./RichTable\";\n\nexport * from \"./RichTable\";\nexport default RichTable;\n\nexport const tableHelpers = {\n states: {\n selectedRow: {\n onChangeArgsToValue: (rowKeys: string[], rows: any[]) => {\n return rows[0];\n },\n },\n selectedRows: {\n onChangeArgsToValue: (rowKeys: string[], rows: any[]) => {\n return rows;\n },\n },\n selectedRowKey: {\n onChangeArgsToValue: (rowKeys: string[], rows: any[]) => {\n return rowKeys[0];\n },\n },\n selectedRowKeys: {\n onChangeArgsToValue: (rowKeys: string[], rows: any[]) => {\n return rowKeys;\n },\n },\n },\n};\n\nconst dataTableMeta: ComponentMeta<RichTableProps> = {\n name: \"hostless-rich-table\",\n displayName: \"Table\",\n defaultStyles: {\n width: \"stretch\",\n padding: \"16px\",\n maxHeight: \"100%\",\n },\n props: {\n data: dataProp(),\n\n fields: buildFieldsPropType<TableColumnConfig, RichTableProps>({\n fieldTypes: {\n disableSorting: {\n type: \"boolean\",\n displayName: \"Disable sorting?\",\n defaultValueHint: false,\n },\n },\n }),\n\n canSelectRows: {\n type: \"choice\",\n displayName: \"Select rows?\",\n options: [\n { label: \"No\", value: \"none\" },\n { label: \"By clicking a row\", value: \"click\" },\n { label: \"Using radio buttons\", value: \"single\" },\n { label: \"Using checkboxes\", value: \"multiple\" },\n ],\n defaultValueHint: \"none\",\n description:\n \"Lets user select table rows by clicking on a row, or using radio buttons, or checkboxes if multiple rows can be selected together. If you have interactive elements in your row and you don't want clicking on them to select the row, you may use radio buttons instead.\",\n },\n\n rowKey: {\n type: \"string\",\n displayName: \"Row key\",\n helpText:\n \"Column key to use as row key; can also be a function that takes in a row and returns a key value\",\n hidden: (ps) => !ps.canSelectRows || ps.canSelectRows === \"none\",\n },\n\n selectedRowKey: {\n type: \"string\",\n displayName: \"Selected Row Key\",\n hidden: (ps) =>\n ps.canSelectRows !== \"single\" && ps.canSelectRows !== \"click\",\n advanced: true,\n },\n selectedRowKeys: {\n type: \"array\",\n displayName: \"Selected Row Keys\",\n hidden: (ps) => ps.canSelectRows !== \"multiple\",\n advanced: true,\n },\n onRowSelectionChanged: {\n type: \"eventHandler\",\n displayName: \"On row selection changed\",\n argTypes: [\n { name: \"rowKeys\", type: \"object\" },\n { name: \"rows\", type: \"object\" },\n ],\n },\n\n onRowClick: onRowClickProp(),\n\n rowActions: rowActionsProp(),\n\n defaultSize: {\n displayName: \"Density\",\n type: \"choice\",\n options: [\n {\n value: \"large\",\n label: \"Larger\",\n },\n {\n value: \"middle\",\n label: \"Medium\",\n },\n {\n value: \"small\",\n label: \"Compact\",\n },\n ],\n defaultValueHint: \"large\",\n advanced: true,\n },\n\n ...commonProps(),\n\n hideExports: {\n type: \"boolean\",\n description: \"Hides the button for exporting table data to CSV\",\n advanced: true,\n },\n\n hideDensity: {\n type: \"boolean\",\n description: \"Hides the control for changing the density of the table\",\n advanced: true,\n defaultValueHint: true,\n },\n\n hideColumnPicker: {\n type: \"boolean\",\n description: \"Hides the control for reordering and pinning columns\",\n advanced: true,\n },\n\n hideSelectionBar: {\n type: \"boolean\",\n description: \"Hides the toolbar that allows the user to clear selection\",\n advanced: true,\n hidden: (ps) => !ps.canSelectRows || ps.canSelectRows === \"none\",\n defaultValueHint: true,\n },\n scopeClassName: {\n type: \"styleScopeClass\",\n scopeName: \"instance\",\n } as any,\n themeResetClassName: {\n type: \"themeResetClass\",\n targetAllTags: true,\n },\n },\n states: {\n selectedRowKey: {\n type: \"writable\",\n valueProp: \"selectedRowKey\",\n onChangeProp: \"onRowSelectionChanged\",\n variableType: \"text\",\n hidden: (ps) =>\n !(ps.canSelectRows === \"click\" || ps.canSelectRows === \"single\"),\n ...tableHelpers.states.selectedRowKey,\n },\n selectedRowKeys: {\n type: \"writable\",\n valueProp: \"selectedRowKeys\",\n onChangeProp: \"onRowSelectionChanged\",\n variableType: \"array\",\n hidden: (ps) => !(ps.canSelectRows === \"multiple\"),\n ...tableHelpers.states.selectedRowKeys,\n },\n selectedRow: {\n type: \"readonly\",\n onChangeProp: \"onRowSelectionChanged\",\n variableType: \"object\",\n hidden: (ps) =>\n !(ps.canSelectRows === \"click\" || ps.canSelectRows === \"single\"),\n ...tableHelpers.states.selectedRow,\n },\n selectedRows: {\n type: \"readonly\",\n onChangeProp: \"onRowSelectionChanged\",\n variableType: \"array\",\n hidden: (ps) => !(ps.canSelectRows === \"multiple\"),\n ...tableHelpers.states.selectedRows,\n },\n },\n componentHelpers: {\n helpers: tableHelpers,\n importName: \"tableHelpers\",\n importPath: \"@plasmicpkgs/plasmic-rich-components/skinny/rich-table\",\n },\n importName: \"RichTable\",\n importPath: \"@plasmicpkgs/plasmic-rich-components/skinny/rich-table\",\n};\n\nexport function registerRichTable(loader?: Registerable) {\n registerComponentHelper(loader, RichTable, dataTableMeta);\n}\n","import { ActionType } from \"@ant-design/pro-components\";\nimport {\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, useRef } 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 title,\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 const actionRef = useRef<ActionType>();\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, setSortState } = 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, index) => {\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) return undefined;\n const href = linkTo?.(record);\n if (!href && !onRowClick) return undefined;\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","import {\n deriveFieldConfigs,\n NormalizedData,\n useNormalizedData,\n} from \"@plasmicapp/data-sources\";\nimport { parseDate } from \"@plasmicpkgs/luxon-parser\";\nimport { Badge, Calendar } from \"antd\";\nimport dayjs, { Dayjs } from \"dayjs\";\nimport groupBy from \"lodash/groupBy\";\nimport React, { useMemo } from \"react\";\nimport { BaseColumnConfig, FieldfulProps, RowFunc } from \"../field-mappings\";\nimport { getFieldAggregateValue } from \"../formatting\";\nimport {\n ensure,\n ensureArray,\n isLikeColor,\n isLikeDate,\n isValidIsoDate,\n maybe,\n mkShortId,\n} from \"../utils\";\n\nimport localeData from \"dayjs/plugin/localeData\";\nimport weekday from \"dayjs/plugin/weekday\";\n\ndayjs.extend(weekday);\ndayjs.extend(localeData);\n\ntype RichCalendarPropsBase = Omit<\n React.ComponentProps<typeof Calendar>,\n \"value\" | \"defaultValue\" | \"validRange\"\n>;\n\nexport interface RichCalendarProps\n extends FieldfulProps<EventsConfig>,\n RichCalendarPropsBase {\n color: EventsConfig[];\n date: EventsConfig[];\n title: EventsConfig[];\n value: string;\n defaultValue: string;\n validRange: [string | undefined, string | undefined] | undefined;\n}\n\ninterface Event {\n date: string;\n title: string;\n color?: string;\n}\n\nfunction getEventFullDate(date?: string): string | undefined {\n const parsed = parseDate(date);\n if (!parsed) return undefined;\n const yyyy = parsed.getFullYear();\n const mm = (parsed.getMonth() + 1).toString().padStart(2, \"0\");\n const dd = parsed.getDate().toString().padStart(2, \"0\");\n return `${yyyy}-${mm}-${dd}`;\n}\n\nfunction getEventMonthYear(date?: string): string | undefined {\n return getEventFullDate(date)?.substring(0, 7);\n}\n\nfunction EventCell({ events }: { events: Event[] }) {\n if (!events || !events.length) return null;\n return (\n <ul style={{ all: \"unset\" }}>\n {events.map((e) => (\n <li key={JSON.stringify(e)} style={{ all: \"unset\", display: \"block\" }}>\n <Badge color={e.color || \"green\"} text={e.title} />\n </li>\n ))}\n </ul>\n );\n}\n\nexport function RichCalendar(props: RichCalendarProps) {\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 value: isoValue,\n defaultValue: isoDefaultValue,\n validRange: isoValidRange,\n dateCellRender,\n dateFullCellRender,\n monthCellRender,\n monthFullCellRender,\n ...rest\n } = props;\n const data = useNormalizedData(rawData);\n\n const { normalized, finalRoles: roleConfigs } = useRoleDefinitions(\n data,\n props\n );\n const {\n eventsByDate,\n eventsByMonth,\n }: {\n eventsByDate: Record<string, Event[]>;\n eventsByMonth: Record<string, Event[]>;\n } = useMemo(() => {\n if (!data) return { eventsByDate: {}, eventsByMonth: {} };\n return data?.data.reduce(\n (acc: any, item: any) => {\n const date = getFieldAggregateValue(item, roleConfigs.date);\n const title = getFieldAggregateValue(item, roleConfigs.title);\n const color = getFieldAggregateValue(item, roleConfigs.color);\n\n const event = {\n date,\n title,\n color,\n };\n\n const keyDate = getEventFullDate(date); // extract the date-only part\n const keyMonth = getEventMonthYear(date); // extract the month-year part\n if (keyDate && keyMonth) {\n acc.eventsByDate[keyDate] = [\n ...(acc.eventsByDate[keyDate] || []),\n event,\n ];\n acc.eventsByMonth[keyMonth] = [\n ...(acc.eventsByMonth[keyMonth] || []),\n event,\n ];\n }\n\n return acc;\n },\n { eventsByDate: {}, eventsByMonth: {} }\n );\n }, [data, roleConfigs.color, roleConfigs.date, roleConfigs.title]);\n\n const value = useMemo(\n () => (isValidIsoDate(isoValue) ? dayjs(isoValue) : dayjs()),\n [isoValue]\n ); // https://day.js.org/docs/en/parse/now`\n const defaultValue = useMemo(\n () => (isValidIsoDate(isoDefaultValue) ? dayjs(isoDefaultValue) : dayjs()),\n [isoDefaultValue]\n ); // https://day.js.org/docs/en/parse/now\n\n const validRange: [Dayjs, Dayjs] | undefined = useMemo(() => {\n if (!isoValidRange) return undefined;\n\n const range = isoValidRange\n .filter((dateIso: string | undefined) => isValidIsoDate(dateIso))\n .map((d: any) => dayjs(d));\n\n if (range.length !== 2) return undefined;\n return [range[0], range[1]];\n }, [isoValidRange]);\n\n const key = useMemo(() => JSON.stringify(roleConfigs), [roleConfigs]);\n\n return (\n <Calendar\n {...rest}\n key={key}\n validRange={validRange}\n // for interactive / preview mode\n defaultValue={defaultValue}\n // for design mode\n value={value}\n dateCellRender={\n dateCellRender\n ? dateCellRender\n : (date: Dayjs) => (\n <EventCell\n events={eventsByDate[getEventFullDate(date.toISOString())!]}\n />\n )\n }\n monthCellRender={\n monthCellRender\n ? monthCellRender\n : (date: Dayjs) => (\n <EventCell\n events={eventsByMonth[getEventMonthYear(date.toISOString())!]}\n />\n )\n }\n dateFullCellRender={dateFullCellRender}\n monthFullCellRender={monthFullCellRender}\n />\n );\n}\n\ninterface StyleConfig {\n styles: Record<string, any>;\n align: \"left\" | \"center\" | \"right\";\n freeze: \"off\" | \"left\" | \"right\";\n}\n\nconst defaultColumnConfig = (): EventsConfig =>\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 = [\"date\", \"title\", \"color\", \"unset\"] as const;\n\nexport type Role = (typeof roles)[number];\n\nexport type EventsConfig = 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 RichCalendar>\n) {\n const { fields, setControlContextData } = props;\n\n return React.useMemo(() => {\n const schema = data?.schema;\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(\"date\"),\n ...tagFieldConfigs(\"color\"),\n ...tagFieldConfigs(\"title\"),\n ];\n\n function doDeriveFieldConfigs(mode: \"existing\" | \"defaults\") {\n return deriveFieldConfigs<EventsConfig>(\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 date field.\n // Filter mergedFields where there are mostly values (in the sampleRows) that are a string that looks like a date in ISO date-only or date-time format, or a timestamp\n // Of these, prefer the one with a name like date, timestamp.\n // Otherwise, prefer the one with a name with that substring.\n // Otherwise, pick any remaining one.\n if (\n data.data.length > 0 &&\n !defaultMergedFields.some((field) => field.role === \"date\")\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 dateFieldCandidates = defaultMergedFields.filter(\n (field) =>\n !field.role &&\n sampleRows.filter(\n (row) => field.fieldId && isLikeDate(row[field.fieldId])\n ).length >=\n sampleRows.length / 2\n );\n const dateField =\n dateFieldCandidates.find((f) =>\n f.fieldId?.match(/^(date|datetime|timestamp|eventdate)$/i)\n ) ??\n dateFieldCandidates.find((f) =>\n f.fieldId?.match(/.*(date|time|event).*/i)\n ) ??\n dateFieldCandidates[0];\n if (dateField) {\n dateField.role = \"date\";\n }\n }\n\n // Find a good default color field.\n // Filter mergedFields where there are mostly values (in the sampleRows) that are a string that looks like a color code.\n // Of these, prefer the one with a name like color.\n // Otherwise, prefer the one with a name with that substring.\n // Otherwise, pick any remaining one.\n if (\n data.data.length > 0 &&\n !defaultMergedFields.some((field) => field.role === \"color\")\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 colorFieldCandidates = defaultMergedFields.filter(\n (field) =>\n !field.role &&\n sampleRows.filter(\n (row) => field.fieldId && isLikeColor(row[field.fieldId])\n ).length >=\n sampleRows.length / 2\n );\n const colorField =\n colorFieldCandidates.find((f) =>\n f.fieldId?.match(/^(color|hex|rgb|hsl|rgba|cmyk|hsv|hsb)$/i)\n ) ??\n colorFieldCandidates.find((f) =>\n f.fieldId?.match(/.*(color|hex|rgb|hsl|rgba|cmyk|hsv|hsb).*/i)\n ) ??\n colorFieldCandidates[0];\n if (colorField) {\n colorField.role = \"color\";\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?.toLowerCase().match(/^(title|name||event[ _-]?name)$/)\n );\n if (titleField) {\n titleField.role = \"title\";\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, EventsConfig[]>> = {};\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 }, [data, setControlContextData, props]);\n}\n","import dayjs, { Dayjs } from \"dayjs\";\nimport { roleProp } from \"../common-prop-types\";\nimport {\n isValidIsoDate,\n Registerable,\n registerComponentHelper,\n} from \"../utils\";\nimport { RichCalendar } from \"./RichCalendar\";\n\nexport * from \"./RichCalendar\";\n\nexport const calendarHelpers = {\n states: {\n mode: {\n onChangeArgsToValue: (_date: Dayjs, mode: string) => mode,\n },\n selectedDate: {\n onChangeArgsToValue: (date: Dayjs) => dayjs(date).toISOString(),\n },\n },\n};\n\nexport const calendarComponentName = \"hostless-rich-calendar\";\n\nexport function registerRichCalendar(loader?: Registerable) {\n registerComponentHelper(loader, RichCalendar, {\n name: calendarComponentName,\n displayName: \"Calendar\",\n props: {\n data: {\n type: \"dataSourceOpData\" as any,\n displayName: \"Events\",\n description:\n \"The events data should be a list of records with some date, title and (optionally) color fields. The component will infer the date field from the provided data, but you can also explicitly specify that below.\",\n },\n title: roleProp({ role: \"title\" }),\n date: roleProp({ role: \"date\", singular: true }),\n color: roleProp({ role: \"color\", singular: true }),\n value: {\n // Must have a corresponding state and eventhandler for any prop that I want to be able to change in interactive mode.\n editOnly: true,\n uncontrolledProp: \"defaultValue\",\n type: \"dateString\",\n description: `The date selected by default as an ISO string`,\n validator: (value, ps) => {\n if (!ps.value) return true;\n if (!ps.validRange) return true;\n if (!isValidIsoDate(value)) return \"Not a valid ISO string.\";\n if (\n dayjs(value).isBefore(ps.validRange[0]) ||\n dayjs(value).isAfter(ps.validRange[1])\n )\n return \"Not within the valid range\";\n return true;\n },\n },\n mode: {\n type: \"choice\",\n options: [\"month\", \"year\"],\n description: \"The default display mode of the calendar.\",\n defaultValueHint: \"month\",\n },\n validRange: {\n type: \"dateRangeStrings\",\n description: \"Only allow selection of dates that lie within this range\",\n advanced: true,\n validator: (value, ps) => {\n if (!value) return true;\n if (!Array.isArray(value) || value.length !== 2)\n return \"Not an array with 2 items\";\n if (!isValidIsoDate(value[0]) || !isValidIsoDate(value[1]))\n return \"Min or max range is not in valid ISO date format.\";\n return true;\n },\n },\n headerRender: {\n type: \"slot\",\n renderPropParams: [\"headerProps\"],\n hidePlaceholder: true,\n displayName: \"Custom Header\",\n },\n dateCellRender: {\n type: \"slot\",\n renderPropParams: [\"dateProps\"],\n hidePlaceholder: true,\n displayName: \"Append Date Cell\",\n },\n dateFullCellRender: {\n type: \"slot\",\n renderPropParams: [\"dateProps\"],\n hidePlaceholder: true,\n displayName: \"Custom Date Cell\",\n },\n monthCellRender: {\n type: \"slot\",\n renderPropParams: [\"dateProps\"],\n hidePlaceholder: true,\n displayName: \"Append Month Cell\",\n },\n monthFullCellRender: {\n type: \"slot\",\n renderPropParams: [\"dateProps\"],\n hidePlaceholder: true,\n displayName: \"Custom Month Cell\",\n },\n onPanelChange: {\n type: \"eventHandler\",\n description:\n \"Triggers when the calendar mode changes (e.g. from month to year mode)\",\n argTypes: [\n { name: \"date\", type: \"object\" },\n { name: \"mode\", type: \"string\" },\n ],\n },\n onChange: {\n type: \"eventHandler\",\n argTypes: [{ name: \"date\", type: \"object\" }],\n },\n },\n states: {\n mode: {\n type: \"writable\",\n valueProp: \"mode\",\n onChangeProp: \"onPanelChange\",\n variableType: \"text\",\n ...calendarHelpers.states.mode,\n },\n selectedDate: {\n type: \"writable\",\n valueProp: \"value\",\n onChangeProp: \"onChange\",\n variableType: \"text\",\n ...calendarHelpers.states.selectedDate,\n },\n },\n componentHelpers: {\n helpers: calendarHelpers,\n importName: \"calendarHelpers\",\n importPath: \"@plasmicpkgs/plasmic-rich-components/skinny/rich-calendar\",\n },\n importPath: \"@plasmicpkgs/plasmic-rich-components/skinny/rich-calendar\",\n importName: \"RichCalendar\",\n });\n}\n","import { registerRichDetails } from \"./rich-details\";\nimport { registerRichLayout } from \"./rich-layout\";\nimport { registerRichTable } from \"./rich-table\";\nimport { Registerable } from \"./utils\";\nimport { registerRichList } from \"./rich-list\";\nimport { registerRichCalendar } from \"./rich-calendar\";\n\nexport { RichLayout } from \"./rich-layout\";\nexport { RichList } from \"./rich-list\";\nexport { RichTable, tableHelpers } from \"./rich-table\";\nexport { RichDetails } from \"./rich-details\";\nexport { RichCalendar, calendarHelpers } from \"./rich-calendar\";\n\nexport function registerAll(loader?: Registerable) {\n registerRichLayout(loader);\n registerRichList(loader);\n registerRichTable(loader);\n registerRichDetails(loader);\n registerRichCalendar(loader);\n}\nexport { useSortedFilteredData } from \"./field-react-utils\";\nexport { isLikeImage } from \"./utils\";\nexport { renderActions } from \"./field-react-utils\";\nexport type { RowAction } from \"./field-react-utils\";\nexport { deriveRowKey } from \"./field-react-utils\";\nexport { deriveKeyOfRow } from \"./field-react-utils\";\nexport { isInteractable } from \"./utils\";\nexport { onRowClickProp } from \"./common-prop-types\";\nexport { rowActionsProp } from \"./common-prop-types\";\nexport { commonProps } from \"./common-prop-types\";\nexport { dataProp } from \"./common-prop-types\";\nexport { ensureArray } from \"./utils\";\n"],"names":["__spreadValues","_a","__spreadProps","__objRest","useColumnDefinitions","AnchorLink","_b","defaultColumnConfig","useRoleDefinitions","roles"],"mappings":"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"}