pilotswarm 0.5.65 → 0.5.67

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/package.json +2 -2
  2. package/ui/core/src/controller.js +47 -24
  3. package/ui/core/src/index.js +1 -0
  4. package/ui/core/src/reducer.js +20 -5
  5. package/ui/core/src/selectors.js +154 -9
  6. package/ui/core/src/session-search.js +151 -0
  7. package/ui/react/src/web-app.js +114 -7
  8. package/web/dist/assets/{abnfDiagram-VRR7QNED-gIPHF2gV.js → abnfDiagram-VRR7QNED-rCdnr4Zk.js} +1 -1
  9. package/web/dist/assets/{arc-DMW_q5Ml.js → arc-DeoxxJ2S.js} +1 -1
  10. package/web/dist/assets/{architectureDiagram-ZJ3FMSHR-DAKsrxcB.js → architectureDiagram-ZJ3FMSHR-DAz2X6IV.js} +1 -1
  11. package/web/dist/assets/{blockDiagram-677ZJIJ3-BUjSLpP3.js → blockDiagram-677ZJIJ3-DPsxUKQJ.js} +1 -1
  12. package/web/dist/assets/{c4Diagram-LMCZKHZV-Dw2nPoes.js → c4Diagram-LMCZKHZV-Cl8IpoAZ.js} +1 -1
  13. package/web/dist/assets/channel-DCTjhzIq.js +1 -0
  14. package/web/dist/assets/{chunk-2Q5K7J3B-BAL28Rv0.js → chunk-2Q5K7J3B-WHxPHUqg.js} +1 -1
  15. package/web/dist/assets/{chunk-32BRIVSS-DDlt9K8s.js → chunk-32BRIVSS-9S1suaZM.js} +1 -1
  16. package/web/dist/assets/{chunk-5VM5RSS4-BLQGJGoP.js → chunk-5VM5RSS4-DmBwY4rK.js} +1 -1
  17. package/web/dist/assets/{chunk-EX3LRPZG-XFMb3HRy.js → chunk-EX3LRPZG-BbKMT5Il.js} +1 -1
  18. package/web/dist/assets/{chunk-JWPE2WC7-DWnKTQ72.js → chunk-JWPE2WC7-B9Qns4SI.js} +1 -1
  19. package/web/dist/assets/{chunk-MOJQB5TN-MltzhnwP.js → chunk-MOJQB5TN-G6hkDffb.js} +1 -1
  20. package/web/dist/assets/{chunk-RYQCIY6F-Ce3q0-mJ.js → chunk-RYQCIY6F-Ca38LebY.js} +1 -1
  21. package/web/dist/assets/{chunk-V7JOEXUC-ThXLYY88.js → chunk-V7JOEXUC-DPeEQDsB.js} +1 -1
  22. package/web/dist/assets/{chunk-VR4S4FIN-DbhAykiW.js → chunk-VR4S4FIN-DYuh7YGE.js} +1 -1
  23. package/web/dist/assets/{chunk-XXDRQBXY-BpkNB0mD.js → chunk-XXDRQBXY-BDRBkhU_.js} +1 -1
  24. package/web/dist/assets/classDiagram-OUVF2IWQ-Cfa6ZtJR.js +1 -0
  25. package/web/dist/assets/classDiagram-v2-EOCWNBFH-Cfa6ZtJR.js +1 -0
  26. package/web/dist/assets/{cose-bilkent-JH36ORCC-rctqAPvj.js → cose-bilkent-JH36ORCC-CpHdEFyS.js} +1 -1
  27. package/web/dist/assets/{cynefin-VYW2F7L2-Dg1cltg6.js → cynefin-VYW2F7L2-DRYxiNM0.js} +1 -1
  28. package/web/dist/assets/{cynefinDiagram-TSTJHNR4-Ci23Sv4Z.js → cynefinDiagram-TSTJHNR4-B8fSzWxH.js} +1 -1
  29. package/web/dist/assets/{dagre-VKFMJZFB-BpWTGhpv.js → dagre-VKFMJZFB-CnJyU6YF.js} +1 -1
  30. package/web/dist/assets/{diagram-FQU43EPY-B69JpiAe.js → diagram-FQU43EPY-BS2_uGW0.js} +1 -1
  31. package/web/dist/assets/{diagram-G47NLZAW-BHMk1TOO.js → diagram-G47NLZAW-DjKog-bE.js} +1 -1
  32. package/web/dist/assets/{diagram-NH7WQ7WH-CtvZIIsk.js → diagram-NH7WQ7WH-BaWtvMDL.js} +1 -1
  33. package/web/dist/assets/{diagram-OA4YK3LP-BFvKh800.js → diagram-OA4YK3LP-Z11ytyEX.js} +1 -1
  34. package/web/dist/assets/{diagram-WEI45ONY-CgB8sWPe.js → diagram-WEI45ONY-DiiH4Od8.js} +1 -1
  35. package/web/dist/assets/{ebnfDiagram-CCIWWBDH-DyqPNydM.js → ebnfDiagram-CCIWWBDH-xtE5CNkB.js} +1 -1
  36. package/web/dist/assets/{erDiagram-Q63AITRT-CwpvZQ3Q.js → erDiagram-Q63AITRT-Dj5wjLbd.js} +1 -1
  37. package/web/dist/assets/{flowDiagram-23GEKE2U-EBKSKxfC.js → flowDiagram-23GEKE2U-O_1XH_-x.js} +1 -1
  38. package/web/dist/assets/{ganttDiagram-NO4QXBWP-q5tMPAuC.js → ganttDiagram-NO4QXBWP-AuETTA_E.js} +1 -1
  39. package/web/dist/assets/{gitGraphDiagram-IHSO6WYX-DCRbi4KE.js → gitGraphDiagram-IHSO6WYX-gTS7mo_B.js} +1 -1
  40. package/web/dist/assets/{index-CO-D6M4t.js → index-29eY0ERe.js} +2 -2
  41. package/web/dist/assets/index-D4OiytLj.css +1 -0
  42. package/web/dist/assets/{infoDiagram-FWYZ7A6U-Bex5pSIX.js → infoDiagram-FWYZ7A6U-Fhv6oMjM.js} +1 -1
  43. package/web/dist/assets/{ishikawaDiagram-FXEZZL3T-Dj0li_TY.js → ishikawaDiagram-FXEZZL3T-BIWy0CgN.js} +1 -1
  44. package/web/dist/assets/{journeyDiagram-5HDEW3XC-BtEGEeVr.js → journeyDiagram-5HDEW3XC-0XQ9xC-A.js} +1 -1
  45. package/web/dist/assets/{kanban-definition-HUTT4EX6-BTFfZvYt.js → kanban-definition-HUTT4EX6-ChyhUUfr.js} +1 -1
  46. package/web/dist/assets/{linear-C3SQCsip.js → linear-CFXBfAtq.js} +1 -1
  47. package/web/dist/assets/{mermaid.core-DALDJDu8.js → mermaid.core-BPXpLhrQ.js} +4 -4
  48. package/web/dist/assets/{mindmap-definition-LN4V7U3C-BZf3uw0u.js → mindmap-definition-LN4V7U3C-HEv8CBmG.js} +1 -1
  49. package/web/dist/assets/{papaparse.min-Bh9MZ-fk.js → papaparse.min-zNHCLHbr.js} +1 -1
  50. package/web/dist/assets/{pegDiagram-2B236MQR-PuOleiMg.js → pegDiagram-2B236MQR-Ciaic9kL.js} +1 -1
  51. package/web/dist/assets/{pieDiagram-ENE6RG2P-CcFORUaW.js → pieDiagram-ENE6RG2P-CPBwQT7c.js} +1 -1
  52. package/web/dist/assets/pilotswarm-t7ZSHp3x.js +109 -0
  53. package/web/dist/assets/{quadrantDiagram-ABIIQ3AL-CEm0mp4y.js → quadrantDiagram-ABIIQ3AL-Bn1GbLE3.js} +1 -1
  54. package/web/dist/assets/{railroadDiagram-RFXS5EU6-DeH-uX0_.js → railroadDiagram-RFXS5EU6-DgbTuh6h.js} +1 -1
  55. package/web/dist/assets/{requirementDiagram-TGXJPOKE-CMbJVMc1.js → requirementDiagram-TGXJPOKE-C25kl_pE.js} +1 -1
  56. package/web/dist/assets/{sankeyDiagram-HTMAVEWB-C9gL5w_b.js → sankeyDiagram-HTMAVEWB-IXSFhGpB.js} +1 -1
  57. package/web/dist/assets/{sequenceDiagram-DBY2YBRQ-BUo8TT74.js → sequenceDiagram-DBY2YBRQ-BkLHDo50.js} +1 -1
  58. package/web/dist/assets/{sizeCapture-X5ZJPWSS-C5lqG0ei.js → sizeCapture-X5ZJPWSS-DYnL5G7X.js} +1 -1
  59. package/web/dist/assets/{stateDiagram-2N3HPSRC-DyeISrEU.js → stateDiagram-2N3HPSRC-Cyn7hAE7.js} +1 -1
  60. package/web/dist/assets/stateDiagram-v2-6OUMAXLB-CrXU-8_S.js +1 -0
  61. package/web/dist/assets/{swimlanes-5IMT3BWC-DawuBk_a.js → swimlanes-5IMT3BWC-CZ6EgHci.js} +2 -2
  62. package/web/dist/assets/swimlanesDiagram-G3AALYLV-QcV2Vg4L.js +8 -0
  63. package/web/dist/assets/{timeline-definition-FHXFAJF6-BZJ2YJcm.js → timeline-definition-FHXFAJF6-uvqzr_O1.js} +1 -1
  64. package/web/dist/assets/{vennDiagram-L72KCM5P-BMXBVCfe.js → vennDiagram-L72KCM5P-1ca2fSuA.js} +1 -1
  65. package/web/dist/assets/{wardleyDiagram-EHGQE667-DWedKsrQ.js → wardleyDiagram-EHGQE667-DLDKHVSh.js} +1 -1
  66. package/web/dist/assets/{xychartDiagram-FW5EYKEG--XdfYceC.js → xychartDiagram-FW5EYKEG-BcU1gt-_.js} +1 -1
  67. package/web/dist/index.html +3 -3
  68. package/web/dist/assets/channel-CcOa1LtY.js +0 -1
  69. package/web/dist/assets/classDiagram-OUVF2IWQ-B2VhHRSV.js +0 -1
  70. package/web/dist/assets/classDiagram-v2-EOCWNBFH-B2VhHRSV.js +0 -1
  71. package/web/dist/assets/index-uhc851H3.css +0 -1
  72. package/web/dist/assets/pilotswarm-B9rLtXpI.js +0 -109
  73. package/web/dist/assets/stateDiagram-v2-6OUMAXLB-5FZbaloZ.js +0 -1
  74. package/web/dist/assets/swimlanesDiagram-G3AALYLV-DL8PgtmM.js +0 -8
