@webiny/app-admin 0.0.0-unstable.9f53ea597d → 0.0.0-unstable.a4f3e4ea8b

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 (100) hide show
  1. package/base/Admin.js +5 -0
  2. package/base/Admin.js.map +1 -1
  3. package/base/Base/DefaultFieldRenderers.js +4 -0
  4. package/base/Base/DefaultFieldRenderers.js.map +1 -1
  5. package/base/Base/FieldRenderers/AutoCompleteRenderer.d.ts +13 -0
  6. package/base/Base/FieldRenderers/AutoCompleteRenderer.js +29 -0
  7. package/base/Base/FieldRenderers/AutoCompleteRenderer.js.map +1 -0
  8. package/base/Base/FieldRenderers/LexicalRenderer.js +10 -6
  9. package/base/Base/FieldRenderers/LexicalRenderer.js.map +1 -1
  10. package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/MultiValueDynamicZone.js +20 -3
  11. package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/MultiValueDynamicZone.js.map +1 -1
  12. package/base/Base/FieldRenderers/ObjectRenderer/ObjectAccordionMultipleRenderer.js +11 -2
  13. package/base/Base/FieldRenderers/ObjectRenderer/ObjectAccordionMultipleRenderer.js.map +1 -1
  14. package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.js +2 -1
  15. package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.js.map +1 -1
  16. package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js +11 -2
  17. package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js.map +1 -1
  18. package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.js +17 -2
  19. package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.js.map +1 -1
  20. package/base/Base/FieldRenderers/RadioButtonsRenderer.js +3 -2
  21. package/base/Base/FieldRenderers/RadioButtonsRenderer.js.map +1 -1
  22. package/base/Base/FieldRenderers/SelectRenderer.js +3 -2
  23. package/base/Base/FieldRenderers/SelectRenderer.js.map +1 -1
  24. package/components/Drawers/DrawerParamsContext.d.ts +6 -0
  25. package/components/Drawers/DrawerParamsContext.js +10 -0
  26. package/components/Drawers/DrawerParamsContext.js.map +1 -0
  27. package/components/Drawers/DrawersContext.d.ts +13 -0
  28. package/components/Drawers/DrawersContext.js +50 -0
  29. package/components/Drawers/DrawersContext.js.map +1 -0
  30. package/components/Drawers/useDrawers.d.ts +2 -0
  31. package/components/Drawers/useDrawers.js +10 -0
  32. package/components/Drawers/useDrawers.js.map +1 -0
  33. package/components/LexicalEditor/LexicalLinkForm.js +3 -0
  34. package/components/LexicalEditor/LexicalLinkForm.js.map +1 -1
  35. package/components/Wcp.d.ts +0 -2
  36. package/components/Wcp.js +1 -6
  37. package/components/Wcp.js.map +1 -1
  38. package/config/AdminConfig/Drawer.d.ts +10 -0
  39. package/config/AdminConfig/Drawer.js +19 -0
  40. package/config/AdminConfig/Drawer.js.map +1 -0
  41. package/config/AdminConfig.d.ts +4 -0
  42. package/config/AdminConfig.js +3 -0
  43. package/config/AdminConfig.js.map +1 -1
  44. package/features/dateFormatter/DefaultDateFormatter.d.ts +8 -0
  45. package/features/dateFormatter/DefaultDateFormatter.js +25 -0
  46. package/features/dateFormatter/DefaultDateFormatter.js.map +1 -0
  47. package/features/dateFormatter/abstractions.d.ts +13 -0
  48. package/features/dateFormatter/abstractions.js +5 -0
  49. package/features/dateFormatter/abstractions.js.map +1 -0
  50. package/features/dateFormatter/feature.d.ts +3 -0
  51. package/features/dateFormatter/feature.js +17 -0
  52. package/features/dateFormatter/feature.js.map +1 -0
  53. package/features/dateFormatter/formatUtcOffset.d.ts +1 -0
  54. package/features/dateFormatter/formatUtcOffset.js +11 -0
  55. package/features/dateFormatter/formatUtcOffset.js.map +1 -0
  56. package/features/dateFormatter/index.d.ts +4 -0
  57. package/features/dateFormatter/index.js +4 -0
  58. package/features/dateFormatter/useDateFormatter.d.ts +5 -0
  59. package/features/dateFormatter/useDateFormatter.js +8 -0
  60. package/features/dateFormatter/useDateFormatter.js.map +1 -0
  61. package/features/formModel/Field.d.ts +1 -0
  62. package/features/formModel/Field.js +17 -0
  63. package/features/formModel/Field.js.map +1 -1
  64. package/features/formModel/FocusManager.js +10 -3
  65. package/features/formModel/FocusManager.js.map +1 -1
  66. package/features/formModel/FormModel.js +7 -9
  67. package/features/formModel/FormModel.js.map +1 -1
  68. package/features/formModel/FormModel.test.js +244 -0
  69. package/features/formModel/FormModel.test.js.map +1 -1
  70. package/features/formModel/ObjectField.d.ts +1 -0
  71. package/features/formModel/ObjectField.js +25 -0
  72. package/features/formModel/ObjectField.js.map +1 -1
  73. package/features/formModel/abstractions.d.ts +2 -0
  74. package/features/formModel/abstractions.js.map +1 -1
  75. package/features/formModel/createFieldRenderer.d.ts +42 -0
  76. package/features/formModel/createFieldRenderer.js +34 -10
  77. package/features/formModel/createFieldRenderer.js.map +1 -1
  78. package/features/formModel/hasSubtreeFocusRequest.d.ts +12 -0
  79. package/features/formModel/hasSubtreeFocusRequest.js +15 -0
  80. package/features/formModel/hasSubtreeFocusRequest.js.map +1 -0
  81. package/features/formModel/index.d.ts +1 -0
  82. package/features/formModel/index.js +1 -0
  83. package/features/formModel/renderers.d.ts +1 -0
  84. package/features/formModel/renderers.js +1 -0
  85. package/features/wcp/ReactLicense.d.ts +0 -1
  86. package/features/wcp/ReactLicense.js +0 -3
  87. package/features/wcp/ReactLicense.js.map +1 -1
  88. package/features/wcp/WcpGateway.js +0 -3
  89. package/features/wcp/WcpGateway.js.map +1 -1
  90. package/hooks/index.d.ts +3 -0
  91. package/hooks/index.js +3 -0
  92. package/hooks/useDrawer.d.ts +9 -0
  93. package/hooks/useDrawer.js +19 -0
  94. package/hooks/useDrawer.js.map +1 -0
  95. package/hooks/useOpenDrawer.d.ts +7 -0
  96. package/hooks/useOpenDrawer.js +18 -0
  97. package/hooks/useOpenDrawer.js.map +1 -0
  98. package/index.d.ts +5 -0
  99. package/index.js +12 -8
  100. package/package.json +19 -19
@@ -1,21 +1,45 @@
1
- import react, { useEffect, useRef } from "react";
1
+ import react, { useEffect, useRef, useState } from "react";
2
2
  import { observer } from "mobx-react-lite";
