math-dropdown.tsx 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import { DropdownHeader } from '@/features/ui/components/bootstrap-5/dropdown-menu'
  2. import { ToolbarButtonMenu } from './button-menu'
  3. import { emitToolbarEvent } from '../../extensions/toolbar/utils/analytics'
  4. import MaterialIcon from '../../../../shared/components/material-icon'
  5. import { useTranslation } from 'react-i18next'
  6. import { useCodeMirrorViewContext } from '../codemirror-context'
  7. import { useEditorContext } from '@/shared/context/editor-context'
  8. import {
  9. wrapInDisplayMath,
  10. wrapInInlineMath,
  11. } from '../../extensions/toolbar/commands'
  12. import { memo } from 'react'
  13. import OLListGroupItem from '@/features/ui/components/ol/ol-list-group-item'
  14. import sparkleWhite from '@/shared/svgs/sparkle-small-white.svg'
  15. import sparkle from '@/shared/svgs/ai-sparkle-text.svg'
  16. import { isSplitTestEnabled } from '@/utils/splitTestUtils'
  17. export const MathDropdown = memo(function MathDropdown() {
  18. const { t } = useTranslation()
  19. const view = useCodeMirrorViewContext()
  20. const { writefullInstance } = useEditorContext()
  21. const wfRebrandEnabled = isSplitTestEnabled('wf-feature-rebrand')
  22. return (
  23. <ToolbarButtonMenu
  24. id="toolbar-math"
  25. label={t('toolbar_insert_math')}
  26. icon={<MaterialIcon type="calculate" />}
  27. >
  28. {wfRebrandEnabled && writefullInstance && (
  29. <>
  30. <DropdownHeader className="ol-cm-toolbar-header mx-2">
  31. {t('toolbar_insert_math_lowercase')}
  32. </DropdownHeader>
  33. <OLListGroupItem
  34. aria-label={t('toolbar_generate_math')}
  35. onClick={event => {
  36. writefullInstance?.openEquationGenerator()
  37. }}
  38. >
  39. <img
  40. alt="sparkle"
  41. className="ol-cm-toolbar-ai-sparkle-gradient"
  42. src={sparkle}
  43. aria-hidden="true"
  44. />
  45. <img
  46. alt="sparkle"
  47. className="ol-cm-toolbar-ai-sparkle-white"
  48. src={sparkleWhite}
  49. aria-hidden="true"
  50. />
  51. <span>{t('generate_from_text_or_image')}</span>
  52. </OLListGroupItem>
  53. </>
  54. )}
  55. <OLListGroupItem
  56. aria-label={t('toolbar_insert_inline_math')}
  57. onClick={event => {
  58. emitToolbarEvent(view, 'toolbar-inline-math')
  59. event.preventDefault()
  60. wrapInInlineMath(view)
  61. view.focus()
  62. }}
  63. >
  64. <MaterialIcon type="123" />
  65. <span>{t('inline')}</span>
  66. </OLListGroupItem>
  67. <OLListGroupItem
  68. aria-label={t('toolbar_insert_display_math')}
  69. onClick={event => {
  70. emitToolbarEvent(view, 'toolbar-display-math')
  71. event.preventDefault()
  72. wrapInDisplayMath(view)
  73. view.focus()
  74. }}
  75. >
  76. <MaterialIcon type="view_day" />
  77. <span>{t('display')}</span>
  78. </OLListGroupItem>
  79. </ToolbarButtonMenu>
  80. )
  81. })