@@ -5053,6 +5053,71 @@ function useAxisLockedPan(ref, enabled = true) {
5053
5053
  }, [ref, enabled]);
5054
5054
  }
5055
5055
 
5056
+ function SessionSearchControl({ query = "", onQuery, matchCount = 0, mobile = false, listRef = null }) {
5057
+ const [mobileOpen, setMobileOpen] = React.useState(Boolean(query));
5058
+ const inputRef = React.useRef(null);
5059
+ React.useEffect(() => {
5060
+ if (query) setMobileOpen(true);
5061
+ }, [query]);
5062
+ const open = () => {
5063
+ setMobileOpen(true);
5064
+ requestAnimationFrame(() => inputRef.current?.focus({ preventScroll: true }));
5065
+ };
5066
+ const closeOrClear = () => {
5067
+ if (query) onQuery?.("");
5068
+ else setMobileOpen(false);
5069
+ };
5070
+ const resultLabel = query
5071
+ ? `${matchCount} ${matchCount === 1 ? "match" : "matches"}`
5072
+ : "";
5073
+ return React.createElement("div", {
5074
+ className: `ps-session-search${mobileOpen ? " is-open" : ""}`,
5075
+ "data-session-search": "true",
5076
+ },
5077
+ mobile ? React.createElement("button", {
5078
+ type: "button",
5079
+ className: "ps-session-search-trigger",
5080
+ "aria-label": "Search sessions",
5081
+ title: "Search sessions",
5082
+ onClick: open,
5083
+ }, React.createElement(SearchGlyph)) : null,
5084
+ React.createElement("div", { className: "ps-session-search-fields" },
5085
+ React.createElement(SearchGlyph),
5086
+ React.createElement("input", {
5087
+ ref: inputRef,
5088
+ type: "text",
5089
+ inputMode: "search",
5090
+ "aria-label": "Find a session",
5091
+ placeholder: "Find a session…",
5092
+ value: query,
5093
+ onChange: (event) => onQuery?.(event.target.value),
5094
+ onKeyDown: (event) => {
5095
+ if (event.key === "Escape") {
5096
+ event.preventDefault();
5097
+ closeOrClear();
5098
+ return;
5099
+ }
5100
+ if (event.key !== "ArrowDown") return;
5101
+ const first = listRef?.current?.querySelector?.(".ps-session-list-button");
5102
+ if (!first) return;
5103
+ event.preventDefault();
5104
+ first.focus({ preventScroll: true });
5105
+ },
5106
+ }),
5107
+ resultLabel ? React.createElement("span", {
5108
+ className: "ps-session-search-count",
5109
+ role: "status",
5110
+ "aria-live": "polite",
5111
+ }, resultLabel) : null,
5112
+ (query || mobile) ? React.createElement("button", {
5113
+ type: "button",
5114
+ className: "ps-session-search-clear",
5115
+ "aria-label": query ? "Clear session search" : "Close session search",
5116
+ title: query ? "Clear" : "Close",
5117
+ onClick: closeOrClear,
5118
+ }, "×") : null));
5119
+ }
5120
+
5056
5121
  function SessionPane({ controller, actions = null, panelClassName = "", structuredRows = false, showDetailBox = null, selection = null, actionsOnly = false, actionsHost = null, onAction = null, onDialogChange = null }) {
5057
5122
  // Mobile keeps its inline detail line and normally gets no detail box — a
5058
5123
  // reserved footer would eat a meaningful slice of a phone screen. The
@@ -5138,6 +5203,32 @@ function SessionPane({ controller, actions = null, panelClassName = "", structur
5138
5203
  }), [viewState.activeSessionId, viewState.auth, viewState.branding, viewState.budgetPaused, viewState.canvasBySessionId, viewState.canvasPrefs, viewState.connectionMode, viewState.filterQuery, viewState.listDeselected, viewState.ownerFilter, viewState.pinnedIds, viewState.manualOrder, viewState.selectedIds, viewState.selectMode, viewState.sessionsById, viewState.sessionsFlat]);
