@omnitron-dev/prism 0.3.1 → 0.3.3
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.
- package/README.md +68 -2
- package/THIRD-PARTY-NOTICES.txt +26 -0
- package/dist/accessibility/index.js +2 -0
- package/dist/accessibility/index.js.map +1 -1
- package/dist/auth/index.d.ts +4 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +4 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/blocks/auth-block/guards.d.ts +3 -2
- package/dist/blocks/auth-block/guards.d.ts.map +1 -1
- package/dist/blocks/dashboard-block/dashboard-block.d.ts.map +1 -1
- package/dist/blocks/dashboard-block/types.d.ts +4 -2
- package/dist/blocks/dashboard-block/types.d.ts.map +1 -1
- package/dist/blocks/dashboard-block/use-dashboard-block.d.ts +2 -2
- package/dist/blocks/dashboard-block/use-dashboard-block.d.ts.map +1 -1
- package/dist/blocks/data-grid-block/data-grid-block.d.ts.map +1 -1
- package/dist/blocks/data-grid-block/types.d.ts +3 -0
- package/dist/blocks/data-grid-block/types.d.ts.map +1 -1
- package/dist/blocks/index.js +80 -255
- package/dist/blocks/index.js.map +1 -1
- package/dist/chunk-2AB7VGPW.js +447 -0
- package/dist/chunk-2AB7VGPW.js.map +1 -0
- package/dist/{chunk-LOY2NPCO.js → chunk-2E67PQ4T.js} +3 -3
- package/dist/{chunk-LOY2NPCO.js.map → chunk-2E67PQ4T.js.map} +1 -1
- package/dist/chunk-2KG2NI73.js +84 -0
- package/dist/chunk-2KG2NI73.js.map +1 -0
- package/dist/chunk-2UYRW6X3.js +44 -0
- package/dist/chunk-2UYRW6X3.js.map +1 -0
- package/dist/chunk-36C5H56C.js +208 -0
- package/dist/chunk-36C5H56C.js.map +1 -0
- package/dist/chunk-36FOXX25.js +73 -0
- package/dist/chunk-36FOXX25.js.map +1 -0
- package/dist/{chunk-52PQL67Q.js → chunk-3VSM7NZG.js} +18 -15
- package/dist/chunk-3VSM7NZG.js.map +1 -0
- package/dist/{chunk-GUGTDURV.js → chunk-4B2LTPK2.js} +2 -2
- package/dist/{chunk-GUGTDURV.js.map → chunk-4B2LTPK2.js.map} +1 -1
- package/dist/chunk-4HUGZJKU.js +108 -0
- package/dist/chunk-4HUGZJKU.js.map +1 -0
- package/dist/{chunk-PXXPLHIY.js → chunk-4Q5L7LDG.js} +3 -3
- package/dist/{chunk-PXXPLHIY.js.map → chunk-4Q5L7LDG.js.map} +1 -1
- package/dist/{chunk-BRDWQVRT.js → chunk-4R7EZ7GQ.js} +3 -2
- package/dist/chunk-4R7EZ7GQ.js.map +1 -0
- package/dist/chunk-6IANOSMD.js +185 -0
- package/dist/chunk-6IANOSMD.js.map +1 -0
- package/dist/{chunk-YHE7HXSG.js → chunk-7ATBURW2.js} +3 -3
- package/dist/{chunk-YHE7HXSG.js.map → chunk-7ATBURW2.js.map} +1 -1
- package/dist/{chunk-7G5D5PTC.js → chunk-AATAOOSF.js} +4 -4
- package/dist/{chunk-7G5D5PTC.js.map → chunk-AATAOOSF.js.map} +1 -1
- package/dist/chunk-AKLRKCYH.js +128 -0
- package/dist/chunk-AKLRKCYH.js.map +1 -0
- package/dist/chunk-CT46KJOR.js +133 -0
- package/dist/chunk-CT46KJOR.js.map +1 -0
- package/dist/{chunk-LSPFFEJT.js → chunk-D4GFAJAZ.js} +298 -3900
- package/dist/chunk-D4GFAJAZ.js.map +1 -0
- package/dist/{chunk-BJE2AKD4.js → chunk-D5J3KW6Q.js} +3 -2
- package/dist/chunk-D5J3KW6Q.js.map +1 -0
- package/dist/chunk-DEPJRTVT.js +3 -0
- package/dist/{chunk-FU52GL2E.js.map → chunk-DEPJRTVT.js.map} +1 -1
- package/dist/{chunk-472SOF76.js → chunk-DHTYHUYI.js} +85 -107
- package/dist/chunk-DHTYHUYI.js.map +1 -0
- package/dist/{chunk-FF5RF32O.js → chunk-E7WM2RXA.js} +3 -2
- package/dist/chunk-E7WM2RXA.js.map +1 -0
- package/dist/chunk-F6RZ7LW6.js +1271 -0
- package/dist/chunk-F6RZ7LW6.js.map +1 -0
- package/dist/chunk-FOGY3HA4.js +217 -0
- package/dist/chunk-FOGY3HA4.js.map +1 -0
- package/dist/chunk-G2GANYMW.js +139 -0
- package/dist/chunk-G2GANYMW.js.map +1 -0
- package/dist/chunk-I6DILPFE.js +293 -0
- package/dist/chunk-I6DILPFE.js.map +1 -0
- package/dist/{chunk-HOXFSQUV.js → chunk-IRYU3NTG.js} +2 -2
- package/dist/{chunk-HOXFSQUV.js.map → chunk-IRYU3NTG.js.map} +1 -1
- package/dist/chunk-JTIUGPW5.js +284 -0
- package/dist/chunk-JTIUGPW5.js.map +1 -0
- package/dist/{chunk-GUFHFEPZ.js → chunk-JZBSPDED.js} +2 -2
- package/dist/{chunk-GUFHFEPZ.js.map → chunk-JZBSPDED.js.map} +1 -1
- package/dist/{chunk-PFT2BNYO.js → chunk-KPY7TA4D.js} +5 -5
- package/dist/{chunk-PFT2BNYO.js.map → chunk-KPY7TA4D.js.map} +1 -1
- package/dist/{chunk-GMIE6III.js → chunk-LFWKGNCX.js} +50 -623
- package/dist/chunk-LFWKGNCX.js.map +1 -0
- package/dist/chunk-LH4ZZZYB.js +37 -0
- package/dist/chunk-LH4ZZZYB.js.map +1 -0
- package/dist/chunk-NFJ7CPG3.js +13 -0
- package/dist/chunk-NFJ7CPG3.js.map +1 -0
- package/dist/chunk-NFPOIHD4.js +3 -0
- package/dist/{chunk-JSQTYDPG.js.map → chunk-NFPOIHD4.js.map} +1 -1
- package/dist/{chunk-XIXSSI3B.js → chunk-NJM5AVBM.js} +3 -2
- package/dist/chunk-NJM5AVBM.js.map +1 -0
- package/dist/{chunk-4Z5DE5GK.js → chunk-NSNM53WI.js} +133 -115
- package/dist/chunk-NSNM53WI.js.map +1 -0
- package/dist/chunk-NTREGTG7.js +31 -0
- package/dist/chunk-NTREGTG7.js.map +1 -0
- package/dist/{chunk-ADG4HZEP.js → chunk-OKJA6SJM.js} +4 -4
- package/dist/chunk-OKJA6SJM.js.map +1 -0
- package/dist/{chunk-SU3LVQ7N.js → chunk-Q6JDNFSG.js} +11 -226
- package/dist/chunk-Q6JDNFSG.js.map +1 -0
- package/dist/chunk-RPOGINR5.js +115 -0
- package/dist/chunk-RPOGINR5.js.map +1 -0
- package/dist/{chunk-KQ67XB6T.js → chunk-RSWVYIXK.js} +151 -114
- package/dist/chunk-RSWVYIXK.js.map +1 -0
- package/dist/chunk-SSEHL5VP.js +110 -0
- package/dist/chunk-SSEHL5VP.js.map +1 -0
- package/dist/chunk-TEIGUOWN.js +523 -0
- package/dist/chunk-TEIGUOWN.js.map +1 -0
- package/dist/{chunk-AYYFMTMI.js → chunk-TJ7DHXUX.js} +2 -2
- package/dist/{chunk-AYYFMTMI.js.map → chunk-TJ7DHXUX.js.map} +1 -1
- package/dist/{chunk-75FQ5IW3.js → chunk-TZHWYT34.js} +3 -3
- package/dist/{chunk-75FQ5IW3.js.map → chunk-TZHWYT34.js.map} +1 -1
- package/dist/chunk-TZWHELY4.js +45 -0
- package/dist/chunk-TZWHELY4.js.map +1 -0
- package/dist/{chunk-OKTLA23Q.js → chunk-UEINJFLS.js} +6 -6
- package/dist/chunk-UEINJFLS.js.map +1 -0
- package/dist/chunk-URFQX3I6.js +129 -0
- package/dist/chunk-URFQX3I6.js.map +1 -0
- package/dist/chunk-VG6FOMOH.js +187 -0
- package/dist/chunk-VG6FOMOH.js.map +1 -0
- package/dist/{chunk-PGHEP4JD.js → chunk-VQVVHMPG.js} +3 -3
- package/dist/{chunk-PGHEP4JD.js.map → chunk-VQVVHMPG.js.map} +1 -1
- package/dist/{chunk-DRFNMZLG.js → chunk-VUKOT432.js} +3 -2
- package/dist/chunk-VUKOT432.js.map +1 -0
- package/dist/chunk-WD4N72DL.js +315 -0
- package/dist/chunk-WD4N72DL.js.map +1 -0
- package/dist/chunk-XBYMG4QK.js +119 -0
- package/dist/chunk-XBYMG4QK.js.map +1 -0
- package/dist/chunk-YHM6GIHV.js +3 -0
- package/dist/chunk-YHM6GIHV.js.map +1 -0
- package/dist/{chunk-SNZK5X6F.js → chunk-Z2AN43YU.js} +4 -2
- package/dist/chunk-Z2AN43YU.js.map +1 -0
- package/dist/chunk-ZNWHMQRM.js +171 -0
- package/dist/chunk-ZNWHMQRM.js.map +1 -0
- package/dist/{chunk-YSIG2XYH.js → chunk-ZRJYQN6Y.js} +2 -2
- package/dist/{chunk-YSIG2XYH.js.map → chunk-ZRJYQN6Y.js.map} +1 -1
- package/dist/{chunk-AD4W7HYC.js → chunk-ZYI3MHLE.js} +3 -2
- package/dist/chunk-ZYI3MHLE.js.map +1 -0
- package/dist/cli/index.js +59 -421
- package/dist/cli/index.js.map +1 -1
- package/dist/components/admin-filters/admin-data-table.d.ts +7 -1
- package/dist/components/admin-filters/admin-data-table.d.ts.map +1 -1
- package/dist/components/admin-filters/filter-toolbar.d.ts.map +1 -1
- package/dist/components/admin-filters/index.js +8 -0
- package/dist/components/admin-filters/index.js.map +1 -0
- package/dist/components/alert/alert.d.ts.map +1 -1
- package/dist/components/alert/index.js +5 -0
- package/dist/components/alert/index.js.map +1 -0
- package/dist/components/animate/index.js +5 -0
- package/dist/components/animate/index.js.map +1 -0
- package/dist/components/breadcrumbs/breadcrumbs.d.ts.map +1 -1
- package/dist/components/breadcrumbs/index.js +4 -0
- package/dist/components/breadcrumbs/index.js.map +1 -0
- package/dist/components/card/index.js +4 -0
- package/dist/components/card/index.js.map +1 -0
- package/dist/components/chart/chart.d.ts.map +1 -1
- package/dist/components/chart/index.css +52 -0
- package/dist/components/chart/index.css.map +1 -0
- package/dist/components/chart/index.js +5 -0
- package/dist/components/chart/index.js.map +1 -0
- package/dist/components/chart/types.d.ts +3 -1
- package/dist/components/chart/types.d.ts.map +1 -1
- package/dist/components/chart/use-chart.d.ts.map +1 -1
- package/dist/components/command-palette/command-palette.d.ts +3 -1
- package/dist/components/command-palette/command-palette.d.ts.map +1 -1
- package/dist/components/command-palette/index.js +4 -0
- package/dist/components/command-palette/index.js.map +1 -0
- package/dist/components/confirm-dialog/index.js +4 -0
- package/dist/components/confirm-dialog/index.js.map +1 -0
- package/dist/components/date-input/date-input.d.ts +1 -0
- package/dist/components/date-input/date-input.d.ts.map +1 -1
- package/dist/components/date-input/index.d.ts +0 -1
- package/dist/components/date-input/index.d.ts.map +1 -1
- package/dist/components/doc-layout/index.js +5 -4
- package/dist/components/doc-layout/index.js.map +1 -1
- package/dist/components/editor/index.js +4 -3
- package/dist/components/editor/index.js.map +1 -1
- package/dist/components/emoji-picker/index.js +2 -1
- package/dist/components/emoji-picker/index.js.map +1 -1
- package/dist/components/empty-content/empty-content.d.ts.map +1 -1
- package/dist/components/empty-content/index.js +4 -0
- package/dist/components/empty-content/index.js.map +1 -0
- package/dist/components/error-boundary/index.js +6 -0
- package/dist/components/error-boundary/index.js.map +1 -0
- package/dist/components/index.css +13 -10
- package/dist/components/index.css.map +1 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +47 -21
- package/dist/components/index.js.map +1 -1
- package/dist/components/knowledge-graph/edge-labels.d.ts.map +1 -1
- package/dist/components/knowledge-graph/index.js +18 -16
- package/dist/components/knowledge-graph/index.js.map +1 -1
- package/dist/components/label/index.js +5 -0
- package/dist/components/label/index.js.map +1 -0
- package/dist/components/label/label.d.ts.map +1 -1
- package/dist/components/loading-screen/index.js +4 -0
- package/dist/components/loading-screen/index.js.map +1 -0
- package/dist/components/map/MapPointPicker.d.ts.map +1 -1
- package/dist/components/map/index.js +2 -1
- package/dist/components/map/index.js.map +1 -1
- package/dist/components/navigation-progress/index.js +4 -0
- package/dist/components/navigation-progress/index.js.map +1 -0
- package/dist/components/page-content/index.js +4 -0
- package/dist/components/page-content/index.js.map +1 -0
- package/dist/components/popover/index.js +4 -0
- package/dist/components/popover/index.js.map +1 -0
- package/dist/components/research/diagram.d.ts.map +1 -1
- package/dist/components/research/index.js +6 -4
- package/dist/components/research/index.js.map +1 -1
- package/dist/components/research-editor/extensions.d.ts +1 -1
- package/dist/components/research-editor/index.js +11 -10
- package/dist/components/research-editor/index.js.map +1 -1
- package/dist/components/research-editor/math-navigation.d.ts +2 -2
- package/dist/components/research-editor/math-navigation.d.ts.map +1 -1
- package/dist/components/scroll-to-top/index.js +4 -0
- package/dist/components/scroll-to-top/index.js.map +1 -0
- package/dist/components/search-input/index.js +7 -0
- package/dist/components/search-input/index.js.map +1 -0
- package/dist/components/search-input/search-input.d.ts +3 -1
- package/dist/components/search-input/search-input.d.ts.map +1 -1
- package/dist/components/skeleton/index.js +4 -0
- package/dist/components/skeleton/index.js.map +1 -0
- package/dist/components/snackbar/index.js +6 -0
- package/dist/components/snackbar/index.js.map +1 -0
- package/dist/components/stepper/index.js +4 -0
- package/dist/components/stepper/index.js.map +1 -0
- package/dist/components/table/index.d.ts +1 -0
- package/dist/components/table/index.d.ts.map +1 -1
- package/dist/components/table/index.js +5 -0
- package/dist/components/table/index.js.map +1 -0
- package/dist/components/table/table-viewport.d.ts +13 -0
- package/dist/components/table/table-viewport.d.ts.map +1 -0
- package/dist/components/table/table.d.ts +3 -1
- package/dist/components/table/table.d.ts.map +1 -1
- package/dist/components/tabs/index.js +6 -0
- package/dist/components/tabs/index.js.map +1 -0
- package/dist/components/tabs/tabs.d.ts +12 -1
- package/dist/components/tabs/tabs.d.ts.map +1 -1
- package/dist/core/index.js +12 -10
- package/dist/core/index.js.map +1 -1
- package/dist/forms/index.js +2 -0
- package/dist/forms/index.js.map +1 -1
- package/dist/hooks/index.js +14 -12
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/use-config-from-query.d.ts +2 -0
- package/dist/hooks/use-config-from-query.d.ts.map +1 -1
- package/dist/hooks/use-image-dimensions.d.ts.map +1 -1
- package/dist/hooks/use-keyboard-shortcut.d.ts.map +1 -1
- package/dist/hooks/use-scroll-position.d.ts.map +1 -1
- package/dist/hooks/use-window-size.d.ts.map +1 -1
- package/dist/icons/context.d.ts.map +1 -1
- package/dist/icons/index.js +3 -2
- package/dist/icons/index.js.map +1 -1
- package/dist/index.css +13 -10
- package/dist/index.css.map +1 -1
- package/dist/index.js +57 -31
- package/dist/index.js.map +1 -1
- package/dist/internal/research-parser.js +3 -0
- package/dist/internal/research-parser.js.map +1 -0
- package/dist/layouts/core/header-section.d.ts +1 -0
- package/dist/layouts/core/header-section.d.ts.map +1 -1
- package/dist/layouts/dashboard/layout.d.ts +3 -1
- package/dist/layouts/dashboard/layout.d.ts.map +1 -1
- package/dist/layouts/dashboard/sidenav.d.ts.map +1 -1
- package/dist/layouts/index.js +9 -8
- package/dist/layouts/index.js.map +1 -1
- package/dist/netron/index.js +2 -1
- package/dist/netron/index.js.map +1 -1
- package/dist/registry/index.js +1 -1
- package/dist/state/create-store.d.ts.map +1 -1
- package/dist/state/index.js +3 -2
- package/dist/state/index.js.map +1 -1
- package/dist/state/settings-version.d.ts.map +1 -1
- package/dist/theme/components/Chip.d.ts.map +1 -1
- package/dist/theme/components/Dialog.d.ts.map +1 -1
- package/dist/theme/components/TextField.d.ts.map +1 -1
- package/dist/theme/components/index.d.ts.map +1 -1
- package/dist/theme/components/theme-utils.d.ts +2 -2
- package/dist/theme/components/theme-utils.d.ts.map +1 -1
- package/dist/theme/index.js +8 -6
- package/dist/theme/index.js.map +1 -1
- package/dist/theme/palette/overrides.d.ts +1 -0
- package/dist/theme/palette/overrides.d.ts.map +1 -1
- package/dist/theme/semantic-surface.d.ts +8 -0
- package/dist/theme/semantic-surface.d.ts.map +1 -0
- package/dist/types/index.js +2 -2
- package/dist/ui/index.js +6 -5
- package/dist/ui/index.js.map +1 -1
- package/dist/utils/async-lock.d.ts.map +1 -1
- package/package.json +143 -37
- package/dist/chunk-472SOF76.js.map +0 -1
- package/dist/chunk-4Z5DE5GK.js.map +0 -1
- package/dist/chunk-52PQL67Q.js.map +0 -1
- package/dist/chunk-AD4W7HYC.js.map +0 -1
- package/dist/chunk-ADG4HZEP.js.map +0 -1
- package/dist/chunk-BJE2AKD4.js.map +0 -1
- package/dist/chunk-BRDWQVRT.js.map +0 -1
- package/dist/chunk-DRFNMZLG.js.map +0 -1
- package/dist/chunk-FF5RF32O.js.map +0 -1
- package/dist/chunk-FU52GL2E.js +0 -3
- package/dist/chunk-GMIE6III.js.map +0 -1
- package/dist/chunk-JSQTYDPG.js +0 -3
- package/dist/chunk-KQ67XB6T.js.map +0 -1
- package/dist/chunk-LSPFFEJT.js.map +0 -1
- package/dist/chunk-OKTLA23Q.js.map +0 -1
- package/dist/chunk-SNZK5X6F.js.map +0 -1
- package/dist/chunk-SU3LVQ7N.js.map +0 -1
- package/dist/chunk-XIXSSI3B.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/editor/types.ts","../src/components/editor/classes.ts","../src/components/editor/styles.tsx","../src/components/editor/presets.ts","../src/components/editor/toolbar/toolbar-item.tsx","../src/components/editor/toolbar/heading-block.tsx","../src/components/editor/toolbar/link-block.tsx","../src/components/editor/toolbar/image-block.tsx","../src/components/editor/toolbar/use-toolbar-state.ts","../src/components/editor/toolbar/toolbar.tsx","../src/components/editor/toolbar/bubble-toolbar.tsx","../src/components/editor/toolbar/code-highlight-block.tsx","../src/components/editor/extensions/clear-format.ts","../src/components/editor/extensions/text-transform.ts","../src/components/editor/editor.tsx"],"names":["styled","jsx","jsxs","ButtonBase","useState","useCallback","Fragment","TextField","Popover","Button","alpha","Divider","editor","Box"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmKO,IAAM,qBAAA,GAAsC;AAAA,EACjD,IAAA,EAAM,gBAAA;AAAA,EACN,MAAA,EAAQ,kBAAA;AAAA,EACR,SAAA,EAAW,qBAAA;AAAA,EACX,MAAA,EAAQ,eAAA;AAAA,EACR,UAAA,EAAY,uBAAA;AAAA,EACZ,WAAA,EAAa,8BAAA;AAAA,EACb,WAAA,EAAa,cAAA;AAAA,EACb,UAAA,EAAY,aAAA;AAAA,EACZ,WAAA,EAAa,cAAA;AAAA,EACb,QAAA,EAAU,WAAA;AAAA,EACV,SAAA,EAAW,YAAA;AAAA,EACX,WAAA,EAAa,cAAA;AAAA,EACb,UAAA,EAAY,aAAA;AAAA,EACZ,YAAA,EAAc,eAAA;AAAA,EACd,UAAA,EAAY,YAAA;AAAA,EACZ,SAAA,EAAW,YAAA;AAAA,EACX,cAAA,EAAgB,iBAAA;AAAA,EAChB,UAAA,EAAY,aAAA;AAAA,EACZ,UAAA,EAAY,aAAA;AAAA,EACZ,WAAA,EAAa,cAAA;AAAA,EACb,SAAA,EAAW,YAAA;AAAA,EACX,IAAA,EAAM,gBAAA;AAAA,EACN,IAAA,EAAM,sBAAA;AAAA,EACN,UAAA,EAAY,YAAA;AAAA,EACZ,cAAA,EAAgB,iBAAA;AAAA,EAChB,YAAA,EAAc,UAAA;AAAA,EACd,SAAA,EAAW,OAAA;AAAA,EACX,iBAAA,EAAmB,WAAA;AAAA,EACnB,aAAA,EAAe,WAAA;AAAA,EACf,aAAA,EAAe,UAAA;AAAA,EACf,UAAA,EAAY,OAAA;AAAA,EACZ,gBAAA,EAAkB;AACpB;;;AChMA,IAAM,GAAA,GAAM,CAAC,IAAA,KAAiB,CAAA,aAAA,EAAgB,IAAI,CAAA,CAAA;AAE3C,IAAM,aAAA,GAAgB;AAAA,EAC3B,IAAA,EAAM,IAAI,MAAM,CAAA;AAAA,EAChB,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,IAAI,SAAS,CAAA;AAAA,IACnB,EAAA,EAAI,IAAI,YAAY,CAAA;AAAA,IACpB,IAAA,EAAM,IAAI,cAAc,CAAA;AAAA,IACxB,MAAA,EAAQ,IAAI,gBAAgB,CAAA;AAAA,IAC5B,SAAA,EAAW,IAAI,mBAAmB,CAAA;AAAA,IAClC,MAAA,EAAQ,IAAI,gBAAgB,CAAA;AAAA,IAC5B,IAAA,EAAM,IAAI,cAAc,CAAA;AAAA,IACxB,SAAA,EAAW,IAAI,oBAAoB,CAAA;AAAA,IACnC,IAAA,EAAM,IAAI,cAAc,CAAA;AAAA,IACxB,MAAA,EAAQ,IAAI,gBAAgB,CAAA;AAAA,IAC5B,KAAA,EAAO,IAAI,eAAe,CAAA;AAAA,IAC1B,SAAA,EAAW,IAAI,oBAAoB,CAAA;AAAA,IACnC,WAAA,EAAa,IAAI,sBAAsB,CAAA;AAAA,IACvC,UAAA,EAAY,IAAI,qBAAqB,CAAA;AAAA,IACrC,YAAA,EAAc,IAAI,uBAAuB,CAAA;AAAA,IACzC,UAAA,EAAY,IAAI,qBAAqB,CAAA;AAAA,IACrC,WAAA,EAAa,IAAI,sBAAsB,CAAA;AAAA,IACvC,QAAA,EAAU,IAAI,mBAAmB,CAAA;AAAA,IACjC,UAAA,EAAY,IAAI,oBAAoB,CAAA;AAAA,IACpC,SAAA,EAAW,IAAI,oBAAoB,CAAA;AAAA,IACnC,KAAA,EAAO,IAAI,eAAe,CAAA;AAAA,IAC1B,IAAA,EAAM,IAAI,cAAc,CAAA;AAAA,IACxB,IAAA,EAAM,IAAI,cAAc,CAAA;AAAA,IACxB,UAAA,EAAY,IAAI,oBAAoB;AAAA,GACtC;AAAA,EACA,OAAA,EAAS;AAAA,IACP,IAAA,EAAM,IAAI,SAAS,CAAA;AAAA,IACnB,EAAA,EAAI,IAAI,YAAY,CAAA;AAAA,IACpB,IAAA,EAAM,IAAI,cAAc,CAAA;AAAA,IACxB,KAAA,EAAO,IAAI,eAAe,CAAA;AAAA,IAC1B,OAAA,EAAS,IAAI,iBAAiB,CAAA;AAAA,IAC9B,UAAA,EAAY,IAAI,qBAAqB,CAAA;AAAA,IACrC,SAAA,EAAW,IAAI,oBAAoB,CAAA;AAAA,IACnC,UAAA,EAAY,IAAI,qBAAqB,CAAA;AAAA,IACrC,UAAA,EAAY,IAAI,oBAAoB,CAAA;AAAA,IACpC,UAAA,EAAY,IAAI,qBAAqB,CAAA;AAAA,IACrC,WAAA,EAAa,IAAI,sBAAsB,CAAA;AAAA,IACvC,QAAA,EAAU,IAAI,mBAAmB,CAAA;AAAA,IACjC,QAAA,EAAU,IAAI,mBAAmB,CAAA;AAAA,IACjC,QAAA,EAAU,IAAI,mBAAmB,CAAA;AAAA,IACjC,WAAA,EAAa,IAAI,qBAAqB;AAAA,GACxC;AAAA,EACA,KAAA,EAAO;AAAA,IACL,KAAA,EAAO,IAAI,aAAa,CAAA;AAAA,IACxB,QAAA,EAAU,IAAI,gBAAgB,CAAA;AAAA,IAC9B,UAAA,EAAY,IAAI,kBAAkB;AAAA;AAEtC;ACpDA,IAAM,MAAA,GAAS,QAAA;AAER,IAAM,aAAa,MAAA,CAAO,KAAK,EAAE,CAAC,EAAE,OAAM,MAAO;AAAA,EACtD,SAAA,EAAW,GAAA;AAAA,EACX,OAAA,EAAS,MAAA;AAAA,EACT,aAAA,EAAe,QAAA;AAAA,EACf,YAAA,EAAc,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,YAAY,CAAA,GAAI,GAAA;AAAA,EACjD,MAAA,EAAQ,aAAa,KAAA,CAAM,KAAA,CAAM,QAAQ,IAAA,CAAK,GAAG,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AAAA,EACxD,YAAY,KAAA,CAAM,WAAA,CAAY,OAAO,CAAC,cAAA,EAAgB,YAAY,CAAA,EAAG;AAAA,IACnE,QAAA,EAAU,KAAA,CAAM,WAAA,CAAY,QAAA,CAAS;AAAA,GACtC,CAAA;AAAA,EACD,gBAAA,EAAkB;AAAA,IAChB,WAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,IAAA;AAAA,IACnC,SAAA,EAAW,aAAa,KAAA,CAAM,KAAA,CAAM,QAAQ,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAC,CAAA;AAAA,GAChE;AAAA;AAAA;AAAA;AAAA,EAKA,CAAC,CAAA,EAAA,EAAK,aAAA,CAAc,KAAA,CAAM,KAAK,EAAE,GAAG;AAAA,IAClC,WAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,IAAA;AAAA,IACjC,CAAC,CAAA,GAAA,EAAM,aAAA,CAAc,OAAA,CAAQ,IAAI,EAAE,GAAG;AAAA,MACpC,iBAAiB,KAAA,CAAM,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,MAAM,IAAI;AAAA;AACvD,GACF;AAAA;AAAA;AAAA;AAAA,EAKA,CAAC,CAAA,EAAA,EAAK,aAAA,CAAc,KAAA,CAAM,QAAQ,EAAE,GAAG;AAAA,IACrC,OAAA,EAAS,IAAA;AAAA,IACT,aAAA,EAAe;AAAA,GACjB;AAAA;AAAA;AAAA;AAAA,EAKA,CAAC,CAAA,EAAA,EAAK,aAAA,CAAc,KAAA,CAAM,UAAU,EAAE,GAAG;AAAA,IACvC,GAAA,EAAK,EAAA;AAAA,IACL,IAAA,EAAM,EAAA;AAAA,IACN,QAAA,EAAU,OAAA;AAAA,IACV,SAAA,EAAW,OAAA;AAAA,IACX,KAAA,EAAO,mBAAA;AAAA,IACP,MAAA,EAAQ,mBAAA;AAAA,IACR,MAAA,EAAQ,MAAM,MAAA,CAAO,KAAA;AAAA,IACrB,YAAA,EAAc,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,YAAY,CAAA,GAAI,CAAA;AAAA,IACjD,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW,OAAA;AAAA,IAC1C,SAAA,EAAW,KAAA,CAAM,OAAA,CAAQ,EAAE;AAAA,GAC7B;AAAA;AAAA;AAAA;AAAA,EAKA,CAAC,CAAA,GAAA,EAAM,aAAA,CAAc,OAAA,CAAQ,WAAW,EAAE,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQ3C,uBAAA,EAAyB;AAAA,MACvB,GAAG,MAAM,UAAA,CAAW,KAAA;AAAA,MACpB,MAAA,EAAQ,CAAA;AAAA,MACR,KAAA,EAAO,MAAA;AAAA,MACP,aAAA,EAAe,MAAA;AAAA,MACf,OAAA,EAAS,wBAAA;AAAA,MACT,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK;AAAA;AAC5B,GACF;AAAA;AAAA;AAAA;AAAA,EAKA,CAAC,CAAA,GAAA,EAAM,aAAA,CAAc,OAAA,CAAQ,IAAI,EAAE,GAAG;AAAA,IACpC,OAAA,EAAS,MAAA;AAAA,IACT,IAAA,EAAM,UAAA;AAAA,IACN,SAAA,EAAW,MAAA;AAAA,IACX,aAAA,EAAe,QAAA;AAAA,IACf,sBAAA,EAAwB,SAAA;AAAA,IACxB,uBAAA,EAAyB,SAAA;AAAA,IACzB,iBAAiB,KAAA,CAAM,KAAA,CAAM,QAAQ,IAAA,CAAK,GAAG,GAAG,IAAI,CAAA;AAAA,IAEpD,WAAA,EAAa;AAAA,MACX,SAAA,EAAW,EAAE,SAAA,EAAW,CAAA,EAAG,cAAc,MAAA,EAAO;AAAA,MAChD,eAAA,EAAiB;AAAA,QACf,IAAA,EAAM,UAAA;AAAA,QACN,OAAA,EAAS,MAAA;AAAA,QACT,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,CAAC;AAAA,OAC7B;AAAA;AAAA,MAGA,EAAA,EAAI,EAAE,GAAG,KAAA,CAAM,WAAW,EAAA,EAAI,SAAA,EAAW,EAAA,EAAI,YAAA,EAAc,CAAA,EAAE;AAAA,MAC7D,EAAA,EAAI,EAAE,GAAG,KAAA,CAAM,WAAW,EAAA,EAAI,SAAA,EAAW,EAAA,EAAI,YAAA,EAAc,CAAA,EAAE;AAAA,MAC7D,EAAA,EAAI,EAAE,GAAG,KAAA,CAAM,WAAW,EAAA,EAAI,SAAA,EAAW,EAAA,EAAI,YAAA,EAAc,CAAA,EAAE;AAAA,MAC7D,EAAA,EAAI,EAAE,GAAG,KAAA,CAAM,WAAW,EAAA,EAAI,SAAA,EAAW,EAAA,EAAI,YAAA,EAAc,CAAA,EAAE;AAAA,MAC7D,EAAA,EAAI,EAAE,GAAG,KAAA,CAAM,WAAW,EAAA,EAAI,SAAA,EAAW,EAAA,EAAI,YAAA,EAAc,CAAA,EAAE;AAAA,MAC7D,EAAA,EAAI,EAAE,GAAG,KAAA,CAAM,WAAW,EAAA,EAAI,SAAA,EAAW,EAAA,EAAI,YAAA,EAAc,CAAA,EAAE;AAAA,MAC7D,GAAG,EAAE,GAAG,MAAM,UAAA,CAAW,KAAA,EAAO,cAAc,SAAA,EAAU;AAAA;AAAA,MAGxD,CAAC,CAAA,GAAA,EAAM,aAAA,CAAc,OAAA,CAAQ,IAAI,EAAE,GAAG;AAAA,QACpC,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,IAAA;AAAA,QAC7B,cAAA,EAAgB,MAAA;AAAA,QAChB,SAAA,EAAW,EAAE,cAAA,EAAgB,WAAA;AAAY,OAC3C;AAAA;AAAA,MAGA,CAAC,CAAA,GAAA,EAAM,aAAA,CAAc,OAAA,CAAQ,EAAE,EAAE,GAAG;AAAA,QAClC,UAAA,EAAY,CAAA;AAAA,QACZ,WAAA,EAAa,CAAA;AAAA,QACb,MAAA,EAAQ,OAAA;AAAA,QACR,WAAA,EAAa,OAAA;AAAA,QACb,iBAAA,EAAmB,MAAA;AAAA,QACnB,WAAA,EAAa,MAAM,OAAA,CAAQ;AAAA,OAC7B;AAAA;AAAA,MAGA,CAAC,CAAA,GAAA,EAAM,aAAA,CAAc,OAAA,CAAQ,KAAK,EAAE,GAAG;AAAA,QACrC,KAAA,EAAO,MAAA;AAAA,QACP,MAAA,EAAQ,MAAA;AAAA,QACR,QAAA,EAAU,MAAA;AAAA,QACV,YAAA,EAAc,MAAM,KAAA,CAAM,YAAA;AAAA,QAC1B,MAAA,EAAQ,kBAAA;AAAA,QACR,4BAAA,EAA8B;AAAA,UAC5B,OAAA,EAAS,CAAA,UAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,QAAQ,IAAI,CAAA,CAAA;AAAA,UAChD,aAAA,EAAe;AAAA;AACjB,OACF;AAAA;AAAA,MAGA,CAAC,CAAA,GAAA,EAAM,aAAA,CAAc,OAAA,CAAQ,UAAU,EAAE,GAAG;AAAA,QAC1C,WAAA,EAAa,EAAA;AAAA,QACb,aAAA,EAAe;AAAA,OACjB;AAAA,MACA,CAAC,CAAA,GAAA,EAAM,aAAA,CAAc,OAAA,CAAQ,WAAW,EAAE,GAAG;AAAA,QAC3C,WAAA,EAAa;AAAA,OACf;AAAA,MACA,CAAC,CAAA,GAAA,EAAM,aAAA,CAAc,OAAA,CAAQ,QAAQ,EAAE,GAAG;AAAA,QACxC,UAAA,EAAY,CAAA;AAAA,QACZ,OAAA,EAAS,EAAE,MAAA,EAAQ,CAAA;AAAE,OACvB;AAAA;AAAA,MAGA,CAAC,CAAA,GAAA,EAAM,aAAA,CAAc,OAAA,CAAQ,QAAQ,EAAE,GAAG;AAAA,QACxC,SAAA,EAAW,MAAA;AAAA,QACX,OAAA,EAAS,CAAA;AAAA,QACT,MAAA,EAAQ;AAAA,UACN,OAAA,EAAS,MAAA;AAAA,UACT,UAAA,EAAY,YAAA;AAAA,UACZ,GAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,UACpB,WAAA,EAAa;AAAA,YACX,SAAA,EAAW,CAAA;AAAA,YACX,UAAA,EAAY;AAAA,WACd;AAAA,UACA,SAAA,EAAW,EAAE,IAAA,EAAM,CAAA;AAAE;AACvB,OACF;AAAA;AAAA,MAGA,CAAC,CAAA,GAAA,EAAM,aAAA,CAAc,OAAA,CAAQ,UAAU,EAAE,GAAG;AAAA,QAC1C,UAAA,EAAY,GAAA;AAAA,QACZ,QAAA,EAAU,OAAA;AAAA,QACV,MAAA,EAAQ,WAAA;AAAA,QACR,QAAA,EAAU,UAAA;AAAA,QACV,UAAA,EAAY,gBAAA;AAAA,QACZ,SAAS,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,QACjC,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,SAAA;AAAA,QAC1B,UAAA,EAAY,aAAa,KAAA,CAAM,KAAA,CAAM,QAAQ,IAAA,CAAK,GAAG,CAAA,EAAG,IAAI,CAAC,CAAA,CAAA;AAAA,QAC7D,CAAC,KAAA,CAAM,WAAA,CAAY,EAAA,CAAG,IAAI,CAAC,GAAG,EAAE,KAAA,EAAO,MAAA,EAAQ,QAAA,EAAU,GAAA,EAAI;AAAA,QAC7D,OAAO,EAAE,MAAA,EAAQ,GAAG,QAAA,EAAU,SAAA,EAAW,YAAY,SAAA,EAAU;AAAA,QAC/D,WAAA,EAAa;AAAA,UACX,IAAA,EAAM,EAAA;AAAA,UACN,GAAA,EAAK,EAAA;AAAA,UACL,OAAA,EAAS,OAAA;AAAA,UACT,QAAA,EAAU,KAAA;AAAA,UACV,OAAA,EAAS,UAAA;AAAA,UACT,QAAA,EAAU,UAAA;AAAA,UACV,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK;AAAA;AAC5B,OACF;AAAA;AAAA,MAGA,CAAC,CAAA,GAAA,EAAM,aAAA,CAAc,OAAA,CAAQ,UAAU,EAAE,GAAG;AAAA,QAC1C,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA;AAAA,QAChC,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,SAAA;AAAA,QAC1B,QAAA,EAAU,KAAA,CAAM,UAAA,CAAW,KAAA,CAAM,QAAA;AAAA,QACjC,YAAA,EAAc,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,YAAY,CAAA,GAAI,CAAA;AAAA,QACjD,iBAAiB,KAAA,CAAM,KAAA,CAAM,QAAQ,IAAA,CAAK,GAAG,GAAG,IAAI,CAAA;AAAA,QACpD,UAAA,EAAY;AAAA,OACd;AAAA;AAAA,MAGA,CAAC,CAAA,GAAA,EAAM,aAAA,CAAc,OAAA,CAAQ,SAAS,EAAE,GAAG;AAAA,QACzC,QAAA,EAAU,UAAA;AAAA,QACV,OAAA,EAAS;AAAA,UACP,SAAA,EAAW,MAAA;AAAA,UACX,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,UAC5B,SAAS,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,CAAA,EAAG,GAAG,CAAC,CAAA;AAAA,UACjC,YAAA,EAAc,MAAM,KAAA,CAAM,YAAA;AAAA,UAC1B,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA;AAAA,UACvC,UAAA,EAAY,0CAAA;AAAA,UACZ,UAAU,EAAE,QAAA,EAAU,KAAA,CAAM,UAAA,CAAW,MAAM,QAAA;AAAS,SACxD;AAAA,QACA,CAAC,CAAA,GAAA,EAAM,aAAA,CAAc,OAAA,CAAQ,UAAU,EAAE,GAAG;AAAA,UAC1C,GAAA,EAAK,CAAA;AAAA,UACL,KAAA,EAAO,CAAA;AAAA,UACP,MAAA,EAAQ,CAAA;AAAA,UACR,OAAA,EAAS,CAAA;AAAA,UACT,OAAA,EAAS,MAAA;AAAA,UACT,YAAA,EAAc,CAAA;AAAA,UACd,QAAA,EAAU,UAAA;AAAA,UACV,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,UAC5B,UAAA,EAAY,MAAM,UAAA,CAAW,gBAAA;AAAA,UAC7B,aAAa,KAAA,CAAM,KAAA,CAAM,QAAQ,IAAA,CAAK,GAAG,GAAG,IAAI,CAAA;AAAA,UAChD,iBAAiB,KAAA,CAAM,KAAA,CAAM,QAAQ,IAAA,CAAK,GAAG,GAAG,IAAI;AAAA;AACtD;AACF;AACF;AAEJ,CAAA,CAAE,CAAA;;;AC1NF,IAAM,YAAA,GAAqD;AAAA;AAAA;AAAA;AAAA;AAAA,EAKzD,IAAA,EAAM;AAAA,IACJ,SAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA,YAAA;AAAA,IACA,cAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA,gBAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAA,EAAU;AAAA,IACR,SAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA,MAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAA,EAAS;AAAA,IACP,MAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,YAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAA,EAAS,CAAC,MAAA,EAAQ,QAAA,EAAU,QAAQ,MAAM,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM1C,IAAA,EAAM,CAAC,MAAA,EAAQ,QAAA,EAAU,UAAU,MAAA,EAAQ,MAAA,EAAQ,YAAA,EAAc,aAAA,EAAe,WAAW,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM3F,QAAQ;AACV,CAAA;AAKA,IAAM,kBAAA,GAAqD;AAAA,EACzD,IAAA,EAAM,IAAA;AAAA,EACN,QAAA,EAAU,IAAA;AAAA,EACV,OAAA,EAAS,IAAA;AAAA,EACT,OAAA,EAAS,KAAA;AAAA,EACT,IAAA,EAAM,KAAA;AAAA,EACN,MAAA,EAAQ;AACV,CAAA;AAMO,SAAS,eAAe,MAAA,EAAoD;AACjF,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,eAAe,UAAU,CAAA;AAAA,EAClC;AAEA,EAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC9B,IAAA,OAAO;AAAA,MACL,KAAA,EAAO,IAAI,GAAA,CAAI,YAAA,CAAa,MAAM,CAAC,CAAA;AAAA,MACnC,UAAA,EAAY,mBAAmB,MAAM;AAAA,KACvC;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,IAAI,GAAA,CAAI,MAAA,CAAO,KAAK,CAAA;AAAA,IAC3B,UAAA,EAAY,OAAO,UAAA,IAAc;AAAA,GACnC;AACF;ACzHO,SAAS,WAAA,CAAY,EAAE,EAAA,EAAI,IAAA,EAAM,OAAO,MAAA,EAAQ,QAAA,EAAU,GAAG,KAAA,EAAM,EAA2B;AACnG,EAAA,MAAM,SAAA,GAAY,MAAM,YAAY,CAAA;AAEpC,EAAA,MAAM,UAAA,GAAa,sBACjB,IAAA,CAAC,QAAA,EAAA,EAAS,aAAA,EAAa,IAAA,EAAC,kBAAA,EAAkB,IAAA,EAAC,QAAA,EAAoB,MAAA,EAAgB,EAAA,EAAS,GAAG,KAAA,EACxF,QAAA,EAAA;AAAA,IAAA,IAAA,wBAAS,OAAA,EAAA,EAAQ,EAAA,EAAI,EAAE,QAAA,EAAU,EAAA,IAAO,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,IAC7C,KAAA,IAAS;AAAA,GAAA,EACZ,CAAA;AAGF,EAAA,IAAI,SAAA,EAAW;AACb,IAAA,uBAAO,GAAA,CAAC,OAAA,EAAA,EAAQ,KAAA,EAAO,SAAA,EAAY,sBAAW,EAAE,CAAA;AAAA,EAClD;AAEA,EAAA,OAAO,UAAA,EAAW;AACpB;AAEA,IAAM,QAAA,GAAWA,OAAO,UAAA,EAAY;AAAA,EAClC,iBAAA,EAAmB,CAAC,IAAA,KAAiB,CAAC,CAAC,UAAU,UAAA,EAAY,IAAI,CAAA,CAAE,QAAA,CAAS,IAAI;AAClF,CAAC,CAAA,CAA0C,CAAC,EAAE,KAAA,EAAM,MAAO;AAAA,EACzD,GAAG,MAAM,UAAA,CAAW,KAAA;AAAA,EACpB,KAAA,EAAO,EAAA;AAAA,EACP,MAAA,EAAQ,EAAA;AAAA,EACR,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,CAAA,EAAG,IAAI,CAAA;AAAA,EAC9B,YAAA,EAAc,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,YAAY,CAAA,GAAI,IAAA;AAAA,EACjD,SAAA,EAAW;AAAA,IACT,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO;AAAA,GACxC;AAAA,EACA,QAAA,EAAU;AAAA,IACR;AAAA,MACE,KAAA,EAAO,CAAC,KAAA,KAAU,CAAC,CAAC,KAAA,CAAM,MAAA;AAAA,MAC1B,KAAA,EAAO;AAAA,QACL,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,QAAA;AAAA,QACtC,MAAA,EAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,OAAO,KAAK,CAAA;AAAA;AACjD,KACF;AAAA,IACA;AAAA,MACE,KAAA,EAAO,CAAC,KAAA,KAAU,CAAC,CAAC,KAAA,CAAM,QAAA;AAAA,MAC1B,KAAA,EAAO;AAAA,QACL,OAAA,EAAS,IAAA;AAAA,QACT,MAAA,EAAQ,SAAA;AAAA,QACR,aAAA,EAAe;AAAA;AACjB;AACF;AAEJ,CAAA,CAAE,CAAA;ACrCF,IAAM,eAAA,GAAkB;AAAA,EACtB,EAAE,GAAA,EAAK,WAAA,EAAa,KAAA,EAAO,MAA0B,IAAA,kBAAMC,GAAAA,CAAC,aAAA,EAAA,EAAc,EAAA,EAAI,EAAE,QAAA,EAAU,EAAA,IAAM,CAAA,EAAG;AAAA,EACnG,EAAE,GAAA,EAAK,WAAA,EAAa,KAAA,EAAO,GAAuB,IAAA,kBAAMA,GAAAA,CAAC,MAAA,EAAA,EAAO,EAAA,EAAI,EAAE,QAAA,EAAU,EAAA,IAAM,CAAA,EAAG;AAAA,EACzF,EAAE,GAAA,EAAK,WAAA,EAAa,KAAA,EAAO,GAAuB,IAAA,kBAAMA,GAAAA,CAAC,MAAA,EAAA,EAAO,EAAA,EAAI,EAAE,QAAA,EAAU,EAAA,IAAM,CAAA,EAAG;AAAA,EACzF,EAAE,GAAA,EAAK,WAAA,EAAa,KAAA,EAAO,GAAuB,IAAA,kBAAMA,GAAAA,CAAC,MAAA,EAAA,EAAO,EAAA,EAAI,EAAE,QAAA,EAAU,EAAA,IAAM,CAAA,EAAG;AAAA,EACzF,EAAE,GAAA,EAAK,WAAA,EAAa,KAAA,EAAO,GAAuB,IAAA,kBAAMA,GAAAA,CAAC,MAAA,EAAA,EAAO,EAAA,EAAI,EAAE,QAAA,EAAU,EAAA,IAAM,CAAA,EAAG;AAAA,EACzF,EAAE,GAAA,EAAK,WAAA,EAAa,KAAA,EAAO,GAAuB,IAAA,kBAAMA,GAAAA,CAAC,MAAA,EAAA,EAAO,EAAA,EAAI,EAAE,QAAA,EAAU,EAAA,IAAM,CAAA,EAAG;AAAA,EACzF,EAAE,GAAA,EAAK,WAAA,EAAa,KAAA,EAAO,GAAuB,IAAA,kBAAMA,GAAAA,CAAC,MAAA,EAAA,EAAO,EAAA,EAAI,EAAE,QAAA,EAAU,EAAA,IAAM,CAAA;AACxF,CAAA;AAQO,SAAS,YAAA,CAAa,EAAE,MAAA,EAAQ,QAAA,EAAU,QAAO,EAAsB;AAC5E,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAA6B,IAAI,CAAA;AACjE,EAAA,MAAM,IAAA,GAAO,QAAQ,QAAQ,CAAA;AAE7B,EAAA,MAAM,UAAA,GAAa,WAAA,CAAY,CAAC,KAAA,KAA+C;AAC7E,IAAA,WAAA,CAAY,MAAM,aAAa,CAAA;AAAA,EACjC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,WAAA,GAAc,YAAY,MAAM;AACpC,IAAA,WAAA,CAAY,IAAI,CAAA;AAAA,EAClB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,YAAA,GAAe,WAAA;AAAA,IACnB,CAAC,KAAA,KAA4B;AAC3B,MAAA,WAAA,EAAY;AACZ,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,MAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,aAAA,CAAc,EAAE,KAAA,EAAO,KAAA,EAAO,CAAA,CAAE,GAAA,EAAI;AAAA,MAC7D,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,OAAM,CAAE,KAAA,EAAM,CAAE,YAAA,GAAe,GAAA,EAAI;AAAA,MAC5C;AAAA,IACF,CAAA;AAAA,IACA,CAAC,QAAQ,WAAW;AAAA,GACtB;AAEA,EAAA,MAAM,UAAA,GAAc,MAAA,CAAO,QAAA,CAAS,SAAA,EAAW,EAAE,OAAO,CAAA,EAAG,CAAA,oBAAKA,GAAAA,CAAC,MAAA,EAAA,EAAO,IAAI,EAAE,QAAA,EAAU,EAAA,EAAG,EAAG,CAAA,IAC3F,MAAA,CAAO,SAAS,SAAA,EAAW,EAAE,KAAA,EAAO,CAAA,EAAG,CAAA,oBAAKA,GAAAA,CAAC,MAAA,EAAA,EAAO,EAAA,EAAI,EAAE,QAAA,EAAU,EAAA,IAAM,CAAA,IAC1E,MAAA,CAAO,QAAA,CAAS,SAAA,EAAW,EAAE,KAAA,EAAO,GAAG,CAAA,oBAAKA,GAAAA,CAAC,MAAA,EAAA,EAAO,EAAA,EAAI,EAAE,QAAA,EAAU,EAAA,EAAG,EAAG,CAAA,IAC1E,MAAA,CAAO,QAAA,CAAS,SAAA,EAAW,EAAE,KAAA,EAAO,CAAA,EAAG,CAAA,oBAAKA,GAAAA,CAAC,UAAO,EAAA,EAAI,EAAE,QAAA,EAAU,EAAA,EAAG,EAAG,CAAA,IAC1E,OAAO,QAAA,CAAS,SAAA,EAAW,EAAE,KAAA,EAAO,CAAA,EAAG,qBAAKA,GAAAA,CAAC,MAAA,EAAA,EAAO,EAAA,EAAI,EAAE,QAAA,EAAU,IAAG,EAAG,CAAA,IAC1E,MAAA,CAAO,QAAA,CAAS,SAAA,EAAW,EAAE,OAAO,CAAA,EAAG,CAAA,oBAAKA,GAAAA,CAAC,MAAA,EAAA,EAAO,IAAI,EAAE,QAAA,EAAU,EAAA,EAAG,EAAG,CAAA,oBACzEA,GAAAA,CAAC,aAAA,EAAA,EAAc,EAAA,EAAI,EAAE,QAAA,EAAU,EAAA,EAAG,EAAG,CAAA;AAGzC,EAAA,MAAM,QAAA,GAAW,qBAAA;AACjB,EAAA,MAAM,MAAA,GAAS,cAAA;AAEf,EAAA,uBACEC,KAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAI,QAAA;AAAA,QACJ,cAAY,MAAA,CAAO,WAAA;AAAA,QACnB,eAAA,EAAe,OAAO,MAAA,GAAS,MAAA;AAAA,QAC/B,eAAA,EAAc,MAAA;AAAA,QACd,eAAA,EAAe,OAAO,MAAA,GAAS,MAAA;AAAA,QAC/B,OAAA,EAAS,UAAA;AAAA,QAER,QAAA,EAAA;AAAA;AAAA,KACH;AAAA,oBAEAA,GAAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAI,MAAA;AAAA,QACJ,QAAA;AAAA,QACA,IAAA;AAAA,QACA,OAAA,EAAS,WAAA;AAAA,QACT,SAAA,EAAW;AAAA,UACT,IAAA,EAAM,EAAE,iBAAA,EAAmB,QAAA,EAAS;AAAA,UACpC,KAAA,EAAO;AAAA,YACL,EAAA,EAAI;AAAA,cACF,KAAA,EAAO,EAAA;AAAA,cACP,CAAC,CAAA,GAAA,EAAM,WAAA,CAAY,IAAI,CAAA,CAAE,GAAG,EAAE,GAAA,EAAK,GAAA,EAAK,OAAA,EAAS,MAAA,EAAQ,aAAA,EAAe,QAAA,EAAS;AAAA,cACjF,CAAC,CAAA,GAAA,EAAM,iBAAA,CAAkB,IAAI,EAAE,GAAG;AAAA,gBAChC,EAAA,EAAI,CAAA;AAAA,gBACJ,KAAA,EAAO,CAAA;AAAA,gBACP,MAAA,EAAQ,EAAA;AAAA,gBACR,YAAA,EAAc,IAAA;AAAA,gBACd,cAAA,EAAgB,YAAA;AAAA,gBAChB,SAAA,EAAW,EAAE,eAAA,EAAiB,cAAA;AAAe;AAC/C;AACF;AACF,SACF;AAAA,QAEC,QAAA,EAAA,eAAA,CAAgB,GAAA,CAAI,CAAC,MAAA,qBACpBA,GAAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YAEC,SAAA,EAAU,IAAA;AAAA,YACV,cAAY,MAAA,CAAO,GAAA;AAAA,YACnB,MAAM,MAAA,CAAO,IAAA;AAAA,YACb,MAAA,EAAQ,QAAA,CAAS,MAAA,CAAO,KAAK,CAAA;AAAA,YAC7B,OAAA,EAAS,MAAM,YAAA,CAAa,MAAA,CAAO,KAAK;AAAA,WAAA;AAAA,UALnC,MAAA,CAAO;AAAA,SAOf;AAAA;AAAA;AACH,GAAA,EACF,CAAA;AAEJ;AAEA,IAAM,gBAAgBD,MAAAA,CAAOG,UAAU,EAAE,CAAC,EAAE,OAAM,MAAO;AAAA,EACvD,KAAA,EAAO,EAAA;AAAA,EACP,MAAA,EAAQ,EAAA;AAAA,EACR,YAAA,EAAc,MAAA,CAAO,KAAA,CAAM,KAAA,CAAM,YAAY,CAAA,GAAI,IAAA;AAAA,EACjD,cAAA,EAAgB,QAAA;AAAA,EAChB,SAAA,EAAW;AAAA,IACT,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO;AAAA;AAE1C,CAAA,CAAE,CAAA;ACxGK,SAAS,UAAU,EAAE,MAAA,EAAQ,UAAU,UAAA,EAAY,MAAA,EAAQ,QAAO,EAAmB;AAC1F,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIC,SAAS,EAAE,CAAA;AACzC,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,SAA6B,IAAI,CAAA;AACjE,EAAA,MAAM,IAAA,GAAO,QAAQ,QAAQ,CAAA;AAE7B,EAAA,MAAM,UAAA,GAAaC,WAAAA;AAAA,IACjB,CAAC,KAAA,KAA+C;AAC9C,MAAA,MAAM,UAAA,GAAa,MAAA,CAAO,aAAA,CAAc,MAAM,EAAE,IAAA,IAAQ,EAAA;AACxD,MAAA,WAAA,CAAY,MAAM,aAAa,CAAA;AAC/B,MAAA,UAAA,CAAW,UAAU,CAAA;AAAA,IACvB,CAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AAEA,EAAA,MAAM,WAAA,GAAcA,YAAY,MAAM;AACpC,IAAA,WAAA,CAAY,IAAI,CAAA;AAAA,EAClB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,WAAA,GAAcA,YAAY,MAAM;AACpC,IAAA,WAAA,EAAY;AACZ,IAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,KAAA,GAAQ,KAAA,EAAM,CAAE,gBAAgB,MAAM,CAAA;AACjE,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,KAAA,GAAQ,OAAA,CAAQ,EAAE,MAAM,OAAA,EAAS,EAAE,GAAA,EAAI;AAAA,IACzC,CAAA,MAAO;AACL,MAAA,KAAA,EAAM,CAAE,SAAA,EAAU,CAAE,GAAA,EAAI;AAAA,IAC1B;AAAA,EACF,CAAA,EAAG,CAAC,MAAA,EAAQ,OAAA,EAAS,WAAW,CAAC,CAAA;AAEjC,EAAA,MAAM,SAAA,GAAY,OAAO,cAAA,GAAiB,MAAA;AAE1C,EAAA,uBACEH,IAAAA,CAAAI,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAL,GAAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,kBAAA,EAAkB,SAAA;AAAA,QAClB,cAAY,MAAA,CAAO,UAAA;AAAA,QACnB,MAAA;AAAA,QACA,SAAA,EAAW,cAAc,OAAA,CAAQ,IAAA;AAAA,QACjC,OAAA,EAAS,UAAA;AAAA,QACT,IAAA,EAAM;AAAA;AAAA,KACR;AAAA,oBAEAA,GAAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,cAAY,MAAA,CAAO,UAAA;AAAA,QACnB,UAAU,CAAC,MAAA;AAAA,QACX,SAAA,EAAW,cAAc,OAAA,CAAQ,MAAA;AAAA,QACjC,OAAA,EAAS,MAAM,MAAA,CAAO,KAAA,GAAQ,KAAA,EAAM,CAAE,SAAA,EAAU,CAAE,GAAA,EAAI;AAAA,QACtD,IAAA,EAAM;AAAA;AAAA,KACR;AAAA,oBAEAA,GAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAI,SAAA;AAAA,QACJ,IAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAA,EAAS,WAAA;AAAA,QACT,YAAA,EAAc,EAAE,QAAA,EAAU,QAAA,EAAU,YAAY,MAAA,EAAO;AAAA,QACvD,SAAA,EAAW;AAAA,UACT,KAAA,EAAO;AAAA,YACL,EAAA,EAAI,EAAE,CAAA,EAAG,GAAA,EAAK,GAAA,EAAK,IAAA,EAAM,KAAA,EAAO,CAAA,EAAG,QAAA,EAAU,GAAA,EAAK,OAAA,EAAS,MAAA,EAAQ,eAAe,QAAA;AAAS;AAC7F,SACF;AAAA,QAOA,QAAA,kBAAAC,IAAAA,CAAC,GAAA,EAAA,EAAI,EAAA,EAAI,EAAE,GAAA,EAAK,CAAA,EAAG,OAAA,EAAS,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAS,EACvD,QAAA,EAAA;AAAA,0BAAAD,GAAAA;AAAA,YAACM,UAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAS,IAAA;AAAA,cACT,IAAA,EAAK,OAAA;AAAA,cACL,OAAO,MAAA,CAAO,YAAA;AAAA,cACd,WAAA,EAAY,UAAA;AAAA,cACZ,KAAA,EAAO,OAAA;AAAA,cACP,UAAU,CAAC,CAAA,KAAM,UAAA,CAAW,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,cAC1C,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,gBAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,EAAS,WAAA,EAAY;AAAA,cACrC;AAAA;AAAA,WACF;AAAA,0BACAN,GAAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,QAAA,EAAU,CAAC,OAAA,EAAS,OAAA,EAAS,WAAA,EACtD,QAAA,EAAA,MAAA,CAAO,SAAA,EACV;AAAA,SAAA,EACF;AAAA;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;ACvFO,SAAS,UAAA,CAAW,EAAE,MAAA,EAAQ,IAAA,EAAM,QAAO,EAAoB;AACpE,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIG,SAA6B,IAAI,CAAA;AACjE,EAAA,MAAM,IAAA,GAAO,QAAQ,QAAQ,CAAA;AAC7B,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,QAAAA,CAAS,EAAE,QAAA,EAAU,EAAA,EAAI,OAAA,EAAS,EAAA,EAAI,CAAA;AAEhE,EAAA,MAAM,UAAA,GAAaC,WAAAA,CAAY,CAAC,KAAA,KAA+C;AAC7E,IAAA,WAAA,CAAY,MAAM,aAAa,CAAA;AAAA,EACjC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,WAAA,GAAcA,YAAY,MAAM;AACpC,IAAA,WAAA,CAAY,IAAI,CAAA;AAAA,EAClB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,WAAA,GAAcA,YAAY,MAAM;AACpC,IAAA,WAAA,EAAY;AACZ,IAAA,QAAA,CAAS,EAAE,QAAA,EAAU,EAAA,EAAI,OAAA,EAAS,IAAI,CAAA;AACtC,IAAA,MAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,SAAS,EAAE,GAAA,EAAK,KAAA,CAAM,QAAA,EAAU,GAAA,EAAK,KAAA,CAAM,OAAA,EAAS,EAAE,GAAA,EAAI;AAAA,EACnF,CAAA,EAAG,CAAC,MAAA,EAAQ,WAAA,EAAa,KAAK,CAAC,CAAA;AAE/B,EAAA,MAAM,SAAA,GAAY,OAAO,eAAA,GAAkB,MAAA;AAE3C,EAAA,uBACEH,IAAAA,CAAAI,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAL,GAAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,kBAAA,EAAkB,SAAA;AAAA,QAClB,cAAY,MAAA,CAAO,WAAA;AAAA,QACnB,SAAA,EAAW,cAAc,OAAA,CAAQ,KAAA;AAAA,QACjC,OAAA,EAAS,UAAA;AAAA,QACT;AAAA;AAAA,KACF;AAAA,oBAEAC,IAAAA;AAAA,MAACM,OAAAA;AAAA,MAAA;AAAA,QACC,EAAA,EAAI,SAAA;AAAA,QACJ,IAAA;AAAA,QACA,QAAA;AAAA,QACA,OAAA,EAAS,WAAA;AAAA,QACT,YAAA,EAAc,EAAE,QAAA,EAAU,QAAA,EAAU,YAAY,MAAA,EAAO;AAAA,QACvD,SAAA,EAAW;AAAA,UACT,KAAA,EAAO;AAAA,YACL,EAAA,EAAI,EAAE,CAAA,EAAG,GAAA,EAAK,GAAA,EAAK,IAAA,EAAM,KAAA,EAAO,CAAA,EAAG,QAAA,EAAU,GAAA,EAAK,OAAA,EAAS,MAAA,EAAQ,eAAe,QAAA;AAAS;AAC7F,SACF;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAP,GAAAA,CAAC,UAAA,EAAA,EAAW,OAAA,EAAQ,WAAA,EAAa,iBAAO,iBAAA,EAAkB,CAAA;AAAA,0BAC1DA,GAAAA;AAAA,YAACM,UAAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAS,IAAA;AAAA,cACT,IAAA,EAAK,OAAA;AAAA,cACL,OAAO,MAAA,CAAO,aAAA;AAAA,cACd,WAAA,EAAY,UAAA;AAAA,cACZ,OAAO,KAAA,CAAM,QAAA;AAAA,cACb,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAC,IAAA,MAAU,EAAE,GAAG,IAAA,EAAM,QAAA,EAAU,CAAA,CAAE,MAAA,CAAO,OAAM,CAAE;AAAA;AAAA,WAC7E;AAAA,0BACAN,GAAAA;AAAA,YAACM,UAAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAS,IAAA;AAAA,cACT,IAAA,EAAK,OAAA;AAAA,cACL,OAAO,MAAA,CAAO,aAAA;AAAA,cACd,OAAO,KAAA,CAAM,OAAA;AAAA,cACb,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAC,IAAA,MAAU,EAAE,GAAG,IAAA,EAAM,OAAA,EAAS,CAAA,CAAE,MAAA,CAAO,OAAM,CAAE;AAAA;AAAA,WAC5E;AAAA,0BACAN,GAAAA,CAACQ,MAAAA,EAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,UAAU,CAAC,KAAA,CAAM,QAAA,EAAU,OAAA,EAAS,aAAa,EAAA,EAAI,EAAE,WAAW,UAAA,EAAW,EACtG,iBAAO,UAAA,EACV;AAAA;AAAA;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;AC1DO,SAAS,gBAAgB,MAAA,EAAuC;AACrE,EAAA,OAAO,cAAA,CAAe;AAAA,IACpB,MAAA;AAAA,IACA,QAAA,EAAU,CAAC,GAAA,KAAQ;AACjB,MAAA,MAAM,SAAS,GAAA,CAAI,MAAA,CAAO,KAAI,CAAE,KAAA,GAAQ,KAAA,EAAM;AAE9C,MAAA,OAAO;AAAA,QACL,MAAA,EAAQ,GAAA,CAAI,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA;AAAA,QAClC,MAAA,EAAQ,GAAA,CAAI,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA;AAAA,QAClC,MAAA,EAAQ,GAAA,CAAI,MAAA,CAAO,QAAA,CAAS,MAAM,CAAA;AAAA,QAClC,QAAA,EAAU,GAAA,CAAI,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA;AAAA,QACtC,QAAA,EAAU,GAAA,CAAI,MAAA,CAAO,QAAA,CAAS,QAAQ,CAAA;AAAA,QACtC,WAAA,EAAa,GAAA,CAAI,MAAA,CAAO,QAAA,CAAS,WAAW,CAAA;AAAA,QAC5C,WAAA,EAAa,GAAA,CAAI,MAAA,CAAO,QAAA,CAAS,WAAW,CAAA;AAAA,QAC5C,YAAA,EAAc,GAAA,CAAI,MAAA,CAAO,QAAA,CAAS,YAAY,CAAA;AAAA,QAC9C,YAAA,EAAc,GAAA,CAAI,MAAA,CAAO,QAAA,CAAS,YAAY,CAAA;AAAA,QAC9C,aAAA,EAAe,GAAA,CAAI,MAAA,CAAO,QAAA,CAAS,aAAa,CAAA;AAAA,QAChD,UAAA,EAAY,GAAA,CAAI,MAAA,CAAO,QAAA,CAAS,UAAU,CAAA;AAAA,QAC1C,OAAA,EAAS,CAAC,KAAA,KAA0B,GAAA,CAAI,OAAO,QAAA,CAAS,EAAE,SAAA,EAAW,KAAA,EAAO,CAAA;AAAA,QAC5E,eAAA,EAAiB,CAAC,KAAA,KAA8B,GAAA,CAAI,MAAA,CAAO,SAAS,eAAA,EAAiB,EAAE,aAAA,EAAe,KAAA,EAAO,CAAA;AAAA,QAC7G,aAAa,CAAC,KAAA,KACZ,KAAA,GAAQ,GAAA,CAAI,OAAO,QAAA,CAAS,SAAA,EAAW,EAAE,KAAA,EAAO,OAAO,CAAA,GAAI,GAAA,CAAI,MAAA,CAAO,SAAS,WAAW,CAAA;AAAA,QAC5F,OAAA,EAAS,MAAA,CAAO,IAAA,EAAK,CAAE,GAAA,EAAI;AAAA,QAC3B,OAAA,EAAS,MAAA,CAAO,IAAA,EAAK,CAAE,GAAA;AAAI,OAC7B;AAAA,IACF;AAAA,GACD,CAAA;AACH;AChBO,SAAS,QAAQ,EAAE,MAAA,EAAQ,SAAS,UAAA,EAAY,kBAAA,EAAoB,QAAO,EAAuB;AACvG,EAAA,MAAM,KAAA,GAAQ,gBAAgB,MAAM,CAAA;AACpC,EAAA,MAAM,MAAM,CAAC,IAAA,KAAiB,OAAA,CAAQ,KAAA,CAAM,IAAI,IAAW,CAAA;AAC3D,EAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,KAAA,GAAQ,KAAA,EAAM;AAEzC,EAAA,MAAM,aAAA,GAAgB,CAAA,GAAI,KAAA,KAAoB,KAAA,CAAM,KAAK,GAAG,CAAA;AAE5D,EAAA,uBACEP,IAAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAW,aAAA,CAAc,QAAQ,IAAA,EAE3C,QAAA,EAAA;AAAA,IAAA,GAAA,CAAI,SAAS,CAAA,oBACZA,IAAAA,CAAAI,UAAA,EACE,QAAA,EAAA;AAAA,sBAAAL,IAAC,YAAA,EAAA,EAAa,MAAA,EAAgB,MAAA,EAAgB,QAAA,EAAU,MAAM,WAAA,EAAa,CAAA;AAAA,sBAC3EA,IAAC,cAAA,EAAA,EAAe;AAAA,KAAA,EAClB,CAAA;AAAA,IAID,aAAA,CAAc,MAAA,EAAQ,QAAA,EAAU,WAAA,EAAa,QAAA,EAAU,MAAM,CAAA,oBAC5DC,IAAAA,CAAAI,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAJ,KAAC,YAAA,EAAA,EACE,QAAA,EAAA;AAAA,QAAA,GAAA,CAAI,MAAM,qBACTD,GAAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACC,cAAY,MAAA,CAAO,IAAA;AAAA,YACnB,QAAQ,KAAA,CAAM,MAAA;AAAA,YACd,SAAA,EAAW,cAAc,OAAA,CAAQ,IAAA;AAAA,YACjC,SAAS,MAAM,KAAA,EAAM,CAAE,UAAA,GAAa,GAAA,EAAI;AAAA,YACxC,IAAA,kBAAMA,GAAAA,CAAC,QAAA,EAAA,EAAS;AAAA;AAAA,SAClB;AAAA,QAED,GAAA,CAAI,QAAQ,CAAA,oBACXA,GAAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACC,cAAY,MAAA,CAAO,MAAA;AAAA,YACnB,QAAQ,KAAA,CAAM,QAAA;AAAA,YACd,SAAA,EAAW,cAAc,OAAA,CAAQ,MAAA;AAAA,YACjC,SAAS,MAAM,KAAA,EAAM,CAAE,YAAA,GAAe,GAAA,EAAI;AAAA,YAC1C,IAAA,kBAAMA,GAAAA,CAAC,UAAA,EAAA,EAAW;AAAA;AAAA,SACpB;AAAA,QAED,GAAA,CAAI,WAAW,CAAA,oBACdA,GAAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACC,cAAY,MAAA,CAAO,SAAA;AAAA,YACnB,QAAQ,KAAA,CAAM,WAAA;AAAA,YACd,SAAA,EAAW,cAAc,OAAA,CAAQ,SAAA;AAAA,YACjC,SAAS,MAAM,KAAA,EAAM,CAAE,eAAA,GAAkB,GAAA,EAAI;AAAA,YAC7C,IAAA,kBAAMA,GAAAA,CAAC,aAAA,EAAA,EAAc;AAAA;AAAA,SACvB;AAAA,QAED,GAAA,CAAI,QAAQ,CAAA,oBACXA,GAAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACC,cAAY,MAAA,CAAO,MAAA;AAAA,YACnB,QAAQ,KAAA,CAAM,QAAA;AAAA,YACd,SAAA,EAAW,cAAc,OAAA,CAAQ,MAAA;AAAA,YACjC,SAAS,MAAM,KAAA,EAAM,CAAE,YAAA,GAAe,GAAA,EAAI;AAAA,YAC1C,IAAA,kBAAMA,GAAAA,CAAC,UAAA,EAAA,EAAW;AAAA;AAAA,SACpB;AAAA,QAED,GAAA,CAAI,MAAM,CAAA,oBACTA,GAAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACC,cAAY,MAAA,CAAO,UAAA;AAAA,YACnB,QAAQ,KAAA,CAAM,MAAA;AAAA,YACd,SAAA,EAAW,cAAc,OAAA,CAAQ,IAAA;AAAA,YACjC,SAAS,MAAM,KAAA,EAAM,CAAE,UAAA,GAAa,GAAA,EAAI;AAAA,YACxC,IAAA,kBAAMA,GAAAA,CAAC,cAAA,EAAA,EAAe;AAAA;AAAA;AACxB,OAAA,EAEJ,CAAA;AAAA,sBACAA,IAAC,cAAA,EAAA,EAAe;AAAA,KAAA,EAClB,CAAA;AAAA,IAID,aAAA,CAAc,cAAc,aAAA,EAAe,UAAU,qBACpDC,IAAAA,CAAAI,UAAA,EACE,QAAA,EAAA;AAAA,sBAAAJ,KAAC,YAAA,EAAA,EACE,QAAA,EAAA;AAAA,QAAA,GAAA,CAAI,YAAY,qBACfD,GAAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACC,cAAY,MAAA,CAAO,UAAA;AAAA,YACnB,QAAQ,KAAA,CAAM,YAAA;AAAA,YACd,SAAA,EAAW,cAAc,OAAA,CAAQ,UAAA;AAAA,YACjC,SAAS,MAAM,KAAA,EAAM,CAAE,gBAAA,GAAmB,GAAA,EAAI;AAAA,YAC9C,IAAA,kBAAMA,GAAAA,CAAC,cAAA,EAAA,EAAe;AAAA;AAAA,SACxB;AAAA,QAED,GAAA,CAAI,aAAa,CAAA,oBAChBA,GAAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACC,cAAY,MAAA,CAAO,WAAA;AAAA,YACnB,QAAQ,KAAA,CAAM,aAAA;AAAA,YACd,SAAA,EAAW,cAAc,OAAA,CAAQ,WAAA;AAAA,YACjC,SAAS,MAAM,KAAA,EAAM,CAAE,iBAAA,GAAoB,GAAA,EAAI;AAAA,YAC/C,IAAA,kBAAMA,GAAAA,CAAC,eAAA,EAAA,EAAgB;AAAA;AAAA,SACzB;AAAA,QAED,GAAA,CAAI,UAAU,CAAA,oBACbA,GAAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACC,cAAY,MAAA,CAAO,QAAA;AAAA,YACnB,QAAQ,KAAA,CAAM,UAAA;AAAA,YACd,SAAA,EAAW,cAAc,OAAA,CAAQ,QAAA;AAAA,YACjC,SAAS,MAAM,KAAA,EAAM,CAAE,cAAA,GAAiB,GAAA,EAAI;AAAA,YAC5C,IAAA,kBAAMA,GAAAA,CAAC,aAAA,EAAA,EAAc;AAAA;AAAA;AACvB,OAAA,EAEJ,CAAA;AAAA,sBACAA,IAAC,cAAA,EAAA,EAAe;AAAA,KAAA,EAClB,CAAA;AAAA,IAID,aAAA,CAAc,aAAa,aAAA,EAAe,YAAA,EAAc,cAAc,CAAA,oBACrEC,IAAAA,CAAAI,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAAJ,KAAC,YAAA,EAAA,EACE,QAAA,EAAA;AAAA,QAAA,GAAA,CAAI,WAAW,qBACdD,GAAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACC,cAAY,MAAA,CAAO,SAAA;AAAA,YACnB,MAAA,EAAQ,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA;AAAA,YAC5B,SAAA,EAAW,cAAc,OAAA,CAAQ,SAAA;AAAA,YACjC,SAAS,MAAM,KAAA,GAAQ,YAAA,CAAa,MAAM,EAAE,GAAA,EAAI;AAAA,YAChD,IAAA,kBAAMA,GAAAA,CAAC,aAAA,EAAA,EAAc;AAAA;AAAA,SACvB;AAAA,QAED,GAAA,CAAI,aAAa,CAAA,oBAChBA,GAAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACC,cAAY,MAAA,CAAO,WAAA;AAAA,YACnB,MAAA,EAAQ,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA;AAAA,YAC9B,SAAA,EAAW,cAAc,OAAA,CAAQ,WAAA;AAAA,YACjC,SAAS,MAAM,KAAA,GAAQ,YAAA,CAAa,QAAQ,EAAE,GAAA,EAAI;AAAA,YAClD,IAAA,kBAAMA,GAAAA,CAAC,eAAA,EAAA,EAAgB;AAAA;AAAA,SACzB;AAAA,QAED,GAAA,CAAI,YAAY,CAAA,oBACfA,GAAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACC,cAAY,MAAA,CAAO,UAAA;AAAA,YACnB,MAAA,EAAQ,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA;AAAA,YAC7B,SAAA,EAAW,cAAc,OAAA,CAAQ,UAAA;AAAA,YACjC,SAAS,MAAM,KAAA,GAAQ,YAAA,CAAa,OAAO,EAAE,GAAA,EAAI;AAAA,YACjD,IAAA,kBAAMA,GAAAA,CAAC,cAAA,EAAA,EAAe;AAAA;AAAA,SACxB;AAAA,QAED,GAAA,CAAI,cAAc,CAAA,oBACjBA,GAAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACC,cAAY,MAAA,CAAO,YAAA;AAAA,YACnB,MAAA,EAAQ,KAAA,CAAM,OAAA,CAAQ,SAAS,CAAA;AAAA,YAC/B,SAAA,EAAW,cAAc,OAAA,CAAQ,YAAA;AAAA,YACjC,SAAS,MAAM,KAAA,GAAQ,YAAA,CAAa,SAAS,EAAE,GAAA,EAAI;AAAA,YACnD,IAAA,kBAAMA,GAAAA,CAAC,gBAAA,EAAA,EAAiB;AAAA;AAAA;AAC1B,OAAA,EAEJ,CAAA;AAAA,sBACAA,IAAC,cAAA,EAAA,EAAe;AAAA,KAAA,EAClB,CAAA;AAAA,IAID,aAAA,CAAc,cAAc,WAAA,EAAa,gBAAgB,qBACxDC,IAAAA,CAAAI,UAAA,EACE,QAAA,EAAA;AAAA,sBAAAJ,KAAC,YAAA,EAAA,EACE,QAAA,EAAA;AAAA,QAAA,GAAA,CAAI,YAAY,qBACfD,GAAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACC,cAAY,MAAA,CAAO,UAAA;AAAA,YACnB,QAAQ,KAAA,CAAM,YAAA;AAAA,YACd,SAAA,EAAW,cAAc,OAAA,CAAQ,UAAA;AAAA,YACjC,SAAS,MAAM,KAAA,EAAM,CAAE,gBAAA,GAAmB,GAAA,EAAI;AAAA,YAC9C,IAAA,kBAAMA,GAAAA,CAAC,SAAA,EAAA,EAAU;AAAA;AAAA,SACnB;AAAA,QAED,GAAA,CAAI,WAAW,CAAA,oBACdA,GAAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACC,cAAY,MAAA,CAAO,SAAA;AAAA,YACnB,QAAQ,KAAA,CAAM,WAAA;AAAA,YACd,SAAA,EAAW,cAAc,OAAA,CAAQ,SAAA;AAAA,YACjC,SAAS,MAAM,KAAA,EAAM,CAAE,eAAA,GAAkB,GAAA,EAAI;AAAA,YAC7C,IAAA,kBAAMA,GAAAA,CAAC,aAAA,EAAA,EAAc;AAAA;AAAA,SACvB;AAAA,QAED,GAAA,CAAI,gBAAgB,CAAA,oBACnBA,GAAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACC,cAAY,MAAA,CAAO,cAAA;AAAA,YACnB,SAAA,EAAW,cAAc,OAAA,CAAQ,EAAA;AAAA,YACjC,SAAS,MAAM,KAAA,EAAM,CAAE,iBAAA,GAAoB,GAAA,EAAI;AAAA,YAC/C,IAAA,kBAAMA,GAAAA,CAAC,kBAAA,EAAA,EAAmB;AAAA;AAAA;AAC5B,OAAA,EAEJ,CAAA;AAAA,sBACAA,IAAC,cAAA,EAAA,EAAe;AAAA,KAAA,EAClB,CAAA;AAAA,IAID,cAAc,MAAA,EAAQ,OAAO,qBAC5BC,IAAAA,CAAAI,UAAA,EACE,QAAA,EAAA;AAAA,sBAAAJ,KAAC,YAAA,EAAA,EACE,QAAA,EAAA;AAAA,QAAA,GAAA,CAAI,MAAM,CAAA,oBACTD,IAAC,SAAA,EAAA,EAAU,MAAA,EAAgB,QAAgB,MAAA,EAAQ,KAAA,CAAM,QAAQ,QAAA,kBAAUA,IAAC,QAAA,EAAA,EAAS,CAAA,EAAI,4BAAYA,GAAAA,CAAC,cAAW,CAAA,EAAI,CAAA;AAAA,QAEtH,GAAA,CAAI,OAAO,CAAA,oBAAKA,GAAAA,CAAC,UAAA,EAAA,EAAW,MAAA,EAAgB,MAAA,EAAgB,IAAA,kBAAMA,GAAAA,CAAC,SAAA,EAAA,EAAU,CAAA,EAAI;AAAA,OAAA,EACpF,CAAA;AAAA,sBACAA,IAAC,cAAA,EAAA,EAAe;AAAA,KAAA,EAClB,CAAA;AAAA,IAID,cAAc,WAAA,EAAa,aAAa,qBACvCC,IAAAA,CAAAI,UAAA,EACE,QAAA,EAAA;AAAA,sBAAAJ,KAAC,YAAA,EAAA,EACE,QAAA,EAAA;AAAA,QAAA,GAAA,CAAI,WAAW,qBACdD,GAAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACC,cAAY,MAAA,CAAO,SAAA;AAAA,YACnB,SAAA,EAAW,cAAc,OAAA,CAAQ,SAAA;AAAA,YACjC,SAAS,MAAM,KAAA,EAAM,CAAE,YAAA,GAAe,GAAA,EAAI;AAAA,YAC1C,IAAA,kBAAMA,GAAAA,CAAC,aAAA,EAAA,EAAc;AAAA;AAAA,SACvB;AAAA,QAED,GAAA,CAAI,aAAa,CAAA,oBAChBA,GAAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACC,cAAY,MAAA,CAAO,WAAA;AAAA,YACnB,SAAA,EAAW,cAAc,OAAA,CAAQ,KAAA;AAAA,YACjC,OAAA,EAAS,MAAM,KAAA,EAAM,CAAE,YAAW,CAAE,aAAA,GAAgB,GAAA,EAAI;AAAA,YACxD,IAAA,kBAAMA,GAAAA,CAAC,cAAA,EAAA,EAAe;AAAA;AAAA;AACxB,OAAA,EAEJ,CAAA;AAAA,sBACAA,IAAC,cAAA,EAAA,EAAe;AAAA,KAAA,EAClB,CAAA;AAAA,IAID,cAAc,MAAA,EAAQ,MAAM,qBAC3BC,IAAAA,CAAAI,UAAA,EACE,QAAA,EAAA;AAAA,sBAAAJ,KAAC,YAAA,EAAA,EACE,QAAA,EAAA;AAAA,QAAA,GAAA,CAAI,MAAM,qBACTD,GAAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACC,cAAY,MAAA,CAAO,IAAA;AAAA,YACnB,QAAA,EAAU,CAAC,KAAA,CAAM,OAAA;AAAA,YACjB,SAAA,EAAW,cAAc,OAAA,CAAQ,IAAA;AAAA,YACjC,SAAS,MAAM,KAAA,EAAM,CAAE,IAAA,GAAO,GAAA,EAAI;AAAA,YAClC,IAAA,kBAAMA,GAAAA,CAAC,QAAA,EAAA,EAAS;AAAA;AAAA,SAClB;AAAA,QAED,GAAA,CAAI,MAAM,CAAA,oBACTA,GAAAA;AAAA,UAAC,WAAA;AAAA,UAAA;AAAA,YACC,cAAY,MAAA,CAAO,IAAA;AAAA,YACnB,QAAA,EAAU,CAAC,KAAA,CAAM,OAAA;AAAA,YACjB,SAAA,EAAW,cAAc,OAAA,CAAQ,IAAA;AAAA,YACjC,SAAS,MAAM,KAAA,EAAM,CAAE,IAAA,GAAO,GAAA,EAAI;AAAA,YAClC,IAAA,kBAAMA,GAAAA,CAAC,QAAA,EAAA,EAAS;AAAA;AAAA;AAClB,OAAA,EAEJ,CAAA;AAAA,sBACAA,IAAC,cAAA,EAAA,EAAe;AAAA,KAAA,EAClB,CAAA;AAAA,IAID,IAAI,YAAY,CAAA,oBACfA,GAAAA,CAAC,gBACC,QAAA,kBAAAA,GAAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,YAAA,EAAY,UAAA,GAAa,MAAA,CAAO,cAAA,GAAiB,MAAA,CAAO,UAAA;AAAA,QACxD,MAAA,EAAQ,UAAA;AAAA,QACR,SAAA,EAAW,cAAc,OAAA,CAAQ,UAAA;AAAA,QACjC,OAAA,EAAS,kBAAA;AAAA,QACT,IAAA,EAAM,6BAAaA,GAAAA,CAAC,sBAAmB,CAAA,mBAAKA,IAAC,cAAA,EAAA,EAAe;AAAA;AAAA,KAC9D,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAMA,IAAM,cAAcD,MAAAA,CAAO,KAAK,EAAE,CAAC,EAAE,OAAM,MAAO;AAAA,EAChD,QAAA,EAAU,MAAA;AAAA,EACV,OAAA,EAAS,MAAA;AAAA,EACT,aAAA,EAAe,KAAA;AAAA,EACf,UAAA,EAAY,QAAA;AAAA,EACZ,GAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,EACpB,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,IAAI,CAAA;AAAA,EAC3B,mBAAA,EAAqB,SAAA;AAAA,EACrB,oBAAA,EAAsB,SAAA;AAAA,EACtB,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW,KAAA;AAAA,EAC1C,YAAA,EAAc,aAAaU,KAAAA,CAAM,KAAA,CAAM,QAAQ,IAAA,CAAK,GAAG,CAAA,EAAG,GAAG,CAAC,CAAA;AAChE,CAAA,CAAE,CAAA;AAEF,IAAM,eAAeV,MAAAA,CAAO,KAAK,EAAE,CAAC,EAAE,OAAM,MAAO;AAAA,EACjD,OAAA,EAAS,MAAA;AAAA,EACT,UAAA,EAAY,QAAA;AAAA,EACZ,GAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,GAAG;AACxB,CAAA,CAAE,CAAA;AAEF,SAAS,cAAA,GAAiB;AACxB,EAAA,uBAAOC,GAAAA,CAAC,OAAA,EAAA,EAAQ,WAAA,EAAY,UAAA,EAAW,QAAA,EAAQ,IAAA,EAAC,EAAA,EAAI,EAAE,MAAA,EAAQ,EAAA,EAAI,EAAA,EAAI,QAAO,EAAG,CAAA;AAClF;ACjTO,SAAS,aAAA,CAAc,EAAE,MAAA,EAAQ,MAAA,EAAO,EAAuB;AACpE,EAAA,MAAM,KAAA,GAAQ,gBAAgB,MAAM,CAAA;AACpC,EAAA,MAAM,KAAA,GAAQ,MAAM,MAAA,CAAO,KAAA,GAAQ,KAAA,EAAM;AAEzC,EAAA,uBACEA,GAAAA,CAAC,UAAA,EAAA,EAAW,MAAA,EACV,QAAA,kBAAAC,KAAC,UAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAD,GAAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,cAAY,MAAA,CAAO,IAAA;AAAA,QACnB,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,SAAA,EAAW,cAAc,OAAA,CAAQ,IAAA;AAAA,QACjC,SAAS,MAAM,KAAA,EAAM,CAAE,UAAA,GAAa,GAAA,EAAI;AAAA,QACxC,IAAA,kBAAMA,GAAAA,CAAC,QAAA,EAAA,EAAS;AAAA;AAAA,KAClB;AAAA,oBACAA,GAAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,cAAY,MAAA,CAAO,MAAA;AAAA,QACnB,QAAQ,KAAA,CAAM,QAAA;AAAA,QACd,SAAA,EAAW,cAAc,OAAA,CAAQ,MAAA;AAAA,QACjC,SAAS,MAAM,KAAA,EAAM,CAAE,YAAA,GAAe,GAAA,EAAI;AAAA,QAC1C,IAAA,kBAAMA,GAAAA,CAAC,UAAA,EAAA,EAAW;AAAA;AAAA,KACpB;AAAA,oBACAA,GAAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,cAAY,MAAA,CAAO,SAAA;AAAA,QACnB,QAAQ,KAAA,CAAM,WAAA;AAAA,QACd,SAAA,EAAW,cAAc,OAAA,CAAQ,SAAA;AAAA,QACjC,SAAS,MAAM,KAAA,EAAM,CAAE,eAAA,GAAkB,GAAA,EAAI;AAAA,QAC7C,IAAA,kBAAMA,GAAAA,CAAC,aAAA,EAAA,EAAc;AAAA;AAAA,KACvB;AAAA,oBACAA,GAAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,cAAY,MAAA,CAAO,MAAA;AAAA,QACnB,QAAQ,KAAA,CAAM,QAAA;AAAA,QACd,SAAA,EAAW,cAAc,OAAA,CAAQ,MAAA;AAAA,QACjC,SAAS,MAAM,KAAA,EAAM,CAAE,YAAA,GAAe,GAAA,EAAI;AAAA,QAC1C,IAAA,kBAAMA,GAAAA,CAAC,UAAA,EAAA,EAAW;AAAA;AAAA,KACpB;AAAA,oBACAA,GAAAA,CAAC,SAAA,EAAA,EAAU,MAAA,EAAgB,MAAA,EAAgB,QAAQ,KAAA,CAAM,MAAA,EAAQ,QAAA,kBAAUA,IAAC,QAAA,EAAA,EAAS,CAAA,EAAI,4BAAYA,GAAAA,CAAC,cAAW,CAAA,EAAI,CAAA;AAAA,oBACrHA,GAAAA,CAACU,OAAAA,EAAA,EAAQ,aAAY,UAAA,EAAW,QAAA,EAAQ,IAAA,EAAC,EAAA,EAAI,EAAE,MAAA,EAAQ,EAAA,EAAI,EAAA,EAAI,QAAO,EAAG,CAAA;AAAA,oBACzEV,GAAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,cAAY,MAAA,CAAO,WAAA;AAAA,QACnB,SAAA,EAAW,cAAc,OAAA,CAAQ,KAAA;AAAA,QACjC,OAAA,EAAS,MAAM,KAAA,EAAM,CAAE,YAAW,CAAE,aAAA,GAAgB,GAAA,EAAI;AAAA,QACxD,IAAA,kBAAMA,GAAAA,CAAC,cAAA,EAAA,EAAe;AAAA;AAAA;AACxB,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AAEA,IAAM,aAAaD,MAAAA,CAAO,KAAK,EAAE,CAAC,EAAE,OAAM,MAAO;AAAA,EAC/C,OAAA,EAAS,MAAA;AAAA,EACT,GAAA,EAAK,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA;AAAA,EACtB,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA;AAAA,EAC1B,YAAA,EAAc,MAAM,KAAA,CAAM,YAAA;AAAA,EAC1B,SAAA,EAAW,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,EAC1B,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW,KAAA;AAAA,EAC1C,MAAA,EAAQ,aAAaU,KAAAA,CAAM,KAAA,CAAM,QAAQ,IAAA,CAAK,GAAG,CAAA,EAAG,IAAI,CAAC,CAAA;AAC3D,CAAA,CAAE,CAAA;AC1EK,SAAS,mBAAmB,KAAA,EAA2B;AAC5D,EAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAW,gBAAA,EAAiB,GAAI,KAAA;AAC9C,EAAA,MAAM,QAAA,GAAW,KAAK,KAAA,CAAM,QAAA;AAC5B,EAAA,MAAM,QAAA,GAAW,UAAU,OAAA,CAAQ,QAAA;AAKnC,EAAA,MAAM,SAAA,GAAoB,SAAA,CAAU,OAAA,CAAQ,iBAAA,IAAqB,qBAAA,CAAsB,gBAAA;AAEvF,EAAA,MAAM,oBAAA,GAAuBL,WAAAA;AAAA,IAC3B,CAAC,KAAA,KAAgD;AAC/C,MAAA,gBAAA,CAAiB,EAAE,QAAA,EAAU,KAAA,CAAM,MAAA,CAAO,OAAO,CAAA;AAAA,IACnD,CAAA;AAAA,IACA,CAAC,gBAAgB;AAAA,GACnB;AAEA,EAAA,uBACEH,IAAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EAAW,aAAA,CAAc,QAAQ,SAAA,EAChD,QAAA,EAAA;AAAA,oBAAAA,IAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,UAAA;AAAA,QACL,eAAA,EAAiB,KAAA;AAAA,QACjB,OAAO,QAAA,IAAY,MAAA;AAAA,QACnB,QAAA,EAAU,oBAAA;AAAA,QACV,SAAA,EAAW,cAAc,OAAA,CAAQ,UAAA;AAAA,QAEjC,QAAA,EAAA;AAAA,0BAAAD,GAAAA,CAAC,QAAA,EAAA,EAAO,KAAA,EAAM,MAAA,EAAQ,QAAA,EAAA,SAAA,EAAU,CAAA;AAAA,0BAChCA,GAAAA,CAAC,QAAA,EAAA,EAAO,QAAA,EAAQ,MAAC,QAAA,EAAA,QAAA,EAAC,CAAA;AAAA,UACjB,QAAA,CAAS,aAAA,EAAc,CAAE,GAAA,CAAI,CAAC,IAAA,qBAC7BA,GAAAA,CAAC,QAAA,EAAA,EAAkB,KAAA,EAAO,IAAA,EACvB,QAAA,EAAA,IAAA,EAAA,EADU,IAEb,CACD;AAAA;AAAA;AAAA,KACH;AAAA,oBACAA,IAAC,KAAA,EAAA,EACC,QAAA,kBAAAA,IAAC,eAAA,EAAA,EAAwB,EAAA,EAAG,QAAO,CAAA,EACrC;AAAA,GAAA,EACF,CAAA;AAEJ;AC7CO,IAAM,WAAA,GAAc,UAAU,MAAA,CAAO;AAAA,EAC1C,IAAA,EAAM,aAAA;AAAA,EACN,oBAAA,GAAuB;AACrB,IAAA,OAAO;AAAA,MACL,aAAA,EAAe,CAAC,EAAE,MAAA,OAAa,MAAA,CAAO,KAAA,EAAM,CAAE,KAAA,EAAM,CAAE,UAAA,EAAW,CAAE,aAAA,GAAgB,GAAA;AAAI,KACzF;AAAA,EACF;AACF,CAAC;ACgBD,IAAM,aAAA,GAAgB,CAAC,IAAA,KAAuC,IAAA,YAAgB,WAAA;AAE9E,IAAM,oBAAA,GAAuB,CAAC,KAAA,EAAgB,OAAA,KAC5C,OAAO,KAAA,KAAU,QAAA,IAAY,OAAA,CAAQ,QAAA,CAAS,KAA2B,CAAA;AAEpE,IAAM,aAAA,GAAgB,KAAK,MAAA,CAAsD;AAAA,EACtF,IAAA,EAAM,eAAA;AAAA,EAEN,UAAA,GAAa;AACX,IAAA,OAAO;AAAA,MACL,aAAA,EAAe,CAAC,WAAA,EAAa,WAAA,EAAa,YAAY,CAAA;AAAA,MACtD,YAAA,EAAc;AAAA,KAChB;AAAA,EACF,CAAA;AAAA,EAEA,aAAA,GAAgB;AACd,IAAA,OAAO;AAAA,MACL,aAAA,EAAe;AAAA,QACb,OAAA,EAAS,KAAK,OAAA,CAAQ,YAAA;AAAA,QACtB,SAAA,EAAW,CAAC,OAAA,KAA4C;AACtD,UAAA,IAAI,CAAC,aAAA,CAAc,OAAO,CAAA,EAAG,OAAO,MAAA;AACpC,UAAA,MAAM,QAAA,GACJ,OAAA,CAAQ,KAAA,CAAM,aAAA,IAAiB,OAAA,CAAQ,YAAA,CAAa,OAAO,CAAA,EAAG,KAAA,CAAM,yBAAyB,CAAA,GAAI,CAAC,CAAA;AACpG,UAAA,OAAO,qBAAqB,QAAA,EAAU,IAAA,CAAK,OAAA,CAAQ,aAAa,IAAI,QAAA,GAAW,MAAA;AAAA,QACjF,CAAA;AAAA,QACA,UAAA,EAAY,CAAC,UAAA,KAAgE;AAC3E,UAAA,IAAI,CAAC,UAAA,CAAW,aAAA,EAAe,OAAO,EAAC;AACvC,UAAA,OAAO,EAAE,KAAA,EAAO,CAAA,gBAAA,EAAmB,UAAA,CAAW,aAAa,CAAA,CAAA,EAAG;AAAA,QAChE;AAAA;AACF,KACF;AAAA,EACF,CAAA;AAAA,EAEA,SAAA,GAAY;AACV,IAAA,OAAO;AAAA,MACL;AAAA,QACE,GAAA,EAAK,aAAA;AAAA,QACL,QAAA,EAAU,CAAC,IAAA,KAAS;AAClB,UAAA,IAAI,CAAC,aAAA,CAAc,IAAI,CAAA,EAAG,OAAO,IAAA;AACjC,UAAA,MAAM,UAAA,GAAa,KAAK,KAAA,CAAM,aAAA;AAC9B,UAAA,OAAO,qBAAqB,UAAA,EAAY,IAAA,CAAK,QAAQ,aAAa,CAAA,GAAI,EAAC,GAAI,KAAA;AAAA,QAC7E;AAAA;AACF,KACF;AAAA,EACF,CAAA;AAAA,EAEA,UAAA,CAAW,EAAE,cAAA,EAAe,EAAG;AAC7B,IAAA,OAAO,CAAC,MAAA,EAAQ,cAAA,EAAgB,CAAC,CAAA;AAAA,EACnC,CAAA;AAAA,EAEA,WAAA,GAAc;AACZ,IAAA,OAAO;AAAA,MACL,kBACE,CAAC,KAAA,KACD,CAAC,EAAE,UAAS,KAA6B;AACvC,QAAA,IAAI,CAAC,oBAAA,CAAqB,KAAA,EAAO,KAAK,OAAA,CAAQ,aAAa,GAAG,OAAO,KAAA;AACrE,QAAA,OAAO,SAAS,OAAA,CAAQ,IAAA,CAAK,MAAM,EAAE,aAAA,EAAe,OAAO,CAAA;AAAA,MAC7D,CAAA;AAAA,MACF,kBAAA,EACE,MACA,CAAC,EAAE,UAAS,KACV,QAAA,CAAS,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA;AAAA,MAChC,qBACE,CAAC,KAAA,KACD,CAAC,EAAE,MAAA,EAAQ,UAAS,KAA6B;AAC/C,QAAA,IAAI,CAAC,oBAAA,CAAqB,KAAA,EAAO,KAAK,OAAA,CAAQ,aAAa,GAAG,OAAO,KAAA;AACrE,QAAA,MAAM,QAAA,GAAW,OAAO,QAAA,CAAS,IAAA,CAAK,MAAM,EAAE,aAAA,EAAe,OAAO,CAAA;AACpE,QAAA,OAAO,WAAW,QAAA,CAAS,kBAAA,EAAmB,GAAI,QAAA,CAAS,iBAAiB,KAAK,CAAA;AAAA,MACnF;AAAA,KACJ;AAAA,EACF;AACF,CAAC;ACtDM,SAAS,MAAA,CAAO;AAAA,EACrB,EAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,OAAA,EAAS,aAAA;AAAA,EACT,UAAA,EAAY,cAAA;AAAA,EACZ,MAAA,GAAS,MAAA;AAAA,EACT,SAAA,GAAY,GAAA;AAAA,EACZ,SAAA;AAAA,EACA,QAAA,GAAW,IAAA;AAAA,EACX,eAAA;AAAA,EACA,WAAA,GAAc,oBAAA;AAAA,EACd,MAAA,EAAQ,cAAA;AAAA,EACR,GAAA,EAAK,UAAA;AAAA,EACL,OAAO,cAAA,GAAiB,EAAA;AAAA,EACxB,GAAG;AACL,CAAA,EAAgB;AACd,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIG,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,SAAS,CAAC,CAAA;AAEhD,EAAA,MAAM,eAAA,GAAkB,QAAQ,MAAM,cAAA,CAAe,aAAa,CAAA,EAAG,CAAC,aAAa,CAAC,CAAA;AACpF,EAAA,MAAM,cAAA,GAAiB,kBAAkB,eAAA,CAAgB,UAAA;AACzD,EAAA,MAAM,WAAA,GAAc,eAAA,CAAgB,KAAA,CAAM,IAAA,GAAO,CAAA;AAEjD,EAAA,MAAM,WAAW,OAAA,CAAQ,MAAM,eAAe,MAAM,CAAA,EAAG,EAAE,CAAA;AAGzD,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,OAAO,EAAE,GAAG,qBAAA,EAAuB,GAAG,cAAA,EAAe,CAAA,EAAI,CAAC,cAAc,CAAC,CAAA;AAGhG,EAAA,MAAM,aAAA,GAAgB,QAAQ,MAAM;AAClC,IAAA,IAAI,CAAC,gBAAgB,OAAO,EAAA;AAC5B,IAAA,IAAI,MAAA,KAAW,MAAA,IAAU,cAAA,CAAe,UAAA,CAAW,GAAG,CAAA,EAAG;AACvD,MAAA,IAAI;AACF,QAAA,OAAO,IAAA,CAAK,MAAM,cAAc,CAAA;AAAA,MAClC,CAAA,CAAA,MAAQ;AACN,QAAA,OAAO,cAAA;AAAA,MACT;AAAA,IACF;AACA,IAAA,OAAO,cAAA;AAAA,EACT,CAAA,EAAG,CAAC,cAAA,EAAgB,MAAM,CAAC,CAAA;AAI3B,EAAA,MAAM,UAAA,GAAaC,WAAAA;AAAA,IACjB,CAACO,OAAAA,KAA0C;AACzC,MAAA,QAAA,GAAW,MAAA,KAAW,MAAA,GAAS,IAAA,CAAK,SAAA,CAAUA,OAAAA,CAAO,SAAS,CAAA,GAAIA,OAAAA,CAAO,OAAA,EAAS,CAAA;AAAA,IACpF,CAAA;AAAA,IACA,CAAC,UAAU,MAAM;AAAA,GACnB;AAEA,EAAA,MAAM,UAAA,GAAa,QAAQ,MAAM;AAC/B,IAAA,MAAM,MAAM,CAAC,IAAA,KAAiB,eAAA,CAAgB,KAAA,CAAM,IAAI,IAAW,CAAA;AACnE,IAAA,MAAM,IAAA,GAAc;AAAA,MAClB,oBAAoB,SAAA,CAAU;AAAA,QAC5B,SAAA,EAAW,KAAA;AAAA;AAAA,QAEX,SAAA,EAAW,KAAA;AAAA,QACX,IAAA,EAAM,KAAA;AAAA,QACN,IAAA,EAAM,GAAA,CAAI,MAAM,CAAA,GAAI,EAAE,cAAA,EAAgB,EAAE,KAAA,EAAO,aAAA,CAAc,OAAA,CAAQ,UAAA,EAAW,EAAE,GAAI,KAAA;AAAA,QACtF,OAAA,EAAS,GAAA,CAAI,SAAS,CAAA,GAAI,EAAE,cAAA,EAAgB,EAAE,KAAA,EAAO,aAAA,CAAc,OAAA,CAAQ,OAAA,EAAQ,EAAE,GAAI,KAAA;AAAA,QACzF,cAAA,EAAgB,GAAA,CAAI,gBAAgB,CAAA,GAAI,EAAE,cAAA,EAAgB,EAAE,KAAA,EAAO,aAAA,CAAc,OAAA,CAAQ,EAAA,EAAG,EAAE,GAAI,KAAA;AAAA,QAClG,QAAA,EAAU,EAAE,cAAA,EAAgB,EAAE,OAAO,aAAA,CAAc,OAAA,CAAQ,UAAS,EAAE;AAAA,QACtE,UAAA,EAAY,GAAA,CAAI,YAAY,CAAA,GAAI,EAAE,cAAA,EAAgB,EAAE,KAAA,EAAO,aAAA,CAAc,OAAA,CAAQ,UAAA,EAAW,EAAE,GAAI,KAAA;AAAA,QAClG,UAAA,EAAY,GAAA,CAAI,YAAY,CAAA,GAAI,EAAE,cAAA,EAAgB,EAAE,KAAA,EAAO,aAAA,CAAc,OAAA,CAAQ,UAAA,EAAW,EAAE,GAAI,KAAA;AAAA,QAClG,WAAA,EAAa,GAAA,CAAI,aAAa,CAAA,GAAI,EAAE,cAAA,EAAgB,EAAE,KAAA,EAAO,aAAA,CAAc,OAAA,CAAQ,WAAA,EAAY,EAAE,GAAI;AAAA,OACtG,CAAA;AAAA,MACD,qBAAqB,SAAA,CAAU;AAAA,QAC7B,WAAA;AAAA,QACA,gBAAA,EAAkB,cAAc,OAAA,CAAQ;AAAA,OACzC,CAAA;AAAA,MACD,WAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,IAAI,GAAA,CAAI,WAAW,CAAA,EAAG;AACpB,MAAA,IAAA,CAAK,KAAK,kBAAkB,CAAA;AAAA,IAC9B;AAEA,IAAA,IAAI,GAAA,CAAI,WAAW,CAAA,IAAK,GAAA,CAAI,aAAa,CAAA,IAAK,GAAA,CAAI,YAAY,CAAA,IAAK,GAAA,CAAI,cAAc,CAAA,EAAG;AACtF,MAAA,IAAA,CAAK,IAAA,CAAK,kBAAA,CAAmB,SAAA,CAAU,EAAE,KAAA,EAAO,CAAC,SAAA,EAAW,WAAW,CAAA,EAAG,CAAC,CAAA;AAAA,IAC7E;AAEA,IAAA,IAAI,GAAA,CAAI,OAAO,CAAA,EAAG;AAChB,MAAA,IAAA,CAAK,IAAA,CAAK,cAAA,CAAe,SAAA,CAAU,EAAE,cAAA,EAAgB,EAAE,KAAA,EAAO,aAAA,CAAc,OAAA,CAAQ,KAAA,EAAM,EAAG,CAAC,CAAA;AAAA,IAChG;AAEA,IAAA,IAAI,GAAA,CAAI,MAAM,CAAA,EAAG;AACf,MAAA,IAAA,CAAK,IAAA;AAAA,QACH,cAAc,SAAA,CAAU;AAAA,UACtB,WAAA,EAAa,KAAA;AAAA,UACb,cAAA,EAAgB,EAAE,KAAA,EAAO,aAAA,CAAc,QAAQ,IAAA;AAAK,SACrD;AAAA,OACH;AAAA,IACF;AAEA,IAAA,IAAI,GAAA,CAAI,WAAW,CAAA,EAAG;AACpB,MAAA,IAAA,CAAK,IAAA;AAAA,QACH,2BAA2B,MAAA,CAAiE;AAAA,UAC1F,UAAA,GAAa;AACX,YAAA,MAAM,SAAA,GAAY,KAAK,MAAA,IAAS;AAChC,YAAA,OAAO,EAAE,GAAG,SAAA,EAAW,iBAAA,EAAmB,sBAAsB,gBAAA,EAAiB;AAAA,UACnF,CAAA;AAAA,UACA,WAAA,EAAa,MAAM,qBAAA,CAAsB,kBAAkB;AAAA,SAC5D,EAAE,SAAA,CAAU,EAAE,UAAU,iBAAA,EAAmB,MAAA,CAAO,kBAAkB;AAAA,OACvE;AAAA,IACF;AAEA,IAAA,IAAI,GAAA,CAAI,UAAU,CAAA,EAAG;AACnB,MAAA,IAAA,CAAK,IAAA;AAAA,QACH,iBAAA,CAAkB,SAAA,CAAU,EAAE,cAAA,EAAgB,EAAE,OAAO,aAAA,CAAc,OAAA,CAAQ,QAAA,EAAS,EAAG,CAAA;AAAA,QACzF,kBAAkB,SAAA,CAAU;AAAA,UAC1B,MAAA,EAAQ,IAAA;AAAA,UACR,cAAA,EAAgB,EAAE,KAAA,EAAO,aAAA,CAAc,QAAQ,QAAA;AAAS,SACzD;AAAA,OACH;AAAA,IACF;AAEA,IAAA,IAAI,eAAA,EAAiB;AACnB,MAAA,IAAA,CAAK,IAAA,CAAK,GAAG,eAAe,CAAA;AAAA,IAC9B;AAEA,IAAA,OAAO,IAAA;AAAA,EAIT,GAAG,CAAC,eAAA,EAAiB,aAAa,QAAA,EAAU,eAAA,EAAiB,MAAM,CAAC,CAAA;AAEpE,EAAA,MAAM,SAAS,SAAA,CAAU;AAAA,IACvB,QAAA;AAAA,IACA,iBAAA,EAAmB,KAAA;AAAA,IACnB,OAAA,EAAS,aAAA;AAAA,IACT,2BAAA,EAA6B,CAAC,CAAC,WAAA;AAAA,IAC/B,QAAA,EAAU,CAAC,GAAA,KAAQ;AACjB,MAAA,UAAA,CAAW,IAAI,MAAM,CAAA;AAAA,IACvB,CAAA;AAAA,IACA,UAAA;AAAA,IACA,GAAG;AAAA,GACJ,CAAA;AAGD,EAAA,MAAM,sBAAA,GAAyBP,YAAY,MAAM;AAC/C,IAAA,MAAA,EAAQ,OAAA,EAAQ;AAChB,IAAA,aAAA,CAAc,CAAC,IAAA,KAAS,CAAC,IAAI,CAAA;AAC7B,IAAA,cAAA,CAAe,CAAC,IAAA,KAAS,IAAA,GAAO,CAAC,CAAA;AAAA,EACnC,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,MAAM,oBAAA,GAAuBA,WAAAA;AAAA,IAC3B,CAAC,KAAA,KAAyB;AACxB,MAAA,IAAI,KAAA,CAAM,QAAQ,QAAA,EAAU;AAC1B,QAAA,MAAA,EAAQ,OAAA,EAAQ;AAChB,QAAA,aAAA,CAAc,KAAK,CAAA;AACnB,QAAA,cAAA,CAAe,CAAC,IAAA,KAAS,IAAA,GAAO,CAAC,CAAA;AAAA,MACnC;AAAA,IACF,CAAA;AAAA,IACA,CAAC,MAAM;AAAA,GACT;AAGA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,KAAA,GAAQ,WAAW,MAAM;AAC7B,MAAA,IAAI,CAAC,MAAA,EAAQ,WAAA,IAAe,QAAQ,OAAA,IAAW,aAAA,IAAiB,kBAAkB,SAAA,EAAW;AAC3F,QAAA,MAAA,EAAQ,QAAA,CAAS,WAAW,aAAa,CAAA;AAAA,MAC3C;AAAA,IACF,GAAG,GAAG,CAAA;AACN,IAAA,OAAO,MAAM,aAAa,KAAK,CAAA;AAAA,EACjC,CAAA,EAAG,CAAC,aAAA,EAAe,MAAM,CAAC,CAAA;AAG1B,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,UAAA,IAAc,CAAC,cAAA,EAAgB;AACjC,MAAA,MAAA,EAAQ,SAAS,YAAA,EAAa;AAAA,IAChC;AAAA,EACF,CAAA,EAAG,CAAC,cAAA,EAAgB,UAAA,EAAY,MAAM,CAAC,CAAA;AAGvC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,YAAY,OAAO,MAAA;AACxB,IAAA,QAAA,CAAS,IAAA,CAAK,MAAM,QAAA,GAAW,QAAA;AAC/B,IAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,oBAAoB,CAAA;AACvD,IAAA,OAAO,MAAM;AACX,MAAA,QAAA,CAAS,IAAA,CAAK,MAAM,QAAA,GAAW,EAAA;AAC/B,MAAA,MAAA,CAAO,mBAAA,CAAoB,WAAW,oBAAoB,CAAA;AAAA,IAC5D,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,UAAA,EAAY,oBAAoB,CAAC,CAAA;AAErC,EAAA,MAAM,aAAA,GAAgB;AAAA,IACpB,aAAA,CAAc,IAAA;AAAA,IACd,SAAA;AAAA,IACA,KAAA,IAAS,cAAc,KAAA,CAAM,KAAA;AAAA,IAC7B,CAAC,QAAA,IAAY,aAAA,CAAc,KAAA,CAAM,QAAA;AAAA,IACjC,UAAA,IAAc,cAAc,KAAA,CAAM;AAAA,GACpC,CACG,MAAA,CAAO,OAAO,CAAA,CACd,KAAK,GAAG,CAAA;AAEX,EAAA,uBACEH,IAAAA,CAAC,MAAA,EAAA,EAAO,aAAA,EAAe,CAAC,UAAA,EACrB,QAAA,EAAA;AAAA,IAAA,UAAA,oBAAcD,GAAAA,CAAC,QAAA,EAAA,EAAS,IAAA,EAAI,MAAC,EAAA,EAAI,CAAC,KAAA,MAAW,EAAE,MAAA,EAAQ,KAAA,CAAM,MAAA,CAAO,KAAA,GAAQ,GAAE,CAAA,EAAI,CAAA;AAAA,oBAEnFC,IAAAA;AAAA,MAACW,GAAAA;AAAA,MAAA;AAAA,QACE,GAAG,SAAA,EAAW,OAAA;AAAA,QACf,EAAA,EAAI;AAAA,UACF,EAAE,OAAA,EAAS,MAAA,EAAQ,aAAA,EAAe,QAAA,EAAS;AAAA,UAC3C,GAAI,KAAA,CAAM,OAAA,CAAQ,SAAA,EAAW,OAAA,EAAS,EAAE,CAAA,GAAI,SAAA,CAAU,OAAA,CAAQ,EAAA,GAAK,CAAC,SAAA,EAAW,SAAS,EAAE;AAAA,SAC5F;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAZ,GAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAW,aAAA,EAAe,EAAA,EAAI,CAAC,EAAE,SAAA,EAAU,EAAG,GAAI,KAAA,CAAM,OAAA,CAAQ,EAAE,IAAI,EAAA,GAAK,CAAC,EAAE,CAAE,CAAA,EACzF,QAAA,EAAA,MAAA,IAAU,CAAC,MAAA,CAAO,WAAA,oBACjBC,IAAAA,CAAAI,QAAAA,EAAA,EACG,QAAA,EAAA;AAAA,YAAA,WAAA,oBACCL,GAAAA;AAAA,cAAC,OAAA;AAAA,cAAA;AAAA,gBACC,MAAA;AAAA,gBACA,MAAA;AAAA,gBACA,OAAA,EAAS,eAAA;AAAA,gBACT,UAAA;AAAA,gBACA,kBAAA,EAAoB;AAAA;AAAA,aACtB;AAAA,YAED,cAAA,oBAAkBA,GAAAA,CAAC,aAAA,EAAA,EAAc,QAAgB,MAAA,EAAgB,CAAA;AAAA,4BAClEA,GAAAA;AAAA,cAAC,aAAA;AAAA,cAAA;AAAA,gBACC,GAAA,EAAK,UAAA;AAAA,gBACL,UAAA,EAAY,KAAA;AAAA,gBACZ,YAAA,EAAa,KAAA;AAAA,gBACb,cAAA,EAAe,KAAA;AAAA,gBACf,MAAA;AAAA,gBACA,SAAA,EAAW,cAAc,OAAA,CAAQ,IAAA;AAAA,gBACjC,OAAO,SAAA,GAAY,EAAE,SAAA,EAAW,SAAA,EAAW,QAAO,GAAI;AAAA;AAAA;AACxD,WAAA,EACF,CAAA,EAEJ,CAAA;AAAA,UAEC,UAAA,oBAAcA,GAAAA,CAAC,cAAA,EAAA,EAAe,OAAO,CAAC,CAAC,OAAQ,QAAA,EAAA,UAAA,EAAW;AAAA;AAAA;AAAA;AAC7D,GAAA,EACF,CAAA;AAEJ","file":"chunk-LOY2NPCO.js","sourcesContent":["import type { BoxProps } from '@mui/material/Box';\nimport type { Theme, SxProps } from '@mui/material/styles';\nimport type { Editor, UseEditorOptions } from '@tiptap/react';\nimport type { ButtonBaseProps } from '@mui/material/ButtonBase';\n\n// ---------------------------------------------------------------------------\n// Toolbar presets — define which toolbar items are visible per use case\n// ---------------------------------------------------------------------------\n\nexport type ToolbarPreset = 'full' | 'standard' | 'compact' | 'minimal' | 'chat' | 'inline';\n\n/**\n * Individual toolbar items that can be toggled on/off.\n */\nexport type ToolbarItem =\n // Text formatting\n | 'bold'\n | 'italic'\n | 'underline'\n | 'strike'\n | 'code'\n // Headings\n | 'heading'\n // Lists\n | 'bulletList'\n | 'orderedList'\n | 'taskList'\n // Alignment\n | 'alignLeft'\n | 'alignCenter'\n | 'alignRight'\n | 'alignJustify'\n // Block elements\n | 'blockquote'\n | 'codeBlock'\n | 'horizontalRule'\n // Media & links\n | 'link'\n | 'image'\n // Utilities\n | 'hardBreak'\n | 'clearFormat'\n | 'undo'\n | 'redo'\n | 'fullscreen';\n\n/**\n * Toolbar configuration — either use a preset name or provide explicit items.\n */\nexport type ToolbarConfig = ToolbarPreset | { items: ToolbarItem[]; bubbleMenu?: boolean };\n\n/**\n * Resolved toolbar shape used internally.\n */\nexport interface ResolvedToolbar {\n items: Set<ToolbarItem>;\n bubbleMenu: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Editor component props\n// ---------------------------------------------------------------------------\n\nexport type EditorOutputFormat = 'html' | 'json';\n\nexport type EditorProps = Omit<UseEditorOptions, 'extensions' | 'content'> & {\n /** HTML string or TipTap JSON document */\n value?: string;\n /** Controlled onChange — receives HTML string or JSON string depending on `format` */\n onChange?: (value: string) => void;\n /** Output format: 'html' returns HTML string, 'json' returns stringified TipTap JSON. @default 'json' */\n format?: EditorOutputFormat;\n /** Error state */\n error?: boolean;\n /** Helper text displayed below the editor */\n helperText?: React.ReactNode;\n /** Placeholder text */\n placeholder?: string;\n /** Toolbar preset or explicit config. @default 'standard' */\n toolbar?: ToolbarConfig;\n /** Enable bubble menu (floating toolbar on selection). @default true for standard+ */\n bubbleMenu?: boolean;\n /** Min height of editor content area in px. @default 160 */\n minHeight?: number;\n /** Max height of editor content area in px (enables scroll). @default undefined */\n maxHeight?: number;\n /** Whether content is editable. @default true */\n editable?: boolean;\n /** Reset content when value becomes empty. @default false */\n resetValue?: boolean;\n /** Additional TipTap extensions to merge with preset */\n extraExtensions?: UseEditorOptions['extensions'];\n /** CSS class name */\n className?: string;\n /** MUI sx prop */\n sx?: SxProps<Theme>;\n /** Slot props for wrapper */\n slotProps?: {\n wrapper?: BoxProps;\n };\n /** Ref to the content container */\n ref?: React.RefObject<HTMLDivElement | null> | React.RefCallback<HTMLDivElement | null>;\n /** Accessible names for the toolbar controls. Partial — anything omitted\n * keeps its English default. See {@link EditorLabels}. */\n labels?: Partial<EditorLabels>;\n};\n\n// ---------------------------------------------------------------------------\n// Toolbar labels\n// ---------------------------------------------------------------------------\n\n/**\n * Accessible names for every toolbar control, so a consumer can localise them.\n *\n * They were hardcoded English, which is fine for a design system's default and\n * not fine on a Russian-first product: the editor is on every content form —\n * a post, a community description, an organisation profile, a shop — and every\n * tooltip in it read \"Bold\", \"Insert link\", \"Fullscreen\" next to Russian field\n * labels. The names are also the ONLY text a screen reader gets for these\n * buttons, so an English default is a localisation gap in the accessibility\n * tree, not just in the tooltip.\n *\n * Defaults keep the previous strings verbatim, so a consumer that passes\n * nothing is unchanged.\n */\nexport type EditorLabels = {\n bold: string;\n italic: string;\n underline: string;\n strike: string;\n inlineCode: string;\n clearFormat: string;\n headingMenu: string;\n bulletList: string;\n orderedList: string;\n taskList: string;\n alignLeft: string;\n alignCenter: string;\n alignRight: string;\n alignJustify: string;\n blockquote: string;\n codeBlock: string;\n horizontalRule: string;\n insertLink: string;\n removeLink: string;\n insertImage: string;\n hardBreak: string;\n undo: string;\n redo: string;\n fullscreen: string;\n exitFullscreen: string;\n /** The two popovers carry visible text of their own, not just icons. */\n linkUrlField: string;\n linkApply: string;\n imagePopoverTitle: string;\n imageUrlField: string;\n imageAltField: string;\n imageApply: string;\n /** The code block's language picker, whose first option is a word. */\n codeLanguageAuto: string;\n};\n\n/** The strings the toolbar used before `labels` existed. */\nexport const DEFAULT_EDITOR_LABELS: EditorLabels = {\n bold: 'Bold (⌘B)',\n italic: 'Italic (⌘I)',\n underline: 'Underline (⌘U)',\n strike: 'Strikethrough',\n inlineCode: 'Inline code (⌘E)',\n clearFormat: 'Clear format (⌘⇧X)',\n headingMenu: 'Heading menu',\n bulletList: 'Bullet list',\n orderedList: 'Ordered list',\n taskList: 'Task list',\n alignLeft: 'Align left',\n alignCenter: 'Align center',\n alignRight: 'Align right',\n alignJustify: 'Align justify',\n blockquote: 'Blockquote',\n codeBlock: 'Code block',\n horizontalRule: 'Horizontal rule',\n insertLink: 'Insert link',\n removeLink: 'Remove link',\n insertImage: 'Insert image',\n hardBreak: 'Hard break',\n undo: 'Undo (⌘Z)',\n redo: 'Redo (⌘⇧Z)',\n fullscreen: 'Fullscreen',\n exitFullscreen: 'Exit fullscreen',\n linkUrlField: 'Link URL',\n linkApply: 'Apply',\n imagePopoverTitle: 'Add image',\n imageUrlField: 'Image URL',\n imageAltField: 'Alt text',\n imageApply: 'Apply',\n codeLanguageAuto: 'auto',\n};\n\n// ---------------------------------------------------------------------------\n// Toolbar sub-component props\n// ---------------------------------------------------------------------------\n\nexport type EditorToolbarProps = {\n editor: Editor;\n toolbar: ResolvedToolbar;\n fullscreen: boolean;\n onToggleFullscreen: () => void;\n labels: EditorLabels;\n};\n\nexport type EditorToolbarItemProps = ButtonBaseProps & {\n label?: string;\n active?: boolean;\n icon?: React.ReactNode;\n};\n","// ---------------------------------------------------------------------------\n// Editor CSS class tokens\n// ---------------------------------------------------------------------------\n\nconst cls = (name: string) => `prism-editor-${name}`;\n\nexport const editorClasses = {\n root: cls('root'),\n toolbar: {\n root: cls('toolbar'),\n hr: cls('toolbar-hr'),\n bold: cls('toolbar-bold'),\n italic: cls('toolbar-italic'),\n underline: cls('toolbar-underline'),\n strike: cls('toolbar-strike'),\n code: cls('toolbar-code'),\n codeBlock: cls('toolbar-code-block'),\n link: cls('toolbar-link'),\n unlink: cls('toolbar-unlink'),\n image: cls('toolbar-image'),\n alignLeft: cls('toolbar-align-left'),\n alignCenter: cls('toolbar-align-center'),\n alignRight: cls('toolbar-align-right'),\n alignJustify: cls('toolbar-align-justify'),\n bulletList: cls('toolbar-bullet-list'),\n orderedList: cls('toolbar-ordered-list'),\n taskList: cls('toolbar-task-list'),\n blockquote: cls('toolbar-blockquote'),\n hardBreak: cls('toolbar-hard-break'),\n clear: cls('toolbar-clear'),\n undo: cls('toolbar-undo'),\n redo: cls('toolbar-redo'),\n fullscreen: cls('toolbar-fullscreen'),\n },\n content: {\n root: cls('content'),\n hr: cls('content-hr'),\n link: cls('content-link'),\n image: cls('content-image'),\n heading: cls('content-heading'),\n codeInline: cls('content-code-inline'),\n codeBlock: cls('content-code-block'),\n langSelect: cls('content-lang-select'),\n blockquote: cls('content-blockquote'),\n bulletList: cls('content-bullet-list'),\n orderedList: cls('content-ordered-list'),\n listItem: cls('content-list-item'),\n taskList: cls('content-task-list'),\n taskItem: cls('content-task-item'),\n placeholder: cls('content-placeholder'),\n },\n state: {\n error: cls('state-error'),\n disabled: cls('state-disabled'),\n fullscreen: cls('state-fullscreen'),\n },\n};\n","import { styled, alpha } from '@mui/material/styles';\n\nimport { editorClasses } from './classes.js';\n\nconst MARGIN = '0.75em';\n\nexport const EditorRoot = styled('div')(({ theme }) => ({\n minHeight: 240,\n display: 'flex',\n flexDirection: 'column',\n borderRadius: Number(theme.shape.borderRadius) * 1.5,\n border: `solid 1px ${alpha(theme.palette.grey[500], 0.2)}`,\n transition: theme.transitions.create(['border-color', 'box-shadow'], {\n duration: theme.transitions.duration.short,\n }),\n '&:focus-within': {\n borderColor: theme.palette.primary.main,\n boxShadow: `0 0 0 1px ${alpha(theme.palette.primary.main, 0.2)}`,\n },\n\n // ---------------------------------------------------------------------------\n // State: error\n // ---------------------------------------------------------------------------\n [`&.${editorClasses.state.error}`]: {\n borderColor: theme.palette.error.main,\n [`& .${editorClasses.content.root}`]: {\n backgroundColor: alpha(theme.palette.error.main, 0.04),\n },\n },\n\n // ---------------------------------------------------------------------------\n // State: disabled\n // ---------------------------------------------------------------------------\n [`&.${editorClasses.state.disabled}`]: {\n opacity: 0.48,\n pointerEvents: 'none',\n },\n\n // ---------------------------------------------------------------------------\n // State: fullscreen\n // ---------------------------------------------------------------------------\n [`&.${editorClasses.state.fullscreen}`]: {\n top: 16,\n left: 16,\n position: 'fixed',\n maxHeight: 'unset',\n width: 'calc(100% - 32px)',\n height: 'calc(100% - 32px)',\n zIndex: theme.zIndex.modal,\n borderRadius: Number(theme.shape.borderRadius) * 2,\n backgroundColor: theme.palette.background.default,\n boxShadow: theme.shadows[24],\n },\n\n // ---------------------------------------------------------------------------\n // Placeholder\n // ---------------------------------------------------------------------------\n [`& .${editorClasses.content.placeholder}`]: {\n // `:first-child::before` — placeholder is rendered as the first\n // element of the editable content area when the editor is empty.\n // The previous of-type form fired only when the placeholder was\n // the first sibling of its tag, which is fragile if the editor\n // wrapper changes tag (the placeholder might be the SECOND child\n // of its tag but still the first child overall — both intents\n // converge on the first-child variant).\n '&:first-child::before': {\n ...theme.typography.body2,\n height: 0,\n float: 'left',\n pointerEvents: 'none',\n content: 'attr(data-placeholder)',\n color: theme.palette.text.disabled,\n },\n },\n\n // ---------------------------------------------------------------------------\n // Content area\n // ---------------------------------------------------------------------------\n [`& .${editorClasses.content.root}`]: {\n display: 'flex',\n flex: '1 1 auto',\n overflowY: 'auto',\n flexDirection: 'column',\n borderBottomLeftRadius: 'inherit',\n borderBottomRightRadius: 'inherit',\n backgroundColor: alpha(theme.palette.grey[500], 0.04),\n\n '& .tiptap': {\n '> * + *': { marginTop: 0, marginBottom: MARGIN },\n '&.ProseMirror': {\n flex: '1 1 auto',\n outline: 'none',\n padding: theme.spacing(0, 2),\n },\n\n // Headings\n h1: { ...theme.typography.h1, marginTop: 40, marginBottom: 8 },\n h2: { ...theme.typography.h2, marginTop: 40, marginBottom: 8 },\n h3: { ...theme.typography.h3, marginTop: 24, marginBottom: 8 },\n h4: { ...theme.typography.h4, marginTop: 24, marginBottom: 8 },\n h5: { ...theme.typography.h5, marginTop: 24, marginBottom: 8 },\n h6: { ...theme.typography.h6, marginTop: 24, marginBottom: 8 },\n p: { ...theme.typography.body1, marginBottom: '1.25rem' },\n\n // Link\n [`& .${editorClasses.content.link}`]: {\n color: theme.palette.primary.main,\n textDecoration: 'none',\n '&:hover': { textDecoration: 'underline' },\n },\n\n // Horizontal rule\n [`& .${editorClasses.content.hr}`]: {\n flexShrink: 0,\n borderWidth: 0,\n margin: '2em 0',\n borderStyle: 'solid',\n borderBottomWidth: 'thin',\n borderColor: theme.palette.divider,\n },\n\n // Image\n [`& .${editorClasses.content.image}`]: {\n width: '100%',\n height: 'auto',\n maxWidth: '100%',\n borderRadius: theme.shape.borderRadius,\n margin: 'auto auto 1.25em',\n '&.ProseMirror-selectednode': {\n outline: `2px solid ${theme.palette.primary.main}`,\n outlineOffset: 2,\n },\n },\n\n // Lists\n [`& .${editorClasses.content.bulletList}`]: {\n paddingLeft: 16,\n listStyleType: 'disc',\n },\n [`& .${editorClasses.content.orderedList}`]: {\n paddingLeft: 16,\n },\n [`& .${editorClasses.content.listItem}`]: {\n lineHeight: 2,\n '& > p': { margin: 0 },\n },\n\n // Task list\n [`& .${editorClasses.content.taskList}`]: {\n listStyle: 'none',\n padding: 0,\n '& li': {\n display: 'flex',\n alignItems: 'flex-start',\n gap: theme.spacing(1),\n '& > label': {\n marginTop: 4,\n flexShrink: 0,\n },\n '& > div': { flex: 1 },\n },\n },\n\n // Blockquote\n [`& .${editorClasses.content.blockquote}`]: {\n lineHeight: 1.5,\n fontSize: '1.5em',\n margin: '24px auto',\n position: 'relative',\n fontFamily: 'Georgia, serif',\n padding: theme.spacing(3, 3, 3, 8),\n color: theme.palette.text.secondary,\n borderLeft: `solid 8px ${alpha(theme.palette.grey[500], 0.08)}`,\n [theme.breakpoints.up('md')]: { width: '100%', maxWidth: 640 },\n '& p': { margin: 0, fontSize: 'inherit', fontFamily: 'inherit' },\n '&::before': {\n left: 16,\n top: -8,\n display: 'block',\n fontSize: '3em',\n content: '\"\\\\201C\"',\n position: 'absolute',\n color: theme.palette.text.disabled,\n },\n },\n\n // Inline code\n [`& .${editorClasses.content.codeInline}`]: {\n padding: theme.spacing(0.25, 0.5),\n color: theme.palette.text.secondary,\n fontSize: theme.typography.body2.fontSize,\n borderRadius: Number(theme.shape.borderRadius) / 2,\n backgroundColor: alpha(theme.palette.grey[500], 0.16),\n fontFamily: \"'JetBrains Mono', 'Fira Code', monospace\",\n },\n\n // Code block\n [`& .${editorClasses.content.codeBlock}`]: {\n position: 'relative',\n '& pre': {\n overflowX: 'auto',\n color: theme.palette.common.white,\n padding: theme.spacing(5, 3, 3, 3),\n borderRadius: theme.shape.borderRadius,\n backgroundColor: theme.palette.grey[900],\n fontFamily: \"'JetBrains Mono', 'Fira Code', monospace\",\n '& code': { fontSize: theme.typography.body2.fontSize },\n },\n [`& .${editorClasses.content.langSelect}`]: {\n top: 8,\n right: 8,\n zIndex: 1,\n padding: 4,\n outline: 'none',\n borderRadius: 4,\n position: 'absolute',\n color: theme.palette.common.white,\n fontWeight: theme.typography.fontWeightMedium,\n borderColor: alpha(theme.palette.grey[500], 0.08),\n backgroundColor: alpha(theme.palette.grey[500], 0.08),\n },\n },\n },\n },\n}));\n","import type { ToolbarItem, ToolbarConfig, ToolbarPreset, ResolvedToolbar } from './types.js';\n\n// ---------------------------------------------------------------------------\n// Preset definitions — which toolbar items each preset includes\n// ---------------------------------------------------------------------------\n\nconst PRESET_ITEMS: Record<ToolbarPreset, ToolbarItem[]> = {\n /**\n * Full — CMS pages, blog articles, documentation.\n * Everything enabled including headings, alignment, code blocks, images.\n */\n full: [\n 'heading',\n 'bold',\n 'italic',\n 'underline',\n 'strike',\n 'code',\n 'bulletList',\n 'orderedList',\n 'taskList',\n 'alignLeft',\n 'alignCenter',\n 'alignRight',\n 'alignJustify',\n 'blockquote',\n 'codeBlock',\n 'horizontalRule',\n 'link',\n 'image',\n 'hardBreak',\n 'clearFormat',\n 'undo',\n 'redo',\n 'fullscreen',\n ],\n\n /**\n * Standard — blog posts, forum discussions, product descriptions.\n * Most formatting without advanced alignment and task lists.\n */\n standard: [\n 'heading',\n 'bold',\n 'italic',\n 'underline',\n 'strike',\n 'bulletList',\n 'orderedList',\n 'blockquote',\n 'codeBlock',\n 'link',\n 'image',\n 'hardBreak',\n 'clearFormat',\n 'undo',\n 'redo',\n 'fullscreen',\n ],\n\n /**\n * Compact — comments, forum replies.\n * Basic formatting, links, code, no images/headings.\n */\n compact: [\n 'bold',\n 'italic',\n 'underline',\n 'strike',\n 'code',\n 'bulletList',\n 'orderedList',\n 'blockquote',\n 'link',\n 'clearFormat',\n ],\n\n /**\n * Minimal — quick feedback, short messages.\n * Only essential inline formatting.\n */\n minimal: ['bold', 'italic', 'code', 'link'],\n\n /**\n * Chat — messaging system.\n * Lightweight formatting, optimized for speed.\n */\n chat: ['bold', 'italic', 'strike', 'code', 'link', 'bulletList', 'orderedList', 'codeBlock'],\n\n /**\n * Inline — single-line fields (titles, captions).\n * No toolbar, no block-level elements.\n */\n inline: [],\n};\n\n/**\n * Whether each preset shows a bubble menu by default.\n */\nconst PRESET_BUBBLE_MENU: Record<ToolbarPreset, boolean> = {\n full: true,\n standard: true,\n compact: true,\n minimal: false,\n chat: false,\n inline: false,\n};\n\n// ---------------------------------------------------------------------------\n// Resolver\n// ---------------------------------------------------------------------------\n\nexport function resolveToolbar(config: ToolbarConfig | undefined): ResolvedToolbar {\n if (!config) {\n return resolveToolbar('standard');\n }\n\n if (typeof config === 'string') {\n return {\n items: new Set(PRESET_ITEMS[config]),\n bubbleMenu: PRESET_BUBBLE_MENU[config],\n };\n }\n\n return {\n items: new Set(config.items),\n bubbleMenu: config.bubbleMenu ?? false,\n };\n}\n","import type { EditorToolbarItemProps } from '../types.js';\n\nimport SvgIcon from '@mui/material/SvgIcon';\nimport Tooltip from '@mui/material/Tooltip';\nimport { styled } from '@mui/material/styles';\nimport ButtonBase from '@mui/material/ButtonBase';\n\nexport function ToolbarItem({ sx, icon, label, active, disabled, ...other }: EditorToolbarItemProps) {\n const ariaLabel = other['aria-label'];\n\n const renderItem = () => (\n <ItemRoot disableRipple disableTouchRipple disabled={disabled} active={active} sx={sx} {...other}>\n {icon && <SvgIcon sx={{ fontSize: 18 }}>{icon}</SvgIcon>}\n {label && label}\n </ItemRoot>\n );\n\n if (ariaLabel) {\n return <Tooltip title={ariaLabel}>{renderItem()}</Tooltip>;\n }\n\n return renderItem();\n}\n\nconst ItemRoot = styled(ButtonBase, {\n shouldForwardProp: (prop: string) => !['active', 'disabled', 'sx'].includes(prop),\n})<Pick<EditorToolbarItemProps, 'active'>>(({ theme }) => ({\n ...theme.typography.body2,\n width: 28,\n height: 28,\n padding: theme.spacing(0, 0.75),\n borderRadius: Number(theme.shape.borderRadius) * 0.75,\n '&:hover': {\n backgroundColor: theme.palette.action.hover,\n },\n variants: [\n {\n props: (props) => !!props.active,\n style: {\n backgroundColor: theme.palette.action.selected,\n border: `solid 1px ${theme.palette.action.hover}`,\n },\n },\n {\n props: (props) => !!props.disabled,\n style: {\n opacity: 0.48,\n cursor: 'default',\n pointerEvents: 'none',\n },\n },\n ],\n}));\n","import type { Editor } from '@tiptap/react';\nimport type { EditorLabels } from '../types.js';\nimport type { TextHeadingLevel } from './use-toolbar-state.js';\n\nimport { useState, useCallback } from 'react';\n\nimport Menu from '@mui/material/Menu';\nimport { styled } from '@mui/material/styles';\nimport ButtonBase from '@mui/material/ButtonBase';\nimport { listClasses } from '@mui/material/List';\nimport { buttonBaseClasses } from '@mui/material/ButtonBase';\n\nimport { ToolbarItem } from './toolbar-item.js';\nimport { ParagraphIcon, H1Icon, H2Icon, H3Icon, H4Icon, H5Icon, H6Icon } from '../icons/index.js';\n\nconst HEADING_OPTIONS = [\n { key: 'Paragraph', level: null as TextHeadingLevel, icon: <ParagraphIcon sx={{ fontSize: 18 }} /> },\n { key: 'Heading 1', level: 1 as TextHeadingLevel, icon: <H1Icon sx={{ fontSize: 18 }} /> },\n { key: 'Heading 2', level: 2 as TextHeadingLevel, icon: <H2Icon sx={{ fontSize: 18 }} /> },\n { key: 'Heading 3', level: 3 as TextHeadingLevel, icon: <H3Icon sx={{ fontSize: 18 }} /> },\n { key: 'Heading 4', level: 4 as TextHeadingLevel, icon: <H4Icon sx={{ fontSize: 18 }} /> },\n { key: 'Heading 5', level: 5 as TextHeadingLevel, icon: <H5Icon sx={{ fontSize: 18 }} /> },\n { key: 'Heading 6', level: 6 as TextHeadingLevel, icon: <H6Icon sx={{ fontSize: 18 }} /> },\n];\n\ninterface HeadingBlockProps {\n labels: EditorLabels;\n editor: Editor;\n isActive: (value: TextHeadingLevel) => boolean;\n}\n\nexport function HeadingBlock({ editor, isActive, labels }: HeadingBlockProps) {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const open = Boolean(anchorEl);\n\n const handleOpen = useCallback((event: React.MouseEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget);\n }, []);\n\n const handleClose = useCallback(() => {\n setAnchorEl(null);\n }, []);\n\n const handleSelect = useCallback(\n (value: TextHeadingLevel) => {\n handleClose();\n if (value) {\n editor.chain().focus().toggleHeading({ level: value }).run();\n } else {\n editor.chain().focus().setParagraph().run();\n }\n },\n [editor, handleClose]\n );\n\n const activeIcon = (editor.isActive('heading', { level: 1 }) && <H1Icon sx={{ fontSize: 18 }} />) ||\n (editor.isActive('heading', { level: 2 }) && <H2Icon sx={{ fontSize: 18 }} />) ||\n (editor.isActive('heading', { level: 3 }) && <H3Icon sx={{ fontSize: 18 }} />) ||\n (editor.isActive('heading', { level: 4 }) && <H4Icon sx={{ fontSize: 18 }} />) ||\n (editor.isActive('heading', { level: 5 }) && <H5Icon sx={{ fontSize: 18 }} />) ||\n (editor.isActive('heading', { level: 6 }) && <H6Icon sx={{ fontSize: 18 }} />) || (\n <ParagraphIcon sx={{ fontSize: 18 }} />\n );\n\n const buttonId = 'heading-menu-button';\n const menuId = 'heading-menu';\n\n return (\n <>\n <HeadingButton\n id={buttonId}\n aria-label={labels.headingMenu}\n aria-controls={open ? menuId : undefined}\n aria-haspopup=\"true\"\n aria-expanded={open ? 'true' : undefined}\n onClick={handleOpen}\n >\n {activeIcon}\n </HeadingButton>\n\n <Menu\n id={menuId}\n anchorEl={anchorEl}\n open={open}\n onClose={handleClose}\n slotProps={{\n list: { 'aria-labelledby': buttonId },\n paper: {\n sx: {\n width: 42,\n [`& .${listClasses.root}`]: { gap: 0.5, display: 'flex', flexDirection: 'column' },\n [`& .${buttonBaseClasses.root}`]: {\n px: 1,\n width: 1,\n height: 34,\n borderRadius: 0.75,\n justifyContent: 'flex-start',\n '&:hover': { backgroundColor: 'action.hover' },\n },\n },\n },\n }}\n >\n {HEADING_OPTIONS.map((option) => (\n <ToolbarItem\n key={option.key}\n component=\"li\"\n aria-label={option.key}\n icon={option.icon}\n active={isActive(option.level)}\n onClick={() => handleSelect(option.level)}\n />\n ))}\n </Menu>\n </>\n );\n}\n\nconst HeadingButton = styled(ButtonBase)(({ theme }) => ({\n width: 28,\n height: 28,\n borderRadius: Number(theme.shape.borderRadius) * 0.75,\n justifyContent: 'center',\n '&:hover': {\n backgroundColor: theme.palette.action.hover,\n },\n}));\n","import type { Editor } from '@tiptap/react';\nimport type { EditorToolbarItemProps } from '../types.js';\nimport type { EditorLabels } from '../types.js';\n\nimport { useState, useCallback } from 'react';\n\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Popover from '@mui/material/Popover';\nimport TextField from '@mui/material/TextField';\n\nimport { editorClasses } from '../classes.js';\nimport { ToolbarItem } from './toolbar-item.js';\n\ninterface LinkBlockProps {\n labels: EditorLabels;\n editor: Editor;\n active: boolean;\n linkIcon: EditorToolbarItemProps['icon'];\n unlinkIcon: EditorToolbarItemProps['icon'];\n}\n\nexport function LinkBlock({ editor, linkIcon, unlinkIcon, active, labels }: LinkBlockProps) {\n const [linkUrl, setLinkUrl] = useState('');\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const open = Boolean(anchorEl);\n\n const handleOpen = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n const currentUrl = editor.getAttributes('link').href ?? '';\n setAnchorEl(event.currentTarget);\n setLinkUrl(currentUrl);\n },\n [editor]\n );\n\n const handleClose = useCallback(() => {\n setAnchorEl(null);\n }, []);\n\n const handleApply = useCallback(() => {\n handleClose();\n const chain = () => editor.chain().focus().extendMarkRange('link');\n if (linkUrl) {\n chain().setLink({ href: linkUrl }).run();\n } else {\n chain().unsetLink().run();\n }\n }, [editor, linkUrl, handleClose]);\n\n const popoverId = open ? 'link-popover' : undefined;\n\n return (\n <>\n <ToolbarItem\n aria-describedby={popoverId}\n aria-label={labels.insertLink}\n active={active}\n className={editorClasses.toolbar.link}\n onClick={handleOpen}\n icon={linkIcon}\n />\n\n <ToolbarItem\n aria-label={labels.removeLink}\n disabled={!active}\n className={editorClasses.toolbar.unlink}\n onClick={() => editor.chain().focus().unsetLink().run()}\n icon={unlinkIcon}\n />\n\n <Popover\n id={popoverId}\n open={open}\n anchorEl={anchorEl}\n onClose={handleClose}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}\n slotProps={{\n paper: {\n sx: { p: 2.5, gap: 1.25, width: 1, maxWidth: 320, display: 'flex', flexDirection: 'column' },\n },\n }}\n >\n {/* Floating Material-Design label sits in the outline notch\n when the field is empty/focused and tucks above when filled\n — replaces the old `<Typography>` heading + bare-placeholder\n shape which left the outline notched without a label,\n producing a visible gap. */}\n <Box sx={{ gap: 1, display: 'flex', alignItems: 'center' }}>\n <TextField\n fullWidth\n size=\"small\"\n label={labels.linkUrlField}\n placeholder=\"https://\"\n value={linkUrl}\n onChange={(e) => setLinkUrl(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleApply();\n }}\n />\n <Button variant=\"contained\" disabled={!linkUrl} onClick={handleApply}>\n {labels.linkApply}\n </Button>\n </Box>\n </Popover>\n </>\n );\n}\n","import type { Editor } from '@tiptap/react';\nimport type { EditorToolbarItemProps } from '../types.js';\nimport type { EditorLabels } from '../types.js';\n\nimport { useState, useCallback } from 'react';\n\nimport Button from '@mui/material/Button';\nimport Popover from '@mui/material/Popover';\nimport TextField from '@mui/material/TextField';\nimport Typography from '@mui/material/Typography';\n\nimport { editorClasses } from '../classes.js';\nimport { ToolbarItem } from './toolbar-item.js';\n\ninterface ImageBlockProps {\n labels: EditorLabels;\n editor: Editor;\n icon: EditorToolbarItemProps['icon'];\n}\n\nexport function ImageBlock({ editor, icon, labels }: ImageBlockProps) {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const open = Boolean(anchorEl);\n const [state, setState] = useState({ imageUrl: '', altText: '' });\n\n const handleOpen = useCallback((event: React.MouseEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget);\n }, []);\n\n const handleClose = useCallback(() => {\n setAnchorEl(null);\n }, []);\n\n const handleApply = useCallback(() => {\n handleClose();\n setState({ imageUrl: '', altText: '' });\n editor.chain().focus().setImage({ src: state.imageUrl, alt: state.altText }).run();\n }, [editor, handleClose, state]);\n\n const popoverId = open ? 'image-popover' : undefined;\n\n return (\n <>\n <ToolbarItem\n aria-describedby={popoverId}\n aria-label={labels.insertImage}\n className={editorClasses.toolbar.image}\n onClick={handleOpen}\n icon={icon}\n />\n\n <Popover\n id={popoverId}\n open={open}\n anchorEl={anchorEl}\n onClose={handleClose}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}\n slotProps={{\n paper: {\n sx: { p: 2.5, gap: 1.25, width: 1, maxWidth: 320, display: 'flex', flexDirection: 'column' },\n },\n }}\n >\n <Typography variant=\"subtitle2\">{labels.imagePopoverTitle}</Typography>\n <TextField\n fullWidth\n size=\"small\"\n label={labels.imageUrlField}\n placeholder=\"https://\"\n value={state.imageUrl}\n onChange={(e) => setState((prev) => ({ ...prev, imageUrl: e.target.value }))}\n />\n <TextField\n fullWidth\n size=\"small\"\n label={labels.imageAltField}\n value={state.altText}\n onChange={(e) => setState((prev) => ({ ...prev, altText: e.target.value }))}\n />\n <Button variant=\"contained\" disabled={!state.imageUrl} onClick={handleApply} sx={{ alignSelf: 'flex-end' }}>\n {labels.imageApply}\n </Button>\n </Popover>\n </>\n );\n}\n","import type { Editor } from '@tiptap/react';\nimport type { TextTransformValue } from '../extensions/text-transform.js';\n\nimport { useEditorState } from '@tiptap/react';\n\nexport type TextAlignValue = 'left' | 'center' | 'right' | 'justify';\nexport type TextHeadingLevel = 1 | 2 | 3 | 4 | 5 | 6 | null;\n\nexport interface UseToolbarStateReturn {\n isBold: boolean;\n isCode: boolean;\n isLink: boolean;\n isItalic: boolean;\n isStrike: boolean;\n isUnderline: boolean;\n isCodeBlock: boolean;\n isBulletList: boolean;\n isBlockquote: boolean;\n isOrderedList: boolean;\n isTaskList: boolean;\n isAlign: (value: TextAlignValue) => boolean;\n isTextLevel: (value: TextHeadingLevel) => boolean;\n isTextTransform: (value: TextTransformValue) => boolean;\n canUndo: boolean;\n canRedo: boolean;\n}\n\nexport function useToolbarState(editor: Editor): UseToolbarStateReturn {\n return useEditorState({\n editor,\n selector: (ctx) => {\n const canRun = ctx.editor.can().chain().focus();\n\n return {\n isBold: ctx.editor.isActive('bold'),\n isCode: ctx.editor.isActive('code'),\n isLink: ctx.editor.isActive('link'),\n isItalic: ctx.editor.isActive('italic'),\n isStrike: ctx.editor.isActive('strike'),\n isUnderline: ctx.editor.isActive('underline'),\n isCodeBlock: ctx.editor.isActive('codeBlock'),\n isBulletList: ctx.editor.isActive('bulletList'),\n isBlockquote: ctx.editor.isActive('blockquote'),\n isOrderedList: ctx.editor.isActive('orderedList'),\n isTaskList: ctx.editor.isActive('taskList'),\n isAlign: (value: TextAlignValue) => ctx.editor.isActive({ textAlign: value }),\n isTextTransform: (value: TextTransformValue) => ctx.editor.isActive('textTransform', { textTransform: value }),\n isTextLevel: (value: TextHeadingLevel) =>\n value ? ctx.editor.isActive('heading', { level: value }) : ctx.editor.isActive('paragraph'),\n canUndo: canRun.undo().run(),\n canRedo: canRun.redo().run(),\n };\n },\n });\n}\n","import type { EditorToolbarProps } from '../types.js';\n\nimport Divider from '@mui/material/Divider';\nimport { alpha, styled } from '@mui/material/styles';\n\nimport { editorClasses } from '../classes.js';\nimport { ToolbarItem } from './toolbar-item.js';\nimport { HeadingBlock } from './heading-block.js';\nimport { LinkBlock } from './link-block.js';\nimport { ImageBlock } from './image-block.js';\nimport { useToolbarState } from './use-toolbar-state.js';\nimport {\n BoldIcon,\n ItalicIcon,\n UnderlineIcon,\n StrikeIcon,\n InlineCodeIcon,\n BulletListIcon,\n OrderedListIcon,\n CheckListIcon,\n AlignLeftIcon,\n AlignCenterIcon,\n AlignRightIcon,\n AlignJustifyIcon,\n QuoteIcon,\n CodeBlockIcon,\n HorizontalRuleIcon,\n LinkIcon,\n UnlinkIcon,\n ImageIcon,\n HardBreakIcon,\n ClearMarksIcon,\n UndoIcon,\n RedoIcon,\n FullscreenIcon,\n ExitFullscreenIcon,\n} from '../icons/index.js';\n\nexport function Toolbar({ editor, toolbar, fullscreen, onToggleFullscreen, labels }: EditorToolbarProps) {\n const state = useToolbarState(editor);\n const has = (item: string) => toolbar.items.has(item as any);\n const chain = () => editor.chain().focus();\n\n const hasAnyInGroup = (...items: string[]) => items.some(has);\n\n return (\n <ToolbarRoot className={editorClasses.toolbar.root}>\n {/* Heading selector */}\n {has('heading') && (\n <>\n <HeadingBlock labels={labels} editor={editor} isActive={state.isTextLevel} />\n <ToolbarDivider />\n </>\n )}\n\n {/* Text styles */}\n {hasAnyInGroup('bold', 'italic', 'underline', 'strike', 'code') && (\n <>\n <ToolbarBlock>\n {has('bold') && (\n <ToolbarItem\n aria-label={labels.bold}\n active={state.isBold}\n className={editorClasses.toolbar.bold}\n onClick={() => chain().toggleBold().run()}\n icon={<BoldIcon />}\n />\n )}\n {has('italic') && (\n <ToolbarItem\n aria-label={labels.italic}\n active={state.isItalic}\n className={editorClasses.toolbar.italic}\n onClick={() => chain().toggleItalic().run()}\n icon={<ItalicIcon />}\n />\n )}\n {has('underline') && (\n <ToolbarItem\n aria-label={labels.underline}\n active={state.isUnderline}\n className={editorClasses.toolbar.underline}\n onClick={() => chain().toggleUnderline().run()}\n icon={<UnderlineIcon />}\n />\n )}\n {has('strike') && (\n <ToolbarItem\n aria-label={labels.strike}\n active={state.isStrike}\n className={editorClasses.toolbar.strike}\n onClick={() => chain().toggleStrike().run()}\n icon={<StrikeIcon />}\n />\n )}\n {has('code') && (\n <ToolbarItem\n aria-label={labels.inlineCode}\n active={state.isCode}\n className={editorClasses.toolbar.code}\n onClick={() => chain().toggleCode().run()}\n icon={<InlineCodeIcon />}\n />\n )}\n </ToolbarBlock>\n <ToolbarDivider />\n </>\n )}\n\n {/* Lists */}\n {hasAnyInGroup('bulletList', 'orderedList', 'taskList') && (\n <>\n <ToolbarBlock>\n {has('bulletList') && (\n <ToolbarItem\n aria-label={labels.bulletList}\n active={state.isBulletList}\n className={editorClasses.toolbar.bulletList}\n onClick={() => chain().toggleBulletList().run()}\n icon={<BulletListIcon />}\n />\n )}\n {has('orderedList') && (\n <ToolbarItem\n aria-label={labels.orderedList}\n active={state.isOrderedList}\n className={editorClasses.toolbar.orderedList}\n onClick={() => chain().toggleOrderedList().run()}\n icon={<OrderedListIcon />}\n />\n )}\n {has('taskList') && (\n <ToolbarItem\n aria-label={labels.taskList}\n active={state.isTaskList}\n className={editorClasses.toolbar.taskList}\n onClick={() => chain().toggleTaskList().run()}\n icon={<CheckListIcon />}\n />\n )}\n </ToolbarBlock>\n <ToolbarDivider />\n </>\n )}\n\n {/* Alignment */}\n {hasAnyInGroup('alignLeft', 'alignCenter', 'alignRight', 'alignJustify') && (\n <>\n <ToolbarBlock>\n {has('alignLeft') && (\n <ToolbarItem\n aria-label={labels.alignLeft}\n active={state.isAlign('left')}\n className={editorClasses.toolbar.alignLeft}\n onClick={() => chain().setTextAlign('left').run()}\n icon={<AlignLeftIcon />}\n />\n )}\n {has('alignCenter') && (\n <ToolbarItem\n aria-label={labels.alignCenter}\n active={state.isAlign('center')}\n className={editorClasses.toolbar.alignCenter}\n onClick={() => chain().setTextAlign('center').run()}\n icon={<AlignCenterIcon />}\n />\n )}\n {has('alignRight') && (\n <ToolbarItem\n aria-label={labels.alignRight}\n active={state.isAlign('right')}\n className={editorClasses.toolbar.alignRight}\n onClick={() => chain().setTextAlign('right').run()}\n icon={<AlignRightIcon />}\n />\n )}\n {has('alignJustify') && (\n <ToolbarItem\n aria-label={labels.alignJustify}\n active={state.isAlign('justify')}\n className={editorClasses.toolbar.alignJustify}\n onClick={() => chain().setTextAlign('justify').run()}\n icon={<AlignJustifyIcon />}\n />\n )}\n </ToolbarBlock>\n <ToolbarDivider />\n </>\n )}\n\n {/* Block elements */}\n {hasAnyInGroup('blockquote', 'codeBlock', 'horizontalRule') && (\n <>\n <ToolbarBlock>\n {has('blockquote') && (\n <ToolbarItem\n aria-label={labels.blockquote}\n active={state.isBlockquote}\n className={editorClasses.toolbar.blockquote}\n onClick={() => chain().toggleBlockquote().run()}\n icon={<QuoteIcon />}\n />\n )}\n {has('codeBlock') && (\n <ToolbarItem\n aria-label={labels.codeBlock}\n active={state.isCodeBlock}\n className={editorClasses.toolbar.codeBlock}\n onClick={() => chain().toggleCodeBlock().run()}\n icon={<CodeBlockIcon />}\n />\n )}\n {has('horizontalRule') && (\n <ToolbarItem\n aria-label={labels.horizontalRule}\n className={editorClasses.toolbar.hr}\n onClick={() => chain().setHorizontalRule().run()}\n icon={<HorizontalRuleIcon />}\n />\n )}\n </ToolbarBlock>\n <ToolbarDivider />\n </>\n )}\n\n {/* Link & Image */}\n {hasAnyInGroup('link', 'image') && (\n <>\n <ToolbarBlock>\n {has('link') && (\n <LinkBlock labels={labels} editor={editor} active={state.isLink} linkIcon={<LinkIcon />} unlinkIcon={<UnlinkIcon />} />\n )}\n {has('image') && <ImageBlock labels={labels} editor={editor} icon={<ImageIcon />} />}\n </ToolbarBlock>\n <ToolbarDivider />\n </>\n )}\n\n {/* Utilities */}\n {hasAnyInGroup('hardBreak', 'clearFormat') && (\n <>\n <ToolbarBlock>\n {has('hardBreak') && (\n <ToolbarItem\n aria-label={labels.hardBreak}\n className={editorClasses.toolbar.hardBreak}\n onClick={() => chain().setHardBreak().run()}\n icon={<HardBreakIcon />}\n />\n )}\n {has('clearFormat') && (\n <ToolbarItem\n aria-label={labels.clearFormat}\n className={editorClasses.toolbar.clear}\n onClick={() => chain().clearNodes().unsetAllMarks().run()}\n icon={<ClearMarksIcon />}\n />\n )}\n </ToolbarBlock>\n <ToolbarDivider />\n </>\n )}\n\n {/* Undo/Redo */}\n {hasAnyInGroup('undo', 'redo') && (\n <>\n <ToolbarBlock>\n {has('undo') && (\n <ToolbarItem\n aria-label={labels.undo}\n disabled={!state.canUndo}\n className={editorClasses.toolbar.undo}\n onClick={() => chain().undo().run()}\n icon={<UndoIcon />}\n />\n )}\n {has('redo') && (\n <ToolbarItem\n aria-label={labels.redo}\n disabled={!state.canRedo}\n className={editorClasses.toolbar.redo}\n onClick={() => chain().redo().run()}\n icon={<RedoIcon />}\n />\n )}\n </ToolbarBlock>\n <ToolbarDivider />\n </>\n )}\n\n {/* Fullscreen */}\n {has('fullscreen') && (\n <ToolbarBlock>\n <ToolbarItem\n aria-label={fullscreen ? labels.exitFullscreen : labels.fullscreen}\n active={fullscreen}\n className={editorClasses.toolbar.fullscreen}\n onClick={onToggleFullscreen}\n icon={fullscreen ? <ExitFullscreenIcon /> : <FullscreenIcon />}\n />\n </ToolbarBlock>\n )}\n </ToolbarRoot>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Styled\n// ---------------------------------------------------------------------------\n\nconst ToolbarRoot = styled('div')(({ theme }) => ({\n flexWrap: 'wrap',\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n gap: theme.spacing(1),\n padding: theme.spacing(1.25),\n borderTopLeftRadius: 'inherit',\n borderTopRightRadius: 'inherit',\n backgroundColor: theme.palette.background.paper,\n borderBottom: `solid 1px ${alpha(theme.palette.grey[500], 0.2)}`,\n}));\n\nconst ToolbarBlock = styled('div')(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(0.5),\n}));\n\nfunction ToolbarDivider() {\n return <Divider orientation=\"vertical\" flexItem sx={{ height: 16, my: 'auto' }} />;\n}\n","import type { Editor } from '@tiptap/react';\nimport type { EditorLabels } from '../types.js';\n\nimport { BubbleMenu } from '@tiptap/react/menus';\nimport Divider from '@mui/material/Divider';\nimport { alpha, styled } from '@mui/material/styles';\n\nimport { editorClasses } from '../classes.js';\nimport { ToolbarItem } from './toolbar-item.js';\nimport { LinkBlock } from './link-block.js';\nimport { useToolbarState } from './use-toolbar-state.js';\nimport {\n BoldIcon,\n ItalicIcon,\n UnderlineIcon,\n StrikeIcon,\n LinkIcon,\n UnlinkIcon,\n ClearMarksIcon,\n} from '../icons/index.js';\n\ninterface BubbleToolbarProps {\n editor: Editor;\n labels: EditorLabels;\n}\n\nexport function BubbleToolbar({ editor, labels }: BubbleToolbarProps) {\n const state = useToolbarState(editor);\n const chain = () => editor.chain().focus();\n\n return (\n <BubbleMenu editor={editor}>\n <BubbleRoot>\n <ToolbarItem\n aria-label={labels.bold}\n active={state.isBold}\n className={editorClasses.toolbar.bold}\n onClick={() => chain().toggleBold().run()}\n icon={<BoldIcon />}\n />\n <ToolbarItem\n aria-label={labels.italic}\n active={state.isItalic}\n className={editorClasses.toolbar.italic}\n onClick={() => chain().toggleItalic().run()}\n icon={<ItalicIcon />}\n />\n <ToolbarItem\n aria-label={labels.underline}\n active={state.isUnderline}\n className={editorClasses.toolbar.underline}\n onClick={() => chain().toggleUnderline().run()}\n icon={<UnderlineIcon />}\n />\n <ToolbarItem\n aria-label={labels.strike}\n active={state.isStrike}\n className={editorClasses.toolbar.strike}\n onClick={() => chain().toggleStrike().run()}\n icon={<StrikeIcon />}\n />\n <LinkBlock labels={labels} editor={editor} active={state.isLink} linkIcon={<LinkIcon />} unlinkIcon={<UnlinkIcon />} />\n <Divider orientation=\"vertical\" flexItem sx={{ height: 16, my: 'auto' }} />\n <ToolbarItem\n aria-label={labels.clearFormat}\n className={editorClasses.toolbar.clear}\n onClick={() => chain().clearNodes().unsetAllMarks().run()}\n icon={<ClearMarksIcon />}\n />\n </BubbleRoot>\n </BubbleMenu>\n );\n}\n\nconst BubbleRoot = styled('div')(({ theme }) => ({\n display: 'flex',\n gap: theme.spacing(0.5),\n padding: theme.spacing(0.5),\n borderRadius: theme.shape.borderRadius,\n boxShadow: theme.shadows[8],\n backgroundColor: theme.palette.background.paper,\n border: `1px solid ${alpha(theme.palette.grey[500], 0.16)}`,\n}));\n","import type { ReactNodeViewProps } from '@tiptap/react';\n\nimport { useCallback } from 'react';\nimport { NodeViewContent, NodeViewWrapper } from '@tiptap/react';\n\nimport { editorClasses } from '../classes.js';\nimport { DEFAULT_EDITOR_LABELS } from '../types.js';\n\nexport function CodeHighlightBlock(props: ReactNodeViewProps) {\n const { node, extension, updateAttributes } = props;\n const language = node.attrs.language;\n const lowlight = extension.options.lowlight;\n // A node view is rendered by the extension, not by the toolbar, so the\n // label reaches it through the extension's options — the same door the\n // lowlight instance comes through. The default keeps the previous word for\n // anyone configuring the extension directly.\n const autoLabel: string = extension.options.autoLanguageLabel ?? DEFAULT_EDITOR_LABELS.codeLanguageAuto;\n\n const handleChangeLanguage = useCallback(\n (event: React.ChangeEvent<HTMLSelectElement>) => {\n updateAttributes({ language: event.target.value });\n },\n [updateAttributes]\n );\n\n return (\n <NodeViewWrapper className={editorClasses.content.codeBlock}>\n <select\n name=\"language\"\n contentEditable={false}\n value={language || 'null'}\n onChange={handleChangeLanguage}\n className={editorClasses.content.langSelect}\n >\n <option value=\"null\">{autoLabel}</option>\n <option disabled>—</option>\n {lowlight.listLanguages().map((lang: string) => (\n <option key={lang} value={lang}>\n {lang}\n </option>\n ))}\n </select>\n <pre>\n <NodeViewContent<'code'> as=\"code\" />\n </pre>\n </NodeViewWrapper>\n );\n}\n","import { Extension } from '@tiptap/core';\n\nexport const ClearFormat = Extension.create({\n name: 'clearFormat',\n addKeyboardShortcuts() {\n return {\n 'Mod-Shift-X': ({ editor }) => editor.chain().focus().clearNodes().unsetAllMarks().run(),\n };\n },\n});\n","import type { CommandProps } from '@tiptap/core';\n\nimport { Mark } from '@tiptap/core';\n\nexport type TextTransformValue = 'uppercase' | 'lowercase' | 'capitalize';\n\nexport interface TextTransformOptions {\n allowedValues: TextTransformValue[];\n defaultValue?: TextTransformValue;\n}\n\nexport interface TextTransformAttributes {\n textTransform?: TextTransformValue;\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n textTransform: {\n unsetTextTransform: () => ReturnType;\n setTextTransform: (value: TextTransformValue) => ReturnType;\n toggleTextTransform: (value: TextTransformValue) => ReturnType;\n };\n }\n}\n\nconst isHTMLElement = (node: unknown): node is HTMLElement => node instanceof HTMLElement;\n\nconst isValidTextTransform = (value: unknown, allowed: readonly TextTransformValue[]): value is TextTransformValue =>\n typeof value === 'string' && allowed.includes(value as TextTransformValue);\n\nexport const TextTransform = Mark.create<TextTransformOptions, TextTransformAttributes>({\n name: 'textTransform',\n\n addOptions() {\n return {\n allowedValues: ['uppercase', 'lowercase', 'capitalize'],\n defaultValue: undefined,\n };\n },\n\n addAttributes() {\n return {\n textTransform: {\n default: this.options.defaultValue,\n parseHTML: (element): TextTransformValue | undefined => {\n if (!isHTMLElement(element)) return undefined;\n const rawValue =\n element.style.textTransform || element.getAttribute('style')?.match(/text-transform:\\s*(\\w+)/)?.[1];\n return isValidTextTransform(rawValue, this.options.allowedValues) ? rawValue : undefined;\n },\n renderHTML: (attributes: TextTransformAttributes): Record<string, string> => {\n if (!attributes.textTransform) return {};\n return { style: `text-transform: ${attributes.textTransform}` };\n },\n },\n };\n },\n\n parseHTML() {\n return [\n {\n tag: 'span[style]',\n getAttrs: (node) => {\n if (!isHTMLElement(node)) return null;\n const styleValue = node.style.textTransform;\n return isValidTextTransform(styleValue, this.options.allowedValues) ? {} : false;\n },\n },\n ];\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['span', HTMLAttributes, 0];\n },\n\n addCommands() {\n return {\n setTextTransform:\n (value: TextTransformValue) =>\n ({ commands }: CommandProps): boolean => {\n if (!isValidTextTransform(value, this.options.allowedValues)) return false;\n return commands.setMark(this.name, { textTransform: value });\n },\n unsetTextTransform:\n () =>\n ({ commands }: CommandProps): boolean =>\n commands.unsetMark(this.name),\n toggleTextTransform:\n (value: TextTransformValue) =>\n ({ editor, commands }: CommandProps): boolean => {\n if (!isValidTextTransform(value, this.options.allowedValues)) return false;\n const isActive = editor.isActive(this.name, { textTransform: value });\n return isActive ? commands.unsetTextTransform() : commands.setTextTransform(value);\n },\n };\n },\n});\n","import type { EditorProps } from './types.js';\nimport { DEFAULT_EDITOR_LABELS } from './types.js';\n\nimport { useMemo, useState, useEffect, useCallback } from 'react';\nimport { common, createLowlight } from 'lowlight';\nimport StarterKitExtension from '@tiptap/starter-kit';\nimport UnderlineExtension from '@tiptap/extension-underline';\nimport TextAlignExtension from '@tiptap/extension-text-align';\nimport ImageExtension from '@tiptap/extension-image';\nimport LinkExtension from '@tiptap/extension-link';\nimport PlaceholderExtension from '@tiptap/extension-placeholder';\nimport TaskListExtension from '@tiptap/extension-task-list';\nimport TaskItemExtension from '@tiptap/extension-task-item';\nimport CodeBlockLowlightExtension, { type CodeBlockLowlightOptions } from '@tiptap/extension-code-block-lowlight';\nimport { useEditor, EditorContent, ReactNodeViewRenderer } from '@tiptap/react';\n\nimport Box from '@mui/material/Box';\nimport Portal from '@mui/material/Portal';\nimport Backdrop from '@mui/material/Backdrop';\nimport FormHelperText from '@mui/material/FormHelperText';\n\nimport { editorClasses } from './classes.js';\nimport { EditorRoot } from './styles.js';\nimport { resolveToolbar } from './presets.js';\nimport { Toolbar } from './toolbar/toolbar.js';\nimport { BubbleToolbar } from './toolbar/bubble-toolbar.js';\nimport { CodeHighlightBlock } from './toolbar/code-highlight-block.js';\nimport { ClearFormat } from './extensions/clear-format.js';\nimport { TextTransform } from './extensions/text-transform.js';\n\n/**\n * PrismEditor — configurable rich text editor built on TipTap.\n *\n * Use `toolbar` prop to select a preset or provide custom toolbar items:\n * - `\"full\"` — CMS pages, blog articles (all features)\n * - `\"standard\"` — blog posts, forums (default)\n * - `\"compact\"` — comments, replies\n * - `\"minimal\"` — short feedback\n * - `\"chat\"` — messaging\n * - `\"inline\"` — no toolbar (titles, captions)\n * - `{ items: [...], bubbleMenu: true }` — custom\n */\nexport function Editor({\n sx,\n error,\n onChange,\n slotProps,\n helperText,\n resetValue,\n className,\n toolbar: toolbarConfig,\n bubbleMenu: bubbleMenuProp,\n format = 'json',\n minHeight = 160,\n maxHeight,\n editable = true,\n extraExtensions,\n placeholder = 'Write something...',\n labels: labelOverrides,\n ref: contentRef,\n value: initialContent = '',\n ...other\n}: EditorProps) {\n const [fullscreen, setFullscreen] = useState(false);\n const [rerenderKey, setRerenderKey] = useState(0);\n\n const resolvedToolbar = useMemo(() => resolveToolbar(toolbarConfig), [toolbarConfig]);\n const showBubbleMenu = bubbleMenuProp ?? resolvedToolbar.bubbleMenu;\n const showToolbar = resolvedToolbar.items.size > 0;\n\n const lowlight = useMemo(() => createLowlight(common), []);\n\n // Merged once per identity change so the toolbar's props stay stable.\n const labels = useMemo(() => ({ ...DEFAULT_EDITOR_LABELS, ...labelOverrides }), [labelOverrides]);\n\n // Parse initial content — if format is 'json' and value looks like JSON, parse it\n const parsedContent = useMemo(() => {\n if (!initialContent) return '';\n if (format === 'json' && initialContent.startsWith('{')) {\n try {\n return JSON.parse(initialContent);\n } catch {\n return initialContent;\n }\n }\n return initialContent;\n }, [initialContent, format]);\n\n // Publication/save handlers must observe every committed editor transaction.\n // Debounce persistence in the host, never delivery of the current value.\n const emitChange = useCallback(\n (editor: import('@tiptap/core').Editor) => {\n onChange?.(format === 'json' ? JSON.stringify(editor.getJSON()) : editor.getHTML());\n },\n [onChange, format]\n );\n\n const extensions = useMemo(() => {\n const has = (item: string) => resolvedToolbar.items.has(item as any);\n const exts: any[] = [\n StarterKitExtension.configure({\n codeBlock: false,\n // Underline and Link are registered separately (below) to allow per-preset control\n underline: false,\n link: false,\n code: has('code') ? { HTMLAttributes: { class: editorClasses.content.codeInline } } : false,\n heading: has('heading') ? { HTMLAttributes: { class: editorClasses.content.heading } } : false,\n horizontalRule: has('horizontalRule') ? { HTMLAttributes: { class: editorClasses.content.hr } } : false,\n listItem: { HTMLAttributes: { class: editorClasses.content.listItem } },\n blockquote: has('blockquote') ? { HTMLAttributes: { class: editorClasses.content.blockquote } } : false,\n bulletList: has('bulletList') ? { HTMLAttributes: { class: editorClasses.content.bulletList } } : false,\n orderedList: has('orderedList') ? { HTMLAttributes: { class: editorClasses.content.orderedList } } : false,\n }),\n PlaceholderExtension.configure({\n placeholder,\n emptyEditorClass: editorClasses.content.placeholder,\n }),\n ClearFormat,\n TextTransform,\n ];\n\n if (has('underline')) {\n exts.push(UnderlineExtension);\n }\n\n if (has('alignLeft') || has('alignCenter') || has('alignRight') || has('alignJustify')) {\n exts.push(TextAlignExtension.configure({ types: ['heading', 'paragraph'] }));\n }\n\n if (has('image')) {\n exts.push(ImageExtension.configure({ HTMLAttributes: { class: editorClasses.content.image } }));\n }\n\n if (has('link')) {\n exts.push(\n LinkExtension.configure({\n openOnClick: false,\n HTMLAttributes: { class: editorClasses.content.link },\n })\n );\n }\n\n if (has('codeBlock')) {\n exts.push(\n CodeBlockLowlightExtension.extend<CodeBlockLowlightOptions & { autoLanguageLabel: string }>({\n addOptions() {\n const inherited = this.parent?.() as CodeBlockLowlightOptions;\n return { ...inherited, autoLanguageLabel: DEFAULT_EDITOR_LABELS.codeLanguageAuto };\n },\n addNodeView: () => ReactNodeViewRenderer(CodeHighlightBlock),\n }).configure({ lowlight, autoLanguageLabel: labels.codeLanguageAuto })\n );\n }\n\n if (has('taskList')) {\n exts.push(\n TaskListExtension.configure({ HTMLAttributes: { class: editorClasses.content.taskList } }),\n TaskItemExtension.configure({\n nested: true,\n HTMLAttributes: { class: editorClasses.content.taskItem },\n })\n );\n }\n\n if (extraExtensions) {\n exts.push(...extraExtensions);\n }\n\n return exts;\n // `labels` is a dependency because the code block's language picker is a\n // node view: its word lives in the extension, so a language switch has to\n // rebuild the extensions to reach it.\n }, [resolvedToolbar, placeholder, lowlight, extraExtensions, labels]);\n\n const editor = useEditor({\n editable,\n immediatelyRender: false,\n content: parsedContent,\n shouldRerenderOnTransaction: !!rerenderKey,\n onUpdate: (ctx) => {\n emitChange(ctx.editor);\n },\n extensions,\n ...other,\n });\n\n // Fullscreen handlers\n const handleToggleFullscreen = useCallback(() => {\n editor?.unmount();\n setFullscreen((prev) => !prev);\n setRerenderKey((prev) => prev + 1);\n }, [editor]);\n\n const handleExitFullscreen = useCallback(\n (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n editor?.unmount();\n setFullscreen(false);\n setRerenderKey((prev) => prev + 1);\n }\n },\n [editor]\n );\n\n // Sync content from outside\n useEffect(() => {\n const timer = setTimeout(() => {\n if (!editor?.isDestroyed && editor?.isEmpty && parsedContent && parsedContent !== '<p></p>') {\n editor?.commands.setContent(parsedContent);\n }\n }, 200);\n return () => clearTimeout(timer);\n }, [parsedContent, editor]);\n\n // Reset support\n useEffect(() => {\n if (resetValue && !initialContent) {\n editor?.commands.clearContent();\n }\n }, [initialContent, resetValue, editor]);\n\n // Fullscreen ESC listener\n useEffect(() => {\n if (!fullscreen) return undefined;\n document.body.style.overflow = 'hidden';\n window.addEventListener('keydown', handleExitFullscreen);\n return () => {\n document.body.style.overflow = '';\n window.removeEventListener('keydown', handleExitFullscreen);\n };\n }, [fullscreen, handleExitFullscreen]);\n\n const rootClassName = [\n editorClasses.root,\n className,\n error && editorClasses.state.error,\n !editable && editorClasses.state.disabled,\n fullscreen && editorClasses.state.fullscreen,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <Portal disablePortal={!fullscreen}>\n {fullscreen && <Backdrop open sx={(theme) => ({ zIndex: theme.zIndex.modal - 1 })} />}\n\n <Box\n {...slotProps?.wrapper}\n sx={[\n { display: 'flex', flexDirection: 'column' },\n ...(Array.isArray(slotProps?.wrapper?.sx) ? slotProps.wrapper.sx : [slotProps?.wrapper?.sx]),\n ]}\n >\n <EditorRoot className={rootClassName} sx={[{ minHeight }, ...(Array.isArray(sx) ? sx : [sx])]}>\n {editor && !editor.isDestroyed && (\n <>\n {showToolbar && (\n <Toolbar\n labels={labels}\n editor={editor}\n toolbar={resolvedToolbar}\n fullscreen={fullscreen}\n onToggleFullscreen={handleToggleFullscreen}\n />\n )}\n {showBubbleMenu && <BubbleToolbar editor={editor} labels={labels} />}\n <EditorContent\n ref={contentRef}\n spellCheck={false}\n autoComplete=\"off\"\n autoCapitalize=\"off\"\n editor={editor}\n className={editorClasses.content.root}\n style={maxHeight ? { maxHeight, overflowY: 'auto' } : undefined}\n />\n </>\n )}\n </EditorRoot>\n\n {helperText && <FormHelperText error={!!error}>{helperText}</FormHelperText>}\n </Box>\n </Portal>\n );\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/editor/types.ts","../src/components/editor/classes.ts","../src/components/editor/styles.tsx","../src/components/editor/presets.ts","../src/components/editor/toolbar/toolbar-item.tsx","../src/components/editor/toolbar/heading-block.tsx","../src/components/editor/toolbar/link-block.tsx","../src/components/editor/toolbar/image-block.tsx","../src/components/editor/toolbar/use-toolbar-state.ts","../src/components/editor/toolbar/toolbar.tsx","../src/components/editor/toolbar/bubble-toolbar.tsx","../src/components/editor/toolbar/code-highlight-block.tsx","../src/components/editor/extensions/clear-format.ts","../src/components/editor/extensions/text-transform.ts","../src/components/editor/editor.tsx"],"names":["styled","jsx","jsxs","ButtonBase","useState","useCallback","Fragment","TextField","Popover","Button","alpha","Divider","editor","Box"],"mappings":"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","file":"chunk-2E67PQ4T.js","sourcesContent":["import type { BoxProps } from '@mui/material/Box';\nimport type { Theme, SxProps } from '@mui/material/styles';\nimport type { Editor, UseEditorOptions } from '@tiptap/react';\nimport type { ButtonBaseProps } from '@mui/material/ButtonBase';\n\n// ---------------------------------------------------------------------------\n// Toolbar presets — define which toolbar items are visible per use case\n// ---------------------------------------------------------------------------\n\nexport type ToolbarPreset = 'full' | 'standard' | 'compact' | 'minimal' | 'chat' | 'inline';\n\n/**\n * Individual toolbar items that can be toggled on/off.\n */\nexport type ToolbarItem =\n // Text formatting\n | 'bold'\n | 'italic'\n | 'underline'\n | 'strike'\n | 'code'\n // Headings\n | 'heading'\n // Lists\n | 'bulletList'\n | 'orderedList'\n | 'taskList'\n // Alignment\n | 'alignLeft'\n | 'alignCenter'\n | 'alignRight'\n | 'alignJustify'\n // Block elements\n | 'blockquote'\n | 'codeBlock'\n | 'horizontalRule'\n // Media & links\n | 'link'\n | 'image'\n // Utilities\n | 'hardBreak'\n | 'clearFormat'\n | 'undo'\n | 'redo'\n | 'fullscreen';\n\n/**\n * Toolbar configuration — either use a preset name or provide explicit items.\n */\nexport type ToolbarConfig = ToolbarPreset | { items: ToolbarItem[]; bubbleMenu?: boolean };\n\n/**\n * Resolved toolbar shape used internally.\n */\nexport interface ResolvedToolbar {\n items: Set<ToolbarItem>;\n bubbleMenu: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Editor component props\n// ---------------------------------------------------------------------------\n\nexport type EditorOutputFormat = 'html' | 'json';\n\nexport type EditorProps = Omit<UseEditorOptions, 'extensions' | 'content'> & {\n /** HTML string or TipTap JSON document */\n value?: string;\n /** Controlled onChange — receives HTML string or JSON string depending on `format` */\n onChange?: (value: string) => void;\n /** Output format: 'html' returns HTML string, 'json' returns stringified TipTap JSON. @default 'json' */\n format?: EditorOutputFormat;\n /** Error state */\n error?: boolean;\n /** Helper text displayed below the editor */\n helperText?: React.ReactNode;\n /** Placeholder text */\n placeholder?: string;\n /** Toolbar preset or explicit config. @default 'standard' */\n toolbar?: ToolbarConfig;\n /** Enable bubble menu (floating toolbar on selection). @default true for standard+ */\n bubbleMenu?: boolean;\n /** Min height of editor content area in px. @default 160 */\n minHeight?: number;\n /** Max height of editor content area in px (enables scroll). @default undefined */\n maxHeight?: number;\n /** Whether content is editable. @default true */\n editable?: boolean;\n /** Reset content when value becomes empty. @default false */\n resetValue?: boolean;\n /** Additional TipTap extensions to merge with preset */\n extraExtensions?: UseEditorOptions['extensions'];\n /** CSS class name */\n className?: string;\n /** MUI sx prop */\n sx?: SxProps<Theme>;\n /** Slot props for wrapper */\n slotProps?: {\n wrapper?: BoxProps;\n };\n /** Ref to the content container */\n ref?: React.RefObject<HTMLDivElement | null> | React.RefCallback<HTMLDivElement | null>;\n /** Accessible names for the toolbar controls. Partial — anything omitted\n * keeps its English default. See {@link EditorLabels}. */\n labels?: Partial<EditorLabels>;\n};\n\n// ---------------------------------------------------------------------------\n// Toolbar labels\n// ---------------------------------------------------------------------------\n\n/**\n * Accessible names for every toolbar control, so a consumer can localise them.\n *\n * They were hardcoded English, which is fine for a design system's default and\n * not fine on a Russian-first product: the editor is on every content form —\n * a post, a community description, an organisation profile, a shop — and every\n * tooltip in it read \"Bold\", \"Insert link\", \"Fullscreen\" next to Russian field\n * labels. The names are also the ONLY text a screen reader gets for these\n * buttons, so an English default is a localisation gap in the accessibility\n * tree, not just in the tooltip.\n *\n * Defaults keep the previous strings verbatim, so a consumer that passes\n * nothing is unchanged.\n */\nexport type EditorLabels = {\n bold: string;\n italic: string;\n underline: string;\n strike: string;\n inlineCode: string;\n clearFormat: string;\n headingMenu: string;\n bulletList: string;\n orderedList: string;\n taskList: string;\n alignLeft: string;\n alignCenter: string;\n alignRight: string;\n alignJustify: string;\n blockquote: string;\n codeBlock: string;\n horizontalRule: string;\n insertLink: string;\n removeLink: string;\n insertImage: string;\n hardBreak: string;\n undo: string;\n redo: string;\n fullscreen: string;\n exitFullscreen: string;\n /** The two popovers carry visible text of their own, not just icons. */\n linkUrlField: string;\n linkApply: string;\n imagePopoverTitle: string;\n imageUrlField: string;\n imageAltField: string;\n imageApply: string;\n /** The code block's language picker, whose first option is a word. */\n codeLanguageAuto: string;\n};\n\n/** The strings the toolbar used before `labels` existed. */\nexport const DEFAULT_EDITOR_LABELS: EditorLabels = {\n bold: 'Bold (⌘B)',\n italic: 'Italic (⌘I)',\n underline: 'Underline (⌘U)',\n strike: 'Strikethrough',\n inlineCode: 'Inline code (⌘E)',\n clearFormat: 'Clear format (⌘⇧X)',\n headingMenu: 'Heading menu',\n bulletList: 'Bullet list',\n orderedList: 'Ordered list',\n taskList: 'Task list',\n alignLeft: 'Align left',\n alignCenter: 'Align center',\n alignRight: 'Align right',\n alignJustify: 'Align justify',\n blockquote: 'Blockquote',\n codeBlock: 'Code block',\n horizontalRule: 'Horizontal rule',\n insertLink: 'Insert link',\n removeLink: 'Remove link',\n insertImage: 'Insert image',\n hardBreak: 'Hard break',\n undo: 'Undo (⌘Z)',\n redo: 'Redo (⌘⇧Z)',\n fullscreen: 'Fullscreen',\n exitFullscreen: 'Exit fullscreen',\n linkUrlField: 'Link URL',\n linkApply: 'Apply',\n imagePopoverTitle: 'Add image',\n imageUrlField: 'Image URL',\n imageAltField: 'Alt text',\n imageApply: 'Apply',\n codeLanguageAuto: 'auto',\n};\n\n// ---------------------------------------------------------------------------\n// Toolbar sub-component props\n// ---------------------------------------------------------------------------\n\nexport type EditorToolbarProps = {\n editor: Editor;\n toolbar: ResolvedToolbar;\n fullscreen: boolean;\n onToggleFullscreen: () => void;\n labels: EditorLabels;\n};\n\nexport type EditorToolbarItemProps = ButtonBaseProps & {\n label?: string;\n active?: boolean;\n icon?: React.ReactNode;\n};\n","// ---------------------------------------------------------------------------\n// Editor CSS class tokens\n// ---------------------------------------------------------------------------\n\nconst cls = (name: string) => `prism-editor-${name}`;\n\nexport const editorClasses = {\n root: cls('root'),\n toolbar: {\n root: cls('toolbar'),\n hr: cls('toolbar-hr'),\n bold: cls('toolbar-bold'),\n italic: cls('toolbar-italic'),\n underline: cls('toolbar-underline'),\n strike: cls('toolbar-strike'),\n code: cls('toolbar-code'),\n codeBlock: cls('toolbar-code-block'),\n link: cls('toolbar-link'),\n unlink: cls('toolbar-unlink'),\n image: cls('toolbar-image'),\n alignLeft: cls('toolbar-align-left'),\n alignCenter: cls('toolbar-align-center'),\n alignRight: cls('toolbar-align-right'),\n alignJustify: cls('toolbar-align-justify'),\n bulletList: cls('toolbar-bullet-list'),\n orderedList: cls('toolbar-ordered-list'),\n taskList: cls('toolbar-task-list'),\n blockquote: cls('toolbar-blockquote'),\n hardBreak: cls('toolbar-hard-break'),\n clear: cls('toolbar-clear'),\n undo: cls('toolbar-undo'),\n redo: cls('toolbar-redo'),\n fullscreen: cls('toolbar-fullscreen'),\n },\n content: {\n root: cls('content'),\n hr: cls('content-hr'),\n link: cls('content-link'),\n image: cls('content-image'),\n heading: cls('content-heading'),\n codeInline: cls('content-code-inline'),\n codeBlock: cls('content-code-block'),\n langSelect: cls('content-lang-select'),\n blockquote: cls('content-blockquote'),\n bulletList: cls('content-bullet-list'),\n orderedList: cls('content-ordered-list'),\n listItem: cls('content-list-item'),\n taskList: cls('content-task-list'),\n taskItem: cls('content-task-item'),\n placeholder: cls('content-placeholder'),\n },\n state: {\n error: cls('state-error'),\n disabled: cls('state-disabled'),\n fullscreen: cls('state-fullscreen'),\n },\n};\n","import { styled, alpha } from '@mui/material/styles';\n\nimport { editorClasses } from './classes.js';\n\nconst MARGIN = '0.75em';\n\nexport const EditorRoot = styled('div')(({ theme }) => ({\n minHeight: 240,\n display: 'flex',\n flexDirection: 'column',\n borderRadius: Number(theme.shape.borderRadius) * 1.5,\n border: `solid 1px ${alpha(theme.palette.grey[500], 0.2)}`,\n transition: theme.transitions.create(['border-color', 'box-shadow'], {\n duration: theme.transitions.duration.short,\n }),\n '&:focus-within': {\n borderColor: theme.palette.primary.main,\n boxShadow: `0 0 0 1px ${alpha(theme.palette.primary.main, 0.2)}`,\n },\n\n // ---------------------------------------------------------------------------\n // State: error\n // ---------------------------------------------------------------------------\n [`&.${editorClasses.state.error}`]: {\n borderColor: theme.palette.error.main,\n [`& .${editorClasses.content.root}`]: {\n backgroundColor: alpha(theme.palette.error.main, 0.04),\n },\n },\n\n // ---------------------------------------------------------------------------\n // State: disabled\n // ---------------------------------------------------------------------------\n [`&.${editorClasses.state.disabled}`]: {\n opacity: 0.48,\n pointerEvents: 'none',\n },\n\n // ---------------------------------------------------------------------------\n // State: fullscreen\n // ---------------------------------------------------------------------------\n [`&.${editorClasses.state.fullscreen}`]: {\n top: 16,\n left: 16,\n position: 'fixed',\n maxHeight: 'unset',\n width: 'calc(100% - 32px)',\n height: 'calc(100% - 32px)',\n zIndex: theme.zIndex.modal,\n borderRadius: Number(theme.shape.borderRadius) * 2,\n backgroundColor: theme.palette.background.default,\n boxShadow: theme.shadows[24],\n },\n\n // ---------------------------------------------------------------------------\n // Placeholder\n // ---------------------------------------------------------------------------\n [`& .${editorClasses.content.placeholder}`]: {\n // `:first-child::before` — placeholder is rendered as the first\n // element of the editable content area when the editor is empty.\n // The previous of-type form fired only when the placeholder was\n // the first sibling of its tag, which is fragile if the editor\n // wrapper changes tag (the placeholder might be the SECOND child\n // of its tag but still the first child overall — both intents\n // converge on the first-child variant).\n '&:first-child::before': {\n ...theme.typography.body2,\n height: 0,\n float: 'left',\n pointerEvents: 'none',\n content: 'attr(data-placeholder)',\n color: theme.palette.text.disabled,\n },\n },\n\n // ---------------------------------------------------------------------------\n // Content area\n // ---------------------------------------------------------------------------\n [`& .${editorClasses.content.root}`]: {\n display: 'flex',\n flex: '1 1 auto',\n overflowY: 'auto',\n flexDirection: 'column',\n borderBottomLeftRadius: 'inherit',\n borderBottomRightRadius: 'inherit',\n backgroundColor: alpha(theme.palette.grey[500], 0.04),\n\n '& .tiptap': {\n '> * + *': { marginTop: 0, marginBottom: MARGIN },\n '&.ProseMirror': {\n flex: '1 1 auto',\n outline: 'none',\n padding: theme.spacing(0, 2),\n },\n\n // Headings\n h1: { ...theme.typography.h1, marginTop: 40, marginBottom: 8 },\n h2: { ...theme.typography.h2, marginTop: 40, marginBottom: 8 },\n h3: { ...theme.typography.h3, marginTop: 24, marginBottom: 8 },\n h4: { ...theme.typography.h4, marginTop: 24, marginBottom: 8 },\n h5: { ...theme.typography.h5, marginTop: 24, marginBottom: 8 },\n h6: { ...theme.typography.h6, marginTop: 24, marginBottom: 8 },\n p: { ...theme.typography.body1, marginBottom: '1.25rem' },\n\n // Link\n [`& .${editorClasses.content.link}`]: {\n color: theme.palette.primary.main,\n textDecoration: 'none',\n '&:hover': { textDecoration: 'underline' },\n },\n\n // Horizontal rule\n [`& .${editorClasses.content.hr}`]: {\n flexShrink: 0,\n borderWidth: 0,\n margin: '2em 0',\n borderStyle: 'solid',\n borderBottomWidth: 'thin',\n borderColor: theme.palette.divider,\n },\n\n // Image\n [`& .${editorClasses.content.image}`]: {\n width: '100%',\n height: 'auto',\n maxWidth: '100%',\n borderRadius: theme.shape.borderRadius,\n margin: 'auto auto 1.25em',\n '&.ProseMirror-selectednode': {\n outline: `2px solid ${theme.palette.primary.main}`,\n outlineOffset: 2,\n },\n },\n\n // Lists\n [`& .${editorClasses.content.bulletList}`]: {\n paddingLeft: 16,\n listStyleType: 'disc',\n },\n [`& .${editorClasses.content.orderedList}`]: {\n paddingLeft: 16,\n },\n [`& .${editorClasses.content.listItem}`]: {\n lineHeight: 2,\n '& > p': { margin: 0 },\n },\n\n // Task list\n [`& .${editorClasses.content.taskList}`]: {\n listStyle: 'none',\n padding: 0,\n '& li': {\n display: 'flex',\n alignItems: 'flex-start',\n gap: theme.spacing(1),\n '& > label': {\n marginTop: 4,\n flexShrink: 0,\n },\n '& > div': { flex: 1 },\n },\n },\n\n // Blockquote\n [`& .${editorClasses.content.blockquote}`]: {\n lineHeight: 1.5,\n fontSize: '1.5em',\n margin: '24px auto',\n position: 'relative',\n fontFamily: 'Georgia, serif',\n padding: theme.spacing(3, 3, 3, 8),\n color: theme.palette.text.secondary,\n borderLeft: `solid 8px ${alpha(theme.palette.grey[500], 0.08)}`,\n [theme.breakpoints.up('md')]: { width: '100%', maxWidth: 640 },\n '& p': { margin: 0, fontSize: 'inherit', fontFamily: 'inherit' },\n '&::before': {\n left: 16,\n top: -8,\n display: 'block',\n fontSize: '3em',\n content: '\"\\\\201C\"',\n position: 'absolute',\n color: theme.palette.text.disabled,\n },\n },\n\n // Inline code\n [`& .${editorClasses.content.codeInline}`]: {\n padding: theme.spacing(0.25, 0.5),\n color: theme.palette.text.secondary,\n fontSize: theme.typography.body2.fontSize,\n borderRadius: Number(theme.shape.borderRadius) / 2,\n backgroundColor: alpha(theme.palette.grey[500], 0.16),\n fontFamily: \"'JetBrains Mono', 'Fira Code', monospace\",\n },\n\n // Code block\n [`& .${editorClasses.content.codeBlock}`]: {\n position: 'relative',\n '& pre': {\n overflowX: 'auto',\n color: theme.palette.common.white,\n padding: theme.spacing(5, 3, 3, 3),\n borderRadius: theme.shape.borderRadius,\n backgroundColor: theme.palette.grey[900],\n fontFamily: \"'JetBrains Mono', 'Fira Code', monospace\",\n '& code': { fontSize: theme.typography.body2.fontSize },\n },\n [`& .${editorClasses.content.langSelect}`]: {\n top: 8,\n right: 8,\n zIndex: 1,\n padding: 4,\n outline: 'none',\n borderRadius: 4,\n position: 'absolute',\n color: theme.palette.common.white,\n fontWeight: theme.typography.fontWeightMedium,\n borderColor: alpha(theme.palette.grey[500], 0.08),\n backgroundColor: alpha(theme.palette.grey[500], 0.08),\n },\n },\n },\n },\n}));\n","import type { ToolbarItem, ToolbarConfig, ToolbarPreset, ResolvedToolbar } from './types.js';\n\n// ---------------------------------------------------------------------------\n// Preset definitions — which toolbar items each preset includes\n// ---------------------------------------------------------------------------\n\nconst PRESET_ITEMS: Record<ToolbarPreset, ToolbarItem[]> = {\n /**\n * Full — CMS pages, blog articles, documentation.\n * Everything enabled including headings, alignment, code blocks, images.\n */\n full: [\n 'heading',\n 'bold',\n 'italic',\n 'underline',\n 'strike',\n 'code',\n 'bulletList',\n 'orderedList',\n 'taskList',\n 'alignLeft',\n 'alignCenter',\n 'alignRight',\n 'alignJustify',\n 'blockquote',\n 'codeBlock',\n 'horizontalRule',\n 'link',\n 'image',\n 'hardBreak',\n 'clearFormat',\n 'undo',\n 'redo',\n 'fullscreen',\n ],\n\n /**\n * Standard — blog posts, forum discussions, product descriptions.\n * Most formatting without advanced alignment and task lists.\n */\n standard: [\n 'heading',\n 'bold',\n 'italic',\n 'underline',\n 'strike',\n 'bulletList',\n 'orderedList',\n 'blockquote',\n 'codeBlock',\n 'link',\n 'image',\n 'hardBreak',\n 'clearFormat',\n 'undo',\n 'redo',\n 'fullscreen',\n ],\n\n /**\n * Compact — comments, forum replies.\n * Basic formatting, links, code, no images/headings.\n */\n compact: [\n 'bold',\n 'italic',\n 'underline',\n 'strike',\n 'code',\n 'bulletList',\n 'orderedList',\n 'blockquote',\n 'link',\n 'clearFormat',\n ],\n\n /**\n * Minimal — quick feedback, short messages.\n * Only essential inline formatting.\n */\n minimal: ['bold', 'italic', 'code', 'link'],\n\n /**\n * Chat — messaging system.\n * Lightweight formatting, optimized for speed.\n */\n chat: ['bold', 'italic', 'strike', 'code', 'link', 'bulletList', 'orderedList', 'codeBlock'],\n\n /**\n * Inline — single-line fields (titles, captions).\n * No toolbar, no block-level elements.\n */\n inline: [],\n};\n\n/**\n * Whether each preset shows a bubble menu by default.\n */\nconst PRESET_BUBBLE_MENU: Record<ToolbarPreset, boolean> = {\n full: true,\n standard: true,\n compact: true,\n minimal: false,\n chat: false,\n inline: false,\n};\n\n// ---------------------------------------------------------------------------\n// Resolver\n// ---------------------------------------------------------------------------\n\nexport function resolveToolbar(config: ToolbarConfig | undefined): ResolvedToolbar {\n if (!config) {\n return resolveToolbar('standard');\n }\n\n if (typeof config === 'string') {\n return {\n items: new Set(PRESET_ITEMS[config]),\n bubbleMenu: PRESET_BUBBLE_MENU[config],\n };\n }\n\n return {\n items: new Set(config.items),\n bubbleMenu: config.bubbleMenu ?? false,\n };\n}\n","import type { EditorToolbarItemProps } from '../types.js';\n\nimport SvgIcon from '@mui/material/SvgIcon';\nimport Tooltip from '@mui/material/Tooltip';\nimport { styled } from '@mui/material/styles';\nimport ButtonBase from '@mui/material/ButtonBase';\n\nexport function ToolbarItem({ sx, icon, label, active, disabled, ...other }: EditorToolbarItemProps) {\n const ariaLabel = other['aria-label'];\n\n const renderItem = () => (\n <ItemRoot disableRipple disableTouchRipple disabled={disabled} active={active} sx={sx} {...other}>\n {icon && <SvgIcon sx={{ fontSize: 18 }}>{icon}</SvgIcon>}\n {label && label}\n </ItemRoot>\n );\n\n if (ariaLabel) {\n return <Tooltip title={ariaLabel}>{renderItem()}</Tooltip>;\n }\n\n return renderItem();\n}\n\nconst ItemRoot = styled(ButtonBase, {\n shouldForwardProp: (prop: string) => !['active', 'disabled', 'sx'].includes(prop),\n})<Pick<EditorToolbarItemProps, 'active'>>(({ theme }) => ({\n ...theme.typography.body2,\n width: 28,\n height: 28,\n padding: theme.spacing(0, 0.75),\n borderRadius: Number(theme.shape.borderRadius) * 0.75,\n '&:hover': {\n backgroundColor: theme.palette.action.hover,\n },\n variants: [\n {\n props: (props) => !!props.active,\n style: {\n backgroundColor: theme.palette.action.selected,\n border: `solid 1px ${theme.palette.action.hover}`,\n },\n },\n {\n props: (props) => !!props.disabled,\n style: {\n opacity: 0.48,\n cursor: 'default',\n pointerEvents: 'none',\n },\n },\n ],\n}));\n","import type { Editor } from '@tiptap/react';\nimport type { EditorLabels } from '../types.js';\nimport type { TextHeadingLevel } from './use-toolbar-state.js';\n\nimport { useState, useCallback } from 'react';\n\nimport Menu from '@mui/material/Menu';\nimport { styled } from '@mui/material/styles';\nimport ButtonBase from '@mui/material/ButtonBase';\nimport { listClasses } from '@mui/material/List';\nimport { buttonBaseClasses } from '@mui/material/ButtonBase';\n\nimport { ToolbarItem } from './toolbar-item.js';\nimport { ParagraphIcon, H1Icon, H2Icon, H3Icon, H4Icon, H5Icon, H6Icon } from '../icons/index.js';\n\nconst HEADING_OPTIONS = [\n { key: 'Paragraph', level: null as TextHeadingLevel, icon: <ParagraphIcon sx={{ fontSize: 18 }} /> },\n { key: 'Heading 1', level: 1 as TextHeadingLevel, icon: <H1Icon sx={{ fontSize: 18 }} /> },\n { key: 'Heading 2', level: 2 as TextHeadingLevel, icon: <H2Icon sx={{ fontSize: 18 }} /> },\n { key: 'Heading 3', level: 3 as TextHeadingLevel, icon: <H3Icon sx={{ fontSize: 18 }} /> },\n { key: 'Heading 4', level: 4 as TextHeadingLevel, icon: <H4Icon sx={{ fontSize: 18 }} /> },\n { key: 'Heading 5', level: 5 as TextHeadingLevel, icon: <H5Icon sx={{ fontSize: 18 }} /> },\n { key: 'Heading 6', level: 6 as TextHeadingLevel, icon: <H6Icon sx={{ fontSize: 18 }} /> },\n];\n\ninterface HeadingBlockProps {\n labels: EditorLabels;\n editor: Editor;\n isActive: (value: TextHeadingLevel) => boolean;\n}\n\nexport function HeadingBlock({ editor, isActive, labels }: HeadingBlockProps) {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const open = Boolean(anchorEl);\n\n const handleOpen = useCallback((event: React.MouseEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget);\n }, []);\n\n const handleClose = useCallback(() => {\n setAnchorEl(null);\n }, []);\n\n const handleSelect = useCallback(\n (value: TextHeadingLevel) => {\n handleClose();\n if (value) {\n editor.chain().focus().toggleHeading({ level: value }).run();\n } else {\n editor.chain().focus().setParagraph().run();\n }\n },\n [editor, handleClose]\n );\n\n const activeIcon = (editor.isActive('heading', { level: 1 }) && <H1Icon sx={{ fontSize: 18 }} />) ||\n (editor.isActive('heading', { level: 2 }) && <H2Icon sx={{ fontSize: 18 }} />) ||\n (editor.isActive('heading', { level: 3 }) && <H3Icon sx={{ fontSize: 18 }} />) ||\n (editor.isActive('heading', { level: 4 }) && <H4Icon sx={{ fontSize: 18 }} />) ||\n (editor.isActive('heading', { level: 5 }) && <H5Icon sx={{ fontSize: 18 }} />) ||\n (editor.isActive('heading', { level: 6 }) && <H6Icon sx={{ fontSize: 18 }} />) || (\n <ParagraphIcon sx={{ fontSize: 18 }} />\n );\n\n const buttonId = 'heading-menu-button';\n const menuId = 'heading-menu';\n\n return (\n <>\n <HeadingButton\n id={buttonId}\n aria-label={labels.headingMenu}\n aria-controls={open ? menuId : undefined}\n aria-haspopup=\"true\"\n aria-expanded={open ? 'true' : undefined}\n onClick={handleOpen}\n >\n {activeIcon}\n </HeadingButton>\n\n <Menu\n id={menuId}\n anchorEl={anchorEl}\n open={open}\n onClose={handleClose}\n slotProps={{\n list: { 'aria-labelledby': buttonId },\n paper: {\n sx: {\n width: 42,\n [`& .${listClasses.root}`]: { gap: 0.5, display: 'flex', flexDirection: 'column' },\n [`& .${buttonBaseClasses.root}`]: {\n px: 1,\n width: 1,\n height: 34,\n borderRadius: 0.75,\n justifyContent: 'flex-start',\n '&:hover': { backgroundColor: 'action.hover' },\n },\n },\n },\n }}\n >\n {HEADING_OPTIONS.map((option) => (\n <ToolbarItem\n key={option.key}\n component=\"li\"\n aria-label={option.key}\n icon={option.icon}\n active={isActive(option.level)}\n onClick={() => handleSelect(option.level)}\n />\n ))}\n </Menu>\n </>\n );\n}\n\nconst HeadingButton = styled(ButtonBase)(({ theme }) => ({\n width: 28,\n height: 28,\n borderRadius: Number(theme.shape.borderRadius) * 0.75,\n justifyContent: 'center',\n '&:hover': {\n backgroundColor: theme.palette.action.hover,\n },\n}));\n","import type { Editor } from '@tiptap/react';\nimport type { EditorToolbarItemProps } from '../types.js';\nimport type { EditorLabels } from '../types.js';\n\nimport { useState, useCallback } from 'react';\n\nimport Box from '@mui/material/Box';\nimport Button from '@mui/material/Button';\nimport Popover from '@mui/material/Popover';\nimport TextField from '@mui/material/TextField';\n\nimport { editorClasses } from '../classes.js';\nimport { ToolbarItem } from './toolbar-item.js';\n\ninterface LinkBlockProps {\n labels: EditorLabels;\n editor: Editor;\n active: boolean;\n linkIcon: EditorToolbarItemProps['icon'];\n unlinkIcon: EditorToolbarItemProps['icon'];\n}\n\nexport function LinkBlock({ editor, linkIcon, unlinkIcon, active, labels }: LinkBlockProps) {\n const [linkUrl, setLinkUrl] = useState('');\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const open = Boolean(anchorEl);\n\n const handleOpen = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n const currentUrl = editor.getAttributes('link').href ?? '';\n setAnchorEl(event.currentTarget);\n setLinkUrl(currentUrl);\n },\n [editor]\n );\n\n const handleClose = useCallback(() => {\n setAnchorEl(null);\n }, []);\n\n const handleApply = useCallback(() => {\n handleClose();\n const chain = () => editor.chain().focus().extendMarkRange('link');\n if (linkUrl) {\n chain().setLink({ href: linkUrl }).run();\n } else {\n chain().unsetLink().run();\n }\n }, [editor, linkUrl, handleClose]);\n\n const popoverId = open ? 'link-popover' : undefined;\n\n return (\n <>\n <ToolbarItem\n aria-describedby={popoverId}\n aria-label={labels.insertLink}\n active={active}\n className={editorClasses.toolbar.link}\n onClick={handleOpen}\n icon={linkIcon}\n />\n\n <ToolbarItem\n aria-label={labels.removeLink}\n disabled={!active}\n className={editorClasses.toolbar.unlink}\n onClick={() => editor.chain().focus().unsetLink().run()}\n icon={unlinkIcon}\n />\n\n <Popover\n id={popoverId}\n open={open}\n anchorEl={anchorEl}\n onClose={handleClose}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}\n slotProps={{\n paper: {\n sx: { p: 2.5, gap: 1.25, width: 1, maxWidth: 320, display: 'flex', flexDirection: 'column' },\n },\n }}\n >\n {/* Floating Material-Design label sits in the outline notch\n when the field is empty/focused and tucks above when filled\n — replaces the old `<Typography>` heading + bare-placeholder\n shape which left the outline notched without a label,\n producing a visible gap. */}\n <Box sx={{ gap: 1, display: 'flex', alignItems: 'center' }}>\n <TextField\n fullWidth\n size=\"small\"\n label={labels.linkUrlField}\n placeholder=\"https://\"\n value={linkUrl}\n onChange={(e) => setLinkUrl(e.target.value)}\n onKeyDown={(e) => {\n if (e.key === 'Enter') handleApply();\n }}\n />\n <Button variant=\"contained\" disabled={!linkUrl} onClick={handleApply}>\n {labels.linkApply}\n </Button>\n </Box>\n </Popover>\n </>\n );\n}\n","import type { Editor } from '@tiptap/react';\nimport type { EditorToolbarItemProps } from '../types.js';\nimport type { EditorLabels } from '../types.js';\n\nimport { useState, useCallback } from 'react';\n\nimport Button from '@mui/material/Button';\nimport Popover from '@mui/material/Popover';\nimport TextField from '@mui/material/TextField';\nimport Typography from '@mui/material/Typography';\n\nimport { editorClasses } from '../classes.js';\nimport { ToolbarItem } from './toolbar-item.js';\n\ninterface ImageBlockProps {\n labels: EditorLabels;\n editor: Editor;\n icon: EditorToolbarItemProps['icon'];\n}\n\nexport function ImageBlock({ editor, icon, labels }: ImageBlockProps) {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const open = Boolean(anchorEl);\n const [state, setState] = useState({ imageUrl: '', altText: '' });\n\n const handleOpen = useCallback((event: React.MouseEvent<HTMLButtonElement>) => {\n setAnchorEl(event.currentTarget);\n }, []);\n\n const handleClose = useCallback(() => {\n setAnchorEl(null);\n }, []);\n\n const handleApply = useCallback(() => {\n handleClose();\n setState({ imageUrl: '', altText: '' });\n editor.chain().focus().setImage({ src: state.imageUrl, alt: state.altText }).run();\n }, [editor, handleClose, state]);\n\n const popoverId = open ? 'image-popover' : undefined;\n\n return (\n <>\n <ToolbarItem\n aria-describedby={popoverId}\n aria-label={labels.insertImage}\n className={editorClasses.toolbar.image}\n onClick={handleOpen}\n icon={icon}\n />\n\n <Popover\n id={popoverId}\n open={open}\n anchorEl={anchorEl}\n onClose={handleClose}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}\n slotProps={{\n paper: {\n sx: { p: 2.5, gap: 1.25, width: 1, maxWidth: 320, display: 'flex', flexDirection: 'column' },\n },\n }}\n >\n <Typography variant=\"subtitle2\">{labels.imagePopoverTitle}</Typography>\n <TextField\n fullWidth\n size=\"small\"\n label={labels.imageUrlField}\n placeholder=\"https://\"\n value={state.imageUrl}\n onChange={(e) => setState((prev) => ({ ...prev, imageUrl: e.target.value }))}\n />\n <TextField\n fullWidth\n size=\"small\"\n label={labels.imageAltField}\n value={state.altText}\n onChange={(e) => setState((prev) => ({ ...prev, altText: e.target.value }))}\n />\n <Button variant=\"contained\" disabled={!state.imageUrl} onClick={handleApply} sx={{ alignSelf: 'flex-end' }}>\n {labels.imageApply}\n </Button>\n </Popover>\n </>\n );\n}\n","import type { Editor } from '@tiptap/react';\nimport type { TextTransformValue } from '../extensions/text-transform.js';\n\nimport { useEditorState } from '@tiptap/react';\n\nexport type TextAlignValue = 'left' | 'center' | 'right' | 'justify';\nexport type TextHeadingLevel = 1 | 2 | 3 | 4 | 5 | 6 | null;\n\nexport interface UseToolbarStateReturn {\n isBold: boolean;\n isCode: boolean;\n isLink: boolean;\n isItalic: boolean;\n isStrike: boolean;\n isUnderline: boolean;\n isCodeBlock: boolean;\n isBulletList: boolean;\n isBlockquote: boolean;\n isOrderedList: boolean;\n isTaskList: boolean;\n isAlign: (value: TextAlignValue) => boolean;\n isTextLevel: (value: TextHeadingLevel) => boolean;\n isTextTransform: (value: TextTransformValue) => boolean;\n canUndo: boolean;\n canRedo: boolean;\n}\n\nexport function useToolbarState(editor: Editor): UseToolbarStateReturn {\n return useEditorState({\n editor,\n selector: (ctx) => {\n const canRun = ctx.editor.can().chain().focus();\n\n return {\n isBold: ctx.editor.isActive('bold'),\n isCode: ctx.editor.isActive('code'),\n isLink: ctx.editor.isActive('link'),\n isItalic: ctx.editor.isActive('italic'),\n isStrike: ctx.editor.isActive('strike'),\n isUnderline: ctx.editor.isActive('underline'),\n isCodeBlock: ctx.editor.isActive('codeBlock'),\n isBulletList: ctx.editor.isActive('bulletList'),\n isBlockquote: ctx.editor.isActive('blockquote'),\n isOrderedList: ctx.editor.isActive('orderedList'),\n isTaskList: ctx.editor.isActive('taskList'),\n isAlign: (value: TextAlignValue) => ctx.editor.isActive({ textAlign: value }),\n isTextTransform: (value: TextTransformValue) => ctx.editor.isActive('textTransform', { textTransform: value }),\n isTextLevel: (value: TextHeadingLevel) =>\n value ? ctx.editor.isActive('heading', { level: value }) : ctx.editor.isActive('paragraph'),\n canUndo: canRun.undo().run(),\n canRedo: canRun.redo().run(),\n };\n },\n });\n}\n","import type { EditorToolbarProps } from '../types.js';\n\nimport Divider from '@mui/material/Divider';\nimport { alpha, styled } from '@mui/material/styles';\n\nimport { editorClasses } from '../classes.js';\nimport { ToolbarItem } from './toolbar-item.js';\nimport { HeadingBlock } from './heading-block.js';\nimport { LinkBlock } from './link-block.js';\nimport { ImageBlock } from './image-block.js';\nimport { useToolbarState } from './use-toolbar-state.js';\nimport {\n BoldIcon,\n ItalicIcon,\n UnderlineIcon,\n StrikeIcon,\n InlineCodeIcon,\n BulletListIcon,\n OrderedListIcon,\n CheckListIcon,\n AlignLeftIcon,\n AlignCenterIcon,\n AlignRightIcon,\n AlignJustifyIcon,\n QuoteIcon,\n CodeBlockIcon,\n HorizontalRuleIcon,\n LinkIcon,\n UnlinkIcon,\n ImageIcon,\n HardBreakIcon,\n ClearMarksIcon,\n UndoIcon,\n RedoIcon,\n FullscreenIcon,\n ExitFullscreenIcon,\n} from '../icons/index.js';\n\nexport function Toolbar({ editor, toolbar, fullscreen, onToggleFullscreen, labels }: EditorToolbarProps) {\n const state = useToolbarState(editor);\n const has = (item: string) => toolbar.items.has(item as any);\n const chain = () => editor.chain().focus();\n\n const hasAnyInGroup = (...items: string[]) => items.some(has);\n\n return (\n <ToolbarRoot className={editorClasses.toolbar.root}>\n {/* Heading selector */}\n {has('heading') && (\n <>\n <HeadingBlock labels={labels} editor={editor} isActive={state.isTextLevel} />\n <ToolbarDivider />\n </>\n )}\n\n {/* Text styles */}\n {hasAnyInGroup('bold', 'italic', 'underline', 'strike', 'code') && (\n <>\n <ToolbarBlock>\n {has('bold') && (\n <ToolbarItem\n aria-label={labels.bold}\n active={state.isBold}\n className={editorClasses.toolbar.bold}\n onClick={() => chain().toggleBold().run()}\n icon={<BoldIcon />}\n />\n )}\n {has('italic') && (\n <ToolbarItem\n aria-label={labels.italic}\n active={state.isItalic}\n className={editorClasses.toolbar.italic}\n onClick={() => chain().toggleItalic().run()}\n icon={<ItalicIcon />}\n />\n )}\n {has('underline') && (\n <ToolbarItem\n aria-label={labels.underline}\n active={state.isUnderline}\n className={editorClasses.toolbar.underline}\n onClick={() => chain().toggleUnderline().run()}\n icon={<UnderlineIcon />}\n />\n )}\n {has('strike') && (\n <ToolbarItem\n aria-label={labels.strike}\n active={state.isStrike}\n className={editorClasses.toolbar.strike}\n onClick={() => chain().toggleStrike().run()}\n icon={<StrikeIcon />}\n />\n )}\n {has('code') && (\n <ToolbarItem\n aria-label={labels.inlineCode}\n active={state.isCode}\n className={editorClasses.toolbar.code}\n onClick={() => chain().toggleCode().run()}\n icon={<InlineCodeIcon />}\n />\n )}\n </ToolbarBlock>\n <ToolbarDivider />\n </>\n )}\n\n {/* Lists */}\n {hasAnyInGroup('bulletList', 'orderedList', 'taskList') && (\n <>\n <ToolbarBlock>\n {has('bulletList') && (\n <ToolbarItem\n aria-label={labels.bulletList}\n active={state.isBulletList}\n className={editorClasses.toolbar.bulletList}\n onClick={() => chain().toggleBulletList().run()}\n icon={<BulletListIcon />}\n />\n )}\n {has('orderedList') && (\n <ToolbarItem\n aria-label={labels.orderedList}\n active={state.isOrderedList}\n className={editorClasses.toolbar.orderedList}\n onClick={() => chain().toggleOrderedList().run()}\n icon={<OrderedListIcon />}\n />\n )}\n {has('taskList') && (\n <ToolbarItem\n aria-label={labels.taskList}\n active={state.isTaskList}\n className={editorClasses.toolbar.taskList}\n onClick={() => chain().toggleTaskList().run()}\n icon={<CheckListIcon />}\n />\n )}\n </ToolbarBlock>\n <ToolbarDivider />\n </>\n )}\n\n {/* Alignment */}\n {hasAnyInGroup('alignLeft', 'alignCenter', 'alignRight', 'alignJustify') && (\n <>\n <ToolbarBlock>\n {has('alignLeft') && (\n <ToolbarItem\n aria-label={labels.alignLeft}\n active={state.isAlign('left')}\n className={editorClasses.toolbar.alignLeft}\n onClick={() => chain().setTextAlign('left').run()}\n icon={<AlignLeftIcon />}\n />\n )}\n {has('alignCenter') && (\n <ToolbarItem\n aria-label={labels.alignCenter}\n active={state.isAlign('center')}\n className={editorClasses.toolbar.alignCenter}\n onClick={() => chain().setTextAlign('center').run()}\n icon={<AlignCenterIcon />}\n />\n )}\n {has('alignRight') && (\n <ToolbarItem\n aria-label={labels.alignRight}\n active={state.isAlign('right')}\n className={editorClasses.toolbar.alignRight}\n onClick={() => chain().setTextAlign('right').run()}\n icon={<AlignRightIcon />}\n />\n )}\n {has('alignJustify') && (\n <ToolbarItem\n aria-label={labels.alignJustify}\n active={state.isAlign('justify')}\n className={editorClasses.toolbar.alignJustify}\n onClick={() => chain().setTextAlign('justify').run()}\n icon={<AlignJustifyIcon />}\n />\n )}\n </ToolbarBlock>\n <ToolbarDivider />\n </>\n )}\n\n {/* Block elements */}\n {hasAnyInGroup('blockquote', 'codeBlock', 'horizontalRule') && (\n <>\n <ToolbarBlock>\n {has('blockquote') && (\n <ToolbarItem\n aria-label={labels.blockquote}\n active={state.isBlockquote}\n className={editorClasses.toolbar.blockquote}\n onClick={() => chain().toggleBlockquote().run()}\n icon={<QuoteIcon />}\n />\n )}\n {has('codeBlock') && (\n <ToolbarItem\n aria-label={labels.codeBlock}\n active={state.isCodeBlock}\n className={editorClasses.toolbar.codeBlock}\n onClick={() => chain().toggleCodeBlock().run()}\n icon={<CodeBlockIcon />}\n />\n )}\n {has('horizontalRule') && (\n <ToolbarItem\n aria-label={labels.horizontalRule}\n className={editorClasses.toolbar.hr}\n onClick={() => chain().setHorizontalRule().run()}\n icon={<HorizontalRuleIcon />}\n />\n )}\n </ToolbarBlock>\n <ToolbarDivider />\n </>\n )}\n\n {/* Link & Image */}\n {hasAnyInGroup('link', 'image') && (\n <>\n <ToolbarBlock>\n {has('link') && (\n <LinkBlock labels={labels} editor={editor} active={state.isLink} linkIcon={<LinkIcon />} unlinkIcon={<UnlinkIcon />} />\n )}\n {has('image') && <ImageBlock labels={labels} editor={editor} icon={<ImageIcon />} />}\n </ToolbarBlock>\n <ToolbarDivider />\n </>\n )}\n\n {/* Utilities */}\n {hasAnyInGroup('hardBreak', 'clearFormat') && (\n <>\n <ToolbarBlock>\n {has('hardBreak') && (\n <ToolbarItem\n aria-label={labels.hardBreak}\n className={editorClasses.toolbar.hardBreak}\n onClick={() => chain().setHardBreak().run()}\n icon={<HardBreakIcon />}\n />\n )}\n {has('clearFormat') && (\n <ToolbarItem\n aria-label={labels.clearFormat}\n className={editorClasses.toolbar.clear}\n onClick={() => chain().clearNodes().unsetAllMarks().run()}\n icon={<ClearMarksIcon />}\n />\n )}\n </ToolbarBlock>\n <ToolbarDivider />\n </>\n )}\n\n {/* Undo/Redo */}\n {hasAnyInGroup('undo', 'redo') && (\n <>\n <ToolbarBlock>\n {has('undo') && (\n <ToolbarItem\n aria-label={labels.undo}\n disabled={!state.canUndo}\n className={editorClasses.toolbar.undo}\n onClick={() => chain().undo().run()}\n icon={<UndoIcon />}\n />\n )}\n {has('redo') && (\n <ToolbarItem\n aria-label={labels.redo}\n disabled={!state.canRedo}\n className={editorClasses.toolbar.redo}\n onClick={() => chain().redo().run()}\n icon={<RedoIcon />}\n />\n )}\n </ToolbarBlock>\n <ToolbarDivider />\n </>\n )}\n\n {/* Fullscreen */}\n {has('fullscreen') && (\n <ToolbarBlock>\n <ToolbarItem\n aria-label={fullscreen ? labels.exitFullscreen : labels.fullscreen}\n active={fullscreen}\n className={editorClasses.toolbar.fullscreen}\n onClick={onToggleFullscreen}\n icon={fullscreen ? <ExitFullscreenIcon /> : <FullscreenIcon />}\n />\n </ToolbarBlock>\n )}\n </ToolbarRoot>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Styled\n// ---------------------------------------------------------------------------\n\nconst ToolbarRoot = styled('div')(({ theme }) => ({\n flexWrap: 'wrap',\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n gap: theme.spacing(1),\n padding: theme.spacing(1.25),\n borderTopLeftRadius: 'inherit',\n borderTopRightRadius: 'inherit',\n backgroundColor: theme.palette.background.paper,\n borderBottom: `solid 1px ${alpha(theme.palette.grey[500], 0.2)}`,\n}));\n\nconst ToolbarBlock = styled('div')(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(0.5),\n}));\n\nfunction ToolbarDivider() {\n return <Divider orientation=\"vertical\" flexItem sx={{ height: 16, my: 'auto' }} />;\n}\n","import type { Editor } from '@tiptap/react';\nimport type { EditorLabels } from '../types.js';\n\nimport { BubbleMenu } from '@tiptap/react/menus';\nimport Divider from '@mui/material/Divider';\nimport { alpha, styled } from '@mui/material/styles';\n\nimport { editorClasses } from '../classes.js';\nimport { ToolbarItem } from './toolbar-item.js';\nimport { LinkBlock } from './link-block.js';\nimport { useToolbarState } from './use-toolbar-state.js';\nimport {\n BoldIcon,\n ItalicIcon,\n UnderlineIcon,\n StrikeIcon,\n LinkIcon,\n UnlinkIcon,\n ClearMarksIcon,\n} from '../icons/index.js';\n\ninterface BubbleToolbarProps {\n editor: Editor;\n labels: EditorLabels;\n}\n\nexport function BubbleToolbar({ editor, labels }: BubbleToolbarProps) {\n const state = useToolbarState(editor);\n const chain = () => editor.chain().focus();\n\n return (\n <BubbleMenu editor={editor}>\n <BubbleRoot>\n <ToolbarItem\n aria-label={labels.bold}\n active={state.isBold}\n className={editorClasses.toolbar.bold}\n onClick={() => chain().toggleBold().run()}\n icon={<BoldIcon />}\n />\n <ToolbarItem\n aria-label={labels.italic}\n active={state.isItalic}\n className={editorClasses.toolbar.italic}\n onClick={() => chain().toggleItalic().run()}\n icon={<ItalicIcon />}\n />\n <ToolbarItem\n aria-label={labels.underline}\n active={state.isUnderline}\n className={editorClasses.toolbar.underline}\n onClick={() => chain().toggleUnderline().run()}\n icon={<UnderlineIcon />}\n />\n <ToolbarItem\n aria-label={labels.strike}\n active={state.isStrike}\n className={editorClasses.toolbar.strike}\n onClick={() => chain().toggleStrike().run()}\n icon={<StrikeIcon />}\n />\n <LinkBlock labels={labels} editor={editor} active={state.isLink} linkIcon={<LinkIcon />} unlinkIcon={<UnlinkIcon />} />\n <Divider orientation=\"vertical\" flexItem sx={{ height: 16, my: 'auto' }} />\n <ToolbarItem\n aria-label={labels.clearFormat}\n className={editorClasses.toolbar.clear}\n onClick={() => chain().clearNodes().unsetAllMarks().run()}\n icon={<ClearMarksIcon />}\n />\n </BubbleRoot>\n </BubbleMenu>\n );\n}\n\nconst BubbleRoot = styled('div')(({ theme }) => ({\n display: 'flex',\n gap: theme.spacing(0.5),\n padding: theme.spacing(0.5),\n borderRadius: theme.shape.borderRadius,\n boxShadow: theme.shadows[8],\n backgroundColor: theme.palette.background.paper,\n border: `1px solid ${alpha(theme.palette.grey[500], 0.16)}`,\n}));\n","import type { ReactNodeViewProps } from '@tiptap/react';\n\nimport { useCallback } from 'react';\nimport { NodeViewContent, NodeViewWrapper } from '@tiptap/react';\n\nimport { editorClasses } from '../classes.js';\nimport { DEFAULT_EDITOR_LABELS } from '../types.js';\n\nexport function CodeHighlightBlock(props: ReactNodeViewProps) {\n const { node, extension, updateAttributes } = props;\n const language = node.attrs.language;\n const lowlight = extension.options.lowlight;\n // A node view is rendered by the extension, not by the toolbar, so the\n // label reaches it through the extension's options — the same door the\n // lowlight instance comes through. The default keeps the previous word for\n // anyone configuring the extension directly.\n const autoLabel: string = extension.options.autoLanguageLabel ?? DEFAULT_EDITOR_LABELS.codeLanguageAuto;\n\n const handleChangeLanguage = useCallback(\n (event: React.ChangeEvent<HTMLSelectElement>) => {\n updateAttributes({ language: event.target.value });\n },\n [updateAttributes]\n );\n\n return (\n <NodeViewWrapper className={editorClasses.content.codeBlock}>\n <select\n name=\"language\"\n contentEditable={false}\n value={language || 'null'}\n onChange={handleChangeLanguage}\n className={editorClasses.content.langSelect}\n >\n <option value=\"null\">{autoLabel}</option>\n <option disabled>—</option>\n {lowlight.listLanguages().map((lang: string) => (\n <option key={lang} value={lang}>\n {lang}\n </option>\n ))}\n </select>\n <pre>\n <NodeViewContent<'code'> as=\"code\" />\n </pre>\n </NodeViewWrapper>\n );\n}\n","import { Extension } from '@tiptap/core';\n\nexport const ClearFormat = Extension.create({\n name: 'clearFormat',\n addKeyboardShortcuts() {\n return {\n 'Mod-Shift-X': ({ editor }) => editor.chain().focus().clearNodes().unsetAllMarks().run(),\n };\n },\n});\n","import type { CommandProps } from '@tiptap/core';\n\nimport { Mark } from '@tiptap/core';\n\nexport type TextTransformValue = 'uppercase' | 'lowercase' | 'capitalize';\n\nexport interface TextTransformOptions {\n allowedValues: TextTransformValue[];\n defaultValue?: TextTransformValue;\n}\n\nexport interface TextTransformAttributes {\n textTransform?: TextTransformValue;\n}\n\ndeclare module '@tiptap/core' {\n interface Commands<ReturnType> {\n textTransform: {\n unsetTextTransform: () => ReturnType;\n setTextTransform: (value: TextTransformValue) => ReturnType;\n toggleTextTransform: (value: TextTransformValue) => ReturnType;\n };\n }\n}\n\nconst isHTMLElement = (node: unknown): node is HTMLElement => node instanceof HTMLElement;\n\nconst isValidTextTransform = (value: unknown, allowed: readonly TextTransformValue[]): value is TextTransformValue =>\n typeof value === 'string' && allowed.includes(value as TextTransformValue);\n\nexport const TextTransform = Mark.create<TextTransformOptions, TextTransformAttributes>({\n name: 'textTransform',\n\n addOptions() {\n return {\n allowedValues: ['uppercase', 'lowercase', 'capitalize'],\n defaultValue: undefined,\n };\n },\n\n addAttributes() {\n return {\n textTransform: {\n default: this.options.defaultValue,\n parseHTML: (element): TextTransformValue | undefined => {\n if (!isHTMLElement(element)) return undefined;\n const rawValue =\n element.style.textTransform || element.getAttribute('style')?.match(/text-transform:\\s*(\\w+)/)?.[1];\n return isValidTextTransform(rawValue, this.options.allowedValues) ? rawValue : undefined;\n },\n renderHTML: (attributes: TextTransformAttributes): Record<string, string> => {\n if (!attributes.textTransform) return {};\n return { style: `text-transform: ${attributes.textTransform}` };\n },\n },\n };\n },\n\n parseHTML() {\n return [\n {\n tag: 'span[style]',\n getAttrs: (node) => {\n if (!isHTMLElement(node)) return null;\n const styleValue = node.style.textTransform;\n return isValidTextTransform(styleValue, this.options.allowedValues) ? {} : false;\n },\n },\n ];\n },\n\n renderHTML({ HTMLAttributes }) {\n return ['span', HTMLAttributes, 0];\n },\n\n addCommands() {\n return {\n setTextTransform:\n (value: TextTransformValue) =>\n ({ commands }: CommandProps): boolean => {\n if (!isValidTextTransform(value, this.options.allowedValues)) return false;\n return commands.setMark(this.name, { textTransform: value });\n },\n unsetTextTransform:\n () =>\n ({ commands }: CommandProps): boolean =>\n commands.unsetMark(this.name),\n toggleTextTransform:\n (value: TextTransformValue) =>\n ({ editor, commands }: CommandProps): boolean => {\n if (!isValidTextTransform(value, this.options.allowedValues)) return false;\n const isActive = editor.isActive(this.name, { textTransform: value });\n return isActive ? commands.unsetTextTransform() : commands.setTextTransform(value);\n },\n };\n },\n});\n","import type { EditorProps } from './types.js';\nimport { DEFAULT_EDITOR_LABELS } from './types.js';\n\nimport { useMemo, useState, useEffect, useCallback } from 'react';\nimport { common, createLowlight } from 'lowlight';\nimport StarterKitExtension from '@tiptap/starter-kit';\nimport UnderlineExtension from '@tiptap/extension-underline';\nimport TextAlignExtension from '@tiptap/extension-text-align';\nimport ImageExtension from '@tiptap/extension-image';\nimport LinkExtension from '@tiptap/extension-link';\nimport PlaceholderExtension from '@tiptap/extension-placeholder';\nimport TaskListExtension from '@tiptap/extension-task-list';\nimport TaskItemExtension from '@tiptap/extension-task-item';\nimport CodeBlockLowlightExtension, { type CodeBlockLowlightOptions } from '@tiptap/extension-code-block-lowlight';\nimport { useEditor, EditorContent, ReactNodeViewRenderer } from '@tiptap/react';\n\nimport Box from '@mui/material/Box';\nimport Portal from '@mui/material/Portal';\nimport Backdrop from '@mui/material/Backdrop';\nimport FormHelperText from '@mui/material/FormHelperText';\n\nimport { editorClasses } from './classes.js';\nimport { EditorRoot } from './styles.js';\nimport { resolveToolbar } from './presets.js';\nimport { Toolbar } from './toolbar/toolbar.js';\nimport { BubbleToolbar } from './toolbar/bubble-toolbar.js';\nimport { CodeHighlightBlock } from './toolbar/code-highlight-block.js';\nimport { ClearFormat } from './extensions/clear-format.js';\nimport { TextTransform } from './extensions/text-transform.js';\n\n/**\n * PrismEditor — configurable rich text editor built on TipTap.\n *\n * Use `toolbar` prop to select a preset or provide custom toolbar items:\n * - `\"full\"` — CMS pages, blog articles (all features)\n * - `\"standard\"` — blog posts, forums (default)\n * - `\"compact\"` — comments, replies\n * - `\"minimal\"` — short feedback\n * - `\"chat\"` — messaging\n * - `\"inline\"` — no toolbar (titles, captions)\n * - `{ items: [...], bubbleMenu: true }` — custom\n */\nexport function Editor({\n sx,\n error,\n onChange,\n slotProps,\n helperText,\n resetValue,\n className,\n toolbar: toolbarConfig,\n bubbleMenu: bubbleMenuProp,\n format = 'json',\n minHeight = 160,\n maxHeight,\n editable = true,\n extraExtensions,\n placeholder = 'Write something...',\n labels: labelOverrides,\n ref: contentRef,\n value: initialContent = '',\n ...other\n}: EditorProps) {\n const [fullscreen, setFullscreen] = useState(false);\n const [rerenderKey, setRerenderKey] = useState(0);\n\n const resolvedToolbar = useMemo(() => resolveToolbar(toolbarConfig), [toolbarConfig]);\n const showBubbleMenu = bubbleMenuProp ?? resolvedToolbar.bubbleMenu;\n const showToolbar = resolvedToolbar.items.size > 0;\n\n const lowlight = useMemo(() => createLowlight(common), []);\n\n // Merged once per identity change so the toolbar's props stay stable.\n const labels = useMemo(() => ({ ...DEFAULT_EDITOR_LABELS, ...labelOverrides }), [labelOverrides]);\n\n // Parse initial content — if format is 'json' and value looks like JSON, parse it\n const parsedContent = useMemo(() => {\n if (!initialContent) return '';\n if (format === 'json' && initialContent.startsWith('{')) {\n try {\n return JSON.parse(initialContent);\n } catch {\n return initialContent;\n }\n }\n return initialContent;\n }, [initialContent, format]);\n\n // Publication/save handlers must observe every committed editor transaction.\n // Debounce persistence in the host, never delivery of the current value.\n const emitChange = useCallback(\n (editor: import('@tiptap/core').Editor) => {\n onChange?.(format === 'json' ? JSON.stringify(editor.getJSON()) : editor.getHTML());\n },\n [onChange, format]\n );\n\n const extensions = useMemo(() => {\n const has = (item: string) => resolvedToolbar.items.has(item as any);\n const exts: any[] = [\n StarterKitExtension.configure({\n codeBlock: false,\n // Underline and Link are registered separately (below) to allow per-preset control\n underline: false,\n link: false,\n code: has('code') ? { HTMLAttributes: { class: editorClasses.content.codeInline } } : false,\n heading: has('heading') ? { HTMLAttributes: { class: editorClasses.content.heading } } : false,\n horizontalRule: has('horizontalRule') ? { HTMLAttributes: { class: editorClasses.content.hr } } : false,\n listItem: { HTMLAttributes: { class: editorClasses.content.listItem } },\n blockquote: has('blockquote') ? { HTMLAttributes: { class: editorClasses.content.blockquote } } : false,\n bulletList: has('bulletList') ? { HTMLAttributes: { class: editorClasses.content.bulletList } } : false,\n orderedList: has('orderedList') ? { HTMLAttributes: { class: editorClasses.content.orderedList } } : false,\n }),\n PlaceholderExtension.configure({\n placeholder,\n emptyEditorClass: editorClasses.content.placeholder,\n }),\n ClearFormat,\n TextTransform,\n ];\n\n if (has('underline')) {\n exts.push(UnderlineExtension);\n }\n\n if (has('alignLeft') || has('alignCenter') || has('alignRight') || has('alignJustify')) {\n exts.push(TextAlignExtension.configure({ types: ['heading', 'paragraph'] }));\n }\n\n if (has('image')) {\n exts.push(ImageExtension.configure({ HTMLAttributes: { class: editorClasses.content.image } }));\n }\n\n if (has('link')) {\n exts.push(\n LinkExtension.configure({\n openOnClick: false,\n HTMLAttributes: { class: editorClasses.content.link },\n })\n );\n }\n\n if (has('codeBlock')) {\n exts.push(\n CodeBlockLowlightExtension.extend<CodeBlockLowlightOptions & { autoLanguageLabel: string }>({\n addOptions() {\n const inherited = this.parent?.() as CodeBlockLowlightOptions;\n return { ...inherited, autoLanguageLabel: DEFAULT_EDITOR_LABELS.codeLanguageAuto };\n },\n addNodeView: () => ReactNodeViewRenderer(CodeHighlightBlock),\n }).configure({ lowlight, autoLanguageLabel: labels.codeLanguageAuto })\n );\n }\n\n if (has('taskList')) {\n exts.push(\n TaskListExtension.configure({ HTMLAttributes: { class: editorClasses.content.taskList } }),\n TaskItemExtension.configure({\n nested: true,\n HTMLAttributes: { class: editorClasses.content.taskItem },\n })\n );\n }\n\n if (extraExtensions) {\n exts.push(...extraExtensions);\n }\n\n return exts;\n // `labels` is a dependency because the code block's language picker is a\n // node view: its word lives in the extension, so a language switch has to\n // rebuild the extensions to reach it.\n }, [resolvedToolbar, placeholder, lowlight, extraExtensions, labels]);\n\n const editor = useEditor({\n editable,\n immediatelyRender: false,\n content: parsedContent,\n shouldRerenderOnTransaction: !!rerenderKey,\n onUpdate: (ctx) => {\n emitChange(ctx.editor);\n },\n extensions,\n ...other,\n });\n\n // Fullscreen handlers\n const handleToggleFullscreen = useCallback(() => {\n editor?.unmount();\n setFullscreen((prev) => !prev);\n setRerenderKey((prev) => prev + 1);\n }, [editor]);\n\n const handleExitFullscreen = useCallback(\n (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n editor?.unmount();\n setFullscreen(false);\n setRerenderKey((prev) => prev + 1);\n }\n },\n [editor]\n );\n\n // Sync content from outside\n useEffect(() => {\n const timer = setTimeout(() => {\n if (!editor?.isDestroyed && editor?.isEmpty && parsedContent && parsedContent !== '<p></p>') {\n editor?.commands.setContent(parsedContent);\n }\n }, 200);\n return () => clearTimeout(timer);\n }, [parsedContent, editor]);\n\n // Reset support\n useEffect(() => {\n if (resetValue && !initialContent) {\n editor?.commands.clearContent();\n }\n }, [initialContent, resetValue, editor]);\n\n // Fullscreen ESC listener\n useEffect(() => {\n if (!fullscreen) return undefined;\n document.body.style.overflow = 'hidden';\n window.addEventListener('keydown', handleExitFullscreen);\n return () => {\n document.body.style.overflow = '';\n window.removeEventListener('keydown', handleExitFullscreen);\n };\n }, [fullscreen, handleExitFullscreen]);\n\n const rootClassName = [\n editorClasses.root,\n className,\n error && editorClasses.state.error,\n !editable && editorClasses.state.disabled,\n fullscreen && editorClasses.state.fullscreen,\n ]\n .filter(Boolean)\n .join(' ');\n\n return (\n <Portal disablePortal={!fullscreen}>\n {fullscreen && <Backdrop open sx={(theme) => ({ zIndex: theme.zIndex.modal - 1 })} />}\n\n <Box\n {...slotProps?.wrapper}\n sx={[\n { display: 'flex', flexDirection: 'column' },\n ...(Array.isArray(slotProps?.wrapper?.sx) ? slotProps.wrapper.sx : [slotProps?.wrapper?.sx]),\n ]}\n >\n <EditorRoot className={rootClassName} sx={[{ minHeight }, ...(Array.isArray(sx) ? sx : [sx])]}>\n {editor && !editor.isDestroyed && (\n <>\n {showToolbar && (\n <Toolbar\n labels={labels}\n editor={editor}\n toolbar={resolvedToolbar}\n fullscreen={fullscreen}\n onToggleFullscreen={handleToggleFullscreen}\n />\n )}\n {showBubbleMenu && <BubbleToolbar editor={editor} labels={labels} />}\n <EditorContent\n ref={contentRef}\n spellCheck={false}\n autoComplete=\"off\"\n autoCapitalize=\"off\"\n editor={editor}\n className={editorClasses.content.root}\n style={maxHeight ? { maxHeight, overflowY: 'auto' } : undefined}\n />\n </>\n )}\n </EditorRoot>\n\n {helperText && <FormHelperText error={!!error}>{helperText}</FormHelperText>}\n </Box>\n </Portal>\n );\n}\n"]}
|