@caratlogic/design-system 0.1.47 → 0.1.49

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 (32) hide show
  1. package/dist/components/atoms/BrandLoader/BrandLoader.d.ts +10 -0
  2. package/dist/components/atoms/BrandLoader/BrandLoader.d.ts.map +1 -0
  3. package/dist/components/atoms/BrandLoader/BrandLoader.types.d.ts +9 -0
  4. package/dist/components/atoms/BrandLoader/BrandLoader.types.d.ts.map +1 -0
  5. package/dist/components/atoms/BrandLoader/BrandLoader.utils.d.ts +13 -0
  6. package/dist/components/atoms/BrandLoader/BrandLoader.utils.d.ts.map +1 -0
  7. package/dist/components/atoms/BrandLoader/index.d.ts +4 -0
  8. package/dist/components/atoms/BrandLoader/index.d.ts.map +1 -0
  9. package/dist/components/molecules/DropdownMenu/DropdownMenu.parts.d.ts +4 -0
  10. package/dist/components/molecules/DropdownMenu/DropdownMenu.parts.d.ts.map +1 -1
  11. package/dist/components/molecules/PageLoader/PageLoader.d.ts +6 -0
  12. package/dist/components/molecules/PageLoader/PageLoader.d.ts.map +1 -0
  13. package/dist/components/molecules/PageLoader/PageLoader.types.d.ts +5 -0
  14. package/dist/components/molecules/PageLoader/PageLoader.types.d.ts.map +1 -0
  15. package/dist/components/molecules/PageLoader/index.d.ts +3 -0
  16. package/dist/components/molecules/PageLoader/index.d.ts.map +1 -0
  17. package/dist/components/molecules/SubmittingOverlay/SubmittingOverlay.d.ts +11 -0
  18. package/dist/components/molecules/SubmittingOverlay/SubmittingOverlay.d.ts.map +1 -0
  19. package/dist/components/molecules/SubmittingOverlay/SubmittingOverlay.types.d.ts +7 -0
  20. package/dist/components/molecules/SubmittingOverlay/SubmittingOverlay.types.d.ts.map +1 -0
  21. package/dist/components/molecules/SubmittingOverlay/SubmittingOverlay.utils.d.ts +2 -0
  22. package/dist/components/molecules/SubmittingOverlay/SubmittingOverlay.utils.d.ts.map +1 -0
  23. package/dist/components/molecules/SubmittingOverlay/index.d.ts +3 -0
  24. package/dist/components/molecules/SubmittingOverlay/index.d.ts.map +1 -0
  25. package/dist/index.cjs.js +59 -2
  26. package/dist/index.cjs.js.map +1 -1
  27. package/dist/index.d.ts +3 -0
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.esm.js +56 -3
  30. package/dist/index.esm.js.map +1 -1
  31. package/dist/source.css +33 -0
  32. package/package.json +1 -1
