@zayne-labs/ui-react 0.10.32 → 0.10.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/dist/esm/common/await/index.d.ts +5 -5
  2. package/dist/esm/common/await/index.js +4 -4
  3. package/dist/esm/common/client-gate/index.js +1 -1
  4. package/dist/esm/common/error-boundary/index.d.ts +1 -1
  5. package/dist/esm/common/error-boundary/index.js +1 -1
  6. package/dist/esm/common/for/index.d.ts +3 -3
  7. package/dist/esm/common/presence/index.d.ts +13 -10
  8. package/dist/esm/common/presence/index.js +2 -1
  9. package/dist/esm/common/show/index.js +1 -1
  10. package/dist/esm/common/slot/index.d.ts +6 -4
  11. package/dist/esm/common/slot/index.js +1 -1
  12. package/dist/esm/common/suspense-with-boundary/index.d.ts +2 -2
  13. package/dist/esm/common/suspense-with-boundary/index.js +1 -1
  14. package/dist/esm/common/switch/index.js +1 -1
  15. package/dist/esm/{error-boundary-y9Samt_s.js → error-boundary-6VGflFQ9.js} +23 -28
  16. package/dist/esm/{error-boundary-y9Samt_s.js.map → error-boundary-6VGflFQ9.js.map} +1 -1
  17. package/dist/esm/{index-DtKTXtS7.d.ts → index-X53nnrcP.d.ts} +4 -4
  18. package/dist/esm/{index-geg5m4_w.d.ts → index-xeDQG1qT.d.ts} +4 -4
  19. package/dist/esm/{presence-CzmCEhXS.js → presence-Bj-YnaHv.js} +48 -15
  20. package/dist/esm/presence-Bj-YnaHv.js.map +1 -0
  21. package/dist/esm/{show-CDY_D1V0.js → show-kIsXcWiR.js} +3 -4
  22. package/dist/esm/{show-CDY_D1V0.js.map → show-kIsXcWiR.js.map} +1 -1
  23. package/dist/esm/{slot-DNzYW76j.js → slot-HtgJHjB9.js} +5 -7
  24. package/dist/esm/slot-HtgJHjB9.js.map +1 -0
  25. package/dist/esm/ui/card/index.d.ts +1 -1
  26. package/dist/esm/ui/card/index.js +2 -3
  27. package/dist/esm/ui/card/index.js.map +1 -1
  28. package/dist/esm/ui/carousel/index.d.ts +10 -10
  29. package/dist/esm/ui/carousel/index.js +4 -6
  30. package/dist/esm/ui/carousel/index.js.map +1 -1
  31. package/dist/esm/ui/drag-scroll/index.js +2 -2
  32. package/dist/esm/ui/drop-zone/index.d.ts +15 -15
  33. package/dist/esm/ui/drop-zone/index.js +35 -47
  34. package/dist/esm/ui/drop-zone/index.js.map +1 -1
  35. package/dist/esm/ui/form/index.d.ts +20 -20
  36. package/dist/esm/ui/form/index.js +13 -16
  37. package/dist/esm/ui/form/index.js.map +1 -1
  38. package/package.json +7 -7
  39. package/dist/esm/presence-CzmCEhXS.js.map +0 -1
  40. package/dist/esm/slot-DNzYW76j.js.map +0 -1
@@ -1,8 +1,8 @@
1
- import { ErrorBoundaryProps } from "../../index-geg5m4_w.js";
2
- import { SuspenseWithBoundaryProps } from "../../index-DtKTXtS7.js";
3
- import { GetSlotComponentProps } from "@zayne-labs/toolkit-react/utils";
1
+ import { ErrorBoundaryProps } from "../../index-xeDQG1qT.js";
2
+ import { SuspenseWithBoundaryProps } from "../../index-X53nnrcP.js";
4
3
  import * as React from "react";
5
- import * as react_jsx_runtime0 from "react/jsx-runtime";
4
+ import { GetSlotComponentProps } from "@zayne-labs/toolkit-react/utils";
5
+ import * as react_jsx_runtime19 from "react/jsx-runtime";
6
6
 
7
7
  //#region src/components/common/await/await.d.ts
8
8
  type RenderPropFn<TValue> = (result: TValue) => React.ReactNode;
@@ -14,7 +14,7 @@ type AwaitRootProps<TValue> = Pick<SuspenseWithBoundaryProps, "errorFallback" |
14
14
  withErrorBoundary?: boolean;
15
15
  withSuspense?: boolean;
16
16
  };
17
- declare function AwaitRoot<TValue>(props: AwaitRootProps<TValue>): react_jsx_runtime0.JSX.Element;
17
+ declare function AwaitRoot<TValue>(props: AwaitRootProps<TValue>): react_jsx_runtime19.JSX.Element;
18
18
  type AwaitSuccessProps<TValue = unknown> = GetSlotComponentProps<"default", ChildrenType<TValue>>;
19
19
  declare function AwaitSuccess<TPromiseOrValue, TValue = Awaited<TPromiseOrValue>>(props: Pick<AwaitSuccessProps<TValue>, "children">): React.ReactNode;
20
20
  type AwaitErrorProps = GetSlotComponentProps<"error", ErrorBoundaryProps["fallback"]>;
@@ -2,12 +2,12 @@
2
2
 
3
3
 
4
4
  import { __export } from "../../chunk-CTAAG5j7.js";
5
- import { ErrorBoundary, useErrorBoundaryContext } from "../../error-boundary-y9Samt_s.js";
6
- import { SlotRoot } from "../../slot-DNzYW76j.js";
7
- import { getSlotMap, withSlotNameAndSymbol } from "@zayne-labs/toolkit-react/utils";
5
+ import { ErrorBoundary, useErrorBoundaryContext } from "../../error-boundary-6VGflFQ9.js";
6
+ import { SlotRoot } from "../../slot-HtgJHjB9.js";
7
+ import { createCustomContext } from "@zayne-labs/toolkit-react";
8
8
  import { isFunction } from "@zayne-labs/toolkit-type-helpers";
9
9
  import { Fragment, Suspense, use, useMemo } from "react";
10
- import { createCustomContext } from "@zayne-labs/toolkit-react";
10
+ import { getSlotMap, withSlotNameAndSymbol } from "@zayne-labs/toolkit-react/utils";
11
11
  import { jsx } from "react/jsx-runtime";
12
12
 
13
13
  //#region src/components/common/await/await-context.ts
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
 
3
3
 
4
+ import { useIsHydrated } from "@zayne-labs/toolkit-react";
4
5
  import { isFunction } from "@zayne-labs/toolkit-type-helpers";
5
6
  import "react";
6
- import { useIsHydrated } from "@zayne-labs/toolkit-react";
7
7
 
8
8
  //#region src/components/common/client-gate/client-gate.tsx
9
9
  /**
@@ -1,2 +1,2 @@
1
- import { ErrorBoundary, ErrorBoundaryContextType, ErrorBoundaryProps, FallbackProps, useErrorBoundary, useErrorBoundaryContext } from "../../index-geg5m4_w.js";
1
+ import { ErrorBoundary, ErrorBoundaryContextType, ErrorBoundaryProps, FallbackProps, useErrorBoundary, useErrorBoundaryContext } from "../../index-xeDQG1qT.js";
2
2
  export { ErrorBoundary, ErrorBoundaryContextType, ErrorBoundaryProps, FallbackProps, useErrorBoundary, useErrorBoundaryContext };
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
 
3
3
 
4
- import { ErrorBoundary, useErrorBoundary, useErrorBoundaryContext } from "../../error-boundary-y9Samt_s.js";
4
+ import { ErrorBoundary, useErrorBoundary, useErrorBoundaryContext } from "../../error-boundary-6VGflFQ9.js";
5
5
 
6
6
  export { ErrorBoundary, useErrorBoundary, useErrorBoundaryContext };
@@ -1,7 +1,7 @@
1
- import { DiscriminatedRenderItemProps, PolymorphicPropsStrict } from "@zayne-labs/toolkit-react/utils";
2
1
  import { Prettify } from "@zayne-labs/toolkit-type-helpers";
3
2
  import * as React from "react";
4
- import * as react_jsx_runtime22 from "react/jsx-runtime";
3
+ import { DiscriminatedRenderItemProps, PolymorphicPropsStrict } from "@zayne-labs/toolkit-react/utils";
4
+ import * as react_jsx_runtime17 from "react/jsx-runtime";
5
5
 
6
6
  //#region src/components/common/for/for.d.ts
7
7
  type ArrayOrNumber = number | readonly unknown[];
@@ -15,7 +15,7 @@ type ForProps<TArray extends ArrayOrNumber> = Prettify<{
15
15
  declare function For<const TArray extends ArrayOrNumber>(props: ForProps<TArray>): string | number | bigint | boolean | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | null;
16
16
  declare function ForWithWrapper<const TArray extends ArrayOrNumber, TElement extends React.ElementType = "ul">(props: PolymorphicPropsStrict<TElement, ForProps<TArray>> & {
17
17
  displayFallBackWhenEmpty?: boolean;
18
- }): string | number | bigint | boolean | react_jsx_runtime22.JSX.Element | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | null;
18
+ }): string | number | bigint | boolean | Iterable<React.ReactNode> | Promise<string | number | bigint | boolean | React.ReactPortal | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Iterable<React.ReactNode> | null | undefined> | react_jsx_runtime17.JSX.Element | null;
19
19
  //#endregion
20
20
  //#region src/components/common/for/getElementList.d.ts
21
21
  type GetElementListResult<TVariant extends "base" | "withWrapper"> = TVariant extends "base" ? [typeof For] : [typeof ForWithWrapper];
@@ -1,4 +1,6 @@
1
- import * as React from "react";
1
+ import * as React$1 from "react";
2
+ import { InferProps } from "@zayne-labs/toolkit-react/utils";
3
+ import * as react_jsx_runtime16 from "react/jsx-runtime";
2
4
 
3
5
  //#region src/components/common/presence/use-presence.d.ts
4
6
  type UsePresenceOptions = {
@@ -9,26 +11,27 @@ type UsePresenceOptions = {
9
11
  */
10
12
  variant?: "animation" | "transition";
11
13
  };
