@caratlogic/design-system 0.1.43 → 0.1.44

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.
@@ -4,4 +4,7 @@ export declare const LOADING_LABEL = "Loading filters";
4
4
  export declare const ERROR_TITLE = "Couldn't load filters";
5
5
  export declare const DEFAULT_ERROR_MESSAGE = "Something went wrong while loading the filters. Check your connection and try again.";
6
6
  export declare const RETRY_LABEL = "Try again";
7
+ export declare const CARD_REORDER_HINT = "Drag to rearrange";
8
+ export declare const getCardGripLabel: (card: string) => string;
9
+ export declare const EMPTY_GROUP_LABEL = "Drag filter cards here";
7
10
  //# sourceMappingURL=FilterSurface.accessibility.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FilterSurface.accessibility.d.ts","sourceRoot":"","sources":["../../../../../src/components/organisms/Filters/FilterSurface/FilterSurface.accessibility.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,eAAO,MAAM,UAAU,0BAA0B,CAAC;AAElD,eAAO,MAAM,aAAa,oBAAoB,CAAC;AAC/C,eAAO,MAAM,WAAW,0BAA0B,CAAC;AACnD,eAAO,MAAM,qBAAqB,yFACsD,CAAC;AACzF,eAAO,MAAM,WAAW,cAAc,CAAC"}