@@ -0,0 +1,10 @@
1
+ import type { ReactElement } from 'react';
2
+ import type { BrandLoaderProps } from './BrandLoader.types';
3
+ export type { BrandLoaderProps, BrandLoaderTone } from './BrandLoader.types';
4
+ /**
5
+ * The animated brand gem: it winds up, springs out with a glow and settles while
6
+ * two rings ripple out behind it. Needs the `loader-*` animations from
7
+ * `source.css`; motion stops for users who ask for reduced motion.
8
+ */
9
+ export declare function BrandLoader({ logoSrc, tone, className }: BrandLoaderProps): ReactElement;
10
+ //# sourceMappingURL=BrandLoader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrandLoader.d.ts","sourceRoot":"","sources":["../../../../src/components/atoms/BrandLoader/BrandLoader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAI1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAG5D,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE7E;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,IAAgB,EAAE,SAAS,EAAE,EAAE,gBAAgB,GAAG,YAAY,CAuBpG"}
@@ -0,0 +1,9 @@
1
+ /** `inverse` is for a dark backdrop, such as SubmittingOverlay's scrim. */
2
+ export type BrandLoaderTone = 'default' | 'inverse';
3
+ export interface BrandLoaderProps {
4
+ /** The brand gem image; each app passes its own asset URL. */
5
+ logoSrc: string;
6
+ tone?: BrandLoaderTone;
7
+ className?: string;
8
+ }
9
+ //# sourceMappingURL=BrandLoader.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrandLoader.types.d.ts","sourceRoot":"","sources":["../../../../src/components/atoms/BrandLoader/BrandLoader.types.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,SAAS,CAAC;AAEpD,MAAM,WAAW,gBAAgB;IAC/B,8DAA8D;IAC9D,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
@@ -0,0 +1,13 @@
1
+ import type { CSSProperties } from 'react';
2
+ import type { BrandLoaderTone } from './BrandLoader.types';
3
+ export declare const BRAND_LOADER_RINGS: readonly [{
4
+ readonly id: "first";
5
+ readonly delay: "0s";
6
+ }, {
7
+ readonly id: "second";
8
+ readonly delay: "0.45s";
9
+ }];
10
+ export declare const RING_TONE_CLASS: Record<BrandLoaderTone, string>;
11
+ /** Clips the sheen to the logo's own shape. */
12
+ export declare const logoMaskStyle: (logoSrc: string) => CSSProperties;
13
+ //# sourceMappingURL=BrandLoader.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrandLoader.utils.d.ts","sourceRoot":"","sources":["../../../../src/components/atoms/BrandLoader/BrandLoader.utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAG3D,eAAO,MAAM,kBAAkB;;;;;;EAGrB,CAAC;AAEX,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAG3D,CAAC;AAEF,+CAA+C;AAC/C,eAAO,MAAM,aAAa,GAAI,SAAS,MAAM,KAAG,aAG9C,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { BrandLoader } from './BrandLoader';
2
+ export type { BrandLoaderProps, BrandLoaderTone } from './BrandLoader';
3
+ export { BRAND_LOADER_RINGS } from './BrandLoader.utils';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/atoms/BrandLoader/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACvE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC"}
@@ -8,11 +8,15 @@ declare const DropdownMenuSub: React.FC<DropdownMenuPrimitive.DropdownMenuSubPro
8
8
  declare const DropdownMenuRadioGroup: React.ForwardRefExoticComponent<DropdownMenuPrimitive.DropdownMenuRadioGroupProps & React.RefAttributes<HTMLDivElement>>;
9
9
  declare const DropdownMenuSubTrigger: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSubTriggerProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
10
10
  inset?: boolean;
11
+ /** Shown in a tooltip while `disabled`. */
12
+ disabledReason?: string;
11
13
  } & React.RefAttributes<HTMLDivElement>>;
12
14
  declare const DropdownMenuSubContent: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuSubContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
13
15
  declare const DropdownMenuContent: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
14
16
  declare const DropdownMenuItem: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
15
17
  inset?: boolean;
18
+ /** Shown in a tooltip while `disabled`. */
19
+ disabledReason?: string;
16
20
  } & React.RefAttributes<HTMLDivElement>>;
17
21
  declare const DropdownMenuCheckboxItem: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuCheckboxItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
18
22
  declare const DropdownMenuRadioItem: React.ForwardRefExoticComponent<Omit<DropdownMenuPrimitive.DropdownMenuRadioItemProps & React.RefAttributes<HTMLDivElement>, "ref"> & React.RefAttributes<HTMLDivElement>>;
