@plasmicpkgs/plasmic-rich-components 1.0.231 → 1.0.232

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/index.js +16 -8
  3. package/dist/index.js.map +1 -1
  4. package/dist/plasmic-rich-components.esm.js +16 -8
  5. package/dist/plasmic-rich-components.esm.js.map +1 -1
  6. package/dist/utils.d.ts +4 -4
  7. package/package.json +3 -3
  8. package/skinny/{common-prop-types-94b20130.cjs.js → common-prop-types-691f4a06.cjs.js} +3 -3
  9. package/skinny/{common-prop-types-94b20130.cjs.js.map → common-prop-types-691f4a06.cjs.js.map} +1 -1
  10. package/skinny/{common-prop-types-82f3a4ed.esm.js → common-prop-types-758ece78.esm.js} +3 -3
  11. package/skinny/{common-prop-types-82f3a4ed.esm.js.map → common-prop-types-758ece78.esm.js.map} +1 -1
  12. package/skinny/{field-react-utils-c717ec94.cjs.js → field-react-utils-2bbbadc7.cjs.js} +2 -2
  13. package/skinny/{field-react-utils-c717ec94.cjs.js.map → field-react-utils-2bbbadc7.cjs.js.map} +1 -1
  14. package/skinny/{field-react-utils-26fba31e.esm.js → field-react-utils-46bb1f20.esm.js} +2 -2
  15. package/skinny/{field-react-utils-26fba31e.esm.js.map → field-react-utils-46bb1f20.esm.js.map} +1 -1
  16. package/skinny/{formatting-6f22c9d6.esm.js → formatting-b434487b.esm.js} +2 -2
  17. package/skinny/{formatting-6f22c9d6.esm.js.map → formatting-b434487b.esm.js.map} +1 -1
  18. package/skinny/{formatting-939d0aa3.cjs.js → formatting-c37b4133.cjs.js} +2 -2
  19. package/skinny/{formatting-939d0aa3.cjs.js.map → formatting-c37b4133.cjs.js.map} +1 -1
  20. package/skinny/rich-calendar/index.cjs.js +3 -3
  21. package/skinny/rich-calendar/index.esm.js +3 -3
  22. package/skinny/rich-details/index.cjs.js +2 -2
  23. package/skinny/rich-details/index.esm.js +2 -2
  24. package/skinny/rich-layout/index.cjs.js +1 -1
  25. package/skinny/rich-layout/index.cjs.js.map +1 -1
  26. package/skinny/rich-layout/index.esm.js +1 -1
  27. package/skinny/rich-layout/index.esm.js.map +1 -1
  28. package/skinny/rich-list/index.cjs.js +4 -4
  29. package/skinny/rich-list/index.cjs.js.map +1 -1
  30. package/skinny/rich-list/index.esm.js +4 -4
  31. package/skinny/rich-list/index.esm.js.map +1 -1
  32. package/skinny/rich-table/index.cjs.js +4 -4
  33. package/skinny/rich-table/index.esm.js +4 -4
  34. package/skinny/{utils-c32bd7ed.esm.js → utils-546b05e4.esm.js} +17 -9
  35. package/skinny/utils-546b05e4.esm.js.map +1 -0
  36. package/skinny/{utils-65c486f0.cjs.js → utils-da451c58.cjs.js} +17 -9
  37. package/skinny/utils-da451c58.cjs.js.map +1 -0
  38. package/skinny/utils.d.ts +4 -4
  39. package/skinny/utils-65c486f0.cjs.js.map +0 -1
  40. package/skinny/utils-c32bd7ed.esm.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils-da451c58.cjs.js","sources":["../src/utils.tsx"],"sourcesContent":["import {\n CodeComponentMeta,\n default as registerComponent,\n} from \"@plasmicapp/host/registerComponent\";\nimport {\n GlobalContextMeta,\n default as registerGlobalContext,\n} from \"@plasmicapp/host/registerGlobalContext\";\nimport { default as registerToken } from \"@plasmicapp/host/registerToken\";\nimport { parseDate } from \"@plasmicpkgs/luxon-parser\";\nimport dayjs from \"dayjs\";\nimport customParseFormat from \"dayjs/plugin/customParseFormat\";\nimport React from \"react\";\n\nexport type Registerable = {\n registerComponent: typeof registerComponent;\n registerGlobalContext: typeof registerGlobalContext;\n registerToken: typeof registerToken;\n};\n\nexport function makeRegisterComponent<T extends React.ComponentType<any>>(\n component: T,\n meta: CodeComponentMeta<React.ComponentProps<T>>\n) {\n return function (loader?: Registerable) {\n registerComponentHelper(loader, component, meta);\n };\n}\n\nexport function makeRegisterGlobalContext<T extends React.ComponentType<any>>(\n component: T,\n meta: GlobalContextMeta<React.ComponentProps<T>>\n) {\n return function (loader?: Registerable) {\n if (loader) {\n loader.registerGlobalContext(component, meta);\n } else {\n registerGlobalContext(component, meta);\n }\n };\n}\n\nexport function registerComponentHelper<T extends React.ComponentType<any>>(\n loader: Registerable | undefined,\n component: T,\n meta: CodeComponentMeta<React.ComponentProps<T>>\n) {\n if (loader) {\n loader.registerComponent(component, meta);\n } else {\n registerComponent(component, meta);\n }\n}\n\ntype ReactElt = {\n children: ReactElt | ReactElt[];\n props: {\n children: ReactElt | ReactElt[];\n [prop: string]: any;\n } | null;\n type: React.ComponentType<any> | null;\n key: string | null;\n} | null;\n\nexport function traverseReactEltTree(\n children: React.ReactNode,\n callback: (elt: ReactElt) => void\n) {\n const rec = (elts: ReactElt | ReactElt[] | null) => {\n (Array.isArray(elts) ? elts : [elts]).forEach((elt) => {\n if (elt) {\n callback(elt);\n if (elt.children) {\n rec(elt.children);\n }\n if (elt.props?.children && elt.props.children !== elt.children) {\n rec(elt.props.children);\n }\n }\n });\n };\n rec(children as any);\n}\n\nexport function asArray<T>(x: T[] | T | undefined | null) {\n if (Array.isArray(x)) {\n return x;\n } else if (x == null) {\n return [];\n } else {\n return [x];\n }\n}\n\nexport function ensureNumber(x: number | string): number {\n return x as number;\n}\n\nexport function ensure<T>(x: T | null | undefined): T {\n if (x === null || x === undefined) {\n throw new Error(\"Expected non-null or non-undefined value\");\n }\n return x;\n}\n\nexport function isOneOf<T, U extends T>(elem: T, arr: readonly U[]): elem is U {\n return arr.includes(elem as any);\n}\n\nexport function maybe<T, U>(\n x: T | undefined | null,\n f: (y: T) => U\n): U | undefined {\n if (x === undefined || x === null) {\n return undefined;\n }\n return f(x);\n}\n\n/**\n *\n * @param str iso string\n * @param extendedOnly boolean for extended mode (i.e. time)\n * @returns Returns true for strings in ISO 8601 format\n */\nexport function isValidIsoDate(str: string | undefined, extendedOnly = false) {\n if (!str) {\n return false;\n }\n if (typeof str !== \"string\") {\n return false;\n }\n if (str.includes(\" \")) {\n return false;\n } // spaces not supported\n if (str.length === 10) {\n if (extendedOnly) {\n return false;\n }\n dayjs.extend(customParseFormat);\n return dayjs(str, \"YYYY-MM-DD\", true).isValid();\n }\n if (!dayjs(str).isValid()) {\n return false;\n } // should be a valid dayjs date\n if (isNaN(new Date(str).getTime())) {\n return false;\n } // should be a valid js date\n return true;\n}\n\nexport function isLikeDate(value: unknown) {\n const parsed = parseDate(value);\n return parsed ? true : false;\n}\n\nexport function isLikeImage(value: unknown) {\n return typeof value === \"string\"\n ? value.match(/\\.(png|jpg|jpeg|gif|svg|webp|avif|ico|bmp|tiff)$/i)\n : false;\n}\n\nexport function isLikeColor(value: unknown) {\n if (typeof value !== \"string\") {\n return false;\n }\n\n const hex =\n /^#?([0-9a-fA-F]{3}([0-9a-fA-F]{3})?|[0-9a-fA-F]{4}([0-9a-fA-F]{4})?)$/;\n const rgba =\n /^rgba?\\((\\s*\\d+\\s*,\\s*\\d+\\s*,\\s*\\d+\\s*(,\\s*(1|0?(\\.\\d+)?))?\\s*)\\)$/;\n const cssNamed =\n /^(aliceblue|antiquewhite|aqua|aquamarine|azure|beige|bisque|black|blanchedalmond|blue|blueviolet|brown|burlywood|cadetblue|chartreuse|chocolate|coral|cornflowerblue|cornsilk|crimson|cyan|darkblue|darkcyan|darkgoldenrod|darkgray|darkgreen|darkgrey|darkkhaki|darkmagenta|darkolivegreen|darkorange|darkorchid|darkred|darksalmon|darkseagreen|darkslateblue|darkslategray|darkslategrey|darkturquoise|darkviolet|deeppink|deepskyblue|dimgray|dimgrey|dodgerblue|firebrick|floralwhite|forestgreen|fuchsia|gainsboro|ghostwhite|gold|goldenrod|gray|green|greenyellow|grey|honeydew|hotpink|indianred|indigo|ivory|khaki|lavender|lavenderblush|lawngreen|lemonchiffon|lightblue|lightcoral|lightcyan|lightgoldenrodyellow|lightgray|lightgreen|lightgrey|lightpink|lightsalmon|lightseagreen|lightskyblue|lightslategray|lightslategrey|lightsteelblue|lightyellow|lime|limegreen|linen|magenta|maroon|mediumaquamarine|mediumblue|mediumorchid|mediumpurple|mediumseagreen|mediumslateblue|mediumspringgreen|mediumturquoise|mediumvioletred|midnightblue|mintcream|mistyrose|moccasin|navajowhite|navy|oldlace|olive|olivedrab|orange|orangered|orchid|palegoldenrod|palegreen|paleturquoise|palevioletred|papayawhip|peachpuff|peru|pink|plum|powderblue|purple|rebeccapurple|red|rosybrown|royalblue|saddlebrown|salmon|sandybrown|seagreen|seashell|sienna|silver|skyblue|slateblue|slategray|slategrey|snow|springgreen|steelblue|tan|teal|thistle|tomato|turquoise|violet|wheat|white|whitesmoke|yellow|yellowgreen)$/;\n const hsla =\n /^hsla?\\((\\s*\\d+(\\.\\d+)?\\s*,\\s*\\d+(\\.\\d+)?%\\s*,\\s*\\d+(\\.\\d+)?%\\s*(,\\s*(1|0?\\.\\d+))?\\s*)\\)$/;\n const cmyk =\n /^cmyka?\\((\\s*\\d+(\\.\\d+)?%\\s*,\\s*\\d+(\\.\\d+)?%\\s*,\\s*\\d+(\\.\\d+)?%\\s*,\\s*\\d+(\\.\\d+)?%\\s*(,\\s*(1|0?\\.\\d+))?\\s*)\\)$/;\n const hsv =\n /^hsva?\\((\\s*\\d+(\\.\\d+)?\\s*,\\s*\\d+(\\.\\d+)?%\\s*,\\s*\\d+(\\.\\d+)?%\\s*(,\\s*(1|0?\\.\\d+))?\\s*)\\)$/;\n\n if (\n value.match(hex) ||\n value.match(rgba) ||\n value.match(cssNamed) ||\n value.match(hsla) ||\n value.match(cmyk) ||\n value.match(hsv)\n ) {\n return true;\n }\n\n return false;\n}\n\n// Some heuristics to avoid selecting a row when\n// the object clicked is interactable -- like button, anchor,\n// input, etc. This won't be bulletproof, so just some\n// heuristics!\nexport function isInteractable(target: HTMLElement) {\n if ([\"A\", \"BUTTON\", \"INPUT\", \"TEXTAREA\", \"SELECT\"].includes(target.tagName)) {\n return true;\n }\n if (target.contentEditable === \"true\") {\n return true;\n }\n\n return false;\n}\n\nexport function ensureArray<T>(xs: T | T[]): T[] {\n return Array.isArray(xs) ? xs : [xs];\n}\n\nexport const tuple = <T extends any[]>(...args: T): T => args;\n\nexport interface HasId {\n id: string;\n}\n\nexport function mkIdMap<T extends HasId>(xs: ReadonlyArray<T>): Map<string, T> {\n return new Map(xs.map((x) => tuple(x.id, x) as [string, T]));\n}\n\nexport const mkShortId = () => `${Math.random()}`;\n\nexport function withoutNils<T>(xs: Array<T | undefined | null>): T[] {\n return xs.filter((x): x is T => x != null);\n}\n\nexport type Falsey = null | undefined | false | \"\" | 0 | 0n;\nexport type Truthy<T> = T extends Falsey ? never : T;\n\nexport function withoutFalsey<T>(xs: Array<T | Falsey>): T[] {\n return xs.filter((x): x is T => !!x);\n}\n\n/**\n *\n * Forked from: https://github.com/ant-design/pro-components/blob/master/packages/utils/src/components/ErrorBoundary/index.tsx\n *\n */\nimport { Result } from \"antd\";\nimport type { ErrorInfo } from \"react\";\n\ninterface ErrorBoundaryProps {\n children?: React.ReactNode;\n canvasEnvId?: number;\n}\n\ninterface ErrorBoundaryState {\n hasError: boolean;\n errorInfo: string;\n}\nexport class ErrorBoundary extends React.Component<\n ErrorBoundaryProps,\n ErrorBoundaryState\n> {\n state = { hasError: false, errorInfo: \"\" };\n\n static getDerivedStateFromError(error: Error) {\n return { hasError: true, errorInfo: error.message };\n }\n\n componentDidCatch(error: any, errorInfo: ErrorInfo) {\n // You can also log the error to an error reporting service\n // eslint-disable-next-line no-console\n console.log(error, errorInfo);\n }\n\n componentDidUpdate(\n prevProps: Readonly<ErrorBoundaryProps>,\n prevState: Readonly<ErrorBoundaryState>\n ) {\n if (\n prevProps.canvasEnvId !== this.props.canvasEnvId &&\n prevState.hasError\n ) {\n this.setState({ hasError: false });\n }\n }\n\n render() {\n if (this.state.hasError) {\n // You can render any custom fallback UI\n return (\n <Result\n status=\"error\"\n title=\"Something went wrong.\"\n extra={this.state.errorInfo}\n />\n );\n }\n return this.props.children;\n }\n}\n"],"names":["registerComponent","dayjs","customParseFormat","parseDate","React","Result"],"mappings":";;;;;;;;;;;;;;;;;AA0CgB,SAAA,uBAAA,CACd,MACA,EAAA,SAAA,EACA,IACA,EAAA;AACA,EAAA,IAAI,MAAQ,EAAA;AACV,IAAO,MAAA,CAAA,iBAAA,CAAkB,WAAW,IAAI,CAAA,CAAA;AAAA,GACnC,MAAA;AACL,IAAAA,kCAAA,CAAkB,WAAW,IAAI,CAAA,CAAA;AAAA,GACnC;AACF,CAAA;AA8CO,SAAS,OAAU,CAA4B,EAAA;AACpD,EAAI,IAAA,CAAA,KAAM,IAAQ,IAAA,CAAA,KAAM,KAAW,CAAA,EAAA;AACjC,IAAM,MAAA,IAAI,MAAM,0CAA0C,CAAA,CAAA;AAAA,GAC5D;AACA,EAAO,OAAA,CAAA,CAAA;AACT,CAAA;AAEgB,SAAA,OAAA,CAAwB,MAAS,GAA8B,EAAA;AAC7E,EAAO,OAAA,GAAA,CAAI,SAAS,IAAW,CAAA,CAAA;AACjC,CAAA;AAEgB,SAAA,KAAA,CACd,GACA,CACe,EAAA;AACf,EAAI,IAAA,CAAA,KAAM,KAAa,CAAA,IAAA,CAAA,KAAM,IAAM,EAAA;AACjC,IAAO,OAAA,KAAA,CAAA,CAAA;AAAA,GACT;AACA,EAAA,OAAO,EAAE,CAAC,CAAA,CAAA;AACZ,CAAA;AAQgB,SAAA,cAAA,CAAe,GAAyB,EAAA,YAAA,GAAe,KAAO,EAAA;AAC5E,EAAA,IAAI,CAAC,GAAK,EAAA;AACR,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AACA,EAAI,IAAA,OAAO,QAAQ,QAAU,EAAA;AAC3B,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AACA,EAAI,IAAA,GAAA,CAAI,QAAS,CAAA,GAAG,CAAG,EAAA;AACrB,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AACA,EAAI,IAAA,GAAA,CAAI,WAAW,EAAI,EAAA;AACrB,IAAA,IAAI,YAAc,EAAA;AAChB,MAAO,OAAA,KAAA,CAAA;AAAA,KACT;AACA,IAAAC,sBAAA,CAAM,OAAOC,kCAAiB,CAAA,CAAA;AAC9B,IAAA,OAAOD,sBAAM,CAAA,GAAA,EAAK,YAAc,EAAA,IAAI,EAAE,OAAQ,EAAA,CAAA;AAAA,GAChD;AACA,EAAA,IAAI,CAACA,sBAAA,CAAM,GAAG,CAAA,CAAE,SAAW,EAAA;AACzB,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AACA,EAAA,IAAI,MAAM,IAAI,IAAA,CAAK,GAAG,CAAE,CAAA,OAAA,EAAS,CAAG,EAAA;AAClC,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AACA,EAAO,OAAA,IAAA,CAAA;AACT,CAAA;AAEO,SAAS,WAAW,KAAgB,EAAA;AACzC,EAAM,MAAA,MAAA,GAASE,sBAAU,KAAK,CAAA,CAAA;AAC9B,EAAA,OAAO,SAAS,IAAO,GAAA,KAAA,CAAA;AACzB,CAAA;AAEO,SAAS,YAAY,KAAgB,EAAA;AAC1C,EAAA,OAAO,OAAO,KAAU,KAAA,QAAA,GACpB,KAAM,CAAA,KAAA,CAAM,mDAAmD,CAC/D,GAAA,KAAA,CAAA;AACN,CAAA;AAEO,SAAS,YAAY,KAAgB,EAAA;AAC1C,EAAI,IAAA,OAAO,UAAU,QAAU,EAAA;AAC7B,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AAEA,EAAA,MAAM,GACJ,GAAA,uEAAA,CAAA;AACF,EAAA,MAAM,IACJ,GAAA,oEAAA,CAAA;AACF,EAAA,MAAM,QACJ,GAAA,m8CAAA,CAAA;AACF,EAAA,MAAM,IACJ,GAAA,2FAAA,CAAA;AACF,EAAA,MAAM,IACJ,GAAA,gHAAA,CAAA;AACF,EAAA,MAAM,GACJ,GAAA,2FAAA,CAAA;AAEF,EACE,IAAA,KAAA,CAAM,MAAM,GAAG,CAAA,IACf,MAAM,KAAM,CAAA,IAAI,CAChB,IAAA,KAAA,CAAM,KAAM,CAAA,QAAQ,KACpB,KAAM,CAAA,KAAA,CAAM,IAAI,CAAA,IAChB,KAAM,CAAA,KAAA,CAAM,IAAI,CAChB,IAAA,KAAA,CAAM,KAAM,CAAA,GAAG,CACf,EAAA;AACA,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAEA,EAAO,OAAA,KAAA,CAAA;AACT,CAAA;AAMO,SAAS,eAAe,MAAqB,EAAA;AAClD,EAAI,IAAA,CAAC,GAAK,EAAA,QAAA,EAAU,OAAS,EAAA,UAAA,EAAY,QAAQ,CAAE,CAAA,QAAA,CAAS,MAAO,CAAA,OAAO,CAAG,EAAA;AAC3E,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACA,EAAI,IAAA,MAAA,CAAO,oBAAoB,MAAQ,EAAA;AACrC,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAEA,EAAO,OAAA,KAAA,CAAA;AACT,CAAA;AAEO,SAAS,YAAe,EAAkB,EAAA;AAC/C,EAAA,OAAO,MAAM,OAAQ,CAAA,EAAE,CAAI,GAAA,EAAA,GAAK,CAAC,EAAE,CAAA,CAAA;AACrC,CAAA;AAYO,MAAM,SAAY,GAAA,MAAM,CAAG,EAAA,IAAA,CAAK,MAAO,EAAA,CAAA,EAAA;AASvC,SAAS,cAAiB,EAA4B,EAAA;AAC3D,EAAA,OAAO,GAAG,MAAO,CAAA,CAAC,CAAc,KAAA,CAAC,CAAC,CAAC,CAAA,CAAA;AACrC,CAAA;AAmBa,MAAA,aAAA,SAAsBC,uBAAM,SAGvC,CAAA;AAAA,EAHK,WAAA,GAAA;AAAA,IAAA,KAAA,CAAA,GAAA,SAAA,CAAA,CAAA;AAIL,IAAA,IAAA,CAAA,KAAA,GAAQ,EAAE,QAAA,EAAU,KAAO,EAAA,SAAA,EAAW,EAAG,EAAA,CAAA;AAAA,GAAA;AAAA,EAEzC,OAAO,yBAAyB,KAAc,EAAA;AAC5C,IAAA,OAAO,EAAE,QAAA,EAAU,IAAM,EAAA,SAAA,EAAW,MAAM,OAAQ,EAAA,CAAA;AAAA,GACpD;AAAA,EAEA,iBAAA,CAAkB,OAAY,SAAsB,EAAA;AAGlD,IAAQ,OAAA,CAAA,GAAA,CAAI,OAAO,SAAS,CAAA,CAAA;AAAA,GAC9B;AAAA,EAEA,kBAAA,CACE,WACA,SACA,EAAA;AACA,IAAA,IACE,UAAU,WAAgB,KAAA,IAAA,CAAK,KAAM,CAAA,WAAA,IACrC,UAAU,QACV,EAAA;AACA,MAAA,IAAA,CAAK,QAAS,CAAA,EAAE,QAAU,EAAA,KAAA,EAAO,CAAA,CAAA;AAAA,KACnC;AAAA,GACF;AAAA,EAEA,MAAS,GAAA;AACP,IAAI,IAAA,IAAA,CAAK,MAAM,QAAU,EAAA;AAEvB,MACE,uBAAAA,sBAAA,CAAA,aAAA;AAAA,QAACC,WAAA;AAAA,QAAA;AAAA,UACC,MAAO,EAAA,OAAA;AAAA,UACP,KAAM,EAAA,uBAAA;AAAA,UACN,KAAA,EAAO,KAAK,KAAM,CAAA,SAAA;AAAA,SAAA;AAAA,OACpB,CAAA;AAAA,KAEJ;AACA,IAAA,OAAO,KAAK,KAAM,CAAA,QAAA,CAAA;AAAA,GACpB;AACF;;;;;;;;;;;;;;;;"}
