@plasmicpkgs/plasmic-rich-components 1.0.220 → 1.0.221
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.
- package/dist/.tsbuildinfo +1 -1
- package/dist/field-mappings.d.ts +2 -2
- package/dist/index.js +58 -47
- package/dist/index.js.map +1 -1
- package/dist/plasmic-rich-components.esm.js +58 -47
- package/dist/plasmic-rich-components.esm.js.map +1 -1
- package/dist/rich-table/index.d.ts +4 -4
- package/package.json +4 -4
- package/skinny/{common-prop-types-988c65db.esm.js → common-prop-types-82f3a4ed.esm.js} +2 -2
- package/skinny/{common-prop-types-988c65db.esm.js.map → common-prop-types-82f3a4ed.esm.js.map} +1 -1
- package/skinny/{common-prop-types-193ce561.cjs.js → common-prop-types-94b20130.cjs.js} +2 -2
- package/skinny/{common-prop-types-193ce561.cjs.js.map → common-prop-types-94b20130.cjs.js.map} +1 -1
- package/skinny/field-mappings.d.ts +2 -2
- package/skinny/{formatting-0acc57f5.esm.js → formatting-6f22c9d6.esm.js} +15 -15
- package/skinny/formatting-6f22c9d6.esm.js.map +1 -0
- package/skinny/{formatting-6dc71cdd.cjs.js → formatting-939d0aa3.cjs.js} +15 -15
- package/skinny/formatting-939d0aa3.cjs.js.map +1 -0
- package/skinny/rich-calendar/index.cjs.js +29 -20
- package/skinny/rich-calendar/index.cjs.js.map +1 -1
- package/skinny/rich-calendar/index.esm.js +29 -20
- package/skinny/rich-calendar/index.esm.js.map +1 -1
- package/skinny/rich-details/index.cjs.js +1 -1
- package/skinny/rich-details/index.esm.js +1 -1
- package/skinny/rich-layout/index.cjs.js +7 -4
- package/skinny/rich-layout/index.cjs.js.map +1 -1
- package/skinny/rich-layout/index.esm.js +7 -4
- package/skinny/rich-layout/index.esm.js.map +1 -1
- package/skinny/rich-list/index.cjs.js +8 -9
- package/skinny/rich-list/index.cjs.js.map +1 -1
- package/skinny/rich-list/index.esm.js +9 -10
- package/skinny/rich-list/index.esm.js.map +1 -1
- package/skinny/rich-table/index.cjs.js +6 -6
- package/skinny/rich-table/index.cjs.js.map +1 -1
- package/skinny/rich-table/index.d.ts +4 -4
- package/skinny/rich-table/index.esm.js +6 -6
- package/skinny/rich-table/index.esm.js.map +1 -1
- package/skinny/formatting-0acc57f5.esm.js.map +0 -1
- package/skinny/formatting-6dc71cdd.cjs.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatting-939d0aa3.cjs.js","sources":["../src/field-mappings.tsx","../src/formatting.tsx"],"sourcesContent":["import { QueryResult, TableSchema } from \"@plasmicapp/data-sources\";\nimport { ComponentContextConfig } 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?: ComponentContextConfig<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"],"names":["__spreadValues","withoutFalsey","_a","__spreadProps","isOneOf","React","maybe","Checkbox","Switch","parseDate"],"mappings":"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"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var dayjs = require('dayjs');
|
|
4
|
-
var commonPropTypes = require('../common-prop-types-
|
|
4
|
+
var commonPropTypes = require('../common-prop-types-94b20130.cjs.js');
|
|
5
5
|
var utils = require('../utils-65c486f0.cjs.js');
|
|
6
6
|
var dataSources = require('@plasmicapp/data-sources');
|
|
7
7
|
var luxonParser = require('@plasmicpkgs/luxon-parser');
|
|
8
8
|
var antd = require('antd');
|
|
9
9
|
var groupBy = require('lodash/groupBy');
|
|
10
10
|
var React = require('react');
|
|
11
|
-
var formatting = require('../formatting-
|
|
11
|
+
var formatting = require('../formatting-939d0aa3.cjs.js');
|
|
12
12
|
var localeData = require('dayjs/plugin/localeData');
|
|
13
13
|
var weekday = require('dayjs/plugin/weekday');
|
|
14
14
|
require('../common-e1d76791.cjs.js');
|
|
@@ -61,8 +61,9 @@ dayjs__default.default.extend(weekday__default.default);
|
|
|
61
61
|
dayjs__default.default.extend(localeData__default.default);
|
|
62
62
|
function getEventFullDate(date) {
|
|
63
63
|
const parsed = luxonParser.parseDate(date);
|
|
64
|
-
if (!parsed)
|
|
64
|
+
if (!parsed) {
|
|
65
65
|
return void 0;
|
|
66
|
+
}
|
|
66
67
|
const yyyy = parsed.getFullYear();
|
|
67
68
|
const mm = (parsed.getMonth() + 1).toString().padStart(2, "0");
|
|
68
69
|
const dd = parsed.getDate().toString().padStart(2, "0");
|
|
@@ -73,8 +74,9 @@ function getEventMonthYear(date) {
|
|
|
73
74
|
return (_a = getEventFullDate(date)) == null ? void 0 : _a.substring(0, 7);
|
|
74
75
|
}
|
|
75
76
|
function EventCell({ events }) {
|
|
76
|
-
if (!events || !events.length)
|
|
77
|
+
if (!events || !events.length) {
|
|
77
78
|
return null;
|
|
79
|
+
}
|
|
78
80
|
return /* @__PURE__ */ React__default.default.createElement("ul", { style: { all: "unset" } }, events.map((e) => /* @__PURE__ */ React__default.default.createElement("li", { key: JSON.stringify(e), style: { all: "unset", display: "block" } }, /* @__PURE__ */ React__default.default.createElement(antd.Badge, { color: e.color || "green", text: e.title }))));
|
|
79
81
|
}
|
|
80
82
|
function RichCalendar(props) {
|
|
@@ -110,16 +112,14 @@ function RichCalendar(props) {
|
|
|
110
112
|
"monthFullCellRender"
|
|
111
113
|
]);
|
|
112
114
|
const data = dataSources.useNormalizedData(rawData);
|
|
113
|
-
const {
|
|
114
|
-
data,
|
|
115
|
-
props
|
|
116
|
-
);
|
|
115
|
+
const { finalRoles: roleConfigs } = useRoleDefinitions(data, props);
|
|
117
116
|
const {
|
|
118
117
|
eventsByDate,
|
|
119
118
|
eventsByMonth
|
|
120
119
|
} = React.useMemo(() => {
|
|
121
|
-
if (!data)
|
|
120
|
+
if (!data) {
|
|
122
121
|
return { eventsByDate: {}, eventsByMonth: {} };
|
|
122
|
+
}
|
|
123
123
|
return data == null ? void 0 : data.data.reduce(
|
|
124
124
|
(acc, item) => {
|
|
125
125
|
const date = formatting.getFieldAggregateValue(item, roleConfigs.date);
|
|
@@ -156,11 +156,13 @@ function RichCalendar(props) {
|
|
|
156
156
|
[isoDefaultValue]
|
|
157
157
|
);
|
|
158
158
|
const validRange = React.useMemo(() => {
|
|
159
|
-
if (!isoValidRange)
|
|
159
|
+
if (!isoValidRange) {
|
|
160
160
|
return void 0;
|
|
161
|
+
}
|
|
161
162
|
const range = isoValidRange.filter((dateIso) => utils.isValidIsoDate(dateIso)).map((d) => dayjs__default.default(d));
|
|
162
|
-
if (range.length !== 2)
|
|
163
|
+
if (range.length !== 2) {
|
|
163
164
|
return void 0;
|
|
165
|
+
}
|
|
164
166
|
return [range[0], range[1]];
|
|
165
167
|
}, [isoValidRange]);
|
|
166
168
|
const key = React.useMemo(() => JSON.stringify(roleConfigs), [roleConfigs]);
|
|
@@ -204,7 +206,7 @@ const defaultColumnConfig = () => ({
|
|
|
204
206
|
});
|
|
205
207
|
const roles = ["date", "title", "color", "unset"];
|
|
206
208
|
function useRoleDefinitions(data, props) {
|
|
207
|
-
const {
|
|
209
|
+
const { setControlContextData } = props;
|
|
208
210
|
return React__default.default.useMemo(() => {
|
|
209
211
|
var _a, _b, _c, _d, _e;
|
|
210
212
|
const schema = data == null ? void 0 : data.schema;
|
|
@@ -397,14 +399,18 @@ function registerRichCalendar(loader) {
|
|
|
397
399
|
type: "dateString",
|
|
398
400
|
description: `The date selected by default as an ISO string`,
|
|
399
401
|
validator: (value, ps) => {
|
|
400
|
-
if (!ps.value)
|
|
402
|
+
if (!ps.value) {
|
|
401
403
|
return true;
|
|
402
|
-
|
|
404
|
+
}
|
|
405
|
+
if (!ps.validRange) {
|
|
403
406
|
return true;
|
|
404
|
-
|
|
407
|
+
}
|
|
408
|
+
if (!utils.isValidIsoDate(value)) {
|
|
405
409
|
return "Not a valid ISO string.";
|
|
406
|
-
|
|
410
|
+
}
|
|
411
|
+
if (dayjs__default.default(value).isBefore(ps.validRange[0]) || dayjs__default.default(value).isAfter(ps.validRange[1])) {
|
|
407
412
|
return "Not within the valid range";
|
|
413
|
+
}
|
|
408
414
|
return true;
|
|
409
415
|
}
|
|
410
416
|
},
|
|
@@ -418,13 +424,16 @@ function registerRichCalendar(loader) {
|
|
|
418
424
|
type: "dateRangeStrings",
|
|
419
425
|
description: "Only allow selection of dates that lie within this range",
|
|
420
426
|
advanced: true,
|
|
421
|
-
validator: (value,
|
|
422
|
-
if (!value)
|
|
427
|
+
validator: (value, _ps) => {
|
|
428
|
+
if (!value) {
|
|
423
429
|
return true;
|
|
424
|
-
|
|
430
|
+
}
|
|
431
|
+
if (!Array.isArray(value) || value.length !== 2) {
|
|
425
432
|
return "Not an array with 2 items";
|
|
426
|
-
|
|
433
|
+
}
|
|
434
|
+
if (!utils.isValidIsoDate(value[0]) || !utils.isValidIsoDate(value[1])) {
|
|
427
435
|
return "Min or max range is not in valid ISO date format.";
|
|
436
|
+
}
|
|
428
437
|
return true;
|
|
429
438
|
}
|
|
430
439
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../../src/rich-calendar/RichCalendar.tsx","../../src/rich-calendar/index.tsx"],"sourcesContent":["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"],"names":["dayjs","weekday","localeData","parseDate","React","Badge","useNormalizedData","useMemo","getFieldAggregateValue","isValidIsoDate","Calendar","__spreadValues","mkShortId","_a","ensureArray","deriveFieldConfigs","isLikeDate","isLikeColor","ensure","groupBy","maybe","registerComponentHelper","roleProp"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../src/rich-calendar/RichCalendar.tsx","../../src/rich-calendar/index.tsx"],"sourcesContent":["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) {\n return undefined;\n }\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) {\n return null;\n }\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 { finalRoles: roleConfigs } = useRoleDefinitions(data, props);\n const {\n eventsByDate,\n eventsByMonth,\n }: {\n eventsByDate: Record<string, Event[]>;\n eventsByMonth: Record<string, Event[]>;\n } = useMemo(() => {\n if (!data) {\n return { eventsByDate: {}, eventsByMonth: {} };\n }\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) {\n return undefined;\n }\n\n const range = isoValidRange\n .filter((dateIso: string | undefined) => isValidIsoDate(dateIso))\n .map((d: any) => dayjs(d));\n\n if (range.length !== 2) {\n return undefined;\n }\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 { 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, RichCalendarProps } 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: string, ps: RichCalendarProps) => {\n if (!ps.value) {\n return true;\n }\n if (!ps.validRange) {\n return true;\n }\n if (!isValidIsoDate(value)) {\n return \"Not a valid ISO string.\";\n }\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 }\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: [string, string], _ps: RichCalendarProps) => {\n if (!value) {\n return true;\n }\n if (!Array.isArray(value) || value.length !== 2) {\n return \"Not an array with 2 items\";\n }\n if (!isValidIsoDate(value[0]) || !isValidIsoDate(value[1])) {\n return \"Min or max range is not in valid ISO date format.\";\n }\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"],"names":["dayjs","weekday","localeData","parseDate","React","Badge","useNormalizedData","useMemo","getFieldAggregateValue","isValidIsoDate","Calendar","__spreadValues","mkShortId","_a","ensureArray","deriveFieldConfigs","isLikeDate","isLikeColor","ensure","groupBy","maybe","registerComponentHelper","roleProp"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyBAA,sBAAA,CAAM,OAAOC,wBAAO,CAAA,CAAA;AACpBD,sBAAA,CAAM,OAAOE,2BAAU,CAAA,CAAA;AAwBvB,SAAS,iBAAiB,IAAmC,EAAA;AAC3D,EAAM,MAAA,MAAA,GAASC,sBAAU,IAAI,CAAA,CAAA;AAC7B,EAAA,IAAI,CAAC,MAAQ,EAAA;AACX,IAAO,OAAA,KAAA,CAAA,CAAA;AAAA,GACT;AACA,EAAM,MAAA,IAAA,GAAO,OAAO,WAAY,EAAA,CAAA;AAChC,EAAM,MAAA,EAAA,GAAA,CAAM,OAAO,QAAS,EAAA,GAAI,GAAG,QAAS,EAAA,CAAE,QAAS,CAAA,CAAA,EAAG,GAAG,CAAA,CAAA;AAC7D,EAAM,MAAA,EAAA,GAAK,OAAO,OAAQ,EAAA,CAAE,UAAW,CAAA,QAAA,CAAS,GAAG,GAAG,CAAA,CAAA;AACtD,EAAO,OAAA,CAAA,EAAG,QAAQ,EAAM,CAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA;AAC1B,CAAA;AAEA,SAAS,kBAAkB,IAAmC,EAAA;AA7D9D,EAAA,IAAA,EAAA,CAAA;AA8DE,EAAA,OAAA,CAAO,EAAiB,GAAA,gBAAA,CAAA,IAAI,CAArB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAwB,UAAU,CAAG,EAAA,CAAA,CAAA,CAAA;AAC9C,CAAA;AAEA,SAAS,SAAA,CAAU,EAAE,MAAA,EAA+B,EAAA;AAClD,EAAA,IAAI,CAAC,MAAA,IAAU,CAAC,MAAA,CAAO,MAAQ,EAAA;AAC7B,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACA,EAAA,4DACG,IAAG,EAAA,EAAA,KAAA,EAAO,EAAE,GAAA,EAAK,SACf,EAAA,EAAA,MAAA,CAAO,GAAI,CAAA,CAAC,sBACVC,sBAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAG,GAAK,EAAA,IAAA,CAAK,UAAU,CAAC,CAAA,EAAG,KAAO,EAAA,EAAE,KAAK,OAAS,EAAA,OAAA,EAAS,OAAQ,EAAA,EAAA,uDACjEC,UAAM,EAAA,EAAA,KAAA,EAAO,CAAE,CAAA,KAAA,IAAS,SAAS,IAAM,EAAA,CAAA,CAAE,KAAO,EAAA,CACnD,CACD,CACH,CAAA,CAAA;AAEJ,CAAA;AAEO,SAAS,aAAa,KAA0B,EAAA;AACrD,EAAA,MAsBI,EArBF,GAAA,KAAA,EAAA;AAAA,IAAA,IAAA,EAAM,OAAU,GAAA;AAAA,MACd,MAAM,EAAC;AAAA,MACP,MAAQ,EAAA;AAAA,QACN,EAAI,EAAA,UAAA;AAAA,QACJ,MAAQ,EAAA;AAAA,UACN;AAAA,YACE,EAAI,EAAA,IAAA;AAAA,YACJ,IAAM,EAAA,QAAA;AAAA,YACN,QAAU,EAAA,KAAA;AAAA,WACZ;AAAA,SACF;AAAA,OACF;AAAA,KACF;AAAA,IACA,KAAO,EAAA,QAAA;AAAA,IACP,YAAc,EAAA,eAAA;AAAA,IACd,UAAY,EAAA,aAAA;AAAA,IACZ,cAAA;AAAA,IACA,kBAAA;AAAA,IACA,eAAA;AAAA,IACA,mBAAA;AAAA,GArGJ,GAuGM,EADC,EAAA,IAAA,GAAA,SAAA,CACD,EADC,EAAA;AAAA,IApBH,MAAA;AAAA,IAaA,OAAA;AAAA,IACA,cAAA;AAAA,IACA,YAAA;AAAA,IACA,gBAAA;AAAA,IACA,oBAAA;AAAA,IACA,iBAAA;AAAA,IACA,qBAAA;AAAA,GAAA,CAAA,CAAA;AAGF,EAAM,MAAA,IAAA,GAAOC,8BAAkB,OAAO,CAAA,CAAA;AAEtC,EAAA,MAAM,EAAE,UAAY,EAAA,WAAA,EAAgB,GAAA,kBAAA,CAAmB,MAAM,KAAK,CAAA,CAAA;AAClE,EAAM,MAAA;AAAA,IACJ,YAAA;AAAA,IACA,aAAA;AAAA,GACF,GAGIC,cAAQ,MAAM;AAChB,IAAA,IAAI,CAAC,IAAM,EAAA;AACT,MAAA,OAAO,EAAE,YAAc,EAAA,EAAI,EAAA,aAAA,EAAe,EAAG,EAAA,CAAA;AAAA,KAC/C;AACA,IAAA,OAAO,6BAAM,IAAK,CAAA,MAAA;AAAA,MAChB,CAAC,KAAU,IAAc,KAAA;AACvB,QAAA,MAAM,IAAO,GAAAC,iCAAA,CAAuB,IAAM,EAAA,WAAA,CAAY,IAAI,CAAA,CAAA;AAC1D,QAAA,MAAM,KAAQ,GAAAA,iCAAA,CAAuB,IAAM,EAAA,WAAA,CAAY,KAAK,CAAA,CAAA;AAC5D,QAAA,MAAM,KAAQ,GAAAA,iCAAA,CAAuB,IAAM,EAAA,WAAA,CAAY,KAAK,CAAA,CAAA;AAE5D,QAAA,MAAM,KAAQ,GAAA;AAAA,UACZ,IAAA;AAAA,UACA,KAAA;AAAA,UACA,KAAA;AAAA,SACF,CAAA;AAEA,QAAM,MAAA,OAAA,GAAU,iBAAiB,IAAI,CAAA,CAAA;AACrC,QAAM,MAAA,QAAA,GAAW,kBAAkB,IAAI,CAAA,CAAA;AACvC,QAAA,IAAI,WAAW,QAAU,EAAA;AACvB,UAAI,GAAA,CAAA,YAAA,CAAa,OAAO,CAAI,GAAA;AAAA,YAC1B,GAAI,GAAA,CAAI,YAAa,CAAA,OAAO,KAAK,EAAC;AAAA,YAClC,KAAA;AAAA,WACF,CAAA;AACA,UAAI,GAAA,CAAA,aAAA,CAAc,QAAQ,CAAI,GAAA;AAAA,YAC5B,GAAI,GAAA,CAAI,aAAc,CAAA,QAAQ,KAAK,EAAC;AAAA,YACpC,KAAA;AAAA,WACF,CAAA;AAAA,SACF;AAEA,QAAO,OAAA,GAAA,CAAA;AAAA,OACT;AAAA,MACA,EAAE,YAAc,EAAA,EAAI,EAAA,aAAA,EAAe,EAAG,EAAA;AAAA,KAAA,CAAA;AAAA,GAE1C,EAAG,CAAC,IAAM,EAAA,WAAA,CAAY,OAAO,WAAY,CAAA,IAAA,EAAM,WAAY,CAAA,KAAK,CAAC,CAAA,CAAA;AAEjE,EAAA,MAAM,KAAQ,GAAAD,aAAA;AAAA,IACZ,MAAOE,oBAAe,CAAA,QAAQ,IAAIT,sBAAM,CAAA,QAAQ,IAAIA,sBAAM,EAAA;AAAA,IAC1D,CAAC,QAAQ,CAAA;AAAA,GACX,CAAA;AACA,EAAA,MAAM,YAAe,GAAAO,aAAA;AAAA,IACnB,MAAOE,oBAAe,CAAA,eAAe,IAAIT,sBAAM,CAAA,eAAe,IAAIA,sBAAM,EAAA;AAAA,IACxE,CAAC,eAAe,CAAA;AAAA,GAClB,CAAA;AAEA,EAAM,MAAA,UAAA,GAAyCO,cAAQ,MAAM;AAC3D,IAAA,IAAI,CAAC,aAAe,EAAA;AAClB,MAAO,OAAA,KAAA,CAAA,CAAA;AAAA,KACT;AAEA,IAAA,MAAM,KAAQ,GAAA,aAAA,CACX,MAAO,CAAA,CAAC,YAAgCE,oBAAe,CAAA,OAAO,CAAC,CAAA,CAC/D,GAAI,CAAA,CAAC,CAAW,KAAAT,sBAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAE3B,IAAI,IAAA,KAAA,CAAM,WAAW,CAAG,EAAA;AACtB,MAAO,OAAA,KAAA,CAAA,CAAA;AAAA,KACT;AACA,IAAA,OAAO,CAAC,KAAM,CAAA,CAAC,CAAG,EAAA,KAAA,CAAM,CAAC,CAAC,CAAA,CAAA;AAAA,GAC5B,EAAG,CAAC,aAAa,CAAC,CAAA,CAAA;AAElB,EAAM,MAAA,GAAA,GAAMO,cAAQ,MAAM,IAAA,CAAK,UAAU,WAAW,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA,CAAA;AAEpE,EACE,uBAAAH,sBAAA,CAAA,aAAA;AAAA,IAACM,aAAA;AAAA,IAAA,aAAA,CAAAC,gBAAA,CAAA,EAAA,EACK,IADL,CAAA,EAAA;AAAA,MAEC,GAAA;AAAA,MACA,UAAA;AAAA,MAEA,YAAA;AAAA,MAEA,KAAA;AAAA,MACA,cACE,EAAA,cAAA,GACI,cACA,GAAA,CAAC,IACC,qBAAAP,sBAAA,CAAA,aAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACC,QAAQ,YAAa,CAAA,gBAAA,CAAiB,IAAK,CAAA,WAAA,EAAa,CAAE,CAAA;AAAA,SAAA;AAAA,OAC5D;AAAA,MAGR,eACE,EAAA,eAAA,GACI,eACA,GAAA,CAAC,IACC,qBAAAA,sBAAA,CAAA,aAAA;AAAA,QAAC,SAAA;AAAA,QAAA;AAAA,UACC,QAAQ,aAAc,CAAA,iBAAA,CAAkB,IAAK,CAAA,WAAA,EAAa,CAAE,CAAA;AAAA,SAAA;AAAA,OAC9D;AAAA,MAGR,kBAAA;AAAA,MACA,mBAAA;AAAA,KAAA,CAAA;AAAA,GACF,CAAA;AAEJ,CAAA;AAQA,MAAM,sBAAsB,OACzB;AAAA,EACC,KAAKQ,eAAU,EAAA;AAAA,EACf,gBAAgB,MAAM,KAAA;AAAA,EACtB,cAAgB,EAAA,KAAA;AAAA,EAChB,UAAY,EAAA,KAAA,CAAA;AAAA,EACZ,QAAU,EAAA,KAAA;AAAA,EACV,UAAY,EAAA;AAAA,IACV,QAAQ,EAAC;AAAA,IACT,KAAO,EAAA,MAAA;AAAA,IACP,MAAQ,EAAA,KAAA;AAAA,GACV;AAAA,EACA,QAAU,EAAA,MAAA;AAAA,EACV,IAAM,EAAA,KAAA,CAAA;AACR,CAAA,CAAA,CAAA;AAEF,MAAM,KAAQ,GAAA,CAAC,MAAQ,EAAA,OAAA,EAAS,SAAS,OAAO,CAAA,CAAA;AA4BhD,SAAS,kBAAA,CACP,MACA,KACA,EAAA;AACA,EAAM,MAAA,EAAE,uBAA0B,GAAA,KAAA,CAAA;AAElC,EAAO,OAAAR,sBAAA,CAAM,QAAQ,MAAM;AAvQ7B,IAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AAwQI,IAAA,MAAM,SAAS,IAAM,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,IAAA,CAAA,MAAA,CAAA;AACrB,IAAI,IAAA,CAAC,IAAQ,IAAA,CAAC,MAAQ,EAAA;AACpB,MAAA,OAAO,EAAE,UAAY,EAAA,EAAI,EAAA,UAAA,EAAY,EAAG,EAAA,CAAA;AAAA,KAC1C;AAEA,IAAA,SAAS,gBAAgB,IAAY,EAAA;AA7QzC,MAAAS,IAAAA,GAAAA,CAAAA;AA8QM,MAAA,IAAI,SAAS,OAAS,EAAA;AACpB,QAAA,OAAOC,iBAAYD,CAAAA,CAAAA,GAAAA,GAAA,KAAM,CAAA,IAAI,CAAV,KAAA,IAAA,GAAAA,GAAe,GAAA,EAAE,CAAA,CAAE,GAAI,CAAA,CAAC,KAAU,KAAA;AACnD,UAAA,OAAO,mCACF,KADE,CAAA,EAAA;AAAA,YAEL,IAAA;AAAA,WACF,CAAA,CAAA;AAAA,SACD,CAAA,CAAA;AAAA,OACI,MAAA;AACL,QAAA,OAAO,EAAC,CAAA;AAAA,OACV;AAAA,KACF;AAGA,IAAA,MAAM,sBAAyB,GAAA;AAAA,MAC7B,GAAG,gBAAgB,MAAM,CAAA;AAAA,MACzB,GAAG,gBAAgB,OAAO,CAAA;AAAA,MAC1B,GAAG,gBAAgB,OAAO,CAAA;AAAA,KAC5B,CAAA;AAEA,IAAA,SAAS,qBAAqB,IAA+B,EAAA;AAC3D,MAAO,OAAAE,8BAAA;AAAA,QACL,IAAA,KAAS,UAAa,GAAA,EAAK,GAAA,sBAAA;AAAA,QAC3B,MAAA;AAAA,QACA,CAAC,KAAA,KAAWJ,gBACP,CAAAA,gBAAA,CAAA,EAAA,EAAA,mBAAA,KACC,KAAS,IAAA;AAAA,UACX,KAAK,KAAM,CAAA,EAAA;AAAA,UACX,SAAS,KAAM,CAAA,EAAA;AAAA,UACf,KAAA,EAAO,KAAM,CAAA,KAAA,IAAS,KAAM,CAAA,EAAA;AAAA;AAAA,UAE5B,IAAM,EAAA,KAAA,CAAA;AAAA,UACN,IAAM,EAAA,CAAC,WAAgB,KAAA,WAAA,CAAY,MAAM,EAAE,CAAA;AAAA,SAC7C,CAAA;AAAA,OAEJ,CAAA;AAAA,KACF;AAUA,IAAM,MAAA;AAAA,MACJ,YAAc,EAAA,mBAAA;AAAA,MACd,uBAAyB,EAAA,8BAAA;AAAA,KAC3B,GAAI,qBAAqB,UAAU,CAAA,CAAA;AAOnC,IAAA,IACE,IAAK,CAAA,IAAA,CAAK,MAAS,GAAA,CAAA,IACnB,CAAC,mBAAA,CAAoB,IAAK,CAAA,CAAC,KAAU,KAAA,KAAA,CAAM,IAAS,KAAA,MAAM,CAC1D,EAAA;AACA,MAAA,MAAM,aAAa,KAAM,CAAA,IAAA;AAAA,QACvB,IAAI,GAAA;AAAA,UACF,CAAC,CAAG,EAAA,CAAA,EAAG,CAAG,EAAA,CAAA,EAAG,CAAG,EAAA,CAAA,EAAG,CAAG,EAAA,CAAA,EAAG,CAAG,EAAA,CAAC,CAAE,CAAA,GAAA;AAAA,YAAI,CAAC,MAClC,IAAK,CAAA,KAAA,CAAO,IAAI,CAAM,IAAA,IAAA,CAAK,IAAK,CAAA,MAAA,GAAS,CAAE,CAAA,CAAA;AAAA,WAC7C;AAAA,SACF;AAAA,QACA,GAAI,CAAA,CAAC,MAAM,IAAK,CAAA,IAAA,CAAK,CAAC,CAAC,CAAA,CAAA;AACzB,MAAA,MAAM,sBAAsB,mBAAoB,CAAA,MAAA;AAAA,QAC9C,CAAC,KAAA,KACC,CAAC,KAAA,CAAM,QACP,UAAW,CAAA,MAAA;AAAA,UACT,CAAC,QAAQ,KAAM,CAAA,OAAA,IAAWK,iBAAW,GAAI,CAAA,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,SACzD,CAAE,MACA,IAAA,UAAA,CAAW,MAAS,GAAA,CAAA;AAAA,OAC1B,CAAA;AACA,MAAA,MAAM,aACJ,EAAoB,GAAA,CAAA,EAAA,GAAA,mBAAA,CAAA,IAAA;AAAA,QAAK,CAAC,CAAG,KAAA;AAzVrC,UAAAH,IAAAA,GAAAA,CAAAA;AA0VU,UAAA,OAAA,CAAAA,GAAA,GAAA,CAAA,CAAE,OAAF,KAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,IAAW,KAAM,CAAA,wCAAA,CAAA,CAAA;AAAA,SAAA;AAAA,OACnB,KAFA,YAGA,mBAAoB,CAAA,IAAA;AAAA,QAAK,CAAC,CAAG,KAAA;AA5VrC,UAAAA,IAAAA,GAAAA,CAAAA;AA6VU,UAAA,OAAA,CAAAA,GAAA,GAAA,CAAA,CAAE,OAAF,KAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,IAAW,KAAM,CAAA,wBAAA,CAAA,CAAA;AAAA,SAAA;AAAA,OACnB,KALA,IAMA,GAAA,EAAA,GAAA,mBAAA,CAAoB,CAAC,CAAA,CAAA;AACvB,MAAA,IAAI,SAAW,EAAA;AACb,QAAA,SAAA,CAAU,IAAO,GAAA,MAAA,CAAA;AAAA,OACnB;AAAA,KACF;AAOA,IAAA,IACE,IAAK,CAAA,IAAA,CAAK,MAAS,GAAA,CAAA,IACnB,CAAC,mBAAA,CAAoB,IAAK,CAAA,CAAC,KAAU,KAAA,KAAA,CAAM,IAAS,KAAA,OAAO,CAC3D,EAAA;AACA,MAAA,MAAM,aAAa,KAAM,CAAA,IAAA;AAAA,QACvB,IAAI,GAAA;AAAA,UACF,CAAC,CAAG,EAAA,CAAA,EAAG,CAAG,EAAA,CAAA,EAAG,CAAG,EAAA,CAAA,EAAG,CAAG,EAAA,CAAA,EAAG,CAAG,EAAA,CAAC,CAAE,CAAA,GAAA;AAAA,YAAI,CAAC,MAClC,IAAK,CAAA,KAAA,CAAO,IAAI,CAAM,IAAA,IAAA,CAAK,IAAK,CAAA,MAAA,GAAS,CAAE,CAAA,CAAA;AAAA,WAC7C;AAAA,SACF;AAAA,QACA,GAAI,CAAA,CAAC,MAAM,IAAK,CAAA,IAAA,CAAK,CAAC,CAAC,CAAA,CAAA;AACzB,MAAA,MAAM,uBAAuB,mBAAoB,CAAA,MAAA;AAAA,QAC/C,CAAC,KAAA,KACC,CAAC,KAAA,CAAM,QACP,UAAW,CAAA,MAAA;AAAA,UACT,CAAC,QAAQ,KAAM,CAAA,OAAA,IAAWI,kBAAY,GAAI,CAAA,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,SAC1D,CAAE,MACA,IAAA,UAAA,CAAW,MAAS,GAAA,CAAA;AAAA,OAC1B,CAAA;AACA,MAAA,MAAM,cACJ,EAAqB,GAAA,CAAA,EAAA,GAAA,oBAAA,CAAA,IAAA;AAAA,QAAK,CAAC,CAAG,KAAA;AA9XtC,UAAAJ,IAAAA,GAAAA,CAAAA;AA+XU,UAAA,OAAA,CAAAA,GAAA,GAAA,CAAA,CAAE,OAAF,KAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,IAAW,KAAM,CAAA,0CAAA,CAAA,CAAA;AAAA,SAAA;AAAA,OACnB,KAFA,YAGA,oBAAqB,CAAA,IAAA;AAAA,QAAK,CAAC,CAAG,KAAA;AAjYtC,UAAAA,IAAAA,GAAAA,CAAAA;AAkYU,UAAA,OAAA,CAAAA,GAAA,GAAA,CAAA,CAAE,OAAF,KAAA,IAAA,GAAA,KAAA,CAAA,GAAAA,IAAW,KAAM,CAAA,4CAAA,CAAA,CAAA;AAAA,SAAA;AAAA,OACnB,KALA,IAMA,GAAA,EAAA,GAAA,oBAAA,CAAqB,CAAC,CAAA,CAAA;AACxB,MAAA,IAAI,UAAY,EAAA;AACd,QAAA,UAAA,CAAW,IAAO,GAAA,OAAA,CAAA;AAAA,OACpB;AAAA,KACF;AAGA,IAAI,IAAA,CAAC,oBAAoB,IAAK,CAAA,CAAC,UAAU,KAAM,CAAA,IAAA,KAAS,OAAO,CAAG,EAAA;AAChE,MAAA,MAAM,aAAa,mBAAoB,CAAA,IAAA;AAAA,QACrC,CAAC,KAAO,KAAA;AA7YhB,UAAAA,IAAAA,GAAAA,CAAAA;AA8YU,UAAC,OAAA,CAAA,KAAA,CAAM,UACPA,GAAA,GAAA,KAAA,CAAM,YAAN,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,GAAAA,CAAe,cAAc,KAAM,CAAA,iCAAA,CAAA,CAAA,CAAA;AAAA,SAAA;AAAA,OACvC,CAAA;AACA,MAAA,IAAI,UAAY,EAAA;AACd,QAAA,UAAA,CAAW,IAAO,GAAA,OAAA,CAAA;AAAA,OACpB;AAAA,KACF;AAEA,IAAA,MAAM,uBAAuB,IAAI,GAAA;AAAA,MAC/B,mBAAA,CAAoB,IAAI,CAAC,CAAA,KAAM,CAAC,CAAE,CAAA,OAAA,EAAS,CAAE,CAAA,IAAI,CAAC,CAAA;AAAA,KACpD,CAAA;AACA,IAAA,KAAA,MAAW,KAAK,8BAAgC,EAAA;AAC9C,MAAA,CAAA,CAAE,IAAO,GAAA,oBAAA,CAAqB,GAAI,CAAA,CAAA,CAAE,OAAO,CAAA,CAAA;AAAA,KAC7C;AAQA,IAAA,MAAM,EAAE,YAAA,EAAc,uBAAwB,EAAA,GAC5C,qBAAqB,UAAU,CAAA,CAAA;AAEjC,IAAA,MAAM,mCAAsC,GAAA;AAAA,MAC1C,GAAG,wBAAwB,MAAO,CAAA,CAAC,MAAM,CAAE,CAAA,IAAA,IAAQ,CAAE,CAAA,IAAA,KAAS,OAAO,CAAA;AAAA,MACrE,GAAG,8BAA+B,CAAA,MAAA;AAAA,QAChC,CAAC,CAAM,KAAA,CAAA,CAAE,IAAQ,IAAA,CAAA,CAAE,SAAS,OAAW,IAAA,CAAC,KAAM,CAAA,CAAA,CAAE,IAAI,CAAA;AAAA,OACtD;AAAA,KACF,CAAA;AACA,IAAA,MAAM,wBAA2B,GAAA;AAAA,MAC/B,GAAG,aAAa,MAAO,CAAA,CAAC,MAAM,CAAE,CAAA,IAAA,IAAQ,CAAE,CAAA,IAAA,KAAS,OAAO,CAAA;AAAA,MAC1D,GAAG,mBAAoB,CAAA,MAAA;AAAA,QACrB,CAAC,CAAM,KAAA,CAAA,CAAE,IAAQ,IAAA,CAAA,CAAE,SAAS,OAAW,IAAA,CAAC,KAAM,CAAA,CAAA,CAAE,IAAI,CAAA;AAAA,OACtD;AAAA,KACF,CAAA;AAGA,IAAA,MAAM,WAAc,GAAAK,YAAA;AAAA,MAClBC,wBAAQ,CAAA,wBAAA,EAA0B,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAAA,KACjD,CAAA;AAEA,IAAA,MAAM,aAAoD,EAAC,CAAA;AAC3D,IAAA,KAAA,MAAW,QAAQ,KAAO,EAAA;AACxB,MAAA,IAAI,SAAS,OAAS,EAAA;AACpB,QAAW,UAAA,CAAA,IAAI,CAAI,GAAA,CAAA,EAAA,GAAAC,WAAA,CAAM,KAAM,CAAA,IAAI,GAAGN,iBAAW,CAAA,KAA9B,IAAmC,GAAA,EAAA,GAAA,WAAA,CAAY,IAAI,CAAA,CAAA;AAAA,OACxE;AAAA,KACF;AAEA,IAAA,qBAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,qBAAA,CAAwB,mCACnB,IADmB,CAAA,EAAA;AAAA,MAEtB,YAAc,EAAA,wBAAA;AAAA,MACd,uBAAyB,EAAA,mCAAA;AAAA,KAC3B,CAAA,CAAA,CAAA;AAEA,IAAA,MAAM,UAAa,GAAA,wBAAA,CAAA;AACnB,IAAO,OAAA,EAAE,YAAY,UAAW,EAAA,CAAA;AAAA,GAC/B,EAAA,CAAC,IAAM,EAAA,qBAAA,EAAuB,KAAK,CAAC,CAAA,CAAA;AACzC;;;;;;;;;;;;;;;;;;AC7bO,MAAM,eAAkB,GAAA;AAAA,EAC7B,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA;AAAA,MACJ,mBAAA,EAAqB,CAAC,KAAA,EAAc,IAAiB,KAAA,IAAA;AAAA,KACvD;AAAA,IACA,YAAc,EAAA;AAAA,MACZ,qBAAqB,CAAC,IAAA,KAAgBd,sBAAM,CAAA,IAAI,EAAE,WAAY,EAAA;AAAA,KAChE;AAAA,GACF;AACF,EAAA;AAEO,MAAM,qBAAwB,GAAA,yBAAA;AAE9B,SAAS,qBAAqB,MAAuB,EAAA;AAC1D,EAAAqB,6BAAA,CAAwB,QAAQ,YAAc,EAAA;AAAA,IAC5C,IAAM,EAAA,qBAAA;AAAA,IACN,WAAa,EAAA,UAAA;AAAA,IACb,KAAO,EAAA;AAAA,MACL,IAAM,EAAA;AAAA,QACJ,IAAM,EAAA,kBAAA;AAAA,QACN,WAAa,EAAA,QAAA;AAAA,QACb,WACE,EAAA,kNAAA;AAAA,OACJ;AAAA,MACA,KAAO,EAAAC,wBAAA,CAAS,EAAE,IAAA,EAAM,SAAS,CAAA;AAAA,MACjC,MAAMA,wBAAS,CAAA,EAAE,MAAM,MAAQ,EAAA,QAAA,EAAU,MAAM,CAAA;AAAA,MAC/C,OAAOA,wBAAS,CAAA,EAAE,MAAM,OAAS,EAAA,QAAA,EAAU,MAAM,CAAA;AAAA,MACjD,KAAO,EAAA;AAAA;AAAA,QAEL,QAAU,EAAA,IAAA;AAAA,QACV,gBAAkB,EAAA,cAAA;AAAA,QAClB,IAAM,EAAA,YAAA;AAAA,QACN,WAAa,EAAA,CAAA,6CAAA,CAAA;AAAA,QACb,SAAA,EAAW,CAAC,KAAA,EAAe,EAA0B,KAAA;AACnD,UAAI,IAAA,CAAC,GAAG,KAAO,EAAA;AACb,YAAO,OAAA,IAAA,CAAA;AAAA,WACT;AACA,UAAI,IAAA,CAAC,GAAG,UAAY,EAAA;AAClB,YAAO,OAAA,IAAA,CAAA;AAAA,WACT;AACA,UAAI,IAAA,CAACb,oBAAe,CAAA,KAAK,CAAG,EAAA;AAC1B,YAAO,OAAA,yBAAA,CAAA;AAAA,WACT;AACA,UAAA,IACET,uBAAM,KAAK,CAAA,CAAE,QAAS,CAAA,EAAA,CAAG,WAAW,CAAC,CAAC,CACtC,IAAAA,sBAAA,CAAM,KAAK,CAAE,CAAA,OAAA,CAAQ,GAAG,UAAW,CAAA,CAAC,CAAC,CACrC,EAAA;AACA,YAAO,OAAA,4BAAA,CAAA;AAAA,WACT;AACA,UAAO,OAAA,IAAA,CAAA;AAAA,SACT;AAAA,OACF;AAAA,MACA,IAAM,EAAA;AAAA,QACJ,IAAM,EAAA,QAAA;AAAA,QACN,OAAA,EAAS,CAAC,OAAA,EAAS,MAAM,CAAA;AAAA,QACzB,WAAa,EAAA,2CAAA;AAAA,QACb,gBAAkB,EAAA,OAAA;AAAA,OACpB;AAAA,MACA,UAAY,EAAA;AAAA,QACV,IAAM,EAAA,kBAAA;AAAA,QACN,WAAa,EAAA,0DAAA;AAAA,QACb,QAAU,EAAA,IAAA;AAAA,QACV,SAAA,EAAW,CAAC,KAAA,EAAyB,GAA2B,KAAA;AAC9D,UAAA,IAAI,CAAC,KAAO,EAAA;AACV,YAAO,OAAA,IAAA,CAAA;AAAA,WACT;AACA,UAAA,IAAI,CAAC,KAAM,CAAA,OAAA,CAAQ,KAAK,CAAK,IAAA,KAAA,CAAM,WAAW,CAAG,EAAA;AAC/C,YAAO,OAAA,2BAAA,CAAA;AAAA,WACT;AACA,UAAI,IAAA,CAACS,oBAAe,CAAA,KAAA,CAAM,CAAC,CAAC,CAAK,IAAA,CAACA,oBAAe,CAAA,KAAA,CAAM,CAAC,CAAC,CAAG,EAAA;AAC1D,YAAO,OAAA,mDAAA,CAAA;AAAA,WACT;AACA,UAAO,OAAA,IAAA,CAAA;AAAA,SACT;AAAA,OACF;AAAA,MACA,YAAc,EAAA;AAAA,QACZ,IAAM,EAAA,MAAA;AAAA,QACN,gBAAA,EAAkB,CAAC,aAAa,CAAA;AAAA,QAChC,eAAiB,EAAA,IAAA;AAAA,QACjB,WAAa,EAAA,eAAA;AAAA,OACf;AAAA,MACA,cAAgB,EAAA;AAAA,QACd,IAAM,EAAA,MAAA;AAAA,QACN,gBAAA,EAAkB,CAAC,WAAW,CAAA;AAAA,QAC9B,eAAiB,EAAA,IAAA;AAAA,QACjB,WAAa,EAAA,kBAAA;AAAA,OACf;AAAA,MACA,kBAAoB,EAAA;AAAA,QAClB,IAAM,EAAA,MAAA;AAAA,QACN,gBAAA,EAAkB,CAAC,WAAW,CAAA;AAAA,QAC9B,eAAiB,EAAA,IAAA;AAAA,QACjB,WAAa,EAAA,kBAAA;AAAA,OACf;AAAA,MACA,eAAiB,EAAA;AAAA,QACf,IAAM,EAAA,MAAA;AAAA,QACN,gBAAA,EAAkB,CAAC,WAAW,CAAA;AAAA,QAC9B,eAAiB,EAAA,IAAA;AAAA,QACjB,WAAa,EAAA,mBAAA;AAAA,OACf;AAAA,MACA,mBAAqB,EAAA;AAAA,QACnB,IAAM,EAAA,MAAA;AAAA,QACN,gBAAA,EAAkB,CAAC,WAAW,CAAA;AAAA,QAC9B,eAAiB,EAAA,IAAA;AAAA,QACjB,WAAa,EAAA,mBAAA;AAAA,OACf;AAAA,MACA,aAAe,EAAA;AAAA,QACb,IAAM,EAAA,cAAA;AAAA,QACN,WACE,EAAA,wEAAA;AAAA,QACF,QAAU,EAAA;AAAA,UACR,EAAE,IAAA,EAAM,MAAQ,EAAA,IAAA,EAAM,QAAS,EAAA;AAAA,UAC/B,EAAE,IAAA,EAAM,MAAQ,EAAA,IAAA,EAAM,QAAS,EAAA;AAAA,SACjC;AAAA,OACF;AAAA,MACA,QAAU,EAAA;AAAA,QACR,IAAM,EAAA,cAAA;AAAA,QACN,UAAU,CAAC,EAAE,MAAM,MAAQ,EAAA,IAAA,EAAM,UAAU,CAAA;AAAA,OAC7C;AAAA,KACF;AAAA,IACA,MAAQ,EAAA;AAAA,MACN,IAAM,EAAA,cAAA,CAAA;AAAA,QACJ,IAAM,EAAA,UAAA;AAAA,QACN,SAAW,EAAA,MAAA;AAAA,QACX,YAAc,EAAA,eAAA;AAAA,QACd,YAAc,EAAA,MAAA;AAAA,OAAA,EACX,gBAAgB,MAAO,CAAA,IAAA,CAAA;AAAA,MAE5B,YAAc,EAAA,cAAA,CAAA;AAAA,QACZ,IAAM,EAAA,UAAA;AAAA,QACN,SAAW,EAAA,OAAA;AAAA,QACX,YAAc,EAAA,UAAA;AAAA,QACd,YAAc,EAAA,MAAA;AAAA,OAAA,EACX,gBAAgB,MAAO,CAAA,YAAA,CAAA;AAAA,KAE9B;AAAA,IACA,gBAAkB,EAAA;AAAA,MAChB,OAAS,EAAA,eAAA;AAAA,MACT,UAAY,EAAA,iBAAA;AAAA,MACZ,UAAY,EAAA,2DAAA;AAAA,KACd;AAAA,IACA,UAAY,EAAA,2DAAA;AAAA,IACZ,UAAY,EAAA,cAAA;AAAA,GACb,CAAA,CAAA;AACH;;;;;;;"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import dayjs from 'dayjs';
|
|
2
|
-
import { r as roleProp } from '../common-prop-types-
|
|
2
|
+
import { r as roleProp } from '../common-prop-types-82f3a4ed.esm.js';
|
|
3
3
|
import { i as isValidIsoDate, a as isLikeDate, b as isLikeColor, e as ensure, m as maybe, c as ensureArray, d as mkShortId, r as registerComponentHelper } from '../utils-c32bd7ed.esm.js';
|
|
4
4
|
import { useNormalizedData, deriveFieldConfigs } from '@plasmicapp/data-sources';
|
|
5
5
|
import { parseDate } from '@plasmicpkgs/luxon-parser';
|
|
6
6
|
import { Calendar, Badge } from 'antd';
|
|
7
7
|
import groupBy from 'lodash/groupBy';
|
|
8
8
|
import React, { useMemo } from 'react';
|
|
9
|
-
import { g as getFieldAggregateValue } from '../formatting-
|
|
9
|
+
import { g as getFieldAggregateValue } from '../formatting-6f22c9d6.esm.js';
|
|
10
10
|
import localeData from 'dayjs/plugin/localeData';
|
|
11
11
|
import weekday from 'dayjs/plugin/weekday';
|
|
12
12
|
import '../common-8cca2977.esm.js';
|
|
@@ -51,8 +51,9 @@ dayjs.extend(weekday);
|
|
|
51
51
|
dayjs.extend(localeData);
|
|
52
52
|
function getEventFullDate(date) {
|
|
53
53
|
const parsed = parseDate(date);
|
|
54
|
-
if (!parsed)
|
|
54
|
+
if (!parsed) {
|
|
55
55
|
return void 0;
|
|
56
|
+
}
|
|
56
57
|
const yyyy = parsed.getFullYear();
|
|
57
58
|
const mm = (parsed.getMonth() + 1).toString().padStart(2, "0");
|
|
58
59
|
const dd = parsed.getDate().toString().padStart(2, "0");
|
|
@@ -63,8 +64,9 @@ function getEventMonthYear(date) {
|
|
|
63
64
|
return (_a = getEventFullDate(date)) == null ? void 0 : _a.substring(0, 7);
|
|
64
65
|
}
|
|
65
66
|
function EventCell({ events }) {
|
|
66
|
-
if (!events || !events.length)
|
|
67
|
+
if (!events || !events.length) {
|
|
67
68
|
return null;
|
|
69
|
+
}
|
|
68
70
|
return /* @__PURE__ */ React.createElement("ul", { style: { all: "unset" } }, events.map((e) => /* @__PURE__ */ React.createElement("li", { key: JSON.stringify(e), style: { all: "unset", display: "block" } }, /* @__PURE__ */ React.createElement(Badge, { color: e.color || "green", text: e.title }))));
|
|
69
71
|
}
|
|
70
72
|
function RichCalendar(props) {
|
|
@@ -100,16 +102,14 @@ function RichCalendar(props) {
|
|
|
100
102
|
"monthFullCellRender"
|
|
101
103
|
]);
|
|
102
104
|
const data = useNormalizedData(rawData);
|
|
103
|
-
const {
|
|
104
|
-
data,
|
|
105
|
-
props
|
|
106
|
-
);
|
|
105
|
+
const { finalRoles: roleConfigs } = useRoleDefinitions(data, props);
|
|
107
106
|
const {
|
|
108
107
|
eventsByDate,
|
|
109
108
|
eventsByMonth
|
|
110
109
|
} = useMemo(() => {
|
|
111
|
-
if (!data)
|
|
110
|
+
if (!data) {
|
|
112
111
|
return { eventsByDate: {}, eventsByMonth: {} };
|
|
112
|
+
}
|
|
113
113
|
return data == null ? void 0 : data.data.reduce(
|
|
114
114
|
(acc, item) => {
|
|
115
115
|
const date = getFieldAggregateValue(item, roleConfigs.date);
|
|
@@ -146,11 +146,13 @@ function RichCalendar(props) {
|
|
|
146
146
|
[isoDefaultValue]
|
|
147
147
|
);
|
|
148
148
|
const validRange = useMemo(() => {
|
|
149
|
-
if (!isoValidRange)
|
|
149
|
+
if (!isoValidRange) {
|
|
150
150
|
return void 0;
|
|
151
|
+
}
|
|
151
152
|
const range = isoValidRange.filter((dateIso) => isValidIsoDate(dateIso)).map((d) => dayjs(d));
|
|
152
|
-
if (range.length !== 2)
|
|
153
|
+
if (range.length !== 2) {
|
|
153
154
|
return void 0;
|
|
155
|
+
}
|
|
154
156
|
return [range[0], range[1]];
|
|
155
157
|
}, [isoValidRange]);
|
|
156
158
|
const key = useMemo(() => JSON.stringify(roleConfigs), [roleConfigs]);
|
|
@@ -194,7 +196,7 @@ const defaultColumnConfig = () => ({
|
|
|
194
196
|
});
|
|
195
197
|
const roles = ["date", "title", "color", "unset"];
|
|
196
198
|
function useRoleDefinitions(data, props) {
|
|
197
|
-
const {
|
|
199
|
+
const { setControlContextData } = props;
|
|
198
200
|
return React.useMemo(() => {
|
|
199
201
|
var _a, _b, _c, _d, _e;
|
|
200
202
|
const schema = data == null ? void 0 : data.schema;
|
|
@@ -387,14 +389,18 @@ function registerRichCalendar(loader) {
|
|
|
387
389
|
type: "dateString",
|
|
388
390
|
description: `The date selected by default as an ISO string`,
|
|
389
391
|
validator: (value, ps) => {
|
|
390
|
-
if (!ps.value)
|
|
392
|
+
if (!ps.value) {
|
|
391
393
|
return true;
|
|
392
|
-
|
|
394
|
+
}
|
|
395
|
+
if (!ps.validRange) {
|
|
393
396
|
return true;
|
|
394
|
-
|
|
397
|
+
}
|
|
398
|
+
if (!isValidIsoDate(value)) {
|
|
395
399
|
return "Not a valid ISO string.";
|
|
396
|
-
|
|
400
|
+
}
|
|
401
|
+
if (dayjs(value).isBefore(ps.validRange[0]) || dayjs(value).isAfter(ps.validRange[1])) {
|
|
397
402
|
return "Not within the valid range";
|
|
403
|
+
}
|
|
398
404
|
return true;
|
|
399
405
|
}
|
|
400
406
|
},
|
|
@@ -408,13 +414,16 @@ function registerRichCalendar(loader) {
|
|
|
408
414
|
type: "dateRangeStrings",
|
|
409
415
|
description: "Only allow selection of dates that lie within this range",
|
|
410
416
|
advanced: true,
|
|
411
|
-
validator: (value,
|
|
412
|
-
if (!value)
|
|
417
|
+
validator: (value, _ps) => {
|
|
418
|
+
if (!value) {
|
|
413
419
|
return true;
|
|
414
|
-
|
|
420
|
+
}
|
|
421
|
+
if (!Array.isArray(value) || value.length !== 2) {
|
|
415
422
|
return "Not an array with 2 items";
|
|
416
|
-
|
|
423
|
+
}
|
|
424
|
+
if (!isValidIsoDate(value[0]) || !isValidIsoDate(value[1])) {
|
|
417
425
|
return "Min or max range is not in valid ISO date format.";
|
|
426
|
+
}
|
|
418
427
|
return true;
|
|
419
428
|
}
|
|
420
429
|
},
|