12
- /**
13
- * React hook that provides the ability to animate the mount/unmount of a component.
14
- * @see https://github.com/radix-ui/primitives/blob/main/packages/react/presence/src/presence.tsx
15
- */
16
- declare const usePresence: (options: UsePresenceOptions) => {
14
+ type UsePresenceResult = {
17
15
  isPresent: boolean;
18
16
  isPresentOrIsTransitionComplete: boolean;
19
- ref: (refNode: HTMLElement | null) => void;
17
+ propGetters: {
18
+ getPresenceProps: (innerProps: InferProps<HTMLElement>) => InferProps<HTMLElement>;
19
+ };
20
+ ref: React.Ref<HTMLElement>;
20
21
  shouldStartTransition: boolean;
21
22
  };
22
23
  //#endregion
23
24
  //#region src/components/common/presence/presence.d.ts
24
25
  type RefProp = {
25
- ref?: React.Ref<HTMLElement>;
26
+ ref?: React$1.Ref<HTMLElement>;
26
27
  };
28
+ type RenderPropContext = Omit<UsePresenceResult, "propGetters" | "ref">;
27
29
  type PresenceProps = UsePresenceOptions & {
28
- children?: React.ReactElement<RefProp> | ((props: Omit<ReturnType<typeof usePresence>, "ref">) => React.ReactElement<RefProp>);
30
+ children?: React$1.ReactElement<RefProp> | ((props: RenderPropContext) => React$1.ReactElement<RefProp>);
31
+ className?: string;
29
32
  forceMount?: boolean;
30
33
  };
31
- declare function Presence(props: PresenceProps): React.ReactElement<RefProp, string | React.JSXElementConstructor<any>> | null | undefined;
34
+ declare function Presence(props: PresenceProps): react_jsx_runtime16.JSX.Element | null;
32
35
  //#endregion
33
36
  export { Presence };
34
37
  //# sourceMappingURL=index.d.ts.map
@@ -1,6 +1,7 @@
1
1
  "use client";
2
2
 
3
3
 
4
- import { Presence } from "../../presence-CzmCEhXS.js";
4
+ import "../../slot-HtgJHjB9.js";
5
+ import { Presence } from "../../presence-Bj-YnaHv.js";
5
6
 
6
7
  export { Presence };
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
 
3
3
 
4
- import { ShowContent, ShowFallback, ShowRoot, show_parts_exports } from "../../show-CDY_D1V0.js";
4
+ import { ShowContent, ShowFallback, ShowRoot, show_parts_exports } from "../../show-kIsXcWiR.js";
5
5
 
6
6
  export { show_parts_exports as Show, ShowContent, ShowFallback, ShowRoot };
@@ -1,10 +1,12 @@
1
- import { InferProps } from "@zayne-labs/toolkit-react/utils";
2
1
  import * as React from "react";
3
- import * as react_jsx_runtime8 from "react/jsx-runtime";
2
+ import { InferProps } from "@zayne-labs/toolkit-react/utils";
3
+ import * as react_jsx_runtime14 from "react/jsx-runtime";
4
4
 
5
5
  //#region src/components/common/slot/slot.d.ts
6
- type SlotProps = InferProps<HTMLElement>;
7
- declare function SlotRoot(props: SlotProps): react_jsx_runtime8.JSX.Element | null;
6
+ type SlotProps = InferProps<HTMLElement> & {
7
+ ref?: React.Ref<HTMLElement>;
8
+ };
9
+ declare function SlotRoot(props: SlotProps): react_jsx_runtime14.JSX.Element | null;
8
10
  declare function SlotSlottable({
9
11
  children
10
12
  }: Pick<SlotProps, "children">): React.ReactNode;
@@ -1,3 +1,3 @@
1
- import { SlotRoot, SlotSlottable, slot_parts_exports } from "../../slot-DNzYW76j.js";
1
+ import { SlotRoot, SlotSlottable, slot_parts_exports } from "../../slot-HtgJHjB9.js";
2
2
 
3
3
  export { slot_parts_exports as Slot, SlotRoot, SlotSlottable };
@@ -1,3 +1,3 @@
1
- import "../../index-geg5m4_w.js";
2
- import { SuspenseWithBoundary, SuspenseWithBoundaryProps } from "../../index-DtKTXtS7.js";
1
+ import "../../index-xeDQG1qT.js";
2
+ import { SuspenseWithBoundary, SuspenseWithBoundaryProps } from "../../index-X53nnrcP.js";
3
3
  export { SuspenseWithBoundary, SuspenseWithBoundaryProps };
@@ -1,4 +1,4 @@
1
- import { ErrorBoundary } from "../../error-boundary-y9Samt_s.js";
1
+ import { ErrorBoundary } from "../../error-boundary-6VGflFQ9.js";
2
2
  import { Suspense } from "react";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
 
@@ -2,9 +2,9 @@
2
2
 
3
3
 
4
4
  import { __export } from "../../chunk-CTAAG5j7.js";
5
- import { getRegularChildren, getSingleSlot } from "@zayne-labs/toolkit-react/utils";
6
5
  import { isFunction } from "@zayne-labs/toolkit-type-helpers";
7
6
  import "react";
7
+ import { getRegularChildren, getSingleSlot } from "@zayne-labs/toolkit-react/utils";
8
8
 
9
9
  //#region src/components/common/switch/switch.tsx
10
10
  const defaultValueSymbol = Symbol("default-value");
@@ -1,6 +1,6 @@
1
+ import { createCustomContext, useCallbackRef } from "@zayne-labs/toolkit-react";
1
2
  import { isFunction } from "@zayne-labs/toolkit-type-helpers";
2
3
  import { Component, useState } from "react";
3
- import { createCustomContext, useCallbackRef } from "@zayne-labs/toolkit-react";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
 
6
6
  //#region src/components/common/error-boundary/error-boundary-context.ts
@@ -57,26 +57,23 @@ var ErrorBoundary = class extends Component {
57
57
  const { error, hasError } = this.state;
58
58
  let childToRender = children;
59
59
  if (hasError) switch (true) {
60
- case isFunction(fallback): {
61
- const fallbackRenderProps = {
60
+ case isFunction(fallback):
61
+ childToRender = fallback({
62
62
  error,
63
63
  resetErrorBoundary: this.#resetErrorBoundary
64
- };
65
- childToRender = fallback(fallbackRenderProps);
64
+ });
66
65
  break;
67
- }
68
66
  case Boolean(fallback):
69
67
  childToRender = fallback;
70
68
  break;
71
69
  default: console.warn("No fallback provided to error boundary");
72
70
  }
73
- const contextValue = {
74
- error,
75
- hasError,
76
- resetErrorBoundary: this.#resetErrorBoundary
77
- };
78
71
  return /* @__PURE__ */ jsx(ErrorBoundaryContext, {
79
- value: contextValue,
72
+ value: {
73
+ error,
74
+ hasError,
75
+ resetErrorBoundary: this.#resetErrorBoundary
76
+ },
80
77
  children: childToRender
81
78
  });
82
79
  }
@@ -101,25 +98,23 @@ const useErrorBoundary = () => {
101
98
  hasError: false
102
99
  });
103
100
  if (state.hasError) throw state.error;
104
- const resetBoundary = useCallbackRef(() => {
105
- resetErrorBoundary();
106
- setState({
107
- error: null,
108
- hasError: false
109
- });
110
- });
111
- const showBoundary = useCallbackRef((error) => {
112
- setState({
113
- error,
114
- hasError: true
115
- });
116
- });
117
101
  return {
118
- resetBoundary,
119
- showBoundary
102
+ resetBoundary: useCallbackRef(() => {
103
+ resetErrorBoundary();
104
+ setState({
105
+ error: null,
106
+ hasError: false
107
+ });
108
+ }),
109
+ showBoundary: useCallbackRef((error) => {
110
+ setState({
111
+ error,
112
+ hasError: true
113
+ });
114
+ })
120
115
  };
121
116
  };
122
117
 
123
118
  //#endregion
124
119
  export { ErrorBoundary, useErrorBoundary, useErrorBoundaryContext };
