breadcrumbs-panel.ts 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import { canUseNewEditor } from '@/features/ide-redesign/utils/new-editor-utils'
  2. import { Compartment, Extension, TransactionSpec } from '@codemirror/state'
  3. import { EditorView, showPanel } from '@codemirror/view'
  4. export function createBreadcrumbsPanel() {
  5. const dom = document.createElement('div')
  6. dom.classList.add('ol-cm-breadcrumbs-portal')
  7. return { dom, top: true }
  8. }
  9. const breadcrumbsTheme = EditorView.baseTheme({
  10. '.ol-cm-breadcrumbs': {
  11. display: 'flex',
  12. alignItems: 'center',
  13. gap: 'var(--spacing-01)',
  14. fontSize: 'var(--font-size-01)',
  15. padding: 'var(--spacing-02)',
  16. overflow: 'auto',
  17. scrollbarWidth: 'thin',
  18. '& > *': {
  19. flexShrink: '0',
  20. },
  21. },
  22. '&light .ol-cm-breadcrumbs': {
  23. color: 'var(--content-secondary)',
  24. backgroundColor: 'var(--bg-light-primary)',
  25. borderBottom: '1px solid #ddd',
  26. },
  27. '&light .ol-cm-breadcrumb-chevron': {
  28. color: 'var(--neutral-30)',
  29. },
  30. '&dark .ol-cm-breadcrumbs': {
  31. color: 'var(--content-secondary-dark)',
  32. backgroundColor: 'var(--bg-dark-primary)',
  33. },
  34. '&dark .ol-cm-breadcrumb-chevron': {
  35. color: 'var(--neutral-50)',
  36. },
  37. })
  38. const breadcrumbsConf = new Compartment()
  39. const breadcrumbsEnabled: Extension = [
  40. showPanel.of(createBreadcrumbsPanel),
  41. breadcrumbsTheme,
  42. ]
  43. const breadcrumbsDisabled: Extension = []
  44. export const setBreadcrumbsEnabled = (enabled: boolean): TransactionSpec => ({
  45. effects: breadcrumbsConf.reconfigure(
  46. enabled ? breadcrumbsEnabled : breadcrumbsDisabled
  47. ),
  48. })
  49. /**
  50. * A panel which contains the editor breadcrumbs
  51. */
  52. export const breadcrumbPanel = (enableNewEditor: boolean) => {
  53. const enabled = canUseNewEditor() && enableNewEditor
  54. return breadcrumbsConf.of(enabled ? breadcrumbsEnabled : breadcrumbsDisabled)
  55. }