@mittwald/flow-react-components 0.2.0-alpha.327 → 0.2.0-alpha.328

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 CHANGED
@@ -3,6 +3,12 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [0.2.0-alpha.328](https://github.com/mittwald/flow/compare/0.2.0-alpha.327...0.2.0-alpha.328) (2025-07-09)
7
+
8
+ ### Bug Fixes
9
+
10
+ * **Button:** state props should override Action state ([45f6106](https://github.com/mittwald/flow/commit/45f61062772142d482ec0c253b61cd801d78ebf4))
11
+
6
12
  # [0.2.0-alpha.327](https://github.com/mittwald/flow/compare/0.2.0-alpha.326...0.2.0-alpha.327) (2025-07-08)
7
13
 
8
14
  ### Features
@@ -1,9 +1,9 @@
1
1
  "use client"
2
2
  /* */
3
3
  import { jsx } from 'react/jsx-runtime';
4
- import 'react';
5
4
  import { ActionModel } from './models/ActionModel.mjs';
6
5
  import '../../lib/propsContext/propsContext.mjs';
6
+ import 'react';
7
7
  import '../../lib/viewComponentContext/viewComponentContext.mjs';
8
8
  import { dynamic } from '../../lib/propsContext/dynamicProps/dynamic.mjs';
9
9
  import { PropsContextProvider } from '../../lib/propsContext/PropsContextProvider.mjs';
@@ -24,15 +24,22 @@ const actionButtonContext = {
24
24
  }
25
25
  return isConfirmationButton ? confirmAction.execute : action.execute;
26
26
  }),
27
- isPending: dynamic((props) => useActionButtonState(props) === "isPending"),
28
- isSucceeded: dynamic(
29
- (props) => useActionButtonState(props) === "isSucceeded"
30
- ),
31
- isFailed: dynamic((props) => useActionButtonState(props) === "isFailed"),
27
+ isPending: dynamic((props) => {
28
+ const actionState = useActionButtonState(props);
29
+ return props.isPending ?? actionState === "isPending";
30
+ }),
31
+ isSucceeded: dynamic((props) => {
32
+ const actionState = useActionButtonState(props);
33
+ return props.isSucceeded ?? actionState === "isSucceeded";
34
+ }),
35
+ isFailed: dynamic((props) => {
36
+ const actionState = useActionButtonState(props);
37
+ return props.isFailed ?? actionState === "isFailed";
38
+ }),
32
39
  "aria-disabled": dynamic((props) => {
33
40
  const state = useActionButtonState(props);
34
41
  const someActionInContextIsBusy = useActionStateContext().useIsBusy();
35
- return state === "isExecuting" || someActionInContextIsBusy;
42
+ return props["aria-disabled"] ?? (state === "isExecuting" || someActionInContextIsBusy);
36
43
  })
37
44
  };
38
45
  const Action = flowComponent("Action", (props) => {
@@ -1 +1 @@
1
- {"version":3,"file":"Action.mjs","sources":["../../../../../../src/components/Action/Action.tsx"],"sourcesContent":["import React from \"react\";\nimport { 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\";\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) => useActionButtonState(props) === \"isPending\"),\n\n isSucceeded: dynamic(\n (props) => useActionButtonState(props) === \"isSucceeded\",\n ),\n\n isFailed: dynamic((props) => useActionButtonState(props) === \"isFailed\"),\n\n \"aria-disabled\": dynamic((props) => {\n const state = useActionButtonState(props);\n const someActionInContextIsBusy = useActionStateContext().useIsBusy();\n return state === \"isExecuting\" || someActionInContextIsBusy;\n }),\n};\n\nexport const Action = flowComponent(\"Action\", (props) => {\n const { children, actionModel: actionModelFromProps, ...actionProps } = props;\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 },\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} mergeInParentContext>\n {children}\n </PropsContextProvider>\n </ActionContextProvider>\n );\n});\n\nexport default Action;\n"],"names":["props"],"mappings":"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"}
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\";\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(\"Action\", (props) => {\n const { children, actionModel: actionModelFromProps, ...actionProps } = props;\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 },\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} mergeInParentContext>\n {children}\n </PropsContextProvider>\n </ActionContextProvider>\n );\n});\n\nexport default Action;\n"],"names":["props"],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- import { default as React } from 'react';
2
- export declare const Action: React.FunctionComponent<import('./types').ActionProps & React.RefAttributes<HTMLDivElement>>;
1
+ export declare const Action: import('react').FunctionComponent<import('./types').ActionProps & import('react').RefAttributes<HTMLDivElement>>;
3
2
  export default Action;
4
3
  //# sourceMappingURL=Action.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Action.d.ts","sourceRoot":"","sources":["../../../../src/components/Action/Action.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAuC1B,eAAO,MAAM,MAAM,8FAiDjB,CAAC;AAEH,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"Action.d.ts","sourceRoot":"","sources":["../../../../src/components/Action/Action.tsx"],"names":[],"mappings":"AAgDA,eAAO,MAAM,MAAM,kHAiDjB,CAAC;AAEH,eAAe,MAAM,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mittwald/flow-react-components",
3
- "version": "0.2.0-alpha.327",
3
+ "version": "0.2.0-alpha.328",
4
4
  "type": "module",
5
5
  "description": "A React implementation of Flow, mittwald’s design system",
6
6
  "homepage": "https://mittwald.github.io/flow",
@@ -58,7 +58,7 @@
58
58
  "@chakra-ui/live-region": "^2.1.0",
59
59
  "@internationalized/string-compiler": "^3.2.6",
60
60
  "@mittwald/password-tools-js": "^2.1.4",
61
- "@mittwald/react-tunnel": "0.2.0-alpha.327",
61
+ "@mittwald/react-tunnel": "0.2.0-alpha.328",
62
62
  "@mittwald/react-use-promise": "^3.0.4",
63
63
  "@react-aria/form": "^3.0.16",
64
64
  "@react-aria/utils": "^3.29.0",
@@ -99,7 +99,7 @@
99
99
  "@faker-js/faker": "^9.8.0",
100
100
  "@internationalized/date": "^3.8.1",
101
101
  "@mittwald/flow-core": "",
102
- "@mittwald/flow-design-tokens": "0.2.0-alpha.327",
102
+ "@mittwald/flow-design-tokens": "0.2.0-alpha.328",
103
103
  "@mittwald/react-use-promise": "^3.0.4",
104
104
  "@mittwald/remote-dom-react": "1.2.2-mittwald.3",
105
105
  "@mittwald/typescript-config": "",
@@ -181,5 +181,5 @@
181
181
  "optional": true
182
182
  }
183
183
  },
184
- "gitHead": "e1a5b9242cacee54dd64f5ef58d93e14f8b558de"
184
+ "gitHead": "8d038f8eb693903f1000b4241bd9e90621d4d2ba"
185
185
  }