microboard-temp 0.14.17 → 0.14.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/esm/node.js CHANGED
@@ -12274,6 +12274,45 @@ function toLocalTransformOp(op, containerMatrix, itemId) {
12274
12274
  return op;
12275
12275
  }
12276
12276
  }
12277
+ // src/Overlay/IconPack.ts
12278
+ var OVERLAY_ICON_SPRITE_PATH = "src/Overlay/overlay-icons.svg";
12279
+ function overlaySymbolIcon(key) {
12280
+ return {
12281
+ kind: "symbol",
12282
+ key,
12283
+ sourcePath: OVERLAY_ICON_SPRITE_PATH
12284
+ };
12285
+ }
12286
+ function overlayAssetIcon(path2) {
12287
+ return {
12288
+ kind: "asset",
12289
+ path: path2,
12290
+ mimeType: "image/svg+xml"
12291
+ };
12292
+ }
12293
+
12294
+ // src/Overlay/OverlayIcons.ts
12295
+ var OVERLAY_SYMBOL_KEYS = {
12296
+ styleFill: "style.fill",
12297
+ styleStroke: "style.stroke",
12298
+ styleColor: "style.color",
12299
+ styleFontSize: "style.fontSize"
12300
+ };
12301
+ function symbolIcon(key, state) {
12302
+ return state ? { kind: "symbol", key, sourcePath: OVERLAY_ICON_SPRITE_PATH, state } : { kind: "symbol", key, sourcePath: OVERLAY_ICON_SPRITE_PATH };
12303
+ }
12304
+ function styleFillIcon(state) {
12305
+ return symbolIcon(OVERLAY_SYMBOL_KEYS.styleFill, state);
12306
+ }
12307
+ function styleStrokeIcon(state) {
12308
+ return symbolIcon(OVERLAY_SYMBOL_KEYS.styleStroke, state);
12309
+ }
12310
+ function styleColorIcon(state) {
12311
+ return symbolIcon(OVERLAY_SYMBOL_KEYS.styleColor, state);
12312
+ }
12313
+ function styleFontSizeIcon(state) {
12314
+ return symbolIcon(OVERLAY_SYMBOL_KEYS.styleFontSize, state);
12315
+ }
12277
12316
  // src/Overlay/overlayRegistry.ts
12278
12317
  var itemOverlays = {};
12279
12318
  var toolOverlays = {};
