@webiny/app-headless-cms 6.0.0-rc.2 → 6.0.0-rc.4

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 (176) hide show
  1. package/admin/components/ContentEntries/Header/ButtonRefresh/ButtonRefresh.d.ts +2 -0
  2. package/admin/components/ContentEntries/Header/ButtonRefresh/ButtonRefresh.js +18 -0
  3. package/admin/components/ContentEntries/Header/ButtonRefresh/ButtonRefresh.js.map +1 -0
  4. package/admin/components/ContentEntries/Header/ButtonRefresh/index.d.ts +1 -0
  5. package/admin/components/ContentEntries/Header/ButtonRefresh/index.js +3 -0
  6. package/admin/components/ContentEntries/Header/ButtonRefresh/index.js.map +1 -0
  7. package/admin/components/ContentEntries/Header/Header.js +2 -1
  8. package/admin/components/ContentEntries/Header/Header.js.map +1 -1
  9. package/admin/components/ContentEntries/SidebarContent/SidebarContent.js +1 -1
  10. package/admin/components/ContentEntries/SidebarContent/SidebarContent.js.map +1 -1
  11. package/admin/components/ContentEntries/SidebarHeader/SidebarHeader.js +1 -1
  12. package/admin/components/ContentEntries/SidebarHeader/SidebarHeader.js.map +1 -1
  13. package/admin/components/ContentModelEditor/ContentModelEditor.js +1 -6
  14. package/admin/components/ContentModelEditor/ContentModelEditor.js.map +1 -1
  15. package/admin/components/ContentModelEditor/ContentModelEditorProvider.d.ts +2 -0
  16. package/admin/components/ContentModelEditor/ContentModelEditorProvider.js +14 -2
  17. package/admin/components/ContentModelEditor/ContentModelEditorProvider.js.map +1 -1
  18. package/admin/components/ContentModelEditor/FieldsSidebar.js +51 -2
  19. package/admin/components/ContentModelEditor/FieldsSidebar.js.map +1 -1
  20. package/admin/components/Droppable.d.ts +1 -1
  21. package/admin/components/Droppable.js.map +1 -1
  22. package/admin/components/FieldEditor/EditFieldDialog/AppearanceTab.js +3 -3
  23. package/admin/components/FieldEditor/EditFieldDialog/AppearanceTab.js.map +1 -1
  24. package/admin/components/FieldEditor/EditFieldDialog/FieldSettingsTabs.d.ts +10 -0
  25. package/admin/components/FieldEditor/EditFieldDialog/FieldSettingsTabs.js +69 -0
  26. package/admin/components/FieldEditor/EditFieldDialog/FieldSettingsTabs.js.map +1 -0
  27. package/admin/components/FieldEditor/EditFieldDialog/GeneralTab.js +27 -9
  28. package/admin/components/FieldEditor/EditFieldDialog/GeneralTab.js.map +1 -1
  29. package/admin/components/FieldEditor/EditFieldDialog/PermissionsTab/CannotUsePermissions.d.ts +2 -0
  30. package/admin/components/FieldEditor/EditFieldDialog/PermissionsTab/CannotUsePermissions.js +14 -0
  31. package/admin/components/FieldEditor/EditFieldDialog/PermissionsTab/CannotUsePermissions.js.map +1 -0
  32. package/admin/components/FieldEditor/EditFieldDialog/PermissionsTab/FieldPermissionsSelection.d.ts +15 -0
  33. package/admin/components/FieldEditor/EditFieldDialog/PermissionsTab/FieldPermissionsSelection.js +131 -0
  34. package/admin/components/FieldEditor/EditFieldDialog/PermissionsTab/FieldPermissionsSelection.js.map +1 -0
  35. package/admin/components/FieldEditor/EditFieldDialog/PermissionsTab/PermissionsTab.d.ts +4 -0
  36. package/admin/components/FieldEditor/EditFieldDialog/PermissionsTab/PermissionsTab.js +74 -0
  37. package/admin/components/FieldEditor/EditFieldDialog/PermissionsTab/PermissionsTab.js.map +1 -0
  38. package/admin/components/FieldEditor/EditFieldDialog/RulesTab/RulesTab.d.ts +13 -0
  39. package/admin/components/FieldEditor/EditFieldDialog/RulesTab/RulesTab.js +203 -0
  40. package/admin/components/FieldEditor/EditFieldDialog/RulesTab/RulesTab.js.map +1 -0
  41. package/admin/components/FieldEditor/EditFieldDialog/RulesTab/index.d.ts +1 -0
  42. package/admin/components/FieldEditor/EditFieldDialog/RulesTab/index.js +3 -0
  43. package/admin/components/FieldEditor/EditFieldDialog/RulesTab/index.js.map +1 -0
  44. package/admin/components/FieldEditor/EditFieldDialog.js +13 -56
  45. package/admin/components/FieldEditor/EditFieldDialog.js.map +1 -1
  46. package/admin/components/FieldEditor/EditFieldDialogContainer.d.ts +12 -0
  47. package/admin/components/FieldEditor/EditFieldDialogContainer.js +40 -0
  48. package/admin/components/FieldEditor/EditFieldDialogContainer.js.map +1 -0
  49. package/admin/components/FieldEditor/EditFieldDrawerContainer.d.ts +12 -0
  50. package/admin/components/FieldEditor/EditFieldDrawerContainer.js +40 -0
  51. package/admin/components/FieldEditor/EditFieldDrawerContainer.js.map +1 -0
  52. package/admin/components/FieldEditor/FieldEditor.js +148 -88
  53. package/admin/components/FieldEditor/FieldEditor.js.map +1 -1
  54. package/admin/components/FieldEditor/FieldEditorContext.d.ts +33 -3
  55. package/admin/components/FieldEditor/FieldEditorContext.js +225 -6
  56. package/admin/components/FieldEditor/FieldEditorContext.js.map +1 -1
  57. package/admin/components/FieldEditor/LayoutCell.d.ts +9 -0
  58. package/admin/components/FieldEditor/LayoutCell.js +33 -0
  59. package/admin/components/FieldEditor/LayoutCell.js.map +1 -0
  60. package/admin/components/FieldEditor/utils/deleteField.js +12 -4
  61. package/admin/components/FieldEditor/utils/deleteField.js.map +1 -1
  62. package/admin/components/FieldEditor/utils/getFieldPosition.js +6 -1
  63. package/admin/components/FieldEditor/utils/getFieldPosition.js.map +1 -1
  64. package/admin/graphql/contentModels.d.ts +2 -2
  65. package/admin/graphql/contentModels.js +7 -0
  66. package/admin/graphql/contentModels.js.map +1 -1
  67. package/admin/hooks/useModelFieldGraphqlContext.d.ts +1 -0
  68. package/admin/plugins/fieldRenderers/DynamicSection.d.ts +2 -1
  69. package/admin/plugins/fieldRenderers/DynamicSection.js +3 -1
  70. package/admin/plugins/fieldRenderers/DynamicSection.js.map +1 -1
  71. package/admin/plugins/fieldRenderers/boolean/booleanSwitch.js +7 -1
  72. package/admin/plugins/fieldRenderers/boolean/booleanSwitch.js.map +1 -1
  73. package/admin/plugins/fieldRenderers/checkboxes.js +7 -1
  74. package/admin/plugins/fieldRenderers/checkboxes.js.map +1 -1
  75. package/admin/plugins/fieldRenderers/dateTime/Input.js +9 -2
  76. package/admin/plugins/fieldRenderers/dateTime/Input.js.map +1 -1
  77. package/admin/plugins/fieldRenderers/dateTime/Select.js +7 -0
  78. package/admin/plugins/fieldRenderers/dateTime/Select.js.map +1 -1
  79. package/admin/plugins/fieldRenderers/dynamicZone/MultiValueDynamicZone.d.ts +1 -0
  80. package/admin/plugins/fieldRenderers/dynamicZone/MultiValueDynamicZone.js +9 -5
  81. package/admin/plugins/fieldRenderers/dynamicZone/MultiValueDynamicZone.js.map +1 -1
  82. package/admin/plugins/fieldRenderers/dynamicZone/SingleValueDynamicZone.d.ts +2 -1
  83. package/admin/plugins/fieldRenderers/dynamicZone/SingleValueDynamicZone.js +18 -10
  84. package/admin/plugins/fieldRenderers/dynamicZone/SingleValueDynamicZone.js.map +1 -1
  85. package/admin/plugins/fieldRenderers/lexicalText/lexicalTextInput.js +13 -4
  86. package/admin/plugins/fieldRenderers/lexicalText/lexicalTextInput.js.map +1 -1
  87. package/admin/plugins/fieldRenderers/lexicalText/lexicalTextInputs.js +10 -4
  88. package/admin/plugins/fieldRenderers/lexicalText/lexicalTextInputs.js.map +1 -1
  89. package/admin/plugins/fieldRenderers/longText/longText.js +7 -1
  90. package/admin/plugins/fieldRenderers/longText/longText.js.map +1 -1
  91. package/admin/plugins/fieldRenderers/longText/longTexts.js +12 -3
  92. package/admin/plugins/fieldRenderers/longText/longTexts.js.map +1 -1
  93. package/admin/plugins/fieldRenderers/number/numberInput.js +7 -1
  94. package/admin/plugins/fieldRenderers/number/numberInput.js.map +1 -1
  95. package/admin/plugins/fieldRenderers/number/numberInputs.js +11 -3
  96. package/admin/plugins/fieldRenderers/number/numberInputs.js.map +1 -1
  97. package/admin/plugins/fieldRenderers/object/FieldSettings.d.ts +2 -1
  98. package/admin/plugins/fieldRenderers/object/MultiValueContainer.js +5 -0
  99. package/admin/plugins/fieldRenderers/object/MultiValueContainer.js.map +1 -1
  100. package/admin/plugins/fieldRenderers/object/MultiValueItemContainer.d.ts +1 -0
  101. package/admin/plugins/fieldRenderers/object/MultiValueItemContainer.js +3 -2
  102. package/admin/plugins/fieldRenderers/object/MultiValueItemContainer.js.map +1 -1
  103. package/admin/plugins/fieldRenderers/radioButtons.js +7 -1
  104. package/admin/plugins/fieldRenderers/radioButtons.js.map +1 -1
  105. package/admin/plugins/fieldRenderers/ref/advanced/components/AdvancedMultipleReferenceField.js +15 -7
  106. package/admin/plugins/fieldRenderers/ref/advanced/components/AdvancedMultipleReferenceField.js.map +1 -1
  107. package/admin/plugins/fieldRenderers/ref/advanced/components/AdvancedSingleReferenceField.js +14 -7
  108. package/admin/plugins/fieldRenderers/ref/advanced/components/AdvancedSingleReferenceField.js.map +1 -1
  109. package/admin/plugins/fieldRenderers/ref/advanced/components/Entry.d.ts +3 -1
  110. package/admin/plugins/fieldRenderers/ref/advanced/components/Entry.js +7 -6
  111. package/admin/plugins/fieldRenderers/ref/advanced/components/Entry.js.map +1 -1
  112. package/admin/plugins/fieldRenderers/ref/components/ContentEntriesAutocomplete.d.ts +1 -1
  113. package/admin/plugins/fieldRenderers/ref/components/ContentEntriesAutocomplete.js +9 -3
  114. package/admin/plugins/fieldRenderers/ref/components/ContentEntriesAutocomplete.js.map +1 -1
  115. package/admin/plugins/fieldRenderers/ref/components/ContentEntriesMultiAutoComplete.d.ts +1 -1
  116. package/admin/plugins/fieldRenderers/ref/components/ContentEntriesMultiAutoComplete.js +9 -3
  117. package/admin/plugins/fieldRenderers/ref/components/ContentEntriesMultiAutoComplete.js.map +1 -1
  118. package/admin/plugins/fieldRenderers/ref/simple/components/SimpleMultipleRenderer.js +7 -1
  119. package/admin/plugins/fieldRenderers/ref/simple/components/SimpleMultipleRenderer.js.map +1 -1
  120. package/admin/plugins/fieldRenderers/ref/simple/components/SimpleSingleRenderer.js +7 -1
  121. package/admin/plugins/fieldRenderers/ref/simple/components/SimpleSingleRenderer.js.map +1 -1
  122. package/admin/plugins/fieldRenderers/select.js +7 -1
  123. package/admin/plugins/fieldRenderers/select.js.map +1 -1
  124. package/admin/plugins/fieldRenderers/text/tags.js +7 -1
  125. package/admin/plugins/fieldRenderers/text/tags.js.map +1 -1
  126. package/admin/plugins/fieldRenderers/text/textInput.js +7 -1
  127. package/admin/plugins/fieldRenderers/text/textInput.js.map +1 -1
  128. package/admin/plugins/fieldRenderers/text/textInputs.js +12 -3
  129. package/admin/plugins/fieldRenderers/text/textInputs.js.map +1 -1
  130. package/admin/plugins/fields/ui/TabsLayoutEditor.d.ts +9 -0
  131. package/admin/plugins/fields/ui/TabsLayoutEditor.js +470 -0
  132. package/admin/plugins/fields/ui/TabsLayoutEditor.js.map +1 -0
  133. package/admin/plugins/fields/ui/alert.d.ts +2 -2
  134. package/admin/plugins/fields/ui/alert.js +144 -17
  135. package/admin/plugins/fields/ui/alert.js.map +1 -1
  136. package/admin/plugins/fields/ui/index.d.ts +1 -0
  137. package/admin/plugins/fields/ui/index.js +1 -0
  138. package/admin/plugins/fields/ui/index.js.map +1 -1
  139. package/admin/plugins/fields/ui/separator.d.ts +2 -2
  140. package/admin/plugins/fields/ui/separator.js +131 -17
  141. package/admin/plugins/fields/ui/separator.js.map +1 -1
  142. package/admin/plugins/fields/ui/tabs.d.ts +2 -0
  143. package/admin/plugins/fields/ui/tabs.js +89 -0
  144. package/admin/plugins/fields/ui/tabs.js.map +1 -0
  145. package/admin/plugins/index.d.ts +1 -0
  146. package/admin/views/contentEntries/hooks/useContentEntriesList.d.ts +1 -0
  147. package/admin/views/contentEntries/hooks/useContentEntriesList.js +4 -2
  148. package/admin/views/contentEntries/hooks/useContentEntriesList.js.map +1 -1
  149. package/admin/views/contentModels/importing/graphql.d.ts +2 -2
  150. package/admin/views/contentModels/importing/graphql.js.map +1 -1
  151. package/allPlugins.d.ts +2 -1
  152. package/allPlugins.js +2 -3
  153. package/allPlugins.js.map +1 -1
  154. package/exports/admin/cms/{fieldRenderers/dynamicZone.js → field-renderers/dynamic-zone.js} +1 -1
  155. package/exports/admin/cms/field-renderers/dynamic-zone.js.map +1 -0
  156. package/exports/admin/cms/model.d.ts +1 -0
  157. package/exports/admin/cms/model.js +3 -0
  158. package/exports/admin/cms/model.js.map +1 -0
  159. package/package.json +23 -23
  160. package/types.d.ts +1 -0
  161. package/types.js +5 -1
  162. package/types.js.map +1 -1
  163. package/admin/plugins/fieldRenderers/ui/alert.d.ts +0 -2
  164. package/admin/plugins/fieldRenderers/ui/alert.js +0 -32
  165. package/admin/plugins/fieldRenderers/ui/alert.js.map +0 -1
  166. package/admin/plugins/fieldRenderers/ui/index.d.ts +0 -2
  167. package/admin/plugins/fieldRenderers/ui/index.js +0 -4
  168. package/admin/plugins/fieldRenderers/ui/index.js.map +0 -1
  169. package/admin/plugins/fieldRenderers/ui/separator.d.ts +0 -2
  170. package/admin/plugins/fieldRenderers/ui/separator.js +0 -31
  171. package/admin/plugins/fieldRenderers/ui/separator.js.map +0 -1
  172. package/exports/admin/cms/fieldRenderers/dynamicZone.js.map +0 -1
  173. /package/exports/admin/cms/{fieldRenderers/dynamicZone.d.ts → field-renderers/dynamic-zone.d.ts} +0 -0
  174. /package/exports/admin/cms/{fieldRenderers → field-renderers}/object.d.ts +0 -0
  175. /package/exports/admin/cms/{fieldRenderers → field-renderers}/object.js +0 -0
  176. /package/exports/admin/cms/{fieldRenderers → field-renderers}/object.js.map +0 -0
