@mittwald/flow-react-components 0.2.0-alpha.385 → 0.2.0-alpha.387

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,16 @@
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.387](https://github.com/mittwald/flow/compare/0.2.0-alpha.386...0.2.0-alpha.387) (2025-08-06)
7
+
8
+ **Note:** Version bump only for package @mittwald/flow-react-components
9
+
10
+ # [0.2.0-alpha.386](https://github.com/mittwald/flow/compare/0.2.0-alpha.385...0.2.0-alpha.386) (2025-08-06)
11
+
12
+ ### Bug Fixes
13
+
14
+ * **Option:** fixes plain text childs in option ([#1822](https://github.com/mittwald/flow/issues/1822)) ([0a1f7a3](https://github.com/mittwald/flow/commit/0a1f7a31ee08d476f42168a9d6f5060b76d27dd9))
15
+
6
16
  # [0.2.0-alpha.385](https://github.com/mittwald/flow/compare/0.2.0-alpha.384...0.2.0-alpha.385) (2025-08-05)
7
17
 
8
18
  ### Bug Fixes
@@ -25,13 +25,12 @@ const Autocomplete = flowComponent("Autocomplete", (props) => {
25
25
  const controller = useOverlayController("Popover", {
26
26
  reuseControllerFromContext: false
27
27
  });
28
- const menuIsOpen = controller.useIsOpen();
29
28
  const focusWithin = useFocusWithin({
30
29
  onBlurWithin: controller.close
31
30
  });
32
31
  const inputProps = {
33
32
  onKeyDown: (e) => {
34
- if (e.key === "Enter" && menuIsOpen) {
33
+ if (e.key === "Enter" && controller.isOpen) {
35
34
  e.preventDefault();
36
35
  }
37
36
  },
@@ -70,7 +69,7 @@ const Autocomplete = flowComponent("Autocomplete", (props) => {
70
69
  const handleOnInputChange = (value) => {
71
70
  if (!value) {
72
71
  controller.close();
73
- } else if (!menuIsOpen) {
72
+ } else if (!controller.isOpen) {
74
73
  controller.open();
75
74
  }
76
75
  };
@@ -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} from \"react-aria\";\nexport interface AutocompleteProps\n extends PropsWithChildren,\n PropsWithClassName,\n FlowComponentProps,\n Omit<Aria.AutocompleteProps, \"children\" | \"onInputChange\" | \"inputValue\"> {}\n\n/** @flr-generate all */\nexport const Autocomplete = flowComponent(\"Autocomplete\", (props) => {\n const { children, ...rest } = props;\n\n const { contains } = Aria.useFilter({ sensitivity: \"base\" });\n const stringFormatter = useLocalizedStringFormatter(locales);\n const container = useRef(null);\n const triggerRef = useRef<HTMLInputElement>(null);\n\n const controller = useOverlayController(\"Popover\", {\n reuseControllerFromContext: false,\n });\n const menuIsOpen = controller.useIsOpen();\n\n const focusWithin = useFocusWithin({\n onBlurWithin: controller.close,\n });\n\n const inputProps: SearchFieldProps & TextFieldProps = {\n onKeyDown: (e) => {\n if (e.key === \"Enter\" && menuIsOpen) {\n e.preventDefault();\n }\n },\n ref: triggerRef,\n };\n\n const renderEmptyState = () => (\n <Text className={styles.empty}>\n {stringFormatter.format(\"autocomplete.empty\")}\n </Text>\n );\n\n const propsContext: PropsContext = {\n ContextMenu: {\n placement: \"bottom start\",\n controller,\n isNonModal: true,\n renderEmptyState: () => (\n <Text className={styles.empty}>\n {stringFormatter.format(\"autocomplete.empty\")}\n </Text>\n ),\n onAction: (key) => {\n const input = triggerRef.current;\n if (input) {\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n Object.getPrototypeOf(input),\n \"value\",\n )?.set;\n nativeInputValueSetter?.call(input, String(key));\n const event = new Event(\"change\", { bubbles: true });\n input.dispatchEvent(event);\n }\n },\n triggerRef,\n },\n SearchField: inputProps,\n TextField: inputProps,\n Option: {\n tunnelId: \"options\",\n },\n Popover: {\n className: styles.popover,\n },\n };\n\n const handleOnInputChange = (value: string) => {\n if (!value) {\n controller.close();\n } else if (!menuIsOpen) {\n controller.open();\n }\n };\n\n const handleOptionAction = (key: Aria.Key) => {\n const inputElement = triggerRef.current;\n if (inputElement) {\n // Set value on input element and trigger change event\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n window.HTMLInputElement.prototype,\n \"value\",\n )?.set;\n nativeInputValueSetter?.call(inputElement, String(key));\n const event = new Event(\"change\", { bubbles: true });\n inputElement.dispatchEvent(event);\n }\n controller.close();\n };\n\n return (\n <PropsContextProvider props={propsContext} mergeInParentContext>\n <div {...focusWithin.focusWithinProps} ref={container}>\n <UNSAFE_PortalProvider getContainer={() => container.current}>\n <Aria.Autocomplete\n onInputChange={handleOnInputChange}\n filter={contains}\n disableAutoFocusFirst\n {...rest}\n >\n {children}\n <Options\n onAction={handleOptionAction}\n triggerRef={triggerRef}\n controller={controller}\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 );\n});\n\nexport default Autocomplete;\n"],"names":[],"mappings":"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"}
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} from \"react-aria\";\nexport interface AutocompleteProps\n extends PropsWithChildren,\n PropsWithClassName,\n FlowComponentProps,\n Omit<Aria.AutocompleteProps, \"children\" | \"onInputChange\" | \"inputValue\"> {}\n\n/** @flr-generate all */\nexport const Autocomplete = flowComponent(\"Autocomplete\", (props) => {\n const { children, ...rest } = props;\n\n const { contains } = Aria.useFilter({ sensitivity: \"base\" });\n const stringFormatter = useLocalizedStringFormatter(locales);\n const container = useRef(null);\n const triggerRef = useRef<HTMLInputElement>(null);\n\n const controller = useOverlayController(\"Popover\", {\n reuseControllerFromContext: false,\n });\n\n const focusWithin = useFocusWithin({\n onBlurWithin: controller.close,\n });\n\n const inputProps: SearchFieldProps & TextFieldProps = {\n onKeyDown: (e) => {\n if (e.key === \"Enter\" && controller.isOpen) {\n e.preventDefault();\n }\n },\n ref: triggerRef,\n };\n\n const renderEmptyState = () => (\n <Text className={styles.empty}>\n {stringFormatter.format(\"autocomplete.empty\")}\n </Text>\n );\n\n const propsContext: PropsContext = {\n ContextMenu: {\n placement: \"bottom start\",\n controller,\n isNonModal: true,\n renderEmptyState: () => (\n <Text className={styles.empty}>\n {stringFormatter.format(\"autocomplete.empty\")}\n </Text>\n ),\n onAction: (key) => {\n const input = triggerRef.current;\n if (input) {\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n Object.getPrototypeOf(input),\n \"value\",\n )?.set;\n nativeInputValueSetter?.call(input, String(key));\n const event = new Event(\"change\", { bubbles: true });\n input.dispatchEvent(event);\n }\n },\n triggerRef,\n },\n SearchField: inputProps,\n TextField: inputProps,\n Option: {\n tunnelId: \"options\",\n },\n Popover: {\n className: styles.popover,\n },\n };\n\n const handleOnInputChange = (value: string) => {\n if (!value) {\n controller.close();\n } else if (!controller.isOpen) {\n controller.open();\n }\n };\n\n const handleOptionAction = (key: Aria.Key) => {\n const inputElement = triggerRef.current;\n if (inputElement) {\n // Set value on input element and trigger change event\n const nativeInputValueSetter = Object.getOwnPropertyDescriptor(\n window.HTMLInputElement.prototype,\n \"value\",\n )?.set;\n nativeInputValueSetter?.call(inputElement, String(key));\n const event = new Event(\"change\", { bubbles: true });\n inputElement.dispatchEvent(event);\n }\n controller.close();\n };\n\n return (\n <PropsContextProvider props={propsContext} mergeInParentContext>\n <div {...focusWithin.focusWithinProps} ref={container}>\n <UNSAFE_PortalProvider getContainer={() => container.current}>\n <Aria.Autocomplete\n onInputChange={handleOnInputChange}\n filter={contains}\n disableAutoFocusFirst\n {...rest}\n >\n {children}\n <Options\n onAction={handleOptionAction}\n triggerRef={triggerRef}\n controller={controller}\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 );\n});\n\nexport default Autocomplete;\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AA4BO,MAAM,YAAe,GAAA,aAAA,CAAc,cAAgB,EAAA,CAAC,KAAU,KAAA;AACnE,EAAA,MAAM,EAAE,QAAA,EAAU,GAAG,IAAA,EAAS,GAAA,KAAA;AAE9B,EAAM,MAAA,EAAE,UAAa,GAAA,IAAA,CAAK,UAAU,EAAE,WAAA,EAAa,QAAQ,CAAA;AAC3D,EAAM,MAAA,eAAA,GAAkB,4BAA4B,OAAO,CAAA;AAC3D,EAAM,MAAA,SAAA,GAAY,OAAO,IAAI,CAAA;AAC7B,EAAM,MAAA,UAAA,GAAa,OAAyB,IAAI,CAAA;AAEhD,EAAM,MAAA,UAAA,GAAa,qBAAqB,SAAW,EAAA;AAAA,IACjD,0BAA4B,EAAA;AAAA,GAC7B,CAAA;AAED,EAAA,MAAM,cAAc,cAAe,CAAA;AAAA,IACjC,cAAc,UAAW,CAAA;AAAA,GAC1B,CAAA;AAED,EAAA,MAAM,UAAgD,GAAA;AAAA,IACpD,SAAA,EAAW,CAAC,CAAM,KAAA;AAChB,MAAA,IAAI,CAAE,CAAA,GAAA,KAAQ,OAAW,IAAA,UAAA,CAAW,MAAQ,EAAA;AAC1C,QAAA,CAAA,CAAE,cAAe,EAAA;AAAA;AACnB,KACF;AAAA,IACA,GAAK,EAAA;AAAA,GACP;AAEA,EAAM,MAAA,gBAAA,GAAmB,sBACvB,GAAA,CAAC,IAAK,EAAA,EAAA,SAAA,EAAW,OAAO,KACrB,EAAA,QAAA,EAAA,eAAA,CAAgB,MAAO,CAAA,oBAAoB,CAC9C,EAAA,CAAA;AAGF,EAAA,MAAM,YAA6B,GAAA;AAAA,IACjC,WAAa,EAAA;AAAA,MACX,SAAW,EAAA,cAAA;AAAA,MACX,UAAA;AAAA,MACA,UAAY,EAAA,IAAA;AAAA,MACZ,gBAAA,EAAkB,sBAChB,GAAA,CAAC,IAAK,EAAA,EAAA,SAAA,EAAW,OAAO,KACrB,EAAA,QAAA,EAAA,eAAA,CAAgB,MAAO,CAAA,oBAAoB,CAC9C,EAAA,CAAA;AAAA,MAEF,QAAA,EAAU,CAAC,GAAQ,KAAA;AACjB,QAAA,MAAM,QAAQ,UAAW,CAAA,OAAA;AACzB,QAAA,IAAI,KAAO,EAAA;AACT,UAAA,MAAM,yBAAyB,MAAO,CAAA,wBAAA;AAAA,YACpC,MAAA,CAAO,eAAe,KAAK,CAAA;AAAA,YAC3B;AAAA,WACC,EAAA,GAAA;AACH,UAAA,sBAAA,EAAwB,IAAK,CAAA,KAAA,EAAO,MAAO,CAAA,GAAG,CAAC,CAAA;AAC/C,UAAA,MAAM,QAAQ,IAAI,KAAA,CAAM,UAAU,EAAE,OAAA,EAAS,MAAM,CAAA;AACnD,UAAA,KAAA,CAAM,cAAc,KAAK,CAAA;AAAA;AAC3B,OACF;AAAA,MACA;AAAA,KACF;AAAA,IACA,WAAa,EAAA,UAAA;AAAA,IACb,SAAW,EAAA,UAAA;AAAA,IACX,MAAQ,EAAA;AAAA,MACN,QAAU,EAAA;AAAA,KACZ;AAAA,IACA,OAAS,EAAA;AAAA,MACP,WAAW,MAAO,CAAA;AAAA;AACpB,GACF;AAEA,EAAM,MAAA,mBAAA,GAAsB,CAAC,KAAkB,KAAA;AAC7C,IAAA,IAAI,CAAC,KAAO,EAAA;AACV,MAAA,UAAA,CAAW,KAAM,EAAA;AAAA,KACnB,MAAA,IAAW,CAAC,UAAA,CAAW,MAAQ,EAAA;AAC7B,MAAA,UAAA,CAAW,IAAK,EAAA;AAAA;AAClB,GACF;AAEA,EAAM,MAAA,kBAAA,GAAqB,CAAC,GAAkB,KAAA;AAC5C,IAAA,MAAM,eAAe,UAAW,CAAA,OAAA;AAChC,IAAA,IAAI,YAAc,EAAA;AAEhB,MAAA,MAAM,yBAAyB,MAAO,CAAA,wBAAA;AAAA,QACpC,OAAO,gBAAiB,CAAA,SAAA;AAAA,QACxB;AAAA,OACC,EAAA,GAAA;AACH,MAAA,sBAAA,EAAwB,IAAK,CAAA,YAAA,EAAc,MAAO,CAAA,GAAG,CAAC,CAAA;AACtD,MAAA,MAAM,QAAQ,IAAI,KAAA,CAAM,UAAU,EAAE,OAAA,EAAS,MAAM,CAAA;AACnD,MAAA,YAAA,CAAa,cAAc,KAAK,CAAA;AAAA;AAElC,IAAA,UAAA,CAAW,KAAM,EAAA;AAAA,GACnB;AAEA,EAAA,2BACG,oBAAqB,EAAA,EAAA,KAAA,EAAO,cAAc,oBAAoB,EAAA,IAAA,EAC7D,8BAAC,KAAK,EAAA,EAAA,GAAG,WAAY,CAAA,gBAAA,EAAkB,KAAK,SAC1C,EAAA,QAAA,kBAAA,GAAA,CAAC,yBAAsB,YAAc,EAAA,MAAM,UAAU,OACnD,EAAA,QAAA,kBAAA,IAAA;AAAA,IAAC,IAAK,CAAA,YAAA;AAAA,IAAL;AAAA,MACC,aAAe,EAAA,mBAAA;AAAA,MACf,MAAQ,EAAA,QAAA;AAAA,MACR,qBAAqB,EAAA,IAAA;AAAA,MACpB,GAAG,IAAA;AAAA,MAEH,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,wBACD,GAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,QAAU,EAAA,kBAAA;AAAA,YACV,UAAA;AAAA,YACA,UAAA;AAAA,YACA,gBAAA;AAAA,YACA,UAAU,EAAA,IAAA;AAAA,YACV,SAAU,EAAA,cAAA;AAAA,YAEV,QAAA,kBAAA,GAAA,CAAC,UAAW,EAAA,EAAA,EAAA,EAAG,SAAU,EAAA;AAAA;AAAA;AAC3B;AAAA;AAAA,GACF,EACF,GACF,CACF,EAAA,CAAA;AAEJ,CAAC;;;;"}
@@ -7,10 +7,10 @@ import { InlineCode } from '../InlineCode/InlineCode.mjs';
7
7
  import { Link } from '../Link/Link.mjs';
8
8
  import { Separator } from '../Separator/Separator.mjs';
9
9
  import { Text } from '../Text/Text.mjs';
10
- import React, { isValidElement, Children } from 'react';
10
+ import { Children, isValidElement } from 'react';
11
11
  import ReactMarkdown from 'react-markdown';
12
12
  import styles from './Markdown.module.scss.mjs';
13
- import { isRemoteTextRenderProps } from '../../lib/react/remote.mjs';
13
+ import { extractTextFromFirstChild } from '../../lib/react/remote.mjs';
14
14
 
15
15
  const Markdown = (props) => {
16
16
  const { children, color = "default", ...rest } = props;
@@ -45,8 +45,7 @@ const Markdown = (props) => {
45
45
  ol: (props2) => /* @__PURE__ */ jsx(Text, { color: textColor, children: /* @__PURE__ */ jsx("ol", { children: props2.children }) }),
46
46
  blockquote: (props2) => /* @__PURE__ */ jsx(Text, { color: textColor, children: /* @__PURE__ */ jsx("blockquote", { children: props2.children }) })
47
47
  };
48
- const firstChild = React.Children.toArray(children)[0];
49
- const textContent = typeof firstChild === "string" ? firstChild : isValidElement(firstChild) && isRemoteTextRenderProps(firstChild.props) ? firstChild.props.remote.data : "";
48
+ const textContent = extractTextFromFirstChild(children);
50
49
  return /* @__PURE__ */ jsx("div", { className: styles.markdown, ...rest, children: /* @__PURE__ */ jsx(ReactMarkdown, { components, children: textContent }) });
51
50
  };
52
51
 
@@ -1 +1 @@
1
- {"version":3,"file":"Markdown.mjs","sources":["../../../../../../src/components/Markdown/Markdown.tsx"],"sourcesContent":["import { CodeBlock } from \"@/components/CodeBlock\";\nimport { Heading } from \"@/components/Heading\";\nimport { InlineCode } from \"@/components/InlineCode\";\nimport { Link } from \"@/components/Link\";\nimport { Separator } from \"@/components/Separator\";\nimport { Text } from \"@/components/Text\";\nimport type { FC, ReactNode } from \"react\";\nimport React, { Children, isValidElement } from \"react\";\nimport type { Components, Options } from \"react-markdown\";\nimport ReactMarkdown from \"react-markdown\";\nimport styles from \"./Markdown.module.scss\";\nimport { isRemoteTextRenderProps } from \"@/lib/react/remote\";\n\nexport interface MarkdownProps extends Omit<Options, \"components\"> {\n /** The color schema of the markdown component. */\n color?: \"dark\" | \"light\" | \"default\";\n}\n\n/** @flr-generate all */\nexport const Markdown: FC<MarkdownProps> = (props) => {\n const { children, color = \"default\", ...rest } = props;\n\n const headingAndLinkColor = color === \"default\" ? \"primary\" : color;\n const textColor = color === \"default\" ? undefined : color;\n\n const components: Components = {\n a: (props) => (\n <Link target=\"_blank\" color={headingAndLinkColor} href={props.href}>\n {props.children}\n </Link>\n ),\n p: (props) => (\n <Text elementType=\"p\" color={textColor}>\n {props.children}\n </Text>\n ),\n code: (props) => <InlineCode color={color}>{props.children}</InlineCode>,\n h1: (props) => (\n <Heading level={1} color={headingAndLinkColor}>\n {props.children}\n </Heading>\n ),\n h2: (props) => (\n <Heading level={2} color={headingAndLinkColor}>\n {props.children}\n </Heading>\n ),\n h3: (props) => (\n <Heading level={3} color={headingAndLinkColor}>\n {props.children}\n </Heading>\n ),\n h4: (props) => (\n <Heading level={4} color={headingAndLinkColor}>\n {props.children}\n </Heading>\n ),\n h5: (props) => (\n <Heading level={5} color={headingAndLinkColor}>\n {props.children}\n </Heading>\n ),\n h6: (props) => (\n <Heading level={6} color={headingAndLinkColor}>\n {props.children}\n </Heading>\n ),\n hr: () => <Separator />,\n pre: (props) => {\n const preElementContent = Children.toArray(props.children)[0];\n\n return (\n <CodeBlock\n copyable={false}\n color={color}\n language={\n isValidElement<{ className?: string }>(preElementContent) &&\n preElementContent.props.className\n ? preElementContent.props.className.replace(\"language-\", \"\")\n : undefined\n }\n code={String(\n isValidElement<{ children: string }>(preElementContent)\n ? preElementContent.props.children\n : preElementContent,\n )}\n />\n );\n },\n ul: (props) => (\n <Text color={textColor}>\n <ul>{props.children as ReactNode}</ul>\n </Text>\n ),\n ol: (props) => (\n <Text color={textColor}>\n <ol>{props.children as ReactNode}</ol>\n </Text>\n ),\n blockquote: (props) => (\n <Text color={textColor}>\n <blockquote>{props.children}</blockquote>\n </Text>\n ),\n };\n\n const firstChild = React.Children.toArray(children)[0];\n\n const textContent =\n typeof firstChild === \"string\"\n ? firstChild\n : isValidElement(firstChild) && isRemoteTextRenderProps(firstChild.props)\n ? firstChild.props.remote.data\n : \"\";\n\n return (\n <div className={styles.markdown} {...rest}>\n <ReactMarkdown components={components}>{textContent}</ReactMarkdown>\n </div>\n );\n};\n\nexport default Markdown;\n"],"names":["props"],"mappings":"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"}
1
+ {"version":3,"file":"Markdown.mjs","sources":["../../../../../../src/components/Markdown/Markdown.tsx"],"sourcesContent":["import { CodeBlock } from \"@/components/CodeBlock\";\nimport { Heading } from \"@/components/Heading\";\nimport { InlineCode } from \"@/components/InlineCode\";\nimport { Link } from \"@/components/Link\";\nimport { Separator } from \"@/components/Separator\";\nimport { Text } from \"@/components/Text\";\nimport type { FC, ReactNode } from \"react\";\nimport React, { Children, isValidElement } from \"react\";\nimport type { Components, Options } from \"react-markdown\";\nimport ReactMarkdown from \"react-markdown\";\nimport styles from \"./Markdown.module.scss\";\nimport { extractTextFromFirstChild } from \"@/lib/react/remote\";\n\nexport interface MarkdownProps extends Omit<Options, \"components\"> {\n /** The color schema of the markdown component. */\n color?: \"dark\" | \"light\" | \"default\";\n}\n\n/** @flr-generate all */\nexport const Markdown: FC<MarkdownProps> = (props) => {\n const { children, color = \"default\", ...rest } = props;\n\n const headingAndLinkColor = color === \"default\" ? \"primary\" : color;\n const textColor = color === \"default\" ? undefined : color;\n\n const components: Components = {\n a: (props) => (\n <Link target=\"_blank\" color={headingAndLinkColor} href={props.href}>\n {props.children}\n </Link>\n ),\n p: (props) => (\n <Text elementType=\"p\" color={textColor}>\n {props.children}\n </Text>\n ),\n code: (props) => <InlineCode color={color}>{props.children}</InlineCode>,\n h1: (props) => (\n <Heading level={1} color={headingAndLinkColor}>\n {props.children}\n </Heading>\n ),\n h2: (props) => (\n <Heading level={2} color={headingAndLinkColor}>\n {props.children}\n </Heading>\n ),\n h3: (props) => (\n <Heading level={3} color={headingAndLinkColor}>\n {props.children}\n </Heading>\n ),\n h4: (props) => (\n <Heading level={4} color={headingAndLinkColor}>\n {props.children}\n </Heading>\n ),\n h5: (props) => (\n <Heading level={5} color={headingAndLinkColor}>\n {props.children}\n </Heading>\n ),\n h6: (props) => (\n <Heading level={6} color={headingAndLinkColor}>\n {props.children}\n </Heading>\n ),\n hr: () => <Separator />,\n pre: (props) => {\n const preElementContent = Children.toArray(props.children)[0];\n\n return (\n <CodeBlock\n copyable={false}\n color={color}\n language={\n isValidElement<{ className?: string }>(preElementContent) &&\n preElementContent.props.className\n ? preElementContent.props.className.replace(\"language-\", \"\")\n : undefined\n }\n code={String(\n isValidElement<{ children: string }>(preElementContent)\n ? preElementContent.props.children\n : preElementContent,\n )}\n />\n );\n },\n ul: (props) => (\n <Text color={textColor}>\n <ul>{props.children as ReactNode}</ul>\n </Text>\n ),\n ol: (props) => (\n <Text color={textColor}>\n <ol>{props.children as ReactNode}</ol>\n </Text>\n ),\n blockquote: (props) => (\n <Text color={textColor}>\n <blockquote>{props.children}</blockquote>\n </Text>\n ),\n };\n\n const textContent = extractTextFromFirstChild(children);\n\n return (\n <div className={styles.markdown} {...rest}>\n <ReactMarkdown components={components}>{textContent}</ReactMarkdown>\n </div>\n );\n};\n\nexport default Markdown;\n"],"names":["props"],"mappings":"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"}
@@ -1,24 +1,34 @@
1
1
  "use client"
2
2
  /* */
3
- import { createElement } from 'react';
3
+ import { Children, createElement } from 'react';
4
4
  import * as Aria from 'react-aria-components';
5
5
  import clsx from 'clsx';
6
6
  import styles from './Option.module.scss.mjs';
7
7
  import { flowComponent } from '../../lib/componentFactory/flowComponent.mjs';
8
+ import { extractTextFromFirstChild } from '../../lib/react/remote.mjs';
8
9
 
9
10
  const Option = flowComponent("Option", (props) => {
10
- const { className, children, value, ref, ...rest } = props;
11
+ const {
12
+ className,
13
+ children,
14
+ textValue = extractTextFromFirstChild(children),
15
+ value = textValue,
16
+ ref,
17
+ ...rest
18
+ } = props;
11
19
  const rootClassName = clsx(styles.option, className);
20
+ const hasChildren = Children.count(children) >= 1;
12
21
  return /* @__PURE__ */ createElement(
13
22
  Aria.ListBoxItem,
14
23
  {
15
24
  className: rootClassName,
16
25
  ref,
17
26
  ...rest,
27
+ textValue,
18
28
  id: value,
19
29
  key: value
20
30
  },
21
- children
31
+ hasChildren ? children : textValue
22
32
  );
23
33
  });
24
34
 
@@ -1 +1 @@
1
- {"version":3,"file":"Option.mjs","sources":["../../../../../../src/components/Option/Option.tsx"],"sourcesContent":["import { type PropsWithChildren } from \"react\";\nimport React from \"react\";\nimport * as Aria from \"react-aria-components\";\nimport clsx from \"clsx\";\nimport styles from \"./Option.module.scss\";\nimport type { FlowComponentProps } from \"@/lib/componentFactory/flowComponent\";\nimport { flowComponent } from \"@/lib/componentFactory/flowComponent\";\n\nexport interface OptionProps\n extends Omit<Aria.ListBoxItemProps, \"children\" | \"value\" | \"id\">,\n PropsWithChildren,\n FlowComponentProps {\n value?: string | number;\n}\n\n/** @flr-generate all */\nexport const Option = flowComponent(\"Option\", (props) => {\n const { className, children, value, ref, ...rest } = props;\n\n const rootClassName = clsx(styles.option, className);\n\n return (\n <Aria.ListBoxItem\n className={rootClassName}\n ref={ref}\n {...rest}\n id={value}\n key={value}\n >\n {children}\n </Aria.ListBoxItem>\n );\n});\n\nexport default Option;\n"],"names":[],"mappings":";;;;;;AAgBO,MAAM,MAAS,GAAA,aAAA,CAAc,QAAU,EAAA,CAAC,KAAU,KAAA;AACvD,EAAA,MAAM,EAAE,SAAW,EAAA,QAAA,EAAU,OAAO,GAAK,EAAA,GAAG,MAAS,GAAA,KAAA;AAErD,EAAA,MAAM,aAAgB,GAAA,IAAA,CAAK,MAAO,CAAA,MAAA,EAAQ,SAAS,CAAA;AAEnD,EACE,uBAAA,aAAA;AAAA,IAAC,IAAK,CAAA,WAAA;AAAA,IAAL;AAAA,MACC,SAAW,EAAA,aAAA;AAAA,MACX,GAAA;AAAA,MACC,GAAG,IAAA;AAAA,MACJ,EAAI,EAAA,KAAA;AAAA,MACJ,GAAK,EAAA;AAAA,KAAA;AAAA,IAEJ;AAAA,GACH;AAEJ,CAAC;;;;"}
1
+ {"version":3,"file":"Option.mjs","sources":["../../../../../../src/components/Option/Option.tsx"],"sourcesContent":["import { type PropsWithChildren } from \"react\";\nimport React, { Children } from \"react\";\nimport * as Aria from \"react-aria-components\";\nimport clsx from \"clsx\";\nimport styles from \"./Option.module.scss\";\nimport type { FlowComponentProps } from \"@/lib/componentFactory/flowComponent\";\nimport { flowComponent } from \"@/lib/componentFactory/flowComponent\";\nimport { extractTextFromFirstChild } from \"@/lib/react/remote\";\n\nexport interface OptionProps\n extends Omit<Aria.ListBoxItemProps, \"children\" | \"value\" | \"id\">,\n PropsWithChildren,\n FlowComponentProps {\n value?: string | number;\n}\n\n/** @flr-generate all */\nexport const Option = flowComponent(\"Option\", (props) => {\n const {\n className,\n children,\n textValue = extractTextFromFirstChild(children),\n value = textValue,\n ref,\n ...rest\n } = props;\n\n const rootClassName = clsx(styles.option, className);\n const hasChildren = Children.count(children) >= 1;\n\n return (\n <Aria.ListBoxItem\n className={rootClassName}\n ref={ref}\n {...rest}\n textValue={textValue}\n id={value}\n key={value}\n >\n {hasChildren ? children : textValue}\n </Aria.ListBoxItem>\n );\n});\n\nexport default Option;\n"],"names":[],"mappings":";;;;;;;AAiBO,MAAM,MAAS,GAAA,aAAA,CAAc,QAAU,EAAA,CAAC,KAAU,KAAA;AACvD,EAAM,MAAA;AAAA,IACJ,SAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA,GAAY,0BAA0B,QAAQ,CAAA;AAAA,IAC9C,KAAQ,GAAA,SAAA;AAAA,IACR,GAAA;AAAA,IACA,GAAG;AAAA,GACD,GAAA,KAAA;AAEJ,EAAA,MAAM,aAAgB,GAAA,IAAA,CAAK,MAAO,CAAA,MAAA,EAAQ,SAAS,CAAA;AACnD,EAAA,MAAM,WAAc,GAAA,QAAA,CAAS,KAAM,CAAA,QAAQ,CAAK,IAAA,CAAA;AAEhD,EACE,uBAAA,aAAA;AAAA,IAAC,IAAK,CAAA,WAAA;AAAA,IAAL;AAAA,MACC,SAAW,EAAA,aAAA;AAAA,MACX,GAAA;AAAA,MACC,GAAG,IAAA;AAAA,MACJ,SAAA;AAAA,MACA,EAAI,EAAA,KAAA;AAAA,MACJ,GAAK,EAAA;AAAA,KAAA;AAAA,IAEJ,cAAc,QAAW,GAAA;AAAA,GAC5B;AAEJ,CAAC;;;;"}
@@ -1,13 +1,18 @@
1
1
  "use client"
2
2
  /* */
3
3
  import { isObjectType, isString } from 'remeda';
4
+ import { Children, isValidElement } from 'react';
4
5
 
5
6
  function isRemoteComponentRendererProps(props) {
6
7
  return isObjectType(props) && "element" in props && "components" in props && "receiver" in props;
7
8
  }
9
+ const extractTextFromFirstChild = (children) => {
10
+ const firstChild = Children.toArray(children)[0];
11
+ return typeof firstChild === "string" ? firstChild : isValidElement(firstChild) && isRemoteTextRenderProps(firstChild.props) ? firstChild.props.remote.data : void 0;
12
+ };
8
13
  function isRemoteTextRenderProps(props) {
9
14
  return isObjectType(props) && "remote" in props && isObjectType(props.remote) && "data" in props.remote && isString(props.remote.data);
10
15
  }
11
16
 
12
- export { isRemoteComponentRendererProps, isRemoteTextRenderProps };
17
+ export { extractTextFromFirstChild, isRemoteComponentRendererProps, isRemoteTextRenderProps };
13
18
  //# sourceMappingURL=remote.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"remote.mjs","sources":["../../../../../../src/lib/react/remote.ts"],"sourcesContent":["import type {\n RemoteComponentRendererProps,\n RemoteTextRendererProps,\n} from \"@mittwald/remote-dom-react/host\";\nimport { isObjectType, isString } from \"remeda\";\n\nexport function isRemoteComponentRendererProps(\n props: unknown,\n): props is RemoteComponentRendererProps {\n return (\n isObjectType(props) &&\n \"element\" in props &&\n \"components\" in props &&\n \"receiver\" in props\n );\n}\n\nexport function isRemoteTextRenderProps(\n props: unknown,\n): props is RemoteTextRendererProps {\n return (\n isObjectType(props) &&\n \"remote\" in props &&\n isObjectType(props.remote) &&\n \"data\" in props.remote &&\n isString(props.remote.data)\n );\n}\n"],"names":[],"mappings":";;AAMO,SAAS,+BACd,KACuC,EAAA;AACvC,EAAA,OACE,aAAa,KAAK,CAAA,IAClB,aAAa,KACb,IAAA,YAAA,IAAgB,SAChB,UAAc,IAAA,KAAA;AAElB;AAEO,SAAS,wBACd,KACkC,EAAA;AAClC,EAAA,OACE,YAAa,CAAA,KAAK,CAClB,IAAA,QAAA,IAAY,SACZ,YAAa,CAAA,KAAA,CAAM,MAAM,CAAA,IACzB,UAAU,KAAM,CAAA,MAAA,IAChB,QAAS,CAAA,KAAA,CAAM,OAAO,IAAI,CAAA;AAE9B;;;;"}
1
+ {"version":3,"file":"remote.mjs","sources":["../../../../../../src/lib/react/remote.ts"],"sourcesContent":["import type {\n RemoteComponentRendererProps,\n RemoteTextRendererProps,\n} from \"@mittwald/remote-dom-react/host\";\nimport { isObjectType, isString } from \"remeda\";\nimport { Children, isValidElement, type ReactNode } from \"react\";\n\nexport function isRemoteComponentRendererProps(\n props: unknown,\n): props is RemoteComponentRendererProps {\n return (\n isObjectType(props) &&\n \"element\" in props &&\n \"components\" in props &&\n \"receiver\" in props\n );\n}\n\nexport const extractTextFromFirstChild = (children: ReactNode) => {\n const firstChild = Children.toArray(children)[0];\n return typeof firstChild === \"string\"\n ? firstChild\n : isValidElement(firstChild) && isRemoteTextRenderProps(firstChild.props)\n ? firstChild.props.remote.data\n : undefined;\n};\n\nexport function isRemoteTextRenderProps(\n props: unknown,\n): props is RemoteTextRendererProps {\n return (\n isObjectType(props) &&\n \"remote\" in props &&\n isObjectType(props.remote) &&\n \"data\" in props.remote &&\n isString(props.remote.data)\n );\n}\n"],"names":[],"mappings":";;;AAOO,SAAS,+BACd,KACuC,EAAA;AACvC,EAAA,OACE,aAAa,KAAK,CAAA,IAClB,aAAa,KACb,IAAA,YAAA,IAAgB,SAChB,UAAc,IAAA,KAAA;AAElB;AAEa,MAAA,yBAAA,GAA4B,CAAC,QAAwB,KAAA;AAChE,EAAA,MAAM,UAAa,GAAA,QAAA,CAAS,OAAQ,CAAA,QAAQ,EAAE,CAAC,CAAA;AAC/C,EAAA,OAAO,OAAO,UAAA,KAAe,QACzB,GAAA,UAAA,GACA,eAAe,UAAU,CAAA,IAAK,uBAAwB,CAAA,UAAA,CAAW,KAAK,CAAA,GACpE,UAAW,CAAA,KAAA,CAAM,OAAO,IACxB,GAAA,MAAA;AACR;AAEO,SAAS,wBACd,KACkC,EAAA;AAClC,EAAA,OACE,YAAa,CAAA,KAAK,CAClB,IAAA,QAAA,IAAY,SACZ,YAAa,CAAA,KAAA,CAAM,MAAM,CAAA,IACzB,UAAU,KAAM,CAAA,MAAA,IAChB,QAAS,CAAA,KAAA,CAAM,OAAO,IAAI,CAAA;AAE9B;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Autocomplete.d.ts","sourceRoot":"","sources":["../../../../src/components/Autocomplete/Autocomplete.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,KAAK,IAAI,MAAM,uBAAuB,CAAC;AAE9C,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,sCAAsC,CAAC;AAa9C,MAAM,WAAW,iBACf,SAAQ,iBAAiB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,UAAU,GAAG,eAAe,GAAG,YAAY,CAAC;CAAG;AAEhF,wBAAwB;AACxB,eAAO,MAAM,YAAY,sGAmHvB,CAAC;AAEH,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"Autocomplete.d.ts","sourceRoot":"","sources":["../../../../src/components/Autocomplete/Autocomplete.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,KAAK,IAAI,MAAM,uBAAuB,CAAC;AAE9C,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,sCAAsC,CAAC;AAa9C,MAAM,WAAW,iBACf,SAAQ,iBAAiB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,UAAU,GAAG,eAAe,GAAG,YAAY,CAAC;CAAG;AAEhF,wBAAwB;AACxB,eAAO,MAAM,YAAY,sGAkHvB,CAAC;AAEH,eAAe,YAAY,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Markdown.d.ts","sourceRoot":"","sources":["../../../../src/components/Markdown/Markdown.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,EAAE,EAAa,MAAM,OAAO,CAAC;AAE3C,OAAO,KAAK,EAAc,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAK1D,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;IAChE,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CACtC;AAED,wBAAwB;AACxB,eAAO,MAAM,QAAQ,EAAE,EAAE,CAAC,aAAa,CAqGtC,CAAC;AAEF,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"Markdown.d.ts","sourceRoot":"","sources":["../../../../src/components/Markdown/Markdown.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,EAAE,EAAa,MAAM,OAAO,CAAC;AAE3C,OAAO,KAAK,EAAc,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAK1D,MAAM,WAAW,aAAc,SAAQ,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC;IAChE,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CACtC;AAED,wBAAwB;AACxB,eAAO,MAAM,QAAQ,EAAE,EAAE,CAAC,aAAa,CA8FtC,CAAC;AAEF,eAAe,QAAQ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Option.d.ts","sourceRoot":"","sources":["../../../../src/components/Option/Option.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,IAAI,MAAM,uBAAuB,CAAC;AAG9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAG/E,MAAM,WAAW,WACf,SAAQ,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,UAAU,GAAG,OAAO,GAAG,IAAI,CAAC,EAC9D,iBAAiB,EACjB,kBAAkB;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AAED,wBAAwB;AACxB,eAAO,MAAM,MAAM,4EAgBjB,CAAC;AAEH,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"Option.d.ts","sourceRoot":"","sources":["../../../../src/components/Option/Option.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,KAAmB,MAAM,OAAO,CAAC;AACxC,OAAO,KAAK,IAAI,MAAM,uBAAuB,CAAC;AAG9C,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAI/E,MAAM,WAAW,WACf,SAAQ,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,UAAU,GAAG,OAAO,GAAG,IAAI,CAAC,EAC9D,iBAAiB,EACjB,kBAAkB;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AAED,wBAAwB;AACxB,eAAO,MAAM,MAAM,4EAyBjB,CAAC;AAEH,eAAe,MAAM,CAAC"}
@@ -1,4 +1,6 @@
1
1
  import { RemoteComponentRendererProps, RemoteTextRendererProps } from '@mittwald/remote-dom-react/host';
2
+ import { ReactNode } from 'react';
2
3
  export declare function isRemoteComponentRendererProps(props: unknown): props is RemoteComponentRendererProps;
4
+ export declare const extractTextFromFirstChild: (children: ReactNode) => string | undefined;
3
5
  export declare function isRemoteTextRenderProps(props: unknown): props is RemoteTextRendererProps;
4
6
  //# sourceMappingURL=remote.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../../../../src/lib/react/remote.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,4BAA4B,EAC5B,uBAAuB,EACxB,MAAM,iCAAiC,CAAC;AAGzC,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,4BAA4B,CAOvC;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,uBAAuB,CAQlC"}
1
+ {"version":3,"file":"remote.d.ts","sourceRoot":"","sources":["../../../../src/lib/react/remote.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,4BAA4B,EAC5B,uBAAuB,EACxB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAA4B,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEjE,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,4BAA4B,CAOvC;AAED,eAAO,MAAM,yBAAyB,GAAI,UAAU,SAAS,uBAO5D,CAAC;AAEF,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,uBAAuB,CAQlC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mittwald/flow-react-components",
3
- "version": "0.2.0-alpha.385",
3
+ "version": "0.2.0-alpha.387",
4
4
  "type": "module",
5
5
  "description": "A React implementation of Flow, mittwald’s design system",
6
6
  "homepage": "https://mittwald.github.io/flow",
@@ -57,8 +57,8 @@
57
57
  "dependencies": {
58
58
  "@chakra-ui/live-region": "^2.1.0",
59
59
  "@internationalized/string-compiler": "^3.2.6",
60
- "@mittwald/password-tools-js": "3.0.0-alpha.12",
61
- "@mittwald/react-tunnel": "0.2.0-alpha.385",
60
+ "@mittwald/password-tools-js": "3.0.0-alpha.14",
61
+ "@mittwald/react-tunnel": "0.2.0-alpha.387",
62
62
  "@mittwald/react-use-promise": "^3.0.4",
63
63
  "@react-aria/form": "^3.1.0",
64
64
  "@react-aria/utils": "^3.30.0",
@@ -99,7 +99,7 @@
99
99
  "@faker-js/faker": "^9.9.0",
100
100
  "@internationalized/date": "^3.8.2",
101
101
  "@mittwald/flow-core": "",
102
- "@mittwald/flow-design-tokens": "0.2.0-alpha.385",
102
+ "@mittwald/flow-design-tokens": "0.2.0-alpha.387",
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": "",
@@ -162,6 +162,9 @@
162
162
  "react-hook-form": "*"
163
163
  },
164
164
  "peerDependenciesMeta": {
165
+ "@mittwald/password-tools-js": {
166
+ "optional": true
167
+ },
165
168
  "@internationalized/date": {
166
169
  "optional": true
167
170
  },
@@ -172,5 +175,5 @@
172
175
  "optional": true
173
176
  }
174
177
  },
175
- "gitHead": "844fa08ea56b08da8bba18f3c8e7970fae1c35c0"
178
+ "gitHead": "e03afa3662a636239aca77e635d5cda6e2ec71f9"
176
179
  }