@semiont/react-ui 0.5.16 → 0.5.18

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/index.js CHANGED
@@ -910,7 +910,7 @@ function nextClusterBreak(str, pos, includeExtending) {
910
910
  return pos;
911
911
  }
912
912
  function prevClusterBreak(str, pos, includeExtending) {
913
- while (pos > 0) {
913
+ while (pos > 1) {
914
914
  let found = nextClusterBreak(str, pos - 2, includeExtending);
915
915
  if (found < pos) return found;
916
916
  pos--;
@@ -18441,6 +18441,40 @@ function usePendingCreation(session, resourceId2, enabled) {
18441
18441
  return { pending, clearPending };
18442
18442
  }
18443
18443
 
18444
+ // src/hooks/useKBDiscovery.ts
18445
+ import { useEffect as useEffect16, useMemo as useMemo3, useState as useState16 } from "react";
18446
+ import { httpDiscovery, subscribeDiscovery } from "@semiont/sdk";
18447
+ function useKBDiscovery(options) {
18448
+ const enabled = options?.enabled ?? true;
18449
+ const intervalMs = options?.intervalMs;
18450
+ const externalTransport = options?.transport;
18451
+ const transport = useMemo3(
18452
+ () => externalTransport ?? httpDiscovery(),
18453
+ [externalTransport]
18454
+ );
18455
+ const [visible, setVisible] = useState16(
18456
+ () => typeof document === "undefined" || !document.hidden
18457
+ );
18458
+ const [state, setState] = useState16(null);
18459
+ useEffect16(() => {
18460
+ const onVisibilityChange = () => setVisible(!document.hidden);
18461
+ document.addEventListener("visibilitychange", onVisibilityChange);
18462
+ return () => document.removeEventListener("visibilitychange", onVisibilityChange);
18463
+ }, []);
18464
+ useEffect16(() => {
18465
+ if (!enabled || !visible) return;
18466
+ const subscription = subscribeDiscovery(
18467
+ transport,
18468
+ intervalMs !== void 0 ? { intervalMs } : void 0
18469
+ ).subscribe((diff) => setState(diff.state));
18470
+ return () => subscription.unsubscribe();
18471
+ }, [enabled, visible, transport, intervalMs]);
18472
+ return {
18473
+ state,
18474
+ kbs: state?.kind === "managed" ? state.kbs : []
18475
+ };
18476
+ }
18477
+
18444
18478
  // src/contexts/AnnotationContext.tsx
18445
18479
  import { createContext as createContext2, useContext as useContext2 } from "react";
18446
18480
  import { jsx as jsx2 } from "react/jsx-runtime";
@@ -18457,15 +18491,15 @@ function useAnnotationManager() {
18457
18491
  }
18458
18492
 
18459
18493
  // src/contexts/useEventSubscription.ts
18460
- import { useEffect as useEffect16, useRef as useRef8, useMemo as useMemo3 } from "react";
18494
+ import { useEffect as useEffect17, useRef as useRef8, useMemo as useMemo4 } from "react";
18461
18495
  function useEventSubscription(eventName, handler) {
18462
18496
  const semiont = useSemiont();
18463
18497
  const session = useObservable(semiont.activeSession$);
18464
18498
  const handlerRef = useRef8(handler);
18465
- useEffect16(() => {
18499
+ useEffect17(() => {
18466
18500
  handlerRef.current = handler;
18467
18501
  });
18468
- useEffect16(() => {
18502
+ useEffect17(() => {
18469
18503
  const unsubs = [];
18470
18504
  unsubs.push(semiont.on(eventName, (payload) => handlerRef.current(payload)));
18471
18505
  if (session) {
@@ -18480,15 +18514,15 @@ function useEventSubscriptions(subscriptions) {
18480
18514
  const semiont = useSemiont();
18481
18515
  const session = useObservable(semiont.activeSession$);
18482
18516
  const handlersRef = useRef8(subscriptions);
18483
- useEffect16(() => {
18517
+ useEffect17(() => {
18484
18518
  handlersRef.current = subscriptions;
18485
18519
  });
18486
- const eventNames = useMemo3(
18520
+ const eventNames = useMemo4(
18487
18521
  () => Object.keys(subscriptions).sort(),
18488
18522
  // eslint-disable-next-line react-hooks/exhaustive-deps
18489
18523
  [Object.keys(subscriptions).sort().join(",")]
18490
18524
  );
18491
- useEffect16(() => {
18525
+ useEffect17(() => {
18492
18526
  const unsubs = [];
18493
18527
  for (const eventName of eventNames) {
18494
18528
  const channel = eventName;
@@ -18508,10 +18542,10 @@ function useEventSubscriptions(subscriptions) {
18508
18542
  }
18509
18543
 
18510
18544
  // src/contexts/ResourceAnnotationsContext.tsx
18511
- import { createContext as createContext4, useContext as useContext4, useState as useState17, useCallback as useCallback13, useMemo as useMemo4 } from "react";
18545
+ import { createContext as createContext4, useContext as useContext4, useState as useState18, useCallback as useCallback13, useMemo as useMemo5 } from "react";
18512
18546
 
18513
18547
  // src/components/LiveRegion.tsx
18514
- import { useState as useState16, createContext as createContext3, useContext as useContext3, useCallback as useCallback12 } from "react";
18548
+ import { useState as useState17, createContext as createContext3, useContext as useContext3, useCallback as useCallback12 } from "react";
18515
18549
  import { jsx as jsx3, jsxs } from "react/jsx-runtime";
18516
18550
  var LiveRegionContext = createContext3(null);
18517
18551
  function useLiveRegion() {
@@ -18523,8 +18557,8 @@ function useLiveRegion() {
18523
18557
  return context;
18524
18558
  }
18525
18559
  function LiveRegionProvider({ children }) {
18526
- const [politeMessage, setPoliteMessage] = useState16("");
18527
- const [assertiveMessage, setAssertiveMessage] = useState16("");
18560
+ const [politeMessage, setPoliteMessage] = useState17("");
18561
+ const [assertiveMessage, setAssertiveMessage] = useState17("");
18528
18562
  const announce = useCallback12((message, priority = "polite") => {
18529
18563
  if (priority === "assertive") {
18530
18564
  setAssertiveMessage(message);
@@ -18671,7 +18705,7 @@ function useLanguageChangeAnnouncements() {
18671
18705
  import { jsx as jsx4 } from "react/jsx-runtime";
18672
18706
  var ResourceAnnotationsContext = createContext4(void 0);
18673
18707
  function ResourceAnnotationsProvider({ children }) {
18674
- const [newAnnotationIds, setNewAnnotationIds] = useState17(/* @__PURE__ */ new Set());
18708
+ const [newAnnotationIds, setNewAnnotationIds] = useState18(/* @__PURE__ */ new Set());
18675
18709
  const { announce } = useLiveRegion();
18676
18710
  const semiont = useObservable(useSemiont().activeSession$)?.client;
18677
18711
  const markAnnotation = useCallback13(async (rUri, motivation, selector, body = []) => {
@@ -18721,7 +18755,7 @@ function ResourceAnnotationsProvider({ children }) {
18721
18755
  });
18722
18756
  }, 6e3);
18723
18757
  }, []);
18724
- const contextValue = useMemo4(
18758
+ const contextValue = useMemo5(
18725
18759
  () => ({
18726
18760
  newAnnotationIds,
18727
18761
  markAnnotation,
@@ -18741,7 +18775,7 @@ function useResourceAnnotations() {
18741
18775
  }
18742
18776
 
18743
18777
  // src/components/CodeMirrorRenderer.tsx
18744
- import { useEffect as useEffect17, useRef as useRef9 } from "react";
18778
+ import { useEffect as useEffect18, useRef as useRef9 } from "react";
18745
18779
 
18746
18780
  // ../../node_modules/@codemirror/autocomplete/dist/index.js
18747
18781
  var CompletionContext = class {
@@ -19542,8 +19576,9 @@ function isHTMLBlock(line, _cx, breaking) {
19542
19576
  }
19543
19577
  function getListIndent(line, pos) {
19544
19578
  let indentAfter = line.countIndent(pos, line.pos, line.indent);
19545
- let indented = line.countIndent(line.skipSpace(pos), pos, indentAfter);
19546
- return indented >= indentAfter + 5 ? indentAfter + 1 : indented;
19579
+ let skipped = line.skipSpace(pos);
19580
+ let indented = line.countIndent(skipped, pos, indentAfter);
19581
+ return indented >= indentAfter + 5 || skipped == line.text.length ? indentAfter + 1 : indented;
19547
19582
  }
19548
19583
  function addCodeText(marks2, from, to) {
19549
19584
  let last = marks2.length - 1;
@@ -19895,6 +19930,8 @@ var BlockContext = class {
19895
19930
  }
19896
19931
  break;
19897
19932
  }
19933
+ if (line.pos == line.text.length)
19934
+ return this.nextLine() ? null : this.finish();
19898
19935
  let leaf = new LeafBlock(this.lineStart + line.pos, line.text.slice(line.pos));
19899
19936
  for (let parse of this.parser.leafBlockParsers)
19900
19937
  if (parse) {
@@ -21068,7 +21105,7 @@ function hasPipe(str, start) {
21068
21105
  }
21069
21106
  return false;
21070
21107
  }
21071
- var delimiterLine = /^\|?(\s*:?-+:?\s*\|)+(\s*:?-+:?\s*)?$/;
21108
+ var delimiterLine = /^[>\s]*\|?(\s*:?-+:?\s*\|)+(\s*:?-+:?\s*)?$/;
21072
21109
  var TableParser = class {
21073
21110
  constructor() {
21074
21111
  this.rows = null;
@@ -23376,12 +23413,12 @@ function configureNesting(tags3 = [], attributes = []) {
23376
23413
  }
23377
23414
 
23378
23415
  // ../../node_modules/@lezer/css/dist/index.js
23379
- var descendantOp = 135;
23416
+ var descendantOp = 145;
23380
23417
  var Unit = 1;
23381
- var identifier = 136;
23382
- var callee = 137;
23418
+ var identifier = 146;
23419
+ var callee = 147;
23383
23420
  var VariableName = 2;
23384
- var queryIdentifier = 138;
23421
+ var queryIdentifier = 148;
23385
23422
  var queryVariableName = 3;
23386
23423
  var QueryCallee = 4;
23387
23424
  var space2 = [
@@ -23522,32 +23559,32 @@ var cssHighlighting = styleTags({
23522
23559
  "[ ]": tags.squareBracket,
23523
23560
  "{ }": tags.brace
23524
23561
  });
23525
- var spec_callee = { __proto__: null, lang: 44, "nth-child": 44, "nth-last-child": 44, "nth-of-type": 44, "nth-last-of-type": 44, dir: 44, "host-context": 44, if: 90, url: 132, "url-prefix": 132, domain: 132, regexp: 132 };
23526
- var spec_queryIdentifier = { __proto__: null, or: 104, and: 104, not: 112, only: 112, layer: 186 };
23527
- var spec_QueryCallee = { __proto__: null, selector: 118, layer: 182 };
23528
- var spec_AtKeyword = { __proto__: null, "@import": 178, "@media": 190, "@charset": 194, "@namespace": 198, "@keyframes": 204, "@supports": 216, "@scope": 220, "@font-feature-values": 226 };
23529
- var spec_identifier = { __proto__: null, to: 223 };
23562
+ var spec_callee = { __proto__: null, lang: 44, "nth-child": 44, "nth-last-child": 44, "nth-of-type": 44, "nth-last-of-type": 44, dir: 44, "host-context": 44, if: 90, url: 152, "url-prefix": 152, domain: 152, regexp: 152 };
23563
+ var spec_queryIdentifier = { __proto__: null, or: 104, and: 104, not: 112, only: 112, layer: 206 };
23564
+ var spec_QueryCallee = { __proto__: null, selector: 118, style: 124, layer: 202 };
23565
+ var spec_AtKeyword = { __proto__: null, "@import": 198, "@media": 210, "@charset": 214, "@namespace": 218, "@keyframes": 224, "@supports": 236, "@scope": 240, "@font-feature-values": 246 };
23566
+ var spec_identifier = { __proto__: null, to: 243 };
23530
23567
  var parser3 = LRParser.deserialize({
23531
23568
  version: 14,
23532
- states: "IpQYQdOOO#}QdOOP$UO`OOO%OQaO'#CfOOQP'#Ce'#CeO%VQdO'#CgO%[Q`O'#CgO%aQaO'#FdO&XQdO'#CkO&xQaO'#CcO'SQdO'#CnO'_QdO'#DtO'dQdO'#DvO'oQdO'#D}O'oQdO'#EQOOQP'#Fd'#FdO)OQhO'#EsOOQS'#Fc'#FcOOQS'#Ev'#EvQYQdOOO)VQdO'#EWO*cQhO'#E^O)VQdO'#E`O*jQdO'#EbO*uQdO'#EeO)zQhO'#EkO*}QdO'#EmO+YQdO'#EpO+_QaO'#CfO+fQ`O'#ETO+kQ`O'#FnO+vQdO'#FnQOQ`OOP,QO&jO'#CaPOOO)CAR)CAROOQP'#Ci'#CiOOQP,59R,59RO%VQdO,59ROOQP'#Cm'#CmOOQP,59V,59VO&XQdO,59VO,]QdO,59YO'_QdO,5:`O'dQdO,5:bO'oQdO,5:iO'oQdO,5:kO'oQdO,5:lO'oQdO'#E}O,hQ`O,58}O,pQdO'#ESOOQS,58},58}OOQP'#Cq'#CqOOQO'#Dr'#DrOOQP,59Y,59YO,wQ`O,59YO,|Q`O,59YOOQP'#Du'#DuOOQP,5:`,5:`O-RQpO'#DwO-^QdO'#DxO-cQ`O'#DxO-hQpO,5:bO.RQaO,5:iO.iQaO,5:lOOQW'#D^'#D^O/eQhO'#DgO/xQhO,5;_O)zQhO'#DeO0VQ`O'#DkO0[QhO'#DnOOQW'#Fj'#FjOOQS,5;_,5;_O0aQ`O'#DhOOQS-E8t-E8tOOQ['#Cv'#CvO0fQdO'#CwO0|QdO'#C}O1dQdO'#DQO1zQ!pO'#DSO4TQ!jO,5:rOOQO'#DX'#DXO,|Q`O'#DWO4eQ!nO'#FgO6hQ`O'#DYO6mQ`O'#DoOOQ['#Fg'#FgO6rQhO'#FqO7QQ`O,5:xO7VQ!bO,5:zOOQS'#Ed'#EdO7_Q`O,5:|O7dQdO,5:|OOQO'#Eg'#EgO7lQ`O,5;PO7qQhO,5;VO'oQdO'#DjOOQS,5;X,5;XO0aQ`O,5;XO7yQdO,5;XOOQS'#FU'#FUO8RQdO'#ErO7QQ`O,5;[O8ZQdO,5:oO8kQdO'#FPO8xQ`O,5<YO8xQ`O,5<YPOOO'#Eu'#EuP9TO&jO,58{POOO,58{,58{OOQP1G.m1G.mOOQP1G.q1G.qOOQP1G.t1G.tO,wQ`O1G.tO,|Q`O1G.tOOQP1G/z1G/zO9`QpO1G/|O9hQaO1G0TO:OQaO1G0VO:fQaO1G0WO:|QaO,5;iOOQO-E8{-E8{OOQS1G.i1G.iO;WQ`O,5:nO;]QdO'#DsO;dQdO'#CuOOQO'#Dz'#DzOOQO,5:d,5:dO-^QdO,5:dOOQP1G/|1G/|O)VQdO1G/|O;kQ!jO'#D^O;yQ!bO,59yO<RQhO,5:ROOQO'#Fk'#FkO;|Q!bO,59}O<ZQhO'#FVO)zQhO,59{O)zQhO'#FVO=OQhO1G0yOOQS1G0y1G0yO=YQhO,5:PO>QQhO'#DlOOQW,5:V,5:VOOQW,5:Y,5:YOOQW,5:S,5:SO>[Q!fO'#FhOOQS'#Fh'#FhOOQS'#Ex'#ExO?lQdO,59cOOQ[,59c,59cO@SQdO,59iOOQ[,59i,59iO@jQdO,59lOOQ[,59l,59lOOQ[,59n,59nO)VQdO,59pOAQQhO'#EYOOQW'#EY'#EYOAlQ`O1G0^O4^QhO1G0^OOQ[,59r,59rO)zQhO'#D[OOQ[,59t,59tOAqQ#tO,5:ZOA|QhO'#FROBZQ`O,5<]OOQS1G0d1G0dOOQS1G0f1G0fOOQS1G0h1G0hOBfQ`O1G0hOBkQdO'#EhOOQS1G0k1G0kOOQS1G0q1G0qOBvQaO,5:UO7QQ`O1G0sOOQS1G0s1G0sO0aQ`O1G0sOOQS-E9S-E9SOOQS1G0v1G0vOB}Q!fO1G0ZOCeQ`O'#EVOOQO1G0Z1G0ZOOQO,5;k,5;kOCjQdO,5;kOOQO-E8}-E8}OCwQ`O1G1tPOOO-E8s-E8sPOOO1G.g1G.gOOQP7+$`7+$`OOQP7+%h7+%hO)VQdO7+%hOOQS1G0Y1G0YODSQaO'#FmOD^Q`O,5:_ODcQ!fO'#EwOEaQdO'#FfOEkQ`O,59aOOQO1G0O1G0OOEpQ!bO7+%hO)VQdO1G/eOE{QhO1G/iOOQW1G/m1G/mOOQW1G/g1G/gOF^QhO,5;qOOQW-E9T-E9TOOQS7+&e7+&eOGRQhO'#D^OGaQhO'#FlOGlQ`O'#FlOGqQ`O,5:WOOQS-E8v-E8vOOQ[1G.}1G.}OOQ[1G/T1G/TOOQ[1G/W1G/WOOQ[1G/[1G/[OGvQdO,5:tOOQS7+%x7+%xOG{Q`O7+%xOHQQhO'#D]OHYQ`O,59vO)zQhO,59vOOQ[1G/u1G/uOHbQ`O1G/uOHgQhO,5;mOOQO-E9P-E9POOQS7+&S7+&SOHuQbO'#DSOOQO'#Ej'#EjOITQ`O'#EiOOQO'#Ei'#EiOI`Q`O'#FSOIhQdO,5;SOOQS,5;S,5;SOOQ[1G/p1G/pOOQS7+&_7+&_O7QQ`O7+&_OIsQ!fO'#FOO)VQdO'#FOOJzQdO7+%uOOQO7+%u7+%uOOQO,5:q,5:qOOQO1G1V1G1VOK_Q!bO<<ISOKjQdO'#E|OKtQ`O,5<XOOQP1G/y1G/yOOQS-E8u-E8uOK|QdO'#E{OLWQ`O,5<QOOQ]1G.{1G.{OOQP<<IS<<ISOL`Q`O<<ISOLeQdO7+%POOQO'#D`'#D`OLlQ!bO7+%TOLtQhO'#EzOMRQ`O,5<WO)VQdO,5<WOOQW1G/r1G/rOOQO'#E['#E[OMZQ`O1G0`OOQS<<Id<<IdO)VQdO,59wOMzQhO1G/bOOQ[1G/b1G/bONRQ`O1G/bOOQW-E8w-E8wOOQ[7+%a7+%aOOQO,5;T,5;TOBnQdO'#FTOI`Q`O,5;nOOQS,5;n,5;nOOQS-E9Q-E9QOOQS1G0n1G0nOOQS<<Iy<<IyONZQ!fO,5;jOOQS-E8|-E8|OOQO<<Ia<<IaOOQPAN>nAN>nO! bQ`OAN>nO! gQaO,5;hOOQO-E8z-E8zO! qQdO,5;gOOQO-E8y-E8yOOQW<<Hk<<HkOOQW<<Ho<<HoO! {QhO<<HoO!!^QhO,5;fO!!iQ`O,5;fOOQO-E8x-E8xO!!nQdO1G1rOGvQdO'#FQO!!xQ`O7+%zOOQW7+%z7+%zO!#QQ!bO1G/cOOQ[7+$|7+$|O!#]QhO7+$|P!#dQ`O'#EyOOQO,5;o,5;oOOQO-E9R-E9ROOQS1G1Y1G1YOOQPG24YG24YO!#iQ`OAN>ZO)VQdO1G1QO!#nQ`O7+'^OOQO,5;l,5;lOOQO-E9O-E9OOOQW<<If<<IfOOQ[<<Hh<<HhPOQW,5;e,5;eOOQWG23uG23uO!#vQdO7+&l",
23533
- stateData: "!$Z~O$QOS$RQQ~OWVO^_O`WOcYOdYOl`OmZOp[O!r]O!u^O!{dO#ReO#TfO#VgO#YhO#`iO#bjO#ekO#|RO$XTO~OQmOWVO^_O`WOcYOdYOl`OmZOp[O!r]O!u^O!{dO#ReO#TfO#VgO#YhO#`iO#bjO#ekO#|lO$XTO~O#z$bP~P!jO$RqO~O`YXcYXdYXmYXpYXsYX!aYX!rYX!uYX#{YX$X[X~OgYX~P$ZO#|sO~O$XuO~O$XuO`$WXc$WXd$WXm$WXp$WXs$WX!a$WX!r$WX!u$WX#{$WXg$WX~O#|vO~O`xOcyOdyOmzOp{O!r|O!u!OO#{}O~Os!RO!a!PO~P&^Of!XO#|!TO#}!UO~O#|!YO~OW!^O#|![O$X!]O~OWVO^_O`WOcYOdYOmZOp[O!r]O!u^O#|RO$XTO~OS!fOc!gOd!gOh!cOs!RO!Y!eO!]!jO$O!bO~On!iO~P(dOQ!tOh!mOp!nOs!oOu!wOw!wO}!uO!d!vO#|!lO#}!rO$]!pO~OS!fOc!gOd!gOh!cO!Y!eO!]!jO$O!bO~Os$eP~P)zOw!|O!d!vO#|!{O~Ow#OO#|#OO~Oh#ROs!RO#c#TO~O#|#VO~Oc!xX~P$ZOc#YO~On#ZO#z$bXr$bX~O#z$bXr$bX~P!jO$S#^O$T#^O$U#`O~Of#eO#|!TO#}!UO~Os!RO!a!PO~Or$bP~P!jOh#oO~Oh#pO~Oo!kX!o!kX$X!mX~O#|#qO~O$X#sO~Oo#tO!o#uO~O`xOcyOdyOmzOp{O~Os!qa!a!qa!r!qa!u!qa#{!qag!qa~P-pOs!ta!a!ta!r!ta!u!ta#{!tag!ta~P-pOS!fOc!gOd!gOh!cO!Y!eO!]!jO~OR#yOu#yOw#yO$O#vO$]!pO~P/POn$PO!U#|O!a#}O~P(dOh$RO~O$O$TO~Oh#RO~O`$WOc$WOg$ZOl$WOm$WOn$WO~P)VO`$WOc$WOl$WOm$WOn$WOo$]O~P)VO`$WOc$WOl$WOm$WOn$WOr$_O~P)VOP$`OSvXcvXdvXhvXnvXyvX!YvX!]vX!}vX#PvX$OvX!WvXQvX`vXgvXlvXmvXpvXsvXuvXwvX}vX!dvX#|vX#}vX$]vXovXrvX!avX#zvX$dvX!pvX~Oy$aO!}$bO#P$cOn$eP~P)zOh#pOS$ZXc$ZXd$ZXn$ZXy$ZX!Y$ZX!]$ZX!}$ZX#P$ZX$O$ZXQ$ZX`$ZXg$ZXl$ZXm$ZXp$ZXs$ZXu$ZXw$ZX}$ZX!d$ZX#|$ZX#}$ZX$]$ZXo$ZXr$ZX!a$ZX#z$ZX$d$ZX!p$ZX~Oh$gO~Oh$iO~O!U#|O!a$jOs$eXn$eX~Os!RO~On$mOy$aO~On$nO~Ow$oO!d!vO~Os$pO~Os!RO!U#|O~Os!RO#c$vO~O#|#VOs#fX~O$d$zOn!wa#z!war!wa~P)VOn#sX#z#sXr#sX~P!jOn#ZO#z$bar$ba~O$S#^O$T#^O$U%RO~Oo%TO!o%UO~Os!qi!a!qi!r!qi!u!qi#{!qig!qi~P-pOs!si!a!si!r!si!u!si#{!sig!si~P-pOs!ti!a!ti!r!ti!u!ti#{!tig!ti~P-pOs#qa!a#qa~P&^Or%VO~Og$aP~P'oOg$YP~P)VOc!SXg!QX!U!QX!W!SX~Oc%_O!W%`O~Og%aO!U#|O~O!U#|OS#yXc#yXd#yXh#yXn#yXs#yX!Y#yX!]#yX!a#yX$O#yX~On%eO!a#}O~P(dO!U#|OS!Xac!Xad!Xah!Xan!Xas!Xa!Y!Xa!]!Xa!a!Xa$O!Xag!Xa~O$O%fOg$`P~P/POy$aOQ$[X`$[Xc$[Xg$[Xh$[Xl$[Xm$[Xn$[Xp$[Xs$[Xu$[Xw$[X}$[X!d$[X#|$[X#}$[X$]$[Xo$[Xr$[X~O`$WOc$WOg%kOl$WOm$WOn$WO~P)VO`$WOc$WOl$WOm$WOn$WOo%lO~P)VO`$WOc$WOl$WOm$WOn$WOr%mO~P)VOh%oOS!|Xc!|Xd!|Xn!|X!Y!|X!]!|X$O!|X~On%pO~Og%uOw%vO!e%vO~Os#uX!a#uXn#uX~P)zO!a$jOs$ean$ea~On%yO~Or&QO#|%{O$]%zO~Og&RO~P&^Oy$aO!a&VO$d$zOn!wi#z!wir!wi~P)VO$c&YO~On#sa#z#sar#sa~P!jOn#ZO#z$bir$bi~O!a&]Og$aX~P&^Og&_O~Oy$aOQ#kXg#kXh#kXp#kXs#kXu#kXw#kX}#kX!a#kX!d#kX#|#kX#}#kX$]#kX~O!a&aOg$YX~P)VOg&cO~Oo&dOy$aO!p&eO~OR#yOu#yOw#yO$O&gO$]!pO~O!U#|OS#yac#yad#yah#yan#yas#ya!Y#ya!]#ya!a#ya$O#ya~Oc!SXg!QX!U!QX!a!QX~O!U#|O!a&iOg$`X~Oc&kO~Og&lO~O#|&mO~On&oO~Oc&pO!U#|O~Og&rOn&qO~Og&uO~O!U#|Os#ua!a#uan#ua~OP$`OsvX!avXgvX~O$]%zOs#]X!a#]X~Os!RO!a&wO~Or&{O#|%{O$]%zO~Oy$aOQ#rXh#rXn#rXp#rXs#rXu#rXw#rX}#rX!a#rX!d#rX#z#rX#|#rX#}#rX$]#rX$d#rXr#rX~O!a&VO$d$zOn!wq#z!wqr!wq~P)VOo'QOy$aO!p'RO~Og#pX!a#pX~P'oO!a&]Og$aa~Og#oX!a#oX~P)VO!a&aOg$Ya~Oo'QO~Og'WO~P)VOg'XO!W'YO~O$O%fOg#nX!a#nX~P/PO!a&iOg$`a~O`'_Og'aO~OS#mac#mad#mah#ma!Y#ma!]#ma$O#ma~Og'cO~PMcOg'cOn'dO~Oy$aOQ#rah#ran#rap#ras#rau#raw#ra}#ra!a#ra!d#ra#z#ra#|#ra#}#ra$]#ra$d#rar#ra~Oo'iO~Og#pa!a#pa~P&^Og#oa!a#oa~P)VOR#yOu#yOw#yO$O&gO$]%zO~O!U#|Og#na!a#na~Oc'kO~O!a&iOg$`i~P)VO`'_Og'oO~Oy$aOg!Pin!Pi~Og'pO~PMcOn'qO~Og'rO~O!a&iOg$`q~Og#nq!a#nq~P)VO$Q!e$R$]`$]y!u~",
23534
- goto: "4h$fPPPPP$gP$jP$s%V$s%i%{P$sP&R$sPP&XPPP&_&i&iPPPPP&iPP&iP'VP&iP&i(Q&iP(n(q(w(w)Z(wP(wP(wP(w(wP)j(w)vP(w)yPP*m*s$s*y$s+P+P+V+ZPP$sP$s$sP+a,],j,q$jP,zP,}P$jP$jP$jP-T$jP-W-Z-^-e$jP$jPP$jP-j$jP-m-s.S.j.x/O/Y/`/f/l/r/|0S0Y0`0f0lPPPPPPPPPPP0r0{P1q1t2vP3O3x4R4U4XPP4_RrQ_aOPco!R#Z$}q_OP]^co|}!O!P!R#R#Z#o$}&]qSOP]^co|}!O!P!R#R#Z#o$}&]qUOP]^co|}!O!P!R#R#Z#o$}&]QtTR#auQwWR#bxQ!VYR#cyQ#c!XS$f!s!tR%S#e!V!wdf!m!n!o#Y#p#u$Y$[$^$a$y%U%Z%_&V&W&a&f&k&p'U'^'k's!U!wdf!m!n!o#Y#p#u$Y$[$^$a$y%U%Z%_&V&W&a&f&k&p'U'^'k'sU#y!c%`'YU%}$p&P&wR&v%|!V!sdf!m!n!o#Y#p#u$Y$[$^$a$y%U%Z%_&V&W&a&f&k&p'U'^'k'sR$h!uQ%s$gR&s%tq!h`ei!c!d!e!q#|#}$O$R$e$g$j%t&iQ#w!cQ%h$RQ&h%`Q'[&iR'j'YQ#UjQ$U!jQ$t#TR&T$vR$S!f!U!wdf!m!n!o#Y#p#u$Y$[$^$a$y%U%Z%_&V&W&a&f&k&p'U'^'k'sQ!|gR$o!}Q!WYR#dyQ#c!WR%S#dQ!ZZR#fzQ!_[R#g{T!^[{Q#r!]R%]#sQ!SXQ!i`Q#SjQ#m!QQ$P!dQ$l!yQ$r#QQ$u#UQ$x#XQ%e$OQ&S$tQ&y&OQ&|&TR'h&xSnP!RQ#]oQ$|#ZR&Z$}ZmPo!R#Z$}Q${#YQ&X$yR'P&WR$e!qQ&n%oR'm'_R!}gR#PhR$q#PS&O$p&PR'f&wV%|$p&P&wR#XkQ#_qR%Q#_QcOSoP!RU!kco$}R$}#ZQ%Z#pY&`%Z&f'U'^'sQ&f%_Q'U&aQ'^&kR's'kQ$Y!mQ$[!nQ$^!oV%j$Y$[$^Q%t$gR&t%tQ&j%gS']&j'lR'l'^Q&b%ZR'V&bQ&^%WR'T&^Q!QXR#l!QQ&W$yR'O&WQ#[nS%O#[%PR%P#]Q'`&nR'n'`Q$k!xR%x$kQ&P$pR&z&PQ&x&OR'g&xQ#WkR$w#WQ$O!dR%d$O_bOPco!R#Z$}^XOPco!R#Z$}Q!`]Q!a^Q#h|Q#i}Q#j!OQ#k!PQ$s#RQ%W#oR'S&]R%[#pQ!qdQ!zf[$V!m!n!o$Y$[$^Q$y#Yd%Y#p%Z%_&a&f&k'U'^'k'sQ%^#uQ%n$aS&U$y&WQ&[%UQ&}&VR'b&p]$X!m!n!o$Y$[$^Q!d`U!xe!q$eQ#QiQ#x!cS#{!d$OQ$Q!eQ%b#|Q%c#}Q%g$RS%r$g%tQ%w$jR'Z&iQ#z!cQ&h%`R'j'YR%i$RR%X#oQpPR#n!RQ!yeQ$d!qR%q$e",
23535
- nodeNames: "\u26A0 Unit VariableName VariableName QueryCallee Comment StyleSheet RuleSet UniversalSelector TagSelector TagName NamespacedTagSelector NamespaceName TagName NestingSelector ClassSelector . ClassName PseudoClassSelector : :: PseudoClassName PseudoClassName ) ( ArgList ValueName ParenthesizedValue AtKeyword # ; ] [ BracketedValue } { BracedValue ColorLiteral NumberLiteral StringLiteral BinaryExpression BinOp CallExpression Callee IfExpression if ArgList IfBranch KeywordQuery FeatureQuery FeatureName BinaryQuery LogicOp ComparisonQuery CompareOp UnaryQuery UnaryQueryOp ParenthesizedQuery SelectorQuery selector ParenthesizedSelector CallQuery ArgList , PseudoQuery CallLiteral CallTag ParenthesizedContent PseudoClassName ArgList IdSelector IdName AttributeSelector AttributeName NamespacedAttribute NamespaceName AttributeName MatchOp MatchFlag ChildSelector ChildOp DescendantSelector SiblingSelector SiblingOp Block Declaration PropertyName Important ImportStatement import Layer layer LayerName layer MediaStatement media CharsetStatement charset NamespaceStatement namespace NamespaceName KeyframesStatement keyframes KeyframeName KeyframeList KeyframeSelector KeyframeRangeName SupportsStatement supports ScopeStatement scope to FontFeatureStatement font-feature-values FontName AtRule Styles",
23536
- maxTerm: 159,
23569
+ states: "MlQYQdOOO#}QdOOP$UO`OOO%OQaO'#CfOOQP'#Ce'#CeO%VQdO'#CgO%[Q`O'#CgO%aQaO'#FnO&XQdO'#CkO&xQaO'#CcO'SQdO'#CnO'_QdO'#EOO'dQdO'#EQO'oQdO'#EXO'oQdO'#E[OOQP'#Fn'#FnO)RQhO'#E}OOQS'#Fm'#FmOOQS'#FQ'#FQQYQdOOO)YQdO'#EbO*iQhO'#EhO)YQdO'#EjO*pQdO'#ElO*{QdO'#EoO)}QhO'#EuO+TQdO'#EwO+`QdO'#EzO+eQaO'#CfO+lQ`O'#E_O+qQ`O'#F{O+|QdO'#F{QOQ`OOP,WO&jO'#CaPOOO)CA])CA]OOQP'#Ci'#CiOOQP,59R,59RO%VQdO,59ROOQP'#Cm'#CmOOQP,59V,59VO&XQdO,59VO,cQdO,59YO'_QdO,5:jO'dQdO,5:lO'oQdO,5:sO'oQdO,5:uO'oQdO,5:vO'oQdO'#FXO,nQ`O,58}O,vQdO'#E^OOQS,58},58}OOQP'#Cq'#CqOOQO'#D|'#D|OOQP,59Y,59YO,}Q`O,59YO-SQ`O,59YOOQP'#EP'#EPOOQP,5:j,5:jO-XQpO'#ERO-dQdO'#ESO-iQ`O'#ESO-nQpO,5:lO.XQaO,5:sO.oQaO,5:vOOQW'#D^'#D^O/nQhO'#DgO0RQhO,5;iO)}QhO'#DeO0`Q`O'#DnO0eQhO'#DxOOQW'#Ft'#FtOOQS,5;i,5;iO0jQ`O'#DhO0oQ`O'#DkOOQS-E9O-E9OOOQ['#Cv'#CvO0tQdO'#CwO1[QdO'#C}O1rQdO'#DQO2YQ!pO'#DSO4fQ!jO,5:|OOQO'#DX'#DXO-SQ`O'#DWO4vQ!nO'#FqO6|Q`O'#DYO7RQ`O'#DyOOQ['#Fq'#FqO7WQhO'#GOO7fQ`O,5;SO7kQ!bO,5;UOOQS'#En'#EnO7sQ`O,5;WO7xQdO,5;WOOQO'#Eq'#EqO8QQ`O,5;ZO8VQhO,5;aO'oQdO'#DjOOQS,5;c,5;cO0jQ`O,5;cO8_QdO,5;cOOQS'#F`'#F`O8gQdO'#E|O7fQ`O,5;fO8oQdO,5:yO9PQdO'#FZO9^Q`O,5<gO9^Q`O,5<gPOOO'#FP'#FPP9iO&jO,58{POOO,58{,58{OOQP1G.m1G.mOOQP1G.q1G.qOOQP1G.t1G.tO,}Q`O1G.tO-SQ`O1G.tOOQP1G0U1G0UO9tQpO1G0WO9|QaO1G0_O:dQaO1G0aO:zQaO1G0bO;bQaO,5;sOOQO-E9V-E9VOOQS1G.i1G.iO;lQ`O,5:xO;qQdO'#D}O;xQdO'#CuOOQO'#EU'#EUOOQO,5:n,5:nO-dQdO,5:nOOQP1G0W1G0WO)YQdO1G0WO<PQ!jO'#D^O<_Q!bO,59yO<gQhO,5:ROOQO'#Fu'#FuO<bQ!bO,59}O<oQhO'#FaO)}QhO,59{O)}QhO'#FaO=gQhO1G1TOOQS1G1T1G1TO=qQhO,5:PO>lQhO'#DoOOQW,5:Y,5:YOOQW,5:d,5:dOOQW,5:S,5:SO>vQhO,5:VO?bQ!fO'#FrOOQS'#Fr'#FrOOQS'#FS'#FSO@rQdO,59cOOQ[,59c,59cOAYQdO,59iOOQ[,59i,59iOApQdO,59lOOQ[,59l,59lOOQ[,59n,59nO)YQdO,59pOBWQhO'#EdOOQW'#Ed'#EdOBuQ`O1G0hO4oQhO1G0hOOQ[,59r,59rO)}QhO'#D[OOQ[,59t,59tOBzQ#tO,5:eOCVQhO'#F]OCdQ`O,5<jOOQS1G0n1G0nOOQS1G0p1G0pOOQS1G0r1G0rOCoQ`O1G0rOCtQdO'#ErOOQS1G0u1G0uOOQS1G0{1G0{ODPQaO,5:UO7fQ`O1G0}OOQS1G0}1G0}O0jQ`O1G0}OOQS-E9^-E9^OOQS1G1Q1G1QODWQ!fO1G0eODnQ`O'#EaOOQO1G0e1G0eOOQO,5;u,5;uODsQdO,5;uOOQO-E9X-E9XOEQQ`O1G2RPOOO-E8}-E8}POOO1G.g1G.gOOQP7+$`7+$`OOQP7+%r7+%rO)YQdO7+%rOOQS1G0d1G0dOE]QaO'#FzOEgQ`O,5:iOElQ!fO'#FROFjQdO'#FpOFtQ`O,59aOOQO1G0Y1G0YOFyQ!bO7+%rO)YQdO1G/eOGUQhO1G/iOOQW1G/m1G/mOOQW1G/g1G/gOGgQhO,5;{OOQW-E9_-E9_OOQS7+&o7+&oOH_QhO'#D^OHmQhO'#FxOHxQ`O'#FxOH}Q`O,5:ZOISQ!bO'#D`O>vQhO'#DmOI_QhO'#DqOIgQhO'#DsOIlQhO'#FwOOQO'#Fw'#FwOItQ!bO'#DwOOQO'#Fy'#FyOOQO'#Fv'#FvOIyQ`O1G/qOOQS-E9Q-E9QOOQ[1G.}1G.}OOQ[1G/T1G/TOOQ[1G/W1G/WOOQ[1G/[1G/[OJOQdO,5;OOOQS7+&S7+&SOJTQ`O7+&SOJYQhO'#D]OJbQ`O,59vO)}QhO,59vOOQ[1G0P1G0POJjQ`O1G0POJoQhO,5;wOOQO-E9Z-E9ZOOQS7+&^7+&^OJ}QbO'#DSOOQO'#Et'#EtOK]Q`O'#EsOOQO'#Es'#EsOKhQ`O'#F^OKpQdO,5;^OOQS,5;^,5;^OOQ[1G/p1G/pOOQS7+&i7+&iO7fQ`O7+&iOK{Q!fO'#FYO)YQdO'#FYOMSQdO7+&POOQO7+&P7+&POOQO,5:{,5:{OOQO1G1a1G1aOMgQ!bO<<I^OMrQdO'#FWOM|Q`O,5<fOOQP1G0T1G0TOOQS-E9P-E9PONUQdO'#FVON`Q`O,5<[OOQ]1G.{1G.{OOQP<<I^<<I^ONhQ`O<<I^ONmQdO7+%POOQO'#D`'#D`ONtQ!bO7+%TON|QhO'#FUO! ZQ`O,5<dO)YQdO,5<dOOQW1G/u1G/uO)YQdO,5:bO! cQ`O,5:XO>vQhO'#DrOOQO,5:],5:]O! hQhO,5:_OGUQhO,5:cOOQW7+%]7+%]OOQO'#Ef'#EfO! pQ`O1G0jOOQS<<In<<InO)YQdO,59wO!!dQhO1G/bOOQ[1G/b1G/bO!!kQ`O1G/bOOQW-E9R-E9ROOQ[7+%k7+%kOOQO,5;_,5;_OCwQdO'#F_OKhQ`O,5;xOOQS,5;x,5;xOOQS-E9[-E9[OOQS1G0x1G0xOOQS<<JT<<JTO!!sQ!fO,5;tOOQS-E9W-E9WOOQO<<Ik<<IkOOQPAN>xAN>xO!#zQ`OAN>xO!$PQaO,5;rOOQO-E9U-E9UO!$ZQdO,5;qOOQO-E9T-E9TOOQW<<Hk<<HkOOQW<<Ho<<HoO!$eQhO<<HoO!$vQhO,5;pO!%RQ`O,5;pOOQO-E9S-E9SO!%WQdO1G2OO!%bQdO1G/|O!%iQhO1G/sO!%qQ`O,5:^O>vQhO'#DuOOQO1G/y1G/yO!%vQ!bO1G/}OJOQdO'#F[O!&OQ`O7+&UOOQW7+&U7+&UO!&WQ!bO1G/cOOQ[7+$|7+$|O!&cQhO7+$|P!&jQ`O'#FTOOQO,5;y,5;yOOQO-E9]-E9]OOQS1G1d1G1dOOQPG24dG24dO!&oQ`OAN>ZO)YQdO1G1[O!&tQ`O7+'jOOQO1G/x1G/xO!&|Q`O,5:aO!$eQhO7+%iOOQO,5;v,5;vOOQO-E9Y-E9YOOQW<<Ip<<IpOOQ[<<Hh<<HhPOQW,5;o,5;oOOQWG23uG23uO!'RQdO7+&vOOQO1G/{1G/{OOQO<<IT<<IT",
23570
+ stateData: "!'f~O$[OS$]QQ~OWVO^_O`WOcYOdYOl`OmZOp[O!|]O#P^O#VdO#]eO#_fO#agO#dhO#jiO#ljO#okO$WRO$cTO~OQmOWVO^_O`WOcYOdYOl`OmZOp[O!|]O#P^O#VdO#]eO#_fO#agO#dhO#jiO#ljO#okO$WlO$cTO~O$U$oP~P!jO$]qO~O`YXcYXdYXmYXpYXsYX!dYX!|YX#PYX$VYX$c[X~OgYX~P$ZO$WsO~O$cuO~O$cuO`$bXc$bXd$bXm$bXp$bXs$bX!d$bX!|$bX#P$bX$V$bXg$bX~O$WvO~O`xOcyOdyOmzOp{O!||O#P!OO$V}O~Os!RO!d!PO~P&^Of!XO$W!TO$X!UO~O$W!YO~OW!^O$W![O$c!]O~OWVO^_O`WOcYOdYOmZOp[O!|]O#P^O$WRO$cTO~OS!fOc!gOd!gOh!cOs!RO!Y!eO!]!jO!`!kO$Y!bO~On!iO~P(dOQ!uOh!nOp!oOs!pOu!xOw!xO}!vO!n!wO$W!mO$X!sO$g!qO~OS!fOc!gOd!gOh!cO!Y!eO!]!jO!`!kO$Y!bO~Os$rP~P)}Ow!}O!n!wO$W!|O~Ow#PO$W#PO~Oh#SOs!RO#m#UO~O$W#WO~Oc#SX~P$ZOc#ZO~On#[O$U$oXr$oX~O$U$oXr$oX~P!jO$^#_O$_#_O$`#aO~Of#fO$W!TO$X!UO~Os!RO!d!PO~Or$oP~P!jOh#pO~Oh#qO~Oo!uX!y!uX$c!wX~O$W#rO~O$c#tO~Oo#uO!y#vO~O`xOcyOdyOmzOp{O~Os!{a!d!{a!|!{a#P!{a$V!{ag!{a~P-vOs#Oa!d#Oa!|#Oa#P#Oa$V#Oag#Oa~P-vOS!fOc!gOd!gOh!cO!Y!eO!]!jO!`!kO~OR#zOu#zOw#zO$Y#wO$g!qO~P/VOn$QO!U#}O!d$OO~P(dOh$SO~O$Y$UO~Oh#SO~Oh$WO~O`$YOc$YOg$]Ol$YOm$YOn$YO~P)YO`$YOc$YOl$YOm$YOn$YOo$_O~P)YO`$YOc$YOl$YOm$YOn$YOr$aO~P)YOP$bOSvXcvXdvXhvXnvXyvX!YvX!]vX!`vX#XvX#ZvX$YvX!WvXQvX`vXgvXlvXmvXpvXsvXuvXwvX}vX!nvX$WvX$XvX$gvXovXrvX!dvX$UvX$qvX!zvX~Oy$cO#X$dO#Z$eOn$rP~P)}Oh#qOS$eXc$eXd$eXn$eXy$eX!Y$eX!]$eX!`$eX#X$eX#Z$eX$Y$eXQ$eX`$eXg$eXl$eXm$eXp$eXs$eXu$eXw$eX}$eX!n$eX$W$eX$X$eX$g$eXo$eXr$eX!d$eX$U$eX$q$eX!z$eX~Oh$iO~Oh$kO~O!U#}O!d$lOs$rXn$rX~Os!RO~On$oOy$cO~On$pO~Ow$qO!n!wO~Os$rO~Os!RO!U#}O~Os!RO#m$xO~O$W#WOs#pX~O$q$|On#Ra$U#Rar#Ra~P)YOn#}X$U#}Xr#}X~P!jOn#[O$U$oar$oa~O$^#_O$_#_O$`%TO~Oo%VO!y%WO~Os!{i!d!{i!|!{i#P!{i$V!{ig!{i~P-vOs!}i!d!}i!|!}i#P!}i$V!}ig!}i~P-vOs#Oi!d#Oi!|#Oi#P#Oi$V#Oig#Oi~P-vOs#{a!d#{a~P&^Or%XO~Og$nP~P'oOg$dP~P)YOc!SXg!QX!U!QX!W!SX~Oc%aO!W%bO~Og%cO!U#}O~O!U#}OS$TXc$TXd$TXh$TXn$TXs$TX!Y$TX!]$TX!`$TX!d$TX$Y$TX~On%gO!d$OO~P(dO!U#}OS!Xac!Xad!Xah!Xan!Xas!Xa!Y!Xa!]!Xa!`!Xa!d!Xa$Y!Xag!Xa~O$Y%hOg$lP~P/VOR#zOS!fOh%mOu#zOw#zO!Y%nO$Y%lO$g!qO~Oy$cOQ$fX`$fXc$fXg$fXh$fXl$fXm$fXn$fXp$fXs$fXu$fXw$fX}$fX!n$fX$W$fX$X$fX$g$fXo$fXr$fX~O`$YOc$YOg%wOl$YOm$YOn$YO~P)YO`$YOc$YOl$YOm$YOn$YOo%xO~P)YO`$YOc$YOl$YOm$YOn$YOr%yO~P)YOh%{OS#WXc#WXd#WXn#WX!Y#WX!]#WX!`#WX$Y#WX~On%|O~Og&ROw&SO!o&SO~Os$PX!d$PXn$PX~P)}O!d$lOs$ran$ra~On&VO~Or&^O$W&XO$g&WO~Og&_O~P&^Oy$cO!d&cO$q$|On#Ri$U#Rir#Ri~P)YO$p&fO~On#}a$U#}ar#}a~P!jOn#[O$U$oir$oi~O!d&iOg$nX~P&^Og&kO~Oy$cOQ#uXg#uXh#uXp#uXs#uXu#uXw#uX}#uX!d#uX!n#uX$W#uX$X#uX$g#uX~O!d&mOg$dX~P)YOg&oO~Oo&pOy$cO!z&qO~OR#zOu#zOw#zO$Y&sO$g!qO~O!U#}OS$Tac$Tad$Tah$Tan$Tas$Ta!Y$Ta!]$Ta!`$Ta!d$Ta$Y$Ta~Oc!SXg!QX!U!QX!d!QX~O!U#}O!d&uOg$lX~Oc&wO~Og&xO~Oc&yOg!jX!W!SX~OS!fOh&{O~O!U&}O~O!U&}Og$kX~O!W'OO~Og'PO~O$W'QO~On'SO~Oc'TO!U#}O~Og'VOn'UO~Og'YO~O!U#}Os$Pa!d$Pan$Pa~OP$bOsvX!dvXgvX~O$g&WOs#gX!d#gX~Os!RO!d'[O~Or'`O$W&XO$g&WO~Oy$cOQ#|Xh#|Xn#|Xp#|Xs#|Xu#|Xw#|X}#|X!d#|X!n#|X$U#|X$W#|X$X#|X$g#|X$q#|Xr#|X~O!d&cO$q$|On#Rq$U#Rqr#Rq~P)YOo'eOy$cO!z'fO~Og#zX!d#zX~P'oO!d&iOg$na~Og#yX!d#yX~P)YO!d&mOg$da~Oo'eO~Og'kO~P)YOg'lO!W'mO~O$Y%hOg#xX!d#xX~P/VO!d&uOg$la~Og'sO~OS!fOh'uO~O`'xOg'zO~OS#wac#wad#wah#wa!Y#wa!]#wa!`#wa$Y#wa~Og'|O~P! xOg'|On'}O~Oy$cOQ#|ah#|an#|ap#|as#|au#|aw#|a}#|a!d#|a!n#|a$U#|a$W#|a$X#|a$g#|a$q#|ar#|a~Oo(SO~Og#za!d#za~P&^Og#ya!d#ya~P)YOR#zOu#zOw#zO$Y&sO$g&WO~O!U#}Og#xa!d#xa~Oc(UO~O!d&uOg$li~P)YOg!ji~P)YOg!ai!U!hi~Og(WO~O!W(YOg!ki~O`'xOg(]O~Oy$cOg!Pin!Pi~Og(^O~P! xOn(_O~Og(`O~O!d&uOg$lq~Og(bO~Og#xq!d#xq~P)YO$[!o$]$g`$gy#P~",
23571
+ goto: "7[$sPPPPP$tP$wP%Q%d%Q%v&YP%QP&`%QPP&fPPP&l&v&vPPPPP&vPP&vP'fP&vP&v(i&vP)X)[)b)b)t)bP)bP)bP)b)bP*a)bP*m*s+cP*m+f*m+i+`+o+o)b+uPP,k,q%Q,w%Q,},}-T-XPP%QP%Q%QP-_.Z.h.o$wP.xP.{P$wP$wP$wP/R$wP/U/X/[/c$wP$wPP$wP/h$wP/k/q0Q0l0z1Q1[1b1h1n1t2O2U2[2b2h2nPPPPPPPPPPP2t2}P3s3v4zP5S5|6c6o6u6o6x6{PP7RRrQ_aOPco!R#[%Pq_OP]^co|}!O!P!R#S#[#p%P&iqSOP]^co|}!O!P!R#S#[#p%P&iqUOP]^co|}!O!P!R#S#[#p%P&iQtTR#buQwWR#cxQ!VYR#dyQ#d!XS$h!t!uR%U#f!Z!xdf!n!o!p#Z#q#v$[$^$`$c${%W%]%a&c&d&m&r&w&y'T'i'q'r(U(a!Y!xdf!n!o!p#Z#q#v$[$^$`$c${%W%]%a&c&d&m&r&w&y'T'i'q'r(U(ab#z!c$W%b%m&{'O'm'u(YU&Z$r&]'[R'Z&Y!Z!tdf!n!o!p#Z#q#v$[$^$`$c${%W%]%a&c&d&m&r&w&y'T'i'q'r(U(aR$j!vQ&P$iR'W&Qq!h`ei!c!d!e!r#}$O$P$S$g$i$l&Q&uQ#x!cQ%j$SW%r$W%m&{'uQ&t%bQ'o&uQ'w'OQ(T'mR(c(YQ#VjQ$V!jQ$v#UR&a$xX%q$W%m&{'up!h`ei!c!d!e!r#}$O$P$S$g$i$l&Q&uW%p$W%m&{'uQ&|%nR'v&}R$T!fR&|%nX%o$W%m&{'uX%s$W%m&{'u!Y!xdf!n!o!p#Z#q#v$[$^$`$c${%W%]%a&c&d&m&r&w&y'T'i'q'r(U(aQ!}gR$q#OQ!WYR#eyQ#d!WR%U#eQ!ZZR#gzQ!_[R#h{T!^[{Q#s!]R%_#tQ!SXQ!i`Q#TjQ#n!QQ$Q!dQ$n!zQ$t#RQ$w#VQ$z#YQ%g$PQ&`$vQ'^&[Q'a&aR(R']SnP!RQ#^oQ%O#[R&g%PZmPo!R#[%PQ$}#ZQ&e${R'd&dR$g!rQ'R%{R(Z'xR#OgR#QhR$s#QS&[$r&]R(P'[V&Y$r&]'[R#YkQ#`qR%S#`QcOSoP!RU!lco%PR%P#[Q%]#q[&l%]&r'i'q'r(aQ&r%aQ'i&mQ'q&wQ'r&yR(a(UQ$[!nQ$^!oQ$`!pV%v$[$^$`Q&Q$iR'X&QQ&v%iS'p&v(VR(V'qQ&n%]R'j&nQ&j%YR'h&jQ!QXR#m!QQ&d${R'c&dQ#]nS%Q#]%RR%R#^Q'y'RR(['yQ$m!yR&U$mQ&]$rR'_&]Q']&[R(Q']Q#XkR$y#XQ$P!dR%f$P_bOPco!R#[%P^XOPco!R#[%PQ!`]Q!a^Q#i|Q#j}Q#k!OQ#l!PQ$u#SQ%Y#pR'g&iR%^#qQ!rdQ!{f[$X!n!o!p$[$^$`Q${#Zh%[#q%]%a&m&r&w&y'i'q'r(U(aQ%`#vQ%z$cS&b${&dQ&h%WQ'b&cR'{'T]$Z!n!o!p$[$^$`Q!d`U!ye!r$gQ#RiQ#y!cS#|!d$PQ$R!eQ%d#}Q%e$OQ%i$SS&O$i&QQ&T$lR'n&uQ#{!cW%r$W%m&{'uQ&t%bQ'w'OQ(T'mR(c(YQ%u$WQ&z%mQ't&{R(X'uX%t$W%m&{'uR%k$SR%Z#pQpPR#o!RQ!zeQ$f!rR%}$g",
23572
+ nodeNames: "\u26A0 Unit VariableName VariableName QueryCallee Comment StyleSheet RuleSet UniversalSelector TagSelector TagName NamespacedTagSelector NamespaceName TagName NestingSelector ClassSelector . ClassName PseudoClassSelector : :: PseudoClassName PseudoClassName ) ( ArgList ValueName ParenthesizedValue AtKeyword # ; ] [ BracketedValue } { BracedValue ColorLiteral NumberLiteral StringLiteral BinaryExpression BinOp CallExpression Callee IfExpression if ArgList IfBranch KeywordQuery FeatureQuery FeatureName BinaryQuery LogicOp ComparisonQuery CompareOp UnaryQuery UnaryQueryOp ParenthesizedQuery SelectorQuery selector ParenthesizedSelector StyleQuery style ParenthesedQuery CallQuery ArgList , UnaryQuery ParenthesedQuery BinaryQuery ParenthesedQuery ParenthesedQuery StyleFeature StyleRange PseudoQuery CallLiteral CallTag ParenthesizedContent PseudoClassName ArgList IdSelector IdName AttributeSelector AttributeName NamespacedAttribute NamespaceName AttributeName MatchOp MatchFlag ChildSelector ChildOp DescendantSelector SiblingSelector SiblingOp Block Declaration PropertyName Important ImportStatement import Layer layer LayerName layer MediaStatement media CharsetStatement charset NamespaceStatement namespace NamespaceName KeyframesStatement keyframes KeyframeName KeyframeList KeyframeSelector KeyframeRangeName SupportsStatement supports ScopeStatement scope to FontFeatureStatement font-feature-values FontName AtRule Styles",
23573
+ maxTerm: 172,
23537
23574
  nodeProps: [
23538
23575
  ["isolate", -2, 5, 39, ""],
23539
23576
  ["openedBy", 23, "(", 31, "[", 34, "{"],
23540
23577
  ["closedBy", 24, ")", 32, "]", 35, "}"]
23541
23578
  ],
23542
23579
  propSources: [cssHighlighting],
23543
- skippedNodes: [0, 5, 117],
23580
+ skippedNodes: [0, 5, 127],
23544
23581
  repeatNodeCount: 17,
23545
- tokenData: "K`~R!bOX%ZX^&R^p%Zpq&Rqr)ers)vst+jtu2Xuv%Zvw3Rwx3dxy5Ryz5dz{5i{|6S|}:u}!O;W!O!P;u!P!Q<^!Q![=V![!]>Q!]!^>|!^!_?_!_!`@Z!`!a@n!a!b%Z!b!cAo!c!k%Z!k!lC|!l!u%Z!u!vC|!v!}%Z!}#OD_#O#P%Z#P#QDp#Q#R2X#R#]%Z#]#^ER#^#g%Z#g#hC|#h#o%Z#o#pIf#p#qIw#q#rJ`#r#sJq#s#y%Z#y#z&R#z$f%Z$f$g&R$g#BY%Z#BY#BZ&R#BZ$IS%Z$IS$I_&R$I_$I|%Z$I|$JO&R$JO$JT%Z$JT$JU&R$JU$KV%Z$KV$KW&R$KW&FU%Z&FU&FV&R&FV;'S%Z;'S;=`KY<%lO%Z`%^SOy%jz;'S%j;'S;=`%{<%lO%j`%oS!e`Oy%jz;'S%j;'S;=`%{<%lO%j`&OP;=`<%l%j~&Wh$Q~OX%jX^'r^p%jpq'rqy%jz#y%j#y#z'r#z$f%j$f$g'r$g#BY%j#BY#BZ'r#BZ$IS%j$IS$I_'r$I_$I|%j$I|$JO'r$JO$JT%j$JT$JU'r$JU$KV%j$KV$KW'r$KW&FU%j&FU&FV'r&FV;'S%j;'S;=`%{<%lO%j~'yh$Q~!e`OX%jX^'r^p%jpq'rqy%jz#y%j#y#z'r#z$f%j$f$g'r$g#BY%j#BY#BZ'r#BZ$IS%j$IS$I_'r$I_$I|%j$I|$JO'r$JO$JT%j$JT$JU'r$JU$KV%j$KV$KW'r$KW&FU%j&FU&FV'r&FV;'S%j;'S;=`%{<%lO%jj)jS$dYOy%jz;'S%j;'S;=`%{<%lO%j~)yWOY)vZr)vrs*cs#O)v#O#P*h#P;'S)v;'S;=`+d<%lO)v~*hOw~~*kRO;'S)v;'S;=`*t;=`O)v~*wXOY)vZr)vrs*cs#O)v#O#P*h#P;'S)v;'S;=`+d;=`<%l)v<%lO)v~+gP;=`<%l)vj+oYmYOy%jz!Q%j!Q![,_![!c%j!c!i,_!i#T%j#T#Z,_#Z;'S%j;'S;=`%{<%lO%jj,dY!e`Oy%jz!Q%j!Q![-S![!c%j!c!i-S!i#T%j#T#Z-S#Z;'S%j;'S;=`%{<%lO%jj-XY!e`Oy%jz!Q%j!Q![-w![!c%j!c!i-w!i#T%j#T#Z-w#Z;'S%j;'S;=`%{<%lO%jj.OYuY!e`Oy%jz!Q%j!Q![.n![!c%j!c!i.n!i#T%j#T#Z.n#Z;'S%j;'S;=`%{<%lO%jj.uYuY!e`Oy%jz!Q%j!Q![/e![!c%j!c!i/e!i#T%j#T#Z/e#Z;'S%j;'S;=`%{<%lO%jj/jY!e`Oy%jz!Q%j!Q![0Y![!c%j!c!i0Y!i#T%j#T#Z0Y#Z;'S%j;'S;=`%{<%lO%jj0aYuY!e`Oy%jz!Q%j!Q![1P![!c%j!c!i1P!i#T%j#T#Z1P#Z;'S%j;'S;=`%{<%lO%jj1UY!e`Oy%jz!Q%j!Q![1t![!c%j!c!i1t!i#T%j#T#Z1t#Z;'S%j;'S;=`%{<%lO%jj1{SuY!e`Oy%jz;'S%j;'S;=`%{<%lO%jd2[UOy%jz!_%j!_!`2n!`;'S%j;'S;=`%{<%lO%jd2uS!oS!e`Oy%jz;'S%j;'S;=`%{<%lO%jb3WS^QOy%jz;'S%j;'S;=`%{<%lO%j~3gWOY3dZw3dwx*cx#O3d#O#P4P#P;'S3d;'S;=`4{<%lO3d~4SRO;'S3d;'S;=`4];=`O3d~4`XOY3dZw3dwx*cx#O3d#O#P4P#P;'S3d;'S;=`4{;=`<%l3d<%lO3d~5OP;=`<%l3dj5WShYOy%jz;'S%j;'S;=`%{<%lO%j~5iOg~n5pUWQyWOy%jz!_%j!_!`2n!`;'S%j;'S;=`%{<%lO%jj6ZWyW!uQOy%jz!O%j!O!P6s!P!Q%j!Q![9x![;'S%j;'S;=`%{<%lO%jj6xU!e`Oy%jz!Q%j!Q![7[![;'S%j;'S;=`%{<%lO%jj7cY!e`$]YOy%jz!Q%j!Q![7[![!g%j!g!h8R!h#X%j#X#Y8R#Y;'S%j;'S;=`%{<%lO%jj8WY!e`Oy%jz{%j{|8v|}%j}!O8v!O!Q%j!Q![9_![;'S%j;'S;=`%{<%lO%jj8{U!e`Oy%jz!Q%j!Q![9_![;'S%j;'S;=`%{<%lO%jj9fU!e`$]YOy%jz!Q%j!Q![9_![;'S%j;'S;=`%{<%lO%jj:P[!e`$]YOy%jz!O%j!O!P7[!P!Q%j!Q![9x![!g%j!g!h8R!h#X%j#X#Y8R#Y;'S%j;'S;=`%{<%lO%jj:zS!aYOy%jz;'S%j;'S;=`%{<%lO%jj;]WyWOy%jz!O%j!O!P6s!P!Q%j!Q![9x![;'S%j;'S;=`%{<%lO%jj;zU`YOy%jz!Q%j!Q![7[![;'S%j;'S;=`%{<%lO%j~<cTyWOy%jz{<r{;'S%j;'S;=`%{<%lO%j~<yS!e`$R~Oy%jz;'S%j;'S;=`%{<%lO%jj=[[$]YOy%jz!O%j!O!P7[!P!Q%j!Q![9x![!g%j!g!h8R!h#X%j#X#Y8R#Y;'S%j;'S;=`%{<%lO%jj>VUcYOy%jz![%j![!]>i!];'S%j;'S;=`%{<%lO%jj>pSdY!e`Oy%jz;'S%j;'S;=`%{<%lO%jj?RSnYOy%jz;'S%j;'S;=`%{<%lO%jh?dU!WWOy%jz!_%j!_!`?v!`;'S%j;'S;=`%{<%lO%jh?}S!WW!e`Oy%jz;'S%j;'S;=`%{<%lO%jl@bS!WW!oSOy%jz;'S%j;'S;=`%{<%lO%jj@uV!rQ!WWOy%jz!_%j!_!`?v!`!aA[!a;'S%j;'S;=`%{<%lO%jbAcS!rQ!e`Oy%jz;'S%j;'S;=`%{<%lO%jjArYOy%jz}%j}!OBb!O!c%j!c!}CP!}#T%j#T#oCP#o;'S%j;'S;=`%{<%lO%jjBgW!e`Oy%jz!c%j!c!}CP!}#T%j#T#oCP#o;'S%j;'S;=`%{<%lO%jjCW[lY!e`Oy%jz}%j}!OCP!O!Q%j!Q![CP![!c%j!c!}CP!}#T%j#T#oCP#o;'S%j;'S;=`%{<%lO%jhDRS!pWOy%jz;'S%j;'S;=`%{<%lO%jjDdSpYOy%jz;'S%j;'S;=`%{<%lO%jnDuSo^Oy%jz;'S%j;'S;=`%{<%lO%jjEWU!pWOy%jz#a%j#a#bEj#b;'S%j;'S;=`%{<%lO%jbEoU!e`Oy%jz#d%j#d#eFR#e;'S%j;'S;=`%{<%lO%jbFWU!e`Oy%jz#c%j#c#dFj#d;'S%j;'S;=`%{<%lO%jbFoU!e`Oy%jz#f%j#f#gGR#g;'S%j;'S;=`%{<%lO%jbGWU!e`Oy%jz#h%j#h#iGj#i;'S%j;'S;=`%{<%lO%jbGoU!e`Oy%jz#T%j#T#UHR#U;'S%j;'S;=`%{<%lO%jbHWU!e`Oy%jz#b%j#b#cHj#c;'S%j;'S;=`%{<%lO%jbHoU!e`Oy%jz#h%j#h#iIR#i;'S%j;'S;=`%{<%lO%jbIYS$cQ!e`Oy%jz;'S%j;'S;=`%{<%lO%jjIkSsYOy%jz;'S%j;'S;=`%{<%lO%jfI|U$XUOy%jz!_%j!_!`2n!`;'S%j;'S;=`%{<%lO%jjJeSrYOy%jz;'S%j;'S;=`%{<%lO%jfJvU!uQOy%jz!_%j!_!`2n!`;'S%j;'S;=`%{<%lO%j`K]P;=`<%l%Z",
23546
- tokenizers: [descendant, unitToken, identifiers, queryIdentifiers, 1, 2, 3, 4, new LocalTokenGroup("m~RRYZ[z{a~~g~aO$T~~dP!P!Qg~lO$U~~", 28, 142)],
23547
- topRules: { "StyleSheet": [0, 6], "Styles": [1, 116] },
23548
- dynamicPrecedences: { "84": 1 },
23549
- specialized: [{ term: 137, get: (value) => spec_callee[value] || -1 }, { term: 138, get: (value) => spec_queryIdentifier[value] || -1 }, { term: 4, get: (value) => spec_QueryCallee[value] || -1 }, { term: 28, get: (value) => spec_AtKeyword[value] || -1 }, { term: 136, get: (value) => spec_identifier[value] || -1 }],
23550
- tokenPrec: 2256
23582
+ tokenData: "K`~R!bOX%ZX^&R^p%Zpq&Rqr)ers)vst+jtu2Xuv%Zvw3Rwx3dxy5Ryz5dz{5i{|6S|}:u}!O;W!O!P;u!P!Q<^!Q![=V![!]>Q!]!^>|!^!_?_!_!`@Z!`!a@n!a!b%Z!b!cAo!c!k%Z!k!lC|!l!u%Z!u!vC|!v!}%Z!}#OD_#O#P%Z#P#QDp#Q#R2X#R#]%Z#]#^ER#^#g%Z#g#hC|#h#o%Z#o#pIf#p#qIw#q#rJ`#r#sJq#s#y%Z#y#z&R#z$f%Z$f$g&R$g#BY%Z#BY#BZ&R#BZ$IS%Z$IS$I_&R$I_$I|%Z$I|$JO&R$JO$JT%Z$JT$JU&R$JU$KV%Z$KV$KW&R$KW&FU%Z&FU&FV&R&FV;'S%Z;'S;=`KY<%lO%Z`%^SOy%jz;'S%j;'S;=`%{<%lO%j`%oS!o`Oy%jz;'S%j;'S;=`%{<%lO%j`&OP;=`<%l%j~&Wh$[~OX%jX^'r^p%jpq'rqy%jz#y%j#y#z'r#z$f%j$f$g'r$g#BY%j#BY#BZ'r#BZ$IS%j$IS$I_'r$I_$I|%j$I|$JO'r$JO$JT%j$JT$JU'r$JU$KV%j$KV$KW'r$KW&FU%j&FU&FV'r&FV;'S%j;'S;=`%{<%lO%j~'yh$[~!o`OX%jX^'r^p%jpq'rqy%jz#y%j#y#z'r#z$f%j$f$g'r$g#BY%j#BY#BZ'r#BZ$IS%j$IS$I_'r$I_$I|%j$I|$JO'r$JO$JT%j$JT$JU'r$JU$KV%j$KV$KW'r$KW&FU%j&FU&FV'r&FV;'S%j;'S;=`%{<%lO%jj)jS$qYOy%jz;'S%j;'S;=`%{<%lO%j~)yWOY)vZr)vrs*cs#O)v#O#P*h#P;'S)v;'S;=`+d<%lO)v~*hOw~~*kRO;'S)v;'S;=`*t;=`O)v~*wXOY)vZr)vrs*cs#O)v#O#P*h#P;'S)v;'S;=`+d;=`<%l)v<%lO)v~+gP;=`<%l)vj+oYmYOy%jz!Q%j!Q![,_![!c%j!c!i,_!i#T%j#T#Z,_#Z;'S%j;'S;=`%{<%lO%jj,dY!o`Oy%jz!Q%j!Q![-S![!c%j!c!i-S!i#T%j#T#Z-S#Z;'S%j;'S;=`%{<%lO%jj-XY!o`Oy%jz!Q%j!Q![-w![!c%j!c!i-w!i#T%j#T#Z-w#Z;'S%j;'S;=`%{<%lO%jj.OYuY!o`Oy%jz!Q%j!Q![.n![!c%j!c!i.n!i#T%j#T#Z.n#Z;'S%j;'S;=`%{<%lO%jj.uYuY!o`Oy%jz!Q%j!Q![/e![!c%j!c!i/e!i#T%j#T#Z/e#Z;'S%j;'S;=`%{<%lO%jj/jY!o`Oy%jz!Q%j!Q![0Y![!c%j!c!i0Y!i#T%j#T#Z0Y#Z;'S%j;'S;=`%{<%lO%jj0aYuY!o`Oy%jz!Q%j!Q![1P![!c%j!c!i1P!i#T%j#T#Z1P#Z;'S%j;'S;=`%{<%lO%jj1UY!o`Oy%jz!Q%j!Q![1t![!c%j!c!i1t!i#T%j#T#Z1t#Z;'S%j;'S;=`%{<%lO%jj1{SuY!o`Oy%jz;'S%j;'S;=`%{<%lO%jd2[UOy%jz!_%j!_!`2n!`;'S%j;'S;=`%{<%lO%jd2uS!yS!o`Oy%jz;'S%j;'S;=`%{<%lO%jb3WS^QOy%jz;'S%j;'S;=`%{<%lO%j~3gWOY3dZw3dwx*cx#O3d#O#P4P#P;'S3d;'S;=`4{<%lO3d~4SRO;'S3d;'S;=`4];=`O3d~4`XOY3dZw3dwx*cx#O3d#O#P4P#P;'S3d;'S;=`4{;=`<%l3d<%lO3d~5OP;=`<%l3dj5WShYOy%jz;'S%j;'S;=`%{<%lO%j~5iOg~n5pUWQyWOy%jz!_%j!_!`2n!`;'S%j;'S;=`%{<%lO%jj6ZWyW#PQOy%jz!O%j!O!P6s!P!Q%j!Q![9x![;'S%j;'S;=`%{<%lO%jj6xU!o`Oy%jz!Q%j!Q![7[![;'S%j;'S;=`%{<%lO%jj7cY!o`$gYOy%jz!Q%j!Q![7[![!g%j!g!h8R!h#X%j#X#Y8R#Y;'S%j;'S;=`%{<%lO%jj8WY!o`Oy%jz{%j{|8v|}%j}!O8v!O!Q%j!Q![9_![;'S%j;'S;=`%{<%lO%jj8{U!o`Oy%jz!Q%j!Q![9_![;'S%j;'S;=`%{<%lO%jj9fU!o`$gYOy%jz!Q%j!Q![9_![;'S%j;'S;=`%{<%lO%jj:P[!o`$gYOy%jz!O%j!O!P7[!P!Q%j!Q![9x![!g%j!g!h8R!h#X%j#X#Y8R#Y;'S%j;'S;=`%{<%lO%jj:zS!dYOy%jz;'S%j;'S;=`%{<%lO%jj;]WyWOy%jz!O%j!O!P6s!P!Q%j!Q![9x![;'S%j;'S;=`%{<%lO%jj;zU`YOy%jz!Q%j!Q![7[![;'S%j;'S;=`%{<%lO%j~<cTyWOy%jz{<r{;'S%j;'S;=`%{<%lO%j~<yS!o`$]~Oy%jz;'S%j;'S;=`%{<%lO%jj=[[$gYOy%jz!O%j!O!P7[!P!Q%j!Q![9x![!g%j!g!h8R!h#X%j#X#Y8R#Y;'S%j;'S;=`%{<%lO%jj>VUcYOy%jz![%j![!]>i!];'S%j;'S;=`%{<%lO%jj>pSdY!o`Oy%jz;'S%j;'S;=`%{<%lO%jj?RSnYOy%jz;'S%j;'S;=`%{<%lO%jh?dU!WWOy%jz!_%j!_!`?v!`;'S%j;'S;=`%{<%lO%jh?}S!WW!o`Oy%jz;'S%j;'S;=`%{<%lO%jl@bS!WW!ySOy%jz;'S%j;'S;=`%{<%lO%jj@uV!|Q!WWOy%jz!_%j!_!`?v!`!aA[!a;'S%j;'S;=`%{<%lO%jbAcS!|Q!o`Oy%jz;'S%j;'S;=`%{<%lO%jjArYOy%jz}%j}!OBb!O!c%j!c!}CP!}#T%j#T#oCP#o;'S%j;'S;=`%{<%lO%jjBgW!o`Oy%jz!c%j!c!}CP!}#T%j#T#oCP#o;'S%j;'S;=`%{<%lO%jjCW[lY!o`Oy%jz}%j}!OCP!O!Q%j!Q![CP![!c%j!c!}CP!}#T%j#T#oCP#o;'S%j;'S;=`%{<%lO%jhDRS!zWOy%jz;'S%j;'S;=`%{<%lO%jjDdSpYOy%jz;'S%j;'S;=`%{<%lO%jnDuSo^Oy%jz;'S%j;'S;=`%{<%lO%jjEWU!zWOy%jz#a%j#a#bEj#b;'S%j;'S;=`%{<%lO%jbEoU!o`Oy%jz#d%j#d#eFR#e;'S%j;'S;=`%{<%lO%jbFWU!o`Oy%jz#c%j#c#dFj#d;'S%j;'S;=`%{<%lO%jbFoU!o`Oy%jz#f%j#f#gGR#g;'S%j;'S;=`%{<%lO%jbGWU!o`Oy%jz#h%j#h#iGj#i;'S%j;'S;=`%{<%lO%jbGoU!o`Oy%jz#T%j#T#UHR#U;'S%j;'S;=`%{<%lO%jbHWU!o`Oy%jz#b%j#b#cHj#c;'S%j;'S;=`%{<%lO%jbHoU!o`Oy%jz#h%j#h#iIR#i;'S%j;'S;=`%{<%lO%jbIYS$pQ!o`Oy%jz;'S%j;'S;=`%{<%lO%jjIkSsYOy%jz;'S%j;'S;=`%{<%lO%jfI|U$cUOy%jz!_%j!_!`2n!`;'S%j;'S;=`%{<%lO%jjJeSrYOy%jz;'S%j;'S;=`%{<%lO%jfJvU#PQOy%jz!_%j!_!`2n!`;'S%j;'S;=`%{<%lO%j`K]P;=`<%l%Z",
23583
+ tokenizers: [descendant, unitToken, identifiers, queryIdentifiers, 1, 2, 3, 4, new LocalTokenGroup("m~RRYZ[z{a~~g~aO$_~~dP!P!Qg~lO$`~~", 28, 152)],
23584
+ topRules: { "StyleSheet": [0, 6], "Styles": [1, 126] },
23585
+ dynamicPrecedences: { "94": 1 },
23586
+ specialized: [{ term: 147, get: (value) => spec_callee[value] || -1 }, { term: 148, get: (value) => spec_queryIdentifier[value] || -1 }, { term: 4, get: (value) => spec_QueryCallee[value] || -1 }, { term: 28, get: (value) => spec_AtKeyword[value] || -1 }, { term: 146, get: (value) => spec_identifier[value] || -1 }],
23587
+ tokenPrec: 2405
23551
23588
  });
23552
23589
 
23553
23590
  // ../../node_modules/@codemirror/lang-css/dist/index.js
@@ -26409,7 +26446,7 @@ function CodeMirrorRenderer({
26409
26446
  segmentsByIdRef.current = segmentsById;
26410
26447
  sessionRef.current = session;
26411
26448
  getTargetResourceNameRef.current = getTargetResourceName;
26412
- useEffect17(() => {
26449
+ useEffect18(() => {
26413
26450
  if (!containerRef.current || viewRef.current) return;
26414
26451
  const annotationDecorationsField = createAnnotationDecorationsField();
26415
26452
  const state = EditorState.create({
@@ -26544,7 +26581,7 @@ function CodeMirrorRenderer({
26544
26581
  viewRef.current = null;
26545
26582
  };
26546
26583
  }, [hoverDelayMs]);
26547
- useEffect17(() => {
26584
+ useEffect18(() => {
26548
26585
  if (!viewRef.current) return;
26549
26586
  const currentContent = viewRef.current.state.doc.toString();
26550
26587
  if (content2 === currentContent) return;
@@ -26560,19 +26597,19 @@ function CodeMirrorRenderer({
26560
26597
  });
26561
26598
  contentRef.current = content2;
26562
26599
  }, [content2]);
26563
- useEffect17(() => {
26600
+ useEffect18(() => {
26564
26601
  if (!viewRef.current) return;
26565
26602
  viewRef.current.dispatch({
26566
26603
  effects: lineNumbersCompartment.current.reconfigure(showLineNumbers ? lineNumbers() : [])
26567
26604
  });
26568
26605
  }, [showLineNumbers]);
26569
- useEffect17(() => {
26606
+ useEffect18(() => {
26570
26607
  if (!viewRef.current) return;
26571
26608
  viewRef.current.dispatch({
26572
26609
  effects: updateAnnotationsEffect.of({ segments: convertedSegments, ...newAnnotationIds && { newAnnotationIds } })
26573
26610
  });
26574
26611
  }, [convertedSegments, newAnnotationIds]);
26575
- useEffect17(() => {
26612
+ useEffect18(() => {
26576
26613
  if (!viewRef.current || !enableWidgets) return;
26577
26614
  viewRef.current.dispatch({
26578
26615
  effects: updateWidgetsEffect.of({
@@ -26583,7 +26620,7 @@ function CodeMirrorRenderer({
26583
26620
  })
26584
26621
  });
26585
26622
  }, [content2, convertedSegments, enableWidgets, generatingReferenceId]);
26586
- useEffect17(() => {
26623
+ useEffect18(() => {
26587
26624
  if (!viewRef.current || !hoveredAnnotationId) return void 0;
26588
26625
  const view = viewRef.current;
26589
26626
  const element = view.contentDOM.querySelector(
@@ -26611,7 +26648,7 @@ function CodeMirrorRenderer({
26611
26648
  element.classList.remove("annotation-pulse");
26612
26649
  };
26613
26650
  }, [hoveredAnnotationId]);
26614
- useEffect17(() => {
26651
+ useEffect18(() => {
26615
26652
  if (!viewRef.current || !scrollToAnnotationId) return;
26616
26653
  scrollAnnotationIntoView(scrollToAnnotationId, viewRef.current.contentDOM);
26617
26654
  }, [scrollToAnnotationId]);
@@ -26850,7 +26887,7 @@ function ProtectedErrorFallback({ error, resetErrorBoundary }) {
26850
26887
  }
26851
26888
 
26852
26889
  // src/components/ResizeHandle.tsx
26853
- import { useRef as useRef10, useCallback as useCallback14, useEffect as useEffect18, useState as useState18 } from "react";
26890
+ import { useRef as useRef10, useCallback as useCallback14, useEffect as useEffect19, useState as useState19 } from "react";
26854
26891
  import { jsx as jsx10 } from "react/jsx-runtime";
26855
26892
  function ResizeHandle({
26856
26893
  onResize,
@@ -26859,11 +26896,11 @@ function ResizeHandle({
26859
26896
  position = "left",
26860
26897
  ariaLabel = "Resize panel"
26861
26898
  }) {
26862
- const [isDragging, setIsDragging] = useState18(false);
26899
+ const [isDragging, setIsDragging] = useState19(false);
26863
26900
  const startXRef = useRef10(0);
26864
26901
  const startWidthRef = useRef10(0);
26865
26902
  const onResizeRef = useRef10(onResize);
26866
- useEffect18(() => {
26903
+ useEffect19(() => {
26867
26904
  onResizeRef.current = onResize;
26868
26905
  });
26869
26906
  const handleMouseDown = useCallback14((e6) => {
@@ -26914,7 +26951,7 @@ function ResizeHandle({
26914
26951
  onResizeRef.current(constrainedWidth);
26915
26952
  }
26916
26953
  }, [minWidth, maxWidth, position]);
26917
- useEffect18(() => {
26954
+ useEffect19(() => {
26918
26955
  if (isDragging) {
26919
26956
  document.addEventListener("mousemove", handleMouseMove);
26920
26957
  document.addEventListener("mouseup", handleMouseUp);
@@ -26945,7 +26982,7 @@ function ResizeHandle({
26945
26982
  }
26946
26983
 
26947
26984
  // src/components/ResourceTagsInline.tsx
26948
- import { useState as useState19 } from "react";
26985
+ import { useState as useState20 } from "react";
26949
26986
  import { jsx as jsx11, jsxs as jsxs5 } from "react/jsx-runtime";
26950
26987
  function ResourceTagsInline({
26951
26988
  tags: tags3,
@@ -26954,8 +26991,8 @@ function ResourceTagsInline({
26954
26991
  disabled = false,
26955
26992
  vocabulary
26956
26993
  }) {
26957
- const [busy, setBusy] = useState19(false);
26958
- const [picking, setPicking] = useState19(false);
26994
+ const [busy, setBusy] = useState20(false);
26995
+ const [picking, setPicking] = useState20(false);
26959
26996
  if (!isEditing) {
26960
26997
  if (tags3.length === 0) {
26961
26998
  return null;
@@ -27140,7 +27177,7 @@ function Toolbar({
27140
27177
  }
27141
27178
 
27142
27179
  // src/components/settings/SettingsPanel.tsx
27143
- import React5, { useEffect as useEffect19 } from "react";
27180
+ import React5, { useEffect as useEffect20 } from "react";
27144
27181
  import { LOCALES } from "@semiont/core";
27145
27182
  import { jsx as jsx13, jsxs as jsxs7 } from "react/jsx-runtime";
27146
27183
  function SettingsPanel({
@@ -27159,7 +27196,7 @@ function SettingsPanel({
27159
27196
  announceLanguageChanging(localeName);
27160
27197
  semiont.emit("settings:locale-changed", { locale: newLocale });
27161
27198
  };
27162
- useEffect19(() => {
27199
+ useEffect20(() => {
27163
27200
  if (locale !== previousLocale && !isPendingLocaleChange) {
27164
27201
  const localeName = LOCALES.find((l10) => l10.code === locale)?.nativeName || locale;
27165
27202
  announceLanguageChanged(localeName);
@@ -27278,7 +27315,7 @@ function SettingsPanel({
27278
27315
  }
27279
27316
 
27280
27317
  // src/components/annotation/AnnotateToolbar.tsx
27281
- import React6, { useState as useState20, useRef as useRef11, useEffect as useEffect20 } from "react";
27318
+ import React6, { useState as useState21, useRef as useRef11, useEffect as useEffect21 } from "react";
27282
27319
  import { Fragment as Fragment2, jsx as jsx14, jsxs as jsxs8 } from "react/jsx-runtime";
27283
27320
  function DropdownGroup({
27284
27321
  label,
@@ -27355,14 +27392,14 @@ function AnnotateToolbar({
27355
27392
  const annotator = Object.values(annotators).find((a15) => a15.motivation === motivation);
27356
27393
  return annotator?.iconEmoji || "\u2753";
27357
27394
  };
27358
- const [modeHovered, setModeHovered] = useState20(false);
27359
- const [modePinned, setModePinned] = useState20(false);
27360
- const [clickHovered, setClickHovered] = useState20(false);
27361
- const [clickPinned, setClickPinned] = useState20(false);
27362
- const [selectionHovered, setSelectionHovered] = useState20(false);
27363
- const [selectionPinned, setSelectionPinned] = useState20(false);
27364
- const [shapeHovered, setShapeHovered] = useState20(false);
27365
- const [shapePinned, setShapePinned] = useState20(false);
27395
+ const [modeHovered, setModeHovered] = useState21(false);
27396
+ const [modePinned, setModePinned] = useState21(false);
27397
+ const [clickHovered, setClickHovered] = useState21(false);
27398
+ const [clickPinned, setClickPinned] = useState21(false);
27399
+ const [selectionHovered, setSelectionHovered] = useState21(false);
27400
+ const [selectionPinned, setSelectionPinned] = useState21(false);
27401
+ const [shapeHovered, setShapeHovered] = useState21(false);
27402
+ const [shapePinned, setShapePinned] = useState21(false);
27366
27403
  const modeRef = useRef11(null);
27367
27404
  const clickRef = useRef11(null);
27368
27405
  const selectionRef = useRef11(null);
@@ -27371,7 +27408,7 @@ function AnnotateToolbar({
27371
27408
  const clickExpanded = clickHovered || clickPinned;
27372
27409
  const selectionExpanded = selectionHovered || selectionPinned;
27373
27410
  const shapeExpanded = shapeHovered || shapePinned;
27374
- useEffect20(() => {
27411
+ useEffect21(() => {
27375
27412
  const handleClickOutside = (event) => {
27376
27413
  if (modePinned && modeRef.current && !modeRef.current.contains(event.target)) {
27377
27414
  setModePinned(false);
@@ -27389,7 +27426,7 @@ function AnnotateToolbar({
27389
27426
  document.addEventListener("mousedown", handleClickOutside);
27390
27427
  return () => document.removeEventListener("mousedown", handleClickOutside);
27391
27428
  }, [modePinned, clickPinned, selectionPinned, shapePinned]);
27392
- useEffect20(() => {
27429
+ useEffect21(() => {
27393
27430
  const handleEscape = (event) => {
27394
27431
  if (event.key === "Escape") {
27395
27432
  setModePinned(false);
@@ -27569,7 +27606,7 @@ function AnnotateToolbar({
27569
27606
  }
27570
27607
 
27571
27608
  // src/components/annotation-popups/JsonLdView.tsx
27572
- import { useEffect as useEffect21, useRef as useRef12 } from "react";
27609
+ import { useEffect as useEffect22, useRef as useRef12 } from "react";
27573
27610
 
27574
27611
  // ../../node_modules/@lezer/json/dist/index.js
27575
27612
  var jsonHighlighting = styleTags({
@@ -27777,10 +27814,10 @@ function JsonLdView({ annotation, onBack }) {
27777
27814
  const viewRef = useRef12(null);
27778
27815
  const { showLineNumbers } = useLineNumbers();
27779
27816
  const onBackRef = useRef12(onBack);
27780
- useEffect21(() => {
27817
+ useEffect22(() => {
27781
27818
  onBackRef.current = onBack;
27782
27819
  });
27783
- useEffect21(() => {
27820
+ useEffect22(() => {
27784
27821
  const handleKeyDown = (e6) => {
27785
27822
  if (e6.key === "Escape") {
27786
27823
  onBackRef.current();
@@ -27789,7 +27826,7 @@ function JsonLdView({ annotation, onBack }) {
27789
27826
  window.addEventListener("keydown", handleKeyDown);
27790
27827
  return () => window.removeEventListener("keydown", handleKeyDown);
27791
27828
  }, []);
27792
- useEffect21(() => {
27829
+ useEffect22(() => {
27793
27830
  if (!editorRef.current) return;
27794
27831
  const isDarkMode = document.documentElement.classList.contains("dark");
27795
27832
  const jsonContent = JSON.stringify(annotation, null, 2);
@@ -29445,7 +29482,7 @@ function PopupContainer({ children, position, onClose, isOpen, wide = false }) {
29445
29482
  }
29446
29483
 
29447
29484
  // src/components/image-annotation/AnnotationOverlay.tsx
29448
- import { useMemo as useMemo5 } from "react";
29485
+ import { useMemo as useMemo6 } from "react";
29449
29486
  import { getSvgSelector, isHighlight as isHighlight4, isReference as isReference5, isAssessment as isAssessment3, isComment as isComment4, isTag as isTag4, isBodyResolved, isResolvedReference as isResolvedReference3 } from "@semiont/core";
29450
29487
  import { createHoverHandlers as createHoverHandlers2 } from "@semiont/sdk";
29451
29488
  import { parseSvgSelector } from "@semiont/core";
@@ -29493,7 +29530,7 @@ function AnnotationOverlay({
29493
29530
  }) {
29494
29531
  const scaleX = displayWidth / imageWidth;
29495
29532
  const scaleY = displayHeight / imageHeight;
29496
- const { handleMouseEnter, handleMouseLeave } = useMemo5(
29533
+ const { handleMouseEnter, handleMouseLeave } = useMemo6(
29497
29534
  () => createHoverHandlers2((id2) => session?.client.beckon.hover(id2), hoverDelayMs),
29498
29535
  [session, hoverDelayMs]
29499
29536
  );
@@ -29662,7 +29699,7 @@ function AnnotationOverlay({
29662
29699
  }
29663
29700
 
29664
29701
  // src/components/image-annotation/SvgDrawingCanvas.tsx
29665
- import { useRef as useRef13, useState as useState22, useEffect as useEffect23, useCallback as useCallback15 } from "react";
29702
+ import { useRef as useRef13, useState as useState23, useEffect as useEffect24, useCallback as useCallback15 } from "react";
29666
29703
  import { createRectangleSvg, createCircleSvg, createPolygonSvg, scaleSvgToNative, parseSvgSelector as parseSvgSelector2, resourceId as toResourceId3 } from "@semiont/core";
29667
29704
  import { jsx as jsx18, jsxs as jsxs12 } from "react/jsx-runtime";
29668
29705
  function getMotivationColor(motivation) {
@@ -29699,12 +29736,12 @@ function SvgDrawingCanvas({
29699
29736
  const { hoverDelayMs } = useHoverDelay();
29700
29737
  const containerRef = useRef13(null);
29701
29738
  const imageRef = useRef13(null);
29702
- const [imageDimensions, setImageDimensions] = useState22(null);
29703
- const [displayDimensions, setDisplayDimensions] = useState22(null);
29704
- const [isDrawing, setIsDrawing] = useState22(false);
29705
- const [startPoint, setStartPoint] = useState22(null);
29706
- const [currentPoint, setCurrentPoint] = useState22(null);
29707
- useEffect23(() => {
29739
+ const [imageDimensions, setImageDimensions] = useState23(null);
29740
+ const [displayDimensions, setDisplayDimensions] = useState23(null);
29741
+ const [isDrawing, setIsDrawing] = useState23(false);
29742
+ const [startPoint, setStartPoint] = useState23(null);
29743
+ const [currentPoint, setCurrentPoint] = useState23(null);
29744
+ useEffect24(() => {
29708
29745
  const img = new Image();
29709
29746
  img.onload = () => {
29710
29747
  setImageDimensions({
@@ -29714,7 +29751,7 @@ function SvgDrawingCanvas({
29714
29751
  };
29715
29752
  img.src = imageUrl;
29716
29753
  }, [imageUrl]);
29717
- useEffect23(() => {
29754
+ useEffect24(() => {
29718
29755
  const updateDisplayDimensions = () => {
29719
29756
  if (imageRef.current) {
29720
29757
  setDisplayDimensions({
@@ -30331,7 +30368,7 @@ function SessionExpiredModal() {
30331
30368
  }
30332
30369
 
30333
30370
  // src/components/resource/AnnotateView.tsx
30334
- import { useRef as useRef14, useEffect as useEffect24, useCallback as useCallback16, lazy, Suspense } from "react";
30371
+ import { useRef as useRef14, useEffect as useEffect25, useCallback as useCallback16, lazy, Suspense } from "react";
30335
30372
  import { capabilitiesOf as capabilitiesOf3, resourceId as toResourceId4 } from "@semiont/core";
30336
30373
 
30337
30374
  // src/lib/text-segmentation.ts
@@ -30484,7 +30521,7 @@ function AnnotateView({
30484
30521
  useSessionEventSubscriptions(session, {
30485
30522
  "beckon:hover": handleAnnotationHover
30486
30523
  });
30487
- useEffect24(() => {
30524
+ useEffect25(() => {
30488
30525
  const container = containerRef.current;
30489
30526
  if (!container) return;
30490
30527
  let clickedOnAnnotation = false;
@@ -30658,11 +30695,11 @@ function AnnotateView({
30658
30695
  }
30659
30696
 
30660
30697
  // src/components/resource/AnnotationHistory.tsx
30661
- import { useEffect as useEffect26, useRef as useRef16 } from "react";
30698
+ import { useEffect as useEffect27, useRef as useRef16 } from "react";
30662
30699
  import { getAnnotationUriFromEvent as getAnnotationUriFromEvent2 } from "@semiont/core";
30663
30700
 
30664
30701
  // src/components/resource/HistoryEvent.tsx
30665
- import { useRef as useRef15, useCallback as useCallback17, useEffect as useEffect25 } from "react";
30702
+ import { useRef as useRef15, useCallback as useCallback17, useEffect as useEffect26 } from "react";
30666
30703
  import { getAnnotationUriFromEvent } from "@semiont/core";
30667
30704
 
30668
30705
  // src/components/resource/event-formatting.ts
@@ -30918,7 +30955,7 @@ function HistoryEvent({
30918
30955
  const entityTypes = getEventEntityTypes(event);
30919
30956
  const hoverTimeoutRef = useRef15(null);
30920
30957
  const onEventHoverRef = useRef15(onEventHover);
30921
- useEffect25(() => {
30958
+ useEffect26(() => {
30922
30959
  onEventHoverRef.current = onEventHover;
30923
30960
  });
30924
30961
  const handleEmojiMouseEnter = useCallback17(() => {
@@ -31024,7 +31061,7 @@ function AnnotationHistory({ rUri, hoveredAnnotationId, onEventHover, onEventCli
31024
31061
  const events2 = !eventsData ? [] : eventsData.filter((e6) => {
31025
31062
  return e6.type !== "job:started" && e6.type !== "job:progress" && e6.type !== "job:completed";
31026
31063
  }).sort((a15, b8) => a15.metadata.sequenceNumber - b8.metadata.sequenceNumber);
31027
- useEffect26(() => {
31064
+ useEffect27(() => {
31028
31065
  if (containerRef.current && events2.length > 0) {
31029
31066
  requestAnimationFrame(() => {
31030
31067
  if (containerRef.current) {
@@ -31033,7 +31070,7 @@ function AnnotationHistory({ rUri, hoveredAnnotationId, onEventHover, onEventCli
31033
31070
  });
31034
31071
  }
31035
31072
  }, [events2.length]);
31036
- useEffect26(() => {
31073
+ useEffect27(() => {
31037
31074
  if (!hoveredAnnotationId) return;
31038
31075
  const eventElement = eventRefs.current.get(hoveredAnnotationId);
31039
31076
  if (eventElement && containerRef.current) {
@@ -31091,7 +31128,7 @@ function AnnotationHistory({ rUri, hoveredAnnotationId, onEventHover, onEventCli
31091
31128
  }
31092
31129
 
31093
31130
  // src/components/resource/BrowseView.tsx
31094
- import { useEffect as useEffect27, useRef as useRef17, useCallback as useCallback18, useMemo as useMemo6, memo as memo2 } from "react";
31131
+ import { useEffect as useEffect28, useRef as useRef17, useCallback as useCallback18, useMemo as useMemo7, memo as memo2 } from "react";
31095
31132
  import { annotationId as toAnnotationId3, resourceId as toResourceId5 } from "@semiont/core";
31096
31133
  import { capabilitiesOf as capabilitiesOf4, getBodySource as getBodySource4, isResolvedReference as isResolvedReference4 } from "@semiont/core";
31097
31134
  import { createHoverHandlers as createHoverHandlers3 } from "@semiont/sdk";
@@ -31164,15 +31201,15 @@ var BrowseView = memo2(function BrowseView2({
31164
31201
  const inlineMod = inline ? " semiont-browse-view--inline" : "";
31165
31202
  const render = capabilitiesOf4(mimeType)?.render ?? "none";
31166
31203
  const { highlights, references, assessments, comments, tags: tags3 } = annotations;
31167
- const allAnnotations = useMemo6(
31204
+ const allAnnotations = useMemo7(
31168
31205
  () => [...highlights, ...references, ...assessments, ...comments, ...tags3],
31169
31206
  [highlights, references, assessments, comments, tags3]
31170
31207
  );
31171
- const overlayAnnotations = useMemo6(
31208
+ const overlayAnnotations = useMemo7(
31172
31209
  () => toOverlayAnnotations(allAnnotations),
31173
31210
  [allAnnotations]
31174
31211
  );
31175
- useEffect27(() => {
31212
+ useEffect28(() => {
31176
31213
  if (!containerRef.current || overlayAnnotations.length === 0) return;
31177
31214
  const container = containerRef.current;
31178
31215
  const offsetMap = buildSourceToRenderedMap(content2, container);
@@ -31181,7 +31218,7 @@ var BrowseView = memo2(function BrowseView2({
31181
31218
  applyHighlights(ranges);
31182
31219
  return () => clearHighlights(container);
31183
31220
  }, [content2, overlayAnnotations]);
31184
- useEffect27(() => {
31221
+ useEffect28(() => {
31185
31222
  if (!containerRef.current) return;
31186
31223
  if (!session) return;
31187
31224
  const container = containerRef.current;
@@ -31334,7 +31371,7 @@ var BrowseView = memo2(function BrowseView2({
31334
31371
  });
31335
31372
 
31336
31373
  // src/components/resource/ResourceViewer.tsx
31337
- import { useState as useState23, useCallback as useCallback19, useRef as useRef18, useMemo as useMemo7 } from "react";
31374
+ import { useState as useState24, useCallback as useCallback19, useRef as useRef18, useMemo as useMemo8 } from "react";
31338
31375
  import { getExactText as getExactText3, getTargetSelector as getTargetSelector4, isHighlight as isHighlight5, isAssessment as isAssessment4, isReference as isReference6, isComment as isComment5, isTag as isTag5, getBodySource as getBodySource5 } from "@semiont/core";
31339
31376
  import { jsx as jsx27, jsxs as jsxs20 } from "react/jsx-runtime";
31340
31377
  function ResourceViewer({
@@ -31376,7 +31413,7 @@ function ResourceViewer({
31376
31413
  return "text/plain";
31377
31414
  };
31378
31415
  const mimeType = getMimeType();
31379
- const [internalAnnotateMode, setInternalAnnotateMode] = useState23(false);
31416
+ const [internalAnnotateMode, setInternalAnnotateMode] = useState24(false);
31380
31417
  const annotateMode = annotateModeProp ?? internalAnnotateMode;
31381
31418
  const changeAnnotateMode = useCallback19((mode) => {
31382
31419
  if (annotateModeProp === void 0) setInternalAnnotateMode(mode);
@@ -31393,30 +31430,30 @@ function ResourceViewer({
31393
31430
  const handleAnnotateBodyUpdated = useCallback19(() => {
31394
31431
  semiont?.browse.invalidateAnnotationList(rUri);
31395
31432
  }, [semiont, rUri]);
31396
- const [internalSelectionMotivation, setInternalSelectionMotivation] = useState23("linking");
31433
+ const [internalSelectionMotivation, setInternalSelectionMotivation] = useState24("linking");
31397
31434
  const selectedMotivation = selectionMotivationProp !== void 0 ? selectionMotivationProp : internalSelectionMotivation;
31398
31435
  const changeSelectionMotivation = useCallback19((motivation) => {
31399
31436
  if (selectionMotivationProp === void 0) setInternalSelectionMotivation(motivation);
31400
31437
  onSelectionMotivationChange?.(motivation);
31401
31438
  }, [selectionMotivationProp, onSelectionMotivationChange]);
31402
- const [internalClickAction, setInternalClickAction] = useState23("detail");
31439
+ const [internalClickAction, setInternalClickAction] = useState24("detail");
31403
31440
  const selectedClick = clickActionProp ?? internalClickAction;
31404
31441
  const changeClickAction = useCallback19((action) => {
31405
31442
  if (clickActionProp === void 0) setInternalClickAction(action);
31406
31443
  onClickActionChange?.(action);
31407
31444
  }, [clickActionProp, onClickActionChange]);
31408
- const [internalShape, setInternalShape] = useState23("rectangle");
31445
+ const [internalShape, setInternalShape] = useState24("rectangle");
31409
31446
  const selectedShape = shapeProp ?? internalShape;
31410
31447
  const changeShape = useCallback19((shape) => {
31411
31448
  if (shapeProp === void 0) setInternalShape(shape);
31412
31449
  onShapeChange?.(shape);
31413
31450
  }, [shapeProp, onShapeChange]);
31414
- const [showJsonLdView, setShowJsonLdView] = useState23(false);
31415
- const [jsonLdAnnotation, setJsonLdAnnotation] = useState23(null);
31416
- const [deleteConfirmation, setDeleteConfirmation] = useState23(null);
31451
+ const [showJsonLdView, setShowJsonLdView] = useState24(false);
31452
+ const [jsonLdAnnotation, setJsonLdAnnotation] = useState24(null);
31453
+ const [deleteConfirmation, setDeleteConfirmation] = useState24(null);
31417
31454
  const hoveredAnnotationId = hoveredAnnotationIdProp ?? null;
31418
- const [scrollToAnnotationId, setScrollToAnnotationId] = useState23(null);
31419
- const [_focusedAnnotationId, setFocusedAnnotationId] = useState23(null);
31455
+ const [scrollToAnnotationId, setScrollToAnnotationId] = useState24(null);
31456
+ const [_focusedAnnotationId, setFocusedAnnotationId] = useState24(null);
31420
31457
  const focusAnnotation = useCallback19((annotationId2) => {
31421
31458
  setFocusedAnnotationId(annotationId2);
31422
31459
  setScrollToAnnotationId(annotationId2);
@@ -31493,7 +31530,7 @@ function ResourceViewer({
31493
31530
  // Annotation clicks
31494
31531
  "browse:click": handleAnnotationClickEvent
31495
31532
  });
31496
- const annotationsCollection = useMemo7(
31533
+ const annotationsCollection = useMemo8(
31497
31534
  () => ({ highlights, references, assessments, comments, tags: tags3 }),
31498
31535
  [highlights, references, assessments, comments, tags3]
31499
31536
  );
@@ -31713,11 +31750,11 @@ function AssessmentEntry({
31713
31750
  }
31714
31751
 
31715
31752
  // src/components/resource/panels/AssessmentPanel.tsx
31716
- import { useState as useState25, useEffect as useEffect29, useRef as useRef19, useCallback as useCallback21, useMemo as useMemo8 } from "react";
31753
+ import { useState as useState26, useEffect as useEffect30, useRef as useRef19, useCallback as useCallback21, useMemo as useMemo9 } from "react";
31717
31754
  import { getTextPositionSelector as getTextPositionSelector3, getTargetSelector as getTargetSelector5 } from "@semiont/core";
31718
31755
 
31719
31756
  // src/components/resource/panels/AssistSection.tsx
31720
- import { useState as useState24, useEffect as useEffect28, useCallback as useCallback20 } from "react";
31757
+ import { useState as useState25, useEffect as useEffect29, useCallback as useCallback20 } from "react";
31721
31758
  import { Fragment as Fragment4, jsx as jsx29, jsxs as jsxs22 } from "react/jsx-runtime";
31722
31759
  function AssistSection({
31723
31760
  session,
@@ -31729,17 +31766,17 @@ function AssistSection({
31729
31766
  }) {
31730
31767
  const panelName = annotationType === "highlight" ? "HighlightPanel" : annotationType === "assessment" ? "AssessmentPanel" : "CommentsPanel";
31731
31768
  const t12 = useTranslations(panelName);
31732
- const [instructions, setInstructions] = useState24("");
31733
- const [tone, setTone] = useState24("");
31769
+ const [instructions, setInstructions] = useState25("");
31770
+ const [tone, setTone] = useState25("");
31734
31771
  const defaultDensity = annotationType === "comment" ? 5 : annotationType === "assessment" ? 4 : annotationType === "highlight" ? 5 : 5;
31735
- const [density, setDensity] = useState24(defaultDensity);
31736
- const [useDensity, setUseDensity] = useState24(true);
31737
- const [isExpanded, setIsExpanded] = useState24(() => {
31772
+ const [density, setDensity] = useState25(defaultDensity);
31773
+ const [useDensity, setUseDensity] = useState25(true);
31774
+ const [isExpanded, setIsExpanded] = useState25(() => {
31738
31775
  if (typeof window === "undefined") return true;
31739
31776
  const stored = localStorage.getItem(`assist-section-expanded-${annotationType}`);
31740
31777
  return stored ? stored === "true" : true;
31741
31778
  });
31742
- useEffect28(() => {
31779
+ useEffect29(() => {
31743
31780
  if (typeof window === "undefined") return;
31744
31781
  localStorage.setItem(`assist-section-expanded-${annotationType}`, String(isExpanded));
31745
31782
  }, [isExpanded, annotationType]);
@@ -31967,11 +32004,11 @@ function AssessmentPanel({
31967
32004
  hoveredAnnotationId
31968
32005
  }) {
31969
32006
  const t12 = useTranslations("AssessmentPanel");
31970
- const [newAssessmentText, setNewAssessmentText] = useState25("");
31971
- const [focusedAnnotationId, setFocusedAnnotationId] = useState25(null);
32007
+ const [newAssessmentText, setNewAssessmentText] = useState26("");
32008
+ const [focusedAnnotationId, setFocusedAnnotationId] = useState26(null);
31972
32009
  const containerRef = useRef19(null);
31973
32010
  const entryRefs = useRef19(/* @__PURE__ */ new Map());
31974
- const sortedAnnotations = useMemo8(() => {
32011
+ const sortedAnnotations = useMemo9(() => {
31975
32012
  return [...annotations].sort((a15, b8) => {
31976
32013
  const aSelector = getTextPositionSelector3(getTargetSelector5(a15.target));
31977
32014
  const bSelector = getTextPositionSelector3(getTargetSelector5(b8.target));
@@ -31986,7 +32023,7 @@ function AssessmentPanel({
31986
32023
  entryRefs.current.delete(id2);
31987
32024
  }
31988
32025
  }, []);
31989
- useEffect29(() => {
32026
+ useEffect30(() => {
31990
32027
  if (!scrollToAnnotationId) return;
31991
32028
  const element = entryRefs.current.get(scrollToAnnotationId);
31992
32029
  if (element && containerRef.current) {
@@ -32001,7 +32038,7 @@ function AssessmentPanel({
32001
32038
  if (onScrollCompleted) onScrollCompleted();
32002
32039
  }
32003
32040
  }, [scrollToAnnotationId]);
32004
- useEffect29(() => {
32041
+ useEffect30(() => {
32005
32042
  if (!hoveredAnnotationId) return;
32006
32043
  const element = entryRefs.current.get(hoveredAnnotationId);
32007
32044
  if (!element || !containerRef.current) return;
@@ -32030,7 +32067,7 @@ function AssessmentPanel({
32030
32067
  setNewAssessmentText("");
32031
32068
  }
32032
32069
  };
32033
- useEffect29(() => {
32070
+ useEffect30(() => {
32034
32071
  if (!pendingAnnotation) return;
32035
32072
  const handleEscape = (e6) => {
32036
32073
  if (e6.key === "Escape") {
@@ -32209,7 +32246,7 @@ function CollaborationPanel({
32209
32246
  }
32210
32247
 
32211
32248
  // src/components/resource/panels/CommentEntry.tsx
32212
- import { useState as useState26, useEffect as useEffect30, useRef as useRef20, useImperativeHandle } from "react";
32249
+ import { useState as useState27, useEffect as useEffect31, useRef as useRef20, useImperativeHandle } from "react";
32213
32250
  import { getAnnotationExactText as getAnnotationExactText2, getCommentText } from "@semiont/core";
32214
32251
  import { jsx as jsx33, jsxs as jsxs26 } from "react/jsx-runtime";
32215
32252
  function formatRelativeTime3(isoString) {
@@ -32236,13 +32273,13 @@ function CommentEntry({
32236
32273
  }) {
32237
32274
  const t12 = useTranslations("CommentsPanel");
32238
32275
  const hoverProps = useHoverEmitter(session, comment2.id);
32239
- const [isEditing, setIsEditing] = useState26(false);
32240
- const [editText, setEditText] = useState26("");
32276
+ const [isEditing, setIsEditing] = useState27(false);
32277
+ const [editText, setEditText] = useState27("");
32241
32278
  const internalRef = useRef20(null);
32242
32279
  useImperativeHandle(ref, () => internalRef.current);
32243
32280
  const commentText = getCommentText(comment2) || "";
32244
32281
  const selectedText = getAnnotationExactText2(comment2);
32245
- useEffect30(() => {
32282
+ useEffect31(() => {
32246
32283
  if (isFocused && internalRef.current) {
32247
32284
  internalRef.current.scrollIntoView({
32248
32285
  behavior: "smooth",
@@ -32344,7 +32381,7 @@ function CommentEntry({
32344
32381
  }
32345
32382
 
32346
32383
  // src/components/resource/panels/CommentsPanel.tsx
32347
- import { useState as useState27, useEffect as useEffect31, useRef as useRef21, useCallback as useCallback22, useMemo as useMemo9 } from "react";
32384
+ import { useState as useState28, useEffect as useEffect32, useRef as useRef21, useCallback as useCallback22, useMemo as useMemo10 } from "react";
32348
32385
  import { getTextPositionSelector as getTextPositionSelector4, getTargetSelector as getTargetSelector6 } from "@semiont/core";
32349
32386
  import { jsx as jsx34, jsxs as jsxs27 } from "react/jsx-runtime";
32350
32387
  function getSelectorDisplayText2(selector) {
@@ -32375,11 +32412,11 @@ function CommentsPanel({
32375
32412
  hoveredAnnotationId
32376
32413
  }) {
32377
32414
  const t12 = useTranslations("CommentsPanel");
32378
- const [newCommentText, setNewCommentText] = useState27("");
32379
- const [focusedAnnotationId, setFocusedAnnotationId] = useState27(null);
32415
+ const [newCommentText, setNewCommentText] = useState28("");
32416
+ const [focusedAnnotationId, setFocusedAnnotationId] = useState28(null);
32380
32417
  const containerRef = useRef21(null);
32381
32418
  const entryRefs = useRef21(/* @__PURE__ */ new Map());
32382
- const sortedAnnotations = useMemo9(() => {
32419
+ const sortedAnnotations = useMemo10(() => {
32383
32420
  return [...annotations].sort((a15, b8) => {
32384
32421
  const aSelector = getTextPositionSelector4(getTargetSelector6(a15.target));
32385
32422
  const bSelector = getTextPositionSelector4(getTargetSelector6(b8.target));
@@ -32394,7 +32431,7 @@ function CommentsPanel({
32394
32431
  entryRefs.current.delete(id2);
32395
32432
  }
32396
32433
  }, []);
32397
- useEffect31(() => {
32434
+ useEffect32(() => {
32398
32435
  if (!scrollToAnnotationId) return;
32399
32436
  const element = entryRefs.current.get(scrollToAnnotationId);
32400
32437
  if (element && containerRef.current) {
@@ -32411,7 +32448,7 @@ function CommentsPanel({
32411
32448
  }
32412
32449
  }
32413
32450
  }, [scrollToAnnotationId]);
32414
- useEffect31(() => {
32451
+ useEffect32(() => {
32415
32452
  if (!hoveredAnnotationId) return;
32416
32453
  const element = entryRefs.current.get(hoveredAnnotationId);
32417
32454
  if (!element || !containerRef.current) return;
@@ -32445,7 +32482,7 @@ function CommentsPanel({
32445
32482
  setNewCommentText("");
32446
32483
  }
32447
32484
  };
32448
- useEffect31(() => {
32485
+ useEffect32(() => {
32449
32486
  if (!pendingAnnotation) return;
32450
32487
  const handleEscape = (e6) => {
32451
32488
  if (e6.key === "Escape") {
@@ -32597,7 +32634,7 @@ function HighlightEntry({
32597
32634
  }
32598
32635
 
32599
32636
  // src/components/resource/panels/HighlightPanel.tsx
32600
- import { useEffect as useEffect32, useState as useState28, useRef as useRef22, useCallback as useCallback23, useMemo as useMemo10 } from "react";
32637
+ import { useEffect as useEffect33, useState as useState29, useRef as useRef22, useCallback as useCallback23, useMemo as useMemo11 } from "react";
32601
32638
  import { getTextPositionSelector as getTextPositionSelector5, getTargetSelector as getTargetSelector7 } from "@semiont/core";
32602
32639
  import { jsx as jsx35, jsxs as jsxs29 } from "react/jsx-runtime";
32603
32640
  function HighlightPanel({
@@ -32614,10 +32651,10 @@ function HighlightPanel({
32614
32651
  sourceLanguage
32615
32652
  }) {
32616
32653
  const t12 = useTranslations("HighlightPanel");
32617
- const [focusedAnnotationId, setFocusedAnnotationId] = useState28(null);
32654
+ const [focusedAnnotationId, setFocusedAnnotationId] = useState29(null);
32618
32655
  const containerRef = useRef22(null);
32619
32656
  const entryRefs = useRef22(/* @__PURE__ */ new Map());
32620
- const sortedAnnotations = useMemo10(() => {
32657
+ const sortedAnnotations = useMemo11(() => {
32621
32658
  return [...annotations].sort((a15, b8) => {
32622
32659
  const aSelector = getTextPositionSelector5(getTargetSelector7(a15.target));
32623
32660
  const bSelector = getTextPositionSelector5(getTargetSelector7(b8.target));
@@ -32632,7 +32669,7 @@ function HighlightPanel({
32632
32669
  entryRefs.current.delete(id2);
32633
32670
  }
32634
32671
  }, []);
32635
- useEffect32(() => {
32672
+ useEffect33(() => {
32636
32673
  if (!scrollToAnnotationId) return;
32637
32674
  const element = entryRefs.current.get(scrollToAnnotationId);
32638
32675
  if (element && containerRef.current) {
@@ -32647,7 +32684,7 @@ function HighlightPanel({
32647
32684
  if (onScrollCompleted) onScrollCompleted();
32648
32685
  }
32649
32686
  }, [scrollToAnnotationId]);
32650
- useEffect32(() => {
32687
+ useEffect33(() => {
32651
32688
  if (!hoveredAnnotationId) return;
32652
32689
  const element = entryRefs.current.get(hoveredAnnotationId);
32653
32690
  if (!element || !containerRef.current) return;
@@ -32670,7 +32707,7 @@ function HighlightPanel({
32670
32707
  useSessionEventSubscriptions(session, {
32671
32708
  "browse:click": handleAnnotationClick2
32672
32709
  });
32673
- useEffect32(() => {
32710
+ useEffect33(() => {
32674
32711
  if (pendingAnnotation && pendingAnnotation.motivation === "highlighting") {
32675
32712
  session?.client.mark.submit({
32676
32713
  source: resourceId2,
@@ -32708,16 +32745,16 @@ function HighlightPanel({
32708
32745
  }
32709
32746
 
32710
32747
  // src/components/resource/panels/JsonLdPanel.tsx
32711
- import { useEffect as useEffect34, useRef as useRef23 } from "react";
32748
+ import { useEffect as useEffect35, useRef as useRef23 } from "react";
32712
32749
 
32713
32750
  // src/hooks/useResourceGraph.ts
32714
- import { useEffect as useEffect33, useState as useState29 } from "react";
32751
+ import { useEffect as useEffect34, useState as useState30 } from "react";
32715
32752
  function useResourceGraph(id2) {
32716
32753
  const semiont = useObservable(useSemiont().activeSession$)?.client;
32717
- const [graph, setGraph] = useState29(null);
32718
- const [loading, setLoading] = useState29(true);
32719
- const [error, setError] = useState29(null);
32720
- useEffect33(() => {
32754
+ const [graph, setGraph] = useState30(null);
32755
+ const [loading, setLoading] = useState30(true);
32756
+ const [error, setError] = useState30(null);
32757
+ useEffect34(() => {
32721
32758
  if (!semiont || !id2) {
32722
32759
  setLoading(false);
32723
32760
  return;
@@ -32749,7 +32786,7 @@ function JsonLdPanel({ resourceId: resourceId2 }) {
32749
32786
  const { showLineNumbers } = useLineNumbers();
32750
32787
  const { graph, loading, error } = useResourceGraph(resourceId2);
32751
32788
  const documentText = graph ? JSON.stringify(graph, null, 2) : "";
32752
- useEffect34(() => {
32789
+ useEffect35(() => {
32753
32790
  if (!editorRef.current || !documentText) return;
32754
32791
  const isDarkMode = document.documentElement?.classList.contains("dark") ?? false;
32755
32792
  const extensions = [
@@ -32995,7 +33032,7 @@ function ReferenceEntry({
32995
33032
  }
32996
33033
 
32997
33034
  // src/components/resource/panels/ReferencesPanel.tsx
32998
- import { useState as useState30, useRef as useRef24, useEffect as useEffect35, useCallback as useCallback24, useMemo as useMemo11 } from "react";
33035
+ import { useState as useState31, useRef as useRef24, useEffect as useEffect36, useCallback as useCallback24, useMemo as useMemo12 } from "react";
32999
33036
  import { getTextPositionSelector as getTextPositionSelector6, getTargetSelector as getTargetSelector9 } from "@semiont/core";
33000
33037
  import { Fragment as Fragment5, jsx as jsx38, jsxs as jsxs32 } from "react/jsx-runtime";
33001
33038
  function getSelectorDisplayText3(selector) {
@@ -33033,23 +33070,23 @@ function ReferencesPanel({
33033
33070
  sourceLanguage
33034
33071
  }) {
33035
33072
  const t12 = useTranslations("ReferencesPanel");
33036
- const [selectedEntityTypes, setSelectedEntityTypes] = useState30([]);
33037
- const [lastAnnotationLog, setLastDetectionLog] = useState30(null);
33038
- const [pendingEntityTypes, setPendingEntityTypes] = useState30([]);
33039
- const [includeDescriptiveReferences, setIncludeDescriptiveReferences] = useState30(false);
33040
- const [focusedAnnotationId, setFocusedAnnotationId] = useState30(null);
33073
+ const [selectedEntityTypes, setSelectedEntityTypes] = useState31([]);
33074
+ const [lastAnnotationLog, setLastDetectionLog] = useState31(null);
33075
+ const [pendingEntityTypes, setPendingEntityTypes] = useState31([]);
33076
+ const [includeDescriptiveReferences, setIncludeDescriptiveReferences] = useState31(false);
33077
+ const [focusedAnnotationId, setFocusedAnnotationId] = useState31(null);
33041
33078
  const containerRef = useRef24(null);
33042
- const [isAssistExpanded, setIsDetectExpanded] = useState30(() => {
33079
+ const [isAssistExpanded, setIsDetectExpanded] = useState31(() => {
33043
33080
  if (typeof window === "undefined") return true;
33044
33081
  const stored = localStorage.getItem("assist-section-expanded-reference");
33045
33082
  return stored ? stored === "true" : true;
33046
33083
  });
33047
- useEffect35(() => {
33084
+ useEffect36(() => {
33048
33085
  if (typeof window === "undefined") return;
33049
33086
  localStorage.setItem("assist-section-expanded-reference", String(isAssistExpanded));
33050
33087
  }, [isAssistExpanded]);
33051
33088
  const entryRefs = useRef24(/* @__PURE__ */ new Map());
33052
- const sortedAnnotations = useMemo11(() => {
33089
+ const sortedAnnotations = useMemo12(() => {
33053
33090
  return [...annotations].sort((a15, b8) => {
33054
33091
  const aSelector = getTextPositionSelector6(getTargetSelector9(a15.target));
33055
33092
  const bSelector = getTextPositionSelector6(getTargetSelector9(b8.target));
@@ -33064,7 +33101,7 @@ function ReferencesPanel({
33064
33101
  entryRefs.current.delete(id2);
33065
33102
  }
33066
33103
  }, []);
33067
- useEffect35(() => {
33104
+ useEffect36(() => {
33068
33105
  if (!scrollToAnnotationId) return;
33069
33106
  const element = entryRefs.current.get(scrollToAnnotationId);
33070
33107
  if (element && containerRef.current) {
@@ -33083,7 +33120,7 @@ function ReferencesPanel({
33083
33120
  console.warn("[ReferencesPanel] Element not found for scrollToAnnotationId:", scrollToAnnotationId);
33084
33121
  }
33085
33122
  }, [scrollToAnnotationId]);
33086
- useEffect35(() => {
33123
+ useEffect36(() => {
33087
33124
  if (!hoveredAnnotationId) return;
33088
33125
  const element = entryRefs.current.get(hoveredAnnotationId);
33089
33126
  if (!element || !containerRef.current) return;
@@ -33118,7 +33155,7 @@ function ReferencesPanel({
33118
33155
  });
33119
33156
  };
33120
33157
  const hasSavedLogRef = useRef24(false);
33121
- useEffect35(() => {
33158
+ useEffect36(() => {
33122
33159
  if (isAssisting) {
33123
33160
  hasSavedLogRef.current = false;
33124
33161
  return;
@@ -33146,7 +33183,7 @@ function ReferencesPanel({
33146
33183
  setPendingEntityTypes([]);
33147
33184
  }
33148
33185
  };
33149
- useEffect35(() => {
33186
+ useEffect36(() => {
33150
33187
  if (!pendingAnnotation) return;
33151
33188
  const handleEscape = (e6) => {
33152
33189
  if (e6.key === "Escape") {
@@ -33586,7 +33623,7 @@ function StatisticsPanel({
33586
33623
  }
33587
33624
 
33588
33625
  // src/components/resource/panels/TagEntry.tsx
33589
- import { useMemo as useMemo12 } from "react";
33626
+ import { useMemo as useMemo13 } from "react";
33590
33627
  import { getAnnotationExactText as getAnnotationExactText5 } from "@semiont/core";
33591
33628
  import { jsx as jsx41, jsxs as jsxs35 } from "react/jsx-runtime";
33592
33629
  function TagEntry({
@@ -33600,7 +33637,7 @@ function TagEntry({
33600
33637
  const selectedText = getAnnotationExactText5(tag);
33601
33638
  const category = getTagCategory(tag);
33602
33639
  const schemaId = getTagSchemaId(tag);
33603
- const tagSchemas$ = useMemo12(
33640
+ const tagSchemas$ = useMemo13(
33604
33641
  () => session?.client.browse.tagSchemas() ?? null,
33605
33642
  [session]
33606
33643
  );
@@ -33638,7 +33675,7 @@ function TagEntry({
33638
33675
  }
33639
33676
 
33640
33677
  // src/components/resource/panels/TaggingPanel.tsx
33641
- import { useState as useState31, useEffect as useEffect36, useRef as useRef25, useCallback as useCallback25, useMemo as useMemo13 } from "react";
33678
+ import { useState as useState32, useEffect as useEffect37, useRef as useRef25, useCallback as useCallback25, useMemo as useMemo14 } from "react";
33642
33679
  import { getTextPositionSelector as getTextPositionSelector7, getTargetSelector as getTargetSelector10 } from "@semiont/core";
33643
33680
  import { Fragment as Fragment7, jsx as jsx42, jsxs as jsxs36 } from "react/jsx-runtime";
33644
33681
  function getSelectorDisplayText4(selector) {
@@ -33669,28 +33706,28 @@ function TaggingPanel({
33669
33706
  sourceLanguage
33670
33707
  }) {
33671
33708
  const t12 = useTranslations("TaggingPanel");
33672
- const tagSchemas$ = useMemo13(
33709
+ const tagSchemas$ = useMemo14(
33673
33710
  () => session?.client.browse.tagSchemas() ?? null,
33674
33711
  [session]
33675
33712
  );
33676
33713
  const schemasObserved = useObservable(tagSchemas$);
33677
33714
  const schemas = schemasObserved ?? [];
33678
33715
  const noSchemasRegistered = schemasObserved !== void 0 && schemasObserved.length === 0;
33679
- const [selectedSchemaId, setSelectedSchemaId] = useState31("");
33680
- const [selectedCategories, setSelectedCategories] = useState31(/* @__PURE__ */ new Set());
33681
- useEffect36(() => {
33716
+ const [selectedSchemaId, setSelectedSchemaId] = useState32("");
33717
+ const [selectedCategories, setSelectedCategories] = useState32(/* @__PURE__ */ new Set());
33718
+ useEffect37(() => {
33682
33719
  if (!selectedSchemaId && schemas.length > 0) {
33683
33720
  setSelectedSchemaId(schemas[0].id);
33684
33721
  }
33685
33722
  }, [schemas, selectedSchemaId]);
33686
- const [focusedAnnotationId, setFocusedAnnotationId] = useState31(null);
33723
+ const [focusedAnnotationId, setFocusedAnnotationId] = useState32(null);
33687
33724
  const containerRef = useRef25(null);
33688
- const [isAssistExpanded, setIsDetectExpanded] = useState31(() => {
33725
+ const [isAssistExpanded, setIsDetectExpanded] = useState32(() => {
33689
33726
  if (typeof window === "undefined") return true;
33690
33727
  const stored = localStorage.getItem("assist-section-expanded-tag");
33691
33728
  return stored ? stored === "true" : true;
33692
33729
  });
33693
- useEffect36(() => {
33730
+ useEffect37(() => {
33694
33731
  if (typeof window === "undefined") return;
33695
33732
  localStorage.setItem("assist-section-expanded-tag", String(isAssistExpanded));
33696
33733
  }, [isAssistExpanded]);
@@ -33702,7 +33739,7 @@ function TaggingPanel({
33702
33739
  "browse:click": handleAnnotationClick2
33703
33740
  });
33704
33741
  const entryRefs = useRef25(/* @__PURE__ */ new Map());
33705
- const sortedAnnotations = useMemo13(() => {
33742
+ const sortedAnnotations = useMemo14(() => {
33706
33743
  return [...annotations].sort((a15, b8) => {
33707
33744
  const aSelector = getTextPositionSelector7(getTargetSelector10(a15.target));
33708
33745
  const bSelector = getTextPositionSelector7(getTargetSelector10(b8.target));
@@ -33717,7 +33754,7 @@ function TaggingPanel({
33717
33754
  entryRefs.current.delete(id2);
33718
33755
  }
33719
33756
  }, []);
33720
- useEffect36(() => {
33757
+ useEffect37(() => {
33721
33758
  if (!scrollToAnnotationId) return;
33722
33759
  const element = entryRefs.current.get(scrollToAnnotationId);
33723
33760
  if (element && containerRef.current) {
@@ -33732,7 +33769,7 @@ function TaggingPanel({
33732
33769
  if (onScrollCompleted) onScrollCompleted();
33733
33770
  }
33734
33771
  }, [scrollToAnnotationId]);
33735
- useEffect36(() => {
33772
+ useEffect37(() => {
33736
33773
  if (!hoveredAnnotationId) return;
33737
33774
  const element = entryRefs.current.get(hoveredAnnotationId);
33738
33775
  if (!element || !containerRef.current) return;
@@ -33783,7 +33820,7 @@ function TaggingPanel({
33783
33820
  setSelectedCategories(/* @__PURE__ */ new Set());
33784
33821
  }
33785
33822
  };
33786
- useEffect36(() => {
33823
+ useEffect37(() => {
33787
33824
  if (!pendingAnnotation) return;
33788
33825
  const handleEscape = (e6) => {
33789
33826
  if (e6.key === "Escape") {
@@ -34014,7 +34051,7 @@ function TaggingPanel({
34014
34051
  }
34015
34052
 
34016
34053
  // src/components/resource/panels/UnifiedAnnotationsPanel.tsx
34017
- import { useState as useState32, useEffect as useEffect37 } from "react";
34054
+ import { useState as useState33, useEffect as useEffect38 } from "react";
34018
34055
  import { jsx as jsx43, jsxs as jsxs37 } from "react/jsx-runtime";
34019
34056
  var TAB_ORDER = ["statistics", "reference", "highlight", "assessment", "comment", "tag"];
34020
34057
  function UnifiedAnnotationsPanel(props) {
@@ -34036,7 +34073,7 @@ function UnifiedAnnotationsPanel(props) {
34036
34073
  }
34037
34074
  }
34038
34075
  const grouped = groups;
34039
- const [activeTab, setActiveTab] = useState32(() => {
34076
+ const [activeTab, setActiveTab] = useState33(() => {
34040
34077
  if (typeof window === "undefined") return props.initialTab || "statistics";
34041
34078
  const storageKey = props.resourceId ? `annotations-tab-${props.resourceId}` : "annotations-tab-global";
34042
34079
  const stored = localStorage.getItem(storageKey);
@@ -34045,17 +34082,17 @@ function UnifiedAnnotationsPanel(props) {
34045
34082
  }
34046
34083
  return props.initialTab || "statistics";
34047
34084
  });
34048
- useEffect37(() => {
34085
+ useEffect38(() => {
34049
34086
  if (typeof window === "undefined") return;
34050
34087
  const storageKey = props.resourceId ? `annotations-tab-${props.resourceId}` : "annotations-tab-global";
34051
34088
  localStorage.setItem(storageKey, activeTab);
34052
34089
  }, [activeTab, props.resourceId]);
34053
- useEffect37(() => {
34090
+ useEffect38(() => {
34054
34091
  if (props.initialTab && props.initialTabGeneration !== void 0) {
34055
34092
  setActiveTab(props.initialTab);
34056
34093
  }
34057
34094
  }, [props.initialTabGeneration]);
34058
- useEffect37(() => {
34095
+ useEffect38(() => {
34059
34096
  if (props.pendingAnnotation) {
34060
34097
  const motivationToTab = {
34061
34098
  "linking": "reference",
@@ -34217,7 +34254,7 @@ function ImageViewer({ imageUrl, alt = "Resource image" }) {
34217
34254
  }
34218
34255
 
34219
34256
  // src/components/navigation/Footer.tsx
34220
- import { useState as useState33 } from "react";
34257
+ import { useState as useState34 } from "react";
34221
34258
  import { Fragment as Fragment8, jsx as jsx45, jsxs as jsxs38 } from "react/jsx-runtime";
34222
34259
  function Footer({
34223
34260
  Link,
@@ -34228,7 +34265,7 @@ function Footer({
34228
34265
  sourceCodeUrl = "https://github.com/The-AI-Alliance/semiont",
34229
34266
  showPolicyLinks = true
34230
34267
  }) {
34231
- const [showCookiePreferences, setShowCookiePreferences] = useState33(false);
34268
+ const [showCookiePreferences, setShowCookiePreferences] = useState34(false);
34232
34269
  return /* @__PURE__ */ jsxs38(Fragment8, { children: [
34233
34270
  /* @__PURE__ */ jsx45("footer", { role: "contentinfo", className: "semiont-footer", children: /* @__PURE__ */ jsx45("div", { className: "semiont-footer__container", children: /* @__PURE__ */ jsxs38("div", { className: "semiont-footer__content", children: [
34234
34271
  /* @__PURE__ */ jsx45("div", { className: "semiont-footer__copyright", children: t12("copyright", { year: (/* @__PURE__ */ new Date()).getFullYear() }) }),
@@ -34358,7 +34395,7 @@ function NavigationMenu({
34358
34395
  }
34359
34396
 
34360
34397
  // src/components/navigation/ObservableLink.tsx
34361
- import { useCallback as useCallback26, useRef as useRef26, useEffect as useEffect38 } from "react";
34398
+ import { useCallback as useCallback26, useRef as useRef26, useEffect as useEffect39 } from "react";
34362
34399
  import { jsx as jsx47 } from "react/jsx-runtime";
34363
34400
  function ObservableLink({
34364
34401
  href,
@@ -34369,7 +34406,7 @@ function ObservableLink({
34369
34406
  }) {
34370
34407
  const semiont = useSemiont();
34371
34408
  const onClickRef = useRef26(onClick);
34372
- useEffect38(() => {
34409
+ useEffect39(() => {
34373
34410
  onClickRef.current = onClick;
34374
34411
  });
34375
34412
  const handleClick = useCallback26((e6) => {
@@ -34391,7 +34428,7 @@ function ObservableLink({
34391
34428
  }
34392
34429
 
34393
34430
  // src/components/navigation/SimpleNavigation.tsx
34394
- import { useState as useState34, useRef as useRef27, useEffect as useEffect39 } from "react";
34431
+ import { useState as useState35, useRef as useRef27, useEffect as useEffect40 } from "react";
34395
34432
  import { jsx as jsx48, jsxs as jsxs40 } from "react/jsx-runtime";
34396
34433
  function SimpleNavigation({
34397
34434
  title,
@@ -34406,12 +34443,12 @@ function SimpleNavigation({
34406
34443
  }) {
34407
34444
  const ChevronLeftIcon = icons.chevronLeft;
34408
34445
  const BarsIcon = icons.bars;
34409
- const [isDropdownOpen, setIsDropdownOpen] = useState34(false);
34446
+ const [isDropdownOpen, setIsDropdownOpen] = useState35(false);
34410
34447
  const dropdownRef = useRef27(null);
34411
34448
  const semiont = useSemiont();
34412
34449
  const toggleDropdown = () => setIsDropdownOpen(!isDropdownOpen);
34413
34450
  const closeDropdown = () => setIsDropdownOpen(false);
34414
- useEffect39(() => {
34451
+ useEffect40(() => {
34415
34452
  const handleClickOutside = (event) => {
34416
34453
  if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {
34417
34454
  closeDropdown();
@@ -34487,19 +34524,19 @@ function SimpleNavigation({
34487
34524
  }
34488
34525
 
34489
34526
  // src/components/navigation/CollapsibleResourceNavigation.tsx
34490
- import { useCallback as useCallback32, useState as useState38, useRef as useRef32, useEffect as useEffect44 } from "react";
34527
+ import { useCallback as useCallback32, useState as useState39, useRef as useRef32, useEffect as useEffect45 } from "react";
34491
34528
 
34492
34529
  // ../../node_modules/@dnd-kit/core/dist/core.esm.js
34493
- import React18, { createContext as createContext5, useContext as useContext5, useEffect as useEffect41, useState as useState36, useCallback as useCallback29, useMemo as useMemo15, useRef as useRef29, memo as memo3, useReducer, cloneElement, forwardRef } from "react";
34530
+ import React18, { createContext as createContext5, useContext as useContext5, useEffect as useEffect42, useState as useState37, useCallback as useCallback29, useMemo as useMemo16, useRef as useRef29, memo as memo3, useReducer, cloneElement, forwardRef } from "react";
34494
34531
  import { createPortal, unstable_batchedUpdates } from "react-dom";
34495
34532
 
34496
34533
  // ../../node_modules/@dnd-kit/utilities/dist/utilities.esm.js
34497
- import { useMemo as useMemo14, useLayoutEffect, useEffect as useEffect40, useRef as useRef28, useCallback as useCallback27 } from "react";
34534
+ import { useMemo as useMemo15, useLayoutEffect, useEffect as useEffect41, useRef as useRef28, useCallback as useCallback27 } from "react";
34498
34535
  function useCombinedRefs() {
34499
34536
  for (var _len = arguments.length, refs = new Array(_len), _key = 0; _key < _len; _key++) {
34500
34537
  refs[_key] = arguments[_key];
34501
34538
  }
34502
- return useMemo14(
34539
+ return useMemo15(
34503
34540
  () => (node) => {
34504
34541
  refs.forEach((ref) => ref(node));
34505
34542
  },
@@ -34562,7 +34599,7 @@ function getOwnerDocument(target) {
34562
34599
  }
34563
34600
  return document;
34564
34601
  }
34565
- var useIsomorphicLayoutEffect = canUseDOM ? useLayoutEffect : useEffect40;
34602
+ var useIsomorphicLayoutEffect = canUseDOM ? useLayoutEffect : useEffect41;
34566
34603
  function useEvent(handler) {
34567
34604
  const handlerRef = useRef28(handler);
34568
34605
  useIsomorphicLayoutEffect(() => {
@@ -34602,7 +34639,7 @@ function useLatestValue(value, dependencies) {
34602
34639
  }
34603
34640
  function useLazyMemo(callback, dependencies) {
34604
34641
  const valueRef = useRef28();
34605
- return useMemo14(
34642
+ return useMemo15(
34606
34643
  () => {
34607
34644
  const newValue = callback(valueRef.current);
34608
34645
  valueRef.current = newValue;
@@ -34629,14 +34666,14 @@ function useNodeRef(onChange) {
34629
34666
  }
34630
34667
  function usePrevious(value) {
34631
34668
  const ref = useRef28();
34632
- useEffect40(() => {
34669
+ useEffect41(() => {
34633
34670
  ref.current = value;
34634
34671
  }, [value]);
34635
34672
  return ref.current;
34636
34673
  }
34637
34674
  var ids = {};
34638
34675
  function useUniqueId(prefix, value) {
34639
- return useMemo14(() => {
34676
+ return useMemo15(() => {
34640
34677
  if (value) {
34641
34678
  return value;
34642
34679
  }
@@ -34770,7 +34807,7 @@ function findFirstFocusableNode(element) {
34770
34807
  }
34771
34808
 
34772
34809
  // ../../node_modules/@dnd-kit/accessibility/dist/accessibility.esm.js
34773
- import React17, { useState as useState35, useCallback as useCallback28 } from "react";
34810
+ import React17, { useState as useState36, useCallback as useCallback28 } from "react";
34774
34811
  var hiddenStyles = {
34775
34812
  display: "none"
34776
34813
  };
@@ -34813,7 +34850,7 @@ function LiveRegion(_ref) {
34813
34850
  }, announcement);
34814
34851
  }
34815
34852
  function useAnnouncement() {
34816
- const [announcement, setAnnouncement] = useState35("");
34853
+ const [announcement, setAnnouncement] = useState36("");
34817
34854
  const announce = useCallback28((value) => {
34818
34855
  if (value != null) {
34819
34856
  setAnnouncement(value);
@@ -34829,7 +34866,7 @@ function useAnnouncement() {
34829
34866
  var DndMonitorContext = /* @__PURE__ */ createContext5(null);
34830
34867
  function useDndMonitor(listener) {
34831
34868
  const registerListener = useContext5(DndMonitorContext);
34832
- useEffect41(() => {
34869
+ useEffect42(() => {
34833
34870
  if (!registerListener) {
34834
34871
  throw new Error("useDndMonitor must be used within a children of <DndContext>");
34835
34872
  }
@@ -34838,7 +34875,7 @@ function useDndMonitor(listener) {
34838
34875
  }, [listener, registerListener]);
34839
34876
  }
34840
34877
  function useDndMonitorProvider() {
34841
- const [listeners] = useState36(() => /* @__PURE__ */ new Set());
34878
+ const [listeners] = useState37(() => /* @__PURE__ */ new Set());
34842
34879
  const registerListener = useCallback29((listener) => {
34843
34880
  listeners.add(listener);
34844
34881
  return () => listeners.delete(listener);
@@ -34904,11 +34941,11 @@ function Accessibility(_ref) {
34904
34941
  announcement
34905
34942
  } = useAnnouncement();
34906
34943
  const liveRegionId = useUniqueId("DndLiveRegion");
34907
- const [mounted, setMounted] = useState36(false);
34908
- useEffect41(() => {
34944
+ const [mounted, setMounted] = useState37(false);
34945
+ useEffect42(() => {
34909
34946
  setMounted(true);
34910
34947
  }, []);
34911
- useDndMonitor(useMemo15(() => ({
34948
+ useDndMonitor(useMemo16(() => ({
34912
34949
  onDragStart(_ref2) {
34913
34950
  let {
34914
34951
  active
@@ -34986,7 +35023,7 @@ var Action;
34986
35023
  function noop() {
34987
35024
  }
34988
35025
  function useSensor(sensor, options) {
34989
- return useMemo15(
35026
+ return useMemo16(
34990
35027
  () => ({
34991
35028
  sensor,
34992
35029
  options: options != null ? options : {}
@@ -34999,7 +35036,7 @@ function useSensors() {
34999
35036
  for (var _len = arguments.length, sensors = new Array(_len), _key = 0; _key < _len; _key++) {
35000
35037
  sensors[_key] = arguments[_key];
35001
35038
  }
35002
- return useMemo15(
35039
+ return useMemo16(
35003
35040
  () => [...sensors].filter((sensor) => sensor != null),
35004
35041
  // eslint-disable-next-line react-hooks/exhaustive-deps
35005
35042
  [...sensors]
@@ -36249,7 +36286,7 @@ function useAutoScroller(_ref) {
36249
36286
  x: 0,
36250
36287
  y: 0
36251
36288
  });
36252
- const rect = useMemo15(() => {
36289
+ const rect = useMemo16(() => {
36253
36290
  switch (activator) {
36254
36291
  case AutoScrollActivator.Pointer:
36255
36292
  return pointerCoordinates ? {
@@ -36272,8 +36309,8 @@ function useAutoScroller(_ref) {
36272
36309
  const scrollTop = scrollSpeed.current.y * scrollDirection.current.y;
36273
36310
  scrollContainer.scrollBy(scrollLeft, scrollTop);
36274
36311
  }, []);
36275
- const sortedScrollableAncestors = useMemo15(() => order === TraversalOrder.TreeOrder ? [...scrollableAncestors].reverse() : scrollableAncestors, [order, scrollableAncestors]);
36276
- useEffect41(
36312
+ const sortedScrollableAncestors = useMemo16(() => order === TraversalOrder.TreeOrder ? [...scrollableAncestors].reverse() : scrollableAncestors, [order, scrollableAncestors]);
36313
+ useEffect42(
36277
36314
  () => {
36278
36315
  if (!enabled || !scrollableAncestors.length || !rect) {
36279
36316
  clearAutoScrollInterval();
@@ -36386,7 +36423,7 @@ function useCachedNode(draggableNodes, id2) {
36386
36423
  }, [node, id2]);
36387
36424
  }
36388
36425
  function useCombineActivators(sensors, getSyntheticHandler) {
36389
- return useMemo15(() => sensors.reduce((accumulator, sensor) => {
36426
+ return useMemo16(() => sensors.reduce((accumulator, sensor) => {
36390
36427
  const {
36391
36428
  sensor: Sensor
36392
36429
  } = sensor;
@@ -36414,7 +36451,7 @@ function useDroppableMeasuring(containers, _ref) {
36414
36451
  dependencies,
36415
36452
  config
36416
36453
  } = _ref;
36417
- const [queue, setQueue] = useState36(null);
36454
+ const [queue, setQueue] = useState37(null);
36418
36455
  const {
36419
36456
  frequency,
36420
36457
  measure,
@@ -36463,10 +36500,10 @@ function useDroppableMeasuring(containers, _ref) {
36463
36500
  }
36464
36501
  return previousValue;
36465
36502
  }, [containers, queue, dragging, disabled, measure]);
36466
- useEffect41(() => {
36503
+ useEffect42(() => {
36467
36504
  containersRef.current = containers;
36468
36505
  }, [containers]);
36469
- useEffect41(
36506
+ useEffect42(
36470
36507
  () => {
36471
36508
  if (disabled) {
36472
36509
  return;
@@ -36476,7 +36513,7 @@ function useDroppableMeasuring(containers, _ref) {
36476
36513
  // eslint-disable-next-line react-hooks/exhaustive-deps
36477
36514
  [dragging, disabled]
36478
36515
  );
36479
- useEffect41(
36516
+ useEffect42(
36480
36517
  () => {
36481
36518
  if (queue && queue.length > 0) {
36482
36519
  setQueue(null);
@@ -36485,7 +36522,7 @@ function useDroppableMeasuring(containers, _ref) {
36485
36522
  //eslint-disable-next-line react-hooks/exhaustive-deps
36486
36523
  [JSON.stringify(queue)]
36487
36524
  );
36488
- useEffect41(
36525
+ useEffect42(
36489
36526
  () => {
36490
36527
  if (disabled || typeof frequency !== "number" || timeoutId.current !== null) {
36491
36528
  return;
@@ -36534,7 +36571,7 @@ function useMutationObserver(_ref) {
36534
36571
  disabled
36535
36572
  } = _ref;
36536
36573
  const handleMutations = useEvent(callback);
36537
- const mutationObserver = useMemo15(() => {
36574
+ const mutationObserver = useMemo16(() => {
36538
36575
  if (disabled || typeof window === "undefined" || typeof window.MutationObserver === "undefined") {
36539
36576
  return void 0;
36540
36577
  }
@@ -36543,7 +36580,7 @@ function useMutationObserver(_ref) {
36543
36580
  } = window;
36544
36581
  return new MutationObserver2(handleMutations);
36545
36582
  }, [handleMutations, disabled]);
36546
- useEffect41(() => {
36583
+ useEffect42(() => {
36547
36584
  return () => mutationObserver == null ? void 0 : mutationObserver.disconnect();
36548
36585
  }, [mutationObserver]);
36549
36586
  return mutationObserver;
@@ -36554,7 +36591,7 @@ function useResizeObserver(_ref) {
36554
36591
  disabled
36555
36592
  } = _ref;
36556
36593
  const handleResize = useEvent(callback);
36557
- const resizeObserver = useMemo15(
36594
+ const resizeObserver = useMemo16(
36558
36595
  () => {
36559
36596
  if (disabled || typeof window === "undefined" || typeof window.ResizeObserver === "undefined") {
36560
36597
  return void 0;
@@ -36567,7 +36604,7 @@ function useResizeObserver(_ref) {
36567
36604
  // eslint-disable-next-line react-hooks/exhaustive-deps
36568
36605
  [disabled]
36569
36606
  );
36570
- useEffect41(() => {
36607
+ useEffect42(() => {
36571
36608
  return () => resizeObserver == null ? void 0 : resizeObserver.disconnect();
36572
36609
  }, [resizeObserver]);
36573
36610
  return resizeObserver;
@@ -36579,7 +36616,7 @@ function useRect(element, measure, fallbackRect2) {
36579
36616
  if (measure === void 0) {
36580
36617
  measure = defaultMeasure;
36581
36618
  }
36582
- const [rect, setRect] = useState36(null);
36619
+ const [rect, setRect] = useState37(null);
36583
36620
  function measureRect() {
36584
36621
  setRect((currentRect) => {
36585
36622
  if (!element) {
@@ -36647,13 +36684,13 @@ function useScrollableAncestors(node) {
36647
36684
  }
36648
36685
  return getScrollableAncestors(node);
36649
36686
  }, [node]);
36650
- useEffect41(() => {
36687
+ useEffect42(() => {
36651
36688
  previousNode.current = node;
36652
36689
  }, [node]);
36653
36690
  return ancestors;
36654
36691
  }
36655
36692
  function useScrollOffsets(elements) {
36656
- const [scrollCoordinates, setScrollCoordinates] = useState36(null);
36693
+ const [scrollCoordinates, setScrollCoordinates] = useState37(null);
36657
36694
  const prevElements = useRef29(elements);
36658
36695
  const handleScroll = useCallback29((event) => {
36659
36696
  const scrollingElement = getScrollableElement(event.target);
@@ -36668,7 +36705,7 @@ function useScrollOffsets(elements) {
36668
36705
  return new Map(scrollCoordinates2);
36669
36706
  });
36670
36707
  }, []);
36671
- useEffect41(() => {
36708
+ useEffect42(() => {
36672
36709
  const previousElements = prevElements.current;
36673
36710
  if (elements !== previousElements) {
36674
36711
  cleanup(previousElements);
@@ -36696,7 +36733,7 @@ function useScrollOffsets(elements) {
36696
36733
  });
36697
36734
  }
36698
36735
  }, [handleScroll, elements]);
36699
- return useMemo15(() => {
36736
+ return useMemo16(() => {
36700
36737
  if (elements.length) {
36701
36738
  return scrollCoordinates ? Array.from(scrollCoordinates.values()).reduce((acc, coordinates) => add(acc, coordinates), defaultCoordinates) : getScrollOffsets(elements);
36702
36739
  }
@@ -36708,14 +36745,14 @@ function useScrollOffsetsDelta(scrollOffsets, dependencies) {
36708
36745
  dependencies = [];
36709
36746
  }
36710
36747
  const initialScrollOffsets = useRef29(null);
36711
- useEffect41(
36748
+ useEffect42(
36712
36749
  () => {
36713
36750
  initialScrollOffsets.current = null;
36714
36751
  },
36715
36752
  // eslint-disable-next-line react-hooks/exhaustive-deps
36716
36753
  dependencies
36717
36754
  );
36718
- useEffect41(() => {
36755
+ useEffect42(() => {
36719
36756
  const hasScrollOffsets = scrollOffsets !== defaultCoordinates;
36720
36757
  if (hasScrollOffsets && !initialScrollOffsets.current) {
36721
36758
  initialScrollOffsets.current = scrollOffsets;
@@ -36727,7 +36764,7 @@ function useScrollOffsetsDelta(scrollOffsets, dependencies) {
36727
36764
  return initialScrollOffsets.current ? subtract(scrollOffsets, initialScrollOffsets.current) : defaultCoordinates;
36728
36765
  }
36729
36766
  function useSensorSetup(sensors) {
36730
- useEffect41(
36767
+ useEffect42(
36731
36768
  () => {
36732
36769
  if (!canUseDOM) {
36733
36770
  return;
@@ -36755,7 +36792,7 @@ function useSensorSetup(sensors) {
36755
36792
  );
36756
36793
  }
36757
36794
  function useSyntheticListeners(listeners, id2) {
36758
- return useMemo15(() => {
36795
+ return useMemo16(() => {
36759
36796
  return listeners.reduce((acc, _ref) => {
36760
36797
  let {
36761
36798
  eventName,
@@ -36769,7 +36806,7 @@ function useSyntheticListeners(listeners, id2) {
36769
36806
  }, [listeners, id2]);
36770
36807
  }
36771
36808
  function useWindowRect(element) {
36772
- return useMemo15(() => element ? getWindowClientRect(element) : null, [element]);
36809
+ return useMemo16(() => element ? getWindowClientRect(element) : null, [element]);
36773
36810
  }
36774
36811
  var defaultValue$2 = [];
36775
36812
  function useRects(elements, measure) {
@@ -36778,7 +36815,7 @@ function useRects(elements, measure) {
36778
36815
  }
36779
36816
  const [firstElement] = elements;
36780
36817
  const windowRect2 = useWindowRect(firstElement ? getWindow(firstElement) : null);
36781
- const [rects, setRects] = useState36(defaultValue$2);
36818
+ const [rects, setRects] = useState37(defaultValue$2);
36782
36819
  function measureRects() {
36783
36820
  setRects(() => {
36784
36821
  if (!elements.length) {
@@ -36811,7 +36848,7 @@ function useDragOverlayMeasuring(_ref) {
36811
36848
  let {
36812
36849
  measure
36813
36850
  } = _ref;
36814
- const [rect, setRect] = useState36(null);
36851
+ const [rect, setRect] = useState37(null);
36815
36852
  const handleResize = useCallback29((entries) => {
36816
36853
  for (const {
36817
36854
  target
@@ -36841,7 +36878,7 @@ function useDragOverlayMeasuring(_ref) {
36841
36878
  setRect(node ? measure(node) : null);
36842
36879
  }, [measure, resizeObserver]);
36843
36880
  const [nodeRef, setRef] = useNodeRef(handleNodeChange);
36844
- return useMemo15(() => ({
36881
+ return useMemo16(() => ({
36845
36882
  nodeRef,
36846
36883
  rect,
36847
36884
  setRef
@@ -37067,7 +37104,7 @@ function RestoreFocus(_ref) {
37067
37104
  } = useContext5(InternalContext);
37068
37105
  const previousActivatorEvent = usePrevious(activatorEvent);
37069
37106
  const previousActiveId = usePrevious(active == null ? void 0 : active.id);
37070
- useEffect41(() => {
37107
+ useEffect42(() => {
37071
37108
  if (disabled) {
37072
37109
  return;
37073
37110
  }
@@ -37118,7 +37155,7 @@ function applyModifiers(modifiers2, _ref) {
37118
37155
  }, transform) : transform;
37119
37156
  }
37120
37157
  function useMeasuringConfiguration(config) {
37121
- return useMemo15(
37158
+ return useMemo16(
37122
37159
  () => ({
37123
37160
  draggable: {
37124
37161
  ...defaultMeasuringConfiguration.draggable,
@@ -37212,7 +37249,7 @@ var DndContext = /* @__PURE__ */ memo3(function DndContext2(_ref) {
37212
37249
  const store = useReducer(reducer, void 0, getInitialState);
37213
37250
  const [state, dispatch] = store;
37214
37251
  const [dispatchMonitorEvent, registerMonitorListener] = useDndMonitorProvider();
37215
- const [status, setStatus] = useState36(Status.Uninitialized);
37252
+ const [status, setStatus] = useState37(Status.Uninitialized);
37216
37253
  const isInitialized = status === Status.Initialized;
37217
37254
  const {
37218
37255
  draggable: {
@@ -37229,7 +37266,7 @@ var DndContext = /* @__PURE__ */ memo3(function DndContext2(_ref) {
37229
37266
  initial: null,
37230
37267
  translated: null
37231
37268
  });
37232
- const active = useMemo15(() => {
37269
+ const active = useMemo16(() => {
37233
37270
  var _node$data;
37234
37271
  return activeId != null ? {
37235
37272
  id: activeId,
@@ -37239,11 +37276,11 @@ var DndContext = /* @__PURE__ */ memo3(function DndContext2(_ref) {
37239
37276
  } : null;
37240
37277
  }, [activeId, node]);
37241
37278
  const activeRef = useRef29(null);
37242
- const [activeSensor, setActiveSensor] = useState36(null);
37243
- const [activatorEvent, setActivatorEvent] = useState36(null);
37279
+ const [activeSensor, setActiveSensor] = useState37(null);
37280
+ const [activatorEvent, setActivatorEvent] = useState37(null);
37244
37281
  const latestProps = useLatestValue(props, Object.values(props));
37245
37282
  const draggableDescribedById = useUniqueId("DndDescribedBy", id2);
37246
- const enabledDroppableContainers = useMemo15(() => droppableContainers.getEnabled(), [droppableContainers]);
37283
+ const enabledDroppableContainers = useMemo16(() => droppableContainers.getEnabled(), [droppableContainers]);
37247
37284
  const measuringConfiguration = useMeasuringConfiguration(measuring);
37248
37285
  const {
37249
37286
  droppableRects,
@@ -37255,7 +37292,7 @@ var DndContext = /* @__PURE__ */ memo3(function DndContext2(_ref) {
37255
37292
  config: measuringConfiguration.droppable
37256
37293
  });
37257
37294
  const activeNode = useCachedNode(draggableNodes, activeId);
37258
- const activationCoordinates = useMemo15(() => activatorEvent ? getEventCoordinates(activatorEvent) : null, [activatorEvent]);
37295
+ const activationCoordinates = useMemo16(() => activatorEvent ? getEventCoordinates(activatorEvent) : null, [activatorEvent]);
37259
37296
  const autoScrollOptions = getAutoScrollerOptions();
37260
37297
  const initialActiveNodeRect = useInitialRect(activeNode, measuringConfiguration.draggable.measure);
37261
37298
  useLayoutShiftScrollCompensation({
@@ -37324,7 +37361,7 @@ var DndContext = /* @__PURE__ */ memo3(function DndContext2(_ref) {
37324
37361
  pointerCoordinates
37325
37362
  }) : null;
37326
37363
  const overId = getFirstCollision(collisions, "id");
37327
- const [over, setOver] = useState36(null);
37364
+ const [over, setOver] = useState37(null);
37328
37365
  const appliedTranslate = usesDragOverlay ? modifiedTranslate : add(modifiedTranslate, activeNodeScrollDelta);
37329
37366
  const transform = adjustScale(appliedTranslate, (_over$rect = over == null ? void 0 : over.rect) != null ? _over$rect : null, activeNodeRect);
37330
37367
  const activeSensorRef = useRef29(null);
@@ -37518,7 +37555,7 @@ var DndContext = /* @__PURE__ */ memo3(function DndContext2(_ref) {
37518
37555
  setStatus(Status.Initialized);
37519
37556
  }
37520
37557
  }, [activeNodeRect, status]);
37521
- useEffect41(
37558
+ useEffect42(
37522
37559
  () => {
37523
37560
  const {
37524
37561
  onDragMove
@@ -37553,7 +37590,7 @@ var DndContext = /* @__PURE__ */ memo3(function DndContext2(_ref) {
37553
37590
  // eslint-disable-next-line react-hooks/exhaustive-deps
37554
37591
  [scrollAdjustedTranslate.x, scrollAdjustedTranslate.y]
37555
37592
  );
37556
- useEffect41(
37593
+ useEffect42(
37557
37594
  () => {
37558
37595
  const {
37559
37596
  active: active2,
@@ -37626,7 +37663,7 @@ var DndContext = /* @__PURE__ */ memo3(function DndContext2(_ref) {
37626
37663
  scrollableAncestors,
37627
37664
  scrollableAncestorRects
37628
37665
  });
37629
- const publicContext = useMemo15(() => {
37666
+ const publicContext = useMemo16(() => {
37630
37667
  const context = {
37631
37668
  active,
37632
37669
  activeNode,
@@ -37648,7 +37685,7 @@ var DndContext = /* @__PURE__ */ memo3(function DndContext2(_ref) {
37648
37685
  };
37649
37686
  return context;
37650
37687
  }, [active, activeNode, activeNodeRect, activatorEvent, collisions, containerNodeRect, dragOverlay, draggableNodes, droppableContainers, droppableRects, over, measureDroppableContainers, scrollableAncestors, scrollableAncestorRects, measuringConfiguration, measuringScheduled, windowRect2]);
37651
- const internalContext = useMemo15(() => {
37688
+ const internalContext = useMemo16(() => {
37652
37689
  const context = {
37653
37690
  activatorEvent,
37654
37691
  activators,
@@ -37743,7 +37780,7 @@ function useDraggable(_ref) {
37743
37780
  // eslint-disable-next-line react-hooks/exhaustive-deps
37744
37781
  [draggableNodes, id2]
37745
37782
  );
37746
- const memoizedAttributes = useMemo15(() => ({
37783
+ const memoizedAttributes = useMemo16(() => ({
37747
37784
  role,
37748
37785
  tabIndex,
37749
37786
  "aria-disabled": disabled,
@@ -37836,7 +37873,7 @@ function useDroppable(_ref) {
37836
37873
  }, [resizeObserver]);
37837
37874
  const [nodeRef, setNodeRef] = useNodeRef(handleNodeChange);
37838
37875
  const dataRef = useLatestValue(data2);
37839
- useEffect41(() => {
37876
+ useEffect42(() => {
37840
37877
  if (!resizeObserver || !nodeRef.current) {
37841
37878
  return;
37842
37879
  }
@@ -37844,7 +37881,7 @@ function useDroppable(_ref) {
37844
37881
  resizeObserverConnected.current = false;
37845
37882
  resizeObserver.observe(nodeRef.current);
37846
37883
  }, [nodeRef, resizeObserver]);
37847
- useEffect41(
37884
+ useEffect42(
37848
37885
  () => {
37849
37886
  dispatch({
37850
37887
  type: Action.RegisterDroppable,
@@ -37866,7 +37903,7 @@ function useDroppable(_ref) {
37866
37903
  // eslint-disable-next-line react-hooks/exhaustive-deps
37867
37904
  [id2]
37868
37905
  );
37869
- useEffect41(() => {
37906
+ useEffect42(() => {
37870
37907
  if (disabled !== previous.current.disabled) {
37871
37908
  dispatch({
37872
37909
  type: Action.SetDroppableDisabled,
@@ -37888,7 +37925,7 @@ function useDroppable(_ref) {
37888
37925
  }
37889
37926
 
37890
37927
  // ../../node_modules/@dnd-kit/sortable/dist/sortable.esm.js
37891
- import React19, { useMemo as useMemo16, useRef as useRef30, useEffect as useEffect42, useState as useState37, useContext as useContext6 } from "react";
37928
+ import React19, { useMemo as useMemo17, useRef as useRef30, useEffect as useEffect43, useState as useState38, useContext as useContext6 } from "react";
37892
37929
  function arrayMove(array, from, to) {
37893
37930
  const newArray = array.slice();
37894
37931
  newArray.splice(to < 0 ? newArray.length + to : to, 0, newArray.splice(from, 1)[0]);
@@ -38042,7 +38079,7 @@ function SortableContext(_ref) {
38042
38079
  } = useDndContext();
38043
38080
  const containerId = useUniqueId(ID_PREFIX2, id2);
38044
38081
  const useDragOverlay = Boolean(dragOverlay.rect !== null);
38045
- const items = useMemo16(() => userDefinedItems.map((item) => typeof item === "object" && "id" in item ? item.id : item), [userDefinedItems]);
38082
+ const items = useMemo17(() => userDefinedItems.map((item) => typeof item === "object" && "id" in item ? item.id : item), [userDefinedItems]);
38046
38083
  const isDragging = active != null;
38047
38084
  const activeIndex = active ? items.indexOf(active.id) : -1;
38048
38085
  const overIndex = over ? items.indexOf(over.id) : -1;
@@ -38055,10 +38092,10 @@ function SortableContext(_ref) {
38055
38092
  measureDroppableContainers(items);
38056
38093
  }
38057
38094
  }, [itemsHaveChanged, items, isDragging, measureDroppableContainers]);
38058
- useEffect42(() => {
38095
+ useEffect43(() => {
38059
38096
  previousItemsRef.current = items;
38060
38097
  }, [items]);
38061
- const contextValue = useMemo16(
38098
+ const contextValue = useMemo17(
38062
38099
  () => ({
38063
38100
  activeIndex,
38064
38101
  containerId,
@@ -38129,7 +38166,7 @@ function useDerivedTransform(_ref) {
38129
38166
  node,
38130
38167
  rect
38131
38168
  } = _ref;
38132
- const [derivedTransform, setDerivedtransform] = useState37(null);
38169
+ const [derivedTransform, setDerivedtransform] = useState38(null);
38133
38170
  const previousIndex = useRef30(index);
38134
38171
  useIsomorphicLayoutEffect(() => {
38135
38172
  if (!disabled && index !== previousIndex.current && node.current) {
@@ -38153,7 +38190,7 @@ function useDerivedTransform(_ref) {
38153
38190
  previousIndex.current = index;
38154
38191
  }
38155
38192
  }, [disabled, index, node, rect]);
38156
- useEffect42(() => {
38193
+ useEffect43(() => {
38157
38194
  if (derivedTransform) {
38158
38195
  setDerivedtransform(null);
38159
38196
  }
@@ -38185,7 +38222,7 @@ function useSortable(_ref) {
38185
38222
  } = useContext6(Context2);
38186
38223
  const disabled = normalizeLocalDisabled(localDisabled, globalDisabled);
38187
38224
  const index = items.indexOf(id2);
38188
- const data2 = useMemo16(() => ({
38225
+ const data2 = useMemo17(() => ({
38189
38226
  sortable: {
38190
38227
  containerId,
38191
38228
  index,
@@ -38193,7 +38230,7 @@ function useSortable(_ref) {
38193
38230
  },
38194
38231
  ...customData
38195
38232
  }), [containerId, customData, index, items]);
38196
- const itemsAfterCurrentSortable = useMemo16(() => items.slice(items.indexOf(id2)), [items, id2]);
38233
+ const itemsAfterCurrentSortable = useMemo17(() => items.slice(items.indexOf(id2)), [items, id2]);
38197
38234
  const {
38198
38235
  rect,
38199
38236
  node,
@@ -38275,7 +38312,7 @@ function useSortable(_ref) {
38275
38312
  node,
38276
38313
  rect
38277
38314
  });
38278
- useEffect42(() => {
38315
+ useEffect43(() => {
38279
38316
  if (isSorting && previous.current.newIndex !== newIndex) {
38280
38317
  previous.current.newIndex = newIndex;
38281
38318
  }
@@ -38286,7 +38323,7 @@ function useSortable(_ref) {
38286
38323
  previous.current.items = items;
38287
38324
  }
38288
38325
  }, [isSorting, newIndex, containerId, items]);
38289
- useEffect42(() => {
38326
+ useEffect43(() => {
38290
38327
  if (activeId === previous.current.activeId) {
38291
38328
  return;
38292
38329
  }
@@ -38471,7 +38508,7 @@ function isAfter(a15, b8) {
38471
38508
  }
38472
38509
 
38473
38510
  // src/components/navigation/SortableResourceTab.tsx
38474
- import { useCallback as useCallback30, useRef as useRef31, useEffect as useEffect43 } from "react";
38511
+ import { useCallback as useCallback30, useRef as useRef31, useEffect as useEffect44 } from "react";
38475
38512
  import { jsx as jsx49, jsxs as jsxs41 } from "react/jsx-runtime";
38476
38513
  function SortableResourceTab({
38477
38514
  resource,
@@ -38495,7 +38532,7 @@ function SortableResourceTab({
38495
38532
  isDragging: isSortableDragging
38496
38533
  } = useSortable({ id: resource.id });
38497
38534
  const onReorderRef = useRef31(onReorder);
38498
- useEffect43(() => {
38535
+ useEffect44(() => {
38499
38536
  onReorderRef.current = onReorder;
38500
38537
  });
38501
38538
  const style = {
@@ -38622,7 +38659,7 @@ function CollapsibleResourceNavigation({
38622
38659
  }) {
38623
38660
  const ChevronLeftIcon = icons.chevronLeft;
38624
38661
  const BarsIcon = icons.bars;
38625
- const [isDropdownOpen, setIsDropdownOpen] = useState38(false);
38662
+ const [isDropdownOpen, setIsDropdownOpen] = useState39(false);
38626
38663
  const dropdownRef = useRef32(null);
38627
38664
  const { announcePickup, announceDrop, announceKeyboardReorder, announceCannotMove } = useDragAnnouncements();
38628
38665
  const t12 = useTranslations("CollapsibleResourceNavigation");
@@ -38638,7 +38675,7 @@ function CollapsibleResourceNavigation({
38638
38675
  };
38639
38676
  const toggleDropdown = () => setIsDropdownOpen(!isDropdownOpen);
38640
38677
  const closeDropdown = () => setIsDropdownOpen(false);
38641
- useEffect44(() => {
38678
+ useEffect45(() => {
38642
38679
  const handleClickOutside = (event) => {
38643
38680
  if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {
38644
38681
  closeDropdown();
@@ -38836,10 +38873,10 @@ function CollapsibleResourceNavigation({
38836
38873
  }
38837
38874
 
38838
38875
  // src/components/modals/ReferenceWizardModal.tsx
38839
- import { useState as useState42, useEffect as useEffect46, useCallback as useCallback33 } from "react";
38876
+ import { useState as useState43, useEffect as useEffect47, useCallback as useCallback33 } from "react";
38840
38877
 
38841
38878
  // src/components/modals/GatherContextStep.tsx
38842
- import { useState as useState39, useEffect as useEffect45, useRef as useRef33 } from "react";
38879
+ import { useState as useState40, useEffect as useEffect46, useRef as useRef33 } from "react";
38843
38880
 
38844
38881
  // src/components/modals/ContextSummary.tsx
38845
38882
  import { deriveViews } from "@semiont/core";
@@ -38906,12 +38943,12 @@ function GatherContextStep({
38906
38943
  onCompose,
38907
38944
  translations: t12
38908
38945
  }) {
38909
- const [sourceExpanded, setSourceExpanded] = useState39(false);
38946
+ const [sourceExpanded, setSourceExpanded] = useState40(false);
38910
38947
  const contextReady = !contextLoading && !contextError && !!context;
38911
38948
  const focus = context?.focus.kind === "annotation" ? context.focus : null;
38912
38949
  const resourceFocus = context?.focus.kind === "resource" ? context.focus : null;
38913
38950
  const highlightRef = useRef33(null);
38914
- useEffect45(() => {
38951
+ useEffect46(() => {
38915
38952
  if (highlightRef.current) {
38916
38953
  highlightRef.current.scrollIntoView({ block: "center", behavior: "instant" });
38917
38954
  }
@@ -39052,7 +39089,7 @@ function GatherContextStep({
39052
39089
  }
39053
39090
 
39054
39091
  // src/components/modals/ConfigureGenerationStep.tsx
39055
- import { useState as useState40 } from "react";
39092
+ import { useState as useState41 } from "react";
39056
39093
  import { LOCALES as LOCALES2 } from "@semiont/core";
39057
39094
  import { jsx as jsx53, jsxs as jsxs45 } from "react/jsx-runtime";
39058
39095
  function ConfigureGenerationStep({
@@ -39064,12 +39101,12 @@ function ConfigureGenerationStep({
39064
39101
  onGenerate,
39065
39102
  translations: t12
39066
39103
  }) {
39067
- const [title, setTitle] = useState40(defaultTitle);
39068
- const [storagePath, setStoragePath] = useState40("");
39069
- const [prompt, setPrompt] = useState40("");
39070
- const [language2, setLanguage] = useState40(locale);
39071
- const [temperature, setTemperature] = useState40(0.7);
39072
- const [maxTokens, setMaxTokens] = useState40(500);
39104
+ const [title, setTitle] = useState41(defaultTitle);
39105
+ const [storagePath, setStoragePath] = useState41("");
39106
+ const [prompt, setPrompt] = useState41("");
39107
+ const [language2, setLanguage] = useState41(locale);
39108
+ const [temperature, setTemperature] = useState41(0.7);
39109
+ const [maxTokens, setMaxTokens] = useState41(500);
39073
39110
  const handleSubmit = (e6) => {
39074
39111
  e6.preventDefault();
39075
39112
  const trimmedPrompt = prompt.trim();
@@ -39228,7 +39265,7 @@ function ConfigureGenerationStep({
39228
39265
  }
39229
39266
 
39230
39267
  // src/components/modals/ConfigureSearchStep.tsx
39231
- import { useState as useState41 } from "react";
39268
+ import { useState as useState42 } from "react";
39232
39269
  import { jsx as jsx54, jsxs as jsxs46 } from "react/jsx-runtime";
39233
39270
  function ConfigureSearchStep({
39234
39271
  isSearching = false,
@@ -39237,8 +39274,8 @@ function ConfigureSearchStep({
39237
39274
  onSearch,
39238
39275
  translations: t12
39239
39276
  }) {
39240
- const [limit, setLimit] = useState41(10);
39241
- const [useSemanticScoring, setUseSemanticScoring] = useState41(true);
39277
+ const [limit, setLimit] = useState42(10);
39278
+ const [useSemanticScoring, setUseSemanticScoring] = useState42(true);
39242
39279
  const handleSubmit = (e6) => {
39243
39280
  e6.preventDefault();
39244
39281
  onSearch({ limit, useSemanticScoring });
@@ -39430,10 +39467,10 @@ function ReferenceWizardModal({
39430
39467
  translations: t12
39431
39468
  }) {
39432
39469
  const session = useObservable(useSemiont().activeSession$);
39433
- const [wizardStep, setWizardStep] = useState42({ step: "gather" });
39434
- const [isSearching, setIsSearching] = useState42(false);
39435
- const [userHint, setUserHint] = useState42("");
39436
- useEffect46(() => {
39470
+ const [wizardStep, setWizardStep] = useState43({ step: "gather" });
39471
+ const [isSearching, setIsSearching] = useState43(false);
39472
+ const [userHint, setUserHint] = useState43("");
39473
+ useEffect47(() => {
39437
39474
  if (isOpen) {
39438
39475
  setWizardStep({ step: "gather" });
39439
39476
  setIsSearching(false);
@@ -39622,16 +39659,16 @@ function ReferenceWizardModal({
39622
39659
  }
39623
39660
 
39624
39661
  // src/components/modals/ResourceGenerateModal.tsx
39625
- import { useState as useState44, useEffect as useEffect47, useCallback as useCallback34 } from "react";
39662
+ import { useState as useState45, useEffect as useEffect48, useCallback as useCallback34 } from "react";
39626
39663
 
39627
39664
  // src/components/modals/ConfigureGatherStep.tsx
39628
- import { useState as useState43 } from "react";
39665
+ import { useState as useState44 } from "react";
39629
39666
  import { jsx as jsx57, jsxs as jsxs49 } from "react/jsx-runtime";
39630
39667
  function ConfigureGatherStep({ defaults, onGather, onCancel, translations: t12, children }) {
39631
- const [includeContent, setIncludeContent] = useState43(defaults?.includeContent ?? true);
39632
- const [includeSummary, setIncludeSummary] = useState43(defaults?.includeSummary ?? true);
39633
- const [depth, setDepth] = useState43(defaults?.depth ?? 2);
39634
- const [maxResources, setMaxResources] = useState43(defaults?.maxResources ?? 10);
39668
+ const [includeContent, setIncludeContent] = useState44(defaults?.includeContent ?? true);
39669
+ const [includeSummary, setIncludeSummary] = useState44(defaults?.includeSummary ?? true);
39670
+ const [depth, setDepth] = useState44(defaults?.depth ?? 2);
39671
+ const [maxResources, setMaxResources] = useState44(defaults?.maxResources ?? 10);
39635
39672
  const handleSubmit = (e6) => {
39636
39673
  e6.preventDefault();
39637
39674
  onGather({ includeContent, includeSummary, depth, maxResources });
@@ -39704,12 +39741,12 @@ function ResourceGenerateModal({
39704
39741
  onGenerateSubmit,
39705
39742
  translations: t12
39706
39743
  }) {
39707
- const [step, setStep] = useState44("configure-gather");
39744
+ const [step, setStep] = useState45("configure-gather");
39708
39745
  const { context, loading, error, gather, reset } = useResourceGather();
39709
39746
  const client = useObservable(useSemiont().activeSession$)?.client;
39710
39747
  const entityTypeOptions = useObservable(client?.browse.entityTypes()) ?? [];
39711
- const [excludeEntityTypes, setExcludeEntityTypes] = useState44([]);
39712
- useEffect47(() => {
39748
+ const [excludeEntityTypes, setExcludeEntityTypes] = useState45([]);
39749
+ useEffect48(() => {
39713
39750
  if (isOpen) {
39714
39751
  setStep("configure-gather");
39715
39752
  setExcludeEntityTypes([]);
@@ -39875,7 +39912,7 @@ function ResourceGenerateModal({
39875
39912
  }
39876
39913
 
39877
39914
  // src/components/modals/SearchModal.tsx
39878
- import { useState as useState45, useEffect as useEffect48, useRef as useRef34 } from "react";
39915
+ import { useState as useState46, useEffect as useEffect49, useRef as useRef34 } from "react";
39879
39916
  var import_operators = __toESM(require_operators(), 1);
39880
39917
  import { getResourceId } from "@semiont/core";
39881
39918
  import { createSearchPipeline } from "@semiont/sdk";
@@ -39924,7 +39961,7 @@ function SearchModal({
39924
39961
  const semiont = useObservable(useSemiont().activeSession$)?.client;
39925
39962
  const semiontRef = useRef34(semiont);
39926
39963
  semiontRef.current = semiont;
39927
- const [selectedIndex, setSelectedIndex] = useState45(0);
39964
+ const [selectedIndex, setSelectedIndex] = useState46(0);
39928
39965
  const t12 = {
39929
39966
  placeholder: translations.placeholder || "Search resources, entities...",
39930
39967
  searching: translations.searching || "Searching...",
@@ -39936,7 +39973,7 @@ function SearchModal({
39936
39973
  enter: translations.enter || "Enter",
39937
39974
  esc: translations.esc || "ESC"
39938
39975
  };
39939
- const [pipeline] = useState45(
39976
+ const [pipeline] = useState46(
39940
39977
  () => createSearchPipeline(
39941
39978
  (q2) => semiontRef.current.browse.resources({ search: q2, limit: SEARCH_LIMIT }).pipe(
39942
39979
  (0, import_operators.map)((resources) => {
@@ -39956,21 +39993,21 @@ function SearchModal({
39956
39993
  { debounceMs: SEARCH_DEBOUNCE_MS }
39957
39994
  )
39958
39995
  );
39959
- useEffect48(() => () => pipeline.dispose(), [pipeline]);
39996
+ useEffect49(() => () => pipeline.dispose(), [pipeline]);
39960
39997
  const query = useObservable(pipeline.query$) ?? "";
39961
39998
  const searchState = useObservable(pipeline.state$);
39962
39999
  const results = searchState?.results ?? [];
39963
40000
  const loading = searchState?.isSearching ?? false;
39964
- useEffect48(() => {
40001
+ useEffect49(() => {
39965
40002
  if (isOpen) {
39966
40003
  pipeline.setQuery("");
39967
40004
  setSelectedIndex(0);
39968
40005
  }
39969
40006
  }, [isOpen, pipeline]);
39970
- useEffect48(() => {
40007
+ useEffect49(() => {
39971
40008
  setSelectedIndex(0);
39972
40009
  }, [results.length]);
39973
- useEffect48(() => {
40010
+ useEffect49(() => {
39974
40011
  if (!query.trim()) return;
39975
40012
  if (loading) {
39976
40013
  announceSearching();
@@ -40086,7 +40123,7 @@ function SearchModal({
40086
40123
  }
40087
40124
 
40088
40125
  // src/components/modals/ResourceSearchModal.tsx
40089
- import { useState as useState46, useEffect as useEffect49, useRef as useRef35 } from "react";
40126
+ import { useState as useState47, useEffect as useEffect50, useRef as useRef35 } from "react";
40090
40127
  var import_operators2 = __toESM(require_operators(), 1);
40091
40128
  import { getResourceId as getResourceId2, getPrimaryRepresentation } from "@semiont/core";
40092
40129
  import { createSearchPipeline as createSearchPipeline2 } from "@semiont/sdk";
@@ -40122,7 +40159,7 @@ function ResourceSearchModal({
40122
40159
  noResults: translations.noResults || "No documents found",
40123
40160
  close: translations.close || "\u2715"
40124
40161
  };
40125
- const [pipeline] = useState46(
40162
+ const [pipeline] = useState47(
40126
40163
  () => createSearchPipeline2(
40127
40164
  (q2) => semiontRef.current.browse.resources({ search: q2, limit: SEARCH_LIMIT2 }).pipe(
40128
40165
  (0, import_operators2.map)((resources) => {
@@ -40133,17 +40170,17 @@ function ResourceSearchModal({
40133
40170
  { debounceMs: SEARCH_DEBOUNCE_MS2, initialQuery: searchTerm }
40134
40171
  )
40135
40172
  );
40136
- useEffect49(() => () => pipeline.dispose(), [pipeline]);
40173
+ useEffect50(() => () => pipeline.dispose(), [pipeline]);
40137
40174
  const search = useObservable(pipeline.query$) ?? "";
40138
40175
  const searchState = useObservable(pipeline.state$);
40139
40176
  const results = searchState?.results ?? [];
40140
40177
  const loading = searchState?.isSearching ?? false;
40141
- useEffect49(() => {
40178
+ useEffect50(() => {
40142
40179
  if (isOpen && searchTerm) {
40143
40180
  pipeline.setQuery(searchTerm);
40144
40181
  }
40145
40182
  }, [isOpen, searchTerm, pipeline]);
40146
- useEffect49(() => {
40183
+ useEffect50(() => {
40147
40184
  if (!search.trim()) return;
40148
40185
  if (loading) {
40149
40186
  announceSearching();
@@ -40263,7 +40300,7 @@ function SkipLinks() {
40263
40300
  }
40264
40301
 
40265
40302
  // src/components/StatusDisplay.tsx
40266
- import { useEffect as useEffect50, useState as useState47 } from "react";
40303
+ import { useEffect as useEffect51, useState as useState48 } from "react";
40267
40304
  import { jsx as jsx62, jsxs as jsxs54 } from "react/jsx-runtime";
40268
40305
  function StatusDisplay({
40269
40306
  isFullyAuthenticated = false,
@@ -40271,10 +40308,10 @@ function StatusDisplay({
40271
40308
  hasValidBackendToken = false
40272
40309
  }) {
40273
40310
  const semiont = useObservable(useSemiont().activeSession$)?.client;
40274
- const [data2, setData] = useState47(null);
40275
- const [loading, setLoading] = useState47(true);
40276
- const [error, setError] = useState47(null);
40277
- useEffect50(() => {
40311
+ const [data2, setData] = useState48(null);
40312
+ const [loading, setLoading] = useState48(true);
40313
+ const [error, setError] = useState48(null);
40314
+ useEffect51(() => {
40278
40315
  if (!semiont) {
40279
40316
  setLoading(false);
40280
40317
  return;
@@ -40366,11 +40403,11 @@ function SessionTimer() {
40366
40403
  }
40367
40404
 
40368
40405
  // src/components/SessionExpiryBanner.tsx
40369
- import { useState as useState48 } from "react";
40406
+ import { useState as useState49 } from "react";
40370
40407
  import { jsx as jsx63, jsxs as jsxs56 } from "react/jsx-runtime";
40371
40408
  function SessionExpiryBanner() {
40372
40409
  const { timeRemaining, isExpiringSoon } = useSessionExpiry();
40373
- const [dismissed, setDismissed] = useState48(false);
40410
+ const [dismissed, setDismissed] = useState49(false);
40374
40411
  const formattedTime = formatTime(timeRemaining);
40375
40412
  if (!isExpiringSoon || dismissed || !formattedTime) {
40376
40413
  return null;
@@ -40591,7 +40628,7 @@ function UnifiedHeader({
40591
40628
  }
40592
40629
 
40593
40630
  // src/components/layout/LeftSidebar.tsx
40594
- import { useState as useState49, useEffect as useEffect51 } from "react";
40631
+ import { useState as useState50, useEffect as useEffect52 } from "react";
40595
40632
  import { jsx as jsx67, jsxs as jsxs59 } from "react/jsx-runtime";
40596
40633
  function LeftSidebar({
40597
40634
  Link,
@@ -40606,7 +40643,7 @@ function LeftSidebar({
40606
40643
  isModerator = false,
40607
40644
  currentPath
40608
40645
  }) {
40609
- const [isCollapsed, setIsCollapsed] = useState49(false);
40646
+ const [isCollapsed, setIsCollapsed] = useState50(false);
40610
40647
  const { width, setWidth, minWidth, maxWidth } = usePanelWidth({
40611
40648
  defaultWidth: 256,
40612
40649
  // 16rem
@@ -40616,7 +40653,7 @@ function LeftSidebar({
40616
40653
  // 25rem
40617
40654
  storageKey: "semiont-left-sidebar-width"
40618
40655
  });
40619
- useEffect51(() => {
40656
+ useEffect52(() => {
40620
40657
  if (collapsible) {
40621
40658
  const saved = localStorage.getItem(storageKey);
40622
40659
  if (saved === "true") {
@@ -41579,7 +41616,7 @@ function ExportCard({ onExport, isExporting, translations: t12 }) {
41579
41616
  }
41580
41617
 
41581
41618
  // src/features/admin-exchange/components/ImportCard.tsx
41582
- import { useRef as useRef36, useState as useState50, useCallback as useCallback36 } from "react";
41619
+ import { useRef as useRef36, useState as useState51, useCallback as useCallback36 } from "react";
41583
41620
  import { jsx as jsx76, jsxs as jsxs66 } from "react/jsx-runtime";
41584
41621
  function ImportCard({
41585
41622
  onFileSelected,
@@ -41591,8 +41628,8 @@ function ImportCard({
41591
41628
  translations: t12
41592
41629
  }) {
41593
41630
  const fileInputRef = useRef36(null);
41594
- const [isDragActive, setIsDragActive] = useState50(false);
41595
- const [showConfirm, setShowConfirm] = useState50(false);
41631
+ const [isDragActive, setIsDragActive] = useState51(false);
41632
+ const [showConfirm, setShowConfirm] = useState51(false);
41596
41633
  const handleDragOver = useCallback36((e6) => {
41597
41634
  e6.preventDefault();
41598
41635
  setIsDragActive(true);
@@ -42005,7 +42042,7 @@ function LinkedDataPage({
42005
42042
  }
42006
42043
 
42007
42044
  // src/features/admin-users/components/AdminUsersPage.tsx
42008
- import { useState as useState51 } from "react";
42045
+ import { useState as useState52 } from "react";
42009
42046
  import { Fragment as Fragment14, jsx as jsx81, jsxs as jsxs71 } from "react/jsx-runtime";
42010
42047
  function UserTableRow({
42011
42048
  user,
@@ -42087,9 +42124,9 @@ function AdminUsersPage({
42087
42124
  Toolbar: Toolbar2,
42088
42125
  buttonStyles: buttonStyles2
42089
42126
  }) {
42090
- const [searchTerm, setSearchTerm] = useState51("");
42091
- const [selectedRole, setSelectedRole] = useState51("all");
42092
- const [selectedStatus, setSelectedStatus] = useState51("all");
42127
+ const [searchTerm, setSearchTerm] = useState52("");
42128
+ const [selectedRole, setSelectedRole] = useState52("all");
42129
+ const [selectedStatus, setSelectedStatus] = useState52("all");
42093
42130
  const filteredUsers = users.filter((user) => {
42094
42131
  const matchesSearch = (user.name || "").toLowerCase().includes(searchTerm.toLowerCase()) || user.email.toLowerCase().includes(searchTerm.toLowerCase());
42095
42132
  const userRole = user.isAdmin ? "admin" : "user";
@@ -42477,7 +42514,7 @@ function SignInForm({
42477
42514
  }
42478
42515
 
42479
42516
  // src/features/auth/components/SignUpForm.tsx
42480
- import { useState as useState52 } from "react";
42517
+ import { useState as useState53 } from "react";
42481
42518
  import { jsx as jsx83, jsxs as jsxs73 } from "react/jsx-runtime";
42482
42519
  function GoogleIcon2() {
42483
42520
  return /* @__PURE__ */ jsxs73("svg", { className: "semiont-icon semiont-icon--small semiont-icon--inline", viewBox: "0 0 24 24", children: [
@@ -42512,7 +42549,7 @@ function GoogleIcon2() {
42512
42549
  ] });
42513
42550
  }
42514
42551
  function SignUpForm({ onSignUp, Link, translations: t12 }) {
42515
- const [isLoading, setIsLoading] = useState52(false);
42552
+ const [isLoading, setIsLoading] = useState53(false);
42516
42553
  const handleSignUp = async () => {
42517
42554
  setIsLoading(true);
42518
42555
  try {
@@ -42969,7 +43006,7 @@ function TagSchemasPage({
42969
43006
  }
42970
43007
 
42971
43008
  // src/features/resource-compose/components/ResourceComposePage.tsx
42972
- import { useState as useState53, useEffect as useEffect52 } from "react";
43009
+ import { useState as useState54, useEffect as useEffect53 } from "react";
42973
43010
  import { deriveViews as deriveViews2 } from "@semiont/core";
42974
43011
  import { capabilitiesOf as capabilitiesOf5, AUTHORABLE_MEDIA_TYPES, MEDIA_TYPES, mediaTypeForExtension, isSupportedMediaType, LOCALES as LOCALES3 } from "@semiont/core";
42975
43012
 
@@ -43072,20 +43109,20 @@ function ResourceComposePage({
43072
43109
  Toolbar: Toolbar2
43073
43110
  }) {
43074
43111
  const { announceFormSubmitting, announceFormSuccess, announceFormError } = useFormAnnouncements();
43075
- const [newResourceName, setNewResourceName] = useState53("");
43076
- const [newResourceContent, setNewResourceContent] = useState53("");
43077
- const [selectedEntityTypes, setSelectedEntityTypes] = useState53([]);
43078
- const [isCreating, setIsCreating] = useState53(false);
43079
- const [inputMethod, setInputMethod] = useState53("write");
43080
- const [uploadedFile, setUploadedFile] = useState53(null);
43081
- const [fileMimeType, setFileMimeType] = useState53("text/markdown");
43082
- const [filePreviewUrl, setFilePreviewUrl] = useState53(null);
43083
- const [selectedFormat, setSelectedFormat] = useState53("text/markdown");
43084
- const [selectedLanguage, setSelectedLanguage] = useState53(initialLocale);
43085
- const [selectedCharset, setSelectedCharset] = useState53("");
43086
- const [storagePath, setStoragePath] = useState53("");
43087
- const [archiveOriginal, setArchiveOriginal] = useState53(true);
43088
- useEffect52(() => {
43112
+ const [newResourceName, setNewResourceName] = useState54("");
43113
+ const [newResourceContent, setNewResourceContent] = useState54("");
43114
+ const [selectedEntityTypes, setSelectedEntityTypes] = useState54([]);
43115
+ const [isCreating, setIsCreating] = useState54(false);
43116
+ const [inputMethod, setInputMethod] = useState54("write");
43117
+ const [uploadedFile, setUploadedFile] = useState54(null);
43118
+ const [fileMimeType, setFileMimeType] = useState54("text/markdown");
43119
+ const [filePreviewUrl, setFilePreviewUrl] = useState54(null);
43120
+ const [selectedFormat, setSelectedFormat] = useState54("text/markdown");
43121
+ const [selectedLanguage, setSelectedLanguage] = useState54(initialLocale);
43122
+ const [selectedCharset, setSelectedCharset] = useState54("");
43123
+ const [storagePath, setStoragePath] = useState54("");
43124
+ const [archiveOriginal, setArchiveOriginal] = useState54(true);
43125
+ useEffect53(() => {
43089
43126
  if (mode === "clone" && cloneData) {
43090
43127
  setNewResourceName(cloneData.sourceResource.name);
43091
43128
  setNewResourceContent(cloneData.sourceContent);
@@ -43120,7 +43157,7 @@ function ResourceComposePage({
43120
43157
  reader.readAsText(file);
43121
43158
  }
43122
43159
  };
43123
- useEffect52(() => {
43160
+ useEffect53(() => {
43124
43161
  return () => {
43125
43162
  if (filePreviewUrl) {
43126
43163
  URL.revokeObjectURL(filePreviewUrl);
@@ -43753,7 +43790,7 @@ function ResourceDiscoveryPage({
43753
43790
  }
43754
43791
 
43755
43792
  // src/features/resource-viewer/components/ResourceViewerPage.tsx
43756
- import { useState as useState54, useEffect as useEffect53, useCallback as useCallback38 } from "react";
43793
+ import { useState as useState55, useEffect as useEffect54, useCallback as useCallback38 } from "react";
43757
43794
  import { annotationId } from "@semiont/core";
43758
43795
  import { getLanguage, getPrimaryRepresentation as getPrimaryRepresentation2, getPrimaryMediaType as getPrimaryMediaType2, capabilitiesOf as capabilitiesOf6 } from "@semiont/core";
43759
43796
 
@@ -43914,7 +43951,7 @@ function ResourceViewerPage({
43914
43951
  const renderMode = capabilitiesOf6(resourceMediaType)?.render;
43915
43952
  const isBinary = renderMode === "image" || renderMode === "pdf";
43916
43953
  const { content: textContent, loading: textLoading, error: contentError } = useResourceContent(semiont ?? null, rUri, resource, !isBinary);
43917
- useEffect53(() => {
43954
+ useEffect54(() => {
43918
43955
  if (contentError) showError("Failed to load resource representation");
43919
43956
  }, [contentError, showError]);
43920
43957
  const { token: mediaToken, loading: mediaTokenLoading } = useMediaToken(semiont ?? null, rUri);
@@ -43947,7 +43984,7 @@ function ResourceViewerPage({
43947
43984
  const wizardResourceId = wizardState?.resourceId ?? null;
43948
43985
  const wizardDefaultTitle = wizardState?.defaultTitle ?? "";
43949
43986
  const wizardEntityTypes = wizardState?.entityTypes ?? [];
43950
- const [generateOpen, setGenerateOpen] = useState54(false);
43987
+ const [generateOpen, setGenerateOpen] = useState55(false);
43951
43988
  const handleWizardClose = useCallback38(() => {
43952
43989
  stateUnit.closeWizard();
43953
43990
  }, [stateUnit]);
@@ -44005,7 +44042,7 @@ function ResourceViewerPage({
44005
44042
  reason: "compose-from-wizard"
44006
44043
  });
44007
44044
  }, [session]);
44008
- useEffect53(() => {
44045
+ useEffect54(() => {
44009
44046
  if (resource && rUri) {
44010
44047
  const mediaType = getPrimaryMediaType2(resource);
44011
44048
  browser2.addOpenResource(rUri, resource.name, mediaType || void 0, resource.storageUri);
@@ -44014,7 +44051,7 @@ function ResourceViewerPage({
44014
44051
  }
44015
44052
  }
44016
44053
  }, [resource, rUri, browser2]);
44017
- useEffect53(() => {
44054
+ useEffect54(() => {
44018
44055
  if (pendingAnnotation) {
44019
44056
  browser2.emit("panel:open", { panel: "annotations" });
44020
44057
  }
@@ -44114,7 +44151,7 @@ function ResourceViewerPage({
44114
44151
  announceResourceLoading,
44115
44152
  announceResourceLoaded
44116
44153
  } = useResourceLoadingAnnouncements();
44117
- useEffect53(() => {
44154
+ useEffect54(() => {
44118
44155
  if (contentLoading) {
44119
44156
  announceResourceLoading(resource.name);
44120
44157
  } else if (content2) {
@@ -45029,6 +45066,7 @@ export {
45029
45066
  useHoverDelay,
45030
45067
  useHoverEmitter,
45031
45068
  useIsTyping,
45069
+ useKBDiscovery,
45032
45070
  useKeyboardShortcuts,
45033
45071
  useLanguageChangeAnnouncements,
45034
45072
  useLineNumbers,