125
- //# sourceMappingURL=error-boundary-y9Samt_s.js.map
120
+ //# sourceMappingURL=error-boundary-6VGflFQ9.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"error-boundary-y9Samt_s.js","names":["initialState: ErrorBoundaryState","#resetErrorBoundary"],"sources":["../../src/components/common/error-boundary/error-boundary-context.ts","../../src/components/common/error-boundary/error-boundary.tsx","../../src/components/common/error-boundary/useErrorBoundary.ts"],"sourcesContent":["import { createCustomContext } from \"@zayne-labs/toolkit-react\";\n\nexport type ErrorBoundaryContextType = {\n\terror: unknown;\n\thasError: boolean;\n\tresetErrorBoundary: (...args: unknown[]) => void;\n};\n\nconst [ErrorBoundaryContext, useErrorBoundaryContext] = createCustomContext<ErrorBoundaryContextType>({\n\thookName: \"useErrorBoundaryContext\",\n\tname: \"ErrorBoundaryContext\",\n\tproviderName: \"ErrorBoundaryContextProvider\",\n});\n\nexport { ErrorBoundaryContext, useErrorBoundaryContext };\n","import { isFunction } from \"@zayne-labs/toolkit-type-helpers\";\nimport * as React from \"react\";\nimport { Component } from \"react\";\nimport { ErrorBoundaryContext, type ErrorBoundaryContextType } from \"./error-boundary-context\";\nimport type { ErrorBoundaryProps, FallbackProps } from \"./types\";\n\ntype ErrorBoundaryState =\n\t| {\n\t\t\terror: Error;\n\t\t\thasError: true;\n\t }\n\t| {\n\t\t\terror: null;\n\t\t\thasError: false;\n\t };\n\nconst initialState: ErrorBoundaryState = {\n\terror: null,\n\thasError: false,\n};\n\nconst hasArrayChanged = (arrayOne: unknown[] = [], arrayTwo: unknown[] = []) => {\n\treturn (\n\t\tarrayOne.length !== arrayTwo.length\n\t\t|| arrayOne.some((item, index) => !Object.is(item, arrayTwo[index]))\n\t);\n};\n\n/**\n * Copied from react-error-boundary package\n * @see https://github.com/bvaughn/react-error-boundary\n */\n\nexport class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n\tconstructor(props: ErrorBoundaryProps) {\n\t\tsuper(props);\n\n\t\tthis.state = initialState;\n\t}\n\n\tstatic getDerivedStateFromError(error: Error) {\n\t\treturn { error, hasError: true };\n\t}\n\n\toverride componentDidCatch(error: Error, info: React.ErrorInfo) {\n\t\tthis.props.onError?.({ error, info });\n\t}\n\n\toverride componentDidUpdate(prevProps: ErrorBoundaryProps, prevState: ErrorBoundaryState) {\n\t\tconst { hasError } = this.state;\n\t\tconst { resetKeys } = this.props;\n\n\t\t// == There's an edge case where if the thing that triggered the error happens to *also* be in the resetKeys array, we'd end up resetting the error boundary immediately.\n\t\t// == This would likely trigger a second error to be thrown.\n\t\t// == So we make sure that we don't check the resetKeys on the first call of cDU after the error is set.\n\n\t\tif (hasError && prevState.error !== null && hasArrayChanged(prevProps.resetKeys, resetKeys)) {\n\t\t\tthis.props.onReset?.({\n\t\t\t\tnext: resetKeys,\n\t\t\t\tprev: prevProps.resetKeys,\n\t\t\t\treason: \"keys\",\n\t\t\t});\n\n\t\t\tthis.setState(initialState);\n\t\t}\n\t}\n\n\toverride render() {\n\t\tconst { children, fallback } = this.props;\n\t\tconst { error, hasError } = this.state;\n\n\t\tlet childToRender = children;\n\n\t\tif (hasError) {\n\t\t\tswitch (true) {\n\t\t\t\tcase isFunction(fallback): {\n\t\t\t\t\tconst fallbackRenderProps = {\n\t\t\t\t\t\terror,\n\t\t\t\t\t\tresetErrorBoundary: this.#resetErrorBoundary,\n\t\t\t\t\t} satisfies FallbackProps;\n\n\t\t\t\t\tchildToRender = fallback(fallbackRenderProps);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase Boolean(fallback): {\n\t\t\t\t\tchildToRender = fallback;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tdefault: {\n\t\t\t\t\tconsole.warn(\"No fallback provided to error boundary\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst contextValue = {\n\t\t\terror,\n\t\t\thasError,\n\t\t\tresetErrorBoundary: this.#resetErrorBoundary,\n\t\t} satisfies ErrorBoundaryContextType;\n\n\t\treturn <ErrorBoundaryContext value={contextValue}>{childToRender}</ErrorBoundaryContext>;\n\t}\n\n\t#resetErrorBoundary = (...parameters: unknown[]) => {\n\t\tconst { error } = this.state;\n\n\t\tif (error !== null) {\n\t\t\tthis.props.onReset?.({\n\t\t\t\targs: parameters,\n\t\t\t\treason: \"imperative-api\",\n\t\t\t});\n\n\t\t\tthis.setState(initialState);\n\t\t}\n\t};\n}\n","import { useCallbackRef } from \"@zayne-labs/toolkit-react\";\nimport { useState } from \"react\";\nimport { useErrorBoundaryContext } from \"./error-boundary-context\";\n\ntype UseErrorBoundaryState<TError extends Error> =\n\t| {\n\t\t\terror: null;\n\t\t\thasError: false;\n\t }\n\t| {\n\t\t\terror: TError;\n\t\t\thasError: true;\n\t };\n\nexport const useErrorBoundary = <TError extends Error>() => {\n\tconst { resetErrorBoundary } = useErrorBoundaryContext();\n\n\tconst [state, setState] = useState<UseErrorBoundaryState<TError>>({\n\t\terror: null,\n\t\thasError: false,\n\t});\n\n\tif (state.hasError) {\n\t\tthrow state.error;\n\t}\n\n\tconst resetBoundary = useCallbackRef(() => {\n\t\tresetErrorBoundary();\n\n\t\tsetState({\n\t\t\terror: null,\n\t\t\thasError: false,\n\t\t});\n\t});\n\n\tconst showBoundary = useCallbackRef((error: TError) => {\n\t\tsetState({\n\t\t\terror,\n\t\t\thasError: true,\n\t\t});\n\t});\n\n\treturn { resetBoundary, showBoundary };\n};\n"],"mappings":";;;;;;AAQA,MAAM,CAAC,sBAAsB,2BAA2B,oBAA8C;CACrG,UAAU;CACV,MAAM;CACN,cAAc;CACd,CAAC;;;;ACIF,MAAMA,eAAmC;CACxC,OAAO;CACP,UAAU;CACV;AAED,MAAM,mBAAmB,WAAsB,EAAE,EAAE,WAAsB,EAAE,KAAK;AAC/E,QACC,SAAS,WAAW,SAAS,UAC1B,SAAS,MAAM,MAAM,UAAU,CAAC,OAAO,GAAG,MAAM,SAAS,OAAO,CAAC;;;;;;AAStE,IAAa,gBAAb,cAAmC,UAAkD;CACpF,YAAY,OAA2B;AACtC,QAAM,MAAM;AAEZ,OAAK,QAAQ;;CAGd,OAAO,yBAAyB,OAAc;AAC7C,SAAO;GAAE;GAAO,UAAU;GAAM;;CAGjC,AAAS,kBAAkB,OAAc,MAAuB;AAC/D,OAAK,MAAM,UAAU;GAAE;GAAO;GAAM,CAAC;;CAGtC,AAAS,mBAAmB,WAA+B,WAA+B;EACzF,MAAM,EAAE,aAAa,KAAK;EAC1B,MAAM,EAAE,cAAc,KAAK;AAM3B,MAAI,YAAY,UAAU,UAAU,QAAQ,gBAAgB,UAAU,WAAW,UAAU,EAAE;AAC5F,QAAK,MAAM,UAAU;IACpB,MAAM;IACN,MAAM,UAAU;IAChB,QAAQ;IACR,CAAC;AAEF,QAAK,SAAS,aAAa;;;CAI7B,AAAS,SAAS;EACjB,MAAM,EAAE,UAAU,aAAa,KAAK;EACpC,MAAM,EAAE,OAAO,aAAa,KAAK;EAEjC,IAAI,gBAAgB;AAEpB,MAAI,SACH,SAAQ,MAAR;GACC,KAAK,WAAW,SAAS,EAAE;IAC1B,MAAM,sBAAsB;KAC3B;KACA,oBAAoB,MAAKC;KACzB;AAED,oBAAgB,SAAS,oBAAoB;AAC7C;;GAGD,KAAK,QAAQ,SAAS;AACrB,oBAAgB;AAChB;GAGD,QACC,SAAQ,KAAK,yCAAyC;;EAKzD,MAAM,eAAe;GACpB;GACA;GACA,oBAAoB,MAAKA;GACzB;AAED,SAAO,oBAAC;GAAqB,OAAO;aAAe;IAAqC;;CAGzF,uBAAuB,GAAG,eAA0B;EACnD,MAAM,EAAE,UAAU,KAAK;AAEvB,MAAI,UAAU,MAAM;AACnB,QAAK,MAAM,UAAU;IACpB,MAAM;IACN,QAAQ;IACR,CAAC;AAEF,QAAK,SAAS,aAAa;;;;;;;ACpG9B,MAAa,yBAA+C;CAC3D,MAAM,EAAE,uBAAuB,yBAAyB;CAExD,MAAM,CAAC,OAAO,YAAY,SAAwC;EACjE,OAAO;EACP,UAAU;EACV,CAAC;AAEF,KAAI,MAAM,SACT,OAAM,MAAM;CAGb,MAAM,gBAAgB,qBAAqB;AAC1C,sBAAoB;AAEpB,WAAS;GACR,OAAO;GACP,UAAU;GACV,CAAC;GACD;CAEF,MAAM,eAAe,gBAAgB,UAAkB;AACtD,WAAS;GACR;GACA,UAAU;GACV,CAAC;GACD;AAEF,QAAO;EAAE;EAAe;EAAc"}
1
+ {"version":3,"file":"error-boundary-6VGflFQ9.js","names":["initialState: ErrorBoundaryState","#resetErrorBoundary"],"sources":["../../src/components/common/error-boundary/error-boundary-context.ts","../../src/components/common/error-boundary/error-boundary.tsx","../../src/components/common/error-boundary/useErrorBoundary.ts"],"sourcesContent":["import { createCustomContext } from \"@zayne-labs/toolkit-react\";\n\nexport type ErrorBoundaryContextType = {\n\terror: unknown;\n\thasError: boolean;\n\tresetErrorBoundary: (...args: unknown[]) => void;\n};\n\nconst [ErrorBoundaryContext, useErrorBoundaryContext] = createCustomContext<ErrorBoundaryContextType>({\n\thookName: \"useErrorBoundaryContext\",\n\tname: \"ErrorBoundaryContext\",\n\tproviderName: \"ErrorBoundaryContextProvider\",\n});\n\nexport { ErrorBoundaryContext, useErrorBoundaryContext };\n","import { isFunction } from \"@zayne-labs/toolkit-type-helpers\";\nimport * as React from \"react\";\nimport { Component } from \"react\";\nimport { ErrorBoundaryContext, type ErrorBoundaryContextType } from \"./error-boundary-context\";\nimport type { ErrorBoundaryProps, FallbackProps } from \"./types\";\n\ntype ErrorBoundaryState =\n\t| {\n\t\t\terror: Error;\n\t\t\thasError: true;\n\t }\n\t| {\n\t\t\terror: null;\n\t\t\thasError: false;\n\t };\n\nconst initialState: ErrorBoundaryState = {\n\terror: null,\n\thasError: false,\n};\n\nconst hasArrayChanged = (arrayOne: unknown[] = [], arrayTwo: unknown[] = []) => {\n\treturn (\n\t\tarrayOne.length !== arrayTwo.length\n\t\t|| arrayOne.some((item, index) => !Object.is(item, arrayTwo[index]))\n\t);\n};\n\n/**\n * Copied from react-error-boundary package\n * @see https://github.com/bvaughn/react-error-boundary\n */\n\nexport class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n\tconstructor(props: ErrorBoundaryProps) {\n\t\tsuper(props);\n\n\t\tthis.state = initialState;\n\t}\n\n\tstatic getDerivedStateFromError(error: Error) {\n\t\treturn { error, hasError: true };\n\t}\n\n\toverride componentDidCatch(error: Error, info: React.ErrorInfo) {\n\t\tthis.props.onError?.({ error, info });\n\t}\n\n\toverride componentDidUpdate(prevProps: ErrorBoundaryProps, prevState: ErrorBoundaryState) {\n\t\tconst { hasError } = this.state;\n\t\tconst { resetKeys } = this.props;\n\n\t\t// == There's an edge case where if the thing that triggered the error happens to *also* be in the resetKeys array, we'd end up resetting the error boundary immediately.\n\t\t// == This would likely trigger a second error to be thrown.\n\t\t// == So we make sure that we don't check the resetKeys on the first call of cDU after the error is set.\n\n\t\tif (hasError && prevState.error !== null && hasArrayChanged(prevProps.resetKeys, resetKeys)) {\n\t\t\tthis.props.onReset?.({\n\t\t\t\tnext: resetKeys,\n\t\t\t\tprev: prevProps.resetKeys,\n\t\t\t\treason: \"keys\",\n\t\t\t});\n\n\t\t\tthis.setState(initialState);\n\t\t}\n\t}\n\n\toverride render() {\n\t\tconst { children, fallback } = this.props;\n\t\tconst { error, hasError } = this.state;\n\n\t\tlet childToRender = children;\n\n\t\tif (hasError) {\n\t\t\tswitch (true) {\n\t\t\t\tcase isFunction(fallback): {\n\t\t\t\t\tconst fallbackRenderProps = {\n\t\t\t\t\t\terror,\n\t\t\t\t\t\tresetErrorBoundary: this.#resetErrorBoundary,\n\t\t\t\t\t} satisfies FallbackProps;\n\n\t\t\t\t\tchildToRender = fallback(fallbackRenderProps);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase Boolean(fallback): {\n\t\t\t\t\tchildToRender = fallback;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tdefault: {\n\t\t\t\t\tconsole.warn(\"No fallback provided to error boundary\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst contextValue = {\n\t\t\terror,\n\t\t\thasError,\n\t\t\tresetErrorBoundary: this.#resetErrorBoundary,\n\t\t} satisfies ErrorBoundaryContextType;\n\n\t\treturn <ErrorBoundaryContext value={contextValue}>{childToRender}</ErrorBoundaryContext>;\n\t}\n\n\t#resetErrorBoundary = (...parameters: unknown[]) => {\n\t\tconst { error } = this.state;\n\n\t\tif (error !== null) {\n\t\t\tthis.props.onReset?.({\n\t\t\t\targs: parameters,\n\t\t\t\treason: \"imperative-api\",\n\t\t\t});\n\n\t\t\tthis.setState(initialState);\n\t\t}\n\t};\n}\n","import { useCallbackRef } from \"@zayne-labs/toolkit-react\";\nimport { useState } from \"react\";\nimport { useErrorBoundaryContext } from \"./error-boundary-context\";\n\ntype UseErrorBoundaryState<TError extends Error> =\n\t| {\n\t\t\terror: null;\n\t\t\thasError: false;\n\t }\n\t| {\n\t\t\terror: TError;\n\t\t\thasError: true;\n\t };\n\nexport const useErrorBoundary = <TError extends Error>() => {\n\tconst { resetErrorBoundary } = useErrorBoundaryContext();\n\n\tconst [state, setState] = useState<UseErrorBoundaryState<TError>>({\n\t\terror: null,\n\t\thasError: false,\n\t});\n\n\tif (state.hasError) {\n\t\tthrow state.error;\n\t}\n\n\tconst resetBoundary = useCallbackRef(() => {\n\t\tresetErrorBoundary();\n\n\t\tsetState({\n\t\t\terror: null,\n\t\t\thasError: false,\n\t\t});\n\t});\n\n\tconst showBoundary = useCallbackRef((error: TError) => {\n\t\tsetState({\n\t\t\terror,\n\t\t\thasError: true,\n\t\t});\n\t});\n\n\treturn { resetBoundary, showBoundary };\n};\n"],"mappings":";;;;;;AAQA,MAAM,CAAC,sBAAsB,2BAA2B,oBAA8C;CACrG,UAAU;CACV,MAAM;CACN,cAAc;CACd,CAAC;;;;ACIF,MAAMA,eAAmC;CACxC,OAAO;CACP,UAAU;CACV;AAED,MAAM,mBAAmB,WAAsB,EAAE,EAAE,WAAsB,EAAE,KAAK;AAC/E,QACC,SAAS,WAAW,SAAS,UAC1B,SAAS,MAAM,MAAM,UAAU,CAAC,OAAO,GAAG,MAAM,SAAS,OAAO,CAAC;;;;;;AAStE,IAAa,gBAAb,cAAmC,UAAkD;CACpF,YAAY,OAA2B;AACtC,QAAM,MAAM;AAEZ,OAAK,QAAQ;;CAGd,OAAO,yBAAyB,OAAc;AAC7C,SAAO;GAAE;GAAO,UAAU;GAAM;;CAGjC,AAAS,kBAAkB,OAAc,MAAuB;AAC/D,OAAK,MAAM,UAAU;GAAE;GAAO;GAAM,CAAC;;CAGtC,AAAS,mBAAmB,WAA+B,WAA+B;EACzF,MAAM,EAAE,aAAa,KAAK;EAC1B,MAAM,EAAE,cAAc,KAAK;AAM3B,MAAI,YAAY,UAAU,UAAU,QAAQ,gBAAgB,UAAU,WAAW,UAAU,EAAE;AAC5F,QAAK,MAAM,UAAU;IACpB,MAAM;IACN,MAAM,UAAU;IAChB,QAAQ;IACR,CAAC;AAEF,QAAK,SAAS,aAAa;;;CAI7B,AAAS,SAAS;EACjB,MAAM,EAAE,UAAU,aAAa,KAAK;EACpC,MAAM,EAAE,OAAO,aAAa,KAAK;EAEjC,IAAI,gBAAgB;AAEpB,MAAI,SACH,SAAQ,MAAR;GACC,KAAK,WAAW,SAAS;AAMxB,oBAAgB,SALY;KAC3B;KACA,oBAAoB,MAAKC;KACzB,CAE4C;AAC7C;GAGD,KAAK,QAAQ,SAAS;AACrB,oBAAgB;AAChB;GAGD,QACC,SAAQ,KAAK,yCAAyC;;AAWzD,SAAO,oBAAC;GAAqB,OANR;IACpB;IACA;IACA,oBAAoB,MAAKA;IACzB;aAEkD;IAAqC;;CAGzF,uBAAuB,GAAG,eAA0B;EACnD,MAAM,EAAE,UAAU,KAAK;AAEvB,MAAI,UAAU,MAAM;AACnB,QAAK,MAAM,UAAU;IACpB,MAAM;IACN,QAAQ;IACR,CAAC;AAEF,QAAK,SAAS,aAAa;;;;;;;ACpG9B,MAAa,yBAA+C;CAC3D,MAAM,EAAE,uBAAuB,yBAAyB;CAExD,MAAM,CAAC,OAAO,YAAY,SAAwC;EACjE,OAAO;EACP,UAAU;EACV,CAAC;AAEF,KAAI,MAAM,SACT,OAAM,MAAM;AAmBb,QAAO;EAAE,eAhBa,qBAAqB;AAC1C,uBAAoB;AAEpB,YAAS;IACR,OAAO;IACP,UAAU;IACV,CAAC;IACD;EASsB,cAPH,gBAAgB,UAAkB;AACtD,YAAS;IACR;IACA,UAAU;IACV,CAAC;IACD;EAEoC"}
@@ -1,6 +1,6 @@
1
- import { ErrorBoundaryProps } from "./index-geg5m4_w.js";
1
+ import { ErrorBoundaryProps } from "./index-xeDQG1qT.js";
2
2
  import * as React from "react";