package/skinny/utils.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { ComponentMeta, default as registerComponent } from "@plasmicapp/host/registerComponent";
2
- import { default as registerGlobalContext, GlobalContextMeta } from "@plasmicapp/host/registerGlobalContext";
1
+ import { CodeComponentMeta, default as registerComponent } from "@plasmicapp/host/registerComponent";
2
+ import { GlobalContextMeta, default as registerGlobalContext } from "@plasmicapp/host/registerGlobalContext";
3
3
  import { default as registerToken } from "@plasmicapp/host/registerToken";
4
4
  import React from "react";
5
5
  export type Registerable = {
@@ -7,9 +7,9 @@ export type Registerable = {
7
7
  registerGlobalContext: typeof registerGlobalContext;
8
8
  registerToken: typeof registerToken;
9
9
  };
10
- export declare function makeRegisterComponent<T extends React.ComponentType<any>>(component: T, meta: ComponentMeta<React.ComponentProps<T>>): (loader?: Registerable) => void;
10
+ export declare function makeRegisterComponent<T extends React.ComponentType<any>>(component: T, meta: CodeComponentMeta<React.ComponentProps<T>>): (loader?: Registerable) => void;
11
11
  export declare function makeRegisterGlobalContext<T extends React.ComponentType<any>>(component: T, meta: GlobalContextMeta<React.ComponentProps<T>>): (loader?: Registerable) => void;
12
- export declare function registerComponentHelper<T extends React.ComponentType<any>>(loader: Registerable | undefined, component: T, meta: ComponentMeta<React.ComponentProps<T>>): void;
12
+ export declare function registerComponentHelper<T extends React.ComponentType<any>>(loader: Registerable | undefined, component: T, meta: CodeComponentMeta<React.ComponentProps<T>>): void;
13
13
  type ReactElt = {
14
14
  children: ReactElt | ReactElt[];
15
15
  props: {
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils-65c486f0.cjs.js","sources":["../src/utils.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"],"names":["registerComponent","dayjs","customParseFormat","parseDate","React","Result"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils-c32bd7ed.esm.js","sources":["../src/utils.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"],"names":[],"mappings":"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"}