3
+ import { makeDecoratable } from "@webiny/react-composition";
4
+ const FormFieldWrapper = makeDecoratable("FormFieldWrapper", ({ children })=>/*#__PURE__*/ react.createElement(react.Fragment, null, children));
5
+ const FOCUS_HIGHLIGHT_MS = 1800;
3
6
  const ScrollOnFocus = observer(({ field, children })=>{
4
7
  const ref = useRef(null);
8
+ const [highlighted, setHighlighted] = useState(false);
9
+ const highlightTimer = useRef(null);
5
10
  useEffect(()=>{
6
- if (field.focusRequested && ref.current) setTimeout(()=>{
7
- ref.current?.scrollIntoView({
8
- behavior: "smooth",
9
- block: "center"
10
- });
11
- }, 150);
11
+ if (field.focusRequested && ref.current) {
12
+ setTimeout(()=>{
13
+ ref.current?.scrollIntoView({
14
+ behavior: "smooth",
15
+ block: "center"
16
+ });
17
+ }, 150);
18
+ setHighlighted(true);
19
+ if (highlightTimer.current) window.clearTimeout(highlightTimer.current);
20
+ highlightTimer.current = window.setTimeout(()=>setHighlighted(false), FOCUS_HIGHLIGHT_MS);
21
+ }
12
22
  field.clearFocusRequest();
13
23
  }, [
14
24
  field.focusRequested
15
25
  ]);
26
+ useEffect(()=>()=>{
27
+ if (highlightTimer.current) window.clearTimeout(highlightTimer.current);
28
+ }, []);
16
29
  return /*#__PURE__*/ react.createElement("div", {
17
- ref: ref
18
- }, children);
30
+ ref: ref,
31
+ "data-field-path": field.qualifiedName,
32
+ style: {
33
+ padding: 6,
34
+ margin: -6,
35
+ borderRadius: 8,
36
+ transition: "box-shadow .35s ease, background-color .35s ease",
37
+ boxShadow: highlighted ? "0 0 0 2px var(--color-primary)" : void 0,
38
+ backgroundColor: highlighted ? "var(--color-primary-100)" : void 0
39
+ }
40
+ }, /*#__PURE__*/ react.createElement(FormFieldWrapper, {
41
+ field: field
42
+ }, children));
19
43
  });
20
44
  function createFieldRenderer(render) {
21
45
  const Inner = observer(render);
@@ -33,6 +57,6 @@ function createObjectFieldRenderer(render) {
33
57
  };
34
58
  return observer(Wrapped);
35
59
  }
36
- export { createFieldRenderer, createObjectFieldRenderer };
60
+ export { FormFieldWrapper, createFieldRenderer, createObjectFieldRenderer };
37
61
 
38
62
  //# sourceMappingURL=createFieldRenderer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"features/formModel/createFieldRenderer.js","sources":["../../../src/features/formModel/createFieldRenderer.tsx"],"sourcesContent":["import React, { useEffect, useRef } from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport type { IFieldVM, IObjectFieldVM, FieldRendererSettings } from \"./abstractions.js\";\n\ntype RendererField<TName extends string> = IFieldVM & {\n rendererSettings: FieldRendererSettings<TName>;\n};\n\ntype ObjectRendererField<TName extends string> = IObjectFieldVM & {\n rendererSettings: FieldRendererSettings<TName>;\n};\n\ntype FieldRendererFn<TName extends string> = (props: {\n field: RendererField<TName>;\n}) => React.ReactNode;\n\nconst ScrollOnFocus = observer(\n ({ field, children }: { field: IFieldVM; children: React.ReactNode }) => {\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (field.focusRequested && ref.current) {\n setTimeout(() => {\n ref.current?.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n }, 150);\n }\n field.clearFocusRequest();\n }, [field.focusRequested]);\n\n return <div ref={ref}>{children}</div>;\n }\n);\n\nexport function createFieldRenderer<TName extends string = string>(\n render: FieldRendererFn<TName>\n): React.ComponentType<{ field: IFieldVM }> {\n const Inner = observer(render as FieldRendererFn<string>) as unknown as React.ComponentType<{\n field: IFieldVM;\n }>;\n\n const Wrapper = observer(({ field }: { field: IFieldVM }) => (\n <ScrollOnFocus field={field}>\n <Inner field={field} />\n </ScrollOnFocus>\n ));\n\n return Wrapper as unknown as React.ComponentType<{ field: IFieldVM }>;\n}\n\nexport function createObjectFieldRenderer<TName extends string = string>(\n render: (props: { field: ObjectRendererField<TName> }) => React.ReactNode\n): React.ComponentType<{ field: IFieldVM }> {\n const Wrapped = (props: { field: IFieldVM }) => {\n if (props.field.type !== \"object\") {\n return null;\n }\n return (render as (p: { field: IFieldVM }) => React.ReactNode)(props);\n };\n return observer(Wrapped) as unknown as React.ComponentType<{ field: IFieldVM }>;\n}\n"],"names":["ScrollOnFocus","observer","field","children","ref","useRef","useEffect","setTimeout","createFieldRenderer","render","Inner","Wrapper","createObjectFieldRenderer","Wrapped","props"],"mappings":";;AAgBA,MAAMA,gBAAgBC,SAClB,CAAC,EAAEC,KAAK,EAAEC,QAAQ,EAAkD;IAChE,MAAMC,MAAMC,OAAuB;IAEnCC,UAAU;QACN,IAAIJ,MAAM,cAAc,IAAIE,IAAI,OAAO,EACnCG,WAAW;YACPH,IAAI,OAAO,EAAE,eAAe;gBAAE,UAAU;gBAAU,OAAO;YAAS;QACtE,GAAG;QAEPF,MAAM,iBAAiB;IAC3B,GAAG;QAACA,MAAM,cAAc;KAAC;IAEzB,OAAO,WAAP,GAAO,oBAAC;QAAI,KAAKE;OAAMD;AAC3B;AAGG,SAASK,oBACZC,MAA8B;IAE9B,MAAMC,QAAQT,SAASQ;IAIvB,MAAME,UAAUV,SAAS,CAAC,EAAEC,KAAK,EAAuB,iBACpD,oBAACF,eAAaA;YAAC,OAAOE;yBAClB,oBAACQ,OAAAA;YAAM,OAAOR;;IAItB,OAAOS;AACX;AAEO,SAASC,0BACZH,MAAyE;IAEzE,MAAMI,UAAU,CAACC;QACb,IAAIA,AAAqB,aAArBA,MAAM,KAAK,CAAC,IAAI,EAChB,OAAO;QAEX,OAAQL,OAAuDK;IACnE;IACA,OAAOb,SAASY;AACpB"}
