@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":"index.js","sources":["../src/lib/core/InputBase.ts","../src/lib/core/ButtonBase.ts","../src/lib/core/NavBase.ts","../src/lib/core/ChipBase.ts","../src/lib/core/ToggleBase.ts","../src/lib/core/MenuBase.ts","../src/lib/core/TabBase.ts","../src/lib/core/TableBase.ts","../src/lib/core/DisplayBase.ts","../src/lib/core/OverlayBase.ts","../src/lib/core/CardBase.ts","../src/lib/core/SelectBase.ts","../src/lib/components/chips/ChipView.tsx","../src/lib/components/button/ButtonView.tsx","../src/lib/components/button/SegmentedView.tsx","../src/lib/components/button/IconButtonView.tsx","../src/lib/components/button/DropDownButtonView.tsx","../src/lib/components/input/TextInputView.tsx","../src/lib/components/input/MultilineInputView.tsx","../src/lib/components/input/SelectInputView.tsx","../src/lib/components/input/SelectTextInputView.tsx","../src/lib/components/input/SegmentedControlView.tsx","../src/lib/components/input/HiddenKeyValueItemView.tsx","../src/lib/components/input/TabView.tsx","../src/lib/components/input/EditorView.fallback.tsx","../src/lib/components/input/EditorView.tsx","../src/lib/components/input/DebugEditorView.tsx","../src/lib/components/input/DiffEditorView.fallback.tsx","../src/lib/components/input/DiffEditorView.tsx","../src/lib/components/tabs/TabBarView.tsx","../src/lib/components/tabs/PilledTabView.tsx","../src/lib/components/input/ToggleSwitchView.tsx","../src/lib/components/input/CheckboxView.tsx","../src/lib/components/rearrange/RearrangeView.tsx","../src/lib/components/input/SliderView.tsx","../src/lib/components/modal/ModalView.tsx","../src/lib/components/display/LoaderView.tsx","../src/lib/components/display/EmptyStateView.tsx","../src/lib/components/display/StatusIndicatorView.tsx","../src/lib/components/modal/InfoPopupView.tsx","../src/lib/components/layout/SplitPanelView.tsx","../src/lib/components/layout/ResizablePanelView.tsx","../src/lib/components/display/DottedCardView.tsx","../src/lib/components/display/ColoredTextView.tsx","../src/lib/components/display/StatsCardView.tsx","../src/lib/components/display/DataTableView.tsx","../node_modules/highlight.js/lib/core.js","../node_modules/highlight.js/es/languages/javascript.js","../node_modules/highlight.js/es/languages/typescript.js","../node_modules/highlight.js/es/languages/json.js","../node_modules/highlight.js/es/languages/xml.js","../node_modules/highlight.js/es/languages/css.js","../node_modules/highlight.js/es/languages/bash.js","../node_modules/highlight.js/es/languages/yaml.js","../node_modules/highlight.js/es/languages/python.js","../src/lib/components/display/CodeBlockView.tsx","../src/lib/components/button/AIButtonView.tsx","../src/lib/components/layout/SideNavView.tsx","../src/lib/components/layout/FolderView.tsx","../src/lib/components/layout/CollapsibleSectionView.tsx","../src/lib/components/layout/DebugView.tsx","../src/lib/components/layout/SettingsNavView.tsx","../src/lib/components/input/ThemeCardSelectorView.tsx","../src/lib/components/display/FeatureCategoryView.tsx","../src/lib/components/input/TagInputView.tsx","../src/lib/components/layout/BottomPanelView.tsx","../src/lib/components/display/ToastView.tsx","../src/lib/components/display/PromptCardView.tsx","../src/lib/components/display/PromptLibraryListView.tsx","../src/lib/components/display/PromptLibraryEditorView.tsx","../src/lib/components/display/StageView.tsx","../src/lib/components/display/YamlKeyChip.tsx","../src/lib/components/display/LiveColorCustomizer.tsx","../src/lib/components/input/SearchInputView.tsx","../src/lib/components/input/DurationInputView.tsx","../src/lib/components/button/SplitButtonView.tsx","../src/lib/components/input/HighlightedInputView.tsx","../src/components/shared/modals/ConfirmDialog.tsx","../src/components/shared/controls/http-headers.ts","../src/lib/components/input/KeyValueTableRowView.tsx","../src/lib/components/input/KeyValueTableView.tsx","../src/lib/components/input/MergedInputView.tsx","../src/lib/components/display/HudView.tsx","../src/lib/components/display/JsonTreeView.tsx","../src/lib/components/display/ExpandableLogEntryView.tsx","../src/lib/components/display/CopyButtonView.tsx","../node_modules/marked/lib/marked.esm.js","../node_modules/highlight.js/es/languages/sql.js","../node_modules/highlight.js/es/languages/ruby.js","../node_modules/highlight.js/es/languages/rust.js","../node_modules/highlight.js/es/languages/csharp.js","../node_modules/highlight.js/es/languages/kotlin.js","../node_modules/highlight.js/es/languages/graphql.js","../node_modules/highlight.js/es/languages/markdown.js","../src/lib/components/display/MarkdownView.tsx","../src/lib/components/input/FormDataTableView.tsx","../src/lib/components/layout/SpacerView.tsx"],"sourcesContent":["import type { DuiSize, DuiRadius, DuiWidth, DuiFontStyle } from './DuiTypes';\nimport { useDui, resolveBorderRadius, resolveWidth } from './DuiContext';\nimport { DUI_HEIGHT, DUI_ICON_SIZE, DUI_FONT_SIZE, DUI_PADDING_X, DUI_GAP, DUI_DEFAULT_RADIUS } from './DuiTokens';\n\nexport interface InputBaseConfig {\n height: string;\n fontSize: string;\n iconSize: number;\n borderRadius: string;\n paddingX: string;\n gap: string;\n width: string;\n color: string | undefined;\n fontStyle: DuiFontStyle | undefined;\n}\n\n/** Local override props that any input component can accept. */\nexport interface InputContainerProps {\n width?: DuiWidth;\n borderRadius?: DuiRadius | number;\n color?: string;\n fontStyle?: DuiFontStyle;\n}\n\n/**\n * Category base for: TextInputView, SearchInputView, DurationInputView,\n * HighlightedInputView, NumberInputView, TextAreaView, and any future text-input component.\n * Falls back to DuiProvider values when no local prop is given.\n */\nexport function useInputBase(\n sizeProp?: DuiSize,\n overrides: InputContainerProps = {}\n): InputBaseConfig {\n const ctx = useDui();\n const s = sizeProp ?? ctx.size;\n const sizeRadius = DUI_DEFAULT_RADIUS[s];\n return {\n height: `${DUI_HEIGHT.input[s]}px`,\n fontSize: DUI_FONT_SIZE[s],\n iconSize: DUI_ICON_SIZE[s],\n borderRadius: resolveBorderRadius(overrides.borderRadius ?? ctx.borderRadius, sizeRadius),\n paddingX: DUI_PADDING_X[s],\n gap: DUI_GAP[s],\n width: resolveWidth(overrides.width ?? ctx.width),\n color: overrides.color ?? ctx.color,\n fontStyle: overrides.fontStyle ?? ctx.fontStyle,\n };\n}\n","import type { DuiSize, DuiRadius, DuiWidth, DuiFontStyle } from './DuiTypes';\nimport { useDui, resolveBorderRadius, resolveWidth } from './DuiContext';\nimport { DUI_HEIGHT, DUI_ICON_SIZE, DUI_FONT_SIZE, DUI_PADDING_X, DUI_GAP, DUI_DEFAULT_RADIUS } from './DuiTokens';\n\nexport interface ButtonBaseConfig {\n height: string;\n fontSize: string;\n iconSize: number;\n borderRadius: string;\n paddingX: string;\n gap: string;\n width: string;\n color: string | undefined;\n defaultColor: string | undefined;\n activeColor: string | undefined;\n fontStyle: DuiFontStyle | undefined;\n}\n\n/** Local override props that any button component can accept. */\nexport interface ButtonContainerProps {\n width?: DuiWidth;\n borderRadius?: DuiRadius | number;\n color?: string;\n defaultColor?: string;\n activeColor?: string;\n fontStyle?: DuiFontStyle;\n}\n\n/**\n * Category base for: ButtonView, IconButtonView, SplitButtonView, AIButtonView, DropDownButtonView.\n * Falls back to DuiProvider values when no local prop is given.\n */\nexport function useButtonBase(\n sizeProp?: DuiSize,\n overrides: ButtonContainerProps = {}\n): ButtonBaseConfig {\n const ctx = useDui();\n const s = sizeProp ?? ctx.size;\n const sizeRadius = DUI_DEFAULT_RADIUS[s];\n return {\n height: `${DUI_HEIGHT.button[s]}px`,\n fontSize: DUI_FONT_SIZE[s],\n iconSize: DUI_ICON_SIZE[s],\n borderRadius: resolveBorderRadius(overrides.borderRadius ?? ctx.borderRadius, sizeRadius),\n paddingX: DUI_PADDING_X[s],\n gap: DUI_GAP[s],\n width: resolveWidth(overrides.width ?? ctx.width),\n color: overrides.color ?? ctx.color,\n defaultColor: overrides.defaultColor ?? ctx.defaultColor,\n activeColor: overrides.activeColor ?? ctx.activeColor,\n fontStyle: overrides.fontStyle ?? ctx.fontStyle,\n };\n}\n","import type { DuiSize, DuiRadius, DuiFontStyle } from './DuiTypes';\nimport { useDui, resolveBorderRadius } from './DuiContext';\nimport { DUI_HEIGHT, DUI_ICON_SIZE, DUI_FONT_SIZE, DUI_GAP, DUI_DEFAULT_RADIUS } from './DuiTokens';\n\nexport interface NavBaseConfig {\n /** Nav item row height — intentionally taller than inputs for click comfort */\n itemHeight: string;\n fontSize: string;\n iconSize: number;\n borderRadius: string;\n gap: string;\n paddingX: string;\n color: string | undefined;\n activeColor: string | undefined;\n fontStyle: DuiFontStyle | undefined;\n}\n\n/** Local override props that any nav component can accept. */\nexport interface NavContainerProps {\n borderRadius?: DuiRadius | number;\n color?: string;\n activeColor?: string;\n fontStyle?: DuiFontStyle;\n}\n\n/**\n * Category base for: SideNavView, SettingsNavView, BreadcrumbView, TabBarView,\n * and any future navigation component.\n * Falls back to DuiProvider values when no local prop is given.\n */\nexport function useNavBase(\n sizeProp?: DuiSize,\n overrides: NavContainerProps = {}\n): NavBaseConfig {\n const ctx = useDui();\n const s = sizeProp ?? ctx.size;\n const sizeRadius = DUI_DEFAULT_RADIUS[s];\n const paddingX = s === 'sm' ? '8px' : s === 'md' ? '10px' : s === 'lg' ? '12px' : '16px';\n return {\n itemHeight: `${DUI_HEIGHT.nav[s]}px`,\n fontSize: DUI_FONT_SIZE[s],\n iconSize: DUI_ICON_SIZE[s],\n borderRadius: resolveBorderRadius(overrides.borderRadius ?? ctx.borderRadius, sizeRadius),\n gap: DUI_GAP[s],\n paddingX,\n color: overrides.color ?? ctx.color,\n activeColor: overrides.activeColor ?? ctx.activeColor,\n fontStyle: overrides.fontStyle ?? ctx.fontStyle,\n };\n}\n","import type { DuiSize, DuiRadius, DuiFontStyle } from './DuiTypes';\nimport { useDui, resolveBorderRadius } from './DuiContext';\nimport { DUI_CHIP_HEIGHT, DUI_RADIUS_MAP } from './DuiTokens';\n\nexport interface ChipBaseConfig {\n height: string;\n fontSize: string;\n paddingX: string;\n borderRadius: string;\n color: string | undefined;\n fontStyle: DuiFontStyle | undefined;\n}\n\n/** Local override props that any chip/badge component can accept. */\nexport interface ChipContainerProps {\n borderRadius?: DuiRadius | number;\n color?: string;\n fontStyle?: DuiFontStyle;\n}\n\n/**\n * Category base for: ChipView, StatusBadgeView, CountBadgeView.\n * Chips always default to 'full' (pill) radius — context borderRadius overrides that.\n * Falls back to DuiProvider values when no local prop is given.\n */\nexport function useChipBase(\n sizeProp?: DuiSize,\n overrides: ChipContainerProps = {}\n): ChipBaseConfig {\n const ctx = useDui();\n const s = sizeProp ?? ctx.size;\n const h = DUI_CHIP_HEIGHT[s];\n return {\n height: `${h}px`,\n fontSize: s === 'sm' ? '9px' : s === 'md' ? '10px' : s === 'lg' ? '11px' : '12px',\n paddingX: s === 'sm' ? '5px' : s === 'md' ? '7px' : s === 'lg' ? '9px' : '11px',\n borderRadius: resolveBorderRadius(overrides.borderRadius ?? ctx.borderRadius, DUI_RADIUS_MAP.full),\n color: overrides.color ?? ctx.color,\n fontStyle: overrides.fontStyle ?? ctx.fontStyle,\n };\n}\n","import type { DuiSize } from './DuiTypes';\nimport { useDui } from './DuiContext';\nimport { DUI_TOGGLE, DUI_FONT_SIZE } from './DuiTokens';\n\nexport interface ToggleBaseConfig {\n trackW: number;\n trackH: number;\n thumb: number;\n fontSize: string;\n activeColor: string | undefined;\n color: string | undefined;\n}\n\n/** Local override props that any toggle/checkbox component can accept. */\nexport interface ToggleContainerProps {\n activeColor?: string;\n color?: string;\n}\n\n/**\n * Category base for: ToggleSwitchView, CheckboxView, RadioButtonView.\n * Falls back to DuiProvider values when no local prop is given.\n */\nexport function useToggleBase(\n sizeProp?: DuiSize,\n overrides: ToggleContainerProps = {}\n): ToggleBaseConfig {\n const ctx = useDui();\n const s = sizeProp ?? ctx.size;\n return {\n ...DUI_TOGGLE[s],\n fontSize: DUI_FONT_SIZE[s],\n activeColor: overrides.activeColor ?? ctx.activeColor,\n color: overrides.color ?? ctx.color,\n };\n}\n","import type { DuiSize, DuiRadius, DuiFontStyle } from './DuiTypes';\nimport { useDui, resolveBorderRadius } from './DuiContext';\nimport { DUI_HEIGHT, DUI_ICON_SIZE, DUI_FONT_SIZE, DUI_DEFAULT_RADIUS } from './DuiTokens';\n\nexport interface MenuBaseConfig {\n itemHeight: string;\n fontSize: string;\n iconSize: number;\n borderRadius: string;\n paddingX: string;\n gap: string;\n color: string | undefined;\n fontStyle: DuiFontStyle | undefined;\n}\n\n/** Local override props that any menu component can accept. */\nexport interface MenuContainerProps {\n borderRadius?: DuiRadius | number;\n color?: string;\n fontStyle?: DuiFontStyle;\n}\n\n/**\n * Category base for: StyledDropdown options, ContextMenuView items, submenu rows,\n * SelectInputView options, and any future menu/dropdown component.\n * Falls back to DuiProvider values when no local prop is given.\n */\nexport function useMenuBase(\n sizeProp?: DuiSize,\n overrides: MenuContainerProps = {}\n): MenuBaseConfig {\n const ctx = useDui();\n const s = sizeProp ?? ctx.size;\n const sizeRadius = DUI_DEFAULT_RADIUS[s];\n const paddingX = s === 'sm' ? '8px' : s === 'md' ? '10px' : s === 'lg' ? '12px' : '14px';\n const gap = s === 'sm' ? '5px' : s === 'md' ? '6px' : s === 'lg' ? '7px' : '8px';\n return {\n itemHeight: `${DUI_HEIGHT.menu[s]}px`,\n fontSize: DUI_FONT_SIZE[s],\n iconSize: DUI_ICON_SIZE[s],\n borderRadius: resolveBorderRadius(overrides.borderRadius ?? ctx.borderRadius, sizeRadius),\n paddingX,\n gap,\n color: overrides.color ?? ctx.color,\n fontStyle: overrides.fontStyle ?? ctx.fontStyle,\n };\n}\n","import type { DuiSize, DuiRadius, DuiWidth, DuiFontStyle } from './DuiTypes';\nimport { useDui, resolveBorderRadius, resolveWidth } from './DuiContext';\nimport { DUI_HEIGHT, DUI_FONT_SIZE, DUI_GAP, DUI_DEFAULT_RADIUS } from './DuiTokens';\n\nexport interface TabBaseConfig {\n height: string;\n fontSize: string;\n gap: string;\n borderRadius: string;\n paddingX: string;\n width: string;\n color: string | undefined;\n activeColor: string | undefined;\n fontStyle: DuiFontStyle | undefined;\n}\n\n/** Local override props that any tab component can accept. */\nexport interface TabContainerProps {\n width?: DuiWidth;\n borderRadius?: DuiRadius | number;\n color?: string;\n activeColor?: string;\n fontStyle?: DuiFontStyle;\n}\n\n/**\n * Category base for: PillTabsView, SegmentTabsView, TabView, and any future tab/segment component.\n * Falls back to DuiProvider values when no local prop is given.\n */\nexport function useTabBase(\n sizeProp?: DuiSize,\n overrides: TabContainerProps = {}\n): TabBaseConfig {\n const ctx = useDui();\n const s = sizeProp ?? ctx.size;\n const sizeRadius = DUI_DEFAULT_RADIUS[s];\n const paddingX = s === 'sm' ? '10px' : s === 'md' ? '12px' : s === 'lg' ? '14px' : '18px';\n return {\n height: `${DUI_HEIGHT.tab[s]}px`,\n fontSize: DUI_FONT_SIZE[s],\n gap: DUI_GAP[s],\n borderRadius: resolveBorderRadius(overrides.borderRadius ?? ctx.borderRadius, sizeRadius),\n paddingX,\n width: resolveWidth(overrides.width ?? ctx.width),\n color: overrides.color ?? ctx.color,\n activeColor: overrides.activeColor ?? ctx.activeColor,\n fontStyle: overrides.fontStyle ?? ctx.fontStyle,\n };\n}\n","import type { DuiSize, DuiFontStyle } from './DuiTypes';\nimport { useDui } from './DuiContext';\nimport { DUI_HEIGHT, DUI_FONT_SIZE } from './DuiTokens';\n\nexport interface TableBaseConfig {\n rowHeight: string;\n headerFontSize: string;\n cellFontSize: string;\n paddingX: string;\n color: string | undefined;\n fontStyle: DuiFontStyle | undefined;\n}\n\n/** Local override props that any table component can accept. */\nexport interface TableContainerProps {\n color?: string;\n fontStyle?: DuiFontStyle;\n}\n\n/**\n * Category base for: KeyValueTableView, DataTableView, and any future table component.\n * Falls back to DuiProvider values when no local prop is given.\n */\nexport function useTableBase(\n sizeProp?: DuiSize,\n overrides: TableContainerProps = {}\n): TableBaseConfig {\n const ctx = useDui();\n const s = sizeProp ?? ctx.size;\n const paddingX = s === 'sm' ? '8px' : s === 'md' ? '10px' : s === 'lg' ? '12px' : '14px';\n return {\n rowHeight: `${DUI_HEIGHT.table[s]}px`,\n headerFontSize: s === 'sm' ? '9px' : s === 'md' ? '9px' : '10px',\n cellFontSize: DUI_FONT_SIZE[s],\n paddingX,\n color: overrides.color ?? ctx.color,\n fontStyle: overrides.fontStyle ?? ctx.fontStyle,\n };\n}\n","import type { DuiSize, DuiRadius, DuiFontStyle } from './DuiTypes';\nimport { useDui, resolveBorderRadius } from './DuiContext';\nimport { DUI_FONT_SIZE, DUI_DEFAULT_RADIUS, DUI_ICON_SIZE } from './DuiTokens';\n\nexport interface DisplayBaseConfig {\n fontSize: string;\n iconSize: number;\n borderRadius: string;\n gap: string;\n color: string | undefined;\n fontStyle: DuiFontStyle | undefined;\n}\n\n/** Local override props that any display component can accept. */\nexport interface DisplayContainerProps {\n borderRadius?: DuiRadius | number;\n color?: string;\n fontStyle?: DuiFontStyle;\n}\n\n/**\n * Category base for: LabelView, EmptyStateView, PromptCardView, FeatureCategoryView,\n * StatusBadgeView, InfoPopup, and any future read-only display component.\n * Falls back to DuiProvider values when no local prop is given.\n */\nexport function useDisplayBase(\n sizeProp?: DuiSize,\n overrides: DisplayContainerProps = {}\n): DisplayBaseConfig {\n const ctx = useDui();\n const s = sizeProp ?? ctx.size;\n const sizeRadius = DUI_DEFAULT_RADIUS[s];\n const gap = s === 'sm' ? '4px' : s === 'md' ? '6px' : s === 'lg' ? '8px' : '10px';\n return {\n fontSize: DUI_FONT_SIZE[s],\n iconSize: DUI_ICON_SIZE[s],\n borderRadius: resolveBorderRadius(overrides.borderRadius ?? ctx.borderRadius, sizeRadius),\n gap,\n color: overrides.color ?? ctx.color,\n fontStyle: overrides.fontStyle ?? ctx.fontStyle,\n };\n}\n","import type { DuiSize, DuiRadius } from './DuiTypes';\nimport { useDui, resolveBorderRadius } from './DuiContext';\nimport { DUI_FONT_SIZE } from './DuiTokens';\n\nexport interface OverlayBaseConfig {\n fontSize: string;\n borderRadius: string;\n headerFontSize: string;\n paddingX: string;\n paddingY: string;\n color: string | undefined;\n}\n\n/** Local override props that any overlay component can accept. */\nexport interface OverlayContainerProps {\n borderRadius?: DuiRadius | number;\n color?: string;\n}\n\n/**\n * Category base for: ModalView, ToastView, TooltipView, PopoverView, DrawerView.\n * Overlays use slightly larger radius for a \"floating\" feel.\n * Falls back to DuiProvider values when no local prop is given.\n */\nexport function useOverlayBase(\n sizeProp?: DuiSize,\n overrides: OverlayContainerProps = {}\n): OverlayBaseConfig {\n const ctx = useDui();\n const s = sizeProp ?? ctx.size;\n const radiusMap: Record<DuiSize, string> = {\n xxs: '4px', xs: '5px', sm: '6px', md: '8px', lg: '10px', xl: '12px', xxl: '14px', xxxl: '16px',\n };\n return {\n fontSize: DUI_FONT_SIZE[s],\n borderRadius: resolveBorderRadius(overrides.borderRadius ?? ctx.borderRadius, radiusMap[s]),\n headerFontSize: s === 'sm' ? '12px' : s === 'md' ? '13px' : s === 'lg' ? '14px' : '15px',\n paddingX: s === 'sm' ? '12px' : s === 'md' ? '16px' : s === 'lg' ? '20px' : '24px',\n paddingY: s === 'sm' ? '10px' : s === 'md' ? '12px' : s === 'lg' ? '16px' : '20px',\n color: overrides.color ?? ctx.color,\n };\n}\n","import type { DuiSize, DuiRadius, DuiFontStyle } from './DuiTypes';\nimport { useDui, resolveBorderRadius } from './DuiContext';\nimport { DUI_FONT_SIZE, DUI_DEFAULT_RADIUS } from './DuiTokens';\n\nexport interface CardBaseConfig {\n fontSize: string;\n borderRadius: string;\n padding: string;\n gap: string;\n color: string | undefined;\n fontStyle: DuiFontStyle | undefined;\n}\n\n/** Local override props that any card component can accept. */\nexport interface CardContainerProps {\n borderRadius?: DuiRadius | number;\n color?: string;\n fontStyle?: DuiFontStyle;\n}\n\n/**\n * Category base for: PromptCardView, RequestCardView, EnvironmentCardView,\n * and any future card/list-item component.\n * Falls back to DuiProvider values when no local prop is given.\n */\nexport function useCardBase(\n sizeProp?: DuiSize,\n overrides: CardContainerProps = {}\n): CardBaseConfig {\n const ctx = useDui();\n const s = sizeProp ?? ctx.size;\n const sizeRadius = DUI_DEFAULT_RADIUS[s];\n const padding = s === 'sm' ? '4px 8px' : s === 'md' ? '6px 10px' : s === 'lg' ? '8px 12px' : '10px 16px';\n const gap = s === 'sm' ? '6px' : s === 'md' ? '8px' : s === 'lg' ? '10px' : '12px';\n return {\n fontSize: DUI_FONT_SIZE[s],\n borderRadius: resolveBorderRadius(overrides.borderRadius ?? ctx.borderRadius, sizeRadius),\n padding,\n gap,\n color: overrides.color ?? ctx.color,\n fontStyle: overrides.fontStyle ?? ctx.fontStyle,\n };\n}\n","import type { DuiSize, DuiRadius, DuiWidth } from './DuiTypes';\nimport { useDui, resolveBorderRadius, resolveWidth } from './DuiContext';\nimport { DUI_HEIGHT, DUI_ICON_SIZE, DUI_FONT_SIZE, DUI_PADDING_X, DUI_GAP, DUI_DEFAULT_RADIUS, DUI_SELECT_ITEM_PY } from './DuiTokens';\n\nexport interface SelectBaseConfig {\n height: string;\n fontSize: string;\n iconSize: number;\n borderRadius: string;\n paddingX: string;\n gap: string;\n width: string;\n color: string | undefined;\n itemPy: string;\n}\n\nexport interface SelectContainerProps {\n width?: DuiWidth;\n borderRadius?: DuiRadius | number;\n color?: string;\n}\n\n/**\n * Category base for: SelectInputView, StyledDropdown, and any future picker component.\n * Falls back to DuiProvider values when no local prop is given.\n */\nexport function useSelectBase(\n sizeProp?: DuiSize,\n overrides: SelectContainerProps = {}\n): SelectBaseConfig {\n const ctx = useDui();\n const s = sizeProp ?? ctx.size;\n const sizeRadius = DUI_DEFAULT_RADIUS[s];\n return {\n height: `${DUI_HEIGHT.input[s]}px`,\n fontSize: DUI_FONT_SIZE[s],\n iconSize: DUI_ICON_SIZE[s],\n borderRadius: resolveBorderRadius(overrides.borderRadius ?? ctx.borderRadius, sizeRadius),\n paddingX: DUI_PADDING_X[s],\n gap: DUI_GAP[s],\n width: resolveWidth(overrides.width ?? ctx.width),\n color: overrides.color ?? ctx.color,\n itemPy: DUI_SELECT_ITEM_PY[s],\n };\n}\n","import type { CSSProperties } from 'react';\nimport type { DuiSize } from '../../core/DuiTypes';\nimport { useChipBase } from '../../core/ChipBase';\n\n/** `'xs'` is a sub-sm alias kept for dense protocol badges. */\nexport type ChipViewSize = 'xs' | DuiSize;\n\nexport interface ChipViewProps {\n label: string;\n /** CSS variable or raw color value — drives text, border, and auto-derived bg */\n color?: string;\n /** Override background explicitly instead of deriving from color */\n bg?: string;\n /** Size — falls back to DuiProvider context when omitted (resolves to 'sm' equivalent). */\n size?: ChipViewSize;\n /** true = rounded-full (default), false = token border-radius */\n rounded?: boolean;\n onClick?: () => void;\n /** Filled background instead of translucent */\n active?: boolean;\n className?: string;\n style?: CSSProperties;\n}\n\nconst XS = { height: '16px', px: '5px', fontSize: '9px' };\n\nexport function ChipView({\n label,\n color,\n bg,\n size,\n rounded = true,\n onClick,\n active = false,\n className = '',\n style,\n}: ChipViewProps) {\n // 'xs' bypasses the size system — it's a fixed sub-sm preset for dense badges.\n const isXs = size === 'xs';\n // For DuiSize values (sm/md/lg/xl) or undefined (inherits from context), use the base hook.\n const base = useChipBase(isXs ? 'sm' : (size as DuiSize | undefined));\n const { height, px, fontSize } = isXs\n ? XS\n : { height: base.height, px: base.paddingX, fontSize: base.fontSize };\n\n const accent = color || 'var(--color-primary)';\n const borderRadius = rounded ? '9999px' : '4px';\n\n const background = active\n ? accent\n : (bg || `color-mix(in srgb, ${accent} 12%, transparent)`);\n const textColor = active ? 'var(--color-chip-active-text)' : accent;\n const borderColor = `color-mix(in srgb, ${accent} 30%, transparent)`;\n\n return (\n <span\n className={`inline-flex items-center font-semibold tracking-wide select-none ${onClick ? 'cursor-pointer' : ''} ${className}`}\n style={{\n height,\n paddingLeft: px,\n paddingRight: px,\n fontSize,\n borderRadius,\n background,\n color: textColor,\n border: `1px solid ${borderColor}`,\n lineHeight: 1,\n whiteSpace: 'nowrap',\n transition: 'all 120ms ease',\n ...style,\n }}\n onClick={onClick}\n >\n {label}\n </span>\n );\n}\n","import type { ButtonHTMLAttributes, CSSProperties, ReactNode } from 'react';\nimport { SpinnerIcon } from '../../../icons';\nimport type { DuiSize, DuiWidth, DuiRadius, DuiFontStyle } from '../../core/DuiTypes';\nimport { useButtonBase } from '../../core/ButtonBase';\nimport './ButtonView.css';\n\nexport type ButtonVariant = 'primary' | 'secondary' | 'ghost' | 'danger' | 'accent';\n/** `'default'` is kept for backwards-compat and resolves to context size. */\nexport type ButtonSize = 'default' | DuiSize;\n\nexport interface ButtonViewProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n /** true = token border-radius (default), false = 0px (square) */\n rounded?: boolean;\n iconLeft?: ReactNode;\n iconRight?: ReactNode;\n loading?: boolean;\n /** Override accent color for primary/focus ring */\n accentColor?: string;\n /** Alias for children — shown as button label text */\n label?: string;\n // ─── DUI container props (override DuiProvider defaults) ─────────────────\n width?: DuiWidth;\n borderRadius?: DuiRadius | number;\n /** Text color override */\n color?: string;\n /** Primary/accent color (alias for accentColor with context-level support) */\n defaultColor?: string;\n /** Color for active/focus ring state */\n activeColor?: string;\n fontStyle?: DuiFontStyle;\n}\n\nexport function ButtonView({\n variant = 'secondary',\n size = 'default',\n rounded = true,\n iconLeft,\n iconRight,\n loading = false,\n accentColor,\n label,\n children,\n disabled,\n style,\n className = '',\n width,\n borderRadius,\n color,\n defaultColor,\n activeColor,\n fontStyle,\n ...rest\n}: ButtonViewProps) {\n const base = useButtonBase(\n size === 'default' ? undefined : size,\n { width, borderRadius, color, defaultColor, activeColor, fontStyle }\n );\n const accent = accentColor || base.defaultColor || 'var(--color-btn-primary-bg)';\n const radius = rounded ? base.borderRadius : '0px';\n const isDisabled = disabled || loading;\n\n const variantStyle: CSSProperties = (() => {\n switch (variant) {\n case 'primary':\n return { color: base.color || 'var(--color-btn-primary-text, #fff)', border: '1px solid transparent' };\n case 'danger':\n return { color: base.color || 'var(--color-btn-danger-text, #fff)', border: '1px solid transparent' };\n case 'ghost':\n return { color: base.color || accentColor || 'var(--color-text-secondary)', border: '1px solid transparent' };\n case 'accent':\n return {\n color: base.color || accentColor || 'var(--color-text-primary)',\n border: `1px solid ${accentColor ? `color-mix(in srgb, ${accentColor} 25%, transparent)` : 'var(--color-btn-secondary-border)'}`,\n };\n default: // secondary\n return { color: base.color || 'var(--color-text-primary)', border: '1px solid var(--color-btn-secondary-border)' };\n }\n })();\n\n const accentVars: CSSProperties = (() => {\n if (variant === 'primary') return {\n '--dui-btn-bg': accent,\n '--dui-btn-hover-bg': (accentColor || base.defaultColor)\n ? `color-mix(in srgb, ${accent} 80%, black)`\n : 'var(--color-btn-primary-hover)',\n } as CSSProperties;\n if (variant === 'ghost' && accentColor) return {\n '--dui-ghost-hover-bg': `color-mix(in srgb, ${accentColor} 12%, transparent)`,\n } as CSSProperties;\n if (variant === 'accent') return {\n '--dui-accent-bg': accentColor\n ? `color-mix(in srgb, ${accentColor} 12%, transparent)`\n : 'var(--color-btn-ghost-hover)',\n '--dui-accent-hover-bg': accentColor\n ? `color-mix(in srgb, ${accentColor} 20%, transparent)`\n : 'var(--color-btn-secondary-hover)',\n } as CSSProperties;\n return {};\n })();\n\n return (\n <button\n type=\"button\"\n disabled={isDisabled}\n className={`dui_button dui_button--${variant} inline-flex items-center justify-center font-medium cursor-pointer select-none ${className}`}\n style={{\n height: base.height,\n width: base.width !== 'auto' ? base.width : undefined,\n paddingLeft: base.paddingX,\n paddingRight: base.paddingX,\n fontSize: base.fontSize,\n gap: base.gap,\n borderRadius: radius,\n fontStyle: base.fontStyle,\n opacity: isDisabled ? 0.5 : 1,\n ...accentVars,\n ...variantStyle,\n ...style,\n }}\n {...rest}\n >\n {loading ? <SpinnerIcon size={base.iconSize} /> : iconLeft}\n {label ?? children}\n {!loading && iconRight}\n </button>\n );\n}\n","/**\n * SegmentedView — bordered button-group segment control.\n *\n * Driven by DUI_HEIGHT.tab so the height is always consistent with other\n * DUI components at the same size. Active segment uses accentColor fill.\n *\n * Usage:\n * <SegmentedView\n * options={[{id:'a',label:'A'},{id:'b',label:'B'}]}\n * value={v}\n * onChange={setV}\n * size=\"sm\"\n * accentColor=\"var(--story-accent-3)\"\n * />\n */\nimport type { CSSProperties, ReactNode } from 'react';\nimport type { DuiSize } from '../../core/DuiTypes';\nimport { DUI_HEIGHT, DUI_FONT_SIZE, DUI_PADDING_X } from '../../core/DuiTokens';\n\nexport interface SegmentedOption {\n id: string;\n label: string;\n icon?: ReactNode;\n}\n\nexport interface SegmentedViewProps {\n options: SegmentedOption[];\n value: string;\n onChange: (id: string) => void;\n size?: DuiSize;\n accentColor?: string;\n className?: string;\n style?: CSSProperties;\n}\n\nexport function SegmentedView({\n options,\n value,\n onChange,\n size = 'sm',\n accentColor,\n className,\n style,\n}: SegmentedViewProps) {\n const h = DUI_HEIGHT.tab[size];\n const fs = DUI_FONT_SIZE[size];\n const px = DUI_PADDING_X[size];\n\n return (\n <div\n className={className}\n style={{\n display: 'inline-flex',\n height: h,\n borderRadius: 6,\n border: '1px solid var(--color-btn-secondary-border, rgba(255,255,255,0.12))',\n overflow: 'hidden',\n background: 'var(--color-btn-secondary-bg, rgba(255,255,255,0.04))',\n flexShrink: 0,\n ...style,\n }}\n >\n {options.map((opt) => {\n const active = opt.id === value;\n return (\n <button\n key={opt.id}\n type=\"button\"\n onClick={() => onChange(opt.id)}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 4,\n height: '100%',\n padding: `0 ${px}`,\n fontSize: fs,\n fontWeight: 600,\n lineHeight: 1,\n whiteSpace: 'nowrap',\n background: active\n ? (accentColor ?? 'var(--color-primary, #7c3aed)')\n : 'transparent',\n color: active ? '#fff' : 'var(--color-text-muted)',\n border: 'none',\n cursor: 'pointer',\n transition: 'background 120ms, color 120ms',\n fontFamily: 'inherit',\n }}\n >\n {opt.icon}\n {opt.label}\n </button>\n );\n })}\n </div>\n );\n}\n","import type { ButtonHTMLAttributes, CSSProperties, ReactNode } from 'react';\nimport type { DuiRadius } from '../../core/DuiTypes';\nimport { useDui, resolveBorderRadius } from '../../core/DuiContext';\nimport './IconButtonView.css';\n\nexport type IconButtonSize = 'default' | 'sm' | 'md' | 'lg' | 'xl';\nexport type IconButtonVariant = 'ghost' | 'filled';\n\nexport interface IconButtonViewProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n icon: ReactNode;\n size?: IconButtonSize;\n /** true = 4px radius (default), false = 0px */\n rounded?: boolean;\n tooltip?: string;\n variant?: IconButtonVariant;\n /** Override accent color */\n accentColor?: string;\n /** Color when active=true */\n activeColor?: string;\n /** Shows active state */\n active?: boolean;\n // ─── DUI container props ─────────────────────────────────────────────────\n borderRadius?: DuiRadius | number;\n /** Text/icon color override */\n color?: string;\n}\n\nconst SIZE_PX: Record<IconButtonSize, string> = {\n default: '26px',\n sm: '22px',\n md: '28px',\n lg: '32px',\n xl: '36px',\n};\n\nexport function IconButtonView({\n icon,\n size = 'default',\n rounded = true,\n tooltip,\n variant = 'ghost',\n accentColor,\n activeColor,\n active = false,\n disabled,\n style,\n className = '',\n borderRadius,\n color,\n ...rest\n}: IconButtonViewProps) {\n const ctx = useDui();\n const dim = SIZE_PX[size] ?? SIZE_PX.default;\n const accent = accentColor || ctx.defaultColor || 'var(--color-primary)';\n const activeClr = activeColor || ctx.activeColor || accent;\n const resolvedRadius = rounded\n ? resolveBorderRadius(borderRadius ?? ctx.borderRadius, '4px')\n : '0px';\n const resolvedColor = color || ctx.color;\n\n const baseBg = variant === 'filled'\n ? (active ? activeClr : `color-mix(in srgb, ${accent} 12%, transparent)`)\n : (active ? `color-mix(in srgb, ${activeClr} 14%, transparent)` : 'transparent');\n\n const baseColor = variant === 'filled'\n ? (active ? 'var(--color-btn-primary-text, white)' : (resolvedColor || accent))\n : (active ? activeClr : (resolvedColor || (accentColor ? accent : 'var(--color-text-muted)')));\n\n const baseStyle: CSSProperties = {\n width: dim,\n height: dim,\n minWidth: dim,\n borderRadius: resolvedRadius,\n border: 'none',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n cursor: disabled ? 'default' : 'pointer',\n opacity: disabled ? 0.45 : 1,\n '--dui-icon-bg': baseBg,\n '--dui-icon-color': baseColor,\n '--dui-hover-bg': active\n ? `color-mix(in srgb, ${activeClr} 20%, transparent)`\n : 'var(--color-iconbtn-bg-hover, var(--color-surface-hover))',\n '--dui-hover-color': active ? activeClr : 'var(--color-text-primary)',\n ...style,\n } as CSSProperties;\n\n return (\n <button\n type=\"button\"\n title={tooltip}\n disabled={disabled}\n className={`dui_icon-button transition-all ${className}`}\n style={baseStyle}\n {...rest}\n >\n {icon}\n </button>\n );\n}\n","import { useRef, useState } from 'react';\nimport { ChevronDownIcon } from '../../../icons';\nimport type { ButtonVariant, ButtonSize } from './ButtonView';\nimport type { ContextMenuItem } from '../modal/ContextMenuView';\nimport { ContextMenuView } from '../modal/ContextMenuView';\nimport { useButtonBase } from '../../core/ButtonBase';\nimport './DropDownButtonView.css';\n\nexport interface DropDownButtonViewProps {\n label: string;\n /** Optional icon shown to the left of the label text */\n icon?: React.ReactNode;\n variant?: ButtonVariant;\n /** Falls back to DuiProvider size when omitted or 'default'. */\n size?: ButtonSize;\n rounded?: boolean;\n items: ContextMenuItem[];\n accentColor?: string;\n disabled?: boolean;\n onPrimaryClick?: () => void;\n className?: string;\n /** Dropdown alignment. 'right' keeps menu right-edge aligned with button (opens leftward). */\n align?: 'auto' | 'left' | 'right';\n}\n\nexport function DropDownButtonView({\n label,\n icon,\n variant = 'secondary',\n size = 'default',\n rounded = true,\n items,\n accentColor,\n disabled = false,\n onPrimaryClick,\n className = '',\n align = 'auto',\n}: DropDownButtonViewProps) {\n const [open, setOpen] = useState(false);\n const wrapperRef = useRef<HTMLDivElement>(null);\n const accent = accentColor || 'var(--color-primary)';\n const base = useButtonBase(size === 'default' ? undefined : size);\n const h = base.height;\n const text = base.fontSize;\n const px = base.paddingX;\n const radius = rounded ? base.borderRadius : '0px';\n\n const isPrimary = variant === 'primary';\n const isDanger = variant === 'danger';\n\n const baseColor = isPrimary ? 'var(--color-btn-primary-text, #fff)' : isDanger ? 'var(--color-btn-danger-text, #fff)' : 'var(--color-text-primary)';\n\n const wrapperBg = isPrimary ? accent\n : isDanger ? 'var(--color-error)'\n : variant === 'ghost' ? 'transparent'\n : 'var(--color-surface-hover)';\n\n const wrapperBorder = isPrimary || isDanger || variant === 'ghost'\n ? '1px solid transparent'\n : '1px solid var(--color-surface-border)';\n\n const hoverBtnBg = isPrimary || isDanger ? 'rgba(0,0,0,0.12)' : 'var(--color-surface-active)';\n\n return (\n <>\n <div\n ref={wrapperRef}\n className={`inline-flex items-center ${className}`}\n style={{\n height: h, borderRadius: radius, overflow: 'hidden',\n opacity: disabled ? 0.5 : 1,\n background: wrapperBg, border: wrapperBorder,\n color: baseColor, padding: 0,\n transition: 'background 120ms',\n '--dui-hover-btn-bg': hoverBtnBg,\n } as React.CSSProperties}\n >\n {/* Primary label side */}\n <button\n type=\"button\"\n disabled={disabled}\n onClick={onPrimaryClick}\n className=\"dui_dropdown-button__label\"\n style={{\n height: '100%',\n paddingLeft: px, paddingRight: '8px',\n display: 'flex', alignItems: 'center', gap: base.gap,\n fontSize: text, fontWeight: 500,\n border: 'none', color: 'inherit',\n cursor: disabled ? 'default' : 'pointer', fontFamily: 'inherit',\n }}\n >\n {icon && (\n <span style={{ display: 'flex', alignItems: 'center', flexShrink: 0 }}>\n {icon}\n </span>\n )}\n {label}\n </button>\n\n {/* Divider */}\n <div style={{\n width: '1px', height: '60%',\n background: isPrimary || isDanger ? 'rgba(255,255,255,.25)' : 'var(--color-surface-border)',\n }} />\n\n {/* Chevron dropdown side */}\n <button\n type=\"button\"\n disabled={disabled}\n onClick={() => !disabled && setOpen(v => !v)}\n className=\"dui_dropdown-button__chevron\"\n style={{\n height: '100%', paddingLeft: '6px', paddingRight: '7px',\n display: 'flex', alignItems: 'center',\n border: 'none', color: 'inherit',\n cursor: disabled ? 'default' : 'pointer',\n }}\n >\n <ChevronDownIcon size={10} style={{ transition: 'transform 140ms', transform: open ? 'rotate(180deg)' : 'rotate(0deg)' }} />\n </button>\n </div>\n\n <ContextMenuView\n items={items}\n anchorEl={wrapperRef.current}\n open={open}\n onClose={() => setOpen(false)}\n rounded={rounded}\n matchAnchorWidth={false}\n width=\"md\"\n align={align}\n />\n </>\n );\n}\n","import { forwardRef, useState, type InputHTMLAttributes, type ReactNode } from 'react';\nimport type { DuiSize, DuiRadius, DuiWidth, DuiFontStyle } from '../../core/DuiTypes';\nimport { useInputBase } from '../../core/InputBase';\nimport { EyeIcon, EyeOffIcon } from '../../../icons';\n\n/** `'default'` is kept for backwards-compat and resolves to context size. */\nexport type TextInputSize = 'default' | DuiSize;\n\nexport interface TextInputViewProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'size'> {\n size?: TextInputSize;\n /** true = token border-radius (default), false = 0px square */\n rounded?: boolean;\n /** Override focus border / ring color (CSS var or raw) */\n accentColor?: string;\n /** Red border state */\n error?: boolean;\n /** Icon rendered inside the left edge (alias: prefixIcon) */\n iconLeft?: ReactNode;\n /** Icon rendered inside the right edge (alias: suffixIcon). Ignored when masked=true. */\n iconRight?: ReactNode;\n /** Alias for iconLeft */\n prefixIcon?: ReactNode;\n /** Alias for iconRight. Ignored when masked=true. */\n suffixIcon?: ReactNode;\n /** When true, value is hidden (type=password) with an eye toggle button on the right */\n masked?: boolean;\n /** Custom icons for the masked toggle. Defaults to EyeOffIcon (hidden) / EyeIcon (shown). */\n maskIcon?: { hidden?: ReactNode; shown?: ReactNode };\n /** When true: no border, transparent bg, no focus ring — for embedding inside containers that supply their own chrome */\n naked?: boolean;\n // ─── DUI container props ────────────────────────────────────────────────────\n width?: DuiWidth;\n borderRadius?: DuiRadius | number;\n /** Text color override */\n color?: string;\n fontStyle?: DuiFontStyle;\n}\n\nexport const TextInputView = forwardRef<HTMLInputElement, TextInputViewProps>(\n function TextInputView(\n { size = 'default', rounded = true, accentColor, error = false,\n iconLeft, iconRight, prefixIcon, suffixIcon,\n masked = false, maskIcon,\n naked = false,\n style, className = '', onFocus, onBlur, type,\n width, borderRadius, color, fontStyle,\n ...rest },\n ref\n ) {\n const [focused, setFocused] = useState(false);\n const [showMasked, setShowMasked] = useState(false);\n const base = useInputBase(size === 'default' ? undefined : size, { width, borderRadius, color, fontStyle });\n const accent = accentColor || 'var(--color-primary)';\n const radius = rounded ? base.borderRadius : '0px';\n\n const effectiveLeft = prefixIcon ?? iconLeft;\n const effectiveRight = masked ? null : (suffixIcon ?? iconRight);\n\n const borderColor = error\n ? 'var(--color-error)'\n : focused\n ? accent\n : 'var(--color-input-border)';\n\n const containerStyle: React.CSSProperties = naked\n ? {\n display: 'inline-flex',\n alignItems: 'center',\n height: base.height,\n width: base.width !== 'auto' ? base.width : undefined,\n border: 'none',\n // When naked + error: red bottom underline so the error state is visible\n borderBottom: error ? '1px solid color-mix(in srgb, var(--color-error) 60%, transparent)' : 'none',\n background: 'transparent',\n boxShadow: 'none',\n overflow: 'hidden',\n ...style,\n }\n : {\n display: 'inline-flex',\n alignItems: 'center',\n height: base.height,\n width: base.width !== 'auto' ? base.width : undefined,\n borderRadius: radius,\n border: `1px solid ${borderColor}`,\n background: 'var(--color-input-bg)',\n transition: 'border-color 140ms, box-shadow 140ms',\n boxShadow: focused ? `0 0 0 2px color-mix(in srgb, ${accent} 20%, transparent)` : 'none',\n overflow: 'hidden',\n ...style,\n };\n\n const inputType = masked ? (showMasked ? 'text' : 'password') : (type ?? 'text');\n\n const toggleIcon = showMasked\n ? (maskIcon?.shown ?? <EyeIcon size={14} />)\n : (maskIcon?.hidden ?? <EyeOffIcon size={14} />);\n\n return (\n <div style={containerStyle} className={className}>\n {effectiveLeft && (\n <span style={{ paddingLeft: base.paddingX, display: 'flex', alignItems: 'center', color: (naked && error) ? 'var(--color-error)' : 'var(--color-text-muted)', flexShrink: 0, transition: 'color 140ms' }}>\n {effectiveLeft}\n </span>\n )}\n <input\n ref={ref}\n type={inputType}\n style={{\n flex: 1,\n height: '100%',\n paddingLeft: effectiveLeft ? '6px' : base.paddingX,\n paddingRight: (masked || effectiveRight) ? '6px' : base.paddingX,\n fontSize: base.fontSize,\n background: 'transparent',\n border: 'none',\n outline: 'none',\n color: (naked && error) ? 'var(--color-error)' : (base.color || 'var(--color-text-primary)'),\n fontStyle: base.fontStyle,\n minWidth: 0,\n fontFamily: 'inherit',\n caretColor: (naked && error) ? 'var(--color-error)' : undefined,\n }}\n onFocus={e => { setFocused(true); onFocus?.(e); }}\n onBlur={e => { setFocused(false); onBlur?.(e); }}\n {...rest}\n />\n {effectiveRight && (\n <span style={{ paddingRight: base.paddingX, display: 'flex', alignItems: 'center', color: 'var(--color-text-muted)', flexShrink: 0 }}>\n {effectiveRight}\n </span>\n )}\n {masked && (\n <button\n type=\"button\"\n onClick={() => setShowMasked(s => !s)}\n style={{\n paddingRight: base.paddingX,\n display: 'flex',\n alignItems: 'center',\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n color: 'var(--color-text-muted)',\n flexShrink: 0,\n }}\n onMouseEnter={e => (e.currentTarget.style.color = 'var(--color-text-primary)')}\n onMouseLeave={e => (e.currentTarget.style.color = '')}\n title={showMasked ? 'Hide value' : 'Show value'}\n >\n {toggleIcon}\n </button>\n )}\n </div>\n );\n }\n);\n","import { forwardRef, useState, type TextareaHTMLAttributes } from 'react';\nimport type { DuiSize, DuiRadius, DuiWidth } from '../../core/DuiTypes';\nimport { useInputBase } from '../../core/InputBase';\n\nexport interface MultilineInputViewProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n size?: 'default' | DuiSize;\n rounded?: boolean;\n accentColor?: string;\n error?: boolean;\n /** Number of visible rows (default: 4) */\n rows?: number;\n /** Allow manual resize: 'none' | 'vertical' | 'both' (default: 'none') */\n resize?: 'none' | 'vertical' | 'both';\n width?: DuiWidth;\n borderRadius?: DuiRadius | number;\n}\n\nexport const MultilineInputView = forwardRef<HTMLTextAreaElement, MultilineInputViewProps>(\n function MultilineInputView(\n {\n size = 'default',\n rounded = true,\n accentColor,\n error = false,\n rows = 4,\n resize = 'none',\n style,\n className = '',\n onFocus,\n onBlur,\n width,\n borderRadius,\n ...rest\n },\n ref\n ) {\n const [focused, setFocused] = useState(false);\n const base = useInputBase(size === 'default' ? undefined : size, { width, borderRadius });\n const accent = accentColor || 'var(--color-primary)';\n const radius = rounded ? base.borderRadius : '0px';\n\n const borderColor = error\n ? 'var(--color-error)'\n : focused\n ? accent\n : 'var(--color-input-border)';\n\n return (\n <textarea\n ref={ref}\n rows={rows}\n style={{\n width: base.width !== 'auto' ? base.width : '100%',\n padding: `${parseInt(base.paddingX) > 0 ? '8px' : '6px'} ${base.paddingX}`,\n fontSize: base.fontSize,\n fontFamily: 'inherit',\n borderRadius: radius,\n border: `1px solid ${borderColor}`,\n background: 'var(--color-input-bg)',\n color: 'var(--color-text-primary)',\n outline: 'none',\n resize,\n transition: 'border-color 140ms, box-shadow 140ms',\n boxShadow: focused ? `0 0 0 2px color-mix(in srgb, ${accent} 20%, transparent)` : 'none',\n lineHeight: 1.5,\n ...style,\n }}\n className={className}\n onFocus={e => { setFocused(true); onFocus?.(e); }}\n onBlur={e => { setFocused(false); onBlur?.(e); }}\n {...rest}\n />\n );\n }\n);\n","import { useState, useRef, useEffect, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\nimport { DropdownArrowIcon } from '../../../icons';\nimport type { DuiSize, DuiRadius, DuiWidth } from '../../core/DuiTypes';\nimport { useSelectBase } from '../../core/SelectBase';\nimport './SelectInputView.css';\n\nexport interface SelectOption {\n value: string;\n label: string;\n icon?: React.ReactNode;\n color?: string;\n isHeader?: boolean;\n /** Colored pill chip rendered before the label — { label: 'TS', color: 'var(--color-primary)' } */\n badge?: { label: string; color: string };\n}\n\n/** Backward-compatible size alias — accepts all DuiSize values plus legacy \"default\" (maps to \"md\"). */\nexport type SelectInputSize = DuiSize | 'default';\n\nexport interface SelectInputViewProps {\n options: SelectOption[];\n value: string;\n onChange: (value: string) => void;\n size?: SelectInputSize;\n /** true = size-derived radius (default), false = 0px */\n rounded?: boolean;\n placeholder?: string;\n accentColor?: string;\n disabled?: boolean;\n className?: string;\n style?: React.CSSProperties;\n width?: string | number;\n borderRadius?: DuiRadius | number;\n}\n\nfunction resolveSelectSize(size: SelectInputSize): DuiSize {\n return size === 'default' ? 'md' : size;\n}\n\nfunction BadgeChip({ label, color }: { label: string; color: string }) {\n return (\n <span\n style={{\n fontSize: '8px',\n fontWeight: 700,\n padding: '1px 4px',\n borderRadius: '3px',\n lineHeight: 1,\n flexShrink: 0,\n letterSpacing: '0.03em',\n backgroundColor: `color-mix(in srgb, ${color} 15%, transparent)`,\n color,\n }}\n >\n {label}\n </span>\n );\n}\n\nexport function SelectInputView({\n options,\n value,\n onChange,\n size = 'default',\n rounded = true,\n placeholder,\n accentColor,\n disabled = false,\n className = '',\n style,\n width,\n borderRadius,\n}: SelectInputViewProps) {\n const [open, setOpen] = useState(false);\n const [focused, setFocused] = useState(false);\n const triggerRef = useRef<HTMLButtonElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n\n const duiSize = resolveSelectSize(size);\n const base = useSelectBase(duiSize, { borderRadius });\n\n const accent = accentColor || 'var(--color-primary)';\n const radius = rounded ? base.borderRadius : '0px';\n const selected = options.find(o => o.value === value && !o.isHeader);\n\n // Portal positioning — re-run on scroll/resize to stay glued to trigger\n useEffect(() => {\n if (!open || !triggerRef.current || !menuRef.current) return;\n const trigger = triggerRef.current;\n const menu = menuRef.current;\n const position = () => {\n const r = trigger.getBoundingClientRect();\n const M = 8; // viewport margin\n menu.style.minWidth = r.width + 'px';\n\n // ── Vertical: flip up when there isn't room below ──\n const menuH = menu.scrollHeight || 200;\n const spaceBelow = window.innerHeight - r.bottom;\n if (spaceBelow < menuH + 12 && r.top > menuH + 12) {\n menu.style.top = (r.top - menuH - 4) + 'px';\n } else {\n menu.style.top = (r.bottom + 4) + 'px';\n }\n\n // ── Horizontal: draw left→right, but flip to right→left (align the menu's\n // right edge to the trigger) when it would overflow the viewport. Falls\n // back to clamping inside the viewport for very wide menus. ──\n const menuW = Math.max(menu.offsetWidth, r.width);\n let left = r.left; // default: left-aligned\n if (left + menuW > window.innerWidth - M) {\n left = r.right - menuW; // right-aligned (right→left)\n }\n left = Math.min(left, window.innerWidth - menuW - M);\n left = Math.max(M, left); // never off the left edge\n menu.style.left = left + 'px';\n };\n position();\n const raf = requestAnimationFrame(position);\n window.addEventListener('scroll', position, { passive: true, capture: true });\n window.addEventListener('resize', position, { passive: true });\n return () => {\n cancelAnimationFrame(raf);\n window.removeEventListener('scroll', position, { capture: true });\n window.removeEventListener('resize', position);\n };\n }, [open]);\n\n useEffect(() => {\n if (!open) return;\n const handler = (e: MouseEvent) => {\n if (triggerRef.current?.contains(e.target as Node)) return;\n if (menuRef.current?.contains(e.target as Node)) return;\n setOpen(false);\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [open]);\n\n const handleSelect = useCallback((v: string) => {\n onChange(v);\n setOpen(false);\n }, [onChange]);\n\n const handleKey = (e: React.KeyboardEvent) => {\n if (disabled) return;\n if (!open) {\n if (e.key === 'Enter' || e.key === ' ' || e.key === 'ArrowDown') { e.preventDefault(); setOpen(true); }\n return;\n }\n const idx = options.filter(o => !o.isHeader).findIndex(o => o.value === value);\n const items = options.filter(o => !o.isHeader);\n switch (e.key) {\n case 'ArrowDown': e.preventDefault(); handleSelect(items[(idx + 1) % items.length].value); break;\n case 'ArrowUp': e.preventDefault(); handleSelect(items[(idx - 1 + items.length) % items.length].value); break;\n case 'Escape': setOpen(false); break;\n }\n };\n\n const borderColor = open || focused ? accent : 'var(--color-input-border)';\n const boxShadow = (open || focused) ? `0 0 0 2px color-mix(in srgb, ${accent} 20%, transparent)` : 'none';\n\n return (\n <div\n className={`relative inline-block ${className}`}\n style={{ width, ...style }}\n onKeyDown={handleKey}\n >\n <button\n ref={triggerRef}\n type=\"button\"\n disabled={disabled}\n onFocus={() => setFocused(true)}\n onBlur={() => setFocused(false)}\n onClick={() => !disabled && setOpen(o => !o)}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: base.gap,\n width: '100%',\n height: base.height,\n paddingLeft: base.paddingX,\n paddingRight: base.paddingX,\n fontSize: base.fontSize,\n background: 'var(--color-input-bg)',\n border: `1px solid ${borderColor}`,\n borderRadius: radius,\n color: selected ? 'var(--color-text-primary)' : 'var(--color-text-muted)',\n cursor: disabled ? 'default' : 'pointer',\n transition: 'border-color 140ms, box-shadow 140ms',\n boxShadow,\n opacity: disabled ? 0.5 : 1,\n fontFamily: 'inherit',\n fontWeight: 500,\n textAlign: 'left',\n }}\n aria-haspopup=\"listbox\"\n aria-expanded={open}\n >\n {/* Badge chip takes priority over icon in trigger */}\n {selected?.badge && !selected?.icon && (\n <BadgeChip label={selected.badge.label} color={selected.badge.color} />\n )}\n {selected?.icon && <span style={{ display: 'flex', alignItems: 'center', flexShrink: 0 }}>{selected.icon}</span>}\n <span style={{ flex: 1, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', color: selected?.color }}>\n {selected?.label ?? placeholder ?? value}\n </span>\n <DropdownArrowIcon\n size={base.iconSize - 2}\n style={{ flexShrink: 0, transition: 'transform 140ms', transform: open ? 'rotate(180deg)' : 'rotate(0deg)', color: open ? accent : 'var(--color-text-muted)' }}\n />\n </button>\n\n {open && createPortal(\n <div\n ref={menuRef}\n role=\"listbox\"\n className=\"dui_select__menu\"\n style={{\n position: 'fixed',\n zIndex: 99999,\n minWidth: '100%',\n width: 'max-content',\n maxHeight: 'min(380px, 70vh)',\n overflowY: 'auto',\n background: 'var(--color-surface-bg, var(--color-elevated))',\n border: `1px solid var(--color-surface-border)`,\n borderRadius: rounded ? '7px' : '0px',\n padding: '4px',\n boxShadow: '0 12px 40px rgba(0,0,0,.35)',\n '--dui-select-accent': accent,\n } as React.CSSProperties}\n >\n {options.map((opt, i) => {\n if (opt.isHeader) {\n return (\n <div key={`${opt.value}-${i}`}>\n {/* Auto-divider before every group header except the first */}\n {i > 0 && (\n <div style={{ height: '1px', background: 'var(--color-surface-border)', margin: '3px 4px' }} />\n )}\n <div style={{ padding: `5px ${base.paddingX} 3px`, fontSize: '9px', fontWeight: 700, textTransform: 'uppercase', letterSpacing: '0.06em', color: 'var(--color-text-muted)', userSelect: 'none' }}>\n {opt.label}\n </div>\n </div>\n );\n }\n return (\n <div\n key={opt.value}\n role=\"option\"\n aria-selected={opt.value === value}\n onClick={() => handleSelect(opt.value)}\n className={`dui_select__option${opt.value === value ? ' dui_select__option--selected' : ''}`}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: base.gap,\n padding: `${base.itemPy} ${base.paddingX}`,\n marginBottom: '2px',\n borderRadius: rounded ? '5px' : '0px',\n fontSize: base.fontSize,\n fontWeight: 500,\n color: opt.value === value ? (accentColor || 'var(--color-primary-light)') : (opt.color || 'var(--color-text-secondary)'),\n cursor: 'pointer',\n }}\n >\n {opt.badge && !opt.icon && (\n <BadgeChip label={opt.badge.label} color={opt.badge.color} />\n )}\n {opt.icon && <span style={{ display: 'flex', alignItems: 'center', flexShrink: 0 }}>{opt.icon}</span>}\n <span>{opt.label}</span>\n </div>\n );\n })}\n </div>,\n document.body\n )}\n </div>\n );\n}\n","import { useState, useRef, useEffect, useMemo } from 'react';\nimport { createPortal } from 'react-dom';\nimport { DropdownArrowIcon, CheckIcon, SearchIcon, ServerIcon } from '../../../icons';\nimport type { DuiSize, DuiRadius, DuiWidth, DuiFontStyle } from '../../core/DuiTypes';\nimport { useInputBase } from '../../core/InputBase';\nimport { useDui } from '../../core/DuiContext';\nimport './SelectTextInputView.css';\n\nexport interface SelectTextOption {\n value: string;\n label: string;\n /** Accent color for this option — e.g. HTTP methods */\n color?: string;\n}\n\n/** Running mock server entry — shown at top of suggestions with server icon */\nexport interface MockServerSuggestion {\n url: string;\n name: string;\n}\n\nexport interface SelectTextInputViewProps {\n selectValue: string;\n selectOptions: SelectTextOption[];\n onSelectChange: (value: string) => void;\n inputValue: string;\n onInputChange: (value: string) => void;\n placeholder?: string;\n /** Falls back to DuiProvider size when omitted. */\n size?: DuiSize;\n disabled?: boolean;\n /** Accent border color on focus */\n accentColor?: string;\n /** Override the select section width in px */\n selectWidth?: number;\n /** URL / text autocomplete suggestions */\n suggestions?: string[];\n /** Running mock server URLs — shown at the top with a server icon */\n mockServers?: MockServerSuggestion[];\n /** Called when user picks a mock server entry (in addition to onInputChange) */\n onMockServerSelect?: (url: string) => void;\n onKeyDown?: (e: React.KeyboardEvent<HTMLInputElement>) => void;\n /** Minimum width (px) for the suggestions dropdown — useful when the input is narrow */\n suggestionMinWidth?: number;\n /** z-index for the suggestions dropdown portal (default: 9998) */\n suggestionZIndex?: number;\n // ─── DUI container props ──────────────────────────────────────────────────\n width?: DuiWidth;\n borderRadius?: DuiRadius | number;\n color?: string;\n fontStyle?: DuiFontStyle;\n className?: string;\n}\n\n/** Select section width per size — sized to fit longest HTTP method label (\"OPTIONS\") */\nconst SELECT_WIDTH: Record<DuiSize, number> = {\n xxs: 44, xs: 52, sm: 64, md: 80, lg: 96, xl: 112, xxl: 128, xxxl: 148,\n};\n\nexport function SelectTextInputView({\n selectValue,\n selectOptions,\n onSelectChange,\n inputValue,\n onInputChange,\n placeholder = 'Enter URL or paste text',\n size,\n disabled = false,\n accentColor,\n selectWidth,\n suggestions = [],\n mockServers = [],\n onMockServerSelect,\n onKeyDown,\n suggestionMinWidth,\n suggestionZIndex = 9998,\n width,\n borderRadius,\n color,\n fontStyle,\n className = '',\n}: SelectTextInputViewProps) {\n const ctx = useDui();\n const resolvedSize: DuiSize = size ?? ctx.size;\n const base = useInputBase(size, { width, borderRadius, color, fontStyle });\n const selWidth = selectWidth ?? SELECT_WIDTH[resolvedSize];\n const accent = accentColor ?? 'var(--color-primary)';\n\n const [methodOpen, setMethodOpen] = useState(false);\n const [focused, setFocused] = useState(false);\n const [showSuggestions, setShowSuggestions] = useState(false);\n const [highlightedIdx, setHighlightedIdx] = useState(-1);\n\n const wrapperRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const suppressRef = useRef(false);\n const [methodDropPos, setMethodDropPos] = useState({ top: 0, left: 0, width: 0 });\n const [suggDropPos, setSuggDropPos] = useState({ top: 0, left: 0, width: 0 });\n\n const selectedOpt = selectOptions.find(o => o.value === selectValue);\n const selectColor = selectedOpt?.color ?? 'var(--color-text-primary)';\n\n // ── Filtered suggestions ──────────────────────────────────────────────────\n\n const filteredSuggestions = useMemo(() => {\n if (!suggestions.length) return [];\n if (!inputValue.trim()) return [...new Set(suggestions)].slice(0, 8);\n const lower = inputValue.toLowerCase();\n return [...new Set(suggestions.filter(s => s.toLowerCase().includes(lower) && s !== inputValue))].slice(0, 8);\n }, [inputValue, suggestions]);\n\n const filteredMockServers = useMemo(() => {\n if (!mockServers.length) return [];\n if (!inputValue.trim()) return mockServers.slice(0, 8);\n const lower = inputValue.toLowerCase();\n return mockServers.filter(s => s.url.toLowerCase().includes(lower) || s.name.toLowerCase().includes(lower)).slice(0, 8);\n }, [inputValue, mockServers]);\n\n // ── Method dropdown ────────────────────────────────────────────────────────\n\n const openMethodDropdown = () => {\n if (disabled) return;\n const el = triggerRef.current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n setMethodDropPos({ top: rect.bottom + 4, left: rect.left, width: Math.max(rect.width, 120) });\n setMethodOpen(v => !v);\n };\n\n useEffect(() => {\n if (!methodOpen) return;\n const handler = (e: MouseEvent) => {\n const t = e.target as HTMLElement;\n if (!t.closest('[data-stiv-method]') && !t.closest('[data-stiv-trigger]')) setMethodOpen(false);\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [methodOpen]);\n\n // Keep method dropdown glued to trigger on scroll/resize\n useEffect(() => {\n if (!methodOpen) return;\n const track = () => {\n const el = triggerRef.current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n setMethodDropPos({ top: rect.bottom + 4, left: rect.left, width: Math.max(rect.width, 120) });\n };\n window.addEventListener('scroll', track, { passive: true, capture: true });\n window.addEventListener('resize', track, { passive: true });\n return () => {\n window.removeEventListener('scroll', track, { capture: true });\n window.removeEventListener('resize', track);\n };\n }, [methodOpen]);\n\n // ── Suggestions dropdown ────────────────────────────────────────────────────\n\n useEffect(() => {\n // Suppress reopening immediately after user selects a suggestion\n if (suppressRef.current) return;\n if ((filteredSuggestions.length > 0 || filteredMockServers.length > 0) && focused) {\n const el = inputRef.current;\n if (el) {\n const rect = el.getBoundingClientRect();\n setSuggDropPos({ top: rect.bottom + 4, left: rect.left, width: Math.max(rect.width, suggestionMinWidth ?? 0) });\n }\n setShowSuggestions(true);\n setHighlightedIdx(-1);\n } else {\n setShowSuggestions(false);\n }\n }, [filteredSuggestions, filteredMockServers, focused]);\n\n // Keep suggestions dropdown glued to input on scroll/resize\n useEffect(() => {\n if (!showSuggestions) return;\n const track = () => {\n const el = inputRef.current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n setSuggDropPos({ top: rect.bottom + 4, left: rect.left, width: Math.max(rect.width, suggestionMinWidth ?? 0) });\n };\n window.addEventListener('scroll', track, { passive: true, capture: true });\n window.addEventListener('resize', track, { passive: true });\n return () => {\n window.removeEventListener('scroll', track, { capture: true });\n window.removeEventListener('resize', track);\n };\n }, [showSuggestions]);\n\n const handleMockSelect = (url: string) => {\n handleSuggestionSelect(url);\n onMockServerSelect?.(url);\n };\n\n const handleSuggestionSelect = (val: string) => {\n suppressRef.current = true;\n onInputChange(val);\n setShowSuggestions(false);\n setHighlightedIdx(-1);\n inputRef.current?.focus();\n // Reset after one event-loop tick — long enough for the effect to have run\n setTimeout(() => { suppressRef.current = false; }, 150);\n };\n\n const allItems = useMemo(() => [\n ...filteredMockServers.map(s => s.url),\n ...filteredSuggestions,\n ], [filteredMockServers, filteredSuggestions]);\n\n const handleInputKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (showSuggestions && allItems.length > 0) {\n if (e.key === 'ArrowDown') { e.preventDefault(); setHighlightedIdx(i => Math.min(i + 1, allItems.length - 1)); return; }\n if (e.key === 'ArrowUp') { e.preventDefault(); setHighlightedIdx(i => Math.max(i - 1, -1)); return; }\n if (e.key === 'Enter' && highlightedIdx >= 0) { e.preventDefault(); handleSuggestionSelect(allItems[highlightedIdx]); return; }\n if (e.key === 'Escape') { setShowSuggestions(false); setHighlightedIdx(-1); return; }\n }\n onKeyDown?.(e);\n };\n\n const borderColor = focused || methodOpen ? accent : 'var(--color-input-border)';\n\n return (\n <>\n <div\n ref={wrapperRef}\n className={className}\n style={{\n display: 'flex',\n height: base.height,\n width: base.width,\n border: `1px solid ${borderColor}`,\n borderRadius: base.borderRadius,\n background: 'var(--color-input-bg)',\n opacity: disabled ? 0.5 : 1,\n transition: 'border-color 120ms',\n overflow: 'visible',\n position: 'relative',\n }}\n >\n {/* Select trigger */}\n <div\n ref={triggerRef}\n data-stiv-trigger\n onClick={openMethodDropdown}\n className={`dui_select-text__trigger${disabled ? ' dui_select-text__trigger--disabled' : ''}`}\n style={{\n display: 'flex', alignItems: 'center', gap: base.gap,\n padding: `0 ${base.paddingX}`,\n width: selWidth,\n flexShrink: 0,\n cursor: disabled ? 'not-allowed' : 'pointer',\n userSelect: 'none',\n color: selectColor,\n fontWeight: 700,\n fontSize: base.fontSize,\n letterSpacing: '0.02em',\n borderRadius: `calc(${base.borderRadius} - 1px) 0 0 calc(${base.borderRadius} - 1px)`,\n }}\n >\n <span style={{ flex: 1, whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }}>\n {selectedOpt?.label ?? selectValue}\n </span>\n <DropdownArrowIcon\n size={base.iconSize - 2}\n style={{\n flexShrink: 0,\n color: 'var(--color-text-muted)',\n transform: methodOpen ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 150ms ease',\n }}\n />\n </div>\n\n {/* Divider */}\n <div style={{ width: 1, alignSelf: 'stretch', background: 'var(--color-input-border)', flexShrink: 0, margin: '4px 0' }} />\n\n {/* URL text input */}\n <input\n ref={inputRef}\n value={inputValue}\n onChange={e => onInputChange(e.target.value)}\n placeholder={placeholder}\n disabled={disabled}\n onFocus={() => setFocused(true)}\n onBlur={() => setTimeout(() => setFocused(false), 120)}\n onKeyDown={handleInputKeyDown}\n style={{\n flex: 1, height: '100%', padding: `0 ${base.paddingX}`,\n border: 'none', outline: 'none', background: 'transparent',\n fontSize: base.fontSize,\n color: base.color ?? 'var(--color-text-primary)',\n fontFamily: 'inherit',\n fontStyle: base.fontStyle,\n }}\n />\n </div>\n\n {/* Method dropdown portal */}\n {methodOpen && createPortal(\n <div\n data-stiv-method\n style={{\n position: 'fixed', top: methodDropPos.top, left: methodDropPos.left,\n minWidth: methodDropPos.width,\n background: 'var(--color-surface)',\n border: '1px solid var(--color-surface-border)',\n borderRadius: 8,\n boxShadow: '0 8px 24px rgba(0,0,0,0.22)',\n zIndex: 9999, padding: 3, overflow: 'hidden',\n '--dui-stiv-accent': accent,\n } as React.CSSProperties}\n >\n {selectOptions.map(opt => {\n const isSelected = opt.value === selectValue;\n return (\n <div\n key={opt.value}\n onMouseDown={e => { e.preventDefault(); onSelectChange(opt.value); setMethodOpen(false); }}\n className={`dui_select-text__option${isSelected ? ' dui_select-text__option--selected' : ''}`}\n style={{\n display: 'flex', alignItems: 'center', gap: 8,\n padding: `6px ${base.paddingX}`,\n marginBottom: '2px',\n borderRadius: 5, cursor: 'pointer',\n fontSize: base.fontSize, fontWeight: isSelected ? 700 : 500,\n color: opt.color ?? 'var(--color-text-primary)',\n }}\n >\n <span style={{ flex: 1 }}>{opt.label ?? opt.value}</span>\n {isSelected && <CheckIcon size={base.iconSize - 2} style={{ color: 'var(--color-primary)', flexShrink: 0 }} />}\n </div>\n );\n })}\n </div>,\n document.body\n )}\n\n {/* Suggestions autocomplete portal */}\n {showSuggestions && (filteredSuggestions.length > 0 || filteredMockServers.length > 0) && createPortal(\n <div\n data-stiv-suggestions\n style={{\n position: 'fixed', top: suggDropPos.top, left: suggDropPos.left, width: suggDropPos.width,\n background: 'var(--color-surface)',\n border: '1px solid var(--color-surface-border)',\n borderRadius: 8,\n boxShadow: '0 8px 24px rgba(0,0,0,0.22)',\n zIndex: suggestionZIndex, padding: 3, overflow: 'hidden',\n '--dui-stiv-accent': accent,\n } as React.CSSProperties}\n >\n {/* Mock server suggestions — shown at top */}\n {filteredMockServers.length > 0 && (\n <>\n <div style={{ padding: '4px 10px 6px', borderBottom: '1px solid var(--color-surface-border)' }}>\n <p style={{ fontSize: '9.5px', fontWeight: 700, letterSpacing: '0.08em', textTransform: 'uppercase', color: 'var(--color-text-muted)' }}>\n Mock Servers\n </p>\n </div>\n <div style={{ padding: '4px 3px 3px' }}>\n {filteredMockServers.map((s, i) => (\n <div\n key={s.url}\n onMouseDown={e => { e.preventDefault(); handleMockSelect(s.url); }}\n onMouseEnter={() => setHighlightedIdx(i)}\n onMouseLeave={() => setHighlightedIdx(-1)}\n className={`dui-stiv-sugg-item${i === highlightedIdx ? ' dui-stiv-sugg-item--active' : ''}`}\n style={{ '--dui-stiv-accent': 'var(--color-mock-server)' } as React.CSSProperties}\n >\n <ServerIcon size={14} style={{ color: 'var(--color-mock-server)', flexShrink: 0 }} />\n <span style={{ flex: 1, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', fontFamily: 'monospace', color: 'var(--color-mock-server)' }}>\n {s.url}\n </span>\n <span style={{ fontSize: '10px', color: 'var(--color-text-muted)', flexShrink: 0 }}>\n {s.name}\n </span>\n </div>\n ))}\n </div>\n </>\n )}\n\n {/* URL history suggestions */}\n {filteredSuggestions.length > 0 && (\n <>\n <div style={{ padding: '4px 10px 6px', borderBottom: '1px solid var(--color-surface-border)', marginTop: filteredMockServers.length > 0 ? 4 : 0 }}>\n <p style={{ fontSize: '9.5px', fontWeight: 700, letterSpacing: '0.08em', textTransform: 'uppercase', color: 'var(--color-text-muted)' }}>\n Suggestions\n </p>\n </div>\n <div style={{ padding: '4px 3px 3px' }}>\n {filteredSuggestions.map((s, i) => {\n const globalIdx = filteredMockServers.length + i;\n return (\n <div\n key={s}\n onMouseDown={e => { e.preventDefault(); handleSuggestionSelect(s); }}\n onMouseEnter={() => setHighlightedIdx(globalIdx)}\n onMouseLeave={() => setHighlightedIdx(-1)}\n className={`dui-stiv-sugg-item${globalIdx === highlightedIdx ? ' dui-stiv-sugg-item--active' : ''}`}\n >\n <SearchIcon size={14} style={{ color: 'var(--color-text-muted)', flexShrink: 0 }} />\n <span style={{ flex: 1, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', fontFamily: 'monospace' }}>\n {s}\n </span>\n </div>\n );\n })}\n </div>\n </>\n )}\n </div>,\n document.body\n )}\n </>\n );\n}\n","/**\n * SegmentedControlView — industry-standard segmented control (toggle group).\n * Named after Mantine's SegmentedControl / iOS UISegmentedControl.\n *\n * Uses DUI TabBase for sizing so heights match SelectInputView and ButtonView at every size.\n */\nimport { useRef, useEffect, useState, type ReactNode } from 'react';\nimport type { DuiSize } from '../../core/DuiTypes';\nimport { useTabBase } from '../../core/TabBase';\n\nexport interface SegmentedControlOption {\n value: string;\n label: string;\n icon?: ReactNode;\n disabled?: boolean;\n}\n\nexport interface SegmentedControlViewProps {\n options: SegmentedControlOption[];\n value: string;\n onChange: (value: string) => void;\n size?: DuiSize;\n /** Accent color for the active segment indicator and text */\n accentColor?: string;\n /** Stretch to fill container width */\n fullWidth?: boolean;\n}\n\n/**\n * Segmented control with a sliding animated indicator.\n * Active segment text color shifts to accentColor; inactive stays text-secondary.\n */\nexport function SegmentedControlView({\n options,\n value,\n onChange,\n size,\n accentColor = 'var(--color-primary)',\n fullWidth,\n}: SegmentedControlViewProps) {\n const base = useTabBase(size);\n const containerRef = useRef<HTMLDivElement>(null);\n const [indicator, setIndicator] = useState<{ left: number; width: number }>({ left: 0, width: 0 });\n\n const activeIdx = options.findIndex(o => o.value === value);\n\n // Measure the active button after every value/options change\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n const btns = container.querySelectorAll<HTMLButtonElement>('button[data-seg]');\n const btn = btns[activeIdx];\n if (!btn) return;\n setIndicator({ left: btn.offsetLeft, width: btn.offsetWidth });\n }, [value, activeIdx, options.length]);\n\n const TRACK_PADDING = 2;\n const trackBr = `calc(${base.borderRadius} + ${TRACK_PADDING}px)`;\n\n return (\n <div\n ref={containerRef}\n style={{\n display: 'inline-flex',\n position: 'relative',\n height: base.height,\n padding: TRACK_PADDING,\n borderRadius: trackBr,\n backgroundColor: 'var(--color-pilltab-track-bg, var(--color-surface))',\n border: '1px solid var(--color-surface-border)',\n width: fullWidth ? '100%' : undefined,\n boxSizing: 'border-box',\n flexShrink: 0,\n }}\n >\n {/* Sliding indicator */}\n {indicator.width > 0 && (\n <div\n aria-hidden=\"true\"\n style={{\n position: 'absolute',\n top: TRACK_PADDING,\n left: indicator.left,\n width: indicator.width,\n height: `calc(100% - ${TRACK_PADDING * 2}px)`,\n borderRadius: base.borderRadius,\n backgroundColor: `color-mix(in srgb, ${accentColor} 12%, transparent)`,\n border: `1px solid color-mix(in srgb, ${accentColor} 28%, transparent)`,\n transition: 'left 0.14s ease, width 0.14s ease',\n pointerEvents: 'none',\n }}\n />\n )}\n\n {options.map((opt) => {\n const isActive = opt.value === value;\n return (\n <button\n key={opt.value}\n data-seg=\"1\"\n type=\"button\"\n disabled={opt.disabled}\n onClick={() => !opt.disabled && onChange(opt.value)}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: base.gap,\n paddingLeft: base.paddingX,\n paddingRight: base.paddingX,\n fontSize: base.fontSize,\n fontWeight: 500,\n height: '100%',\n borderRadius: base.borderRadius,\n border: 'none',\n background: 'transparent',\n color: isActive ? accentColor : 'var(--color-text-secondary)',\n cursor: opt.disabled ? 'not-allowed' : 'pointer',\n opacity: opt.disabled ? 0.35 : 1,\n position: 'relative',\n zIndex: 1,\n whiteSpace: 'nowrap',\n transition: 'color 0.14s ease',\n flex: fullWidth ? 1 : undefined,\n userSelect: 'none',\n }}\n >\n {opt.icon}\n {opt.label}\n </button>\n );\n })}\n </div>\n );\n}\n","import { useState } from 'react';\nimport { LockIcon, TrashIcon, EyeIcon, EyeOffIcon } from '../../../icons';\nimport './HiddenKeyValueItemView.css';\n\nexport interface HiddenKeyValueItemViewProps {\n keyValue: string;\n value: string;\n /** Small colored pill badge on the key — e.g. \"auth\", \"cookie\" */\n badge?: string;\n badgeColor?: string;\n /** Override the left lock icon */\n icon?: React.ReactNode;\n /** Mask the value with dots; shows eye toggle to reveal */\n masked?: boolean;\n onDelete?: () => void;\n deleteTitle?: string;\n /** Show description column placeholder (for grid alignment with KeyValueItemView) */\n showDescription?: boolean;\n className?: string;\n}\n\n/**\n * Read-only hidden/system-managed key-value row.\n * Ditto the lock-icon + dashed-border pattern from ComputedHeaderList —\n * \"Hidden\" is Postman's terminology; Daakia's visual style is kept.\n */\nexport function HiddenKeyValueItemView({\n keyValue,\n value,\n badge,\n badgeColor,\n icon,\n masked = false,\n onDelete,\n deleteTitle,\n showDescription = false,\n className = '',\n}: HiddenKeyValueItemViewProps) {\n const [revealed, setRevealed] = useState(false);\n\n const displayValue = masked && !revealed ? '••••••••••••••••••••' : value;\n\n const cols = [\n '32px', // lock icon\n '1fr', // key\n '1fr', // value\n showDescription && '1fr', // description placeholder\n '32px', // delete\n ].filter(Boolean).join(' ');\n\n const readonlyCell: React.CSSProperties = {\n width: '100%',\n height: '28px',\n paddingLeft: '10px',\n paddingRight: '10px',\n borderRadius: '4px',\n fontSize: '12px',\n fontFamily: 'inherit',\n display: 'flex',\n alignItems: 'center',\n overflow: 'hidden',\n background: 'color-mix(in srgb, var(--color-text-primary) 3%, transparent)',\n border: '1px dashed color-mix(in srgb, var(--color-text-primary) 12%, transparent)',\n color: 'var(--color-text-muted)',\n cursor: 'default',\n userSelect: 'text',\n };\n\n return (\n <div\n className={`dui_hidden-kv-item group ${className}`}\n style={{\n display: 'grid',\n gridTemplateColumns: cols,\n gap: '8px',\n alignItems: 'center',\n minHeight: '28px',\n }}\n >\n {/* Lock / system icon */}\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n <span style={{ color: 'var(--color-text-muted)', opacity: 0.55, display: 'flex' }}>\n {icon ?? <LockIcon size={13} />}\n </span>\n </div>\n\n {/* Key — dashed, read-only */}\n <div style={readonlyCell} title={keyValue}>\n <span style={{ flex: 1, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', fontFamily: 'monospace' }}>\n {keyValue}\n </span>\n {badge && (\n <span style={{\n marginLeft: 6, fontSize: 9, padding: '1px 5px', borderRadius: 99, flexShrink: 0,\n background: `color-mix(in srgb, ${badgeColor ?? 'var(--color-primary)'} 18%, transparent)`,\n color: badgeColor ?? 'var(--color-primary)',\n fontWeight: 700, letterSpacing: '0.03em',\n }}>\n {badge}\n </span>\n )}\n </div>\n\n {/* Value — dashed, read-only, eye toggle if masked */}\n <div style={{ position: 'relative', display: 'flex', alignItems: 'center' }}>\n <div\n style={{\n ...readonlyCell,\n paddingRight: masked ? '28px' : '10px',\n fontFamily: 'monospace',\n width: '100%',\n }}\n title={revealed ? value : undefined}\n >\n <span style={{ flex: 1, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {displayValue}\n </span>\n </div>\n {masked && (\n <button\n type=\"button\"\n onClick={() => setRevealed(v => !v)}\n className=\"dui_hidden-kv-item__eye\"\n style={{\n position: 'absolute', right: 6, top: '50%', transform: 'translateY(-50%)',\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n cursor: 'pointer', padding: 2,\n background: 'transparent', border: 'none',\n }}\n title={revealed ? 'Hide value' : 'Reveal value'}\n >\n {revealed ? <EyeIcon size={12} /> : <EyeOffIcon size={12} />}\n </button>\n )}\n </div>\n\n {/* Description placeholder — keeps grid alignment */}\n {showDescription && <div />}\n\n {/* Delete */}\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n {onDelete ? (\n <button\n type=\"button\"\n onClick={onDelete}\n title={deleteTitle ?? 'Remove'}\n className=\"dui_hidden-kv-item__delete opacity-0 group-hover:opacity-100\"\n style={{\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n color: 'var(--color-text-muted)', cursor: 'pointer', padding: 2,\n background: 'transparent', border: 'none',\n }}\n >\n <TrashIcon size={13} />\n </button>\n ) : (\n <div style={{ width: 24 }} />\n )}\n </div>\n </div>\n );\n}\n","import { useState, useRef, useLayoutEffect } from 'react';\nimport type { DuiSize, DuiRadius, DuiWidth, DuiFontStyle } from '../../core/DuiTypes';\nimport { useTabBase } from '../../core/TabBase';\nimport './TabView.css';\n\nexport interface TabItem {\n id: string;\n label: string;\n badge?: number;\n dot?: boolean;\n dotColor?: string;\n badgeColor?: string;\n}\n\nexport type TabVariant = 'pill' | 'underline' | 'chip' | 'picker';\n\nexport interface TabViewProps {\n tabs: TabItem[];\n activeTab: string;\n onChange: (id: string) => void;\n /** Falls back to DuiProvider context when omitted. */\n size?: DuiSize;\n variant?: TabVariant;\n accentColor?: string;\n className?: string;\n // ─── DUI container props ──────────────────────────────────────────────────\n width?: DuiWidth;\n borderRadius?: DuiRadius | number;\n /** Text color for inactive tabs */\n color?: string;\n /** Color for the active tab indicator and text */\n activeColor?: string;\n fontStyle?: DuiFontStyle;\n}\n\nexport function TabView({\n tabs,\n activeTab,\n onChange,\n size,\n variant = 'pill',\n accentColor,\n className = '',\n width,\n borderRadius,\n color,\n activeColor,\n fontStyle,\n}: TabViewProps) {\n const base = useTabBase(size, { width, borderRadius, color, activeColor, fontStyle });\n const containerRef = useRef<HTMLDivElement>(null);\n const [ind, setInd] = useState({ left: 0, width: 0 });\n\n useLayoutEffect(() => {\n if (!containerRef.current) return;\n const el = containerRef.current.querySelector(`[data-tab=\"${activeTab}\"]`) as HTMLElement | null;\n if (el) setInd({ left: el.offsetLeft, width: el.offsetWidth });\n }, [activeTab, tabs]);\n\n const accent = accentColor || base.activeColor || 'var(--color-primary)';\n const inactiveColor = base.color || 'var(--color-text-secondary)';\n\n if (variant === 'underline') {\n return (\n <div\n ref={containerRef}\n role=\"tablist\"\n className={className}\n style={{\n position: 'relative',\n display: base.width !== 'auto' ? 'flex' : 'inline-flex',\n width: base.width !== 'auto' ? base.width : undefined,\n alignItems: 'center',\n gap: 4,\n }}\n >\n <div\n aria-hidden=\"true\"\n style={{\n position: 'absolute', bottom: 0, height: 2, borderRadius: 99,\n background: accent,\n left: ind.left, width: ind.width,\n transition: 'left 200ms ease-out, width 200ms ease-out',\n }}\n />\n {tabs.map(tab => (\n <button\n key={tab.id}\n data-tab={tab.id}\n type=\"button\"\n role=\"tab\"\n aria-selected={tab.id === activeTab}\n onClick={() => onChange(tab.id)}\n className={`dui_tab__btn${tab.id === activeTab ? ' dui_tab__btn--active' : ''}`}\n style={{\n position: 'relative', zIndex: 1,\n paddingBottom: '10px', paddingTop: '4px',\n paddingLeft: base.paddingX, paddingRight: base.paddingX,\n fontSize: base.fontSize, fontWeight: 500, cursor: 'pointer',\n background: 'transparent', border: 'none', fontFamily: 'inherit',\n fontStyle: base.fontStyle,\n color: tab.id === activeTab\n ? (accentColor || base.activeColor ? accent : 'var(--color-pilltab-text-active)')\n : inactiveColor,\n display: 'inline-flex', alignItems: 'center', gap: base.gap,\n }}\n >\n {tab.label}\n {TabBadge(tab, accent)}\n </button>\n ))}\n </div>\n );\n }\n\n if (variant === 'chip') {\n return (\n <div\n role=\"tablist\"\n className={className}\n style={{\n display: base.width !== 'auto' ? 'flex' : 'inline-flex',\n width: base.width !== 'auto' ? base.width : undefined,\n alignItems: 'center',\n gap: 4,\n flexWrap: 'wrap',\n }}\n >\n {tabs.map(tab => {\n const isActive = tab.id === activeTab;\n return (\n <button\n key={tab.id}\n data-tab={tab.id}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n onClick={() => onChange(tab.id)}\n className={`dui_tab__btn${isActive ? ' dui_tab__btn--active' : ''}`}\n style={{\n padding: `0 ${base.paddingX}`,\n height: base.height,\n fontSize: base.fontSize,\n fontWeight: 500,\n cursor: 'pointer',\n border: isActive\n ? `1px solid color-mix(in srgb, ${accent} 25%, transparent)`\n : '1px solid transparent',\n borderRadius: 9999,\n fontFamily: 'inherit',\n fontStyle: base.fontStyle,\n background: isActive\n ? `color-mix(in srgb, ${accent} 12%, transparent)`\n : 'transparent',\n color: isActive ? accent : inactiveColor,\n display: 'inline-flex',\n alignItems: 'center',\n gap: base.gap,\n transition: 'background 150ms, color 150ms, border-color 150ms',\n whiteSpace: 'nowrap',\n }}\n >\n {tab.label}\n {TabBadge(tab, accent)}\n </button>\n );\n })}\n </div>\n );\n }\n\n // ─── Picker variant (iOS segmented control) ────────────────────────────────\n if (variant === 'picker') {\n return (\n <div\n role=\"tablist\"\n className={`dui_tab__picker ${className}`}\n style={{\n display: base.width !== 'auto' ? 'flex' : 'inline-flex',\n width: base.width !== 'auto' ? base.width : undefined,\n alignItems: 'center',\n gap: 2,\n padding: 3,\n background: 'var(--color-input-bg)',\n border: '1px solid var(--color-input-border)',\n borderRadius: 9999,\n }}\n >\n {tabs.map(tab => {\n const isActive = tab.id === activeTab;\n return (\n <button\n key={tab.id}\n data-tab={tab.id}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n onClick={() => onChange(tab.id)}\n className={`dui_tab__picker-btn${isActive ? ' dui_tab__picker-btn--active' : ''}`}\n style={{\n padding: `0 ${base.paddingX}`,\n height: base.height,\n fontSize: base.fontSize,\n fontWeight: isActive ? 600 : 500,\n cursor: 'pointer',\n border: 'none',\n borderRadius: 9999,\n fontFamily: 'inherit',\n fontStyle: base.fontStyle,\n background: isActive ? accent : 'transparent',\n // Force dark text on solid accent bg — always readable regardless of accent hue\n color: isActive ? 'var(--color-surface, #1e1e1e)' : inactiveColor,\n boxShadow: isActive ? '0 1px 3px rgba(0,0,0,0.35), 0 0 0 1px rgba(0,0,0,0.08)' : 'none',\n display: 'inline-flex',\n alignItems: 'center',\n gap: base.gap,\n transition: 'background 150ms, color 150ms, box-shadow 150ms',\n whiteSpace: 'nowrap',\n lineHeight: 1,\n }}\n >\n {tab.label}\n {TabBadge(tab, isActive ? 'var(--color-surface, #1e1e1e)' : accent)}\n </button>\n );\n })}\n </div>\n );\n }\n\n return (\n <div\n ref={containerRef}\n role=\"tablist\"\n className={className}\n style={{\n position: 'relative',\n display: base.width !== 'auto' ? 'flex' : 'inline-flex',\n width: base.width !== 'auto' ? base.width : undefined,\n alignItems: 'center',\n gap: 2,\n background: 'var(--color-pilltab-track-bg, var(--color-surface))',\n borderRadius: base.borderRadius,\n padding: 4,\n }}\n >\n <div\n aria-hidden=\"true\"\n style={{\n position: 'absolute', top: 4, bottom: 4, borderRadius: base.borderRadius,\n background: accentColor || base.activeColor\n ? `color-mix(in srgb, ${accent} 12%, transparent)`\n : 'var(--color-pilltab-indicator-bg)',\n border: accentColor || base.activeColor\n ? `1px solid color-mix(in srgb, ${accent} 25%, transparent)`\n : '1px solid var(--color-pilltab-indicator-border)',\n left: ind.left, width: ind.width,\n transition: 'left 200ms ease-out, width 200ms ease-out',\n }}\n />\n {tabs.map(tab => (\n <button\n key={tab.id}\n data-tab={tab.id}\n type=\"button\"\n role=\"tab\"\n aria-selected={tab.id === activeTab}\n onClick={() => onChange(tab.id)}\n className={`dui_tab__btn${tab.id === activeTab ? ' dui_tab__btn--active' : ''}`}\n style={{\n position: 'relative', zIndex: 1,\n padding: `0 ${base.paddingX}`,\n height: base.height,\n fontSize: base.fontSize, fontWeight: 500, cursor: 'pointer',\n background: 'transparent', border: 'none', borderRadius: base.borderRadius,\n fontFamily: 'inherit', fontStyle: base.fontStyle,\n color: tab.id === activeTab\n ? (accentColor || base.activeColor ? accent : 'var(--color-pilltab-text-active)')\n : inactiveColor,\n display: 'inline-flex', alignItems: 'center', gap: base.gap,\n }}\n >\n {tab.label}\n {TabBadge(tab, accent)}\n </button>\n ))}\n </div>\n );\n}\n\nfunction TabBadge(tab: TabItem, accent: string) {\n if (tab.badge !== undefined && tab.badge > 0) {\n const bg = tab.badgeColor\n ? `color-mix(in srgb, ${tab.badgeColor} 15%, transparent)`\n : `color-mix(in srgb, ${accent} 15%, transparent)`;\n const color = tab.badgeColor || accent;\n return (\n <span style={{ fontSize: '10px', padding: '1px 6px', borderRadius: 99, background: bg, color, fontWeight: 700 }}>\n {tab.badge}\n </span>\n );\n }\n if (tab.dot) {\n return (\n <span style={{ width: 6, height: 6, borderRadius: '50%', background: tab.dotColor || accent, display: 'inline-block', position: 'relative', top: -1 }} />\n );\n }\n return null;\n}\n","import { useMemo } from 'react';\nimport { useEditorBase } from '../../core/EditorBase';\nimport { EditorShell } from './EditorView.shell';\nimport type { EditorViewProps } from './EditorView';\n\n/**\n * Plain-textarea stand-in for EditorView, used whenever Monaco isn't\n * available (not installed, or '@salilvnair/dui/monaco-setup' was never\n * imported). Deliberately minimal — no IntelliSense, no breakpoints, no\n * folding, no format-on-save. Those are Monaco-specific concepts; anything\n * that needs them should treat the fallback as a degraded, read/write-only\n * text box rather than try to emulate Monaco's feature set.\n */\nexport function EditorViewFallback({\n value,\n onChange,\n language = 'json',\n height = '200px',\n minHeight,\n readOnly = false,\n placeholder,\n wordWrap = true,\n size,\n fontSize,\n className = '',\n bordered = false,\n accentColor,\n}: EditorViewProps) {\n const base = useEditorBase(size);\n const resolvedFontSize = fontSize ?? base.fontSize;\n const resolvedHeight = typeof height === 'number' ? `${height}px` : height;\n const containerHeight = minHeight ? `max(${resolvedHeight}, ${minHeight}px)` : resolvedHeight;\n const ariaLabel = useMemo(() => `${language} editor (plain-text fallback — Monaco not available)`, [language]);\n\n return (\n <EditorShell bordered={bordered} containerHeight={containerHeight} accentColor={accentColor}>\n <textarea\n className={`dui-editor-fallback ${className}`}\n aria-label={ariaLabel}\n value={value}\n onChange={e => onChange?.(e.target.value)}\n readOnly={readOnly}\n placeholder={placeholder}\n spellCheck={false}\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n style={{\n width: '100%',\n height: '100%',\n resize: 'none',\n border: 'none',\n outline: 'none',\n padding: '8px 10px',\n margin: 0,\n background: 'var(--color-codeblock-bg, transparent)',\n color: 'var(--color-text-primary)',\n fontFamily: 'Menlo, Monaco, \"Courier New\", monospace',\n fontSize: resolvedFontSize,\n lineHeight: 1.55,\n whiteSpace: wordWrap ? 'pre-wrap' : 'pre',\n overflowWrap: wordWrap ? 'break-word' : 'normal',\n overflow: 'auto',\n }}\n />\n </EditorShell>\n );\n}\n","import type { DuiSize } from '../../core/DuiTypes';\nimport type { ContextMenuItem } from '../modal/ContextMenuView';\nimport { useMonacoRuntimeStatus, getMonacoEditorImpl } from '../../monaco-runtime';\nimport { EditorViewFallback } from './EditorView.fallback';\n\n/**\n * 'native' — Monaco's built-in context menu (default).\n * 'dui' — suppress Monaco's menu, show DUI's ContextMenuView instead.\n * 'none' — suppress the context menu entirely (e.g. a REPL input where\n * right-click doesn't make sense).\n */\nexport type EditorContextMenuMode = 'native' | 'dui' | 'none';\n\n// ─── Monaco option enums — use these instead of raw strings ──────────────────\n// Pure value/type declarations — zero Monaco import, always safe to re-export\n// from the main entry regardless of whether the consumer has Monaco installed.\n\nexport const EditorLineNumbers = { ON: 'on', OFF: 'off', RELATIVE: 'relative', INTERVAL: 'interval' } as const;\nexport type EditorLineNumbers = typeof EditorLineNumbers[keyof typeof EditorLineNumbers];\n\nexport const EditorWordWrap = { OFF: 'off', ON: 'on', WORD_WRAP_COLUMN: 'wordWrapColumn', BOUNDED: 'bounded' } as const;\nexport type EditorWordWrap = typeof EditorWordWrap[keyof typeof EditorWordWrap];\n\nexport const EditorCursorStyle = { LINE: 'line', BLOCK: 'block', UNDERLINE: 'underline', LINE_THIN: 'line-thin', BLOCK_OUTLINE: 'block-outline', UNDERLINE_THIN: 'underline-thin' } as const;\nexport type EditorCursorStyle = typeof EditorCursorStyle[keyof typeof EditorCursorStyle];\n\nexport const EditorCursorBlinking = { BLINK: 'blink', SMOOTH: 'smooth', PHASE: 'phase', EXPAND: 'expand', SOLID: 'solid' } as const;\nexport type EditorCursorBlinking = typeof EditorCursorBlinking[keyof typeof EditorCursorBlinking];\n\nexport const EditorRenderWhitespace = { NONE: 'none', BOUNDARY: 'boundary', SELECTION: 'selection', TRAILING: 'trailing', ALL: 'all' } as const;\nexport type EditorRenderWhitespace = typeof EditorRenderWhitespace[keyof typeof EditorRenderWhitespace];\n\nexport const EditorFoldingControls = { ALWAYS: 'always', NEVER: 'never', MOUSEOVER: 'mouseover' } as const;\nexport type EditorFoldingControls = typeof EditorFoldingControls[keyof typeof EditorFoldingControls];\n\nexport const EditorMatchBrackets = { NEVER: 'never', NEAR: 'near', ALWAYS: 'always' } as const;\nexport type EditorMatchBrackets = typeof EditorMatchBrackets[keyof typeof EditorMatchBrackets];\n\nexport const EditorAutoIndent = { NONE: 'none', KEEP: 'keep', BRACKETS: 'brackets', ADVANCED: 'advanced', FULL: 'full' } as const;\nexport type EditorAutoIndent = typeof EditorAutoIndent[keyof typeof EditorAutoIndent];\n\nexport const EditorAcceptSuggestion = { ON: 'on', OFF: 'off', SMART: 'smart' } as const;\nexport type EditorAcceptSuggestion = typeof EditorAcceptSuggestion[keyof typeof EditorAcceptSuggestion];\n\n/**\n * Consumer-facing Monaco editor options. Use the DUI enum constants for\n * value-based fields (e.g. EditorCursorStyle.BLOCK, EditorLineNumbers.RELATIVE).\n * Ignored entirely while running in fallback mode (see EditorView.fallback.tsx).\n *\n * DUI always retains control of: contextmenu, automaticLayout, glyphMargin,\n * fixedOverflowWidgets (structural internals — not overridable).\n */\nexport interface EditorOptions {\n // ── Display\n lineNumbers?: EditorLineNumbers;\n /** Width reserved for line-number decorations, in px. Set 0 to remove the gutter entirely. */\n lineDecorationsWidth?: number;\n /** Minimum character width reserved for line numbers. */\n lineNumbersMinChars?: number;\n lineHeight?: number;\n letterSpacing?: number;\n rulers?: number[];\n renderWhitespace?: EditorRenderWhitespace;\n /**\n * Current-line highlight style. Defaults to 'line' when glyphMargin is\n * active (debugSupported with a breakpoint handler) and 'none' otherwise —\n * pass explicitly to override either way.\n */\n renderLineHighlight?: 'none' | 'gutter' | 'line' | 'all';\n /** Override the monospace font stack (defaults to Menlo/Monaco/Courier New). */\n fontFamily?: string;\n // ── Minimap & scrolling\n minimap?: boolean;\n scrollBeyondLastLine?: boolean;\n smoothScrolling?: boolean;\n mouseWheelZoom?: boolean;\n /** Scrollbar visibility + thickness. Defaults to 6px, always visible. */\n scrollbar?: {\n vertical?: 'auto' | 'visible' | 'hidden';\n horizontal?: 'auto' | 'visible' | 'hidden';\n verticalScrollbarSize?: number;\n horizontalScrollbarSize?: number;\n };\n // ── Cursor\n cursorStyle?: EditorCursorStyle;\n cursorBlinking?: EditorCursorBlinking;\n // ── Editing\n tabSize?: number;\n wordWrap?: EditorWordWrap;\n formatOnPaste?: boolean;\n formatOnType?: boolean;\n autoIndent?: EditorAutoIndent;\n // ── Folding & brackets\n folding?: boolean;\n showFoldingControls?: EditorFoldingControls;\n matchBrackets?: EditorMatchBrackets;\n bracketPairColorization?: boolean;\n // ── Intelligence\n quickSuggestions?: boolean;\n suggestOnTriggerCharacters?: boolean;\n acceptSuggestionOnEnter?: EditorAcceptSuggestion;\n parameterHints?: boolean;\n hover?: boolean;\n codeLens?: boolean;\n inlayHints?: boolean;\n /** Which suggestion-list sections to show. Merged over DUI's defaults (all true). */\n suggest?: {\n showKeywords?: boolean;\n showSnippets?: boolean;\n showValues?: boolean;\n showProperties?: boolean;\n showIcons?: boolean;\n };\n // ── Misc\n colorDecorators?: boolean;\n linkedEditing?: boolean;\n copyWithSyntaxHighlighting?: boolean;\n padding?: { top?: number; bottom?: number };\n}\n\nexport type EditorLanguage =\n | 'javascript' | 'typescript' | 'json' | 'xml' | 'html'\n | 'css' | 'graphql' | 'python' | 'yaml' | 'sql' | 'plaintext' | 'markdown' | 'java';\n\nexport interface EditorViewProps {\n value: string;\n onChange?: (value: string) => void;\n language?: EditorLanguage;\n height?: string | number;\n minHeight?: number;\n readOnly?: boolean;\n /** Placeholder shown when value is empty */\n placeholder?: string;\n wordWrap?: boolean;\n /**\n * DUI size token — sets editor font size via EDITOR_FONT_SIZE scale (md=12, lg=13, xl=14…).\n * Ignored when `fontSize` is provided explicitly.\n */\n size?: DuiSize;\n /** Explicit font size in px — takes precedence over `size`. Defaults to 12 (md). */\n fontSize?: number;\n className?: string;\n /** Adds a rounded border matching CodeEditor appearance */\n bordered?: boolean;\n /**\n * Opt-in to full debug feature set: breakpoint gutter, variable hover,\n * navigate-to-line from RunAndDebugPanel, dk/console completions.\n * When false (default) none of these hooks or store subscriptions are active.\n * No effect in fallback mode — breakpoints are a Monaco glyph-margin concept.\n */\n debugSupported?: boolean;\n // ─── Debug props — only used when debugSupported=true (Monaco mode) ────────\n breakpoints?: number[];\n disabledBreakpoints?: number[];\n conditionalBreakpointLines?: number[];\n /** Currently paused line — shows yellow highlight */\n pausedLine?: number | null;\n onToggleBreakpoint?: (line: number) => void;\n onGlyphContextMenu?: (line: number, pos: { x: number; y: number }) => void;\n /** Receives editor + monaco instances after mount (e.g. for AI autocomplete). Not called in fallback mode. */\n onEditorMount?: (editor: any, monaco: any) => void;\n /**\n * Accent color for the Monaco scrollbar thumb. Accepts any CSS color value\n * including CSS variables (e.g. `var(--color-protocol-soap)`). When omitted\n * the global `--color-accent` is used automatically via CSS fallback.\n */\n accentColor?: string;\n /**\n * 'native' — use Monaco's built-in context menu (default).\n * 'dui' — suppress Monaco's menu and show DUI ContextMenuView instead.\n * Requires contextMenuItems to be provided.\n */\n contextMenuMode?: EditorContextMenuMode;\n /**\n * Items for the DUI ContextMenuView. Only used when contextMenuMode='dui'.\n * Supports icons, colors, danger styling, separators, and infinite submenus.\n */\n contextMenuItems?: ContextMenuItem[];\n /**\n * Fine-grained Monaco editor options. Consumer values are merged over DUI\n * defaults. Use the exported enum constants for value fields:\n * cursorStyle={EditorCursorStyle.BLOCK}\n * lineNumbers={EditorLineNumbers.RELATIVE}\n * DUI always retains: contextmenu, automaticLayout, glyphMargin, fixedOverflowWidgets.\n */\n editorOptions?: EditorOptions;\n}\n\nexport type { ContextMenuItem as EditorContextMenuItem } from '../modal/ContextMenuView';\n\n// ─── Public export — dispatcher ───────────────────────────────────────────────\n\n/**\n * DUI's code editor. Renders the real Monaco-backed editor once the consumer\n * has installed '@monaco-editor/react' + 'monaco-editor' and imported\n * '@salilvnair/dui/monaco-setup' once at app bootstrap (self-hosted — no CDN;\n * that subpath registers the Monaco implementation into monaco-runtime.ts).\n * Until then, renders a lightweight plain-text fallback so '@salilvnair/dui'\n * never requires Monaco as a hard dependency — this file has no reference to\n * '@monaco-editor/react' or 'monaco-editor' anywhere in its module graph.\n */\nexport function EditorView(props: EditorViewProps) {\n const monacoStatus = useMonacoRuntimeStatus();\n const MonacoEditorView = monacoStatus === 'ready' ? getMonacoEditorImpl() : null;\n\n if (MonacoEditorView) return <MonacoEditorView {...props} />;\n return <EditorViewFallback {...props} />;\n}\n","/**\n * DebugEditorView — DUI Monaco editor with full debug feature set enabled.\n *\n * Wraps EditorView (debugSupported=true) and exposes an adapter interface so\n * any consumer can wire in their own breakpoint and debug-store logic without\n * importing daakia-specific stores.\n */\nimport { EditorView, type EditorViewProps } from './EditorView';\n\n// ── Public adapter interface ───────────────────────────────────────────────────\n\n/** Abstract debug adapter — consumer provides the implementation. */\nexport interface DebugEditorAdapter {\n /** Called when user clicks in the breakpoint gutter to toggle a breakpoint. */\n onToggleBreakpoint?: (line: number) => void;\n /** Called when user right-clicks a glyph in the breakpoint gutter. */\n onGlyphContextMenu?: (line: number, pos: { x: number; y: number }) => void;\n /** Called after Monaco mounts — use to attach AI autocomplete or other plugins. */\n onEditorMount?: (editor: unknown, monaco: unknown) => void;\n}\n\n// ── Props ─────────────────────────────────────────────────────────────────────\n\nexport interface DebugEditorViewProps extends Omit<EditorViewProps, 'debugSupported' | 'onToggleBreakpoint' | 'onGlyphContextMenu' | 'onEditorMount'> {\n /** Pluggable debug adapter — consumer supplies all callbacks. */\n adapter?: DebugEditorAdapter;\n /** Active breakpoint line numbers. */\n breakpoints?: number[];\n /** Line numbers whose breakpoints are disabled (greyed out). */\n disabledBreakpoints?: number[];\n /** Line numbers with conditional breakpoints (shown in amber). */\n conditionalBreakpointLines?: number[];\n /** Currently paused line — rendered with a yellow highlight bar. */\n pausedLine?: number | null;\n}\n\n// ── Component ─────────────────────────────────────────────────────────────────\n\nexport function DebugEditorView({\n adapter,\n breakpoints,\n disabledBreakpoints,\n conditionalBreakpointLines,\n pausedLine,\n ...rest\n}: DebugEditorViewProps) {\n return (\n <EditorView\n {...rest}\n debugSupported\n breakpoints={breakpoints}\n disabledBreakpoints={disabledBreakpoints}\n conditionalBreakpointLines={conditionalBreakpointLines}\n pausedLine={pausedLine}\n onToggleBreakpoint={adapter?.onToggleBreakpoint}\n onGlyphContextMenu={adapter?.onGlyphContextMenu}\n onEditorMount={adapter?.onEditorMount}\n />\n );\n}\n","import { useMemo } from 'react';\nimport type { DiffEditorViewProps } from './DiffEditorView';\n\ntype DiffOp = { type: 'equal' | 'add' | 'remove'; line: string };\n\n/**\n * Small LCS-based line diff — good enough for the config/JSON-sized text this\n * fallback typically sees. Not Monaco's diff engine (no inline char-level\n * highlighting, no side-by-side alignment), just enough to see what changed.\n */\nfunction diffLines(original: string, modified: string): DiffOp[] {\n const a = original.split('\\n');\n const b = modified.split('\\n');\n const n = a.length;\n const m = b.length;\n const dp: number[][] = Array.from({ length: n + 1 }, () => new Array(m + 1).fill(0));\n for (let i = n - 1; i >= 0; i--) {\n for (let j = m - 1; j >= 0; j--) {\n dp[i][j] = a[i] === b[j] ? dp[i + 1][j + 1] + 1 : Math.max(dp[i + 1][j], dp[i][j + 1]);\n }\n }\n const ops: DiffOp[] = [];\n let i = 0, j = 0;\n while (i < n && j < m) {\n if (a[i] === b[j]) {\n ops.push({ type: 'equal', line: a[i] });\n i++; j++;\n } else if (dp[i + 1][j] >= dp[i][j + 1]) {\n ops.push({ type: 'remove', line: a[i] });\n i++;\n } else {\n ops.push({ type: 'add', line: b[j] });\n j++;\n }\n }\n while (i < n) { ops.push({ type: 'remove', line: a[i] }); i++; }\n while (j < m) { ops.push({ type: 'add', line: b[j] }); j++; }\n return ops;\n}\n\nconst OP_STYLES: Record<DiffOp['type'], { bg: string; prefix: string }> = {\n equal: { bg: 'transparent', prefix: ' ' },\n add: { bg: 'color-mix(in srgb, var(--color-success, #22c55e) 15%, transparent)', prefix: '+ ' },\n remove: { bg: 'color-mix(in srgb, var(--color-danger, #ef4444) 15%, transparent)', prefix: '- ' },\n};\n\nexport function DiffEditorViewFallback({\n original,\n modified,\n height = 300,\n fontSize = 12,\n wordWrap = false,\n}: DiffEditorViewProps) {\n const ops = useMemo(() => diffLines(original, modified), [original, modified]);\n const h = typeof height === 'number' ? `${height}px` : height;\n\n return (\n <div\n className=\"dui-diffeditor-fallback\"\n style={{\n height: h,\n width: '100%',\n overflow: 'auto',\n fontFamily: 'Menlo, Monaco, \"Courier New\", monospace',\n fontSize,\n lineHeight: 1.55,\n background: 'var(--color-codeblock-bg, transparent)',\n border: '1px solid var(--color-surface-border)',\n borderRadius: '6px',\n }}\n >\n {ops.map((op, i) => (\n <div\n key={i}\n style={{\n background: OP_STYLES[op.type].bg,\n whiteSpace: wordWrap ? 'pre-wrap' : 'pre',\n overflowWrap: wordWrap ? 'break-word' : 'normal',\n padding: '0 8px',\n color: 'var(--color-text-primary)',\n }}\n >\n {OP_STYLES[op.type].prefix}{op.line}\n </div>\n ))}\n </div>\n );\n}\n","import { useMonacoRuntimeStatus, getMonacoDiffEditorImpl } from '../../monaco-runtime';\nimport { DiffEditorViewFallback } from './DiffEditorView.fallback';\n\nexport interface DiffEditorViewProps {\n original: string;\n modified: string;\n language?: string;\n height?: number | string;\n readOnly?: boolean;\n renderSideBySide?: boolean;\n wordWrap?: boolean;\n fontSize?: number;\n theme?: string;\n onMount?: (editor: any, monaco: any) => void;\n}\n\n/**\n * DUI's diff editor. Same optionality contract as EditorView: Monaco-backed\n * once the consumer installs the Monaco packages and imports\n * '@salilvnair/dui/monaco-setup'; a plain-text line diff otherwise.\n */\nexport function DiffEditorView(props: DiffEditorViewProps) {\n const monacoStatus = useMonacoRuntimeStatus();\n const MonacoDiffEditorView = monacoStatus === 'ready' ? getMonacoDiffEditorImpl() : null;\n\n if (MonacoDiffEditorView) return <MonacoDiffEditorView {...props} />;\n return <DiffEditorViewFallback {...props} />;\n}\n","import { useState, useRef, useCallback, useEffect } from 'react';\nimport { PlusIcon, CloseIcon, ChevronLeftIcon, ChevronRightIcon, SettingsIcon, ServerIcon } from '../../../icons';\nimport type { DuiSize } from '../../core/DuiTypes';\nimport { useDui } from '../../core/DuiContext';\nimport { DUI_HEIGHT, DUI_FONT_SIZE, DUI_ICON_SIZE } from '../../core/DuiTokens';\nimport '../../shared/css/Shared.css';\nimport './TabBarView.css';\n\n// ─── Types ─────────────────────────────────────────────────────────────────────\n\nexport type TabBarProtocol = 'rest' | 'graphql' | 'websocket' | 'grpc' | 'soap' | 'ai' | 'mcp';\nexport type TabBarTabType = 'request' | 'settings' | 'mock-server' | 'daakia-ai';\nexport type RealtimeProtocol = 'websocket' | 'sse' | 'socketio' | 'mqtt';\n\nexport interface TabBarTab {\n id: string;\n label: string;\n type?: TabBarTabType;\n protocol?: TabBarProtocol;\n method?: string;\n dirty?: boolean;\n pinned?: boolean;\n rtProtocol?: RealtimeProtocol;\n}\n\nexport interface TabBarViewProps {\n tabs: TabBarTab[];\n activeTabId: string;\n onTabClick: (id: string) => void;\n onTabClose?: (id: string) => void;\n onAddTab?: () => void;\n accentColor?: string;\n /** Falls back to DuiProvider size when omitted. Overrides `height`. */\n size?: DuiSize;\n /** Raw pixel height — prefer `size` for token-aligned sizing. */\n height?: number;\n className?: string;\n}\n\n// ─── Protocol badge helpers ────────────────────────────────────────────────────\n\nconst METHOD_COLORS: Record<string, string> = {\n GET: 'var(--color-method-get)',\n POST: 'var(--color-method-post)',\n PUT: 'var(--color-method-put)',\n PATCH: 'var(--color-method-patch)',\n DELETE: 'var(--color-method-delete)',\n HEAD: 'var(--color-method-head)',\n OPTIONS: 'var(--color-method-options)',\n};\n\nconst PROTOCOL_BADGE: Record<TabBarProtocol, { label: string; color: string }> = {\n rest: { label: 'REST', color: 'var(--color-protocol-rest)' },\n graphql: { label: 'GQL', color: 'var(--color-protocol-graphql)' },\n websocket: { label: 'WS', color: 'var(--color-protocol-websocket)' },\n grpc: { label: 'gRPC', color: 'var(--color-protocol-grpc)' },\n soap: { label: 'SOAP', color: 'var(--color-protocol-soap)' },\n ai: { label: 'AI', color: 'var(--color-protocol-ai)' },\n mcp: { label: 'MCP', color: 'var(--color-protocol-mcp)' },\n};\n\nconst RT_BADGE: Record<RealtimeProtocol, { label: string; color: string }> = {\n websocket: { label: 'WS', color: 'var(--color-protocol-websocket)' },\n sse: { label: 'SSE', color: 'var(--color-protocol-sse)' },\n socketio: { label: 'SIO', color: 'var(--color-protocol-socketio)' },\n mqtt: { label: 'MQTT', color: 'var(--color-protocol-mqtt)' },\n};\n\nfunction getTabAccent(tab: TabBarTab, accentColor: string): string {\n if (tab.type === 'settings') return 'var(--color-settings)';\n if (tab.type === 'mock-server') return 'var(--color-mock-server)';\n if (tab.type === 'daakia-ai') return 'var(--color-protocol-ai)';\n if (tab.protocol) return PROTOCOL_BADGE[tab.protocol]?.color || accentColor;\n return accentColor;\n}\n\nfunction TabProtocolBadge({ tab }: { tab: TabBarTab }) {\n if (tab.type === 'settings') {\n return <SettingsIcon size={12} style={{ color: 'var(--color-settings)', flexShrink: 0 }} />;\n }\n if (tab.type === 'mock-server') {\n return <ServerIcon size={12} style={{ color: 'var(--color-mock-server)', flexShrink: 0 }} />;\n }\n if (tab.protocol === 'rest' && tab.method) {\n const color = METHOD_COLORS[tab.method.toUpperCase()] || 'var(--color-text-muted)';\n return (\n <span style={{ fontSize: '10px', fontFamily: 'monospace', fontWeight: 700, color, flexShrink: 0, lineHeight: 1 }}>\n {tab.method.toUpperCase().slice(0, 6)}\n </span>\n );\n }\n if (tab.protocol === 'websocket') {\n const rt = RT_BADGE[tab.rtProtocol || 'websocket'] || RT_BADGE.websocket;\n return <span style={{ fontSize: '10px', fontFamily: 'monospace', fontWeight: 700, color: rt.color, flexShrink: 0, lineHeight: 1 }}>{rt.label}</span>;\n }\n if (tab.protocol) {\n const b = PROTOCOL_BADGE[tab.protocol];\n return <span style={{ fontSize: '10px', fontFamily: 'monospace', fontWeight: 700, color: b.color, flexShrink: 0, lineHeight: 1 }}>{b.label}</span>;\n }\n return null;\n}\n\n// ─── TabBarView ────────────────────────────────────────────────────────────────\n\nexport function TabBarView({\n tabs,\n activeTabId,\n onTabClick,\n onTabClose,\n onAddTab,\n accentColor = 'var(--color-primary)',\n size,\n height,\n className = '',\n}: TabBarViewProps) {\n const ctx = useDui();\n const s = size ?? ctx.size;\n // TabBar uses nav heights (taller than inputs for click comfort)\n const resolvedHeight = height ?? DUI_HEIGHT.nav[s];\n const fontSize = DUI_FONT_SIZE[s];\n const iconSize = DUI_ICON_SIZE[s];\n const scrollRef = useRef<HTMLDivElement>(null);\n const [canScrollLeft, setCanScrollLeft] = useState(false);\n const [canScrollRight, setCanScrollRight] = useState(false);\n\n const checkScroll = useCallback(() => {\n const el = scrollRef.current;\n if (!el) return;\n setCanScrollLeft(el.scrollLeft > 0);\n setCanScrollRight(el.scrollLeft + el.clientWidth < el.scrollWidth - 1);\n }, []);\n\n useEffect(() => {\n checkScroll();\n const el = scrollRef.current;\n if (!el) return;\n el.addEventListener('scroll', checkScroll);\n const ro = new ResizeObserver(checkScroll);\n ro.observe(el);\n return () => { el.removeEventListener('scroll', checkScroll); ro.disconnect(); };\n }, [checkScroll, tabs.length]);\n\n const scrollTabs = (dir: 'left' | 'right') => {\n scrollRef.current?.scrollBy({ left: dir === 'left' ? -150 : 150, behavior: 'smooth' });\n };\n\n return (\n <div\n className={className}\n style={{\n display: 'flex',\n alignItems: 'center',\n height: `${resolvedHeight}px`,\n flexShrink: 0,\n background: 'var(--color-panel)',\n borderBottom: '1px solid var(--color-panel-border)',\n }}\n >\n {/* Scroll left */}\n {canScrollLeft && (\n <button\n type=\"button\"\n onClick={() => scrollTabs('left')}\n title=\"Scroll tabs left\"\n className=\"dui_tab-bar__scroll-btn\"\n style={{\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n width: '24px', height: '100%', flexShrink: 0, cursor: 'pointer',\n color: 'var(--color-text-muted)', background: 'transparent', border: 'none',\n }}\n >\n <ChevronLeftIcon size={11} />\n </button>\n )}\n\n {/* Scrollable tab list */}\n <div\n ref={scrollRef}\n style={{\n display: 'flex', alignItems: 'center', height: '100%',\n flex: 1, minWidth: 0, overflowX: 'auto',\n }}\n className=\"scrollbar-none\"\n >\n {tabs.map(tab => {\n const isActive = tab.id === activeTabId;\n const tabAccent = getTabAccent(tab, accentColor);\n const isNonCloseable = tab.type === 'settings' || tab.type === 'mock-server';\n\n return (\n <div\n key={tab.id}\n className={`dui_tab-bar__tab group${isActive ? ' dui_tab-bar__tab--active' : ''}`}\n style={{\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n height: '100%',\n padding: '0 12px',\n borderRight: '1px solid var(--color-panel-border)',\n cursor: 'pointer',\n userSelect: 'none',\n flexShrink: 0,\n maxWidth: '200px',\n minWidth: '80px',\n background: isActive\n ? `color-mix(in srgb, ${tabAccent} 5%, transparent)`\n : 'transparent',\n }}\n onClick={() => onTabClick(tab.id)}\n >\n {/* Active top border */}\n {isActive && (\n <div style={{\n position: 'absolute', top: 0, left: 0, right: 0,\n height: '2px', background: tabAccent, zIndex: 10,\n }} />\n )}\n\n {/* Protocol badge */}\n <TabProtocolBadge tab={tab} />\n\n {/* Label */}\n <span style={{\n flex: 1, fontSize, color: 'var(--color-text-primary)',\n overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap',\n }}>\n {tab.label}\n </span>\n\n {/* Dirty dot */}\n {tab.dirty && !tab.pinned && (\n <span style={{\n width: '6px', height: '6px', borderRadius: '50%',\n background: tabAccent, flexShrink: 0,\n }} />\n )}\n\n {/* Pinned */}\n {tab.pinned && (\n <span style={{ fontSize: '11px', flexShrink: 0 }}>📌</span>\n )}\n\n {/* Close button */}\n {!tab.pinned && (\n <button\n type=\"button\"\n onClick={e => { e.stopPropagation(); onTabClose?.(tab.id); }}\n title=\"Close tab\"\n className=\"dui_tab-bar__close-btn group-hover:opacity-100\"\n style={{\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n width: `${iconSize + 6}px`, height: `${iconSize + 6}px`, borderRadius: '4px',\n cursor: 'pointer', flexShrink: 0,\n color: 'var(--color-error)',\n background: 'transparent', border: 'none',\n opacity: isNonCloseable ? 1 : 0,\n }}\n >\n <CloseIcon size={iconSize + 4} />\n </button>\n )}\n </div>\n );\n })}\n\n {/* Add tab button */}\n {onAddTab && (\n <button\n type=\"button\"\n onClick={onAddTab}\n title=\"New Tab\"\n className=\"dui_tab-bar__add-btn\"\n style={{\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n width: '36px', height: '100%', flexShrink: 0,\n color: accentColor, background: 'transparent', border: 'none', cursor: 'pointer',\n }}\n >\n <PlusIcon size={15} />\n </button>\n )}\n </div>\n\n {/* Scroll right */}\n {canScrollRight && (\n <button\n type=\"button\"\n onClick={() => scrollTabs('right')}\n title=\"Scroll tabs right\"\n className=\"dui_tab-bar__scroll-btn\"\n style={{\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n width: '24px', height: '100%', flexShrink: 0,\n color: 'var(--color-text-muted)', background: 'transparent', border: 'none', cursor: 'pointer',\n }}\n >\n <ChevronRightIcon size={11} />\n </button>\n )}\n </div>\n );\n}\n","/**\n * PilledTabView — SwiftUI-style segmented control with a sliding pill.\n *\n * Ditto from ck8t's `.bs-inspector-modes` / `.bs-inspector-pill` pattern.\n * Pure inline styles so it works without any CSS import.\n *\n * Usage:\n * <PilledTabView\n * tabs={[{ id: 'basic', label: 'Basic' }, { id: 'advanced', label: 'Advanced' }]}\n * activeId={tab}\n * onChange={setTab}\n * />\n */\nimport { useEffect, useRef, useState } from 'react'\n\nexport interface PilledTab {\n id: string\n label: string\n}\n\nexport interface PilledTabViewProps {\n tabs: PilledTab[]\n activeId: string\n onChange: (id: string) => void\n /** CSS color or variable for the active pill background. Defaults to indigo. */\n accentColor?: string\n /**\n * `'rounded'` — subtle rounded corners (default, border-radius 8/6).\n * `'pill'` — fully pill-shaped corners (border-radius 999).\n */\n mode?: 'rounded' | 'pill'\n className?: string\n style?: React.CSSProperties\n}\n\nexport function PilledTabView({\n tabs,\n activeId,\n onChange,\n accentColor,\n mode = 'rounded',\n className,\n style,\n}: PilledTabViewProps) {\n const activeIdx = Math.max(0, tabs.findIndex((t) => t.id === activeId))\n const accent = accentColor ?? 'var(--color-primary, rgba(99,102,241,1))'\n const isPill = mode === 'pill'\n const containerRadius = isPill ? 999 : 8\n const pillRadius = isPill ? 999 : 6\n const btnRefs = useRef<(HTMLButtonElement | null)[]>([])\n const [pill, setPill] = useState<{ left: number; width: number } | null>(null)\n\n useEffect(() => {\n const el = btnRefs.current[activeIdx]\n if (el) setPill({ left: el.offsetLeft, width: el.offsetWidth })\n }, [activeIdx, tabs])\n\n return (\n <div\n className={className}\n style={{\n position: 'relative',\n display: 'inline-flex',\n background: 'rgba(255,255,255,0.04)',\n border: '1px solid rgba(255,255,255,0.07)',\n borderRadius: containerRadius,\n padding: 2,\n gap: 0,\n ...style,\n }}\n >\n {/* Sliding pill — tracks actual button bounds */}\n {pill && (\n <div\n style={{\n position: 'absolute',\n top: 2,\n bottom: 2,\n left: pill.left,\n width: pill.width,\n borderRadius: pillRadius,\n background: `color-mix(in srgb, ${accent} 22%, transparent)`,\n boxShadow: '0 1px 4px rgba(0,0,0,0.22), inset 0 1px 0 rgba(255,255,255,0.06)',\n transition: 'left 380ms cubic-bezier(0.34, 1.56, 0.64, 1), width 380ms cubic-bezier(0.34, 1.56, 0.64, 1)',\n pointerEvents: 'none',\n }}\n />\n )}\n {tabs.map((tab, i) => {\n const isActive = tab.id === activeId\n return (\n <button\n key={tab.id}\n ref={(el) => { btnRefs.current[i] = el }}\n onClick={() => onChange(tab.id)}\n style={{\n position: 'relative',\n flex: 'none',\n padding: '4px 14px',\n borderRadius: pillRadius,\n fontSize: 10,\n fontWeight: 600,\n textTransform: 'uppercase',\n letterSpacing: '0.09em',\n background: 'transparent',\n color: isActive ? accent : 'var(--color-text-muted, #64748b)',\n border: 'none',\n cursor: 'pointer',\n transition: 'color 200ms ease',\n textAlign: 'center',\n zIndex: 1,\n fontFamily: 'inherit',\n whiteSpace: 'nowrap',\n }}\n >\n {tab.label}\n </button>\n )\n })}\n </div>\n )\n}\n","import type { CSSProperties } from 'react';\nimport type { DuiSize } from '../../core/DuiTypes';\nimport { useToggleBase } from '../../core/ToggleBase';\n\n/** Accepts all 4 canonical sizes (maps to DuiToggle tokens). */\nexport type ToggleSwitchSize = DuiSize;\n\nexport interface ToggleSwitchViewProps {\n checked: boolean;\n onChange: (checked: boolean) => void;\n disabled?: boolean;\n /** Falls back to DuiProvider context when omitted. */\n size?: ToggleSwitchSize;\n accentColor?: string;\n label?: string;\n labelPosition?: 'left' | 'right';\n className?: string;\n // ─── DUI container props ───────────────────────────────────────────────────\n /** Color when checked — alias for accentColor with context-level support */\n activeColor?: string;\n /** Label text color override */\n color?: string;\n}\n\nexport function ToggleSwitchView({\n checked,\n onChange,\n disabled = false,\n size,\n accentColor,\n label,\n labelPosition = 'right',\n className = '',\n activeColor,\n color,\n}: ToggleSwitchViewProps) {\n const base = useToggleBase(size, { activeColor, color });\n const accent = accentColor || base.activeColor || 'var(--color-toggle-on)';\n const labelColor = base.color || (disabled ? 'var(--color-text-muted)' : 'var(--color-text-primary)');\n const { trackW, trackH, thumb, fontSize } = base;\n const thumbLeft = checked ? `calc(${trackW}px - ${thumb + 2}px)` : '2px';\n\n const trackStyle: CSSProperties = {\n position: 'relative',\n width: trackW,\n height: trackH,\n borderRadius: 999,\n flexShrink: 0,\n cursor: disabled ? 'not-allowed' : 'pointer',\n transition: 'background 160ms, border-color 160ms',\n ...(disabled\n ? {\n background: 'transparent',\n border: '1.5px dashed var(--color-text-muted)',\n opacity: 0.5,\n }\n : checked\n ? {\n background: accent,\n border: '1.5px solid transparent',\n }\n : {\n background: 'color-mix(in srgb, var(--color-text-primary) 10%, transparent)',\n border: '1.5px solid color-mix(in srgb, var(--color-text-primary) 20%, transparent)',\n }),\n };\n\n const thumbStyle: CSSProperties = {\n position: 'absolute',\n top: '50%',\n left: thumbLeft,\n transform: 'translateY(-50%)',\n width: thumb,\n height: thumb,\n borderRadius: '50%',\n background: disabled ? 'var(--color-text-muted)' : 'var(--color-toggle-thumb)',\n transition: 'left 160ms',\n boxShadow: '0 1px 3px rgba(0,0,0,0.3)',\n pointerEvents: 'none',\n };\n\n const toggle = (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n disabled={disabled}\n onClick={() => !disabled && onChange(!checked)}\n style={trackStyle}\n className={className}\n >\n <span style={thumbStyle} />\n </button>\n );\n\n if (!label) return toggle;\n\n return (\n <div style={{ display: 'flex', alignItems: 'center', gap: '8px' }}>\n {labelPosition === 'left' && (\n <span style={{ fontSize, color: labelColor, userSelect: 'none' }}>\n {label}\n </span>\n )}\n {toggle}\n {labelPosition === 'right' && (\n <span style={{ fontSize, color: labelColor, userSelect: 'none' }}>\n {label}\n </span>\n )}\n </div>\n );\n}\n","import type { CSSProperties } from 'react';\nimport { CheckIcon } from '../../../icons';\nimport type { DuiSize } from '../../core/DuiTypes';\nimport { useDui } from '../../core/DuiContext';\nimport { DUI_CHECKBOX, DUI_FONT_SIZE } from '../../core/DuiTokens';\n\nconst DUI_SIZES: DuiSize[] = ['xxs', 'xs', 'sm', 'md', 'lg', 'xl', 'xxl', 'xxxl'];\n\n/** @deprecated Use `DuiSize` directly. */\nexport type CheckboxSize = DuiSize;\n\nexport interface CheckboxViewProps {\n checked: boolean;\n onChange?: (checked: boolean) => void;\n disabled?: boolean;\n indeterminate?: boolean;\n /** Falls back to DuiProvider size when omitted. */\n size?: DuiSize;\n accentColor?: string;\n label?: string;\n className?: string;\n}\n\nexport function CheckboxView({\n checked,\n onChange,\n disabled = false,\n indeterminate = false,\n size,\n accentColor,\n label,\n className = '',\n}: CheckboxViewProps) {\n const ctx = useDui();\n const s = size ?? ctx.size;\n const accent = accentColor || 'var(--color-primary)';\n const { box, icon } = DUI_CHECKBOX[s];\n // Label font is one size step smaller than the checkbox box size for compact look\n const labelS = DUI_SIZES[Math.max(0, DUI_SIZES.indexOf(s) - 1)];\n const font = DUI_FONT_SIZE[labelS];\n const isActive = checked || indeterminate;\n\n const boxStyle: CSSProperties = {\n width: box,\n height: box,\n borderRadius: 3,\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n cursor: disabled ? 'not-allowed' : 'pointer',\n transition: 'background 120ms, border-color 120ms',\n border: isActive\n ? 'none'\n : `1.5px solid color-mix(in srgb, var(--color-text-primary) 28%, transparent)`,\n background: isActive ? accent : 'transparent',\n opacity: disabled ? 0.5 : 1,\n };\n\n const box_ = (\n <button\n type=\"button\"\n role=\"checkbox\"\n aria-checked={indeterminate ? 'mixed' : checked}\n disabled={disabled}\n onClick={() => !disabled && onChange?.(!checked)}\n style={boxStyle}\n className={className}\n >\n {indeterminate ? (\n <span style={{ width: icon - 2, height: 2, background: 'var(--color-surface)', borderRadius: 1 }} />\n ) : checked ? (\n <CheckIcon size={icon} style={{ color: 'var(--color-surface)', strokeWidth: 3 }} />\n ) : null}\n </button>\n );\n\n if (!label) return box_;\n\n return (\n <div\n style={{ display: 'flex', alignItems: 'center', gap: '6px', cursor: disabled ? 'not-allowed' : 'pointer' }}\n onClick={() => !disabled && onChange?.(!checked)}\n >\n {box_}\n <span style={{ fontSize: font, color: disabled ? 'var(--color-text-muted)' : 'var(--color-text-secondary)', userSelect: 'none' }}>\n {label}\n </span>\n </div>\n );\n}\n","import { useState, type CSSProperties, type DragEvent } from 'react';\nimport type { DuiSize } from '../../core/DuiTypes';\nimport { CheckboxView } from '../input/CheckboxView';\nimport './RearrangeView.css';\n\nexport interface RearrangeItem {\n /** Stable unique id. */\n id: string;\n /** Visible label (or pass `render` for custom content). */\n label?: string;\n /** Enabled state — shows a checkbox when `selectable` is on. */\n enabled?: boolean;\n /** Optional leading glyph / emoji. */\n icon?: string;\n /** Optional custom row content (overrides label). */\n render?: () => React.ReactNode;\n /** Lock this row from being reordered or toggled. */\n locked?: boolean;\n}\n\nexport interface RearrangeViewProps {\n items: RearrangeItem[];\n /** Fired with the new ordered/toggled list on any change. */\n onChange: (items: RearrangeItem[]) => void;\n /** Show an enable/disable checkbox per row. Default: true. */\n selectable?: boolean;\n /** Accent color (CSS var or value) for the active drop indicator + checkbox. */\n accentColor?: string;\n size?: DuiSize;\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * RearrangeView — a drag-to-reorder list with an optional enable/disable checkbox\n * per row. Theme-aware (DUI CSS variables). Reordering uses native HTML5 drag and\n * drop with a live drop indicator; the checkbox uses DUI's CheckboxView.\n */\nexport function RearrangeView({\n items,\n onChange,\n selectable = true,\n accentColor = 'var(--dui-accent, var(--color-accent, #6366f1))',\n size = 'md',\n className = '',\n style,\n}: RearrangeViewProps) {\n const [dragId, setDragId] = useState<string | null>(null);\n const [overId, setOverId] = useState<string | null>(null);\n\n const move = (fromId: string, toId: string) => {\n if (fromId === toId) return;\n const from = items.findIndex((i) => i.id === fromId);\n const to = items.findIndex((i) => i.id === toId);\n if (from < 0 || to < 0) return;\n const next = [...items];\n const [moved] = next.splice(from, 1);\n next.splice(to, 0, moved);\n onChange(next);\n };\n\n const onDrop = (e: DragEvent, toId: string) => {\n e.preventDefault();\n if (dragId) move(dragId, toId);\n setDragId(null);\n setOverId(null);\n };\n\n return (\n <div\n className={`dui-rearrange dui-rearrange--${size} ${className}`}\n style={{ ['--dui-rearrange-accent' as string]: accentColor, ...style }}\n >\n {items.map((item) => {\n const dragging = dragId === item.id;\n const over = overId === item.id && dragId !== item.id;\n return (\n <div\n key={item.id}\n className={`dui-rearrange-row${dragging ? ' is-dragging' : ''}${over ? ' is-over' : ''}${item.enabled === false ? ' is-disabled' : ''}${item.locked ? ' is-locked' : ''}`}\n draggable={!item.locked}\n onDragStart={() => !item.locked && setDragId(item.id)}\n onDragOver={(e) => { e.preventDefault(); setOverId(item.id); }}\n onDrop={(e) => onDrop(e, item.id)}\n onDragEnd={() => { setDragId(null); setOverId(null); }}\n >\n <span className=\"dui-rearrange-handle\" aria-hidden title={item.locked ? 'Locked' : 'Drag to reorder'}>\n {item.locked ? '🔒' : '⠿'}\n </span>\n\n {selectable && (\n <CheckboxView\n checked={item.enabled !== false}\n disabled={item.locked}\n size={size}\n onChange={(checked) => onChange(items.map((i) => (i.id === item.id ? { ...i, enabled: checked } : i)))}\n />\n )}\n\n <div className=\"dui-rearrange-body\">\n {item.render\n ? item.render()\n : (<>{item.icon && <span className=\"dui-rearrange-icon\">{item.icon}</span>}<span className=\"dui-rearrange-label\">{item.label ?? item.id}</span></>)}\n </div>\n </div>\n );\n })}\n </div>\n );\n}\n","import type { CSSProperties } from 'react';\nimport type { DuiSize } from '../../core/DuiTypes';\nimport './SliderView.css';\n\nexport interface SliderViewProps {\n value: number;\n onChange: (value: number) => void;\n min?: number;\n max?: number;\n step?: number;\n disabled?: boolean;\n size?: DuiSize;\n accentColor?: string;\n showValue?: boolean;\n width?: number | string;\n className?: string;\n}\n\nexport function SliderView({\n value,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n disabled = false,\n accentColor,\n showValue = false,\n width = '120px',\n className = '',\n}: SliderViewProps) {\n const accent = accentColor || 'var(--color-primary)';\n const pct = Math.min(100, Math.max(0, ((value - min) / (max - min)) * 100));\n\n const sliderStyle: CSSProperties = {\n '--dui-slider-accent': accent,\n background: `linear-gradient(to right, ${accent} ${pct}%, var(--color-surface-border, #3a3a3a) ${pct}%)`,\n width: typeof width === 'number' ? `${width}px` : width,\n } as CSSProperties;\n\n return (\n <div className={`dui-slider ${className}`}>\n <input\n type=\"range\"\n className=\"dui-slider__input\"\n value={value}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n onChange={(e) => onChange(parseFloat(e.target.value))}\n style={sliderStyle}\n />\n {showValue && (\n <span style={{ fontSize: '11px', fontFamily: 'monospace', color: 'var(--color-text-muted)', minWidth: '30px', textAlign: 'right', marginLeft: '6px' }}>\n {value}\n </span>\n )}\n </div>\n );\n}\n","import { useEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport './ModalView.css';\n\n// Auto-incrementing layer counter — each ModalView instance gets a unique, ever-growing\n// layer so that modals opened later always stack above earlier ones regardless of DOM order.\nlet _mountLayer = 0;\n\nexport type ModalSize = 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * 'popout' — centered overlay with backdrop, portalled to document.body (default)\n * 'inline' — bare card with no backdrop, no portal; parent controls positioning\n */\nexport type ModalMode = 'popout' | 'inline';\n\nexport interface ModalViewProps {\n open: boolean;\n onClose: () => void;\n title?: string;\n /** Secondary text shown below the title in the header */\n subtitle?: string;\n /** Node rendered to the left of the title block — e.g. a coloured icon circle */\n headerIcon?: React.ReactNode;\n children?: React.ReactNode;\n footerLeft?: React.ReactNode;\n footerRight?: React.ReactNode;\n size?: ModalSize;\n showCloseIcon?: boolean;\n /** Optional CSS color value for a tinted header background (e.g. 'var(--color-protocol-rest)') */\n headerColor?: string;\n /** When true, renders the header as a left→right gradient (accent tint → surface) instead of a flat tint */\n headerGradient?: boolean;\n /** Optional node rendered in the header right area, before the X button */\n headerRight?: React.ReactNode;\n /** When true, removes body padding (e.g. for full-bleed editor modals) */\n noPadding?: boolean;\n /** When true, uses var(--color-elevated) for the card background instead of var(--color-surface) */\n elevated?: boolean;\n className?: string;\n /**\n * 'popout' (default) — portal + backdrop + centered overlay\n * 'inline' — bare card, no portal, no backdrop; parent div handles positioning\n */\n mode?: ModalMode;\n /** Override the default 85vh max-height of the modal card */\n maxHeight?: string;\n /** Extra styles merged onto the body div (e.g. flex column layout for nested flex children) */\n bodyStyle?: React.CSSProperties;\n}\n\nconst SIZE_MAP: Record<ModalSize, string> = {\n sm: '420px',\n md: '560px',\n lg: '720px',\n xl: '920px',\n};\n\nexport function ModalView({\n open,\n onClose,\n title,\n subtitle,\n headerIcon,\n children,\n footerLeft,\n footerRight,\n size = 'md',\n showCloseIcon = true,\n headerColor,\n headerGradient = false,\n headerRight,\n noPadding = false,\n elevated = false,\n mode = 'popout',\n maxHeight,\n bodyStyle,\n}: ModalViewProps) {\n // Stable layer index per component instance — never decrements so no duplicate z-values\n const [layer] = useState(() => ++_mountLayer);\n\n useEffect(() => {\n if (!open) return;\n const onKey = (e: KeyboardEvent) => { if (e.key === 'Escape') onClose(); };\n document.addEventListener('keydown', onKey);\n return () => document.removeEventListener('keydown', onKey);\n }, [open, onClose]);\n\n if (!open) return null;\n\n const surfaceBase = elevated ? 'var(--color-elevated)' : 'var(--color-surface)';\n\n const card = (\n <div\n style={{\n background: surfaceBase,\n border: '1px solid var(--color-surface-border)',\n borderRadius: '10px',\n width: '100%',\n ...(mode === 'popout' ? { maxWidth: SIZE_MAP[size], maxHeight: maxHeight ?? '85vh' } : {}),\n display: 'flex',\n flexDirection: 'column',\n boxShadow: '0 20px 60px rgba(0,0,0,0.5)',\n overflow: 'hidden',\n }}\n onClick={e => e.stopPropagation()}\n >\n {/* Header */}\n {(title || showCloseIcon) && (\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n padding: '12px 16px',\n borderBottom: '1px solid var(--color-surface-border)',\n flexShrink: 0,\n ...(headerColor ? {\n background: headerGradient\n ? `linear-gradient(to right, color-mix(in srgb, ${headerColor} 15%, ${surfaceBase}), ${surfaceBase})`\n : `color-mix(in srgb, ${headerColor} 12%, ${surfaceBase})`,\n borderBottom: `1px solid color-mix(in srgb, ${headerColor} 30%, var(--color-surface-border))`,\n } : {}),\n }}>\n {headerIcon && (\n <div style={{ flexShrink: 0 }}>{headerIcon}</div>\n )}\n {title && (\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{\n fontSize: mode === 'inline' ? '13px' : '14px',\n fontWeight: 600,\n color: headerColor\n ? `color-mix(in srgb, ${headerColor} 80%, var(--color-text-primary))`\n : 'var(--color-text-primary)',\n }}>\n {title}\n </div>\n {subtitle && (\n <div style={{ fontSize: '11px', color: 'var(--color-text-muted)', marginTop: 1 }}>\n {subtitle}\n </div>\n )}\n </div>\n )}\n <div style={{ display: 'flex', alignItems: 'center', gap: 8, marginLeft: 'auto', flexShrink: 0 }}>\n {headerRight}\n {showCloseIcon && (\n <button\n type=\"button\"\n onClick={onClose}\n className=\"dui_modal__close-btn\"\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: 22,\n height: 22,\n borderRadius: 5,\n border: 'none',\n background: 'transparent',\n cursor: 'pointer',\n fontSize: mode === 'inline' ? 13 : 15,\n lineHeight: 1,\n fontWeight: 400,\n padding: 0,\n }}\n title=\"Close\"\n >\n ✕\n </button>\n )}\n </div>\n </div>\n )}\n\n {/* Body */}\n <div\n className=\"dui_modal__body\"\n style={{\n flex: 1,\n overflowY: 'auto',\n padding: noPadding ? 0 : mode === 'inline' ? '14px 12px 14px 16px' : '18px 12px 18px 18px',\n ...bodyStyle,\n }}\n >\n {children}\n </div>\n\n {/* Footer */}\n {(footerLeft || footerRight) && (\n <div style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: mode === 'inline' ? '10px 16px' : '12px 18px',\n borderTop: '1px solid var(--color-surface-border)',\n flexShrink: 0,\n }}>\n <div style={{ display: 'flex', gap: '8px', alignItems: 'center' }}>\n {footerLeft}\n </div>\n <div style={{ display: 'flex', gap: '8px', alignItems: 'center' }}>\n {footerRight}\n </div>\n </div>\n )}\n </div>\n );\n\n // Inline: bare card, no portal, no backdrop — parent handles positioning\n if (mode === 'inline') return card;\n\n // Modal: portal + backdrop + centering\n return createPortal(\n <div\n style={{\n position: 'fixed',\n inset: 0,\n zIndex: 1000 + layer * 50,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: 'var(--color-modal-backdrop)',\n backdropFilter: 'blur(2px)',\n }}\n // backdrop click intentionally does NOT close — per design rules\n >\n {card}\n </div>,\n document.body,\n );\n}\n","export type LoaderVariant = 'spinner' | 'dots' | 'skeleton' | 'pulse' | 'progress-bar';\nexport type LoaderSize = 'sm' | 'md' | 'lg';\n\nexport interface LoaderViewProps {\n variant?: LoaderVariant;\n size?: LoaderSize;\n accentColor?: string;\n label?: string;\n fullscreen?: boolean;\n progress?: number; // 0–100 for progress-bar only\n className?: string;\n}\n\nconst SPINNER_SIZE: Record<LoaderSize, number> = { sm: 16, md: 24, lg: 36 };\nconst LABEL_SIZE: Record<LoaderSize, string> = { sm: '10px', md: '11px', lg: '12px' };\n\nfunction Spinner({ size, accent }: { size: LoaderSize; accent: string }) {\n const s = SPINNER_SIZE[size];\n return (\n <span\n className=\"animate-spin\"\n style={{\n display: 'inline-block',\n width: s,\n height: s,\n borderRadius: '50%',\n border: `2px solid color-mix(in srgb, ${accent} 20%, transparent)`,\n borderTopColor: accent,\n flexShrink: 0,\n }}\n />\n );\n}\n\nfunction Dots({ size, accent }: { size: LoaderSize; accent: string }) {\n const d = size === 'sm' ? 6 : size === 'md' ? 8 : 10;\n return (\n <div style={{ display: 'flex', gap: d / 2, alignItems: 'center' }}>\n {[0, 1, 2].map(i => (\n <span\n key={i}\n className=\"animate-bounce\"\n style={{\n display: 'inline-block',\n width: d,\n height: d,\n borderRadius: '50%',\n background: accent,\n animationDelay: `${i * 120}ms`,\n flexShrink: 0,\n }}\n />\n ))}\n </div>\n );\n}\n\nfunction Skeleton({ size }: { size: LoaderSize }) {\n const heights = size === 'sm' ? [10, 10, 6] : size === 'md' ? [12, 12, 8] : [14, 14, 10];\n const widths = ['100%', '80%', '60%'];\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: heights[0] * 0.75, width: '100%' }}>\n {heights.map((h, i) => (\n <span\n key={i}\n className=\"animate-pulse\"\n style={{\n display: 'block',\n height: h,\n width: widths[i],\n borderRadius: 4,\n background: 'var(--color-loader-track)',\n }}\n />\n ))}\n </div>\n );\n}\n\nfunction Pulse({ size, accent }: { size: LoaderSize; accent: string }) {\n const s = SPINNER_SIZE[size];\n return (\n <span\n className=\"animate-pulse\"\n style={{\n display: 'inline-block',\n width: s,\n height: s,\n borderRadius: '50%',\n background: `color-mix(in srgb, ${accent} 40%, transparent)`,\n flexShrink: 0,\n }}\n />\n );\n}\n\nfunction ProgressBar({ size, accent, progress = 0 }: { size: LoaderSize; accent: string; progress?: number }) {\n const h = size === 'sm' ? 3 : size === 'md' ? 4 : 6;\n const pct = Math.max(0, Math.min(100, progress));\n return (\n <div style={{\n width: '100%',\n height: h,\n borderRadius: 999,\n background: `color-mix(in srgb, ${accent} 15%, transparent)`,\n overflow: 'hidden',\n }}>\n <div style={{\n height: '100%',\n width: `${pct}%`,\n borderRadius: 999,\n background: accent,\n transition: 'width 300ms ease',\n }} />\n </div>\n );\n}\n\nexport function LoaderView({\n variant = 'spinner',\n size = 'md',\n accentColor,\n label,\n fullscreen = false,\n progress,\n className = '',\n}: LoaderViewProps) {\n const accent = accentColor || 'var(--color-loader-accent)';\n\n const inner = (\n <div\n className={className}\n style={{\n display: 'flex',\n flexDirection: variant === 'progress-bar' ? 'column' : 'row',\n alignItems: 'center',\n gap: '8px',\n width: variant === 'skeleton' || variant === 'progress-bar' ? '100%' : 'auto',\n }}\n >\n {variant === 'spinner' && <Spinner size={size} accent={accent} />}\n {variant === 'dots' && <Dots size={size} accent={accent} />}\n {variant === 'skeleton' && <Skeleton size={size} />}\n {variant === 'pulse' && <Pulse size={size} accent={accent} />}\n {variant === 'progress-bar' && <ProgressBar size={size} accent={accent} progress={progress} />}\n {label && variant !== 'skeleton' && (\n <span style={{ fontSize: LABEL_SIZE[size], color: 'var(--color-text-muted)' }}>{label}</span>\n )}\n </div>\n );\n\n if (fullscreen) {\n return (\n <div style={{\n position: 'fixed', inset: 0,\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n background: 'rgba(0,0,0,0.4)', zIndex: 900,\n }}>\n {inner}\n </div>\n );\n }\n\n return inner;\n}\n","import './EmptyStateView.css';\n\nexport interface EmptyStateAction {\n label: string;\n onClick: () => void;\n}\n\nexport interface EmptyStateViewProps {\n icon?: React.ReactNode;\n title: string;\n message?: string;\n action?: EmptyStateAction;\n accentColor?: string;\n compact?: boolean;\n className?: string;\n}\n\nexport function EmptyStateView({\n icon,\n title,\n message,\n action,\n accentColor,\n compact = false,\n className = '',\n}: EmptyStateViewProps) {\n const accent = accentColor || 'var(--color-primary)';\n\n return (\n <div\n className={className}\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n padding: compact ? '20px 16px' : '40px 24px',\n gap: compact ? '8px' : '12px',\n textAlign: 'center',\n width: '100%',\n }}\n >\n {icon && (\n <div style={{\n color: 'var(--color-emptystate-icon)',\n opacity: 0.5,\n marginBottom: compact ? 0 : '4px',\n }}>\n {icon}\n </div>\n )}\n\n <div style={{ display: 'flex', flexDirection: 'column', gap: compact ? '4px' : '6px' }}>\n <span style={{\n fontSize: compact ? '12px' : '13px',\n fontWeight: 500,\n color: 'var(--color-emptystate-title)',\n }}>\n {title}\n </span>\n {message && (\n <span style={{\n fontSize: compact ? '11px' : '12px',\n color: 'var(--color-emptystate-desc)',\n lineHeight: 1.5,\n maxWidth: '320px',\n }}>\n {message}\n </span>\n )}\n </div>\n\n {action && (\n <button\n type=\"button\"\n onClick={action.onClick}\n className=\"dui_empty-state__action\"\n style={{\n marginTop: '4px',\n padding: '5px 14px',\n height: '26px',\n fontSize: '11px',\n fontWeight: 500,\n borderRadius: '5px',\n border: `1px solid color-mix(in srgb, ${accent} 40%, transparent)`,\n background: `color-mix(in srgb, ${accent} 10%, transparent)`,\n color: accent,\n cursor: 'pointer',\n '--dui-empty-accent': accent,\n } as React.CSSProperties}\n >\n {action.label}\n </button>\n )}\n </div>\n );\n}\n","export type StatusState = 'idle' | 'connecting' | 'connected' | 'disconnected' | 'error';\nexport type StatusSize = 'sm' | 'md' | 'lg';\n\nexport interface StatusIndicatorViewProps {\n status: StatusState;\n label?: string;\n /** Secondary text shown below the label */\n subtext?: string;\n showLabel?: boolean;\n size?: StatusSize;\n /** Override the dot + label color (CSS variable or value) */\n accentColor?: string;\n className?: string;\n}\n\nconst STATUS_COLOR: Record<StatusState, string> = {\n idle: 'var(--color-text-muted)',\n connecting: 'var(--color-warning)',\n connected: 'var(--color-success)',\n disconnected: 'var(--color-text-muted)',\n error: 'var(--color-error)',\n};\n\nconst STATUS_LABEL: Record<StatusState, string> = {\n idle: 'Idle',\n connecting: 'Connecting',\n connected: 'Connected',\n disconnected: 'Disconnected',\n error: 'Error',\n};\n\nconst DOT_SIZE: Record<StatusSize, number> = { sm: 6, md: 8, lg: 10 };\nconst FONT_SIZE: Record<StatusSize, string> = { sm: '10px', md: '11px', lg: '12px' };\n\nexport function StatusIndicatorView({\n status,\n label,\n subtext,\n showLabel = true,\n size = 'md',\n accentColor,\n className = '',\n}: StatusIndicatorViewProps) {\n const color = accentColor ?? STATUS_COLOR[status];\n const dot = DOT_SIZE[size];\n const font = FONT_SIZE[size];\n const displayLabel = label ?? STATUS_LABEL[status];\n const isPulsing = status === 'connecting' || status === 'connected';\n\n return (\n <div\n className={className}\n style={{ display: 'inline-flex', alignItems: 'center', gap: size === 'sm' ? '5px' : '6px' }}\n >\n <span style={{ position: 'relative', display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0 }}>\n {/* Pulse ring — only when connecting/connected */}\n {isPulsing && (\n <span\n className=\"animate-ping\"\n style={{\n position: 'absolute',\n width: dot + 4,\n height: dot + 4,\n borderRadius: '50%',\n background: color,\n opacity: 0.35,\n }}\n />\n )}\n {/* Dot */}\n <span style={{ width: dot, height: dot, borderRadius: '50%', background: color, flexShrink: 0, position: 'relative' }} />\n </span>\n {showLabel && (\n <span style={{ display: 'flex', flexDirection: 'column', gap: 1 }}>\n <span style={{ fontSize: font, color: 'var(--color-text-secondary)', fontWeight: 500 }}>\n {displayLabel}\n </span>\n {subtext && (\n <span style={{ fontSize: '9px', color: 'var(--color-text-muted)', fontWeight: 400 }}>\n {subtext}\n </span>\n )}\n </span>\n )}\n </div>\n );\n}\n","import { useEffect, useLayoutEffect, useRef, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { ExternalLinkIcon } from '../../../icons';\n\nexport interface InfoPopupItem {\n code: string;\n description: string;\n}\n\nexport interface InfoPopupViewProps {\n open: boolean;\n onClose: () => void;\n anchorEl?: HTMLElement | null;\n title: string;\n description?: string;\n items?: InfoPopupItem[];\n footer?: string;\n wikiLabel?: string;\n wikiHref?: string;\n width?: number;\n}\n\nexport function InfoPopupView({\n open,\n onClose,\n anchorEl,\n title,\n description,\n items,\n footer,\n wikiLabel = 'Open Wiki →',\n wikiHref,\n width = 320,\n}: InfoPopupViewProps) {\n const popRef = useRef<HTMLDivElement>(null);\n // Start hidden; made visible after we measure actual size\n const [pos, setPos] = useState<{ top: number; left: number; visible: boolean }>({\n top: -9999, left: -9999, visible: false,\n });\n\n // Outside-click and Escape listeners\n useEffect(() => {\n if (!open) return;\n const handle = (e: MouseEvent) => {\n if (popRef.current?.contains(e.target as Node)) return;\n if (anchorEl?.contains(e.target as Node)) return;\n onClose();\n };\n const onKey = (e: KeyboardEvent) => { if (e.key === 'Escape') onClose(); };\n document.addEventListener('mousedown', handle);\n document.addEventListener('keydown', onKey);\n return () => {\n document.removeEventListener('mousedown', handle);\n document.removeEventListener('keydown', onKey);\n };\n }, [open, onClose, anchorEl]);\n\n // Reset visibility when closed\n useEffect(() => {\n if (!open) setPos(p => ({ ...p, visible: false }));\n }, [open]);\n\n // Render-then-measure: after popup mounts, compute viewport-safe position.\n // Re-runs on scroll/resize so the popup tracks the anchor element.\n useLayoutEffect(() => {\n if (!open || !popRef.current) return;\n\n const place = () => {\n if (!popRef.current) return;\n const pop = popRef.current.getBoundingClientRect();\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n\n if (!anchorEl) {\n setPos({\n top: Math.max(8, (vh - pop.height) / 2),\n left: Math.max(8, (vw - pop.width) / 2),\n visible: true,\n });\n return;\n }\n\n const btn = anchorEl.getBoundingClientRect();\n\n let left = btn.left;\n let top = btn.bottom + 6;\n\n if (left + pop.width > vw - 8) left = btn.right - pop.width;\n if (top + pop.height > vh - 8) top = btn.top - pop.height - 6;\n\n left = Math.max(8, Math.min(left, vw - pop.width - 8));\n top = Math.max(8, Math.min(top, vh - pop.height - 8));\n\n setPos({ top, left, visible: true });\n };\n\n const id = requestAnimationFrame(place);\n // Reposition when any ancestor scrolls or window resizes\n window.addEventListener('scroll', place, { passive: true, capture: true });\n window.addEventListener('resize', place);\n return () => {\n cancelAnimationFrame(id);\n window.removeEventListener('scroll', place, { capture: true });\n window.removeEventListener('resize', place);\n };\n }, [open, anchorEl]);\n\n if (!open) return null;\n\n const popup = (\n <div\n ref={popRef}\n style={{\n position: 'fixed',\n top: pos.top,\n left: pos.left,\n width,\n visibility: pos.visible ? 'visible' : 'hidden',\n background: 'var(--color-surface)',\n border: '1px solid var(--color-surface-border)',\n borderRadius: '10px',\n boxShadow: '0 12px 40px rgba(0,0,0,0.45)',\n zIndex: 1100,\n overflow: 'hidden',\n }}\n >\n {/* Title */}\n <div style={{ padding: '12px 14px 8px', borderBottom: '1px solid var(--color-surface-border)' }}>\n <span style={{ fontSize: '12px', fontWeight: 700, color: 'var(--color-text-primary)' }}>{title}</span>\n </div>\n\n {/* Body */}\n <div style={{ padding: '10px 14px', display: 'flex', flexDirection: 'column', gap: '8px' }}>\n {description && (\n <p style={{ margin: 0, fontSize: '11px', color: 'var(--color-text-secondary)', lineHeight: 1.55 }}>\n {description}\n </p>\n )}\n {items && items.length > 0 && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: '5px' }}>\n {items.map((item, i) => (\n <div key={i} style={{ display: 'flex', alignItems: 'flex-start', gap: '8px' }}>\n <span style={{\n flexShrink: 0,\n padding: '1px 7px',\n borderRadius: '4px',\n fontSize: '10px',\n fontFamily: 'monospace',\n background: 'color-mix(in srgb, var(--color-accent) 12%, transparent)',\n color: 'var(--color-accent)',\n border: '1px solid color-mix(in srgb, var(--color-accent) 22%, transparent)',\n }}>\n {item.code}\n </span>\n <span style={{ fontSize: '11px', color: 'var(--color-text-muted)', lineHeight: 1.4, paddingTop: '1px' }}>\n {item.description}\n </span>\n </div>\n ))}\n </div>\n )}\n {footer && (\n <p style={{ margin: 0, fontSize: '10px', color: 'var(--color-text-muted)', lineHeight: 1.4, fontStyle: 'italic' }}>\n {footer}\n </p>\n )}\n </div>\n\n {/* Wiki link */}\n {wikiHref && (\n <div style={{ padding: '8px 14px', borderTop: '1px solid var(--color-surface-border)' }}>\n <a\n href={wikiHref}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '4px',\n fontSize: '11px',\n color: 'var(--color-accent)',\n textDecoration: 'none',\n fontWeight: 500,\n }}\n >\n {wikiLabel}\n <ExternalLinkIcon size={10} />\n </a>\n </div>\n )}\n </div>\n );\n\n return createPortal(popup, document.body);\n}\n","import { useState, useRef, useEffect } from 'react';\n\nexport type SplitDirection = 'horizontal' | 'vertical';\n\nexport interface SplitPanelViewProps {\n direction?: SplitDirection;\n first: React.ReactNode;\n second: React.ReactNode;\n /** Initial split (0–100%) for the first panel. Uncontrolled default. */\n defaultSplit?: number;\n /** Controlled split value. When provided, overrides internal state — wire with onResize. */\n split?: number;\n /** Min px size for first panel */\n minFirst?: number;\n /** Min px size for second panel */\n minSecond?: number;\n /** Min % size for first panel (0–100). Takes precedence over minFirst when set — the divider can't drag below this. */\n minFirstPct?: number;\n /** Min % size for second panel (0–100). Takes precedence over minSecond when set. */\n minSecondPct?: number;\n accentColor?: string;\n /** Fired on every drag move and on double-click reset */\n onResize?: (split: number) => void;\n /** Fired once when drag ends (pointer up) or on double-click reset */\n onResizeEnd?: (split: number) => void;\n /** Fired when the handle is clicked without dragging (e.g. to collapse/expand) */\n onHandleClick?: () => void;\n /**\n * Tooltip shown on pill hover. Pass `null` to suppress.\n * Defaults to \"Double-click to reset Alt+/ / Drag to resize\" with a styled kbd badge.\n */\n pillTooltip?: React.ReactNode | null;\n style?: React.CSSProperties;\n className?: string;\n}\n\nconst KBD: React.CSSProperties = {\n fontSize: 9,\n padding: '1px 5px',\n borderRadius: 3,\n background: 'var(--color-panel)',\n fontFamily: 'monospace',\n border: '1px solid color-mix(in srgb, var(--color-text-primary) 15%, transparent)',\n};\n\nconst DEFAULT_PILL_TOOLTIP = (\n <>\n <div>Double-click to reset <kbd style={KBD}>Alt+/</kbd></div>\n <div>Drag to resize</div>\n </>\n);\n\nconst EASE = 'cubic-bezier(0.2, 0.8, 0.2, 1)';\n\nexport function SplitPanelView({\n direction = 'horizontal',\n first,\n second,\n defaultSplit = 50,\n split: splitProp,\n minFirst = 80,\n minSecond = 80,\n minFirstPct,\n minSecondPct,\n accentColor,\n onResize,\n onResizeEnd,\n onHandleClick,\n pillTooltip = DEFAULT_PILL_TOOLTIP,\n style,\n className = '',\n}: SplitPanelViewProps) {\n const [internalSplit, setInternalSplit] = useState(splitProp ?? defaultSplit);\n const [dragging, setDragging] = useState(false);\n const [hovered, setHovered] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const dragActiveRef = useRef(false);\n const hasMovedRef = useRef(false);\n const isHoriz = direction === 'horizontal';\n const accent = accentColor || 'var(--color-primary)';\n const pillActive = dragging || hovered;\n\n // Sync internal split when controlled prop changes\n useEffect(() => {\n if (splitProp !== undefined) setInternalSplit(splitProp);\n }, [splitProp]);\n\n const currentSplit = splitProp !== undefined ? splitProp : internalSplit;\n\n const handlePointerDown = (e: React.PointerEvent) => {\n e.preventDefault();\n (e.target as HTMLElement).setPointerCapture(e.pointerId);\n dragActiveRef.current = true;\n hasMovedRef.current = false;\n setDragging(true);\n };\n\n const handlePointerMove = (e: React.PointerEvent) => {\n if (!dragActiveRef.current || !containerRef.current) return;\n hasMovedRef.current = true;\n const rect = containerRef.current.getBoundingClientRect();\n const total = isHoriz ? rect.width : rect.height;\n const pos = isHoriz ? e.clientX - rect.left : e.clientY - rect.top;\n // Percent thresholds take precedence over px ones — the divider can't cross them.\n const minFirstP = minFirstPct ?? (minFirst / total) * 100;\n const minSecondP = minSecondPct ?? (minSecond / total) * 100;\n const pct = Math.max(\n minFirstP,\n Math.min(100 - minSecondP, (pos / total) * 100),\n );\n setInternalSplit(pct);\n onResize?.(pct);\n };\n\n const handlePointerUp = (e: React.PointerEvent) => {\n (e.target as HTMLElement).releasePointerCapture(e.pointerId);\n dragActiveRef.current = false;\n setDragging(false);\n if (!hasMovedRef.current) {\n onHandleClick?.();\n } else {\n onResizeEnd?.(internalSplit);\n }\n };\n\n const handleDoubleClick = () => {\n setInternalSplit(defaultSplit);\n onResize?.(defaultSplit);\n onResizeEnd?.(defaultSplit);\n };\n\n const firstStyle: React.CSSProperties = isHoriz\n ? { width: `${currentSplit}%`, minWidth: minFirst, height: '100%', overflow: 'hidden',\n transition: dragging ? 'none' : `width 180ms ${EASE}` }\n : { height: `${currentSplit}%`, minHeight: minFirst, width: '100%', overflow: 'hidden',\n transition: dragging ? 'none' : `height 180ms ${EASE}` };\n\n const secondStyle: React.CSSProperties = isHoriz\n ? { flex: 1, minWidth: minSecond, height: '100%', overflow: 'hidden' }\n : { flex: 1, minHeight: minSecond, width: '100%', overflow: 'hidden',\n transition: dragging ? 'none' : `all 180ms ${EASE}` };\n\n const pillW = isHoriz ? 3 : (pillActive ? 80 : 44);\n const pillH = isHoriz ? (pillActive ? 80 : 44) : 3;\n\n return (\n <div\n ref={containerRef}\n className={className}\n style={{\n display: 'flex',\n flexDirection: isHoriz ? 'row' : 'column',\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n ...style,\n }}\n >\n <div style={firstStyle}>{first}</div>\n\n {/* Drag handle */}\n <div\n style={{\n flexShrink: 0,\n width: isHoriz ? 6 : '100%',\n height: isHoriz ? '100%' : 6,\n cursor: isHoriz ? 'col-resize' : 'row-resize',\n position: 'relative',\n userSelect: 'none',\n zIndex: 10,\n }}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n onDoubleClick={handleDoubleClick}\n aria-label=\"Resize panels\"\n >\n {/* Pill indicator */}\n <div\n style={{\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n width: pillW,\n height: pillH,\n borderRadius: 9999,\n background: pillActive ? accent : `color-mix(in srgb, ${accent} 50%, var(--color-surface-border))`,\n transition: `${isHoriz ? 'height' : 'width'} 150ms ease, background 150ms ease`,\n pointerEvents: 'none',\n }}\n />\n\n {/* Tooltip — anchored below pill (vertical) or to the right (horizontal) */}\n {pillTooltip != null && hovered && !dragging && (\n <div\n style={{\n position: 'absolute',\n ...(isHoriz\n ? { left: 'calc(100% + 4px)', top: '50%', transform: 'translateY(-50%)' }\n : { left: '50%', top: 'calc(100% + 4px)', transform: 'translateX(-50%)' }\n ),\n background: 'var(--color-surface)',\n color: 'var(--color-text-primary)',\n fontSize: 11,\n lineHeight: 1.7,\n padding: '6px 10px',\n borderRadius: 8,\n border: '1px solid var(--color-surface-border)',\n boxShadow: '0 4px 16px rgba(0,0,0,0.35)',\n whiteSpace: 'nowrap',\n pointerEvents: 'none',\n zIndex: 9999,\n }}\n >\n {pillTooltip}\n </div>\n )}\n </div>\n\n <div style={secondStyle}>{second}</div>\n </div>\n );\n}\n","import { useState, useRef, useCallback } from 'react';\n\nexport interface ResizablePanelViewProps {\n defaultHeight: number;\n minHeight?: number;\n maxHeight?: number;\n borderRadius?: number;\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function ResizablePanelView({\n defaultHeight,\n minHeight = 40,\n maxHeight = 600,\n borderRadius = 8,\n children,\n className = '',\n style,\n}: ResizablePanelViewProps) {\n const [height, setHeight] = useState(defaultHeight);\n const [gripHovered, setGripHovered] = useState(false);\n const dragRef = useRef<{ startY: number; startHeight: number } | null>(null);\n\n const handlePointerDown = useCallback((e: React.PointerEvent) => {\n e.preventDefault();\n e.stopPropagation();\n (e.target as HTMLElement).setPointerCapture(e.pointerId);\n dragRef.current = { startY: e.clientY, startHeight: height };\n }, [height]);\n\n const handlePointerMove = useCallback((e: React.PointerEvent) => {\n if (!dragRef.current) return;\n const delta = e.clientY - dragRef.current.startY;\n const newH = Math.max(minHeight, Math.min(maxHeight, dragRef.current.startHeight + delta));\n setHeight(newH);\n }, [minHeight, maxHeight]);\n\n const handlePointerUp = useCallback((e: React.PointerEvent) => {\n (e.target as HTMLElement).releasePointerCapture(e.pointerId);\n dragRef.current = null;\n }, []);\n\n return (\n <div\n className={className}\n style={{ position: 'relative', height, ...style }}\n >\n <div style={{\n position: 'absolute',\n inset: 0,\n overflow: 'hidden',\n borderRadius,\n border: '1px solid var(--color-surface-border)',\n }}>\n {children}\n </div>\n\n {/* Bottom-edge resize handle */}\n <div\n style={{\n position: 'absolute',\n bottom: 0,\n left: 0,\n right: 0,\n height: 10,\n cursor: 'ns-resize',\n zIndex: 10,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onMouseEnter={() => setGripHovered(true)}\n onMouseLeave={() => setGripHovered(false)}\n >\n {/* Dashed grip indicator */}\n <div style={{\n width: 40,\n height: 3,\n borderRadius: 9999,\n border: `1px dashed ${gripHovered ? 'var(--color-resizable-grip-hover)' : 'var(--color-resizable-grip)'}`,\n opacity: gripHovered ? 0.7 : 0.3,\n transition: 'opacity 150ms ease, border-color 150ms ease',\n pointerEvents: 'none',\n }} />\n </div>\n </div>\n );\n}\n","import { useState } from 'react';\nimport { ChevronDownIcon, ChevronRightIcon } from '../../../icons';\n\nexport interface DottedCardViewProps {\n children: React.ReactNode;\n title?: string;\n expandable?: boolean;\n defaultExpanded?: boolean;\n accentColor?: string;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function DottedCardView({\n children,\n title,\n expandable = false,\n defaultExpanded = true,\n accentColor,\n className = '',\n style,\n}: DottedCardViewProps) {\n const [expanded, setExpanded] = useState(defaultExpanded);\n const accent = accentColor || 'var(--color-primary)';\n const isOpen = !expandable || expanded;\n\n return (\n <div\n className={className}\n style={{\n border: `1.5px dashed color-mix(in srgb, ${accent} 30%, transparent)`,\n borderRadius: '8px',\n overflow: 'hidden',\n ...style,\n }}\n >\n {(title || expandable) && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n padding: '8px 12px',\n background: `color-mix(in srgb, ${accent} 5%, transparent)`,\n borderBottom: isOpen ? `1px dashed color-mix(in srgb, ${accent} 20%, transparent)` : 'none',\n cursor: expandable ? 'pointer' : 'default',\n userSelect: 'none',\n }}\n onClick={() => expandable && setExpanded(v => !v)}\n >\n {expandable && (\n isOpen\n ? <ChevronDownIcon size={12} style={{ color: accent, flexShrink: 0 }} />\n : <ChevronRightIcon size={12} style={{ color: accent, flexShrink: 0 }} />\n )}\n {title && (\n <span style={{ fontSize: '11px', fontWeight: 600, color: accent }}>\n {title}\n </span>\n )}\n </div>\n )}\n {isOpen && (\n <div style={{ padding: '12px' }}>\n {children}\n </div>\n )}\n </div>\n );\n}\n","export interface ColorToken {\n text: string;\n color?: string; // CSS color / variable — default: var(--color-text-primary)\n bold?: boolean;\n italic?: boolean;\n mono?: boolean;\n underline?: boolean;\n copyable?: boolean; // click to copy this token's text\n}\n\nexport interface ColoredTextViewProps {\n tokens: ColorToken[];\n fontSize?: string;\n lineHeight?: number;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function ColoredTextView({\n tokens,\n fontSize = '12px',\n lineHeight = 1.6,\n className = '',\n style,\n}: ColoredTextViewProps) {\n const handleCopy = async (text: string) => {\n try { await navigator.clipboard.writeText(text); } catch { /* ignore */ }\n };\n\n return (\n <span className={className} style={{ fontSize, lineHeight, ...style }}>\n {tokens.map((t, i) => (\n <span\n key={i}\n onClick={t.copyable ? () => handleCopy(t.text) : undefined}\n title={t.copyable ? `Click to copy: ${t.text}` : undefined}\n style={{\n color: t.color ?? 'var(--color-text-primary)',\n fontWeight: t.bold ? 700 : undefined,\n fontStyle: t.italic ? 'italic' : undefined,\n fontFamily: t.mono ? 'monospace' : undefined,\n textDecoration: t.underline ? 'underline' : undefined,\n cursor: t.copyable ? 'pointer' : undefined,\n }}\n >\n {t.text}\n </span>\n ))}\n </span>\n );\n}\n\n// ─── Convenience: parse simple markup like <tag attr=\"val\">text</tag> ──────────\n// Usage: ColoredTextView.fromXml('<soap:Envelope xmlns:soap=\"...\">')\n// Returns a token array highlighting tag names, attributes, values differently.\n\nexport function parseXmlTokens(xml: string): ColorToken[] {\n const tokens: ColorToken[] = [];\n const re = /(<\\/?)([\\w:.-]+)((?:\\s+[\\w:.-]+=\"[^\"]*\")*)(\\/?>)|([\\w:.-]+=\"[^\"]*\")|(>)|([^<>\"=\\s]+)|(\\s+)/g;\n let m;\n while ((m = re.exec(xml)) !== null) {\n if (m[1] !== undefined) {\n tokens.push({ text: m[1], color: 'var(--color-text-muted)', mono: true });\n tokens.push({ text: m[2], color: 'var(--color-protocol-soap)', mono: true, bold: true });\n if (m[3]) {\n // parse attributes\n m[3].trim().split(/\\s+/).forEach(attr => {\n const [k, ...vParts] = attr.split('=');\n tokens.push({ text: ' ' + k, color: 'var(--color-info)', mono: true });\n if (vParts.length) tokens.push({ text: '=' + vParts.join('='), color: 'var(--color-success)', mono: true });\n });\n }\n tokens.push({ text: m[4], color: 'var(--color-text-muted)', mono: true });\n } else if (m[7]) {\n tokens.push({ text: m[7], color: 'var(--color-text-primary)' });\n } else if (m[8]) {\n tokens.push({ text: m[8] });\n }\n }\n return tokens;\n}\n","export type StatsTrend = 'up' | 'down' | 'neutral';\n\nexport interface StatsCardViewProps {\n label: string;\n value: string | number;\n subValue?: string;\n icon?: React.ReactNode;\n unit?: string;\n trend?: StatsTrend;\n trendValue?: string;\n accentColor?: string;\n compact?: boolean;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function StatsCardView({\n label,\n value,\n subValue,\n icon,\n unit,\n trend,\n trendValue,\n accentColor,\n compact = false,\n className = '',\n style,\n}: StatsCardViewProps) {\n const accent = accentColor || 'var(--color-primary)';\n const trendColor = trend === 'up' ? 'var(--color-statscard-trend-up)' : trend === 'down' ? 'var(--color-statscard-trend-down)' : 'var(--color-text-muted)';\n const trendChar = trend === 'up' ? '↑' : trend === 'down' ? '↓' : '→';\n\n return (\n <div\n className={className}\n style={{\n background: accentColor ? `color-mix(in srgb, ${accentColor} 8%, var(--color-surface))` : 'var(--color-statscard-bg)',\n border: accentColor ? `1px solid color-mix(in srgb, ${accentColor} 20%, transparent)` : '1px solid var(--color-statscard-border)',\n borderRadius: '8px',\n padding: compact ? '10px 12px' : '14px 16px',\n display: 'flex',\n flexDirection: 'column',\n gap: compact ? '4px' : '6px',\n minWidth: compact ? 100 : 130,\n ...style,\n }}\n >\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <span style={{ fontSize: '10px', fontWeight: 600, color: 'var(--color-text-muted)', textTransform: 'uppercase', letterSpacing: '0.06em' }}>\n {label}\n </span>\n {icon && (\n <span style={{ color: accent, opacity: 0.7 }}>{icon}</span>\n )}\n </div>\n\n <div style={{ display: 'flex', alignItems: 'baseline', gap: '4px' }}>\n <span style={{ fontSize: compact ? '18px' : '22px', fontWeight: 700, color: accent, lineHeight: 1 }}>\n {value}\n </span>\n {unit && (\n <span style={{ fontSize: '11px', color: 'var(--color-text-muted)', fontWeight: 500 }}>{unit}</span>\n )}\n </div>\n\n {(subValue || (trend && trendValue)) && (\n <div style={{ display: 'flex', alignItems: 'center', gap: '6px' }}>\n {subValue && (\n <span style={{ fontSize: '10px', color: 'var(--color-text-muted)' }}>{subValue}</span>\n )}\n {trend && trendValue && (\n <span style={{ fontSize: '10px', color: trendColor, fontWeight: 600 }}>\n {trendChar} {trendValue}\n </span>\n )}\n </div>\n )}\n </div>\n );\n}\n","import { useState } from 'react';\nimport { ChevronDownIcon, ChevronRightIcon } from '../../../icons';\nimport type { DuiSize } from '../../core/DuiTypes';\nimport { useDui } from '../../core/DuiContext';\nimport { DUI_HEIGHT, DUI_FONT_SIZE } from '../../core/DuiTokens';\nimport { EmptyStateView } from './EmptyStateView';\nimport './DataTableView.css';\n\nexport interface DataTableColumn<T = Record<string, unknown>> {\n key: string;\n label: string;\n width?: string | number;\n sortable?: boolean;\n renderCell?: (row: T, value: unknown) => React.ReactNode;\n align?: 'left' | 'center' | 'right';\n}\n\nexport interface DataTableViewProps<T = Record<string, unknown>> {\n columns: DataTableColumn<T>[];\n rows: T[];\n keyField?: string;\n onRowClick?: (row: T) => void;\n renderExpanded?: (row: T) => React.ReactNode;\n emptyTitle?: string;\n emptyMessage?: string;\n striped?: boolean;\n /** Reduces padding to match 'sm' size. Prefer `size` for token-aligned sizing. */\n compact?: boolean;\n /** Falls back to DuiProvider size when omitted. */\n size?: DuiSize;\n sortable?: boolean;\n maxHeight?: string;\n className?: string;\n}\n\nexport function DataTableView<T extends Record<string, unknown>>({\n columns,\n rows,\n keyField = 'id',\n onRowClick,\n renderExpanded,\n emptyTitle = 'No data',\n emptyMessage,\n striped = false,\n compact = false,\n size,\n maxHeight,\n className = '',\n}: DataTableViewProps<T>) {\n const ctx = useDui();\n const s = compact ? 'sm' : (size ?? ctx.size);\n const [sortKey, setSortKey] = useState<string | null>(null);\n const [sortAsc, setSortAsc] = useState(true);\n const [expandedKeys, setExpandedKeys] = useState<Set<string>>(new Set());\n\n const handleSort = (col: DataTableColumn<T>) => {\n if (!col.sortable) return;\n if (sortKey === col.key) {\n setSortAsc(a => !a);\n } else {\n setSortKey(col.key);\n setSortAsc(true);\n }\n };\n\n const toggleExpand = (key: string, e: React.MouseEvent) => {\n e.stopPropagation();\n setExpandedKeys(prev => {\n const next = new Set(prev);\n next.has(key) ? next.delete(key) : next.add(key);\n return next;\n });\n };\n\n const sorted = sortKey\n ? [...rows].sort((a, b) => {\n const av = a[sortKey];\n const bv = b[sortKey];\n const cmp = String(av ?? '').localeCompare(String(bv ?? ''));\n return sortAsc ? cmp : -cmp;\n })\n : rows;\n\n const expandCol = renderExpanded ? '28px ' : '';\n const colTemplate = expandCol + columns.map(c => c.width ?? '1fr').join(' ');\n const rowH = DUI_HEIGHT.table[s];\n const cellPad = `${Math.round((rowH - 16) / 2)}px 12px`;\n const fontSize = DUI_FONT_SIZE[s];\n\n // When rows can expand, the table must grow naturally so expanded content\n // pushes siblings down instead of scrolling them out of view.\n const pushMode = !!renderExpanded;\n\n return (\n <div\n className={className}\n style={{\n border: '1px solid var(--color-surface-border)',\n borderRadius: '6px',\n overflow: 'hidden',\n ...(pushMode ? {} : { maxHeight, display: 'flex', flexDirection: 'column' }),\n }}\n >\n {/* Header */}\n <div style={{\n display: 'grid',\n gridTemplateColumns: colTemplate,\n background: 'var(--color-panel)',\n borderBottom: '1px solid var(--color-surface-border)',\n flexShrink: 0,\n }}>\n {renderExpanded && <div />}\n {columns.map(col => (\n <div\n key={col.key}\n onClick={() => handleSort(col)}\n style={{\n padding: cellPad,\n fontSize: '10px',\n fontWeight: 700,\n textTransform: 'uppercase',\n letterSpacing: '0.06em',\n color: 'var(--color-text-muted)',\n cursor: col.sortable ? 'pointer' : 'default',\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n userSelect: 'none',\n textAlign: col.align ?? 'left',\n }}\n >\n {col.label}\n {col.sortable && sortKey === col.key && (\n sortAsc\n ? <ChevronDownIcon size={10} />\n : <ChevronRightIcon size={10} style={{ transform: 'rotate(-90deg)' }} />\n )}\n </div>\n ))}\n </div>\n\n {/* Body — push mode: natural flow so expanded rows push siblings; scroll mode: body scrolls within maxHeight */}\n <div style={pushMode ? {} : { flex: 1, overflowY: 'auto' }}>\n {sorted.length === 0 ? (\n <EmptyStateView title={emptyTitle} message={emptyMessage} compact />\n ) : (\n sorted.map((row, ri) => {\n const rowKey = String(row[keyField] ?? ri);\n const isExpanded = expandedKeys.has(rowKey);\n const bgDefault = striped && ri % 2 === 1\n ? 'var(--color-table-stripe)'\n : 'transparent';\n\n return (\n <div\n key={rowKey}\n style={{\n borderBottom: ri < sorted.length - 1 ? '1px solid var(--color-surface-border)' : 'none',\n }}\n >\n {/* Data row */}\n <div\n onClick={() => onRowClick?.(row)}\n className={`dui_data-table__row${(onRowClick || renderExpanded) ? ' dui_data-table__row--clickable' : ''}`}\n style={{\n display: 'grid',\n gridTemplateColumns: colTemplate,\n background: bgDefault,\n cursor: onRowClick ? 'pointer' : 'default',\n }}\n >\n {/* Expand toggle */}\n {renderExpanded && (\n <div\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n cursor: 'pointer',\n }}\n onClick={e => toggleExpand(rowKey, e)}\n >\n <ChevronRightIcon\n size={12}\n style={{\n color: 'var(--color-text-muted)',\n transition: 'transform 120ms',\n transform: isExpanded ? 'rotate(90deg)' : 'none',\n flexShrink: 0,\n }}\n />\n </div>\n )}\n {columns.map(col => (\n <div\n key={col.key}\n style={{\n padding: cellPad,\n fontSize,\n color: 'var(--color-text-secondary)',\n display: 'flex',\n alignItems: 'center',\n textAlign: col.align ?? 'left',\n overflow: 'hidden',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n }}\n >\n {col.renderCell\n ? col.renderCell(row, row[col.key])\n : <span style={{ overflow: 'hidden', textOverflow: 'ellipsis' }}>{String(row[col.key] ?? '—')}</span>\n }\n </div>\n ))}\n </div>\n\n {/* Expanded row */}\n {renderExpanded && isExpanded && (\n <div style={{\n background: 'color-mix(in srgb, var(--color-text-primary) 3%, transparent)',\n borderTop: '1px solid var(--color-surface-border)',\n }}>\n {renderExpanded(row)}\n </div>\n )}\n </div>\n );\n })\n )}\n </div>\n </div>\n );\n}\n","/* eslint-disable no-multi-assign */\n\nfunction deepFreeze(obj) {\n if (obj instanceof Map) {\n obj.clear =\n obj.delete =\n obj.set =\n function () {\n throw new Error('map is read-only');\n };\n } else if (obj instanceof Set) {\n obj.add =\n obj.clear =\n obj.delete =\n function () {\n throw new Error('set is read-only');\n };\n }\n\n // Freeze self\n Object.freeze(obj);\n\n Object.getOwnPropertyNames(obj).forEach((name) => {\n const prop = obj[name];\n const type = typeof prop;\n\n // Freeze prop if it is an object or function and also not already frozen\n if ((type === 'object' || type === 'function') && !Object.isFrozen(prop)) {\n deepFreeze(prop);\n }\n });\n\n return obj;\n}\n\n/** @typedef {import('highlight.js').CallbackResponse} CallbackResponse */\n/** @typedef {import('highlight.js').CompiledMode} CompiledMode */\n/** @implements CallbackResponse */\n\nclass Response {\n /**\n * @param {CompiledMode} mode\n */\n constructor(mode) {\n // eslint-disable-next-line no-undefined\n if (mode.data === undefined) mode.data = {};\n\n this.data = mode.data;\n this.isMatchIgnored = false;\n }\n\n ignoreMatch() {\n this.isMatchIgnored = true;\n }\n}\n\n/**\n * @param {string} value\n * @returns {string}\n */\nfunction escapeHTML(value) {\n return value\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&#x27;');\n}\n\n/**\n * performs a shallow merge of multiple objects into one\n *\n * @template T\n * @param {T} original\n * @param {Record<string,any>[]} objects\n * @returns {T} a single new object\n */\nfunction inherit$1(original, ...objects) {\n /** @type Record<string,any> */\n const result = Object.create(null);\n\n for (const key in original) {\n result[key] = original[key];\n }\n objects.forEach(function(obj) {\n for (const key in obj) {\n result[key] = obj[key];\n }\n });\n return /** @type {T} */ (result);\n}\n\n/**\n * @typedef {object} Renderer\n * @property {(text: string) => void} addText\n * @property {(node: Node) => void} openNode\n * @property {(node: Node) => void} closeNode\n * @property {() => string} value\n */\n\n/** @typedef {{scope?: string, language?: string, sublanguage?: boolean}} Node */\n/** @typedef {{walk: (r: Renderer) => void}} Tree */\n/** */\n\nconst SPAN_CLOSE = '</span>';\n\n/**\n * Determines if a node needs to be wrapped in <span>\n *\n * @param {Node} node */\nconst emitsWrappingTags = (node) => {\n // rarely we can have a sublanguage where language is undefined\n // TODO: track down why\n return !!node.scope;\n};\n\n/**\n *\n * @param {string} name\n * @param {{prefix:string}} options\n */\nconst scopeToCSSClass = (name, { prefix }) => {\n // sub-language\n if (name.startsWith(\"language:\")) {\n return name.replace(\"language:\", \"language-\");\n }\n // tiered scope: comment.line\n if (name.includes(\".\")) {\n const pieces = name.split(\".\");\n return [\n `${prefix}${pieces.shift()}`,\n ...(pieces.map((x, i) => `${x}${\"_\".repeat(i + 1)}`))\n ].join(\" \");\n }\n // simple scope\n return `${prefix}${name}`;\n};\n\n/** @type {Renderer} */\nclass HTMLRenderer {\n /**\n * Creates a new HTMLRenderer\n *\n * @param {Tree} parseTree - the parse tree (must support `walk` API)\n * @param {{classPrefix: string}} options\n */\n constructor(parseTree, options) {\n this.buffer = \"\";\n this.classPrefix = options.classPrefix;\n parseTree.walk(this);\n }\n\n /**\n * Adds texts to the output stream\n *\n * @param {string} text */\n addText(text) {\n this.buffer += escapeHTML(text);\n }\n\n /**\n * Adds a node open to the output stream (if needed)\n *\n * @param {Node} node */\n openNode(node) {\n if (!emitsWrappingTags(node)) return;\n\n const className = scopeToCSSClass(node.scope,\n { prefix: this.classPrefix });\n this.span(className);\n }\n\n /**\n * Adds a node close to the output stream (if needed)\n *\n * @param {Node} node */\n closeNode(node) {\n if (!emitsWrappingTags(node)) return;\n\n this.buffer += SPAN_CLOSE;\n }\n\n /**\n * returns the accumulated buffer\n */\n value() {\n return this.buffer;\n }\n\n // helpers\n\n /**\n * Builds a span element\n *\n * @param {string} className */\n span(className) {\n this.buffer += `<span class=\"${className}\">`;\n }\n}\n\n/** @typedef {{scope?: string, language?: string, children: Node[]} | string} Node */\n/** @typedef {{scope?: string, language?: string, children: Node[]} } DataNode */\n/** @typedef {import('highlight.js').Emitter} Emitter */\n/** */\n\n/** @returns {DataNode} */\nconst newNode = (opts = {}) => {\n /** @type DataNode */\n const result = { children: [] };\n Object.assign(result, opts);\n return result;\n};\n\nclass TokenTree {\n constructor() {\n /** @type DataNode */\n this.rootNode = newNode();\n this.stack = [this.rootNode];\n }\n\n get top() {\n return this.stack[this.stack.length - 1];\n }\n\n get root() { return this.rootNode; }\n\n /** @param {Node} node */\n add(node) {\n this.top.children.push(node);\n }\n\n /** @param {string} scope */\n openNode(scope) {\n /** @type Node */\n const node = newNode({ scope });\n this.add(node);\n this.stack.push(node);\n }\n\n closeNode() {\n if (this.stack.length > 1) {\n return this.stack.pop();\n }\n // eslint-disable-next-line no-undefined\n return undefined;\n }\n\n closeAllNodes() {\n while (this.closeNode());\n }\n\n toJSON() {\n return JSON.stringify(this.rootNode, null, 4);\n }\n\n /**\n * @typedef { import(\"./html_renderer\").Renderer } Renderer\n * @param {Renderer} builder\n */\n walk(builder) {\n // this does not\n return this.constructor._walk(builder, this.rootNode);\n // this works\n // return TokenTree._walk(builder, this.rootNode);\n }\n\n /**\n * @param {Renderer} builder\n * @param {Node} node\n */\n static _walk(builder, node) {\n if (typeof node === \"string\") {\n builder.addText(node);\n } else if (node.children) {\n builder.openNode(node);\n node.children.forEach((child) => this._walk(builder, child));\n builder.closeNode(node);\n }\n return builder;\n }\n\n /**\n * @param {Node} node\n */\n static _collapse(node) {\n if (typeof node === \"string\") return;\n if (!node.children) return;\n\n if (node.children.every(el => typeof el === \"string\")) {\n // node.text = node.children.join(\"\");\n // delete node.children;\n node.children = [node.children.join(\"\")];\n } else {\n node.children.forEach((child) => {\n TokenTree._collapse(child);\n });\n }\n }\n}\n\n/**\n Currently this is all private API, but this is the minimal API necessary\n that an Emitter must implement to fully support the parser.\n\n Minimal interface:\n\n - addText(text)\n - __addSublanguage(emitter, subLanguageName)\n - startScope(scope)\n - endScope()\n - finalize()\n - toHTML()\n\n*/\n\n/**\n * @implements {Emitter}\n */\nclass TokenTreeEmitter extends TokenTree {\n /**\n * @param {*} options\n */\n constructor(options) {\n super();\n this.options = options;\n }\n\n /**\n * @param {string} text\n */\n addText(text) {\n if (text === \"\") { return; }\n\n this.add(text);\n }\n\n /** @param {string} scope */\n startScope(scope) {\n this.openNode(scope);\n }\n\n endScope() {\n this.closeNode();\n }\n\n /**\n * @param {Emitter & {root: DataNode}} emitter\n * @param {string} name\n */\n __addSublanguage(emitter, name) {\n /** @type DataNode */\n const node = emitter.root;\n if (name) node.scope = `language:${name}`;\n\n this.add(node);\n }\n\n toHTML() {\n const renderer = new HTMLRenderer(this, this.options);\n return renderer.value();\n }\n\n finalize() {\n this.closeAllNodes();\n return true;\n }\n}\n\n/**\n * @param {string} value\n * @returns {RegExp}\n * */\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction source(re) {\n if (!re) return null;\n if (typeof re === \"string\") return re;\n\n return re.source;\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction lookahead(re) {\n return concat('(?=', re, ')');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction anyNumberOfTimes(re) {\n return concat('(?:', re, ')*');\n}\n\n/**\n * @param {RegExp | string } re\n * @returns {string}\n */\nfunction optional(re) {\n return concat('(?:', re, ')?');\n}\n\n/**\n * @param {...(RegExp | string) } args\n * @returns {string}\n */\nfunction concat(...args) {\n const joined = args.map((x) => source(x)).join(\"\");\n return joined;\n}\n\n/**\n * @param { Array<string | RegExp | Object> } args\n * @returns {object}\n */\nfunction stripOptionsFromArgs(args) {\n const opts = args[args.length - 1];\n\n if (typeof opts === 'object' && opts.constructor === Object) {\n args.splice(args.length - 1, 1);\n return opts;\n } else {\n return {};\n }\n}\n\n/** @typedef { {capture?: boolean} } RegexEitherOptions */\n\n/**\n * Any of the passed expresssions may match\n *\n * Creates a huge this | this | that | that match\n * @param {(RegExp | string)[] | [...(RegExp | string)[], RegexEitherOptions]} args\n * @returns {string}\n */\nfunction either(...args) {\n /** @type { object & {capture?: boolean} } */\n const opts = stripOptionsFromArgs(args);\n const joined = '('\n + (opts.capture ? \"\" : \"?:\")\n + args.map((x) => source(x)).join(\"|\") + \")\";\n return joined;\n}\n\n/**\n * @param {RegExp | string} re\n * @returns {number}\n */\nfunction countMatchGroups(re) {\n return (new RegExp(re.toString() + '|')).exec('').length - 1;\n}\n\n/**\n * Does lexeme start with a regular expression match at the beginning\n * @param {RegExp} re\n * @param {string} lexeme\n */\nfunction startsWith(re, lexeme) {\n const match = re && re.exec(lexeme);\n return match && match.index === 0;\n}\n\n// BACKREF_RE matches an open parenthesis or backreference. To avoid\n// an incorrect parse, it additionally matches the following:\n// - [...] elements, where the meaning of parentheses and escapes change\n// - other escape sequences, so we do not misparse escape sequences as\n// interesting elements\n// - non-matching or lookahead parentheses, which do not capture. These\n// follow the '(' with a '?'.\nconst BACKREF_RE = /\\[(?:[^\\\\\\]]|\\\\.)*\\]|\\(\\??|\\\\([1-9][0-9]*)|\\\\./;\n\n// **INTERNAL** Not intended for outside usage\n// join logically computes regexps.join(separator), but fixes the\n// backreferences so they continue to match.\n// it also places each individual regular expression into it's own\n// match group, keeping track of the sequencing of those match groups\n// is currently an exercise for the caller. :-)\n/**\n * @param {(string | RegExp)[]} regexps\n * @param {{joinWith: string}} opts\n * @returns {string}\n */\nfunction _rewriteBackreferences(regexps, { joinWith }) {\n let numCaptures = 0;\n\n return regexps.map((regex) => {\n numCaptures += 1;\n const offset = numCaptures;\n let re = source(regex);\n let out = '';\n\n while (re.length > 0) {\n const match = BACKREF_RE.exec(re);\n if (!match) {\n out += re;\n break;\n }\n out += re.substring(0, match.index);\n re = re.substring(match.index + match[0].length);\n if (match[0][0] === '\\\\' && match[1]) {\n // Adjust the backreference.\n out += '\\\\' + String(Number(match[1]) + offset);\n } else {\n out += match[0];\n if (match[0] === '(') {\n numCaptures++;\n }\n }\n }\n return out;\n }).map(re => `(${re})`).join(joinWith);\n}\n\n/** @typedef {import('highlight.js').Mode} Mode */\n/** @typedef {import('highlight.js').ModeCallback} ModeCallback */\n\n// Common regexps\nconst MATCH_NOTHING_RE = /\\b\\B/;\nconst IDENT_RE = '[a-zA-Z]\\\\w*';\nconst UNDERSCORE_IDENT_RE = '[a-zA-Z_]\\\\w*';\nconst NUMBER_RE = '\\\\b\\\\d+(\\\\.\\\\d+)?';\nconst C_NUMBER_RE = '(-?)(\\\\b0[xX][a-fA-F0-9]+|(\\\\b\\\\d+(\\\\.\\\\d*)?|\\\\.\\\\d+)([eE][-+]?\\\\d+)?)'; // 0x..., 0..., decimal, float\nconst BINARY_NUMBER_RE = '\\\\b(0b[01]+)'; // 0b...\nconst RE_STARTERS_RE = '!|!=|!==|%|%=|&|&&|&=|\\\\*|\\\\*=|\\\\+|\\\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\\\?|\\\\[|\\\\{|\\\\(|\\\\^|\\\\^=|\\\\||\\\\|=|\\\\|\\\\||~';\n\n/**\n* @param { Partial<Mode> & {binary?: string | RegExp} } opts\n*/\nconst SHEBANG = (opts = {}) => {\n const beginShebang = /^#![ ]*\\//;\n if (opts.binary) {\n opts.begin = concat(\n beginShebang,\n /.*\\b/,\n opts.binary,\n /\\b.*/);\n }\n return inherit$1({\n scope: 'meta',\n begin: beginShebang,\n end: /$/,\n relevance: 0,\n /** @type {ModeCallback} */\n \"on:begin\": (m, resp) => {\n if (m.index !== 0) resp.ignoreMatch();\n }\n }, opts);\n};\n\n// Common modes\nconst BACKSLASH_ESCAPE = {\n begin: '\\\\\\\\[\\\\s\\\\S]', relevance: 0\n};\nconst APOS_STRING_MODE = {\n scope: 'string',\n begin: '\\'',\n end: '\\'',\n illegal: '\\\\n',\n contains: [BACKSLASH_ESCAPE]\n};\nconst QUOTE_STRING_MODE = {\n scope: 'string',\n begin: '\"',\n end: '\"',\n illegal: '\\\\n',\n contains: [BACKSLASH_ESCAPE]\n};\nconst PHRASAL_WORDS_MODE = {\n begin: /\\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\\b/\n};\n/**\n * Creates a comment mode\n *\n * @param {string | RegExp} begin\n * @param {string | RegExp} end\n * @param {Mode | {}} [modeOptions]\n * @returns {Partial<Mode>}\n */\nconst COMMENT = function(begin, end, modeOptions = {}) {\n const mode = inherit$1(\n {\n scope: 'comment',\n begin,\n end,\n contains: []\n },\n modeOptions\n );\n mode.contains.push({\n scope: 'doctag',\n // hack to avoid the space from being included. the space is necessary to\n // match here to prevent the plain text rule below from gobbling up doctags\n begin: '[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)',\n end: /(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/,\n excludeBegin: true,\n relevance: 0\n });\n const ENGLISH_WORD = either(\n // list of common 1 and 2 letter words in English\n \"I\",\n \"a\",\n \"is\",\n \"so\",\n \"us\",\n \"to\",\n \"at\",\n \"if\",\n \"in\",\n \"it\",\n \"on\",\n // note: this is not an exhaustive list of contractions, just popular ones\n /[A-Za-z]+['](d|ve|re|ll|t|s|n)/, // contractions - can't we'd they're let's, etc\n /[A-Za-z]+[-][a-z]+/, // `no-way`, etc.\n /[A-Za-z][a-z]{2,}/ // allow capitalized words at beginning of sentences\n );\n // looking like plain text, more likely to be a comment\n mode.contains.push(\n {\n // TODO: how to include \", (, ) without breaking grammars that use these for\n // comment delimiters?\n // begin: /[ ]+([()\"]?([A-Za-z'-]{3,}|is|a|I|so|us|[tT][oO]|at|if|in|it|on)[.]?[()\":]?([.][ ]|[ ]|\\))){3}/\n // ---\n\n // this tries to find sequences of 3 english words in a row (without any\n // \"programming\" type syntax) this gives us a strong signal that we've\n // TRULY found a comment - vs perhaps scanning with the wrong language.\n // It's possible to find something that LOOKS like the start of the\n // comment - but then if there is no readable text - good chance it is a\n // false match and not a comment.\n //\n // for a visual example please see:\n // https://github.com/highlightjs/highlight.js/issues/2827\n\n begin: concat(\n /[ ]+/, // necessary to prevent us gobbling up doctags like /* @author Bob Mcgill */\n '(',\n ENGLISH_WORD,\n /[.]?[:]?([.][ ]|[ ])/,\n '){3}') // look for 3 words in a row\n }\n );\n return mode;\n};\nconst C_LINE_COMMENT_MODE = COMMENT('//', '$');\nconst C_BLOCK_COMMENT_MODE = COMMENT('/\\\\*', '\\\\*/');\nconst HASH_COMMENT_MODE = COMMENT('#', '$');\nconst NUMBER_MODE = {\n scope: 'number',\n begin: NUMBER_RE,\n relevance: 0\n};\nconst C_NUMBER_MODE = {\n scope: 'number',\n begin: C_NUMBER_RE,\n relevance: 0\n};\nconst BINARY_NUMBER_MODE = {\n scope: 'number',\n begin: BINARY_NUMBER_RE,\n relevance: 0\n};\nconst REGEXP_MODE = {\n scope: \"regexp\",\n begin: /\\/(?=[^/\\n]*\\/)/,\n end: /\\/[gimuy]*/,\n contains: [\n BACKSLASH_ESCAPE,\n {\n begin: /\\[/,\n end: /\\]/,\n relevance: 0,\n contains: [BACKSLASH_ESCAPE]\n }\n ]\n};\nconst TITLE_MODE = {\n scope: 'title',\n begin: IDENT_RE,\n relevance: 0\n};\nconst UNDERSCORE_TITLE_MODE = {\n scope: 'title',\n begin: UNDERSCORE_IDENT_RE,\n relevance: 0\n};\nconst METHOD_GUARD = {\n // excludes method names from keyword processing\n begin: '\\\\.\\\\s*' + UNDERSCORE_IDENT_RE,\n relevance: 0\n};\n\n/**\n * Adds end same as begin mechanics to a mode\n *\n * Your mode must include at least a single () match group as that first match\n * group is what is used for comparison\n * @param {Partial<Mode>} mode\n */\nconst END_SAME_AS_BEGIN = function(mode) {\n return Object.assign(mode,\n {\n /** @type {ModeCallback} */\n 'on:begin': (m, resp) => { resp.data._beginMatch = m[1]; },\n /** @type {ModeCallback} */\n 'on:end': (m, resp) => { if (resp.data._beginMatch !== m[1]) resp.ignoreMatch(); }\n });\n};\n\nvar MODES = /*#__PURE__*/Object.freeze({\n __proto__: null,\n APOS_STRING_MODE: APOS_STRING_MODE,\n BACKSLASH_ESCAPE: BACKSLASH_ESCAPE,\n BINARY_NUMBER_MODE: BINARY_NUMBER_MODE,\n BINARY_NUMBER_RE: BINARY_NUMBER_RE,\n COMMENT: COMMENT,\n C_BLOCK_COMMENT_MODE: C_BLOCK_COMMENT_MODE,\n C_LINE_COMMENT_MODE: C_LINE_COMMENT_MODE,\n C_NUMBER_MODE: C_NUMBER_MODE,\n C_NUMBER_RE: C_NUMBER_RE,\n END_SAME_AS_BEGIN: END_SAME_AS_BEGIN,\n HASH_COMMENT_MODE: HASH_COMMENT_MODE,\n IDENT_RE: IDENT_RE,\n MATCH_NOTHING_RE: MATCH_NOTHING_RE,\n METHOD_GUARD: METHOD_GUARD,\n NUMBER_MODE: NUMBER_MODE,\n NUMBER_RE: NUMBER_RE,\n PHRASAL_WORDS_MODE: PHRASAL_WORDS_MODE,\n QUOTE_STRING_MODE: QUOTE_STRING_MODE,\n REGEXP_MODE: REGEXP_MODE,\n RE_STARTERS_RE: RE_STARTERS_RE,\n SHEBANG: SHEBANG,\n TITLE_MODE: TITLE_MODE,\n UNDERSCORE_IDENT_RE: UNDERSCORE_IDENT_RE,\n UNDERSCORE_TITLE_MODE: UNDERSCORE_TITLE_MODE\n});\n\n/**\n@typedef {import('highlight.js').CallbackResponse} CallbackResponse\n@typedef {import('highlight.js').CompilerExt} CompilerExt\n*/\n\n// Grammar extensions / plugins\n// See: https://github.com/highlightjs/highlight.js/issues/2833\n\n// Grammar extensions allow \"syntactic sugar\" to be added to the grammar modes\n// without requiring any underlying changes to the compiler internals.\n\n// `compileMatch` being the perfect small example of now allowing a grammar\n// author to write `match` when they desire to match a single expression rather\n// than being forced to use `begin`. The extension then just moves `match` into\n// `begin` when it runs. Ie, no features have been added, but we've just made\n// the experience of writing (and reading grammars) a little bit nicer.\n\n// ------\n\n// TODO: We need negative look-behind support to do this properly\n/**\n * Skip a match if it has a preceding dot\n *\n * This is used for `beginKeywords` to prevent matching expressions such as\n * `bob.keyword.do()`. The mode compiler automatically wires this up as a\n * special _internal_ 'on:begin' callback for modes with `beginKeywords`\n * @param {RegExpMatchArray} match\n * @param {CallbackResponse} response\n */\nfunction skipIfHasPrecedingDot(match, response) {\n const before = match.input[match.index - 1];\n if (before === \".\") {\n response.ignoreMatch();\n }\n}\n\n/**\n *\n * @type {CompilerExt}\n */\nfunction scopeClassName(mode, _parent) {\n // eslint-disable-next-line no-undefined\n if (mode.className !== undefined) {\n mode.scope = mode.className;\n delete mode.className;\n }\n}\n\n/**\n * `beginKeywords` syntactic sugar\n * @type {CompilerExt}\n */\nfunction beginKeywords(mode, parent) {\n if (!parent) return;\n if (!mode.beginKeywords) return;\n\n // for languages with keywords that include non-word characters checking for\n // a word boundary is not sufficient, so instead we check for a word boundary\n // or whitespace - this does no harm in any case since our keyword engine\n // doesn't allow spaces in keywords anyways and we still check for the boundary\n // first\n mode.begin = '\\\\b(' + mode.beginKeywords.split(' ').join('|') + ')(?!\\\\.)(?=\\\\b|\\\\s)';\n mode.__beforeBegin = skipIfHasPrecedingDot;\n mode.keywords = mode.keywords || mode.beginKeywords;\n delete mode.beginKeywords;\n\n // prevents double relevance, the keywords themselves provide\n // relevance, the mode doesn't need to double it\n // eslint-disable-next-line no-undefined\n if (mode.relevance === undefined) mode.relevance = 0;\n}\n\n/**\n * Allow `illegal` to contain an array of illegal values\n * @type {CompilerExt}\n */\nfunction compileIllegal(mode, _parent) {\n if (!Array.isArray(mode.illegal)) return;\n\n mode.illegal = either(...mode.illegal);\n}\n\n/**\n * `match` to match a single expression for readability\n * @type {CompilerExt}\n */\nfunction compileMatch(mode, _parent) {\n if (!mode.match) return;\n if (mode.begin || mode.end) throw new Error(\"begin & end are not supported with match\");\n\n mode.begin = mode.match;\n delete mode.match;\n}\n\n/**\n * provides the default 1 relevance to all modes\n * @type {CompilerExt}\n */\nfunction compileRelevance(mode, _parent) {\n // eslint-disable-next-line no-undefined\n if (mode.relevance === undefined) mode.relevance = 1;\n}\n\n// allow beforeMatch to act as a \"qualifier\" for the match\n// the full match begin must be [beforeMatch][begin]\nconst beforeMatchExt = (mode, parent) => {\n if (!mode.beforeMatch) return;\n // starts conflicts with endsParent which we need to make sure the child\n // rule is not matched multiple times\n if (mode.starts) throw new Error(\"beforeMatch cannot be used with starts\");\n\n const originalMode = Object.assign({}, mode);\n Object.keys(mode).forEach((key) => { delete mode[key]; });\n\n mode.keywords = originalMode.keywords;\n mode.begin = concat(originalMode.beforeMatch, lookahead(originalMode.begin));\n mode.starts = {\n relevance: 0,\n contains: [\n Object.assign(originalMode, { endsParent: true })\n ]\n };\n mode.relevance = 0;\n\n delete originalMode.beforeMatch;\n};\n\n// keywords that should have no default relevance value\nconst COMMON_KEYWORDS = [\n 'of',\n 'and',\n 'for',\n 'in',\n 'not',\n 'or',\n 'if',\n 'then',\n 'parent', // common variable name\n 'list', // common variable name\n 'value' // common variable name\n];\n\nconst DEFAULT_KEYWORD_SCOPE = \"keyword\";\n\n/**\n * Given raw keywords from a language definition, compile them.\n *\n * @param {string | Record<string,string|string[]> | Array<string>} rawKeywords\n * @param {boolean} caseInsensitive\n */\nfunction compileKeywords(rawKeywords, caseInsensitive, scopeName = DEFAULT_KEYWORD_SCOPE) {\n /** @type {import(\"highlight.js/private\").KeywordDict} */\n const compiledKeywords = Object.create(null);\n\n // input can be a string of keywords, an array of keywords, or a object with\n // named keys representing scopeName (which can then point to a string or array)\n if (typeof rawKeywords === 'string') {\n compileList(scopeName, rawKeywords.split(\" \"));\n } else if (Array.isArray(rawKeywords)) {\n compileList(scopeName, rawKeywords);\n } else {\n Object.keys(rawKeywords).forEach(function(scopeName) {\n // collapse all our objects back into the parent object\n Object.assign(\n compiledKeywords,\n compileKeywords(rawKeywords[scopeName], caseInsensitive, scopeName)\n );\n });\n }\n return compiledKeywords;\n\n // ---\n\n /**\n * Compiles an individual list of keywords\n *\n * Ex: \"for if when while|5\"\n *\n * @param {string} scopeName\n * @param {Array<string>} keywordList\n */\n function compileList(scopeName, keywordList) {\n if (caseInsensitive) {\n keywordList = keywordList.map(x => x.toLowerCase());\n }\n keywordList.forEach(function(keyword) {\n const pair = keyword.split('|');\n compiledKeywords[pair[0]] = [scopeName, scoreForKeyword(pair[0], pair[1])];\n });\n }\n}\n\n/**\n * Returns the proper score for a given keyword\n *\n * Also takes into account comment keywords, which will be scored 0 UNLESS\n * another score has been manually assigned.\n * @param {string} keyword\n * @param {string} [providedScore]\n */\nfunction scoreForKeyword(keyword, providedScore) {\n // manual scores always win over common keywords\n // so you can force a score of 1 if you really insist\n if (providedScore) {\n return Number(providedScore);\n }\n\n return commonKeyword(keyword) ? 0 : 1;\n}\n\n/**\n * Determines if a given keyword is common or not\n *\n * @param {string} keyword */\nfunction commonKeyword(keyword) {\n return COMMON_KEYWORDS.includes(keyword.toLowerCase());\n}\n\n/*\n\nFor the reasoning behind this please see:\nhttps://github.com/highlightjs/highlight.js/issues/2880#issuecomment-747275419\n\n*/\n\n/**\n * @type {Record<string, boolean>}\n */\nconst seenDeprecations = {};\n\n/**\n * @param {string} message\n */\nconst error = (message) => {\n console.error(message);\n};\n\n/**\n * @param {string} message\n * @param {any} args\n */\nconst warn = (message, ...args) => {\n console.log(`WARN: ${message}`, ...args);\n};\n\n/**\n * @param {string} version\n * @param {string} message\n */\nconst deprecated = (version, message) => {\n if (seenDeprecations[`${version}/${message}`]) return;\n\n console.log(`Deprecated as of ${version}. ${message}`);\n seenDeprecations[`${version}/${message}`] = true;\n};\n\n/* eslint-disable no-throw-literal */\n\n/**\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n*/\n\nconst MultiClassError = new Error();\n\n/**\n * Renumbers labeled scope names to account for additional inner match\n * groups that otherwise would break everything.\n *\n * Lets say we 3 match scopes:\n *\n * { 1 => ..., 2 => ..., 3 => ... }\n *\n * So what we need is a clean match like this:\n *\n * (a)(b)(c) => [ \"a\", \"b\", \"c\" ]\n *\n * But this falls apart with inner match groups:\n *\n * (a)(((b)))(c) => [\"a\", \"b\", \"b\", \"b\", \"c\" ]\n *\n * Our scopes are now \"out of alignment\" and we're repeating `b` 3 times.\n * What needs to happen is the numbers are remapped:\n *\n * { 1 => ..., 2 => ..., 5 => ... }\n *\n * We also need to know that the ONLY groups that should be output\n * are 1, 2, and 5. This function handles this behavior.\n *\n * @param {CompiledMode} mode\n * @param {Array<RegExp | string>} regexes\n * @param {{key: \"beginScope\"|\"endScope\"}} opts\n */\nfunction remapScopeNames(mode, regexes, { key }) {\n let offset = 0;\n const scopeNames = mode[key];\n /** @type Record<number,boolean> */\n const emit = {};\n /** @type Record<number,string> */\n const positions = {};\n\n for (let i = 1; i <= regexes.length; i++) {\n positions[i + offset] = scopeNames[i];\n emit[i + offset] = true;\n offset += countMatchGroups(regexes[i - 1]);\n }\n // we use _emit to keep track of which match groups are \"top-level\" to avoid double\n // output from inside match groups\n mode[key] = positions;\n mode[key]._emit = emit;\n mode[key]._multi = true;\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction beginMultiClass(mode) {\n if (!Array.isArray(mode.begin)) return;\n\n if (mode.skip || mode.excludeBegin || mode.returnBegin) {\n error(\"skip, excludeBegin, returnBegin not compatible with beginScope: {}\");\n throw MultiClassError;\n }\n\n if (typeof mode.beginScope !== \"object\" || mode.beginScope === null) {\n error(\"beginScope must be object\");\n throw MultiClassError;\n }\n\n remapScopeNames(mode, mode.begin, { key: \"beginScope\" });\n mode.begin = _rewriteBackreferences(mode.begin, { joinWith: \"\" });\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction endMultiClass(mode) {\n if (!Array.isArray(mode.end)) return;\n\n if (mode.skip || mode.excludeEnd || mode.returnEnd) {\n error(\"skip, excludeEnd, returnEnd not compatible with endScope: {}\");\n throw MultiClassError;\n }\n\n if (typeof mode.endScope !== \"object\" || mode.endScope === null) {\n error(\"endScope must be object\");\n throw MultiClassError;\n }\n\n remapScopeNames(mode, mode.end, { key: \"endScope\" });\n mode.end = _rewriteBackreferences(mode.end, { joinWith: \"\" });\n}\n\n/**\n * this exists only to allow `scope: {}` to be used beside `match:`\n * Otherwise `beginScope` would necessary and that would look weird\n\n {\n match: [ /def/, /\\w+/ ]\n scope: { 1: \"keyword\" , 2: \"title\" }\n }\n\n * @param {CompiledMode} mode\n */\nfunction scopeSugar(mode) {\n if (mode.scope && typeof mode.scope === \"object\" && mode.scope !== null) {\n mode.beginScope = mode.scope;\n delete mode.scope;\n }\n}\n\n/**\n * @param {CompiledMode} mode\n */\nfunction MultiClass(mode) {\n scopeSugar(mode);\n\n if (typeof mode.beginScope === \"string\") {\n mode.beginScope = { _wrap: mode.beginScope };\n }\n if (typeof mode.endScope === \"string\") {\n mode.endScope = { _wrap: mode.endScope };\n }\n\n beginMultiClass(mode);\n endMultiClass(mode);\n}\n\n/**\n@typedef {import('highlight.js').Mode} Mode\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n@typedef {import('highlight.js').Language} Language\n@typedef {import('highlight.js').HLJSPlugin} HLJSPlugin\n@typedef {import('highlight.js').CompiledLanguage} CompiledLanguage\n*/\n\n// compilation\n\n/**\n * Compiles a language definition result\n *\n * Given the raw result of a language definition (Language), compiles this so\n * that it is ready for highlighting code.\n * @param {Language} language\n * @returns {CompiledLanguage}\n */\nfunction compileLanguage(language) {\n /**\n * Builds a regex with the case sensitivity of the current language\n *\n * @param {RegExp | string} value\n * @param {boolean} [global]\n */\n function langRe(value, global) {\n return new RegExp(\n source(value),\n 'm'\n + (language.case_insensitive ? 'i' : '')\n + (language.unicodeRegex ? 'u' : '')\n + (global ? 'g' : '')\n );\n }\n\n /**\n Stores multiple regular expressions and allows you to quickly search for\n them all in a string simultaneously - returning the first match. It does\n this by creating a huge (a|b|c) regex - each individual item wrapped with ()\n and joined by `|` - using match groups to track position. When a match is\n found checking which position in the array has content allows us to figure\n out which of the original regexes / match groups triggered the match.\n\n The match object itself (the result of `Regex.exec`) is returned but also\n enhanced by merging in any meta-data that was registered with the regex.\n This is how we keep track of which mode matched, and what type of rule\n (`illegal`, `begin`, end, etc).\n */\n class MultiRegex {\n constructor() {\n this.matchIndexes = {};\n // @ts-ignore\n this.regexes = [];\n this.matchAt = 1;\n this.position = 0;\n }\n\n // @ts-ignore\n addRule(re, opts) {\n opts.position = this.position++;\n // @ts-ignore\n this.matchIndexes[this.matchAt] = opts;\n this.regexes.push([opts, re]);\n this.matchAt += countMatchGroups(re) + 1;\n }\n\n compile() {\n if (this.regexes.length === 0) {\n // avoids the need to check length every time exec is called\n // @ts-ignore\n this.exec = () => null;\n }\n const terminators = this.regexes.map(el => el[1]);\n this.matcherRe = langRe(_rewriteBackreferences(terminators, { joinWith: '|' }), true);\n this.lastIndex = 0;\n }\n\n /** @param {string} s */\n exec(s) {\n this.matcherRe.lastIndex = this.lastIndex;\n const match = this.matcherRe.exec(s);\n if (!match) { return null; }\n\n // eslint-disable-next-line no-undefined\n const i = match.findIndex((el, i) => i > 0 && el !== undefined);\n // @ts-ignore\n const matchData = this.matchIndexes[i];\n // trim off any earlier non-relevant match groups (ie, the other regex\n // match groups that make up the multi-matcher)\n match.splice(0, i);\n\n return Object.assign(match, matchData);\n }\n }\n\n /*\n Created to solve the key deficiently with MultiRegex - there is no way to\n test for multiple matches at a single location. Why would we need to do\n that? In the future a more dynamic engine will allow certain matches to be\n ignored. An example: if we matched say the 3rd regex in a large group but\n decided to ignore it - we'd need to started testing again at the 4th\n regex... but MultiRegex itself gives us no real way to do that.\n\n So what this class creates MultiRegexs on the fly for whatever search\n position they are needed.\n\n NOTE: These additional MultiRegex objects are created dynamically. For most\n grammars most of the time we will never actually need anything more than the\n first MultiRegex - so this shouldn't have too much overhead.\n\n Say this is our search group, and we match regex3, but wish to ignore it.\n\n regex1 | regex2 | regex3 | regex4 | regex5 ' ie, startAt = 0\n\n What we need is a new MultiRegex that only includes the remaining\n possibilities:\n\n regex4 | regex5 ' ie, startAt = 3\n\n This class wraps all that complexity up in a simple API... `startAt` decides\n where in the array of expressions to start doing the matching. It\n auto-increments, so if a match is found at position 2, then startAt will be\n set to 3. If the end is reached startAt will return to 0.\n\n MOST of the time the parser will be setting startAt manually to 0.\n */\n class ResumableMultiRegex {\n constructor() {\n // @ts-ignore\n this.rules = [];\n // @ts-ignore\n this.multiRegexes = [];\n this.count = 0;\n\n this.lastIndex = 0;\n this.regexIndex = 0;\n }\n\n // @ts-ignore\n getMatcher(index) {\n if (this.multiRegexes[index]) return this.multiRegexes[index];\n\n const matcher = new MultiRegex();\n this.rules.slice(index).forEach(([re, opts]) => matcher.addRule(re, opts));\n matcher.compile();\n this.multiRegexes[index] = matcher;\n return matcher;\n }\n\n resumingScanAtSamePosition() {\n return this.regexIndex !== 0;\n }\n\n considerAll() {\n this.regexIndex = 0;\n }\n\n // @ts-ignore\n addRule(re, opts) {\n this.rules.push([re, opts]);\n if (opts.type === \"begin\") this.count++;\n }\n\n /** @param {string} s */\n exec(s) {\n const m = this.getMatcher(this.regexIndex);\n m.lastIndex = this.lastIndex;\n let result = m.exec(s);\n\n // The following is because we have no easy way to say \"resume scanning at the\n // existing position but also skip the current rule ONLY\". What happens is\n // all prior rules are also skipped which can result in matching the wrong\n // thing. Example of matching \"booger\":\n\n // our matcher is [string, \"booger\", number]\n //\n // ....booger....\n\n // if \"booger\" is ignored then we'd really need a regex to scan from the\n // SAME position for only: [string, number] but ignoring \"booger\" (if it\n // was the first match), a simple resume would scan ahead who knows how\n // far looking only for \"number\", ignoring potential string matches (or\n // future \"booger\" matches that might be valid.)\n\n // So what we do: We execute two matchers, one resuming at the same\n // position, but the second full matcher starting at the position after:\n\n // /--- resume first regex match here (for [number])\n // |/---- full match here for [string, \"booger\", number]\n // vv\n // ....booger....\n\n // Which ever results in a match first is then used. So this 3-4 step\n // process essentially allows us to say \"match at this position, excluding\n // a prior rule that was ignored\".\n //\n // 1. Match \"booger\" first, ignore. Also proves that [string] does non match.\n // 2. Resume matching for [number]\n // 3. Match at index + 1 for [string, \"booger\", number]\n // 4. If #2 and #3 result in matches, which came first?\n if (this.resumingScanAtSamePosition()) {\n if (result && result.index === this.lastIndex) ; else { // use the second matcher result\n const m2 = this.getMatcher(0);\n m2.lastIndex = this.lastIndex + 1;\n result = m2.exec(s);\n }\n }\n\n if (result) {\n this.regexIndex += result.position + 1;\n if (this.regexIndex === this.count) {\n // wrap-around to considering all matches again\n this.considerAll();\n }\n }\n\n return result;\n }\n }\n\n /**\n * Given a mode, builds a huge ResumableMultiRegex that can be used to walk\n * the content and find matches.\n *\n * @param {CompiledMode} mode\n * @returns {ResumableMultiRegex}\n */\n function buildModeRegex(mode) {\n const mm = new ResumableMultiRegex();\n\n mode.contains.forEach(term => mm.addRule(term.begin, { rule: term, type: \"begin\" }));\n\n if (mode.terminatorEnd) {\n mm.addRule(mode.terminatorEnd, { type: \"end\" });\n }\n if (mode.illegal) {\n mm.addRule(mode.illegal, { type: \"illegal\" });\n }\n\n return mm;\n }\n\n /** skip vs abort vs ignore\n *\n * @skip - The mode is still entered and exited normally (and contains rules apply),\n * but all content is held and added to the parent buffer rather than being\n * output when the mode ends. Mostly used with `sublanguage` to build up\n * a single large buffer than can be parsed by sublanguage.\n *\n * - The mode begin ands ends normally.\n * - Content matched is added to the parent mode buffer.\n * - The parser cursor is moved forward normally.\n *\n * @abort - A hack placeholder until we have ignore. Aborts the mode (as if it\n * never matched) but DOES NOT continue to match subsequent `contains`\n * modes. Abort is bad/suboptimal because it can result in modes\n * farther down not getting applied because an earlier rule eats the\n * content but then aborts.\n *\n * - The mode does not begin.\n * - Content matched by `begin` is added to the mode buffer.\n * - The parser cursor is moved forward accordingly.\n *\n * @ignore - Ignores the mode (as if it never matched) and continues to match any\n * subsequent `contains` modes. Ignore isn't technically possible with\n * the current parser implementation.\n *\n * - The mode does not begin.\n * - Content matched by `begin` is ignored.\n * - The parser cursor is not moved forward.\n */\n\n /**\n * Compiles an individual mode\n *\n * This can raise an error if the mode contains certain detectable known logic\n * issues.\n * @param {Mode} mode\n * @param {CompiledMode | null} [parent]\n * @returns {CompiledMode | never}\n */\n function compileMode(mode, parent) {\n const cmode = /** @type CompiledMode */ (mode);\n if (mode.isCompiled) return cmode;\n\n [\n scopeClassName,\n // do this early so compiler extensions generally don't have to worry about\n // the distinction between match/begin\n compileMatch,\n MultiClass,\n beforeMatchExt\n ].forEach(ext => ext(mode, parent));\n\n language.compilerExtensions.forEach(ext => ext(mode, parent));\n\n // __beforeBegin is considered private API, internal use only\n mode.__beforeBegin = null;\n\n [\n beginKeywords,\n // do this later so compiler extensions that come earlier have access to the\n // raw array if they wanted to perhaps manipulate it, etc.\n compileIllegal,\n // default to 1 relevance if not specified\n compileRelevance\n ].forEach(ext => ext(mode, parent));\n\n mode.isCompiled = true;\n\n let keywordPattern = null;\n if (typeof mode.keywords === \"object\" && mode.keywords.$pattern) {\n // we need a copy because keywords might be compiled multiple times\n // so we can't go deleting $pattern from the original on the first\n // pass\n mode.keywords = Object.assign({}, mode.keywords);\n keywordPattern = mode.keywords.$pattern;\n delete mode.keywords.$pattern;\n }\n keywordPattern = keywordPattern || /\\w+/;\n\n if (mode.keywords) {\n mode.keywords = compileKeywords(mode.keywords, language.case_insensitive);\n }\n\n cmode.keywordPatternRe = langRe(keywordPattern, true);\n\n if (parent) {\n if (!mode.begin) mode.begin = /\\B|\\b/;\n cmode.beginRe = langRe(cmode.begin);\n if (!mode.end && !mode.endsWithParent) mode.end = /\\B|\\b/;\n if (mode.end) cmode.endRe = langRe(cmode.end);\n cmode.terminatorEnd = source(cmode.end) || '';\n if (mode.endsWithParent && parent.terminatorEnd) {\n cmode.terminatorEnd += (mode.end ? '|' : '') + parent.terminatorEnd;\n }\n }\n if (mode.illegal) cmode.illegalRe = langRe(/** @type {RegExp | string} */ (mode.illegal));\n if (!mode.contains) mode.contains = [];\n\n mode.contains = [].concat(...mode.contains.map(function(c) {\n return expandOrCloneMode(c === 'self' ? mode : c);\n }));\n mode.contains.forEach(function(c) { compileMode(/** @type Mode */ (c), cmode); });\n\n if (mode.starts) {\n compileMode(mode.starts, parent);\n }\n\n cmode.matcher = buildModeRegex(cmode);\n return cmode;\n }\n\n if (!language.compilerExtensions) language.compilerExtensions = [];\n\n // self is not valid at the top-level\n if (language.contains && language.contains.includes('self')) {\n throw new Error(\"ERR: contains `self` is not supported at the top-level of a language. See documentation.\");\n }\n\n // we need a null object, which inherit will guarantee\n language.classNameAliases = inherit$1(language.classNameAliases || {});\n\n return compileMode(/** @type Mode */ (language));\n}\n\n/**\n * Determines if a mode has a dependency on it's parent or not\n *\n * If a mode does have a parent dependency then often we need to clone it if\n * it's used in multiple places so that each copy points to the correct parent,\n * where-as modes without a parent can often safely be re-used at the bottom of\n * a mode chain.\n *\n * @param {Mode | null} mode\n * @returns {boolean} - is there a dependency on the parent?\n * */\nfunction dependencyOnParent(mode) {\n if (!mode) return false;\n\n return mode.endsWithParent || dependencyOnParent(mode.starts);\n}\n\n/**\n * Expands a mode or clones it if necessary\n *\n * This is necessary for modes with parental dependenceis (see notes on\n * `dependencyOnParent`) and for nodes that have `variants` - which must then be\n * exploded into their own individual modes at compile time.\n *\n * @param {Mode} mode\n * @returns {Mode | Mode[]}\n * */\nfunction expandOrCloneMode(mode) {\n if (mode.variants && !mode.cachedVariants) {\n mode.cachedVariants = mode.variants.map(function(variant) {\n return inherit$1(mode, { variants: null }, variant);\n });\n }\n\n // EXPAND\n // if we have variants then essentially \"replace\" the mode with the variants\n // this happens in compileMode, where this function is called from\n if (mode.cachedVariants) {\n return mode.cachedVariants;\n }\n\n // CLONE\n // if we have dependencies on parents then we need a unique\n // instance of ourselves, so we can be reused with many\n // different parents without issue\n if (dependencyOnParent(mode)) {\n return inherit$1(mode, { starts: mode.starts ? inherit$1(mode.starts) : null });\n }\n\n if (Object.isFrozen(mode)) {\n return inherit$1(mode);\n }\n\n // no special dependency issues, just return ourselves\n return mode;\n}\n\nvar version = \"11.11.1\";\n\nclass HTMLInjectionError extends Error {\n constructor(reason, html) {\n super(reason);\n this.name = \"HTMLInjectionError\";\n this.html = html;\n }\n}\n\n/*\nSyntax highlighting with language autodetection.\nhttps://highlightjs.org/\n*/\n\n\n\n/**\n@typedef {import('highlight.js').Mode} Mode\n@typedef {import('highlight.js').CompiledMode} CompiledMode\n@typedef {import('highlight.js').CompiledScope} CompiledScope\n@typedef {import('highlight.js').Language} Language\n@typedef {import('highlight.js').HLJSApi} HLJSApi\n@typedef {import('highlight.js').HLJSPlugin} HLJSPlugin\n@typedef {import('highlight.js').PluginEvent} PluginEvent\n@typedef {import('highlight.js').HLJSOptions} HLJSOptions\n@typedef {import('highlight.js').LanguageFn} LanguageFn\n@typedef {import('highlight.js').HighlightedHTMLElement} HighlightedHTMLElement\n@typedef {import('highlight.js').BeforeHighlightContext} BeforeHighlightContext\n@typedef {import('highlight.js/private').MatchType} MatchType\n@typedef {import('highlight.js/private').KeywordData} KeywordData\n@typedef {import('highlight.js/private').EnhancedMatch} EnhancedMatch\n@typedef {import('highlight.js/private').AnnotatedError} AnnotatedError\n@typedef {import('highlight.js').AutoHighlightResult} AutoHighlightResult\n@typedef {import('highlight.js').HighlightOptions} HighlightOptions\n@typedef {import('highlight.js').HighlightResult} HighlightResult\n*/\n\n\nconst escape = escapeHTML;\nconst inherit = inherit$1;\nconst NO_MATCH = Symbol(\"nomatch\");\nconst MAX_KEYWORD_HITS = 7;\n\n/**\n * @param {any} hljs - object that is extended (legacy)\n * @returns {HLJSApi}\n */\nconst HLJS = function(hljs) {\n // Global internal variables used within the highlight.js library.\n /** @type {Record<string, Language>} */\n const languages = Object.create(null);\n /** @type {Record<string, string>} */\n const aliases = Object.create(null);\n /** @type {HLJSPlugin[]} */\n const plugins = [];\n\n // safe/production mode - swallows more errors, tries to keep running\n // even if a single syntax or parse hits a fatal error\n let SAFE_MODE = true;\n const LANGUAGE_NOT_FOUND = \"Could not find the language '{}', did you forget to load/include a language module?\";\n /** @type {Language} */\n const PLAINTEXT_LANGUAGE = { disableAutodetect: true, name: 'Plain text', contains: [] };\n\n // Global options used when within external APIs. This is modified when\n // calling the `hljs.configure` function.\n /** @type HLJSOptions */\n let options = {\n ignoreUnescapedHTML: false,\n throwUnescapedHTML: false,\n noHighlightRe: /^(no-?highlight)$/i,\n languageDetectRe: /\\blang(?:uage)?-([\\w-]+)\\b/i,\n classPrefix: 'hljs-',\n cssSelector: 'pre code',\n languages: null,\n // beta configuration options, subject to change, welcome to discuss\n // https://github.com/highlightjs/highlight.js/issues/1086\n __emitter: TokenTreeEmitter\n };\n\n /* Utility functions */\n\n /**\n * Tests a language name to see if highlighting should be skipped\n * @param {string} languageName\n */\n function shouldNotHighlight(languageName) {\n return options.noHighlightRe.test(languageName);\n }\n\n /**\n * @param {HighlightedHTMLElement} block - the HTML element to determine language for\n */\n function blockLanguage(block) {\n let classes = block.className + ' ';\n\n classes += block.parentNode ? block.parentNode.className : '';\n\n // language-* takes precedence over non-prefixed class names.\n const match = options.languageDetectRe.exec(classes);\n if (match) {\n const language = getLanguage(match[1]);\n if (!language) {\n warn(LANGUAGE_NOT_FOUND.replace(\"{}\", match[1]));\n warn(\"Falling back to no-highlight mode for this block.\", block);\n }\n return language ? match[1] : 'no-highlight';\n }\n\n return classes\n .split(/\\s+/)\n .find((_class) => shouldNotHighlight(_class) || getLanguage(_class));\n }\n\n /**\n * Core highlighting function.\n *\n * OLD API\n * highlight(lang, code, ignoreIllegals, continuation)\n *\n * NEW API\n * highlight(code, {lang, ignoreIllegals})\n *\n * @param {string} codeOrLanguageName - the language to use for highlighting\n * @param {string | HighlightOptions} optionsOrCode - the code to highlight\n * @param {boolean} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\n *\n * @returns {HighlightResult} Result - an object that represents the result\n * @property {string} language - the language name\n * @property {number} relevance - the relevance score\n * @property {string} value - the highlighted HTML code\n * @property {string} code - the original raw code\n * @property {CompiledMode} top - top of the current mode stack\n * @property {boolean} illegal - indicates whether any illegal matches were found\n */\n function highlight(codeOrLanguageName, optionsOrCode, ignoreIllegals) {\n let code = \"\";\n let languageName = \"\";\n if (typeof optionsOrCode === \"object\") {\n code = codeOrLanguageName;\n ignoreIllegals = optionsOrCode.ignoreIllegals;\n languageName = optionsOrCode.language;\n } else {\n // old API\n deprecated(\"10.7.0\", \"highlight(lang, code, ...args) has been deprecated.\");\n deprecated(\"10.7.0\", \"Please use highlight(code, options) instead.\\nhttps://github.com/highlightjs/highlight.js/issues/2277\");\n languageName = codeOrLanguageName;\n code = optionsOrCode;\n }\n\n // https://github.com/highlightjs/highlight.js/issues/3149\n // eslint-disable-next-line no-undefined\n if (ignoreIllegals === undefined) { ignoreIllegals = true; }\n\n /** @type {BeforeHighlightContext} */\n const context = {\n code,\n language: languageName\n };\n // the plugin can change the desired language or the code to be highlighted\n // just be changing the object it was passed\n fire(\"before:highlight\", context);\n\n // a before plugin can usurp the result completely by providing it's own\n // in which case we don't even need to call highlight\n const result = context.result\n ? context.result\n : _highlight(context.language, context.code, ignoreIllegals);\n\n result.code = context.code;\n // the plugin can change anything in result to suite it\n fire(\"after:highlight\", result);\n\n return result;\n }\n\n /**\n * private highlight that's used internally and does not fire callbacks\n *\n * @param {string} languageName - the language to use for highlighting\n * @param {string} codeToHighlight - the code to highlight\n * @param {boolean?} [ignoreIllegals] - whether to ignore illegal matches, default is to bail\n * @param {CompiledMode?} [continuation] - current continuation mode, if any\n * @returns {HighlightResult} - result of the highlight operation\n */\n function _highlight(languageName, codeToHighlight, ignoreIllegals, continuation) {\n const keywordHits = Object.create(null);\n\n /**\n * Return keyword data if a match is a keyword\n * @param {CompiledMode} mode - current mode\n * @param {string} matchText - the textual match\n * @returns {KeywordData | false}\n */\n function keywordData(mode, matchText) {\n return mode.keywords[matchText];\n }\n\n function processKeywords() {\n if (!top.keywords) {\n emitter.addText(modeBuffer);\n return;\n }\n\n let lastIndex = 0;\n top.keywordPatternRe.lastIndex = 0;\n let match = top.keywordPatternRe.exec(modeBuffer);\n let buf = \"\";\n\n while (match) {\n buf += modeBuffer.substring(lastIndex, match.index);\n const word = language.case_insensitive ? match[0].toLowerCase() : match[0];\n const data = keywordData(top, word);\n if (data) {\n const [kind, keywordRelevance] = data;\n emitter.addText(buf);\n buf = \"\";\n\n keywordHits[word] = (keywordHits[word] || 0) + 1;\n if (keywordHits[word] <= MAX_KEYWORD_HITS) relevance += keywordRelevance;\n if (kind.startsWith(\"_\")) {\n // _ implied for relevance only, do not highlight\n // by applying a class name\n buf += match[0];\n } else {\n const cssClass = language.classNameAliases[kind] || kind;\n emitKeyword(match[0], cssClass);\n }\n } else {\n buf += match[0];\n }\n lastIndex = top.keywordPatternRe.lastIndex;\n match = top.keywordPatternRe.exec(modeBuffer);\n }\n buf += modeBuffer.substring(lastIndex);\n emitter.addText(buf);\n }\n\n function processSubLanguage() {\n if (modeBuffer === \"\") return;\n /** @type HighlightResult */\n let result = null;\n\n if (typeof top.subLanguage === 'string') {\n if (!languages[top.subLanguage]) {\n emitter.addText(modeBuffer);\n return;\n }\n result = _highlight(top.subLanguage, modeBuffer, true, continuations[top.subLanguage]);\n continuations[top.subLanguage] = /** @type {CompiledMode} */ (result._top);\n } else {\n result = highlightAuto(modeBuffer, top.subLanguage.length ? top.subLanguage : null);\n }\n\n // Counting embedded language score towards the host language may be disabled\n // with zeroing the containing mode relevance. Use case in point is Markdown that\n // allows XML everywhere and makes every XML snippet to have a much larger Markdown\n // score.\n if (top.relevance > 0) {\n relevance += result.relevance;\n }\n emitter.__addSublanguage(result._emitter, result.language);\n }\n\n function processBuffer() {\n if (top.subLanguage != null) {\n processSubLanguage();\n } else {\n processKeywords();\n }\n modeBuffer = '';\n }\n\n /**\n * @param {string} text\n * @param {string} scope\n */\n function emitKeyword(keyword, scope) {\n if (keyword === \"\") return;\n\n emitter.startScope(scope);\n emitter.addText(keyword);\n emitter.endScope();\n }\n\n /**\n * @param {CompiledScope} scope\n * @param {RegExpMatchArray} match\n */\n function emitMultiClass(scope, match) {\n let i = 1;\n const max = match.length - 1;\n while (i <= max) {\n if (!scope._emit[i]) { i++; continue; }\n const klass = language.classNameAliases[scope[i]] || scope[i];\n const text = match[i];\n if (klass) {\n emitKeyword(text, klass);\n } else {\n modeBuffer = text;\n processKeywords();\n modeBuffer = \"\";\n }\n i++;\n }\n }\n\n /**\n * @param {CompiledMode} mode - new mode to start\n * @param {RegExpMatchArray} match\n */\n function startNewMode(mode, match) {\n if (mode.scope && typeof mode.scope === \"string\") {\n emitter.openNode(language.classNameAliases[mode.scope] || mode.scope);\n }\n if (mode.beginScope) {\n // beginScope just wraps the begin match itself in a scope\n if (mode.beginScope._wrap) {\n emitKeyword(modeBuffer, language.classNameAliases[mode.beginScope._wrap] || mode.beginScope._wrap);\n modeBuffer = \"\";\n } else if (mode.beginScope._multi) {\n // at this point modeBuffer should just be the match\n emitMultiClass(mode.beginScope, match);\n modeBuffer = \"\";\n }\n }\n\n top = Object.create(mode, { parent: { value: top } });\n return top;\n }\n\n /**\n * @param {CompiledMode } mode - the mode to potentially end\n * @param {RegExpMatchArray} match - the latest match\n * @param {string} matchPlusRemainder - match plus remainder of content\n * @returns {CompiledMode | void} - the next mode, or if void continue on in current mode\n */\n function endOfMode(mode, match, matchPlusRemainder) {\n let matched = startsWith(mode.endRe, matchPlusRemainder);\n\n if (matched) {\n if (mode[\"on:end\"]) {\n const resp = new Response(mode);\n mode[\"on:end\"](match, resp);\n if (resp.isMatchIgnored) matched = false;\n }\n\n if (matched) {\n while (mode.endsParent && mode.parent) {\n mode = mode.parent;\n }\n return mode;\n }\n }\n // even if on:end fires an `ignore` it's still possible\n // that we might trigger the end node because of a parent mode\n if (mode.endsWithParent) {\n return endOfMode(mode.parent, match, matchPlusRemainder);\n }\n }\n\n /**\n * Handle matching but then ignoring a sequence of text\n *\n * @param {string} lexeme - string containing full match text\n */\n function doIgnore(lexeme) {\n if (top.matcher.regexIndex === 0) {\n // no more regexes to potentially match here, so we move the cursor forward one\n // space\n modeBuffer += lexeme[0];\n return 1;\n } else {\n // no need to move the cursor, we still have additional regexes to try and\n // match at this very spot\n resumeScanAtSamePosition = true;\n return 0;\n }\n }\n\n /**\n * Handle the start of a new potential mode match\n *\n * @param {EnhancedMatch} match - the current match\n * @returns {number} how far to advance the parse cursor\n */\n function doBeginMatch(match) {\n const lexeme = match[0];\n const newMode = match.rule;\n\n const resp = new Response(newMode);\n // first internal before callbacks, then the public ones\n const beforeCallbacks = [newMode.__beforeBegin, newMode[\"on:begin\"]];\n for (const cb of beforeCallbacks) {\n if (!cb) continue;\n cb(match, resp);\n if (resp.isMatchIgnored) return doIgnore(lexeme);\n }\n\n if (newMode.skip) {\n modeBuffer += lexeme;\n } else {\n if (newMode.excludeBegin) {\n modeBuffer += lexeme;\n }\n processBuffer();\n if (!newMode.returnBegin && !newMode.excludeBegin) {\n modeBuffer = lexeme;\n }\n }\n startNewMode(newMode, match);\n return newMode.returnBegin ? 0 : lexeme.length;\n }\n\n /**\n * Handle the potential end of mode\n *\n * @param {RegExpMatchArray} match - the current match\n */\n function doEndMatch(match) {\n const lexeme = match[0];\n const matchPlusRemainder = codeToHighlight.substring(match.index);\n\n const endMode = endOfMode(top, match, matchPlusRemainder);\n if (!endMode) { return NO_MATCH; }\n\n const origin = top;\n if (top.endScope && top.endScope._wrap) {\n processBuffer();\n emitKeyword(lexeme, top.endScope._wrap);\n } else if (top.endScope && top.endScope._multi) {\n processBuffer();\n emitMultiClass(top.endScope, match);\n } else if (origin.skip) {\n modeBuffer += lexeme;\n } else {\n if (!(origin.returnEnd || origin.excludeEnd)) {\n modeBuffer += lexeme;\n }\n processBuffer();\n if (origin.excludeEnd) {\n modeBuffer = lexeme;\n }\n }\n do {\n if (top.scope) {\n emitter.closeNode();\n }\n if (!top.skip && !top.subLanguage) {\n relevance += top.relevance;\n }\n top = top.parent;\n } while (top !== endMode.parent);\n if (endMode.starts) {\n startNewMode(endMode.starts, match);\n }\n return origin.returnEnd ? 0 : lexeme.length;\n }\n\n function processContinuations() {\n const list = [];\n for (let current = top; current !== language; current = current.parent) {\n if (current.scope) {\n list.unshift(current.scope);\n }\n }\n list.forEach(item => emitter.openNode(item));\n }\n\n /** @type {{type?: MatchType, index?: number, rule?: Mode}}} */\n let lastMatch = {};\n\n /**\n * Process an individual match\n *\n * @param {string} textBeforeMatch - text preceding the match (since the last match)\n * @param {EnhancedMatch} [match] - the match itself\n */\n function processLexeme(textBeforeMatch, match) {\n const lexeme = match && match[0];\n\n // add non-matched text to the current mode buffer\n modeBuffer += textBeforeMatch;\n\n if (lexeme == null) {\n processBuffer();\n return 0;\n }\n\n // we've found a 0 width match and we're stuck, so we need to advance\n // this happens when we have badly behaved rules that have optional matchers to the degree that\n // sometimes they can end up matching nothing at all\n // Ref: https://github.com/highlightjs/highlight.js/issues/2140\n if (lastMatch.type === \"begin\" && match.type === \"end\" && lastMatch.index === match.index && lexeme === \"\") {\n // spit the \"skipped\" character that our regex choked on back into the output sequence\n modeBuffer += codeToHighlight.slice(match.index, match.index + 1);\n if (!SAFE_MODE) {\n /** @type {AnnotatedError} */\n const err = new Error(`0 width match regex (${languageName})`);\n err.languageName = languageName;\n err.badRule = lastMatch.rule;\n throw err;\n }\n return 1;\n }\n lastMatch = match;\n\n if (match.type === \"begin\") {\n return doBeginMatch(match);\n } else if (match.type === \"illegal\" && !ignoreIllegals) {\n // illegal match, we do not continue processing\n /** @type {AnnotatedError} */\n const err = new Error('Illegal lexeme \"' + lexeme + '\" for mode \"' + (top.scope || '<unnamed>') + '\"');\n err.mode = top;\n throw err;\n } else if (match.type === \"end\") {\n const processed = doEndMatch(match);\n if (processed !== NO_MATCH) {\n return processed;\n }\n }\n\n // edge case for when illegal matches $ (end of line) which is technically\n // a 0 width match but not a begin/end match so it's not caught by the\n // first handler (when ignoreIllegals is true)\n if (match.type === \"illegal\" && lexeme === \"\") {\n // advance so we aren't stuck in an infinite loop\n modeBuffer += \"\\n\";\n return 1;\n }\n\n // infinite loops are BAD, this is a last ditch catch all. if we have a\n // decent number of iterations yet our index (cursor position in our\n // parsing) still 3x behind our index then something is very wrong\n // so we bail\n if (iterations > 100000 && iterations > match.index * 3) {\n const err = new Error('potential infinite loop, way more iterations than matches');\n throw err;\n }\n\n /*\n Why might be find ourselves here? An potential end match that was\n triggered but could not be completed. IE, `doEndMatch` returned NO_MATCH.\n (this could be because a callback requests the match be ignored, etc)\n\n This causes no real harm other than stopping a few times too many.\n */\n\n modeBuffer += lexeme;\n return lexeme.length;\n }\n\n const language = getLanguage(languageName);\n if (!language) {\n error(LANGUAGE_NOT_FOUND.replace(\"{}\", languageName));\n throw new Error('Unknown language: \"' + languageName + '\"');\n }\n\n const md = compileLanguage(language);\n let result = '';\n /** @type {CompiledMode} */\n let top = continuation || md;\n /** @type Record<string,CompiledMode> */\n const continuations = {}; // keep continuations for sub-languages\n const emitter = new options.__emitter(options);\n processContinuations();\n let modeBuffer = '';\n let relevance = 0;\n let index = 0;\n let iterations = 0;\n let resumeScanAtSamePosition = false;\n\n try {\n if (!language.__emitTokens) {\n top.matcher.considerAll();\n\n for (;;) {\n iterations++;\n if (resumeScanAtSamePosition) {\n // only regexes not matched previously will now be\n // considered for a potential match\n resumeScanAtSamePosition = false;\n } else {\n top.matcher.considerAll();\n }\n top.matcher.lastIndex = index;\n\n const match = top.matcher.exec(codeToHighlight);\n // console.log(\"match\", match[0], match.rule && match.rule.begin)\n\n if (!match) break;\n\n const beforeMatch = codeToHighlight.substring(index, match.index);\n const processedCount = processLexeme(beforeMatch, match);\n index = match.index + processedCount;\n }\n processLexeme(codeToHighlight.substring(index));\n } else {\n language.__emitTokens(codeToHighlight, emitter);\n }\n\n emitter.finalize();\n result = emitter.toHTML();\n\n return {\n language: languageName,\n value: result,\n relevance,\n illegal: false,\n _emitter: emitter,\n _top: top\n };\n } catch (err) {\n if (err.message && err.message.includes('Illegal')) {\n return {\n language: languageName,\n value: escape(codeToHighlight),\n illegal: true,\n relevance: 0,\n _illegalBy: {\n message: err.message,\n index,\n context: codeToHighlight.slice(index - 100, index + 100),\n mode: err.mode,\n resultSoFar: result\n },\n _emitter: emitter\n };\n } else if (SAFE_MODE) {\n return {\n language: languageName,\n value: escape(codeToHighlight),\n illegal: false,\n relevance: 0,\n errorRaised: err,\n _emitter: emitter,\n _top: top\n };\n } else {\n throw err;\n }\n }\n }\n\n /**\n * returns a valid highlight result, without actually doing any actual work,\n * auto highlight starts with this and it's possible for small snippets that\n * auto-detection may not find a better match\n * @param {string} code\n * @returns {HighlightResult}\n */\n function justTextHighlightResult(code) {\n const result = {\n value: escape(code),\n illegal: false,\n relevance: 0,\n _top: PLAINTEXT_LANGUAGE,\n _emitter: new options.__emitter(options)\n };\n result._emitter.addText(code);\n return result;\n }\n\n /**\n Highlighting with language detection. Accepts a string with the code to\n highlight. Returns an object with the following properties:\n\n - language (detected language)\n - relevance (int)\n - value (an HTML string with highlighting markup)\n - secondBest (object with the same structure for second-best heuristically\n detected language, may be absent)\n\n @param {string} code\n @param {Array<string>} [languageSubset]\n @returns {AutoHighlightResult}\n */\n function highlightAuto(code, languageSubset) {\n languageSubset = languageSubset || options.languages || Object.keys(languages);\n const plaintext = justTextHighlightResult(code);\n\n const results = languageSubset.filter(getLanguage).filter(autoDetection).map(name =>\n _highlight(name, code, false)\n );\n results.unshift(plaintext); // plaintext is always an option\n\n const sorted = results.sort((a, b) => {\n // sort base on relevance\n if (a.relevance !== b.relevance) return b.relevance - a.relevance;\n\n // always award the tie to the base language\n // ie if C++ and Arduino are tied, it's more likely to be C++\n if (a.language && b.language) {\n if (getLanguage(a.language).supersetOf === b.language) {\n return 1;\n } else if (getLanguage(b.language).supersetOf === a.language) {\n return -1;\n }\n }\n\n // otherwise say they are equal, which has the effect of sorting on\n // relevance while preserving the original ordering - which is how ties\n // have historically been settled, ie the language that comes first always\n // wins in the case of a tie\n return 0;\n });\n\n const [best, secondBest] = sorted;\n\n /** @type {AutoHighlightResult} */\n const result = best;\n result.secondBest = secondBest;\n\n return result;\n }\n\n /**\n * Builds new class name for block given the language name\n *\n * @param {HTMLElement} element\n * @param {string} [currentLang]\n * @param {string} [resultLang]\n */\n function updateClassName(element, currentLang, resultLang) {\n const language = (currentLang && aliases[currentLang]) || resultLang;\n\n element.classList.add(\"hljs\");\n element.classList.add(`language-${language}`);\n }\n\n /**\n * Applies highlighting to a DOM node containing code.\n *\n * @param {HighlightedHTMLElement} element - the HTML element to highlight\n */\n function highlightElement(element) {\n /** @type HTMLElement */\n let node = null;\n const language = blockLanguage(element);\n\n if (shouldNotHighlight(language)) return;\n\n fire(\"before:highlightElement\",\n { el: element, language });\n\n if (element.dataset.highlighted) {\n console.log(\"Element previously highlighted. To highlight again, first unset `dataset.highlighted`.\", element);\n return;\n }\n\n // we should be all text, no child nodes (unescaped HTML) - this is possibly\n // an HTML injection attack - it's likely too late if this is already in\n // production (the code has likely already done its damage by the time\n // we're seeing it)... but we yell loudly about this so that hopefully it's\n // more likely to be caught in development before making it to production\n if (element.children.length > 0) {\n if (!options.ignoreUnescapedHTML) {\n console.warn(\"One of your code blocks includes unescaped HTML. This is a potentially serious security risk.\");\n console.warn(\"https://github.com/highlightjs/highlight.js/wiki/security\");\n console.warn(\"The element with unescaped HTML:\");\n console.warn(element);\n }\n if (options.throwUnescapedHTML) {\n const err = new HTMLInjectionError(\n \"One of your code blocks includes unescaped HTML.\",\n element.innerHTML\n );\n throw err;\n }\n }\n\n node = element;\n const text = node.textContent;\n const result = language ? highlight(text, { language, ignoreIllegals: true }) : highlightAuto(text);\n\n element.innerHTML = result.value;\n element.dataset.highlighted = \"yes\";\n updateClassName(element, language, result.language);\n element.result = {\n language: result.language,\n // TODO: remove with version 11.0\n re: result.relevance,\n relevance: result.relevance\n };\n if (result.secondBest) {\n element.secondBest = {\n language: result.secondBest.language,\n relevance: result.secondBest.relevance\n };\n }\n\n fire(\"after:highlightElement\", { el: element, result, text });\n }\n\n /**\n * Updates highlight.js global options with the passed options\n *\n * @param {Partial<HLJSOptions>} userOptions\n */\n function configure(userOptions) {\n options = inherit(options, userOptions);\n }\n\n // TODO: remove v12, deprecated\n const initHighlighting = () => {\n highlightAll();\n deprecated(\"10.6.0\", \"initHighlighting() deprecated. Use highlightAll() now.\");\n };\n\n // TODO: remove v12, deprecated\n function initHighlightingOnLoad() {\n highlightAll();\n deprecated(\"10.6.0\", \"initHighlightingOnLoad() deprecated. Use highlightAll() now.\");\n }\n\n let wantsHighlight = false;\n\n /**\n * auto-highlights all pre>code elements on the page\n */\n function highlightAll() {\n function boot() {\n // if a highlight was requested before DOM was loaded, do now\n highlightAll();\n }\n\n // if we are called too early in the loading process\n if (document.readyState === \"loading\") {\n // make sure the event listener is only added once\n if (!wantsHighlight) {\n window.addEventListener('DOMContentLoaded', boot, false);\n }\n wantsHighlight = true;\n return;\n }\n\n const blocks = document.querySelectorAll(options.cssSelector);\n blocks.forEach(highlightElement);\n }\n\n /**\n * Register a language grammar module\n *\n * @param {string} languageName\n * @param {LanguageFn} languageDefinition\n */\n function registerLanguage(languageName, languageDefinition) {\n let lang = null;\n try {\n lang = languageDefinition(hljs);\n } catch (error$1) {\n error(\"Language definition for '{}' could not be registered.\".replace(\"{}\", languageName));\n // hard or soft error\n if (!SAFE_MODE) { throw error$1; } else { error(error$1); }\n // languages that have serious errors are replaced with essentially a\n // \"plaintext\" stand-in so that the code blocks will still get normal\n // css classes applied to them - and one bad language won't break the\n // entire highlighter\n lang = PLAINTEXT_LANGUAGE;\n }\n // give it a temporary name if it doesn't have one in the meta-data\n if (!lang.name) lang.name = languageName;\n languages[languageName] = lang;\n lang.rawDefinition = languageDefinition.bind(null, hljs);\n\n if (lang.aliases) {\n registerAliases(lang.aliases, { languageName });\n }\n }\n\n /**\n * Remove a language grammar module\n *\n * @param {string} languageName\n */\n function unregisterLanguage(languageName) {\n delete languages[languageName];\n for (const alias of Object.keys(aliases)) {\n if (aliases[alias] === languageName) {\n delete aliases[alias];\n }\n }\n }\n\n /**\n * @returns {string[]} List of language internal names\n */\n function listLanguages() {\n return Object.keys(languages);\n }\n\n /**\n * @param {string} name - name of the language to retrieve\n * @returns {Language | undefined}\n */\n function getLanguage(name) {\n name = (name || '').toLowerCase();\n return languages[name] || languages[aliases[name]];\n }\n\n /**\n *\n * @param {string|string[]} aliasList - single alias or list of aliases\n * @param {{languageName: string}} opts\n */\n function registerAliases(aliasList, { languageName }) {\n if (typeof aliasList === 'string') {\n aliasList = [aliasList];\n }\n aliasList.forEach(alias => { aliases[alias.toLowerCase()] = languageName; });\n }\n\n /**\n * Determines if a given language has auto-detection enabled\n * @param {string} name - name of the language\n */\n function autoDetection(name) {\n const lang = getLanguage(name);\n return lang && !lang.disableAutodetect;\n }\n\n /**\n * Upgrades the old highlightBlock plugins to the new\n * highlightElement API\n * @param {HLJSPlugin} plugin\n */\n function upgradePluginAPI(plugin) {\n // TODO: remove with v12\n if (plugin[\"before:highlightBlock\"] && !plugin[\"before:highlightElement\"]) {\n plugin[\"before:highlightElement\"] = (data) => {\n plugin[\"before:highlightBlock\"](\n Object.assign({ block: data.el }, data)\n );\n };\n }\n if (plugin[\"after:highlightBlock\"] && !plugin[\"after:highlightElement\"]) {\n plugin[\"after:highlightElement\"] = (data) => {\n plugin[\"after:highlightBlock\"](\n Object.assign({ block: data.el }, data)\n );\n };\n }\n }\n\n /**\n * @param {HLJSPlugin} plugin\n */\n function addPlugin(plugin) {\n upgradePluginAPI(plugin);\n plugins.push(plugin);\n }\n\n /**\n * @param {HLJSPlugin} plugin\n */\n function removePlugin(plugin) {\n const index = plugins.indexOf(plugin);\n if (index !== -1) {\n plugins.splice(index, 1);\n }\n }\n\n /**\n *\n * @param {PluginEvent} event\n * @param {any} args\n */\n function fire(event, args) {\n const cb = event;\n plugins.forEach(function(plugin) {\n if (plugin[cb]) {\n plugin[cb](args);\n }\n });\n }\n\n /**\n * DEPRECATED\n * @param {HighlightedHTMLElement} el\n */\n function deprecateHighlightBlock(el) {\n deprecated(\"10.7.0\", \"highlightBlock will be removed entirely in v12.0\");\n deprecated(\"10.7.0\", \"Please use highlightElement now.\");\n\n return highlightElement(el);\n }\n\n /* Interface definition */\n Object.assign(hljs, {\n highlight,\n highlightAuto,\n highlightAll,\n highlightElement,\n // TODO: Remove with v12 API\n highlightBlock: deprecateHighlightBlock,\n configure,\n initHighlighting,\n initHighlightingOnLoad,\n registerLanguage,\n unregisterLanguage,\n listLanguages,\n getLanguage,\n registerAliases,\n autoDetection,\n inherit,\n addPlugin,\n removePlugin\n });\n\n hljs.debugMode = function() { SAFE_MODE = false; };\n hljs.safeMode = function() { SAFE_MODE = true; };\n hljs.versionString = version;\n\n hljs.regex = {\n concat: concat,\n lookahead: lookahead,\n either: either,\n optional: optional,\n anyNumberOfTimes: anyNumberOfTimes\n };\n\n for (const key in MODES) {\n // @ts-ignore\n if (typeof MODES[key] === \"object\") {\n // @ts-ignore\n deepFreeze(MODES[key]);\n }\n }\n\n // merge all the modes/regexes into our main object\n Object.assign(hljs, MODES);\n\n return hljs;\n};\n\n// Other names for the variable may break build script\nconst highlight = HLJS({});\n\n// returns a new instance of the highlighter to be used for extensions\n// check https://github.com/wooorm/lowlight/issues/47\nhighlight.newInstance = () => HLJS({});\n\nmodule.exports = highlight;\nhighlight.HighlightJS = highlight;\nhighlight.default = highlight;\n","const IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\nconst KEYWORDS = [\n \"as\", // for exports\n \"in\",\n \"of\",\n \"if\",\n \"for\",\n \"while\",\n \"finally\",\n \"var\",\n \"new\",\n \"function\",\n \"do\",\n \"return\",\n \"void\",\n \"else\",\n \"break\",\n \"catch\",\n \"instanceof\",\n \"with\",\n \"throw\",\n \"case\",\n \"default\",\n \"try\",\n \"switch\",\n \"continue\",\n \"typeof\",\n \"delete\",\n \"let\",\n \"yield\",\n \"const\",\n \"class\",\n // JS handles these with a special rule\n // \"get\",\n // \"set\",\n \"debugger\",\n \"async\",\n \"await\",\n \"static\",\n \"import\",\n \"from\",\n \"export\",\n \"extends\",\n // It's reached stage 3, which is \"recommended for implementation\":\n \"using\"\n];\nconst LITERALS = [\n \"true\",\n \"false\",\n \"null\",\n \"undefined\",\n \"NaN\",\n \"Infinity\"\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects\nconst TYPES = [\n // Fundamental objects\n \"Object\",\n \"Function\",\n \"Boolean\",\n \"Symbol\",\n // numbers and dates\n \"Math\",\n \"Date\",\n \"Number\",\n \"BigInt\",\n // text\n \"String\",\n \"RegExp\",\n // Indexed collections\n \"Array\",\n \"Float32Array\",\n \"Float64Array\",\n \"Int8Array\",\n \"Uint8Array\",\n \"Uint8ClampedArray\",\n \"Int16Array\",\n \"Int32Array\",\n \"Uint16Array\",\n \"Uint32Array\",\n \"BigInt64Array\",\n \"BigUint64Array\",\n // Keyed collections\n \"Set\",\n \"Map\",\n \"WeakSet\",\n \"WeakMap\",\n // Structured data\n \"ArrayBuffer\",\n \"SharedArrayBuffer\",\n \"Atomics\",\n \"DataView\",\n \"JSON\",\n // Control abstraction objects\n \"Promise\",\n \"Generator\",\n \"GeneratorFunction\",\n \"AsyncFunction\",\n // Reflection\n \"Reflect\",\n \"Proxy\",\n // Internationalization\n \"Intl\",\n // WebAssembly\n \"WebAssembly\"\n];\n\nconst ERROR_TYPES = [\n \"Error\",\n \"EvalError\",\n \"InternalError\",\n \"RangeError\",\n \"ReferenceError\",\n \"SyntaxError\",\n \"TypeError\",\n \"URIError\"\n];\n\nconst BUILT_IN_GLOBALS = [\n \"setInterval\",\n \"setTimeout\",\n \"clearInterval\",\n \"clearTimeout\",\n\n \"require\",\n \"exports\",\n\n \"eval\",\n \"isFinite\",\n \"isNaN\",\n \"parseFloat\",\n \"parseInt\",\n \"decodeURI\",\n \"decodeURIComponent\",\n \"encodeURI\",\n \"encodeURIComponent\",\n \"escape\",\n \"unescape\"\n];\n\nconst BUILT_IN_VARIABLES = [\n \"arguments\",\n \"this\",\n \"super\",\n \"console\",\n \"window\",\n \"document\",\n \"localStorage\",\n \"sessionStorage\",\n \"module\",\n \"global\" // Node.js\n];\n\nconst BUILT_INS = [].concat(\n BUILT_IN_GLOBALS,\n TYPES,\n ERROR_TYPES\n);\n\n/*\nLanguage: JavaScript\nDescription: JavaScript (JS) is a lightweight, interpreted, or just-in-time compiled programming language with first-class functions.\nCategory: common, scripting, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/JavaScript\n*/\n\n\n/** @type LanguageFn */\nfunction javascript(hljs) {\n const regex = hljs.regex;\n /**\n * Takes a string like \"<Booger\" and checks to see\n * if we can find a matching \"</Booger\" later in the\n * content.\n * @param {RegExpMatchArray} match\n * @param {{after:number}} param1\n */\n const hasClosingTag = (match, { after }) => {\n const tag = \"</\" + match[0].slice(1);\n const pos = match.input.indexOf(tag, after);\n return pos !== -1;\n };\n\n const IDENT_RE$1 = IDENT_RE;\n const FRAGMENT = {\n begin: '<>',\n end: '</>'\n };\n // to avoid some special cases inside isTrulyOpeningTag\n const XML_SELF_CLOSING = /<[A-Za-z0-9\\\\._:-]+\\s*\\/>/;\n const XML_TAG = {\n begin: /<[A-Za-z0-9\\\\._:-]+/,\n end: /\\/[A-Za-z0-9\\\\._:-]+>|\\/>/,\n /**\n * @param {RegExpMatchArray} match\n * @param {CallbackResponse} response\n */\n isTrulyOpeningTag: (match, response) => {\n const afterMatchIndex = match[0].length + match.index;\n const nextChar = match.input[afterMatchIndex];\n if (\n // HTML should not include another raw `<` inside a tag\n // nested type?\n // `<Array<Array<number>>`, etc.\n nextChar === \"<\" ||\n // the , gives away that this is not HTML\n // `<T, A extends keyof T, V>`\n nextChar === \",\"\n ) {\n response.ignoreMatch();\n return;\n }\n\n // `<something>`\n // Quite possibly a tag, lets look for a matching closing tag...\n if (nextChar === \">\") {\n // if we cannot find a matching closing tag, then we\n // will ignore it\n if (!hasClosingTag(match, { after: afterMatchIndex })) {\n response.ignoreMatch();\n }\n }\n\n // `<blah />` (self-closing)\n // handled by simpleSelfClosing rule\n\n let m;\n const afterMatch = match.input.substring(afterMatchIndex);\n\n // some more template typing stuff\n // <T = any>(key?: string) => Modify<\n if ((m = afterMatch.match(/^\\s*=/))) {\n response.ignoreMatch();\n return;\n }\n\n // `<From extends string>`\n // technically this could be HTML, but it smells like a type\n // NOTE: This is ugh, but added specifically for https://github.com/highlightjs/highlight.js/issues/3276\n if ((m = afterMatch.match(/^\\s+extends\\s+/))) {\n if (m.index === 0) {\n response.ignoreMatch();\n // eslint-disable-next-line no-useless-return\n return;\n }\n }\n }\n };\n const KEYWORDS$1 = {\n $pattern: IDENT_RE,\n keyword: KEYWORDS,\n literal: LITERALS,\n built_in: BUILT_INS,\n \"variable.language\": BUILT_IN_VARIABLES\n };\n\n // https://tc39.es/ecma262/#sec-literals-numeric-literals\n const decimalDigits = '[0-9](_?[0-9])*';\n const frac = `\\\\.(${decimalDigits})`;\n // DecimalIntegerLiteral, including Annex B NonOctalDecimalIntegerLiteral\n // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n const decimalInteger = `0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`;\n const NUMBER = {\n className: 'number',\n variants: [\n // DecimalLiteral\n { begin: `(\\\\b(${decimalInteger})((${frac})|\\\\.)?|(${frac}))` +\n `[eE][+-]?(${decimalDigits})\\\\b` },\n { begin: `\\\\b(${decimalInteger})\\\\b((${frac})\\\\b|\\\\.)?|(${frac})\\\\b` },\n\n // DecimalBigIntegerLiteral\n { begin: `\\\\b(0|[1-9](_?[0-9])*)n\\\\b` },\n\n // NonDecimalIntegerLiteral\n { begin: \"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\\\b\" },\n { begin: \"\\\\b0[bB][0-1](_?[0-1])*n?\\\\b\" },\n { begin: \"\\\\b0[oO][0-7](_?[0-7])*n?\\\\b\" },\n\n // LegacyOctalIntegerLiteral (does not include underscore separators)\n // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n { begin: \"\\\\b0[0-7]+n?\\\\b\" },\n ],\n relevance: 0\n };\n\n const SUBST = {\n className: 'subst',\n begin: '\\\\$\\\\{',\n end: '\\\\}',\n keywords: KEYWORDS$1,\n contains: [] // defined later\n };\n const HTML_TEMPLATE = {\n begin: '\\.?html`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'xml'\n }\n };\n const CSS_TEMPLATE = {\n begin: '\\.?css`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'css'\n }\n };\n const GRAPHQL_TEMPLATE = {\n begin: '\\.?gql`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'graphql'\n }\n };\n const TEMPLATE_STRING = {\n className: 'string',\n begin: '`',\n end: '`',\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ]\n };\n const JSDOC_COMMENT = hljs.COMMENT(\n /\\/\\*\\*(?!\\/)/,\n '\\\\*/',\n {\n relevance: 0,\n contains: [\n {\n begin: '(?=@[A-Za-z]+)',\n relevance: 0,\n contains: [\n {\n className: 'doctag',\n begin: '@[A-Za-z]+'\n },\n {\n className: 'type',\n begin: '\\\\{',\n end: '\\\\}',\n excludeEnd: true,\n excludeBegin: true,\n relevance: 0\n },\n {\n className: 'variable',\n begin: IDENT_RE$1 + '(?=\\\\s*(-)|$)',\n endsParent: true,\n relevance: 0\n },\n // eat spaces (not newlines) so we can find\n // types or variables\n {\n begin: /(?=[^\\n])\\s/,\n relevance: 0\n }\n ]\n }\n ]\n }\n );\n const COMMENT = {\n className: \"comment\",\n variants: [\n JSDOC_COMMENT,\n hljs.C_BLOCK_COMMENT_MODE,\n hljs.C_LINE_COMMENT_MODE\n ]\n };\n const SUBST_INTERNALS = [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n HTML_TEMPLATE,\n CSS_TEMPLATE,\n GRAPHQL_TEMPLATE,\n TEMPLATE_STRING,\n // Skip numbers when they are part of a variable name\n { match: /\\$\\d+/ },\n NUMBER,\n // This is intentional:\n // See https://github.com/highlightjs/highlight.js/issues/3288\n // hljs.REGEXP_MODE\n ];\n SUBST.contains = SUBST_INTERNALS\n .concat({\n // we need to pair up {} inside our subst to prevent\n // it from ending too early by matching another }\n begin: /\\{/,\n end: /\\}/,\n keywords: KEYWORDS$1,\n contains: [\n \"self\"\n ].concat(SUBST_INTERNALS)\n });\n const SUBST_AND_COMMENTS = [].concat(COMMENT, SUBST.contains);\n const PARAMS_CONTAINS = SUBST_AND_COMMENTS.concat([\n // eat recursive parens in sub expressions\n {\n begin: /(\\s*)\\(/,\n end: /\\)/,\n keywords: KEYWORDS$1,\n contains: [\"self\"].concat(SUBST_AND_COMMENTS)\n }\n ]);\n const PARAMS = {\n className: 'params',\n // convert this to negative lookbehind in v12\n begin: /(\\s*)\\(/, // to match the parms with\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS$1,\n contains: PARAMS_CONTAINS\n };\n\n // ES6 classes\n const CLASS_OR_EXTENDS = {\n variants: [\n // class Car extends vehicle\n {\n match: [\n /class/,\n /\\s+/,\n IDENT_RE$1,\n /\\s+/,\n /extends/,\n /\\s+/,\n regex.concat(IDENT_RE$1, \"(\", regex.concat(/\\./, IDENT_RE$1), \")*\")\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\",\n 5: \"keyword\",\n 7: \"title.class.inherited\"\n }\n },\n // class Car\n {\n match: [\n /class/,\n /\\s+/,\n IDENT_RE$1\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\"\n }\n },\n\n ]\n };\n\n const CLASS_REFERENCE = {\n relevance: 0,\n match:\n regex.either(\n // Hard coded exceptions\n /\\bJSON/,\n // Float32Array, OutT\n /\\b[A-Z][a-z]+([A-Z][a-z]*|\\d)*/,\n // CSSFactory, CSSFactoryT\n /\\b[A-Z]{2,}([A-Z][a-z]+|\\d)+([A-Z][a-z]*)*/,\n // FPs, FPsT\n /\\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\\d)*([A-Z][a-z]*)*/,\n // P\n // single letters are not highlighted\n // BLAH\n // this will be flagged as a UPPER_CASE_CONSTANT instead\n ),\n className: \"title.class\",\n keywords: {\n _: [\n // se we still get relevance credit for JS library classes\n ...TYPES,\n ...ERROR_TYPES\n ]\n }\n };\n\n const USE_STRICT = {\n label: \"use_strict\",\n className: 'meta',\n relevance: 10,\n begin: /^\\s*['\"]use (strict|asm)['\"]/\n };\n\n const FUNCTION_DEFINITION = {\n variants: [\n {\n match: [\n /function/,\n /\\s+/,\n IDENT_RE$1,\n /(?=\\s*\\()/\n ]\n },\n // anonymous function\n {\n match: [\n /function/,\n /\\s*(?=\\()/\n ]\n }\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n label: \"func.def\",\n contains: [ PARAMS ],\n illegal: /%/\n };\n\n const UPPER_CASE_CONSTANT = {\n relevance: 0,\n match: /\\b[A-Z][A-Z_0-9]+\\b/,\n className: \"variable.constant\"\n };\n\n function noneOf(list) {\n return regex.concat(\"(?!\", list.join(\"|\"), \")\");\n }\n\n const FUNCTION_CALL = {\n match: regex.concat(\n /\\b/,\n noneOf([\n ...BUILT_IN_GLOBALS,\n \"super\",\n \"import\"\n ].map(x => `${x}\\\\s*\\\\(`)),\n IDENT_RE$1, regex.lookahead(/\\s*\\(/)),\n className: \"title.function\",\n relevance: 0\n };\n\n const PROPERTY_ACCESS = {\n begin: regex.concat(/\\./, regex.lookahead(\n regex.concat(IDENT_RE$1, /(?![0-9A-Za-z$_(])/)\n )),\n end: IDENT_RE$1,\n excludeBegin: true,\n keywords: \"prototype\",\n className: \"property\",\n relevance: 0\n };\n\n const GETTER_OR_SETTER = {\n match: [\n /get|set/,\n /\\s+/,\n IDENT_RE$1,\n /(?=\\()/\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [\n { // eat to avoid empty params\n begin: /\\(\\)/\n },\n PARAMS\n ]\n };\n\n const FUNC_LEAD_IN_RE = '(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*' +\n '\\\\)[^()]*)*' +\n '\\\\)[^()]*)*' +\n '\\\\)|' + hljs.UNDERSCORE_IDENT_RE + ')\\\\s*=>';\n\n const FUNCTION_VARIABLE = {\n match: [\n /const|var|let/, /\\s+/,\n IDENT_RE$1, /\\s*/,\n /=\\s*/,\n /(async\\s*)?/, // async is optional\n regex.lookahead(FUNC_LEAD_IN_RE)\n ],\n keywords: \"async\",\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [\n PARAMS\n ]\n };\n\n return {\n name: 'JavaScript',\n aliases: ['js', 'jsx', 'mjs', 'cjs'],\n keywords: KEYWORDS$1,\n // this will be extended by TypeScript\n exports: { PARAMS_CONTAINS, CLASS_REFERENCE },\n illegal: /#(?![$_A-z])/,\n contains: [\n hljs.SHEBANG({\n label: \"shebang\",\n binary: \"node\",\n relevance: 5\n }),\n USE_STRICT,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n HTML_TEMPLATE,\n CSS_TEMPLATE,\n GRAPHQL_TEMPLATE,\n TEMPLATE_STRING,\n COMMENT,\n // Skip numbers when they are part of a variable name\n { match: /\\$\\d+/ },\n NUMBER,\n CLASS_REFERENCE,\n {\n scope: 'attr',\n match: IDENT_RE$1 + regex.lookahead(':'),\n relevance: 0\n },\n FUNCTION_VARIABLE,\n { // \"value\" container\n begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n keywords: 'return throw case',\n relevance: 0,\n contains: [\n COMMENT,\n hljs.REGEXP_MODE,\n {\n className: 'function',\n // we have to count the parens to make sure we actually have the\n // correct bounding ( ) before the =>. There could be any number of\n // sub-expressions inside also surrounded by parens.\n begin: FUNC_LEAD_IN_RE,\n returnBegin: true,\n end: '\\\\s*=>',\n contains: [\n {\n className: 'params',\n variants: [\n {\n begin: hljs.UNDERSCORE_IDENT_RE,\n relevance: 0\n },\n {\n className: null,\n begin: /\\(\\s*\\)/,\n skip: true\n },\n {\n begin: /(\\s*)\\(/,\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS$1,\n contains: PARAMS_CONTAINS\n }\n ]\n }\n ]\n },\n { // could be a comma delimited list of params to a function call\n begin: /,/,\n relevance: 0\n },\n {\n match: /\\s+/,\n relevance: 0\n },\n { // JSX\n variants: [\n { begin: FRAGMENT.begin, end: FRAGMENT.end },\n { match: XML_SELF_CLOSING },\n {\n begin: XML_TAG.begin,\n // we carefully check the opening tag to see if it truly\n // is a tag and not a false positive\n 'on:begin': XML_TAG.isTrulyOpeningTag,\n end: XML_TAG.end\n }\n ],\n subLanguage: 'xml',\n contains: [\n {\n begin: XML_TAG.begin,\n end: XML_TAG.end,\n skip: true,\n contains: ['self']\n }\n ]\n }\n ],\n },\n FUNCTION_DEFINITION,\n {\n // prevent this from getting swallowed up by function\n // since they appear \"function like\"\n beginKeywords: \"while if switch catch for\"\n },\n {\n // we have to count the parens to make sure we actually have the correct\n // bounding ( ). There could be any number of sub-expressions inside\n // also surrounded by parens.\n begin: '\\\\b(?!function)' + hljs.UNDERSCORE_IDENT_RE +\n '\\\\(' + // first parens\n '[^()]*(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*' +\n '\\\\)[^()]*)*' +\n '\\\\)[^()]*)*' +\n '\\\\)\\\\s*\\\\{', // end parens\n returnBegin:true,\n label: \"func.def\",\n contains: [\n PARAMS,\n hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$1, className: \"title.function\" })\n ]\n },\n // catch ... so it won't trigger the property rule below\n {\n match: /\\.\\.\\./,\n relevance: 0\n },\n PROPERTY_ACCESS,\n // hack: prevents detection of keywords in some circumstances\n // .keyword()\n // $keyword = x\n {\n match: '\\\\$' + IDENT_RE$1,\n relevance: 0\n },\n {\n match: [ /\\bconstructor(?=\\s*\\()/ ],\n className: { 1: \"title.function\" },\n contains: [ PARAMS ]\n },\n FUNCTION_CALL,\n UPPER_CASE_CONSTANT,\n CLASS_OR_EXTENDS,\n GETTER_OR_SETTER,\n {\n match: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n }\n ]\n };\n}\n\nexport { javascript as default };\n","const IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';\nconst KEYWORDS = [\n \"as\", // for exports\n \"in\",\n \"of\",\n \"if\",\n \"for\",\n \"while\",\n \"finally\",\n \"var\",\n \"new\",\n \"function\",\n \"do\",\n \"return\",\n \"void\",\n \"else\",\n \"break\",\n \"catch\",\n \"instanceof\",\n \"with\",\n \"throw\",\n \"case\",\n \"default\",\n \"try\",\n \"switch\",\n \"continue\",\n \"typeof\",\n \"delete\",\n \"let\",\n \"yield\",\n \"const\",\n \"class\",\n // JS handles these with a special rule\n // \"get\",\n // \"set\",\n \"debugger\",\n \"async\",\n \"await\",\n \"static\",\n \"import\",\n \"from\",\n \"export\",\n \"extends\",\n // It's reached stage 3, which is \"recommended for implementation\":\n \"using\"\n];\nconst LITERALS = [\n \"true\",\n \"false\",\n \"null\",\n \"undefined\",\n \"NaN\",\n \"Infinity\"\n];\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects\nconst TYPES = [\n // Fundamental objects\n \"Object\",\n \"Function\",\n \"Boolean\",\n \"Symbol\",\n // numbers and dates\n \"Math\",\n \"Date\",\n \"Number\",\n \"BigInt\",\n // text\n \"String\",\n \"RegExp\",\n // Indexed collections\n \"Array\",\n \"Float32Array\",\n \"Float64Array\",\n \"Int8Array\",\n \"Uint8Array\",\n \"Uint8ClampedArray\",\n \"Int16Array\",\n \"Int32Array\",\n \"Uint16Array\",\n \"Uint32Array\",\n \"BigInt64Array\",\n \"BigUint64Array\",\n // Keyed collections\n \"Set\",\n \"Map\",\n \"WeakSet\",\n \"WeakMap\",\n // Structured data\n \"ArrayBuffer\",\n \"SharedArrayBuffer\",\n \"Atomics\",\n \"DataView\",\n \"JSON\",\n // Control abstraction objects\n \"Promise\",\n \"Generator\",\n \"GeneratorFunction\",\n \"AsyncFunction\",\n // Reflection\n \"Reflect\",\n \"Proxy\",\n // Internationalization\n \"Intl\",\n // WebAssembly\n \"WebAssembly\"\n];\n\nconst ERROR_TYPES = [\n \"Error\",\n \"EvalError\",\n \"InternalError\",\n \"RangeError\",\n \"ReferenceError\",\n \"SyntaxError\",\n \"TypeError\",\n \"URIError\"\n];\n\nconst BUILT_IN_GLOBALS = [\n \"setInterval\",\n \"setTimeout\",\n \"clearInterval\",\n \"clearTimeout\",\n\n \"require\",\n \"exports\",\n\n \"eval\",\n \"isFinite\",\n \"isNaN\",\n \"parseFloat\",\n \"parseInt\",\n \"decodeURI\",\n \"decodeURIComponent\",\n \"encodeURI\",\n \"encodeURIComponent\",\n \"escape\",\n \"unescape\"\n];\n\nconst BUILT_IN_VARIABLES = [\n \"arguments\",\n \"this\",\n \"super\",\n \"console\",\n \"window\",\n \"document\",\n \"localStorage\",\n \"sessionStorage\",\n \"module\",\n \"global\" // Node.js\n];\n\nconst BUILT_INS = [].concat(\n BUILT_IN_GLOBALS,\n TYPES,\n ERROR_TYPES\n);\n\n/*\nLanguage: JavaScript\nDescription: JavaScript (JS) is a lightweight, interpreted, or just-in-time compiled programming language with first-class functions.\nCategory: common, scripting, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/JavaScript\n*/\n\n\n/** @type LanguageFn */\nfunction javascript(hljs) {\n const regex = hljs.regex;\n /**\n * Takes a string like \"<Booger\" and checks to see\n * if we can find a matching \"</Booger\" later in the\n * content.\n * @param {RegExpMatchArray} match\n * @param {{after:number}} param1\n */\n const hasClosingTag = (match, { after }) => {\n const tag = \"</\" + match[0].slice(1);\n const pos = match.input.indexOf(tag, after);\n return pos !== -1;\n };\n\n const IDENT_RE$1 = IDENT_RE;\n const FRAGMENT = {\n begin: '<>',\n end: '</>'\n };\n // to avoid some special cases inside isTrulyOpeningTag\n const XML_SELF_CLOSING = /<[A-Za-z0-9\\\\._:-]+\\s*\\/>/;\n const XML_TAG = {\n begin: /<[A-Za-z0-9\\\\._:-]+/,\n end: /\\/[A-Za-z0-9\\\\._:-]+>|\\/>/,\n /**\n * @param {RegExpMatchArray} match\n * @param {CallbackResponse} response\n */\n isTrulyOpeningTag: (match, response) => {\n const afterMatchIndex = match[0].length + match.index;\n const nextChar = match.input[afterMatchIndex];\n if (\n // HTML should not include another raw `<` inside a tag\n // nested type?\n // `<Array<Array<number>>`, etc.\n nextChar === \"<\" ||\n // the , gives away that this is not HTML\n // `<T, A extends keyof T, V>`\n nextChar === \",\"\n ) {\n response.ignoreMatch();\n return;\n }\n\n // `<something>`\n // Quite possibly a tag, lets look for a matching closing tag...\n if (nextChar === \">\") {\n // if we cannot find a matching closing tag, then we\n // will ignore it\n if (!hasClosingTag(match, { after: afterMatchIndex })) {\n response.ignoreMatch();\n }\n }\n\n // `<blah />` (self-closing)\n // handled by simpleSelfClosing rule\n\n let m;\n const afterMatch = match.input.substring(afterMatchIndex);\n\n // some more template typing stuff\n // <T = any>(key?: string) => Modify<\n if ((m = afterMatch.match(/^\\s*=/))) {\n response.ignoreMatch();\n return;\n }\n\n // `<From extends string>`\n // technically this could be HTML, but it smells like a type\n // NOTE: This is ugh, but added specifically for https://github.com/highlightjs/highlight.js/issues/3276\n if ((m = afterMatch.match(/^\\s+extends\\s+/))) {\n if (m.index === 0) {\n response.ignoreMatch();\n // eslint-disable-next-line no-useless-return\n return;\n }\n }\n }\n };\n const KEYWORDS$1 = {\n $pattern: IDENT_RE,\n keyword: KEYWORDS,\n literal: LITERALS,\n built_in: BUILT_INS,\n \"variable.language\": BUILT_IN_VARIABLES\n };\n\n // https://tc39.es/ecma262/#sec-literals-numeric-literals\n const decimalDigits = '[0-9](_?[0-9])*';\n const frac = `\\\\.(${decimalDigits})`;\n // DecimalIntegerLiteral, including Annex B NonOctalDecimalIntegerLiteral\n // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n const decimalInteger = `0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*`;\n const NUMBER = {\n className: 'number',\n variants: [\n // DecimalLiteral\n { begin: `(\\\\b(${decimalInteger})((${frac})|\\\\.)?|(${frac}))` +\n `[eE][+-]?(${decimalDigits})\\\\b` },\n { begin: `\\\\b(${decimalInteger})\\\\b((${frac})\\\\b|\\\\.)?|(${frac})\\\\b` },\n\n // DecimalBigIntegerLiteral\n { begin: `\\\\b(0|[1-9](_?[0-9])*)n\\\\b` },\n\n // NonDecimalIntegerLiteral\n { begin: \"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\\\b\" },\n { begin: \"\\\\b0[bB][0-1](_?[0-1])*n?\\\\b\" },\n { begin: \"\\\\b0[oO][0-7](_?[0-7])*n?\\\\b\" },\n\n // LegacyOctalIntegerLiteral (does not include underscore separators)\n // https://tc39.es/ecma262/#sec-additional-syntax-numeric-literals\n { begin: \"\\\\b0[0-7]+n?\\\\b\" },\n ],\n relevance: 0\n };\n\n const SUBST = {\n className: 'subst',\n begin: '\\\\$\\\\{',\n end: '\\\\}',\n keywords: KEYWORDS$1,\n contains: [] // defined later\n };\n const HTML_TEMPLATE = {\n begin: '\\.?html`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'xml'\n }\n };\n const CSS_TEMPLATE = {\n begin: '\\.?css`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'css'\n }\n };\n const GRAPHQL_TEMPLATE = {\n begin: '\\.?gql`',\n end: '',\n starts: {\n end: '`',\n returnEnd: false,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n subLanguage: 'graphql'\n }\n };\n const TEMPLATE_STRING = {\n className: 'string',\n begin: '`',\n end: '`',\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ]\n };\n const JSDOC_COMMENT = hljs.COMMENT(\n /\\/\\*\\*(?!\\/)/,\n '\\\\*/',\n {\n relevance: 0,\n contains: [\n {\n begin: '(?=@[A-Za-z]+)',\n relevance: 0,\n contains: [\n {\n className: 'doctag',\n begin: '@[A-Za-z]+'\n },\n {\n className: 'type',\n begin: '\\\\{',\n end: '\\\\}',\n excludeEnd: true,\n excludeBegin: true,\n relevance: 0\n },\n {\n className: 'variable',\n begin: IDENT_RE$1 + '(?=\\\\s*(-)|$)',\n endsParent: true,\n relevance: 0\n },\n // eat spaces (not newlines) so we can find\n // types or variables\n {\n begin: /(?=[^\\n])\\s/,\n relevance: 0\n }\n ]\n }\n ]\n }\n );\n const COMMENT = {\n className: \"comment\",\n variants: [\n JSDOC_COMMENT,\n hljs.C_BLOCK_COMMENT_MODE,\n hljs.C_LINE_COMMENT_MODE\n ]\n };\n const SUBST_INTERNALS = [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n HTML_TEMPLATE,\n CSS_TEMPLATE,\n GRAPHQL_TEMPLATE,\n TEMPLATE_STRING,\n // Skip numbers when they are part of a variable name\n { match: /\\$\\d+/ },\n NUMBER,\n // This is intentional:\n // See https://github.com/highlightjs/highlight.js/issues/3288\n // hljs.REGEXP_MODE\n ];\n SUBST.contains = SUBST_INTERNALS\n .concat({\n // we need to pair up {} inside our subst to prevent\n // it from ending too early by matching another }\n begin: /\\{/,\n end: /\\}/,\n keywords: KEYWORDS$1,\n contains: [\n \"self\"\n ].concat(SUBST_INTERNALS)\n });\n const SUBST_AND_COMMENTS = [].concat(COMMENT, SUBST.contains);\n const PARAMS_CONTAINS = SUBST_AND_COMMENTS.concat([\n // eat recursive parens in sub expressions\n {\n begin: /(\\s*)\\(/,\n end: /\\)/,\n keywords: KEYWORDS$1,\n contains: [\"self\"].concat(SUBST_AND_COMMENTS)\n }\n ]);\n const PARAMS = {\n className: 'params',\n // convert this to negative lookbehind in v12\n begin: /(\\s*)\\(/, // to match the parms with\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS$1,\n contains: PARAMS_CONTAINS\n };\n\n // ES6 classes\n const CLASS_OR_EXTENDS = {\n variants: [\n // class Car extends vehicle\n {\n match: [\n /class/,\n /\\s+/,\n IDENT_RE$1,\n /\\s+/,\n /extends/,\n /\\s+/,\n regex.concat(IDENT_RE$1, \"(\", regex.concat(/\\./, IDENT_RE$1), \")*\")\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\",\n 5: \"keyword\",\n 7: \"title.class.inherited\"\n }\n },\n // class Car\n {\n match: [\n /class/,\n /\\s+/,\n IDENT_RE$1\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\"\n }\n },\n\n ]\n };\n\n const CLASS_REFERENCE = {\n relevance: 0,\n match:\n regex.either(\n // Hard coded exceptions\n /\\bJSON/,\n // Float32Array, OutT\n /\\b[A-Z][a-z]+([A-Z][a-z]*|\\d)*/,\n // CSSFactory, CSSFactoryT\n /\\b[A-Z]{2,}([A-Z][a-z]+|\\d)+([A-Z][a-z]*)*/,\n // FPs, FPsT\n /\\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\\d)*([A-Z][a-z]*)*/,\n // P\n // single letters are not highlighted\n // BLAH\n // this will be flagged as a UPPER_CASE_CONSTANT instead\n ),\n className: \"title.class\",\n keywords: {\n _: [\n // se we still get relevance credit for JS library classes\n ...TYPES,\n ...ERROR_TYPES\n ]\n }\n };\n\n const USE_STRICT = {\n label: \"use_strict\",\n className: 'meta',\n relevance: 10,\n begin: /^\\s*['\"]use (strict|asm)['\"]/\n };\n\n const FUNCTION_DEFINITION = {\n variants: [\n {\n match: [\n /function/,\n /\\s+/,\n IDENT_RE$1,\n /(?=\\s*\\()/\n ]\n },\n // anonymous function\n {\n match: [\n /function/,\n /\\s*(?=\\()/\n ]\n }\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n label: \"func.def\",\n contains: [ PARAMS ],\n illegal: /%/\n };\n\n const UPPER_CASE_CONSTANT = {\n relevance: 0,\n match: /\\b[A-Z][A-Z_0-9]+\\b/,\n className: \"variable.constant\"\n };\n\n function noneOf(list) {\n return regex.concat(\"(?!\", list.join(\"|\"), \")\");\n }\n\n const FUNCTION_CALL = {\n match: regex.concat(\n /\\b/,\n noneOf([\n ...BUILT_IN_GLOBALS,\n \"super\",\n \"import\"\n ].map(x => `${x}\\\\s*\\\\(`)),\n IDENT_RE$1, regex.lookahead(/\\s*\\(/)),\n className: \"title.function\",\n relevance: 0\n };\n\n const PROPERTY_ACCESS = {\n begin: regex.concat(/\\./, regex.lookahead(\n regex.concat(IDENT_RE$1, /(?![0-9A-Za-z$_(])/)\n )),\n end: IDENT_RE$1,\n excludeBegin: true,\n keywords: \"prototype\",\n className: \"property\",\n relevance: 0\n };\n\n const GETTER_OR_SETTER = {\n match: [\n /get|set/,\n /\\s+/,\n IDENT_RE$1,\n /(?=\\()/\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [\n { // eat to avoid empty params\n begin: /\\(\\)/\n },\n PARAMS\n ]\n };\n\n const FUNC_LEAD_IN_RE = '(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*' +\n '\\\\)[^()]*)*' +\n '\\\\)[^()]*)*' +\n '\\\\)|' + hljs.UNDERSCORE_IDENT_RE + ')\\\\s*=>';\n\n const FUNCTION_VARIABLE = {\n match: [\n /const|var|let/, /\\s+/,\n IDENT_RE$1, /\\s*/,\n /=\\s*/,\n /(async\\s*)?/, // async is optional\n regex.lookahead(FUNC_LEAD_IN_RE)\n ],\n keywords: \"async\",\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [\n PARAMS\n ]\n };\n\n return {\n name: 'JavaScript',\n aliases: ['js', 'jsx', 'mjs', 'cjs'],\n keywords: KEYWORDS$1,\n // this will be extended by TypeScript\n exports: { PARAMS_CONTAINS, CLASS_REFERENCE },\n illegal: /#(?![$_A-z])/,\n contains: [\n hljs.SHEBANG({\n label: \"shebang\",\n binary: \"node\",\n relevance: 5\n }),\n USE_STRICT,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n HTML_TEMPLATE,\n CSS_TEMPLATE,\n GRAPHQL_TEMPLATE,\n TEMPLATE_STRING,\n COMMENT,\n // Skip numbers when they are part of a variable name\n { match: /\\$\\d+/ },\n NUMBER,\n CLASS_REFERENCE,\n {\n scope: 'attr',\n match: IDENT_RE$1 + regex.lookahead(':'),\n relevance: 0\n },\n FUNCTION_VARIABLE,\n { // \"value\" container\n begin: '(' + hljs.RE_STARTERS_RE + '|\\\\b(case|return|throw)\\\\b)\\\\s*',\n keywords: 'return throw case',\n relevance: 0,\n contains: [\n COMMENT,\n hljs.REGEXP_MODE,\n {\n className: 'function',\n // we have to count the parens to make sure we actually have the\n // correct bounding ( ) before the =>. There could be any number of\n // sub-expressions inside also surrounded by parens.\n begin: FUNC_LEAD_IN_RE,\n returnBegin: true,\n end: '\\\\s*=>',\n contains: [\n {\n className: 'params',\n variants: [\n {\n begin: hljs.UNDERSCORE_IDENT_RE,\n relevance: 0\n },\n {\n className: null,\n begin: /\\(\\s*\\)/,\n skip: true\n },\n {\n begin: /(\\s*)\\(/,\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS$1,\n contains: PARAMS_CONTAINS\n }\n ]\n }\n ]\n },\n { // could be a comma delimited list of params to a function call\n begin: /,/,\n relevance: 0\n },\n {\n match: /\\s+/,\n relevance: 0\n },\n { // JSX\n variants: [\n { begin: FRAGMENT.begin, end: FRAGMENT.end },\n { match: XML_SELF_CLOSING },\n {\n begin: XML_TAG.begin,\n // we carefully check the opening tag to see if it truly\n // is a tag and not a false positive\n 'on:begin': XML_TAG.isTrulyOpeningTag,\n end: XML_TAG.end\n }\n ],\n subLanguage: 'xml',\n contains: [\n {\n begin: XML_TAG.begin,\n end: XML_TAG.end,\n skip: true,\n contains: ['self']\n }\n ]\n }\n ],\n },\n FUNCTION_DEFINITION,\n {\n // prevent this from getting swallowed up by function\n // since they appear \"function like\"\n beginKeywords: \"while if switch catch for\"\n },\n {\n // we have to count the parens to make sure we actually have the correct\n // bounding ( ). There could be any number of sub-expressions inside\n // also surrounded by parens.\n begin: '\\\\b(?!function)' + hljs.UNDERSCORE_IDENT_RE +\n '\\\\(' + // first parens\n '[^()]*(\\\\(' +\n '[^()]*(\\\\(' +\n '[^()]*' +\n '\\\\)[^()]*)*' +\n '\\\\)[^()]*)*' +\n '\\\\)\\\\s*\\\\{', // end parens\n returnBegin:true,\n label: \"func.def\",\n contains: [\n PARAMS,\n hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE$1, className: \"title.function\" })\n ]\n },\n // catch ... so it won't trigger the property rule below\n {\n match: /\\.\\.\\./,\n relevance: 0\n },\n PROPERTY_ACCESS,\n // hack: prevents detection of keywords in some circumstances\n // .keyword()\n // $keyword = x\n {\n match: '\\\\$' + IDENT_RE$1,\n relevance: 0\n },\n {\n match: [ /\\bconstructor(?=\\s*\\()/ ],\n className: { 1: \"title.function\" },\n contains: [ PARAMS ]\n },\n FUNCTION_CALL,\n UPPER_CASE_CONSTANT,\n CLASS_OR_EXTENDS,\n GETTER_OR_SETTER,\n {\n match: /\\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`\n }\n ]\n };\n}\n\n/*\nLanguage: TypeScript\nAuthor: Panu Horsmalahti <panu.horsmalahti@iki.fi>\nContributors: Ike Ku <dempfi@yahoo.com>\nDescription: TypeScript is a strict superset of JavaScript\nWebsite: https://www.typescriptlang.org\nCategory: common, scripting\n*/\n\n\n/** @type LanguageFn */\nfunction typescript(hljs) {\n const regex = hljs.regex;\n const tsLanguage = javascript(hljs);\n\n const IDENT_RE$1 = IDENT_RE;\n const TYPES = [\n \"any\",\n \"void\",\n \"number\",\n \"boolean\",\n \"string\",\n \"object\",\n \"never\",\n \"symbol\",\n \"bigint\",\n \"unknown\"\n ];\n const NAMESPACE = {\n begin: [\n /namespace/,\n /\\s+/,\n hljs.IDENT_RE\n ],\n beginScope: {\n 1: \"keyword\",\n 3: \"title.class\"\n }\n };\n const INTERFACE = {\n beginKeywords: 'interface',\n end: /\\{/,\n excludeEnd: true,\n keywords: {\n keyword: 'interface extends',\n built_in: TYPES\n },\n contains: [ tsLanguage.exports.CLASS_REFERENCE ]\n };\n const USE_STRICT = {\n className: 'meta',\n relevance: 10,\n begin: /^\\s*['\"]use strict['\"]/\n };\n const TS_SPECIFIC_KEYWORDS = [\n \"type\",\n // \"namespace\",\n \"interface\",\n \"public\",\n \"private\",\n \"protected\",\n \"implements\",\n \"declare\",\n \"abstract\",\n \"readonly\",\n \"enum\",\n \"override\",\n \"satisfies\"\n ];\n /*\n namespace is a TS keyword but it's fine to use it as a variable name too.\n const message = 'foo';\n const namespace = 'bar';\n */\n const KEYWORDS$1 = {\n $pattern: IDENT_RE,\n keyword: KEYWORDS.concat(TS_SPECIFIC_KEYWORDS),\n literal: LITERALS,\n built_in: BUILT_INS.concat(TYPES),\n \"variable.language\": BUILT_IN_VARIABLES\n };\n\n const DECORATOR = {\n className: 'meta',\n begin: '@' + IDENT_RE$1,\n };\n\n const swapMode = (mode, label, replacement) => {\n const indx = mode.contains.findIndex(m => m.label === label);\n if (indx === -1) { throw new Error(\"can not find mode to replace\"); }\n\n mode.contains.splice(indx, 1, replacement);\n };\n\n\n // this should update anywhere keywords is used since\n // it will be the same actual JS object\n Object.assign(tsLanguage.keywords, KEYWORDS$1);\n\n tsLanguage.exports.PARAMS_CONTAINS.push(DECORATOR);\n\n // highlight the function params\n const ATTRIBUTE_HIGHLIGHT = tsLanguage.contains.find(c => c.scope === \"attr\");\n\n // take default attr rule and extend it to support optionals\n const OPTIONAL_KEY_OR_ARGUMENT = Object.assign({},\n ATTRIBUTE_HIGHLIGHT,\n { match: regex.concat(IDENT_RE$1, regex.lookahead(/\\s*\\?:/)) }\n );\n tsLanguage.exports.PARAMS_CONTAINS.push([\n tsLanguage.exports.CLASS_REFERENCE, // class reference for highlighting the params types\n ATTRIBUTE_HIGHLIGHT, // highlight the params key\n OPTIONAL_KEY_OR_ARGUMENT, // Added for optional property assignment highlighting\n ]);\n\n // Add the optional property assignment highlighting for objects or classes\n tsLanguage.contains = tsLanguage.contains.concat([\n DECORATOR,\n NAMESPACE,\n INTERFACE,\n OPTIONAL_KEY_OR_ARGUMENT, // Added for optional property assignment highlighting\n ]);\n\n // TS gets a simpler shebang rule than JS\n swapMode(tsLanguage, \"shebang\", hljs.SHEBANG());\n // JS use strict rule purposely excludes `asm` which makes no sense\n swapMode(tsLanguage, \"use_strict\", USE_STRICT);\n\n const functionDeclaration = tsLanguage.contains.find(m => m.label === \"func.def\");\n functionDeclaration.relevance = 0; // () => {} is more typical in TypeScript\n\n Object.assign(tsLanguage, {\n name: 'TypeScript',\n aliases: [\n 'ts',\n 'tsx',\n 'mts',\n 'cts'\n ]\n });\n\n return tsLanguage;\n}\n\nexport { typescript as default };\n","/*\nLanguage: JSON\nDescription: JSON (JavaScript Object Notation) is a lightweight data-interchange format.\nAuthor: Ivan Sagalaev <maniac@softwaremaniacs.org>\nWebsite: http://www.json.org\nCategory: common, protocols, web\n*/\n\nfunction json(hljs) {\n const ATTRIBUTE = {\n className: 'attr',\n begin: /\"(\\\\.|[^\\\\\"\\r\\n])*\"(?=\\s*:)/,\n relevance: 1.01\n };\n const PUNCTUATION = {\n match: /[{}[\\],:]/,\n className: \"punctuation\",\n relevance: 0\n };\n const LITERALS = [\n \"true\",\n \"false\",\n \"null\"\n ];\n // NOTE: normally we would rely on `keywords` for this but using a mode here allows us\n // - to use the very tight `illegal: \\S` rule later to flag any other character\n // - as illegal indicating that despite looking like JSON we do not truly have\n // - JSON and thus improve false-positively greatly since JSON will try and claim\n // - all sorts of JSON looking stuff\n const LITERALS_MODE = {\n scope: \"literal\",\n beginKeywords: LITERALS.join(\" \"),\n };\n\n return {\n name: 'JSON',\n aliases: ['jsonc'],\n keywords:{\n literal: LITERALS,\n },\n contains: [\n ATTRIBUTE,\n PUNCTUATION,\n hljs.QUOTE_STRING_MODE,\n LITERALS_MODE,\n hljs.C_NUMBER_MODE,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ],\n illegal: '\\\\S'\n };\n}\n\nexport { json as default };\n","/*\nLanguage: HTML, XML\nWebsite: https://www.w3.org/XML/\nCategory: common, web\nAudit: 2020\n*/\n\n/** @type LanguageFn */\nfunction xml(hljs) {\n const regex = hljs.regex;\n // XML names can have the following additional letters: https://www.w3.org/TR/xml/#NT-NameChar\n // OTHER_NAME_CHARS = /[:\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]/;\n // Element names start with NAME_START_CHAR followed by optional other Unicode letters, ASCII digits, hyphens, underscores, and periods\n // const TAG_NAME_RE = regex.concat(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/, regex.optional(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*:/), /[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*/);;\n // const XML_IDENT_RE = /[A-Z_a-z:\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]+/;\n // const TAG_NAME_RE = regex.concat(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/, regex.optional(/[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*:/), /[A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\-.0-9\\u00B7\\u0300-\\u036F\\u203F-\\u2040]*/);\n // however, to cater for performance and more Unicode support rely simply on the Unicode letter class\n const TAG_NAME_RE = regex.concat(/[\\p{L}_]/u, regex.optional(/[\\p{L}0-9_.-]*:/u), /[\\p{L}0-9_.-]*/u);\n const XML_IDENT_RE = /[\\p{L}0-9._:-]+/u;\n const XML_ENTITIES = {\n className: 'symbol',\n begin: /&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/\n };\n const XML_META_KEYWORDS = {\n begin: /\\s/,\n contains: [\n {\n className: 'keyword',\n begin: /#?[a-z_][a-z1-9_-]+/,\n illegal: /\\n/\n }\n ]\n };\n const XML_META_PAR_KEYWORDS = hljs.inherit(XML_META_KEYWORDS, {\n begin: /\\(/,\n end: /\\)/\n });\n const APOS_META_STRING_MODE = hljs.inherit(hljs.APOS_STRING_MODE, { className: 'string' });\n const QUOTE_META_STRING_MODE = hljs.inherit(hljs.QUOTE_STRING_MODE, { className: 'string' });\n const TAG_INTERNALS = {\n endsWithParent: true,\n illegal: /</,\n relevance: 0,\n contains: [\n {\n className: 'attr',\n begin: XML_IDENT_RE,\n relevance: 0\n },\n {\n begin: /=\\s*/,\n relevance: 0,\n contains: [\n {\n className: 'string',\n endsParent: true,\n variants: [\n {\n begin: /\"/,\n end: /\"/,\n contains: [ XML_ENTITIES ]\n },\n {\n begin: /'/,\n end: /'/,\n contains: [ XML_ENTITIES ]\n },\n { begin: /[^\\s\"'=<>`]+/ }\n ]\n }\n ]\n }\n ]\n };\n return {\n name: 'HTML, XML',\n aliases: [\n 'html',\n 'xhtml',\n 'rss',\n 'atom',\n 'xjb',\n 'xsd',\n 'xsl',\n 'plist',\n 'wsf',\n 'svg'\n ],\n case_insensitive: true,\n unicodeRegex: true,\n contains: [\n {\n className: 'meta',\n begin: /<![a-z]/,\n end: />/,\n relevance: 10,\n contains: [\n XML_META_KEYWORDS,\n QUOTE_META_STRING_MODE,\n APOS_META_STRING_MODE,\n XML_META_PAR_KEYWORDS,\n {\n begin: /\\[/,\n end: /\\]/,\n contains: [\n {\n className: 'meta',\n begin: /<![a-z]/,\n end: />/,\n contains: [\n XML_META_KEYWORDS,\n XML_META_PAR_KEYWORDS,\n QUOTE_META_STRING_MODE,\n APOS_META_STRING_MODE\n ]\n }\n ]\n }\n ]\n },\n hljs.COMMENT(\n /<!--/,\n /-->/,\n { relevance: 10 }\n ),\n {\n begin: /<!\\[CDATA\\[/,\n end: /\\]\\]>/,\n relevance: 10\n },\n XML_ENTITIES,\n // xml processing instructions\n {\n className: 'meta',\n end: /\\?>/,\n variants: [\n {\n begin: /<\\?xml/,\n relevance: 10,\n contains: [\n QUOTE_META_STRING_MODE\n ]\n },\n {\n begin: /<\\?[a-z][a-z0-9]+/,\n }\n ]\n\n },\n {\n className: 'tag',\n /*\n The lookahead pattern (?=...) ensures that 'begin' only matches\n '<style' as a single word, followed by a whitespace or an\n ending bracket.\n */\n begin: /<style(?=\\s|>)/,\n end: />/,\n keywords: { name: 'style' },\n contains: [ TAG_INTERNALS ],\n starts: {\n end: /<\\/style>/,\n returnEnd: true,\n subLanguage: [\n 'css',\n 'xml'\n ]\n }\n },\n {\n className: 'tag',\n // See the comment in the <style tag about the lookahead pattern\n begin: /<script(?=\\s|>)/,\n end: />/,\n keywords: { name: 'script' },\n contains: [ TAG_INTERNALS ],\n starts: {\n end: /<\\/script>/,\n returnEnd: true,\n subLanguage: [\n 'javascript',\n 'handlebars',\n 'xml'\n ]\n }\n },\n // we need this for now for jSX\n {\n className: 'tag',\n begin: /<>|<\\/>/\n },\n // open tag\n {\n className: 'tag',\n begin: regex.concat(\n /</,\n regex.lookahead(regex.concat(\n TAG_NAME_RE,\n // <tag/>\n // <tag>\n // <tag ...\n regex.either(/\\/>/, />/, /\\s/)\n ))\n ),\n end: /\\/?>/,\n contains: [\n {\n className: 'name',\n begin: TAG_NAME_RE,\n relevance: 0,\n starts: TAG_INTERNALS\n }\n ]\n },\n // close tag\n {\n className: 'tag',\n begin: regex.concat(\n /<\\//,\n regex.lookahead(regex.concat(\n TAG_NAME_RE, />/\n ))\n ),\n contains: [\n {\n className: 'name',\n begin: TAG_NAME_RE,\n relevance: 0\n },\n {\n begin: />/,\n relevance: 0,\n endsParent: true\n }\n ]\n }\n ]\n };\n}\n\nexport { xml as default };\n","const MODES = (hljs) => {\n return {\n IMPORTANT: {\n scope: 'meta',\n begin: '!important'\n },\n BLOCK_COMMENT: hljs.C_BLOCK_COMMENT_MODE,\n HEXCOLOR: {\n scope: 'number',\n begin: /#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\\b/\n },\n FUNCTION_DISPATCH: {\n className: \"built_in\",\n begin: /[\\w-]+(?=\\()/\n },\n ATTRIBUTE_SELECTOR_MODE: {\n scope: 'selector-attr',\n begin: /\\[/,\n end: /\\]/,\n illegal: '$',\n contains: [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE\n ]\n },\n CSS_NUMBER_MODE: {\n scope: 'number',\n begin: hljs.NUMBER_RE + '(' +\n '%|em|ex|ch|rem' +\n '|vw|vh|vmin|vmax' +\n '|cm|mm|in|pt|pc|px' +\n '|deg|grad|rad|turn' +\n '|s|ms' +\n '|Hz|kHz' +\n '|dpi|dpcm|dppx' +\n ')?',\n relevance: 0\n },\n CSS_VARIABLE: {\n className: \"attr\",\n begin: /--[A-Za-z_][A-Za-z0-9_-]*/\n }\n };\n};\n\nconst HTML_TAGS = [\n 'a',\n 'abbr',\n 'address',\n 'article',\n 'aside',\n 'audio',\n 'b',\n 'blockquote',\n 'body',\n 'button',\n 'canvas',\n 'caption',\n 'cite',\n 'code',\n 'dd',\n 'del',\n 'details',\n 'dfn',\n 'div',\n 'dl',\n 'dt',\n 'em',\n 'fieldset',\n 'figcaption',\n 'figure',\n 'footer',\n 'form',\n 'h1',\n 'h2',\n 'h3',\n 'h4',\n 'h5',\n 'h6',\n 'header',\n 'hgroup',\n 'html',\n 'i',\n 'iframe',\n 'img',\n 'input',\n 'ins',\n 'kbd',\n 'label',\n 'legend',\n 'li',\n 'main',\n 'mark',\n 'menu',\n 'nav',\n 'object',\n 'ol',\n 'optgroup',\n 'option',\n 'p',\n 'picture',\n 'q',\n 'quote',\n 'samp',\n 'section',\n 'select',\n 'source',\n 'span',\n 'strong',\n 'summary',\n 'sup',\n 'table',\n 'tbody',\n 'td',\n 'textarea',\n 'tfoot',\n 'th',\n 'thead',\n 'time',\n 'tr',\n 'ul',\n 'var',\n 'video'\n];\n\nconst SVG_TAGS = [\n 'defs',\n 'g',\n 'marker',\n 'mask',\n 'pattern',\n 'svg',\n 'switch',\n 'symbol',\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feFlood',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMorphology',\n 'feOffset',\n 'feSpecularLighting',\n 'feTile',\n 'feTurbulence',\n 'linearGradient',\n 'radialGradient',\n 'stop',\n 'circle',\n 'ellipse',\n 'image',\n 'line',\n 'path',\n 'polygon',\n 'polyline',\n 'rect',\n 'text',\n 'use',\n 'textPath',\n 'tspan',\n 'foreignObject',\n 'clipPath'\n];\n\nconst TAGS = [\n ...HTML_TAGS,\n ...SVG_TAGS,\n];\n\n// Sorting, then reversing makes sure longer attributes/elements like\n// `font-weight` are matched fully instead of getting false positives on say `font`\n\nconst MEDIA_FEATURES = [\n 'any-hover',\n 'any-pointer',\n 'aspect-ratio',\n 'color',\n 'color-gamut',\n 'color-index',\n 'device-aspect-ratio',\n 'device-height',\n 'device-width',\n 'display-mode',\n 'forced-colors',\n 'grid',\n 'height',\n 'hover',\n 'inverted-colors',\n 'monochrome',\n 'orientation',\n 'overflow-block',\n 'overflow-inline',\n 'pointer',\n 'prefers-color-scheme',\n 'prefers-contrast',\n 'prefers-reduced-motion',\n 'prefers-reduced-transparency',\n 'resolution',\n 'scan',\n 'scripting',\n 'update',\n 'width',\n // TODO: find a better solution?\n 'min-width',\n 'max-width',\n 'min-height',\n 'max-height'\n].sort().reverse();\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-classes\nconst PSEUDO_CLASSES = [\n 'active',\n 'any-link',\n 'blank',\n 'checked',\n 'current',\n 'default',\n 'defined',\n 'dir', // dir()\n 'disabled',\n 'drop',\n 'empty',\n 'enabled',\n 'first',\n 'first-child',\n 'first-of-type',\n 'fullscreen',\n 'future',\n 'focus',\n 'focus-visible',\n 'focus-within',\n 'has', // has()\n 'host', // host or host()\n 'host-context', // host-context()\n 'hover',\n 'indeterminate',\n 'in-range',\n 'invalid',\n 'is', // is()\n 'lang', // lang()\n 'last-child',\n 'last-of-type',\n 'left',\n 'link',\n 'local-link',\n 'not', // not()\n 'nth-child', // nth-child()\n 'nth-col', // nth-col()\n 'nth-last-child', // nth-last-child()\n 'nth-last-col', // nth-last-col()\n 'nth-last-of-type', //nth-last-of-type()\n 'nth-of-type', //nth-of-type()\n 'only-child',\n 'only-of-type',\n 'optional',\n 'out-of-range',\n 'past',\n 'placeholder-shown',\n 'read-only',\n 'read-write',\n 'required',\n 'right',\n 'root',\n 'scope',\n 'target',\n 'target-within',\n 'user-invalid',\n 'valid',\n 'visited',\n 'where' // where()\n].sort().reverse();\n\n// https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements\nconst PSEUDO_ELEMENTS = [\n 'after',\n 'backdrop',\n 'before',\n 'cue',\n 'cue-region',\n 'first-letter',\n 'first-line',\n 'grammar-error',\n 'marker',\n 'part',\n 'placeholder',\n 'selection',\n 'slotted',\n 'spelling-error'\n].sort().reverse();\n\nconst ATTRIBUTES = [\n 'accent-color',\n 'align-content',\n 'align-items',\n 'align-self',\n 'alignment-baseline',\n 'all',\n 'anchor-name',\n 'animation',\n 'animation-composition',\n 'animation-delay',\n 'animation-direction',\n 'animation-duration',\n 'animation-fill-mode',\n 'animation-iteration-count',\n 'animation-name',\n 'animation-play-state',\n 'animation-range',\n 'animation-range-end',\n 'animation-range-start',\n 'animation-timeline',\n 'animation-timing-function',\n 'appearance',\n 'aspect-ratio',\n 'backdrop-filter',\n 'backface-visibility',\n 'background',\n 'background-attachment',\n 'background-blend-mode',\n 'background-clip',\n 'background-color',\n 'background-image',\n 'background-origin',\n 'background-position',\n 'background-position-x',\n 'background-position-y',\n 'background-repeat',\n 'background-size',\n 'baseline-shift',\n 'block-size',\n 'border',\n 'border-block',\n 'border-block-color',\n 'border-block-end',\n 'border-block-end-color',\n 'border-block-end-style',\n 'border-block-end-width',\n 'border-block-start',\n 'border-block-start-color',\n 'border-block-start-style',\n 'border-block-start-width',\n 'border-block-style',\n 'border-block-width',\n 'border-bottom',\n 'border-bottom-color',\n 'border-bottom-left-radius',\n 'border-bottom-right-radius',\n 'border-bottom-style',\n 'border-bottom-width',\n 'border-collapse',\n 'border-color',\n 'border-end-end-radius',\n 'border-end-start-radius',\n 'border-image',\n 'border-image-outset',\n 'border-image-repeat',\n 'border-image-slice',\n 'border-image-source',\n 'border-image-width',\n 'border-inline',\n 'border-inline-color',\n 'border-inline-end',\n 'border-inline-end-color',\n 'border-inline-end-style',\n 'border-inline-end-width',\n 'border-inline-start',\n 'border-inline-start-color',\n 'border-inline-start-style',\n 'border-inline-start-width',\n 'border-inline-style',\n 'border-inline-width',\n 'border-left',\n 'border-left-color',\n 'border-left-style',\n 'border-left-width',\n 'border-radius',\n 'border-right',\n 'border-right-color',\n 'border-right-style',\n 'border-right-width',\n 'border-spacing',\n 'border-start-end-radius',\n 'border-start-start-radius',\n 'border-style',\n 'border-top',\n 'border-top-color',\n 'border-top-left-radius',\n 'border-top-right-radius',\n 'border-top-style',\n 'border-top-width',\n 'border-width',\n 'bottom',\n 'box-align',\n 'box-decoration-break',\n 'box-direction',\n 'box-flex',\n 'box-flex-group',\n 'box-lines',\n 'box-ordinal-group',\n 'box-orient',\n 'box-pack',\n 'box-shadow',\n 'box-sizing',\n 'break-after',\n 'break-before',\n 'break-inside',\n 'caption-side',\n 'caret-color',\n 'clear',\n 'clip',\n 'clip-path',\n 'clip-rule',\n 'color',\n 'color-interpolation',\n 'color-interpolation-filters',\n 'color-profile',\n 'color-rendering',\n 'color-scheme',\n 'column-count',\n 'column-fill',\n 'column-gap',\n 'column-rule',\n 'column-rule-color',\n 'column-rule-style',\n 'column-rule-width',\n 'column-span',\n 'column-width',\n 'columns',\n 'contain',\n 'contain-intrinsic-block-size',\n 'contain-intrinsic-height',\n 'contain-intrinsic-inline-size',\n 'contain-intrinsic-size',\n 'contain-intrinsic-width',\n 'container',\n 'container-name',\n 'container-type',\n 'content',\n 'content-visibility',\n 'counter-increment',\n 'counter-reset',\n 'counter-set',\n 'cue',\n 'cue-after',\n 'cue-before',\n 'cursor',\n 'cx',\n 'cy',\n 'direction',\n 'display',\n 'dominant-baseline',\n 'empty-cells',\n 'enable-background',\n 'field-sizing',\n 'fill',\n 'fill-opacity',\n 'fill-rule',\n 'filter',\n 'flex',\n 'flex-basis',\n 'flex-direction',\n 'flex-flow',\n 'flex-grow',\n 'flex-shrink',\n 'flex-wrap',\n 'float',\n 'flood-color',\n 'flood-opacity',\n 'flow',\n 'font',\n 'font-display',\n 'font-family',\n 'font-feature-settings',\n 'font-kerning',\n 'font-language-override',\n 'font-optical-sizing',\n 'font-palette',\n 'font-size',\n 'font-size-adjust',\n 'font-smooth',\n 'font-smoothing',\n 'font-stretch',\n 'font-style',\n 'font-synthesis',\n 'font-synthesis-position',\n 'font-synthesis-small-caps',\n 'font-synthesis-style',\n 'font-synthesis-weight',\n 'font-variant',\n 'font-variant-alternates',\n 'font-variant-caps',\n 'font-variant-east-asian',\n 'font-variant-emoji',\n 'font-variant-ligatures',\n 'font-variant-numeric',\n 'font-variant-position',\n 'font-variation-settings',\n 'font-weight',\n 'forced-color-adjust',\n 'gap',\n 'glyph-orientation-horizontal',\n 'glyph-orientation-vertical',\n 'grid',\n 'grid-area',\n 'grid-auto-columns',\n 'grid-auto-flow',\n 'grid-auto-rows',\n 'grid-column',\n 'grid-column-end',\n 'grid-column-start',\n 'grid-gap',\n 'grid-row',\n 'grid-row-end',\n 'grid-row-start',\n 'grid-template',\n 'grid-template-areas',\n 'grid-template-columns',\n 'grid-template-rows',\n 'hanging-punctuation',\n 'height',\n 'hyphenate-character',\n 'hyphenate-limit-chars',\n 'hyphens',\n 'icon',\n 'image-orientation',\n 'image-rendering',\n 'image-resolution',\n 'ime-mode',\n 'initial-letter',\n 'initial-letter-align',\n 'inline-size',\n 'inset',\n 'inset-area',\n 'inset-block',\n 'inset-block-end',\n 'inset-block-start',\n 'inset-inline',\n 'inset-inline-end',\n 'inset-inline-start',\n 'isolation',\n 'justify-content',\n 'justify-items',\n 'justify-self',\n 'kerning',\n 'left',\n 'letter-spacing',\n 'lighting-color',\n 'line-break',\n 'line-height',\n 'line-height-step',\n 'list-style',\n 'list-style-image',\n 'list-style-position',\n 'list-style-type',\n 'margin',\n 'margin-block',\n 'margin-block-end',\n 'margin-block-start',\n 'margin-bottom',\n 'margin-inline',\n 'margin-inline-end',\n 'margin-inline-start',\n 'margin-left',\n 'margin-right',\n 'margin-top',\n 'margin-trim',\n 'marker',\n 'marker-end',\n 'marker-mid',\n 'marker-start',\n 'marks',\n 'mask',\n 'mask-border',\n 'mask-border-mode',\n 'mask-border-outset',\n 'mask-border-repeat',\n 'mask-border-slice',\n 'mask-border-source',\n 'mask-border-width',\n 'mask-clip',\n 'mask-composite',\n 'mask-image',\n 'mask-mode',\n 'mask-origin',\n 'mask-position',\n 'mask-repeat',\n 'mask-size',\n 'mask-type',\n 'masonry-auto-flow',\n 'math-depth',\n 'math-shift',\n 'math-style',\n 'max-block-size',\n 'max-height',\n 'max-inline-size',\n 'max-width',\n 'min-block-size',\n 'min-height',\n 'min-inline-size',\n 'min-width',\n 'mix-blend-mode',\n 'nav-down',\n 'nav-index',\n 'nav-left',\n 'nav-right',\n 'nav-up',\n 'none',\n 'normal',\n 'object-fit',\n 'object-position',\n 'offset',\n 'offset-anchor',\n 'offset-distance',\n 'offset-path',\n 'offset-position',\n 'offset-rotate',\n 'opacity',\n 'order',\n 'orphans',\n 'outline',\n 'outline-color',\n 'outline-offset',\n 'outline-style',\n 'outline-width',\n 'overflow',\n 'overflow-anchor',\n 'overflow-block',\n 'overflow-clip-margin',\n 'overflow-inline',\n 'overflow-wrap',\n 'overflow-x',\n 'overflow-y',\n 'overlay',\n 'overscroll-behavior',\n 'overscroll-behavior-block',\n 'overscroll-behavior-inline',\n 'overscroll-behavior-x',\n 'overscroll-behavior-y',\n 'padding',\n 'padding-block',\n 'padding-block-end',\n 'padding-block-start',\n 'padding-bottom',\n 'padding-inline',\n 'padding-inline-end',\n 'padding-inline-start',\n 'padding-left',\n 'padding-right',\n 'padding-top',\n 'page',\n 'page-break-after',\n 'page-break-before',\n 'page-break-inside',\n 'paint-order',\n 'pause',\n 'pause-after',\n 'pause-before',\n 'perspective',\n 'perspective-origin',\n 'place-content',\n 'place-items',\n 'place-self',\n 'pointer-events',\n 'position',\n 'position-anchor',\n 'position-visibility',\n 'print-color-adjust',\n 'quotes',\n 'r',\n 'resize',\n 'rest',\n 'rest-after',\n 'rest-before',\n 'right',\n 'rotate',\n 'row-gap',\n 'ruby-align',\n 'ruby-position',\n 'scale',\n 'scroll-behavior',\n 'scroll-margin',\n 'scroll-margin-block',\n 'scroll-margin-block-end',\n 'scroll-margin-block-start',\n 'scroll-margin-bottom',\n 'scroll-margin-inline',\n 'scroll-margin-inline-end',\n 'scroll-margin-inline-start',\n 'scroll-margin-left',\n 'scroll-margin-right',\n 'scroll-margin-top',\n 'scroll-padding',\n 'scroll-padding-block',\n 'scroll-padding-block-end',\n 'scroll-padding-block-start',\n 'scroll-padding-bottom',\n 'scroll-padding-inline',\n 'scroll-padding-inline-end',\n 'scroll-padding-inline-start',\n 'scroll-padding-left',\n 'scroll-padding-right',\n 'scroll-padding-top',\n 'scroll-snap-align',\n 'scroll-snap-stop',\n 'scroll-snap-type',\n 'scroll-timeline',\n 'scroll-timeline-axis',\n 'scroll-timeline-name',\n 'scrollbar-color',\n 'scrollbar-gutter',\n 'scrollbar-width',\n 'shape-image-threshold',\n 'shape-margin',\n 'shape-outside',\n 'shape-rendering',\n 'speak',\n 'speak-as',\n 'src', // @font-face\n 'stop-color',\n 'stop-opacity',\n 'stroke',\n 'stroke-dasharray',\n 'stroke-dashoffset',\n 'stroke-linecap',\n 'stroke-linejoin',\n 'stroke-miterlimit',\n 'stroke-opacity',\n 'stroke-width',\n 'tab-size',\n 'table-layout',\n 'text-align',\n 'text-align-all',\n 'text-align-last',\n 'text-anchor',\n 'text-combine-upright',\n 'text-decoration',\n 'text-decoration-color',\n 'text-decoration-line',\n 'text-decoration-skip',\n 'text-decoration-skip-ink',\n 'text-decoration-style',\n 'text-decoration-thickness',\n 'text-emphasis',\n 'text-emphasis-color',\n 'text-emphasis-position',\n 'text-emphasis-style',\n 'text-indent',\n 'text-justify',\n 'text-orientation',\n 'text-overflow',\n 'text-rendering',\n 'text-shadow',\n 'text-size-adjust',\n 'text-transform',\n 'text-underline-offset',\n 'text-underline-position',\n 'text-wrap',\n 'text-wrap-mode',\n 'text-wrap-style',\n 'timeline-scope',\n 'top',\n 'touch-action',\n 'transform',\n 'transform-box',\n 'transform-origin',\n 'transform-style',\n 'transition',\n 'transition-behavior',\n 'transition-delay',\n 'transition-duration',\n 'transition-property',\n 'transition-timing-function',\n 'translate',\n 'unicode-bidi',\n 'user-modify',\n 'user-select',\n 'vector-effect',\n 'vertical-align',\n 'view-timeline',\n 'view-timeline-axis',\n 'view-timeline-inset',\n 'view-timeline-name',\n 'view-transition-name',\n 'visibility',\n 'voice-balance',\n 'voice-duration',\n 'voice-family',\n 'voice-pitch',\n 'voice-range',\n 'voice-rate',\n 'voice-stress',\n 'voice-volume',\n 'white-space',\n 'white-space-collapse',\n 'widows',\n 'width',\n 'will-change',\n 'word-break',\n 'word-spacing',\n 'word-wrap',\n 'writing-mode',\n 'x',\n 'y',\n 'z-index',\n 'zoom'\n].sort().reverse();\n\n/*\nLanguage: CSS\nCategory: common, css, web\nWebsite: https://developer.mozilla.org/en-US/docs/Web/CSS\n*/\n\n\n/** @type LanguageFn */\nfunction css(hljs) {\n const regex = hljs.regex;\n const modes = MODES(hljs);\n const VENDOR_PREFIX = { begin: /-(webkit|moz|ms|o)-(?=[a-z])/ };\n const AT_MODIFIERS = \"and or not only\";\n const AT_PROPERTY_RE = /@-?\\w[\\w]*(-\\w+)*/; // @-webkit-keyframes\n const IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';\n const STRINGS = [\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE\n ];\n\n return {\n name: 'CSS',\n case_insensitive: true,\n illegal: /[=|'\\$]/,\n keywords: { keyframePosition: \"from to\" },\n classNameAliases: {\n // for visual continuity with `tag {}` and because we\n // don't have a great class for this?\n keyframePosition: \"selector-tag\" },\n contains: [\n modes.BLOCK_COMMENT,\n VENDOR_PREFIX,\n // to recognize keyframe 40% etc which are outside the scope of our\n // attribute value mode\n modes.CSS_NUMBER_MODE,\n {\n className: 'selector-id',\n begin: /#[A-Za-z0-9_-]+/,\n relevance: 0\n },\n {\n className: 'selector-class',\n begin: '\\\\.' + IDENT_RE,\n relevance: 0\n },\n modes.ATTRIBUTE_SELECTOR_MODE,\n {\n className: 'selector-pseudo',\n variants: [\n { begin: ':(' + PSEUDO_CLASSES.join('|') + ')' },\n { begin: ':(:)?(' + PSEUDO_ELEMENTS.join('|') + ')' }\n ]\n },\n // we may actually need this (12/2020)\n // { // pseudo-selector params\n // begin: /\\(/,\n // end: /\\)/,\n // contains: [ hljs.CSS_NUMBER_MODE ]\n // },\n modes.CSS_VARIABLE,\n {\n className: 'attribute',\n begin: '\\\\b(' + ATTRIBUTES.join('|') + ')\\\\b'\n },\n // attribute values\n {\n begin: /:/,\n end: /[;}{]/,\n contains: [\n modes.BLOCK_COMMENT,\n modes.HEXCOLOR,\n modes.IMPORTANT,\n modes.CSS_NUMBER_MODE,\n ...STRINGS,\n // needed to highlight these as strings and to avoid issues with\n // illegal characters that might be inside urls that would tigger the\n // languages illegal stack\n {\n begin: /(url|data-uri)\\(/,\n end: /\\)/,\n relevance: 0, // from keywords\n keywords: { built_in: \"url data-uri\" },\n contains: [\n ...STRINGS,\n {\n className: \"string\",\n // any character other than `)` as in `url()` will be the start\n // of a string, which ends with `)` (from the parent mode)\n begin: /[^)]/,\n endsWithParent: true,\n excludeEnd: true\n }\n ]\n },\n modes.FUNCTION_DISPATCH\n ]\n },\n {\n begin: regex.lookahead(/@/),\n end: '[{;]',\n relevance: 0,\n illegal: /:/, // break on Less variables @var: ...\n contains: [\n {\n className: 'keyword',\n begin: AT_PROPERTY_RE\n },\n {\n begin: /\\s/,\n endsWithParent: true,\n excludeEnd: true,\n relevance: 0,\n keywords: {\n $pattern: /[a-z-]+/,\n keyword: AT_MODIFIERS,\n attribute: MEDIA_FEATURES.join(\" \")\n },\n contains: [\n {\n begin: /[a-z-]+(?=:)/,\n className: \"attribute\"\n },\n ...STRINGS,\n modes.CSS_NUMBER_MODE\n ]\n }\n ]\n },\n {\n className: 'selector-tag',\n begin: '\\\\b(' + TAGS.join('|') + ')\\\\b'\n }\n ]\n };\n}\n\nexport { css as default };\n","/*\nLanguage: Bash\nAuthor: vah <vahtenberg@gmail.com>\nContributrors: Benjamin Pannell <contact@sierrasoftworks.com>\nWebsite: https://www.gnu.org/software/bash/\nCategory: common, scripting\n*/\n\n/** @type LanguageFn */\nfunction bash(hljs) {\n const regex = hljs.regex;\n const VAR = {};\n const BRACED_VAR = {\n begin: /\\$\\{/,\n end: /\\}/,\n contains: [\n \"self\",\n {\n begin: /:-/,\n contains: [ VAR ]\n } // default values\n ]\n };\n Object.assign(VAR, {\n className: 'variable',\n variants: [\n { begin: regex.concat(/\\$[\\w\\d#@][\\w\\d_]*/,\n // negative look-ahead tries to avoid matching patterns that are not\n // Perl at all like $ident$, @ident@, etc.\n `(?![\\\\w\\\\d])(?![$])`) },\n BRACED_VAR\n ]\n });\n\n const SUBST = {\n className: 'subst',\n begin: /\\$\\(/,\n end: /\\)/,\n contains: [ hljs.BACKSLASH_ESCAPE ]\n };\n const COMMENT = hljs.inherit(\n hljs.COMMENT(),\n {\n match: [\n /(^|\\s)/,\n /#.*$/\n ],\n scope: {\n 2: 'comment'\n }\n }\n );\n const HERE_DOC = {\n begin: /<<-?\\s*(?=\\w+)/,\n starts: { contains: [\n hljs.END_SAME_AS_BEGIN({\n begin: /(\\w+)/,\n end: /(\\w+)/,\n className: 'string'\n })\n ] }\n };\n const QUOTE_STRING = {\n className: 'string',\n begin: /\"/,\n end: /\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n VAR,\n SUBST\n ]\n };\n SUBST.contains.push(QUOTE_STRING);\n const ESCAPED_QUOTE = {\n match: /\\\\\"/\n };\n const APOS_STRING = {\n className: 'string',\n begin: /'/,\n end: /'/\n };\n const ESCAPED_APOS = {\n match: /\\\\'/\n };\n const ARITHMETIC = {\n begin: /\\$?\\(\\(/,\n end: /\\)\\)/,\n contains: [\n {\n begin: /\\d+#[0-9a-f]+/,\n className: \"number\"\n },\n hljs.NUMBER_MODE,\n VAR\n ]\n };\n const SH_LIKE_SHELLS = [\n \"fish\",\n \"bash\",\n \"zsh\",\n \"sh\",\n \"csh\",\n \"ksh\",\n \"tcsh\",\n \"dash\",\n \"scsh\",\n ];\n const KNOWN_SHEBANG = hljs.SHEBANG({\n binary: `(${SH_LIKE_SHELLS.join(\"|\")})`,\n relevance: 10\n });\n const FUNCTION = {\n className: 'function',\n begin: /\\w[\\w\\d_]*\\s*\\(\\s*\\)\\s*\\{/,\n returnBegin: true,\n contains: [ hljs.inherit(hljs.TITLE_MODE, { begin: /\\w[\\w\\d_]*/ }) ],\n relevance: 0\n };\n\n const KEYWORDS = [\n \"if\",\n \"then\",\n \"else\",\n \"elif\",\n \"fi\",\n \"time\",\n \"for\",\n \"while\",\n \"until\",\n \"in\",\n \"do\",\n \"done\",\n \"case\",\n \"esac\",\n \"coproc\",\n \"function\",\n \"select\"\n ];\n\n const LITERALS = [\n \"true\",\n \"false\"\n ];\n\n // to consume paths to prevent keyword matches inside them\n const PATH_MODE = { match: /(\\/[a-z._-]+)+/ };\n\n // http://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html\n const SHELL_BUILT_INS = [\n \"break\",\n \"cd\",\n \"continue\",\n \"eval\",\n \"exec\",\n \"exit\",\n \"export\",\n \"getopts\",\n \"hash\",\n \"pwd\",\n \"readonly\",\n \"return\",\n \"shift\",\n \"test\",\n \"times\",\n \"trap\",\n \"umask\",\n \"unset\"\n ];\n\n const BASH_BUILT_INS = [\n \"alias\",\n \"bind\",\n \"builtin\",\n \"caller\",\n \"command\",\n \"declare\",\n \"echo\",\n \"enable\",\n \"help\",\n \"let\",\n \"local\",\n \"logout\",\n \"mapfile\",\n \"printf\",\n \"read\",\n \"readarray\",\n \"source\",\n \"sudo\",\n \"type\",\n \"typeset\",\n \"ulimit\",\n \"unalias\"\n ];\n\n const ZSH_BUILT_INS = [\n \"autoload\",\n \"bg\",\n \"bindkey\",\n \"bye\",\n \"cap\",\n \"chdir\",\n \"clone\",\n \"comparguments\",\n \"compcall\",\n \"compctl\",\n \"compdescribe\",\n \"compfiles\",\n \"compgroups\",\n \"compquote\",\n \"comptags\",\n \"comptry\",\n \"compvalues\",\n \"dirs\",\n \"disable\",\n \"disown\",\n \"echotc\",\n \"echoti\",\n \"emulate\",\n \"fc\",\n \"fg\",\n \"float\",\n \"functions\",\n \"getcap\",\n \"getln\",\n \"history\",\n \"integer\",\n \"jobs\",\n \"kill\",\n \"limit\",\n \"log\",\n \"noglob\",\n \"popd\",\n \"print\",\n \"pushd\",\n \"pushln\",\n \"rehash\",\n \"sched\",\n \"setcap\",\n \"setopt\",\n \"stat\",\n \"suspend\",\n \"ttyctl\",\n \"unfunction\",\n \"unhash\",\n \"unlimit\",\n \"unsetopt\",\n \"vared\",\n \"wait\",\n \"whence\",\n \"where\",\n \"which\",\n \"zcompile\",\n \"zformat\",\n \"zftp\",\n \"zle\",\n \"zmodload\",\n \"zparseopts\",\n \"zprof\",\n \"zpty\",\n \"zregexparse\",\n \"zsocket\",\n \"zstyle\",\n \"ztcp\"\n ];\n\n const GNU_CORE_UTILS = [\n \"chcon\",\n \"chgrp\",\n \"chown\",\n \"chmod\",\n \"cp\",\n \"dd\",\n \"df\",\n \"dir\",\n \"dircolors\",\n \"ln\",\n \"ls\",\n \"mkdir\",\n \"mkfifo\",\n \"mknod\",\n \"mktemp\",\n \"mv\",\n \"realpath\",\n \"rm\",\n \"rmdir\",\n \"shred\",\n \"sync\",\n \"touch\",\n \"truncate\",\n \"vdir\",\n \"b2sum\",\n \"base32\",\n \"base64\",\n \"cat\",\n \"cksum\",\n \"comm\",\n \"csplit\",\n \"cut\",\n \"expand\",\n \"fmt\",\n \"fold\",\n \"head\",\n \"join\",\n \"md5sum\",\n \"nl\",\n \"numfmt\",\n \"od\",\n \"paste\",\n \"ptx\",\n \"pr\",\n \"sha1sum\",\n \"sha224sum\",\n \"sha256sum\",\n \"sha384sum\",\n \"sha512sum\",\n \"shuf\",\n \"sort\",\n \"split\",\n \"sum\",\n \"tac\",\n \"tail\",\n \"tr\",\n \"tsort\",\n \"unexpand\",\n \"uniq\",\n \"wc\",\n \"arch\",\n \"basename\",\n \"chroot\",\n \"date\",\n \"dirname\",\n \"du\",\n \"echo\",\n \"env\",\n \"expr\",\n \"factor\",\n // \"false\", // keyword literal already\n \"groups\",\n \"hostid\",\n \"id\",\n \"link\",\n \"logname\",\n \"nice\",\n \"nohup\",\n \"nproc\",\n \"pathchk\",\n \"pinky\",\n \"printenv\",\n \"printf\",\n \"pwd\",\n \"readlink\",\n \"runcon\",\n \"seq\",\n \"sleep\",\n \"stat\",\n \"stdbuf\",\n \"stty\",\n \"tee\",\n \"test\",\n \"timeout\",\n // \"true\", // keyword literal already\n \"tty\",\n \"uname\",\n \"unlink\",\n \"uptime\",\n \"users\",\n \"who\",\n \"whoami\",\n \"yes\"\n ];\n\n return {\n name: 'Bash',\n aliases: [\n 'sh',\n 'zsh'\n ],\n keywords: {\n $pattern: /\\b[a-z][a-z0-9._-]+\\b/,\n keyword: KEYWORDS,\n literal: LITERALS,\n built_in: [\n ...SHELL_BUILT_INS,\n ...BASH_BUILT_INS,\n // Shell modifiers\n \"set\",\n \"shopt\",\n ...ZSH_BUILT_INS,\n ...GNU_CORE_UTILS\n ]\n },\n contains: [\n KNOWN_SHEBANG, // to catch known shells and boost relevancy\n hljs.SHEBANG(), // to catch unknown shells but still highlight the shebang\n FUNCTION,\n ARITHMETIC,\n COMMENT,\n HERE_DOC,\n PATH_MODE,\n QUOTE_STRING,\n ESCAPED_QUOTE,\n APOS_STRING,\n ESCAPED_APOS,\n VAR\n ]\n };\n}\n\nexport { bash as default };\n","/*\nLanguage: YAML\nDescription: Yet Another Markdown Language\nAuthor: Stefan Wienert <stwienert@gmail.com>\nContributors: Carl Baxter <carl@cbax.tech>\nRequires: ruby.js\nWebsite: https://yaml.org\nCategory: common, config\n*/\nfunction yaml(hljs) {\n const LITERALS = 'true false yes no null';\n\n // YAML spec allows non-reserved URI characters in tags.\n const URI_CHARACTERS = '[\\\\w#;/?:@&=+$,.~*\\'()[\\\\]]+';\n\n // Define keys as starting with a word character\n // ...containing word chars, spaces, colons, forward-slashes, hyphens and periods\n // ...and ending with a colon followed immediately by a space, tab or newline.\n // The YAML spec allows for much more than this, but this covers most use-cases.\n const KEY = {\n className: 'attr',\n variants: [\n // added brackets support and special char support\n { begin: /[\\w*@][\\w*@ :()\\./-]*:(?=[ \\t]|$)/ },\n { // double quoted keys - with brackets and special char support\n begin: /\"[\\w*@][\\w*@ :()\\./-]*\":(?=[ \\t]|$)/ },\n { // single quoted keys - with brackets and special char support\n begin: /'[\\w*@][\\w*@ :()\\./-]*':(?=[ \\t]|$)/ },\n ]\n };\n \n const TEMPLATE_VARIABLES = {\n className: 'template-variable',\n variants: [\n { // jinja templates Ansible\n begin: /\\{\\{/,\n end: /\\}\\}/\n },\n { // Ruby i18n\n begin: /%\\{/,\n end: /\\}/\n }\n ]\n };\n\n const SINGLE_QUOTE_STRING = {\n className: 'string',\n relevance: 0,\n begin: /'/,\n end: /'/,\n contains: [\n {\n match: /''/,\n scope: 'char.escape',\n relevance: 0\n }\n ]\n };\n\n const STRING = {\n className: 'string',\n relevance: 0,\n variants: [\n {\n begin: /\"/,\n end: /\"/\n },\n { begin: /\\S+/ }\n ],\n contains: [\n hljs.BACKSLASH_ESCAPE,\n TEMPLATE_VARIABLES\n ]\n };\n\n // Strings inside of value containers (objects) can't contain braces,\n // brackets, or commas\n const CONTAINER_STRING = hljs.inherit(STRING, { variants: [\n {\n begin: /'/,\n end: /'/,\n contains: [\n {\n begin: /''/,\n relevance: 0\n }\n ]\n },\n {\n begin: /\"/,\n end: /\"/\n },\n { begin: /[^\\s,{}[\\]]+/ }\n ] });\n\n const DATE_RE = '[0-9]{4}(-[0-9][0-9]){0,2}';\n const TIME_RE = '([Tt \\\\t][0-9][0-9]?(:[0-9][0-9]){2})?';\n const FRACTION_RE = '(\\\\.[0-9]*)?';\n const ZONE_RE = '([ \\\\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?';\n const TIMESTAMP = {\n className: 'number',\n begin: '\\\\b' + DATE_RE + TIME_RE + FRACTION_RE + ZONE_RE + '\\\\b'\n };\n\n const VALUE_CONTAINER = {\n end: ',',\n endsWithParent: true,\n excludeEnd: true,\n keywords: LITERALS,\n relevance: 0\n };\n const OBJECT = {\n begin: /\\{/,\n end: /\\}/,\n contains: [ VALUE_CONTAINER ],\n illegal: '\\\\n',\n relevance: 0\n };\n const ARRAY = {\n begin: '\\\\[',\n end: '\\\\]',\n contains: [ VALUE_CONTAINER ],\n illegal: '\\\\n',\n relevance: 0\n };\n\n const MODES = [\n KEY,\n {\n className: 'meta',\n begin: '^---\\\\s*$',\n relevance: 10\n },\n { // multi line string\n // Blocks start with a | or > followed by a newline\n //\n // Indentation of subsequent lines must be the same to\n // be considered part of the block\n className: 'string',\n begin: '[\\\\|>]([1-9]?[+-])?[ ]*\\\\n( +)[^ ][^\\\\n]*\\\\n(\\\\2[^\\\\n]+\\\\n?)*'\n },\n { // Ruby/Rails erb\n begin: '<%[%=-]?',\n end: '[%-]?%>',\n subLanguage: 'ruby',\n excludeBegin: true,\n excludeEnd: true,\n relevance: 0\n },\n { // named tags\n className: 'type',\n begin: '!\\\\w+!' + URI_CHARACTERS\n },\n // https://yaml.org/spec/1.2/spec.html#id2784064\n { // verbatim tags\n className: 'type',\n begin: '!<' + URI_CHARACTERS + \">\"\n },\n { // primary tags\n className: 'type',\n begin: '!' + URI_CHARACTERS\n },\n { // secondary tags\n className: 'type',\n begin: '!!' + URI_CHARACTERS\n },\n { // fragment id &ref\n className: 'meta',\n begin: '&' + hljs.UNDERSCORE_IDENT_RE + '$'\n },\n { // fragment reference *ref\n className: 'meta',\n begin: '\\\\*' + hljs.UNDERSCORE_IDENT_RE + '$'\n },\n { // array listing\n className: 'bullet',\n // TODO: remove |$ hack when we have proper look-ahead support\n begin: '-(?=[ ]|$)',\n relevance: 0\n },\n hljs.HASH_COMMENT_MODE,\n {\n beginKeywords: LITERALS,\n keywords: { literal: LITERALS }\n },\n TIMESTAMP,\n // numbers are any valid C-style number that\n // sit isolated from other words\n {\n className: 'number',\n begin: hljs.C_NUMBER_RE + '\\\\b',\n relevance: 0\n },\n OBJECT,\n ARRAY,\n SINGLE_QUOTE_STRING,\n STRING\n ];\n\n const VALUE_MODES = [ ...MODES ];\n VALUE_MODES.pop();\n VALUE_MODES.push(CONTAINER_STRING);\n VALUE_CONTAINER.contains = VALUE_MODES;\n\n return {\n name: 'YAML',\n case_insensitive: true,\n aliases: [ 'yml' ],\n contains: MODES\n };\n}\n\nexport { yaml as default };\n","/*\nLanguage: Python\nDescription: Python is an interpreted, object-oriented, high-level programming language with dynamic semantics.\nWebsite: https://www.python.org\nCategory: common\n*/\n\nfunction python(hljs) {\n const regex = hljs.regex;\n const IDENT_RE = /[\\p{XID_Start}_]\\p{XID_Continue}*/u;\n const RESERVED_WORDS = [\n 'and',\n 'as',\n 'assert',\n 'async',\n 'await',\n 'break',\n 'case',\n 'class',\n 'continue',\n 'def',\n 'del',\n 'elif',\n 'else',\n 'except',\n 'finally',\n 'for',\n 'from',\n 'global',\n 'if',\n 'import',\n 'in',\n 'is',\n 'lambda',\n 'match',\n 'nonlocal|10',\n 'not',\n 'or',\n 'pass',\n 'raise',\n 'return',\n 'try',\n 'while',\n 'with',\n 'yield'\n ];\n\n const BUILT_INS = [\n '__import__',\n 'abs',\n 'all',\n 'any',\n 'ascii',\n 'bin',\n 'bool',\n 'breakpoint',\n 'bytearray',\n 'bytes',\n 'callable',\n 'chr',\n 'classmethod',\n 'compile',\n 'complex',\n 'delattr',\n 'dict',\n 'dir',\n 'divmod',\n 'enumerate',\n 'eval',\n 'exec',\n 'filter',\n 'float',\n 'format',\n 'frozenset',\n 'getattr',\n 'globals',\n 'hasattr',\n 'hash',\n 'help',\n 'hex',\n 'id',\n 'input',\n 'int',\n 'isinstance',\n 'issubclass',\n 'iter',\n 'len',\n 'list',\n 'locals',\n 'map',\n 'max',\n 'memoryview',\n 'min',\n 'next',\n 'object',\n 'oct',\n 'open',\n 'ord',\n 'pow',\n 'print',\n 'property',\n 'range',\n 'repr',\n 'reversed',\n 'round',\n 'set',\n 'setattr',\n 'slice',\n 'sorted',\n 'staticmethod',\n 'str',\n 'sum',\n 'super',\n 'tuple',\n 'type',\n 'vars',\n 'zip'\n ];\n\n const LITERALS = [\n '__debug__',\n 'Ellipsis',\n 'False',\n 'None',\n 'NotImplemented',\n 'True'\n ];\n\n // https://docs.python.org/3/library/typing.html\n // TODO: Could these be supplemented by a CamelCase matcher in certain\n // contexts, leaving these remaining only for relevance hinting?\n const TYPES = [\n \"Any\",\n \"Callable\",\n \"Coroutine\",\n \"Dict\",\n \"List\",\n \"Literal\",\n \"Generic\",\n \"Optional\",\n \"Sequence\",\n \"Set\",\n \"Tuple\",\n \"Type\",\n \"Union\"\n ];\n\n const KEYWORDS = {\n $pattern: /[A-Za-z]\\w+|__\\w+__/,\n keyword: RESERVED_WORDS,\n built_in: BUILT_INS,\n literal: LITERALS,\n type: TYPES\n };\n\n const PROMPT = {\n className: 'meta',\n begin: /^(>>>|\\.\\.\\.) /\n };\n\n const SUBST = {\n className: 'subst',\n begin: /\\{/,\n end: /\\}/,\n keywords: KEYWORDS,\n illegal: /#/\n };\n\n const LITERAL_BRACKET = {\n begin: /\\{\\{/,\n relevance: 0\n };\n\n const STRING = {\n className: 'string',\n contains: [ hljs.BACKSLASH_ESCAPE ],\n variants: [\n {\n begin: /([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,\n end: /'''/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n PROMPT\n ],\n relevance: 10\n },\n {\n begin: /([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?\"\"\"/,\n end: /\"\"\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n PROMPT\n ],\n relevance: 10\n },\n {\n begin: /([fF][rR]|[rR][fF]|[fF])'''/,\n end: /'''/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n PROMPT,\n LITERAL_BRACKET,\n SUBST\n ]\n },\n {\n begin: /([fF][rR]|[rR][fF]|[fF])\"\"\"/,\n end: /\"\"\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n PROMPT,\n LITERAL_BRACKET,\n SUBST\n ]\n },\n {\n begin: /([uU]|[rR])'/,\n end: /'/,\n relevance: 10\n },\n {\n begin: /([uU]|[rR])\"/,\n end: /\"/,\n relevance: 10\n },\n {\n begin: /([bB]|[bB][rR]|[rR][bB])'/,\n end: /'/\n },\n {\n begin: /([bB]|[bB][rR]|[rR][bB])\"/,\n end: /\"/\n },\n {\n begin: /([fF][rR]|[rR][fF]|[fF])'/,\n end: /'/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n LITERAL_BRACKET,\n SUBST\n ]\n },\n {\n begin: /([fF][rR]|[rR][fF]|[fF])\"/,\n end: /\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n LITERAL_BRACKET,\n SUBST\n ]\n },\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE\n ]\n };\n\n // https://docs.python.org/3.9/reference/lexical_analysis.html#numeric-literals\n const digitpart = '[0-9](_?[0-9])*';\n const pointfloat = `(\\\\b(${digitpart}))?\\\\.(${digitpart})|\\\\b(${digitpart})\\\\.`;\n // Whitespace after a number (or any lexical token) is needed only if its absence\n // would change the tokenization\n // https://docs.python.org/3.9/reference/lexical_analysis.html#whitespace-between-tokens\n // We deviate slightly, requiring a word boundary or a keyword\n // to avoid accidentally recognizing *prefixes* (e.g., `0` in `0x41` or `08` or `0__1`)\n const lookahead = `\\\\b|${RESERVED_WORDS.join('|')}`;\n const NUMBER = {\n className: 'number',\n relevance: 0,\n variants: [\n // exponentfloat, pointfloat\n // https://docs.python.org/3.9/reference/lexical_analysis.html#floating-point-literals\n // optionally imaginary\n // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n // Note: no leading \\b because floats can start with a decimal point\n // and we don't want to mishandle e.g. `fn(.5)`,\n // no trailing \\b for pointfloat because it can end with a decimal point\n // and we don't want to mishandle e.g. `0..hex()`; this should be safe\n // because both MUST contain a decimal point and so cannot be confused with\n // the interior part of an identifier\n {\n begin: `(\\\\b(${digitpart})|(${pointfloat}))[eE][+-]?(${digitpart})[jJ]?(?=${lookahead})`\n },\n {\n begin: `(${pointfloat})[jJ]?`\n },\n\n // decinteger, bininteger, octinteger, hexinteger\n // https://docs.python.org/3.9/reference/lexical_analysis.html#integer-literals\n // optionally \"long\" in Python 2\n // https://docs.python.org/2.7/reference/lexical_analysis.html#integer-and-long-integer-literals\n // decinteger is optionally imaginary\n // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n {\n begin: `\\\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${lookahead})`\n },\n {\n begin: `\\\\b0[bB](_?[01])+[lL]?(?=${lookahead})`\n },\n {\n begin: `\\\\b0[oO](_?[0-7])+[lL]?(?=${lookahead})`\n },\n {\n begin: `\\\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${lookahead})`\n },\n\n // imagnumber (digitpart-based)\n // https://docs.python.org/3.9/reference/lexical_analysis.html#imaginary-literals\n {\n begin: `\\\\b(${digitpart})[jJ](?=${lookahead})`\n }\n ]\n };\n const COMMENT_TYPE = {\n className: \"comment\",\n begin: regex.lookahead(/# type:/),\n end: /$/,\n keywords: KEYWORDS,\n contains: [\n { // prevent keywords from coloring `type`\n begin: /# type:/\n },\n // comment within a datatype comment includes no keywords\n {\n begin: /#/,\n end: /\\b\\B/,\n endsWithParent: true\n }\n ]\n };\n const PARAMS = {\n className: 'params',\n variants: [\n // Exclude params in functions without params\n {\n className: \"\",\n begin: /\\(\\s*\\)/,\n skip: true\n },\n {\n begin: /\\(/,\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS,\n contains: [\n 'self',\n PROMPT,\n NUMBER,\n STRING,\n hljs.HASH_COMMENT_MODE\n ]\n }\n ]\n };\n SUBST.contains = [\n STRING,\n NUMBER,\n PROMPT\n ];\n\n return {\n name: 'Python',\n aliases: [\n 'py',\n 'gyp',\n 'ipython'\n ],\n unicodeRegex: true,\n keywords: KEYWORDS,\n illegal: /(<\\/|\\?)|=>/,\n contains: [\n PROMPT,\n NUMBER,\n {\n // very common convention\n scope: 'variable.language',\n match: /\\bself\\b/\n },\n {\n // eat \"if\" prior to string so that it won't accidentally be\n // labeled as an f-string\n beginKeywords: \"if\",\n relevance: 0\n },\n { match: /\\bor\\b/, scope: \"keyword\" },\n STRING,\n COMMENT_TYPE,\n hljs.HASH_COMMENT_MODE,\n {\n match: [\n /\\bdef/, /\\s+/,\n IDENT_RE,\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [ PARAMS ]\n },\n {\n variants: [\n {\n match: [\n /\\bclass/, /\\s+/,\n IDENT_RE, /\\s*/,\n /\\(\\s*/, IDENT_RE,/\\s*\\)/\n ],\n },\n {\n match: [\n /\\bclass/, /\\s+/,\n IDENT_RE\n ],\n }\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.class\",\n 6: \"title.class.inherited\",\n }\n },\n {\n className: 'meta',\n begin: /^[\\t ]*@/,\n end: /(?=#)|$/,\n contains: [\n NUMBER,\n PARAMS,\n STRING\n ]\n }\n ]\n };\n}\n\nexport { python as default };\n","import { useState, useMemo } from 'react';\nimport { CopyIcon, CheckIcon } from '../../../icons';\nimport hljs from 'highlight.js/lib/core';\nimport javascript from 'highlight.js/lib/languages/javascript';\nimport typescript from 'highlight.js/lib/languages/typescript';\nimport json from 'highlight.js/lib/languages/json';\nimport xml from 'highlight.js/lib/languages/xml';\nimport css from 'highlight.js/lib/languages/css';\nimport bash from 'highlight.js/lib/languages/bash';\nimport yaml from 'highlight.js/lib/languages/yaml';\nimport python from 'highlight.js/lib/languages/python';\nimport 'highlight.js/styles/atom-one-dark.css';\n\nhljs.registerLanguage('javascript', javascript);\nhljs.registerLanguage('js', javascript);\nhljs.registerLanguage('jsx', javascript);\nhljs.registerLanguage('typescript', typescript);\nhljs.registerLanguage('ts', typescript);\nhljs.registerLanguage('tsx', typescript);\nhljs.registerLanguage('json', json);\nhljs.registerLanguage('xml', xml);\nhljs.registerLanguage('html', xml);\nhljs.registerLanguage('css', css);\nhljs.registerLanguage('bash', bash);\nhljs.registerLanguage('shell', bash);\nhljs.registerLanguage('sh', bash);\nhljs.registerLanguage('yaml', yaml);\nhljs.registerLanguage('yml', yaml);\nhljs.registerLanguage('python', python);\nhljs.registerLanguage('py', python);\n\nexport interface CodeBlockViewProps {\n code: string;\n language?: string;\n showCopyButton?: boolean;\n showLineNumbers?: boolean;\n maxHeight?: string;\n accentColor?: string;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function CodeBlockView({\n code,\n language,\n showCopyButton = true,\n showLineNumbers = false,\n maxHeight = '300px',\n accentColor,\n className = '',\n style,\n}: CodeBlockViewProps) {\n const [copied, setCopied] = useState(false);\n const accent = accentColor || 'var(--color-primary)';\n\n const highlighted = useMemo(() => {\n try {\n if (language && hljs.getLanguage(language)) {\n return hljs.highlight(code, { language });\n }\n return hljs.highlightAuto(code);\n } catch {\n return null;\n }\n }, [code, language]);\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(code);\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n } catch { /* ignore */ }\n };\n\n const lines = code.split('\\n');\n\n return (\n <div\n className={className}\n style={{\n position: 'relative',\n background: 'var(--color-codeblock-bg)',\n border: '1px solid var(--color-codeblock-border)',\n borderRadius: '6px',\n ...style,\n overflow: 'hidden',\n fontSize: '12px',\n fontFamily: 'monospace',\n }}\n >\n {/* Top bar */}\n <div style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '5px 10px',\n borderBottom: '1px solid var(--color-surface-border)',\n background: 'var(--color-codeblock-header-bg)',\n }}>\n {language ? (\n <span style={{ fontSize: '10px', color: 'var(--color-text-muted)', fontWeight: 600, letterSpacing: '0.05em', textTransform: 'uppercase' }}>\n {language}\n </span>\n ) : <span />}\n {showCopyButton && (\n <button\n type=\"button\"\n onClick={handleCopy}\n style={{\n display: 'flex', alignItems: 'center', gap: '4px',\n padding: '2px 6px', borderRadius: '4px', border: 'none',\n background: copied ? `color-mix(in srgb, var(--color-success) 12%, transparent)` : 'transparent',\n color: copied ? 'var(--color-success)' : 'var(--color-text-muted)',\n cursor: 'pointer', fontSize: '10px', transition: 'all 120ms',\n }}\n >\n {copied ? <CheckIcon size={10} /> : <CopyIcon size={10} />}\n {copied ? 'Copied' : 'Copy'}\n </button>\n )}\n </div>\n\n {/* Code — hljs highlighted, word-wrapped */}\n <div style={{ overflowY: 'auto', maxHeight }}>\n {showLineNumbers ? (\n <pre style={{ margin: 0, padding: '10px 0', lineHeight: 1.55, whiteSpace: 'pre-wrap', wordBreak: 'break-word' }}>\n {lines.map((line, i) => (\n <div key={i} style={{ display: 'flex', gap: '0' }}>\n <span style={{\n color: 'var(--color-text-muted)', userSelect: 'none',\n minWidth: '3ch', textAlign: 'right', opacity: 0.4,\n padding: '0 12px 0 0', flexShrink: 0,\n }}>\n {i + 1}\n </span>\n <code\n className=\"dui-hljs\"\n dangerouslySetInnerHTML={{ __html: hljs.highlight(line, { language: language || 'plaintext' }).value }}\n style={{ background: 'transparent', padding: 0, flex: 1 }}\n />\n </div>\n ))}\n </pre>\n ) : highlighted ? (\n <pre style={{ margin: 0, lineHeight: 1.55, whiteSpace: 'pre-wrap', wordBreak: 'break-word' }}>\n <code\n className=\"dui-hljs\"\n dangerouslySetInnerHTML={{ __html: highlighted.value }}\n style={{ background: 'transparent', padding: '10px 12px', display: 'block' }}\n />\n </pre>\n ) : (\n <pre style={{ margin: 0, padding: '10px 12px', color: 'var(--color-text-primary)', lineHeight: 1.55, whiteSpace: 'pre-wrap', wordBreak: 'break-word' }}>\n {code}\n </pre>\n )}\n </div>\n </div>\n );\n}\n","import type { CSSProperties } from 'react';\nimport { SparkleIcon, SpinnerIcon } from '../../../icons';\nimport type { DuiSize, DuiRadius, DuiWidth, DuiFontStyle } from '../../core/DuiTypes';\nimport { useButtonBase } from '../../core/ButtonBase';\nimport { useDui, resolveBorderRadius } from '../../core/DuiContext';\nimport './AIButtonView.css';\n\nexport type AIButtonAction = 'generate' | 'fuzz' | 'explain' | 'fix' | 'ask' | 'suggest';\n\nexport interface AIButtonViewProps {\n action?: AIButtonAction;\n label?: string;\n onClick?: () => void;\n loading?: boolean;\n disabled?: boolean;\n /** Falls back to DuiProvider size when omitted. */\n size?: DuiSize;\n /** Shorthand for size=\"sm\" — kept for backwards compat. */\n compact?: boolean;\n accentColor?: string;\n className?: string;\n // ─── DUI container props ───────────────────────────────────────────────────\n width?: DuiWidth;\n borderRadius?: DuiRadius | number;\n color?: string;\n fontStyle?: DuiFontStyle;\n}\n\nconst ACTION_LABEL: Record<AIButtonAction, string> = {\n generate: 'Generate',\n fuzz: 'Fuzz',\n explain: 'Explain',\n fix: 'Fix',\n ask: 'Ask AI',\n suggest: 'Suggest',\n};\n\nexport function AIButtonView({\n action = 'ask',\n label,\n onClick,\n loading = false,\n disabled = false,\n size,\n compact = false,\n accentColor,\n className = '',\n width,\n borderRadius,\n color,\n fontStyle,\n}: AIButtonViewProps) {\n const ctx = useDui();\n // `compact` maps to 'xs' (20px); explicit `size` wins over compact\n const resolvedSize: DuiSize | undefined = size ?? (compact ? 'xs' : undefined);\n const base = useButtonBase(resolvedSize, { width, borderRadius, color, fontStyle });\n const accent = accentColor || ctx.defaultColor || 'var(--color-protocol-ai)';\n const displayLabel = label ?? ACTION_LABEL[action];\n const resolvedRadius = resolveBorderRadius(borderRadius ?? ctx.borderRadius, '5px');\n\n return (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={disabled || loading}\n className={`dui_ai-button ${className}`}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: base.gap,\n height: base.height,\n width: base.width !== 'auto' ? base.width : undefined,\n paddingLeft: base.paddingX,\n paddingRight: base.paddingX,\n borderRadius: resolvedRadius,\n color: base.color || (accentColor ? accentColor : 'var(--color-aibtn-text)'),\n fontSize: base.fontSize,\n fontWeight: 600,\n fontStyle: base.fontStyle,\n cursor: disabled || loading ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.5 : 1,\n letterSpacing: '0.01em',\n fontFamily: 'inherit',\n // Resting bg + border as CSS vars — CSS class reads them so :hover rule can override\n '--dui-aibtn-bg': accentColor\n ? `color-mix(in srgb, ${accentColor} 10%, transparent)`\n : 'var(--color-aibtn-bg)',\n '--dui-aibtn-border-color': accentColor\n ? `color-mix(in srgb, ${accentColor} 35%, transparent)`\n : 'var(--color-aibtn-border)',\n '--dui-aibtn-hover-bg': accentColor\n ? `color-mix(in srgb, ${accentColor} 10%, var(--color-surface))`\n : `color-mix(in srgb, var(--color-protocol-ai) 10%, var(--color-surface))`,\n '--dui-aibtn-hover-border': accentColor\n ? `color-mix(in srgb, ${accentColor} 45%, var(--color-surface-border))`\n : `color-mix(in srgb, var(--color-protocol-ai) 45%, var(--color-surface-border))`,\n } as CSSProperties}\n >\n {loading\n ? <SpinnerIcon size={base.iconSize} style={{ flexShrink: 0 }} />\n : <SparkleIcon size={base.iconSize} style={{ flexShrink: 0 }} />\n }\n {loading ? 'Thinking…' : displayLabel}\n </button>\n );\n}\n","import { useState, useMemo } from 'react';\nimport { SidebarLeftIcon, SidebarRightIcon, ChevronDownIcon, SearchIcon } from '../../../icons';\nimport type { DuiSize } from '../../core/DuiTypes';\nimport { useNavBase } from '../../core/NavBase';\nimport './SideNavView.css';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface SideNavItem {\n id: string;\n label: string;\n icon?: React.ReactNode;\n /** Accent-colored pill badge — e.g. \"New\", 3 */\n badge?: number | string;\n /** Plain muted count shown right of group header label */\n count?: number;\n /** When true: renders as uppercase section header (non-selectable, collapsible) */\n isGroup?: boolean;\n children?: SideNavItem[];\n}\n\nexport interface SideNavViewProps {\n items: SideNavItem[];\n activeId?: string;\n onSelect?: (id: string) => void;\n collapsible?: boolean;\n defaultCollapsed?: boolean;\n /** Controlled collapsed state — overrides internal state when provided */\n collapsed?: boolean;\n onCollapsedChange?: (collapsed: boolean) => void;\n defaultOpenIds?: string[];\n width?: number;\n collapsedWidth?: number;\n accentColor?: string;\n /** Render a search box above the nav items */\n searchable?: boolean;\n searchPlaceholder?: string;\n /** Message shown when no items match the search */\n emptyText?: string;\n /** Falls back to DuiProvider context when omitted. */\n size?: DuiSize;\n className?: string;\n style?: React.CSSProperties;\n}\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nexport function countLeaves(items: SideNavItem[]): number {\n return items.reduce((s, item) =>\n s + (item.isGroup ? countLeaves(item.children ?? []) : 1), 0);\n}\n\nexport function filterItems(items: SideNavItem[], q: string): SideNavItem[] {\n if (!q) return items;\n return items.reduce<SideNavItem[]>((acc, item) => {\n if (item.isGroup) {\n const filteredChildren = filterItems(item.children ?? [], q);\n if (filteredChildren.length > 0) acc.push({ ...item, children: filteredChildren });\n } else if (item.label.toLowerCase().includes(q.toLowerCase())) {\n acc.push(item);\n }\n return acc;\n }, []);\n}\n\n// ─── Component ────────────────────────────────────────────────────────────────\n\nexport function SideNavView({\n items,\n activeId,\n onSelect,\n collapsible = true,\n defaultCollapsed = false,\n collapsed: collapsedProp,\n onCollapsedChange,\n defaultOpenIds,\n width = 200,\n collapsedWidth = 44,\n accentColor,\n searchable = false,\n searchPlaceholder = 'Search…',\n emptyText = 'No results',\n size,\n className = '',\n style,\n}: SideNavViewProps) {\n const base = useNavBase(size);\n\n const [internalCollapsed, setInternalCollapsed] = useState(defaultCollapsed);\n const [openGroups, setOpenGroups] = useState<Set<string>>(() => {\n if (defaultOpenIds !== undefined) return new Set(defaultOpenIds);\n return new Set(items.filter(i => i.isGroup).map(i => i.id));\n });\n const [search, setSearch] = useState('');\n\n const isControlled = collapsedProp !== undefined;\n const collapsed = isControlled ? collapsedProp : internalCollapsed;\n const accent = accentColor || 'var(--color-primary)';\n const q = search.trim();\n const isFiltering = q.length > 0;\n\n // Derive numeric item height for collapsed icon square sizing\n const itemH = parseInt(base.itemHeight, 10);\n const iconSquare = Math.max(itemH - 6, 24);\n\n const totalLeaves = useMemo(() => countLeaves(items), [items]);\n const filteredItems = useMemo(() => filterItems(items, q), [items, q]);\n const filteredLeaves = useMemo(() => countLeaves(filteredItems), [filteredItems]);\n\n const handleCollapse = (v: boolean) => {\n if (!isControlled) setInternalCollapsed(v);\n onCollapsedChange?.(v);\n };\n\n const toggleGroup = (id: string) => {\n setOpenGroups(prev => {\n const next = new Set(prev);\n next.has(id) ? next.delete(id) : next.add(id);\n return next;\n });\n };\n\n // ── Item renderer ──────────────────────────────────────────────────────────\n\n const renderLeafItem = (item: SideNavItem) => {\n const isActive = item.id === activeId;\n return (\n <div\n key={item.id}\n title={collapsed ? item.label : undefined}\n onClick={() => onSelect?.(item.id)}\n className={`dui_side-nav__item${isActive ? ' dui_side-nav__item--active' : ''}`}\n style={collapsed ? {\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n width: iconSquare, height: iconSquare, borderRadius: 8, margin: '1px auto',\n cursor: 'pointer',\n background: isActive ? 'var(--color-sidenav-active-bg)' : 'transparent',\n color: isActive ? 'var(--color-sidenav-active-text)' : 'var(--color-text-secondary)',\n } : {\n display: 'flex', alignItems: 'center', gap: base.gap,\n height: base.itemHeight, borderRadius: base.borderRadius,\n padding: `0 8px 0 ${base.paddingX}`,\n cursor: 'pointer', marginBottom: 1,\n background: isActive ? 'var(--color-sidenav-active-bg)' : 'transparent',\n color: isActive ? 'var(--color-sidenav-active-text)' : 'var(--color-text-secondary)',\n }}\n >\n {item.icon && (\n <span style={{ flexShrink: 0, display: 'flex', alignItems: 'center', justifyContent: 'center', width: base.iconSize }}>\n {item.icon}\n </span>\n )}\n {!collapsed && (\n <>\n <span style={{\n flex: 1, fontSize: base.fontSize,\n fontWeight: isActive ? 600 : 400,\n whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis',\n }}>\n {item.label}\n </span>\n {item.badge !== undefined && (\n <span style={{\n fontSize: '10px', padding: '1px 5px', borderRadius: 99,\n background: `color-mix(in srgb, ${accent} 15%, transparent)`,\n color: accent, fontWeight: 600, flexShrink: 0,\n }}>\n {item.badge}\n </span>\n )}\n </>\n )}\n </div>\n );\n };\n\n const renderGroupItem = (item: SideNavItem) => {\n const isOpen = openGroups.has(item.id);\n const filteredChildCount = item.children?.length ?? 0;\n const displayCount = isFiltering ? filteredChildCount : (item.count ?? filteredChildCount);\n const children = item.children ?? [];\n\n if (collapsed) {\n return <div key={item.id} style={{ marginBottom: 8 }}>{children.map(renderLeafItem)}</div>;\n }\n\n return (\n <div key={item.id} style={{ marginBottom: 4 }}>\n <button\n type=\"button\"\n onClick={() => toggleGroup(item.id)}\n style={{\n width: '100%', background: 'none', border: 'none', cursor: 'pointer',\n display: 'flex', alignItems: 'center', gap: 5,\n fontSize: '10px', fontWeight: 700, letterSpacing: '0.08em',\n textTransform: 'uppercase', color: 'var(--color-text-muted)',\n padding: '10px 8px 4px', fontFamily: 'inherit',\n }}\n >\n <span style={{ flex: 1, textAlign: 'left' }}>{item.label}</span>\n {displayCount > 0 && (\n <span style={{\n fontSize: '11px', fontWeight: 500,\n color: 'var(--color-text-muted)',\n flexShrink: 0, textTransform: 'none', letterSpacing: 0,\n }}>\n {displayCount}\n </span>\n )}\n <ChevronDownIcon\n size={10}\n style={{\n transform: isOpen ? 'rotate(0deg)' : 'rotate(-90deg)',\n transition: 'transform 180ms ease',\n flexShrink: 0,\n }}\n />\n </button>\n {isOpen && children.map(renderLeafItem)}\n </div>\n );\n };\n\n const renderItem = (item: SideNavItem) =>\n item.isGroup ? renderGroupItem(item) : renderLeafItem(item);\n\n // ── Render ─────────────────────────────────────────────────────────────────\n\n return (\n <div\n className={className}\n style={{\n width: collapsed ? collapsedWidth : width,\n minWidth: collapsed ? collapsedWidth : width,\n height: '100%',\n display: 'flex',\n flexDirection: 'column',\n background: 'var(--color-panel)',\n borderRight: '1px solid var(--color-panel-border)',\n transition: 'width 200ms ease, min-width 200ms ease',\n overflow: 'hidden',\n ...style,\n }}\n >\n {/* Search box */}\n {searchable && !collapsed && (\n <div style={{ padding: '10px 10px 8px', flexShrink: 0 }}>\n <div style={{\n display: 'flex', alignItems: 'center', gap: 6,\n height: '28px', padding: '0 8px',\n borderRadius: '6px',\n border: '1px solid var(--color-input-border)',\n background: 'var(--color-input-bg)',\n }}>\n <SearchIcon size={11} style={{ color: 'var(--color-text-muted)', flexShrink: 0 }} />\n <input\n value={search}\n onChange={e => setSearch(e.target.value)}\n placeholder={searchPlaceholder}\n style={{\n flex: 1, border: 'none', outline: 'none', background: 'transparent',\n fontSize: '11px', color: 'var(--color-text-primary)', fontFamily: 'inherit',\n }}\n />\n {isFiltering ? (\n <button\n type=\"button\"\n onClick={() => setSearch('')}\n className=\"dui_side-nav__clear-btn\"\n style={{\n border: 'none', cursor: 'pointer', padding: 0, display: 'flex',\n alignItems: 'center', justifyContent: 'center',\n width: 16, height: 16, borderRadius: 4, flexShrink: 0,\n background: 'transparent', color: 'var(--color-text-muted)',\n }}\n title=\"Clear search\"\n >\n <span style={{ fontSize: '12px', lineHeight: 1, fontWeight: 500 }}>✕</span>\n </button>\n ) : (\n <span style={{\n fontSize: '11px', fontWeight: 600, color: 'var(--color-text-muted)',\n flexShrink: 0, padding: '1px 6px', borderRadius: 4,\n background: 'color-mix(in srgb, var(--color-text-primary) 7%, transparent)',\n }}>\n {totalLeaves}\n </span>\n )}\n </div>\n </div>\n )}\n\n {/* Nav items */}\n <div style={{\n flex: 1,\n overflowY: 'auto',\n padding: collapsed ? '4px 4px 16px' : '4px 6px 16px',\n }}>\n {filteredItems.map(renderItem)}\n {isFiltering && filteredLeaves === 0 && (\n <div style={{\n padding: '20px 8px', fontSize: '11px',\n color: 'var(--color-text-muted)', textAlign: 'center',\n }}>\n {emptyText}\n </div>\n )}\n </div>\n\n {/* Collapse toggle */}\n {collapsible && !isControlled && (\n <div style={{\n borderTop: '1px solid var(--color-panel-border)',\n display: 'flex', alignItems: 'center',\n padding: '4px 6px', flexShrink: 0,\n }}>\n <button\n type=\"button\"\n onClick={() => handleCollapse(!collapsed)}\n className=\"dui_side-nav__collapse-btn\"\n style={{\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n width: 28, height: 28, borderRadius: 6, flexShrink: 0,\n background: 'transparent', border: 'none',\n color: 'var(--color-text-muted)', cursor: 'pointer',\n }}\n title={collapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n >\n {collapsed ? <SidebarRightIcon size={14} /> : <SidebarLeftIcon size={14} />}\n </button>\n </div>\n )}\n </div>\n );\n}\n","/**\n * FolderView — DUI folder tree with expand/collapse, hover action buttons,\n * DUI ContextMenuView, DUI ModalView runner popup, and built-in HTML5\n * drag-and-drop for reordering/nesting nodes and items.\n */\nimport { useState, useRef, useCallback, useEffect, type ReactNode, type CSSProperties } from 'react';\nimport { ChevronRightIcon, FolderIcon, FolderOpenIcon } from '../../../icons';\nimport { IconButtonView } from '../button/IconButtonView';\nimport { ContextMenuView, type ContextMenuItem } from '../modal/ContextMenuView';\nimport { ModalView } from '../modal/ModalView';\nimport { TabView, type TabItem } from '../input/TabView';\nimport { ButtonView } from '../button/ButtonView';\n\n// ── Types ─────────────────────────────────────────────────────────────────────\n\nexport interface FolderNode<T = unknown> {\n id: string;\n label: string;\n children?: FolderNode<T>[];\n items?: T[];\n data?: unknown;\n}\n\nexport interface FolderAction<T = unknown> {\n id: string;\n icon: ReactNode;\n tooltip?: string;\n disabled?: boolean | ((node: FolderNode<T>) => boolean);\n onClick: (node: FolderNode<T>, e: React.MouseEvent) => void;\n}\n\nexport interface FolderRunnerTab {\n id: string; label: string; badge?: number; dot?: boolean; content: ReactNode;\n}\n\nexport interface FolderRunnerConfig<T = unknown> {\n title?: string;\n subtitle?: string | ((node: FolderNode<T>) => string);\n tabs: FolderRunnerTab[];\n saveLabel?: string;\n onSave?: (tabId: string, node: FolderNode<T>) => void;\n accentColor?: string;\n}\n\nexport type DropPosition = 'before' | 'inside' | 'after';\n\n/** Summary entry shown in the folder-move confirm modal */\nexport interface MoveSummaryEntry {\n label: string;\n /** 'folder' shows a folder icon; 'item' shows the accent-color dot */\n type: 'folder' | 'item';\n}\n\ntype DragKind = 'node' | 'item';\ntype DragState = { id: string; parentId: string | null; kind: DragKind };\ntype DropTarget = { id: string; position: DropPosition; kind: DragKind };\ntype MoveConfirm = { dragId: string; dragLabel: string; targetId: string; targetLabel: string; position: DropPosition; summary?: MoveSummaryEntry[] };\n\nexport interface FolderViewProps<T = unknown> {\n nodes: FolderNode<T>[];\n accentColor?: string;\n folderActions?: FolderAction<T>[];\n contextMenuItems?: (node: FolderNode<T>) => ContextMenuItem[];\n runner?: FolderRunnerConfig<T>;\n defaultExpandedIds?: Set<string>;\n expandedIds?: Set<string>;\n onToggle?: (id: string) => void;\n renderItem?: (item: T, node: FolderNode<T>, depth: number) => ReactNode;\n onRename?: (id: string, newName: string) => void;\n onFolderClick?: (node: FolderNode<T>) => void;\n emptyLabel?: string;\n className?: string;\n indentPx?: number;\n onContextMenu?: (e: React.MouseEvent, node: FolderNode<T>) => void;\n\n // ── Drag-and-drop ──────────────────────────────────────────────────────────\n /** Enable HTML5 drag-and-drop reordering/nesting of folder nodes */\n draggable?: boolean;\n /** Guard per-node draggability (e.g. pinned/protected folders) */\n isDraggableNode?: (node: FolderNode<T>) => boolean;\n /** Called when a folder node is dropped. position = where relative to targetId. */\n onMove?: (dragId: string, targetId: string, position: DropPosition) => void;\n /** Show a confirm modal before calling onMove */\n confirmFolderMove?: boolean;\n /** Return extra entries shown in the confirm modal body (sub-folders + items that will move) */\n getMoveSummary?: (dragId: string) => MoveSummaryEntry[];\n\n // ── Item drag-and-drop ─────────────────────────────────────────────────────\n /** Enable HTML5 drag-and-drop for items inside nodes */\n draggableItems?: boolean;\n /** Required when draggableItems=true — stable unique ID per item */\n getItemId?: (item: T) => string;\n /**\n * Called when an item is dropped.\n * targetKind='node' → dropped onto a folder node (position is always 'inside')\n * targetKind='item' → dropped onto a sibling item (position is 'before'|'after')\n */\n onItemMove?: (itemId: string, targetId: string, targetKind: 'node' | 'item', position: DropPosition) => void;\n\n // ── Inline folder creation ──────────────────────────────────────────────────\n inlineCreate?: { parentId: string | null } | null;\n onInlineCreateCommit?: (parentId: string | null, name: string) => void;\n onInlineCreateCancel?: () => void;\n\n // ── Programmatic rename ──────────────────────────────────────────────────────\n /** Pass a folder node id to trigger inline rename mode on that folder */\n renamingNodeId?: string | null;\n /** Called after the rename input is committed or cancelled so the caller can clear renamingNodeId */\n onRenameDone?: () => void;\n}\n\n// ── Helpers ───────────────────────────────────────────────────────────────────\n\nfunction isDisabled<T>(d: boolean | ((n: FolderNode<T>) => boolean) | undefined, node: FolderNode<T>): boolean {\n if (d === undefined) return false;\n return typeof d === 'boolean' ? d : d(node);\n}\n\nfunction findLabel<T>(nodes: FolderNode<T>[], id: string): string {\n for (const n of nodes) {\n if (n.id === id) return n.label;\n if (n.children) { const f = findLabel(n.children, id); if (f) return f; }\n }\n return id;\n}\n\nfunction DropLine({ show, color }: { show: boolean; color: string }) {\n if (!show) return null;\n return <div style={{ height: 2, background: color, borderRadius: 2, margin: '0 8px' }} />;\n}\n\n// ── InlineCreateInput ─────────────────────────────────────────────────────────\n\nfunction InlineCreateInput({ depth, indentPx, onCommit, onCancel }: {\n depth: number; indentPx: number;\n onCommit: (name: string) => void;\n onCancel: () => void;\n}) {\n const [val, setVal] = useState('');\n return (\n <div style={{ paddingLeft: `${8 + depth * indentPx}px`, paddingRight: 8, paddingTop: 3, paddingBottom: 3 }}>\n <input\n autoFocus\n value={val}\n placeholder=\"Folder name\"\n onChange={(e) => setVal(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter' && val.trim()) { onCommit(val.trim()); }\n if (e.key === 'Escape') { onCancel(); }\n }}\n onBlur={() => {\n if (val.trim()) { onCommit(val.trim()); } else { onCancel(); }\n }}\n style={{\n width: '100%',\n boxSizing: 'border-box' as const,\n fontSize: 12,\n background: 'var(--color-input-bg)',\n border: '1px solid var(--color-primary)',\n borderRadius: 4,\n padding: '2px 6px',\n color: 'var(--color-text-primary)',\n outline: 'none',\n }}\n />\n </div>\n );\n}\n\n// ── ItemRow ───────────────────────────────────────────────────────────────────\n\ninterface ItemRowProps<T> {\n item: T; node: FolderNode<T>; depth: number; itemId: string;\n enableDrag: boolean; dragState: DragState | null; dropTarget: DropTarget | null;\n accentColor: string;\n renderItem?: (item: T, node: FolderNode<T>, depth: number) => ReactNode;\n onDragStart: (e: React.DragEvent, id: string) => void;\n onDragOver: (e: React.DragEvent, id: string) => void;\n onDragLeave: (e: React.DragEvent) => void;\n onDrop: (e: React.DragEvent) => void;\n onDragEnd: () => void;\n}\n\nfunction ItemRow<T>({ item, node, depth, itemId, enableDrag, dragState, dropTarget, accentColor, renderItem, onDragStart, onDragOver, onDragLeave, onDrop, onDragEnd }: ItemRowProps<T>) {\n const isDragging = dragState?.kind === 'item' && dragState.id === itemId;\n const dropPos = dropTarget?.kind === 'item' && dropTarget.id === itemId ? dropTarget.position : null;\n\n const dndProps = enableDrag ? {\n draggable: true as const,\n onDragStart: (e: React.DragEvent) => onDragStart(e, itemId),\n onDragOver: (e: React.DragEvent) => onDragOver(e, itemId),\n onDragLeave,\n onDrop,\n onDragEnd,\n } : {};\n\n return (\n <div style={{ opacity: isDragging ? 0.4 : 1 }}>\n <DropLine show={dropPos === 'before'} color={accentColor} />\n <div {...dndProps}>\n {renderItem ? renderItem(item, node, depth) : (\n <div style={{ paddingLeft: `${8 + depth * 12}px`, fontSize: 12, color: 'var(--color-text-secondary)', padding: '4px 8px' }}>\n {String(item)}\n </div>\n )}\n </div>\n <DropLine show={dropPos === 'after'} color={accentColor} />\n </div>\n );\n}\n\n// ── NodeRow ───────────────────────────────────────────────────────────────────\n\ninterface NodeRowProps<T> {\n node: FolderNode<T>; depth: number; parentId: string | null;\n expandedIds: Set<string>; toggleExpand: (id: string) => void;\n folderActions?: FolderAction<T>[];\n onFolderClick?: (node: FolderNode<T>) => void;\n onContextMenu?: (e: React.MouseEvent, node: FolderNode<T>) => void;\n onOpenCtxMenu: (node: FolderNode<T>, x: number, y: number) => void;\n onOpenRunner: (node: FolderNode<T>) => void;\n renderItem?: (item: T, node: FolderNode<T>, depth: number) => ReactNode;\n onRename?: (id: string, newName: string) => void;\n accentColor: string; indentPx: number;\n contextMenuItems?: (node: FolderNode<T>) => ContextMenuItem[];\n // node drag\n enableDrag: boolean;\n isDraggableNode?: (node: FolderNode<T>) => boolean;\n dragState: DragState | null; dropTarget: DropTarget | null;\n onDragStart: (e: React.DragEvent, id: string, parentId: string | null) => void;\n onDragOver: (e: React.DragEvent, targetId: string) => void;\n onDragLeave: (e: React.DragEvent) => void;\n onDrop: (e: React.DragEvent) => void;\n onDragEnd: () => void;\n // item drag\n enableItemDrag: boolean;\n getItemId?: (item: T) => string;\n onItemDragStart: (e: React.DragEvent, id: string) => void;\n onItemDragOver: (e: React.DragEvent, id: string) => void;\n onItemDrop: (e: React.DragEvent) => void;\n inlineCreate?: { parentId: string | null } | null;\n onInlineCreateCommit?: (parentId: string | null, name: string) => void;\n onInlineCreateCancel?: () => void;\n renamingNodeId?: string | null;\n onRenameDone?: () => void;\n}\n\nfunction NodeRow<T>({\n node, depth, parentId, expandedIds, toggleExpand,\n folderActions, onFolderClick, onContextMenu, onOpenCtxMenu, onOpenRunner,\n renderItem, onRename, accentColor, indentPx, contextMenuItems,\n enableDrag, isDraggableNode, dragState, dropTarget,\n onDragStart, onDragOver, onDragLeave, onDrop, onDragEnd,\n enableItemDrag, getItemId, onItemDragStart, onItemDragOver, onItemDrop,\n inlineCreate, onInlineCreateCommit, onInlineCreateCancel,\n renamingNodeId, onRenameDone,\n}: NodeRowProps<T>) {\n const isExpanded = expandedIds.has(node.id);\n const nodeAccentColor = (node.data as { color?: string } | undefined)?.color || accentColor;\n const [renaming, setRenaming] = useState(false);\n const [renameVal, setRenameVal] = useState(node.label);\n const renameRef = useRef<HTMLInputElement>(null);\n\n // Programmatic rename trigger\n useEffect(() => {\n if (renamingNodeId === node.id && onRename) {\n setRenameVal(node.label);\n setRenaming(true);\n setTimeout(() => renameRef.current?.select(), 0);\n }\n }, [renamingNodeId, node.id, node.label, onRename]);\n\n const handleToggle = useCallback((e: React.MouseEvent) => {\n e.stopPropagation(); toggleExpand(node.id); onFolderClick?.(node);\n }, [toggleExpand, node, onFolderClick]);\n\n const handleDblClick = useCallback((e: React.MouseEvent) => {\n if (!onRename) return;\n e.stopPropagation(); setRenameVal(node.label); setRenaming(true);\n setTimeout(() => renameRef.current?.select(), 0);\n }, [onRename, node.label]);\n\n const commitRename = useCallback(() => {\n setRenaming(false);\n if (renameVal.trim() && renameVal !== node.label) onRename?.(node.id, renameVal.trim());\n onRenameDone?.();\n }, [renameVal, node.id, node.label, onRename, onRenameDone]);\n\n const totalCount = (node.children?.length ?? 0) + (node.items?.length ?? 0);\n const hasCtxMenu = contextMenuItems ? contextMenuItems(node).length > 0 : false;\n\n const dropPos = dropTarget?.kind === 'node' && dropTarget.id === node.id ? dropTarget.position : null;\n // When an *item* is being dragged and hovers this folder, highlight it\n const itemDragInside = dropTarget?.kind === 'node' && dropTarget.id === node.id;\n const isDragging = dragState?.kind === 'node' && dragState.id === node.id;\n const canDrag = enableDrag && (isDraggableNode ? isDraggableNode(node) : true);\n\n const rowStyle: CSSProperties = { paddingLeft: `${8 + depth * indentPx}px` };\n\n const nodeDndProps = canDrag ? {\n draggable: true as const,\n onDragStart: (e: React.DragEvent) => { e.stopPropagation(); onDragStart(e, node.id, parentId); },\n onDragEnd: (e: React.DragEvent) => { e.stopPropagation(); onDragEnd(); },\n } : {};\n\n // Node row handles dragOver/Leave/Drop for both node-drags and item-drags landing on it\n const dropAreaProps = {\n onDragOver: (e: React.DragEvent) => onDragOver(e, node.id),\n onDragLeave: onDragLeave,\n onDrop: (e: React.DragEvent) => onDrop(e),\n };\n\n return (\n <div className=\"mb-0.5\">\n <DropLine show={dropPos === 'before'} color={nodeAccentColor} />\n <div\n {...nodeDndProps}\n {...dropAreaProps}\n className={`flex items-center gap-1.5 py-1.5 pr-2 rounded-md cursor-pointer group hover:bg-[var(--color-surface-hover)] ${isDragging ? 'opacity-40' : ''}`}\n style={{\n ...rowStyle,\n ...((dropPos === 'inside' || itemDragInside) ? { boxShadow: `0 0 0 1px ${nodeAccentColor}`, background: 'var(--color-surface-hover)' } : {}),\n }}\n onClick={handleToggle}\n onContextMenu={(e) => {\n e.preventDefault();\n onContextMenu?.(e, node);\n if (hasCtxMenu) onOpenCtxMenu(node, e.clientX, e.clientY);\n }}\n onDoubleClick={handleDblClick}\n >\n <span style={{ display: 'inline-flex', flexShrink: 0, transition: 'transform 150ms', transform: isExpanded ? 'rotate(90deg)' : 'rotate(0deg)', color: 'var(--color-text-muted)' }}>\n <ChevronRightIcon size={12} />\n </span>\n <span style={{ color: nodeAccentColor, flexShrink: 0, display: 'inline-flex' }}>\n {isExpanded ? <FolderOpenIcon size={14} /> : <FolderIcon size={14} />}\n </span>\n {renaming ? (\n <input\n ref={renameRef} value={renameVal}\n onChange={(e) => setRenameVal(e.target.value)}\n onBlur={commitRename}\n onKeyDown={(e) => { if (e.key === 'Enter') commitRename(); if (e.key === 'Escape') { setRenaming(false); onRenameDone?.(); } }}\n onClick={(e) => e.stopPropagation()}\n style={{ flex: 1, fontSize: 12, background: 'var(--color-input-bg)', border: `1px solid ${accentColor}`, borderRadius: 4, padding: '0 4px', color: 'var(--color-text-primary)', outline: 'none', minWidth: 0 }}\n />\n ) : (\n <span style={{ flex: 1, fontSize: 12, color: 'var(--color-text-primary)', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {node.label}\n </span>\n )}\n {totalCount > 0 && !renaming && (\n <span style={{ fontSize: 10, color: 'var(--color-text-muted)', opacity: 0.6, flexShrink: 0 }}>{totalCount}</span>\n )}\n {folderActions && folderActions.length > 0 && (\n <div className=\"flex items-center gap-0.5 opacity-0 group-hover:opacity-100 transition-opacity\" onClick={(e) => e.stopPropagation()}>\n {folderActions.map(action => {\n const disabled = isDisabled(action.disabled, node);\n const isRunAction = action.id === 'run';\n const isCtxAction = action.id === 'more' || action.id === 'context';\n return (\n <IconButtonView key={action.id} icon={action.icon} size=\"sm\" tooltip={action.tooltip} disabled={disabled}\n onClick={(e) => {\n e.stopPropagation();\n if (isRunAction) { onOpenRunner(node); return; }\n if (isCtxAction && hasCtxMenu) {\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n onOpenCtxMenu(node, rect.right, rect.bottom + 4); return;\n }\n action.onClick(node, e);\n }}\n />\n );\n })}\n </div>\n )}\n </div>\n <DropLine show={dropPos === 'after' && !isExpanded} color={nodeAccentColor} />\n {isExpanded && (\n <div style={{ marginLeft: depth > 0 ? 12 : 0, borderLeft: depth > 0 ? '1px solid var(--color-surface-border)' : 'none' }}>\n {inlineCreate?.parentId === node.id && (\n <InlineCreateInput depth={depth + 1} indentPx={indentPx}\n onCommit={(name) => onInlineCreateCommit?.(node.id, name)}\n onCancel={() => onInlineCreateCancel?.()}\n />\n )}\n {node.children?.map(child => (\n <NodeRow key={child.id} node={child} depth={depth + 1} parentId={node.id}\n expandedIds={expandedIds} toggleExpand={toggleExpand}\n folderActions={folderActions} onFolderClick={onFolderClick}\n onContextMenu={onContextMenu} onOpenCtxMenu={onOpenCtxMenu} onOpenRunner={onOpenRunner}\n renderItem={renderItem} onRename={onRename}\n accentColor={accentColor} indentPx={indentPx} contextMenuItems={contextMenuItems}\n enableDrag={enableDrag} isDraggableNode={isDraggableNode}\n dragState={dragState} dropTarget={dropTarget}\n onDragStart={onDragStart} onDragOver={onDragOver} onDragLeave={onDragLeave} onDrop={onDrop} onDragEnd={onDragEnd}\n enableItemDrag={enableItemDrag} getItemId={getItemId}\n onItemDragStart={onItemDragStart} onItemDragOver={onItemDragOver} onItemDrop={onItemDrop}\n inlineCreate={inlineCreate} onInlineCreateCommit={onInlineCreateCommit} onInlineCreateCancel={onInlineCreateCancel}\n />\n ))}\n {node.items?.map((item, i) => {\n const itemId = getItemId ? getItemId(item) : String(i);\n return (\n <ItemRow key={itemId} item={item} node={node} depth={depth + 1} itemId={itemId}\n enableDrag={enableItemDrag} dragState={dragState} dropTarget={dropTarget}\n accentColor={accentColor} renderItem={renderItem}\n onDragStart={onItemDragStart} onDragOver={onItemDragOver}\n onDragLeave={onDragLeave} onDrop={onItemDrop} onDragEnd={onDragEnd}\n />\n );\n })}\n </div>\n )}\n <DropLine show={dropPos === 'after' && isExpanded} color={nodeAccentColor} />\n </div>\n );\n}\n\n// ── RunnerModal ───────────────────────────────────────────────────────────────\n\nfunction RunnerModal<T>({ node, config, onClose }: { node: FolderNode<T>; config: FolderRunnerConfig<T>; onClose: () => void }) {\n const [activeTab, setActiveTab] = useState(config.tabs[0]?.id ?? '');\n const tabs: TabItem[] = config.tabs.map(t => ({ id: t.id, label: t.label, badge: t.badge, dot: t.dot }));\n const subtitle = typeof config.subtitle === 'function' ? config.subtitle(node) : config.subtitle;\n const accentColor = config.accentColor ?? 'var(--color-primary)';\n return (\n <ModalView open onClose={onClose} title={config.title ?? `Run — ${node.label}`} subtitle={subtitle} size=\"md\" headerColor={accentColor}\n footerRight={config.onSave ? (\n <ButtonView variant=\"primary\" size=\"md\" onClick={() => { config.onSave?.(activeTab, node); onClose(); }}>\n {config.saveLabel ?? 'Save'}\n </ButtonView>\n ) : undefined}\n >\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\n {tabs.length > 1 && <TabView tabs={tabs} activeTab={activeTab} onChange={setActiveTab} variant=\"chip\" size=\"sm\" accentColor={accentColor} />}\n <div>{config.tabs.find(t => t.id === activeTab)?.content}</div>\n </div>\n </ModalView>\n );\n}\n\n// ── FolderView ────────────────────────────────────────────────────────────────\n\nexport function FolderView<T = unknown>({\n nodes, accentColor = 'var(--color-text-muted)',\n folderActions, contextMenuItems, runner,\n defaultExpandedIds, expandedIds: controlled, onToggle,\n renderItem, onRename, onFolderClick, onContextMenu,\n emptyLabel = 'No items', className = '', indentPx = 12,\n draggable = false, isDraggableNode, onMove, confirmFolderMove = false, getMoveSummary,\n draggableItems = false, getItemId, onItemMove,\n inlineCreate, onInlineCreateCommit, onInlineCreateCancel,\n renamingNodeId, onRenameDone,\n}: FolderViewProps<T>) {\n const [internal, setInternal] = useState<Set<string>>(defaultExpandedIds ?? new Set());\n const expandedIds = controlled ?? internal;\n\n const toggleExpand = useCallback((id: string) => {\n if (onToggle) { onToggle(id); return; }\n setInternal(prev => { const n = new Set(prev); n.has(id) ? n.delete(id) : n.add(id); return n; });\n }, [onToggle]);\n\n const [ctxMenu, setCtxMenu] = useState<{ node: FolderNode<T>; x: number; y: number } | null>(null);\n const [activeRunner, setActiveRunner] = useState<FolderNode<T> | null>(null);\n const [dragState, setDragState] = useState<DragState | null>(null);\n const [dropTarget, setDropTarget] = useState<DropTarget | null>(null);\n const [moveConfirm, setMoveConfirm] = useState<MoveConfirm | null>(null);\n\n const openCtxMenu = useCallback((node: FolderNode<T>, x: number, y: number) => setCtxMenu({ node, x, y }), []);\n const openRunner = useCallback((node: FolderNode<T>) => setActiveRunner(node), []);\n\n // ── Node drag handlers ─────────────────────────────────────────────────────\n\n const handleDragStart = useCallback((e: React.DragEvent, id: string, parentId: string | null) => {\n setDragState({ id, parentId, kind: 'node' });\n e.dataTransfer.effectAllowed = 'move';\n e.dataTransfer.setData('text/plain', id);\n }, []);\n\n const handleDragOver = useCallback((e: React.DragEvent, targetId: string) => {\n e.preventDefault(); e.stopPropagation();\n if (!dragState || dragState.id === targetId) return;\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n const y = e.clientY - rect.top; const h = rect.height;\n\n if (dragState.kind === 'item') {\n // Item dragged over a folder node → always 'inside'\n setDropTarget({ id: targetId, position: 'inside', kind: 'node' });\n } else {\n const position: DropPosition = y < h * 0.25 ? 'before' : y > h * 0.75 ? 'after' : 'inside';\n setDropTarget({ id: targetId, position, kind: 'node' });\n }\n e.dataTransfer.dropEffect = 'move';\n }, [dragState]);\n\n const handleDragLeave = useCallback((e: React.DragEvent) => {\n if (!(e.currentTarget as HTMLElement).contains(e.relatedTarget as Node)) setDropTarget(null);\n }, []);\n\n const handleDrop = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n if (!dragState || !dropTarget) { setDragState(null); setDropTarget(null); return; }\n const { id: dragId, kind } = dragState;\n const { id: targetId, position } = dropTarget;\n setDragState(null); setDropTarget(null);\n\n if (kind === 'item') {\n // Item dropped onto a folder node\n onItemMove?.(dragId, targetId, 'node', 'inside');\n return;\n }\n\n if (confirmFolderMove) {\n const summary = getMoveSummary?.(dragId);\n setMoveConfirm({ dragId, dragLabel: findLabel(nodes, dragId), targetId, targetLabel: findLabel(nodes, targetId), position, summary });\n } else {\n onMove?.(dragId, targetId, position);\n }\n }, [dragState, dropTarget, confirmFolderMove, nodes, onMove, onItemMove, getMoveSummary]);\n\n const handleDragEnd = useCallback(() => { setDragState(null); setDropTarget(null); }, []);\n\n // ── Item drag handlers ─────────────────────────────────────────────────────\n\n const handleItemDragStart = useCallback((e: React.DragEvent, id: string) => {\n e.stopPropagation();\n setDragState({ id, parentId: null, kind: 'item' });\n e.dataTransfer.effectAllowed = 'move';\n e.dataTransfer.setData('text/plain', id);\n }, []);\n\n const handleItemDragOver = useCallback((e: React.DragEvent, targetId: string) => {\n e.preventDefault(); e.stopPropagation();\n if (!dragState || dragState.id === targetId) return;\n const rect = (e.currentTarget as HTMLElement).getBoundingClientRect();\n const position: DropPosition = e.clientY - rect.top < rect.height * 0.5 ? 'before' : 'after';\n setDropTarget({ id: targetId, position, kind: 'item' });\n e.dataTransfer.dropEffect = 'move';\n }, [dragState]);\n\n const handleItemDrop = useCallback((e: React.DragEvent) => {\n e.preventDefault(); e.stopPropagation();\n if (!dragState || !dropTarget || dragState.kind !== 'item') { setDragState(null); setDropTarget(null); return; }\n const { id: dragId } = dragState;\n const { id: targetId, position, kind } = dropTarget;\n setDragState(null); setDropTarget(null);\n onItemMove?.(dragId, targetId, kind, position);\n }, [dragState, dropTarget, onItemMove]);\n\n // ── Move confirm ───────────────────────────────────────────────────────────\n\n const executeMoveConfirm = useCallback(() => {\n if (!moveConfirm) return;\n onMove?.(moveConfirm.dragId, moveConfirm.targetId, moveConfirm.position);\n setMoveConfirm(null);\n }, [moveConfirm, onMove]);\n\n const ctxItems = ctxMenu && contextMenuItems ? contextMenuItems(ctxMenu.node) : [];\n\n if (nodes.length === 0 && !inlineCreate) {\n return <div style={{ padding: '24px 12px', textAlign: 'center', fontSize: 12, color: 'var(--color-text-muted)' }}>{emptyLabel}</div>;\n }\n\n const sharedNodeProps = {\n expandedIds, toggleExpand, folderActions, onFolderClick, onContextMenu,\n onOpenCtxMenu: openCtxMenu, onOpenRunner: openRunner,\n renderItem, onRename, accentColor, indentPx, contextMenuItems,\n enableDrag: draggable, isDraggableNode, dragState, dropTarget,\n onDragStart: handleDragStart, onDragOver: handleDragOver,\n onDragLeave: handleDragLeave, onDrop: handleDrop, onDragEnd: handleDragEnd,\n enableItemDrag: draggableItems, getItemId,\n onItemDragStart: handleItemDragStart, onItemDragOver: handleItemDragOver, onItemDrop: handleItemDrop,\n inlineCreate, onInlineCreateCommit, onInlineCreateCancel,\n renamingNodeId, onRenameDone,\n };\n\n return (\n <div className={className}>\n {inlineCreate?.parentId === null && (\n <InlineCreateInput depth={0} indentPx={indentPx}\n onCommit={(name) => onInlineCreateCommit?.(null, name)}\n onCancel={() => onInlineCreateCancel?.()}\n />\n )}\n {nodes.map(node => (\n <NodeRow key={node.id} node={node} depth={0} parentId={null} {...sharedNodeProps} />\n ))}\n\n <ContextMenuView open={!!ctxMenu} anchorEl={null} position={ctxMenu ? { x: ctxMenu.x, y: ctxMenu.y } : undefined} items={ctxItems} onClose={() => setCtxMenu(null)} />\n\n {activeRunner && runner && <RunnerModal node={activeRunner} config={runner} onClose={() => setActiveRunner(null)} />}\n\n <ModalView open={!!moveConfirm} onClose={() => setMoveConfirm(null)} title=\"Move folder\" size=\"sm\" headerColor={accentColor}\n footerRight={\n <div style={{ display: 'flex', gap: 8 }}>\n <ButtonView variant=\"secondary\" size=\"sm\" onClick={() => setMoveConfirm(null)}>Cancel</ButtonView>\n <ButtonView variant=\"primary\" size=\"sm\" accentColor={accentColor} onClick={executeMoveConfirm}>Move</ButtonView>\n </div>\n }\n >\n {moveConfirm && (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 10 }}>\n <p style={{ fontSize: 13, color: 'var(--color-text-primary)', margin: 0 }}>\n {moveConfirm.position === 'inside'\n ? <>Move <strong>\"{moveConfirm.dragLabel}\"</strong> into <strong>\"{moveConfirm.targetLabel}\"</strong>?</>\n : <>Reorder <strong>\"{moveConfirm.dragLabel}\"</strong> to a new position?</>}\n </p>\n {moveConfirm.summary && moveConfirm.summary.length > 0 ? (\n <>\n <p style={{ fontSize: 12, color: 'var(--color-text-secondary)', margin: 0 }}>The following will move with it:</p>\n <ul style={{ margin: 0, padding: '0 0 0 14px', listStyle: 'disc' }}>\n {moveConfirm.summary.map((entry, i) => (\n <li key={i} style={{ fontSize: 12, color: entry.type === 'folder' ? 'var(--color-text-primary)' : 'var(--color-text-secondary)', lineHeight: 1.8 }}>\n {entry.type === 'folder'\n ? <><FolderIcon size={10} style={{ display: 'inline', marginRight: 4, verticalAlign: 'middle', opacity: 0.7 }} />{entry.label}</>\n : <><span style={{ display: 'inline-block', width: 7, height: 7, borderRadius: '50%', background: accentColor, marginRight: 5, verticalAlign: 'middle', opacity: 0.8 }} />{entry.label}</>\n }\n </li>\n ))}\n </ul>\n </>\n ) : (\n <p style={{ fontSize: 12, color: 'var(--color-text-secondary)', margin: 0 }}>\n All sub-folders and items inside will move with it.\n </p>\n )}\n </div>\n )}\n </ModalView>\n </div>\n );\n}\n","import { ChevronRightIcon } from '../../../icons';\nimport './CollapsibleSectionView.css';\n\nexport interface CollapsibleSectionViewProps {\n title: string;\n expanded: boolean;\n onToggle: () => void;\n /** Count badge shown next to title */\n badge?: number;\n /** Accent color for title chip + badge. Accepts any CSS color or var(). */\n accentColor?: string;\n /** Slot rendered on the far right of the header (action buttons etc.) */\n headerRight?: React.ReactNode;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function CollapsibleSectionView({\n title,\n expanded,\n onToggle,\n badge,\n accentColor,\n headerRight,\n children,\n className = '',\n}: CollapsibleSectionViewProps) {\n const customStyle = accentColor\n ? ({ '--dui-collapse-accent': accentColor } as React.CSSProperties)\n : undefined;\n\n return (\n <div className={`dui_collapsible${className ? ` ${className}` : ''}`} style={customStyle}>\n <button type=\"button\" onClick={onToggle} className=\"dui_collapsible__header\">\n <span className={`dui_collapsible__chevron${expanded ? ' dui_collapsible__chevron--open' : ''}`}>\n <ChevronRightIcon size={12} />\n </span>\n\n <span className=\"dui_collapsible__title\">{title}</span>\n\n {badge !== undefined && badge > 0 && (\n <span className=\"dui_collapsible__badge\">{badge}</span>\n )}\n\n {headerRight && (\n <span className=\"dui_collapsible__actions\" onClick={e => e.stopPropagation()}>\n {headerRight}\n </span>\n )}\n </button>\n\n {expanded && (\n <div className=\"dui_collapsible__content\">\n {children}\n </div>\n )}\n </div>\n );\n}\n","/**\n * DebugView — VS Code-style \"Run and Debug\" panel as a standalone DUI component.\n *\n * Sections: toolbar, VARIABLES (scopes + recursive tree), WATCH,\n * CALL STACK, BREAKPOINTS.\n *\n * Fully abstract — consumer provides session data + action callbacks.\n * No daakia store imports. Drop into any project.\n */\nimport { useState, useCallback, type ReactNode } from 'react';\nimport {\n DbgContinueIcon, DbgStepOverIcon, DbgStepIntoIcon,\n DbgStepOutIcon, DbgRestartIcon, DbgStopIcon,\n RunDebugIcon, MuteBreakpointsIcon, ChevronRightIcon,\n} from '../../../icons';\nimport { CollapsibleSectionView } from './CollapsibleSectionView';\nimport { ModalView } from '../modal/ModalView';\nimport { ButtonView } from '../button/ButtonView';\n\n// ── Public types ──────────────────────────────────────────────────────────────\n\nexport interface DebugVariable {\n name: string;\n value: unknown;\n type?: string;\n}\n\nexport interface DebugCallFrame {\n fn: string;\n file?: string;\n line?: number | null;\n col?: number;\n isUser?: boolean;\n}\n\nexport interface DebugBreakpoint {\n /** Consumer-defined key that groups breakpoints (e.g. \"tabId:phase\"). */\n key: string;\n line: number;\n disabled?: boolean;\n condition?: string;\n /** Display label shown in the breakpoints list. */\n label?: string;\n /** Optional badge rendered before the label (e.g. HTTP method chip). */\n badge?: ReactNode;\n}\n\n/** Current state of the debug session — provided by consumer. */\nexport interface DebugSession {\n active: boolean;\n status: 'idle' | 'running' | 'paused';\n pausedLine?: number | null;\n variables?: DebugVariable[];\n callStack?: DebugCallFrame[];\n breakpoints?: DebugBreakpoint[];\n breakpointsMuted?: boolean;\n}\n\n/** All action callbacks — consumer provides implementations. */\nexport interface DebugActions {\n onContinue?: () => void;\n onStepOver?: () => void;\n onStepInto?: () => void;\n onStepOut?: () => void;\n onRestart?: () => void;\n onStop?: () => void;\n onAddWatchExpression?: (expr: string) => void;\n onRemoveWatchExpression?: (expr: string) => void;\n onClearWatchExpressions?: () => void;\n onToggleBreakpoint?: (key: string, line: number, currentlyDisabled: boolean) => void;\n onRemoveBreakpoint?: (key: string, line: number) => void;\n onNavigateBreakpoint?: (key: string, line: number) => void;\n onToggleMuteBreakpoints?: () => void;\n onClearAllBreakpoints?: () => void;\n /** Called when user clicks Restart Frame in call stack. */\n onRestartFrame?: (frameIndex: number) => void;\n}\n\nexport interface DebugViewProps {\n session: DebugSession;\n actions?: DebugActions;\n /** Controlled watch expressions — managed externally. */\n watchExpressions?: string[];\n accentColor?: string;\n title?: string;\n className?: string;\n}\n\n// ── DebugView (root) ──────────────────────────────────────────────────────────\n\nexport function DebugView({\n session, actions, watchExpressions = [], accentColor = 'var(--color-primary)',\n title = 'Run and Debug', className = '',\n}: DebugViewProps) {\n const { active, status } = session;\n const isPaused = status === 'paused';\n\n return (\n <div className={`flex flex-col h-full overflow-hidden ${className}`}>\n {/* Toolbar */}\n <div className=\"px-3 py-2 border-b border-[var(--color-surface-border)] flex items-center gap-2 shrink-0\">\n <RunDebugIcon size={14} style={{ color: accentColor }} />\n <h3 className=\"text-[11px] font-bold text-[var(--color-text-primary)] uppercase tracking-wide\">{title}</h3>\n {active && (\n <div className=\"ml-auto flex items-center gap-0.5\">\n <ToolBtn onClick={actions?.onContinue} disabled={!isPaused} title=\"Continue (F5)\">\n <DbgContinueIcon size={12} />\n </ToolBtn>\n <ToolBtn onClick={actions?.onStepOver} disabled={!isPaused} title=\"Step Over (F10)\">\n <DbgStepOverIcon size={12} />\n </ToolBtn>\n <ToolBtn onClick={actions?.onStepInto} disabled={!isPaused} title=\"Step Into (F11)\">\n <DbgStepIntoIcon size={12} />\n </ToolBtn>\n <ToolBtn onClick={actions?.onStepOut} disabled={!isPaused} title=\"Step Out (⇧F11)\">\n <DbgStepOutIcon size={12} />\n </ToolBtn>\n <ToolBtn onClick={actions?.onRestart} title=\"Restart\">\n <DbgRestartIcon size={12} />\n </ToolBtn>\n <ToolBtn onClick={actions?.onStop} title=\"Stop\">\n <DbgStopIcon size={12} />\n </ToolBtn>\n </div>\n )}\n </div>\n\n {/* Sections */}\n <div className=\"flex-1 overflow-y-auto [scrollbar-gutter:stable]\">\n <VariablesSection session={session} accentColor={accentColor} />\n <WatchSection session={session} watchExpressions={watchExpressions} actions={actions} accentColor={accentColor} />\n <CallStackSection session={session} actions={actions} accentColor={accentColor} />\n <BreakpointsSection session={session} actions={actions} accentColor={accentColor} />\n </div>\n </div>\n );\n}\n\n// ── Toolbar button ────────────────────────────────────────────────────────────\n\nfunction ToolBtn({ children, onClick, disabled, title }: { children: ReactNode; onClick?: () => void; disabled?: boolean; title?: string }) {\n return (\n <button\n type=\"button\"\n onClick={onClick}\n disabled={disabled}\n title={title}\n className=\"p-0.5 rounded hover:bg-[var(--color-surface-hover)] cursor-pointer disabled:opacity-40 disabled:cursor-default text-[var(--color-text-primary)]\"\n >\n {children}\n </button>\n );\n}\n\n// ── VARIABLES ────────────────────────────────────────────────────────────────\n\nfunction VariablesSection({ session, accentColor }: { session: DebugSession; accentColor: string }) {\n const [expanded, setExpanded] = useState(true);\n const { active, variables = [] } = session;\n\n const localVars = variables.filter(v => !['dk', 'console', 'require', 'module', 'exports', '__filename', '__dirname'].includes(v.name));\n const scriptGlobals = variables.filter(v => ['dk', 'console'].includes(v.name));\n\n return (\n <CollapsibleSectionView title=\"Variables\" expanded={expanded} onToggle={() => setExpanded(!expanded)} accentColor={accentColor}>\n {!active ? (\n <Muted>Not debugging</Muted>\n ) : variables.length === 0 ? (\n <Muted>No variables captured</Muted>\n ) : (\n <div className=\"flex flex-col\">\n <ScopeGroup label=\"Local\" variables={localVars} defaultExpanded />\n {scriptGlobals.length > 0 && <ScopeGroup label=\"Script Globals\" variables={scriptGlobals} defaultExpanded={false} />}\n </div>\n )}\n </CollapsibleSectionView>\n );\n}\n\nfunction ScopeGroup({ label, variables, defaultExpanded }: { label: string; variables: DebugVariable[]; defaultExpanded: boolean }) {\n const [expanded, setExpanded] = useState(defaultExpanded);\n if (variables.length === 0) return null;\n return (\n <div>\n <button type=\"button\" onClick={() => setExpanded(!expanded)}\n className=\"flex items-center gap-1 w-full px-3 py-0.5 hover:bg-[var(--color-surface-hover)] cursor-pointer\">\n <ChevronRightIcon size={10} className=\"shrink-0 transition-transform text-[var(--color-text-muted)]\"\n style={{ transform: expanded ? 'rotate(90deg)' : 'rotate(0deg)' }} />\n <span className=\"text-[11px] font-semibold\" style={{ color: '#c586c0' }}>{label}</span>\n </button>\n {expanded && (\n <div className=\"pl-2\">\n {variables.map(v => <ValueTreeNode key={v.name} name={v.name} value={v.value} depth={1} />)}\n </div>\n )}\n </div>\n );\n}\n\n// ── Recursive value tree ──────────────────────────────────────────────────────\n\nfunction ValueTreeNode({ name, value, depth }: { name: string; value: unknown; depth: number }) {\n const [expanded, setExpanded] = useState(false);\n const expandable = isExpandable(value);\n\n return (\n <div>\n <div className=\"flex items-center gap-1 px-2 py-[1px] hover:bg-[var(--color-surface-hover)] text-[11px] min-h-[18px] cursor-default font-mono\"\n style={{ paddingLeft: `${depth * 12 + 8}px` }}\n onClick={expandable ? () => setExpanded(!expanded) : undefined}>\n {expandable\n ? <ChevronRightIcon size={10} className=\"shrink-0 transition-transform text-[var(--color-text-muted)] cursor-pointer\"\n style={{ transform: expanded ? 'rotate(90deg)' : 'rotate(0deg)' }} />\n : <span className=\"w-[10px] shrink-0\" />\n }\n <span className=\"shrink-0\" style={{ color: '#4fc3f7' }}>{name}</span>\n <span className=\"text-[var(--color-text-muted)] shrink-0 mx-0.5\">=</span>\n <span className=\"truncate\" style={{ color: valueColor(value) }}>{valuePreview(value)}</span>\n </div>\n {expanded && expandable && <ExpandedValue value={value} depth={depth + 1} />}\n </div>\n );\n}\n\nfunction ExpandedValue({ value, depth }: { value: unknown; depth: number }) {\n if (Array.isArray(value)) {\n return (\n <div>\n {value.map((item, idx) => <ValueTreeNode key={idx} name={String(idx)} value={item} depth={depth} />)}\n <div className=\"text-[11px] text-[var(--color-text-muted)] italic px-2 py-[1px]\" style={{ paddingLeft: `${depth * 12 + 8}px` }}>\n length: {value.length}\n </div>\n </div>\n );\n }\n if (value && typeof value === 'object') {\n return (\n <div>\n {Object.entries(value as Record<string, unknown>).map(([k, v]) => <ValueTreeNode key={k} name={k} value={v} depth={depth} />)}\n </div>\n );\n }\n return null;\n}\n\n// ── WATCH ─────────────────────────────────────────────────────────────────────\n\nfunction WatchSection({ session, watchExpressions, actions, accentColor }: {\n session: DebugSession; watchExpressions: string[]; actions?: DebugActions; accentColor: string;\n}) {\n const [expanded, setExpanded] = useState(true);\n const [isAdding, setIsAdding] = useState(false);\n const [inputValue, setInputValue] = useState('');\n const [showClear, setShowClear] = useState(false);\n\n const addExpr = useCallback(() => {\n const v = inputValue.trim();\n if (v && !watchExpressions.includes(v)) actions?.onAddWatchExpression?.(v);\n setInputValue(''); setIsAdding(false);\n }, [inputValue, watchExpressions, actions]);\n\n const evaluate = useCallback((expr: string): { value: unknown; found: boolean } => {\n const vars = session.variables ?? [];\n if (!session.active || vars.length === 0) return { value: undefined, found: false };\n const parts = expr.replace(/\\[(\\d+)\\]/g, '.$1').split('.');\n const root = vars.find(v => v.name === parts[0]);\n if (!root) return { value: undefined, found: false };\n let cur: unknown = root.value;\n for (let i = 1; i < parts.length; i++) {\n if (cur == null || typeof cur !== 'object') return { value: undefined, found: false };\n cur = (cur as Record<string, unknown>)[parts[i]];\n }\n return { value: cur, found: true };\n }, [session]);\n\n return (\n <CollapsibleSectionView\n title=\"Watch\" expanded={expanded} onToggle={() => setExpanded(!expanded)}\n accentColor={accentColor} badge={watchExpressions.length || undefined}\n headerRight={\n <>\n <HeaderBtn onClick={() => { setIsAdding(true); if (!expanded) setExpanded(true); }} title=\"Add Expression\">+</HeaderBtn>\n {watchExpressions.length > 0 && (\n <HeaderBtn onClick={() => { watchExpressions.length > 1 ? setShowClear(true) : actions?.onClearWatchExpressions?.(); }} title=\"Remove All\">×</HeaderBtn>\n )}\n </>\n }\n >\n {showClear && (\n <ModalView open onClose={() => setShowClear(false)} title=\"Remove all watch expressions?\" size=\"sm\"\n footerRight={\n <div style={{ display: 'flex', gap: 8 }}>\n <ButtonView variant=\"secondary\" size=\"sm\" onClick={() => setShowClear(false)}>Cancel</ButtonView>\n <ButtonView variant=\"danger\" size=\"sm\" onClick={() => { actions?.onClearWatchExpressions?.(); setShowClear(false); }}>Remove All</ButtonView>\n </div>\n }\n >\n <p style={{ fontSize: 13, color: 'var(--color-text-primary)', margin: 0 }}>\n This will remove all {watchExpressions.length} watch expressions.\n </p>\n </ModalView>\n )}\n <div className=\"flex flex-col py-0.5\">\n {watchExpressions.map(expr => {\n const { value, found } = evaluate(expr);\n return (\n <div key={expr} className=\"group flex items-center gap-2 px-4 py-[3px] hover:bg-[var(--color-surface-hover)] text-[11px] min-h-[24px]\">\n <span className=\"font-mono shrink-0\" style={{ color: '#4fc3f7' }}>{expr}</span>\n <span className=\"text-[var(--color-text-muted)] mx-0.5\">=</span>\n <span className=\"truncate font-mono flex-1\" style={{ color: found ? valueColor(value) : 'var(--color-text-muted)' }}>\n {found ? valuePreview(value) : '<not available>'}\n </span>\n <button type=\"button\" onClick={() => actions?.onRemoveWatchExpression?.(expr)}\n className=\"ml-auto opacity-0 group-hover:opacity-100 text-[var(--color-text-muted)] hover:text-[var(--color-danger)] cursor-pointer text-[13px] font-bold leading-none shrink-0\"\n title=\"Remove\">×</button>\n </div>\n );\n })}\n {isAdding && (\n <div className=\"px-3 py-1.5\">\n <input\n type=\"text\" value={inputValue} onChange={e => setInputValue(e.target.value)} autoFocus\n onKeyDown={e => { if (e.key === 'Enter') addExpr(); if (e.key === 'Escape') { setIsAdding(false); setInputValue(''); } }}\n onBlur={addExpr}\n placeholder=\"Expression to watch\"\n className=\"w-full bg-[var(--color-input-bg)] border border-[var(--color-input-border)] rounded px-2 py-1 text-[11px] text-[var(--color-text-primary)] outline-none focus:border-[var(--color-accent)]\"\n />\n </div>\n )}\n </div>\n </CollapsibleSectionView>\n );\n}\n\n// ── CALL STACK ────────────────────────────────────────────────────────────────\n\nfunction CallStackSection({ session, actions, accentColor }: { session: DebugSession; actions?: DebugActions; accentColor: string }) {\n const [expanded, setExpanded] = useState(true);\n const { active, status, callStack = [], pausedLine } = session;\n const isPaused = status === 'paused';\n\n const frames = active\n ? (callStack.length > 0\n ? callStack.map((f, i) => ({ ...f, id: i }))\n : [{ id: 0, fn: '<anonymous>', file: 'script.js', line: pausedLine, col: 1, isUser: true }])\n : [];\n\n return (\n <CollapsibleSectionView title=\"Call Stack\" expanded={expanded} onToggle={() => setExpanded(!expanded)} accentColor={accentColor}>\n {!active ? <Muted>Not debugging</Muted> : (\n <div className=\"flex flex-col font-mono text-[11px]\">\n {frames.map((frame) => (\n <div key={frame.id}\n className={`group flex items-center gap-1.5 px-3 py-[3px] cursor-default hover:bg-[var(--color-surface-hover)] ${frame.id === 0 ? 'bg-[color-mix(in_srgb,#ab47bc_8%,transparent)]' : ''}`}>\n {frame.id === 0\n ? <span className=\"w-1.5 h-1.5 rounded-full shrink-0\" style={{ background: '#ffa726' }} />\n : <span className=\"w-1.5 shrink-0\" />\n }\n <span className={`shrink-0 ${frame.isUser ? 'text-[var(--color-text-primary)]' : 'text-[var(--color-text-muted)]'}`}>{frame.fn}</span>\n <span className=\"text-[var(--color-text-muted)] truncate flex-1 text-right\">\n {frame.file}{frame.line != null && <span className=\"ml-1\">{frame.line}:{frame.col}</span>}\n </span>\n {frame.isUser && isPaused && (\n <button type=\"button\" onClick={() => actions?.onRestartFrame?.(frame.id)}\n className=\"opacity-0 group-hover:opacity-100 p-0.5 cursor-pointer text-[var(--color-text-muted)] hover:text-[var(--color-text-primary)]\"\n title=\"Restart Frame\">↺</button>\n )}\n </div>\n ))}\n {isPaused && (\n <div className=\"px-3 py-1 border-t border-[var(--color-surface-border)]\">\n <span className=\"text-[9px] px-1.5 py-[1px] rounded font-bold uppercase tracking-wide\"\n style={{ background: 'rgba(255,167,38,0.15)', color: '#ffa726' }}>Paused on breakpoint</span>\n </div>\n )}\n </div>\n )}\n </CollapsibleSectionView>\n );\n}\n\n// ── BREAKPOINTS ───────────────────────────────────────────────────────────────\n\nfunction BreakpointsSection({ session, actions, accentColor }: { session: DebugSession; actions?: DebugActions; accentColor: string }) {\n const [expanded, setExpanded] = useState(true);\n const [showClear, setShowClear] = useState(false);\n const { breakpoints = [], breakpointsMuted = false } = session;\n\n return (\n <CollapsibleSectionView\n title=\"Breakpoints\" expanded={expanded} onToggle={() => setExpanded(!expanded)}\n accentColor={accentColor} badge={breakpoints.length || undefined}\n headerRight={\n <>\n {breakpoints.length > 0 && (\n <HeaderBtn onClick={() => breakpoints.length > 1 ? setShowClear(true) : actions?.onClearAllBreakpoints?.()} title=\"Remove All Breakpoints\">×</HeaderBtn>\n )}\n <button type=\"button\" onClick={actions?.onToggleMuteBreakpoints}\n className={`w-[22px] h-[22px] mt-[3px] inline-flex items-center justify-center rounded cursor-pointer transition-colors hover:bg-[var(--color-surface-hover)] ${breakpointsMuted ? 'text-[var(--color-danger)]' : 'text-[var(--color-text-muted)] hover:text-[var(--color-text-primary)]'}`}\n title={breakpointsMuted ? 'Unmute breakpoints' : 'Mute all breakpoints'}>\n <MuteBreakpointsIcon size={16} />\n </button>\n </>\n }\n >\n {showClear && (\n <ModalView open onClose={() => setShowClear(false)} title=\"Remove all breakpoints?\" size=\"sm\"\n footerRight={\n <div style={{ display: 'flex', gap: 8 }}>\n <ButtonView variant=\"secondary\" size=\"sm\" onClick={() => setShowClear(false)}>Cancel</ButtonView>\n <ButtonView variant=\"danger\" size=\"sm\" onClick={() => { actions?.onClearAllBreakpoints?.(); setShowClear(false); }}>Remove All</ButtonView>\n </div>\n }\n >\n <p style={{ fontSize: 13, color: 'var(--color-text-primary)', margin: 0 }}>\n This will remove all {breakpoints.length} breakpoints.\n </p>\n </ModalView>\n )}\n {breakpoints.length === 0\n ? <Muted>No breakpoints set</Muted>\n : (\n <div className=\"flex flex-col py-0.5\">\n {breakpoints.map((bp, idx) => (\n <BreakpointRow key={`${bp.key}-${bp.line}-${idx}`} bp={bp} muted={breakpointsMuted} actions={actions} />\n ))}\n </div>\n )\n }\n </CollapsibleSectionView>\n );\n}\n\nfunction BreakpointRow({ bp, muted, actions }: { bp: DebugBreakpoint; muted: boolean; actions?: DebugActions }) {\n const faded = muted || !!bp.disabled;\n const dotColor = bp.condition\n ? 'var(--color-warning)'\n : (bp.disabled || muted) ? 'var(--color-text-muted)' : 'var(--color-danger)';\n\n return (\n <div className={`group flex items-center gap-2 px-3 py-[3px] hover:bg-[var(--color-surface-hover)] text-[11px] min-h-[24px] transition-opacity ${faded ? 'opacity-45' : ''}`}>\n <input type=\"checkbox\" checked={!bp.disabled} onChange={() => actions?.onToggleBreakpoint?.(bp.key, bp.line, !!bp.disabled)}\n className=\"shrink-0 cursor-pointer accent-[var(--color-danger)]\" style={{ width: 11, height: 11 }} />\n <span className=\"w-2 h-2 rounded-full shrink-0\" style={{ background: dotColor }} />\n <span className=\"flex items-center gap-1 cursor-pointer hover:underline truncate flex-1\"\n onClick={() => actions?.onNavigateBreakpoint?.(bp.key, bp.line)}\n title={`${bp.label ?? bp.key} — Line ${bp.line}`}>\n {bp.badge && <span className=\"shrink-0\">{bp.badge}</span>}\n <span className=\"text-[var(--color-text-primary)] truncate\">{bp.label ?? bp.key}</span>\n <span className=\"text-[var(--color-text-muted)] shrink-0\">Line {bp.line}</span>\n </span>\n {bp.condition && (\n <span className=\"truncate text-[10px]\" style={{ color: 'var(--color-warning)' }} title={bp.condition}>{bp.condition}</span>\n )}\n <button type=\"button\" onClick={() => actions?.onRemoveBreakpoint?.(bp.key, bp.line)}\n className=\"shrink-0 opacity-0 group-hover:opacity-100 text-[var(--color-text-muted)] hover:text-[var(--color-danger)] cursor-pointer text-[13px] font-bold leading-none\"\n title=\"Remove breakpoint\">×</button>\n </div>\n );\n}\n\n// ── Shared micro-components ───────────────────────────────────────────────────\n\nfunction Muted({ children }: { children: ReactNode }) {\n return <div className=\"px-4 py-2 text-[11px] text-[var(--color-text-muted)] italic\">{children}</div>;\n}\n\nfunction HeaderBtn({ children, onClick, title }: { children: ReactNode; onClick?: () => void; title?: string }) {\n return (\n <button type=\"button\" onClick={e => { e.stopPropagation(); onClick?.(); }}\n className=\"w-[22px] h-[22px] inline-flex items-center justify-center rounded cursor-pointer hover:bg-[var(--color-surface-hover)] text-[var(--color-text-muted)] hover:text-[var(--color-text-primary)] text-[18px] font-bold leading-none\"\n title={title}>{children}</button>\n );\n}\n\n// ── Value helpers (VS Code-style colors) ──────────────────────────────────────\n\nfunction isExpandable(v: unknown): boolean {\n return v !== null && typeof v === 'object';\n}\n\nfunction valuePreview(v: unknown): string {\n if (v === null) return 'null';\n if (v === undefined) return 'undefined';\n if (typeof v === 'string') return v.startsWith('<') ? v : `'${v.length > 50 ? v.slice(0, 50) + '…' : v}'`;\n if (typeof v === 'number' || typeof v === 'boolean') return String(v);\n if (Array.isArray(v)) {\n const inner = v.slice(0, 5).map(i => shortPreview(i)).join(', ');\n return `(${v.length}) [${inner}${v.length > 5 ? ', …' : ''}]`;\n }\n if (typeof v === 'object') {\n const keys = Object.keys(v as Record<string, unknown>);\n const inner = keys.slice(0, 3).map(k => `${k}: ${shortPreview((v as any)[k])}`).join(', ');\n return `{${inner}${keys.length > 3 ? ', …' : ''}}`;\n }\n return String(v);\n}\n\nfunction shortPreview(v: unknown): string {\n if (v === null) return 'null';\n if (v === undefined) return 'undefined';\n if (typeof v === 'string') return `'${v.length > 15 ? v.slice(0, 15) + '…' : v}'`;\n if (typeof v === 'number' || typeof v === 'boolean') return String(v);\n if (Array.isArray(v)) return `Array(${v.length})`;\n if (typeof v === 'object') return '{…}';\n return String(v);\n}\n\nfunction valueColor(v: unknown): string {\n if (v === null || v === undefined) return '#808080';\n if (typeof v === 'string') return v.startsWith('<') ? '#808080' : '#ce9178';\n if (typeof v === 'number') return '#b5cea8';\n if (typeof v === 'boolean') return '#569cd6';\n if (Array.isArray(v)) return '#dcdcaa';\n if (typeof v === 'object') return '#9cdcfe';\n return '#d4d4d4';\n}\n","import type { ReactNode } from 'react';\nimport type { DuiSize, DuiRadius, DuiFontStyle } from '../../core/DuiTypes';\nimport { useDui, resolveBorderRadius } from '../../core/DuiContext';\nimport { DUI_HEIGHT, DUI_FONT_SIZE } from '../../core/DuiTokens';\nimport './SettingsNavView.css';\n\nexport interface SettingsNavItem {\n id: string;\n label: string;\n description?: string;\n icon?: ReactNode;\n badge?: string;\n}\n\nexport interface SettingsNavGroup {\n title?: string;\n items: SettingsNavItem[];\n}\n\nexport interface SettingsNavViewProps {\n groups: SettingsNavGroup[];\n activeId?: string;\n onSelect?: (id: string) => void;\n accentColor?: string;\n className?: string;\n // ─── DUI container props ──────────────────────────────────────────────────\n /** Falls back to DuiProvider size when omitted. */\n size?: DuiSize;\n borderRadius?: DuiRadius | number;\n /** Text color for inactive items */\n color?: string;\n /** Color for active item text and indicator */\n activeColor?: string;\n fontStyle?: DuiFontStyle;\n}\n\nexport function SettingsNavView({\n groups,\n activeId,\n onSelect,\n accentColor,\n className = '',\n size,\n borderRadius,\n color,\n activeColor,\n fontStyle,\n}: SettingsNavViewProps) {\n const ctx = useDui();\n const s = size ?? ctx.size;\n const accent = accentColor || activeColor || ctx.activeColor || 'var(--color-primary)';\n const inactiveColor = color || ctx.color || 'var(--color-text-primary)';\n const radius = resolveBorderRadius(borderRadius ?? ctx.borderRadius, '6px');\n const fontStyleResolved = fontStyle || ctx.fontStyle;\n const itemHeight = DUI_HEIGHT.nav[s];\n const fontSize = DUI_FONT_SIZE[s];\n\n return (\n <div className={className} style={{ display: 'flex', flexDirection: 'column', gap: '16px' }}>\n {groups.map((group, gi) => (\n <div key={gi}>\n {group.title && (\n <div style={{\n fontSize: '10px', fontWeight: 700, color: 'var(--color-text-muted)',\n textTransform: 'uppercase', letterSpacing: '0.08em',\n padding: '0 8px 6px',\n }}>\n {group.title}\n </div>\n )}\n <div style={{ display: 'flex', flexDirection: 'column', gap: '1px' }}>\n {group.items.map(item => {\n const isActive = item.id === activeId;\n return (\n <div\n key={item.id}\n onClick={() => onSelect?.(item.id)}\n className={`dui_settings-nav__item${isActive ? ' dui_settings-nav__item--active' : ''}`}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '10px',\n minHeight: `${itemHeight}px`,\n padding: '4px 10px',\n borderRadius: radius,\n cursor: 'pointer',\n fontStyle: fontStyleResolved,\n background: isActive\n ? `color-mix(in srgb, ${accent} 12%, var(--color-surface))`\n : 'transparent',\n }}\n >\n {item.icon && (\n <span style={{ color: isActive ? accent : 'var(--color-text-muted)', flexShrink: 0 }}>\n {item.icon}\n </span>\n )}\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{\n fontSize,\n fontWeight: isActive ? 600 : 400,\n color: isActive ? accent : inactiveColor,\n whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis',\n }}>\n {item.label}\n </div>\n {item.description && (\n <div style={{\n fontSize: '10px', color: 'var(--color-text-muted)',\n whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis',\n marginTop: '1px',\n }}>\n {item.description}\n </div>\n )}\n </div>\n {item.badge && (\n <span style={{\n fontSize: '9px', padding: '1px 5px', borderRadius: 99, flexShrink: 0,\n background: `color-mix(in srgb, ${accent} 15%, transparent)`,\n color: accent, fontWeight: 700, letterSpacing: '0.03em',\n }}>\n {item.badge}\n </span>\n )}\n </div>\n );\n })}\n </div>\n </div>\n ))}\n </div>\n );\n}\n","import { CheckIcon } from '../../../icons';\nimport './ThemeCardSelectorView.css';\n\nexport interface ThemeOption {\n value: string;\n label: string;\n description?: string;\n preview?: {\n bg: string;\n panel: string;\n accent: string;\n text: string;\n };\n}\n\nexport interface ThemeCardSelectorViewProps {\n options: ThemeOption[];\n value: string;\n onChange: (value: string) => void;\n className?: string;\n}\n\nexport function ThemeCardSelectorView({\n options,\n value,\n onChange,\n className = '',\n}: ThemeCardSelectorViewProps) {\n return (\n <div className={className} style={{ display: 'flex', gap: '10px', flexWrap: 'wrap' }}>\n {options.map(opt => {\n const isSelected = opt.value === value;\n return (\n <button\n key={opt.value}\n type=\"button\"\n onClick={() => onChange(opt.value)}\n className={`dui_theme-card${isSelected ? ' dui_theme-card--selected' : ''}`}\n style={{\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n width: 110,\n padding: '10px',\n borderRadius: '8px',\n border: isSelected\n ? '2px solid var(--color-primary)'\n : '2px solid var(--color-surface-border)',\n background: isSelected\n ? 'color-mix(in srgb, var(--color-primary) 8%, transparent)'\n : 'var(--color-surface)',\n cursor: 'pointer',\n textAlign: 'left',\n position: 'relative',\n }}\n >\n {/* Preview swatch */}\n {opt.preview && (\n <div style={{\n width: '100%', height: 48,\n borderRadius: '5px',\n background: opt.preview.bg,\n border: '1px solid rgba(0,0,0,0.1)',\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n gap: '3px',\n padding: '4px',\n }}>\n <div style={{ width: '60%', height: 5, borderRadius: 2, background: opt.preview.panel }} />\n <div style={{ width: '40%', height: 3, borderRadius: 2, background: opt.preview.text, opacity: 0.5 }} />\n <div style={{ width: '30%', height: 5, borderRadius: 2, background: opt.preview.accent, marginTop: 3 }} />\n </div>\n )}\n {/* Label */}\n <div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n <span style={{\n fontSize: '11px',\n fontWeight: isSelected ? 600 : 400,\n color: isSelected ? 'var(--color-primary)' : 'var(--color-text-primary)',\n }}>\n {opt.label}\n </span>\n {isSelected && (\n <span style={{\n width: 14, height: 14, borderRadius: '50%',\n background: 'var(--color-primary)',\n display: 'flex', alignItems: 'center', justifyContent: 'center', flexShrink: 0,\n }}>\n <CheckIcon size={9} style={{ color: 'white', strokeWidth: 3 }} />\n </span>\n )}\n </div>\n {opt.description && (\n <span style={{ fontSize: '10px', color: 'var(--color-text-muted)', lineHeight: 1.3 }}>\n {opt.description}\n </span>\n )}\n </button>\n );\n })}\n </div>\n );\n}\n","import { useState, useRef, useLayoutEffect } from 'react';\nimport { ChevronRightIcon } from '../../../icons';\nimport { ToggleSwitchView } from '../input/ToggleSwitchView';\nimport { ChipView } from '../chips/ChipView';\nimport './FeatureCategoryView.css';\n\nexport interface FeatureItem {\n id: string;\n label: string;\n description?: string;\n enabled: boolean;\n onToggle: (enabled: boolean) => void;\n}\n\nexport interface FeatureCategoryViewProps {\n categoryLabel: string;\n categoryColor?: string;\n features: FeatureItem[];\n defaultExpanded?: boolean;\n categoryEnabled?: boolean;\n onCategoryToggle?: (enabled: boolean) => void;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function FeatureCategoryView({\n categoryLabel,\n categoryColor,\n features,\n defaultExpanded = false,\n categoryEnabled,\n onCategoryToggle,\n className = '',\n style,\n}: FeatureCategoryViewProps) {\n const [expanded, setExpanded] = useState(defaultExpanded);\n const bodyRef = useRef<HTMLDivElement>(null);\n const isFirst = useRef(true);\n const color = categoryColor || 'var(--color-primary)';\n const enabledCount = features.filter(f => f.enabled).length;\n const hasCategoryToggle = onCategoryToggle !== undefined;\n\n // On mount: set initial height without any transition so there's no flash\n useLayoutEffect(() => {\n const el = bodyRef.current;\n if (!el) return;\n el.style.transition = 'none';\n el.style.height = defaultExpanded ? 'auto' : '0px';\n el.style.overflow = 'hidden';\n // Re-enable transition on next frame\n requestAnimationFrame(() => {\n el.style.transition = 'height 220ms cubic-bezier(0.4, 0, 0.2, 1)';\n });\n isFirst.current = false;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Animate on toggle — skip initial render\n useLayoutEffect(() => {\n if (isFirst.current) return;\n const el = bodyRef.current;\n if (!el) return;\n if (expanded) {\n // Expand: set explicit px height → CSS transition → then release to 'auto'\n el.style.height = el.scrollHeight + 'px';\n const tid = setTimeout(() => { el.style.height = 'auto'; }, 230);\n return () => clearTimeout(tid);\n } else {\n // Collapse: lock to current px height first (from 'auto'), then animate to 0\n el.style.height = el.scrollHeight + 'px';\n requestAnimationFrame(() => {\n requestAnimationFrame(() => { el.style.height = '0px'; });\n });\n }\n }, [expanded]);\n\n return (\n <div\n className={className}\n style={{\n border: '1px solid var(--color-surface-border)',\n borderRadius: '7px',\n overflow: 'hidden',\n ...style,\n }}\n >\n {/* Category header */}\n <div\n onClick={() => setExpanded(v => !v)}\n className=\"dui_feature-category__header\"\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px 12px',\n cursor: 'pointer',\n background: expanded\n ? `color-mix(in srgb, ${color} 6%, transparent)`\n : 'transparent',\n userSelect: 'none',\n '--dui-category-color': color,\n } as React.CSSProperties}\n >\n {/* Single chevron that rotates — no component swap = no flicker */}\n <ChevronRightIcon\n size={11}\n style={{\n color: 'var(--color-text-muted)',\n flexShrink: 0,\n transform: expanded ? 'rotate(90deg)' : 'rotate(0deg)',\n transition: 'transform 0.2s ease',\n }}\n />\n <ChipView label={categoryLabel} color={color} size=\"xs\" />\n <span style={{ flex: 1, fontSize: '11px', color: 'var(--color-text-secondary)' }}>\n {categoryLabel}\n </span>\n <span style={{ fontSize: '10px', color: 'var(--color-text-muted)', flexShrink: 0 }}>\n {enabledCount}/{features.length}\n </span>\n {hasCategoryToggle && (\n <span onClick={e => e.stopPropagation()} style={{ flexShrink: 0, marginLeft: 4 }}>\n <ToggleSwitchView\n checked={categoryEnabled ?? false}\n onChange={onCategoryToggle}\n size=\"sm\"\n accentColor={color}\n />\n </span>\n )}\n </div>\n\n {/* Feature list — smooth height animation, always in DOM */}\n <div ref={bodyRef}>\n <div style={{ borderTop: '1px solid var(--color-surface-border)' }}>\n {features.map((feat, i) => (\n <div\n key={feat.id}\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n gap: '10px',\n padding: '9px 12px 9px 28px',\n borderBottom: i < features.length - 1\n ? '1px solid color-mix(in srgb, var(--color-surface-border) 50%, transparent)'\n : 'none',\n }}\n >\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ fontSize: '12px', color: 'var(--color-text-primary)', fontWeight: 500, marginBottom: feat.description ? '2px' : 0 }}>\n {feat.label}\n </div>\n {feat.description && (\n <div style={{ fontSize: '10px', color: 'var(--color-text-muted)', lineHeight: 1.4 }}>\n {feat.description}\n </div>\n )}\n </div>\n <ToggleSwitchView\n checked={feat.enabled}\n onChange={feat.onToggle}\n size=\"sm\"\n accentColor={color}\n />\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n}\n","import { useState, useRef } from 'react';\nimport { CloseIcon } from '../../../icons';\n\nexport interface TagInputViewProps {\n tags: string[];\n onChange: (tags: string[]) => void;\n placeholder?: string;\n accentColor?: string;\n maxTags?: number;\n disabled?: boolean;\n className?: string;\n}\n\nexport function TagInputView({\n tags,\n onChange,\n placeholder = 'Add tag…',\n accentColor,\n maxTags,\n disabled = false,\n className = '',\n}: TagInputViewProps) {\n const [input, setInput] = useState('');\n const inputRef = useRef<HTMLInputElement>(null);\n const accent = accentColor || 'var(--color-primary)';\n const canAdd = !disabled && (!maxTags || tags.length < maxTags);\n\n const addTag = (raw: string) => {\n const val = raw.trim();\n if (!val || tags.includes(val) || !canAdd) return;\n onChange([...tags, val]);\n setInput('');\n };\n\n const removeTag = (i: number) => {\n if (disabled) return;\n onChange(tags.filter((_, j) => j !== i));\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Enter' || e.key === ',') {\n e.preventDefault();\n addTag(input);\n } else if (e.key === 'Backspace' && !input && tags.length > 0) {\n removeTag(tags.length - 1);\n }\n };\n\n return (\n <div\n className={className}\n onClick={() => inputRef.current?.focus()}\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n alignItems: 'center',\n gap: '4px',\n minHeight: '32px',\n padding: '4px 8px',\n borderRadius: '5px',\n border: '1px solid var(--color-input-border)',\n background: 'var(--color-input-bg)',\n cursor: disabled ? 'not-allowed' : 'text',\n opacity: disabled ? 0.6 : 1,\n transition: 'border-color 120ms',\n }}\n onFocus={() => {}}\n >\n {tags.map((tag, i) => (\n <span\n key={i}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: '3px',\n padding: '2px 7px',\n borderRadius: 99,\n fontSize: '11px',\n fontWeight: 500,\n background: accentColor ? `color-mix(in srgb, ${accentColor} 15%, transparent)` : 'var(--color-tag-bg)',\n color: accentColor ? accentColor : 'var(--color-tag-text)',\n border: `1px solid ${accentColor ? `color-mix(in srgb, ${accentColor} 25%, transparent)` : 'var(--color-tag-border)'}`,\n }}\n >\n {tag}\n {!disabled && (\n <button\n type=\"button\"\n onClick={e => { e.stopPropagation(); removeTag(i); }}\n style={{\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n background: 'transparent', border: 'none', cursor: 'pointer',\n color: 'inherit', opacity: 0.6, padding: 0, marginLeft: '1px',\n }}\n >\n <CloseIcon size={9} />\n </button>\n )}\n </span>\n ))}\n {canAdd && (\n <input\n ref={inputRef}\n value={input}\n onChange={e => setInput(e.target.value)}\n onKeyDown={handleKeyDown}\n onBlur={() => { if (input.trim()) addTag(input); }}\n placeholder={tags.length === 0 ? placeholder : undefined}\n disabled={disabled}\n style={{\n flex: '1 0 80px',\n minWidth: 0,\n border: 'none',\n outline: 'none',\n background: 'transparent',\n fontSize: '12px',\n color: 'var(--color-text-primary)',\n padding: '2px 2px',\n fontFamily: 'inherit',\n }}\n />\n )}\n </div>\n );\n}\n","import { useState, useRef, useCallback, useEffect } from 'react';\nimport { ChevronDownIcon, ChevronRightIcon } from '../../../icons';\nimport './BottomPanelView.css';\n\nexport interface BottomPanelTab {\n id: string;\n label: string;\n icon?: React.ReactNode;\n content: React.ReactNode;\n}\n\nexport interface BottomPanelViewProps {\n tabs: BottomPanelTab[];\n defaultHeight?: number;\n minHeight?: number;\n maxHeight?: number;\n defaultCollapsed?: boolean;\n accentColor?: string;\n className?: string;\n}\n\nexport function BottomPanelView({\n tabs,\n defaultHeight = 200,\n minHeight = 80,\n maxHeight = 600,\n defaultCollapsed = false,\n accentColor,\n className = '',\n}: BottomPanelViewProps) {\n const [activeTab, setActiveTab] = useState(tabs[0]?.id ?? '');\n const [height, setHeight] = useState(defaultHeight);\n const [collapsed, setCollapsed] = useState(defaultCollapsed);\n const [dragging, setDragging] = useState(false);\n const startY = useRef(0);\n const startH = useRef(defaultHeight);\n const accent = accentColor || 'var(--color-primary)';\n\n const onMouseMove = useCallback((e: MouseEvent) => {\n if (!dragging) return;\n const delta = startY.current - e.clientY;\n const next = Math.max(minHeight, Math.min(maxHeight, startH.current + delta));\n setHeight(next);\n }, [dragging, minHeight, maxHeight]);\n\n const onMouseUp = useCallback(() => setDragging(false), []);\n\n useEffect(() => {\n if (!dragging) return;\n window.addEventListener('mousemove', onMouseMove);\n window.addEventListener('mouseup', onMouseUp);\n return () => {\n window.removeEventListener('mousemove', onMouseMove);\n window.removeEventListener('mouseup', onMouseUp);\n };\n }, [dragging, onMouseMove, onMouseUp]);\n\n const activeContent = tabs.find(t => t.id === activeTab)?.content;\n\n return (\n <div\n className={className}\n style={{\n display: 'flex',\n flexDirection: 'column',\n background: 'var(--color-panel)',\n borderTop: '1px solid var(--color-panel-border)',\n height: collapsed ? 'auto' : height,\n userSelect: dragging ? 'none' : undefined,\n }}\n >\n {/* Drag handle */}\n <div\n className=\"dui_bottom-panel__drag-handle\"\n style={{ height: 4, cursor: 'row-resize', background: 'transparent', flexShrink: 0 }}\n onMouseDown={e => {\n e.preventDefault();\n if (!collapsed) { setDragging(true); startY.current = e.clientY; startH.current = height; }\n }}\n />\n\n {/* Tab bar */}\n <div style={{\n display: 'flex',\n alignItems: 'center',\n gap: 0,\n borderBottom: collapsed ? 'none' : '1px solid var(--color-panel-border)',\n flexShrink: 0,\n }}>\n {tabs.map(tab => {\n const isActive = tab.id === activeTab;\n return (\n <button\n key={tab.id}\n type=\"button\"\n onClick={() => { setActiveTab(tab.id); if (collapsed) setCollapsed(false); }}\n style={{\n display: 'flex', alignItems: 'center', gap: '5px',\n padding: '5px 12px', height: 30,\n fontSize: '11px', fontWeight: isActive ? 600 : 400,\n color: isActive ? accent : 'var(--color-text-muted)',\n background: 'transparent', border: 'none', cursor: 'pointer',\n borderBottom: isActive ? `2px solid ${accent}` : '2px solid transparent',\n transition: 'color 100ms',\n whiteSpace: 'nowrap',\n }}\n >\n {tab.icon}\n {tab.label}\n </button>\n );\n })}\n <div style={{ flex: 1 }} />\n <button\n type=\"button\"\n onClick={() => setCollapsed(v => !v)}\n style={{\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n width: 28, height: 28, border: 'none', background: 'transparent',\n cursor: 'pointer', color: 'var(--color-text-muted)', marginRight: '4px',\n }}\n >\n {collapsed ? <ChevronRightIcon size={12} style={{ transform: 'rotate(-90deg)' }} /> : <ChevronDownIcon size={12} />}\n </button>\n </div>\n\n {/* Content */}\n {!collapsed && (\n <div style={{ flex: 1, overflow: 'auto', padding: '8px' }}>\n {activeContent}\n </div>\n )}\n </div>\n );\n}\n","import { useEffect, useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport { CheckCircleIcon, CloseIcon, WarningTriangleIcon, InfoCircleIcon, CloseCircleIcon } from '../../../icons';\nimport './ToastView.css';\n\nexport type ToastVariant = 'success' | 'error' | 'warning' | 'info';\n\nexport interface Toast {\n id: string;\n variant: ToastVariant;\n title: string;\n message?: string;\n duration?: number;\n}\n\nexport interface ToastViewProps {\n toasts: Toast[];\n onDismiss: (id: string) => void;\n position?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'top-center' | 'bottom-center';\n}\n\nconst VARIANT_CONFIG: Record<ToastVariant, { icon: React.ReactNode; color: string; bgVar: string }> = {\n success: {\n icon: <CheckCircleIcon size={13} />,\n color: 'var(--color-success)',\n bgVar: 'color-mix(in srgb, var(--color-success) 12%, var(--color-panel))',\n },\n error: {\n icon: <CloseCircleIcon size={13} />,\n color: 'var(--color-error)',\n bgVar: 'color-mix(in srgb, var(--color-error) 12%, var(--color-panel))',\n },\n warning: {\n icon: <WarningTriangleIcon size={13} />,\n color: 'var(--color-warning)',\n bgVar: 'color-mix(in srgb, var(--color-warning) 12%, var(--color-panel))',\n },\n info: {\n icon: <InfoCircleIcon size={13} />,\n color: 'var(--color-info, var(--color-primary))',\n bgVar: 'color-mix(in srgb, var(--color-primary) 12%, var(--color-panel))',\n },\n};\n\nconst POSITIONS: Record<string, React.CSSProperties> = {\n 'top-right': { top: 16, right: 16 },\n 'top-left': { top: 16, left: 16 },\n 'bottom-right': { bottom: 16, right: 16 },\n 'bottom-left': { bottom: 16, left: 16 },\n 'top-center': { top: 16, left: '50%', transform: 'translateX(-50%)' },\n 'bottom-center':{ bottom: 16, left: '50%', transform: 'translateX(-50%)' },\n};\n\nfunction ToastItem({ toast, onDismiss }: { toast: Toast; onDismiss: (id: string) => void }) {\n const cfg = VARIANT_CONFIG[toast.variant];\n const timerRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n\n useEffect(() => {\n const dur = toast.duration ?? 4000;\n if (dur > 0) {\n timerRef.current = setTimeout(() => onDismiss(toast.id), dur);\n }\n return () => { if (timerRef.current) clearTimeout(timerRef.current); };\n }, [toast.id, toast.duration, onDismiss]);\n\n return (\n <div\n style={{\n display: 'flex',\n alignItems: 'flex-start',\n gap: '10px',\n minWidth: 260,\n maxWidth: 360,\n padding: '10px 12px',\n borderRadius: '8px',\n background: cfg.bgVar,\n border: `1px solid color-mix(in srgb, ${cfg.color} 30%, transparent)`,\n boxShadow: '0 4px 16px rgba(0,0,0,0.25)',\n animation: 'dui_fade-in-up 180ms ease',\n }}\n >\n <span style={{ color: cfg.color, flexShrink: 0, marginTop: '1px' }}>\n {cfg.icon}\n </span>\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ fontSize: '12px', fontWeight: 600, color: 'var(--color-text-primary)', marginBottom: toast.message ? '2px' : 0 }}>\n {toast.title}\n </div>\n {toast.message && (\n <div style={{ fontSize: '11px', color: 'var(--color-text-secondary)', lineHeight: 1.4 }}>\n {toast.message}\n </div>\n )}\n </div>\n <button\n type=\"button\"\n onClick={() => onDismiss(toast.id)}\n style={{\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n background: 'transparent', border: 'none', cursor: 'pointer',\n color: 'var(--color-text-muted)', padding: 0, flexShrink: 0, marginTop: '1px',\n }}\n >\n <CloseIcon size={11} />\n </button>\n </div>\n );\n}\n\nexport function ToastView({ toasts, onDismiss, position = 'bottom-right' }: ToastViewProps) {\n if (toasts.length === 0) return null;\n\n const posStyle = POSITIONS[position] ?? POSITIONS['bottom-right'];\n\n return createPortal(\n <div\n style={{\n position: 'fixed',\n ...posStyle,\n zIndex: 9999,\n display: 'flex',\n flexDirection: 'column',\n gap: '8px',\n pointerEvents: 'none',\n }}\n >\n {toasts.map(t => (\n <div key={t.id} style={{ pointerEvents: 'all' }}>\n <ToastItem toast={t} onDismiss={onDismiss} />\n </div>\n ))}\n </div>,\n document.body\n );\n}\n\nexport function useToast() {\n const toastsRef = useRef<Toast[]>([]);\n const setters = useRef<Array<(t: Toast[]) => void>>([]);\n\n const subscribe = (fn: (t: Toast[]) => void) => {\n setters.current.push(fn);\n return () => { setters.current = setters.current.filter(f => f !== fn); };\n };\n\n const notify = () => setters.current.forEach(fn => fn([...toastsRef.current]));\n\n const toast = (variant: ToastVariant, title: string, message?: string, duration?: number) => {\n const id = `toast-${Date.now()}-${Math.random()}`;\n toastsRef.current = [...toastsRef.current, { id, variant, title, message, duration }];\n notify();\n return id;\n };\n\n const dismiss = (id: string) => {\n toastsRef.current = toastsRef.current.filter(t => t.id !== id);\n notify();\n };\n\n return { subscribe, toast, dismiss };\n}\n","import { useState } from 'react';\nimport { CopyIcon, RenameIcon, TrashIcon, SparkleIcon, CheckIcon } from '../../../icons';\nimport { ChipView } from '../chips/ChipView';\nimport './PromptCardView.css';\n\nexport interface PromptCardViewProps {\n id: string;\n title: string;\n description?: string;\n content: string;\n protocol?: string;\n protocolColor?: string;\n isCustom?: boolean;\n onUse?: (id: string) => void;\n onEdit?: (id: string) => void;\n onDelete?: (id: string) => void;\n onCopy?: (id: string) => void;\n onClick?: (id: string) => void;\n accentColor?: string;\n selected?: boolean;\n className?: string;\n /** Override CSS variables for fine-grained theme control */\n colors?: {\n avatarBg?: string; // avatar background color\n avatarText?: string; // avatar text/icon color\n titleText?: string; // title text color\n bodyText?: string; // description / content preview color\n customBadgeBg?: string; // CUSTOM chip background\n customBadgeText?: string; // CUSTOM chip text\n chipColor?: string; // protocol chip color override\n actionIconColor?: string; // action icon default color\n actionDeleteColor?: string; // delete icon color\n rowBg?: string; // background for the card row\n rowBgHover?: string; // hover background\n rowBgSelected?: string; // selected background\n };\n}\n\nfunction getInitials(title: string): string {\n const words = title.trim().split(/\\s+/);\n if (words.length >= 2) return (words[0][0] + words[1][0]).toUpperCase();\n return title.slice(0, 2).toUpperCase();\n}\n\nexport function PromptCardView({\n id,\n title,\n description,\n content,\n protocol,\n protocolColor,\n isCustom = false,\n onUse,\n onEdit,\n onDelete,\n onCopy,\n onClick,\n accentColor,\n selected = false,\n colors,\n className = '',\n}: PromptCardViewProps) {\n const [hovered, setHovered] = useState(false);\n const [copied, setCopied] = useState(false);\n const accent = accentColor || protocolColor || 'var(--color-protocol-ai)';\n\n const rowBg = colors?.rowBgSelected && selected\n ? colors.rowBgSelected\n : colors?.rowBgHover && hovered\n ? colors.rowBgHover\n : colors?.rowBg ?? (\n selected\n ? `color-mix(in srgb, ${accent} 12%, transparent)`\n : hovered\n ? 'rgba(255,255,255,0.04)'\n : 'transparent'\n );\n\n const handleCopy = (e: React.MouseEvent) => {\n e.stopPropagation();\n onCopy?.(id);\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n };\n\n return (\n <div\n className={className}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '9px',\n padding: '6px 10px',\n borderRadius: '6px',\n cursor: 'pointer',\n background: rowBg,\n transition: 'background 100ms',\n minWidth: 0,\n }}\n onClick={() => onClick?.(id)}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n >\n {/* Colored avatar with initials */}\n <div style={{\n width: 22,\n height: 22,\n borderRadius: '5px',\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n background: colors?.avatarBg ?? `color-mix(in srgb, ${accent} 20%, var(--color-surface))`,\n color: colors?.avatarText ?? accent,\n fontSize: '9px',\n fontWeight: 700,\n letterSpacing: '0.02em',\n userSelect: 'none',\n }}>\n {getInitials(title)}\n </div>\n\n {/* Text */}\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: '5px', marginBottom: '1px' }}>\n <span style={{\n fontSize: '12px',\n fontWeight: 500,\n color: colors?.titleText ?? 'var(--color-text-primary)',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n flex: 1,\n minWidth: 0,\n }}>\n {title}\n </span>\n {isCustom && (\n <ChipView\n label=\"CUSTOM\"\n color={colors?.customBadgeText ?? 'var(--color-text-muted)'}\n size=\"xs\"\n style={{\n flexShrink: 0,\n background: colors?.customBadgeBg ?? 'color-mix(in srgb, var(--color-text-muted) 10%, transparent)',\n border: '1px solid color-mix(in srgb, var(--color-text-muted) 20%, transparent)',\n }}\n />\n )}\n </div>\n {(description || content) && (\n <div style={{\n fontSize: '10px',\n color: colors?.bodyText ?? 'var(--color-text-muted)',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }}>\n {description || content}\n </div>\n )}\n </div>\n\n {/* Protocol chip */}\n {protocol && (\n <ChipView\n label={protocol}\n color={colors?.chipColor ?? protocolColor ?? 'var(--color-primary)'}\n size=\"xs\"\n style={{ flexShrink: 0 }}\n />\n )}\n\n {/* Hover actions */}\n {hovered && (\n <div style={{ display: 'flex', alignItems: 'center', gap: '2px', flexShrink: 0 }}>\n {onUse && (\n <ActionBtn icon={<SparkleIcon size={11} />} onClick={() => onUse(id)} title=\"Use prompt\" iconColor={colors?.actionIconColor} />\n )}\n {onCopy && (\n <ActionBtn\n icon={copied ? <CheckIcon size={11} /> : <CopyIcon size={11} />}\n onClick={handleCopy}\n title={copied ? 'Copied!' : 'Copy prompt'}\n iconColor={copied ? 'var(--color-success)' : colors?.actionIconColor}\n copied={copied}\n />\n )}\n {onEdit && (\n <ActionBtn icon={<RenameIcon size={11} />} onClick={() => { onEdit(id); }} title=\"Edit prompt\" iconColor={colors?.actionIconColor} />\n )}\n {onDelete && (\n <ActionBtn icon={<TrashIcon size={11} />} onClick={() => { onDelete(id); }} title=\"Delete\" danger iconColor={colors?.actionDeleteColor} />\n )}\n </div>\n )}\n </div>\n );\n}\n\nfunction ActionBtn({ icon, onClick, title, danger, iconColor, copied }: {\n icon: React.ReactNode; onClick: (e: React.MouseEvent) => void; title: string;\n danger?: boolean; iconColor?: string; copied?: boolean;\n}) {\n const baseColor = copied\n ? 'var(--color-success)'\n : iconColor ?? (danger ? 'var(--color-error)' : 'var(--color-text-muted)');\n return (\n <button\n type=\"button\"\n onClick={e => { e.stopPropagation(); onClick(e); }}\n title={title}\n className={`dui_prompt-card__action-btn${danger ? ' dui_prompt-card__action-btn--danger' : ''}${copied ? ' dui_prompt-card__action-btn--copied' : ''}`}\n style={{\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n width: 22, height: 22, borderRadius: '4px',\n border: 'none',\n background: copied ? 'color-mix(in srgb, var(--color-success) 12%, transparent)' : 'transparent',\n cursor: 'pointer',\n color: baseColor,\n }}\n >\n {icon}\n </button>\n );\n}\n","import { useState } from 'react';\nimport { ChevronRightIcon, SearchIcon } from '../../../icons';\nimport { PromptCardView } from './PromptCardView';\n\nexport interface PromptLibraryItem {\n id: string;\n title: string;\n description?: string;\n avatarColor?: string;\n protocol?: string;\n protocolColor?: string;\n isCustom?: boolean;\n isModified?: boolean;\n}\n\nexport interface PromptLibraryCategory {\n id: string;\n title: string;\n items: PromptLibraryItem[];\n}\n\nexport interface PromptLibrarySection {\n id: string;\n title: string;\n categories: PromptLibraryCategory[];\n}\n\nexport interface PromptLibraryListViewProps {\n sections: PromptLibrarySection[];\n activeId?: string;\n onSelect?: (id: string) => void;\n search?: string;\n onSearchChange?: (v: string) => void;\n accentColor?: string;\n className?: string;\n}\n\nfunction getInitials(title: string): string {\n const words = title.trim().split(/\\s+/);\n if (words.length >= 2) return (words[0][0] + words[1][0]).toUpperCase();\n return title.slice(0, 2).toUpperCase();\n}\n\nexport function PromptLibraryListView({\n sections,\n activeId,\n onSelect,\n search = '',\n onSearchChange,\n accentColor,\n className = '',\n}: PromptLibraryListViewProps) {\n const accent = accentColor || 'var(--color-protocol-ai)';\n const [collapsedSections, setCollapsedSections] = useState<Set<string>>(new Set());\n const [collapsedCats, setCollapsedCats] = useState<Set<string>>(new Set());\n\n const toggleSection = (id: string) => setCollapsedSections(prev => {\n const n = new Set(prev); n.has(id) ? n.delete(id) : n.add(id); return n;\n });\n const toggleCat = (id: string) => setCollapsedCats(prev => {\n const n = new Set(prev); n.has(id) ? n.delete(id) : n.add(id); return n;\n });\n\n const q = search.toLowerCase().trim();\n\n const filteredSections = sections.map(section => ({\n ...section,\n categories: section.categories.map(cat => ({\n ...cat,\n items: q\n ? cat.items.filter(item =>\n item.title.toLowerCase().includes(q) ||\n (item.description ?? '').toLowerCase().includes(q)\n )\n : cat.items,\n })).filter(cat => cat.items.length > 0),\n })).filter(s => s.categories.length > 0);\n\n const totalCount = sections.reduce((sum, s) => sum + s.categories.reduce((cs, c) => cs + c.items.length, 0), 0);\n\n return (\n <div className={className} style={{ display: 'flex', flexDirection: 'column', height: '100%', overflow: 'hidden' }}>\n {/* Search bar */}\n <div style={{\n padding: '8px 10px',\n borderBottom: '1px solid var(--color-panel-border)',\n flexShrink: 0,\n }}>\n <div style={{\n display: 'flex', alignItems: 'center', gap: 6,\n height: 28, background: 'var(--color-input-bg)',\n border: '1px solid var(--color-input-border)',\n borderRadius: 6, padding: '0 8px',\n }}>\n <SearchIcon size={12} style={{ color: 'var(--color-text-muted)', flexShrink: 0 }} />\n <input\n value={search}\n onChange={e => onSearchChange?.(e.target.value)}\n placeholder=\"Search prompts...\"\n style={{\n flex: 1, border: 'none', outline: 'none', background: 'transparent',\n fontSize: 11, color: 'var(--color-text-primary)', fontFamily: 'inherit',\n }}\n />\n {totalCount > 0 && !search && (\n <span style={{\n fontSize: 9, padding: '1px 5px', borderRadius: 99, flexShrink: 0,\n background: 'color-mix(in srgb, var(--color-text-muted) 15%, transparent)',\n color: 'var(--color-text-muted)', fontWeight: 700,\n }}>{totalCount}</span>\n )}\n </div>\n </div>\n\n {/* Sections list */}\n <div style={{ flex: 1, overflowY: 'auto', overflowX: 'hidden' }}>\n {filteredSections.map(section => {\n const isSectionCollapsed = collapsedSections.has(section.id);\n const sectionTotal = section.categories.reduce((s, c) => s + c.items.length, 0);\n return (\n <div key={section.id}>\n {/* Section header */}\n <button\n type=\"button\"\n onClick={() => toggleSection(section.id)}\n style={{\n display: 'flex', alignItems: 'center', gap: 6, width: '100%',\n padding: '8px 12px 6px', background: 'transparent', border: 'none',\n cursor: 'pointer', textAlign: 'left',\n }}\n >\n <ChevronRightIcon\n size={9}\n style={{\n flexShrink: 0, color: 'var(--color-text-muted)', opacity: 0.5,\n transform: isSectionCollapsed ? 'rotate(0deg)' : 'rotate(90deg)',\n transition: 'transform 140ms ease',\n }}\n />\n <span style={{\n flex: 1, fontSize: 9, fontWeight: 800, letterSpacing: '0.1em',\n textTransform: 'uppercase', color: 'var(--color-text-muted)',\n }}>\n {section.title}\n </span>\n <span style={{\n fontSize: 9, padding: '1px 5px', borderRadius: 99,\n background: `color-mix(in srgb, ${accent} 15%, transparent)`,\n color: accent, fontWeight: 700,\n }}>{sectionTotal}</span>\n </button>\n\n {!isSectionCollapsed && (\n <div>\n {section.categories.map(cat => {\n const isCatCollapsed = collapsedCats.has(cat.id);\n return (\n <div key={cat.id}>\n {/* Category header */}\n <button\n type=\"button\"\n onClick={() => toggleCat(cat.id)}\n style={{\n display: 'flex', alignItems: 'center', gap: 6, width: '100%',\n padding: '5px 12px 3px 22px', background: 'transparent', border: 'none',\n cursor: 'pointer', textAlign: 'left',\n }}\n >\n <ChevronRightIcon\n size={8}\n style={{\n flexShrink: 0, color: 'var(--color-text-muted)', opacity: 0.4,\n transform: isCatCollapsed ? 'rotate(0deg)' : 'rotate(90deg)',\n transition: 'transform 120ms ease',\n }}\n />\n <span style={{\n flex: 1, fontSize: 9, fontWeight: 700, letterSpacing: '0.08em',\n textTransform: 'uppercase', color: 'var(--color-text-muted)', opacity: 0.7,\n }}>\n {cat.title}\n </span>\n <span style={{ fontSize: 9, color: 'var(--color-text-muted)', opacity: 0.5 }}>\n {cat.items.length}\n </span>\n </button>\n\n {!isCatCollapsed && (\n <div style={{ padding: '2px 6px' }}>\n {cat.items.map(item => (\n <PromptCardView\n key={item.id}\n id={item.id}\n title={item.title}\n description={item.description}\n content={item.description ?? ''}\n protocol={item.protocol}\n protocolColor={item.protocolColor}\n isCustom={item.isCustom}\n accentColor={item.avatarColor ?? accent}\n selected={item.id === activeId}\n onClick={id => onSelect?.(id)}\n onUse={id => onSelect?.(id)}\n />\n ))}\n </div>\n )}\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n })}\n </div>\n </div>\n );\n}\n","import { useState, useRef, useCallback } from 'react';\nimport './PromptLibraryEditorView.css';\n\nexport interface PromptLibraryVariable {\n pill: string; // displayed label, e.g. \"{{curlCommand}}\"\n insert: string; // text inserted on click\n title?: string; // tooltip\n}\n\nexport interface PromptLibraryEditorTab {\n id: string;\n label: string;\n icon?: React.ReactNode;\n}\n\nexport interface PromptLibraryEditorViewProps {\n title: string;\n description?: string;\n /** Trigger breadcrumb shown below description */\n triggerLabel?: string;\n avatarColor?: string;\n isCustom?: boolean;\n isDirty?: boolean;\n variables?: PromptLibraryVariable[];\n tabs?: PromptLibraryEditorTab[];\n activeTabId?: string;\n onTabChange?: (id: string) => void;\n content: string;\n onContentChange?: (content: string) => void;\n viewMode?: 'preview' | 'edit';\n onViewModeChange?: (mode: 'preview' | 'edit') => void;\n onSave?: () => void;\n onVariableInsert?: (insert: string) => void;\n accentColor?: string;\n className?: string;\n}\n\nfunction getInitials(title: string): string {\n const words = title.trim().split(/\\s+/);\n if (words.length >= 2) return (words[0][0] + words[1][0]).toUpperCase();\n return title.slice(0, 2).toUpperCase();\n}\n\nconst VAR_RE = /(\\{\\{[a-zA-Z_][a-zA-Z0-9_.]*\\}\\}|\\{[a-zA-Z_][a-zA-Z0-9_.]*\\})/g;\n\n/** Preview mode — splits text on {{vars}} and renders colored inline pills */\nfunction PromptPreview({ text }: { text: string }) {\n if (!text) {\n return (\n <p style={{ margin: 0, fontSize: 12, color: 'var(--color-text-muted)', fontStyle: 'italic' }}>\n No prompt — switch to Edit to add one.\n </p>\n );\n }\n const parts = text.split(VAR_RE);\n return (\n <div style={{\n fontSize: 12, fontFamily: 'Menlo, Monaco, \"Courier New\", monospace',\n lineHeight: 1.8, color: 'var(--color-text-secondary)',\n whiteSpace: 'pre-wrap', wordBreak: 'break-word',\n }}>\n {parts.map((part, i) => {\n if (VAR_RE.test(part)) {\n return (\n <span key={i} style={{\n display: 'inline-block', borderRadius: 3, padding: '0 5px',\n background: 'var(--color-var-pill-bg)', color: 'var(--color-var-pill-text)',\n border: '1px solid var(--color-var-pill-border)', fontWeight: 600, lineHeight: 1.6,\n }}>{part}</span>\n );\n }\n return <span key={i}>{part}</span>;\n })}\n </div>\n );\n}\n\n/** Edit mode — textarea with {{var}} tokens highlighted via backdrop overlay */\nfunction HighlightedTextarea({ value, onChange, accent, minHeight = 220 }: {\n value: string;\n onChange: (v: string) => void;\n accent: string;\n minHeight?: number;\n}) {\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const backdropRef = useRef<HTMLDivElement>(null);\n const [focused, setFocused] = useState(false);\n\n const syncScroll = useCallback(() => {\n if (textareaRef.current && backdropRef.current) {\n backdropRef.current.scrollTop = textareaRef.current.scrollTop;\n backdropRef.current.scrollLeft = textareaRef.current.scrollLeft;\n }\n }, []);\n\n // Build highlighted HTML — escape HTML first, then wrap var tokens\n const html = (value + '\\n')\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/(\\{\\{[a-zA-Z_][a-zA-Z0-9_.]*\\}\\}|\\{[a-zA-Z_][a-zA-Z0-9_.]*\\})/g,\n '<mark class=\"dui-graphify-var-mark\">$1</mark>',\n );\n\n const sharedStyle: React.CSSProperties = {\n position: 'absolute', top: 0, left: 0, width: '100%', height: '100%',\n padding: '10px 12px', boxSizing: 'border-box',\n fontSize: 12, lineHeight: 1.8,\n fontFamily: 'Menlo, Monaco, \"Courier New\", monospace',\n whiteSpace: 'pre-wrap', wordBreak: 'break-word', overflowWrap: 'break-word',\n border: '1px solid transparent',\n borderRadius: 6,\n overflowY: 'auto', overflowX: 'hidden',\n };\n\n return (\n <div style={{ position: 'relative', width: '100%', minHeight }}>\n {/* Backdrop — shows highlighted HTML */}\n <div\n ref={backdropRef}\n aria-hidden=\"true\"\n dangerouslySetInnerHTML={{ __html: html }}\n style={{\n ...sharedStyle,\n background: 'var(--color-input-bg)',\n border: `1px solid ${focused ? accent : 'var(--color-input-border)'}`,\n color: 'var(--color-text-primary)',\n pointerEvents: 'none',\n userSelect: 'none',\n transition: 'border-color 120ms',\n }}\n />\n {/* Actual textarea — transparent text, cursor visible */}\n <textarea\n ref={textareaRef}\n value={value}\n onChange={e => onChange(e.target.value)}\n onScroll={syncScroll}\n onFocus={() => setFocused(true)}\n onBlur={() => setFocused(false)}\n style={{\n ...sharedStyle,\n background: 'transparent',\n color: 'transparent',\n caretColor: 'var(--color-text-primary)',\n resize: 'vertical',\n outline: 'none',\n cursor: 'text',\n position: 'absolute',\n zIndex: 1,\n }}\n spellCheck={false}\n />\n {/* Spacer so the container has correct height */}\n <div style={{ visibility: 'hidden', fontSize: 12, lineHeight: 1.8, fontFamily: 'Menlo, Monaco, \"Courier New\", monospace', padding: '10px 12px', whiteSpace: 'pre-wrap', wordBreak: 'break-word', minHeight }}>\n {value || ' '}\n </div>\n </div>\n );\n}\n\nexport function PromptLibraryEditorView({\n title,\n description,\n triggerLabel,\n avatarColor,\n isCustom = false,\n isDirty = false,\n variables = [],\n tabs = [],\n activeTabId,\n onTabChange,\n content,\n onContentChange,\n viewMode = 'preview',\n onViewModeChange,\n onSave,\n onVariableInsert,\n accentColor,\n className = '',\n}: PromptLibraryEditorViewProps) {\n const [localViewMode, setLocalViewMode] = useState<'preview' | 'edit'>(viewMode);\n const resolvedViewMode = onViewModeChange ? viewMode : localViewMode;\n const setViewMode = onViewModeChange ?? setLocalViewMode;\n\n const accent = avatarColor ?? accentColor ?? 'var(--color-protocol-ai)';\n const resolvedActiveTab = activeTabId ?? tabs[0]?.id ?? '';\n\n return (\n <div\n className={className}\n style={{ display: 'flex', flexDirection: 'column', height: '100%', overflow: 'hidden' }}\n >\n {/* ── Header ── */}\n <div style={{\n display: 'flex', alignItems: 'flex-start', gap: 12,\n padding: '12px 16px',\n borderBottom: '1px solid var(--color-surface-border)',\n flexShrink: 0,\n }}>\n {/* Avatar */}\n <div style={{\n width: 36, height: 36, borderRadius: 9, flexShrink: 0,\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n background: accent, color: '#fff',\n fontSize: 13, fontWeight: 700, letterSpacing: '0.02em',\n userSelect: 'none',\n }}>\n {getInitials(title)}\n </div>\n\n {/* Title + description */}\n <div style={{ flex: 1, minWidth: 0 }}>\n <div style={{ display: 'flex', alignItems: 'center', gap: 7, marginBottom: description || triggerLabel ? 2 : 0 }}>\n <span style={{ fontSize: 13, fontWeight: 600, color: 'var(--color-text-primary)' }}>\n {title}\n </span>\n {isCustom && !isDirty && (\n <span style={{\n fontSize: 9, padding: '1px 5px', borderRadius: 99, fontWeight: 700,\n background: `color-mix(in srgb, ${accent} 15%, transparent)`,\n color: accent, letterSpacing: '0.04em',\n }}>CUSTOM</span>\n )}\n {isDirty && (\n <span style={{ fontSize: 9, color: 'var(--color-text-muted)' }}>● unsaved</span>\n )}\n </div>\n {description && (\n <div style={{ fontSize: 11, color: 'var(--color-text-muted)', marginBottom: triggerLabel ? 3 : 0, lineHeight: 1.4 }}>\n {description}\n </div>\n )}\n {triggerLabel && (\n <div style={{ fontSize: 10, color: accent, opacity: 0.82, fontStyle: 'italic', lineHeight: 1.4 }}>\n ↳ {triggerLabel}\n </div>\n )}\n </div>\n\n {/* Save button */}\n {onSave && (\n <button\n type=\"button\"\n onClick={onSave}\n disabled={!isDirty}\n style={{\n height: 28, padding: '0 14px', borderRadius: 6, border: 'none',\n background: isDirty\n ? accent\n : 'color-mix(in srgb, var(--color-text-muted) 12%, transparent)',\n color: isDirty ? '#fff' : 'var(--color-text-muted)',\n fontSize: 11, fontWeight: 600, cursor: isDirty ? 'pointer' : 'default',\n transition: 'background 120ms, color 120ms',\n flexShrink: 0,\n }}\n >\n Save\n </button>\n )}\n </div>\n\n {/* ── Variable chips ── */}\n {variables.length > 0 && (\n <div style={{\n display: 'flex', alignItems: 'center', gap: 6, flexWrap: 'wrap',\n padding: '7px 16px',\n borderBottom: '1px solid var(--color-surface-border)',\n flexShrink: 0,\n }}>\n <span style={{ fontSize: 10, color: 'var(--color-text-muted)', fontWeight: 600, flexShrink: 0 }}>\n Variables — click to insert:\n </span>\n {variables.map(v => (\n <button\n key={v.pill}\n type=\"button\"\n title={v.title}\n onClick={() => onVariableInsert?.(v.insert)}\n className=\"dui_prompt-editor__var-chip\"\n style={{\n display: 'inline-block', borderRadius: 4, padding: '2px 7px',\n background: 'var(--color-var-pill-bg)', color: 'var(--color-var-pill-text)',\n border: '1px solid var(--color-var-pill-border)',\n fontSize: 11, fontWeight: 600, fontFamily: 'Menlo, Monaco, monospace',\n cursor: onVariableInsert ? 'pointer' : 'default',\n }}\n >\n {v.pill}\n </button>\n ))}\n </div>\n )}\n\n {/* ── Tab bar + view mode toggle ── */}\n {tabs.length > 0 && (\n <div style={{\n display: 'flex', alignItems: 'center', gap: 0,\n padding: '0 16px',\n borderBottom: '1px solid var(--color-surface-border)',\n flexShrink: 0, minHeight: 34,\n }}>\n {/* Tabs — with optional icon */}\n <div style={{ display: 'flex', alignItems: 'center', flex: 1, gap: 0 }}>\n {tabs.map(tab => {\n const isActive = tab.id === resolvedActiveTab;\n return (\n <button\n key={tab.id}\n type=\"button\"\n onClick={() => onTabChange?.(tab.id)}\n style={{\n display: 'flex', alignItems: 'center', gap: 6,\n height: 34, padding: '0 12px', border: 'none', background: 'transparent',\n fontSize: 11, fontWeight: isActive ? 600 : 400,\n color: isActive ? 'var(--color-text-primary)' : 'var(--color-text-muted)',\n cursor: 'pointer',\n borderBottom: isActive ? `2px solid ${accent}` : '2px solid transparent',\n transition: 'color 100ms, border-color 100ms',\n }}\n >\n {tab.icon && (\n <span style={{\n color: isActive ? accent : 'var(--color-text-muted)',\n display: 'flex', alignItems: 'center', transition: 'color 100ms',\n }}>\n {tab.icon}\n </span>\n )}\n {!tab.icon && isActive && (\n <span style={{ width: 6, height: 6, borderRadius: '50%', background: accent, flexShrink: 0 }} />\n )}\n {tab.label}\n </button>\n );\n })}\n </div>\n\n {/* Preview / Edit toggle */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 0, flexShrink: 0 }}>\n {(['preview', 'edit'] as const).map(mode => (\n <button\n key={mode}\n type=\"button\"\n onClick={() => setViewMode(mode)}\n style={{\n height: 24, padding: '0 10px', border: 'none',\n borderRadius: mode === 'preview' ? '4px 0 0 4px' : '0 4px 4px 0',\n background: resolvedViewMode === mode\n ? `color-mix(in srgb, ${accent} 15%, transparent)`\n : 'color-mix(in srgb, var(--color-text-muted) 8%, transparent)',\n color: resolvedViewMode === mode ? accent : 'var(--color-text-muted)',\n fontSize: 10, fontWeight: 600, cursor: 'pointer',\n transition: 'background 100ms, color 100ms',\n outline: resolvedViewMode === mode ? `1px solid color-mix(in srgb, ${accent} 30%, transparent)` : '1px solid transparent',\n }}\n >\n {mode === 'preview' ? '◉ Preview' : '⇌ Edit'}\n </button>\n ))}\n </div>\n </div>\n )}\n\n {/* ── Content area ── */}\n <div style={{ flex: 1, overflowY: 'auto', padding: '14px 16px' }}>\n {resolvedViewMode === 'preview' ? (\n <PromptPreview text={content} />\n ) : (\n <HighlightedTextarea\n value={content}\n onChange={v => onContentChange?.(v)}\n accent={accent}\n />\n )}\n </div>\n </div>\n );\n}\n","import './StageView.css';\n\n/**\n * StageView — stage status indicators for multi-step processes.\n *\n * Three variants:\n * StageCheck — completed step (green check ring, static)\n * StageSpin — active / in-progress step (rotating spinner ring)\n * StagePulse — pending / waiting step (pulsing dot, draws attention without spinning)\n *\n * All three accept the same base props for consistency.\n */\n\nexport interface StageViewBaseProps {\n /** Step label shown to the right of the indicator */\n label?: string;\n /** Sub-label / description shown below label */\n sublabel?: string;\n /** Override accent color */\n color?: string;\n /** Ring / icon size in px (default 20) */\n size?: number;\n /** Text size in px (default 12) */\n textSize?: number;\n className?: string;\n}\n\n// ─── StageCheck ───────────────────────────────────────────────────────────────\n\nexport function StageCheck({ label, sublabel, color, size = 20, textSize = 12, className = '' }: StageViewBaseProps) {\n const c = color ?? 'var(--color-stage-check)';\n const r = size / 2 - 2;\n const cx = size / 2;\n const cy = size / 2;\n const strokeW = size <= 16 ? 1.5 : 2;\n const checkScale = size / 20;\n\n return (\n <div className={className} style={{ display: 'flex', alignItems: 'flex-start', gap: 8 }}>\n <svg width={size} height={size} viewBox={`0 0 ${size} ${size}`} fill=\"none\" style={{ flexShrink: 0, marginTop: 1 }}>\n <circle cx={cx} cy={cy} r={r} stroke={c} strokeWidth={strokeW} fill={`color-mix(in srgb, ${c} 10%, transparent)`} />\n {/* checkmark */}\n <path\n d={`M ${cx - 4 * checkScale} ${cy} l ${2.5 * checkScale} ${2.5 * checkScale} l ${5 * checkScale} ${-5 * checkScale}`}\n stroke={c}\n strokeWidth={strokeW}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n {(label || sublabel) && (\n <div>\n {label && <div style={{ fontSize: textSize, fontWeight: 500, color: 'var(--color-text-primary)', lineHeight: 1.35 }}>{label}</div>}\n {sublabel && <div style={{ fontSize: textSize - 1, color: 'var(--color-text-muted)', marginTop: 1, lineHeight: 1.3 }}>{sublabel}</div>}\n </div>\n )}\n </div>\n );\n}\n\n// ─── StageSpin ────────────────────────────────────────────────────────────────\n\nexport function StageSpin({ label, sublabel, color, size = 20, textSize = 12, className = '' }: StageViewBaseProps) {\n const c = color ?? 'var(--color-stage-spin)';\n const r = size / 2 - 2;\n const cx = size / 2;\n const cy = size / 2;\n const strokeW = size <= 16 ? 1.5 : 2;\n const circumference = 2 * Math.PI * r;\n\n return (\n <div className={className} style={{ display: 'flex', alignItems: 'flex-start', gap: 8 }}>\n <svg\n width={size}\n height={size}\n viewBox={`0 0 ${size} ${size}`}\n fill=\"none\"\n style={{ flexShrink: 0, marginTop: 1, animation: 'dui_stage-spin 0.9s linear infinite', transformOrigin: 'center' }}\n >\n {/* Track */}\n <circle cx={cx} cy={cy} r={r} stroke={`color-mix(in srgb, ${c} 20%, transparent)`} strokeWidth={strokeW} />\n {/* Arc — 270° visible */}\n <circle\n cx={cx} cy={cy} r={r}\n stroke={c}\n strokeWidth={strokeW}\n strokeDasharray={`${circumference * 0.75} ${circumference * 0.25}`}\n strokeLinecap=\"round\"\n style={{ transformOrigin: 'center' }}\n />\n </svg>\n {(label || sublabel) && (\n <div>\n {label && <div style={{ fontSize: textSize, fontWeight: 500, color: 'var(--color-text-primary)', lineHeight: 1.35 }}>{label}</div>}\n {sublabel && <div style={{ fontSize: textSize - 1, color: 'var(--color-text-muted)', marginTop: 1, lineHeight: 1.3 }}>{sublabel}</div>}\n </div>\n )}\n </div>\n );\n}\n\n// ─── StagePulse ───────────────────────────────────────────────────────────────\n\nexport function StagePulse({ label, sublabel, color, size = 20, textSize = 12, className = '' }: StageViewBaseProps) {\n const c = color ?? 'var(--color-stage-pulse)';\n const cx = size / 2;\n const cy = size / 2;\n const dotR = size / 2 - 6;\n const ringR = size / 2 - 2;\n const strokeW = size <= 16 ? 1.5 : 2;\n\n return (\n <div className={className} style={{ display: 'flex', alignItems: 'flex-start', gap: 8 }}>\n <svg width={size} height={size} viewBox={`0 0 ${size} ${size}`} fill=\"none\" style={{ flexShrink: 0, marginTop: 1, overflow: 'visible' }}>\n {/* Outer ring — pulses */}\n <circle\n cx={cx} cy={cy} r={ringR}\n stroke={c}\n strokeWidth={strokeW}\n fill=\"none\"\n opacity={0.25}\n style={{ animation: 'dui_stage-pulse-ring 1.6s ease-out infinite' }}\n />\n {/* Inner dot */}\n <circle\n cx={cx} cy={cy} r={dotR}\n fill={c}\n style={{ animation: 'dui_stage-pulse-dot 1.6s ease-out infinite' }}\n />\n </svg>\n {(label || sublabel) && (\n <div>\n {label && <div style={{ fontSize: textSize, fontWeight: 500, color: 'var(--color-text-muted)', lineHeight: 1.35 }}>{label}</div>}\n {sublabel && <div style={{ fontSize: textSize - 1, color: 'var(--color-text-muted)', marginTop: 1, lineHeight: 1.3 }}>{sublabel}</div>}\n </div>\n )}\n </div>\n );\n}\n","import type { CSSProperties } from 'react';\n\nexport interface YamlKeyChipProps {\n /** The YAML key name, e.g. \"brand.primary\" or \"component_button.primary_bg\" */\n yamlKey: string;\n /** Accent color for the badge (CSS var or raw). Defaults to --color-primary. */\n color?: string;\n onClick?: () => void;\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * Monospace badge showing a YAML theme key name.\n * Used in LiveColorCustomizer to let users know which YAML key controls each color.\n */\nexport function YamlKeyChip({\n yamlKey,\n color,\n onClick,\n className = '',\n style,\n}: YamlKeyChipProps) {\n const accent = color || 'var(--color-primary)';\n return (\n <span\n className={`${onClick ? 'cursor-pointer' : ''} select-none ${className}`}\n onClick={onClick}\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n height: '16px',\n padding: '0 6px',\n borderRadius: '4px',\n fontSize: '10px',\n fontFamily: 'monospace',\n fontWeight: 600,\n letterSpacing: '0.01em',\n color: accent,\n background: `color-mix(in srgb, ${accent} 10%, transparent)`,\n border: `1px solid color-mix(in srgb, ${accent} 22%, transparent)`,\n lineHeight: 1,\n whiteSpace: 'nowrap',\n transition: 'background 100ms',\n ...style,\n }}\n >\n {yamlKey}\n </span>\n );\n}\n","import { useState, useEffect, useCallback } from 'react';\nimport { PaletteIcon, RefreshIcon } from '../../../icons';\nimport { YamlKeyChip } from './YamlKeyChip';\nimport './LiveColorCustomizer.css';\n\nexport interface LiveColorVar {\n /** CSS custom property name, e.g. \"--color-primary\" */\n cssVar: string;\n /** YAML theme key, e.g. \"brand.primary\" */\n yamlKey: string;\n /** Human-readable label shown above the swatch */\n label?: string;\n}\n\nexport interface LiveColorCustomizerProps {\n vars: LiveColorVar[];\n title?: string;\n /** When true the grid is always visible; the toggle button is hidden (used when embedded in LivePlayground). */\n forceOpen?: boolean;\n /**\n * When provided, color changes call this instead of document.documentElement.setProperty.\n * Use this to scope changes to a specific container (e.g. the live preview pane).\n * value=null means the override is being reset/removed.\n */\n onVarChange?: (cssVar: string, value: string | null) => void;\n}\n\nfunction readCssVar(name: string): string {\n const raw = getComputedStyle(document.documentElement).getPropertyValue(name).trim();\n return raw || 'transparent';\n}\n\nfunction cssToHex(value: string): string {\n if (!value || value === 'transparent') return '#888888';\n // Already hex\n if (value.startsWith('#')) return value.slice(0, 7);\n // Try parsing via canvas\n try {\n const canvas = document.createElement('canvas');\n canvas.width = canvas.height = 1;\n const ctx = canvas.getContext('2d');\n if (!ctx) return '#888888';\n ctx.fillStyle = value;\n ctx.fillRect(0, 0, 1, 1);\n const [r, g, b] = ctx.getImageData(0, 0, 1, 1).data;\n return `#${r.toString(16).padStart(2, '0')}${g.toString(16).padStart(2, '0')}${b.toString(16).padStart(2, '0')}`;\n } catch {\n return '#888888';\n }\n}\n\nexport function LiveColorCustomizer({ vars, title, forceOpen = false, onVarChange }: LiveColorCustomizerProps) {\n const [open, setOpen] = useState(false);\n const [hexValues, setHexValues] = useState<Record<string, string>>({});\n const [overridden, setOverridden] = useState<Set<string>>(new Set());\n\n const isOpen = forceOpen || open;\n\n const refresh = useCallback(() => {\n const next: Record<string, string> = {};\n for (const v of vars) next[v.cssVar] = cssToHex(readCssVar(v.cssVar));\n setHexValues(next);\n }, [vars]);\n\n useEffect(() => {\n if (open || forceOpen) refresh();\n }, [open, forceOpen, refresh]);\n\n const handleChange = (cssVar: string, hex: string) => {\n if (onVarChange) {\n onVarChange(cssVar, hex);\n } else {\n document.documentElement.style.setProperty(cssVar, hex);\n }\n setHexValues(prev => ({ ...prev, [cssVar]: hex }));\n setOverridden(prev => new Set(prev).add(cssVar));\n };\n\n const handleReset = (cssVar: string) => {\n if (onVarChange) {\n onVarChange(cssVar, null);\n } else {\n document.documentElement.style.removeProperty(cssVar);\n }\n setOverridden(prev => { const n = new Set(prev); n.delete(cssVar); return n; });\n setTimeout(() => {\n setHexValues(prev => ({ ...prev, [cssVar]: cssToHex(readCssVar(cssVar)) }));\n }, 20);\n };\n\n const resetAll = () => {\n for (const v of vars) {\n if (onVarChange) {\n onVarChange(v.cssVar, null);\n } else {\n document.documentElement.style.removeProperty(v.cssVar);\n }\n }\n setOverridden(new Set());\n setTimeout(refresh, 20);\n };\n\n const hasAnyOverride = overridden.size > 0;\n\n return (\n <div style={{ marginBottom: (open && !forceOpen) ? 12 : 0 }}>\n {/* Trigger row — hidden when forceOpen (parent owns the toggle) */}\n {!forceOpen && (\n <div style={{ display: 'flex', alignItems: 'center', gap: 6, marginBottom: open ? 10 : 0 }}>\n <button\n type=\"button\"\n onClick={() => setOpen(v => !v)}\n style={{\n display: 'flex', alignItems: 'center', gap: 5,\n padding: '3px 8px', borderRadius: 5,\n background: open\n ? 'color-mix(in srgb, var(--color-primary) 12%, transparent)'\n : 'var(--color-surface)',\n border: `1px solid ${open ? 'color-mix(in srgb, var(--color-primary) 30%, transparent)' : 'var(--color-surface-border)'}`,\n color: open ? 'var(--color-primary)' : 'var(--color-text-muted)',\n cursor: 'pointer', fontSize: '11px', fontWeight: 500, fontFamily: 'inherit',\n transition: 'all 120ms',\n }}\n >\n <PaletteIcon size={12} />\n {title ?? 'Customize colors'}\n </button>\n {hasAnyOverride && (\n <button\n type=\"button\"\n onClick={resetAll}\n style={{\n display: 'flex', alignItems: 'center', gap: 4,\n padding: '3px 7px', borderRadius: 5, fontSize: '10px', fontWeight: 500,\n background: 'transparent', border: '1px solid var(--color-surface-border)',\n color: 'var(--color-text-muted)', cursor: 'pointer', fontFamily: 'inherit',\n transition: 'color 100ms',\n }}\n className=\"dui_live-color__reset-btn\"\n title=\"Reset all colors to theme defaults\"\n >\n <RefreshIcon size={10} />\n Reset all\n </button>\n )}\n </div>\n )}\n\n {/* Expanded panel */}\n {isOpen && (\n <div style={{\n display: 'flex', flexWrap: 'wrap', gap: 8,\n padding: '10px 12px',\n borderRadius: 8,\n border: '1px solid var(--color-surface-border)',\n background: 'var(--color-panel)',\n }}>\n {/* Reset all row inside grid — only when forceOpen */}\n {forceOpen && hasAnyOverride && (\n <div style={{ width: '100%', display: 'flex', justifyContent: 'flex-end', marginBottom: 2 }}>\n <button\n type=\"button\"\n onClick={resetAll}\n style={{\n display: 'flex', alignItems: 'center', gap: 4,\n padding: '3px 7px', borderRadius: 5, fontSize: '10px', fontWeight: 500,\n background: 'transparent', border: '1px solid var(--color-surface-border)',\n color: 'var(--color-text-muted)', cursor: 'pointer', fontFamily: 'inherit',\n transition: 'color 100ms',\n }}\n onMouseEnter={e => (e.currentTarget.style.color = 'var(--color-error)')}\n onMouseLeave={e => (e.currentTarget.style.color = 'var(--color-text-muted)')}\n title=\"Reset all colors to theme defaults\"\n >\n <RefreshIcon size={10} />\n Reset all\n </button>\n </div>\n )}\n {vars.map(v => {\n const hex = hexValues[v.cssVar] ?? '#888888';\n const isDirty = overridden.has(v.cssVar);\n return (\n <div\n key={v.cssVar}\n style={{\n display: 'flex', flexDirection: 'column', gap: 4,\n padding: '6px 8px', borderRadius: 6,\n border: `1px solid ${isDirty ? 'color-mix(in srgb, var(--color-primary) 30%, transparent)' : 'var(--color-surface-border)'}`,\n background: isDirty\n ? 'color-mix(in srgb, var(--color-primary) 4%, transparent)'\n : 'var(--color-surface)',\n minWidth: 110,\n }}\n >\n {/* Label */}\n <span style={{ fontSize: '10px', color: 'var(--color-text-muted)', fontWeight: 500, whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }}>\n {v.label ?? v.cssVar.replace('--color-', '')}\n </span>\n\n {/* Swatch row */}\n <div style={{ display: 'flex', alignItems: 'center', gap: 5 }}>\n {/* Color swatch — input overlaid so clicking the visible swatch opens the native picker */}\n <div style={{ position: 'relative', width: 22, height: 22, flexShrink: 0 }}>\n <div style={{\n width: 22, height: 22, borderRadius: 4,\n background: hex,\n border: '1.5px solid color-mix(in srgb, var(--color-text-primary) 15%, transparent)',\n boxShadow: isDirty ? '0 0 0 2px color-mix(in srgb, var(--color-primary) 30%, transparent)' : 'none',\n }} />\n <input\n type=\"color\"\n value={hex}\n onChange={e => handleChange(v.cssVar, e.target.value)}\n style={{\n position: 'absolute', inset: 0,\n opacity: 0, cursor: 'pointer', border: 'none', padding: 0,\n width: '100%', height: '100%',\n }}\n title={`Pick color for ${v.label ?? v.cssVar}`}\n />\n </div>\n\n {/* CSS var name */}\n <span style={{\n fontSize: '9px', fontFamily: 'monospace', color: 'var(--color-text-muted)',\n overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', flex: 1, minWidth: 0,\n }}>\n {v.cssVar}\n </span>\n\n {/* Reset individual */}\n {isDirty && (\n <button\n type=\"button\"\n onClick={() => handleReset(v.cssVar)}\n style={{\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n width: 16, height: 16, borderRadius: 3, border: 'none', flexShrink: 0,\n background: 'transparent', cursor: 'pointer',\n color: 'var(--color-text-muted)', transition: 'color 100ms',\n }}\n className=\"dui_live-color__reset-btn\"\n title=\"Reset to theme default\"\n >\n <RefreshIcon size={10} />\n </button>\n )}\n </div>\n\n {/* YAML key chip */}\n <YamlKeyChip yamlKey={v.yamlKey} />\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n}\n","import type { ReactNode, InputHTMLAttributes, CSSProperties } from 'react';\nimport type { DuiSize } from '../../core/DuiTypes';\nimport { useInputBase } from '../../core/InputBase';\n\nexport interface SearchInputViewProps extends Omit<InputHTMLAttributes<HTMLInputElement>, 'onChange' | 'prefix' | 'size'> {\n value: string;\n onChange: (value: string) => void;\n /** Node shown left inside the bar (e.g. SearchIcon) */\n prefix?: ReactNode;\n /** Node shown right inside the bar (e.g. clear button) */\n suffix?: ReactNode;\n /** Falls back to DuiProvider size when omitted. */\n size?: DuiSize;\n /** Raw height override in px — prefer `size` for token-aligned sizing. */\n height?: number;\n style?: CSSProperties;\n className?: string;\n}\n\nexport function SearchInputView({\n value,\n onChange,\n prefix,\n suffix,\n placeholder,\n size,\n height,\n style,\n className = '',\n ...rest\n}: SearchInputViewProps) {\n const base = useInputBase(size);\n const resolvedHeight = height ?? parseInt(base.height, 10);\n return (\n <div\n className={className}\n style={{\n height: resolvedHeight,\n display: 'flex',\n alignItems: 'center',\n gap: 6,\n flex: 1,\n borderRadius: base.borderRadius,\n border: '1px solid var(--color-input-border)',\n background: 'var(--color-input-bg)',\n paddingLeft: 8,\n paddingRight: suffix ? 4 : 8,\n transition: 'border-color 120ms',\n ...style,\n }}\n >\n {prefix && (\n <span style={{ display: 'flex', alignItems: 'center', flexShrink: 0, color: 'var(--color-text-muted)' }}>\n {prefix}\n </span>\n )}\n <input\n type=\"text\"\n value={value}\n onChange={e => onChange(e.target.value)}\n placeholder={placeholder}\n style={{\n flex: 1,\n minWidth: 0,\n background: 'transparent',\n border: 'none',\n outline: 'none',\n fontSize: base.fontSize,\n color: 'var(--color-text-primary)',\n fontFamily: 'inherit',\n }}\n {...rest}\n />\n {suffix && (\n <span style={{ display: 'flex', alignItems: 'center', flexShrink: 0, color: 'var(--color-text-muted)' }}>\n {suffix}\n </span>\n )}\n </div>\n );\n}\n","import { useState, useCallback, useRef, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport type { DuiSize } from '../../core/DuiTypes';\nimport { useInputBase } from '../../core/InputBase';\nimport './DurationInputView.css';\n\nexport type DurationUnit = 'ms' | 's' | 'm' | 'hr';\n\nconst UNIT_OPTIONS: { value: DurationUnit; label: string; color: string }[] = [\n { value: 'ms', label: 'ms', color: 'var(--color-warning)' },\n { value: 's', label: 's', color: 'var(--color-success)' },\n { value: 'm', label: 'm', color: 'var(--color-info)' },\n { value: 'hr', label: 'hr', color: 'var(--color-error)' },\n];\n\nconst UNIT_TO_MS: Record<DurationUnit, number> = { ms: 1, s: 1000, m: 60000, hr: 3600000 };\n\nexport interface DurationInputViewProps {\n /** Current value in milliseconds */\n value: number;\n /** Called with new value in milliseconds */\n onChange: (ms: number) => void;\n placeholder?: string;\n accentColor?: string;\n /** Falls back to DuiProvider size when omitted. */\n size?: DuiSize;\n width?: number;\n className?: string;\n}\n\nexport function DurationInputView({\n value,\n onChange,\n placeholder = '0',\n size,\n width = 110,\n className = '',\n}: DurationInputViewProps) {\n const base = useInputBase(size);\n const [unit, setUnit] = useState<DurationUnit>(() => {\n if (value === 0) return 'ms';\n if (value >= 3600000 && value % 3600000 === 0) return 'hr';\n if (value >= 60000 && value % 60000 === 0) return 'm';\n if (value >= 1000 && value % 1000 === 0) return 's';\n return 'ms';\n });\n const [showPopup, setShowPopup] = useState(false);\n const [popupPos, setPopupPos] = useState({ top: 0, left: 0 });\n const popupRef = useRef<HTMLDivElement>(null);\n const btnRef = useRef<HTMLButtonElement>(null);\n\n const displayValue = value === 0 ? '' : String(Math.round(value / UNIT_TO_MS[unit]));\n\n const handleValueChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n const raw = e.target.value;\n if (raw === '' || raw === '0') { onChange(0); return; }\n const num = parseInt(raw, 10);\n if (!isNaN(num) && num >= 0) onChange(num * UNIT_TO_MS[unit]);\n }, [onChange, unit]);\n\n const openPopup = () => {\n if (!btnRef.current) return;\n const rect = btnRef.current.getBoundingClientRect();\n setPopupPos({ top: rect.bottom + 4, left: rect.right });\n setShowPopup(v => !v);\n };\n\n const handleUnitChange = (u: DurationUnit) => { setUnit(u); setShowPopup(false); };\n\n useEffect(() => {\n if (!showPopup) return;\n const close = (e: MouseEvent) => {\n if (!popupRef.current?.contains(e.target as Node) && !btnRef.current?.contains(e.target as Node)) {\n setShowPopup(false);\n }\n };\n const onScroll = () => setShowPopup(false);\n document.addEventListener('mousedown', close);\n document.addEventListener('scroll', onScroll, true);\n return () => {\n document.removeEventListener('mousedown', close);\n document.removeEventListener('scroll', onScroll, true);\n };\n }, [showPopup]);\n\n const unitColor = UNIT_OPTIONS.find(o => o.value === unit)?.color ?? 'var(--color-warning)';\n\n const popup = showPopup && createPortal(\n <div\n ref={popupRef}\n style={{\n position: 'fixed',\n top: popupPos.top,\n left: popupPos.left,\n transform: 'translateX(-100%)',\n zIndex: 99999,\n minWidth: 60,\n borderRadius: 6,\n border: '1px solid var(--color-surface-border)',\n background: 'var(--color-elevated)',\n boxShadow: '0 8px 24px rgba(0,0,0,0.45)',\n overflow: 'hidden',\n }}\n >\n {UNIT_OPTIONS.map(opt => (\n <button\n key={opt.value}\n type=\"button\"\n onClick={() => handleUnitChange(opt.value)}\n className={`dui_duration__unit-option${unit === opt.value ? ' dui_duration__unit-option--selected' : ''}`}\n style={{\n display: 'block', width: '100%', textAlign: 'right',\n padding: '6px 12px', fontSize: 11, cursor: 'pointer',\n background: unit === opt.value ? 'var(--color-dur-segment-selected)' : 'transparent',\n border: 'none', color: opt.color, fontWeight: 600,\n fontFamily: 'inherit',\n }}\n >\n {opt.label}\n </button>\n ))}\n </div>,\n document.body\n );\n\n return (\n <div className={className} style={{ position: 'relative', display: 'inline-flex', alignItems: 'center' }}>\n <input\n type=\"number\"\n min=\"0\"\n value={displayValue}\n onChange={handleValueChange}\n placeholder={placeholder}\n style={{\n width,\n height: parseInt(base.height, 10),\n paddingLeft: 10,\n paddingRight: 40,\n fontSize: base.fontSize,\n fontFamily: 'monospace',\n borderRadius: base.borderRadius,\n border: '1px solid var(--color-input-border)',\n background: 'var(--color-input-bg)',\n color: 'var(--color-text-primary)',\n outline: 'none',\n MozAppearance: 'textfield',\n }}\n />\n <button\n ref={btnRef}\n type=\"button\"\n onClick={openPopup}\n style={{\n position: 'absolute', right: 6,\n fontSize: 11, fontWeight: 600,\n cursor: 'pointer', padding: '2px 4px', borderRadius: 3,\n background: 'transparent', border: 'none', color: unitColor,\n transition: 'opacity 100ms',\n }}\n >\n {unit}\n </button>\n\n {popup}\n </div>\n );\n}\n","import { useState, useRef, useEffect, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\nimport { ChevronDownIcon } from '../../../icons';\nimport type { DuiSize } from '../../core/DuiTypes';\nimport { useButtonBase } from '../../core/ButtonBase';\nimport './SplitButtonView.css';\n\nexport interface SplitButtonViewItem {\n id: string;\n label: string;\n icon?: React.ReactNode;\n iconColor?: string;\n shortcut?: string;\n dividerBefore?: boolean;\n onClick: () => void;\n}\n\nexport type SplitButtonViewVariant = 'primary' | 'secondary' | 'danger';\n\nexport interface SplitButtonViewProps {\n label: string;\n icon?: React.ReactNode;\n variant?: SplitButtonViewVariant;\n items: SplitButtonViewItem[];\n onClick: () => void;\n disabled?: boolean;\n /** Falls back to DuiProvider size when omitted. */\n size?: DuiSize;\n accentColor?: string;\n}\n\nexport function SplitButtonView({\n label,\n icon,\n variant = 'primary',\n items,\n onClick,\n disabled = false,\n size = 'md',\n accentColor,\n}: SplitButtonViewProps) {\n const [open, setOpen] = useState(false);\n const [focusIdx, setFocusIdx] = useState(-1);\n const btnRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const [menuPos, setMenuPos] = useState({ top: 0, left: 0, minWidth: 0 });\n\n const base = useButtonBase(size);\n const bg = accentColor\n ? accentColor\n : variant === 'danger'\n ? 'var(--color-error)'\n : variant === 'primary'\n ? 'var(--color-primary)'\n : 'var(--color-surface-hover)';\n\n const textColor = variant === 'secondary' ? 'var(--color-text-primary)' : variant === 'danger' ? 'var(--color-btn-danger-text, #fff)' : 'var(--color-btn-primary-text, #fff)';\n const h = parseInt(base.height, 10);\n const fs = base.fontSize;\n const dividerBg = variant === 'secondary' ? 'var(--color-surface-border)' : 'rgba(255,255,255,0.22)';\n\n useEffect(() => {\n if (!open) return;\n const handler = (e: MouseEvent) => {\n if (btnRef.current?.contains(e.target as Node)) return;\n if (menuRef.current?.contains(e.target as Node)) return;\n setOpen(false);\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [open]);\n\n useEffect(() => {\n if (!open) return;\n const handler = (e: KeyboardEvent) => {\n if (e.key === 'Escape') { setOpen(false); setFocusIdx(-1); }\n };\n document.addEventListener('keydown', handler);\n return () => document.removeEventListener('keydown', handler);\n }, [open]);\n\n useEffect(() => {\n if (!open || !btnRef.current) return;\n const rect = btnRef.current.getBoundingClientRect();\n const goUp = window.innerHeight - rect.bottom < 200 && rect.top > 200;\n setMenuPos({ top: goUp ? rect.top - 200 : rect.bottom + 4, left: rect.left, minWidth: rect.width });\n }, [open]);\n\n const handleItem = useCallback((item: SplitButtonViewItem) => {\n item.onClick(); setOpen(false); setFocusIdx(-1);\n }, []);\n\n const handleMenuKey = (e: React.KeyboardEvent) => {\n switch (e.key) {\n case 'ArrowDown': e.preventDefault(); setFocusIdx(i => (i + 1) % items.length); break;\n case 'ArrowUp': e.preventDefault(); setFocusIdx(i => (i - 1 + items.length) % items.length); break;\n case 'Enter': case ' ':\n e.preventDefault();\n if (focusIdx >= 0) handleItem(items[focusIdx]);\n break;\n case 'Escape': setOpen(false); setFocusIdx(-1); break;\n }\n };\n\n return (\n <>\n <div\n ref={btnRef}\n style={{\n display: 'inline-flex', alignItems: 'center', height: h,\n borderRadius: 6, overflow: 'hidden',\n background: bg, opacity: disabled ? 0.5 : 1,\n border: variant === 'secondary' ? '1px solid var(--color-surface-border)' : 'none',\n pointerEvents: disabled ? 'none' : 'auto',\n userSelect: 'none', cursor: 'pointer',\n // Hover overlay color inherited by inner buttons via CSS var\n '--dui-split-hover-bg': variant === 'secondary' ? 'var(--color-surface-active)' : 'rgba(0,0,0,0.1)',\n } as React.CSSProperties}\n >\n <button\n type=\"button\"\n onClick={onClick}\n className=\"dui_split-button__main\"\n style={{\n display: 'flex', alignItems: 'center', gap: 6,\n height: '100%', padding: '0 16px',\n fontSize: fs, fontWeight: 500, cursor: 'pointer',\n border: 'none',\n color: textColor, fontFamily: 'inherit',\n }}\n >\n {icon && <span style={{ display: 'flex', alignItems: 'center' }}>{icon}</span>}\n {label}\n </button>\n\n <div style={{ width: 1, height: '60%', background: dividerBg }} />\n\n <button\n type=\"button\"\n onClick={() => setOpen(v => !v)}\n className=\"dui_split-button__chevron\"\n style={{\n display: 'flex', alignItems: 'center', justifyContent: 'center',\n height: '100%', padding: '0 8px',\n cursor: 'pointer', border: 'none',\n color: textColor,\n }}\n aria-haspopup=\"true\"\n aria-expanded={open}\n >\n <ChevronDownIcon size={10} />\n </button>\n </div>\n\n {open && createPortal(\n <div\n ref={menuRef}\n style={{\n position: 'fixed', zIndex: 9999,\n top: menuPos.top, left: menuPos.left, minWidth: menuPos.minWidth,\n borderRadius: 8, border: '1px solid var(--color-elevated-border)',\n background: 'var(--color-elevated)',\n boxShadow: '0 8px 32px rgba(0,0,0,0.4)',\n overflow: 'hidden',\n }}\n onKeyDown={handleMenuKey}\n tabIndex={-1}\n >\n {items.map((item, idx) => (\n <div key={item.id}>\n {item.dividerBefore && <div style={{ height: 1, background: 'var(--color-surface-border)' }} />}\n <button\n type=\"button\"\n onClick={() => handleItem(item)}\n className=\"dui_split-button__menu-item\"\n style={{\n width: '100%', display: 'flex', alignItems: 'center', gap: 10,\n padding: '9px 14px', fontSize: 12, textAlign: 'left',\n cursor: 'pointer', border: 'none', fontFamily: 'inherit',\n background: idx === focusIdx ? 'var(--color-item-hover-bg)' : 'transparent',\n color: 'var(--color-text-primary)',\n }}\n >\n {item.icon && (\n <span style={{ display: 'flex', alignItems: 'center', width: 16, color: item.iconColor || 'var(--color-text-muted)' }}>{item.icon}</span>\n )}\n <span style={{ flex: 1 }}>{item.label}</span>\n {item.shortcut && (\n <span style={{ fontSize: 10, color: 'var(--color-text-muted)', background: 'var(--color-input-bg)', border: '1px solid var(--color-input-border)', borderRadius: 3, padding: '1px 5px', fontFamily: 'monospace' }}>\n {item.shortcut}\n </span>\n )}\n </button>\n </div>\n ))}\n </div>,\n document.body\n )}\n </>\n );\n}\n","import { useRef, useEffect, useState, useMemo, useCallback } from 'react';\nimport { createPortal } from 'react-dom';\nimport { SearchIcon, ServerIcon } from '../../../icons';\nimport type { DuiSize } from '../../core/DuiTypes';\nimport { useInputBase } from '../../core/InputBase';\nimport './HighlightedInputView.css';\n\nexport interface MockServerSuggestion {\n url: string;\n name: string;\n}\n\nexport interface HighlightedInputViewProps {\n value: string;\n onChange: (value: string) => void;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n onBlur?: () => void;\n placeholder?: string;\n suggestions?: string[];\n /** Running mock server URLs — shown at the top with a server icon */\n mockServers?: MockServerSuggestion[];\n disabled?: boolean;\n accentColor?: string;\n /** Falls back to DuiProvider size when omitted. */\n size?: DuiSize;\n /** Raw height override in px — prefer `size` for token-aligned sizing. */\n height?: number;\n /** Border radius of the input in px (default 0 — matches URL bar; set 6 for standalone rounded usage) */\n borderRadius?: number;\n style?: React.CSSProperties;\n className?: string;\n}\n\nconst TOKEN_RE = /(\\{\\{[\\w.\\-]+\\}\\}|\\$\\{[\\w.\\-]+\\})/g;\nconst ESCAPE_RE = /(\\$daakia_\\{[\\w.\\-]+\\}_\\$)/g;\n\nfunction buildHTML(text: string): string {\n return text\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(ESCAPE_RE, '<span class=\"dui_highlighted-input__token--escape\">$1</span>')\n .replace(TOKEN_RE, '<span class=\"dui_highlighted-input__token\">$1</span>');\n}\n\nfunction getCaretOffset(el: HTMLElement): number {\n const sel = window.getSelection();\n if (!sel || sel.rangeCount === 0) return 0;\n const range = sel.getRangeAt(0);\n const pre = range.cloneRange();\n pre.selectNodeContents(el);\n pre.setEnd(range.endContainer, range.endOffset);\n return pre.toString().length;\n}\n\nfunction setCaretOffset(el: HTMLElement, offset: number): void {\n const sel = window.getSelection();\n if (!sel) return;\n const range = document.createRange();\n let remaining = offset;\n const walk = (node: Node): boolean => {\n if (node.nodeType === Node.TEXT_NODE) {\n const len = node.textContent?.length ?? 0;\n if (remaining <= len) { range.setStart(node, remaining); range.collapse(true); return true; }\n remaining -= len;\n return false;\n }\n for (const child of Array.from(node.childNodes)) { if (walk(child)) return true; }\n return false;\n };\n if (!walk(el)) { range.selectNodeContents(el); range.collapse(false); }\n sel.removeAllRanges();\n sel.addRange(range);\n}\n\nexport function HighlightedInputView({\n value,\n onChange,\n onKeyDown,\n onBlur,\n placeholder,\n suggestions = [],\n mockServers = [],\n disabled,\n accentColor,\n size,\n height,\n borderRadius = 0,\n style,\n className = '',\n}: HighlightedInputViewProps) {\n const base = useInputBase(size);\n const resolvedHeight = height ?? parseInt(base.height, 10);\n const editorRef = useRef<HTMLDivElement>(null);\n const composing = useRef(false);\n const lastValue = useRef<string | null>(null);\n const [focused, setFocused] = useState(false);\n const [selectedIdx, setSelectedIdx] = useState(0);\n const [dropPos, setDropPos] = useState({ top: 0, left: 0, width: 0 });\n\n const accent = accentColor || 'var(--color-primary)';\n\n // Populate on mount\n useEffect(() => {\n const el = editorRef.current;\n if (!el) return;\n el.innerHTML = buildHTML(value);\n lastValue.current = value;\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n // Sync when value is changed externally by parent\n useEffect(() => {\n const el = editorRef.current;\n if (!el || lastValue.current === value) return;\n lastValue.current = value;\n const isFocused = document.activeElement === el;\n const offset = isFocused ? getCaretOffset(el) : -1;\n el.innerHTML = buildHTML(value);\n if (isFocused && offset >= 0) setCaretOffset(el, offset);\n }, [value]);\n\n const filtered = useMemo(() => {\n if (!focused) return [];\n const lower = value.toLowerCase().trim();\n if (!lower) return [];\n return suggestions.filter(s => s.toLowerCase().includes(lower) && s !== value).slice(0, 8);\n }, [value, focused, suggestions]);\n\n const filteredMockServers = useMemo(() => {\n if (!focused || !mockServers.length) return [];\n const lower = value.toLowerCase().trim();\n if (!lower) return mockServers.slice(0, 8);\n return mockServers.filter(s => s.url.toLowerCase().includes(lower) || s.name.toLowerCase().includes(lower)).slice(0, 8);\n }, [value, focused, mockServers]);\n\n useEffect(() => { setSelectedIdx(0); }, [filtered.length, filteredMockServers.length, value]);\n\n useEffect(() => {\n if ((filtered.length === 0 && filteredMockServers.length === 0) || !editorRef.current) return;\n const r = editorRef.current.getBoundingClientRect();\n setDropPos({ top: r.bottom + 4, left: r.left, width: r.width });\n }, [filtered.length, filteredMockServers.length, focused]);\n\n const handleSelect = (url: string) => {\n const el = editorRef.current;\n if (el) {\n el.innerHTML = buildHTML(url);\n const range = document.createRange();\n range.selectNodeContents(el);\n range.collapse(false);\n window.getSelection()?.removeAllRanges();\n window.getSelection()?.addRange(range);\n }\n lastValue.current = url;\n onChange(url);\n setFocused(false);\n editorRef.current?.focus();\n };\n\n const handleInput = useCallback(() => {\n if (composing.current) return;\n const el = editorRef.current;\n if (!el) return;\n const text = el.innerText.replace(/\\n/g, '');\n const offset = getCaretOffset(el);\n el.innerHTML = buildHTML(text);\n setCaretOffset(el, offset);\n lastValue.current = text;\n onChange(text);\n }, [onChange]);\n\n const allDropItems = useMemo(() => [\n ...filteredMockServers.map(s => s.url),\n ...filtered,\n ], [filteredMockServers, filtered]);\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === 'Enter') e.preventDefault();\n if (allDropItems.length > 0) {\n if (e.key === 'ArrowDown') { e.preventDefault(); setSelectedIdx(i => (i + 1) % allDropItems.length); return; }\n if (e.key === 'ArrowUp') { e.preventDefault(); setSelectedIdx(i => (i - 1 + allDropItems.length) % allDropItems.length); return; }\n if (e.key === 'Enter' && allDropItems[selectedIdx] !== value) { e.preventDefault(); handleSelect(allDropItems[selectedIdx]); return; }\n if (e.key === 'Escape') { setFocused(false); return; }\n }\n onKeyDown?.(e);\n };\n\n const handlePaste = (e: React.ClipboardEvent) => {\n e.preventDefault();\n const text = e.clipboardData.getData('text/plain');\n document.execCommand('insertText', false, text);\n };\n\n const showDrop = focused && (filtered.length > 0 || filteredMockServers.length > 0);\n\n return (\n <div className={`dui_highlighted-input ${className}`} style={style}>\n {!value && placeholder && (\n <span className=\"dui_highlighted-input__placeholder\" style={{ lineHeight: `${resolvedHeight}px` }}>\n {placeholder}\n </span>\n )}\n <div\n ref={editorRef}\n contentEditable={!disabled}\n suppressContentEditableWarning\n spellCheck={false}\n onInput={handleInput}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n onFocus={() => setFocused(true)}\n onBlur={() => { setTimeout(() => setFocused(false), 150); onBlur?.(); }}\n onCompositionStart={() => { composing.current = true; }}\n onCompositionEnd={() => { composing.current = false; handleInput(); }}\n className={`dui_highlighted-input__editor${disabled ? ' opacity-60' : ''}`}\n style={{ height: resolvedHeight, lineHeight: `${resolvedHeight}px`, borderRadius, borderColor: focused ? accent : undefined }}\n />\n {showDrop && createPortal(\n <div\n style={{\n position: 'fixed', zIndex: 9999,\n top: dropPos.top, left: dropPos.left, width: dropPos.width,\n borderRadius: 8, border: '1px solid var(--color-elevated-border)',\n background: 'var(--color-elevated)',\n boxShadow: '0 8px 32px rgba(0,0,0,0.4)',\n overflow: 'hidden',\n }}\n >\n {/* Mock server suggestions at top */}\n {filteredMockServers.length > 0 && filteredMockServers.map((s, idx) => (\n <button\n key={s.url}\n type=\"button\"\n onMouseDown={e => { e.preventDefault(); handleSelect(s.url); }}\n style={{\n width: '100%', display: 'flex', alignItems: 'center', gap: 10,\n padding: '8px 14px', fontSize: 12.5, textAlign: 'left',\n cursor: 'pointer', border: 'none', fontFamily: 'inherit',\n background: idx === selectedIdx ? 'color-mix(in srgb, var(--color-mock-server) 12%, transparent)' : 'transparent',\n color: 'var(--color-mock-server)',\n transition: 'background 80ms',\n }}\n >\n <ServerIcon size={12} style={{ flexShrink: 0, color: 'var(--color-mock-server)' }} />\n <span style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', fontFamily: 'monospace' }}>{s.url}</span>\n <span style={{ marginLeft: 'auto', fontSize: 10, color: 'var(--color-text-muted)', flexShrink: 0 }}>{s.name}</span>\n </button>\n ))}\n {/* URL history suggestions */}\n {filtered.length > 0 && filtered.map((url, idx) => {\n const globalIdx = filteredMockServers.length + idx;\n return (\n <button\n key={url}\n type=\"button\"\n onMouseDown={e => { e.preventDefault(); handleSelect(url); }}\n style={{\n width: '100%', display: 'flex', alignItems: 'center', gap: 10,\n padding: '8px 14px', fontSize: 12.5, textAlign: 'left',\n cursor: 'pointer', border: 'none', fontFamily: 'inherit',\n background: globalIdx === selectedIdx ? 'var(--color-item-hover-bg)' : 'transparent',\n color: globalIdx === selectedIdx ? 'var(--color-text-primary)' : 'var(--color-text-secondary)',\n transition: 'background 80ms',\n }}\n >\n <SearchIcon size={12} style={{ flexShrink: 0, color: 'var(--color-text-muted)' }} />\n <span style={{ overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>{url}</span>\n </button>\n );\n })}\n </div>,\n document.body\n )}\n </div>\n );\n}\n","import { useEffect, useRef } from 'react';\nimport { createPortal } from 'react-dom';\nimport { WarningTriangleIcon } from '../../../icons';\n\ninterface ConfirmDialogProps {\n title?: string;\n message?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n danger?: boolean;\n onConfirm: () => void;\n onCancel: () => void;\n}\n\nexport function ConfirmDialog({\n title = 'Are you sure?',\n message,\n confirmLabel = 'Delete',\n cancelLabel = 'Cancel',\n danger = true,\n onConfirm,\n onCancel,\n}: ConfirmDialogProps) {\n const confirmRef = useRef<HTMLButtonElement>(null);\n\n useEffect(() => {\n confirmRef.current?.focus();\n function onKey(e: KeyboardEvent) {\n if (e.key === 'Escape') { e.preventDefault(); onCancel(); }\n if (e.key === 'Enter') { e.preventDefault(); onConfirm(); }\n }\n window.addEventListener('keydown', onKey);\n return () => window.removeEventListener('keydown', onKey);\n }, [onConfirm, onCancel]);\n\n return createPortal(\n <div\n className=\"fixed inset-0 z-[99999] flex items-center justify-center bg-[rgba(0,0,0,0.55)] backdrop-blur-[2px]\"\n role=\"presentation\"\n >\n <div\n className=\"bg-[var(--color-panel)] border border-[var(--color-surface-border)] rounded-xl shadow-2xl min-w-[320px] max-w-[420px] p-5 animate-[confirm-in_150ms_ease-out]\"\n onClick={(e) => e.stopPropagation()}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"confirm-title\"\n >\n {/* Header */}\n <div className=\"flex items-center gap-3 mb-3\">\n <div className={`flex items-center justify-center w-8 h-8 rounded-lg ${danger ? 'bg-[color-mix(in_srgb,var(--color-error)_12%,transparent)]' : 'bg-[color-mix(in_srgb,var(--color-primary)_12%,transparent)]'}`}>\n <WarningTriangleIcon\n size={16}\n stroke={danger ? 'var(--color-error)' : 'var(--color-primary)'}\n />\n </div>\n <h3 id=\"confirm-title\" className=\"text-[14px] font-semibold text-[var(--color-text-primary)]\">\n {title}\n </h3>\n </div>\n\n {/* Message */}\n {message && (\n <p className=\"text-[12.5px] text-[var(--color-text-muted)] leading-relaxed mb-5 pl-11\">\n {message}\n </p>\n )}\n\n {/* Actions */}\n <div className=\"flex justify-end gap-2.5\">\n <button\n type=\"button\"\n onClick={onCancel}\n className=\"px-4 py-2 text-[12.5px] font-medium rounded-lg bg-[color-mix(in_srgb,var(--color-error)_8%,transparent)] border border-[color-mix(in_srgb,var(--color-error)_25%,transparent)] text-[var(--color-error)] hover:bg-[color-mix(in_srgb,var(--color-error)_15%,transparent)] cursor-pointer transition-colors\"\n >\n {cancelLabel}\n </button>\n <button\n ref={confirmRef}\n type=\"button\"\n onClick={onConfirm}\n className={`px-4 py-2 text-[12.5px] font-medium rounded-lg cursor-pointer transition-colors ${\n danger\n ? 'bg-[var(--color-error)] text-white hover:bg-[color-mix(in_srgb,var(--color-error)_85%,black)]'\n : 'bg-[var(--color-primary)] text-white hover:opacity-90'\n }`}\n >\n {confirmLabel}\n </button>\n </div>\n </div>\n </div>,\n document.body,\n );\n}\n","/** Common HTTP request headers for autocomplete */\nexport const HTTP_REQUEST_HEADERS = [\n 'Accept',\n 'Accept-Charset',\n 'Accept-Encoding',\n 'Accept-Language',\n 'Accept-Ranges',\n 'Access-Control-Allow-Credentials',\n 'Access-Control-Allow-Headers',\n 'Access-Control-Allow-Methods',\n 'Access-Control-Allow-Origin',\n 'Access-Control-Expose-Headers',\n 'Access-Control-Max-Age',\n 'Access-Control-Request-Headers',\n 'Access-Control-Request-Method',\n 'Age',\n 'Authorization',\n 'Cache-Control',\n 'Connection',\n 'Content-Disposition',\n 'Content-Encoding',\n 'Content-Language',\n 'Content-Length',\n 'Content-Location',\n 'Content-Range',\n 'Content-Security-Policy',\n 'Content-Type',\n 'Cookie',\n 'Cross-Origin-Embedder-Policy',\n 'Cross-Origin-Opener-Policy',\n 'Cross-Origin-Resource-Policy',\n 'Date',\n 'DNT',\n 'ETag',\n 'Expect',\n 'Expires',\n 'Forwarded',\n 'From',\n 'Host',\n 'If-Match',\n 'If-Modified-Since',\n 'If-None-Match',\n 'If-Range',\n 'If-Unmodified-Since',\n 'Keep-Alive',\n 'Last-Modified',\n 'Link',\n 'Location',\n 'Max-Forwards',\n 'Origin',\n 'Permissions-Policy',\n 'Pragma',\n 'Proxy-Authenticate',\n 'Proxy-Authorization',\n 'Range',\n 'Referer',\n 'Referrer-Policy',\n 'Retry-After',\n 'Sec-Fetch-Dest',\n 'Sec-Fetch-Mode',\n 'Sec-Fetch-Site',\n 'Sec-Fetch-User',\n 'Server',\n 'Set-Cookie',\n 'Strict-Transport-Security',\n 'TE',\n 'Trailer',\n 'Transfer-Encoding',\n 'Upgrade',\n 'Upgrade-Insecure-Requests',\n 'User-Agent',\n 'Vary',\n 'Via',\n 'WWW-Authenticate',\n 'Warning',\n 'X-Content-Type-Options',\n 'X-Correlation-ID',\n 'X-Forwarded-For',\n 'X-Forwarded-Host',\n 'X-Forwarded-Proto',\n 'X-Frame-Options',\n 'X-Request-ID',\n 'X-Requested-With',\n 'X-XSS-Protection',\n];\n\n/** Headers whose values should be masked by default */\nexport const SENSITIVE_HEADERS = [\n 'authorization',\n 'proxy-authorization',\n 'cookie',\n 'set-cookie',\n 'x-api-key',\n 'x-auth-token',\n 'x-csrf-token',\n 'x-xsrf-token',\n];\n\n/** Common header value suggestions keyed by lowercase header name */\nexport const HEADER_VALUE_SUGGESTIONS: Record<string, string[]> = {\n 'content-type': [\n 'application/json',\n 'application/xml',\n 'application/x-www-form-urlencoded',\n 'multipart/form-data',\n 'text/plain',\n 'text/html',\n 'text/css',\n 'text/javascript',\n 'application/javascript',\n 'application/pdf',\n 'application/octet-stream',\n 'application/graphql',\n 'application/ld+json',\n 'application/vnd.api+json',\n 'application/x-ndjson',\n 'image/png',\n 'image/jpeg',\n 'image/gif',\n 'image/svg+xml',\n 'image/webp',\n ],\n 'accept': [\n 'application/json',\n 'application/xml',\n 'text/plain',\n 'text/html',\n '*/*',\n 'application/pdf',\n 'image/*',\n 'application/octet-stream',\n 'application/vnd.api+json',\n 'application/ld+json',\n ],\n 'accept-encoding': [\n 'gzip',\n 'deflate',\n 'br',\n 'gzip, deflate',\n 'gzip, deflate, br',\n 'identity',\n '*',\n ],\n 'accept-language': [\n 'en-US',\n 'en-US,en;q=0.9',\n 'en-GB',\n 'fr-FR',\n 'de-DE',\n 'es-ES',\n 'zh-CN',\n 'ja-JP',\n '*',\n ],\n 'cache-control': [\n 'no-cache',\n 'no-store',\n 'max-age=0',\n 'max-age=3600',\n 'max-age=86400',\n 'no-cache, no-store, must-revalidate',\n 'public, max-age=31536000',\n 'private',\n 'must-revalidate',\n ],\n 'connection': [\n 'keep-alive',\n 'close',\n 'upgrade',\n ],\n 'content-encoding': [\n 'gzip',\n 'deflate',\n 'br',\n 'identity',\n ],\n 'authorization': [\n 'Bearer ',\n 'Basic ',\n 'Digest ',\n 'Token ',\n ],\n 'access-control-allow-origin': [\n '*',\n 'null',\n ],\n 'access-control-allow-methods': [\n 'GET, POST, PUT, DELETE, OPTIONS',\n 'GET, POST, OPTIONS',\n '*',\n ],\n 'access-control-allow-headers': [\n 'Content-Type, Authorization',\n 'Content-Type, Authorization, X-Requested-With',\n '*',\n ],\n 'x-content-type-options': [\n 'nosniff',\n ],\n 'x-frame-options': [\n 'DENY',\n 'SAMEORIGIN',\n 'ALLOW-FROM',\n ],\n 'x-xss-protection': [\n '0',\n '1',\n '1; mode=block',\n ],\n 'strict-transport-security': [\n 'max-age=31536000',\n 'max-age=31536000; includeSubDomains',\n 'max-age=31536000; includeSubDomains; preload',\n ],\n 'referrer-policy': [\n 'no-referrer',\n 'no-referrer-when-downgrade',\n 'origin',\n 'origin-when-cross-origin',\n 'same-origin',\n 'strict-origin',\n 'strict-origin-when-cross-origin',\n 'unsafe-url',\n ],\n 'content-disposition': [\n 'inline',\n 'attachment',\n 'attachment; filename=\"file.pdf\"',\n ],\n 'transfer-encoding': [\n 'chunked',\n 'compress',\n 'deflate',\n 'gzip',\n ],\n 'user-agent': [\n 'Daakia/1.0',\n 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',\n 'curl/7.68.0',\n 'PostmanRuntime/7.29.0',\n ],\n};\n","import { useState, useRef, useEffect, useCallback } from 'react';\nimport type { DuiSize } from '../../core/DuiTypes';\nimport { TextInputView } from './TextInputView';\nimport { HTTP_REQUEST_HEADERS, SENSITIVE_HEADERS, HEADER_VALUE_SUGGESTIONS } from '../../../components/shared/controls/http-headers';\nimport { CheckCircleFilledIcon, LockIcon, TrashIcon } from '../../../icons';\n\nexport interface KeyValueTableRowViewProps {\n rowKey: string;\n value: string;\n description?: string;\n /** Enabled state. Pass undefined to hide the toggle (use with readOnly for pinned rows). */\n enabled?: boolean;\n /** Read-only pinned mode: lock icon, dashed border, no editing */\n readOnly?: boolean;\n /** Explicitly mask the value with an eye toggle */\n masked?: boolean;\n /** Auto-mask when rowKey matches SENSITIVE_HEADERS */\n maskSensitive?: boolean;\n /** Show trash icon on hover */\n deletable?: boolean;\n showDescription?: boolean;\n placeholder?: { key?: string; value?: string };\n /** HTTP header key/value autocomplete — editable mode only */\n autocompleteKeys?: boolean;\n size?: DuiSize;\n accentColor?: string;\n onKeyChange?: (val: string) => void;\n onValueChange?: (val: string) => void;\n onDescriptionChange?: (val: string) => void;\n onEnabledChange?: (enabled: boolean) => void;\n onRemove?: () => void;\n}\n\nconst DROP_CLS = 'absolute top-full left-0 z-50 w-full max-h-[200px] overflow-y-auto bg-[var(--color-surface)] border border-[var(--color-surface-border)] rounded-md shadow-lg mt-0.5';\nconst dropItemCls = (active: boolean) =>\n `w-full text-left px-3 py-2 text-[13px] text-[var(--color-text-primary)] cursor-pointer transition-colors ${active ? 'bg-[var(--color-surface-hover)]' : 'hover:bg-[var(--color-surface-hover)]'}`;\n\nexport function KeyValueTableRowView({\n rowKey,\n value,\n description = '',\n enabled,\n readOnly = false,\n masked = false,\n maskSensitive = false,\n deletable = false,\n showDescription = false,\n placeholder,\n autocompleteKeys = false,\n size,\n onKeyChange,\n onValueChange,\n onDescriptionChange,\n onEnabledChange,\n onRemove,\n}: KeyValueTableRowViewProps) {\n const [keyFocused, setKeyFocused] = useState(false);\n const [filterText, setFilterText] = useState('');\n const [keyHighlight, setKeyHighlight] = useState(-1);\n const [valueFocused, setValueFocused] = useState(false);\n const [valueFilterText, setValueFilterText] = useState('');\n const [valueHighlight, setValueHighlight] = useState(-1);\n const keyInputRef = useRef<HTMLInputElement>(null);\n const valueInputRef = useRef<HTMLInputElement>(null);\n const dropdownRef = useRef<HTMLDivElement>(null);\n const valueDropdownRef = useRef<HTMLDivElement>(null);\n\n const isMasked = masked || (maskSensitive && SENSITIVE_HEADERS.includes(rowKey.toLowerCase()));\n\n const hvs = HEADER_VALUE_SUGGESTIONS as Record<string, string[]>;\n\n const keySuggestions = autocompleteKeys && !readOnly && keyFocused\n ? HTTP_REQUEST_HEADERS.filter(h =>\n h.toLowerCase().includes((filterText || rowKey).toLowerCase()) &&\n h.toLowerCase() !== rowKey.toLowerCase()\n ).slice(0, 8)\n : [];\n\n const valueSuggestions = autocompleteKeys && !readOnly && valueFocused && rowKey\n ? (hvs[rowKey.toLowerCase()] || []).filter(v =>\n v.toLowerCase().includes((valueFilterText || value).toLowerCase()) &&\n v.toLowerCase() !== value.toLowerCase()\n ).slice(0, 8)\n : [];\n\n const showKeyDrop = keyFocused && keySuggestions.length > 0;\n const showValDrop = valueFocused && valueSuggestions.length > 0;\n\n useEffect(() => {\n if (!showKeyDrop) return;\n const h = (e: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(e.target as Node) &&\n keyInputRef.current && !keyInputRef.current.contains(e.target as Node)) {\n setKeyFocused(false);\n }\n };\n document.addEventListener('mousedown', h);\n return () => document.removeEventListener('mousedown', h);\n }, [showKeyDrop]);\n\n useEffect(() => {\n if (!showValDrop) return;\n const h = (e: MouseEvent) => {\n if (valueDropdownRef.current && !valueDropdownRef.current.contains(e.target as Node) &&\n valueInputRef.current && !valueInputRef.current.contains(e.target as Node)) {\n setValueFocused(false);\n }\n };\n document.addEventListener('mousedown', h);\n return () => document.removeEventListener('mousedown', h);\n }, [showValDrop]);\n\n const selectKey = useCallback((header: string) => {\n onKeyChange?.(header);\n setKeyFocused(false);\n setFilterText('');\n setKeyHighlight(-1);\n }, [onKeyChange]);\n\n const selectVal = useCallback((val: string) => {\n onValueChange?.(val);\n setValueFocused(false);\n setValueFilterText('');\n setValueHighlight(-1);\n }, [onValueChange]);\n\n const handleKeyDown = useCallback((e: React.KeyboardEvent, which: 'key' | 'val') => {\n const isKey = which === 'key';\n const visible = isKey ? showKeyDrop : showValDrop;\n const suggs = isKey ? keySuggestions : valueSuggestions;\n const hi = isKey ? keyHighlight : valueHighlight;\n const setHi = isKey ? setKeyHighlight : setValueHighlight;\n const select = isKey ? selectKey : selectVal;\n const setFoc = isKey ? setKeyFocused : setValueFocused;\n if (!visible) return;\n if (e.key === 'ArrowDown') { e.preventDefault(); setHi(p => (p + 1) % suggs.length); }\n else if (e.key === 'ArrowUp') { e.preventDefault(); setHi(p => p <= 0 ? suggs.length - 1 : p - 1); }\n else if (e.key === 'Enter' && hi >= 0) { e.preventDefault(); select(suggs[hi]); }\n else if (e.key === 'Escape') { setFoc(false); setHi(-1); }\n }, [showKeyDrop, showValDrop, keySuggestions, valueSuggestions, keyHighlight, valueHighlight, selectKey, selectVal]);\n\n const gridCls = showDescription\n ? 'grid-cols-[32px_1fr_1fr_1fr_32px]'\n : 'grid-cols-[32px_1fr_1fr_32px]';\n\n const pinnedInputStyle: React.CSSProperties = {\n border: '1px dashed var(--color-input-border)',\n background: 'color-mix(in srgb, var(--color-text-primary) 3%, transparent)',\n boxShadow: 'none',\n };\n\n return (\n <div\n className={`grid ${gridCls} gap-2 px-1 group ${!readOnly && enabled === false ? 'opacity-50' : ''}`}\n style={readOnly ? {\n borderRadius: '6px',\n border: '1px dashed color-mix(in srgb, var(--color-text-primary) 15%, transparent)',\n padding: '4px 4px',\n background: 'color-mix(in srgb, var(--color-text-primary) 2%, transparent)',\n margin: '2px 0',\n } : undefined}\n >\n {/* Left: lock icon (readOnly) or enable toggle (editable) */}\n <div className=\"flex items-center justify-center\">\n {readOnly ? (\n <LockIcon size={13} style={{ color: 'var(--color-text-muted)', opacity: 0.5 }} />\n ) : enabled !== undefined ? (\n <button\n type=\"button\"\n onClick={() => onEnabledChange?.(!enabled)}\n className=\"cursor-pointer p-0.5\"\n title={enabled ? 'Disable' : 'Enable'}\n >\n {enabled\n ? <CheckCircleFilledIcon size={16} checked className=\"text-[var(--color-success)]\" />\n : <CheckCircleFilledIcon size={16} checked={false} />}\n </button>\n ) : null}\n </div>\n\n {/* Key */}\n <div className=\"relative\">\n <TextInputView\n ref={keyInputRef}\n value={rowKey}\n readOnly={readOnly}\n placeholder={readOnly ? undefined : (placeholder?.key ?? 'Key')}\n size={size}\n style={{ width: '100%', ...(readOnly ? pinnedInputStyle : {}) }}\n color={readOnly ? 'var(--color-text-secondary)' : undefined}\n onChange={e => { onKeyChange?.(e.target.value); setFilterText(e.target.value); setKeyHighlight(-1); }}\n onFocus={() => { setKeyFocused(true); setFilterText(rowKey); setKeyHighlight(-1); }}\n onBlur={() => setTimeout(() => { setKeyFocused(false); setKeyHighlight(-1); }, 150)}\n onKeyDown={e => handleKeyDown(e, 'key')}\n tabIndex={readOnly ? -1 : undefined}\n />\n {showKeyDrop && (\n <div ref={dropdownRef} className={DROP_CLS}>\n {keySuggestions.map((h, i) => (\n <button\n key={h}\n type=\"button\"\n className={dropItemCls(i === keyHighlight)}\n onMouseDown={e => { e.preventDefault(); selectKey(h); }}\n onMouseEnter={() => setKeyHighlight(i)}\n >{h}</button>\n ))}\n </div>\n )}\n </div>\n\n {/* Value */}\n <div className=\"relative\">\n <TextInputView\n ref={valueInputRef}\n value={value}\n readOnly={readOnly}\n placeholder={readOnly ? undefined : (placeholder?.value ?? 'Value')}\n size={size}\n masked={isMasked}\n style={{ width: '100%', ...(readOnly ? pinnedInputStyle : {}) }}\n color={readOnly ? 'var(--color-text-secondary)' : undefined}\n onChange={e => { onValueChange?.(e.target.value); setValueFilterText(e.target.value); setValueHighlight(-1); }}\n onFocus={() => { setValueFocused(true); setValueFilterText(value); setValueHighlight(-1); }}\n onBlur={() => setTimeout(() => { setValueFocused(false); setValueHighlight(-1); }, 150)}\n onKeyDown={e => handleKeyDown(e, 'val')}\n tabIndex={readOnly ? -1 : undefined}\n />\n {showValDrop && (\n <div ref={valueDropdownRef} className={DROP_CLS}>\n {valueSuggestions.map((v, i) => (\n <button\n key={v}\n type=\"button\"\n className={dropItemCls(i === valueHighlight)}\n onMouseDown={e => { e.preventDefault(); selectVal(v); }}\n onMouseEnter={() => setValueHighlight(i)}\n >{v}</button>\n ))}\n </div>\n )}\n </div>\n\n {/* Description */}\n {showDescription && (\n <TextInputView\n value={description}\n readOnly={readOnly}\n placeholder={readOnly ? undefined : 'Description'}\n size={size}\n style={{ width: '100%', ...(readOnly ? pinnedInputStyle : {}) }}\n color={readOnly ? 'var(--color-text-muted)' : 'var(--color-text-secondary)'}\n onChange={e => onDescriptionChange?.(e.target.value)}\n tabIndex={readOnly ? -1 : undefined}\n />\n )}\n\n {/* Delete */}\n <div className=\"flex items-center justify-center\">\n {deletable && onRemove ? (\n <button\n type=\"button\"\n onClick={onRemove}\n className=\"opacity-0 group-hover:opacity-100 p-1 text-[var(--color-text-muted)] hover:text-[var(--color-error)] cursor-pointer transition-all\"\n title=\"Remove\"\n >\n <TrashIcon size={14} />\n </button>\n ) : (\n <div className=\"w-6 h-6\" />\n )}\n </div>\n </div>\n );\n}\n","import { useState, useRef } from 'react';\nimport { ConfirmDialog } from '../../../components/shared/modals/ConfirmDialog';\nimport { TrashIcon, BulkEditIcon, PlusIcon, EyeIcon, EyeOffIcon } from '../../../icons';\nimport type { DuiSize } from '../../core/DuiTypes';\nimport { KeyValueTableRowView } from './KeyValueTableRowView';\nimport { IconButtonView } from '../button/IconButtonView';\n\nexport interface KeyValueTableRow {\n id: string;\n key: string;\n value: string;\n description?: string;\n enabled: boolean;\n type?: 'text' | 'file';\n files?: string[];\n filePaths?: string[];\n fileData?: string[];\n fileMimeTypes?: string[];\n fileExists?: boolean[];\n}\n\n/** A computed/auto-generated row shown above editable rows — read-only, lock icon on left */\nexport interface PinnedKeyValueRow {\n id: string;\n key: string;\n value: string;\n description?: string;\n /** If true, a trash icon appears on hover and the row can be removed via onPinnedRemove */\n deletable?: boolean;\n /** If true (or auto-detected via SENSITIVE_HEADERS), value is masked with eye-toggle */\n masked?: boolean;\n}\n\nexport interface KeyValueTableViewProps {\n rows: KeyValueTableRow[];\n onChange: (rows: KeyValueTableRow[]) => void;\n showDescription?: boolean;\n placeholder?: { key?: string; value?: string };\n className?: string;\n /** Show HTTP header key autocomplete + value suggestions */\n autocompleteKeys?: boolean;\n /** Mask values for known sensitive keys (Authorization, token, etc.) */\n maskSensitive?: boolean;\n /** Hide the toolbar row entirely */\n hideToolbar?: boolean;\n /** Left-side label text */\n label?: string;\n /** Accent color for InsertRowDivider and toolbar highlights */\n accentColor?: string;\n /** Extra nodes rendered in toolbar right side (before trash icon) */\n toolbarExtra?: React.ReactNode;\n /** DUI size token — controls input height and font size. Falls back to DuiProvider or 'md'. */\n size?: DuiSize;\n /** Wrap in a rounded border panel */\n bordered?: boolean;\n /**\n * Computed/auto-generated rows — shown as the first N rows with lock icon + dotted border.\n * Hidden by default; revealed via the eye icon next to the label.\n */\n pinnedTopRows?: PinnedKeyValueRow[];\n /** Called when a deletable pinned row is removed */\n onPinnedRemove?: (id: string) => void;\n}\n\nfunction makeRow(): KeyValueTableRow {\n return { id: crypto.randomUUID(), key: '', value: '', description: '', enabled: true };\n}\n\n// ─── Insert Row Divider ────────────────────────────────────────────────────────\n\nfunction InsertRowDivider({ onInsert, accentColor }: { onInsert: () => void; accentColor?: string }) {\n const color = accentColor || 'rgb(99,102,241)';\n return (\n <div className=\"group/divider relative h-[14px] flex items-center justify-center opacity-0 hover:opacity-100 transition-opacity duration-150\">\n <div className=\"absolute inset-x-4 top-1/2 h-px\" style={{ background: `color-mix(in srgb, ${color} 25%, transparent)` }} />\n <button\n type=\"button\"\n onClick={onInsert}\n className=\"relative z-10 flex items-center gap-1 px-2.5 py-0.5 rounded-full text-[11px] font-medium cursor-pointer transition-all\"\n style={{\n background: `color-mix(in srgb, ${color} 10%, transparent)`,\n color,\n border: `1px solid color-mix(in srgb, ${color} 30%, transparent)`,\n }}\n >\n <PlusIcon size={10} />\n Row\n </button>\n </div>\n );\n}\n\n// ─── Bulk Edit Textarea ────────────────────────────────────────────────────────\n\nfunction BulkEditArea({ defaultValue, onChangeRef, accentColor }: {\n defaultValue: string;\n onChangeRef: React.MutableRefObject<string>;\n accentColor?: string;\n}) {\n const [text, setText] = useState(defaultValue);\n const [focused, setFocused] = useState(false);\n onChangeRef.current = text;\n const hl = accentColor || 'var(--color-primary)';\n\n return (\n <div className=\"flex flex-col gap-1\">\n <p className=\"text-[11px] text-[var(--color-text-muted)] px-1\">\n Entries are separated by newline. Keys and values are separated by{' '}\n <code style={{ color: hl }}>:</code>. Prepend <code style={{ color: hl }}>#</code> to disable a row.\n </p>\n <textarea\n value={text}\n onChange={e => setText(e.target.value)}\n onFocus={() => setFocused(true)}\n onBlur={() => setFocused(false)}\n className=\"w-full min-h-[160px] px-3 py-2.5 rounded-md text-[13px] font-mono text-[var(--color-text-primary)] placeholder:text-[var(--color-text-muted)] focus:outline-none resize-y\"\n style={{\n background: 'var(--color-input-bg)',\n border: `1px solid ${focused ? hl : 'var(--color-input-border)'}`,\n transition: 'border-color 120ms',\n }}\n placeholder={`Content-Type: application/json\\nAuthorization: Bearer token123\\n# X-Debug: true`}\n spellCheck={false}\n />\n </div>\n );\n}\n\n// ─── Main Component ────────────────────────────────────────────────────────────\n\nexport function KeyValueTableView({\n rows,\n onChange,\n showDescription = false,\n placeholder,\n className = '',\n autocompleteKeys = false,\n maskSensitive = false,\n hideToolbar = false,\n label,\n accentColor,\n toolbarExtra,\n size,\n bordered = false,\n pinnedTopRows,\n onPinnedRemove,\n}: KeyValueTableViewProps) {\n const [bulkEdit, setBulkEdit] = useState(false);\n const [showClearConfirm, setShowClearConfirm] = useState(false);\n const [showPinned, setShowPinned] = useState(false);\n const bulkTextRef = useRef('');\n const accent = accentColor || 'var(--color-primary)';\n const hasPinned = pinnedTopRows && pinnedTopRows.length > 0;\n\n const updateRow = (idx: number, field: keyof KeyValueTableRow, value: string | boolean) => {\n const updated = [...rows];\n updated[idx] = { ...updated[idx], [field]: value };\n onChange(updated);\n };\n\n const addRow = () => onChange([...rows, makeRow()]);\n\n const insertRowAt = (idx: number) => {\n const updated = [...rows];\n updated.splice(idx, 0, makeRow());\n onChange(updated);\n };\n\n const removeRow = (idx: number) => {\n if (rows.length <= 1) { onChange([makeRow()]); return; }\n onChange(rows.filter((_, i) => i !== idx));\n };\n\n const toBulkText = () =>\n rows.filter(r => r.key || r.value)\n .map(r => `${!r.enabled ? '# ' : ''}${r.key}: ${r.value}`)\n .join('\\n');\n\n const fromBulkText = (text: string) => {\n const parsed = text.split('\\n').map(line => {\n const disabled = line.startsWith('# ');\n const clean = disabled ? line.slice(2) : line;\n const ci = clean.indexOf(':');\n const key = ci >= 0 ? clean.slice(0, ci).trim() : clean.trim();\n const value = ci >= 0 ? clean.slice(ci + 1).trim() : '';\n return { id: crypto.randomUUID(), key, value, description: '', enabled: !disabled };\n }).filter(r => r.key || r.value);\n onChange(parsed.length ? parsed : [makeRow()]);\n };\n\n const handleClearAll = () => { onChange([makeRow()]); setShowClearConfirm(false); setBulkEdit(false); };\n const hasRows = rows.some(r => r.key || r.value);\n const gridCols = showDescription ? 'grid-cols-[32px_1fr_1fr_1fr_32px]' : 'grid-cols-[32px_1fr_1fr_32px]';\n\n return (\n <div className={`text-[13px] ${bordered ? 'border border-[var(--color-surface-border)] rounded-md overflow-hidden' : ''} ${className}`}>\n {/* Toolbar: label left, icon buttons right */}\n {!hideToolbar && (\n <div className=\"flex items-center justify-between mb-2 px-1\">\n <div className=\"flex items-center gap-1.5\">\n {hasPinned && (\n <button\n type=\"button\"\n onClick={() => setShowPinned(p => !p)}\n className=\"flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] font-medium cursor-pointer transition-all\"\n style={{\n color: showPinned ? accent : 'var(--color-text-muted)',\n background: showPinned ? `color-mix(in srgb, ${accent} 10%, transparent)` : 'transparent',\n border: `1px solid ${showPinned ? `color-mix(in srgb, ${accent} 25%, transparent)` : 'transparent'}`,\n }}\n title={showPinned ? 'Hide computed headers' : 'Show computed headers'}\n >\n {showPinned\n ? <EyeIcon size={12} />\n : <EyeOffIcon size={12} />}\n <span>{pinnedTopRows!.length} hidden</span>\n </button>\n )}\n {!hasPinned && <div />}\n </div>\n <div className=\"flex items-center gap-0.5\">\n {toolbarExtra}\n <IconButtonView\n icon={<TrashIcon size={14} />}\n size=\"md\"\n tooltip=\"Clear all\"\n disabled={!hasRows}\n style={{ '--hover-color': 'var(--color-error)', '--hover-bg': 'color-mix(in srgb, var(--color-error) 8%, transparent)' } as React.CSSProperties}\n onClick={() => { if (hasRows) setShowClearConfirm(true); }}\n />\n <IconButtonView\n icon={<BulkEditIcon size={14} />}\n size=\"md\"\n tooltip=\"Bulk edit\"\n active={bulkEdit}\n activeColor={accent}\n onClick={() => { if (bulkEdit) fromBulkText(bulkTextRef.current); setBulkEdit(!bulkEdit); }}\n />\n <IconButtonView\n icon={<PlusIcon size={14} />}\n size=\"md\"\n tooltip=\"Add new row\"\n style={{ '--hover-color': accent, '--hover-bg': `color-mix(in srgb, ${accent} 8%, transparent)` } as React.CSSProperties}\n onClick={addRow}\n />\n </div>\n </div>\n )}\n\n {bulkEdit ? (\n <BulkEditArea defaultValue={toBulkText()} onChangeRef={bulkTextRef} accentColor={accentColor} />\n ) : (\n <>\n {/* Column headers */}\n <div className={`grid ${gridCols} gap-2 px-1 mb-1.5 items-center`}>\n <div />\n <div className=\"text-[var(--color-text-muted)] font-medium text-[10px] uppercase tracking-wide px-2.5\">{label || 'Key'}</div>\n <div className=\"text-[var(--color-text-muted)] font-medium text-[10px] uppercase tracking-wide px-2.5\">Value</div>\n {showDescription && (\n <div className=\"text-[var(--color-text-muted)] font-medium text-[10px] uppercase tracking-wide px-2.5\">Description</div>\n )}\n <div />\n </div>\n\n {/* Pinned (computed) rows — shown first when eye is toggled on */}\n {hasPinned && showPinned && (\n <div className=\"flex flex-col mb-1.5\">\n {pinnedTopRows!.map(pRow => (\n <KeyValueTableRowView\n key={pRow.id}\n rowKey={pRow.key}\n value={pRow.value}\n description={pRow.description}\n readOnly\n masked={pRow.masked}\n maskSensitive\n deletable={pRow.deletable}\n showDescription={showDescription}\n size={size}\n onRemove={pRow.deletable && onPinnedRemove ? () => onPinnedRemove(pRow.id) : undefined}\n />\n ))}\n <div className=\"my-1.5 border-b border-dashed\" style={{ borderColor: 'color-mix(in srgb, var(--color-text-primary) 10%, transparent)' }} />\n </div>\n )}\n\n {/* Rows with InsertRowDivider between them */}\n <div className=\"flex flex-col gap-0\">\n {rows.map((row, idx) => (\n <div key={row.id}>\n <div className=\"py-1\">\n <KeyValueTableRowView\n rowKey={row.key}\n value={row.value}\n description={row.description}\n enabled={row.enabled}\n maskSensitive={maskSensitive}\n showDescription={showDescription}\n placeholder={placeholder}\n autocompleteKeys={autocompleteKeys}\n size={size}\n accentColor={accentColor}\n deletable\n onKeyChange={val => updateRow(idx, 'key', val)}\n onValueChange={val => updateRow(idx, 'value', val)}\n onDescriptionChange={val => updateRow(idx, 'description', val)}\n onEnabledChange={enabled => updateRow(idx, 'enabled', enabled)}\n onRemove={() => removeRow(idx)}\n />\n </div>\n <InsertRowDivider onInsert={() => insertRowAt(idx + 1)} accentColor={accentColor} />\n </div>\n ))}\n </div>\n </>\n )}\n\n {showClearConfirm && (\n <ConfirmDialog\n title=\"Clear All?\"\n message=\"All entries will be permanently deleted. This cannot be undone.\"\n confirmLabel=\"Clear All\"\n danger\n onConfirm={handleClearAll}\n onCancel={() => setShowClearConfirm(false)}\n />\n )}\n </div>\n );\n}\n","import { useState, useRef, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { DropdownArrowIcon, CheckIcon } from '../../../icons';\nimport type { DuiSize } from '../../core/DuiTypes';\nimport { useDui } from '../../core/DuiContext';\nimport { DUI_HEIGHT, DUI_FONT_SIZE, DUI_PADDING_X, DUI_ICON_SIZE } from '../../core/DuiTokens';\nimport './MergedInputView.css';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\n/** @deprecated Use `DuiSize` ('sm' | 'md' | 'lg' | 'xl') directly. */\nexport type MergedInputSize = DuiSize;\n\nexport interface MergedSelectOption {\n value: string;\n label: string;\n color?: string;\n}\n\nexport type MergedInputSegment =\n | {\n type: 'select';\n value: string;\n options: MergedSelectOption[];\n onChange: (value: string) => void;\n width?: number;\n }\n | {\n type: 'text';\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n flex?: number;\n }\n | {\n type: 'button';\n label: string;\n onClick: () => void;\n icon?: React.ReactNode;\n accentColor?: string;\n }\n | { type: 'divider' }\n | { type: 'custom'; content: React.ReactNode; width?: number };\n\nexport interface MergedInputViewProps {\n segments: MergedInputSegment[];\n /** Falls back to DuiProvider size when omitted. */\n size?: DuiSize;\n accentColor?: string;\n disabled?: boolean;\n className?: string;\n}\n\n// ─── Divider ──────────────────────────────────────────────────────────────────\n\nexport function MergeDivider() {\n return (\n <div\n style={{\n width: 1,\n alignSelf: 'stretch',\n background: 'var(--color-input-border)',\n flexShrink: 0,\n margin: '4px 0',\n }}\n />\n );\n}\n\n// ─── Select segment ───────────────────────────────────────────────────────────\n\ninterface MergedDims { height: number; fontSize: number; px: number; arrowSize: number }\n\ninterface SegSelectProps {\n seg: Extract<MergedInputSegment, { type: 'select' }>;\n dims: MergedDims;\n accent: string;\n disabled: boolean;\n}\n\nfunction SegSelect({ seg, dims, accent, disabled }: SegSelectProps) {\n const [open, setOpen] = useState(false);\n const triggerRef = useRef<HTMLDivElement>(null);\n const [pos, setPos] = useState({ top: 0, left: 0, width: 0 });\n\n const selWidth = seg.width ?? (dims.height <= 26 ? 72 : dims.height <= 34 ? 88 : 106);\n const selected = seg.options.find(o => o.value === seg.value);\n const selectColor = selected?.color ?? 'var(--color-text-primary)';\n\n const openDropdown = () => {\n if (disabled) return;\n const el = triggerRef.current;\n if (!el) return;\n const rect = el.getBoundingClientRect();\n setPos({ top: rect.bottom + 4, left: rect.left, width: Math.max(rect.width, 110) });\n setOpen(v => !v);\n };\n\n useEffect(() => {\n if (!open) return;\n const handler = (e: MouseEvent) => {\n const t = e.target as HTMLElement;\n if (!t.closest('[data-miv-drop]') && !t.closest('[data-miv-sel]')) setOpen(false);\n };\n document.addEventListener('mousedown', handler);\n return () => document.removeEventListener('mousedown', handler);\n }, [open]);\n\n return (\n <>\n <div\n ref={triggerRef}\n data-miv-sel\n onClick={openDropdown}\n className={`dui_merged__select-trigger${disabled ? ' dui_merged__select-trigger--disabled' : ''}`}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: 4,\n width: selWidth,\n flexShrink: 0,\n padding: `0 ${dims.px}px`,\n cursor: disabled ? 'not-allowed' : 'pointer',\n userSelect: 'none',\n color: selectColor,\n fontWeight: 700,\n fontSize: dims.fontSize,\n letterSpacing: '0.02em',\n borderRadius: '5px 0 0 5px',\n }}\n >\n <span style={{ flex: 1, whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }}>\n {selected?.label ?? seg.value}\n </span>\n <DropdownArrowIcon\n size={dims.arrowSize}\n style={{\n flexShrink: 0,\n color: 'var(--color-text-muted)',\n transform: open ? 'rotate(180deg)' : 'rotate(0deg)',\n transition: 'transform 150ms ease',\n }}\n />\n </div>\n\n {open && createPortal(\n <div\n data-miv-drop\n style={{\n position: 'fixed',\n top: pos.top,\n left: pos.left,\n minWidth: pos.width,\n background: 'var(--color-surface)',\n border: '1px solid var(--color-surface-border)',\n borderRadius: 8,\n boxShadow: '0 8px 24px rgba(0,0,0,0.22)',\n zIndex: 9999,\n padding: 3,\n }}\n >\n {seg.options.map(opt => {\n const isSel = opt.value === seg.value;\n return (\n <div\n key={opt.value}\n onMouseDown={e => { e.preventDefault(); seg.onChange(opt.value); setOpen(false); }}\n className={`dui_merged__select-option${isSel ? ' dui_merged__select-option--selected' : ''}`}\n style={{\n display: 'flex', alignItems: 'center', gap: 8,\n padding: `${dims.height <= 26 ? '4px 8px' : '6px 10px'}`,\n borderRadius: 5,\n cursor: 'pointer',\n fontSize: dims.fontSize,\n fontWeight: isSel ? 700 : 500,\n color: opt.color ?? (isSel ? accent : 'var(--color-text-primary)'),\n background: isSel ? `color-mix(in srgb, ${accent} 12%, transparent)` : 'transparent',\n }}\n >\n <span style={{ flex: 1 }}>{opt.label}</span>\n {isSel && <CheckIcon size={11} style={{ color: accent, flexShrink: 0 }} />}\n </div>\n );\n })}\n </div>,\n document.body,\n )}\n </>\n );\n}\n\n// ─── Button segment ───────────────────────────────────────────────────────────\n\ninterface SegButtonProps {\n seg: Extract<MergedInputSegment, { type: 'button' }>;\n dims: MergedDims;\n disabled: boolean;\n}\n\nfunction SegButton({ seg, dims, disabled }: SegButtonProps) {\n const accent = seg.accentColor ?? 'var(--color-primary)';\n return (\n <button\n type=\"button\"\n disabled={disabled}\n onClick={seg.onClick}\n className=\"dui_merged__button-seg\"\n style={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 4,\n flexShrink: 0,\n height: dims.height - 6,\n padding: `0 ${dims.px - 2}px`,\n fontSize: dims.fontSize,\n fontWeight: 700,\n letterSpacing: '0.04em',\n cursor: disabled ? 'not-allowed' : 'pointer',\n border: `1px solid ${accent}`,\n borderRadius: 4,\n background: `color-mix(in srgb, ${accent} 10%, transparent)`,\n color: accent,\n margin: `3px ${dims.px - 4}px`,\n transition: 'background 100ms, color 100ms',\n fontFamily: 'inherit',\n opacity: disabled ? 0.5 : 1,\n '--dui-seg-accent': accent,\n } as React.CSSProperties}\n >\n {seg.icon}\n {seg.label}\n </button>\n );\n}\n\n// ─── Main component ───────────────────────────────────────────────────────────\n\nexport function MergedInputView({\n segments,\n size,\n accentColor,\n disabled = false,\n className = '',\n}: MergedInputViewProps) {\n const [focused, setFocused] = useState(false);\n const [openSel, setOpenSel] = useState(false);\n\n const ctx = useDui();\n const s = size ?? ctx.size;\n const dims = {\n height: DUI_HEIGHT.input[s],\n fontSize: parseInt(DUI_FONT_SIZE[s], 10),\n px: parseInt(DUI_PADDING_X[s], 10),\n arrowSize: DUI_ICON_SIZE[s],\n };\n const accent = accentColor ?? 'var(--color-primary)';\n const borderColor = focused || openSel ? accent : 'var(--color-input-border)';\n const boxShadow = (focused || openSel)\n ? `0 0 0 2px color-mix(in srgb, ${accent} 20%, transparent)`\n : 'none';\n\n return (\n <div\n className={className}\n style={{\n display: 'flex',\n alignItems: 'stretch',\n height: dims.height,\n width: '100%',\n border: `1px solid ${borderColor}`,\n borderRadius: 6,\n background: 'var(--color-input-bg)',\n opacity: disabled ? 0.5 : 1,\n transition: 'border-color 120ms, box-shadow 120ms',\n boxShadow,\n overflow: 'visible',\n position: 'relative',\n }}\n onFocusCapture={() => setFocused(true)}\n onBlurCapture={() => setFocused(false)}\n >\n {segments.map((seg, i) => {\n if (seg.type === 'divider') {\n return <MergeDivider key={i} />;\n }\n if (seg.type === 'select') {\n return (\n <SegSelect\n key={i}\n seg={seg}\n dims={dims}\n accent={accent}\n disabled={disabled}\n />\n );\n }\n if (seg.type === 'text') {\n return (\n <input\n key={i}\n value={seg.value}\n onChange={e => seg.onChange(e.target.value)}\n placeholder={seg.placeholder}\n disabled={disabled}\n style={{\n flex: seg.flex ?? 1,\n height: '100%',\n padding: `0 ${dims.px}px`,\n border: 'none',\n outline: 'none',\n background: 'transparent',\n fontSize: dims.fontSize,\n color: 'var(--color-text-primary)',\n fontFamily: 'inherit',\n minWidth: 0,\n }}\n />\n );\n }\n if (seg.type === 'button') {\n return <SegButton key={i} seg={seg} dims={dims} disabled={disabled} />;\n }\n if (seg.type === 'custom') {\n return (\n <div\n key={i}\n style={{\n display: 'flex',\n alignItems: 'center',\n flexShrink: 0,\n width: seg.width,\n }}\n >\n {seg.content}\n </div>\n );\n }\n return null;\n })}\n </div>\n );\n}\n","import { useRef, useCallback, useEffect } from 'react';\nimport './HudView.css';\n\nexport interface HudItem {\n id: string;\n icon: React.ReactNode;\n onClick?: () => void;\n title?: string;\n disabled?: boolean;\n /** Renders a highlighted active state (e.g. \"mute breakpoints\" toggled on) */\n active?: boolean;\n /** Separator before this item */\n separator?: boolean;\n}\n\nexport interface HudViewProps {\n items: HudItem[];\n /** Short status text rendered after the last item */\n status?: string;\n /** Optional accent color — sets --dui-hud-accent CSS custom property */\n accentColor?: string;\n /** Optional color used for the active (toggled) button state — sets --dui-hud-active-color */\n activeColor?: string;\n className?: string;\n onDragEnd?: (x: number, y: number) => void;\n /** Embed in a positioned container — uses position:relative, drag disabled. For showcase/preview use. */\n contained?: boolean;\n}\n\nexport function HudView({\n items,\n status,\n accentColor,\n activeColor,\n className = '',\n onDragEnd,\n contained = false,\n}: HudViewProps) {\n const rootRef = useRef<HTMLDivElement>(null);\n const dragState = useRef<{ dragging: boolean; startX: number; startY: number; originLeft: number; originTop: number }>({\n dragging: false,\n startX: 0,\n startY: 0,\n originLeft: 0,\n originTop: 0,\n });\n\n const onMouseMove = useCallback((e: MouseEvent) => {\n const d = dragState.current;\n if (!d.dragging || !rootRef.current) return;\n const dx = e.clientX - d.startX;\n const dy = e.clientY - d.startY;\n const el = rootRef.current;\n const newLeft = Math.max(0, Math.min(window.innerWidth - el.offsetWidth, d.originLeft + dx));\n const newTop = Math.max(0, Math.min(window.innerHeight - el.offsetHeight, d.originTop + dy));\n el.style.left = `${newLeft}px`;\n el.style.top = `${newTop}px`;\n el.style.transform = 'none';\n }, []);\n\n const onMouseUp = useCallback((e: MouseEvent) => {\n const d = dragState.current;\n if (!d.dragging) return;\n d.dragging = false;\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n if (rootRef.current) {\n const rect = rootRef.current.getBoundingClientRect();\n onDragEnd?.(rect.left, rect.top);\n }\n e.stopPropagation();\n }, [onMouseMove, onDragEnd]);\n\n const onDragMouseDown = useCallback((e: React.MouseEvent) => {\n if (!rootRef.current) return;\n e.preventDefault();\n const rect = rootRef.current.getBoundingClientRect();\n dragState.current = {\n dragging: true,\n startX: e.clientX,\n startY: e.clientY,\n originLeft: rect.left,\n originTop: rect.top,\n };\n rootRef.current.style.left = `${rect.left}px`;\n rootRef.current.style.top = `${rect.top}px`;\n rootRef.current.style.transform = 'none';\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n }, [onMouseMove, onMouseUp]);\n\n useEffect(() => {\n return () => {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n };\n }, [onMouseMove, onMouseUp]);\n\n const customStyle = {\n ...(accentColor ? { '--dui-hud-accent': accentColor } : {}),\n ...(activeColor ? { '--dui-hud-active-color': activeColor } : {}),\n } as React.CSSProperties;\n\n return (\n <div\n ref={rootRef}\n className={`dui_hud${contained ? ' dui_hud--contained' : ''}${className ? ` ${className}` : ''}`}\n style={customStyle}\n >\n {/* Drag handle — hidden grip in contained/showcase mode */}\n <div\n className=\"dui_hud__drag\"\n onMouseDown={contained ? undefined : onDragMouseDown}\n title={contained ? undefined : 'Drag to move'}\n style={contained ? { cursor: 'default', opacity: 0.25 } : undefined}\n >\n <span className=\"dui_hud__grip\" />\n </div>\n\n {/* Items */}\n {items.map(item => (\n <div key={item.id} style={{ display: 'contents' }}>\n {item.separator && <div className=\"dui_hud__sep\" />}\n <button\n type=\"button\"\n className={`dui_hud__btn${item.active ? ' dui_hud__btn--active' : ''}`}\n onClick={item.onClick}\n disabled={item.disabled}\n title={item.title}\n >\n {item.icon}\n </button>\n </div>\n ))}\n\n {/* Status text */}\n {status && <span className=\"dui_hud__status\">{status}</span>}\n </div>\n );\n}\n","import { useState } from 'react';\nimport './JsonTreeView.css';\n\nexport interface JsonTreeViewProps {\n data: unknown;\n /** Optional label shown as the root key */\n name?: string;\n /** Expand nodes at depth < defaultExpandDepth (default: 2) */\n defaultExpandDepth?: number;\n /** Stop rendering children beyond this depth (default: 8) */\n maxDepth?: number;\n className?: string;\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\ntype ValueType = 'string' | 'number' | 'boolean' | 'null' | 'fn' | 'object' | 'array';\n\nfunction getValueType(v: unknown): ValueType {\n if (v === null || v === undefined) return 'null';\n if (typeof v === 'string') return v.startsWith('<') ? 'fn' : 'string';\n if (typeof v === 'number') return 'number';\n if (typeof v === 'boolean') return 'boolean';\n if (Array.isArray(v)) return 'array';\n if (typeof v === 'object') return 'object';\n return 'null';\n}\n\nfunction getPreview(v: unknown, expanded: boolean): string {\n if (v === null) return 'null';\n if (v === undefined) return 'undefined';\n if (typeof v === 'string') {\n if (v.startsWith('<')) return v;\n // Show the FULL string value — never truncate (audit/detail views need everything).\n return `'${v}'`;\n }\n if (typeof v === 'number' || typeof v === 'boolean') return String(v);\n if (Array.isArray(v)) {\n if (expanded) return `Array(${v.length})`;\n const inner = v.slice(0, 4).map(i => getShort(i)).join(', ');\n return `(${v.length}) [${inner}${v.length > 4 ? ', …' : ''}]`;\n }\n if (typeof v === 'object') {\n if (expanded) return '{…}';\n const keys = Object.keys(v as Record<string, unknown>);\n const inner = keys.slice(0, 3).map(k => `${k}: ${getShort((v as Record<string, unknown>)[k])}`).join(', ');\n return `{${inner}${keys.length > 3 ? ', …' : ''}}`;\n }\n return String(v);\n}\n\nfunction getShort(v: unknown): string {\n if (v === null) return 'null';\n if (v === undefined) return 'undefined';\n if (typeof v === 'string') return `'${v.length > 12 ? v.slice(0, 12) + '…' : v}'`;\n if (typeof v === 'number' || typeof v === 'boolean') return String(v);\n if (Array.isArray(v)) return `Array(${v.length})`;\n if (typeof v === 'object') return '{…}';\n return String(v);\n}\n\n// ─── JsonNode (recursive) ────────────────────────────────────────────────────\n\ninterface JsonNodeProps {\n name?: string;\n value: unknown;\n depth: number;\n defaultExpandDepth: number;\n maxDepth: number;\n}\n\nfunction JsonNode({ name, value, depth, defaultExpandDepth, maxDepth }: JsonNodeProps) {\n const [expanded, setExpanded] = useState(depth < defaultExpandDepth);\n const type = getValueType(value);\n const isExpandable = type === 'object' || type === 'array';\n const atMaxDepth = depth >= maxDepth;\n\n return (\n <div>\n <div\n className={`dui_json-tree__row${isExpandable ? ' dui_json-tree__row--expandable' : ''}`}\n style={{ paddingLeft: `${depth * 14 + 4}px` }}\n onClick={isExpandable && !atMaxDepth ? () => setExpanded(v => !v) : undefined}\n >\n {isExpandable && !atMaxDepth ? (\n <span className={`dui_json-tree__chevron${expanded ? ' dui_json-tree__chevron--open' : ''}`}>\n ▶\n </span>\n ) : (\n <span className=\"dui_json-tree__chevron-spacer\" />\n )}\n\n {name !== undefined && (\n <>\n <span className=\"dui_json-tree__key\">{name}</span>\n <span className=\"dui_json-tree__eq\"> =</span>\n </>\n )}\n\n <span className={`dui_json-tree__value dui_json-tree__value--${type}`}>\n {getPreview(value, expanded && isExpandable)}\n </span>\n </div>\n\n {expanded && isExpandable && !atMaxDepth && (\n <>\n {Array.isArray(value)\n ? (value as unknown[]).map((item, idx) => (\n <JsonNode\n key={idx}\n name={String(idx)}\n value={item}\n depth={depth + 1}\n defaultExpandDepth={defaultExpandDepth}\n maxDepth={maxDepth}\n />\n ))\n : Object.entries(value as Record<string, unknown>).map(([k, v]) => (\n <JsonNode\n key={k}\n name={k}\n value={v}\n depth={depth + 1}\n defaultExpandDepth={defaultExpandDepth}\n maxDepth={maxDepth}\n />\n ))\n }\n {Array.isArray(value) && (\n <div\n className=\"dui_json-tree__length\"\n style={{ paddingLeft: `${(depth + 1) * 14 + 4}px` }}\n >\n length: {(value as unknown[]).length}\n </div>\n )}\n </>\n )}\n </div>\n );\n}\n\n// ─── Public component ─────────────────────────────────────────────────────────\n\nexport function JsonTreeView({\n data,\n name,\n defaultExpandDepth = 2,\n maxDepth = 8,\n className = '',\n}: JsonTreeViewProps) {\n return (\n <div className={`dui_json-tree${className ? ` ${className}` : ''}`}>\n <JsonNode\n name={name}\n value={data}\n depth={0}\n defaultExpandDepth={defaultExpandDepth}\n maxDepth={maxDepth}\n />\n </div>\n );\n}\n","import { useState } from 'react';\nimport { ChevronDownIcon } from '../../../icons';\nimport './ExpandableLogEntryView.css';\n\nexport interface ExpandableLogEntryViewProps {\n icon: React.ReactNode;\n title: string;\n /** Short colored label shown after the title (e.g. method, status) */\n badge?: string;\n /** CSS color or var() for badge text + tinted background */\n badgeColor?: string;\n /** Unix ms timestamp — renders as HH:MM:SS AM/PM if provided */\n timestamp?: number;\n defaultExpanded?: boolean;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function ExpandableLogEntryView({\n icon,\n title,\n badge,\n badgeColor,\n timestamp,\n defaultExpanded = false,\n children,\n className = '',\n}: ExpandableLogEntryViewProps) {\n const [expanded, setExpanded] = useState(defaultExpanded);\n\n const timeStr = timestamp\n ? new Date(timestamp).toLocaleTimeString('en-US', {\n hour12: true, hour: '2-digit', minute: '2-digit', second: '2-digit',\n })\n : undefined;\n\n const customStyle = badgeColor\n ? ({ '--dui-logentry-badge': badgeColor } as React.CSSProperties)\n : undefined;\n\n return (\n <div\n className={`dui_log-entry${className ? ` ${className}` : ''}`}\n style={customStyle}\n >\n <div className=\"dui_log-entry__header\" onClick={() => setExpanded(v => !v)}>\n <span className=\"dui_log-entry__icon\">{icon}</span>\n <span className=\"dui_log-entry__title\">{title}</span>\n {badge && <span className=\"dui_log-entry__badge\">{badge}</span>}\n <span className=\"dui_log-entry__meta\">\n {timeStr && <span className=\"dui_log-entry__timestamp\">{timeStr}</span>}\n <span className={`dui_log-entry__chevron${expanded ? ' dui_log-entry__chevron--open' : ''}`}>\n <ChevronDownIcon size={12} />\n </span>\n </span>\n </div>\n\n {expanded && (\n <div className=\"dui_log-entry__content\">\n {children}\n </div>\n )}\n </div>\n );\n}\n","import { useState } from 'react';\nimport type { DuiSize } from '../../core/DuiTypes';\nimport { useButtonBase } from '../../core/ButtonBase';\nimport { CopyIcon, CheckIcon } from '../../../icons';\n\nexport interface CopyButtonViewProps {\n text: string;\n /** DUI size token — controls button dimensions and icon size (default: 'md') */\n size?: DuiSize;\n title?: string;\n accentColor?: string;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function CopyButtonView({\n text,\n size = 'md',\n title = 'Copy',\n accentColor,\n className = '',\n style,\n}: CopyButtonViewProps) {\n const [copied, setCopied] = useState(false);\n const accent = accentColor || 'var(--color-success)';\n const base = useButtonBase(size);\n\n const handleCopy = (e: React.MouseEvent) => {\n e.stopPropagation();\n navigator.clipboard.writeText(text).catch(() => {});\n setCopied(true);\n setTimeout(() => setCopied(false), 1500);\n };\n\n return (\n <button\n type=\"button\"\n onClick={handleCopy}\n title={copied ? 'Copied!' : title}\n className={className}\n style={{\n width: base.height,\n height: base.height,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: base.borderRadius,\n border: 'none',\n cursor: 'pointer',\n background: 'transparent',\n color: copied ? accent : 'var(--color-text-muted)',\n transition: 'color 150ms ease, background 150ms ease',\n flexShrink: 0,\n ...style,\n }}\n onMouseEnter={e => {\n if (!copied) e.currentTarget.style.background = 'var(--color-hover, color-mix(in srgb, var(--color-text-primary) 6%, transparent))';\n if (!copied) e.currentTarget.style.color = 'var(--color-text-primary)';\n }}\n onMouseLeave={e => {\n e.currentTarget.style.background = 'transparent';\n e.currentTarget.style.color = copied ? accent : 'var(--color-text-muted)';\n }}\n >\n {copied ? <CheckIcon size={base.iconSize} /> : <CopyIcon size={base.iconSize} />}\n </button>\n );\n}\n","/**\n * marked v14.1.4 - a markdown parser\n * Copyright (c) 2011-2024, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\n/**\n * Gets the original marked default options.\n */\nfunction _getDefaults() {\n return {\n async: false,\n breaks: false,\n extensions: null,\n gfm: true,\n hooks: null,\n pedantic: false,\n renderer: null,\n silent: false,\n tokenizer: null,\n walkTokens: null,\n };\n}\nlet _defaults = _getDefaults();\nfunction changeDefaults(newDefaults) {\n _defaults = newDefaults;\n}\n\n/**\n * Helpers\n */\nconst escapeTest = /[&<>\"']/;\nconst escapeReplace = new RegExp(escapeTest.source, 'g');\nconst escapeTestNoEncode = /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/;\nconst escapeReplaceNoEncode = new RegExp(escapeTestNoEncode.source, 'g');\nconst escapeReplacements = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;',\n};\nconst getEscapeReplacement = (ch) => escapeReplacements[ch];\nfunction escape$1(html, encode) {\n if (encode) {\n if (escapeTest.test(html)) {\n return html.replace(escapeReplace, getEscapeReplacement);\n }\n }\n else {\n if (escapeTestNoEncode.test(html)) {\n return html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n return html;\n}\nconst caret = /(^|[^\\[])\\^/g;\nfunction edit(regex, opt) {\n let source = typeof regex === 'string' ? regex : regex.source;\n opt = opt || '';\n const obj = {\n replace: (name, val) => {\n let valSource = typeof val === 'string' ? val : val.source;\n valSource = valSource.replace(caret, '$1');\n source = source.replace(name, valSource);\n return obj;\n },\n getRegex: () => {\n return new RegExp(source, opt);\n },\n };\n return obj;\n}\nfunction cleanUrl(href) {\n try {\n href = encodeURI(href).replace(/%25/g, '%');\n }\n catch {\n return null;\n }\n return href;\n}\nconst noopTest = { exec: () => null };\nfunction splitCells(tableRow, count) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n const row = tableRow.replace(/\\|/g, (match, offset, str) => {\n let escaped = false;\n let curr = offset;\n while (--curr >= 0 && str[curr] === '\\\\')\n escaped = !escaped;\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n }\n else {\n // add space before unescaped |\n return ' |';\n }\n }), cells = row.split(/ \\|/);\n let i = 0;\n // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n if (!cells[0].trim()) {\n cells.shift();\n }\n if (cells.length > 0 && !cells[cells.length - 1].trim()) {\n cells.pop();\n }\n if (count) {\n if (cells.length > count) {\n cells.splice(count);\n }\n else {\n while (cells.length < count)\n cells.push('');\n }\n }\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n }\n return cells;\n}\n/**\n * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n * /c*$/ is vulnerable to REDOS.\n *\n * @param str\n * @param c\n * @param invert Remove suffix of non-c chars instead. Default falsey.\n */\nfunction rtrim(str, c, invert) {\n const l = str.length;\n if (l === 0) {\n return '';\n }\n // Length of suffix matching the invert condition.\n let suffLen = 0;\n // Step left until we fail to match the invert condition.\n while (suffLen < l) {\n const currChar = str.charAt(l - suffLen - 1);\n if (currChar === c && !invert) {\n suffLen++;\n }\n else if (currChar !== c && invert) {\n suffLen++;\n }\n else {\n break;\n }\n }\n return str.slice(0, l - suffLen);\n}\nfunction findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n let level = 0;\n for (let i = 0; i < str.length; i++) {\n if (str[i] === '\\\\') {\n i++;\n }\n else if (str[i] === b[0]) {\n level++;\n }\n else if (str[i] === b[1]) {\n level--;\n if (level < 0) {\n return i;\n }\n }\n }\n return -1;\n}\n\nfunction outputLink(cap, link, raw, lexer) {\n const href = link.href;\n const title = link.title ? escape$1(link.title) : null;\n const text = cap[1].replace(/\\\\([\\[\\]])/g, '$1');\n if (cap[0].charAt(0) !== '!') {\n lexer.state.inLink = true;\n const token = {\n type: 'link',\n raw,\n href,\n title,\n text,\n tokens: lexer.inlineTokens(text),\n };\n lexer.state.inLink = false;\n return token;\n }\n return {\n type: 'image',\n raw,\n href,\n title,\n text: escape$1(text),\n };\n}\nfunction indentCodeCompensation(raw, text) {\n const matchIndentToCode = raw.match(/^(\\s+)(?:```)/);\n if (matchIndentToCode === null) {\n return text;\n }\n const indentToCode = matchIndentToCode[1];\n return text\n .split('\\n')\n .map(node => {\n const matchIndentInNode = node.match(/^\\s+/);\n if (matchIndentInNode === null) {\n return node;\n }\n const [indentInNode] = matchIndentInNode;\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n return node;\n })\n .join('\\n');\n}\n/**\n * Tokenizer\n */\nclass _Tokenizer {\n options;\n rules; // set by the lexer\n lexer; // set by the lexer\n constructor(options) {\n this.options = options || _defaults;\n }\n space(src) {\n const cap = this.rules.block.newline.exec(src);\n if (cap && cap[0].length > 0) {\n return {\n type: 'space',\n raw: cap[0],\n };\n }\n }\n code(src) {\n const cap = this.rules.block.code.exec(src);\n if (cap) {\n const text = cap[0].replace(/^(?: {1,4}| {0,3}\\t)/gm, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic\n ? rtrim(text, '\\n')\n : text,\n };\n }\n }\n fences(src) {\n const cap = this.rules.block.fences.exec(src);\n if (cap) {\n const raw = cap[0];\n const text = indentCodeCompensation(raw, cap[3] || '');\n return {\n type: 'code',\n raw,\n lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, '$1') : cap[2],\n text,\n };\n }\n }\n heading(src) {\n const cap = this.rules.block.heading.exec(src);\n if (cap) {\n let text = cap[2].trim();\n // remove trailing #s\n if (/#$/.test(text)) {\n const trimmed = rtrim(text, '#');\n if (this.options.pedantic) {\n text = trimmed.trim();\n }\n else if (!trimmed || / $/.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text,\n tokens: this.lexer.inline(text),\n };\n }\n }\n hr(src) {\n const cap = this.rules.block.hr.exec(src);\n if (cap) {\n return {\n type: 'hr',\n raw: rtrim(cap[0], '\\n'),\n };\n }\n }\n blockquote(src) {\n const cap = this.rules.block.blockquote.exec(src);\n if (cap) {\n let lines = rtrim(cap[0], '\\n').split('\\n');\n let raw = '';\n let text = '';\n const tokens = [];\n while (lines.length > 0) {\n let inBlockquote = false;\n const currentLines = [];\n let i;\n for (i = 0; i < lines.length; i++) {\n // get lines up to a continuation\n if (/^ {0,3}>/.test(lines[i])) {\n currentLines.push(lines[i]);\n inBlockquote = true;\n }\n else if (!inBlockquote) {\n currentLines.push(lines[i]);\n }\n else {\n break;\n }\n }\n lines = lines.slice(i);\n const currentRaw = currentLines.join('\\n');\n const currentText = currentRaw\n // precede setext continuation with 4 spaces so it isn't a setext\n .replace(/\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g, '\\n $1')\n .replace(/^ {0,3}>[ \\t]?/gm, '');\n raw = raw ? `${raw}\\n${currentRaw}` : currentRaw;\n text = text ? `${text}\\n${currentText}` : currentText;\n // parse blockquote lines as top level tokens\n // merge paragraphs if this is a continuation\n const top = this.lexer.state.top;\n this.lexer.state.top = true;\n this.lexer.blockTokens(currentText, tokens, true);\n this.lexer.state.top = top;\n // if there is no continuation then we are done\n if (lines.length === 0) {\n break;\n }\n const lastToken = tokens[tokens.length - 1];\n if (lastToken?.type === 'code') {\n // blockquote continuation cannot be preceded by a code block\n break;\n }\n else if (lastToken?.type === 'blockquote') {\n // include continuation in nested blockquote\n const oldToken = lastToken;\n const newText = oldToken.raw + '\\n' + lines.join('\\n');\n const newToken = this.blockquote(newText);\n tokens[tokens.length - 1] = newToken;\n raw = raw.substring(0, raw.length - oldToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.text.length) + newToken.text;\n break;\n }\n else if (lastToken?.type === 'list') {\n // include continuation in nested list\n const oldToken = lastToken;\n const newText = oldToken.raw + '\\n' + lines.join('\\n');\n const newToken = this.list(newText);\n tokens[tokens.length - 1] = newToken;\n raw = raw.substring(0, raw.length - lastToken.raw.length) + newToken.raw;\n text = text.substring(0, text.length - oldToken.raw.length) + newToken.raw;\n lines = newText.substring(tokens[tokens.length - 1].raw.length).split('\\n');\n continue;\n }\n }\n return {\n type: 'blockquote',\n raw,\n tokens,\n text,\n };\n }\n }\n list(src) {\n let cap = this.rules.block.list.exec(src);\n if (cap) {\n let bull = cap[1].trim();\n const isordered = bull.length > 1;\n const list = {\n type: 'list',\n raw: '',\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: [],\n };\n bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n if (this.options.pedantic) {\n bull = isordered ? bull : '[*+-]';\n }\n // Get next list item\n const itemRegex = new RegExp(`^( {0,3}${bull})((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))`);\n let endsWithBlankLine = false;\n // Check if current bullet point can start a new List Item\n while (src) {\n let endEarly = false;\n let raw = '';\n let itemContents = '';\n if (!(cap = itemRegex.exec(src))) {\n break;\n }\n if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?)\n break;\n }\n raw = cap[0];\n src = src.substring(raw.length);\n let line = cap[2].split('\\n', 1)[0].replace(/^\\t+/, (t) => ' '.repeat(3 * t.length));\n let nextLine = src.split('\\n', 1)[0];\n let blankLine = !line.trim();\n let indent = 0;\n if (this.options.pedantic) {\n indent = 2;\n itemContents = line.trimStart();\n }\n else if (blankLine) {\n indent = cap[1].length + 1;\n }\n else {\n indent = cap[2].search(/[^ ]/); // Find first non-space char\n indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n itemContents = line.slice(indent);\n indent += cap[1].length;\n }\n if (blankLine && /^[ \\t]*$/.test(nextLine)) { // Items begin with at most one blank line\n raw += nextLine + '\\n';\n src = src.substring(nextLine.length + 1);\n endEarly = true;\n }\n if (!endEarly) {\n const nextBulletRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \\t][^\\\\n]*)?(?:\\\\n|$))`);\n const hrRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`);\n const fencesBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}(?:\\`\\`\\`|~~~)`);\n const headingBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}#`);\n const htmlBeginRegex = new RegExp(`^ {0,${Math.min(3, indent - 1)}}<(?:[a-z].*>|!--)`, 'i');\n // Check if following lines should be included in List Item\n while (src) {\n const rawLine = src.split('\\n', 1)[0];\n let nextLineWithoutTabs;\n nextLine = rawLine;\n // Re-align to follow commonmark nesting rules\n if (this.options.pedantic) {\n nextLine = nextLine.replace(/^ {1,4}(?=( {4})*[^ ])/g, ' ');\n nextLineWithoutTabs = nextLine;\n }\n else {\n nextLineWithoutTabs = nextLine.replace(/\\t/g, ' ');\n }\n // End list item if found code fences\n if (fencesBeginRegex.test(nextLine)) {\n break;\n }\n // End list item if found start of new heading\n if (headingBeginRegex.test(nextLine)) {\n break;\n }\n // End list item if found start of html block\n if (htmlBeginRegex.test(nextLine)) {\n break;\n }\n // End list item if found start of new bullet\n if (nextBulletRegex.test(nextLine)) {\n break;\n }\n // Horizontal rule found\n if (hrRegex.test(nextLine)) {\n break;\n }\n if (nextLineWithoutTabs.search(/[^ ]/) >= indent || !nextLine.trim()) { // Dedent if possible\n itemContents += '\\n' + nextLineWithoutTabs.slice(indent);\n }\n else {\n // not enough indentation\n if (blankLine) {\n break;\n }\n // paragraph continuation unless last line was a different block level element\n if (line.replace(/\\t/g, ' ').search(/[^ ]/) >= 4) { // indented code block\n break;\n }\n if (fencesBeginRegex.test(line)) {\n break;\n }\n if (headingBeginRegex.test(line)) {\n break;\n }\n if (hrRegex.test(line)) {\n break;\n }\n itemContents += '\\n' + nextLine;\n }\n if (!blankLine && !nextLine.trim()) { // Check if current line is blank\n blankLine = true;\n }\n raw += rawLine + '\\n';\n src = src.substring(rawLine.length + 1);\n line = nextLineWithoutTabs.slice(indent);\n }\n }\n if (!list.loose) {\n // If the previous item ended with a blank line, the list is loose\n if (endsWithBlankLine) {\n list.loose = true;\n }\n else if (/\\n[ \\t]*\\n[ \\t]*$/.test(raw)) {\n endsWithBlankLine = true;\n }\n }\n let istask = null;\n let ischecked;\n // Check for task list items\n if (this.options.gfm) {\n istask = /^\\[[ xX]\\] /.exec(itemContents);\n if (istask) {\n ischecked = istask[0] !== '[ ] ';\n itemContents = itemContents.replace(/^\\[[ xX]\\] +/, '');\n }\n }\n list.items.push({\n type: 'list_item',\n raw,\n task: !!istask,\n checked: ischecked,\n loose: false,\n text: itemContents,\n tokens: [],\n });\n list.raw += raw;\n }\n // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n list.items[list.items.length - 1].raw = list.items[list.items.length - 1].raw.trimEnd();\n list.items[list.items.length - 1].text = list.items[list.items.length - 1].text.trimEnd();\n list.raw = list.raw.trimEnd();\n // Item child tokens handled here at end because we needed to have the final item to trim it first\n for (let i = 0; i < list.items.length; i++) {\n this.lexer.state.top = false;\n list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);\n if (!list.loose) {\n // Check if list should be loose\n const spacers = list.items[i].tokens.filter(t => t.type === 'space');\n const hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => /\\n.*\\n/.test(t.raw));\n list.loose = hasMultipleLineBreaks;\n }\n }\n // Set all items to loose if list is loose\n if (list.loose) {\n for (let i = 0; i < list.items.length; i++) {\n list.items[i].loose = true;\n }\n }\n return list;\n }\n }\n html(src) {\n const cap = this.rules.block.html.exec(src);\n if (cap) {\n const token = {\n type: 'html',\n block: true,\n raw: cap[0],\n pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style',\n text: cap[0],\n };\n return token;\n }\n }\n def(src) {\n const cap = this.rules.block.def.exec(src);\n if (cap) {\n const tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n const href = cap[2] ? cap[2].replace(/^<(.*)>$/, '$1').replace(this.rules.inline.anyPunctuation, '$1') : '';\n const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, '$1') : cap[3];\n return {\n type: 'def',\n tag,\n raw: cap[0],\n href,\n title,\n };\n }\n }\n table(src) {\n const cap = this.rules.block.table.exec(src);\n if (!cap) {\n return;\n }\n if (!/[:|]/.test(cap[2])) {\n // delimiter row must have a pipe (|) or colon (:) otherwise it is a setext heading\n return;\n }\n const headers = splitCells(cap[1]);\n const aligns = cap[2].replace(/^\\||\\| *$/g, '').split('|');\n const rows = cap[3] && cap[3].trim() ? cap[3].replace(/\\n[ \\t]*$/, '').split('\\n') : [];\n const item = {\n type: 'table',\n raw: cap[0],\n header: [],\n align: [],\n rows: [],\n };\n if (headers.length !== aligns.length) {\n // header and align columns must be equal, rows can be different.\n return;\n }\n for (const align of aligns) {\n if (/^ *-+: *$/.test(align)) {\n item.align.push('right');\n }\n else if (/^ *:-+: *$/.test(align)) {\n item.align.push('center');\n }\n else if (/^ *:-+ *$/.test(align)) {\n item.align.push('left');\n }\n else {\n item.align.push(null);\n }\n }\n for (let i = 0; i < headers.length; i++) {\n item.header.push({\n text: headers[i],\n tokens: this.lexer.inline(headers[i]),\n header: true,\n align: item.align[i],\n });\n }\n for (const row of rows) {\n item.rows.push(splitCells(row, item.header.length).map((cell, i) => {\n return {\n text: cell,\n tokens: this.lexer.inline(cell),\n header: false,\n align: item.align[i],\n };\n }));\n }\n return item;\n }\n lheading(src) {\n const cap = this.rules.block.lheading.exec(src);\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1],\n tokens: this.lexer.inline(cap[1]),\n };\n }\n }\n paragraph(src) {\n const cap = this.rules.block.paragraph.exec(src);\n if (cap) {\n const text = cap[1].charAt(cap[1].length - 1) === '\\n'\n ? cap[1].slice(0, -1)\n : cap[1];\n return {\n type: 'paragraph',\n raw: cap[0],\n text,\n tokens: this.lexer.inline(text),\n };\n }\n }\n text(src) {\n const cap = this.rules.block.text.exec(src);\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n tokens: this.lexer.inline(cap[0]),\n };\n }\n }\n escape(src) {\n const cap = this.rules.inline.escape.exec(src);\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: escape$1(cap[1]),\n };\n }\n }\n tag(src) {\n const cap = this.rules.inline.tag.exec(src);\n if (cap) {\n if (!this.lexer.state.inLink && /^<a /i.test(cap[0])) {\n this.lexer.state.inLink = true;\n }\n else if (this.lexer.state.inLink && /^<\\/a>/i.test(cap[0])) {\n this.lexer.state.inLink = false;\n }\n if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n this.lexer.state.inRawBlock = true;\n }\n else if (this.lexer.state.inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n this.lexer.state.inRawBlock = false;\n }\n return {\n type: 'html',\n raw: cap[0],\n inLink: this.lexer.state.inLink,\n inRawBlock: this.lexer.state.inRawBlock,\n block: false,\n text: cap[0],\n };\n }\n }\n link(src) {\n const cap = this.rules.inline.link.exec(src);\n if (cap) {\n const trimmedUrl = cap[2].trim();\n if (!this.options.pedantic && /^</.test(trimmedUrl)) {\n // commonmark requires matching angle brackets\n if (!(/>$/.test(trimmedUrl))) {\n return;\n }\n // ending angle bracket cannot be escaped\n const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n }\n else {\n // find closing parenthesis\n const lastParenIndex = findClosingBracket(cap[2], '()');\n if (lastParenIndex > -1) {\n const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n const linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n let href = cap[2];\n let title = '';\n if (this.options.pedantic) {\n // split pedantic href and title\n const link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n if (link) {\n href = link[1];\n title = link[3];\n }\n }\n else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n href = href.trim();\n if (/^</.test(href)) {\n if (this.options.pedantic && !(/>$/.test(trimmedUrl))) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n }\n else {\n href = href.slice(1, -1);\n }\n }\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline.anyPunctuation, '$1') : href,\n title: title ? title.replace(this.rules.inline.anyPunctuation, '$1') : title,\n }, cap[0], this.lexer);\n }\n }\n reflink(src, links) {\n let cap;\n if ((cap = this.rules.inline.reflink.exec(src))\n || (cap = this.rules.inline.nolink.exec(src))) {\n const linkString = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n const link = links[linkString.toLowerCase()];\n if (!link) {\n const text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text,\n };\n }\n return outputLink(cap, link, cap[0], this.lexer);\n }\n }\n emStrong(src, maskedSrc, prevChar = '') {\n let match = this.rules.inline.emStrongLDelim.exec(src);\n if (!match)\n return;\n // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n if (match[3] && prevChar.match(/[\\p{L}\\p{N}]/u))\n return;\n const nextChar = match[1] || match[2] || '';\n if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n // unicode Regex counts emoji as 1 char; spread into array for proper count (used multiple times below)\n const lLength = [...match[0]].length - 1;\n let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n const endReg = match[0][0] === '*' ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;\n endReg.lastIndex = 0;\n // Clip maskedSrc to same section of string as src (move to lexer?)\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n if (!rDelim)\n continue; // skip single * in __abc*abc__\n rLength = [...rDelim].length;\n if (match[3] || match[4]) { // found another Left Delim\n delimTotal += rLength;\n continue;\n }\n else if (match[5] || match[6]) { // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n delimTotal -= rLength;\n if (delimTotal > 0)\n continue; // Haven't found enough closing delimiters\n // Remove extra characters. *a*** -> *a*\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n // char length can be >1 for unicode characters;\n const lastCharLength = [...match[0]][0].length;\n const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n // Create `em` if smallest delimiter has odd char count. *a***\n if (Math.min(lLength, rLength) % 2) {\n const text = raw.slice(1, -1);\n return {\n type: 'em',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n // Create 'strong' if smallest delimiter has even char count. **a***\n const text = raw.slice(2, -2);\n return {\n type: 'strong',\n raw,\n text,\n tokens: this.lexer.inlineTokens(text),\n };\n }\n }\n }\n codespan(src) {\n const cap = this.rules.inline.code.exec(src);\n if (cap) {\n let text = cap[2].replace(/\\n/g, ' ');\n const hasNonSpaceChars = /[^ ]/.test(text);\n const hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n text = escape$1(text, true);\n return {\n type: 'codespan',\n raw: cap[0],\n text,\n };\n }\n }\n br(src) {\n const cap = this.rules.inline.br.exec(src);\n if (cap) {\n return {\n type: 'br',\n raw: cap[0],\n };\n }\n }\n del(src) {\n const cap = this.rules.inline.del.exec(src);\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2],\n tokens: this.lexer.inlineTokens(cap[2]),\n };\n }\n }\n autolink(src) {\n const cap = this.rules.inline.autolink.exec(src);\n if (cap) {\n let text, href;\n if (cap[2] === '@') {\n text = escape$1(cap[1]);\n href = 'mailto:' + text;\n }\n else {\n text = escape$1(cap[1]);\n href = text;\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text,\n },\n ],\n };\n }\n }\n url(src) {\n let cap;\n if (cap = this.rules.inline.url.exec(src)) {\n let text, href;\n if (cap[2] === '@') {\n text = escape$1(cap[0]);\n href = 'mailto:' + text;\n }\n else {\n // do extended autolink path validation\n let prevCapZero;\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? '';\n } while (prevCapZero !== cap[0]);\n text = escape$1(cap[0]);\n if (cap[1] === 'www.') {\n href = 'http://' + cap[0];\n }\n else {\n href = cap[0];\n }\n }\n return {\n type: 'link',\n raw: cap[0],\n text,\n href,\n tokens: [\n {\n type: 'text',\n raw: text,\n text,\n },\n ],\n };\n }\n }\n inlineText(src) {\n const cap = this.rules.inline.text.exec(src);\n if (cap) {\n let text;\n if (this.lexer.state.inRawBlock) {\n text = cap[0];\n }\n else {\n text = escape$1(cap[0]);\n }\n return {\n type: 'text',\n raw: cap[0],\n text,\n };\n }\n }\n}\n\n/**\n * Block-Level Grammar\n */\nconst newline = /^(?:[ \\t]*(?:\\n|$))+/;\nconst blockCode = /^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/;\nconst fences = /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/;\nconst hr = /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/;\nconst heading = /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/;\nconst bullet = /(?:[*+-]|\\d{1,9}[.)])/;\nconst lheading = edit(/^(?!bull |blockCode|fences|blockquote|heading|html)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/)\n .replace(/bull/g, bullet) // lists can interrupt\n .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code blocks can interrupt\n .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n .replace(/heading/g, / {0,3}#{1,6}/) // ATX heading can interrupt\n .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n .getRegex();\nconst _paragraph = /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/;\nconst blockText = /^[^\\n]+/;\nconst _blockLabel = /(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/;\nconst def = edit(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/)\n .replace('label', _blockLabel)\n .replace('title', /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/)\n .getRegex();\nconst list = edit(/^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/)\n .replace(/bull/g, bullet)\n .getRegex();\nconst _tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n + '|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title'\n + '|tr|track|ul';\nconst _comment = /<!--(?:-?>|[\\s\\S]*?(?:-->|$))/;\nconst html = edit('^ {0,3}(?:' // optional indentation\n + '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n + '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n + '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n + '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n + '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (6)\n + '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) open tag\n + '|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) closing tag\n + ')', 'i')\n .replace('comment', _comment)\n .replace('tag', _tag)\n .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n .getRegex();\nconst paragraph = edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\nconst blockquote = edit(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/)\n .replace('paragraph', paragraph)\n .getRegex();\n/**\n * Normal Block Grammar\n */\nconst blockNormal = {\n blockquote,\n code: blockCode,\n def,\n fences,\n heading,\n hr,\n html,\n lheading,\n list,\n newline,\n paragraph,\n table: noopTest,\n text: blockText,\n};\n/**\n * GFM Block Grammar\n */\nconst gfmTable = edit('^ *([^\\\\n ].*)\\\\n' // Header\n + ' {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)' // Align\n + '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)') // Cells\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('blockquote', ' {0,3}>')\n .replace('code', '(?: {4}| {0,3}\\t)[^\\\\n]')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\nconst blockGfm = {\n ...blockNormal,\n table: gfmTable,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n .replace('table', gfmTable) // interrupt paragraphs with table\n .replace('blockquote', ' {0,3}>')\n .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n')\n .replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)')\n .replace('tag', _tag) // pars can be interrupted by type (6) html blocks\n .getRegex(),\n};\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\nconst blockPedantic = {\n ...blockNormal,\n html: edit('^ *(?:comment *(?:\\\\n|\\\\s*$)'\n + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n .replace('comment', _comment)\n .replace(/tag/g, '(?!(?:'\n + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n .getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest, // fences not supported\n lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n paragraph: edit(_paragraph)\n .replace('hr', hr)\n .replace('heading', ' *#{1,6} *[^\\n]')\n .replace('lheading', lheading)\n .replace('|table', '')\n .replace('blockquote', ' {0,3}>')\n .replace('|fences', '')\n .replace('|list', '')\n .replace('|html', '')\n .replace('|tag', '')\n .getRegex(),\n};\n/**\n * Inline-Level Grammar\n */\nconst escape = /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/;\nconst inlineCode = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\nconst br = /^( {2,}|\\\\)\\n(?!\\s*$)/;\nconst inlineText = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/;\n// list of unicode punctuation marks, plus any missing characters from CommonMark spec\nconst _punctuation = '\\\\p{P}\\\\p{S}';\nconst punctuation = edit(/^((?![*_])[\\spunctuation])/, 'u')\n .replace(/punctuation/g, _punctuation).getRegex();\n// sequences em should skip over [title](link), `code`, <html>\nconst blockSkip = /\\[[^[\\]]*?\\]\\((?:\\\\.|[^\\\\\\(\\)]|\\((?:\\\\.|[^\\\\\\(\\)])*\\))*\\)|`[^`]*?`|<[^<>]*?>/g;\nconst emStrongLDelim = edit(/^(?:\\*+(?:((?!\\*)[punct])|[^\\s*]))|^_+(?:((?!_)[punct])|([^\\s_]))/, 'u')\n .replace(/punct/g, _punctuation)\n .getRegex();\nconst emStrongRDelimAst = edit('^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)' // Skip orphan inside strong\n + '|[^*]+(?=[^*])' // Consume to delim\n + '|(?!\\\\*)[punct](\\\\*+)(?=[\\\\s]|$)' // (1) #*** can only be a Right Delimiter\n + '|[^punct\\\\s](\\\\*+)(?!\\\\*)(?=[punct\\\\s]|$)' // (2) a***#, a*** can only be a Right Delimiter\n + '|(?!\\\\*)[punct\\\\s](\\\\*+)(?=[^punct\\\\s])' // (3) #***a, ***a can only be Left Delimiter\n + '|[\\\\s](\\\\*+)(?!\\\\*)(?=[punct])' // (4) ***# can only be Left Delimiter\n + '|(?!\\\\*)[punct](\\\\*+)(?!\\\\*)(?=[punct])' // (5) #***# can be either Left or Right Delimiter\n + '|[^punct\\\\s](\\\\*+)(?=[^punct\\\\s])', 'gu') // (6) a***a can be either Left or Right Delimiter\n .replace(/punct/g, _punctuation)\n .getRegex();\n// (6) Not allowed for _\nconst emStrongRDelimUnd = edit('^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)' // Skip orphan inside strong\n + '|[^_]+(?=[^_])' // Consume to delim\n + '|(?!_)[punct](_+)(?=[\\\\s]|$)' // (1) #___ can only be a Right Delimiter\n + '|[^punct\\\\s](_+)(?!_)(?=[punct\\\\s]|$)' // (2) a___#, a___ can only be a Right Delimiter\n + '|(?!_)[punct\\\\s](_+)(?=[^punct\\\\s])' // (3) #___a, ___a can only be Left Delimiter\n + '|[\\\\s](_+)(?!_)(?=[punct])' // (4) ___# can only be Left Delimiter\n + '|(?!_)[punct](_+)(?!_)(?=[punct])', 'gu') // (5) #___# can be either Left or Right Delimiter\n .replace(/punct/g, _punctuation)\n .getRegex();\nconst anyPunctuation = edit(/\\\\([punct])/, 'gu')\n .replace(/punct/g, _punctuation)\n .getRegex();\nconst autolink = edit(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/)\n .replace('scheme', /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/)\n .replace('email', /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/)\n .getRegex();\nconst _inlineComment = edit(_comment).replace('(?:-->|$)', '-->').getRegex();\nconst tag = edit('^comment'\n + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>') // CDATA section\n .replace('comment', _inlineComment)\n .replace('attribute', /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/)\n .getRegex();\nconst _inlineLabel = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\nconst link = edit(/^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/)\n .replace('label', _inlineLabel)\n .replace('href', /<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/)\n .replace('title', /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/)\n .getRegex();\nconst reflink = edit(/^!?\\[(label)\\]\\[(ref)\\]/)\n .replace('label', _inlineLabel)\n .replace('ref', _blockLabel)\n .getRegex();\nconst nolink = edit(/^!?\\[(ref)\\](?:\\[\\])?/)\n .replace('ref', _blockLabel)\n .getRegex();\nconst reflinkSearch = edit('reflink|nolink(?!\\\\()', 'g')\n .replace('reflink', reflink)\n .replace('nolink', nolink)\n .getRegex();\n/**\n * Normal Inline Grammar\n */\nconst inlineNormal = {\n _backpedal: noopTest, // only used for GFM url\n anyPunctuation,\n autolink,\n blockSkip,\n br,\n code: inlineCode,\n del: noopTest,\n emStrongLDelim,\n emStrongRDelimAst,\n emStrongRDelimUnd,\n escape,\n link,\n nolink,\n punctuation,\n reflink,\n reflinkSearch,\n tag,\n text: inlineText,\n url: noopTest,\n};\n/**\n * Pedantic Inline Grammar\n */\nconst inlinePedantic = {\n ...inlineNormal,\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/)\n .replace('label', _inlineLabel)\n .getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n .replace('label', _inlineLabel)\n .getRegex(),\n};\n/**\n * GFM Inline Grammar\n */\nconst inlineGfm = {\n ...inlineNormal,\n escape: edit(escape).replace('])', '~|])').getRegex(),\n url: edit(/^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/, 'i')\n .replace('email', /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/)\n .getRegex(),\n _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])((?:\\\\.|[^\\\\])*?(?:\\\\.|[^\\s~\\\\]))\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/,\n};\n/**\n * GFM + Line Breaks Inline Grammar\n */\nconst inlineBreaks = {\n ...inlineGfm,\n br: edit(br).replace('{2,}', '*').getRegex(),\n text: edit(inlineGfm.text)\n .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n .replace(/\\{2,\\}/g, '*')\n .getRegex(),\n};\n/**\n * exports\n */\nconst block = {\n normal: blockNormal,\n gfm: blockGfm,\n pedantic: blockPedantic,\n};\nconst inline = {\n normal: inlineNormal,\n gfm: inlineGfm,\n breaks: inlineBreaks,\n pedantic: inlinePedantic,\n};\n\n/**\n * Block Lexer\n */\nclass _Lexer {\n tokens;\n options;\n state;\n tokenizer;\n inlineQueue;\n constructor(options) {\n // TokenList cannot be created in one go\n this.tokens = [];\n this.tokens.links = Object.create(null);\n this.options = options || _defaults;\n this.options.tokenizer = this.options.tokenizer || new _Tokenizer();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n this.tokenizer.lexer = this;\n this.inlineQueue = [];\n this.state = {\n inLink: false,\n inRawBlock: false,\n top: true,\n };\n const rules = {\n block: block.normal,\n inline: inline.normal,\n };\n if (this.options.pedantic) {\n rules.block = block.pedantic;\n rules.inline = inline.pedantic;\n }\n else if (this.options.gfm) {\n rules.block = block.gfm;\n if (this.options.breaks) {\n rules.inline = inline.breaks;\n }\n else {\n rules.inline = inline.gfm;\n }\n }\n this.tokenizer.rules = rules;\n }\n /**\n * Expose Rules\n */\n static get rules() {\n return {\n block,\n inline,\n };\n }\n /**\n * Static Lex Method\n */\n static lex(src, options) {\n const lexer = new _Lexer(options);\n return lexer.lex(src);\n }\n /**\n * Static Lex Inline Method\n */\n static lexInline(src, options) {\n const lexer = new _Lexer(options);\n return lexer.inlineTokens(src);\n }\n /**\n * Preprocessing\n */\n lex(src) {\n src = src\n .replace(/\\r\\n|\\r/g, '\\n');\n this.blockTokens(src, this.tokens);\n for (let i = 0; i < this.inlineQueue.length; i++) {\n const next = this.inlineQueue[i];\n this.inlineTokens(next.src, next.tokens);\n }\n this.inlineQueue = [];\n return this.tokens;\n }\n blockTokens(src, tokens = [], lastParagraphClipped = false) {\n if (this.options.pedantic) {\n src = src.replace(/\\t/g, ' ').replace(/^ +$/gm, '');\n }\n let token;\n let lastToken;\n let cutSrc;\n while (src) {\n if (this.options.extensions\n && this.options.extensions.block\n && this.options.extensions.block.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n // newline\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n if (token.raw.length === 1 && tokens.length > 0) {\n // if there's a single \\n as a spacer, it's terminating the last line,\n // so move it there so that we don't get unnecessary paragraph tags\n tokens[tokens.length - 1].raw += '\\n';\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // code\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n // An indented code block cannot interrupt a paragraph.\n if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // fences\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // heading\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // hr\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // blockquote\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // list\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // html\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // def\n if (token = this.tokenizer.def(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.raw;\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n }\n else if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title,\n };\n }\n continue;\n }\n // table (gfm)\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // lheading\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // top-level paragraph\n // prevent paragraph consuming extensions by clipping 'src' to extension start\n cutSrc = src;\n if (this.options.extensions && this.options.extensions.startBlock) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startBlock.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n lastToken = tokens[tokens.length - 1];\n if (lastParagraphClipped && lastToken?.type === 'paragraph') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n }\n else {\n tokens.push(token);\n }\n lastParagraphClipped = (cutSrc.length !== src.length);\n src = src.substring(token.raw.length);\n continue;\n }\n // text\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n this.state.top = true;\n return tokens;\n }\n inline(src, tokens = []) {\n this.inlineQueue.push({ src, tokens });\n return tokens;\n }\n /**\n * Lexing/Compiling\n */\n inlineTokens(src, tokens = []) {\n let token, lastToken, cutSrc;\n // String with links masked to avoid interference with em and strong\n let maskedSrc = src;\n let match;\n let keepPrevChar, prevChar;\n // Mask out reflinks\n if (this.tokens.links) {\n const links = Object.keys(this.tokens.links);\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + 'a'.repeat(match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n }\n // Mask out other blocks\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + 'a'.repeat(match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n }\n // Mask out escaped characters\n while ((match = this.tokenizer.rules.inline.anyPunctuation.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);\n }\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n keepPrevChar = false;\n // extensions\n if (this.options.extensions\n && this.options.extensions.inline\n && this.options.extensions.inline.some((extTokenizer) => {\n if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n return false;\n })) {\n continue;\n }\n // escape\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // tag\n if (token = this.tokenizer.tag(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // link\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // reflink, nolink\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n // em & strong\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // code\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // br\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // del (gfm)\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // autolink\n if (token = this.tokenizer.autolink(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // url (gfm)\n if (!this.state.inLink && (token = this.tokenizer.url(src))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n }\n // text\n // prevent inlineText consuming extensions by clipping 'src' to extension start\n cutSrc = src;\n if (this.options.extensions && this.options.extensions.startInline) {\n let startIndex = Infinity;\n const tempSrc = src.slice(1);\n let tempStart;\n this.options.extensions.startInline.forEach((getStartIndex) => {\n tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n }\n if (token = this.tokenizer.inlineText(cutSrc)) {\n src = src.substring(token.raw.length);\n if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n keepPrevChar = true;\n lastToken = tokens[tokens.length - 1];\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n }\n else {\n tokens.push(token);\n }\n continue;\n }\n if (src) {\n const errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n if (this.options.silent) {\n console.error(errMsg);\n break;\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n return tokens;\n }\n}\n\n/**\n * Renderer\n */\nclass _Renderer {\n options;\n parser; // set by the parser\n constructor(options) {\n this.options = options || _defaults;\n }\n space(token) {\n return '';\n }\n code({ text, lang, escaped }) {\n const langString = (lang || '').match(/^\\S*/)?.[0];\n const code = text.replace(/\\n$/, '') + '\\n';\n if (!langString) {\n return '<pre><code>'\n + (escaped ? code : escape$1(code, true))\n + '</code></pre>\\n';\n }\n return '<pre><code class=\"language-'\n + escape$1(langString)\n + '\">'\n + (escaped ? code : escape$1(code, true))\n + '</code></pre>\\n';\n }\n blockquote({ tokens }) {\n const body = this.parser.parse(tokens);\n return `<blockquote>\\n${body}</blockquote>\\n`;\n }\n html({ text }) {\n return text;\n }\n heading({ tokens, depth }) {\n return `<h${depth}>${this.parser.parseInline(tokens)}</h${depth}>\\n`;\n }\n hr(token) {\n return '<hr>\\n';\n }\n list(token) {\n const ordered = token.ordered;\n const start = token.start;\n let body = '';\n for (let j = 0; j < token.items.length; j++) {\n const item = token.items[j];\n body += this.listitem(item);\n }\n const type = ordered ? 'ol' : 'ul';\n const startAttr = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n return '<' + type + startAttr + '>\\n' + body + '</' + type + '>\\n';\n }\n listitem(item) {\n let itemBody = '';\n if (item.task) {\n const checkbox = this.checkbox({ checked: !!item.checked });\n if (item.loose) {\n if (item.tokens.length > 0 && item.tokens[0].type === 'paragraph') {\n item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;\n }\n }\n else {\n item.tokens.unshift({\n type: 'text',\n raw: checkbox + ' ',\n text: checkbox + ' ',\n });\n }\n }\n else {\n itemBody += checkbox + ' ';\n }\n }\n itemBody += this.parser.parse(item.tokens, !!item.loose);\n return `<li>${itemBody}</li>\\n`;\n }\n checkbox({ checked }) {\n return '<input '\n + (checked ? 'checked=\"\" ' : '')\n + 'disabled=\"\" type=\"checkbox\">';\n }\n paragraph({ tokens }) {\n return `<p>${this.parser.parseInline(tokens)}</p>\\n`;\n }\n table(token) {\n let header = '';\n // header\n let cell = '';\n for (let j = 0; j < token.header.length; j++) {\n cell += this.tablecell(token.header[j]);\n }\n header += this.tablerow({ text: cell });\n let body = '';\n for (let j = 0; j < token.rows.length; j++) {\n const row = token.rows[j];\n cell = '';\n for (let k = 0; k < row.length; k++) {\n cell += this.tablecell(row[k]);\n }\n body += this.tablerow({ text: cell });\n }\n if (body)\n body = `<tbody>${body}</tbody>`;\n return '<table>\\n'\n + '<thead>\\n'\n + header\n + '</thead>\\n'\n + body\n + '</table>\\n';\n }\n tablerow({ text }) {\n return `<tr>\\n${text}</tr>\\n`;\n }\n tablecell(token) {\n const content = this.parser.parseInline(token.tokens);\n const type = token.header ? 'th' : 'td';\n const tag = token.align\n ? `<${type} align=\"${token.align}\">`\n : `<${type}>`;\n return tag + content + `</${type}>\\n`;\n }\n /**\n * span level renderer\n */\n strong({ tokens }) {\n return `<strong>${this.parser.parseInline(tokens)}</strong>`;\n }\n em({ tokens }) {\n return `<em>${this.parser.parseInline(tokens)}</em>`;\n }\n codespan({ text }) {\n return `<code>${text}</code>`;\n }\n br(token) {\n return '<br>';\n }\n del({ tokens }) {\n return `<del>${this.parser.parseInline(tokens)}</del>`;\n }\n link({ href, title, tokens }) {\n const text = this.parser.parseInline(tokens);\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return text;\n }\n href = cleanHref;\n let out = '<a href=\"' + href + '\"';\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n out += '>' + text + '</a>';\n return out;\n }\n image({ href, title, text }) {\n const cleanHref = cleanUrl(href);\n if (cleanHref === null) {\n return text;\n }\n href = cleanHref;\n let out = `<img src=\"${href}\" alt=\"${text}\"`;\n if (title) {\n out += ` title=\"${title}\"`;\n }\n out += '>';\n return out;\n }\n text(token) {\n return 'tokens' in token && token.tokens ? this.parser.parseInline(token.tokens) : token.text;\n }\n}\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nclass _TextRenderer {\n // no need for block level renderers\n strong({ text }) {\n return text;\n }\n em({ text }) {\n return text;\n }\n codespan({ text }) {\n return text;\n }\n del({ text }) {\n return text;\n }\n html({ text }) {\n return text;\n }\n text({ text }) {\n return text;\n }\n link({ text }) {\n return '' + text;\n }\n image({ text }) {\n return '' + text;\n }\n br() {\n return '';\n }\n}\n\n/**\n * Parsing & Compiling\n */\nclass _Parser {\n options;\n renderer;\n textRenderer;\n constructor(options) {\n this.options = options || _defaults;\n this.options.renderer = this.options.renderer || new _Renderer();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.renderer.parser = this;\n this.textRenderer = new _TextRenderer();\n }\n /**\n * Static Parse Method\n */\n static parse(tokens, options) {\n const parser = new _Parser(options);\n return parser.parse(tokens);\n }\n /**\n * Static Parse Inline Method\n */\n static parseInline(tokens, options) {\n const parser = new _Parser(options);\n return parser.parseInline(tokens);\n }\n /**\n * Parse Loop\n */\n parse(tokens, top = true) {\n let out = '';\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n // Run any renderer extensions\n if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[anyToken.type]) {\n const genericToken = anyToken;\n const ret = this.options.extensions.renderers[genericToken.type].call({ parser: this }, genericToken);\n if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'paragraph', 'text'].includes(genericToken.type)) {\n out += ret || '';\n continue;\n }\n }\n const token = anyToken;\n switch (token.type) {\n case 'space': {\n out += this.renderer.space(token);\n continue;\n }\n case 'hr': {\n out += this.renderer.hr(token);\n continue;\n }\n case 'heading': {\n out += this.renderer.heading(token);\n continue;\n }\n case 'code': {\n out += this.renderer.code(token);\n continue;\n }\n case 'table': {\n out += this.renderer.table(token);\n continue;\n }\n case 'blockquote': {\n out += this.renderer.blockquote(token);\n continue;\n }\n case 'list': {\n out += this.renderer.list(token);\n continue;\n }\n case 'html': {\n out += this.renderer.html(token);\n continue;\n }\n case 'paragraph': {\n out += this.renderer.paragraph(token);\n continue;\n }\n case 'text': {\n let textToken = token;\n let body = this.renderer.text(textToken);\n while (i + 1 < tokens.length && tokens[i + 1].type === 'text') {\n textToken = tokens[++i];\n body += '\\n' + this.renderer.text(textToken);\n }\n if (top) {\n out += this.renderer.paragraph({\n type: 'paragraph',\n raw: body,\n text: body,\n tokens: [{ type: 'text', raw: body, text: body }],\n });\n }\n else {\n out += body;\n }\n continue;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '';\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n /**\n * Parse Inline Tokens\n */\n parseInline(tokens, renderer) {\n renderer = renderer || this.renderer;\n let out = '';\n for (let i = 0; i < tokens.length; i++) {\n const anyToken = tokens[i];\n // Run any renderer extensions\n if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[anyToken.type]) {\n const ret = this.options.extensions.renderers[anyToken.type].call({ parser: this }, anyToken);\n if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(anyToken.type)) {\n out += ret || '';\n continue;\n }\n }\n const token = anyToken;\n switch (token.type) {\n case 'escape': {\n out += renderer.text(token);\n break;\n }\n case 'html': {\n out += renderer.html(token);\n break;\n }\n case 'link': {\n out += renderer.link(token);\n break;\n }\n case 'image': {\n out += renderer.image(token);\n break;\n }\n case 'strong': {\n out += renderer.strong(token);\n break;\n }\n case 'em': {\n out += renderer.em(token);\n break;\n }\n case 'codespan': {\n out += renderer.codespan(token);\n break;\n }\n case 'br': {\n out += renderer.br(token);\n break;\n }\n case 'del': {\n out += renderer.del(token);\n break;\n }\n case 'text': {\n out += renderer.text(token);\n break;\n }\n default: {\n const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n if (this.options.silent) {\n console.error(errMsg);\n return '';\n }\n else {\n throw new Error(errMsg);\n }\n }\n }\n }\n return out;\n }\n}\n\nclass _Hooks {\n options;\n block;\n constructor(options) {\n this.options = options || _defaults;\n }\n static passThroughHooks = new Set([\n 'preprocess',\n 'postprocess',\n 'processAllTokens',\n ]);\n /**\n * Process markdown before marked\n */\n preprocess(markdown) {\n return markdown;\n }\n /**\n * Process HTML after marked is finished\n */\n postprocess(html) {\n return html;\n }\n /**\n * Process all tokens before walk tokens\n */\n processAllTokens(tokens) {\n return tokens;\n }\n /**\n * Provide function to tokenize markdown\n */\n provideLexer() {\n return this.block ? _Lexer.lex : _Lexer.lexInline;\n }\n /**\n * Provide function to parse tokens\n */\n provideParser() {\n return this.block ? _Parser.parse : _Parser.parseInline;\n }\n}\n\nclass Marked {\n defaults = _getDefaults();\n options = this.setOptions;\n parse = this.parseMarkdown(true);\n parseInline = this.parseMarkdown(false);\n Parser = _Parser;\n Renderer = _Renderer;\n TextRenderer = _TextRenderer;\n Lexer = _Lexer;\n Tokenizer = _Tokenizer;\n Hooks = _Hooks;\n constructor(...args) {\n this.use(...args);\n }\n /**\n * Run callback for every token\n */\n walkTokens(tokens, callback) {\n let values = [];\n for (const token of tokens) {\n values = values.concat(callback.call(this, token));\n switch (token.type) {\n case 'table': {\n const tableToken = token;\n for (const cell of tableToken.header) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n for (const row of tableToken.rows) {\n for (const cell of row) {\n values = values.concat(this.walkTokens(cell.tokens, callback));\n }\n }\n break;\n }\n case 'list': {\n const listToken = token;\n values = values.concat(this.walkTokens(listToken.items, callback));\n break;\n }\n default: {\n const genericToken = token;\n if (this.defaults.extensions?.childTokens?.[genericToken.type]) {\n this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => {\n const tokens = genericToken[childTokens].flat(Infinity);\n values = values.concat(this.walkTokens(tokens, callback));\n });\n }\n else if (genericToken.tokens) {\n values = values.concat(this.walkTokens(genericToken.tokens, callback));\n }\n }\n }\n }\n return values;\n }\n use(...args) {\n const extensions = this.defaults.extensions || { renderers: {}, childTokens: {} };\n args.forEach((pack) => {\n // copy options to new object\n const opts = { ...pack };\n // set async to true if it was set to true before\n opts.async = this.defaults.async || opts.async || false;\n // ==-- Parse \"addon\" extensions --== //\n if (pack.extensions) {\n pack.extensions.forEach((ext) => {\n if (!ext.name) {\n throw new Error('extension name required');\n }\n if ('renderer' in ext) { // Renderer extensions\n const prevRenderer = extensions.renderers[ext.name];\n if (prevRenderer) {\n // Replace extension with func to run new extension but fall back if false\n extensions.renderers[ext.name] = function (...args) {\n let ret = ext.renderer.apply(this, args);\n if (ret === false) {\n ret = prevRenderer.apply(this, args);\n }\n return ret;\n };\n }\n else {\n extensions.renderers[ext.name] = ext.renderer;\n }\n }\n if ('tokenizer' in ext) { // Tokenizer Extensions\n if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {\n throw new Error(\"extension level must be 'block' or 'inline'\");\n }\n const extLevel = extensions[ext.level];\n if (extLevel) {\n extLevel.unshift(ext.tokenizer);\n }\n else {\n extensions[ext.level] = [ext.tokenizer];\n }\n if (ext.start) { // Function to check for start of token\n if (ext.level === 'block') {\n if (extensions.startBlock) {\n extensions.startBlock.push(ext.start);\n }\n else {\n extensions.startBlock = [ext.start];\n }\n }\n else if (ext.level === 'inline') {\n if (extensions.startInline) {\n extensions.startInline.push(ext.start);\n }\n else {\n extensions.startInline = [ext.start];\n }\n }\n }\n }\n if ('childTokens' in ext && ext.childTokens) { // Child tokens to be visited by walkTokens\n extensions.childTokens[ext.name] = ext.childTokens;\n }\n });\n opts.extensions = extensions;\n }\n // ==-- Parse \"overwrite\" extensions --== //\n if (pack.renderer) {\n const renderer = this.defaults.renderer || new _Renderer(this.defaults);\n for (const prop in pack.renderer) {\n if (!(prop in renderer)) {\n throw new Error(`renderer '${prop}' does not exist`);\n }\n if (['options', 'parser'].includes(prop)) {\n // ignore options property\n continue;\n }\n const rendererProp = prop;\n const rendererFunc = pack.renderer[rendererProp];\n const prevRenderer = renderer[rendererProp];\n // Replace renderer with func to run extension, but fall back if false\n renderer[rendererProp] = (...args) => {\n let ret = rendererFunc.apply(renderer, args);\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n return ret || '';\n };\n }\n opts.renderer = renderer;\n }\n if (pack.tokenizer) {\n const tokenizer = this.defaults.tokenizer || new _Tokenizer(this.defaults);\n for (const prop in pack.tokenizer) {\n if (!(prop in tokenizer)) {\n throw new Error(`tokenizer '${prop}' does not exist`);\n }\n if (['options', 'rules', 'lexer'].includes(prop)) {\n // ignore options, rules, and lexer properties\n continue;\n }\n const tokenizerProp = prop;\n const tokenizerFunc = pack.tokenizer[tokenizerProp];\n const prevTokenizer = tokenizer[tokenizerProp];\n // Replace tokenizer with func to run extension, but fall back if false\n // @ts-expect-error cannot type tokenizer function dynamically\n tokenizer[tokenizerProp] = (...args) => {\n let ret = tokenizerFunc.apply(tokenizer, args);\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n return ret;\n };\n }\n opts.tokenizer = tokenizer;\n }\n // ==-- Parse Hooks extensions --== //\n if (pack.hooks) {\n const hooks = this.defaults.hooks || new _Hooks();\n for (const prop in pack.hooks) {\n if (!(prop in hooks)) {\n throw new Error(`hook '${prop}' does not exist`);\n }\n if (['options', 'block'].includes(prop)) {\n // ignore options and block properties\n continue;\n }\n const hooksProp = prop;\n const hooksFunc = pack.hooks[hooksProp];\n const prevHook = hooks[hooksProp];\n if (_Hooks.passThroughHooks.has(prop)) {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (arg) => {\n if (this.defaults.async) {\n return Promise.resolve(hooksFunc.call(hooks, arg)).then(ret => {\n return prevHook.call(hooks, ret);\n });\n }\n const ret = hooksFunc.call(hooks, arg);\n return prevHook.call(hooks, ret);\n };\n }\n else {\n // @ts-expect-error cannot type hook function dynamically\n hooks[hooksProp] = (...args) => {\n let ret = hooksFunc.apply(hooks, args);\n if (ret === false) {\n ret = prevHook.apply(hooks, args);\n }\n return ret;\n };\n }\n }\n opts.hooks = hooks;\n }\n // ==-- Parse WalkTokens extensions --== //\n if (pack.walkTokens) {\n const walkTokens = this.defaults.walkTokens;\n const packWalktokens = pack.walkTokens;\n opts.walkTokens = function (token) {\n let values = [];\n values.push(packWalktokens.call(this, token));\n if (walkTokens) {\n values = values.concat(walkTokens.call(this, token));\n }\n return values;\n };\n }\n this.defaults = { ...this.defaults, ...opts };\n });\n return this;\n }\n setOptions(opt) {\n this.defaults = { ...this.defaults, ...opt };\n return this;\n }\n lexer(src, options) {\n return _Lexer.lex(src, options ?? this.defaults);\n }\n parser(tokens, options) {\n return _Parser.parse(tokens, options ?? this.defaults);\n }\n parseMarkdown(blockType) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const parse = (src, options) => {\n const origOpt = { ...options };\n const opt = { ...this.defaults, ...origOpt };\n const throwError = this.onError(!!opt.silent, !!opt.async);\n // throw error if an extension set async to true but parse was called with async: false\n if (this.defaults.async === true && origOpt.async === false) {\n return throwError(new Error('marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.'));\n }\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n return throwError(new Error('marked(): input parameter is undefined or null'));\n }\n if (typeof src !== 'string') {\n return throwError(new Error('marked(): input parameter is of type '\n + Object.prototype.toString.call(src) + ', string expected'));\n }\n if (opt.hooks) {\n opt.hooks.options = opt;\n opt.hooks.block = blockType;\n }\n const lexer = opt.hooks ? opt.hooks.provideLexer() : (blockType ? _Lexer.lex : _Lexer.lexInline);\n const parser = opt.hooks ? opt.hooks.provideParser() : (blockType ? _Parser.parse : _Parser.parseInline);\n if (opt.async) {\n return Promise.resolve(opt.hooks ? opt.hooks.preprocess(src) : src)\n .then(src => lexer(src, opt))\n .then(tokens => opt.hooks ? opt.hooks.processAllTokens(tokens) : tokens)\n .then(tokens => opt.walkTokens ? Promise.all(this.walkTokens(tokens, opt.walkTokens)).then(() => tokens) : tokens)\n .then(tokens => parser(tokens, opt))\n .then(html => opt.hooks ? opt.hooks.postprocess(html) : html)\n .catch(throwError);\n }\n try {\n if (opt.hooks) {\n src = opt.hooks.preprocess(src);\n }\n let tokens = lexer(src, opt);\n if (opt.hooks) {\n tokens = opt.hooks.processAllTokens(tokens);\n }\n if (opt.walkTokens) {\n this.walkTokens(tokens, opt.walkTokens);\n }\n let html = parser(tokens, opt);\n if (opt.hooks) {\n html = opt.hooks.postprocess(html);\n }\n return html;\n }\n catch (e) {\n return throwError(e);\n }\n };\n return parse;\n }\n onError(silent, async) {\n return (e) => {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n if (silent) {\n const msg = '<p>An error occurred:</p><pre>'\n + escape$1(e.message + '', true)\n + '</pre>';\n if (async) {\n return Promise.resolve(msg);\n }\n return msg;\n }\n if (async) {\n return Promise.reject(e);\n }\n throw e;\n };\n }\n}\n\nconst markedInstance = new Marked();\nfunction marked(src, opt) {\n return markedInstance.parse(src, opt);\n}\n/**\n * Sets the default options.\n *\n * @param options Hash of options\n */\nmarked.options =\n marked.setOptions = function (options) {\n markedInstance.setOptions(options);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n };\n/**\n * Gets the original marked default options.\n */\nmarked.getDefaults = _getDefaults;\nmarked.defaults = _defaults;\n/**\n * Use Extension\n */\nmarked.use = function (...args) {\n markedInstance.use(...args);\n marked.defaults = markedInstance.defaults;\n changeDefaults(marked.defaults);\n return marked;\n};\n/**\n * Run callback for every token\n */\nmarked.walkTokens = function (tokens, callback) {\n return markedInstance.walkTokens(tokens, callback);\n};\n/**\n * Compiles markdown to HTML without enclosing `p` tag.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options\n * @return String of compiled HTML\n */\nmarked.parseInline = markedInstance.parseInline;\n/**\n * Expose\n */\nmarked.Parser = _Parser;\nmarked.parser = _Parser.parse;\nmarked.Renderer = _Renderer;\nmarked.TextRenderer = _TextRenderer;\nmarked.Lexer = _Lexer;\nmarked.lexer = _Lexer.lex;\nmarked.Tokenizer = _Tokenizer;\nmarked.Hooks = _Hooks;\nmarked.parse = marked;\nconst options = marked.options;\nconst setOptions = marked.setOptions;\nconst use = marked.use;\nconst walkTokens = marked.walkTokens;\nconst parseInline = marked.parseInline;\nconst parse = marked;\nconst parser = _Parser.parse;\nconst lexer = _Lexer.lex;\n\nexport { _Hooks as Hooks, _Lexer as Lexer, Marked, _Parser as Parser, _Renderer as Renderer, _TextRenderer as TextRenderer, _Tokenizer as Tokenizer, _defaults as defaults, _getDefaults as getDefaults, lexer, marked, options, parse, parseInline, parser, setOptions, use, walkTokens };\n//# sourceMappingURL=marked.esm.js.map\n","/*\n Language: SQL\n Website: https://en.wikipedia.org/wiki/SQL\n Category: common, database\n */\n\n/*\n\nGoals:\n\nSQL is intended to highlight basic/common SQL keywords and expressions\n\n- If pretty much every single SQL server includes supports, then it's a canidate.\n- It is NOT intended to include tons of vendor specific keywords (Oracle, MySQL,\n PostgreSQL) although the list of data types is purposely a bit more expansive.\n- For more specific SQL grammars please see:\n - PostgreSQL and PL/pgSQL - core\n - T-SQL - https://github.com/highlightjs/highlightjs-tsql\n - sql_more (core)\n\n */\n\nfunction sql(hljs) {\n const regex = hljs.regex;\n const COMMENT_MODE = hljs.COMMENT('--', '$');\n const STRING = {\n scope: 'string',\n variants: [\n {\n begin: /'/,\n end: /'/,\n contains: [ { match: /''/ } ]\n }\n ]\n };\n const QUOTED_IDENTIFIER = {\n begin: /\"/,\n end: /\"/,\n contains: [ { match: /\"\"/ } ]\n };\n\n const LITERALS = [\n \"true\",\n \"false\",\n // Not sure it's correct to call NULL literal, and clauses like IS [NOT] NULL look strange that way.\n // \"null\",\n \"unknown\"\n ];\n\n const MULTI_WORD_TYPES = [\n \"double precision\",\n \"large object\",\n \"with timezone\",\n \"without timezone\"\n ];\n\n const TYPES = [\n 'bigint',\n 'binary',\n 'blob',\n 'boolean',\n 'char',\n 'character',\n 'clob',\n 'date',\n 'dec',\n 'decfloat',\n 'decimal',\n 'float',\n 'int',\n 'integer',\n 'interval',\n 'nchar',\n 'nclob',\n 'national',\n 'numeric',\n 'real',\n 'row',\n 'smallint',\n 'time',\n 'timestamp',\n 'varchar',\n 'varying', // modifier (character varying)\n 'varbinary'\n ];\n\n const NON_RESERVED_WORDS = [\n \"add\",\n \"asc\",\n \"collation\",\n \"desc\",\n \"final\",\n \"first\",\n \"last\",\n \"view\"\n ];\n\n // https://jakewheat.github.io/sql-overview/sql-2016-foundation-grammar.html#reserved-word\n const RESERVED_WORDS = [\n \"abs\",\n \"acos\",\n \"all\",\n \"allocate\",\n \"alter\",\n \"and\",\n \"any\",\n \"are\",\n \"array\",\n \"array_agg\",\n \"array_max_cardinality\",\n \"as\",\n \"asensitive\",\n \"asin\",\n \"asymmetric\",\n \"at\",\n \"atan\",\n \"atomic\",\n \"authorization\",\n \"avg\",\n \"begin\",\n \"begin_frame\",\n \"begin_partition\",\n \"between\",\n \"bigint\",\n \"binary\",\n \"blob\",\n \"boolean\",\n \"both\",\n \"by\",\n \"call\",\n \"called\",\n \"cardinality\",\n \"cascaded\",\n \"case\",\n \"cast\",\n \"ceil\",\n \"ceiling\",\n \"char\",\n \"char_length\",\n \"character\",\n \"character_length\",\n \"check\",\n \"classifier\",\n \"clob\",\n \"close\",\n \"coalesce\",\n \"collate\",\n \"collect\",\n \"column\",\n \"commit\",\n \"condition\",\n \"connect\",\n \"constraint\",\n \"contains\",\n \"convert\",\n \"copy\",\n \"corr\",\n \"corresponding\",\n \"cos\",\n \"cosh\",\n \"count\",\n \"covar_pop\",\n \"covar_samp\",\n \"create\",\n \"cross\",\n \"cube\",\n \"cume_dist\",\n \"current\",\n \"current_catalog\",\n \"current_date\",\n \"current_default_transform_group\",\n \"current_path\",\n \"current_role\",\n \"current_row\",\n \"current_schema\",\n \"current_time\",\n \"current_timestamp\",\n \"current_path\",\n \"current_role\",\n \"current_transform_group_for_type\",\n \"current_user\",\n \"cursor\",\n \"cycle\",\n \"date\",\n \"day\",\n \"deallocate\",\n \"dec\",\n \"decimal\",\n \"decfloat\",\n \"declare\",\n \"default\",\n \"define\",\n \"delete\",\n \"dense_rank\",\n \"deref\",\n \"describe\",\n \"deterministic\",\n \"disconnect\",\n \"distinct\",\n \"double\",\n \"drop\",\n \"dynamic\",\n \"each\",\n \"element\",\n \"else\",\n \"empty\",\n \"end\",\n \"end_frame\",\n \"end_partition\",\n \"end-exec\",\n \"equals\",\n \"escape\",\n \"every\",\n \"except\",\n \"exec\",\n \"execute\",\n \"exists\",\n \"exp\",\n \"external\",\n \"extract\",\n \"false\",\n \"fetch\",\n \"filter\",\n \"first_value\",\n \"float\",\n \"floor\",\n \"for\",\n \"foreign\",\n \"frame_row\",\n \"free\",\n \"from\",\n \"full\",\n \"function\",\n \"fusion\",\n \"get\",\n \"global\",\n \"grant\",\n \"group\",\n \"grouping\",\n \"groups\",\n \"having\",\n \"hold\",\n \"hour\",\n \"identity\",\n \"in\",\n \"indicator\",\n \"initial\",\n \"inner\",\n \"inout\",\n \"insensitive\",\n \"insert\",\n \"int\",\n \"integer\",\n \"intersect\",\n \"intersection\",\n \"interval\",\n \"into\",\n \"is\",\n \"join\",\n \"json_array\",\n \"json_arrayagg\",\n \"json_exists\",\n \"json_object\",\n \"json_objectagg\",\n \"json_query\",\n \"json_table\",\n \"json_table_primitive\",\n \"json_value\",\n \"lag\",\n \"language\",\n \"large\",\n \"last_value\",\n \"lateral\",\n \"lead\",\n \"leading\",\n \"left\",\n \"like\",\n \"like_regex\",\n \"listagg\",\n \"ln\",\n \"local\",\n \"localtime\",\n \"localtimestamp\",\n \"log\",\n \"log10\",\n \"lower\",\n \"match\",\n \"match_number\",\n \"match_recognize\",\n \"matches\",\n \"max\",\n \"member\",\n \"merge\",\n \"method\",\n \"min\",\n \"minute\",\n \"mod\",\n \"modifies\",\n \"module\",\n \"month\",\n \"multiset\",\n \"national\",\n \"natural\",\n \"nchar\",\n \"nclob\",\n \"new\",\n \"no\",\n \"none\",\n \"normalize\",\n \"not\",\n \"nth_value\",\n \"ntile\",\n \"null\",\n \"nullif\",\n \"numeric\",\n \"octet_length\",\n \"occurrences_regex\",\n \"of\",\n \"offset\",\n \"old\",\n \"omit\",\n \"on\",\n \"one\",\n \"only\",\n \"open\",\n \"or\",\n \"order\",\n \"out\",\n \"outer\",\n \"over\",\n \"overlaps\",\n \"overlay\",\n \"parameter\",\n \"partition\",\n \"pattern\",\n \"per\",\n \"percent\",\n \"percent_rank\",\n \"percentile_cont\",\n \"percentile_disc\",\n \"period\",\n \"portion\",\n \"position\",\n \"position_regex\",\n \"power\",\n \"precedes\",\n \"precision\",\n \"prepare\",\n \"primary\",\n \"procedure\",\n \"ptf\",\n \"range\",\n \"rank\",\n \"reads\",\n \"real\",\n \"recursive\",\n \"ref\",\n \"references\",\n \"referencing\",\n \"regr_avgx\",\n \"regr_avgy\",\n \"regr_count\",\n \"regr_intercept\",\n \"regr_r2\",\n \"regr_slope\",\n \"regr_sxx\",\n \"regr_sxy\",\n \"regr_syy\",\n \"release\",\n \"result\",\n \"return\",\n \"returns\",\n \"revoke\",\n \"right\",\n \"rollback\",\n \"rollup\",\n \"row\",\n \"row_number\",\n \"rows\",\n \"running\",\n \"savepoint\",\n \"scope\",\n \"scroll\",\n \"search\",\n \"second\",\n \"seek\",\n \"select\",\n \"sensitive\",\n \"session_user\",\n \"set\",\n \"show\",\n \"similar\",\n \"sin\",\n \"sinh\",\n \"skip\",\n \"smallint\",\n \"some\",\n \"specific\",\n \"specifictype\",\n \"sql\",\n \"sqlexception\",\n \"sqlstate\",\n \"sqlwarning\",\n \"sqrt\",\n \"start\",\n \"static\",\n \"stddev_pop\",\n \"stddev_samp\",\n \"submultiset\",\n \"subset\",\n \"substring\",\n \"substring_regex\",\n \"succeeds\",\n \"sum\",\n \"symmetric\",\n \"system\",\n \"system_time\",\n \"system_user\",\n \"table\",\n \"tablesample\",\n \"tan\",\n \"tanh\",\n \"then\",\n \"time\",\n \"timestamp\",\n \"timezone_hour\",\n \"timezone_minute\",\n \"to\",\n \"trailing\",\n \"translate\",\n \"translate_regex\",\n \"translation\",\n \"treat\",\n \"trigger\",\n \"trim\",\n \"trim_array\",\n \"true\",\n \"truncate\",\n \"uescape\",\n \"union\",\n \"unique\",\n \"unknown\",\n \"unnest\",\n \"update\",\n \"upper\",\n \"user\",\n \"using\",\n \"value\",\n \"values\",\n \"value_of\",\n \"var_pop\",\n \"var_samp\",\n \"varbinary\",\n \"varchar\",\n \"varying\",\n \"versioning\",\n \"when\",\n \"whenever\",\n \"where\",\n \"width_bucket\",\n \"window\",\n \"with\",\n \"within\",\n \"without\",\n \"year\",\n ];\n\n // these are reserved words we have identified to be functions\n // and should only be highlighted in a dispatch-like context\n // ie, array_agg(...), etc.\n const RESERVED_FUNCTIONS = [\n \"abs\",\n \"acos\",\n \"array_agg\",\n \"asin\",\n \"atan\",\n \"avg\",\n \"cast\",\n \"ceil\",\n \"ceiling\",\n \"coalesce\",\n \"corr\",\n \"cos\",\n \"cosh\",\n \"count\",\n \"covar_pop\",\n \"covar_samp\",\n \"cume_dist\",\n \"dense_rank\",\n \"deref\",\n \"element\",\n \"exp\",\n \"extract\",\n \"first_value\",\n \"floor\",\n \"json_array\",\n \"json_arrayagg\",\n \"json_exists\",\n \"json_object\",\n \"json_objectagg\",\n \"json_query\",\n \"json_table\",\n \"json_table_primitive\",\n \"json_value\",\n \"lag\",\n \"last_value\",\n \"lead\",\n \"listagg\",\n \"ln\",\n \"log\",\n \"log10\",\n \"lower\",\n \"max\",\n \"min\",\n \"mod\",\n \"nth_value\",\n \"ntile\",\n \"nullif\",\n \"percent_rank\",\n \"percentile_cont\",\n \"percentile_disc\",\n \"position\",\n \"position_regex\",\n \"power\",\n \"rank\",\n \"regr_avgx\",\n \"regr_avgy\",\n \"regr_count\",\n \"regr_intercept\",\n \"regr_r2\",\n \"regr_slope\",\n \"regr_sxx\",\n \"regr_sxy\",\n \"regr_syy\",\n \"row_number\",\n \"sin\",\n \"sinh\",\n \"sqrt\",\n \"stddev_pop\",\n \"stddev_samp\",\n \"substring\",\n \"substring_regex\",\n \"sum\",\n \"tan\",\n \"tanh\",\n \"translate\",\n \"translate_regex\",\n \"treat\",\n \"trim\",\n \"trim_array\",\n \"unnest\",\n \"upper\",\n \"value_of\",\n \"var_pop\",\n \"var_samp\",\n \"width_bucket\",\n ];\n\n // these functions can\n const POSSIBLE_WITHOUT_PARENS = [\n \"current_catalog\",\n \"current_date\",\n \"current_default_transform_group\",\n \"current_path\",\n \"current_role\",\n \"current_schema\",\n \"current_transform_group_for_type\",\n \"current_user\",\n \"session_user\",\n \"system_time\",\n \"system_user\",\n \"current_time\",\n \"localtime\",\n \"current_timestamp\",\n \"localtimestamp\"\n ];\n\n // those exist to boost relevance making these very\n // \"SQL like\" keyword combos worth +1 extra relevance\n const COMBOS = [\n \"create table\",\n \"insert into\",\n \"primary key\",\n \"foreign key\",\n \"not null\",\n \"alter table\",\n \"add constraint\",\n \"grouping sets\",\n \"on overflow\",\n \"character set\",\n \"respect nulls\",\n \"ignore nulls\",\n \"nulls first\",\n \"nulls last\",\n \"depth first\",\n \"breadth first\"\n ];\n\n const FUNCTIONS = RESERVED_FUNCTIONS;\n\n const KEYWORDS = [\n ...RESERVED_WORDS,\n ...NON_RESERVED_WORDS\n ].filter((keyword) => {\n return !RESERVED_FUNCTIONS.includes(keyword);\n });\n\n const VARIABLE = {\n scope: \"variable\",\n match: /@[a-z0-9][a-z0-9_]*/,\n };\n\n const OPERATOR = {\n scope: \"operator\",\n match: /[-+*/=%^~]|&&?|\\|\\|?|!=?|<(?:=>?|<|>)?|>[>=]?/,\n relevance: 0,\n };\n\n const FUNCTION_CALL = {\n match: regex.concat(/\\b/, regex.either(...FUNCTIONS), /\\s*\\(/),\n relevance: 0,\n keywords: { built_in: FUNCTIONS }\n };\n\n // turns a multi-word keyword combo into a regex that doesn't\n // care about extra whitespace etc.\n // input: \"START QUERY\"\n // output: /\\bSTART\\s+QUERY\\b/\n function kws_to_regex(list) {\n return regex.concat(\n /\\b/,\n regex.either(...list.map((kw) => {\n return kw.replace(/\\s+/, \"\\\\s+\")\n })),\n /\\b/\n )\n }\n\n const MULTI_WORD_KEYWORDS = {\n scope: \"keyword\",\n match: kws_to_regex(COMBOS),\n relevance: 0,\n };\n\n // keywords with less than 3 letters are reduced in relevancy\n function reduceRelevancy(list, {\n exceptions, when\n } = {}) {\n const qualifyFn = when;\n exceptions = exceptions || [];\n return list.map((item) => {\n if (item.match(/\\|\\d+$/) || exceptions.includes(item)) {\n return item;\n } else if (qualifyFn(item)) {\n return `${item}|0`;\n } else {\n return item;\n }\n });\n }\n\n return {\n name: 'SQL',\n case_insensitive: true,\n // does not include {} or HTML tags `</`\n illegal: /[{}]|<\\//,\n keywords: {\n $pattern: /\\b[\\w\\.]+/,\n keyword:\n reduceRelevancy(KEYWORDS, { when: (x) => x.length < 3 }),\n literal: LITERALS,\n type: TYPES,\n built_in: POSSIBLE_WITHOUT_PARENS\n },\n contains: [\n {\n scope: \"type\",\n match: kws_to_regex(MULTI_WORD_TYPES)\n },\n MULTI_WORD_KEYWORDS,\n FUNCTION_CALL,\n VARIABLE,\n STRING,\n QUOTED_IDENTIFIER,\n hljs.C_NUMBER_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n COMMENT_MODE,\n OPERATOR\n ]\n };\n}\n\nexport { sql as default };\n","/*\nLanguage: Ruby\nDescription: Ruby is a dynamic, open source programming language with a focus on simplicity and productivity.\nWebsite: https://www.ruby-lang.org/\nAuthor: Anton Kovalyov <anton@kovalyov.net>\nContributors: Peter Leonov <gojpeg@yandex.ru>, Vasily Polovnyov <vast@whiteants.net>, Loren Segal <lsegal@soen.ca>, Pascal Hurni <phi@ruby-reactive.org>, Cedric Sohrauer <sohrauer@googlemail.com>\nCategory: common, scripting\n*/\n\nfunction ruby(hljs) {\n const regex = hljs.regex;\n const RUBY_METHOD_RE = '([a-zA-Z_]\\\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\\\*\\\\*|[-/+%^&*~`|]|\\\\[\\\\]=?)';\n // TODO: move concepts like CAMEL_CASE into `modes.js`\n const CLASS_NAME_RE = regex.either(\n /\\b([A-Z]+[a-z0-9]+)+/,\n // ends in caps\n /\\b([A-Z]+[a-z0-9]+)+[A-Z]+/,\n )\n ;\n const CLASS_NAME_WITH_NAMESPACE_RE = regex.concat(CLASS_NAME_RE, /(::\\w+)*/);\n // very popular ruby built-ins that one might even assume\n // are actual keywords (despite that not being the case)\n const PSEUDO_KWS = [\n \"include\",\n \"extend\",\n \"prepend\",\n \"public\",\n \"private\",\n \"protected\",\n \"raise\",\n \"throw\"\n ];\n const RUBY_KEYWORDS = {\n \"variable.constant\": [\n \"__FILE__\",\n \"__LINE__\",\n \"__ENCODING__\"\n ],\n \"variable.language\": [\n \"self\",\n \"super\",\n ],\n keyword: [\n \"alias\",\n \"and\",\n \"begin\",\n \"BEGIN\",\n \"break\",\n \"case\",\n \"class\",\n \"defined\",\n \"do\",\n \"else\",\n \"elsif\",\n \"end\",\n \"END\",\n \"ensure\",\n \"for\",\n \"if\",\n \"in\",\n \"module\",\n \"next\",\n \"not\",\n \"or\",\n \"redo\",\n \"require\",\n \"rescue\",\n \"retry\",\n \"return\",\n \"then\",\n \"undef\",\n \"unless\",\n \"until\",\n \"when\",\n \"while\",\n \"yield\",\n ...PSEUDO_KWS\n ],\n built_in: [\n \"proc\",\n \"lambda\",\n \"attr_accessor\",\n \"attr_reader\",\n \"attr_writer\",\n \"define_method\",\n \"private_constant\",\n \"module_function\"\n ],\n literal: [\n \"true\",\n \"false\",\n \"nil\"\n ]\n };\n const YARDOCTAG = {\n className: 'doctag',\n begin: '@[A-Za-z]+'\n };\n const IRB_OBJECT = {\n begin: '#<',\n end: '>'\n };\n const COMMENT_MODES = [\n hljs.COMMENT(\n '#',\n '$',\n { contains: [ YARDOCTAG ] }\n ),\n hljs.COMMENT(\n '^=begin',\n '^=end',\n {\n contains: [ YARDOCTAG ],\n relevance: 10\n }\n ),\n hljs.COMMENT('^__END__', hljs.MATCH_NOTHING_RE)\n ];\n const SUBST = {\n className: 'subst',\n begin: /#\\{/,\n end: /\\}/,\n keywords: RUBY_KEYWORDS\n };\n const STRING = {\n className: 'string',\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n variants: [\n {\n begin: /'/,\n end: /'/\n },\n {\n begin: /\"/,\n end: /\"/\n },\n {\n begin: /`/,\n end: /`/\n },\n {\n begin: /%[qQwWx]?\\(/,\n end: /\\)/\n },\n {\n begin: /%[qQwWx]?\\[/,\n end: /\\]/\n },\n {\n begin: /%[qQwWx]?\\{/,\n end: /\\}/\n },\n {\n begin: /%[qQwWx]?</,\n end: />/\n },\n {\n begin: /%[qQwWx]?\\//,\n end: /\\//\n },\n {\n begin: /%[qQwWx]?%/,\n end: /%/\n },\n {\n begin: /%[qQwWx]?-/,\n end: /-/\n },\n {\n begin: /%[qQwWx]?\\|/,\n end: /\\|/\n },\n // in the following expressions, \\B in the beginning suppresses recognition of ?-sequences\n // where ? is the last character of a preceding identifier, as in: `func?4`\n { begin: /\\B\\?(\\\\\\d{1,3})/ },\n { begin: /\\B\\?(\\\\x[A-Fa-f0-9]{1,2})/ },\n { begin: /\\B\\?(\\\\u\\{?[A-Fa-f0-9]{1,6}\\}?)/ },\n { begin: /\\B\\?(\\\\M-\\\\C-|\\\\M-\\\\c|\\\\c\\\\M-|\\\\M-|\\\\C-\\\\M-)[\\x20-\\x7e]/ },\n { begin: /\\B\\?\\\\(c|C-)[\\x20-\\x7e]/ },\n { begin: /\\B\\?\\\\?\\S/ },\n // heredocs\n {\n // this guard makes sure that we have an entire heredoc and not a false\n // positive (auto-detect, etc.)\n begin: regex.concat(\n /<<[-~]?'?/,\n regex.lookahead(/(\\w+)(?=\\W)[^\\n]*\\n(?:[^\\n]*\\n)*?\\s*\\1\\b/)\n ),\n contains: [\n hljs.END_SAME_AS_BEGIN({\n begin: /(\\w+)/,\n end: /(\\w+)/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ]\n })\n ]\n }\n ]\n };\n\n // Ruby syntax is underdocumented, but this grammar seems to be accurate\n // as of version 2.7.2 (confirmed with (irb and `Ripper.sexp(...)`)\n // https://docs.ruby-lang.org/en/2.7.0/doc/syntax/literals_rdoc.html#label-Numbers\n const decimal = '[1-9](_?[0-9])*|0';\n const digits = '[0-9](_?[0-9])*';\n const NUMBER = {\n className: 'number',\n relevance: 0,\n variants: [\n // decimal integer/float, optionally exponential or rational, optionally imaginary\n { begin: `\\\\b(${decimal})(\\\\.(${digits}))?([eE][+-]?(${digits})|r)?i?\\\\b` },\n\n // explicit decimal/binary/octal/hexadecimal integer,\n // optionally rational and/or imaginary\n { begin: \"\\\\b0[dD][0-9](_?[0-9])*r?i?\\\\b\" },\n { begin: \"\\\\b0[bB][0-1](_?[0-1])*r?i?\\\\b\" },\n { begin: \"\\\\b0[oO][0-7](_?[0-7])*r?i?\\\\b\" },\n { begin: \"\\\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\\\b\" },\n\n // 0-prefixed implicit octal integer, optionally rational and/or imaginary\n { begin: \"\\\\b0(_?[0-7])+r?i?\\\\b\" }\n ]\n };\n\n const PARAMS = {\n variants: [\n {\n match: /\\(\\)/,\n },\n {\n className: 'params',\n begin: /\\(/,\n end: /(?=\\))/,\n excludeBegin: true,\n endsParent: true,\n keywords: RUBY_KEYWORDS,\n }\n ]\n };\n\n const INCLUDE_EXTEND = {\n match: [\n /(include|extend)\\s+/,\n CLASS_NAME_WITH_NAMESPACE_RE\n ],\n scope: {\n 2: \"title.class\"\n },\n keywords: RUBY_KEYWORDS\n };\n\n const CLASS_DEFINITION = {\n variants: [\n {\n match: [\n /class\\s+/,\n CLASS_NAME_WITH_NAMESPACE_RE,\n /\\s+<\\s+/,\n CLASS_NAME_WITH_NAMESPACE_RE\n ]\n },\n {\n match: [\n /\\b(class|module)\\s+/,\n CLASS_NAME_WITH_NAMESPACE_RE\n ]\n }\n ],\n scope: {\n 2: \"title.class\",\n 4: \"title.class.inherited\"\n },\n keywords: RUBY_KEYWORDS\n };\n\n const UPPER_CASE_CONSTANT = {\n relevance: 0,\n match: /\\b[A-Z][A-Z_0-9]+\\b/,\n className: \"variable.constant\"\n };\n\n const METHOD_DEFINITION = {\n match: [\n /def/, /\\s+/,\n RUBY_METHOD_RE\n ],\n scope: {\n 1: \"keyword\",\n 3: \"title.function\"\n },\n contains: [\n PARAMS\n ]\n };\n\n const OBJECT_CREATION = {\n relevance: 0,\n match: [\n CLASS_NAME_WITH_NAMESPACE_RE,\n /\\.new[. (]/\n ],\n scope: {\n 1: \"title.class\"\n }\n };\n\n // CamelCase\n const CLASS_REFERENCE = {\n relevance: 0,\n match: CLASS_NAME_RE,\n scope: \"title.class\"\n };\n\n const RUBY_DEFAULT_CONTAINS = [\n STRING,\n CLASS_DEFINITION,\n INCLUDE_EXTEND,\n OBJECT_CREATION,\n UPPER_CASE_CONSTANT,\n CLASS_REFERENCE,\n METHOD_DEFINITION,\n {\n // swallow namespace qualifiers before symbols\n begin: hljs.IDENT_RE + '::' },\n {\n className: 'symbol',\n begin: hljs.UNDERSCORE_IDENT_RE + '(!|\\\\?)?:',\n relevance: 0\n },\n {\n className: 'symbol',\n begin: ':(?!\\\\s)',\n contains: [\n STRING,\n { begin: RUBY_METHOD_RE }\n ],\n relevance: 0\n },\n NUMBER,\n {\n // negative-look forward attempts to prevent false matches like:\n // @ident@ or $ident$ that might indicate this is not ruby at all\n className: \"variable\",\n begin: '(\\\\$\\\\W)|((\\\\$|@@?)(\\\\w+))(?=[^@$?])' + `(?![A-Za-z])(?![@$?'])`\n },\n {\n className: 'params',\n begin: /\\|(?!=)/,\n end: /\\|/,\n excludeBegin: true,\n excludeEnd: true,\n relevance: 0, // this could be a lot of things (in other languages) other than params\n keywords: RUBY_KEYWORDS\n },\n { // regexp container\n begin: '(' + hljs.RE_STARTERS_RE + '|unless)\\\\s*',\n keywords: 'unless',\n contains: [\n {\n className: 'regexp',\n contains: [\n hljs.BACKSLASH_ESCAPE,\n SUBST\n ],\n illegal: /\\n/,\n variants: [\n {\n begin: '/',\n end: '/[a-z]*'\n },\n {\n begin: /%r\\{/,\n end: /\\}[a-z]*/\n },\n {\n begin: '%r\\\\(',\n end: '\\\\)[a-z]*'\n },\n {\n begin: '%r!',\n end: '![a-z]*'\n },\n {\n begin: '%r\\\\[',\n end: '\\\\][a-z]*'\n }\n ]\n }\n ].concat(IRB_OBJECT, COMMENT_MODES),\n relevance: 0\n }\n ].concat(IRB_OBJECT, COMMENT_MODES);\n\n SUBST.contains = RUBY_DEFAULT_CONTAINS;\n PARAMS.contains = RUBY_DEFAULT_CONTAINS;\n\n // >>\n // ?>\n const SIMPLE_PROMPT = \"[>?]>\";\n // irb(main):001:0>\n const DEFAULT_PROMPT = \"[\\\\w#]+\\\\(\\\\w+\\\\):\\\\d+:\\\\d+[>*]\";\n const RVM_PROMPT = \"(\\\\w+-)?\\\\d+\\\\.\\\\d+\\\\.\\\\d+(p\\\\d+)?[^\\\\d][^>]+>\";\n\n const IRB_DEFAULT = [\n {\n begin: /^\\s*=>/,\n starts: {\n end: '$',\n contains: RUBY_DEFAULT_CONTAINS\n }\n },\n {\n className: 'meta.prompt',\n begin: '^(' + SIMPLE_PROMPT + \"|\" + DEFAULT_PROMPT + '|' + RVM_PROMPT + ')(?=[ ])',\n starts: {\n end: '$',\n keywords: RUBY_KEYWORDS,\n contains: RUBY_DEFAULT_CONTAINS\n }\n }\n ];\n\n COMMENT_MODES.unshift(IRB_OBJECT);\n\n return {\n name: 'Ruby',\n aliases: [\n 'rb',\n 'gemspec',\n 'podspec',\n 'thor',\n 'irb'\n ],\n keywords: RUBY_KEYWORDS,\n illegal: /\\/\\*/,\n contains: [ hljs.SHEBANG({ binary: \"ruby\" }) ]\n .concat(IRB_DEFAULT)\n .concat(COMMENT_MODES)\n .concat(RUBY_DEFAULT_CONTAINS)\n };\n}\n\nexport { ruby as default };\n","/*\nLanguage: Rust\nAuthor: Andrey Vlasovskikh <andrey.vlasovskikh@gmail.com>\nContributors: Roman Shmatov <romanshmatov@gmail.com>, Kasper Andersen <kma_untrusted@protonmail.com>\nWebsite: https://www.rust-lang.org\nCategory: common, system\n*/\n\n/** @type LanguageFn */\n\nfunction rust(hljs) {\n const regex = hljs.regex;\n // ============================================\n // Added to support the r# keyword, which is a raw identifier in Rust.\n const RAW_IDENTIFIER = /(r#)?/;\n const UNDERSCORE_IDENT_RE = regex.concat(RAW_IDENTIFIER, hljs.UNDERSCORE_IDENT_RE);\n const IDENT_RE = regex.concat(RAW_IDENTIFIER, hljs.IDENT_RE);\n // ============================================\n const FUNCTION_INVOKE = {\n className: \"title.function.invoke\",\n relevance: 0,\n begin: regex.concat(\n /\\b/,\n /(?!let|for|while|if|else|match\\b)/,\n IDENT_RE,\n regex.lookahead(/\\s*\\(/))\n };\n const NUMBER_SUFFIX = '([ui](8|16|32|64|128|size)|f(32|64))\\?';\n const KEYWORDS = [\n \"abstract\",\n \"as\",\n \"async\",\n \"await\",\n \"become\",\n \"box\",\n \"break\",\n \"const\",\n \"continue\",\n \"crate\",\n \"do\",\n \"dyn\",\n \"else\",\n \"enum\",\n \"extern\",\n \"false\",\n \"final\",\n \"fn\",\n \"for\",\n \"if\",\n \"impl\",\n \"in\",\n \"let\",\n \"loop\",\n \"macro\",\n \"match\",\n \"mod\",\n \"move\",\n \"mut\",\n \"override\",\n \"priv\",\n \"pub\",\n \"ref\",\n \"return\",\n \"self\",\n \"Self\",\n \"static\",\n \"struct\",\n \"super\",\n \"trait\",\n \"true\",\n \"try\",\n \"type\",\n \"typeof\",\n \"union\",\n \"unsafe\",\n \"unsized\",\n \"use\",\n \"virtual\",\n \"where\",\n \"while\",\n \"yield\"\n ];\n const LITERALS = [\n \"true\",\n \"false\",\n \"Some\",\n \"None\",\n \"Ok\",\n \"Err\"\n ];\n const BUILTINS = [\n // functions\n 'drop ',\n // traits\n \"Copy\",\n \"Send\",\n \"Sized\",\n \"Sync\",\n \"Drop\",\n \"Fn\",\n \"FnMut\",\n \"FnOnce\",\n \"ToOwned\",\n \"Clone\",\n \"Debug\",\n \"PartialEq\",\n \"PartialOrd\",\n \"Eq\",\n \"Ord\",\n \"AsRef\",\n \"AsMut\",\n \"Into\",\n \"From\",\n \"Default\",\n \"Iterator\",\n \"Extend\",\n \"IntoIterator\",\n \"DoubleEndedIterator\",\n \"ExactSizeIterator\",\n \"SliceConcatExt\",\n \"ToString\",\n // macros\n \"assert!\",\n \"assert_eq!\",\n \"bitflags!\",\n \"bytes!\",\n \"cfg!\",\n \"col!\",\n \"concat!\",\n \"concat_idents!\",\n \"debug_assert!\",\n \"debug_assert_eq!\",\n \"env!\",\n \"eprintln!\",\n \"panic!\",\n \"file!\",\n \"format!\",\n \"format_args!\",\n \"include_bytes!\",\n \"include_str!\",\n \"line!\",\n \"local_data_key!\",\n \"module_path!\",\n \"option_env!\",\n \"print!\",\n \"println!\",\n \"select!\",\n \"stringify!\",\n \"try!\",\n \"unimplemented!\",\n \"unreachable!\",\n \"vec!\",\n \"write!\",\n \"writeln!\",\n \"macro_rules!\",\n \"assert_ne!\",\n \"debug_assert_ne!\"\n ];\n const TYPES = [\n \"i8\",\n \"i16\",\n \"i32\",\n \"i64\",\n \"i128\",\n \"isize\",\n \"u8\",\n \"u16\",\n \"u32\",\n \"u64\",\n \"u128\",\n \"usize\",\n \"f32\",\n \"f64\",\n \"str\",\n \"char\",\n \"bool\",\n \"Box\",\n \"Option\",\n \"Result\",\n \"String\",\n \"Vec\"\n ];\n return {\n name: 'Rust',\n aliases: [ 'rs' ],\n keywords: {\n $pattern: hljs.IDENT_RE + '!?',\n type: TYPES,\n keyword: KEYWORDS,\n literal: LITERALS,\n built_in: BUILTINS\n },\n illegal: '</',\n contains: [\n hljs.C_LINE_COMMENT_MODE,\n hljs.COMMENT('/\\\\*', '\\\\*/', { contains: [ 'self' ] }),\n hljs.inherit(hljs.QUOTE_STRING_MODE, {\n begin: /b?\"/,\n illegal: null\n }),\n {\n className: 'symbol',\n // negative lookahead to avoid matching `'`\n begin: /'[a-zA-Z_][a-zA-Z0-9_]*(?!')/\n },\n {\n scope: 'string',\n variants: [\n { begin: /b?r(#*)\"(.|\\n)*?\"\\1(?!#)/ },\n {\n begin: /b?'/,\n end: /'/,\n contains: [\n {\n scope: \"char.escape\",\n match: /\\\\('|\\w|x\\w{2}|u\\w{4}|U\\w{8})/\n }\n ]\n }\n ]\n },\n {\n className: 'number',\n variants: [\n { begin: '\\\\b0b([01_]+)' + NUMBER_SUFFIX },\n { begin: '\\\\b0o([0-7_]+)' + NUMBER_SUFFIX },\n { begin: '\\\\b0x([A-Fa-f0-9_]+)' + NUMBER_SUFFIX },\n { begin: '\\\\b(\\\\d[\\\\d_]*(\\\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)'\n + NUMBER_SUFFIX }\n ],\n relevance: 0\n },\n {\n begin: [\n /fn/,\n /\\s+/,\n UNDERSCORE_IDENT_RE\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.function\"\n }\n },\n {\n className: 'meta',\n begin: '#!?\\\\[',\n end: '\\\\]',\n contains: [\n {\n className: 'string',\n begin: /\"/,\n end: /\"/,\n contains: [\n hljs.BACKSLASH_ESCAPE\n ]\n }\n ]\n },\n {\n begin: [\n /let/,\n /\\s+/,\n /(?:mut\\s+)?/,\n UNDERSCORE_IDENT_RE\n ],\n className: {\n 1: \"keyword\",\n 3: \"keyword\",\n 4: \"variable\"\n }\n },\n // must come before impl/for rule later\n {\n begin: [\n /for/,\n /\\s+/,\n UNDERSCORE_IDENT_RE,\n /\\s+/,\n /in/\n ],\n className: {\n 1: \"keyword\",\n 3: \"variable\",\n 5: \"keyword\"\n }\n },\n {\n begin: [\n /type/,\n /\\s+/,\n UNDERSCORE_IDENT_RE\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.class\"\n }\n },\n {\n begin: [\n /(?:trait|enum|struct|union|impl|for)/,\n /\\s+/,\n UNDERSCORE_IDENT_RE\n ],\n className: {\n 1: \"keyword\",\n 3: \"title.class\"\n }\n },\n {\n begin: hljs.IDENT_RE + '::',\n keywords: {\n keyword: \"Self\",\n built_in: BUILTINS,\n type: TYPES\n }\n },\n {\n className: \"punctuation\",\n begin: '->'\n },\n FUNCTION_INVOKE\n ]\n };\n}\n\nexport { rust as default };\n","/*\nLanguage: C#\nAuthor: Jason Diamond <jason@diamond.name>\nContributor: Nicolas LLOBERA <nllobera@gmail.com>, Pieter Vantorre <pietervantorre@gmail.com>, David Pine <david.pine@microsoft.com>\nWebsite: https://docs.microsoft.com/dotnet/csharp/\nCategory: common\n*/\n\n/** @type LanguageFn */\nfunction csharp(hljs) {\n const BUILT_IN_KEYWORDS = [\n 'bool',\n 'byte',\n 'char',\n 'decimal',\n 'delegate',\n 'double',\n 'dynamic',\n 'enum',\n 'float',\n 'int',\n 'long',\n 'nint',\n 'nuint',\n 'object',\n 'sbyte',\n 'short',\n 'string',\n 'ulong',\n 'uint',\n 'ushort'\n ];\n const FUNCTION_MODIFIERS = [\n 'public',\n 'private',\n 'protected',\n 'static',\n 'internal',\n 'protected',\n 'abstract',\n 'async',\n 'extern',\n 'override',\n 'unsafe',\n 'virtual',\n 'new',\n 'sealed',\n 'partial'\n ];\n const LITERAL_KEYWORDS = [\n 'default',\n 'false',\n 'null',\n 'true'\n ];\n const NORMAL_KEYWORDS = [\n 'abstract',\n 'as',\n 'base',\n 'break',\n 'case',\n 'catch',\n 'class',\n 'const',\n 'continue',\n 'do',\n 'else',\n 'event',\n 'explicit',\n 'extern',\n 'finally',\n 'fixed',\n 'for',\n 'foreach',\n 'goto',\n 'if',\n 'implicit',\n 'in',\n 'interface',\n 'internal',\n 'is',\n 'lock',\n 'namespace',\n 'new',\n 'operator',\n 'out',\n 'override',\n 'params',\n 'private',\n 'protected',\n 'public',\n 'readonly',\n 'record',\n 'ref',\n 'return',\n 'scoped',\n 'sealed',\n 'sizeof',\n 'stackalloc',\n 'static',\n 'struct',\n 'switch',\n 'this',\n 'throw',\n 'try',\n 'typeof',\n 'unchecked',\n 'unsafe',\n 'using',\n 'virtual',\n 'void',\n 'volatile',\n 'while'\n ];\n const CONTEXTUAL_KEYWORDS = [\n 'add',\n 'alias',\n 'and',\n 'ascending',\n 'args',\n 'async',\n 'await',\n 'by',\n 'descending',\n 'dynamic',\n 'equals',\n 'file',\n 'from',\n 'get',\n 'global',\n 'group',\n 'init',\n 'into',\n 'join',\n 'let',\n 'nameof',\n 'not',\n 'notnull',\n 'on',\n 'or',\n 'orderby',\n 'partial',\n 'record',\n 'remove',\n 'required',\n 'scoped',\n 'select',\n 'set',\n 'unmanaged',\n 'value|0',\n 'var',\n 'when',\n 'where',\n 'with',\n 'yield'\n ];\n\n const KEYWORDS = {\n keyword: NORMAL_KEYWORDS.concat(CONTEXTUAL_KEYWORDS),\n built_in: BUILT_IN_KEYWORDS,\n literal: LITERAL_KEYWORDS\n };\n const TITLE_MODE = hljs.inherit(hljs.TITLE_MODE, { begin: '[a-zA-Z](\\\\.?\\\\w)*' });\n const NUMBERS = {\n className: 'number',\n variants: [\n { begin: '\\\\b(0b[01\\']+)' },\n { begin: '(-?)\\\\b([\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)(u|U|l|L|ul|UL|f|F|b|B)' },\n { begin: '(-?)(\\\\b0[xX][a-fA-F0-9\\']+|(\\\\b[\\\\d\\']+(\\\\.[\\\\d\\']*)?|\\\\.[\\\\d\\']+)([eE][-+]?[\\\\d\\']+)?)' }\n ],\n relevance: 0\n };\n const RAW_STRING = {\n className: 'string',\n begin: /\"\"\"(\"*)(?!\")(.|\\n)*?\"\"\"\\1/,\n relevance: 1\n };\n const VERBATIM_STRING = {\n className: 'string',\n begin: '@\"',\n end: '\"',\n contains: [ { begin: '\"\"' } ]\n };\n const VERBATIM_STRING_NO_LF = hljs.inherit(VERBATIM_STRING, { illegal: /\\n/ });\n const SUBST = {\n className: 'subst',\n begin: /\\{/,\n end: /\\}/,\n keywords: KEYWORDS\n };\n const SUBST_NO_LF = hljs.inherit(SUBST, { illegal: /\\n/ });\n const INTERPOLATED_STRING = {\n className: 'string',\n begin: /\\$\"/,\n end: '\"',\n illegal: /\\n/,\n contains: [\n { begin: /\\{\\{/ },\n { begin: /\\}\\}/ },\n hljs.BACKSLASH_ESCAPE,\n SUBST_NO_LF\n ]\n };\n const INTERPOLATED_VERBATIM_STRING = {\n className: 'string',\n begin: /\\$@\"/,\n end: '\"',\n contains: [\n { begin: /\\{\\{/ },\n { begin: /\\}\\}/ },\n { begin: '\"\"' },\n SUBST\n ]\n };\n const INTERPOLATED_VERBATIM_STRING_NO_LF = hljs.inherit(INTERPOLATED_VERBATIM_STRING, {\n illegal: /\\n/,\n contains: [\n { begin: /\\{\\{/ },\n { begin: /\\}\\}/ },\n { begin: '\"\"' },\n SUBST_NO_LF\n ]\n });\n SUBST.contains = [\n INTERPOLATED_VERBATIM_STRING,\n INTERPOLATED_STRING,\n VERBATIM_STRING,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n NUMBERS,\n hljs.C_BLOCK_COMMENT_MODE\n ];\n SUBST_NO_LF.contains = [\n INTERPOLATED_VERBATIM_STRING_NO_LF,\n INTERPOLATED_STRING,\n VERBATIM_STRING_NO_LF,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE,\n NUMBERS,\n hljs.inherit(hljs.C_BLOCK_COMMENT_MODE, { illegal: /\\n/ })\n ];\n const STRING = { variants: [\n RAW_STRING,\n INTERPOLATED_VERBATIM_STRING,\n INTERPOLATED_STRING,\n VERBATIM_STRING,\n hljs.APOS_STRING_MODE,\n hljs.QUOTE_STRING_MODE\n ] };\n\n const GENERIC_MODIFIER = {\n begin: \"<\",\n end: \">\",\n contains: [\n { beginKeywords: \"in out\" },\n TITLE_MODE\n ]\n };\n const TYPE_IDENT_RE = hljs.IDENT_RE + '(<' + hljs.IDENT_RE + '(\\\\s*,\\\\s*' + hljs.IDENT_RE + ')*>)?(\\\\[\\\\])?';\n const AT_IDENTIFIER = {\n // prevents expressions like `@class` from incorrect flagging\n // `class` as a keyword\n begin: \"@\" + hljs.IDENT_RE,\n relevance: 0\n };\n\n return {\n name: 'C#',\n aliases: [\n 'cs',\n 'c#'\n ],\n keywords: KEYWORDS,\n illegal: /::/,\n contains: [\n hljs.COMMENT(\n '///',\n '$',\n {\n returnBegin: true,\n contains: [\n {\n className: 'doctag',\n variants: [\n {\n begin: '///',\n relevance: 0\n },\n { begin: '<!--|-->' },\n {\n begin: '</?',\n end: '>'\n }\n ]\n }\n ]\n }\n ),\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE,\n {\n className: 'meta',\n begin: '#',\n end: '$',\n keywords: { keyword: 'if else elif endif define undef warning error line region endregion pragma checksum' }\n },\n STRING,\n NUMBERS,\n {\n beginKeywords: 'class interface',\n relevance: 0,\n end: /[{;=]/,\n illegal: /[^\\s:,]/,\n contains: [\n { beginKeywords: \"where class\" },\n TITLE_MODE,\n GENERIC_MODIFIER,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n {\n beginKeywords: 'namespace',\n relevance: 0,\n end: /[{;=]/,\n illegal: /[^\\s:]/,\n contains: [\n TITLE_MODE,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n {\n beginKeywords: 'record',\n relevance: 0,\n end: /[{;=]/,\n illegal: /[^\\s:]/,\n contains: [\n TITLE_MODE,\n GENERIC_MODIFIER,\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n {\n // [Attributes(\"\")]\n className: 'meta',\n begin: '^\\\\s*\\\\[(?=[\\\\w])',\n excludeBegin: true,\n end: '\\\\]',\n excludeEnd: true,\n contains: [\n {\n className: 'string',\n begin: /\"/,\n end: /\"/\n }\n ]\n },\n {\n // Expression keywords prevent 'keyword Name(...)' from being\n // recognized as a function definition\n beginKeywords: 'new return throw await else',\n relevance: 0\n },\n {\n className: 'function',\n begin: '(' + TYPE_IDENT_RE + '\\\\s+)+' + hljs.IDENT_RE + '\\\\s*(<[^=]+>\\\\s*)?\\\\(',\n returnBegin: true,\n end: /\\s*[{;=]/,\n excludeEnd: true,\n keywords: KEYWORDS,\n contains: [\n // prevents these from being highlighted `title`\n {\n beginKeywords: FUNCTION_MODIFIERS.join(\" \"),\n relevance: 0\n },\n {\n begin: hljs.IDENT_RE + '\\\\s*(<[^=]+>\\\\s*)?\\\\(',\n returnBegin: true,\n contains: [\n hljs.TITLE_MODE,\n GENERIC_MODIFIER\n ],\n relevance: 0\n },\n { match: /\\(\\)/ },\n {\n className: 'params',\n begin: /\\(/,\n end: /\\)/,\n excludeBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS,\n relevance: 0,\n contains: [\n STRING,\n NUMBERS,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n hljs.C_LINE_COMMENT_MODE,\n hljs.C_BLOCK_COMMENT_MODE\n ]\n },\n AT_IDENTIFIER\n ]\n };\n}\n\nexport { csharp as default };\n","// https://docs.oracle.com/javase/specs/jls/se15/html/jls-3.html#jls-3.10\nvar decimalDigits = '[0-9](_*[0-9])*';\nvar frac = `\\\\.(${decimalDigits})`;\nvar hexDigits = '[0-9a-fA-F](_*[0-9a-fA-F])*';\nvar NUMERIC = {\n className: 'number',\n variants: [\n // DecimalFloatingPointLiteral\n // including ExponentPart\n { begin: `(\\\\b(${decimalDigits})((${frac})|\\\\.)?|(${frac}))` +\n `[eE][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n // excluding ExponentPart\n { begin: `\\\\b(${decimalDigits})((${frac})[fFdD]?\\\\b|\\\\.([fFdD]\\\\b)?)` },\n { begin: `(${frac})[fFdD]?\\\\b` },\n { begin: `\\\\b(${decimalDigits})[fFdD]\\\\b` },\n\n // HexadecimalFloatingPointLiteral\n { begin: `\\\\b0[xX]((${hexDigits})\\\\.?|(${hexDigits})?\\\\.(${hexDigits}))` +\n `[pP][+-]?(${decimalDigits})[fFdD]?\\\\b` },\n\n // DecimalIntegerLiteral\n { begin: '\\\\b(0|[1-9](_*[0-9])*)[lL]?\\\\b' },\n\n // HexIntegerLiteral\n { begin: `\\\\b0[xX](${hexDigits})[lL]?\\\\b` },\n\n // OctalIntegerLiteral\n { begin: '\\\\b0(_*[0-7])*[lL]?\\\\b' },\n\n // BinaryIntegerLiteral\n { begin: '\\\\b0[bB][01](_*[01])*[lL]?\\\\b' },\n ],\n relevance: 0\n};\n\n/*\n Language: Kotlin\n Description: Kotlin is an OSS statically typed programming language that targets the JVM, Android, JavaScript and Native.\n Author: Sergey Mashkov <cy6erGn0m@gmail.com>\n Website: https://kotlinlang.org\n Category: common\n */\n\n\nfunction kotlin(hljs) {\n const KEYWORDS = {\n keyword:\n 'abstract as val var vararg get set class object open private protected public noinline '\n + 'crossinline dynamic final enum if else do while for when throw try catch finally '\n + 'import package is in fun override companion reified inline lateinit init '\n + 'interface annotation data sealed internal infix operator out by constructor super '\n + 'tailrec where const inner suspend typealias external expect actual',\n built_in:\n 'Byte Short Char Int Long Boolean Float Double Void Unit Nothing',\n literal:\n 'true false null'\n };\n const KEYWORDS_WITH_LABEL = {\n className: 'keyword',\n begin: /\\b(break|continue|return|this)\\b/,\n starts: { contains: [\n {\n className: 'symbol',\n begin: /@\\w+/\n }\n ] }\n };\n const LABEL = {\n className: 'symbol',\n begin: hljs.UNDERSCORE_IDENT_RE + '@'\n };\n\n // for string templates\n const SUBST = {\n className: 'subst',\n begin: /\\$\\{/,\n end: /\\}/,\n contains: [ hljs.C_NUMBER_MODE ]\n };\n const VARIABLE = {\n className: 'variable',\n begin: '\\\\$' + hljs.UNDERSCORE_IDENT_RE\n };\n const STRING = {\n className: 'string',\n variants: [\n {\n begin: '\"\"\"',\n end: '\"\"\"(?=[^\"])',\n contains: [\n VARIABLE,\n SUBST\n ]\n },\n // Can't use built-in modes easily, as we want to use STRING in the meta\n // context as 'meta-string' and there's no syntax to remove explicitly set\n // classNames in built-in modes.\n {\n begin: '\\'',\n end: '\\'',\n illegal: /\\n/,\n contains: [ hljs.BACKSLASH_ESCAPE ]\n },\n {\n begin: '\"',\n end: '\"',\n illegal: /\\n/,\n contains: [\n hljs.BACKSLASH_ESCAPE,\n VARIABLE,\n SUBST\n ]\n }\n ]\n };\n SUBST.contains.push(STRING);\n\n const ANNOTATION_USE_SITE = {\n className: 'meta',\n begin: '@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\\\s*:(?:\\\\s*' + hljs.UNDERSCORE_IDENT_RE + ')?'\n };\n const ANNOTATION = {\n className: 'meta',\n begin: '@' + hljs.UNDERSCORE_IDENT_RE,\n contains: [\n {\n begin: /\\(/,\n end: /\\)/,\n contains: [\n hljs.inherit(STRING, { className: 'string' }),\n \"self\"\n ]\n }\n ]\n };\n\n // https://kotlinlang.org/docs/reference/whatsnew11.html#underscores-in-numeric-literals\n // According to the doc above, the number mode of kotlin is the same as java 8,\n // so the code below is copied from java.js\n const KOTLIN_NUMBER_MODE = NUMERIC;\n const KOTLIN_NESTED_COMMENT = hljs.COMMENT(\n '/\\\\*', '\\\\*/',\n { contains: [ hljs.C_BLOCK_COMMENT_MODE ] }\n );\n const KOTLIN_PAREN_TYPE = { variants: [\n {\n className: 'type',\n begin: hljs.UNDERSCORE_IDENT_RE\n },\n {\n begin: /\\(/,\n end: /\\)/,\n contains: [] // defined later\n }\n ] };\n const KOTLIN_PAREN_TYPE2 = KOTLIN_PAREN_TYPE;\n KOTLIN_PAREN_TYPE2.variants[1].contains = [ KOTLIN_PAREN_TYPE ];\n KOTLIN_PAREN_TYPE.variants[1].contains = [ KOTLIN_PAREN_TYPE2 ];\n\n return {\n name: 'Kotlin',\n aliases: [\n 'kt',\n 'kts'\n ],\n keywords: KEYWORDS,\n contains: [\n hljs.COMMENT(\n '/\\\\*\\\\*',\n '\\\\*/',\n {\n relevance: 0,\n contains: [\n {\n className: 'doctag',\n begin: '@[A-Za-z]+'\n }\n ]\n }\n ),\n hljs.C_LINE_COMMENT_MODE,\n KOTLIN_NESTED_COMMENT,\n KEYWORDS_WITH_LABEL,\n LABEL,\n ANNOTATION_USE_SITE,\n ANNOTATION,\n {\n className: 'function',\n beginKeywords: 'fun',\n end: '[(]|$',\n returnBegin: true,\n excludeEnd: true,\n keywords: KEYWORDS,\n relevance: 5,\n contains: [\n {\n begin: hljs.UNDERSCORE_IDENT_RE + '\\\\s*\\\\(',\n returnBegin: true,\n relevance: 0,\n contains: [ hljs.UNDERSCORE_TITLE_MODE ]\n },\n {\n className: 'type',\n begin: /</,\n end: />/,\n keywords: 'reified',\n relevance: 0\n },\n {\n className: 'params',\n begin: /\\(/,\n end: /\\)/,\n endsParent: true,\n keywords: KEYWORDS,\n relevance: 0,\n contains: [\n {\n begin: /:/,\n end: /[=,\\/]/,\n endsWithParent: true,\n contains: [\n KOTLIN_PAREN_TYPE,\n hljs.C_LINE_COMMENT_MODE,\n KOTLIN_NESTED_COMMENT\n ],\n relevance: 0\n },\n hljs.C_LINE_COMMENT_MODE,\n KOTLIN_NESTED_COMMENT,\n ANNOTATION_USE_SITE,\n ANNOTATION,\n STRING,\n hljs.C_NUMBER_MODE\n ]\n },\n KOTLIN_NESTED_COMMENT\n ]\n },\n {\n begin: [\n /class|interface|trait/,\n /\\s+/,\n hljs.UNDERSCORE_IDENT_RE\n ],\n beginScope: {\n 3: \"title.class\"\n },\n keywords: 'class interface trait',\n end: /[:\\{(]|$/,\n excludeEnd: true,\n illegal: 'extends implements',\n contains: [\n { beginKeywords: 'public protected internal private constructor' },\n hljs.UNDERSCORE_TITLE_MODE,\n {\n className: 'type',\n begin: /</,\n end: />/,\n excludeBegin: true,\n excludeEnd: true,\n relevance: 0\n },\n {\n className: 'type',\n begin: /[,:]\\s*/,\n end: /[<\\(,){\\s]|$/,\n excludeBegin: true,\n returnEnd: true\n },\n ANNOTATION_USE_SITE,\n ANNOTATION\n ]\n },\n STRING,\n {\n className: 'meta',\n begin: \"^#!/usr/bin/env\",\n end: '$',\n illegal: '\\n'\n },\n KOTLIN_NUMBER_MODE\n ]\n };\n}\n\nexport { kotlin as default };\n","/*\n Language: GraphQL\n Author: John Foster (GH jf990), and others\n Description: GraphQL is a query language for APIs\n Category: web, common\n*/\n\n/** @type LanguageFn */\nfunction graphql(hljs) {\n const regex = hljs.regex;\n const GQL_NAME = /[_A-Za-z][_0-9A-Za-z]*/;\n return {\n name: \"GraphQL\",\n aliases: [ \"gql\" ],\n case_insensitive: true,\n disableAutodetect: false,\n keywords: {\n keyword: [\n \"query\",\n \"mutation\",\n \"subscription\",\n \"type\",\n \"input\",\n \"schema\",\n \"directive\",\n \"interface\",\n \"union\",\n \"scalar\",\n \"fragment\",\n \"enum\",\n \"on\"\n ],\n literal: [\n \"true\",\n \"false\",\n \"null\"\n ]\n },\n contains: [\n hljs.HASH_COMMENT_MODE,\n hljs.QUOTE_STRING_MODE,\n hljs.NUMBER_MODE,\n {\n scope: \"punctuation\",\n match: /[.]{3}/,\n relevance: 0\n },\n {\n scope: \"punctuation\",\n begin: /[\\!\\(\\)\\:\\=\\[\\]\\{\\|\\}]{1}/,\n relevance: 0\n },\n {\n scope: \"variable\",\n begin: /\\$/,\n end: /\\W/,\n excludeEnd: true,\n relevance: 0\n },\n {\n scope: \"meta\",\n match: /@\\w+/,\n excludeEnd: true\n },\n {\n scope: \"symbol\",\n begin: regex.concat(GQL_NAME, regex.lookahead(/\\s*:/)),\n relevance: 0\n }\n ],\n illegal: [\n /[;<']/,\n /BEGIN/\n ]\n };\n}\n\nexport { graphql as default };\n","/*\nLanguage: Markdown\nRequires: xml.js\nAuthor: John Crepezzi <john.crepezzi@gmail.com>\nWebsite: https://daringfireball.net/projects/markdown/\nCategory: common, markup\n*/\n\nfunction markdown(hljs) {\n const regex = hljs.regex;\n const INLINE_HTML = {\n begin: /<\\/?[A-Za-z_]/,\n end: '>',\n subLanguage: 'xml',\n relevance: 0\n };\n const HORIZONTAL_RULE = {\n begin: '^[-\\\\*]{3,}',\n end: '$'\n };\n const CODE = {\n className: 'code',\n variants: [\n // TODO: fix to allow these to work with sublanguage also\n { begin: '(`{3,})[^`](.|\\\\n)*?\\\\1`*[ ]*' },\n { begin: '(~{3,})[^~](.|\\\\n)*?\\\\1~*[ ]*' },\n // needed to allow markdown as a sublanguage to work\n {\n begin: '```',\n end: '```+[ ]*$'\n },\n {\n begin: '~~~',\n end: '~~~+[ ]*$'\n },\n { begin: '`.+?`' },\n {\n begin: '(?=^( {4}|\\\\t))',\n // use contains to gobble up multiple lines to allow the block to be whatever size\n // but only have a single open/close tag vs one per line\n contains: [\n {\n begin: '^( {4}|\\\\t)',\n end: '(\\\\n)$'\n }\n ],\n relevance: 0\n }\n ]\n };\n const LIST = {\n className: 'bullet',\n begin: '^[ \\t]*([*+-]|(\\\\d+\\\\.))(?=\\\\s+)',\n end: '\\\\s+',\n excludeEnd: true\n };\n const LINK_REFERENCE = {\n begin: /^\\[[^\\n]+\\]:/,\n returnBegin: true,\n contains: [\n {\n className: 'symbol',\n begin: /\\[/,\n end: /\\]/,\n excludeBegin: true,\n excludeEnd: true\n },\n {\n className: 'link',\n begin: /:\\s*/,\n end: /$/,\n excludeBegin: true\n }\n ]\n };\n const URL_SCHEME = /[A-Za-z][A-Za-z0-9+.-]*/;\n const LINK = {\n variants: [\n // too much like nested array access in so many languages\n // to have any real relevance\n {\n begin: /\\[.+?\\]\\[.*?\\]/,\n relevance: 0\n },\n // popular internet URLs\n {\n begin: /\\[.+?\\]\\(((data|javascript|mailto):|(?:http|ftp)s?:\\/\\/).*?\\)/,\n relevance: 2\n },\n {\n begin: regex.concat(/\\[.+?\\]\\(/, URL_SCHEME, /:\\/\\/.*?\\)/),\n relevance: 2\n },\n // relative urls\n {\n begin: /\\[.+?\\]\\([./?&#].*?\\)/,\n relevance: 1\n },\n // whatever else, lower relevance (might not be a link at all)\n {\n begin: /\\[.*?\\]\\(.*?\\)/,\n relevance: 0\n }\n ],\n returnBegin: true,\n contains: [\n {\n // empty strings for alt or link text\n match: /\\[(?=\\])/ },\n {\n className: 'string',\n relevance: 0,\n begin: '\\\\[',\n end: '\\\\]',\n excludeBegin: true,\n returnEnd: true\n },\n {\n className: 'link',\n relevance: 0,\n begin: '\\\\]\\\\(',\n end: '\\\\)',\n excludeBegin: true,\n excludeEnd: true\n },\n {\n className: 'symbol',\n relevance: 0,\n begin: '\\\\]\\\\[',\n end: '\\\\]',\n excludeBegin: true,\n excludeEnd: true\n }\n ]\n };\n const BOLD = {\n className: 'strong',\n contains: [], // defined later\n variants: [\n {\n begin: /_{2}(?!\\s)/,\n end: /_{2}/\n },\n {\n begin: /\\*{2}(?!\\s)/,\n end: /\\*{2}/\n }\n ]\n };\n const ITALIC = {\n className: 'emphasis',\n contains: [], // defined later\n variants: [\n {\n begin: /\\*(?![*\\s])/,\n end: /\\*/\n },\n {\n begin: /_(?![_\\s])/,\n end: /_/,\n relevance: 0\n }\n ]\n };\n\n // 3 level deep nesting is not allowed because it would create confusion\n // in cases like `***testing***` because where we don't know if the last\n // `***` is starting a new bold/italic or finishing the last one\n const BOLD_WITHOUT_ITALIC = hljs.inherit(BOLD, { contains: [] });\n const ITALIC_WITHOUT_BOLD = hljs.inherit(ITALIC, { contains: [] });\n BOLD.contains.push(ITALIC_WITHOUT_BOLD);\n ITALIC.contains.push(BOLD_WITHOUT_ITALIC);\n\n let CONTAINABLE = [\n INLINE_HTML,\n LINK\n ];\n\n [\n BOLD,\n ITALIC,\n BOLD_WITHOUT_ITALIC,\n ITALIC_WITHOUT_BOLD\n ].forEach(m => {\n m.contains = m.contains.concat(CONTAINABLE);\n });\n\n CONTAINABLE = CONTAINABLE.concat(BOLD, ITALIC);\n\n const HEADER = {\n className: 'section',\n variants: [\n {\n begin: '^#{1,6}',\n end: '$',\n contains: CONTAINABLE\n },\n {\n begin: '(?=^.+?\\\\n[=-]{2,}$)',\n contains: [\n { begin: '^[=-]*$' },\n {\n begin: '^',\n end: \"\\\\n\",\n contains: CONTAINABLE\n }\n ]\n }\n ]\n };\n\n const BLOCKQUOTE = {\n className: 'quote',\n begin: '^>\\\\s+',\n contains: CONTAINABLE,\n end: '$'\n };\n\n const ENTITY = {\n //https://spec.commonmark.org/0.31.2/#entity-references\n scope: 'literal',\n match: /&([a-zA-Z0-9]+|#[0-9]{1,7}|#[Xx][0-9a-fA-F]{1,6});/\n };\n\n return {\n name: 'Markdown',\n aliases: [\n 'md',\n 'mkdown',\n 'mkd'\n ],\n contains: [\n HEADER,\n INLINE_HTML,\n LIST,\n BOLD,\n ITALIC,\n BLOCKQUOTE,\n CODE,\n HORIZONTAL_RULE,\n LINK,\n LINK_REFERENCE,\n ENTITY\n ]\n };\n}\n\nexport { markdown as default };\n","/**\n * MarkdownView — DUI wrapper of the Daakia markdown renderer.\n * Renders AI/markdown content with syntax-highlighted code blocks,\n * GFM tables, task lists, blockquotes, and copy-buttons on code blocks.\n *\n * Depends on: marked (v14), highlight.js (v11) — both already bundled.\n */\nimport { useMemo, useEffect, useRef, useCallback } from 'react';\nimport { marked, Renderer, type MarkedExtension } from 'marked';\nimport hljs from 'highlight.js/lib/core';\nimport type { LanguageFn } from 'highlight.js';\nimport javascript from 'highlight.js/lib/languages/javascript';\nimport typescript from 'highlight.js/lib/languages/typescript';\nimport json from 'highlight.js/lib/languages/json';\nimport xml from 'highlight.js/lib/languages/xml';\nimport css from 'highlight.js/lib/languages/css';\nimport bash from 'highlight.js/lib/languages/bash';\nimport yaml from 'highlight.js/lib/languages/yaml';\nimport python from 'highlight.js/lib/languages/python';\nimport sql from 'highlight.js/lib/languages/sql';\nimport ruby from 'highlight.js/lib/languages/ruby';\nimport rust from 'highlight.js/lib/languages/rust';\nimport csharp from 'highlight.js/lib/languages/csharp';\nimport kotlin from 'highlight.js/lib/languages/kotlin';\nimport graphql from 'highlight.js/lib/languages/graphql';\nimport markdown from 'highlight.js/lib/languages/markdown';\n\n// Curated set — covers AI/assistant code output plus everything MarkdownView's\n// ALIASES map below can resolve to. highlightAuto() only detects among these,\n// not highlight.js's full ~190-language corpus (which used to be pulled in\n// wholesale via a bare `import hljs from 'highlight.js'`).\nlet _languagesRegistered = false;\nfunction ensureLanguages() {\n if (_languagesRegistered) return;\n _languagesRegistered = true;\n hljs.registerLanguage('javascript', javascript);\n hljs.registerLanguage('js', javascript);\n hljs.registerLanguage('jsx', javascript);\n hljs.registerLanguage('typescript', typescript);\n hljs.registerLanguage('ts', typescript);\n hljs.registerLanguage('tsx', typescript);\n hljs.registerLanguage('json', json);\n hljs.registerLanguage('xml', xml);\n hljs.registerLanguage('html', xml);\n hljs.registerLanguage('css', css);\n hljs.registerLanguage('bash', bash);\n hljs.registerLanguage('shell', bash);\n hljs.registerLanguage('sh', bash);\n hljs.registerLanguage('yaml', yaml);\n hljs.registerLanguage('yml', yaml);\n hljs.registerLanguage('python', python);\n hljs.registerLanguage('py', python);\n hljs.registerLanguage('sql', sql);\n hljs.registerLanguage('ruby', ruby);\n hljs.registerLanguage('rb', ruby);\n hljs.registerLanguage('rust', rust);\n hljs.registerLanguage('rs', rust);\n hljs.registerLanguage('csharp', csharp);\n hljs.registerLanguage('cs', csharp);\n hljs.registerLanguage('kotlin', kotlin);\n hljs.registerLanguage('kt', kotlin);\n hljs.registerLanguage('graphql', graphql);\n hljs.registerLanguage('markdown', markdown);\n hljs.registerLanguage('md', markdown);\n}\n\n/**\n * Register an additional highlight.js language for MarkdownView's code\n * blocks (and its `highlightAuto()` fallback) without waiting on a dui\n * version bump. Call once at app startup, before any MarkdownView renders:\n *\n * import lua from 'highlight.js/lib/languages/lua';\n * registerMarkdownLanguage('lua', lua);\n *\n * Safe to call multiple times / re-register the same name (highlight.js\n * itself is idempotent about this).\n */\nexport function registerMarkdownLanguage(name: string, definition: LanguageFn): void {\n hljs.registerLanguage(name, definition);\n}\n\n// ─── Singleton guard ──────────────────────────────────────────────────────────\n\nlet _configured = false;\n\n// ─── Marked renderer ─────────────────────────────────────────────────────────\n\nfunction buildRenderer(): Renderer {\n const r = new Renderer();\n\n r.code = ({ text, lang }: { text: string; lang?: string }) => {\n const safeLang = (lang || '').replace(/[<>\"'&]/g, '');\n let highlighted = text;\n let resolvedLang = safeLang || 'plaintext';\n try {\n if (safeLang && hljs.getLanguage(safeLang)) {\n highlighted = hljs.highlight(text, { language: safeLang }).value;\n } else if (safeLang) {\n const ALIASES: Record<string, string> = {\n js: 'javascript', ts: 'typescript', sh: 'bash', py: 'python',\n yml: 'yaml', rb: 'ruby', rs: 'rust', cs: 'csharp', kt: 'kotlin',\n };\n const alias = ALIASES[safeLang.toLowerCase()];\n if (alias && hljs.getLanguage(alias)) {\n highlighted = hljs.highlight(text, { language: alias }).value;\n } else {\n const auto = hljs.highlightAuto(text);\n highlighted = auto.value;\n }\n } else {\n const auto = hljs.highlightAuto(text);\n highlighted = auto.value;\n resolvedLang = auto.language || 'plaintext';\n }\n } catch { /* noop */ }\n const encoded = encodeURIComponent(text);\n // Inline SVG strings — safe because they live in a dangerouslySetInnerHTML template\n const copyIcon = `<svg width=\"11\" height=\"11\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"dui-mdv-copy-icon\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"/></svg>`;\n return [\n `<div class=\"dui-mdv-code-block\">`,\n `<div class=\"dui-mdv-code-header\">`,\n `<span class=\"dui-mdv-lang-pill\">${resolvedLang}</span>`,\n `<button class=\"dui-mdv-copy-btn\" data-code=\"${encoded}\" title=\"Copy code\">${copyIcon}<span class=\"dui-mdv-copy-label\">Copy</span></button>`,\n `</div>`,\n `<pre><code class=\"hljs language-${resolvedLang}\">${highlighted}</code></pre>`,\n `</div>`,\n ].join('');\n };\n\n r.codespan = ({ text }: { text: string }) =>\n `<code class=\"dui-mdv-inline-code\">${text}</code>`;\n\n return r;\n}\n\nfunction ensureConfig() {\n if (_configured) return;\n _configured = true;\n ensureLanguages();\n const ext: MarkedExtension = { renderer: buildRenderer(), breaks: true, gfm: true };\n marked.use(ext);\n}\n\nfunction parseMarkdown(content: string): string {\n ensureConfig();\n try {\n const result = marked.parse(content);\n return typeof result === 'string' ? result : content;\n } catch {\n const escaped = content.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');\n return `<p>${escaped}</p>`;\n }\n}\n\n// ─── Copy-button wiring ──────────────────────────────────────────────────────\n\nconst COPY_HTML = `<svg width=\"11\" height=\"11\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"dui-mdv-copy-icon\"><rect x=\"9\" y=\"9\" width=\"13\" height=\"13\" rx=\"2\"/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"/></svg><span class=\"dui-mdv-copy-label\">Copy</span>`;\nconst CHECK_HTML = `<svg width=\"11\" height=\"11\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"dui-mdv-copy-icon dui-mdv-check-icon\"><polyline points=\"20 6 9 17 4 12\"/></svg><span class=\"dui-mdv-copy-label\">Copied</span>`;\n\nfunction wireCopyButtons(root: HTMLElement) {\n root.querySelectorAll<HTMLButtonElement>('.dui-mdv-copy-btn:not([data-wired])').forEach(btn => {\n btn.dataset.wired = '1';\n btn.addEventListener('click', () => {\n const code = decodeURIComponent(btn.dataset.code ?? '');\n navigator.clipboard?.writeText(code).catch(() => {});\n btn.innerHTML = CHECK_HTML;\n btn.classList.add('dui-mdv-copied');\n setTimeout(() => { btn.innerHTML = COPY_HTML; btn.classList.remove('dui-mdv-copied'); }, 2000);\n });\n });\n}\n\n// ─── Component ───────────────────────────────────────────────────────────────\n\nexport interface MarkdownViewProps {\n content: string;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function MarkdownView({ content, className = '', style }: MarkdownViewProps) {\n const rootRef = useRef<HTMLDivElement>(null);\n const html = useMemo(() => parseMarkdown(content), [content]);\n\n const attachButtons = useCallback(() => {\n if (rootRef.current) wireCopyButtons(rootRef.current);\n }, []);\n\n useEffect(() => { attachButtons(); }, [html, attachButtons]);\n\n return (\n <div\n ref={rootRef}\n className={`dui-mdv-root${className ? ` ${className}` : ''}`}\n style={style}\n // Safe: content is markdown parsed by marked — not raw user HTML\n dangerouslySetInnerHTML={{ __html: html }}\n />\n );\n}\n","import { useState, useRef } from 'react';\nimport { SelectInputView } from './SelectInputView';\nimport { CheckCircleFilledIcon, TrashIcon, PlusIcon, DownloadIcon } from '../../../icons';\n\nexport interface FormDataRow {\n id: string;\n key: string;\n value: string;\n type: 'text' | 'file';\n enabled: boolean;\n fileNames?: string[];\n fileData?: string[]; // base64\n fileMimeTypes?: string[];\n}\n\nexport interface FormDataTableViewProps {\n rows: FormDataRow[];\n onChange: (rows: FormDataRow[]) => void;\n /** Called when a file row's picker resolves. Pass undefined to handle file reads externally. */\n onFileSelect?: (rowId: string, files: File[]) => void;\n accentColor?: string;\n label?: string;\n hideToolbar?: boolean;\n className?: string;\n style?: React.CSSProperties;\n}\n\nfunction createRow(): FormDataRow {\n return { id: crypto.randomUUID(), key: '', value: '', type: 'text', enabled: true };\n}\n\nconst TYPE_OPTIONS = [\n { value: 'text', label: 'Text' },\n { value: 'file', label: 'File' },\n];\n\nexport function FormDataTableView({\n rows,\n onChange,\n onFileSelect,\n accentColor,\n label,\n hideToolbar = false,\n className = '',\n style,\n}: FormDataTableViewProps) {\n const [confirmClear, setConfirmClear] = useState(false);\n const fileRefs = useRef<Map<string, HTMLInputElement>>(new Map());\n const accent = accentColor || 'var(--color-primary)';\n\n const updateRow = (idx: number, patch: Partial<FormDataRow>) => {\n const next = [...rows];\n next[idx] = { ...next[idx], ...patch };\n onChange(next);\n };\n\n const removeRow = (idx: number) => {\n if (rows.length <= 1) { onChange([createRow()]); return; }\n onChange(rows.filter((_, i) => i !== idx));\n };\n\n const addRow = () => onChange([...rows, createRow()]);\n\n const handleFileChange = async (idx: number, fileList: FileList | null) => {\n if (!fileList || fileList.length === 0) return;\n const files = Array.from(fileList);\n const row = rows[idx];\n if (onFileSelect) {\n onFileSelect(row.id, files);\n return;\n }\n // Default: read to base64 locally\n const names = files.map(f => f.name);\n const mimeTypes = files.map(f => f.type || 'application/octet-stream');\n const base64Data: string[] = [];\n for (const file of files) {\n const data = await new Promise<string>((resolve) => {\n const reader = new FileReader();\n reader.onload = () => {\n const result = reader.result as string;\n resolve(result.includes(',') ? result.split(',')[1] : result);\n };\n reader.readAsDataURL(file);\n });\n base64Data.push(data);\n }\n updateRow(idx, { fileNames: names, value: names.join(', '), fileData: base64Data, fileMimeTypes: mimeTypes });\n };\n\n const downloadFile = (row: FormDataRow) => {\n if (!row.fileData || !row.fileNames) return;\n for (let i = 0; i < row.fileData.length; i++) {\n const mime = row.fileMimeTypes?.[i] || 'application/octet-stream';\n const blob = new Blob([Uint8Array.from(atob(row.fileData[i]), c => c.charCodeAt(0))], { type: mime });\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = row.fileNames[i] || 'file';\n a.click();\n URL.revokeObjectURL(url);\n }\n };\n\n const hasContent = rows.some(r => r.key || r.value);\n\n const inputStyle: React.CSSProperties = {\n flex: 1, height: 28, padding: '0 10px', borderRadius: 4, fontSize: 11,\n background: 'color-mix(in srgb, var(--color-text-primary) 4%, transparent)',\n border: '1px solid var(--color-surface-border)',\n color: 'var(--color-text-primary)',\n outline: 'none',\n fontFamily: 'inherit',\n };\n\n return (\n <div className={className} style={{ fontSize: 12, ...style }}>\n {/* Toolbar */}\n {!hideToolbar && (\n <div style={{ display: 'flex', alignItems: 'center', gap: 8, marginBottom: 8, justifyContent: 'space-between' }}>\n {label && <span style={{ fontSize: 11, fontWeight: 600, color: 'var(--color-text-muted)', textTransform: 'uppercase', letterSpacing: '0.06em' }}>{label}</span>}\n <div style={{ display: 'flex', gap: 6, marginLeft: 'auto' }}>\n {hasContent && !confirmClear && (\n <button\n type=\"button\"\n onClick={() => setConfirmClear(true)}\n style={{ background: 'none', border: 'none', cursor: 'pointer', color: 'var(--color-text-muted)', fontSize: 11, padding: '2px 6px', borderRadius: 4, fontFamily: 'inherit' }}\n onMouseEnter={e => { e.currentTarget.style.color = 'var(--color-error)'; }}\n onMouseLeave={e => { e.currentTarget.style.color = 'var(--color-text-muted)'; }}\n >\n Clear all\n </button>\n )}\n {confirmClear && (\n <>\n <span style={{ fontSize: 11, color: 'var(--color-text-muted)' }}>Clear all?</span>\n <button type=\"button\" onClick={() => { onChange([createRow()]); setConfirmClear(false); }} style={{ background: 'none', border: 'none', cursor: 'pointer', color: 'var(--color-error)', fontSize: 11, padding: '2px 6px', fontFamily: 'inherit' }}>Yes</button>\n <button type=\"button\" onClick={() => setConfirmClear(false)} style={{ background: 'none', border: 'none', cursor: 'pointer', color: 'var(--color-text-muted)', fontSize: 11, padding: '2px 6px', fontFamily: 'inherit' }}>No</button>\n </>\n )}\n <button\n type=\"button\"\n onClick={addRow}\n style={{ display: 'flex', alignItems: 'center', gap: 4, background: 'none', border: 'none', cursor: 'pointer', color: accent, fontSize: 11, padding: '2px 6px', borderRadius: 4, fontFamily: 'inherit' }}\n >\n <PlusIcon size={11} /> Add row\n </button>\n </div>\n </div>\n )}\n\n {/* Column headers */}\n <div style={{ display: 'grid', gridTemplateColumns: '28px 1fr 90px 1fr 28px', gap: '4px 8px', padding: '0 2px', marginBottom: 4 }}>\n <div />\n <div style={{ fontSize: 10, fontWeight: 700, color: 'var(--color-text-muted)', textTransform: 'uppercase', letterSpacing: '0.06em', padding: '0 4px' }}>Key</div>\n <div style={{ fontSize: 10, fontWeight: 700, color: 'var(--color-text-muted)', textTransform: 'uppercase', letterSpacing: '0.06em', padding: '0 4px' }}>Type</div>\n <div style={{ fontSize: 10, fontWeight: 700, color: 'var(--color-text-muted)', textTransform: 'uppercase', letterSpacing: '0.06em', padding: '0 4px' }}>Value / File</div>\n <div />\n </div>\n\n {/* Rows */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: 2 }}>\n {rows.map((row, idx) => (\n <div\n key={row.id}\n style={{\n display: 'grid',\n gridTemplateColumns: '28px 1fr 90px 1fr 28px',\n gap: '4px 8px',\n padding: '2px 2px',\n alignItems: 'center',\n opacity: row.enabled ? 1 : 0.45,\n }}\n >\n {/* Enable/Disable */}\n <div style={{ display: 'flex', justifyContent: 'center' }}>\n <button\n type=\"button\"\n onClick={() => updateRow(idx, { enabled: !row.enabled })}\n style={{ background: 'none', border: 'none', cursor: 'pointer', padding: 2, color: row.enabled ? 'var(--color-success)' : 'var(--color-text-muted)', display: 'flex' }}\n title={row.enabled ? 'Disable' : 'Enable'}\n >\n <CheckCircleFilledIcon size={15} checked={row.enabled} />\n </button>\n </div>\n\n {/* Key */}\n <input\n type=\"text\"\n value={row.key}\n onChange={e => updateRow(idx, { key: e.target.value })}\n placeholder=\"Field name\"\n style={inputStyle}\n onFocus={e => { e.currentTarget.style.borderColor = accent; }}\n onBlur={e => { e.currentTarget.style.borderColor = 'var(--color-surface-border)'; }}\n />\n\n {/* Type */}\n <SelectInputView\n options={TYPE_OPTIONS}\n value={row.type}\n onChange={v => updateRow(idx, { type: v as 'text' | 'file', value: v === 'file' ? '' : row.value, fileNames: undefined, fileData: undefined })}\n accentColor={accent}\n />\n\n {/* Value / File */}\n {row.type === 'text' ? (\n <input\n type=\"text\"\n value={row.value}\n onChange={e => updateRow(idx, { value: e.target.value })}\n placeholder=\"Value\"\n style={inputStyle}\n onFocus={e => { e.currentTarget.style.borderColor = accent; }}\n onBlur={e => { e.currentTarget.style.borderColor = 'var(--color-surface-border)'; }}\n />\n ) : (\n <div style={{ display: 'flex', alignItems: 'center', gap: 6, height: 28 }}>\n <button\n type=\"button\"\n onClick={() => fileRefs.current.get(row.id)?.click()}\n style={{\n height: 26, padding: '0 10px', fontSize: 11, borderRadius: 4, cursor: 'pointer',\n background: `color-mix(in srgb, ${accent} 10%, transparent)`,\n border: `1px solid color-mix(in srgb, ${accent} 30%, transparent)`,\n color: accent, whiteSpace: 'nowrap', fontFamily: 'inherit',\n }}\n >\n Choose File\n </button>\n {row.fileNames && row.fileNames.length > 0 ? (\n <div style={{ display: 'flex', alignItems: 'center', gap: 4, flex: 1, overflow: 'hidden' }}>\n <span style={{ fontSize: 11, color: 'var(--color-text-muted)', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap', flex: 1 }}>\n {row.fileNames.join(', ')}\n </span>\n {row.fileData && (\n <button\n type=\"button\"\n onClick={e => { e.stopPropagation(); downloadFile(row); }}\n style={{ background: 'none', border: 'none', cursor: 'pointer', color: 'var(--color-text-muted)', display: 'flex', flexShrink: 0 }}\n title=\"Download file\"\n >\n <DownloadIcon size={13} />\n </button>\n )}\n </div>\n ) : (\n <span style={{ fontSize: 11, color: 'var(--color-text-muted)' }}>No file chosen</span>\n )}\n <input\n ref={el => { if (el) fileRefs.current.set(row.id, el); }}\n type=\"file\"\n multiple\n style={{ display: 'none' }}\n onChange={e => handleFileChange(idx, e.target.files)}\n />\n </div>\n )}\n\n {/* Delete */}\n <div style={{ display: 'flex', justifyContent: 'center' }}>\n <button\n type=\"button\"\n onClick={() => removeRow(idx)}\n style={{ background: 'none', border: 'none', cursor: 'pointer', color: 'var(--color-text-muted)', padding: 2, display: 'flex', opacity: rows.length === 1 && !row.key && !row.value ? 0.3 : 1 }}\n title=\"Remove row\"\n onMouseEnter={e => { e.currentTarget.style.color = 'var(--color-error)'; }}\n onMouseLeave={e => { e.currentTarget.style.color = 'var(--color-text-muted)'; }}\n >\n <TrashIcon size={13} />\n </button>\n </div>\n </div>\n ))}\n </div>\n </div>\n );\n}\n","import React from 'react';\nimport './SpacerView.css';\n\nexport interface SpacerViewProps {\n orientation?: 'horizontal' | 'vertical';\n spacing?: 'sm' | 'md' | 'lg';\n className?: string;\n}\n\nexport function SpacerView({ orientation = 'horizontal', spacing = 'md', className = '' }: SpacerViewProps) {\n return (\n <div\n className={`dui_spacer dui_spacer--${orientation} dui_spacer--${spacing}${className ? ` ${className}` : ''}`}\n role=\"separator\"\n aria-hidden=\"true\"\n />\n );\n}\n"],"names":["useInputBase","sizeProp","overrides","ctx","useDui","s","sizeRadius","DUI_DEFAULT_RADIUS","DUI_HEIGHT","DUI_FONT_SIZE","DUI_ICON_SIZE","resolveBorderRadius","DUI_PADDING_X","DUI_GAP","resolveWidth","useButtonBase","useNavBase","paddingX","useChipBase","DUI_CHIP_HEIGHT","DUI_RADIUS_MAP","useToggleBase","DUI_TOGGLE","useMenuBase","gap","useTabBase","useTableBase","useDisplayBase","useOverlayBase","radiusMap","useCardBase","padding","useSelectBase","DUI_SELECT_ITEM_PY","XS","ChipView","label","color","bg","size","rounded","onClick","active","className","style","isXs","base","height","px","fontSize","accent","borderRadius","background","textColor","borderColor","jsx","ButtonView","variant","iconLeft","iconRight","loading","accentColor","children","disabled","width","defaultColor","activeColor","fontStyle","rest","radius","isDisabled","variantStyle","accentVars","jsxs","SpinnerIcon","SegmentedView","options","value","onChange","h","fs","opt","SIZE_PX","IconButtonView","icon","tooltip","dim","activeClr","resolvedRadius","resolvedColor","baseBg","baseStyle","DropDownButtonView","items","onPrimaryClick","align","open","setOpen","useState","wrapperRef","useRef","text","isPrimary","isDanger","baseColor","wrapperBg","wrapperBorder","hoverBtnBg","Fragment","v","ChevronDownIcon","ContextMenuView","TextInputView","forwardRef","error","prefixIcon","suffixIcon","masked","maskIcon","naked","onFocus","onBlur","type","ref","focused","setFocused","showMasked","setShowMasked","effectiveLeft","effectiveRight","containerStyle","inputType","toggleIcon","EyeIcon","EyeOffIcon","e","MultilineInputView","rows","resize","resolveSelectSize","BadgeChip","SelectInputView","placeholder","triggerRef","menuRef","duiSize","selected","o","useEffect","trigger","menu","position","r","M","menuH","menuW","left","raf","handler","_a","_b","handleSelect","useCallback","handleKey","idx","boxShadow","DropdownArrowIcon","createPortal","i","SELECT_WIDTH","SelectTextInputView","selectValue","selectOptions","onSelectChange","inputValue","onInputChange","selectWidth","suggestions","mockServers","onMockServerSelect","onKeyDown","suggestionMinWidth","suggestionZIndex","resolvedSize","selWidth","methodOpen","setMethodOpen","showSuggestions","setShowSuggestions","highlightedIdx","setHighlightedIdx","inputRef","suppressRef","methodDropPos","setMethodDropPos","suggDropPos","setSuggDropPos","selectedOpt","selectColor","filteredSuggestions","useMemo","lower","filteredMockServers","openMethodDropdown","el","rect","t","track","handleMockSelect","url","handleSuggestionSelect","val","allItems","handleInputKeyDown","isSelected","CheckIcon","ServerIcon","globalIdx","SearchIcon","SegmentedControlView","fullWidth","containerRef","indicator","setIndicator","activeIdx","container","btn","TRACK_PADDING","trackBr","isActive","HiddenKeyValueItemView","keyValue","badge","badgeColor","onDelete","deleteTitle","showDescription","revealed","setRevealed","displayValue","cols","readonlyCell","LockIcon","TrashIcon","TabView","tabs","activeTab","ind","setInd","useLayoutEffect","inactiveColor","tab","TabBadge","EditorViewFallback","language","minHeight","readOnly","wordWrap","bordered","useEditorBase","resolvedFontSize","resolvedHeight","containerHeight","ariaLabel","EditorShell","EditorLineNumbers","EditorWordWrap","EditorCursorStyle","EditorCursorBlinking","EditorRenderWhitespace","EditorFoldingControls","EditorMatchBrackets","EditorAutoIndent","EditorAcceptSuggestion","EditorView","props","MonacoEditorView","useMonacoRuntimeStatus","getMonacoEditorImpl","DebugEditorView","adapter","breakpoints","disabledBreakpoints","conditionalBreakpointLines","pausedLine","diffLines","original","modified","a","b","n","m","dp","j","ops","OP_STYLES","DiffEditorViewFallback","op","DiffEditorView","MonacoDiffEditorView","getMonacoDiffEditorImpl","METHOD_COLORS","PROTOCOL_BADGE","RT_BADGE","getTabAccent","TabProtocolBadge","SettingsIcon","rt","TabBarView","activeTabId","onTabClick","onTabClose","onAddTab","iconSize","scrollRef","canScrollLeft","setCanScrollLeft","canScrollRight","setCanScrollRight","checkScroll","ro","scrollTabs","dir","ChevronLeftIcon","tabAccent","isNonCloseable","CloseIcon","PlusIcon","ChevronRightIcon","PilledTabView","activeId","mode","isPill","containerRadius","pillRadius","btnRefs","pill","setPill","ToggleSwitchView","checked","labelPosition","labelColor","trackW","trackH","thumb","thumbLeft","trackStyle","toggle","DUI_SIZES","CheckboxView","indeterminate","box","DUI_CHECKBOX","labelS","font","box_","RearrangeView","selectable","dragId","setDragId","overId","setOverId","move","fromId","toId","from","to","next","moved","onDrop","item","dragging","over","SliderView","min","max","step","showValue","pct","sliderStyle","_mountLayer","SIZE_MAP","ModalView","onClose","title","subtitle","headerIcon","footerLeft","footerRight","showCloseIcon","headerColor","headerGradient","headerRight","noPadding","elevated","maxHeight","bodyStyle","layer","onKey","surfaceBase","card","SPINNER_SIZE","LABEL_SIZE","Spinner","Dots","d","Skeleton","heights","widths","Pulse","ProgressBar","progress","LoaderView","fullscreen","inner","EmptyStateView","message","action","compact","STATUS_COLOR","STATUS_LABEL","DOT_SIZE","FONT_SIZE","StatusIndicatorView","status","subtext","showLabel","dot","displayLabel","InfoPopupView","anchorEl","description","footer","wikiLabel","wikiHref","popRef","pos","setPos","handle","place","pop","vw","vh","top","id","popup","ExternalLinkIcon","KBD","DEFAULT_PILL_TOOLTIP","EASE","SplitPanelView","direction","first","second","defaultSplit","splitProp","minFirst","minSecond","minFirstPct","minSecondPct","onResize","onResizeEnd","onHandleClick","pillTooltip","internalSplit","setInternalSplit","setDragging","hovered","setHovered","dragActiveRef","hasMovedRef","isHoriz","pillActive","currentSplit","handlePointerDown","handlePointerMove","total","minFirstP","minSecondP","handlePointerUp","handleDoubleClick","firstStyle","secondStyle","pillW","pillH","ResizablePanelView","defaultHeight","setHeight","gripHovered","setGripHovered","dragRef","delta","newH","DottedCardView","expandable","defaultExpanded","expanded","setExpanded","isOpen","ColoredTextView","tokens","lineHeight","handleCopy","StatsCardView","subValue","unit","trend","trendValue","trendColor","trendChar","DataTableView","columns","keyField","onRowClick","renderExpanded","emptyTitle","emptyMessage","striped","sortKey","setSortKey","sortAsc","setSortAsc","expandedKeys","setExpandedKeys","handleSort","col","toggleExpand","key","prev","sorted","av","bv","cmp","colTemplate","c","rowH","cellPad","pushMode","row","ri","rowKey","isExpanded","bgDefault","deepFreeze","obj","name","prop","Response","escapeHTML","inherit$1","objects","result","SPAN_CLOSE","emitsWrappingTags","node","scopeToCSSClass","prefix","pieces","x","HTMLRenderer","parseTree","newNode","opts","TokenTree","scope","builder","child","TokenTreeEmitter","emitter","source","re","lookahead","concat","anyNumberOfTimes","optional","args","stripOptionsFromArgs","either","countMatchGroups","startsWith","lexeme","match","BACKREF_RE","_rewriteBackreferences","regexps","joinWith","numCaptures","regex","offset","out","MATCH_NOTHING_RE","IDENT_RE","UNDERSCORE_IDENT_RE","NUMBER_RE","C_NUMBER_RE","BINARY_NUMBER_RE","RE_STARTERS_RE","SHEBANG","beginShebang","resp","BACKSLASH_ESCAPE","APOS_STRING_MODE","QUOTE_STRING_MODE","PHRASAL_WORDS_MODE","COMMENT","begin","end","modeOptions","ENGLISH_WORD","C_LINE_COMMENT_MODE","C_BLOCK_COMMENT_MODE","HASH_COMMENT_MODE","NUMBER_MODE","C_NUMBER_MODE","BINARY_NUMBER_MODE","REGEXP_MODE","TITLE_MODE","UNDERSCORE_TITLE_MODE","METHOD_GUARD","MODES","skipIfHasPrecedingDot","response","scopeClassName","_parent","beginKeywords","parent","compileIllegal","compileMatch","compileRelevance","beforeMatchExt","originalMode","COMMON_KEYWORDS","DEFAULT_KEYWORD_SCOPE","compileKeywords","rawKeywords","caseInsensitive","scopeName","compiledKeywords","compileList","keywordList","keyword","pair","scoreForKeyword","providedScore","commonKeyword","seenDeprecations","warn","deprecated","version","MultiClassError","remapScopeNames","regexes","scopeNames","emit","positions","beginMultiClass","endMultiClass","scopeSugar","MultiClass","compileLanguage","langRe","global","MultiRegex","terminators","matchData","ResumableMultiRegex","index","matcher","m2","buildModeRegex","mm","term","compileMode","cmode","ext","keywordPattern","expandOrCloneMode","dependencyOnParent","HTMLInjectionError","reason","html","escape","inherit","NO_MATCH","MAX_KEYWORD_HITS","HLJS","hljs","languages","aliases","plugins","SAFE_MODE","LANGUAGE_NOT_FOUND","PLAINTEXT_LANGUAGE","shouldNotHighlight","languageName","blockLanguage","block","classes","getLanguage","_class","highlight","codeOrLanguageName","optionsOrCode","ignoreIllegals","code","context","fire","_highlight","codeToHighlight","continuation","keywordHits","keywordData","matchText","processKeywords","modeBuffer","lastIndex","buf","word","data","kind","keywordRelevance","relevance","cssClass","emitKeyword","processSubLanguage","continuations","highlightAuto","processBuffer","emitMultiClass","klass","startNewMode","endOfMode","matchPlusRemainder","matched","doIgnore","resumeScanAtSamePosition","doBeginMatch","newMode","beforeCallbacks","cb","doEndMatch","endMode","origin","processContinuations","list","current","lastMatch","processLexeme","textBeforeMatch","err","processed","iterations","md","beforeMatch","processedCount","justTextHighlightResult","languageSubset","plaintext","results","autoDetection","best","secondBest","updateClassName","element","currentLang","resultLang","highlightElement","configure","userOptions","initHighlighting","highlightAll","initHighlightingOnLoad","wantsHighlight","boot","registerLanguage","languageDefinition","lang","error$1","registerAliases","unregisterLanguage","alias","listLanguages","aliasList","upgradePluginAPI","plugin","addPlugin","removePlugin","event","deprecateHighlightBlock","core","KEYWORDS","LITERALS","TYPES","ERROR_TYPES","BUILT_IN_GLOBALS","BUILT_IN_VARIABLES","BUILT_INS","javascript","hasClosingTag","after","tag","IDENT_RE$1","FRAGMENT","XML_SELF_CLOSING","XML_TAG","afterMatchIndex","nextChar","afterMatch","KEYWORDS$1","decimalDigits","frac","decimalInteger","NUMBER","SUBST","HTML_TEMPLATE","CSS_TEMPLATE","GRAPHQL_TEMPLATE","TEMPLATE_STRING","SUBST_INTERNALS","SUBST_AND_COMMENTS","PARAMS_CONTAINS","PARAMS","CLASS_OR_EXTENDS","CLASS_REFERENCE","USE_STRICT","FUNCTION_DEFINITION","UPPER_CASE_CONSTANT","noneOf","FUNCTION_CALL","PROPERTY_ACCESS","GETTER_OR_SETTER","FUNC_LEAD_IN_RE","FUNCTION_VARIABLE","typescript","tsLanguage","NAMESPACE","INTERFACE","TS_SPECIFIC_KEYWORDS","DECORATOR","swapMode","replacement","indx","ATTRIBUTE_HIGHLIGHT","OPTIONAL_KEY_OR_ARGUMENT","functionDeclaration","json","ATTRIBUTE","PUNCTUATION","LITERALS_MODE","xml","TAG_NAME_RE","XML_IDENT_RE","XML_ENTITIES","XML_META_KEYWORDS","XML_META_PAR_KEYWORDS","APOS_META_STRING_MODE","QUOTE_META_STRING_MODE","TAG_INTERNALS","HTML_TAGS","SVG_TAGS","TAGS","MEDIA_FEATURES","PSEUDO_CLASSES","PSEUDO_ELEMENTS","ATTRIBUTES","css","modes","VENDOR_PREFIX","AT_MODIFIERS","AT_PROPERTY_RE","STRINGS","bash","VAR","BRACED_VAR","HERE_DOC","QUOTE_STRING","ESCAPED_QUOTE","APOS_STRING","ESCAPED_APOS","ARITHMETIC","SH_LIKE_SHELLS","KNOWN_SHEBANG","FUNCTION","PATH_MODE","SHELL_BUILT_INS","BASH_BUILT_INS","ZSH_BUILT_INS","GNU_CORE_UTILS","yaml","URI_CHARACTERS","KEY","TEMPLATE_VARIABLES","SINGLE_QUOTE_STRING","STRING","CONTAINER_STRING","TIMESTAMP","VALUE_CONTAINER","OBJECT","ARRAY","VALUE_MODES","python","RESERVED_WORDS","PROMPT","LITERAL_BRACKET","digitpart","pointfloat","COMMENT_TYPE","CodeBlockView","showCopyButton","showLineNumbers","copied","setCopied","highlighted","lines","CopyIcon","line","ACTION_LABEL","AIButtonView","SparkleIcon","countLeaves","filterItems","q","acc","filteredChildren","SideNavView","onSelect","collapsible","defaultCollapsed","collapsedProp","onCollapsedChange","defaultOpenIds","collapsedWidth","searchable","searchPlaceholder","emptyText","internalCollapsed","setInternalCollapsed","openGroups","setOpenGroups","search","setSearch","isControlled","collapsed","isFiltering","itemH","iconSquare","totalLeaves","filteredItems","filteredLeaves","handleCollapse","toggleGroup","renderLeafItem","renderGroupItem","filteredChildCount","displayCount","renderItem","SidebarRightIcon","SidebarLeftIcon","findLabel","nodes","f","DropLine","show","InlineCreateInput","depth","indentPx","onCommit","onCancel","setVal","ItemRow","itemId","enableDrag","dragState","dropTarget","onDragStart","onDragOver","onDragLeave","onDragEnd","isDragging","dropPos","NodeRow","parentId","expandedIds","folderActions","onFolderClick","onContextMenu","onOpenCtxMenu","onOpenRunner","onRename","contextMenuItems","isDraggableNode","enableItemDrag","getItemId","onItemDragStart","onItemDragOver","onItemDrop","inlineCreate","onInlineCreateCommit","onInlineCreateCancel","renamingNodeId","onRenameDone","nodeAccentColor","renaming","setRenaming","renameVal","setRenameVal","renameRef","handleToggle","handleDblClick","commitRename","totalCount","_c","hasCtxMenu","itemDragInside","canDrag","rowStyle","FolderOpenIcon","FolderIcon","isRunAction","isCtxAction","_d","_e","RunnerModal","config","setActiveTab","FolderView","runner","defaultExpandedIds","controlled","onToggle","emptyLabel","draggable","onMove","confirmFolderMove","getMoveSummary","draggableItems","onItemMove","internal","setInternal","ctxMenu","setCtxMenu","activeRunner","setActiveRunner","setDragState","setDropTarget","moveConfirm","setMoveConfirm","openCtxMenu","y","openRunner","handleDragStart","handleDragOver","targetId","handleDragLeave","handleDrop","summary","handleDragEnd","handleItemDragStart","handleItemDragOver","handleItemDrop","executeMoveConfirm","ctxItems","sharedNodeProps","entry","CollapsibleSectionView","customStyle","DebugView","session","actions","watchExpressions","isPaused","RunDebugIcon","ToolBtn","DbgContinueIcon","DbgStepOverIcon","DbgStepIntoIcon","DbgStepOutIcon","DbgRestartIcon","DbgStopIcon","VariablesSection","WatchSection","CallStackSection","BreakpointsSection","variables","localVars","scriptGlobals","Muted","ScopeGroup","ValueTreeNode","isExpandable","valueColor","valuePreview","ExpandedValue","k","isAdding","setIsAdding","setInputValue","showClear","setShowClear","addExpr","evaluate","expr","vars","parts","root","cur","HeaderBtn","found","callStack","frames","frame","breakpointsMuted","MuteBreakpointsIcon","bp","BreakpointRow","muted","faded","dotColor","shortPreview","keys","SettingsNavView","groups","fontStyleResolved","itemHeight","group","gi","ThemeCardSelectorView","FeatureCategoryView","categoryLabel","categoryColor","features","categoryEnabled","onCategoryToggle","bodyRef","isFirst","enabledCount","hasCategoryToggle","tid","feat","TagInputView","tags","maxTags","input","setInput","canAdd","addTag","raw","removeTag","_","handleKeyDown","BottomPanelView","setCollapsed","startY","startH","onMouseMove","onMouseUp","activeContent","VARIANT_CONFIG","CheckCircleIcon","CloseCircleIcon","WarningTriangleIcon","InfoCircleIcon","POSITIONS","ToastItem","toast","onDismiss","cfg","timerRef","dur","ToastView","toasts","posStyle","useToast","toastsRef","setters","subscribe","fn","notify","duration","getInitials","words","PromptCardView","content","protocol","protocolColor","isCustom","onUse","onEdit","onCopy","colors","rowBg","ActionBtn","RenameIcon","danger","iconColor","PromptLibraryListView","sections","onSearchChange","collapsedSections","setCollapsedSections","collapsedCats","setCollapsedCats","toggleSection","toggleCat","filteredSections","section","cat","sum","cs","isSectionCollapsed","sectionTotal","isCatCollapsed","VAR_RE","PromptPreview","part","HighlightedTextarea","textareaRef","backdropRef","syncScroll","sharedStyle","PromptLibraryEditorView","triggerLabel","avatarColor","isDirty","onTabChange","onContentChange","viewMode","onViewModeChange","onSave","onVariableInsert","localViewMode","setLocalViewMode","resolvedViewMode","setViewMode","resolvedActiveTab","StageCheck","sublabel","textSize","cx","cy","strokeW","checkScale","StageSpin","circumference","StagePulse","dotR","ringR","YamlKeyChip","yamlKey","readCssVar","cssToHex","canvas","g","LiveColorCustomizer","forceOpen","onVarChange","hexValues","setHexValues","overridden","setOverridden","refresh","handleChange","cssVar","hex","handleReset","resetAll","hasAnyOverride","PaletteIcon","RefreshIcon","SearchInputView","suffix","UNIT_OPTIONS","UNIT_TO_MS","DurationInputView","setUnit","showPopup","setShowPopup","popupPos","setPopupPos","popupRef","btnRef","handleValueChange","num","openPopup","handleUnitChange","u","close","onScroll","unitColor","SplitButtonView","focusIdx","setFocusIdx","menuPos","setMenuPos","dividerBg","goUp","handleItem","handleMenuKey","TOKEN_RE","ESCAPE_RE","buildHTML","getCaretOffset","sel","range","pre","setCaretOffset","remaining","walk","len","HighlightedInputView","editorRef","composing","lastValue","selectedIdx","setSelectedIdx","setDropPos","isFocused","filtered","handleInput","allDropItems","handlePaste","showDrop","ConfirmDialog","confirmLabel","cancelLabel","onConfirm","confirmRef","HTTP_REQUEST_HEADERS","SENSITIVE_HEADERS","HEADER_VALUE_SUGGESTIONS","DROP_CLS","dropItemCls","KeyValueTableRowView","enabled","maskSensitive","deletable","autocompleteKeys","onKeyChange","onValueChange","onDescriptionChange","onEnabledChange","onRemove","keyFocused","setKeyFocused","filterText","setFilterText","keyHighlight","setKeyHighlight","valueFocused","setValueFocused","valueFilterText","setValueFilterText","valueHighlight","setValueHighlight","keyInputRef","valueInputRef","dropdownRef","valueDropdownRef","isMasked","hvs","keySuggestions","valueSuggestions","showKeyDrop","showValDrop","selectKey","header","selectVal","which","isKey","visible","suggs","hi","setHi","select","setFoc","p","gridCls","pinnedInputStyle","CheckCircleFilledIcon","makeRow","InsertRowDivider","onInsert","BulkEditArea","defaultValue","onChangeRef","setText","hl","KeyValueTableView","hideToolbar","toolbarExtra","pinnedTopRows","onPinnedRemove","bulkEdit","setBulkEdit","showClearConfirm","setShowClearConfirm","showPinned","setShowPinned","bulkTextRef","hasPinned","updateRow","field","updated","addRow","insertRowAt","removeRow","toBulkText","fromBulkText","parsed","clean","ci","handleClearAll","hasRows","gridCols","BulkEditIcon","pRow","MergeDivider","SegSelect","seg","dims","openDropdown","isSel","SegButton","MergedInputView","segments","openSel","setOpenSel","HudView","contained","rootRef","dx","dy","newLeft","newTop","onDragMouseDown","getValueType","getPreview","getShort","JsonNode","defaultExpandDepth","maxDepth","atMaxDepth","JsonTreeView","ExpandableLogEntryView","timestamp","timeStr","CopyButtonView","_getDefaults","_defaults","changeDefaults","newDefaults","escapeTest","escapeReplace","escapeTestNoEncode","escapeReplaceNoEncode","escapeReplacements","getEscapeReplacement","ch","escape$1","encode","caret","edit","valSource","cleanUrl","href","noopTest","splitCells","tableRow","count","str","escaped","curr","cells","rtrim","invert","l","suffLen","findClosingBracket","level","outputLink","cap","link","lexer","token","indentCodeCompensation","matchIndentToCode","indentToCode","matchIndentInNode","indentInNode","_Tokenizer","__publicField","src","trimmed","inBlockquote","currentLines","currentRaw","currentText","lastToken","oldToken","newText","newToken","bull","isordered","itemRegex","endsWithBlankLine","endEarly","itemContents","nextLine","blankLine","indent","nextBulletRegex","hrRegex","fencesBeginRegex","headingBeginRegex","htmlBeginRegex","rawLine","nextLineWithoutTabs","istask","ischecked","spacers","hasMultipleLineBreaks","headers","aligns","cell","trimmedUrl","rtrimSlash","lastParenIndex","linkLen","links","linkString","maskedSrc","prevChar","lLength","rDelim","rLength","delimTotal","midDelimTotal","endReg","lastCharLength","hasNonSpaceChars","hasSpaceCharsOnBothEnds","prevCapZero","newline","blockCode","fences","hr","heading","bullet","lheading","_paragraph","blockText","_blockLabel","def","_tag","_comment","paragraph","blockquote","blockNormal","gfmTable","blockGfm","blockPedantic","inlineCode","br","inlineText","_punctuation","punctuation","blockSkip","emStrongLDelim","emStrongRDelimAst","emStrongRDelimUnd","anyPunctuation","autolink","_inlineComment","_inlineLabel","reflink","nolink","reflinkSearch","inlineNormal","inlinePedantic","inlineGfm","inlineBreaks","inline","_Lexer","rules","lastParagraphClipped","cutSrc","extTokenizer","startIndex","tempSrc","tempStart","getStartIndex","errMsg","keepPrevChar","_Renderer","langString","ordered","start","body","startAttr","itemBody","checkbox","cleanHref","_TextRenderer","_Parser","anyToken","genericToken","ret","textToken","renderer","_Hooks","markdown","Marked","callback","values","tableToken","listToken","childTokens","extensions","pack","prevRenderer","extLevel","rendererProp","rendererFunc","tokenizer","tokenizerProp","tokenizerFunc","prevTokenizer","hooks","hooksProp","hooksFunc","prevHook","arg","walkTokens","packWalktokens","blockType","origOpt","throwError","parser","silent","async","msg","markedInstance","marked","sql","COMMENT_MODE","QUOTED_IDENTIFIER","MULTI_WORD_TYPES","NON_RESERVED_WORDS","RESERVED_FUNCTIONS","POSSIBLE_WITHOUT_PARENS","COMBOS","FUNCTIONS","VARIABLE","OPERATOR","kws_to_regex","kw","MULTI_WORD_KEYWORDS","reduceRelevancy","exceptions","when","qualifyFn","ruby","RUBY_METHOD_RE","CLASS_NAME_RE","CLASS_NAME_WITH_NAMESPACE_RE","RUBY_KEYWORDS","YARDOCTAG","IRB_OBJECT","COMMENT_MODES","decimal","digits","RUBY_DEFAULT_CONTAINS","IRB_DEFAULT","rust","RAW_IDENTIFIER","FUNCTION_INVOKE","NUMBER_SUFFIX","BUILTINS","csharp","BUILT_IN_KEYWORDS","FUNCTION_MODIFIERS","LITERAL_KEYWORDS","NORMAL_KEYWORDS","CONTEXTUAL_KEYWORDS","NUMBERS","RAW_STRING","VERBATIM_STRING","VERBATIM_STRING_NO_LF","SUBST_NO_LF","INTERPOLATED_STRING","INTERPOLATED_VERBATIM_STRING","INTERPOLATED_VERBATIM_STRING_NO_LF","GENERIC_MODIFIER","TYPE_IDENT_RE","AT_IDENTIFIER","hexDigits","NUMERIC","kotlin","KEYWORDS_WITH_LABEL","LABEL","ANNOTATION_USE_SITE","ANNOTATION","KOTLIN_NUMBER_MODE","KOTLIN_NESTED_COMMENT","KOTLIN_PAREN_TYPE","KOTLIN_PAREN_TYPE2","graphql","GQL_NAME","INLINE_HTML","HORIZONTAL_RULE","CODE","LIST","LINK_REFERENCE","URL_SCHEME","LINK","BOLD","ITALIC","BOLD_WITHOUT_ITALIC","ITALIC_WITHOUT_BOLD","CONTAINABLE","_languagesRegistered","ensureLanguages","registerMarkdownLanguage","definition","_configured","buildRenderer","Renderer","safeLang","resolvedLang","auto","encoded","ensureConfig","parseMarkdown","COPY_HTML","CHECK_HTML","wireCopyButtons","MarkdownView","attachButtons","createRow","TYPE_OPTIONS","FormDataTableView","onFileSelect","confirmClear","setConfirmClear","fileRefs","patch","handleFileChange","fileList","files","names","mimeTypes","base64Data","file","resolve","reader","downloadFile","mime","blob","hasContent","inputStyle","DownloadIcon","SpacerView","orientation","spacing"],"mappings":"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AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAEMC,KAAW;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAEMC,KAAO;AAAA,EACX,GAAGF;AAAA,EACH,GAAGC;AACL,GAKME,KAAiB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAI,EAAG,QAAO,GAGVC,KAAiB;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AACF,EAAE,KAAI,EAAG,QAAO,GAGVC,KAAkB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,EAAE,KAAI,EAAG,QAAO,GAEVC,KAAa;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,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IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,GAEQC,IAAiB;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA,IAEA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AA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IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,GAGQ1uB,IAAiB;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,GAKQ2uB,IAAqB;AAAA,IACzB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,GAGQC,IAA0B;AAAA,IAC9B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AA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;AAAA,QACX,OAAO;AAAA,MACf;AAAA,MACMm3B;AAAA,IACN;AAAA,EACA;AACA;AC1TA,SAASG,GAAOh+B,GAAM;AACpB,QAAMi+B,IAAoB;AAAA,IACxB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,GACQC,IAAqB;AAAA,IACzB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,GACQC,IAAmB;AAAA,IACvB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,GACQC,IAAkB;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,GACQC,IAAsB;AAAA,IAC1B;AAAA,IACA;AAAA,IACA;AAAA,IAC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","x_google_ignoreList":[46,47,48,49,50,51,52,53,54,86,87,88,89,90,91,92,93]}