microboard-temp 0.14.19 → 0.14.21

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 (126) hide show
  1. package/dist/cjs/browser.js +388 -154
  2. package/dist/cjs/index.js +388 -154
  3. package/dist/cjs/node.js +388 -154
  4. package/dist/cjs/overlayIconManifest.js +115 -0
  5. package/dist/esm/browser.js +388 -154
  6. package/dist/esm/index.js +388 -154
  7. package/dist/esm/node.js +388 -154
  8. package/dist/esm/overlayIconManifest.js +113 -0
  9. package/dist/overlay-icons/Items/Card/icons/Flip.icon.svg +1 -0
  10. package/dist/overlay-icons/Items/Card/icons/RotateCcw.icon.svg +1 -0
  11. package/dist/overlay-icons/Items/Card/icons/RotateCw.icon.svg +1 -0
  12. package/dist/overlay-icons/Items/Card/icons/Tool.icon.svg +7 -0
  13. package/dist/overlay-icons/Items/Connector/icons/LineCurved.icon.svg +1 -0
  14. package/dist/overlay-icons/Items/Connector/icons/LineOrthogonal.icon.svg +1 -0
  15. package/dist/overlay-icons/Items/Connector/icons/LineStraight.icon.svg +1 -0
  16. package/dist/overlay-icons/Items/Connector/icons/PointerArrowHeavy.icon.svg +1 -0
  17. package/dist/overlay-icons/Items/Connector/icons/PointerArrowThin.icon.svg +1 -0
  18. package/dist/overlay-icons/Items/Connector/icons/PointerCircleFilled.icon.svg +1 -0
  19. package/dist/overlay-icons/Items/Connector/icons/PointerCircleOutline.icon.svg +1 -0
  20. package/dist/overlay-icons/Items/Connector/icons/PointerDiamondFilled.icon.svg +1 -0
  21. package/dist/overlay-icons/Items/Connector/icons/PointerDiamondOutline.icon.svg +1 -0
  22. package/dist/overlay-icons/Items/Connector/icons/PointerNone.icon.svg +1 -0
  23. package/dist/overlay-icons/Items/Connector/icons/PointerTriangleFilled.icon.svg +1 -0
  24. package/dist/overlay-icons/Items/Connector/icons/PointerTriangleOutline.icon.svg +1 -0
  25. package/dist/overlay-icons/Items/Connector/icons/SmartJump.icon.svg +3 -0
  26. package/dist/overlay-icons/Items/Connector/icons/Style.icon.svg +5 -0
  27. package/dist/overlay-icons/Items/Connector/icons/SwitchPointers.icon.svg +4 -0
  28. package/dist/overlay-icons/Items/Connector/icons/Tool.icon.svg +3 -0
  29. package/dist/overlay-icons/Items/Deck/icons/CreateFromSelection.icon.svg +1 -0
  30. package/dist/overlay-icons/Items/Deck/icons/DrawBottom.icon.svg +1 -0
  31. package/dist/overlay-icons/Items/Deck/icons/DrawMany.icon.svg +1 -0
  32. package/dist/overlay-icons/Items/Deck/icons/DrawRandom.icon.svg +1 -0
  33. package/dist/overlay-icons/Items/Deck/icons/DrawTop.icon.svg +1 -0
  34. package/dist/overlay-icons/Items/Deck/icons/Flip.icon.svg +1 -0
  35. package/dist/overlay-icons/Items/Deck/icons/Shuffle.icon.svg +1 -0
  36. package/dist/overlay-icons/Items/Dice/icons/Range.icon.svg +1 -0
  37. package/dist/overlay-icons/Items/Dice/icons/Throw.icon.svg +1 -0
  38. package/dist/overlay-icons/Items/Dice/icons/Tool.icon.svg +1 -0
  39. package/dist/overlay-icons/Items/Drawing/icons/Eraser.icon.svg +3 -0
  40. package/dist/overlay-icons/Items/Drawing/icons/Highlighter.icon.svg +3 -0
  41. package/dist/overlay-icons/Items/Drawing/icons/Pen.icon.svg +3 -0
  42. package/dist/overlay-icons/Items/Frame/Basic/1-1/1-1.icon.svg +1 -0
  43. package/dist/overlay-icons/Items/Frame/Basic/16-9/16-9.icon.svg +1 -0
  44. package/dist/overlay-icons/Items/Frame/Basic/3-2/3-2.icon.svg +1 -0
  45. package/dist/overlay-icons/Items/Frame/Basic/4-3/4-3.icon.svg +1 -0
  46. package/dist/overlay-icons/Items/Frame/Basic/9-18/9-18.icon.svg +1 -0
  47. package/dist/overlay-icons/Items/Frame/Basic/A4/A4.icon.svg +1 -0
  48. package/dist/overlay-icons/Items/Frame/Basic/Custom/Custom.icon.svg +14 -0
  49. package/dist/overlay-icons/Items/Frame/Basic/Letter/Letter.icon.svg +1 -0
  50. package/dist/overlay-icons/Items/Frame/Frame.icon.svg +1 -0
  51. package/dist/overlay-icons/Items/Placeholder/Placeholder.icon.svg +4 -0
  52. package/dist/overlay-icons/Items/RichText/icons/FontSize.icon.svg +3 -0
  53. package/dist/overlay-icons/Items/RichText/icons/Text.icon.svg +3 -0
  54. package/dist/overlay-icons/Items/Screen/icons/Background.icon.svg +1 -0
  55. package/dist/overlay-icons/Items/Screen/icons/BackgroundImage.icon.svg +1 -0
  56. package/dist/overlay-icons/Items/Screen/icons/BackgroundImageRemove.icon.svg +1 -0
  57. package/dist/overlay-icons/Items/Screen/icons/Pouch.icon.svg +1 -0
  58. package/dist/overlay-icons/Items/Screen/icons/Tool.icon.svg +1 -0
  59. package/dist/overlay-icons/Items/Shape/BPMN/BPMN_Annotation/BPMN_Annotation.icon.svg +1 -0
  60. package/dist/overlay-icons/Items/Shape/BPMN/BPMN_DataObject/BPMN_DataObject.icon.svg +1 -0
  61. package/dist/overlay-icons/Items/Shape/BPMN/BPMN_DataStore/BPMN_DataStore.icon.svg +1 -0
  62. package/dist/overlay-icons/Items/Shape/BPMN/BPMN_EndEvent/BPMN_EndEvent.icon.svg +1 -0
  63. package/dist/overlay-icons/Items/Shape/BPMN/BPMN_EventSubprocess/BPMN_EventSubprocess.icon.svg +1 -0
  64. package/dist/overlay-icons/Items/Shape/BPMN/BPMN_Gateway/BPMN_Gateway.icon.svg +1 -0
  65. package/dist/overlay-icons/Items/Shape/BPMN/BPMN_GatewayParallel/BPMN_GatewayParallel.icon.svg +1 -0
  66. package/dist/overlay-icons/Items/Shape/BPMN/BPMN_GatewayXOR/BPMN_GatewayXOR.icon.svg +1 -0
  67. package/dist/overlay-icons/Items/Shape/BPMN/BPMN_Group/BPMN_Group.icon.svg +1 -0
  68. package/dist/overlay-icons/Items/Shape/BPMN/BPMN_IntermediateEvent/BPMN_IntermediateEvent.icon.svg +1 -0
  69. package/dist/overlay-icons/Items/Shape/BPMN/BPMN_IntermediateEventNoneInterrupting/BPMN_IntermediateEventNoneInterrupting.icon.svg +1 -0
  70. package/dist/overlay-icons/Items/Shape/BPMN/BPMN_Participant/BPMN_Participant.icon.svg +1 -0
  71. package/dist/overlay-icons/Items/Shape/BPMN/BPMN_StartEvent/BPMN_StartEvent.icon.svg +1 -0
  72. package/dist/overlay-icons/Items/Shape/BPMN/BPMN_StartEventNoneInterrupting/BPMN_StartEventNoneInterrupting.icon.svg +1 -0
  73. package/dist/overlay-icons/Items/Shape/BPMN/BPMN_Task/BPMN_Task.icon.svg +1 -0
  74. package/dist/overlay-icons/Items/Shape/BPMN/BPMN_Transaction/BPMN_Transaction.icon.svg +1 -0
  75. package/dist/overlay-icons/Items/Shape/Basic/ArrowLeft/ArrowLeft.icon.svg +14 -0
  76. package/dist/overlay-icons/Items/Shape/Basic/ArrowLeftRight/ArrowLeftRight.icon.svg +14 -0
  77. package/dist/overlay-icons/Items/Shape/Basic/ArrowRight/ArrowRight.icon.svg +14 -0
  78. package/dist/overlay-icons/Items/Shape/Basic/BracesLeft/BracesLeft.icon.svg +14 -0
  79. package/dist/overlay-icons/Items/Shape/Basic/BracesRight/BracesRight.icon.svg +14 -0
  80. package/dist/overlay-icons/Items/Shape/Basic/Circle/Circle.icon.svg +14 -0
  81. package/dist/overlay-icons/Items/Shape/Basic/Cloud/Cloud.icon.svg +14 -0
  82. package/dist/overlay-icons/Items/Shape/Basic/Cross/Cross.icon.svg +14 -0
  83. package/dist/overlay-icons/Items/Shape/Basic/Cylinder/Cylinder.icon.svg +19 -0
  84. package/dist/overlay-icons/Items/Shape/Basic/Hexagon/Hexagon.icon.svg +14 -0
  85. package/dist/overlay-icons/Items/Shape/Basic/Octagon/Octagon.icon.svg +14 -0
  86. package/dist/overlay-icons/Items/Shape/Basic/Parallelogram/Parallelogram.icon.svg +14 -0
  87. package/dist/overlay-icons/Items/Shape/Basic/Pentagon/Pentagon.icon.svg +14 -0
  88. package/dist/overlay-icons/Items/Shape/Basic/Rectangle/Rectangle.icon.svg +14 -0
  89. package/dist/overlay-icons/Items/Shape/Basic/Rhombus/Rhombus.icon.svg +14 -0
  90. package/dist/overlay-icons/Items/Shape/Basic/RoundedRectangle/RoundedRectangle.icon.svg +14 -0
  91. package/dist/overlay-icons/Items/Shape/Basic/SpeachBubble/SpeachBubble.icon.svg +14 -0
  92. package/dist/overlay-icons/Items/Shape/Basic/Star/Star.icon.svg +14 -0
  93. package/dist/overlay-icons/Items/Shape/Basic/Trapezoid/Trapezoid.icon.svg +14 -0
  94. package/dist/overlay-icons/Items/Shape/Basic/Triangle/Triangle.icon.svg +14 -0
  95. package/dist/overlay-icons/Items/Shape/icons/ArrowBlockLeft.icon.svg +3 -0
  96. package/dist/overlay-icons/Items/Shape/icons/ArrowBlockRight.icon.svg +3 -0
  97. package/dist/overlay-icons/Items/Shape/icons/Color.icon.svg +4 -0
  98. package/dist/overlay-icons/Items/Shape/icons/Fill.icon.svg +4 -0
  99. package/dist/overlay-icons/Items/Shape/icons/PredefinedProcess.icon.svg +4 -0
  100. package/dist/overlay-icons/Items/Shape/icons/ReversedParallelogram.icon.svg +3 -0
  101. package/dist/overlay-icons/Items/Shape/icons/ReversedTriangle.icon.svg +3 -0
  102. package/dist/overlay-icons/Items/Shape/icons/Stroke.icon.svg +3 -0
  103. package/dist/overlay-icons/Items/Shape/icons/StrokeDash.icon.svg +3 -0
  104. package/dist/overlay-icons/Items/Shape/icons/StrokeDot.icon.svg +5 -0
  105. package/dist/overlay-icons/Items/Shape/icons/StrokeLongDash.icon.svg +3 -0
  106. package/dist/overlay-icons/Items/Shape/icons/StrokeSolid.icon.svg +3 -0
  107. package/dist/overlay-icons/Items/Shape/icons/Tool.icon.svg +3 -0
  108. package/dist/overlay-icons/Items/Shape/icons/Type.icon.svg +5 -0
  109. package/dist/overlay-icons/Items/Sticker/Path/Sticker.icon.svg +14 -0
  110. package/dist/overlay-icons/Overlay/icons/BringToFront.icon.svg +5 -0
  111. package/dist/overlay-icons/Overlay/icons/Delete.icon.svg +7 -0
  112. package/dist/overlay-icons/Overlay/icons/Duplicate.icon.svg +4 -0
  113. package/dist/overlay-icons/Overlay/icons/Lock.icon.svg +4 -0
  114. package/dist/overlay-icons/Overlay/icons/SendToBack.icon.svg +5 -0
  115. package/dist/overlay-icons/Overlay/icons/Unlock.icon.svg +4 -0
  116. package/dist/overlay-icons/Overlay/overlay-icons.svg +323 -0
  117. package/dist/types/Items/Card/CardOverlay.d.ts +2 -1
  118. package/dist/types/Overlay/IconPack.d.ts +5 -3
  119. package/dist/types/Overlay/OverlayMetadata.d.ts +24 -0
  120. package/dist/types/Overlay/overlayRegistry.d.ts +1 -0
  121. package/dist/types/Selection/SelectionOverlay.d.ts +1 -0
  122. package/dist/types/Selection/index.d.ts +1 -0
  123. package/dist/types/Tools/WorkflowTool.d.ts +8 -0
  124. package/dist/types/Tools/index.d.ts +1 -0
  125. package/dist/types/overlayIconManifest.d.ts +2 -0
  126. package/package.json +8 -2