1
+ {"version":3,"file":"features/formModel/createFieldRenderer.js","sources":["../../../src/features/formModel/createFieldRenderer.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from \"react\";\nimport { observer } from \"mobx-react-lite\";\nimport { makeDecoratable } from \"@webiny/react-composition\";\nimport type { IFieldVM, IObjectFieldVM, FieldRendererSettings } from \"./abstractions.js\";\n\n/**\n * Decoratable wrapper rendered around every leaf field's content. Features can decorate it to\n * inject per-field UI (e.g. a comment marker) keyed on `field.qualifiedName`, without forking\n * the form. By default it renders the field content unchanged.\n */\nexport const FormFieldWrapper = makeDecoratable(\n \"FormFieldWrapper\",\n ({ children }: { field: IFieldVM; children?: React.ReactNode }) => {\n return <>{children}</>;\n }\n);\n\ntype RendererField<TName extends string> = IFieldVM & {\n rendererSettings: FieldRendererSettings<TName>;\n};\n\ntype ObjectRendererField<TName extends string> = IObjectFieldVM & {\n rendererSettings: FieldRendererSettings<TName>;\n};\n\ntype FieldRendererFn<TName extends string> = (props: {\n field: RendererField<TName>;\n}) => React.ReactNode;\n\n// How long the field stays visually highlighted after focus lands, so the user's eye is drawn\n// to where \"jump to field\" (a comment locator, a form error) scrolled to.\nconst FOCUS_HIGHLIGHT_MS = 1800;\n\nconst ScrollOnFocus = observer(\n ({ field, children }: { field: IFieldVM; children: React.ReactNode }) => {\n const ref = useRef<HTMLDivElement>(null);\n const [highlighted, setHighlighted] = useState(false);\n const highlightTimer = useRef<number | null>(null);\n\n useEffect(() => {\n if (field.focusRequested && ref.current) {\n setTimeout(() => {\n ref.current?.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n }, 150);\n // Flash a highlight ring so it's obvious where focus landed. The timer is kept in a\n // ref (not tied to the effect cleanup) so clearing the focus request below — which\n // re-runs this effect — doesn't cut the highlight short.\n setHighlighted(true);\n if (highlightTimer.current) {\n window.clearTimeout(highlightTimer.current);\n }\n highlightTimer.current = window.setTimeout(\n () => setHighlighted(false),\n FOCUS_HIGHLIGHT_MS\n );\n }\n field.clearFocusRequest();\n }, [field.focusRequested]);\n\n useEffect(() => {\n return () => {\n if (highlightTimer.current) {\n window.clearTimeout(highlightTimer.current);\n }\n };\n }, []);\n\n return (\n <div\n ref={ref}\n data-field-path={field.qualifiedName}\n style={{\n // Padding gives the highlight ring/tint breathing room from the field content;\n // the matching negative margin keeps the field's layout position unchanged.\n padding: 6,\n margin: -6,\n borderRadius: 8,\n transition: \"box-shadow .35s ease, background-color .35s ease\",\n boxShadow: highlighted ? \"0 0 0 2px var(--color-primary)\" : undefined,\n backgroundColor: highlighted ? \"var(--color-primary-100)\" : undefined\n }}\n >\n <FormFieldWrapper field={field}>{children}</FormFieldWrapper>\n </div>\n );\n }\n);\n\nexport function createFieldRenderer<TName extends string = string>(\n render: FieldRendererFn<TName>\n): React.ComponentType<{ field: IFieldVM }> {\n const Inner = observer(render as FieldRendererFn<string>) as unknown as React.ComponentType<{\n field: IFieldVM;\n }>;\n\n const Wrapper = observer(({ field }: { field: IFieldVM }) => (\n <ScrollOnFocus field={field}>\n <Inner field={field} />\n </ScrollOnFocus>\n ));\n\n return Wrapper as unknown as React.ComponentType<{ field: IFieldVM }>;\n}\n\nexport function createObjectFieldRenderer<TName extends string = string>(\n render: (props: { field: ObjectRendererField<TName> }) => React.ReactNode\n): React.ComponentType<{ field: IFieldVM }> {\n const Wrapped = (props: { field: IFieldVM }) => {\n if (props.field.type !== \"object\") {\n return null;\n }\n return (render as (p: { field: IFieldVM }) => React.ReactNode)(props);\n };\n return observer(Wrapped) as unknown as React.ComponentType<{ field: IFieldVM }>;\n}\n"],"names":["FormFieldWrapper","makeDecoratable","children","FOCUS_HIGHLIGHT_MS","ScrollOnFocus","observer","field","ref","useRef","highlighted","setHighlighted","useState","highlightTimer","useEffect","setTimeout","window","undefined","createFieldRenderer","render","Inner","Wrapper","createObjectFieldRenderer","Wrapped","props"],"mappings":";;;AAUO,MAAMA,mBAAmBC,gBAC5B,oBACA,CAAC,EAAEC,QAAQ,EAAmD,GACnD,WAAP,GAAO,0CAAGA;AAkBlB,MAAMC,qBAAqB;AAE3B,MAAMC,gBAAgBC,SAClB,CAAC,EAAEC,KAAK,EAAEJ,QAAQ,EAAkD;IAChE,MAAMK,MAAMC,OAAuB;IACnC,MAAM,CAACC,aAAaC,eAAe,GAAGC,SAAS;IAC/C,MAAMC,iBAAiBJ,OAAsB;IAE7CK,UAAU;QACN,IAAIP,MAAM,cAAc,IAAIC,IAAI,OAAO,EAAE;YACrCO,WAAW;gBACPP,IAAI,OAAO,EAAE,eAAe;oBAAE,UAAU;oBAAU,OAAO;gBAAS;YACtE,GAAG;YAIHG,eAAe;YACf,IAAIE,eAAe,OAAO,EACtBG,OAAO,YAAY,CAACH,eAAe,OAAO;YAE9CA,eAAe,OAAO,GAAGG,OAAO,UAAU,CACtC,IAAML,eAAe,QACrBP;QAER;QACAG,MAAM,iBAAiB;IAC3B,GAAG;QAACA,MAAM,cAAc;KAAC;IAEzBO,UAAU,IACC;YACH,IAAID,eAAe,OAAO,EACtBG,OAAO,YAAY,CAACH,eAAe,OAAO;QAElD,GACD,EAAE;IAEL,OAAO,WAAP,GACI,oBAAC;QACG,KAAKL;QACL,mBAAiBD,MAAM,aAAa;QACpC,OAAO;YAGH,SAAS;YACT,QAAQ;YACR,cAAc;YACd,YAAY;YACZ,WAAWG,cAAc,mCAAmCO;YAC5D,iBAAiBP,cAAc,6BAA6BO;QAChE;qBAEA,oBAAChB,kBAAgBA;QAAC,OAAOM;OAAQJ;AAG7C;AAGG,SAASe,oBACZC,MAA8B;IAE9B,MAAMC,QAAQd,SAASa;IAIvB,MAAME,UAAUf,SAAS,CAAC,EAAEC,KAAK,EAAuB,iBACpD,oBAACF,eAAaA;YAAC,OAAOE;yBAClB,oBAACa,OAAAA;YAAM,OAAOb;;IAItB,OAAOc;AACX;AAEO,SAASC,0BACZH,MAAyE;IAEzE,MAAMI,UAAU,CAACC;QACb,IAAIA,AAAqB,aAArBA,MAAM,KAAK,CAAC,IAAI,EAChB,OAAO;QAEX,OAAQL,OAAuDK;IACnE;IACA,OAAOlB,SAASiB;AACpB"}
@@ -0,0 +1,12 @@
1
+ import type { IFieldVM } from "../../features/formModel/abstractions.js";
2
+ /**
3
+ * Reactively checks whether any field in `fields`, or (recursively) any child
4
+ * of a nested object field, currently has `focusRequested === true`.
5
+ *
6
+ * Reads the `focusRequested` observable on every visited field so that callers
7
+ * wrapped in a mobx `observer` re-render (and can force-open their accordion /
8
+ * dynamic-zone container) when a focus request lands anywhere in the subtree.
9
+ * This lets "jump to field" cascade open collapsed ancestors top-down, even
10
+ * for fields nested several levels deep inside repeatable/list objects.
11
+ */
12
+ export declare const hasSubtreeFocusRequest: (fields: IFieldVM[]) => boolean;
@@ -0,0 +1,15 @@
1
+ const hasSubtreeFocusRequest = (fields)=>{
2
+ for (const field of fields){
3
+ if (field.focusRequested) return true;
4
+ if ("object" === field.type) {
5
+ const objectField = field;
6
+ if (objectField.isList) {
7
+ for (const item of objectField.items)if (hasSubtreeFocusRequest(item.fields)) return true;
8
+ } else if (hasSubtreeFocusRequest(objectField.fields)) return true;
9
+ }
10
+ }
11
+ return false;
12
+ };
13
+ export { hasSubtreeFocusRequest };
14
+
15
+ //# sourceMappingURL=hasSubtreeFocusRequest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"features/formModel/hasSubtreeFocusRequest.js","sources":["../../../src/features/formModel/hasSubtreeFocusRequest.ts"],"sourcesContent":["import type { IFieldVM, IObjectFieldVM } from \"~/features/formModel/abstractions.js\";\n\n/**\n * Reactively checks whether any field in `fields`, or (recursively) any child\n * of a nested object field, currently has `focusRequested === true`.\n *\n * Reads the `focusRequested` observable on every visited field so that callers\n * wrapped in a mobx `observer` re-render (and can force-open their accordion /\n * dynamic-zone container) when a focus request lands anywhere in the subtree.\n * This lets \"jump to field\" cascade open collapsed ancestors top-down, even\n * for fields nested several levels deep inside repeatable/list objects.\n */\nexport const hasSubtreeFocusRequest = (fields: IFieldVM[]): boolean => {\n for (const field of fields) {\n // Read the observable first so this stays reactive even when a shallow\n // match short-circuits later fields.\n if (field.focusRequested) {\n return true;\n }\n\n if (field.type === \"object\") {\n const objectField = field as IObjectFieldVM;\n if (objectField.isList) {\n for (const item of objectField.items) {\n if (hasSubtreeFocusRequest(item.fields)) {\n return true;\n }\n }\n } else if (hasSubtreeFocusRequest(objectField.fields)) {\n return true;\n }\n }\n }\n\n return false;\n};\n"],"names":["hasSubtreeFocusRequest","fields","field","objectField","item"],"mappings":"AAYO,MAAMA,yBAAyB,CAACC;IACnC,KAAK,MAAMC,SAASD,OAAQ;QAGxB,IAAIC,MAAM,cAAc,EACpB,OAAO;QAGX,IAAIA,AAAe,aAAfA,MAAM,IAAI,EAAe;YACzB,MAAMC,cAAcD;YACpB,IAAIC,YAAY,MAAM,EAClB;gBAAA,KAAK,MAAMC,QAAQD,YAAY,KAAK,CAChC,IAAIH,uBAAuBI,KAAK,MAAM,GAClC,OAAO;YAEf,OACG,IAAIJ,uBAAuBG,YAAY,MAAM,GAChD,OAAO;QAEf;IACJ;IAEA,OAAO;AACX"}
@@ -15,6 +15,7 @@ export { TextFieldType, TextFieldBuilder, NumberFieldType, NumberFieldBuilder, B
15
15
  export { ObjectField, isObjectField } from "./ObjectField.js";
16
16
  export { ConditionRuleEvaluator } from "./ConditionRuleEvaluator.js";
17
17
  export { createFieldRenderer, createObjectFieldRenderer } from "./createFieldRenderer.js";
18
+ export { hasSubtreeFocusRequest } from "./hasSubtreeFocusRequest.js";
18
19
  export { FormErrors } from "./FormErrors.js";
19
20
  export { PresenterErrors } from "./PresenterErrors.js";
20
21
  export { FormView, LayoutNodeRenderer, useFormViewRenderers } from "./FormView.js";
@@ -14,6 +14,7 @@ export { BooleanFieldBuilder, BooleanFieldType, DateTimeFieldBuilder, DateTimeFi
14
14
  export { ObjectField, isObjectField } from "./ObjectField.js";
15
15
  export { ConditionRuleEvaluator } from "./ConditionRuleEvaluator.js";
16
16
  export { createFieldRenderer, createObjectFieldRenderer } from "./createFieldRenderer.js";
17
+ export { hasSubtreeFocusRequest } from "./hasSubtreeFocusRequest.js";
17
18
  export { FormErrors } from "./FormErrors.js";
18
19
  export { PresenterErrors } from "./PresenterErrors.js";
19
20
  export { FormView, LayoutNodeRenderer, useFormViewRenderers } from "./FormView.js";
@@ -1,5 +1,6 @@
1
1
  import "../../base/Base/FieldRenderers/InputRenderer.js";
2
2
  import "../../base/Base/FieldRenderers/SelectRenderer.js";
3
+ import "../../base/Base/FieldRenderers/AutoCompleteRenderer.js";
3
4
  import "../../base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js";
4
5
  import "../../base/Base/FieldRenderers/ObjectRenderer/ObjectAccordionMultipleRenderer.js";
5
6
  import "../../base/Base/FieldRenderers/ObjectRenderer/DynamicZoneRenderer.js";
@@ -1,5 +1,6 @@
1
1
  import "../../base/Base/FieldRenderers/InputRenderer.js";
2
2
  import "../../base/Base/FieldRenderers/SelectRenderer.js";
3
+ import "../../base/Base/FieldRenderers/AutoCompleteRenderer.js";
3
4
  import "../../base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js";
4
5
  import "../../base/Base/FieldRenderers/ObjectRenderer/ObjectAccordionMultipleRenderer.js";
5
6
  import "../../base/Base/FieldRenderers/ObjectRenderer/DynamicZoneRenderer.js";
@@ -22,6 +22,5 @@ export declare class ReactLicense implements ILicense {
22
22
  canUseAiEntryGeneration(): boolean;
23
23
  canUseAiEntryComparison(): boolean;
24
24
  canUseAiEntryTranslation(): boolean;
25
- canUseAbTesting(): boolean;
26
25
  toDto(): DecryptedWcpProjectLicense | null;
27
26
  }
@@ -59,9 +59,6 @@ class ReactLicense {
59
59
  canUseAiEntryTranslation() {
60
60
  return this.license.canUseAiEntryTranslation();
61
61
  }
62
- canUseAbTesting() {
63
- return this.license.canUseAbTesting();
64
- }
65
62
  toDto() {
66
63
  return this.license.toDto();
67
64
  }
@@ -1 +1 @@
1
- {"version":3,"file":"features/wcp/ReactLicense.js","sources":["../../../src/features/wcp/ReactLicense.ts"],"sourcesContent":["import type { DecryptedWcpProjectLicense, ILicense, WcpProject } from \"@webiny/wcp/types.js\";\nimport type { WCP_FEATURE_LABEL } from \"@webiny/wcp\";\n\nexport class ReactLicense implements ILicense {\n private readonly license: ILicense;\n\n constructor(license: ILicense) {\n this.license = license;\n }\n\n getProject(): WcpProject | null {\n return this.license.getProject();\n }\n\n canUseAacl(): boolean {\n return this.license.canUseAacl();\n }\n\n canUseAuditLogs(): boolean {\n return this.license.canUseAuditLogs();\n }\n\n canUseFeature(featureId: keyof typeof WCP_FEATURE_LABEL): boolean {\n return this.license.canUseFeature(featureId);\n }\n\n canUseFileManagerThreatDetection(): boolean {\n return this.license.canUseFileManagerThreatDetection();\n }\n\n canUseFolderLevelPermissions(): boolean {\n return this.license.canUseFolderLevelPermissions();\n }\n\n canUseHcmsFieldPermissions(): boolean {\n return this.license.canUseHcmsFieldPermissions();\n }\n\n canUsePrivateFiles(): boolean {\n return this.license.canUsePrivateFiles();\n }\n\n canUseRecordLocking(): boolean {\n return this.license.canUseRecordLocking();\n }\n\n canUseTeams(): boolean {\n return this.license.canUseTeams();\n }\n\n getRawLicense(): DecryptedWcpProjectLicense | null {\n return this.license.getRawLicense();\n }\n\n public canUseWorkflows(): boolean {\n return this.license.canUseWorkflows();\n }\n\n canUseAiImageEnrichment(): boolean {\n return this.license.canUseAiImageEnrichment();\n }\n\n canUseAiPageGeneration(): boolean {\n return this.license.canUseAiPageGeneration();\n }\n\n canUseAiPageTranslation(): boolean {\n return this.license.canUseAiPageTranslation();\n }\n\n canUseAiLexicalGeneration(): boolean {\n return this.license.canUseAiLexicalGeneration();\n }\n\n canUseAiEntryGeneration(): boolean {\n return this.license.canUseAiEntryGeneration();\n }\n\n canUseAiEntryComparison(): boolean {\n return this.license.canUseAiEntryComparison();\n }\n\n canUseAiEntryTranslation(): boolean {\n return this.license.canUseAiEntryTranslation();\n }\n\n canUseAbTesting(): boolean {\n return this.license.canUseAbTesting();\n }\n\n toDto(): DecryptedWcpProjectLicense | null {\n return this.license.toDto();\n }\n}\n"],"names":["ReactLicense","license","featureId"],"mappings":"AAGO,MAAMA;IAGT,YAAYC,OAAiB,CAAE;QAC3B,IAAI,CAAC,OAAO,GAAGA;IACnB;IAEA,aAAgC;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU;IAClC;IAEA,aAAsB;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU;IAClC;IAEA,kBAA2B;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe;IACvC;IAEA,cAAcC,SAAyC,EAAW;QAC9D,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAACA;IACtC;IAEA,mCAA4C;QACxC,OAAO,IAAI,CAAC,OAAO,CAAC,gCAAgC;IACxD;IAEA,+BAAwC;QACpC,OAAO,IAAI,CAAC,OAAO,CAAC,4BAA4B;IACpD;IAEA,6BAAsC;QAClC,OAAO,IAAI,CAAC,OAAO,CAAC,0BAA0B;IAClD;IAEA,qBAA8B;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB;IAC1C;IAEA,sBAA+B;QAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,mBAAmB;IAC3C;IAEA,cAAuB;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW;IACnC;IAEA,gBAAmD;QAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa;IACrC;IAEO,kBAA2B;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe;IACvC;IAEA,0BAAmC;QAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,uBAAuB;IAC/C;IAEA,yBAAkC;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,sBAAsB;IAC9C;IAEA,0BAAmC;QAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,uBAAuB;IAC/C;IAEA,4BAAqC;QACjC,OAAO,IAAI,CAAC,OAAO,CAAC,yBAAyB;IACjD;IAEA,0BAAmC;QAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,uBAAuB;IAC/C;IAEA,0BAAmC;QAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,uBAAuB;IAC/C;IAEA,2BAAoC;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,wBAAwB;IAChD;IAEA,kBAA2B;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe;IACvC;IAEA,QAA2C;QACvC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK;IAC7B;AACJ"}
1
+ {"version":3,"file":"features/wcp/ReactLicense.js","sources":["../../../src/features/wcp/ReactLicense.ts"],"sourcesContent":["import type { DecryptedWcpProjectLicense, ILicense, WcpProject } from \"@webiny/wcp/types.js\";\nimport type { WCP_FEATURE_LABEL } from \"@webiny/wcp\";\n\nexport class ReactLicense implements ILicense {\n private readonly license: ILicense;\n\n constructor(license: ILicense) {\n this.license = license;\n }\n\n getProject(): WcpProject | null {\n return this.license.getProject();\n }\n\n canUseAacl(): boolean {\n return this.license.canUseAacl();\n }\n\n canUseAuditLogs(): boolean {\n return this.license.canUseAuditLogs();\n }\n\n canUseFeature(featureId: keyof typeof WCP_FEATURE_LABEL): boolean {\n return this.license.canUseFeature(featureId);\n }\n\n canUseFileManagerThreatDetection(): boolean {\n return this.license.canUseFileManagerThreatDetection();\n }\n\n canUseFolderLevelPermissions(): boolean {\n return this.license.canUseFolderLevelPermissions();\n }\n\n canUseHcmsFieldPermissions(): boolean {\n return this.license.canUseHcmsFieldPermissions();\n }\n\n canUsePrivateFiles(): boolean {\n return this.license.canUsePrivateFiles();\n }\n\n canUseRecordLocking(): boolean {\n return this.license.canUseRecordLocking();\n }\n\n canUseTeams(): boolean {\n return this.license.canUseTeams();\n }\n\n getRawLicense(): DecryptedWcpProjectLicense | null {\n return this.license.getRawLicense();\n }\n\n public canUseWorkflows(): boolean {\n return this.license.canUseWorkflows();\n }\n\n canUseAiImageEnrichment(): boolean {\n return this.license.canUseAiImageEnrichment();\n }\n\n canUseAiPageGeneration(): boolean {\n return this.license.canUseAiPageGeneration();\n }\n\n canUseAiPageTranslation(): boolean {\n return this.license.canUseAiPageTranslation();\n }\n\n canUseAiLexicalGeneration(): boolean {\n return this.license.canUseAiLexicalGeneration();\n }\n\n canUseAiEntryGeneration(): boolean {\n return this.license.canUseAiEntryGeneration();\n }\n\n canUseAiEntryComparison(): boolean {\n return this.license.canUseAiEntryComparison();\n }\n\n canUseAiEntryTranslation(): boolean {\n return this.license.canUseAiEntryTranslation();\n }\n\n toDto(): DecryptedWcpProjectLicense | null {\n return this.license.toDto();\n }\n}\n"],"names":["ReactLicense","license","featureId"],"mappings":"AAGO,MAAMA;IAGT,YAAYC,OAAiB,CAAE;QAC3B,IAAI,CAAC,OAAO,GAAGA;IACnB;IAEA,aAAgC;QAC5B,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU;IAClC;IAEA,aAAsB;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU;IAClC;IAEA,kBAA2B;QACvB,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe;IACvC;IAEA,cAAcC,SAAyC,EAAW;QAC9D,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAACA;IACtC;IAEA,mCAA4C;QACxC,OAAO,IAAI,CAAC,OAAO,CAAC,gCAAgC;IACxD;IAEA,+BAAwC;QACpC,OAAO,IAAI,CAAC,OAAO,CAAC,4BAA4B;IACpD;IAEA,6BAAsC;QAClC,OAAO,IAAI,CAAC,OAAO,CAAC,0BAA0B;IAClD;IAEA,qBAA8B;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,kBAAkB;IAC1C;IAEA,sBAA+B;QAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,mBAAmB;IAC3C;IAEA,cAAuB;QACnB,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW;IACnC;IAEA,gBAAmD;QAC/C,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa;IACrC;IAEO,kBAA2B;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe;IACvC;IAEA,0BAAmC;QAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,uBAAuB;IAC/C;IAEA,yBAAkC;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,sBAAsB;IAC9C;IAEA,0BAAmC;QAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,uBAAuB;IAC/C;IAEA,4BAAqC;QACjC,OAAO,IAAI,CAAC,OAAO,CAAC,yBAAyB;IACjD;IAEA,0BAAmC;QAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,uBAAuB;IAC/C;IAEA,0BAAmC;QAC/B,OAAO,IAAI,CAAC,OAAO,CAAC,uBAAuB;IAC/C;IAEA,2BAAoC;QAChC,OAAO,IAAI,CAAC,OAAO,CAAC,wBAAwB;IAChD;IAEA,QAA2C;QACvC,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK;IAC7B;AACJ"}
@@ -39,9 +39,6 @@ const GET_WCP_PROJECT = `
39
39
  enabled
40
40
  options
41
41
  }
42
- abTesting {
43
- enabled
44
- }
45
42
  }
46
43
  }
47
44
  }
@@ -1 +1 @@
1
- {"version":3,"file":"features/wcp/WcpGateway.js","sources":["../../../src/features/wcp/WcpGateway.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/di\";\nimport { WcpGateway as WcpGatewayAbstraction } from \"./abstractions.js\";\nimport { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient/index.js\";\nimport type { GetWcpProjectResponse, WcpProjectData } from \"./types.js\";\n\nconst GET_WCP_PROJECT = /* GraphQL */ `\n query GetWcpProject {\n wcp {\n getProject {\n data {\n orgId\n projectId\n package {\n features {\n seats {\n enabled\n options\n }\n multiTenancy {\n enabled\n options\n }\n advancedPublishingWorkflow {\n enabled\n }\n advancedAccessControlLayer {\n enabled\n options\n }\n auditLogs {\n enabled\n }\n recordLocking {\n enabled\n }\n fileManager {\n enabled\n options\n }\n aiPowerups {\n enabled\n options\n }\n abTesting {\n enabled\n }\n }\n }\n }\n error {\n message\n code\n data\n }\n }\n }\n }\n`;\n\nclass WcpGraphQLGateway implements WcpGatewayAbstraction.Interface {\n constructor(private client: MainGraphQLClient.Interface) {}\n\n async fetchProject(): Promise<WcpProjectData | null> {\n const response = await this.client.execute<GetWcpProjectResponse>({\n query: GET_WCP_PROJECT,\n headers: {\n \"x-tenant\": \"root\"\n }\n });\n\n if (response.wcp.getProject.error) {\n throw new Error(response.wcp.getProject.error.message);\n }\n\n return response.wcp.getProject.data;\n }\n}\n\nexport const WcpGateway = createImplementation({\n abstraction: WcpGatewayAbstraction,\n implementation: WcpGraphQLGateway,\n dependencies: [MainGraphQLClient]\n});\n"],"names":["GET_WCP_PROJECT","WcpGraphQLGateway","client","response","Error","WcpGateway","createImplementation","WcpGatewayAbstraction","MainGraphQLClient"],"mappings":";;;AAKA,MAAMA,kBAAgC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDvC,CAAC;AAED,MAAMC;IACF,YAAoBC,MAAmC,CAAE;aAArCA,MAAM,GAANA;IAAsC;IAE1D,MAAM,eAA+C;QACjD,MAAMC,WAAW,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAwB;YAC9D,OAAOH;YACP,SAAS;gBACL,YAAY;YAChB;QACJ;QAEA,IAAIG,SAAS,GAAG,CAAC,UAAU,CAAC,KAAK,EAC7B,MAAM,IAAIC,MAAMD,SAAS,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO;QAGzD,OAAOA,SAAS,GAAG,CAAC,UAAU,CAAC,IAAI;IACvC;AACJ;AAEO,MAAME,wBAAaC,qBAAqB;IAC3C,aAAaC;IACb,gBAAgBN;IAChB,cAAc;QAACO;KAAkB;AACrC"}
1
+ {"version":3,"file":"features/wcp/WcpGateway.js","sources":["../../../src/features/wcp/WcpGateway.ts"],"sourcesContent":["import { createImplementation } from \"@webiny/di\";\nimport { WcpGateway as WcpGatewayAbstraction } from \"./abstractions.js\";\nimport { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient/index.js\";\nimport type { GetWcpProjectResponse, WcpProjectData } from \"./types.js\";\n\nconst GET_WCP_PROJECT = /* GraphQL */ `\n query GetWcpProject {\n wcp {\n getProject {\n data {\n orgId\n projectId\n package {\n features {\n seats {\n enabled\n options\n }\n multiTenancy {\n enabled\n options\n }\n advancedPublishingWorkflow {\n enabled\n }\n advancedAccessControlLayer {\n enabled\n options\n }\n auditLogs {\n enabled\n }\n recordLocking {\n enabled\n }\n fileManager {\n enabled\n options\n }\n aiPowerups {\n enabled\n options\n }\n }\n }\n }\n error {\n message\n code\n data\n }\n }\n }\n }\n`;\n\nclass WcpGraphQLGateway implements WcpGatewayAbstraction.Interface {\n constructor(private client: MainGraphQLClient.Interface) {}\n\n async fetchProject(): Promise<WcpProjectData | null> {\n const response = await this.client.execute<GetWcpProjectResponse>({\n query: GET_WCP_PROJECT,\n headers: {\n \"x-tenant\": \"root\"\n }\n });\n\n if (response.wcp.getProject.error) {\n throw new Error(response.wcp.getProject.error.message);\n }\n\n return response.wcp.getProject.data;\n }\n}\n\nexport const WcpGateway = createImplementation({\n abstraction: WcpGatewayAbstraction,\n implementation: WcpGraphQLGateway,\n dependencies: [MainGraphQLClient]\n});\n"],"names":["GET_WCP_PROJECT","WcpGraphQLGateway","client","response","Error","WcpGateway","createImplementation","WcpGatewayAbstraction","MainGraphQLClient"],"mappings":";;;AAKA,MAAMA,kBAAgC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDvC,CAAC;AAED,MAAMC;IACF,YAAoBC,MAAmC,CAAE;aAArCA,MAAM,GAANA;IAAsC;IAE1D,MAAM,eAA+C;QACjD,MAAMC,WAAW,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAwB;YAC9D,OAAOH;YACP,SAAS;gBACL,YAAY;YAChB;QACJ;QAEA,IAAIG,SAAS,GAAG,CAAC,UAAU,CAAC,KAAK,EAC7B,MAAM,IAAIC,MAAMD,SAAS,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO;QAGzD,OAAOA,SAAS,GAAG,CAAC,UAAU,CAAC,IAAI;IACvC;AACJ;AAEO,MAAME,wBAAaC,qBAAqB;IAC3C,aAAaC;IACb,gBAAgBN;IAChB,cAAc;QAACO;KAAkB;AACrC"}
package/hooks/index.d.ts CHANGED
@@ -3,6 +3,9 @@ export * from "./useConfirmationDialog.js";
3
3
  export * from "./useDialog.js";
4
4
  export * from "./useOpenDialog.js";
5
5
  export * from "../components/Dialogs/useDialogs.js";
6
+ export * from "./useDrawer.js";
7
+ export * from "./useOpenDrawer.js";
8
+ export * from "../components/Drawers/useDrawers.js";
6
9
  export * from "./useSnackbar.js";
7
10
  export * from "./useKeyHandler.js";
8
11
  export * from "./useShiftKey.js";
package/hooks/index.js CHANGED
@@ -3,6 +3,9 @@ export * from "./useConfirmationDialog.js";
3
3
  export * from "./useDialog.js";
4
4
  export * from "./useOpenDialog.js";
5
5
  export * from "../components/Dialogs/useDialogs.js";
6
+ export * from "./useDrawer.js";
7
+ export * from "./useOpenDrawer.js";
8
+ export * from "../components/Drawers/useDrawers.js";
6
9
  export * from "./useSnackbar.js";
7
10
  export * from "./useKeyHandler.js";
8
11
  export * from "./useShiftKey.js";
@@ -0,0 +1,9 @@
1
+ import type { z } from "zod";
2
+ export declare function useDrawer<T extends z.ZodTypeAny>(schema: T): {
3
+ params: z.infer<T>;
4
+ closeDrawer: () => void;
5
+ };
6
+ export declare function useDrawer(): {
7
+ params: Record<string, unknown>;
8
+ closeDrawer: () => void;
9
+ };
@@ -0,0 +1,19 @@
1
+ import { useMemo } from "react";
2
+ import { useDrawerParamsContext } from "../components/Drawers/DrawerParamsContext.js";
3
+ function useDrawer(schema) {
4
+ const { params: rawParams, closeDrawer } = useDrawerParamsContext();
5
+ const params = useMemo(()=>{
6
+ if (schema) return schema.parse(rawParams);
7
+ return rawParams;
8
+ }, [
9
+ rawParams,
10
+ schema
11
+ ]);
12
+ return {
13
+ params,
14
+ closeDrawer
15
+ };
16
+ }
17
+ export { useDrawer };
18
+
19
+ //# sourceMappingURL=useDrawer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks/useDrawer.js","sources":["../../src/hooks/useDrawer.ts"],"sourcesContent":["import { useMemo } from \"react\";\nimport type { z } from \"zod\";\nimport { useDrawerParamsContext } from \"~/components/Drawers/DrawerParamsContext.js\";\n\nexport function useDrawer<T extends z.ZodTypeAny>(\n schema: T\n): { params: z.infer<T>; closeDrawer: () => void };\nexport function useDrawer(): { params: Record<string, unknown>; closeDrawer: () => void };\nexport function useDrawer(schema?: z.ZodTypeAny) {\n const { params: rawParams, closeDrawer } = useDrawerParamsContext();\n\n const params = useMemo(() => {\n if (schema) {\n return schema.parse(rawParams);\n }\n return rawParams;\n }, [rawParams, schema]);\n\n return { params, closeDrawer };\n}\n"],"names":["useDrawer","schema","rawParams","closeDrawer","useDrawerParamsContext","params","useMemo"],"mappings":";;AAQO,SAASA,UAAUC,MAAqB;IAC3C,MAAM,EAAE,QAAQC,SAAS,EAAEC,WAAW,EAAE,GAAGC;IAE3C,MAAMC,SAASC,QAAQ;QACnB,IAAIL,QACA,OAAOA,OAAO,KAAK,CAACC;QAExB,OAAOA;IACX,GAAG;QAACA;QAAWD;KAAO;IAEtB,OAAO;QAAEI;QAAQF;IAAY;AACjC"}
@@ -0,0 +1,7 @@
1
+ import type { z } from "zod";
2
+ export declare function useOpenDrawer<T extends z.ZodTypeAny>(schema: T): {
3
+ openDrawer: (name: string, params: z.infer<T>) => void;
4
+ };
5
+ export declare function useOpenDrawer(): {
6
+ openDrawer: (name: string, params?: Record<string, unknown>) => void;
7
+ };
@@ -0,0 +1,18 @@
1
+ import { useCallback } from "react";
2
+ import { useDrawers } from "../components/Drawers/useDrawers.js";
3
+ function useOpenDrawer(schema) {
4
+ const { openNamedDrawer } = useDrawers();
5
+ const openDrawer = useCallback((name, params = {})=>{
6
+ if (schema) schema.parse(params);
7
+ openNamedDrawer(name, params);
8
+ }, [
9
+ openNamedDrawer,
10
+ schema
11
+ ]);
12
+ return {
13
+ openDrawer
14
+ };
15
+ }
16
+ export { useOpenDrawer };
17
+
18
+ //# sourceMappingURL=useOpenDrawer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks/useOpenDrawer.js","sources":["../../src/hooks/useOpenDrawer.ts"],"sourcesContent":["import { useCallback } from \"react\";\nimport type { z } from \"zod\";\nimport { useDrawers } from \"~/components/Drawers/useDrawers.js\";\n\nexport function useOpenDrawer<T extends z.ZodTypeAny>(\n schema: T\n): { openDrawer: (name: string, params: z.infer<T>) => void };\nexport function useOpenDrawer(): {\n openDrawer: (name: string, params?: Record<string, unknown>) => void;\n};\nexport function useOpenDrawer(schema?: z.ZodTypeAny) {\n const { openNamedDrawer } = useDrawers();\n\n const openDrawer = useCallback(\n (name: string, params: Record<string, unknown> = {}) => {\n if (schema) {\n schema.parse(params);\n }\n openNamedDrawer(name, params);\n },\n [openNamedDrawer, schema]\n );\n\n return { openDrawer };\n}\n"],"names":["useOpenDrawer","schema","openNamedDrawer","useDrawers","openDrawer","useCallback","name","params"],"mappings":";;AAUO,SAASA,cAAcC,MAAqB;IAC/C,MAAM,EAAEC,eAAe,EAAE,GAAGC;IAE5B,MAAMC,aAAaC,YACf,CAACC,MAAcC,SAAkC,CAAC,CAAC;QAC/C,IAAIN,QACAA,OAAO,KAAK,CAACM;QAEjBL,gBAAgBI,MAAMC;IAC1B,GACA;QAACL;QAAiBD;KAAO;IAG7B,OAAO;QAAEG;IAAW;AACxB"}
package/index.d.ts CHANGED
@@ -35,6 +35,11 @@ export { BuildParamsFeature } from "./features/buildParams/feature.js";
35
35
  export { ToolsFeature } from "./features/tools/feature.js";
36
36
  export { Tool, ToolRegistry, ToolPipelineRunner } from "./features/tools/abstractions.js";
37
37
  export type { ITool, IToolRegistry, IToolPipelineRunner } from "./features/tools/abstractions.js";
38
+ export { DateFormatter } from "./features/dateFormatter/abstractions.js";
39
+ export type { IDateFormatter, FormattableDate } from "./features/dateFormatter/abstractions.js";
40
+ export { DateFormatterFeature } from "./features/dateFormatter/feature.js";
41
+ export { useDateFormatter } from "./features/dateFormatter/useDateFormatter.js";
42
+ export { formatUtcOffset } from "./features/dateFormatter/formatUtcOffset.js";
38
43
  export * from "./hooks/index.js";
39
44
  export { useWcp } from "./presentation/wcp/useWcp.js";
40
45
  export { useTenantContext } from "./presentation/tenancy/useTenantContext.js";
package/index.js CHANGED
@@ -16,6 +16,10 @@ import "./base/Base/FieldRenderers/PassthroughRenderer.js";
16
16
  import "./base/Base/FieldRenderers/HiddenRenderer.js";
17
17
  import "./base/Base/FieldRenderers/DateTimeInputsRenderer.js";
18
18
  import "./base/Base/FieldRenderers/DateTimeRenderer.js";
19
+ import "./base/Base/FieldRenderers/CheckboxesRenderer.js";
20
+ import "./base/Base/FieldRenderers/RadioButtonsRenderer.js";
21
+ import "./base/Base/FieldRenderers/TagsRenderer.js";
22
+ import "./base/Base/FieldRenderers/TextareasRenderer.js";
19
23
  import "./features/formModel/renderers.js";
20
24
  import "./features/formModel/fieldTypes/TextFieldType.js";
21
25
  import "./features/formModel/fieldTypes/NumberFieldType.js";
@@ -25,18 +29,14 @@ import "./features/formModel/fieldTypes/FileFieldType.js";
25
29
  import "./features/formModel/fieldTypes/FileUrlFieldType.js";
26
30
  import "./features/formModel/fieldTypes/ObjectFieldType.js";
27
31
  import "./features/formModel/fieldTypes/LexicalFieldType.js";
28
- import "./base/Base/FieldRenderers/CheckboxesRenderer.js";
29
- import "./base/Base/FieldRenderers/RadioButtonsRenderer.js";
30
- import "./base/Base/FieldRenderers/TagsRenderer.js";
31
- import "./base/Base/FieldRenderers/TextareasRenderer.js";
32
32
  import "./base/Base/FieldRenderers/TextInputsRenderer.js";
33
33
  import "./base/Base/FieldRenderers/NumberInputsRenderer.js";
34
+ import "./base/Base/FieldRenderers/NumberInputRenderer.js";
35
+ import "./base/Base/FieldRenderers/SwitchRenderer.js";
36
+ import "./base/Base/FieldRenderers/TextareaRenderer.js";
37
+ import "./base/Base/FieldRenderers/MultiSelectRenderer.js";
34
38
  import "./base/Base/FieldRenderers/InputRenderer.js";
35
39
  import "./base/Base/FieldRenderers/SelectRenderer.js";
36
- import "./base/Base/FieldRenderers/MultiSelectRenderer.js";
37
- import "./base/Base/FieldRenderers/TextareaRenderer.js";
38
- import "./base/Base/FieldRenderers/SwitchRenderer.js";
39
- import "./base/Base/FieldRenderers/NumberInputRenderer.js";
40
40
  export * from "@webiny/app";
41
41
  export * from "./base/ui/Tags.js";
42
42
  export * from "./base/ui/Layout.js";
@@ -66,6 +66,10 @@ export { SystemInstallerProvider } from "./presentation/installation/components/
66
66
  export { BuildParamsFeature } from "./features/buildParams/feature.js";
67
67
  export { ToolsFeature } from "./features/tools/feature.js";
68
68
  export { Tool, ToolPipelineRunner, ToolRegistry } from "./features/tools/abstractions.js";
69
+ export { DateFormatter } from "./features/dateFormatter/abstractions.js";
70
+ export { DateFormatterFeature } from "./features/dateFormatter/feature.js";
71
+ export { useDateFormatter } from "./features/dateFormatter/useDateFormatter.js";
72
+ export { formatUtcOffset } from "./features/dateFormatter/formatUtcOffset.js";
69
73
  export { useWcp } from "./presentation/wcp/useWcp.js";
70
74
  export { useTenantContext } from "./presentation/tenancy/useTenantContext.js";
71
75
  export { useIdentity } from "./presentation/security/hooks/useIdentity.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/app-admin",
3
- "version": "0.0.0-unstable.9f53ea597d",
3
+ "version": "0.0.0-unstable.a4f3e4ea8b",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./index.js",
@@ -26,24 +26,24 @@
26
26
  "@iconify/json": "2.2.503",
27
27
  "@lexical/utils": "0.48.0",
28
28
  "@types/react": "18.3.31",
29
- "@webiny/admin-ui": "0.0.0-unstable.9f53ea597d",
30
- "@webiny/app": "0.0.0-unstable.9f53ea597d",
29
+ "@webiny/admin-ui": "0.0.0-unstable.a4f3e4ea8b",
30
+ "@webiny/app": "0.0.0-unstable.a4f3e4ea8b",
31
31
  "@webiny/di": "1.0.2",
32
- "@webiny/feature": "0.0.0-unstable.9f53ea597d",
33
- "@webiny/form": "0.0.0-unstable.9f53ea597d",
34
- "@webiny/icons": "0.0.0-unstable.9f53ea597d",
35
- "@webiny/lexical-converter": "0.0.0-unstable.9f53ea597d",
36
- "@webiny/lexical-editor": "0.0.0-unstable.9f53ea597d",
37
- "@webiny/lexical-nodes": "0.0.0-unstable.9f53ea597d",
38
- "@webiny/lexical-theme": "0.0.0-unstable.9f53ea597d",
39
- "@webiny/plugins": "0.0.0-unstable.9f53ea597d",
40
- "@webiny/react-composition": "0.0.0-unstable.9f53ea597d",
41
- "@webiny/react-properties": "0.0.0-unstable.9f53ea597d",
42
- "@webiny/sdk": "0.0.0-unstable.9f53ea597d",
43
- "@webiny/telemetry": "0.0.0-unstable.9f53ea597d",
44
- "@webiny/utils": "0.0.0-unstable.9f53ea597d",
45
- "@webiny/validation": "0.0.0-unstable.9f53ea597d",
46
- "@webiny/wcp": "0.0.0-unstable.9f53ea597d",
32
+ "@webiny/feature": "0.0.0-unstable.a4f3e4ea8b",
33
+ "@webiny/form": "0.0.0-unstable.a4f3e4ea8b",
34
+ "@webiny/icons": "0.0.0-unstable.a4f3e4ea8b",
35
+ "@webiny/lexical-converter": "0.0.0-unstable.a4f3e4ea8b",
36
+ "@webiny/lexical-editor": "0.0.0-unstable.a4f3e4ea8b",
37
+ "@webiny/lexical-nodes": "0.0.0-unstable.a4f3e4ea8b",
38
+ "@webiny/lexical-theme": "0.0.0-unstable.a4f3e4ea8b",
39
+ "@webiny/plugins": "0.0.0-unstable.a4f3e4ea8b",
40
+ "@webiny/react-composition": "0.0.0-unstable.a4f3e4ea8b",
41
+ "@webiny/react-properties": "0.0.0-unstable.a4f3e4ea8b",
42
+ "@webiny/sdk": "0.0.0-unstable.a4f3e4ea8b",
43
+ "@webiny/telemetry": "0.0.0-unstable.a4f3e4ea8b",
44
+ "@webiny/utils": "0.0.0-unstable.a4f3e4ea8b",
45
+ "@webiny/validation": "0.0.0-unstable.a4f3e4ea8b",
46
+ "@webiny/wcp": "0.0.0-unstable.a4f3e4ea8b",
47
47
  "apollo-cache": "1.3.5",
48
48
  "apollo-client": "2.6.10",
49
49
  "apollo-link": "1.2.14",
@@ -83,7 +83,7 @@
83
83
  "@types/react-transition-group": "4.4.12",
84
84
  "@types/store": "2.0.5",
85
85
  "@types/tinycolor2": "1.4.6",
86
- "@webiny/build-tools": "0.0.0-unstable.9f53ea597d",
86
+ "@webiny/build-tools": "0.0.0-unstable.a4f3e4ea8b",
87
87
  "rimraf": "6.1.3",
88
88
  "typescript": "7.0.2",
89
89
  "vitest": "4.1.10"