paginar 0.3.6 → 0.3.7

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.es.js CHANGED
@@ -1583,6 +1583,9 @@ function isRef(r) {
1583
1583
  function ref(value) {
1584
1584
  return createRef(value, false);
1585
1585
  }
1586
+ function shallowRef(value) {
1587
+ return createRef(value, true);
1588
+ }
1586
1589
  function createRef(rawValue, shallow) {
1587
1590
  if (isRef(rawValue)) {
1588
1591
  return rawValue;
@@ -9165,6 +9168,71 @@ class VueElement extends BaseClass {
9165
9168
  }
9166
9169
  }
9167
9170
 
9171
+ const getModelAssigner = (vnode) => {
9172
+ const fn = vnode.props["onUpdate:modelValue"] || false;
9173
+ return isArray(fn) ? (value) => invokeArrayFns(fn, value) : fn;
9174
+ };
9175
+ function onCompositionStart(e) {
9176
+ e.target.composing = true;
9177
+ }
9178
+ function onCompositionEnd(e) {
9179
+ const target = e.target;
9180
+ if (target.composing) {
9181
+ target.composing = false;
9182
+ target.dispatchEvent(new Event("input"));
9183
+ }
9184
+ }
9185
+ const assignKey = Symbol("_assign");
9186
+ const vModelText = {
9187
+ created(el, { modifiers: { lazy, trim, number } }, vnode) {
9188
+ el[assignKey] = getModelAssigner(vnode);
9189
+ const castToNumber = number || vnode.props && vnode.props.type === "number";
9190
+ addEventListener$1(el, lazy ? "change" : "input", (e) => {
9191
+ if (e.target.composing) return;
9192
+ let domValue = el.value;
9193
+ if (trim) {
9194
+ domValue = domValue.trim();
9195
+ }
9196
+ if (castToNumber) {
9197
+ domValue = looseToNumber(domValue);
9198
+ }
9199
+ el[assignKey](domValue);
9200
+ });
9201
+ if (trim) {
9202
+ addEventListener$1(el, "change", () => {
9203
+ el.value = el.value.trim();
9204
+ });
9205
+ }
9206
+ if (!lazy) {
9207
+ addEventListener$1(el, "compositionstart", onCompositionStart);
9208
+ addEventListener$1(el, "compositionend", onCompositionEnd);
9209
+ addEventListener$1(el, "change", onCompositionEnd);
9210
+ }
9211
+ },
9212
+ // set value on mounted so it's after min/max for type="range"
9213
+ mounted(el, { value }) {
9214
+ el.value = value == null ? "" : value;
9215
+ },
9216
+ beforeUpdate(el, { value, oldValue, modifiers: { lazy, trim, number } }, vnode) {
9217
+ el[assignKey] = getModelAssigner(vnode);
9218
+ if (el.composing) return;
9219
+ const elValue = (number || el.type === "number") && !/^0\d/.test(el.value) ? looseToNumber(el.value) : el.value;
9220
+ const newValue = value == null ? "" : value;
9221
+ if (elValue === newValue) {
9222
+ return;
9223
+ }
9224
+ if (document.activeElement === el && el.type !== "range") {
9225
+ if (lazy && value === oldValue) {
9226
+ return;
9227
+ }
9228
+ if (trim && el.value.trim() === newValue) {
9229
+ return;
9230
+ }
9231
+ }
9232
+ el.value = newValue;
9233
+ }
9234
+ };
9235
+
9168
9236
  const systemModifiers = ["ctrl", "shift", "alt", "meta"];
9169
9237
  const modifierGuards = {
9170
9238
  stop: (e) => e.stopPropagation(),
@@ -9190,6 +9258,30 @@ const withModifiers = (fn, modifiers) => {
9190
9258
  return fn(event, ...args);
9191
9259
  }));
9192
9260
  };
9261
+ const keyNames = {
9262
+ esc: "escape",
9263
+ space: " ",
9264
+ up: "arrow-up",
9265
+ left: "arrow-left",
9266
+ right: "arrow-right",
9267
+ down: "arrow-down",
9268
+ delete: "backspace"
9269
+ };
9270
+ const withKeys = (fn, modifiers) => {
9271
+ const cache = fn._withKeys || (fn._withKeys = {});
9272
+ const cacheKey = modifiers.join(".");
9273
+ return cache[cacheKey] || (cache[cacheKey] = ((event) => {
9274
+ if (!("key" in event)) {
9275
+ return;
9276
+ }
9277
+ const eventKey = hyphenate(event.key);
9278
+ if (modifiers.some(
9279
+ (k) => k === eventKey || keyNames[k] === eventKey
9280
+ )) {
9281
+ return fn(event);
9282
+ }
9283
+ }));
9284
+ };
9193
9285
 
9194
9286
  const rendererOptions = /* @__PURE__ */ extend({ patchProp }, nodeOps);
9195
9287
  let renderer;
@@ -10162,102 +10254,58 @@ const useReaderSettings = {
10162
10254
  homeUrl
10163
10255
  };
10164
10256
 
