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/index.js CHANGED
@@ -11491,6 +11491,45 @@ function toLocalTransformOp(op, containerMatrix, itemId) {
11491
11491
  return op;
11492
11492
  }
11493
11493
  }
11494
+ // src/Overlay/IconPack.ts
11495
+ var OVERLAY_ICON_SPRITE_PATH = "src/Overlay/overlay-icons.svg";
11496
+ function overlaySymbolIcon(key) {
11497
+ return {
11498
+ kind: "symbol",
11499
+ key,
11500
+ sourcePath: OVERLAY_ICON_SPRITE_PATH
11501
+ };
11502
+ }
11503
+ function overlayAssetIcon(path2) {
11504
+ return {
11505
+ kind: "asset",
11506
+ path: path2,
11507
+ mimeType: "image/svg+xml"
11508
+ };
11509
+ }
11510
+
11511
+ // src/Overlay/OverlayIcons.ts
11512
+ var OVERLAY_SYMBOL_KEYS = {
11513
+ styleFill: "style.fill",
11514
+ styleStroke: "style.stroke",
11515
+ styleColor: "style.color",
11516
+ styleFontSize: "style.fontSize"
11517
+ };
11518
+ function symbolIcon(key, state) {
11519
+ return state ? { kind: "symbol", key, sourcePath: OVERLAY_ICON_SPRITE_PATH, state } : { kind: "symbol", key, sourcePath: OVERLAY_ICON_SPRITE_PATH };
11520
+ }
11521
+ function styleFillIcon(state) {
11522
+ return symbolIcon(OVERLAY_SYMBOL_KEYS.styleFill, state);
11523
+ }
11524
+ function styleStrokeIcon(state) {
11525
+ return symbolIcon(OVERLAY_SYMBOL_KEYS.styleStroke, state);
11526
+ }
11527
+ function styleColorIcon(state) {
11528
+ return symbolIcon(OVERLAY_SYMBOL_KEYS.styleColor, state);
11529
+ }
11530
+ function styleFontSizeIcon(state) {
11531
+ return symbolIcon(OVERLAY_SYMBOL_KEYS.styleFontSize, state);
11532
+ }
11494
11533
  // src/Overlay/overlayRegistry.ts
11495
11534
  var itemOverlays = {};
11496
11535
  var toolOverlays = {};