1
+ {"version":3,"file":"FilterSurface.accessibility.d.ts","sourceRoot":"","sources":["../../../../../src/components/organisms/Filters/FilterSurface/FilterSurface.accessibility.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,eAAO,MAAM,UAAU,0BAA0B,CAAC;AAElD,eAAO,MAAM,aAAa,oBAAoB,CAAC;AAC/C,eAAO,MAAM,WAAW,0BAA0B,CAAC;AACnD,eAAO,MAAM,qBAAqB,yFACsD,CAAC;AACzF,eAAO,MAAM,WAAW,cAAc,CAAC;AAEvC,eAAO,MAAM,iBAAiB,sBAAsB,CAAC;AACrD,eAAO,MAAM,gBAAgB,GAAI,MAAM,MAAM,KAAG,MAAwB,CAAC;AACzE,eAAO,MAAM,iBAAiB,2BAA2B,CAAC"}
@@ -1,9 +1,14 @@
1
1
  import { type ReactElement } from 'react';
2
- import type { FilterSurfaceGroupProps, FilterSurfaceMoreProps, FilterSurfaceProps } from './FilterSurface.types';
3
- export type { FilterSurfaceGroupProps, FilterSurfaceMoreProps, FilterSurfaceProps, FilterSurfaceStatus, } from './FilterSurface.types';
2
+ import type { FilterSurfaceGroupProps, FilterSurfaceMoreProps, FilterSurfaceProps, FilterSurfaceSortableProps } from './FilterSurface.types';
3
+ export type { FilterCardLayout, FilterSurfaceGroupProps, FilterSurfaceMoreProps, FilterSurfaceProps, FilterSurfaceSortableProps, FilterSurfaceStatus, } from './FilterSurface.types';
4
4
  /** Full-page filter screen (e.g. an advanced search): one sticky header with every action, then the scrolling card grid. */
5
5
  export declare function FilterSurface({ title, headerActions, primaryActions, chips, onClose, status, errorMessage, onRetry, skeleton, children, }: FilterSurfaceProps): ReactElement;
6
- export declare function FilterSurfaceGroup({ title, masonry, className, children, }: FilterSurfaceGroupProps): ReactElement;
6
+ /**
7
+ * Lets the user drag the cards of its `FilterSurfaceGroup`s (those with a `sortableId`) into any order and
8
+ * between groups, from a grip on each card. A collapsed `FilterSurfaceMore` opens when a card rests on it.
9
+ */
10
+ export declare function FilterSurfaceSortable({ layout, onLayoutChange, renderCard, cardLabel, children, }: FilterSurfaceSortableProps): ReactElement;
11
+ export declare function FilterSurfaceGroup({ title, masonry, sortableId, className, children, }: FilterSurfaceGroupProps): ReactElement;
7
12
  /** Collapsed "More filters" divider that reveals extra cards. */
8
13
  export declare function FilterSurfaceMore({ label, defaultExpanded, children, }: FilterSurfaceMoreProps): ReactElement;
9
14
  //# sourceMappingURL=FilterSurface.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FilterSurface.d.ts","sourceRoot":"","sources":["../../../../../src/components/organisms/Filters/FilterSurface/FilterSurface.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAepD,OAAO,KAAK,EACV,uBAAuB,EACvB,sBAAsB,EACtB,kBAAkB,EACnB,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EACV,uBAAuB,EACvB,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAE/B,4HAA4H;AAC5H,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,aAAa,EACb,cAAc,EACd,KAAK,EACL,OAAO,EACP,MAAgB,EAChB,YAAY,EACZ,OAAO,EACP,QAAQ,EACR,QAAQ,GACT,EAAE,kBAAkB,GAAG,YAAY,CA2CnC;AAED,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,OAAe,EACf,SAAS,EACT,QAAQ,GACT,EAAE,uBAAuB,GAAG,YAAY,CAwBxC;AAED,iEAAiE;AACjE,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,eAAe,EACf,QAAQ,GACT,EAAE,sBAAsB,GAAG,YAAY,CA0BvC"}
1
+ {"version":3,"file":"FilterSurface.d.ts","sourceRoot":"","sources":["../../../../../src/components/organisms/Filters/FilterSurface/FilterSurface.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AA6BpD,OAAO,KAAK,EACV,uBAAuB,EACvB,sBAAsB,EACtB,kBAAkB,EAClB,0BAA0B,EAC3B,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EACV,gBAAgB,EAChB,uBAAuB,EACvB,sBAAsB,EACtB,kBAAkB,EAClB,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAE/B,4HAA4H;AAC5H,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,aAAa,EACb,cAAc,EACd,KAAK,EACL,OAAO,EACP,MAAgB,EAChB,YAAY,EACZ,OAAO,EACP,QAAQ,EACR,QAAQ,GACT,EAAE,kBAAkB,GAAG,YAAY,CA2CnC;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,MAAM,EACN,cAAc,EACd,UAAU,EACV,SAAS,EACT,QAAQ,GACT,EAAE,0BAA0B,GAAG,YAAY,CAsB3C;AAED,wBAAgB,kBAAkB,CAAC,EACjC,KAAK,EACL,OAAe,EACf,UAAU,EACV,SAAS,EACT,QAAQ,GACT,EAAE,uBAAuB,GAAG,YAAY,CA4CxC;AAED,iEAAiE;AACjE,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,eAAe,EACf,QAAQ,GACT,EAAE,sBAAsB,GAAG,YAAY,CA6BvC"}
@@ -1,11 +1,42 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { DraggableSyntheticListeners } from '@dnd-kit/core';
3
+ import type { FilterCardReorder, FilterSurfaceSortableContextValue, UseFilterCardReorderArgs } from './FilterSurface.types';
1
4
  export declare function useCloseOnEscape(onClose: () => void): void;
2
5
  export declare function useFilterSurfaceMore(defaultExpanded?: boolean): {
3
6
  expanded: boolean;
4
7
  toggle: () => void;
8
+ toggleRef: (node: HTMLButtonElement | null) => void;
5
9
  };
6
- /** Measures a masonry card and keeps its row span in step with its height (content opening, wrapping…). */
7
- export declare function useMasonrySpan(): {
10
+ /**
11
+ * Measures a masonry card and keeps its row span in step with its height (content opening, wrapping…).
12
+ * `initialSpan` lets a remounted card take its known height on the first render.
13
+ */
14
+ export declare function useMasonrySpan(initialSpan?: number): {
8
15
  ref: (node: HTMLDivElement | null) => void;
9
16
  span: number;
10
17
  };
18
+ export declare const FilterSurfaceSortableContext: import("react").Context<FilterSurfaceSortableContextValue | null>;
19
+ /** The surrounding `FilterSurfaceSortable`, or null outside one. */
20
+ export declare function useFilterSurfaceSortable(): FilterSurfaceSortableContextValue | null;
21
+ /** A sortable card's drag wiring, masonry span and registration for the slide animation. */
22
+ export declare function useSortableFilterCard(id: string): {
23
+ ref: {
24
+ card: (node: HTMLDivElement | null) => void;
25
+ span: (node: HTMLDivElement | null) => void;
26
+ };
27
+ span: number;
28
+ isActive: boolean;
29
+ dragging: boolean;
30
+ label: string;
31
+ setActivatorNodeRef: (node: HTMLElement | null) => void;
32
+ listeners: DraggableSyntheticListeners;
33
+ };
34
+ /**
35
+ * Card drag-to-reorder across a surface's groups. The live order is a draft: cards reflow as the pointer
36
+ * crosses them and slide (FLIP) from their old spots, and the draft is handed over on drop. The pointer is
37
+ * hit-tested against what is on screen, so masonry cards of any height land where they look.
38
+ */
39
+ export declare function useFilterCardReorder({ layout, onLayoutChange, }: UseFilterCardReorderArgs): FilterCardReorder;
40
+ /** The context the sortable groups and cards read. */
41
+ export declare function useSortableContextValue(reorder: FilterCardReorder, renderCard: (id: string) => ReactNode, cardLabel: ((id: string) => string) | undefined): FilterSurfaceSortableContextValue;
11
42
  //# sourceMappingURL=FilterSurface.hooks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FilterSurface.hooks.d.ts","sourceRoot":"","sources":["../../../../../src/components/organisms/Filters/FilterSurface/FilterSurface.hooks.tsx"],"names":[],"mappings":"AAMA,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI,CAe1D;AAED,wBAAgB,oBAAoB,CAAC,eAAe,UAAQ,GAAG;IAC7D,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB,CAGA;AAED,2GAA2G;AAC3G,wBAAgB,cAAc,IAAI;IAChC,GAAG,EAAE,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3C,IAAI,EAAE,MAAM,CAAC;CACd,CAiBA"}
1
+ {"version":3,"file":"FilterSurface.hooks.d.ts","sourceRoot":"","sources":["../../../../../src/components/organisms/Filters/FilterSurface/FilterSurface.hooks.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAOvC,OAAO,KAAK,EACV,2BAA2B,EAE5B,MAAM,eAAe,CAAC;AAWvB,OAAO,KAAK,EAGV,iBAAiB,EACjB,iCAAiC,EACjC,wBAAwB,EACzB,MAAM,uBAAuB,CAAC;AAE/B,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,IAAI,CAe1D;AAED,wBAAgB,oBAAoB,CAAC,eAAe,UAAQ,GAAG;IAC7D,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,SAAS,EAAE,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,KAAK,IAAI,CAAC;CACrD,CAkBA;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,WAAW,SAAI,GAAG;IAC/C,GAAG,EAAE,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3C,IAAI,EAAE,MAAM,CAAC;CACd,CAiBA;AAED,eAAO,MAAM,4BAA4B,mEACsB,CAAC;AAEhE,oEAAoE;AACpE,wBAAgB,wBAAwB,IAAI,iCAAiC,GAAG,IAAI,CAEnF;AAED,4FAA4F;AAC5F,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG;IACjD,GAAG,EAAE;QACH,IAAI,EAAE,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,KAAK,IAAI,CAAC;QAC5C,IAAI,EAAE,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,KAAK,IAAI,CAAC;KAC7C,CAAC;IACF,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,EAAE,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IACxD,SAAS,EAAE,2BAA2B,CAAC;CACxC,CAgCA;AAqDD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,MAAM,EACN,cAAc,GACf,EAAE,wBAAwB,GAAG,iBAAiB,CAyG9C;AAuHD,sDAAsD;AACtD,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,iBAAiB,EAC1B,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,SAAS,EACrC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAC,GAAG,SAAS,GAC9C,iCAAiC,CA+BnC"}
@@ -1,9 +1,20 @@
1
1
  import type { ReactElement } from 'react';
2
- import type { FilterSurfaceErrorProps, MasonryItemProps, FilterSurfaceSkeletonProps } from './FilterSurface.types';
2
+ import type { CardReorderGripProps, EmptyGroupDropZoneProps, FilterCardOverlayProps, FilterSurfaceErrorProps, MasonryItemProps, FilterSurfaceSkeletonProps, SortableFilterCardProps } from './FilterSurface.types';
3
3
  /** Loading placeholder: the page's own skeleton, or generic list cards. */
4
4
  export declare function FilterSurfaceSkeleton({ children, }: FilterSurfaceSkeletonProps): ReactElement;
5
5
  /** Shown in place of the cards when the filters couldn't load. */
6
6
  export declare function FilterSurfaceError({ message, onRetry, }: FilterSurfaceErrorProps): ReactElement;
7
7
  /** One masonry cell: spans the rows its card needs; the bottom padding is the gap to the next card. */
8
8
  export declare function MasonryItem({ children }: MasonryItemProps): ReactElement;
9
+ /**
10
+ * A grab tab on the middle of the card's top edge, always visible so the cards read as movable, and clear
11
+ * of the header's title and actions. It lights up with its card on hover. The only place a card drag starts.
12
+ */
13
+ export declare function CardReorderGrip({ label, dragging, setActivatorNodeRef, listeners, }: CardReorderGripProps): ReactElement;
14
+ /** A card in a sortable group: draggable from its grip, and a dashed slot where it will land while it drags. */
15
+ export declare function SortableFilterCard({ id, masonry, children, }: SortableFilterCardProps): ReactElement;
16
+ /** Where a group with no cards takes a drop. */
17
+ export declare function EmptyGroupDropZone({ groupId, }: EmptyGroupDropZoneProps): ReactElement;
18
+ /** The copy of the dragged card under the pointer. */
19
+ export declare function FilterCardOverlay({ node, }: FilterCardOverlayProps): ReactElement;
9
20
  //# sourceMappingURL=FilterSurface.parts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FilterSurface.parts.d.ts","sourceRoot":"","sources":["../../../../../src/components/organisms/Filters/FilterSurface/FilterSurface.parts.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAU1C,OAAO,KAAK,EACV,uBAAuB,EACvB,gBAAgB,EAChB,0BAA0B,EAC3B,MAAM,uBAAuB,CAAC;AAW/B,2EAA2E;AAC3E,wBAAgB,qBAAqB,CAAC,EACpC,QAAQ,GACT,EAAE,0BAA0B,GAAG,YAAY,CAY3C;AAED,kEAAkE;AAClE,wBAAgB,kBAAkB,CAAC,EACjC,OAAO,EACP,OAAO,GACR,EAAE,uBAAuB,GAAG,YAAY,CA2BxC;AAED,uGAAuG;AACvG,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,EAAE,gBAAgB,GAAG,YAAY,CASxE"}
1
+ {"version":3,"file":"FilterSurface.parts.d.ts","sourceRoot":"","sources":["../../../../../src/components/organisms/Filters/FilterSurface/FilterSurface.parts.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAoB1C,OAAO,KAAK,EACV,oBAAoB,EACpB,uBAAuB,EACvB,sBAAsB,EACtB,uBAAuB,EACvB,gBAAgB,EAChB,0BAA0B,EAC1B,uBAAuB,EACxB,MAAM,uBAAuB,CAAC;AAY/B,2EAA2E;AAC3E,wBAAgB,qBAAqB,CAAC,EACpC,QAAQ,GACT,EAAE,0BAA0B,GAAG,YAAY,CAY3C;AAED,kEAAkE;AAClE,wBAAgB,kBAAkB,CAAC,EACjC,OAAO,EACP,OAAO,GACR,EAAE,uBAAuB,GAAG,YAAY,CA2BxC;AAED,uGAAuG;AACvG,wBAAgB,WAAW,CAAC,EAAE,QAAQ,EAAE,EAAE,gBAAgB,GAAG,YAAY,CASxE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAC9B,KAAK,EACL,QAAQ,EACR,mBAAmB,EACnB,SAAS,GACV,EAAE,oBAAoB,GAAG,YAAY,CAqCrC;AAED,gHAAgH;AAChH,wBAAgB,kBAAkB,CAAC,EACjC,EAAE,EACF,OAAO,EACP,QAAQ,GACT,EAAE,uBAAuB,GAAG,YAAY,CA6CxC;AAED,gDAAgD;AAChD,wBAAgB,kBAAkB,CAAC,EACjC,OAAO,GACR,EAAE,uBAAuB,GAAG,YAAY,CASxC;AAED,sDAAsD;AACtD,wBAAgB,iBAAiB,CAAC,EAChC,IAAI,GACL,EAAE,sBAAsB,GAAG,YAAY,CAqBvC"}
@@ -1,4 +1,5 @@
1
1
  import type { ReactNode } from 'react';
2
+ import type { DraggableSyntheticListeners, DragStartEvent, SensorDescriptor, SensorOptions } from '@dnd-kit/core';
2
3
  export interface FilterSurfaceProps {
3
4
  title: string;
4
5
  /** Secondary header actions, e.g. Saved searches. */
@@ -35,8 +36,13 @@ export interface FilterSurfaceGroupProps {
35
36
  * and short cards interlock with no empty space. Columns still come from `className` (e.g. `lg:grid-cols-3`).
36
37
  */
37
38
  masonry?: boolean;
39
+ /**
40
+ * Inside a `FilterSurfaceSortable`, the layout group this grid shows: its cards come from the layout and
41
+ * `renderCard`, and `children` is ignored.
42
+ */
43
+ sortableId?: string;
38
44
  className?: string;
39
- children: ReactNode;
45
+ children?: ReactNode;
40
46
  }
41
47
  export interface MasonryItemProps {
42
48
  children: ReactNode;
@@ -47,4 +53,86 @@ export interface FilterSurfaceMoreProps {
47
53
  defaultExpanded?: boolean;
48
54
  children: ReactNode;
49
55
  }
56
+ /** Card ids per sortable group, in display order, e.g. `{ search: ['shape', 'carat'], more: ['dates'] }`. */
57
+ export type FilterCardLayout = Record<string, string[]>;
58
+ export interface FilterSurfaceSortableProps {
59
+ layout: FilterCardLayout;
60
+ /** Called on drop with every group's new order; the cards keep that order until `layout` changes. */
61
+ onLayoutChange: (next: FilterCardLayout) => void;
62
+ /** The card for an id; every id in `layout` should render one. */
63
+ renderCard: (id: string) => ReactNode;
64
+ /** The card's name for its drag grip, e.g. its title. Defaults to the id. */
65
+ cardLabel?: (id: string) => string;
66
+ children: ReactNode;
67
+ }
68
+ export type FilterCardDropSide = 'before' | 'after';
69
+ export interface FilterCardDropTarget {
70
+ group: string;
71
+ /** The card to drop beside; without it the card goes to the end of `group`. */
72
+ key?: string;
73
+ side?: FilterCardDropSide;
74
+ }
75
+ /** What is under the pointer during a card drag. */
76
+ export type FilterCardDropHit = {
77
+ kind: 'card';
78
+ id: string;
79
+ group: string;
80
+ rect: DOMRect;
81
+ } | {
82
+ kind: 'group';
83
+ group: string;
84
+ } | {
85
+ kind: 'more';
86
+ toggle: HTMLElement;
87
+ };
88
+ export interface UseFilterCardReorderArgs {
89
+ layout: FilterCardLayout;
90
+ onLayoutChange: (next: FilterCardLayout) => void;
91
+ }
92
+ export interface FilterCardReorder {
93
+ /** The layout on screen: the live order while dragging, else `layout`. */
94
+ layout: FilterCardLayout;
95
+ activeId: string | null;
96
+ /** A copy of the dragged card, shown under the pointer. */
97
+ overlay: HTMLElement | null;
98
+ sensors: SensorDescriptor<SensorOptions>[];
99
+ /** Each card's last masonry row span, so a card moved into another group renders at its height at once. */
100
+ spans: Map<string, number>;
101
+ registerCard: (id: string, node: HTMLElement) => void;
102
+ unregisterCard: (id: string, node: HTMLElement | null) => void;
103
+ /** Lets a "More filters" toggle open its section when a dragged card rests on it; returns the cleanup. */
104
+ registerExpander: (toggle: HTMLElement, expand: () => void) => () => void;
105
+ onDragStart: (event: DragStartEvent) => void;
106
+ onDragEnd: () => void;
107
+ onDragCancel: () => void;
108
+ }
109
+ export interface FilterSurfaceSortableContextValue {
110
+ layout: FilterCardLayout;
111
+ activeId: string | null;
112
+ spans: Map<string, number>;
113
+ renderCard: (id: string) => ReactNode;
114
+ cardLabel: (id: string) => string;
115
+ registerCard: (id: string, node: HTMLElement) => void;
116
+ unregisterCard: (id: string, node: HTMLElement | null) => void;
117
+ /** Lets a "More filters" toggle open its section when a dragged card rests on it; returns the cleanup. */
118
+ registerExpander: (toggle: HTMLElement, expand: () => void) => () => void;
119
+ }
120
+ export interface SortableFilterCardProps {
121
+ id: string;
122
+ masonry: boolean;
123
+ children: ReactNode;
124
+ }
125
+ export interface CardReorderGripProps {
126
+ label: string;
127
+ /** Hidden for the whole of any card drag. */
128
+ dragging: boolean;
129
+ setActivatorNodeRef: (node: HTMLElement | null) => void;
130
+ listeners: DraggableSyntheticListeners;
131
+ }
132
+ export interface FilterCardOverlayProps {
133
+ node: HTMLElement;
134
+ }
135
+ export interface EmptyGroupDropZoneProps {
136
+ groupId: string;
137
+ }
50
138
  //# sourceMappingURL=FilterSurface.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FilterSurface.types.d.ts","sourceRoot":"","sources":["../../../../../src/components/organisms/Filters/FilterSurface/FilterSurface.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,qDAAqD;IACrD,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,6DAA6D;IAC7D,cAAc,CAAC,EAAE,SAAS,CAAC;IAC3B,4GAA4G;IAC5G,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,wDAAwD;IACxD,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,6IAA6I;IAC7I,MAAM,CAAC,EAAE,mBAAmB,CAAC;IAC7B,oEAAoE;IACpE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,sCAAsC;IACtC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,wGAAwG;IACxG,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;AAEhE,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,uBAAuB;IACtC,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,EAAE,SAAS,CAAC;CACrB"}
1
+ {"version":3,"file":"FilterSurface.types.d.ts","sourceRoot":"","sources":["../../../../../src/components/organisms/Filters/FilterSurface/FilterSurface.types.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,12 @@
1
+ import type { DropAnimation } from '@dnd-kit/core';
2
+ import type { FilterCardDropHit, FilterCardDropTarget, FilterCardLayout } from './FilterSurface.types';
3
+ /** Popovers, dialogs, menus and listboxes opened on top of the surface. */
4
+ export declare const NESTED_LAYER_SELECTOR = "[data-slot=\"popover-content\"], [role=\"dialog\"], [role=\"menu\"], [role=\"listbox\"]";
5
+ /**
6
+ * Closes the open popover or menu (not one that holds `from`) as Escape would. Radix closes a popover on
7
+ * the click after an outside press, which a card drag never makes, so a grab would leave it open.
8
+ */
9
+ export declare function dismissOpenLayer(from: Element): void;
1
10
  /** Placeholder cards while the filters load; roughly the first rows of a card grid. */
2
11
  export declare const SKELETON_CARD_COUNT = 8;
3
12
  export declare const SKELETON_GRID_CLASS_NAME = "grid grid-cols-1 gap-3 sm:grid-cols-2 lg:grid-cols-4";
@@ -7,4 +16,27 @@ export declare const MASONRY_ROW_PX = 4;
7
16
  export declare const getMasonrySpan: (height: number) => number;
8
17
  /** Dense 4px rows; the vertical gap comes from each item's bottom padding. */
9
18
  export declare const MASONRY_GRID_CLASS_NAME = "grid-flow-row-dense auto-rows-[4px] gap-x-3";
19
+ export declare const CARD_ID_ATTR = "data-filter-card-id";
20
+ export declare const GROUP_ID_ATTR = "data-filter-group-id";
21
+ export declare const MORE_TOGGLE_ATTR = "data-filter-more-toggle";
22
+ export declare const CARD_BODY_ATTR = "data-filter-card-body";
23
+ /** The group holding `id`, if any. */
24
+ export declare function findCardGroup(layout: FilterCardLayout, id: string): string | undefined;
25
+ /** `layout` with `id` taken out of its group and put into `target.group`, beside `target.key` or at the end. */
26
+ export declare function moveCard(layout: FilterCardLayout, id: string, target: FilterCardDropTarget): FilterCardLayout;
27
+ export declare function isSameLayout(a: FilterCardLayout, b: FilterCardLayout): boolean;
28
+ /**
29
+ * Where a card lands when dropped on `hit` at height `y`. In its own group it takes the hit card's place
30
+ * (after it when moving forward), the way a sortable list swaps; from another group the pointer's half
31
+ * of the hit card decides.
32
+ */
33
+ export declare function getCardDropTarget(layout: FilterCardLayout, activeId: string, hit: {
34
+ id: string;
35
+ group: string;
36
+ rect: Pick<DOMRect, 'top' | 'height'>;
37
+ }, y: number): FilterCardDropTarget;
38
+ /** The card, group or "More filters" toggle at a viewport point. */
39
+ export declare function getDropHit(x: number, y: number): FilterCardDropHit | null;
40
+ /** The dropped card's copy settles into its slot at the speed the other cards slide. */
41
+ export declare const CARD_DROP_ANIMATION: DropAnimation;
10
42
  //# sourceMappingURL=FilterSurface.utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FilterSurface.utils.d.ts","sourceRoot":"","sources":["../../../../../src/components/organisms/Filters/FilterSurface/FilterSurface.utils.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,eAAO,MAAM,wBAAwB,yDACmB,CAAC;AAEzD,iFAAiF;AACjF,eAAO,MAAM,cAAc,IAAI,CAAC;AAEhC,qFAAqF;AACrF,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,KAAG,MACK,CAAC;AAEtD,8EAA8E;AAC9E,eAAO,MAAM,uBAAuB,gDACW,CAAC"}
1
+ {"version":3,"file":"FilterSurface.utils.d.ts","sourceRoot":"","sources":["../../../../../src/components/organisms/Filters/FilterSurface/FilterSurface.utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EACV,iBAAiB,EAEjB,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAE/B,2EAA2E;AAC3E,eAAO,MAAM,qBAAqB,4FACiD,CAAC;AAEpF;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAYpD;AAED,uFAAuF;AACvF,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,eAAO,MAAM,wBAAwB,yDACmB,CAAC;AAEzD,iFAAiF;AACjF,eAAO,MAAM,cAAc,IAAI,CAAC;AAEhC,qFAAqF;AACrF,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,KAAG,MACK,CAAC;AAEtD,8EAA8E;AAC9E,eAAO,MAAM,uBAAuB,gDACW,CAAC;AAGhD,eAAO,MAAM,YAAY,wBAAwB,CAAC;AAClD,eAAO,MAAM,aAAa,yBAAyB,CAAC;AACpD,eAAO,MAAM,gBAAgB,4BAA4B,CAAC;AAC1D,eAAO,MAAM,cAAc,0BAA0B,CAAC;AAEtD,sCAAsC;AACtC,wBAAgB,aAAa,CAC3B,MAAM,EAAE,gBAAgB,EACxB,EAAE,EAAE,MAAM,GACT,MAAM,GAAG,SAAS,CAEpB;AAED,gHAAgH;AAChH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,gBAAgB,EACxB,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,oBAAoB,GAC3B,gBAAgB,CAgBlB;AAED,wBAAgB,YAAY,CAC1B,CAAC,EAAE,gBAAgB,EACnB,CAAC,EAAE,gBAAgB,GAClB,OAAO,CAUT;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,gBAAgB,EACxB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,QAAQ,CAAC,CAAA;CAAE,EACzE,CAAC,EAAE,MAAM,GACR,oBAAoB,CAYtB;AAED,oEAAoE;AACpE,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAiBzE;AAED,wFAAwF;AACxF,eAAO,MAAM,mBAAmB,EAAE,aAGjC,CAAC"}
@@ -1,3 +1,3 @@
1
- export { FilterSurface, FilterSurfaceGroup, FilterSurfaceMore, } from './FilterSurface';
2
- export type { FilterSurfaceGroupProps, FilterSurfaceMoreProps, FilterSurfaceProps, FilterSurfaceStatus, } from './FilterSurface';
1
+ export { FilterSurface, FilterSurfaceGroup, FilterSurfaceMore, FilterSurfaceSortable, } from './FilterSurface';
2
+ export type { FilterCardLayout, FilterSurfaceGroupProps, FilterSurfaceMoreProps, FilterSurfaceProps, FilterSurfaceSortableProps, FilterSurfaceStatus, } from './FilterSurface';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/organisms/Filters/FilterSurface/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,uBAAuB,EACvB,sBAAsB,EACtB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/organisms/Filters/FilterSurface/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,GACtB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,gBAAgB,EAChB,uBAAuB,EACvB,sBAAsB,EACtB,kBAAkB,EAClB,0BAA0B,EAC1B,mBAAmB,GACpB,MAAM,iBAAiB,CAAC"}