@spacesync/client 0.1.10 → 0.1.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/README.md +105 -13
  2. package/dist/analog-clock-picker.js +3 -11
  3. package/dist/analog-clock-picker.js.map +1 -1
  4. package/dist/booking-schedule-calendars.js +82 -19
  5. package/dist/booking-schedule-calendars.js.map +1 -1
  6. package/dist/booking-schedule.js +1 -1
  7. package/dist/booking-space-layout-picker.d.ts +1 -1
  8. package/dist/booking-space-layout-picker.js +8 -11
  9. package/dist/booking-space-layout-picker.js.map +1 -1
  10. package/dist/button-Iem7kbk0.d.ts +16 -0
  11. package/dist/chat-stick-to-bottom.js +0 -10
  12. package/dist/chat-stick-to-bottom.js.map +1 -1
  13. package/dist/chunk-2IZODKTR.js +116 -0
  14. package/dist/chunk-2IZODKTR.js.map +1 -0
  15. package/dist/chunk-2TT2ZGMT.js +21 -0
  16. package/dist/chunk-2TT2ZGMT.js.map +1 -0
  17. package/dist/chunk-3MAGTCCN.js +192 -0
  18. package/dist/chunk-3MAGTCCN.js.map +1 -0
  19. package/dist/chunk-56H7UFAW.js +237 -0
  20. package/dist/chunk-56H7UFAW.js.map +1 -0
  21. package/dist/{chunk-OTSA5ROL.js → chunk-5CUJZNUC.js} +16 -5
  22. package/dist/chunk-5CUJZNUC.js.map +1 -0
  23. package/dist/chunk-5HOK5JHR.js +60 -0
  24. package/dist/chunk-5HOK5JHR.js.map +1 -0
  25. package/dist/chunk-6VJQIBC3.js +715 -0
  26. package/dist/chunk-6VJQIBC3.js.map +1 -0
  27. package/dist/{chunk-H7EX6B6N.js → chunk-AHFRK6KP.js} +25 -7
  28. package/dist/chunk-AHFRK6KP.js.map +1 -0
  29. package/dist/chunk-BQVMO33N.js +133 -0
  30. package/dist/chunk-BQVMO33N.js.map +1 -0
  31. package/dist/chunk-CXXOKCLJ.js +37 -0
  32. package/dist/chunk-CXXOKCLJ.js.map +1 -0
  33. package/dist/chunk-EQLKSX4E.js +241 -0
  34. package/dist/chunk-EQLKSX4E.js.map +1 -0
  35. package/dist/chunk-FN4BWFDX.js +43 -0
  36. package/dist/chunk-FN4BWFDX.js.map +1 -0
  37. package/dist/chunk-HRHDOLWU.js +62 -0
  38. package/dist/chunk-HRHDOLWU.js.map +1 -0
  39. package/dist/chunk-HZB2EHEH.js +216 -0
  40. package/dist/chunk-HZB2EHEH.js.map +1 -0
  41. package/dist/chunk-IBGGQXTH.js +21 -0
  42. package/dist/chunk-IBGGQXTH.js.map +1 -0
  43. package/dist/chunk-JCEOU7BU.js +128 -0
  44. package/dist/chunk-JCEOU7BU.js.map +1 -0
  45. package/dist/{chunk-CKCXQBHQ.js → chunk-KXTYPZDK.js} +91 -19
  46. package/dist/chunk-KXTYPZDK.js.map +1 -0
  47. package/dist/{chunk-RV5PMZYZ.js → chunk-MBZAYH5D.js} +4 -18
  48. package/dist/chunk-MBZAYH5D.js.map +1 -0
  49. package/dist/chunk-NWVNYKND.js +153 -0
  50. package/dist/chunk-NWVNYKND.js.map +1 -0
  51. package/dist/chunk-PPMJZVR4.js +37 -0
  52. package/dist/chunk-PPMJZVR4.js.map +1 -0
  53. package/dist/chunk-SHMKDGFF.js +75 -0
  54. package/dist/chunk-SHMKDGFF.js.map +1 -0
  55. package/dist/chunk-T3SOBIYA.js +61 -0
  56. package/dist/chunk-T3SOBIYA.js.map +1 -0
  57. package/dist/chunk-TH5RASJS.js +97 -0
  58. package/dist/chunk-TH5RASJS.js.map +1 -0
  59. package/dist/{chunk-LUB7QWGU.js → chunk-VIJ2HWPZ.js} +5 -159
  60. package/dist/chunk-VIJ2HWPZ.js.map +1 -0
  61. package/dist/chunk-VQ63T7CJ.js +22 -0
  62. package/dist/chunk-VQ63T7CJ.js.map +1 -0
  63. package/dist/chunk-XDVGFHK4.js +50 -0
  64. package/dist/chunk-XDVGFHK4.js.map +1 -0
  65. package/dist/chunk-XI4BQY5T.js +188 -0
  66. package/dist/chunk-XI4BQY5T.js.map +1 -0
  67. package/dist/chunk-ZVWUPYSV.js +170 -0
  68. package/dist/chunk-ZVWUPYSV.js.map +1 -0
  69. package/dist/detail-page-header.js +1 -1
  70. package/dist/file-viewer-dialog.js +3 -9
  71. package/dist/file-viewer-dialog.js.map +1 -1
  72. package/dist/floor-switcher.js +5 -9
  73. package/dist/floor-switcher.js.map +1 -1
  74. package/dist/{layout-canvas-view-DOjyUNJH.d.ts → layout-canvas-view-C3u96xu4.d.ts} +5 -1
  75. package/dist/layout-canvas-view.d.ts +1 -1
  76. package/dist/layout-canvas-view.js +8 -11
  77. package/dist/lib/dateDisplay.d.ts +16 -1
  78. package/dist/lib/dateDisplay.js +1 -1
  79. package/dist/notification-sidebar-preview.js +1 -1
  80. package/dist/page-list-chrome.d.ts +3 -1
  81. package/dist/page-list-chrome.js +5 -3
  82. package/dist/page-list-loading.js +5 -3
  83. package/dist/page-list-loading.js.map +1 -1
  84. package/dist/platform-support-message-composer.js +2 -10
  85. package/dist/platform-support-message-composer.js.map +1 -1
  86. package/dist/sidebar-Dzvrjr69.d.ts +85 -0
  87. package/dist/styles/theme.css +52 -2
  88. package/dist/styles/theme.css.map +1 -1
  89. package/dist/support-presence-status.js +1 -1
  90. package/dist/theme-appearance-control.js +2 -1
  91. package/dist/theme-appearance-control.js.map +1 -1
  92. package/dist/ui/accordion.d.ts +9 -0
  93. package/dist/ui/accordion.js +4 -0
  94. package/dist/ui/accordion.js.map +1 -0
  95. package/dist/ui/calendar.d.ts +6 -0
  96. package/dist/ui/calendar.js +4 -0
  97. package/dist/ui/calendar.js.map +1 -0
  98. package/dist/ui/carousel.d.ts +22 -0
  99. package/dist/ui/carousel.js +5 -0
  100. package/dist/ui/carousel.js.map +1 -0
  101. package/dist/ui/chart.d.ts +42 -0
  102. package/dist/ui/chart.js +229 -0
  103. package/dist/ui/chart.js.map +1 -0
  104. package/dist/ui/command.d.ts +19 -0
  105. package/dist/ui/command.js +5 -0
  106. package/dist/ui/command.js.map +1 -0
  107. package/dist/ui/context-menu.d.ts +27 -0
  108. package/dist/ui/context-menu.js +4 -0
  109. package/dist/ui/context-menu.js.map +1 -0
  110. package/dist/ui/form.d.ts +27 -0
  111. package/dist/ui/form.js +5 -0
  112. package/dist/ui/form.js.map +1 -0
  113. package/dist/ui/input-otp.d.ts +13 -0
  114. package/dist/ui/input-otp.js +4 -0
  115. package/dist/ui/input-otp.js.map +1 -0
  116. package/dist/ui/menubar.d.ts +28 -0
  117. package/dist/ui/menubar.js +4 -0
  118. package/dist/ui/menubar.js.map +1 -0
  119. package/dist/ui/navigation-menu.d.ts +17 -0
  120. package/dist/ui/navigation-menu.js +4 -0
  121. package/dist/ui/navigation-menu.js.map +1 -0
  122. package/dist/ui/resizable.d.ts +10 -0
  123. package/dist/ui/resizable.js +4 -0
  124. package/dist/ui/resizable.js.map +1 -0
  125. package/dist/ui/sidebar.d.ts +7 -0
  126. package/dist/ui/sidebar.js +9 -0
  127. package/dist/ui/sidebar.js.map +1 -0
  128. package/dist/ui.d.ts +36 -270
  129. package/dist/ui.js +2471 -6
  130. package/dist/ui.js.map +1 -1
  131. package/package.json +15 -5
  132. package/dist/chunk-CKCXQBHQ.js.map +0 -1
  133. package/dist/chunk-F7MU5T46.js +0 -5146
  134. package/dist/chunk-F7MU5T46.js.map +0 -1
  135. package/dist/chunk-H7EX6B6N.js.map +0 -1
  136. package/dist/chunk-LUB7QWGU.js.map +0 -1
  137. package/dist/chunk-OTSA5ROL.js.map +0 -1
  138. package/dist/chunk-PBNBLCC2.js +0 -84
  139. package/dist/chunk-PBNBLCC2.js.map +0 -1
  140. package/dist/chunk-RV5PMZYZ.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/shell/page-list-sticky-columns.ts","../src/shell/page-list-chrome.tsx"],"names":[],"mappings":"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","file":"chunk-H7EX6B6N.js","sourcesContent":["import { cn } from \"../ui/utils\";\n\nexport type PageListColumnFixed = \"left\" | \"right\";\n\nexport type PageListStickyColumnOptions = {\n side: PageListColumnFixed;\n layer: \"head\" | \"body\";\n sortActive?: boolean;\n};\n\nconst leftEdgeShadow = cn(\n \"after:pointer-events-none after:absolute after:inset-y-0 after:right-0 after:w-3 after:translate-x-full\",\n \"after:bg-gradient-to-r after:from-black/[0.06] after:to-transparent dark:after:from-black/20\",\n \"after:opacity-0 after:transition-opacity\",\n \"group-data-[scrolled-x=true]/table-scroll:after:opacity-100\",\n);\n\nconst rightEdgeShadow = cn(\n \"before:pointer-events-none before:absolute before:inset-y-0 before:left-0 before:w-3 before:-translate-x-full\",\n \"before:bg-gradient-to-l before:from-black/[0.06] before:to-transparent dark:before:from-black/20\",\n \"before:opacity-0 before:transition-opacity\",\n \"group-data-[scrolled-x-end=false]/table-scroll:before:opacity-100\",\n);\n\n/** Sticky left/right column classes for horizontally scrollable list tables (antd-style). */\nexport function pageListStickyColumnClass({\n side,\n layer,\n sortActive = false,\n}: PageListStickyColumnOptions): string {\n const isHead = layer === \"head\";\n const pin = side === \"left\" ? \"left-0\" : \"right-0\";\n const edgeShadow = side === \"left\" ? leftEdgeShadow : rightEdgeShadow;\n\n return cn(\n \"relative sticky\",\n pin,\n isHead ? \"top-0 z-[3]\" : \"z-[1]\",\n sortActive\n ? \"bg-blue-50/80 dark:bg-blue-950/40\"\n : isHead\n ? \"bg-card\"\n : \"bg-card group-hover:bg-accent\",\n edgeShadow,\n );\n}\n\n/** Use on tables with fixed columns instead of border-collapse. */\nexport const pageListTableWithFixedColumnsClass = \"border-separate border-spacing-0\";\n","import { useEffect, useRef, type ButtonHTMLAttributes, type MouseEvent, type ReactNode } from \"react\";\nimport { ChevronDown, ChevronUp, ChevronsUpDown } from \"lucide-react\";\nimport type { SortDirection } from \"../hooks/use-client-sort\";\nimport {\n pageListStickyColumnClass,\n pageListTableWithFixedColumnsClass,\n type PageListColumnFixed,\n} from \"./page-list-sticky-columns\";\nexport {\n pageListStickyColumnClass,\n pageListTableWithFixedColumnsClass,\n type PageListColumnFixed,\n} from \"./page-list-sticky-columns\";\nimport {\n shellTopBarNeutralActionDataAttr,\n shellTopBarOutlineButtonClass,\n shellTopBarPrimaryButtonClass,\n} from \"./shell-top-bar-chrome\";\nimport { cn } from \"../ui/utils\";\nimport { Button } from \"../ui/button\";\nimport { SearchField } from \"../ui/search-field\";\nimport {\n Pagination,\n PaginationContent,\n PaginationEllipsis,\n PaginationItem,\n PaginationLink,\n PaginationNext,\n PaginationPrevious,\n} from \"../ui/pagination\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"../ui/select\";\nimport type { UseClientPaginationResult } from \"../hooks/use-client-pagination\";\n\n/** Fills the app main pane (white card on grey chrome). */\nexport function PageListRoot({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div className={cn(\"h-full flex flex-col min-h-0 bg-card\", className)} {...props} />\n );\n}\n\n/** White header block under the app chrome. */\nexport function PageListHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n className={cn(\"shrink-0 bg-card border-b border-border px-5 pt-4 pb-4\", className)}\n {...props}\n />\n );\n}\n\nexport function PageListTitleRow({\n title,\n subtitle,\n actions,\n titleAddon,\n}: {\n title: ReactNode;\n subtitle?: string;\n actions?: ReactNode;\n /** Rendered before the title (e.g. live indicator). */\n titleAddon?: ReactNode;\n}) {\n return (\n <div className=\"flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between\">\n <div>\n {titleAddon ? (\n <div className=\"flex items-center gap-2 mb-1\">\n {titleAddon}\n <h1 className=\"text-base font-semibold text-foreground\">{title}</h1>\n </div>\n ) : (\n <h1 className=\"text-base font-semibold text-foreground\">{title}</h1>\n )}\n {subtitle ? <p className=\"text-xs text-muted-foreground mt-1\">{subtitle}</p> : null}\n </div>\n {actions ? (\n <div className=\"flex flex-wrap items-center gap-2 shrink-0\">{actions}</div>\n ) : null}\n </div>\n );\n}\n\n/** Primary CTA in a page list header (e.g. New announcement). */\nexport function PageListPrimaryActionButton({\n className,\n ...props\n}: ButtonHTMLAttributes<HTMLButtonElement>) {\n return (\n <Button\n type=\"button\"\n className={cn(\n \"h-9 gap-1.5 rounded-xl bg-blue-500 px-4 text-sm font-medium text-white hover:bg-blue-600\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Secondary CTA for empty states and alternate actions. */\nexport function PageListSecondaryActionButton({\n className,\n ...props\n}: ButtonHTMLAttributes<HTMLButtonElement>) {\n return (\n <Button\n type=\"button\"\n variant=\"outline\"\n className={cn(\n \"h-9 gap-1.5 rounded-xl border-border bg-card px-4 text-sm font-medium text-foreground hover:bg-accent\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Primary CTA rendered in {@link ShellTopBar} actions on the dark shell. */\nexport function ShellTopBarPrimaryActionButton({\n className,\n ...props\n}: ButtonHTMLAttributes<HTMLButtonElement>) {\n return (\n <Button type=\"button\" size=\"sm\" className={cn(shellTopBarPrimaryButtonClass, className)} {...props} />\n );\n}\n\n/** Secondary / outline CTA in {@link ShellTopBar} — same chrome as detail header actions (Edit member, Add adjustment). */\nexport function ShellTopBarSecondaryActionButton({\n className,\n ...props\n}: ButtonHTMLAttributes<HTMLButtonElement>) {\n return (\n <Button\n type=\"button\"\n variant=\"outline\"\n size=\"sm\"\n className={cn(shellTopBarOutlineButtonClass, className)}\n {...props}\n />\n );\n}\n\nexport { shellTopBarNeutralActionDataAttr };\n\n/** Search, filters, or secondary controls (spacing matches Live space). */\nexport function PageListToolbar({ className, ...props }: React.ComponentProps<\"div\">) {\n return <div className={cn(\"mt-4 flex flex-col gap-3 items-start\", className)} {...props} />;\n}\n\n/** Compact KPI tiles (Live space stat row). */\nexport function PageListStatGrid({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n className={cn(\"mt-4 grid grid-cols-2 gap-2 sm:grid-cols-4\", className)}\n {...props}\n />\n );\n}\n\nexport type PageListStatTone = \"default\" | \"danger\" | \"success\";\n\nexport function PageListStatCard({\n label,\n value,\n tone = \"default\",\n}: {\n label: string;\n value: ReactNode;\n tone?: PageListStatTone;\n}) {\n const shell =\n tone === \"danger\"\n ? \"border-red-100 bg-red-50/80\"\n : tone === \"success\"\n ? \"border-emerald-100 bg-emerald-50/80\"\n : \"border-border bg-muted\";\n const labelClass =\n tone === \"danger\"\n ? \"text-red-600/80\"\n : tone === \"success\"\n ? \"text-emerald-700/80\"\n : \"text-muted-foreground\";\n const valueClass =\n tone === \"danger\" ? \"text-red-700\" : tone === \"success\" ? \"text-emerald-800\" : \"text-foreground\";\n\n return (\n <div className={cn(\"rounded-lg border px-3 py-2\", shell)}>\n <p className={cn(\"text-[11px] mb-0.5\", labelClass)}>{label}</p>\n <p className={cn(\"text-sm font-semibold tabular-nums\", valueClass)}>{value}</p>\n </div>\n );\n}\n\n/** Scrollable white region for tables / lists. Stay flush horizontally; table cells provide inset (same as Live space). */\nexport function PageListTableArea({ className, ...props }: React.ComponentProps<\"div\">) {\n const ref = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n\n const syncScrollState = () => {\n if (el.scrollLeft > 0) {\n el.dataset.scrolledX = \"true\";\n } else {\n delete el.dataset.scrolledX;\n }\n\n const atRightEnd = el.scrollLeft + el.clientWidth >= el.scrollWidth - 1;\n if (!atRightEnd && el.scrollWidth > el.clientWidth) {\n el.dataset.scrolledXEnd = \"false\";\n } else {\n delete el.dataset.scrolledXEnd;\n }\n };\n\n syncScrollState();\n el.addEventListener(\"scroll\", syncScrollState, { passive: true });\n const resizeObserver = new ResizeObserver(syncScrollState);\n resizeObserver.observe(el);\n if (el.firstElementChild) {\n resizeObserver.observe(el.firstElementChild);\n }\n\n return () => {\n el.removeEventListener(\"scroll\", syncScrollState);\n resizeObserver.disconnect();\n };\n }, []);\n\n return (\n <div\n ref={ref}\n className={cn(\n \"group/table-scroll flex-1 min-h-0 overflow-auto bg-card border-t border-border\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Search input styling shared with Live space. */\nexport function PageListSearchField({\n value,\n onChange,\n placeholder,\n className,\n}: {\n value: string;\n onChange: (v: string) => void;\n placeholder: string;\n className?: string;\n}) {\n return (\n <SearchField\n value={value}\n onChange={onChange}\n placeholder={placeholder}\n className={className}\n />\n );\n}\n\n/** Sticky table header row (Live space). */\nexport function PageListStickyThead({ children }: { children: ReactNode }) {\n return (\n <thead className=\"sticky top-0 z-[2] bg-card shadow-[0_1px_0_0_var(--border)]\">\n {children}\n </thead>\n );\n}\n\n/** Non-sticky thead for embedded detail tables. */\nexport function PageListThead({ className, ...props }: React.ComponentProps<\"thead\">) {\n return <thead className={cn(\"border-b border-border\", className)} {...props} />;\n}\n\n/** Standard `<table>` shell for list and detail tables. */\nexport function PageListTable({\n minWidth,\n fixedColumns = false,\n compact = false,\n className,\n style,\n ...props\n}: React.ComponentProps<\"table\"> & {\n minWidth?: number;\n fixedColumns?: boolean;\n compact?: boolean;\n}) {\n return (\n <table\n className={cn(\n \"w-full text-left text-sm\",\n fixedColumns ? pageListTableWithFixedColumnsClass : \"border-collapse\",\n compact && \"border-collapse\",\n className,\n )}\n style={minWidth != null ? { ...style, minWidth: `${minWidth}px` } : style}\n {...props}\n />\n );\n}\n\n/** Standard header row styling for column labels. */\nexport function PageListHeaderRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n return (\n <tr\n className={cn(\"text-[10px] uppercase tracking-wide text-muted-foreground\", className)}\n {...props}\n />\n );\n}\n\nexport type PageListTdTone = \"default\" | \"primary\" | \"muted\" | \"mono\";\nexport type PageListCellSize = \"default\" | \"comfortable\";\n\nconst pageListTdToneClass: Record<PageListTdTone, string> = {\n default: \"text-xs text-foreground\",\n primary: \"text-xs font-medium text-foreground\",\n muted: \"text-xs text-muted-foreground\",\n mono: \"text-xs font-mono text-muted-foreground\",\n};\n\nconst pageListTdSizeClass: Record<PageListCellSize, string> = {\n default: \"px-2 py-2.5 first:pl-5 last:pr-5\",\n comfortable: \"px-5 py-3.5 first:pl-5 last:pr-5\",\n};\n\n/** Standard data row — border, hover, optional click navigation. */\nexport function PageListTr({\n onClick,\n selected = false,\n className,\n onKeyDown,\n ...props\n}: React.ComponentProps<\"tr\"> & {\n onClick?: () => void;\n selected?: boolean;\n}) {\n const clickable = Boolean(onClick);\n\n return (\n <tr\n role={clickable ? \"link\" : undefined}\n tabIndex={clickable ? 0 : undefined}\n onClick={onClick}\n onKeyDown={\n clickable && onClick\n ? (e) => {\n onKeyDown?.(e);\n if (e.defaultPrevented) return;\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n onClick();\n }\n }\n : onKeyDown\n }\n className={cn(\n \"border-b border-border last:border-0 transition-colors\",\n clickable &&\n \"group cursor-pointer hover:bg-accent outline-none focus-visible:ring-2 focus-visible:ring-blue-400 focus-visible:ring-inset\",\n selected && \"bg-accent/60\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport const pageListThClass =\n \"font-medium py-2.5 px-2 text-left text-[10px] uppercase tracking-wide text-muted-foreground first:pl-5 last:pr-5\";\n\nexport const pageListTdClass = pageListTdSizeClass.default;\n\nexport function PageListTh({\n children,\n columnFixed,\n align = \"left\",\n className,\n ...props\n}: React.ComponentProps<\"th\"> & {\n columnFixed?: PageListColumnFixed;\n align?: \"left\" | \"right\";\n}) {\n return (\n <th\n className={cn(\n pageListThClass,\n align === \"right\" && \"text-right\",\n columnFixed &&\n pageListStickyColumnClass({ side: columnFixed, layer: \"head\" }),\n className,\n )}\n {...props}\n >\n {children}\n </th>\n );\n}\n\nexport function PageListTd({\n children,\n columnFixed,\n align = \"left\",\n tone = \"default\",\n size = \"default\",\n className,\n ...props\n}: React.ComponentProps<\"td\"> & {\n columnFixed?: PageListColumnFixed;\n align?: \"left\" | \"right\";\n tone?: PageListTdTone;\n size?: PageListCellSize;\n}) {\n return (\n <td\n className={cn(\n pageListTdSizeClass[size],\n pageListTdToneClass[tone],\n tone === \"mono\" && align === \"right\" && \"font-medium text-foreground\",\n align === \"right\" && \"text-right\",\n columnFixed &&\n pageListStickyColumnClass({ side: columnFixed, layer: \"body\" }),\n className,\n )}\n {...props}\n >\n {children}\n </td>\n );\n}\n\nexport function PageListSortableTh<K extends string>({\n label,\n columnKey,\n sortKey,\n direction,\n onSort,\n align = \"left\",\n columnFixed,\n className,\n}: {\n label: ReactNode;\n columnKey: K;\n sortKey: K;\n direction: SortDirection;\n onSort: (key: K) => void;\n align?: \"left\" | \"right\";\n columnFixed?: PageListColumnFixed;\n className?: string;\n}) {\n const active = sortKey === columnKey;\n const ariaSort = active ? (direction === \"asc\" ? \"ascending\" : \"descending\") : undefined;\n const DirectionIcon = direction === \"asc\" ? ChevronUp : ChevronDown;\n\n return (\n <th\n className={cn(\n pageListThClass,\n align === \"right\" && \"text-right\",\n active &&\n \"text-blue-700 shadow-[inset_0_-2px_0_0_rgb(59,130,246)] dark:text-blue-300\",\n columnFixed &&\n pageListStickyColumnClass({\n side: columnFixed,\n layer: \"head\",\n sortActive: active,\n }),\n !columnFixed &&\n active &&\n \"bg-blue-50/80 dark:bg-blue-950/40\",\n className,\n )}\n aria-sort={ariaSort}\n >\n <Button\n type=\"button\"\n variant=\"ghost\"\n onClick={() => onSort(columnKey)}\n className={cn(\n \"group inline-flex h-auto w-full gap-1 rounded-none border-0 p-0 shadow-none\",\n \"text-[10px] font-medium uppercase tracking-wide\",\n \"hover:bg-transparent\",\n active\n ? \"text-blue-700 dark:text-blue-300\"\n : \"text-muted-foreground hover:text-foreground\",\n align === \"right\" ? \"justify-end\" : \"justify-start\",\n )}\n >\n <span>{label}</span>\n {active ? (\n <DirectionIcon\n size={12}\n strokeWidth={2}\n className=\"shrink-0 text-blue-600 dark:text-blue-400\"\n aria-hidden\n />\n ) : (\n <ChevronsUpDown\n size={12}\n strokeWidth={2}\n className=\"shrink-0 opacity-40 transition-opacity group-hover:opacity-70\"\n aria-hidden\n />\n )}\n </Button>\n </th>\n );\n}\n\nfunction getVisiblePages(page: number, totalPages: number): (number | \"ellipsis\")[] {\n if (totalPages <= 5) {\n return Array.from({ length: totalPages }, (_, i) => i + 1);\n }\n\n const pages = new Set<number>([1, totalPages, page - 1, page, page + 1]);\n const sorted = [...pages].filter((p) => p >= 1 && p <= totalPages).sort((a, b) => a - b);\n\n const result: (number | \"ellipsis\")[] = [];\n for (let i = 0; i < sorted.length; i += 1) {\n const current = sorted[i]!;\n const prev = sorted[i - 1];\n if (prev !== undefined && current - prev > 1) {\n result.push(\"ellipsis\");\n }\n result.push(current);\n }\n return result;\n}\n\nfunction paginationLinkClick(page: number, setPage: (page: number) => void) {\n return (event: MouseEvent<HTMLAnchorElement>) => {\n event.preventDefault();\n setPage(page);\n };\n}\n\nexport type PageListPaginationProps = Pick<\n UseClientPaginationResult<unknown>,\n | \"page\"\n | \"setPage\"\n | \"pageSize\"\n | \"setPageSize\"\n | \"pageSizeOptions\"\n | \"totalItems\"\n | \"totalPages\"\n | \"rangeStart\"\n | \"rangeEnd\"\n | \"canPrev\"\n | \"canNext\"\n>;\n\n/** Footer bar for paginated list tables — count, page-size selector, and page controls. */\nexport function PageListPagination({\n page,\n setPage,\n pageSize,\n setPageSize,\n pageSizeOptions,\n totalItems,\n totalPages,\n rangeStart,\n rangeEnd,\n canPrev,\n canNext,\n}: PageListPaginationProps) {\n if (totalItems === 0) return null;\n\n const visiblePages = getVisiblePages(page, totalPages);\n const showPageControls = totalPages > 1;\n\n return (\n <div\n className=\"shrink-0 flex flex-col gap-3 border-t border-border bg-card px-5 py-3 sm:flex-row sm:items-center sm:justify-between\"\n >\n <p className=\"text-sm text-muted-foreground tabular-nums\">\n Showing <span className=\"font-medium text-foreground\">{rangeStart}</span>\n {\"–\"}\n <span className=\"font-medium text-foreground\">{rangeEnd}</span> of{\" \"}\n <span className=\"font-medium text-foreground\">{totalItems}</span>\n </p>\n\n <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:gap-4\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm text-muted-foreground whitespace-nowrap\">Rows per page</span>\n <Select\n value={String(pageSize)}\n onValueChange={(value) => setPageSize(Number(value))}\n >\n <SelectTrigger className=\"h-8 w-[72px] rounded-lg border-border bg-card text-sm\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {pageSizeOptions.map((option) => (\n <SelectItem key={option} value={String(option)}>\n {option}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n\n {showPageControls ? (\n <Pagination className=\"mx-0 w-auto justify-end\">\n <PaginationContent>\n <PaginationItem>\n <PaginationPrevious\n href=\"#\"\n aria-disabled={!canPrev}\n className={cn(!canPrev && \"pointer-events-none opacity-50\")}\n onClick={\n canPrev\n ? paginationLinkClick(page - 1, setPage)\n : (event) => event.preventDefault()\n }\n />\n </PaginationItem>\n {visiblePages.map((pageNum, index) =>\n pageNum === \"ellipsis\" ? (\n <PaginationItem key={`ellipsis-${index}`}>\n <PaginationEllipsis />\n </PaginationItem>\n ) : (\n <PaginationItem key={pageNum}>\n <PaginationLink\n href=\"#\"\n isActive={pageNum === page}\n onClick={paginationLinkClick(pageNum, setPage)}\n >\n {pageNum}\n </PaginationLink>\n </PaginationItem>\n ),\n )}\n <PaginationItem>\n <PaginationNext\n href=\"#\"\n aria-disabled={!canNext}\n className={cn(!canNext && \"pointer-events-none opacity-50\")}\n onClick={\n canNext\n ? paginationLinkClick(page + 1, setPage)\n : (event) => event.preventDefault()\n }\n />\n </PaginationItem>\n </PaginationContent>\n </Pagination>\n ) : null}\n </div>\n </div>\n );\n}\n\n/** Empty state for list pages inside PageListTableArea. */\nexport function PageListEmptyState({\n title,\n description,\n icon,\n action,\n variant = \"minimal\",\n className,\n}: {\n title: string;\n description?: string;\n icon?: ReactNode;\n action?: ReactNode;\n variant?: \"minimal\" | \"illustrated\";\n className?: string;\n}) {\n if (variant === \"minimal\") {\n return (\n <div\n className={cn(\n \"flex flex-col items-center justify-center py-24 gap-2\",\n className,\n )}\n >\n <span className=\"text-sm text-muted-foreground\">{title}</span>\n {description ? (\n <span className=\"text-xs text-muted-foreground\">{description}</span>\n ) : null}\n {action}\n </div>\n );\n }\n\n return (\n <div\n className={cn(\n \"flex flex-col items-center justify-center py-20 gap-3 border-2 border-dashed border-border rounded-2xl bg-muted/50\",\n className,\n )}\n >\n {icon ? (\n <div className=\"w-10 h-10 rounded-2xl bg-muted flex items-center justify-center\">\n {icon}\n </div>\n ) : null}\n <div className=\"flex flex-col items-center gap-1 text-center px-4\">\n <p className=\"text-sm text-muted-foreground font-medium\">{title}</p>\n {description ? (\n <p className=\"text-xs text-muted-foreground max-w-sm\">{description}</p>\n ) : null}\n </div>\n {action}\n </div>\n );\n}\n\n/** Bordered scroll wrapper for embedded detail tables. */\nexport function DetailTableFrame({\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div\n className={cn(\"overflow-x-auto rounded-xl border border-border\", className)}\n {...props}\n >\n {children}\n </div>\n );\n}\n\n/** Flat content section for detail pages — title + optional description + optional header action, separated by a thin divider. */\nexport function DetailSection({\n title,\n description,\n headerMeta,\n headerAction,\n children,\n}: {\n title: string;\n description?: string;\n /** Right-aligned non-interactive meta (counts, tax note). */\n headerMeta?: ReactNode;\n headerAction?: ReactNode;\n children: ReactNode;\n}) {\n return (\n <div className=\"border-b border-border px-6 py-6 last:border-0\">\n <div className=\"flex items-start justify-between gap-4 mb-4\">\n <div>\n <h2 className=\"text-sm font-semibold text-foreground\">{title}</h2>\n {description && <p className=\"text-xs text-muted-foreground mt-0.5\">{description}</p>}\n </div>\n {headerAction ? (\n headerAction\n ) : headerMeta ? (\n <div className=\"shrink-0 text-xs text-muted-foreground\">{headerMeta}</div>\n ) : null}\n </div>\n {children}\n </div>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/ui/input.tsx","../src/ui/select.tsx","../src/ui/search-field.tsx","../src/ui/pagination.tsx"],"names":["Input","jsx","jsxs"],"mappings":"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","file":"chunk-LUB7QWGU.js","sourcesContent":["import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"./utils\";\n\nconst inputVariants = cva(\n \"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground border-border bg-card text-foreground flex w-full min-w-0 rounded-md border px-3 py-1 text-base transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:border-blue-400 focus-visible:ring-[3px] focus-visible:ring-blue-500/25 disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-red-400 aria-invalid:ring-red-500/20 md:text-sm\",\n {\n variants: {\n size: {\n sm: \"h-8 text-sm\",\n default: \"h-9\",\n lg: \"h-10\",\n xl: \"h-11\",\n },\n },\n defaultVariants: {\n size: \"default\",\n },\n },\n);\n\nconst Input = React.forwardRef<\n HTMLInputElement,\n Omit<React.ComponentProps<\"input\">, \"size\"> & VariantProps<typeof inputVariants>\n>(function Input({ className, type, size, ...props }, ref) {\n return (\n <input\n ref={ref}\n type={type}\n data-slot=\"input\"\n className={cn(inputVariants({ size }), className)}\n {...props}\n />\n );\n});\n\nexport { Input, inputVariants };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as SelectPrimitive from \"@radix-ui/react-select\";\nimport { CheckIcon, ChevronDownIcon, ChevronUpIcon } from \"lucide-react\";\n\nimport { cn } from \"./utils\";\n\nfunction Select({ ...props }: React.ComponentProps<typeof SelectPrimitive.Root>) {\n return <SelectPrimitive.Root data-slot=\"select\" {...props} />;\n}\n\nfunction SelectGroup({ ...props }: React.ComponentProps<typeof SelectPrimitive.Group>) {\n return <SelectPrimitive.Group data-slot=\"select-group\" {...props} />;\n}\n\nfunction SelectValue({ ...props }: React.ComponentProps<typeof SelectPrimitive.Value>) {\n return <SelectPrimitive.Value data-slot=\"select-value\" {...props} />;\n}\n\nfunction SelectTrigger({\n className,\n size = \"default\",\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Trigger> & {\n size?: \"sm\" | \"default\";\n}) {\n return (\n <SelectPrimitive.Trigger\n data-slot=\"select-trigger\"\n data-size={size}\n className={cn(\n \"border border-border bg-card data-[placeholder]:text-muted-foreground [&_svg:not([class*='text-'])]:text-muted-foreground hover:border-border focus-visible:border-blue-400 focus-visible:ring-blue-500/25 aria-invalid:border-red-400 aria-invalid:ring-red-500/20 dark:bg-input/30 dark:hover:bg-input/50 flex w-full items-center justify-between gap-2 rounded-md px-3 py-2 text-sm whitespace-nowrap transition-[color,box-shadow,border-color] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n >\n {children}\n <SelectPrimitive.Icon asChild>\n <ChevronDownIcon className=\"size-4 opacity-50\" />\n </SelectPrimitive.Icon>\n </SelectPrimitive.Trigger>\n );\n}\n\nfunction SelectContent({\n className,\n children,\n position = \"popper\",\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Content>) {\n return (\n <SelectPrimitive.Portal>\n <SelectPrimitive.Content\n data-slot=\"select-content\"\n className={cn(\n \"bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 relative z-50 max-h-(--radix-select-content-available-height) min-w-[8rem] origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-md border border-white/10 shadow-md\",\n position === \"popper\" &&\n \"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1\",\n className,\n )}\n position={position}\n {...props}\n >\n <SelectScrollUpButton />\n <SelectPrimitive.Viewport\n className={cn(\n \"p-1\",\n position === \"popper\" &&\n \"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)] scroll-my-1\",\n )}\n >\n {children}\n </SelectPrimitive.Viewport>\n <SelectScrollDownButton />\n </SelectPrimitive.Content>\n </SelectPrimitive.Portal>\n );\n}\n\nfunction SelectLabel({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.Label>) {\n return (\n <SelectPrimitive.Label\n data-slot=\"select-label\"\n className={cn(\"text-muted-foreground px-2 py-1.5 text-xs\", className)}\n {...props}\n />\n );\n}\n\nfunction SelectItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Item>) {\n return (\n <SelectPrimitive.Item\n data-slot=\"select-item\"\n className={cn(\n \"focus:bg-card/10 focus:text-popover-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2\",\n className,\n )}\n {...props}\n >\n <span className=\"absolute right-2 flex size-3.5 items-center justify-center\">\n <SelectPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </SelectPrimitive.ItemIndicator>\n </span>\n <SelectPrimitive.ItemText>{children}</SelectPrimitive.ItemText>\n </SelectPrimitive.Item>\n );\n}\n\nfunction SelectSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.Separator>) {\n return (\n <SelectPrimitive.Separator\n data-slot=\"select-separator\"\n className={cn(\"bg-card/10 pointer-events-none -mx-1 my-1 h-px\", className)}\n {...props}\n />\n );\n}\n\nfunction SelectScrollUpButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>) {\n return (\n <SelectPrimitive.ScrollUpButton\n data-slot=\"select-scroll-up-button\"\n className={cn(\"flex cursor-default items-center justify-center py-1\", className)}\n {...props}\n >\n <ChevronUpIcon className=\"size-4\" />\n </SelectPrimitive.ScrollUpButton>\n );\n}\n\nfunction SelectScrollDownButton({\n className,\n ...props\n}: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>) {\n return (\n <SelectPrimitive.ScrollDownButton\n data-slot=\"select-scroll-down-button\"\n className={cn(\"flex cursor-default items-center justify-center py-1\", className)}\n {...props}\n >\n <ChevronDownIcon className=\"size-4\" />\n </SelectPrimitive.ScrollDownButton>\n );\n}\n\nexport {\n Select,\n SelectContent,\n SelectGroup,\n SelectItem,\n SelectLabel,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n};\n","import { Search } from \"lucide-react\";\n\nimport { cn } from \"./utils\";\nimport { Input } from \"./input\";\n\nexport function SearchField({\n value,\n onChange,\n placeholder,\n className,\n size = \"default\",\n \"aria-label\": ariaLabel,\n}: {\n value: string;\n onChange: (v: string) => void;\n placeholder: string;\n className?: string;\n size?: \"default\" | \"lg\";\n \"aria-label\"?: string;\n}) {\n const heightClass = size === \"lg\" ? \"h-11\" : \"h-10\";\n const iconSize = size === \"lg\" ? 16 : 16;\n\n return (\n <div\n className={cn(\n \"flex items-center gap-2 rounded-md border border-border bg-card px-3 w-full focus-within:border-blue-400 focus-within:ring-[3px] focus-within:ring-blue-500/25 transition-all\",\n heightClass,\n className,\n )}\n >\n <Search size={iconSize} className=\"text-muted-foreground shrink-0\" strokeWidth={2.25} />\n <Input\n type=\"search\"\n value={value}\n onChange={(e) => onChange(e.target.value)}\n placeholder={placeholder}\n aria-label={ariaLabel}\n className=\"flex-1 border-0 bg-transparent shadow-none focus-visible:ring-0 px-0 min-w-0 h-auto\"\n />\n </div>\n );\n}\n","import * as React from \"react\";\nimport { ChevronLeftIcon, ChevronRightIcon, MoreHorizontalIcon } from \"lucide-react\";\n\nimport { cn } from \"./utils\";\nimport { Button, buttonVariants } from \"./button\";\n\nfunction Pagination({ className, ...props }: React.ComponentProps<\"nav\">) {\n return (\n <nav\n role=\"navigation\"\n aria-label=\"pagination\"\n data-slot=\"pagination\"\n className={cn(\"mx-auto flex w-full justify-center\", className)}\n {...props}\n />\n );\n}\n\nfunction PaginationContent({ className, ...props }: React.ComponentProps<\"ul\">) {\n return (\n <ul\n data-slot=\"pagination-content\"\n className={cn(\"flex flex-row items-center gap-1\", className)}\n {...props}\n />\n );\n}\n\nfunction PaginationItem({ ...props }: React.ComponentProps<\"li\">) {\n return <li data-slot=\"pagination-item\" {...props} />;\n}\n\ntype PaginationLinkProps = {\n isActive?: boolean;\n} & Pick<React.ComponentProps<typeof Button>, \"size\"> &\n React.ComponentProps<\"a\">;\n\nfunction PaginationLink({ className, isActive, size = \"icon\", ...props }: PaginationLinkProps) {\n return (\n <a\n aria-current={isActive ? \"page\" : undefined}\n data-slot=\"pagination-link\"\n data-active={isActive}\n className={cn(\n buttonVariants({\n variant: isActive ? \"outline\" : \"ghost\",\n size,\n }),\n className,\n )}\n {...props}\n />\n );\n}\n\nfunction PaginationPrevious({ className, ...props }: React.ComponentProps<typeof PaginationLink>) {\n return (\n <PaginationLink\n aria-label=\"Go to previous page\"\n size=\"default\"\n className={cn(\"gap-1 px-2.5 sm:pl-2.5\", className)}\n {...props}\n >\n <ChevronLeftIcon />\n <span className=\"hidden sm:block\">Previous</span>\n </PaginationLink>\n );\n}\n\nfunction PaginationNext({ className, ...props }: React.ComponentProps<typeof PaginationLink>) {\n return (\n <PaginationLink\n aria-label=\"Go to next page\"\n size=\"default\"\n className={cn(\"gap-1 px-2.5 sm:pr-2.5\", className)}\n {...props}\n >\n <span className=\"hidden sm:block\">Next</span>\n <ChevronRightIcon />\n </PaginationLink>\n );\n}\n\nfunction PaginationEllipsis({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n aria-hidden\n data-slot=\"pagination-ellipsis\"\n className={cn(\"flex size-9 items-center justify-center\", className)}\n {...props}\n >\n <MoreHorizontalIcon className=\"size-4\" />\n <span className=\"sr-only\">More pages</span>\n </span>\n );\n}\n\nexport {\n Pagination,\n PaginationContent,\n PaginationLink,\n PaginationItem,\n PaginationPrevious,\n PaginationNext,\n PaginationEllipsis,\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/lib/booking-schedule.ts"],"names":[],"mappings":"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","file":"chunk-OTSA5ROL.js","sourcesContent":["/**\n * Date / schedule helpers used by booking-schedule calendars.\n */\n\nexport type RepeatType = \"none\" | \"daily\" | \"weekly\" | \"monthly\";\nexport type BookingMode = \"slots\" | \"schedule\";\nexport type ScheduleChargeBy = \"minutes\" | \"hours\" | \"days\" | \"weeks\" | \"months\" | \"quantity\";\n\nexport type PartialElapsedUnit = \"days\" | \"hours\" | \"minutes\";\n\nexport interface PartialElapsed {\n amount: number;\n unit: PartialElapsedUnit;\n}\n\n/** Editor state for slot / schedule / daily / item shaped tiers */\nexport interface BookingState {\n slotCount: number;\n bookingDate: string;\n bookingMode: BookingMode;\n scheduleDate: string;\n scheduleTime: string;\n scheduleEndTime: string;\n repeatType: RepeatType;\n repeatEveryDays: number;\n repeatEveryWeeks: number;\n repeatOnDays: string[];\n repeatEveryMonths: number;\n repeatUntilDate: string;\n startDate: string;\n endDate: string;\n monthFrom: string;\n monthTo: string;\n weekFrom: string;\n weekCount: number;\n itemQuantity: number;\n oneDayBooking?: boolean;\n}\n\nexport interface ScheduleDefaultsConfig {\n chargeBy: ScheduleChargeBy;\n}\n\n/** YYYY-MM-DD in local timezone (never UTC ISO split). */\nexport function localDateYmd(d: Date): string {\n const y = d.getFullYear();\n const m = String(d.getMonth() + 1).padStart(2, \"0\");\n const day = String(d.getDate()).padStart(2, \"0\");\n return `${y}-${m}-${day}`;\n}\n\nexport function todayLocalYmd(now: Date = new Date()): string {\n return localDateYmd(now);\n}\n\n/** @deprecated Prefer `todayLocalYmd()` — kept for existing imports. */\nexport function pricingTodayYmd(now: Date = new Date()): string {\n return todayLocalYmd(now);\n}\n\nexport const PRICING_TODAY = todayLocalYmd();\n\nexport function currentMonthYm(now: Date = new Date()): string {\n return `${now.getFullYear()}-${String(now.getMonth() + 1).padStart(2, \"0\")}`;\n}\n\n/** Monday of the current local week (YYYY-MM-DD). */\nexport function currentWeekStart(now: Date = new Date()): string {\n const d = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n const day = d.getDay();\n const offset = day === 0 ? -6 : 1 - day;\n d.setDate(d.getDate() + offset);\n return localDateYmd(d);\n}\n\n/** First full month default: next month if today is past the 1st, else current month. */\nexport function computeMinMonth(now: Date = new Date()): string {\n if (now.getDate() === 1) {\n return currentMonthYm(now);\n }\n const n = new Date(now.getFullYear(), now.getMonth() + 1, 1);\n return currentMonthYm(n);\n}\n\n/** First full week default: next Monday unless today is already Monday. */\nexport function computeMinWeekStart(now: Date = new Date()): string {\n const day = now.getDay();\n if (day === 1) return todayLocalYmd(now);\n const d = new Date(now.getFullYear(), now.getMonth(), now.getDate());\n const skip = day === 0 ? 1 : 8 - day;\n d.setDate(d.getDate() + skip);\n return localDateYmd(d);\n}\n\nexport const MIN_MONTH = computeMinMonth();\nexport const MIN_WEEK_START = computeMinWeekStart();\n\nexport const IS_PARTIAL_MONTH = new Date().getDate() !== 1;\n\nexport function monthLabel(ym: string): string {\n const [y, m] = ym.split(\"-\").map(Number);\n return new Date(y, m - 1, 1).toLocaleDateString(\"en-US\", { month: \"long\", year: \"numeric\" });\n}\n\nexport function monthCount(from: string, to: string): number {\n if (!from || !to || !from.includes(\"-\") || !to.includes(\"-\")) return 0;\n const [fy, fm] = from.split(\"-\").map(Number);\n const [ty, tm] = to.split(\"-\").map(Number);\n return (ty - fy) * 12 + (tm - fm) + 1;\n}\n\nexport function weekRangeLabel(weekFrom: string, weekCount: number): string {\n if (!weekFrom || isNaN(new Date(weekFrom + \"T00:00:00\").getTime())) return \"—\";\n const end = parseDateOnly(weekFrom);\n end.setDate(end.getDate() + weekCount * 7 - 1);\n const s = parseDateOnly(weekFrom).toLocaleDateString(\"en-US\", { month: \"short\", day: \"numeric\" });\n const e = end.toLocaleDateString(\"en-US\", { month: \"short\", day: \"numeric\", year: \"numeric\" });\n return `${s} – ${e}`;\n}\n\n/** Inclusive number of Mon-anchored weeks from `weekFrom` through `weekToMon`. */\nexport function weekCountBetween(weekFrom: string, weekToMon: string): number {\n if (!weekFrom || !weekToMon) return 0;\n if (weekToMon < weekFrom) return 1;\n return Math.floor(diffDays(weekFrom, weekToMon) / 7) + 1;\n}\n\nexport function addMonthsYm(ym: string, delta: number): string {\n const [y, m] = ym.split(\"-\").map(Number);\n const d = new Date(y, (m ?? 1) - 1 + delta, 1);\n return `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, \"0\")}`;\n}\n\nfunction parseDateOnly(date: string): Date {\n const [y, m, d] = date.split(\"-\").map(Number);\n return new Date(y, m - 1, d);\n}\n\nexport function diffDays(a: string, b: string): number {\n const da = parseDateOnly(a);\n const db = parseDateOnly(b);\n return Math.max(0, Math.round((db.getTime() - da.getTime()) / 86_400_000));\n}\n\nexport function addDays(date: string, days: number): string {\n const d = parseDateOnly(date);\n d.setDate(d.getDate() + days);\n return localDateYmd(d);\n}\n\nfunction hmMinutes(hm: string): number | null {\n const [h, m] = hm.split(\":\").map(Number);\n if (!Number.isFinite(h) || !Number.isFinite(m)) return null;\n return h * 60 + m;\n}\n\nfunction isSlotCharge(chargeBy: ScheduleChargeBy): boolean {\n return chargeBy === \"hours\" || chargeBy === \"minutes\";\n}\n\nfunction isPeriodCharge(chargeBy: ScheduleChargeBy): boolean {\n return chargeBy === \"days\" || chargeBy === \"weeks\" || chargeBy === \"months\";\n}\n\nfunction snapScheduleEndTime(from: string, end: string, chargeBy: ScheduleChargeBy): string {\n if (end && end > from) return end;\n const fromMin = hmMinutes(from);\n if (fromMin == null) return end || \"10:00\";\n const delta = chargeBy === \"minutes\" ? 1 : 60;\n const next = fromMin + delta;\n return `${String(Math.floor(next / 60)).padStart(2, \"0\")}:${String(next % 60).padStart(2, \"0\")}`;\n}\n\nfunction minNeededTimeHm(prepMinutes: number, now: Date = new Date()): string {\n const earliest = new Date(now.getTime() + prepMinutes * 60_000);\n if (earliest.getSeconds() > 0 || earliest.getMilliseconds() > 0) {\n earliest.setMinutes(earliest.getMinutes() + 1);\n }\n earliest.setSeconds(0, 0);\n return `${String(earliest.getHours()).padStart(2, \"0\")}:${String(earliest.getMinutes()).padStart(2, \"0\")}`;\n}\n\n/** Elapsed time in the selected in-progress booking period, if any. */\nexport function partialElapsed(\n config: ScheduleDefaultsConfig,\n booking: BookingState,\n now: Date = new Date(),\n): PartialElapsed | null {\n const today = todayLocalYmd(now);\n\n if (config.chargeBy === \"months\") {\n const cur = currentMonthYm(now);\n const min = computeMinMonth(now);\n if (!booking.monthFrom || booking.monthFrom !== cur || booking.monthFrom >= min) return null;\n const days = diffDays(`${booking.monthFrom}-01`, today);\n return days > 0 ? { amount: days, unit: \"days\" } : null;\n }\n\n if (config.chargeBy === \"weeks\") {\n const cur = currentWeekStart(now);\n const min = computeMinWeekStart(now);\n if (!booking.weekFrom || booking.weekFrom !== cur || booking.weekFrom >= min) return null;\n const days = diffDays(booking.weekFrom, today);\n return days > 0 ? { amount: days, unit: \"days\" } : null;\n }\n\n if (config.chargeBy === \"days\") {\n if (!booking.startDate) return null;\n if (booking.startDate < today) {\n const days = diffDays(booking.startDate, today);\n return days > 0 ? { amount: days, unit: \"days\" } : null;\n }\n if (booking.oneDayBooking !== false && booking.startDate === today) {\n const hours = now.getHours() + now.getMinutes() / 60;\n const rounded = Math.floor(hours);\n return rounded > 0 ? { amount: rounded, unit: \"hours\" } : null;\n }\n return null;\n }\n\n if (isSlotCharge(config.chargeBy)) {\n if (booking.scheduleDate !== today || !booking.scheduleTime) return null;\n const startMin = hmMinutes(booking.scheduleTime);\n const nowMin = now.getHours() * 60 + now.getMinutes();\n if (startMin == null || startMin >= nowMin) return null;\n const elapsed = nowMin - startMin;\n if (config.chargeBy === \"minutes\") {\n return elapsed > 0 ? { amount: elapsed, unit: \"minutes\" } : null;\n }\n const hours = Math.floor(elapsed / 60);\n return hours > 0 ? { amount: hours, unit: \"hours\" } : null;\n }\n\n return null;\n}\n\nexport function formatPartialElapsedLabel(elapsed: PartialElapsed): string {\n const { amount, unit } = elapsed;\n if (unit === \"days\") return `${amount} day${amount !== 1 ? \"s\" : \"\"}`;\n if (unit === \"hours\") return `${amount} hour${amount !== 1 ? \"s\" : \"\"}`;\n return `${amount} minute${amount !== 1 ? \"s\" : \"\"}`;\n}\n\n/** Patch empty schedule fields with tier-appropriate defaults. */\nexport function applyBookingScheduleDefaults(\n config: ScheduleDefaultsConfig,\n booking: BookingState,\n options?: { preparationMinutes?: number; now?: Date },\n): Partial<BookingState> {\n const now = options?.now ?? new Date();\n const today = todayLocalYmd(now);\n const patch: Partial<BookingState> = {};\n\n if (isSlotCharge(config.chargeBy)) {\n if (!booking.scheduleDate) patch.scheduleDate = today;\n if (!booking.scheduleTime) patch.scheduleTime = \"09:00\";\n const from = patch.scheduleTime ?? booking.scheduleTime ?? \"09:00\";\n if (!booking.scheduleEndTime) {\n patch.scheduleEndTime = snapScheduleEndTime(from, \"\", config.chargeBy);\n }\n return patch;\n }\n\n if (config.chargeBy === \"days\") {\n if (!booking.startDate) {\n patch.startDate = today;\n patch.endDate = addDays(today, 1);\n patch.oneDayBooking = true;\n } else if (!booking.endDate) {\n patch.endDate = addDays(booking.startDate, 1);\n }\n if (booking.oneDayBooking === undefined) patch.oneDayBooking = true;\n return patch;\n }\n\n if (config.chargeBy === \"weeks\") {\n if (!booking.weekFrom) patch.weekFrom = computeMinWeekStart(now);\n if (!booking.weekCount) patch.weekCount = 1;\n return patch;\n }\n\n if (config.chargeBy === \"months\") {\n const min = computeMinMonth(now);\n if (!booking.monthFrom) patch.monthFrom = min;\n if (!booking.monthTo) patch.monthTo = patch.monthFrom ?? booking.monthFrom ?? min;\n return patch;\n }\n\n if (config.chargeBy === \"quantity\") {\n if (!booking.scheduleDate) patch.scheduleDate = today;\n let time = booking.scheduleTime || \"09:00\";\n const prep = options?.preparationMinutes ?? 0;\n if (prep > 0 && (patch.scheduleDate ?? booking.scheduleDate ?? today) === today) {\n const floor = minNeededTimeHm(prep, now);\n if (time < floor) time = floor;\n }\n if (!booking.scheduleTime) patch.scheduleTime = time;\n if (!booking.itemQuantity) patch.itemQuantity = 1;\n return patch;\n }\n\n return patch;\n}\n"]}
