@comitor/ui 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +458 -0
- package/dist/chart/chart.d.ts +88 -0
- package/dist/chart/chart.js +199 -0
- package/dist/chart/chart.js.map +1 -0
- package/dist/chart/comitor-chart.d.ts +109 -0
- package/dist/chart/comitor-chart.js +189 -0
- package/dist/chart/comitor-chart.js.map +1 -0
- package/dist/chart/index.d.ts +4 -0
- package/dist/chart/index.js +3 -0
- package/dist/chart/index.js.map +1 -0
- package/dist/components/composite/avatar-group.d.ts +33 -0
- package/dist/components/composite/avatar-group.js +86 -0
- package/dist/components/composite/avatar-group.js.map +1 -0
- package/dist/components/composite/combobox.d.ts +70 -0
- package/dist/components/composite/combobox.js +291 -0
- package/dist/components/composite/combobox.js.map +1 -0
- package/dist/components/composite/command-palette.d.ts +56 -0
- package/dist/components/composite/command-palette.js +131 -0
- package/dist/components/composite/command-palette.js.map +1 -0
- package/dist/components/composite/confirm-dialog.d.ts +40 -0
- package/dist/components/composite/confirm-dialog.js +96 -0
- package/dist/components/composite/confirm-dialog.js.map +1 -0
- package/dist/components/composite/copy-button.d.ts +27 -0
- package/dist/components/composite/copy-button.js +80 -0
- package/dist/components/composite/copy-button.js.map +1 -0
- package/dist/components/composite/data-table.d.ts +136 -0
- package/dist/components/composite/data-table.js +300 -0
- package/dist/components/composite/data-table.js.map +1 -0
- package/dist/components/composite/date-picker.d.ts +77 -0
- package/dist/components/composite/date-picker.js +268 -0
- package/dist/components/composite/date-picker.js.map +1 -0
- package/dist/components/composite/empty-state.d.ts +38 -0
- package/dist/components/composite/empty-state.js +35 -0
- package/dist/components/composite/empty-state.js.map +1 -0
- package/dist/components/composite/filter-chips.d.ts +39 -0
- package/dist/components/composite/filter-chips.js +79 -0
- package/dist/components/composite/filter-chips.js.map +1 -0
- package/dist/components/composite/form-field.d.ts +58 -0
- package/dist/components/composite/form-field.js +81 -0
- package/dist/components/composite/form-field.js.map +1 -0
- package/dist/components/composite/form-section.d.ts +33 -0
- package/dist/components/composite/form-section.js +85 -0
- package/dist/components/composite/form-section.js.map +1 -0
- package/dist/components/composite/inline-edit.d.ts +38 -0
- package/dist/components/composite/inline-edit.js +165 -0
- package/dist/components/composite/inline-edit.js.map +1 -0
- package/dist/components/composite/keyboard-hint.d.ts +31 -0
- package/dist/components/composite/keyboard-hint.js +72 -0
- package/dist/components/composite/keyboard-hint.js.map +1 -0
- package/dist/components/composite/letter-avatar.d.ts +47 -0
- package/dist/components/composite/letter-avatar.js +66 -0
- package/dist/components/composite/letter-avatar.js.map +1 -0
- package/dist/components/composite/page-container.d.ts +25 -0
- package/dist/components/composite/page-container.js +23 -0
- package/dist/components/composite/page-container.js.map +1 -0
- package/dist/components/composite/page-header.d.ts +49 -0
- package/dist/components/composite/page-header.js +75 -0
- package/dist/components/composite/page-header.js.map +1 -0
- package/dist/components/composite/relative-time.d.ts +28 -0
- package/dist/components/composite/relative-time.js +44 -0
- package/dist/components/composite/relative-time.js.map +1 -0
- package/dist/components/composite/search-filter-bar.d.ts +38 -0
- package/dist/components/composite/search-filter-bar.js +135 -0
- package/dist/components/composite/search-filter-bar.js.map +1 -0
- package/dist/components/composite/stat-card.d.ts +48 -0
- package/dist/components/composite/stat-card.js +76 -0
- package/dist/components/composite/stat-card.js.map +1 -0
- package/dist/components/composite/status-config.d.ts +85 -0
- package/dist/components/composite/status-config.js +41 -0
- package/dist/components/composite/status-config.js.map +1 -0
- package/dist/components/composite/status-pill.d.ts +26 -0
- package/dist/components/composite/status-pill.js +59 -0
- package/dist/components/composite/status-pill.js.map +1 -0
- package/dist/components/composite/table-pagination.d.ts +31 -0
- package/dist/components/composite/table-pagination.js +103 -0
- package/dist/components/composite/table-pagination.js.map +1 -0
- package/dist/components/composite/text-utils.d.ts +38 -0
- package/dist/components/composite/text-utils.js +40 -0
- package/dist/components/composite/text-utils.js.map +1 -0
- package/dist/components/composite/toast.d.ts +56 -0
- package/dist/components/composite/toast.js +63 -0
- package/dist/components/composite/toast.js.map +1 -0
- package/dist/components/ui/accordion.d.ts +17 -0
- package/dist/components/ui/accordion.js +53 -0
- package/dist/components/ui/accordion.js.map +1 -0
- package/dist/components/ui/alert-dialog.d.ts +34 -0
- package/dist/components/ui/alert-dialog.js +103 -0
- package/dist/components/ui/alert-dialog.js.map +1 -0
- package/dist/components/ui/alert.d.ts +16 -0
- package/dist/components/ui/alert.js +50 -0
- package/dist/components/ui/alert.js.map +1 -0
- package/dist/components/ui/aspect-ratio.d.ts +7 -0
- package/dist/components/ui/aspect-ratio.js +10 -0
- package/dist/components/ui/aspect-ratio.js.map +1 -0
- package/dist/components/ui/avatar.d.ts +11 -0
- package/dist/components/ui/avatar.js +33 -0
- package/dist/components/ui/avatar.js.map +1 -0
- package/dist/components/ui/badge.d.ts +15 -0
- package/dist/components/ui/badge.js +37 -0
- package/dist/components/ui/badge.js.map +1 -0
- package/dist/components/ui/breadcrumb.d.ts +30 -0
- package/dist/components/ui/breadcrumb.js +89 -0
- package/dist/components/ui/breadcrumb.js.map +1 -0
- package/dist/components/ui/button-group.d.ts +21 -0
- package/dist/components/ui/button-group.js +62 -0
- package/dist/components/ui/button-group.js.map +1 -0
- package/dist/components/ui/button.d.ts +21 -0
- package/dist/components/ui/button.js +70 -0
- package/dist/components/ui/button.js.map +1 -0
- package/dist/components/ui/calendar.d.ts +26 -0
- package/dist/components/ui/calendar.js +148 -0
- package/dist/components/ui/calendar.js.map +1 -0
- package/dist/components/ui/card.d.ts +33 -0
- package/dist/components/ui/card.js +70 -0
- package/dist/components/ui/card.js.map +1 -0
- package/dist/components/ui/carousel.d.ts +46 -0
- package/dist/components/ui/carousel.js +173 -0
- package/dist/components/ui/carousel.js.map +1 -0
- package/dist/components/ui/checkbox.d.ts +17 -0
- package/dist/components/ui/checkbox.js +67 -0
- package/dist/components/ui/checkbox.js.map +1 -0
- package/dist/components/ui/collapsible.d.ts +17 -0
- package/dist/components/ui/collapsible.js +18 -0
- package/dist/components/ui/collapsible.js.map +1 -0
- package/dist/components/ui/command.d.ts +41 -0
- package/dist/components/ui/command.js +122 -0
- package/dist/components/ui/command.js.map +1 -0
- package/dist/components/ui/context-menu.d.ts +51 -0
- package/dist/components/ui/context-menu.js +166 -0
- package/dist/components/ui/context-menu.js.map +1 -0
- package/dist/components/ui/dialog.d.ts +48 -0
- package/dist/components/ui/dialog.js +131 -0
- package/dist/components/ui/dialog.js.map +1 -0
- package/dist/components/ui/drawer.d.ts +32 -0
- package/dist/components/ui/drawer.js +102 -0
- package/dist/components/ui/drawer.js.map +1 -0
- package/dist/components/ui/dropdown-menu.d.ts +52 -0
- package/dist/components/ui/dropdown-menu.js +167 -0
- package/dist/components/ui/dropdown-menu.js.map +1 -0
- package/dist/components/ui/empty.d.ts +22 -0
- package/dist/components/ui/empty.js +87 -0
- package/dist/components/ui/empty.js.map +1 -0
- package/dist/components/ui/field.d.ts +46 -0
- package/dist/components/ui/field.js +197 -0
- package/dist/components/ui/field.js.map +1 -0
- package/dist/components/ui/form.d.ts +50 -0
- package/dist/components/ui/form.js +100 -0
- package/dist/components/ui/form.js.map +1 -0
- package/dist/components/ui/hover-card.d.ts +17 -0
- package/dist/components/ui/hover-card.js +31 -0
- package/dist/components/ui/hover-card.js.map +1 -0
- package/dist/components/ui/input-group.d.ts +26 -0
- package/dist/components/ui/input-group.js +148 -0
- package/dist/components/ui/input-group.js.map +1 -0
- package/dist/components/ui/input-otp.d.ts +23 -0
- package/dist/components/ui/input-otp.js +54 -0
- package/dist/components/ui/input-otp.js.map +1 -0
- package/dist/components/ui/input.d.ts +21 -0
- package/dist/components/ui/input.js +62 -0
- package/dist/components/ui/input.js.map +1 -0
- package/dist/components/ui/item.d.ts +39 -0
- package/dist/components/ui/item.js +142 -0
- package/dist/components/ui/item.js.map +1 -0
- package/dist/components/ui/kbd.d.ts +8 -0
- package/dist/components/ui/kbd.js +25 -0
- package/dist/components/ui/kbd.js.map +1 -0
- package/dist/components/ui/label.d.ts +7 -0
- package/dist/components/ui/label.js +21 -0
- package/dist/components/ui/label.js.map +1 -0
- package/dist/components/ui/menubar.d.ts +51 -0
- package/dist/components/ui/menubar.js +196 -0
- package/dist/components/ui/menubar.js.map +1 -0
- package/dist/components/ui/navigation-menu.d.ts +39 -0
- package/dist/components/ui/navigation-menu.js +123 -0
- package/dist/components/ui/navigation-menu.js.map +1 -0
- package/dist/components/ui/pagination.d.ts +40 -0
- package/dist/components/ui/pagination.js +95 -0
- package/dist/components/ui/pagination.js.map +1 -0
- package/dist/components/ui/popover.d.ts +19 -0
- package/dist/components/ui/popover.js +35 -0
- package/dist/components/ui/popover.js.map +1 -0
- package/dist/components/ui/progress.d.ts +12 -0
- package/dist/components/ui/progress.js +27 -0
- package/dist/components/ui/progress.js.map +1 -0
- package/dist/components/ui/radio-group.d.ts +9 -0
- package/dist/components/ui/radio-group.js +34 -0
- package/dist/components/ui/radio-group.js.map +1 -0
- package/dist/components/ui/resizable.d.ts +19 -0
- package/dist/components/ui/resizable.js +38 -0
- package/dist/components/ui/resizable.js.map +1 -0
- package/dist/components/ui/scroll-area.d.ts +13 -0
- package/dist/components/ui/scroll-area.js +46 -0
- package/dist/components/ui/scroll-area.js.map +1 -0
- package/dist/components/ui/select.d.ts +33 -0
- package/dist/components/ui/select.js +133 -0
- package/dist/components/ui/select.js.map +1 -0
- package/dist/components/ui/separator.d.ts +7 -0
- package/dist/components/ui/separator.js +23 -0
- package/dist/components/ui/separator.js.map +1 -0
- package/dist/components/ui/sheet.d.ts +38 -0
- package/dist/components/ui/sheet.js +96 -0
- package/dist/components/ui/sheet.js.map +1 -0
- package/dist/components/ui/skeleton.d.ts +6 -0
- package/dist/components/ui/skeleton.js +9 -0
- package/dist/components/ui/skeleton.js.map +1 -0
- package/dist/components/ui/slider.d.ts +12 -0
- package/dist/components/ui/slider.js +54 -0
- package/dist/components/ui/slider.js.map +1 -0
- package/dist/components/ui/sonner.d.ts +9 -0
- package/dist/components/ui/sonner.js +25 -0
- package/dist/components/ui/sonner.js.map +1 -0
- package/dist/components/ui/spinner.d.ts +6 -0
- package/dist/components/ui/spinner.js +10 -0
- package/dist/components/ui/spinner.js.map +1 -0
- package/dist/components/ui/switch.d.ts +14 -0
- package/dist/components/ui/switch.js +65 -0
- package/dist/components/ui/switch.js.map +1 -0
- package/dist/components/ui/table.d.ts +30 -0
- package/dist/components/ui/table.js +87 -0
- package/dist/components/ui/table.js.map +1 -0
- package/dist/components/ui/tabs.d.ts +35 -0
- package/dist/components/ui/tabs.js +54 -0
- package/dist/components/ui/tabs.js.map +1 -0
- package/dist/components/ui/textarea.d.ts +6 -0
- package/dist/components/ui/textarea.js +19 -0
- package/dist/components/ui/textarea.js.map +1 -0
- package/dist/components/ui/toggle-group.d.ts +18 -0
- package/dist/components/ui/toggle-group.js +52 -0
- package/dist/components/ui/toggle-group.js.map +1 -0
- package/dist/components/ui/toggle.d.ts +15 -0
- package/dist/components/ui/toggle.js +33 -0
- package/dist/components/ui/toggle.js.map +1 -0
- package/dist/components/ui/tooltip.d.ts +21 -0
- package/dist/components/ui/tooltip.js +38 -0
- package/dist/components/ui/tooltip.js.map +1 -0
- package/dist/form.d.ts +5 -0
- package/dist/form.js +2 -0
- package/dist/form.js.map +1 -0
- package/dist/index.d.ts +111 -0
- package/dist/index.js +76 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/cn.d.ts +16 -0
- package/dist/lib/cn.js +9 -0
- package/dist/lib/cn.js.map +1 -0
- package/dist/shell/app-header.d.ts +41 -0
- package/dist/shell/app-header.js +136 -0
- package/dist/shell/app-header.js.map +1 -0
- package/dist/shell/app-launcher.d.ts +33 -0
- package/dist/shell/app-launcher.js +189 -0
- package/dist/shell/app-launcher.js.map +1 -0
- package/dist/shell/app-shell.d.ts +44 -0
- package/dist/shell/app-shell.js +99 -0
- package/dist/shell/app-shell.js.map +1 -0
- package/dist/shell/comitor-lockup.d.ts +33 -0
- package/dist/shell/comitor-lockup.js +112 -0
- package/dist/shell/comitor-lockup.js.map +1 -0
- package/dist/shell/comitor-logo.d.ts +28 -0
- package/dist/shell/comitor-logo.js +92 -0
- package/dist/shell/comitor-logo.js.map +1 -0
- package/dist/shell/index.d.ts +24 -0
- package/dist/shell/index.js +23 -0
- package/dist/shell/index.js.map +1 -0
- package/dist/shell/mobile-menu.d.ts +26 -0
- package/dist/shell/mobile-menu.js +56 -0
- package/dist/shell/mobile-menu.js.map +1 -0
- package/dist/shell/notifications-button.d.ts +22 -0
- package/dist/shell/notifications-button.js +39 -0
- package/dist/shell/notifications-button.js.map +1 -0
- package/dist/shell/shell-context.d.ts +91 -0
- package/dist/shell/shell-context.js +233 -0
- package/dist/shell/shell-context.js.map +1 -0
- package/dist/shell/shell-link.d.ts +19 -0
- package/dist/shell/shell-link.js +18 -0
- package/dist/shell/shell-link.js.map +1 -0
- package/dist/shell/sidebar-group.d.ts +21 -0
- package/dist/shell/sidebar-group.js +43 -0
- package/dist/shell/sidebar-group.js.map +1 -0
- package/dist/shell/sidebar-menu-item.d.ts +27 -0
- package/dist/shell/sidebar-menu-item.js +152 -0
- package/dist/shell/sidebar-menu-item.js.map +1 -0
- package/dist/shell/sidebar.d.ts +26 -0
- package/dist/shell/sidebar.js +92 -0
- package/dist/shell/sidebar.js.map +1 -0
- package/dist/shell/theme-provider.d.ts +18 -0
- package/dist/shell/theme-provider.js +29 -0
- package/dist/shell/theme-provider.js.map +1 -0
- package/dist/shell/theme-toggle.d.ts +28 -0
- package/dist/shell/theme-toggle.js +67 -0
- package/dist/shell/theme-toggle.js.map +1 -0
- package/dist/shell/types.d.ts +168 -0
- package/dist/shell/types.js +38 -0
- package/dist/shell/types.js.map +1 -0
- package/dist/shell/user-menu.d.ts +42 -0
- package/dist/shell/user-menu.js +132 -0
- package/dist/shell/user-menu.js.map +1 -0
- package/dist/shell/utils.d.ts +62 -0
- package/dist/shell/utils.js +73 -0
- package/dist/shell/utils.js.map +1 -0
- package/dist/shell/workspace-switcher.d.ts +24 -0
- package/dist/shell/workspace-switcher.js +219 -0
- package/dist/shell/workspace-switcher.js.map +1 -0
- package/dist/tokens.d.ts +173 -0
- package/dist/tokens.js +161 -0
- package/dist/tokens.js.map +1 -0
- package/package.json +151 -0
- package/styles.css +357 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
export { AvatarGroup, AvatarGroupItem, AvatarGroupProps } from './components/composite/avatar-group.js';
|
|
2
|
+
export { Combobox, ComboboxOption, ComboboxProps, MultiCombobox, MultiComboboxProps } from './components/composite/combobox.js';
|
|
3
|
+
export { CommandPalette, CommandPaletteGroup, CommandPaletteItem, CommandPaletteProps } from './components/composite/command-palette.js';
|
|
4
|
+
export { ConfirmDialog, ConfirmDialogProps } from './components/composite/confirm-dialog.js';
|
|
5
|
+
export { CopyButton, CopyButtonProps } from './components/composite/copy-button.js';
|
|
6
|
+
export { DEFAULT_DATA_TABLE_LABELS, DataTable, DataTableAlign, DataTableColumn, DataTableColumnToggle, DataTableColumnToggleProps, DataTableLabels, DataTableProps, DataTableSort, SortDirection } from './components/composite/data-table.js';
|
|
7
|
+
export { DEFAULT_DATE_PRESETS, DEFAULT_DATE_RANGE_PRESETS, DatePicker, DatePickerProps, DatePreset, DateRangePicker, DateRangePickerProps, DateRangePreset, VI_DATE_FORMAT } from './components/composite/date-picker.js';
|
|
8
|
+
export { EmptyState, EmptyStateProps, IconComponent } from './components/composite/empty-state.js';
|
|
9
|
+
export { FilterChipItem, FilterChips, FilterChipsProps } from './components/composite/filter-chips.js';
|
|
10
|
+
export { FormField, FormFieldColSpan, FormFieldControlProps, FormFieldProps, SELECT_EMPTY_VALUE, fromSelectValue, toSelectValue } from './components/composite/form-field.js';
|
|
11
|
+
export { FormSection, FormSectionAccent, FormSectionProps } from './components/composite/form-section.js';
|
|
12
|
+
export { InlineEdit, InlineEditProps } from './components/composite/inline-edit.js';
|
|
13
|
+
export { KeyboardHint, KeyboardHintProps, useIsMac } from './components/composite/keyboard-hint.js';
|
|
14
|
+
export { LETTER_AVATAR_TONES, LetterAvatar, LetterAvatarProps, LetterAvatarSize, getLetterAvatarTone } from './components/composite/letter-avatar.js';
|
|
15
|
+
export { PageContainer, PageContainerProps, PageContainerWidth } from './components/composite/page-container.js';
|
|
16
|
+
export { PageHeader, PageHeaderBreadcrumbItem, PageHeaderLinkProps, PageHeaderProps } from './components/composite/page-header.js';
|
|
17
|
+
export { RelativeTime, RelativeTimeProps } from './components/composite/relative-time.js';
|
|
18
|
+
export { SearchFilterBar, SearchFilterBarProps } from './components/composite/search-filter-bar.js';
|
|
19
|
+
export { StatCard, StatCardDelta, StatCardDeltaDirection, StatCardProps, StatCardTone, statCardIconVariants } from './components/composite/stat-card.js';
|
|
20
|
+
export { STATUS_TONES, StatusConfig, StatusTone, StatusToneName, getStatusClasses, getStatusConfig, getStatusLabel, sortByStatusPriority } from './components/composite/status-config.js';
|
|
21
|
+
export { StatusPill, StatusPillProps, StatusPillVariant } from './components/composite/status-pill.js';
|
|
22
|
+
export { DEFAULT_PAGE_SIZE_OPTIONS, TablePagination, TablePaginationProps } from './components/composite/table-pagination.js';
|
|
23
|
+
export { getVietnameseInitials, hashString, matchesSearch, pickByString, removeVietnameseTones, truncate } from './components/composite/text-utils.js';
|
|
24
|
+
export { ToastOptions, ToastVariant, Toaster, ToasterProps, dismissToast, toast, toastPromise } from './components/composite/toast.js';
|
|
25
|
+
export { Accordion, AccordionContent, AccordionContentProps, AccordionItem, AccordionItemProps, AccordionProps, AccordionTrigger, AccordionTriggerProps } from './components/ui/accordion.js';
|
|
26
|
+
export { Alert, AlertDescription, AlertDescriptionProps, AlertProps, AlertTitle, AlertTitleProps, alertVariants } from './components/ui/alert.js';
|
|
27
|
+
export { AlertDialog, AlertDialogAction, AlertDialogActionProps, AlertDialogCancel, AlertDialogCancelProps, AlertDialogContent, AlertDialogContentProps, AlertDialogDescription, AlertDialogDescriptionProps, AlertDialogFooter, AlertDialogFooterProps, AlertDialogHeader, AlertDialogHeaderProps, AlertDialogOverlay, AlertDialogOverlayProps, AlertDialogPortal, AlertDialogPortalProps, AlertDialogProps, AlertDialogTitle, AlertDialogTitleProps, AlertDialogTrigger, AlertDialogTriggerProps } from './components/ui/alert-dialog.js';
|
|
28
|
+
export { AspectRatio, AspectRatioProps } from './components/ui/aspect-ratio.js';
|
|
29
|
+
export { Avatar, AvatarFallback, AvatarFallbackProps, AvatarImage, AvatarImageProps, AvatarProps } from './components/ui/avatar.js';
|
|
30
|
+
export { Badge, BadgeProps, badgeVariants } from './components/ui/badge.js';
|
|
31
|
+
export { Breadcrumb, BreadcrumbEllipsis, BreadcrumbEllipsisProps, BreadcrumbItem, BreadcrumbItemProps, BreadcrumbLink, BreadcrumbLinkProps, BreadcrumbList, BreadcrumbListProps, BreadcrumbPage, BreadcrumbPageProps, BreadcrumbProps, BreadcrumbSeparator, BreadcrumbSeparatorProps } from './components/ui/breadcrumb.js';
|
|
32
|
+
export { Button, ButtonProps, buttonVariants } from './components/ui/button.js';
|
|
33
|
+
export { ButtonGroup, ButtonGroupProps, ButtonGroupSeparator, ButtonGroupSeparatorProps, ButtonGroupText, ButtonGroupTextProps, buttonGroupVariants } from './components/ui/button-group.js';
|
|
34
|
+
export { Calendar, CalendarDayButton, CalendarDayButtonProps, CalendarProps } from './components/ui/calendar.js';
|
|
35
|
+
export { Card, CardAction, CardActionProps, CardContent, CardContentProps, CardDescription, CardDescriptionProps, CardFooter, CardFooterProps, CardHeader, CardHeaderProps, CardProps, CardTitle, CardTitleProps, cardVariants } from './components/ui/card.js';
|
|
36
|
+
export { Carousel, CarouselApi, CarouselContent, CarouselContentProps, CarouselContextProps, CarouselItem, CarouselItemProps, CarouselNext, CarouselNextProps, CarouselOptions, CarouselOwnProps, CarouselPlugin, CarouselPrevious, CarouselPreviousProps, CarouselProps, useCarousel } from './components/ui/carousel.js';
|
|
37
|
+
export { Checkbox, CheckboxProps } from './components/ui/checkbox.js';
|
|
38
|
+
export { Collapsible, CollapsibleContent, CollapsibleContentProps, CollapsibleProps, CollapsibleTrigger, CollapsibleTriggerProps } from './components/ui/collapsible.js';
|
|
39
|
+
export { Command, CommandDialog, CommandDialogProps, CommandEmpty, CommandEmptyProps, CommandGroup, CommandGroupProps, CommandInput, CommandInputProps, CommandItem, CommandItemProps, CommandList, CommandListProps, CommandProps, CommandSeparator, CommandSeparatorProps, CommandShortcut, CommandShortcutProps } from './components/ui/command.js';
|
|
40
|
+
export { ContextMenu, ContextMenuCheckboxItem, ContextMenuCheckboxItemProps, ContextMenuContent, ContextMenuContentProps, ContextMenuGroup, ContextMenuGroupProps, ContextMenuItem, ContextMenuItemProps, ContextMenuItemVariant, ContextMenuLabel, ContextMenuLabelProps, ContextMenuPortal, ContextMenuPortalProps, ContextMenuProps, ContextMenuRadioGroup, ContextMenuRadioGroupProps, ContextMenuRadioItem, ContextMenuRadioItemProps, ContextMenuSeparator, ContextMenuSeparatorProps, ContextMenuShortcut, ContextMenuShortcutProps, ContextMenuSub, ContextMenuSubContent, ContextMenuSubContentProps, ContextMenuSubProps, ContextMenuSubTrigger, ContextMenuSubTriggerProps, ContextMenuTrigger, ContextMenuTriggerProps } from './components/ui/context-menu.js';
|
|
41
|
+
export { Dialog, DialogBody, DialogBodyProps, DialogClose, DialogCloseProps, DialogContent, DialogContentProps, DialogDescription, DialogDescriptionProps, DialogFooter, DialogFooterProps, DialogHeader, DialogHeaderProps, DialogOverlay, DialogOverlayProps, DialogPortal, DialogPortalProps, DialogProps, DialogSize, DialogTitle, DialogTitleProps, DialogTrigger, DialogTriggerProps } from './components/ui/dialog.js';
|
|
42
|
+
export { Drawer, DrawerClose, DrawerCloseProps, DrawerContent, DrawerContentProps, DrawerDescription, DrawerDescriptionProps, DrawerFooter, DrawerFooterProps, DrawerHeader, DrawerHeaderProps, DrawerOverlay, DrawerOverlayProps, DrawerPortal, DrawerPortalProps, DrawerProps, DrawerTitle, DrawerTitleProps, DrawerTrigger, DrawerTriggerProps } from './components/ui/drawer.js';
|
|
43
|
+
export { DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuCheckboxItemProps, DropdownMenuContent, DropdownMenuContentProps, DropdownMenuGroup, DropdownMenuGroupProps, DropdownMenuItem, DropdownMenuItemProps, DropdownMenuItemVariant, DropdownMenuLabel, DropdownMenuLabelProps, DropdownMenuPortal, DropdownMenuPortalProps, DropdownMenuProps, DropdownMenuRadioGroup, DropdownMenuRadioGroupProps, DropdownMenuRadioItem, DropdownMenuRadioItemProps, DropdownMenuSeparator, DropdownMenuSeparatorProps, DropdownMenuShortcut, DropdownMenuShortcutProps, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubContentProps, DropdownMenuSubProps, DropdownMenuSubTrigger, DropdownMenuSubTriggerProps, DropdownMenuTrigger, DropdownMenuTriggerProps } from './components/ui/dropdown-menu.js';
|
|
44
|
+
export { Empty, EmptyContent, EmptyContentProps, EmptyDescription, EmptyDescriptionProps, EmptyHeader, EmptyHeaderProps, EmptyMedia, EmptyMediaProps, EmptyProps, EmptyTitle, EmptyTitleProps, emptyMediaVariants } from './components/ui/empty.js';
|
|
45
|
+
export { Field, FieldContent, FieldContentProps, FieldDescription, FieldDescriptionProps, FieldError, FieldErrorProps, FieldGroup, FieldGroupProps, FieldLabel, FieldLabelProps, FieldLegend, FieldLegendProps, FieldProps, FieldSeparator, FieldSeparatorProps, FieldSet, FieldSetProps, FieldTitle, FieldTitleProps, fieldVariants } from './components/ui/field.js';
|
|
46
|
+
export { HoverCard, HoverCardContent, HoverCardContentProps, HoverCardProps, HoverCardTrigger, HoverCardTriggerProps } from './components/ui/hover-card.js';
|
|
47
|
+
export { Input, InputProps } from './components/ui/input.js';
|
|
48
|
+
export { InputGroup, InputGroupAddon, InputGroupAddonProps, InputGroupButton, InputGroupButtonProps, InputGroupInput, InputGroupInputProps, InputGroupProps, InputGroupText, InputGroupTextProps, InputGroupTextarea, InputGroupTextareaProps, inputGroupAddonVariants, inputGroupButtonVariants } from './components/ui/input-group.js';
|
|
49
|
+
export { InputOTP, InputOTPGroup, InputOTPGroupProps, InputOTPProps, InputOTPSeparator, InputOTPSeparatorProps, InputOTPSlot, InputOTPSlotProps } from './components/ui/input-otp.js';
|
|
50
|
+
export { Item, ItemActions, ItemActionsProps, ItemContent, ItemContentProps, ItemDescription, ItemDescriptionProps, ItemFooter, ItemFooterProps, ItemGroup, ItemGroupProps, ItemHeader, ItemHeaderProps, ItemMedia, ItemMediaProps, ItemProps, ItemSeparator, ItemSeparatorProps, ItemTitle, ItemTitleProps, itemMediaVariants, itemVariants } from './components/ui/item.js';
|
|
51
|
+
export { Kbd, KbdGroup, KbdGroupProps, KbdProps } from './components/ui/kbd.js';
|
|
52
|
+
export { Label, LabelProps } from './components/ui/label.js';
|
|
53
|
+
export { Menubar, MenubarCheckboxItem, MenubarCheckboxItemProps, MenubarContent, MenubarContentProps, MenubarGroup, MenubarGroupProps, MenubarItem, MenubarItemProps, MenubarItemVariant, MenubarLabel, MenubarLabelProps, MenubarMenu, MenubarMenuProps, MenubarPortal, MenubarPortalProps, MenubarProps, MenubarRadioGroup, MenubarRadioGroupProps, MenubarRadioItem, MenubarRadioItemProps, MenubarSeparator, MenubarSeparatorProps, MenubarShortcut, MenubarShortcutProps, MenubarSub, MenubarSubContent, MenubarSubContentProps, MenubarSubProps, MenubarSubTrigger, MenubarSubTriggerProps, MenubarTrigger, MenubarTriggerProps } from './components/ui/menubar.js';
|
|
54
|
+
export { NavigationMenu, NavigationMenuContent, NavigationMenuContentProps, NavigationMenuIndicator, NavigationMenuIndicatorProps, NavigationMenuItem, NavigationMenuItemProps, NavigationMenuLink, NavigationMenuLinkProps, NavigationMenuList, NavigationMenuListProps, NavigationMenuProps, NavigationMenuTrigger, NavigationMenuTriggerProps, NavigationMenuViewport, NavigationMenuViewportProps, navigationMenuTriggerStyle } from './components/ui/navigation-menu.js';
|
|
55
|
+
export { Pagination, PaginationContent, PaginationContentProps, PaginationEllipsis, PaginationEllipsisProps, PaginationItem, PaginationItemProps, PaginationLink, PaginationLinkProps, PaginationNext, PaginationNextProps, PaginationPrevious, PaginationPreviousProps, PaginationProps } from './components/ui/pagination.js';
|
|
56
|
+
export { Popover, PopoverAnchor, PopoverAnchorProps, PopoverContent, PopoverContentProps, PopoverProps, PopoverTrigger, PopoverTriggerProps } from './components/ui/popover.js';
|
|
57
|
+
export { Progress, ProgressProps } from './components/ui/progress.js';
|
|
58
|
+
export { RadioGroup, RadioGroupItem, RadioGroupItemProps, RadioGroupProps } from './components/ui/radio-group.js';
|
|
59
|
+
export { ResizableHandle, ResizableHandleProps, ResizablePanel, ResizablePanelGroup, ResizablePanelGroupProps, ResizablePanelProps } from './components/ui/resizable.js';
|
|
60
|
+
export { ScrollArea, ScrollAreaProps, ScrollBar, ScrollBarProps } from './components/ui/scroll-area.js';
|
|
61
|
+
export { Select, SelectContent, SelectContentProps, SelectGroup, SelectGroupProps, SelectItem, SelectItemProps, SelectLabel, SelectLabelProps, SelectProps, SelectScrollDownButton, SelectScrollDownButtonProps, SelectScrollUpButton, SelectScrollUpButtonProps, SelectSeparator, SelectSeparatorProps, SelectTrigger, SelectTriggerProps, SelectValue, SelectValueProps } from './components/ui/select.js';
|
|
62
|
+
export { Separator, SeparatorProps } from './components/ui/separator.js';
|
|
63
|
+
export { Sheet, SheetClose, SheetCloseProps, SheetContent, SheetContentProps, SheetDescription, SheetDescriptionProps, SheetFooter, SheetFooterProps, SheetHeader, SheetHeaderProps, SheetOverlay, SheetOverlayProps, SheetPortal, SheetPortalProps, SheetProps, SheetSide, SheetTitle, SheetTitleProps, SheetTrigger, SheetTriggerProps } from './components/ui/sheet.js';
|
|
64
|
+
export { Skeleton, SkeletonProps } from './components/ui/skeleton.js';
|
|
65
|
+
export { Slider, SliderProps } from './components/ui/slider.js';
|
|
66
|
+
export { Spinner, SpinnerProps } from './components/ui/spinner.js';
|
|
67
|
+
export { Switch, SwitchProps } from './components/ui/switch.js';
|
|
68
|
+
export { Table, TableBody, TableBodyProps, TableCaption, TableCaptionProps, TableCell, TableCellProps, TableFooter, TableFooterProps, TableHead, TableHeadProps, TableHeader, TableHeaderProps, TableProps, TableRow, TableRowProps } from './components/ui/table.js';
|
|
69
|
+
export { Tabs, TabsContent, TabsContentProps, TabsList, TabsListProps, TabsProps, TabsTrigger, TabsTriggerProps, TabsVariant } from './components/ui/tabs.js';
|
|
70
|
+
export { Textarea, TextareaProps } from './components/ui/textarea.js';
|
|
71
|
+
export { Toggle, ToggleProps, ToggleVariantProps, toggleVariants } from './components/ui/toggle.js';
|
|
72
|
+
export { ToggleGroup, ToggleGroupItem, ToggleGroupItemProps, ToggleGroupProps, ToggleGroupVariantProps } from './components/ui/toggle-group.js';
|
|
73
|
+
export { Tooltip, TooltipContent, TooltipContentProps, TooltipProps, TooltipProvider, TooltipProviderProps, TooltipTrigger, TooltipTriggerProps } from './components/ui/tooltip.js';
|
|
74
|
+
export { cn } from './lib/cn.js';
|
|
75
|
+
export { ThemeMode, accent, ash, avatarPalette, brandNeutral, chart, gold, layout, semantic, status, typography } from './tokens.js';
|
|
76
|
+
export { DateRange } from 'react-day-picker';
|
|
77
|
+
import 'react';
|
|
78
|
+
import 'class-variance-authority/types';
|
|
79
|
+
import 'class-variance-authority';
|
|
80
|
+
import 'sonner';
|
|
81
|
+
import '@radix-ui/react-accordion';
|
|
82
|
+
import '@radix-ui/react-alert-dialog';
|
|
83
|
+
import '@radix-ui/react-aspect-ratio';
|
|
84
|
+
import '@radix-ui/react-avatar';
|
|
85
|
+
import 'embla-carousel-react';
|
|
86
|
+
import '@radix-ui/react-checkbox';
|
|
87
|
+
import '@radix-ui/react-collapsible';
|
|
88
|
+
import 'cmdk';
|
|
89
|
+
import '@radix-ui/react-context-menu';
|
|
90
|
+
import '@radix-ui/react-dialog';
|
|
91
|
+
import 'vaul';
|
|
92
|
+
import '@radix-ui/react-dropdown-menu';
|
|
93
|
+
import '@radix-ui/react-hover-card';
|
|
94
|
+
import 'input-otp';
|
|
95
|
+
import '@radix-ui/react-label';
|
|
96
|
+
import '@radix-ui/react-menubar';
|
|
97
|
+
import '@radix-ui/react-navigation-menu';
|
|
98
|
+
import '@radix-ui/react-popover';
|
|
99
|
+
import '@radix-ui/react-progress';
|
|
100
|
+
import '@radix-ui/react-radio-group';
|
|
101
|
+
import 'react-resizable-panels';
|
|
102
|
+
import '@radix-ui/react-scroll-area';
|
|
103
|
+
import '@radix-ui/react-select';
|
|
104
|
+
import '@radix-ui/react-separator';
|
|
105
|
+
import '@radix-ui/react-slider';
|
|
106
|
+
import '@radix-ui/react-switch';
|
|
107
|
+
import '@radix-ui/react-tabs';
|
|
108
|
+
import '@radix-ui/react-toggle';
|
|
109
|
+
import '@radix-ui/react-toggle-group';
|
|
110
|
+
import '@radix-ui/react-tooltip';
|
|
111
|
+
import 'clsx';
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
export * from "./components/composite/avatar-group.js";
|
|
2
|
+
export * from "./components/composite/combobox.js";
|
|
3
|
+
export * from "./components/composite/command-palette.js";
|
|
4
|
+
export * from "./components/composite/confirm-dialog.js";
|
|
5
|
+
export * from "./components/composite/copy-button.js";
|
|
6
|
+
export * from "./components/composite/data-table.js";
|
|
7
|
+
export * from "./components/composite/date-picker.js";
|
|
8
|
+
export * from "./components/composite/empty-state.js";
|
|
9
|
+
export * from "./components/composite/filter-chips.js";
|
|
10
|
+
export * from "./components/composite/form-field.js";
|
|
11
|
+
export * from "./components/composite/form-section.js";
|
|
12
|
+
export * from "./components/composite/inline-edit.js";
|
|
13
|
+
export * from "./components/composite/keyboard-hint.js";
|
|
14
|
+
export * from "./components/composite/letter-avatar.js";
|
|
15
|
+
export * from "./components/composite/page-container.js";
|
|
16
|
+
export * from "./components/composite/page-header.js";
|
|
17
|
+
export * from "./components/composite/relative-time.js";
|
|
18
|
+
export * from "./components/composite/search-filter-bar.js";
|
|
19
|
+
export * from "./components/composite/stat-card.js";
|
|
20
|
+
export * from "./components/composite/status-config.js";
|
|
21
|
+
export * from "./components/composite/status-pill.js";
|
|
22
|
+
export * from "./components/composite/table-pagination.js";
|
|
23
|
+
export * from "./components/composite/text-utils.js";
|
|
24
|
+
export * from "./components/composite/toast.js";
|
|
25
|
+
export * from "./components/ui/accordion.js";
|
|
26
|
+
export * from "./components/ui/alert.js";
|
|
27
|
+
export * from "./components/ui/alert-dialog.js";
|
|
28
|
+
export * from "./components/ui/aspect-ratio.js";
|
|
29
|
+
export * from "./components/ui/avatar.js";
|
|
30
|
+
export * from "./components/ui/badge.js";
|
|
31
|
+
export * from "./components/ui/breadcrumb.js";
|
|
32
|
+
export * from "./components/ui/button.js";
|
|
33
|
+
export * from "./components/ui/button-group.js";
|
|
34
|
+
export * from "./components/ui/calendar.js";
|
|
35
|
+
export * from "./components/ui/card.js";
|
|
36
|
+
export * from "./components/ui/carousel.js";
|
|
37
|
+
export * from "./components/ui/checkbox.js";
|
|
38
|
+
export * from "./components/ui/collapsible.js";
|
|
39
|
+
export * from "./components/ui/command.js";
|
|
40
|
+
export * from "./components/ui/context-menu.js";
|
|
41
|
+
export * from "./components/ui/dialog.js";
|
|
42
|
+
export * from "./components/ui/drawer.js";
|
|
43
|
+
export * from "./components/ui/dropdown-menu.js";
|
|
44
|
+
export * from "./components/ui/empty.js";
|
|
45
|
+
export * from "./components/ui/field.js";
|
|
46
|
+
export * from "./components/ui/hover-card.js";
|
|
47
|
+
export * from "./components/ui/input.js";
|
|
48
|
+
export * from "./components/ui/input-group.js";
|
|
49
|
+
export * from "./components/ui/input-otp.js";
|
|
50
|
+
export * from "./components/ui/item.js";
|
|
51
|
+
export * from "./components/ui/kbd.js";
|
|
52
|
+
export * from "./components/ui/label.js";
|
|
53
|
+
export * from "./components/ui/menubar.js";
|
|
54
|
+
export * from "./components/ui/navigation-menu.js";
|
|
55
|
+
export * from "./components/ui/pagination.js";
|
|
56
|
+
export * from "./components/ui/popover.js";
|
|
57
|
+
export * from "./components/ui/progress.js";
|
|
58
|
+
export * from "./components/ui/radio-group.js";
|
|
59
|
+
export * from "./components/ui/resizable.js";
|
|
60
|
+
export * from "./components/ui/scroll-area.js";
|
|
61
|
+
export * from "./components/ui/select.js";
|
|
62
|
+
export * from "./components/ui/separator.js";
|
|
63
|
+
export * from "./components/ui/sheet.js";
|
|
64
|
+
export * from "./components/ui/skeleton.js";
|
|
65
|
+
export * from "./components/ui/slider.js";
|
|
66
|
+
export * from "./components/ui/spinner.js";
|
|
67
|
+
export * from "./components/ui/switch.js";
|
|
68
|
+
export * from "./components/ui/table.js";
|
|
69
|
+
export * from "./components/ui/tabs.js";
|
|
70
|
+
export * from "./components/ui/textarea.js";
|
|
71
|
+
export * from "./components/ui/toggle.js";
|
|
72
|
+
export * from "./components/ui/toggle-group.js";
|
|
73
|
+
export * from "./components/ui/tooltip.js";
|
|
74
|
+
export * from "./lib/cn.js";
|
|
75
|
+
export * from "./tokens.js";
|
|
76
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["/**\n * Entry chính \"@comitor/ui\" — Tier 1 (primitive) + Tier 2 (composite) + lib + token.\n *\n * Quy tắc của entry này: **chỉ được phụ thuộc peer BẮT BUỘC** (react, react-dom,\n * lucide-react, tailwindcss). Không `next/*`, không `next-themes`, không `recharts`,\n * không `react-hook-form` — đó đều là peer OPTIONAL. Vì `tsup` chạy `bundle: false`\n * (ESM per-file), chỉ cần barrel này re-export một file có import optional peer là\n * mọi app import \"@comitor/ui\" đều buộc phải cài gói đó, nếu không bundler gãy ở\n * bước resolve. Vì vậy 3 nhánh dưới đây nằm ở entry riêng:\n *\n * - Tier 3 shell (next/*, next-themes) → \"@comitor/ui/shell\"\n * - chart (recharts) → \"@comitor/ui/chart\"\n * - binding react-hook-form → \"@comitor/ui/form\"\n *\n * ⚠ Hai file trong `components/ui/` CỐ Ý không có mặt ở đây:\n * - `form.tsx` → xuất qua \"@comitor/ui/form\" (react-hook-form).\n * - `sonner.tsx` → xuất qua \"@comitor/ui/shell\" dưới tên `SonnerToaster`\n * (nó gọi `useTheme()` của next-themes). Bản dùng hằng ngày là composite\n * `Toaster`/`toast` ở Tier 2 — không phụ thuộc next-themes, có sẵn ở entry này.\n *\n * ⚠ Mọi import nội bộ phải giữ đuôi `.js`: output là ESM per-file, Node ESM thuần\n * không tự suy ra phần mở rộng (bundler thì tha, Node thì không).\n */\n\n// ─── Tier 2 — composite (pattern lặp lại ở mọi app Comitor) ───\nexport * from \"./components/composite/avatar-group.js\";\nexport * from \"./components/composite/combobox.js\";\nexport * from \"./components/composite/command-palette.js\";\nexport * from \"./components/composite/confirm-dialog.js\";\nexport * from \"./components/composite/copy-button.js\";\nexport * from \"./components/composite/data-table.js\";\nexport * from \"./components/composite/date-picker.js\";\nexport * from \"./components/composite/empty-state.js\";\nexport * from \"./components/composite/filter-chips.js\";\nexport * from \"./components/composite/form-field.js\";\nexport * from \"./components/composite/form-section.js\";\nexport * from \"./components/composite/inline-edit.js\";\nexport * from \"./components/composite/keyboard-hint.js\";\nexport * from \"./components/composite/letter-avatar.js\";\nexport * from \"./components/composite/page-container.js\";\nexport * from \"./components/composite/page-header.js\";\nexport * from \"./components/composite/relative-time.js\";\nexport * from \"./components/composite/search-filter-bar.js\";\nexport * from \"./components/composite/stat-card.js\";\nexport * from \"./components/composite/status-config.js\";\nexport * from \"./components/composite/status-pill.js\";\nexport * from \"./components/composite/table-pagination.js\";\nexport * from \"./components/composite/text-utils.js\";\nexport * from \"./components/composite/toast.js\";\n// ─── Tier 1 — primitive (shadcn/ui \"new-york\", đã custom theo brand Comitor) ───\nexport * from \"./components/ui/accordion.js\";\nexport * from \"./components/ui/alert.js\";\nexport * from \"./components/ui/alert-dialog.js\";\nexport * from \"./components/ui/aspect-ratio.js\";\nexport * from \"./components/ui/avatar.js\";\nexport * from \"./components/ui/badge.js\";\nexport * from \"./components/ui/breadcrumb.js\";\nexport * from \"./components/ui/button.js\";\nexport * from \"./components/ui/button-group.js\";\nexport * from \"./components/ui/calendar.js\";\nexport * from \"./components/ui/card.js\";\nexport * from \"./components/ui/carousel.js\";\nexport * from \"./components/ui/checkbox.js\";\nexport * from \"./components/ui/collapsible.js\";\nexport * from \"./components/ui/command.js\";\nexport * from \"./components/ui/context-menu.js\";\nexport * from \"./components/ui/dialog.js\";\nexport * from \"./components/ui/drawer.js\";\nexport * from \"./components/ui/dropdown-menu.js\";\nexport * from \"./components/ui/empty.js\";\nexport * from \"./components/ui/field.js\";\nexport * from \"./components/ui/hover-card.js\";\nexport * from \"./components/ui/input.js\";\nexport * from \"./components/ui/input-group.js\";\nexport * from \"./components/ui/input-otp.js\";\nexport * from \"./components/ui/item.js\";\nexport * from \"./components/ui/kbd.js\";\nexport * from \"./components/ui/label.js\";\nexport * from \"./components/ui/menubar.js\";\nexport * from \"./components/ui/navigation-menu.js\";\nexport * from \"./components/ui/pagination.js\";\nexport * from \"./components/ui/popover.js\";\nexport * from \"./components/ui/progress.js\";\nexport * from \"./components/ui/radio-group.js\";\nexport * from \"./components/ui/resizable.js\";\nexport * from \"./components/ui/scroll-area.js\";\nexport * from \"./components/ui/select.js\";\nexport * from \"./components/ui/separator.js\";\nexport * from \"./components/ui/sheet.js\";\nexport * from \"./components/ui/skeleton.js\";\nexport * from \"./components/ui/slider.js\";\nexport * from \"./components/ui/spinner.js\";\nexport * from \"./components/ui/switch.js\";\nexport * from \"./components/ui/table.js\";\nexport * from \"./components/ui/tabs.js\";\nexport * from \"./components/ui/textarea.js\";\nexport * from \"./components/ui/toggle.js\";\nexport * from \"./components/ui/toggle-group.js\";\nexport * from \"./components/ui/tooltip.js\";\n\n// ─── lib + token ───\nexport * from \"./lib/cn.js\";\nexport * from \"./tokens.js\";\n"],"mappings":"AAyBA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAEd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AAGd,cAAc;AACd,cAAc;","names":[]}
|
package/dist/lib/cn.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ClassValue } from 'clsx';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Gộp class name: clsx xử lý điều kiện/mảng/object, tailwind-merge khử xung đột
|
|
5
|
+
* giữa các utility Tailwind cùng nhóm (class sau thắng class trước).
|
|
6
|
+
*
|
|
7
|
+
* Vì sao cần cả hai: `clsx("p-2", cond && "p-4")` cho ra chuỗi "p-2 p-4" — CSS sẽ
|
|
8
|
+
* ăn theo thứ tự trong stylesheet chứ không theo thứ tự trong chuỗi. twMerge cắt
|
|
9
|
+
* bỏ "p-2" để kết quả đúng ý người viết.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* cn("px-3 py-2", isActive && "bg-primary text-primary-foreground", className)
|
|
13
|
+
*/
|
|
14
|
+
declare function cn(...inputs: ClassValue[]): string;
|
|
15
|
+
|
|
16
|
+
export { cn };
|
package/dist/lib/cn.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/lib/cn.ts"],"sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Gộp class name: clsx xử lý điều kiện/mảng/object, tailwind-merge khử xung đột\n * giữa các utility Tailwind cùng nhóm (class sau thắng class trước).\n *\n * Vì sao cần cả hai: `clsx(\"p-2\", cond && \"p-4\")` cho ra chuỗi \"p-2 p-4\" — CSS sẽ\n * ăn theo thứ tự trong stylesheet chứ không theo thứ tự trong chuỗi. twMerge cắt\n * bỏ \"p-2\" để kết quả đúng ý người viết.\n *\n * @example\n * cn(\"px-3 py-2\", isActive && \"bg-primary text-primary-foreground\", className)\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n"],"mappings":"AAAA,SAA0B,YAAY;AACtC,SAAS,eAAe;AAajB,SAAS,MAAM,QAA8B;AAClD,SAAO,QAAQ,KAAK,MAAM,CAAC;AAC7B;","names":[]}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { ReactNode } from 'react';
|
|
3
|
+
import { UserMenuProps } from './user-menu.js';
|
|
4
|
+
import './types.js';
|
|
5
|
+
import 'lucide-react';
|
|
6
|
+
|
|
7
|
+
interface AppHeaderProps {
|
|
8
|
+
className?: string;
|
|
9
|
+
/** Tiêu đề trang — dùng khi không truyền `breadcrumb`. */
|
|
10
|
+
title?: ReactNode;
|
|
11
|
+
/** Slot breadcrumb (composite `PageHeader` của app) — ưu tiên hơn `title`. */
|
|
12
|
+
breadcrumb?: ReactNode;
|
|
13
|
+
/** Slot ngoài cùng bên trái (vd `<ComitorLockup size="xs" variant="auto" />`). */
|
|
14
|
+
logo?: ReactNode;
|
|
15
|
+
/** Thay ô tìm kiếm dựng sẵn bằng UI riêng của app. */
|
|
16
|
+
searchSlot?: ReactNode;
|
|
17
|
+
showSearch?: boolean;
|
|
18
|
+
/** Nút thu gọn sidebar ở header (layout sidebar-first thường để ở sidebar). */
|
|
19
|
+
showSidebarToggle?: boolean;
|
|
20
|
+
/** Slot thông báo (app tự render Popover + panel). Có slot thì `notificationCount` bị bỏ qua. */
|
|
21
|
+
notificationsSlot?: ReactNode;
|
|
22
|
+
notificationCount?: number;
|
|
23
|
+
onNotificationsClick?: () => void;
|
|
24
|
+
/** Slot phụ bên phải, đứng trước AppLauncher. */
|
|
25
|
+
extraSlot?: ReactNode;
|
|
26
|
+
showAppLauncher?: boolean;
|
|
27
|
+
showThemeToggle?: boolean;
|
|
28
|
+
showUserMenu?: boolean;
|
|
29
|
+
/** Chuyển tiếp props cho `UserMenu` (profileHref, settingsHref, items…). */
|
|
30
|
+
userMenuProps?: UserMenuProps;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Header cao 56px (`--header-height`), nền `bg-background/80 backdrop-blur`.
|
|
34
|
+
* Comitor là hệ sáng — **không** dùng header luôn-tối.
|
|
35
|
+
*
|
|
36
|
+
* Trái: hamburger (mobile) / nút thu gọn sidebar + logo + breadcrumb hoặc tiêu đề.
|
|
37
|
+
* Phải: ô tìm (Cmd/Ctrl+K) · AppLauncher · thông báo · ThemeToggle · UserMenu.
|
|
38
|
+
*/
|
|
39
|
+
declare function AppHeader({ className, title, breadcrumb, logo, searchSlot, showSearch, showSidebarToggle, notificationsSlot, notificationCount, onNotificationsClick, extraSlot, showAppLauncher, showThemeToggle, showUserMenu, userMenuProps }: AppHeaderProps): React.JSX.Element;
|
|
40
|
+
|
|
41
|
+
export { AppHeader, type AppHeaderProps };
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Menu, PanelLeft, Search } from "lucide-react";
|
|
4
|
+
import { Kbd } from "../components/ui/kbd.js";
|
|
5
|
+
import { Tooltip, TooltipContent, TooltipTrigger } from "../components/ui/tooltip.js";
|
|
6
|
+
import { cn } from "../lib/cn.js";
|
|
7
|
+
import { AppLauncher } from "./app-launcher.js";
|
|
8
|
+
import { NotificationsButton } from "./notifications-button.js";
|
|
9
|
+
import { useIsMac, useShell } from "./shell-context.js";
|
|
10
|
+
import { ThemeToggle } from "./theme-toggle.js";
|
|
11
|
+
import { UserMenu } from "./user-menu.js";
|
|
12
|
+
function AppHeader({
|
|
13
|
+
className,
|
|
14
|
+
title,
|
|
15
|
+
breadcrumb,
|
|
16
|
+
logo,
|
|
17
|
+
searchSlot,
|
|
18
|
+
showSearch = true,
|
|
19
|
+
showSidebarToggle = false,
|
|
20
|
+
notificationsSlot,
|
|
21
|
+
notificationCount,
|
|
22
|
+
onNotificationsClick,
|
|
23
|
+
extraSlot,
|
|
24
|
+
showAppLauncher = true,
|
|
25
|
+
showThemeToggle = true,
|
|
26
|
+
showUserMenu = true,
|
|
27
|
+
userMenuProps
|
|
28
|
+
}) {
|
|
29
|
+
const { setMobileMenuOpen, setCommandPaletteOpen, toggleSidebar, sidebarCollapsed, labels, user } = useShell();
|
|
30
|
+
const isMac = useIsMac();
|
|
31
|
+
const modKey = isMac ? "\u2318" : "Ctrl";
|
|
32
|
+
return /* @__PURE__ */ jsxs(
|
|
33
|
+
"header",
|
|
34
|
+
{
|
|
35
|
+
className: cn(
|
|
36
|
+
"sticky top-0 z-40 flex h-header shrink-0 items-center gap-2 px-3 sm:px-4",
|
|
37
|
+
"border-b border-border bg-background/80 backdrop-blur-sm",
|
|
38
|
+
className
|
|
39
|
+
),
|
|
40
|
+
children: [
|
|
41
|
+
/* @__PURE__ */ jsx(
|
|
42
|
+
"button",
|
|
43
|
+
{
|
|
44
|
+
type: "button",
|
|
45
|
+
onClick: () => setMobileMenuOpen(true),
|
|
46
|
+
"aria-label": labels.openMenu,
|
|
47
|
+
className: cn(
|
|
48
|
+
"-ml-1 flex size-9 shrink-0 items-center justify-center rounded-md text-muted-foreground md:hidden",
|
|
49
|
+
"transition-colors duration-150 ease-out hover:bg-muted hover:text-foreground"
|
|
50
|
+
),
|
|
51
|
+
children: /* @__PURE__ */ jsx(Menu, { className: "size-5" })
|
|
52
|
+
}
|
|
53
|
+
),
|
|
54
|
+
showSidebarToggle ? /* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
55
|
+
/* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsx(
|
|
56
|
+
"button",
|
|
57
|
+
{
|
|
58
|
+
type: "button",
|
|
59
|
+
onClick: toggleSidebar,
|
|
60
|
+
"aria-label": sidebarCollapsed ? labels.expandSidebar : labels.collapseSidebar,
|
|
61
|
+
className: cn(
|
|
62
|
+
"hidden size-9 shrink-0 items-center justify-center rounded-md text-muted-foreground md:flex",
|
|
63
|
+
"transition-colors duration-150 ease-out hover:bg-muted hover:text-foreground"
|
|
64
|
+
),
|
|
65
|
+
children: /* @__PURE__ */ jsx(PanelLeft, { className: "size-4" })
|
|
66
|
+
}
|
|
67
|
+
) }),
|
|
68
|
+
/* @__PURE__ */ jsxs(TooltipContent, { side: "bottom", children: [
|
|
69
|
+
sidebarCollapsed ? labels.expandSidebar : labels.collapseSidebar,
|
|
70
|
+
" \xB7 ",
|
|
71
|
+
modKey,
|
|
72
|
+
" + B"
|
|
73
|
+
] })
|
|
74
|
+
] }) : null,
|
|
75
|
+
logo ? /* @__PURE__ */ jsx("div", { className: "shrink-0", children: logo }) : null,
|
|
76
|
+
/* @__PURE__ */ jsx("div", { className: "flex min-w-0 flex-1 items-center", children: breadcrumb ?? (title ? /* @__PURE__ */ jsx("h1", { className: "truncate text-sm font-semibold text-foreground", children: title }) : null) }),
|
|
77
|
+
/* @__PURE__ */ jsxs("div", { className: "flex shrink-0 items-center gap-1", children: [
|
|
78
|
+
extraSlot,
|
|
79
|
+
showSearch ? searchSlot ?? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
80
|
+
/* @__PURE__ */ jsxs(
|
|
81
|
+
"button",
|
|
82
|
+
{
|
|
83
|
+
type: "button",
|
|
84
|
+
onClick: () => setCommandPaletteOpen(true),
|
|
85
|
+
className: cn(
|
|
86
|
+
"hidden h-8 w-52 items-center gap-2 rounded-md border border-input bg-muted/40 px-2.5 sm:flex",
|
|
87
|
+
"text-sm text-muted-foreground transition-colors duration-150 ease-out",
|
|
88
|
+
"hover:border-gold-300 hover:bg-muted"
|
|
89
|
+
),
|
|
90
|
+
children: [
|
|
91
|
+
/* @__PURE__ */ jsx(Search, { className: "size-3.5 shrink-0" }),
|
|
92
|
+
/* @__PURE__ */ jsx("span", { className: "flex-1 truncate text-left", children: labels.searchPlaceholder }),
|
|
93
|
+
/* @__PURE__ */ jsxs(Kbd, { children: [
|
|
94
|
+
modKey,
|
|
95
|
+
"K"
|
|
96
|
+
] })
|
|
97
|
+
]
|
|
98
|
+
}
|
|
99
|
+
),
|
|
100
|
+
/* @__PURE__ */ jsx(
|
|
101
|
+
"button",
|
|
102
|
+
{
|
|
103
|
+
type: "button",
|
|
104
|
+
onClick: () => setCommandPaletteOpen(true),
|
|
105
|
+
"aria-label": labels.search,
|
|
106
|
+
className: cn(
|
|
107
|
+
"flex size-9 items-center justify-center rounded-md text-muted-foreground sm:hidden",
|
|
108
|
+
"transition-colors duration-150 ease-out hover:bg-muted hover:text-foreground"
|
|
109
|
+
),
|
|
110
|
+
children: /* @__PURE__ */ jsx(Search, { className: "size-4" })
|
|
111
|
+
}
|
|
112
|
+
)
|
|
113
|
+
] }) : null,
|
|
114
|
+
showAppLauncher ? /* @__PURE__ */ jsx(AppLauncher, {}) : null,
|
|
115
|
+
notificationsSlot ?? (notificationCount === void 0 ? null : /* @__PURE__ */ jsx(
|
|
116
|
+
NotificationsButton,
|
|
117
|
+
{
|
|
118
|
+
count: notificationCount,
|
|
119
|
+
label: labels.notifications,
|
|
120
|
+
onClick: onNotificationsClick
|
|
121
|
+
}
|
|
122
|
+
)),
|
|
123
|
+
showThemeToggle ? /* @__PURE__ */ jsx(ThemeToggle, { labels }) : null,
|
|
124
|
+
showUserMenu && user ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
125
|
+
/* @__PURE__ */ jsx("span", { className: "mx-1 hidden h-5 w-px bg-border sm:block", "aria-hidden": "true" }),
|
|
126
|
+
/* @__PURE__ */ jsx(UserMenu, { ...userMenuProps })
|
|
127
|
+
] }) : null
|
|
128
|
+
] })
|
|
129
|
+
]
|
|
130
|
+
}
|
|
131
|
+
);
|
|
132
|
+
}
|
|
133
|
+
export {
|
|
134
|
+
AppHeader
|
|
135
|
+
};
|
|
136
|
+
//# sourceMappingURL=app-header.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/shell/app-header.tsx"],"sourcesContent":["\"use client\";\n\nimport { Menu, PanelLeft, Search } from \"lucide-react\";\nimport type { ReactNode } from \"react\";\nimport { Kbd } from \"../components/ui/kbd.js\";\nimport { Tooltip, TooltipContent, TooltipTrigger } from \"../components/ui/tooltip.js\";\nimport { cn } from \"../lib/cn.js\";\nimport { AppLauncher } from \"./app-launcher.js\";\nimport { NotificationsButton } from \"./notifications-button.js\";\nimport { useIsMac, useShell } from \"./shell-context.js\";\nimport { ThemeToggle } from \"./theme-toggle.js\";\nimport { UserMenu, type UserMenuProps } from \"./user-menu.js\";\n\nexport interface AppHeaderProps {\n className?: string;\n /** Tiêu đề trang — dùng khi không truyền `breadcrumb`. */\n title?: ReactNode;\n /** Slot breadcrumb (composite `PageHeader` của app) — ưu tiên hơn `title`. */\n breadcrumb?: ReactNode;\n /** Slot ngoài cùng bên trái (vd `<ComitorLockup size=\"xs\" variant=\"auto\" />`). */\n logo?: ReactNode;\n\n /** Thay ô tìm kiếm dựng sẵn bằng UI riêng của app. */\n searchSlot?: ReactNode;\n showSearch?: boolean;\n /** Nút thu gọn sidebar ở header (layout sidebar-first thường để ở sidebar). */\n showSidebarToggle?: boolean;\n\n /** Slot thông báo (app tự render Popover + panel). Có slot thì `notificationCount` bị bỏ qua. */\n notificationsSlot?: ReactNode;\n notificationCount?: number;\n onNotificationsClick?: () => void;\n\n /** Slot phụ bên phải, đứng trước AppLauncher. */\n extraSlot?: ReactNode;\n\n showAppLauncher?: boolean;\n showThemeToggle?: boolean;\n showUserMenu?: boolean;\n /** Chuyển tiếp props cho `UserMenu` (profileHref, settingsHref, items…). */\n userMenuProps?: UserMenuProps;\n}\n\n/**\n * Header cao 56px (`--header-height`), nền `bg-background/80 backdrop-blur`.\n * Comitor là hệ sáng — **không** dùng header luôn-tối.\n *\n * Trái: hamburger (mobile) / nút thu gọn sidebar + logo + breadcrumb hoặc tiêu đề.\n * Phải: ô tìm (Cmd/Ctrl+K) · AppLauncher · thông báo · ThemeToggle · UserMenu.\n */\nexport function AppHeader({\n className,\n title,\n breadcrumb,\n logo,\n searchSlot,\n showSearch = true,\n showSidebarToggle = false,\n notificationsSlot,\n notificationCount,\n onNotificationsClick,\n extraSlot,\n showAppLauncher = true,\n showThemeToggle = true,\n showUserMenu = true,\n userMenuProps\n}: AppHeaderProps) {\n const { setMobileMenuOpen, setCommandPaletteOpen, toggleSidebar, sidebarCollapsed, labels, user } = useShell();\n const isMac = useIsMac();\n const modKey = isMac ? \"⌘\" : \"Ctrl\";\n\n return (\n <header\n className={cn(\n \"sticky top-0 z-40 flex h-header shrink-0 items-center gap-2 px-3 sm:px-4\",\n \"border-b border-border bg-background/80 backdrop-blur-sm\",\n className\n )}\n >\n {/* Mở menu off-canvas — chỉ màn hình hẹp */}\n <button\n type=\"button\"\n onClick={() => setMobileMenuOpen(true)}\n aria-label={labels.openMenu}\n className={cn(\n \"-ml-1 flex size-9 shrink-0 items-center justify-center rounded-md text-muted-foreground md:hidden\",\n \"transition-colors duration-150 ease-out hover:bg-muted hover:text-foreground\"\n )}\n >\n <Menu className=\"size-5\" />\n </button>\n\n {showSidebarToggle ? (\n <Tooltip>\n <TooltipTrigger asChild>\n <button\n type=\"button\"\n onClick={toggleSidebar}\n aria-label={sidebarCollapsed ? labels.expandSidebar : labels.collapseSidebar}\n className={cn(\n \"hidden size-9 shrink-0 items-center justify-center rounded-md text-muted-foreground md:flex\",\n \"transition-colors duration-150 ease-out hover:bg-muted hover:text-foreground\"\n )}\n >\n <PanelLeft className=\"size-4\" />\n </button>\n </TooltipTrigger>\n <TooltipContent side=\"bottom\">\n {sidebarCollapsed ? labels.expandSidebar : labels.collapseSidebar} · {modKey} + B\n </TooltipContent>\n </Tooltip>\n ) : null}\n\n {logo ? <div className=\"shrink-0\">{logo}</div> : null}\n\n {/* Breadcrumb thắng title khi có cả hai */}\n <div className=\"flex min-w-0 flex-1 items-center\">\n {breadcrumb ?? (title ? <h1 className=\"truncate text-sm font-semibold text-foreground\">{title}</h1> : null)}\n </div>\n\n <div className=\"flex shrink-0 items-center gap-1\">\n {extraSlot}\n\n {showSearch\n ? (searchSlot ?? (\n <>\n {/* ≥sm: ô giả lập trường tìm kiếm, kèm gợi ý phím tắt */}\n <button\n type=\"button\"\n onClick={() => setCommandPaletteOpen(true)}\n className={cn(\n \"hidden h-8 w-52 items-center gap-2 rounded-md border border-input bg-muted/40 px-2.5 sm:flex\",\n \"text-sm text-muted-foreground transition-colors duration-150 ease-out\",\n \"hover:border-gold-300 hover:bg-muted\"\n )}\n >\n <Search className=\"size-3.5 shrink-0\" />\n <span className=\"flex-1 truncate text-left\">{labels.searchPlaceholder}</span>\n <Kbd>{modKey}K</Kbd>\n </button>\n\n {/* <sm: chỉ icon */}\n <button\n type=\"button\"\n onClick={() => setCommandPaletteOpen(true)}\n aria-label={labels.search}\n className={cn(\n \"flex size-9 items-center justify-center rounded-md text-muted-foreground sm:hidden\",\n \"transition-colors duration-150 ease-out hover:bg-muted hover:text-foreground\"\n )}\n >\n <Search className=\"size-4\" />\n </button>\n </>\n ))\n : null}\n\n {showAppLauncher ? <AppLauncher /> : null}\n\n {notificationsSlot ??\n (notificationCount === undefined ? null : (\n <NotificationsButton\n count={notificationCount}\n label={labels.notifications}\n onClick={onNotificationsClick}\n />\n ))}\n\n {showThemeToggle ? <ThemeToggle labels={labels} /> : null}\n\n {showUserMenu && user ? (\n <>\n <span className=\"mx-1 hidden h-5 w-px bg-border sm:block\" aria-hidden=\"true\" />\n <UserMenu {...userMenuProps} />\n </>\n ) : null}\n </div>\n </header>\n );\n}\n"],"mappings":";AAyFQ,SAoCM,UApCN,KAkBE,YAlBF;AAvFR,SAAS,MAAM,WAAW,cAAc;AAExC,SAAS,WAAW;AACpB,SAAS,SAAS,gBAAgB,sBAAsB;AACxD,SAAS,UAAU;AACnB,SAAS,mBAAmB;AAC5B,SAAS,2BAA2B;AACpC,SAAS,UAAU,gBAAgB;AACnC,SAAS,mBAAmB;AAC5B,SAAS,gBAAoC;AAuCtC,SAAS,UAAU;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb,oBAAoB;AAAA,EACpB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,EAClB,kBAAkB;AAAA,EAClB,eAAe;AAAA,EACf;AACF,GAAmB;AACjB,QAAM,EAAE,mBAAmB,uBAAuB,eAAe,kBAAkB,QAAQ,KAAK,IAAI,SAAS;AAC7G,QAAM,QAAQ,SAAS;AACvB,QAAM,SAAS,QAAQ,WAAM;AAE7B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MAGA;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAS,MAAM,kBAAkB,IAAI;AAAA,YACrC,cAAY,OAAO;AAAA,YACnB,WAAW;AAAA,cACT;AAAA,cACA;AAAA,YACF;AAAA,YAEA,8BAAC,QAAK,WAAU,UAAS;AAAA;AAAA,QAC3B;AAAA,QAEC,oBACC,qBAAC,WACC;AAAA,8BAAC,kBAAe,SAAO,MACrB;AAAA,YAAC;AAAA;AAAA,cACC,MAAK;AAAA,cACL,SAAS;AAAA,cACT,cAAY,mBAAmB,OAAO,gBAAgB,OAAO;AAAA,cAC7D,WAAW;AAAA,gBACT;AAAA,gBACA;AAAA,cACF;AAAA,cAEA,8BAAC,aAAU,WAAU,UAAS;AAAA;AAAA,UAChC,GACF;AAAA,UACA,qBAAC,kBAAe,MAAK,UAClB;AAAA,+BAAmB,OAAO,gBAAgB,OAAO;AAAA,YAAgB;AAAA,YAAI;AAAA,YAAO;AAAA,aAC/E;AAAA,WACF,IACE;AAAA,QAEH,OAAO,oBAAC,SAAI,WAAU,YAAY,gBAAK,IAAS;AAAA,QAGjD,oBAAC,SAAI,WAAU,oCACZ,yBAAe,QAAQ,oBAAC,QAAG,WAAU,kDAAkD,iBAAM,IAAQ,OACxG;AAAA,QAEA,qBAAC,SAAI,WAAU,oCACZ;AAAA;AAAA,UAEA,aACI,cACC,iCAEE;AAAA;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAS,MAAM,sBAAsB,IAAI;AAAA,gBACzC,WAAW;AAAA,kBACT;AAAA,kBACA;AAAA,kBACA;AAAA,gBACF;AAAA,gBAEA;AAAA,sCAAC,UAAO,WAAU,qBAAoB;AAAA,kBACtC,oBAAC,UAAK,WAAU,6BAA6B,iBAAO,mBAAkB;AAAA,kBACtE,qBAAC,OAAK;AAAA;AAAA,oBAAO;AAAA,qBAAC;AAAA;AAAA;AAAA,YAChB;AAAA,YAGA;AAAA,cAAC;AAAA;AAAA,gBACC,MAAK;AAAA,gBACL,SAAS,MAAM,sBAAsB,IAAI;AAAA,gBACzC,cAAY,OAAO;AAAA,gBACnB,WAAW;AAAA,kBACT;AAAA,kBACA;AAAA,gBACF;AAAA,gBAEA,8BAAC,UAAO,WAAU,UAAS;AAAA;AAAA,YAC7B;AAAA,aACF,IAEF;AAAA,UAEH,kBAAkB,oBAAC,eAAY,IAAK;AAAA,UAEpC,sBACE,sBAAsB,SAAY,OACjC;AAAA,YAAC;AAAA;AAAA,cACC,OAAO;AAAA,cACP,OAAO,OAAO;AAAA,cACd,SAAS;AAAA;AAAA,UACX;AAAA,UAGH,kBAAkB,oBAAC,eAAY,QAAgB,IAAK;AAAA,UAEpD,gBAAgB,OACf,iCACE;AAAA,gCAAC,UAAK,WAAU,2CAA0C,eAAY,QAAO;AAAA,YAC7E,oBAAC,YAAU,GAAG,eAAe;AAAA,aAC/B,IACE;AAAA,WACN;AAAA;AAAA;AAAA,EACF;AAEJ;","names":[]}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
interface AppLauncherPanelProps {
|
|
4
|
+
/** "grid" = lưới 3 cột kiểu Lark/Google Workspace; "list" = danh sách dọc (menu mobile). */
|
|
5
|
+
variant?: "grid" | "list";
|
|
6
|
+
className?: string;
|
|
7
|
+
/** Gọi sau khi người dùng chọn một app — dùng để đóng popover/menu mobile. */
|
|
8
|
+
onSelected?: () => void;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Nội dung của AppLauncher, tách riêng để `MobileMenu` nhúng thẳng (không popover).
|
|
12
|
+
*
|
|
13
|
+
* Điều hướng bàn phím: ←/→/↑/↓ chạy giữa các ô (xuyên cả hai nhóm như một lưới liền),
|
|
14
|
+
* Home/End nhảy đầu-cuối; Enter/Space để chính thẻ button/link xử lý.
|
|
15
|
+
* Vị trí ô đọc từ DOM chứ không giữ mảng ref: ô "đã mở khoá" có thể là `LinkComponent`
|
|
16
|
+
* do app cung cấp — không chắc component đó nhận `ref`.
|
|
17
|
+
*/
|
|
18
|
+
declare function AppLauncherPanel({ variant, className, onSelected }: AppLauncherPanelProps): React.JSX.Element | null;
|
|
19
|
+
interface AppLauncherProps extends AppLauncherPanelProps {
|
|
20
|
+
/** Bỏ nút bấm + Popover, render thẳng panel (MobileMenu dùng cách này). */
|
|
21
|
+
inline?: boolean;
|
|
22
|
+
align?: "start" | "center" | "end";
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* **Trục 2 — chuyển sản phẩm trong cùng workspace.**
|
|
26
|
+
*
|
|
27
|
+
* Nút lưới 3×3 ở header (kiểu Lark / Google Workspace) mở popover lưới ô app.
|
|
28
|
+
* Trạng thái mở nằm ở `ShellProvider` để phím tắt `Cmd/Ctrl + Shift + K` bật được.
|
|
29
|
+
* App chưa có trong gói hiện ô khoá và gọi `onUpsell(appId)` thay vì điều hướng.
|
|
30
|
+
*/
|
|
31
|
+
declare function AppLauncher({ className, variant, inline, align, onSelected }: AppLauncherProps): React.JSX.Element | null;
|
|
32
|
+
|
|
33
|
+
export { AppLauncher, AppLauncherPanel, type AppLauncherPanelProps, type AppLauncherProps };
|