@rojaostudio/ds 1.0.1 → 1.0.2
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/components/accordion.js +43 -37
- package/dist/components/alert.js +35 -28
- package/dist/components/avatar.js +41 -34
- package/dist/components/badge.js +21 -14
- package/dist/components/blocker-card.js +11 -2
- package/dist/components/bottom-sheet.js +60 -53
- package/dist/components/breadcrumb.js +32 -22
- package/dist/components/button.js +18 -11
- package/dist/components/card.js +24 -9
- package/dist/components/chat-bubble.js +6 -5
- package/dist/components/checkbox.js +61 -48
- package/dist/components/chip-input.js +98 -81
- package/dist/components/chips.js +36 -29
- package/dist/components/choice-card.js +48 -42
- package/dist/components/choice-carousel.js +79 -74
- package/dist/components/choice-preview-card.js +17 -6
- package/dist/components/color-input.js +41 -35
- package/dist/components/combobox.js +97 -75
- package/dist/components/context-menu.js +17 -13
- package/dist/components/copilot-hint.js +40 -31
- package/dist/components/copy-field.js +8 -5
- package/dist/components/currency-input.js +40 -32
- package/dist/components/danger-zone.js +19 -9
- package/dist/components/data-table-header.js +185 -135
- package/dist/components/date-picker.js +114 -95
- package/dist/components/divider.js +11 -8
- package/dist/components/drawer.js +40 -28
- package/dist/components/dropzone.js +23 -20
- package/dist/components/empty-state.js +26 -23
- package/dist/components/fab.js +38 -26
- package/dist/components/filter-chip.js +20 -16
- package/dist/components/floating-stepper.js +42 -32
- package/dist/components/form-card-header.js +9 -1
- package/dist/components/icon-button.js +19 -13
- package/dist/components/image-crop-modal.js +69 -48
- package/dist/components/image-upload.js +172 -128
- package/dist/components/input.js +90 -62
- package/dist/components/insight-card.js +12 -1
- package/dist/components/label.js +12 -7
- package/dist/components/media-tile.js +11 -8
- package/dist/components/menu.js +28 -25
- package/dist/components/modal.js +43 -28
- package/dist/components/notice.js +34 -16
- package/dist/components/option-tile.js +55 -49
- package/dist/components/page-shell.js +13 -6
- package/dist/components/page-skeleton.js +32 -2
- package/dist/components/page-tabs.js +39 -26
- package/dist/components/pagination.js +38 -33
- package/dist/components/paywall-banner.js +19 -3
- package/dist/components/paywall.js +18 -8
- package/dist/components/phone-frame.js +5 -4
- package/dist/components/phone-input.js +50 -31
- package/dist/components/pix-icon.js +11 -6
- package/dist/components/popover.js +27 -23
- package/dist/components/pricing-card.js +16 -1
- package/dist/components/qr-display.js +16 -11
- package/dist/components/radio.js +73 -56
- package/dist/components/row-actions.js +61 -53
- package/dist/components/saving-bar-context.js +35 -29
- package/dist/components/saving-bar.js +36 -33
- package/dist/components/search.js +49 -44
- package/dist/components/section-card.js +43 -35
- package/dist/components/section-header.js +11 -1
- package/dist/components/select.js +83 -62
- package/dist/components/selectable-card.js +10 -3
- package/dist/components/setting-row.js +11 -1
- package/dist/components/settings-list.js +9 -5
- package/dist/components/skeleton.js +6 -5
- package/dist/components/slider.js +52 -38
- package/dist/components/spinner.js +18 -12
- package/dist/components/step-progress.js +11 -10
- package/dist/components/summary-bar.js +33 -28
- package/dist/components/table.js +20 -15
- package/dist/components/textarea.js +40 -24
- package/dist/components/themed.d.ts +1 -1
- package/dist/components/themed.js +2 -1
- package/dist/components/time-picker.js +117 -97
- package/dist/components/toaster.js +80 -74
- package/dist/components/toggle-card-compact.js +79 -71
- package/dist/components/toggle-card.js +61 -53
- package/dist/components/toggle-group.js +35 -29
- package/dist/components/toggle.js +46 -36
- package/dist/components/tooltip.js +30 -25
- package/dist/components/typing-indicator.js +10 -7
- package/dist/targets/native/components/accordion.js +31 -25
- package/dist/targets/native/components/alert.js +22 -16
- package/dist/targets/native/components/avatar.js +36 -29
- package/dist/targets/native/components/badge.js +4 -3
- package/dist/targets/native/components/button.js +11 -4
- package/dist/targets/native/components/card.js +2 -1
- package/dist/targets/native/components/checkbox.js +18 -15
- package/dist/targets/native/components/chips.js +19 -16
- package/dist/targets/native/components/choice-card.js +29 -23
- package/dist/targets/native/components/context-menu.js +13 -9
- package/dist/targets/native/components/currency-input.js +28 -25
- package/dist/targets/native/components/danger-zone.js +10 -4
- package/dist/targets/native/components/date-picker.js +86 -70
- package/dist/targets/native/components/divider.js +3 -2
- package/dist/targets/native/components/empty-state.js +6 -1
- package/dist/targets/native/components/fab.js +32 -26
- package/dist/targets/native/components/filter-chip.js +9 -8
- package/dist/targets/native/components/form-field.js +20 -10
- package/dist/targets/native/components/form-screen.js +50 -45
- package/dist/targets/native/components/google-icon.js +31 -25
- package/dist/targets/native/components/icon-button.js +6 -4
- package/dist/targets/native/components/icon.js +2 -1
- package/dist/targets/native/components/image-upload.js +59 -50
- package/dist/targets/native/components/input.js +41 -34
- package/dist/targets/native/components/list-item.js +29 -23
- package/dist/targets/native/components/menu.js +12 -10
- package/dist/targets/native/components/modal.js +41 -32
- package/dist/targets/native/components/paywall-banner.js +13 -4
- package/dist/targets/native/components/paywall.js +11 -1
- package/dist/targets/native/components/radio.js +19 -16
- package/dist/targets/native/components/search.js +41 -38
- package/dist/targets/native/components/select.js +71 -63
- package/dist/targets/native/components/sheet.js +36 -30
- package/dist/targets/native/components/skeleton.js +6 -5
- package/dist/targets/native/components/slider.js +51 -43
- package/dist/targets/native/components/spinner.js +2 -1
- package/dist/targets/native/components/stepper.js +14 -9
- package/dist/targets/native/components/switch.js +15 -14
- package/dist/targets/native/components/text.js +2 -1
- package/dist/targets/native/components/textarea.js +2 -1
- package/dist/targets/native/components/theme.js +2 -1
- package/dist/targets/native/components/toaster.js +24 -21
- package/dist/targets/native/index.d.ts +1 -1
- package/dist/targets/native/index.js +1 -3
- package/package.json +3 -6
- package/styles/base.css +3 -3
- package/brand/rojao-black-on-white.png +0 -0
- package/brand/rojao-black.png +0 -0
- package/brand/rojao-white-on-black.png +0 -0
- package/brand/rojao-white.png +0 -0
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import "../chunk-ORMEWXMH.js";
|
|
3
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
4
|
import { useId, useRef } from "react";
|
|
4
5
|
import { Check } from "lucide-react";
|
|
5
6
|
function OptionTile({
|
|
@@ -15,7 +16,7 @@ function OptionTile({
|
|
|
15
16
|
fullSpan = false,
|
|
16
17
|
className = ""
|
|
17
18
|
}) {
|
|
18
|
-
return /* @__PURE__ */
|
|
19
|
+
return /* @__PURE__ */ jsxs(
|
|
19
20
|
"button",
|
|
20
21
|
{
|
|
21
22
|
type: "button",
|
|
@@ -34,30 +35,32 @@ function OptionTile({
|
|
|
34
35
|
disabled ? "cursor-not-allowed opacity-50" : "cursor-pointer",
|
|
35
36
|
fullSpan ? "col-span-full" : "",
|
|
36
37
|
className
|
|
37
|
-
].filter(Boolean).join(" ")
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
38
|
+
].filter(Boolean).join(" "),
|
|
39
|
+
children: [
|
|
40
|
+
selected && /* @__PURE__ */ jsx("span", { className: "absolute right-2 top-2 flex size-4 items-center justify-center rounded-full [background:var(--option-tile-check)] [color:var(--option-tile-check-icon)]", children: /* @__PURE__ */ jsx(Check, { size: 11, strokeWidth: 3 }) }),
|
|
41
|
+
icon && /* @__PURE__ */ jsx(
|
|
42
|
+
"span",
|
|
43
|
+
{
|
|
44
|
+
className: [
|
|
45
|
+
"flex size-10 items-center justify-center rounded-(--radius-card) transition-colors [&_svg]:size-5",
|
|
46
|
+
selected ? "[background:var(--option-tile-icon-bg-active)] [color:var(--option-tile-icon-active)]" : "[background:var(--option-tile-icon-bg)] [color:var(--option-tile-icon)]"
|
|
47
|
+
].join(" "),
|
|
48
|
+
children: icon
|
|
49
|
+
}
|
|
50
|
+
),
|
|
51
|
+
/* @__PURE__ */ jsx(
|
|
52
|
+
"span",
|
|
53
|
+
{
|
|
54
|
+
className: [
|
|
55
|
+
icon ? "text-caption" : "text-label",
|
|
56
|
+
"font-semibold leading-tight",
|
|
57
|
+
selected ? "[color:var(--option-tile-label-active)]" : "[color:var(--option-tile-label)]"
|
|
58
|
+
].join(" "),
|
|
59
|
+
children: label
|
|
60
|
+
}
|
|
61
|
+
)
|
|
62
|
+
]
|
|
63
|
+
}
|
|
61
64
|
);
|
|
62
65
|
}
|
|
63
66
|
function OptionTileGrid(props) {
|
|
@@ -106,37 +109,40 @@ function OptionTileGrid(props) {
|
|
|
106
109
|
break;
|
|
107
110
|
}
|
|
108
111
|
};
|
|
109
|
-
const grid = /* @__PURE__ */
|
|
112
|
+
const grid = /* @__PURE__ */ jsx(
|
|
110
113
|
"div",
|
|
111
114
|
{
|
|
112
115
|
id: groupId,
|
|
113
116
|
role: multiple ? "group" : "radiogroup",
|
|
114
117
|
"aria-label": ariaLabel,
|
|
115
|
-
className: ["grid gap-2", columns === 2 ? "grid-cols-2" : "grid-cols-2 sm:grid-cols-3", label ? "" : className].join(" ")
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
)
|
|
136
|
-
}
|
|
118
|
+
className: ["grid gap-2", columns === 2 ? "grid-cols-2" : "grid-cols-2 sm:grid-cols-3", label ? "" : className].join(" "),
|
|
119
|
+
children: options.map((opt, i) => {
|
|
120
|
+
const Icon = opt.icon;
|
|
121
|
+
return /* @__PURE__ */ jsx(
|
|
122
|
+
OptionTile,
|
|
123
|
+
{
|
|
124
|
+
multiple,
|
|
125
|
+
selected: isSel(opt.value),
|
|
126
|
+
label: opt.label,
|
|
127
|
+
icon: Icon ? /* @__PURE__ */ jsx(Icon, {}) : void 0,
|
|
128
|
+
fullSpan: opt.fullSpan,
|
|
129
|
+
onClick: () => activate(opt.value),
|
|
130
|
+
tabIndex: multiple ? 0 : i === activeIdx ? 0 : -1,
|
|
131
|
+
onKeyDown: (e) => onKeyDown(e, i),
|
|
132
|
+
buttonRef: (el) => {
|
|
133
|
+
btns.current[i] = el;
|
|
134
|
+
}
|
|
135
|
+
},
|
|
136
|
+
opt.value
|
|
137
|
+
);
|
|
138
|
+
})
|
|
139
|
+
}
|
|
137
140
|
);
|
|
138
141
|
if (!label) return grid;
|
|
139
|
-
return /* @__PURE__ */
|
|
142
|
+
return /* @__PURE__ */ jsxs("div", { className: ["flex flex-col gap-2", className].join(" "), children: [
|
|
143
|
+
/* @__PURE__ */ jsx("span", { className: "text-label font-medium text-fg-primary", children: label }),
|
|
144
|
+
grid
|
|
145
|
+
] });
|
|
140
146
|
}
|
|
141
147
|
export {
|
|
142
148
|
OptionTile,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import "../chunk-ORMEWXMH.js";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
3
|
const WIDTH_CLS = {
|
|
3
4
|
narrow: "max-w-screen-md",
|
|
4
5
|
default: "max-w-screen-xl",
|
|
@@ -10,7 +11,7 @@ function PageShell({
|
|
|
10
11
|
children,
|
|
11
12
|
className = ""
|
|
12
13
|
}) {
|
|
13
|
-
return /* @__PURE__ */
|
|
14
|
+
return /* @__PURE__ */ jsx(
|
|
14
15
|
"div",
|
|
15
16
|
{
|
|
16
17
|
className: [
|
|
@@ -18,16 +19,22 @@ function PageShell({
|
|
|
18
19
|
WIDTH_CLS[maxWidth],
|
|
19
20
|
padded ? "px-4 sm:px-6 lg:px-8 py-6" : "",
|
|
20
21
|
className
|
|
21
|
-
].filter(Boolean).join(" ")
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
].filter(Boolean).join(" "),
|
|
23
|
+
children
|
|
24
|
+
}
|
|
24
25
|
);
|
|
25
26
|
}
|
|
26
27
|
function PageShellHeader({ title, eyebrow, actions, className = "" }) {
|
|
27
|
-
return /* @__PURE__ */
|
|
28
|
+
return /* @__PURE__ */ jsxs("div", { className: ["flex items-start justify-between gap-4 mb-6", className].filter(Boolean).join(" "), children: [
|
|
29
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
|
|
30
|
+
eyebrow && /* @__PURE__ */ jsx("p", { className: "text-caption font-medium text-fg-muted mb-1", children: eyebrow }),
|
|
31
|
+
/* @__PURE__ */ jsx("h1", { className: "text-heading-md font-semibold text-fg-primary truncate", children: title })
|
|
32
|
+
] }),
|
|
33
|
+
actions && /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2 shrink-0", children: actions })
|
|
34
|
+
] });
|
|
28
35
|
}
|
|
29
36
|
function PageShellBody({ children, className = "" }) {
|
|
30
|
-
return /* @__PURE__ */
|
|
37
|
+
return /* @__PURE__ */ jsx("div", { className: ["space-y-6", className].filter(Boolean).join(" "), children });
|
|
31
38
|
}
|
|
32
39
|
PageShell.Header = PageShellHeader;
|
|
33
40
|
PageShell.Body = PageShellBody;
|
|
@@ -1,10 +1,40 @@
|
|
|
1
1
|
import "../chunk-ORMEWXMH.js";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
3
|
import { Skeleton } from "./skeleton.js";
|
|
3
4
|
function PageSkeleton({ rows = 5, padded = true }) {
|
|
4
|
-
return /* @__PURE__ */
|
|
5
|
+
return /* @__PURE__ */ jsxs("div", { className: `space-y-6 ${padded ? "p-6" : ""}`, children: [
|
|
6
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
|
|
7
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-7 w-48" }),
|
|
8
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-9 w-28" })
|
|
9
|
+
] }),
|
|
10
|
+
/* @__PURE__ */ jsxs("div", { className: "border border-stroke-default rounded-(--radius-card) overflow-hidden", children: [
|
|
11
|
+
/* @__PURE__ */ jsxs("div", { className: "bg-surface-raised border-b border-stroke-default px-4 py-3 flex gap-4", children: [
|
|
12
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-32" }),
|
|
13
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-24" }),
|
|
14
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-20" })
|
|
15
|
+
] }),
|
|
16
|
+
Array.from({ length: rows }).map((_, i) => /* @__PURE__ */ jsxs("div", { className: "px-4 py-3.5 flex gap-4 items-center border-b border-stroke-subtle last:border-0", children: [
|
|
17
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-40" }),
|
|
18
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-28" }),
|
|
19
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-16" }),
|
|
20
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-20 ml-auto" })
|
|
21
|
+
] }, i))
|
|
22
|
+
] })
|
|
23
|
+
] });
|
|
5
24
|
}
|
|
6
25
|
function CardsSkeleton({ count = 4, padded = true }) {
|
|
7
|
-
return /* @__PURE__ */
|
|
26
|
+
return /* @__PURE__ */ jsxs("div", { className: `space-y-6 ${padded ? "p-6" : ""}`, children: [
|
|
27
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-7 w-48" }),
|
|
28
|
+
/* @__PURE__ */ jsx("div", { className: "grid grid-cols-2 lg:grid-cols-4 gap-4", children: Array.from({ length: count }).map((_, i) => /* @__PURE__ */ jsxs("div", { className: "border border-stroke-default rounded-(--radius-card) p-4 space-y-3", children: [
|
|
29
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-4 w-24" }),
|
|
30
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-8 w-32" }),
|
|
31
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-3 w-20" })
|
|
32
|
+
] }, i)) }),
|
|
33
|
+
/* @__PURE__ */ jsx("div", { className: "grid grid-cols-1 lg:grid-cols-2 gap-4", children: Array.from({ length: 2 }).map((_, i) => /* @__PURE__ */ jsxs("div", { className: "border border-stroke-default rounded-(--radius-card) p-4 space-y-3", children: [
|
|
34
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-5 w-32" }),
|
|
35
|
+
/* @__PURE__ */ jsx(Skeleton, { className: "h-32 w-full" })
|
|
36
|
+
] }, i)) })
|
|
37
|
+
] });
|
|
8
38
|
}
|
|
9
39
|
export {
|
|
10
40
|
CardsSkeleton,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import "../chunk-ORMEWXMH.js";
|
|
3
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
4
|
import Link from "next/link";
|
|
4
5
|
import { usePathname } from "next/navigation";
|
|
5
6
|
function isActive(tab, pathname) {
|
|
@@ -18,37 +19,49 @@ function tabClass(active) {
|
|
|
18
19
|
].join(" ");
|
|
19
20
|
}
|
|
20
21
|
function TabContent({ tab, active }) {
|
|
21
|
-
return /* @__PURE__ */
|
|
22
|
-
"
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
23
|
+
tab.ghost && /* @__PURE__ */ jsx("span", { title: "Rota fantasma em valida\xE7\xE3o", children: "\u{1F47B}" }),
|
|
24
|
+
tab.label,
|
|
25
|
+
tab.soon && /* @__PURE__ */ jsx("span", { className: "text-[10px] font-medium px-1.5 py-0.5 rounded [background:var(--page-tabs-soon-bg)] [color:var(--page-tabs-soon-text)]", children: "em breve" }),
|
|
26
|
+
tab.dot && /* @__PURE__ */ jsxs("span", { className: "inline-flex items-center gap-1 px-1.5 py-0.5 rounded-full text-[10px] font-medium leading-none [background:var(--page-tabs-dot-bg)] [color:var(--page-tabs-dot-text)]", children: [
|
|
27
|
+
/* @__PURE__ */ jsx("span", { className: "w-1.5 h-1.5 rounded-full shrink-0 [background:var(--page-tabs-dot-indicator)]" }),
|
|
28
|
+
"aberto"
|
|
29
|
+
] }),
|
|
30
|
+
tab.count != null && tab.count > 0 && /* @__PURE__ */ jsx("span", { className: [
|
|
31
|
+
"inline-flex items-center justify-center min-w-[18px] h-[18px] px-1",
|
|
32
|
+
"rounded-full text-[11px] font-semibold",
|
|
33
|
+
active ? "[background:var(--page-tabs-count-bg-active)] [color:var(--page-tabs-count-text-active)]" : "[background:var(--page-tabs-count-bg)] [color:var(--page-tabs-count-text)]"
|
|
34
|
+
].join(" "), children: tab.count > 99 ? "99+" : tab.count })
|
|
35
|
+
] });
|
|
26
36
|
}
|
|
27
37
|
function PageTabs({ tabs, trailing, value, onChange }) {
|
|
28
38
|
const pathname = usePathname();
|
|
29
39
|
const controlled = onChange !== void 0;
|
|
30
|
-
return /* @__PURE__ */
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
40
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex items-center [background:var(--page-tabs-bg)] [border-bottom:1px_solid_var(--page-tabs-border)]", children: [
|
|
41
|
+
/* @__PURE__ */ jsx("nav", { className: "flex flex-1 overflow-x-auto scrollbar-none px-4 sm:px-6 lg:px-8", role: controlled ? "tablist" : void 0, children: tabs.map((tab) => {
|
|
42
|
+
var _a, _b;
|
|
43
|
+
const active = controlled ? tab.value === value : isActive(tab, pathname);
|
|
44
|
+
if (controlled) {
|
|
45
|
+
return /* @__PURE__ */ jsx(
|
|
46
|
+
"button",
|
|
47
|
+
{
|
|
48
|
+
type: "button",
|
|
49
|
+
role: "tab",
|
|
50
|
+
"aria-selected": active,
|
|
51
|
+
onClick: () => {
|
|
52
|
+
var _a2;
|
|
53
|
+
return onChange == null ? void 0 : onChange((_a2 = tab.value) != null ? _a2 : "");
|
|
54
|
+
},
|
|
55
|
+
className: tabClass(active),
|
|
56
|
+
children: /* @__PURE__ */ jsx(TabContent, { tab, active })
|
|
44
57
|
},
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
|
|
58
|
+
(_a = tab.value) != null ? _a : tab.label
|
|
59
|
+
);
|
|
60
|
+
}
|
|
61
|
+
return /* @__PURE__ */ jsx(Link, { href: (_b = tab.href) != null ? _b : "#", className: tabClass(active), children: /* @__PURE__ */ jsx(TabContent, { tab, active }) }, tab.href);
|
|
62
|
+
}) }),
|
|
63
|
+
trailing && /* @__PURE__ */ jsx("div", { className: "hidden sm:flex shrink-0 items-center pr-4 sm:pr-6 lg:pr-8", children: trailing })
|
|
64
|
+
] });
|
|
52
65
|
}
|
|
53
66
|
export {
|
|
54
67
|
PageTabs
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import "../chunk-ORMEWXMH.js";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
3
|
import { forwardRef } from "react";
|
|
3
4
|
import { ChevronLeft, ChevronRight } from "lucide-react";
|
|
4
5
|
function range(start, end) {
|
|
@@ -41,39 +42,43 @@ const Pagination = forwardRef(function Pagination2({
|
|
|
41
42
|
const items = getRange(page, totalPages, siblings, boundaries);
|
|
42
43
|
const canPrev = page > 1;
|
|
43
44
|
const canNext = page < totalPages;
|
|
44
|
-
return /* @__PURE__ */
|
|
45
|
-
"
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
{
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
{
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
45
|
+
return /* @__PURE__ */ jsx("nav", { ref, role: "navigation", "aria-label": "Pagina\xE7\xE3o", className, children: /* @__PURE__ */ jsxs("ul", { className: "flex items-center gap-1", children: [
|
|
46
|
+
/* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
|
|
47
|
+
"button",
|
|
48
|
+
{
|
|
49
|
+
type: "button",
|
|
50
|
+
disabled: !canPrev,
|
|
51
|
+
onClick: () => canPrev && onChange(page - 1),
|
|
52
|
+
"aria-label": "P\xE1gina anterior",
|
|
53
|
+
className: [baseBtn, "text-fg-secondary hover:bg-surface-raised"].join(" "),
|
|
54
|
+
children: /* @__PURE__ */ jsx(ChevronLeft, { size: 16 })
|
|
55
|
+
}
|
|
56
|
+
) }),
|
|
57
|
+
items.map((it, idx) => /* @__PURE__ */ jsx("li", { children: typeof it === "string" ? /* @__PURE__ */ jsx("span", { className: "inline-flex items-center justify-center min-w-9 h-9 text-fg-muted text-label", children: "\u2026" }) : /* @__PURE__ */ jsx(
|
|
58
|
+
"button",
|
|
59
|
+
{
|
|
60
|
+
type: "button",
|
|
61
|
+
onClick: () => onChange(it),
|
|
62
|
+
"aria-current": it === page ? "page" : void 0,
|
|
63
|
+
className: [
|
|
64
|
+
baseBtn,
|
|
65
|
+
it === page ? "bg-brand-primary text-brand-on-primary" : "text-fg-secondary hover:bg-surface-raised"
|
|
66
|
+
].join(" "),
|
|
67
|
+
children: it
|
|
68
|
+
}
|
|
69
|
+
) }, `${it}-${idx}`)),
|
|
70
|
+
/* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(
|
|
71
|
+
"button",
|
|
72
|
+
{
|
|
73
|
+
type: "button",
|
|
74
|
+
disabled: !canNext,
|
|
75
|
+
onClick: () => canNext && onChange(page + 1),
|
|
76
|
+
"aria-label": "Pr\xF3xima p\xE1gina",
|
|
77
|
+
className: [baseBtn, "text-fg-secondary hover:bg-surface-raised"].join(" "),
|
|
78
|
+
children: /* @__PURE__ */ jsx(ChevronRight, { size: 16 })
|
|
79
|
+
}
|
|
80
|
+
) })
|
|
81
|
+
] }) });
|
|
77
82
|
});
|
|
78
83
|
export {
|
|
79
84
|
Pagination
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import "../chunk-ORMEWXMH.js";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
3
|
import { Lock, AlertTriangle } from "lucide-react";
|
|
3
4
|
const STYLES = {
|
|
4
5
|
warn: {
|
|
@@ -19,7 +20,7 @@ const STYLES = {
|
|
|
19
20
|
}
|
|
20
21
|
};
|
|
21
22
|
function DefaultLink({ href, className, children }) {
|
|
22
|
-
return /* @__PURE__ */
|
|
23
|
+
return /* @__PURE__ */ jsx("a", { href, className, children });
|
|
23
24
|
}
|
|
24
25
|
function PaywallBanner({
|
|
25
26
|
variant,
|
|
@@ -34,8 +35,23 @@ function PaywallBanner({
|
|
|
34
35
|
const s = STYLES[variant];
|
|
35
36
|
const Icon = s.Icon;
|
|
36
37
|
const ctaClass = ["text-caption font-semibold px-3 py-1.5 rounded-(--radius-card) shrink-0 transition-colors", s.cta].join(" ");
|
|
37
|
-
const cta = ctaHref ? /* @__PURE__ */
|
|
38
|
-
|
|
38
|
+
const cta = ctaHref ? /* @__PURE__ */ jsxs(LinkAs, { href: ctaHref, className: ctaClass, children: [
|
|
39
|
+
ctaLabel,
|
|
40
|
+
" \u2192"
|
|
41
|
+
] }) : onCta ? /* @__PURE__ */ jsxs("button", { type: "button", onClick: onCta, className: ctaClass, children: [
|
|
42
|
+
ctaLabel,
|
|
43
|
+
" \u2192"
|
|
44
|
+
] }) : null;
|
|
45
|
+
return /* @__PURE__ */ jsxs("div", { className: ["rounded-(--radius-card) border px-4 py-3 flex flex-col sm:flex-row sm:items-center sm:justify-between gap-2", s.container, className].join(" "), children: [
|
|
46
|
+
/* @__PURE__ */ jsxs("div", { className: "flex items-start gap-2.5 min-w-0", children: [
|
|
47
|
+
/* @__PURE__ */ jsx(Icon, { size: 18, className: ["shrink-0 mt-0.5", s.iconColor].join(" ") }),
|
|
48
|
+
/* @__PURE__ */ jsxs("div", { className: "min-w-0", children: [
|
|
49
|
+
/* @__PURE__ */ jsx("p", { className: ["text-label font-semibold", s.title].join(" "), children: title }),
|
|
50
|
+
/* @__PURE__ */ jsx("div", { className: ["text-caption mt-0.5", s.desc].join(" "), children: description })
|
|
51
|
+
] })
|
|
52
|
+
] }),
|
|
53
|
+
cta
|
|
54
|
+
] });
|
|
39
55
|
}
|
|
40
56
|
export {
|
|
41
57
|
PaywallBanner
|
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
__spreadProps,
|
|
5
5
|
__spreadValues
|
|
6
6
|
} from "../chunk-ORMEWXMH.js";
|
|
7
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
7
8
|
import { Lock, Sparkles } from "lucide-react";
|
|
8
9
|
import { ICON_MAP } from "./empty-state.js";
|
|
9
10
|
import { Modal } from "./modal.js";
|
|
@@ -27,26 +28,35 @@ function PaywallContent({
|
|
|
27
28
|
var _a;
|
|
28
29
|
const Icon = (_a = ICON_MAP[icon]) != null ? _a : Lock;
|
|
29
30
|
const isTrial = reason === "trial_value";
|
|
30
|
-
const cta = ctaHref && Link ? /* @__PURE__ */
|
|
31
|
-
return /* @__PURE__ */
|
|
31
|
+
const cta = ctaHref && Link ? /* @__PURE__ */ jsx(Link, { href: ctaHref, className: CTA_CLASS, onClick: onCta, children: ctaLabel }) : ctaHref ? /* @__PURE__ */ jsx("a", { href: ctaHref, className: CTA_CLASS, onClick: onCta, children: ctaLabel }) : /* @__PURE__ */ jsx("button", { type: "button", className: CTA_CLASS, onClick: onCta, children: ctaLabel });
|
|
32
|
+
return /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center text-center px-2", children: [
|
|
33
|
+
/* @__PURE__ */ jsxs("div", { className: "relative mb-4 text-fg-secondary", children: [
|
|
34
|
+
/* @__PURE__ */ jsx(Icon, { size: 52, strokeWidth: 1.25 }),
|
|
35
|
+
/* @__PURE__ */ jsx("span", { className: `absolute -bottom-1 -right-1 flex h-6 w-6 items-center justify-center rounded-full ${isTrial ? "bg-amber-500 text-white" : "bg-brand-primary text-brand-on-primary"}`, children: isTrial ? /* @__PURE__ */ jsx(Sparkles, { size: 12, strokeWidth: 2.5 }) : /* @__PURE__ */ jsx(Lock, { size: 12, strokeWidth: 2.5 }) })
|
|
36
|
+
] }),
|
|
37
|
+
/* @__PURE__ */ jsx("span", { className: `inline-flex items-center rounded-full px-2.5 py-1 text-caption font-medium ${isTrial ? "bg-amber-100 text-amber-900" : "bg-surface-raised text-fg-secondary"}`, children: planLineText(reason, planLabel) }),
|
|
38
|
+
/* @__PURE__ */ jsx("p", { className: "text-body font-semibold text-fg-primary mt-3 mb-1.5", children: title }),
|
|
39
|
+
description && /* @__PURE__ */ jsx("p", { className: "text-label text-fg-muted max-w-sm leading-relaxed mb-5", children: description }),
|
|
40
|
+
/* @__PURE__ */ jsx("div", { className: "w-full max-w-xs", children: cta })
|
|
41
|
+
] });
|
|
32
42
|
}
|
|
33
43
|
function PaywallState(_a) {
|
|
34
44
|
var _b = _a, { className = "" } = _b, content = __objRest(_b, ["className"]);
|
|
35
|
-
return /* @__PURE__ */
|
|
45
|
+
return /* @__PURE__ */ jsx(
|
|
36
46
|
"div",
|
|
37
47
|
{
|
|
38
|
-
className: ["flex flex-col items-center justify-center min-h-[320px] flex-1 py-10", className].filter(Boolean).join(" ")
|
|
39
|
-
|
|
40
|
-
|
|
48
|
+
className: ["flex flex-col items-center justify-center min-h-[320px] flex-1 py-10", className].filter(Boolean).join(" "),
|
|
49
|
+
children: /* @__PURE__ */ jsx(PaywallContent, __spreadValues({}, content))
|
|
50
|
+
}
|
|
41
51
|
);
|
|
42
52
|
}
|
|
43
53
|
function PaywallModal(_c) {
|
|
44
54
|
var _d = _c, { open, onClose } = _d, content = __objRest(_d, ["open", "onClose"]);
|
|
45
|
-
return /* @__PURE__ */
|
|
55
|
+
return /* @__PURE__ */ jsx(Modal, { open, onClose, size: "sm", children: /* @__PURE__ */ jsx("div", { className: "py-2", children: /* @__PURE__ */ jsx(PaywallContent, __spreadProps(__spreadValues({}, content), { onCta: () => {
|
|
46
56
|
var _a;
|
|
47
57
|
(_a = content.onCta) == null ? void 0 : _a.call(content);
|
|
48
58
|
onClose();
|
|
49
|
-
} }))));
|
|
59
|
+
} })) }) });
|
|
50
60
|
}
|
|
51
61
|
export {
|
|
52
62
|
PaywallContent,
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import "../chunk-ORMEWXMH.js";
|
|
2
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
3
|
function PhoneFrame({ children, className = "" }) {
|
|
3
|
-
return /* @__PURE__ */
|
|
4
|
+
return /* @__PURE__ */ jsx(
|
|
4
5
|
"div",
|
|
5
6
|
{
|
|
6
7
|
className: [
|
|
@@ -8,9 +9,9 @@ function PhoneFrame({ children, className = "" }) {
|
|
|
8
9
|
"relative rounded-[2.5rem] border-[6px] border-(--text-primary)",
|
|
9
10
|
"bg-white overflow-hidden shadow-2xl",
|
|
10
11
|
className
|
|
11
|
-
].filter(Boolean).join(" ")
|
|
12
|
-
|
|
13
|
-
|
|
12
|
+
].filter(Boolean).join(" "),
|
|
13
|
+
children: /* @__PURE__ */ jsx("div", { className: "h-full overflow-y-auto overflow-x-hidden scrollbar-none", children })
|
|
14
|
+
}
|
|
14
15
|
);
|
|
15
16
|
}
|
|
16
17
|
export {
|