@@ -11518,6 +11557,45 @@ function getToolOverlay(toolName) {
11518
11557
  function listToolOverlays() {
11519
11558
  return Object.values(toolOverlays);
11520
11559
  }
11560
+ function listCreateSurfaceEntries() {
11561
+ const groupedEntries = new Map;
11562
+ const ungroupedEntries = [];
11563
+ for (const tool of Object.values(toolOverlays)) {
11564
+ const group = tool.surface?.group;
11565
+ if (!group) {
11566
+ ungroupedEntries.push({
11567
+ kind: "tool",
11568
+ tool,
11569
+ order: tool.surface?.order
11570
+ });
11571
+ continue;
11572
+ }
11573
+ const existing = groupedEntries.get(group.id);
11574
+ if (existing) {
11575
+ existing.tools.push(tool);
11576
+ if (existing.order === undefined && group.order !== undefined) {
11577
+ existing.order = group.order;
11578
+ }
11579
+ continue;
11580
+ }
11581
+ groupedEntries.set(group.id, {
11582
+ kind: "group",
11583
+ id: group.id,
11584
+ label: group.label,
11585
+ description: group.description,
11586
+ icon: group.icon,
11587
+ order: group.order,
11588
+ behavior: group.behavior,
11589
+ tools: [tool]
11590
+ });
11591
+ }
11592
+ const sortedGroups = [...groupedEntries.values()].map((group) => ({
11593
+ ...group,
11594
+ tools: [...group.tools].sort(compareToolsBySurfaceOrder)
11595
+ })).sort(compareEntriesByOrder);
11596
+ const sortedUngroupedEntries = [...ungroupedEntries].sort(compareEntriesByOrder);
11597
+ return [...sortedGroups, ...sortedUngroupedEntries];
11598
+ }
11521
11599
  function listSelectionActions() {
11522
11600
  return Object.values(selectionActions);
11523
11601
  }
@@ -11527,6 +11605,33 @@ function getSelectionOverlayActions(items) {
11527
11605
  function resolveDynamicOptions(providerId, context) {
11528
11606
  return dynamicOptionsResolvers[providerId]?.(context) ?? [];
11529
11607
  }
11608
+ function matchesOverlayCondition(condition, context) {
11609
+ if (!condition) {
11610
+ return true;
11611
+ }
11612
+ switch (condition.kind) {
11613
+ case "equals":
11614
+ return readOverlayValueSource(context, condition.source) === condition.value;
11615
+ case "truthy":
11616
+ return !!readOverlayValueSource(context, condition.source);
11617
+ case "falsy":
11618
+ return !readOverlayValueSource(context, condition.source);
11619
+ case "itemTypeIn":
11620
+ return context.items?.every((item) => condition.itemTypes.includes(item.itemType)) ?? (context.item ? condition.itemTypes.includes(context.item.itemType) : false);
11621
+ case "selectionSize": {
11622
+ const size = context.items?.length ?? (context.item ? 1 : 0);
11623
+ const meetsMin = condition.min === undefined || size >= condition.min;
11624
+ const meetsMax = condition.max === undefined || size <= condition.max;
11625
+ return meetsMin && meetsMax;
11626
+ }
11627
+ case "allOf":
11628
+ return condition.conditions.every((child) => matchesOverlayCondition(child, context));
11629
+ case "anyOf":
11630
+ return condition.conditions.some((child) => matchesOverlayCondition(child, context));
11631
+ case "not":
11632
+ return !matchesOverlayCondition(condition.condition, context);
11633
+ }
11634
+ }
11530
11635
  function intersectOverlayActions(items) {
11531
11636
  if (items.length === 0) {
11532
11637
  return [];
@@ -11545,6 +11650,24 @@ function intersectOverlayActions(items) {
11545
11650
  }
11546
11651
  return [...counts.values()].filter((action) => overlays.every((overlay) => overlay.actions.some((candidate) => candidate.id === action.id)) && (action.target !== "single" || items.length === 1));
11547
11652
  }
11653
+ function compareToolsBySurfaceOrder(a, b) {
11654
+ const aOrder = a.surface?.order ?? Number.MAX_SAFE_INTEGER;
11655
+ const bOrder = b.surface?.order ?? Number.MAX_SAFE_INTEGER;
11656
+ return aOrder - bOrder || a.label.localeCompare(b.label);
11657
+ }
11658
+ function compareEntriesByOrder(a, b) {
11659
+ const aOrder = a.order ?? Number.MAX_SAFE_INTEGER;
11660
+ const bOrder = b.order ?? Number.MAX_SAFE_INTEGER;
11661
+ const aLabel = a.label ?? a.tool?.label ?? "";
11662
+ const bLabel = b.label ?? b.tool?.label ?? "";
11663
+ return aOrder - bOrder || aLabel.localeCompare(bLabel);
11664
+ }
11665
+ function readOverlayValueSource(context, source) {
11666
+ if (source.kind === "itemProperty") {
11667
+ return context.item ? context.item[source.property] : undefined;
11668
+ }
11669
+ return context.tool ? context.tool[source.property] : undefined;
11670
+ }
11548
11671
  // src/Items/BaseItem/BaseItem.ts
11549
11672
  class BaseItem {
11550
11673
  static createCommand;
@@ -37528,7 +37651,8 @@ var richTextOverlay = {
37528
37651
  {
37529
37652
  id: "text.fontSize",
37530
37653
  label: "Font size",
37531
- icon: { kind: "symbol", key: "text.fontSize" },
37654
+ icon: styleFontSizeIcon(),
37655
+ icon: styleFontSizeIcon(),
37532
37656
  target: "each",
37533
37657
  controls: [
37534
37658
  {
@@ -37546,6 +37670,14 @@ var richTextOverlay = {
37546
37670
  }
37547
37671
  ]
37548
37672
  }
37673
+ ],
37674
+ sections: [
37675
+ {
37676
+ id: "textTypography",
37677
+ label: "Typography",
37678
+ icon: overlaySymbolIcon("text.fontSize"),
37679
+ actionIds: ["text.fontSize"]
37680
+ }
37549
37681
  ]
37550
37682
  };
37551
37683
  var addTextToolOverlay = {
@@ -37554,8 +37686,12 @@ var addTextToolOverlay = {
37554
37686
  kind: "create",
37555
37687
  createsItemType: "RichText",
37556
37688
  family: "text",
37557
- icon: { kind: "symbol", key: "tool.text" },
37558
- description: "Creates editable rich text. The current first pass has no pre-placement defaults on this tool."
37689
+ icon: overlaySymbolIcon("tool.text"),
37690
+ description: "Creates editable rich text. The current first pass has no pre-placement defaults on this tool.",
37691
+ launch: { kind: "activate-tool" },
37692
+ surface: {
37693
+ order: 6
37694
+ }
37559
37695
  };
37560
37696
 
37561
37697
  // src/Items/RichText/RichText.ts
@@ -44025,12 +44161,12 @@ var COLOR_PALETTE = [
44025
44161
  "#118AB2",
44026
44162
  "#7B61FF"
44027
44163
  ];
44028
- var symbolIcon = (key) => ({ kind: "symbol", key });
44164
+ var symbolIcon2 = (key) => overlaySymbolIcon(key);
44029
44165
  var lineStyleOptions = ConnectorLineStyles.map((style) => ({
44030
44166
  id: style,
44031
44167
  label: style[0].toUpperCase() + style.slice(1),
44032
44168
  value: style,
44033
- icon: symbolIcon(`connector.lineStyle.${style}`)
44169
+ icon: symbolIcon2(`connector.lineStyle.${style}`)
44034
44170
  }));
44035
44171
  var lineWidthOptions = ConnectionLineWidths.map((width) => ({
44036
44172
  id: `${width}`,
@@ -44041,13 +44177,13 @@ var pointerOptions = CONNECTOR_POINTER_TYPES.map((pointer) => ({
44041
44177
  id: pointer,
44042
44178
  label: pointer,
44043
44179
  value: pointer,
44044
- icon: symbolIcon(`connector.pointer.${pointer}`)
44180
+ icon: symbolIcon2(`connector.pointer.${pointer}`)
44045
44181
  }));
44046
44182
  var borderStyleOptions = ["solid", "dot", "dash", "longDash"].map((style) => ({
44047
44183
  id: style,
44048
44184
  label: style,
44049
44185
  value: style,
44050
- icon: symbolIcon(`stroke.${style}`)
44186
+ icon: symbolIcon2(`stroke.${style}`)
44051
44187
  }));
44052
44188
  var connectorStyleControls = [
44053
44189
  {
@@ -44102,7 +44238,7 @@ var connectorStyleControls = [
44102
44238
  {
44103
44239
  id: "smartJump",
44104
44240
  label: "Smart jump",
44105
- icon: symbolIcon("connector.smartJump"),
44241
+ icon: symbolIcon2("connector.smartJump"),
44106
44242
  valueSource: { kind: "itemProperty", property: "smartJump" },
44107
44243
  editor: { kind: "toggle", trueLabel: "On", falseLabel: "Off" },
44108
44244
  invoke: { kind: "setProperty", property: "smartJump" }
@@ -44161,7 +44297,7 @@ var connectorToolControls = [
44161
44297
  {
44162
44298
  id: "toolSmartJump",
44163
44299
  label: "Smart jump",
44164
- icon: symbolIcon("connector.smartJump"),
44300
+ icon: symbolIcon2("connector.smartJump"),
44165
44301
  valueSource: { kind: "toolProperty", property: "smartJump" },
44166
44302
  editor: { kind: "toggle", trueLabel: "On", falseLabel: "Off" },
44167
44303
  invoke: { kind: "toolProperty", property: "smartJump" }
@@ -44173,25 +44309,33 @@ var connectorOverlay = {
44173
44309
  {
44174
44310
  id: "connector.switchPointers",
44175
44311
  label: "Switch arrows",
44176
- icon: symbolIcon("connector.switchPointers"),
44312
+ icon: symbolIcon2("connector.switchPointers"),
44177
44313
  target: "selection",
44178
44314
  invoke: { kind: "operation", class: "Connector", method: "switchPointers" }
44179
44315
  },
44180
44316
  {
44181
44317
  id: "connector.style",
44182
44318
  label: "Connector style",
44183
- icon: symbolIcon("connector.style"),
44319
+ icon: symbolIcon2("connector.style"),
44184
44320
  target: "each",
44185
44321
  controls: connectorStyleControls,
44186
44322
  groups: [
44187
44323
  {
44188
44324
  id: "connectorStyle",
44189
44325
  label: "Connector style",
44190
- icon: symbolIcon("connector.style"),
44326
+ icon: symbolIcon2("connector.style"),
44191
44327
  controlIds: connectorStyleControls.map((control) => control.id)
44192
44328
  }
44193
44329
  ]
44194
44330
  }
44331
+ ],
44332
+ sections: [
44333
+ {
44334
+ id: "connectorArrows",
44335
+ label: "Arrows",
44336
+ icon: symbolIcon2("connector.style"),
44337
+ actionIds: ["connector.switchPointers", "connector.style"]
44338
+ }
44195
44339
  ]
44196
44340
  };
44197
44341
  var addConnectorToolOverlay = {
@@ -44212,12 +44356,24 @@ var addConnectorToolOverlay = {
44212
44356
  controls: connectorToolControls,
44213
44357
  groups: [
44214
44358
  {
44215
- id: "connectorToolStyle",
44359
+ id: "connectorToolQuickDefaults",
44360
+ label: "Connector quick defaults",
44361
+ icon: symbolIcon2("connector.lineStyle.straight"),
44362
+ controlIds: ["toolLineStyle"],
44363
+ description: "Primary defaults that match the compact create-surface picker."
44364
+ },
44365
+ {
44366
+ id: "connectorToolAdvancedDefaults",
44216
44367
  label: "Connector defaults",
44217
- icon: symbolIcon("connector.style"),
44218
- controlIds: connectorToolControls.map((control) => control.id)
44368
+ icon: symbolIcon2("connector.style"),
44369
+ controlIds: connectorToolControls.map((control) => control.id),
44370
+ description: "Extended defaults available in richer create flows."
44219
44371
  }
44220
44372
  ]
44373
+ },
44374
+ launch: { kind: "activate-tool" },
44375
+ surface: {
44376
+ order: 8
44221
44377
  }
44222
44378
  };
44223
44379
 
@@ -58355,63 +58511,59 @@ var COLOR_PALETTE2 = [
58355
58511
  "#7B61FF",
58356
58512
  "transparent"
58357
58513
  ];
58358
- var inlineShapeAsset = (folder, file2 = folder) => ({
58359
- kind: "asset",
58360
- path: `src/Items/Shape/Basic/${folder}/${file2}.icon.svg`,
58361
- mimeType: "image/svg+xml"
58362
- });
58363
- var symbolIcon2 = (key) => ({ kind: "symbol", key });
58514
+ var inlineShapeAsset = (folder, file2 = folder) => overlayAssetIcon(`src/Items/Shape/Basic/${folder}/${file2}.icon.svg`);
58515
+ var symbolIcon3 = (key) => overlaySymbolIcon(key);
58364
58516
  var BASIC_INLINE_OPTIONS = [
58365
- { id: "rectangle", label: "Rectangle", value: "Rectangle", icon: inlineShapeAsset("Rectangle") },
58366
- { id: "rounded-rectangle", label: "Rounded rectangle", value: "RoundedRectangle", icon: inlineShapeAsset("RoundedRectangle") },
58367
- { id: "circle", label: "Circle", value: "Circle", icon: inlineShapeAsset("Circle") },
58368
- { id: "triangle", label: "Triangle", value: "Triangle", icon: inlineShapeAsset("Triangle") },
58369
- { id: "rhombus", label: "Rhombus", value: "Rhombus", icon: inlineShapeAsset("Rhombus") }
58517
+ { id: "rectangle", label: "Rectangle", value: "Rectangle", icon: inlineShapeAsset("Rectangle"), family: "basicShapes" },
58518
+ { id: "rounded-rectangle", label: "Rounded rectangle", value: "RoundedRectangle", icon: inlineShapeAsset("RoundedRectangle"), family: "basicShapes" },
58519
+ { id: "circle", label: "Circle", value: "Circle", icon: inlineShapeAsset("Circle"), family: "basicShapes" },
58520
+ { id: "triangle", label: "Triangle", value: "Triangle", icon: inlineShapeAsset("Triangle"), family: "basicShapes" },
58521
+ { id: "rhombus", label: "Rhombus", value: "Rhombus", icon: inlineShapeAsset("Rhombus"), family: "basicShapes" }
58370
58522
  ];
58371
58523
  var SHAPE_CATALOG_OPTIONS = [
58372
58524
  ...BASIC_INLINE_OPTIONS,
58373
- { id: "reversed-triangle", label: "Reversed triangle", value: "ReversedTriangle", icon: symbolIcon2("shape.reversedTriangle") },
58374
- { id: "arrow-left", label: "Arrow left", value: "ArrowLeft", icon: inlineShapeAsset("ArrowLeft") },
58375
- { id: "arrow-right", label: "Arrow right", value: "ArrowRight", icon: inlineShapeAsset("ArrowRight") },
58376
- { id: "arrow-left-right", label: "Arrow left right", value: "ArrowLeftRight", icon: inlineShapeAsset("ArrowLeftRight") },
58377
- { id: "arrow-block-left", label: "Arrow block left", value: "ArrowBlockLeft", icon: symbolIcon2("shape.arrowBlockLeft") },
58378
- { id: "arrow-block-right", label: "Arrow block right", value: "ArrowBlockRight", icon: symbolIcon2("shape.arrowBlockRight") },
58379
- { id: "cloud", label: "Cloud", value: "Cloud", icon: inlineShapeAsset("Cloud") },
58380
- { id: "cross", label: "Cross", value: "Cross", icon: inlineShapeAsset("Cross") },
58381
- { id: "cylinder", label: "Cylinder", value: "Cylinder", icon: inlineShapeAsset("Cylinder") },
58382
- { id: "hexagon", label: "Hexagon", value: "Hexagon", icon: inlineShapeAsset("Hexagon") },
58383
- { id: "octagon", label: "Octagon", value: "Octagon", icon: inlineShapeAsset("Octagon") },
58384
- { id: "parallelogram", label: "Parallelogram", value: "Parallelogram", icon: inlineShapeAsset("Parallelogram") },
58385
- { id: "reversed-parallelogram", label: "Reversed parallelogram", value: "ReversedParallelogram", icon: symbolIcon2("shape.reversedParallelogram") },
58386
- { id: "pentagon", label: "Pentagon", value: "Pentagon", icon: inlineShapeAsset("Pentagon") },
58387
- { id: "predefined-process", label: "Predefined process", value: "PredefinedProcess", icon: symbolIcon2("shape.predefinedProcess") },
58388
- { id: "speech-bubble", label: "Speech bubble", value: "SpeachBubble", icon: inlineShapeAsset("SpeachBubble") },
58389
- { id: "star", label: "Star", value: "Star", icon: inlineShapeAsset("Star") },
58390
- { id: "trapezoid", label: "Trapezoid", value: "Trapezoid", icon: inlineShapeAsset("Trapezoid") },
58391
- { id: "braces-left", label: "Braces left", value: "BracesLeft", icon: inlineShapeAsset("BracesLeft", "BracesLeft") },
58392
- { id: "braces-right", label: "Braces right", value: "BracesRight", icon: inlineShapeAsset("BracesRight", "BracesRight") },
58393
- { id: "bpmn-task", label: "BPMN task", value: "BPMN_Task", icon: symbolIcon2("shape.bpmn.task") },
58394
- { id: "bpmn-gateway", label: "BPMN gateway", value: "BPMN_Gateway", icon: symbolIcon2("shape.bpmn.gateway") },
58395
- { id: "bpmn-gateway-parallel", label: "BPMN gateway parallel", value: "BPMN_GatewayParallel", icon: symbolIcon2("shape.bpmn.gatewayParallel") },
58396
- { id: "bpmn-gateway-xor", label: "BPMN gateway XOR", value: "BPMN_GatewayXOR", icon: symbolIcon2("shape.bpmn.gatewayXor") },
58397
- { id: "bpmn-start-event", label: "BPMN start event", value: "BPMN_StartEvent", icon: symbolIcon2("shape.bpmn.startEvent") },
58398
- { id: "bpmn-start-event-non-interrupting", label: "BPMN start event non interrupting", value: "BPMN_StartEventNoneInterrupting", icon: symbolIcon2("shape.bpmn.startEventNoneInterrupting") },
58399
- { id: "bpmn-end-event", label: "BPMN end event", value: "BPMN_EndEvent", icon: symbolIcon2("shape.bpmn.endEvent") },
58400
- { id: "bpmn-intermediate-event", label: "BPMN intermediate event", value: "BPMN_IntermediateEvent", icon: symbolIcon2("shape.bpmn.intermediateEvent") },
58401
- { id: "bpmn-intermediate-event-none-interrupting", label: "BPMN intermediate event none interrupting", value: "BPMN_IntermediateEventNoneInterrupting", icon: symbolIcon2("shape.bpmn.intermediateEventNoneInterrupting") },
58402
- { id: "bpmn-data-object", label: "BPMN data object", value: "BPMN_DataObject", icon: symbolIcon2("shape.bpmn.dataObject") },
58403
- { id: "bpmn-data-store", label: "BPMN data store", value: "BPMN_DataStore", icon: symbolIcon2("shape.bpmn.dataStore") },
58404
- { id: "bpmn-participant", label: "BPMN participant", value: "BPMN_Participant", icon: symbolIcon2("shape.bpmn.participant") },
58405
- { id: "bpmn-transaction", label: "BPMN transaction", value: "BPMN_Transaction", icon: symbolIcon2("shape.bpmn.transaction") },
58406
- { id: "bpmn-event-subprocess", label: "BPMN event subprocess", value: "BPMN_EventSubprocess", icon: symbolIcon2("shape.bpmn.eventSubprocess") },
58407
- { id: "bpmn-group", label: "BPMN group", value: "BPMN_Group", icon: symbolIcon2("shape.bpmn.group") },
58408
- { id: "bpmn-annotation", label: "BPMN annotation", value: "BPMN_Annotation", icon: symbolIcon2("shape.bpmn.annotation") }
58525
+ { id: "reversed-triangle", label: "Reversed triangle", value: "ReversedTriangle", icon: symbolIcon3("shape.reversedTriangle"), family: "basicShapes" },
58526
+ { id: "arrow-left", label: "Arrow left", value: "ArrowLeft", icon: inlineShapeAsset("ArrowLeft"), family: "basicShapes" },
58527
+ { id: "arrow-right", label: "Arrow right", value: "ArrowRight", icon: inlineShapeAsset("ArrowRight"), family: "basicShapes" },
58528
+ { id: "arrow-left-right", label: "Arrow left right", value: "ArrowLeftRight", icon: inlineShapeAsset("ArrowLeftRight"), family: "basicShapes" },
58529
+ { id: "arrow-block-left", label: "Arrow block left", value: "ArrowBlockLeft", icon: symbolIcon3("shape.arrowBlockLeft"), family: "basicShapes" },
58530
+ { id: "arrow-block-right", label: "Arrow block right", value: "ArrowBlockRight", icon: symbolIcon3("shape.arrowBlockRight"), family: "basicShapes" },
58531
+ { id: "cloud", label: "Cloud", value: "Cloud", icon: inlineShapeAsset("Cloud"), family: "basicShapes" },
58532
+ { id: "cross", label: "Cross", value: "Cross", icon: inlineShapeAsset("Cross"), family: "basicShapes" },
58533
+ { id: "cylinder", label: "Cylinder", value: "Cylinder", icon: inlineShapeAsset("Cylinder"), family: "basicShapes" },
58534
+ { id: "hexagon", label: "Hexagon", value: "Hexagon", icon: inlineShapeAsset("Hexagon"), family: "basicShapes" },
58535
+ { id: "octagon", label: "Octagon", value: "Octagon", icon: inlineShapeAsset("Octagon"), family: "basicShapes" },
58536
+ { id: "parallelogram", label: "Parallelogram", value: "Parallelogram", icon: inlineShapeAsset("Parallelogram"), family: "basicShapes" },
58537
+ { id: "reversed-parallelogram", label: "Reversed parallelogram", value: "ReversedParallelogram", icon: symbolIcon3("shape.reversedParallelogram"), family: "basicShapes" },
58538
+ { id: "pentagon", label: "Pentagon", value: "Pentagon", icon: inlineShapeAsset("Pentagon"), family: "basicShapes" },
58539
+ { id: "predefined-process", label: "Predefined process", value: "PredefinedProcess", icon: symbolIcon3("shape.predefinedProcess"), family: "basicShapes" },
58540
+ { id: "speech-bubble", label: "Speech bubble", value: "SpeachBubble", icon: inlineShapeAsset("SpeachBubble"), family: "basicShapes" },
58541
+ { id: "star", label: "Star", value: "Star", icon: inlineShapeAsset("Star"), family: "basicShapes" },
58542
+ { id: "trapezoid", label: "Trapezoid", value: "Trapezoid", icon: inlineShapeAsset("Trapezoid"), family: "basicShapes" },
58543
+ { id: "braces-left", label: "Braces left", value: "BracesLeft", icon: inlineShapeAsset("BracesLeft", "BracesLeft"), family: "basicShapes" },
58544
+ { id: "braces-right", label: "Braces right", value: "BracesRight", icon: inlineShapeAsset("BracesRight", "BracesRight"), family: "basicShapes" },
58545
+ { id: "bpmn-task", label: "BPMN task", value: "BPMN_Task", icon: symbolIcon3("shape.bpmn.task"), family: "bpmn" },
58546
+ { id: "bpmn-gateway", label: "BPMN gateway", value: "BPMN_Gateway", icon: symbolIcon3("shape.bpmn.gateway"), family: "bpmn" },
58547
+ { id: "bpmn-gateway-parallel", label: "BPMN gateway parallel", value: "BPMN_GatewayParallel", icon: symbolIcon3("shape.bpmn.gatewayParallel"), family: "bpmn" },
58548
+ { id: "bpmn-gateway-xor", label: "BPMN gateway XOR", value: "BPMN_GatewayXOR", icon: symbolIcon3("shape.bpmn.gatewayXor"), family: "bpmn" },
58549
+ { id: "bpmn-start-event", label: "BPMN start event", value: "BPMN_StartEvent", icon: symbolIcon3("shape.bpmn.startEvent"), family: "bpmn" },
58550
+ { id: "bpmn-start-event-non-interrupting", label: "BPMN start event non interrupting", value: "BPMN_StartEventNoneInterrupting", icon: symbolIcon3("shape.bpmn.startEventNoneInterrupting"), family: "bpmn" },
58551
+ { id: "bpmn-end-event", label: "BPMN end event", value: "BPMN_EndEvent", icon: symbolIcon3("shape.bpmn.endEvent"), family: "bpmn" },
58552
+ { id: "bpmn-intermediate-event", label: "BPMN intermediate event", value: "BPMN_IntermediateEvent", icon: symbolIcon3("shape.bpmn.intermediateEvent"), family: "bpmn" },
58553
+ { id: "bpmn-intermediate-event-none-interrupting", label: "BPMN intermediate event none interrupting", value: "BPMN_IntermediateEventNoneInterrupting", icon: symbolIcon3("shape.bpmn.intermediateEventNoneInterrupting"), family: "bpmn" },
58554
+ { id: "bpmn-data-object", label: "BPMN data object", value: "BPMN_DataObject", icon: symbolIcon3("shape.bpmn.dataObject"), family: "bpmn" },
58555
+ { id: "bpmn-data-store", label: "BPMN data store", value: "BPMN_DataStore", icon: symbolIcon3("shape.bpmn.dataStore"), family: "bpmn" },
58556
+ { id: "bpmn-participant", label: "BPMN participant", value: "BPMN_Participant", icon: symbolIcon3("shape.bpmn.participant"), family: "bpmn" },
58557
+ { id: "bpmn-transaction", label: "BPMN transaction", value: "BPMN_Transaction", icon: symbolIcon3("shape.bpmn.transaction"), family: "bpmn" },
58558
+ { id: "bpmn-event-subprocess", label: "BPMN event subprocess", value: "BPMN_EventSubprocess", icon: symbolIcon3("shape.bpmn.eventSubprocess"), family: "bpmn" },
58559
+ { id: "bpmn-group", label: "BPMN group", value: "BPMN_Group", icon: symbolIcon3("shape.bpmn.group"), family: "bpmn" },
58560
+ { id: "bpmn-annotation", label: "BPMN annotation", value: "BPMN_Annotation", icon: symbolIcon3("shape.bpmn.annotation"), family: "bpmn" }
58409
58561
  ];
58410
58562
  var BORDER_STYLE_OPTIONS = [
58411
- { id: "solid", label: "Solid", value: "solid", icon: symbolIcon2("stroke.solid") },
58412
- { id: "dot", label: "Dot", value: "dot", icon: symbolIcon2("stroke.dot") },
58413
- { id: "dash", label: "Dash", value: "dash", icon: symbolIcon2("stroke.dash") },
58414
- { id: "long-dash", label: "Long dash", value: "longDash", icon: symbolIcon2("stroke.longDash") }
58563
+ { id: "solid", label: "Solid", value: "solid", icon: symbolIcon3("stroke.solid") },
58564
+ { id: "dot", label: "Dot", value: "dot", icon: symbolIcon3("stroke.dot") },
58565
+ { id: "dash", label: "Dash", value: "dash", icon: symbolIcon3("stroke.dash") },
58566
+ { id: "long-dash", label: "Long dash", value: "longDash", icon: symbolIcon3("stroke.longDash") }
58415
58567
  ];
58416
58568
  var shapeTypeControl = {
58417
58569
  id: "shapeType",
@@ -58420,6 +58572,12 @@ var shapeTypeControl = {
58420
58572
  editor: {
58421
58573
  kind: "enum-icon",
58422
58574
  options: BASIC_INLINE_OPTIONS,
58575
+ layout: "grid",
58576
+ quickOptions: {
58577
+ family: "basicShapes",
58578
+ maxVisible: 18,
58579
+ overflow: "show-more"
58580
+ },
58423
58581
  catalog: {
58424
58582
  kind: "catalog",
58425
58583
  label: "Shape catalog",
@@ -58434,14 +58592,14 @@ var fillControl = {
58434
58592
  id: "backgroundColor",
58435
58593
  label: "Fill",
58436
58594
  valueSource: { kind: "itemProperty", property: "backgroundColor" },
58437
- icon: {
58438
- kind: "symbol",
58439
- key: "shape.fill",
58440
- state: {
58441
- swatch: { kind: "itemProperty", property: "backgroundColor" },
58442
- note: "UI can render the current fill color as a swatch inside the icon."
58443
- }
58444
- },
58595
+ icon: styleFillIcon({
58596
+ swatch: { kind: "itemProperty", property: "backgroundColor" },
58597
+ note: "UI can render the current fill color as a swatch inside the icon."
58598
+ }),
58599
+ icon: styleFillIcon({
58600
+ swatch: { kind: "itemProperty", property: "backgroundColor" },
58601
+ note: "UI can render the current fill color as a swatch inside the icon."
58602
+ }),
58445
58603
  editor: {
58446
58604
  kind: "color",
58447
58605
  palette: COLOR_PALETTE2,
@@ -58492,7 +58650,7 @@ var shapeOverlay = {
58492
58650
  {
58493
58651
  id: "shape.shapeType",
58494
58652
  label: "Shape type",
58495
- icon: symbolIcon2("shape.type"),
58653
+ icon: symbolIcon3("shape.type"),
58496
58654
  target: "each",
58497
58655
  controls: [shapeTypeControl]
58498
58656
  },
@@ -58506,18 +58664,32 @@ var shapeOverlay = {
58506
58664
  {
58507
58665
  id: "shape.strokeStyle",
58508
58666
  label: "Stroke style",
58509
- icon: symbolIcon2("shape.stroke"),
58667
+ icon: styleStrokeIcon(),
58510
58668
  target: "each",
58511
58669
  controls: strokeControls,
58512
58670
  groups: [
58513
58671
  {
58514
58672
  id: "shapeStrokeStyle",
58515
58673
  label: "Stroke style",
58516
- icon: symbolIcon2("shape.stroke"),
58674
+ icon: styleStrokeIcon(),
58517
58675
  controlIds: strokeControls.map((control) => control.id)
58518
58676
  }
58519
58677
  ]
58520
58678
  }
58679
+ ],
58680
+ sections: [
58681
+ {
58682
+ id: "shapeTypeSection",
58683
+ label: "Type",
58684
+ icon: symbolIcon3("shape.type"),
58685
+ actionIds: ["shape.shapeType"]
58686
+ },
58687
+ {
58688
+ id: "shapeAppearanceSection",
58689
+ label: "Appearance",
58690
+ icon: symbolIcon3("shape.stroke"),
58691
+ actionIds: ["shape.fill", "shape.strokeStyle"]
58692
+ }
58521
58693
  ]
58522
58694
  };
58523
58695
  var addShapeToolOverlay = {
@@ -58527,8 +58699,7 @@ var addShapeToolOverlay = {
58527
58699
  createsItemType: "Shape",
58528
58700
  family: "shape",
58529
58701
  icon: {
58530
- kind: "symbol",
58531
- key: "tool.shape",
58702
+ ...overlaySymbolIcon("tool.shape"),
58532
58703
  state: {
58533
58704
  note: "UI may swap the top-level icon to the selected shape option when desired."
58534
58705
  }
@@ -58542,6 +58713,12 @@ var addShapeToolOverlay = {
58542
58713
  editor: {
58543
58714
  kind: "enum-icon",
58544
58715
  options: BASIC_INLINE_OPTIONS,
58716
+ layout: "grid",
58717
+ quickOptions: {
58718
+ family: "basicShapes",
58719
+ maxVisible: 18,
58720
+ overflow: "show-more"
58721
+ },
58545
58722
  catalog: {
58546
58723
  kind: "catalog",
58547
58724
  label: "Shape catalog",
@@ -58552,6 +58729,10 @@ var addShapeToolOverlay = {
58552
58729
  invoke: { kind: "toolProperty", property: "type" }
58553
58730
  }
58554
58731
  ]
58732
+ },
58733
+ launch: { kind: "activate-tool" },
58734
+ surface: {
58735
+ order: 7
58555
58736
  }
58556
58737
  };
58557
58738
 
@@ -62958,14 +63139,14 @@ var cardOverlay = {
62958
63139
  {
62959
63140
  id: "card.flip",
62960
63141
  label: "Flip card",
62961
- icon: { kind: "symbol", key: "card.flip" },
63142
+ icon: overlaySymbolIcon("card.flip"),
62962
63143
  target: "each",
62963
63144
  invoke: { kind: "customMethod", methodName: "toggleIsOpen" }
62964
63145
  },
62965
63146
  {
62966
63147
  id: "card.rotateCcw",
62967
63148
  label: "Rotate 90 counter clockwise",
62968
- icon: { kind: "symbol", key: "card.rotateCcw" },
63149
+ icon: overlaySymbolIcon("card.rotateCcw"),
62969
63150
  target: "each",
62970
63151
  invoke: {
62971
63152
  kind: "customMethod",
@@ -62976,7 +63157,7 @@ var cardOverlay = {
62976
63157
  {
62977
63158
  id: "card.rotateCw",
62978
63159
  label: "Rotate 90 clockwise",
62979
- icon: { kind: "symbol", key: "card.rotateCw" },
63160
+ icon: overlaySymbolIcon("card.rotateCw"),
62980
63161
  target: "each",
62981
63162
  invoke: {
62982
63163
  kind: "customMethod",
@@ -63230,28 +63411,28 @@ var deckOverlay = {
63230
63411
  {
63231
63412
  id: "deck.getTopCard",
63232
63413
  label: "Draw top card",
63233
- icon: { kind: "symbol", key: "deck.drawTop" },
63414
+ icon: overlaySymbolIcon("deck.drawTop"),
63234
63415
  target: "single",
63235
63416
  invoke: { kind: "customMethod", methodName: "getTopCard" }
63236
63417
  },
63237
63418
  {
63238
63419
  id: "deck.getBottomCard",
63239
63420
  label: "Draw bottom card",
63240
- icon: { kind: "symbol", key: "deck.drawBottom" },
63421
+ icon: overlaySymbolIcon("deck.drawBottom"),
63241
63422
  target: "single",
63242
63423
  invoke: { kind: "customMethod", methodName: "getBottomCard" }
63243
63424
  },
63244
63425
  {
63245
63426
  id: "deck.getRandomCard",
63246
63427
  label: "Draw random card",
63247
- icon: { kind: "symbol", key: "deck.drawRandom" },
63428
+ icon: overlaySymbolIcon("deck.drawRandom"),
63248
63429
  target: "single",
63249
63430
  invoke: { kind: "customMethod", methodName: "getRandomCard" }
63250
63431
  },
63251
63432
  {
63252
63433
  id: "deck.getCards",
63253
63434
  label: "Draw cards",
63254
- icon: { kind: "symbol", key: "deck.drawMany" },
63435
+ icon: overlaySymbolIcon("deck.drawMany"),
63255
63436
  target: "single",
63256
63437
  controls: [
63257
63438
  {
@@ -63273,14 +63454,14 @@ var deckOverlay = {
63273
63454
  {
63274
63455
  id: "deck.shuffle",
63275
63456
  label: "Shuffle",
63276
- icon: { kind: "symbol", key: "deck.shuffle" },
63457
+ icon: overlaySymbolIcon("deck.shuffle"),
63277
63458
  target: "single",
63278
63459
  invoke: { kind: "customMethod", methodName: "shuffleDeck" }
63279
63460
  },
63280
63461
  {
63281
63462
  id: "deck.flip",
63282
63463
  label: "Flip deck",
63283
- icon: { kind: "symbol", key: "deck.flip" },
63464
+ icon: overlaySymbolIcon("deck.flip"),
63284
63465
  target: "single",
63285
63466
  invoke: { kind: "customMethod", methodName: "flipDeck" }
63286
63467
  }
@@ -63289,7 +63470,7 @@ var deckOverlay = {
63289
63470
  var createDeckSelectionAction = {
63290
63471
  id: "deck.createFromSelection",
63291
63472
  label: "Create deck",
63292
- icon: { kind: "symbol", key: "deck.createFromSelection" },
63473
+ icon: overlaySymbolIcon("deck.createFromSelection"),
63293
63474
  description: "Stacks selected cards into a new deck, or merges selected cards and decks into one deck.",
63294
63475
  invoke: { kind: "selectionMethod", methodName: "createDeck" },
63295
63476
  isAvailable: (items) => {
@@ -63858,14 +64039,14 @@ var diceOverlay = {
63858
64039
  {
63859
64040
  id: "dice.throw",
63860
64041
  label: "Throw dice",
63861
- icon: { kind: "symbol", key: "dice.throw" },
64042
+ icon: overlaySymbolIcon("dice.throw"),
63862
64043
  target: "each",
63863
64044
  invoke: { kind: "customMethod", methodName: "throwDice" }
63864
64045
  },
63865
64046
  {
63866
64047
  id: "dice.range",
63867
64048
  label: "Range",
63868
- icon: { kind: "symbol", key: "dice.range" },
64049
+ icon: overlaySymbolIcon("dice.range"),
63869
64050
  target: "each",
63870
64051
  controls: [
63871
64052
  {
@@ -63887,11 +64068,9 @@ var diceOverlay = {
63887
64068
  {
63888
64069
  id: "dice.fill",
63889
64070
  label: "Fill",
63890
- icon: {
63891
- kind: "symbol",
63892
- key: "shape.fill",
63893
- state: { swatch: { kind: "itemProperty", property: "backgroundColor" } }
63894
- },
64071
+ icon: styleFillIcon({
64072
+ swatch: { kind: "itemProperty", property: "backgroundColor" }
64073
+ }),
63895
64074
  target: "each",
63896
64075
  controls: [
63897
64076
  {
@@ -63903,6 +64082,14 @@ var diceOverlay = {
63903
64082
  }
63904
64083
  ]
63905
64084
  }
64085
+ ],
64086
+ sections: [
64087
+ {
64088
+ id: "diceActions",
64089
+ label: "Dice",
64090
+ icon: overlaySymbolIcon("dice.throw"),
64091
+ actionIds: ["dice.throw", "dice.range", "dice.fill"]
64092
+ }
63906
64093
  ]
63907
64094
  };
63908
64095
  var addDiceToolOverlay = {
@@ -63911,7 +64098,19 @@ var addDiceToolOverlay = {
63911
64098
  kind: "create",
63912
64099
  createsItemType: "Dice",
63913
64100
  family: "game",
63914
- icon: { kind: "symbol", key: "tool.dice" }
64101
+ icon: overlaySymbolIcon("tool.dice"),
64102
+ launch: { kind: "activate-tool" },
64103
+ surface: {
64104
+ order: 1,
64105
+ group: {
64106
+ id: "gameItems",
64107
+ label: "Game items",
64108
+ icon: overlaySymbolIcon("tool.dice"),
64109
+ order: 1,
64110
+ behavior: "open-panel"
64111
+ },
64112
+ relatedToolNames: ["AddScreen", "AddPouch"]
64113
+ }
63915
64114
  };
63916
64115
 
63917
64116
  // src/Items/Dice/Dice.ts
@@ -64259,8 +64458,7 @@ var screenOverlay = {
64259
64458
  id: "screen.background",
64260
64459
  label: "Background",
64261
64460
  icon: {
64262
- kind: "symbol",
64263
- key: "screen.background",
64461
+ ...overlaySymbolIcon("screen.background"),
64264
64462
  state: { swatch: { kind: "itemProperty", property: "backgroundColor" } }
64265
64463
  },
64266
64464
  target: "each",
@@ -64277,6 +64475,97 @@ var screenOverlay = {
64277
64475
  invoke: { kind: "setProperty", property: "backgroundColor" }
64278
64476
  }
64279
64477
  ]
64478
+ },
64479
+ {
64480
+ id: "screen.stroke",
64481
+ label: "Stroke",
64482
+ icon: {
64483
+ ...overlaySymbolIcon("shape.stroke"),
64484
+ state: { swatch: { kind: "itemProperty", property: "borderColor" } }
64485
+ },
64486
+ target: "each",
64487
+ controls: [
64488
+ {
64489
+ id: "borderColor",
64490
+ label: "Border color",
64491
+ valueSource: { kind: "itemProperty", property: "borderColor" },
64492
+ editor: {
64493
+ kind: "color",
64494
+ palette: ["#000000", "#FFFFFF", "#888888", "transparent"],
64495
+ allowTransparent: true,
64496
+ presentation: "square"
64497
+ },
64498
+ invoke: { kind: "setProperty", property: "borderColor" }
64499
+ },
64500
+ {
64501
+ id: "borderWidth",
64502
+ label: "Border width",
64503
+ valueSource: { kind: "itemProperty", property: "borderWidth" },
64504
+ editor: {
64505
+ kind: "number-stepper",
64506
+ min: 0,
64507
+ max: 8,
64508
+ step: 1,
64509
+ presets: [0, 1, 2, 4],
64510
+ unit: "px"
64511
+ },
64512
+ invoke: { kind: "setProperty", property: "borderWidth" }
64513
+ }
64514
+ ],
64515
+ groups: [
64516
+ {
64517
+ id: "screenStrokeStyle",
64518
+ label: "Stroke",
64519
+ icon: overlaySymbolIcon("shape.stroke"),
64520
+ controlIds: ["borderColor", "borderWidth"]
64521
+ }
64522
+ ]
64523
+ },
64524
+ {
64525
+ id: "screen.backgroundImage",
64526
+ label: "Background image",
64527
+ icon: overlaySymbolIcon("screen.backgroundImage"),
64528
+ target: "each",
64529
+ when: {
64530
+ kind: "falsy",
64531
+ source: { kind: "itemProperty", property: "backgroundUrl" }
64532
+ },
64533
+ controls: [
64534
+ {
64535
+ id: "backgroundUrl",
64536
+ label: "Background image",
64537
+ valueSource: { kind: "itemProperty", property: "backgroundUrl" },
64538
+ editor: {
64539
+ kind: "asset-upload",
64540
+ mode: "single",
64541
+ accept: ["image/*"]
64542
+ },
64543
+ invoke: { kind: "setProperty", property: "backgroundUrl" }
64544
+ }
64545
+ ]
64546
+ },
64547
+ {
64548
+ id: "screen.removeBackgroundImage",
64549
+ label: "Remove background image",
64550
+ icon: overlaySymbolIcon("screen.backgroundImage.remove"),
64551
+ target: "each",
64552
+ when: {
64553
+ kind: "truthy",
64554
+ source: { kind: "itemProperty", property: "backgroundUrl" }
64555
+ },
64556
+ invoke: {
64557
+ kind: "customMethod",
64558
+ methodName: "setBackgroundUrl",
64559
+ args: [{ kind: "static", value: "" }]
64560
+ }
64561
+ }
64562
+ ],
64563
+ sections: [
64564
+ {
64565
+ id: "screenAppearance",
64566
+ label: "Appearance",
64567
+ icon: overlaySymbolIcon("screen.background"),
64568
+ actionIds: ["screen.background", "screen.stroke", "screen.backgroundImage", "screen.removeBackgroundImage"]
64280
64569
  }
64281
64570
  ]
64282
64571
  };
@@ -64286,7 +64575,19 @@ var addScreenToolOverlay = {
64286
64575
  kind: "create",
64287
64576
  createsItemType: "Screen",
64288
64577
  family: "container",
64289
- icon: { kind: "symbol", key: "tool.screen" }
64578
+ icon: overlaySymbolIcon("tool.screen"),
64579
+ launch: { kind: "activate-tool" },
64580
+ surface: {
64581
+ order: 2,
64582
+ group: {
64583
+ id: "gameItems",
64584
+ label: "Game items",
64585
+ icon: overlaySymbolIcon("tool.dice"),
64586
+ order: 1,
64587
+ behavior: "open-panel"
64588
+ },
64589
+ relatedToolNames: ["AddDice", "AddPouch"]
64590
+ }
64290
64591
  };
64291
64592
  var addPouchToolOverlay = {
64292
64593
  toolName: "AddPouch",
@@ -64294,7 +64595,19 @@ var addPouchToolOverlay = {
64294
64595
  kind: "create",
64295
64596
  createsItemType: "Screen",
64296
64597
  family: "container",
64297
- icon: { kind: "symbol", key: "tool.pouch" }
64598
+ icon: overlaySymbolIcon("tool.pouch"),
64599
+ launch: { kind: "activate-tool" },
64600
+ surface: {
64601
+ order: 3,
64602
+ group: {
64603
+ id: "gameItems",
64604
+ label: "Game items",
64605
+ icon: overlaySymbolIcon("tool.dice"),
64606
+ order: 1,
64607
+ behavior: "open-panel"
64608
+ },
64609
+ relatedToolNames: ["AddDice", "AddScreen"]
64610
+ }
64298
64611
  };
64299
64612
 
64300
64613
  // src/Items/Screen/Screen.ts
@@ -72254,8 +72567,7 @@ var addDrawingToolOverlay = {
72254
72567
  family: "drawing",
72255
72568
  createsItemType: "Drawing",
72256
72569
  icon: {
72257
- kind: "symbol",
72258
- key: "tool.pen",
72570
+ ...overlaySymbolIcon("tool.pen"),
72259
72571
  state: {
72260
72572
  swatch: { kind: "toolProperty", property: "strokeColor" },
72261
72573
  note: "UI can show the pending pen color in the icon."
@@ -72267,10 +72579,22 @@ var addDrawingToolOverlay = {
72267
72579
  {
72268
72580
  id: "drawingDefaults",
72269
72581
  label: "Pen defaults",
72270
- icon: { kind: "symbol", key: "tool.pen" },
72582
+ icon: overlaySymbolIcon("tool.pen"),
72271
72583
  controlIds: strokeControls2.map((control) => control.id)
72272
72584
  }
72273
72585
  ]
72586
+ },
72587
+ launch: { kind: "activate-tool" },
72588
+ surface: {
72589
+ order: 1,
72590
+ group: {
72591
+ id: "drawingTools",
72592
+ label: "Drawing",
72593
+ icon: overlaySymbolIcon("tool.pen"),
72594
+ order: 5,
72595
+ behavior: "activate-last-used"
72596
+ },
72597
+ relatedToolNames: ["AddHighlighter", "Eraser"]
72274
72598
  }
72275
72599
  };
72276
72600
  var addHighlighterToolOverlay = {
@@ -72280,8 +72604,7 @@ var addHighlighterToolOverlay = {
72280
72604
  family: "drawing",
72281
72605
  createsItemType: "Drawing",
72282
72606
  icon: {
72283
- kind: "symbol",
72284
- key: "tool.highlighter",
72607
+ ...overlaySymbolIcon("tool.highlighter"),
72285
72608
  state: {
72286
72609
  swatch: { kind: "toolProperty", property: "strokeColor" },
72287
72610
  note: "UI can show the pending highlighter color in the icon."
@@ -72293,10 +72616,22 @@ var addHighlighterToolOverlay = {
72293
72616
  {
72294
72617
  id: "highlighterDefaults",
72295
72618
  label: "Highlighter defaults",
72296
- icon: { kind: "symbol", key: "tool.highlighter" },
72619
+ icon: overlaySymbolIcon("tool.highlighter"),
72297
72620
  controlIds: strokeControls2.map((control) => control.id)
72298
72621
  }
72299
72622
  ]
72623
+ },
72624
+ launch: { kind: "activate-tool" },
72625
+ surface: {
72626
+ order: 2,
72627
+ group: {
72628
+ id: "drawingTools",
72629
+ label: "Drawing",
72630
+ icon: overlaySymbolIcon("tool.pen"),
72631
+ order: 5,
72632
+ behavior: "activate-last-used"
72633
+ },
72634
+ relatedToolNames: ["AddDrawing", "Eraser"]
72300
72635
  }
72301
72636
  };
72302
72637
  var eraserToolOverlay = {
@@ -72304,7 +72639,7 @@ var eraserToolOverlay = {
72304
72639
  label: "Eraser",
72305
72640
  kind: "mode",
72306
72641
  family: "drawing",
72307
- icon: { kind: "symbol", key: "tool.eraser" },
72642
+ icon: overlaySymbolIcon("tool.eraser"),
72308
72643
  defaults: {
72309
72644
  controls: [
72310
72645
  {
@@ -72321,6 +72656,18 @@ var eraserToolOverlay = {
72321
72656
  invoke: { kind: "toolProperty", property: "strokeWidth" }
72322
72657
  }
72323
72658
  ]
72659
+ },
72660
+ launch: { kind: "activate-tool" },
72661
+ surface: {
72662
+ order: 3,
72663
+ group: {
72664
+ id: "drawingTools",
72665
+ label: "Drawing",
72666
+ icon: overlaySymbolIcon("tool.pen"),
72667
+ order: 5,
72668
+ behavior: "activate-last-used"
72669
+ },
72670
+ relatedToolNames: ["AddDrawing", "AddHighlighter"]
72324
72671
  }
72325
72672
  };
72326
72673
 
@@ -72521,7 +72868,7 @@ var frameTypeOptions = Object.keys(Frames).map((frameType) => ({
72521
72868
  id: frameType,
72522
72869
  label: frameType === "Custom" ? "Custom" : Frames[frameType].name,
72523
72870
  value: frameType,
72524
- icon: { kind: "symbol", key: `frame.${frameType}` }
72871
+ icon: overlaySymbolIcon(`frame.${frameType}`)
72525
72872
  }));
72526
72873
  var addFrameToolOverlay = {
72527
72874
  toolName: "AddFrame",
@@ -72529,7 +72876,7 @@ var addFrameToolOverlay = {
72529
72876
  kind: "create",
72530
72877
  createsItemType: "Frame",
72531
72878
  family: "frame",
72532
- icon: { kind: "symbol", key: "tool.frame" },
72879
+ icon: overlaySymbolIcon("tool.frame"),
72533
72880
  defaults: {
72534
72881
  controls: [
72535
72882
  {
@@ -72543,6 +72890,10 @@ var addFrameToolOverlay = {
72543
72890
  invoke: { kind: "toolProperty", property: "shape" }
72544
72891
  }
72545
72892
  ]
72893
+ },
72894
+ launch: { kind: "activate-tool" },
72895
+ surface: {
72896
+ order: 10
72546
72897
  }
72547
72898
  };
72548
72899
 
@@ -72907,8 +73258,7 @@ var addStickerToolOverlay = {
72907
73258
  createsItemType: "Sticker",
72908
73259
  family: "sticker",
72909
73260
  icon: {
72910
- kind: "symbol",
72911
- key: "tool.sticker",
73261
+ ...overlaySymbolIcon("tool.sticker"),
72912
73262
  state: {
72913
73263
  swatch: { kind: "toolProperty", property: "backgroundColor" }
72914
73264
  }
@@ -72919,10 +73269,14 @@ var addStickerToolOverlay = {
72919
73269
  id: "stickerBackgroundColor",
72920
73270
  label: "Color",
72921
73271
  valueSource: { kind: "toolProperty", property: "backgroundColor" },
72922
- editor: { kind: "color", palette: STICKER_COLORS },
73272
+ editor: { kind: "color", palette: STICKER_COLORS, presentation: "sticker" },
72923
73273
  invoke: { kind: "toolProperty", property: "backgroundColor" }
72924
73274
  }
72925
73275
  ]
73276
+ },
73277
+ launch: { kind: "activate-tool" },
73278
+ surface: {
73279
+ order: 9
72926
73280
  }
72927
73281
  };
72928
73282
 
@@ -75228,6 +75582,11 @@ export {
75228
75582
  toFiniteNumber,
75229
75583
  tempStorage,
75230
75584
  tagByType,
75585
+ symbolIcon,
75586
+ styleStrokeIcon,
75587
+ styleFontSizeIcon,
75588
+ styleFillIcon,
75589
+ styleColorIcon,
75231
75590
  stickerColors,
75232
75591
  srgbChannelToLinear,
75233
75592
  sha256,
@@ -75257,12 +75616,16 @@ export {
75257
75616
  positionAbsolutely,
75258
75617
  parsersHTML,
75259
75618
  parseCssRgb,
75619
+ overlaySymbolIcon,
75620
+ overlayAssetIcon,
75260
75621
  omitDefaultProperties,
75261
75622
  messageRouter,
75262
75623
  meetsWCAG_AAA,
75263
75624
  meetsWCAG_AA,
75625
+ matchesOverlayCondition,
75264
75626
  listToolOverlays,
75265
75627
  listSelectionActions,
75628
+ listCreateSurfaceEntries,
75266
75629
  itemOverlays,
75267
75630
  itemFactories2 as itemFactories,
75268
75631
  itemOverlays as itemActions,
@@ -75354,6 +75717,8 @@ export {
75354
75717
  PRESENCE_CURSOR_THROTTLE,
75355
75718
  PRESENCE_CLEANUP_USER_TIMER,
75356
75719
  PRESENCE_CLEANUP_IDLE_TIMER,
75720
+ OVERLAY_SYMBOL_KEYS,
75721
+ OVERLAY_ICON_SPRITE_PATH,
75357
75722
  MiroItemConverter,
75358
75723
  Mbr,
75359
75724
  Matrix,