@bearmenu/ui 0.8.34 → 0.8.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-EGU6EG73.js +39 -0
- package/dist/{chunk-NIAL4ZU2.js → chunk-FQAIYKAS.js} +45 -8
- package/dist/{chunk-6W25S5CF.js → chunk-KGXTBTCJ.js} +1 -1
- package/dist/chunk-LAEVMNJN.js +135 -0
- package/dist/{chunk-XNBDACL7.js → chunk-ZUBBMLBD.js} +1 -1
- package/dist/components/badge.d.ts +8 -2
- package/dist/components/badge.js +1 -1
- package/dist/components/banner.d.ts +17 -2
- package/dist/components/banner.js +10 -7
- package/dist/components/booking-row.d.ts +11 -1
- package/dist/components/booking-row.js +4 -1
- package/dist/components/button-group.js +3 -39
- package/dist/components/concept-convergence.js +1 -1
- package/dist/components/filter-category-row.js +1 -1
- package/dist/components/menu-item.js +3 -3
- package/dist/components/multi-select-combobox.js +8 -3
- package/dist/components/pan-zoom-viewport.d.ts +137 -0
- package/dist/components/pan-zoom-viewport.js +531 -0
- package/dist/components/place-card.js +2 -2
- package/dist/components/place-details-mobile.js +1 -1
- package/dist/components/responsive-overlay.d.ts +29 -1
- package/dist/components/responsive-overlay.js +45 -6
- package/dist/components/sheet.d.ts +6 -0
- package/dist/components/sheet.js +3 -133
- package/dist/components/signature-chip.js +2 -2
- package/dist/components/tabs.d.ts +16 -1
- package/dist/components/tabs.js +21 -3
- package/dist/components/top-ranking-entry.js +3 -3
- package/package.json +23 -216
- package/src/components/badge.stories.tsx +32 -1
- package/src/components/badge.test.tsx +45 -0
- package/src/components/badge.tsx +41 -3
- package/src/components/banner.stories.tsx +32 -0
- package/src/components/banner.test.tsx +58 -0
- package/src/components/banner.tsx +28 -4
- package/src/components/booking-row.tsx +13 -0
- package/src/components/multi-select-combobox.tsx +7 -1
- package/src/components/pan-zoom-viewport.stories.tsx +134 -0
- package/src/components/pan-zoom-viewport.test.tsx +381 -0
- package/src/components/pan-zoom-viewport.tsx +727 -0
- package/src/components/responsive-overlay.stories.tsx +61 -0
- package/src/components/responsive-overlay.test.tsx +104 -0
- package/src/components/responsive-overlay.tsx +87 -22
- package/src/components/sheet.tsx +14 -3
- package/src/components/tabs.stories.tsx +23 -0
- package/src/components/tabs.test.tsx +64 -0
- package/src/components/tabs.tsx +36 -3
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { cn } from './chunk-FEK5XGZW.js';
|
|
2
|
+
import { __objRest, __spreadValues } from './chunk-MMUBH76A.js';
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { cva } from 'class-variance-authority';
|
|
5
|
+
import { jsx } from 'react/jsx-runtime';
|
|
6
|
+
|
|
7
|
+
var buttonGroupVariants = cva("inline-flex", {
|
|
8
|
+
variants: {
|
|
9
|
+
orientation: {
|
|
10
|
+
horizontal: "flex-row [&>[data-slot=button]]:rounded-none [&>[data-slot=button]:first-child]:rounded-l-xl [&>[data-slot=button]:last-child]:rounded-r-xl [&>[data-slot=button]:not(:first-child)]:-ml-px",
|
|
11
|
+
vertical: "flex-col [&>[data-slot=button]]:rounded-none [&>[data-slot=button]:first-child]:rounded-t-xl [&>[data-slot=button]:last-child]:rounded-b-xl [&>[data-slot=button]:not(:first-child)]:-mt-px"
|
|
12
|
+
},
|
|
13
|
+
attached: {
|
|
14
|
+
true: "",
|
|
15
|
+
false: "gap-1"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
defaultVariants: {
|
|
19
|
+
orientation: "horizontal",
|
|
20
|
+
attached: true
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
var ButtonGroup = React.forwardRef(
|
|
24
|
+
(_a, ref) => {
|
|
25
|
+
var _b = _a, { className, orientation, attached } = _b, props = __objRest(_b, ["className", "orientation", "attached"]);
|
|
26
|
+
return /* @__PURE__ */ jsx(
|
|
27
|
+
"div",
|
|
28
|
+
__spreadValues({
|
|
29
|
+
ref,
|
|
30
|
+
role: "group",
|
|
31
|
+
"data-slot": "button-group",
|
|
32
|
+
className: cn(buttonGroupVariants({ orientation, attached }), className)
|
|
33
|
+
}, props)
|
|
34
|
+
);
|
|
35
|
+
}
|
|
36
|
+
);
|
|
37
|
+
ButtonGroup.displayName = "ButtonGroup";
|
|
38
|
+
|
|
39
|
+
export { ButtonGroup, buttonGroupVariants };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { cn } from './chunk-FEK5XGZW.js';
|
|
2
|
-
import { __objRest, __spreadValues } from './chunk-MMUBH76A.js';
|
|
2
|
+
import { __objRest, __spreadProps, __spreadValues } from './chunk-MMUBH76A.js';
|
|
3
3
|
import { cva } from 'class-variance-authority';
|
|
4
|
-
import { jsx } from 'react/jsx-runtime';
|
|
4
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
5
5
|
|
|
6
6
|
var badgeVariants = cva(
|
|
7
7
|
"inline-flex items-center rounded-lg border px-2.5 py-0.5 text-xs font-semibold transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
|
|
@@ -49,7 +49,23 @@ var badgeVariants = cva(
|
|
|
49
49
|
* target when it is the row's own control — see `MenuPickRow` for the
|
|
50
50
|
* same rule on the add toggle.
|
|
51
51
|
*/
|
|
52
|
-
assignee: "rounded-full border-0 bg-surface-2 py-1 pl-1 pr-2 gap-1.5 text-[12px] leading-[1.2] font-semibold text-foreground"
|
|
52
|
+
assignee: "rounded-full border-0 bg-surface-2 py-1 pl-1 pr-2 gap-1.5 text-[12px] leading-[1.2] font-semibold text-foreground",
|
|
53
|
+
/**
|
|
54
|
+
* Soft tones — a wash of the status colour with its INK on top, for a
|
|
55
|
+
* status that sits in a list and should not shout: the booking
|
|
56
|
+
* design's "Seated" (success), "25 min late" (destructive), "Needs an
|
|
57
|
+
* answer" (warning) and "Confirmed" (neutral) pills in a table row
|
|
58
|
+
* (calendar/11-dp, floor/14-w1, queue/02-q0).
|
|
59
|
+
*
|
|
60
|
+
* The ink tokens, not the solid ones: `--success` / `--warning` /
|
|
61
|
+
* `--destructive` are tuned as fills and fall short of AA as text on
|
|
62
|
+
* their own wash; `--*-ink` exists for exactly that. Usually paired
|
|
63
|
+
* with an `icon`, so the status does not rest on colour alone.
|
|
64
|
+
*/
|
|
65
|
+
softSuccess: "rounded-md border-0 bg-success/15 px-2 py-1 text-success-ink",
|
|
66
|
+
softWarning: "rounded-md border-0 bg-warning/20 px-2 py-1 text-warning-ink",
|
|
67
|
+
softDestructive: "rounded-md border-0 bg-destructive/12 px-2 py-1 text-destructive-ink",
|
|
68
|
+
softNeutral: "rounded-md border-0 bg-surface-2 px-2 py-1 text-ink-secondary"
|
|
53
69
|
},
|
|
54
70
|
/**
|
|
55
71
|
* `status` is the taller pill the booking design draws beside a
|
|
@@ -75,13 +91,34 @@ var badgeVariants = cva(
|
|
|
75
91
|
}
|
|
76
92
|
);
|
|
77
93
|
function Badge(_a) {
|
|
78
|
-
var _b = _a, {
|
|
79
|
-
|
|
94
|
+
var _b = _a, {
|
|
95
|
+
className,
|
|
96
|
+
variant,
|
|
97
|
+
size,
|
|
98
|
+
live,
|
|
99
|
+
as: Tag = "div",
|
|
100
|
+
icon,
|
|
101
|
+
children
|
|
102
|
+
} = _b, props = __objRest(_b, [
|
|
103
|
+
"className",
|
|
104
|
+
"variant",
|
|
105
|
+
"size",
|
|
106
|
+
"live",
|
|
107
|
+
"as",
|
|
108
|
+
"icon",
|
|
109
|
+
"children"
|
|
110
|
+
]);
|
|
111
|
+
return /* @__PURE__ */ jsxs(
|
|
80
112
|
Tag,
|
|
81
|
-
__spreadValues({
|
|
113
|
+
__spreadProps(__spreadValues({
|
|
82
114
|
"data-slot": "badge",
|
|
83
|
-
className: cn(badgeVariants({ variant, size, live }), className)
|
|
84
|
-
}, props)
|
|
115
|
+
className: cn(badgeVariants({ variant, size, live }), icon ? "gap-1" : void 0, className)
|
|
116
|
+
}, props), {
|
|
117
|
+
children: [
|
|
118
|
+
icon ? /* @__PURE__ */ jsx("span", { "data-slot": "badge-icon", "aria-hidden": true, className: "inline-flex shrink-0 [&>svg]:size-3.5", children: icon }) : null,
|
|
119
|
+
children
|
|
120
|
+
]
|
|
121
|
+
})
|
|
85
122
|
);
|
|
86
123
|
}
|
|
87
124
|
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { cn } from './chunk-FEK5XGZW.js';
|
|
2
|
+
import { __objRest, __spreadProps, __spreadValues } from './chunk-MMUBH76A.js';
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import * as SheetPrimitive from '@radix-ui/react-dialog';
|
|
5
|
+
import { cva } from 'class-variance-authority';
|
|
6
|
+
import { X } from 'lucide-react';
|
|
7
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
8
|
+
|
|
9
|
+
var Sheet = SheetPrimitive.Root;
|
|
10
|
+
var SheetTrigger = SheetPrimitive.Trigger;
|
|
11
|
+
var SheetClose = SheetPrimitive.Close;
|
|
12
|
+
var SheetPortal = SheetPrimitive.Portal;
|
|
13
|
+
var SheetOverlay = React.forwardRef((_a, ref) => {
|
|
14
|
+
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
15
|
+
return /* @__PURE__ */ jsx(
|
|
16
|
+
SheetPrimitive.Overlay,
|
|
17
|
+
__spreadProps(__spreadValues({
|
|
18
|
+
className: cn(
|
|
19
|
+
"fixed inset-0 z-[1000] bg-black/50 backdrop-blur-sm data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
20
|
+
className
|
|
21
|
+
)
|
|
22
|
+
}, props), {
|
|
23
|
+
ref
|
|
24
|
+
})
|
|
25
|
+
);
|
|
26
|
+
});
|
|
27
|
+
SheetOverlay.displayName = SheetPrimitive.Overlay.displayName;
|
|
28
|
+
var sheetVariants = cva(
|
|
29
|
+
"fixed z-[1000] gap-4 bg-background border-border shadow-[var(--shadow-overlay)] data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=open]:duration-[var(--duration-deliberate)] data-[state=closed]:duration-[var(--duration-exit-standard)] data-[state=open]:ease-[var(--ease-enter)] data-[state=closed]:ease-[var(--ease-exit)]",
|
|
30
|
+
{
|
|
31
|
+
variants: {
|
|
32
|
+
side: {
|
|
33
|
+
top: "inset-x-0 top-0 data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
|
|
34
|
+
bottom: "inset-x-0 bottom-0 data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",
|
|
35
|
+
left: "inset-y-0 left-0 h-full w-3/4 data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left",
|
|
36
|
+
right: "inset-y-0 right-0 h-full w-3/4 data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right"
|
|
37
|
+
},
|
|
38
|
+
attachment: {
|
|
39
|
+
edge: "p-6",
|
|
40
|
+
// Padding is the caller's business here: a detail surface runs a gallery
|
|
41
|
+
// and a sticky action bar to the panel edge, and a fixed p-6 would inset
|
|
42
|
+
// both. `edge` keeps its p-6 so nothing already shipped shifts.
|
|
43
|
+
inset: "rounded-2xl overflow-hidden"
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
compoundVariants: [
|
|
47
|
+
// `edge` restates exactly what each side carried before `attachment`
|
|
48
|
+
// existed — the seam border and the two inward-facing corners. Kept as
|
|
49
|
+
// compounds rather than left on `side` so `inset` is not fighting them
|
|
50
|
+
// through class-merge order.
|
|
51
|
+
// `sm:max-w-sm` lives here, not on `side`: an inset panel is sized by its
|
|
52
|
+
// caller, and a responsive cap left on `side` cannot be overridden from
|
|
53
|
+
// className — tailwind-merge scopes `sm:max-w-*` and `max-w-*` to
|
|
54
|
+
// different groups, so `max-w-none` loses to it at every width ≥ sm.
|
|
55
|
+
{ side: "top", attachment: "edge", class: "border-b" },
|
|
56
|
+
{ side: "bottom", attachment: "edge", class: "border-t rounded-t-2xl" },
|
|
57
|
+
{ side: "left", attachment: "edge", class: "border-r rounded-r-2xl sm:max-w-sm" },
|
|
58
|
+
{ side: "right", attachment: "edge", class: "border-l rounded-l-2xl sm:max-w-sm" },
|
|
59
|
+
// The inset offsets live here rather than on `attachment` because each
|
|
60
|
+
// side has to give up its own edge: a right-side panel clears top, right
|
|
61
|
+
// and bottom but is still anchored to the right.
|
|
62
|
+
{ side: "right", attachment: "inset", class: "inset-y-3 right-3 h-auto" },
|
|
63
|
+
{ side: "left", attachment: "inset", class: "inset-y-3 left-3 h-auto" },
|
|
64
|
+
{ side: "top", attachment: "inset", class: "inset-x-3 top-3" },
|
|
65
|
+
{ side: "bottom", attachment: "inset", class: "inset-x-3 bottom-3" }
|
|
66
|
+
],
|
|
67
|
+
defaultVariants: {
|
|
68
|
+
side: "right",
|
|
69
|
+
attachment: "edge"
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
);
|
|
73
|
+
var SheetContent = React.forwardRef(
|
|
74
|
+
(_a, ref) => {
|
|
75
|
+
var _b = _a, { side = "right", attachment = "edge", className, children, hideClose, overlayClassName } = _b, props = __objRest(_b, ["side", "attachment", "className", "children", "hideClose", "overlayClassName"]);
|
|
76
|
+
return /* @__PURE__ */ jsxs(SheetPortal, { children: [
|
|
77
|
+
/* @__PURE__ */ jsx(SheetOverlay, { className: overlayClassName }),
|
|
78
|
+
/* @__PURE__ */ jsxs(
|
|
79
|
+
SheetPrimitive.Content,
|
|
80
|
+
__spreadProps(__spreadValues({
|
|
81
|
+
ref,
|
|
82
|
+
className: cn(sheetVariants({ side, attachment }), className)
|
|
83
|
+
}, props), {
|
|
84
|
+
children: [
|
|
85
|
+
children,
|
|
86
|
+
!hideClose && /* @__PURE__ */ jsxs(SheetPrimitive.Close, { className: "absolute right-4 top-4 rounded-lg opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary glass-hover p-2", children: [
|
|
87
|
+
/* @__PURE__ */ jsx(X, { className: "h-4 w-4" }),
|
|
88
|
+
/* @__PURE__ */ jsx("span", { className: "sr-only", children: "Close" })
|
|
89
|
+
] })
|
|
90
|
+
]
|
|
91
|
+
})
|
|
92
|
+
)
|
|
93
|
+
] });
|
|
94
|
+
}
|
|
95
|
+
);
|
|
96
|
+
SheetContent.displayName = SheetPrimitive.Content.displayName;
|
|
97
|
+
var SheetHeader = (_a) => {
|
|
98
|
+
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
99
|
+
return /* @__PURE__ */ jsx("div", __spreadValues({ className: cn("flex flex-col space-y-2 text-center sm:text-left", className) }, props));
|
|
100
|
+
};
|
|
101
|
+
SheetHeader.displayName = "SheetHeader";
|
|
102
|
+
var SheetFooter = (_a) => {
|
|
103
|
+
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
104
|
+
return /* @__PURE__ */ jsx(
|
|
105
|
+
"div",
|
|
106
|
+
__spreadValues({
|
|
107
|
+
className: cn("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", className)
|
|
108
|
+
}, props)
|
|
109
|
+
);
|
|
110
|
+
};
|
|
111
|
+
SheetFooter.displayName = "SheetFooter";
|
|
112
|
+
var SheetTitle = React.forwardRef((_a, ref) => {
|
|
113
|
+
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
114
|
+
return /* @__PURE__ */ jsx(
|
|
115
|
+
SheetPrimitive.Title,
|
|
116
|
+
__spreadValues({
|
|
117
|
+
ref,
|
|
118
|
+
className: cn("text-lg font-semibold text-foreground", className)
|
|
119
|
+
}, props)
|
|
120
|
+
);
|
|
121
|
+
});
|
|
122
|
+
SheetTitle.displayName = SheetPrimitive.Title.displayName;
|
|
123
|
+
var SheetDescription = React.forwardRef((_a, ref) => {
|
|
124
|
+
var _b = _a, { className } = _b, props = __objRest(_b, ["className"]);
|
|
125
|
+
return /* @__PURE__ */ jsx(
|
|
126
|
+
SheetPrimitive.Description,
|
|
127
|
+
__spreadValues({
|
|
128
|
+
ref,
|
|
129
|
+
className: cn("text-sm text-muted-foreground", className)
|
|
130
|
+
}, props)
|
|
131
|
+
);
|
|
132
|
+
});
|
|
133
|
+
SheetDescription.displayName = SheetPrimitive.Description.displayName;
|
|
134
|
+
|
|
135
|
+
export { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger };
|
|
@@ -4,7 +4,7 @@ import * as React from 'react';
|
|
|
4
4
|
import { VariantProps } from 'class-variance-authority';
|
|
5
5
|
|
|
6
6
|
declare const badgeVariants: (props?: ({
|
|
7
|
-
variant?: "default" | "secondary" | "success" | "warning" | "destructive" | "outline" | "glass" | "overlay" | "brown" | "code" | "onPrimary" | "confirmed" | "pending" | "completed" | "assignee" | null | undefined;
|
|
7
|
+
variant?: "default" | "secondary" | "success" | "warning" | "destructive" | "outline" | "glass" | "overlay" | "brown" | "code" | "onPrimary" | "confirmed" | "pending" | "completed" | "assignee" | "softSuccess" | "softWarning" | "softDestructive" | "softNeutral" | null | undefined;
|
|
8
8
|
size?: "status" | "chip" | null | undefined;
|
|
9
9
|
live?: boolean | null | undefined;
|
|
10
10
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
@@ -18,7 +18,13 @@ interface BadgeProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<
|
|
|
18
18
|
* clickable row.
|
|
19
19
|
*/
|
|
20
20
|
as?: "div" | "span";
|
|
21
|
+
/**
|
|
22
|
+
* A lucide glyph drawn at 14px before the label — the armchair on
|
|
23
|
+
* "Seated", the clock on "25 min late". Decorative: the label carries the
|
|
24
|
+
* meaning, so the slot is `aria-hidden`.
|
|
25
|
+
*/
|
|
26
|
+
icon?: React.ReactNode;
|
|
21
27
|
}
|
|
22
|
-
declare function Badge({ className, variant, size, live, as: Tag, ...props }: BadgeProps): react_jsx_runtime.JSX.Element;
|
|
28
|
+
declare function Badge({ className, variant, size, live, as: Tag, icon, children, ...props }: BadgeProps): react_jsx_runtime.JSX.Element;
|
|
23
29
|
|
|
24
30
|
export { Badge, type BadgeProps, badgeVariants };
|
package/dist/components/badge.js
CHANGED
|
@@ -21,9 +21,17 @@ import { VariantProps } from 'class-variance-authority';
|
|
|
21
21
|
* - `warning`: a 16% amber wash with the design's amber ink — darker than
|
|
22
22
|
* the solid `--warning`, which falls short of AA on its own wash at this
|
|
23
23
|
* size; dark mode uses the lifted token.
|
|
24
|
+
* - `destructive`: something did not load or did not happen — "The queue
|
|
25
|
+
* didn't load", "Walk-ins didn't load" (today/04-d3, floor/02-s2,
|
|
26
|
+
* reports/03-p9). A red wash with `--destructive-ink`, and the one tone
|
|
27
|
+
* with a hairline: the booking frames draw it, because a failure has to
|
|
28
|
+
* read as a boundary on a page already full of soft grounds.
|
|
29
|
+
*
|
|
30
|
+
* `action` takes the trailing control — the frames' "Retry". It sits on the
|
|
31
|
+
* right edge, centred on the text, and never wraps under it.
|
|
24
32
|
*/
|
|
25
33
|
declare const bannerVariants: (props?: ({
|
|
26
|
-
tone?: "warning" | "info" | null | undefined;
|
|
34
|
+
tone?: "warning" | "destructive" | "info" | null | undefined;
|
|
27
35
|
} & class_variance_authority_types.ClassProp) | undefined) => string;
|
|
28
36
|
type BannerProps = Omit<React.HTMLAttributes<HTMLDivElement>, "title"> & VariantProps<typeof bannerVariants> & {
|
|
29
37
|
/**
|
|
@@ -33,7 +41,14 @@ type BannerProps = Omit<React.HTMLAttributes<HTMLDivElement>, "title"> & Variant
|
|
|
33
41
|
icon?: React.ReactNode;
|
|
34
42
|
/** The bold first line — "19:30 just went". */
|
|
35
43
|
title?: React.ReactNode;
|
|
44
|
+
/**
|
|
45
|
+
* A trailing control — "Retry". Pass a real button (a `Button
|
|
46
|
+
* variant="link"` reads as the frames draw it); the banner only places it.
|
|
47
|
+
* A banner that announces a failure the user did not just cause is
|
|
48
|
+
* usually worth `role="status"` from the caller.
|
|
49
|
+
*/
|
|
50
|
+
action?: React.ReactNode;
|
|
36
51
|
};
|
|
37
|
-
declare function Banner({ tone, icon, title, className, children, ...props }: BannerProps): react_jsx_runtime.JSX.Element;
|
|
52
|
+
declare function Banner({ tone, icon, title, action, className, children, ...props }: BannerProps): react_jsx_runtime.JSX.Element;
|
|
38
53
|
|
|
39
54
|
export { Banner, type BannerProps, bannerVariants };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { cn } from '../chunk-FEK5XGZW.js';
|
|
2
2
|
import { __objRest, __spreadProps, __spreadValues } from '../chunk-MMUBH76A.js';
|
|
3
3
|
import { cva } from 'class-variance-authority';
|
|
4
|
-
import { TriangleAlert, Info } from 'lucide-react';
|
|
4
|
+
import { CircleAlert, TriangleAlert, Info } from 'lucide-react';
|
|
5
5
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
6
6
|
|
|
7
7
|
var bannerVariants = cva(
|
|
@@ -10,7 +10,8 @@ var bannerVariants = cva(
|
|
|
10
10
|
variants: {
|
|
11
11
|
tone: {
|
|
12
12
|
info: "bg-surface-2 text-ink-secondary",
|
|
13
|
-
warning: "bg-[oklch(0.62_0.15_70/0.16)] text-[oklch(0.42_0.1_70)] dark:bg-warning/15 dark:text-warning"
|
|
13
|
+
warning: "bg-[oklch(0.62_0.15_70/0.16)] text-[oklch(0.42_0.1_70)] dark:bg-warning/15 dark:text-warning",
|
|
14
|
+
destructive: "border border-destructive/25 bg-destructive/10 text-destructive-ink"
|
|
14
15
|
}
|
|
15
16
|
},
|
|
16
17
|
defaultVariants: { tone: "info" }
|
|
@@ -18,16 +19,18 @@ var bannerVariants = cva(
|
|
|
18
19
|
);
|
|
19
20
|
var TONE_ICON = {
|
|
20
21
|
info: /* @__PURE__ */ jsx(Info, { "aria-hidden": true }),
|
|
21
|
-
warning: /* @__PURE__ */ jsx(TriangleAlert, { "aria-hidden": true })
|
|
22
|
+
warning: /* @__PURE__ */ jsx(TriangleAlert, { "aria-hidden": true }),
|
|
23
|
+
destructive: /* @__PURE__ */ jsx(CircleAlert, { "aria-hidden": true })
|
|
22
24
|
};
|
|
23
25
|
function Banner(_a) {
|
|
24
|
-
var _b = _a, { tone, icon, title, className, children } = _b, props = __objRest(_b, ["tone", "icon", "title", "className", "children"]);
|
|
26
|
+
var _b = _a, { tone, icon, title, action, className, children } = _b, props = __objRest(_b, ["tone", "icon", "title", "action", "className", "children"]);
|
|
25
27
|
return /* @__PURE__ */ jsxs("div", __spreadProps(__spreadValues({ "data-slot": "banner", className: cn(bannerVariants({ tone }), className) }, props), { children: [
|
|
26
28
|
icon === void 0 ? TONE_ICON[tone != null ? tone : "info"] : icon,
|
|
27
|
-
/* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
|
|
29
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
|
|
28
30
|
title ? /* @__PURE__ */ jsx("b", { className: "mb-[3px] block text-[13px] font-bold", children: title }) : null,
|
|
29
|
-
/* @__PURE__ */ jsx("div", { className: cn(tone === "warning" && title ? "opacity-90" : void 0), children })
|
|
30
|
-
] })
|
|
31
|
+
/* @__PURE__ */ jsx("div", { className: cn((tone === "warning" || tone === "destructive") && title ? "opacity-90" : void 0), children })
|
|
32
|
+
] }),
|
|
33
|
+
action ? /* @__PURE__ */ jsx("div", { "data-slot": "banner-action", className: "shrink-0 self-center", children: action }) : null
|
|
31
34
|
] }));
|
|
32
35
|
}
|
|
33
36
|
|
|
@@ -43,12 +43,22 @@ type BookingRowProps = {
|
|
|
43
43
|
href: string;
|
|
44
44
|
/** The venue photo, rendered by the app; a quiet placeholder when absent. */
|
|
45
45
|
thumbnail?: React.ReactNode;
|
|
46
|
+
/**
|
|
47
|
+
* One more chip about this booking, beside the status — "on this phone" for
|
|
48
|
+
* a booking the signed-in guest has not put in their account yet.
|
|
49
|
+
*
|
|
50
|
+
* A node rather than a string because the app owns what it says and how it
|
|
51
|
+
* is marked; the row only owns where it sits. It rides with the status on
|
|
52
|
+
* both layouts, so the two read as one cluster of facts about the booking
|
|
53
|
+
* rather than a second row of chrome.
|
|
54
|
+
*/
|
|
55
|
+
note?: React.ReactNode;
|
|
46
56
|
/** The next booking up — tinted on desktop. */
|
|
47
57
|
highlighted?: boolean;
|
|
48
58
|
linkComponent?: React.ComponentType<BookingRowLinkProps>;
|
|
49
59
|
className?: string;
|
|
50
60
|
};
|
|
51
|
-
declare function BookingRow({ venueName, venueType, when, party, status, statusLabel, code, href, thumbnail, highlighted, linkComponent: LinkComponent, className, }: BookingRowProps): react_jsx_runtime.JSX.Element;
|
|
61
|
+
declare function BookingRow({ venueName, venueType, when, party, status, statusLabel, code, href, thumbnail, note, highlighted, linkComponent: LinkComponent, className, }: BookingRowProps): react_jsx_runtime.JSX.Element;
|
|
52
62
|
type BookingRowListProps = {
|
|
53
63
|
children: React.ReactNode;
|
|
54
64
|
/** "Upcoming bookings" — names the list for assistive tech. */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Badge } from '../chunk-
|
|
1
|
+
import { Badge } from '../chunk-FQAIYKAS.js';
|
|
2
2
|
import { cn } from '../chunk-FEK5XGZW.js';
|
|
3
3
|
import { __objRest, __spreadValues } from '../chunk-MMUBH76A.js';
|
|
4
4
|
import * as React from 'react';
|
|
@@ -34,6 +34,7 @@ function BookingRow({
|
|
|
34
34
|
code,
|
|
35
35
|
href,
|
|
36
36
|
thumbnail,
|
|
37
|
+
note,
|
|
37
38
|
highlighted,
|
|
38
39
|
linkComponent: LinkComponent = DefaultLink,
|
|
39
40
|
className
|
|
@@ -65,6 +66,7 @@ function BookingRow({
|
|
|
65
66
|
/* @__PURE__ */ jsxs("div", { className: "mt-2 flex flex-wrap items-center gap-[7px]", children: [
|
|
66
67
|
/* @__PURE__ */ jsx("span", { className: "text-[12.5px] font-medium", children: when }),
|
|
67
68
|
/* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground", children: party }),
|
|
69
|
+
note,
|
|
68
70
|
statusPill
|
|
69
71
|
] })
|
|
70
72
|
] }),
|
|
@@ -80,6 +82,7 @@ function BookingRow({
|
|
|
80
82
|
] })
|
|
81
83
|
] }),
|
|
82
84
|
/* @__PURE__ */ jsxs("span", { className: "hidden md:contents", children: [
|
|
85
|
+
note,
|
|
83
86
|
statusPill,
|
|
84
87
|
codeChip,
|
|
85
88
|
/* @__PURE__ */ jsx(ChevronRight, { "aria-hidden": true, className: "size-[15px] shrink-0 text-muted-foreground" })
|
|
@@ -1,39 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import { cva } from 'class-variance-authority';
|
|
5
|
-
import { jsx } from 'react/jsx-runtime';
|
|
6
|
-
|
|
7
|
-
var buttonGroupVariants = cva("inline-flex", {
|
|
8
|
-
variants: {
|
|
9
|
-
orientation: {
|
|
10
|
-
horizontal: "flex-row [&>[data-slot=button]]:rounded-none [&>[data-slot=button]:first-child]:rounded-l-xl [&>[data-slot=button]:last-child]:rounded-r-xl [&>[data-slot=button]:not(:first-child)]:-ml-px",
|
|
11
|
-
vertical: "flex-col [&>[data-slot=button]]:rounded-none [&>[data-slot=button]:first-child]:rounded-t-xl [&>[data-slot=button]:last-child]:rounded-b-xl [&>[data-slot=button]:not(:first-child)]:-mt-px"
|
|
12
|
-
},
|
|
13
|
-
attached: {
|
|
14
|
-
true: "",
|
|
15
|
-
false: "gap-1"
|
|
16
|
-
}
|
|
17
|
-
},
|
|
18
|
-
defaultVariants: {
|
|
19
|
-
orientation: "horizontal",
|
|
20
|
-
attached: true
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
|
-
var ButtonGroup = React.forwardRef(
|
|
24
|
-
(_a, ref) => {
|
|
25
|
-
var _b = _a, { className, orientation, attached } = _b, props = __objRest(_b, ["className", "orientation", "attached"]);
|
|
26
|
-
return /* @__PURE__ */ jsx(
|
|
27
|
-
"div",
|
|
28
|
-
__spreadValues({
|
|
29
|
-
ref,
|
|
30
|
-
role: "group",
|
|
31
|
-
"data-slot": "button-group",
|
|
32
|
-
className: cn(buttonGroupVariants({ orientation, attached }), className)
|
|
33
|
-
}, props)
|
|
34
|
-
);
|
|
35
|
-
}
|
|
36
|
-
);
|
|
37
|
-
ButtonGroup.displayName = "ButtonGroup";
|
|
38
|
-
|
|
39
|
-
export { ButtonGroup, buttonGroupVariants };
|
|
1
|
+
export { ButtonGroup, buttonGroupVariants } from '../chunk-EGU6EG73.js';
|
|
2
|
+
import '../chunk-FEK5XGZW.js';
|
|
3
|
+
import '../chunk-MMUBH76A.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { PhotoGround } from '../chunk-SWD6CJ35.js';
|
|
2
2
|
import { Convergence } from '../chunk-4XDJXMLF.js';
|
|
3
3
|
import '../chunk-OIV7B44M.js';
|
|
4
|
-
import { Badge } from '../chunk-
|
|
4
|
+
import { Badge } from '../chunk-FQAIYKAS.js';
|
|
5
5
|
import { cn } from '../chunk-FEK5XGZW.js';
|
|
6
6
|
import '../chunk-MMUBH76A.js';
|
|
7
7
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export { MentionSignal, MenuItem } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import '../chunk-
|
|
1
|
+
export { MentionSignal, MenuItem } from '../chunk-ZUBBMLBD.js';
|
|
2
|
+
import '../chunk-KGXTBTCJ.js';
|
|
3
|
+
import '../chunk-FQAIYKAS.js';
|
|
4
4
|
import '../chunk-FEK5XGZW.js';
|
|
5
5
|
import '../chunk-MMUBH76A.js';
|
|
@@ -5,9 +5,9 @@ import '../chunk-TVEIUTBQ.js';
|
|
|
5
5
|
import { Button } from '../chunk-5SGKGFMN.js';
|
|
6
6
|
import '../chunk-RIH2IS7X.js';
|
|
7
7
|
import '../chunk-5YNIQ2BL.js';
|
|
8
|
-
import { Badge } from '../chunk-
|
|
8
|
+
import { Badge } from '../chunk-FQAIYKAS.js';
|
|
9
9
|
import { cn } from '../chunk-FEK5XGZW.js';
|
|
10
|
-
import '../chunk-MMUBH76A.js';
|
|
10
|
+
import { __spreadValues } from '../chunk-MMUBH76A.js';
|
|
11
11
|
import * as React from 'react';
|
|
12
12
|
import { ChevronsUpDown, X } from 'lucide-react';
|
|
13
13
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
@@ -62,7 +62,12 @@ function MultiSelectCombobox({
|
|
|
62
62
|
className: "w-[var(--radix-popover-trigger-width)] p-0",
|
|
63
63
|
align: "start",
|
|
64
64
|
children: /* @__PURE__ */ jsxs(Command, { shouldFilter, children: [
|
|
65
|
-
/* @__PURE__ */ jsx(
|
|
65
|
+
/* @__PURE__ */ jsx(
|
|
66
|
+
CommandInput,
|
|
67
|
+
__spreadValues({
|
|
68
|
+
placeholder: searchPlaceholder
|
|
69
|
+
}, onSearchChange ? { onValueChange: onSearchChange } : {})
|
|
70
|
+
),
|
|
66
71
|
/* @__PURE__ */ jsxs(CommandList, { children: [
|
|
67
72
|
/* @__PURE__ */ jsx(CommandEmpty, { children: loading ? "Loading\u2026" : emptyText }),
|
|
68
73
|
/* @__PURE__ */ jsx(CommandGroup, { children: options.map((option) => {
|