3
- import * as react_jsx_runtime7 from "react/jsx-runtime";
3
+ import * as react_jsx_runtime15 from "react/jsx-runtime";
4
4
 
5
5
  //#region src/components/common/suspense-with-boundary/suspense-with-boundary.d.ts
6
6
  type SuspenseWithBoundaryProps = {
@@ -8,7 +8,7 @@ type SuspenseWithBoundaryProps = {
8
8
  errorFallback?: ErrorBoundaryProps["fallback"];
9
9
  fallback?: React.ReactNode;
10
10
  };
11
- declare function SuspenseWithBoundary(props: SuspenseWithBoundaryProps): react_jsx_runtime7.JSX.Element;
11
+ declare function SuspenseWithBoundary(props: SuspenseWithBoundaryProps): react_jsx_runtime15.JSX.Element;
12
12
  //#endregion
13
13
  export { SuspenseWithBoundary, SuspenseWithBoundaryProps };
14
- //# sourceMappingURL=index-DtKTXtS7.d.ts.map
14
+ //# sourceMappingURL=index-X53nnrcP.d.ts.map
@@ -1,7 +1,7 @@
1
+ import * as _zayne_labs_toolkit_react0 from "@zayne-labs/toolkit-react";
1
2
  import * as React$1 from "react";
2
3
  import { Component } from "react";
3
- import * as _zayne_labs_toolkit_react0 from "@zayne-labs/toolkit-react";
4
- import * as react_jsx_runtime9 from "react/jsx-runtime";
4
+ import * as react_jsx_runtime18 from "react/jsx-runtime";
5
5
 
6
6
  //#region src/components/common/error-boundary/types.d.ts
7
7
  type FallbackProps = {
@@ -49,7 +49,7 @@ declare class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryS
49
49
  };
50
50
  componentDidCatch(error: Error, info: React$1.ErrorInfo): void;
51
51
  componentDidUpdate(prevProps: ErrorBoundaryProps, prevState: ErrorBoundaryState): void;
52
- render(): react_jsx_runtime9.JSX.Element;
52
+ render(): react_jsx_runtime18.JSX.Element;
53
53
  }
54
54
  //#endregion
55
55
  //#region src/components/common/error-boundary/error-boundary-context.d.ts
@@ -67,4 +67,4 @@ declare const useErrorBoundary: <TError extends Error>() => {
67
67
  };
68
68
  //#endregion
69
69
  export { ErrorBoundary, type ErrorBoundaryContextType, ErrorBoundaryProps, FallbackProps, useErrorBoundary, useErrorBoundaryContext };
70
- //# sourceMappingURL=index-geg5m4_w.d.ts.map
70
+ //# sourceMappingURL=index-xeDQG1qT.d.ts.map
@@ -1,7 +1,9 @@
1
- import { isFunction } from "@zayne-labs/toolkit-type-helpers";
2
- import { Children, cloneElement, useEffect, useLayoutEffect, useReducer, useRef, useState } from "react";
1
+ import { SlotRoot } from "./slot-HtgJHjB9.js";
3
2
  import { useCallbackRef, useComposeRefs, useToggle } from "@zayne-labs/toolkit-react";