@@ -0,0 +1,2 @@
1
+ import React from "react";
2
+ export declare const ButtonRefresh: () => React.JSX.Element;
@@ -0,0 +1,18 @@
1
+ import React from "react";
2
+ import { IconButton, Tooltip } from "@webiny/admin-ui";
3
+ import { ReactComponent as RefreshIcon } from "@webiny/icons/autorenew.svg";
4
+ import { useContentEntriesList } from "../../../../views/contentEntries/hooks/index.js";
5
+ export const ButtonRefresh = () => {
6
+ const list = useContentEntriesList();
7
+ return /*#__PURE__*/React.createElement(Tooltip, {
8
+ side: "bottom",
9
+ content: "Refresh list",
10
+ trigger: /*#__PURE__*/React.createElement(IconButton, {
11
+ variant: "ghost",
12
+ icon: /*#__PURE__*/React.createElement(RefreshIcon, null),
13
+ onClick: list.refresh
14
+ })
15
+ });
16
+ };
17
+
18
+ //# sourceMappingURL=ButtonRefresh.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["React","IconButton","Tooltip","ReactComponent","RefreshIcon","useContentEntriesList","ButtonRefresh","list","createElement","side","content","trigger","variant","icon","onClick","refresh"],"sources":["ButtonRefresh.tsx"],"sourcesContent":["import React from \"react\";\nimport { IconButton, Tooltip } from \"@webiny/admin-ui\";\nimport { ReactComponent as RefreshIcon } from \"@webiny/icons/autorenew.svg\";\nimport { useContentEntriesList } from \"~/admin/views/contentEntries/hooks/index.js\";\n\nexport const ButtonRefresh = () => {\n const list = useContentEntriesList();\n\n return (\n <Tooltip\n side={\"bottom\"}\n content={\"Refresh list\"}\n trigger={<IconButton variant={\"ghost\"} icon={<RefreshIcon />} onClick={list.refresh} />}\n />\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,UAAU,EAAEC,OAAO,QAAQ,kBAAkB;AACtD,SAASC,cAAc,IAAIC,WAAW,QAAQ,6BAA6B;AAC3E,SAASC,qBAAqB;AAE9B,OAAO,MAAMC,aAAa,GAAGA,CAAA,KAAM;EAC/B,MAAMC,IAAI,GAAGF,qBAAqB,CAAC,CAAC;EAEpC,oBACIL,KAAA,CAAAQ,aAAA,CAACN,OAAO;IACJO,IAAI,EAAE,QAAS;IACfC,OAAO,EAAE,cAAe;IACxBC,OAAO,eAAEX,KAAA,CAAAQ,aAAA,CAACP,UAAU;MAACW,OAAO,EAAE,OAAQ;MAACC,IAAI,eAAEb,KAAA,CAAAQ,aAAA,CAACJ,WAAW,MAAE,CAAE;MAACU,OAAO,EAAEP,IAAI,CAACQ;IAAQ,CAAE;EAAE,CAC3F,CAAC;AAEV,CAAC","ignoreList":[]}
@@ -0,0 +1 @@
1
+ export * from "./ButtonRefresh.js";
@@ -0,0 +1,3 @@
1
+ export * from "./ButtonRefresh.js";
2
+
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sources":["index.tsx"],"sourcesContent":["export * from \"./ButtonRefresh.js\";\n"],"mappings":"AAAA","ignoreList":[]}
@@ -3,6 +3,7 @@ import { Separator } from "@webiny/admin-ui";
3
3
  import { Search } from "@webiny/app-aco";
4
4
  import { ButtonFilters } from "./ButtonFilters/index.js";
5
5
  import { ButtonsCreate } from "./ButtonsCreate/index.js";
6
+ import { ButtonRefresh } from "./ButtonRefresh/index.js";
6
7
  import { Title } from "./Title/index.js";
7
8
  export const Header = props => {
8
9
  const {
@@ -32,7 +33,7 @@ export const Header = props => {
32
33
  placeholder: searchPlaceholder || "Search entries..."
33
34
  })), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
34
35
  className: "flex gap-sm"
