@weaverse/core 1.1.10 → 1.1.12
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/index.d.mts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -285,9 +285,10 @@ interface BasicInput<ConfigsType = AdditionalInputConfigs> {
|
|
|
285
285
|
* `imagesPerRow.gt.1`
|
|
286
286
|
*/
|
|
287
287
|
condition?: string;
|
|
288
|
-
defaultValue
|
|
288
|
+
defaultValue?: string | number | boolean;
|
|
289
289
|
placeholder?: string;
|
|
290
290
|
helpText?: string;
|
|
291
|
+
shouldRevalidate?: boolean;
|
|
291
292
|
}
|
|
292
293
|
type AdditionalInputConfigs = SelectInputConfigs | ToggleGroupConfigs | RangeInputConfigs | ChildrenSortInputConfigs | DataSortInputConfigs;
|
|
293
294
|
interface SelectInputConfigs {
|
package/dist/index.d.ts
CHANGED
|
@@ -285,9 +285,10 @@ interface BasicInput<ConfigsType = AdditionalInputConfigs> {
|
|
|
285
285
|
* `imagesPerRow.gt.1`
|
|
286
286
|
*/
|
|
287
287
|
condition?: string;
|
|
288
|
-
defaultValue
|
|
288
|
+
defaultValue?: string | number | boolean;
|
|
289
289
|
placeholder?: string;
|
|
290
290
|
helpText?: string;
|
|
291
|
+
shouldRevalidate?: boolean;
|
|
291
292
|
}
|
|
292
293
|
type AdditionalInputConfigs = SelectInputConfigs | ToggleGroupConfigs | RangeInputConfigs | ChildrenSortInputConfigs | DataSortInputConfigs;
|
|
293
294
|
interface SelectInputConfigs {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/core.ts","../src/utils/load-script.ts","../src/utils/index.ts","../src/utils/styles.ts"],"sourcesContent":["export * from \"./types\"\nexport * from \"./core\"\nexport * from \"./utils\"\n","// TODO: Implement Weaverse SDK class\n// Only core code is implemented here, avoid importing other packages,\n// the core code should be framework agnostic, no react, vue, angular, etc.\n// noinspection JSUnusedGlobalSymbols\n\n// using stitches core only for framework-agnostic code\nimport * as stitches from \"@stitches/core\"\nimport type Stitches from \"@stitches/core/types/stitches\"\nimport type { RefObject } from \"react\"\nimport type {\n BreakPoints,\n ElementData,\n ElementSchema,\n PlatformTypeEnum,\n WeaverseElement,\n WeaverseProjectDataType,\n WeaverseType,\n} from \"./types\"\nimport { getItemDefaultData, merge } from \"./utils\"\nimport { stitchesUtils } from \"./utils/styles\"\n\nexport class WeaverseItemStore {\n weaverse: Weaverse\n listeners: Set<(_: ElementData) => void> = new Set()\n ref: RefObject<HTMLElement> = { current: null }\n stitchesClass = \"\"\n private _store: ElementData = { id: \"\", type: \"\" }\n\n constructor(itemData: ElementData, weaverse: Weaverse) {\n let { type, id } = itemData\n this.weaverse = weaverse\n if (id && type) {\n weaverse.itemInstances.set(id, this)\n if (weaverse.platformType === \"shopify-hydrogen\") {\n let { data, ...rest } = itemData\n this._store = { ...data, ...rest }\n } else {\n this._store = { ...itemData }\n }\n }\n }\n\n get _id() {\n return this._store.id\n }\n get _element() {\n return this.ref.current\n }\n get _flags() {\n return this.Element?.schema?.flags || {}\n }\n get Element() {\n return this.weaverse.elementInstances.get(this._store.type)\n }\n\n set data(update: Omit<ElementData, \"id\" | \"type\">) {\n // if (this.weaverse.platformType === \"shopify-hydrogen\") {\n // let { children, ...rest } = update\n // if (children) {\n // this._store.children = children\n // }\n // this._store.data = merge(this._store.data, rest)\n // } else {\n // this._store = { ...this.data, ...update }\n // }\n this._store = { ...this.data, ...update }\n }\n\n get data(): ElementData {\n // let defaultProps = { ...this.Element?.Component?.defaultProps }\n let defaultData = getItemDefaultData(this)\n // if (this.platformType === \"shopify-hydrogen\") {\n // return {\n // ...defaultProps,\n // ...this._store,\n // data: { ...defaultProps?.data, ...this._store.data },\n // }\n // } else {\n // let defaultCss = this.Element?.defaultCss || {}\n // let currentCss = this._store.css || {}\n // let css = merge(defaultCss, currentCss)\n // let extraData = this.Element?.extraData\n // return { ...defaultProps, ...extraData, ...this._store, css }\n // }\n let defaultCss = this.Element?.defaultCss || {}\n let currentCss = this._store.css || {}\n let css = merge(defaultCss, currentCss)\n let extraData = this.Element?.extraData\n return { ...defaultData, ...extraData, ...this._store, css }\n }\n\n setData = (update: Omit<ElementData, \"id\" | \"type\">) => {\n console.log('👉 --------> - setData update:', update)\n // if (this.weaverse.platformType === \"shopify-hydrogen\") {\n // this.data = update\n // } else {\n // this.data = Object.assign(this.data, update)\n // }\n this.data = Object.assign(this.data, update)\n\n this.triggerUpdate()\n return this.data\n }\n\n subscribe = (fn: (_: ElementData) => void) => {\n this.listeners.add(fn)\n }\n\n unsubscribe = (fn: (_: ElementData) => void) => {\n this.listeners.delete(fn)\n }\n\n triggerUpdate = () => {\n console.log('👉 --------> - this.listeners.size', this.listeners.size)\n this.listeners.forEach((fn) => {\n console.log('👉 --------> - listeners fn:', fn)\n return fn(this.data)\n })\n }\n}\n\nexport class Weaverse {\n /**\n * The `weaverse-content-root` element of Weaverse SDK\n */\n contentRootElement: HTMLElement | undefined\n /**\n * For storing, registering element React component from Weaverse or created by user/developer\n */\n elementInstances = new Map<string, WeaverseElement>()\n /**\n * list of element/items store to provide data, handle state update, state sharing, etc.\n */\n itemInstances = new Map<string | number, WeaverseItemStore>()\n /**\n * Weaverse base URL that can provide by user/developer. for local development, use localhost:3000\n */\n weaverseHost = \"https://weaverse.io\"\n /**\n * Weaverse version, it can be used to load the correct version of Weaverse SDK\n */\n weaverseVersion = \"\"\n /**\n * Weaverse project key to access project data via API\n */\n projectId = \"\"\n\n pageId = \"\"\n\n internal: any = {}\n requestInfo: any = {}\n /**\n * Weaverse project data, by default, user can provide project data via React Component:\n * <WeaverseRoot data={data} /> it will be used to server-side rendering\n */\n data: WeaverseProjectDataType = {\n rootId: \"\",\n items: [],\n script: { css: \"\", js: \"\" },\n }\n /**\n * Storing subscribe callback function for any component that want to listen to the change of WeaverseRoot\n */\n listeners: Set<() => void> = new Set()\n /**\n * Check whether the sdk is in editor or not.\n * If isDesignMode is true, it means the sdk is isDesignMode mode, render the editor UI,\n * else render the preview UI, plain HTML + CSS + React hydrate\n */\n isDesignMode = false\n\n /**\n * Check the platform, shopify-section or react-ssr(hydrogen)\n */\n platformType: PlatformTypeEnum = \"shopify-section\"\n\n /**\n * Check whether the sdk is in preview mode or not\n */\n isPreviewMode = false\n\n /**\n * Use in element to optionally render special HTML for hydration\n */\n ssrMode = false\n /**\n * Stitches instance for handling CSS stylesheet, media, theme for Weaverse project\n */\n stitchesInstance: Stitches | any\n\n studioBridge?: any\n elementSchemas: ElementSchema[] = []\n static WeaverseItemStore: typeof WeaverseItemStore = WeaverseItemStore\n\n mediaBreakPoints: BreakPoints = {\n desktop: \"all\",\n // max-width need to subtract 0.02px to prevent bug https://getbootstrap.com/docs/5.1/layout/breakpoints/#max-width\n // tablet: \"(max-width: 1023.98px)\", // to set css for tablet, {'@tablet' : { // css }},\n mobile: \"(max-width: 767.98px)\",\n }\n\n /**\n * constructor\n * @param weaverseHost {string} Weaverse base URL that can provide by user/developer. for local development, use localhost:3000\n * @param projectId {string} Weaverse project key to access project data via API\n * @param data {WeaverseProjectDataType} Weaverse project data, by default, user can provide project data via React Component.\n * @param mediaBreakPoints {object} Pass down custom media query breakpoints or just use the default.\n * @param isDesignMode {boolean} check whether the sdk is isDesignMode or not\n * @param ssrMode {boolean} Use in element to optionally render special HTML for hydration\n * @param elementSchemas {Array<ElementSchema>} List of element schemas\n * @param platformType {PlatformTypeEnum} Check the platform, shopify-section or react-ssr(hydrogen)\n */\n constructor(params: WeaverseType = {}) {\n Object.entries(params).forEach(([k, v]) => {\n let key = k as keyof typeof this\n if (key in this) {\n this[key] = v || this[key]\n }\n })\n this.initProject()\n this.initStitches()\n }\n\n /**\n * Register the custom React Component to Weaverse, store it into Weaverse.elementInstances\n * @param element {WeaverseElement} custom React Component\n */\n registerElement(element: WeaverseElement) {\n if (element?.type) {\n if (!this.elementInstances.has(element.type)) {\n this.elementInstances.set(element?.type, element)\n }\n } else {\n console.error(\"Weaverse: registerElement: `type` is required\")\n }\n }\n\n initStitches = (externalConfig = {}) => {\n this.stitchesInstance =\n this.stitchesInstance ||\n stitches.createStitches({\n prefix: \"weaverse\",\n media: this.mediaBreakPoints,\n utils: stitchesUtils,\n ...externalConfig,\n })\n }\n\n subscribe(fn: any) {\n this.listeners.add(fn)\n }\n\n unsubscribe(fn: any) {\n this.listeners.delete(fn)\n }\n\n triggerUpdate() {\n console.log('👉 --------> - core: triggerUpdate called')\n this.listeners.forEach((fn) => fn())\n }\n refreshAllItems() {\n this.itemInstances.forEach((item) => {\n item.triggerUpdate()\n })\n }\n\n /**\n * When applying new template,\n * we need to reset the project data and re-initialize the project item data\n * @param data {WeaverseProjectDataType}\n */\n setProjectData(data: WeaverseProjectDataType) {\n this.data = data\n this.initProject()\n }\n\n /**\n * Create new WeaverseItemStore instance for each item in project data\n */\n initProject() {\n const data = this.data\n if (data?.items) {\n data.items.forEach((item) => {\n if (!this.itemInstances.get(item.id as string | number)) {\n return new WeaverseItemStore(item, this)\n } else {\n let itemInstance = this.itemInstances.get(item.id as string | number)\n if (itemInstance) {\n itemInstance.setData(item)\n }\n }\n })\n }\n }\n}\n","export let loadScript = (src: string) => {\n return new Promise((resolve, reject) => {\n let currScript = document.querySelector(`script[src=\"${src}\"]`)\n if (currScript) {\n return resolve(true)\n }\n let script = document.createElement(\"script\")\n script.src = src\n script.onload = resolve\n script.onerror = reject\n script.defer = true\n document.body.appendChild(script)\n })\n}\n\nexport default loadScript\n","import type { WeaverseItemStore } from \"~/core\"\nimport type { BasicGroup } from \"~/types\"\n\nexport let isReactNative = typeof navigator === \"object\" && navigator.product === \"ReactNative\"\nexport let isBrowser = typeof window !== \"undefined\" && !isReactNative\nexport let isIframe = isBrowser && window.top !== window.self\n\n/**\n * Deep merge two objects.\n * @param target\n * @param source\n */\nexport function merge(target: Record<string, any>, source: Record<string, any>) {\n let t = { ...(target || {}) }\n // Iterate through `source` properties and if an `Object` set property to merge of `target` and `source` properties\n for (let key of Object.keys(source)) {\n if (source[key] instanceof Object && !Array.isArray(source[key])) {\n Object.assign(source[key], merge(t[key], source[key]))\n }\n }\n\n // Join `target` and modified `source`\n Object.assign(t || {}, source)\n return t\n}\n\nexport { loadScript } from \"./load-script\"\n\nexport function getItemDefaultData(item: WeaverseItemStore) {\n let platformType = item.weaverse.platformType\n if (platformType === \"shopify-section\") {\n return { ...item.Element?.Component?.defaultProps }\n }\n let groups = item.Element?.schema?.inspector as BasicGroup[]\n let inputs = groups?.flatMap((group) => group.inputs)\n return inputs?.reduce<Record<string, any>>((a, { defaultValue, name }) => {\n if (name && defaultValue !== null && defaultValue !== undefined) {\n a[name] = defaultValue\n }\n return a\n }, {})\n}\n","export let stitchesUtils = {\n // Abbreviated margin properties\n m: (value: string) => ({\n margin: value,\n }),\n mt: (value: string) => ({\n marginTop: value,\n }),\n mr: (value: string) => ({\n marginRight: value,\n }),\n mb: (value: string) => ({\n marginBottom: value,\n }),\n ml: (value: string) => ({\n marginLeft: value,\n }),\n mx: (value: string) => ({\n marginLeft: value,\n marginRight: value,\n }),\n my: (value: string) => ({\n marginTop: value,\n marginBottom: value,\n }),\n\n // A property for applying width/height together\n size: (value: string) => ({\n width: value,\n height: value,\n }),\n // Abbreviated padding properties\n px: (value: string) => ({\n paddingLeft: value,\n paddingRight: value,\n }),\n py: (value: string) => ({\n paddingTop: value,\n paddingBottom: value,\n }),\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/core.ts","../src/utils/load-script.ts","../src/utils/index.ts","../src/utils/styles.ts"],"sourcesContent":["export * from \"./types\"\nexport * from \"./core\"\nexport * from \"./utils\"\n","// TODO: Implement Weaverse SDK class\n// Only core code is implemented here, avoid importing other packages,\n// the core code should be framework agnostic, no react, vue, angular, etc.\n// noinspection JSUnusedGlobalSymbols\n\n// using stitches core only for framework-agnostic code\nimport * as stitches from \"@stitches/core\"\nimport type Stitches from \"@stitches/core/types/stitches\"\nimport type { RefObject } from \"react\"\nimport type {\n BreakPoints,\n ElementData,\n ElementSchema,\n PlatformTypeEnum,\n WeaverseElement,\n WeaverseProjectDataType,\n WeaverseType,\n} from \"./types\"\nimport { getItemDefaultData, merge } from \"./utils\"\nimport { stitchesUtils } from \"./utils/styles\"\n\nexport class WeaverseItemStore {\n weaverse: Weaverse\n listeners: Set<(_: ElementData) => void> = new Set()\n ref: RefObject<HTMLElement> = { current: null }\n stitchesClass = \"\"\n private _store: ElementData = { id: \"\", type: \"\" }\n\n constructor(itemData: ElementData, weaverse: Weaverse) {\n let { type, id } = itemData\n this.weaverse = weaverse\n if (id && type) {\n weaverse.itemInstances.set(id, this)\n if (weaverse.platformType === \"shopify-hydrogen\") {\n let { data, ...rest } = itemData\n this._store = { ...data, ...rest }\n } else {\n this._store = { ...itemData }\n }\n }\n }\n\n get _id() {\n return this._store.id\n }\n get _element() {\n return this.ref.current\n }\n get _flags() {\n return this.Element?.schema?.flags || {}\n }\n get Element() {\n return this.weaverse.elementInstances.get(this._store.type)\n }\n\n set data(update: Omit<ElementData, \"id\" | \"type\">) {\n // if (this.weaverse.platformType === \"shopify-hydrogen\") {\n // let { children, ...rest } = update\n // if (children) {\n // this._store.children = children\n // }\n // this._store.data = merge(this._store.data, rest)\n // } else {\n // this._store = { ...this.data, ...update }\n // }\n this._store = { ...this.data, ...update }\n }\n\n get data(): ElementData {\n // let defaultProps = { ...this.Element?.Component?.defaultProps }\n let defaultData = getItemDefaultData(this)\n // if (this.platformType === \"shopify-hydrogen\") {\n // return {\n // ...defaultProps,\n // ...this._store,\n // data: { ...defaultProps?.data, ...this._store.data },\n // }\n // } else {\n // let defaultCss = this.Element?.defaultCss || {}\n // let currentCss = this._store.css || {}\n // let css = merge(defaultCss, currentCss)\n // let extraData = this.Element?.extraData\n // return { ...defaultProps, ...extraData, ...this._store, css }\n // }\n let defaultCss = this.Element?.defaultCss || {}\n let currentCss = this._store.css || {}\n let css = merge(defaultCss, currentCss)\n let extraData = this.Element?.extraData\n return { ...defaultData, ...extraData, ...this._store, css }\n }\n\n setData = (update: Omit<ElementData, \"id\" | \"type\">) => {\n // if (this.weaverse.platformType === \"shopify-hydrogen\") {\n // this.data = update\n // } else {\n // this.data = Object.assign(this.data, update)\n // }\n this.data = Object.assign(this.data, update)\n\n this.triggerUpdate()\n return this.data\n }\n\n subscribe = (fn: (_: ElementData) => void) => {\n this.listeners.add(fn)\n }\n\n unsubscribe = (fn: (_: ElementData) => void) => {\n this.listeners.delete(fn)\n }\n\n triggerUpdate = () => {\n this.listeners.forEach((fn) => {\n return fn(this.data)\n })\n }\n}\n\nexport class Weaverse {\n /**\n * The `weaverse-content-root` element of Weaverse SDK\n */\n contentRootElement: HTMLElement | undefined\n /**\n * For storing, registering element React component from Weaverse or created by user/developer\n */\n elementInstances = new Map<string, WeaverseElement>()\n /**\n * list of element/items store to provide data, handle state update, state sharing, etc.\n */\n itemInstances = new Map<string | number, WeaverseItemStore>()\n /**\n * Weaverse base URL that can provide by user/developer. for local development, use localhost:3000\n */\n weaverseHost = \"https://weaverse.io\"\n /**\n * Weaverse version, it can be used to load the correct version of Weaverse SDK\n */\n weaverseVersion = \"\"\n /**\n * Weaverse project key to access project data via API\n */\n projectId = \"\"\n\n pageId = \"\"\n\n internal: any = {}\n requestInfo: any = {}\n /**\n * Weaverse project data, by default, user can provide project data via React Component:\n * <WeaverseRoot data={data} /> it will be used to server-side rendering\n */\n data: WeaverseProjectDataType = {\n rootId: \"\",\n items: [],\n script: { css: \"\", js: \"\" },\n }\n /**\n * Storing subscribe callback function for any component that want to listen to the change of WeaverseRoot\n */\n listeners: Set<() => void> = new Set()\n /**\n * Check whether the sdk is in editor or not.\n * If isDesignMode is true, it means the sdk is isDesignMode mode, render the editor UI,\n * else render the preview UI, plain HTML + CSS + React hydrate\n */\n isDesignMode = false\n\n /**\n * Check the platform, shopify-section or react-ssr(hydrogen)\n */\n platformType: PlatformTypeEnum = \"shopify-section\"\n\n /**\n * Check whether the sdk is in preview mode or not\n */\n isPreviewMode = false\n\n /**\n * Use in element to optionally render special HTML for hydration\n */\n ssrMode = false\n /**\n * Stitches instance for handling CSS stylesheet, media, theme for Weaverse project\n */\n stitchesInstance: Stitches | any\n\n studioBridge?: any\n elementSchemas: ElementSchema[] = []\n static WeaverseItemStore: typeof WeaverseItemStore = WeaverseItemStore\n\n mediaBreakPoints: BreakPoints = {\n desktop: \"all\",\n // max-width need to subtract 0.02px to prevent bug https://getbootstrap.com/docs/5.1/layout/breakpoints/#max-width\n // tablet: \"(max-width: 1023.98px)\", // to set css for tablet, {'@tablet' : { // css }},\n mobile: \"(max-width: 767.98px)\",\n }\n\n /**\n * constructor\n * @param weaverseHost {string} Weaverse base URL that can provide by user/developer. for local development, use localhost:3000\n * @param projectId {string} Weaverse project key to access project data via API\n * @param data {WeaverseProjectDataType} Weaverse project data, by default, user can provide project data via React Component.\n * @param mediaBreakPoints {object} Pass down custom media query breakpoints or just use the default.\n * @param isDesignMode {boolean} check whether the sdk is isDesignMode or not\n * @param ssrMode {boolean} Use in element to optionally render special HTML for hydration\n * @param elementSchemas {Array<ElementSchema>} List of element schemas\n * @param platformType {PlatformTypeEnum} Check the platform, shopify-section or react-ssr(hydrogen)\n */\n constructor(params: WeaverseType = {}) {\n Object.entries(params).forEach(([k, v]) => {\n let key = k as keyof typeof this\n if (key in this) {\n this[key] = v || this[key]\n }\n })\n this.initProject()\n this.initStitches()\n }\n\n /**\n * Register the custom React Component to Weaverse, store it into Weaverse.elementInstances\n * @param element {WeaverseElement} custom React Component\n */\n registerElement(element: WeaverseElement) {\n if (element?.type) {\n if (!this.elementInstances.has(element.type)) {\n this.elementInstances.set(element?.type, element)\n }\n } else {\n console.error(\"Weaverse: registerElement: `type` is required\")\n }\n }\n\n initStitches = (externalConfig = {}) => {\n this.stitchesInstance =\n this.stitchesInstance ||\n stitches.createStitches({\n prefix: \"weaverse\",\n media: this.mediaBreakPoints,\n utils: stitchesUtils,\n ...externalConfig,\n })\n }\n\n subscribe(fn: any) {\n this.listeners.add(fn)\n }\n\n unsubscribe(fn: any) {\n this.listeners.delete(fn)\n }\n\n triggerUpdate() {\n this.listeners.forEach((fn) => fn())\n }\n refreshAllItems() {\n this.itemInstances.forEach((item) => {\n item.triggerUpdate()\n })\n }\n\n /**\n * When applying new template,\n * we need to reset the project data and re-initialize the project item data\n * @param data {WeaverseProjectDataType}\n */\n setProjectData(data: WeaverseProjectDataType) {\n this.data = data\n this.initProject()\n }\n\n /**\n * Create new WeaverseItemStore instance for each item in project data\n */\n initProject() {\n const data = this.data\n if (data?.items) {\n data.items.forEach((item) => {\n if (!this.itemInstances.get(item.id as string | number)) {\n return new WeaverseItemStore(item, this)\n } else {\n let itemInstance = this.itemInstances.get(item.id as string | number)\n if (itemInstance) {\n itemInstance.setData(item)\n }\n }\n })\n }\n }\n}\n","export let loadScript = (src: string) => {\n return new Promise((resolve, reject) => {\n let currScript = document.querySelector(`script[src=\"${src}\"]`)\n if (currScript) {\n return resolve(true)\n }\n let script = document.createElement(\"script\")\n script.src = src\n script.onload = resolve\n script.onerror = reject\n script.defer = true\n document.body.appendChild(script)\n })\n}\n\nexport default loadScript\n","import type { WeaverseItemStore } from \"~/core\"\nimport type { BasicGroup } from \"~/types\"\n\nexport let isReactNative = typeof navigator === \"object\" && navigator.product === \"ReactNative\"\nexport let isBrowser = typeof window !== \"undefined\" && !isReactNative\nexport let isIframe = isBrowser && window.top !== window.self\n\n/**\n * Deep merge two objects.\n * @param target\n * @param source\n */\nexport function merge(target: Record<string, any>, source: Record<string, any>) {\n let t = { ...(target || {}) }\n // Iterate through `source` properties and if an `Object` set property to merge of `target` and `source` properties\n for (let key of Object.keys(source)) {\n if (source[key] instanceof Object && !Array.isArray(source[key])) {\n Object.assign(source[key], merge(t[key], source[key]))\n }\n }\n\n // Join `target` and modified `source`\n Object.assign(t || {}, source)\n return t\n}\n\nexport { loadScript } from \"./load-script\"\n\nexport function getItemDefaultData(item: WeaverseItemStore) {\n let platformType = item.weaverse.platformType\n if (platformType === \"shopify-section\") {\n return { ...item.Element?.Component?.defaultProps }\n }\n let groups = item.Element?.schema?.inspector as BasicGroup[]\n let inputs = groups?.flatMap((group) => group.inputs)\n return inputs?.reduce<Record<string, any>>((a, { defaultValue, name }) => {\n if (name && defaultValue !== null && defaultValue !== undefined) {\n a[name] = defaultValue\n }\n return a\n }, {})\n}\n","export let stitchesUtils = {\n // Abbreviated margin properties\n m: (value: string) => ({\n margin: value,\n }),\n mt: (value: string) => ({\n marginTop: value,\n }),\n mr: (value: string) => ({\n marginRight: value,\n }),\n mb: (value: string) => ({\n marginBottom: value,\n }),\n ml: (value: string) => ({\n marginLeft: value,\n }),\n mx: (value: string) => ({\n marginLeft: value,\n marginRight: value,\n }),\n my: (value: string) => ({\n marginTop: value,\n marginBottom: value,\n }),\n\n // A property for applying width/height together\n size: (value: string) => ({\n width: value,\n height: value,\n }),\n // Abbreviated padding properties\n px: (value: string) => ({\n paddingLeft: value,\n paddingRight: value,\n }),\n py: (value: string) => ({\n paddingTop: value,\n paddingBottom: value,\n }),\n}\n"],"mappings":"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","names":[]}
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core.ts","../src/utils/load-script.ts","../src/utils/index.ts","../src/utils/styles.ts"],"sourcesContent":["// TODO: Implement Weaverse SDK class\n// Only core code is implemented here, avoid importing other packages,\n// the core code should be framework agnostic, no react, vue, angular, etc.\n// noinspection JSUnusedGlobalSymbols\n\n// using stitches core only for framework-agnostic code\nimport * as stitches from \"@stitches/core\"\nimport type Stitches from \"@stitches/core/types/stitches\"\nimport type { RefObject } from \"react\"\nimport type {\n BreakPoints,\n ElementData,\n ElementSchema,\n PlatformTypeEnum,\n WeaverseElement,\n WeaverseProjectDataType,\n WeaverseType,\n} from \"./types\"\nimport { getItemDefaultData, merge } from \"./utils\"\nimport { stitchesUtils } from \"./utils/styles\"\n\nexport class WeaverseItemStore {\n weaverse: Weaverse\n listeners: Set<(_: ElementData) => void> = new Set()\n ref: RefObject<HTMLElement> = { current: null }\n stitchesClass = \"\"\n private _store: ElementData = { id: \"\", type: \"\" }\n\n constructor(itemData: ElementData, weaverse: Weaverse) {\n let { type, id } = itemData\n this.weaverse = weaverse\n if (id && type) {\n weaverse.itemInstances.set(id, this)\n if (weaverse.platformType === \"shopify-hydrogen\") {\n let { data, ...rest } = itemData\n this._store = { ...data, ...rest }\n } else {\n this._store = { ...itemData }\n }\n }\n }\n\n get _id() {\n return this._store.id\n }\n get _element() {\n return this.ref.current\n }\n get _flags() {\n return this.Element?.schema?.flags || {}\n }\n get Element() {\n return this.weaverse.elementInstances.get(this._store.type)\n }\n\n set data(update: Omit<ElementData, \"id\" | \"type\">) {\n // if (this.weaverse.platformType === \"shopify-hydrogen\") {\n // let { children, ...rest } = update\n // if (children) {\n // this._store.children = children\n // }\n // this._store.data = merge(this._store.data, rest)\n // } else {\n // this._store = { ...this.data, ...update }\n // }\n this._store = { ...this.data, ...update }\n }\n\n get data(): ElementData {\n // let defaultProps = { ...this.Element?.Component?.defaultProps }\n let defaultData = getItemDefaultData(this)\n // if (this.platformType === \"shopify-hydrogen\") {\n // return {\n // ...defaultProps,\n // ...this._store,\n // data: { ...defaultProps?.data, ...this._store.data },\n // }\n // } else {\n // let defaultCss = this.Element?.defaultCss || {}\n // let currentCss = this._store.css || {}\n // let css = merge(defaultCss, currentCss)\n // let extraData = this.Element?.extraData\n // return { ...defaultProps, ...extraData, ...this._store, css }\n // }\n let defaultCss = this.Element?.defaultCss || {}\n let currentCss = this._store.css || {}\n let css = merge(defaultCss, currentCss)\n let extraData = this.Element?.extraData\n return { ...defaultData, ...extraData, ...this._store, css }\n }\n\n setData = (update: Omit<ElementData, \"id\" | \"type\">) => {\n console.log('👉 --------> - setData update:', update)\n // if (this.weaverse.platformType === \"shopify-hydrogen\") {\n // this.data = update\n // } else {\n // this.data = Object.assign(this.data, update)\n // }\n this.data = Object.assign(this.data, update)\n\n this.triggerUpdate()\n return this.data\n }\n\n subscribe = (fn: (_: ElementData) => void) => {\n this.listeners.add(fn)\n }\n\n unsubscribe = (fn: (_: ElementData) => void) => {\n this.listeners.delete(fn)\n }\n\n triggerUpdate = () => {\n console.log('👉 --------> - this.listeners.size', this.listeners.size)\n this.listeners.forEach((fn) => {\n console.log('👉 --------> - listeners fn:', fn)\n return fn(this.data)\n })\n }\n}\n\nexport class Weaverse {\n /**\n * The `weaverse-content-root` element of Weaverse SDK\n */\n contentRootElement: HTMLElement | undefined\n /**\n * For storing, registering element React component from Weaverse or created by user/developer\n */\n elementInstances = new Map<string, WeaverseElement>()\n /**\n * list of element/items store to provide data, handle state update, state sharing, etc.\n */\n itemInstances = new Map<string | number, WeaverseItemStore>()\n /**\n * Weaverse base URL that can provide by user/developer. for local development, use localhost:3000\n */\n weaverseHost = \"https://weaverse.io\"\n /**\n * Weaverse version, it can be used to load the correct version of Weaverse SDK\n */\n weaverseVersion = \"\"\n /**\n * Weaverse project key to access project data via API\n */\n projectId = \"\"\n\n pageId = \"\"\n\n internal: any = {}\n requestInfo: any = {}\n /**\n * Weaverse project data, by default, user can provide project data via React Component:\n * <WeaverseRoot data={data} /> it will be used to server-side rendering\n */\n data: WeaverseProjectDataType = {\n rootId: \"\",\n items: [],\n script: { css: \"\", js: \"\" },\n }\n /**\n * Storing subscribe callback function for any component that want to listen to the change of WeaverseRoot\n */\n listeners: Set<() => void> = new Set()\n /**\n * Check whether the sdk is in editor or not.\n * If isDesignMode is true, it means the sdk is isDesignMode mode, render the editor UI,\n * else render the preview UI, plain HTML + CSS + React hydrate\n */\n isDesignMode = false\n\n /**\n * Check the platform, shopify-section or react-ssr(hydrogen)\n */\n platformType: PlatformTypeEnum = \"shopify-section\"\n\n /**\n * Check whether the sdk is in preview mode or not\n */\n isPreviewMode = false\n\n /**\n * Use in element to optionally render special HTML for hydration\n */\n ssrMode = false\n /**\n * Stitches instance for handling CSS stylesheet, media, theme for Weaverse project\n */\n stitchesInstance: Stitches | any\n\n studioBridge?: any\n elementSchemas: ElementSchema[] = []\n static WeaverseItemStore: typeof WeaverseItemStore = WeaverseItemStore\n\n mediaBreakPoints: BreakPoints = {\n desktop: \"all\",\n // max-width need to subtract 0.02px to prevent bug https://getbootstrap.com/docs/5.1/layout/breakpoints/#max-width\n // tablet: \"(max-width: 1023.98px)\", // to set css for tablet, {'@tablet' : { // css }},\n mobile: \"(max-width: 767.98px)\",\n }\n\n /**\n * constructor\n * @param weaverseHost {string} Weaverse base URL that can provide by user/developer. for local development, use localhost:3000\n * @param projectId {string} Weaverse project key to access project data via API\n * @param data {WeaverseProjectDataType} Weaverse project data, by default, user can provide project data via React Component.\n * @param mediaBreakPoints {object} Pass down custom media query breakpoints or just use the default.\n * @param isDesignMode {boolean} check whether the sdk is isDesignMode or not\n * @param ssrMode {boolean} Use in element to optionally render special HTML for hydration\n * @param elementSchemas {Array<ElementSchema>} List of element schemas\n * @param platformType {PlatformTypeEnum} Check the platform, shopify-section or react-ssr(hydrogen)\n */\n constructor(params: WeaverseType = {}) {\n Object.entries(params).forEach(([k, v]) => {\n let key = k as keyof typeof this\n if (key in this) {\n this[key] = v || this[key]\n }\n })\n this.initProject()\n this.initStitches()\n }\n\n /**\n * Register the custom React Component to Weaverse, store it into Weaverse.elementInstances\n * @param element {WeaverseElement} custom React Component\n */\n registerElement(element: WeaverseElement) {\n if (element?.type) {\n if (!this.elementInstances.has(element.type)) {\n this.elementInstances.set(element?.type, element)\n }\n } else {\n console.error(\"Weaverse: registerElement: `type` is required\")\n }\n }\n\n initStitches = (externalConfig = {}) => {\n this.stitchesInstance =\n this.stitchesInstance ||\n stitches.createStitches({\n prefix: \"weaverse\",\n media: this.mediaBreakPoints,\n utils: stitchesUtils,\n ...externalConfig,\n })\n }\n\n subscribe(fn: any) {\n this.listeners.add(fn)\n }\n\n unsubscribe(fn: any) {\n this.listeners.delete(fn)\n }\n\n triggerUpdate() {\n console.log('👉 --------> - core: triggerUpdate called')\n this.listeners.forEach((fn) => fn())\n }\n refreshAllItems() {\n this.itemInstances.forEach((item) => {\n item.triggerUpdate()\n })\n }\n\n /**\n * When applying new template,\n * we need to reset the project data and re-initialize the project item data\n * @param data {WeaverseProjectDataType}\n */\n setProjectData(data: WeaverseProjectDataType) {\n this.data = data\n this.initProject()\n }\n\n /**\n * Create new WeaverseItemStore instance for each item in project data\n */\n initProject() {\n const data = this.data\n if (data?.items) {\n data.items.forEach((item) => {\n if (!this.itemInstances.get(item.id as string | number)) {\n return new WeaverseItemStore(item, this)\n } else {\n let itemInstance = this.itemInstances.get(item.id as string | number)\n if (itemInstance) {\n itemInstance.setData(item)\n }\n }\n })\n }\n }\n}\n","export let loadScript = (src: string) => {\n return new Promise((resolve, reject) => {\n let currScript = document.querySelector(`script[src=\"${src}\"]`)\n if (currScript) {\n return resolve(true)\n }\n let script = document.createElement(\"script\")\n script.src = src\n script.onload = resolve\n script.onerror = reject\n script.defer = true\n document.body.appendChild(script)\n })\n}\n\nexport default loadScript\n","import type { WeaverseItemStore } from \"~/core\"\nimport type { BasicGroup } from \"~/types\"\n\nexport let isReactNative = typeof navigator === \"object\" && navigator.product === \"ReactNative\"\nexport let isBrowser = typeof window !== \"undefined\" && !isReactNative\nexport let isIframe = isBrowser && window.top !== window.self\n\n/**\n * Deep merge two objects.\n * @param target\n * @param source\n */\nexport function merge(target: Record<string, any>, source: Record<string, any>) {\n let t = { ...(target || {}) }\n // Iterate through `source` properties and if an `Object` set property to merge of `target` and `source` properties\n for (let key of Object.keys(source)) {\n if (source[key] instanceof Object && !Array.isArray(source[key])) {\n Object.assign(source[key], merge(t[key], source[key]))\n }\n }\n\n // Join `target` and modified `source`\n Object.assign(t || {}, source)\n return t\n}\n\nexport { loadScript } from \"./load-script\"\n\nexport function getItemDefaultData(item: WeaverseItemStore) {\n let platformType = item.weaverse.platformType\n if (platformType === \"shopify-section\") {\n return { ...item.Element?.Component?.defaultProps }\n }\n let groups = item.Element?.schema?.inspector as BasicGroup[]\n let inputs = groups?.flatMap((group) => group.inputs)\n return inputs?.reduce<Record<string, any>>((a, { defaultValue, name }) => {\n if (name && defaultValue !== null && defaultValue !== undefined) {\n a[name] = defaultValue\n }\n return a\n }, {})\n}\n","export let stitchesUtils = {\n // Abbreviated margin properties\n m: (value: string) => ({\n margin: value,\n }),\n mt: (value: string) => ({\n marginTop: value,\n }),\n mr: (value: string) => ({\n marginRight: value,\n }),\n mb: (value: string) => ({\n marginBottom: value,\n }),\n ml: (value: string) => ({\n marginLeft: value,\n }),\n mx: (value: string) => ({\n marginLeft: value,\n marginRight: value,\n }),\n my: (value: string) => ({\n marginTop: value,\n marginBottom: value,\n }),\n\n // A property for applying width/height together\n size: (value: string) => ({\n width: value,\n height: value,\n }),\n // Abbreviated padding properties\n px: (value: string) => ({\n paddingLeft: value,\n paddingRight: value,\n }),\n py: (value: string) => ({\n paddingTop: value,\n paddingBottom: value,\n }),\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/core.ts","../src/utils/load-script.ts","../src/utils/index.ts","../src/utils/styles.ts"],"sourcesContent":["// TODO: Implement Weaverse SDK class\n// Only core code is implemented here, avoid importing other packages,\n// the core code should be framework agnostic, no react, vue, angular, etc.\n// noinspection JSUnusedGlobalSymbols\n\n// using stitches core only for framework-agnostic code\nimport * as stitches from \"@stitches/core\"\nimport type Stitches from \"@stitches/core/types/stitches\"\nimport type { RefObject } from \"react\"\nimport type {\n BreakPoints,\n ElementData,\n ElementSchema,\n PlatformTypeEnum,\n WeaverseElement,\n WeaverseProjectDataType,\n WeaverseType,\n} from \"./types\"\nimport { getItemDefaultData, merge } from \"./utils\"\nimport { stitchesUtils } from \"./utils/styles\"\n\nexport class WeaverseItemStore {\n weaverse: Weaverse\n listeners: Set<(_: ElementData) => void> = new Set()\n ref: RefObject<HTMLElement> = { current: null }\n stitchesClass = \"\"\n private _store: ElementData = { id: \"\", type: \"\" }\n\n constructor(itemData: ElementData, weaverse: Weaverse) {\n let { type, id } = itemData\n this.weaverse = weaverse\n if (id && type) {\n weaverse.itemInstances.set(id, this)\n if (weaverse.platformType === \"shopify-hydrogen\") {\n let { data, ...rest } = itemData\n this._store = { ...data, ...rest }\n } else {\n this._store = { ...itemData }\n }\n }\n }\n\n get _id() {\n return this._store.id\n }\n get _element() {\n return this.ref.current\n }\n get _flags() {\n return this.Element?.schema?.flags || {}\n }\n get Element() {\n return this.weaverse.elementInstances.get(this._store.type)\n }\n\n set data(update: Omit<ElementData, \"id\" | \"type\">) {\n // if (this.weaverse.platformType === \"shopify-hydrogen\") {\n // let { children, ...rest } = update\n // if (children) {\n // this._store.children = children\n // }\n // this._store.data = merge(this._store.data, rest)\n // } else {\n // this._store = { ...this.data, ...update }\n // }\n this._store = { ...this.data, ...update }\n }\n\n get data(): ElementData {\n // let defaultProps = { ...this.Element?.Component?.defaultProps }\n let defaultData = getItemDefaultData(this)\n // if (this.platformType === \"shopify-hydrogen\") {\n // return {\n // ...defaultProps,\n // ...this._store,\n // data: { ...defaultProps?.data, ...this._store.data },\n // }\n // } else {\n // let defaultCss = this.Element?.defaultCss || {}\n // let currentCss = this._store.css || {}\n // let css = merge(defaultCss, currentCss)\n // let extraData = this.Element?.extraData\n // return { ...defaultProps, ...extraData, ...this._store, css }\n // }\n let defaultCss = this.Element?.defaultCss || {}\n let currentCss = this._store.css || {}\n let css = merge(defaultCss, currentCss)\n let extraData = this.Element?.extraData\n return { ...defaultData, ...extraData, ...this._store, css }\n }\n\n setData = (update: Omit<ElementData, \"id\" | \"type\">) => {\n // if (this.weaverse.platformType === \"shopify-hydrogen\") {\n // this.data = update\n // } else {\n // this.data = Object.assign(this.data, update)\n // }\n this.data = Object.assign(this.data, update)\n\n this.triggerUpdate()\n return this.data\n }\n\n subscribe = (fn: (_: ElementData) => void) => {\n this.listeners.add(fn)\n }\n\n unsubscribe = (fn: (_: ElementData) => void) => {\n this.listeners.delete(fn)\n }\n\n triggerUpdate = () => {\n this.listeners.forEach((fn) => {\n return fn(this.data)\n })\n }\n}\n\nexport class Weaverse {\n /**\n * The `weaverse-content-root` element of Weaverse SDK\n */\n contentRootElement: HTMLElement | undefined\n /**\n * For storing, registering element React component from Weaverse or created by user/developer\n */\n elementInstances = new Map<string, WeaverseElement>()\n /**\n * list of element/items store to provide data, handle state update, state sharing, etc.\n */\n itemInstances = new Map<string | number, WeaverseItemStore>()\n /**\n * Weaverse base URL that can provide by user/developer. for local development, use localhost:3000\n */\n weaverseHost = \"https://weaverse.io\"\n /**\n * Weaverse version, it can be used to load the correct version of Weaverse SDK\n */\n weaverseVersion = \"\"\n /**\n * Weaverse project key to access project data via API\n */\n projectId = \"\"\n\n pageId = \"\"\n\n internal: any = {}\n requestInfo: any = {}\n /**\n * Weaverse project data, by default, user can provide project data via React Component:\n * <WeaverseRoot data={data} /> it will be used to server-side rendering\n */\n data: WeaverseProjectDataType = {\n rootId: \"\",\n items: [],\n script: { css: \"\", js: \"\" },\n }\n /**\n * Storing subscribe callback function for any component that want to listen to the change of WeaverseRoot\n */\n listeners: Set<() => void> = new Set()\n /**\n * Check whether the sdk is in editor or not.\n * If isDesignMode is true, it means the sdk is isDesignMode mode, render the editor UI,\n * else render the preview UI, plain HTML + CSS + React hydrate\n */\n isDesignMode = false\n\n /**\n * Check the platform, shopify-section or react-ssr(hydrogen)\n */\n platformType: PlatformTypeEnum = \"shopify-section\"\n\n /**\n * Check whether the sdk is in preview mode or not\n */\n isPreviewMode = false\n\n /**\n * Use in element to optionally render special HTML for hydration\n */\n ssrMode = false\n /**\n * Stitches instance for handling CSS stylesheet, media, theme for Weaverse project\n */\n stitchesInstance: Stitches | any\n\n studioBridge?: any\n elementSchemas: ElementSchema[] = []\n static WeaverseItemStore: typeof WeaverseItemStore = WeaverseItemStore\n\n mediaBreakPoints: BreakPoints = {\n desktop: \"all\",\n // max-width need to subtract 0.02px to prevent bug https://getbootstrap.com/docs/5.1/layout/breakpoints/#max-width\n // tablet: \"(max-width: 1023.98px)\", // to set css for tablet, {'@tablet' : { // css }},\n mobile: \"(max-width: 767.98px)\",\n }\n\n /**\n * constructor\n * @param weaverseHost {string} Weaverse base URL that can provide by user/developer. for local development, use localhost:3000\n * @param projectId {string} Weaverse project key to access project data via API\n * @param data {WeaverseProjectDataType} Weaverse project data, by default, user can provide project data via React Component.\n * @param mediaBreakPoints {object} Pass down custom media query breakpoints or just use the default.\n * @param isDesignMode {boolean} check whether the sdk is isDesignMode or not\n * @param ssrMode {boolean} Use in element to optionally render special HTML for hydration\n * @param elementSchemas {Array<ElementSchema>} List of element schemas\n * @param platformType {PlatformTypeEnum} Check the platform, shopify-section or react-ssr(hydrogen)\n */\n constructor(params: WeaverseType = {}) {\n Object.entries(params).forEach(([k, v]) => {\n let key = k as keyof typeof this\n if (key in this) {\n this[key] = v || this[key]\n }\n })\n this.initProject()\n this.initStitches()\n }\n\n /**\n * Register the custom React Component to Weaverse, store it into Weaverse.elementInstances\n * @param element {WeaverseElement} custom React Component\n */\n registerElement(element: WeaverseElement) {\n if (element?.type) {\n if (!this.elementInstances.has(element.type)) {\n this.elementInstances.set(element?.type, element)\n }\n } else {\n console.error(\"Weaverse: registerElement: `type` is required\")\n }\n }\n\n initStitches = (externalConfig = {}) => {\n this.stitchesInstance =\n this.stitchesInstance ||\n stitches.createStitches({\n prefix: \"weaverse\",\n media: this.mediaBreakPoints,\n utils: stitchesUtils,\n ...externalConfig,\n })\n }\n\n subscribe(fn: any) {\n this.listeners.add(fn)\n }\n\n unsubscribe(fn: any) {\n this.listeners.delete(fn)\n }\n\n triggerUpdate() {\n this.listeners.forEach((fn) => fn())\n }\n refreshAllItems() {\n this.itemInstances.forEach((item) => {\n item.triggerUpdate()\n })\n }\n\n /**\n * When applying new template,\n * we need to reset the project data and re-initialize the project item data\n * @param data {WeaverseProjectDataType}\n */\n setProjectData(data: WeaverseProjectDataType) {\n this.data = data\n this.initProject()\n }\n\n /**\n * Create new WeaverseItemStore instance for each item in project data\n */\n initProject() {\n const data = this.data\n if (data?.items) {\n data.items.forEach((item) => {\n if (!this.itemInstances.get(item.id as string | number)) {\n return new WeaverseItemStore(item, this)\n } else {\n let itemInstance = this.itemInstances.get(item.id as string | number)\n if (itemInstance) {\n itemInstance.setData(item)\n }\n }\n })\n }\n }\n}\n","export let loadScript = (src: string) => {\n return new Promise((resolve, reject) => {\n let currScript = document.querySelector(`script[src=\"${src}\"]`)\n if (currScript) {\n return resolve(true)\n }\n let script = document.createElement(\"script\")\n script.src = src\n script.onload = resolve\n script.onerror = reject\n script.defer = true\n document.body.appendChild(script)\n })\n}\n\nexport default loadScript\n","import type { WeaverseItemStore } from \"~/core\"\nimport type { BasicGroup } from \"~/types\"\n\nexport let isReactNative = typeof navigator === \"object\" && navigator.product === \"ReactNative\"\nexport let isBrowser = typeof window !== \"undefined\" && !isReactNative\nexport let isIframe = isBrowser && window.top !== window.self\n\n/**\n * Deep merge two objects.\n * @param target\n * @param source\n */\nexport function merge(target: Record<string, any>, source: Record<string, any>) {\n let t = { ...(target || {}) }\n // Iterate through `source` properties and if an `Object` set property to merge of `target` and `source` properties\n for (let key of Object.keys(source)) {\n if (source[key] instanceof Object && !Array.isArray(source[key])) {\n Object.assign(source[key], merge(t[key], source[key]))\n }\n }\n\n // Join `target` and modified `source`\n Object.assign(t || {}, source)\n return t\n}\n\nexport { loadScript } from \"./load-script\"\n\nexport function getItemDefaultData(item: WeaverseItemStore) {\n let platformType = item.weaverse.platformType\n if (platformType === \"shopify-section\") {\n return { ...item.Element?.Component?.defaultProps }\n }\n let groups = item.Element?.schema?.inspector as BasicGroup[]\n let inputs = groups?.flatMap((group) => group.inputs)\n return inputs?.reduce<Record<string, any>>((a, { defaultValue, name }) => {\n if (name && defaultValue !== null && defaultValue !== undefined) {\n a[name] = defaultValue\n }\n return a\n }, {})\n}\n","export let stitchesUtils = {\n // Abbreviated margin properties\n m: (value: string) => ({\n margin: value,\n }),\n mt: (value: string) => ({\n marginTop: value,\n }),\n mr: (value: string) => ({\n marginRight: value,\n }),\n mb: (value: string) => ({\n marginBottom: value,\n }),\n ml: (value: string) => ({\n marginLeft: value,\n }),\n mx: (value: string) => ({\n marginLeft: value,\n marginRight: value,\n }),\n my: (value: string) => ({\n marginTop: value,\n marginBottom: value,\n }),\n\n // A property for applying width/height together\n size: (value: string) => ({\n width: value,\n height: value,\n }),\n // Abbreviated padding properties\n px: (value: string) => ({\n paddingLeft: value,\n paddingRight: value,\n }),\n py: (value: string) => ({\n paddingTop: value,\n paddingBottom: value,\n }),\n}\n"],"mappings":"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","names":[]}
|
package/package.json
CHANGED