@makeswift/runtime 0.8.4 → 0.8.6

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 (196) hide show
  1. package/dist/Box.cjs.js +11 -11
  2. package/dist/Box.cjs.js.map +1 -1
  3. package/dist/Box.es.js +9 -9
  4. package/dist/Box.es.js.map +1 -1
  5. package/dist/Button.cjs.js +36 -37
  6. package/dist/Button.cjs.js.map +1 -1
  7. package/dist/Button.es.js +13 -14
  8. package/dist/Button.es.js.map +1 -1
  9. package/dist/Carousel.cjs.js +38 -37
  10. package/dist/Carousel.cjs.js.map +1 -1
  11. package/dist/Carousel.es.js +19 -18
  12. package/dist/Carousel.es.js.map +1 -1
  13. package/dist/Countdown.cjs.js +55 -29
  14. package/dist/Countdown.cjs.js.map +1 -1
  15. package/dist/Countdown.es.js +35 -9
  16. package/dist/Countdown.es.js.map +1 -1
  17. package/dist/Divider.cjs.js +36 -10
  18. package/dist/Divider.cjs.js.map +1 -1
  19. package/dist/Divider.es.js +31 -5
  20. package/dist/Divider.es.js.map +1 -1
  21. package/dist/Embed.cjs.js +31 -5
  22. package/dist/Embed.cjs.js.map +1 -1
  23. package/dist/Embed.es.js +30 -4
  24. package/dist/Embed.es.js.map +1 -1
  25. package/dist/Form.cjs.js +72 -73
  26. package/dist/Form.cjs.js.map +1 -1
  27. package/dist/Form.es.js +32 -33
  28. package/dist/Form.es.js.map +1 -1
  29. package/dist/Image.cjs.js +22 -21
  30. package/dist/Image.cjs.js.map +1 -1
  31. package/dist/Image.es.js +20 -19
  32. package/dist/Image.es.js.map +1 -1
  33. package/dist/LiveProvider.cjs.js +8 -9
  34. package/dist/LiveProvider.cjs.js.map +1 -1
  35. package/dist/LiveProvider.es.js +8 -9
  36. package/dist/LiveProvider.es.js.map +1 -1
  37. package/dist/Navigation.cjs.js +33 -34
  38. package/dist/Navigation.cjs.js.map +1 -1
  39. package/dist/Navigation.es.js +14 -15
  40. package/dist/Navigation.es.js.map +1 -1
  41. package/dist/PreviewProvider.cjs.js +12 -10
  42. package/dist/PreviewProvider.cjs.js.map +1 -1
  43. package/dist/PreviewProvider.es.js +12 -10
  44. package/dist/PreviewProvider.es.js.map +1 -1
  45. package/dist/ReadOnlyText.cjs.js +15 -16
  46. package/dist/ReadOnlyText.cjs.js.map +1 -1
  47. package/dist/ReadOnlyText.es.js +11 -12
  48. package/dist/ReadOnlyText.es.js.map +1 -1
  49. package/dist/Root.cjs.js +10 -10
  50. package/dist/Root.cjs.js.map +1 -1
  51. package/dist/Root.es.js +8 -8
  52. package/dist/SocialLinks.cjs.js +12 -13
  53. package/dist/SocialLinks.cjs.js.map +1 -1
  54. package/dist/SocialLinks.es.js +7 -8
  55. package/dist/SocialLinks.es.js.map +1 -1
  56. package/dist/Text.cjs.js +3 -4
  57. package/dist/Text.cjs.js.map +1 -1
  58. package/dist/Text.es.js +4 -5
  59. package/dist/Text.es.js.map +1 -1
  60. package/dist/Video.cjs.js +31 -5
  61. package/dist/Video.cjs.js.map +1 -1
  62. package/dist/Video.es.js +30 -4
  63. package/dist/Video.es.js.map +1 -1
  64. package/dist/actions.cjs.js +6 -1
  65. package/dist/actions.cjs.js.map +1 -1
  66. package/dist/actions.es.js +6 -2
  67. package/dist/actions.es.js.map +1 -1
  68. package/dist/components.cjs.js +10 -10
  69. package/dist/components.es.js +10 -10
  70. package/dist/constants.cjs.js +7 -1
  71. package/dist/constants.cjs.js.map +1 -1
  72. package/dist/constants.es.js +7 -2
  73. package/dist/constants.es.js.map +1 -1
  74. package/dist/descriptors.cjs.js.map +1 -1
  75. package/dist/descriptors.es.js.map +1 -1
  76. package/dist/index.cjs.js +934 -120
  77. package/dist/index.cjs.js.map +1 -1
  78. package/dist/index.cjs2.js +29 -29
  79. package/dist/index.cjs2.js.map +1 -1
  80. package/dist/index.cjs3.js +1 -2
  81. package/dist/index.cjs3.js.map +1 -1
  82. package/dist/index.cjs4.js +2 -2
  83. package/dist/index.cjs4.js.map +1 -1
  84. package/dist/index.cjs5.js +6 -7
  85. package/dist/index.cjs5.js.map +1 -1
  86. package/dist/index.cjs6.js +3 -4
  87. package/dist/index.cjs6.js.map +1 -1
  88. package/dist/index.cjs7.js +29 -23
  89. package/dist/index.cjs7.js.map +1 -1
  90. package/dist/index.es.js +890 -92
  91. package/dist/index.es.js.map +1 -1
  92. package/dist/index.es2.js +6 -6
  93. package/dist/index.es2.js.map +1 -1
  94. package/dist/index.es3.js +1 -2
  95. package/dist/index.es3.js.map +1 -1
  96. package/dist/index.es4.js +2 -2
  97. package/dist/index.es4.js.map +1 -1
  98. package/dist/index.es5.js +6 -7
  99. package/dist/index.es5.js.map +1 -1
  100. package/dist/index.es6.js +3 -4
  101. package/dist/index.es6.js.map +1 -1
  102. package/dist/index.es7.js +25 -19
  103. package/dist/index.es7.js.map +1 -1
  104. package/dist/introspection.cjs.js +5 -2
  105. package/dist/introspection.cjs.js.map +1 -1
  106. package/dist/introspection.es.js +4 -2
  107. package/dist/introspection.es.js.map +1 -1
  108. package/dist/leaf.cjs.js +15 -17
  109. package/dist/leaf.cjs.js.map +1 -1
  110. package/dist/leaf.es.js +10 -11
  111. package/dist/leaf.es.js.map +1 -1
  112. package/dist/main.cjs.js +2 -1
  113. package/dist/main.cjs.js.map +1 -1
  114. package/dist/main.es.js +2 -2
  115. package/dist/next.cjs.js +5 -6
  116. package/dist/next.cjs.js.map +1 -1
  117. package/dist/next.es.js +6 -7
  118. package/dist/next.es.js.map +1 -1
  119. package/dist/prop-controllers.cjs.js +0 -1
  120. package/dist/prop-controllers.cjs.js.map +1 -1
  121. package/dist/prop-controllers.es.js +0 -1
  122. package/dist/prop-controllers.es.js.map +1 -1
  123. package/dist/react.cjs.js +3 -4
  124. package/dist/react.cjs.js.map +1 -1
  125. package/dist/react.es.js +3 -4
  126. package/dist/react.es.js.map +1 -1
  127. package/dist/slate.cjs.js +1 -12
  128. package/dist/slate.cjs.js.map +1 -1
  129. package/dist/slate.es.js +1 -12
  130. package/dist/slate.es.js.map +1 -1
  131. package/dist/state/breakpoints.cjs.js +175 -0
  132. package/dist/state/breakpoints.cjs.js.map +1 -0
  133. package/dist/state/breakpoints.es.js +160 -0
  134. package/dist/state/breakpoints.es.js.map +1 -0
  135. package/dist/types/src/components/builtin/Box/Box.d.ts.map +1 -1
  136. package/dist/types/src/components/builtin/Box/register.d.ts.map +1 -1
  137. package/dist/types/src/components/builtin/Button/Button.d.ts.map +1 -1
  138. package/dist/types/src/components/builtin/Button/register.d.ts.map +1 -1
  139. package/dist/types/src/components/builtin/Carousel/Carousel.d.ts.map +1 -1
  140. package/dist/types/src/components/builtin/Carousel/register.d.ts.map +1 -1
  141. package/dist/types/src/components/builtin/Countdown/register.d.ts.map +1 -1
  142. package/dist/types/src/components/builtin/Form/components/Field/components/Checkbox/index.d.ts +1 -1
  143. package/dist/types/src/components/builtin/Form/components/Field/components/Label/index.d.ts.map +1 -1
  144. package/dist/types/src/components/builtin/Form/register.d.ts.map +1 -1
  145. package/dist/types/src/components/builtin/Image/Image.d.ts.map +1 -1
  146. package/dist/types/src/components/builtin/Navigation/components/MobileMenu/components/MobileDropDownButton/index.d.ts.map +1 -1
  147. package/dist/types/src/components/builtin/Navigation/components/MobileMenu/index.d.ts.map +1 -1
  148. package/dist/types/src/components/builtin/Navigation/register.d.ts.map +1 -1
  149. package/dist/types/src/components/builtin/SocialLinks/register.d.ts.map +1 -1
  150. package/dist/types/src/components/builtin/Text/EditableText/editable-text.d.ts.map +1 -1
  151. package/dist/types/src/components/builtin/Text/EditableText/useSyncDOMSelection.d.ts +1 -1
  152. package/dist/types/src/components/builtin/Text/EditableText/useSyncDOMSelection.d.ts.map +1 -1
  153. package/dist/types/src/components/builtin/Text/components/Leaf/leaf.d.ts +0 -4
  154. package/dist/types/src/components/builtin/Text/components/Leaf/leaf.d.ts.map +1 -1
  155. package/dist/types/src/components/builtin/Text/register.d.ts.map +1 -1
  156. package/dist/types/src/components/hooks/useMediaQuery.d.ts.map +1 -1
  157. package/dist/types/src/components/utils/drop-first.d.ts +2 -0
  158. package/dist/types/src/components/utils/drop-first.d.ts.map +1 -0
  159. package/dist/types/src/components/utils/responsive-style.d.ts +21 -10
  160. package/dist/types/src/components/utils/responsive-style.d.ts.map +1 -1
  161. package/dist/types/src/controls/types.d.ts +1 -1
  162. package/dist/types/src/controls/types.d.ts.map +1 -1
  163. package/dist/types/src/index.d.ts +2 -2
  164. package/dist/types/src/index.d.ts.map +1 -1
  165. package/dist/types/src/prop-controllers/descriptors.d.ts +1 -1
  166. package/dist/types/src/prop-controllers/descriptors.d.ts.map +1 -1
  167. package/dist/types/src/runtimes/react/index.d.ts +4 -0
  168. package/dist/types/src/runtimes/react/index.d.ts.map +1 -1
  169. package/dist/types/src/slate/BlockPlugin/setBlockKeyForDevice.d.ts +2 -1
  170. package/dist/types/src/slate/BlockPlugin/setBlockKeyForDevice.d.ts.map +1 -1
  171. package/dist/types/src/slate/TypographyPlugin/setActiveTypographyStyle.d.ts +2 -1
  172. package/dist/types/src/slate/TypographyPlugin/setActiveTypographyStyle.d.ts.map +1 -1
  173. package/dist/types/src/state/actions.d.ts +10 -1
  174. package/dist/types/src/state/actions.d.ts.map +1 -1
  175. package/dist/types/src/state/modules/breakpoints.d.ts +44 -0
  176. package/dist/types/src/state/modules/breakpoints.d.ts.map +1 -0
  177. package/dist/types/src/state/react-builder-preview.d.ts +2 -0
  178. package/dist/types/src/state/react-builder-preview.d.ts.map +1 -1
  179. package/dist/types/src/state/react-page.d.ts +3 -0
  180. package/dist/types/src/state/react-page.d.ts.map +1 -1
  181. package/dist/useMediaQuery.cjs.js +38 -0
  182. package/dist/useMediaQuery.cjs.js.map +1 -0
  183. package/dist/useMediaQuery.es.js +37 -0
  184. package/dist/useMediaQuery.es.js.map +1 -0
  185. package/package.json +10 -2
  186. package/state/breakpoints.js +1 -0
  187. package/dist/isNonNullable.cjs.js +0 -6
  188. package/dist/isNonNullable.cjs.js.map +0 -1
  189. package/dist/isNonNullable.es.js +0 -5
  190. package/dist/isNonNullable.es.js.map +0 -1
  191. package/dist/responsive-style.cjs.js +0 -917
  192. package/dist/responsive-style.cjs.js.map +0 -1
  193. package/dist/responsive-style.es.js +0 -853
  194. package/dist/responsive-style.es.js.map +0 -1
  195. package/dist/types/src/components/utils/devices.d.ts +0 -17
  196. package/dist/types/src/components/utils/devices.d.ts.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"responsive-style.cjs.js","sources":["../src/utils/is.ts","../src/utils/shallowEqual.ts","../src/utils/deepEqual.ts","../src/state/modules/api-resources.ts","../src/state/makeswift-api-client.ts","../src/api/graphql/client.ts","../src/api/graphql/documents/fragments.ts","../src/api/graphql/documents/queries.ts","../src/api/react.tsx","../src/utils/keys.ts","../src/utils/coalesce.ts","../src/utils/shallowMerge.ts","../src/components/utils/devices.ts","../src/runtimes/react/use-style.ts","../src/runtimes/react/hooks/makeswift-api.ts","../src/components/utils/columns.ts","../src/css/length.ts","../src/css/padding.ts","../src/css/margin.ts","../src/css/length-percentage.ts","../src/css/border-radius.ts","../src/components/utils/colorToString.ts","../src/css/border.ts","../src/components/utils/responsive-style.ts"],"sourcesContent":["export default function is(x: unknown, y: unknown): boolean {\n if (x === y) return x !== 0 || y !== 0 || 1 / x === 1 / y\n\n return x !== x && y !== y\n}\n","import is from './is'\n\nconst { hasOwnProperty } = Object.prototype\n\nconst shallowEqual = (a: unknown, b: unknown): boolean => {\n if (is(a, b)) return true\n\n if (typeof a !== 'object' || a === null || typeof b !== 'object' || b === null) return false\n\n const keysA = Object.keys(a)\n const keysB = Object.keys(b)\n\n if (keysA.length !== keysB.length) return false\n\n for (let i = 0; i < keysA.length; i += 1) {\n // @ts-expect-error: {}[string] is OK.\n if (!hasOwnProperty.call(b, keysA[i]) || !is(a[keysA[i]], b[keysA[i]])) return false\n }\n\n return true\n}\n\nexport default shallowEqual\n","import shallowEqual from './shallowEqual'\n\nconst { hasOwnProperty } = Object.prototype\n\nconst deepEqual = (a: unknown, b: unknown): boolean => {\n if (shallowEqual(a, b)) return true\n\n if (typeof a !== 'object' || a === null || typeof b !== 'object' || b === null) return false\n\n const keysA = Object.keys(a)\n const keysB = Object.keys(b)\n\n if (keysA.length !== keysB.length) return false\n\n for (let i = 0; i < keysA.length; i += 1) {\n if (\n !hasOwnProperty.call(b, keysA[i]) ||\n // @ts-expect-error: {}[string] is OK.\n !deepEqual(a[keysA[i]], b[keysA[i]])\n )\n return false\n }\n\n return true\n}\n\nexport default deepEqual\n","import { APIResource, APIResourceType } from '../../api'\nimport deepEqual from '../../utils/deepEqual'\nimport { Action, ActionTypes } from '../actions'\n\ntype State = Map<APIResourceType, Map<string, APIResource | null>>\n\nexport type SerializedState = {\n [key in APIResourceType]?: {\n id: string\n value: Extract<APIResource, { __typename: key }> | null\n }[]\n}\n\nexport function getInitialState(\n serializedState: SerializedState = {\n Swatch: [],\n File: [],\n Typography: [],\n PagePathnameSlice: [],\n GlobalElement: [],\n Table: [],\n Snippet: [],\n Page: [],\n Site: [],\n },\n): State {\n return new Map(\n Object.entries(serializedState).map(([apiResourceType, resources]) => [\n apiResourceType,\n new Map(resources.map(({ id, value }) => [id, value])),\n ]),\n ) as State\n}\n\nexport function getSerializedState(state: State): SerializedState {\n const resourceMap: SerializedState = {\n Swatch: [],\n File: [],\n Typography: [],\n PagePathnameSlice: [],\n GlobalElement: [],\n Table: [],\n Snippet: [],\n Page: [],\n Site: [],\n }\n\n Array.from(state.entries()).forEach(([resourceType, resources]) => {\n const particularResourceMap: { id: string; value: any }[] = []\n\n Array.from(resources.entries()).forEach(([id, value]) => {\n if (value != null) {\n particularResourceMap.push({ id, value })\n }\n })\n\n resourceMap[resourceType] = particularResourceMap\n })\n\n return resourceMap\n}\n\nexport function getHasAPIResource(\n state: State,\n resourceType: APIResourceType,\n resourceId: string,\n): boolean {\n return state.get(resourceType)?.has(resourceId) ?? false\n}\n\nexport function getAPIResource<T extends APIResourceType>(\n state: State,\n resourceType: T,\n resourceId: string,\n): Extract<APIResource, { __typename: T }> | null {\n const resource = state.get(resourceType)?.get(resourceId)\n\n return resource?.__typename === resourceType\n ? (resource as Extract<typeof resource, { __typename: T }>)\n : null\n}\n\nexport function reducer(state: State = getInitialState(), action: Action): State {\n switch (action.type) {\n case ActionTypes.API_RESOURCE_FULFILLED: {\n const { resourceType, resourceId, resource } = action.payload\n\n return new Map(state).set(\n resourceType,\n new Map(state.get(resourceType)!).set(resourceId, resource),\n )\n }\n\n case ActionTypes.CHANGE_API_RESOURCE: {\n const existingApiResource = getAPIResource(\n state,\n action.payload.resource.__typename,\n action.payload.resource.id,\n )\n\n if (deepEqual(existingApiResource, action.payload.resource)) return state\n\n return new Map(state).set(\n action.payload.resource.__typename,\n new Map(state.get(action.payload.resource.__typename)!).set(\n action.payload.resource.id,\n action.payload.resource,\n ),\n )\n }\n\n case ActionTypes.EVICT_API_RESOURCE: {\n const [resourceType, resourceId] = action.payload.id.split(':')\n\n if (!(resourceType in APIResourceType)) return state\n\n const resources = new Map(state.get(resourceType as APIResourceType)!)\n\n const deleted = resources.delete(resourceId)\n\n return deleted ? new Map(state).set(resourceType as APIResourceType, resources) : state\n }\n\n default:\n return state\n }\n}\n","import { applyMiddleware, createStore, Store as ReduxStore } from 'redux'\nimport thunk, { ThunkAction, ThunkDispatch } from 'redux-thunk'\n\nimport * as APIResources from './modules/api-resources'\nimport { Action, apiResourceFulfilled } from './actions'\nimport {\n APIResource,\n APIResourceType,\n Swatch,\n File,\n Typography,\n GlobalElement,\n PagePathnameSlice,\n Table,\n} from '../api'\n\nconst reducer = APIResources.reducer\n\nexport type State = ReturnType<typeof reducer>\n\nexport type SerializedState = APIResources.SerializedState\n\nexport function getSerializedState(state: State): SerializedState {\n return APIResources.getSerializedState(state)\n}\n\nexport function getHasAPIResource(\n state: State,\n resourceType: APIResourceType,\n resourceId: string,\n): boolean {\n return APIResources.getHasAPIResource(state, resourceType, resourceId)\n}\n\nexport function getAPIResource<T extends APIResourceType>(\n state: State,\n resourceType: T,\n resourceId: string,\n): Extract<APIResource, { __typename: T }> | null {\n return APIResources.getAPIResource(state, resourceType, resourceId)\n}\n\ntype Thunk<ReturnType> = ThunkAction<ReturnType, State, unknown, Action>\n\nasync function fetchJson<T>(url: string): Promise<T | null> {\n const response = await fetch(url, {\n headers: { 'Content-Type': 'application/json' },\n })\n\n if (response.status === 404) return null\n\n if (!response.ok) throw new Error(response.statusText)\n\n if (response.headers.get('content-type')?.includes('application/json') !== true) {\n throw new Error(\n `Expected JSON response from \"${url}\" but got \"${response.headers.get('content-type')}\"`,\n )\n }\n\n return response.json()\n}\n\nexport function fetchAPIResource<T extends APIResourceType>(\n resourceType: T,\n resourceId: string,\n): Thunk<Promise<Extract<APIResource, { __typename: T }> | null>> {\n return async (dispatch, getState) => {\n const state = getState()\n\n if (getHasAPIResource(state, resourceType, resourceId)) {\n return getAPIResource(state, resourceType, resourceId)\n }\n\n let resource: APIResource | null\n\n switch (resourceType) {\n case APIResourceType.Swatch:\n resource = await fetchJson<Swatch>(`/api/makeswift/swatches/${resourceId}`)\n break\n\n case APIResourceType.File:\n resource = await fetchJson<File>(`/api/makeswift/files/${resourceId}`)\n break\n\n case APIResourceType.Typography:\n resource = await fetchJson<Typography>(`/api/makeswift/typographies/${resourceId}`)\n break\n\n case APIResourceType.GlobalElement:\n resource = await fetchJson<GlobalElement>(`/api/makeswift/global-elements/${resourceId}`)\n break\n\n case APIResourceType.PagePathnameSlice:\n resource = await fetchJson<PagePathnameSlice>(\n `/api/makeswift/page-pathname-slices/${resourceId}`,\n )\n break\n\n case APIResourceType.Table:\n resource = await fetchJson<Table>(`/api/makeswift/tables/${resourceId}`)\n break\n\n default:\n resource = null\n }\n\n dispatch(apiResourceFulfilled(resourceType, resourceId, resource))\n\n return resource as Extract<APIResource, { __typename: T }> | null\n }\n}\n\nexport type Dispatch = ThunkDispatch<State, unknown, Action>\n\nexport type Store = ReduxStore<State, Action> & { dispatch: Dispatch }\n\nexport function configureStore({ serializedState }: { serializedState?: SerializedState }): Store {\n return createStore(reducer, APIResources.getInitialState(serializedState), applyMiddleware(thunk))\n}\n","export class GraphQLClient {\n private endpoint: string\n\n constructor(endpoint: string) {\n this.endpoint = endpoint\n }\n\n async request<TData, TVariables = Record<string, never>>(\n query: string,\n variables: TVariables = {} as TVariables,\n ): Promise<TData> {\n const response = await fetch(this.endpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ query, variables }),\n })\n\n if (!response.ok && response.status !== 400) {\n throw new Error(`${response.status} ${response.statusText}`)\n }\n\n const body = await response.json()\n\n if (body.errors != null) {\n console.error(body)\n\n throw new Error('GraphQL response contains errors, check the console.')\n }\n\n return body.data\n }\n}\n","/**\n * We _cannot_ interpolate fragments into other fragments. Doing so results in a document with\n * multiple fragment definitions, which is ambiguous when attempting to read a fragment from the\n * cache. This ambiguity results in an error being thrown by `@apollo/client` in the Makeswift\n * builder when attempting to send API resources to the host's runtime.\n */\n\nexport const SwatchFragment = /* GraphQL */ `\n fragment Swatch on Swatch {\n __typename\n id\n hue\n saturation\n lightness\n }\n`\n\nexport const FileFragment = /* GraphQL */ `\n fragment File on File {\n __typename\n id\n name\n publicUrl: publicUrlV2\n extension\n dimensions {\n width\n height\n }\n }\n`\n\nexport const TypographyFragment = /* GraphQL */ `\n fragment Typography on Typography {\n __typename\n id\n name\n style {\n deviceId\n value {\n fontFamily\n fontSize {\n value\n unit\n }\n color {\n swatchId\n alpha\n }\n lineHeight\n letterSpacing\n fontWeight\n textAlign\n uppercase\n underline\n strikethrough\n italic\n }\n }\n }\n`\n\nexport const PagePathnameSliceFragment = /* GraphQL */ `\n fragment PagePathnameSlice on PagePathnameSlice {\n __typename\n id\n pathname\n }\n`\n\nexport const GlobalElementFragment = /* GraphQL */ `\n fragment GlobalElement on GlobalElement {\n __typename\n id\n data\n }\n`\n\nexport const TableFragment = /* GraphQL */ `\n fragment Table on Table {\n __typename\n id\n name\n columns {\n __typename\n id\n name\n\n ... on MultipleSelectTableColumn {\n options {\n id\n name\n }\n }\n\n ... on SingleSelectTableColumn {\n options {\n id\n name\n }\n }\n }\n }\n`\n\nexport const SnippetFragment = /* GraphQL */ `\n fragment Snippet on Snippet {\n __typename\n id\n name\n code\n cleanup\n location\n shouldAddToNewPages\n liveEnabled\n builderEnabled\n }\n`\n\nexport const PageFragment = /* GraphQL */ `\n fragment Page on Page {\n __typename\n id\n snippets {\n __typename\n id\n name\n code\n cleanup\n location\n shouldAddToNewPages\n liveEnabled\n builderEnabled\n }\n }\n`\n\nexport const SiteFragment = /* GraphQL */ `\n fragment Site on Site {\n __typename\n id\n googleFonts {\n edges {\n activeVariants {\n specifier\n }\n node {\n family\n variants {\n specifier\n }\n }\n }\n }\n }\n`\n","import {\n FileFragment,\n GlobalElementFragment,\n PagePathnameSliceFragment,\n SwatchFragment,\n TableFragment,\n TypographyFragment,\n} from './fragments'\n\nexport const IntrospectedResourcesQuery = /* GraphQL */ `\n query IntrospectedResources(\n $swatchIds: [ID!]!\n $fileIds: [ID!]!\n $pageIds: [ID!]!\n $tableIds: [ID!]!\n ) {\n swatches(ids: $swatchIds) {\n ...Swatch\n }\n\n files(ids: $fileIds) {\n ...File\n }\n\n pagePathnamesById(ids: $pageIds) {\n ...PagePathnameSlice\n }\n\n tables(ids: $tableIds) {\n ...Table\n }\n }\n\n ${SwatchFragment}\n ${FileFragment}\n ${PagePathnameSliceFragment}\n ${TableFragment}\n`\n\nexport const SwatchQuery = /* GraphQL */ `\n query Swatch($swatchId: ID!) {\n swatch(id: $swatchId) {\n ...Swatch\n }\n }\n\n ${SwatchFragment}\n`\n\nexport const FileQuery = /* GraphQL */ `\n query File($fileId: ID!) {\n file(id: $fileId) {\n ...File\n }\n }\n\n ${FileFragment}\n`\n\nexport const TypographyQuery = /* GraphQL */ `\n query Typography($typographyId: ID!) {\n typography(id: $typographyId) {\n ...Typography\n }\n }\n\n ${TypographyFragment}\n`\n\nexport const PagePathnamesByIdQuery = /* GraphQL */ `\n query PagePathnamesById($pageIds: [ID!]!) {\n pagePathnamesById(ids: $pageIds) {\n ...PagePathnameSlice\n }\n }\n\n ${PagePathnameSliceFragment}\n`\n\nexport const TableQuery = /* GraphQL */ `\n query Table($tableId: ID!) {\n table(id: $tableId) {\n ...Table\n }\n }\n\n ${TableFragment}\n`\n\nexport const TypographiesQuery = /* GraphQL */ `\n query Typographies($typographyIds: [ID!]!) {\n typographies(ids: $typographyIds) {\n ...Typography\n }\n }\n\n ${TypographyFragment}\n`\n\nexport const GlobalElementQuery = /* GraphQL */ `\n query GlobalElement($globalElementId: ID!) {\n globalElement(id: $globalElementId) {\n ...GlobalElement\n }\n }\n\n ${GlobalElementFragment}\n`\n\nexport const CreateTableRecordMutation = /* GraphQL */ `\n mutation CreateTableRecord($input: CreateTableRecordInput!) {\n createTableRecord(input: $input) {\n tableRecord {\n id\n }\n }\n }\n`\n","import { createContext, ReactNode, useContext } from 'react'\n\nimport * as MakeswiftApiClient from '../state/makeswift-api-client'\nimport {\n APIResourceType,\n File,\n GlobalElement,\n Page,\n PagePathnameSlice,\n Site,\n Snippet,\n Swatch,\n Table,\n Typography,\n} from './graphql/types'\nimport { GraphQLClient } from './graphql/client'\nimport { CreateTableRecordMutation } from './graphql/documents'\nimport {\n CreateTableRecordMutationResult,\n CreateTableRecordMutationVariables,\n} from './graphql/generated/types'\n\nexport type CacheData = MakeswiftApiClient.SerializedState\n\nexport type MakeswiftClientOptions = {\n uri: string\n cacheData?: CacheData\n}\n\n/**\n * NOTE(miguel): This \"client\" is used to fetch Makeswift API resources needed for the host. For\n * example, swatches, files, typographies, etc. Ideally it's internal to the runtime and is only\n * used by controls to transform API references to API resources.\n *\n * Moreover, it's use should be reserved for the builder only, since for live pages all Makeswift\n * API resources should be embedded in the \"page snapshot\". In the builder, this client serves the\n * purpose of sending requests for API resources and keeping a cache so that changes that happen in\n * the builder, like modifying a swatch, can be sent via `postMessage` to the host and the cache can\n * immediately update the value and re-render.\n *\n * Furthermore, the API resources requested shouldn't be requested directly from the Makeswift API\n * as that would require those resources to not be authenticated since the requests come from the\n * browser when running the host. Instead, the requests should go to the host directly, at the\n * Makeswift API endpoint (i.g., `/api/makeswift/[...makeswift]` dynamic route) where the host's\n * API key can be used, securely, in the server. For this reason, this client should really be a\n * client of the host's API, not Makeswift's, intended to build and continuously maintain a realtime\n * snapshot for use in the builder, not the lives pages.\n */\nexport class MakeswiftClient {\n graphqlClient: GraphQLClient\n makeswiftApiClient: MakeswiftApiClient.Store\n subscribe: MakeswiftApiClient.Store['subscribe']\n\n constructor({ uri, cacheData }: MakeswiftClientOptions) {\n this.graphqlClient = new GraphQLClient(uri)\n this.makeswiftApiClient = MakeswiftApiClient.configureStore({ serializedState: cacheData })\n this.subscribe = this.makeswiftApiClient.subscribe\n }\n\n readSwatch(swatchId: string): Swatch | null {\n return MakeswiftApiClient.getAPIResource(\n this.makeswiftApiClient.getState(),\n APIResourceType.Swatch,\n swatchId,\n )\n }\n\n async fetchSwatch(swatchId: string): Promise<Swatch | null> {\n return await this.makeswiftApiClient.dispatch(\n MakeswiftApiClient.fetchAPIResource(APIResourceType.Swatch, swatchId),\n )\n }\n\n readFile(fileId: string): File | null {\n return MakeswiftApiClient.getAPIResource(\n this.makeswiftApiClient.getState(),\n APIResourceType.File,\n fileId,\n )\n }\n\n async fetchFile(fileId: string): Promise<File | null> {\n return await this.makeswiftApiClient.dispatch(\n MakeswiftApiClient.fetchAPIResource(APIResourceType.File, fileId),\n )\n }\n\n readTypography(typographyId: string): Typography | null {\n return MakeswiftApiClient.getAPIResource(\n this.makeswiftApiClient.getState(),\n APIResourceType.Typography,\n typographyId,\n )\n }\n\n async fetchTypography(typographyId: string): Promise<Typography | null> {\n return await this.makeswiftApiClient.dispatch(\n MakeswiftApiClient.fetchAPIResource(APIResourceType.Typography, typographyId),\n )\n }\n\n readGlobalElement(globalElementId: string): GlobalElement | null {\n return MakeswiftApiClient.getAPIResource(\n this.makeswiftApiClient.getState(),\n APIResourceType.GlobalElement,\n globalElementId,\n )\n }\n\n async fetchGlobalElement(globalElementId: string): Promise<GlobalElement | null> {\n return await this.makeswiftApiClient.dispatch(\n MakeswiftApiClient.fetchAPIResource(APIResourceType.GlobalElement, globalElementId),\n )\n }\n\n readPagePathnameSlice(pageId: string): PagePathnameSlice | null {\n return MakeswiftApiClient.getAPIResource(\n this.makeswiftApiClient.getState(),\n APIResourceType.PagePathnameSlice,\n pageId,\n )\n }\n\n async fetchPagePathnameSlice(pageId: string): Promise<PagePathnameSlice | null> {\n return await this.makeswiftApiClient.dispatch(\n MakeswiftApiClient.fetchAPIResource(APIResourceType.PagePathnameSlice, pageId),\n )\n }\n\n readTable(tableId: string): Table | null {\n return MakeswiftApiClient.getAPIResource(\n this.makeswiftApiClient.getState(),\n APIResourceType.Table,\n tableId,\n )\n }\n\n async fetchTable(tableId: string): Promise<Table | null> {\n return await this.makeswiftApiClient.dispatch(\n MakeswiftApiClient.fetchAPIResource(APIResourceType.Table, tableId),\n )\n }\n\n async createTableRecord(tableId: string, columns: any): Promise<void> {\n await this.graphqlClient.request<\n CreateTableRecordMutationResult,\n CreateTableRecordMutationVariables\n >(CreateTableRecordMutation, { input: { data: { tableId, columns } } })\n }\n\n readSite(siteId: string): Site | null {\n return MakeswiftApiClient.getAPIResource(\n this.makeswiftApiClient.getState(),\n APIResourceType.Site,\n siteId,\n )\n }\n\n readPage(pageId: string): Page | null {\n return MakeswiftApiClient.getAPIResource(\n this.makeswiftApiClient.getState(),\n APIResourceType.Page,\n pageId,\n )\n }\n\n readSnippet(snippetId: string): Snippet | null {\n return MakeswiftApiClient.getAPIResource(\n this.makeswiftApiClient.getState(),\n APIResourceType.Snippet,\n snippetId,\n )\n }\n}\n\nconst Context = createContext(new MakeswiftClient({ uri: 'https://api.makeswift.com/graphql' }))\n\nexport function useMakeswiftClient(): MakeswiftClient {\n return useContext(Context)\n}\n\ntype MakeswiftProviderProps = {\n client: MakeswiftClient\n children: ReactNode\n}\n\nexport function MakeswiftProvider({ client, children }: MakeswiftProviderProps) {\n return <Context.Provider value={client}>{children}</Context.Provider>\n}\n","const keys = <O extends { [key: string]: unknown }>(o: O): (keyof O)[] => Object.keys(o)\n\nexport default keys\n","const coalesce = <T>(...args: Array<T>): T => {\n let i: number\n\n for (i = 0; i < args.length - 1; i += 1) {\n if (args[i] != null) return args[i]\n }\n\n return args[i]\n}\n\nexport default coalesce\n","import keys from './keys'\nimport coalesce from './coalesce'\n\nexport default function shallowMerge<\n A extends Record<string, unknown>,\n B extends Record<string, unknown>,\n>(a: A, b: B): A & B {\n const bKeys = keys(b)\n const merged = { ...a } as A & B\n\n bKeys.forEach(key => {\n // @ts-expect-error: `coalesce` returns `null | undefined` regardless of input guarantees.\n merged[key] = coalesce(merged[key], b[key])\n })\n\n return merged\n}\n","import type { Device as DeviceID, DeviceOverride, ResponsiveValue } from '../../prop-controllers'\nimport shallowMerge from '../../utils/shallowMerge'\n\nexport type Device = {\n id: DeviceID\n minWidth?: number\n maxWidth?: number\n}\n\nexport const DEVICES: Array<Device> = [\n { id: 'desktop', minWidth: 769 },\n { id: 'tablet', minWidth: 576, maxWidth: 768 },\n { id: 'mobile', maxWidth: 575 },\n]\n\nexport const getDevice = (deviceId: DeviceID): Device => {\n const device = DEVICES.find(({ id }) => id === deviceId)\n\n if (device == null) throw new Error(`Unrecognized device ID: \"${deviceId}\".`)\n\n return device\n}\n\nexport type FallbackStrategy<V> = (\n arg0: DeviceOverride<V> | undefined,\n arg1: ResponsiveValue<V>,\n) => DeviceOverride<V> | undefined\n\nfunction defaultStrategy<V>(\n value: DeviceOverride<V> | undefined,\n fallbacks: ResponsiveValue<V>,\n): DeviceOverride<V> | undefined {\n return value || fallbacks[0]\n}\n\nexport function shallowMergeFallbacks<V extends Record<string, unknown>>(\n value: DeviceOverride<V> | undefined,\n fallbacks: ResponsiveValue<V>,\n): DeviceOverride<V> | undefined {\n return [value, ...fallbacks]\n .filter((override): override is DeviceOverride<V> => Boolean(override))\n .reduce((a, b) => ({\n deviceId: a.deviceId || b.deviceId,\n value: shallowMerge(a.value, b.value),\n }))\n}\n\nexport function findDeviceOverride<S>(\n values: ResponsiveValue<S> = [],\n deviceId: string,\n strategy: FallbackStrategy<S> = defaultStrategy,\n): DeviceOverride<S> | undefined {\n const value = values.find(({ deviceId: d }) => d === deviceId)\n const fallbacks = DEVICES.slice(0, DEVICES.findIndex(d => d.id === deviceId) + 1)\n .reverse()\n .map(d => values.find(v => v.deviceId === d.id))\n .filter((override): override is DeviceOverride<S> => Boolean(override))\n\n return value != null || fallbacks.length > 0 ? strategy(value, fallbacks) : undefined\n}\n\nexport type ExtractResponsiveValue<T> = T extends ResponsiveValue<infer V> ? V : never\n\nexport function join<V, A extends ReadonlyArray<ResponsiveValue<V> | null | undefined>, R>(\n responsiveValues: A,\n joinFn: (values: { [I in keyof A]: ExtractResponsiveValue<A[I]> | undefined }) => R,\n strategy?: FallbackStrategy<V>,\n): ResponsiveValue<R> {\n return DEVICES.map(({ id }) => id)\n .map(deviceId => {\n const value = joinFn(\n responsiveValues.map(responsiveValue => {\n const deviceValue =\n responsiveValue && findDeviceOverride(responsiveValue, deviceId, strategy)\n\n return deviceValue == null ? undefined : deviceValue.value\n }) as unknown as { [I in keyof A]: ExtractResponsiveValue<A[I] | undefined> },\n )\n\n if (value == null) return null\n\n return { deviceId, value }\n })\n .filter((override): override is DeviceOverride<R> => Boolean(override))\n}\n\nexport const getDeviceMediaQuery = (device: Device): string => {\n const parts = ['@media only screen']\n\n if (device.minWidth != null) {\n parts.push(`(min-width: ${device.minWidth}px)`)\n }\n\n if (device.maxWidth != null) {\n parts.push(`(max-width: ${device.maxWidth}px)`)\n }\n\n return parts.join(' and ')\n}\n","import * as React from 'react'\nimport { cache, CSSObject } from '@emotion/css'\nimport { serializeStyles } from '@emotion/serialize'\nimport { registerStyles, insertStyles } from '@emotion/utils'\n\nconst isServer = typeof window === 'undefined'\nconst useInsertionEffectSpecifier = 'useInsertionEffect'\nconst useInsertionEffect = React[useInsertionEffectSpecifier] ?? React.useLayoutEffect\n\nexport function useStyle(style: CSSObject): string {\n const serialized = serializeStyles([style], cache.registered)\n\n registerStyles(cache, serialized, false)\n\n useInsertionEffect(() => {\n insertStyles(cache, serialized, false)\n })\n\n if (isServer) insertStyles(cache, serialized, false)\n\n return `${cache.key}-${serialized.name}`\n}\n","import { useEffect, useRef } from 'react'\nimport { useSyncExternalStore } from 'use-sync-external-store/shim'\nimport { File, GlobalElement, PagePathnameSlice, Swatch, Table, Typography } from '../../../api'\nimport { useMakeswiftClient } from '../../../api/react'\n\nexport function useSwatch(swatchId: string | null): Swatch | null {\n const client = useMakeswiftClient()\n const readSwatch = () => (swatchId == null ? null : client.readSwatch(swatchId))\n const swatch = useSyncExternalStore(client.subscribe, readSwatch, readSwatch)\n\n useEffect(() => {\n if (swatchId != null) client.fetchSwatch(swatchId).catch(console.error)\n }, [client, swatchId])\n\n return swatch\n}\n\nexport function useSwatches(swatchIds: string[]): (Swatch | null)[] {\n const client = useMakeswiftClient()\n const lastSnapshot = useRef<(Swatch | null)[]>()\n\n function getSnapshot() {\n const swatches = swatchIds.map(swatchId => client.readSwatch(swatchId))\n\n if (\n lastSnapshot.current != null &&\n lastSnapshot.current.length === swatches.length &&\n lastSnapshot.current.every((swatch, idx) => swatches[idx] === swatch)\n ) {\n return lastSnapshot.current\n }\n\n return (lastSnapshot.current = swatches)\n }\n\n const swatches = useSyncExternalStore(client.subscribe, getSnapshot, getSnapshot)\n\n useEffect(() => {\n Promise.all(swatchIds.map(swatchId => client.fetchSwatch(swatchId))).catch(console.error)\n }, [client, swatchIds])\n\n return swatches\n}\n\nexport function useFile(fileId: string | null): File | null {\n const client = useMakeswiftClient()\n const readFile = () => (fileId == null ? null : client.readFile(fileId))\n const file = useSyncExternalStore(client.subscribe, readFile, readFile)\n\n useEffect(() => {\n if (fileId != null) client.fetchFile(fileId)\n }, [client, fileId])\n\n return file\n}\n\nexport function useFiles(fileIds: string[]): (File | null)[] {\n const client = useMakeswiftClient()\n const lastSnapshot = useRef<(File | null)[]>()\n\n function getSnapshot() {\n const files = fileIds.map(fileId => client.readFile(fileId))\n\n if (\n lastSnapshot.current != null &&\n lastSnapshot.current.length === files.length &&\n lastSnapshot.current.every((file, idx) => files[idx] === file)\n ) {\n return lastSnapshot.current\n }\n\n return (lastSnapshot.current = files)\n }\n\n const files = useSyncExternalStore(client.subscribe, getSnapshot, getSnapshot)\n\n useEffect(() => {\n Promise.all(fileIds.map(fileId => client.fetchFile(fileId))).catch(console.error)\n }, [client, fileIds])\n\n return files\n}\n\nexport function useTypography(typographyId: string | null): Typography | null {\n const client = useMakeswiftClient()\n const readTypography = () => (typographyId == null ? null : client.readTypography(typographyId))\n const typography = useSyncExternalStore(client.subscribe, readTypography, readTypography)\n\n useEffect(() => {\n if (typographyId != null) client.fetchTypography(typographyId).catch(console.error)\n }, [client, typographyId])\n\n return typography\n}\n\nexport function useGlobalElement(globalElementId: string | null): GlobalElement | null {\n const client = useMakeswiftClient()\n const readGlobalElement = () =>\n globalElementId == null ? null : client.readGlobalElement(globalElementId)\n const globalElement = useSyncExternalStore(client.subscribe, readGlobalElement, readGlobalElement)\n\n useEffect(() => {\n if (globalElementId != null) client.fetchGlobalElement(globalElementId).catch(console.error)\n }, [client, globalElementId])\n\n return globalElement\n}\n\nexport function usePagePathnameSlice(pageId: string | null): PagePathnameSlice | null {\n const client = useMakeswiftClient()\n const readPagePathnameSlice = () => (pageId == null ? null : client.readPagePathnameSlice(pageId))\n const pagePathnameSlice = useSyncExternalStore(\n client.subscribe,\n readPagePathnameSlice,\n readPagePathnameSlice,\n )\n\n useEffect(() => {\n if (pageId != null) client.fetchPagePathnameSlice(pageId).catch(console.error)\n }, [client, pageId])\n\n return pagePathnameSlice\n}\n\nexport function useTable(tableId: string | null): Table | null {\n const client = useMakeswiftClient()\n const readTable = () => (tableId == null ? null : client.readTable(tableId))\n const table = useSyncExternalStore(client.subscribe, readTable, readTable)\n\n useEffect(() => {\n if (tableId != null) client.fetchTable(tableId).catch(console.error)\n }, [client, tableId])\n\n return table\n}\n","export const getIndexes = (spans: Array<Array<number>>, index: number): [number, number] => {\n const flattened = spans.reduce((a, s) => a.concat(s), [])\n\n if (index < 0 || index > flattened.length) throw new RangeError()\n\n let remainder = index\n let rowIndex = 0\n\n while (rowIndex < spans.length - 1 && remainder >= spans[rowIndex].length) {\n remainder -= spans[rowIndex].length\n rowIndex += 1\n }\n\n return [rowIndex, remainder]\n}\n","/**\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/length\n *\n * @todos\n * - Add additional units\n * - Rename `value` field to `amount` or a more descriptive name representative of the \"distance\"\n * represented by a CSS length\n */\nexport type LengthData = { value: number; unit: 'px' } | string | number\n\nexport function lengthDataToString(data: LengthData): string {\n if (typeof data === 'object') return `${data.value}${data.unit}`\n\n if (typeof data === 'number') return `${data}px`\n\n return data\n}\n","import { CSSObject } from '@emotion/css'\nimport { LengthData, lengthDataToString } from './length'\nimport {\n PaddingTopProperty,\n PaddingRightProperty,\n PaddingBottomProperty,\n PaddingLeftProperty,\n} from 'csstype'\n\n/** @see https://developer.mozilla.org/en-US/docs/Web/CSS/padding#constituent_properties */\nexport type PaddingLonghandPropertyData = LengthData\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/padding\n *\n * @todos\n * - Remove `null` from possible values\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type PaddingPropertyData = {\n paddingTop: PaddingLonghandPropertyData | PaddingTopProperty<number | string> | null | undefined\n paddingRight:\n | PaddingLonghandPropertyData\n | PaddingRightProperty<number | string>\n | null\n | undefined\n paddingBottom:\n | PaddingLonghandPropertyData\n | PaddingBottomProperty<number | string>\n | null\n | undefined\n paddingLeft: PaddingLonghandPropertyData | PaddingLeftProperty<number | string> | null | undefined\n}\n\nexport function paddingPropertyDataToStyle(\n data: PaddingPropertyData,\n defaultValue: PaddingPropertyData = {} as PaddingPropertyData,\n): CSSObject {\n const paddingTop = data.paddingTop ?? defaultValue.paddingTop\n const paddingRight = data.paddingRight ?? defaultValue.paddingRight\n const paddingBottom = data.paddingBottom ?? defaultValue.paddingBottom\n const paddingLeft = data.paddingLeft ?? defaultValue.paddingLeft\n const style: CSSObject = {}\n\n if (paddingTop != null) style.paddingTop = lengthDataToString(paddingTop)\n if (paddingRight != null) style.paddingRight = lengthDataToString(paddingRight)\n if (paddingBottom != null) style.paddingBottom = lengthDataToString(paddingBottom)\n if (paddingLeft != null) style.paddingLeft = lengthDataToString(paddingLeft)\n\n return style\n}\n","import { CSSObject } from '@emotion/css'\nimport {\n MarginBottomProperty,\n MarginLeftProperty,\n MarginRightProperty,\n MarginTopProperty,\n} from 'csstype'\nimport { LengthData, lengthDataToString } from './length'\n\n/** @see https://developer.mozilla.org/en-US/docs/Web/CSS/margin#constituent_properties */\nexport type MarginLonghandPropertyData = LengthData | 'auto'\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/margin\n *\n * @todos\n * - Remove `null` from possible values\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type MarginPropertyData = {\n marginTop: MarginLonghandPropertyData | MarginTopProperty<string | number> | null | undefined\n marginRight: MarginLonghandPropertyData | MarginRightProperty<string | number> | null | undefined\n marginBottom:\n | MarginLonghandPropertyData\n | MarginBottomProperty<string | number>\n | null\n | undefined\n marginLeft: MarginLonghandPropertyData | MarginLeftProperty<string | number> | null | undefined\n}\n\nexport function marginPropertyDataToStyle(\n data: MarginPropertyData,\n defaultValue: MarginPropertyData = {} as MarginPropertyData,\n): CSSObject {\n const marginTop = data.marginTop ?? defaultValue.marginTop\n const marginRight = data.marginRight ?? defaultValue.marginRight\n const marginBottom = data.marginBottom ?? defaultValue.marginBottom\n const marginLeft = data.marginLeft ?? defaultValue.marginLeft\n const style: CSSObject = {}\n\n if (marginTop != null) style.marginTop = lengthDataToString(marginTop)\n if (marginRight != null) style.marginRight = lengthDataToString(marginRight)\n if (marginBottom != null) style.marginBottom = lengthDataToString(marginBottom)\n if (marginLeft != null) style.marginLeft = lengthDataToString(marginLeft)\n\n return style\n}\n","import type { LengthData } from './length'\n\n/** @see https://developer.mozilla.org/en-US/docs/Web/CSS/percentage */\nexport type PercentageData = { value: number; unit: '%' }\n\n/** @see https://developer.mozilla.org/en-US/docs/Web/CSS/length-percentage */\nexport type LengthPercentageData = LengthData | PercentageData | number | string\n\nexport function lengthPercentageDataToString(data: LengthPercentageData): string {\n if (typeof data === 'object') return `${data.value}${data.unit}`\n\n if (typeof data === 'number') return `${data}px`\n\n return data\n}\n","import { CSSObject } from '@emotion/css'\nimport {\n BorderTopLeftRadiusProperty,\n BorderTopRightRadiusProperty,\n BorderBottomRightRadiusProperty,\n BorderBottomLeftRadiusProperty,\n} from 'csstype'\nimport { LengthPercentageData, lengthPercentageDataToString } from './length-percentage'\n\n/** @see https://developer.mozilla.org/en-US/docs/Web/CSS/border-radius#constituent_properties */\nexport type BorderRadiusLonghandPropertyData = LengthPercentageData\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/border-radius\n *\n * @todos\n * - Remove `null` from possible values of longhand properties\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type BorderRadiusPropertyData = {\n borderTopLeftRadius?:\n | LengthPercentageData\n | BorderTopLeftRadiusProperty<string | number>\n | null\n | undefined\n borderTopRightRadius?:\n | LengthPercentageData\n | BorderTopRightRadiusProperty<string | number>\n | null\n | undefined\n borderBottomRightRadius?:\n | LengthPercentageData\n | BorderBottomRightRadiusProperty<string | number>\n | null\n | undefined\n borderBottomLeftRadius?:\n | LengthPercentageData\n | BorderBottomLeftRadiusProperty<string | number>\n | null\n | undefined\n}\n\nexport function borderRadiusPropertyDataToStyle(\n data: BorderRadiusPropertyData,\n defaultValue: BorderRadiusPropertyData = {},\n): CSSObject {\n const borderTopLeftRadius = data.borderTopLeftRadius ?? defaultValue.borderTopLeftRadius\n const borderTopRightRadius = data.borderTopRightRadius ?? defaultValue.borderTopRightRadius\n const borderBottomRightRadius =\n data.borderBottomRightRadius ?? defaultValue.borderBottomRightRadius\n const borderBottomLeftRadius = data.borderBottomLeftRadius ?? defaultValue.borderBottomLeftRadius\n const style: CSSObject = {}\n\n if (borderTopLeftRadius != null) {\n style.borderTopLeftRadius = lengthPercentageDataToString(borderTopLeftRadius)\n }\n\n if (borderTopRightRadius != null) {\n style.borderTopRightRadius = lengthPercentageDataToString(borderTopRightRadius)\n }\n\n if (borderBottomRightRadius != null) {\n style.borderBottomRightRadius = lengthPercentageDataToString(borderBottomRightRadius)\n }\n\n if (borderBottomLeftRadius != null) {\n style.borderBottomLeftRadius = lengthPercentageDataToString(borderBottomLeftRadius)\n }\n\n return style\n}\n","import type { ColorValue as Color } from './types'\n\nexport function colorToString(color?: Color): string {\n return color && color.swatch\n ? `hsla(${color.swatch.hue},${color.swatch.saturation}%,${color.swatch.lightness}%,${color.alpha})`\n : ''\n}\n","import { CSSObject } from '@emotion/css'\nimport {\n BorderBottomProperty,\n BorderLeftProperty,\n BorderProperty,\n BorderRightProperty,\n BorderStyleProperty,\n BorderTopProperty,\n} from 'csstype'\nimport { colorToString } from '../components/utils/colorToString'\nimport { ColorValue } from '../components/utils/types'\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/border-top#constituent_properties\n *\n * @todos\n * - Change `width` to be a `Length`\n * - Remove `null` from possible values\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type BorderSideShorthandPropertyData = {\n width: number | null | undefined\n style: BorderStyleProperty\n color?: ColorValue | null\n}\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/border\n *\n * @todos\n * - Remove `null` from possible values\n * - Remove `undefined` from possible values and make fields optional\n */\nexport type BorderPropertyData = {\n borderTop?:\n | BorderSideShorthandPropertyData\n | BorderTopProperty<string | number>\n | null\n | undefined\n borderRight?:\n | BorderSideShorthandPropertyData\n | BorderRightProperty<string | number>\n | null\n | undefined\n borderBottom?:\n | BorderSideShorthandPropertyData\n | BorderBottomProperty<string | number>\n | null\n | undefined\n borderLeft?:\n | BorderSideShorthandPropertyData\n | BorderLeftProperty<string | number>\n | null\n | undefined\n}\n\nexport function borderPropertyDataToStyle(\n data: BorderPropertyData,\n defaultValue: BorderPropertyData = {},\n): CSSObject {\n const borderTop = data.borderTop ?? defaultValue.borderTop\n const borderRight = data.borderRight ?? defaultValue.borderRight\n const borderBottom = data.borderBottom ?? defaultValue.borderBottom\n const borderLeft = data.borderLeft ?? defaultValue.borderLeft\n const style: CSSObject = {}\n\n if (borderTop != null) style.borderTop = borderSideToString(borderTop)\n if (borderRight != null) style.borderRight = borderSideToString(borderRight)\n if (borderBottom != null) style.borderBottom = borderSideToString(borderBottom)\n if (borderLeft != null) style.borderLeft = borderSideToString(borderLeft)\n\n return style\n}\n\nfunction borderSideToString(\n borderSide: BorderSideShorthandPropertyData | BorderProperty<string | number>,\n): string {\n if (typeof borderSide === 'string') return borderSide\n\n if (typeof borderSide === 'number') return `${borderSide}px`\n\n const { width, color, style } = borderSide\n\n return `${width != null ? width : 0}px ${style} ${color != null ? colorToString(color) : 'black'}`\n}\n","import { WidthProperty } from 'csstype'\nimport { CSSObject } from '@emotion/css'\n\nimport {\n ResponsiveValue,\n ResponsiveValueType as ExtractResponsiveValue,\n Length as LengthValue,\n WidthValue,\n PaddingValue,\n MarginValue,\n BorderRadiusValue,\n TextStyleValue,\n} from '../../prop-controllers/descriptors'\nimport {\n FallbackStrategy,\n getDevice,\n getDeviceMediaQuery,\n join as joinResponsiveValues,\n} from './devices'\nimport { getIndexes } from './columns'\nimport { PaddingPropertyData, paddingPropertyDataToStyle } from '../../css/padding'\nimport { MarginPropertyData, marginPropertyDataToStyle } from '../../css/margin'\nimport { BorderRadiusPropertyData, borderRadiusPropertyDataToStyle } from '../../css/border-radius'\nimport { BorderPropertyData, borderPropertyDataToStyle } from '../../css/border'\nimport { BorderPropControllerData } from '../hooks/useBorder'\nimport { colorToString } from './colorToString'\nimport { BoxShadowData, BoxShadowPropControllerData } from '../hooks'\n\nexport function responsiveStyle<V, A extends ReadonlyArray<ResponsiveValue<V> | null | undefined>>(\n responsiveValues: A,\n join: (values: { [K in keyof A]: ExtractResponsiveValue<A[K]> | undefined }) => CSSObject,\n strategy?: FallbackStrategy<V>,\n): CSSObject {\n return joinResponsiveValues(responsiveValues, join, strategy).reduce(\n (acc, { deviceId, value }) => {\n const device = getDevice(deviceId)\n const mediaQuery = getDeviceMediaQuery(device)\n\n return {\n ...acc,\n [mediaQuery]: {\n ...(acc[mediaQuery] as CSSObject),\n ...value,\n },\n }\n },\n {} as CSSObject,\n )\n}\n\nexport function responsiveWidth(\n widthData: WidthValue | undefined,\n defaultValue: LengthValue | WidthProperty<string | number> = '100%',\n): CSSObject {\n return {\n maxWidth: '100%',\n ...responsiveStyle([widthData], ([width = defaultValue]) => ({\n width: typeof width === 'object' ? `${width.value}${width.unit}` : width,\n })),\n }\n}\n\nexport function responsivePadding(\n paddingData: PaddingValue | undefined,\n defaultValue: PaddingPropertyData = {} as PaddingPropertyData,\n): CSSObject {\n return responsiveStyle([paddingData], ([padding = {} as PaddingPropertyData]) =>\n paddingPropertyDataToStyle(\n padding,\n Object.assign(\n { paddingTop: 0, paddingRight: 0, paddingBottom: 0, paddingLeft: 0 },\n defaultValue,\n ),\n ),\n )\n}\n\nexport function responsiveMargin(\n marginData: MarginValue | undefined,\n defaultValue: MarginPropertyData = {} as MarginPropertyData,\n): CSSObject {\n return responsiveStyle([marginData], ([margin = {} as MarginPropertyData]) =>\n marginPropertyDataToStyle(\n margin,\n Object.assign(\n { marginTop: 0, marginRight: 'auto', marginBottom: 0, marginLeft: 'auto' },\n defaultValue,\n ),\n ),\n )\n}\n\nexport function responsiveBorderRadius(\n borderRadiusData: BorderRadiusValue | undefined,\n defaultValue: BorderRadiusPropertyData = {} as BorderRadiusPropertyData,\n): CSSObject {\n return responsiveStyle([borderRadiusData], ([borderRadius = {}]) =>\n borderRadiusPropertyDataToStyle(\n borderRadius,\n Object.assign(\n {\n borderTopLeftRadius: 0,\n borderTopRightRadius: 0,\n borderBottomRightRadius: 0,\n borderBottomLeftRadius: 0,\n },\n defaultValue,\n ),\n ),\n )\n}\n\nexport function responsiveBorder(\n borderData: BorderPropControllerData | undefined,\n defaultValue: BorderPropertyData = {},\n): CSSObject {\n return responsiveStyle([borderData], ([border = {}]) =>\n borderPropertyDataToStyle(\n border,\n Object.assign(\n {\n borderTop: '0px solid black',\n borderRight: '0px solid black',\n borderBottom: '0px solid black',\n borderLeft: '0px solid black',\n },\n defaultValue,\n ),\n ),\n )\n}\n\nconst floor =\n (d: number) =>\n (v: number): number =>\n Math.floor(10 ** d * v) / 10 ** d\n\nexport function responsiveGridItem(props: {\n grid: ResponsiveValue<{ spans: number[][]; count: number }>\n index: number\n columnGap?: ResponsiveValue<LengthValue>\n rowGap?: ResponsiveValue<LengthValue>\n}): CSSObject {\n return {\n display: 'flex',\n ...responsiveStyle(\n [props.grid, props.columnGap, props.rowGap] as const,\n ([\n { spans, count } = { spans: [[12]], count: 12 },\n columnGap = { value: 0, unit: 'px' },\n rowGap = { value: 0, unit: 'px' },\n ]) => {\n const [rowIndex, columnIndex] = getIndexes(spans, props.index)\n const firstCol = columnIndex === 0\n const lastCol = columnIndex === spans[rowIndex].length - 1\n const span = spans[rowIndex][columnIndex]\n const fraction = floor(5)(span / count)\n const width = `${fraction} * (100% + ${columnGap.value}${columnGap.unit})`\n const excessWidth = `${Number(firstCol) + Number(lastCol)} * ${columnGap.value}${\n columnGap.unit\n } / 2`\n const iePrecisionError = '0.01px'\n const flexBasis = `calc(${width} - ${excessWidth} - ${iePrecisionError})`\n const firstRow = rowIndex === 0\n const lastRow = rowIndex === spans.length - 1\n\n return span === 0\n ? { display: 'none' }\n : {\n flexBasis,\n minWidth: flexBasis,\n // NOTE: IE11 width breaks without max width\n // https://github.com/philipwalton/flexbugs/issues/3\n maxWidth: flexBasis,\n paddingLeft: firstCol ? 0 : `${columnGap.value / 2}${columnGap.unit}`,\n paddingRight: lastCol ? 0 : `${columnGap.value / 2}${columnGap.unit}`,\n paddingTop: firstRow ? 0 : `${rowGap.value / 2}${rowGap.unit}`,\n paddingBottom: lastRow ? 0 : `${rowGap.value / 2}${rowGap.unit}`,\n }\n },\n ),\n }\n}\n\nconst getBoxShadow = (shadows: BoxShadowData) =>\n shadows\n .map(\n ({ payload: { inset, offsetX, offsetY, blurRadius, spreadRadius, color } }) =>\n `${inset ? 'inset ' : ''}${offsetX.toFixed(1)}px ${offsetY.toFixed(\n 1,\n )}px ${blurRadius}px ${spreadRadius}px ${\n color != null ? colorToString(color) : 'rgba(0,0,0,0.2)'\n }`,\n )\n .filter(Boolean)\n .join()\n\nexport function responsiveShadow(value: BoxShadowPropControllerData | undefined): CSSObject {\n return responsiveStyle([value], ([shadow = []]) => ({\n boxShadow: getBoxShadow(shadow),\n }))\n}\n\nexport function responsiveTextStyle(value: TextStyleValue | undefined): CSSObject {\n return responsiveStyle(\n [value],\n ([\n textStyle = {\n fontFamily: null,\n letterSpacing: null,\n fontSize: null,\n fontWeight: null,\n textTransform: [],\n fontStyle: [],\n },\n ]) => {\n const {\n fontSize,\n fontWeight,\n fontStyle = [],\n textTransform = [],\n letterSpacing,\n fontFamily,\n } = textStyle\n\n return {\n ...(fontFamily == null ? {} : { fontFamily: `\"${fontFamily}\"` }),\n ...(fontWeight == null ? {} : { fontWeight }),\n ...(letterSpacing == null ? {} : { letterSpacing }),\n ...(fontSize == null ? {} : { fontSize: `${fontSize.value}${fontSize.unit}` }),\n ...(textTransform.includes('uppercase') ? { textTransform: 'uppercase' } : {}),\n ...(fontStyle.includes('italic') ? { fontStyle: 'italic' } : {}),\n }\n },\n )\n}\n"],"names":["hasOwnProperty","ActionTypes","getAPIResource","APIResourceType","APIResources.reducer","APIResources.getHasAPIResource","APIResources.getAPIResource","apiResourceFulfilled","createStore","APIResources.getInitialState","applyMiddleware","thunk","MakeswiftClient","constructor","uri","cacheData","graphqlClient","makeswiftApiClient","subscribe","GraphQLClient","MakeswiftApiClient","serializedState","readSwatch","swatchId","getState","Swatch","fetchSwatch","dispatch","readFile","fileId","File","fetchFile","readTypography","typographyId","Typography","fetchTypography","readGlobalElement","globalElementId","GlobalElement","fetchGlobalElement","readPagePathnameSlice","pageId","PagePathnameSlice","fetchPagePathnameSlice","readTable","tableId","Table","fetchTable","createTableRecord","columns","request","CreateTableRecordMutation","input","data","readSite","siteId","Site","readPage","Page","readSnippet","snippetId","Snippet","Context","createContext","useContext","client","children","_jsx","React","serializeStyles","cache","registerStyles","insertStyles","useSyncExternalStore","useEffect","useRef","join","joinResponsiveValues"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,YAA2B,GAAY,GAAqB;AAC1D,MAAI,MAAM;AAAG,WAAO,MAAM,KAAK,MAAM,KAAK,IAAI,MAAM,IAAI;AAEjD,SAAA,MAAM,KAAK,MAAM;AAC1B;ACFA,MAAM,kBAAEA,qBAAmB,OAAO;AAElC,MAAM,eAAe,CAAC,GAAY,MAAwB;AACpD,MAAA,GAAG,GAAG,CAAC;AAAU,WAAA;AAEjB,MAAA,OAAO,MAAM,YAAY,MAAM,QAAQ,OAAO,MAAM,YAAY,MAAM;AAAa,WAAA;AAEjF,QAAA,QAAQ,OAAO,KAAK,CAAC;AACrB,QAAA,QAAQ,OAAO,KAAK,CAAC;AAEvB,MAAA,MAAM,WAAW,MAAM;AAAe,WAAA;AAE1C,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;AAExC,QAAI,CAACA,iBAAe,KAAK,GAAG,MAAM,EAAE,KAAK,CAAC,GAAG,EAAE,MAAM,KAAK,EAAE,MAAM,GAAG;AAAU,aAAA;AAAA,EACjF;AAEO,SAAA;AACT;AClBA,MAAM,EAAE,mBAAmB,OAAO;AAE5B,MAAA,YAAY,CAAC,GAAY,MAAwB;AACjD,MAAA,aAAa,GAAG,CAAC;AAAU,WAAA;AAE3B,MAAA,OAAO,MAAM,YAAY,MAAM,QAAQ,OAAO,MAAM,YAAY,MAAM;AAAa,WAAA;AAEjF,QAAA,QAAQ,OAAO,KAAK,CAAC;AACrB,QAAA,QAAQ,OAAO,KAAK,CAAC;AAEvB,MAAA,MAAM,WAAW,MAAM;AAAe,WAAA;AAE1C,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,GAAG;AACxC,QACE,CAAC,eAAe,KAAK,GAAG,MAAM,EAAE,KAEhC,CAAC,UAAU,EAAE,MAAM,KAAK,EAAE,MAAM,GAAG;AAE5B,aAAA;AAAA,EACX;AAEO,SAAA;AACT;ACXO,yBACL,kBAAmC;AAAA,EACjC,QAAQ,CAAC;AAAA,EACT,MAAM,CAAC;AAAA,EACP,YAAY,CAAC;AAAA,EACb,mBAAmB,CAAC;AAAA,EACpB,eAAe,CAAC;AAAA,EAChB,OAAO,CAAC;AAAA,EACR,SAAS,CAAC;AAAA,EACV,MAAM,CAAC;AAAA,EACP,MAAM,CAAC;AACT,GACO;AACA,SAAA,IAAI,IACT,OAAO,QAAQ,eAAe,EAAE,IAAI,CAAC,CAAC,iBAAiB,eAAe;AAAA,IACpE;AAAA,IACA,IAAI,IAAI,UAAU,IAAI,CAAC,EAAE,IAAI,YAAY,CAAC,IAAI,KAAK,CAAC,CAAC;AAAA,EACtD,CAAA,CACH;AACF;AA+BE,6BAAA,OACA,cACA,YACS;;AACT,SAAO,mBAAM,IAAI,YAAY,MAAtB,oBAAyB,IAAI,gBAA7B,YAA4C;AACrD;AAGE,0BAAA,OACA,cACA,YACgD;;AAChD,QAAM,WAAW,aAAM,IAAI,YAAY,MAAtB,oBAAyB,IAAI;AAEvC,SAAA,sCAAU,gBAAe,eAC3B,WACD;AACN;AAEwB,mBAAA,QAAe,gBAAgB,GAAG,QAAuB;AAC/E,UAAQ,OAAO;AAAA,SACRC,QAAAA,YAAY,wBAAwB;AACvC,YAAM,EAAE,cAAc,YAAY,aAAa,OAAO;AAEtD,aAAO,IAAI,IAAI,KAAK,EAAE,IACpB,cACA,IAAI,IAAI,MAAM,IAAI,YAAY,CAAE,EAAE,IAAI,YAAY,QAAQ,CAC5D;AAAA,IACF;AAAA,SAEKA,QAAAA,YAAY,qBAAqB;AAC9B,YAAA,sBAAsBC,iBAC1B,OACA,OAAO,QAAQ,SAAS,YACxB,OAAO,QAAQ,SAAS,EAC1B;AAEA,UAAI,UAAU,qBAAqB,OAAO,QAAQ,QAAQ;AAAU,eAAA;AAE7D,aAAA,IAAI,IAAI,KAAK,EAAE,IACpB,OAAO,QAAQ,SAAS,YACxB,IAAI,IAAI,MAAM,IAAI,OAAO,QAAQ,SAAS,UAAU,CAAE,EAAE,IACtD,OAAO,QAAQ,SAAS,IACxB,OAAO,QAAQ,QACjB,CACF;AAAA,IACF;AAAA,SAEKD,QAAAA,YAAY,oBAAoB;AACnC,YAAM,CAAC,cAAc,cAAc,OAAO,QAAQ,GAAG,MAAM,GAAG;AAE9D,UAAI,CAAkB,iBAAAE;AAAyB,eAAA;AAE/C,YAAM,YAAY,IAAI,IAAI,MAAM,IAAI,YAA+B,CAAE;AAE/D,YAAA,UAAU,UAAU,OAAO,UAAU;AAEpC,aAAA,UAAU,IAAI,IAAI,KAAK,EAAE,IAAI,cAAiC,SAAS,IAAI;AAAA,IACpF;AAAA;AAGS,aAAA;AAAA;AAEb;AC9GA,MAAM,UAAUC;AAWd,2BAAA,OACA,cACA,YACS;AACT,SAAOC,oBAA+B,OAAO,cAAc,UAAU;AACvE;AAGE,wBAAA,OACA,cACA,YACgD;AAChD,SAAOC,iBAA4B,OAAO,cAAc,UAAU;AACpE;AAIA,yBAA4B,KAAgC;;AACpD,QAAA,WAAW,MAAM,MAAM,KAAK;AAAA,IAChC,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,EAAA,CAC/C;AAED,MAAI,SAAS,WAAW;AAAY,WAAA;AAEpC,MAAI,CAAC,SAAS;AAAU,UAAA,IAAI,MAAM,SAAS,UAAU;AAEjD,MAAA,iBAAS,QAAQ,IAAI,cAAc,MAAnC,oBAAsC,SAAS,yBAAwB,MAAM;AACzE,UAAA,IAAI,MACR,gCAAgC,iBAAiB,SAAS,QAAQ,IAAI,cAAc,IACtF;AAAA,EACF;AAEA,SAAO,SAAS;AAClB;AAEO,0BACL,cACA,YACgE;AACzD,SAAA,OAAO,UAAU,aAAa;AACnC,UAAM,QAAQ;AAEd,QAAI,kBAAkB,OAAO,cAAc,UAAU,GAAG;AAC/C,aAAA,eAAe,OAAO,cAAc,UAAU;AAAA,IACvD;AAEI,QAAA;AAEI,YAAA;AAAA,WACDH,MAAgB,gBAAA;AACR,mBAAA,MAAM,UAAkB,2BAA2B,YAAY;AAC1E;AAAA,WAEGA,MAAgB,gBAAA;AACR,mBAAA,MAAM,UAAgB,wBAAwB,YAAY;AACrE;AAAA,WAEGA,MAAgB,gBAAA;AACR,mBAAA,MAAM,UAAsB,+BAA+B,YAAY;AAClF;AAAA,WAEGA,MAAgB,gBAAA;AACR,mBAAA,MAAM,UAAyB,kCAAkC,YAAY;AACxF;AAAA,WAEGA,MAAgB,gBAAA;AACR,mBAAA,MAAM,UACf,uCAAuC,YACzC;AACA;AAAA,WAEGA,MAAgB,gBAAA;AACR,mBAAA,MAAM,UAAiB,yBAAyB,YAAY;AACvE;AAAA;AAGW,mBAAA;AAAA;AAGf,aAASI,QAAAA,qBAAqB,cAAc,YAAY,QAAQ,CAAC;AAE1D,WAAA;AAAA,EAAA;AAEX;AAMO,wBAAwB,EAAE,mBAAiE;AACzF,SAAAC,MAAAA,YAAY,SAASC,gBAA6B,eAAe,GAAGC,MAAA,gBAAgBC,eAAK,UAAA,CAAC;AACnG;ACtHO,MAAM,cAAc;AAAA,EAGzB,YAAY,UAAkB;AAFtB;AAGN,SAAK,WAAW;AAAA,EAClB;AAAA,QAEM,QACJ,OACA,YAAwB,IACR;AAChB,UAAM,WAAW,MAAM,MAAM,KAAK,UAAU;AAAA,MAC1C,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM,KAAK,UAAU,EAAE,OAAO,WAAW;AAAA,IAAA,CAC1C;AAED,QAAI,CAAC,SAAS,MAAM,SAAS,WAAW,KAAK;AAC3C,YAAM,IAAI,MAAM,GAAG,SAAS,UAAU,SAAS,YAAY;AAAA,IAC7D;AAEM,UAAA,OAAO,MAAM,SAAS;AAExB,QAAA,KAAK,UAAU,MAAM;AACvB,cAAQ,MAAM,IAAI;AAEZ,YAAA,IAAI,MAAM,sDAAsD;AAAA,IACxE;AAEA,WAAO,KAAK;AAAA,EACd;AACF;ACxBO,MAAM,iBAA+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAUrC,MAAM,eAA6B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAcnC,MAAM,qBAAmC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AA8BzC,MAAM,4BAA0C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQhD,MAAM,wBAAsC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQ5C,MAAM,gBAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACpEpC,MAAM,6BAA2C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAwBpD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAGG,MAAM,cAA4B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOrC;AAAA;AAGG,MAAM,YAA0B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOnC;AAAA;AAGG,MAAM,kBAAgC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOzC;AAAA;AAGG,MAAM,yBAAuC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOhD;AAAA;AAGG,MAAM,aAA2B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOpC;AAAA;AAGG,MAAM,oBAAkC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAO3C;AAAA;AAGG,MAAM,qBAAmC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAO5C;AAAA;AAGG,MAAM,4BAA0C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AC7DhD,MAAMC,gBAAgB;AAAA,EAK3BC,YAAY;AAAA,IAAEC;AAAAA,IAAKC;AAAAA,KAAqC;AAJxDC;AACAC;AACAC;AAGOF,SAAAA,gBAAgB,IAAIG,cAAcL,GAAlB;AAChBG,SAAAA,qBAAqBG,eAAkC;AAAA,MAAEC,iBAAiBN;AAAAA,IAAAA,CAArD;AACrBG,SAAAA,YAAY,KAAKD,mBAAmBC;AAAAA,EAC1C;AAAA,EAEDI,WAAWC,UAAiC;AACnCH,WAAAA,eACL,KAAKH,mBAAmBO,SACxBrB,GAAAA,sBAAgBsB,QAChBF,QAHK;AAAA,EAKR;AAAA,QAEKG,YAAYH,UAA0C;AACnD,WAAA,MAAM,KAAKN,mBAAmBU,SACnCP,iBAAoCjB,sBAAgBsB,QAAQF,QAA5D,CADW;AAAA,EAGd;AAAA,EAEDK,SAASC,QAA6B;AAC7BT,WAAAA,eACL,KAAKH,mBAAmBO,SACxBrB,GAAAA,sBAAgB2B,MAChBD,MAHK;AAAA,EAKR;AAAA,QAEKE,UAAUF,QAAsC;AAC7C,WAAA,MAAM,KAAKZ,mBAAmBU,SACnCP,iBAAoCjB,sBAAgB2B,MAAMD,MAA1D,CADW;AAAA,EAGd;AAAA,EAEDG,eAAeC,cAAyC;AAC/Cb,WAAAA,eACL,KAAKH,mBAAmBO,SACxBrB,GAAAA,sBAAgB+B,YAChBD,YAHK;AAAA,EAKR;AAAA,QAEKE,gBAAgBF,cAAkD;AAC/D,WAAA,MAAM,KAAKhB,mBAAmBU,SACnCP,iBAAoCjB,sBAAgB+B,YAAYD,YAAhE,CADW;AAAA,EAGd;AAAA,EAEDG,kBAAkBC,iBAA+C;AACxDjB,WAAAA,eACL,KAAKH,mBAAmBO,SACxBrB,GAAAA,sBAAgBmC,eAChBD,eAHK;AAAA,EAKR;AAAA,QAEKE,mBAAmBF,iBAAwD;AACxE,WAAA,MAAM,KAAKpB,mBAAmBU,SACnCP,iBAAoCjB,sBAAgBmC,eAAeD,eAAnE,CADW;AAAA,EAGd;AAAA,EAEDG,sBAAsBC,QAA0C;AACvDrB,WAAAA,eACL,KAAKH,mBAAmBO,SACxBrB,GAAAA,sBAAgBuC,mBAChBD,MAHK;AAAA,EAKR;AAAA,QAEKE,uBAAuBF,QAAmD;AACvE,WAAA,MAAM,KAAKxB,mBAAmBU,SACnCP,iBAAoCjB,sBAAgBuC,mBAAmBD,MAAvE,CADW;AAAA,EAGd;AAAA,EAEDG,UAAUC,SAA+B;AAChCzB,WAAAA,eACL,KAAKH,mBAAmBO,SACxBrB,GAAAA,sBAAgB2C,OAChBD,OAHK;AAAA,EAKR;AAAA,QAEKE,WAAWF,SAAwC;AAChD,WAAA,MAAM,KAAK5B,mBAAmBU,SACnCP,iBAAoCjB,sBAAgB2C,OAAOD,OAA3D,CADW;AAAA,EAGd;AAAA,QAEKG,kBAAkBH,SAAiBI,SAA6B;AAC9D,UAAA,KAAKjC,cAAckC,QAGvBC,2BAA2B;AAAA,MAAEC,OAAO;AAAA,QAAEC,MAAM;AAAA,UAAER;AAAAA,UAASI;AAAAA,QAAX;AAAA,MAAR;AAAA,IAAA,CAHhC;AAAA,EAIP;AAAA,EAEDK,SAASC,QAA6B;AAC7BnC,WAAAA,eACL,KAAKH,mBAAmBO,SACxBrB,GAAAA,sBAAgBqD,MAChBD,MAHK;AAAA,EAKR;AAAA,EAEDE,SAAShB,QAA6B;AAC7BrB,WAAAA,eACL,KAAKH,mBAAmBO,SACxBrB,GAAAA,sBAAgBuD,MAChBjB,MAHK;AAAA,EAKR;AAAA,EAEDkB,YAAYC,WAAmC;AACtCxC,WAAAA,eACL,KAAKH,mBAAmBO,SACxBrB,GAAAA,sBAAgB0D,SAChBD,SAHK;AAAA,EAKR;AA5H0B;AA+H7B,MAAME,UAAUC,MAAAA,cAAc,IAAInD,gBAAgB;AAAA,EAAEE,KAAK;AAAP,CAApB,CAAD;AAEyB,8BAAA;AAC7CkD,SAAAA,MAAAA,WAAWF,OAAD;AAClB;AAOiC,2BAAA;AAAA,EAAEG;AAAAA,EAAQC;AAAAA,GAAoC;AACvE,SAAAC,2BAAA,IAAC,QAAQ,UAAT;AAAA,IAAkB,OAAOF;AAAAA,IAASC;AAAAA,EAAAA,CAAzC;AACD;AC5LD,MAAM,OAAO,CAAuC,MAAsB,OAAO,KAAK,CAAC;ACAvF,MAAM,WAAW,IAAO,SAAsB;AACxC,MAAA;AAEJ,OAAK,IAAI,GAAG,IAAI,KAAK,SAAS,GAAG,KAAK,GAAG;AACvC,QAAI,KAAK,MAAM;AAAM,aAAO,KAAK;AAAA,EACnC;AAEA,SAAO,KAAK;AACd;ACLA,sBAGE,GAAM,GAAa;AACb,QAAA,QAAQ,KAAK,CAAC;AACd,QAAA,SAAS,mBAAK;AAEpB,QAAM,QAAQ,CAAO,QAAA;AAEnB,WAAO,OAAO,SAAS,OAAO,MAAM,EAAE,IAAI;AAAA,EAAA,CAC3C;AAEM,SAAA;AACT;ACPO,MAAM,UAAyB;AAAA,EACpC,EAAE,IAAI,WAAW,UAAU,IAAI;AAAA,EAC/B,EAAE,IAAI,UAAU,UAAU,KAAK,UAAU,IAAI;AAAA,EAC7C,EAAE,IAAI,UAAU,UAAU,IAAI;AAChC;AAEa,MAAA,YAAY,CAAC,aAA+B;AACvD,QAAM,SAAS,QAAQ,KAAK,CAAC,EAAE,SAAS,OAAO,QAAQ;AAEvD,MAAI,UAAU;AAAY,UAAA,IAAI,MAAM,4BAA4B,YAAY;AAErE,SAAA;AACT;AAOA,yBACE,OACA,WAC+B;AAC/B,SAAO,SAAS,UAAU;AAC5B;AAEO,+BACL,OACA,WAC+B;AAC/B,SAAO,CAAC,OAAO,GAAG,SAAS,EACxB,OAAO,CAAC,aAA4C,QAAQ,QAAQ,CAAC,EACrE,OAAO,CAAC,GAAG,MAAO;AAAA,IACjB,UAAU,EAAE,YAAY,EAAE;AAAA,IAC1B,OAAO,aAAa,EAAE,OAAO,EAAE,KAAK;AAAA,EACpC,EAAA;AACN;AAEO,4BACL,SAA6B,CAAA,GAC7B,UACA,WAAgC,iBACD;AACzB,QAAA,QAAQ,OAAO,KAAK,CAAC,EAAE,UAAU,QAAQ,MAAM,QAAQ;AAC7D,QAAM,YAAY,QAAQ,MAAM,GAAG,QAAQ,UAAU,CAAK,MAAA,EAAE,OAAO,QAAQ,IAAI,CAAC,EAC7E,QAAQ,EACR,IAAI,CAAA,MAAK,OAAO,KAAK,CAAK,MAAA,EAAE,aAAa,EAAE,EAAE,CAAC,EAC9C,OAAO,CAAC,aAA4C,QAAQ,QAAQ,CAAC;AAEjE,SAAA,SAAS,QAAQ,UAAU,SAAS,IAAI,SAAS,OAAO,SAAS,IAAI;AAC9E;AAKE,cAAA,kBACA,QACA,UACoB;AACb,SAAA,QAAQ,IAAI,CAAC,EAAE,SAAS,EAAE,EAC9B,IAAI,CAAY,aAAA;AACf,UAAM,QAAQ,OACZ,iBAAiB,IAAI,CAAmB,oBAAA;AACtC,YAAM,cACJ,mBAAmB,mBAAmB,iBAAiB,UAAU,QAAQ;AAEpE,aAAA,eAAe,OAAO,SAAY,YAAY;AAAA,IACtD,CAAA,CACH;AAEA,QAAI,SAAS;AAAa,aAAA;AAEnB,WAAA,EAAE,UAAU;EAAM,CAC1B,EACA,OAAO,CAAC,aAA4C,QAAQ,QAAQ,CAAC;AAC1E;AAEa,MAAA,sBAAsB,CAAC,WAA2B;AACvD,QAAA,QAAQ,CAAC,oBAAoB;AAE/B,MAAA,OAAO,YAAY,MAAM;AACrB,UAAA,KAAK,eAAe,OAAO,aAAa;AAAA,EAChD;AAEI,MAAA,OAAO,YAAY,MAAM;AACrB,UAAA,KAAK,eAAe,OAAO,aAAa;AAAA,EAChD;AAEO,SAAA,MAAM,KAAK,OAAO;AAC3B;AC7FA,MAAM,WAAW,OAAO,WAAW;AACnC,MAAM,8BAA8B;AACpC,MAAM,qBAAqBE,uBAAM,iCAANA,YAAsCA,iBAAM;AAEhE,kBAAkB,OAA0B;AACjD,QAAM,aAAaC,UAAAA,gBAAgB,CAAC,KAAK,GAAGC,IAAAA,MAAM,UAAU;AAE7CC,QAAAA,eAAAD,IAAA,OAAO,YAAY,KAAK;AAEvC,qBAAmB,MAAM;AACVE,UAAAA,aAAAF,IAAA,OAAO,YAAY,KAAK;AAAA,EAAA,CACtC;AAEG,MAAA;AAAuBE,UAAAA,aAAAF,IAAA,OAAO,YAAY,KAAK;AAE5C,SAAA,GAAGA,IAAAA,MAAM,OAAO,WAAW;AACpC;AChBO,mBAAmB,UAAwC;AAChE,QAAM,SAAS;AACf,QAAM,aAAa,MAAO,YAAY,OAAO,OAAO,OAAO,WAAW,QAAQ;AAC9E,QAAM,SAASG,KAAAA,qBAAqB,OAAO,WAAW,YAAY,UAAU;AAE5EC,QAAAA,UAAU,MAAM;AACd,QAAI,YAAY;AAAM,aAAO,YAAY,QAAQ,EAAE,MAAM,QAAQ,KAAK;AAAA,EAAA,GACrE,CAAC,QAAQ,QAAQ,CAAC;AAEd,SAAA;AACT;AAEO,qBAAqB,WAAwC;AAClE,QAAM,SAAS;AACf,QAAM,eAAeC,MAAAA;AAEE,yBAAA;AACrB,UAAM,YAAW,UAAU,IAAI,cAAY,OAAO,WAAW,QAAQ,CAAC;AAEtE,QACE,aAAa,WAAW,QACxB,aAAa,QAAQ,WAAW,UAAS,UACzC,aAAa,QAAQ,MAAM,CAAC,QAAQ,QAAQ,UAAS,SAAS,MAAM,GACpE;AACA,aAAO,aAAa;AAAA,IACtB;AAEA,WAAQ,aAAa,UAAU;AAAA,EACjC;AAEA,QAAM,WAAWF,KAAAA,qBAAqB,OAAO,WAAW,aAAa,WAAW;AAEhFC,QAAAA,UAAU,MAAM;AACd,YAAQ,IAAI,UAAU,IAAI,CAAA,aAAY,OAAO,YAAY,QAAQ,CAAC,CAAC,EAAE,MAAM,QAAQ,KAAK;AAAA,EAAA,GACvF,CAAC,QAAQ,SAAS,CAAC;AAEf,SAAA;AACT;AAEO,iBAAiB,QAAoC;AAC1D,QAAM,SAAS;AACf,QAAM,WAAW,MAAO,UAAU,OAAO,OAAO,OAAO,SAAS,MAAM;AACtE,QAAM,OAAOD,KAAAA,qBAAqB,OAAO,WAAW,UAAU,QAAQ;AAEtEC,QAAAA,UAAU,MAAM;AACd,QAAI,UAAU;AAAM,aAAO,UAAU,MAAM;AAAA,EAAA,GAC1C,CAAC,QAAQ,MAAM,CAAC;AAEZ,SAAA;AACT;AAEO,kBAAkB,SAAoC;AAC3D,QAAM,SAAS;AACf,QAAM,eAAeC,MAAAA;AAEE,yBAAA;AACrB,UAAM,SAAQ,QAAQ,IAAI,YAAU,OAAO,SAAS,MAAM,CAAC;AAE3D,QACE,aAAa,WAAW,QACxB,aAAa,QAAQ,WAAW,OAAM,UACtC,aAAa,QAAQ,MAAM,CAAC,MAAM,QAAQ,OAAM,SAAS,IAAI,GAC7D;AACA,aAAO,aAAa;AAAA,IACtB;AAEA,WAAQ,aAAa,UAAU;AAAA,EACjC;AAEA,QAAM,QAAQF,KAAAA,qBAAqB,OAAO,WAAW,aAAa,WAAW;AAE7EC,QAAAA,UAAU,MAAM;AACd,YAAQ,IAAI,QAAQ,IAAI,CAAA,WAAU,OAAO,UAAU,MAAM,CAAC,CAAC,EAAE,MAAM,QAAQ,KAAK;AAAA,EAAA,GAC/E,CAAC,QAAQ,OAAO,CAAC;AAEb,SAAA;AACT;AAEO,uBAAuB,cAAgD;AAC5E,QAAM,SAAS;AACf,QAAM,iBAAiB,MAAO,gBAAgB,OAAO,OAAO,OAAO,eAAe,YAAY;AAC9F,QAAM,aAAaD,KAAAA,qBAAqB,OAAO,WAAW,gBAAgB,cAAc;AAExFC,QAAAA,UAAU,MAAM;AACd,QAAI,gBAAgB;AAAM,aAAO,gBAAgB,YAAY,EAAE,MAAM,QAAQ,KAAK;AAAA,EAAA,GACjF,CAAC,QAAQ,YAAY,CAAC;AAElB,SAAA;AACT;AAEO,0BAA0B,iBAAsD;AACrF,QAAM,SAAS;AACf,QAAM,oBAAoB,MACxB,mBAAmB,OAAO,OAAO,OAAO,kBAAkB,eAAe;AAC3E,QAAM,gBAAgBD,KAAAA,qBAAqB,OAAO,WAAW,mBAAmB,iBAAiB;AAEjGC,QAAAA,UAAU,MAAM;AACd,QAAI,mBAAmB;AAAM,aAAO,mBAAmB,eAAe,EAAE,MAAM,QAAQ,KAAK;AAAA,EAAA,GAC1F,CAAC,QAAQ,eAAe,CAAC;AAErB,SAAA;AACT;AAEO,8BAA8B,QAAiD;AACpF,QAAM,SAAS;AACf,QAAM,wBAAwB,MAAO,UAAU,OAAO,OAAO,OAAO,sBAAsB,MAAM;AAChG,QAAM,oBAAoBD,KAAAA,qBACxB,OAAO,WACP,uBACA,qBACF;AAEAC,QAAAA,UAAU,MAAM;AACd,QAAI,UAAU;AAAM,aAAO,uBAAuB,MAAM,EAAE,MAAM,QAAQ,KAAK;AAAA,EAAA,GAC5E,CAAC,QAAQ,MAAM,CAAC;AAEZ,SAAA;AACT;AAEO,kBAAkB,SAAsC;AAC7D,QAAM,SAAS;AACf,QAAM,YAAY,MAAO,WAAW,OAAO,OAAO,OAAO,UAAU,OAAO;AAC1E,QAAM,QAAQD,KAAAA,qBAAqB,OAAO,WAAW,WAAW,SAAS;AAEzEC,QAAAA,UAAU,MAAM;AACd,QAAI,WAAW;AAAM,aAAO,WAAW,OAAO,EAAE,MAAM,QAAQ,KAAK;AAAA,EAAA,GAClE,CAAC,QAAQ,OAAO,CAAC;AAEb,SAAA;AACT;ACtIa,MAAA,aAAa,CAAC,OAA6B,UAAoC;AACpF,QAAA,YAAY,MAAM,OAAO,CAAC,GAAG,MAAM,EAAE,OAAO,CAAC,GAAG,CAAE,CAAA;AAEpD,MAAA,QAAQ,KAAK,QAAQ,UAAU;AAAQ,UAAM,IAAI,WAAW;AAEhE,MAAI,YAAY;AAChB,MAAI,WAAW;AAEf,SAAO,WAAW,MAAM,SAAS,KAAK,aAAa,MAAM,UAAU,QAAQ;AACzE,iBAAa,MAAM,UAAU;AACjB,gBAAA;AAAA,EACd;AAEO,SAAA,CAAC,UAAU,SAAS;AAC7B;ACJO,4BAA4B,MAA0B;AAC3D,MAAI,OAAO,SAAS;AAAiB,WAAA,GAAG,KAAK,QAAQ,KAAK;AAE1D,MAAI,OAAO,SAAS;AAAU,WAAO,GAAG;AAEjC,SAAA;AACT;ACmBE,oCAAA,MACA,eAAoC,IACzB;;AACL,QAAA,aAAa,YAAK,eAAL,aAAmB,aAAa;AAC7C,QAAA,eAAe,WAAK,iBAAL,YAAqB,aAAa;AACjD,QAAA,gBAAgB,WAAK,kBAAL,YAAsB,aAAa;AACnD,QAAA,cAAc,WAAK,gBAAL,YAAoB,aAAa;AACrD,QAAM,QAAmB,CAAA;AAEzB,MAAI,cAAc;AAAY,UAAA,aAAa,mBAAmB,UAAU;AACxE,MAAI,gBAAgB;AAAY,UAAA,eAAe,mBAAmB,YAAY;AAC9E,MAAI,iBAAiB;AAAY,UAAA,gBAAgB,mBAAmB,aAAa;AACjF,MAAI,eAAe;AAAY,UAAA,cAAc,mBAAmB,WAAW;AAEpE,SAAA;AACT;ACnBE,mCAAA,MACA,eAAmC,IACxB;;AACL,QAAA,YAAY,YAAK,cAAL,aAAkB,aAAa;AAC3C,QAAA,cAAc,WAAK,gBAAL,YAAoB,aAAa;AAC/C,QAAA,eAAe,WAAK,iBAAL,YAAqB,aAAa;AACjD,QAAA,aAAa,WAAK,eAAL,YAAmB,aAAa;AACnD,QAAM,QAAmB,CAAA;AAEzB,MAAI,aAAa;AAAY,UAAA,YAAY,mBAAmB,SAAS;AACrE,MAAI,eAAe;AAAY,UAAA,cAAc,mBAAmB,WAAW;AAC3E,MAAI,gBAAgB;AAAY,UAAA,eAAe,mBAAmB,YAAY;AAC9E,MAAI,cAAc;AAAY,UAAA,aAAa,mBAAmB,UAAU;AAEjE,SAAA;AACT;ACtCO,sCAAsC,MAAoC;AAC/E,MAAI,OAAO,SAAS;AAAiB,WAAA,GAAG,KAAK,QAAQ,KAAK;AAE1D,MAAI,OAAO,SAAS;AAAU,WAAO,GAAG;AAEjC,SAAA;AACT;AC6BE,yCAAA,MACA,eAAyC,IAC9B;;AACL,QAAA,sBAAsB,YAAK,wBAAL,aAA4B,aAAa;AAC/D,QAAA,uBAAuB,WAAK,yBAAL,YAA6B,aAAa;AACjE,QAAA,0BACJ,WAAK,4BAAL,YAAgC,aAAa;AACzC,QAAA,yBAAyB,WAAK,2BAAL,YAA+B,aAAa;AAC3E,QAAM,QAAmB,CAAA;AAEzB,MAAI,uBAAuB,MAAM;AACzB,UAAA,sBAAsB,6BAA6B,mBAAmB;AAAA,EAC9E;AAEA,MAAI,wBAAwB,MAAM;AAC1B,UAAA,uBAAuB,6BAA6B,oBAAoB;AAAA,EAChF;AAEA,MAAI,2BAA2B,MAAM;AAC7B,UAAA,0BAA0B,6BAA6B,uBAAuB;AAAA,EACtF;AAEA,MAAI,0BAA0B,MAAM;AAC5B,UAAA,yBAAyB,6BAA6B,sBAAsB;AAAA,EACpF;AAEO,SAAA;AACT;ACpEO,uBAAuB,OAAuB;AACnD,SAAO,SAAS,MAAM,SAClB,QAAQ,MAAM,OAAO,OAAO,MAAM,OAAO,eAAe,MAAM,OAAO,cAAc,MAAM,WACzF;AACN;ACmDE,mCAAA,MACA,eAAmC,IACxB;;AACL,QAAA,YAAY,YAAK,cAAL,aAAkB,aAAa;AAC3C,QAAA,cAAc,WAAK,gBAAL,YAAoB,aAAa;AAC/C,QAAA,eAAe,WAAK,iBAAL,YAAqB,aAAa;AACjD,QAAA,aAAa,WAAK,eAAL,YAAmB,aAAa;AACnD,QAAM,QAAmB,CAAA;AAEzB,MAAI,aAAa;AAAY,UAAA,YAAY,mBAAmB,SAAS;AACrE,MAAI,eAAe;AAAY,UAAA,cAAc,mBAAmB,WAAW;AAC3E,MAAI,gBAAgB;AAAY,UAAA,eAAe,mBAAmB,YAAY;AAC9E,MAAI,cAAc;AAAY,UAAA,aAAa,mBAAmB,UAAU;AAEjE,SAAA;AACT;AAEA,4BACE,YACQ;AACR,MAAI,OAAO,eAAe;AAAiB,WAAA;AAE3C,MAAI,OAAO,eAAe;AAAU,WAAO,GAAG;AAExC,QAAA,EAAE,OAAO,OAAO,UAAU;AAEzB,SAAA,GAAG,SAAS,OAAO,QAAQ,OAAO,SAAS,SAAS,OAAO,cAAc,KAAK,IAAI;AAC3F;ACvDE,yBAAA,kBACAE,QACA,UACW;AACJ,SAAAC,KAAqB,kBAAkBD,QAAM,QAAQ,EAAE,OAC5D,CAAC,KAAK,EAAE,UAAU,YAAY;AACtB,UAAA,SAAS,UAAU,QAAQ;AAC3B,UAAA,aAAa,oBAAoB,MAAM;AAEtC,WAAA,iCACF,MADE;AAAA,OAEJ,aAAa,kCACR,IAAI,cACL;AAAA,IACL;AAAA,EAEJ,GACA,CACF,CAAA;AACF;AAGE,yBAAA,WACA,eAA6D,QAClD;AACJ,SAAA;AAAA,IACL,UAAU;AAAA,KACP,gBAAgB,CAAC,SAAS,GAAG,CAAC,CAAC,QAAQ,kBAAmB;AAAA,IAC3D,OAAO,OAAO,UAAU,WAAW,GAAG,MAAM,QAAQ,MAAM,SAAS;AAAA,EAAA,EACnE;AAEN;AAGE,2BAAA,aACA,eAAoC,IACzB;AACJ,SAAA,gBAAgB,CAAC,WAAW,GAAG,CAAC,CAAC,UAAU,CAChD,OAAA,2BACE,SACA,OAAO,OACL,EAAE,YAAY,GAAG,cAAc,GAAG,eAAe,GAAG,aAAa,EAAE,GACnE,YACF,CACF,CACF;AACF;AAGE,0BAAA,YACA,eAAmC,IACxB;AACJ,SAAA,gBAAgB,CAAC,UAAU,GAAG,CAAC,CAAC,SAAS,CAC9C,OAAA,0BACE,QACA,OAAO,OACL,EAAE,WAAW,GAAG,aAAa,QAAQ,cAAc,GAAG,YAAY,OAAO,GACzE,YACF,CACF,CACF;AACF;AAGE,gCAAA,kBACA,eAAyC,IAC9B;AACX,SAAO,gBAAgB,CAAC,gBAAgB,GAAG,CAAC,CAAC,eAAe,CAC1D,OAAA,gCACE,cACA,OAAO,OACL;AAAA,IACE,qBAAqB;AAAA,IACrB,sBAAsB;AAAA,IACtB,yBAAyB;AAAA,IACzB,wBAAwB;AAAA,EAAA,GAE1B,YACF,CACF,CACF;AACF;AAGE,0BAAA,YACA,eAAmC,IACxB;AACX,SAAO,gBAAgB,CAAC,UAAU,GAAG,CAAC,CAAC,SAAS,CAC9C,OAAA,0BACE,QACA,OAAO,OACL;AAAA,IACE,WAAW;AAAA,IACX,aAAa;AAAA,IACb,cAAc;AAAA,IACd,YAAY;AAAA,EAAA,GAEd,YACF,CACF,CACF;AACF;AAEA,MAAM,QACJ,CAAC,MACD,CAAC,MACC,KAAK,MAAM,MAAM,IAAI,CAAC,IAAI,MAAM;AAE7B,4BAA4B,OAKrB;AACL,SAAA;AAAA,IACL,SAAS;AAAA,KACN,gBACD,CAAC,MAAM,MAAM,MAAM,WAAW,MAAM,MAAM,GAC1C,CAAC;AAAA,IACC,EAAE,OAAO,UAAU,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,GAAG;AAAA,IAC9C,YAAY,EAAE,OAAO,GAAG,MAAM,KAAK;AAAA,IACnC,SAAS,EAAE,OAAO,GAAG,MAAM,KAAK;AAAA,QAC5B;AACJ,UAAM,CAAC,UAAU,eAAe,WAAW,OAAO,MAAM,KAAK;AAC7D,UAAM,WAAW,gBAAgB;AACjC,UAAM,UAAU,gBAAgB,MAAM,UAAU,SAAS;AACnD,UAAA,OAAO,MAAM,UAAU;AAC7B,UAAM,WAAW,MAAM,CAAC,EAAE,OAAO,KAAK;AACtC,UAAM,QAAQ,GAAG,sBAAsB,UAAU,QAAQ,UAAU;AAC7D,UAAA,cAAc,GAAG,OAAO,QAAQ,IAAI,OAAO,OAAO,OAAO,UAAU,QACvE,UAAU;AAEZ,UAAM,mBAAmB;AACnB,UAAA,YAAY,QAAQ,WAAW,iBAAiB;AACtD,UAAM,WAAW,aAAa;AACxB,UAAA,UAAU,aAAa,MAAM,SAAS;AAE5C,WAAO,SAAS,IACZ,EAAE,SAAS,WACX;AAAA,MACE;AAAA,MACA,UAAU;AAAA,MAGV,UAAU;AAAA,MACV,aAAa,WAAW,IAAI,GAAG,UAAU,QAAQ,IAAI,UAAU;AAAA,MAC/D,cAAc,UAAU,IAAI,GAAG,UAAU,QAAQ,IAAI,UAAU;AAAA,MAC/D,YAAY,WAAW,IAAI,GAAG,OAAO,QAAQ,IAAI,OAAO;AAAA,MACxD,eAAe,UAAU,IAAI,GAAG,OAAO,QAAQ,IAAI,OAAO;AAAA,IAAA;AAAA,EAC5D,CAER;AAEJ;AAEA,MAAM,eAAe,CAAC,YACpB,QACG,IACC,CAAC,EAAE,SAAS,EAAE,OAAO,SAAS,SAAS,YAAY,cAAc,cAC/D,GAAG,QAAQ,WAAW,KAAK,QAAQ,QAAQ,CAAC,OAAO,QAAQ,QACzD,CACF,OAAO,gBAAgB,kBACrB,SAAS,OAAO,cAAc,KAAK,IAAI,mBAE7C,EACC,OAAO,OAAO,EACd;AAEE,0BAA0B,OAA2D;AACnF,SAAA,gBAAgB,CAAC,KAAK,GAAG,CAAC,CAAC,SAAS,CAAA,OAAS;AAAA,IAClD,WAAW,aAAa,MAAM;AAAA,EAC9B,EAAA;AACJ;AAEO,6BAA6B,OAA8C;AAChF,SAAO,gBACL,CAAC,KAAK,GACN,CAAC;AAAA,IACC,YAAY;AAAA,MACV,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,eAAe,CAAC;AAAA,MAChB,WAAW,CAAC;AAAA,IACd;AAAA,QACI;AACE,UAAA;AAAA,MACJ;AAAA,MACA;AAAA,MACA,YAAY,CAAC;AAAA,MACb,gBAAgB,CAAC;AAAA,MACjB;AAAA,MACA;AAAA,QACE;AAEG,WAAA,8FACD,cAAc,OAAO,KAAK,EAAE,YAAY,IAAI,cAAc,IAC1D,cAAc,OAAO,CAAC,IAAI,EAAE,WAAW,IACvC,iBAAiB,OAAO,CAAC,IAAI,EAAE,cAAc,IAC7C,YAAY,OAAO,CAAK,IAAA,EAAE,UAAU,GAAG,SAAS,QAAQ,SAAS,OAAO,IACxE,cAAc,SAAS,WAAW,IAAI,EAAE,eAAe,YAAA,IAAgB,CAAC,IACxE,UAAU,SAAS,QAAQ,IAAI,EAAE,WAAW,SAAA,IAAa,CAAC;AAAA,EAChE,CAEJ;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}