@mittwald/flow-react-components 0.2.0-alpha.680 → 0.2.0-alpha.681
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/assets/doc-properties.json +1605 -1597
- package/dist/js/_virtual/_.locale.json@4119db69ca94e24d796b8e08482bc927.mjs +14 -0
- package/dist/js/_virtual/_.locale.json@4119db69ca94e24d796b8e08482bc927.mjs.map +1 -0
- package/dist/js/components/src/components/Action/Action.mjs +1 -1
- package/dist/js/components/src/components/Action/Action.mjs.map +1 -1
- package/dist/js/components/src/components/Action/models/getExecutionFunction.mjs +1 -1
- package/dist/js/components/src/components/Action/models/getExecutionFunction.mjs.map +1 -1
- package/dist/js/components/src/components/Autocomplete/Autocomplete.mjs +2 -2
- package/dist/js/components/src/components/Autocomplete/Autocomplete.mjs.map +1 -1
- package/dist/js/components/src/components/ComboBox/ComboBox.mjs +1 -1
- package/dist/js/components/src/components/ContextMenu/ContextMenu.mjs +1 -1
- package/dist/js/components/src/components/ContextualHelp/ContextualHelp.mjs +1 -1
- package/dist/js/components/src/components/DatePicker/DatePicker.mjs +1 -1
- package/dist/js/components/src/components/DateRangePicker/DateRangePicker.mjs +1 -1
- package/dist/js/components/src/components/LightBox/LightBox.mjs +2 -2
- package/dist/js/components/src/components/LightBox/LightBox.mjs.map +1 -1
- package/dist/js/components/src/components/List/components/Header/components/AllFiltersModal/AllFiltersModal.mjs +1 -1
- package/dist/js/components/src/components/Modal/Modal.mjs +12 -4
- package/dist/js/components/src/components/Modal/Modal.mjs.map +1 -1
- package/dist/js/components/src/components/Modal/components/ConfirmUnsavedChangesModal/ConfirmUnsavedChangesModal.mjs +40 -0
- package/dist/js/components/src/components/Modal/components/ConfirmUnsavedChangesModal/ConfirmUnsavedChangesModal.mjs.map +1 -0
- package/dist/js/components/src/components/Overlay/Overlay.mjs +5 -9
- package/dist/js/components/src/components/Overlay/Overlay.mjs.map +1 -1
- package/dist/js/components/src/components/Popover/Popover.mjs +1 -1
- package/dist/js/components/src/components/Select/Select.mjs +1 -1
- package/dist/js/components/src/integrations/react-hook-form/components/Form/Form.mjs +33 -21
- package/dist/js/components/src/integrations/react-hook-form/components/Form/Form.mjs.map +1 -1
- package/dist/js/components/src/lib/controller/overlay/OverlayController.mjs +56 -37
- package/dist/js/components/src/lib/controller/overlay/OverlayController.mjs.map +1 -1
- package/dist/js/components/src/lib/controller/overlay/useCloseOverlayConfirmationController.mjs +34 -0
- package/dist/js/components/src/lib/controller/overlay/useCloseOverlayConfirmationController.mjs.map +1 -0
- package/dist/js/components/src/lib/controller/overlay/useOverlayController.mjs +6 -17
- package/dist/js/components/src/lib/controller/overlay/useOverlayController.mjs.map +1 -1
- package/dist/types/components/Action/models/getExecutionFunction.d.ts.map +1 -1
- package/dist/types/components/Action/types.d.ts +2 -1
- package/dist/types/components/Action/types.d.ts.map +1 -1
- package/dist/types/components/Modal/Modal.d.ts.map +1 -1
- package/dist/types/components/Modal/components/ConfirmUnsavedChangesModal/ConfirmUnsavedChangesModal.d.ts +4 -0
- package/dist/types/components/Modal/components/ConfirmUnsavedChangesModal/ConfirmUnsavedChangesModal.d.ts.map +1 -0
- package/dist/types/components/Modal/components/ConfirmUnsavedChangesModal/index.d.ts +2 -0
- package/dist/types/components/Modal/components/ConfirmUnsavedChangesModal/index.d.ts.map +1 -0
- package/dist/types/components/Modal/stories/Default.stories.d.ts.map +1 -1
- package/dist/types/components/Overlay/Overlay.d.ts.map +1 -1
- package/dist/types/integrations/react-hook-form/components/Form/Form.d.ts.map +1 -1
- package/dist/types/lib/controller/overlay/OverlayController.d.ts +19 -10
- package/dist/types/lib/controller/overlay/OverlayController.d.ts.map +1 -1
- package/dist/types/lib/controller/overlay/useCloseOverlayConfirmationController.d.ts +7 -0
- package/dist/types/lib/controller/overlay/useCloseOverlayConfirmationController.d.ts.map +1 -0
- package/dist/types/lib/controller/overlay/useOverlayController.d.ts +1 -1
- package/dist/types/lib/controller/overlay/useOverlayController.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
/* */
|
|
3
|
+
const locales = {"de-DE": { "unsavedChangesConfirmationModal.close": `Schließen`,
|
|
4
|
+
"unsavedChangesConfirmationModal.heading": `Ungespeicherte Änderungen`,
|
|
5
|
+
"unsavedChangesConfirmationModal.keepOpen": `Weiter bearbeiten`,
|
|
6
|
+
"unsavedChangesConfirmationModal.text": `Du hast ungespeicherte Änderungen. Möchtest du das Modal wirklich schließen? Alle Änderungen gehen dabei verloren.`,
|
|
7
|
+
},"en-US": { "unsavedChangesConfirmationModal.close": `Close`,
|
|
8
|
+
"unsavedChangesConfirmationModal.heading": `Unsaved changes`,
|
|
9
|
+
"unsavedChangesConfirmationModal.keepOpen": `Keep editing`,
|
|
10
|
+
"unsavedChangesConfirmationModal.text": `You have unsaved changes. Are you sure you want to close the modal? All changes will be lost.`,
|
|
11
|
+
}};
|
|
12
|
+
|
|
13
|
+
export { locales as default };
|
|
14
|
+
//# sourceMappingURL=_.locale.json@4119db69ca94e24d796b8e08482bc927.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_.locale.json@4119db69ca94e24d796b8e08482bc927.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;"}
|
|
@@ -19,7 +19,7 @@ const actionButtonContext = {
|
|
|
19
19
|
const isConfirmationButton = useConfirmationModalButtonSlot(props) === "primary";
|
|
20
20
|
const isAbortButton = useConfirmationModalButtonSlot(props) === "abort";
|
|
21
21
|
if (isAbortButton) {
|
|
22
|
-
return action.confirmationModalController.close;
|
|
22
|
+
return () => action.confirmationModalController.close();
|
|
23
23
|
}
|
|
24
24
|
return isConfirmationButton ? confirmAction.execute : action.execute;
|
|
25
25
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Action.mjs","sources":["../../../../../../src/components/Action/Action.tsx"],"sourcesContent":["import { ActionModel as ActionModel } from \"@/components/Action/models/ActionModel\";\nimport type { PropsContext } from \"@/lib/propsContext\";\nimport { dynamic, PropsContextProvider } from \"@/lib/propsContext\";\nimport { ActionContextProvider } from \"@/components/Action/context\";\nimport { useActionStateContext } from \"@/components/Action/models/ActionStateContext\";\nimport { useConfirmationModalButtonSlot } from \"@/components/Action/hooks/useConfirmationModalButtonSlot\";\nimport { useActionButtonState } from \"@/components/Action/hooks/useActionButtonState\";\nimport type { ComponentPropsContext } from \"@/lib/propsContext/types\";\nimport { flowComponent } from \"@/lib/componentFactory/flowComponent\";\nimport type { ActionFn } from \"@/components/Action/types\";\nimport { useActionState } from \"@/components/Action/hooks/useActionState\";\n\nconst actionButtonContext: ComponentPropsContext<\"Button\"> = {\n onPress: dynamic((props) => {\n const action = ActionModel.use();\n const confirmAction = ActionModel.useConfirmationAction();\n const isConfirmationButton =\n useConfirmationModalButtonSlot(props) === \"primary\";\n const isAbortButton = useConfirmationModalButtonSlot(props) === \"abort\";\n if (isAbortButton) {\n return action.confirmationModalController.close;\n }\n return isConfirmationButton ? confirmAction.execute : action.execute;\n }),\n\n isPending: dynamic((props) => {\n const actionState = useActionButtonState(props);\n return props.isPending ?? actionState === \"isPending\";\n }),\n\n isSucceeded: dynamic((props) => {\n const actionState = useActionButtonState(props);\n return props.isSucceeded ?? actionState === \"isSucceeded\";\n }),\n\n isFailed: dynamic((props) => {\n const actionState = useActionButtonState(props);\n return props.isFailed ?? actionState === \"isFailed\";\n }),\n\n \"aria-disabled\": dynamic((props) => {\n const state = useActionButtonState(props);\n const someActionInContextIsBusy = useActionStateContext().useIsBusy();\n return (\n props[\"aria-disabled\"] ??\n (state === \"isExecuting\" || someActionInContextIsBusy)\n );\n }),\n};\n\nexport const Action = flowComponent(\n \"Action\",\n (props) => {\n const {\n children,\n actionModel: actionModelFromProps,\n ...actionProps\n } = props;\n\n if (\"action\" in actionProps && typeof actionProps.action === \"function\") {\n console.warn(\n \"The 'action' prop is now deprecated. Use 'onAction' instead.\",\n );\n if (\"onAction\" in actionProps === false) {\n actionProps.onAction = actionProps.action as ActionFn;\n }\n }\n\n const newActionModel = ActionModel.useNew(actionProps);\n const actionModel = actionModelFromProps ?? newActionModel;\n\n const propsContext: PropsContext = {\n Button: actionButtonContext,\n\n Link: {\n onPress: dynamic(() => ActionModel.use().execute),\n },\n\n MenuItem: {\n onAction: dynamic(() => ActionModel.use().execute),\n isPending: dynamic((props) => {\n const actionState = useActionState();\n return props.isPending ?? actionState === \"isPending\";\n }),\n isSucceeded: dynamic((props) => {\n const actionState = useActionState();\n return props.isSucceeded ?? actionState === \"isSucceeded\";\n }),\n isFailed: dynamic((props) => {\n const actionState = useActionState();\n return props.isFailed ?? actionState === \"isFailed\";\n }),\n \"aria-disabled\": dynamic((props) => {\n const state = useActionState();\n const someActionInContextIsBusy = useActionStateContext().useIsBusy();\n return (\n props[\"aria-disabled\"] ??\n (state === \"isExecuting\" || someActionInContextIsBusy)\n );\n }),\n },\n\n Modal: {\n slot: dynamic((props) => {\n const { slot } = props;\n const action = ActionModel.use();\n action.needsConfirmation = slot === \"actionConfirm\";\n return slot;\n }),\n isDismissable: dynamic((props) => {\n const action = ActionModel.use();\n const actionState = action.state.useValue();\n return actionState === \"isExecuting\" || actionState === \"isPending\"\n ? false\n : props.isDismissable;\n }),\n controller: dynamic(() => {\n const action = ActionModel.use();\n return action.needsConfirmation\n ? action.confirmationModalController\n : action.getOverlayController(\"Modal\");\n }),\n ActionGroup: {\n Button: actionButtonContext,\n },\n },\n };\n\n return (\n <ActionContextProvider value={actionModel}>\n <PropsContextProvider props={propsContext}>\n {children}\n </PropsContextProvider>\n </ActionContextProvider>\n );\n },\n {\n type: \"provider\",\n },\n);\n\nexport default Action;\n"],"names":["props"],"mappings":";;;;;;;;;;;;AAYA,MAAM,mBAAA,GAAuD;AAAA,EAC3D,OAAA,EAAS,OAAA,CAAQ,CAAC,KAAA,KAAU;AAC1B,IAAA,MAAM,MAAA,GAAS,YAAY,GAAA,EAAI;AAC/B,IAAA,MAAM,aAAA,GAAgB,YAAY,qBAAA,EAAsB;AACxD,IAAA,MAAM,oBAAA,GACJ,8BAAA,CAA+B,KAAK,CAAA,KAAM,SAAA;AAC5C,IAAA,MAAM,aAAA,GAAgB,8BAAA,CAA+B,KAAK,CAAA,KAAM,OAAA;AAChE,IAAA,IAAI,aAAA,EAAe;AACjB,MAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"Action.mjs","sources":["../../../../../../src/components/Action/Action.tsx"],"sourcesContent":["import { ActionModel as ActionModel } from \"@/components/Action/models/ActionModel\";\nimport type { PropsContext } from \"@/lib/propsContext\";\nimport { dynamic, PropsContextProvider } from \"@/lib/propsContext\";\nimport { ActionContextProvider } from \"@/components/Action/context\";\nimport { useActionStateContext } from \"@/components/Action/models/ActionStateContext\";\nimport { useConfirmationModalButtonSlot } from \"@/components/Action/hooks/useConfirmationModalButtonSlot\";\nimport { useActionButtonState } from \"@/components/Action/hooks/useActionButtonState\";\nimport type { ComponentPropsContext } from \"@/lib/propsContext/types\";\nimport { flowComponent } from \"@/lib/componentFactory/flowComponent\";\nimport type { ActionFn } from \"@/components/Action/types\";\nimport { useActionState } from \"@/components/Action/hooks/useActionState\";\n\nconst actionButtonContext: ComponentPropsContext<\"Button\"> = {\n onPress: dynamic((props) => {\n const action = ActionModel.use();\n const confirmAction = ActionModel.useConfirmationAction();\n const isConfirmationButton =\n useConfirmationModalButtonSlot(props) === \"primary\";\n const isAbortButton = useConfirmationModalButtonSlot(props) === \"abort\";\n if (isAbortButton) {\n return () => action.confirmationModalController.close();\n }\n return isConfirmationButton ? confirmAction.execute : action.execute;\n }),\n\n isPending: dynamic((props) => {\n const actionState = useActionButtonState(props);\n return props.isPending ?? actionState === \"isPending\";\n }),\n\n isSucceeded: dynamic((props) => {\n const actionState = useActionButtonState(props);\n return props.isSucceeded ?? actionState === \"isSucceeded\";\n }),\n\n isFailed: dynamic((props) => {\n const actionState = useActionButtonState(props);\n return props.isFailed ?? actionState === \"isFailed\";\n }),\n\n \"aria-disabled\": dynamic((props) => {\n const state = useActionButtonState(props);\n const someActionInContextIsBusy = useActionStateContext().useIsBusy();\n return (\n props[\"aria-disabled\"] ??\n (state === \"isExecuting\" || someActionInContextIsBusy)\n );\n }),\n};\n\nexport const Action = flowComponent(\n \"Action\",\n (props) => {\n const {\n children,\n actionModel: actionModelFromProps,\n ...actionProps\n } = props;\n\n if (\"action\" in actionProps && typeof actionProps.action === \"function\") {\n console.warn(\n \"The 'action' prop is now deprecated. Use 'onAction' instead.\",\n );\n if (\"onAction\" in actionProps === false) {\n actionProps.onAction = actionProps.action as ActionFn;\n }\n }\n\n const newActionModel = ActionModel.useNew(actionProps);\n const actionModel = actionModelFromProps ?? newActionModel;\n\n const propsContext: PropsContext = {\n Button: actionButtonContext,\n\n Link: {\n onPress: dynamic(() => ActionModel.use().execute),\n },\n\n MenuItem: {\n onAction: dynamic(() => ActionModel.use().execute),\n isPending: dynamic((props) => {\n const actionState = useActionState();\n return props.isPending ?? actionState === \"isPending\";\n }),\n isSucceeded: dynamic((props) => {\n const actionState = useActionState();\n return props.isSucceeded ?? actionState === \"isSucceeded\";\n }),\n isFailed: dynamic((props) => {\n const actionState = useActionState();\n return props.isFailed ?? actionState === \"isFailed\";\n }),\n \"aria-disabled\": dynamic((props) => {\n const state = useActionState();\n const someActionInContextIsBusy = useActionStateContext().useIsBusy();\n return (\n props[\"aria-disabled\"] ??\n (state === \"isExecuting\" || someActionInContextIsBusy)\n );\n }),\n },\n\n Modal: {\n slot: dynamic((props) => {\n const { slot } = props;\n const action = ActionModel.use();\n action.needsConfirmation = slot === \"actionConfirm\";\n return slot;\n }),\n isDismissable: dynamic((props) => {\n const action = ActionModel.use();\n const actionState = action.state.useValue();\n return actionState === \"isExecuting\" || actionState === \"isPending\"\n ? false\n : props.isDismissable;\n }),\n controller: dynamic(() => {\n const action = ActionModel.use();\n return action.needsConfirmation\n ? action.confirmationModalController\n : action.getOverlayController(\"Modal\");\n }),\n ActionGroup: {\n Button: actionButtonContext,\n },\n },\n };\n\n return (\n <ActionContextProvider value={actionModel}>\n <PropsContextProvider props={propsContext}>\n {children}\n </PropsContextProvider>\n </ActionContextProvider>\n );\n },\n {\n type: \"provider\",\n },\n);\n\nexport default Action;\n"],"names":["props"],"mappings":"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"}
|
|
@@ -21,7 +21,7 @@ function getExecutionFunction(action) {
|
|
|
21
21
|
closeModal,
|
|
22
22
|
toggleModal
|
|
23
23
|
} = action.actionProps;
|
|
24
|
-
const maybeAction = onAction ? onAction : openOverlay ? () => action.getOverlayController(openOverlay)?.open() : closeOverlay ? () => action.getOverlayController(closeOverlay)?.close() : toggleOverlay ? () => action.getOverlayController(toggleOverlay)?.toggle() : openModal ? () => action.getOverlayController("Modal")?.open() : toggleModal ? () => action.getOverlayController("Modal")?.toggle() : closeModal ? () => action.getOverlayController("Modal")?.close() : voidAction;
|
|
24
|
+
const maybeAction = onAction ? onAction : openOverlay ? () => action.getOverlayController(openOverlay)?.open() : closeOverlay ? () => action.getOverlayController(closeOverlay)?.close() : toggleOverlay ? () => action.getOverlayController(toggleOverlay)?.toggle() : openModal ? () => action.getOverlayController("Modal")?.open() : toggleModal ? () => action.getOverlayController("Modal")?.toggle() : closeModal ? () => action.getOverlayController("Modal")?.close(typeof closeModal === "boolean" ? {} : closeModal) : voidAction;
|
|
25
25
|
return maybeAction ?? voidAction;
|
|
26
26
|
}
|
|
27
27
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getExecutionFunction.mjs","sources":["../../../../../../../src/components/Action/models/getExecutionFunction.ts"],"sourcesContent":["import type { ActionModel } from \"@/components/Action/models/ActionModel\";\nimport { type ActionFn } from \"@/components/Action\";\n\nconst voidAction = () => {\n // do nothing\n};\n\nexport function getExecutionFunction(action: ActionModel): ActionFn {\n if (action.needsConfirmation) {\n return action.confirmationModalController.open;\n }\n\n const {\n onAction,\n toggleOverlay,\n closeOverlay,\n openOverlay,\n openModal,\n closeModal,\n toggleModal,\n } = action.actionProps;\n\n const maybeAction = onAction\n ? onAction\n : openOverlay\n ? () => action.getOverlayController(openOverlay)?.open()\n : closeOverlay\n ? () => action.getOverlayController(closeOverlay)?.close()\n : toggleOverlay\n ? () => action.getOverlayController(toggleOverlay)?.toggle()\n : openModal\n ? () => action.getOverlayController(\"Modal\")?.open()\n : toggleModal\n ? () => action.getOverlayController(\"Modal\")?.toggle()\n : closeModal\n ? ()
|
|
1
|
+
{"version":3,"file":"getExecutionFunction.mjs","sources":["../../../../../../../src/components/Action/models/getExecutionFunction.ts"],"sourcesContent":["import type { ActionModel } from \"@/components/Action/models/ActionModel\";\nimport { type ActionFn } from \"@/components/Action\";\n\nconst voidAction = () => {\n // do nothing\n};\n\nexport function getExecutionFunction(action: ActionModel): ActionFn {\n if (action.needsConfirmation) {\n return action.confirmationModalController.open;\n }\n\n const {\n onAction,\n toggleOverlay,\n closeOverlay,\n openOverlay,\n openModal,\n closeModal,\n toggleModal,\n } = action.actionProps;\n\n const maybeAction = onAction\n ? onAction\n : openOverlay\n ? () => action.getOverlayController(openOverlay)?.open()\n : closeOverlay\n ? () => action.getOverlayController(closeOverlay)?.close()\n : toggleOverlay\n ? () => action.getOverlayController(toggleOverlay)?.toggle()\n : openModal\n ? () => action.getOverlayController(\"Modal\")?.open()\n : toggleModal\n ? () => action.getOverlayController(\"Modal\")?.toggle()\n : closeModal\n ? () =>\n action\n .getOverlayController(\"Modal\")\n ?.close(typeof closeModal === \"boolean\" ? {} : closeModal)\n : voidAction;\n\n return maybeAction ?? voidAction;\n}\n"],"names":[],"mappings":";;;;;;AAGA,MAAM,aAAa,MAAM;AAEzB,CAAA;AAEO,SAAS,qBAAqB,MAAA,EAA+B;AAClE,EAAA,IAAI,OAAO,iBAAA,EAAmB;AAC5B,IAAA,OAAO,OAAO,2BAAA,CAA4B,IAAA;AAAA,EAC5C;AAEA,EAAA,MAAM;AAAA,IACJ,QAAA;AAAA,IACA,aAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,MACE,MAAA,CAAO,WAAA;AAEX,EAAA,MAAM,WAAA,GAAc,QAAA,GAChB,QAAA,GACA,WAAA,GACE,MAAM,MAAA,CAAO,oBAAA,CAAqB,WAAW,CAAA,EAAG,IAAA,EAAK,GACrD,YAAA,GACE,MAAM,OAAO,oBAAA,CAAqB,YAAY,CAAA,EAAG,KAAA,EAAM,GACvD,aAAA,GACE,MAAM,MAAA,CAAO,oBAAA,CAAqB,aAAa,CAAA,EAAG,MAAA,EAAO,GACzD,SAAA,GACE,MAAM,MAAA,CAAO,oBAAA,CAAqB,OAAO,CAAA,EAAG,IAAA,EAAK,GACjD,WAAA,GACE,MAAM,MAAA,CAAO,oBAAA,CAAqB,OAAO,CAAA,EAAG,MAAA,EAAO,GACnD,aACE,MACE,MAAA,CACG,oBAAA,CAAqB,OAAO,CAAA,EAC3B,KAAA,CAAM,OAAO,UAAA,KAAe,SAAA,GAAY,EAAC,GAAI,UAAU,CAAA,GAC7D,UAAA;AAEhB,EAAA,OAAO,WAAA,IAAe,UAAA;AACxB;;;;"}
|
|
@@ -6,10 +6,10 @@ import '../../lib/propsContext/propsContext.mjs';
|
|
|
6
6
|
import { PropsContextProvider } from '../../lib/propsContext/components/PropsContextProvider.mjs';
|
|
7
7
|
import * as Aria from 'react-aria-components';
|
|
8
8
|
import 'mobx';
|
|
9
|
-
import { useOverlayController } from '../../lib/controller/overlay/useOverlayController.mjs';
|
|
10
9
|
import 'remeda';
|
|
11
10
|
import '@react-aria/utils';
|
|
12
11
|
import 'dot-prop';
|
|
12
|
+
import { useOverlayController } from '../../lib/controller/overlay/useOverlayController.mjs';
|
|
13
13
|
import { flowComponent } from '../../lib/componentFactory/flowComponent.mjs';
|
|
14
14
|
import { Options } from '../Options/Options.mjs';
|
|
15
15
|
import { TunnelExit } from '@mittwald/react-tunnel';
|
|
@@ -31,7 +31,7 @@ const Autocomplete = flowComponent("Autocomplete", (props) => {
|
|
|
31
31
|
reuseControllerFromContext: false
|
|
32
32
|
});
|
|
33
33
|
const focusWithin = useFocusWithin({
|
|
34
|
-
onBlurWithin: optionsOverlayController.close
|
|
34
|
+
onBlurWithin: () => optionsOverlayController.close()
|
|
35
35
|
});
|
|
36
36
|
const renderEmptyState = () => /* @__PURE__ */ jsx(Text, { className: styles.empty, children: stringFormatter.format("autocomplete.empty") });
|
|
37
37
|
const handleInputChange = (value) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Autocomplete.mjs","sources":["../../../../../../src/components/Autocomplete/Autocomplete.tsx"],"sourcesContent":["import { useRef, type PropsWithChildren } from \"react\";\nimport type { PropsWithClassName } from \"@/lib/types/props\";\nimport { type PropsContext, PropsContextProvider } from \"@/lib/propsContext\";\nimport * as Aria from \"react-aria-components\";\nimport { useOverlayController } from \"@/lib/controller\";\nimport {\n flowComponent,\n type FlowComponentProps,\n} from \"@/lib/componentFactory/flowComponent\";\nimport type { SearchFieldProps } from \"@/components/SearchField\";\nimport type { TextFieldProps } from \"@/components/TextField\";\nimport Options from \"@/components/Options\";\nimport { TunnelExit } from \"@mittwald/react-tunnel\";\nimport locales from \"./locales/*.locale.json\";\nimport Text from \"@/components/Text\";\nimport styles from \"./Autocomplete.module.scss\";\nimport {\n UNSAFE_PortalProvider,\n useFocusWithin,\n useLocalizedStringFormatter,\n useObjectRef,\n} from \"react-aria\";\nimport { useFieldComponent } from \"@/lib/hooks/useFieldComponent\";\nimport { isFocused } from \"@/lib/form/isFocused\";\nimport { emitElementValueChange } from \"@/lib/react/emitElementValueChange\";\n\nexport interface AutocompleteProps\n extends\n PropsWithChildren,\n PropsWithClassName,\n FlowComponentProps<HTMLInputElement>,\n Omit<\n Aria.AutocompleteProps,\n \"children\" | \"onInputChange\" | \"inputValue\" | \"defaultInputValue\" | \"ref\"\n > {}\n\n/** @flr-generate all */\nexport const Autocomplete = flowComponent(\"Autocomplete\", (props) => {\n const { children, ref, ...rest } = props;\n\n const inputRef = useObjectRef(ref);\n\n const { contains } = Aria.useFilter({ sensitivity: \"base\" });\n const stringFormatter = useLocalizedStringFormatter(locales);\n const container = useRef(null);\n\n const optionsOverlayController = useOverlayController(\"Popover\", {\n reuseControllerFromContext: false,\n });\n\n const focusWithin = useFocusWithin({\n onBlurWithin: optionsOverlayController.close,\n });\n\n const renderEmptyState = () => (\n <Text className={styles.empty}>\n {stringFormatter.format(\"autocomplete.empty\")}\n </Text>\n );\n\n const handleInputChange = (value: string) => {\n if (value === \"\") {\n optionsOverlayController.close();\n } else if (isFocused(inputRef.current)) {\n optionsOverlayController.open();\n }\n };\n\n const handleOptionAction = (key: Aria.Key) => {\n const value = String(key);\n if (inputRef.current) {\n emitElementValueChange(inputRef.current, value);\n }\n optionsOverlayController.close();\n };\n\n const inputProps: SearchFieldProps & TextFieldProps = {\n onKeyDown: (e) => {\n if (e.key === \"Enter\" && optionsOverlayController.isOpen) {\n e.preventDefault();\n }\n },\n ref: inputRef,\n onChange: handleInputChange,\n };\n\n const {\n FieldErrorView,\n FieldErrorCaptureContext,\n fieldPropsContext,\n fieldProps,\n } = useFieldComponent(props);\n\n const propsContext: PropsContext = {\n SearchField: inputProps,\n TextField: inputProps,\n Option: {\n tunnelId: \"options\",\n },\n Popover: {\n className: styles.popover,\n },\n ...fieldPropsContext,\n };\n\n return (\n <div {...fieldProps}>\n <FieldErrorCaptureContext>\n <PropsContextProvider\n props={propsContext}\n dependencies={[optionsOverlayController]}\n >\n <div {...focusWithin.focusWithinProps} ref={container}>\n <UNSAFE_PortalProvider getContainer={() => container.current}>\n <Aria.Autocomplete\n filter={contains}\n disableAutoFocusFirst\n {...rest}\n >\n {children}\n <Options\n onAction={handleOptionAction}\n triggerRef={inputRef}\n controller={optionsOverlayController}\n renderEmptyState={renderEmptyState}\n isNonModal\n placement=\"bottom start\"\n >\n <TunnelExit id=\"options\" />\n </Options>\n </Aria.Autocomplete>\n </UNSAFE_PortalProvider>\n </div>\n </PropsContextProvider>\n </FieldErrorCaptureContext>\n <FieldErrorView />\n </div>\n );\n});\n\nexport default Autocomplete;\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAqCO,MAAM,YAAA,GAAe,aAAA,CAAc,cAAA,EAAgB,CAAC,KAAA,KAAU;AACnE,EAAA,MAAM,EAAE,QAAA,EAAU,GAAA,EAAK,GAAG,MAAK,GAAI,KAAA;AAEnC,EAAA,MAAM,QAAA,GAAW,aAAa,GAAG,CAAA;AAEjC,EAAA,MAAM,EAAE,UAAS,GAAI,IAAA,CAAK,UAAU,EAAE,WAAA,EAAa,QAAQ,CAAA;AAC3D,EAAA,MAAM,eAAA,GAAkB,4BAA4B,OAAO,CAAA;AAC3D,EAAA,MAAM,SAAA,GAAY,OAAO,IAAI,CAAA;AAE7B,EAAA,MAAM,wBAAA,GAA2B,qBAAqB,SAAA,EAAW;AAAA,IAC/D,0BAAA,EAA4B;AAAA,GAC7B,CAAA;AAED,EAAA,MAAM,cAAc,cAAA,CAAe;AAAA,IACjC,
|
|
1
|
+
{"version":3,"file":"Autocomplete.mjs","sources":["../../../../../../src/components/Autocomplete/Autocomplete.tsx"],"sourcesContent":["import { useRef, type PropsWithChildren } from \"react\";\nimport type { PropsWithClassName } from \"@/lib/types/props\";\nimport { type PropsContext, PropsContextProvider } from \"@/lib/propsContext\";\nimport * as Aria from \"react-aria-components\";\nimport { useOverlayController } from \"@/lib/controller\";\nimport {\n flowComponent,\n type FlowComponentProps,\n} from \"@/lib/componentFactory/flowComponent\";\nimport type { SearchFieldProps } from \"@/components/SearchField\";\nimport type { TextFieldProps } from \"@/components/TextField\";\nimport Options from \"@/components/Options\";\nimport { TunnelExit } from \"@mittwald/react-tunnel\";\nimport locales from \"./locales/*.locale.json\";\nimport Text from \"@/components/Text\";\nimport styles from \"./Autocomplete.module.scss\";\nimport {\n UNSAFE_PortalProvider,\n useFocusWithin,\n useLocalizedStringFormatter,\n useObjectRef,\n} from \"react-aria\";\nimport { useFieldComponent } from \"@/lib/hooks/useFieldComponent\";\nimport { isFocused } from \"@/lib/form/isFocused\";\nimport { emitElementValueChange } from \"@/lib/react/emitElementValueChange\";\n\nexport interface AutocompleteProps\n extends\n PropsWithChildren,\n PropsWithClassName,\n FlowComponentProps<HTMLInputElement>,\n Omit<\n Aria.AutocompleteProps,\n \"children\" | \"onInputChange\" | \"inputValue\" | \"defaultInputValue\" | \"ref\"\n > {}\n\n/** @flr-generate all */\nexport const Autocomplete = flowComponent(\"Autocomplete\", (props) => {\n const { children, ref, ...rest } = props;\n\n const inputRef = useObjectRef(ref);\n\n const { contains } = Aria.useFilter({ sensitivity: \"base\" });\n const stringFormatter = useLocalizedStringFormatter(locales);\n const container = useRef(null);\n\n const optionsOverlayController = useOverlayController(\"Popover\", {\n reuseControllerFromContext: false,\n });\n\n const focusWithin = useFocusWithin({\n onBlurWithin: () => optionsOverlayController.close(),\n });\n\n const renderEmptyState = () => (\n <Text className={styles.empty}>\n {stringFormatter.format(\"autocomplete.empty\")}\n </Text>\n );\n\n const handleInputChange = (value: string) => {\n if (value === \"\") {\n optionsOverlayController.close();\n } else if (isFocused(inputRef.current)) {\n optionsOverlayController.open();\n }\n };\n\n const handleOptionAction = (key: Aria.Key) => {\n const value = String(key);\n if (inputRef.current) {\n emitElementValueChange(inputRef.current, value);\n }\n optionsOverlayController.close();\n };\n\n const inputProps: SearchFieldProps & TextFieldProps = {\n onKeyDown: (e) => {\n if (e.key === \"Enter\" && optionsOverlayController.isOpen) {\n e.preventDefault();\n }\n },\n ref: inputRef,\n onChange: handleInputChange,\n };\n\n const {\n FieldErrorView,\n FieldErrorCaptureContext,\n fieldPropsContext,\n fieldProps,\n } = useFieldComponent(props);\n\n const propsContext: PropsContext = {\n SearchField: inputProps,\n TextField: inputProps,\n Option: {\n tunnelId: \"options\",\n },\n Popover: {\n className: styles.popover,\n },\n ...fieldPropsContext,\n };\n\n return (\n <div {...fieldProps}>\n <FieldErrorCaptureContext>\n <PropsContextProvider\n props={propsContext}\n dependencies={[optionsOverlayController]}\n >\n <div {...focusWithin.focusWithinProps} ref={container}>\n <UNSAFE_PortalProvider getContainer={() => container.current}>\n <Aria.Autocomplete\n filter={contains}\n disableAutoFocusFirst\n {...rest}\n >\n {children}\n <Options\n onAction={handleOptionAction}\n triggerRef={inputRef}\n controller={optionsOverlayController}\n renderEmptyState={renderEmptyState}\n isNonModal\n placement=\"bottom start\"\n >\n <TunnelExit id=\"options\" />\n </Options>\n </Aria.Autocomplete>\n </UNSAFE_PortalProvider>\n </div>\n </PropsContextProvider>\n </FieldErrorCaptureContext>\n <FieldErrorView />\n </div>\n );\n});\n\nexport default Autocomplete;\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAqCO,MAAM,YAAA,GAAe,aAAA,CAAc,cAAA,EAAgB,CAAC,KAAA,KAAU;AACnE,EAAA,MAAM,EAAE,QAAA,EAAU,GAAA,EAAK,GAAG,MAAK,GAAI,KAAA;AAEnC,EAAA,MAAM,QAAA,GAAW,aAAa,GAAG,CAAA;AAEjC,EAAA,MAAM,EAAE,UAAS,GAAI,IAAA,CAAK,UAAU,EAAE,WAAA,EAAa,QAAQ,CAAA;AAC3D,EAAA,MAAM,eAAA,GAAkB,4BAA4B,OAAO,CAAA;AAC3D,EAAA,MAAM,SAAA,GAAY,OAAO,IAAI,CAAA;AAE7B,EAAA,MAAM,wBAAA,GAA2B,qBAAqB,SAAA,EAAW;AAAA,IAC/D,0BAAA,EAA4B;AAAA,GAC7B,CAAA;AAED,EAAA,MAAM,cAAc,cAAA,CAAe;AAAA,IACjC,YAAA,EAAc,MAAM,wBAAA,CAAyB,KAAA;AAAM,GACpD,CAAA;AAED,EAAA,MAAM,gBAAA,GAAmB,sBACvB,GAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAW,OAAO,KAAA,EACrB,QAAA,EAAA,eAAA,CAAgB,MAAA,CAAO,oBAAoB,CAAA,EAC9C,CAAA;AAGF,EAAA,MAAM,iBAAA,GAAoB,CAAC,KAAA,KAAkB;AAC3C,IAAA,IAAI,UAAU,EAAA,EAAI;AAChB,MAAA,wBAAA,CAAyB,KAAA,EAAM;AAAA,IACjC,CAAA,MAAA,IAAW,SAAA,CAAU,QAAA,CAAS,OAAO,CAAA,EAAG;AACtC,MAAA,wBAAA,CAAyB,IAAA,EAAK;AAAA,IAChC;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,CAAC,GAAA,KAAkB;AAC5C,IAAA,MAAM,KAAA,GAAQ,OAAO,GAAG,CAAA;AACxB,IAAA,IAAI,SAAS,OAAA,EAAS;AACpB,MAAA,sBAAA,CAAuB,QAAA,CAAS,SAAS,KAAK,CAAA;AAAA,IAChD;AACA,IAAA,wBAAA,CAAyB,KAAA,EAAM;AAAA,EACjC,CAAA;AAEA,EAAA,MAAM,UAAA,GAAgD;AAAA,IACpD,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,MAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,wBAAA,CAAyB,MAAA,EAAQ;AACxD,QAAA,CAAA,CAAE,cAAA,EAAe;AAAA,MACnB;AAAA,IACF,CAAA;AAAA,IACA,GAAA,EAAK,QAAA;AAAA,IACL,QAAA,EAAU;AAAA,GACZ;AAEA,EAAA,MAAM;AAAA,IACJ,cAAA;AAAA,IACA,wBAAA;AAAA,IACA,iBAAA;AAAA,IACA;AAAA,GACF,GAAI,kBAAkB,KAAK,CAAA;AAE3B,EAAA,MAAM,YAAA,GAA6B;AAAA,IACjC,WAAA,EAAa,UAAA;AAAA,IACb,SAAA,EAAW,UAAA;AAAA,IACX,MAAA,EAAQ;AAAA,MACN,QAAA,EAAU;AAAA,KACZ;AAAA,IACA,OAAA,EAAS;AAAA,MACP,WAAW,MAAA,CAAO;AAAA,KACpB;AAAA,IACA,GAAG;AAAA,GACL;AAEA,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAK,GAAG,UAAA,EACP,QAAA,EAAA;AAAA,oBAAA,GAAA,CAAC,wBAAA,EAAA,EACC,QAAA,kBAAA,GAAA;AAAA,MAAC,oBAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,YAAA;AAAA,QACP,YAAA,EAAc,CAAC,wBAAwB,CAAA;AAAA,QAEvC,QAAA,kBAAA,GAAA,CAAC,KAAA,EAAA,EAAK,GAAG,WAAA,CAAY,gBAAA,EAAkB,GAAA,EAAK,SAAA,EAC1C,QAAA,kBAAA,GAAA,CAAC,qBAAA,EAAA,EAAsB,YAAA,EAAc,MAAM,SAAA,CAAU,OAAA,EACnD,QAAA,kBAAA,IAAA;AAAA,UAAC,IAAA,CAAK,YAAA;AAAA,UAAL;AAAA,YACC,MAAA,EAAQ,QAAA;AAAA,YACR,qBAAA,EAAqB,IAAA;AAAA,YACpB,GAAG,IAAA;AAAA,YAEH,QAAA,EAAA;AAAA,cAAA,QAAA;AAAA,8BACD,GAAA;AAAA,gBAAC,OAAA;AAAA,gBAAA;AAAA,kBACC,QAAA,EAAU,kBAAA;AAAA,kBACV,UAAA,EAAY,QAAA;AAAA,kBACZ,UAAA,EAAY,wBAAA;AAAA,kBACZ,gBAAA;AAAA,kBACA,UAAA,EAAU,IAAA;AAAA,kBACV,SAAA,EAAU,cAAA;AAAA,kBAEV,QAAA,kBAAA,GAAA,CAAC,UAAA,EAAA,EAAW,EAAA,EAAG,SAAA,EAAU;AAAA;AAAA;AAC3B;AAAA;AAAA,WAEJ,CAAA,EACF;AAAA;AAAA,KACF,EACF,CAAA;AAAA,wBACC,cAAA,EAAA,EAAe;AAAA,GAAA,EAClB,CAAA;AAEJ,CAAC;;;;"}
|
|
@@ -18,10 +18,10 @@ import locales from '../../../../_virtual/_.locale.json@51dcf4944c990e2cbe264723
|
|
|
18
18
|
import { useLocalizedStringFormatter } from 'react-aria';
|
|
19
19
|
import { flowComponent } from '../../lib/componentFactory/flowComponent.mjs';
|
|
20
20
|
import 'mobx';
|
|
21
|
-
import { useOverlayController } from '../../lib/controller/overlay/useOverlayController.mjs';
|
|
22
21
|
import 'remeda';
|
|
23
22
|
import '@react-aria/utils';
|
|
24
23
|
import 'dot-prop';
|
|
24
|
+
import { useOverlayController } from '../../lib/controller/overlay/useOverlayController.mjs';
|
|
25
25
|
import { useFieldComponent } from '../../lib/hooks/useFieldComponent.mjs';
|
|
26
26
|
|
|
27
27
|
const ComboBox = flowComponent("ComboBox", (props) => {
|
|
@@ -9,11 +9,11 @@ import { getCloseOverlayType, getAriaSelectionMode, getMenuItemSelectionVariant
|
|
|
9
9
|
import { Popover } from '../Popover/Popover.mjs';
|
|
10
10
|
import { flowComponent } from '../../lib/componentFactory/flowComponent.mjs';
|
|
11
11
|
import 'mobx';
|
|
12
|
-
import { useOverlayController } from '../../lib/controller/overlay/useOverlayController.mjs';
|
|
13
12
|
import '../../lib/propsContext/propsContext.mjs';
|
|
14
13
|
import 'remeda';
|
|
15
14
|
import '@react-aria/utils';
|
|
16
15
|
import 'dot-prop';
|
|
16
|
+
import { useOverlayController } from '../../lib/controller/overlay/useOverlayController.mjs';
|
|
17
17
|
import { OverlayContextProvider } from '../../lib/controller/overlay/OverlayContextProvider.mjs';
|
|
18
18
|
import { PropsContextProvider } from '../../lib/propsContext/components/PropsContextProvider.mjs';
|
|
19
19
|
import ContextMenuContentView from '../../views/ContextMenuContentView.mjs';
|
|
@@ -8,10 +8,10 @@ import { PropsContextProvider } from '../../lib/propsContext/components/PropsCon
|
|
|
8
8
|
import { flowComponent } from '../../lib/componentFactory/flowComponent.mjs';
|
|
9
9
|
import 'mobx';
|
|
10
10
|
import 'react';
|
|
11
|
-
import { useOverlayController } from '../../lib/controller/overlay/useOverlayController.mjs';
|
|
12
11
|
import 'remeda';
|
|
13
12
|
import '@react-aria/utils';
|
|
14
13
|
import 'dot-prop';
|
|
14
|
+
import { useOverlayController } from '../../lib/controller/overlay/useOverlayController.mjs';
|
|
15
15
|
|
|
16
16
|
const ContextualHelp = flowComponent("ContextualHelp", (props) => {
|
|
17
17
|
const {
|
|
@@ -10,10 +10,10 @@ import { DateInput } from './components/DateInput/DateInput.mjs';
|
|
|
10
10
|
import formFieldStyles from '../FormField/FormField.module.scss.mjs';
|
|
11
11
|
import { Popover } from '../Popover/Popover.mjs';
|
|
12
12
|
import 'mobx';
|
|
13
|
-
import { useOverlayController } from '../../lib/controller/overlay/useOverlayController.mjs';
|
|
14
13
|
import 'remeda';
|
|
15
14
|
import '@react-aria/utils';
|
|
16
15
|
import 'dot-prop';
|
|
16
|
+
import { useOverlayController } from '../../lib/controller/overlay/useOverlayController.mjs';
|
|
17
17
|
import { flowComponent } from '../../lib/componentFactory/flowComponent.mjs';
|
|
18
18
|
import { Calendar } from '../Calendar/Calendar.mjs';
|
|
19
19
|
import '../Button/Button.mjs';
|
|
@@ -10,10 +10,10 @@ import { RangeCalendar } from '../Calendar/RangeCalendar.mjs';
|
|
|
10
10
|
import { DateRangeInput } from './components/DateRangeInput/DateRangeInput.mjs';
|
|
11
11
|
import 'mobx';
|
|
12
12
|
import 'react';
|
|
13
|
-
import { useOverlayController } from '../../lib/controller/overlay/useOverlayController.mjs';
|
|
14
13
|
import 'remeda';
|
|
15
14
|
import '@react-aria/utils';
|
|
16
15
|
import 'dot-prop';
|
|
16
|
+
import { useOverlayController } from '../../lib/controller/overlay/useOverlayController.mjs';
|
|
17
17
|
import { flowComponent } from '../../lib/componentFactory/flowComponent.mjs';
|
|
18
18
|
import { useFieldComponent } from '../../lib/hooks/useFieldComponent.mjs';
|
|
19
19
|
|
|
@@ -6,11 +6,11 @@ import { Overlay } from '../Overlay/Overlay.mjs';
|
|
|
6
6
|
import clsx from 'clsx';
|
|
7
7
|
import 'mobx';
|
|
8
8
|
import 'react';
|
|
9
|
-
import { useOverlayController } from '../../lib/controller/overlay/useOverlayController.mjs';
|
|
10
9
|
import '../../lib/propsContext/propsContext.mjs';
|
|
11
10
|
import 'remeda';
|
|
12
11
|
import '@react-aria/utils';
|
|
13
12
|
import 'dot-prop';
|
|
13
|
+
import { useOverlayController } from '../../lib/controller/overlay/useOverlayController.mjs';
|
|
14
14
|
import { PropsContextProvider } from '../../lib/propsContext/components/PropsContextProvider.mjs';
|
|
15
15
|
import '@tabler/icons-react';
|
|
16
16
|
import '../Icon/Icon.mjs';
|
|
@@ -61,7 +61,7 @@ const LightBox = flowComponent("LightBox", (props) => {
|
|
|
61
61
|
{
|
|
62
62
|
color: "light",
|
|
63
63
|
variant: "solid",
|
|
64
|
-
onPress: controller.close,
|
|
64
|
+
onPress: () => controller.close(),
|
|
65
65
|
children: /* @__PURE__ */ jsx(IconClose, {})
|
|
66
66
|
}
|
|
67
67
|
),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LightBox.mjs","sources":["../../../../../../src/components/LightBox/LightBox.tsx"],"sourcesContent":["import {\n flowComponent,\n type FlowComponentProps,\n} from \"@/lib/componentFactory/flowComponent\";\nimport type { PropsWithChildren } from \"react\";\nimport type { PropsWithClassName } from \"@/lib/types/props\";\nimport { Overlay } from \"@/components/Overlay/Overlay\";\nimport clsx from \"clsx\";\nimport type { OverlayController } from \"@/lib/controller\";\nimport { useOverlayController } from \"@/lib/controller\";\nimport type { PropsContext } from \"@/lib/propsContext\";\nimport { PropsContextProvider } from \"@/lib/propsContext\";\nimport { IconClose } from \"@/components/Icon/components/icons\";\nimport styles from \"./LightBox.module.scss\";\nimport { TunnelExit, TunnelProvider } from \"@mittwald/react-tunnel\";\nimport DivView from \"@/views/DivView\";\nimport ButtonView from \"@/views/ButtonView\";\n\nexport interface LightBoxProps\n extends PropsWithChildren, FlowComponentProps, PropsWithClassName {\n /** An overlay controller to control the light box state. */\n controller?: OverlayController;\n /**\n * Whether content can be displayed larger than the available space in the\n * screen. @default true\n */\n fitScreen?: boolean;\n}\n\nexport const LightBox = flowComponent(\"LightBox\", (props) => {\n const {\n controller: controllerFromProps,\n children,\n ref: ignoredRef,\n className,\n fitScreen = true,\n ...rest\n } = props;\n\n const rootClassName = clsx(\n styles.lightBox,\n fitScreen && styles.fitScreen,\n className,\n );\n\n const propsContext: PropsContext = {\n ActionGroup: {\n className: styles.actionGroup,\n Button: { variant: \"solid\", color: \"light\" },\n tunnelId: \"actionGroup\",\n },\n };\n\n const controllerFromContext = useOverlayController(\"LightBox\", {\n reuseControllerFromContext: true,\n });\n\n const controller = controllerFromProps ?? controllerFromContext;\n\n return (\n <Overlay\n overlayType=\"LightBox\"\n className={rootClassName}\n controller={controller}\n {...rest}\n >\n <PropsContextProvider props={propsContext}>\n <TunnelProvider>\n <DivView className={styles.content}>{children}</DivView>\n <DivView className={styles.actions}>\n <ButtonView\n color=\"light\"\n variant=\"solid\"\n onPress={controller.close}\n >\n <IconClose />\n </ButtonView>\n <TunnelExit id=\"actionGroup\" />\n </DivView>\n </TunnelProvider>\n </PropsContextProvider>\n </Overlay>\n );\n});\n\nexport default LightBox;\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AA6BO,MAAM,QAAA,GAAW,aAAA,CAAc,UAAA,EAAY,CAAC,KAAA,KAAU;AAC3D,EAAA,MAAM;AAAA,IACJ,UAAA,EAAY,mBAAA;AAAA,IACZ,QAAA;AAAA,IACA,GAAA,EAAK,UAAA;AAAA,IACL,SAAA;AAAA,IACA,SAAA,GAAY,IAAA;AAAA,IACZ,GAAG;AAAA,GACL,GAAI,KAAA;AAEJ,EAAA,MAAM,aAAA,GAAgB,IAAA;AAAA,IACpB,MAAA,CAAO,QAAA;AAAA,IACP,aAAa,MAAA,CAAO,SAAA;AAAA,IACpB;AAAA,GACF;AAEA,EAAA,MAAM,YAAA,GAA6B;AAAA,IACjC,WAAA,EAAa;AAAA,MACX,WAAW,MAAA,CAAO,WAAA;AAAA,MAClB,MAAA,EAAQ,EAAE,OAAA,EAAS,OAAA,EAAS,OAAO,OAAA,EAAQ;AAAA,MAC3C,QAAA,EAAU;AAAA;AACZ,GACF;AAEA,EAAA,MAAM,qBAAA,GAAwB,qBAAqB,UAAA,EAAY;AAAA,IAC7D,0BAAA,EAA4B;AAAA,GAC7B,CAAA;AAED,EAAA,MAAM,aAAa,mBAAA,IAAuB,qBAAA;AAE1C,EAAA,uBACE,GAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAY,UAAA;AAAA,MACZ,SAAA,EAAW,aAAA;AAAA,MACX,UAAA;AAAA,MACC,GAAG,IAAA;AAAA,MAEJ,QAAA,kBAAA,GAAA,CAAC,oBAAA,EAAA,EAAqB,KAAA,EAAO,YAAA,EAC3B,+BAAC,cAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAW,MAAA,CAAO,OAAA,EAAU,QAAA,EAAS,CAAA;AAAA,wBAC9C,IAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAW,MAAA,CAAO,OAAA,EACzB,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAM,OAAA;AAAA,cACN,OAAA,EAAQ,OAAA;AAAA,cACR,
|
|
1
|
+
{"version":3,"file":"LightBox.mjs","sources":["../../../../../../src/components/LightBox/LightBox.tsx"],"sourcesContent":["import {\n flowComponent,\n type FlowComponentProps,\n} from \"@/lib/componentFactory/flowComponent\";\nimport type { PropsWithChildren } from \"react\";\nimport type { PropsWithClassName } from \"@/lib/types/props\";\nimport { Overlay } from \"@/components/Overlay/Overlay\";\nimport clsx from \"clsx\";\nimport type { OverlayController } from \"@/lib/controller\";\nimport { useOverlayController } from \"@/lib/controller\";\nimport type { PropsContext } from \"@/lib/propsContext\";\nimport { PropsContextProvider } from \"@/lib/propsContext\";\nimport { IconClose } from \"@/components/Icon/components/icons\";\nimport styles from \"./LightBox.module.scss\";\nimport { TunnelExit, TunnelProvider } from \"@mittwald/react-tunnel\";\nimport DivView from \"@/views/DivView\";\nimport ButtonView from \"@/views/ButtonView\";\n\nexport interface LightBoxProps\n extends PropsWithChildren, FlowComponentProps, PropsWithClassName {\n /** An overlay controller to control the light box state. */\n controller?: OverlayController;\n /**\n * Whether content can be displayed larger than the available space in the\n * screen. @default true\n */\n fitScreen?: boolean;\n}\n\nexport const LightBox = flowComponent(\"LightBox\", (props) => {\n const {\n controller: controllerFromProps,\n children,\n ref: ignoredRef,\n className,\n fitScreen = true,\n ...rest\n } = props;\n\n const rootClassName = clsx(\n styles.lightBox,\n fitScreen && styles.fitScreen,\n className,\n );\n\n const propsContext: PropsContext = {\n ActionGroup: {\n className: styles.actionGroup,\n Button: { variant: \"solid\", color: \"light\" },\n tunnelId: \"actionGroup\",\n },\n };\n\n const controllerFromContext = useOverlayController(\"LightBox\", {\n reuseControllerFromContext: true,\n });\n\n const controller = controllerFromProps ?? controllerFromContext;\n\n return (\n <Overlay\n overlayType=\"LightBox\"\n className={rootClassName}\n controller={controller}\n {...rest}\n >\n <PropsContextProvider props={propsContext}>\n <TunnelProvider>\n <DivView className={styles.content}>{children}</DivView>\n <DivView className={styles.actions}>\n <ButtonView\n color=\"light\"\n variant=\"solid\"\n onPress={() => controller.close()}\n >\n <IconClose />\n </ButtonView>\n <TunnelExit id=\"actionGroup\" />\n </DivView>\n </TunnelProvider>\n </PropsContextProvider>\n </Overlay>\n );\n});\n\nexport default LightBox;\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AA6BO,MAAM,QAAA,GAAW,aAAA,CAAc,UAAA,EAAY,CAAC,KAAA,KAAU;AAC3D,EAAA,MAAM;AAAA,IACJ,UAAA,EAAY,mBAAA;AAAA,IACZ,QAAA;AAAA,IACA,GAAA,EAAK,UAAA;AAAA,IACL,SAAA;AAAA,IACA,SAAA,GAAY,IAAA;AAAA,IACZ,GAAG;AAAA,GACL,GAAI,KAAA;AAEJ,EAAA,MAAM,aAAA,GAAgB,IAAA;AAAA,IACpB,MAAA,CAAO,QAAA;AAAA,IACP,aAAa,MAAA,CAAO,SAAA;AAAA,IACpB;AAAA,GACF;AAEA,EAAA,MAAM,YAAA,GAA6B;AAAA,IACjC,WAAA,EAAa;AAAA,MACX,WAAW,MAAA,CAAO,WAAA;AAAA,MAClB,MAAA,EAAQ,EAAE,OAAA,EAAS,OAAA,EAAS,OAAO,OAAA,EAAQ;AAAA,MAC3C,QAAA,EAAU;AAAA;AACZ,GACF;AAEA,EAAA,MAAM,qBAAA,GAAwB,qBAAqB,UAAA,EAAY;AAAA,IAC7D,0BAAA,EAA4B;AAAA,GAC7B,CAAA;AAED,EAAA,MAAM,aAAa,mBAAA,IAAuB,qBAAA;AAE1C,EAAA,uBACE,GAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAY,UAAA;AAAA,MACZ,SAAA,EAAW,aAAA;AAAA,MACX,UAAA;AAAA,MACC,GAAG,IAAA;AAAA,MAEJ,QAAA,kBAAA,GAAA,CAAC,oBAAA,EAAA,EAAqB,KAAA,EAAO,YAAA,EAC3B,+BAAC,cAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAW,MAAA,CAAO,OAAA,EAAU,QAAA,EAAS,CAAA;AAAA,wBAC9C,IAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAW,MAAA,CAAO,OAAA,EACzB,QAAA,EAAA;AAAA,0BAAA,GAAA;AAAA,YAAC,UAAA;AAAA,YAAA;AAAA,cACC,KAAA,EAAM,OAAA;AAAA,cACN,OAAA,EAAQ,OAAA;AAAA,cACR,OAAA,EAAS,MAAM,UAAA,CAAW,KAAA,EAAM;AAAA,cAEhC,8BAAC,SAAA,EAAA,EAAU;AAAA;AAAA,WACb;AAAA,0BACA,GAAA,CAAC,UAAA,EAAA,EAAW,EAAA,EAAG,aAAA,EAAc;AAAA,SAAA,EAC/B;AAAA,OAAA,EACF,CAAA,EACF;AAAA;AAAA,GACF;AAEJ,CAAC;;;;"}
|
|
@@ -34,10 +34,10 @@ import { ViewModeAccordion } from './ViewModeAccordion.mjs';
|
|
|
34
34
|
import TextView from '../../../../../../views/TextView.mjs';
|
|
35
35
|
import { SortingAccordion } from './SortingAccordion.mjs';
|
|
36
36
|
import ActionGroupView from '../../../../../../views/ActionGroupView.mjs';
|
|
37
|
-
import { useOverlayController } from '../../../../../../lib/controller/overlay/useOverlayController.mjs';
|
|
38
37
|
import 'remeda';
|
|
39
38
|
import '@react-aria/utils';
|
|
40
39
|
import 'dot-prop';
|
|
40
|
+
import { useOverlayController } from '../../../../../../lib/controller/overlay/useOverlayController.mjs';
|
|
41
41
|
import HeadingView from '../../../../../../views/HeadingView.mjs';
|
|
42
42
|
import { ModalTrigger } from '../../../../../Modal/components/ModalTrigger/ModalTrigger.mjs';
|
|
43
43
|
import { Modal } from '../../../../../Modal/Modal.mjs';
|
|
@@ -30,7 +30,7 @@ const Modal = flowComponent("Modal", (props) => {
|
|
|
30
30
|
ref,
|
|
31
31
|
className,
|
|
32
32
|
offCanvasOrientation = "right",
|
|
33
|
-
...
|
|
33
|
+
...overlayProps
|
|
34
34
|
} = props;
|
|
35
35
|
const rootClassName = clsx(
|
|
36
36
|
offCanvas ? styles.offCanvas : styles.modal,
|
|
@@ -40,7 +40,7 @@ const Modal = flowComponent("Modal", (props) => {
|
|
|
40
40
|
);
|
|
41
41
|
const header = (children2) => /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
42
42
|
children2,
|
|
43
|
-
/* @__PURE__ */ jsx(Action, { closeModal: true, children: /* @__PURE__ */ jsx(ButtonView, { variant: "plain", color: "secondary", children: /* @__PURE__ */ jsx(IconClose, {}) }) })
|
|
43
|
+
/* @__PURE__ */ jsx(Action, { closeModal: { bypassConfirmation: true }, children: /* @__PURE__ */ jsx(ButtonView, { variant: "plain", color: "secondary", children: /* @__PURE__ */ jsx(IconClose, {}) }) })
|
|
44
44
|
] });
|
|
45
45
|
const nestedHeadingLevel = 3;
|
|
46
46
|
const nestedHeadingProps = {
|
|
@@ -72,7 +72,15 @@ const Modal = flowComponent("Modal", (props) => {
|
|
|
72
72
|
},
|
|
73
73
|
ActionGroup: {
|
|
74
74
|
className: styles.actionGroup,
|
|
75
|
-
spacing: "m"
|
|
75
|
+
spacing: "m",
|
|
76
|
+
Action: {
|
|
77
|
+
closeModal: dynamic((props2) => {
|
|
78
|
+
if (props2.closeModal === true) {
|
|
79
|
+
return { bypassConfirmation: true };
|
|
80
|
+
}
|
|
81
|
+
return props2.closeModal;
|
|
82
|
+
})
|
|
83
|
+
}
|
|
76
84
|
}
|
|
77
85
|
};
|
|
78
86
|
return /* @__PURE__ */ jsx(
|
|
@@ -81,7 +89,7 @@ const Modal = flowComponent("Modal", (props) => {
|
|
|
81
89
|
className: rootClassName,
|
|
82
90
|
controller,
|
|
83
91
|
ref,
|
|
84
|
-
...
|
|
92
|
+
...overlayProps,
|
|
85
93
|
children: /* @__PURE__ */ jsx(PropsContextProvider, { props: propsContext, children: /* @__PURE__ */ jsx(Wrap, { if: offCanvas, children: /* @__PURE__ */ jsx(Suspense, { fallback: /* @__PURE__ */ jsx(OffCanvasSuspenseFallback, {}), children }) }) })
|
|
86
94
|
}
|
|
87
95
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Modal.mjs","sources":["../../../../../../src/components/Modal/Modal.tsx"],"sourcesContent":["import { Suspense, type PropsWithChildren, type ReactNode } from \"react\";\nimport styles from \"./Modal.module.scss\";\nimport clsx from \"clsx\";\nimport {\n dynamic,\n type PropsContext,\n PropsContextProvider,\n} from \"@/lib/propsContext\";\nimport type { OverlayController } from \"@/lib/controller/overlay\";\nimport type { FlowComponentProps } from \"@/lib/componentFactory/flowComponent\";\nimport { flowComponent } from \"@/lib/componentFactory/flowComponent\";\nimport { Overlay, type OverlayProps } from \"@/components/Overlay/Overlay\";\nimport { Action } from \"@/components/Action\";\nimport { IconClose } from \"@/components/Icon/components/icons\";\nimport type { PropsWithClassName } from \"@/lib/types/props\";\nimport ButtonView from \"@/views/ButtonView\";\nimport { OffCanvasSuspenseFallback } from \"@/components/Modal/components/OffCanvasSuspenseFallback\";\nimport Wrap from \"@/components/Wrap\";\nimport { ClearPropsContext } from \"@/components/ClearPropsContext/ClearPropsContext\";\n\ntype SupportedOverlayProps = Pick<\n OverlayProps,\n \"isOpen\" | \"isDefaultOpen\" | \"onOpen\" | \"onClose\" | \"onOpenChange\"\n>;\n\nexport interface ModalProps\n extends\n PropsWithChildren,\n FlowComponentProps,\n PropsWithClassName,\n SupportedOverlayProps {\n /** The size of the modal. @default \"s\" */\n size?: \"s\" | \"m\" | \"l\";\n /** Whether the modal should be displayed as an off canvas. */\n offCanvas?: boolean;\n /**\n * Whether the off canvas should be displayed on the right or left side of the\n * screen. @default \"right\"\n */\n offCanvasOrientation?: \"left\" | \"right\";\n /** An overlay controller to control the modal state. */\n controller?: OverlayController;\n /**\n * Accepts \"actionConfirm\" to use the modal as a confirmation modal for an\n * action.\n */\n slot?: string;\n /** Whether the modal can be closed by clicking outside of it. */\n isDismissable?: boolean;\n}\n\nexport const Modal = flowComponent(\"Modal\", (props) => {\n const {\n size = \"s\",\n offCanvas,\n controller,\n children,\n ref,\n className,\n offCanvasOrientation = \"right\",\n ...
|
|
1
|
+
{"version":3,"file":"Modal.mjs","sources":["../../../../../../src/components/Modal/Modal.tsx"],"sourcesContent":["import { Suspense, type PropsWithChildren, type ReactNode } from \"react\";\nimport styles from \"./Modal.module.scss\";\nimport clsx from \"clsx\";\nimport {\n dynamic,\n type PropsContext,\n PropsContextProvider,\n} from \"@/lib/propsContext\";\nimport type { OverlayController } from \"@/lib/controller/overlay\";\nimport type { FlowComponentProps } from \"@/lib/componentFactory/flowComponent\";\nimport { flowComponent } from \"@/lib/componentFactory/flowComponent\";\nimport { Overlay, type OverlayProps } from \"@/components/Overlay/Overlay\";\nimport { Action } from \"@/components/Action\";\nimport { IconClose } from \"@/components/Icon/components/icons\";\nimport type { PropsWithClassName } from \"@/lib/types/props\";\nimport ButtonView from \"@/views/ButtonView\";\nimport { OffCanvasSuspenseFallback } from \"@/components/Modal/components/OffCanvasSuspenseFallback\";\nimport Wrap from \"@/components/Wrap\";\nimport { ClearPropsContext } from \"@/components/ClearPropsContext/ClearPropsContext\";\n\ntype SupportedOverlayProps = Pick<\n OverlayProps,\n \"isOpen\" | \"isDefaultOpen\" | \"onOpen\" | \"onClose\" | \"onOpenChange\"\n>;\n\nexport interface ModalProps\n extends\n PropsWithChildren,\n FlowComponentProps,\n PropsWithClassName,\n SupportedOverlayProps {\n /** The size of the modal. @default \"s\" */\n size?: \"s\" | \"m\" | \"l\";\n /** Whether the modal should be displayed as an off canvas. */\n offCanvas?: boolean;\n /**\n * Whether the off canvas should be displayed on the right or left side of the\n * screen. @default \"right\"\n */\n offCanvasOrientation?: \"left\" | \"right\";\n /** An overlay controller to control the modal state. */\n controller?: OverlayController;\n /**\n * Accepts \"actionConfirm\" to use the modal as a confirmation modal for an\n * action.\n */\n slot?: string;\n /** Whether the modal can be closed by clicking outside of it. */\n isDismissable?: boolean;\n}\n\nexport const Modal = flowComponent(\"Modal\", (props) => {\n const {\n size = \"s\",\n offCanvas,\n controller,\n children,\n ref,\n className,\n offCanvasOrientation = \"right\",\n ...overlayProps\n } = props;\n\n const rootClassName = clsx(\n offCanvas ? styles.offCanvas : styles.modal,\n styles[`size-${size}`],\n offCanvasOrientation === \"left\" && styles[\"left\"],\n className,\n );\n\n const header = (children: ReactNode) => (\n <>\n {children}\n <Action closeModal={{ bypassConfirmation: true }}>\n <ButtonView variant=\"plain\" color=\"secondary\">\n <IconClose />\n </ButtonView>\n </Action>\n </>\n );\n\n const nestedHeadingLevel = 3;\n\n const nestedHeadingProps: PropsContext = {\n Heading: { level: nestedHeadingLevel },\n Section: {\n Header: { Heading: { level: nestedHeadingLevel } },\n Heading: { level: nestedHeadingLevel },\n },\n Header: { Heading: { level: nestedHeadingLevel } },\n };\n\n const propsContext: PropsContext = {\n Content: {\n ...nestedHeadingProps,\n className: styles.content,\n },\n ColumnLayout: {\n ...nestedHeadingProps,\n l: [2, 1],\n m: [1],\n className: styles.columnLayout,\n AccentBox: { className: styles.accentBox, color: \"neutral\" },\n wrapWith: <ClearPropsContext />,\n },\n Heading: {\n className: styles.header,\n level: 2,\n slot: \"title\",\n children: dynamic((props) => header(props.children)),\n },\n ActionGroup: {\n className: styles.actionGroup,\n spacing: \"m\",\n Action: {\n closeModal: dynamic((props) => {\n if (props.closeModal === true) {\n return { bypassConfirmation: true };\n }\n return props.closeModal;\n }),\n },\n },\n };\n\n return (\n <Overlay\n className={rootClassName}\n controller={controller}\n ref={ref}\n {...overlayProps}\n >\n <PropsContextProvider props={propsContext}>\n <Wrap if={offCanvas}>\n <Suspense fallback={<OffCanvasSuspenseFallback />}>\n {children}\n </Suspense>\n </Wrap>\n </PropsContextProvider>\n </Overlay>\n );\n});\n\nexport default Modal;\n"],"names":["children","props"],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use client"
|
|
2
|
+
/* */
|
|
3
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
|
+
import ContentView from '../../../../views/ContentView.mjs';
|
|
5
|
+
import HeadingView from '../../../../views/HeadingView.mjs';
|
|
6
|
+
import { useLocalizedStringFormatter } from 'react-aria';
|
|
7
|
+
import locales from '../../../../../../_virtual/_.locale.json@4119db69ca94e24d796b8e08482bc927.mjs';
|
|
8
|
+
import { Modal } from '../../Modal.mjs';
|
|
9
|
+
import TextView from '../../../../views/TextView.mjs';
|
|
10
|
+
import ActionGroupView from '../../../../views/ActionGroupView.mjs';
|
|
11
|
+
import { Action } from '../../../Action/Action.mjs';
|
|
12
|
+
import 'react';
|
|
13
|
+
import '@react-aria/live-announcer';
|
|
14
|
+
import ButtonView from '../../../../views/ButtonView.mjs';
|
|
15
|
+
import 'mobx';
|
|
16
|
+
import { useModalController } from '../../../../lib/controller/overlay/useModalController.mjs';
|
|
17
|
+
import '../../../../lib/controller/overlay/context.mjs';
|
|
18
|
+
|
|
19
|
+
const ConfirmUnsavedChangesModal = () => {
|
|
20
|
+
const stringFormatter = useLocalizedStringFormatter(locales);
|
|
21
|
+
const closeConfirmationController = useModalController().useConfirmationController();
|
|
22
|
+
if (closeConfirmationController) {
|
|
23
|
+
const { controller, confirm, cancel } = closeConfirmationController;
|
|
24
|
+
return /* @__PURE__ */ jsxs(Modal, { controller, children: [
|
|
25
|
+
/* @__PURE__ */ jsx(HeadingView, { children: stringFormatter.format("unsavedChangesConfirmationModal.heading") }),
|
|
26
|
+
/* @__PURE__ */ jsx(ContentView, { children: /* @__PURE__ */ jsx(TextView, { children: stringFormatter.format("unsavedChangesConfirmationModal.text") }) }),
|
|
27
|
+
/* @__PURE__ */ jsx(ActionGroupView, { children: /* @__PURE__ */ jsxs(Action, { closeModal: true, children: [
|
|
28
|
+
/* @__PURE__ */ jsx(Action, { onAction: confirm, children: /* @__PURE__ */ jsx(ButtonView, { color: "danger", children: stringFormatter.format(
|
|
29
|
+
"unsavedChangesConfirmationModal.close"
|
|
30
|
+
) }) }),
|
|
31
|
+
/* @__PURE__ */ jsx(Action, { onAction: cancel, children: /* @__PURE__ */ jsx(ButtonView, { color: "secondary", variant: "soft", children: stringFormatter.format(
|
|
32
|
+
"unsavedChangesConfirmationModal.keepOpen"
|
|
33
|
+
) }) })
|
|
34
|
+
] }) })
|
|
35
|
+
] });
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
export { ConfirmUnsavedChangesModal, ConfirmUnsavedChangesModal as default };
|
|
40
|
+
//# sourceMappingURL=ConfirmUnsavedChangesModal.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfirmUnsavedChangesModal.mjs","sources":["../../../../../../../../src/components/Modal/components/ConfirmUnsavedChangesModal/ConfirmUnsavedChangesModal.tsx"],"sourcesContent":["import ContentView from \"@/views/ContentView\";\nimport HeadingView from \"@/views/HeadingView\";\nimport type { FC } from \"react\";\nimport { useLocalizedStringFormatter } from \"react-aria\";\nimport locales from \"../../locales/*.locale.json\";\nimport Modal from \"@/components/Modal/Modal\";\nimport TextView from \"@/views/TextView\";\nimport ActionGroupView from \"@/views/ActionGroupView\";\nimport Action from \"@/components/Action\";\nimport ButtonView from \"@/views/ButtonView\";\nimport { useModalController } from \"@/lib/controller\";\n\nexport const ConfirmUnsavedChangesModal: FC = () => {\n const stringFormatter = useLocalizedStringFormatter(locales);\n const closeConfirmationController =\n useModalController().useConfirmationController();\n\n if (closeConfirmationController) {\n const { controller, confirm, cancel } = closeConfirmationController;\n\n return (\n <Modal controller={controller}>\n <HeadingView>\n {stringFormatter.format(\"unsavedChangesConfirmationModal.heading\")}\n </HeadingView>\n <ContentView>\n <TextView>\n {stringFormatter.format(\"unsavedChangesConfirmationModal.text\")}\n </TextView>\n </ContentView>\n <ActionGroupView>\n <Action closeModal>\n <Action onAction={confirm}>\n <ButtonView color=\"danger\">\n {stringFormatter.format(\n \"unsavedChangesConfirmationModal.close\",\n )}\n </ButtonView>\n </Action>\n <Action onAction={cancel}>\n <ButtonView color=\"secondary\" variant=\"soft\">\n {stringFormatter.format(\n \"unsavedChangesConfirmationModal.keepOpen\",\n )}\n </ButtonView>\n </Action>\n </Action>\n </ActionGroupView>\n </Modal>\n );\n }\n};\n\nexport default ConfirmUnsavedChangesModal;\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAYO,MAAM,6BAAiC,MAAM;AAClD,EAAA,MAAM,eAAA,GAAkB,4BAA4B,OAAO,CAAA;AAC3D,EAAA,MAAM,2BAAA,GACJ,kBAAA,EAAmB,CAAE,yBAAA,EAA0B;AAEjD,EAAA,IAAI,2BAAA,EAA6B;AAC/B,IAAA,MAAM,EAAE,UAAA,EAAY,OAAA,EAAS,MAAA,EAAO,GAAI,2BAAA;AAExC,IAAA,uBACE,IAAA,CAAC,SAAM,UAAA,EACL,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,WAAA,EAAA,EACE,QAAA,EAAA,eAAA,CAAgB,MAAA,CAAO,yCAAyC,CAAA,EACnE,CAAA;AAAA,sBACA,GAAA,CAAC,eACC,QAAA,kBAAA,GAAA,CAAC,QAAA,EAAA,EACE,0BAAgB,MAAA,CAAO,sCAAsC,GAChE,CAAA,EACF,CAAA;AAAA,sBACA,GAAA,CAAC,eAAA,EAAA,EACC,QAAA,kBAAA,IAAA,CAAC,MAAA,EAAA,EAAO,YAAU,IAAA,EAChB,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,UAAO,QAAA,EAAU,OAAA,EAChB,8BAAC,UAAA,EAAA,EAAW,KAAA,EAAM,UACf,QAAA,EAAA,eAAA,CAAgB,MAAA;AAAA,UACf;AAAA,WAEJ,CAAA,EACF,CAAA;AAAA,wBACA,GAAA,CAAC,MAAA,EAAA,EAAO,QAAA,EAAU,MAAA,EAChB,QAAA,kBAAA,GAAA,CAAC,cAAW,KAAA,EAAM,WAAA,EAAY,OAAA,EAAQ,MAAA,EACnC,QAAA,EAAA,eAAA,CAAgB,MAAA;AAAA,UACf;AAAA,WAEJ,CAAA,EACF;AAAA,OAAA,EACF,CAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AACF;;;;"}
|
|
@@ -5,11 +5,11 @@ import styles from './Overlay.module.scss.mjs';
|
|
|
5
5
|
import clsx from 'clsx';
|
|
6
6
|
import 'mobx';
|
|
7
7
|
import 'react';
|
|
8
|
-
import { useOverlayController } from '../../lib/controller/overlay/useOverlayController.mjs';
|
|
9
8
|
import '../../lib/propsContext/propsContext.mjs';
|
|
10
9
|
import 'remeda';
|
|
11
10
|
import '@react-aria/utils';
|
|
12
11
|
import 'dot-prop';
|
|
12
|
+
import { useOverlayController } from '../../lib/controller/overlay/useOverlayController.mjs';
|
|
13
13
|
import { OverlayContextProvider } from '../../lib/controller/overlay/OverlayContextProvider.mjs';
|
|
14
14
|
import OverlayContentView from '../../views/OverlayContentView.mjs';
|
|
15
15
|
|
|
@@ -22,19 +22,15 @@ const Overlay = (props) => {
|
|
|
22
22
|
overlayType = "Modal",
|
|
23
23
|
isDefaultOpen,
|
|
24
24
|
isOpen: isOpenFromProps,
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
onOpenChange,
|
|
28
|
-
ref
|
|
25
|
+
ref,
|
|
26
|
+
...controllerOptions
|
|
29
27
|
} = props;
|
|
30
28
|
const controllerFromContext = useOverlayController(overlayType, {
|
|
31
29
|
reuseControllerFromContext: true,
|
|
32
|
-
isDefaultOpen
|
|
33
|
-
onClose,
|
|
34
|
-
onOpen,
|
|
35
|
-
onOpenChange
|
|
30
|
+
isDefaultOpen
|
|
36
31
|
});
|
|
37
32
|
const controller = controllerFromProps ?? controllerFromContext;
|
|
33
|
+
controller.useUpdateOptions(controllerOptions);
|
|
38
34
|
const isOpen = isOpenFromProps ?? controller.useIsOpen();
|
|
39
35
|
const rootClassName = clsx(styles.overlay, className);
|
|
40
36
|
return /* @__PURE__ */ jsx(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Overlay.mjs","sources":["../../../../../../src/components/Overlay/Overlay.tsx"],"sourcesContent":["import type { FC, PropsWithChildren, Ref } from \"react\";\nimport styles from \"./Overlay.module.scss\";\nimport clsx from \"clsx\";\nimport type { OverlayController } from \"@/lib/controller\";\nimport { useOverlayController } from \"@/lib/controller\";\nimport OverlayContextProvider from \"@/lib/controller/overlay/OverlayContextProvider\";\nimport type { PropsWithClassName } from \"@/lib/types/props\";\nimport OverlayContentView from \"@/views/OverlayContentView\";\nimport type {\n OverlayCloseHandler,\n OverlayOpenHandler,\n OverlayOpenStateHandler,\n} from \"@/lib/controller/overlay/OverlayController\";\n\nexport interface OverlayProps extends PropsWithChildren, PropsWithClassName {\n ref?: Ref<HTMLDivElement>;\n /** The controller to control the overlay state. */\n controller?: OverlayController;\n /** Whether the overlay can be closed by clicking outside of it. */\n isDismissable?: boolean;\n /** Whether the overlay is a modal or a light box. */\n overlayType?: \"Modal\" | \"LightBox\";\n isOpen?: boolean;\n isDefaultOpen?: boolean;\n onOpen?: OverlayOpenHandler;\n onClose?: OverlayCloseHandler;\n onOpenChange?: OverlayOpenStateHandler;\n}\n\nexport const Overlay: FC<OverlayProps> = (props) => {\n const {\n controller: controllerFromProps,\n children,\n isDismissable = true,\n className,\n overlayType = \"Modal\",\n isDefaultOpen,\n isOpen: isOpenFromProps,\n
|
|
1
|
+
{"version":3,"file":"Overlay.mjs","sources":["../../../../../../src/components/Overlay/Overlay.tsx"],"sourcesContent":["import type { FC, PropsWithChildren, Ref } from \"react\";\nimport styles from \"./Overlay.module.scss\";\nimport clsx from \"clsx\";\nimport type { OverlayController } from \"@/lib/controller\";\nimport { useOverlayController } from \"@/lib/controller\";\nimport OverlayContextProvider from \"@/lib/controller/overlay/OverlayContextProvider\";\nimport type { PropsWithClassName } from \"@/lib/types/props\";\nimport OverlayContentView from \"@/views/OverlayContentView\";\nimport type {\n OverlayCloseHandler,\n OverlayOpenHandler,\n OverlayOpenStateHandler,\n} from \"@/lib/controller/overlay/OverlayController\";\n\nexport interface OverlayProps extends PropsWithChildren, PropsWithClassName {\n ref?: Ref<HTMLDivElement>;\n /** The controller to control the overlay state. */\n controller?: OverlayController;\n /** Whether the overlay can be closed by clicking outside of it. */\n isDismissable?: boolean;\n /** Whether the overlay is a modal or a light box. */\n overlayType?: \"Modal\" | \"LightBox\";\n isOpen?: boolean;\n isDefaultOpen?: boolean;\n onOpen?: OverlayOpenHandler;\n onClose?: OverlayCloseHandler;\n onOpenChange?: OverlayOpenStateHandler;\n}\n\nexport const Overlay: FC<OverlayProps> = (props) => {\n const {\n controller: controllerFromProps,\n children,\n isDismissable = true,\n className,\n overlayType = \"Modal\",\n isDefaultOpen,\n isOpen: isOpenFromProps,\n ref,\n ...controllerOptions\n } = props;\n\n const controllerFromContext = useOverlayController(overlayType, {\n reuseControllerFromContext: true,\n isDefaultOpen,\n });\n\n const controller = controllerFromProps ?? controllerFromContext;\n controller.useUpdateOptions(controllerOptions);\n\n const isOpen = isOpenFromProps ?? controller.useIsOpen();\n\n const rootClassName = clsx(styles.overlay, className);\n\n return (\n <OverlayContentView\n onOpenChange={controller.setOpen}\n isOpen={isOpen}\n ref={ref}\n isDismissable={isDismissable}\n className={rootClassName}\n >\n <OverlayContextProvider type=\"Modal\" controller={controller}>\n {children}\n </OverlayContextProvider>\n </OverlayContentView>\n );\n};\n\nexport default Overlay;\n"],"names":[],"mappings":";;;;;;;;;;;;;AA6BO,MAAM,OAAA,GAA4B,CAAC,KAAA,KAAU;AAClD,EAAA,MAAM;AAAA,IACJ,UAAA,EAAY,mBAAA;AAAA,IACZ,QAAA;AAAA,IACA,aAAA,GAAgB,IAAA;AAAA,IAChB,SAAA;AAAA,IACA,WAAA,GAAc,OAAA;AAAA,IACd,aAAA;AAAA,IACA,MAAA,EAAQ,eAAA;AAAA,IACR,GAAA;AAAA,IACA,GAAG;AAAA,GACL,GAAI,KAAA;AAEJ,EAAA,MAAM,qBAAA,GAAwB,qBAAqB,WAAA,EAAa;AAAA,IAC9D,0BAAA,EAA4B,IAAA;AAAA,IAC5B;AAAA,GACD,CAAA;AAED,EAAA,MAAM,aAAa,mBAAA,IAAuB,qBAAA;AAC1C,EAAA,UAAA,CAAW,iBAAiB,iBAAiB,CAAA;AAE7C,EAAA,MAAM,MAAA,GAAS,eAAA,IAAmB,UAAA,CAAW,SAAA,EAAU;AAEvD,EAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,MAAA,CAAO,OAAA,EAAS,SAAS,CAAA;AAEpD,EAAA,uBACE,GAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,cAAc,UAAA,CAAW,OAAA;AAAA,MACzB,MAAA;AAAA,MACA,GAAA;AAAA,MACA,aAAA;AAAA,MACA,SAAA,EAAW,aAAA;AAAA,MAEX,QAAA,kBAAA,GAAA,CAAC,sBAAA,EAAA,EAAuB,IAAA,EAAK,OAAA,EAAQ,YAClC,QAAA,EACH;AAAA;AAAA,GACF;AAEJ;;;;"}
|
|
@@ -4,11 +4,11 @@ import { jsx } from 'react/jsx-runtime';
|
|
|
4
4
|
import 'react';
|
|
5
5
|
import clsx from 'clsx';
|
|
6
6
|
import 'mobx';
|
|
7
|
-
import { useOverlayController } from '../../lib/controller/overlay/useOverlayController.mjs';
|
|
8
7
|
import '../../lib/propsContext/propsContext.mjs';
|
|
9
8
|
import 'remeda';
|
|
10
9
|
import '@react-aria/utils';
|
|
11
10
|
import 'dot-prop';
|
|
11
|
+
import { useOverlayController } from '../../lib/controller/overlay/useOverlayController.mjs';
|
|
12
12
|
import { flowComponent } from '../../lib/componentFactory/flowComponent.mjs';
|
|
13
13
|
import { OverlayContextProvider } from '../../lib/controller/overlay/OverlayContextProvider.mjs';
|
|
14
14
|
import styles from './Popover.module.scss.mjs';
|
|
@@ -16,10 +16,10 @@ import { flowComponent } from '../../lib/componentFactory/flowComponent.mjs';
|
|
|
16
16
|
import { Options } from '../Options/Options.mjs';
|
|
17
17
|
import { TunnelProvider, TunnelExit } from '@mittwald/react-tunnel';
|
|
18
18
|
import 'mobx';
|
|
19
|
-
import { useOverlayController } from '../../lib/controller/overlay/useOverlayController.mjs';
|
|
20
19
|
import 'remeda';
|
|
21
20
|
import '@react-aria/utils';
|
|
22
21
|
import 'dot-prop';
|
|
22
|
+
import { useOverlayController } from '../../lib/controller/overlay/useOverlayController.mjs';
|
|
23
23
|
import { useFieldComponent } from '../../lib/hooks/useFieldComponent.mjs';
|
|
24
24
|
|
|
25
25
|
const Select = flowComponent("Select", (props) => {
|
|
@@ -1,9 +1,13 @@
|
|
|
1
1
|
"use client"
|
|
2
2
|
/* */
|
|
3
|
-
import { jsx } from 'react/jsx-runtime';
|
|
3
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
|
+
import { ConfirmUnsavedChangesModal } from '../../../../components/Modal/components/ConfirmUnsavedChangesModal/ConfirmUnsavedChangesModal.mjs';
|
|
4
5
|
import { useHotkeySubmit } from './useHotkeySubmit.mjs';
|
|
5
6
|
import { FormContextProvider } from '../FormContextProvider/FormContextProvider.mjs';
|
|
7
|
+
import 'mobx';
|
|
6
8
|
import { useId, useMemo, useRef } from 'react';
|
|
9
|
+
import { useModalController } from '../../../../lib/controller/overlay/useModalController.mjs';
|
|
10
|
+
import '../../../../lib/controller/overlay/context.mjs';
|
|
7
11
|
import { FormProvider } from 'react-hook-form';
|
|
8
12
|
|
|
9
13
|
const DefaultFormComponent = (p) => /* @__PURE__ */ jsx("form", { ...p });
|
|
@@ -22,7 +26,11 @@ function Form(props) {
|
|
|
22
26
|
const formId = idProp ?? newFormId;
|
|
23
27
|
const FormComponent = useMemo(() => formComponent, [formId]);
|
|
24
28
|
const afterSubmitCallback = useRef(void 0);
|
|
25
|
-
const { isSubmitting, isValidating } = form.formState;
|
|
29
|
+
const { isSubmitting, isValidating, isDirty } = form.formState;
|
|
30
|
+
const modalController = useModalController();
|
|
31
|
+
modalController.useUpdateOptions({
|
|
32
|
+
confirmOnClose: isDirty
|
|
33
|
+
});
|
|
26
34
|
const handleSubmitResult = (result) => {
|
|
27
35
|
if (typeof result === "function") {
|
|
28
36
|
afterSubmitCallback.current = result;
|
|
@@ -34,6 +42,7 @@ function Form(props) {
|
|
|
34
42
|
if (isSubmitting || isValidating) {
|
|
35
43
|
return;
|
|
36
44
|
}
|
|
45
|
+
modalController.confirmClose();
|
|
37
46
|
return form.handleSubmit((values, event) => {
|
|
38
47
|
const submitResult = onSubmit(values, event);
|
|
39
48
|
if (submitResult instanceof Promise) {
|
|
@@ -49,25 +58,28 @@ function Form(props) {
|
|
|
49
58
|
ref,
|
|
50
59
|
handleSubmit
|
|
51
60
|
});
|
|
52
|
-
return /* @__PURE__ */
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
61
|
+
return /* @__PURE__ */ jsxs(FormProvider, { ...form, children: [
|
|
62
|
+
/* @__PURE__ */ jsx(
|
|
63
|
+
FormContextProvider,
|
|
64
|
+
{
|
|
65
|
+
form,
|
|
66
|
+
isReadOnly,
|
|
67
|
+
id: formId,
|
|
68
|
+
onAfterSuccessFeedback,
|
|
69
|
+
children: /* @__PURE__ */ jsx(
|
|
70
|
+
FormComponent,
|
|
71
|
+
{
|
|
72
|
+
...formProps,
|
|
73
|
+
ref: refWithHotkeySubmit,
|
|
74
|
+
id: formId,
|
|
75
|
+
onSubmit: handleSubmit,
|
|
76
|
+
children
|
|
77
|
+
}
|
|
78
|
+
)
|
|
79
|
+
}
|
|
80
|
+
),
|
|
81
|
+
/* @__PURE__ */ jsx(ConfirmUnsavedChangesModal, {})
|
|
82
|
+
] });
|
|
71
83
|
}
|
|
72
84
|
|
|
73
85
|
export { Form };
|