@mittwald/flow-react-components 1.2.0-next.66 → 1.2.0-next.67

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.
@@ -51,6 +51,16 @@ var Badge = flowComponent("Badge", (props) => {
51
51
  color: buttonColor,
52
52
  isDisabled
53
53
  })
54
+ },
55
+ ContextualHelpTrigger: {
56
+ tunnel: contextualHelpTunnel,
57
+ Button: {
58
+ className: Badge_module_default.action,
59
+ color: buttonColor,
60
+ variant: "plain",
61
+ size: "s",
62
+ isDisabled
63
+ }
54
64
  }
55
65
  };
56
66
  return /* @__PURE__ */ jsx(PropsContextProvider, {
@@ -1 +1 @@
1
- {"version":3,"file":"Badge.mjs","names":[],"sources":["../../../../../../../src/components/Badge/Badge.tsx"],"sourcesContent":["import type { PropsWithChildren } from \"react\";\nimport styles from \"./Badge.module.scss\";\nimport clsx from \"clsx\";\nimport {\n alphaColors,\n isAlphaColor,\n type PropsWithClassName,\n} from \"@/lib/types/props\";\nimport { type PropsContext, PropsContextProvider } from \"@/lib/propsContext\";\nimport type { FlowComponentProps } from \"@/lib/componentFactory/flowComponent\";\nimport { flowComponent } from \"@/lib/componentFactory/flowComponent\";\nimport type { PressEvent } from \"@react-types/shared\";\nimport { Button } from \"@/components/Button\";\nimport { IconClose } from \"@/components/Icon/components/icons\";\nimport { useLocalizedStringFormatter } from \"@/components/TranslationProvider/useLocalizedStringFormatter\";\nimport { UiComponentTunnelExit } from \"@/components/UiComponentTunnel/UiComponentTunnelExit\";\nimport { ContextualHelpButton } from \"@/components/Badge/components/ContextualHelpButton\";\nimport locales from \"./locales/*.locale.json\";\n\nexport const badgeColors = [\n \"neutral\",\n \"blue\",\n \"navy\",\n \"violet\",\n \"teal\",\n \"lilac\",\n \"green\",\n \"orange\",\n \"red\",\n ...alphaColors,\n] as const;\nexport type BadgeColors = (typeof badgeColors)[number];\n\nexport interface BadgeProps\n extends PropsWithChildren, FlowComponentProps, PropsWithClassName {\n /** Handler that is called when the badge is pressed. */\n onPress?: (e: PressEvent) => void;\n /** Handler that is called when the badges close icon is pressed. */\n onClose?: (e: PressEvent) => void;\n /** The color of the badge. @default \"neutral\" */\n color?: BadgeColors;\n /** Whether the badge is disabled. */\n isDisabled?: boolean;\n}\n\nconst contextualHelpTunnel = {\n id: \"contextualHelp\",\n component: \"Badge\",\n} as const;\n\n/** @flr-generate all */\nexport const Badge = flowComponent(\"Badge\", (props) => {\n const {\n children,\n className,\n color = \"neutral\",\n ref,\n onPress,\n onClose,\n isDisabled,\n ...rest\n } = props;\n\n const stringFormatter = useLocalizedStringFormatter(locales, \"Badge\");\n\n const rootClassName = clsx(\n styles.badge,\n styles[color],\n isDisabled && styles.disabled,\n className,\n );\n\n const buttonColor = isAlphaColor(color) ? color : \"dark\";\n\n const propsContext: PropsContext = {\n Label: {\n elementType: \"span\",\n className: styles.scope,\n unstyled: true,\n },\n Text: {\n elementType: \"span\",\n className: styles.value,\n },\n Button: {\n Label: {\n elementType: \"span\",\n className: styles.scope,\n unstyled: true,\n },\n Text: {\n elementType: \"span\",\n className: styles.value,\n },\n },\n ContextualHelp: {\n tunnel: contextualHelpTunnel,\n wrapWith: (\n <ContextualHelpButton\n className={styles.action}\n color={buttonColor}\n isDisabled={isDisabled}\n />\n ),\n },\n };\n\n return (\n <PropsContextProvider props={propsContext}>\n <div className={rootClassName} {...rest} ref={ref}>\n {!onPress && <div className={styles.content}>{children}</div>}\n {onPress && (\n <Button\n isDisabled={isDisabled}\n unstyled\n className={styles.button}\n onPress={onPress}\n >\n {children}\n </Button>\n )}\n\n <UiComponentTunnelExit id={contextualHelpTunnel.id} component=\"Badge\" />\n\n {onClose && (\n <Button\n className={styles.close}\n size=\"s\"\n color={buttonColor}\n variant=\"plain\"\n onPress={onClose}\n isDisabled={isDisabled}\n aria-label={stringFormatter.format(\"remove\")}\n >\n <IconClose />\n </Button>\n )}\n </div>\n </PropsContextProvider>\n );\n});\n\nexport default Badge;\n"],"mappings":";;;;;;;;;;;;;;AAmB2B,CAUzB,GAAG,WACL;AAeA,IAAM,uBAAuB;CAC3B,IAAI;CACJ,WAAW;AACb;;AAGA,IAAa,QAAQ,cAAc,UAAU,UAAU;CACrD,MAAM,EACJ,UACA,WACA,QAAQ,WACR,KACA,SACA,SACA,YACA,GAAG,SACD;CAEJ,MAAM,kBAAkB,4BAA4B,kBAAS,OAAO;CAEpE,MAAM,gBAAgB,KACpB,qBAAO,OACP,qBAAO,QACP,cAAc,qBAAO,UACrB,SACF;CAEA,MAAM,cAAc,aAAa,KAAK,IAAI,QAAQ;CAElD,MAAM,eAA6B;EACjC,OAAO;GACL,aAAa;GACb,WAAW,qBAAO;GAClB,UAAU;EACZ;EACA,MAAM;GACJ,aAAa;GACb,WAAW,qBAAO;EACpB;EACA,QAAQ;GACN,OAAO;IACL,aAAa;IACb,WAAW,qBAAO;IAClB,UAAU;GACZ;GACA,MAAM;IACJ,aAAa;IACb,WAAW,qBAAO;GACpB;EACF;EACA,gBAAgB;GACd,QAAQ;GACR,UACE,oBAAC,sBAAD;IACE,WAAW,qBAAO;IAClB,OAAO;IACK;GACb,CAAA;EAEL;CACF;CAEA,OACE,oBAAC,sBAAD;EAAsB,OAAO;EAC3B,UAAA,qBAAC,OAAD;GAAK,WAAW;GAAe,GAAI;GAAW;GAA9C,UAAA;IACG,CAAC,WAAW,oBAAC,OAAD;KAAK,WAAW,qBAAO;KAAU;IAAc,CAAA;IAC3D,WACC,oBAAC,QAAD;KACc;KACZ,UAAA;KACA,WAAW,qBAAO;KACT;KAER;IACK,CAAA;IAGV,oBAAC,uBAAD;KAAuB,IAAI,qBAAqB;KAAI,WAAU;IAAS,CAAA;IAEtE,WACC,oBAAC,QAAD;KACE,WAAW,qBAAO;KAClB,MAAK;KACL,OAAO;KACP,SAAQ;KACR,SAAS;KACG;KACZ,cAAY,gBAAgB,OAAO,QAAQ;KAE3C,UAAA,oBAAC,WAAD,CAAY,CAAA;IACN,CAAA;GAEP;;CACe,CAAA;AAE1B,CAAC"}
1
+ {"version":3,"file":"Badge.mjs","names":[],"sources":["../../../../../../../src/components/Badge/Badge.tsx"],"sourcesContent":["import type { PropsWithChildren } from \"react\";\nimport styles from \"./Badge.module.scss\";\nimport clsx from \"clsx\";\nimport {\n alphaColors,\n isAlphaColor,\n type PropsWithClassName,\n} from \"@/lib/types/props\";\nimport { type PropsContext, PropsContextProvider } from \"@/lib/propsContext\";\nimport type { FlowComponentProps } from \"@/lib/componentFactory/flowComponent\";\nimport { flowComponent } from \"@/lib/componentFactory/flowComponent\";\nimport type { PressEvent } from \"@react-types/shared\";\nimport { Button } from \"@/components/Button\";\nimport { IconClose } from \"@/components/Icon/components/icons\";\nimport { useLocalizedStringFormatter } from \"@/components/TranslationProvider/useLocalizedStringFormatter\";\nimport { UiComponentTunnelExit } from \"@/components/UiComponentTunnel/UiComponentTunnelExit\";\nimport { ContextualHelpButton } from \"@/components/Badge/components/ContextualHelpButton\";\nimport locales from \"./locales/*.locale.json\";\n\nexport const badgeColors = [\n \"neutral\",\n \"blue\",\n \"navy\",\n \"violet\",\n \"teal\",\n \"lilac\",\n \"green\",\n \"orange\",\n \"red\",\n ...alphaColors,\n] as const;\nexport type BadgeColors = (typeof badgeColors)[number];\n\nexport interface BadgeProps\n extends PropsWithChildren, FlowComponentProps, PropsWithClassName {\n /** Handler that is called when the badge is pressed. */\n onPress?: (e: PressEvent) => void;\n /** Handler that is called when the badges close icon is pressed. */\n onClose?: (e: PressEvent) => void;\n /** The color of the badge. @default \"neutral\" */\n color?: BadgeColors;\n /** Whether the badge is disabled. */\n isDisabled?: boolean;\n}\n\nconst contextualHelpTunnel = {\n id: \"contextualHelp\",\n component: \"Badge\",\n} as const;\n\n/** @flr-generate all */\nexport const Badge = flowComponent(\"Badge\", (props) => {\n const {\n children,\n className,\n color = \"neutral\",\n ref,\n onPress,\n onClose,\n isDisabled,\n ...rest\n } = props;\n\n const stringFormatter = useLocalizedStringFormatter(locales, \"Badge\");\n\n const rootClassName = clsx(\n styles.badge,\n styles[color],\n isDisabled && styles.disabled,\n className,\n );\n\n const buttonColor = isAlphaColor(color) ? color : \"dark\";\n\n const propsContext: PropsContext = {\n Label: {\n elementType: \"span\",\n className: styles.scope,\n unstyled: true,\n },\n Text: {\n elementType: \"span\",\n className: styles.value,\n },\n Button: {\n Label: {\n elementType: \"span\",\n className: styles.scope,\n unstyled: true,\n },\n Text: {\n elementType: \"span\",\n className: styles.value,\n },\n },\n ContextualHelp: {\n tunnel: contextualHelpTunnel,\n wrapWith: (\n <ContextualHelpButton\n className={styles.action}\n color={buttonColor}\n isDisabled={isDisabled}\n />\n ),\n },\n // A trigger the consumer wrote brings its own button. It goes to the same\n // place, styled like the one the badge supplies.\n ContextualHelpTrigger: {\n tunnel: contextualHelpTunnel,\n Button: {\n className: styles.action,\n color: buttonColor,\n variant: \"plain\",\n size: \"s\",\n isDisabled,\n },\n },\n };\n\n return (\n <PropsContextProvider props={propsContext}>\n <div className={rootClassName} {...rest} ref={ref}>\n {!onPress && <div className={styles.content}>{children}</div>}\n {onPress && (\n <Button\n isDisabled={isDisabled}\n unstyled\n className={styles.button}\n onPress={onPress}\n >\n {children}\n </Button>\n )}\n\n <UiComponentTunnelExit id={contextualHelpTunnel.id} component=\"Badge\" />\n\n {onClose && (\n <Button\n className={styles.close}\n size=\"s\"\n color={buttonColor}\n variant=\"plain\"\n onPress={onClose}\n isDisabled={isDisabled}\n aria-label={stringFormatter.format(\"remove\")}\n >\n <IconClose />\n </Button>\n )}\n </div>\n </PropsContextProvider>\n );\n});\n\nexport default Badge;\n"],"mappings":";;;;;;;;;;;;;;AAmB2B,CAUzB,GAAG,WACL;AAeA,IAAM,uBAAuB;CAC3B,IAAI;CACJ,WAAW;AACb;;AAGA,IAAa,QAAQ,cAAc,UAAU,UAAU;CACrD,MAAM,EACJ,UACA,WACA,QAAQ,WACR,KACA,SACA,SACA,YACA,GAAG,SACD;CAEJ,MAAM,kBAAkB,4BAA4B,kBAAS,OAAO;CAEpE,MAAM,gBAAgB,KACpB,qBAAO,OACP,qBAAO,QACP,cAAc,qBAAO,UACrB,SACF;CAEA,MAAM,cAAc,aAAa,KAAK,IAAI,QAAQ;CAElD,MAAM,eAA6B;EACjC,OAAO;GACL,aAAa;GACb,WAAW,qBAAO;GAClB,UAAU;EACZ;EACA,MAAM;GACJ,aAAa;GACb,WAAW,qBAAO;EACpB;EACA,QAAQ;GACN,OAAO;IACL,aAAa;IACb,WAAW,qBAAO;IAClB,UAAU;GACZ;GACA,MAAM;IACJ,aAAa;IACb,WAAW,qBAAO;GACpB;EACF;EACA,gBAAgB;GACd,QAAQ;GACR,UACE,oBAAC,sBAAD;IACE,WAAW,qBAAO;IAClB,OAAO;IACK;GACb,CAAA;EAEL;EAGA,uBAAuB;GACrB,QAAQ;GACR,QAAQ;IACN,WAAW,qBAAO;IAClB,OAAO;IACP,SAAS;IACT,MAAM;IACN;GACF;EACF;CACF;CAEA,OACE,oBAAC,sBAAD;EAAsB,OAAO;EAC3B,UAAA,qBAAC,OAAD;GAAK,WAAW;GAAe,GAAI;GAAW;GAA9C,UAAA;IACG,CAAC,WAAW,oBAAC,OAAD;KAAK,WAAW,qBAAO;KAAU;IAAc,CAAA;IAC3D,WACC,oBAAC,QAAD;KACc;KACZ,UAAA;KACA,WAAW,qBAAO;KACT;KAER;IACK,CAAA;IAGV,oBAAC,uBAAD;KAAuB,IAAI,qBAAqB;KAAI,WAAU;IAAS,CAAA;IAEtE,WACC,oBAAC,QAAD;KACE,WAAW,qBAAO;KAClB,MAAK;KACL,OAAO;KACP,SAAQ;KACR,SAAS;KACG;KACZ,cAAY,gBAAgB,OAAO,QAAQ;KAE3C,UAAA,oBAAC,WAAD,CAAY,CAAA;IACN,CAAA;GAEP;;CACe,CAAA;AAE1B,CAAC"}
@@ -8,16 +8,24 @@ import { jsx, jsxs } from "react/jsx-runtime";
8
8
  * Supplies the trigger button for a contextual help placed in a badge, so the
9
9
  * consumer only writes the <ContextualHelp>. Icon and accessibility label come
10
10
  * from the trigger.
11
+ *
12
+ * This renders at the badge's tunnel exit, which sits inside the badge's props
13
+ * context — so the trigger has to pin itself, or the context the badge sets for
14
+ * a trigger the consumer wrote would send it back into the tunnel it just
15
+ * left.
11
16
  */
12
17
  var ContextualHelpButton = (props) => {
13
18
  const { className, color, isDisabled, children } = props;
14
- return /* @__PURE__ */ jsxs(ContextualHelpTriggerView, { children: [/* @__PURE__ */ jsx(ButtonView, {
15
- className,
16
- color,
17
- variant: "plain",
18
- size: "s",
19
- isDisabled
20
- }), children] });
19
+ return /* @__PURE__ */ jsxs(ContextualHelpTriggerView, {
20
+ tunnel: null,
21
+ children: [/* @__PURE__ */ jsx(ButtonView, {
22
+ className,
23
+ color,
24
+ variant: "plain",
25
+ size: "s",
26
+ isDisabled
27
+ }), children]
28
+ });
21
29
  };
22
30
  //#endregion
23
31
  export { ContextualHelpButton, ContextualHelpButton as default };
@@ -1 +1 @@
1
- {"version":3,"file":"ContextualHelpButton.mjs","names":[],"sources":["../../../../../../../../../src/components/Badge/components/ContextualHelpButton/ContextualHelpButton.tsx"],"sourcesContent":["import type { FC, PropsWithChildren } from \"react\";\nimport type { AlphaColor, PropsWithClassName } from \"@/lib/types/props\";\nimport ButtonView from \"@/views/ButtonView\";\nimport ContextualHelpTriggerView from \"@/views/ContextualHelpTriggerView\";\n\ninterface Props extends PropsWithChildren, PropsWithClassName {\n color: AlphaColor;\n isDisabled?: boolean;\n}\n\n/**\n * Supplies the trigger button for a contextual help placed in a badge, so the\n * consumer only writes the <ContextualHelp>. Icon and accessibility label come\n * from the trigger.\n */\nexport const ContextualHelpButton: FC<Props> = (props) => {\n const { className, color, isDisabled, children } = props;\n\n return (\n <ContextualHelpTriggerView>\n <ButtonView\n className={className}\n color={color}\n variant=\"plain\"\n size=\"s\"\n isDisabled={isDisabled}\n />\n {children}\n </ContextualHelpTriggerView>\n );\n};\n\nexport default ContextualHelpButton;\n"],"mappings":";;;;;;;;;;;AAeA,IAAa,wBAAmC,UAAU;CACxD,MAAM,EAAE,WAAW,OAAO,YAAY,aAAa;CAEnD,OACE,qBAAC,2BAAD,EAAA,UAAA,CACE,oBAAC,YAAD;EACa;EACJ;EACP,SAAQ;EACR,MAAK;EACO;CACb,CAAA,GACA,QACwB,EAAA,CAAA;AAE/B"}
1
+ {"version":3,"file":"ContextualHelpButton.mjs","names":[],"sources":["../../../../../../../../../src/components/Badge/components/ContextualHelpButton/ContextualHelpButton.tsx"],"sourcesContent":["import type { FC, PropsWithChildren } from \"react\";\nimport type { AlphaColor, PropsWithClassName } from \"@/lib/types/props\";\nimport ButtonView from \"@/views/ButtonView\";\nimport ContextualHelpTriggerView from \"@/views/ContextualHelpTriggerView\";\n\ninterface Props extends PropsWithChildren, PropsWithClassName {\n color: AlphaColor;\n isDisabled?: boolean;\n}\n\n/**\n * Supplies the trigger button for a contextual help placed in a badge, so the\n * consumer only writes the <ContextualHelp>. Icon and accessibility label come\n * from the trigger.\n *\n * This renders at the badge's tunnel exit, which sits inside the badge's props\n * context — so the trigger has to pin itself, or the context the badge sets for\n * a trigger the consumer wrote would send it back into the tunnel it just\n * left.\n */\nexport const ContextualHelpButton: FC<Props> = (props) => {\n const { className, color, isDisabled, children } = props;\n\n return (\n <ContextualHelpTriggerView tunnel={null}>\n <ButtonView\n className={className}\n color={color}\n variant=\"plain\"\n size=\"s\"\n isDisabled={isDisabled}\n />\n {children}\n </ContextualHelpTriggerView>\n );\n};\n\nexport default ContextualHelpButton;\n"],"mappings":";;;;;;;;;;;;;;;;AAoBA,IAAa,wBAAmC,UAAU;CACxD,MAAM,EAAE,WAAW,OAAO,YAAY,aAAa;CAEnD,OACE,qBAAC,2BAAD;EAA2B,QAAQ;EAAnC,UAAA,CACE,oBAAC,YAAD;GACa;GACJ;GACP,SAAQ;GACR,MAAK;GACO;EACb,CAAA,GACA,QACwB;;AAE/B"}
@@ -22,7 +22,11 @@ var OverlayTrigger = (props) => {
22
22
  isDisabled: Boolean(buttonPropsContext?.isDisabled) || isContentSuspended,
23
23
  tunnel: null
24
24
  },
25
- DialogTrigger: { tunnel: null }
25
+ DialogTrigger: { tunnel: null },
26
+ [overlayType]: {
27
+ tunnel: null,
28
+ wrapWith: null
29
+ }
26
30
  };
27
31
  return /* @__PURE__ */ jsx(OverlayContextProvider, {
28
32
  type: overlayType,
@@ -1 +1 @@
1
- {"version":3,"file":"OverlayTrigger.mjs","names":[],"sources":["../../../../../../../src/components/OverlayTrigger/OverlayTrigger.tsx"],"sourcesContent":["import type { ComponentType, FC, PropsWithChildren, ReactNode } from \"react\";\nimport { OverlayController } from \"@/lib/controller\";\nimport type { PropsContext } from \"@/lib/propsContext\";\nimport { PropsContextProvider } from \"@/lib/propsContext\";\nimport { useComponentPropsContext } from \"@/lib/propsContext/propsContext\";\nimport type { FlowComponentName } from \"@/components/propTypes\";\nimport OverlayContextProvider from \"@/lib/controller/overlay/OverlayContextProvider\";\nimport type { FlowComponentProps } from \"@/lib/componentFactory/flowComponent\";\nimport { useIsPendingWithWait } from \"@/components/Action/hooks/useIsPendingWithWait\";\n\ntype AriaComponentType = ComponentType<{\n isOpen?: boolean;\n children: ReactNode;\n}>;\n\nexport interface OverlayTriggerProps\n extends FlowComponentProps, PropsWithChildren {\n /** Whether the overlay should be open initially. */\n isDefaultOpen?: boolean;\n /** A controller to control the state of the overlay. */\n controller?: OverlayController;\n}\n\ninterface Props extends OverlayTriggerProps {\n overlayType: FlowComponentName;\n component: AriaComponentType;\n}\n\nexport const OverlayTrigger: FC<Props> = (props) => {\n const {\n overlayType,\n isDefaultOpen = false,\n component: AriaOverlayTrigger,\n children,\n controller: controllerFromProps,\n } = props;\n const buttonPropsContext = useComponentPropsContext(\"Button\");\n\n const newOverlayController = OverlayController.useNew({ isDefaultOpen });\n const overlayController = controllerFromProps ?? newOverlayController;\n const isOpen = overlayController.useIsOpen();\n const isContentSuspended = overlayController.useIsContentSuspended();\n const isPending = useIsPendingWithWait(isContentSuspended);\n\n const propsContext: PropsContext = {\n Button: {\n onPress: overlayController.open,\n isPending,\n isDisabled: Boolean(buttonPropsContext?.isDisabled) || isContentSuspended,\n /*\n * The button is the react-aria trigger. react-aria hands the press\n * handling, the trigger ref and `aria-haspopup`/`aria-expanded`/\n * `aria-controls` down through a `PressResponder`, which only reaches its\n * own subtree — so a surrounding props context must not tunnel the button\n * out of the trigger. Such a context has to tunnel the trigger as a whole\n * instead (`overlayTriggersTunneledTo`).\n */\n tunnel: null,\n },\n /*\n * The aria trigger this renders is the host-side identity of every trigger\n * that is not `@flr-generate` (see `overlayTriggersTunneledTo`), so a\n * tunneling props context targets it as well. Here it is already inside the\n * trigger the author wrote — tunneling it again would send the same subtree\n * into the exit twice.\n */\n DialogTrigger: {\n tunnel: null,\n },\n };\n\n return (\n <OverlayContextProvider type={overlayType} controller={overlayController}>\n <PropsContextProvider\n props={propsContext}\n dependencies={[isPending, overlayController]}\n >\n <AriaOverlayTrigger isOpen={isOpen}>{children}</AriaOverlayTrigger>\n </PropsContextProvider>\n </OverlayContextProvider>\n );\n};\n\nexport default OverlayTrigger;\n"],"mappings":";;;;;;;;;AA4BA,IAAa,kBAA6B,UAAU;CAClD,MAAM,EACJ,aACA,gBAAgB,OAChB,WAAW,oBACX,UACA,YAAY,wBACV;CACJ,MAAM,qBAAqB,yBAAyB,QAAQ;CAE5D,MAAM,uBAAuB,kBAAkB,OAAO,EAAE,cAAc,CAAC;CACvE,MAAM,oBAAoB,uBAAuB;CACjD,MAAM,SAAS,kBAAkB,UAAU;CAC3C,MAAM,qBAAqB,kBAAkB,sBAAsB;CACnE,MAAM,YAAY,qBAAqB,kBAAkB;CAEzD,MAAM,eAA6B;EACjC,QAAQ;GACN,SAAS,kBAAkB;GAC3B;GACA,YAAY,QAAQ,oBAAoB,UAAU,KAAK;GASvD,QAAQ;EACV;EAQA,eAAe,EACb,QAAQ,KACV;CACF;CAEA,OACE,oBAAC,wBAAD;EAAwB,MAAM;EAAa,YAAY;EACrD,UAAA,oBAAC,sBAAD;GACE,OAAO;GACP,cAAc,CAAC,WAAW,iBAAiB;GAE3C,UAAA,oBAAC,oBAAD;IAA4B;IAAS;GAA6B,CAAA;EAC9C,CAAA;CACA,CAAA;AAE5B"}
1
+ {"version":3,"file":"OverlayTrigger.mjs","names":[],"sources":["../../../../../../../src/components/OverlayTrigger/OverlayTrigger.tsx"],"sourcesContent":["import type { ComponentType, FC, PropsWithChildren, ReactNode } from \"react\";\nimport { OverlayController } from \"@/lib/controller\";\nimport type { PropsContext } from \"@/lib/propsContext\";\nimport { PropsContextProvider } from \"@/lib/propsContext\";\nimport { useComponentPropsContext } from \"@/lib/propsContext/propsContext\";\nimport type { FlowComponentName } from \"@/components/propTypes\";\nimport OverlayContextProvider from \"@/lib/controller/overlay/OverlayContextProvider\";\nimport type { FlowComponentProps } from \"@/lib/componentFactory/flowComponent\";\nimport { useIsPendingWithWait } from \"@/components/Action/hooks/useIsPendingWithWait\";\n\ntype AriaComponentType = ComponentType<{\n isOpen?: boolean;\n children: ReactNode;\n}>;\n\nexport interface OverlayTriggerProps\n extends FlowComponentProps, PropsWithChildren {\n /** Whether the overlay should be open initially. */\n isDefaultOpen?: boolean;\n /** A controller to control the state of the overlay. */\n controller?: OverlayController;\n}\n\ninterface Props extends OverlayTriggerProps {\n overlayType: FlowComponentName;\n component: AriaComponentType;\n}\n\nexport const OverlayTrigger: FC<Props> = (props) => {\n const {\n overlayType,\n isDefaultOpen = false,\n component: AriaOverlayTrigger,\n children,\n controller: controllerFromProps,\n } = props;\n const buttonPropsContext = useComponentPropsContext(\"Button\");\n\n const newOverlayController = OverlayController.useNew({ isDefaultOpen });\n const overlayController = controllerFromProps ?? newOverlayController;\n const isOpen = overlayController.useIsOpen();\n const isContentSuspended = overlayController.useIsContentSuspended();\n const isPending = useIsPendingWithWait(isContentSuspended);\n\n const propsContext: PropsContext = {\n Button: {\n onPress: overlayController.open,\n isPending,\n isDisabled: Boolean(buttonPropsContext?.isDisabled) || isContentSuspended,\n /*\n * The button is the react-aria trigger. react-aria hands the press\n * handling, the trigger ref and `aria-haspopup`/`aria-expanded`/\n * `aria-controls` down through a `PressResponder`, which only reaches its\n * own subtree — so a surrounding props context must not tunnel the button\n * out of the trigger. Such a context has to tunnel the trigger as a whole\n * instead (`overlayTriggersTunneledTo`).\n */\n tunnel: null,\n },\n /*\n * The aria trigger this renders is the host-side identity of every trigger\n * that is not `@flr-generate` (see `overlayTriggersTunneledTo`), so a\n * tunneling props context targets it as well. Here it is already inside the\n * trigger the author wrote — tunneling it again would send the same subtree\n * into the exit twice.\n */\n DialogTrigger: {\n tunnel: null,\n },\n /*\n * The overlay is already placed — this trigger owns it. A surrounding\n * props context that moves or wraps the bare overlay, so that it can be\n * written without a trigger (`Badge`), must not reach this one: it would\n * pull the overlay out of its trigger and add a second trigger button\n * around it.\n */\n [overlayType]: {\n tunnel: null,\n wrapWith: null,\n },\n };\n\n return (\n <OverlayContextProvider type={overlayType} controller={overlayController}>\n <PropsContextProvider\n props={propsContext}\n dependencies={[isPending, overlayController]}\n >\n <AriaOverlayTrigger isOpen={isOpen}>{children}</AriaOverlayTrigger>\n </PropsContextProvider>\n </OverlayContextProvider>\n );\n};\n\nexport default OverlayTrigger;\n"],"mappings":";;;;;;;;;AA4BA,IAAa,kBAA6B,UAAU;CAClD,MAAM,EACJ,aACA,gBAAgB,OAChB,WAAW,oBACX,UACA,YAAY,wBACV;CACJ,MAAM,qBAAqB,yBAAyB,QAAQ;CAE5D,MAAM,uBAAuB,kBAAkB,OAAO,EAAE,cAAc,CAAC;CACvE,MAAM,oBAAoB,uBAAuB;CACjD,MAAM,SAAS,kBAAkB,UAAU;CAC3C,MAAM,qBAAqB,kBAAkB,sBAAsB;CACnE,MAAM,YAAY,qBAAqB,kBAAkB;CAEzD,MAAM,eAA6B;EACjC,QAAQ;GACN,SAAS,kBAAkB;GAC3B;GACA,YAAY,QAAQ,oBAAoB,UAAU,KAAK;GASvD,QAAQ;EACV;EAQA,eAAe,EACb,QAAQ,KACV;GAQC,cAAc;GACb,QAAQ;GACR,UAAU;EACZ;CACF;CAEA,OACE,oBAAC,wBAAD;EAAwB,MAAM;EAAa,YAAY;EACrD,UAAA,oBAAC,sBAAD;GACE,OAAO;GACP,cAAc,CAAC,WAAW,iBAAiB;GAE3C,UAAA,oBAAC,oBAAD;IAA4B;IAAS;GAA6B,CAAA;EAC9C,CAAA;CACA,CAAA;AAE5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"flowComponent.mjs","names":[],"sources":["../../../../../../../src/lib/componentFactory/flowComponent.tsx"],"sourcesContent":["import type {\n FlowComponentName,\n FlowComponentProps as FlowComponentPropsOfName,\n} from \"@/components/propTypes\";\nimport type {\n ComponentProps,\n ComponentType,\n FunctionComponent,\n ReactElement,\n ReactNode,\n RefAttributes,\n} from \"react\";\nimport { cloneElement, memo } from \"react\";\nimport type { PropsWithTunnel } from \"@/lib/types/props\";\nimport SlotContextProvider from \"@/lib/slotContext/SlotContextProvider\";\nimport { useProps } from \"@/lib/hooks/useProps\";\nimport { useComponentPropsContext } from \"@/lib/propsContext/propsContext\";\nimport { ComponentPropsContextProvider } from \"@/components/ComponentPropsContextProvider\";\nimport { ClearPropsContext } from \"@/components/ClearPropsContext\";\nimport ClearPropsContextView from \"@/views/ClearPropsContextView\";\nimport { UiComponentTunnelProvider } from \"@/components/UiComponentTunnel/UiComponentTunnelProvider\";\nimport { UiComponentTunnelEntry } from \"@/components/UiComponentTunnel/UiComponentTunnelEntry\";\nimport {\n useReportComponentUsage,\n ViewCompositionReset,\n} from \"@/components/ComponentUsageProvider\";\n\ntype RefType<T> = T extends RefAttributes<infer R> ? R : undefined;\n\nexport interface FlowComponentProps<R = HTMLDivElement>\n extends PropsWithTunnel, RefAttributes<R> {\n /**\n * A React element the component is wrapped with. The element is cloned and\n * receives the component as its only child — useful to render the component\n * inside a link, a tooltip trigger or any other wrapper without changing the\n * surrounding markup.\n */\n wrapWith?: ReactElement;\n}\n\nexport type FlowComponentImplementationProps<C extends FlowComponentName> =\n Omit<FlowComponentPropsOfName<C>, keyof FlowComponentProps> &\n RefAttributes<RefType<FlowComponentPropsOfName<C>>>;\n\ntype FlowComponentImplementationType<C extends FlowComponentName> =\n ComponentType<FlowComponentImplementationProps<C>>;\n\ntype FlowComponentType<C extends FlowComponentName> = FunctionComponent<\n FlowComponentPropsOfName<C> &\n RefAttributes<RefType<FlowComponentPropsOfName<C>>>\n>;\n\nexport type FlowComponentProvisionType = \"provider\" | \"ui\" | \"layout\";\n\ninterface Options {\n type?: FlowComponentProvisionType;\n isRemoteComponent?: boolean;\n}\n\nexport function flowComponent<C extends FlowComponentName>(\n componentName: C,\n ImplementationComponentType: FlowComponentImplementationType<C>,\n options: Options = {},\n): FlowComponentType<C> {\n type Props = FlowComponentPropsOfName<C> &\n RefAttributes<RefType<FlowComponentPropsOfName<C>>>;\n\n const { type = \"ui\", isRemoteComponent = false } = options;\n\n const MemoizedImplementationComponentType = memo(ImplementationComponentType);\n\n function Component(props: Props) {\n const isViewComposition = useReportComponentUsage(componentName);\n\n const { tunnel, wrapWith, ...propsWithContext } = useProps(\n componentName,\n props as FlowComponentPropsOfName<C>,\n ) as FlowComponentProps<RefType<FlowComponentPropsOfName<C>>>;\n\n const implementationTypeProps = propsWithContext as ComponentProps<\n typeof ImplementationComponentType\n >;\n\n const componentProps = useComponentPropsContext(componentName);\n\n ImplementationComponentType.displayName = `FlowComponentImpl(${componentName})`;\n\n let element: ReactNode = (\n <MemoizedImplementationComponentType {...implementationTypeProps} />\n );\n\n if (type === \"ui\" || type === \"layout\") {\n element = (\n <UiComponentTunnelProvider component={componentName}>\n {element}\n </UiComponentTunnelProvider>\n );\n }\n\n element = (\n <ComponentPropsContextProvider componentProps={componentProps}>\n {element}\n </ComponentPropsContextProvider>\n );\n\n if (type === \"ui\") {\n /**\n * Protect the inside of UI components for accidental prop changes through\n * the Props Context.\n */\n if (isRemoteComponent) {\n element = <ClearPropsContext>{element}</ClearPropsContext>;\n } else {\n /**\n * In case of a UI component that does not have a remote counterpart\n * (like the Modal component), the <ClearPropsContext> must be\n * additionally applied on the host side by using the\n * <ClearPropsContextView>.\n *\n * This prevents Props Contexts created by parent components on the host\n * side affecting the children of this UI component.\n */\n element = (\n <ClearPropsContext>\n <ClearPropsContextView>{element}</ClearPropsContextView>\n </ClearPropsContext>\n );\n }\n }\n\n if (\"slot\" in props && !!props.slot && typeof props.slot === \"string\") {\n element = (\n <SlotContextProvider slot={props.slot} component={componentName}>\n {element}\n </SlotContextProvider>\n );\n }\n\n if (wrapWith) {\n element = cloneElement(wrapWith, undefined, element);\n }\n\n if (tunnel) {\n element = (\n <UiComponentTunnelEntry\n id={tunnel.id}\n component={tunnel.component}\n staticEntryId={tunnel.staticEntryId}\n >\n {element}\n </UiComponentTunnelEntry>\n );\n }\n\n if (isViewComposition) {\n element = <ViewCompositionReset>{element}</ViewCompositionReset>;\n }\n\n return element;\n }\n\n Component.displayName = `FlowComponent(${componentName})`;\n return memo(Component);\n}\n"],"mappings":";;;;;;;;;;;;;;AA2DA,SAAgB,cACd,eACA,6BACA,UAAmB,CAAC,GACE;CAItB,MAAM,EAAE,OAAO,MAAM,oBAAoB,UAAU;CAEnD,MAAM,sCAAsC,KAAK,2BAA2B;CAE5E,SAAS,UAAU,OAAc;EAC/B,MAAM,oBAAoB,wBAAwB,aAAa;EAE/D,MAAM,EAAE,QAAQ,UAAU,GAAG,qBAAqB,SAChD,eACA,KACF;EAEA,MAAM,0BAA0B;EAIhC,MAAM,iBAAiB,yBAAyB,aAAa;EAE7D,4BAA4B,cAAc,qBAAqB,cAAc;EAE7E,IAAI,UACF,oBAAC,qCAAD,EAAqC,GAAI,wBAA0B,CAAA;EAGrE,IAAI,SAAS,QAAQ,SAAS,UAC5B,UACE,oBAAC,2BAAD;GAA2B,WAAW;GACnC,UAAA;EACwB,CAAA;EAI/B,UACE,oBAAC,+BAAD;GAA+C;GAC5C,UAAA;EAC4B,CAAA;EAGjC,IAAI,SAAS,MAAM;;;;;GAKjB,IAAI,mBACF,UAAU,oBAAC,mBAAD,EAAA,UAAoB,QAA2B,CAAA;;;;;;;;;;;GAWzD,UACE,oBAAC,mBAAD,EAAA,UACE,oBAAC,uBAAD,EAAA,UAAwB,QAA+B,CAAA,EACtC,CAAA;EAGzB;EAEA,IAAI,UAAU,SAAS,CAAC,CAAC,MAAM,QAAQ,OAAO,MAAM,SAAS,UAC3D,UACE,oBAAC,qBAAD;GAAqB,MAAM,MAAM;GAAM,WAAW;GAC/C,UAAA;EACkB,CAAA;EAIzB,IAAI,UACF,UAAU,aAAa,UAAU,KAAA,GAAW,OAAO;EAGrD,IAAI,QACF,UACE,oBAAC,wBAAD;GACE,IAAI,OAAO;GACX,WAAW,OAAO;GAClB,eAAe,OAAO;GAErB,UAAA;EACqB,CAAA;EAI5B,IAAI,mBACF,UAAU,oBAAC,sBAAD,EAAA,UAAuB,QAA8B,CAAA;EAGjE,OAAO;CACT;CAEA,UAAU,cAAc,iBAAiB,cAAc;CACvD,OAAO,KAAK,SAAS;AACvB"}
1
+ {"version":3,"file":"flowComponent.mjs","names":[],"sources":["../../../../../../../src/lib/componentFactory/flowComponent.tsx"],"sourcesContent":["import type {\n FlowComponentName,\n FlowComponentProps as FlowComponentPropsOfName,\n} from \"@/components/propTypes\";\nimport type {\n ComponentProps,\n ComponentType,\n FunctionComponent,\n ReactElement,\n ReactNode,\n RefAttributes,\n} from \"react\";\nimport { cloneElement, memo } from \"react\";\nimport type { PropsWithTunnel } from \"@/lib/types/props\";\nimport SlotContextProvider from \"@/lib/slotContext/SlotContextProvider\";\nimport { useProps } from \"@/lib/hooks/useProps\";\nimport { useComponentPropsContext } from \"@/lib/propsContext/propsContext\";\nimport { ComponentPropsContextProvider } from \"@/components/ComponentPropsContextProvider\";\nimport { ClearPropsContext } from \"@/components/ClearPropsContext\";\nimport ClearPropsContextView from \"@/views/ClearPropsContextView\";\nimport { UiComponentTunnelProvider } from \"@/components/UiComponentTunnel/UiComponentTunnelProvider\";\nimport { UiComponentTunnelEntry } from \"@/components/UiComponentTunnel/UiComponentTunnelEntry\";\nimport {\n useReportComponentUsage,\n ViewCompositionReset,\n} from \"@/components/ComponentUsageProvider\";\n\ntype RefType<T> = T extends RefAttributes<infer R> ? R : undefined;\n\nexport interface FlowComponentProps<R = HTMLDivElement>\n extends PropsWithTunnel, RefAttributes<R> {\n /**\n * A React element the component is wrapped with. The element is cloned and\n * receives the component as its only child — useful to render the component\n * inside a link, a tooltip trigger or any other wrapper without changing the\n * surrounding markup. `null` takes a wrapper a surrounding props context set\n * back off, the way `tunnel: null` does for a tunnel.\n */\n wrapWith?: ReactElement | null;\n}\n\nexport type FlowComponentImplementationProps<C extends FlowComponentName> =\n Omit<FlowComponentPropsOfName<C>, keyof FlowComponentProps> &\n RefAttributes<RefType<FlowComponentPropsOfName<C>>>;\n\ntype FlowComponentImplementationType<C extends FlowComponentName> =\n ComponentType<FlowComponentImplementationProps<C>>;\n\ntype FlowComponentType<C extends FlowComponentName> = FunctionComponent<\n FlowComponentPropsOfName<C> &\n RefAttributes<RefType<FlowComponentPropsOfName<C>>>\n>;\n\nexport type FlowComponentProvisionType = \"provider\" | \"ui\" | \"layout\";\n\ninterface Options {\n type?: FlowComponentProvisionType;\n isRemoteComponent?: boolean;\n}\n\nexport function flowComponent<C extends FlowComponentName>(\n componentName: C,\n ImplementationComponentType: FlowComponentImplementationType<C>,\n options: Options = {},\n): FlowComponentType<C> {\n type Props = FlowComponentPropsOfName<C> &\n RefAttributes<RefType<FlowComponentPropsOfName<C>>>;\n\n const { type = \"ui\", isRemoteComponent = false } = options;\n\n const MemoizedImplementationComponentType = memo(ImplementationComponentType);\n\n function Component(props: Props) {\n const isViewComposition = useReportComponentUsage(componentName);\n\n const { tunnel, wrapWith, ...propsWithContext } = useProps(\n componentName,\n props as FlowComponentPropsOfName<C>,\n ) as FlowComponentProps<RefType<FlowComponentPropsOfName<C>>>;\n\n const implementationTypeProps = propsWithContext as ComponentProps<\n typeof ImplementationComponentType\n >;\n\n const componentProps = useComponentPropsContext(componentName);\n\n ImplementationComponentType.displayName = `FlowComponentImpl(${componentName})`;\n\n let element: ReactNode = (\n <MemoizedImplementationComponentType {...implementationTypeProps} />\n );\n\n if (type === \"ui\" || type === \"layout\") {\n element = (\n <UiComponentTunnelProvider component={componentName}>\n {element}\n </UiComponentTunnelProvider>\n );\n }\n\n element = (\n <ComponentPropsContextProvider componentProps={componentProps}>\n {element}\n </ComponentPropsContextProvider>\n );\n\n if (type === \"ui\") {\n /**\n * Protect the inside of UI components for accidental prop changes through\n * the Props Context.\n */\n if (isRemoteComponent) {\n element = <ClearPropsContext>{element}</ClearPropsContext>;\n } else {\n /**\n * In case of a UI component that does not have a remote counterpart\n * (like the Modal component), the <ClearPropsContext> must be\n * additionally applied on the host side by using the\n * <ClearPropsContextView>.\n *\n * This prevents Props Contexts created by parent components on the host\n * side affecting the children of this UI component.\n */\n element = (\n <ClearPropsContext>\n <ClearPropsContextView>{element}</ClearPropsContextView>\n </ClearPropsContext>\n );\n }\n }\n\n if (\"slot\" in props && !!props.slot && typeof props.slot === \"string\") {\n element = (\n <SlotContextProvider slot={props.slot} component={componentName}>\n {element}\n </SlotContextProvider>\n );\n }\n\n if (wrapWith) {\n element = cloneElement(wrapWith, undefined, element);\n }\n\n if (tunnel) {\n element = (\n <UiComponentTunnelEntry\n id={tunnel.id}\n component={tunnel.component}\n staticEntryId={tunnel.staticEntryId}\n >\n {element}\n </UiComponentTunnelEntry>\n );\n }\n\n if (isViewComposition) {\n element = <ViewCompositionReset>{element}</ViewCompositionReset>;\n }\n\n return element;\n }\n\n Component.displayName = `FlowComponent(${componentName})`;\n return memo(Component);\n}\n"],"mappings":";;;;;;;;;;;;;;AA4DA,SAAgB,cACd,eACA,6BACA,UAAmB,CAAC,GACE;CAItB,MAAM,EAAE,OAAO,MAAM,oBAAoB,UAAU;CAEnD,MAAM,sCAAsC,KAAK,2BAA2B;CAE5E,SAAS,UAAU,OAAc;EAC/B,MAAM,oBAAoB,wBAAwB,aAAa;EAE/D,MAAM,EAAE,QAAQ,UAAU,GAAG,qBAAqB,SAChD,eACA,KACF;EAEA,MAAM,0BAA0B;EAIhC,MAAM,iBAAiB,yBAAyB,aAAa;EAE7D,4BAA4B,cAAc,qBAAqB,cAAc;EAE7E,IAAI,UACF,oBAAC,qCAAD,EAAqC,GAAI,wBAA0B,CAAA;EAGrE,IAAI,SAAS,QAAQ,SAAS,UAC5B,UACE,oBAAC,2BAAD;GAA2B,WAAW;GACnC,UAAA;EACwB,CAAA;EAI/B,UACE,oBAAC,+BAAD;GAA+C;GAC5C,UAAA;EAC4B,CAAA;EAGjC,IAAI,SAAS,MAAM;;;;;GAKjB,IAAI,mBACF,UAAU,oBAAC,mBAAD,EAAA,UAAoB,QAA2B,CAAA;;;;;;;;;;;GAWzD,UACE,oBAAC,mBAAD,EAAA,UACE,oBAAC,uBAAD,EAAA,UAAwB,QAA+B,CAAA,EACtC,CAAA;EAGzB;EAEA,IAAI,UAAU,SAAS,CAAC,CAAC,MAAM,QAAQ,OAAO,MAAM,SAAS,UAC3D,UACE,oBAAC,qBAAD;GAAqB,MAAM,MAAM;GAAM,WAAW;GAC/C,UAAA;EACkB,CAAA;EAIzB,IAAI,UACF,UAAU,aAAa,UAAU,KAAA,GAAW,OAAO;EAGrD,IAAI,QACF,UACE,oBAAC,wBAAD;GACE,IAAI,OAAO;GACX,WAAW,OAAO;GAClB,eAAe,OAAO;GAErB,UAAA;EACqB,CAAA;EAI5B,IAAI,mBACF,UAAU,oBAAC,sBAAD,EAAA,UAAuB,QAA8B,CAAA;EAGjE,OAAO;CACT;CAEA,UAAU,cAAc,iBAAiB,cAAc;CACvD,OAAO,KAAK,SAAS;AACvB"}
@@ -8,6 +8,11 @@ interface Props extends PropsWithChildren, PropsWithClassName {
8
8
  * Supplies the trigger button for a contextual help placed in a badge, so the
9
9
  * consumer only writes the <ContextualHelp>. Icon and accessibility label come
10
10
  * from the trigger.
11
+ *
12
+ * This renders at the badge's tunnel exit, which sits inside the badge's props
13
+ * context — so the trigger has to pin itself, or the context the badge sets for
14
+ * a trigger the consumer wrote would send it back into the tunnel it just
15
+ * left.
11
16
  */
12
17
  export declare const ContextualHelpButton: FC<Props>;
13
18
  export default ContextualHelpButton;
@@ -5,7 +5,7 @@ export type ModalTriggerProps = Simplify<OverlayTriggerProps>;
5
5
  export declare const ModalTrigger: import('react').FunctionComponent<{
6
6
  isDefaultOpen?: boolean | undefined;
7
7
  controller?: import('../../../../lib/controller').OverlayController | undefined;
8
- wrapWith?: import('react').ReactElement | undefined;
8
+ wrapWith?: (import('react').ReactElement | null) | undefined;
9
9
  tunnel?: {
10
10
  id: string;
11
11
  component: import('../../../propTypes').FlowComponentName;
@@ -7,9 +7,10 @@ export interface FlowComponentProps<R = HTMLDivElement> extends PropsWithTunnel,
7
7
  * A React element the component is wrapped with. The element is cloned and
8
8
  * receives the component as its only child — useful to render the component
9
9
  * inside a link, a tooltip trigger or any other wrapper without changing the
10
- * surrounding markup.
10
+ * surrounding markup. `null` takes a wrapper a surrounding props context set
11
+ * back off, the way `tunnel: null` does for a tunnel.
11
12
  */
12
- wrapWith?: ReactElement;
13
+ wrapWith?: ReactElement | null;
13
14
  }
14
15
  export type FlowComponentImplementationProps<C extends FlowComponentName> = Omit<FlowComponentPropsOfName<C>, keyof FlowComponentProps> & RefAttributes<RefType<FlowComponentPropsOfName<C>>>;
15
16
  type FlowComponentImplementationType<C extends FlowComponentName> = ComponentType<FlowComponentImplementationProps<C>>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mittwald/flow-react-components",
3
- "version": "1.2.0-next.66",
3
+ "version": "1.2.0-next.67",
4
4
  "type": "module",
5
5
  "description": "A React implementation of Flow, mittwald’s design system",
6
6
  "homepage": "https://flow.mittwald.de",
@@ -83,9 +83,9 @@
83
83
  "@internationalized/string-compiler": "^3.4.1",
84
84
  "@lezer/common": "^1.5.2",
85
85
  "@lezer/highlight": "^1.2.3",
86
- "@mittwald/flow-icons": "^1.2.0-next.66",
86
+ "@mittwald/flow-icons": "^1.2.0-next.67",
87
87
  "@mittwald/password-tools-js": "^3.0.0",
88
- "@mittwald/react-tunnel": "^1.2.0-next.66",
88
+ "@mittwald/react-tunnel": "^1.2.0-next.67",
89
89
  "@mittwald/react-use-promise": "^4.2.2",
90
90
  "@react-aria/form": "^3.2.1",
91
91
  "@react-aria/i18n": "^3.13.1",
@@ -138,12 +138,12 @@
138
138
  "@internationalized/date": "^3.12.3",
139
139
  "@lezer/generator": "^1.8.0",
140
140
  "@lezer/lr": "^1.4.10",
141
- "@mittwald/flow-core": "1.2.0-next.66",
142
- "@mittwald/flow-design-tokens": "1.2.0-next.66",
143
- "@mittwald/flow-icons-base": "1.2.0-next.66",
141
+ "@mittwald/flow-core": "1.2.0-next.67",
142
+ "@mittwald/flow-design-tokens": "1.2.0-next.67",
143
+ "@mittwald/flow-icons-base": "1.2.0-next.67",
144
144
  "@mittwald/react-use-promise": "^4.2.2",
145
145
  "@mittwald/remote-dom-react": "1.2.2-mittwald.10",
146
- "@mittwald/typescript-config": "1.2.0-next.66",
146
+ "@mittwald/typescript-config": "1.2.0-next.67",
147
147
  "@nx/storybook": "^22.7.6",
148
148
  "@storybook/addon-a11y": "^10.5.10",
149
149
  "@storybook/addon-actions": "^9.0.8",
@@ -195,7 +195,7 @@
195
195
  },
196
196
  "peerDependencies": {
197
197
  "@internationalized/date": "^3.12.2",
198
- "@mittwald/flow-icons-pro": "1.2.0-next.66",
198
+ "@mittwald/flow-icons-pro": "1.2.0-next.67",
199
199
  "@mittwald/react-use-promise": "^4.2.2",
200
200
  "next": "^16.2.3",
201
201
  "react": "^19.2.0",
@@ -219,5 +219,5 @@
219
219
  "browserslist": [
220
220
  "baseline widely available"
221
221
  ],
222
- "gitHead": "c2ca358888d99804f8ed73f178b03a8d1e2d2465"
222
+ "gitHead": "a2bab1d48ec9d31b7773468657ad80c8a6e50ab5"
223
223
  }