@caratlogic/design-system 0.1.5 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/molecules/TimePicker/TimePicker.d.ts +3 -0
- package/dist/components/molecules/TimePicker/TimePicker.d.ts.map +1 -0
- package/dist/components/molecules/TimePicker/TimePicker.parts.d.ts +8 -0
- package/dist/components/molecules/TimePicker/TimePicker.parts.d.ts.map +1 -0
- package/dist/components/molecules/TimePicker/TimePicker.types.d.ts +33 -0
- package/dist/components/molecules/TimePicker/TimePicker.types.d.ts.map +1 -0
- package/dist/components/molecules/TimePicker/TimePicker.utils.d.ts +20 -0
- package/dist/components/molecules/TimePicker/TimePicker.utils.d.ts.map +1 -0
- package/dist/components/molecules/TimePicker/index.d.ts +3 -0
- package/dist/components/molecules/TimePicker/index.d.ts.map +1 -0
- package/dist/index.cjs.js +154 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.esm.js +154 -2
- package/dist/index.esm.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -75,6 +75,7 @@ export * from './components/molecules/SlideOut';
|
|
|
75
75
|
export * from './components/molecules/SpecList';
|
|
76
76
|
export * from './components/molecules/TablePagination';
|
|
77
77
|
export * from './components/molecules/TagsInput';
|
|
78
|
+
export * from './components/molecules/TimePicker';
|
|
78
79
|
export * from './components/molecules/WarehouseComboBox';
|
|
79
80
|
export * from './components/molecules/ZoomSplitViewer';
|
|
80
81
|
export * from './components/organisms/AdvancedSearchDrawer';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.esm.js
CHANGED
|
@@ -28579,7 +28579,7 @@ function Modal({ open, onClose, title, icon, children, footer, size = 'md', hide
|
|
|
28579
28579
|
return (jsx(Dialog, { open: open, onOpenChange: (o) => !o && onClose(), children: jsxs(DialogContent, { hideCloseButton: true, style: {
|
|
28580
28580
|
width: `min(${maxWidth}px, calc(100vw - 2rem))`,
|
|
28581
28581
|
maxWidth: `${maxWidth}px`,
|
|
28582
|
-
}, className: cn('flex max-h-[calc(100vh-2rem)] flex-col gap-0 overflow-hidden p-0 sm:max-w-none', className), children: [jsxs("header", { className: "flex items-center justify-between gap-4 border-b border-border px-6 py-4", children: [jsx(DialogPrimitive.Title, { asChild: true, children: jsxs("div", { className: "flex items-center gap-2 text-base font-medium text-foreground", children: [icon, jsx("span", { children: title })] }) }), !hideCloseButton && (jsx(DialogPrimitive.Close, { "aria-label": "Close", className: "inline-flex h-8 w-8 items-center justify-center rounded-md text-label transition-colors hover:bg-
|
|
28582
|
+
}, className: cn('flex max-h-[calc(100vh-2rem)] flex-col gap-0 overflow-hidden p-0 sm:max-w-none', className), children: [jsxs("header", { className: "flex items-center justify-between gap-4 border-b border-border px-6 py-4", children: [jsx(DialogPrimitive.Title, { asChild: true, children: jsxs("div", { className: "flex items-center gap-2 text-base font-medium text-foreground", children: [icon, jsx("span", { children: title })] }) }), !hideCloseButton && (jsx(DialogPrimitive.Close, { "aria-label": "Close", className: "inline-flex h-8 w-8 items-center justify-center rounded-md text-label transition-colors hover:bg-muted hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-primary/30", children: jsx(X$2, { className: "h-4 w-4" }) }))] }), jsx("div", { className: cn('flex-1 overflow-y-auto', bodyClassName), children: children }), footer && (jsx("footer", { className: "flex items-center justify-end gap-3 border-t border-border px-6 py-4", children: footer }))] }) }));
|
|
28583
28583
|
}
|
|
28584
28584
|
|
|
28585
28585
|
/**
|
|
@@ -57666,6 +57666,158 @@ function TagsInput({ value, onChange, placeholder, helperText, uppercase = false
|
|
|
57666
57666
|
return (jsxs("div", { className: "w-full", children: [jsxs("div", { className: "flex items-center gap-2", children: [jsx(Input, { value: input, onChange: onInputChange, onKeyDown: onInputKeyDown, placeholder: placeholder || 'Type and Press Enter', className: "flex-1 bg-formInput" }), jsxs(Button$1, { type: "button", onClick: addTag, disabled: addDisabled, className: "h-9 gap-1.5 disabled:opacity-50", children: [jsx(Plus, { className: "h-4 w-4" }), "Add"] })] }), helperText && (jsx("p", { className: "mt-1.5 text-xs text-muted-foreground", children: helperText })), value.length > 0 && (jsx("div", { className: "mt-3 flex flex-wrap gap-2", children: value.map((tag, idx) => (jsxs("span", { className: "inline-flex items-center gap-1.5 rounded-md border border-border bg-secondary px-2 py-1 text-xs font-medium text-foreground", children: [tag, jsx("button", { type: "button", onClick: () => removeTag(idx), "aria-label": `Remove ${tag}`, className: "cursor-pointer text-muted-foreground transition-colors hover:text-foreground", children: jsx(X$2, { className: "h-3 w-3" }) })] }, idx))) }))] }));
|
|
57667
57667
|
}
|
|
57668
57668
|
|
|
57669
|
+
/**
|
|
57670
|
+
* One scrolling column of the picker (hours, minutes or period). The selected
|
|
57671
|
+
* row is scrolled into view whenever it changes, so reopening the popover lands
|
|
57672
|
+
* on the current value instead of at midnight.
|
|
57673
|
+
*/
|
|
57674
|
+
function TimeColumn({ label, options, selected, onSelect, }) {
|
|
57675
|
+
const listRef = useRef(null);
|
|
57676
|
+
const activeRef = useRef(null);
|
|
57677
|
+
useEffect(() => {
|
|
57678
|
+
const list = listRef.current;
|
|
57679
|
+
const active = activeRef.current;
|
|
57680
|
+
if (!list || !active)
|
|
57681
|
+
return;
|
|
57682
|
+
// `scrollIntoView` would scroll the page as well as the column.
|
|
57683
|
+
list.scrollTop =
|
|
57684
|
+
active.offsetTop - list.clientHeight / 2 + active.clientHeight / 2;
|
|
57685
|
+
}, [selected]);
|
|
57686
|
+
return (jsxs("div", { className: "flex min-w-0 flex-col", children: [jsx("span", { className: "px-1 pb-1.5 text-center text-[11px] font-medium uppercase tracking-wide text-muted-foreground", children: label }), jsx("div", { ref: listRef, role: "listbox", "aria-label": label, className: "scrollbar-thin h-[184px] overflow-y-auto px-1", children: jsx("div", { className: "flex flex-col gap-0.5", children: options.map((option) => {
|
|
57687
|
+
const isSelected = option.value === selected;
|
|
57688
|
+
return (jsx("button", { ref: isSelected ? activeRef : undefined, type: "button", role: "option", "aria-selected": isSelected, onClick: () => onSelect(option.value), className: cn('rounded-md px-3 py-1.5 text-center text-sm tabular-nums transition-colors', 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring', isSelected
|
|
57689
|
+
? 'bg-primary text-primary-foreground'
|
|
57690
|
+
: 'text-foreground hover:bg-muted'), children: option.label }, option.value));
|
|
57691
|
+
}) }) })] }));
|
|
57692
|
+
}
|
|
57693
|
+
|
|
57694
|
+
const TIME_PATTERN = /^(\d{1,2}):(\d{2})(?::\d{2})?$/;
|
|
57695
|
+
const pad = (n) => String(n).padStart(2, '0');
|
|
57696
|
+
/** Reads `HH:mm` / `HH:mm:ss`. Returns null for anything out of range. */
|
|
57697
|
+
function parseTimeValue(value) {
|
|
57698
|
+
const match = TIME_PATTERN.exec((value ?? '').trim());
|
|
57699
|
+
if (!match)
|
|
57700
|
+
return null;
|
|
57701
|
+
const hour = Number(match[1]);
|
|
57702
|
+
const minute = Number(match[2]);
|
|
57703
|
+
if (hour > 23 || minute > 59)
|
|
57704
|
+
return null;
|
|
57705
|
+
return { hour, minute };
|
|
57706
|
+
}
|
|
57707
|
+
/** The stored form — always 24-hour, whatever the display format. */
|
|
57708
|
+
function toTimeValue(hour, minute) {
|
|
57709
|
+
return `${pad(hour)}:${pad(minute)}`;
|
|
57710
|
+
}
|
|
57711
|
+
function formatTimeDisplay(time, use24Hour) {
|
|
57712
|
+
if (use24Hour)
|
|
57713
|
+
return toTimeValue(time.hour, time.minute);
|
|
57714
|
+
// 0 and 12 both map to 12 — midnight is 12 AM, noon is 12 PM.
|
|
57715
|
+
const hour12 = time.hour % 12 === 0 ? 12 : time.hour % 12;
|
|
57716
|
+
const period = time.hour < 12 ? 'AM' : 'PM';
|
|
57717
|
+
return `${pad(hour12)}:${pad(time.minute)} ${period}`;
|
|
57718
|
+
}
|
|
57719
|
+
function buildHourOptions(use24Hour) {
|
|
57720
|
+
if (use24Hour) {
|
|
57721
|
+
return Array.from({ length: 24 }, (_, hour) => ({
|
|
57722
|
+
value: hour,
|
|
57723
|
+
label: pad(hour),
|
|
57724
|
+
}));
|
|
57725
|
+
}
|
|
57726
|
+
// 12 first, matching how a clock reads.
|
|
57727
|
+
return Array.from({ length: 12 }, (_, index) => {
|
|
57728
|
+
const hour12 = index === 0 ? 12 : index;
|
|
57729
|
+
return { value: hour12, label: pad(hour12) };
|
|
57730
|
+
});
|
|
57731
|
+
}
|
|
57732
|
+
function buildMinuteOptions(step) {
|
|
57733
|
+
const safeStep = Number.isFinite(step) && step > 0 ? Math.floor(step) : 1;
|
|
57734
|
+
const options = [];
|
|
57735
|
+
for (let minute = 0; minute < 60; minute += safeStep) {
|
|
57736
|
+
options.push({ value: minute, label: pad(minute) });
|
|
57737
|
+
}
|
|
57738
|
+
return options;
|
|
57739
|
+
}
|
|
57740
|
+
/** The hour as the 12-hour column shows it (12, 1…11). */
|
|
57741
|
+
function toHour12(hour) {
|
|
57742
|
+
return hour % 12 === 0 ? 12 : hour % 12;
|
|
57743
|
+
}
|
|
57744
|
+
/** Rebuilds a 24-hour hour from a 12-hour column value and its period. */
|
|
57745
|
+
function fromHour12(hour12, period) {
|
|
57746
|
+
const base = hour12 % 12;
|
|
57747
|
+
return period === 'PM' ? base + 12 : base;
|
|
57748
|
+
}
|
|
57749
|
+
function periodOf(hour) {
|
|
57750
|
+
return hour < 12 ? 'AM' : 'PM';
|
|
57751
|
+
}
|
|
57752
|
+
|
|
57753
|
+
// Only one TimePicker popover should be open at a time — same coordination the
|
|
57754
|
+
// DateInput uses, for the same reason: each is its own `modal` Radix Popover, so
|
|
57755
|
+
// opening a second does not dismiss the first by outside-click.
|
|
57756
|
+
const TIMEPICKER_OPEN_EVENT = 'caratlogic:timepicker-open';
|
|
57757
|
+
const PERIOD_OPTIONS = [
|
|
57758
|
+
{ value: 0, label: 'AM' },
|
|
57759
|
+
{ value: 1, label: 'PM' },
|
|
57760
|
+
];
|
|
57761
|
+
function TimePicker({ value, onChange, onBlur, name, className, disabled, placeholder = 'Select time', use24Hour = false, minuteStep = 1, hideFooter = false, }) {
|
|
57762
|
+
const [open, setOpen] = useState(false);
|
|
57763
|
+
const instanceId = useId$2();
|
|
57764
|
+
const parsed = parseTimeValue(value);
|
|
57765
|
+
useEffect(() => {
|
|
57766
|
+
const onOtherOpen = (e) => {
|
|
57767
|
+
if (e.detail !== instanceId)
|
|
57768
|
+
setOpen(false);
|
|
57769
|
+
};
|
|
57770
|
+
window.addEventListener(TIMEPICKER_OPEN_EVENT, onOtherOpen);
|
|
57771
|
+
return () => window.removeEventListener(TIMEPICKER_OPEN_EVENT, onOtherOpen);
|
|
57772
|
+
}, [instanceId]);
|
|
57773
|
+
const handleOpenChange = (next) => {
|
|
57774
|
+
setOpen(next);
|
|
57775
|
+
if (next) {
|
|
57776
|
+
window.dispatchEvent(new CustomEvent(TIMEPICKER_OPEN_EVENT, { detail: instanceId }));
|
|
57777
|
+
}
|
|
57778
|
+
};
|
|
57779
|
+
/** Picking one column before the others commits against a 00:00 baseline. */
|
|
57780
|
+
const commit = (hour, minute) => {
|
|
57781
|
+
onChange(toTimeValue(hour, minute));
|
|
57782
|
+
};
|
|
57783
|
+
const handleHour = (picked) => {
|
|
57784
|
+
const minute = parsed?.minute ?? 0;
|
|
57785
|
+
if (use24Hour) {
|
|
57786
|
+
commit(picked, minute);
|
|
57787
|
+
return;
|
|
57788
|
+
}
|
|
57789
|
+
commit(fromHour12(picked, parsed ? periodOf(parsed.hour) : 'AM'), minute);
|
|
57790
|
+
};
|
|
57791
|
+
const handleMinute = (picked) => {
|
|
57792
|
+
commit(parsed?.hour ?? 0, picked);
|
|
57793
|
+
};
|
|
57794
|
+
const handlePeriod = (picked) => {
|
|
57795
|
+
const period = picked === 0 ? 'AM' : 'PM';
|
|
57796
|
+
const hour12 = parsed ? toHour12(parsed.hour) : 12;
|
|
57797
|
+
commit(fromHour12(hour12, period), parsed?.minute ?? 0);
|
|
57798
|
+
};
|
|
57799
|
+
const selectedHour = parsed
|
|
57800
|
+
? use24Hour
|
|
57801
|
+
? parsed.hour
|
|
57802
|
+
: toHour12(parsed.hour)
|
|
57803
|
+
: null;
|
|
57804
|
+
// NOTE: `open` is driven from the button's onClick rather than
|
|
57805
|
+
// <PopoverTrigger>, matching DateInput — inside a modal <SlideOut> the
|
|
57806
|
+
// trigger's built-in toggle does not fire in Safari. <PopoverAnchor> is pure
|
|
57807
|
+
// positioning, so a single controlled toggle stays the only source of truth.
|
|
57808
|
+
return (jsxs(Popover, { open: open, onOpenChange: handleOpenChange, modal: true, children: [jsx(PopoverAnchor, { asChild: true, children: jsxs("button", { type: "button", name: name, onBlur: onBlur, disabled: disabled, "aria-haspopup": "dialog", "aria-expanded": open, onClick: () => {
|
|
57809
|
+
if (!disabled)
|
|
57810
|
+
handleOpenChange(!open);
|
|
57811
|
+
}, "data-slot": "input", "data-empty": !parsed || undefined, className: cn('border-input-border flex h-9 w-full min-w-0 cursor-pointer items-center justify-between gap-2 rounded-md border bg-transparent px-3 py-1 text-left shadow-[0_1px_2px_0_#0000000d] transition-[color,box-shadow] outline-none', 'focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]', 'aria-invalid:ring-destructive/20 aria-invalid:border-destructive', disabled && 'cursor-not-allowed bg-muted/50 text-label', className), children: [jsx("span", { className: cn('truncate text-sm md:text-sm', parsed ? 'text-foreground' : 'text-placeholder'), children: parsed ? formatTimeDisplay(parsed, use24Hour) : placeholder }), jsx("span", { className: "inline-flex h-4 w-4 shrink-0 items-center justify-center text-muted-foreground", children: jsx(Clock, { className: "h-4 w-4 stroke-[1.75]" }) })] }) }), jsxs(PopoverContent, { align: "start", className: "w-auto p-3", children: [jsxs("div", { className: "flex gap-1", children: [jsx(TimeColumn, { label: "Hour", options: buildHourOptions(use24Hour), selected: selectedHour, onSelect: handleHour }), jsx(TimeColumn, { label: "Min", options: buildMinuteOptions(minuteStep), selected: parsed?.minute ?? null, onSelect: handleMinute }), !use24Hour && (jsx(TimeColumn, { label: "AM/PM", options: PERIOD_OPTIONS, selected: parsed ? (periodOf(parsed.hour) === 'AM' ? 0 : 1) : null, onSelect: handlePeriod }))] }), !hideFooter && (jsxs("div", { className: "mt-2 flex items-center justify-between gap-2 border-t border-border pt-2", children: [jsx("button", { type: "button", onClick: () => {
|
|
57812
|
+
onChange(undefined);
|
|
57813
|
+
setOpen(false);
|
|
57814
|
+
}, className: "rounded-md px-2 py-1 text-xs font-medium text-muted-foreground transition-colors hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring", children: "Clear" }), jsx("button", { type: "button", onClick: () => {
|
|
57815
|
+
const now = new Date();
|
|
57816
|
+
commit(now.getHours(), now.getMinutes());
|
|
57817
|
+
setOpen(false);
|
|
57818
|
+
}, className: "rounded-md px-2 py-1 text-xs font-medium text-primary transition-colors hover:text-hover focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring", children: "Now" })] }))] })] }));
|
|
57819
|
+
}
|
|
57820
|
+
|
|
57669
57821
|
function mapToItem(w, separator) {
|
|
57670
57822
|
const id = w.id || w.warehouseId || '';
|
|
57671
57823
|
if (!id)
|
|
@@ -67660,5 +67812,5 @@ var RichTextAreaImpl = /*#__PURE__*/Object.freeze({
|
|
|
67660
67812
|
RichTextarea: RichTextarea
|
|
67661
67813
|
});
|
|
67662
67814
|
|
|
67663
|
-
export { ActionBadge, ActionButtonWithTooltip, AdvancedSearchDrawer, Alert, ApiComboBox, AppSidebar, AuditEntryCard, AuditHistoryPanel, AuditTimeline, AuditTimelineShimmer, Badge, BadgeType, BusinessContactStatusFilter, Button, CUSTOMER_AUDIT_CONFIG, CertificateRowList, ChangePill, Collapsible, CollapsibleCard, CollapsibleContent, CollapsibleTrigger, ConfirmDialog, ContactTypeFilter, CopyButton, CreateFormPageHeader, CreateFormPageShell, CurrencyDisplayTabs, CurrencyInput, CurrencyToggle, CustomCombobox, CustomTable, CustomizeColumnsDrawer, DIAMOND_AUDIT_CONFIG, DashboardShell, DataEditableTable, DataTable, DateInput, DetailChip, DetailPageLayout, DetailPageSkeleton, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EntityHeader, Field, FieldSkeleton, FileUploader, FilterMultiSelect, FilterSelect, FormSectionCard, FormSectionCardSkeleton, GEM_AUDIT_CONFIG, HistoryEntryCard, HistoryTimeline, HistoryTimelineShimmer, INVOICE_AUDIT_CONFIG, IconButton, IdHyperlinkText, InfoBanner, InventoryComboBox, InventoryItemCard, InventoryItemRow, InvoiceComboBox, KYCStatusFilter, KeyValueGrid, LAYOUT_AUDIT_CONFIG, LabeledToggle, MEMO_IN_AUDIT_CONFIG, MEMO_OUT_AUDIT_CONFIG, MediaGallery, MemoInComboBox, MetricCard, MetricRow, MetricTile, Modal, MoreInfoPanel, MoreInfoTrigger, Navbar, NavbarActions, NavbarAvatar, NavbarIconButton, NavbarSearch, NavbarTitle, NumberInput, NumberedStepCard, OtpInput, OwnershipFilter, OwnershipSplitCard, PROFORMA_AUDIT_CONFIG, PageHeader, PageTabs, Pagination, PaginationSelect, PartnerShareCard, PriceInput, Protected, PurchaseOrderComboBox, QUOTATION_AUDIT_CONFIG, RadioCardGroup, ReadMoreText, RefreshButton, RichTextarea$1 as RichTextarea, SEARCHABLE_SELECT_PAGE_SIZE, SafeImage, SearchBox, SearchInput, SearchableSelect, SectionCard, SectionIcon, SegmentedControl, ShareDialog, ShareMenu, ShimmerTable, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupLabel, SidebarHeader, SidebarInset, SidebarMenu, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, SlideOut, SlideOutClose, SlideOutContent, SlideOutDescription, SlideOutHeader, SlideOutOverlay, SlideOutPortal, SlideOutTitle, SlideOutTrigger, Slider, SpecList, Spinner, SquareSkeleton, StatusBadge$1 as StatusBadge, StatusFilter, Stepper, StockTypeFilter, TablePagination, TableSkeleton, Tabs, TabsContent, TabsList, TabsTrigger, TagsInput, TextHyperlink, ToggleSwitch, TruncateTooltip, WarehouseComboBox, WarehouseFilter, ZoomSplitViewer, badgeVariants, buildBulkShareTitle, buildInventoryPublicUrl, buildInventoryRowProps, buildInventoryShareTitle, buildWhatsappUrl, buttonVariants, cn, createVideoMediaItem, dropdownMenuItemDestructiveClass, formatFileSize, generateActionDescription, generateTitle, getBadgeTypeForStatus, getChangePills, getInitials, iconButtonVariants, isPathActive, notify, releaseStaleOverlayBodyLock, renderBadge, useAuditShowMore, useBadge, useButton, useDropdownMenu, useNavbar, useSidebar, videoThumbnailSrc };
|
|
67815
|
+
export { ActionBadge, ActionButtonWithTooltip, AdvancedSearchDrawer, Alert, ApiComboBox, AppSidebar, AuditEntryCard, AuditHistoryPanel, AuditTimeline, AuditTimelineShimmer, Badge, BadgeType, BusinessContactStatusFilter, Button, CUSTOMER_AUDIT_CONFIG, CertificateRowList, ChangePill, Collapsible, CollapsibleCard, CollapsibleContent, CollapsibleTrigger, ConfirmDialog, ContactTypeFilter, CopyButton, CreateFormPageHeader, CreateFormPageShell, CurrencyDisplayTabs, CurrencyInput, CurrencyToggle, CustomCombobox, CustomTable, CustomizeColumnsDrawer, DIAMOND_AUDIT_CONFIG, DashboardShell, DataEditableTable, DataTable, DateInput, DetailChip, DetailPageLayout, DetailPageSkeleton, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EntityHeader, Field, FieldSkeleton, FileUploader, FilterMultiSelect, FilterSelect, FormSectionCard, FormSectionCardSkeleton, GEM_AUDIT_CONFIG, HistoryEntryCard, HistoryTimeline, HistoryTimelineShimmer, INVOICE_AUDIT_CONFIG, IconButton, IdHyperlinkText, InfoBanner, InventoryComboBox, InventoryItemCard, InventoryItemRow, InvoiceComboBox, KYCStatusFilter, KeyValueGrid, LAYOUT_AUDIT_CONFIG, LabeledToggle, MEMO_IN_AUDIT_CONFIG, MEMO_OUT_AUDIT_CONFIG, MediaGallery, MemoInComboBox, MetricCard, MetricRow, MetricTile, Modal, MoreInfoPanel, MoreInfoTrigger, Navbar, NavbarActions, NavbarAvatar, NavbarIconButton, NavbarSearch, NavbarTitle, NumberInput, NumberedStepCard, OtpInput, OwnershipFilter, OwnershipSplitCard, PROFORMA_AUDIT_CONFIG, PageHeader, PageTabs, Pagination, PaginationSelect, PartnerShareCard, PriceInput, Protected, PurchaseOrderComboBox, QUOTATION_AUDIT_CONFIG, RadioCardGroup, ReadMoreText, RefreshButton, RichTextarea$1 as RichTextarea, SEARCHABLE_SELECT_PAGE_SIZE, SafeImage, SearchBox, SearchInput, SearchableSelect, SectionCard, SectionIcon, SegmentedControl, ShareDialog, ShareMenu, ShimmerTable, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupLabel, SidebarHeader, SidebarInset, SidebarMenu, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, SlideOut, SlideOutClose, SlideOutContent, SlideOutDescription, SlideOutHeader, SlideOutOverlay, SlideOutPortal, SlideOutTitle, SlideOutTrigger, Slider, SpecList, Spinner, SquareSkeleton, StatusBadge$1 as StatusBadge, StatusFilter, Stepper, StockTypeFilter, TablePagination, TableSkeleton, Tabs, TabsContent, TabsList, TabsTrigger, TagsInput, TextHyperlink, TimePicker, ToggleSwitch, TruncateTooltip, WarehouseComboBox, WarehouseFilter, ZoomSplitViewer, badgeVariants, buildBulkShareTitle, buildInventoryPublicUrl, buildInventoryRowProps, buildInventoryShareTitle, buildWhatsappUrl, buttonVariants, cn, createVideoMediaItem, dropdownMenuItemDestructiveClass, formatFileSize, generateActionDescription, generateTitle, getBadgeTypeForStatus, getChangePills, getInitials, iconButtonVariants, isPathActive, notify, releaseStaleOverlayBodyLock, renderBadge, useAuditShowMore, useBadge, useButton, useDropdownMenu, useNavbar, useSidebar, videoThumbnailSrc };
|
|
67664
67816
|
//# sourceMappingURL=index.esm.js.map
|