@scripso-homepad/ui 0.4.40 → 0.4.42

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.
@@ -88,6 +88,24 @@
88
88
  border-radius: 9999px;
89
89
  }
90
90
 
91
+ /* src/web/components/modal-motion.css */
92
+ @keyframes homepad-modal-in {
93
+ from {
94
+ opacity: 0;
95
+ }
96
+ to {
97
+ opacity: 1;
98
+ }
99
+ }
100
+ .homepad-modal-in {
101
+ animation: homepad-modal-in 300ms ease;
102
+ }
103
+ @media (prefers-reduced-motion: reduce) {
104
+ .homepad-modal-in {
105
+ animation: none;
106
+ }
107
+ }
108
+
91
109
  /* src/web/components/sonner-toast.css */
92
110
  .homepad-toaster {
93
111
  --width: 409px;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/web/components/table-scroll.css","../../src/web/components/drawer-scroll.css","../../src/web/components/sonner-toast.css"],"sourcesContent":[".table-scroll-area {\n scrollbar-color: var(--color-storm-gray-50, #eceef0) transparent;\n scrollbar-width: thin;\n}\n\n.table-scroll-area::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n -webkit-appearance: none;\n appearance: none;\n}\n\n.table-scroll-area::-webkit-scrollbar-button,\n.table-scroll-area::-webkit-scrollbar-button:single-button,\n.table-scroll-area::-webkit-scrollbar-button:double-button,\n.table-scroll-area::-webkit-scrollbar-button:horizontal:decrement,\n.table-scroll-area::-webkit-scrollbar-button:horizontal:increment,\n.table-scroll-area::-webkit-scrollbar-button:horizontal:start:decrement,\n.table-scroll-area::-webkit-scrollbar-button:horizontal:end:increment,\n.table-scroll-area::-webkit-scrollbar-button:vertical:decrement,\n.table-scroll-area::-webkit-scrollbar-button:vertical:increment,\n.table-scroll-area::-webkit-scrollbar-button:vertical:start:decrement,\n.table-scroll-area::-webkit-scrollbar-button:vertical:end:increment,\n.table-scroll-area::-webkit-scrollbar-button:start:decrement,\n.table-scroll-area::-webkit-scrollbar-button:end:increment,\n.table-scroll-area::-webkit-scrollbar-button:decrement,\n.table-scroll-area::-webkit-scrollbar-button:increment {\n display: none;\n width: 0;\n height: 0;\n max-width: 0;\n max-height: 0;\n min-width: 0;\n min-height: 0;\n padding: 0;\n margin: 0;\n border: 0;\n background: transparent;\n -webkit-appearance: none;\n appearance: none;\n}\n\n.table-scroll-area::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.table-scroll-area::-webkit-scrollbar-thumb {\n background-color: var(--color-storm-gray-50, #eceef0);\n border-radius: 51px;\n}\n\n.table-scroll-area::-webkit-scrollbar-corner {\n background: transparent;\n}\n",".drawer-scroll-area {\n scrollbar-color: var(--color-storm-gray-200, #d5d9dd) transparent;\n /* Chrome 121+ ignores ::-webkit-scrollbar width when scrollbar-width is set. */\n scrollbar-width: unset;\n}\n\n/* Firefox has no ::-webkit-scrollbar; thin is the slimmest standard option. */\n@supports not selector(::-webkit-scrollbar) {\n .drawer-scroll-area {\n scrollbar-width: thin;\n }\n}\n\n.drawer-scroll-area::-webkit-scrollbar {\n width: 3px;\n height: 3px;\n -webkit-appearance: none;\n appearance: none;\n}\n\n.drawer-scroll-area::-webkit-scrollbar-button,\n.drawer-scroll-area::-webkit-scrollbar-button:single-button,\n.drawer-scroll-area::-webkit-scrollbar-button:double-button,\n.drawer-scroll-area::-webkit-scrollbar-button:vertical:decrement,\n.drawer-scroll-area::-webkit-scrollbar-button:vertical:increment,\n.drawer-scroll-area::-webkit-scrollbar-button:vertical:start:decrement,\n.drawer-scroll-area::-webkit-scrollbar-button:vertical:end:increment,\n.drawer-scroll-area::-webkit-scrollbar-button:start:decrement,\n.drawer-scroll-area::-webkit-scrollbar-button:end:increment,\n.drawer-scroll-area::-webkit-scrollbar-button:decrement,\n.drawer-scroll-area::-webkit-scrollbar-button:increment {\n display: none;\n width: 0;\n height: 0;\n}\n\n.drawer-scroll-area::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.drawer-scroll-area::-webkit-scrollbar-thumb {\n background-color: var(--color-storm-gray-200, #d5d9dd);\n border-radius: 9999px;\n}\n",".homepad-toaster {\n --width: 409px;\n --gap: 12px;\n --border-radius: 20px;\n font-family: var(--font-sans, 'Noto Sans Armenian', ui-sans-serif, system-ui, sans-serif);\n}\n\n.homepad-toaster [data-sonner-toast][data-styled='true'] {\n align-items: center;\n gap: 16px;\n width: 409px;\n min-height: 72px;\n height: auto;\n padding: 12px 44px 12px 12px;\n background: #fff;\n border: 1px solid var(--color-storm-gray-50, #eceef0);\n border-radius: 20px;\n box-shadow: 0 1px 4px 0 #00000014;\n color: var(--color-slate-blue, #182e3c);\n overflow: visible;\n}\n\n.homepad-toaster [data-sonner-toast][data-styled='true'][data-front='true'] {\n height: auto !important;\n}\n\n.homepad-toaster\n [data-sonner-toast][data-styled='true'][data-mounted='true'][data-expanded='true'] {\n height: auto !important;\n}\n\n.homepad-toaster [data-sonner-toast][data-styled='true'] [data-icon] {\n width: auto;\n height: auto;\n margin: 0;\n}\n\n.homepad-toaster [data-sonner-toast][data-styled='true'] [data-content] {\n gap: 2px;\n min-width: 0;\n flex: 1;\n align-self: center;\n overflow: visible;\n}\n\n.homepad-toaster .homepad-toast__title {\n font-family: var(--font-sans, 'Noto Sans Armenian', ui-sans-serif, system-ui, sans-serif);\n font-size: 14px;\n font-weight: 700;\n line-height: 19px;\n letter-spacing: 0;\n color: var(--color-slate-blue, #182e3c);\n}\n\n.homepad-toaster .homepad-toast__description {\n font-family: var(--font-sans, 'Noto Sans Armenian', ui-sans-serif, system-ui, sans-serif);\n font-size: 12px;\n font-weight: 400;\n line-height: 16px;\n letter-spacing: 0;\n color: var(--color-slate-blue, #182e3c);\n}\n\n.homepad-toaster .homepad-toast__icon-badge {\n display: flex;\n width: 48px;\n height: 48px;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n padding: 12px;\n border-radius: 12px;\n box-sizing: border-box;\n}\n\n.homepad-toaster .homepad-toast__icon-badge svg {\n width: 24px;\n height: 24px;\n margin: 0;\n flex-shrink: 0;\n}\n\n.homepad-toaster .homepad-toast__icon-badge--success {\n background: var(--color-emerald-green-0, #f0fbf5);\n}\n\n.homepad-toaster .homepad-toast__icon-badge--error {\n background: var(--color-ruby-red-0, #fff5f6);\n}\n\n.homepad-toaster .homepad-toast__icon-badge--warning {\n background: #f2a8001a;\n}\n\n.homepad-toaster .homepad-toast__icon-badge--info,\n.homepad-toaster .homepad-toast__icon-badge--default {\n background: #0f52c71a;\n}\n\n.homepad-toaster [data-sonner-toast][data-styled='true'] [data-close-button] {\n top: 50%;\n right: 12px;\n left: auto;\n width: 20px;\n height: 20px;\n transform: translateY(-50%);\n border: 0;\n background: transparent;\n box-shadow: none;\n cursor: pointer;\n}\n\n.homepad-toaster [data-sonner-toast][data-styled='true']:hover [data-close-button]:hover {\n background: transparent;\n border-color: transparent;\n cursor: pointer;\n}\n\n.homepad-toaster [data-sonner-toast][data-styled='true'] [data-close-button] svg {\n width: 20px;\n height: 20px;\n}\n\n@media (max-width: 767px) {\n .homepad-toaster {\n --width: calc(100vw - 16px);\n }\n\n .homepad-toaster[data-sonner-toaster] {\n right: var(--mobile-offset-right, 8px);\n left: var(--mobile-offset-left, 8px);\n width: calc(100vw - 16px);\n max-width: calc(100vw - 16px);\n }\n\n .homepad-toaster [data-sonner-toast][data-styled='true'] {\n right: 0;\n left: 0;\n width: 100%;\n }\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/web/components/table-scroll.css","../../src/web/components/drawer-scroll.css","../../src/web/components/modal-motion.css","../../src/web/components/sonner-toast.css"],"sourcesContent":[".table-scroll-area {\n scrollbar-color: var(--color-storm-gray-50, #eceef0) transparent;\n scrollbar-width: thin;\n}\n\n.table-scroll-area::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n -webkit-appearance: none;\n appearance: none;\n}\n\n.table-scroll-area::-webkit-scrollbar-button,\n.table-scroll-area::-webkit-scrollbar-button:single-button,\n.table-scroll-area::-webkit-scrollbar-button:double-button,\n.table-scroll-area::-webkit-scrollbar-button:horizontal:decrement,\n.table-scroll-area::-webkit-scrollbar-button:horizontal:increment,\n.table-scroll-area::-webkit-scrollbar-button:horizontal:start:decrement,\n.table-scroll-area::-webkit-scrollbar-button:horizontal:end:increment,\n.table-scroll-area::-webkit-scrollbar-button:vertical:decrement,\n.table-scroll-area::-webkit-scrollbar-button:vertical:increment,\n.table-scroll-area::-webkit-scrollbar-button:vertical:start:decrement,\n.table-scroll-area::-webkit-scrollbar-button:vertical:end:increment,\n.table-scroll-area::-webkit-scrollbar-button:start:decrement,\n.table-scroll-area::-webkit-scrollbar-button:end:increment,\n.table-scroll-area::-webkit-scrollbar-button:decrement,\n.table-scroll-area::-webkit-scrollbar-button:increment {\n display: none;\n width: 0;\n height: 0;\n max-width: 0;\n max-height: 0;\n min-width: 0;\n min-height: 0;\n padding: 0;\n margin: 0;\n border: 0;\n background: transparent;\n -webkit-appearance: none;\n appearance: none;\n}\n\n.table-scroll-area::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.table-scroll-area::-webkit-scrollbar-thumb {\n background-color: var(--color-storm-gray-50, #eceef0);\n border-radius: 51px;\n}\n\n.table-scroll-area::-webkit-scrollbar-corner {\n background: transparent;\n}\n",".drawer-scroll-area {\n scrollbar-color: var(--color-storm-gray-200, #d5d9dd) transparent;\n /* Chrome 121+ ignores ::-webkit-scrollbar width when scrollbar-width is set. */\n scrollbar-width: unset;\n}\n\n/* Firefox has no ::-webkit-scrollbar; thin is the slimmest standard option. */\n@supports not selector(::-webkit-scrollbar) {\n .drawer-scroll-area {\n scrollbar-width: thin;\n }\n}\n\n.drawer-scroll-area::-webkit-scrollbar {\n width: 3px;\n height: 3px;\n -webkit-appearance: none;\n appearance: none;\n}\n\n.drawer-scroll-area::-webkit-scrollbar-button,\n.drawer-scroll-area::-webkit-scrollbar-button:single-button,\n.drawer-scroll-area::-webkit-scrollbar-button:double-button,\n.drawer-scroll-area::-webkit-scrollbar-button:vertical:decrement,\n.drawer-scroll-area::-webkit-scrollbar-button:vertical:increment,\n.drawer-scroll-area::-webkit-scrollbar-button:vertical:start:decrement,\n.drawer-scroll-area::-webkit-scrollbar-button:vertical:end:increment,\n.drawer-scroll-area::-webkit-scrollbar-button:start:decrement,\n.drawer-scroll-area::-webkit-scrollbar-button:end:increment,\n.drawer-scroll-area::-webkit-scrollbar-button:decrement,\n.drawer-scroll-area::-webkit-scrollbar-button:increment {\n display: none;\n width: 0;\n height: 0;\n}\n\n.drawer-scroll-area::-webkit-scrollbar-track {\n background: transparent;\n}\n\n.drawer-scroll-area::-webkit-scrollbar-thumb {\n background-color: var(--color-storm-gray-200, #d5d9dd);\n border-radius: 9999px;\n}\n","@keyframes homepad-modal-in {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n}\n\n.homepad-modal-in {\n animation: homepad-modal-in 300ms ease;\n}\n\n@media (prefers-reduced-motion: reduce) {\n .homepad-modal-in {\n animation: none;\n }\n}\n",".homepad-toaster {\n --width: 409px;\n --gap: 12px;\n --border-radius: 20px;\n font-family: var(--font-sans, 'Noto Sans Armenian', ui-sans-serif, system-ui, sans-serif);\n}\n\n.homepad-toaster [data-sonner-toast][data-styled='true'] {\n align-items: center;\n gap: 16px;\n width: 409px;\n min-height: 72px;\n height: auto;\n padding: 12px 44px 12px 12px;\n background: #fff;\n border: 1px solid var(--color-storm-gray-50, #eceef0);\n border-radius: 20px;\n box-shadow: 0 1px 4px 0 #00000014;\n color: var(--color-slate-blue, #182e3c);\n overflow: visible;\n}\n\n.homepad-toaster [data-sonner-toast][data-styled='true'][data-front='true'] {\n height: auto !important;\n}\n\n.homepad-toaster\n [data-sonner-toast][data-styled='true'][data-mounted='true'][data-expanded='true'] {\n height: auto !important;\n}\n\n.homepad-toaster [data-sonner-toast][data-styled='true'] [data-icon] {\n width: auto;\n height: auto;\n margin: 0;\n}\n\n.homepad-toaster [data-sonner-toast][data-styled='true'] [data-content] {\n gap: 2px;\n min-width: 0;\n flex: 1;\n align-self: center;\n overflow: visible;\n}\n\n.homepad-toaster .homepad-toast__title {\n font-family: var(--font-sans, 'Noto Sans Armenian', ui-sans-serif, system-ui, sans-serif);\n font-size: 14px;\n font-weight: 700;\n line-height: 19px;\n letter-spacing: 0;\n color: var(--color-slate-blue, #182e3c);\n}\n\n.homepad-toaster .homepad-toast__description {\n font-family: var(--font-sans, 'Noto Sans Armenian', ui-sans-serif, system-ui, sans-serif);\n font-size: 12px;\n font-weight: 400;\n line-height: 16px;\n letter-spacing: 0;\n color: var(--color-slate-blue, #182e3c);\n}\n\n.homepad-toaster .homepad-toast__icon-badge {\n display: flex;\n width: 48px;\n height: 48px;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n padding: 12px;\n border-radius: 12px;\n box-sizing: border-box;\n}\n\n.homepad-toaster .homepad-toast__icon-badge svg {\n width: 24px;\n height: 24px;\n margin: 0;\n flex-shrink: 0;\n}\n\n.homepad-toaster .homepad-toast__icon-badge--success {\n background: var(--color-emerald-green-0, #f0fbf5);\n}\n\n.homepad-toaster .homepad-toast__icon-badge--error {\n background: var(--color-ruby-red-0, #fff5f6);\n}\n\n.homepad-toaster .homepad-toast__icon-badge--warning {\n background: #f2a8001a;\n}\n\n.homepad-toaster .homepad-toast__icon-badge--info,\n.homepad-toaster .homepad-toast__icon-badge--default {\n background: #0f52c71a;\n}\n\n.homepad-toaster [data-sonner-toast][data-styled='true'] [data-close-button] {\n top: 50%;\n right: 12px;\n left: auto;\n width: 20px;\n height: 20px;\n transform: translateY(-50%);\n border: 0;\n background: transparent;\n box-shadow: none;\n cursor: pointer;\n}\n\n.homepad-toaster [data-sonner-toast][data-styled='true']:hover [data-close-button]:hover {\n background: transparent;\n border-color: transparent;\n cursor: pointer;\n}\n\n.homepad-toaster [data-sonner-toast][data-styled='true'] [data-close-button] svg {\n width: 20px;\n height: 20px;\n}\n\n@media (max-width: 767px) {\n .homepad-toaster {\n --width: calc(100vw - 16px);\n }\n\n .homepad-toaster[data-sonner-toaster] {\n right: var(--mobile-offset-right, 8px);\n left: var(--mobile-offset-left, 8px);\n width: calc(100vw - 16px);\n max-width: calc(100vw - 16px);\n }\n\n .homepad-toaster [data-sonner-toast][data-styled='true'] {\n right: 0;\n left: 0;\n width: 100%;\n }\n}\n"],"mappings":"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","names":[]}
@@ -13,6 +13,7 @@ type AdminNavItem = {
13
13
  hidden?: boolean;
14
14
  disabled?: boolean;
15
15
  onClick?: () => void;
16
+ onboardingId?: string;
16
17
  };
17
18
  type AdminSidebarUser = {
18
19
  fullName: string;
@@ -145,7 +146,7 @@ type SidebarNavItemProps = {
145
146
  isActive: boolean;
146
147
  onNavigate?: (item: AdminNavItem) => void;
147
148
  };
148
- declare function SidebarNavItem({ item, isOpen, isActive, onNavigate }: SidebarNavItemProps): react.JSX.Element | null;
149
+ declare function SidebarNavItem({ item, isOpen, isActive, onNavigate, }: SidebarNavItemProps): react.JSX.Element | null;
149
150
 
150
151
  /**
151
152
  * Matches React Router `<NavLink end>` semantics using a host-provided pathname.
@@ -276,7 +277,7 @@ type PaginationProps = {
276
277
  };
277
278
  declare function Pagination({ page, pageSize, total, onPageChange, labels, maxPageButtons, variant, className, hideOnSinglePage, }: PaginationProps): react.JSX.Element | null;
278
279
 
279
- type TableActionsMenuItemTone = 'default' | 'success' | 'danger';
280
+ type TableActionsMenuItemTone = "default" | "success" | "danger";
280
281
  type TableActionsMenuItem = {
281
282
  id: string;
282
283
  label: string;
@@ -296,8 +297,11 @@ type TableActionsMenuProps = {
296
297
  menuWidth?: number;
297
298
  /** Size the menu to its content width instead of a fixed pixel width. Defaults to true so labels stay on one line. */
298
299
  menuFitContent?: boolean;
300
+ /** Keep the menu open while a page tour is explaining this row. */
301
+ forceOpen?: boolean;
302
+ menuOnboardingId?: string;
299
303
  };
300
- declare function TableActionsMenu({ items, triggerAriaLabel, className, menuClassName, triggerIcon, menuWidth, menuFitContent, }: TableActionsMenuProps): react.JSX.Element | null;
304
+ declare function TableActionsMenu({ items, triggerAriaLabel, className, menuClassName, triggerIcon, menuWidth, menuFitContent, forceOpen, menuOnboardingId, }: TableActionsMenuProps): react.JSX.Element | null;
301
305
 
302
306
  type TableRowActionsConfig = {
303
307
  status: ReactNode;
@@ -396,7 +400,7 @@ type TableHeadProps = ThHTMLAttributes<HTMLTableCellElement> & {
396
400
  onSort?: () => void;
397
401
  children?: ReactNode;
398
402
  };
399
- declare function TableHead({ className, align, sortable, sortDirection, onSort, children, ...props }: TableHeadProps): react.JSX.Element;
403
+ declare function TableHead({ className, align, sortable, sortDirection, onSort, children, onClick, onKeyDown, ...props }: TableHeadProps): react.JSX.Element;
400
404
 
401
405
  type TableCellProps = TdHTMLAttributes<HTMLTableCellElement> & {
402
406
  variant?: TableCellVariant;
@@ -474,10 +478,11 @@ type ModalProps = {
474
478
  closeOnBackdrop?: boolean;
475
479
  closeOnEscape?: boolean;
476
480
  containerClassName?: string;
481
+ containerDataOnboarding?: string;
477
482
  contentClassName?: string;
478
483
  buttonClassName?: string;
479
484
  };
480
- declare function Modal({ open, title, subtitle, icon, iconContainerClassName, titleClassName, subtitleClassName, children, cancelText, confirmText, onCancel, onConfirm, footerAlign, footerLayout, cancelDisabled, confirmDisabled, closeOnBackdrop, closeOnEscape, containerClassName, contentClassName, buttonClassName, }: ModalProps): react.JSX.Element | null;
485
+ declare function Modal({ open, title, subtitle, icon, iconContainerClassName, titleClassName, subtitleClassName, children, cancelText, confirmText, onCancel, onConfirm, footerAlign, footerLayout, cancelDisabled, confirmDisabled, closeOnBackdrop, closeOnEscape, containerClassName, containerDataOnboarding, contentClassName, buttonClassName, }: ModalProps): react.JSX.Element | null;
481
486
 
482
487
  type DrawerProps = {
483
488
  open: boolean;
@@ -13,6 +13,7 @@ type AdminNavItem = {
13
13
  hidden?: boolean;
14
14
  disabled?: boolean;
15
15
  onClick?: () => void;
16
+ onboardingId?: string;
16
17
  };
17
18
  type AdminSidebarUser = {
18
19
  fullName: string;
@@ -145,7 +146,7 @@ type SidebarNavItemProps = {
145
146
  isActive: boolean;
146
147
  onNavigate?: (item: AdminNavItem) => void;
147
148
  };
148
- declare function SidebarNavItem({ item, isOpen, isActive, onNavigate }: SidebarNavItemProps): react.JSX.Element | null;
149
+ declare function SidebarNavItem({ item, isOpen, isActive, onNavigate, }: SidebarNavItemProps): react.JSX.Element | null;
149
150
 
150
151
  /**
151
152
  * Matches React Router `<NavLink end>` semantics using a host-provided pathname.
@@ -276,7 +277,7 @@ type PaginationProps = {
276
277
  };
277
278
  declare function Pagination({ page, pageSize, total, onPageChange, labels, maxPageButtons, variant, className, hideOnSinglePage, }: PaginationProps): react.JSX.Element | null;
278
279
 
279
- type TableActionsMenuItemTone = 'default' | 'success' | 'danger';
280
+ type TableActionsMenuItemTone = "default" | "success" | "danger";
280
281
  type TableActionsMenuItem = {
281
282
  id: string;
282
283
  label: string;
@@ -296,8 +297,11 @@ type TableActionsMenuProps = {
296
297
  menuWidth?: number;
297
298
  /** Size the menu to its content width instead of a fixed pixel width. Defaults to true so labels stay on one line. */
298
299
  menuFitContent?: boolean;
300
+ /** Keep the menu open while a page tour is explaining this row. */
301
+ forceOpen?: boolean;
302
+ menuOnboardingId?: string;
299
303
  };
300
- declare function TableActionsMenu({ items, triggerAriaLabel, className, menuClassName, triggerIcon, menuWidth, menuFitContent, }: TableActionsMenuProps): react.JSX.Element | null;
304
+ declare function TableActionsMenu({ items, triggerAriaLabel, className, menuClassName, triggerIcon, menuWidth, menuFitContent, forceOpen, menuOnboardingId, }: TableActionsMenuProps): react.JSX.Element | null;
301
305
 
302
306
  type TableRowActionsConfig = {
303
307
  status: ReactNode;
@@ -396,7 +400,7 @@ type TableHeadProps = ThHTMLAttributes<HTMLTableCellElement> & {
396
400
  onSort?: () => void;
397
401
  children?: ReactNode;
398
402
  };
399
- declare function TableHead({ className, align, sortable, sortDirection, onSort, children, ...props }: TableHeadProps): react.JSX.Element;
403
+ declare function TableHead({ className, align, sortable, sortDirection, onSort, children, onClick, onKeyDown, ...props }: TableHeadProps): react.JSX.Element;
400
404
 
401
405
  type TableCellProps = TdHTMLAttributes<HTMLTableCellElement> & {
402
406
  variant?: TableCellVariant;
@@ -474,10 +478,11 @@ type ModalProps = {
474
478
  closeOnBackdrop?: boolean;
475
479
  closeOnEscape?: boolean;
476
480
  containerClassName?: string;
481
+ containerDataOnboarding?: string;
477
482
  contentClassName?: string;
478
483
  buttonClassName?: string;
479
484
  };
480
- declare function Modal({ open, title, subtitle, icon, iconContainerClassName, titleClassName, subtitleClassName, children, cancelText, confirmText, onCancel, onConfirm, footerAlign, footerLayout, cancelDisabled, confirmDisabled, closeOnBackdrop, closeOnEscape, containerClassName, contentClassName, buttonClassName, }: ModalProps): react.JSX.Element | null;
485
+ declare function Modal({ open, title, subtitle, icon, iconContainerClassName, titleClassName, subtitleClassName, children, cancelText, confirmText, onCancel, onConfirm, footerAlign, footerLayout, cancelDisabled, confirmDisabled, closeOnBackdrop, closeOnEscape, containerClassName, containerDataOnboarding, contentClassName, buttonClassName, }: ModalProps): react.JSX.Element | null;
481
486
 
482
487
  type DrawerProps = {
483
488
  open: boolean;
package/dist/web/index.js CHANGED
@@ -27528,7 +27528,7 @@ var require_react_dom_development = __commonJS({
27528
27528
  return root2;
27529
27529
  }
27530
27530
  var ReactVersion = "18.3.1";
27531
- function createPortal3(children, containerInfo, implementation) {
27531
+ function createPortal4(children, containerInfo, implementation) {
27532
27532
  var key = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : null;
27533
27533
  {
27534
27534
  checkKeyStringCoercion(key);
@@ -28384,7 +28384,7 @@ var require_react_dom_development = __commonJS({
28384
28384
  if (!isValidContainer(container)) {
28385
28385
  throw new Error("Target container is not a DOM element.");
28386
28386
  }
28387
- return createPortal3(children, container, null, key);
28387
+ return createPortal4(children, container, null, key);
28388
28388
  }
28389
28389
  function renderSubtreeIntoContainer(parentComponent, element, containerNode, callback) {
28390
28390
  return unstable_renderSubtreeIntoContainer(parentComponent, element, containerNode, callback);
@@ -28967,7 +28967,12 @@ function isNavItemActive(pathname, item) {
28967
28967
  }
28968
28968
  return pathname === item.to || pathname.startsWith(`${item.to}/`);
28969
28969
  }
28970
- function SidebarNavItem({ item, isOpen, isActive, onNavigate }) {
28970
+ function SidebarNavItem({
28971
+ item,
28972
+ isOpen,
28973
+ isActive,
28974
+ onNavigate
28975
+ }) {
28971
28976
  if (item.hidden) {
28972
28977
  return null;
28973
28978
  }
@@ -28985,6 +28990,7 @@ function SidebarNavItem({ item, isOpen, isActive, onNavigate }) {
28985
28990
  type: "button",
28986
28991
  onClick: handleClick,
28987
28992
  "aria-current": isActive ? "page" : void 0,
28993
+ "data-onboarding": item.onboardingId,
28988
28994
  "aria-disabled": item.disabled,
28989
28995
  disabled: item.disabled,
28990
28996
  tabIndex: item.disabled ? -1 : void 0,
@@ -29254,12 +29260,12 @@ function Sidebar({
29254
29260
  )
29255
29261
  }
29256
29262
  ),
29257
- showCollapsedRail && mobileOpen ? /* @__PURE__ */ jsx("div", { className: "h-screen w-[76px] shrink-0", "aria-hidden": true }) : null,
29263
+ showCollapsedRail && mobileOpen ? /* @__PURE__ */ jsx("div", { className: "h-dvh w-[76px] shrink-0", "aria-hidden": true }) : null,
29258
29264
  /* @__PURE__ */ jsxs(
29259
29265
  "aside",
29260
29266
  {
29261
29267
  className: cn(
29262
- "fixed inset-y-0 left-0 z-50 flex h-screen w-[min(300px,85vw)] flex-col gap-8 overflow-hidden bg-navy p-4 shadow-xl",
29268
+ "fixed inset-y-0 left-0 z-50 flex h-dvh w-[min(300px,85vw)] flex-col gap-8 overflow-hidden bg-navy p-4 shadow-xl",
29263
29269
  "transition-[transform,width,padding,gap] duration-300 ease-in-out will-change-[transform,width]",
29264
29270
  mobileOpen ? "translate-x-0" : "-translate-x-full pointer-events-none",
29265
29271
  "md:relative md:z-auto md:w-[76px] md:translate-x-0 md:pointer-events-auto md:shadow-none md:items-center md:gap-2 md:px-3 md:py-4",
@@ -29392,9 +29398,9 @@ function DashboardLayout({
29392
29398
  className,
29393
29399
  mainClassName
29394
29400
  }) {
29395
- return /* @__PURE__ */ jsxs("div", { className: cn("flex h-screen min-w-0 overflow-hidden flex-row bg-storm-gray-0", className), children: [
29396
- /* @__PURE__ */ jsx("div", { className: "max-md:contents md:h-screen md:shrink-0", children: /* @__PURE__ */ jsx(Sidebar, { ...sidebar }) }),
29397
- /* @__PURE__ */ jsxs("div", { className: "flex h-screen min-h-0 min-w-0 flex-1 flex-col overflow-hidden", children: [
29401
+ return /* @__PURE__ */ jsxs("div", { className: cn("flex h-dvh min-w-0 overflow-hidden flex-row bg-storm-gray-0", className), children: [
29402
+ /* @__PURE__ */ jsx("div", { className: "max-md:contents md:h-dvh md:shrink-0", children: /* @__PURE__ */ jsx(Sidebar, { ...sidebar }) }),
29403
+ /* @__PURE__ */ jsxs("div", { className: "flex h-dvh min-h-0 min-w-0 flex-1 flex-col overflow-hidden", children: [
29398
29404
  /* @__PURE__ */ jsx(SidebarMobileHeader, { ...mobileHeader }),
29399
29405
  /* @__PURE__ */ jsx(AppHeader, { ...header }),
29400
29406
  /* @__PURE__ */ jsx("main", { className: mainClassName ?? "min-h-0 min-w-0 flex-1 overflow-x-hidden overflow-y-auto p-4 xl:p-6", children })
@@ -29926,16 +29932,16 @@ function TableHead({
29926
29932
  sortDirection = null,
29927
29933
  onSort,
29928
29934
  children,
29935
+ onClick,
29936
+ onKeyDown,
29929
29937
  ...props
29930
29938
  }) {
29931
29939
  const isSortable = sortable && onSort != null;
29932
29940
  const content = isSortable ? /* @__PURE__ */ jsxs(
29933
- "button",
29941
+ "span",
29934
29942
  {
29935
- type: "button",
29936
- onClick: onSort,
29937
29943
  className: cn(
29938
- "inline-flex w-full cursor-pointer items-center gap-2.5 border-0 bg-transparent p-0 font-[inherit] text-[length:inherit] leading-[inherit] tracking-[inherit] text-inherit transition-colors hover:text-storm-gray-500",
29944
+ "inline-flex w-full items-center gap-2.5 font-[inherit] text-[length:inherit] leading-[inherit] tracking-[inherit] text-inherit",
29939
29945
  tableHeadSortButtonAlignClasses[align]
29940
29946
  ),
29941
29947
  children: [
@@ -29952,10 +29958,29 @@ function TableHead({
29952
29958
  tableHeadPaddingClassName,
29953
29959
  tableHeaderClassName,
29954
29960
  !isSortable && tableAlignClasses[align],
29961
+ isSortable && "cursor-pointer select-none hover:text-storm-gray-500",
29955
29962
  className
29956
29963
  ),
29957
29964
  "aria-sort": resolveAriaSort(sortDirection, isSortable),
29965
+ tabIndex: isSortable ? 0 : void 0,
29958
29966
  ...props,
29967
+ onClick: (event) => {
29968
+ onClick?.(event);
29969
+ if (event.defaultPrevented || !isSortable) {
29970
+ return;
29971
+ }
29972
+ onSort();
29973
+ },
29974
+ onKeyDown: (event) => {
29975
+ onKeyDown?.(event);
29976
+ if (event.defaultPrevented || !isSortable) {
29977
+ return;
29978
+ }
29979
+ if (event.key === "Enter" || event.key === " ") {
29980
+ event.preventDefault();
29981
+ onSort();
29982
+ }
29983
+ },
29959
29984
  children: content
29960
29985
  }
29961
29986
  );
@@ -30057,7 +30082,10 @@ function clampMenuLeft(left, menuWidth) {
30057
30082
  return left;
30058
30083
  }
30059
30084
  const minLeft = MENU_VIEWPORT_MARGIN_PX;
30060
- const maxLeft = Math.max(minLeft, window.innerWidth - menuWidth - MENU_VIEWPORT_MARGIN_PX);
30085
+ const maxLeft = Math.max(
30086
+ minLeft,
30087
+ window.innerWidth - menuWidth - MENU_VIEWPORT_MARGIN_PX
30088
+ );
30061
30089
  return Math.min(Math.max(left, minLeft), maxLeft);
30062
30090
  }
30063
30091
  function resolveMenuItemIcon(item) {
@@ -30080,7 +30108,9 @@ function TableActionsMenu({
30080
30108
  menuClassName,
30081
30109
  triggerIcon,
30082
30110
  menuWidth = MENU_WIDTH_PX,
30083
- menuFitContent = true
30111
+ menuFitContent = true,
30112
+ forceOpen,
30113
+ menuOnboardingId
30084
30114
  }) {
30085
30115
  const [open, setOpen] = useState(false);
30086
30116
  const [menuPosition, setMenuPosition] = useState(null);
@@ -30089,8 +30119,17 @@ function TableActionsMenu({
30089
30119
  const triggerRef = useRef(null);
30090
30120
  const menuId = useId();
30091
30121
  const closeMenu = useCallback(() => {
30122
+ if (forceOpen) {
30123
+ return;
30124
+ }
30092
30125
  setOpen(false);
30093
- }, []);
30126
+ }, [forceOpen]);
30127
+ useEffect(() => {
30128
+ if (forceOpen === void 0) {
30129
+ return;
30130
+ }
30131
+ setOpen(forceOpen);
30132
+ }, [forceOpen]);
30094
30133
  const updateMenuPosition = useCallback(() => {
30095
30134
  const trigger = triggerRef.current;
30096
30135
  const menuEl = menuRef.current;
@@ -30100,7 +30139,10 @@ function TableActionsMenu({
30100
30139
  const rect = trigger.getBoundingClientRect();
30101
30140
  const viewportMaxWidth = typeof window === "undefined" ? menuWidth : Math.max(menuWidth, window.innerWidth - MENU_VIEWPORT_MARGIN_PX * 2);
30102
30141
  const measuredWidth = menuFitContent ? menuEl?.offsetWidth || menuEl?.getBoundingClientRect().width || menuWidth : menuWidth;
30103
- const resolvedMenuWidth = Math.min(Math.max(measuredWidth, 1), viewportMaxWidth);
30142
+ const resolvedMenuWidth = Math.min(
30143
+ Math.max(measuredWidth, 1),
30144
+ viewportMaxWidth
30145
+ );
30104
30146
  setMenuPosition({
30105
30147
  top: rect.bottom + MENU_OFFSET_PX,
30106
30148
  left: clampMenuLeft(rect.right - resolvedMenuWidth, resolvedMenuWidth)
@@ -30119,6 +30161,9 @@ function TableActionsMenu({
30119
30161
  return;
30120
30162
  }
30121
30163
  const closeOnScroll = () => {
30164
+ if (forceOpen) {
30165
+ return;
30166
+ }
30122
30167
  closeMenu();
30123
30168
  };
30124
30169
  window.addEventListener("resize", updateMenuPosition);
@@ -30135,7 +30180,7 @@ function TableActionsMenu({
30135
30180
  window.removeEventListener("scroll", closeOnScroll, true);
30136
30181
  document.removeEventListener("keydown", closeOnEscape);
30137
30182
  };
30138
- }, [closeMenu, open, updateMenuPosition]);
30183
+ }, [closeMenu, forceOpen, open, updateMenuPosition]);
30139
30184
  if (items.length === 0) {
30140
30185
  return null;
30141
30186
  }
@@ -30155,6 +30200,7 @@ function TableActionsMenu({
30155
30200
  visibility: menuPosition != null ? "visible" : "hidden",
30156
30201
  pointerEvents: menuPosition != null ? "auto" : "none"
30157
30202
  },
30203
+ ...menuOnboardingId ? { "data-onboarding": menuOnboardingId } : {},
30158
30204
  className: cn(
30159
30205
  "z-50 overflow-hidden rounded-2xl border border-storm-gray-50 bg-white shadow-[0_4px_20px_0_rgba(0,0,0,0.05)]",
30160
30206
  menuClassName
@@ -30439,6 +30485,7 @@ function Modal({
30439
30485
  closeOnBackdrop = true,
30440
30486
  closeOnEscape = true,
30441
30487
  containerClassName,
30488
+ containerDataOnboarding,
30442
30489
  contentClassName,
30443
30490
  buttonClassName
30444
30491
  }) {
@@ -30463,14 +30510,11 @@ function Modal({
30463
30510
  if (!open) {
30464
30511
  return null;
30465
30512
  }
30466
- const sharedButtonClassName = cn(
30467
- "btn h-13 w-full! min-w-0! justify-center!",
30468
- buttonClassName
30469
- );
30513
+ const sharedButtonClassName = cn("btn h-13 w-full! min-w-0! justify-center!", buttonClassName);
30470
30514
  const modal = /* @__PURE__ */ jsx(
30471
30515
  "div",
30472
30516
  {
30473
- className: "fixed inset-0 z-[100] flex items-center justify-center p-4 backdrop-blur-[12px] bg-storm-gray-850/40",
30517
+ className: "homepad-modal-in fixed inset-0 z-[100] flex items-center justify-center bg-storm-gray-850/40 p-4 backdrop-blur-[12px]",
30474
30518
  onPointerDown: backdropDismiss.onPointerDown,
30475
30519
  onClick: backdropDismiss.onClick,
30476
30520
  role: "presentation",
@@ -30481,6 +30525,7 @@ function Modal({
30481
30525
  "aria-modal": "true",
30482
30526
  "aria-labelledby": "homepad-modal-title",
30483
30527
  ...subtitle ? { "aria-describedby": "homepad-modal-subtitle" } : {},
30528
+ ...containerDataOnboarding ? { "data-onboarding": containerDataOnboarding } : {},
30484
30529
  className: cn(
30485
30530
  "flex max-h-[min(90dvh,calc(100dvh-2rem))] w-full max-w-2xl flex-col gap-6 rounded-2xl bg-white p-4 opacity-100 md:p-6",
30486
30531
  containerClassName
@@ -30519,7 +30564,16 @@ function Modal({
30519
30564
  ) : null
30520
30565
  ] })
30521
30566
  ] }),
30522
- /* @__PURE__ */ jsx("div", { className: cn("drawer-scroll-area min-h-0 min-w-0 flex-1 overflow-y-auto", contentClassName), children }),
30567
+ /* @__PURE__ */ jsx(
30568
+ "div",
30569
+ {
30570
+ className: cn(
30571
+ "drawer-scroll-area min-h-0 min-w-0 flex-1 overflow-y-auto",
30572
+ contentClassName
30573
+ ),
30574
+ children
30575
+ }
30576
+ ),
30523
30577
  /* @__PURE__ */ jsxs(
30524
30578
  "footer",
30525
30579
  {
@@ -30562,16 +30616,22 @@ function Modal({
30562
30616
  );
30563
30617
  return typeof document !== "undefined" ? (0, import_react_dom2.createPortal)(modal, document.body) : modal;
30564
30618
  }
30619
+
30620
+ // src/web/components/Drawer.tsx
30621
+ var import_react_dom3 = __toESM(require_react_dom(), 1);
30565
30622
  var DRAWER_TRANSITION_MS = 300;
30566
30623
  var bodyScrollLockCount = 0;
30567
30624
  var previousBodyOverflow = "";
30625
+ var previousHtmlOverflow = "";
30568
30626
  function lockBodyScroll() {
30569
30627
  if (typeof document === "undefined") {
30570
30628
  return;
30571
30629
  }
30572
30630
  if (bodyScrollLockCount === 0) {
30573
30631
  previousBodyOverflow = document.body.style.overflow;
30632
+ previousHtmlOverflow = document.documentElement.style.overflow;
30574
30633
  document.body.style.overflow = "hidden";
30634
+ document.documentElement.style.overflow = "hidden";
30575
30635
  }
30576
30636
  bodyScrollLockCount += 1;
30577
30637
  }
@@ -30582,7 +30642,9 @@ function unlockBodyScroll() {
30582
30642
  bodyScrollLockCount = Math.max(0, bodyScrollLockCount - 1);
30583
30643
  if (bodyScrollLockCount === 0) {
30584
30644
  document.body.style.overflow = previousBodyOverflow;
30645
+ document.documentElement.style.overflow = previousHtmlOverflow;
30585
30646
  previousBodyOverflow = "";
30647
+ previousHtmlOverflow = "";
30586
30648
  }
30587
30649
  }
30588
30650
  function Drawer({
@@ -30653,13 +30715,13 @@ function Drawer({
30653
30715
  window.removeEventListener("keydown", handleKeyDown);
30654
30716
  };
30655
30717
  }, [isPresent, onClose]);
30656
- if (!isPresent) {
30718
+ if (!open && !isPresent) {
30657
30719
  return null;
30658
30720
  }
30659
- return /* @__PURE__ */ jsxs(
30721
+ const drawer = /* @__PURE__ */ jsxs(
30660
30722
  "div",
30661
30723
  {
30662
- className: "fixed inset-0 z-50 flex justify-end p-2 max-md:p-0",
30724
+ className: "fixed inset-0 z-50 flex justify-end overscroll-none p-2 max-md:p-0",
30663
30725
  role: "presentation",
30664
30726
  children: [
30665
30727
  /* @__PURE__ */ jsx(
@@ -30683,7 +30745,7 @@ function Drawer({
30683
30745
  "aria-labelledby": "homepad-drawer-title",
30684
30746
  ...subtitle ? { "aria-describedby": "homepad-drawer-subtitle" } : {},
30685
30747
  className: cn(
30686
- "relative z-10 flex h-[calc(100dvh-16px)] min-h-0 cursor-auto flex-col overflow-hidden rounded-[16px] bg-white shadow-2xl transition-transform duration-300 ease-in-out max-md:h-dvh max-md:rounded-none",
30748
+ "relative z-10 flex h-full max-h-full min-h-0 cursor-auto flex-col overflow-hidden rounded-[16px] bg-white shadow-2xl transition-transform duration-300 ease-in-out max-md:rounded-none",
30687
30749
  // Keep GPU transform only while animating — settled translate-x-0 blurs text.
30688
30750
  !isTransformSettled && "will-change-transform",
30689
30751
  isAnimatedIn ? isTransformSettled ? "transform-none" : "translate-x-0" : "translate-x-full",
@@ -30691,48 +30753,48 @@ function Drawer({
30691
30753
  className
30692
30754
  ),
30693
30755
  children: [
30694
- /* @__PURE__ */ jsxs(
30695
- "header",
30696
- {
30697
- className: cn("shrink-0 border-b border-storm-gray-50", headerClassName),
30698
- children: [
30699
- /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between pt-6 pr-6 pb-4 pl-6", children: [
30700
- /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex flex-col gap-1", children: [
30701
- /* @__PURE__ */ jsx(
30702
- "h2",
30703
- {
30704
- id: "homepad-drawer-title",
30705
- className: "typography-title-sm tracking-normal text-black",
30706
- children: title
30707
- }
30756
+ /* @__PURE__ */ jsxs("header", { className: cn("shrink-0 border-b border-storm-gray-50", headerClassName), children: [
30757
+ /* @__PURE__ */ jsxs("div", { className: "flex items-start justify-between pt-6 pr-6 pb-4 pl-6", children: [
30758
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex flex-col gap-1", children: [
30759
+ /* @__PURE__ */ jsx(
30760
+ "h2",
30761
+ {
30762
+ id: "homepad-drawer-title",
30763
+ className: "typography-title-sm tracking-normal text-black",
30764
+ children: title
30765
+ }
30766
+ ),
30767
+ subtitle ? /* @__PURE__ */ jsx(
30768
+ "p",
30769
+ {
30770
+ id: "homepad-drawer-subtitle",
30771
+ className: cn(
30772
+ "typography-body tracking-normal text-storm-gray-400",
30773
+ subtitleClassName
30708
30774
  ),
30709
- subtitle ? /* @__PURE__ */ jsx(
30710
- "p",
30711
- {
30712
- id: "homepad-drawer-subtitle",
30713
- className: cn(
30714
- "typography-body tracking-normal text-storm-gray-400",
30715
- subtitleClassName
30716
- ),
30717
- children: subtitle
30718
- }
30719
- ) : null
30720
- ] }),
30721
- /* @__PURE__ */ jsx(
30722
- "button",
30775
+ children: subtitle
30776
+ }
30777
+ ) : null
30778
+ ] }),
30779
+ /* @__PURE__ */ jsx(
30780
+ "button",
30781
+ {
30782
+ type: "button",
30783
+ "aria-label": closeAriaLabel,
30784
+ className: "flex size-8 shrink-0 cursor-pointer items-center justify-center rounded-lg text-storm-gray-400 transition-colors hover:bg-storm-gray-50 hover:text-storm-gray-600",
30785
+ onClick: onClose,
30786
+ children: /* @__PURE__ */ jsx(
30787
+ X,
30723
30788
  {
30724
- type: "button",
30725
- "aria-label": closeAriaLabel,
30726
- className: "flex size-8 shrink-0 cursor-pointer items-center justify-center rounded-lg text-storm-gray-400 transition-colors hover:bg-storm-gray-50 hover:text-storm-gray-600",
30727
- onClick: onClose,
30728
- children: /* @__PURE__ */ jsx(X, { className: "size-5", strokeWidth: 1.75 })
30789
+ className: "size-5",
30790
+ strokeWidth: 1.75
30729
30791
  }
30730
30792
  )
30731
- ] }),
30732
- headerBottom ? /* @__PURE__ */ jsx("div", { className: "border-t border-storm-gray-50 px-6", children: headerBottom }) : null
30733
- ]
30734
- }
30735
- ),
30793
+ }
30794
+ )
30795
+ ] }),
30796
+ headerBottom ? /* @__PURE__ */ jsx("div", { className: "border-t border-storm-gray-50 px-6", children: headerBottom }) : null
30797
+ ] }),
30736
30798
  /* @__PURE__ */ jsx(
30737
30799
  "div",
30738
30800
  {
@@ -30750,6 +30812,7 @@ function Drawer({
30750
30812
  ]
30751
30813
  }
30752
30814
  );
30815
+ return typeof document !== "undefined" ? (0, import_react_dom3.createPortal)(drawer, document.body) : drawer;
30753
30816
  }
30754
30817
  function TimelineCheckIcon({ className, ...props }) {
30755
30818
  return /* @__PURE__ */ jsx(