@@ -1 +1 @@
1
- {"version":3,"file":"DropdownMenu.parts.d.ts","sourceRoot":"","sources":["../../../../src/components/molecules/DropdownMenu/DropdownMenu.parts.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,qBAAqB,MAAM,+BAA+B,CAAC;AAKvE,QAAA,MAAM,YAAY,mDAA6B,CAAC;AAChD,QAAA,MAAM,mBAAmB,0HAAgC,CAAC;AAC1D,QAAA,MAAM,iBAAiB,qHAA8B,CAAC;AACtD,QAAA,MAAM,kBAAkB,yDAA+B,CAAC;AACxD,QAAA,MAAM,eAAe,sDAA4B,CAAC;AAClD,QAAA,MAAM,sBAAsB,0HAAmC,CAAC;AAEhE,QAAA,MAAM,sBAAsB;YAGhB,OAAO;wCAejB,CAAC;AAIH,QAAA,MAAM,sBAAsB,6KAY1B,CAAC;AAIH,QAAA,MAAM,mBAAmB,0KAevB,CAAC;AAGH,QAAA,MAAM,gBAAgB;YAGV,OAAO;wCAYjB,CAAC;AAGH,QAAA,MAAM,wBAAwB,+KAoB5B,CAAC;AAIH,QAAA,MAAM,qBAAqB,4KAmBzB,CAAC;AAGH,QAAA,MAAM,iBAAiB;YAGX,OAAO;wCAYjB,CAAC;AAGH,QAAA,MAAM,qBAAqB,4KASzB,CAAC;AAGH,QAAA,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,CAWzE,CAAC;AAGF,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,wBAAwB,EACxB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,GACtB,CAAC"}
1
+ {"version":3,"file":"DropdownMenu.parts.d.ts","sourceRoot":"","sources":["../../../../src/components/molecules/DropdownMenu/DropdownMenu.parts.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,qBAAqB,MAAM,+BAA+B,CAAC;AAWvE,QAAA,MAAM,YAAY,mDAA6B,CAAC;AAChD,QAAA,MAAM,mBAAmB,0HAAgC,CAAC;AAC1D,QAAA,MAAM,iBAAiB,qHAA8B,CAAC;AACtD,QAAA,MAAM,kBAAkB,yDAA+B,CAAC;AACxD,QAAA,MAAM,eAAe,sDAA4B,CAAC;AAClD,QAAA,MAAM,sBAAsB,0HAAmC,CAAC;AAwBhE,QAAA,MAAM,sBAAsB;YAGhB,OAAO;IACf,2CAA2C;qBAC1B,MAAM;wCAmB1B,CAAC;AAIF,QAAA,MAAM,sBAAsB,6KAY1B,CAAC;AAIH,QAAA,MAAM,mBAAmB,0KAevB,CAAC;AAGH,QAAA,MAAM,gBAAgB;YAGV,OAAO;IACf,2CAA2C;qBAC1B,MAAM;wCAgB1B,CAAC;AAGF,QAAA,MAAM,wBAAwB,+KAoB5B,CAAC;AAIH,QAAA,MAAM,qBAAqB,4KAmBzB,CAAC;AAGH,QAAA,MAAM,iBAAiB;YAGX,OAAO;wCAYjB,CAAC;AAGH,QAAA,MAAM,qBAAqB,4KASzB,CAAC;AAGH,QAAA,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC,CAWzE,CAAC;AAGF,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,gBAAgB,EAChB,wBAAwB,EACxB,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,sBAAsB,EACtB,sBAAsB,EACtB,sBAAsB,EACtB,qBAAqB,GACtB,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { ReactElement } from 'react';
2
+ import type { PageLoaderProps } from './PageLoader.types';
3
+ export type { PageLoaderProps } from './PageLoader.types';
4
+ /** Fills the content area with the brand loader while a page loads. */
5
+ export declare function PageLoader({ logoSrc, className }: PageLoaderProps): ReactElement;
6
+ //# sourceMappingURL=PageLoader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PageLoader.d.ts","sourceRoot":"","sources":["../../../../src/components/molecules/PageLoader/PageLoader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAK1C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAE1D,uEAAuE;AACvE,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,eAAe,GAAG,YAAY,CAWhF"}
@@ -0,0 +1,5 @@
1
+ export interface PageLoaderProps {
2
+ logoSrc: string;
3
+ className?: string;
4
+ }
5
+ //# sourceMappingURL=PageLoader.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PageLoader.types.d.ts","sourceRoot":"","sources":["../../../../src/components/molecules/PageLoader/PageLoader.types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
@@ -0,0 +1,3 @@
1
+ export { PageLoader } from './PageLoader';
2
+ export type { PageLoaderProps } from './PageLoader';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/molecules/PageLoader/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { ReactElement } from 'react';
2
+ import type { SubmittingOverlayProps } from './SubmittingOverlay.types';
3
+ export type { SubmittingOverlayProps } from './SubmittingOverlay.types';
4
+ /**
5
+ * Full-screen scrim with the brand loader and a short label, shown while a
6
+ * submit request is in flight. Sits above dialogs and slide-outs (z-50), since
7
+ * some submits start from one. `pointer-events-auto` because an open Radix
8
+ * dialog sets `pointer-events: none` on body, which would let clicks through.
9
+ */
10
+ export declare function SubmittingOverlay({ open, label, logoSrc }: SubmittingOverlayProps): ReactElement | null;
11
+ //# sourceMappingURL=SubmittingOverlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubmittingOverlay.d.ts","sourceRoot":"","sources":["../../../../src/components/molecules/SubmittingOverlay/SubmittingOverlay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAK1C,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAGxE,YAAY,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAExE;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,sBAAsB,GAAG,YAAY,GAAG,IAAI,CAmBvG"}
@@ -0,0 +1,7 @@
1
+ export interface SubmittingOverlayProps {
2
+ open: boolean;
3
+ /** Two or three words, e.g. "Creating invoice". */
4
+ label: string;
5
+ logoSrc: string;
6
+ }
7
+ //# sourceMappingURL=SubmittingOverlay.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubmittingOverlay.types.d.ts","sourceRoot":"","sources":["../../../../src/components/molecules/SubmittingOverlay/SubmittingOverlay.types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,OAAO,CAAC;IACd,mDAAmD;IACnD,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB"}
@@ -0,0 +1,2 @@
1
+ export declare const GEM_EDGE_GLOW_CLASS = "[filter:drop-shadow(0_0_1px_rgb(255_255_255/0.6))_drop-shadow(0_0_6px_rgb(255_255_255/0.15))]";
2
+ //# sourceMappingURL=SubmittingOverlay.utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubmittingOverlay.utils.d.ts","sourceRoot":"","sources":["../../../../src/components/molecules/SubmittingOverlay/SubmittingOverlay.utils.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,mBAAmB,kGACiE,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { SubmittingOverlay } from './SubmittingOverlay';
2
+ export type { SubmittingOverlayProps } from './SubmittingOverlay';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/components/molecules/SubmittingOverlay/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,YAAY,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC"}
package/dist/index.cjs.js CHANGED
@@ -13747,6 +13747,30 @@ const Badge = React.forwardRef(({ appearance = 'solid', color = 'primary', size
13747
13747
  });
13748
13748
  Badge.displayName = 'Badge';
13749
13749
 
13750
+ // The second ring trails well behind the first, so the two travel out with a clear gap.
13751
+ const BRAND_LOADER_RINGS = [
13752
+ { id: 'first', delay: '0s' },
13753
+ { id: 'second', delay: '0.45s' },
13754
+ ];
13755
+ const RING_TONE_CLASS = {
13756
+ default: 'border-primary/50',
13757
+ inverse: 'border-white/80',
13758
+ };
13759
+ /** Clips the sheen to the logo's own shape. */
13760
+ const logoMaskStyle = (logoSrc) => ({
13761
+ maskImage: `url(${logoSrc})`,
13762
+ WebkitMaskImage: `url(${logoSrc})`,
13763
+ });
13764
+
13765
+ /**
13766
+ * The animated brand gem: it winds up, springs out with a glow and settles while
13767
+ * two rings ripple out behind it. Needs the `loader-*` animations from
13768
+ * `source.css`; motion stops for users who ask for reduced motion.
13769
+ */
13770
+ function BrandLoader({ logoSrc, tone = 'default', className }) {
13771
+ return (jsxRuntime.jsxs("div", { "aria-hidden": true, className: cn('relative flex size-28 items-center justify-center', className), children: [BRAND_LOADER_RINGS.map((ring) => (jsxRuntime.jsx("span", { "data-loader-ring": true, style: { animationDelay: ring.delay }, className: cn('absolute size-24 rounded-full border-2 opacity-0 motion-safe:animate-loader-ring motion-reduce:hidden', RING_TONE_CLASS[tone]) }, ring.id))), jsxRuntime.jsxs("div", { className: "relative size-[7.8rem] shrink-0 motion-safe:animate-loader-gem motion-reduce:scale-[0.77]", children: [jsxRuntime.jsx("img", { src: logoSrc, alt: "", className: "size-full object-contain" }), jsxRuntime.jsx("span", { style: logoMaskStyle(logoSrc), className: "absolute inset-0 bg-[linear-gradient(110deg,transparent_35%,rgb(255_255_255/0.8)_50%,transparent_65%)] bg-[length:200%_100%] [mask-position:center] [mask-repeat:no-repeat] [mask-size:contain] motion-safe:animate-loader-sheen motion-reduce:hidden" })] })] }));
13772
+ }
13773
+
13750
13774
  const getButtonRoleProps = (type) => ({
13751
13775
  type: type ?? 'button',
13752
13776
  });
@@ -42717,7 +42741,16 @@ const DropdownMenuGroup = DropdownMenuPrimitive__namespace.Group;
42717
42741
  const DropdownMenuPortal = DropdownMenuPrimitive__namespace.Portal;
42718
42742
  const DropdownMenuSub = DropdownMenuPrimitive__namespace.Sub;
42719
42743
  const DropdownMenuRadioGroup = DropdownMenuPrimitive__namespace.RadioGroup;
42720
- const DropdownMenuSubTrigger = React__namespace.forwardRef(({ className, inset, children, ...props }, ref) => (jsxRuntime.jsxs(DropdownMenuPrimitive__namespace.SubTrigger, { ref: ref, className: cn('flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0', inset && 'pl-8', className), ...props, children: [children, jsxRuntime.jsx(ChevronRight, { className: "ml-auto", "aria-hidden": "true" })] })));
42744
+ /**
42745
+ * A disabled item ignores the pointer, so the tooltip hangs off a wrapper.
42746
+ * Without a reason, a greyed-out item reads as a bug.
42747
+ */
42748
+ function withDisabledReason(item, disabled, reason) {
42749
+ if (!disabled || !reason)
42750
+ return item;
42751
+ return (jsxRuntime.jsx(TooltipProvider, { children: jsxRuntime.jsxs(Tooltip, { children: [jsxRuntime.jsx(TooltipTrigger, { asChild: true, children: jsxRuntime.jsx("div", { className: "cursor-not-allowed", children: item }) }), jsxRuntime.jsx(TooltipContent, { side: "left", children: reason })] }) }));
42752
+ }
42753
+ const DropdownMenuSubTrigger = React__namespace.forwardRef(({ className, inset, children, disabledReason, ...props }, ref) => withDisabledReason(jsxRuntime.jsxs(DropdownMenuPrimitive__namespace.SubTrigger, { ref: ref, className: cn('flex cursor-pointer select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0', inset && 'pl-8', className), ...props, children: [children, jsxRuntime.jsx(ChevronRight, { className: "ml-auto", "aria-hidden": "true" })] }), props.disabled, disabledReason));
42721
42754
  DropdownMenuSubTrigger.displayName =
42722
42755
  DropdownMenuPrimitive__namespace.SubTrigger.displayName;
42723
42756
  const DropdownMenuSubContent = React__namespace.forwardRef(({ className, ...props }, ref) => (jsxRuntime.jsx(DropdownMenuPrimitive__namespace.SubContent, { ref: ref, className: cn('z-50 min-w-[8rem] overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-lg flex flex-col gap-1 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2', className), ...props })));
@@ -42725,7 +42758,7 @@ DropdownMenuSubContent.displayName =
42725
42758
  DropdownMenuPrimitive__namespace.SubContent.displayName;
42726
42759
  const DropdownMenuContent = React__namespace.forwardRef(({ className, sideOffset = 8, ...props }, ref) => (jsxRuntime.jsx(DropdownMenuPrimitive__namespace.Portal, { children: jsxRuntime.jsx(DropdownMenuPrimitive__namespace.Content, { ref: ref, sideOffset: sideOffset, className: cn('z-50 min-w-[12rem] overflow-hidden rounded-md border border-border bg-popover p-1 text-popover-foreground shadow-md flex flex-col gap-1 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2', className), ...props }) })));
42727
42760
  DropdownMenuContent.displayName = DropdownMenuPrimitive__namespace.Content.displayName;
42728
- const DropdownMenuItem = React__namespace.forwardRef(({ className, inset, ...props }, ref) => (jsxRuntime.jsx(DropdownMenuPrimitive__namespace.Item, { ref: ref, className: cn('relative flex cursor-pointer select-none items-center gap-2 rounded-sm p-2 text-sm leading-5 outline-none transition-colors focus:bg-secondary dark:focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0', inset && 'pl-8', className), ...props })));
42761
+ const DropdownMenuItem = React__namespace.forwardRef(({ className, inset, disabledReason, ...props }, ref) => withDisabledReason(jsxRuntime.jsx(DropdownMenuPrimitive__namespace.Item, { ref: ref, className: cn('relative flex cursor-pointer select-none items-center gap-2 rounded-sm p-2 text-sm leading-5 outline-none transition-colors focus:bg-secondary dark:focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0', inset && 'pl-8', className), ...props }), props.disabled, disabledReason));
42729
42762
  DropdownMenuItem.displayName = DropdownMenuPrimitive__namespace.Item.displayName;
42730
42763
  const DropdownMenuCheckboxItem = React__namespace.forwardRef(({ className, children, checked, ...props }, ref) => (jsxRuntime.jsxs(DropdownMenuPrimitive__namespace.CheckboxItem, { ref: ref, className: cn('relative flex cursor-pointer select-none items-center gap-2 rounded-sm p-2 pl-8 text-sm leading-5 outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50', className), checked: checked, ...props, children: [jsxRuntime.jsx("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center", children: jsxRuntime.jsx(DropdownMenuPrimitive__namespace.ItemIndicator, { children: jsxRuntime.jsx(Check, { className: "h-4 w-4", "aria-hidden": "true" }) }) }), children] })));
42731
42764
  DropdownMenuCheckboxItem.displayName =
@@ -44897,6 +44930,11 @@ const NumberedStepCard = ({ step, title, description, className, }) => {
44897
44930
  return (jsxRuntime.jsxs("div", { className: cn('flex flex-col gap-3 rounded-xl border border-border bg-card p-4', className), children: [jsxRuntime.jsx("span", { className: "inline-flex h-6 w-6 items-center justify-center rounded-full bg-primary text-xs font-medium text-primary-foreground", children: step }), jsxRuntime.jsxs("div", { className: "space-y-1", children: [jsxRuntime.jsx("p", { className: "text-sm font-medium text-foreground", children: title }), jsxRuntime.jsx("p", { className: "text-xs leading-snug text-label", children: description })] })] }));
44898
44931
  };
44899
44932
 
44933
+ /** Fills the content area with the brand loader while a page loads. */
44934
+ function PageLoader({ logoSrc, className }) {
44935
+ return (jsxRuntime.jsxs("div", { role: "status", "aria-live": "polite", className: cn('flex min-h-full flex-1 items-center justify-center', className), children: [jsxRuntime.jsx(BrandLoader, { logoSrc: logoSrc }), jsxRuntime.jsx("span", { className: "sr-only", children: "Loading" })] }));
44936
+ }
44937
+
44900
44938
  /** Options with a description get the taller layout with an icon badge (default variant only). */
44901
44939
  function hasDetails(variant, hasDescription) {
44902
44940
  return variant === 'default' && hasDescription;
@@ -73831,6 +73869,21 @@ const SpecList = ({ rows, zebra = true, className, }) => {
73831
73869
  }) }));