5139
5204
  // Hold the previous rows when a poll produced identical output.
5140
5205
  const rows = useStableValue(computedRows);
5206
+ const searchScrollRef = React.useRef({ top: 0, left: 0, restore: false });
5207
+ const searchEnvRef = React.useRef(null);
5208
+ searchEnvRef.current = {
5209
+ query: viewState.filterQuery,
5210
+ setQuery: selection ? selection.onQuery : (value) => controller.setSessionFilterQuery(value),
5211
+ };
5212
+ const setSearchQuery = React.useCallback((value) => {
5213
+ const next = String(value || "");
5214
+ const current = String(searchEnvRef.current?.query || "");
5215
+ const list = sessionListRef.current;
5216
+ if (!current.trim() && next.trim() && list) {
5217
+ searchScrollRef.current = { top: list.scrollTop, left: list.scrollLeft, restore: false };
5218
+ } else if (current.trim() && !next.trim()) {
5219
+ searchScrollRef.current.restore = true;
5220
+ }
5221
+ searchEnvRef.current?.setQuery?.(next);
5222
+ }, []);
5223
+ React.useLayoutEffect(() => {
5224
+ if (viewState.filterQuery || !searchScrollRef.current.restore || !sessionListRef.current) return;
5225
+ sessionListRef.current.scrollTop = searchScrollRef.current.top;
5226
+ sessionListRef.current.scrollLeft = searchScrollRef.current.left;
5227
+ searchScrollRef.current.restore = false;
5228
+ }, [rows, viewState.filterQuery]);
5229
+ const searchMatchCount = viewState.filterQuery
5230
+ ? rows.reduce((count, row) => count + (row.searchMatch ? 1 : 0), 0)
5231
+ : 0;
5141
5232
  const activeSession = viewState.activeSessionId