@@ -12301,6 +12340,45 @@ function getToolOverlay(toolName) {
12301
12340
  function listToolOverlays() {
12302
12341
  return Object.values(toolOverlays);
12303
12342
  }
12343
+ function listCreateSurfaceEntries() {
12344
+ const groupedEntries = new Map;
12345
+ const ungroupedEntries = [];
12346
+ for (const tool of Object.values(toolOverlays)) {
12347
+ const group = tool.surface?.group;
12348
+ if (!group) {
12349
+ ungroupedEntries.push({
12350
+ kind: "tool",
12351
+ tool,
12352
+ order: tool.surface?.order
12353
+ });
12354
+ continue;
12355
+ }
12356
+ const existing = groupedEntries.get(group.id);
12357
+ if (existing) {
12358
+ existing.tools.push(tool);
12359
+ if (existing.order === undefined && group.order !== undefined) {
12360
+ existing.order = group.order;
12361
+ }
12362
+ continue;
12363
+ }
12364
+ groupedEntries.set(group.id, {
12365
+ kind: "group",
12366
+ id: group.id,
12367
+ label: group.label,
12368
+ description: group.description,
12369
+ icon: group.icon,
12370
+ order: group.order,
12371
+ behavior: group.behavior,
12372
+ tools: [tool]
12373
+ });
12374
+ }
12375
+ const sortedGroups = [...groupedEntries.values()].map((group) => ({
12376
+ ...group,
12377
+ tools: [...group.tools].sort(compareToolsBySurfaceOrder)
12378
+ })).sort(compareEntriesByOrder);
12379
+ const sortedUngroupedEntries = [...ungroupedEntries].sort(compareEntriesByOrder);
12380
+ return [...sortedGroups, ...sortedUngroupedEntries];
12381
+ }
12304
12382
  function listSelectionActions() {
12305
12383
  return Object.values(selectionActions);
12306
12384
  }
@@ -12310,6 +12388,33 @@ function getSelectionOverlayActions(items) {
12310
12388
  function resolveDynamicOptions(providerId, context) {
12311
12389
  return dynamicOptionsResolvers[providerId]?.(context) ?? [];
12312
12390
  }
12391
+ function matchesOverlayCondition(condition, context) {
12392
+ if (!condition) {
12393
+ return true;
12394
+ }
12395
+ switch (condition.kind) {
12396
+ case "equals":
12397
+ return readOverlayValueSource(context, condition.source) === condition.value;
12398
+ case "truthy":
12399
+ return !!readOverlayValueSource(context, condition.source);
12400
+ case "falsy":
12401
+ return !readOverlayValueSource(context, condition.source);
12402
+ case "itemTypeIn":
12403
+ return context.items?.every((item) => condition.itemTypes.includes(item.itemType)) ?? (context.item ? condition.itemTypes.includes(context.item.itemType) : false);
12404
+ case "selectionSize": {
12405
+ const size = context.items?.length ?? (context.item ? 1 : 0);
12406
+ const meetsMin = condition.min === undefined || size >= condition.min;
12407
+ const meetsMax = condition.max === undefined || size <= condition.max;
12408
+ return meetsMin && meetsMax;
12409
+ }
12410
+ case "allOf":
12411
+ return condition.conditions.every((child) => matchesOverlayCondition(child, context));
12412
+ case "anyOf":
12413
+ return condition.conditions.some((child) => matchesOverlayCondition(child, context));
12414
+ case "not":
12415
+ return !matchesOverlayCondition(condition.condition, context);
12416
+ }
12417
+ }
12313
12418
  function intersectOverlayActions(items) {
12314
12419
  if (items.length === 0) {
12315
12420
  return [];
@@ -12328,6 +12433,24 @@ function intersectOverlayActions(items) {
12328
12433
  }
12329
12434
  return [...counts.values()].filter((action) => overlays.every((overlay) => overlay.actions.some((candidate) => candidate.id === action.id)) && (action.target !== "single" || items.length === 1));
12330
12435
  }
12436
+ function compareToolsBySurfaceOrder(a, b) {
12437
+ const aOrder = a.surface?.order ?? Number.MAX_SAFE_INTEGER;
12438
+ const bOrder = b.surface?.order ?? Number.MAX_SAFE_INTEGER;
12439
+ return aOrder - bOrder || a.label.localeCompare(b.label);
12440
+ }
12441
+ function compareEntriesByOrder(a, b) {
12442
+ const aOrder = a.order ?? Number.MAX_SAFE_INTEGER;
12443
+ const bOrder = b.order ?? Number.MAX_SAFE_INTEGER;
12444
+ const aLabel = a.label ?? a.tool?.label ?? "";
12445
+ const bLabel = b.label ?? b.tool?.label ?? "";
12446
+ return aOrder - bOrder || aLabel.localeCompare(bLabel);
12447
+ }
12448
+ function readOverlayValueSource(context, source) {
12449
+ if (source.kind === "itemProperty") {
12450
+ return context.item ? context.item[source.property] : undefined;
12451
+ }
12452
+ return context.tool ? context.tool[source.property] : undefined;
12453
+ }
12331
12454
  // src/Items/BaseItem/BaseItem.ts
12332
12455
  class BaseItem {
12333
12456
  static createCommand;
@@ -40062,7 +40185,8 @@ var richTextOverlay = {
40062
40185
  {
40063
40186
  id: "text.fontSize",
40064
40187
  label: "Font size",
40065
- icon: { kind: "symbol", key: "text.fontSize" },
40188
+ icon: styleFontSizeIcon(),
40189
+ icon: styleFontSizeIcon(),
40066
40190
  target: "each",
40067
40191
  controls: [
40068
40192
  {
@@ -40080,6 +40204,14 @@ var richTextOverlay = {
40080
40204
  }
40081
40205
  ]
40082
40206
  }
40207
+ ],
40208
+ sections: [
40209
+ {
40210
+ id: "textTypography",
40211
+ label: "Typography",
40212
+ icon: overlaySymbolIcon("text.fontSize"),
40213
+ actionIds: ["text.fontSize"]
40214
+ }
40083
40215
  ]
40084
40216
  };
40085
40217
  var addTextToolOverlay = {
@@ -40088,8 +40220,12 @@ var addTextToolOverlay = {
40088
40220
  kind: "create",
40089
40221
  createsItemType: "RichText",
40090
40222
  family: "text",
40091
- icon: { kind: "symbol", key: "tool.text" },
40092
- description: "Creates editable rich text. The current first pass has no pre-placement defaults on this tool."
40223
+ icon: overlaySymbolIcon("tool.text"),
40224
+ description: "Creates editable rich text. The current first pass has no pre-placement defaults on this tool.",
40225
+ launch: { kind: "activate-tool" },
40226
+ surface: {
40227
+ order: 6
40228
+ }
40093
40229
  };
40094
40230
 
40095
40231
  // src/Items/RichText/RichText.ts
@@ -46492,12 +46628,12 @@ var COLOR_PALETTE = [
46492
46628
  "#118AB2",
46493
46629
  "#7B61FF"
46494
46630
  ];
46495
- var symbolIcon = (key) => ({ kind: "symbol", key });
46631
+ var symbolIcon2 = (key) => overlaySymbolIcon(key);
46496
46632
  var lineStyleOptions = ConnectorLineStyles.map((style) => ({
46497
46633
  id: style,
46498
46634
  label: style[0].toUpperCase() + style.slice(1),
46499
46635
  value: style,
46500
- icon: symbolIcon(`connector.lineStyle.${style}`)
46636
+ icon: symbolIcon2(`connector.lineStyle.${style}`)
46501
46637
  }));
46502
46638
  var lineWidthOptions = ConnectionLineWidths.map((width) => ({
46503
46639
  id: `${width}`,
@@ -46508,13 +46644,13 @@ var pointerOptions = CONNECTOR_POINTER_TYPES.map((pointer) => ({
46508
46644
  id: pointer,
46509
46645
  label: pointer,
46510
46646
  value: pointer,
46511
- icon: symbolIcon(`connector.pointer.${pointer}`)
46647
+ icon: symbolIcon2(`connector.pointer.${pointer}`)
46512
46648
  }));
46513
46649
  var borderStyleOptions = ["solid", "dot", "dash", "longDash"].map((style) => ({
46514
46650
  id: style,
46515
46651
  label: style,
46516
46652
  value: style,
46517
- icon: symbolIcon(`stroke.${style}`)
46653
+ icon: symbolIcon2(`stroke.${style}`)
46518
46654
  }));
46519
46655
  var connectorStyleControls = [
46520
46656
  {
@@ -46569,7 +46705,7 @@ var connectorStyleControls = [
46569
46705
  {
46570
46706
  id: "smartJump",
46571
46707
  label: "Smart jump",
46572
- icon: symbolIcon("connector.smartJump"),
46708
+ icon: symbolIcon2("connector.smartJump"),
46573
46709
  valueSource: { kind: "itemProperty", property: "smartJump" },
46574
46710
  editor: { kind: "toggle", trueLabel: "On", falseLabel: "Off" },
46575
46711
  invoke: { kind: "setProperty", property: "smartJump" }
@@ -46628,7 +46764,7 @@ var connectorToolControls = [
46628
46764
  {
46629
46765
  id: "toolSmartJump",
46630
46766
  label: "Smart jump",
46631
- icon: symbolIcon("connector.smartJump"),
46767
+ icon: symbolIcon2("connector.smartJump"),
46632
46768
  valueSource: { kind: "toolProperty", property: "smartJump" },
46633
46769
  editor: { kind: "toggle", trueLabel: "On", falseLabel: "Off" },
46634
46770
  invoke: { kind: "toolProperty", property: "smartJump" }
@@ -46640,25 +46776,33 @@ var connectorOverlay = {
46640
46776
  {
46641
46777
  id: "connector.switchPointers",
46642
46778
  label: "Switch arrows",
46643
- icon: symbolIcon("connector.switchPointers"),
46779
+ icon: symbolIcon2("connector.switchPointers"),
46644
46780
  target: "selection",
46645
46781
  invoke: { kind: "operation", class: "Connector", method: "switchPointers" }
46646
46782
  },
46647
46783
  {
46648
46784
  id: "connector.style",
46649
46785
  label: "Connector style",
46650
- icon: symbolIcon("connector.style"),
46786
+ icon: symbolIcon2("connector.style"),
46651
46787
  target: "each",
46652
46788
  controls: connectorStyleControls,
46653
46789
  groups: [
46654
46790
  {
46655
46791
  id: "connectorStyle",
46656
46792
  label: "Connector style",
46657
- icon: symbolIcon("connector.style"),
46793
+ icon: symbolIcon2("connector.style"),
46658
46794
  controlIds: connectorStyleControls.map((control) => control.id)
46659
46795
  }
46660
46796
  ]
46661
46797
  }
46798
+ ],
46799
+ sections: [
46800
+ {
46801
+ id: "connectorArrows",
46802
+ label: "Arrows",
46803
+ icon: symbolIcon2("connector.style"),
46804
+ actionIds: ["connector.switchPointers", "connector.style"]
46805
+ }
46662
46806
  ]
46663
46807
  };
46664
46808
  var addConnectorToolOverlay = {
@@ -46679,12 +46823,24 @@ var addConnectorToolOverlay = {
46679
46823
  controls: connectorToolControls,
46680
46824
  groups: [
46681
46825
  {
46682
- id: "connectorToolStyle",
46826
+ id: "connectorToolQuickDefaults",
46827
+ label: "Connector quick defaults",
46828
+ icon: symbolIcon2("connector.lineStyle.straight"),
46829
+ controlIds: ["toolLineStyle"],
46830
+ description: "Primary defaults that match the compact create-surface picker."
46831
+ },
46832
+ {
46833
+ id: "connectorToolAdvancedDefaults",
46683
46834
  label: "Connector defaults",
46684
- icon: symbolIcon("connector.style"),
46685
- controlIds: connectorToolControls.map((control) => control.id)
46835
+ icon: symbolIcon2("connector.style"),
46836
+ controlIds: connectorToolControls.map((control) => control.id),
46837
+ description: "Extended defaults available in richer create flows."
46686
46838
  }
46687
46839
  ]
46840
+ },
46841
+ launch: { kind: "activate-tool" },
46842
+ surface: {
46843
+ order: 8
46688
46844
  }
46689
46845
  };
46690
46846
 
@@ -60823,63 +60979,59 @@ var COLOR_PALETTE2 = [
60823
60979
  "#7B61FF",
60824
60980
  "transparent"
60825
60981
  ];
60826
- var inlineShapeAsset = (folder, file2 = folder) => ({
60827
- kind: "asset",
60828
- path: `src/Items/Shape/Basic/${folder}/${file2}.icon.svg`,
60829
- mimeType: "image/svg+xml"
60830
- });
60831
- var symbolIcon2 = (key) => ({ kind: "symbol", key });
60982
+ var inlineShapeAsset = (folder, file2 = folder) => overlayAssetIcon(`src/Items/Shape/Basic/${folder}/${file2}.icon.svg`);
60983
+ var symbolIcon3 = (key) => overlaySymbolIcon(key);
60832
60984
  var BASIC_INLINE_OPTIONS = [
60833
- { id: "rectangle", label: "Rectangle", value: "Rectangle", icon: inlineShapeAsset("Rectangle") },
60834
- { id: "rounded-rectangle", label: "Rounded rectangle", value: "RoundedRectangle", icon: inlineShapeAsset("RoundedRectangle") },
60835
- { id: "circle", label: "Circle", value: "Circle", icon: inlineShapeAsset("Circle") },
60836
- { id: "triangle", label: "Triangle", value: "Triangle", icon: inlineShapeAsset("Triangle") },
60837
- { id: "rhombus", label: "Rhombus", value: "Rhombus", icon: inlineShapeAsset("Rhombus") }
60985
+ { id: "rectangle", label: "Rectangle", value: "Rectangle", icon: inlineShapeAsset("Rectangle"), family: "basicShapes" },
60986
+ { id: "rounded-rectangle", label: "Rounded rectangle", value: "RoundedRectangle", icon: inlineShapeAsset("RoundedRectangle"), family: "basicShapes" },
60987
+ { id: "circle", label: "Circle", value: "Circle", icon: inlineShapeAsset("Circle"), family: "basicShapes" },
60988
+ { id: "triangle", label: "Triangle", value: "Triangle", icon: inlineShapeAsset("Triangle"), family: "basicShapes" },
60989
+ { id: "rhombus", label: "Rhombus", value: "Rhombus", icon: inlineShapeAsset("Rhombus"), family: "basicShapes" }
60838
60990
  ];
60839
60991
  var SHAPE_CATALOG_OPTIONS = [
60840
60992
  ...BASIC_INLINE_OPTIONS,
60841
- { id: "reversed-triangle", label: "Reversed triangle", value: "ReversedTriangle", icon: symbolIcon2("shape.reversedTriangle") },
60842
- { id: "arrow-left", label: "Arrow left", value: "ArrowLeft", icon: inlineShapeAsset("ArrowLeft") },
60843
- { id: "arrow-right", label: "Arrow right", value: "ArrowRight", icon: inlineShapeAsset("ArrowRight") },
60844
- { id: "arrow-left-right", label: "Arrow left right", value: "ArrowLeftRight", icon: inlineShapeAsset("ArrowLeftRight") },
60845
- { id: "arrow-block-left", label: "Arrow block left", value: "ArrowBlockLeft", icon: symbolIcon2("shape.arrowBlockLeft") },
60846
- { id: "arrow-block-right", label: "Arrow block right", value: "ArrowBlockRight", icon: symbolIcon2("shape.arrowBlockRight") },
60847
- { id: "cloud", label: "Cloud", value: "Cloud", icon: inlineShapeAsset("Cloud") },
60848
- { id: "cross", label: "Cross", value: "Cross", icon: inlineShapeAsset("Cross") },
60849
- { id: "cylinder", label: "Cylinder", value: "Cylinder", icon: inlineShapeAsset("Cylinder") },
60850
- { id: "hexagon", label: "Hexagon", value: "Hexagon", icon: inlineShapeAsset("Hexagon") },
60851
- { id: "octagon", label: "Octagon", value: "Octagon", icon: inlineShapeAsset("Octagon") },
60852
- { id: "parallelogram", label: "Parallelogram", value: "Parallelogram", icon: inlineShapeAsset("Parallelogram") },
60853
- { id: "reversed-parallelogram", label: "Reversed parallelogram", value: "ReversedParallelogram", icon: symbolIcon2("shape.reversedParallelogram") },
60854
- { id: "pentagon", label: "Pentagon", value: "Pentagon", icon: inlineShapeAsset("Pentagon") },
60855
- { id: "predefined-process", label: "Predefined process", value: "PredefinedProcess", icon: symbolIcon2("shape.predefinedProcess") },
60856
- { id: "speech-bubble", label: "Speech bubble", value: "SpeachBubble", icon: inlineShapeAsset("SpeachBubble") },
60857
- { id: "star", label: "Star", value: "Star", icon: inlineShapeAsset("Star") },
60858
- { id: "trapezoid", label: "Trapezoid", value: "Trapezoid", icon: inlineShapeAsset("Trapezoid") },
60859
- { id: "braces-left", label: "Braces left", value: "BracesLeft", icon: inlineShapeAsset("BracesLeft", "BracesLeft") },
60860
- { id: "braces-right", label: "Braces right", value: "BracesRight", icon: inlineShapeAsset("BracesRight", "BracesRight") },
60861
- { id: "bpmn-task", label: "BPMN task", value: "BPMN_Task", icon: symbolIcon2("shape.bpmn.task") },
60862
- { id: "bpmn-gateway", label: "BPMN gateway", value: "BPMN_Gateway", icon: symbolIcon2("shape.bpmn.gateway") },
60863
- { id: "bpmn-gateway-parallel", label: "BPMN gateway parallel", value: "BPMN_GatewayParallel", icon: symbolIcon2("shape.bpmn.gatewayParallel") },
60864
- { id: "bpmn-gateway-xor", label: "BPMN gateway XOR", value: "BPMN_GatewayXOR", icon: symbolIcon2("shape.bpmn.gatewayXor") },
60865
- { id: "bpmn-start-event", label: "BPMN start event", value: "BPMN_StartEvent", icon: symbolIcon2("shape.bpmn.startEvent") },
60866
- { id: "bpmn-start-event-non-interrupting", label: "BPMN start event non interrupting", value: "BPMN_StartEventNoneInterrupting", icon: symbolIcon2("shape.bpmn.startEventNoneInterrupting") },
60867
- { id: "bpmn-end-event", label: "BPMN end event", value: "BPMN_EndEvent", icon: symbolIcon2("shape.bpmn.endEvent") },
60868
- { id: "bpmn-intermediate-event", label: "BPMN intermediate event", value: "BPMN_IntermediateEvent", icon: symbolIcon2("shape.bpmn.intermediateEvent") },
60869
- { id: "bpmn-intermediate-event-none-interrupting", label: "BPMN intermediate event none interrupting", value: "BPMN_IntermediateEventNoneInterrupting", icon: symbolIcon2("shape.bpmn.intermediateEventNoneInterrupting") },
60870
- { id: "bpmn-data-object", label: "BPMN data object", value: "BPMN_DataObject", icon: symbolIcon2("shape.bpmn.dataObject") },
60871
- { id: "bpmn-data-store", label: "BPMN data store", value: "BPMN_DataStore", icon: symbolIcon2("shape.bpmn.dataStore") },
60872
- { id: "bpmn-participant", label: "BPMN participant", value: "BPMN_Participant", icon: symbolIcon2("shape.bpmn.participant") },
60873
- { id: "bpmn-transaction", label: "BPMN transaction", value: "BPMN_Transaction", icon: symbolIcon2("shape.bpmn.transaction") },
60874
- { id: "bpmn-event-subprocess", label: "BPMN event subprocess", value: "BPMN_EventSubprocess", icon: symbolIcon2("shape.bpmn.eventSubprocess") },
60875
- { id: "bpmn-group", label: "BPMN group", value: "BPMN_Group", icon: symbolIcon2("shape.bpmn.group") },
60876
- { id: "bpmn-annotation", label: "BPMN annotation", value: "BPMN_Annotation", icon: symbolIcon2("shape.bpmn.annotation") }
60993
+ { id: "reversed-triangle", label: "Reversed triangle", value: "ReversedTriangle", icon: symbolIcon3("shape.reversedTriangle"), family: "basicShapes" },
60994
+ { id: "arrow-left", label: "Arrow left", value: "ArrowLeft", icon: inlineShapeAsset("ArrowLeft"), family: "basicShapes" },
60995
+ { id: "arrow-right", label: "Arrow right", value: "ArrowRight", icon: inlineShapeAsset("ArrowRight"), family: "basicShapes" },
60996
+ { id: "arrow-left-right", label: "Arrow left right", value: "ArrowLeftRight", icon: inlineShapeAsset("ArrowLeftRight"), family: "basicShapes" },
60997
+ { id: "arrow-block-left", label: "Arrow block left", value: "ArrowBlockLeft", icon: symbolIcon3("shape.arrowBlockLeft"), family: "basicShapes" },
60998
+ { id: "arrow-block-right", label: "Arrow block right", value: "ArrowBlockRight", icon: symbolIcon3("shape.arrowBlockRight"), family: "basicShapes" },
60999
+ { id: "cloud", label: "Cloud", value: "Cloud", icon: inlineShapeAsset("Cloud"), family: "basicShapes" },
61000
+ { id: "cross", label: "Cross", value: "Cross", icon: inlineShapeAsset("Cross"), family: "basicShapes" },
61001
+ { id: "cylinder", label: "Cylinder", value: "Cylinder", icon: inlineShapeAsset("Cylinder"), family: "basicShapes" },
61002
+ { id: "hexagon", label: "Hexagon", value: "Hexagon", icon: inlineShapeAsset("Hexagon"), family: "basicShapes" },
61003
+ { id: "octagon", label: "Octagon", value: "Octagon", icon: inlineShapeAsset("Octagon"), family: "basicShapes" },
61004
+ { id: "parallelogram", label: "Parallelogram", value: "Parallelogram", icon: inlineShapeAsset("Parallelogram"), family: "basicShapes" },
61005
+ { id: "reversed-parallelogram", label: "Reversed parallelogram", value: "ReversedParallelogram", icon: symbolIcon3("shape.reversedParallelogram"), family: "basicShapes" },
61006
+ { id: "pentagon", label: "Pentagon", value: "Pentagon", icon: inlineShapeAsset("Pentagon"), family: "basicShapes" },
61007
+ { id: "predefined-process", label: "Predefined process", value: "PredefinedProcess", icon: symbolIcon3("shape.predefinedProcess"), family: "basicShapes" },
61008
+ { id: "speech-bubble", label: "Speech bubble", value: "SpeachBubble", icon: inlineShapeAsset("SpeachBubble"), family: "basicShapes" },
61009
+ { id: "star", label: "Star", value: "Star", icon: inlineShapeAsset("Star"), family: "basicShapes" },
61010
+ { id: "trapezoid", label: "Trapezoid", value: "Trapezoid", icon: inlineShapeAsset("Trapezoid"), family: "basicShapes" },
61011
+ { id: "braces-left", label: "Braces left", value: "BracesLeft", icon: inlineShapeAsset("BracesLeft", "BracesLeft"), family: "basicShapes" },
61012
+ { id: "braces-right", label: "Braces right", value: "BracesRight", icon: inlineShapeAsset("BracesRight", "BracesRight"), family: "basicShapes" },
61013
+ { id: "bpmn-task", label: "BPMN task", value: "BPMN_Task", icon: symbolIcon3("shape.bpmn.task"), family: "bpmn" },
61014
+ { id: "bpmn-gateway", label: "BPMN gateway", value: "BPMN_Gateway", icon: symbolIcon3("shape.bpmn.gateway"), family: "bpmn" },
61015
+ { id: "bpmn-gateway-parallel", label: "BPMN gateway parallel", value: "BPMN_GatewayParallel", icon: symbolIcon3("shape.bpmn.gatewayParallel"), family: "bpmn" },
61016
+ { id: "bpmn-gateway-xor", label: "BPMN gateway XOR", value: "BPMN_GatewayXOR", icon: symbolIcon3("shape.bpmn.gatewayXor"), family: "bpmn" },
61017
+ { id: "bpmn-start-event", label: "BPMN start event", value: "BPMN_StartEvent", icon: symbolIcon3("shape.bpmn.startEvent"), family: "bpmn" },
61018
+ { id: "bpmn-start-event-non-interrupting", label: "BPMN start event non interrupting", value: "BPMN_StartEventNoneInterrupting", icon: symbolIcon3("shape.bpmn.startEventNoneInterrupting"), family: "bpmn" },
61019
+ { id: "bpmn-end-event", label: "BPMN end event", value: "BPMN_EndEvent", icon: symbolIcon3("shape.bpmn.endEvent"), family: "bpmn" },
61020
+ { id: "bpmn-intermediate-event", label: "BPMN intermediate event", value: "BPMN_IntermediateEvent", icon: symbolIcon3("shape.bpmn.intermediateEvent"), family: "bpmn" },
61021
+ { id: "bpmn-intermediate-event-none-interrupting", label: "BPMN intermediate event none interrupting", value: "BPMN_IntermediateEventNoneInterrupting", icon: symbolIcon3("shape.bpmn.intermediateEventNoneInterrupting"), family: "bpmn" },
61022
+ { id: "bpmn-data-object", label: "BPMN data object", value: "BPMN_DataObject", icon: symbolIcon3("shape.bpmn.dataObject"), family: "bpmn" },
61023
+ { id: "bpmn-data-store", label: "BPMN data store", value: "BPMN_DataStore", icon: symbolIcon3("shape.bpmn.dataStore"), family: "bpmn" },
61024
+ { id: "bpmn-participant", label: "BPMN participant", value: "BPMN_Participant", icon: symbolIcon3("shape.bpmn.participant"), family: "bpmn" },
61025
+ { id: "bpmn-transaction", label: "BPMN transaction", value: "BPMN_Transaction", icon: symbolIcon3("shape.bpmn.transaction"), family: "bpmn" },
61026
+ { id: "bpmn-event-subprocess", label: "BPMN event subprocess", value: "BPMN_EventSubprocess", icon: symbolIcon3("shape.bpmn.eventSubprocess"), family: "bpmn" },
61027
+ { id: "bpmn-group", label: "BPMN group", value: "BPMN_Group", icon: symbolIcon3("shape.bpmn.group"), family: "bpmn" },
61028
+ { id: "bpmn-annotation", label: "BPMN annotation", value: "BPMN_Annotation", icon: symbolIcon3("shape.bpmn.annotation"), family: "bpmn" }
60877
61029
  ];
60878
61030
  var BORDER_STYLE_OPTIONS = [
60879
- { id: "solid", label: "Solid", value: "solid", icon: symbolIcon2("stroke.solid") },
60880
- { id: "dot", label: "Dot", value: "dot", icon: symbolIcon2("stroke.dot") },
60881
- { id: "dash", label: "Dash", value: "dash", icon: symbolIcon2("stroke.dash") },
60882
- { id: "long-dash", label: "Long dash", value: "longDash", icon: symbolIcon2("stroke.longDash") }
61031
+ { id: "solid", label: "Solid", value: "solid", icon: symbolIcon3("stroke.solid") },
61032
+ { id: "dot", label: "Dot", value: "dot", icon: symbolIcon3("stroke.dot") },
61033
+ { id: "dash", label: "Dash", value: "dash", icon: symbolIcon3("stroke.dash") },
61034
+ { id: "long-dash", label: "Long dash", value: "longDash", icon: symbolIcon3("stroke.longDash") }
60883
61035
  ];
60884
61036
  var shapeTypeControl = {
60885
61037
  id: "shapeType",
@@ -60888,6 +61040,12 @@ var shapeTypeControl = {
60888
61040
  editor: {
60889
61041
  kind: "enum-icon",
60890
61042
  options: BASIC_INLINE_OPTIONS,
61043
+ layout: "grid",
61044
+ quickOptions: {
61045
+ family: "basicShapes",
61046
+ maxVisible: 18,
61047
+ overflow: "show-more"
61048
+ },
60891
61049
  catalog: {
60892
61050
  kind: "catalog",
60893
61051
  label: "Shape catalog",
@@ -60902,14 +61060,14 @@ var fillControl = {
60902
61060
  id: "backgroundColor",
60903
61061
  label: "Fill",
60904
61062
  valueSource: { kind: "itemProperty", property: "backgroundColor" },
60905
- icon: {
60906
- kind: "symbol",
60907
- key: "shape.fill",
60908
- state: {
60909
- swatch: { kind: "itemProperty", property: "backgroundColor" },
60910
- note: "UI can render the current fill color as a swatch inside the icon."
60911
- }
60912
- },
61063
+ icon: styleFillIcon({
61064
+ swatch: { kind: "itemProperty", property: "backgroundColor" },
61065
+ note: "UI can render the current fill color as a swatch inside the icon."
61066
+ }),
61067
+ icon: styleFillIcon({
61068
+ swatch: { kind: "itemProperty", property: "backgroundColor" },
61069
+ note: "UI can render the current fill color as a swatch inside the icon."
61070
+ }),
60913
61071
  editor: {
60914
61072
  kind: "color",
60915
61073
  palette: COLOR_PALETTE2,
@@ -60960,7 +61118,7 @@ var shapeOverlay = {
60960
61118
  {
60961
61119
  id: "shape.shapeType",
60962
61120
  label: "Shape type",
60963
- icon: symbolIcon2("shape.type"),
61121
+ icon: symbolIcon3("shape.type"),
60964
61122
  target: "each",
60965
61123
  controls: [shapeTypeControl]
60966
61124
  },
@@ -60974,18 +61132,32 @@ var shapeOverlay = {
60974
61132
  {
60975
61133
  id: "shape.strokeStyle",
60976
61134
  label: "Stroke style",
60977
- icon: symbolIcon2("shape.stroke"),
61135
+ icon: styleStrokeIcon(),
60978
61136
  target: "each",
60979
61137
  controls: strokeControls,
60980
61138
  groups: [
60981
61139
  {
60982
61140
  id: "shapeStrokeStyle",
60983
61141
  label: "Stroke style",
60984
- icon: symbolIcon2("shape.stroke"),
61142
+ icon: styleStrokeIcon(),
60985
61143
  controlIds: strokeControls.map((control) => control.id)
60986
61144
  }
60987
61145
  ]
60988
61146
  }
61147
+ ],
61148
+ sections: [
61149
+ {
61150
+ id: "shapeTypeSection",
61151
+ label: "Type",
61152
+ icon: symbolIcon3("shape.type"),
61153
+ actionIds: ["shape.shapeType"]
61154
+ },
61155
+ {
61156
+ id: "shapeAppearanceSection",
61157
+ label: "Appearance",
61158
+ icon: symbolIcon3("shape.stroke"),
61159
+ actionIds: ["shape.fill", "shape.strokeStyle"]
61160
+ }
60989
61161
  ]
60990
61162
  };
60991
61163
  var addShapeToolOverlay = {
@@ -60995,8 +61167,7 @@ var addShapeToolOverlay = {
60995
61167
  createsItemType: "Shape",
60996
61168
  family: "shape",
60997
61169
  icon: {
60998
- kind: "symbol",
60999
- key: "tool.shape",
61170
+ ...overlaySymbolIcon("tool.shape"),
61000
61171
  state: {
61001
61172
  note: "UI may swap the top-level icon to the selected shape option when desired."
61002
61173
  }
@@ -61010,6 +61181,12 @@ var addShapeToolOverlay = {
61010
61181
  editor: {
61011
61182
  kind: "enum-icon",
61012
61183
  options: BASIC_INLINE_OPTIONS,
61184
+ layout: "grid",
61185
+ quickOptions: {
61186
+ family: "basicShapes",
61187
+ maxVisible: 18,
61188
+ overflow: "show-more"
61189
+ },
61013
61190
  catalog: {
61014
61191
  kind: "catalog",
61015
61192
  label: "Shape catalog",
@@ -61020,6 +61197,10 @@ var addShapeToolOverlay = {
61020
61197
  invoke: { kind: "toolProperty", property: "type" }
61021
61198
  }
61022
61199
  ]
61200
+ },
61201
+ launch: { kind: "activate-tool" },
61202
+ surface: {
61203
+ order: 7
61023
61204
  }
61024
61205
  };
61025
61206
 
@@ -65426,14 +65607,14 @@ var cardOverlay = {
65426
65607
  {
65427
65608
  id: "card.flip",
65428
65609
  label: "Flip card",
65429
- icon: { kind: "symbol", key: "card.flip" },
65610
+ icon: overlaySymbolIcon("card.flip"),
65430
65611
  target: "each",
65431
65612
  invoke: { kind: "customMethod", methodName: "toggleIsOpen" }
65432
65613
  },
65433
65614
  {
65434
65615
  id: "card.rotateCcw",
65435
65616
  label: "Rotate 90 counter clockwise",
65436
- icon: { kind: "symbol", key: "card.rotateCcw" },
65617
+ icon: overlaySymbolIcon("card.rotateCcw"),
65437
65618
  target: "each",
65438
65619
  invoke: {
65439
65620
  kind: "customMethod",
@@ -65444,7 +65625,7 @@ var cardOverlay = {
65444
65625
  {
65445
65626
  id: "card.rotateCw",
65446
65627
  label: "Rotate 90 clockwise",
65447
- icon: { kind: "symbol", key: "card.rotateCw" },
65628
+ icon: overlaySymbolIcon("card.rotateCw"),
65448
65629
  target: "each",
65449
65630
  invoke: {
65450
65631
  kind: "customMethod",
@@ -65698,28 +65879,28 @@ var deckOverlay = {
65698
65879
  {
65699
65880
  id: "deck.getTopCard",
65700
65881
  label: "Draw top card",
65701
- icon: { kind: "symbol", key: "deck.drawTop" },
65882
+ icon: overlaySymbolIcon("deck.drawTop"),
65702
65883
  target: "single",
65703
65884
  invoke: { kind: "customMethod", methodName: "getTopCard" }
65704
65885
  },
65705
65886
  {
65706
65887
  id: "deck.getBottomCard",
65707
65888
  label: "Draw bottom card",
65708
- icon: { kind: "symbol", key: "deck.drawBottom" },
65889
+ icon: overlaySymbolIcon("deck.drawBottom"),
65709
65890
  target: "single",
65710
65891
  invoke: { kind: "customMethod", methodName: "getBottomCard" }
65711
65892
  },
65712
65893
  {
65713
65894
  id: "deck.getRandomCard",
65714
65895
  label: "Draw random card",
65715
- icon: { kind: "symbol", key: "deck.drawRandom" },
65896
+ icon: overlaySymbolIcon("deck.drawRandom"),
65716
65897
  target: "single",
65717
65898
  invoke: { kind: "customMethod", methodName: "getRandomCard" }
65718
65899
  },
65719
65900
  {
65720
65901
  id: "deck.getCards",
65721
65902
  label: "Draw cards",
65722
- icon: { kind: "symbol", key: "deck.drawMany" },
65903
+ icon: overlaySymbolIcon("deck.drawMany"),
65723
65904
  target: "single",
65724
65905
  controls: [
65725
65906
  {
@@ -65741,14 +65922,14 @@ var deckOverlay = {
65741
65922
  {
65742
65923
  id: "deck.shuffle",
65743
65924
  label: "Shuffle",
65744
- icon: { kind: "symbol", key: "deck.shuffle" },
65925
+ icon: overlaySymbolIcon("deck.shuffle"),
65745
65926
  target: "single",
65746
65927
  invoke: { kind: "customMethod", methodName: "shuffleDeck" }
65747
65928
  },
65748
65929
  {
65749
65930
  id: "deck.flip",
65750
65931
  label: "Flip deck",
65751
- icon: { kind: "symbol", key: "deck.flip" },
65932
+ icon: overlaySymbolIcon("deck.flip"),
65752
65933
  target: "single",
65753
65934
  invoke: { kind: "customMethod", methodName: "flipDeck" }
65754
65935
  }
@@ -65757,7 +65938,7 @@ var deckOverlay = {
65757
65938
  var createDeckSelectionAction = {
65758
65939
  id: "deck.createFromSelection",
65759
65940
  label: "Create deck",
65760
- icon: { kind: "symbol", key: "deck.createFromSelection" },
65941
+ icon: overlaySymbolIcon("deck.createFromSelection"),
65761
65942
  description: "Stacks selected cards into a new deck, or merges selected cards and decks into one deck.",
65762
65943
  invoke: { kind: "selectionMethod", methodName: "createDeck" },
65763
65944
  isAvailable: (items) => {
@@ -66326,14 +66507,14 @@ var diceOverlay = {
66326
66507
  {
66327
66508
  id: "dice.throw",
66328
66509
  label: "Throw dice",
66329
- icon: { kind: "symbol", key: "dice.throw" },
66510
+ icon: overlaySymbolIcon("dice.throw"),
66330
66511
  target: "each",
66331
66512
  invoke: { kind: "customMethod", methodName: "throwDice" }
66332
66513
  },
66333
66514
  {
66334
66515
  id: "dice.range",
66335
66516
  label: "Range",
66336
- icon: { kind: "symbol", key: "dice.range" },
66517
+ icon: overlaySymbolIcon("dice.range"),
66337
66518
  target: "each",
66338
66519
  controls: [
66339
66520
  {
@@ -66355,11 +66536,9 @@ var diceOverlay = {
66355
66536
  {
66356
66537
  id: "dice.fill",
66357
66538
  label: "Fill",
66358
- icon: {
66359
- kind: "symbol",
66360
- key: "shape.fill",
66361
- state: { swatch: { kind: "itemProperty", property: "backgroundColor" } }
66362
- },
66539
+ icon: styleFillIcon({
66540
+ swatch: { kind: "itemProperty", property: "backgroundColor" }
66541
+ }),
66363
66542
  target: "each",
66364
66543
  controls: [
66365
66544
  {
@@ -66371,6 +66550,14 @@ var diceOverlay = {
66371
66550
  }
66372
66551
  ]
66373
66552
  }
66553
+ ],
66554
+ sections: [
66555
+ {
66556
+ id: "diceActions",
66557
+ label: "Dice",
66558
+ icon: overlaySymbolIcon("dice.throw"),
66559
+ actionIds: ["dice.throw", "dice.range", "dice.fill"]
66560
+ }
66374
66561
  ]
66375
66562
  };
66376
66563
  var addDiceToolOverlay = {
@@ -66379,7 +66566,19 @@ var addDiceToolOverlay = {
66379
66566
  kind: "create",
66380
66567
  createsItemType: "Dice",
66381
66568
  family: "game",
66382
- icon: { kind: "symbol", key: "tool.dice" }
66569
+ icon: overlaySymbolIcon("tool.dice"),
66570
+ launch: { kind: "activate-tool" },
66571
+ surface: {
66572
+ order: 1,
66573
+ group: {
66574
+ id: "gameItems",
66575
+ label: "Game items",
66576
+ icon: overlaySymbolIcon("tool.dice"),
66577
+ order: 1,
66578
+ behavior: "open-panel"
66579
+ },
66580
+ relatedToolNames: ["AddScreen", "AddPouch"]
66581
+ }
66383
66582
  };
66384
66583
 
66385
66584
  // src/Items/Dice/Dice.ts
@@ -66727,8 +66926,7 @@ var screenOverlay = {
66727
66926
  id: "screen.background",
66728
66927
  label: "Background",
66729
66928
  icon: {
66730
- kind: "symbol",
66731
- key: "screen.background",
66929
+ ...overlaySymbolIcon("screen.background"),
66732
66930
  state: { swatch: { kind: "itemProperty", property: "backgroundColor" } }
66733
66931
  },
66734
66932
  target: "each",
@@ -66745,6 +66943,97 @@ var screenOverlay = {
66745
66943
  invoke: { kind: "setProperty", property: "backgroundColor" }
66746
66944
  }
66747
66945
  ]
66946
+ },
66947
+ {
66948
+ id: "screen.stroke",
66949
+ label: "Stroke",
66950
+ icon: {
66951
+ ...overlaySymbolIcon("shape.stroke"),
66952
+ state: { swatch: { kind: "itemProperty", property: "borderColor" } }
66953
+ },
66954
+ target: "each",
66955
+ controls: [
66956
+ {
66957
+ id: "borderColor",
66958
+ label: "Border color",
66959
+ valueSource: { kind: "itemProperty", property: "borderColor" },
66960
+ editor: {
66961
+ kind: "color",
66962
+ palette: ["#000000", "#FFFFFF", "#888888", "transparent"],
66963
+ allowTransparent: true,
66964
+ presentation: "square"
66965
+ },
66966
+ invoke: { kind: "setProperty", property: "borderColor" }
66967
+ },
66968
+ {
66969
+ id: "borderWidth",
66970
+ label: "Border width",
66971
+ valueSource: { kind: "itemProperty", property: "borderWidth" },
66972
+ editor: {
66973
+ kind: "number-stepper",
66974
+ min: 0,
66975
+ max: 8,
66976
+ step: 1,
66977
+ presets: [0, 1, 2, 4],
66978
+ unit: "px"
66979
+ },
66980
+ invoke: { kind: "setProperty", property: "borderWidth" }
66981
+ }
66982
+ ],
66983
+ groups: [
66984
+ {
66985
+ id: "screenStrokeStyle",
66986
+ label: "Stroke",
66987
+ icon: overlaySymbolIcon("shape.stroke"),
66988
+ controlIds: ["borderColor", "borderWidth"]
66989
+ }
66990
+ ]
66991
+ },
66992
+ {
66993
+ id: "screen.backgroundImage",
66994
+ label: "Background image",
66995
+ icon: overlaySymbolIcon("screen.backgroundImage"),
66996
+ target: "each",
66997
+ when: {
66998
+ kind: "falsy",
66999
+ source: { kind: "itemProperty", property: "backgroundUrl" }
67000
+ },
67001
+ controls: [
67002
+ {
67003
+ id: "backgroundUrl",
67004
+ label: "Background image",
67005
+ valueSource: { kind: "itemProperty", property: "backgroundUrl" },
67006
+ editor: {
67007
+ kind: "asset-upload",
67008
+ mode: "single",
67009
+ accept: ["image/*"]
67010
+ },
67011
+ invoke: { kind: "setProperty", property: "backgroundUrl" }
67012
+ }
67013
+ ]
67014
+ },
67015
+ {
67016
+ id: "screen.removeBackgroundImage",
67017
+ label: "Remove background image",
67018
+ icon: overlaySymbolIcon("screen.backgroundImage.remove"),
67019
+ target: "each",
67020
+ when: {
67021
+ kind: "truthy",
67022
+ source: { kind: "itemProperty", property: "backgroundUrl" }
67023
+ },
67024
+ invoke: {
67025
+ kind: "customMethod",
67026
+ methodName: "setBackgroundUrl",
67027
+ args: [{ kind: "static", value: "" }]
67028
+ }
67029
+ }
67030
+ ],
67031
+ sections: [
67032
+ {
67033
+ id: "screenAppearance",
67034
+ label: "Appearance",
67035
+ icon: overlaySymbolIcon("screen.background"),
67036
+ actionIds: ["screen.background", "screen.stroke", "screen.backgroundImage", "screen.removeBackgroundImage"]
66748
67037
  }
66749
67038
  ]
66750
67039
  };
@@ -66754,7 +67043,19 @@ var addScreenToolOverlay = {
66754
67043
  kind: "create",
66755
67044
  createsItemType: "Screen",
66756
67045
  family: "container",
66757
- icon: { kind: "symbol", key: "tool.screen" }
67046
+ icon: overlaySymbolIcon("tool.screen"),
67047
+ launch: { kind: "activate-tool" },
67048
+ surface: {
67049
+ order: 2,
67050
+ group: {
67051
+ id: "gameItems",
67052
+ label: "Game items",
67053
+ icon: overlaySymbolIcon("tool.dice"),
67054
+ order: 1,
67055
+ behavior: "open-panel"
67056
+ },
67057
+ relatedToolNames: ["AddDice", "AddPouch"]
67058
+ }
66758
67059
  };
66759
67060
  var addPouchToolOverlay = {
66760
67061
  toolName: "AddPouch",
@@ -66762,7 +67063,19 @@ var addPouchToolOverlay = {
66762
67063
  kind: "create",
66763
67064
  createsItemType: "Screen",
66764
67065
  family: "container",
66765
- icon: { kind: "symbol", key: "tool.pouch" }
67066
+ icon: overlaySymbolIcon("tool.pouch"),
67067
+ launch: { kind: "activate-tool" },
67068
+ surface: {
67069
+ order: 3,
67070
+ group: {
67071
+ id: "gameItems",
67072
+ label: "Game items",
67073
+ icon: overlaySymbolIcon("tool.dice"),
67074
+ order: 1,
67075
+ behavior: "open-panel"
67076
+ },
67077
+ relatedToolNames: ["AddDice", "AddScreen"]
67078
+ }
66766
67079
  };
66767
67080
 
66768
67081
  // src/Items/Screen/Screen.ts
@@ -74722,8 +75035,7 @@ var addDrawingToolOverlay = {
74722
75035
  family: "drawing",
74723
75036
  createsItemType: "Drawing",
74724
75037
  icon: {
74725
- kind: "symbol",
74726
- key: "tool.pen",
75038
+ ...overlaySymbolIcon("tool.pen"),
74727
75039
  state: {
74728
75040
  swatch: { kind: "toolProperty", property: "strokeColor" },
74729
75041
  note: "UI can show the pending pen color in the icon."
@@ -74735,10 +75047,22 @@ var addDrawingToolOverlay = {
74735
75047
  {
74736
75048
  id: "drawingDefaults",
74737
75049
  label: "Pen defaults",
74738
- icon: { kind: "symbol", key: "tool.pen" },
75050
+ icon: overlaySymbolIcon("tool.pen"),
74739
75051
  controlIds: strokeControls2.map((control) => control.id)
74740
75052
  }
74741
75053
  ]
75054
+ },
75055
+ launch: { kind: "activate-tool" },
75056
+ surface: {
75057
+ order: 1,
75058
+ group: {
75059
+ id: "drawingTools",
75060
+ label: "Drawing",
75061
+ icon: overlaySymbolIcon("tool.pen"),
75062
+ order: 5,
75063
+ behavior: "activate-last-used"
75064
+ },
75065
+ relatedToolNames: ["AddHighlighter", "Eraser"]
74742
75066
  }
74743
75067
  };
74744
75068
  var addHighlighterToolOverlay = {
@@ -74748,8 +75072,7 @@ var addHighlighterToolOverlay = {
74748
75072
  family: "drawing",
74749
75073
  createsItemType: "Drawing",
74750
75074
  icon: {
74751
- kind: "symbol",
74752
- key: "tool.highlighter",
75075
+ ...overlaySymbolIcon("tool.highlighter"),
74753
75076
  state: {
74754
75077
  swatch: { kind: "toolProperty", property: "strokeColor" },
74755
75078
  note: "UI can show the pending highlighter color in the icon."
@@ -74761,10 +75084,22 @@ var addHighlighterToolOverlay = {
74761
75084
  {
74762
75085
  id: "highlighterDefaults",
74763
75086
  label: "Highlighter defaults",
74764
- icon: { kind: "symbol", key: "tool.highlighter" },
75087
+ icon: overlaySymbolIcon("tool.highlighter"),
74765
75088
  controlIds: strokeControls2.map((control) => control.id)
74766
75089
  }
74767
75090
  ]
75091
+ },
75092
+ launch: { kind: "activate-tool" },
75093
+ surface: {
75094
+ order: 2,
75095
+ group: {
75096
+ id: "drawingTools",
75097
+ label: "Drawing",
75098
+ icon: overlaySymbolIcon("tool.pen"),
75099
+ order: 5,
75100
+ behavior: "activate-last-used"
75101
+ },
75102
+ relatedToolNames: ["AddDrawing", "Eraser"]
74768
75103
  }
74769
75104
  };
74770
75105
  var eraserToolOverlay = {
@@ -74772,7 +75107,7 @@ var eraserToolOverlay = {
74772
75107
  label: "Eraser",
74773
75108
  kind: "mode",
74774
75109
  family: "drawing",
74775
- icon: { kind: "symbol", key: "tool.eraser" },
75110
+ icon: overlaySymbolIcon("tool.eraser"),
74776
75111
  defaults: {
74777
75112
  controls: [
74778
75113
  {
@@ -74789,6 +75124,18 @@ var eraserToolOverlay = {
74789
75124
  invoke: { kind: "toolProperty", property: "strokeWidth" }
74790
75125
  }
74791
75126
  ]
75127
+ },
75128
+ launch: { kind: "activate-tool" },
75129
+ surface: {
75130
+ order: 3,
75131
+ group: {
75132
+ id: "drawingTools",
75133
+ label: "Drawing",
75134
+ icon: overlaySymbolIcon("tool.pen"),
75135
+ order: 5,
75136
+ behavior: "activate-last-used"
75137
+ },
75138
+ relatedToolNames: ["AddDrawing", "AddHighlighter"]
74792
75139
  }
74793
75140
  };
74794
75141
 
@@ -74989,7 +75336,7 @@ var frameTypeOptions = Object.keys(Frames).map((frameType) => ({
74989
75336
  id: frameType,
74990
75337
  label: frameType === "Custom" ? "Custom" : Frames[frameType].name,
74991
75338
  value: frameType,
74992
- icon: { kind: "symbol", key: `frame.${frameType}` }
75339
+ icon: overlaySymbolIcon(`frame.${frameType}`)
74993
75340
  }));
74994
75341
  var addFrameToolOverlay = {
74995
75342
  toolName: "AddFrame",
@@ -74997,7 +75344,7 @@ var addFrameToolOverlay = {
74997
75344
  kind: "create",
74998
75345
  createsItemType: "Frame",
74999
75346
  family: "frame",
75000
- icon: { kind: "symbol", key: "tool.frame" },
75347
+ icon: overlaySymbolIcon("tool.frame"),
75001
75348
  defaults: {
75002
75349
  controls: [
75003
75350
  {
@@ -75011,6 +75358,10 @@ var addFrameToolOverlay = {
75011
75358
  invoke: { kind: "toolProperty", property: "shape" }
75012
75359
  }
75013
75360
  ]
75361
+ },
75362
+ launch: { kind: "activate-tool" },
75363
+ surface: {
75364
+ order: 10
75014
75365
  }
75015
75366
  };
75016
75367
 
@@ -75375,8 +75726,7 @@ var addStickerToolOverlay = {
75375
75726
  createsItemType: "Sticker",
75376
75727
  family: "sticker",
75377
75728
  icon: {
75378
- kind: "symbol",
75379
- key: "tool.sticker",
75729
+ ...overlaySymbolIcon("tool.sticker"),
75380
75730
  state: {
75381
75731
  swatch: { kind: "toolProperty", property: "backgroundColor" }
75382
75732
  }
@@ -75387,10 +75737,14 @@ var addStickerToolOverlay = {
75387
75737
  id: "stickerBackgroundColor",
75388
75738
  label: "Color",
75389
75739
  valueSource: { kind: "toolProperty", property: "backgroundColor" },
75390
- editor: { kind: "color", palette: STICKER_COLORS },
75740
+ editor: { kind: "color", palette: STICKER_COLORS, presentation: "sticker" },
75391
75741
  invoke: { kind: "toolProperty", property: "backgroundColor" }
75392
75742
  }
75393
75743
  ]
75744
+ },
75745
+ launch: { kind: "activate-tool" },
75746
+ surface: {
75747
+ order: 9
75394
75748
  }
75395
75749
  };
75396
75750
 
@@ -77863,6 +78217,11 @@ export {
77863
78217
  toFiniteNumber,
77864
78218
  tempStorage,
77865
78219
  tagByType,
78220
+ symbolIcon,
78221
+ styleStrokeIcon,
78222
+ styleFontSizeIcon,
78223
+ styleFillIcon,
78224
+ styleColorIcon,
77866
78225
  stickerColors,
77867
78226
  srgbChannelToLinear,
77868
78227
  sha256,
@@ -77892,12 +78251,16 @@ export {
77892
78251
  positionAbsolutely,
77893
78252
  parsersHTML,
77894
78253
  parseCssRgb,
78254
+ overlaySymbolIcon,
78255
+ overlayAssetIcon,
77895
78256
  omitDefaultProperties,
77896
78257
  messageRouter,
77897
78258
  meetsWCAG_AAA,
77898
78259
  meetsWCAG_AA,
78260
+ matchesOverlayCondition,
77899
78261
  listToolOverlays,
77900
78262
  listSelectionActions,
78263
+ listCreateSurfaceEntries,
77901
78264
  itemOverlays,
77902
78265
  itemFactories2 as itemFactories,
77903
78266
  itemOverlays as itemActions,
@@ -77989,6 +78352,8 @@ export {
77989
78352
  PRESENCE_CURSOR_THROTTLE,
77990
78353
  PRESENCE_CLEANUP_USER_TIMER,
77991
78354
  PRESENCE_CLEANUP_IDLE_TIMER,
78355
+ OVERLAY_SYMBOL_KEYS,
78356
+ OVERLAY_ICON_SPRITE_PATH,
77992
78357
  MiroItemConverter,
77993
78358
  Mbr,
77994
78359
  Matrix,