@myoc/excalidraw 0.20.1 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/CHANGELOG.md +253 -0
  2. package/dist/dev/{chunk-VBVJJWUO.js → chunk-A5GXRKT7.js} +24 -2
  3. package/dist/dev/chunk-A5GXRKT7.js.map +7 -0
  4. package/dist/dev/{chunk-6JJSWC4C.js → chunk-ETORD5CS.js} +41 -1
  5. package/dist/dev/{chunk-6JJSWC4C.js.map → chunk-ETORD5CS.js.map} +3 -3
  6. package/dist/dev/{chunk-EYSZ36MK.js → chunk-RCINQZKB.js} +2 -2
  7. package/dist/dev/{chunk-JBD373VY.js → chunk-TYPY4HGC.js} +374 -75
  8. package/dist/dev/chunk-TYPY4HGC.js.map +7 -0
  9. package/dist/dev/data/{image-KRZO2CVW.js → image-LHOOLEDU.js} +3 -3
  10. package/dist/dev/index.css +121 -0
  11. package/dist/dev/index.css.map +2 -2
  12. package/dist/dev/index.js +1911 -1513
  13. package/dist/dev/index.js.map +4 -4
  14. package/dist/dev/locales/{en-V2WTRX5T.js → en-5NWRTZ4G.js} +4 -2
  15. package/dist/dev/subset-shared.chunk.js +4 -2
  16. package/dist/dev/subset-worker.chunk.js +2 -2
  17. package/dist/prod/{chunk-THEEFQ4B.js → chunk-4M4QNZNP.js} +1 -1
  18. package/dist/prod/{chunk-MZBVWY5X.js → chunk-FX6OEDRJ.js} +4 -4
  19. package/dist/prod/chunk-UXMXN2SG.js +4 -0
  20. package/dist/prod/{chunk-Z5NKEFVG.js → chunk-VDR2JODW.js} +10 -10
  21. package/dist/prod/data/image-XO3VLL25.js +1 -0
  22. package/dist/prod/index.css +1 -1
  23. package/dist/prod/index.js +16 -16
  24. package/dist/prod/locales/en-3B3DKM74.js +1 -0
  25. package/dist/prod/subset-shared.chunk.js +1 -1
  26. package/dist/prod/subset-worker.chunk.js +1 -1
  27. package/dist/types/common/src/constants.d.ts +7 -2
  28. package/dist/types/common/src/font-metadata.d.ts +4 -2
  29. package/dist/types/element/src/types.d.ts +2 -2
  30. package/dist/types/excalidraw/appState.d.ts +1 -1
  31. package/dist/types/excalidraw/charts/charts.constants.d.ts +1 -1
  32. package/dist/types/excalidraw/components/FontPicker/FontPicker.d.ts +1 -1
  33. package/dist/types/excalidraw/components/FontPicker/FontPickerList.d.ts +15 -4
  34. package/dist/types/excalidraw/components/FontPicker/FontWeightPicker.d.ts +34 -0
  35. package/dist/types/excalidraw/components/FontPicker/keyboardNavHandlers.d.ts +3 -2
  36. package/dist/types/excalidraw/fonts/ExcalidrawFontFace.d.ts +2 -1
  37. package/dist/types/excalidraw/fonts/Fonts.d.ts +15 -4
  38. package/dist/types/excalidraw/fonts/googleFonts.d.ts +40 -0
  39. package/dist/types/excalidraw/index.d.ts +2 -1
  40. package/dist/types/excalidraw/subset/subset-main.d.ts +1 -0
  41. package/dist/types/excalidraw/subset/subset-shared.chunk.d.ts +1 -0
  42. package/dist/types/excalidraw/subset/woff2/fontMetrics.d.ts +8 -0
  43. package/dist/types/excalidraw/types.d.ts +42 -0
  44. package/package.json +4 -4
  45. package/dist/dev/chunk-JBD373VY.js.map +0 -7
  46. package/dist/dev/chunk-VBVJJWUO.js.map +0 -7
  47. package/dist/prod/chunk-CQHKTNJ6.js +0 -4
  48. package/dist/prod/data/image-3WH4CMOG.js +0 -1
  49. package/dist/prod/locales/en-ALU5NMSJ.js +0 -1
  50. /package/dist/dev/{chunk-EYSZ36MK.js.map → chunk-RCINQZKB.js.map} +0 -0
  51. /package/dist/dev/data/{image-KRZO2CVW.js.map → image-LHOOLEDU.js.map} +0 -0
  52. /package/dist/dev/locales/{en-V2WTRX5T.js.map → en-5NWRTZ4G.js.map} +0 -0
package/CHANGELOG.md CHANGED
@@ -6642,4 +6642,257 @@ First release of `@excalidraw/excalidraw`## Excalidraw Library
6642
6642
  - Incorrect import for color (was moved to common)
6643
6643
 
6644
6644
  ---