35
- }, /*#__PURE__*/React.createElement(ButtonFilters, null), /*#__PURE__*/React.createElement(ButtonsCreate, {
36
+ }, /*#__PURE__*/React.createElement(ButtonRefresh, null), /*#__PURE__*/React.createElement(ButtonFilters, null), /*#__PURE__*/React.createElement(ButtonsCreate, {
36
37
  canCreateFolder: canCreateFolder,
37
38
  canCreateContent: canCreateContent,
38
39
  onCreateFolder: onCreateFolder,
@@ -1 +1 @@
1
- {"version":3,"names":["React","Separator","Search","ButtonFilters","ButtonsCreate","Title","Header","props","canCreateFolder","canCreateContent","onCreateEntry","onCreateFolder","title","searchValue","searchPlaceholder","onSearchChange","createElement","Fragment","className","isRoot","value","onChange","placeholder"],"sources":["Header.tsx"],"sourcesContent":["import React from \"react\";\nimport { Separator } from \"@webiny/admin-ui\";\nimport { Search } from \"@webiny/app-aco\";\nimport { ButtonFilters } from \"./ButtonFilters/index.js\";\nimport { ButtonsCreate } from \"./ButtonsCreate/index.js\";\nimport { Title } from \"./Title/index.js\";\n\ninterface HeaderProps {\n isRoot: boolean;\n title?: string;\n canCreateFolder: boolean;\n canCreateContent: boolean;\n onCreateEntry: (event?: React.SyntheticEvent) => void;\n onCreateFolder: (event?: React.SyntheticEvent) => void;\n searchValue: string;\n searchPlaceholder: string;\n onSearchChange: (value: string) => void;\n}\n\nexport const Header = (props: HeaderProps) => {\n const {\n canCreateFolder,\n canCreateContent,\n onCreateEntry,\n onCreateFolder,\n title,\n searchValue,\n searchPlaceholder,\n onSearchChange\n } = props;\n\n return (\n <>\n <div className={\"flex flex-col gap-md\"}>\n <Title title={title} isRoot={props.isRoot} />\n <div className={\"px-md pb-sm\"}>\n <div className={\"flex items-center gap-sm w-full\"}>\n <div className={\"flex-1\"}>\n <Search\n value={searchValue}\n onChange={onSearchChange}\n placeholder={searchPlaceholder || \"Search entries...\"}\n />\n </div>\n <div>\n <div className={\"flex gap-sm\"}>\n <ButtonFilters />\n <ButtonsCreate\n canCreateFolder={canCreateFolder}\n canCreateContent={canCreateContent}\n onCreateFolder={onCreateFolder}\n onCreateEntry={onCreateEntry}\n />\n </div>\n </div>\n </div>\n </div>\n </div>\n <Separator />\n </>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,SAAS,QAAQ,kBAAkB;AAC5C,SAASC,MAAM,QAAQ,iBAAiB;AACxC,SAASC,aAAa;AACtB,SAASC,aAAa;AACtB,SAASC,KAAK;AAcd,OAAO,MAAMC,MAAM,GAAIC,KAAkB,IAAK;EAC1C,MAAM;IACFC,eAAe;IACfC,gBAAgB;IAChBC,aAAa;IACbC,cAAc;IACdC,KAAK;IACLC,WAAW;IACXC,iBAAiB;IACjBC;EACJ,CAAC,GAAGR,KAAK;EAET,oBACIP,KAAA,CAAAgB,aAAA,CAAAhB,KAAA,CAAAiB,QAAA,qBACIjB,KAAA,CAAAgB,aAAA;IAAKE,SAAS,EAAE;EAAuB,gBACnClB,KAAA,CAAAgB,aAAA,CAACX,KAAK;IAACO,KAAK,EAAEA,KAAM;IAACO,MAAM,EAAEZ,KAAK,CAACY;EAAO,CAAE,CAAC,eAC7CnB,KAAA,CAAAgB,aAAA;IAAKE,SAAS,EAAE;EAAc,gBAC1BlB,KAAA,CAAAgB,aAAA;IAAKE,SAAS,EAAE;EAAkC,gBAC9ClB,KAAA,CAAAgB,aAAA;IAAKE,SAAS,EAAE;EAAS,gBACrBlB,KAAA,CAAAgB,aAAA,CAACd,MAAM;IACHkB,KAAK,EAAEP,WAAY;IACnBQ,QAAQ,EAAEN,cAAe;IACzBO,WAAW,EAAER,iBAAiB,IAAI;EAAoB,CACzD,CACA,CAAC,eACNd,KAAA,CAAAgB,aAAA,2BACIhB,KAAA,CAAAgB,aAAA;IAAKE,SAAS,EAAE;EAAc,gBAC1BlB,KAAA,CAAAgB,aAAA,CAACb,aAAa,MAAE,CAAC,eACjBH,KAAA,CAAAgB,aAAA,CAACZ,aAAa;IACVI,eAAe,EAAEA,eAAgB;IACjCC,gBAAgB,EAAEA,gBAAiB;IACnCE,cAAc,EAAEA,cAAe;IAC/BD,aAAa,EAAEA;EAAc,CAChC,CACA,CACJ,CACJ,CACJ,CACJ,CAAC,eACNV,KAAA,CAAAgB,aAAA,CAACf,SAAS,MAAE,CACd,CAAC;AAEX,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","Separator","Search","ButtonFilters","ButtonsCreate","ButtonRefresh","Title","Header","props","canCreateFolder","canCreateContent","onCreateEntry","onCreateFolder","title","searchValue","searchPlaceholder","onSearchChange","createElement","Fragment","className","isRoot","value","onChange","placeholder"],"sources":["Header.tsx"],"sourcesContent":["import React from \"react\";\nimport { Separator } from \"@webiny/admin-ui\";\nimport { Search } from \"@webiny/app-aco\";\nimport { ButtonFilters } from \"./ButtonFilters/index.js\";\nimport { ButtonsCreate } from \"./ButtonsCreate/index.js\";\nimport { ButtonRefresh } from \"./ButtonRefresh/index.js\";\nimport { Title } from \"./Title/index.js\";\n\ninterface HeaderProps {\n isRoot: boolean;\n title?: string;\n canCreateFolder: boolean;\n canCreateContent: boolean;\n onCreateEntry: (event?: React.SyntheticEvent) => void;\n onCreateFolder: (event?: React.SyntheticEvent) => void;\n searchValue: string;\n searchPlaceholder: string;\n onSearchChange: (value: string) => void;\n}\n\nexport const Header = (props: HeaderProps) => {\n const {\n canCreateFolder,\n canCreateContent,\n onCreateEntry,\n onCreateFolder,\n title,\n searchValue,\n searchPlaceholder,\n onSearchChange\n } = props;\n\n return (\n <>\n <div className={\"flex flex-col gap-md\"}>\n <Title title={title} isRoot={props.isRoot} />\n <div className={\"px-md pb-sm\"}>\n <div className={\"flex items-center gap-sm w-full\"}>\n <div className={\"flex-1\"}>\n <Search\n value={searchValue}\n onChange={onSearchChange}\n placeholder={searchPlaceholder || \"Search entries...\"}\n />\n </div>\n <div>\n <div className={\"flex gap-sm\"}>\n <ButtonRefresh />\n <ButtonFilters />\n <ButtonsCreate\n canCreateFolder={canCreateFolder}\n canCreateContent={canCreateContent}\n onCreateFolder={onCreateFolder}\n onCreateEntry={onCreateEntry}\n />\n </div>\n </div>\n </div>\n </div>\n </div>\n <Separator />\n </>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,SAAS,QAAQ,kBAAkB;AAC5C,SAASC,MAAM,QAAQ,iBAAiB;AACxC,SAASC,aAAa;AACtB,SAASC,aAAa;AACtB,SAASC,aAAa;AACtB,SAASC,KAAK;AAcd,OAAO,MAAMC,MAAM,GAAIC,KAAkB,IAAK;EAC1C,MAAM;IACFC,eAAe;IACfC,gBAAgB;IAChBC,aAAa;IACbC,cAAc;IACdC,KAAK;IACLC,WAAW;IACXC,iBAAiB;IACjBC;EACJ,CAAC,GAAGR,KAAK;EAET,oBACIR,KAAA,CAAAiB,aAAA,CAAAjB,KAAA,CAAAkB,QAAA,qBACIlB,KAAA,CAAAiB,aAAA;IAAKE,SAAS,EAAE;EAAuB,gBACnCnB,KAAA,CAAAiB,aAAA,CAACX,KAAK;IAACO,KAAK,EAAEA,KAAM;IAACO,MAAM,EAAEZ,KAAK,CAACY;EAAO,CAAE,CAAC,eAC7CpB,KAAA,CAAAiB,aAAA;IAAKE,SAAS,EAAE;EAAc,gBAC1BnB,KAAA,CAAAiB,aAAA;IAAKE,SAAS,EAAE;EAAkC,gBAC9CnB,KAAA,CAAAiB,aAAA;IAAKE,SAAS,EAAE;EAAS,gBACrBnB,KAAA,CAAAiB,aAAA,CAACf,MAAM;IACHmB,KAAK,EAAEP,WAAY;IACnBQ,QAAQ,EAAEN,cAAe;IACzBO,WAAW,EAAER,iBAAiB,IAAI;EAAoB,CACzD,CACA,CAAC,eACNf,KAAA,CAAAiB,aAAA,2BACIjB,KAAA,CAAAiB,aAAA;IAAKE,SAAS,EAAE;EAAc,gBAC1BnB,KAAA,CAAAiB,aAAA,CAACZ,aAAa,MAAE,CAAC,eACjBL,KAAA,CAAAiB,aAAA,CAACd,aAAa,MAAE,CAAC,eACjBH,KAAA,CAAAiB,aAAA,CAACb,aAAa;IACVK,eAAe,EAAEA,eAAgB;IACjCC,gBAAgB,EAAEA,gBAAiB;IACnCE,cAAc,EAAEA,cAAe;IAC/BD,aAAa,EAAEA;EAAc,CAChC,CACA,CACJ,CACJ,CACJ,CACJ,CAAC,eACNX,KAAA,CAAAiB,aAAA,CAAChB,SAAS,MAAE,CACd,CAAC;AAEX,CAAC","ignoreList":[]}
@@ -10,7 +10,7 @@ export const SidebarContent = () => {
10
10
  currentFolderId
11
11
  } = useNavigateFolder();
12
12
  return /*#__PURE__*/React.createElement("div", {
13
- className: "p-xs flex-1 overflow-y-scroll"
13
+ className: "flex-1 overflow-y-scroll"
14
14
  }, /*#__PURE__*/React.createElement(FolderTree, {
15
15
  folderActions: browser.folder.actions,
16
16
  focusedFolderId: currentFolderId,
@@ -1 +1 @@
1
- {"version":3,"names":["React","FolderTree","useNavigateFolder","useContentEntryListConfig","SidebarContent","browser","navigateToFolder","currentFolderId","createElement","className","folderActions","folder","actions","focusedFolderId","onFolderClick","data","id","enableActions","enableCreate"],"sources":["SidebarContent.tsx"],"sourcesContent":["import React from \"react\";\nimport { FolderTree, useNavigateFolder } from \"@webiny/app-aco\";\nimport { useContentEntryListConfig } from \"~/admin/config/contentEntries/index.js\";\n\nexport const SidebarContent = () => {\n const { browser } = useContentEntryListConfig();\n const { navigateToFolder, currentFolderId } = useNavigateFolder();\n\n return (\n <div className={\"p-xs flex-1 overflow-y-scroll\"}>\n <FolderTree\n folderActions={browser.folder.actions}\n focusedFolderId={currentFolderId}\n onFolderClick={data => navigateToFolder(data.id)}\n enableActions={true}\n enableCreate={true}\n />\n </div>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,UAAU,EAAEC,iBAAiB,QAAQ,iBAAiB;AAC/D,SAASC,yBAAyB;AAElC,OAAO,MAAMC,cAAc,GAAGA,CAAA,KAAM;EAChC,MAAM;IAAEC;EAAQ,CAAC,GAAGF,yBAAyB,CAAC,CAAC;EAC/C,MAAM;IAAEG,gBAAgB;IAAEC;EAAgB,CAAC,GAAGL,iBAAiB,CAAC,CAAC;EAEjE,oBACIF,KAAA,CAAAQ,aAAA;IAAKC,SAAS,EAAE;EAAgC,gBAC5CT,KAAA,CAAAQ,aAAA,CAACP,UAAU;IACPS,aAAa,EAAEL,OAAO,CAACM,MAAM,CAACC,OAAQ;IACtCC,eAAe,EAAEN,eAAgB;IACjCO,aAAa,EAAEC,IAAI,IAAIT,gBAAgB,CAACS,IAAI,CAACC,EAAE,CAAE;IACjDC,aAAa,EAAE,IAAK;IACpBC,YAAY,EAAE;EAAK,CACtB,CACA,CAAC;AAEd,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","FolderTree","useNavigateFolder","useContentEntryListConfig","SidebarContent","browser","navigateToFolder","currentFolderId","createElement","className","folderActions","folder","actions","focusedFolderId","onFolderClick","data","id","enableActions","enableCreate"],"sources":["SidebarContent.tsx"],"sourcesContent":["import React from \"react\";\nimport { FolderTree, useNavigateFolder } from \"@webiny/app-aco\";\nimport { useContentEntryListConfig } from \"~/admin/config/contentEntries/index.js\";\n\nexport const SidebarContent = () => {\n const { browser } = useContentEntryListConfig();\n const { navigateToFolder, currentFolderId } = useNavigateFolder();\n\n return (\n <div className={\"flex-1 overflow-y-scroll\"}>\n <FolderTree\n folderActions={browser.folder.actions}\n focusedFolderId={currentFolderId}\n onFolderClick={data => navigateToFolder(data.id)}\n enableActions={true}\n enableCreate={true}\n />\n </div>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,UAAU,EAAEC,iBAAiB,QAAQ,iBAAiB;AAC/D,SAASC,yBAAyB;AAElC,OAAO,MAAMC,cAAc,GAAGA,CAAA,KAAM;EAChC,MAAM;IAAEC;EAAQ,CAAC,GAAGF,yBAAyB,CAAC,CAAC;EAC/C,MAAM;IAAEG,gBAAgB;IAAEC;EAAgB,CAAC,GAAGL,iBAAiB,CAAC,CAAC;EAEjE,oBACIF,KAAA,CAAAQ,aAAA;IAAKC,SAAS,EAAE;EAA2B,gBACvCT,KAAA,CAAAQ,aAAA,CAACP,UAAU;IACPS,aAAa,EAAEL,OAAO,CAACM,MAAM,CAACC,OAAQ;IACtCC,eAAe,EAAEN,eAAgB;IACjCO,aAAa,EAAEC,IAAI,IAAIT,gBAAgB,CAACS,IAAI,CAACC,EAAE,CAAE;IACjDC,aAAa,EAAE,IAAK;IACpBC,YAAY,EAAE;EAAK,CACtB,CACA,CAAC;AAEd,CAAC","ignoreList":[]}
@@ -7,7 +7,7 @@ export const SidebarHeader = () => {
7
7
  model
8
8
  } = useModel();
9
9
  return /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement("div", {
10
- className: "p-md pl-lg"
10
+ className: "py-sm px-md"
11
11
  }, /*#__PURE__*/React.createElement(Heading, {
12
12
  level: 5
13
13
  }, model.pluralApiName), /*#__PURE__*/React.createElement(IsModelPublishable, null, /*#__PURE__*/React.createElement(Text, {
@@ -1 +1 @@
1
- {"version":3,"names":["React","Heading","Link","Separator","Text","Tooltip","useModel","IsModelPublishable","SidebarHeader","model","createElement","className","level","pluralApiName","size","plugin","side","content","trigger","modelId","to","variant"],"sources":["SidebarHeader.tsx"],"sourcesContent":["import React from \"react\";\nimport { Heading, Link, Separator, Text, Tooltip } from \"@webiny/admin-ui\";\nimport { useModel } from \"@webiny/app-headless-cms-common\";\nimport { IsModelPublishable } from \"~/admin/components/IsModelPublishable.js\";\n\nexport const SidebarHeader = () => {\n const { model } = useModel();\n\n return (\n <div>\n <div className={\"p-md pl-lg\"}>\n <Heading level={5}>{model.pluralApiName}</Heading>\n <IsModelPublishable>\n <Text size={\"sm\"} className={\"text-neutral-muted\"}>\n Model ID:{\" \"}\n {model.plugin ? (\n <Tooltip\n side={\"top\"}\n content={\"Content model is registered via a plugin.\"}\n trigger={model.modelId}\n />\n ) : (\n <Tooltip\n content={\"Edit content model\"}\n side={\"top\"}\n trigger={\n <Link\n to={`/cms/content-models/${model.modelId}`}\n variant={\"secondary\"}\n className={\"text-neutral-muted hover:text-neutral-strong\"}\n >\n {model.modelId}\n </Link>\n }\n />\n )}\n </Text>\n </IsModelPublishable>\n </div>\n <Separator />\n </div>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,OAAO,EAAEC,IAAI,EAAEC,SAAS,EAAEC,IAAI,EAAEC,OAAO,QAAQ,kBAAkB;AAC1E,SAASC,QAAQ,QAAQ,iCAAiC;AAC1D,SAASC,kBAAkB;AAE3B,OAAO,MAAMC,aAAa,GAAGA,CAAA,KAAM;EAC/B,MAAM;IAAEC;EAAM,CAAC,GAAGH,QAAQ,CAAC,CAAC;EAE5B,oBACIN,KAAA,CAAAU,aAAA,2BACIV,KAAA,CAAAU,aAAA;IAAKC,SAAS,EAAE;EAAa,gBACzBX,KAAA,CAAAU,aAAA,CAACT,OAAO;IAACW,KAAK,EAAE;EAAE,GAAEH,KAAK,CAACI,aAAuB,CAAC,eAClDb,KAAA,CAAAU,aAAA,CAACH,kBAAkB,qBACfP,KAAA,CAAAU,aAAA,CAACN,IAAI;IAACU,IAAI,EAAE,IAAK;IAACH,SAAS,EAAE;EAAqB,GAAC,WACtC,EAAC,GAAG,EACZF,KAAK,CAACM,MAAM,gBACTf,KAAA,CAAAU,aAAA,CAACL,OAAO;IACJW,IAAI,EAAE,KAAM;IACZC,OAAO,EAAE,2CAA4C;IACrDC,OAAO,EAAET,KAAK,CAACU;EAAQ,CAC1B,CAAC,gBAEFnB,KAAA,CAAAU,aAAA,CAACL,OAAO;IACJY,OAAO,EAAE,oBAAqB;IAC9BD,IAAI,EAAE,KAAM;IACZE,OAAO,eACHlB,KAAA,CAAAU,aAAA,CAACR,IAAI;MACDkB,EAAE,EAAE,uBAAuBX,KAAK,CAACU,OAAO,EAAG;MAC3CE,OAAO,EAAE,WAAY;MACrBV,SAAS,EAAE;IAA+C,GAEzDF,KAAK,CAACU,OACL;EACT,CACJ,CAEH,CACU,CACnB,CAAC,eACNnB,KAAA,CAAAU,aAAA,CAACP,SAAS,MAAE,CACX,CAAC;AAEd,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","Heading","Link","Separator","Text","Tooltip","useModel","IsModelPublishable","SidebarHeader","model","createElement","className","level","pluralApiName","size","plugin","side","content","trigger","modelId","to","variant"],"sources":["SidebarHeader.tsx"],"sourcesContent":["import React from \"react\";\nimport { Heading, Link, Separator, Text, Tooltip } from \"@webiny/admin-ui\";\nimport { useModel } from \"@webiny/app-headless-cms-common\";\nimport { IsModelPublishable } from \"~/admin/components/IsModelPublishable.js\";\n\nexport const SidebarHeader = () => {\n const { model } = useModel();\n\n return (\n <div>\n <div className={\"py-sm px-md\"}>\n <Heading level={5}>{model.pluralApiName}</Heading>\n <IsModelPublishable>\n <Text size={\"sm\"} className={\"text-neutral-muted\"}>\n Model ID:{\" \"}\n {model.plugin ? (\n <Tooltip\n side={\"top\"}\n content={\"Content model is registered via a plugin.\"}\n trigger={model.modelId}\n />\n ) : (\n <Tooltip\n content={\"Edit content model\"}\n side={\"top\"}\n trigger={\n <Link\n to={`/cms/content-models/${model.modelId}`}\n variant={\"secondary\"}\n className={\"text-neutral-muted hover:text-neutral-strong\"}\n >\n {model.modelId}\n </Link>\n }\n />\n )}\n </Text>\n </IsModelPublishable>\n </div>\n <Separator />\n </div>\n );\n};\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,OAAO,EAAEC,IAAI,EAAEC,SAAS,EAAEC,IAAI,EAAEC,OAAO,QAAQ,kBAAkB;AAC1E,SAASC,QAAQ,QAAQ,iCAAiC;AAC1D,SAASC,kBAAkB;AAE3B,OAAO,MAAMC,aAAa,GAAGA,CAAA,KAAM;EAC/B,MAAM;IAAEC;EAAM,CAAC,GAAGH,QAAQ,CAAC,CAAC;EAE5B,oBACIN,KAAA,CAAAU,aAAA,2BACIV,KAAA,CAAAU,aAAA;IAAKC,SAAS,EAAE;EAAc,gBAC1BX,KAAA,CAAAU,aAAA,CAACT,OAAO;IAACW,KAAK,EAAE;EAAE,GAAEH,KAAK,CAACI,aAAuB,CAAC,eAClDb,KAAA,CAAAU,aAAA,CAACH,kBAAkB,qBACfP,KAAA,CAAAU,aAAA,CAACN,IAAI;IAACU,IAAI,EAAE,IAAK;IAACH,SAAS,EAAE;EAAqB,GAAC,WACtC,EAAC,GAAG,EACZF,KAAK,CAACM,MAAM,gBACTf,KAAA,CAAAU,aAAA,CAACL,OAAO;IACJW,IAAI,EAAE,KAAM;IACZC,OAAO,EAAE,2CAA4C;IACrDC,OAAO,EAAET,KAAK,CAACU;EAAQ,CAC1B,CAAC,gBAEFnB,KAAA,CAAAU,aAAA,CAACL,OAAO;IACJY,OAAO,EAAE,oBAAqB;IAC9BD,IAAI,EAAE,KAAM;IACZE,OAAO,eACHlB,KAAA,CAAAU,aAAA,CAACR,IAAI;MACDkB,EAAE,EAAE,uBAAuBX,KAAK,CAACU,OAAO,EAAG;MAC3CE,OAAO,EAAE,WAAY;MACrBV,SAAS,EAAE;IAA+C,GAEzDF,KAAK,CAACU,OACL;EACT,CACJ,CAEH,CACU,CACnB,CAAC,eACNnB,KAAA,CAAAU,aAAA,CAACP,SAAS,MAAE,CACX,CAAC;AAEd,CAAC","ignoreList":[]}
@@ -1,7 +1,7 @@
1
1
  import React, { useState, useEffect } from "react";
2
2
  import { makeDecoratable, NavigationPrompt, LeftPanel, RightPanel, SplitView } from "@webiny/app-admin";
3
3
  import { i18n } from "@webiny/app/i18n/index.js";
4
- import { Heading, OverlayLoader, Separator, Tabs, Text, TimeAgo } from "@webiny/admin-ui";
4
+ import { Heading, OverlayLoader, Tabs, Text, TimeAgo } from "@webiny/admin-ui";
5
5
  import { ReactComponent as EditIcon } from "@webiny/icons/edit.svg";
6
6
  import { ReactComponent as PreviewIcon } from "@webiny/icons/fullscreen.svg";
7
7
  import { FieldsSidebar } from "./FieldsSidebar.js";
@@ -62,11 +62,6 @@ export const ContentModelEditor = makeDecoratable("ContentModelEditor", () => {
62
62
  span: 4,
63
63
  className: "bg-neutral-light"
64
64
  }, /*#__PURE__*/React.createElement("div", {
65
- className: "px-lg py-md"
66
- }, /*#__PURE__*/React.createElement(Text, {
67
- as: "div",
68
- className: "uppercase font-semibold text-neutral-xstrong"
69
- }, "Fields")), /*#__PURE__*/React.createElement(Separator, null), /*#__PURE__*/React.createElement("div", {
70
65
  className: "px-lg py-md h-[calc(100vh-98px)] overflow-y-scroll"
71
66
  }, /*#__PURE__*/React.createElement(FieldsSidebar, {
72
67
  onFieldDragStart: () => {
@@ -1 +1 @@
1
- {"version":3,"names":["React","useState","useEffect","makeDecoratable","NavigationPrompt","LeftPanel","RightPanel","SplitView","i18n","Heading","OverlayLoader","Separator","Tabs","Text","TimeAgo","ReactComponent","EditIcon","PreviewIcon","FieldsSidebar","FieldEditor","PreviewTab","Header","DragPreview","useModelEditor","ContentEntryEditorWithConfig","ContentEntryProvider","ContentEntriesProvider","ModelIsBeingDeletedError","t","ns","prompt","ContentModelEditor","data","setData","isPristine","contentModel","document","body","classList","add","remove","activeTab","setActiveTab","onChange","fields","layout","createElement","text","isBeingDeleted","model","className","when","message","span","as","onFieldDragStart","level","name","size","createdBy","displayName","datetime","savedOn","spacing","separator","value","String","onValueChange","tabs","Tab","key","trigger","icon","content","readonly"],"sources":["ContentModelEditor.tsx"],"sourcesContent":["import React, { useState, useEffect } from \"react\";\nimport {\n makeDecoratable,\n NavigationPrompt,\n LeftPanel,\n RightPanel,\n SplitView\n} from \"@webiny/app-admin\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport { Heading, OverlayLoader, Separator, Tabs, Text, TimeAgo } from \"@webiny/admin-ui\";\nimport { ReactComponent as EditIcon } from \"@webiny/icons/edit.svg\";\nimport { ReactComponent as PreviewIcon } from \"@webiny/icons/fullscreen.svg\";\nimport { FieldsSidebar } from \"./FieldsSidebar.js\";\nimport { FieldEditor } from \"../FieldEditor/index.js\";\nimport { PreviewTab } from \"./PreviewTab.js\";\nimport Header from \"./Header.js\";\nimport DragPreview from \"../DragPreview.js\";\nimport { useModelEditor } from \"./useModelEditor.js\";\nimport type { CmsEditorFieldsLayout, CmsModelField } from \"~/types.js\";\nimport { ContentEntryEditorWithConfig } from \"~/admin/config/contentEntries/index.js\";\nimport { ContentEntryProvider } from \"~/admin/views/contentEntries/ContentEntry/ContentEntryContext.js\";\nimport { ContentEntriesProvider } from \"~/admin/views/contentEntries/ContentEntriesContext.js\";\nimport { ModelIsBeingDeletedError } from \"~/admin/components/ContentModelEditor/ModelIsBeingDeletedError/index.js\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/editor\");\n\nconst prompt = t`There are some unsaved changes! Are you sure you want to navigate away and discard all changes?`;\n\ninterface OnChangeParams {\n fields: CmsModelField[];\n layout: CmsEditorFieldsLayout;\n}\n\nexport const ContentModelEditor = makeDecoratable(\"ContentModelEditor\", () => {\n const { data, setData, isPristine, contentModel } = useModelEditor();\n\n // Add a class to <body> to trigger global styles while this component is active\n useEffect(() => {\n document.body.classList.add(\"overflow-hidden\");\n\n return () => {\n document.body.classList.remove(\"overflow-hidden\");\n };\n }, []);\n\n const [activeTab, setActiveTab] = useState<string>(\"edit\");\n\n const onChange = ({ fields, layout }: OnChangeParams) => {\n setData(data => ({ ...data, fields, layout }));\n };\n\n if (!data) {\n return <OverlayLoader text={\"Loading content model...\"} />;\n } else if (data.isBeingDeleted) {\n return <ModelIsBeingDeletedError model={data} />;\n }\n\n return (\n <div className={\"content-model-editor flex-1\"}>\n <NavigationPrompt when={!isPristine} message={prompt} />\n <Header />\n <div className={\"w-full overflow-y-auto h-main-content\"}>\n <SplitView>\n <LeftPanel span={4} className={\"bg-neutral-light\"}>\n <div className={\"px-lg py-md\"}>\n <Text\n as={\"div\"}\n className={\"uppercase font-semibold text-neutral-xstrong\"}\n >\n {\"Fields\"}\n </Text>\n </div>\n <Separator />\n <div className={\"px-lg py-md h-[calc(100vh-98px)] overflow-y-scroll\"}>\n <FieldsSidebar\n onFieldDragStart={() => {\n setActiveTab(\"edit\");\n }}\n />\n </div>\n </LeftPanel>\n <RightPanel span={8} className={\"bg-neutral-base\"}>\n <div className={\"h-full overflow-y-scroll\"}>\n {contentModel && (\n <div className={\"px-xl pt-lg pb-md-extra\"}>\n <Heading level={4}>{contentModel.name}</Heading>\n <Text size={\"sm\"} className={\"text-neutral-muted\"}>\n {`Created by ${contentModel.createdBy.displayName}. Last modified: `}\n <TimeAgo datetime={contentModel.savedOn} />.\n </Text>\n </div>\n )}\n <Tabs\n size={\"md\"}\n spacing={\"xl\"}\n separator={true}\n value={String(activeTab)}\n onValueChange={setActiveTab}\n tabs={[\n <Tabs.Tab\n key={\"edit\"}\n value={\"edit\"}\n trigger={\"Edit\"}\n icon={<EditIcon />}\n data-testid={\"cms.editor.tab.edit\"}\n content={\n <div className={\"relative mb-lg\"}>\n <FieldEditor\n fields={data.fields}\n layout={data.layout || []}\n onChange={onChange}\n />\n </div>\n }\n />,\n <Tabs.Tab\n key={\"preview\"}\n value={\"preview\"}\n trigger={\"Preview\"}\n icon={<PreviewIcon />}\n data-testid={\"cms.editor.tab.preview\"}\n content={\n <ContentEntryEditorWithConfig>\n <ContentEntriesProvider contentModel={data}>\n <ContentEntryProvider readonly={true}>\n <PreviewTab\n activeTab={activeTab === \"preview\"}\n />\n </ContentEntryProvider>\n </ContentEntriesProvider>\n </ContentEntryEditorWithConfig>\n }\n />\n ]}\n />\n </div>\n </RightPanel>\n </SplitView>\n <DragPreview />\n </div>\n </div>\n );\n});\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useState","useEffect","makeDecoratable","NavigationPrompt","LeftPanel","RightPanel","SplitView","i18n","Heading","OverlayLoader","Tabs","Text","TimeAgo","ReactComponent","EditIcon","PreviewIcon","FieldsSidebar","FieldEditor","PreviewTab","Header","DragPreview","useModelEditor","ContentEntryEditorWithConfig","ContentEntryProvider","ContentEntriesProvider","ModelIsBeingDeletedError","t","ns","prompt","ContentModelEditor","data","setData","isPristine","contentModel","document","body","classList","add","remove","activeTab","setActiveTab","onChange","fields","layout","createElement","text","isBeingDeleted","model","className","when","message","span","onFieldDragStart","level","name","size","createdBy","displayName","datetime","savedOn","spacing","separator","value","String","onValueChange","tabs","Tab","key","trigger","icon","content","readonly"],"sources":["ContentModelEditor.tsx"],"sourcesContent":["import React, { useState, useEffect } from \"react\";\nimport {\n makeDecoratable,\n NavigationPrompt,\n LeftPanel,\n RightPanel,\n SplitView\n} from \"@webiny/app-admin\";\nimport { i18n } from \"@webiny/app/i18n/index.js\";\nimport { Heading, OverlayLoader, Tabs, Text, TimeAgo } from \"@webiny/admin-ui\";\nimport { ReactComponent as EditIcon } from \"@webiny/icons/edit.svg\";\nimport { ReactComponent as PreviewIcon } from \"@webiny/icons/fullscreen.svg\";\nimport { FieldsSidebar } from \"./FieldsSidebar.js\";\nimport { FieldEditor } from \"../FieldEditor/index.js\";\nimport { PreviewTab } from \"./PreviewTab.js\";\nimport Header from \"./Header.js\";\nimport DragPreview from \"../DragPreview.js\";\nimport { useModelEditor } from \"./useModelEditor.js\";\nimport type { CmsEditorFieldsLayout, CmsModelField } from \"~/types.js\";\nimport { ContentEntryEditorWithConfig } from \"~/admin/config/contentEntries/index.js\";\nimport { ContentEntryProvider } from \"~/admin/views/contentEntries/ContentEntry/ContentEntryContext.js\";\nimport { ContentEntriesProvider } from \"~/admin/views/contentEntries/ContentEntriesContext.js\";\nimport { ModelIsBeingDeletedError } from \"~/admin/components/ContentModelEditor/ModelIsBeingDeletedError/index.js\";\n\nconst t = i18n.ns(\"app-headless-cms/admin/editor\");\n\nconst prompt = t`There are some unsaved changes! Are you sure you want to navigate away and discard all changes?`;\n\ninterface OnChangeParams {\n fields: CmsModelField[];\n layout: CmsEditorFieldsLayout;\n}\n\nexport const ContentModelEditor = makeDecoratable(\"ContentModelEditor\", () => {\n const { data, setData, isPristine, contentModel } = useModelEditor();\n\n // Add a class to <body> to trigger global styles while this component is active\n useEffect(() => {\n document.body.classList.add(\"overflow-hidden\");\n\n return () => {\n document.body.classList.remove(\"overflow-hidden\");\n };\n }, []);\n\n const [activeTab, setActiveTab] = useState<string>(\"edit\");\n\n const onChange = ({ fields, layout }: OnChangeParams) => {\n setData(data => ({ ...data, fields, layout }));\n };\n\n if (!data) {\n return <OverlayLoader text={\"Loading content model...\"} />;\n } else if (data.isBeingDeleted) {\n return <ModelIsBeingDeletedError model={data} />;\n }\n\n return (\n <div className={\"content-model-editor flex-1\"}>\n <NavigationPrompt when={!isPristine} message={prompt} />\n <Header />\n <div className={\"w-full overflow-y-auto h-main-content\"}>\n <SplitView>\n <LeftPanel span={4} className={\"bg-neutral-light\"}>\n <div className={\"px-lg py-md h-[calc(100vh-98px)] overflow-y-scroll\"}>\n <FieldsSidebar\n onFieldDragStart={() => {\n setActiveTab(\"edit\");\n }}\n />\n </div>\n </LeftPanel>\n <RightPanel span={8} className={\"bg-neutral-base\"}>\n <div className={\"h-full overflow-y-scroll\"}>\n {contentModel && (\n <div className={\"px-xl pt-lg pb-md-extra\"}>\n <Heading level={4}>{contentModel.name}</Heading>\n <Text size={\"sm\"} className={\"text-neutral-muted\"}>\n {`Created by ${contentModel.createdBy.displayName}. Last modified: `}\n <TimeAgo datetime={contentModel.savedOn} />.\n </Text>\n </div>\n )}\n <Tabs\n size={\"md\"}\n spacing={\"xl\"}\n separator={true}\n value={String(activeTab)}\n onValueChange={setActiveTab}\n tabs={[\n <Tabs.Tab\n key={\"edit\"}\n value={\"edit\"}\n trigger={\"Edit\"}\n icon={<EditIcon />}\n data-testid={\"cms.editor.tab.edit\"}\n content={\n <div className={\"relative mb-lg\"}>\n <FieldEditor\n fields={data.fields}\n layout={data.layout || []}\n onChange={onChange}\n />\n </div>\n }\n />,\n <Tabs.Tab\n key={\"preview\"}\n value={\"preview\"}\n trigger={\"Preview\"}\n icon={<PreviewIcon />}\n data-testid={\"cms.editor.tab.preview\"}\n content={\n <ContentEntryEditorWithConfig>\n <ContentEntriesProvider contentModel={data}>\n <ContentEntryProvider readonly={true}>\n <PreviewTab\n activeTab={activeTab === \"preview\"}\n />\n </ContentEntryProvider>\n </ContentEntriesProvider>\n </ContentEntryEditorWithConfig>\n }\n />\n ]}\n />\n </div>\n </RightPanel>\n </SplitView>\n <DragPreview />\n </div>\n </div>\n );\n});\n"],"mappings":"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","ignoreList":[]}
@@ -3,6 +3,7 @@ import type { ApolloClient } from "apollo-client";
3
3
  import type { GetCmsModelQueryResponse, UpdateCmsModelMutationResponse } from "../../../admin/graphql/contentModels.js";
4
4
  import type { CmsModel } from "../../../types.js";
5
5
  import type { FetchResult } from "apollo-link";
6
+ import type { FieldOption } from "@webiny/app-headless-cms-common/Fields/fieldOptions.js";
6
7
  export interface ContentModelEditorProviderContext {
7
8
  apolloClient: ApolloClient<any>;
8
9
  data: CmsModel;
@@ -13,6 +14,7 @@ export interface ContentModelEditorProviderContext {
13
14
  setData: (setter: (model: CmsModel) => void, saveContentModel?: boolean) => Promise<any>;
14
15
  activeTabIndex: number;
15
16
  setActiveTabIndex: (index: number) => void;
17
+ fieldOptions: FieldOption[];
16
18
  }
17
19
  export declare const contentModelEditorContext: React.Context<ContentModelEditorProviderContext | undefined>;
18
20
  interface State {
@@ -7,6 +7,8 @@ import { LIST_MENU_CONTENT_GROUPS_MODELS } from "../../viewsGraphql.js";
7
7
  import { ModelProvider } from "../ModelProvider/index.js";
8
8
  import { createHashing } from "@webiny/app/utils/index.js";
9
9
  import { Routes } from "../../../routes.js";
10
+ import { buildFieldOptions, buildFieldLabelPrefixes } from "@webiny/app-headless-cms-common/Fields/fieldOptions.js";
11
+ import { plugins } from "@webiny/plugins";
10
12
  export const contentModelEditorContext = /*#__PURE__*/React.createContext(undefined);
11
13
  export const contentModelEditorReducer = (prev, action) => {
12
14
  const {
@@ -176,6 +178,15 @@ export const ContentModelEditorProvider = ({
176
178
  showSnackbar(`Could not load content model with given ID.`);
177
179
  });
178
180
  }, [modelId]);
181
+ const layoutFieldPlugins = plugins.byType("cms-editor-layout-field-type");
182
+ const fieldOptions = useMemo(() => {
183
+ const model = state.data;
184
+ if (!model) {
185
+ return [];
186
+ }
187
+ const prefixes = model.layout ? buildFieldLabelPrefixes(model.layout, layoutFieldPlugins) : undefined;
188
+ return buildFieldOptions(model.fields ?? [], "", "", prefixes, layoutFieldPlugins);
189
+ }, [state.data?.fields, state.data?.layout]);
179
190
  const value = useMemo(() => ({
180
191
  // Keeping `data` for compatibility
181
192
  data: state.data,
@@ -188,8 +199,9 @@ export const ContentModelEditorProvider = ({
188
199
  saveContentModel,
189
200
  setData,
190
201
  activeTabIndex: state.activeTabIndex,
191
- setActiveTabIndex
192
- }), [state, apolloClient]);
202
+ setActiveTabIndex,
203
+ fieldOptions
204
+ }), [state, apolloClient, fieldOptions]);
193
205
  const {
194
206
  Provider
195
207
  } = contentModelEditorContext;
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","useEffect","useMemo","useReducer","get","pick","useSnackbar","useRouter","GET_CONTENT_MODEL","UPDATE_CONTENT_MODEL","LIST_MENU_CONTENT_GROUPS_MODELS","ModelProvider","createHashing","Routes","contentModelEditorContext","createContext","undefined","contentModelEditorReducer","prev","action","data","type","hashModel","cleanupModelDataFields","fields","map","field","predefinedValues","enabled","values","label","value","selected","String","cleanupModelData","createDefaultState","modelId","isPristine","activeTabIndex","ContentModelEditorProvider","children","apolloClient","state","dispatch","goToRoute","showSnackbar","setPristine","flag","saveContentModel","modelData","response","mutate","mutation","variables","refetchQueries","query","updateContentModel","error","setActiveTabIndex","setData","setter","saveModel","existingHash","newHash","getContentModel","Error","message","catch","ContentModels","List","contentModel","Provider","createElement","model"],"sources":["ContentModelEditorProvider.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useReducer } from \"react\";\nimport get from \"lodash/get.js\";\nimport pick from \"lodash/pick.js\";\nimport type { ApolloClient } from \"apollo-client\";\nimport { useSnackbar, useRouter } from \"@webiny/app-admin\";\nimport type {\n GetCmsModelQueryResponse,\n GetCmsModelQueryVariables,\n UpdateCmsModelMutationResponse,\n UpdateCmsModelMutationVariables\n} from \"~/admin/graphql/contentModels.js\";\nimport { GET_CONTENT_MODEL, UPDATE_CONTENT_MODEL } from \"~/admin/graphql/contentModels.js\";\nimport { LIST_MENU_CONTENT_GROUPS_MODELS } from \"~/admin/viewsGraphql.js\";\nimport type { CmsModel, CmsModelField } from \"~/types.js\";\nimport type { FetchResult } from \"apollo-link\";\nimport { ModelProvider } from \"~/admin/components/ModelProvider/index.js\";\nimport { createHashing } from \"@webiny/app/utils/index.js\";\nimport { Routes } from \"~/routes.js\";\n\nexport interface ContentModelEditorProviderContext {\n apolloClient: ApolloClient<any>;\n data: CmsModel;\n contentModel: CmsModel;\n isPristine: boolean;\n getContentModel: (modelId: string) => Promise<FetchResult<GetCmsModelQueryResponse>>;\n saveContentModel: (\n data?: CmsModel\n ) => Promise<UpdateCmsModelMutationResponse[\"updateContentModel\"]>;\n setData: (setter: (model: CmsModel) => void, saveContentModel?: boolean) => Promise<any>;\n activeTabIndex: number;\n setActiveTabIndex: (index: number) => void;\n}\n\nexport const contentModelEditorContext = React.createContext<\n ContentModelEditorProviderContext | undefined\n>(undefined);\n\ntype PickedCmsModel = Pick<\n CmsModel,\n \"layout\" | \"fields\" | \"name\" | \"settings\" | \"description\" | \"titleFieldId\" | \"group\"\n>;\ninterface State {\n modelId: string | null;\n isPristine: boolean;\n data: CmsModel;\n activeTabIndex: number;\n}\ninterface Action {\n data: Partial<State> | Partial<CmsModel>;\n type: \"state\" | \"data\";\n}\ninterface Reducer {\n (prev: State, action: Action): State;\n}\nexport const contentModelEditorReducer: Reducer = (prev: State, action: Action): State => {\n const { data, type } = action;\n switch (type) {\n case \"state\":\n return { ...prev, ...data };\n\n case \"data\":\n return { ...prev, data: data as CmsModel };\n default:\n return prev;\n }\n};\n\nconst hashModel = createHashing(\"SHA-256\");\n\n/**\n * Cleanup is required because backend always expects string value in predefined values entries\n */\nconst cleanupModelDataFields = (fields: CmsModelField[]): CmsModelField[] => {\n return fields.map(field => {\n const { predefinedValues } = field;\n const { enabled = false, values = [] } = predefinedValues || {};\n return {\n ...field,\n predefinedValues: {\n enabled,\n values: values.map(({ label, value, selected }) => {\n return {\n label,\n selected: selected || false,\n value: String(value)\n };\n })\n }\n };\n });\n};\n\nconst cleanupModelData = (data: PickedCmsModel): PickedCmsModel => {\n return {\n ...data,\n fields: cleanupModelDataFields(data.fields)\n };\n};\n\ninterface ContentModelEditorProviderProps {\n apolloClient: ApolloClient<any>;\n modelId?: string;\n children: React.ReactElement;\n}\n\nconst createDefaultState = (modelId?: string): State => {\n return {\n modelId: modelId || null,\n isPristine: true,\n data: null as unknown as CmsModel,\n activeTabIndex: 0\n };\n};\n\nexport const ContentModelEditorProvider = ({\n children,\n apolloClient,\n modelId\n}: ContentModelEditorProviderProps) => {\n const [state, dispatch] = useReducer(contentModelEditorReducer, createDefaultState(modelId));\n\n const { goToRoute } = useRouter();\n const { showSnackbar } = useSnackbar();\n\n const setPristine = (flag: boolean): void => {\n dispatch({ type: \"state\", data: { isPristine: flag } });\n };\n\n const saveContentModel = async (\n data?: CmsModel\n ): Promise<UpdateCmsModelMutationResponse[\"updateContentModel\"]> => {\n if (!data) {\n data = state.data;\n }\n const modelData: PickedCmsModel = pick(data, [\n \"group\",\n \"layout\",\n \"fields\",\n \"tags\",\n \"name\",\n \"settings\",\n \"description\",\n \"titleFieldId\",\n \"descriptionFieldId\",\n \"imageFieldId\",\n \"icon\"\n ]);\n const response = await apolloClient.mutate<\n UpdateCmsModelMutationResponse,\n UpdateCmsModelMutationVariables\n >({\n mutation: UPDATE_CONTENT_MODEL,\n variables: {\n modelId: data.modelId,\n data: cleanupModelData(modelData)\n },\n refetchQueries: [\n {\n query: LIST_MENU_CONTENT_GROUPS_MODELS\n }\n ]\n });\n\n setPristine(true);\n\n if (!response.data || !response.data.updateContentModel) {\n return {\n data: null,\n error: null\n };\n }\n\n return response.data.updateContentModel;\n };\n\n const setActiveTabIndex = useCallback((activeTabIndex: number) => {\n dispatch({ type: \"state\", data: { activeTabIndex } });\n }, []);\n\n /**\n * Set form data by providing a callback, which receives a fresh copy of data on which you can work on.\n * Return new data once finished.\n */\n const setData = async (setter: (value: any) => any, saveModel = false): Promise<void> => {\n const data = setter(state.data);\n const existingHash = await hashModel(state.data);\n const newHash = await hashModel(data);\n if (existingHash === newHash) {\n return;\n }\n setPristine(false);\n dispatch({ type: \"data\", data });\n if (!saveModel) {\n return;\n }\n await saveContentModel(data);\n };\n\n const getContentModel = async (\n modelId: string\n ): Promise<FetchResult<GetCmsModelQueryResponse>> => {\n const response = await apolloClient.query<\n GetCmsModelQueryResponse,\n GetCmsModelQueryVariables\n >({\n query: GET_CONTENT_MODEL,\n variables: {\n modelId\n }\n });\n\n const { data, error } = get(response, \"data.getContentModel\");\n if (error) {\n throw new Error(error.message);\n }\n\n await setData(() => data, false);\n\n setPristine(true);\n return response;\n };\n\n useEffect(() => {\n if (!modelId) {\n return;\n }\n getContentModel(modelId).catch(() => {\n goToRoute(Routes.ContentModels.List);\n showSnackbar(`Could not load content model with given ID.`);\n });\n }, [modelId]);\n\n const value = useMemo<ContentModelEditorProviderContext>(\n () => ({\n // Keeping `data` for compatibility\n data: state.data,\n contentModel: state.data,\n modelId,\n apolloClient,\n dispatch,\n isPristine: state.isPristine,\n getContentModel,\n saveContentModel,\n setData,\n activeTabIndex: state.activeTabIndex,\n setActiveTabIndex\n }),\n [state, apolloClient]\n );\n\n const { Provider } = contentModelEditorContext;\n\n return (\n <Provider value={value}>\n <ModelProvider model={value.contentModel}>{children}</ModelProvider>\n </Provider>\n );\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useCallback","useEffect","useMemo","useReducer","get","pick","useSnackbar","useRouter","GET_CONTENT_MODEL","UPDATE_CONTENT_MODEL","LIST_MENU_CONTENT_GROUPS_MODELS","ModelProvider","createHashing","Routes","buildFieldOptions","buildFieldLabelPrefixes","plugins","contentModelEditorContext","createContext","undefined","contentModelEditorReducer","prev","action","data","type","hashModel","cleanupModelDataFields","fields","map","field","predefinedValues","enabled","values","label","value","selected","String","cleanupModelData","createDefaultState","modelId","isPristine","activeTabIndex","ContentModelEditorProvider","children","apolloClient","state","dispatch","goToRoute","showSnackbar","setPristine","flag","saveContentModel","modelData","response","mutate","mutation","variables","refetchQueries","query","updateContentModel","error","setActiveTabIndex","setData","setter","saveModel","existingHash","newHash","getContentModel","Error","message","catch","ContentModels","List","layoutFieldPlugins","byType","fieldOptions","model","prefixes","layout","contentModel","Provider","createElement"],"sources":["ContentModelEditorProvider.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useReducer } from \"react\";\nimport get from \"lodash/get.js\";\nimport pick from \"lodash/pick.js\";\nimport type { ApolloClient } from \"apollo-client\";\nimport { useSnackbar, useRouter } from \"@webiny/app-admin\";\nimport type {\n GetCmsModelQueryResponse,\n GetCmsModelQueryVariables,\n UpdateCmsModelMutationResponse,\n UpdateCmsModelMutationVariables\n} from \"~/admin/graphql/contentModels.js\";\nimport { GET_CONTENT_MODEL, UPDATE_CONTENT_MODEL } from \"~/admin/graphql/contentModels.js\";\nimport { LIST_MENU_CONTENT_GROUPS_MODELS } from \"~/admin/viewsGraphql.js\";\nimport type { CmsModel, CmsModelField } from \"~/types.js\";\nimport type { CmsLayoutFieldTypePlugin } from \"@webiny/app-headless-cms-common/types/index.js\";\nimport type { FetchResult } from \"apollo-link\";\nimport { ModelProvider } from \"~/admin/components/ModelProvider/index.js\";\nimport { createHashing } from \"@webiny/app/utils/index.js\";\nimport { Routes } from \"~/routes.js\";\nimport type { FieldOption } from \"@webiny/app-headless-cms-common/Fields/fieldOptions.js\";\nimport {\n buildFieldOptions,\n buildFieldLabelPrefixes\n} from \"@webiny/app-headless-cms-common/Fields/fieldOptions.js\";\nimport { plugins } from \"@webiny/plugins\";\n\nexport interface ContentModelEditorProviderContext {\n apolloClient: ApolloClient<any>;\n data: CmsModel;\n contentModel: CmsModel;\n isPristine: boolean;\n getContentModel: (modelId: string) => Promise<FetchResult<GetCmsModelQueryResponse>>;\n saveContentModel: (\n data?: CmsModel\n ) => Promise<UpdateCmsModelMutationResponse[\"updateContentModel\"]>;\n setData: (setter: (model: CmsModel) => void, saveContentModel?: boolean) => Promise<any>;\n activeTabIndex: number;\n setActiveTabIndex: (index: number) => void;\n fieldOptions: FieldOption[];\n}\n\nexport const contentModelEditorContext = React.createContext<\n ContentModelEditorProviderContext | undefined\n>(undefined);\n\ntype PickedCmsModel = Pick<\n CmsModel,\n \"layout\" | \"fields\" | \"name\" | \"settings\" | \"description\" | \"titleFieldId\" | \"group\"\n>;\ninterface State {\n modelId: string | null;\n isPristine: boolean;\n data: CmsModel;\n activeTabIndex: number;\n}\ninterface Action {\n data: Partial<State> | Partial<CmsModel>;\n type: \"state\" | \"data\";\n}\ninterface Reducer {\n (prev: State, action: Action): State;\n}\nexport const contentModelEditorReducer: Reducer = (prev: State, action: Action): State => {\n const { data, type } = action;\n switch (type) {\n case \"state\":\n return { ...prev, ...data };\n\n case \"data\":\n return { ...prev, data: data as CmsModel };\n default:\n return prev;\n }\n};\n\nconst hashModel = createHashing(\"SHA-256\");\n\n/**\n * Cleanup is required because backend always expects string value in predefined values entries\n */\nconst cleanupModelDataFields = (fields: CmsModelField[]): CmsModelField[] => {\n return fields.map(field => {\n const { predefinedValues } = field;\n const { enabled = false, values = [] } = predefinedValues || {};\n return {\n ...field,\n predefinedValues: {\n enabled,\n values: values.map(({ label, value, selected }) => {\n return {\n label,\n selected: selected || false,\n value: String(value)\n };\n })\n }\n };\n });\n};\n\nconst cleanupModelData = (data: PickedCmsModel): PickedCmsModel => {\n return {\n ...data,\n fields: cleanupModelDataFields(data.fields)\n };\n};\n\ninterface ContentModelEditorProviderProps {\n apolloClient: ApolloClient<any>;\n modelId?: string;\n children: React.ReactElement;\n}\n\nconst createDefaultState = (modelId?: string): State => {\n return {\n modelId: modelId || null,\n isPristine: true,\n data: null as unknown as CmsModel,\n activeTabIndex: 0\n };\n};\n\nexport const ContentModelEditorProvider = ({\n children,\n apolloClient,\n modelId\n}: ContentModelEditorProviderProps) => {\n const [state, dispatch] = useReducer(contentModelEditorReducer, createDefaultState(modelId));\n\n const { goToRoute } = useRouter();\n const { showSnackbar } = useSnackbar();\n\n const setPristine = (flag: boolean): void => {\n dispatch({ type: \"state\", data: { isPristine: flag } });\n };\n\n const saveContentModel = async (\n data?: CmsModel\n ): Promise<UpdateCmsModelMutationResponse[\"updateContentModel\"]> => {\n if (!data) {\n data = state.data;\n }\n const modelData: PickedCmsModel = pick(data, [\n \"group\",\n \"layout\",\n \"fields\",\n \"tags\",\n \"name\",\n \"settings\",\n \"description\",\n \"titleFieldId\",\n \"descriptionFieldId\",\n \"imageFieldId\",\n \"icon\"\n ]);\n const response = await apolloClient.mutate<\n UpdateCmsModelMutationResponse,\n UpdateCmsModelMutationVariables\n >({\n mutation: UPDATE_CONTENT_MODEL,\n variables: {\n modelId: data.modelId,\n data: cleanupModelData(modelData)\n },\n refetchQueries: [\n {\n query: LIST_MENU_CONTENT_GROUPS_MODELS\n }\n ]\n });\n\n setPristine(true);\n\n if (!response.data || !response.data.updateContentModel) {\n return {\n data: null,\n error: null\n };\n }\n\n return response.data.updateContentModel;\n };\n\n const setActiveTabIndex = useCallback((activeTabIndex: number) => {\n dispatch({ type: \"state\", data: { activeTabIndex } });\n }, []);\n\n /**\n * Set form data by providing a callback, which receives a fresh copy of data on which you can work on.\n * Return new data once finished.\n */\n const setData = async (setter: (value: any) => any, saveModel = false): Promise<void> => {\n const data = setter(state.data);\n const existingHash = await hashModel(state.data);\n const newHash = await hashModel(data);\n if (existingHash === newHash) {\n return;\n }\n setPristine(false);\n dispatch({ type: \"data\", data });\n if (!saveModel) {\n return;\n }\n await saveContentModel(data);\n };\n\n const getContentModel = async (\n modelId: string\n ): Promise<FetchResult<GetCmsModelQueryResponse>> => {\n const response = await apolloClient.query<\n GetCmsModelQueryResponse,\n GetCmsModelQueryVariables\n >({\n query: GET_CONTENT_MODEL,\n variables: {\n modelId\n }\n });\n\n const { data, error } = get(response, \"data.getContentModel\");\n if (error) {\n throw new Error(error.message);\n }\n\n await setData(() => data, false);\n\n setPristine(true);\n return response;\n };\n\n useEffect(() => {\n if (!modelId) {\n return;\n }\n getContentModel(modelId).catch(() => {\n goToRoute(Routes.ContentModels.List);\n showSnackbar(`Could not load content model with given ID.`);\n });\n }, [modelId]);\n\n const layoutFieldPlugins = plugins.byType<CmsLayoutFieldTypePlugin>(\n \"cms-editor-layout-field-type\"\n );\n\n const fieldOptions = useMemo(() => {\n const model = state.data;\n if (!model) {\n return [];\n }\n const prefixes = model.layout\n ? buildFieldLabelPrefixes(model.layout, layoutFieldPlugins)\n : undefined;\n return buildFieldOptions(model.fields ?? [], \"\", \"\", prefixes, layoutFieldPlugins);\n }, [state.data?.fields, state.data?.layout]);\n\n const value = useMemo<ContentModelEditorProviderContext>(\n () => ({\n // Keeping `data` for compatibility\n data: state.data,\n contentModel: state.data,\n modelId,\n apolloClient,\n dispatch,\n isPristine: state.isPristine,\n getContentModel,\n saveContentModel,\n setData,\n activeTabIndex: state.activeTabIndex,\n setActiveTabIndex,\n fieldOptions\n }),\n [state, apolloClient, fieldOptions]\n );\n\n const { Provider } = contentModelEditorContext;\n\n return (\n <Provider value={value}>\n <ModelProvider model={value.contentModel}>{children}</ModelProvider>\n </Provider>\n );\n};\n"],"mappings":"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","ignoreList":[]}
@@ -38,15 +38,64 @@ const Field = props => {
38
38
  className: "text-neutral-strong"
39
39
  }, description)))));
40
40
  };
41
+ const LayoutFieldItem = props => {
42
+ const {
43
+ onFieldDragStart,
44
+ layoutField: {
45
+ type,
46
+ label,
47
+ icon,
48
+ description
49
+ }
50
+ } = props;
51
+ return /*#__PURE__*/React.createElement(Draggable, {
52
+ beginDrag: {
53
+ type: "newLayoutField",
54
+ layoutFieldType: type
55
+ }
56
+ }, ({
57
+ drag
58
+ }) => /*#__PURE__*/React.createElement("div", {
59
+ ref: drag,
60
+ "data-testid": `cms-editor-fields-layout-field-${type}`,
61
+ onDragStart: onFieldDragStart,
62
+ className: "bg-neutral-base rounded-sm mb-sm py-sm px-md cursor-grab last-of-type:mb-none hover:opacity-80 transition-opacity"
63
+ }, /*#__PURE__*/React.createElement("div", {
64
+ className: "flex items-center gap-md"
65
+ }, /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Icon, {
66
+ icon: icon,
67
+ label: label,
68
+ size: "md",
69
+ color: "neutral-light"
70
+ })), /*#__PURE__*/React.createElement("div", null, /*#__PURE__*/React.createElement(Heading, {
71
+ level: 6
72
+ }, label), /*#__PURE__*/React.createElement(Text, {
73
+ size: "sm",
74
+ className: "text-neutral-strong"
75
+ }, description)))));
76
+ };
41
77
  export const FieldsSidebar = ({
42
78
  onFieldDragStart
43
79
  }) => {
44
80
  const fieldTypePlugin = plugins.byType("cms-editor-field-type").filter(p => !p.field.hideInAdmin);
45
- return /*#__PURE__*/React.createElement(React.Fragment, null, fieldTypePlugin.map(fieldPlugin => /*#__PURE__*/React.createElement(Field, {
81
+ const layoutFieldPlugins = plugins.byType("cms-editor-layout-field-type");
82
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Text, {
83
+ as: "div",
84
+ size: "md",
85
+ className: "text-neutral-strong uppercase mt-0 mb-md font-semibold"
86
+ }, "Fields"), fieldTypePlugin.map(fieldPlugin => /*#__PURE__*/React.createElement(Field, {
46
87
  key: fieldPlugin.field.type,
47
88
  fieldType: fieldPlugin.field,
48
89
  onFieldDragStart: onFieldDragStart
49
- })));
90
+ })), layoutFieldPlugins.length > 0 && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Text, {
91
+ as: "div",
92
+ size: "md",
93
+ className: "text-neutral-strong uppercase my-md font-semibold"
94
+ }, "Layout"), layoutFieldPlugins.map(lp => /*#__PURE__*/React.createElement(LayoutFieldItem, {
95
+ key: lp.field.type,
96
+ layoutField: lp.field,
97
+ onFieldDragStart: onFieldDragStart
98
+ }))));
50
99
  };
51
100
 
52
101
  //# sourceMappingURL=FieldsSidebar.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["React","plugins","Draggable","Heading","Icon","Text","Field","props","onFieldDragStart","fieldType","type","label","icon","description","createElement","beginDrag","drag","ref","onDragStart","className","size","color","level","FieldsSidebar","fieldTypePlugin","byType","filter","p","field","hideInAdmin","Fragment","map","fieldPlugin","key"],"sources":["FieldsSidebar.tsx"],"sourcesContent":["import type { DragEventHandler } from \"react\";\nimport React from \"react\";\nimport { plugins } from \"@webiny/plugins\";\nimport Draggable from \"../Draggable.js\";\nimport type { CmsModelFieldTypePlugin } from \"~/types.js\";\nimport { Heading, Icon, Text } from \"@webiny/admin-ui\";\n\ninterface FieldProps {\n onFieldDragStart: DragEventHandler;\n fieldType: CmsModelFieldTypePlugin[\"field\"];\n}\n\nconst Field = (props: FieldProps) => {\n const {\n onFieldDragStart,\n fieldType: { type, label, icon, description }\n } = props;\n return (\n <Draggable beginDrag={{ type: \"newField\", fieldType: type }}>\n {({ drag }) => (\n <div\n ref={drag}\n data-testid={`cms-editor-fields-field-${type}`}\n onDragStart={onFieldDragStart}\n className={\n \"bg-neutral-base rounded-sm mb-sm py-sm px-md cursor-grab last-of-type:mb-none hover:opacity-80 transition-opacity\"\n }\n >\n <div className={\"flex items-center gap-md\"}>\n <div>\n <Icon\n icon={icon as React.ReactElement}\n label={label}\n size={\"md\"}\n color={\"neutral-light\"}\n />\n </div>\n <div>\n <Heading level={6}>{label}</Heading>\n <Text size={\"sm\"} className={\"text-neutral-strong\"}>\n {description}\n </Text>\n </div>\n </div>\n </div>\n )}\n </Draggable>\n );\n};\n\ninterface FieldsSidebarProps {\n onFieldDragStart: DragEventHandler;\n}\n\nexport const FieldsSidebar = ({ onFieldDragStart }: FieldsSidebarProps) => {\n const fieldTypePlugin = plugins\n .byType<CmsModelFieldTypePlugin>(\"cms-editor-field-type\")\n .filter(p => !p.field.hideInAdmin);\n\n return (\n <>\n {fieldTypePlugin.map(fieldPlugin => (\n <Field\n key={fieldPlugin.field.type}\n fieldType={fieldPlugin.field}\n onFieldDragStart={onFieldDragStart}\n />\n ))}\n </>\n );\n};\n"],"mappings":"AACA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,OAAO,QAAQ,iBAAiB;AACzC,OAAOC,SAAS;AAEhB,SAASC,OAAO,EAAEC,IAAI,EAAEC,IAAI,QAAQ,kBAAkB;AAOtD,MAAMC,KAAK,GAAIC,KAAiB,IAAK;EACjC,MAAM;IACFC,gBAAgB;IAChBC,SAAS,EAAE;MAAEC,IAAI;MAAEC,KAAK;MAAEC,IAAI;MAAEC;IAAY;EAChD,CAAC,GAAGN,KAAK;EACT,oBACIP,KAAA,CAAAc,aAAA,CAACZ,SAAS;IAACa,SAAS,EAAE;MAAEL,IAAI,EAAE,UAAU;MAAED,SAAS,EAAEC;IAAK;EAAE,GACvD,CAAC;IAAEM;EAAK,CAAC,kBACNhB,KAAA,CAAAc,aAAA;IACIG,GAAG,EAAED,IAAK;IACV,eAAa,2BAA2BN,IAAI,EAAG;IAC/CQ,WAAW,EAAEV,gBAAiB;IAC9BW,SAAS,EACL;EACH,gBAEDnB,KAAA,CAAAc,aAAA;IAAKK,SAAS,EAAE;EAA2B,gBACvCnB,KAAA,CAAAc,aAAA,2BACId,KAAA,CAAAc,aAAA,CAACV,IAAI;IACDQ,IAAI,EAAEA,IAA2B;IACjCD,KAAK,EAAEA,KAAM;IACbS,IAAI,EAAE,IAAK;IACXC,KAAK,EAAE;EAAgB,CAC1B,CACA,CAAC,eACNrB,KAAA,CAAAc,aAAA,2BACId,KAAA,CAAAc,aAAA,CAACX,OAAO;IAACmB,KAAK,EAAE;EAAE,GAAEX,KAAe,CAAC,eACpCX,KAAA,CAAAc,aAAA,CAACT,IAAI;IAACe,IAAI,EAAE,IAAK;IAACD,SAAS,EAAE;EAAsB,GAC9CN,WACC,CACL,CACJ,CACJ,CAEF,CAAC;AAEpB,CAAC;AAMD,OAAO,MAAMU,aAAa,GAAGA,CAAC;EAAEf;AAAqC,CAAC,KAAK;EACvE,MAAMgB,eAAe,GAAGvB,OAAO,CAC1BwB,MAAM,CAA0B,uBAAuB,CAAC,CACxDC,MAAM,CAACC,CAAC,IAAI,CAACA,CAAC,CAACC,KAAK,CAACC,WAAW,CAAC;EAEtC,oBACI7B,KAAA,CAAAc,aAAA,CAAAd,KAAA,CAAA8B,QAAA,QACKN,eAAe,CAACO,GAAG,CAACC,WAAW,iBAC5BhC,KAAA,CAAAc,aAAA,CAACR,KAAK;IACF2B,GAAG,EAAED,WAAW,CAACJ,KAAK,CAAClB,IAAK;IAC5BD,SAAS,EAAEuB,WAAW,CAACJ,KAAM;IAC7BpB,gBAAgB,EAAEA;EAAiB,CACtC,CACJ,CACH,CAAC;AAEX,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","plugins","Draggable","Heading","Icon","Text","Field","props","onFieldDragStart","fieldType","type","label","icon","description","createElement","beginDrag","drag","ref","onDragStart","className","size","color","level","LayoutFieldItem","layoutField","layoutFieldType","FieldsSidebar","fieldTypePlugin","byType","filter","p","field","hideInAdmin","layoutFieldPlugins","Fragment","as","map","fieldPlugin","key","length","lp"],"sources":["FieldsSidebar.tsx"],"sourcesContent":["import type { DragEventHandler } from \"react\";\nimport React from \"react\";\nimport { plugins } from \"@webiny/plugins\";\nimport Draggable from \"../Draggable.js\";\nimport type { CmsModelFieldTypePlugin, CmsLayoutFieldTypePlugin } from \"~/types.js\";\nimport { Heading, Icon, Text } from \"@webiny/admin-ui\";\n\ninterface FieldProps {\n onFieldDragStart: DragEventHandler;\n fieldType: CmsModelFieldTypePlugin[\"field\"];\n}\n\nconst Field = (props: FieldProps) => {\n const {\n onFieldDragStart,\n fieldType: { type, label, icon, description }\n } = props;\n return (\n <Draggable beginDrag={{ type: \"newField\", fieldType: type }}>\n {({ drag }) => (\n <div\n ref={drag}\n data-testid={`cms-editor-fields-field-${type}`}\n onDragStart={onFieldDragStart}\n className={\n \"bg-neutral-base rounded-sm mb-sm py-sm px-md cursor-grab last-of-type:mb-none hover:opacity-80 transition-opacity\"\n }\n >\n <div className={\"flex items-center gap-md\"}>\n <div>\n <Icon\n icon={icon as React.ReactElement}\n label={label}\n size={\"md\"}\n color={\"neutral-light\"}\n />\n </div>\n <div>\n <Heading level={6}>{label}</Heading>\n <Text size={\"sm\"} className={\"text-neutral-strong\"}>\n {description}\n </Text>\n </div>\n </div>\n </div>\n )}\n </Draggable>\n );\n};\n\ninterface LayoutFieldItemProps {\n onFieldDragStart: DragEventHandler;\n layoutField: CmsLayoutFieldTypePlugin[\"field\"];\n}\n\nconst LayoutFieldItem = (props: LayoutFieldItemProps) => {\n const {\n onFieldDragStart,\n layoutField: { type, label, icon, description }\n } = props;\n return (\n <Draggable beginDrag={{ type: \"newLayoutField\", layoutFieldType: type }}>\n {({ drag }) => (\n <div\n ref={drag}\n data-testid={`cms-editor-fields-layout-field-${type}`}\n onDragStart={onFieldDragStart}\n className={\n \"bg-neutral-base rounded-sm mb-sm py-sm px-md cursor-grab last-of-type:mb-none hover:opacity-80 transition-opacity\"\n }\n >\n <div className={\"flex items-center gap-md\"}>\n <div>\n <Icon icon={icon} label={label} size={\"md\"} color={\"neutral-light\"} />\n </div>\n <div>\n <Heading level={6}>{label}</Heading>\n <Text size={\"sm\"} className={\"text-neutral-strong\"}>\n {description}\n </Text>\n </div>\n </div>\n </div>\n )}\n </Draggable>\n );\n};\n\ninterface FieldsSidebarProps {\n onFieldDragStart: DragEventHandler;\n}\n\nexport const FieldsSidebar = ({ onFieldDragStart }: FieldsSidebarProps) => {\n const fieldTypePlugin = plugins\n .byType<CmsModelFieldTypePlugin>(\"cms-editor-field-type\")\n .filter(p => !p.field.hideInAdmin);\n\n const layoutFieldPlugins = plugins.byType<CmsLayoutFieldTypePlugin>(\n \"cms-editor-layout-field-type\"\n );\n\n return (\n <>\n <Text\n as=\"div\"\n size={\"md\"}\n className={\"text-neutral-strong uppercase mt-0 mb-md font-semibold\"}\n >\n Fields\n </Text>\n {fieldTypePlugin.map(fieldPlugin => (\n <Field\n key={fieldPlugin.field.type}\n fieldType={fieldPlugin.field}\n onFieldDragStart={onFieldDragStart}\n />\n ))}\n {layoutFieldPlugins.length > 0 && (\n <>\n <Text\n as=\"div\"\n size={\"md\"}\n className={\"text-neutral-strong uppercase my-md font-semibold\"}\n >\n Layout\n </Text>\n {layoutFieldPlugins.map(lp => (\n <LayoutFieldItem\n key={lp.field.type}\n layoutField={lp.field}\n onFieldDragStart={onFieldDragStart}\n />\n ))}\n </>\n )}\n </>\n );\n};\n"],"mappings":"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","ignoreList":[]}
@@ -12,7 +12,7 @@ export interface DroppableChildrenFunction {
12
12
  (params: DroppableChildrenFunctionParams): React.ReactElement;
13
13
  }
14
14
  interface IsVisibleParams {
15
- type: "row" | "field" | "newField";
15
+ type: DragSource["type"];
16
16
  item: DragSource;
17
17
  isDragging: boolean;
18
18
  }
@@ -1 +1 @@
1
- {"version":3,"names":["React","useDrop","DroppableComponent","props","children","onDrop","isVisible","item","isOver","drop","accept","collect","monitor","shallow","getItem","isDroppable","isDragging","Boolean","Droppable","memo"],"sources":["Droppable.tsx"],"sourcesContent":["import * as React from \"react\";\nimport type { ConnectDropTarget } from \"react-dnd\";\nimport { useDrop } from \"react-dnd\";\nimport type { DragSource } from \"~/types.js\";\n\nexport interface DroppableChildrenFunctionParams {\n isDragging: boolean;\n isDroppable: boolean;\n isOver: boolean;\n item: any;\n drop: ConnectDropTarget;\n}\nexport interface DroppableChildrenFunction {\n (params: DroppableChildrenFunctionParams): React.ReactElement;\n}\n\ninterface IsVisibleParams {\n type: \"row\" | \"field\" | \"newField\";\n item: DragSource;\n isDragging: boolean;\n}\nexport interface IsVisibleCallable {\n (params: IsVisibleParams): boolean;\n}\nexport interface OnDropCallable {\n (item: DragSource): void;\n}\nexport interface DroppableProps {\n type?: string;\n children: DroppableChildrenFunction;\n isDragging?: boolean;\n isDroppable?: (item: DragSource) => boolean;\n isVisible?: IsVisibleCallable;\n onDrop?: OnDropCallable;\n}\n\nexport type DragObject = {\n item: IsVisibleParams;\n isOver: boolean;\n};\n\nconst DroppableComponent = (props: DroppableProps) => {\n const { children, onDrop, isVisible = () => true } = props;\n\n const [{ item, isOver }, drop] = useDrop<DragSource, void, DragObject>({\n accept: \"element\",\n collect: monitor => ({\n isOver: monitor.isOver() && monitor.isOver({ shallow: true }),\n item: monitor.getItem()\n }),\n drop(item, monitor) {\n if (typeof props.isDroppable === \"function\" && !props.isDroppable(item)) {\n return;\n }\n\n if (typeof onDrop === \"function\") {\n return onDrop(monitor.getItem());\n }\n }\n });\n\n if (item && !isVisible(item)) {\n return null;\n }\n\n let isDroppable = true;\n if (item) {\n isDroppable = props.isDroppable ? props.isDroppable(item) : isOver;\n }\n\n return children({ isDragging: Boolean(item), isOver, isDroppable, item, drop });\n};\n\nexport const Droppable: React.ComponentType<DroppableProps> = React.memo(DroppableComponent);\n"],"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAE9B,SAASC,OAAO,QAAQ,WAAW;AAuCnC,MAAMC,kBAAkB,GAAIC,KAAqB,IAAK;EAClD,MAAM;IAAEC,QAAQ;IAAEC,MAAM;IAAEC,SAAS,GAAGA,CAAA,KAAM;EAAK,CAAC,GAAGH,KAAK;EAE1D,MAAM,CAAC;IAAEI,IAAI;IAAEC;EAAO,CAAC,EAAEC,IAAI,CAAC,GAAGR,OAAO,CAA+B;IACnES,MAAM,EAAE,SAAS;IACjBC,OAAO,EAAEC,OAAO,KAAK;MACjBJ,MAAM,EAAEI,OAAO,CAACJ,MAAM,CAAC,CAAC,IAAII,OAAO,CAACJ,MAAM,CAAC;QAAEK,OAAO,EAAE;MAAK,CAAC,CAAC;MAC7DN,IAAI,EAAEK,OAAO,CAACE,OAAO,CAAC;IAC1B,CAAC,CAAC;IACFL,IAAIA,CAACF,IAAI,EAAEK,OAAO,EAAE;MAChB,IAAI,OAAOT,KAAK,CAACY,WAAW,KAAK,UAAU,IAAI,CAACZ,KAAK,CAACY,WAAW,CAACR,IAAI,CAAC,EAAE;QACrE;MACJ;MAEA,IAAI,OAAOF,MAAM,KAAK,UAAU,EAAE;QAC9B,OAAOA,MAAM,CAACO,OAAO,CAACE,OAAO,CAAC,CAAC,CAAC;MACpC;IACJ;EACJ,CAAC,CAAC;EAEF,IAAIP,IAAI,IAAI,CAACD,SAAS,CAACC,IAAI,CAAC,EAAE;IAC1B,OAAO,IAAI;EACf;EAEA,IAAIQ,WAAW,GAAG,IAAI;EACtB,IAAIR,IAAI,EAAE;IACNQ,WAAW,GAAGZ,KAAK,CAACY,WAAW,GAAGZ,KAAK,CAACY,WAAW,CAACR,IAAI,CAAC,GAAGC,MAAM;EACtE;EAEA,OAAOJ,QAAQ,CAAC;IAAEY,UAAU,EAAEC,OAAO,CAACV,IAAI,CAAC;IAAEC,MAAM;IAAEO,WAAW;IAAER,IAAI;IAAEE;EAAK,CAAC,CAAC;AACnF,CAAC;AAED,OAAO,MAAMS,SAA8C,gBAAGlB,KAAK,CAACmB,IAAI,CAACjB,kBAAkB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["React","useDrop","DroppableComponent","props","children","onDrop","isVisible","item","isOver","drop","accept","collect","monitor","shallow","getItem","isDroppable","isDragging","Boolean","Droppable","memo"],"sources":["Droppable.tsx"],"sourcesContent":["import * as React from \"react\";\nimport type { ConnectDropTarget } from \"react-dnd\";\nimport { useDrop } from \"react-dnd\";\nimport type { DragSource } from \"~/types.js\";\n\nexport interface DroppableChildrenFunctionParams {\n isDragging: boolean;\n isDroppable: boolean;\n isOver: boolean;\n item: any;\n drop: ConnectDropTarget;\n}\nexport interface DroppableChildrenFunction {\n (params: DroppableChildrenFunctionParams): React.ReactElement;\n}\n\ninterface IsVisibleParams {\n type: DragSource[\"type\"];\n item: DragSource;\n isDragging: boolean;\n}\nexport interface IsVisibleCallable {\n (params: IsVisibleParams): boolean;\n}\nexport interface OnDropCallable {\n (item: DragSource): void;\n}\nexport interface DroppableProps {\n type?: string;\n children: DroppableChildrenFunction;\n isDragging?: boolean;\n isDroppable?: (item: DragSource) => boolean;\n isVisible?: IsVisibleCallable;\n onDrop?: OnDropCallable;\n}\n\nexport type DragObject = {\n item: IsVisibleParams;\n isOver: boolean;\n};\n\nconst DroppableComponent = (props: DroppableProps) => {\n const { children, onDrop, isVisible = () => true } = props;\n\n const [{ item, isOver }, drop] = useDrop<DragSource, void, DragObject>({\n accept: \"element\",\n collect: monitor => ({\n isOver: monitor.isOver() && monitor.isOver({ shallow: true }),\n item: monitor.getItem()\n }),\n drop(item, monitor) {\n if (typeof props.isDroppable === \"function\" && !props.isDroppable(item)) {\n return;\n }\n\n if (typeof onDrop === \"function\") {\n return onDrop(monitor.getItem());\n }\n }\n });\n\n if (item && !isVisible(item)) {\n return null;\n }\n\n let isDroppable = true;\n if (item) {\n isDroppable = props.isDroppable ? props.isDroppable(item) : isOver;\n }\n\n return children({ isDragging: Boolean(item), isOver, isDroppable, item, drop });\n};\n\nexport const Droppable: React.ComponentType<DroppableProps> = React.memo(DroppableComponent);\n"],"mappings":"AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAE9B,SAASC,OAAO,QAAQ,WAAW;AAuCnC,MAAMC,kBAAkB,GAAIC,KAAqB,IAAK;EAClD,MAAM;IAAEC,QAAQ;IAAEC,MAAM;IAAEC,SAAS,GAAGA,CAAA,KAAM;EAAK,CAAC,GAAGH,KAAK;EAE1D,MAAM,CAAC;IAAEI,IAAI;IAAEC;EAAO,CAAC,EAAEC,IAAI,CAAC,GAAGR,OAAO,CAA+B;IACnES,MAAM,EAAE,SAAS;IACjBC,OAAO,EAAEC,OAAO,KAAK;MACjBJ,MAAM,EAAEI,OAAO,CAACJ,MAAM,CAAC,CAAC,IAAII,OAAO,CAACJ,MAAM,CAAC;QAAEK,OAAO,EAAE;MAAK,CAAC,CAAC;MAC7DN,IAAI,EAAEK,OAAO,CAACE,OAAO,CAAC;IAC1B,CAAC,CAAC;IACFL,IAAIA,CAACF,IAAI,EAAEK,OAAO,EAAE;MAChB,IAAI,OAAOT,KAAK,CAACY,WAAW,KAAK,UAAU,IAAI,CAACZ,KAAK,CAACY,WAAW,CAACR,IAAI,CAAC,EAAE;QACrE;MACJ;MAEA,IAAI,OAAOF,MAAM,KAAK,UAAU,EAAE;QAC9B,OAAOA,MAAM,CAACO,OAAO,CAACE,OAAO,CAAC,CAAC,CAAC;MACpC;IACJ;EACJ,CAAC,CAAC;EAEF,IAAIP,IAAI,IAAI,CAACD,SAAS,CAACC,IAAI,CAAC,EAAE;IAC1B,OAAO,IAAI;EACf;EAEA,IAAIQ,WAAW,GAAG,IAAI;EACtB,IAAIR,IAAI,EAAE;IACNQ,WAAW,GAAGZ,KAAK,CAACY,WAAW,GAAGZ,KAAK,CAACY,WAAW,CAACR,IAAI,CAAC,GAAGC,MAAM;EACtE;EAEA,OAAOJ,QAAQ,CAAC;IAAEY,UAAU,EAAEC,OAAO,CAACV,IAAI,CAAC;IAAEC,MAAM;IAAEO,WAAW;IAAER,IAAI;IAAEE;EAAK,CAAC,CAAC;AACnF,CAAC;AAED,OAAO,MAAMS,SAA8C,gBAAGlB,KAAK,CAACmB,IAAI,CAACjB,kBAAkB,CAAC","ignoreList":[]}
@@ -15,7 +15,7 @@ const style = {
15
15
  styles: "text-align:center;padding:25px"
16
16
  } : {
17
17
  name: "16icgk8-noComponentsMessage",
18
- styles: "text-align:center;padding:25px;label:noComponentsMessage;/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkFwcGVhcmFuY2VUYWIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWF5QiIsImZpbGUiOiJBcHBlYXJhbmNlVGFiLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IGkxOG4gfSBmcm9tIFwiQHdlYmlueS9hcHAvaTE4bi9pbmRleC5qc1wiO1xuaW1wb3J0IHsgY3NzIH0gZnJvbSBcIkBlbW90aW9uL2Nzc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGlvbiB9IGZyb20gXCJAd2ViaW55L3ZhbGlkYXRpb25cIjtcbmltcG9ydCB7IHVzZUJpbmQgfSBmcm9tIFwiQHdlYmlueS9mb3JtXCI7XG5pbXBvcnQgeyBSZW5kZXJlck9wdGlvbnMgfSBmcm9tIFwiLi9BcHBlYXJhbmNlVGFiL1JlbmRlcmVyT3B0aW9ucy5qc1wiO1xuaW1wb3J0IHsgdXNlUmVuZGVyZXJQbHVnaW5zIH0gZnJvbSBcIi4vdXNlUmVuZGVyZXJQbHVnaW5zLmpzXCI7XG5pbXBvcnQgeyB1c2VNb2RlbEZpZWxkIH0gZnJvbSBcIn4vYWRtaW4vY29tcG9uZW50cy9Nb2RlbEZpZWxkUHJvdmlkZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IFJhZGlvR3JvdXAsIFRleHQsIEdyaWQsIEhlYWRpbmcgfSBmcm9tIFwiQHdlYmlueS9hZG1pbi11aVwiO1xuXG5jb25zdCB0ID0gaTE4bi5ucyhcImFwcC1oZWFkbGVzcy1jbXMvYWRtaW4vY29udGVudC1tb2RlbC1lZGl0b3IvdGFicy9hcHBlYXJhbmNlLXRhYlwiKTtcblxuY29uc3Qgc3R5bGUgPSB7XG4gICAgbm9Db21wb25lbnRzTWVzc2FnZTogY3NzKHtcbiAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxuICAgICAgICBwYWRkaW5nOiAyNVxuICAgIH0pLFxuICAgIHJhZGlvQ29udGFpbmVyOiBjc3Moe1xuICAgICAgICBtYXJnaW5Cb3R0b206IDEwLFxuICAgICAgICBkaXNwbGF5OiBcImZsZXhcIlxuICAgIH0pXG59O1xuXG5jb25zdCBBcHBlYXJhbmNlVGFiID0gKCkgPT4ge1xuICAgIGNvbnN0IHJlbmRlcmVycyA9IHVzZVJlbmRlcmVyUGx1Z2lucygpO1xuICAgIGNvbnN0IHsgZmllbGQgfSA9IHVzZU1vZGVsRmllbGQoKTtcblxuICAgIGNvbnN0IHJlbmRlcmVyTmFtZSA9IHVzZUJpbmQoe1xuICAgICAgICBuYW1lOiBcInJlbmRlcmVyLm5hbWVcIixcbiAgICAgICAgdmFsaWRhdGU6IHZhbGlkYXRpb24uY3JlYXRlKFwicmVxdWlyZWRcIilcbiAgICB9KTtcblxuICAgIGNvbnN0IHNlbGVjdGVkUGx1Z2luID0gcmVuZGVyZXJOYW1lLnZhbHVlXG4gICAgICAgID8gcmVuZGVyZXJzLmZpbmQocGwgPT4gcGwucmVuZGVyZXIucmVuZGVyZXJOYW1lID09PSByZW5kZXJlck5hbWUudmFsdWUpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKHJlbmRlcmVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxHcmlkPlxuICAgICAgICAgICAgICAgIDxHcmlkLkNvbHVtblxuICAgICAgICAgICAgICAgICAgICBzcGFuPXsxMn1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZS5ub0NvbXBvbmVudHNNZXNzYWdlfVxuICAgICAgICAgICAgICAgID57dGBUaGVyZSBhcmUgbm8gY29tcG9uZW50cyB0aGF0IGNhbiByZW5kZXIgdGhpcyBmaWVsZC5gfTwvR3JpZC5Db2x1bW4+XG4gICAgICAgICAgICA8L0dyaWQ+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCByZW5kZXIgcGx1Z2luIGlzIG5vIGxvbmdlciBhdmFpbGFibGUsIHNlbGVjdCB0aGUgZmlyc3QgYXZhaWxhYmxlIG9uZS5cbiAgICAgICAgaWYgKHNlbGVjdGVkUGx1Z2luKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVuZGVyZXJzWzBdKSB7XG4gICAgICAgICAgICByZW5kZXJlck5hbWUub25DaGFuZ2UocmVuZGVyZXJzWzBdLnJlbmRlcmVyLnJlbmRlcmVyTmFtZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmluZm8oYE5vIHJlbmRlcmVycyBmb3IgZmllbGQgJHtmaWVsZC5maWVsZElkfSBmb3VuZC5gLCBmaWVsZCk7XG4gICAgfSwgW2ZpZWxkLmlkLCBmaWVsZC5saXN0LCBmaWVsZC5wcmVkZWZpbmVkVmFsdWVzPy5lbmFibGVkLCBzZWxlY3RlZFBsdWdpbl0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICAgIDxHcmlkPlxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxHcmlkLkNvbHVtbiBzcGFuPXsxMn0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8SGVhZGluZyBsZXZlbD17NX0+RmllbGQgcmVuZGVyZXI8L0hlYWRpbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBzaXplPXtcInNtXCJ9PkNob29zZSBhIGNvbXBvbmVudCB0aGF0IHdpbGwgcmVuZGVyIHRoZSBmaWVsZC48L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDwvR3JpZC5Db2x1bW4+XG4gICAgICAgICAgICAgICAgICAgIDxHcmlkLkNvbHVtbiBzcGFuPXsxMn0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCJtYi14bFwifT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmFkaW9Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Li4ucmVuZGVyZXJOYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcz17cmVuZGVyZXJzLm1hcChpdGVtID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5yZW5kZXJlci5yZW5kZXJlck5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbS5yZW5kZXJlci5yZW5kZXJlck5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGFzPXtcImRpdlwifSBzaXplPXtcIm1kXCJ9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2l0ZW0ucmVuZGVyZXIubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXM9e1wiZGl2XCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPXtcInNtXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e1widGV4dC1zbSB0ZXh0LW5ldXRyYWwtc3Ryb25nXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpdGVtLnJlbmRlcmVyLmRlc2NyaXB0aW9ufVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvR3JpZC5Db2x1bW4+XG4gICAgICAgICAgICAgICAgICAgIDxSZW5kZXJlck9wdGlvbnMgcGx1Z2luPXtzZWxlY3RlZFBsdWdpbn0gLz5cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgIDwvR3JpZD5cbiAgICAgICAgPC8+XG4gICAgKTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IEFwcGVhcmFuY2VUYWI7XG4iXX0= */",
18
+ styles: "text-align:center;padding:25px;label:noComponentsMessage;/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkFwcGVhcmFuY2VUYWIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWF5QiIsImZpbGUiOiJBcHBlYXJhbmNlVGFiLnRzeCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IGkxOG4gfSBmcm9tIFwiQHdlYmlueS9hcHAvaTE4bi9pbmRleC5qc1wiO1xuaW1wb3J0IHsgY3NzIH0gZnJvbSBcIkBlbW90aW9uL2Nzc1wiO1xuaW1wb3J0IHsgdmFsaWRhdGlvbiB9IGZyb20gXCJAd2ViaW55L3ZhbGlkYXRpb25cIjtcbmltcG9ydCB7IHVzZUJpbmQgfSBmcm9tIFwiQHdlYmlueS9mb3JtXCI7XG5pbXBvcnQgeyBSZW5kZXJlck9wdGlvbnMgfSBmcm9tIFwiLi9BcHBlYXJhbmNlVGFiL1JlbmRlcmVyT3B0aW9ucy5qc1wiO1xuaW1wb3J0IHsgdXNlUmVuZGVyZXJQbHVnaW5zIH0gZnJvbSBcIi4vdXNlUmVuZGVyZXJQbHVnaW5zLmpzXCI7XG5pbXBvcnQgeyB1c2VNb2RlbEZpZWxkIH0gZnJvbSBcIn4vYWRtaW4vY29tcG9uZW50cy9Nb2RlbEZpZWxkUHJvdmlkZXIvaW5kZXguanNcIjtcbmltcG9ydCB7IFJhZGlvR3JvdXAsIFRleHQsIEdyaWQsIEhlYWRpbmcgfSBmcm9tIFwiQHdlYmlueS9hZG1pbi11aVwiO1xuXG5jb25zdCB0ID0gaTE4bi5ucyhcImFwcC1oZWFkbGVzcy1jbXMvYWRtaW4vY29udGVudC1tb2RlbC1lZGl0b3IvdGFicy9hcHBlYXJhbmNlLXRhYlwiKTtcblxuY29uc3Qgc3R5bGUgPSB7XG4gICAgbm9Db21wb25lbnRzTWVzc2FnZTogY3NzKHtcbiAgICAgICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxuICAgICAgICBwYWRkaW5nOiAyNVxuICAgIH0pLFxuICAgIHJhZGlvQ29udGFpbmVyOiBjc3Moe1xuICAgICAgICBtYXJnaW5Cb3R0b206IDEwLFxuICAgICAgICBkaXNwbGF5OiBcImZsZXhcIlxuICAgIH0pXG59O1xuXG5jb25zdCBBcHBlYXJhbmNlVGFiID0gKCkgPT4ge1xuICAgIGNvbnN0IHJlbmRlcmVycyA9IHVzZVJlbmRlcmVyUGx1Z2lucygpO1xuICAgIGNvbnN0IHsgZmllbGQgfSA9IHVzZU1vZGVsRmllbGQoKTtcblxuICAgIGNvbnN0IHJlbmRlcmVyTmFtZSA9IHVzZUJpbmQoe1xuICAgICAgICBuYW1lOiBcInJlbmRlcmVyLm5hbWVcIixcbiAgICAgICAgdmFsaWRhdGU6IHZhbGlkYXRpb24uY3JlYXRlKFwicmVxdWlyZWRcIilcbiAgICB9KTtcblxuICAgIGNvbnN0IHNlbGVjdGVkUGx1Z2luID0gcmVuZGVyZXJOYW1lLnZhbHVlXG4gICAgICAgID8gcmVuZGVyZXJzLmZpbmQocGwgPT4gcGwucmVuZGVyZXIucmVuZGVyZXJOYW1lID09PSByZW5kZXJlck5hbWUudmFsdWUpXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKHJlbmRlcmVycy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIDxHcmlkPlxuICAgICAgICAgICAgICAgIDxHcmlkLkNvbHVtblxuICAgICAgICAgICAgICAgICAgICBzcGFuPXsxMn1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZS5ub0NvbXBvbmVudHNNZXNzYWdlfVxuICAgICAgICAgICAgICAgID57dGBUaGVyZSBhcmUgbm8gY29tcG9uZW50cyB0aGF0IGNhbiByZW5kZXIgdGhpcyBmaWVsZC5gfTwvR3JpZC5Db2x1bW4+XG4gICAgICAgICAgICA8L0dyaWQ+XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCByZW5kZXIgcGx1Z2luIGlzIG5vIGxvbmdlciBhdmFpbGFibGUsIHNlbGVjdCB0aGUgZmlyc3QgYXZhaWxhYmxlIG9uZS5cbiAgICAgICAgaWYgKHNlbGVjdGVkUGx1Z2luKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVuZGVyZXJzWzBdKSB7XG4gICAgICAgICAgICByZW5kZXJlck5hbWUub25DaGFuZ2UocmVuZGVyZXJzWzBdLnJlbmRlcmVyLnJlbmRlcmVyTmFtZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLmluZm8oYE5vIHJlbmRlcmVycyBmb3IgZmllbGQgJHtmaWVsZC5maWVsZElkfSBmb3VuZC5gLCBmaWVsZCk7XG4gICAgfSwgW2ZpZWxkLmlkLCBmaWVsZC5saXN0LCBmaWVsZC5wcmVkZWZpbmVkVmFsdWVzPy5lbmFibGVkLCBzZWxlY3RlZFBsdWdpbl0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgICAgPD5cbiAgICAgICAgICAgIDxHcmlkPlxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgIDxHcmlkLkNvbHVtbiBzcGFuPXsxMn0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8SGVhZGluZyBsZXZlbD17NX0+RmllbGQgcmVuZGVyZXI8L0hlYWRpbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBzaXplPXtcInNtXCJ9PkNob29zZSBhIGNvbXBvbmVudCB0aGF0IHdpbGwgcmVuZGVyIHRoZSBmaWVsZC48L1RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDwvR3JpZC5Db2x1bW4+XG4gICAgICAgICAgICAgICAgICAgIDxHcmlkLkNvbHVtbiBzcGFuPXsxMn0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17XCJtYi14bFwifT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8UmFkaW9Hcm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Li4ucmVuZGVyZXJOYW1lfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcz17cmVuZGVyZXJzLm1hcChpdGVtID0+ICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5yZW5kZXJlci5yZW5kZXJlck5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbS5yZW5kZXJlci5yZW5kZXJlck5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0IGFzPXtcImRpdlwifSBzaXplPXtcIm1kXCJ9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2l0ZW0ucmVuZGVyZXIubmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXM9e1wiZGl2XCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplPXtcInNtXCJ9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e1widGV4dC1zbSB0ZXh0LW5ldXRyYWwtc3Ryb25nIHRleHQtd3JhcFwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aXRlbS5yZW5kZXJlci5kZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L0dyaWQuQ29sdW1uPlxuICAgICAgICAgICAgICAgICAgICA8UmVuZGVyZXJPcHRpb25zIHBsdWdpbj17c2VsZWN0ZWRQbHVnaW59IC8+XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICA8L0dyaWQ+XG4gICAgICAgIDwvPlxuICAgICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBcHBlYXJhbmNlVGFiO1xuIl19 */",
19
19
  toString: _EMOTION_STRINGIFIED_CSS_ERROR__
20
20
  }),
21
21
  radioContainer: /*#__PURE__*/css(process.env.NODE_ENV === "production" ? {
@@ -23,7 +23,7 @@ const style = {
23
23
  styles: "margin-bottom:10px;display:flex"
24
24
  } : {
25
25
  name: "4btape-radioContainer",
26
- styles: "margin-bottom:10px;display:flex;label:radioContainer;/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkFwcGVhcmFuY2VUYWIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWlCb0IiLCJmaWxlIjoiQXBwZWFyYW5jZVRhYi50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBpMThuIH0gZnJvbSBcIkB3ZWJpbnkvYXBwL2kxOG4vaW5kZXguanNcIjtcbmltcG9ydCB7IGNzcyB9IGZyb20gXCJAZW1vdGlvbi9jc3NcIjtcbmltcG9ydCB7IHZhbGlkYXRpb24gfSBmcm9tIFwiQHdlYmlueS92YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyB1c2VCaW5kIH0gZnJvbSBcIkB3ZWJpbnkvZm9ybVwiO1xuaW1wb3J0IHsgUmVuZGVyZXJPcHRpb25zIH0gZnJvbSBcIi4vQXBwZWFyYW5jZVRhYi9SZW5kZXJlck9wdGlvbnMuanNcIjtcbmltcG9ydCB7IHVzZVJlbmRlcmVyUGx1Z2lucyB9IGZyb20gXCIuL3VzZVJlbmRlcmVyUGx1Z2lucy5qc1wiO1xuaW1wb3J0IHsgdXNlTW9kZWxGaWVsZCB9IGZyb20gXCJ+L2FkbWluL2NvbXBvbmVudHMvTW9kZWxGaWVsZFByb3ZpZGVyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBSYWRpb0dyb3VwLCBUZXh0LCBHcmlkLCBIZWFkaW5nIH0gZnJvbSBcIkB3ZWJpbnkvYWRtaW4tdWlcIjtcblxuY29uc3QgdCA9IGkxOG4ubnMoXCJhcHAtaGVhZGxlc3MtY21zL2FkbWluL2NvbnRlbnQtbW9kZWwtZWRpdG9yL3RhYnMvYXBwZWFyYW5jZS10YWJcIik7XG5cbmNvbnN0IHN0eWxlID0ge1xuICAgIG5vQ29tcG9uZW50c01lc3NhZ2U6IGNzcyh7XG4gICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcbiAgICAgICAgcGFkZGluZzogMjVcbiAgICB9KSxcbiAgICByYWRpb0NvbnRhaW5lcjogY3NzKHtcbiAgICAgICAgbWFyZ2luQm90dG9tOiAxMCxcbiAgICAgICAgZGlzcGxheTogXCJmbGV4XCJcbiAgICB9KVxufTtcblxuY29uc3QgQXBwZWFyYW5jZVRhYiA9ICgpID0+IHtcbiAgICBjb25zdCByZW5kZXJlcnMgPSB1c2VSZW5kZXJlclBsdWdpbnMoKTtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB1c2VNb2RlbEZpZWxkKCk7XG5cbiAgICBjb25zdCByZW5kZXJlck5hbWUgPSB1c2VCaW5kKHtcbiAgICAgICAgbmFtZTogXCJyZW5kZXJlci5uYW1lXCIsXG4gICAgICAgIHZhbGlkYXRlOiB2YWxpZGF0aW9uLmNyZWF0ZShcInJlcXVpcmVkXCIpXG4gICAgfSk7XG5cbiAgICBjb25zdCBzZWxlY3RlZFBsdWdpbiA9IHJlbmRlcmVyTmFtZS52YWx1ZVxuICAgICAgICA/IHJlbmRlcmVycy5maW5kKHBsID0+IHBsLnJlbmRlcmVyLnJlbmRlcmVyTmFtZSA9PT0gcmVuZGVyZXJOYW1lLnZhbHVlKVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChyZW5kZXJlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8R3JpZD5cbiAgICAgICAgICAgICAgICA8R3JpZC5Db2x1bW5cbiAgICAgICAgICAgICAgICAgICAgc3Bhbj17MTJ9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGUubm9Db21wb25lbnRzTWVzc2FnZX1cbiAgICAgICAgICAgICAgICA+e3RgVGhlcmUgYXJlIG5vIGNvbXBvbmVudHMgdGhhdCBjYW4gcmVuZGVyIHRoaXMgZmllbGQuYH08L0dyaWQuQ29sdW1uPlxuICAgICAgICAgICAgPC9HcmlkPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIC8vIElmIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcmVuZGVyIHBsdWdpbiBpcyBubyBsb25nZXIgYXZhaWxhYmxlLCBzZWxlY3QgdGhlIGZpcnN0IGF2YWlsYWJsZSBvbmUuXG4gICAgICAgIGlmIChzZWxlY3RlZFBsdWdpbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlbmRlcmVyc1swXSkge1xuICAgICAgICAgICAgcmVuZGVyZXJOYW1lLm9uQ2hhbmdlKHJlbmRlcmVyc1swXS5yZW5kZXJlci5yZW5kZXJlck5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5pbmZvKGBObyByZW5kZXJlcnMgZm9yIGZpZWxkICR7ZmllbGQuZmllbGRJZH0gZm91bmQuYCwgZmllbGQpO1xuICAgIH0sIFtmaWVsZC5pZCwgZmllbGQubGlzdCwgZmllbGQucHJlZGVmaW5lZFZhbHVlcz8uZW5hYmxlZCwgc2VsZWN0ZWRQbHVnaW5dKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgICA8R3JpZD5cbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8R3JpZC5Db2x1bW4gc3Bhbj17MTJ9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPEhlYWRpbmcgbGV2ZWw9ezV9PkZpZWxkIHJlbmRlcmVyPC9IZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgc2l6ZT17XCJzbVwifT5DaG9vc2UgYSBjb21wb25lbnQgdGhhdCB3aWxsIHJlbmRlciB0aGUgZmllbGQuPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L0dyaWQuQ29sdW1uPlxuICAgICAgICAgICAgICAgICAgICA8R3JpZC5Db2x1bW4gc3Bhbj17MTJ9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wibWIteGxcIn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJhZGlvR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgey4uLnJlbmRlcmVyTmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM9e3JlbmRlcmVycy5tYXAoaXRlbSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGl0ZW0ucmVuZGVyZXIucmVuZGVyZXJOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW0ucmVuZGVyZXIucmVuZGVyZXJOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBhcz17XCJkaXZcIn0gc2l6ZT17XCJtZFwifT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpdGVtLnJlbmRlcmVyLm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzPXtcImRpdlwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT17XCJzbVwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtcInRleHQtc20gdGV4dC1uZXV0cmFsLXN0cm9uZ1wifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7aXRlbS5yZW5kZXJlci5kZXNjcmlwdGlvbn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L0dyaWQuQ29sdW1uPlxuICAgICAgICAgICAgICAgICAgICA8UmVuZGVyZXJPcHRpb25zIHBsdWdpbj17c2VsZWN0ZWRQbHVnaW59IC8+XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICA8L0dyaWQ+XG4gICAgICAgIDwvPlxuICAgICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBcHBlYXJhbmNlVGFiO1xuIl19 */",
26
+ styles: "margin-bottom:10px;display:flex;label:radioContainer;/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkFwcGVhcmFuY2VUYWIudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWlCb0IiLCJmaWxlIjoiQXBwZWFyYW5jZVRhYi50c3giLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBpMThuIH0gZnJvbSBcIkB3ZWJpbnkvYXBwL2kxOG4vaW5kZXguanNcIjtcbmltcG9ydCB7IGNzcyB9IGZyb20gXCJAZW1vdGlvbi9jc3NcIjtcbmltcG9ydCB7IHZhbGlkYXRpb24gfSBmcm9tIFwiQHdlYmlueS92YWxpZGF0aW9uXCI7XG5pbXBvcnQgeyB1c2VCaW5kIH0gZnJvbSBcIkB3ZWJpbnkvZm9ybVwiO1xuaW1wb3J0IHsgUmVuZGVyZXJPcHRpb25zIH0gZnJvbSBcIi4vQXBwZWFyYW5jZVRhYi9SZW5kZXJlck9wdGlvbnMuanNcIjtcbmltcG9ydCB7IHVzZVJlbmRlcmVyUGx1Z2lucyB9IGZyb20gXCIuL3VzZVJlbmRlcmVyUGx1Z2lucy5qc1wiO1xuaW1wb3J0IHsgdXNlTW9kZWxGaWVsZCB9IGZyb20gXCJ+L2FkbWluL2NvbXBvbmVudHMvTW9kZWxGaWVsZFByb3ZpZGVyL2luZGV4LmpzXCI7XG5pbXBvcnQgeyBSYWRpb0dyb3VwLCBUZXh0LCBHcmlkLCBIZWFkaW5nIH0gZnJvbSBcIkB3ZWJpbnkvYWRtaW4tdWlcIjtcblxuY29uc3QgdCA9IGkxOG4ubnMoXCJhcHAtaGVhZGxlc3MtY21zL2FkbWluL2NvbnRlbnQtbW9kZWwtZWRpdG9yL3RhYnMvYXBwZWFyYW5jZS10YWJcIik7XG5cbmNvbnN0IHN0eWxlID0ge1xuICAgIG5vQ29tcG9uZW50c01lc3NhZ2U6IGNzcyh7XG4gICAgICAgIHRleHRBbGlnbjogXCJjZW50ZXJcIixcbiAgICAgICAgcGFkZGluZzogMjVcbiAgICB9KSxcbiAgICByYWRpb0NvbnRhaW5lcjogY3NzKHtcbiAgICAgICAgbWFyZ2luQm90dG9tOiAxMCxcbiAgICAgICAgZGlzcGxheTogXCJmbGV4XCJcbiAgICB9KVxufTtcblxuY29uc3QgQXBwZWFyYW5jZVRhYiA9ICgpID0+IHtcbiAgICBjb25zdCByZW5kZXJlcnMgPSB1c2VSZW5kZXJlclBsdWdpbnMoKTtcbiAgICBjb25zdCB7IGZpZWxkIH0gPSB1c2VNb2RlbEZpZWxkKCk7XG5cbiAgICBjb25zdCByZW5kZXJlck5hbWUgPSB1c2VCaW5kKHtcbiAgICAgICAgbmFtZTogXCJyZW5kZXJlci5uYW1lXCIsXG4gICAgICAgIHZhbGlkYXRlOiB2YWxpZGF0aW9uLmNyZWF0ZShcInJlcXVpcmVkXCIpXG4gICAgfSk7XG5cbiAgICBjb25zdCBzZWxlY3RlZFBsdWdpbiA9IHJlbmRlcmVyTmFtZS52YWx1ZVxuICAgICAgICA/IHJlbmRlcmVycy5maW5kKHBsID0+IHBsLnJlbmRlcmVyLnJlbmRlcmVyTmFtZSA9PT0gcmVuZGVyZXJOYW1lLnZhbHVlKVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChyZW5kZXJlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8R3JpZD5cbiAgICAgICAgICAgICAgICA8R3JpZC5Db2x1bW5cbiAgICAgICAgICAgICAgICAgICAgc3Bhbj17MTJ9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGUubm9Db21wb25lbnRzTWVzc2FnZX1cbiAgICAgICAgICAgICAgICA+e3RgVGhlcmUgYXJlIG5vIGNvbXBvbmVudHMgdGhhdCBjYW4gcmVuZGVyIHRoaXMgZmllbGQuYH08L0dyaWQuQ29sdW1uPlxuICAgICAgICAgICAgPC9HcmlkPlxuICAgICAgICApO1xuICAgIH1cblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIC8vIElmIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgcmVuZGVyIHBsdWdpbiBpcyBubyBsb25nZXIgYXZhaWxhYmxlLCBzZWxlY3QgdGhlIGZpcnN0IGF2YWlsYWJsZSBvbmUuXG4gICAgICAgIGlmIChzZWxlY3RlZFBsdWdpbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlbmRlcmVyc1swXSkge1xuICAgICAgICAgICAgcmVuZGVyZXJOYW1lLm9uQ2hhbmdlKHJlbmRlcmVyc1swXS5yZW5kZXJlci5yZW5kZXJlck5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS5pbmZvKGBObyByZW5kZXJlcnMgZm9yIGZpZWxkICR7ZmllbGQuZmllbGRJZH0gZm91bmQuYCwgZmllbGQpO1xuICAgIH0sIFtmaWVsZC5pZCwgZmllbGQubGlzdCwgZmllbGQucHJlZGVmaW5lZFZhbHVlcz8uZW5hYmxlZCwgc2VsZWN0ZWRQbHVnaW5dKTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDw+XG4gICAgICAgICAgICA8R3JpZD5cbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICA8R3JpZC5Db2x1bW4gc3Bhbj17MTJ9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPEhlYWRpbmcgbGV2ZWw9ezV9PkZpZWxkIHJlbmRlcmVyPC9IZWFkaW5nPlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRleHQgc2l6ZT17XCJzbVwifT5DaG9vc2UgYSBjb21wb25lbnQgdGhhdCB3aWxsIHJlbmRlciB0aGUgZmllbGQuPC9UZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L0dyaWQuQ29sdW1uPlxuICAgICAgICAgICAgICAgICAgICA8R3JpZC5Db2x1bW4gc3Bhbj17MTJ9PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e1wibWIteGxcIn0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPFJhZGlvR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgey4uLnJlbmRlcmVyTmFtZX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXM9e3JlbmRlcmVycy5tYXAoaXRlbSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGl0ZW0ucmVuZGVyZXIucmVuZGVyZXJOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW0ucmVuZGVyZXIucmVuZGVyZXJOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8VGV4dCBhcz17XCJkaXZcIn0gc2l6ZT17XCJtZFwifT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtpdGVtLnJlbmRlcmVyLm5hbWV9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPFRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzPXtcImRpdlwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT17XCJzbVwifVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtcInRleHQtc20gdGV4dC1uZXV0cmFsLXN0cm9uZyB0ZXh0LXdyYXBcIn1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2l0ZW0ucmVuZGVyZXIuZGVzY3JpcHRpb259XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9HcmlkLkNvbHVtbj5cbiAgICAgICAgICAgICAgICAgICAgPFJlbmRlcmVyT3B0aW9ucyBwbHVnaW49e3NlbGVjdGVkUGx1Z2lufSAvPlxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgPC9HcmlkPlxuICAgICAgICA8Lz5cbiAgICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgQXBwZWFyYW5jZVRhYjtcbiJdfQ== */",
27
27
  toString: _EMOTION_STRINGIFIED_CSS_ERROR__
28
28
  })
29
29
  };
@@ -74,7 +74,7 @@ const AppearanceTab = () => {
74
74
  }, item.renderer.name), /*#__PURE__*/React.createElement(Text, {
75
75
  as: "div",
76
76
  size: "sm",
77
- className: "text-sm text-neutral-strong"
77
+ className: "text-sm text-neutral-strong text-wrap"
78
78
  }, item.renderer.description))
79
79
  }))
80
80
  })))), /*#__PURE__*/React.createElement(RendererOptions, {