73832
73870
  };
73833
73871
 
73872
+ // A thin white glow traces the gem so the green reads on the dark scrim in both themes.
73873
+ const GEM_EDGE_GLOW_CLASS = '[filter:drop-shadow(0_0_1px_rgb(255_255_255/0.6))_drop-shadow(0_0_6px_rgb(255_255_255/0.15))]';
73874
+
73875
+ /**
73876
+ * Full-screen scrim with the brand loader and a short label, shown while a
73877
+ * submit request is in flight. Sits above dialogs and slide-outs (z-50), since
73878
+ * some submits start from one. `pointer-events-auto` because an open Radix
73879
+ * dialog sets `pointer-events: none` on body, which would let clicks through.
73880
+ */
73881
+ function SubmittingOverlay({ open, label, logoSrc }) {
73882
+ if (!open)
73883
+ return null;
73884
+ return ReactDOM.createPortal(jsxRuntime.jsx("div", { role: "status", "aria-live": "polite", "aria-busy": true, className: "pointer-events-auto fixed inset-0 z-[100] flex items-center justify-center bg-black/60 backdrop-blur-sm", children: jsxRuntime.jsxs("div", { className: "flex flex-col items-center gap-4", children: [jsxRuntime.jsx("div", { className: GEM_EDGE_GLOW_CLASS, children: jsxRuntime.jsx(BrandLoader, { logoSrc: logoSrc, tone: "inverse" }) }), jsxRuntime.jsx("p", { className: "text-base font-medium tracking-wide text-white", children: label })] }) }), document.body);
73885
+ }
73886
+
73834
73887
  const usePageJump = (totalPages, onPageChange) => {
73835
73888
  const [pageInput, setPageInputState] = React.useState('');
73836
73889
  const setPageInput = React.useCallback((v) => {
@@ -81183,8 +81236,10 @@ exports.AuditEntryCard = AuditEntryCard;
81183
81236
  exports.AuditHistoryPanel = AuditHistoryPanel;
81184
81237
  exports.AuditTimeline = AuditTimeline;
81185
81238
  exports.AuditTimelineShimmer = AuditTimelineShimmer;
81239
+ exports.BRAND_LOADER_RINGS = BRAND_LOADER_RINGS;
81186
81240
  exports.Badge = Badge;
81187
81241
  exports.BadgeType = BadgeType;
81242
+ exports.BrandLoader = BrandLoader;
81188
81243
  exports.BusinessContactStatusFilter = BusinessContactStatusFilter;
81189
81244
  exports.Button = Button;
81190
81245
  exports.CUSTOMER_AUDIT_CONFIG = CUSTOMER_AUDIT_CONFIG;
@@ -81315,6 +81370,7 @@ exports.OwnershipFilter = OwnershipFilter;
81315
81370
  exports.OwnershipSplitCard = OwnershipSplitCard;
81316
81371
  exports.PROFORMA_AUDIT_CONFIG = PROFORMA_AUDIT_CONFIG;
81317
81372
  exports.PageHeader = PageHeader;
81373
+ exports.PageLoader = PageLoader;
81318
81374
  exports.PageTabs = PageTabs;
81319
81375
  exports.Pagination = Pagination;
81320
81376
  exports.PaginationSelect = PaginationSelect;
@@ -81383,6 +81439,7 @@ exports.StatusBadge = StatusBadge$1;
81383
81439
  exports.StatusFilter = StatusFilter;
81384
81440
  exports.Stepper = Stepper;
81385
81441
  exports.StockTypeFilter = StockTypeFilter;
81442
+ exports.SubmittingOverlay = SubmittingOverlay;
81386
81443
  exports.TableEmptyState = TableEmptyState;
81387
81444
  exports.TablePagination = TablePagination;
81388
81445
  exports.TableRowsSkeleton = TableRowsSkeleton;