6645
+ ## Excalidraw Library
6646
+
6647
+ **_This section lists the updates made to the excalidraw library and will not affect the integration._**
6648
+
6649
+ ### Features
6650
+
6651
+ - Support responsive toolbar overflow
6652
+
6653
+ - Add some ui improvemnets
6654
+
6655
+ - Renew UI and organise
6656
+
6657
+ - Expose ability to use compact mode and also a catalog of actions avaialble
6658
+
6659
+ - Add hint and smart zoom better handling
6660
+
6661
+ - Add double click to zoom in both view and edit mode
6662
+
6663
+ - Add smart zoom hints and hold to zoom on object
6664
+
6665
+ - Add ability to scroll between images with arrows when nothing selected and double click to smartzoom while in view mode.
6666
+
6667
+ - Add canvas horizontal and vertical flipping
6668
+
6669
+ - Add non-stacking aligning
6670
+
6671
+ - Allow view mode breaking when dropping or adding file and fix view mode and edit mode labels and stuff
6672
+
6673
+ - Add search on canvas as part of more tools
6674
+
6675
+ - Capture all raw data in a drag event so it can be parsed later
6676
+
6677
+ - Add apis for thumbhash as well as blur and smooth blur to non-blured animation.
6678
+
6679
+ - Add forced view mode state
6680
+
6681
+ - Allow images to be added with custom data
6682
+
6683
+ - Add custom context menu stuff when right clicking images
6684
+
6685
+ - Remove library for our fork
6686
+
6687
+ - Remove command palette from our fork
6688
+
6689
+ - Add drag z to zoom functionality
6690
+
6691
+ - Add editor preferences dialog in app (not api)
6692
+
6693
+ - Add editor settings as well as new arrange algos
6694
+
6695
+ - Arrow binding is a preference [#10839](https://github.com/excalidraw/excalidraw/pull/10839)
6696
+
6697
+ - Focus indicator [#10613](https://github.com/excalidraw/excalidraw/pull/10613)
6698
+
6699
+ - Support customizing TTD welcome screen [#10719](https://github.com/excalidraw/excalidraw/pull/10719)
6700
+
6701
+ - Prevent pasting excalidraw into textarea & paste element text if avail [#10710](https://github.com/excalidraw/excalidraw/pull/10710)
6702
+
6703
+ - Add ability to turn off compression for files that are smaller than a given size
6704
+
6705
+ - Add lock tool to the dropdown and also add the status of the extra tools to be the same icon as the selected tool
6706
+
6707
+ - Add view mode button
6708
+
6709
+ - Add multiple image copy paste or drag and drop
6710
+
6711
+ - Multiple image additions from clipboard
6712
+
6713
+ - Add arrange elements action
6714
+
6715
+ - Add top picks to appProps for both stoke color and background color
6716
+
6717
+ ### Fixes
6718
+
6719
+ - Drag to zoom for viewmode
6720
+
6721
+ - Commit gif improvements
6722
+
6723
+ - Ensure clipboard copies as png so that webm and other types of images are copied properly
6724
+
6725
+ - Use a more efficient wasm gif decoder
6726
+
6727
+ - Tests
6728
+
6729
+ - Ensure playback of gifs does not trigger onchanges
6730
+
6731
+ - Ensure that worker works and also scrolling works for the frames
6732
+
6733
+ - Fix scrolling and add debug logs for decoding
6734
+
6735
+ - GIF controls
6736
+
6737
+ - Issues
6738
+
6739
+ - Review
6740
+
6741
+ - Refactor into its own gif modules
6742
+
6743
+ - Add gif support without good icons yet
6744
+
6745
+ - Normalise before adding image to canvas via api
6746
+
6747
+ - Dont silently fail when adding an unsupported image
6748
+
6749
+ - Ensure that custom data is properly passed into the excalidraw canvas
6750
+
6751
+ - Ensure that normalise and arrange are still available and fix menu placement
6752
+
6753
+ - Fix regression on normalise and arrange
6754
+
6755
+ - Dont couple upload and download progresses or errors
6756
+
6757
+ - Invalid error state on element when the item was cleared and reconciled and also dont link download error to the element error
6758
+
6759
+ - Smartzoom and stuff
6760
+
6761
+ - Fix sidebar overflow
6762
+
6763
+ - Restore hold z to zoom
6764
+
6765
+ - Smartzoom not taking viewport factor setting and also bad error state showing the icon even if its null
6766
+
6767
+ - Test
6768
+
6769
+ - Persist memory
6770
+
6771
+ - Remove regressed right click menu items
6772
+
6773
+ - Restore the smartview and viewmode island button for mobile
6774
+
6775
+ - Some more regressions
6776
+
6777
+ - Allow host to customise render customisations like trails
6778
+
6779
+ - Restore lots of broken functionality due to regresssions
6780
+
6781
+ - Add ability to show error for upload
6782
+
6783
+ - Adjust appearance of transitionary states for the images
6784
+
6785
+ - Css for bottom bar
6786
+
6787
+ - Right clicking a link instantly opens the link fix: ensure that right clicking an image in the group still allows the image to be copied or whatever
6788
+
6789
+ - Add filename as a field to ExcalidrawImageElement
6790
+
6791
+ - Add missing max
6792
+
6793
+ - Fix search text not taking theme colors
6794
+
6795
+ - Add snap to grid at top
6796
+
6797
+ - Fix hand tool breaking tests
6798
+
6799
+ - Make z index of help modal higher
6800
+
6801
+ - Add hand button to the top bar
6802
+
6803
+ - LocalStorage is empty object on node@25 which breaks tests [#11240](https://github.com/excalidraw/excalidraw/pull/11240)
6804
+
6805
+ - Speculative fixes for arrow invariant failures [#11241](https://github.com/excalidraw/excalidraw/pull/11241)
6806
+
6807
+ - Group selection [#11234](https://github.com/excalidraw/excalidraw/pull/11234)
6808
+
6809
+ - Fractional index validation [#11258](https://github.com/excalidraw/excalidraw/pull/11258)
6810
+
6811
+ - Group defragmenting [#11269](https://github.com/excalidraw/excalidraw/pull/11269)
6812
+
6813
+ - Frame selection and membership [#11250](https://github.com/excalidraw/excalidraw/pull/11250)
6814
+
6815
+ - Pin 9 actions to commit SHA [#11075](https://github.com/excalidraw/excalidraw/pull/11075)
6816
+
6817
+ - Add grid color customisation
6818
+
6819
+ - Rotated rounded arrow center point [#10962](https://github.com/excalidraw/excalidraw/pull/10962)
6820
+
6821
+ - Other endpoint is not immediately updated on midpoint snap [#10933](https://github.com/excalidraw/excalidraw/pull/10933)
6822
+
6823
+ - Arrow point index Out-of-Bounds [#10922](https://github.com/excalidraw/excalidraw/pull/10922)
6824
+
6825
+ - DropdownMenu item badge position [#10895](https://github.com/excalidraw/excalidraw/pull/10895)
6826
+
6827
+ - Spacing in the left menu [#10880](https://github.com/excalidraw/excalidraw/pull/10880)
6828
+
6829
+ - "hand" tool active after exiting view mode if laser point was used [#10841](https://github.com/excalidraw/excalidraw/pull/10841)
6830
+
6831
+ - Multi-point arrow bound point update [#10831](https://github.com/excalidraw/excalidraw/pull/10831)
6832
+
6833
+ - Arrow overlap arrow behavior [#10732](https://github.com/excalidraw/excalidraw/pull/10732)
6834
+
6835
+ - Convert ArrowheadNoneIcon to component matching arrowhead icon pattern [#10789](https://github.com/excalidraw/excalidraw/pull/10789)
6836
+
6837
+ - Inside-inside bound arrow endpoint drag trigger focus point editor [#10771](https://github.com/excalidraw/excalidraw/pull/10771)
6838
+
6839
+ - Update arrowhead property defaultValue handling [#10778](https://github.com/excalidraw/excalidraw/pull/10778)
6840
+
6841
+ - Hex8 regression #10578 [#10773](https://github.com/excalidraw/excalidraw/pull/10773)
6842
+
6843
+ - Arrow update when cloned [#10747](https://github.com/excalidraw/excalidraw/pull/10747)
6844
+
6845
+ - Other binding converted from fixed to orbit unconditionally [#10748](https://github.com/excalidraw/excalidraw/pull/10748)
6846
+
6847
+ - Clarify welcome screen message about browser storage limitations [#10721](https://github.com/excalidraw/excalidraw/pull/10721)
6848
+
6849
+ - SVG Inversion on Safari [#10712](https://github.com/excalidraw/excalidraw/pull/10712)
6850
+
6851
+ - Coherent stats binding [#10718](https://github.com/excalidraw/excalidraw/pull/10718)
6852
+
6853
+ - Arrow endpoint offset [#10706](https://github.com/excalidraw/excalidraw/pull/10706)
6854
+
6855
+ - Increase iteration on curve intersection calc [#10707](https://github.com/excalidraw/excalidraw/pull/10707)
6856
+
6857
+ - Bound arrow elements for distribute and wyswig updates [#10702](https://github.com/excalidraw/excalidraw/pull/10702)
6858
+
6859
+ - Make release script work
6860
+
6861
+ - Issues
6862
+
6863
+ - Make mobile mode more myoc looking
6864
+
6865
+ - Add normalise functionality
6866
+
6867
+ - Npm dep versions
6868
+
6869
+ - Update with excalidraw
6870
+
6871
+ - Fix imports
6872
+
6873
+ - Fix mutateGroup to use scene.mutateGroup
6874
+
6875
+ - Imports
6876
+
6877
+ - Ensure that fileId is different for compressed vs uncompressed file
6878
+
6879
+ - Remove not working prop for dontResizeLimitMBs
6880
+
6881
+ - Add smartview for mobile
6882
+
6883
+ - Hide the alignment buttons if there is only one group selected (they do nothing if only one group is selected)
6884
+
6885
+ - Use css vars already provided instead of hard coding directly from oc-gray
6886
+
6887
+ - Remove unused variables
6888
+
6889
+ - Pass the new top pick color props properly
6890
+
6891
+ - Incorrect import for color (was moved to common)
6892
+
6893
+ ### Performance
6894
+
6895
+ - Cache hits in collision detection [#10648](https://github.com/excalidraw/excalidraw/pull/10648)
6896
+
6897
+ ---
6645
6898
 
@@ -73,6 +73,7 @@ var labels = {
73
73
  arrowtype_elbowed: "Elbow arrow",
74
74
  fontSize: "Font size",
75
75
  fontFamily: "Font family",
76
+ fontWeight: "Weight",
76
77
  addWatermark: 'Add "Made with Excalidraw"',
77
78
  handDrawn: "Hand-drawn",
78
79
  normal: "Normal",
@@ -594,13 +595,32 @@ var overwriteConfirm = {
594
595
  var quickSearch = {
595
596
  placeholder: "Quick search"
596
597
  };
598
+ var fontWeight = {
599
+ thin: "Thin",
600
+ extraLight: "Extra Light",
601
+ light: "Light",
602
+ regular: "Regular",
603
+ medium: "Medium",
604
+ semiBold: "Semi Bold",
605
+ bold: "Bold",
606
+ extraBold: "Extra Bold",
607
+ black: "Black",
608
+ more: "More weights\u2026"
609
+ };
597
610
  var fontList = {
598
611
  badge: {
599
612
  old: "old"
600
613
  },
601
614
  sceneFonts: "In this scene",
615
+ myFonts: "My fonts",
602
616
  availableFonts: "Available fonts",
603
- empty: "No fonts found"
617
+ builtInFonts: "Built-in",
618
+ empty: "No fonts found",
619
+ browse: "Browse Google Fonts\u2026",
620
+ emptyLibrary: "Your font library is empty. Browse Google Fonts to add some.",
621
+ addToLibrary: "Add to library",
622
+ addToLibraryLocked: "Add to library (upgrade required)",
623
+ upgradeToUse: "Upgrade your plan to use Google fonts"
604
624
  };
605
625
  var userList = {
606
626
  empty: "No users found",
@@ -654,6 +674,7 @@ var en_default = {
654
674
  colorPicker,
655
675
  overwriteConfirm,
656
676
  quickSearch,
677
+ fontWeight,
657
678
  fontList,
658
679
  userList,
659
680
  keys
@@ -689,9 +710,10 @@ export {
689
710
  colorPicker,
690
711
  overwriteConfirm,
691
712
  quickSearch,
713
+ fontWeight,
692
714
  fontList,
693
715
  userList,
694
716
  keys,
695
717
  en_default
696
718
  };
697
- //# sourceMappingURL=chunk-VBVJJWUO.js.map
719
+ //# sourceMappingURL=chunk-A5GXRKT7.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../locales/en.json"],
4
+ "sourcesContent": ["{\n \"labels\": {\n \"signUp\": \"Sign up\",\n \"signIn\": \"Sign in\",\n \"paste\": \"Paste\",\n \"pasteAsPlaintext\": \"Paste as plaintext\",\n \"pasteCharts\": \"Paste charts\",\n \"chartType_bar\": \"Bar chart\",\n \"chartType_line\": \"Line chart\",\n \"chartType_radar\": \"Radar chart\",\n \"chartType_plaintext\": \"Plain text\",\n \"selectAll\": \"Select all\",\n \"multiSelect\": \"Add element to selection\",\n \"moveCanvas\": \"Move canvas\",\n \"cut\": \"Cut\",\n \"copy\": \"Copy\",\n \"copyAsPng\": \"Copy to clipboard as PNG\",\n \"copyAsSvg\": \"Copy to clipboard as SVG\",\n \"copyText\": \"Copy to clipboard as text\",\n \"copySource\": \"Copy source to clipboard\",\n \"convertToCode\": \"Convert to code\",\n \"bringForward\": \"Bring forward\",\n \"sendToBack\": \"Send to back\",\n \"bringToFront\": \"Bring to front\",\n \"sendBackward\": \"Send backward\",\n \"delete\": \"Delete\",\n \"copyStyles\": \"Copy styles\",\n \"pasteStyles\": \"Paste styles\",\n \"stroke\": \"Stroke\",\n \"changeStroke\": \"Change stroke color\",\n \"background\": \"Background\",\n \"changeBackground\": \"Change background color\",\n \"fill\": \"Fill\",\n \"smartZoom\": \"Smart Zoom\",\n \"strokeWidth\": \"Stroke width\",\n \"strokeStyle\": \"Stroke style\",\n \"strokeStyle_solid\": \"Solid\",\n \"strokeStyle_dashed\": \"Dashed\",\n \"strokeStyle_dotted\": \"Dotted\",\n \"sloppiness\": \"Sloppiness\",\n \"pressure\": \"Pressure\",\n \"pressure_constant\": \"Constant\",\n \"pressure_variable\": \"Variable\",\n \"opacity\": \"Opacity\",\n \"textAlign\": \"Text align\",\n \"edges\": \"Edges\",\n \"sharp\": \"Sharp\",\n \"round\": \"Round\",\n \"arrowheads\": \"Arrowheads\",\n \"arrowhead_none\": \"None\",\n \"arrowhead_arrow\": \"Arrow\",\n \"arrowhead_bar\": \"Bar\",\n \"arrowhead_circle\": \"Circle\",\n \"arrowhead_circle_outline\": \"Circle (outline)\",\n \"arrowhead_triangle\": \"Triangle\",\n \"arrowhead_triangle_outline\": \"Triangle (outline)\",\n \"arrowhead_diamond\": \"Diamond\",\n \"arrowhead_diamond_outline\": \"Diamond (outline)\",\n \"arrowhead_crowfoot_many\": \"Crow's foot (many)\",\n \"arrowhead_crowfoot_one\": \"Crow's foot (one)\",\n \"arrowhead_crowfoot_one_or_many\": \"Crow's foot (one or many)\",\n \"arrowhead_cardinality_one\": \"Cardinality (one)\",\n \"arrowhead_cardinality_many\": \"Cardinality (many)\",\n \"arrowhead_cardinality_one_or_many\": \"Cardinality (one or many)\",\n \"arrowhead_cardinality_exactly_one\": \"Cardinality (exactly one)\",\n \"arrowhead_cardinality_zero_or_one\": \"Cardinality (zero or one)\",\n \"arrowhead_cardinality_zero_or_many\": \"Cardinality (zero or many)\",\n \"more_options\": \"More options\",\n \"cardinality\": \"Cardinality\",\n \"arrowtypes\": \"Arrow type\",\n \"arrowtype_sharp\": \"Sharp arrow\",\n \"arrowtype_round\": \"Curved arrow\",\n \"arrowtype_elbowed\": \"Elbow arrow\",\n \"fontSize\": \"Font size\",\n \"fontFamily\": \"Font family\",\n \"fontWeight\": \"Weight\",\n \"addWatermark\": \"Add \\\"Made with Excalidraw\\\"\",\n \"handDrawn\": \"Hand-drawn\",\n \"normal\": \"Normal\",\n \"code\": \"Code\",\n \"small\": \"Small\",\n \"medium\": \"Medium\",\n \"large\": \"Large\",\n \"veryLarge\": \"Very large\",\n \"solid\": \"Solid\",\n \"hachure\": \"Hachure\",\n \"zigzag\": \"Zigzag\",\n \"crossHatch\": \"Cross-hatch\",\n \"thin\": \"Thin\",\n \"bold\": \"Bold\",\n \"left\": \"Left\",\n \"center\": \"Center\",\n \"right\": \"Right\",\n \"extraBold\": \"Extra bold\",\n \"architect\": \"Architect\",\n \"artist\": \"Artist\",\n \"cartoonist\": \"Cartoonist\",\n \"fileTitle\": \"File name\",\n \"colorPicker\": \"Color picker\",\n \"canvasColors\": \"Used on canvas\",\n \"canvasBackground\": \"Canvas background\",\n \"drawingCanvas\": \"Drawing canvas\",\n \"clearCanvas\": \"Clear canvas\",\n \"layers\": \"Layers\",\n \"actions\": \"Actions\",\n \"language\": \"Language\",\n \"liveCollaboration\": \"Live collaboration...\",\n \"duplicateSelection\": \"Duplicate\",\n \"untitled\": \"Untitled\",\n \"name\": \"Name\",\n \"yourName\": \"Your name\",\n \"madeWithExcalidraw\": \"Made with Excalidraw\",\n \"group\": \"Group selection\",\n \"ungroup\": \"Ungroup selection\",\n \"collaborators\": \"Collaborators\",\n \"you\": \"You\",\n \"toggleGrid\": \"Toggle grid\",\n \"loadingScene\": \"Loading scene\u2026\",\n \"loadScene\": \"Load scene from file\",\n \"align\": \"Align\",\n \"stacking\": \"Stacking\",\n \"alignTop\": \"Align top\",\n \"alignBottom\": \"Align bottom\",\n \"alignLeft\": \"Align left\",\n \"alignRight\": \"Align right\",\n \"centerVertically\": \"Center vertically\",\n \"centerHorizontally\": \"Center horizontally\",\n \"distributeHorizontally\": \"Distribute horizontally\",\n \"distributeVertically\": \"Distribute vertically\",\n \"flipHorizontal\": \"Flip horizontal\",\n \"flipVertical\": \"Flip vertical\",\n \"flipViewpointHorizontal\": \"Flip viewpoint horizontally\",\n \"flipViewpointVertical\": \"Flip viewpoint vertically\",\n \"viewMode\": \"View mode\",\n \"share\": \"Share\",\n \"showStroke\": \"Show stroke color picker\",\n \"showBackground\": \"Show background color picker\",\n \"showFonts\": \"Show font picker\",\n \"toggleTheme\": \"Toggle light/dark theme\",\n \"arrangeElements\": \"Arrange elements\",\n \"normaliseElements\": \"Normalize images\",\n \"theme\": \"Theme\",\n \"decreaseFontSize\": \"Decrease font size\",\n \"increaseFontSize\": \"Increase font size\",\n \"unbindText\": \"Unbind text\",\n \"bindText\": \"Bind text to the container\",\n \"createContainerFromText\": \"Wrap text in a container\",\n \"link\": {\n \"edit\": \"Edit link\",\n \"editEmbed\": \"Edit embeddable link\",\n \"create\": \"Add link\",\n \"label\": \"Link\",\n \"labelEmbed\": \"Link & embed\",\n \"empty\": \"No link is set\",\n \"hint\": \"Type or paste your link here\",\n \"goToElement\": \"Go to target element\"\n },\n \"lineEditor\": {\n \"edit\": \"Edit line\",\n \"editArrow\": \"Edit arrow\"\n },\n \"polygon\": {\n \"breakPolygon\": \"Break polygon\",\n \"convertToPolygon\": \"Convert to polygon\"\n },\n \"elementLock\": {\n \"lock\": \"Lock\",\n \"unlock\": \"Unlock\",\n \"lockAll\": \"Lock all\",\n \"unlockAll\": \"Unlock all\"\n },\n \"sidebarLock\": \"Keep sidebar open\",\n \"selectAllElementsInFrame\": \"Select all elements in frame\",\n \"removeAllElementsFromFrame\": \"Remove all elements from frame\",\n \"eyeDropper\": \"Pick color from canvas\",\n \"followUs\": \"Follow us\",\n \"discordChat\": \"Discord chat\",\n \"zoomToFitViewport\": \"Zoom to fit in viewport\",\n \"zoomToFitSelection\": \"Zoom to fit selection\",\n \"zoomToFit\": \"Zoom to fit all elements\",\n \"installPWA\": \"Install Excalidraw locally (PWA)\",\n \"autoResize\": \"Enable text auto-resizing\",\n \"imageCropping\": \"Image cropping\",\n \"unCroppedDimension\": \"Uncropped dimension\",\n \"copyElementLink\": \"Copy link to object\",\n \"linkToElement\": \"Link to object\",\n \"wrapSelectionInFrame\": \"Wrap selection in frame\",\n \"tab\": \"Tab\",\n \"shapeSwitch\": \"Switch shape\",\n \"preferences\": \"Preferences\",\n \"preferences_myocDesktopUISize\": \"MyOC desktop UI size\",\n \"preferences_myocDesktopUIDescription\": \"Applies to desktop only. Tablet and phone layouts remain automatic.\",\n \"preferences_myocDesktopUIFull\": \"Full\",\n \"preferences_myocDesktopUICompact\": \"Compact\",\n \"preferences_toolLock\": \"Tool lock\",\n \"boxSelectionMode\": \"Select on\",\n \"boxSelectionContain\": \"Wrap\",\n \"boxSelectionOverlap\": \"Overlap\",\n \"arrowBinding\": \"Arrow binding\",\n \"midpointSnapping\": \"Snap to midpoints\"\n },\n \"elementLink\": {\n \"title\": \"Link to object\",\n \"desc\": \"Click on a shape on canvas or paste a link.\",\n \"notFound\": \"Linked object wasn't found on canvas.\"\n },\n \"search\": {\n \"title\": \"Find on canvas\",\n \"noMatch\": \"No matches found...\",\n \"singleResult\": \"result\",\n \"multipleResults\": \"results\",\n \"placeholder\": \"Find text on canvas...\",\n \"frames\": \"Frames\",\n \"texts\": \"Texts\"\n },\n \"buttons\": {\n \"clearReset\": \"Reset the canvas\",\n \"exportJSON\": \"Export to file\",\n \"exportImage\": \"Export image...\",\n \"export\": \"Save to...\",\n \"copyToClipboard\": \"Copy to clipboard\",\n \"copyLink\": \"Copy link\",\n \"save\": \"Save to current file\",\n \"saveAs\": \"Save as\",\n \"load\": \"Open\",\n \"getShareableLink\": \"Get shareable link\",\n \"close\": \"Close\",\n \"selectLanguage\": \"Select language\",\n \"scrollBackToContent\": \"Scroll back to content\",\n \"zoomIn\": \"Zoom in\",\n \"zoomOut\": \"Zoom out\",\n \"resetZoom\": \"Reset zoom\",\n \"menu\": \"Menu\",\n \"done\": \"Done\",\n \"edit\": \"Edit\",\n \"undo\": \"Undo\",\n \"redo\": \"Redo\",\n \"createNewRoom\": \"Create new room\",\n \"fullScreen\": \"Full screen\",\n \"darkMode\": \"Dark mode\",\n \"lightMode\": \"Light mode\",\n \"systemMode\": \"System mode\",\n \"zenMode\": \"Zen mode\",\n \"objectsSnapMode\": \"Snap to objects\",\n \"exitZenMode\": \"Exit zen mode\",\n \"cancel\": \"Cancel\",\n \"clear\": \"Clear\",\n \"remove\": \"Remove\",\n \"embed\": \"Toggle embedding\",\n \"submit\": \"Submit\",\n \"confirm\": \"Confirm\",\n \"embeddableInteractionButton\": \"Click to interact\",\n \"smartZoom\": \"Smart Zoom\"\n },\n \"alerts\": {\n \"clearReset\": \"This will clear the whole canvas. Are you sure?\",\n \"couldNotCreateShareableLink\": \"Couldn't create shareable link.\",\n \"couldNotCreateShareableLinkTooBig\": \"Couldn't create shareable link: the scene is too big\",\n \"couldNotLoadInvalidFile\": \"Couldn't load invalid file\",\n \"importBackendFailed\": \"Importing from backend failed.\",\n \"cannotExportEmptyCanvas\": \"Cannot export empty canvas.\",\n \"couldNotCopyToClipboard\": \"Couldn't copy to clipboard.\",\n \"decryptFailed\": \"Couldn't decrypt data.\",\n \"uploadedSecurly\": \"The upload has been secured with end-to-end encryption, which means that Excalidraw server and third parties can't read the content.\",\n \"loadSceneOverridePrompt\": \"Loading external drawing will replace your existing content. Do you wish to continue?\",\n \"collabStopOverridePrompt\": \"Stopping the session will overwrite your previous, locally stored drawing. Are you sure?\\n\\n(If you want to keep your local drawing, simply close the browser tab instead.)\",\n \"imageDoesNotContainScene\": \"This image does not seem to contain any scene data. Have you enabled scene embedding during export?\",\n \"cannotRestoreFromImage\": \"Scene couldn't be restored from this image file\",\n \"invalidSceneUrl\": \"Couldn't import scene from the supplied URL. It's either malformed, or doesn't contain valid Excalidraw JSON data.\",\n \"invalidEncryptionKey\": \"Encryption key must be of 22 characters. Live collaboration is disabled.\",\n \"collabOfflineWarning\": \"No internet connection available.\\nYour changes will not be saved!\",\n \"localStorageQuotaExceeded\": \"Browser storage quota exceeded. Changes will not be saved.\"\n },\n \"errors\": {\n \"unsupportedFileType\": \"Unsupported file type.\",\n \"imageInsertError\": \"Couldn't insert image. Try again later...\",\n \"fileTooBig\": \"File is too big. Maximum allowed size is {{maxSize}}.\",\n \"svgImageInsertError\": \"Couldn't insert SVG image. The SVG markup looks invalid.\",\n \"failedToFetchImage\": \"Failed to fetch image.\",\n \"cannotResolveCollabServer\": \"Couldn't connect to the collab server. Please reload the page and try again.\",\n \"collabSaveFailed\": \"Couldn't save to the backend database. If problems persist, you should save your file locally to ensure you don't lose your work.\",\n \"collabSaveFailed_sizeExceeded\": \"Couldn't save to the backend database, the canvas seems to be too big. You should save the file locally to ensure you don't lose your work.\",\n \"imageToolNotSupported\": \"Images are disabled.\",\n \"brave_measure_text_error\": {\n \"line1\": \"Looks like you are using Brave browser with the <bold>Aggressively Block Fingerprinting</bold> setting enabled.\",\n \"line2\": \"This could result in breaking the <bold>Text Elements</bold> in your drawings.\",\n \"line3\": \"We strongly recommend disabling this setting. You can follow <link>these steps</link> on how to do so.\",\n \"line4\": \"If disabling this setting doesn't fix the display of text elements, please open an <issueLink>issue</issueLink> on our GitHub, or write us on <discordLink>Discord</discordLink>\"\n },\n \"asyncPasteFailedOnRead\": \"Couldn't paste (couldn't read from system clipboard).\",\n \"asyncPasteFailedOnParse\": \"Couldn't paste.\",\n \"copyToSystemClipboardFailed\": \"Couldn't copy to clipboard.\"\n },\n \"toolBar\": {\n \"selection\": \"Selection\",\n \"lasso\": \"Lasso selection\",\n \"image\": \"Insert image\",\n \"rectangle\": \"Rectangle\",\n \"diamond\": \"Diamond\",\n \"ellipse\": \"Ellipse\",\n \"arrow\": \"Arrow\",\n \"line\": \"Line\",\n \"freedraw\": \"Draw\",\n \"text\": \"Text\",\n \"lock-short\": \"Lock Active Tool\",\n \"lock\": \"Keep selected tool active after drawing\",\n \"penMode\": \"Pen mode - prevent touch\",\n \"link\": \"Add / Update link for a selected shape\",\n \"eraser\": \"Eraser\",\n \"frame\": \"Frame tool\",\n \"embeddable\": \"Web Embed\",\n \"laser\": \"Laser pointer\",\n \"autoshape\": \"Draw to shape\",\n \"bucketfill\": \"Bucket fill\",\n \"hand\": \"Hand (panning tool)\",\n \"extraTools\": \"More tools\",\n \"smartZoom\": \"Smart Zoom\",\n \"convertElementType\": \"Toggle shape type\"\n },\n \"bucketfill\": {\n \"noRegion\": \"Couldn't find an enclosed region to fill here.\",\n \"tooComplex\": \"This region is too complex to fill.\"\n },\n \"element\": {\n \"rectangle\": \"Rectangle\",\n \"diamond\": \"Diamond\",\n \"ellipse\": \"Ellipse\",\n \"arrow\": \"Arrow\",\n \"line\": \"Line\",\n \"freedraw\": \"Freedraw\",\n \"text\": \"Text\",\n \"image\": \"Image\",\n \"group\": \"Group\",\n \"frame\": \"Frame\",\n \"embeddable\": \"Web Embed\",\n \"selection\": \"Selection\",\n \"iframe\": \"IFrame\"\n },\n \"headings\": {\n \"canvasActions\": \"Canvas actions\",\n \"selectedShapeActions\": \"Selected shape actions\",\n \"shapes\": \"Shapes\"\n },\n \"hints\": {\n \"dismissSearch\": \"{{shortcut}} to dismiss search\",\n \"canvasPanning\": \"Pan the canvas with {{shortcut_1}} or {{shortcut_2}} or use the hand tool.\\nHide hints using View Mode (bottom left)\",\n \"linearElement\": \"Click to start multiple points, drag for single line\",\n \"arrowTool\": \"Click to start multiple points, drag for single line. Press {{shortcut}} again to change arrow type.\",\n \"arrowBindModifiers\": \"Hold {{shortcut_1}} to disable binding, or {{shortcut_2}} to bind at a fixed point\",\n \"freeDraw\": \"Click and drag, release when you're finished\",\n \"text\": \"Tip: you can also add text by double-clicking anywhere with the selection tool\",\n \"embeddable\": \"Click-drag to create a website embed\",\n \"autoshape\": \"Draw rectangles, circles, diamonds, lines and arrows\",\n \"text_selected\": \"Double-click or press {{shortcut}} to edit text\",\n \"text_editing\": \"Press {{shortcut_1}} or {{shortcut_2}} to finish editing\",\n \"linearElementMulti\": \"Click on last point or press {{shortcut_1}} or {{shortcut_2}} to finish\",\n \"lockAngle\": \"You can constrain angle by holding {{shortcut}}\",\n \"resize\": \"You can constrain proportions by holding {{shortcut_1}} while resizing,\\nhold {{shortcut_2}} to resize from the center\",\n \"resizeImage\": \"You can resize freely by holding {{shortcut_1}},\\nhold {{shortcut_2}} to resize from the center\",\n \"rotate\": \"You can constrain angles by holding {{shortcut}} while rotating\",\n \"toggleArrowhead\": \"Double-click to toggle the arrowhead\",\n \"lineEditor_info\": \"Hold {{shortcut_1}} and Double-click or press {{shortcut_2}} to edit points\",\n \"lineEditor_line_info\": \"Double-click or press {{shortcut}} to edit points\",\n \"lineEditor_pointSelected\": \"Press {{shortcut_1}} to remove point(s),\\n{{shortcut_2}} to duplicate, or drag to move\",\n \"lineEditor_nothingSelected\": \"Select a point to edit (hold {{shortcut_1}} to select multiple),\\nor hold {{shortcut_2}} and click to add new points\",\n \"bindTextToElement\": \"{{shortcut}} to add text\",\n \"createFlowchart\": \"{{shortcut}} to create a flowchart\",\n \"deepBoxSelect\": \"Hold {{shortcut}} to deep select, and to prevent dragging\",\n \"eraserRevert\": \"Hold {{shortcut}} to revert the elements marked for deletion\",\n \"firefox_clipboard_write\": \"This feature can likely be enabled by setting the \\\"dom.events.asyncClipboard.clipboardItem\\\" flag to \\\"true\\\". To change the browser flags in Firefox, visit the \\\"about:config\\\" page.\",\n \"disableSnapping\": \"Hold {{shortcut}} to disable snapping\",\n \"enterCropEditor\": \"{{shortcut_1}} to smart zoom, or press {{shortcut_2}} to crop\",\n \"leaveCropEditor\": \"Click outside the image or press {{shortcut_1}} or {{shortcut_2}} to finish cropping\"\n },\n \"canvasError\": {\n \"cannotShowPreview\": \"Cannot show preview\",\n \"canvasTooBig\": \"The canvas may be too big.\",\n \"canvasTooBigTip\": \"Tip: try moving the farthest elements a bit closer together.\"\n },\n \"errorSplash\": {\n \"headingMain\": \"Encountered an error. Try <button>reloading the page</button>.\",\n \"clearCanvasMessage\": \"If reloading doesn't work, try <button>clearing the canvas</button>.\",\n \"clearCanvasCaveat\": \" This will result in loss of work \",\n \"trackedToSentry\": \"The error with identifier {{eventId}} was tracked on our system.\",\n \"openIssueMessage\": \"We were very cautious not to include your scene information on the error. If your scene is not private, please consider following up on our <button>bug tracker</button>. Please include information below by copying and pasting into the GitHub issue.\",\n \"sceneContent\": \"Scene content:\"\n },\n \"shareDialog\": {\n \"or\": \"Or\"\n },\n \"roomDialog\": {\n \"desc_intro\": \"Invite people to collaborate on your drawing.\",\n \"desc_privacy\": \"Don't worry, the session is end-to-end encrypted, and fully private. Not even our server can see what you draw.\",\n \"button_startSession\": \"Start session\",\n \"button_stopSession\": \"Stop session\",\n \"desc_inProgressIntro\": \"Live-collaboration session is now in progress.\",\n \"desc_shareLink\": \"Share this link with anyone you want to collaborate with:\",\n \"desc_exitSession\": \"Stopping the session will disconnect you from the room, but you'll be able to continue working with the scene, locally. Note that this won't affect other people, and they'll still be able to collaborate on their version.\",\n \"shareTitle\": \"Join a live collaboration session on Excalidraw\"\n },\n \"errorDialog\": {\n \"title\": \"Error\"\n },\n \"progressDialog\": {\n \"title\": \"Saving\",\n \"defaultMessage\": \"Preparing to save...\"\n },\n \"exportDialog\": {\n \"disk_title\": \"Save to disk\",\n \"disk_details\": \"Export the scene data to a file from which you can import later.\",\n \"disk_button\": \"Save to file\",\n \"link_title\": \"Shareable link\",\n \"link_details\": \"Export as a read-only link.\",\n \"link_button\": \"Export to Link\",\n \"excalidrawplus_description\": \"Save the scene to your Excalidraw+ workspace.\",\n \"excalidrawplus_button\": \"Export\",\n \"excalidrawplus_exportError\": \"Couldn't export to Excalidraw+ at this moment...\"\n },\n \"helpDialog\": {\n \"myoc\": {\n \"showingAll\": \"Showing all controls\",\n \"showingBasic\": \"Showing basic controls\"\n },\n \"blog\": \"Read our blog\",\n \"click\": \"click\",\n \"deepSelect\": \"Deep select\",\n \"deepBoxSelect\": \"Deep select within box, and prevent dragging\",\n \"createFlowchart\": \"Create a flowchart from a generic element\",\n \"navigateFlowchart\": \"Navigate a flowchart\",\n \"curvedArrow\": \"Curved arrow\",\n \"curvedLine\": \"Curved line\",\n \"documentation\": \"Documentation\",\n \"doubleClick\": \"double-click\",\n \"drag\": \"drag\",\n \"editor\": \"Editor\",\n \"editLineArrowPoints\": \"Edit line/arrow points\",\n \"editText\": \"Edit text / add label\",\n \"github\": \"Found an issue? Submit\",\n \"howto\": \"Follow our guides\",\n \"or\": \"or\",\n \"preventBinding\": \"Prevent arrow binding\",\n \"tools\": \"Tools\",\n \"shortcuts\": \"Keyboard shortcuts\",\n \"textFinish\": \"Finish editing (text editor)\",\n \"textNewLine\": \"Add new line (text editor)\",\n \"title\": \"Help\",\n \"view\": \"View\",\n \"smartZoom\": \"Smart Zoom (Fit selection or all elements if none selected)\",\n \"dragToZoom\": \"Drag to zoom\",\n \"zoomToFit\": \"Zoom to fit all elements\",\n \"zoomToSelection\": \"Zoom to selection\",\n \"toggleElementLock\": \"Lock/unlock selection\",\n \"movePageUpDown\": \"Move page up/down\",\n \"movePageLeftRight\": \"Move page left/right\",\n \"cropStart\": \"Crop image\",\n \"cropFinish\": \"Finish image cropping\"\n },\n \"clearCanvasDialog\": {\n \"title\": \"Clear canvas\"\n },\n \"imageExportDialog\": {\n \"header\": \"Export image\",\n \"label\": {\n \"withBackground\": \"Background\",\n \"onlySelected\": \"Only selected\",\n \"darkMode\": \"Dark mode\",\n \"embedScene\": \"Embed scene\",\n \"scale\": \"Scale\",\n \"padding\": \"Padding\"\n },\n \"tooltip\": {\n \"embedScene\": \"Scene data will be saved into the exported PNG/SVG file so that the scene can be restored from it.\\nWill increase exported file size.\"\n },\n \"title\": {\n \"exportToPng\": \"Export to PNG\",\n \"exportToSvg\": \"Export to SVG\",\n \"copyPngToClipboard\": \"Copy PNG to clipboard\"\n },\n \"button\": {\n \"exportToPng\": \"PNG\",\n \"exportToSvg\": \"SVG\",\n \"copyPngToClipboard\": \"Copy to clipboard\"\n }\n },\n \"encrypted\": {\n \"tooltip\": \"Your drawings are end-to-end encrypted so Excalidraw's servers will never see them.\",\n \"link\": \"Blog post on end-to-end encryption in Excalidraw\"\n },\n \"stats\": {\n \"angle\": \"Angle\",\n \"shapes\": \"Shapes\",\n \"height\": \"Height\",\n \"scene\": \"Scene\",\n \"selected\": \"Selected\",\n \"storage\": \"Storage\",\n \"fullTitle\": \"Canvas & Shape properties\",\n \"title\": \"Properties\",\n \"generalStats\": \"General\",\n \"elementProperties\": \"Shape properties\",\n \"total\": \"Total\",\n \"version\": \"Version\",\n \"versionCopy\": \"Click to copy\",\n \"versionNotAvailable\": \"Version not available\",\n \"width\": \"Width\"\n },\n \"toast\": {\n \"copyStyles\": \"Copied styles.\",\n \"copyToClipboard\": \"Copied to clipboard.\",\n \"copyToClipboardAsPng\": \"Copied {{exportSelection}} to clipboard as PNG\\n({{exportColorScheme}})\",\n \"copyToClipboardAsSvg\": \"Copied {{exportSelection}} to clipboard as SVG\\n({{exportColorScheme}})\",\n \"fileSaved\": \"File saved.\",\n \"fileSavedToFilename\": \"Saved to {filename}\",\n \"canvas\": \"canvas\",\n \"selection\": \"selection\",\n \"pasteAsSingleElement\": \"Use {{shortcut}} to paste as a single element,\\nor paste into an existing text editor\",\n \"unableToEmbed\": \"Embedding this url is currently not allowed. Raise an issue on GitHub to request the url whitelisted\",\n \"unrecognizedLinkFormat\": \"The link you embedded does not match the expected format. Please try to paste the 'embed' string provided by the source site\",\n \"elementLinkCopied\": \"Link copied to clipboard\"\n },\n \"colors\": {\n \"transparent\": \"Transparent\",\n \"black\": \"Black\",\n \"white\": \"White\",\n \"red\": \"Red\",\n \"pink\": \"Pink\",\n \"grape\": \"Grape\",\n \"violet\": \"Violet\",\n \"gray\": \"Gray\",\n \"blue\": \"Blue\",\n \"cyan\": \"Cyan\",\n \"teal\": \"Teal\",\n \"green\": \"Green\",\n \"yellow\": \"Yellow\",\n \"orange\": \"Orange\",\n \"bronze\": \"Bronze\"\n },\n \"welcomeScreen\": {\n \"app\": {\n \"center_heading\": \"Your drawings are saved in your browser's storage.\",\n \"center_heading_line2\": \"Browser storage can be cleared unexpectedly.\",\n \"center_heading_line3\": \"Save your work to a file regularly to avoid losing it.\",\n \"center_heading_plus\": \"Did you want to go to the Excalidraw+ instead?\",\n \"menuHint\": \"Export, preferences, languages, ...\"\n },\n \"defaults\": {\n \"menuHint\": \"Export, preferences, and more...\",\n \"center_heading\": \"Diagrams. Made. Simple.\",\n \"toolbarHint\": \"Pick a tool & Start drawing!\",\n \"helpHint\": \"Shortcuts & help\"\n }\n },\n \"colorPicker\": {\n \"color\": \"Color\",\n \"mostUsedCustomColors\": \"Most used custom colors\",\n \"colors\": \"Colors\",\n \"shades\": \"Shades\",\n \"hexCode\": \"Hex code\",\n \"noShades\": \"No shades available for this color\",\n \"invalidColor\": \"Not a valid color\",\n \"invalidHexLength\": \"Hex code must be 3, 4, 6, or 8 characters\",\n \"topPicksTip\": \"Tip: drag any color onto your top picks to pin it\",\n \"resetTopPicks\": \"Reset to default top picks\"\n },\n \"overwriteConfirm\": {\n \"action\": {\n \"exportToImage\": {\n \"title\": \"Export as image\",\n \"button\": \"Export as image\",\n \"description\": \"Export the scene data as an image from which you can import later.\"\n },\n \"saveToDisk\": {\n \"title\": \"Save to disk\",\n \"button\": \"Save to disk\",\n \"description\": \"Export the scene data to a file from which you can import later.\"\n },\n \"excalidrawPlus\": {\n \"title\": \"Excalidraw+\",\n \"button\": \"Export to Excalidraw+\",\n \"description\": \"Save the scene to your Excalidraw+ workspace.\"\n }\n },\n \"modal\": {\n \"loadFromFile\": {\n \"title\": \"Load from file\",\n \"button\": \"Load from file\",\n \"description\": \"Loading from a file will <bold>replace your existing content</bold>.<br></br>You can back up your drawing first using one of the options below.\"\n },\n \"shareableLink\": {\n \"title\": \"Load from link\",\n \"button\": \"Replace my content\",\n \"description\": \"Loading external drawing will <bold>replace your existing content</bold>.<br></br>You can back up your drawing first by using one of the options below.\"\n }\n }\n },\n \"quickSearch\": {\n \"placeholder\": \"Quick search\"\n },\n \"fontWeight\": {\n \"thin\": \"Thin\",\n \"extraLight\": \"Extra Light\",\n \"light\": \"Light\",\n \"regular\": \"Regular\",\n \"medium\": \"Medium\",\n \"semiBold\": \"Semi Bold\",\n \"bold\": \"Bold\",\n \"extraBold\": \"Extra Bold\",\n \"black\": \"Black\",\n \"more\": \"More weights\u2026\"\n },\n \"fontList\": {\n \"badge\": {\n \"old\": \"old\"\n },\n \"sceneFonts\": \"In this scene\",\n \"myFonts\": \"My fonts\",\n \"availableFonts\": \"Available fonts\",\n \"builtInFonts\": \"Built-in\",\n \"empty\": \"No fonts found\",\n \"browse\": \"Browse Google Fonts\u2026\",\n \"emptyLibrary\": \"Your font library is empty. Browse Google Fonts to add some.\",\n \"addToLibrary\": \"Add to library\",\n \"addToLibraryLocked\": \"Add to library (upgrade required)\",\n \"upgradeToUse\": \"Upgrade your plan to use Google fonts\"\n },\n \"userList\": {\n \"empty\": \"No users found\",\n \"hint\": {\n \"text\": \"Click on user to follow\",\n \"followStatus\": \"You're currently following this user\",\n \"inCall\": \"User is in a voice call\",\n \"micMuted\": \"User's microphone is muted\",\n \"isSpeaking\": \"User is speaking\"\n }\n },\n \"keys\": {\n \"ctrl\": \"Ctrl\",\n \"option\": \"Option\",\n \"cmd\": \"Cmd\",\n \"alt\": \"Alt\",\n \"escape\": \"Esc\",\n \"enter\": \"Enter\",\n \"shift\": \"Shift\",\n \"spacebar\": \"Space\",\n \"delete\": \"Delete\",\n \"mmb\": \"Scroll wheel\"\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -4027,6 +4027,40 @@ var woff2_loader_default = () => {
4027
4027
  return loadedWasm2;
4028
4028
  };
4029
4029
 
4030
+ // subset/woff2/fontMetrics.ts
4031
+ var parseSfntFontMetrics = (sfnt) => {
4032
+ const view = new DataView(sfnt.buffer, sfnt.byteOffset, sfnt.byteLength);
4033
+ const tableCount = view.getUint16(4);
4034
+ const tables = /* @__PURE__ */ new Map();
4035
+ for (let index = 0; index < tableCount; index++) {
4036
+ const offset = 12 + index * 16;
4037
+ const tag = String.fromCharCode(
4038
+ view.getUint8(offset),
4039
+ view.getUint8(offset + 1),
4040
+ view.getUint8(offset + 2),
4041
+ view.getUint8(offset + 3)
4042
+ );
4043
+ tables.set(tag, {
4044
+ offset: view.getUint32(offset + 8),
4045
+ length: view.getUint32(offset + 12)
4046
+ });
4047
+ }
4048
+ const head = tables.get("head");
4049
+ const hhea = tables.get("hhea");
4050
+ if (!head || !hhea || head.length < 20 || hhea.length < 10) {
4051
+ throw new Error("Font is missing OpenType head or hhea metrics");
4052
+ }
4053
+ const unitsPerEm = view.getUint16(head.offset + 18);
4054
+ const ascender = view.getInt16(hhea.offset + 4);
4055
+ const descender = view.getInt16(hhea.offset + 6);
4056
+ const lineGap = view.getInt16(hhea.offset + 8);
4057
+ const lineHeight = (ascender - descender + lineGap) / unitsPerEm;
4058
+ if (!unitsPerEm || !Number.isFinite(lineHeight) || lineHeight <= 0 || !ascender) {
4059
+ throw new Error("Font contains invalid OpenType metrics");
4060
+ }
4061
+ return { unitsPerEm, ascender, descender, lineGap, lineHeight };
4062
+ };
4063
+
4030
4064
  // subset/subset-shared.chunk.ts
4031
4065
  var Commands = {
4032
4066
  Subset: "SUBSET"
@@ -4048,6 +4082,11 @@ var subsetToBinary = async (arrayBuffer, codePoints) => {
4048
4082
  const compressedBinary = compress(snftSubset.buffer);
4049
4083
  return compressedBinary.buffer;
4050
4084
  };
4085
+ var getWoff2FontMetrics = async (arrayBuffer) => {
4086
+ const { decompress } = await woff2_loader_default();
4087
+ const sfnt = decompress(arrayBuffer);
4088
+ return parseSfntFontMetrics(sfnt);
4089
+ };
4051
4090
  var toBase64 = async (arrayBuffer) => {
4052
4091
  let base64;
4053
4092
  if (typeof Buffer !== "undefined") {
@@ -4063,6 +4102,7 @@ export {
4063
4102
  Commands,
4064
4103
  subsetToBase64,
4065
4104
  subsetToBinary,
4105
+ getWoff2FontMetrics,
4066
4106
  toBase64
4067
4107
  };
4068
4108
  /**
@@ -4129,4 +4169,4 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
4129
4169
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
4130
4170
  SOFTWARE.
4131
4171
  */
4132
- //# sourceMappingURL=chunk-6JJSWC4C.js.map
4172
+ //# sourceMappingURL=chunk-ETORD5CS.js.map