@@ -1,84 +0,0 @@
1
- // src/lib/dateDisplay.ts
2
- function parseWallClockHm(value) {
3
- const m = /^([01]\d|2[0-3]):([0-5]\d)$/.exec(value.trim());
4
- if (!m) return void 0;
5
- const h = Number(m[1]);
6
- const min = Number(m[2]);
7
- if (h > 23 || min > 59) return void 0;
8
- return { h, m: min };
9
- }
10
- function toWallClockHmStr(h, m) {
11
- return `${String(h).padStart(2, "0")}:${String(m).padStart(2, "0")}`;
12
- }
13
- function formatWallClockTime(value, timeFormat) {
14
- const p = parseWallClockHm(value);
15
- if (!p) return value.trim() || "\u2014";
16
- if (timeFormat === "24h") return toWallClockHmStr(p.h, p.m);
17
- const ap = p.h >= 12 ? "PM" : "AM";
18
- const h12 = p.h % 12 || 12;
19
- return `${h12}:${String(p.m).padStart(2, "0")} ${ap}`;
20
- }
21
- function addWallClockMinutes(value, minutes) {
22
- const p = parseWallClockHm(value);
23
- if (!p) return value;
24
- const total = p.h * 60 + p.m + minutes;
25
- const wrapped = (total % (24 * 60) + 24 * 60) % (24 * 60);
26
- return toWallClockHmStr(Math.floor(wrapped / 60), wrapped % 60);
27
- }
28
- function formatCalendarDate(ymd) {
29
- if (!ymd || !/^\d{4}-\d{2}-\d{2}$/.test(ymd)) return ymd || "\u2014";
30
- const [y, m, d] = ymd.split("-").map(Number);
31
- return new Date(y, m - 1, d).toLocaleDateString("en-US", {
32
- month: "short",
33
- day: "numeric",
34
- year: "numeric"
35
- });
36
- }
37
- function toDateStr(date) {
38
- const y = date.getFullYear();
39
- const m = String(date.getMonth() + 1).padStart(2, "0");
40
- const d = String(date.getDate()).padStart(2, "0");
41
- return `${y}-${m}-${d}`;
42
- }
43
- function isSameDay(a, b) {
44
- return a.getFullYear() === b.getFullYear() && a.getMonth() === b.getMonth() && a.getDate() === b.getDate();
45
- }
46
- function formatDate(date) {
47
- if (isSameDay(date, /* @__PURE__ */ new Date())) return "Today";
48
- return date.toLocaleDateString("en-US", {
49
- weekday: "short",
50
- month: "short",
51
- day: "numeric"
52
- });
53
- }
54
- var MS_MIN = 6e4;
55
- var MS_HOUR = 60 * MS_MIN;
56
- var MS_DAY = 24 * MS_HOUR;
57
- function formatRelativeTimeAgo(iso, now = /* @__PURE__ */ new Date()) {
58
- try {
59
- const d = new Date(iso.trim());
60
- if (!Number.isFinite(d.getTime())) return "";
61
- let diffMs = now.getTime() - d.getTime();
62
- if (diffMs < 0) diffMs = 0;
63
- const sec = Math.floor(diffMs / 1e3);
64
- if (sec < 60) return "just now";
65
- const min = Math.floor(diffMs / MS_MIN);
66
- if (min < 60) return `${min}m ago`;
67
- const hr = Math.floor(diffMs / MS_HOUR);
68
- if (hr < 24) return `${hr}h ago`;
69
- const day = Math.floor(diffMs / MS_DAY);
70
- if (day < 7) return `${day}d ago`;
71
- const week = Math.floor(day / 7);
72
- if (week < 5) return `${week}w ago`;
73
- const mo = Math.floor(day / 30);
74
- if (mo < 12) return `${mo}mo ago`;
75
- const yr = Math.floor(day / 365);
76
- return `${Math.max(1, yr)}y ago`;
77
- } catch {
78
- return "";
79
- }
80
- }
81
-
82
- export { addWallClockMinutes, formatCalendarDate, formatDate, formatRelativeTimeAgo, formatWallClockTime, isSameDay, parseWallClockHm, toDateStr, toWallClockHmStr };
83
- //# sourceMappingURL=chunk-PBNBLCC2.js.map
84
- //# sourceMappingURL=chunk-PBNBLCC2.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/lib/dateDisplay.ts"],"names":[],"mappings":"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","file":"chunk-PBNBLCC2.js","sourcesContent":["/** Parse `HH:mm` wall-clock time. */\nexport function parseWallClockHm(value: string): { h: number; m: number } | undefined {\n const m = /^([01]\\d|2[0-3]):([0-5]\\d)$/.exec(value.trim());\n if (!m) return undefined;\n const h = Number(m[1]);\n const min = Number(m[2]);\n if (h > 23 || min > 59) return undefined;\n return { h, m: min };\n}\n\nexport function toWallClockHmStr(h: number, m: number): string {\n return `${String(h).padStart(2, \"0\")}:${String(m).padStart(2, \"0\")}`;\n}\n\n/** Format stored `HH:mm` without timezone conversion. */\nexport function formatWallClockTime(value: string, timeFormat: \"12h\" | \"24h\"): string {\n const p = parseWallClockHm(value);\n if (!p) return value.trim() || \"—\";\n if (timeFormat === \"24h\") return toWallClockHmStr(p.h, p.m);\n const ap = p.h >= 12 ? \"PM\" : \"AM\";\n const h12 = p.h % 12 || 12;\n return `${h12}:${String(p.m).padStart(2, \"0\")} ${ap}`;\n}\n\n/** Add minutes to a wall-clock `HH:mm`, wrapping at 24h. */\nexport function addWallClockMinutes(value: string, minutes: number): string {\n const p = parseWallClockHm(value);\n if (!p) return value;\n const total = p.h * 60 + p.m + minutes;\n const wrapped = ((total % (24 * 60)) + 24 * 60) % (24 * 60);\n return toWallClockHmStr(Math.floor(wrapped / 60), wrapped % 60);\n}\n\n/** Format `YYYY-MM-DD` as a calendar date (no timezone shift). */\nexport function formatCalendarDate(ymd: string): string {\n if (!ymd || !/^\\d{4}-\\d{2}-\\d{2}$/.test(ymd)) return ymd || \"—\";\n const [y, m, d] = ymd.split(\"-\").map(Number);\n return new Date(y, m - 1, d).toLocaleDateString(\"en-US\", {\n month: \"short\",\n day: \"numeric\",\n year: \"numeric\",\n });\n}\n\n/** ISO `yyyy-mm-dd` for a local calendar date. */\nexport function toDateStr(date: Date): string {\n const y = date.getFullYear();\n const m = String(date.getMonth() + 1).padStart(2, \"0\");\n const d = String(date.getDate()).padStart(2, \"0\");\n return `${y}-${m}-${d}`;\n}\n\nexport function isSameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\n/** Short label for a date; shows \"Today\" when it matches the current local day. */\nexport function formatDate(date: Date): string {\n if (isSameDay(date, new Date())) return \"Today\";\n return date.toLocaleDateString(\"en-US\", {\n weekday: \"short\",\n month: \"short\",\n day: \"numeric\",\n });\n}\n\nconst MS_MIN = 60_000;\nconst MS_HOUR = 60 * MS_MIN;\nconst MS_DAY = 24 * MS_HOUR;\n\n/**\n * Compact relative time for feeds (e.g. announcements, notifications): `2m ago`, `2d ago`.\n * Uses elapsed wall time from `now` (defaults to current time). Returns \"\" if `iso` is unparseable.\n */\nexport function formatRelativeTimeAgo(iso: string, now: Date = new Date()): string {\n try {\n const d = new Date(iso.trim());\n if (!Number.isFinite(d.getTime())) return \"\";\n let diffMs = now.getTime() - d.getTime();\n if (diffMs < 0) diffMs = 0;\n const sec = Math.floor(diffMs / 1000);\n if (sec < 60) return \"just now\";\n const min = Math.floor(diffMs / MS_MIN);\n if (min < 60) return `${min}m ago`;\n const hr = Math.floor(diffMs / MS_HOUR);\n if (hr < 24) return `${hr}h ago`;\n const day = Math.floor(diffMs / MS_DAY);\n if (day < 7) return `${day}d ago`;\n const week = Math.floor(day / 7);\n if (week < 5) return `${week}w ago`;\n const mo = Math.floor(day / 30);\n if (mo < 12) return `${mo}mo ago`;\n const yr = Math.floor(day / 365);\n return `${Math.max(1, yr)}y ago`;\n } catch {\n return \"\";\n }\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/ui/label.tsx","../src/ui/radio-group.tsx"],"names":["jsx"],"mappings":";;;;;AAOA,SAAS,KAAA,CAAM,EAAE,SAAA,EAAW,GAAG,OAAM,EAAqD;AACxF,EAAA,uBACE,GAAA;AAAA,IAAgB,cAAA,CAAA,IAAA;AAAA,IAAf;AAAA,MACC,WAAA,EAAU,OAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,qNAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ;ACXA,SAAS,UAAA,CAAW;AAAA,EAClB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA0D;AACxD,EAAA,uBACEA,GAAAA;AAAA,IAAqB,mBAAA,CAAA,IAAA;AAAA,IAApB;AAAA,MACC,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAW,EAAA,CAAG,YAAA,EAAc,SAAS,CAAA;AAAA,MACpC,GAAG;AAAA;AAAA,GACN;AAEJ;AAEA,SAAS,cAAA,CAAe;AAAA,EACtB,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA0D;AACxD,EAAA,uBACEA,GAAAA;AAAA,IAAqB,mBAAA,CAAA,IAAA;AAAA,IAApB;AAAA,MACC,WAAA,EAAU,kBAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,QACT,6JAAA;AAAA,QACA,uFAAA;AAAA,QACA,0DAAA;AAAA,QACA,iDAAA;AAAA,QACA,sCAAA;AAAA,QACA;AAAA,OACF;AAAA,MACC,GAAG,KAAA;AAAA,MAEJ,QAAA,kBAAAA,GAAAA;AAAA,QAAqB,mBAAA,CAAA,SAAA;AAAA,QAApB;AAAA,UACC,WAAA,EAAU,uBAAA;AAAA,UACV,SAAA,EAAU,kCAAA;AAAA,UAEV,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mCAAA,EAAoC;AAAA;AAAA;AACtD;AAAA,GACF;AAEJ","file":"chunk-RV5PMZYZ.js","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\n\nimport { cn } from \"./utils\";\n\nfunction Label({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>) {\n return (\n <LabelPrimitive.Root\n data-slot=\"label\"\n className={cn(\n \"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Label };\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as RadioGroupPrimitive from \"@radix-ui/react-radio-group\";\n\nimport { cn } from \"./utils\";\n\nfunction RadioGroup({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Root>) {\n return (\n <RadioGroupPrimitive.Root\n data-slot=\"radio-group\"\n className={cn(\"grid gap-3\", className)}\n {...props}\n />\n );\n}\n\nfunction RadioGroupItem({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Item>) {\n return (\n <RadioGroupPrimitive.Item\n data-slot=\"radio-group-item\"\n className={cn(\n \"flex size-[18px] shrink-0 items-center justify-center rounded-full border border-border bg-card shadow-sm outline-none transition-[border-color,box-shadow]\",\n \"focus-visible:border-blue-500 focus-visible:ring-[3px] focus-visible:ring-blue-500/25\",\n \"aria-invalid:border-red-400 aria-invalid:ring-red-500/20\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n \"data-[state=checked]:border-blue-600\",\n className,\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator\n data-slot=\"radio-group-indicator\"\n className=\"flex items-center justify-center\"\n >\n <span className=\"size-2.5 rounded-full bg-blue-600\" />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n}\n\nexport { RadioGroup, RadioGroupItem };\n"]}