4
- import { on } from "@zayne-labs/toolkit-core";
3
+ import { isFunction } from "@zayne-labs/toolkit-type-helpers";
4
+ import { useCallback, useEffect, useLayoutEffect, useMemo, useReducer, useRef, useState } from "react";
5
+ import { jsx } from "react/jsx-runtime";
6
+ import { dataAttr, on } from "@zayne-labs/toolkit-core";
5
7
 
6
8
  //#region src/components/common/presence/use-presence.ts
7
9
  const useStateMachine = (config) => {
@@ -145,34 +147,65 @@ const usePresence = (options) => {
145
147
  if (refNode) stylesRef.current = getComputedStyle(refNode);
146
148
  });
147
149
  const isPresent = ["mounted", "unmountSuspended"].includes(state);
148
- return {
150
+ const isPresentOrIsTransitionComplete = isPresent || hasTransitioned;
151
+ const shouldStartTransition = presentProp && hasTransitioned;
152
+ const getPresenceProps = useCallback((innerProps) => {
153
+ const transitionState = shouldStartTransition ? "active" : "inactive";
154
+ return {
155
+ "data-present": dataAttr(isPresent),
156
+ "data-present-or-transition-complete": dataAttr(isPresentOrIsTransitionComplete),
157
+ "data-state": state,
158
+ ...variant === "transition" && { "data-transition": transitionState },
159
+ ...innerProps,
160
+ className: innerProps.className
161
+ };
162
+ }, [
163
+ isPresent,
164
+ isPresentOrIsTransitionComplete,
165
+ shouldStartTransition,
166
+ state,
167
+ variant
168
+ ]);
169
+ const propGetters = useMemo(() => ({ getPresenceProps }), [getPresenceProps]);
170
+ return useMemo(() => ({
171
+ isPresent,
172
+ isPresentOrIsTransitionComplete,
173
+ propGetters,
174
+ ref,
175
+ shouldStartTransition
176
+ }), [
149
177
  isPresent,
150
- isPresentOrIsTransitionComplete: isPresent || hasTransitioned,
178
+ isPresentOrIsTransitionComplete,
179
+ propGetters,
151
180
  ref,
152
- shouldStartTransition: presentProp && hasTransitioned
153
- };
181
+ shouldStartTransition
182
+ ]);
154
183
  };
155
184
 
156
185
  //#endregion
157
186
  //#region src/components/common/presence/presence.tsx
