UNPKG

tldraw

Version:

A tiny little drawing editor.

8 lines (7 loc) 4.49 kB
{ "version": 3, "sources": ["../../../../../src/lib/ui/components/ZoomMenu/DefaultZoomMenu.tsx"], "sourcesContent": ["import { useContainer, useEditor, useValue } from '@tldraw/editor'\nimport { DropdownMenu as _DropdownMenu } from 'radix-ui'\nimport { ReactNode, memo, useCallback } from 'react'\nimport { PORTRAIT_BREAKPOINT } from '../../constants'\nimport { useBreakpoint } from '../../context/breakpoints'\nimport { useMenuIsOpen } from '../../hooks/useMenuIsOpen'\nimport { useTranslation } from '../../hooks/useTranslation/useTranslation'\nimport { TldrawUiToolbarButton } from '../primitives/TldrawUiToolbar'\nimport { TldrawUiMenuContextProvider } from '../primitives/menus/TldrawUiMenuContext'\nimport { DefaultZoomMenuContent } from './DefaultZoomMenuContent'\n\n/** @public */\nexport interface TLUiZoomMenuProps {\n\tchildren?: ReactNode\n}\n\n/** @public @react */\nexport const DefaultZoomMenu = memo(function DefaultZoomMenu({ children }: TLUiZoomMenuProps) {\n\tconst container = useContainer()\n\tconst [isOpen, onOpenChange] = useMenuIsOpen('zoom menu')\n\n\t// Get the zoom menu content, either the default component or the user's\n\t// override. If there's no menu content, then the user has set it to null,\n\t// so skip rendering the menu.\n\tconst content = children ?? <DefaultZoomMenuContent />\n\n\treturn (\n\t\t<_DropdownMenu.Root dir=\"ltr\" open={isOpen} onOpenChange={onOpenChange} modal={false}>\n\t\t\t<ZoomTriggerButton />\n\t\t\t<_DropdownMenu.Portal container={container}>\n\t\t\t\t<_DropdownMenu.Content\n\t\t\t\t\tclassName=\"tlui-menu\"\n\t\t\t\t\tside=\"top\"\n\t\t\t\t\talign=\"start\"\n\t\t\t\t\talignOffset={0}\n\t\t\t\t\tsideOffset={8}\n\t\t\t\t\tcollisionPadding={4}\n\t\t\t\t>\n\t\t\t\t\t<TldrawUiMenuContextProvider type=\"menu\" sourceId=\"zoom-menu\">\n\t\t\t\t\t\t{content}\n\t\t\t\t\t</TldrawUiMenuContextProvider>\n\t\t\t\t</_DropdownMenu.Content>\n\t\t\t</_DropdownMenu.Portal>\n\t\t</_DropdownMenu.Root>\n\t)\n})\n\nconst ZoomTriggerButton = () => {\n\tconst editor = useEditor()\n\tconst breakpoint = useBreakpoint()\n\tconst zoom = useValue('zoom', () => editor.getZoomLevel(), [editor])\n\tconst msg = useTranslation()\n\n\tconst handleDoubleClick = useCallback(() => {\n\t\teditor.resetZoom(editor.getViewportScreenCenter(), {\n\t\t\tanimation: { duration: editor.options.animationMediumMs },\n\t\t})\n\t}, [editor])\n\n\tconst value = `${Math.floor(zoom * 100)}%`\n\treturn (\n\t\t<TldrawUiToolbarButton\n\t\t\tasChild\n\t\t\ttype=\"icon\"\n\t\t\taria-label={`${msg('navigation-zone.zoom')} \u2014 ${value}`}\n\t\t\ttitle={`${msg('navigation-zone.zoom')} \u2014 ${value}`}\n\t\t\tdata-testid=\"minimap.zoom-menu-button\"\n\t\t\tclassName=\"tlui-zoom-menu__button\"\n\t\t\tonDoubleClick={handleDoubleClick}\n\t\t>\n\t\t\t<_DropdownMenu.Trigger dir=\"ltr\">\n\t\t\t\t{breakpoint < PORTRAIT_BREAKPOINT.MOBILE ? null : (\n\t\t\t\t\t<span style={{ flexGrow: 0, textAlign: 'center' }}>{value}</span>\n\t\t\t\t)}\n\t\t\t</_DropdownMenu.Trigger>\n\t\t</TldrawUiToolbarButton>\n\t)\n}\n"], "mappings": "AAwB6B,cAG3B,YAH2B;AAxB7B,SAAS,cAAc,WAAW,gBAAgB;AAClD,SAAS,gBAAgB,qBAAqB;AAC9C,SAAoB,MAAM,mBAAmB;AAC7C,SAAS,2BAA2B;AACpC,SAAS,qBAAqB;AAC9B,SAAS,qBAAqB;AAC9B,SAAS,sBAAsB;AAC/B,SAAS,6BAA6B;AACtC,SAAS,mCAAmC;AAC5C,SAAS,8BAA8B;AAQhC,MAAM,kBAAkB,KAAK,SAASA,iBAAgB,EAAE,SAAS,GAAsB;AAC7F,QAAM,YAAY,aAAa;AAC/B,QAAM,CAAC,QAAQ,YAAY,IAAI,cAAc,WAAW;AAKxD,QAAM,UAAU,YAAY,oBAAC,0BAAuB;AAEpD,SACC,qBAAC,cAAc,MAAd,EAAmB,KAAI,OAAM,MAAM,QAAQ,cAA4B,OAAO,OAC9E;AAAA,wBAAC,qBAAkB;AAAA,IACnB,oBAAC,cAAc,QAAd,EAAqB,WACrB;AAAA,MAAC,cAAc;AAAA,MAAd;AAAA,QACA,WAAU;AAAA,QACV,MAAK;AAAA,QACL,OAAM;AAAA,QACN,aAAa;AAAA,QACb,YAAY;AAAA,QACZ,kBAAkB;AAAA,QAElB,8BAAC,+BAA4B,MAAK,QAAO,UAAS,aAChD,mBACF;AAAA;AAAA,IACD,GACD;AAAA,KACD;AAEF,CAAC;AAED,MAAM,oBAAoB,MAAM;AAC/B,QAAM,SAAS,UAAU;AACzB,QAAM,aAAa,cAAc;AACjC,QAAM,OAAO,SAAS,QAAQ,MAAM,OAAO,aAAa,GAAG,CAAC,MAAM,CAAC;AACnE,QAAM,MAAM,eAAe;AAE3B,QAAM,oBAAoB,YAAY,MAAM;AAC3C,WAAO,UAAU,OAAO,wBAAwB,GAAG;AAAA,MAClD,WAAW,EAAE,UAAU,OAAO,QAAQ,kBAAkB;AAAA,IACzD,CAAC;AAAA,EACF,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,QAAQ,GAAG,KAAK,MAAM,OAAO,GAAG,CAAC;AACvC,SACC;AAAA,IAAC;AAAA;AAAA,MACA,SAAO;AAAA,MACP,MAAK;AAAA,MACL,cAAY,GAAG,IAAI,sBAAsB,CAAC,WAAM,KAAK;AAAA,MACrD,OAAO,GAAG,IAAI,sBAAsB,CAAC,WAAM,KAAK;AAAA,MAChD,eAAY;AAAA,MACZ,WAAU;AAAA,MACV,eAAe;AAAA,MAEf,8BAAC,cAAc,SAAd,EAAsB,KAAI,OACzB,uBAAa,oBAAoB,SAAS,OAC1C,oBAAC,UAAK,OAAO,EAAE,UAAU,GAAG,WAAW,SAAS,GAAI,iBAAM,GAE5D;AAAA;AAAA,EACD;AAEF;", "names": ["DefaultZoomMenu"] }