@hyddenlabs/hydn-ui 0.3.1 → 0.3.3
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/data-display/data-grid/data-grid-cell.d.ts +37 -0
- package/dist/components/data-display/data-grid/data-grid-cell.d.ts.map +1 -0
- package/dist/components/data-display/data-grid/data-grid-cell.js +19 -0
- package/dist/components/data-display/data-grid/data-grid-cell.js.map +1 -0
- package/dist/components/data-display/data-grid/data-grid.d.ts +204 -0
- package/dist/components/data-display/data-grid/data-grid.d.ts.map +1 -0
- package/dist/components/data-display/data-grid/data-grid.js +566 -0
- package/dist/components/data-display/data-grid/data-grid.js.map +1 -0
- package/dist/components/data-display/data-grid/index.d.ts +5 -0
- package/dist/components/data-display/data-grid/index.d.ts.map +1 -0
- package/dist/components/feedback/tooltip/tooltip.d.ts +24 -11
- package/dist/components/feedback/tooltip/tooltip.d.ts.map +1 -1
- package/dist/components/feedback/tooltip/tooltip.js +123 -52
- package/dist/components/feedback/tooltip/tooltip.js.map +1 -1
- package/dist/components/index.d.ts +5 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/navigation/dropdown/dropdown.d.ts +7 -3
- package/dist/components/navigation/dropdown/dropdown.d.ts.map +1 -1
- package/dist/components/navigation/dropdown/dropdown.js +6 -1
- package/dist/components/navigation/dropdown/dropdown.js.map +1 -1
- package/dist/index.js +154 -150
- package/dist/index.js.map +1 -1
- package/dist/style.css +1 -1
- package/dist/theme/size-tokens.d.ts +3 -3
- package/dist/theme/size-tokens.js +3 -3
- package/dist/theme/size-tokens.js.map +1 -1
- package/package.json +1 -1
|
@@ -14,6 +14,8 @@ function Dropdown({
|
|
|
14
14
|
size = "md",
|
|
15
15
|
variant = "neutral",
|
|
16
16
|
buttonStyle = "solid",
|
|
17
|
+
triggerClassName = "",
|
|
18
|
+
noPadding = false,
|
|
17
19
|
minWidth,
|
|
18
20
|
maxWidth,
|
|
19
21
|
menuClassName = ""
|
|
@@ -132,6 +134,8 @@ function Dropdown({
|
|
|
132
134
|
const { title, subtitle, icon, iconSize = "md", triggerSize = size, endIcon } = trigger;
|
|
133
135
|
const iconNode = icon ? /* @__PURE__ */ jsx(Icon, { name: icon, size: iconSize, color: "currentColor" }) : null;
|
|
134
136
|
const endIconNode = endIcon ? /* @__PURE__ */ jsx(Icon, { name: endIcon, size: iconSize, color: "currentColor" }) : null;
|
|
137
|
+
const actualButtonStyle = buttonStyle === "none" ? "ghost" : buttonStyle;
|
|
138
|
+
const noBackgroundClass = buttonStyle === "none" ? "!bg-transparent hover:!bg-transparent active:!bg-transparent" : "";
|
|
135
139
|
const getAlignmentStyle = () => {
|
|
136
140
|
if (!menuPosition) return {};
|
|
137
141
|
const baseStyle = {
|
|
@@ -156,12 +160,13 @@ function Dropdown({
|
|
|
156
160
|
{
|
|
157
161
|
ref: triggerRef,
|
|
158
162
|
variant,
|
|
159
|
-
style:
|
|
163
|
+
style: actualButtonStyle,
|
|
160
164
|
onClick: () => isOpen ? close() : open(),
|
|
161
165
|
"aria-expanded": isOpen,
|
|
162
166
|
"aria-haspopup": "true",
|
|
163
167
|
"aria-controls": isOpen ? "dropdown-menu" : void 0,
|
|
164
168
|
size: triggerSize,
|
|
169
|
+
className: `${noPadding ? "px-0" : ""} ${noBackgroundClass} ${triggerClassName}`,
|
|
165
170
|
children: /* @__PURE__ */ jsxs("span", { className: `flex items-center ${gapSizes[iconSize]}`, children: [
|
|
166
171
|
iconNode && /* @__PURE__ */ jsx("span", { className: "shrink-0", children: iconNode }),
|
|
167
172
|
(title || subtitle) && /* @__PURE__ */ jsxs("span", { className: subtitle ? "text-left" : "", children: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dropdown.js","sources":["../../../../src/components/navigation/dropdown/dropdown.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect, useLayoutEffect, useCallback, createContext, useContext } from 'react';\nimport { createPortal } from 'react-dom';\nimport Button, { type ButtonProps } from '../../forms/button/button';\nimport { Icon } from '@/components/system/icon';\nimport { gapSizes, Size } from '@/theme/size-tokens';\n\nexport type DropdownTriggerProps = {\n /** Main label text */\n title: string;\n /** Optional secondary text shown below the title */\n subtitle?: string;\n /** Optional leading icon */\n icon?: string;\n /** Size of the leading icon */\n iconSize?: Size;\n /** Size variant for the trigger button */\n triggerSize?: ButtonProps['size'];\n /** Optional trailing icon */\n endIcon?: string;\n};\n\nexport type DropdownProps = {\n /** Trigger configuration - rendered as an accessible Button */\n trigger: DropdownTriggerProps;\n children: React.ReactNode;\n className?: string;\n align?: 'start' | 'center' | 'end';\n autoClose?: boolean; // close on item select\n /** Size of the dropdown panel and items */\n size?: ButtonProps['size'];\n /** Button variant for the trigger */\n variant?: ButtonProps['variant'];\n /** Button style for the trigger */\n buttonStyle?: ButtonProps['style'];\n /** Minimum width for the dropdown menu and all items (e.g., '200px', '16rem') */\n minWidth?: string;\n /** Maximum width for the dropdown menu (e.g., '400px', '24rem') */\n maxWidth?: string;\n /** Additional styles for the dropdown menu */\n menuClassName?: string;\n};\n\ntype DropdownContextValue = {\n requestClose: () => void;\n autoClose: boolean;\n registerItem?: (el: HTMLButtonElement | null, index?: number) => void;\n minWidth?: string;\n size?: ButtonProps['size'];\n};\n\nconst DropdownContext = createContext<DropdownContextValue | null>(null);\n\nexport function useDropdown() {\n const ctx = useContext(DropdownContext);\n if (!ctx) throw new Error('useDropdown must be used within <Dropdown>');\n return ctx;\n}\n\n/**\n * Dropdown component with click-outside handling\n */\nfunction Dropdown({\n trigger,\n children,\n className = '',\n align = 'start',\n autoClose = true,\n size = 'md',\n variant = 'neutral',\n buttonStyle = 'solid',\n minWidth,\n maxWidth,\n menuClassName = ''\n}: Readonly<DropdownProps>) {\n const [isOpen, setIsOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const itemsRef = useRef<Array<HTMLButtonElement | null>>([]);\n const [activeIndex, setActiveIndex] = useState<number>(-1);\n const [menuPosition, setMenuPosition] = useState<{ top: number; left: number; width: number } | null>(null);\n\n const close = useCallback(() => setIsOpen(false), []);\n const open = useCallback(() => setIsOpen(true), []);\n\n // Handle keyboard navigation\n useEffect(() => {\n if (!isOpen) return;\n const handleKey = (e: KeyboardEvent) => {\n if (!menuRef.current) return;\n const itemEls = itemsRef.current.filter(Boolean);\n if (['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(e.key)) {\n e.preventDefault();\n if (itemEls.length === 0) return;\n let nextIndex = activeIndex;\n if (e.key === 'ArrowDown') nextIndex = (activeIndex + 1) % itemEls.length;\n if (e.key === 'ArrowUp') nextIndex = (activeIndex - 1 + itemEls.length) % itemEls.length;\n if (e.key === 'Home') nextIndex = 0;\n if (e.key === 'End') nextIndex = itemEls.length - 1;\n setActiveIndex(nextIndex);\n itemEls[nextIndex]?.focus();\n return;\n }\n if (e.key === 'Escape') {\n e.preventDefault();\n close();\n triggerRef.current?.focus();\n }\n if (e.key === 'Tab') {\n // trap focus\n e.preventDefault();\n const itemEls = itemsRef.current.filter(Boolean);\n if (itemEls.length === 0) return;\n const dir = e.shiftKey ? -1 : 1;\n const nextIndex = (activeIndex + dir + itemEls.length) % itemEls.length;\n setActiveIndex(nextIndex);\n itemEls[nextIndex]?.focus();\n }\n };\n document.addEventListener('keydown', handleKey);\n return () => document.removeEventListener('keydown', handleKey);\n }, [isOpen, activeIndex, close]);\n\n // Outside click close\n useEffect(() => {\n if (!isOpen) return;\n const handleClickOutside = (event: MouseEvent) => {\n const isClickInTrigger = dropdownRef.current && dropdownRef.current.contains(event.target as Node);\n const isClickInMenu = menuRef.current && menuRef.current.contains(event.target as Node);\n\n if (!isClickInTrigger && !isClickInMenu) {\n close();\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen, close]);\n\n useLayoutEffect(() => {\n if (isOpen && triggerRef.current) {\n const rect = triggerRef.current.getBoundingClientRect();\n setMenuPosition({\n top: rect.bottom,\n left: rect.left,\n width: rect.width\n });\n } else {\n setMenuPosition(null);\n }\n }, [isOpen]);\n\n // Close on scroll or resize (simpler than tracking position)\n useEffect(() => {\n if (!isOpen) return;\n\n const handleScrollOrResize = (event?: Event) => {\n // Allow scrolling inside the menu itself\n if (event && event.target && menuRef.current?.contains(event.target as Node)) {\n return;\n }\n close();\n };\n\n window.addEventListener('scroll', handleScrollOrResize, true);\n window.addEventListener('resize', handleScrollOrResize);\n\n return () => {\n window.removeEventListener('scroll', handleScrollOrResize, true);\n window.removeEventListener('resize', handleScrollOrResize);\n };\n }, [isOpen, close]);\n\n // Auto-focus first item on open (useLayoutEffect to avoid cascading re-renders)\n useLayoutEffect(() => {\n let raf: number | undefined;\n if (isOpen) {\n const itemEls = itemsRef.current.filter(Boolean);\n if (itemEls.length) {\n // schedule the focus and state update to avoid cascading synchronous renders\n raf = requestAnimationFrame(() => {\n setActiveIndex(0);\n itemEls[0]?.focus();\n });\n }\n } else {\n raf = requestAnimationFrame(() => setActiveIndex(-1));\n }\n return () => {\n if (raf) cancelAnimationFrame(raf);\n };\n }, [isOpen]);\n\n const registerItem = useCallback((el: HTMLButtonElement | null, index?: number) => {\n // If index provided, set at index; otherwise push/remove based on presence\n if (typeof index === 'number' && index >= 0) {\n itemsRef.current[index] = el;\n return;\n }\n if (el === null) {\n // remove element references\n itemsRef.current = itemsRef.current.filter((x) => x !== el && x != null);\n return;\n }\n // Push new element at the end if not already present\n if (!itemsRef.current.includes(el)) itemsRef.current.push(el);\n }, []);\n\n const { title, subtitle, icon, iconSize = 'md', triggerSize = size, endIcon } = trigger;\n\n const iconNode = icon ? <Icon name={icon} size={iconSize} color=\"currentColor\" /> : null;\n const endIconNode = endIcon ? <Icon name={endIcon} size={iconSize} color=\"currentColor\" /> : null;\n\n const getAlignmentStyle = (): React.CSSProperties => {\n if (!menuPosition) return {};\n const baseStyle: React.CSSProperties = {\n top: menuPosition.top + 4, // slightly lower than trigger\n minWidth: minWidth || undefined,\n maxWidth: maxWidth || undefined\n };\n\n if (align === 'start') {\n baseStyle.left = menuPosition.left;\n } else if (align === 'end') {\n baseStyle.right = window.innerWidth - (menuPosition.left + menuPosition.width);\n } else {\n baseStyle.left = menuPosition.left + menuPosition.width / 2;\n baseStyle.transform = 'translateX(-50%)';\n }\n\n return baseStyle;\n };\n\n return (\n <>\n <div ref={dropdownRef} className={`inline-block ${className}`}>\n <Button\n ref={triggerRef}\n variant={variant}\n style={buttonStyle}\n onClick={() => (isOpen ? close() : open())}\n aria-expanded={isOpen}\n aria-haspopup=\"true\"\n aria-controls={isOpen ? 'dropdown-menu' : undefined}\n size={triggerSize}\n >\n <span className={`flex items-center ${gapSizes[iconSize]}`}>\n {iconNode && <span className=\"shrink-0\">{iconNode}</span>}\n {(title || subtitle) && (\n <span className={subtitle ? 'text-left' : ''}>\n <span className={subtitle ? 'block font-semibold' : ''}>{title}</span>\n {subtitle && <span className=\"block text-xs text-muted-foreground font-normal\">{subtitle}</span>}\n </span>\n )}\n {endIconNode && <span className=\"shrink-0\">{endIconNode}</span>}\n </span>\n </Button>\n </div>\n {isOpen &&\n menuPosition &&\n createPortal(\n <DropdownContext.Provider value={{ requestClose: close, autoClose, registerItem, minWidth, size }}>\n <div\n id=\"dropdown-menu\"\n ref={menuRef}\n className={`fixed bg-popover text-popover-foreground border border-border rounded-md shadow-lg z-50 ${size === 'sm' ? 'min-w-36 text-xs py-1' : 'min-w-44'} max-h-80 overflow-y-auto origin-top animate-scaleIn focus:outline-none ${menuClassName}`}\n style={getAlignmentStyle()}\n role=\"menu\"\n aria-orientation=\"vertical\"\n tabIndex={-1}\n >\n {children}\n </div>\n </DropdownContext.Provider>,\n document.body\n )}\n </>\n );\n}\n\nDropdown.displayName = 'Dropdown';\n\nexport default Dropdown;\n\n// DropdownItem size mapping constants\n// Map size to text classes for main content\nconst sizeTextMap: Record<string, string> = {\n xs: 'text-xs',\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl'\n} as const;\n\n// Map size to description text classes (one step smaller)\nconst descriptionTextMap: Record<string, string> = {\n xs: 'text-[10px]', // smaller than xs\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n xl: 'text-lg'\n} as const;\n\n// Map size to padding\nconst sizePaddingMap: Record<string, string> = {\n xs: 'px-2 py-1',\n sm: 'px-2.5 py-1.5',\n md: 'px-3.5 py-2',\n lg: 'px-4 py-2.5',\n xl: 'px-5 py-3'\n} as const;\n\n// DropdownItem component (simple abstraction)\nexport type DropdownItemProps = {\n children: React.ReactNode;\n onSelect?: () => void;\n /** Semantic color variant */\n variant?: 'neutral' | 'primary' | 'accent' | 'info' | 'success' | 'warning' | 'error';\n disabled?: boolean;\n className?: string;\n /** Optional muted description below main label */\n description?: string;\n /** Leading icon */\n icon?: string;\n iconSize?: Size;\n /** Trailing icon (e.g., checkmark for selected items) */\n endIcon?: string;\n /** Inherit size from dropdown or override */\n size?: 'sm' | 'md';\n /** Marks item as selected with enhanced background and optional checkmark */\n selected?: boolean;\n __dropdownIndex?: number; // injected\n __registerItem?: (el: HTMLButtonElement | null, index: number) => void; // injected (deprecated)\n};\n\nexport function DropdownItem({\n children,\n onSelect,\n variant = 'neutral',\n disabled = false,\n className = '',\n description,\n icon,\n iconSize,\n endIcon,\n size,\n selected = false\n}: Readonly<DropdownItemProps>) {\n const ctx = useContext(DropdownContext);\n const effectiveSize = size ?? ctx?.size ?? 'md';\n const effectiveIconSize = iconSize ?? effectiveSize;\n\n const base = `${sizeTextMap[effectiveSize] || sizeTextMap.md} ${sizePaddingMap[effectiveSize] || sizePaddingMap.md} w-full text-left select-none transition-colors outline-none disabled:opacity-40 disabled:pointer-events-none`;\n const focus =\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-popover';\n\n // Base palette for non-selected state\n const palette: Record<string, string> = {\n default: 'text-foreground/90 hover:bg-muted active:bg-muted/80',\n primary: 'text-primary hover:bg-primary/15 active:bg-primary/25 focus-visible:ring-primary',\n accent: 'text-accent hover:bg-accent/15 active:bg-accent/25 focus-visible:ring-accent',\n info: 'text-info hover:bg-info/15 active:bg-info/25 focus-visible:ring-info',\n success: 'text-success hover:bg-success/15 active:bg-success/25 focus-visible:ring-success',\n warning: 'text-warning hover:bg-warning/18 active:bg-warning/28 focus-visible:ring-warning',\n error: 'text-error hover:bg-error/15 active:bg-error/25 focus-visible:ring-error'\n };\n\n // Selected state palette - solid button style with foreground text\n const selectedPalette: Record<string, string> = {\n default: 'bg-muted text-foreground hover:bg-muted-hover hover:text-foreground',\n primary: 'bg-primary text-primary-foreground hover:bg-primary-hover hover:text-primary-foreground',\n accent: 'bg-accent text-accent-foreground hover:bg-accent-hover hover:text-accent-foreground',\n info: 'bg-info text-info-foreground hover:bg-info-hover hover:text-info-foreground',\n success: 'bg-success text-success-foreground hover:bg-success-hover hover:text-success-foreground',\n warning: 'bg-warning text-warning-foreground hover:bg-warning-hover hover:text-warning-foreground',\n error: 'bg-error text-error-foreground hover:bg-error-hover hover:text-error-foreground'\n };\n\n const variantClasses = selected\n ? selectedPalette[variant] || selectedPalette.default\n : palette[variant] || palette.default;\n\n // Determine layout: if we have icons, use horizontal layout, otherwise vertical\n const hasIcons = icon || endIcon;\n const iconNode = icon ? <Icon name={icon} size={effectiveIconSize} color=\"currentColor\" /> : null;\n const endIconNode = endIcon ? <Icon name={endIcon} size={effectiveIconSize} color=\"currentColor\" /> : null;\n\n return (\n <button\n ref={(el) => ctx?.registerItem?.(el)}\n role=\"menuitem\"\n type=\"button\"\n disabled={disabled}\n aria-current={selected ? 'true' : undefined}\n onClick={() => {\n if (disabled) return;\n onSelect?.();\n if (ctx?.autoClose) ctx.requestClose();\n }}\n className={`${base} ${focus} ${variantClasses} ${hasIcons ? 'flex flex-row items-center gap-2.5' : 'flex flex-col'} ${className} cursor-pointer`}\n >\n {iconNode && <span className=\"shrink-0\">{iconNode}</span>}\n <span className=\"flex-1 min-w-0\">\n <span className={`block font-medium leading-snug`}>{children}</span>\n {description && (\n <span\n className={`block ${descriptionTextMap[effectiveSize] || descriptionTextMap.md} text-foreground/60 mt-0.5 line-clamp-2`}\n >\n {description}\n </span>\n )}\n </span>\n {endIconNode && <span className=\"shrink-0\">{endIconNode}</span>}\n </button>\n );\n}\n\n/**\n * DropdownSeparator - Visual divider for grouping dropdown items\n * Use between items to create visual separation (e.g., separating error actions)\n */\nexport function DropdownSeparator({ className = '' }: Readonly<{ className?: string }>) {\n return <div role=\"separator\" className={`h-px bg-border ${className}`} />;\n}\n"],"names":["itemEls"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dropdown.js","sources":["../../../../src/components/navigation/dropdown/dropdown.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect, useLayoutEffect, useCallback, createContext, useContext } from 'react';\nimport { createPortal } from 'react-dom';\nimport Button, { type ButtonProps } from '../../forms/button/button';\nimport { Icon } from '@/components/system/icon';\nimport { gapSizes, Size } from '@/theme/size-tokens';\n\nexport type DropdownTriggerProps = {\n /** Main label text */\n title: string;\n /** Optional secondary text shown below the title */\n subtitle?: string;\n /** Optional leading icon */\n icon?: string;\n /** Size of the leading icon */\n iconSize?: Size;\n /** Size variant for the trigger button */\n triggerSize?: ButtonProps['size'];\n /** Optional trailing icon */\n endIcon?: string;\n};\n\nexport type DropdownProps = {\n /** Trigger configuration - rendered as an accessible Button */\n trigger: DropdownTriggerProps;\n children: React.ReactNode;\n className?: string;\n align?: 'start' | 'center' | 'end';\n autoClose?: boolean; // close on item select\n /** Size of the dropdown panel and items */\n size?: ButtonProps['size'];\n /** Button variant for the trigger */\n variant?: ButtonProps['variant'];\n /** Button style for the trigger ('none' removes all background colors) */\n buttonStyle?: ButtonProps['style'] | 'none';\n /** Additional className for the trigger button */\n triggerClassName?: string;\n /** Remove horizontal padding from the trigger button */\n noPadding?: boolean;\n /** Minimum width for the dropdown menu and all items (e.g., '200px', '16rem') */\n minWidth?: string;\n /** Maximum width for the dropdown menu (e.g., '400px', '24rem') */\n maxWidth?: string;\n /** Additional styles for the dropdown menu */\n menuClassName?: string;\n};\n\ntype DropdownContextValue = {\n requestClose: () => void;\n autoClose: boolean;\n registerItem?: (el: HTMLButtonElement | null, index?: number) => void;\n minWidth?: string;\n size?: ButtonProps['size'];\n};\n\nconst DropdownContext = createContext<DropdownContextValue | null>(null);\n\nexport function useDropdown() {\n const ctx = useContext(DropdownContext);\n if (!ctx) throw new Error('useDropdown must be used within <Dropdown>');\n return ctx;\n}\n\n/**\n * Dropdown component with click-outside handling\n */\nfunction Dropdown({\n trigger,\n children,\n className = '',\n align = 'start',\n autoClose = true,\n size = 'md',\n variant = 'neutral',\n buttonStyle = 'solid',\n triggerClassName = '',\n noPadding = false,\n minWidth,\n maxWidth,\n menuClassName = ''\n}: Readonly<DropdownProps>) {\n const [isOpen, setIsOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const itemsRef = useRef<Array<HTMLButtonElement | null>>([]);\n const [activeIndex, setActiveIndex] = useState<number>(-1);\n const [menuPosition, setMenuPosition] = useState<{ top: number; left: number; width: number } | null>(null);\n\n const close = useCallback(() => setIsOpen(false), []);\n const open = useCallback(() => setIsOpen(true), []);\n\n // Handle keyboard navigation\n useEffect(() => {\n if (!isOpen) return;\n const handleKey = (e: KeyboardEvent) => {\n if (!menuRef.current) return;\n const itemEls = itemsRef.current.filter(Boolean);\n if (['ArrowDown', 'ArrowUp', 'Home', 'End'].includes(e.key)) {\n e.preventDefault();\n if (itemEls.length === 0) return;\n let nextIndex = activeIndex;\n if (e.key === 'ArrowDown') nextIndex = (activeIndex + 1) % itemEls.length;\n if (e.key === 'ArrowUp') nextIndex = (activeIndex - 1 + itemEls.length) % itemEls.length;\n if (e.key === 'Home') nextIndex = 0;\n if (e.key === 'End') nextIndex = itemEls.length - 1;\n setActiveIndex(nextIndex);\n itemEls[nextIndex]?.focus();\n return;\n }\n if (e.key === 'Escape') {\n e.preventDefault();\n close();\n triggerRef.current?.focus();\n }\n if (e.key === 'Tab') {\n // trap focus\n e.preventDefault();\n const itemEls = itemsRef.current.filter(Boolean);\n if (itemEls.length === 0) return;\n const dir = e.shiftKey ? -1 : 1;\n const nextIndex = (activeIndex + dir + itemEls.length) % itemEls.length;\n setActiveIndex(nextIndex);\n itemEls[nextIndex]?.focus();\n }\n };\n document.addEventListener('keydown', handleKey);\n return () => document.removeEventListener('keydown', handleKey);\n }, [isOpen, activeIndex, close]);\n\n // Outside click close\n useEffect(() => {\n if (!isOpen) return;\n const handleClickOutside = (event: MouseEvent) => {\n const isClickInTrigger = dropdownRef.current && dropdownRef.current.contains(event.target as Node);\n const isClickInMenu = menuRef.current && menuRef.current.contains(event.target as Node);\n\n if (!isClickInTrigger && !isClickInMenu) {\n close();\n }\n };\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [isOpen, close]);\n\n useLayoutEffect(() => {\n if (isOpen && triggerRef.current) {\n const rect = triggerRef.current.getBoundingClientRect();\n setMenuPosition({\n top: rect.bottom,\n left: rect.left,\n width: rect.width\n });\n } else {\n setMenuPosition(null);\n }\n }, [isOpen]);\n\n // Close on scroll or resize (simpler than tracking position)\n useEffect(() => {\n if (!isOpen) return;\n\n const handleScrollOrResize = (event?: Event) => {\n // Allow scrolling inside the menu itself\n if (event && event.target && menuRef.current?.contains(event.target as Node)) {\n return;\n }\n close();\n };\n\n window.addEventListener('scroll', handleScrollOrResize, true);\n window.addEventListener('resize', handleScrollOrResize);\n\n return () => {\n window.removeEventListener('scroll', handleScrollOrResize, true);\n window.removeEventListener('resize', handleScrollOrResize);\n };\n }, [isOpen, close]);\n\n // Auto-focus first item on open (useLayoutEffect to avoid cascading re-renders)\n useLayoutEffect(() => {\n let raf: number | undefined;\n if (isOpen) {\n const itemEls = itemsRef.current.filter(Boolean);\n if (itemEls.length) {\n // schedule the focus and state update to avoid cascading synchronous renders\n raf = requestAnimationFrame(() => {\n setActiveIndex(0);\n itemEls[0]?.focus();\n });\n }\n } else {\n raf = requestAnimationFrame(() => setActiveIndex(-1));\n }\n return () => {\n if (raf) cancelAnimationFrame(raf);\n };\n }, [isOpen]);\n\n const registerItem = useCallback((el: HTMLButtonElement | null, index?: number) => {\n // If index provided, set at index; otherwise push/remove based on presence\n if (typeof index === 'number' && index >= 0) {\n itemsRef.current[index] = el;\n return;\n }\n if (el === null) {\n // remove element references\n itemsRef.current = itemsRef.current.filter((x) => x !== el && x != null);\n return;\n }\n // Push new element at the end if not already present\n if (!itemsRef.current.includes(el)) itemsRef.current.push(el);\n }, []);\n\n const { title, subtitle, icon, iconSize = 'md', triggerSize = size, endIcon } = trigger;\n\n const iconNode = icon ? <Icon name={icon} size={iconSize} color=\"currentColor\" /> : null;\n const endIconNode = endIcon ? <Icon name={endIcon} size={iconSize} color=\"currentColor\" /> : null;\n\n // Handle 'none' style by using ghost with bg removal\n const actualButtonStyle = buttonStyle === 'none' ? 'ghost' : buttonStyle;\n const noBackgroundClass =\n buttonStyle === 'none' ? '!bg-transparent hover:!bg-transparent active:!bg-transparent' : '';\n\n const getAlignmentStyle = (): React.CSSProperties => {\n if (!menuPosition) return {};\n const baseStyle: React.CSSProperties = {\n top: menuPosition.top + 4, // slightly lower than trigger\n minWidth: minWidth || undefined,\n maxWidth: maxWidth || undefined\n };\n\n if (align === 'start') {\n baseStyle.left = menuPosition.left;\n } else if (align === 'end') {\n baseStyle.right = window.innerWidth - (menuPosition.left + menuPosition.width);\n } else {\n baseStyle.left = menuPosition.left + menuPosition.width / 2;\n baseStyle.transform = 'translateX(-50%)';\n }\n\n return baseStyle;\n };\n\n return (\n <>\n <div ref={dropdownRef} className={`inline-block ${className}`}>\n <Button\n ref={triggerRef}\n variant={variant}\n style={actualButtonStyle}\n onClick={() => (isOpen ? close() : open())}\n aria-expanded={isOpen}\n aria-haspopup=\"true\"\n aria-controls={isOpen ? 'dropdown-menu' : undefined}\n size={triggerSize}\n className={`${noPadding ? 'px-0' : ''} ${noBackgroundClass} ${triggerClassName}`}\n >\n <span className={`flex items-center ${gapSizes[iconSize]}`}>\n {iconNode && <span className=\"shrink-0\">{iconNode}</span>}\n {(title || subtitle) && (\n <span className={subtitle ? 'text-left' : ''}>\n <span className={subtitle ? 'block font-semibold' : ''}>{title}</span>\n {subtitle && <span className=\"block text-xs text-muted-foreground font-normal\">{subtitle}</span>}\n </span>\n )}\n {endIconNode && <span className=\"shrink-0\">{endIconNode}</span>}\n </span>\n </Button>\n </div>\n {isOpen &&\n menuPosition &&\n createPortal(\n <DropdownContext.Provider value={{ requestClose: close, autoClose, registerItem, minWidth, size }}>\n <div\n id=\"dropdown-menu\"\n ref={menuRef}\n className={`fixed bg-popover text-popover-foreground border border-border rounded-md shadow-lg z-50 ${size === 'sm' ? 'min-w-36 text-xs py-1' : 'min-w-44'} max-h-80 overflow-y-auto origin-top animate-scaleIn focus:outline-none ${menuClassName}`}\n style={getAlignmentStyle()}\n role=\"menu\"\n aria-orientation=\"vertical\"\n tabIndex={-1}\n >\n {children}\n </div>\n </DropdownContext.Provider>,\n document.body\n )}\n </>\n );\n}\n\nDropdown.displayName = 'Dropdown';\n\nexport default Dropdown;\n\n// DropdownItem size mapping constants\n// Map size to text classes for main content\nconst sizeTextMap: Record<string, string> = {\n xs: 'text-xs',\n sm: 'text-sm',\n md: 'text-base',\n lg: 'text-lg',\n xl: 'text-xl'\n} as const;\n\n// Map size to description text classes (one step smaller)\nconst descriptionTextMap: Record<string, string> = {\n xs: 'text-[10px]', // smaller than xs\n sm: 'text-xs',\n md: 'text-sm',\n lg: 'text-base',\n xl: 'text-lg'\n} as const;\n\n// Map size to padding\nconst sizePaddingMap: Record<string, string> = {\n xs: 'px-2 py-1',\n sm: 'px-2.5 py-1.5',\n md: 'px-3.5 py-2',\n lg: 'px-4 py-2.5',\n xl: 'px-5 py-3'\n} as const;\n\n// DropdownItem component (simple abstraction)\nexport type DropdownItemProps = {\n children: React.ReactNode;\n onSelect?: () => void;\n /** Semantic color variant */\n variant?: 'neutral' | 'primary' | 'accent' | 'info' | 'success' | 'warning' | 'error';\n disabled?: boolean;\n className?: string;\n /** Optional muted description below main label */\n description?: string;\n /** Leading icon */\n icon?: string;\n iconSize?: Size;\n /** Trailing icon (e.g., checkmark for selected items) */\n endIcon?: string;\n /** Inherit size from dropdown or override */\n size?: 'sm' | 'md';\n /** Marks item as selected with enhanced background and optional checkmark */\n selected?: boolean;\n __dropdownIndex?: number; // injected\n __registerItem?: (el: HTMLButtonElement | null, index: number) => void; // injected (deprecated)\n};\n\nexport function DropdownItem({\n children,\n onSelect,\n variant = 'neutral',\n disabled = false,\n className = '',\n description,\n icon,\n iconSize,\n endIcon,\n size,\n selected = false\n}: Readonly<DropdownItemProps>) {\n const ctx = useContext(DropdownContext);\n const effectiveSize = size ?? ctx?.size ?? 'md';\n const effectiveIconSize = iconSize ?? effectiveSize;\n\n const base = `${sizeTextMap[effectiveSize] || sizeTextMap.md} ${sizePaddingMap[effectiveSize] || sizePaddingMap.md} w-full text-left select-none transition-colors outline-none disabled:opacity-40 disabled:pointer-events-none`;\n const focus =\n 'focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-popover';\n\n // Base palette for non-selected state\n const palette: Record<string, string> = {\n default: 'text-foreground/90 hover:bg-muted active:bg-muted/80',\n primary: 'text-primary hover:bg-primary/15 active:bg-primary/25 focus-visible:ring-primary',\n accent: 'text-accent hover:bg-accent/15 active:bg-accent/25 focus-visible:ring-accent',\n info: 'text-info hover:bg-info/15 active:bg-info/25 focus-visible:ring-info',\n success: 'text-success hover:bg-success/15 active:bg-success/25 focus-visible:ring-success',\n warning: 'text-warning hover:bg-warning/18 active:bg-warning/28 focus-visible:ring-warning',\n error: 'text-error hover:bg-error/15 active:bg-error/25 focus-visible:ring-error'\n };\n\n // Selected state palette - solid button style with foreground text\n const selectedPalette: Record<string, string> = {\n default: 'bg-muted text-foreground hover:bg-muted-hover hover:text-foreground',\n primary: 'bg-primary text-primary-foreground hover:bg-primary-hover hover:text-primary-foreground',\n accent: 'bg-accent text-accent-foreground hover:bg-accent-hover hover:text-accent-foreground',\n info: 'bg-info text-info-foreground hover:bg-info-hover hover:text-info-foreground',\n success: 'bg-success text-success-foreground hover:bg-success-hover hover:text-success-foreground',\n warning: 'bg-warning text-warning-foreground hover:bg-warning-hover hover:text-warning-foreground',\n error: 'bg-error text-error-foreground hover:bg-error-hover hover:text-error-foreground'\n };\n\n const variantClasses = selected\n ? selectedPalette[variant] || selectedPalette.default\n : palette[variant] || palette.default;\n\n // Determine layout: if we have icons, use horizontal layout, otherwise vertical\n const hasIcons = icon || endIcon;\n const iconNode = icon ? <Icon name={icon} size={effectiveIconSize} color=\"currentColor\" /> : null;\n const endIconNode = endIcon ? <Icon name={endIcon} size={effectiveIconSize} color=\"currentColor\" /> : null;\n\n return (\n <button\n ref={(el) => ctx?.registerItem?.(el)}\n role=\"menuitem\"\n type=\"button\"\n disabled={disabled}\n aria-current={selected ? 'true' : undefined}\n onClick={() => {\n if (disabled) return;\n onSelect?.();\n if (ctx?.autoClose) ctx.requestClose();\n }}\n className={`${base} ${focus} ${variantClasses} ${hasIcons ? 'flex flex-row items-center gap-2.5' : 'flex flex-col'} ${className} cursor-pointer`}\n >\n {iconNode && <span className=\"shrink-0\">{iconNode}</span>}\n <span className=\"flex-1 min-w-0\">\n <span className={`block font-medium leading-snug`}>{children}</span>\n {description && (\n <span\n className={`block ${descriptionTextMap[effectiveSize] || descriptionTextMap.md} text-foreground/60 mt-0.5 line-clamp-2`}\n >\n {description}\n </span>\n )}\n </span>\n {endIconNode && <span className=\"shrink-0\">{endIconNode}</span>}\n </button>\n );\n}\n\n/**\n * DropdownSeparator - Visual divider for grouping dropdown items\n * Use between items to create visual separation (e.g., separating error actions)\n */\nexport function DropdownSeparator({ className = '' }: Readonly<{ className?: string }>) {\n return <div role=\"separator\" className={`h-px bg-border ${className}`} />;\n}\n"],"names":["itemEls"],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -23,86 +23,88 @@ import { default as default22 } from "./components/data-display/code-block/code-
|
|
|
23
23
|
import { default as default23 } from "./components/forms/code/code.js";
|
|
24
24
|
import { default as default24 } from "./components/system/color-mode-toggle/color-mode-toggle.js";
|
|
25
25
|
import { default as default25 } from "./components/layout/container/container.js";
|
|
26
|
-
import { default as default26 } from "./components/data-display/data-
|
|
27
|
-
import { default as default27 } from "./components/
|
|
28
|
-
import { default as default28 } from "./components/
|
|
29
|
-
import { default as default29 } from "./components/
|
|
30
|
-
import { default as default30 } from "./components/
|
|
31
|
-
import { default as default31 } from "./components/
|
|
32
|
-
import { default as default32
|
|
33
|
-
import { default as default33 } from "./components/
|
|
34
|
-
import { default as default34 } from "./components/
|
|
35
|
-
import { default as default35 } from "./components/
|
|
36
|
-
import { default as default36 } from "./components/
|
|
37
|
-
import { default as default37 } from "./components/feedback/error-page/error-
|
|
38
|
-
import { default as default38 } from "./components/feedback/error-page/error-
|
|
39
|
-
import { default as default39 } from "./components/
|
|
40
|
-
import { default as default40 } from "./components/
|
|
41
|
-
import { default as default41 } from "./components/layout/
|
|
42
|
-
import { default as default42 } from "./components/forms/
|
|
43
|
-
import { default as default43 } from "./components/
|
|
44
|
-
import { default as default44 } from "./components/forms/form
|
|
45
|
-
import { default as default45 } from "./components/forms/form-
|
|
46
|
-
import { default as default46 } from "./components/forms/form-
|
|
47
|
-
import { default as default47 } from "./components/forms/form-
|
|
48
|
-
import { default as default48 } from "./components/
|
|
49
|
-
import { default as default49 } from "./components/
|
|
50
|
-
import { default as default50 } from "./components/layout/
|
|
26
|
+
import { default as default26 } from "./components/data-display/data-grid/data-grid.js";
|
|
27
|
+
import { default as default27 } from "./components/data-display/data-grid/data-grid-cell.js";
|
|
28
|
+
import { default as default28 } from "./components/data-display/data-table/data-table.js";
|
|
29
|
+
import { default as default29 } from "./components/forms/date-picker/date-picker.js";
|
|
30
|
+
import { default as default30 } from "./components/feedback/dialog/delete-dialog.js";
|
|
31
|
+
import { default as default31 } from "./components/feedback/dialog/dialog.js";
|
|
32
|
+
import { default as default32 } from "./components/layout/divider/divider.js";
|
|
33
|
+
import { default as default33 } from "./components/layout/drawer/drawer.js";
|
|
34
|
+
import { default as default34, DropdownItem, DropdownSeparator } from "./components/navigation/dropdown/dropdown.js";
|
|
35
|
+
import { default as default35 } from "./components/forms/editable-text/editable-text.js";
|
|
36
|
+
import { default as default36 } from "./components/data-display/empty-state/empty-state.js";
|
|
37
|
+
import { default as default37 } from "./components/feedback/error-page/error-400.js";
|
|
38
|
+
import { default as default38 } from "./components/feedback/error-page/error-401.js";
|
|
39
|
+
import { default as default39 } from "./components/feedback/error-page/error-403.js";
|
|
40
|
+
import { default as default40 } from "./components/feedback/error-page/error-404.js";
|
|
41
|
+
import { default as default41 } from "./components/layout/feature-section/feature-section.js";
|
|
42
|
+
import { default as default42 } from "./components/forms/fieldset/fieldset.js";
|
|
43
|
+
import { default as default43 } from "./components/layout/footer/footer.js";
|
|
44
|
+
import { default as default44 } from "./components/forms/form/form.js";
|
|
45
|
+
import { default as default45 } from "./components/forms/form-checkbox/form-checkbox.js";
|
|
46
|
+
import { default as default46 } from "./components/forms/form-checkbox-group/form-checkbox-group.js";
|
|
47
|
+
import { default as default47 } from "./components/forms/form-input/form-input.js";
|
|
48
|
+
import { default as default48 } from "./components/forms/form-select/form-select.js";
|
|
49
|
+
import { default as default49 } from "./components/forms/form-textarea/form-textarea.js";
|
|
50
|
+
import { default as default50 } from "./components/layout/grid/grid.js";
|
|
51
|
+
import { default as default51 } from "./components/typography/heading/heading.js";
|
|
52
|
+
import { default as default52 } from "./components/layout/hero/hero.js";
|
|
51
53
|
import { Icon } from "./components/system/icon/icon.js";
|
|
52
|
-
import { default as
|
|
53
|
-
import { default as
|
|
54
|
-
import { default as
|
|
55
|
-
import { default as
|
|
56
|
-
import { default as
|
|
57
|
-
import { default as
|
|
58
|
-
import { default as
|
|
59
|
-
import { default as
|
|
54
|
+
import { default as default53 } from "./components/forms/button/icon-button.js";
|
|
55
|
+
import { default as default54 } from "./components/forms/button/inline-button.js";
|
|
56
|
+
import { default as default55 } from "./components/forms/input/input.js";
|
|
57
|
+
import { default as default56 } from "./components/forms/input-group/input-group.js";
|
|
58
|
+
import { default as default57 } from "./components/layout/left-nav-layout/left-nav-item.js";
|
|
59
|
+
import { default as default58 } from "./components/layout/left-nav-layout/left-nav-layout.js";
|
|
60
|
+
import { default as default59 } from "./components/layout/left-nav-layout/left-nav-section.js";
|
|
61
|
+
import { default as default60 } from "./components/typography/link/link.js";
|
|
60
62
|
import { List, ListItem } from "./components/data-display/list/list.js";
|
|
61
|
-
import { default as
|
|
62
|
-
import { default as
|
|
63
|
-
import { default as
|
|
64
|
-
import { default as
|
|
65
|
-
import { default as
|
|
66
|
-
import { default as
|
|
67
|
-
import { default as
|
|
68
|
-
import { default as
|
|
69
|
-
import { default as
|
|
70
|
-
import { default as
|
|
71
|
-
import { default as
|
|
72
|
-
import { default as
|
|
73
|
-
import { default as
|
|
74
|
-
import { default as
|
|
63
|
+
import { default as default61 } from "./components/feedback/loading-container/loading-container.js";
|
|
64
|
+
import { default as default62 } from "./components/feedback/modal/modal.js";
|
|
65
|
+
import { default as default63 } from "./components/forms/multi-select/multi-select.js";
|
|
66
|
+
import { default as default64 } from "./components/navigation/nav/nav.js";
|
|
67
|
+
import { default as default65 } from "./components/navigation/nav-dropdown/nav-dropdown.js";
|
|
68
|
+
import { default as default66 } from "./components/navigation/nav-dropdown/nav-dropdown-item.js";
|
|
69
|
+
import { default as default67 } from "./components/navigation/navbar/navbar.js";
|
|
70
|
+
import { default as default68 } from "./components/navigation/navbar/navbar-brand.js";
|
|
71
|
+
import { default as default69 } from "./components/navigation/navbar/navbar-link.js";
|
|
72
|
+
import { default as default70 } from "./components/navigation/navbar/navbar-toggle.js";
|
|
73
|
+
import { default as default71 } from "./components/navigation/notification-dropdown/notification-dropdown.js";
|
|
74
|
+
import { default as default72 } from "./components/feedback/overlay/useOverlay.js";
|
|
75
|
+
import { default as default73 } from "./components/layout/page/page.js";
|
|
76
|
+
import { default as default74 } from "./components/layout/page-header/page-header.js";
|
|
75
77
|
import { PageTransition } from "./components/layout/page-transition/page-transition.js";
|
|
76
|
-
import { default as
|
|
77
|
-
import { default as
|
|
78
|
-
import { default as
|
|
79
|
-
import { default as
|
|
80
|
-
import { default as
|
|
81
|
-
import { default as
|
|
82
|
-
import { default as
|
|
83
|
-
import { default as
|
|
84
|
-
import { default as
|
|
85
|
-
import { default as
|
|
86
|
-
import { default as
|
|
87
|
-
import { default as
|
|
88
|
-
import { default as
|
|
89
|
-
import { default as
|
|
90
|
-
import { default as
|
|
91
|
-
import { default as
|
|
92
|
-
import { default as
|
|
93
|
-
import { default as
|
|
94
|
-
import { default as
|
|
78
|
+
import { default as default75 } from "./components/navigation/pagination/pagination.js";
|
|
79
|
+
import { default as default76 } from "./components/feedback/popover/popover.js";
|
|
80
|
+
import { default as default77 } from "./components/feedback/progress-bar/progress-bar.js";
|
|
81
|
+
import { default as default78 } from "./components/forms/radio/radio.js";
|
|
82
|
+
import { default as default79 } from "./components/forms/radio-group/radio-group.js";
|
|
83
|
+
import { default as default80 } from "./components/navigation/scroll-nav/scroll-nav.js";
|
|
84
|
+
import { default as default81 } from "./components/layout/section/section.js";
|
|
85
|
+
import { default as default82 } from "./components/layout/section-header/section-header.js";
|
|
86
|
+
import { default as default83 } from "./components/forms/select/select.js";
|
|
87
|
+
import { default as default84 } from "./components/forms/select/select-item.js";
|
|
88
|
+
import { default as default85 } from "./components/navigation/sidebar/sidebar.js";
|
|
89
|
+
import { default as default86 } from "./components/feedback/skeleton/skeleton.js";
|
|
90
|
+
import { default as default87 } from "./components/forms/slider/slider.js";
|
|
91
|
+
import { default as default88, useStaggeredTransition } from "./components/feedback/smooth-transition/smooth-transition.js";
|
|
92
|
+
import { default as default89 } from "./components/feedback/spinner/spinner.js";
|
|
93
|
+
import { default as default90 } from "./components/layout/stack/stack.js";
|
|
94
|
+
import { default as default91 } from "./components/data-display/badge/status-label.js";
|
|
95
|
+
import { default as default92 } from "./components/navigation/stepper/stepper.js";
|
|
96
|
+
import { default as default93 } from "./components/forms/switch/switch.js";
|
|
95
97
|
import { Table, TableBody, TableCell, TableFooter, TableHeadCell, TableHeader, TableRow } from "./components/data-display/table/table.js";
|
|
96
|
-
import { default as
|
|
97
|
-
import { default as
|
|
98
|
-
import { default as
|
|
98
|
+
import { default as default94 } from "./components/navigation/tabs/tabs.js";
|
|
99
|
+
import { default as default95 } from "./components/typography/text/text.js";
|
|
100
|
+
import { default as default96 } from "./components/forms/textarea/textarea.js";
|
|
99
101
|
import { ThemeProvider, useTheme } from "./components/system/theme-provider/theme-provider.js";
|
|
100
|
-
import { default as
|
|
101
|
-
import { default as
|
|
102
|
-
import { default as
|
|
103
|
-
import { default as
|
|
104
|
-
import { default as
|
|
105
|
-
import { default as
|
|
102
|
+
import { default as default97, TimelineItem } from "./components/data-display/timeline/timeline.js";
|
|
103
|
+
import { default as default98 } from "./components/feedback/toast/toast.js";
|
|
104
|
+
import { default as default99 } from "./components/feedback/tooltip/tooltip.js";
|
|
105
|
+
import { default as default100 } from "./hooks/useDebounce.js";
|
|
106
|
+
import { default as default101 } from "./hooks/useScrollReset.js";
|
|
107
|
+
import { default as default102 } from "./components/data-display/data-table/use-table.js";
|
|
106
108
|
import { ActionCard } from "./components/layout/action-card/action-card.js";
|
|
107
109
|
import { GoogleLogo } from "./components/branding/google-logo.js";
|
|
108
110
|
import { HyddenLogo } from "./components/branding/hydden-logo.js";
|
|
@@ -138,84 +140,86 @@ export {
|
|
|
138
140
|
default23 as CodeInput,
|
|
139
141
|
default24 as ColorModeToggle,
|
|
140
142
|
default25 as Container,
|
|
141
|
-
default26 as
|
|
142
|
-
default27 as
|
|
143
|
-
default28 as
|
|
144
|
-
default29 as
|
|
145
|
-
default30 as
|
|
146
|
-
default31 as
|
|
147
|
-
default32 as
|
|
143
|
+
default26 as DataGrid,
|
|
144
|
+
default27 as DataGridCell,
|
|
145
|
+
default28 as DataTable,
|
|
146
|
+
default29 as DatePicker,
|
|
147
|
+
default30 as DeleteDialog,
|
|
148
|
+
default31 as Dialog,
|
|
149
|
+
default32 as Divider,
|
|
150
|
+
default33 as Drawer,
|
|
151
|
+
default34 as Dropdown,
|
|
148
152
|
DropdownItem,
|
|
149
153
|
DropdownSeparator,
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
154
|
+
default35 as EditableText,
|
|
155
|
+
default36 as EmptyState,
|
|
156
|
+
default37 as Error400,
|
|
157
|
+
default38 as Error401,
|
|
158
|
+
default39 as Error403,
|
|
159
|
+
default40 as Error404,
|
|
160
|
+
default41 as FeatureSection,
|
|
161
|
+
default42 as Fieldset,
|
|
162
|
+
default43 as Footer,
|
|
163
|
+
default44 as Form,
|
|
164
|
+
default45 as FormCheckbox,
|
|
165
|
+
default46 as FormCheckboxGroup,
|
|
166
|
+
default47 as FormInput,
|
|
167
|
+
default48 as FormSelect,
|
|
168
|
+
default49 as FormTextarea,
|
|
165
169
|
GoogleLogo,
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
170
|
+
default50 as Grid,
|
|
171
|
+
default51 as Heading,
|
|
172
|
+
default52 as Hero,
|
|
169
173
|
HyddenLogo,
|
|
170
174
|
Icon,
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
175
|
+
default53 as IconButton,
|
|
176
|
+
default54 as InlineButton,
|
|
177
|
+
default55 as Input,
|
|
178
|
+
default56 as InputGroup,
|
|
179
|
+
default57 as LeftNavItem,
|
|
180
|
+
default58 as LeftNavLayout,
|
|
181
|
+
default59 as LeftNavSection,
|
|
182
|
+
default60 as Link,
|
|
179
183
|
List,
|
|
180
184
|
ListItem,
|
|
181
|
-
|
|
185
|
+
default61 as LoadingContainer,
|
|
182
186
|
MicrosoftLogo,
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
187
|
+
default62 as Modal,
|
|
188
|
+
default63 as MultiSelect,
|
|
189
|
+
default64 as Nav,
|
|
190
|
+
default65 as NavDropdown,
|
|
191
|
+
default66 as NavDropdownItem,
|
|
192
|
+
default67 as Navbar,
|
|
193
|
+
default68 as NavbarBrand,
|
|
194
|
+
default69 as NavbarLink,
|
|
195
|
+
default70 as NavbarToggle,
|
|
196
|
+
default71 as NotificationDropdown,
|
|
197
|
+
default72 as OverlayProvider,
|
|
198
|
+
default73 as Page,
|
|
199
|
+
default74 as PageHeader,
|
|
196
200
|
PageTransition,
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
201
|
+
default75 as Pagination,
|
|
202
|
+
default76 as Popover,
|
|
203
|
+
default77 as ProgressBar,
|
|
204
|
+
default78 as Radio,
|
|
205
|
+
default79 as RadioGroup,
|
|
206
|
+
default80 as ScrollNav,
|
|
207
|
+
default81 as Section,
|
|
208
|
+
default82 as SectionHeader,
|
|
209
|
+
default83 as Select,
|
|
210
|
+
default84 as SelectItem,
|
|
207
211
|
SettingItem,
|
|
208
212
|
SettingsPage,
|
|
209
213
|
SettingsSection,
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
214
|
+
default85 as Sidebar,
|
|
215
|
+
default86 as Skeleton,
|
|
216
|
+
default87 as Slider,
|
|
217
|
+
default88 as SmoothTransition,
|
|
218
|
+
default89 as Spinner,
|
|
219
|
+
default90 as Stack,
|
|
220
|
+
default91 as StatusLabel,
|
|
221
|
+
default92 as Stepper,
|
|
222
|
+
default93 as Switch,
|
|
219
223
|
Table,
|
|
220
224
|
TableBody,
|
|
221
225
|
TableCell,
|
|
@@ -223,14 +227,14 @@ export {
|
|
|
223
227
|
TableHeadCell,
|
|
224
228
|
TableHeader,
|
|
225
229
|
TableRow,
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
230
|
+
default94 as Tabs,
|
|
231
|
+
default95 as Text,
|
|
232
|
+
default96 as Textarea,
|
|
229
233
|
ThemeProvider,
|
|
230
|
-
|
|
234
|
+
default97 as Timeline,
|
|
231
235
|
TimelineItem,
|
|
232
|
-
|
|
233
|
-
|
|
236
|
+
default98 as Toast,
|
|
237
|
+
default99 as Tooltip,
|
|
234
238
|
authFetch,
|
|
235
239
|
avatarSizes,
|
|
236
240
|
badgeSizes,
|
|
@@ -276,10 +280,10 @@ export {
|
|
|
276
280
|
statusLabelSizes,
|
|
277
281
|
textSizes,
|
|
278
282
|
useAuth,
|
|
279
|
-
|
|
280
|
-
|
|
283
|
+
default100 as useDebounce,
|
|
284
|
+
default101 as useScrollReset,
|
|
281
285
|
useStaggeredTransition,
|
|
282
|
-
|
|
286
|
+
default102 as useTable,
|
|
283
287
|
useTheme,
|
|
284
288
|
validationBorderClasses,
|
|
285
289
|
validationRingClasses,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|