158
187
  function Presence(props) {
159
- const { children, forceMount = false, onExitComplete, present, variant } = props;
160
- const { isPresent, isPresentOrIsTransitionComplete, ref: presenceRef, shouldStartTransition } = usePresence({
188
+ const { children, className, forceMount = false, onExitComplete, present, variant } = props;
189
+ const { isPresent, isPresentOrIsTransitionComplete, propGetters, ref: presenceRef, shouldStartTransition } = usePresence({
161
190
  onExitComplete,
162
191
  present,
163
192
  variant
164
193
  });
165
- const resolvedChild = isFunction(children) ? children({
194
+ const context = {
166
195
  isPresent,
167
196
  isPresentOrIsTransitionComplete,
168
197
  shouldStartTransition
169
- }) : Children.only(children);
170
- const childRef = resolvedChild?.props.ref ?? resolvedChild.ref;
171
- const combinedRefs = useComposeRefs(presenceRef, childRef);
198
+ };
199
+ const resolvedChild = isFunction(children) ? children(context) : children;
200
+ const ref = useComposeRefs(presenceRef, resolvedChild?.props.ref ?? resolvedChild.ref);
172
201
  if (!(forceMount || (variant === "transition" ? isPresentOrIsTransitionComplete : isPresent))) return null;
173
- return resolvedChild && cloneElement(resolvedChild, { ref: combinedRefs });
202
+ return /* @__PURE__ */ jsx(SlotRoot, {
203
+ ref,
204
+ ...propGetters.getPresenceProps({ className }),
205
+ children: resolvedChild
206
+ });
174
207
  }
175
208
 
176
209
  //#endregion
177
210
  export { Presence };
178
- //# sourceMappingURL=presence-CzmCEhXS.js.map
211
+ //# sourceMappingURL=presence-Bj-YnaHv.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presence-Bj-YnaHv.js","names":["timeoutId: number","getPresenceProps: UsePresenceResult[\"propGetters\"][\"getPresenceProps\"]","Slot.Root"],"sources":["../../src/components/common/presence/use-presence.ts","../../src/components/common/presence/presence.tsx"],"sourcesContent":["import { dataAttr, on } from \"@zayne-labs/toolkit-core\";\nimport { useCallbackRef, useToggle } from \"@zayne-labs/toolkit-react\";\nimport type { InferProps } from \"@zayne-labs/toolkit-react/utils\";\nimport { useCallback, useEffect, useLayoutEffect, useMemo, useReducer, useRef, useState } from \"react\";\n\ntype StateMachineConfig<TState extends string, TEvent extends string> = {\n\tinitial: TState;\n\tstates: Record<TState, Partial<Record<TEvent, TState>>>;\n};\n\nconst useStateMachine = <TState extends string, TEvent extends string>(\n\tconfig: StateMachineConfig<TState, TEvent>\n) => {\n\tconst reducer = (prevState: TState, event: TEvent): TState => {\n\t\tconst newState = config.states[prevState][event] ?? prevState;\n\n\t\treturn newState;\n\t};\n\n\treturn useReducer(reducer, config.initial);\n};\n\nconst getAnimationName = (styles: CSSStyleDeclaration | null) => styles?.animationName ?? \"none\";\n\nexport type UsePresenceOptions = {\n\tonExitComplete?: () => void;\n\tpresent: boolean;\n\t/**\n\t * @default \"animation\"\n\t */\n\tvariant?: \"animation\" | \"transition\";\n};\n\nexport type UsePresenceResult = {\n\tisPresent: boolean;\n\tisPresentOrIsTransitionComplete: boolean;\n\tpropGetters: {\n\t\tgetPresenceProps: (innerProps: InferProps<HTMLElement>) => InferProps<HTMLElement>;\n\t};\n\tref: React.Ref<HTMLElement>;\n\tshouldStartTransition: boolean;\n};\n\n/**\n * React hook that provides the ability to animate the mount/unmount of a component.\n * @see https://github.com/radix-ui/primitives/blob/main/packages/react/presence/src/presence.tsx\n */\n\nconst usePresence = (options: UsePresenceOptions): UsePresenceResult => {\n\tconst { onExitComplete, present: presentProp, variant = \"animation\" } = options;\n\n\tconst stableOnExitComplete = useCallbackRef(onExitComplete);\n\n\tconst [node, setNode] = useState<HTMLElement | null>(null);\n\n\tconst [hasTransitioned, toggleHasTransitioned] = useToggle(false);\n\n\tconst stylesRef = useRef<CSSStyleDeclaration | null>(null);\n\n\tconst prevNodeStateRef = useRef<{\n\t\tprevAnimationName: string;\n\t\tprevPresent: boolean;\n\t}>({\n\t\tprevAnimationName: \"none\",\n\t\tprevPresent: presentProp,\n\t});\n\n\tconst initialState = presentProp ? \"mounted\" : \"unmounted\";\n\n\tconst [state, send] = useStateMachine({\n\t\tinitial: initialState,\n\t\tstates: {\n\t\t\tmounted: {\n\t\t\t\tANIMATION_OUT: \"unmountSuspended\",\n\t\t\t\tUNMOUNT: \"unmounted\",\n\t\t\t},\n\t\t\tunmounted: {\n\t\t\t\tMOUNT: \"mounted\",\n\t\t\t},\n\t\t\tunmountSuspended: {\n\t\t\t\tANIMATION_END: \"unmounted\",\n\t\t\t\tMOUNT: \"mounted\",\n\t\t\t},\n\t\t},\n\t});\n\n\tuseEffect(() => {\n\t\tconst currentAnimationName = getAnimationName(stylesRef.current);\n\n\t\tprevNodeStateRef.current.prevAnimationName = state === \"mounted\" ? currentAnimationName : \"none\";\n\t}, [state]);\n\n\tuseLayoutEffect(() => {\n\t\tconst styles = stylesRef.current;\n\t\tconst wasPresent = prevNodeStateRef.current.prevPresent;\n\t\tconst hasPresentChanged = wasPresent !== presentProp;\n\n\t\tif (!hasPresentChanged) return;\n\n\t\tconst prevAnimationName = prevNodeStateRef.current.prevAnimationName;\n\t\tconst currentAnimationName = getAnimationName(styles);\n\n\t\tswitch (true) {\n\t\t\tcase presentProp: {\n\t\t\t\tsend(\"MOUNT\");\n\n\t\t\t\tif (variant === \"transition\") {\n\t\t\t\t\trequestAnimationFrame(() => toggleHasTransitioned(true));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase Boolean(node) && variant === \"animation\": {\n\t\t\t\tconst hasAnimation = currentAnimationName !== \"none\" && styles?.display !== \"none\";\n\n\t\t\t\t/**\n\t\t\t\t * When `present` changes to `false`, we check changes to animation-name to\n\t\t\t\t * determine whether an animation has started. We chose this approach (reading\n\t\t\t\t * computed styles) because there is no `animationrun` event (like the `transitionrun` event) and `animationstart`\n\t\t\t\t * fires after `animation-delay` has expired which would be too late.\n\t\t\t\t */\n\n\t\t\t\tconst isAnimationStarted = hasAnimation && prevAnimationName !== currentAnimationName;\n\n\t\t\t\tconst isAnimatingOut = wasPresent && isAnimationStarted;\n\n\t\t\t\tsend(isAnimatingOut ? \"ANIMATION_OUT\" : \"UNMOUNT\");\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tdefault: {\n\t\t\t\tsend(\"UNMOUNT\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tprevNodeStateRef.current.prevPresent = presentProp;\n\t}, [presentProp, node, send, variant, toggleHasTransitioned]);\n\n\tuseLayoutEffect(() => {\n\t\tif (!node) {\n\t\t\t// Transition to the unmounted state if the node is removed prematurely.\n\t\t\t// We avoid doing so during cleanup as the node may change but still exist.\n\t\t\tsend(\"ANIMATION_END\");\n\t\t\treturn;\n\t\t}\n\n\t\tlet timeoutId: number;\n\n\t\tconst ownerWindow = node.ownerDocument.defaultView ?? globalThis;\n\n\t\tconst handleAnimationStart = (event: AnimationEvent) => {\n\t\t\tconst isTargetAnimatingNode = event.target === node;\n\n\t\t\tif (!isTargetAnimatingNode) return;\n\n\t\t\tprevNodeStateRef.current.prevAnimationName = getAnimationName(stylesRef.current);\n\t\t};\n\n\t\t/**\n\t\t * @description Triggering an ANIMATION_OUT during an ANIMATION_IN will fire an `animationcancel`\n\t\t * event for ANIMATION_IN after we have entered `unmountSuspended` state. So, we\n\t\t * make sure we only trigger ANIMATION_END for the currently active animation.\n\t\t */\n\t\tconst handleAnimationEnd = (event: AnimationEvent) => {\n\t\t\tconst currentAnimationName = getAnimationName(stylesRef.current);\n\n\t\t\t// The event.animationName is unescaped for CSS syntax, so we need to escape it to compare with the animationName computed from the style.\n\t\t\tconst isCurrentAnimation = currentAnimationName.includes(CSS.escape(event.animationName));\n\n\t\t\tconst isTargetAnimatingNode = event.target === node && isCurrentAnimation;\n\n\t\t\tif (!isTargetAnimatingNode) return;\n\n\t\t\t// With React 18 concurrency this update is applied a frame after the\n\t\t\t// animation ends, creating a flash of visible content. By setting the\n\t\t\t// animation fill mode to \"forwards\", we force the node to keep the\n\t\t\t// styles of the last keyframe, removing the flash.\n\n\t\t\t// Previously we flushed the update via ReactDom.flushSync, but with\n\t\t\t// exit animations this resulted in the node being removed from the\n\t\t\t// DOM before the synthetic animationEnd event was dispatched, meaning\n\t\t\t// user-provided event handlers would not be called.\n\t\t\t// https://github.com/radix-ui/primitives/pull/1849\n\t\t\tsend(\"ANIMATION_END\");\n\n\t\t\tif (!prevNodeStateRef.current.prevPresent) {\n\t\t\t\tconst currentFillMode = node.style.animationFillMode;\n\t\t\t\tnode.style.animationFillMode = \"forwards\";\n\n\t\t\t\t// Reset the style after the node had time to unmount (for cases\n\t\t\t\t// where the component chooses not to unmount). Doing this any\n\t\t\t\t// sooner than `setTimeout` (e.g. with `requestAnimationFrame`)\n\t\t\t\t// still causes a flash.\n\t\t\t\ttimeoutId = ownerWindow.setTimeout(() => {\n\t\t\t\t\tif (node.style.animationFillMode === \"forwards\") {\n\t\t\t\t\t\tnode.style.animationFillMode = currentFillMode;\n\t\t\t\t\t}\n\t\t\t\t}) as never;\n\t\t\t}\n\t\t};\n\n\t\tconst handleTransitionRun = (event: TransitionEvent) => {\n\t\t\tconst isTargetTransitioningNode = event.target === node;\n\n\t\t\tif (!isTargetTransitioningNode) return;\n\n\t\t\tsend(\"ANIMATION_OUT\");\n\t\t};\n\n\t\tconst handleTransitionEnd = (event: TransitionEvent) => {\n\t\t\tconst isTargetTransitioningNode = event.target === node && !prevNodeStateRef.current.prevPresent;\n\n\t\t\tif (!isTargetTransitioningNode) return;\n\n\t\t\tsend(\"ANIMATION_END\");\n\t\t};\n\n\t\tconst onAnimationStartCleanup = on(\"animationstart\", node, handleAnimationStart);\n\t\tconst onAnimationEndCleanup = on(\"animationend\", node, handleAnimationEnd);\n\t\tconst onAnimationCancelCleanup = on(\"animationcancel\", node, handleAnimationEnd);\n\n\t\tconst onTransitionRunCleanup = on(\"transitionrun\", node, handleTransitionRun);\n\t\tconst onTransitionEndCleanup = on(\"transitionend\", node, handleTransitionEnd);\n\t\tconst onTransitionCancelCleanup = on(\"transitioncancel\", node, handleTransitionEnd);\n\n\t\treturn () => {\n\t\t\townerWindow.clearTimeout(timeoutId);\n\t\t\tonAnimationStartCleanup();\n\t\t\tonAnimationEndCleanup();\n\t\t\tonAnimationCancelCleanup();\n\n\t\t\tonTransitionRunCleanup();\n\t\t\tonTransitionEndCleanup();\n\t\t\tonTransitionCancelCleanup();\n\t\t};\n\t}, [node, send]);\n\n\tuseEffect(() => {\n\t\tconst isExitCompleted = state === \"unmounted\" && !presentProp;\n\n\t\tif (isExitCompleted) {\n\t\t\ttoggleHasTransitioned(false);\n\t\t\tstableOnExitComplete();\n\t\t}\n\t}, [state, presentProp, stableOnExitComplete, toggleHasTransitioned]);\n\n\tconst ref = useCallbackRef((refNode: HTMLElement | null) => {\n\t\tsetNode(refNode);\n\n\t\tif (refNode) {\n\t\t\tstylesRef.current = getComputedStyle(refNode);\n\t\t}\n\t});\n\n\tconst MOUNTED_STATES = [\"mounted\", \"unmountSuspended\"] satisfies Array<typeof state>;\n\tconst isPresent = MOUNTED_STATES.includes(state);\n\tconst isPresentOrIsTransitionComplete = isPresent || hasTransitioned;\n\tconst shouldStartTransition = presentProp && hasTransitioned;\n\n\tconst getPresenceProps: UsePresenceResult[\"propGetters\"][\"getPresenceProps\"] = useCallback(\n\t\t(innerProps) => {\n\t\t\tconst transitionState = shouldStartTransition ? \"active\" : \"inactive\";\n\n\t\t\treturn {\n\t\t\t\t\"data-present\": dataAttr(isPresent),\n\t\t\t\t\"data-present-or-transition-complete\": dataAttr(isPresentOrIsTransitionComplete),\n\t\t\t\t\"data-state\": state,\n\t\t\t\t...(variant === \"transition\" && { \"data-transition\": transitionState }),\n\t\t\t\t...innerProps,\n\t\t\t\tclassName: innerProps.className,\n\t\t\t};\n\t\t},\n\t\t[isPresent, isPresentOrIsTransitionComplete, shouldStartTransition, state, variant]\n\t);\n\n\tconst propGetters = useMemo(() => ({ getPresenceProps }), [getPresenceProps]);\n\n\tconst result = useMemo<UsePresenceResult>(\n\t\t() =>\n\t\t\t({\n\t\t\t\tisPresent,\n\t\t\t\tisPresentOrIsTransitionComplete,\n\t\t\t\tpropGetters,\n\t\t\t\tref,\n\t\t\t\tshouldStartTransition,\n\t\t\t}) satisfies UsePresenceResult,\n\t\t[isPresent, isPresentOrIsTransitionComplete, propGetters, ref, shouldStartTransition]\n\t);\n\n\treturn result;\n};\n\nexport { usePresence };\n","\"use client\";\n\nimport { useComposeRefs } from \"@zayne-labs/toolkit-react\";\nimport { isFunction, type UnknownObject } from \"@zayne-labs/toolkit-type-helpers\";\nimport * as React from \"react\";\nimport { Slot } from \"../slot\";\nimport { type UsePresenceOptions, type UsePresenceResult, usePresence } from \"./use-presence\";\n\ntype RefProp = { ref?: React.Ref<HTMLElement> };\n\ntype RenderPropContext = Omit<UsePresenceResult, \"propGetters\" | \"ref\">;\n\ntype PresenceProps = UsePresenceOptions & {\n\tchildren?: React.ReactElement<RefProp> | ((props: RenderPropContext) => React.ReactElement<RefProp>);\n\tclassName?: string;\n\tforceMount?: boolean;\n};\n\nfunction Presence(props: PresenceProps) {\n\tconst { children, className, forceMount = false, onExitComplete, present, variant } = props;\n\n\tconst {\n\t\tisPresent,\n\t\tisPresentOrIsTransitionComplete,\n\t\tpropGetters,\n\t\tref: presenceRef,\n\t\tshouldStartTransition,\n\t} = usePresence({ onExitComplete, present, variant });\n\n\tconst context = {\n\t\tisPresent,\n\t\tisPresentOrIsTransitionComplete,\n\t\tshouldStartTransition,\n\t} satisfies RenderPropContext;\n\n\tconst resolvedChild = isFunction(children) ? children(context) : children;\n\n\tconst childRef = (resolvedChild?.props.ref\n\t\t?? (resolvedChild as unknown as UnknownObject).ref) as React.Ref<HTMLElement>;\n\n\tconst ref = useComposeRefs(presenceRef, childRef);\n\n\tconst shouldRender =\n\t\tforceMount || (variant === \"transition\" ? isPresentOrIsTransitionComplete : isPresent);\n\n\tif (!shouldRender) {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<Slot.Root ref={ref} {...propGetters.getPresenceProps({ className })}>\n\t\t\t{resolvedChild}\n\t\t</Slot.Root>\n\t);\n}\n\nexport { Presence };\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import { __export } from "./chunk-CTAAG5j7.js";
2
- import { getMultipleSlots, getSingleSlot } from "@zayne-labs/toolkit-react/utils";
3
2
  import { assert, isFunction } from "@zayne-labs/toolkit-type-helpers";
4
3
  import "react";
4
+ import { getMultipleSlots, getSingleSlot } from "@zayne-labs/toolkit-react/utils";
5
5
  import { toArray } from "@zayne-labs/toolkit-core";
6
6
 
7
7
  //#region src/components/common/show/show.tsx
@@ -14,8 +14,7 @@ function ShowRoot(props) {
14
14
  assert(!(fallBackSlot$1 && fallback), "The fallback prop and <Show.Fallback> cannot be used at the same time.");
15
15
  return foundContentSlot ?? fallBackSlot$1 ?? fallback;
16
16
  }
17
- const resolvedChildren = isFunction(children) ? children(when) : children;
18
- const { regularChildren, slots: [contentSlot, fallBackSlot] } = getMultipleSlots(resolvedChildren, [ShowContent, ShowFallback], {
17
+ const { regularChildren, slots: [contentSlot, fallBackSlot] } = getMultipleSlots(isFunction(children) ? children(when) : children, [ShowContent, ShowFallback], {
19
18
  errorMessage: ["Only one <Show.Content> component is allowed", "Only one <Show.Fallback> or <Show.OtherWise> component is allowed"],
20
19
  throwOnMultipleSlotMatch: true
21
20
  });
@@ -47,4 +46,4 @@ var show_parts_exports = /* @__PURE__ */ __export({
47
46
 
48
47
  //#endregion
49
48
  export { ShowContent, ShowFallback, ShowRoot, show_parts_exports };
50
- //# sourceMappingURL=show-CDY_D1V0.js.map
49
+ //# sourceMappingURL=show-kIsXcWiR.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"show-CDY_D1V0.js","names":["fallBackSlot"],"sources":["../../src/components/common/show/show.tsx","../../src/components/common/show/show-parts.ts"],"sourcesContent":["\"use client\";\n\nimport { toArray } from \"@zayne-labs/toolkit-core\";\nimport { getMultipleSlots, getSingleSlot } from \"@zayne-labs/toolkit-react/utils\";\nimport { assert, isFunction } from \"@zayne-labs/toolkit-type-helpers\";\nimport * as React from \"react\";\n\ntype ShowProps<TWhen> =\n\t| {\n\t\t\tchildren: React.ReactNode;\n\t\t\tcontrol: \"content\";\n\t\t\tfallback?: React.ReactNode;\n\t\t\twhen?: never;\n\t }\n\t| {\n\t\t\tchildren: React.ReactNode | ((value: TWhen) => React.ReactNode);\n\t\t\tcontrol?: \"root\";\n\t\t\tfallback?: React.ReactNode;\n\t\t\twhen: false | TWhen | null | undefined;\n\t };\n\nexport function ShowRoot<TWhen>(props: ShowProps<TWhen>) {\n\tconst { children, control = \"root\", fallback = null, when } = props;\n\n\tif (control === \"content\" && !isFunction(children)) {\n\t\tconst childrenArray = toArray(children) as Array<React.ReactElement<ShowContentProps<TWhen>>>;\n\n\t\tconst foundContentSlot = childrenArray.find((child) => Boolean(child.props.when));\n\n\t\tconst fallBackSlot = getSingleSlot(childrenArray, ShowFallback);\n\n\t\tassert(\n\t\t\t!(fallBackSlot && fallback),\n\t\t\t\"The fallback prop and <Show.Fallback> cannot be used at the same time.\"\n\t\t);\n\n\t\treturn foundContentSlot ?? fallBackSlot ?? fallback;\n\t}\n\n\tconst resolvedChildren = isFunction(children) ? children(when as TWhen) : children;\n\n\tconst {\n\t\tregularChildren,\n\t\tslots: [contentSlot, fallBackSlot],\n\t} = getMultipleSlots(resolvedChildren, [ShowContent, ShowFallback], {\n\t\terrorMessage: [\n\t\t\t\"Only one <Show.Content> component is allowed\",\n\t\t\t\"Only one <Show.Fallback> or <Show.OtherWise> component is allowed\",\n\t\t],\n\t\tthrowOnMultipleSlotMatch: true,\n\t});\n\n\tif (!when) {\n\t\tassert(\n\t\t\t!(fallBackSlot && fallback),\n\t\t\t\"The fallback prop and <Show.Fallback> cannot be used at the same time.\"\n\t\t);\n\n\t\treturn fallBackSlot ?? fallback;\n\t}\n\n\treturn contentSlot ?? regularChildren;\n}\n\ntype ShowContentProps<TWhen> = Pick<ShowProps<TWhen>, \"children\" | \"when\">;\n\nexport function ShowContent<TWhen>(props: ShowContentProps<TWhen>) {\n\tconst { children, when } = props;\n\n\tconst resolvedChildren = isFunction(children) ? children(when as TWhen) : children;\n\n\treturn resolvedChildren;\n}\n\nShowContent.slotSymbol = Symbol(\"show-content\");\n\nexport function ShowFallback(props: { children: React.ReactNode }) {\n\tconst { children } = props;\n\n\treturn children;\n}\nShowFallback.slotSymbol = Symbol(\"show-fallback\");\n","export {\n\tShowContent as Content,\n\tShowFallback as Fallback,\n\tShowFallback as Otherwise,\n\tShowRoot as Root,\n} from \"./show\";\n"],"mappings":";;;;;;;AAqBA,SAAgB,SAAgB,OAAyB;CACxD,MAAM,EAAE,UAAU,UAAU,QAAQ,WAAW,MAAM,SAAS;AAE9D,KAAI,YAAY,aAAa,CAAC,WAAW,SAAS,EAAE;EACnD,MAAM,gBAAgB,QAAQ,SAAS;EAEvC,MAAM,mBAAmB,cAAc,MAAM,UAAU,QAAQ,MAAM,MAAM,KAAK,CAAC;EAEjF,MAAMA,iBAAe,cAAc,eAAe,aAAa;AAE/D,SACC,EAAEA,kBAAgB,WAClB,yEACA;AAED,SAAO,oBAAoBA,kBAAgB;;CAG5C,MAAM,mBAAmB,WAAW,SAAS,GAAG,SAAS,KAAc,GAAG;CAE1E,MAAM,EACL,iBACA,OAAO,CAAC,aAAa,kBAClB,iBAAiB,kBAAkB,CAAC,aAAa,aAAa,EAAE;EACnE,cAAc,CACb,gDACA,oEACA;EACD,0BAA0B;EAC1B,CAAC;AAEF,KAAI,CAAC,MAAM;AACV,SACC,EAAE,gBAAgB,WAClB,yEACA;AAED,SAAO,gBAAgB;;AAGxB,QAAO,eAAe;;AAKvB,SAAgB,YAAmB,OAAgC;CAClE,MAAM,EAAE,UAAU,SAAS;AAI3B,QAFyB,WAAW,SAAS,GAAG,SAAS,KAAc,GAAG;;AAK3E,YAAY,aAAa,OAAO,eAAe;AAE/C,SAAgB,aAAa,OAAsC;CAClE,MAAM,EAAE,aAAa;AAErB,QAAO;;AAER,aAAa,aAAa,OAAO,gBAAgB"}
1
+ {"version":3,"file":"show-kIsXcWiR.js","names":["fallBackSlot"],"sources":["../../src/components/common/show/show.tsx","../../src/components/common/show/show-parts.ts"],"sourcesContent":["\"use client\";\n\nimport { toArray } from \"@zayne-labs/toolkit-core\";\nimport { getMultipleSlots, getSingleSlot } from \"@zayne-labs/toolkit-react/utils\";\nimport { assert, isFunction } from \"@zayne-labs/toolkit-type-helpers\";\nimport * as React from \"react\";\n\ntype ShowProps<TWhen> =\n\t| {\n\t\t\tchildren: React.ReactNode;\n\t\t\tcontrol: \"content\";\n\t\t\tfallback?: React.ReactNode;\n\t\t\twhen?: never;\n\t }\n\t| {\n\t\t\tchildren: React.ReactNode | ((value: TWhen) => React.ReactNode);\n\t\t\tcontrol?: \"root\";\n\t\t\tfallback?: React.ReactNode;\n\t\t\twhen: false | TWhen | null | undefined;\n\t };\n\nexport function ShowRoot<TWhen>(props: ShowProps<TWhen>) {\n\tconst { children, control = \"root\", fallback = null, when } = props;\n\n\tif (control === \"content\" && !isFunction(children)) {\n\t\tconst childrenArray = toArray(children) as Array<React.ReactElement<ShowContentProps<TWhen>>>;\n\n\t\tconst foundContentSlot = childrenArray.find((child) => Boolean(child.props.when));\n\n\t\tconst fallBackSlot = getSingleSlot(childrenArray, ShowFallback);\n\n\t\tassert(\n\t\t\t!(fallBackSlot && fallback),\n\t\t\t\"The fallback prop and <Show.Fallback> cannot be used at the same time.\"\n\t\t);\n\n\t\treturn foundContentSlot ?? fallBackSlot ?? fallback;\n\t}\n\n\tconst resolvedChildren = isFunction(children) ? children(when as TWhen) : children;\n\n\tconst {\n\t\tregularChildren,\n\t\tslots: [contentSlot, fallBackSlot],\n\t} = getMultipleSlots(resolvedChildren, [ShowContent, ShowFallback], {\n\t\terrorMessage: [\n\t\t\t\"Only one <Show.Content> component is allowed\",\n\t\t\t\"Only one <Show.Fallback> or <Show.OtherWise> component is allowed\",\n\t\t],\n\t\tthrowOnMultipleSlotMatch: true,\n\t});\n\n\tif (!when) {\n\t\tassert(\n\t\t\t!(fallBackSlot && fallback),\n\t\t\t\"The fallback prop and <Show.Fallback> cannot be used at the same time.\"\n\t\t);\n\n\t\treturn fallBackSlot ?? fallback;\n\t}\n\n\treturn contentSlot ?? regularChildren;\n}\n\ntype ShowContentProps<TWhen> = Pick<ShowProps<TWhen>, \"children\" | \"when\">;\n\nexport function ShowContent<TWhen>(props: ShowContentProps<TWhen>) {\n\tconst { children, when } = props;\n\n\tconst resolvedChildren = isFunction(children) ? children(when as TWhen) : children;\n\n\treturn resolvedChildren;\n}\n\nShowContent.slotSymbol = Symbol(\"show-content\");\n\nexport function ShowFallback(props: { children: React.ReactNode }) {\n\tconst { children } = props;\n\n\treturn children;\n}\nShowFallback.slotSymbol = Symbol(\"show-fallback\");\n","export {\n\tShowContent as Content,\n\tShowFallback as Fallback,\n\tShowFallback as Otherwise,\n\tShowRoot as Root,\n} from \"./show\";\n"],"mappings":";;;;;;;AAqBA,SAAgB,SAAgB,OAAyB;CACxD,MAAM,EAAE,UAAU,UAAU,QAAQ,WAAW,MAAM,SAAS;AAE9D,KAAI,YAAY,aAAa,CAAC,WAAW,SAAS,EAAE;EACnD,MAAM,gBAAgB,QAAQ,SAAS;EAEvC,MAAM,mBAAmB,cAAc,MAAM,UAAU,QAAQ,MAAM,MAAM,KAAK,CAAC;EAEjF,MAAMA,iBAAe,cAAc,eAAe,aAAa;AAE/D,SACC,EAAEA,kBAAgB,WAClB,yEACA;AAED,SAAO,oBAAoBA,kBAAgB;;CAK5C,MAAM,EACL,iBACA,OAAO,CAAC,aAAa,kBAClB,iBALqB,WAAW,SAAS,GAAG,SAAS,KAAc,GAAG,UAKnC,CAAC,aAAa,aAAa,EAAE;EACnE,cAAc,CACb,gDACA,oEACA;EACD,0BAA0B;EAC1B,CAAC;AAEF,KAAI,CAAC,MAAM;AACV,SACC,EAAE,gBAAgB,WAClB,yEACA;AAED,SAAO,gBAAgB;;AAGxB,QAAO,eAAe;;AAKvB,SAAgB,YAAmB,OAAgC;CAClE,MAAM,EAAE,UAAU,SAAS;AAI3B,QAFyB,WAAW,SAAS,GAAG,SAAS,KAAc,GAAG;;AAK3E,YAAY,aAAa,OAAO,eAAe;AAE/C,SAAgB,aAAa,OAAsC;CAClE,MAAM,EAAE,aAAa;AAErB,QAAO;;AAER,aAAa,aAAa,OAAO,gBAAgB"}
@@ -1,7 +1,7 @@
1
1
  import { __export } from "./chunk-CTAAG5j7.js";
2
- import { composeRefs, mergeProps } from "@zayne-labs/toolkit-react/utils";
3
2
  import { isArray } from "@zayne-labs/toolkit-type-helpers";
4
3
  import { Children, Fragment, cloneElement, isValidElement } from "react";
4
+ import { composeRefs, mergeProps } from "@zayne-labs/toolkit-react/utils";
5
5
  import { jsx } from "react/jsx-runtime";
6
6
 
7
7
  //#region src/components/common/slot/slot.tsx
@@ -38,13 +38,11 @@ function SlotClone(props) {
38
38
  if (Children.count(children) > 1) return Children.only(null);
39
39
  const resolvedChildren = isArray(children) ? children[0] : children;
40
40
  if (!isValidElement(resolvedChildren)) return null;
41
- const childRef = resolvedChildren.props.ref ?? resolvedChildren.ref;
42
- const ref = forwardedRef ? composeRefs(forwardedRef, childRef) : childRef;
43
- const clonedProps = {
41
+ const ref = composeRefs(forwardedRef, resolvedChildren.props.ref ?? resolvedChildren.ref);
42
+ return cloneElement(resolvedChildren, {
44
43
  ...mergeProps(restOfSlotProps, resolvedChildren.props),
45
44
  ...resolvedChildren.type !== Fragment && { ref }
46
- };
47
- return cloneElement(resolvedChildren, clonedProps);
45
+ });
48
46
  }
49
47
 
50
48
  //#endregion
@@ -56,4 +54,4 @@ var slot_parts_exports = /* @__PURE__ */ __export({
56
54
 
57
55
  //#endregion
58
56
  export { SlotRoot, SlotSlottable, slot_parts_exports };
59
- //# sourceMappingURL=slot-DNzYW76j.js.map
57
+ //# sourceMappingURL=slot-HtgJHjB9.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slot-HtgJHjB9.js","names":["ReactFragment"],"sources":["../../src/components/common/slot/slot.tsx","../../src/components/common/slot/slot-parts.ts"],"sourcesContent":["import { composeRefs, type InferProps, mergeProps } from \"@zayne-labs/toolkit-react/utils\";\nimport { isArray, type UnknownObject } from \"@zayne-labs/toolkit-type-helpers\";\nimport * as React from \"react\";\nimport { Children, cloneElement, isValidElement, Fragment as ReactFragment } from \"react\";\n\ntype SlotProps = InferProps<HTMLElement> & { ref?: React.Ref<HTMLElement> };\n\n/* -------------------------------------------------------------------------------------------------\n * Slot\n * ----------------------------------------------------------------------------------------------- */\n\nexport function SlotRoot(props: SlotProps) {\n\tconst { children, ...restOfSlotProps } = props;\n\n\tconst childrenArray = isArray<React.ReactNode>(children) ? children : [children];\n\n\tconst slottable = childrenArray.find((element) => isSlottable(element));\n\n\tif (!slottable) {\n\t\treturn <SlotClone {...restOfSlotProps}>{children}</SlotClone>;\n\t}\n\n\tif (!isValidElement<SlotProps>(slottable)) {\n\t\treturn null;\n\t}\n\n\t// == The new element to render is the one passed as a child of `Slot.Slottable`\n\tconst newElement = slottable.props.children;\n\n\tif (Children.count(newElement) > 1) {\n\t\treturn Children.only(null);\n\t}\n\n\tconst resolvedNewElement = isArray(newElement) ? newElement[0] : newElement;\n\n\tif (!isValidElement(resolvedNewElement)) {\n\t\treturn null;\n\t}\n\n\tconst newChildren = childrenArray.map((child) => {\n\t\tif (child === slottable) {\n\t\t\t// == Because the new element will be the one rendered, we are only interested in grabbing its children (`newElement.props.children`)\n\t\t\treturn (resolvedNewElement.props as SlotProps).children;\n\t\t}\n\n\t\treturn child;\n\t});\n\n\treturn (\n\t\t<SlotClone {...restOfSlotProps}>\n\t\t\t{cloneElement(resolvedNewElement, undefined, newChildren)}\n\t\t</SlotClone>\n\t);\n}\n\n/* -------------------------------------------------------------------------------------------------\n * Slottable\n * ----------------------------------------------------------------------------------------------- */\n\nexport function SlotSlottable({ children }: Pick<SlotProps, \"children\">) {\n\treturn children;\n}\n\nconst isSlottable = (child: React.ReactNode): child is React.ReactElement => {\n\treturn isValidElement(child) && child.type === SlotSlottable;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * SlotClone\n * ----------------------------------------------------------------------------------------------- */\ntype SlotCloneProps = Pick<SlotProps, \"children\" | \"ref\">;\n\nfunction SlotClone(props: SlotCloneProps) {\n\tconst { children, ref: forwardedRef, ...restOfSlotProps } = props;\n\n\tif (Children.count(children) > 1) {\n\t\treturn Children.only(null);\n\t}\n\n\tconst resolvedChildren = isArray(children) ? children[0] : children;\n\n\tif (!isValidElement<UnknownObject>(resolvedChildren)) {\n\t\treturn null;\n\t}\n\n\tconst childRef = (resolvedChildren.props.ref\n\t\t?? (resolvedChildren as unknown as UnknownObject).ref) as React.Ref<HTMLElement>;\n\n\tconst ref = composeRefs(forwardedRef, childRef);\n\n\tconst clonedProps = {\n\t\t...mergeProps(restOfSlotProps, resolvedChildren.props),\n\t\t...(resolvedChildren.type !== ReactFragment && { ref }),\n\t};\n\n\treturn cloneElement(resolvedChildren, clonedProps);\n}\n","export { SlotRoot as Root, SlotSlottable as Slottable } from \"./slot\";\n"],"mappings":";;;;;;;AAWA,SAAgB,SAAS,OAAkB;CAC1C,MAAM,EAAE,SAAU,GAAG,oBAAoB;CAEzC,MAAM,gBAAgB,QAAyB,SAAS,GAAG,WAAW,CAAC,SAAS;CAEhF,MAAM,YAAY,cAAc,MAAM,YAAY,YAAY,QAAQ,CAAC;AAEvE,KAAI,CAAC,UACJ,QAAO,oBAAC;EAAU,GAAI;EAAkB;GAAqB;AAG9D,KAAI,CAAC,eAA0B,UAAU,CACxC,QAAO;CAIR,MAAM,aAAa,UAAU,MAAM;AAEnC,KAAI,SAAS,MAAM,WAAW,GAAG,EAChC,QAAO,SAAS,KAAK,KAAK;CAG3B,MAAM,qBAAqB,QAAQ,WAAW,GAAG,WAAW,KAAK;AAEjE,KAAI,CAAC,eAAe,mBAAmB,CACtC,QAAO;CAGR,MAAM,cAAc,cAAc,KAAK,UAAU;AAChD,MAAI,UAAU,UAEb,QAAQ,mBAAmB,MAAoB;AAGhD,SAAO;GACN;AAEF,QACC,oBAAC;EAAU,GAAI;YACb,aAAa,oBAAoB,QAAW,YAAY;GAC9C;;AAQd,SAAgB,cAAc,EAAE,YAAyC;AACxE,QAAO;;AAGR,MAAM,eAAe,UAAwD;AAC5E,QAAO,eAAe,MAAM,IAAI,MAAM,SAAS;;AAQhD,SAAS,UAAU,OAAuB;CACzC,MAAM,EAAE,UAAU,KAAK,aAAc,GAAG,oBAAoB;AAE5D,KAAI,SAAS,MAAM,SAAS,GAAG,EAC9B,QAAO,SAAS,KAAK,KAAK;CAG3B,MAAM,mBAAmB,QAAQ,SAAS,GAAG,SAAS,KAAK;AAE3D,KAAI,CAAC,eAA8B,iBAAiB,CACnD,QAAO;CAMR,MAAM,MAAM,YAAY,cAHN,iBAAiB,MAAM,OACpC,iBAA8C,IAEJ;AAO/C,QAAO,aAAa,kBALA;EACnB,GAAG,WAAW,iBAAiB,iBAAiB,MAAM;EACtD,GAAI,iBAAiB,SAASA,YAAiB,EAAE,KAAK;EACtD,CAEiD"}
@@ -1,5 +1,5 @@
1
- import { PolymorphicProps } from "@zayne-labs/toolkit-react/utils";
2
1
  import * as React from "react";
2
+ import { PolymorphicProps } from "@zayne-labs/toolkit-react/utils";
3
3
  import * as react_jsx_runtime0 from "react/jsx-runtime";
4
4
 
5
5
  //#region src/components/ui/card/card.d.ts
@@ -1,5 +1,5 @@
1
1
  import { __export } from "../../chunk-CTAAG5j7.js";
2
- import { SlotRoot } from "../../slot-DNzYW76j.js";
2
+ import { SlotRoot } from "../../slot-HtgJHjB9.js";
3
3
  import { cnMerge } from "../../cn-DdD3uYxA.js";
4
4
  import "react";
5
5
  import { jsx } from "react/jsx-runtime";
@@ -67,8 +67,7 @@ function CardAction(props) {
67
67
  }
68
68
  function CardFooter(props) {
69
69
  const { as: Element = "footer", asChild, className,...restOfProps } = props;
70
- const Component$1 = asChild ? SlotRoot : Element;
71
- return /* @__PURE__ */ jsx(Component$1, {
70
+ return /* @__PURE__ */ jsx(asChild ? SlotRoot : Element, {
72
71
  "data-scope": "card",
73
72
  "data-part": "footer",
74
73
  "data-slot": "card-footer",