@olwiba/ui 0.2.24 → 0.2.26
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/content/docs/app/app-shell.mdx +71 -0
- package/content/docs/app/auth-section.mdx +73 -0
- package/content/docs/app/billing-panel.mdx +38 -0
- package/content/docs/app/empty-state.mdx +47 -0
- package/content/docs/app/error-page.mdx +31 -0
- package/content/docs/app/index.mdx +13 -0
- package/content/docs/app/meta.json +4 -0
- package/content/docs/app/onboarding-wizard.mdx +41 -0
- package/content/docs/app/settings-section.mdx +37 -0
- package/content/docs/app/team-members-panel.mdx +35 -0
- package/content/docs/app/update-banner.mdx +43 -0
- package/content/docs/components/activity-feed.mdx +42 -0
- package/content/docs/components/chart.mdx +47 -0
- package/content/docs/components/command-menu.mdx +41 -0
- package/content/docs/components/confirm-dialog.mdx +26 -0
- package/content/docs/components/context-menu.mdx +26 -0
- package/content/docs/components/data-table.mdx +40 -0
- package/content/docs/components/dock.mdx +26 -0
- package/content/docs/components/feature-card.mdx +26 -0
- package/content/docs/components/file-upload.mdx +35 -0
- package/content/docs/components/full-page-spinner.mdx +44 -0
- package/content/docs/components/glass-card.mdx +26 -0
- package/content/docs/components/image-card.mdx +26 -0
- package/content/docs/components/index.mdx +49 -0
- package/content/docs/components/load-more.mdx +34 -0
- package/content/docs/components/meta.json +35 -0
- package/content/docs/components/notifications-popover.mdx +34 -0
- package/content/docs/components/notify.mdx +40 -0
- package/content/docs/components/olwiba-ui-context.mdx +69 -0
- package/content/docs/components/page-header.mdx +42 -0
- package/content/docs/components/pricing-card.mdx +26 -0
- package/content/docs/components/register-hotkeys.mdx +50 -0
- package/content/docs/components/root-error-fallback.mdx +39 -0
- package/content/docs/components/spotlight.mdx +26 -0
- package/content/docs/components/stat-card.mdx +26 -0
- package/content/docs/components/suspensed.mdx +42 -0
- package/content/docs/components/testimonial-card.mdx +26 -0
- package/content/docs/components/theme-color-updater.mdx +40 -0
- package/content/docs/components/theme-switch-minimal.mdx +32 -0
- package/content/docs/components/version-banner.mdx +44 -0
- package/content/docs/email/action-email.mdx +62 -0
- package/content/docs/email/email-layout.mdx +58 -0
- package/content/docs/email/email-link-fallback.mdx +46 -0
- package/content/docs/email/index.mdx +32 -0
- package/content/docs/email/meta.json +10 -0
- package/content/docs/email/notice-email.mdx +51 -0
- package/content/docs/hooks/index.mdx +21 -0
- package/content/docs/hooks/meta.json +16 -0
- package/content/docs/hooks/use-confirm.mdx +81 -0
- package/content/docs/hooks/use-controlled-open.mdx +53 -0
- package/content/docs/hooks/use-copy-to-clipboard.mdx +26 -0
- package/content/docs/hooks/use-debounce.mdx +26 -0
- package/content/docs/hooks/use-intersection-observer.mdx +26 -0
- package/content/docs/hooks/use-local-storage.mdx +26 -0
- package/content/docs/hooks/use-media-query.mdx +26 -0
- package/content/docs/hooks/use-mounted.mdx +39 -0
- package/content/docs/hooks/use-pagination.mdx +26 -0
- package/content/docs/hooks/use-scrolled-past.mdx +44 -0
- package/content/docs/index.mdx +68 -0
- package/content/docs/marketing/contact-section.mdx +16 -0
- package/content/docs/marketing/cta-section.mdx +31 -0
- package/content/docs/marketing/faq-section.mdx +16 -0
- package/content/docs/marketing/features-section.mdx +23 -0
- package/content/docs/marketing/footer.mdx +16 -0
- package/content/docs/marketing/hero-section.mdx +16 -0
- package/content/docs/marketing/index.mdx +22 -0
- package/content/docs/marketing/meta.json +20 -0
- package/content/docs/marketing/navbar.mdx +16 -0
- package/content/docs/marketing/newsletter-section.mdx +16 -0
- package/content/docs/marketing/post-list.mdx +32 -0
- package/content/docs/marketing/pricing-section.mdx +16 -0
- package/content/docs/marketing/stats-section.mdx +16 -0
- package/content/docs/marketing/steps-section.mdx +60 -0
- package/content/docs/marketing/team-section.mdx +16 -0
- package/content/docs/marketing/testimonials-section.mdx +16 -0
- package/content/docs/mechanics/carousel.mdx +42 -0
- package/content/docs/mechanics/index.mdx +11 -0
- package/content/docs/mechanics/meta.json +4 -0
- package/content/docs/mechanics/sortable.mdx +44 -0
- package/content/docs/meta.json +4 -0
- package/content/docs/motion/animated-swap.mdx +75 -0
- package/content/docs/motion/count-up.mdx +31 -0
- package/content/docs/motion/fade-in.mdx +34 -0
- package/content/docs/motion/index.mdx +12 -0
- package/content/docs/motion/meta.json +4 -0
- package/content/docs/motion/page-transition.mdx +29 -0
- package/content/docs/motion/stagger-children.mdx +31 -0
- package/content/docs/overlays/index.mdx +9 -0
- package/content/docs/overlays/meta.json +4 -0
- package/content/docs/overlays/overlay.mdx +60 -0
- package/content/docs/overlays/underlay.mdx +56 -0
- package/dist/email/index.d.ts +8 -1
- package/dist/email/index.js +3 -3
- package/dist/email/index.js.map +1 -1
- package/dist/index.d.ts +51 -3
- package/dist/index.js +40 -16
- package/dist/index.js.map +1 -1
- package/docs-manifest.json +253 -0
- package/package.json +17 -9
- package/site/demos/action-email.tsx +6 -0
- package/site/demos/activity-feed.tsx +42 -0
- package/site/demos/animated-swap.tsx +42 -0
- package/site/demos/app-shell.tsx +47 -0
- package/site/demos/app-ui-page.tsx +9 -0
- package/site/demos/application-sidebar-block.tsx +9 -0
- package/site/demos/auth-section.tsx +15 -0
- package/site/demos/auth-split-block.tsx +9 -0
- package/site/demos/billing-page.tsx +157 -0
- package/site/demos/billing-panel.tsx +26 -0
- package/site/demos/carousel.tsx +34 -0
- package/site/demos/chart.tsx +55 -0
- package/site/demos/command-menu.tsx +39 -0
- package/site/demos/confirm-dialog.tsx +27 -0
- package/site/demos/contact-form-block.tsx +3 -0
- package/site/demos/contact-section.tsx +2 -0
- package/site/demos/context-menu.tsx +30 -0
- package/site/demos/count-up.tsx +23 -0
- package/site/demos/cta-section.tsx +6 -0
- package/site/demos/dashboard-overview-block.tsx +9 -0
- package/site/demos/dashboard-shell-block.tsx +10 -0
- package/site/demos/data-table.tsx +47 -0
- package/site/demos/demo-brand.tsx +23 -0
- package/site/demos/dock.tsx +20 -0
- package/site/demos/document-sidebar-block.tsx +9 -0
- package/site/demos/email-examples.tsx +58 -0
- package/site/demos/email-frame.tsx +50 -0
- package/site/demos/email-layout.tsx +6 -0
- package/site/demos/email-link-fallback.tsx +6 -0
- package/site/demos/email-previews.generated.ts +11 -0
- package/site/demos/empty-state-block.tsx +3 -0
- package/site/demos/empty-state.tsx +23 -0
- package/site/demos/error-page.tsx +5 -0
- package/site/demos/fade-in.tsx +18 -0
- package/site/demos/faq-section.tsx +6 -0
- package/site/demos/feature-card.tsx +13 -0
- package/site/demos/features-section.tsx +6 -0
- package/site/demos/file-upload.tsx +16 -0
- package/site/demos/footer.tsx +42 -0
- package/site/demos/full-page-spinner.tsx +9 -0
- package/site/demos/glass-card.tsx +14 -0
- package/site/demos/glow-effect.tsx +3 -0
- package/site/demos/gradient-background.tsx +3 -0
- package/site/demos/grid-pattern.tsx +3 -0
- package/site/demos/hero-section.tsx +6 -0
- package/site/demos/image-card.tsx +17 -0
- package/site/demos/login-block.tsx +9 -0
- package/site/demos/marketing-cta-block.tsx +3 -0
- package/site/demos/marketing-demo-data.tsx +114 -0
- package/site/demos/marketing-faq-block.tsx +3 -0
- package/site/demos/marketing-features-block.tsx +3 -0
- package/site/demos/marketing-footer-block.tsx +3 -0
- package/site/demos/marketing-hero-block.tsx +10 -0
- package/site/demos/marketing-nav-block.tsx +3 -0
- package/site/demos/marketing-newsletter-block.tsx +3 -0
- package/site/demos/marketing-page.tsx +52 -0
- package/site/demos/marketing-pricing-block.tsx +3 -0
- package/site/demos/marketing-stats-block.tsx +3 -0
- package/site/demos/marketing-team-block.tsx +3 -0
- package/site/demos/marketing-testimonials-block.tsx +3 -0
- package/site/demos/navbar.tsx +32 -0
- package/site/demos/newsletter-section.tsx +2 -0
- package/site/demos/noise-overlay.tsx +3 -0
- package/site/demos/not-found-block.tsx +3 -0
- package/site/demos/notice-email.tsx +6 -0
- package/site/demos/notifications-popover.tsx +27 -0
- package/site/demos/notify.tsx +44 -0
- package/site/demos/olwiba-ui-context.tsx +51 -0
- package/site/demos/onboarding-block.tsx +3 -0
- package/site/demos/onboarding-wizard.tsx +43 -0
- package/site/demos/overlay.tsx +72 -0
- package/site/demos/page-header.tsx +15 -0
- package/site/demos/page-transition.tsx +34 -0
- package/site/demos/post-list.tsx +24 -0
- package/site/demos/pricing-card.tsx +27 -0
- package/site/demos/pricing-section.tsx +6 -0
- package/site/demos/register-hotkeys.tsx +39 -0
- package/site/demos/root-error-fallback.tsx +28 -0
- package/site/demos/settings-layout-block.tsx +3 -0
- package/site/demos/settings-section.tsx +22 -0
- package/site/demos/sign-in-page.tsx +10 -0
- package/site/demos/sortable.tsx +30 -0
- package/site/demos/spotlight.tsx +29 -0
- package/site/demos/stagger-children.tsx +16 -0
- package/site/demos/stat-card.tsx +12 -0
- package/site/demos/stats-section.tsx +6 -0
- package/site/demos/steps-section.tsx +66 -0
- package/site/demos/suspensed.tsx +31 -0
- package/site/demos/team-members-panel.tsx +26 -0
- package/site/demos/team-section.tsx +2 -0
- package/site/demos/testimonial-card.tsx +17 -0
- package/site/demos/testimonials-section.tsx +6 -0
- package/site/demos/theme-color-updater.tsx +32 -0
- package/site/demos/theme-switch-minimal.tsx +10 -0
- package/site/demos/underlay.tsx +74 -0
- package/site/demos/update-banner.tsx +31 -0
- package/site/demos/use-copy-to-clipboard.tsx +21 -0
- package/site/demos/use-debounce.tsx +25 -0
- package/site/demos/use-intersection-observer.tsx +32 -0
- package/site/demos/use-local-storage.tsx +22 -0
- package/site/demos/use-media-query.tsx +31 -0
- package/site/demos/use-pagination.tsx +31 -0
- package/site/demos/user-profile-block.tsx +3 -0
- package/site/demos/version-banner.tsx +27 -0
- package/src/components/Chart.tsx +38 -7
- package/src/components/DataTable.tsx +56 -8
- package/src/components/Notify.tsx +32 -1
- package/src/email/EmailLinkFallback.tsx +7 -1
- package/src/email/index.ts +3 -0
- package/src/marketing/Footer.tsx +7 -1
package/dist/index.js
CHANGED
|
@@ -962,6 +962,7 @@ function DataTable({
|
|
|
962
962
|
selectable = false,
|
|
963
963
|
onSelectionChange,
|
|
964
964
|
pageSize = 10,
|
|
965
|
+
pagination,
|
|
965
966
|
toolbar,
|
|
966
967
|
onRowClick,
|
|
967
968
|
emptyMessage = "No results.",
|
|
@@ -988,8 +989,11 @@ function DataTable({
|
|
|
988
989
|
},
|
|
989
990
|
getCoreRowModel: getCoreRowModel(),
|
|
990
991
|
getSortedRowModel: getSortedRowModel(),
|
|
991
|
-
|
|
992
|
-
|
|
992
|
+
// Server-paginated tables must not slice: `data` is already the page, and
|
|
993
|
+
// running the client model over it would paginate a single page again.
|
|
994
|
+
...pageSize > 0 && !pagination ? { getPaginationRowModel: getPaginationRowModel() } : {},
|
|
995
|
+
...pagination ? { manualPagination: true } : {},
|
|
996
|
+
initialState: pageSize > 0 && !pagination ? { pagination: { pageSize } } : void 0,
|
|
993
997
|
enableRowSelection: selectable
|
|
994
998
|
});
|
|
995
999
|
React21.useEffect(() => {
|
|
@@ -997,6 +1001,12 @@ function DataTable({
|
|
|
997
1001
|
onSelectionChange(table.getSelectedRowModel().rows.map((r) => r.original));
|
|
998
1002
|
}, [rowSelection]);
|
|
999
1003
|
const rows = table.getRowModel().rows;
|
|
1004
|
+
const canPrevious = pagination ? pagination.hasPrevious ?? pagination.pageIndex > 0 : table.getCanPreviousPage();
|
|
1005
|
+
const canNext = pagination ? pagination.hasNext ?? (pagination.pageCount !== void 0 && pagination.pageIndex < pagination.pageCount - 1) : table.getCanNextPage();
|
|
1006
|
+
const goPrevious = () => pagination ? pagination.onPageChange(pagination.pageIndex - 1) : table.previousPage();
|
|
1007
|
+
const goNext = () => pagination ? pagination.onPageChange(pagination.pageIndex + 1) : table.nextPage();
|
|
1008
|
+
const showPager = pagination ? canPrevious || canNext : pageSize > 0 && table.getPageCount() > 1;
|
|
1009
|
+
const pageLabel = pagination ? pagination.pageCount !== void 0 ? `Page ${pagination.pageIndex + 1} of ${pagination.pageCount}` : `Page ${pagination.pageIndex + 1}` : `Page ${table.getState().pagination.pageIndex + 1} of ${table.getPageCount()}`;
|
|
1000
1010
|
return /* @__PURE__ */ jsxs("div", { className: cn$1("space-y-4", className), children: [
|
|
1001
1011
|
(searchKey || toolbar) && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-4", children: [
|
|
1002
1012
|
searchKey ? /* @__PURE__ */ jsxs("div", { className: "relative max-w-sm flex-1", children: [
|
|
@@ -1052,18 +1062,18 @@ function DataTable({
|
|
|
1052
1062
|
row.id
|
|
1053
1063
|
)) : /* @__PURE__ */ jsx(TableRow, { children: /* @__PURE__ */ jsx(TableCell, { colSpan: allColumns.length, className: "h-24 text-center text-muted-foreground", children: emptyMessage }) }) })
|
|
1054
1064
|
] }) }),
|
|
1055
|
-
(selectable ||
|
|
1065
|
+
(selectable || showPager) && /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between", children: [
|
|
1056
1066
|
/* @__PURE__ */ jsxs("p", { className: "text-sm text-muted-foreground", children: [
|
|
1057
1067
|
selectable && `${table.getFilteredSelectedRowModel().rows.length} of ${table.getFilteredRowModel().rows.length} selected`,
|
|
1058
|
-
selectable &&
|
|
1059
|
-
|
|
1068
|
+
selectable && showPager && " \xB7 ",
|
|
1069
|
+
showPager && pageLabel
|
|
1060
1070
|
] }),
|
|
1061
|
-
|
|
1062
|
-
/* @__PURE__ */ jsxs(Button, { variant: "outline", size: "sm", onClick:
|
|
1071
|
+
showPager && /* @__PURE__ */ jsxs("div", { className: "flex gap-2", children: [
|
|
1072
|
+
/* @__PURE__ */ jsxs(Button, { variant: "outline", size: "sm", onClick: goPrevious, disabled: !canPrevious, children: [
|
|
1063
1073
|
/* @__PURE__ */ jsx(ChevronLeft, { className: "size-4" }),
|
|
1064
1074
|
" Previous"
|
|
1065
1075
|
] }),
|
|
1066
|
-
/* @__PURE__ */ jsxs(Button, { variant: "outline", size: "sm", onClick:
|
|
1076
|
+
/* @__PURE__ */ jsxs(Button, { variant: "outline", size: "sm", onClick: goNext, disabled: !canNext, children: [
|
|
1067
1077
|
"Next ",
|
|
1068
1078
|
/* @__PURE__ */ jsx(ChevronRight, { className: "size-4" })
|
|
1069
1079
|
] })
|
|
@@ -4328,6 +4338,9 @@ function Chart({
|
|
|
4328
4338
|
height = 300,
|
|
4329
4339
|
grid = true,
|
|
4330
4340
|
legend,
|
|
4341
|
+
stacked = false,
|
|
4342
|
+
xTickFormatter,
|
|
4343
|
+
yDomain,
|
|
4331
4344
|
valueFormatter = (v) => String(v),
|
|
4332
4345
|
className
|
|
4333
4346
|
}) {
|
|
@@ -4370,12 +4383,13 @@ function Chart({
|
|
|
4370
4383
|
if (type === "bar") {
|
|
4371
4384
|
chart = /* @__PURE__ */ jsxs(BarChart, { data, barCategoryGap: "25%", children: [
|
|
4372
4385
|
gridEl,
|
|
4373
|
-
/* @__PURE__ */ jsx(XAxis, { dataKey: xKey, ...axisProps }),
|
|
4374
|
-
/* @__PURE__ */ jsx(YAxis, { ...axisProps, width: 48, tickFormatter: valueFormatter }),
|
|
4386
|
+
/* @__PURE__ */ jsx(XAxis, { dataKey: xKey, ...axisProps, tickFormatter: xTickFormatter }),
|
|
4387
|
+
/* @__PURE__ */ jsx(YAxis, { ...axisProps, width: 48, domain: yDomain, tickFormatter: valueFormatter }),
|
|
4375
4388
|
tooltip,
|
|
4376
4389
|
series.map((s, i) => /* @__PURE__ */ jsx(
|
|
4377
4390
|
Bar,
|
|
4378
4391
|
{
|
|
4392
|
+
stackId: stacked ? "stack" : void 0,
|
|
4379
4393
|
dataKey: s.key,
|
|
4380
4394
|
name: s.label ?? s.key,
|
|
4381
4395
|
fill: seriesColor(s, i),
|
|
@@ -4388,8 +4402,8 @@ function Chart({
|
|
|
4388
4402
|
} else if (type === "area") {
|
|
4389
4403
|
chart = /* @__PURE__ */ jsxs(AreaChart, { data, children: [
|
|
4390
4404
|
gridEl,
|
|
4391
|
-
/* @__PURE__ */ jsx(XAxis, { dataKey: xKey, ...axisProps }),
|
|
4392
|
-
/* @__PURE__ */ jsx(YAxis, { ...axisProps, width: 48, tickFormatter: valueFormatter }),
|
|
4405
|
+
/* @__PURE__ */ jsx(XAxis, { dataKey: xKey, ...axisProps, tickFormatter: xTickFormatter }),
|
|
4406
|
+
/* @__PURE__ */ jsx(YAxis, { ...axisProps, width: 48, domain: yDomain, tickFormatter: valueFormatter }),
|
|
4393
4407
|
tooltip,
|
|
4394
4408
|
series.map((s, i) => /* @__PURE__ */ jsx(
|
|
4395
4409
|
Area,
|
|
@@ -4397,10 +4411,11 @@ function Chart({
|
|
|
4397
4411
|
type: "monotone",
|
|
4398
4412
|
dataKey: s.key,
|
|
4399
4413
|
name: s.label ?? s.key,
|
|
4414
|
+
stackId: stacked ? "stack" : void 0,
|
|
4400
4415
|
stroke: seriesColor(s, i),
|
|
4401
4416
|
strokeWidth: 2,
|
|
4402
4417
|
fill: seriesColor(s, i),
|
|
4403
|
-
fillOpacity: 0.12,
|
|
4418
|
+
fillOpacity: stacked ? 0.35 : 0.12,
|
|
4404
4419
|
dot: false,
|
|
4405
4420
|
activeDot: { r: 4 }
|
|
4406
4421
|
},
|
|
@@ -4410,8 +4425,8 @@ function Chart({
|
|
|
4410
4425
|
} else {
|
|
4411
4426
|
chart = /* @__PURE__ */ jsxs(LineChart, { data, children: [
|
|
4412
4427
|
gridEl,
|
|
4413
|
-
/* @__PURE__ */ jsx(XAxis, { dataKey: xKey, ...axisProps }),
|
|
4414
|
-
/* @__PURE__ */ jsx(YAxis, { ...axisProps, width: 48, tickFormatter: valueFormatter }),
|
|
4428
|
+
/* @__PURE__ */ jsx(XAxis, { dataKey: xKey, ...axisProps, tickFormatter: xTickFormatter }),
|
|
4429
|
+
/* @__PURE__ */ jsx(YAxis, { ...axisProps, width: 48, domain: yDomain, tickFormatter: valueFormatter }),
|
|
4415
4430
|
tooltip,
|
|
4416
4431
|
series.map((s, i) => /* @__PURE__ */ jsx(
|
|
4417
4432
|
Line,
|
|
@@ -4638,9 +4653,18 @@ function NotificationToast({
|
|
|
4638
4653
|
] })
|
|
4639
4654
|
] }) });
|
|
4640
4655
|
}
|
|
4656
|
+
function defaultDuration(variant, hasAction) {
|
|
4657
|
+
if (variant === "error") return 1e4;
|
|
4658
|
+
if (variant === "warning") return 8e3;
|
|
4659
|
+
if (hasAction) return 8e3;
|
|
4660
|
+
return void 0;
|
|
4661
|
+
}
|
|
4641
4662
|
function notify(options) {
|
|
4642
4663
|
const { duration, ...toastProps } = options;
|
|
4643
|
-
|
|
4664
|
+
const resolved = duration ?? defaultDuration(toastProps.variant, Boolean(toastProps.action || toastProps.secondaryAction));
|
|
4665
|
+
return toast.custom((id) => /* @__PURE__ */ jsx(NotificationToast, { ...toastProps, onDismiss: () => toast.dismiss(id) }), {
|
|
4666
|
+
duration: resolved
|
|
4667
|
+
});
|
|
4644
4668
|
}
|
|
4645
4669
|
function NotificationsPopover({
|
|
4646
4670
|
notifications,
|