package/dist/cjs/node.js CHANGED
@@ -1713,6 +1713,7 @@ __export(exports_node, {
1713
1713
  overlaySymbolIcon: () => overlaySymbolIcon,
1714
1714
  overlayAssetIcon: () => overlayAssetIcon,
1715
1715
  omitDefaultProperties: () => omitDefaultProperties,
1716
+ normalizeOverlayIconAssetPath: () => normalizeOverlayIconAssetPath,
1716
1717
  messageRouter: () => messageRouter,
1717
1718
  meetsWCAG_AAA: () => meetsWCAG_AAA,
1718
1719
  meetsWCAG_AA: () => meetsWCAG_AA,
@@ -1781,6 +1782,7 @@ __export(exports_node, {
1781
1782
  calculatePosition: () => calculatePosition,
1782
1783
  calculateAudioPosition: () => calculateAudioPosition,
1783
1784
  borderWidths: () => borderWidths,
1785
+ WorkflowTool: () => WorkflowTool,
1784
1786
  VideoItem: () => VideoItem,
1785
1787
  Transformation: () => Transformation,
1786
1788
  Tools: () => Tools,
@@ -1813,6 +1815,7 @@ __export(exports_node, {
1813
1815
  PRESENCE_CLEANUP_IDLE_TIMER: () => PRESENCE_CLEANUP_IDLE_TIMER,
1814
1816
  OVERLAY_SYMBOL_KEYS: () => OVERLAY_SYMBOL_KEYS,
1815
1817
  OVERLAY_ICON_SPRITE_PATH: () => OVERLAY_ICON_SPRITE_PATH,
1818
+ OVERLAY_ICON_ASSET_PREFIX: () => OVERLAY_ICON_ASSET_PREFIX,
1816
1819
  MiroItemConverter: () => MiroItemConverter,
1817
1820
  Mbr: () => Mbr,
1818
1821
  Matrix: () => Matrix,
@@ -12759,7 +12762,11 @@ function toLocalTransformOp(op, containerMatrix, itemId) {
12759
12762
  }
12760
12763
  }
12761
12764
  // src/Overlay/IconPack.ts
12762
- var OVERLAY_ICON_SPRITE_PATH = "src/Overlay/overlay-icons.svg";
12765
+ var OVERLAY_ICON_ASSET_PREFIX = "overlay-icons/";
12766
+ var OVERLAY_ICON_SPRITE_PATH = normalizeOverlayIconAssetPath("src/Overlay/overlay-icons.svg");
12767
+ function normalizeOverlayIconAssetPath(sourcePath) {
12768
+ return sourcePath.startsWith("src/") ? `${OVERLAY_ICON_ASSET_PREFIX}${sourcePath.slice(4)}` : sourcePath;
12769
+ }
12763
12770
  function overlaySymbolIcon(key) {
12764
12771
  return {
12765
12772
  kind: "symbol",
@@ -12767,10 +12774,18 @@ function overlaySymbolIcon(key) {
12767
12774
  sourcePath: OVERLAY_ICON_SPRITE_PATH
12768
12775
  };
12769
12776
  }
12770
- function overlayAssetIcon(path2) {
12771
- return {
12777
+ function overlayAssetIcon(sourcePath, state) {
12778
+ const path2 = normalizeOverlayIconAssetPath(sourcePath);
12779
+ return state ? {
12780
+ kind: "asset",
12781
+ path: path2,
12782
+ sourcePath,
12783
+ mimeType: "image/svg+xml",
12784
+ state
12785
+ } : {
12772
12786
  kind: "asset",
12773
12787
  path: path2,
12788
+ sourcePath,
12774
12789
  mimeType: "image/svg+xml"
12775
12790
  };
12776
12791
  }
@@ -12786,16 +12801,16 @@ function symbolIcon(key, state) {
12786
12801
  return state ? { kind: "symbol", key, sourcePath: OVERLAY_ICON_SPRITE_PATH, state } : { kind: "symbol", key, sourcePath: OVERLAY_ICON_SPRITE_PATH };
12787
12802
  }
12788
12803
  function styleFillIcon(state) {
12789
- return symbolIcon(OVERLAY_SYMBOL_KEYS.styleFill, state);
12804
+ return overlayAssetIcon("src/Items/Shape/icons/Fill.icon.svg", state);
12790
12805
  }
12791
12806
  function styleStrokeIcon(state) {
12792
- return symbolIcon(OVERLAY_SYMBOL_KEYS.styleStroke, state);
12807
+ return overlayAssetIcon("src/Items/Shape/icons/Stroke.icon.svg", state);
12793
12808
  }
12794
12809
  function styleColorIcon(state) {
12795
- return symbolIcon(OVERLAY_SYMBOL_KEYS.styleColor, state);
12810
+ return overlayAssetIcon("src/Items/Shape/icons/Color.icon.svg", state);
12796
12811
  }
12797
12812
  function styleFontSizeIcon(state) {
12798
- return symbolIcon(OVERLAY_SYMBOL_KEYS.styleFontSize, state);
12813
+ return overlayAssetIcon("src/Items/RichText/icons/FontSize.icon.svg", state);
12799
12814
  }
12800
12815
  // src/Overlay/overlayRegistry.ts
12801
12816
  var itemOverlays = {};
@@ -12930,10 +12945,23 @@ function compareEntriesByOrder(a, b) {
12930
12945
  return aOrder - bOrder || aLabel.localeCompare(bLabel);
12931
12946
  }
12932
12947
  function readOverlayValueSource(context, source) {
12948
+ if (source.kind === "selectionProperty") {
12949
+ return readOverlayContextProperty(context.selection, source.property);
12950
+ }
12933
12951
  if (source.kind === "itemProperty") {
12934
- return context.item ? context.item[source.property] : undefined;
12952
+ return readOverlayContextProperty(context.item, source.property);
12935
12953
  }
12936
- return context.tool ? context.tool[source.property] : undefined;
12954
+ return readOverlayContextProperty(context.tool, source.property);
12955
+ }
12956
+ function readOverlayContextProperty(target, property) {
12957
+ if (!target) {
12958
+ return;
12959
+ }
12960
+ const value = target[property];
12961
+ if (typeof value === "function") {
12962
+ return value.call(target);
12963
+ }
12964
+ return value;
12937
12965
  }
12938
12966
  // src/Items/BaseItem/BaseItem.ts
12939
12967
  class BaseItem {
@@ -40414,7 +40442,6 @@ var richTextOverlay = {
40414
40442
  id: "text.fontSize",
40415
40443
  label: "Font size",
40416
40444
  icon: styleFontSizeIcon(),
40417
- icon: styleFontSizeIcon(),
40418
40445
  target: "each",
40419
40446
  controls: [
40420
40447
  {
@@ -40437,7 +40464,7 @@ var richTextOverlay = {
40437
40464
  {
40438
40465
  id: "textTypography",
40439
40466
  label: "Typography",
40440
- icon: overlaySymbolIcon("text.fontSize"),
40467
+ icon: overlayAssetIcon("src/Items/RichText/icons/FontSize.icon.svg"),
40441
40468
  actionIds: ["text.fontSize"]
40442
40469
  }
40443
40470
  ]
@@ -40448,7 +40475,7 @@ var addTextToolOverlay = {
40448
40475
  kind: "create",
40449
40476
  createsItemType: "RichText",
40450
40477
  family: "text",
40451
- icon: overlaySymbolIcon("tool.text"),
40478
+ icon: overlayAssetIcon("src/Items/RichText/icons/Text.icon.svg"),
40452
40479
  description: "Creates editable rich text. The current first pass has no pre-placement defaults on this tool.",
40453
40480
  launch: { kind: "activate-tool" },
40454
40481
  surface: {
@@ -46856,12 +46883,28 @@ var COLOR_PALETTE = [
46856
46883
  "#118AB2",
46857
46884
  "#7B61FF"
46858
46885
  ];
46859
- var symbolIcon2 = (key) => overlaySymbolIcon(key);
46886
+ var connectorAssetIcon = (file2) => overlayAssetIcon(`src/Items/Connector/icons/${file2}.icon.svg`);
46887
+ var lineStyleAssetIcons = {
46888
+ straight: connectorAssetIcon("LineStraight"),
46889
+ curved: connectorAssetIcon("LineCurved"),
46890
+ orthogonal: connectorAssetIcon("LineOrthogonal")
46891
+ };
46892
+ var pointerAssetIcons = {
46893
+ None: connectorAssetIcon("PointerNone"),
46894
+ ArrowThin: connectorAssetIcon("PointerArrowThin"),
46895
+ ArrowHeavy: connectorAssetIcon("PointerArrowHeavy"),
46896
+ TriangleFilled: connectorAssetIcon("PointerTriangleFilled"),
46897
+ TriangleOutline: connectorAssetIcon("PointerTriangleOutline"),
46898
+ CircleFilled: connectorAssetIcon("PointerCircleFilled"),
46899
+ CircleOutline: connectorAssetIcon("PointerCircleOutline"),
46900
+ DiamondFilled: connectorAssetIcon("PointerDiamondFilled"),
46901
+ DiamondOutline: connectorAssetIcon("PointerDiamondOutline")
46902
+ };
46860
46903
  var lineStyleOptions = ConnectorLineStyles.map((style) => ({
46861
46904
  id: style,
46862
46905
  label: style[0].toUpperCase() + style.slice(1),
46863
46906
  value: style,
46864
- icon: symbolIcon2(`connector.lineStyle.${style}`)
46907
+ icon: lineStyleAssetIcons[style]
46865
46908
  }));
46866
46909
  var lineWidthOptions = ConnectionLineWidths.map((width) => ({
46867
46910
  id: `${width}`,
@@ -46872,13 +46915,13 @@ var pointerOptions = CONNECTOR_POINTER_TYPES.map((pointer) => ({
46872
46915
  id: pointer,
46873
46916
  label: pointer,
46874
46917
  value: pointer,
46875
- icon: symbolIcon2(`connector.pointer.${pointer}`)
46918
+ icon: pointerAssetIcons[pointer]
46876
46919
  }));
46877
46920
  var borderStyleOptions = ["solid", "dot", "dash", "longDash"].map((style) => ({
46878
46921
  id: style,
46879
46922
  label: style,
46880
46923
  value: style,
46881
- icon: symbolIcon2(`stroke.${style}`)
46924
+ icon: overlayAssetIcon(style === "solid" ? "src/Items/Shape/icons/StrokeSolid.icon.svg" : style === "dot" ? "src/Items/Shape/icons/StrokeDot.icon.svg" : style === "dash" ? "src/Items/Shape/icons/StrokeDash.icon.svg" : "src/Items/Shape/icons/StrokeLongDash.icon.svg")
46882
46925
  }));
46883
46926
  var connectorStyleControls = [
46884
46927
  {
@@ -46933,7 +46976,7 @@ var connectorStyleControls = [
46933
46976
  {
46934
46977
  id: "smartJump",
46935
46978
  label: "Smart jump",
46936
- icon: symbolIcon2("connector.smartJump"),
46979
+ icon: connectorAssetIcon("SmartJump"),
46937
46980
  valueSource: { kind: "itemProperty", property: "smartJump" },
46938
46981
  editor: { kind: "toggle", trueLabel: "On", falseLabel: "Off" },
46939
46982
  invoke: { kind: "setProperty", property: "smartJump" }
@@ -46992,7 +47035,7 @@ var connectorToolControls = [
46992
47035
  {
46993
47036
  id: "toolSmartJump",
46994
47037
  label: "Smart jump",
46995
- icon: symbolIcon2("connector.smartJump"),
47038
+ icon: connectorAssetIcon("SmartJump"),
46996
47039
  valueSource: { kind: "toolProperty", property: "smartJump" },
46997
47040
  editor: { kind: "toggle", trueLabel: "On", falseLabel: "Off" },
46998
47041
  invoke: { kind: "toolProperty", property: "smartJump" }
@@ -47004,21 +47047,21 @@ var connectorOverlay = {
47004
47047
  {
47005
47048
  id: "connector.switchPointers",
47006
47049
  label: "Switch arrows",
47007
- icon: symbolIcon2("connector.switchPointers"),
47050
+ icon: connectorAssetIcon("SwitchPointers"),
47008
47051
  target: "selection",
47009
47052
  invoke: { kind: "operation", class: "Connector", method: "switchPointers" }
47010
47053
  },
47011
47054
  {
47012
47055
  id: "connector.style",
47013
47056
  label: "Connector style",
47014
- icon: symbolIcon2("connector.style"),
47057
+ icon: connectorAssetIcon("Style"),
47015
47058
  target: "each",
47016
47059
  controls: connectorStyleControls,
47017
47060
  groups: [
47018
47061
  {
47019
47062
  id: "connectorStyle",
47020
47063
  label: "Connector style",
47021
- icon: symbolIcon2("connector.style"),
47064
+ icon: connectorAssetIcon("Style"),
47022
47065
  controlIds: connectorStyleControls.map((control) => control.id)
47023
47066
  }
47024
47067
  ]
@@ -47028,7 +47071,7 @@ var connectorOverlay = {
47028
47071
  {
47029
47072
  id: "connectorArrows",
47030
47073
  label: "Arrows",
47031
- icon: symbolIcon2("connector.style"),
47074
+ icon: connectorAssetIcon("Style"),
47032
47075
  actionIds: ["connector.switchPointers", "connector.style"]
47033
47076
  }
47034
47077
  ]
@@ -47040,8 +47083,7 @@ var addConnectorToolOverlay = {
47040
47083
  createsItemType: "Connector",
47041
47084
  family: "connector",
47042
47085
  icon: {
47043
- kind: "symbol",
47044
- key: "tool.connector",
47086
+ ...connectorAssetIcon("Tool"),
47045
47087
  state: {
47046
47088
  swatch: { kind: "toolProperty", property: "lineColor" },
47047
47089
  note: "UI can tint or swatch the connector icon from the pending line color."
@@ -47053,14 +47095,14 @@ var addConnectorToolOverlay = {
47053
47095
  {
47054
47096
  id: "connectorToolQuickDefaults",
47055
47097
  label: "Connector quick defaults",
47056
- icon: symbolIcon2("connector.lineStyle.straight"),
47098
+ icon: connectorAssetIcon("LineStraight"),
47057
47099
  controlIds: ["toolLineStyle"],
47058
47100
  description: "Primary defaults that match the compact create-surface picker."
47059
47101
  },
47060
47102
  {
47061
47103
  id: "connectorToolAdvancedDefaults",
47062
47104
  label: "Connector defaults",
47063
- icon: symbolIcon2("connector.style"),
47105
+ icon: connectorAssetIcon("Style"),
47064
47106
  controlIds: connectorToolControls.map((control) => control.id),
47065
47107
  description: "Extended defaults available in richer create flows."
47066
47108
  }
@@ -61208,7 +61250,8 @@ var COLOR_PALETTE2 = [
61208
61250
  "transparent"
61209
61251
  ];
61210
61252
  var inlineShapeAsset = (folder, file2 = folder) => overlayAssetIcon(`src/Items/Shape/Basic/${folder}/${file2}.icon.svg`);
61211
- var symbolIcon3 = (key) => overlaySymbolIcon(key);
61253
+ var localShapeIcon = (file2) => overlayAssetIcon(`src/Items/Shape/icons/${file2}.icon.svg`);
61254
+ var bpmnIcon = (folder) => overlayAssetIcon(`src/Items/Shape/BPMN/${folder}/${folder}.icon.svg`);
61212
61255
  var BASIC_INLINE_OPTIONS = [
61213
61256
  { id: "rectangle", label: "Rectangle", value: "Rectangle", icon: inlineShapeAsset("Rectangle"), family: "basicShapes" },
61214
61257
  { id: "rounded-rectangle", label: "Rounded rectangle", value: "RoundedRectangle", icon: inlineShapeAsset("RoundedRectangle"), family: "basicShapes" },
@@ -61218,48 +61261,48 @@ var BASIC_INLINE_OPTIONS = [
61218
61261
  ];
61219
61262
  var SHAPE_CATALOG_OPTIONS = [
61220
61263
  ...BASIC_INLINE_OPTIONS,
61221
- { id: "reversed-triangle", label: "Reversed triangle", value: "ReversedTriangle", icon: symbolIcon3("shape.reversedTriangle"), family: "basicShapes" },
61264
+ { id: "reversed-triangle", label: "Reversed triangle", value: "ReversedTriangle", icon: localShapeIcon("ReversedTriangle"), family: "basicShapes" },
61222
61265
  { id: "arrow-left", label: "Arrow left", value: "ArrowLeft", icon: inlineShapeAsset("ArrowLeft"), family: "basicShapes" },
61223
61266
  { id: "arrow-right", label: "Arrow right", value: "ArrowRight", icon: inlineShapeAsset("ArrowRight"), family: "basicShapes" },
61224
61267
  { id: "arrow-left-right", label: "Arrow left right", value: "ArrowLeftRight", icon: inlineShapeAsset("ArrowLeftRight"), family: "basicShapes" },
61225
- { id: "arrow-block-left", label: "Arrow block left", value: "ArrowBlockLeft", icon: symbolIcon3("shape.arrowBlockLeft"), family: "basicShapes" },
61226
- { id: "arrow-block-right", label: "Arrow block right", value: "ArrowBlockRight", icon: symbolIcon3("shape.arrowBlockRight"), family: "basicShapes" },
61268
+ { id: "arrow-block-left", label: "Arrow block left", value: "ArrowBlockLeft", icon: localShapeIcon("ArrowBlockLeft"), family: "basicShapes" },
61269
+ { id: "arrow-block-right", label: "Arrow block right", value: "ArrowBlockRight", icon: localShapeIcon("ArrowBlockRight"), family: "basicShapes" },
61227
61270
  { id: "cloud", label: "Cloud", value: "Cloud", icon: inlineShapeAsset("Cloud"), family: "basicShapes" },
61228
61271
  { id: "cross", label: "Cross", value: "Cross", icon: inlineShapeAsset("Cross"), family: "basicShapes" },
61229
61272
  { id: "cylinder", label: "Cylinder", value: "Cylinder", icon: inlineShapeAsset("Cylinder"), family: "basicShapes" },
61230
61273
  { id: "hexagon", label: "Hexagon", value: "Hexagon", icon: inlineShapeAsset("Hexagon"), family: "basicShapes" },
61231
61274
  { id: "octagon", label: "Octagon", value: "Octagon", icon: inlineShapeAsset("Octagon"), family: "basicShapes" },
61232
61275
  { id: "parallelogram", label: "Parallelogram", value: "Parallelogram", icon: inlineShapeAsset("Parallelogram"), family: "basicShapes" },
61233
- { id: "reversed-parallelogram", label: "Reversed parallelogram", value: "ReversedParallelogram", icon: symbolIcon3("shape.reversedParallelogram"), family: "basicShapes" },
61276
+ { id: "reversed-parallelogram", label: "Reversed parallelogram", value: "ReversedParallelogram", icon: localShapeIcon("ReversedParallelogram"), family: "basicShapes" },
61234
61277
  { id: "pentagon", label: "Pentagon", value: "Pentagon", icon: inlineShapeAsset("Pentagon"), family: "basicShapes" },
61235
- { id: "predefined-process", label: "Predefined process", value: "PredefinedProcess", icon: symbolIcon3("shape.predefinedProcess"), family: "basicShapes" },
61278
+ { id: "predefined-process", label: "Predefined process", value: "PredefinedProcess", icon: localShapeIcon("PredefinedProcess"), family: "basicShapes" },
61236
61279
  { id: "speech-bubble", label: "Speech bubble", value: "SpeachBubble", icon: inlineShapeAsset("SpeachBubble"), family: "basicShapes" },
61237
61280
  { id: "star", label: "Star", value: "Star", icon: inlineShapeAsset("Star"), family: "basicShapes" },
61238
61281
  { id: "trapezoid", label: "Trapezoid", value: "Trapezoid", icon: inlineShapeAsset("Trapezoid"), family: "basicShapes" },
61239
61282
  { id: "braces-left", label: "Braces left", value: "BracesLeft", icon: inlineShapeAsset("BracesLeft", "BracesLeft"), family: "basicShapes" },
61240
61283
  { id: "braces-right", label: "Braces right", value: "BracesRight", icon: inlineShapeAsset("BracesRight", "BracesRight"), family: "basicShapes" },
61241
- { id: "bpmn-task", label: "BPMN task", value: "BPMN_Task", icon: symbolIcon3("shape.bpmn.task"), family: "bpmn" },
61242
- { id: "bpmn-gateway", label: "BPMN gateway", value: "BPMN_Gateway", icon: symbolIcon3("shape.bpmn.gateway"), family: "bpmn" },
61243
- { id: "bpmn-gateway-parallel", label: "BPMN gateway parallel", value: "BPMN_GatewayParallel", icon: symbolIcon3("shape.bpmn.gatewayParallel"), family: "bpmn" },
61244
- { id: "bpmn-gateway-xor", label: "BPMN gateway XOR", value: "BPMN_GatewayXOR", icon: symbolIcon3("shape.bpmn.gatewayXor"), family: "bpmn" },
61245
- { id: "bpmn-start-event", label: "BPMN start event", value: "BPMN_StartEvent", icon: symbolIcon3("shape.bpmn.startEvent"), family: "bpmn" },
61246
- { id: "bpmn-start-event-non-interrupting", label: "BPMN start event non interrupting", value: "BPMN_StartEventNoneInterrupting", icon: symbolIcon3("shape.bpmn.startEventNoneInterrupting"), family: "bpmn" },
61247
- { id: "bpmn-end-event", label: "BPMN end event", value: "BPMN_EndEvent", icon: symbolIcon3("shape.bpmn.endEvent"), family: "bpmn" },
61248
- { id: "bpmn-intermediate-event", label: "BPMN intermediate event", value: "BPMN_IntermediateEvent", icon: symbolIcon3("shape.bpmn.intermediateEvent"), family: "bpmn" },
61249
- { id: "bpmn-intermediate-event-none-interrupting", label: "BPMN intermediate event none interrupting", value: "BPMN_IntermediateEventNoneInterrupting", icon: symbolIcon3("shape.bpmn.intermediateEventNoneInterrupting"), family: "bpmn" },
61250
- { id: "bpmn-data-object", label: "BPMN data object", value: "BPMN_DataObject", icon: symbolIcon3("shape.bpmn.dataObject"), family: "bpmn" },
61251
- { id: "bpmn-data-store", label: "BPMN data store", value: "BPMN_DataStore", icon: symbolIcon3("shape.bpmn.dataStore"), family: "bpmn" },
61252
- { id: "bpmn-participant", label: "BPMN participant", value: "BPMN_Participant", icon: symbolIcon3("shape.bpmn.participant"), family: "bpmn" },
61253
- { id: "bpmn-transaction", label: "BPMN transaction", value: "BPMN_Transaction", icon: symbolIcon3("shape.bpmn.transaction"), family: "bpmn" },
61254
- { id: "bpmn-event-subprocess", label: "BPMN event subprocess", value: "BPMN_EventSubprocess", icon: symbolIcon3("shape.bpmn.eventSubprocess"), family: "bpmn" },
61255
- { id: "bpmn-group", label: "BPMN group", value: "BPMN_Group", icon: symbolIcon3("shape.bpmn.group"), family: "bpmn" },
61256
- { id: "bpmn-annotation", label: "BPMN annotation", value: "BPMN_Annotation", icon: symbolIcon3("shape.bpmn.annotation"), family: "bpmn" }
61284
+ { id: "bpmn-task", label: "BPMN task", value: "BPMN_Task", icon: bpmnIcon("BPMN_Task"), family: "bpmn" },
61285
+ { id: "bpmn-gateway", label: "BPMN gateway", value: "BPMN_Gateway", icon: bpmnIcon("BPMN_Gateway"), family: "bpmn" },
61286
+ { id: "bpmn-gateway-parallel", label: "BPMN gateway parallel", value: "BPMN_GatewayParallel", icon: bpmnIcon("BPMN_GatewayParallel"), family: "bpmn" },
61287
+ { id: "bpmn-gateway-xor", label: "BPMN gateway XOR", value: "BPMN_GatewayXOR", icon: bpmnIcon("BPMN_GatewayXOR"), family: "bpmn" },
61288
+ { id: "bpmn-start-event", label: "BPMN start event", value: "BPMN_StartEvent", icon: bpmnIcon("BPMN_StartEvent"), family: "bpmn" },
61289
+ { id: "bpmn-start-event-non-interrupting", label: "BPMN start event non interrupting", value: "BPMN_StartEventNoneInterrupting", icon: bpmnIcon("BPMN_StartEventNoneInterrupting"), family: "bpmn" },
61290
+ { id: "bpmn-end-event", label: "BPMN end event", value: "BPMN_EndEvent", icon: bpmnIcon("BPMN_EndEvent"), family: "bpmn" },
61291
+ { id: "bpmn-intermediate-event", label: "BPMN intermediate event", value: "BPMN_IntermediateEvent", icon: bpmnIcon("BPMN_IntermediateEvent"), family: "bpmn" },
61292
+ { id: "bpmn-intermediate-event-none-interrupting", label: "BPMN intermediate event none interrupting", value: "BPMN_IntermediateEventNoneInterrupting", icon: bpmnIcon("BPMN_IntermediateEventNoneInterrupting"), family: "bpmn" },
61293
+ { id: "bpmn-data-object", label: "BPMN data object", value: "BPMN_DataObject", icon: bpmnIcon("BPMN_DataObject"), family: "bpmn" },
61294
+ { id: "bpmn-data-store", label: "BPMN data store", value: "BPMN_DataStore", icon: bpmnIcon("BPMN_DataStore"), family: "bpmn" },
61295
+ { id: "bpmn-participant", label: "BPMN participant", value: "BPMN_Participant", icon: bpmnIcon("BPMN_Participant"), family: "bpmn" },
61296
+ { id: "bpmn-transaction", label: "BPMN transaction", value: "BPMN_Transaction", icon: bpmnIcon("BPMN_Transaction"), family: "bpmn" },
61297
+ { id: "bpmn-event-subprocess", label: "BPMN event subprocess", value: "BPMN_EventSubprocess", icon: bpmnIcon("BPMN_EventSubprocess"), family: "bpmn" },
61298
+ { id: "bpmn-group", label: "BPMN group", value: "BPMN_Group", icon: bpmnIcon("BPMN_Group"), family: "bpmn" },
61299
+ { id: "bpmn-annotation", label: "BPMN annotation", value: "BPMN_Annotation", icon: bpmnIcon("BPMN_Annotation"), family: "bpmn" }
61257
61300
  ];
61258
61301
  var BORDER_STYLE_OPTIONS = [
61259
- { id: "solid", label: "Solid", value: "solid", icon: symbolIcon3("stroke.solid") },
61260
- { id: "dot", label: "Dot", value: "dot", icon: symbolIcon3("stroke.dot") },
61261
- { id: "dash", label: "Dash", value: "dash", icon: symbolIcon3("stroke.dash") },
61262
- { id: "long-dash", label: "Long dash", value: "longDash", icon: symbolIcon3("stroke.longDash") }
61302
+ { id: "solid", label: "Solid", value: "solid", icon: localShapeIcon("StrokeSolid") },
61303
+ { id: "dot", label: "Dot", value: "dot", icon: localShapeIcon("StrokeDot") },
61304
+ { id: "dash", label: "Dash", value: "dash", icon: localShapeIcon("StrokeDash") },
61305
+ { id: "long-dash", label: "Long dash", value: "longDash", icon: localShapeIcon("StrokeLongDash") }
61263
61306
  ];
61264
61307
  var shapeTypeControl = {
61265
61308
  id: "shapeType",
@@ -61292,10 +61335,6 @@ var fillControl = {
61292
61335
  swatch: { kind: "itemProperty", property: "backgroundColor" },
61293
61336
  note: "UI can render the current fill color as a swatch inside the icon."
61294
61337
  }),
61295
- icon: styleFillIcon({
61296
- swatch: { kind: "itemProperty", property: "backgroundColor" },
61297
- note: "UI can render the current fill color as a swatch inside the icon."
61298
- }),
61299
61338
  editor: {
61300
61339
  kind: "color",
61301
61340
  palette: COLOR_PALETTE2,
@@ -61346,7 +61385,7 @@ var shapeOverlay = {
61346
61385
  {
61347
61386
  id: "shape.shapeType",
61348
61387
  label: "Shape type",
61349
- icon: symbolIcon3("shape.type"),
61388
+ icon: localShapeIcon("Type"),
61350
61389
  target: "each",
61351
61390
  controls: [shapeTypeControl]
61352
61391
  },
@@ -61377,13 +61416,13 @@ var shapeOverlay = {
61377
61416
  {
61378
61417
  id: "shapeTypeSection",
61379
61418
  label: "Type",
61380
- icon: symbolIcon3("shape.type"),
61419
+ icon: localShapeIcon("Type"),
61381
61420
  actionIds: ["shape.shapeType"]
61382
61421
  },
61383
61422
  {
61384
61423
  id: "shapeAppearanceSection",
61385
61424
  label: "Appearance",
61386
- icon: symbolIcon3("shape.stroke"),
61425
+ icon: localShapeIcon("Stroke"),
61387
61426
  actionIds: ["shape.fill", "shape.strokeStyle"]
61388
61427
  }
61389
61428
  ]
@@ -61395,7 +61434,7 @@ var addShapeToolOverlay = {
61395
61434
  createsItemType: "Shape",
61396
61435
  family: "shape",
61397
61436
  icon: {
61398
- ...overlaySymbolIcon("tool.shape"),
61437
+ ...overlayAssetIcon("src/Items/Shape/icons/Tool.icon.svg"),
61399
61438
  state: {
61400
61439
  note: "UI may swap the top-level icon to the selected shape option when desired."
61401
61440
  }
@@ -65828,6 +65867,68 @@ var propertyOps = {
65828
65867
  }
65829
65868
  };
65830
65869
 
65870
+ // src/Tools/Tool.ts
65871
+ class Tool {
65872
+ leftButtonDown() {
65873
+ return false;
65874
+ }
65875
+ leftButtonUp() {
65876
+ return false;
65877
+ }
65878
+ leftButtonDouble() {
65879
+ return false;
65880
+ }
65881
+ rightButtonDown() {
65882
+ return false;
65883
+ }
65884
+ rightButtonUp() {
65885
+ return false;
65886
+ }
65887
+ rightButtonDouble() {
65888
+ return false;
65889
+ }
65890
+ middleButtonDown() {
65891
+ return false;
65892
+ }
65893
+ middleButtonUp() {
65894
+ return false;
65895
+ }
65896
+ middleButtonDouble() {
65897
+ return false;
65898
+ }
65899
+ keyDown(_key) {
65900
+ return false;
65901
+ }
65902
+ keyUp(_key) {
65903
+ return false;
65904
+ }
65905
+ pointerMoveBy(_x, _y) {
65906
+ return false;
65907
+ }
65908
+ pointerDown() {
65909
+ return false;
65910
+ }
65911
+ pointerUp() {
65912
+ return false;
65913
+ }
65914
+ onCancel() {}
65915
+ onConfirm() {}
65916
+ render(_context) {}
65917
+ }
65918
+
65919
+ // src/Tools/BoardTool.ts
65920
+ class BoardTool extends Tool {
65921
+ board;
65922
+ constructor(board) {
65923
+ super();
65924
+ this.board = board;
65925
+ }
65926
+ }
65927
+
65928
+ // src/Tools/WorkflowTool.ts
65929
+ class WorkflowTool extends BoardTool {
65930
+ }
65931
+
65831
65932
  // src/Items/Card/CardOverlay.ts
65832
65933
  var cardOverlay = {
65833
65934
  itemType: "Card",
@@ -65835,14 +65936,14 @@ var cardOverlay = {
65835
65936
  {
65836
65937
  id: "card.flip",
65837
65938
  label: "Flip card",
65838
- icon: overlaySymbolIcon("card.flip"),
65939
+ icon: overlayAssetIcon("src/Items/Card/icons/Flip.icon.svg"),
65839
65940
  target: "each",
65840
65941
  invoke: { kind: "customMethod", methodName: "toggleIsOpen" }
65841
65942
  },
65842
65943
  {
65843
65944
  id: "card.rotateCcw",
65844
65945
  label: "Rotate 90 counter clockwise",
65845
- icon: overlaySymbolIcon("card.rotateCcw"),
65946
+ icon: overlayAssetIcon("src/Items/Card/icons/RotateCcw.icon.svg"),
65846
65947
  target: "each",
65847
65948
  invoke: {
65848
65949
  kind: "customMethod",
@@ -65853,7 +65954,7 @@ var cardOverlay = {
65853
65954
  {
65854
65955
  id: "card.rotateCw",
65855
65956
  label: "Rotate 90 clockwise",
65856
- icon: overlaySymbolIcon("card.rotateCw"),
65957
+ icon: overlayAssetIcon("src/Items/Card/icons/RotateCw.icon.svg"),
65857
65958
  target: "each",
65858
65959
  invoke: {
65859
65960
  kind: "customMethod",
@@ -65863,6 +65964,73 @@ var cardOverlay = {
65863
65964
  }
65864
65965
  ]
65865
65966
  };
65967
+ var addCardToolOverlay = {
65968
+ toolName: "AddCard",
65969
+ label: "Card",
65970
+ kind: "create",
65971
+ createsItemType: "Card",
65972
+ family: "game",
65973
+ icon: overlayAssetIcon("src/Items/Card/icons/Tool.icon.svg"),
65974
+ launch: {
65975
+ kind: "workflow",
65976
+ workflow: {
65977
+ kind: "property-sheet",
65978
+ description: "Upload front and back images for one or more cards.",
65979
+ submitLabel: "Create cards",
65980
+ controls: [
65981
+ {
65982
+ id: "cardArtwork",
65983
+ label: "Card artwork",
65984
+ editor: {
65985
+ kind: "asset-upload",
65986
+ mode: "paired",
65987
+ fields: [
65988
+ {
65989
+ id: "face",
65990
+ label: "Front",
65991
+ accept: ["image/*"],
65992
+ required: true
65993
+ },
65994
+ {
65995
+ id: "back",
65996
+ label: "Back",
65997
+ accept: ["image/*"],
65998
+ required: true
65999
+ }
66000
+ ]
66001
+ }
66002
+ }
66003
+ ],
66004
+ submit: {
66005
+ kind: "create-items",
66006
+ itemType: "Card",
66007
+ strategy: "per-upload-entry",
66008
+ placement: "stagger-from-pointer",
66009
+ properties: [
66010
+ {
66011
+ property: "faceUrl",
66012
+ source: { kind: "uploadField", controlId: "cardArtwork", fieldId: "face" }
66013
+ },
66014
+ {
66015
+ property: "backsideUrl",
66016
+ source: { kind: "uploadField", controlId: "cardArtwork", fieldId: "back" }
66017
+ }
66018
+ ]
66019
+ }
66020
+ }
66021
+ },
66022
+ surface: {
66023
+ order: 4,
66024
+ group: {
66025
+ id: "gameItems",
66026
+ label: "Game items",
66027
+ icon: overlayAssetIcon("src/Items/Dice/icons/Tool.icon.svg"),
66028
+ order: 1,
66029
+ behavior: "open-panel"
66030
+ },
66031
+ relatedToolNames: ["AddDice", "AddScreen", "AddPouch"]
66032
+ }
66033
+ };
65866
66034
 
65867
66035
  // src/Items/Card/Card.ts
65868
66036
  var defaultCardData = {
@@ -66057,6 +66225,11 @@ registerItem({
66057
66225
  defaultData: defaultCardData,
66058
66226
  overlay: cardOverlay
66059
66227
  });
66228
+ registerTool({
66229
+ name: "AddCard",
66230
+ tool: WorkflowTool,
66231
+ overlay: addCardToolOverlay
66232
+ });
66060
66233
  registerHotkey({
66061
66234
  name: "Rotate90deg",
66062
66235
  hotkey: { key: { button: "KeyQ", shift: true }, label: { windows: "Shift+Q", mac: "⇧Q" } },
@@ -66107,28 +66280,28 @@ var deckOverlay = {
66107
66280
  {
66108
66281
  id: "deck.getTopCard",
66109
66282
  label: "Draw top card",
66110
- icon: overlaySymbolIcon("deck.drawTop"),
66283
+ icon: overlayAssetIcon("src/Items/Deck/icons/DrawTop.icon.svg"),
66111
66284
  target: "single",
66112
66285
  invoke: { kind: "customMethod", methodName: "getTopCard" }
66113
66286
  },
66114
66287
  {
66115
66288
  id: "deck.getBottomCard",
66116
66289
  label: "Draw bottom card",
66117
- icon: overlaySymbolIcon("deck.drawBottom"),
66290
+ icon: overlayAssetIcon("src/Items/Deck/icons/DrawBottom.icon.svg"),
66118
66291
  target: "single",
66119
66292
  invoke: { kind: "customMethod", methodName: "getBottomCard" }
66120
66293
  },
66121
66294
  {
66122
66295
  id: "deck.getRandomCard",
66123
66296
  label: "Draw random card",
66124
- icon: overlaySymbolIcon("deck.drawRandom"),
66297
+ icon: overlayAssetIcon("src/Items/Deck/icons/DrawRandom.icon.svg"),
66125
66298
  target: "single",
66126
66299
  invoke: { kind: "customMethod", methodName: "getRandomCard" }
66127
66300
  },
66128
66301
  {
66129
66302
  id: "deck.getCards",
66130
66303
  label: "Draw cards",
66131
- icon: overlaySymbolIcon("deck.drawMany"),
66304
+ icon: overlayAssetIcon("src/Items/Deck/icons/DrawMany.icon.svg"),
66132
66305
  target: "single",
66133
66306
  controls: [
66134
66307
  {
@@ -66150,14 +66323,14 @@ var deckOverlay = {
66150
66323
  {
66151
66324
  id: "deck.shuffle",
66152
66325
  label: "Shuffle",
66153
- icon: overlaySymbolIcon("deck.shuffle"),
66326
+ icon: overlayAssetIcon("src/Items/Deck/icons/Shuffle.icon.svg"),
66154
66327
  target: "single",
66155
66328
  invoke: { kind: "customMethod", methodName: "shuffleDeck" }
66156
66329
  },
66157
66330
  {
66158
66331
  id: "deck.flip",
66159
66332
  label: "Flip deck",
66160
- icon: overlaySymbolIcon("deck.flip"),
66333
+ icon: overlayAssetIcon("src/Items/Deck/icons/Flip.icon.svg"),
66161
66334
  target: "single",
66162
66335
  invoke: { kind: "customMethod", methodName: "flipDeck" }
66163
66336
  }
@@ -66166,7 +66339,7 @@ var deckOverlay = {
66166
66339
  var createDeckSelectionAction = {
66167
66340
  id: "deck.createFromSelection",
66168
66341
  label: "Create deck",
66169
- icon: overlaySymbolIcon("deck.createFromSelection"),
66342
+ icon: overlayAssetIcon("src/Items/Deck/icons/CreateFromSelection.icon.svg"),
66170
66343
  description: "Stacks selected cards into a new deck, or merges selected cards and decks into one deck.",
66171
66344
  invoke: { kind: "selectionMethod", methodName: "createDeck" },
66172
66345
  isAvailable: (items) => {
@@ -66563,64 +66736,6 @@ registerHotkey({
66563
66736
  }
66564
66737
  });
66565
66738
  registerSelectionAction(createDeckSelectionAction);
66566
- // src/Tools/Tool.ts
66567
- class Tool {
66568
- leftButtonDown() {
66569
- return false;
66570
- }
66571
- leftButtonUp() {
66572
- return false;
66573
- }
66574
- leftButtonDouble() {
66575
- return false;
66576
- }
66577
- rightButtonDown() {
66578
- return false;
66579
- }
66580
- rightButtonUp() {
66581
- return false;
66582
- }
66583
- rightButtonDouble() {
66584
- return false;
66585
- }
66586
- middleButtonDown() {
66587
- return false;
66588
- }
66589
- middleButtonUp() {
66590
- return false;
66591
- }
66592
- middleButtonDouble() {
66593
- return false;
66594
- }
66595
- keyDown(_key) {
66596
- return false;
66597
- }
66598
- keyUp(_key) {
66599
- return false;
66600
- }
66601
- pointerMoveBy(_x, _y) {
66602
- return false;
66603
- }
66604
- pointerDown() {
66605
- return false;
66606
- }
66607
- pointerUp() {
66608
- return false;
66609
- }
66610
- onCancel() {}
66611
- onConfirm() {}
66612
- render(_context) {}
66613
- }
66614
-
66615
- // src/Tools/BoardTool.ts
66616
- class BoardTool extends Tool {
66617
- board;
66618
- constructor(board) {
66619
- super();
66620
- this.board = board;
66621
- }
66622
- }
66623
-
66624
66739
  // src/Tools/CustomTool.ts
66625
66740
  class CustomTool extends BoardTool {
66626
66741
  name;
@@ -66735,14 +66850,14 @@ var diceOverlay = {
66735
66850
  {
66736
66851
  id: "dice.throw",
66737
66852
  label: "Throw dice",
66738
- icon: overlaySymbolIcon("dice.throw"),
66853
+ icon: overlayAssetIcon("src/Items/Dice/icons/Throw.icon.svg"),
66739
66854
  target: "each",
66740
66855
  invoke: { kind: "customMethod", methodName: "throwDice" }
66741
66856
  },
66742
66857
  {
66743
66858
  id: "dice.range",
66744
66859
  label: "Range",
66745
- icon: overlaySymbolIcon("dice.range"),
66860
+ icon: overlayAssetIcon("src/Items/Dice/icons/Range.icon.svg"),
66746
66861
  target: "each",
66747
66862
  controls: [
66748
66863
  {
@@ -66783,7 +66898,7 @@ var diceOverlay = {
66783
66898
  {
66784
66899
  id: "diceActions",
66785
66900
  label: "Dice",
66786
- icon: overlaySymbolIcon("dice.throw"),
66901
+ icon: overlayAssetIcon("src/Items/Dice/icons/Throw.icon.svg"),
66787
66902
  actionIds: ["dice.throw", "dice.range", "dice.fill"]
66788
66903
  }
66789
66904
  ]
@@ -66794,14 +66909,14 @@ var addDiceToolOverlay = {
66794
66909
  kind: "create",
66795
66910
  createsItemType: "Dice",
66796
66911
  family: "game",
66797
- icon: overlaySymbolIcon("tool.dice"),
66912
+ icon: overlayAssetIcon("src/Items/Dice/icons/Tool.icon.svg"),
66798
66913
  launch: { kind: "activate-tool" },
66799
66914
  surface: {
66800
66915
  order: 1,
66801
66916
  group: {
66802
66917
  id: "gameItems",
66803
66918
  label: "Game items",
66804
- icon: overlaySymbolIcon("tool.dice"),
66919
+ icon: overlayAssetIcon("src/Items/Dice/icons/Tool.icon.svg"),
66805
66920
  order: 1,
66806
66921
  behavior: "open-panel"
66807
66922
  },
@@ -67154,7 +67269,7 @@ var screenOverlay = {
67154
67269
  id: "screen.background",
67155
67270
  label: "Background",
67156
67271
  icon: {
67157
- ...overlaySymbolIcon("screen.background"),
67272
+ ...overlayAssetIcon("src/Items/Screen/icons/Background.icon.svg"),
67158
67273
  state: { swatch: { kind: "itemProperty", property: "backgroundColor" } }
67159
67274
  },
67160
67275
  target: "each",
@@ -67176,7 +67291,7 @@ var screenOverlay = {
67176
67291
  id: "screen.stroke",
67177
67292
  label: "Stroke",
67178
67293
  icon: {
67179
- ...overlaySymbolIcon("shape.stroke"),
67294
+ ...overlayAssetIcon("src/Items/Shape/icons/Stroke.icon.svg"),
67180
67295
  state: { swatch: { kind: "itemProperty", property: "borderColor" } }
67181
67296
  },
67182
67297
  target: "each",
@@ -67212,7 +67327,7 @@ var screenOverlay = {
67212
67327
  {
67213
67328
  id: "screenStrokeStyle",
67214
67329
  label: "Stroke",
67215
- icon: overlaySymbolIcon("shape.stroke"),
67330
+ icon: overlayAssetIcon("src/Items/Shape/icons/Stroke.icon.svg"),
67216
67331
  controlIds: ["borderColor", "borderWidth"]
67217
67332
  }
67218
67333
  ]
@@ -67220,7 +67335,7 @@ var screenOverlay = {
67220
67335
  {
67221
67336
  id: "screen.backgroundImage",
67222
67337
  label: "Background image",
67223
- icon: overlaySymbolIcon("screen.backgroundImage"),
67338
+ icon: overlayAssetIcon("src/Items/Screen/icons/BackgroundImage.icon.svg"),
67224
67339
  target: "each",
67225
67340
  when: {
67226
67341
  kind: "falsy",
@@ -67243,7 +67358,7 @@ var screenOverlay = {
67243
67358
  {
67244
67359
  id: "screen.removeBackgroundImage",
67245
67360
  label: "Remove background image",
67246
- icon: overlaySymbolIcon("screen.backgroundImage.remove"),
67361
+ icon: overlayAssetIcon("src/Items/Screen/icons/BackgroundImageRemove.icon.svg"),
67247
67362
  target: "each",
67248
67363
  when: {
67249
67364
  kind: "truthy",
@@ -67260,7 +67375,7 @@ var screenOverlay = {
67260
67375
  {
67261
67376
  id: "screenAppearance",
67262
67377
  label: "Appearance",
67263
- icon: overlaySymbolIcon("screen.background"),
67378
+ icon: overlayAssetIcon("src/Items/Screen/icons/Background.icon.svg"),
67264
67379
  actionIds: ["screen.background", "screen.stroke", "screen.backgroundImage", "screen.removeBackgroundImage"]
67265
67380
  }
67266
67381
  ]
@@ -67271,14 +67386,14 @@ var addScreenToolOverlay = {
67271
67386
  kind: "create",
67272
67387
  createsItemType: "Screen",
67273
67388
  family: "container",
67274
- icon: overlaySymbolIcon("tool.screen"),
67389
+ icon: overlayAssetIcon("src/Items/Screen/icons/Tool.icon.svg"),
67275
67390
  launch: { kind: "activate-tool" },
67276
67391
  surface: {
67277
67392
  order: 2,
67278
67393
  group: {
67279
67394
  id: "gameItems",
67280
67395
  label: "Game items",
67281
- icon: overlaySymbolIcon("tool.dice"),
67396
+ icon: overlayAssetIcon("src/Items/Dice/icons/Tool.icon.svg"),
67282
67397
  order: 1,
67283
67398
  behavior: "open-panel"
67284
67399
  },
@@ -67291,14 +67406,14 @@ var addPouchToolOverlay = {
67291
67406
  kind: "create",
67292
67407
  createsItemType: "Screen",
67293
67408
  family: "container",
67294
- icon: overlaySymbolIcon("tool.pouch"),
67409
+ icon: overlayAssetIcon("src/Items/Screen/icons/Pouch.icon.svg"),
67295
67410
  launch: { kind: "activate-tool" },
67296
67411
  surface: {
67297
67412
  order: 3,
67298
67413
  group: {
67299
67414
  id: "gameItems",
67300
67415
  label: "Game items",
67301
- icon: overlaySymbolIcon("tool.dice"),
67416
+ icon: overlayAssetIcon("src/Items/Dice/icons/Tool.icon.svg"),
67302
67417
  order: 1,
67303
67418
  behavior: "open-panel"
67304
67419
  },
@@ -70424,6 +70539,125 @@ class Presence {
70424
70539
  }
70425
70540
  }
70426
70541
 
70542
+ // src/Selection/SelectionOverlay.ts
70543
+ function everyItemHasRichText(items) {
70544
+ return items.length > 0 && items.every((item) => !!item.getRichText?.());
70545
+ }
70546
+ registerSelectionAction({
70547
+ id: "selection.delete",
70548
+ label: "Delete",
70549
+ icon: overlayAssetIcon("src/Overlay/icons/Delete.icon.svg"),
70550
+ description: "Removes the selected items from the board.",
70551
+ invoke: { kind: "selectionMethod", methodName: "removeFromBoard" },
70552
+ isAvailable: (items) => items.length > 0
70553
+ });
70554
+ registerSelectionAction({
70555
+ id: "selection.duplicate",
70556
+ label: "Duplicate",
70557
+ icon: overlayAssetIcon("src/Overlay/icons/Duplicate.icon.svg"),
70558
+ description: "Duplicates the selected items.",
70559
+ invoke: { kind: "selectionMethod", methodName: "duplicate" },
70560
+ isAvailable: (items) => items.length > 0
70561
+ });
70562
+ registerSelectionAction({
70563
+ id: "selection.lock",
70564
+ label: "Lock",
70565
+ icon: overlayAssetIcon("src/Overlay/icons/Lock.icon.svg"),
70566
+ description: "Locks the selected items.",
70567
+ invoke: { kind: "selectionMethod", methodName: "lock" },
70568
+ isAvailable: (items) => items.length > 0 && !items.some((item) => item.transformation.isLocked)
70569
+ });
70570
+ registerSelectionAction({
70571
+ id: "selection.unlock",
70572
+ label: "Unlock",
70573
+ icon: overlayAssetIcon("src/Overlay/icons/Unlock.icon.svg"),
70574
+ description: "Unlocks the selected items.",
70575
+ invoke: { kind: "selectionMethod", methodName: "unlock" },
70576
+ isAvailable: (items) => items.some((item) => item.transformation.isLocked)
70577
+ });
70578
+ registerSelectionAction({
70579
+ id: "selection.bringToFront",
70580
+ label: "Bring to front",
70581
+ icon: overlayAssetIcon("src/Overlay/icons/BringToFront.icon.svg"),
70582
+ description: "Moves the selection above overlapping items.",
70583
+ invoke: { kind: "selectionMethod", methodName: "bringToFront" },
70584
+ isAvailable: (items) => items.length > 0
70585
+ });
70586
+ registerSelectionAction({
70587
+ id: "selection.sendToBack",
70588
+ label: "Send to back",
70589
+ icon: overlayAssetIcon("src/Overlay/icons/SendToBack.icon.svg"),
70590
+ description: "Moves the selection behind overlapping items.",
70591
+ invoke: { kind: "selectionMethod", methodName: "sendToBack" },
70592
+ isAvailable: (items) => items.length > 0
70593
+ });
70594
+ registerSelectionAction({
70595
+ id: "selection.text.fontSize",
70596
+ label: "Font size",
70597
+ icon: styleFontSizeIcon(),
70598
+ invoke: { kind: "selectionMethod", methodName: "setFontSize" },
70599
+ controls: [
70600
+ {
70601
+ id: "fontSize",
70602
+ label: "Font size",
70603
+ valueSource: { kind: "selectionProperty", property: "getFontSize" },
70604
+ editor: {
70605
+ kind: "number-stepper",
70606
+ min: 8,
70607
+ max: 144,
70608
+ step: 1,
70609
+ presets: [12, 14, 16, 18, 24, 32, 48],
70610
+ unit: "px"
70611
+ },
70612
+ invoke: { kind: "selectionMethod", methodName: "setFontSize" }
70613
+ }
70614
+ ],
70615
+ isAvailable: everyItemHasRichText
70616
+ });
70617
+ registerSelectionAction({
70618
+ id: "selection.text.color",
70619
+ label: "Text color",
70620
+ icon: styleColorIcon({
70621
+ swatch: { kind: "selectionProperty", property: "getFontColor" }
70622
+ }),
70623
+ invoke: { kind: "selectionMethod", methodName: "setFontColor" },
70624
+ controls: [
70625
+ {
70626
+ id: "fontColor",
70627
+ label: "Text color",
70628
+ valueSource: { kind: "selectionProperty", property: "getFontColor" },
70629
+ editor: {
70630
+ kind: "color",
70631
+ palette: ["#111111", "#FFFFFF", "#E11D48", "#2563EB", "#16A34A", "#F59E0B"]
70632
+ },
70633
+ invoke: { kind: "selectionMethod", methodName: "setFontColor" }
70634
+ }
70635
+ ],
70636
+ isAvailable: everyItemHasRichText
70637
+ });
70638
+ registerSelectionAction({
70639
+ id: "selection.text.highlight",
70640
+ label: "Highlight",
70641
+ icon: {
70642
+ ...overlayAssetIcon("src/Items/Screen/icons/Background.icon.svg"),
70643
+ state: { swatch: { kind: "selectionProperty", property: "getFontHighlight" } }
70644
+ },
70645
+ invoke: { kind: "selectionMethod", methodName: "setFontHighlight" },
70646
+ controls: [
70647
+ {
70648
+ id: "fontHighlight",
70649
+ label: "Highlight",
70650
+ valueSource: { kind: "selectionProperty", property: "getFontHighlight" },
70651
+ editor: {
70652
+ kind: "color",
70653
+ palette: ["transparent", "#FEF08A", "#FDBA74", "#BFDBFE", "#FBCFE8", "#D9F99D"]
70654
+ },
70655
+ invoke: { kind: "selectionMethod", methodName: "setFontHighlight" }
70656
+ }
70657
+ ],
70658
+ isAvailable: everyItemHasRichText
70659
+ });
70660
+
70427
70661
  // src/Selection/SelectionItems.ts
70428
70662
  class SelectionItems {
70429
70663
  items = new Map;
@@ -75263,7 +75497,7 @@ var addDrawingToolOverlay = {
75263
75497
  family: "drawing",
75264
75498
  createsItemType: "Drawing",
75265
75499
  icon: {
75266
- ...overlaySymbolIcon("tool.pen"),
75500
+ ...overlayAssetIcon("src/Items/Drawing/icons/Pen.icon.svg"),
75267
75501
  state: {
75268
75502
  swatch: { kind: "toolProperty", property: "strokeColor" },
75269
75503
  note: "UI can show the pending pen color in the icon."
@@ -75275,7 +75509,7 @@ var addDrawingToolOverlay = {
75275
75509
  {
75276
75510
  id: "drawingDefaults",
75277
75511
  label: "Pen defaults",
75278
- icon: overlaySymbolIcon("tool.pen"),
75512
+ icon: overlayAssetIcon("src/Items/Drawing/icons/Pen.icon.svg"),
75279
75513
  controlIds: strokeControls2.map((control) => control.id)
75280
75514
  }
75281
75515
  ]
@@ -75286,7 +75520,7 @@ var addDrawingToolOverlay = {
75286
75520
  group: {
75287
75521
  id: "drawingTools",
75288
75522
  label: "Drawing",
75289
- icon: overlaySymbolIcon("tool.pen"),
75523
+ icon: overlayAssetIcon("src/Items/Drawing/icons/Pen.icon.svg"),
75290
75524
  order: 5,
75291
75525
  behavior: "activate-last-used"
75292
75526
  },
@@ -75300,7 +75534,7 @@ var addHighlighterToolOverlay = {
75300
75534
  family: "drawing",
75301
75535
  createsItemType: "Drawing",
75302
75536
  icon: {
75303
- ...overlaySymbolIcon("tool.highlighter"),
75537
+ ...overlayAssetIcon("src/Items/Drawing/icons/Highlighter.icon.svg"),
75304
75538
  state: {
75305
75539
  swatch: { kind: "toolProperty", property: "strokeColor" },
75306
75540
  note: "UI can show the pending highlighter color in the icon."
@@ -75312,7 +75546,7 @@ var addHighlighterToolOverlay = {
75312
75546
  {
75313
75547
  id: "highlighterDefaults",
75314
75548
  label: "Highlighter defaults",
75315
- icon: overlaySymbolIcon("tool.highlighter"),
75549
+ icon: overlayAssetIcon("src/Items/Drawing/icons/Highlighter.icon.svg"),
75316
75550
  controlIds: strokeControls2.map((control) => control.id)
75317
75551
  }
75318
75552
  ]
@@ -75323,7 +75557,7 @@ var addHighlighterToolOverlay = {
75323
75557
  group: {
75324
75558
  id: "drawingTools",
75325
75559
  label: "Drawing",
75326
- icon: overlaySymbolIcon("tool.pen"),
75560
+ icon: overlayAssetIcon("src/Items/Drawing/icons/Pen.icon.svg"),
75327
75561
  order: 5,
75328
75562
  behavior: "activate-last-used"
75329
75563
  },
@@ -75335,7 +75569,7 @@ var eraserToolOverlay = {
75335
75569
  label: "Eraser",
75336
75570
  kind: "mode",
75337
75571
  family: "drawing",
75338
- icon: overlaySymbolIcon("tool.eraser"),
75572
+ icon: overlayAssetIcon("src/Items/Drawing/icons/Eraser.icon.svg"),
75339
75573
  defaults: {
75340
75574
  controls: [
75341
75575
  {
@@ -75359,7 +75593,7 @@ var eraserToolOverlay = {
75359
75593
  group: {
75360
75594
  id: "drawingTools",
75361
75595
  label: "Drawing",
75362
- icon: overlaySymbolIcon("tool.pen"),
75596
+ icon: overlayAssetIcon("src/Items/Drawing/icons/Pen.icon.svg"),
75363
75597
  order: 5,
75364
75598
  behavior: "activate-last-used"
75365
75599
  },
@@ -75564,7 +75798,7 @@ var frameTypeOptions = Object.keys(Frames).map((frameType) => ({
75564
75798
  id: frameType,
75565
75799
  label: frameType === "Custom" ? "Custom" : Frames[frameType].name,
75566
75800
  value: frameType,
75567
- icon: overlaySymbolIcon(`frame.${frameType}`)
75801
+ icon: overlayAssetIcon(frameType === "Custom" ? "src/Items/Frame/Basic/Custom/Custom.icon.svg" : frameType === "A4" ? "src/Items/Frame/Basic/A4/A4.icon.svg" : frameType === "Letter" ? "src/Items/Frame/Basic/Letter/Letter.icon.svg" : frameType === "Frame16x9" ? "src/Items/Frame/Basic/16-9/16-9.icon.svg" : frameType === "Frame4x3" ? "src/Items/Frame/Basic/4-3/4-3.icon.svg" : frameType === "Frame1x1" ? "src/Items/Frame/Basic/1-1/1-1.icon.svg" : frameType === "Frame3x2" ? "src/Items/Frame/Basic/3-2/3-2.icon.svg" : "src/Items/Frame/Basic/9-18/9-18.icon.svg")
75568
75802
  }));
75569
75803
  var addFrameToolOverlay = {
75570
75804
  toolName: "AddFrame",
@@ -75572,7 +75806,7 @@ var addFrameToolOverlay = {
75572
75806
  kind: "create",
75573
75807
  createsItemType: "Frame",
75574
75808
  family: "frame",
75575
- icon: overlaySymbolIcon("tool.frame"),
75809
+ icon: overlayAssetIcon("src/Items/Frame/Frame.icon.svg"),
75576
75810
  defaults: {
75577
75811
  controls: [
75578
75812
  {
@@ -75954,7 +76188,7 @@ var addStickerToolOverlay = {
75954
76188
  createsItemType: "Sticker",
75955
76189
  family: "sticker",
75956
76190
  icon: {
75957
- ...overlaySymbolIcon("tool.sticker"),
76191
+ ...overlayAssetIcon("src/Items/Sticker/Path/Sticker.icon.svg"),
75958
76192
  state: {
75959
76193
  swatch: { kind: "toolProperty", property: "backgroundColor" }
75960
76194
  }