@salilvnair/dui 1.0.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.
Files changed (116) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +185 -0
  3. package/dist/chunks/EditorView.shell-BGH2VhWM.js +460 -0
  4. package/dist/chunks/EditorView.shell-BGH2VhWM.js.map +1 -0
  5. package/dist/chunks/daakia-icons-DxWnX_IQ.js +1726 -0
  6. package/dist/chunks/daakia-icons-DxWnX_IQ.js.map +1 -0
  7. package/dist/icons/daakia-icons.d.ts +304 -0
  8. package/dist/index.d.ts +2 -0
  9. package/dist/index.js +17032 -0
  10. package/dist/index.js.map +1 -0
  11. package/dist/lib/components/button/AIButtonView.d.ts +20 -0
  12. package/dist/lib/components/button/ButtonView.d.ts +28 -0
  13. package/dist/lib/components/button/DropDownButtonView.d.ts +19 -0
  14. package/dist/lib/components/button/IconButtonView.d.ts +22 -0
  15. package/dist/lib/components/button/SegmentedView.d.ts +17 -0
  16. package/dist/lib/components/button/SplitButtonView.d.ts +23 -0
  17. package/dist/lib/components/chips/ChipView.d.ts +21 -0
  18. package/dist/lib/components/display/CodeBlockView.d.ts +11 -0
  19. package/dist/lib/components/display/ColoredTextView.d.ts +18 -0
  20. package/dist/lib/components/display/CopyButtonView.d.ts +11 -0
  21. package/dist/lib/components/display/DataTableView.d.ts +27 -0
  22. package/dist/lib/components/display/DottedCardView.d.ts +10 -0
  23. package/dist/lib/components/display/EmptyStateView.d.ts +14 -0
  24. package/dist/lib/components/display/ExpandableLogEntryView.d.ts +14 -0
  25. package/dist/lib/components/display/FeatureCategoryView.d.ts +18 -0
  26. package/dist/lib/components/display/HudView.d.ts +25 -0
  27. package/dist/lib/components/display/JsonTreeView.d.ts +11 -0
  28. package/dist/lib/components/display/LiveColorCustomizer.d.ts +21 -0
  29. package/dist/lib/components/display/LoaderView.d.ts +12 -0
  30. package/dist/lib/components/display/MarkdownView.d.ts +19 -0
  31. package/dist/lib/components/display/PromptCardView.d.ts +33 -0
  32. package/dist/lib/components/display/PromptLibraryEditorView.d.ts +32 -0
  33. package/dist/lib/components/display/PromptLibraryListView.d.ts +30 -0
  34. package/dist/lib/components/display/StageView.d.ts +26 -0
  35. package/dist/lib/components/display/StatsCardView.d.ts +15 -0
  36. package/dist/lib/components/display/StatusIndicatorView.d.ts +14 -0
  37. package/dist/lib/components/display/ToastView.d.ts +19 -0
  38. package/dist/lib/components/display/YamlKeyChip.d.ts +15 -0
  39. package/dist/lib/components/input/CheckboxView.d.ts +15 -0
  40. package/dist/lib/components/input/DebugEditorView.d.ts +26 -0
  41. package/dist/lib/components/input/DiffEditorView.d.ts +18 -0
  42. package/dist/lib/components/input/DiffEditorView.fallback.d.ts +2 -0
  43. package/dist/lib/components/input/DiffEditorView.monaco.d.ts +2 -0
  44. package/dist/lib/components/input/DurationInputView.d.ts +15 -0
  45. package/dist/lib/components/input/EditorView.d.ts +222 -0
  46. package/dist/lib/components/input/EditorView.fallback.d.ts +10 -0
  47. package/dist/lib/components/input/EditorView.monaco.d.ts +2 -0
  48. package/dist/lib/components/input/EditorView.shell.d.ts +13 -0
  49. package/dist/lib/components/input/FormDataTableView.d.ts +22 -0
  50. package/dist/lib/components/input/HiddenKeyValueItemView.d.ts +22 -0
  51. package/dist/lib/components/input/HighlightedInputView.d.ts +26 -0
  52. package/dist/lib/components/input/KeyValueTableRowView.d.ts +31 -0
  53. package/dist/lib/components/input/KeyValueTableView.d.ts +59 -0
  54. package/dist/lib/components/input/MergedInputView.d.ts +43 -0
  55. package/dist/lib/components/input/MultilineInputView.d.ts +15 -0
  56. package/dist/lib/components/input/SearchInputView.d.ts +17 -0
  57. package/dist/lib/components/input/SegmentedControlView.d.ts +23 -0
  58. package/dist/lib/components/input/SelectInputView.d.ts +31 -0
  59. package/dist/lib/components/input/SelectTextInputView.d.ts +44 -0
  60. package/dist/lib/components/input/SliderView.d.ts +15 -0
  61. package/dist/lib/components/input/TabView.d.ts +28 -0
  62. package/dist/lib/components/input/TagInputView.d.ts +10 -0
  63. package/dist/lib/components/input/TextInputView.d.ts +36 -0
  64. package/dist/lib/components/input/ThemeCardSelectorView.d.ts +18 -0
  65. package/dist/lib/components/input/ToggleSwitchView.d.ts +19 -0
  66. package/dist/lib/components/layout/BottomPanelView.d.ts +16 -0
  67. package/dist/lib/components/layout/CollapsibleSectionView.d.ts +14 -0
  68. package/dist/lib/components/layout/DebugView.d.ts +63 -0
  69. package/dist/lib/components/layout/FolderView.d.ts +85 -0
  70. package/dist/lib/components/layout/ResizablePanelView.d.ts +10 -0
  71. package/dist/lib/components/layout/SettingsNavView.d.ts +29 -0
  72. package/dist/lib/components/layout/SideNavView.d.ts +39 -0
  73. package/dist/lib/components/layout/SpacerView.d.ts +7 -0
  74. package/dist/lib/components/layout/SplitPanelView.d.ts +33 -0
  75. package/dist/lib/components/modal/ContextMenuView.d.ts +28 -0
  76. package/dist/lib/components/modal/InfoPopupView.d.ts +17 -0
  77. package/dist/lib/components/modal/ModalView.d.ts +41 -0
  78. package/dist/lib/components/rearrange/RearrangeView.d.ts +34 -0
  79. package/dist/lib/components/tabs/PilledTabView.d.ts +19 -0
  80. package/dist/lib/components/tabs/TabBarView.d.ts +28 -0
  81. package/dist/lib/components/tabs/TabView.d.ts +34 -0
  82. package/dist/lib/core/ButtonBase.d.ts +28 -0
  83. package/dist/lib/core/CardBase.d.ts +21 -0
  84. package/dist/lib/core/ChipBase.d.ts +21 -0
  85. package/dist/lib/core/DisplayBase.d.ts +21 -0
  86. package/dist/lib/core/DuiContext.d.ts +53 -0
  87. package/dist/lib/core/DuiTokens.d.ts +115 -0
  88. package/dist/lib/core/DuiTypes.d.ts +29 -0
  89. package/dist/lib/core/EditorBase.d.ts +13 -0
  90. package/dist/lib/core/InputBase.d.ts +25 -0
  91. package/dist/lib/core/MenuBase.d.ts +23 -0
  92. package/dist/lib/core/NavBase.d.ts +26 -0
  93. package/dist/lib/core/OverlayBase.d.ts +20 -0
  94. package/dist/lib/core/SelectBase.d.ts +22 -0
  95. package/dist/lib/core/TabBase.d.ts +25 -0
  96. package/dist/lib/core/TableBase.d.ts +19 -0
  97. package/dist/lib/core/ToggleBase.d.ts +19 -0
  98. package/dist/lib/core/index.d.ts +25 -0
  99. package/dist/lib/index.d.ts +159 -0
  100. package/dist/lib/monaco-runtime.d.ts +29 -0
  101. package/dist/lib/theme/core.d.ts +8 -0
  102. package/dist/lib/theme/editor.d.ts +11 -0
  103. package/dist/lib/theme/utils.d.ts +6 -0
  104. package/dist/monaco-setup.d.ts +4 -0
  105. package/dist/monaco-setup.js +883 -0
  106. package/dist/monaco-setup.js.map +1 -0
  107. package/dist/style.css +1 -0
  108. package/dist/style.js +2 -0
  109. package/dist/style.js.map +1 -0
  110. package/dist/theme/core.js +191 -0
  111. package/dist/theme/core.js.map +1 -0
  112. package/dist/theme/editor.js +104 -0
  113. package/dist/theme/editor.js.map +1 -0
  114. package/dist/theme/utils.js +67 -0
  115. package/dist/theme/utils.js.map +1 -0
  116. package/package.json +81 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EditorView.shell-BGH2VhWM.js","sources":["../../src/lib/core/DuiTokens.ts","../../src/lib/core/DuiContext.tsx","../../src/lib/core/EditorBase.ts","../../src/lib/components/modal/ContextMenuView.tsx","../../src/lib/monaco-runtime.ts","../../src/lib/components/input/EditorView.shell.tsx"],"sourcesContent":["import type { DuiSize, DuiRadius, DuiWidth } from './DuiTypes';\n\n// ─── Token Tables ─────────────────────────────────────────────────────────────\n// Single source of truth for every size-related value in the DUI system.\n// Think of this file as the \"parent class\" — all DUI components inherit their\n// visual dimensions from here. No component may define its own local size map.\n\n/** Heights (px) per size × category */\nexport const DUI_HEIGHT = {\n /** Standard form controls: text input, select, duration, search, highlighted input */\n input: { xxs: 16, xs: 20, sm: 24, md: 28, lg: 36, xl: 40, xxl: 48, xxxl: 56 },\n /** Push buttons (primary, secondary, ghost, danger) */\n button: { xxs: 16, xs: 20, sm: 24, md: 28, lg: 36, xl: 40, xxl: 48, xxxl: 56 },\n /** Pill tabs, segment controls */\n tab: { xxs: 16, xs: 20, sm: 24, md: 28, lg: 36, xl: 40, xxl: 48, xxxl: 56 },\n /** Sidebar nav items, settings nav links */\n nav: { xxs: 20, xs: 24, sm: 28, md: 32, lg: 36, xl: 44, xxl: 52, xxxl: 60 },\n /** Context-menu items, dropdown options, sub-menu rows */\n menu: { xxs: 14, xs: 18, sm: 22, md: 26, lg: 30, xl: 36, xxl: 42, xxxl: 48 },\n /** Table / KV-table rows */\n table: { xxs: 18, xs: 22, sm: 26, md: 30, lg: 36, xl: 40, xxl: 46, xxxl: 54 },\n /** Card container min-height (loosely applied) */\n card: { xxs: 28, xs: 36, sm: 48, md: 64, lg: 80, xl: 96, xxl: 112, xxxl: 128 },\n} as const satisfies Record<string, Record<DuiSize, number>>;\n\n/** Chip / badge heights */\nexport const DUI_CHIP_HEIGHT: Record<DuiSize, number> = {\n xxs: 10, xs: 12, sm: 16, md: 20, lg: 24, xl: 28, xxl: 32, xxxl: 38,\n};\n\n/** Toggle track dimensions (trackW, trackH, thumb) */\nexport const DUI_TOGGLE: Record<DuiSize, { trackW: number; trackH: number; thumb: number }> = {\n xxs: { trackW: 18, trackH: 10, thumb: 8 },\n xs: { trackW: 24, trackH: 14, thumb: 10 },\n sm: { trackW: 28, trackH: 16, thumb: 12 },\n md: { trackW: 36, trackH: 20, thumb: 16 },\n lg: { trackW: 44, trackH: 24, thumb: 20 },\n xl: { trackW: 52, trackH: 28, thumb: 24 },\n xxl: { trackW: 60, trackH: 32, thumb: 28 },\n xxxl: { trackW: 68, trackH: 36, thumb: 32 },\n};\n\n/**\n * Checkbox box and inner icon sizes (px).\n * Centralised here so components never define ad-hoc local maps.\n */\nexport const DUI_CHECKBOX: Record<DuiSize, { box: number; icon: number }> = {\n xxs: { box: 10, icon: 6 },\n xs: { box: 12, icon: 8 },\n sm: { box: 14, icon: 9 },\n md: { box: 16, icon: 11 },\n lg: { box: 18, icon: 13 },\n xl: { box: 20, icon: 15 },\n xxl: { box: 22, icon: 17 },\n xxxl: { box: 26, icon: 20 },\n};\n\n/** Icon sizes (px) — used for icons inside buttons, inputs, menus */\nexport const DUI_ICON_SIZE: Record<DuiSize, number> = {\n xxs: 8, xs: 10, sm: 11, md: 12, lg: 14, xl: 16, xxl: 18, xxxl: 20,\n};\n\n/** Font sizes (px) */\nexport const DUI_FONT_SIZE: Record<DuiSize, string> = {\n xxs: '8px', xs: '9px', sm: '10px', md: '11px', lg: '12px', xl: '13px', xxl: '14px', xxxl: '16px',\n};\n\n/** Vertical padding (px) for dropdown / select option rows */\nexport const DUI_SELECT_ITEM_PY: Record<DuiSize, string> = {\n xxs: '2px', xs: '3px', sm: '4px', md: '5px', lg: '7px', xl: '9px', xxl: '11px', xxxl: '14px',\n};\n\n/** Editor (Monaco) font sizes (px) — larger than DUI_FONT_SIZE since code is harder to read at label sizes */\nexport const DUI_EDITOR_FONT_SIZE: Record<DuiSize, number> = {\n xxs: 10, xs: 11, sm: 11, md: 12, lg: 13, xl: 14, xxl: 15, xxxl: 16,\n};\n\n/** Horizontal padding (px) */\nexport const DUI_PADDING_X: Record<DuiSize, string> = {\n xxs: '4px', xs: '6px', sm: '8px', md: '10px', lg: '12px', xl: '16px', xxl: '20px', xxxl: '24px',\n};\n\n/** Gap between icon and text inside a component (px) */\nexport const DUI_GAP: Record<DuiSize, string> = {\n xxs: '2px', xs: '3px', sm: '4px', md: '5px', lg: '6px', xl: '8px', xxl: '10px', xxxl: '12px',\n};\n\n/** Border-radius presets (px) */\nexport const DUI_RADIUS_MAP: Record<DuiRadius, string> = {\n none: '0px',\n sm: '3px',\n md: '4px',\n lg: '6px',\n full: '999px',\n};\n\n/** Default border-radius per size */\nexport const DUI_DEFAULT_RADIUS: Record<DuiSize, string> = {\n xxs: '2px',\n xs: '3px', // DUI_RADIUS_MAP.sm\n sm: '4px', // DUI_RADIUS_MAP.md\n md: '4px', // DUI_RADIUS_MAP.md\n lg: '6px', // DUI_RADIUS_MAP.lg\n xl: '6px', // DUI_RADIUS_MAP.lg\n xxl: '8px',\n xxxl: '10px',\n};\n\n/** Width presets for DUI components. */\nexport const DUI_WIDTH_MAP: Record<DuiWidth, string> = {\n sm: '80px',\n md: '120px',\n default: 'auto',\n lg: '200px',\n fullWidth: '100%',\n maxContent: 'max-content',\n fw: '100%',\n mx: 'max-content',\n};\n","import { createContext, useContext, useMemo, type ReactNode } from 'react';\nimport type { DuiConfig, DuiSize, DuiRadius, DuiWidth, DuiFontStyle } from './DuiTypes';\nimport { DUI_RADIUS_MAP, DUI_DEFAULT_RADIUS, DUI_WIDTH_MAP } from './DuiTokens';\n\nconst DEFAULT_CONFIG: DuiConfig = { size: 'md' };\n\nconst DuiCtx = createContext<DuiConfig>(DEFAULT_CONFIG);\n\n/**\n * Wrap any subtree to give all DUI components a shared set of default props.\n * Every prop is optional and falls back to its system default when omitted.\n *\n * @example\n * <DuiProvider size=\"sm\" borderRadius=\"lg\" activeColor=\"var(--color-primary)\">\n * <ButtonView>Save</ButtonView>\n * </DuiProvider>\n */\nexport function DuiProvider({\n size = 'md',\n width,\n borderRadius,\n color,\n defaultColor,\n activeColor,\n fontStyle,\n children,\n}: {\n size?: DuiSize;\n width?: DuiWidth;\n borderRadius?: DuiRadius | number;\n color?: string;\n defaultColor?: string;\n activeColor?: string;\n fontStyle?: DuiFontStyle;\n children: ReactNode;\n}) {\n const value = useMemo<DuiConfig>(\n () => ({ size, width, borderRadius, color, defaultColor, activeColor, fontStyle }),\n [size, width, borderRadius, color, defaultColor, activeColor, fontStyle]\n );\n return <DuiCtx.Provider value={value}>{children}</DuiCtx.Provider>;\n}\n\n/**\n * Returns the current DUI config. Components call this and fall back to the\n * context values when no explicit prop is passed.\n *\n * @example\n * const { size } = useDui();\n * const resolved = sizeProp ?? size;\n */\nexport function useDui(): DuiConfig {\n return useContext(DuiCtx);\n}\n\n/**\n * Resolves the border-radius value from either a DuiConfig override\n * (preset name or raw px number) or the size-derived default.\n */\nexport function resolveBorderRadius(\n override: DuiRadius | number | undefined,\n sizeFallback: string\n): string {\n if (override === undefined) return sizeFallback;\n if (typeof override === 'number') return `${override}px`;\n return DUI_RADIUS_MAP[override];\n}\n\n/**\n * Resolves a width preset to a CSS string.\n * Falls back to `'auto'` when no width is set.\n */\nexport function resolveWidth(width: DuiWidth | undefined): string {\n if (!width) return 'auto';\n return DUI_WIDTH_MAP[width];\n}\n\n/**\n * Convenience hook — returns resolved border-radius and width strings\n * plus raw color/style overrides from the current DUI context.\n * Components call this to merge context defaults with their own prop overrides.\n */\nexport function useDuiStyle(sizeFallback: string): {\n borderRadius: string;\n width: string;\n color: string | undefined;\n defaultColor: string | undefined;\n activeColor: string | undefined;\n fontStyle: DuiFontStyle | undefined;\n} {\n const ctx = useDui();\n return useMemo(\n () => ({\n borderRadius: resolveBorderRadius(ctx.borderRadius, sizeFallback),\n width: resolveWidth(ctx.width),\n color: ctx.color,\n defaultColor: ctx.defaultColor,\n activeColor: ctx.activeColor,\n fontStyle: ctx.fontStyle,\n }),\n [ctx, sizeFallback]\n );\n}\n","import type { DuiSize } from './DuiTypes';\nimport { useDui } from './DuiContext';\nimport { DUI_EDITOR_FONT_SIZE } from './DuiTokens';\n\nexport interface EditorBaseConfig {\n fontSize: number;\n}\n\n/** Reserved for future editor-level overrides (e.g. minLines, theme override). */\nexport interface EditorContainerProps {\n // intentionally empty — add overrides here as the system grows\n}\n\n/**\n * Category base for EditorView (Monaco-based editors).\n * Reads the DuiProvider size context so every editor automatically inherits\n * the app-level size without a local prop. Pass `sizeProp` to override per-instance.\n */\nexport function useEditorBase(\n sizeProp?: DuiSize,\n _overrides: EditorContainerProps = {},\n): EditorBaseConfig {\n const ctx = useDui();\n const s = sizeProp ?? ctx.size;\n return {\n fontSize: DUI_EDITOR_FONT_SIZE[s],\n };\n}\n","import { useState, useRef, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { ChevronRightIcon } from '../../../icons';\nimport './ContextMenuView.css';\n\nexport interface ContextMenuItem {\n id: string;\n label: string;\n icon?: React.ReactNode;\n iconColor?: string;\n shortcut?: string;\n danger?: boolean;\n disabled?: boolean;\n separator?: boolean;\n children?: ContextMenuItem[];\n onClick?: () => void;\n}\n\nexport type ContextMenuWidth = 'auto' | 'sm' | 'md' | 'lg' | number;\n\nexport interface ContextMenuViewProps {\n items: ContextMenuItem[];\n anchorEl: HTMLElement | null;\n open: boolean;\n onClose: () => void;\n width?: ContextMenuWidth;\n rounded?: boolean;\n matchAnchorWidth?: boolean;\n position?: { x: number; y: number };\n align?: 'auto' | 'left' | 'right';\n}\n\nconst WIDTH_MAP: Record<string, string> = { auto: 'max-content', sm: '140px', md: '180px', lg: '220px' };\n\nfunction resolveWidth(w: ContextMenuWidth | undefined): string {\n if (!w || w === 'auto') return 'max-content';\n if (typeof w === 'number') return `${w}px`;\n return WIDTH_MAP[w] || 'max-content';\n}\n\n// ─── MenuList — manages which sibling submenu is open ────────────────────────\n\nfunction MenuList({\n items,\n onClose,\n rounded,\n}: {\n items: ContextMenuItem[];\n onClose: () => void;\n rounded: boolean;\n}) {\n const [activeSubId, setActiveSubId] = useState<string | null>(null);\n return (\n <>\n {items.map(item => (\n <MenuItemRow\n key={item.id}\n item={item}\n onClose={onClose}\n rounded={rounded}\n activeSubId={activeSubId}\n onSubOpen={setActiveSubId}\n />\n ))}\n </>\n );\n}\n\n// ─── Recursive menu item row ──────────────────────────────────────────────────\n\nfunction MenuItemRow({\n item,\n onClose,\n rounded,\n activeSubId,\n onSubOpen,\n}: {\n item: ContextMenuItem;\n onClose: () => void;\n rounded: boolean;\n activeSubId: string | null;\n onSubOpen: (id: string | null) => void;\n}) {\n const rowRef = useRef<HTMLDivElement>(null);\n const subRef = useRef<HTMLDivElement>(null);\n\n if (item.separator) {\n return <div style={{ height: '1px', background: 'var(--color-surface-border)', margin: '4px 0' }} />;\n }\n\n const hasSubmenu = !!(item.children && item.children.length > 0);\n const danger = item.danger;\n const isOpen = hasSubmenu && activeSubId === item.id;\n\n // Hovering a row: open its submenu (closes any sibling), or close any open sibling if no submenu\n const handleRowEnter = () => {\n onSubOpen(hasSubmenu ? item.id : null);\n };\n\n const handleClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n if (item.disabled) return;\n if (hasSubmenu) { onSubOpen(item.id); return; }\n item.onClick?.();\n onClose();\n };\n\n // Position submenu portal after it mounts — start hidden, reveal after placement\n useEffect(() => {\n if (!isOpen || !rowRef.current || !subRef.current) return;\n const sub = subRef.current;\n sub.style.visibility = 'hidden';\n\n const raf = requestAnimationFrame(() => {\n if (!rowRef.current || !subRef.current) return;\n const row = rowRef.current.getBoundingClientRect();\n sub.style.top = `${row.top - 4}px`;\n sub.style.left = `${row.right + 4}px`;\n\n const subRect = sub.getBoundingClientRect();\n if (subRect.right > window.innerWidth - 8) {\n sub.style.left = `${row.left - subRect.width - 4}px`;\n }\n if (subRect.bottom > window.innerHeight - 8) {\n sub.style.top = `${window.innerHeight - subRect.height - 8}px`;\n }\n sub.style.visibility = 'visible';\n });\n\n return () => cancelAnimationFrame(raf);\n }, [isOpen]);\n\n return (\n <div\n ref={rowRef}\n onMouseEnter={handleRowEnter}\n style={{ position: 'relative' }}\n >\n <div\n onClick={handleClick}\n className={`dui_ctx-menu__item${danger ? ' dui_ctx-menu__item--danger' : ''}${item.disabled ? ' dui_ctx-menu__item--disabled' : ''}`}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px 10px',\n borderRadius: rounded ? '5px' : '0px',\n fontSize: '12px',\n fontWeight: 500,\n cursor: item.disabled ? 'default' : 'pointer',\n opacity: item.disabled ? 0.45 : 1,\n color: danger ? 'var(--color-error)' : 'var(--color-text-secondary)',\n userSelect: 'none',\n }}\n >\n {item.icon && (\n <span style={{ width: '14px', display: 'flex', alignItems: 'center', flexShrink: 0, color: item.iconColor ?? (danger ? 'var(--color-error)' : 'var(--color-text-muted)') }}>\n {item.icon}\n </span>\n )}\n <span style={{ flex: 1, whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }}>{item.label}</span>\n {item.shortcut && !hasSubmenu && (\n <span style={{ fontSize: '10px', color: 'var(--color-text-muted)', marginLeft: '12px', flexShrink: 0 }}>{item.shortcut}</span>\n )}\n {hasSubmenu && <ChevronRightIcon size={10} style={{ color: 'var(--color-text-muted)', flexShrink: 0, marginLeft: '8px' }} />}\n </div>\n\n {/* Recursive submenu — portalled; each level has its own sibling-coordination state via MenuList */}\n {hasSubmenu && isOpen && createPortal(\n <div\n ref={subRef}\n data-dui-ctx-menu=\"true\"\n style={{\n position: 'fixed',\n visibility: 'hidden',\n zIndex: 99999,\n background: 'var(--color-elevated, var(--color-surface-bg))',\n border: '1px solid var(--color-surface-border)',\n borderRadius: rounded ? '7px' : '0px',\n padding: '4px',\n minWidth: '200px',\n width: 'max-content',\n boxShadow: '0 12px 40px rgba(0,0,0,.35)',\n }}\n >\n <MenuList items={item.children!} onClose={onClose} rounded={rounded} />\n </div>,\n document.body\n )}\n </div>\n );\n}\n\n// ─── Main export ─────────────────────────────────────────────────────────────\n\nexport function ContextMenuView({\n items,\n anchorEl,\n open,\n onClose,\n width = 'auto',\n rounded = true,\n matchAnchorWidth = false,\n position,\n align = 'auto',\n}: ContextMenuViewProps) {\n const menuRef = useRef<HTMLDivElement>(null);\n\n // Close on outside click — not on any DUI menu portal element\n useEffect(() => {\n if (!open) return;\n const handler = (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n if (menuRef.current?.contains(target)) return;\n if (anchorEl?.contains(target)) return;\n if (target.closest?.('[data-dui-ctx-menu]')) return;\n onClose();\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [open, anchorEl, onClose]);\n\n // Escape + shortcut keys\n useEffect(() => {\n if (!open) return;\n const handler = (e: KeyboardEvent) => {\n if (e.key === 'Escape') { onClose(); return; }\n const key = e.key.toUpperCase();\n const matched = items.find(item => {\n if (item.disabled || item.separator || !item.shortcut || !item.onClick) return false;\n if (item.shortcut === '⌫') return e.key === 'Backspace' || e.key === 'Delete';\n return item.shortcut.toUpperCase() === key;\n });\n if (matched) { e.preventDefault(); matched.onClick!(); onClose(); }\n };\n document.addEventListener('keydown', handler);\n return () => document.removeEventListener('keydown', handler);\n }, [open, onClose, items]);\n\n // Position the menu\n useEffect(() => {\n if (!open || !menuRef.current) return;\n const menu = menuRef.current;\n const place = () => {\n const menuW = menu.scrollWidth;\n const menuH = menu.scrollHeight;\n\n let left: number, top: number;\n let anchorTop = 0;\n\n if (position) {\n left = position.x;\n top = position.y;\n anchorTop = position.y;\n } else if (anchorEl) {\n const r = anchorEl.getBoundingClientRect();\n if (align === 'right') {\n left = r.right - menuW;\n } else if (align === 'left') {\n left = r.left;\n } else {\n left = r.left + menuW <= window.innerWidth - 8 ? r.left : r.right - menuW;\n }\n top = r.bottom + 4;\n anchorTop = r.top;\n if (matchAnchorWidth) menu.style.width = r.width + 'px';\n } else {\n return;\n }\n\n if (left + menuW > window.innerWidth - 8) left = Math.max(8, window.innerWidth - menuW - 8);\n if (left < 8) left = 8;\n if (top + menuH > window.innerHeight - 8) top = Math.max(8, anchorTop - menuH - 4);\n\n menu.style.left = left + 'px';\n menu.style.top = top + 'px';\n };\n place();\n const raf = requestAnimationFrame(place);\n window.addEventListener('scroll', place, { passive: true, capture: true });\n window.addEventListener('resize', place, { passive: true });\n return () => {\n cancelAnimationFrame(raf);\n window.removeEventListener('scroll', place, { capture: true });\n window.removeEventListener('resize', place);\n };\n }, [open, anchorEl, position, matchAnchorWidth, align]);\n\n if (!open) return null;\n\n const resolvedWidth = resolveWidth(width);\n\n return createPortal(\n <div\n ref={menuRef}\n data-dui-ctx-menu=\"true\"\n style={{\n position: 'fixed',\n zIndex: 99998,\n width: resolvedWidth,\n minWidth: '140px',\n background: 'var(--color-elevated, var(--color-surface-bg))',\n border: '1px solid var(--color-surface-border)',\n borderRadius: rounded ? '8px' : '0px',\n padding: '4px',\n boxShadow: '0 12px 40px rgba(0,0,0,.35), 0 0 0 1px var(--color-panel-border, rgba(255,255,255,.04))',\n animation: 'dui_menu-in 120ms ease-out',\n }}\n >\n <MenuList items={items} onClose={onClose} rounded={rounded} />\n </div>,\n document.body\n );\n}\n","import { useSyncExternalStore, type ComponentType } from 'react';\n\n/**\n * Shared registry Monaco-backed components register into.\n *\n * The main package entry never references '@monaco-editor/react' or\n * 'monaco-editor' — not even via lazy()/dynamic import, since bundlers still\n * resolve every module reachable from an always-loaded entry point regardless\n * of runtime conditionals (verified empirically; a computed dynamic-import\n * specifier avoids that resolution but then can't be turned into a loadable\n * chunk URL either, and fails at runtime with \"Failed to resolve module\n * specifier\" in the browser).\n *\n * Instead, '@salilvnair/dui/monaco-setup' — a separate subpath only reached\n * when a consumer explicitly imports it — statically imports the real\n * Monaco-backed implementations (safe: importing that subpath is already an\n * explicit opt-in requiring Monaco to be installed) and registers them here.\n * EditorView/DiffEditorView read from this registry and fall back to their\n * lightweight implementation until something has registered.\n */\ntype MonacoRuntimeStatus = 'idle' | 'ready' | 'unavailable';\n\nlet status: MonacoRuntimeStatus = 'idle';\nlet editorImpl: ComponentType<any> | null = null;\nlet diffEditorImpl: ComponentType<any> | null = null;\nconst listeners = new Set<() => void>();\n\nfunction notify() {\n for (const l of listeners) l();\n}\n\nexport function getMonacoRuntimeStatus(): MonacoRuntimeStatus {\n return status;\n}\n\nexport function registerMonacoEditorImpl(impl: ComponentType<any>) {\n editorImpl = impl;\n}\n\nexport function registerMonacoDiffEditorImpl(impl: ComponentType<any>) {\n diffEditorImpl = impl;\n}\n\nexport function getMonacoEditorImpl(): ComponentType<any> | null {\n return editorImpl;\n}\n\nexport function getMonacoDiffEditorImpl(): ComponentType<any> | null {\n return diffEditorImpl;\n}\n\nexport function markMonacoReady() {\n status = 'ready';\n notify();\n}\n\nexport function markMonacoUnavailable() {\n status = 'unavailable';\n notify();\n}\n\nexport function useMonacoRuntimeStatus(): MonacoRuntimeStatus {\n return useSyncExternalStore(\n (cb) => {\n listeners.add(cb);\n return () => listeners.delete(cb);\n },\n getMonacoRuntimeStatus,\n getMonacoRuntimeStatus,\n );\n}\n","import { useState } from 'react';\nimport { ContextMenuView, type ContextMenuItem } from '../modal/ContextMenuView';\n\n/**\n * Shared render shell for both the Monaco-backed and fallback editor\n * implementations — pure DUI chrome, no editor-engine dependency either way.\n */\nexport function EditorShell({\n bordered, containerHeight, children, contextMenuMode = 'native', contextMenuItems, accentColor,\n}: {\n bordered: boolean;\n containerHeight: string;\n children: React.ReactNode;\n contextMenuMode?: 'native' | 'dui' | 'none';\n contextMenuItems?: ContextMenuItem[];\n accentColor?: string;\n}) {\n const [ctxPos, setCtxPos] = useState<{ x: number; y: number } | null>(null);\n const isDui = contextMenuMode === 'dui';\n\n return (\n <div\n className={`dui-editor-shell relative${bordered ? ' rounded border border-[var(--color-surface-border)]' : ''}`}\n style={{ height: containerHeight, width: '100%', position: 'relative', ...(accentColor ? { '--editor-accent': accentColor } as React.CSSProperties : {}) }}\n onContextMenu={isDui ? (e) => { e.preventDefault(); setCtxPos({ x: e.clientX, y: e.clientY }); } : undefined}\n >\n {children}\n {isDui && contextMenuItems && (\n <ContextMenuView\n open={!!ctxPos}\n anchorEl={null}\n position={ctxPos ?? undefined}\n items={contextMenuItems}\n onClose={() => setCtxPos(null)}\n />\n )}\n </div>\n );\n}\n"],"names":["DUI_HEIGHT","DUI_CHIP_HEIGHT","DUI_TOGGLE","DUI_CHECKBOX","DUI_ICON_SIZE","DUI_FONT_SIZE","DUI_SELECT_ITEM_PY","DUI_EDITOR_FONT_SIZE","DUI_PADDING_X","DUI_GAP","DUI_RADIUS_MAP","DUI_DEFAULT_RADIUS","DUI_WIDTH_MAP","DEFAULT_CONFIG","DuiCtx","createContext","DuiProvider","size","width","borderRadius","color","defaultColor","activeColor","fontStyle","children","value","useMemo","jsx","useDui","useContext","resolveBorderRadius","override","sizeFallback","resolveWidth","useDuiStyle","ctx","useEditorBase","sizeProp","_overrides","s","WIDTH_MAP","w","MenuList","items","onClose","rounded","activeSubId","setActiveSubId","useState","Fragment","item","MenuItemRow","onSubOpen","rowRef","useRef","subRef","hasSubmenu","danger","isOpen","handleRowEnter","handleClick","e","_a","useEffect","sub","raf","row","subRect","jsxs","ChevronRightIcon","createPortal","ContextMenuView","anchorEl","open","matchAnchorWidth","position","align","menuRef","handler","target","_b","key","matched","menu","place","menuW","menuH","left","top","anchorTop","r","resolvedWidth","status","editorImpl","diffEditorImpl","listeners","notify","l","getMonacoRuntimeStatus","registerMonacoEditorImpl","impl","registerMonacoDiffEditorImpl","getMonacoEditorImpl","getMonacoDiffEditorImpl","markMonacoReady","useMonacoRuntimeStatus","useSyncExternalStore","cb","EditorShell","bordered","containerHeight","contextMenuMode","contextMenuItems","accentColor","ctxPos","setCtxPos","isDui"],"mappings":"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"}