5142
5233
  ? viewState.sessionsById[viewState.activeSessionId] || null
5143
5234
  : null;
@@ -5845,7 +5936,6 @@ function SessionPane({ controller, actions = null, panelClassName = "", structur
5845
5936
  }) : null, actions) : panelActions,
5846
5937
  className: combinedPanelClassName,
5847
5938
  },
5848
- selection ? React.createElement("input", { className: "ps-modal-input", "aria-label": "Find a session", placeholder: "Find a session…", value: selection.query || "", onChange: e => selection.onQuery?.(e.target.value) }) : null,
5849
5939
  React.createElement("div", {
5850
5940
  ref: sessionListRef,
5851
5941
  onKeyDown: selection ? event => {
@@ -5873,7 +5963,7 @@ function SessionPane({ controller, actions = null, panelClassName = "", structur
5873
5963
 
5874
5964
  rows.length === 0
5875
5965
  ? React.createElement("div", { className: "ps-empty-state" }, viewState.filterQuery
5876
- ? `No sessions matched "@@${viewState.filterQuery}".`
5966
+ ? `No sessions matched "${viewState.filterQuery}".`
5877
5967
  : "No sessions yet.")
5878
5968
  : rows.map((row) => React.createElement(SessionListRow, {
5879
5969
  key: row.sessionId,
@@ -5887,6 +5977,13 @@ function SessionPane({ controller, actions = null, panelClassName = "", structur
5887
5977
  // touch hijacks the finger that should be scrolling the list.
5888
5978
  drag: selection || touchInput ? null : dragHandlers,
5889
5979
  }))),
5980
+ React.createElement(SessionSearchControl, {
5981
+ query: viewState.filterQuery,
5982
+ onQuery: setSearchQuery,
5983
+ matchCount: searchMatchCount,
5984
+ mobile: isMobilePane,
5985
+ listRef: sessionListRef,
5986
+ }),
5890
5987
  (showDetailBox === null ? !isMobilePane : showDetailBox)
5891
5988
  ? React.createElement(SessionDetailBox, {
5892
5989
  session: activeSession,
@@ -5994,6 +6091,12 @@ function FunnelGlyph() {
5994
6091
  React.createElement("path", { d: "M21 4H3l7.2 8.5V19l3.6 2v-8.5L21 4z" }));
5995
6092
  }
5996
6093
 
6094
+ function SearchGlyph() {
6095
+ return React.createElement(Glyph, null,
6096
+ React.createElement("circle", { cx: "11", cy: "11", r: "7" }),
6097
+ React.createElement("path", { d: "m20 20-4-4" }));
6098
+ }
6099
+
5997
6100
  // Summary — a written summary. Was "≣", the same codepoint the Logs tab used.
5998
6101
 
5999
6102
  // Back to the transcript. Replaces the 💬 emoji, which iOS force-renders in
@@ -14599,7 +14702,8 @@ export function PilotSwarmWebApp({ controller, suspended = false, moa = null })
14599
14702
  const profileSettingsSaveTimerRef = React.useRef(null);
14600
14703
  const profileSettingsPollTimerRef = React.useRef(null);
14601
14704
  const profileSettingsPollInFlightRef = React.useRef(false);
14602
- const profileSettingsSaveInFlightRef = React.useRef(false);
14705
+ const profileSettingsSaveInFlightRef = React.useRef(0);
14706
+ const profileSettingsEditRevisionRef = React.useRef(0);
14603
14707
  const appliedProfileSettingsJsonRef = React.useRef(null);
14604
14708
  const defaultProfileSettingsRef = React.useRef(null);
14605
14709
  const [mobilePane, setMobilePane] = React.useState("workspace");
@@ -14726,7 +14830,7 @@ export function PilotSwarmWebApp({ controller, suspended = false, moa = null })
14726
14830
  profileSettingsPollTimerRef.current = null;
14727
14831
  }
14728
14832
  profileSettingsPollInFlightRef.current = false;
14729
- profileSettingsSaveInFlightRef.current = false;
14833
+ profileSettingsSaveInFlightRef.current = 0;
14730
14834
 
14731
14835
  const transport = controller.transport;
14732
14836
  if (typeof transport?.getCurrentUserProfile !== "function"
@@ -14740,6 +14844,7 @@ export function PilotSwarmWebApp({ controller, suspended = false, moa = null })
14740
14844
  const pollProfileSettings = async () => {
14741
14845
  if (!active || profileSettingsPollInFlightRef.current) return;
14742
14846
  profileSettingsPollInFlightRef.current = true;
14847
+ const editRevision = profileSettingsEditRevisionRef.current;
14743
14848
  try {
14744
14849
  const profile = await transport.getCurrentUserProfile();
14745
14850
  if (!active) return;
@@ -14789,7 +14894,8 @@ export function PilotSwarmWebApp({ controller, suspended = false, moa = null })
14789
14894
  const hasUnpersistedLocalChange = profileSettingsHydratedRef.current
14790
14895
  && lastProfileSettingsJsonRef.current != null
14791
14896
  && currentSettingsBeforeApplyJson !== lastProfileSettingsJsonRef.current;
14792
- const hasPendingLocalWrite = Boolean(profileSettingsSaveTimerRef.current)
14897
+ const hasPendingLocalWrite = editRevision !== profileSettingsEditRevisionRef.current
14898
+ || Boolean(profileSettingsSaveTimerRef.current)
14793
14899
  || profileSettingsSaveInFlightRef.current
14794
14900
  || hasUnpersistedLocalChange
14795
14901
  || controller.getState().ui.moaDirty === true;
@@ -14865,12 +14971,13 @@ export function PilotSwarmWebApp({ controller, suspended = false, moa = null })
14865
14971
  const settingsJson = JSON.stringify(settings);
14866
14972
  if (lastProfileSettingsJsonRef.current === settingsJson) return undefined;
14867
14973
  lastProfileSettingsJsonRef.current = settingsJson;
14974
+ profileSettingsEditRevisionRef.current += 1;
14868
14975
  if (profileSettingsSaveTimerRef.current) {
14869
14976
  clearTimeout(profileSettingsSaveTimerRef.current);
14870
14977
  }
14871
14978
  profileSettingsSaveTimerRef.current = setTimeout(() => {
14872
14979
  profileSettingsSaveTimerRef.current = null;
14873
- profileSettingsSaveInFlightRef.current = true;
14980
+ profileSettingsSaveInFlightRef.current += 1;
14874
14981
  const moaRevision = controller.getState().ui.moaRevision;
14875
14982
  controller.dispatch({ type: "ui/moaSaveStatus", status: "saving" });
14876
14983
  saveProfileSettings(controller, settings)
@@ -14880,7 +14987,7 @@ export function PilotSwarmWebApp({ controller, suspended = false, moa = null })
14880
14987
  controller.dispatch({ type: "ui/moaSaveStatus", status: "error" });
14881
14988
  })
14882
14989
  .finally(() => {
14883
- profileSettingsSaveInFlightRef.current = false;
14990
+ profileSettingsSaveInFlightRef.current = Math.max(0, profileSettingsSaveInFlightRef.current - 1);
14884
14991
  });
14885
14992
  }, 400);
14886
14993
  return undefined;
@@ -1 +1 @@
1
- import{g as p,r as u,d as a}from"./chunk-MOJQB5TN-MltzhnwP.js";import{p as f}from"./chunk-JWPE2WC7-DWnKTQ72.js";import{_ as n,l as o}from"./mermaid.core-DALDJDu8.js";import{M as c,b as d}from"./cynefin-VYW2F7L2-Dg1cltg6.js";import"./pilotswarm-B9rLtXpI.js";var v=d().RailroadAbnf.parser.LangiumParser,i=n(e=>{const r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,s]=e.split("*"),l=t?parseInt(t,10):0,m=s?parseInt(s,10):1/0;return{min:l,max:m}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:s}=b(e.repeat);return t===0&&s===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:s}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),o.debug("[ABNF Parser] Starting Langium parse");const r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new c(r);const t=r.value;o.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),o.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},B={parser:R,db:a,renderer:u,styles:p};export{B as diagram};
1
+ import{g as p,r as u,d as a}from"./chunk-MOJQB5TN-G6hkDffb.js";import{p as f}from"./chunk-JWPE2WC7-B9Qns4SI.js";import{_ as n,l as o}from"./mermaid.core-BPXpLhrQ.js";import{M as c,b as d}from"./cynefin-VYW2F7L2-DRYxiNM0.js";import"./pilotswarm-t7ZSHp3x.js";var v=d().RailroadAbnf.parser.LangiumParser,i=n(e=>{const r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,s]=e.split("*"),l=t?parseInt(t,10):0,m=s?parseInt(s,10):1/0;return{min:l,max:m}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:s}=b(e.repeat);return t===0&&s===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:s}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),o.debug("[ABNF Parser] Starting Langium parse");const r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new c(r);const t=r.value;o.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),o.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},B={parser:R,db:a,renderer:u,styles:p};export{B as diagram};
@@ -1 +1 @@
1
- import{Y as ln,$ as an,a0 as F,a1 as q,a2 as j,a3 as un,a4 as y,a5 as tn,a6 as J,a7 as _,a8 as rn,a9 as o,aa as on,ab as sn,ac as fn}from"./mermaid.core-DALDJDu8.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,z,a){var O=I-l,i=D-h,n=z-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function U(l,h,I,D,v,A,z){var a=l-I,O=h-D,i=(z?A:-A)/J(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,B=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*J(on(0,T*T*R-P*P)),Y=(P*g-m*S)/R,$=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=Y-B,e=$-t,r=w-B,C=p-t;return x*x+e*e>r*r+C*C&&(Y=w,$=p),{cx:Y,cy:$,x01:-n,y01:-d,x11:Y*(v/T-1),y11:$*(v/T-1)}}function hn(){var l=cn,h=yn,I=j(0),D=null,v=gn,A=dn,z=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=A.apply(this,arguments)-un,B=rn(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(B>tn-y)a.moveTo(s*F(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*F(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=B,S=B,Y=z.apply(this,arguments)/2,$=Y>y&&(D?+D.apply(this,arguments):J(u*u+s*s)),w=_(rn(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if($>y){var C=sn($/u*q(Y)),K=sn($/s*q(Y));(P-=C*2)>y?(C*=t?1:-1,R+=C,T-=C):(P=0,R=T=(f+c)/2),(S-=K*2)>y?(K*=t?1:-1,m+=K,g-=K):(S=0,m=g=(f+c)/2)}var G=s*F(m),H=s*q(m),L=u*F(T),M=u*q(T);if(w>y){var N=s*F(g),Q=s*q(g),V=u*F(R),W=u*q(R),E;if(B<an)if(E=pn(G,H,V,W,N,Q,L,M)){var X=G-E[0],Z=H-E[1],b=N-E[0],k=Q-E[1],nn=1/q(fn((X*b+Z*k)/(J(X*X+Z*Z)*J(b*b+k*k)))/2),en=J(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=U(V,W,G,H,s,x,t),r=U(N,Q,L,M,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(G,H),a.arc(0,0,s,m,g,!t)):a.moveTo(G,H),!(u>y)||!(P>y)?a.lineTo(L,M):p>y?(e=U(L,M,N,Q,u,-p,t),r=U(G,H,V,W,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-an/2;return[F(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:j(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:j(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:j(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:j(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:j(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:j(+n),i):A},i.padAngle=function(n){return arguments.length?(z=typeof n=="function"?n:j(+n),i):z},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};
1
+ import{Y as ln,$ as an,a0 as F,a1 as q,a2 as j,a3 as un,a4 as y,a5 as tn,a6 as J,a7 as _,a8 as rn,a9 as o,aa as on,ab as sn,ac as fn}from"./mermaid.core-BPXpLhrQ.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,z,a){var O=I-l,i=D-h,n=z-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function U(l,h,I,D,v,A,z){var a=l-I,O=h-D,i=(z?A:-A)/J(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,B=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*J(on(0,T*T*R-P*P)),Y=(P*g-m*S)/R,$=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=Y-B,e=$-t,r=w-B,C=p-t;return x*x+e*e>r*r+C*C&&(Y=w,$=p),{cx:Y,cy:$,x01:-n,y01:-d,x11:Y*(v/T-1),y11:$*(v/T-1)}}function hn(){var l=cn,h=yn,I=j(0),D=null,v=gn,A=dn,z=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=A.apply(this,arguments)-un,B=rn(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(B>tn-y)a.moveTo(s*F(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*F(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=B,S=B,Y=z.apply(this,arguments)/2,$=Y>y&&(D?+D.apply(this,arguments):J(u*u+s*s)),w=_(rn(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if($>y){var C=sn($/u*q(Y)),K=sn($/s*q(Y));(P-=C*2)>y?(C*=t?1:-1,R+=C,T-=C):(P=0,R=T=(f+c)/2),(S-=K*2)>y?(K*=t?1:-1,m+=K,g-=K):(S=0,m=g=(f+c)/2)}var G=s*F(m),H=s*q(m),L=u*F(T),M=u*q(T);if(w>y){var N=s*F(g),Q=s*q(g),V=u*F(R),W=u*q(R),E;if(B<an)if(E=pn(G,H,V,W,N,Q,L,M)){var X=G-E[0],Z=H-E[1],b=N-E[0],k=Q-E[1],nn=1/q(fn((X*b+Z*k)/(J(X*X+Z*Z)*J(b*b+k*k)))/2),en=J(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=U(V,W,G,H,s,x,t),r=U(N,Q,L,M,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(G,H),a.arc(0,0,s,m,g,!t)):a.moveTo(G,H),!(u>y)||!(P>y)?a.lineTo(L,M):p>y?(e=U(L,M,N,Q,u,-p,t),r=U(G,H,V,W,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-an/2;return[F(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:j(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:j(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:j(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:j(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:j(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:j(+n),i):A},i.padAngle=function(n){return arguments.length?(z=typeof n=="function"?n:j(+n),i):z},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};