microboard-temp 0.14.18 → 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.
@@ -673,12 +673,16 @@ __export(exports_browser, {
673
673
  positionAbsolutely: () => positionAbsolutely,
674
674
  parsersHTML: () => parsersHTML,
675
675
  parseCssRgb: () => parseCssRgb,
676
+ overlaySymbolIcon: () => overlaySymbolIcon,
677
+ overlayAssetIcon: () => overlayAssetIcon,
676
678
  omitDefaultProperties: () => omitDefaultProperties,
677
679
  messageRouter: () => messageRouter,
678
680
  meetsWCAG_AAA: () => meetsWCAG_AAA,
679
681
  meetsWCAG_AA: () => meetsWCAG_AA,
682
+ matchesOverlayCondition: () => matchesOverlayCondition,
680
683
  listToolOverlays: () => listToolOverlays,
681
684
  listSelectionActions: () => listSelectionActions,
685
+ listCreateSurfaceEntries: () => listCreateSurfaceEntries,
682
686
  itemOverlays: () => itemOverlays,
683
687
  itemFactories: () => itemFactories2,
684
688
  itemActions: () => itemOverlays,
@@ -771,6 +775,7 @@ __export(exports_browser, {
771
775
  PRESENCE_CLEANUP_USER_TIMER: () => PRESENCE_CLEANUP_USER_TIMER,
772
776
  PRESENCE_CLEANUP_IDLE_TIMER: () => PRESENCE_CLEANUP_IDLE_TIMER,
773
777
  OVERLAY_SYMBOL_KEYS: () => OVERLAY_SYMBOL_KEYS,
778
+ OVERLAY_ICON_SPRITE_PATH: () => OVERLAY_ICON_SPRITE_PATH,
774
779
  MiroItemConverter: () => MiroItemConverter,
775
780
  Mbr: () => Mbr,
776
781
  Matrix: () => Matrix,
@@ -11717,6 +11722,23 @@ function toLocalTransformOp(op, containerMatrix, itemId) {
11717
11722
  return op;
11718
11723
  }
11719
11724
  }
11725
+ // src/Overlay/IconPack.ts
11726
+ var OVERLAY_ICON_SPRITE_PATH = "src/Overlay/overlay-icons.svg";
11727
+ function overlaySymbolIcon(key) {
11728
+ return {
11729
+ kind: "symbol",
11730
+ key,
11731
+ sourcePath: OVERLAY_ICON_SPRITE_PATH
11732
+ };
11733
+ }
11734
+ function overlayAssetIcon(path2) {
11735
+ return {
11736
+ kind: "asset",
11737
+ path: path2,
11738
+ mimeType: "image/svg+xml"
11739
+ };
11740
+ }
11741
+
11720
11742
  // src/Overlay/OverlayIcons.ts
11721
11743
  var OVERLAY_SYMBOL_KEYS = {
11722
11744
  styleFill: "style.fill",
@@ -11725,7 +11747,7 @@ var OVERLAY_SYMBOL_KEYS = {
11725
11747
  styleFontSize: "style.fontSize"
11726
11748
  };
11727
11749
  function symbolIcon(key, state) {
11728
- return state ? { kind: "symbol", key, state } : { kind: "symbol", key };
11750
+ return state ? { kind: "symbol", key, sourcePath: OVERLAY_ICON_SPRITE_PATH, state } : { kind: "symbol", key, sourcePath: OVERLAY_ICON_SPRITE_PATH };
11729
11751
  }
11730
11752
  function styleFillIcon(state) {
11731
11753
  return symbolIcon(OVERLAY_SYMBOL_KEYS.styleFill, state);
@@ -11766,6 +11788,45 @@ function getToolOverlay(toolName) {
11766
11788
  function listToolOverlays() {
11767
11789
  return Object.values(toolOverlays);
11768
11790
  }
11791
+ function listCreateSurfaceEntries() {
11792
+ const groupedEntries = new Map;
11793
+ const ungroupedEntries = [];
11794
+ for (const tool of Object.values(toolOverlays)) {
11795
+ const group = tool.surface?.group;
11796
+ if (!group) {
11797
+ ungroupedEntries.push({
11798
+ kind: "tool",
11799
+ tool,
11800
+ order: tool.surface?.order
11801
+ });
11802
+ continue;
11803
+ }
11804
+ const existing = groupedEntries.get(group.id);
11805
+ if (existing) {
11806
+ existing.tools.push(tool);
11807
+ if (existing.order === undefined && group.order !== undefined) {
11808
+ existing.order = group.order;
11809
+ }
11810
+ continue;
11811
+ }
11812
+ groupedEntries.set(group.id, {
11813
+ kind: "group",
11814
+ id: group.id,
11815
+ label: group.label,
11816
+ description: group.description,
11817
+ icon: group.icon,
11818
+ order: group.order,
11819
+ behavior: group.behavior,
11820
+ tools: [tool]
11821
+ });
11822
+ }
11823
+ const sortedGroups = [...groupedEntries.values()].map((group) => ({
11824
+ ...group,
11825
+ tools: [...group.tools].sort(compareToolsBySurfaceOrder)
11826
+ })).sort(compareEntriesByOrder);
11827
+ const sortedUngroupedEntries = [...ungroupedEntries].sort(compareEntriesByOrder);
11828
+ return [...sortedGroups, ...sortedUngroupedEntries];
11829
+ }
11769
11830
  function listSelectionActions() {
11770
11831
  return Object.values(selectionActions);
11771
11832
  }
@@ -11775,6 +11836,33 @@ function getSelectionOverlayActions(items) {
11775
11836
  function resolveDynamicOptions(providerId, context) {
11776
11837
  return dynamicOptionsResolvers[providerId]?.(context) ?? [];
11777
11838
  }
11839
+ function matchesOverlayCondition(condition, context) {
11840
+ if (!condition) {
11841
+ return true;
11842
+ }
11843
+ switch (condition.kind) {
11844
+ case "equals":
11845
+ return readOverlayValueSource(context, condition.source) === condition.value;
11846
+ case "truthy":
11847
+ return !!readOverlayValueSource(context, condition.source);
11848
+ case "falsy":
11849
+ return !readOverlayValueSource(context, condition.source);
11850
+ case "itemTypeIn":
11851
+ return context.items?.every((item) => condition.itemTypes.includes(item.itemType)) ?? (context.item ? condition.itemTypes.includes(context.item.itemType) : false);
11852
+ case "selectionSize": {
11853
+ const size = context.items?.length ?? (context.item ? 1 : 0);
11854
+ const meetsMin = condition.min === undefined || size >= condition.min;
11855
+ const meetsMax = condition.max === undefined || size <= condition.max;
11856
+ return meetsMin && meetsMax;
11857
+ }
11858
+ case "allOf":
11859
+ return condition.conditions.every((child) => matchesOverlayCondition(child, context));
11860
+ case "anyOf":
11861
+ return condition.conditions.some((child) => matchesOverlayCondition(child, context));
11862
+ case "not":
11863
+ return !matchesOverlayCondition(condition.condition, context);
11864
+ }
11865
+ }
11778
11866
  function intersectOverlayActions(items) {
11779
11867
  if (items.length === 0) {
11780
11868
  return [];
@@ -11793,6 +11881,24 @@ function intersectOverlayActions(items) {
11793
11881
  }
11794
11882
  return [...counts.values()].filter((action) => overlays.every((overlay) => overlay.actions.some((candidate) => candidate.id === action.id)) && (action.target !== "single" || items.length === 1));
11795
11883
  }
11884
+ function compareToolsBySurfaceOrder(a, b) {
11885
+ const aOrder = a.surface?.order ?? Number.MAX_SAFE_INTEGER;
11886
+ const bOrder = b.surface?.order ?? Number.MAX_SAFE_INTEGER;
11887
+ return aOrder - bOrder || a.label.localeCompare(b.label);
11888
+ }
11889
+ function compareEntriesByOrder(a, b) {
11890
+ const aOrder = a.order ?? Number.MAX_SAFE_INTEGER;
11891
+ const bOrder = b.order ?? Number.MAX_SAFE_INTEGER;
11892
+ const aLabel = a.label ?? a.tool?.label ?? "";
11893
+ const bLabel = b.label ?? b.tool?.label ?? "";
11894
+ return aOrder - bOrder || aLabel.localeCompare(bLabel);
11895
+ }
11896
+ function readOverlayValueSource(context, source) {
11897
+ if (source.kind === "itemProperty") {
11898
+ return context.item ? context.item[source.property] : undefined;
11899
+ }
11900
+ return context.tool ? context.tool[source.property] : undefined;
11901
+ }
11796
11902
  // src/Items/BaseItem/BaseItem.ts
11797
11903
  class BaseItem {
11798
11904
  static createCommand;
@@ -37769,6 +37875,7 @@ var richTextOverlay = {
37769
37875
  id: "text.fontSize",
37770
37876
  label: "Font size",
37771
37877
  icon: styleFontSizeIcon(),
37878
+ icon: styleFontSizeIcon(),
37772
37879
  target: "each",
37773
37880
  controls: [
37774
37881
  {
@@ -37786,6 +37893,14 @@ var richTextOverlay = {
37786
37893
  }
37787
37894
  ]
37788
37895
  }
37896
+ ],
37897
+ sections: [
37898
+ {
37899
+ id: "textTypography",
37900
+ label: "Typography",
37901
+ icon: overlaySymbolIcon("text.fontSize"),
37902
+ actionIds: ["text.fontSize"]
37903
+ }
37789
37904
  ]
37790
37905
  };
37791
37906
  var addTextToolOverlay = {
@@ -37794,8 +37909,12 @@ var addTextToolOverlay = {
37794
37909
  kind: "create",
37795
37910
  createsItemType: "RichText",
37796
37911
  family: "text",
37797
- icon: { kind: "symbol", key: "tool.text" },
37798
- description: "Creates editable rich text. The current first pass has no pre-placement defaults on this tool."
37912
+ icon: overlaySymbolIcon("tool.text"),
37913
+ description: "Creates editable rich text. The current first pass has no pre-placement defaults on this tool.",
37914
+ launch: { kind: "activate-tool" },
37915
+ surface: {
37916
+ order: 6
37917
+ }
37799
37918
  };
37800
37919
 
37801
37920
  // src/Items/RichText/RichText.ts
@@ -44265,7 +44384,7 @@ var COLOR_PALETTE = [
44265
44384
  "#118AB2",
44266
44385
  "#7B61FF"
44267
44386
  ];
44268
- var symbolIcon2 = (key) => ({ kind: "symbol", key });
44387
+ var symbolIcon2 = (key) => overlaySymbolIcon(key);
44269
44388
  var lineStyleOptions = ConnectorLineStyles.map((style) => ({
44270
44389
  id: style,
44271
44390
  label: style[0].toUpperCase() + style.slice(1),
@@ -44432,6 +44551,14 @@ var connectorOverlay = {
44432
44551
  }
44433
44552
  ]
44434
44553
  }
44554
+ ],
44555
+ sections: [
44556
+ {
44557
+ id: "connectorArrows",
44558
+ label: "Arrows",
44559
+ icon: symbolIcon2("connector.style"),
44560
+ actionIds: ["connector.switchPointers", "connector.style"]
44561
+ }
44435
44562
  ]
44436
44563
  };
44437
44564
  var addConnectorToolOverlay = {
@@ -44452,12 +44579,24 @@ var addConnectorToolOverlay = {
44452
44579
  controls: connectorToolControls,
44453
44580
  groups: [
44454
44581
  {
44455
- id: "connectorToolStyle",
44582
+ id: "connectorToolQuickDefaults",
44583
+ label: "Connector quick defaults",
44584
+ icon: symbolIcon2("connector.lineStyle.straight"),
44585
+ controlIds: ["toolLineStyle"],
44586
+ description: "Primary defaults that match the compact create-surface picker."
44587
+ },
44588
+ {
44589
+ id: "connectorToolAdvancedDefaults",
44456
44590
  label: "Connector defaults",
44457
44591
  icon: symbolIcon2("connector.style"),
44458
- controlIds: connectorToolControls.map((control) => control.id)
44592
+ controlIds: connectorToolControls.map((control) => control.id),
44593
+ description: "Extended defaults available in richer create flows."
44459
44594
  }
44460
44595
  ]
44596
+ },
44597
+ launch: { kind: "activate-tool" },
44598
+ surface: {
44599
+ order: 8
44461
44600
  }
44462
44601
  };
44463
44602
 
@@ -58595,57 +58734,53 @@ var COLOR_PALETTE2 = [
58595
58734
  "#7B61FF",
58596
58735
  "transparent"
58597
58736
  ];
58598
- var inlineShapeAsset = (folder, file2 = folder) => ({
58599
- kind: "asset",
58600
- path: `src/Items/Shape/Basic/${folder}/${file2}.icon.svg`,
58601
- mimeType: "image/svg+xml"
58602
- });
58603
- var symbolIcon3 = (key) => ({ kind: "symbol", key });
58737
+ var inlineShapeAsset = (folder, file2 = folder) => overlayAssetIcon(`src/Items/Shape/Basic/${folder}/${file2}.icon.svg`);
58738
+ var symbolIcon3 = (key) => overlaySymbolIcon(key);
58604
58739
  var BASIC_INLINE_OPTIONS = [
58605
- { id: "rectangle", label: "Rectangle", value: "Rectangle", icon: inlineShapeAsset("Rectangle") },
58606
- { id: "rounded-rectangle", label: "Rounded rectangle", value: "RoundedRectangle", icon: inlineShapeAsset("RoundedRectangle") },
58607
- { id: "circle", label: "Circle", value: "Circle", icon: inlineShapeAsset("Circle") },
58608
- { id: "triangle", label: "Triangle", value: "Triangle", icon: inlineShapeAsset("Triangle") },
58609
- { id: "rhombus", label: "Rhombus", value: "Rhombus", icon: inlineShapeAsset("Rhombus") }
58740
+ { id: "rectangle", label: "Rectangle", value: "Rectangle", icon: inlineShapeAsset("Rectangle"), family: "basicShapes" },
58741
+ { id: "rounded-rectangle", label: "Rounded rectangle", value: "RoundedRectangle", icon: inlineShapeAsset("RoundedRectangle"), family: "basicShapes" },
58742
+ { id: "circle", label: "Circle", value: "Circle", icon: inlineShapeAsset("Circle"), family: "basicShapes" },
58743
+ { id: "triangle", label: "Triangle", value: "Triangle", icon: inlineShapeAsset("Triangle"), family: "basicShapes" },
58744
+ { id: "rhombus", label: "Rhombus", value: "Rhombus", icon: inlineShapeAsset("Rhombus"), family: "basicShapes" }
58610
58745
  ];
58611
58746
  var SHAPE_CATALOG_OPTIONS = [
58612
58747
  ...BASIC_INLINE_OPTIONS,
58613
- { id: "reversed-triangle", label: "Reversed triangle", value: "ReversedTriangle", icon: symbolIcon3("shape.reversedTriangle") },
58614
- { id: "arrow-left", label: "Arrow left", value: "ArrowLeft", icon: inlineShapeAsset("ArrowLeft") },
58615
- { id: "arrow-right", label: "Arrow right", value: "ArrowRight", icon: inlineShapeAsset("ArrowRight") },
58616
- { id: "arrow-left-right", label: "Arrow left right", value: "ArrowLeftRight", icon: inlineShapeAsset("ArrowLeftRight") },
58617
- { id: "arrow-block-left", label: "Arrow block left", value: "ArrowBlockLeft", icon: symbolIcon3("shape.arrowBlockLeft") },
58618
- { id: "arrow-block-right", label: "Arrow block right", value: "ArrowBlockRight", icon: symbolIcon3("shape.arrowBlockRight") },
58619
- { id: "cloud", label: "Cloud", value: "Cloud", icon: inlineShapeAsset("Cloud") },
58620
- { id: "cross", label: "Cross", value: "Cross", icon: inlineShapeAsset("Cross") },
58621
- { id: "cylinder", label: "Cylinder", value: "Cylinder", icon: inlineShapeAsset("Cylinder") },
58622
- { id: "hexagon", label: "Hexagon", value: "Hexagon", icon: inlineShapeAsset("Hexagon") },
58623
- { id: "octagon", label: "Octagon", value: "Octagon", icon: inlineShapeAsset("Octagon") },
58624
- { id: "parallelogram", label: "Parallelogram", value: "Parallelogram", icon: inlineShapeAsset("Parallelogram") },
58625
- { id: "reversed-parallelogram", label: "Reversed parallelogram", value: "ReversedParallelogram", icon: symbolIcon3("shape.reversedParallelogram") },
58626
- { id: "pentagon", label: "Pentagon", value: "Pentagon", icon: inlineShapeAsset("Pentagon") },
58627
- { id: "predefined-process", label: "Predefined process", value: "PredefinedProcess", icon: symbolIcon3("shape.predefinedProcess") },
58628
- { id: "speech-bubble", label: "Speech bubble", value: "SpeachBubble", icon: inlineShapeAsset("SpeachBubble") },
58629
- { id: "star", label: "Star", value: "Star", icon: inlineShapeAsset("Star") },
58630
- { id: "trapezoid", label: "Trapezoid", value: "Trapezoid", icon: inlineShapeAsset("Trapezoid") },
58631
- { id: "braces-left", label: "Braces left", value: "BracesLeft", icon: inlineShapeAsset("BracesLeft", "BracesLeft") },
58632
- { id: "braces-right", label: "Braces right", value: "BracesRight", icon: inlineShapeAsset("BracesRight", "BracesRight") },
58633
- { id: "bpmn-task", label: "BPMN task", value: "BPMN_Task", icon: symbolIcon3("shape.bpmn.task") },
58634
- { id: "bpmn-gateway", label: "BPMN gateway", value: "BPMN_Gateway", icon: symbolIcon3("shape.bpmn.gateway") },
58635
- { id: "bpmn-gateway-parallel", label: "BPMN gateway parallel", value: "BPMN_GatewayParallel", icon: symbolIcon3("shape.bpmn.gatewayParallel") },
58636
- { id: "bpmn-gateway-xor", label: "BPMN gateway XOR", value: "BPMN_GatewayXOR", icon: symbolIcon3("shape.bpmn.gatewayXor") },
58637
- { id: "bpmn-start-event", label: "BPMN start event", value: "BPMN_StartEvent", icon: symbolIcon3("shape.bpmn.startEvent") },
58638
- { id: "bpmn-start-event-non-interrupting", label: "BPMN start event non interrupting", value: "BPMN_StartEventNoneInterrupting", icon: symbolIcon3("shape.bpmn.startEventNoneInterrupting") },
58639
- { id: "bpmn-end-event", label: "BPMN end event", value: "BPMN_EndEvent", icon: symbolIcon3("shape.bpmn.endEvent") },
58640
- { id: "bpmn-intermediate-event", label: "BPMN intermediate event", value: "BPMN_IntermediateEvent", icon: symbolIcon3("shape.bpmn.intermediateEvent") },
58641
- { id: "bpmn-intermediate-event-none-interrupting", label: "BPMN intermediate event none interrupting", value: "BPMN_IntermediateEventNoneInterrupting", icon: symbolIcon3("shape.bpmn.intermediateEventNoneInterrupting") },
58642
- { id: "bpmn-data-object", label: "BPMN data object", value: "BPMN_DataObject", icon: symbolIcon3("shape.bpmn.dataObject") },
58643
- { id: "bpmn-data-store", label: "BPMN data store", value: "BPMN_DataStore", icon: symbolIcon3("shape.bpmn.dataStore") },
58644
- { id: "bpmn-participant", label: "BPMN participant", value: "BPMN_Participant", icon: symbolIcon3("shape.bpmn.participant") },
58645
- { id: "bpmn-transaction", label: "BPMN transaction", value: "BPMN_Transaction", icon: symbolIcon3("shape.bpmn.transaction") },
58646
- { id: "bpmn-event-subprocess", label: "BPMN event subprocess", value: "BPMN_EventSubprocess", icon: symbolIcon3("shape.bpmn.eventSubprocess") },
58647
- { id: "bpmn-group", label: "BPMN group", value: "BPMN_Group", icon: symbolIcon3("shape.bpmn.group") },
58648
- { id: "bpmn-annotation", label: "BPMN annotation", value: "BPMN_Annotation", icon: symbolIcon3("shape.bpmn.annotation") }
58748
+ { id: "reversed-triangle", label: "Reversed triangle", value: "ReversedTriangle", icon: symbolIcon3("shape.reversedTriangle"), family: "basicShapes" },
58749
+ { id: "arrow-left", label: "Arrow left", value: "ArrowLeft", icon: inlineShapeAsset("ArrowLeft"), family: "basicShapes" },
58750
+ { id: "arrow-right", label: "Arrow right", value: "ArrowRight", icon: inlineShapeAsset("ArrowRight"), family: "basicShapes" },
58751
+ { id: "arrow-left-right", label: "Arrow left right", value: "ArrowLeftRight", icon: inlineShapeAsset("ArrowLeftRight"), family: "basicShapes" },
58752
+ { id: "arrow-block-left", label: "Arrow block left", value: "ArrowBlockLeft", icon: symbolIcon3("shape.arrowBlockLeft"), family: "basicShapes" },
58753
+ { id: "arrow-block-right", label: "Arrow block right", value: "ArrowBlockRight", icon: symbolIcon3("shape.arrowBlockRight"), family: "basicShapes" },
58754
+ { id: "cloud", label: "Cloud", value: "Cloud", icon: inlineShapeAsset("Cloud"), family: "basicShapes" },
58755
+ { id: "cross", label: "Cross", value: "Cross", icon: inlineShapeAsset("Cross"), family: "basicShapes" },
58756
+ { id: "cylinder", label: "Cylinder", value: "Cylinder", icon: inlineShapeAsset("Cylinder"), family: "basicShapes" },
58757
+ { id: "hexagon", label: "Hexagon", value: "Hexagon", icon: inlineShapeAsset("Hexagon"), family: "basicShapes" },
58758
+ { id: "octagon", label: "Octagon", value: "Octagon", icon: inlineShapeAsset("Octagon"), family: "basicShapes" },
58759
+ { id: "parallelogram", label: "Parallelogram", value: "Parallelogram", icon: inlineShapeAsset("Parallelogram"), family: "basicShapes" },
58760
+ { id: "reversed-parallelogram", label: "Reversed parallelogram", value: "ReversedParallelogram", icon: symbolIcon3("shape.reversedParallelogram"), family: "basicShapes" },
58761
+ { id: "pentagon", label: "Pentagon", value: "Pentagon", icon: inlineShapeAsset("Pentagon"), family: "basicShapes" },
58762
+ { id: "predefined-process", label: "Predefined process", value: "PredefinedProcess", icon: symbolIcon3("shape.predefinedProcess"), family: "basicShapes" },
58763
+ { id: "speech-bubble", label: "Speech bubble", value: "SpeachBubble", icon: inlineShapeAsset("SpeachBubble"), family: "basicShapes" },
58764
+ { id: "star", label: "Star", value: "Star", icon: inlineShapeAsset("Star"), family: "basicShapes" },
58765
+ { id: "trapezoid", label: "Trapezoid", value: "Trapezoid", icon: inlineShapeAsset("Trapezoid"), family: "basicShapes" },
58766
+ { id: "braces-left", label: "Braces left", value: "BracesLeft", icon: inlineShapeAsset("BracesLeft", "BracesLeft"), family: "basicShapes" },
58767
+ { id: "braces-right", label: "Braces right", value: "BracesRight", icon: inlineShapeAsset("BracesRight", "BracesRight"), family: "basicShapes" },
58768
+ { id: "bpmn-task", label: "BPMN task", value: "BPMN_Task", icon: symbolIcon3("shape.bpmn.task"), family: "bpmn" },
58769
+ { id: "bpmn-gateway", label: "BPMN gateway", value: "BPMN_Gateway", icon: symbolIcon3("shape.bpmn.gateway"), family: "bpmn" },
58770
+ { id: "bpmn-gateway-parallel", label: "BPMN gateway parallel", value: "BPMN_GatewayParallel", icon: symbolIcon3("shape.bpmn.gatewayParallel"), family: "bpmn" },
58771
+ { id: "bpmn-gateway-xor", label: "BPMN gateway XOR", value: "BPMN_GatewayXOR", icon: symbolIcon3("shape.bpmn.gatewayXor"), family: "bpmn" },
58772
+ { id: "bpmn-start-event", label: "BPMN start event", value: "BPMN_StartEvent", icon: symbolIcon3("shape.bpmn.startEvent"), family: "bpmn" },
58773
+ { id: "bpmn-start-event-non-interrupting", label: "BPMN start event non interrupting", value: "BPMN_StartEventNoneInterrupting", icon: symbolIcon3("shape.bpmn.startEventNoneInterrupting"), family: "bpmn" },
58774
+ { id: "bpmn-end-event", label: "BPMN end event", value: "BPMN_EndEvent", icon: symbolIcon3("shape.bpmn.endEvent"), family: "bpmn" },
58775
+ { id: "bpmn-intermediate-event", label: "BPMN intermediate event", value: "BPMN_IntermediateEvent", icon: symbolIcon3("shape.bpmn.intermediateEvent"), family: "bpmn" },
58776
+ { id: "bpmn-intermediate-event-none-interrupting", label: "BPMN intermediate event none interrupting", value: "BPMN_IntermediateEventNoneInterrupting", icon: symbolIcon3("shape.bpmn.intermediateEventNoneInterrupting"), family: "bpmn" },
58777
+ { id: "bpmn-data-object", label: "BPMN data object", value: "BPMN_DataObject", icon: symbolIcon3("shape.bpmn.dataObject"), family: "bpmn" },
58778
+ { id: "bpmn-data-store", label: "BPMN data store", value: "BPMN_DataStore", icon: symbolIcon3("shape.bpmn.dataStore"), family: "bpmn" },
58779
+ { id: "bpmn-participant", label: "BPMN participant", value: "BPMN_Participant", icon: symbolIcon3("shape.bpmn.participant"), family: "bpmn" },
58780
+ { id: "bpmn-transaction", label: "BPMN transaction", value: "BPMN_Transaction", icon: symbolIcon3("shape.bpmn.transaction"), family: "bpmn" },
58781
+ { id: "bpmn-event-subprocess", label: "BPMN event subprocess", value: "BPMN_EventSubprocess", icon: symbolIcon3("shape.bpmn.eventSubprocess"), family: "bpmn" },
58782
+ { id: "bpmn-group", label: "BPMN group", value: "BPMN_Group", icon: symbolIcon3("shape.bpmn.group"), family: "bpmn" },
58783
+ { id: "bpmn-annotation", label: "BPMN annotation", value: "BPMN_Annotation", icon: symbolIcon3("shape.bpmn.annotation"), family: "bpmn" }
58649
58784
  ];
58650
58785
  var BORDER_STYLE_OPTIONS = [
58651
58786
  { id: "solid", label: "Solid", value: "solid", icon: symbolIcon3("stroke.solid") },
@@ -58660,6 +58795,12 @@ var shapeTypeControl = {
58660
58795
  editor: {
58661
58796
  kind: "enum-icon",
58662
58797
  options: BASIC_INLINE_OPTIONS,
58798
+ layout: "grid",
58799
+ quickOptions: {
58800
+ family: "basicShapes",
58801
+ maxVisible: 18,
58802
+ overflow: "show-more"
58803
+ },
58663
58804
  catalog: {
58664
58805
  kind: "catalog",
58665
58806
  label: "Shape catalog",
@@ -58678,6 +58819,10 @@ var fillControl = {
58678
58819
  swatch: { kind: "itemProperty", property: "backgroundColor" },
58679
58820
  note: "UI can render the current fill color as a swatch inside the icon."
58680
58821
  }),
58822
+ icon: styleFillIcon({
58823
+ swatch: { kind: "itemProperty", property: "backgroundColor" },
58824
+ note: "UI can render the current fill color as a swatch inside the icon."
58825
+ }),
58681
58826
  editor: {
58682
58827
  kind: "color",
58683
58828
  palette: COLOR_PALETTE2,
@@ -58754,6 +58899,20 @@ var shapeOverlay = {
58754
58899
  }
58755
58900
  ]
58756
58901
  }
58902
+ ],
58903
+ sections: [
58904
+ {
58905
+ id: "shapeTypeSection",
58906
+ label: "Type",
58907
+ icon: symbolIcon3("shape.type"),
58908
+ actionIds: ["shape.shapeType"]
58909
+ },
58910
+ {
58911
+ id: "shapeAppearanceSection",
58912
+ label: "Appearance",
58913
+ icon: symbolIcon3("shape.stroke"),
58914
+ actionIds: ["shape.fill", "shape.strokeStyle"]
58915
+ }
58757
58916
  ]
58758
58917
  };
58759
58918
  var addShapeToolOverlay = {
@@ -58763,8 +58922,7 @@ var addShapeToolOverlay = {
58763
58922
  createsItemType: "Shape",
58764
58923
  family: "shape",
58765
58924
  icon: {
58766
- kind: "symbol",
58767
- key: "tool.shape",
58925
+ ...overlaySymbolIcon("tool.shape"),
58768
58926
  state: {
58769
58927
  note: "UI may swap the top-level icon to the selected shape option when desired."
58770
58928
  }
@@ -58778,6 +58936,12 @@ var addShapeToolOverlay = {
58778
58936
  editor: {
58779
58937
  kind: "enum-icon",
58780
58938
  options: BASIC_INLINE_OPTIONS,
58939
+ layout: "grid",
58940
+ quickOptions: {
58941
+ family: "basicShapes",
58942
+ maxVisible: 18,
58943
+ overflow: "show-more"
58944
+ },
58781
58945
  catalog: {
58782
58946
  kind: "catalog",
58783
58947
  label: "Shape catalog",
@@ -58788,6 +58952,10 @@ var addShapeToolOverlay = {
58788
58952
  invoke: { kind: "toolProperty", property: "type" }
58789
58953
  }
58790
58954
  ]
58955
+ },
58956
+ launch: { kind: "activate-tool" },
58957
+ surface: {
58958
+ order: 7
58791
58959
  }
58792
58960
  };
58793
58961
 
@@ -63194,14 +63362,14 @@ var cardOverlay = {
63194
63362
  {
63195
63363
  id: "card.flip",
63196
63364
  label: "Flip card",
63197
- icon: { kind: "symbol", key: "card.flip" },
63365
+ icon: overlaySymbolIcon("card.flip"),
63198
63366
  target: "each",
63199
63367
  invoke: { kind: "customMethod", methodName: "toggleIsOpen" }
63200
63368
  },
63201
63369
  {
63202
63370
  id: "card.rotateCcw",
63203
63371
  label: "Rotate 90 counter clockwise",
63204
- icon: { kind: "symbol", key: "card.rotateCcw" },
63372
+ icon: overlaySymbolIcon("card.rotateCcw"),
63205
63373
  target: "each",
63206
63374
  invoke: {
63207
63375
  kind: "customMethod",
@@ -63212,7 +63380,7 @@ var cardOverlay = {
63212
63380
  {
63213
63381
  id: "card.rotateCw",
63214
63382
  label: "Rotate 90 clockwise",
63215
- icon: { kind: "symbol", key: "card.rotateCw" },
63383
+ icon: overlaySymbolIcon("card.rotateCw"),
63216
63384
  target: "each",
63217
63385
  invoke: {
63218
63386
  kind: "customMethod",
@@ -63466,28 +63634,28 @@ var deckOverlay = {
63466
63634
  {
63467
63635
  id: "deck.getTopCard",
63468
63636
  label: "Draw top card",
63469
- icon: { kind: "symbol", key: "deck.drawTop" },
63637
+ icon: overlaySymbolIcon("deck.drawTop"),
63470
63638
  target: "single",
63471
63639
  invoke: { kind: "customMethod", methodName: "getTopCard" }
63472
63640
  },
63473
63641
  {
63474
63642
  id: "deck.getBottomCard",
63475
63643
  label: "Draw bottom card",
63476
- icon: { kind: "symbol", key: "deck.drawBottom" },
63644
+ icon: overlaySymbolIcon("deck.drawBottom"),
63477
63645
  target: "single",
63478
63646
  invoke: { kind: "customMethod", methodName: "getBottomCard" }
63479
63647
  },
63480
63648
  {
63481
63649
  id: "deck.getRandomCard",
63482
63650
  label: "Draw random card",
63483
- icon: { kind: "symbol", key: "deck.drawRandom" },
63651
+ icon: overlaySymbolIcon("deck.drawRandom"),
63484
63652
  target: "single",
63485
63653
  invoke: { kind: "customMethod", methodName: "getRandomCard" }
63486
63654
  },
63487
63655
  {
63488
63656
  id: "deck.getCards",
63489
63657
  label: "Draw cards",
63490
- icon: { kind: "symbol", key: "deck.drawMany" },
63658
+ icon: overlaySymbolIcon("deck.drawMany"),
63491
63659
  target: "single",
63492
63660
  controls: [
63493
63661
  {
@@ -63509,14 +63677,14 @@ var deckOverlay = {
63509
63677
  {
63510
63678
  id: "deck.shuffle",
63511
63679
  label: "Shuffle",
63512
- icon: { kind: "symbol", key: "deck.shuffle" },
63680
+ icon: overlaySymbolIcon("deck.shuffle"),
63513
63681
  target: "single",
63514
63682
  invoke: { kind: "customMethod", methodName: "shuffleDeck" }
63515
63683
  },
63516
63684
  {
63517
63685
  id: "deck.flip",
63518
63686
  label: "Flip deck",
63519
- icon: { kind: "symbol", key: "deck.flip" },
63687
+ icon: overlaySymbolIcon("deck.flip"),
63520
63688
  target: "single",
63521
63689
  invoke: { kind: "customMethod", methodName: "flipDeck" }
63522
63690
  }
@@ -63525,7 +63693,7 @@ var deckOverlay = {
63525
63693
  var createDeckSelectionAction = {
63526
63694
  id: "deck.createFromSelection",
63527
63695
  label: "Create deck",
63528
- icon: { kind: "symbol", key: "deck.createFromSelection" },
63696
+ icon: overlaySymbolIcon("deck.createFromSelection"),
63529
63697
  description: "Stacks selected cards into a new deck, or merges selected cards and decks into one deck.",
63530
63698
  invoke: { kind: "selectionMethod", methodName: "createDeck" },
63531
63699
  isAvailable: (items) => {
@@ -64094,14 +64262,14 @@ var diceOverlay = {
64094
64262
  {
64095
64263
  id: "dice.throw",
64096
64264
  label: "Throw dice",
64097
- icon: { kind: "symbol", key: "dice.throw" },
64265
+ icon: overlaySymbolIcon("dice.throw"),
64098
64266
  target: "each",
64099
64267
  invoke: { kind: "customMethod", methodName: "throwDice" }
64100
64268
  },
64101
64269
  {
64102
64270
  id: "dice.range",
64103
64271
  label: "Range",
64104
- icon: { kind: "symbol", key: "dice.range" },
64272
+ icon: overlaySymbolIcon("dice.range"),
64105
64273
  target: "each",
64106
64274
  controls: [
64107
64275
  {
@@ -64137,6 +64305,14 @@ var diceOverlay = {
64137
64305
  }
64138
64306
  ]
64139
64307
  }
64308
+ ],
64309
+ sections: [
64310
+ {
64311
+ id: "diceActions",
64312
+ label: "Dice",
64313
+ icon: overlaySymbolIcon("dice.throw"),
64314
+ actionIds: ["dice.throw", "dice.range", "dice.fill"]
64315
+ }
64140
64316
  ]
64141
64317
  };
64142
64318
  var addDiceToolOverlay = {
@@ -64145,7 +64321,19 @@ var addDiceToolOverlay = {
64145
64321
  kind: "create",
64146
64322
  createsItemType: "Dice",
64147
64323
  family: "game",
64148
- icon: { kind: "symbol", key: "tool.dice" }
64324
+ icon: overlaySymbolIcon("tool.dice"),
64325
+ launch: { kind: "activate-tool" },
64326
+ surface: {
64327
+ order: 1,
64328
+ group: {
64329
+ id: "gameItems",
64330
+ label: "Game items",
64331
+ icon: overlaySymbolIcon("tool.dice"),
64332
+ order: 1,
64333
+ behavior: "open-panel"
64334
+ },
64335
+ relatedToolNames: ["AddScreen", "AddPouch"]
64336
+ }
64149
64337
  };
64150
64338
 
64151
64339
  // src/Items/Dice/Dice.ts
@@ -64493,8 +64681,7 @@ var screenOverlay = {
64493
64681
  id: "screen.background",
64494
64682
  label: "Background",
64495
64683
  icon: {
64496
- kind: "symbol",
64497
- key: "screen.background",
64684
+ ...overlaySymbolIcon("screen.background"),
64498
64685
  state: { swatch: { kind: "itemProperty", property: "backgroundColor" } }
64499
64686
  },
64500
64687
  target: "each",
@@ -64511,6 +64698,97 @@ var screenOverlay = {
64511
64698
  invoke: { kind: "setProperty", property: "backgroundColor" }
64512
64699
  }
64513
64700
  ]
64701
+ },
64702
+ {
64703
+ id: "screen.stroke",
64704
+ label: "Stroke",
64705
+ icon: {
64706
+ ...overlaySymbolIcon("shape.stroke"),
64707
+ state: { swatch: { kind: "itemProperty", property: "borderColor" } }
64708
+ },
64709
+ target: "each",
64710
+ controls: [
64711
+ {
64712
+ id: "borderColor",
64713
+ label: "Border color",
64714
+ valueSource: { kind: "itemProperty", property: "borderColor" },
64715
+ editor: {
64716
+ kind: "color",
64717
+ palette: ["#000000", "#FFFFFF", "#888888", "transparent"],
64718
+ allowTransparent: true,
64719
+ presentation: "square"
64720
+ },
64721
+ invoke: { kind: "setProperty", property: "borderColor" }
64722
+ },
64723
+ {
64724
+ id: "borderWidth",
64725
+ label: "Border width",
64726
+ valueSource: { kind: "itemProperty", property: "borderWidth" },
64727
+ editor: {
64728
+ kind: "number-stepper",
64729
+ min: 0,
64730
+ max: 8,
64731
+ step: 1,
64732
+ presets: [0, 1, 2, 4],
64733
+ unit: "px"
64734
+ },
64735
+ invoke: { kind: "setProperty", property: "borderWidth" }
64736
+ }
64737
+ ],
64738
+ groups: [
64739
+ {
64740
+ id: "screenStrokeStyle",
64741
+ label: "Stroke",
64742
+ icon: overlaySymbolIcon("shape.stroke"),
64743
+ controlIds: ["borderColor", "borderWidth"]
64744
+ }
64745
+ ]
64746
+ },
64747
+ {
64748
+ id: "screen.backgroundImage",
64749
+ label: "Background image",
64750
+ icon: overlaySymbolIcon("screen.backgroundImage"),
64751
+ target: "each",
64752
+ when: {
64753
+ kind: "falsy",
64754
+ source: { kind: "itemProperty", property: "backgroundUrl" }
64755
+ },
64756
+ controls: [
64757
+ {
64758
+ id: "backgroundUrl",
64759
+ label: "Background image",
64760
+ valueSource: { kind: "itemProperty", property: "backgroundUrl" },
64761
+ editor: {
64762
+ kind: "asset-upload",
64763
+ mode: "single",
64764
+ accept: ["image/*"]
64765
+ },
64766
+ invoke: { kind: "setProperty", property: "backgroundUrl" }
64767
+ }
64768
+ ]
64769
+ },
64770
+ {
64771
+ id: "screen.removeBackgroundImage",
64772
+ label: "Remove background image",
64773
+ icon: overlaySymbolIcon("screen.backgroundImage.remove"),
64774
+ target: "each",
64775
+ when: {
64776
+ kind: "truthy",
64777
+ source: { kind: "itemProperty", property: "backgroundUrl" }
64778
+ },
64779
+ invoke: {
64780
+ kind: "customMethod",
64781
+ methodName: "setBackgroundUrl",
64782
+ args: [{ kind: "static", value: "" }]
64783
+ }
64784
+ }
64785
+ ],
64786
+ sections: [
64787
+ {
64788
+ id: "screenAppearance",
64789
+ label: "Appearance",
64790
+ icon: overlaySymbolIcon("screen.background"),
64791
+ actionIds: ["screen.background", "screen.stroke", "screen.backgroundImage", "screen.removeBackgroundImage"]
64514
64792
  }
64515
64793
  ]
64516
64794
  };
@@ -64520,7 +64798,19 @@ var addScreenToolOverlay = {
64520
64798
  kind: "create",
64521
64799
  createsItemType: "Screen",
64522
64800
  family: "container",
64523
- icon: { kind: "symbol", key: "tool.screen" }
64801
+ icon: overlaySymbolIcon("tool.screen"),
64802
+ launch: { kind: "activate-tool" },
64803
+ surface: {
64804
+ order: 2,
64805
+ group: {
64806
+ id: "gameItems",
64807
+ label: "Game items",
64808
+ icon: overlaySymbolIcon("tool.dice"),
64809
+ order: 1,
64810
+ behavior: "open-panel"
64811
+ },
64812
+ relatedToolNames: ["AddDice", "AddPouch"]
64813
+ }
64524
64814
  };
64525
64815
  var addPouchToolOverlay = {
64526
64816
  toolName: "AddPouch",
@@ -64528,7 +64818,19 @@ var addPouchToolOverlay = {
64528
64818
  kind: "create",
64529
64819
  createsItemType: "Screen",
64530
64820
  family: "container",
64531
- icon: { kind: "symbol", key: "tool.pouch" }
64821
+ icon: overlaySymbolIcon("tool.pouch"),
64822
+ launch: { kind: "activate-tool" },
64823
+ surface: {
64824
+ order: 3,
64825
+ group: {
64826
+ id: "gameItems",
64827
+ label: "Game items",
64828
+ icon: overlaySymbolIcon("tool.dice"),
64829
+ order: 1,
64830
+ behavior: "open-panel"
64831
+ },
64832
+ relatedToolNames: ["AddDice", "AddScreen"]
64833
+ }
64532
64834
  };
64533
64835
 
64534
64836
  // src/Items/Screen/Screen.ts
@@ -72488,8 +72790,7 @@ var addDrawingToolOverlay = {
72488
72790
  family: "drawing",
72489
72791
  createsItemType: "Drawing",
72490
72792
  icon: {
72491
- kind: "symbol",
72492
- key: "tool.pen",
72793
+ ...overlaySymbolIcon("tool.pen"),
72493
72794
  state: {
72494
72795
  swatch: { kind: "toolProperty", property: "strokeColor" },
72495
72796
  note: "UI can show the pending pen color in the icon."
@@ -72501,10 +72802,22 @@ var addDrawingToolOverlay = {
72501
72802
  {
72502
72803
  id: "drawingDefaults",
72503
72804
  label: "Pen defaults",
72504
- icon: { kind: "symbol", key: "tool.pen" },
72805
+ icon: overlaySymbolIcon("tool.pen"),
72505
72806
  controlIds: strokeControls2.map((control) => control.id)
72506
72807
  }
72507
72808
  ]
72809
+ },
72810
+ launch: { kind: "activate-tool" },
72811
+ surface: {
72812
+ order: 1,
72813
+ group: {
72814
+ id: "drawingTools",
72815
+ label: "Drawing",
72816
+ icon: overlaySymbolIcon("tool.pen"),
72817
+ order: 5,
72818
+ behavior: "activate-last-used"
72819
+ },
72820
+ relatedToolNames: ["AddHighlighter", "Eraser"]
72508
72821
  }
72509
72822
  };
72510
72823
  var addHighlighterToolOverlay = {
@@ -72514,8 +72827,7 @@ var addHighlighterToolOverlay = {
72514
72827
  family: "drawing",
72515
72828
  createsItemType: "Drawing",
72516
72829
  icon: {
72517
- kind: "symbol",
72518
- key: "tool.highlighter",
72830
+ ...overlaySymbolIcon("tool.highlighter"),
72519
72831
  state: {
72520
72832
  swatch: { kind: "toolProperty", property: "strokeColor" },
72521
72833
  note: "UI can show the pending highlighter color in the icon."
@@ -72527,10 +72839,22 @@ var addHighlighterToolOverlay = {
72527
72839
  {
72528
72840
  id: "highlighterDefaults",
72529
72841
  label: "Highlighter defaults",
72530
- icon: { kind: "symbol", key: "tool.highlighter" },
72842
+ icon: overlaySymbolIcon("tool.highlighter"),
72531
72843
  controlIds: strokeControls2.map((control) => control.id)
72532
72844
  }
72533
72845
  ]
72846
+ },
72847
+ launch: { kind: "activate-tool" },
72848
+ surface: {
72849
+ order: 2,
72850
+ group: {
72851
+ id: "drawingTools",
72852
+ label: "Drawing",
72853
+ icon: overlaySymbolIcon("tool.pen"),
72854
+ order: 5,
72855
+ behavior: "activate-last-used"
72856
+ },
72857
+ relatedToolNames: ["AddDrawing", "Eraser"]
72534
72858
  }
72535
72859
  };
72536
72860
  var eraserToolOverlay = {
@@ -72538,7 +72862,7 @@ var eraserToolOverlay = {
72538
72862
  label: "Eraser",
72539
72863
  kind: "mode",
72540
72864
  family: "drawing",
72541
- icon: { kind: "symbol", key: "tool.eraser" },
72865
+ icon: overlaySymbolIcon("tool.eraser"),
72542
72866
  defaults: {
72543
72867
  controls: [
72544
72868
  {
@@ -72555,6 +72879,18 @@ var eraserToolOverlay = {
72555
72879
  invoke: { kind: "toolProperty", property: "strokeWidth" }
72556
72880
  }
72557
72881
  ]
72882
+ },
72883
+ launch: { kind: "activate-tool" },
72884
+ surface: {
72885
+ order: 3,
72886
+ group: {
72887
+ id: "drawingTools",
72888
+ label: "Drawing",
72889
+ icon: overlaySymbolIcon("tool.pen"),
72890
+ order: 5,
72891
+ behavior: "activate-last-used"
72892
+ },
72893
+ relatedToolNames: ["AddDrawing", "AddHighlighter"]
72558
72894
  }
72559
72895
  };
72560
72896
 
@@ -72755,7 +73091,7 @@ var frameTypeOptions = Object.keys(Frames).map((frameType) => ({
72755
73091
  id: frameType,
72756
73092
  label: frameType === "Custom" ? "Custom" : Frames[frameType].name,
72757
73093
  value: frameType,
72758
- icon: { kind: "symbol", key: `frame.${frameType}` }
73094
+ icon: overlaySymbolIcon(`frame.${frameType}`)
72759
73095
  }));
72760
73096
  var addFrameToolOverlay = {
72761
73097
  toolName: "AddFrame",
@@ -72763,7 +73099,7 @@ var addFrameToolOverlay = {
72763
73099
  kind: "create",
72764
73100
  createsItemType: "Frame",
72765
73101
  family: "frame",
72766
- icon: { kind: "symbol", key: "tool.frame" },
73102
+ icon: overlaySymbolIcon("tool.frame"),
72767
73103
  defaults: {
72768
73104
  controls: [
72769
73105
  {
@@ -72777,6 +73113,10 @@ var addFrameToolOverlay = {
72777
73113
  invoke: { kind: "toolProperty", property: "shape" }
72778
73114
  }
72779
73115
  ]
73116
+ },
73117
+ launch: { kind: "activate-tool" },
73118
+ surface: {
73119
+ order: 10
72780
73120
  }
72781
73121
  };
72782
73122
 
@@ -73141,8 +73481,7 @@ var addStickerToolOverlay = {
73141
73481
  createsItemType: "Sticker",
73142
73482
  family: "sticker",
73143
73483
  icon: {
73144
- kind: "symbol",
73145
- key: "tool.sticker",
73484
+ ...overlaySymbolIcon("tool.sticker"),
73146
73485
  state: {
73147
73486
  swatch: { kind: "toolProperty", property: "backgroundColor" }
73148
73487
  }
@@ -73153,10 +73492,14 @@ var addStickerToolOverlay = {
73153
73492
  id: "stickerBackgroundColor",
73154
73493
  label: "Color",
73155
73494
  valueSource: { kind: "toolProperty", property: "backgroundColor" },
73156
- editor: { kind: "color", palette: STICKER_COLORS },
73495
+ editor: { kind: "color", palette: STICKER_COLORS, presentation: "sticker" },
73157
73496
  invoke: { kind: "toolProperty", property: "backgroundColor" }
73158
73497
  }
73159
73498
  ]
73499
+ },
73500
+ launch: { kind: "activate-tool" },
73501
+ surface: {
73502
+ order: 9
73160
73503
  }
73161
73504
  };
73162
73505