10165
- const _export_sfc = (sfc, props) => {
10166
- const target = sfc.__vccOpts || sfc;
10167
- for (const [key, val] of props) {
10168
- target[key] = val;
10169
- }
10170
- return target;
10171
- };
10172
-
10173
- const _sfc_main$t = {};
10174
-
10175
- const _hoisted_1$r = {
10176
- fill: "none",
10177
- stroke: "currentColor",
10178
- viewBox: "0 0 20 22",
10179
- xmlns: "http://www.w3.org/2000/svg"
10180
- };
10181
-
10182
- function _sfc_render$c(_ctx, _cache) {
10183
- return (openBlock(), createElementBlock("svg", _hoisted_1$r, [...(_cache[0] || (_cache[0] = [
10184
- createBaseVNode("path", {
10185
- d: "M1 8L10 1L19 8V19C19 19.5304 18.7893 20.0391 18.4142 20.4142C18.0391 20.7893 17.5304 21 17 21H3C2.46957 21 1.96086 20.7893 1.58579 20.4142C1.21071 20.0391 1 19.5304 1 19V8Z",
10186
- "stroke-width": "2",
10187
- "stroke-linecap": "round",
10188
- "stroke-linejoin": "round"
10189
- }, null, -1),
10190
- createBaseVNode("path", {
10191
- d: "M7 21V11H13V21",
10192
- "stroke-width": "2",
10193
- "stroke-linecap": "round",
10194
- "stroke-linejoin": "round"
10195
- }, null, -1)
10196
- ]))]))
10197
- }
10198
- const IconHome = /*#__PURE__*/_export_sfc(_sfc_main$t, [['render',_sfc_render$c]]);
10199
-
10200
- const _sfc_main$s = {};
10201
-
10202
- const _hoisted_1$q = {
10203
- fill: "none",
10204
- stroke: "currentColor",
10205
- viewBox: "0 0 24 24",
10206
- xmlns: "http://www.w3.org/2000/svg"
10207
- };
10208
-
10209
- function _sfc_render$b(_ctx, _cache) {
10210
- return (openBlock(), createElementBlock("svg", _hoisted_1$q, [...(_cache[0] || (_cache[0] = [
10211
- createBaseVNode("path", {
10212
- "stroke-linecap": "round",
10213
- "stroke-linejoin": "round",
10214
- "stroke-width": "2",
10215
- d: "M6 18L18 6M6 6l12 12"
10216
- }, null, -1)
10217
- ]))]))
10218
- }
10219
- const IconClose = /*#__PURE__*/_export_sfc(_sfc_main$s, [['render',_sfc_render$b]]);
10220
-
10221
- const _sfc_main$r = {};
10222
-
10223
- const _hoisted_1$p = {
10224
- width: "24",
10225
- height: "19",
10226
- viewBox: "0 0 24 19",
10227
- fill: "none",
10228
- stroke: "currentColor",
10229
- xmlns: "http://www.w3.org/2000/svg"
10257
+ const state$5 = reactive({
10258
+ totalPages: 1
10259
+ });
10260
+
10261
+ function estimate(viewport, content) {
10262
+ if (viewport && content) {
10263
+ const { width: viewportWidth } = viewport.value.getBoundingClientRect();
10264
+ const { width: contentWidth } = content.value.getBoundingClientRect();
10265
+
10266
+ if (contentWidth > viewportWidth) {
10267
+ state$5.totalPages = Math.ceil(contentWidth / viewportWidth);
10268
+ return Math.ceil(contentWidth / viewportWidth)
10269
+
10270
+ } else {
10271
+ state$5.totalPages = 1;
10272
+ return 1
10273
+ }
10274
+ } else {
10275
+ state$5.totalPages = 1;
10276
+ return 1
10277
+ }
10278
+ }
10279
+
10280
+ const totalPages$1 = computed(() => state$5.totalPages);
10281
+
10282
+ const useEstimatePages = {
10283
+ totalPages: totalPages$1,
10284
+ estimate
10230
10285
  };
10231
10286
 
10232
- function _sfc_render$a(_ctx, _cache) {
10233
- return (openBlock(), createElementBlock("svg", _hoisted_1$p, [...(_cache[0] || (_cache[0] = [
10234
- createStaticVNode("<line x1=\"5\" y1=\"1.08447\" x2=\"1\" y2=\"1.08447\" stroke-width=\"2\" stroke-linecap=\"round\"></line><line x1=\"23\" y1=\"1.04248\" x2=\"11\" y2=\"1.04248\" stroke-width=\"2\" stroke-linecap=\"round\"></line><line x1=\"23\" y1=\"9.08447\" x2=\"14\" y2=\"9.08447\" stroke-width=\"2\" stroke-linecap=\"round\"></line><line x1=\"8\" y1=\"9.14905\" x2=\"4\" y2=\"9.14905\" stroke-width=\"2\" stroke-linecap=\"round\"></line><line x1=\"23\" y1=\"17.149\" x2=\"10.9993\" y2=\"17.149\" stroke-width=\"2\" stroke-linecap=\"round\"></line><line x1=\"5\" y1=\"17.2429\" x2=\"1\" y2=\"17.2429\" stroke-width=\"2\" stroke-linecap=\"round\"></line>", 6)
10235
- ]))]))
10236
- }
10237
- const IconSummary = /*#__PURE__*/_export_sfc(_sfc_main$r, [['render',_sfc_render$a]]);
10238
-
10239
- const state$5 = reactive({
10287
+ const state$4 = reactive({
10240
10288
  references: [],
10241
10289
  reference: null
10242
10290
  });
10243
10291
 
10244
- const references = computed(() => state$5.references);
10292
+ const references = computed(() => state$4.references);
10245
10293
 
10246
10294
  function setReferences(references) {
10247
- state$5.references = references;
10295
+ state$4.references = references;
10248
10296
  }
10249
10297
 
10250
- const reference = computed(() => state$5.reference);
10298
+ const reference = computed(() => state$4.reference);
10251
10299
 
10252
10300
  function setHighlightedReference(reference) {
10253
- state$5.reference = reference;
10301
+ state$4.reference = reference;
10254
10302
  }
10255
10303
 
10256
10304
  function applyReferences(contentRaw) {
10257
- if (state$5.references.length === 0 || !contentRaw)
10305
+ if (state$4.references.length === 0 || !contentRaw)
10258
10306
  return contentRaw
10259
10307
 
10260
- return state$5.references.reduce((content, reference) => {
10308
+ return state$4.references.reduce((content, reference) => {
10261
10309
  if (!content) return content
10262
10310
 
10263
10311
  if (content.includes(reference.cit)) {
@@ -10283,11 +10331,11 @@ function applyReference(event) {
10283
10331
  const target = classList.find(item => item.startsWith('reference-'));
10284
10332
 
10285
10333
  if (target) {
10286
- const ref = state$5.references.find(
10334
+ const ref = state$4.references.find(
10287
10335
  item => target && item.cit.replaceAll(' ', '') === target.replace('reference-', '')
10288
10336
  );
10289
10337
  if (ref) {
10290
- state$5.reference = ref;
10338
+ state$4.reference = ref;
10291
10339
  }
10292
10340
  }
10293
10341
 
@@ -10302,25 +10350,25 @@ const useReferences = {
10302
10350
  applyReferences,
10303
10351
  };
10304
10352
 
10305
- const state$4 = reactive({
10353
+ const state$3 = reactive({
10306
10354
  footnotes: [],
10307
10355
  showFootnotes: false,
10308
10356
  footnote: null
10309
10357
  });
10310
10358
 
10311
- const footnotes = computed(() => state$4.footnotes);
10359
+ const footnotes = computed(() => state$3.footnotes);
10312
10360
  function setFootnotes(footnotes) {
10313
- state$4.footnotes = footnotes;
10361
+ state$3.footnotes = footnotes;
10314
10362
  }
10315
10363
 
10316
- const showFootnotes = computed(() => state$4.showFootnotes);
10364
+ const showFootnotes = computed(() => state$3.showFootnotes);
10317
10365
  function setShowFootnotes(value) {
10318
- state$4.showFootnotes = value;
10366
+ state$3.showFootnotes = value;
10319
10367
  }
10320
10368
 
10321
- const footnote = computed(() => state$4.footnote);
10369
+ const footnote = computed(() => state$3.footnote);
10322
10370
  function setHighlightedFootnote(footnote) {
10323
- state$4.footnote = footnote;
10371
+ state$3.footnote = footnote;
10324
10372
  }
10325
10373
 
10326
10374
  function applyFootnote(event) {
@@ -10334,9 +10382,9 @@ function applyFootnote(event) {
10334
10382
  );
10335
10383
 
10336
10384
  if (footnoteTarget) {
10337
- const ref = state$4.footnotes.find(item => item.id === footnoteTarget);
10385
+ const ref = state$3.footnotes.find(item => item.id === footnoteTarget);
10338
10386
  if (ref) {
10339
- state$4.footnote = ref;
10387
+ state$3.footnote = ref;
10340
10388
  }
10341
10389
  }
10342
10390
  }
@@ -10351,20 +10399,20 @@ const useFootnotes = {
10351
10399
  showFootnotes
10352
10400
  };
10353
10401
 
10354
- const state$3 = reactive({
10402
+ const state$2 = reactive({
10355
10403
  summary: null,
10356
10404
  content: null,
10357
10405
  activeChapter: 0
10358
10406
  });
10359
10407
 
10360
- const content = computed(() => state$3.content);
10361
- const summary = computed(() => state$3.summary);
10408
+ const content = computed(() => state$2.content);
10409
+ const summary = computed(() => state$2.summary);
10362
10410
  const context = computed(() => {
10363
- const chapters = state$3.summary || [];
10411
+ const chapters = state$2.summary || [];
10364
10412
  const linkedChapter = chapters.findIndex(
10365
10413
  chapter => window.location.href.includes(chapter.link)
10366
10414
  );
10367
- const current = linkedChapter >= 0 ? linkedChapter : state$3.activeChapter;
10415
+ const current = linkedChapter >= 0 ? linkedChapter : state$2.activeChapter;
10368
10416
  return {
10369
10417
  chapter: chapters[current],
10370
10418
  surround: {
@@ -10391,7 +10439,7 @@ async function initContent(contentString, contentWrapper) {
10391
10439
  : null;
10392
10440
 
10393
10441
  if (content?.summary)
10394
- state$3.summary = content.summary;
10442
+ state$2.summary = content.summary;
10395
10443
 
10396
10444
  if (content?.references)
10397
10445
  setReferences(content.references);
@@ -10405,7 +10453,7 @@ async function initContent(contentString, contentWrapper) {
10405
10453
  const newContent = content.applyReferences
10406
10454
  ? applyReferences(text)
10407
10455
  : text;
10408
- state$3.content = newContent;
10456
+ state$2.content = newContent;
10409
10457
 
10410
10458
  // else if content comes from slot, apply references to slot
10411
10459
  } else {
@@ -10430,7 +10478,7 @@ async function getContent(location) {
10430
10478
  return text
10431
10479
  } catch (err) {
10432
10480
  console.log({ err });
10433
- state$3.content = 'Ops, não foi possível carregar o arquivo solicitado.';
10481
+ state$2.content = 'Ops, não foi possível carregar o arquivo solicitado.';
10434
10482
  }
10435
10483
  }
10436
10484
 
@@ -10438,8 +10486,8 @@ function applyContent(text, chapter = null) {
10438
10486
  const { applyReferences } = useReferences;
10439
10487
  const newContent = applyReferences(text);
10440
10488
  if (chapter)
10441
- state$3.activeChapter = state$3.summary.findIndex(item => item === chapter);
10442
- state$3.content = newContent;
10489
+ state$2.activeChapter = state$2.summary.findIndex(item => item === chapter);
10490
+ state$2.content = newContent;
10443
10491
  }
10444
10492
 
10445
10493
  function listenToClicks(contentWrapper) {
@@ -10469,36 +10517,6 @@ const useTextContent = {
10469
10517
  contextId
10470
10518
  };
10471
10519
 
10472
- const state$2 = reactive({
10473
- totalPages: 1
10474
- });
10475
-
10476
- function estimate(viewport, content) {
10477
- if (viewport && content) {
10478
- const { width: viewportWidth } = viewport.value.getBoundingClientRect();
10479
- const { width: contentWidth } = content.value.getBoundingClientRect();
10480
-
10481
- if (contentWidth > viewportWidth) {
10482
- state$2.totalPages = Math.ceil(contentWidth / viewportWidth);
10483
- return Math.ceil(contentWidth / viewportWidth)
10484
-
10485
- } else {
10486
- state$2.totalPages = 1;
10487
- return 1
10488
- }
10489
- } else {
10490
- state$2.totalPages = 1;
10491
- return 1
10492
- }
10493
- }
10494
-
10495
- const totalPages$1 = computed(() => state$2.totalPages);
10496
-
10497
- const useEstimatePages = {
10498
- totalPages: totalPages$1,
10499
- estimate
10500
- };
10501
-
10502
10520
  const isSafari = [
10503
10521
  'iPad Simulator',
10504
10522
  'iPhone Simulator',
@@ -10816,16 +10834,392 @@ const usePagination = {
10816
10834
  set
10817
10835
  };
10818
10836
 
10837
+ // Keep offsets into the original UTF-16 text so matches can become DOM Ranges.
10838
+ function normalizeSearchText(value) {
10839
+ let text = '';
10840
+ const starts = [];
10841
+ const ends = [];
10842
+ let offset = 0;
10843
+ for (const character of value) {
10844
+ const end = offset + character.length;
10845
+ const normalized = character.normalize('NFKD').replace(/\p{M}/gu, '').toLowerCase();
10846
+ if (!normalized && ends.length)
10847
+ ends[ends.length - 1] = end;
10848
+ for (const part of normalized) {
10849
+ const next = /[\p{L}\p{N}]/u.test(part) ? part : ' ';
10850
+ if (next === ' ' && text.endsWith(' ')) {
10851
+ ends[ends.length - 1] = end;
10852
+ continue
10853
+ }
10854
+ text += next;
10855
+ for (let index = 0; index < next.length; index++) {
10856
+ starts.push(offset);
10857
+ ends.push(end);
10858
+ }
10859
+ }
10860
+ offset = end;
10861
+ }
10862
+ return { text, starts, ends }
10863
+ }
10864
+
10865
+ // At most one insertion, deletion, substitution or adjacent transposition.
10866
+ function nearWord(left, right) {
10867
+ if (left === right)
10868
+ return true
10869
+ if (left.length < 5 || Math.abs(left.length - right.length) > 1)
10870
+ return false
10871
+ let index = 0;
10872
+ while (index < Math.min(left.length, right.length) && left[index] === right[index])
10873
+ index++;
10874
+ if (left.length === right.length) {
10875
+ return left.slice(index + 1) === right.slice(index + 1) || (
10876
+ left[index] === right[index + 1] && left[index + 1] === right[index] &&
10877
+ left.slice(index + 2) === right.slice(index + 2)
10878
+ )
10879
+ }
10880
+ return left.length > right.length
10881
+ ? left.slice(index + 1) === right.slice(index)
10882
+ : left.slice(index) === right.slice(index + 1)
10883
+ }
10884
+
10885
+ function findSearchMatches(index, query) {
10886
+ const needle = normalizeSearchText(query).text.trim();
10887
+ if (!needle)
10888
+ return []
10889
+ const hits = [];
10890
+ let position = index.text.indexOf(needle);
10891
+ while (position !== -1) {
10892
+ hits.push({ start: position, end: position + needle.length });
10893
+ position = index.text.indexOf(needle, position + needle.length);
10894
+ }
10895
+ const words = needle.split(' ');
10896
+ const tokens = Array.from(index.text.matchAll(/[\p{L}\p{N}]+/gu));
10897
+ const exactCount = hits.length;
10898
+ let exactIndex = 0;
10899
+ for (let offset = 0; offset <= tokens.length - words.length; offset++) {
10900
+ const start = tokens[offset].index;
10901
+ const last = tokens[offset + words.length - 1];
10902
+ const end = last.index + last[0].length;
10903
+ while (exactIndex < exactCount && hits[exactIndex].end <= start)
10904
+ exactIndex++;
10905
+ if (exactIndex < exactCount && hits[exactIndex].start < end)
10906
+ continue
10907
+ if (words.every((word, part) => nearWord(word, tokens[offset + part][0])))
10908
+ hits.push({ start, end, approximate: true });
10909
+ }
10910
+ return hits.sort((left, right) => left.start - right.start)
10911
+ .map(hit => ({ start: index.starts[hit.start], end: index.ends[hit.end - 1] }))
10912
+ }
10913
+
10914
+ const searchKey = Symbol('paginarSearch');
10915
+
10916
+ // Walk the rendered slot tree as well as HTML loaded inside the shadow root.
10917
+ function indexContent(root) {
10918
+ let text = '';
10919
+ const nodes = [];
10920
+ function visit(node) {
10921
+ if (node.nodeType === Node.TEXT_NODE) {
10922
+ nodes.push({ node, start: text.length, end: text.length + node.length });
10923
+ text += node.data;
10924
+ return
10925
+ }
10926
+ if (node.nodeType !== Node.ELEMENT_NODE)
10927
+ return
10928
+ if (node.matches('script, style, template, noscript, [hidden], [aria-hidden="true"]'))
10929
+ return
10930
+ const style = getComputedStyle(node);
10931
+ if (style.display === 'none' || style.visibility === 'hidden')
10932
+ return
10933
+ const separator = node.tagName === 'BR' || !['inline', 'contents'].includes(style.display);
10934
+ if (separator) text += ' ';
10935
+ const children = node.tagName === 'SLOT'
10936
+ ? node.assignedNodes({ flatten: true })
10937
+ : node.childNodes;
10938
+ for (const child of children.length ? children : node.childNodes)
10939
+ visit(child);
10940
+ if (separator) text += ' ';
10941
+ }
10942
+ visit(root);
10943
+ return { ...normalizeSearchText(text), nodes }
10944
+ }
10945
+
10946
+ function rangeForMatch(index, match) {
10947
+ // Binary search keeps mapping a common word in a long chapter inexpensive.
10948
+ function findNode(offset) {
10949
+ let low = 0;
10950
+ let high = index.nodes.length - 1;
10951
+ while (low <= high) {
10952
+ const middle = (low + high) >> 1;
10953
+ const item = index.nodes[middle];
10954
+ if (offset < item.start) high = middle - 1;
10955
+ else if (offset >= item.end) low = middle + 1;
10956
+ else return item
10957
+ }
10958
+ }
10959
+ const first = findNode(match.start);
10960
+ const last = findNode(match.end - 1);
10961
+ if (!first || !last || first.node.getRootNode() !== last.node.getRootNode())
10962
+ return null
10963
+ const range = document.createRange();
10964
+ range.setStart(first.node, match.start - first.start);
10965
+ range.setEnd(last.node, match.end - last.start);
10966
+ return range
10967
+ }
10968
+
10969
+ function useSearch(root, viewport, content) {
10970
+ const enabled = ref(false);
10971
+ const open = ref(false);
10972
+ const query = ref('');
10973
+ const input = ref(null);
10974
+ const button = ref(null);
10975
+ const active = ref(-1);
10976
+ const total = ref(0);
10977
+ const geometry = shallowRef([]);
10978
+ const pageWidth = ref(0);
10979
+ const rectangles = computed(() => {
10980
+ if (!open.value) return []
10981
+ // Include adjacent pages so highlights accompany the sliding text.
10982
+ const left = (usePagination.currentPage.value - 2) * pageWidth.value;
10983
+ const right = (usePagination.currentPage.value + 1) * pageWidth.value;
10984
+ return geometry.value.filter(rect => rect.left < right && rect.right > left)
10985
+ .map(rect => ({ ...rect, active: rect.match === active.value }))
10986
+ });
10987
+ const pending = ref(false);
10988
+ let ranges = [];
10989
+ let index = null;
10990
+ let timer = null;
10991
+ let observer = null;
10992
+ let host = null;
10993
+
10994
+ function init(settingsString) {
10995
+ enabled.value = settingsString ? JSON.parse(settingsString).search === true : false;
10996
+ }
10997
+
10998
+ function measure() {
10999
+ const columns = viewport.value?.querySelector('.columnsArea');
11000
+ if (!open.value || !ranges.length || !columns) {
11001
+ geometry.value = [];
11002
+ return
11003
+ }
11004
+ const origin = columns.getBoundingClientRect();
11005
+ pageWidth.value = viewport.value.getBoundingClientRect().width;
11006
+ const measured = [];
11007
+ ranges.forEach((range, match) => {
11008
+ if (!range.startContainer.isConnected) return
11009
+ const seen = new Set();
11010
+ for (const rect of range.getClientRects()) {
11011
+ if (!rect.width || !rect.height) continue
11012
+ const key = `${rect.left},${rect.top},${rect.width},${rect.height}`;
11013
+ // Inline elements can yield the same rectangle as their text node.
11014
+ if (seen.has(key)) continue
11015
+ seen.add(key);
11016
+ measured.push({
11017
+ key: `${match}:${key}`, match,
11018
+ left: rect.left - origin.left, right: rect.right - origin.left,
11019
+ style: {
11020
+ left: `${rect.left - origin.left}px`, top: `${rect.top - origin.top}px`,
11021
+ width: `${rect.width}px`, height: `${rect.height}px`
11022
+ }
11023
+ });
11024
+ }
11025
+ });
11026
+ geometry.value = measured;
11027
+ }
11028
+
11029
+ function navigate(position) {
11030
+ if (!ranges.length || useReaderSettings.blocked.value)
11031
+ return
11032
+ active.value = (position + ranges.length) % ranges.length;
11033
+ const rect = geometry.value.find(rect => rect.match === active.value);
11034
+ if (rect && pageWidth.value)
11035
+ usePagination.set(Math.floor(Math.max(0, rect.left) / pageWidth.value) + 1, 'search');
11036
+ }
11037
+
11038
+ function run() {
11039
+ clearTimeout(timer);
11040
+ pending.value = false;
11041
+ if (!enabled.value || !open.value || !content.value)
11042
+ return
11043
+ index ||= indexContent(content.value);
11044
+ ranges = findSearchMatches(index, query.value)
11045
+ .map(match => rangeForMatch(index, match)).filter(Boolean);
11046
+ total.value = ranges.length;
11047
+ active.value = -1;
11048
+ measure();
11049
+ navigate(0);
11050
+ }
11051
+
11052
+ function schedule(invalidate = false) {
11053
+ if (invalidate) index = null;
11054
+ clearTimeout(timer);
11055
+ ranges = [];
11056
+ total.value = 0;
11057
+ active.value = -1;
11058
+ geometry.value = [];
11059
+ pending.value = open.value && Boolean(query.value.trim());
11060
+ if (pending.value) timer = setTimeout(run, 180);
11061
+ }
11062
+
11063
+ async function show() {
11064
+ if (!enabled.value || useReaderSettings.blocked.value)
11065
+ return
11066
+ open.value = true;
11067
+ run();
11068
+ await nextTick();
11069
+ input.value?.focus({ preventScroll: true });
11070
+ input.value?.select();
11071
+ }
11072
+
11073
+ function close() {
11074
+ open.value = false;
11075
+ clearTimeout(timer);
11076
+ pending.value = false;
11077
+ geometry.value = [];
11078
+ button.value?.focus({ preventScroll: true });
11079
+ }
11080
+
11081
+ function step(direction) {
11082
+ if (pending.value) run();
11083
+ else navigate(active.value + direction);
11084
+ }
11085
+
11086
+ function onKeydown(event) {
11087
+ if (!enabled.value || event.defaultPrevented)
11088
+ return
11089
+ const path = event.composedPath();
11090
+ const otherReader = path.find(node => node?.tagName === 'PAGINATE-CONTENT');
11091
+ if (otherReader && otherReader !== host)
11092
+ return
11093
+ if (event.key === 'Escape' && open.value) {
11094
+ event.preventDefault();
11095
+ close();
11096
+ } else if ((event.ctrlKey || event.metaKey) && !event.altKey && event.key.toLowerCase() === 'f') {
11097
+ // Keep browser find available in unrelated editing fields on the host page.
11098
+ if (!path.includes(host) && path.some(node =>
11099
+ node?.matches?.('input, textarea, select, [contenteditable="true"]')))
11100
+ return
11101
+ if (useReaderSettings.blocked.value || !host?.getClientRects().length)
11102
+ return
11103
+ event.preventDefault();
11104
+ show();
11105
+ }
11106
+ }
11107
+
11108
+ onMounted(() => {
11109
+ host = root.value.getRootNode().host;
11110
+ window.addEventListener('keydown', onKeydown, true);
11111
+ observer = new MutationObserver(() => schedule(true));
11112
+ observer.observe(content.value, { subtree: true, childList: true, characterData: true });
11113
+ if (host) observer.observe(host, { subtree: true, childList: true, characterData: true });
11114
+ content.value.addEventListener('slotchange', invalidate);
11115
+ });
11116
+ function invalidate() { schedule(true); }
11117
+ onBeforeUnmount(() => {
11118
+ clearTimeout(timer);
11119
+ observer?.disconnect();
11120
+ window.removeEventListener('keydown', onKeydown, true);
11121
+ content.value?.removeEventListener('slotchange', invalidate);
11122
+ ranges = [];
11123
+ index = null;
11124
+ });
11125
+ watch(query, () => schedule());
11126
+ watch(useReaderSettings.blocked, blocked => {
11127
+ if (!blocked && open.value && active.value < 0)
11128
+ navigate(0);
11129
+ });
11130
+ return {
11131
+ enabled, open, query, input, button, active, total, rectangles, pending,
11132
+ init, show, close, step, measure,
11133
+ status: computed(() => pending.value ? 'Buscando…' : total.value
11134
+ ? `${active.value >= 0 ? `${active.value + 1} de ` : ''}${total.value} ${total.value === 1 ? 'ocorrência' : 'ocorrências'}`
11135
+ : query.value.trim() ? 'Nenhuma ocorrência' : 'Digite para buscar')
11136
+ }
11137
+ }
11138
+
11139
+ const _export_sfc = (sfc, props) => {
11140
+ const target = sfc.__vccOpts || sfc;
11141
+ for (const [key, val] of props) {
11142
+ target[key] = val;
11143
+ }
11144
+ return target;
11145
+ };
11146
+
11147
+ const _sfc_main$u = {};
11148
+
11149
+ const _hoisted_1$s = {
11150
+ fill: "none",
11151
+ stroke: "currentColor",
11152
+ viewBox: "0 0 20 22",
11153
+ xmlns: "http://www.w3.org/2000/svg"
11154
+ };
11155
+
11156
+ function _sfc_render$c(_ctx, _cache) {
11157
+ return (openBlock(), createElementBlock("svg", _hoisted_1$s, [...(_cache[0] || (_cache[0] = [
11158
+ createBaseVNode("path", {
11159
+ d: "M1 8L10 1L19 8V19C19 19.5304 18.7893 20.0391 18.4142 20.4142C18.0391 20.7893 17.5304 21 17 21H3C2.46957 21 1.96086 20.7893 1.58579 20.4142C1.21071 20.0391 1 19.5304 1 19V8Z",
11160
+ "stroke-width": "2",
11161
+ "stroke-linecap": "round",
11162
+ "stroke-linejoin": "round"
11163
+ }, null, -1),
11164
+ createBaseVNode("path", {
11165
+ d: "M7 21V11H13V21",
11166
+ "stroke-width": "2",
11167
+ "stroke-linecap": "round",
11168
+ "stroke-linejoin": "round"
11169
+ }, null, -1)
11170
+ ]))]))
11171
+ }
11172
+ const IconHome = /*#__PURE__*/_export_sfc(_sfc_main$u, [['render',_sfc_render$c]]);
11173
+
11174
+ const _sfc_main$t = {};
11175
+
11176
+ const _hoisted_1$r = {
11177
+ fill: "none",
11178
+ stroke: "currentColor",
11179
+ viewBox: "0 0 24 24",
11180
+ xmlns: "http://www.w3.org/2000/svg"
11181
+ };
11182
+
11183
+ function _sfc_render$b(_ctx, _cache) {
11184
+ return (openBlock(), createElementBlock("svg", _hoisted_1$r, [...(_cache[0] || (_cache[0] = [
11185
+ createBaseVNode("path", {
11186
+ "stroke-linecap": "round",
11187
+ "stroke-linejoin": "round",
11188
+ "stroke-width": "2",
11189
+ d: "M6 18L18 6M6 6l12 12"
11190
+ }, null, -1)
11191
+ ]))]))
11192
+ }
11193
+ const IconClose = /*#__PURE__*/_export_sfc(_sfc_main$t, [['render',_sfc_render$b]]);
11194
+
11195
+ const _sfc_main$s = {};
11196
+
11197
+ const _hoisted_1$q = {
11198
+ width: "24",
11199
+ height: "19",
11200
+ viewBox: "0 0 24 19",
11201
+ fill: "none",
11202
+ stroke: "currentColor",
11203
+ xmlns: "http://www.w3.org/2000/svg"
11204
+ };
11205
+
11206
+ function _sfc_render$a(_ctx, _cache) {
11207
+ return (openBlock(), createElementBlock("svg", _hoisted_1$q, [...(_cache[0] || (_cache[0] = [
11208
+ createStaticVNode("<line x1=\"5\" y1=\"1.08447\" x2=\"1\" y2=\"1.08447\" stroke-width=\"2\" stroke-linecap=\"round\"></line><line x1=\"23\" y1=\"1.04248\" x2=\"11\" y2=\"1.04248\" stroke-width=\"2\" stroke-linecap=\"round\"></line><line x1=\"23\" y1=\"9.08447\" x2=\"14\" y2=\"9.08447\" stroke-width=\"2\" stroke-linecap=\"round\"></line><line x1=\"8\" y1=\"9.14905\" x2=\"4\" y2=\"9.14905\" stroke-width=\"2\" stroke-linecap=\"round\"></line><line x1=\"23\" y1=\"17.149\" x2=\"10.9993\" y2=\"17.149\" stroke-width=\"2\" stroke-linecap=\"round\"></line><line x1=\"5\" y1=\"17.2429\" x2=\"1\" y2=\"17.2429\" stroke-width=\"2\" stroke-linecap=\"round\"></line>", 6)
11209
+ ]))]))
11210
+ }
11211
+ const IconSummary = /*#__PURE__*/_export_sfc(_sfc_main$s, [['render',_sfc_render$a]]);
11212
+
10819
11213
  const publicEventKey = Symbol('paginarPublicEvent');
10820
11214
 
10821
- const _hoisted_1$o = ["role"];
10822
- const _hoisted_2$c = { class: "summary-menu-dropdown-item-title" };
10823
- const _hoisted_3$4 = {
11215
+ const _hoisted_1$p = ["role"];
11216
+ const _hoisted_2$d = { class: "summary-menu-dropdown-item-title" };
11217
+ const _hoisted_3$6 = {
10824
11218
  key: 0,
10825
11219
  class: "summary-menu-dropdown-item-author"
10826
11220
  };
10827
11221
 
10828
- const _sfc_main$q = {
11222
+ const _sfc_main$r = {
10829
11223
  __name: 'SummaryDropdown',
10830
11224
  setup(__props) {
10831
11225
 
@@ -10858,9 +11252,9 @@ return (_ctx, _cache) => {
10858
11252
  onClick: $event => (item.file ? getChapter(item) : null)
10859
11253
  }, {
10860
11254
  default: withCtx(() => [
10861
- createBaseVNode("span", _hoisted_2$c, toDisplayString(item.title), 1),
11255
+ createBaseVNode("span", _hoisted_2$d, toDisplayString(item.title), 1),
10862
11256
  (item.author)
10863
- ? (openBlock(), createElementBlock("span", _hoisted_3$4, toDisplayString(item.author), 1))
11257
+ ? (openBlock(), createElementBlock("span", _hoisted_3$6, toDisplayString(item.author), 1))
10864
11258
  : createCommentVNode("", true)
10865
11259
  ]),
10866
11260
  _: 2
@@ -10868,19 +11262,19 @@ return (_ctx, _cache) => {
10868
11262
  }), 128)),
10869
11263
  renderSlot(_ctx.$slots, "summaryBottom")
10870
11264
  ])
10871
- ], 8, _hoisted_1$o))
11265
+ ], 8, _hoisted_1$p))
10872
11266
  }
10873
11267
  }
10874
11268
 
10875
11269
  };
10876
11270
 
10877
- const _hoisted_1$n = { class: "flex" };
10878
- const _hoisted_2$b = ["href"];
10879
- const _hoisted_3$3 = { class: "position-relative" };
10880
- const _hoisted_4$2 = ["aria-expanded"];
11271
+ const _hoisted_1$o = { class: "flex" };
11272
+ const _hoisted_2$c = ["href"];
11273
+ const _hoisted_3$5 = { class: "position-relative" };
11274
+ const _hoisted_4$3 = ["aria-expanded"];
10881
11275
 
10882
11276
 
10883
- const _sfc_main$p = {
11277
+ const _sfc_main$q = {
10884
11278
  __name: 'SummaryButton',
10885
11279
  setup(__props) {
10886
11280
 
@@ -10913,7 +11307,7 @@ return (_ctx, _cache) => {
10913
11307
  ref: button,
10914
11308
  class: "relative"
10915
11309
  }, [
10916
- createBaseVNode("div", _hoisted_1$n, [
11310
+ createBaseVNode("div", _hoisted_1$o, [
10917
11311
  (unref(homeUrl))
10918
11312
  ? (openBlock(), createElementBlock("a", {
10919
11313
  key: 0,
@@ -10923,9 +11317,9 @@ return (_ctx, _cache) => {
10923
11317
  class: "hidden md:flex items-center border p-3 shadow mr-3 border-white text-white"
10924
11318
  }, [
10925
11319
  createVNode(IconHome, { class: "w-6 h-6" })
10926
- ], 8, _hoisted_2$b))
11320
+ ], 8, _hoisted_2$c))
10927
11321
  : createCommentVNode("", true),
10928
- createBaseVNode("div", _hoisted_3$3, [
11322
+ createBaseVNode("div", _hoisted_3$5, [
10929
11323
  createBaseVNode("button", {
10930
11324
  onClick: _cache[0] || (_cache[0] = withModifiers($event => (toggleSummary()), ["prevent"])),
10931
11325
  class: "border p-3 shadow flex items-center border-white text-white",
@@ -10940,7 +11334,7 @@ return (_ctx, _cache) => {
10940
11334
  class: "w-6 h-6"
10941
11335
  })),
10942
11336
  _cache[1] || (_cache[1] = createBaseVNode("span", { class: "block ml-3" }, " Sumário ", -1))
10943
- ], 8, _hoisted_4$2),
11337
+ ], 8, _hoisted_4$3),
10944
11338
  createVNode(Transition, {
10945
11339
  "enter-active-class": "transition ease-out duration-100 transform",
10946
11340
  "enter-class": "opacity-0 scale-95",
@@ -10951,7 +11345,7 @@ return (_ctx, _cache) => {
10951
11345
  }, {
10952
11346
  default: withCtx(() => [
10953
11347
  (show.value)
10954
- ? (openBlock(), createBlock(_sfc_main$q, { key: 0 }, {
11348
+ ? (openBlock(), createBlock(_sfc_main$r, { key: 0 }, {
10955
11349
  summaryTop: withCtx(() => [
10956
11350
  renderSlot(_ctx.$slots, "summaryTop")
10957
11351
  ]),
@@ -10972,9 +11366,9 @@ return (_ctx, _cache) => {
10972
11366
 
10973
11367
  };
10974
11368
 
10975
- const _sfc_main$o = {};
11369
+ const _sfc_main$p = {};
10976
11370
 
10977
- const _hoisted_1$m = {
11371
+ const _hoisted_1$n = {
10978
11372
  fill: "none",
10979
11373
  stroke: "currentColor",
10980
11374
  viewBox: "0 0 24 24",
@@ -10982,7 +11376,7 @@ const _hoisted_1$m = {
10982
11376
  };
10983
11377
 
10984
11378
  function _sfc_render$9(_ctx, _cache) {
10985
- return (openBlock(), createElementBlock("svg", _hoisted_1$m, [...(_cache[0] || (_cache[0] = [
11379
+ return (openBlock(), createElementBlock("svg", _hoisted_1$n, [...(_cache[0] || (_cache[0] = [
10986
11380
  createBaseVNode("path", {
10987
11381
  "stroke-linecap": "round",
10988
11382
  "stroke-linejoin": "round",
@@ -10991,11 +11385,11 @@ function _sfc_render$9(_ctx, _cache) {
10991
11385
  }, null, -1)
10992
11386
  ]))]))
10993
11387
  }
10994
- const IconThreeDots = /*#__PURE__*/_export_sfc(_sfc_main$o, [['render',_sfc_render$9]]);
11388
+ const IconThreeDots = /*#__PURE__*/_export_sfc(_sfc_main$p, [['render',_sfc_render$9]]);
10995
11389
 
10996
- const _sfc_main$n = {};
11390
+ const _sfc_main$o = {};
10997
11391
 
10998
- const _hoisted_1$l = {
11392
+ const _hoisted_1$m = {
10999
11393
  fill: "none",
11000
11394
  stroke: "currentColor",
11001
11395
  viewBox: "0 0 24 24",
@@ -11003,7 +11397,7 @@ const _hoisted_1$l = {
11003
11397
  };
11004
11398
 
11005
11399
  function _sfc_render$8(_ctx, _cache) {
11006
- return (openBlock(), createElementBlock("svg", _hoisted_1$l, [...(_cache[0] || (_cache[0] = [
11400
+ return (openBlock(), createElementBlock("svg", _hoisted_1$m, [...(_cache[0] || (_cache[0] = [
11007
11401
  createBaseVNode("path", {
11008
11402
  "stroke-linecap": "round",
11009
11403
  "stroke-linejoin": "round",
@@ -11012,11 +11406,11 @@ function _sfc_render$8(_ctx, _cache) {
11012
11406
  }, null, -1)
11013
11407
  ]))]))
11014
11408
  }
11015
- const IconExpand = /*#__PURE__*/_export_sfc(_sfc_main$n, [['render',_sfc_render$8]]);
11409
+ const IconExpand = /*#__PURE__*/_export_sfc(_sfc_main$o, [['render',_sfc_render$8]]);
11016
11410
 
11017
- const _sfc_main$m = {};
11411
+ const _sfc_main$n = {};
11018
11412
 
11019
- const _hoisted_1$k = {
11413
+ const _hoisted_1$l = {
11020
11414
  fill: "none",
11021
11415
  stroke: "currentColor",
11022
11416
  viewBox: "0 0 24 24",
@@ -11024,7 +11418,7 @@ const _hoisted_1$k = {
11024
11418
  };
11025
11419
 
11026
11420
  function _sfc_render$7(_ctx, _cache) {
11027
- return (openBlock(), createElementBlock("svg", _hoisted_1$k, [...(_cache[0] || (_cache[0] = [
11421
+ return (openBlock(), createElementBlock("svg", _hoisted_1$l, [...(_cache[0] || (_cache[0] = [
11028
11422
  createBaseVNode("path", {
11029
11423
  "stroke-linecap": "round",
11030
11424
  "stroke-linejoin": "round",
@@ -11039,11 +11433,11 @@ function _sfc_render$7(_ctx, _cache) {
11039
11433
  }, null, -1)
11040
11434
  ]))]))
11041
11435
  }
11042
- const IconEye = /*#__PURE__*/_export_sfc(_sfc_main$m, [['render',_sfc_render$7]]);
11436
+ const IconEye = /*#__PURE__*/_export_sfc(_sfc_main$n, [['render',_sfc_render$7]]);
11043
11437
 
11044
- const _sfc_main$l = {};
11438
+ const _sfc_main$m = {};
11045
11439
 
11046
- const _hoisted_1$j = {
11440
+ const _hoisted_1$k = {
11047
11441
  fill: "none",
11048
11442
  stroke: "currentColor",
11049
11443
  viewBox: "0 0 24 24",
@@ -11051,7 +11445,7 @@ const _hoisted_1$j = {
11051
11445
  };
11052
11446
 
11053
11447
  function _sfc_render$6(_ctx, _cache) {
11054
- return (openBlock(), createElementBlock("svg", _hoisted_1$j, [...(_cache[0] || (_cache[0] = [
11448
+ return (openBlock(), createElementBlock("svg", _hoisted_1$k, [...(_cache[0] || (_cache[0] = [
11055
11449
  createBaseVNode("path", {
11056
11450
  "stroke-linecap": "round",
11057
11451
  "stroke-linejoin": "round",
@@ -11060,43 +11454,43 @@ function _sfc_render$6(_ctx, _cache) {
11060
11454
  }, null, -1)
11061
11455
  ]))]))
11062
11456
  }
11063
- const IconFootnote = /*#__PURE__*/_export_sfc(_sfc_main$l, [['render',_sfc_render$6]]);
11457
+ const IconFootnote = /*#__PURE__*/_export_sfc(_sfc_main$m, [['render',_sfc_render$6]]);
11064
11458
 
11065
- const _sfc_main$k = {};
11459
+ const _sfc_main$l = {};
11066
11460
 
11067
- const _hoisted_1$i = {
11461
+ const _hoisted_1$j = {
11068
11462
  viewBox: "0 0 341.5 441.2",
11069
11463
  fill: "currentColor"
11070
11464
  };
11071
11465
 
11072
11466
  function _sfc_render$5(_ctx, _cache) {
11073
- return (openBlock(), createElementBlock("svg", _hoisted_1$i, [...(_cache[0] || (_cache[0] = [
11467
+ return (openBlock(), createElementBlock("svg", _hoisted_1$j, [...(_cache[0] || (_cache[0] = [
11074
11468
  createStaticVNode("<rect data-v-acadaaca=\"\" x=\"73.2\" y=\"143.7\" width=\"195.2\" height=\"20\"></rect><rect data-v-acadaaca=\"\" x=\"73.2\" y=\"82.7\" width=\"195.2\" height=\"20\"></rect><rect data-v-acadaaca=\"\" x=\"73.2\" y=\"203.7\" width=\"195.2\" height=\"20\"></rect><rect data-v-acadaaca=\"\" x=\"73.2\" y=\"263.7\" width=\"195.2\" height=\"20\"></rect><rect data-v-acadaaca=\"\" x=\"73.2\" y=\"319\" width=\"195.2\" height=\"20\"></rect><rect data-v-acadaaca=\"\" x=\"0\" y=\"-0.6\" width=\"332.3\" height=\"15\"></rect><rect data-v-acadaaca=\"\" x=\"0\" y=\"426.2\" width=\"332.3\" height=\"15\"></rect><rect data-v-acadaaca=\"\" x=\"-209.4\" y=\"216.2\" transform=\"matrix(6.123234e-17 -1 1 6.123234e-17 -216.2339 231.2339)\" width=\"433.7\" height=\"15\"></rect><rect data-v-acadaaca=\"\" x=\"108\" y=\"211.9\" transform=\"matrix(6.123234e-17 -1 1 6.123234e-17 105.4808 544.1859)\" width=\"433.7\" height=\"15\"></rect>", 9)
11075
11469
  ]))]))
11076
11470
  }
11077
- const SingleColumn = /*#__PURE__*/_export_sfc(_sfc_main$k, [['render',_sfc_render$5]]);
11471
+ const SingleColumn = /*#__PURE__*/_export_sfc(_sfc_main$l, [['render',_sfc_render$5]]);
11078
11472
 
11079
- const _sfc_main$j = {};
11473
+ const _sfc_main$k = {};
11080
11474
 
11081
- const _hoisted_1$h = {
11475
+ const _hoisted_1$i = {
11082
11476
  viewBox: "0 0 653 441.2",
11083
11477
  fill: "currentColor"
11084
11478
  };
11085
11479
 
11086
11480
  function _sfc_render$4(_ctx, _cache) {
11087
- return (openBlock(), createElementBlock("svg", _hoisted_1$h, [...(_cache[0] || (_cache[0] = [
11481
+ return (openBlock(), createElementBlock("svg", _hoisted_1$i, [...(_cache[0] || (_cache[0] = [
11088
11482
  createStaticVNode("<rect x=\"73.2\" y=\"143.7\" width=\"195.2\" height=\"20\"></rect><rect x=\"73.2\" y=\"82.7\" width=\"195.2\" height=\"20\"></rect><rect x=\"73.2\" y=\"203.7\" width=\"195.2\" height=\"20\"></rect><rect x=\"73.2\" y=\"263.7\" width=\"195.2\" height=\"20\"></rect><rect x=\"73.2\" y=\"319\" width=\"195.2\" height=\"20\"></rect><rect x=\"384.7\" y=\"143.7\" width=\"195.2\" height=\"20\"></rect><rect x=\"384.7\" y=\"82.7\" width=\"195.2\" height=\"20\"></rect><rect x=\"384.7\" y=\"203.7\" width=\"195.2\" height=\"20\"></rect><rect x=\"384.7\" y=\"263.7\" width=\"195.2\" height=\"20\"></rect><rect x=\"384.7\" y=\"319\" width=\"195.2\" height=\"20\"></rect><path d=\"M0-0.6v7.5v7.5v411.8v14.4v0.6h653v-5v-10V14.4V2.5v-3.1H0z M638,426.2H15V14.4h623V426.2z\"></path>", 11)
11089
11483
  ]))]))
11090
11484
  }
11091
- const DoubleColumn = /*#__PURE__*/_export_sfc(_sfc_main$j, [['render',_sfc_render$4]]);
11485
+ const DoubleColumn = /*#__PURE__*/_export_sfc(_sfc_main$k, [['render',_sfc_render$4]]);
11092
11486
 
11093
- const _hoisted_1$g = {
11487
+ const _hoisted_1$h = {
11094
11488
  id: "columns-menu",
11095
11489
  class: "w-full hidden md:grid grid-cols-3 gap-2 mt-3"
11096
11490
  };
11097
- const _hoisted_2$a = ["title"];
11491
+ const _hoisted_2$b = ["title"];
11098
11492
 
11099
- const _sfc_main$i = {
11493
+ const _sfc_main$j = {
11100
11494
  __name: 'OptionsColumns',
11101
11495
  setup(__props) {
11102
11496
 
@@ -11110,7 +11504,7 @@ const isSafari = computed(() => {
11110
11504
 
11111
11505
 
11112
11506
  return (_ctx, _cache) => {
11113
- return (openBlock(), createElementBlock("div", _hoisted_1$g, [
11507
+ return (openBlock(), createElementBlock("div", _hoisted_1$h, [
11114
11508
  createBaseVNode("button", {
11115
11509
  id: "single-column-button",
11116
11510
  class: normalizeClass(["col-span-1 text-primary text-center cursor-pointer py-3 rounded-sm border", {
@@ -11123,7 +11517,7 @@ return (_ctx, _cache) => {
11123
11517
  title: isSafari.value ? 'O navegador Safari não aceita visualização de coluna única.' : 'Coluna única'
11124
11518
  }, [
11125
11519
  createVNode(SingleColumn, { class: "mx-auto h-10 opacity-75" })
11126
- ], 10, _hoisted_2$a),
11520
+ ], 10, _hoisted_2$b),
11127
11521
  createBaseVNode("button", {
11128
11522
  id: "double-column-button",
11129
11523
  class: normalizeClass(["col-span-2 text-primary text-center cursor-pointer py-3 rounded-sm border", {
@@ -11146,13 +11540,13 @@ return (_ctx, _cache) => {
11146
11540
 
11147
11541
  };
11148
11542
 
11149
- const _hoisted_1$f = {
11543
+ const _hoisted_1$g = {
11150
11544
  id: "font-family-menu",
11151
11545
  class: "w-full grid grid-cols-4 gap-2 my-3"
11152
11546
  };
11153
- const _hoisted_2$9 = ["onClick", "title"];
11547
+ const _hoisted_2$a = ["onClick", "title"];
11154
11548
 
11155
- const _sfc_main$h = {
11549
+ const _sfc_main$i = {
11156
11550
  __name: 'OptionsFontFamily',
11157
11551
  setup(__props) {
11158
11552
 
@@ -11160,7 +11554,7 @@ const { textFont, fontsOptions, setTextFont } = useReaderSettings;
11160
11554
 
11161
11555
 
11162
11556
  return (_ctx, _cache) => {
11163
- return (openBlock(), createElementBlock("div", _hoisted_1$f, [
11557
+ return (openBlock(), createElementBlock("div", _hoisted_1$g, [
11164
11558
  (openBlock(true), createElementBlock(Fragment, null, renderList(unref(fontsOptions), (font) => {
11165
11559
  return (openBlock(), createElementBlock("button", {
11166
11560
  key: font.name,
@@ -11170,7 +11564,7 @@ return (_ctx, _cache) => {
11170
11564
  }]),
11171
11565
  style: normalizeStyle(`font-family: ${font.name}`),
11172
11566
  title: font.label ?? font.name
11173
- }, " Ff ", 14, _hoisted_2$9))
11567
+ }, " Ff ", 14, _hoisted_2$a))
11174
11568
  }), 128))
11175
11569
  ]))
11176
11570
  }
@@ -11178,7 +11572,7 @@ return (_ctx, _cache) => {
11178
11572
 
11179
11573
  };
11180
11574
 
11181
- const _sfc_main$g = {
11575
+ const _sfc_main$h = {
11182
11576
  __name: 'OptionsFontSize',
11183
11577
  setup(__props) {
11184
11578
 
@@ -11203,9 +11597,9 @@ return (_ctx, _cache) => {
11203
11597
 
11204
11598
  };
11205
11599
 
11206
- const _sfc_main$f = {};
11600
+ const _sfc_main$g = {};
11207
11601
 
11208
- const _hoisted_1$e = {
11602
+ const _hoisted_1$f = {
11209
11603
  fill: "none",
11210
11604
  stroke: "currentColor",
11211
11605
  viewBox: "0 0 24 24",
@@ -11213,7 +11607,7 @@ const _hoisted_1$e = {
11213
11607
  };
11214
11608
 
11215
11609
  function _sfc_render$3(_ctx, _cache) {
11216
- return (openBlock(), createElementBlock("svg", _hoisted_1$e, [...(_cache[0] || (_cache[0] = [
11610
+ return (openBlock(), createElementBlock("svg", _hoisted_1$f, [...(_cache[0] || (_cache[0] = [
11217
11611
  createBaseVNode("path", {
11218
11612
  "stroke-linecap": "round",
11219
11613
  "stroke-linejoin": "round",
@@ -11222,11 +11616,11 @@ function _sfc_render$3(_ctx, _cache) {
11222
11616
  }, null, -1)
11223
11617
  ]))]))
11224
11618
  }
11225
- const IconSun = /*#__PURE__*/_export_sfc(_sfc_main$f, [['render',_sfc_render$3]]);
11619
+ const IconSun = /*#__PURE__*/_export_sfc(_sfc_main$g, [['render',_sfc_render$3]]);
11226
11620
 
11227
- const _sfc_main$e = {};
11621
+ const _sfc_main$f = {};
11228
11622
 
11229
- const _hoisted_1$d = {
11623
+ const _hoisted_1$e = {
11230
11624
  fill: "none",
11231
11625
  stroke: "currentColor",
11232
11626
  viewBox: "0 0 24 24",
@@ -11234,7 +11628,7 @@ const _hoisted_1$d = {
11234
11628
  };
11235
11629
 
11236
11630
  function _sfc_render$2(_ctx, _cache) {
11237
- return (openBlock(), createElementBlock("svg", _hoisted_1$d, [...(_cache[0] || (_cache[0] = [
11631
+ return (openBlock(), createElementBlock("svg", _hoisted_1$e, [...(_cache[0] || (_cache[0] = [
11238
11632
  createBaseVNode("path", {
11239
11633
  "stroke-linecap": "round",
11240
11634
  "stroke-linejoin": "round",
@@ -11243,9 +11637,9 @@ function _sfc_render$2(_ctx, _cache) {
11243
11637
  }, null, -1)
11244
11638
  ]))]))
11245
11639
  }
11246
- const IconMoon = /*#__PURE__*/_export_sfc(_sfc_main$e, [['render',_sfc_render$2]]);
11640
+ const IconMoon = /*#__PURE__*/_export_sfc(_sfc_main$f, [['render',_sfc_render$2]]);
11247
11641
 
11248
- const _sfc_main$d = {
11642
+ const _sfc_main$e = {
11249
11643
  __name: 'OptionsColor',
11250
11644
  setup(__props) {
11251
11645
 
@@ -11280,18 +11674,18 @@ return (_ctx, _cache) => {
11280
11674
 
11281
11675
  };
11282
11676
 
11283
- const _hoisted_1$c = { class: "w-full border-t border-areia mt-5 pt-5" };
11284
- const _hoisted_2$8 = ["aria-checked"];
11677
+ const _hoisted_1$d = { class: "w-full border-t border-areia mt-5 pt-5" };
11678
+ const _hoisted_2$9 = ["aria-checked"];
11285
11679
 
11286
11680
 
11287
- const _sfc_main$c = {
11681
+ const _sfc_main$d = {
11288
11682
  __name: 'OptionsReadingProgress',
11289
11683
  setup(__props) {
11290
11684
 
11291
11685
  const { enabled, setEnabled } = useReadingProgress;
11292
11686
 
11293
11687
  return (_ctx, _cache) => {
11294
- return (openBlock(), createElementBlock("div", _hoisted_1$c, [
11688
+ return (openBlock(), createElementBlock("div", _hoisted_1$d, [
11295
11689
  createBaseVNode("button", {
11296
11690
  id: "reading-progress-button",
11297
11691
  class: "w-full flex items-center justify-between py-2 px-1 text-left",
@@ -11312,37 +11706,37 @@ return (_ctx, _cache) => {
11312
11706
  class: normalizeClass(["inline-block h-5 w-5 rounded-full bg-white shadow transition-transform", unref(enabled) ? 'translate-x-5' : 'translate-x-0'])
11313
11707
  }, null, 2)
11314
11708
  ], 2)
11315
- ], 8, _hoisted_2$8)
11709
+ ], 8, _hoisted_2$9)
11316
11710
  ]))
11317
11711
  }
11318
11712
  }
11319
11713
 
11320
11714
  };
11321
11715
 
11322
- const _hoisted_1$b = {
11716
+ const _hoisted_1$c = {
11323
11717
  class: "absolute top-14 py-4 px-3 shadow-lg w-60 md:w-104 text-areia -right-2 md:right-16 z-10 bg-white",
11324
11718
  role: "Opções",
11325
11719
  "aria-orientation": "vertical",
11326
11720
  "aria-labelledby": "options-menu"
11327
11721
  };
11328
- const _hoisted_2$7 = { id: "footnotes-button" };
11329
- const _hoisted_3$2 = {
11722
+ const _hoisted_2$8 = { id: "footnotes-button" };
11723
+ const _hoisted_3$4 = {
11330
11724
  class: "w-full flex justify-center items-center py-3 lowercase",
11331
11725
  id: "visualize-title"
11332
11726
  };
11333
- const _hoisted_4$1 = { class: "w-full grid grid-cols-4 gap-2 my-3" };
11727
+ const _hoisted_4$2 = { class: "w-full grid grid-cols-4 gap-2 my-3" };
11334
11728
 
11335
11729
 
11336
- const _sfc_main$b = {
11730
+ const _sfc_main$c = {
11337
11731
  __name: 'OptionsDropdown',
11338
11732
  setup(__props) {
11339
11733
 
11340
11734
 
11341
11735
  return (_ctx, _cache) => {
11342
- return (openBlock(), createElementBlock("div", _hoisted_1$b, [
11736
+ return (openBlock(), createElementBlock("div", _hoisted_1$c, [
11343
11737
  createBaseVNode("div", null, [
11344
11738
  renderSlot(_ctx.$slots, "optionsTop"),
11345
- createBaseVNode("div", _hoisted_2$7, [
11739
+ createBaseVNode("div", _hoisted_2$8, [
11346
11740
  createBaseVNode("button", {
11347
11741
  onClick: _cache[0] || (_cache[0] = withModifiers($event => (unref(useFootnotes).setShowFootnotes(true)), ["prevent"])),
11348
11742
  class: "w-full flex justify-center items-center py-3 lowercase"
@@ -11352,18 +11746,18 @@ return (_ctx, _cache) => {
11352
11746
  ]),
11353
11747
  _cache[2] || (_cache[2] = createBaseVNode("div", { class: "w-full border-b border-areia my-3" }, null, -1))
11354
11748
  ]),
11355
- createBaseVNode("div", _hoisted_3$2, [
11749
+ createBaseVNode("div", _hoisted_3$4, [
11356
11750
  createVNode(IconEye, { class: "w-6 h-6" }),
11357
11751
  _cache[3] || (_cache[3] = createBaseVNode("span", { class: "ml-4" }, "Visualização", -1))
11358
11752
  ]),
11753
+ createVNode(_sfc_main$j),
11359
11754
  createVNode(_sfc_main$i),
11360
- createVNode(_sfc_main$h),
11361
- createBaseVNode("div", _hoisted_4$1, [
11362
- createVNode(_sfc_main$g),
11363
- createVNode(_sfc_main$d)
11755
+ createBaseVNode("div", _hoisted_4$2, [
11756
+ createVNode(_sfc_main$h),
11757
+ createVNode(_sfc_main$e)
11364
11758
  ]),
11365
11759
  (unref(useReadingProgress).available.value)
11366
- ? (openBlock(), createBlock(_sfc_main$c, { key: 0 }))
11760
+ ? (openBlock(), createBlock(_sfc_main$d, { key: 0 }))
11367
11761
  : createCommentVNode("", true),
11368
11762
  _cache[4] || (_cache[4] = createBaseVNode("div", { class: "hidden w-full border-b border-areia my-8" }, null, -1)),
11369
11763
  renderSlot(_ctx.$slots, "optionsBottom")
@@ -11374,11 +11768,11 @@ return (_ctx, _cache) => {
11374
11768
 
11375
11769
  };
11376
11770
 
11377
- const _hoisted_1$a = { class: "flex" };
11378
- const _hoisted_2$6 = ["aria-expanded"];
11771
+ const _hoisted_1$b = { class: "flex" };
11772
+ const _hoisted_2$7 = ["aria-expanded"];
11379
11773
 
11380
11774
 
11381
- const _sfc_main$a = {
11775
+ const _sfc_main$b = {
11382
11776
  __name: 'OptionsButton',
11383
11777
  setup(__props) {
11384
11778
 
@@ -11409,11 +11803,12 @@ return (_ctx, _cache) => {
11409
11803
  ref: button,
11410
11804
  class: "relative"
11411
11805
  }, [
11412
- createBaseVNode("div", _hoisted_1$a, [
11806
+ createBaseVNode("div", _hoisted_1$b, [
11413
11807
  createBaseVNode("button", {
11414
11808
  onClick: _cache[0] || (_cache[0] = withModifiers($event => (toggleSummary()), ["prevent"])),
11415
11809
  class: "border p-3 shadow flex items-center border-white text-white",
11416
11810
  id: "options-button",
11811
+ "aria-label": "Opções",
11417
11812
  "aria-haspopup": "true",
11418
11813
  "aria-expanded": show.value
11419
11814
  }, [
@@ -11427,7 +11822,7 @@ return (_ctx, _cache) => {
11427
11822
  key: 1,
11428
11823
  class: "w-6 h-6"
11429
11824
  }))
11430
- ], 8, _hoisted_2$6),
11825
+ ], 8, _hoisted_2$7),
11431
11826
  createBaseVNode("button", {
11432
11827
  onClick: _cache[1] || (_cache[1] = withModifiers($event => (unref(toggleFullScreen)()), ["prevent"])),
11433
11828
  class: "hidden md:flex items-center border p-3 shadow ml-3 border-white text-white"
@@ -11444,7 +11839,7 @@ return (_ctx, _cache) => {
11444
11839
  "leave-to-class": "opacity-0 scale-95"
11445
11840
  }, {
11446
11841
  default: withCtx(() => [
11447
- withDirectives(createVNode(_sfc_main$b, null, {
11842
+ withDirectives(createVNode(_sfc_main$c, null, {
11448
11843
  optionsTop: withCtx(() => [
11449
11844
  renderSlot(_ctx.$slots, "optionsTop")
11450
11845
  ]),
@@ -11464,20 +11859,194 @@ return (_ctx, _cache) => {
11464
11859
 
11465
11860
  };
11466
11861
 
11467
- const _hoisted_1$9 = {
11468
- id: "component-header",
11469
- class: "bg-primary flex justify-between items-center p-4"
11862
+ const _hoisted_1$a = {
11863
+ key: 0,
11864
+ id: "search-menu"
11865
+ };
11866
+ const _hoisted_2$6 = ["aria-expanded"];
11867
+ const _hoisted_3$3 = { class: "search-input-row" };
11868
+ const _hoisted_4$1 = { class: "search-input-control" };
11869
+ const _hoisted_5$1 = { class: "search-results-row" };
11870
+ const _hoisted_6$1 = {
11871
+ id: "search-status",
11872
+ role: "status",
11873
+ "aria-live": "polite"
11470
11874
  };
11471
- const _hoisted_2$5 = { id: "header-titles" };
11875
+ const _hoisted_7$1 = ["disabled"];
11876
+ const _hoisted_8 = ["disabled"];
11877
+
11878
+
11879
+ const _sfc_main$a = {
11880
+ __name: 'SearchButton',
11881
+ setup(__props) {
11882
+
11883
+ const search = inject(searchKey);
11884
+ const { enabled, open, query, input, button, total, status, pending } = search;
11885
+
11886
+ function clearQuery() {
11887
+ query.value = '';
11888
+ input.value?.focus({ preventScroll: true });
11889
+ }
11890
+
11891
+ return (_ctx, _cache) => {
11892
+ return (unref(enabled))
11893
+ ? (openBlock(), createElementBlock("div", _hoisted_1$a, [
11894
+ createBaseVNode("button", {
11895
+ ref_key: "button",
11896
+ ref: button,
11897
+ id: "search-button",
11898
+ type: "button",
11899
+ class: "search-icon-button border p-3 shadow flex items-center border-white text-white",
11900
+ "aria-label": "Buscar no texto",
11901
+ title: "Buscar no texto (Ctrl+F)",
11902
+ "aria-controls": "search-dropdown",
11903
+ "aria-expanded": unref(open),
11904
+ onClick: _cache[0] || (_cache[0] = $event => (unref(open) ? unref(search).close() : unref(search).show()))
11905
+ }, [...(_cache[10] || (_cache[10] = [
11906
+ createBaseVNode("svg", {
11907
+ class: "w-6 h-6",
11908
+ viewBox: "0 0 24 24",
11909
+ fill: "none",
11910
+ stroke: "currentColor",
11911
+ "stroke-width": "2",
11912
+ "aria-hidden": "true"
11913
+ }, [
11914
+ createBaseVNode("circle", {
11915
+ cx: "10.5",
11916
+ cy: "10.5",
11917
+ r: "6.5"
11918
+ }),
11919
+ createBaseVNode("path", { d: "m16 16 5 5" })
11920
+ ], -1)
11921
+ ]))], 8, _hoisted_2$6),
11922
+ withDirectives(createBaseVNode("form", {
11923
+ id: "search-dropdown",
11924
+ role: "search",
11925
+ "aria-label": "Buscar no texto",
11926
+ onSubmit: _cache[6] || (_cache[6] = withModifiers($event => (unref(search).step(1)), ["prevent"])),
11927
+ onWheel: _cache[7] || (_cache[7] = withModifiers(() => {}, ["stop"])),
11928
+ onKeydown: [
11929
+ _cache[8] || (_cache[8] = withModifiers(() => {}, ["stop"])),
11930
+ _cache[9] || (_cache[9] = withKeys(withModifiers($event => (unref(search).close()), ["prevent"]), ["esc"]))
11931
+ ]
11932
+ }, [
11933
+ createBaseVNode("div", _hoisted_3$3, [
11934
+ createBaseVNode("div", _hoisted_4$1, [
11935
+ withDirectives(createBaseVNode("input", {
11936
+ id: "search-input",
11937
+ ref_key: "input",
11938
+ ref: input,
11939
+ "onUpdate:modelValue": _cache[1] || (_cache[1] = $event => (isRef(query) ? (query).value = $event : null)),
11940
+ type: "search",
11941
+ placeholder: "Palavra ou expressão",
11942
+ autocomplete: "off",
11943
+ spellcheck: "false",
11944
+ "aria-label": "Buscar no texto",
11945
+ "aria-describedby": "search-status",
11946
+ onKeydown: _cache[2] || (_cache[2] = withKeys(withModifiers($event => (!$event.isComposing && unref(search).step($event.shiftKey ? -1 : 1)), ["prevent"]), ["enter"]))
11947
+ }, null, 544), [
11948
+ [vModelText, unref(query)]
11949
+ ]),
11950
+ (unref(query))
11951
+ ? (openBlock(), createElementBlock("button", {
11952
+ key: 0,
11953
+ id: "search-clear-button",
11954
+ class: "search-icon-button",
11955
+ type: "button",
11956
+ "aria-label": "Limpar busca",
11957
+ title: "Limpar busca",
11958
+ onClick: clearQuery
11959
+ }, [
11960
+ createVNode(IconClose, {
11961
+ class: "w-4 h-4",
11962
+ "aria-hidden": "true"
11963
+ })
11964
+ ]))
11965
+ : createCommentVNode("", true)
11966
+ ]),
11967
+ createBaseVNode("button", {
11968
+ class: "search-icon-button",
11969
+ type: "button",
11970
+ "aria-label": "Fechar busca",
11971
+ title: "Fechar (Esc)",
11972
+ onClick: _cache[3] || (_cache[3] = $event => (unref(search).close()))
11973
+ }, [
11974
+ createVNode(IconClose, {
11975
+ class: "w-6 h-6",
11976
+ "aria-hidden": "true"
11977
+ })
11978
+ ])
11979
+ ]),
11980
+ createBaseVNode("div", _hoisted_5$1, [
11981
+ createBaseVNode("span", _hoisted_6$1, toDisplayString(unref(status)), 1),
11982
+ createBaseVNode("button", {
11983
+ class: "search-icon-button",
11984
+ type: "button",
11985
+ "aria-label": "Ocorrência anterior",
11986
+ title: "Anterior (Shift+Enter)",
11987
+ disabled: !unref(total) || unref(pending),
11988
+ onClick: _cache[4] || (_cache[4] = $event => (unref(search).step(-1)))
11989
+ }, [...(_cache[11] || (_cache[11] = [
11990
+ createBaseVNode("svg", {
11991
+ class: "w-5 h-5",
11992
+ viewBox: "0 0 24 24",
11993
+ fill: "none",
11994
+ stroke: "currentColor",
11995
+ "stroke-width": "2",
11996
+ "stroke-linecap": "round",
11997
+ "stroke-linejoin": "round",
11998
+ "aria-hidden": "true"
11999
+ }, [
12000
+ createBaseVNode("path", { d: "m6 14 6-6 6 6" })
12001
+ ], -1)
12002
+ ]))], 8, _hoisted_7$1),
12003
+ createBaseVNode("button", {
12004
+ class: "search-icon-button",
12005
+ type: "button",
12006
+ "aria-label": "Próxima ocorrência",
12007
+ title: "Próxima (Enter)",
12008
+ disabled: !unref(total) || unref(pending),
12009
+ onClick: _cache[5] || (_cache[5] = $event => (unref(search).step(1)))
12010
+ }, [...(_cache[12] || (_cache[12] = [
12011
+ createBaseVNode("svg", {
12012
+ class: "w-5 h-5",
12013
+ viewBox: "0 0 24 24",
12014
+ fill: "none",
12015
+ stroke: "currentColor",
12016
+ "stroke-width": "2",
12017
+ "stroke-linecap": "round",
12018
+ "stroke-linejoin": "round",
12019
+ "aria-hidden": "true"
12020
+ }, [
12021
+ createBaseVNode("path", { d: "m6 10 6 6 6-6" })
12022
+ ], -1)
12023
+ ]))], 8, _hoisted_8)
12024
+ ])
12025
+ ], 544), [
12026
+ [vShow, unref(open)]
12027
+ ])
12028
+ ]))
12029
+ : createCommentVNode("", true)
12030
+ }
12031
+ }
12032
+
12033
+ };
12034
+
12035
+ const _hoisted_1$9 = { id: "header-titles" };
12036
+ const _hoisted_2$5 = { class: "header-actions" };
11472
12037
 
11473
12038
  const _sfc_main$9 = {
11474
12039
  __name: 'HeaderSlot',
11475
12040
  setup(__props) {
11476
-
12041
+
12042
+ const search = inject(searchKey);
11477
12043
 
11478
12044
  return (_ctx, _cache) => {
11479
- return (openBlock(), createElementBlock("header", _hoisted_1$9, [
11480
- createVNode(_sfc_main$p, null, {
12045
+ return (openBlock(), createElementBlock("header", {
12046
+ id: "component-header",
12047
+ class: normalizeClass(["bg-primary flex justify-between items-center p-4", { 'search-enabled': unref(search).enabled.value }])
12048
+ }, [
12049
+ createVNode(_sfc_main$q, null, {
11481
12050
  summaryTop: withCtx(() => [
11482
12051
  renderSlot(_ctx.$slots, "summaryTop")
11483
12052
  ]),
@@ -11486,19 +12055,22 @@ return (_ctx, _cache) => {
11486
12055
  ]),
11487
12056
  _: 3
11488
12057
  }),
11489
- createBaseVNode("div", _hoisted_2$5, [
12058
+ createBaseVNode("div", _hoisted_1$9, [
11490
12059
  renderSlot(_ctx.$slots, "header")
11491
12060
  ]),
11492
- createVNode(_sfc_main$a, null, {
11493
- optionsTop: withCtx(() => [
11494
- renderSlot(_ctx.$slots, "optionsTop")
11495
- ]),
11496
- optionsBottom: withCtx(() => [
11497
- renderSlot(_ctx.$slots, "optionsBottom")
11498
- ]),
11499
- _: 3
11500
- })
11501
- ]))
12061
+ createBaseVNode("div", _hoisted_2$5, [
12062
+ createVNode(_sfc_main$a),
12063
+ createVNode(_sfc_main$b, null, {
12064
+ optionsTop: withCtx(() => [
12065
+ renderSlot(_ctx.$slots, "optionsTop")
12066
+ ]),
12067
+ optionsBottom: withCtx(() => [
12068
+ renderSlot(_ctx.$slots, "optionsBottom")
12069
+ ]),
12070
+ _: 3
12071
+ })
12072
+ ])
12073
+ ], 2))
11502
12074
  }
11503
12075
  }
11504
12076
 
@@ -11632,7 +12204,7 @@ const _hoisted_1$5 = { class: "[ typeArea ] h-full relative transition-opacity d
11632
12204
  const _sfc_main$5 = {
11633
12205
  __name: 'ReaderWrapper',
11634
12206
  setup(__props) {
11635
- const { currentPage } = usePagination;
12207
+ const { currentPage, changeSource } = usePagination;
11636
12208
 
11637
12209
  const el = ref(null);
11638
12210
 
@@ -11655,13 +12227,13 @@ return (_ctx, _cache) => {
11655
12227
  return (openBlock(), createElementBlock("div", {
11656
12228
  ref_key: "el",
11657
12229
  ref: el,
11658
- class: "columnsArea",
12230
+ class: normalizeClass(["columnsArea", { 'search-navigation': unref(changeSource) === 'search' }]),
11659
12231
  style: normalizeStyle(`margin-left: -${100 * (unref(currentPage) - 1)}%`)
11660
12232
  }, [
11661
12233
  createBaseVNode("div", _hoisted_1$5, [
11662
12234
  renderSlot(_ctx.$slots, "default")
11663
12235
  ])
11664
- ], 4))
12236
+ ], 6))
11665
12237
  }
11666
12238
  }
11667
12239
 
@@ -11673,7 +12245,7 @@ const _hoisted_1$4 = {
11673
12245
  class: "[ reference-popup ] bg-gray-800 text-white fixed z-40 bottom-0 md:bottom-14 right-0 md:right-3 rounded flex justify-between p-4 shadow w-full md:w-2/5"
11674
12246
  };
11675
12247
  const _hoisted_2$2 = ["innerHTML"];
11676
- const _hoisted_3$1 = { class: "mt-3 flex self-end" };
12248
+ const _hoisted_3$2 = { class: "mt-3 flex self-end" };
11677
12249
 
11678
12250
 
11679
12251
  const _sfc_main$4 = {
@@ -11709,7 +12281,7 @@ return (_ctx, _cache) => {
11709
12281
  class: "w-4/5",
11710
12282
  innerHTML: unref(reference).ref
11711
12283
  }, null, 8, _hoisted_2$2),
11712
- createBaseVNode("div", _hoisted_3$1, [
12284
+ createBaseVNode("div", _hoisted_3$2, [
11713
12285
  createBaseVNode("button", {
11714
12286
  onClick: _cache[0] || (_cache[0] = withModifiers($event => (closeRef()), ["prevent"])),
11715
12287
  class: "button button-negative"
@@ -11791,7 +12363,7 @@ const _hoisted_1$1 = {
11791
12363
  class: "absolute top-0 right-0 w-96 md:w-[40em] flex-shrink-0 h-screen overflow-auto overflow-x-hidden z-20 shadow-2xl"
11792
12364
  };
11793
12365
  const _hoisted_2$1 = { class: "w-full p-4" };
11794
- const _hoisted_3 = { class: "text-areia py-4 pl-4" };
12366
+ const _hoisted_3$1 = { class: "text-areia py-4 pl-4" };
11795
12367
  const _hoisted_4 = { class: "flex items-center mb-6" };
11796
12368
  const _hoisted_5 = { class: "ml-4" };
11797
12369
  const _hoisted_6 = { class: "ml-10" };
@@ -11860,7 +12432,7 @@ return (_ctx, _cache) => {
11860
12432
  createVNode(IconClose, { class: "w-6 h-6 text-white" })
11861
12433
  ]),
11862
12434
  createBaseVNode("div", _hoisted_2$1, [
11863
- createBaseVNode("header", _hoisted_3, [
12435
+ createBaseVNode("header", _hoisted_3$1, [
11864
12436
  createBaseVNode("div", _hoisted_4, [
11865
12437
  createVNode(IconNotes, { class: "w-8 h-8" }),
11866
12438
  createBaseVNode("span", _hoisted_5, [
@@ -11899,12 +12471,17 @@ return (_ctx, _cache) => {
11899
12471
  };
11900
12472
  const FootnotesAside = /*#__PURE__*/_export_sfc(_sfc_main$1, [['__scopeId',"data-v-5391e486"]]);
11901
12473
 
11902
- const _style_0 = ".border-primary { border-color: var(--theme-primary, #690000);\n}\n.text-primary { color: var(--theme-primary, #690000);\n}\n.bg-primary { background-color: var(--theme-primary, #690000);\n}\n.border-primary-extralight { border-color: var(--theme-primary-extralight, #f3f4f6);\n}\n.text-primary-extralight { color: var(--theme-primary-extralight, #f3f4f6);\n}\n.bg-primary-extralight { background-color: var(--theme-primary-extralight, #f3f4f6);\n}\n.border-secondary { border-color: var(--theme-secondary, #ffa03c);\n}\n.text-secondary { color: var(--theme-secondary, #ffa03c);\n}\n.bg-secondary { background-color: var(--theme-secondary, #ffa03c);\n}\n.rootWrapper {\n\tmax-height: 100%;\n height: 100%;\n}\nmain#rootComponent {\n\theight: 100%;\n\tmax-height: 100%;\n}\nmain#rootComponent.light {\n\t\tbackground-color: var(--bg-light-mode, #fff7e0)\n}\nmain#rootComponent.dark {\n\t\tbackground-color: var(--bg-dark-mode, #2d2d2d);\n}\nmain#rootComponent.dark #content-area {\n\t\t\tcolor: #fff\n}\nheader.wrapper {\n\twidth: 200px;\n\tmargin: 0 auto;\n}\n#engine {\n\theight: calc(100% - 8.4rem);\n\tposition: relative;\n right: 0;\n left: 0;\n bottom: 0;\n width: 100%;\n}\n.rootWrapper.safari {\n\tmax-height: initial;\n\theight: initial;\n}\n.rootWrapper.safari #engine {\n\theight: auto !important;\n}\n#reader-component {\n\twidth: calc(100% - 5rem);\n}\n.typeArea {\n\twidth: 100%;\n}\n.engineWrapper {\n\theight: 100%;\n display: flex;\n justify-content: space-between;\n\tposition: relative;\n right: 0;\n left: 0;\n bottom: 0;\n width: 100%;\n}\n.rootWrapper:not(.safari) .columns-double .columnsArea {\n\t-moz-column-count: 2;\n column-count: 2;\n grid-column-gap: 0;\n -moz-column-gap: 0;\n column-gap: 0;\n height: 100%;\n padding: 0;\n width: 100%;\n}\n@media only screen and (max-width: 1020px) {\n.rootWrapper:not(.safari) .columns-double .columnsArea {\n\t\t-moz-column-count: 1;\n \tcolumn-count: 1\n}\n}\n.rootWrapper:not(.safari) .columns-single .columnsArea {\n\t-moz-column-count: 1;\n\t column-count: 1;\n\t-moz-column-gap: 0;\n\t column-gap: 0;\n\theight: 100%;\n padding: 0;\n width: 100%;\n}\n.rootWrapper:not(.safari) .columns-single .columnsArea #content-area {\n\t\tmax-width: 37em;\n\t\tmargin: 0 auto;\n}\n.nav-prev { left: 0px;\n}\n.nav-next { right: 0px;\n}\n.viewer-nav {\n\theight: 100%;\n\tposition: relative;\n\ttop: 0px;\n\tbottom: 0px;\n\tz-index: 10;\n\twidth: 2.5rem;\n\tflex-shrink: 0;\n\tcursor: pointer;\n\talign-self: center;\n\ttransition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n\ttransition-duration: 500ms;\n\ttransition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n}\n.viewer-nav:focus,\n\t.viewer-nav:active {\n\t\tborder: none !important;\n\t\tbox-shadow: none !important;\n\t\toutline-color: transparent !important;\n}\n#content-area *::-moz-selection {\n\tcolor: var(--theme-primary-extralight, #690000);\n\tbackground: var(--theme-secondary, #ffa03c);\n}\n#content-area *::selection {\n\tcolor: var(--theme-primary-extralight, #690000);\n\tbackground: var(--theme-secondary, #ffa03c);\n}\n.viewer-nav-icon { opacity: 0;\n}\n@media (min-width: 768px) {\n.viewer-nav-icon { opacity: 0.8;\n}\n}\n@media only screen and (max-width: 600px) {\n.columnsArea {\n\t\ttransition: margin 100ms\n}\n}\n#asidebar {\n\tbackground: var(--sidebar-backgorund, #690000);\n\tcolor: var(--sidebar-text, #f3f4f6);\n}\n\n/* slider */\n.rootWrapper.safari .slider-target,\n.rootWrapper.safari .slider-target *{\n\tdisplay: none !important;\n}\n.slider-target,.slider-target *{\n -webkit-touch-callout:none;\n -webkit-tap-highlight-color:rgba(0,0,0,0);\n box-sizing:border-box;\n touch-action:none;\n -webkit-user-select:none;\n -moz-user-select:none;\n user-select:none\n}\n.slider-target{\n position:relative\n}\n.slider-base,.slider-connects{\n height:100%;\n position:relative;\n width:100%;\n z-index:1\n}\n.slider-connects{\n overflow:hidden;\n z-index:0\n}\n.slider-connect,.slider-origin{\n height:100%;\n position:absolute;\n right:0;\n top:0;\n transform-origin:0 0;\n transform-style:flat;\n width:100%;\n will-change:transform;\n z-index:1\n}\n.slider-txt-dir-rtl.slider-horizontal .slider-origin{\n left:0;\n right:auto\n}\n.slider-vertical .slider-origin{\n top:-100%;\n width:0\n}\n.slider-horizontal .slider-origin{\n height:0\n}\n.slider-handle{\n backface-visibility:hidden;\n position:absolute\n}\n.slider-touch-area{\n height:100%;\n width:100%\n}\n.slider-state-tap .slider-connect,.slider-state-tap .slider-origin{\n transition:transform .3s\n}\n.slider-state-drag *{\n cursor:inherit!important\n}\n.slider-tooltip-drag .slider-tooltip,.slider-tooltip-focus .slider-tooltip{\n display:none!important\n}\n.slider-tooltip-drag .slider-active .slider-tooltip,.slider-tooltip-drag.slider-state-drag .slider-tooltip:not(.slider-tooltip-hidden),.slider-tooltip-focus.slider-focused .slider-tooltip:not(.slider-tooltip-hidden){\n display:block!important\n}\n.slider-horizontal{\n height:var(--slider-height,6px)\n}\n.slider-horizontal .slider-handle{\n height:var(--slider-handle-height,16px);\n right:calc(var(--slider-handle-width, 16px)/2*-1);\n top:calc((var(--slider-handle-height, 16px) - var(--slider-height, 6px))/2*-1 + -1px);\n width:var(--slider-handle-width,16px)\n}\n.slider-vertical{\n height:var(--slider-vertical-height,300px);\n width:var(--slider-height,6px)\n}\n.slider-vertical .slider-handle{\n bottom:calc(var(--slider-handle-width, 16px)/2*-1);\n height:var(--slider-handle-width,16px);\n right:calc((var(--slider-handle-height, 16px) - var(--slider-height, 6px))/2*-1 + -1px);\n width:var(--slider-handle-height,16px)\n}\n.slider-txt-dir-rtl.slider-horizontal .slider-handle{\n left:calc(var(--slider-handle-width, 16px)/2*-1);\n right:auto\n}\n.slider-base{\n background-color:var(--slider-bg,#d1d5db)\n}\n.slider-base,.slider-connects{\n border-radius:var(--slider-radius,9999px)\n}\n.slider-connect{\n background:var(--theme-secondary, #690000);\n cursor:pointer\n}\n.slider-draggable{\n cursor:ew-resize\n}\n.slider-vertical .slider-draggable{\n cursor:ns-resize\n}\n.slider-handle{\n background:var(--slider-handle-bg,#fff);\n border:var(--slider-handle-border,0);\n border-radius:var(--slider-handle-radius,9999px);\n box-shadow:var(--slider-handle-shadow,.5px .5px 2px 1px rgba(0,0,0,.32));\n cursor:grab;\n height:var(--slider-handle-height,16px);\n width:var(--slider-handle-width,16px)\n}\n.slider-handle:focus{\n box-shadow:0 0 0 var(--slider-handle-ring-width,3px) var(--slider-handle-ring-color,rgba(16,185,129,.188)),var(--slider-handle-shadow,.5px .5px 2px 1px rgba(0,0,0,.32));\n outline:none\n}\n.slider-active{\n box-shadow:var(--slider-handle-shadow-active,.5px .5px 2px 1px rgba(0,0,0,.42));\n cursor:grabbing\n}\n[disabled] .slider-connect{\n background:var(--slider-connect-bg-disabled,#9ca3af)\n}\n[disabled] .slider-handle,[disabled].slider-handle,[disabled].slider-target{\n cursor:not-allowed\n}\n[disabled] .slider-tooltip{\n background:var(--theme-secondary, #690000);\n border-color:var(--theme-secondary, #690000);\n\topacity: 0.5;\n}\n.slider-tooltip{\n background:var(--theme-secondary, #690000);\n border:1px solid var(--theme-secondary, #690000);\n border-radius:var(--slider-tooltip-radius,5px);\n color:var(--slider-tooltip-color,#fff);\n display:block;\n font-size:var(--slider-tooltip-font-size,.875rem);\n font-weight:var(--slider-tooltip-font-weight,600);\n line-height:var(--slider-tooltip-line-height,1.25rem);\n min-width:var(--slider-tooltip-min-width,20px);\n padding:var(--slider-tooltip-py,2px) var(--slider-tooltip-px,6px);\n position:absolute;\n text-align:center;\n white-space:nowrap\n}\n.slider-horizontal .slider-tooltip-top{\n bottom:calc(var(--slider-handle-height, 16px) + var(--slider-tooltip-arrow-size, 5px) + var(--slider-tooltip-distance, 3px));\n left:50%;\n transform:translate(-50%)\n}\n.slider-horizontal .slider-tooltip-top:before{\n border:var(--slider-tooltip-arrow-size,5px) solid transparent;\n border-top-color:inherit;\n bottom:calc(var(--slider-tooltip-arrow-size, 5px)*-2);\n content:\"\";\n height:0;\n left:50%;\n position:absolute;\n transform:translate(-50%);\n width:0\n}\n.slider-horizontal .slider-tooltip-bottom{\n left:50%;\n top:calc(var(--slider-handle-height, 16px) + var(--slider-tooltip-arrow-size, 5px) + var(--slider-tooltip-distance, 3px));\n transform:translate(-50%)\n}\n.slider-horizontal .slider-tooltip-bottom:before{\n border:var(--slider-tooltip-arrow-size,5px) solid transparent;\n border-bottom-color:inherit;\n content:\"\";\n height:0;\n left:50%;\n position:absolute;\n top:calc(var(--slider-tooltip-arrow-size, 5px)*-2);\n transform:translate(-50%);\n width:0\n}\n.slider-vertical .slider-tooltip-left{\n right:calc(var(--slider-handle-height, 16px) + var(--slider-tooltip-arrow-size, 5px) + var(--slider-tooltip-distance, 3px));\n top:50%;\n transform:translateY(-50%)\n}\n.slider-vertical .slider-tooltip-left:before{\n border:var(--slider-tooltip-arrow-size,5px) solid transparent;\n border-left-color:inherit;\n content:\"\";\n height:0;\n position:absolute;\n right:calc(var(--slider-tooltip-arrow-size, 5px)*-2);\n top:50%;\n transform:translateY(-50%);\n width:0\n}\n.slider-vertical .slider-tooltip-right{\n left:calc(var(--slider-handle-height, 16px) + var(--slider-tooltip-arrow-size, 5px) + var(--slider-tooltip-distance, 3px));\n top:50%;\n transform:translateY(-50%)\n}\n.slider-vertical .slider-tooltip-right:before{\n border:var(--slider-tooltip-arrow-size,5px) solid transparent;\n border-right-color:inherit;\n content:\"\";\n height:0;\n left:calc(var(--slider-tooltip-arrow-size, 5px)*-2);\n position:absolute;\n top:50%;\n transform:translateY(-50%);\n width:0\n}\n.slider-horizontal .slider-origin>.slider-tooltip{\n left:auto;\n transform:translate(50%)\n}\n.slider-horizontal .slider-origin>.slider-tooltip-top{\n bottom:calc(var(--slider-tooltip-arrow-size, 5px) + (var(--slider-handle-height, 16px) - var(--slider-height, 6px))/2 + var(--slider-tooltip-distance, 3px) + 1px)\n}\n.slider-horizontal .slider-origin>.slider-tooltip-bottom{\n top:calc(var(--slider-tooltip-arrow-size, 5px) + (var(--slider-handle-height, 16px) - var(--slider-height, 6px))/2 + var(--slider-tooltip-distance, 3px) + var(--slider-height, 6px) - 1px)\n}\n.slider-vertical .slider-origin>.slider-tooltip{\n top:auto;\n transform:translateY(calc((var(--slider-tooltip-line-height, 1.25rem) - var(--slider-tooltip-py, 2px))*-1 + 1px))\n}\n.slider-vertical .slider-origin>.slider-tooltip-left{\n right:calc(var(--slider-tooltip-arrow-size, 5px) + var(--slider-height, 6px) + (var(--slider-handle-height, 16px) - var(--slider-height, 6px))/2 + var(--slider-tooltip-distance, 3px) - 1px)\n}\n.slider-vertical .slider-origin>.slider-tooltip-right{\n left:calc(var(--slider-tooltip-arrow-size, 5px) + var(--slider-height, 6px) + (var(--slider-handle-height, 16px) - var(--slider-height, 6px))/2 + var(--slider-tooltip-distance, 3px) - var(--slider-height, 6px) + 1px)\n}\n\n";
12474
+ const _style_0 = ".border-primary { border-color: var(--theme-primary, #690000);\n}\n.text-primary { color: var(--theme-primary, #690000);\n}\n.bg-primary { background-color: var(--theme-primary, #690000);\n}\n.border-primary-extralight { border-color: var(--theme-primary-extralight, #f3f4f6);\n}\n.text-primary-extralight { color: var(--theme-primary-extralight, #f3f4f6);\n}\n.bg-primary-extralight { background-color: var(--theme-primary-extralight, #f3f4f6);\n}\n.border-secondary { border-color: var(--theme-secondary, #ffa03c);\n}\n.text-secondary { color: var(--theme-secondary, #ffa03c);\n}\n.bg-secondary { background-color: var(--theme-secondary, #ffa03c);\n}\n.rootWrapper {\n\tmax-height: 100%;\n height: 100%;\n}\nmain#rootComponent {\n\theight: 100%;\n\tmax-height: 100%;\n}\nmain#rootComponent.light {\n\t\tbackground-color: var(--bg-light-mode, #fff7e0)\n}\nmain#rootComponent.dark {\n\t\tbackground-color: var(--bg-dark-mode, #2d2d2d);\n}\nmain#rootComponent.dark #content-area {\n\t\t\tcolor: #fff\n}\nheader.wrapper {\n\twidth: 200px;\n\tmargin: 0 auto;\n}\n#engine {\n\theight: calc(100% - 8.4rem);\n\tposition: relative;\n right: 0;\n left: 0;\n bottom: 0;\n width: 100%;\n}\n.rootWrapper.safari {\n\tmax-height: initial;\n\theight: initial;\n}\n.rootWrapper.safari #engine {\n\theight: auto !important;\n}\n#reader-component {\n\twidth: calc(100% - 5rem);\n\tposition: relative;\n}\n.header-actions {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 0.75rem;\n\tflex-shrink: 0;\n}\n@media (max-width: 600px) {\n.search-enabled #options-button > span { display: none;\n}\n}\n#component-header {\n\tposition: relative;\n\tz-index: 20;\n}\n#search-dropdown {\n\tposition: absolute;\n\ttop: calc(100% + 0.25rem);\n\tright: 1rem;\n\twidth: min(23rem, calc(100% - 2rem));\n\tpadding: 1rem;\n\tbackground: #fff;\n\tcolor: #222;\n\tbox-shadow: 0 4px 12px #0003;\n\tfont-size: 0.875rem;\n\tline-height: 1.5;\n}\n.search-input-row, .search-results-row {\n\tdisplay: flex;\n\talign-items: center;\n\tgap: 0.5rem;\n}\n.search-results-row { margin-top: 0.5rem;\n}\n.search-input-control { position: relative; flex: 1; min-width: 0;\n}\n#search-input {\n\tmin-width: 0;\n\twidth: 100%;\n\tpadding: 0.5rem;\n\tpadding-right: 2.75rem;\n\tborder: 1px solid currentColor;\n\tborder-radius: 0.25rem;\n\tbackground: transparent;\n\tcolor: inherit;\n\tfont: inherit;\n}\n#search-status { flex: 1;\n}\n#search-input::-webkit-search-cancel-button { -webkit-appearance: none; appearance: none;\n}\n#search-clear-button {\n\tposition: absolute;\n\tright: 0.25rem;\n\ttop: 0;\n\tbottom: 0;\n\tmargin: auto;\n\twidth: 2rem;\n\theight: 2rem;\n}\n.search-icon-button {\n\tdisplay: inline-flex;\n\talign-items: center;\n\tjustify-content: center;\n\tflex-shrink: 0;\n\tborder-radius: 0.25rem;\n\tcursor: pointer;\n\ttransition: background-color 120ms ease, transform 80ms ease;\n}\n#search-button {\n\t--search-control-hover: #ffffff26;\n\t--search-control-active: #ffffff40;\n}\n.search-icon-button:not(:disabled):hover,\n.search-icon-button:not(:disabled):focus-visible {\n\tbackground-color: var(--search-control-hover, #0000000d);\n}\n.search-icon-button:not(:disabled):active {\n\tbackground-color: var(--search-control-active, #0000001f);\n\ttransform: scale(0.94);\n}\n#search-dropdown button { padding: 0.375rem;\n}\n#search-dropdown button:disabled { opacity: 0.4; cursor: default;\n}\n#search-dropdown :focus-visible, #search-button:focus-visible {\n\toutline: 2px solid currentColor;\n\toutline-offset: 2px;\n}\n.search-highlights {\n\tposition: absolute;\n\tinset: 0;\n\toverflow: hidden;\n\tpointer-events: none;\n}\n.search-highlight-track { width: 100%; height: 100%;\n}\n.search-highlight {\n\tposition: absolute;\n\tbackground: #ffc40033;\n\tborder-radius: 2px;\n}\n.search-highlight-active {\n\tbackground: #ffc40066;\n\toutline: 1px solid #b87800;\n}\n.columnsArea.search-navigation { transition: margin-left 220ms ease;\n}\n.search-highlight-track.search-navigation { transition: transform 220ms ease;\n}\n@media (prefers-reduced-motion: reduce) {\n.columnsArea.search-navigation, .search-highlight-track.search-navigation { transition: none;\n}\n.search-icon-button { transition: none;\n}\n.search-icon-button:not(:disabled):active { transform: none;\n}\n}\n.typeArea {\n\twidth: 100%;\n}\n.engineWrapper {\n\theight: 100%;\n display: flex;\n justify-content: space-between;\n\tposition: relative;\n right: 0;\n left: 0;\n bottom: 0;\n width: 100%;\n}\n.rootWrapper:not(.safari) .columns-double .columnsArea {\n\t-moz-column-count: 2;\n column-count: 2;\n grid-column-gap: 0;\n -moz-column-gap: 0;\n column-gap: 0;\n height: 100%;\n padding: 0;\n width: 100%;\n}\n@media only screen and (max-width: 1020px) {\n.rootWrapper:not(.safari) .columns-double .columnsArea {\n\t\t-moz-column-count: 1;\n \tcolumn-count: 1\n}\n}\n.rootWrapper:not(.safari) .columns-single .columnsArea {\n\t-moz-column-count: 1;\n\t column-count: 1;\n\t-moz-column-gap: 0;\n\t column-gap: 0;\n\theight: 100%;\n padding: 0;\n width: 100%;\n}\n.rootWrapper:not(.safari) .columns-single .columnsArea #content-area {\n\t\tmax-width: 37em;\n\t\tmargin: 0 auto;\n}\n.nav-prev { left: 0px;\n}\n.nav-next { right: 0px;\n}\n.viewer-nav {\n\theight: 100%;\n\tposition: relative;\n\ttop: 0px;\n\tbottom: 0px;\n\tz-index: 10;\n\twidth: 2.5rem;\n\tflex-shrink: 0;\n\tcursor: pointer;\n\talign-self: center;\n\ttransition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n\ttransition-duration: 500ms;\n\ttransition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n}\n.viewer-nav:focus,\n\t.viewer-nav:active {\n\t\tborder: none !important;\n\t\tbox-shadow: none !important;\n\t\toutline-color: transparent !important;\n}\n#content-area *::-moz-selection {\n\tcolor: var(--theme-primary-extralight, #690000);\n\tbackground: var(--theme-secondary, #ffa03c);\n}\n#content-area *::selection {\n\tcolor: var(--theme-primary-extralight, #690000);\n\tbackground: var(--theme-secondary, #ffa03c);\n}\n.viewer-nav-icon { opacity: 0;\n}\n@media (min-width: 768px) {\n.viewer-nav-icon { opacity: 0.8;\n}\n}\n@media only screen and (max-width: 600px) {\n.columnsArea {\n\t\ttransition: margin 100ms\n}\n}\n#asidebar {\n\tbackground: var(--sidebar-backgorund, #690000);\n\tcolor: var(--sidebar-text, #f3f4f6);\n}\n\n/* slider */\n.rootWrapper.safari .slider-target,\n.rootWrapper.safari .slider-target *{\n\tdisplay: none !important;\n}\n.slider-target,.slider-target *{\n -webkit-touch-callout:none;\n -webkit-tap-highlight-color:rgba(0,0,0,0);\n box-sizing:border-box;\n touch-action:none;\n -webkit-user-select:none;\n -moz-user-select:none;\n user-select:none\n}\n.slider-target{\n position:relative\n}\n.slider-base,.slider-connects{\n height:100%;\n position:relative;\n width:100%;\n z-index:1\n}\n.slider-connects{\n overflow:hidden;\n z-index:0\n}\n.slider-connect,.slider-origin{\n height:100%;\n position:absolute;\n right:0;\n top:0;\n transform-origin:0 0;\n transform-style:flat;\n width:100%;\n will-change:transform;\n z-index:1\n}\n.slider-txt-dir-rtl.slider-horizontal .slider-origin{\n left:0;\n right:auto\n}\n.slider-vertical .slider-origin{\n top:-100%;\n width:0\n}\n.slider-horizontal .slider-origin{\n height:0\n}\n.slider-handle{\n backface-visibility:hidden;\n position:absolute\n}\n.slider-touch-area{\n height:100%;\n width:100%\n}\n.slider-state-tap .slider-connect,.slider-state-tap .slider-origin{\n transition:transform .3s\n}\n.slider-state-drag *{\n cursor:inherit!important\n}\n.slider-tooltip-drag .slider-tooltip,.slider-tooltip-focus .slider-tooltip{\n display:none!important\n}\n.slider-tooltip-drag .slider-active .slider-tooltip,.slider-tooltip-drag.slider-state-drag .slider-tooltip:not(.slider-tooltip-hidden),.slider-tooltip-focus.slider-focused .slider-tooltip:not(.slider-tooltip-hidden){\n display:block!important\n}\n.slider-horizontal{\n height:var(--slider-height,6px)\n}\n.slider-horizontal .slider-handle{\n height:var(--slider-handle-height,16px);\n right:calc(var(--slider-handle-width, 16px)/2*-1);\n top:calc((var(--slider-handle-height, 16px) - var(--slider-height, 6px))/2*-1 + -1px);\n width:var(--slider-handle-width,16px)\n}\n.slider-vertical{\n height:var(--slider-vertical-height,300px);\n width:var(--slider-height,6px)\n}\n.slider-vertical .slider-handle{\n bottom:calc(var(--slider-handle-width, 16px)/2*-1);\n height:var(--slider-handle-width,16px);\n right:calc((var(--slider-handle-height, 16px) - var(--slider-height, 6px))/2*-1 + -1px);\n width:var(--slider-handle-height,16px)\n}\n.slider-txt-dir-rtl.slider-horizontal .slider-handle{\n left:calc(var(--slider-handle-width, 16px)/2*-1);\n right:auto\n}\n.slider-base{\n background-color:var(--slider-bg,#d1d5db)\n}\n.slider-base,.slider-connects{\n border-radius:var(--slider-radius,9999px)\n}\n.slider-connect{\n background:var(--theme-secondary, #690000);\n cursor:pointer\n}\n.slider-draggable{\n cursor:ew-resize\n}\n.slider-vertical .slider-draggable{\n cursor:ns-resize\n}\n.slider-handle{\n background:var(--slider-handle-bg,#fff);\n border:var(--slider-handle-border,0);\n border-radius:var(--slider-handle-radius,9999px);\n box-shadow:var(--slider-handle-shadow,.5px .5px 2px 1px rgba(0,0,0,.32));\n cursor:grab;\n height:var(--slider-handle-height,16px);\n width:var(--slider-handle-width,16px)\n}\n.slider-handle:focus{\n box-shadow:0 0 0 var(--slider-handle-ring-width,3px) var(--slider-handle-ring-color,rgba(16,185,129,.188)),var(--slider-handle-shadow,.5px .5px 2px 1px rgba(0,0,0,.32));\n outline:none\n}\n.slider-active{\n box-shadow:var(--slider-handle-shadow-active,.5px .5px 2px 1px rgba(0,0,0,.42));\n cursor:grabbing\n}\n[disabled] .slider-connect{\n background:var(--slider-connect-bg-disabled,#9ca3af)\n}\n[disabled] .slider-handle,[disabled].slider-handle,[disabled].slider-target{\n cursor:not-allowed\n}\n[disabled] .slider-tooltip{\n background:var(--theme-secondary, #690000);\n border-color:var(--theme-secondary, #690000);\n\topacity: 0.5;\n}\n.slider-tooltip{\n background:var(--theme-secondary, #690000);\n border:1px solid var(--theme-secondary, #690000);\n border-radius:var(--slider-tooltip-radius,5px);\n color:var(--slider-tooltip-color,#fff);\n display:block;\n font-size:var(--slider-tooltip-font-size,.875rem);\n font-weight:var(--slider-tooltip-font-weight,600);\n line-height:var(--slider-tooltip-line-height,1.25rem);\n min-width:var(--slider-tooltip-min-width,20px);\n padding:var(--slider-tooltip-py,2px) var(--slider-tooltip-px,6px);\n position:absolute;\n text-align:center;\n white-space:nowrap\n}\n.slider-horizontal .slider-tooltip-top{\n bottom:calc(var(--slider-handle-height, 16px) + var(--slider-tooltip-arrow-size, 5px) + var(--slider-tooltip-distance, 3px));\n left:50%;\n transform:translate(-50%)\n}\n.slider-horizontal .slider-tooltip-top:before{\n border:var(--slider-tooltip-arrow-size,5px) solid transparent;\n border-top-color:inherit;\n bottom:calc(var(--slider-tooltip-arrow-size, 5px)*-2);\n content:\"\";\n height:0;\n left:50%;\n position:absolute;\n transform:translate(-50%);\n width:0\n}\n.slider-horizontal .slider-tooltip-bottom{\n left:50%;\n top:calc(var(--slider-handle-height, 16px) + var(--slider-tooltip-arrow-size, 5px) + var(--slider-tooltip-distance, 3px));\n transform:translate(-50%)\n}\n.slider-horizontal .slider-tooltip-bottom:before{\n border:var(--slider-tooltip-arrow-size,5px) solid transparent;\n border-bottom-color:inherit;\n content:\"\";\n height:0;\n left:50%;\n position:absolute;\n top:calc(var(--slider-tooltip-arrow-size, 5px)*-2);\n transform:translate(-50%);\n width:0\n}\n.slider-vertical .slider-tooltip-left{\n right:calc(var(--slider-handle-height, 16px) + var(--slider-tooltip-arrow-size, 5px) + var(--slider-tooltip-distance, 3px));\n top:50%;\n transform:translateY(-50%)\n}\n.slider-vertical .slider-tooltip-left:before{\n border:var(--slider-tooltip-arrow-size,5px) solid transparent;\n border-left-color:inherit;\n content:\"\";\n height:0;\n position:absolute;\n right:calc(var(--slider-tooltip-arrow-size, 5px)*-2);\n top:50%;\n transform:translateY(-50%);\n width:0\n}\n.slider-vertical .slider-tooltip-right{\n left:calc(var(--slider-handle-height, 16px) + var(--slider-tooltip-arrow-size, 5px) + var(--slider-tooltip-distance, 3px));\n top:50%;\n transform:translateY(-50%)\n}\n.slider-vertical .slider-tooltip-right:before{\n border:var(--slider-tooltip-arrow-size,5px) solid transparent;\n border-right-color:inherit;\n content:\"\";\n height:0;\n left:calc(var(--slider-tooltip-arrow-size, 5px)*-2);\n position:absolute;\n top:50%;\n transform:translateY(-50%);\n width:0\n}\n.slider-horizontal .slider-origin>.slider-tooltip{\n left:auto;\n transform:translate(50%)\n}\n.slider-horizontal .slider-origin>.slider-tooltip-top{\n bottom:calc(var(--slider-tooltip-arrow-size, 5px) + (var(--slider-handle-height, 16px) - var(--slider-height, 6px))/2 + var(--slider-tooltip-distance, 3px) + 1px)\n}\n.slider-horizontal .slider-origin>.slider-tooltip-bottom{\n top:calc(var(--slider-tooltip-arrow-size, 5px) + (var(--slider-handle-height, 16px) - var(--slider-height, 6px))/2 + var(--slider-tooltip-distance, 3px) + var(--slider-height, 6px) - 1px)\n}\n.slider-vertical .slider-origin>.slider-tooltip{\n top:auto;\n transform:translateY(calc((var(--slider-tooltip-line-height, 1.25rem) - var(--slider-tooltip-py, 2px))*-1 + 1px))\n}\n.slider-vertical .slider-origin>.slider-tooltip-left{\n right:calc(var(--slider-tooltip-arrow-size, 5px) + var(--slider-height, 6px) + (var(--slider-handle-height, 16px) - var(--slider-height, 6px))/2 + var(--slider-tooltip-distance, 3px) - 1px)\n}\n.slider-vertical .slider-origin>.slider-tooltip-right{\n left:calc(var(--slider-tooltip-arrow-size, 5px) + var(--slider-height, 6px) + (var(--slider-handle-height, 16px) - var(--slider-height, 6px))/2 + var(--slider-tooltip-distance, 3px) - var(--slider-height, 6px) + 1px)\n}\n";
11903
12475
 
11904
12476
  const _style_1 = "/* In your Vue component's <style> section */\n:host {\n -webkit-user-select: text;\n -moz-user-select: text;\n user-select: text;\n}\n::slotted(*) {\n -webkit-user-select: text;\n -moz-user-select: text;\n user-select: text;\n}\n\n/* Ensure paragraphs can be selected across boundaries */\n::slotted(p) {\n -webkit-user-select: text;\n -moz-user-select: text;\n user-select: text;\n display: block;\n /* Avoid inline-block which can break selection */\n}";
11905
12477
 
11906
12478
  const _hoisted_1 = { class: "text-white text-center text-sm" };
11907
12479
  const _hoisted_2 = { class: "text-white text-center text-xs" };
12480
+ const _hoisted_3 = {
12481
+ key: 0,
12482
+ class: "search-highlights",
12483
+ "aria-hidden": "true"
12484
+ };
11908
12485
 
11909
12486
 
11910
12487
  const _sfc_main = {
@@ -11932,7 +12509,9 @@ const { width, height } = useWindowSize();
11932
12509
 
11933
12510
  const readerComponent = ref(null);
11934
12511
  const contentArea = ref(null);
11935
- const rootComponent = ref(null);
12512
+ const rootComponent = ref(null);
12513
+ const search = useSearch(rootComponent, readerComponent, contentArea);
12514
+ provide(searchKey, search);
11936
12515
  let paginationRevision = 0;
11937
12516
  let hostElement = null;
11938
12517
 
@@ -11953,6 +12532,7 @@ function getState() {
11953
12532
  columns: columns.value,
11954
12533
  mode: mode.value,
11955
12534
  blocked: useReaderSettings.blocked.value,
12535
+ searchEnabled: search.enabled.value,
11956
12536
  readingProgressEnabled: useReaderSettings.readingProgressEnabled.value
11957
12537
  },
11958
12538
  content: {
@@ -12009,7 +12589,8 @@ function estimatePagesAndSyncProgress() {
12009
12589
  syncReadingProgress(true);
12010
12590
 
12011
12591
  useReadingProgress.resume();
12012
- useReadingProgress.save(currentPage.value, nextTotal);
12592
+ useReadingProgress.save(currentPage.value, nextTotal);
12593
+ search.measure();
12013
12594
  }));
12014
12595
  }
12015
12596
 
@@ -12030,7 +12611,8 @@ onMounted(async () => {
12030
12611
  hostElement.nextPage = () => usePagination.next(false, 'api');
12031
12612
  hostElement.previousPage = () => usePagination.prev(false, 'api');
12032
12613
  }
12033
- useReaderSettings.initSettings(props.readerSettings);
12614
+ useReaderSettings.initSettings(props.readerSettings);
12615
+ search.init(props.readerSettings);
12034
12616
  useReadingProgress.init(
12035
12617
  props.readerSettings,
12036
12618
  props.bookTitle || bookTitle.value
@@ -12183,7 +12765,23 @@ return (_ctx, _cache) => {
12183
12765
  ], 4)
12184
12766
  ]),
12185
12767
  _: 3
12186
- })
12768
+ }),
12769
+ (unref(search).open.value)
12770
+ ? (openBlock(), createElementBlock("div", _hoisted_3, [
12771
+ createBaseVNode("div", {
12772
+ class: normalizeClass(["search-highlight-track", { 'search-navigation': unref(changeSource) === 'search' }]),
12773
+ style: normalizeStyle({ transform: `translateX(-${100 * (unref(currentPage) - 1)}%)` })
12774
+ }, [
12775
+ (openBlock(true), createElementBlock(Fragment, null, renderList(unref(search).rectangles.value, (rectangle) => {
12776
+ return (openBlock(), createElementBlock("span", {
12777
+ key: rectangle.key,
12778
+ class: normalizeClass(["search-highlight", { 'search-highlight-active': rectangle.active }]),
12779
+ style: normalizeStyle(rectangle.style)
12780
+ }, null, 6))
12781
+ }), 128))
12782
+ ], 6)
12783
+ ]))
12784
+ : createCommentVNode("", true)
12187
12785
  ], 512)
12188
12786
  ]),
12189
12787
  _: 3
@@ -12202,7 +12800,7 @@ return (_ctx, _cache) => {
12202
12800
  };
12203
12801
  const App = /*#__PURE__*/_export_sfc(_sfc_main, [['styles',[_style_0,_style_1]]]);
12204
12802
 
12205
- const tailwindStyles = "*, ::before, ::after {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n --tw-contain-size: ;\n --tw-contain-layout: ;\n --tw-contain-paint: ;\n --tw-contain-style: ;\n}\n\n::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n --tw-contain-size: ;\n --tw-contain-layout: ;\n --tw-contain-paint: ;\n --tw-contain-style: ;\n}\n\n/*\n! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com\n*/\n\n/*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n box-sizing: border-box;\n /* 1 */\n border-width: 0;\n /* 2 */\n border-style: solid;\n /* 2 */\n border-color: #e5e7eb;\n /* 2 */\n}\n\n::before,\n::after {\n --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n6. Use the user's configured `sans` font-variation-settings by default.\n7. Disable tap highlights on iOS\n*/\n\nhtml,\n:host {\n line-height: 1.5;\n /* 1 */\n -webkit-text-size-adjust: 100%;\n /* 2 */\n -moz-tab-size: 4;\n /* 3 */\n -o-tab-size: 4;\n tab-size: 4;\n /* 3 */\n font-family: ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n /* 4 */\n font-feature-settings: normal;\n /* 5 */\n font-variation-settings: normal;\n /* 6 */\n -webkit-tap-highlight-color: transparent;\n /* 7 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n margin: 0;\n /* 1 */\n line-height: inherit;\n /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n height: 0;\n /* 1 */\n color: inherit;\n /* 2 */\n border-top-width: 1px;\n /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n color: inherit;\n text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/*\n1. Use the user's configured `mono` font-family by default.\n2. Use the user's configured `mono` font-feature-settings by default.\n3. Use the user's configured `mono` font-variation-settings by default.\n4. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n /* 1 */\n font-feature-settings: normal;\n /* 2 */\n font-variation-settings: normal;\n /* 3 */\n font-size: 1em;\n /* 4 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n text-indent: 0;\n /* 1 */\n border-color: inherit;\n /* 2 */\n border-collapse: collapse;\n /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit;\n /* 1 */\n font-feature-settings: inherit;\n /* 1 */\n font-variation-settings: inherit;\n /* 1 */\n font-size: 100%;\n /* 1 */\n font-weight: inherit;\n /* 1 */\n line-height: inherit;\n /* 1 */\n letter-spacing: inherit;\n /* 1 */\n color: inherit;\n /* 1 */\n margin: 0;\n /* 2 */\n padding: 0;\n /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\ninput:where([type='button']),\ninput:where([type='reset']),\ninput:where([type='submit']) {\n -webkit-appearance: button;\n /* 1 */\n background-color: transparent;\n /* 2 */\n background-image: none;\n /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n -webkit-appearance: textfield;\n /* 1 */\n outline-offset: -2px;\n /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n -webkit-appearance: button;\n /* 1 */\n font: inherit;\n /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\n\nfieldset {\n margin: 0;\n padding: 0;\n}\n\nlegend {\n padding: 0;\n}\n\nol,\nul,\nmenu {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n/*\nReset default styling for dialogs.\n*/\n\ndialog {\n padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n opacity: 1;\n /* 1 */\n color: #9ca3af;\n /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n opacity: 1;\n /* 1 */\n color: #9ca3af;\n /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n\n:disabled {\n cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block;\n /* 1 */\n vertical-align: middle;\n /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n\n[hidden]:where(:not([hidden=\"until-found\"])) {\n display: none;\n}\n\n.fixed {\n position: fixed;\n}\n\n.absolute {\n position: absolute;\n}\n\n.relative {\n position: relative;\n}\n\n.-right-2 {\n right: -0.5rem;\n}\n\n.bottom-0 {\n bottom: 0px;\n}\n\n.right-0 {\n right: 0px;\n}\n\n.right-8 {\n right: 2rem;\n}\n\n.top-0 {\n top: 0px;\n}\n\n.top-14 {\n top: 3.5rem;\n}\n\n.top-4 {\n top: 1rem;\n}\n\n.z-10 {\n z-index: 10;\n}\n\n.z-20 {\n z-index: 20;\n}\n\n.z-40 {\n z-index: 40;\n}\n\n.col-span-1 {\n grid-column: span 1 / span 1;\n}\n\n.col-span-2 {\n grid-column: span 2 / span 2;\n}\n\n.mx-auto {\n margin-left: auto;\n margin-right: auto;\n}\n\n.my-3 {\n margin-top: 0.75rem;\n margin-bottom: 0.75rem;\n}\n\n.my-8 {\n margin-top: 2rem;\n margin-bottom: 2rem;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem;\n}\n\n.mb-6 {\n margin-bottom: 1.5rem;\n}\n\n.ml-10 {\n margin-left: 2.5rem;\n}\n\n.ml-3 {\n margin-left: 0.75rem;\n}\n\n.ml-4 {\n margin-left: 1rem;\n}\n\n.mr-3 {\n margin-right: 0.75rem;\n}\n\n.mt-1 {\n margin-top: 0.25rem;\n}\n\n.mt-3 {\n margin-top: 0.75rem;\n}\n\n.mt-5 {\n margin-top: 1.25rem;\n}\n\n.block {\n display: block;\n}\n\n.inline-block {\n display: inline-block;\n}\n\n.flex {\n display: flex;\n}\n\n.inline-flex {\n display: inline-flex;\n}\n\n.grid {\n display: grid;\n}\n\n.hidden {\n display: none;\n}\n\n.h-10 {\n height: 2.5rem;\n}\n\n.h-5 {\n height: 1.25rem;\n}\n\n.h-6 {\n height: 1.5rem;\n}\n\n.h-8 {\n height: 2rem;\n}\n\n.h-full {\n height: 100%;\n}\n\n.h-screen {\n height: 100vh;\n}\n\n.w-11 {\n width: 2.75rem;\n}\n\n.w-4\\/5 {\n width: 80%;\n}\n\n.w-5 {\n width: 1.25rem;\n}\n\n.w-6 {\n width: 1.5rem;\n}\n\n.w-60 {\n width: 15rem;\n}\n\n.w-8 {\n width: 2rem;\n}\n\n.w-96 {\n width: 24rem;\n}\n\n.w-full {\n width: 100%;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0;\n}\n\n.translate-x-0 {\n --tw-translate-x: 0px;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.translate-x-5 {\n --tw-translate-x: 1.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.scale-100 {\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.scale-95 {\n --tw-scale-x: .95;\n --tw-scale-y: .95;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.transform {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.cursor-default {\n cursor: default;\n}\n\n.cursor-pointer {\n cursor: pointer;\n}\n\n.grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n}\n\n.grid-cols-4 {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n}\n\n.items-center {\n align-items: center;\n}\n\n.justify-center {\n justify-content: center;\n}\n\n.justify-between {\n justify-content: space-between;\n}\n\n.gap-2 {\n gap: 0.5rem;\n}\n\n.divide-opacity-75 > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-opacity: 0.75;\n}\n\n.self-end {\n align-self: flex-end;\n}\n\n.overflow-auto {\n overflow: auto;\n}\n\n.overflow-hidden {\n overflow: hidden;\n}\n\n.overflow-x-hidden {\n overflow-x: hidden;\n}\n\n.rounded {\n border-radius: 0.25rem;\n}\n\n.rounded-full {\n border-radius: 9999px;\n}\n\n.rounded-sm {\n border-radius: 0.125rem;\n}\n\n.border {\n border-width: 1px;\n}\n\n.border-2 {\n border-width: 2px;\n}\n\n.border-b {\n border-bottom-width: 1px;\n}\n\n.border-t {\n border-top-width: 1px;\n}\n\n.border-gray-300 {\n --tw-border-opacity: 1;\n border-color: rgb(209 213 219 / var(--tw-border-opacity, 1));\n}\n\n.border-transparent {\n border-color: transparent;\n}\n\n.border-white {\n --tw-border-opacity: 1;\n border-color: rgb(255 255 255 / var(--tw-border-opacity, 1));\n}\n\n.border-b-white\\/25 {\n border-bottom-color: rgb(255 255 255 / 0.25);\n}\n\n.bg-gray-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(209 213 219 / var(--tw-bg-opacity, 1));\n}\n\n.bg-gray-800 {\n --tw-bg-opacity: 1;\n background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1));\n}\n\n.bg-white {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));\n}\n\n.p-10 {\n padding: 2.5rem;\n}\n\n.p-3 {\n padding: 0.75rem;\n}\n\n.p-4 {\n padding: 1rem;\n}\n\n.px-1 {\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n}\n\n.px-10 {\n padding-left: 2.5rem;\n padding-right: 2.5rem;\n}\n\n.px-2 {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n\n.px-3 {\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n}\n\n.py-2 {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n\n.py-3 {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n}\n\n.py-4 {\n padding-top: 1rem;\n padding-bottom: 1rem;\n}\n\n.pl-4 {\n padding-left: 1rem;\n}\n\n.pt-10 {\n padding-top: 2.5rem;\n}\n\n.pt-5 {\n padding-top: 1.25rem;\n}\n\n.text-left {\n text-align: left;\n}\n\n.text-center {\n text-align: center;\n}\n\n.text-base {\n font-size: 1rem;\n line-height: 1.5rem;\n}\n\n.text-lg {\n font-size: 1.125rem;\n line-height: 1.75rem;\n}\n\n.text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n\n.text-xs {\n font-size: 0.75rem;\n line-height: 1rem;\n}\n\n.font-light {\n font-weight: 300;\n}\n\n.lowercase {\n text-transform: lowercase;\n}\n\n.tracking-wide {\n letter-spacing: 0.025em;\n}\n\n.text-black {\n --tw-text-opacity: 1;\n color: rgb(0 0 0 / var(--tw-text-opacity, 1));\n}\n\n.text-gray-500 {\n --tw-text-opacity: 1;\n color: rgb(107 114 128 / var(--tw-text-opacity, 1));\n}\n\n.text-gray-700 {\n --tw-text-opacity: 1;\n color: rgb(55 65 81 / var(--tw-text-opacity, 1));\n}\n\n.text-white {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity, 1));\n}\n\n.opacity-0 {\n opacity: 0;\n}\n\n.opacity-100 {\n opacity: 1;\n}\n\n.opacity-30 {\n opacity: 0.3;\n}\n\n.opacity-50 {\n opacity: 0.5;\n}\n\n.opacity-75 {\n opacity: 0.75;\n}\n\n.shadow {\n --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.shadow-2xl {\n --tw-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25);\n --tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.shadow-lg {\n --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.filter {\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n\n.transition {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n\n.transition-colors {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n\n.transition-opacity {\n transition-property: opacity;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n\n.transition-transform {\n transition-property: transform;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n\n.duration-100 {\n transition-duration: 100ms;\n}\n\n.duration-200 {\n transition-duration: 200ms;\n}\n\n.duration-75 {\n transition-duration: 75ms;\n}\n\n.ease-in {\n transition-timing-function: cubic-bezier(0.4, 0, 1, 1);\n}\n\n.ease-out {\n transition-timing-function: cubic-bezier(0, 0, 0.2, 1);\n}\n\n.last\\:border-transparent:last-child {\n border-color: transparent;\n}\n\n.hover\\:bg-gray-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));\n}\n\n@media (min-width: 768px) {\n .md\\:bottom-14 {\n bottom: 3.5rem;\n }\n\n .md\\:right-16 {\n right: 4rem;\n }\n\n .md\\:right-3 {\n right: 0.75rem;\n }\n\n .md\\:flex {\n display: flex;\n }\n\n .md\\:grid {\n display: grid;\n }\n\n .md\\:w-2\\/5 {\n width: 40%;\n }\n\n .md\\:w-\\[40em\\] {\n width: 40em;\n }\n\n .md\\:px-24 {\n padding-left: 6rem;\n padding-right: 6rem;\n }\n}\n\n@media (prefers-color-scheme: dark) {\n .dark\\:text-white {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity, 1));\n }\n}";
12803
+ const tailwindStyles = "*, ::before, ::after {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n --tw-contain-size: ;\n --tw-contain-layout: ;\n --tw-contain-paint: ;\n --tw-contain-style: ;\n}\n\n::backdrop {\n --tw-border-spacing-x: 0;\n --tw-border-spacing-y: 0;\n --tw-translate-x: 0;\n --tw-translate-y: 0;\n --tw-rotate: 0;\n --tw-skew-x: 0;\n --tw-skew-y: 0;\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n --tw-pan-x: ;\n --tw-pan-y: ;\n --tw-pinch-zoom: ;\n --tw-scroll-snap-strictness: proximity;\n --tw-gradient-from-position: ;\n --tw-gradient-via-position: ;\n --tw-gradient-to-position: ;\n --tw-ordinal: ;\n --tw-slashed-zero: ;\n --tw-numeric-figure: ;\n --tw-numeric-spacing: ;\n --tw-numeric-fraction: ;\n --tw-ring-inset: ;\n --tw-ring-offset-width: 0px;\n --tw-ring-offset-color: #fff;\n --tw-ring-color: rgb(59 130 246 / 0.5);\n --tw-ring-offset-shadow: 0 0 #0000;\n --tw-ring-shadow: 0 0 #0000;\n --tw-shadow: 0 0 #0000;\n --tw-shadow-colored: 0 0 #0000;\n --tw-blur: ;\n --tw-brightness: ;\n --tw-contrast: ;\n --tw-grayscale: ;\n --tw-hue-rotate: ;\n --tw-invert: ;\n --tw-saturate: ;\n --tw-sepia: ;\n --tw-drop-shadow: ;\n --tw-backdrop-blur: ;\n --tw-backdrop-brightness: ;\n --tw-backdrop-contrast: ;\n --tw-backdrop-grayscale: ;\n --tw-backdrop-hue-rotate: ;\n --tw-backdrop-invert: ;\n --tw-backdrop-opacity: ;\n --tw-backdrop-saturate: ;\n --tw-backdrop-sepia: ;\n --tw-contain-size: ;\n --tw-contain-layout: ;\n --tw-contain-paint: ;\n --tw-contain-style: ;\n}\n\n/*\n! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com\n*/\n\n/*\n1. Prevent padding and border from affecting element width. (https://github.com/mozdevs/cssremedy/issues/4)\n2. Allow adding a border to an element by just adding a border-width. (https://github.com/tailwindcss/tailwindcss/pull/116)\n*/\n\n*,\n::before,\n::after {\n box-sizing: border-box;\n /* 1 */\n border-width: 0;\n /* 2 */\n border-style: solid;\n /* 2 */\n border-color: #e5e7eb;\n /* 2 */\n}\n\n::before,\n::after {\n --tw-content: '';\n}\n\n/*\n1. Use a consistent sensible line-height in all browsers.\n2. Prevent adjustments of font size after orientation changes in iOS.\n3. Use a more readable tab size.\n4. Use the user's configured `sans` font-family by default.\n5. Use the user's configured `sans` font-feature-settings by default.\n6. Use the user's configured `sans` font-variation-settings by default.\n7. Disable tap highlights on iOS\n*/\n\nhtml,\n:host {\n line-height: 1.5;\n /* 1 */\n -webkit-text-size-adjust: 100%;\n /* 2 */\n -moz-tab-size: 4;\n /* 3 */\n -o-tab-size: 4;\n tab-size: 4;\n /* 3 */\n font-family: ui-sans-serif, system-ui, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n /* 4 */\n font-feature-settings: normal;\n /* 5 */\n font-variation-settings: normal;\n /* 6 */\n -webkit-tap-highlight-color: transparent;\n /* 7 */\n}\n\n/*\n1. Remove the margin in all browsers.\n2. Inherit line-height from `html` so users can set them as a class directly on the `html` element.\n*/\n\nbody {\n margin: 0;\n /* 1 */\n line-height: inherit;\n /* 2 */\n}\n\n/*\n1. Add the correct height in Firefox.\n2. Correct the inheritance of border color in Firefox. (https://bugzilla.mozilla.org/show_bug.cgi?id=190655)\n3. Ensure horizontal rules are visible by default.\n*/\n\nhr {\n height: 0;\n /* 1 */\n color: inherit;\n /* 2 */\n border-top-width: 1px;\n /* 3 */\n}\n\n/*\nAdd the correct text decoration in Chrome, Edge, and Safari.\n*/\n\nabbr:where([title]) {\n -webkit-text-decoration: underline dotted;\n text-decoration: underline dotted;\n}\n\n/*\nRemove the default font size and weight for headings.\n*/\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n font-size: inherit;\n font-weight: inherit;\n}\n\n/*\nReset links to optimize for opt-in styling instead of opt-out.\n*/\n\na {\n color: inherit;\n text-decoration: inherit;\n}\n\n/*\nAdd the correct font weight in Edge and Safari.\n*/\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/*\n1. Use the user's configured `mono` font-family by default.\n2. Use the user's configured `mono` font-feature-settings by default.\n3. Use the user's configured `mono` font-variation-settings by default.\n4. Correct the odd `em` font sizing in all browsers.\n*/\n\ncode,\nkbd,\nsamp,\npre {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n /* 1 */\n font-feature-settings: normal;\n /* 2 */\n font-variation-settings: normal;\n /* 3 */\n font-size: 1em;\n /* 4 */\n}\n\n/*\nAdd the correct font size in all browsers.\n*/\n\nsmall {\n font-size: 80%;\n}\n\n/*\nPrevent `sub` and `sup` elements from affecting the line height in all browsers.\n*/\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/*\n1. Remove text indentation from table contents in Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=999088, https://bugs.webkit.org/show_bug.cgi?id=201297)\n2. Correct table border color inheritance in all Chrome and Safari. (https://bugs.chromium.org/p/chromium/issues/detail?id=935729, https://bugs.webkit.org/show_bug.cgi?id=195016)\n3. Remove gaps between table borders by default.\n*/\n\ntable {\n text-indent: 0;\n /* 1 */\n border-color: inherit;\n /* 2 */\n border-collapse: collapse;\n /* 3 */\n}\n\n/*\n1. Change the font styles in all browsers.\n2. Remove the margin in Firefox and Safari.\n3. Remove default padding in all browsers.\n*/\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n font-family: inherit;\n /* 1 */\n font-feature-settings: inherit;\n /* 1 */\n font-variation-settings: inherit;\n /* 1 */\n font-size: 100%;\n /* 1 */\n font-weight: inherit;\n /* 1 */\n line-height: inherit;\n /* 1 */\n letter-spacing: inherit;\n /* 1 */\n color: inherit;\n /* 1 */\n margin: 0;\n /* 2 */\n padding: 0;\n /* 3 */\n}\n\n/*\nRemove the inheritance of text transform in Edge and Firefox.\n*/\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Remove default button styles.\n*/\n\nbutton,\ninput:where([type='button']),\ninput:where([type='reset']),\ninput:where([type='submit']) {\n -webkit-appearance: button;\n /* 1 */\n background-color: transparent;\n /* 2 */\n background-image: none;\n /* 2 */\n}\n\n/*\nUse the modern Firefox focus style for all focusable elements.\n*/\n\n:-moz-focusring {\n outline: auto;\n}\n\n/*\nRemove the additional `:invalid` styles in Firefox. (https://github.com/mozilla/gecko-dev/blob/2f9eacd9d3d995c937b4251a5557d95d494c9be1/layout/style/res/forms.css#L728-L737)\n*/\n\n:-moz-ui-invalid {\n box-shadow: none;\n}\n\n/*\nAdd the correct vertical alignment in Chrome and Firefox.\n*/\n\nprogress {\n vertical-align: baseline;\n}\n\n/*\nCorrect the cursor style of increment and decrement buttons in Safari.\n*/\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n height: auto;\n}\n\n/*\n1. Correct the odd appearance in Chrome and Safari.\n2. Correct the outline style in Safari.\n*/\n\n[type='search'] {\n -webkit-appearance: textfield;\n /* 1 */\n outline-offset: -2px;\n /* 2 */\n}\n\n/*\nRemove the inner padding in Chrome and Safari on macOS.\n*/\n\n::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/*\n1. Correct the inability to style clickable types in iOS and Safari.\n2. Change font properties to `inherit` in Safari.\n*/\n\n::-webkit-file-upload-button {\n -webkit-appearance: button;\n /* 1 */\n font: inherit;\n /* 2 */\n}\n\n/*\nAdd the correct display in Chrome and Safari.\n*/\n\nsummary {\n display: list-item;\n}\n\n/*\nRemoves the default spacing and border for appropriate elements.\n*/\n\nblockquote,\ndl,\ndd,\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\nhr,\nfigure,\np,\npre {\n margin: 0;\n}\n\nfieldset {\n margin: 0;\n padding: 0;\n}\n\nlegend {\n padding: 0;\n}\n\nol,\nul,\nmenu {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n/*\nReset default styling for dialogs.\n*/\n\ndialog {\n padding: 0;\n}\n\n/*\nPrevent resizing textareas horizontally by default.\n*/\n\ntextarea {\n resize: vertical;\n}\n\n/*\n1. Reset the default placeholder opacity in Firefox. (https://github.com/tailwindlabs/tailwindcss/issues/3300)\n2. Set the default placeholder color to the user's configured gray 400 color.\n*/\n\ninput::-moz-placeholder, textarea::-moz-placeholder {\n opacity: 1;\n /* 1 */\n color: #9ca3af;\n /* 2 */\n}\n\ninput::placeholder,\ntextarea::placeholder {\n opacity: 1;\n /* 1 */\n color: #9ca3af;\n /* 2 */\n}\n\n/*\nSet the default cursor for buttons.\n*/\n\nbutton,\n[role=\"button\"] {\n cursor: pointer;\n}\n\n/*\nMake sure disabled buttons don't get the pointer cursor.\n*/\n\n:disabled {\n cursor: default;\n}\n\n/*\n1. Make replaced elements `display: block` by default. (https://github.com/mozdevs/cssremedy/issues/14)\n2. Add `vertical-align: middle` to align replaced elements more sensibly by default. (https://github.com/jensimmons/cssremedy/issues/14#issuecomment-634934210)\n This can trigger a poorly considered lint error in some tools but is included by design.\n*/\n\nimg,\nsvg,\nvideo,\ncanvas,\naudio,\niframe,\nembed,\nobject {\n display: block;\n /* 1 */\n vertical-align: middle;\n /* 2 */\n}\n\n/*\nConstrain images and videos to the parent width and preserve their intrinsic aspect ratio. (https://github.com/mozdevs/cssremedy/issues/14)\n*/\n\nimg,\nvideo {\n max-width: 100%;\n height: auto;\n}\n\n/* Make elements with the HTML hidden attribute stay hidden by default */\n\n[hidden]:where(:not([hidden=\"until-found\"])) {\n display: none;\n}\n\n.fixed {\n position: fixed;\n}\n\n.absolute {\n position: absolute;\n}\n\n.relative {\n position: relative;\n}\n\n.-right-2 {\n right: -0.5rem;\n}\n\n.bottom-0 {\n bottom: 0px;\n}\n\n.right-0 {\n right: 0px;\n}\n\n.right-8 {\n right: 2rem;\n}\n\n.top-0 {\n top: 0px;\n}\n\n.top-14 {\n top: 3.5rem;\n}\n\n.top-4 {\n top: 1rem;\n}\n\n.z-10 {\n z-index: 10;\n}\n\n.z-20 {\n z-index: 20;\n}\n\n.z-40 {\n z-index: 40;\n}\n\n.col-span-1 {\n grid-column: span 1 / span 1;\n}\n\n.col-span-2 {\n grid-column: span 2 / span 2;\n}\n\n.mx-auto {\n margin-left: auto;\n margin-right: auto;\n}\n\n.my-3 {\n margin-top: 0.75rem;\n margin-bottom: 0.75rem;\n}\n\n.my-8 {\n margin-top: 2rem;\n margin-bottom: 2rem;\n}\n\n.mb-2 {\n margin-bottom: 0.5rem;\n}\n\n.mb-6 {\n margin-bottom: 1.5rem;\n}\n\n.ml-10 {\n margin-left: 2.5rem;\n}\n\n.ml-3 {\n margin-left: 0.75rem;\n}\n\n.ml-4 {\n margin-left: 1rem;\n}\n\n.mr-3 {\n margin-right: 0.75rem;\n}\n\n.mt-1 {\n margin-top: 0.25rem;\n}\n\n.mt-3 {\n margin-top: 0.75rem;\n}\n\n.mt-5 {\n margin-top: 1.25rem;\n}\n\n.block {\n display: block;\n}\n\n.inline-block {\n display: inline-block;\n}\n\n.inline {\n display: inline;\n}\n\n.flex {\n display: flex;\n}\n\n.inline-flex {\n display: inline-flex;\n}\n\n.grid {\n display: grid;\n}\n\n.contents {\n display: contents;\n}\n\n.hidden {\n display: none;\n}\n\n.h-10 {\n height: 2.5rem;\n}\n\n.h-4 {\n height: 1rem;\n}\n\n.h-5 {\n height: 1.25rem;\n}\n\n.h-6 {\n height: 1.5rem;\n}\n\n.h-8 {\n height: 2rem;\n}\n\n.h-full {\n height: 100%;\n}\n\n.h-screen {\n height: 100vh;\n}\n\n.w-11 {\n width: 2.75rem;\n}\n\n.w-4 {\n width: 1rem;\n}\n\n.w-4\\/5 {\n width: 80%;\n}\n\n.w-5 {\n width: 1.25rem;\n}\n\n.w-6 {\n width: 1.5rem;\n}\n\n.w-60 {\n width: 15rem;\n}\n\n.w-8 {\n width: 2rem;\n}\n\n.w-96 {\n width: 24rem;\n}\n\n.w-full {\n width: 100%;\n}\n\n.flex-shrink-0 {\n flex-shrink: 0;\n}\n\n.translate-x-0 {\n --tw-translate-x: 0px;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.translate-x-5 {\n --tw-translate-x: 1.25rem;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.scale-100 {\n --tw-scale-x: 1;\n --tw-scale-y: 1;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.scale-95 {\n --tw-scale-x: .95;\n --tw-scale-y: .95;\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.transform {\n transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));\n}\n\n.cursor-default {\n cursor: default;\n}\n\n.cursor-pointer {\n cursor: pointer;\n}\n\n.grid-cols-3 {\n grid-template-columns: repeat(3, minmax(0, 1fr));\n}\n\n.grid-cols-4 {\n grid-template-columns: repeat(4, minmax(0, 1fr));\n}\n\n.items-center {\n align-items: center;\n}\n\n.justify-center {\n justify-content: center;\n}\n\n.justify-between {\n justify-content: space-between;\n}\n\n.gap-2 {\n gap: 0.5rem;\n}\n\n.divide-opacity-75 > :not([hidden]) ~ :not([hidden]) {\n --tw-divide-opacity: 0.75;\n}\n\n.self-end {\n align-self: flex-end;\n}\n\n.overflow-auto {\n overflow: auto;\n}\n\n.overflow-hidden {\n overflow: hidden;\n}\n\n.overflow-x-hidden {\n overflow-x: hidden;\n}\n\n.rounded {\n border-radius: 0.25rem;\n}\n\n.rounded-full {\n border-radius: 9999px;\n}\n\n.rounded-sm {\n border-radius: 0.125rem;\n}\n\n.border {\n border-width: 1px;\n}\n\n.border-2 {\n border-width: 2px;\n}\n\n.border-b {\n border-bottom-width: 1px;\n}\n\n.border-t {\n border-top-width: 1px;\n}\n\n.border-gray-300 {\n --tw-border-opacity: 1;\n border-color: rgb(209 213 219 / var(--tw-border-opacity, 1));\n}\n\n.border-transparent {\n border-color: transparent;\n}\n\n.border-white {\n --tw-border-opacity: 1;\n border-color: rgb(255 255 255 / var(--tw-border-opacity, 1));\n}\n\n.border-b-white\\/25 {\n border-bottom-color: rgb(255 255 255 / 0.25);\n}\n\n.bg-gray-300 {\n --tw-bg-opacity: 1;\n background-color: rgb(209 213 219 / var(--tw-bg-opacity, 1));\n}\n\n.bg-gray-800 {\n --tw-bg-opacity: 1;\n background-color: rgb(31 41 55 / var(--tw-bg-opacity, 1));\n}\n\n.bg-white {\n --tw-bg-opacity: 1;\n background-color: rgb(255 255 255 / var(--tw-bg-opacity, 1));\n}\n\n.p-10 {\n padding: 2.5rem;\n}\n\n.p-3 {\n padding: 0.75rem;\n}\n\n.p-4 {\n padding: 1rem;\n}\n\n.px-1 {\n padding-left: 0.25rem;\n padding-right: 0.25rem;\n}\n\n.px-10 {\n padding-left: 2.5rem;\n padding-right: 2.5rem;\n}\n\n.px-2 {\n padding-left: 0.5rem;\n padding-right: 0.5rem;\n}\n\n.px-3 {\n padding-left: 0.75rem;\n padding-right: 0.75rem;\n}\n\n.py-2 {\n padding-top: 0.5rem;\n padding-bottom: 0.5rem;\n}\n\n.py-3 {\n padding-top: 0.75rem;\n padding-bottom: 0.75rem;\n}\n\n.py-4 {\n padding-top: 1rem;\n padding-bottom: 1rem;\n}\n\n.pl-4 {\n padding-left: 1rem;\n}\n\n.pt-10 {\n padding-top: 2.5rem;\n}\n\n.pt-5 {\n padding-top: 1.25rem;\n}\n\n.text-left {\n text-align: left;\n}\n\n.text-center {\n text-align: center;\n}\n\n.text-base {\n font-size: 1rem;\n line-height: 1.5rem;\n}\n\n.text-lg {\n font-size: 1.125rem;\n line-height: 1.75rem;\n}\n\n.text-sm {\n font-size: 0.875rem;\n line-height: 1.25rem;\n}\n\n.text-xs {\n font-size: 0.75rem;\n line-height: 1rem;\n}\n\n.font-light {\n font-weight: 300;\n}\n\n.lowercase {\n text-transform: lowercase;\n}\n\n.tracking-wide {\n letter-spacing: 0.025em;\n}\n\n.text-black {\n --tw-text-opacity: 1;\n color: rgb(0 0 0 / var(--tw-text-opacity, 1));\n}\n\n.text-gray-500 {\n --tw-text-opacity: 1;\n color: rgb(107 114 128 / var(--tw-text-opacity, 1));\n}\n\n.text-gray-700 {\n --tw-text-opacity: 1;\n color: rgb(55 65 81 / var(--tw-text-opacity, 1));\n}\n\n.text-white {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity, 1));\n}\n\n.opacity-0 {\n opacity: 0;\n}\n\n.opacity-100 {\n opacity: 1;\n}\n\n.opacity-30 {\n opacity: 0.3;\n}\n\n.opacity-50 {\n opacity: 0.5;\n}\n\n.opacity-75 {\n opacity: 0.75;\n}\n\n.shadow {\n --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.shadow-2xl {\n --tw-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25);\n --tw-shadow-colored: 0 25px 50px -12px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.shadow-lg {\n --tw-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);\n --tw-shadow-colored: 0 10px 15px -3px var(--tw-shadow-color), 0 4px 6px -4px var(--tw-shadow-color);\n box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);\n}\n\n.filter {\n filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);\n}\n\n.transition {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n\n.transition-colors {\n transition-property: color, background-color, border-color, text-decoration-color, fill, stroke;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n\n.transition-opacity {\n transition-property: opacity;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n\n.transition-transform {\n transition-property: transform;\n transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);\n transition-duration: 150ms;\n}\n\n.duration-100 {\n transition-duration: 100ms;\n}\n\n.duration-200 {\n transition-duration: 200ms;\n}\n\n.duration-75 {\n transition-duration: 75ms;\n}\n\n.ease-in {\n transition-timing-function: cubic-bezier(0.4, 0, 1, 1);\n}\n\n.ease-out {\n transition-timing-function: cubic-bezier(0, 0, 0.2, 1);\n}\n\n.last\\:border-transparent:last-child {\n border-color: transparent;\n}\n\n.hover\\:bg-gray-100:hover {\n --tw-bg-opacity: 1;\n background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));\n}\n\n@media (min-width: 768px) {\n .md\\:bottom-14 {\n bottom: 3.5rem;\n }\n\n .md\\:right-16 {\n right: 4rem;\n }\n\n .md\\:right-3 {\n right: 0.75rem;\n }\n\n .md\\:flex {\n display: flex;\n }\n\n .md\\:grid {\n display: grid;\n }\n\n .md\\:w-2\\/5 {\n width: 40%;\n }\n\n .md\\:w-\\[40em\\] {\n width: 40em;\n }\n\n .md\\:px-24 {\n padding-left: 6rem;\n padding-right: 6rem;\n }\n}\n\n@media (prefers-color-scheme: dark) {\n .dark\\:text-white {\n --tw-text-opacity: 1;\n color: rgb(255 255 255 / var(--tw-text-opacity, 1));\n }\n}";
12206
12804
 
12207
12805
  // https://maximomussini.com/posts/vue-custom-elements
12208
12806