elismasilva commited on
Commit
c7f3302
·
verified ·
1 Parent(s): e07925b

Upload folder using huggingface_hub

Browse files
README.md CHANGED
@@ -10,7 +10,7 @@ app_file: space.py
10
  ---
11
 
12
  # `gradio_mediagallery`
13
- <img alt="Static Badge" src="https://img.shields.io/badge/version%20-%200.0.1%20-%20blue"> <a href="https://huggingface.co/spaces/elismasilva/gradio_mediagallery"><img src="https://img.shields.io/badge/%F0%9F%A4%97%20Hugging%20Face-Demo-blue"></a><p><span>💻 <a href='https://github.com/DEVAIEXP/gradio_component_mediagallery'>Component GitHub Code</a></span></p>
14
 
15
  Python library for easily interacting with trained machine learning models
16
 
@@ -19,7 +19,6 @@ Python library for easily interacting with trained machine learning models
19
  ```bash
20
  pip install gradio_mediagallery gradio_folderexplorer
21
  ```
22
-
23
  ## Usage
24
 
25
  ```python
@@ -28,8 +27,7 @@ import gradio as gr
28
  from gradio_folderexplorer import FolderExplorer
29
  from gradio_folderexplorer.helpers import load_media_from_folder
30
  from gradio_mediagallery import MediaGallery
31
- from gradio_mediagallery.helpers import extract_metadata, transfer_metadata
32
- import os
33
 
34
  # Configuration constant for the root directory containing media files
35
  ROOT_DIR_PATH = "./src/examples"
@@ -54,7 +52,7 @@ def handle_load_metadata(image_data: gr.EventData) -> List[Any]:
54
  )
55
 
56
  # UI layout and logic
57
- with gr.Blocks() as demo:
58
  """
59
  A Gradio interface for browsing and displaying media files with metadata extraction.
60
  """
 
10
  ---
11
 
12
  # `gradio_mediagallery`
13
+ <img alt="Static Badge" src="https://img.shields.io/badge/version%20-%200.0.2%20-%20blue"> <a href="https://huggingface.co/spaces/elismasilva/gradio_mediagallery"><img src="https://img.shields.io/badge/%F0%9F%A4%97%20Hugging%20Face-Demo-blue"></a><p><span>💻 <a href='https://github.com/DEVAIEXP/gradio_component_mediagallery'>Component GitHub Code</a></span></p>
14
 
15
  Python library for easily interacting with trained machine learning models
16
 
 
19
  ```bash
20
  pip install gradio_mediagallery gradio_folderexplorer
21
  ```
 
22
  ## Usage
23
 
24
  ```python
 
27
  from gradio_folderexplorer import FolderExplorer
28
  from gradio_folderexplorer.helpers import load_media_from_folder
29
  from gradio_mediagallery import MediaGallery
30
+ from gradio_mediagallery.helpers import transfer_metadata
 
31
 
32
  # Configuration constant for the root directory containing media files
33
  ROOT_DIR_PATH = "./src/examples"
 
52
  )
53
 
54
  # UI layout and logic
55
+ with gr.Blocks(theme=gr.themes.Ocean()) as demo:
56
  """
57
  A Gradio interface for browsing and displaying media files with metadata extraction.
58
  """
app.py CHANGED
@@ -3,8 +3,7 @@ import gradio as gr
3
  from gradio_folderexplorer import FolderExplorer
4
  from gradio_folderexplorer.helpers import load_media_from_folder
5
  from gradio_mediagallery import MediaGallery
6
- from gradio_mediagallery.helpers import extract_metadata, transfer_metadata
7
- import os
8
 
9
  # Configuration constant for the root directory containing media files
10
  ROOT_DIR_PATH = "./src/examples"
@@ -29,7 +28,7 @@ def handle_load_metadata(image_data: gr.EventData) -> List[Any]:
29
  )
30
 
31
  # UI layout and logic
32
- with gr.Blocks() as demo:
33
  """
34
  A Gradio interface for browsing and displaying media files with metadata extraction.
35
  """
 
3
  from gradio_folderexplorer import FolderExplorer
4
  from gradio_folderexplorer.helpers import load_media_from_folder
5
  from gradio_mediagallery import MediaGallery
6
+ from gradio_mediagallery.helpers import transfer_metadata
 
7
 
8
  # Configuration constant for the root directory containing media files
9
  ROOT_DIR_PATH = "./src/examples"
 
28
  )
29
 
30
  # UI layout and logic
31
+ with gr.Blocks(theme=gr.themes.Ocean()) as demo:
32
  """
33
  A Gradio interface for browsing and displaying media files with metadata extraction.
34
  """
space.py CHANGED
@@ -43,8 +43,7 @@ import gradio as gr
43
  from gradio_folderexplorer import FolderExplorer
44
  from gradio_folderexplorer.helpers import load_media_from_folder
45
  from gradio_mediagallery import MediaGallery
46
- from gradio_mediagallery.helpers import extract_metadata, transfer_metadata
47
- import os
48
 
49
  # Configuration constant for the root directory containing media files
50
  ROOT_DIR_PATH = "./src/examples"
@@ -69,7 +68,7 @@ def handle_load_metadata(image_data: gr.EventData) -> List[Any]:
69
  )
70
 
71
  # UI layout and logic
72
- with gr.Blocks() as demo:
73
  \"\"\"
74
  A Gradio interface for browsing and displaying media files with metadata extraction.
75
  \"\"\"
 
43
  from gradio_folderexplorer import FolderExplorer
44
  from gradio_folderexplorer.helpers import load_media_from_folder
45
  from gradio_mediagallery import MediaGallery
46
+ from gradio_mediagallery.helpers import transfer_metadata
 
47
 
48
  # Configuration constant for the root directory containing media files
49
  ROOT_DIR_PATH = "./src/examples"
 
68
  )
69
 
70
  # UI layout and logic
71
+ with gr.Blocks(theme=gr.themes.Ocean()) as demo:
72
  \"\"\"
73
  A Gradio interface for browsing and displaying media files with metadata extraction.
74
  \"\"\"
src/README.md CHANGED
@@ -10,7 +10,7 @@ app_file: space.py
10
  ---
11
 
12
  # `gradio_mediagallery`
13
- <img alt="Static Badge" src="https://img.shields.io/badge/version%20-%200.0.1%20-%20blue"> <a href="https://huggingface.co/spaces/elismasilva/gradio_mediagallery"><img src="https://img.shields.io/badge/%F0%9F%A4%97%20Hugging%20Face-Demo-blue"></a><p><span>💻 <a href='https://github.com/DEVAIEXP/gradio_component_mediagallery'>Component GitHub Code</a></span></p>
14
 
15
  Python library for easily interacting with trained machine learning models
16
 
@@ -19,7 +19,6 @@ Python library for easily interacting with trained machine learning models
19
  ```bash
20
  pip install gradio_mediagallery gradio_folderexplorer
21
  ```
22
-
23
  ## Usage
24
 
25
  ```python
@@ -28,8 +27,7 @@ import gradio as gr
28
  from gradio_folderexplorer import FolderExplorer
29
  from gradio_folderexplorer.helpers import load_media_from_folder
30
  from gradio_mediagallery import MediaGallery
31
- from gradio_mediagallery.helpers import extract_metadata, transfer_metadata
32
- import os
33
 
34
  # Configuration constant for the root directory containing media files
35
  ROOT_DIR_PATH = "./src/examples"
@@ -54,7 +52,7 @@ def handle_load_metadata(image_data: gr.EventData) -> List[Any]:
54
  )
55
 
56
  # UI layout and logic
57
- with gr.Blocks() as demo:
58
  """
59
  A Gradio interface for browsing and displaying media files with metadata extraction.
60
  """
 
10
  ---
11
 
12
  # `gradio_mediagallery`
13
+ <img alt="Static Badge" src="https://img.shields.io/badge/version%20-%200.0.2%20-%20blue"> <a href="https://huggingface.co/spaces/elismasilva/gradio_mediagallery"><img src="https://img.shields.io/badge/%F0%9F%A4%97%20Hugging%20Face-Demo-blue"></a><p><span>💻 <a href='https://github.com/DEVAIEXP/gradio_component_mediagallery'>Component GitHub Code</a></span></p>
14
 
15
  Python library for easily interacting with trained machine learning models
16
 
 
19
  ```bash
20
  pip install gradio_mediagallery gradio_folderexplorer
21
  ```
 
22
  ## Usage
23
 
24
  ```python
 
27
  from gradio_folderexplorer import FolderExplorer
28
  from gradio_folderexplorer.helpers import load_media_from_folder
29
  from gradio_mediagallery import MediaGallery
30
+ from gradio_mediagallery.helpers import transfer_metadata
 
31
 
32
  # Configuration constant for the root directory containing media files
33
  ROOT_DIR_PATH = "./src/examples"
 
52
  )
53
 
54
  # UI layout and logic
55
+ with gr.Blocks(theme=gr.themes.Ocean()) as demo:
56
  """
57
  A Gradio interface for browsing and displaying media files with metadata extraction.
58
  """
src/backend/gradio_mediagallery/templates/component/index.js CHANGED
@@ -20125,7 +20125,7 @@ function JS(r, e = {}) {
20125
  return `${XS}=${t}`;
20126
  }
20127
  const Nc = /CMCD=[^&#]+/;
20128
- function eb(r, e, t) {
20129
  const i = JS(e, t);
20130
  if (!i)
20131
  return r;
@@ -20134,7 +20134,7 @@ function eb(r, e, t) {
20134
  const n = r.includes("?") ? "&" : "?";
20135
  return `${r}${n}${i}`;
20136
  }
20137
- class tb {
20138
  constructor(e) {
20139
  this.hls = void 0, this.config = void 0, this.media = void 0, this.sid = void 0, this.cid = void 0, this.useHeaders = !1, this.includeKeys = void 0, this.initialized = !1, this.starved = !1, this.buffering = !0, this.audioBuffer = void 0, this.videoBuffer = void 0, this.onWaiting = () => {
20140
  this.initialized && (this.starved = !0), this.buffering = !0;
@@ -20219,7 +20219,7 @@ class tb {
20219
  const s = {
20220
  baseUrl: e.url
20221
  };
20222
- this.useHeaders ? (e.headers || (e.headers = {}), YS(e.headers, t, s)) : e.url = eb(e.url, t, s);
20223
  }
20224
  getNextFrag(e) {
20225
  var t;
@@ -20342,8 +20342,8 @@ class tb {
20342
  };
20343
  }
20344
  }
20345
- const ib = 3e5;
20346
- class nb extends Kt {
20347
  constructor(e) {
20348
  super("content-steering", e.logger), this.hls = void 0, this.loader = null, this.uri = null, this.pathwayId = ".", this._pathwayPriority = null, this.timeToLoad = 300, this.reloadTimer = -1, this.updated = 0, this.started = !1, this.enabled = !0, this.levels = null, this.audioTracks = null, this.subtitleTracks = null, this.penalizedPathways = {}, this.hls = e, this.registerListeners();
20349
  }
@@ -20436,7 +20436,7 @@ class nb extends Kt {
20436
  let t;
20437
  const i = this.penalizedPathways, n = performance.now();
20438
  Object.keys(i).forEach((s) => {
20439
- n - i[s] > ib && delete i[s];
20440
  });
20441
  for (let s = 0; s < e.length; s++) {
20442
  const a = e[s];
@@ -20821,7 +20821,7 @@ class xn extends Kt {
20821
  mediaKeySessions: t
20822
  } = this;
20823
  for (let i = 0; i < t.length; i++) {
20824
- const n = sb(e, t[i]);
20825
  if (n)
20826
  return n;
20827
  }
@@ -21256,7 +21256,7 @@ function Bs(r) {
21256
  throw new Error("keyId is null");
21257
  return ot(r.keyId);
21258
  }
21259
- function sb(r, e) {
21260
  if (r.keyId && e.mediaKeysSession.keyStatuses.has(r.keyId))
21261
  return e.mediaKeysSession.keyStatuses.get(r.keyId);
21262
  if (r.matches(e.decryptdata))
@@ -21276,7 +21276,7 @@ function Gc(r, e) {
21276
  decryptdata: e
21277
  }, t ? "HDCP level output restricted" : `key status changed to "${r}"`);
21278
  }
21279
- class rb {
21280
  constructor(e) {
21281
  this.hls = void 0, this.isVideoPlaybackQualityAvailable = !1, this.timer = void 0, this.media = null, this.lastTime = void 0, this.lastDroppedFrames = 0, this.lastDecodedFrames = 0, this.streamController = void 0, this.hls = e, this.registerListeners();
21282
  }
@@ -21368,13 +21368,13 @@ function Tn(r, e) {
21368
  function Lo(r, e, t, i) {
21369
  const n = r.mode;
21370
  if (n === "disabled" && (r.mode = "hidden"), r.cues && r.cues.length > 0) {
21371
- const s = ob(r.cues, e, t);
21372
  for (let a = 0; a < s.length; a++)
21373
  (!i || i(s[a])) && r.removeCue(s[a]);
21374
  }
21375
  n === "disabled" && (r.mode = n);
21376
  }
21377
- function ab(r, e) {
21378
  if (e <= r[0].startTime)
21379
  return 0;
21380
  const t = r.length - 1;
@@ -21390,8 +21390,8 @@ function ab(r, e) {
21390
  return s;
21391
  return r[i].startTime - e < e - r[n].startTime ? i : n;
21392
  }
21393
- function ob(r, e, t) {
21394
- const i = [], n = ab(r, e);
21395
  if (n > -1)
21396
  for (let s = n, a = r.length; s < a; s++) {
21397
  const o = r[s];
@@ -21410,7 +21410,7 @@ function cr(r) {
21410
  }
21411
  return e;
21412
  }
21413
- class lb extends El {
21414
  constructor(e) {
21415
  super(e, "subtitle-track-controller"), this.media = null, this.tracks = [], this.groupIds = null, this.tracksInGroup = [], this.trackId = -1, this.currentTrack = null, this.selectDefaultTrack = !0, this.queuedDefaultTrack = -1, this.useTextTrackPolling = !1, this.subtitlePollingInterval = -1, this._subtitleDisplay = !0, this.asyncPollTrackChange = () => this.pollTrackChange(0), this.onTextTracksChanged = () => {
21416
  if (this.useTextTrackPolling || self.clearInterval(this.subtitlePollingInterval), !this.media || !this.hls.config.renderTextTracksNatively)
@@ -21681,7 +21681,7 @@ class lb extends El {
21681
  this.loadPlaylist(d);
21682
  }
21683
  }
21684
- function ub() {
21685
  try {
21686
  return crypto.randomUUID();
21687
  } catch {
@@ -21707,10 +21707,10 @@ const Ln = 0.025;
21707
  let Cr = /* @__PURE__ */ function(r) {
21708
  return r[r.Point = 0] = "Point", r[r.Range = 1] = "Range", r;
21709
  }({});
21710
- function cb(r, e, t) {
21711
  return `${r.identifier}-${t + 1}-${Qn(e)}`;
21712
  }
21713
- class db {
21714
  constructor(e, t) {
21715
  this.base = void 0, this._duration = null, this._timelineStart = null, this.appendInPlaceDisabled = void 0, this.appendInPlaceStarted = void 0, this.dateRange = void 0, this.hasPlayed = !1, this.cumulativeDuration = 0, this.resumeOffset = NaN, this.playoutLimit = NaN, this.restrictions = {
21716
  skip: !1,
@@ -21829,7 +21829,7 @@ class db {
21829
  return this.assetList.length > 0 || this.assetListResponse !== null;
21830
  }
21831
  toString() {
21832
- return hb(this);
21833
  }
21834
  }
21835
  function Ba(r, e) {
@@ -21844,14 +21844,14 @@ function Na(r, e) {
21844
  var t;
21845
  return e;
21846
  }
21847
- function hb(r) {
21848
  return `["${r.identifier}" ${r.cue.pre ? "<pre>" : r.cue.post ? "<post>" : ""}${r.timelineStart.toFixed(2)}-${r.resumeTime.toFixed(2)}]`;
21849
  }
21850
  function bn(r) {
21851
  const e = r.timelineStart, t = r.duration || 0;
21852
  return `["${r.identifier}" ${e.toFixed(2)}-${(e + t).toFixed(2)}]`;
21853
  }
21854
- class fb {
21855
  constructor(e, t, i, n) {
21856
  this.hls = void 0, this.interstitial = void 0, this.assetItem = void 0, this.tracks = null, this.hasDetails = !1, this.mediaAttached = null, this._currentTime = void 0, this._bufferedEosTime = void 0, this.checkPlayout = () => {
21857
  this.reachedPlayout(this.currentTime) && this.hls && this.hls.trigger(E.PLAYOUT_LIMIT_REACHED, {});
@@ -22024,7 +22024,7 @@ class fb {
22024
  }
22025
  }
22026
  const Vc = 0.033;
22027
- class gb extends Kt {
22028
  constructor(e, t) {
22029
  super("interstitials-sched", t), this.onScheduleUpdate = void 0, this.eventMap = {}, this.events = null, this.items = null, this.durations = {
22030
  primary: 0,
@@ -22157,7 +22157,7 @@ class gb extends Kt {
22157
  const o = s[a], l = e[o];
22158
  if (l.isInterstitial) {
22159
  let u = this.eventMap[o];
22160
- u ? u.setDateRange(l) : (u = new db(l, t), this.eventMap[o] = u, i === !1 && (u.appendInPlace = i)), n.push(u);
22161
  }
22162
  }
22163
  return n;
@@ -22322,7 +22322,7 @@ class gb extends Kt {
22322
  function Yt(r) {
22323
  return `[${r.event ? '"' + r.event.identifier + '"' : "primary"}: ${r.start.toFixed(2)}-${r.end.toFixed(2)}]`;
22324
  }
22325
- class mb {
22326
  constructor(e) {
22327
  this.hls = void 0, this.hls = e;
22328
  }
@@ -22396,7 +22396,7 @@ function Kc(r) {
22396
  function Ns(r, e) {
22397
  return `[${r}] Advancing timeline position to ${e}`;
22398
  }
22399
- class pb extends Kt {
22400
  constructor(e, t) {
22401
  super("interstitials", e.logger), this.HlsPlayerClass = void 0, this.hls = void 0, this.assetListLoader = void 0, this.mediaSelection = null, this.altSelection = null, this.media = null, this.detachedData = null, this.requiredTracks = null, this.manager = null, this.playerQueue = [], this.bufferedPos = -1, this.timelinePos = -1, this.schedule = void 0, this.playingItem = null, this.bufferingItem = null, this.waitingItem = null, this.endedItem = null, this.playingAsset = null, this.endedAsset = null, this.bufferingAsset = null, this.shouldPlay = !1, this.onPlay = () => {
22402
  this.shouldPlay = !0;
@@ -22500,7 +22500,7 @@ Schedule: ${l.map((m) => Yt(m))} pos: ${this.timelinePos}`), c.length && this.lo
22500
  }
22501
  a && this.trimInPlace(h, a), g && f !== h && this.trimInPlace(f, g), this.checkBuffer();
22502
  }
22503
- }, this.hls = e, this.HlsPlayerClass = t, this.assetListLoader = new mb(e), this.schedule = new gb(this.onScheduleUpdate, e.logger), this.registerListeners();
22504
  }
22505
  registerListeners() {
22506
  const e = this.hls;
@@ -23376,7 +23376,7 @@ Schedule: ${l.map((m) => Yt(m))} pos: ${this.timelinePos}`), c.length && this.lo
23376
  createAsset(e, t, i, n, s, a) {
23377
  const o = {
23378
  parentIdentifier: e.identifier,
23379
- identifier: cb(e, a, t),
23380
  duration: s,
23381
  startOffset: i,
23382
  timelineStart: n,
@@ -23418,7 +23418,7 @@ Schedule: ${l.map((m) => Yt(m))} pos: ${this.timelinePos}`), c.length && this.lo
23418
  f != null && f.sessionId && f.contentId && (h.cmcd = Se({}, f, {
23419
  contentId: Qn(t.uri)
23420
  })), this.getAssetPlayer(d) && this.warn(`Duplicate date range identifier ${e} and asset ${d}`);
23421
- const g = new fb(this.HlsPlayerClass, h, e, t);
23422
  this.playerQueue.push(g), e.assetList[i] = t;
23423
  let m = !0;
23424
  const p = (S) => {
@@ -23693,7 +23693,7 @@ Schedule: ${l.map((m) => Yt(m))} pos: ${this.timelinePos}`), c.length && this.lo
23693
  }
23694
  }
23695
  const Hc = 500;
23696
- class _b extends hl {
23697
  constructor(e, t, i) {
23698
  super(e, t, i, "subtitle-stream-controller", W.SUBTITLE), this.currentTrackId = -1, this.tracksBuffered = [], this.mainDetails = null, this.registerListeners();
23699
  }
@@ -23913,10 +23913,10 @@ class _b extends hl {
23913
  Oe(e) ? super.loadFragment(e, t, i) : this._loadInitSegment(e, t);
23914
  }
23915
  get mediaBufferTimeRanges() {
23916
- return new yb(this.tracksBuffered[this.currentTrackId] || []);
23917
  }
23918
  }
23919
- class yb {
23920
  constructor(e) {
23921
  this.buffered = void 0;
23922
  const t = (i, n, s) => {
@@ -23937,7 +23937,7 @@ class yb {
23937
  };
23938
  }
23939
  }
23940
- const vb = {
23941
  42: 225,
23942
  // lowercase a, acute accent
23943
  92: 233,
@@ -24125,7 +24125,7 @@ const vb = {
24125
  // Box drawings heavy up and right
24126
  207: 9499
24127
  // Box drawings heavy up and left
24128
- }, bg = (r) => String.fromCharCode(vb[r] || r), Jt = 15, vi = 100, Eb = {
24129
  17: 1,
24130
  18: 3,
24131
  21: 5,
@@ -24134,7 +24134,7 @@ const vb = {
24134
  16: 11,
24135
  19: 12,
24136
  20: 14
24137
- }, Sb = {
24138
  17: 2,
24139
  18: 4,
24140
  21: 6,
@@ -24142,7 +24142,7 @@ const vb = {
24142
  23: 10,
24143
  19: 13,
24144
  20: 15
24145
- }, bb = {
24146
  25: 1,
24147
  26: 3,
24148
  29: 5,
@@ -24151,7 +24151,7 @@ const vb = {
24151
  24: 11,
24152
  27: 12,
24153
  28: 14
24154
- }, Tb = {
24155
  25: 2,
24156
  26: 4,
24157
  29: 6,
@@ -24159,8 +24159,8 @@ const vb = {
24159
  31: 10,
24160
  27: 13,
24161
  28: 15
24162
- }, Ab = ["white", "green", "blue", "cyan", "red", "yellow", "magenta", "black", "transparent"];
24163
- class Db {
24164
  constructor() {
24165
  this.time = null, this.verboseLevel = 0;
24166
  }
@@ -24204,7 +24204,7 @@ class Tg {
24204
  return "color=" + this.foreground + ", underline=" + this.underline + ", italics=" + this.italics + ", background=" + this.background + ", flash=" + this.flash;
24205
  }
24206
  }
24207
- class Ib {
24208
  constructor() {
24209
  this.uchar = " ", this.penState = new Tg();
24210
  }
@@ -24227,11 +24227,11 @@ class Ib {
24227
  return this.uchar === " " && this.penState.isDefault();
24228
  }
24229
  }
24230
- class xb {
24231
  constructor(e) {
24232
  this.chars = [], this.pos = 0, this.currPenState = new Tg(), this.cueStartTime = null, this.logger = void 0;
24233
  for (let t = 0; t < vi; t++)
24234
- this.chars.push(new Ib());
24235
  this.logger = e;
24236
  }
24237
  equals(e) {
@@ -24312,7 +24312,7 @@ class Ua {
24312
  constructor(e) {
24313
  this.rows = [], this.currRow = Jt - 1, this.nrRollUpRows = null, this.lastOutputScreen = null, this.logger = void 0;
24314
  for (let t = 0; t < Jt; t++)
24315
- this.rows.push(new xb(e));
24316
  this.logger = e;
24317
  }
24318
  reset() {
@@ -24527,8 +24527,8 @@ class qc {
24527
  }
24528
  class zc {
24529
  constructor(e, t, i) {
24530
- this.channels = void 0, this.currentChannel = 0, this.cmdHistory = kb(), this.logger = void 0;
24531
- const n = this.logger = new Db();
24532
  this.channels = [null, new qc(e, t, n), new qc(e + 1, i, n)];
24533
  }
24534
  getHandler(e) {
@@ -24550,7 +24550,7 @@ class zc {
24550
  this.logger.log(3, () => "[" + Wi([t[i], t[i + 1]]) + "] -> (" + Wi([n, s]) + ")");
24551
  const l = this.cmdHistory;
24552
  if (n >= 16 && n <= 31) {
24553
- if (Lb(n, s, l)) {
24554
  Us(null, null, l), this.logger.log(3, () => "Repeated command (" + Wi([n, s]) + ") is dropped");
24555
  continue;
24556
  }
@@ -24598,7 +24598,7 @@ class zc {
24598
  if (!(n || s))
24599
  return !1;
24600
  const a = e <= 23 ? 1 : 2;
24601
- t >= 64 && t <= 95 ? i = a === 1 ? Eb[e] : bb[e] : i = a === 1 ? Sb[e] : Tb[e];
24602
  const o = this.channels[a];
24603
  return o ? (o.setPAC(this.interpretPAC(i, t)), this.currentChannel = a, !0) : !1;
24604
  }
@@ -24639,7 +24639,7 @@ class zc {
24639
  return !1;
24640
  let s;
24641
  const a = {};
24642
- e === 16 || e === 24 ? (s = Math.floor((t - 32) / 2), a.background = Ab[s], t % 2 === 1 && (a.background = a.background + "_semi")) : t === 45 ? a.background = "transparent" : (a.foreground = "black", t === 47 && (a.underline = !0));
24643
  const o = e <= 23 ? 1 : 2;
24644
  return this.channels[o].setBkgData(a), !0;
24645
  }
@@ -24666,10 +24666,10 @@ class zc {
24666
  function Us(r, e, t) {
24667
  t.a = r, t.b = e;
24668
  }
24669
- function Lb(r, e, t) {
24670
  return t.a === r && t.b === e;
24671
  }
24672
- function kb() {
24673
  return {
24674
  a: null,
24675
  b: null
@@ -24832,7 +24832,7 @@ var Al = function() {
24832
  return self.WebVTT.convertCueToDOMTree(self, this.text);
24833
  }, a;
24834
  }();
24835
- class Cb {
24836
  decode(e, t) {
24837
  if (!e)
24838
  return "";
@@ -24848,7 +24848,7 @@ function Ag(r) {
24848
  const t = r.match(/^(?:(\d+):)?(\d{2}):(\d{2})(\.\d+)?/);
24849
  return t ? parseFloat(t[2]) > 59 ? e(t[2], t[3], 0, t[4]) : e(t[1], t[2], t[3], t[4]) : null;
24850
  }
24851
- class Rb {
24852
  constructor() {
24853
  this.values = /* @__PURE__ */ Object.create(null);
24854
  }
@@ -24903,7 +24903,7 @@ function Dg(r, e, t, i) {
24903
  }
24904
  }
24905
  const ko = new Al(0, 0, ""), Gs = ko.align === "middle" ? "middle" : "center";
24906
- function wb(r, e, t) {
24907
  const i = r;
24908
  function n() {
24909
  const o = Ag(r);
@@ -24912,7 +24912,7 @@ function wb(r, e, t) {
24912
  return r = r.replace(/^[^\sa-zA-Z-]+/, ""), o;
24913
  }
24914
  function s(o, l) {
24915
- const u = new Rb();
24916
  Dg(o, function(h, f) {
24917
  let g;
24918
  switch (h) {
@@ -24956,9 +24956,9 @@ function Ig(r) {
24956
  return r.replace(/<br(?: \/)?>/gi, `
24957
  `);
24958
  }
24959
- class Fb {
24960
  constructor() {
24961
- this.state = "INITIAL", this.buffer = "", this.decoder = new Cb(), this.regionList = [], this.cue = null, this.oncue = void 0, this.onparsingerror = void 0, this.onflush = void 0;
24962
  }
24963
  parse(e) {
24964
  const t = this;
@@ -25017,7 +25017,7 @@ class Fb {
25017
  continue;
25018
  }
25019
  try {
25020
- wb(s, t.cue, t.regionList);
25021
  } catch {
25022
  t.cue = null, t.state = "BADCUE";
25023
  continue;
@@ -25059,9 +25059,9 @@ class Fb {
25059
  return e.onflush && e.onflush(), this;
25060
  }
25061
  }
25062
- const Pb = /\r\n|\n\r|\n|\r/g, Ga = function(e, t, i = 0) {
25063
  return e.slice(i, i + t.length) === t;
25064
- }, Ob = function(e) {
25065
  let t = parseInt(e.slice(-3));
25066
  const i = parseInt(e.slice(-6, -4)), n = parseInt(e.slice(-9, -7)), s = e.length > 9 ? parseInt(e.substring(0, e.indexOf(":"))) : 0;
25067
  if (!H(t) || !H(i) || !H(n) || !H(s))
@@ -25071,7 +25071,7 @@ const Pb = /\r\n|\n\r|\n|\r/g, Ga = function(e, t, i = 0) {
25071
  function Dl(r, e, t) {
25072
  return Qn(r.toString()) + Qn(e.toString()) + Qn(t);
25073
  }
25074
- const $b = function(e, t, i) {
25075
  let n = e[t], s = e[n.prevCC];
25076
  if (!s || !s.new && n.new) {
25077
  e.ccOffset = e.presentationOffset = n.start, n.new = !1;
@@ -25083,8 +25083,8 @@ const $b = function(e, t, i) {
25083
  }
25084
  e.presentationOffset = i;
25085
  };
25086
- function Mb(r, e, t, i, n, s, a) {
25087
- const o = new Fb(), l = Rt(new Uint8Array(r)).trim().replace(Pb, `
25088
  `).split(`
25089
  `), u = [], c = e ? KE(e.baseTime, e.timescale) : 0;
25090
  let d = "00:00.000", h = 0, f = 0, g, m = !0;
@@ -25092,7 +25092,7 @@ function Mb(r, e, t, i, n, s, a) {
25092
  const v = t[i];
25093
  let _ = t.ccOffset;
25094
  const y = (h - c) / 9e4;
25095
- if (v != null && v.new && (f !== void 0 ? _ = t.ccOffset = v.start : $b(t, i, y)), y) {
25096
  if (!e) {
25097
  g = new Error("Missing initPTS for VTT MPEGTS");
25098
  return;
@@ -25118,7 +25118,7 @@ function Mb(r, e, t, i, n, s, a) {
25118
  Ga(v, "LOCAL:") ? d = v.slice(6) : Ga(v, "MPEGTS:") && (h = parseInt(v.slice(7)));
25119
  });
25120
  try {
25121
- f = Ob(d) / 1e3;
25122
  } catch (v) {
25123
  g = v;
25124
  }
@@ -25128,7 +25128,7 @@ function Mb(r, e, t, i, n, s, a) {
25128
  `);
25129
  }), o.flush();
25130
  }
25131
- const Va = "stpp.ttml.im1t", xg = /^(\d{2,}):(\d{2}):(\d{2}):(\d{2})\.?(\d+)?$/, Lg = /^(\d*(?:\.\d*)?)(h|m|s|ms|f|t)$/, Bb = {
25132
  left: "start",
25133
  center: "center",
25134
  right: "end",
@@ -25143,12 +25143,12 @@ function Wc(r, e, t, i) {
25143
  }
25144
  const s = n.map((o) => Rt(o)), a = VE(e.baseTime, 1, e.timescale);
25145
  try {
25146
- s.forEach((o) => t(Nb(o, a)));
25147
  } catch (o) {
25148
  i(o);
25149
  }
25150
  }
25151
- function Nb(r, e) {
25152
  const n = new DOMParser().parseFromString(r, "text/xml").getElementsByTagName("tt")[0];
25153
  if (!n)
25154
  throw new Error("Invalid ttml");
@@ -25173,11 +25173,11 @@ function Nb(r, e) {
25173
  }
25174
  const p = new Al(f - e, m - e, h);
25175
  p.id = Dl(p.startTime, p.endTime, p.text);
25176
- const v = u[d.getAttribute("region")], _ = l[d.getAttribute("style")], y = Ub(v, _, l), {
25177
  textAlign: S
25178
  } = y;
25179
  if (S) {
25180
- const b = Bb[S];
25181
  b && (p.lineAlign = b), p.align = S;
25182
  }
25183
  return Se(p, y), p;
@@ -25200,7 +25200,7 @@ function kg(r, e) {
25200
  ` : (s = i.childNodes) != null && s.length ? kg(i, e) : e ? t + i.textContent.trim().replace(/\s+/g, " ") : t + i.textContent;
25201
  }, "");
25202
  }
25203
- function Ub(r, e, t) {
25204
  const i = "http://www.w3.org/ns/ttml#styling";
25205
  let n = null;
25206
  const s = [
@@ -25232,13 +25232,13 @@ function qa(r, e) {
25232
  if (!r)
25233
  return null;
25234
  let t = Ag(r);
25235
- return t === null && (xg.test(r) ? t = Gb(r, e) : Lg.test(r) && (t = Vb(r, e))), t;
25236
  }
25237
- function Gb(r, e) {
25238
  const t = xg.exec(r), i = (t[4] | 0) + (t[5] | 0) / e.subFrameRate;
25239
  return (t[1] | 0) * 3600 + (t[2] | 0) * 60 + (t[3] | 0) + i / e.frameRate;
25240
  }
25241
- function Vb(r, e) {
25242
  const t = Lg.exec(r), i = Number(t[1]);
25243
  switch (t[2]) {
25244
  case "h":
@@ -25268,7 +25268,7 @@ class Vs {
25268
  this.cueRanges = [], this.startTime = null;
25269
  }
25270
  }
25271
- class Kb {
25272
  constructor(e) {
25273
  this.hls = void 0, this.media = null, this.config = void 0, this.enabled = !0, this.Cues = void 0, this.textTracks = [], this.tracks = [], this.initPTS = [], this.unparsedVttFrags = [], this.captionsTracks = {}, this.nonNativeCaptionsTracks = {}, this.cea608Parser1 = void 0, this.cea608Parser2 = void 0, this.lastCc = -1, this.lastSn = -1, this.lastPartIndex = -1, this.prevCC = -1, this.vttCCs = Qc(), this.captionsProperties = void 0, this.hls = e, this.config = e.config, this.Cues = e.config.cueHandler, this.captionsProperties = {
25274
  textTrack1: {
@@ -25302,7 +25302,7 @@ class Kb {
25302
  addCues(e, t, i, n, s) {
25303
  let a = !1;
25304
  for (let o = s.length; o--; ) {
25305
- const l = s[o], u = Hb(l[0], l[1], t, i);
25306
  if (u >= 0 && (l[0] = Math.min(l[0], t), l[1] = Math.max(l[1], i), a = !0, u / (i - t) > 0.5))
25307
  return;
25308
  }
@@ -25551,7 +25551,7 @@ class Kb {
25551
  return;
25552
  }
25553
  const l = this.hls, u = (t = i.initSegment) != null && t.data ? Gt(i.initSegment.data, new Uint8Array(n)).buffer : n;
25554
- Mb(u, this.initPTS[i.cc], this.vttCCs, i.cc, i.start, (c) => {
25555
  this._appendCues(c, i.level), l.trigger(E.SUBTITLE_FRAG_PROCESSED, {
25556
  success: !0,
25557
  frag: i
@@ -25663,7 +25663,7 @@ function Cg(r) {
25663
  function Xc(r, e) {
25664
  return !!r && r.kind === Cg(e) && Ao(e, r);
25665
  }
25666
- function Hb(r, e, t, i) {
25667
  return Math.min(e, i) - Math.max(r, t);
25668
  }
25669
  function Qc() {
@@ -25677,7 +25677,7 @@ function Qc() {
25677
  }
25678
  };
25679
  }
25680
- const qb = /\s/, zb = {
25681
  newCue(r, e, t, i) {
25682
  const n = [];
25683
  let s, a, o, l, u;
@@ -25686,7 +25686,7 @@ const qb = /\s/, zb = {
25686
  if (s = i.rows[h], o = !0, l = 0, u = "", !s.isEmpty()) {
25687
  var d;
25688
  for (let m = 0; m < s.chars.length; m++)
25689
- qb.test(s.chars[m].uchar) && o ? l++ : (u += s.chars[m].uchar, o = !1);
25690
  s.cueStartTime = e, e === t && (t += 1e-4), l >= 16 ? l-- : l++;
25691
  const f = Ig(u.trim()), g = Dl(e, t, f);
25692
  r != null && (d = r.cues) != null && d.getCueById(g) || (a = new c(e, t, f), a.id = g, a.line = h + 1, a.align = "left", a.position = 10 + Math.min(80, Math.floor(l * 8 / 32) * 10), n.push(a));
@@ -25694,7 +25694,7 @@ const qb = /\s/, zb = {
25694
  return r && n.length && (n.sort((h, f) => h.line === "auto" || f.line === "auto" ? 0 : h.line > 8 && f.line > 8 ? f.line - h.line : h.line - f.line), n.forEach((h) => Eg(r, h))), n;
25695
  }
25696
  };
25697
- function Wb() {
25698
  if (
25699
  // @ts-ignore
25700
  self.fetch && self.AbortController && self.ReadableStream && self.Request
@@ -25705,10 +25705,10 @@ function Wb() {
25705
  }
25706
  return !1;
25707
  }
25708
- const jb = /(\d+)-(\d+)\/(\d+)/;
25709
  class Zc {
25710
  constructor(e) {
25711
- this.fetchSetup = void 0, this.requestTimeout = void 0, this.request = null, this.response = null, this.controller = void 0, this.context = null, this.config = null, this.callbacks = null, this.stats = void 0, this.loader = null, this.fetchSetup = e.fetchSetup || Zb, this.controller = new self.AbortController(), this.stats = new nl();
25712
  }
25713
  destroy() {
25714
  this.loader = this.callbacks = this.context = this.config = this.request = null, this.abortInternal(), this.response = null, this.fetchSetup = this.controller = this.stats = null;
@@ -25725,7 +25725,7 @@ class Zc {
25725
  if (n.loading.start)
25726
  throw new Error("Loader can only be used once.");
25727
  n.loading.start = self.performance.now();
25728
- const s = Yb(e, this.controller.signal), a = e.responseType === "arraybuffer", o = a ? "byteLength" : "length", {
25729
  maxTimeToFirstByteMs: l,
25730
  maxLoadTimeMs: u
25731
  } = t.loadPolicy;
@@ -25742,9 +25742,9 @@ class Zc {
25742
  status: m,
25743
  statusText: p
25744
  } = d;
25745
- throw new Jb(p || "fetch, bad network response", m, d);
25746
  }
25747
- n.loading.first = f, n.total = Qb(d.headers) || n.total;
25748
  const g = (h = this.callbacks) == null ? void 0 : h.onProgress;
25749
  return g && H(t.highWaterMark) ? this.loadProgressively(d, n, e, t.highWaterMark, g) : a ? d.arrayBuffer() : e.responseType === "json" ? d.json() : d.text();
25750
  }).then((d) => {
@@ -25793,7 +25793,7 @@ class Zc {
25793
  return l();
25794
  }
25795
  }
25796
- function Yb(r, e) {
25797
  const t = {
25798
  method: "GET",
25799
  mode: "cors",
@@ -25803,15 +25803,15 @@ function Yb(r, e) {
25803
  };
25804
  return r.rangeEnd && t.headers.set("Range", "bytes=" + r.rangeStart + "-" + String(r.rangeEnd - 1)), t;
25805
  }
25806
- function Xb(r) {
25807
- const e = jb.exec(r);
25808
  if (e)
25809
  return parseInt(e[2]) - parseInt(e[1]) + 1;
25810
  }
25811
- function Qb(r) {
25812
  const e = r.get("Content-Range");
25813
  if (e) {
25814
- const i = Xb(e);
25815
  if (H(i))
25816
  return i;
25817
  }
@@ -25819,15 +25819,15 @@ function Qb(r) {
25819
  if (t)
25820
  return parseInt(t);
25821
  }
25822
- function Zb(r, e) {
25823
  return new self.Request(r.url, e);
25824
  }
25825
- class Jb extends Error {
25826
  constructor(e, t, i) {
25827
  super(e), this.code = void 0, this.details = void 0, this.code = t, this.details = i;
25828
  }
25829
  }
25830
- const e1 = /^age:\s*[\d.]+\s*$/im;
25831
  class Rg {
25832
  constructor(e) {
25833
  this.xhrSetup = void 0, this.requestTimeout = void 0, this.retryTimeout = void 0, this.retryDelay = void 0, this.config = null, this.callbacks = null, this.context = null, this.loader = null, this.stats = void 0, this.xhrSetup = e && e.xhrSetup || null, this.stats = new nl(), this.retryDelay = 0;
@@ -25956,7 +25956,7 @@ class Rg {
25956
  }
25957
  getCacheAge() {
25958
  let e = null;
25959
- if (this.loader && e1.test(this.loader.getAllResponseHeaders())) {
25960
  const t = this.loader.getResponseHeader("age");
25961
  e = t ? parseFloat(t) : null;
25962
  }
@@ -25966,12 +25966,12 @@ class Rg {
25966
  return this.loader && new RegExp(`^${e}:\\s*[\\d.]+\\s*$`, "im").test(this.loader.getAllResponseHeaders()) ? this.loader.getResponseHeader(e) : null;
25967
  }
25968
  }
25969
- const t1 = {
25970
  maxTimeToFirstByteMs: 8e3,
25971
  maxLoadTimeMs: 2e4,
25972
  timeoutRetry: null,
25973
  errorRetry: null
25974
- }, i1 = pe(pe({
25975
  autoStartLoad: !0,
25976
  // used by stream-controller
25977
  startPosition: -1,
@@ -26070,7 +26070,7 @@ const t1 = {
26070
  bufferController: sS,
26071
  capLevelController: Sl,
26072
  errorController: vv,
26073
- fpsController: rb,
26074
  stretchShortVideoTrack: !1,
26075
  // used by mp4-remuxer
26076
  maxAudioFramesDrift: 1,
@@ -26127,7 +26127,7 @@ const t1 = {
26127
  useMediaCapabilities: !0,
26128
  preserveManualLevelOnError: !1,
26129
  certLoadPolicy: {
26130
- default: t1
26131
  },
26132
  keyLoadPolicy: {
26133
  default: {
@@ -26241,20 +26241,20 @@ const t1 = {
26241
  fragLoadingMaxRetry: 6,
26242
  fragLoadingRetryDelay: 1e3,
26243
  fragLoadingMaxRetryTimeout: 64e3
26244
- }, n1()), {}, {
26245
- subtitleStreamController: _b,
26246
- subtitleTrackController: lb,
26247
- timelineController: Kb,
26248
  audioStreamController: eS,
26249
  audioTrackController: tS,
26250
  emeController: xn,
26251
- cmcdController: tb,
26252
- contentSteeringController: nb,
26253
- interstitialsController: pb
26254
  });
26255
- function n1() {
26256
  return {
26257
- cueHandler: zb,
26258
  // used by timeline-controller
26259
  enableWebVTT: !0,
26260
  // used by timeline-controller
@@ -26281,7 +26281,7 @@ function n1() {
26281
  renderTextTracksNatively: !0
26282
  };
26283
  }
26284
- function s1(r, e, t) {
26285
  if ((e.liveSyncDurationCount || e.liveMaxLatencyDurationCount) && (e.liveSyncDuration || e.liveMaxLatencyDuration))
26286
  throw new Error("Illegal hls.js config: don't mix up liveSyncDurationCount/liveMaxLatencyDurationCount and liveSyncDuration/liveMaxLatencyDuration");
26287
  if (e.liveMaxLatencyDurationCount !== void 0 && (e.liveSyncDurationCount === void 0 || e.liveMaxLatencyDurationCount <= e.liveSyncDurationCount))
@@ -26319,12 +26319,12 @@ function s1(r, e, t) {
26319
  function Co(r) {
26320
  return r && typeof r == "object" ? Array.isArray(r) ? r.map(Co) : Object.keys(r).reduce((e, t) => (e[t] = Co(r[t]), e), {}) : r;
26321
  }
26322
- function r1(r, e) {
26323
  const t = r.loader;
26324
- t !== Zc && t !== Rg ? (e.log("[config]: Custom loader detected, cannot enable progressive streaming"), r.progressive = !1) : Wb() && (r.loader = Zc, r.progressive = !0, r.enableSoftwareAES = !0, e.log("[config]: Progressive streaming enabled, using FetchLoader"));
26325
  }
26326
- const dr = 2, a1 = 0.1, o1 = 0.05, l1 = 100;
26327
- class u1 extends Af {
26328
  constructor(e, t) {
26329
  super("gap-controller", e.logger), this.hls = void 0, this.fragmentTracker = void 0, this.media = null, this.mediaSource = void 0, this.nudgeRetry = 0, this.stallReported = !1, this.stalled = null, this.moved = !1, this.seeking = !1, this.buffered = {}, this.lastCurrentTime = 0, this.ended = 0, this.waiting = 0, this.onMediaPlaying = () => {
26330
  this.ended = 0, this.waiting = 0;
@@ -26356,7 +26356,7 @@ class u1 extends Af {
26356
  super.destroy(), this.unregisterListeners(), this.media = this.hls = this.fragmentTracker = null, this.mediaSource = void 0;
26357
  }
26358
  onMediaAttached(e, t) {
26359
- this.setInterval(l1), this.mediaSource = t.mediaSource;
26360
  const i = this.media = t.media;
26361
  dt(i, "playing", this.onMediaPlaying), dt(i, "waiting", this.onMediaWaiting), dt(i, "ended", this.onMediaEnded);
26362
  }
@@ -26594,7 +26594,7 @@ class u1 extends Af {
26594
  return 0;
26595
  }
26596
  }
26597
- const f = Math.max(l + o1, a + a1);
26598
  if (this.warn(`skipping hole, adjusting currentTime from ${a} to ${f}`), this.moved = !0, n.currentTime = f, !(e != null && e.gap)) {
26599
  const g = new Error(`fragment loaded with buffer holes, seeking from ${a} to ${f}`), m = {
26600
  type: j.MEDIA_ERROR,
@@ -26670,7 +26670,7 @@ function ed(r) {
26670
  function Ks(r, e) {
26671
  return e.getAppendedFrag(r, W.MAIN) || e.getPartialFragment(r);
26672
  }
26673
- const c1 = 0.25;
26674
  function Ro() {
26675
  if (!(typeof self > "u"))
26676
  return self.VTTCue || self.TextTrackCue;
@@ -26695,7 +26695,7 @@ const Hs = (() => {
26695
  }
26696
  return Number.POSITIVE_INFINITY;
26697
  })();
26698
- class d1 {
26699
  constructor(e) {
26700
  this.hls = void 0, this.id3Track = null, this.media = null, this.dateRangeCuesAppended = {}, this.removeCues = !0, this.assetCue = void 0, this.onEventCueEnter = () => {
26701
  this.hls && this.hls.trigger(E.EVENT_CUE_ENTER, {});
@@ -26767,7 +26767,7 @@ class d1 {
26767
  continue;
26768
  const u = Wf(s[o].data), c = s[o].pts;
26769
  let d = c + s[o].duration;
26770
- d > Hs && (d = Hs), d - c <= 0 && (d = c + c1);
26771
  for (let f = 0; f < u.length; f++) {
26772
  const g = u[f];
26773
  if (!jf(g)) {
@@ -26918,7 +26918,7 @@ class d1 {
26918
  }
26919
  }
26920
  }
26921
- class h1 {
26922
  constructor(e) {
26923
  this.hls = void 0, this.config = void 0, this.media = null, this.currentTime = 0, this.stallCount = 0, this._latency = null, this._targetLatencyUpdated = !1, this.onTimeupdate = () => {
26924
  const {
@@ -27060,7 +27060,7 @@ class h1 {
27060
  return e === null ? null : e - this.currentTime;
27061
  }
27062
  }
27063
- class f1 extends El {
27064
  constructor(e, t) {
27065
  super(e, "level-controller"), this._levels = [], this._firstLevel = -1, this._maxAutoLevel = -1, this._startLevel = void 0, this.currentLevel = null, this.currentLevelIndex = -1, this.manualLevelIndex = -1, this.steering = void 0, this.onParsedComplete = void 0, this.steering = t, this._registerListeners();
27066
  }
@@ -27431,19 +27431,19 @@ function Fg() {
27431
  const e = wg();
27432
  return !e || e.prototype && typeof e.prototype.appendBuffer == "function" && typeof e.prototype.remove == "function";
27433
  }
27434
- function g1() {
27435
  if (!Fg())
27436
  return !1;
27437
  const r = Mi();
27438
  return typeof (r == null ? void 0 : r.isTypeSupported) == "function" && (["avc1.42E01E,mp4a.40.2", "av01.0.01M.08", "vp09.00.50.08"].some((e) => r.isTypeSupported(is(e, "video"))) || ["mp4a.40.2", "fLaC"].some((e) => r.isTypeSupported(is(e, "audio"))));
27439
  }
27440
- function m1() {
27441
  var r;
27442
  const e = wg();
27443
  return typeof (e == null || (r = e.prototype) == null ? void 0 : r.changeType) == "function";
27444
  }
27445
- const p1 = 100;
27446
- class _1 extends hl {
27447
  constructor(e, t, i) {
27448
  super(e, t, i, "stream-controller", W.MAIN), this.audioCodecSwap = !1, this.level = -1, this._forceStartLoad = !1, this._hasEnoughToStart = !1, this.altAudio = 0, this.audioOnly = !1, this.fragPlaying = null, this.fragLastKbps = 0, this.couldBacktrack = !1, this.backtrackFragment = null, this.audioCodecSwitch = !1, this.videoBuffer = null, this.onMediaPlaying = () => {
27449
  this.tick();
@@ -27482,7 +27482,7 @@ class _1 extends hl {
27482
  lastCurrentTime: i,
27483
  hls: n
27484
  } = this;
27485
- if (this.stopLoad(), this.setInterval(p1), this.level = -1, !this.startFragRequested) {
27486
  let s = n.startLevel;
27487
  s === -1 && (n.config.testBandwidth && this.levels.length > 1 ? (s = 0, this.bitrateTest = !0) : s = n.firstAutoLevel), n.nextLoadLevel = s, this.level = n.loadLevel, this._hasEnoughToStart = !!t;
27488
  }
@@ -27662,7 +27662,7 @@ class _1 extends hl {
27662
  const a = t.levels[s].audioCodec;
27663
  a && (i = i || a.indexOf("mp4a.40.2") !== -1, n = n || a.indexOf("mp4a.40.5") !== -1);
27664
  }
27665
- this.audioCodecSwitch = i && n && !m1(), this.audioCodecSwitch && this.log("Both AAC/HE-AAC audio found in levels; declaring level codec as HE-AAC"), this.levels = t.levels, this.startFragRequested = !1;
27666
  }
27667
  onLevelLoading(e, t) {
27668
  const {
@@ -28167,7 +28167,7 @@ class _1 extends hl {
28167
  return this._forceStartLoad;
28168
  }
28169
  }
28170
- class y1 extends Kt {
28171
  constructor(e, t) {
28172
  super("key-loader", t), this.config = void 0, this.keyIdToKeyInfo = {}, this.emeController = null, this.config = e;
28173
  }
@@ -28383,7 +28383,7 @@ function ja(r, e) {
28383
  let t = r.url;
28384
  return (t === void 0 || t.indexOf("data:") === 0) && (t = e.url), t;
28385
  }
28386
- class v1 {
28387
  constructor(e) {
28388
  this.hls = void 0, this.loaders = /* @__PURE__ */ Object.create(null), this.variableList = null, this.onManifestLoaded = this.checkAutostartLoad, this.hls = e, this.registerListeners();
28389
  }
@@ -28833,7 +28833,7 @@ class kt {
28833
  * Check if MediaSource Extensions are available and isTypeSupported checks pass for any baseline codecs.
28834
  */
28835
  static isSupported() {
28836
- return g1();
28837
  }
28838
  /**
28839
  * Get the MediaSource global used for MSE playback (ManagedMediaSource, MediaSource, or WebKitMediaSource).
@@ -28857,7 +28857,7 @@ class kt {
28857
  * Get the default configuration applied to new instances.
28858
  */
28859
  static get DefaultConfig() {
28860
- return kt.defaultConfig ? kt.defaultConfig : i1;
28861
  }
28862
  /**
28863
  * Replace the default configuration applied to new instances.
@@ -28871,15 +28871,15 @@ class kt {
28871
  */
28872
  constructor(e = {}) {
28873
  this.config = void 0, this.userConfig = void 0, this.logger = void 0, this.coreComponents = void 0, this.networkControllers = void 0, this._emitter = new fl(), this._autoLevelCapping = -1, this._maxHdcpLevel = null, this.abrController = void 0, this.bufferController = void 0, this.capLevelController = void 0, this.latencyController = void 0, this.levelController = void 0, this.streamController = void 0, this.audioStreamController = void 0, this.subtititleStreamController = void 0, this.audioTrackController = void 0, this.subtitleTrackController = void 0, this.interstitialsController = void 0, this.gapController = void 0, this.emeController = void 0, this.cmcdController = void 0, this._media = null, this._url = null, this._sessionId = void 0, this.triggeringException = void 0, this.started = !1;
28874
- const t = this.logger = Dy(e.debug || !1, "Hls instance", e.assetPlayerId), i = this.config = s1(kt.DefaultConfig, e, t);
28875
- this.userConfig = e, i.progressive && r1(i, t);
28876
  const {
28877
  abrController: n,
28878
  bufferController: s,
28879
  capLevelController: a,
28880
  errorController: o,
28881
  fpsController: l
28882
- } = i, u = new o(this), c = this.abrController = new n(this), d = new Ev(this), h = i.interstitialsController, f = h ? this.interstitialsController = new h(this, kt) : null, g = this.bufferController = new s(this, d), m = this.capLevelController = new a(this), p = new l(this), v = new v1(this), _ = i.contentSteeringController, y = _ ? new _(this) : null, S = this.levelController = new f1(this, y), b = new d1(this), A = new y1(this.config, this.logger), T = this.streamController = new _1(this, d, A), D = this.gapController = new u1(this, d);
28883
  m.setStreamController(T), p.setStreamController(T);
28884
  const I = [v, S, T];
28885
  f && I.splice(1, 0, f), y && I.splice(1, 0, y), this.networkControllers = I;
@@ -28888,7 +28888,7 @@ class kt {
28888
  const k = i.audioStreamController;
28889
  k && I.push(this.audioStreamController = new k(this, d, A)), this.subtitleTrackController = this.createController(i.subtitleTrackController, I);
28890
  const R = i.subtitleStreamController;
28891
- R && I.push(this.subtititleStreamController = new R(this, d, A)), this.createController(i.timelineController, x), A.emeController = this.emeController = this.createController(i.emeController, x), this.cmcdController = this.createController(i.cmcdController, x), this.latencyController = this.createController(h1, x), this.coreComponents = x, I.push(u);
28892
  const N = u.onErrorOut;
28893
  typeof N == "function" && this.on(E.ERROR, N, u), this.on(E.MANIFEST_LOADED, v.onManifestLoaded, v);
28894
  }
@@ -29095,7 +29095,7 @@ class kt {
29095
  */
29096
  get sessionId() {
29097
  let e = this._sessionId;
29098
- return e || (e = this._sessionId = ub()), e;
29099
  }
29100
  /**
29101
  * @returns an array of levels (variants) sorted by HDCP-LEVEL, RESOLUTION (height), FRAME-RATE, CODECS, VIDEO-RANGE, and BANDWIDTH
@@ -29524,43 +29524,43 @@ class kt {
29524
  }
29525
  kt.defaultConfig = void 0;
29526
  const {
29527
- SvelteComponent: E1,
29528
- action_destroyer: S1,
29529
- add_render_callback: b1,
29530
  assign: nd,
29531
  attr: Fi,
29532
- binding_callbacks: T1,
29533
  bubble: Ya,
29534
- children: A1,
29535
  claim_element: sd,
29536
- claim_space: D1,
29537
- create_slot: I1,
29538
  detach: qs,
29539
  element: rd,
29540
  exclude_internal_props: ad,
29541
- get_all_dirty_from_scope: x1,
29542
- get_slot_changes: L1,
29543
- get_svelte_dataset: k1,
29544
- init: C1,
29545
  insert_hydration: Xa,
29546
- is_function: R1,
29547
  listen: Ye,
29548
- raf: w1,
29549
- run_all: F1,
29550
- safe_not_equal: P1,
29551
- space: O1,
29552
  src_url_equal: od,
29553
  toggle_class: ld,
29554
- transition_in: $1,
29555
- transition_out: M1,
29556
- update_slot_base: B1
29557
- } = window.__gradio__svelte__internal, { createEventDispatcher: N1 } = window.__gradio__svelte__internal;
29558
- function U1(r) {
29559
  let e, t = '<span class="load-wrap svelte-1pwzuub"><span class="loader svelte-1pwzuub"></span></span>', i, n, s, a, o = !1, l, u = !0, c, d, h, f;
29560
  const g = (
29561
  /*#slots*/
29562
  r[16].default
29563
- ), m = I1(
29564
  g,
29565
  r,
29566
  /*$$scope*/
@@ -29568,20 +29568,20 @@ function U1(r) {
29568
  null
29569
  );
29570
  function p() {
29571
- cancelAnimationFrame(l), n.paused || (l = w1(p), o = !0), r[20].call(n);
29572
  }
29573
  return {
29574
  c() {
29575
- e = rd("div"), e.innerHTML = t, i = O1(), n = rd("video"), m && m.c(), this.h();
29576
  },
29577
  l(v) {
29578
- e = sd(v, "DIV", { class: !0, "data-svelte-h": !0 }), k1(e) !== "svelte-mez4j5" && (e.innerHTML = t), i = D1(v), n = sd(v, "VIDEO", {
29579
  src: !0,
29580
  preload: !0,
29581
  "data-testid": !0,
29582
  crossorigin: !0
29583
  });
29584
- var _ = A1(n);
29585
  m && m.l(_), _.forEach(qs), this.h();
29586
  },
29587
  h() {
@@ -29599,7 +29599,7 @@ function U1(r) {
29599
  r[9], n.loop = /*loop*/
29600
  r[10], Fi(n, "data-testid", a = /*$$props*/
29601
  r[13]["data-testid"]), Fi(n, "crossorigin", "anonymous"), /*duration*/
29602
- r[2] === void 0 && b1(() => (
29603
  /*video_durationchange_handler*/
29604
  r[21].call(n)
29605
  ));
@@ -29703,7 +29703,7 @@ function U1(r) {
29703
  /*video_play_pause_handler*/
29704
  r[22]
29705
  ),
29706
- S1(c = py.call(null, n, { autoplay: (
29707
  /*autoplay*/
29708
  r[8] ?? !1
29709
  ) }))
@@ -29713,19 +29713,19 @@ function U1(r) {
29713
  (!d || _ & /*processingVideo*/
29714
  2048) && ld(e, "hidden", !/*processingVideo*/
29715
  v[11]), m && m.p && (!d || _ & /*$$scope*/
29716
- 32768) && B1(
29717
  m,
29718
  g,
29719
  v,
29720
  /*$$scope*/
29721
  v[15],
29722
- d ? L1(
29723
  g,
29724
  /*$$scope*/
29725
  v[15],
29726
  _,
29727
  null
29728
- ) : x1(
29729
  /*$$scope*/
29730
  v[15]
29731
  ),
@@ -29757,26 +29757,26 @@ function U1(r) {
29757
  ) && (n.currentTime = /*currentTime*/
29758
  v[1]), o = !1, _ & /*paused*/
29759
  8 && u !== (u = /*paused*/
29760
- v[3]) && n[u ? "pause" : "play"](), c && R1(c.update) && _ & /*autoplay*/
29761
  256 && c.update.call(null, { autoplay: (
29762
  /*autoplay*/
29763
  v[8] ?? !1
29764
  ) });
29765
  },
29766
  i(v) {
29767
- d || ($1(m, v), d = !0);
29768
  },
29769
  o(v) {
29770
- M1(m, v), d = !1;
29771
  },
29772
  d(v) {
29773
- v && (qs(e), qs(i), qs(n)), m && m.d(v), r[23](null), h = !1, F1(f);
29774
  }
29775
  };
29776
  }
29777
- function G1(r, e, t) {
29778
  let { $$slots: i = {}, $$scope: n } = e, { src: s = void 0 } = e, { muted: a = void 0 } = e, { playsinline: o = void 0 } = e, { preload: l = void 0 } = e, { autoplay: u = void 0 } = e, { controls: c = void 0 } = e, { currentTime: d = void 0 } = e, { duration: h = void 0 } = e, { paused: f = void 0 } = e, { node: g = void 0 } = e, { loop: m } = e, { is_stream: p } = e, { processingVideo: v = !1 } = e, _ = !1;
29779
- const y = N1();
29780
  function S(R, N, K) {
29781
  if (!(!R || !N) && kt.isSupported() && !_) {
29782
  const U = new kt({
@@ -29824,7 +29824,7 @@ function G1(r, e, t) {
29824
  f = this.paused, t(3, f);
29825
  }
29826
  function k(R) {
29827
- T1[R ? "unshift" : "push"](() => {
29828
  g = R, t(0, g);
29829
  });
29830
  }
@@ -29861,9 +29861,9 @@ function G1(r, e, t) {
29861
  k
29862
  ];
29863
  }
29864
- class zr extends E1 {
29865
  constructor(e) {
29866
- super(), C1(this, e, G1, U1, P1, {
29867
  src: 4,
29868
  muted: 5,
29869
  playsinline: 6,
@@ -29965,14 +29965,14 @@ class C4 extends TransformStream {
29965
  }
29966
  }
29967
  Ai = new WeakMap();
29968
- async function V1(r) {
29969
  return r ? `<div style="display: flex; flex-wrap: wrap; gap: 16px">${(await Promise.all(
29970
  r.map(async ([t, i]) => t === null || !t.url ? "" : await f_(t.url))
29971
  )).map((t) => `<img src="${t}" style="height: 400px" />`).join("")}</div>` : "";
29972
  }
29973
  var Wr = typeof self < "u" ? self : global;
29974
- const ls = typeof navigator < "u", K1 = ls && typeof HTMLImageElement > "u", Rr = !(typeof global > "u" || typeof process > "u" || !process.versions || !process.versions.node), Il = Wr.Buffer, zs = Wr.BigInt, xl = !!Il, H1 = (r) => r;
29975
- function wr(r, e = H1) {
29976
  if (Rr) try {
29977
  return typeof require == "function" ? Promise.resolve(e(require(r))) : import(
29978
  /* webpackIgnore: true */
@@ -29983,7 +29983,7 @@ function wr(r, e = H1) {
29983
  }
29984
  }
29985
  let Ll = Wr.fetch;
29986
- const q1 = (r) => Ll = r;
29987
  if (!Wr.fetch) {
29988
  const r = wr("http", (i) => i), e = wr("https", (i) => i), t = (i, { headers: n } = {}) => new Promise(async (s, a) => {
29989
  let { port: o, hostname: l, pathname: u, protocol: c, search: d } = new URL(i);
@@ -30001,14 +30001,14 @@ if (!Wr.fetch) {
30001
  });
30002
  f.on("error", a), f.end();
30003
  });
30004
- q1(t);
30005
  }
30006
  function ie(r, e, t) {
30007
  return e in r ? Object.defineProperty(r, e, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : r[e] = t, r;
30008
  }
30009
- const Fr = (r) => Pg(r) ? void 0 : r, z1 = (r) => r !== void 0;
30010
  function Pg(r) {
30011
- return r === void 0 || (r instanceof Map ? r.size === 0 : Object.values(r).filter(z1).length === 0);
30012
  }
30013
  function $e(r) {
30014
  let e = new Error(r);
@@ -30163,8 +30163,8 @@ class kl extends Map {
30163
  }
30164
  }
30165
  var Fn = new kl("file parser"), tt = new kl("segment parser"), $n = new kl("file reader");
30166
- function W1(r, e) {
30167
- return typeof r == "string" ? hd(r, e) : ls && !K1 && r instanceof HTMLImageElement ? hd(r.src, e) : r instanceof Uint8Array || r instanceof ArrayBuffer || r instanceof DataView ? new pt(r) : ls && r instanceof Blob ? Oo(r, e, "blob", Bo) : void $e("Invalid input argument");
30168
  }
30169
  function hd(r, e) {
30170
  return (t = r).startsWith("data:") || t.length > 1e4 ? $o(r, e, "base64") : Rr && r.includes("://") ? Oo(r, e, "url", Mo) : Rr ? $o(r, e, "fs") : ls ? Oo(r, e, "url", Mo) : void $e("Invalid input argument");
@@ -30184,7 +30184,7 @@ const Mo = (r) => Ll(r).then((e) => e.arrayBuffer()), Bo = (r) => new Promise((e
30184
  let i = new FileReader();
30185
  i.onloadend = () => e(i.result || new ArrayBuffer()), i.onerror = t, i.readAsArrayBuffer(r);
30186
  });
30187
- class j1 extends Map {
30188
  get tagKeys() {
30189
  return this.allKeys || (this.allKeys = Array.from(this.keys())), this.allKeys;
30190
  }
@@ -30193,7 +30193,7 @@ class j1 extends Map {
30193
  }
30194
  }
30195
  function Ze(r, e, t) {
30196
- let i = new j1();
30197
  for (let [n, s] of t) i.set(n, s);
30198
  if (Array.isArray(e)) for (let n of e) r.set(n, i);
30199
  else r.set(e, i);
@@ -30327,12 +30327,12 @@ function Pr(r, e) {
30327
  for (let t of e) r.add(t);
30328
  }
30329
  ie(Cl, "default", at);
30330
- class Y1 {
30331
  constructor(e) {
30332
  ie(this, "parsers", {}), ie(this, "output", {}), ie(this, "errors", []), ie(this, "pushToErrors", (t) => this.errors.push(t)), this.options = Cl.useCached(e);
30333
  }
30334
  async read(e) {
30335
- this.file = await W1(e, this.options);
30336
  }
30337
  setup() {
30338
  if (this.fileParser) return;
@@ -30362,8 +30362,8 @@ class Y1 {
30362
  return t.close && t.close(), o;
30363
  }
30364
  }
30365
- async function X1(r, e) {
30366
- let t = new Y1(e);
30367
  return await t.read(r), t.parse();
30368
  }
30369
  class jr {
@@ -30441,13 +30441,13 @@ class ei {
30441
  }
30442
  }
30443
  ie(ei, "headerLength", 4), ie(ei, "type", void 0), ie(ei, "multiSegment", !1), ie(ei, "canHandle", () => !1);
30444
- function Q1(r) {
30445
  return r === 192 || r === 194 || r === 196 || r === 219 || r === 221 || r === 218 || r === 254;
30446
  }
30447
- function Z1(r) {
30448
  return r >= 224 && r <= 239;
30449
  }
30450
- function J1(r, e, t) {
30451
  for (let [i, n] of tt) if (n.canHandle(r, e, t)) return i;
30452
  }
30453
  class md extends jr {
@@ -30481,10 +30481,10 @@ class md extends jr {
30481
  t -= 2;
30482
  let i, n, s, a, o, l, { file: u, findAll: c, wanted: d, remaining: h, options: f } = this;
30483
  for (; e < t; e++) if (u.getUint8(e) === 255) {
30484
- if (i = u.getUint8(e + 1), Z1(i)) {
30485
- if (n = u.getUint16(e + 2), s = J1(u, e, n), s && d.has(s) && (a = tt.get(s), o = a.findPosition(u, e), l = f[s], o.type = s, this.appSegments.push(o), !c && (a.multiSegment && l.multiSegment ? (this.unfinishedMultiSegment = o.chunkNumber < o.chunkCount, this.unfinishedMultiSegment || h.delete(s)) : h.delete(s), h.size === 0))) break;
30486
  f.recordUnknownSegments && (o = ei.findPosition(u, e), o.marker = i, this.unknownSegments.push(o)), e += n + 1;
30487
- } else if (Q1(i)) {
30488
  if (n = u.getUint16(e + 2), i === 218 && f.stopAfterSos !== !1) return;
30489
  f.recordJpegSegments && this.jpegSegments.push({ offset: e, length: n, marker: i }), e += n + 1;
30490
  }
@@ -31504,7 +31504,7 @@ function ET(r) {
31504
  s && s.l(g), g.forEach(X), f.forEach(X), this.h();
31505
  },
31506
  h() {
31507
- ae(i, "class", "grid-wrap svelte-1crbckc"), mt(
31508
  i,
31509
  "minimal",
31510
  /*mode*/
@@ -31524,7 +31524,7 @@ function ET(r) {
31524
  /*height*/
31525
  r[6] !== "auto" ? `${/*height*/
31526
  r[6]}px` : null
31527
- ), ae(e, "class", "gallery-container svelte-1crbckc");
31528
  },
31529
  m(h, f) {
31530
  ye(h, e, f), o && o.m(e, null), ue(e, t), ue(e, i), ~n && u[n].m(i, null), r[63](e), a = !0;
@@ -31670,12 +31670,12 @@ function Pd(r) {
31670
  x.forEach(X), c = ke(D), b && b.l(D), D.forEach(X), this.h();
31671
  },
31672
  h() {
31673
- ae(n, "class", "media-container svelte-1crbckc"), ae(u, "class", "thumbnails scroll-hide svelte-1crbckc"), gt(
31674
  u,
31675
  "justify-content",
31676
  /*thumbnails_overflow*/
31677
  r[24] ? "flex-start" : "center"
31678
- ), ae(e, "class", "preview svelte-1crbckc"), ae(e, "aria-label", "Image Preview"), ae(e, "tabindex", "-1"), mt(
31679
  e,
31680
  "minimal",
31681
  /*mode*/
@@ -31902,7 +31902,7 @@ function Bd(r) {
31902
  /*value*/
31903
  r[4]
31904
  ),
31905
- formatter: V1
31906
  }
31907
  }), t.$on(
31908
  "share",
@@ -32135,7 +32135,7 @@ function Ud(r) {
32135
  i = nn(s, t), s.forEach(X), this.h();
32136
  },
32137
  h() {
32138
- ae(e, "class", "caption svelte-1crbckc");
32139
  },
32140
  m(n, s) {
32141
  ye(n, e, s), ue(e, i);
@@ -32277,7 +32277,7 @@ function Gd(r) {
32277
  i.l(v), n = ke(v), v.forEach(X), this.h();
32278
  },
32279
  h() {
32280
- ae(e, "class", "thumbnail-item thumbnail-small svelte-1crbckc"), ae(e, "aria-label", s = "Thumbnail " + /*i*/
32281
  (r[75] + 1) + " of " + /*resolved_value*/
32282
  r[16].length), mt(
32283
  e,
@@ -32344,7 +32344,7 @@ function Vd(r) {
32344
  i = he(v, "BUTTON", { class: !0, "data-svelte-h": !0 }), $r(i) !== "svelte-1irq3m4" && (i.textContent = n), s = ke(v), a = he(v, "H3", { class: !0, "data-svelte-h": !0 }), $r(a) !== "svelte-1tc7pig" && (a.textContent = o), l = ke(v), g.l(v), v.forEach(X), p.forEach(X), this.h();
32345
  },
32346
  h() {
32347
- ae(i, "class", "close-button svelte-1crbckc"), ae(a, "class", "popup-title svelte-1crbckc"), ae(t, "class", "popup-content svelte-1crbckc"), ae(e, "class", "metadata-popup svelte-1crbckc"), ae(e, "role", "presentation"), gt(e, "width", typeof /*popup_metadata_width*/
32348
  r[15] == "number" ? `${/*popup_metadata_width*/
32349
  r[15]}px` : (
32350
  /*popup_metadata_width*/
@@ -32389,7 +32389,7 @@ function xT(r) {
32389
  e = he(i, "P", { class: !0, "data-svelte-h": !0 }), $r(e) !== "svelte-1qb2m81" && (e.textContent = t), this.h();
32390
  },
32391
  h() {
32392
- ae(e, "class", "no-metadata-message svelte-1crbckc");
32393
  },
32394
  m(i, n) {
32395
  ye(i, e, n);
@@ -32426,7 +32426,7 @@ function LT(r) {
32426
  g.forEach(X), f.forEach(X), h.forEach(X), n = ke(d), s = he(d, "BUTTON", { class: !0, "data-svelte-h": !0 }), $r(s) !== "svelte-o01tbk" && (s.textContent = a), this.h();
32427
  },
32428
  h() {
32429
- ae(t, "class", "metadata-table svelte-1crbckc"), ae(e, "class", "metadata-table-container svelte-1crbckc"), ae(s, "class", "load-metadata-button svelte-1crbckc");
32430
  },
32431
  m(d, h) {
32432
  ye(d, e, h), ue(e, t), ue(t, i);
@@ -32483,7 +32483,7 @@ function Kd(r) {
32483
  l = nn(f, o), f.forEach(X), u = ke(d), d.forEach(X), this.h();
32484
  },
32485
  h() {
32486
- ae(t, "class", "metadata-label svelte-1crbckc"), ae(a, "class", "metadata-value svelte-1crbckc");
32487
  },
32488
  m(c, d) {
32489
  ye(c, e, d), ue(e, t), ue(t, n), ue(e, s), ue(e, a), ue(a, l), ue(e, u);
@@ -32555,7 +32555,7 @@ function kT(r) {
32555
  a.l(b), o = ke(b), m && m.l(b), b.forEach(X), S.forEach(X), l = ke(y), p && p.l(y), y.forEach(X), _.forEach(X), this.h();
32556
  },
32557
  h() {
32558
- ae(n, "class", "thumbnail-item thumbnail-lg svelte-1crbckc"), ae(n, "aria-label", "View single item in preview mode"), ae(i, "class", "gallery-item svelte-1crbckc"), ae(t, "class", "gallery-item-with-name svelte-1crbckc"), ae(e, "class", "single-item-wrapper svelte-1crbckc"), gt(
32559
  e,
32560
  "--object-fit",
32561
  /*object_fit*/
@@ -32620,7 +32620,7 @@ function CT(r) {
32620
  o.forEach(X), this.h();
32621
  },
32622
  h() {
32623
- ae(e, "class", "grid-container svelte-1crbckc"), mt(
32624
  e,
32625
  "pt-6",
32626
  /*show_label*/
@@ -32812,7 +32812,7 @@ function qd(r) {
32812
  i = nn(s, t), s.forEach(X), this.h();
32813
  },
32814
  h() {
32815
- ae(e, "class", "caption-label svelte-1crbckc");
32816
  },
32817
  m(n, s) {
32818
  ye(n, e, s), ue(e, i);
@@ -32842,7 +32842,7 @@ function zd(r) {
32842
  i = nn(a, t), a.forEach(X), this.h();
32843
  },
32844
  h() {
32845
- ae(e, "class", "thumbnail-filename svelte-1crbckc"), ae(e, "title", n = /*file_name*/
32846
  r[73]);
32847
  },
32848
  m(s, a) {
@@ -32964,7 +32964,7 @@ function Wd(r) {
32964
  i = nn(s, t), s.forEach(X), this.h();
32965
  },
32966
  h() {
32967
- ae(e, "class", "caption-label svelte-1crbckc");
32968
  },
32969
  m(n, s) {
32970
  ye(n, e, s), ue(e, i);
@@ -32994,7 +32994,7 @@ function jd(r) {
32994
  i = nn(a, t), a.forEach(X), this.h();
32995
  },
32996
  h() {
32997
- ae(e, "class", "thumbnail-filename svelte-1crbckc"), ae(e, "title", n = /*file_name*/
32998
  r[73]);
32999
  },
33000
  m(s, a) {
@@ -33051,7 +33051,7 @@ function Yd(r) {
33051
  s.l(A), a = ke(A), p && p.l(A), A.forEach(X), b.forEach(X), l = ke(S), _ && _.l(S), u = ke(S), S.forEach(X), this.h();
33052
  },
33053
  h() {
33054
- ae(i, "class", "thumbnail-item thumbnail-lg svelte-1crbckc"), ae(i, "aria-label", o = "Thumbnail " + /*i*/
33055
  (r[75] + 1) + " of " + /*resolved_value*/
33056
  r[16].length), mt(
33057
  i,
@@ -33059,7 +33059,7 @@ function Yd(r) {
33059
  /*selected_index*/
33060
  r[0] === /*i*/
33061
  r[75]
33062
- ), ae(t, "class", "gallery-item svelte-1crbckc"), ae(e, "class", "gallery-item-with-name svelte-1crbckc");
33063
  },
33064
  m(y, S) {
33065
  ye(y, e, S), ue(e, t), ue(t, i), g[n].m(i, null), ue(i, a), p && p.m(i, null), ue(e, l), _ && _.m(e, null), ue(e, u), c = !0, d || (h = Ni(i, "click", v), d = !0);
@@ -33211,7 +33211,7 @@ function MT(r, e, t) {
33211
  if (!(P != null && P.url)) return null;
33212
  if (P.url.toLowerCase().endsWith(".png") || P.url.toLowerCase().endsWith(".jpg") || P.url.toLowerCase().endsWith(".jpeg"))
33213
  try {
33214
- const st = yield X1(P.url, !0);
33215
  let rt = {};
33216
  if (st)
33217
  for (const [Ft, qt] of Object.entries(st))
 
20125
  return `${XS}=${t}`;
20126
  }
20127
  const Nc = /CMCD=[^&#]+/;
20128
+ function e1(r, e, t) {
20129
  const i = JS(e, t);
20130
  if (!i)
20131
  return r;
 
20134
  const n = r.includes("?") ? "&" : "?";
20135
  return `${r}${n}${i}`;
20136
  }
20137
+ class t1 {
20138
  constructor(e) {
20139
  this.hls = void 0, this.config = void 0, this.media = void 0, this.sid = void 0, this.cid = void 0, this.useHeaders = !1, this.includeKeys = void 0, this.initialized = !1, this.starved = !1, this.buffering = !0, this.audioBuffer = void 0, this.videoBuffer = void 0, this.onWaiting = () => {
20140
  this.initialized && (this.starved = !0), this.buffering = !0;
 
20219
  const s = {
20220
  baseUrl: e.url
20221
  };
20222
+ this.useHeaders ? (e.headers || (e.headers = {}), YS(e.headers, t, s)) : e.url = e1(e.url, t, s);
20223
  }
20224
  getNextFrag(e) {
20225
  var t;
 
20342
  };
20343
  }
20344
  }
20345
+ const i1 = 3e5;
20346
+ class n1 extends Kt {
20347
  constructor(e) {
20348
  super("content-steering", e.logger), this.hls = void 0, this.loader = null, this.uri = null, this.pathwayId = ".", this._pathwayPriority = null, this.timeToLoad = 300, this.reloadTimer = -1, this.updated = 0, this.started = !1, this.enabled = !0, this.levels = null, this.audioTracks = null, this.subtitleTracks = null, this.penalizedPathways = {}, this.hls = e, this.registerListeners();
20349
  }
 
20436
  let t;
20437
  const i = this.penalizedPathways, n = performance.now();
20438
  Object.keys(i).forEach((s) => {
20439
+ n - i[s] > i1 && delete i[s];
20440
  });
20441
  for (let s = 0; s < e.length; s++) {
20442
  const a = e[s];
 
20821
  mediaKeySessions: t
20822
  } = this;
20823
  for (let i = 0; i < t.length; i++) {
20824
+ const n = s1(e, t[i]);
20825
  if (n)
20826
  return n;
20827
  }
 
21256
  throw new Error("keyId is null");
21257
  return ot(r.keyId);
21258
  }
21259
+ function s1(r, e) {
21260
  if (r.keyId && e.mediaKeysSession.keyStatuses.has(r.keyId))
21261
  return e.mediaKeysSession.keyStatuses.get(r.keyId);
21262
  if (r.matches(e.decryptdata))
 
21276
  decryptdata: e
21277
  }, t ? "HDCP level output restricted" : `key status changed to "${r}"`);
21278
  }
21279
+ class r1 {
21280
  constructor(e) {
21281
  this.hls = void 0, this.isVideoPlaybackQualityAvailable = !1, this.timer = void 0, this.media = null, this.lastTime = void 0, this.lastDroppedFrames = 0, this.lastDecodedFrames = 0, this.streamController = void 0, this.hls = e, this.registerListeners();
21282
  }
 
21368
  function Lo(r, e, t, i) {
21369
  const n = r.mode;
21370
  if (n === "disabled" && (r.mode = "hidden"), r.cues && r.cues.length > 0) {
21371
+ const s = o1(r.cues, e, t);
21372
  for (let a = 0; a < s.length; a++)
21373
  (!i || i(s[a])) && r.removeCue(s[a]);
21374
  }
21375
  n === "disabled" && (r.mode = n);
21376
  }
21377
+ function a1(r, e) {
21378
  if (e <= r[0].startTime)
21379
  return 0;
21380
  const t = r.length - 1;
 
21390
  return s;
21391
  return r[i].startTime - e < e - r[n].startTime ? i : n;
21392
  }
21393
+ function o1(r, e, t) {
21394
+ const i = [], n = a1(r, e);
21395
  if (n > -1)
21396
  for (let s = n, a = r.length; s < a; s++) {
21397
  const o = r[s];
 
21410
  }
21411
  return e;
21412
  }
21413
+ class l1 extends El {
21414
  constructor(e) {
21415
  super(e, "subtitle-track-controller"), this.media = null, this.tracks = [], this.groupIds = null, this.tracksInGroup = [], this.trackId = -1, this.currentTrack = null, this.selectDefaultTrack = !0, this.queuedDefaultTrack = -1, this.useTextTrackPolling = !1, this.subtitlePollingInterval = -1, this._subtitleDisplay = !0, this.asyncPollTrackChange = () => this.pollTrackChange(0), this.onTextTracksChanged = () => {
21416
  if (this.useTextTrackPolling || self.clearInterval(this.subtitlePollingInterval), !this.media || !this.hls.config.renderTextTracksNatively)
 
21681
  this.loadPlaylist(d);
21682
  }
21683
  }
21684
+ function u1() {
21685
  try {
21686
  return crypto.randomUUID();
21687
  } catch {
 
21707
  let Cr = /* @__PURE__ */ function(r) {
21708
  return r[r.Point = 0] = "Point", r[r.Range = 1] = "Range", r;
21709
  }({});
21710
+ function c1(r, e, t) {
21711
  return `${r.identifier}-${t + 1}-${Qn(e)}`;
21712
  }
21713
+ class d1 {
21714
  constructor(e, t) {
21715
  this.base = void 0, this._duration = null, this._timelineStart = null, this.appendInPlaceDisabled = void 0, this.appendInPlaceStarted = void 0, this.dateRange = void 0, this.hasPlayed = !1, this.cumulativeDuration = 0, this.resumeOffset = NaN, this.playoutLimit = NaN, this.restrictions = {
21716
  skip: !1,
 
21829
  return this.assetList.length > 0 || this.assetListResponse !== null;
21830
  }
21831
  toString() {
21832
+ return h1(this);
21833
  }
21834
  }
21835
  function Ba(r, e) {
 
21844
  var t;
21845
  return e;
21846
  }
21847
+ function h1(r) {
21848
  return `["${r.identifier}" ${r.cue.pre ? "<pre>" : r.cue.post ? "<post>" : ""}${r.timelineStart.toFixed(2)}-${r.resumeTime.toFixed(2)}]`;
21849
  }
21850
  function bn(r) {
21851
  const e = r.timelineStart, t = r.duration || 0;
21852
  return `["${r.identifier}" ${e.toFixed(2)}-${(e + t).toFixed(2)}]`;
21853
  }
21854
+ class f1 {
21855
  constructor(e, t, i, n) {
21856
  this.hls = void 0, this.interstitial = void 0, this.assetItem = void 0, this.tracks = null, this.hasDetails = !1, this.mediaAttached = null, this._currentTime = void 0, this._bufferedEosTime = void 0, this.checkPlayout = () => {
21857
  this.reachedPlayout(this.currentTime) && this.hls && this.hls.trigger(E.PLAYOUT_LIMIT_REACHED, {});
 
22024
  }
22025
  }
22026
  const Vc = 0.033;
22027
+ class g1 extends Kt {
22028
  constructor(e, t) {
22029
  super("interstitials-sched", t), this.onScheduleUpdate = void 0, this.eventMap = {}, this.events = null, this.items = null, this.durations = {
22030
  primary: 0,
 
22157
  const o = s[a], l = e[o];
22158
  if (l.isInterstitial) {
22159
  let u = this.eventMap[o];
22160
+ u ? u.setDateRange(l) : (u = new d1(l, t), this.eventMap[o] = u, i === !1 && (u.appendInPlace = i)), n.push(u);
22161
  }
22162
  }
22163
  return n;
 
22322
  function Yt(r) {
22323
  return `[${r.event ? '"' + r.event.identifier + '"' : "primary"}: ${r.start.toFixed(2)}-${r.end.toFixed(2)}]`;
22324
  }
22325
+ class m1 {
22326
  constructor(e) {
22327
  this.hls = void 0, this.hls = e;
22328
  }
 
22396
  function Ns(r, e) {
22397
  return `[${r}] Advancing timeline position to ${e}`;
22398
  }
22399
+ class p1 extends Kt {
22400
  constructor(e, t) {
22401
  super("interstitials", e.logger), this.HlsPlayerClass = void 0, this.hls = void 0, this.assetListLoader = void 0, this.mediaSelection = null, this.altSelection = null, this.media = null, this.detachedData = null, this.requiredTracks = null, this.manager = null, this.playerQueue = [], this.bufferedPos = -1, this.timelinePos = -1, this.schedule = void 0, this.playingItem = null, this.bufferingItem = null, this.waitingItem = null, this.endedItem = null, this.playingAsset = null, this.endedAsset = null, this.bufferingAsset = null, this.shouldPlay = !1, this.onPlay = () => {
22402
  this.shouldPlay = !0;
 
22500
  }
22501
  a && this.trimInPlace(h, a), g && f !== h && this.trimInPlace(f, g), this.checkBuffer();
22502
  }
22503
+ }, this.hls = e, this.HlsPlayerClass = t, this.assetListLoader = new m1(e), this.schedule = new g1(this.onScheduleUpdate, e.logger), this.registerListeners();
22504
  }
22505
  registerListeners() {
22506
  const e = this.hls;
 
23376
  createAsset(e, t, i, n, s, a) {
23377
  const o = {
23378
  parentIdentifier: e.identifier,
23379
+ identifier: c1(e, a, t),
23380
  duration: s,
23381
  startOffset: i,
23382
  timelineStart: n,
 
23418
  f != null && f.sessionId && f.contentId && (h.cmcd = Se({}, f, {
23419
  contentId: Qn(t.uri)
23420
  })), this.getAssetPlayer(d) && this.warn(`Duplicate date range identifier ${e} and asset ${d}`);
23421
+ const g = new f1(this.HlsPlayerClass, h, e, t);
23422
  this.playerQueue.push(g), e.assetList[i] = t;
23423
  let m = !0;
23424
  const p = (S) => {
 
23693
  }
23694
  }
23695
  const Hc = 500;
23696
+ class _1 extends hl {
23697
  constructor(e, t, i) {
23698
  super(e, t, i, "subtitle-stream-controller", W.SUBTITLE), this.currentTrackId = -1, this.tracksBuffered = [], this.mainDetails = null, this.registerListeners();
23699
  }
 
23913
  Oe(e) ? super.loadFragment(e, t, i) : this._loadInitSegment(e, t);
23914
  }
23915
  get mediaBufferTimeRanges() {
23916
+ return new y1(this.tracksBuffered[this.currentTrackId] || []);
23917
  }
23918
  }
23919
+ class y1 {
23920
  constructor(e) {
23921
  this.buffered = void 0;
23922
  const t = (i, n, s) => {
 
23937
  };
23938
  }
23939
  }
23940
+ const v1 = {
23941
  42: 225,
23942
  // lowercase a, acute accent
23943
  92: 233,
 
24125
  // Box drawings heavy up and right
24126
  207: 9499
24127
  // Box drawings heavy up and left
24128
+ }, bg = (r) => String.fromCharCode(v1[r] || r), Jt = 15, vi = 100, E1 = {
24129
  17: 1,
24130
  18: 3,
24131
  21: 5,
 
24134
  16: 11,
24135
  19: 12,
24136
  20: 14
24137
+ }, S1 = {
24138
  17: 2,
24139
  18: 4,
24140
  21: 6,
 
24142
  23: 10,
24143
  19: 13,
24144
  20: 15
24145
+ }, b1 = {
24146
  25: 1,
24147
  26: 3,
24148
  29: 5,
 
24151
  24: 11,
24152
  27: 12,
24153
  28: 14
24154
+ }, T1 = {
24155
  25: 2,
24156
  26: 4,
24157
  29: 6,
 
24159
  31: 10,
24160
  27: 13,
24161
  28: 15
24162
+ }, A1 = ["white", "green", "blue", "cyan", "red", "yellow", "magenta", "black", "transparent"];
24163
+ class D1 {
24164
  constructor() {
24165
  this.time = null, this.verboseLevel = 0;
24166
  }
 
24204
  return "color=" + this.foreground + ", underline=" + this.underline + ", italics=" + this.italics + ", background=" + this.background + ", flash=" + this.flash;
24205
  }
24206
  }
24207
+ class I1 {
24208
  constructor() {
24209
  this.uchar = " ", this.penState = new Tg();
24210
  }
 
24227
  return this.uchar === " " && this.penState.isDefault();
24228
  }
24229
  }
24230
+ class x1 {
24231
  constructor(e) {
24232
  this.chars = [], this.pos = 0, this.currPenState = new Tg(), this.cueStartTime = null, this.logger = void 0;
24233
  for (let t = 0; t < vi; t++)
24234
+ this.chars.push(new I1());
24235
  this.logger = e;
24236
  }
24237
  equals(e) {
 
24312
  constructor(e) {
24313
  this.rows = [], this.currRow = Jt - 1, this.nrRollUpRows = null, this.lastOutputScreen = null, this.logger = void 0;
24314
  for (let t = 0; t < Jt; t++)
24315
+ this.rows.push(new x1(e));
24316
  this.logger = e;
24317
  }
24318
  reset() {
 
24527
  }
24528
  class zc {
24529
  constructor(e, t, i) {
24530
+ this.channels = void 0, this.currentChannel = 0, this.cmdHistory = k1(), this.logger = void 0;
24531
+ const n = this.logger = new D1();
24532
  this.channels = [null, new qc(e, t, n), new qc(e + 1, i, n)];
24533
  }
24534
  getHandler(e) {
 
24550
  this.logger.log(3, () => "[" + Wi([t[i], t[i + 1]]) + "] -> (" + Wi([n, s]) + ")");
24551
  const l = this.cmdHistory;
24552
  if (n >= 16 && n <= 31) {
24553
+ if (L1(n, s, l)) {
24554
  Us(null, null, l), this.logger.log(3, () => "Repeated command (" + Wi([n, s]) + ") is dropped");
24555
  continue;
24556
  }
 
24598
  if (!(n || s))
24599
  return !1;
24600
  const a = e <= 23 ? 1 : 2;
24601
+ t >= 64 && t <= 95 ? i = a === 1 ? E1[e] : b1[e] : i = a === 1 ? S1[e] : T1[e];
24602
  const o = this.channels[a];
24603
  return o ? (o.setPAC(this.interpretPAC(i, t)), this.currentChannel = a, !0) : !1;
24604
  }
 
24639
  return !1;
24640
  let s;
24641
  const a = {};
24642
+ e === 16 || e === 24 ? (s = Math.floor((t - 32) / 2), a.background = A1[s], t % 2 === 1 && (a.background = a.background + "_semi")) : t === 45 ? a.background = "transparent" : (a.foreground = "black", t === 47 && (a.underline = !0));
24643
  const o = e <= 23 ? 1 : 2;
24644
  return this.channels[o].setBkgData(a), !0;
24645
  }
 
24666
  function Us(r, e, t) {
24667
  t.a = r, t.b = e;
24668
  }
24669
+ function L1(r, e, t) {
24670
  return t.a === r && t.b === e;
24671
  }
24672
+ function k1() {
24673
  return {
24674
  a: null,
24675
  b: null
 
24832
  return self.WebVTT.convertCueToDOMTree(self, this.text);
24833
  }, a;
24834
  }();
24835
+ class C1 {
24836
  decode(e, t) {
24837
  if (!e)
24838
  return "";
 
24848
  const t = r.match(/^(?:(\d+):)?(\d{2}):(\d{2})(\.\d+)?/);
24849
  return t ? parseFloat(t[2]) > 59 ? e(t[2], t[3], 0, t[4]) : e(t[1], t[2], t[3], t[4]) : null;
24850
  }
24851
+ class R1 {
24852
  constructor() {
24853
  this.values = /* @__PURE__ */ Object.create(null);
24854
  }
 
24903
  }
24904
  }
24905
  const ko = new Al(0, 0, ""), Gs = ko.align === "middle" ? "middle" : "center";
24906
+ function w1(r, e, t) {
24907
  const i = r;
24908
  function n() {
24909
  const o = Ag(r);
 
24912
  return r = r.replace(/^[^\sa-zA-Z-]+/, ""), o;
24913
  }
24914
  function s(o, l) {
24915
+ const u = new R1();
24916
  Dg(o, function(h, f) {
24917
  let g;
24918
  switch (h) {
 
24956
  return r.replace(/<br(?: \/)?>/gi, `
24957
  `);
24958
  }
24959
+ class F1 {
24960
  constructor() {
24961
+ this.state = "INITIAL", this.buffer = "", this.decoder = new C1(), this.regionList = [], this.cue = null, this.oncue = void 0, this.onparsingerror = void 0, this.onflush = void 0;
24962
  }
24963
  parse(e) {
24964
  const t = this;
 
25017
  continue;
25018
  }
25019
  try {
25020
+ w1(s, t.cue, t.regionList);
25021
  } catch {
25022
  t.cue = null, t.state = "BADCUE";
25023
  continue;
 
25059
  return e.onflush && e.onflush(), this;
25060
  }
25061
  }
25062
+ const P1 = /\r\n|\n\r|\n|\r/g, Ga = function(e, t, i = 0) {
25063
  return e.slice(i, i + t.length) === t;
25064
+ }, O1 = function(e) {
25065
  let t = parseInt(e.slice(-3));
25066
  const i = parseInt(e.slice(-6, -4)), n = parseInt(e.slice(-9, -7)), s = e.length > 9 ? parseInt(e.substring(0, e.indexOf(":"))) : 0;
25067
  if (!H(t) || !H(i) || !H(n) || !H(s))
 
25071
  function Dl(r, e, t) {
25072
  return Qn(r.toString()) + Qn(e.toString()) + Qn(t);
25073
  }
25074
+ const $1 = function(e, t, i) {
25075
  let n = e[t], s = e[n.prevCC];
25076
  if (!s || !s.new && n.new) {
25077
  e.ccOffset = e.presentationOffset = n.start, n.new = !1;
 
25083
  }
25084
  e.presentationOffset = i;
25085
  };
25086
+ function M1(r, e, t, i, n, s, a) {
25087
+ const o = new F1(), l = Rt(new Uint8Array(r)).trim().replace(P1, `
25088
  `).split(`
25089
  `), u = [], c = e ? KE(e.baseTime, e.timescale) : 0;
25090
  let d = "00:00.000", h = 0, f = 0, g, m = !0;
 
25092
  const v = t[i];
25093
  let _ = t.ccOffset;
25094
  const y = (h - c) / 9e4;
25095
+ if (v != null && v.new && (f !== void 0 ? _ = t.ccOffset = v.start : $1(t, i, y)), y) {
25096
  if (!e) {
25097
  g = new Error("Missing initPTS for VTT MPEGTS");
25098
  return;
 
25118
  Ga(v, "LOCAL:") ? d = v.slice(6) : Ga(v, "MPEGTS:") && (h = parseInt(v.slice(7)));
25119
  });
25120
  try {
25121
+ f = O1(d) / 1e3;
25122
  } catch (v) {
25123
  g = v;
25124
  }
 
25128
  `);
25129
  }), o.flush();
25130
  }
25131
+ const Va = "stpp.ttml.im1t", xg = /^(\d{2,}):(\d{2}):(\d{2}):(\d{2})\.?(\d+)?$/, Lg = /^(\d*(?:\.\d*)?)(h|m|s|ms|f|t)$/, B1 = {
25132
  left: "start",
25133
  center: "center",
25134
  right: "end",
 
25143
  }
25144
  const s = n.map((o) => Rt(o)), a = VE(e.baseTime, 1, e.timescale);
25145
  try {
25146
+ s.forEach((o) => t(N1(o, a)));
25147
  } catch (o) {
25148
  i(o);
25149
  }
25150
  }
25151
+ function N1(r, e) {
25152
  const n = new DOMParser().parseFromString(r, "text/xml").getElementsByTagName("tt")[0];
25153
  if (!n)
25154
  throw new Error("Invalid ttml");
 
25173
  }
25174
  const p = new Al(f - e, m - e, h);
25175
  p.id = Dl(p.startTime, p.endTime, p.text);
25176
+ const v = u[d.getAttribute("region")], _ = l[d.getAttribute("style")], y = U1(v, _, l), {
25177
  textAlign: S
25178
  } = y;
25179
  if (S) {
25180
+ const b = B1[S];
25181
  b && (p.lineAlign = b), p.align = S;
25182
  }
25183
  return Se(p, y), p;
 
25200
  ` : (s = i.childNodes) != null && s.length ? kg(i, e) : e ? t + i.textContent.trim().replace(/\s+/g, " ") : t + i.textContent;
25201
  }, "");
25202
  }
25203
+ function U1(r, e, t) {
25204
  const i = "http://www.w3.org/ns/ttml#styling";
25205
  let n = null;
25206
  const s = [
 
25232
  if (!r)
25233
  return null;
25234
  let t = Ag(r);
25235
+ return t === null && (xg.test(r) ? t = G1(r, e) : Lg.test(r) && (t = V1(r, e))), t;
25236
  }
25237
+ function G1(r, e) {
25238
  const t = xg.exec(r), i = (t[4] | 0) + (t[5] | 0) / e.subFrameRate;
25239
  return (t[1] | 0) * 3600 + (t[2] | 0) * 60 + (t[3] | 0) + i / e.frameRate;
25240
  }
25241
+ function V1(r, e) {
25242
  const t = Lg.exec(r), i = Number(t[1]);
25243
  switch (t[2]) {
25244
  case "h":
 
25268
  this.cueRanges = [], this.startTime = null;
25269
  }
25270
  }
25271
+ class K1 {
25272
  constructor(e) {
25273
  this.hls = void 0, this.media = null, this.config = void 0, this.enabled = !0, this.Cues = void 0, this.textTracks = [], this.tracks = [], this.initPTS = [], this.unparsedVttFrags = [], this.captionsTracks = {}, this.nonNativeCaptionsTracks = {}, this.cea608Parser1 = void 0, this.cea608Parser2 = void 0, this.lastCc = -1, this.lastSn = -1, this.lastPartIndex = -1, this.prevCC = -1, this.vttCCs = Qc(), this.captionsProperties = void 0, this.hls = e, this.config = e.config, this.Cues = e.config.cueHandler, this.captionsProperties = {
25274
  textTrack1: {
 
25302
  addCues(e, t, i, n, s) {
25303
  let a = !1;
25304
  for (let o = s.length; o--; ) {
25305
+ const l = s[o], u = H1(l[0], l[1], t, i);
25306
  if (u >= 0 && (l[0] = Math.min(l[0], t), l[1] = Math.max(l[1], i), a = !0, u / (i - t) > 0.5))
25307
  return;
25308
  }
 
25551
  return;
25552
  }
25553
  const l = this.hls, u = (t = i.initSegment) != null && t.data ? Gt(i.initSegment.data, new Uint8Array(n)).buffer : n;
25554
+ M1(u, this.initPTS[i.cc], this.vttCCs, i.cc, i.start, (c) => {
25555
  this._appendCues(c, i.level), l.trigger(E.SUBTITLE_FRAG_PROCESSED, {
25556
  success: !0,
25557
  frag: i
 
25663
  function Xc(r, e) {
25664
  return !!r && r.kind === Cg(e) && Ao(e, r);
25665
  }
25666
+ function H1(r, e, t, i) {
25667
  return Math.min(e, i) - Math.max(r, t);
25668
  }
25669
  function Qc() {
 
25677
  }
25678
  };
25679
  }
25680
+ const q1 = /\s/, z1 = {
25681
  newCue(r, e, t, i) {
25682
  const n = [];
25683
  let s, a, o, l, u;
 
25686
  if (s = i.rows[h], o = !0, l = 0, u = "", !s.isEmpty()) {
25687
  var d;
25688
  for (let m = 0; m < s.chars.length; m++)
25689
+ q1.test(s.chars[m].uchar) && o ? l++ : (u += s.chars[m].uchar, o = !1);
25690
  s.cueStartTime = e, e === t && (t += 1e-4), l >= 16 ? l-- : l++;
25691
  const f = Ig(u.trim()), g = Dl(e, t, f);
25692
  r != null && (d = r.cues) != null && d.getCueById(g) || (a = new c(e, t, f), a.id = g, a.line = h + 1, a.align = "left", a.position = 10 + Math.min(80, Math.floor(l * 8 / 32) * 10), n.push(a));
 
25694
  return r && n.length && (n.sort((h, f) => h.line === "auto" || f.line === "auto" ? 0 : h.line > 8 && f.line > 8 ? f.line - h.line : h.line - f.line), n.forEach((h) => Eg(r, h))), n;
25695
  }
25696
  };
25697
+ function W1() {
25698
  if (
25699
  // @ts-ignore
25700
  self.fetch && self.AbortController && self.ReadableStream && self.Request
 
25705
  }
25706
  return !1;
25707
  }
25708
+ const j1 = /(\d+)-(\d+)\/(\d+)/;
25709
  class Zc {
25710
  constructor(e) {
25711
+ this.fetchSetup = void 0, this.requestTimeout = void 0, this.request = null, this.response = null, this.controller = void 0, this.context = null, this.config = null, this.callbacks = null, this.stats = void 0, this.loader = null, this.fetchSetup = e.fetchSetup || Z1, this.controller = new self.AbortController(), this.stats = new nl();
25712
  }
25713
  destroy() {
25714
  this.loader = this.callbacks = this.context = this.config = this.request = null, this.abortInternal(), this.response = null, this.fetchSetup = this.controller = this.stats = null;
 
25725
  if (n.loading.start)
25726
  throw new Error("Loader can only be used once.");
25727
  n.loading.start = self.performance.now();
25728
+ const s = Y1(e, this.controller.signal), a = e.responseType === "arraybuffer", o = a ? "byteLength" : "length", {
25729
  maxTimeToFirstByteMs: l,
25730
  maxLoadTimeMs: u
25731
  } = t.loadPolicy;
 
25742
  status: m,
25743
  statusText: p
25744
  } = d;
25745
+ throw new J1(p || "fetch, bad network response", m, d);
25746
  }
25747
+ n.loading.first = f, n.total = Q1(d.headers) || n.total;
25748
  const g = (h = this.callbacks) == null ? void 0 : h.onProgress;
25749
  return g && H(t.highWaterMark) ? this.loadProgressively(d, n, e, t.highWaterMark, g) : a ? d.arrayBuffer() : e.responseType === "json" ? d.json() : d.text();
25750
  }).then((d) => {
 
25793
  return l();
25794
  }
25795
  }
25796
+ function Y1(r, e) {
25797
  const t = {
25798
  method: "GET",
25799
  mode: "cors",
 
25803
  };
25804
  return r.rangeEnd && t.headers.set("Range", "bytes=" + r.rangeStart + "-" + String(r.rangeEnd - 1)), t;
25805
  }
25806
+ function X1(r) {
25807
+ const e = j1.exec(r);
25808
  if (e)
25809
  return parseInt(e[2]) - parseInt(e[1]) + 1;
25810
  }
25811
+ function Q1(r) {
25812
  const e = r.get("Content-Range");
25813
  if (e) {
25814
+ const i = X1(e);
25815
  if (H(i))
25816
  return i;
25817
  }
 
25819
  if (t)
25820
  return parseInt(t);
25821
  }
25822
+ function Z1(r, e) {
25823
  return new self.Request(r.url, e);
25824
  }
25825
+ class J1 extends Error {
25826
  constructor(e, t, i) {
25827
  super(e), this.code = void 0, this.details = void 0, this.code = t, this.details = i;
25828
  }
25829
  }
25830
+ const eb = /^age:\s*[\d.]+\s*$/im;
25831
  class Rg {
25832
  constructor(e) {
25833
  this.xhrSetup = void 0, this.requestTimeout = void 0, this.retryTimeout = void 0, this.retryDelay = void 0, this.config = null, this.callbacks = null, this.context = null, this.loader = null, this.stats = void 0, this.xhrSetup = e && e.xhrSetup || null, this.stats = new nl(), this.retryDelay = 0;
 
25956
  }
25957
  getCacheAge() {
25958
  let e = null;
25959
+ if (this.loader && eb.test(this.loader.getAllResponseHeaders())) {
25960
  const t = this.loader.getResponseHeader("age");
25961
  e = t ? parseFloat(t) : null;
25962
  }
 
25966
  return this.loader && new RegExp(`^${e}:\\s*[\\d.]+\\s*$`, "im").test(this.loader.getAllResponseHeaders()) ? this.loader.getResponseHeader(e) : null;
25967
  }
25968
  }
25969
+ const tb = {
25970
  maxTimeToFirstByteMs: 8e3,
25971
  maxLoadTimeMs: 2e4,
25972
  timeoutRetry: null,
25973
  errorRetry: null
25974
+ }, ib = pe(pe({
25975
  autoStartLoad: !0,
25976
  // used by stream-controller
25977
  startPosition: -1,
 
26070
  bufferController: sS,
26071
  capLevelController: Sl,
26072
  errorController: vv,
26073
+ fpsController: r1,
26074
  stretchShortVideoTrack: !1,
26075
  // used by mp4-remuxer
26076
  maxAudioFramesDrift: 1,
 
26127
  useMediaCapabilities: !0,
26128
  preserveManualLevelOnError: !1,
26129
  certLoadPolicy: {
26130
+ default: tb
26131
  },
26132
  keyLoadPolicy: {
26133
  default: {
 
26241
  fragLoadingMaxRetry: 6,
26242
  fragLoadingRetryDelay: 1e3,
26243
  fragLoadingMaxRetryTimeout: 64e3
26244
+ }, nb()), {}, {
26245
+ subtitleStreamController: _1,
26246
+ subtitleTrackController: l1,
26247
+ timelineController: K1,
26248
  audioStreamController: eS,
26249
  audioTrackController: tS,
26250
  emeController: xn,
26251
+ cmcdController: t1,
26252
+ contentSteeringController: n1,
26253
+ interstitialsController: p1
26254
  });
26255
+ function nb() {
26256
  return {
26257
+ cueHandler: z1,
26258
  // used by timeline-controller
26259
  enableWebVTT: !0,
26260
  // used by timeline-controller
 
26281
  renderTextTracksNatively: !0
26282
  };
26283
  }
26284
+ function sb(r, e, t) {
26285
  if ((e.liveSyncDurationCount || e.liveMaxLatencyDurationCount) && (e.liveSyncDuration || e.liveMaxLatencyDuration))
26286
  throw new Error("Illegal hls.js config: don't mix up liveSyncDurationCount/liveMaxLatencyDurationCount and liveSyncDuration/liveMaxLatencyDuration");
26287
  if (e.liveMaxLatencyDurationCount !== void 0 && (e.liveSyncDurationCount === void 0 || e.liveMaxLatencyDurationCount <= e.liveSyncDurationCount))
 
26319
  function Co(r) {
26320
  return r && typeof r == "object" ? Array.isArray(r) ? r.map(Co) : Object.keys(r).reduce((e, t) => (e[t] = Co(r[t]), e), {}) : r;
26321
  }
26322
+ function rb(r, e) {
26323
  const t = r.loader;
26324
+ t !== Zc && t !== Rg ? (e.log("[config]: Custom loader detected, cannot enable progressive streaming"), r.progressive = !1) : W1() && (r.loader = Zc, r.progressive = !0, r.enableSoftwareAES = !0, e.log("[config]: Progressive streaming enabled, using FetchLoader"));
26325
  }
26326
+ const dr = 2, ab = 0.1, ob = 0.05, lb = 100;
26327
+ class ub extends Af {
26328
  constructor(e, t) {
26329
  super("gap-controller", e.logger), this.hls = void 0, this.fragmentTracker = void 0, this.media = null, this.mediaSource = void 0, this.nudgeRetry = 0, this.stallReported = !1, this.stalled = null, this.moved = !1, this.seeking = !1, this.buffered = {}, this.lastCurrentTime = 0, this.ended = 0, this.waiting = 0, this.onMediaPlaying = () => {
26330
  this.ended = 0, this.waiting = 0;
 
26356
  super.destroy(), this.unregisterListeners(), this.media = this.hls = this.fragmentTracker = null, this.mediaSource = void 0;
26357
  }
26358
  onMediaAttached(e, t) {
26359
+ this.setInterval(lb), this.mediaSource = t.mediaSource;
26360
  const i = this.media = t.media;
26361
  dt(i, "playing", this.onMediaPlaying), dt(i, "waiting", this.onMediaWaiting), dt(i, "ended", this.onMediaEnded);
26362
  }
 
26594
  return 0;
26595
  }
26596
  }
26597
+ const f = Math.max(l + ob, a + ab);
26598
  if (this.warn(`skipping hole, adjusting currentTime from ${a} to ${f}`), this.moved = !0, n.currentTime = f, !(e != null && e.gap)) {
26599
  const g = new Error(`fragment loaded with buffer holes, seeking from ${a} to ${f}`), m = {
26600
  type: j.MEDIA_ERROR,
 
26670
  function Ks(r, e) {
26671
  return e.getAppendedFrag(r, W.MAIN) || e.getPartialFragment(r);
26672
  }
26673
+ const cb = 0.25;
26674
  function Ro() {
26675
  if (!(typeof self > "u"))
26676
  return self.VTTCue || self.TextTrackCue;
 
26695
  }
26696
  return Number.POSITIVE_INFINITY;
26697
  })();
26698
+ class db {
26699
  constructor(e) {
26700
  this.hls = void 0, this.id3Track = null, this.media = null, this.dateRangeCuesAppended = {}, this.removeCues = !0, this.assetCue = void 0, this.onEventCueEnter = () => {
26701
  this.hls && this.hls.trigger(E.EVENT_CUE_ENTER, {});
 
26767
  continue;
26768
  const u = Wf(s[o].data), c = s[o].pts;
26769
  let d = c + s[o].duration;
26770
+ d > Hs && (d = Hs), d - c <= 0 && (d = c + cb);
26771
  for (let f = 0; f < u.length; f++) {
26772
  const g = u[f];
26773
  if (!jf(g)) {
 
26918
  }
26919
  }
26920
  }
26921
+ class hb {
26922
  constructor(e) {
26923
  this.hls = void 0, this.config = void 0, this.media = null, this.currentTime = 0, this.stallCount = 0, this._latency = null, this._targetLatencyUpdated = !1, this.onTimeupdate = () => {
26924
  const {
 
27060
  return e === null ? null : e - this.currentTime;
27061
  }
27062
  }
27063
+ class fb extends El {
27064
  constructor(e, t) {
27065
  super(e, "level-controller"), this._levels = [], this._firstLevel = -1, this._maxAutoLevel = -1, this._startLevel = void 0, this.currentLevel = null, this.currentLevelIndex = -1, this.manualLevelIndex = -1, this.steering = void 0, this.onParsedComplete = void 0, this.steering = t, this._registerListeners();
27066
  }
 
27431
  const e = wg();
27432
  return !e || e.prototype && typeof e.prototype.appendBuffer == "function" && typeof e.prototype.remove == "function";
27433
  }
27434
+ function gb() {
27435
  if (!Fg())
27436
  return !1;
27437
  const r = Mi();
27438
  return typeof (r == null ? void 0 : r.isTypeSupported) == "function" && (["avc1.42E01E,mp4a.40.2", "av01.0.01M.08", "vp09.00.50.08"].some((e) => r.isTypeSupported(is(e, "video"))) || ["mp4a.40.2", "fLaC"].some((e) => r.isTypeSupported(is(e, "audio"))));
27439
  }
27440
+ function mb() {
27441
  var r;
27442
  const e = wg();
27443
  return typeof (e == null || (r = e.prototype) == null ? void 0 : r.changeType) == "function";
27444
  }
27445
+ const pb = 100;
27446
+ class _b extends hl {
27447
  constructor(e, t, i) {
27448
  super(e, t, i, "stream-controller", W.MAIN), this.audioCodecSwap = !1, this.level = -1, this._forceStartLoad = !1, this._hasEnoughToStart = !1, this.altAudio = 0, this.audioOnly = !1, this.fragPlaying = null, this.fragLastKbps = 0, this.couldBacktrack = !1, this.backtrackFragment = null, this.audioCodecSwitch = !1, this.videoBuffer = null, this.onMediaPlaying = () => {
27449
  this.tick();
 
27482
  lastCurrentTime: i,
27483
  hls: n
27484
  } = this;
27485
+ if (this.stopLoad(), this.setInterval(pb), this.level = -1, !this.startFragRequested) {
27486
  let s = n.startLevel;
27487
  s === -1 && (n.config.testBandwidth && this.levels.length > 1 ? (s = 0, this.bitrateTest = !0) : s = n.firstAutoLevel), n.nextLoadLevel = s, this.level = n.loadLevel, this._hasEnoughToStart = !!t;
27488
  }
 
27662
  const a = t.levels[s].audioCodec;
27663
  a && (i = i || a.indexOf("mp4a.40.2") !== -1, n = n || a.indexOf("mp4a.40.5") !== -1);
27664
  }
27665
+ this.audioCodecSwitch = i && n && !mb(), this.audioCodecSwitch && this.log("Both AAC/HE-AAC audio found in levels; declaring level codec as HE-AAC"), this.levels = t.levels, this.startFragRequested = !1;
27666
  }
27667
  onLevelLoading(e, t) {
27668
  const {
 
28167
  return this._forceStartLoad;
28168
  }
28169
  }
28170
+ class yb extends Kt {
28171
  constructor(e, t) {
28172
  super("key-loader", t), this.config = void 0, this.keyIdToKeyInfo = {}, this.emeController = null, this.config = e;
28173
  }
 
28383
  let t = r.url;
28384
  return (t === void 0 || t.indexOf("data:") === 0) && (t = e.url), t;
28385
  }
28386
+ class vb {
28387
  constructor(e) {
28388
  this.hls = void 0, this.loaders = /* @__PURE__ */ Object.create(null), this.variableList = null, this.onManifestLoaded = this.checkAutostartLoad, this.hls = e, this.registerListeners();
28389
  }
 
28833
  * Check if MediaSource Extensions are available and isTypeSupported checks pass for any baseline codecs.
28834
  */
28835
  static isSupported() {
28836
+ return gb();
28837
  }
28838
  /**
28839
  * Get the MediaSource global used for MSE playback (ManagedMediaSource, MediaSource, or WebKitMediaSource).
 
28857
  * Get the default configuration applied to new instances.
28858
  */
28859
  static get DefaultConfig() {
28860
+ return kt.defaultConfig ? kt.defaultConfig : ib;
28861
  }
28862
  /**
28863
  * Replace the default configuration applied to new instances.
 
28871
  */
28872
  constructor(e = {}) {
28873
  this.config = void 0, this.userConfig = void 0, this.logger = void 0, this.coreComponents = void 0, this.networkControllers = void 0, this._emitter = new fl(), this._autoLevelCapping = -1, this._maxHdcpLevel = null, this.abrController = void 0, this.bufferController = void 0, this.capLevelController = void 0, this.latencyController = void 0, this.levelController = void 0, this.streamController = void 0, this.audioStreamController = void 0, this.subtititleStreamController = void 0, this.audioTrackController = void 0, this.subtitleTrackController = void 0, this.interstitialsController = void 0, this.gapController = void 0, this.emeController = void 0, this.cmcdController = void 0, this._media = null, this._url = null, this._sessionId = void 0, this.triggeringException = void 0, this.started = !1;
28874
+ const t = this.logger = Dy(e.debug || !1, "Hls instance", e.assetPlayerId), i = this.config = sb(kt.DefaultConfig, e, t);
28875
+ this.userConfig = e, i.progressive && rb(i, t);
28876
  const {
28877
  abrController: n,
28878
  bufferController: s,
28879
  capLevelController: a,
28880
  errorController: o,
28881
  fpsController: l
28882
+ } = i, u = new o(this), c = this.abrController = new n(this), d = new Ev(this), h = i.interstitialsController, f = h ? this.interstitialsController = new h(this, kt) : null, g = this.bufferController = new s(this, d), m = this.capLevelController = new a(this), p = new l(this), v = new vb(this), _ = i.contentSteeringController, y = _ ? new _(this) : null, S = this.levelController = new fb(this, y), b = new db(this), A = new yb(this.config, this.logger), T = this.streamController = new _b(this, d, A), D = this.gapController = new ub(this, d);
28883
  m.setStreamController(T), p.setStreamController(T);
28884
  const I = [v, S, T];
28885
  f && I.splice(1, 0, f), y && I.splice(1, 0, y), this.networkControllers = I;
 
28888
  const k = i.audioStreamController;
28889
  k && I.push(this.audioStreamController = new k(this, d, A)), this.subtitleTrackController = this.createController(i.subtitleTrackController, I);
28890
  const R = i.subtitleStreamController;
28891
+ R && I.push(this.subtititleStreamController = new R(this, d, A)), this.createController(i.timelineController, x), A.emeController = this.emeController = this.createController(i.emeController, x), this.cmcdController = this.createController(i.cmcdController, x), this.latencyController = this.createController(hb, x), this.coreComponents = x, I.push(u);
28892
  const N = u.onErrorOut;
28893
  typeof N == "function" && this.on(E.ERROR, N, u), this.on(E.MANIFEST_LOADED, v.onManifestLoaded, v);
28894
  }
 
29095
  */
29096
  get sessionId() {
29097
  let e = this._sessionId;
29098
+ return e || (e = this._sessionId = u1()), e;
29099
  }
29100
  /**
29101
  * @returns an array of levels (variants) sorted by HDCP-LEVEL, RESOLUTION (height), FRAME-RATE, CODECS, VIDEO-RANGE, and BANDWIDTH
 
29524
  }
29525
  kt.defaultConfig = void 0;
29526
  const {
29527
+ SvelteComponent: Eb,
29528
+ action_destroyer: Sb,
29529
+ add_render_callback: bb,
29530
  assign: nd,
29531
  attr: Fi,
29532
+ binding_callbacks: Tb,
29533
  bubble: Ya,
29534
+ children: Ab,
29535
  claim_element: sd,
29536
+ claim_space: Db,
29537
+ create_slot: Ib,
29538
  detach: qs,
29539
  element: rd,
29540
  exclude_internal_props: ad,
29541
+ get_all_dirty_from_scope: xb,
29542
+ get_slot_changes: Lb,
29543
+ get_svelte_dataset: kb,
29544
+ init: Cb,
29545
  insert_hydration: Xa,
29546
+ is_function: Rb,
29547
  listen: Ye,
29548
+ raf: wb,
29549
+ run_all: Fb,
29550
+ safe_not_equal: Pb,
29551
+ space: Ob,
29552
  src_url_equal: od,
29553
  toggle_class: ld,
29554
+ transition_in: $b,
29555
+ transition_out: Mb,
29556
+ update_slot_base: Bb
29557
+ } = window.__gradio__svelte__internal, { createEventDispatcher: Nb } = window.__gradio__svelte__internal;
29558
+ function Ub(r) {
29559
  let e, t = '<span class="load-wrap svelte-1pwzuub"><span class="loader svelte-1pwzuub"></span></span>', i, n, s, a, o = !1, l, u = !0, c, d, h, f;
29560
  const g = (
29561
  /*#slots*/
29562
  r[16].default
29563
+ ), m = Ib(
29564
  g,
29565
  r,
29566
  /*$$scope*/
 
29568
  null
29569
  );
29570
  function p() {
29571
+ cancelAnimationFrame(l), n.paused || (l = wb(p), o = !0), r[20].call(n);
29572
  }
29573
  return {
29574
  c() {
29575
+ e = rd("div"), e.innerHTML = t, i = Ob(), n = rd("video"), m && m.c(), this.h();
29576
  },
29577
  l(v) {
29578
+ e = sd(v, "DIV", { class: !0, "data-svelte-h": !0 }), kb(e) !== "svelte-mez4j5" && (e.innerHTML = t), i = Db(v), n = sd(v, "VIDEO", {
29579
  src: !0,
29580
  preload: !0,
29581
  "data-testid": !0,
29582
  crossorigin: !0
29583
  });
29584
+ var _ = Ab(n);
29585
  m && m.l(_), _.forEach(qs), this.h();
29586
  },
29587
  h() {
 
29599
  r[9], n.loop = /*loop*/
29600
  r[10], Fi(n, "data-testid", a = /*$$props*/
29601
  r[13]["data-testid"]), Fi(n, "crossorigin", "anonymous"), /*duration*/
29602
+ r[2] === void 0 && bb(() => (
29603
  /*video_durationchange_handler*/
29604
  r[21].call(n)
29605
  ));
 
29703
  /*video_play_pause_handler*/
29704
  r[22]
29705
  ),
29706
+ Sb(c = py.call(null, n, { autoplay: (
29707
  /*autoplay*/
29708
  r[8] ?? !1
29709
  ) }))
 
29713
  (!d || _ & /*processingVideo*/
29714
  2048) && ld(e, "hidden", !/*processingVideo*/
29715
  v[11]), m && m.p && (!d || _ & /*$$scope*/
29716
+ 32768) && Bb(
29717
  m,
29718
  g,
29719
  v,
29720
  /*$$scope*/
29721
  v[15],
29722
+ d ? Lb(
29723
  g,
29724
  /*$$scope*/
29725
  v[15],
29726
  _,
29727
  null
29728
+ ) : xb(
29729
  /*$$scope*/
29730
  v[15]
29731
  ),
 
29757
  ) && (n.currentTime = /*currentTime*/
29758
  v[1]), o = !1, _ & /*paused*/
29759
  8 && u !== (u = /*paused*/
29760
+ v[3]) && n[u ? "pause" : "play"](), c && Rb(c.update) && _ & /*autoplay*/
29761
  256 && c.update.call(null, { autoplay: (
29762
  /*autoplay*/
29763
  v[8] ?? !1
29764
  ) });
29765
  },
29766
  i(v) {
29767
+ d || ($b(m, v), d = !0);
29768
  },
29769
  o(v) {
29770
+ Mb(m, v), d = !1;
29771
  },
29772
  d(v) {
29773
+ v && (qs(e), qs(i), qs(n)), m && m.d(v), r[23](null), h = !1, Fb(f);
29774
  }
29775
  };
29776
  }
29777
+ function Gb(r, e, t) {
29778
  let { $$slots: i = {}, $$scope: n } = e, { src: s = void 0 } = e, { muted: a = void 0 } = e, { playsinline: o = void 0 } = e, { preload: l = void 0 } = e, { autoplay: u = void 0 } = e, { controls: c = void 0 } = e, { currentTime: d = void 0 } = e, { duration: h = void 0 } = e, { paused: f = void 0 } = e, { node: g = void 0 } = e, { loop: m } = e, { is_stream: p } = e, { processingVideo: v = !1 } = e, _ = !1;
29779
+ const y = Nb();
29780
  function S(R, N, K) {
29781
  if (!(!R || !N) && kt.isSupported() && !_) {
29782
  const U = new kt({
 
29824
  f = this.paused, t(3, f);
29825
  }
29826
  function k(R) {
29827
+ Tb[R ? "unshift" : "push"](() => {
29828
  g = R, t(0, g);
29829
  });
29830
  }
 
29861
  k
29862
  ];
29863
  }
29864
+ class zr extends Eb {
29865
  constructor(e) {
29866
+ super(), Cb(this, e, Gb, Ub, Pb, {
29867
  src: 4,
29868
  muted: 5,
29869
  playsinline: 6,
 
29965
  }
29966
  }
29967
  Ai = new WeakMap();
29968
+ async function Vb(r) {
29969
  return r ? `<div style="display: flex; flex-wrap: wrap; gap: 16px">${(await Promise.all(
29970
  r.map(async ([t, i]) => t === null || !t.url ? "" : await f_(t.url))
29971
  )).map((t) => `<img src="${t}" style="height: 400px" />`).join("")}</div>` : "";
29972
  }
29973
  var Wr = typeof self < "u" ? self : global;
29974
+ const ls = typeof navigator < "u", Kb = ls && typeof HTMLImageElement > "u", Rr = !(typeof global > "u" || typeof process > "u" || !process.versions || !process.versions.node), Il = Wr.Buffer, zs = Wr.BigInt, xl = !!Il, Hb = (r) => r;
29975
+ function wr(r, e = Hb) {
29976
  if (Rr) try {
29977
  return typeof require == "function" ? Promise.resolve(e(require(r))) : import(
29978
  /* webpackIgnore: true */
 
29983
  }
29984
  }
29985
  let Ll = Wr.fetch;
29986
+ const qb = (r) => Ll = r;
29987
  if (!Wr.fetch) {
29988
  const r = wr("http", (i) => i), e = wr("https", (i) => i), t = (i, { headers: n } = {}) => new Promise(async (s, a) => {
29989
  let { port: o, hostname: l, pathname: u, protocol: c, search: d } = new URL(i);
 
30001
  });
30002
  f.on("error", a), f.end();
30003
  });
30004
+ qb(t);
30005
  }
30006
  function ie(r, e, t) {
30007
  return e in r ? Object.defineProperty(r, e, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : r[e] = t, r;
30008
  }
30009
+ const Fr = (r) => Pg(r) ? void 0 : r, zb = (r) => r !== void 0;
30010
  function Pg(r) {
30011
+ return r === void 0 || (r instanceof Map ? r.size === 0 : Object.values(r).filter(zb).length === 0);
30012
  }
30013
  function $e(r) {
30014
  let e = new Error(r);
 
30163
  }
30164
  }
30165
  var Fn = new kl("file parser"), tt = new kl("segment parser"), $n = new kl("file reader");
30166
+ function Wb(r, e) {
30167
+ return typeof r == "string" ? hd(r, e) : ls && !Kb && r instanceof HTMLImageElement ? hd(r.src, e) : r instanceof Uint8Array || r instanceof ArrayBuffer || r instanceof DataView ? new pt(r) : ls && r instanceof Blob ? Oo(r, e, "blob", Bo) : void $e("Invalid input argument");
30168
  }
30169
  function hd(r, e) {
30170
  return (t = r).startsWith("data:") || t.length > 1e4 ? $o(r, e, "base64") : Rr && r.includes("://") ? Oo(r, e, "url", Mo) : Rr ? $o(r, e, "fs") : ls ? Oo(r, e, "url", Mo) : void $e("Invalid input argument");
 
30184
  let i = new FileReader();
30185
  i.onloadend = () => e(i.result || new ArrayBuffer()), i.onerror = t, i.readAsArrayBuffer(r);
30186
  });
30187
+ class jb extends Map {
30188
  get tagKeys() {
30189
  return this.allKeys || (this.allKeys = Array.from(this.keys())), this.allKeys;
30190
  }
 
30193
  }
30194
  }
30195
  function Ze(r, e, t) {
30196
+ let i = new jb();
30197
  for (let [n, s] of t) i.set(n, s);
30198
  if (Array.isArray(e)) for (let n of e) r.set(n, i);
30199
  else r.set(e, i);
 
30327
  for (let t of e) r.add(t);
30328
  }
30329
  ie(Cl, "default", at);
30330
+ class Yb {
30331
  constructor(e) {
30332
  ie(this, "parsers", {}), ie(this, "output", {}), ie(this, "errors", []), ie(this, "pushToErrors", (t) => this.errors.push(t)), this.options = Cl.useCached(e);
30333
  }
30334
  async read(e) {
30335
+ this.file = await Wb(e, this.options);
30336
  }
30337
  setup() {
30338
  if (this.fileParser) return;
 
30362
  return t.close && t.close(), o;
30363
  }
30364
  }
30365
+ async function Xb(r, e) {
30366
+ let t = new Yb(e);
30367
  return await t.read(r), t.parse();
30368
  }
30369
  class jr {
 
30441
  }
30442
  }
30443
  ie(ei, "headerLength", 4), ie(ei, "type", void 0), ie(ei, "multiSegment", !1), ie(ei, "canHandle", () => !1);
30444
+ function Qb(r) {
30445
  return r === 192 || r === 194 || r === 196 || r === 219 || r === 221 || r === 218 || r === 254;
30446
  }
30447
+ function Zb(r) {
30448
  return r >= 224 && r <= 239;
30449
  }
30450
+ function Jb(r, e, t) {
30451
  for (let [i, n] of tt) if (n.canHandle(r, e, t)) return i;
30452
  }
30453
  class md extends jr {
 
30481
  t -= 2;
30482
  let i, n, s, a, o, l, { file: u, findAll: c, wanted: d, remaining: h, options: f } = this;
30483
  for (; e < t; e++) if (u.getUint8(e) === 255) {
30484
+ if (i = u.getUint8(e + 1), Zb(i)) {
30485
+ if (n = u.getUint16(e + 2), s = Jb(u, e, n), s && d.has(s) && (a = tt.get(s), o = a.findPosition(u, e), l = f[s], o.type = s, this.appSegments.push(o), !c && (a.multiSegment && l.multiSegment ? (this.unfinishedMultiSegment = o.chunkNumber < o.chunkCount, this.unfinishedMultiSegment || h.delete(s)) : h.delete(s), h.size === 0))) break;
30486
  f.recordUnknownSegments && (o = ei.findPosition(u, e), o.marker = i, this.unknownSegments.push(o)), e += n + 1;
30487
+ } else if (Qb(i)) {
30488
  if (n = u.getUint16(e + 2), i === 218 && f.stopAfterSos !== !1) return;
30489
  f.recordJpegSegments && this.jpegSegments.push({ offset: e, length: n, marker: i }), e += n + 1;
30490
  }
 
31504
  s && s.l(g), g.forEach(X), f.forEach(X), this.h();
31505
  },
31506
  h() {
31507
+ ae(i, "class", "grid-wrap svelte-1k19y3g"), mt(
31508
  i,
31509
  "minimal",
31510
  /*mode*/
 
31524
  /*height*/
31525
  r[6] !== "auto" ? `${/*height*/
31526
  r[6]}px` : null
31527
+ ), ae(e, "class", "gallery-container");
31528
  },
31529
  m(h, f) {
31530
  ye(h, e, f), o && o.m(e, null), ue(e, t), ue(e, i), ~n && u[n].m(i, null), r[63](e), a = !0;
 
31670
  x.forEach(X), c = ke(D), b && b.l(D), D.forEach(X), this.h();
31671
  },
31672
  h() {
31673
+ ae(n, "class", "media-container svelte-1k19y3g"), ae(u, "class", "thumbnails scroll-hide svelte-1k19y3g"), gt(
31674
  u,
31675
  "justify-content",
31676
  /*thumbnails_overflow*/
31677
  r[24] ? "flex-start" : "center"
31678
+ ), ae(e, "class", "preview svelte-1k19y3g"), ae(e, "aria-label", "Image Preview"), ae(e, "tabindex", "-1"), mt(
31679
  e,
31680
  "minimal",
31681
  /*mode*/
 
31902
  /*value*/
31903
  r[4]
31904
  ),
31905
+ formatter: Vb
31906
  }
31907
  }), t.$on(
31908
  "share",
 
32135
  i = nn(s, t), s.forEach(X), this.h();
32136
  },
32137
  h() {
32138
+ ae(e, "class", "caption svelte-1k19y3g");
32139
  },
32140
  m(n, s) {
32141
  ye(n, e, s), ue(e, i);
 
32277
  i.l(v), n = ke(v), v.forEach(X), this.h();
32278
  },
32279
  h() {
32280
+ ae(e, "class", "thumbnail-item thumbnail-small svelte-1k19y3g"), ae(e, "aria-label", s = "Thumbnail " + /*i*/
32281
  (r[75] + 1) + " of " + /*resolved_value*/
32282
  r[16].length), mt(
32283
  e,
 
32344
  i = he(v, "BUTTON", { class: !0, "data-svelte-h": !0 }), $r(i) !== "svelte-1irq3m4" && (i.textContent = n), s = ke(v), a = he(v, "H3", { class: !0, "data-svelte-h": !0 }), $r(a) !== "svelte-1tc7pig" && (a.textContent = o), l = ke(v), g.l(v), v.forEach(X), p.forEach(X), this.h();
32345
  },
32346
  h() {
32347
+ ae(i, "class", "close-button svelte-1k19y3g"), ae(a, "class", "popup-title svelte-1k19y3g"), ae(t, "class", "popup-content svelte-1k19y3g"), ae(e, "class", "metadata-popup svelte-1k19y3g"), ae(e, "role", "presentation"), gt(e, "width", typeof /*popup_metadata_width*/
32348
  r[15] == "number" ? `${/*popup_metadata_width*/
32349
  r[15]}px` : (
32350
  /*popup_metadata_width*/
 
32389
  e = he(i, "P", { class: !0, "data-svelte-h": !0 }), $r(e) !== "svelte-1qb2m81" && (e.textContent = t), this.h();
32390
  },
32391
  h() {
32392
+ ae(e, "class", "no-metadata-message svelte-1k19y3g");
32393
  },
32394
  m(i, n) {
32395
  ye(i, e, n);
 
32426
  g.forEach(X), f.forEach(X), h.forEach(X), n = ke(d), s = he(d, "BUTTON", { class: !0, "data-svelte-h": !0 }), $r(s) !== "svelte-o01tbk" && (s.textContent = a), this.h();
32427
  },
32428
  h() {
32429
+ ae(t, "class", "metadata-table svelte-1k19y3g"), ae(e, "class", "metadata-table-container svelte-1k19y3g"), ae(s, "class", "load-metadata-button svelte-1k19y3g");
32430
  },
32431
  m(d, h) {
32432
  ye(d, e, h), ue(e, t), ue(t, i);
 
32483
  l = nn(f, o), f.forEach(X), u = ke(d), d.forEach(X), this.h();
32484
  },
32485
  h() {
32486
+ ae(t, "class", "metadata-label svelte-1k19y3g"), ae(a, "class", "metadata-value svelte-1k19y3g");
32487
  },
32488
  m(c, d) {
32489
  ye(c, e, d), ue(e, t), ue(t, n), ue(e, s), ue(e, a), ue(a, l), ue(e, u);
 
32555
  a.l(b), o = ke(b), m && m.l(b), b.forEach(X), S.forEach(X), l = ke(y), p && p.l(y), y.forEach(X), _.forEach(X), this.h();
32556
  },
32557
  h() {
32558
+ ae(n, "class", "thumbnail-item thumbnail-lg svelte-1k19y3g"), ae(n, "aria-label", "View single item in preview mode"), ae(i, "class", "gallery-item svelte-1k19y3g"), ae(t, "class", "gallery-item-with-name svelte-1k19y3g"), ae(e, "class", "single-item-wrapper svelte-1k19y3g"), gt(
32559
  e,
32560
  "--object-fit",
32561
  /*object_fit*/
 
32620
  o.forEach(X), this.h();
32621
  },
32622
  h() {
32623
+ ae(e, "class", "grid-container svelte-1k19y3g"), mt(
32624
  e,
32625
  "pt-6",
32626
  /*show_label*/
 
32812
  i = nn(s, t), s.forEach(X), this.h();
32813
  },
32814
  h() {
32815
+ ae(e, "class", "caption-label svelte-1k19y3g");
32816
  },
32817
  m(n, s) {
32818
  ye(n, e, s), ue(e, i);
 
32842
  i = nn(a, t), a.forEach(X), this.h();
32843
  },
32844
  h() {
32845
+ ae(e, "class", "thumbnail-filename svelte-1k19y3g"), ae(e, "title", n = /*file_name*/
32846
  r[73]);
32847
  },
32848
  m(s, a) {
 
32964
  i = nn(s, t), s.forEach(X), this.h();
32965
  },
32966
  h() {
32967
+ ae(e, "class", "caption-label svelte-1k19y3g");
32968
  },
32969
  m(n, s) {
32970
  ye(n, e, s), ue(e, i);
 
32994
  i = nn(a, t), a.forEach(X), this.h();
32995
  },
32996
  h() {
32997
+ ae(e, "class", "thumbnail-filename svelte-1k19y3g"), ae(e, "title", n = /*file_name*/
32998
  r[73]);
32999
  },
33000
  m(s, a) {
 
33051
  s.l(A), a = ke(A), p && p.l(A), A.forEach(X), b.forEach(X), l = ke(S), _ && _.l(S), u = ke(S), S.forEach(X), this.h();
33052
  },
33053
  h() {
33054
+ ae(i, "class", "thumbnail-item thumbnail-lg svelte-1k19y3g"), ae(i, "aria-label", o = "Thumbnail " + /*i*/
33055
  (r[75] + 1) + " of " + /*resolved_value*/
33056
  r[16].length), mt(
33057
  i,
 
33059
  /*selected_index*/
33060
  r[0] === /*i*/
33061
  r[75]
33062
+ ), ae(t, "class", "gallery-item svelte-1k19y3g"), ae(e, "class", "gallery-item-with-name svelte-1k19y3g");
33063
  },
33064
  m(y, S) {
33065
  ye(y, e, S), ue(e, t), ue(t, i), g[n].m(i, null), ue(i, a), p && p.m(i, null), ue(e, l), _ && _.m(e, null), ue(e, u), c = !0, d || (h = Ni(i, "click", v), d = !0);
 
33211
  if (!(P != null && P.url)) return null;
33212
  if (P.url.toLowerCase().endsWith(".png") || P.url.toLowerCase().endsWith(".jpg") || P.url.toLowerCase().endsWith(".jpeg"))
33213
  try {
33214
+ const st = yield Xb(P.url, !0);
33215
  let rt = {};
33216
  if (st)
33217
  for (const [Ft, qt] of Object.entries(st))
src/backend/gradio_mediagallery/templates/component/style.css CHANGED
@@ -1 +1 @@
1
- .block.svelte-239wnu{position:relative;margin:0;box-shadow:var(--block-shadow);border-width:var(--block-border-width);border-color:var(--block-border-color);border-radius:var(--block-radius);background:var(--block-background-fill);width:100%;line-height:var(--line-sm)}.block.fullscreen.svelte-239wnu{border-radius:0}.auto-margin.svelte-239wnu{margin-left:auto;margin-right:auto}.block.border_focus.svelte-239wnu{border-color:var(--color-accent)}.block.border_contrast.svelte-239wnu{border-color:var(--body-text-color)}.padded.svelte-239wnu{padding:var(--block-padding)}.hidden.svelte-239wnu{display:none}.flex.svelte-239wnu{display:flex;flex-direction:column}.hide-container.svelte-239wnu:not(.fullscreen){margin:0;box-shadow:none;--block-border-width:0;background:transparent;padding:0;overflow:visible}.resize-handle.svelte-239wnu{position:absolute;bottom:0;right:0;width:10px;height:10px;fill:var(--block-border-color);cursor:nwse-resize}.fullscreen.svelte-239wnu{position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:1000;overflow:auto}.animating.svelte-239wnu{animation:svelte-239wnu-pop-out .1s ease-out forwards}@keyframes svelte-239wnu-pop-out{0%{position:fixed;top:var(--start-top);left:var(--start-left);width:var(--start-width);height:var(--start-height);z-index:100}to{position:fixed;top:0vh;left:0vw;width:100vw;height:100vh;z-index:1000}}.placeholder.svelte-239wnu{border-radius:var(--block-radius);border-width:var(--block-border-width);border-color:var(--block-border-color);border-style:dashed}Tables */ table,tr,td,th{margin-top:var(--spacing-sm);margin-bottom:var(--spacing-sm);padding:var(--spacing-xl)}.md code,.md pre{background:none;font-family:var(--font-mono);font-size:var(--text-sm);text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:2;tab-size:2;-webkit-hyphens:none;hyphens:none}.md pre[class*=language-]::selection,.md pre[class*=language-] ::selection,.md code[class*=language-]::selection,.md code[class*=language-] ::selection{text-shadow:none;background:#b3d4fc}.md pre{padding:1em;margin:.5em 0;overflow:auto;position:relative;margin-top:var(--spacing-sm);margin-bottom:var(--spacing-sm);box-shadow:none;border:none;border-radius:var(--radius-md);background:var(--code-background-fill);padding:var(--spacing-xxl);font-family:var(--font-mono);text-shadow:none;border-radius:var(--radius-sm);white-space:nowrap;display:block;white-space:pre}.md :not(pre)>code{padding:.1em;border-radius:var(--radius-xs);white-space:normal;background:var(--code-background-fill);border:1px solid var(--panel-border-color);padding:var(--spacing-xxs) var(--spacing-xs)}.md .token.comment,.md .token.prolog,.md .token.doctype,.md .token.cdata{color:#708090}.md .token.punctuation{color:#999}.md .token.namespace{opacity:.7}.md .token.property,.md .token.tag,.md .token.boolean,.md .token.number,.md .token.constant,.md .token.symbol,.md .token.deleted{color:#905}.md .token.selector,.md .token.attr-name,.md .token.string,.md .token.char,.md .token.builtin,.md .token.inserted{color:#690}.md .token.atrule,.md .token.attr-value,.md .token.keyword{color:#07a}.md .token.function,.md .token.class-name{color:#dd4a68}.md .token.regex,.md .token.important,.md .token.variable{color:#e90}.md .token.important,.md .token.bold{font-weight:700}.md .token.italic{font-style:italic}.md .token.entity{cursor:help}.dark .md .token.comment,.dark .md .token.prolog,.dark .md .token.cdata{color:#5c6370}.dark .md .token.doctype,.dark .md .token.punctuation,.dark .md .token.entity{color:#abb2bf}.dark .md .token.attr-name,.dark .md .token.class-name,.dark .md .token.boolean,.dark .md .token.constant,.dark .md .token.number,.dark .md .token.atrule{color:#d19a66}.dark .md .token.keyword{color:#c678dd}.dark .md .token.property,.dark .md .token.tag,.dark .md .token.symbol,.dark .md .token.deleted,.dark .md .token.important{color:#e06c75}.dark .md .token.selector,.dark .md .token.string,.dark .md .token.char,.dark .md .token.builtin,.dark .md .token.inserted,.dark .md .token.regex,.dark .md .token.attr-value,.dark .md .token.attr-value>.token.punctuation{color:#98c379}.dark .md .token.variable,.dark .md .token.operator,.dark .md .token.function{color:#61afef}.dark .md .token.url{color:#56b6c2}span.svelte-1m32c2s div[class*=code_wrap]{position:relative}span.svelte-1m32c2s span.katex{font-size:var(--text-lg);direction:ltr}span.svelte-1m32c2s div[class*=code_wrap]>button{z-index:1;cursor:pointer;border-bottom-left-radius:var(--radius-sm);padding:var(--spacing-md);width:25px;height:25px;position:absolute;right:0}span.svelte-1m32c2s .check{opacity:0;z-index:var(--layer-top);transition:opacity .2s;background:var(--code-background-fill);color:var(--body-text-color);position:absolute;top:var(--size-1-5);left:var(--size-1-5)}span.svelte-1m32c2s p:not(:first-child){margin-top:var(--spacing-xxl)}span.svelte-1m32c2s .md-header-anchor{margin-left:-25px;padding-right:8px;line-height:1;color:var(--body-text-color-subdued);opacity:0}span.svelte-1m32c2s h1:hover .md-header-anchor,span.svelte-1m32c2s h2:hover .md-header-anchor,span.svelte-1m32c2s h3:hover .md-header-anchor,span.svelte-1m32c2s h4:hover .md-header-anchor,span.svelte-1m32c2s h5:hover .md-header-anchor,span.svelte-1m32c2s h6:hover .md-header-anchor{opacity:1}span.md.svelte-1m32c2s .md-header-anchor>svg{color:var(--body-text-color-subdued)}span.svelte-1m32c2s table{word-break:break-word}div.svelte-17qq50w>.md.prose{font-weight:var(--block-info-text-weight);font-size:var(--block-info-text-size);line-height:var(--line-sm)}div.svelte-17qq50w>.md.prose *{color:var(--block-info-text-color)}div.svelte-17qq50w{margin-bottom:var(--spacing-md)}span.has-info.svelte-zgrq3{margin-bottom:var(--spacing-xs)}span.svelte-zgrq3:not(.has-info){margin-bottom:var(--spacing-lg)}span.svelte-zgrq3{display:inline-block;position:relative;z-index:var(--layer-4);border:solid var(--block-title-border-width) var(--block-title-border-color);border-radius:var(--block-title-radius);background:var(--block-title-background-fill);padding:var(--block-title-padding);color:var(--block-title-text-color);font-weight:var(--block-title-text-weight);font-size:var(--block-title-text-size);line-height:var(--line-sm)}span[dir=rtl].svelte-zgrq3{display:block}.hide.svelte-zgrq3{margin:0;height:0}label.svelte-igqdol.svelte-igqdol{display:inline-flex;align-items:center;z-index:var(--layer-2);box-shadow:var(--block-label-shadow);border:var(--block-label-border-width) solid var(--block-label-border-color);border-top:none;border-left:none;border-radius:var(--block-label-radius);background:var(--block-label-background-fill);padding:var(--block-label-padding);pointer-events:none;color:var(--block-label-text-color);font-weight:var(--block-label-text-weight);font-size:var(--block-label-text-size);line-height:var(--line-sm)}.gr-group label.svelte-igqdol.svelte-igqdol{border-top-left-radius:0}label.float.svelte-igqdol.svelte-igqdol{position:absolute;top:var(--block-label-margin);left:var(--block-label-margin)}label.svelte-igqdol.svelte-igqdol:not(.float){position:static;margin-top:var(--block-label-margin);margin-left:var(--block-label-margin)}.hide.svelte-igqdol.svelte-igqdol{display:none}span.svelte-igqdol.svelte-igqdol{opacity:.8;margin-right:var(--size-2);width:calc(var(--block-label-text-size) - 1px);height:calc(var(--block-label-text-size) - 1px)}.hide-label.svelte-igqdol.svelte-igqdol{box-shadow:none;border-width:0;background:transparent;overflow:visible}label[dir=rtl].svelte-igqdol.svelte-igqdol{border:var(--block-label-border-width) solid var(--block-label-border-color);border-top:none;border-right:none;border-bottom-left-radius:var(--block-radius);border-bottom-right-radius:var(--block-label-radius);border-top-left-radius:var(--block-label-radius)}label[dir=rtl].svelte-igqdol span.svelte-igqdol{margin-left:var(--size-2);margin-right:0}.unstyled-link.svelte-151nsdd{all:unset;cursor:pointer}button.svelte-y0enk4{display:flex;justify-content:center;align-items:center;gap:1px;z-index:var(--layer-2);border-radius:var(--radius-xs);color:var(--block-label-text-color);border:1px solid var(--border-color);padding:var(--spacing-xxs)}button.svelte-y0enk4:hover{background-color:var(--background-fill-secondary)}button[disabled].svelte-y0enk4{opacity:.5;box-shadow:none}button[disabled].svelte-y0enk4:hover{cursor:not-allowed}.padded.svelte-y0enk4{background:var(--bg-color)}button.svelte-y0enk4:hover,button.highlight.svelte-y0enk4{cursor:pointer;color:var(--color-accent)}.padded.svelte-y0enk4:hover{color:var(--block-label-text-color)}span.svelte-y0enk4{padding:0 1px;font-size:10px}div.svelte-y0enk4{display:flex;align-items:center;justify-content:center;transition:filter .2s ease-in-out}.x-small.svelte-y0enk4{width:10px;height:10px}.small.svelte-y0enk4{width:14px;height:14px}.medium.svelte-y0enk4{width:20px;height:20px}.large.svelte-y0enk4{width:22px;height:22px}.pending.svelte-y0enk4{animation:svelte-y0enk4-flash .5s infinite}@keyframes svelte-y0enk4-flash{0%{opacity:.5}50%{opacity:1}to{opacity:.5}}.transparent.svelte-y0enk4{background:transparent;border:none;box-shadow:none}.empty.svelte-3w3rth{display:flex;justify-content:center;align-items:center;margin-top:calc(0px - var(--size-6));height:var(--size-full)}.icon.svelte-3w3rth{opacity:.5;height:var(--size-5);color:var(--body-text-color)}.small.svelte-3w3rth{min-height:calc(var(--size-32) - 20px)}.large.svelte-3w3rth{min-height:calc(var(--size-64) - 20px)}.unpadded_box.svelte-3w3rth{margin-top:0}.small_parent.svelte-3w3rth{min-height:100%!important}.dropdown-arrow.svelte-145leq6,.dropdown-arrow.svelte-ihhdbf{fill:currentColor}.circle.svelte-ihhdbf{fill:currentColor;opacity:.1}svg.svelte-pb9pol{animation:svelte-pb9pol-spin 1.5s linear infinite}@keyframes svelte-pb9pol-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}h2.svelte-1xg7h5n{font-size:var(--text-xl)!important}p.svelte-1xg7h5n,h2.svelte-1xg7h5n{white-space:pre-line}.wrap.svelte-1xg7h5n{display:flex;flex-direction:column;justify-content:center;align-items:center;min-height:var(--size-60);color:var(--block-label-text-color);line-height:var(--line-md);height:100%;padding-top:var(--size-3);text-align:center;margin:auto var(--spacing-lg)}.or.svelte-1xg7h5n{color:var(--body-text-color-subdued);display:flex}.icon-wrap.svelte-1xg7h5n{width:30px;margin-bottom:var(--spacing-lg)}@media (--screen-md){.wrap.svelte-1xg7h5n{font-size:var(--text-lg)}}.hovered.svelte-1xg7h5n{color:var(--color-accent)}div.svelte-q32hvf{border-top:1px solid transparent;display:flex;max-height:100%;justify-content:center;align-items:center;gap:var(--spacing-sm);height:auto;align-items:flex-end;color:var(--block-label-text-color);flex-shrink:0}.show_border.svelte-q32hvf{border-top:1px solid var(--block-border-color);margin-top:var(--spacing-xxl);box-shadow:var(--shadow-drop)}.source-selection.svelte-15ls1gu{display:flex;align-items:center;justify-content:center;border-top:1px solid var(--border-color-primary);width:100%;margin-left:auto;margin-right:auto;height:var(--size-10)}.icon.svelte-15ls1gu{width:22px;height:22px;margin:var(--spacing-lg) var(--spacing-xs);padding:var(--spacing-xs);color:var(--neutral-400);border-radius:var(--radius-md)}.selected.svelte-15ls1gu{color:var(--color-accent)}.icon.svelte-15ls1gu:hover,.icon.svelte-15ls1gu:focus{color:var(--color-accent)}.icon-button-wrapper.svelte-1h0hs6p{display:flex;flex-direction:row;align-items:center;justify-content:center;z-index:var(--layer-2);gap:var(--spacing-sm);box-shadow:var(--shadow-drop);border:1px solid var(--border-color-primary);background:var(--block-background-fill);padding:var(--spacing-xxs)}.icon-button-wrapper.hide-top-corner.svelte-1h0hs6p{border-top:none;border-right:none;border-radius:var(--block-label-right-radius)}.icon-button-wrapper.display-top-corner.svelte-1h0hs6p{border-radius:var(--radius-sm) 0 0 var(--radius-sm);top:var(--spacing-sm);right:-1px}.icon-button-wrapper.svelte-1h0hs6p:not(.top-panel){border:1px solid var(--border-color-primary);border-radius:var(--radius-sm)}.top-panel.svelte-1h0hs6p{position:absolute;top:var(--block-label-margin);right:var(--block-label-margin);margin:0}.icon-button-wrapper.svelte-1h0hs6p button{margin:var(--spacing-xxs);border-radius:var(--radius-xs);position:relative}.icon-button-wrapper.svelte-1h0hs6p a.download-link:not(:last-child),.icon-button-wrapper.svelte-1h0hs6p button:not(:last-child){margin-right:var(--spacing-xxs)}.icon-button-wrapper.svelte-1h0hs6p a.download-link:not(:last-child):not(.no-border *):after,.icon-button-wrapper.svelte-1h0hs6p button:not(:last-child):not(.no-border *):after{content:"";position:absolute;right:-4.5px;top:15%;height:70%;width:1px;background-color:var(--border-color-primary)}.icon-button-wrapper.svelte-1h0hs6p>*{height:100%}img.svelte-kxeri3{object-fit:cover}.image-container.svelte-x2tujq.svelte-x2tujq{height:100%;position:relative;min-width:var(--size-20)}.image-container.svelte-x2tujq button.svelte-x2tujq{width:var(--size-full);height:var(--size-full);border-radius:var(--radius-lg);display:flex;align-items:center;justify-content:center}.image-frame.svelte-x2tujq img{width:var(--size-full);height:var(--size-full);object-fit:scale-down}.selectable.svelte-x2tujq.svelte-x2tujq{cursor:crosshair}.fullscreen-controls svg{position:relative;top:0}.image-container:fullscreen{background-color:#000;display:flex;justify-content:center;align-items:center}.image-container:fullscreen img{max-width:90vw;max-height:90vh;object-fit:scale-down}.image-frame.svelte-x2tujq.svelte-x2tujq{width:auto;height:100%;display:flex;align-items:center;justify-content:center}.overlay.svelte-1pwzuub{position:absolute;background-color:#0006;width:100%;height:100%}.hidden.svelte-1pwzuub{display:none}.load-wrap.svelte-1pwzuub{display:flex;justify-content:center;align-items:center;height:100%}.loader.svelte-1pwzuub{display:flex;position:relative;background-color:var(--border-color-accent-subdued);animation:svelte-1pwzuub-shadowPulse 2s linear infinite;box-shadow:-24px 0 var(--border-color-accent-subdued),24px 0 var(--border-color-accent-subdued);margin:var(--spacing-md);border-radius:50%;width:10px;height:10px;scale:.5}@keyframes svelte-1pwzuub-shadowPulse{33%{box-shadow:-24px 0 var(--border-color-accent-subdued),24px 0 #fff;background:#fff}66%{box-shadow:-24px 0 #fff,24px 0 #fff;background:var(--border-color-accent-subdued)}to{box-shadow:-24px 0 #fff,24px 0 var(--border-color-accent-subdued);background:#fff}}.gallery-container.svelte-1crbckc.svelte-1crbckc{position:relative;width:100%;height:100%}button.svelte-1crbckc.svelte-1crbckc{width:var(--size-full);height:var(--size-full);display:block;border-radius:var(--radius-lg)}.preview.svelte-1crbckc.svelte-1crbckc{display:flex;position:absolute;flex-direction:column;z-index:var(--layer-2);border-radius:calc(var(--block-radius) - var(--block-border-width));-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);width:var(--size-full);height:var(--size-full)}.preview.svelte-1crbckc.svelte-1crbckc:focus-visible{outline:none}.preview.minimal.svelte-1crbckc.svelte-1crbckc{width:fit-content;height:fit-content}.preview.svelte-1crbckc.svelte-1crbckc:before{content:"";position:absolute;z-index:var(--layer-below);background:var(--background-fill-primary);opacity:.9;width:var(--size-full);height:var(--size-full)}.fixed-height.svelte-1crbckc.svelte-1crbckc{min-height:var(--size-80);max-height:65vh}@media (--screen-xl){.fixed-height.svelte-1crbckc.svelte-1crbckc{min-height:450px}}.media-container.svelte-1crbckc.svelte-1crbckc{height:calc(100% - var(--size-14));width:100%;display:flex;align-items:center;justify-content:center;cursor:pointer}.media-container.svelte-1crbckc img,.media-container.svelte-1crbckc video{max-width:100%;max-height:100%;object-fit:contain}.thumbnails.svelte-1crbckc img{object-fit:cover;width:var(--size-full);height:var(--size-full)}.thumbnails.svelte-1crbckc svg{position:absolute;top:var(--size-2);left:var(--size-2);width:50%;height:50%;opacity:50%}.caption.svelte-1crbckc.svelte-1crbckc{padding:var(--size-2) var(--size-3);overflow:hidden;color:var(--block-label-text-color);font-weight:var(--weight-semibold);text-align:center;text-overflow:ellipsis;white-space:nowrap;align-self:center}.thumbnails.svelte-1crbckc.svelte-1crbckc{display:flex;position:absolute;bottom:0;justify-content:flex-start;align-items:center;gap:var(--spacing-lg);width:var(--size-full);height:var(--size-14);overflow-x:scroll}.thumbnail-item.svelte-1crbckc.svelte-1crbckc{--ring-color:transparent;position:relative;box-shadow:inset 0 0 0 1px var(--ring-color),var(--shadow-drop);border:1px solid var(--border-color-primary);border-radius:var(--button-small-radius);background:var(--background-fill-secondary);aspect-ratio:var(--ratio-square);width:var(--size-full);height:var(--size-full);overflow:clip}.thumbnail-item.svelte-1crbckc.svelte-1crbckc:hover{--ring-color:var(--color-accent);border-color:var(--color-accent);filter:brightness(1.1)}.thumbnail-item.selected.svelte-1crbckc.svelte-1crbckc{--ring-color:var(--color-accent);border-color:var(--color-accent)}.thumbnail-item.svelte-1crbckc svg{position:absolute;top:50%;left:50%;width:50%;height:50%;opacity:50%;transform:translate(-50%,-50%)}.thumbnail-item.svelte-1crbckc video{width:var(--size-full);height:var(--size-full);overflow:hidden;object-fit:cover}.thumbnail-small.svelte-1crbckc.svelte-1crbckc{flex:none;transform:scale(.9);transition:75ms;width:var(--size-9);height:var(--size-9)}.thumbnail-small.selected.svelte-1crbckc.svelte-1crbckc{--ring-color:var(--color-accent);transform:scale(1);border-color:var(--color-accent)}.grid-wrap.svelte-1crbckc.svelte-1crbckc{position:relative;padding:var(--size-2);overflow-y:auto}.grid-wrap.fixed-height.svelte-1crbckc.svelte-1crbckc{min-height:var(--size-80);max-height:65vh}.grid-container.svelte-1crbckc.svelte-1crbckc{display:grid;position:relative;grid-template-rows:repeat(var(--grid-rows),minmax(100px,1fr));grid-template-columns:repeat(var(--grid-cols),minmax(100px,1fr));grid-auto-rows:minmax(100px,1fr);gap:var(--spacing-lg)}.single-item-wrapper.svelte-1crbckc.svelte-1crbckc{display:flex;align-items:center;justify-content:center;width:100%;height:100%;padding:var(--spacing-xxl);box-sizing:border-box}.single-item-wrapper.svelte-1crbckc .gallery-item-with-name.svelte-1crbckc{width:100%;height:100%;max-width:min(300px,80vw);max-height:min(320px,calc(80vh - var(--size-4)));display:flex;flex-direction:column;align-items:center}.single-item-wrapper.svelte-1crbckc .gallery-item.svelte-1crbckc{width:100%;height:100%;max-width:100%;max-height:100%}.single-item-wrapper.svelte-1crbckc .thumbnail-item.thumbnail-lg.svelte-1crbckc{display:flex!important;align-items:center!important;justify-content:center!important}.single-item-wrapper.svelte-1crbckc .thumbnail-filename.svelte-1crbckc{height:var(--size-4);line-height:var(--size-4)}.single-item-wrapper.svelte-1crbckc .thumbnail-lg.svelte-1crbckc>img,.single-item-wrapper.svelte-1crbckc .thumbnail-lg.svelte-1crbckc>video{object-fit:var(--object-fit)!important}.thumbnail-lg.svelte-1crbckc>img,.thumbnail-lg.svelte-1crbckc>video{width:var(--size-full);height:var(--size-full);overflow:hidden;object-fit:var(--object-fit)}.thumbnail-lg.svelte-1crbckc:hover .caption-label.svelte-1crbckc{opacity:.5}.caption-label.svelte-1crbckc.svelte-1crbckc{position:absolute;right:var(--block-label-margin);bottom:var(--block-label-margin);z-index:var(--layer-1);border-top:1px solid var(--border-color-primary);border-left:1px solid var(--border-color-primary);border-radius:var(--block-label-radius);background:var(--background-fill-secondary);padding:var(--block-label-padding);max-width:80%;overflow:hidden;font-size:var(--block-label-text-size);text-align:left;text-overflow:ellipsis;white-space:nowrap}.grid-wrap.minimal.svelte-1crbckc.svelte-1crbckc{padding:0}.gallery-item-with-name.svelte-1crbckc.svelte-1crbckc{display:flex;flex-direction:column;gap:var(--size-1);width:100%;height:100%}.thumbnail-filename.svelte-1crbckc.svelte-1crbckc{font-size:var(--text-xs);color:var(--body-text-color);text-align:center;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:0 var(--size-1)}.gallery-item.svelte-1crbckc.svelte-1crbckc{position:relative;width:100%;height:100%}.metadata-popup.svelte-1crbckc.svelte-1crbckc{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);background:var(--background-fill-primary, white);border:1px solid var(--border-color-primary);box-shadow:0 4px 8px #0003;z-index:1000;border-radius:8px;max-width:min(90%,600px);max-height:min(50vh,calc(100% - 2rem));min-height:200px;display:flex;flex-direction:column;pointer-events:auto}.popup-content.svelte-1crbckc.svelte-1crbckc{padding:1rem;display:flex;flex-direction:column;width:100%;box-sizing:border-box;overflow-y:auto;position:relative}.close-button.svelte-1crbckc.svelte-1crbckc{position:absolute;top:.5rem;right:.5rem;background:none;border:none;font-size:1.25rem;cursor:pointer;z-index:20;color:var(--body-text-color);padding:.25rem;line-height:1;width:24px;height:24px;text-align:center}.popup-title.svelte-1crbckc.svelte-1crbckc{font-weight:700;margin:0 0 1rem;flex-shrink:0;padding-right:2.5rem}.metadata-table-container.svelte-1crbckc.svelte-1crbckc{flex-grow:1;overflow-y:auto;max-height:calc(100% - 5rem);min-height:0;margin-bottom:1rem}.metadata-table.svelte-1crbckc.svelte-1crbckc{width:100%;border-collapse:collapse;table-layout:auto}.metadata-label.svelte-1crbckc.svelte-1crbckc{background:var(--background-fill-secondary, #f5f5f5);padding:.5rem;font-weight:700;text-align:left;vertical-align:top;width:35%}.metadata-value.svelte-1crbckc.svelte-1crbckc{text-align:left;padding:.5rem;white-space:pre-wrap;word-break:break-all;vertical-align:top}.load-metadata-button.svelte-1crbckc.svelte-1crbckc{margin-top:1rem;padding:.5rem 1rem;background-color:var(--button-primary-background-fill);color:var(--button-primary-text-color);border:none;border-radius:4px;cursor:pointer;align-self:center;flex-shrink:0}.load-metadata-button.svelte-1crbckc.svelte-1crbckc:hover{background-color:var(--button-primary-background-fill-hover)}.no-metadata-message.svelte-1crbckc.svelte-1crbckc{flex-grow:1;display:flex;align-items:center;justify-content:center;color:var(--body-text-color-subdued)}svg.svelte-43sxxs.svelte-43sxxs{width:var(--size-20);height:var(--size-20)}svg.svelte-43sxxs path.svelte-43sxxs{fill:var(--loader-color)}div.svelte-43sxxs.svelte-43sxxs{z-index:var(--layer-2)}.margin.svelte-43sxxs.svelte-43sxxs{margin:var(--size-4)}.wrap.svelte-vusapu.svelte-vusapu{display:flex;flex-direction:column;justify-content:center;align-items:center;z-index:var(--layer-3);transition:opacity .1s ease-in-out;border-radius:var(--block-radius);background:var(--block-background-fill);padding:0 var(--size-6);overflow:hidden;pointer-events:none}.wrap.center.svelte-vusapu.svelte-vusapu{top:0;right:0;left:0}.wrap.default.svelte-vusapu.svelte-vusapu{top:0;right:0;bottom:0;left:0}.hide.svelte-vusapu.svelte-vusapu{opacity:0;pointer-events:none}.generating.svelte-vusapu.svelte-vusapu{animation:svelte-vusapu-pulseStart 1s cubic-bezier(.4,0,.6,1),svelte-vusapu-pulse 2s cubic-bezier(.4,0,.6,1) 1s infinite;border:2px solid var(--color-accent);background:transparent;z-index:var(--layer-1);pointer-events:none}.translucent.svelte-vusapu.svelte-vusapu{background:none}@keyframes svelte-vusapu-pulseStart{0%{opacity:0}to{opacity:1}}@keyframes svelte-vusapu-pulse{0%,to{opacity:1}50%{opacity:.5}}.loading.svelte-vusapu.svelte-vusapu{z-index:var(--layer-2);color:var(--body-text-color)}.eta-bar.svelte-vusapu.svelte-vusapu{position:absolute;top:0;right:0;bottom:0;left:0;transform-origin:left;opacity:.8;z-index:var(--layer-1);transition:10ms;background:var(--background-fill-secondary)}.progress-bar-wrap.svelte-vusapu.svelte-vusapu{border:1px solid var(--border-color-primary);background:var(--background-fill-primary);width:55.5%;height:var(--size-4)}.progress-bar.svelte-vusapu.svelte-vusapu{transform-origin:left;background-color:var(--loader-color);width:var(--size-full);height:var(--size-full)}.progress-level.svelte-vusapu.svelte-vusapu{display:flex;flex-direction:column;align-items:center;gap:1;z-index:var(--layer-2);width:var(--size-full)}.progress-level-inner.svelte-vusapu.svelte-vusapu{margin:var(--size-2) auto;color:var(--body-text-color);font-size:var(--text-sm);font-family:var(--font-mono)}.meta-text.svelte-vusapu.svelte-vusapu{position:absolute;bottom:0;right:0;z-index:var(--layer-2);padding:var(--size-1) var(--size-2);font-size:var(--text-sm);font-family:var(--font-mono)}.meta-text-center.svelte-vusapu.svelte-vusapu{display:flex;position:absolute;top:0;right:0;justify-content:center;align-items:center;transform:translateY(var(--size-6));z-index:var(--layer-2);padding:var(--size-1) var(--size-2);font-size:var(--text-sm);font-family:var(--font-mono);text-align:center}.error.svelte-vusapu.svelte-vusapu{box-shadow:var(--shadow-drop);border:solid 1px var(--error-border-color);border-radius:var(--radius-full);background:var(--error-background-fill);padding-right:var(--size-4);padding-left:var(--size-4);color:var(--error-text-color);font-weight:var(--weight-semibold);font-size:var(--text-lg);line-height:var(--line-lg);font-family:var(--font)}.validation-error.svelte-vusapu.svelte-vusapu{pointer-events:auto;color:var(--error-text-color);font-weight:var(--weight-semibold);font-size:var(--text-lg);line-height:var(--line-lg);font-family:var(--font);position:absolute;background:var(--error-background-fill);top:0;right:0;z-index:var(--layer-3);padding:var(--size-1) var(--size-2);font-size:var(--text-md);text-align:center;border-bottom-left-radius:var(--radius-sm);border-bottom:1px solid var(--error-border-color);border-left:1px solid var(--error-border-color);display:flex;justify-content:space-between;align-items:center;gap:var(--spacing-xl)}.minimal.svelte-vusapu.svelte-vusapu{pointer-events:none}.minimal.svelte-vusapu .progress-text.svelte-vusapu{background:var(--block-background-fill)}.border.svelte-vusapu.svelte-vusapu{border:1px solid var(--border-color-primary)}.clear-status.svelte-vusapu.svelte-vusapu{position:absolute;display:flex;top:var(--size-2);right:var(--size-2);justify-content:flex-end;gap:var(--spacing-sm);z-index:var(--layer-1)}.toast-body.svelte-syezpc{display:flex;position:relative;right:0;left:0;align-items:center;margin:var(--size-6) var(--size-4);margin:auto;border-radius:var(--container-radius);overflow:hidden;pointer-events:auto}.toast-body.error.svelte-syezpc{border:1px solid var(--color-red-700);background:var(--color-red-50)}.dark .toast-body.error.svelte-syezpc{border:1px solid var(--color-red-500);background-color:var(--color-grey-950)}.toast-body.warning.svelte-syezpc{border:1px solid var(--color-yellow-700);background:var(--color-yellow-50)}.dark .toast-body.warning.svelte-syezpc{border:1px solid var(--color-yellow-500);background-color:var(--color-grey-950)}.toast-body.info.svelte-syezpc{border:1px solid var(--color-grey-700);background:var(--color-grey-50)}.dark .toast-body.info.svelte-syezpc{border:1px solid var(--color-grey-500);background-color:var(--color-grey-950)}.toast-body.success.svelte-syezpc{border:1px solid var(--color-green-700);background:var(--color-green-50)}.dark .toast-body.success.svelte-syezpc{border:1px solid var(--color-green-500);background-color:var(--color-grey-950)}.toast-title.svelte-syezpc{display:flex;align-items:center;font-weight:var(--weight-bold);font-size:var(--text-lg);line-height:var(--line-sm)}.toast-title.error.svelte-syezpc{color:var(--color-red-700)}.dark .toast-title.error.svelte-syezpc{color:var(--color-red-50)}.toast-title.warning.svelte-syezpc{color:var(--color-yellow-700)}.dark .toast-title.warning.svelte-syezpc{color:var(--color-yellow-50)}.toast-title.info.svelte-syezpc{color:var(--color-grey-700)}.dark .toast-title.info.svelte-syezpc{color:var(--color-grey-50)}.toast-title.success.svelte-syezpc{color:var(--color-green-700)}.dark .toast-title.success.svelte-syezpc{color:var(--color-green-50)}.toast-close.svelte-syezpc{margin:0 var(--size-3);border-radius:var(--size-3);padding:0px var(--size-1-5);font-size:var(--size-5);line-height:var(--size-5)}.toast-close.error.svelte-syezpc{color:var(--color-red-700)}.dark .toast-close.error.svelte-syezpc{color:var(--color-red-500)}.toast-close.warning.svelte-syezpc{color:var(--color-yellow-700)}.dark .toast-close.warning.svelte-syezpc{color:var(--color-yellow-500)}.toast-close.info.svelte-syezpc{color:var(--color-grey-700)}.dark .toast-close.info.svelte-syezpc{color:var(--color-grey-500)}.toast-close.success.svelte-syezpc{color:var(--color-green-700)}.dark .toast-close.success.svelte-syezpc{color:var(--color-green-500)}.toast-text.svelte-syezpc{font-size:var(--text-lg);word-wrap:break-word;overflow-wrap:break-word;word-break:break-word}.toast-text.error.svelte-syezpc{color:var(--color-red-700)}.dark .toast-text.error.svelte-syezpc{color:var(--color-red-50)}.toast-text.warning.svelte-syezpc{color:var(--color-yellow-700)}.dark .toast-text.warning.svelte-syezpc{color:var(--color-yellow-50)}.toast-text.info.svelte-syezpc{color:var(--color-grey-700)}.dark .toast-text.info.svelte-syezpc{color:var(--color-grey-50)}.toast-text.success.svelte-syezpc{color:var(--color-green-700)}.dark .toast-text.success.svelte-syezpc{color:var(--color-green-50)}.toast-details.svelte-syezpc{margin:var(--size-3) var(--size-3) var(--size-3) 0;width:100%}.toast-icon.svelte-syezpc{display:flex;position:absolute;position:relative;flex-shrink:0;justify-content:center;align-items:center;margin:var(--size-2);border-radius:var(--radius-full);padding:var(--size-1);padding-left:calc(var(--size-1) - 1px);width:35px;height:35px}.toast-icon.error.svelte-syezpc{color:var(--color-red-700)}.dark .toast-icon.error.svelte-syezpc{color:var(--color-red-500)}.toast-icon.warning.svelte-syezpc{color:var(--color-yellow-700)}.dark .toast-icon.warning.svelte-syezpc{color:var(--color-yellow-500)}.toast-icon.info.svelte-syezpc{color:var(--color-grey-700)}.dark .toast-icon.info.svelte-syezpc{color:var(--color-grey-500)}.toast-icon.success.svelte-syezpc{color:var(--color-green-700)}.dark .toast-icon.success.svelte-syezpc{color:var(--color-green-500)}@keyframes svelte-syezpc-countdown{0%{transform:scaleX(1)}to{transform:scaleX(0)}}.timer.svelte-syezpc{position:absolute;bottom:0;left:0;transform-origin:0 0;animation:svelte-syezpc-countdown 10s linear forwards;width:100%;height:var(--size-1)}.timer.error.svelte-syezpc{background:var(--color-red-700)}.dark .timer.error.svelte-syezpc{background:var(--color-red-500)}.timer.warning.svelte-syezpc{background:var(--color-yellow-700)}.dark .timer.warning.svelte-syezpc{background:var(--color-yellow-500)}.timer.info.svelte-syezpc{background:var(--color-grey-700)}.dark .timer.info.svelte-syezpc{background:var(--color-grey-500)}.timer.success.svelte-syezpc{background:var(--color-green-700)}.dark .timer.success.svelte-syezpc{background:var(--color-green-500)}.hidden.svelte-syezpc{display:none}.toast-text.svelte-syezpc a{text-decoration:underline}.toast-wrap.svelte-je2isz{--toast-top:var(--size-4);display:flex;position:fixed;top:calc(var(--toast-top) + var(--size-4));right:var(--size-4);flex-direction:column;align-items:end;gap:var(--size-2);z-index:var(--layer-top);width:calc(100% - var(--size-8))}@media (--screen-sm){.toast-wrap.svelte-je2isz{width:calc(var(--size-96) + var(--size-10))}}.streaming-bar.svelte-ga0jj6{position:absolute;bottom:0;left:0;right:0;height:4px;background-color:var(--primary-600);animation:svelte-ga0jj6-countdown linear forwards;z-index:1}@keyframes svelte-ga0jj6-countdown{0%{transform:translate(0)}to{transform:translate(-100%)}}:global(*::-webkit-scrollbar){width:8px;height:8px;background-color:transparent}:global(*::-webkit-scrollbar-track){background:transparent;border-radius:10px}:global(*::-webkit-scrollbar-thumb){background-color:#8886;border-radius:10px;border:2px solid transparent;background-clip:content-box}:global(*::-webkit-scrollbar-thumb:hover){background-color:#888888b3}:global(html){scrollbar-width:thin;scrollbar-color:rgba(136,136,136,.7) transparent}.gallery-container{position:relative;width:100%;height:100%}button{width:var(--size-full);height:var(--size-full);display:block;border-radius:var(--radius-lg)}.preview{display:flex;position:absolute;flex-direction:column;z-index:var(--layer-2);border-radius:calc(var(--block-radius) - var(--block-border-width));-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);width:var(--size-full);height:var(--size-full)}.preview:focus-visible{outline:none}.preview.minimal{width:fit-content;height:fit-content}.preview:before{content:"";position:absolute;z-index:var(--layer-below);background:var(--background-fill-primary);opacity:.9;width:var(--size-full);height:var(--size-full)}.fixed-height{min-height:var(--size-80);max-height:65vh}@media (--screen-xl){.fixed-height{min-height:450px}}.media-container{height:calc(100% - var(--size-14));width:100%;display:flex;align-items:center;justify-content:center;cursor:pointer}.media-container :global(img),.media-container :global(video){max-width:100%;max-height:100%;object-fit:contain}.thumbnails :global(img){object-fit:cover;width:var(--size-full);height:var(--size-full)}.thumbnails :global(svg){position:absolute;top:var(--size-2);left:var(--size-2);width:50%;height:50%;opacity:50%}.caption{padding:var(--size-2) var(--size-3);overflow:hidden;color:var(--block-label-text-color);font-weight:var(--weight-semibold);text-align:center;text-overflow:ellipsis;white-space:nowrap;align-self:center}.thumbnails{display:flex;position:absolute;bottom:0;justify-content:flex-start;align-items:center;gap:var(--spacing-lg);width:var(--size-full);height:var(--size-14);overflow-x:scroll}.thumbnail-item{--ring-color: transparent;position:relative;box-shadow:inset 0 0 0 1px var(--ring-color),var(--shadow-drop);border:1px solid var(--border-color-primary);border-radius:var(--button-small-radius);background:var(--background-fill-secondary);aspect-ratio:var(--ratio-square);width:var(--size-full);height:var(--size-full);overflow:clip}.thumbnail-item:hover{--ring-color: var(--color-accent);border-color:var(--color-accent);filter:brightness(1.1)}.thumbnail-item.selected{--ring-color: var(--color-accent);border-color:var(--color-accent)}.thumbnail-item :global(svg){position:absolute;top:50%;left:50%;width:50%;height:50%;opacity:50%;transform:translate(-50%,-50%)}.thumbnail-item :global(video){width:var(--size-full);height:var(--size-full);overflow:hidden;object-fit:cover}.thumbnail-small{flex:none;transform:scale(.9);transition:75ms;width:var(--size-9);height:var(--size-9)}.thumbnail-small.selected{--ring-color: var(--color-accent);transform:scale(1);border-color:var(--color-accent)}.grid-wrap{position:relative;padding:var(--size-2);overflow-y:auto}.grid-wrap.fixed-height{min-height:var(--size-80);max-height:65vh}.grid-container{display:grid;position:relative;grid-template-rows:repeat(var(--grid-rows),minmax(100px,1fr));grid-template-columns:repeat(var(--grid-cols),minmax(100px,1fr));grid-auto-rows:minmax(100px,1fr);gap:var(--spacing-lg)}.single-item-wrapper{display:flex;align-items:center;justify-content:center;width:100%;height:100%;padding:var(--spacing-xxl);box-sizing:border-box}.single-item-wrapper .gallery-item-with-name{width:100%;height:100%;max-width:min(300px,80vw);max-height:min(320px,calc(80vh - var(--size-4)));display:flex;flex-direction:column;align-items:center}.single-item-wrapper .gallery-item{width:100%;height:100%;max-width:100%;max-height:100%}.single-item-wrapper .thumbnail-item.thumbnail-lg{display:flex!important;align-items:center!important;justify-content:center!important}.single-item-wrapper .thumbnail-filename{height:var(--size-4);line-height:var(--size-4)}.single-item-wrapper .thumbnail-lg>:global(img),.single-item-wrapper .thumbnail-lg>:global(video){object-fit:var(--object-fit)!important}.thumbnail-lg>:global(img),.thumbnail-lg>:global(video){width:var(--size-full);height:var(--size-full);overflow:hidden;object-fit:var(--object-fit)}.thumbnail-lg:hover .caption-label{opacity:.5}.caption-label{position:absolute;right:var(--block-label-margin);bottom:var(--block-label-margin);z-index:var(--layer-1);border-top:1px solid var(--border-color-primary);border-left:1px solid var(--border-color-primary);border-radius:var(--block-label-radius);background:var(--background-fill-secondary);padding:var(--block-label-padding);max-width:80%;overflow:hidden;font-size:var(--block-label-text-size);text-align:left;text-overflow:ellipsis;white-space:nowrap}.grid-wrap.minimal{padding:0}.gallery-item-with-name{display:flex;flex-direction:column;gap:var(--size-1);width:100%;height:100%}.thumbnail-filename{font-size:var(--text-xs);color:var(--body-text-color);text-align:center;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:0 var(--size-1)}.gallery-item{position:relative;width:100%;height:100%}.metadata-popup{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);background:var(--background-fill-primary, white);border:1px solid var(--border-color-primary);box-shadow:0 4px 8px #0003;z-index:1000;border-radius:8px;max-width:min(90%,600px);max-height:min(50vh,calc(100% - 2rem));min-height:200px;display:flex;flex-direction:column;pointer-events:auto}.popup-content{padding:1rem;display:flex;flex-direction:column;width:100%;box-sizing:border-box;overflow-y:auto;position:relative}.close-button{position:absolute;top:.5rem;right:.5rem;background:none;border:none;font-size:1.25rem;cursor:pointer;z-index:20;color:var(--body-text-color);padding:.25rem;line-height:1;width:24px;height:24px;text-align:center}.popup-title{font-weight:700;margin:0 0 1rem;flex-shrink:0;padding-right:2.5rem}.metadata-table-container{flex-grow:1;overflow-y:auto;max-height:calc(100% - 5rem);min-height:0;margin-bottom:1rem}.metadata-table{width:100%;border-collapse:collapse;table-layout:auto}.metadata-label{background:var(--background-fill-secondary, #f5f5f5);padding:.5rem;font-weight:700;text-align:left;vertical-align:top;width:35%}.metadata-value{text-align:left;padding:.5rem;white-space:pre-wrap;word-break:break-all;vertical-align:top}.load-metadata-button{margin-top:1rem;padding:.5rem 1rem;background-color:var(--button-primary-background-fill);color:var(--button-primary-text-color);border:none;border-radius:4px;cursor:pointer;align-self:center;flex-shrink:0}.load-metadata-button:hover{background-color:var(--button-primary-background-fill-hover)}.no-metadata-message{flex-grow:1;display:flex;align-items:center;justify-content:center;color:var(--body-text-color-subdued)}.container.svelte-1onbytl.svelte-1onbytl{border-radius:var(--radius-lg);overflow:hidden}.container.selected.svelte-1onbytl.svelte-1onbytl{border:2px solid var(--border-color-accent)}.images-wrapper.svelte-1onbytl.svelte-1onbytl{display:flex;gap:var(--spacing-sm)}.container.table.svelte-1onbytl .images-wrapper.svelte-1onbytl{flex-direction:row;align-items:center;padding:var(--spacing-sm);border:1px solid var(--border-color-primary);border-radius:var(--radius-lg);background:var(--background-fill-secondary)}.container.gallery.svelte-1onbytl .images-wrapper.svelte-1onbytl{flex-direction:row;gap:0}.image-container.svelte-1onbytl.svelte-1onbytl{position:relative;flex-shrink:0}.container.table.svelte-1onbytl .image-container.svelte-1onbytl{width:var(--size-12);height:var(--size-12)}.container.gallery.svelte-1onbytl .image-container.svelte-1onbytl{width:var(--size-20);height:var(--size-20);margin-left:calc(-1 * var(--size-8))}.container.gallery.svelte-1onbytl .image-container.svelte-1onbytl:first-child{margin-left:0}.more-indicator.svelte-1onbytl.svelte-1onbytl{display:flex;align-items:center;justify-content:center;font-size:var(--text-lg);font-weight:700;color:var(--border-color-primary)}.container.table.svelte-1onbytl .more-indicator.svelte-1onbytl{width:var(--size-12);height:var(--size-12)}.container.gallery.svelte-1onbytl .more-indicator.svelte-1onbytl{width:var(--size-20);height:var(--size-20);margin-left:calc(-1 * var(--size-8));margin-right:calc(-1 * var(--size-6))}.image-container.svelte-1onbytl img.svelte-1onbytl,.image-container.svelte-1onbytl video.svelte-1onbytl{width:100%;height:100%;object-fit:cover;border-radius:var(--radius-md)}.caption.svelte-1onbytl.svelte-1onbytl{position:absolute;bottom:0;left:0;right:0;background:#000000b3;color:#fff;padding:var(--spacing-xs);font-size:var(--text-xs);text-align:center;border-radius:0 0 var(--radius-md) var(--radius-md);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.container.table.svelte-1onbytl .caption.svelte-1onbytl{display:none}
 
1
+ .block.svelte-239wnu{position:relative;margin:0;box-shadow:var(--block-shadow);border-width:var(--block-border-width);border-color:var(--block-border-color);border-radius:var(--block-radius);background:var(--block-background-fill);width:100%;line-height:var(--line-sm)}.block.fullscreen.svelte-239wnu{border-radius:0}.auto-margin.svelte-239wnu{margin-left:auto;margin-right:auto}.block.border_focus.svelte-239wnu{border-color:var(--color-accent)}.block.border_contrast.svelte-239wnu{border-color:var(--body-text-color)}.padded.svelte-239wnu{padding:var(--block-padding)}.hidden.svelte-239wnu{display:none}.flex.svelte-239wnu{display:flex;flex-direction:column}.hide-container.svelte-239wnu:not(.fullscreen){margin:0;box-shadow:none;--block-border-width:0;background:transparent;padding:0;overflow:visible}.resize-handle.svelte-239wnu{position:absolute;bottom:0;right:0;width:10px;height:10px;fill:var(--block-border-color);cursor:nwse-resize}.fullscreen.svelte-239wnu{position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:1000;overflow:auto}.animating.svelte-239wnu{animation:svelte-239wnu-pop-out .1s ease-out forwards}@keyframes svelte-239wnu-pop-out{0%{position:fixed;top:var(--start-top);left:var(--start-left);width:var(--start-width);height:var(--start-height);z-index:100}to{position:fixed;top:0vh;left:0vw;width:100vw;height:100vh;z-index:1000}}.placeholder.svelte-239wnu{border-radius:var(--block-radius);border-width:var(--block-border-width);border-color:var(--block-border-color);border-style:dashed}Tables */ table,tr,td,th{margin-top:var(--spacing-sm);margin-bottom:var(--spacing-sm);padding:var(--spacing-xl)}.md code,.md pre{background:none;font-family:var(--font-mono);font-size:var(--text-sm);text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:2;tab-size:2;-webkit-hyphens:none;hyphens:none}.md pre[class*=language-]::selection,.md pre[class*=language-] ::selection,.md code[class*=language-]::selection,.md code[class*=language-] ::selection{text-shadow:none;background:#b3d4fc}.md pre{padding:1em;margin:.5em 0;overflow:auto;position:relative;margin-top:var(--spacing-sm);margin-bottom:var(--spacing-sm);box-shadow:none;border:none;border-radius:var(--radius-md);background:var(--code-background-fill);padding:var(--spacing-xxl);font-family:var(--font-mono);text-shadow:none;border-radius:var(--radius-sm);white-space:nowrap;display:block;white-space:pre}.md :not(pre)>code{padding:.1em;border-radius:var(--radius-xs);white-space:normal;background:var(--code-background-fill);border:1px solid var(--panel-border-color);padding:var(--spacing-xxs) var(--spacing-xs)}.md .token.comment,.md .token.prolog,.md .token.doctype,.md .token.cdata{color:#708090}.md .token.punctuation{color:#999}.md .token.namespace{opacity:.7}.md .token.property,.md .token.tag,.md .token.boolean,.md .token.number,.md .token.constant,.md .token.symbol,.md .token.deleted{color:#905}.md .token.selector,.md .token.attr-name,.md .token.string,.md .token.char,.md .token.builtin,.md .token.inserted{color:#690}.md .token.atrule,.md .token.attr-value,.md .token.keyword{color:#07a}.md .token.function,.md .token.class-name{color:#dd4a68}.md .token.regex,.md .token.important,.md .token.variable{color:#e90}.md .token.important,.md .token.bold{font-weight:700}.md .token.italic{font-style:italic}.md .token.entity{cursor:help}.dark .md .token.comment,.dark .md .token.prolog,.dark .md .token.cdata{color:#5c6370}.dark .md .token.doctype,.dark .md .token.punctuation,.dark .md .token.entity{color:#abb2bf}.dark .md .token.attr-name,.dark .md .token.class-name,.dark .md .token.boolean,.dark .md .token.constant,.dark .md .token.number,.dark .md .token.atrule{color:#d19a66}.dark .md .token.keyword{color:#c678dd}.dark .md .token.property,.dark .md .token.tag,.dark .md .token.symbol,.dark .md .token.deleted,.dark .md .token.important{color:#e06c75}.dark .md .token.selector,.dark .md .token.string,.dark .md .token.char,.dark .md .token.builtin,.dark .md .token.inserted,.dark .md .token.regex,.dark .md .token.attr-value,.dark .md .token.attr-value>.token.punctuation{color:#98c379}.dark .md .token.variable,.dark .md .token.operator,.dark .md .token.function{color:#61afef}.dark .md .token.url{color:#56b6c2}span.svelte-1m32c2s div[class*=code_wrap]{position:relative}span.svelte-1m32c2s span.katex{font-size:var(--text-lg);direction:ltr}span.svelte-1m32c2s div[class*=code_wrap]>button{z-index:1;cursor:pointer;border-bottom-left-radius:var(--radius-sm);padding:var(--spacing-md);width:25px;height:25px;position:absolute;right:0}span.svelte-1m32c2s .check{opacity:0;z-index:var(--layer-top);transition:opacity .2s;background:var(--code-background-fill);color:var(--body-text-color);position:absolute;top:var(--size-1-5);left:var(--size-1-5)}span.svelte-1m32c2s p:not(:first-child){margin-top:var(--spacing-xxl)}span.svelte-1m32c2s .md-header-anchor{margin-left:-25px;padding-right:8px;line-height:1;color:var(--body-text-color-subdued);opacity:0}span.svelte-1m32c2s h1:hover .md-header-anchor,span.svelte-1m32c2s h2:hover .md-header-anchor,span.svelte-1m32c2s h3:hover .md-header-anchor,span.svelte-1m32c2s h4:hover .md-header-anchor,span.svelte-1m32c2s h5:hover .md-header-anchor,span.svelte-1m32c2s h6:hover .md-header-anchor{opacity:1}span.md.svelte-1m32c2s .md-header-anchor>svg{color:var(--body-text-color-subdued)}span.svelte-1m32c2s table{word-break:break-word}div.svelte-17qq50w>.md.prose{font-weight:var(--block-info-text-weight);font-size:var(--block-info-text-size);line-height:var(--line-sm)}div.svelte-17qq50w>.md.prose *{color:var(--block-info-text-color)}div.svelte-17qq50w{margin-bottom:var(--spacing-md)}span.has-info.svelte-zgrq3{margin-bottom:var(--spacing-xs)}span.svelte-zgrq3:not(.has-info){margin-bottom:var(--spacing-lg)}span.svelte-zgrq3{display:inline-block;position:relative;z-index:var(--layer-4);border:solid var(--block-title-border-width) var(--block-title-border-color);border-radius:var(--block-title-radius);background:var(--block-title-background-fill);padding:var(--block-title-padding);color:var(--block-title-text-color);font-weight:var(--block-title-text-weight);font-size:var(--block-title-text-size);line-height:var(--line-sm)}span[dir=rtl].svelte-zgrq3{display:block}.hide.svelte-zgrq3{margin:0;height:0}label.svelte-igqdol.svelte-igqdol{display:inline-flex;align-items:center;z-index:var(--layer-2);box-shadow:var(--block-label-shadow);border:var(--block-label-border-width) solid var(--block-label-border-color);border-top:none;border-left:none;border-radius:var(--block-label-radius);background:var(--block-label-background-fill);padding:var(--block-label-padding);pointer-events:none;color:var(--block-label-text-color);font-weight:var(--block-label-text-weight);font-size:var(--block-label-text-size);line-height:var(--line-sm)}.gr-group label.svelte-igqdol.svelte-igqdol{border-top-left-radius:0}label.float.svelte-igqdol.svelte-igqdol{position:absolute;top:var(--block-label-margin);left:var(--block-label-margin)}label.svelte-igqdol.svelte-igqdol:not(.float){position:static;margin-top:var(--block-label-margin);margin-left:var(--block-label-margin)}.hide.svelte-igqdol.svelte-igqdol{display:none}span.svelte-igqdol.svelte-igqdol{opacity:.8;margin-right:var(--size-2);width:calc(var(--block-label-text-size) - 1px);height:calc(var(--block-label-text-size) - 1px)}.hide-label.svelte-igqdol.svelte-igqdol{box-shadow:none;border-width:0;background:transparent;overflow:visible}label[dir=rtl].svelte-igqdol.svelte-igqdol{border:var(--block-label-border-width) solid var(--block-label-border-color);border-top:none;border-right:none;border-bottom-left-radius:var(--block-radius);border-bottom-right-radius:var(--block-label-radius);border-top-left-radius:var(--block-label-radius)}label[dir=rtl].svelte-igqdol span.svelte-igqdol{margin-left:var(--size-2);margin-right:0}.unstyled-link.svelte-151nsdd{all:unset;cursor:pointer}button.svelte-y0enk4{display:flex;justify-content:center;align-items:center;gap:1px;z-index:var(--layer-2);border-radius:var(--radius-xs);color:var(--block-label-text-color);border:1px solid var(--border-color);padding:var(--spacing-xxs)}button.svelte-y0enk4:hover{background-color:var(--background-fill-secondary)}button[disabled].svelte-y0enk4{opacity:.5;box-shadow:none}button[disabled].svelte-y0enk4:hover{cursor:not-allowed}.padded.svelte-y0enk4{background:var(--bg-color)}button.svelte-y0enk4:hover,button.highlight.svelte-y0enk4{cursor:pointer;color:var(--color-accent)}.padded.svelte-y0enk4:hover{color:var(--block-label-text-color)}span.svelte-y0enk4{padding:0 1px;font-size:10px}div.svelte-y0enk4{display:flex;align-items:center;justify-content:center;transition:filter .2s ease-in-out}.x-small.svelte-y0enk4{width:10px;height:10px}.small.svelte-y0enk4{width:14px;height:14px}.medium.svelte-y0enk4{width:20px;height:20px}.large.svelte-y0enk4{width:22px;height:22px}.pending.svelte-y0enk4{animation:svelte-y0enk4-flash .5s infinite}@keyframes svelte-y0enk4-flash{0%{opacity:.5}50%{opacity:1}to{opacity:.5}}.transparent.svelte-y0enk4{background:transparent;border:none;box-shadow:none}.empty.svelte-3w3rth{display:flex;justify-content:center;align-items:center;margin-top:calc(0px - var(--size-6));height:var(--size-full)}.icon.svelte-3w3rth{opacity:.5;height:var(--size-5);color:var(--body-text-color)}.small.svelte-3w3rth{min-height:calc(var(--size-32) - 20px)}.large.svelte-3w3rth{min-height:calc(var(--size-64) - 20px)}.unpadded_box.svelte-3w3rth{margin-top:0}.small_parent.svelte-3w3rth{min-height:100%!important}.dropdown-arrow.svelte-145leq6,.dropdown-arrow.svelte-ihhdbf{fill:currentColor}.circle.svelte-ihhdbf{fill:currentColor;opacity:.1}svg.svelte-pb9pol{animation:svelte-pb9pol-spin 1.5s linear infinite}@keyframes svelte-pb9pol-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}h2.svelte-1xg7h5n{font-size:var(--text-xl)!important}p.svelte-1xg7h5n,h2.svelte-1xg7h5n{white-space:pre-line}.wrap.svelte-1xg7h5n{display:flex;flex-direction:column;justify-content:center;align-items:center;min-height:var(--size-60);color:var(--block-label-text-color);line-height:var(--line-md);height:100%;padding-top:var(--size-3);text-align:center;margin:auto var(--spacing-lg)}.or.svelte-1xg7h5n{color:var(--body-text-color-subdued);display:flex}.icon-wrap.svelte-1xg7h5n{width:30px;margin-bottom:var(--spacing-lg)}@media (--screen-md){.wrap.svelte-1xg7h5n{font-size:var(--text-lg)}}.hovered.svelte-1xg7h5n{color:var(--color-accent)}div.svelte-q32hvf{border-top:1px solid transparent;display:flex;max-height:100%;justify-content:center;align-items:center;gap:var(--spacing-sm);height:auto;align-items:flex-end;color:var(--block-label-text-color);flex-shrink:0}.show_border.svelte-q32hvf{border-top:1px solid var(--block-border-color);margin-top:var(--spacing-xxl);box-shadow:var(--shadow-drop)}.source-selection.svelte-15ls1gu{display:flex;align-items:center;justify-content:center;border-top:1px solid var(--border-color-primary);width:100%;margin-left:auto;margin-right:auto;height:var(--size-10)}.icon.svelte-15ls1gu{width:22px;height:22px;margin:var(--spacing-lg) var(--spacing-xs);padding:var(--spacing-xs);color:var(--neutral-400);border-radius:var(--radius-md)}.selected.svelte-15ls1gu{color:var(--color-accent)}.icon.svelte-15ls1gu:hover,.icon.svelte-15ls1gu:focus{color:var(--color-accent)}.icon-button-wrapper.svelte-1h0hs6p{display:flex;flex-direction:row;align-items:center;justify-content:center;z-index:var(--layer-2);gap:var(--spacing-sm);box-shadow:var(--shadow-drop);border:1px solid var(--border-color-primary);background:var(--block-background-fill);padding:var(--spacing-xxs)}.icon-button-wrapper.hide-top-corner.svelte-1h0hs6p{border-top:none;border-right:none;border-radius:var(--block-label-right-radius)}.icon-button-wrapper.display-top-corner.svelte-1h0hs6p{border-radius:var(--radius-sm) 0 0 var(--radius-sm);top:var(--spacing-sm);right:-1px}.icon-button-wrapper.svelte-1h0hs6p:not(.top-panel){border:1px solid var(--border-color-primary);border-radius:var(--radius-sm)}.top-panel.svelte-1h0hs6p{position:absolute;top:var(--block-label-margin);right:var(--block-label-margin);margin:0}.icon-button-wrapper.svelte-1h0hs6p button{margin:var(--spacing-xxs);border-radius:var(--radius-xs);position:relative}.icon-button-wrapper.svelte-1h0hs6p a.download-link:not(:last-child),.icon-button-wrapper.svelte-1h0hs6p button:not(:last-child){margin-right:var(--spacing-xxs)}.icon-button-wrapper.svelte-1h0hs6p a.download-link:not(:last-child):not(.no-border *):after,.icon-button-wrapper.svelte-1h0hs6p button:not(:last-child):not(.no-border *):after{content:"";position:absolute;right:-4.5px;top:15%;height:70%;width:1px;background-color:var(--border-color-primary)}.icon-button-wrapper.svelte-1h0hs6p>*{height:100%}img.svelte-kxeri3{object-fit:cover}.image-container.svelte-x2tujq.svelte-x2tujq{height:100%;position:relative;min-width:var(--size-20)}.image-container.svelte-x2tujq button.svelte-x2tujq{width:var(--size-full);height:var(--size-full);border-radius:var(--radius-lg);display:flex;align-items:center;justify-content:center}.image-frame.svelte-x2tujq img{width:var(--size-full);height:var(--size-full);object-fit:scale-down}.selectable.svelte-x2tujq.svelte-x2tujq{cursor:crosshair}.fullscreen-controls svg{position:relative;top:0}.image-container:fullscreen{background-color:#000;display:flex;justify-content:center;align-items:center}.image-container:fullscreen img{max-width:90vw;max-height:90vh;object-fit:scale-down}.image-frame.svelte-x2tujq.svelte-x2tujq{width:auto;height:100%;display:flex;align-items:center;justify-content:center}.overlay.svelte-1pwzuub{position:absolute;background-color:#0006;width:100%;height:100%}.hidden.svelte-1pwzuub{display:none}.load-wrap.svelte-1pwzuub{display:flex;justify-content:center;align-items:center;height:100%}.loader.svelte-1pwzuub{display:flex;position:relative;background-color:var(--border-color-accent-subdued);animation:svelte-1pwzuub-shadowPulse 2s linear infinite;box-shadow:-24px 0 var(--border-color-accent-subdued),24px 0 var(--border-color-accent-subdued);margin:var(--spacing-md);border-radius:50%;width:10px;height:10px;scale:.5}@keyframes svelte-1pwzuub-shadowPulse{33%{box-shadow:-24px 0 var(--border-color-accent-subdued),24px 0 #fff;background:#fff}66%{box-shadow:-24px 0 #fff,24px 0 #fff;background:var(--border-color-accent-subdued)}to{box-shadow:-24px 0 #fff,24px 0 var(--border-color-accent-subdued);background:#fff}}.preview.svelte-1k19y3g.svelte-1k19y3g{display:flex;position:absolute;flex-direction:column;z-index:var(--layer-2);border-radius:calc(var(--block-radius) - var(--block-border-width));-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);width:var(--size-full);height:var(--size-full)}.preview.svelte-1k19y3g.svelte-1k19y3g:focus-visible{outline:none}.preview.minimal.svelte-1k19y3g.svelte-1k19y3g{width:fit-content;height:fit-content}.preview.svelte-1k19y3g.svelte-1k19y3g:before{content:"";position:absolute;z-index:var(--layer-below);background:var(--background-fill-primary);opacity:.9;width:var(--size-full);height:var(--size-full)}.fixed-height.svelte-1k19y3g.svelte-1k19y3g{min-height:var(--size-80);max-height:65vh}@media (--screen-xl){.fixed-height.svelte-1k19y3g.svelte-1k19y3g{min-height:450px}}.media-container.svelte-1k19y3g.svelte-1k19y3g{height:calc(100% - var(--size-14));width:100%;display:flex;align-items:center;justify-content:center;cursor:pointer}.media-container.svelte-1k19y3g img,.media-container.svelte-1k19y3g video{max-width:100%;max-height:100%;object-fit:contain}.thumbnails.svelte-1k19y3g img{object-fit:cover;width:var(--size-full);height:var(--size-full)}.thumbnails.svelte-1k19y3g svg{position:absolute;top:var(--size-2);left:var(--size-2);width:50%;height:50%;opacity:50%}.caption.svelte-1k19y3g.svelte-1k19y3g{padding:var(--size-2) var(--size-3);overflow:hidden;color:var(--block-label-text-color);font-weight:var(--weight-semibold);text-align:center;text-overflow:ellipsis;white-space:nowrap;align-self:center}.thumbnails.svelte-1k19y3g.svelte-1k19y3g{display:flex;position:absolute;bottom:0;justify-content:flex-start;align-items:center;gap:var(--spacing-lg);width:var(--size-full);height:var(--size-14);overflow-x:scroll}.thumbnail-item.svelte-1k19y3g.svelte-1k19y3g{--ring-color:transparent;position:relative;box-shadow:inset 0 0 0 1px var(--ring-color),var(--shadow-drop);border:1px solid var(--border-color-primary);border-radius:var(--button-small-radius);background:var(--background-fill-secondary);aspect-ratio:var(--ratio-square);width:var(--size-full);height:var(--size-full);overflow:clip}.thumbnail-item.svelte-1k19y3g.svelte-1k19y3g:hover{--ring-color:var(--color-accent);border-color:var(--color-accent);filter:brightness(1.1)}.thumbnail-item.selected.svelte-1k19y3g.svelte-1k19y3g{--ring-color:var(--color-accent);border-color:var(--color-accent)}.thumbnail-item.svelte-1k19y3g svg{position:absolute;top:50%;left:50%;width:50%;height:50%;opacity:50%;transform:translate(-50%,-50%)}.thumbnail-item.svelte-1k19y3g video{width:var(--size-full);height:var(--size-full);overflow:hidden;object-fit:cover}.thumbnail-small.svelte-1k19y3g.svelte-1k19y3g{flex:none;transform:scale(.9);transition:75ms;width:var(--size-9);height:var(--size-9)}.thumbnail-small.selected.svelte-1k19y3g.svelte-1k19y3g{--ring-color:var(--color-accent);transform:scale(1);border-color:var(--color-accent)}.grid-wrap.svelte-1k19y3g.svelte-1k19y3g{position:relative;padding:var(--size-2);overflow-y:auto}.grid-wrap.fixed-height.svelte-1k19y3g.svelte-1k19y3g{min-height:var(--size-80);max-height:65vh}.grid-container.svelte-1k19y3g.svelte-1k19y3g{display:grid;position:relative;grid-template-rows:repeat(var(--grid-rows),minmax(100px,1fr));grid-template-columns:repeat(var(--grid-cols),minmax(100px,1fr));grid-auto-rows:minmax(100px,1fr);gap:var(--spacing-lg)}.single-item-wrapper.svelte-1k19y3g.svelte-1k19y3g{display:flex;align-items:center;justify-content:center;width:100%;height:100%;padding:var(--spacing-xxl);box-sizing:border-box}.single-item-wrapper.svelte-1k19y3g .gallery-item-with-name.svelte-1k19y3g{width:100%;height:100%;max-width:min(300px,80vw);max-height:min(320px,calc(80vh - var(--size-4)));display:flex;flex-direction:column;align-items:center}.single-item-wrapper.svelte-1k19y3g .gallery-item.svelte-1k19y3g{width:100%;height:100%;max-width:100%;max-height:100%}.single-item-wrapper.svelte-1k19y3g .thumbnail-item.thumbnail-lg.svelte-1k19y3g{display:flex!important;align-items:center!important;justify-content:center!important}.single-item-wrapper.svelte-1k19y3g .thumbnail-filename.svelte-1k19y3g{height:var(--size-4);line-height:var(--size-4)}.single-item-wrapper.svelte-1k19y3g .thumbnail-lg.svelte-1k19y3g>img,.single-item-wrapper.svelte-1k19y3g .thumbnail-lg.svelte-1k19y3g>video{object-fit:var(--object-fit)!important}.thumbnail-lg.svelte-1k19y3g>img,.thumbnail-lg.svelte-1k19y3g>video{width:var(--size-full);height:var(--size-full);overflow:hidden;object-fit:var(--object-fit)}.thumbnail-lg.svelte-1k19y3g:hover .caption-label.svelte-1k19y3g{opacity:.5}.caption-label.svelte-1k19y3g.svelte-1k19y3g{position:absolute;right:var(--block-label-margin);bottom:var(--block-label-margin);z-index:var(--layer-1);border-top:1px solid var(--border-color-primary);border-left:1px solid var(--border-color-primary);border-radius:var(--block-label-radius);background:var(--background-fill-secondary);padding:var(--block-label-padding);max-width:80%;overflow:hidden;font-size:var(--block-label-text-size);text-align:left;text-overflow:ellipsis;white-space:nowrap}.grid-wrap.minimal.svelte-1k19y3g.svelte-1k19y3g{padding:0}.gallery-item-with-name.svelte-1k19y3g.svelte-1k19y3g{display:flex;flex-direction:column;gap:var(--size-1);width:100%;height:100%}.thumbnail-filename.svelte-1k19y3g.svelte-1k19y3g{font-size:var(--text-xs);color:var(--body-text-color);text-align:center;width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:0 var(--size-1)}.gallery-item.svelte-1k19y3g.svelte-1k19y3g{position:relative;width:100%;height:100%}.metadata-popup.svelte-1k19y3g.svelte-1k19y3g{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);background:var(--background-fill-primary, white);border:1px solid var(--border-color-primary);box-shadow:0 4px 8px #0003;z-index:1000;border-radius:8px;max-width:min(90%,600px);max-height:min(50vh,calc(100% - 2rem));min-height:200px;display:flex;flex-direction:column;pointer-events:auto}.popup-content.svelte-1k19y3g.svelte-1k19y3g{padding:1rem;display:flex;flex-direction:column;width:100%;box-sizing:border-box;overflow-y:auto;position:relative}.close-button.svelte-1k19y3g.svelte-1k19y3g{position:absolute;top:.5rem;right:.5rem;background:none;border:none;font-size:1.25rem;cursor:pointer;z-index:20;color:var(--body-text-color);padding:.25rem;line-height:1;width:24px;height:24px;text-align:center}.popup-title.svelte-1k19y3g.svelte-1k19y3g{font-weight:700;margin:0 0 1rem;flex-shrink:0;padding-right:2.5rem}.metadata-table-container.svelte-1k19y3g.svelte-1k19y3g{flex-grow:1;overflow-y:auto;max-height:calc(100% - 5rem);min-height:0;margin-bottom:1rem}.metadata-table.svelte-1k19y3g.svelte-1k19y3g{width:100%;border-collapse:collapse;table-layout:auto}.metadata-label.svelte-1k19y3g.svelte-1k19y3g{background:var(--background-fill-secondary, #f5f5f5);padding:.5rem;font-weight:700;text-align:left;vertical-align:top;width:35%}.metadata-value.svelte-1k19y3g.svelte-1k19y3g{text-align:left;padding:.5rem;white-space:pre-wrap;word-break:break-all;vertical-align:top}.load-metadata-button.svelte-1k19y3g.svelte-1k19y3g{margin-top:1rem;padding:.5rem 1rem;background-color:var(--button-primary-border-color);color:var(--button-primary-text-color);border:none;border-radius:4px;cursor:pointer;align-self:center;flex-shrink:0}.load-metadata-button.svelte-1k19y3g.svelte-1k19y3g:hover{background-color:var(--button-primary-background-fill-hover)}.no-metadata-message.svelte-1k19y3g.svelte-1k19y3g{flex-grow:1;display:flex;align-items:center;justify-content:center;color:var(--body-text-color-subdued)}svg.svelte-43sxxs.svelte-43sxxs{width:var(--size-20);height:var(--size-20)}svg.svelte-43sxxs path.svelte-43sxxs{fill:var(--loader-color)}div.svelte-43sxxs.svelte-43sxxs{z-index:var(--layer-2)}.margin.svelte-43sxxs.svelte-43sxxs{margin:var(--size-4)}.wrap.svelte-vusapu.svelte-vusapu{display:flex;flex-direction:column;justify-content:center;align-items:center;z-index:var(--layer-3);transition:opacity .1s ease-in-out;border-radius:var(--block-radius);background:var(--block-background-fill);padding:0 var(--size-6);overflow:hidden;pointer-events:none}.wrap.center.svelte-vusapu.svelte-vusapu{top:0;right:0;left:0}.wrap.default.svelte-vusapu.svelte-vusapu{top:0;right:0;bottom:0;left:0}.hide.svelte-vusapu.svelte-vusapu{opacity:0;pointer-events:none}.generating.svelte-vusapu.svelte-vusapu{animation:svelte-vusapu-pulseStart 1s cubic-bezier(.4,0,.6,1),svelte-vusapu-pulse 2s cubic-bezier(.4,0,.6,1) 1s infinite;border:2px solid var(--color-accent);background:transparent;z-index:var(--layer-1);pointer-events:none}.translucent.svelte-vusapu.svelte-vusapu{background:none}@keyframes svelte-vusapu-pulseStart{0%{opacity:0}to{opacity:1}}@keyframes svelte-vusapu-pulse{0%,to{opacity:1}50%{opacity:.5}}.loading.svelte-vusapu.svelte-vusapu{z-index:var(--layer-2);color:var(--body-text-color)}.eta-bar.svelte-vusapu.svelte-vusapu{position:absolute;top:0;right:0;bottom:0;left:0;transform-origin:left;opacity:.8;z-index:var(--layer-1);transition:10ms;background:var(--background-fill-secondary)}.progress-bar-wrap.svelte-vusapu.svelte-vusapu{border:1px solid var(--border-color-primary);background:var(--background-fill-primary);width:55.5%;height:var(--size-4)}.progress-bar.svelte-vusapu.svelte-vusapu{transform-origin:left;background-color:var(--loader-color);width:var(--size-full);height:var(--size-full)}.progress-level.svelte-vusapu.svelte-vusapu{display:flex;flex-direction:column;align-items:center;gap:1;z-index:var(--layer-2);width:var(--size-full)}.progress-level-inner.svelte-vusapu.svelte-vusapu{margin:var(--size-2) auto;color:var(--body-text-color);font-size:var(--text-sm);font-family:var(--font-mono)}.meta-text.svelte-vusapu.svelte-vusapu{position:absolute;bottom:0;right:0;z-index:var(--layer-2);padding:var(--size-1) var(--size-2);font-size:var(--text-sm);font-family:var(--font-mono)}.meta-text-center.svelte-vusapu.svelte-vusapu{display:flex;position:absolute;top:0;right:0;justify-content:center;align-items:center;transform:translateY(var(--size-6));z-index:var(--layer-2);padding:var(--size-1) var(--size-2);font-size:var(--text-sm);font-family:var(--font-mono);text-align:center}.error.svelte-vusapu.svelte-vusapu{box-shadow:var(--shadow-drop);border:solid 1px var(--error-border-color);border-radius:var(--radius-full);background:var(--error-background-fill);padding-right:var(--size-4);padding-left:var(--size-4);color:var(--error-text-color);font-weight:var(--weight-semibold);font-size:var(--text-lg);line-height:var(--line-lg);font-family:var(--font)}.validation-error.svelte-vusapu.svelte-vusapu{pointer-events:auto;color:var(--error-text-color);font-weight:var(--weight-semibold);font-size:var(--text-lg);line-height:var(--line-lg);font-family:var(--font);position:absolute;background:var(--error-background-fill);top:0;right:0;z-index:var(--layer-3);padding:var(--size-1) var(--size-2);font-size:var(--text-md);text-align:center;border-bottom-left-radius:var(--radius-sm);border-bottom:1px solid var(--error-border-color);border-left:1px solid var(--error-border-color);display:flex;justify-content:space-between;align-items:center;gap:var(--spacing-xl)}.minimal.svelte-vusapu.svelte-vusapu{pointer-events:none}.minimal.svelte-vusapu .progress-text.svelte-vusapu{background:var(--block-background-fill)}.border.svelte-vusapu.svelte-vusapu{border:1px solid var(--border-color-primary)}.clear-status.svelte-vusapu.svelte-vusapu{position:absolute;display:flex;top:var(--size-2);right:var(--size-2);justify-content:flex-end;gap:var(--spacing-sm);z-index:var(--layer-1)}.toast-body.svelte-syezpc{display:flex;position:relative;right:0;left:0;align-items:center;margin:var(--size-6) var(--size-4);margin:auto;border-radius:var(--container-radius);overflow:hidden;pointer-events:auto}.toast-body.error.svelte-syezpc{border:1px solid var(--color-red-700);background:var(--color-red-50)}.dark .toast-body.error.svelte-syezpc{border:1px solid var(--color-red-500);background-color:var(--color-grey-950)}.toast-body.warning.svelte-syezpc{border:1px solid var(--color-yellow-700);background:var(--color-yellow-50)}.dark .toast-body.warning.svelte-syezpc{border:1px solid var(--color-yellow-500);background-color:var(--color-grey-950)}.toast-body.info.svelte-syezpc{border:1px solid var(--color-grey-700);background:var(--color-grey-50)}.dark .toast-body.info.svelte-syezpc{border:1px solid var(--color-grey-500);background-color:var(--color-grey-950)}.toast-body.success.svelte-syezpc{border:1px solid var(--color-green-700);background:var(--color-green-50)}.dark .toast-body.success.svelte-syezpc{border:1px solid var(--color-green-500);background-color:var(--color-grey-950)}.toast-title.svelte-syezpc{display:flex;align-items:center;font-weight:var(--weight-bold);font-size:var(--text-lg);line-height:var(--line-sm)}.toast-title.error.svelte-syezpc{color:var(--color-red-700)}.dark .toast-title.error.svelte-syezpc{color:var(--color-red-50)}.toast-title.warning.svelte-syezpc{color:var(--color-yellow-700)}.dark .toast-title.warning.svelte-syezpc{color:var(--color-yellow-50)}.toast-title.info.svelte-syezpc{color:var(--color-grey-700)}.dark .toast-title.info.svelte-syezpc{color:var(--color-grey-50)}.toast-title.success.svelte-syezpc{color:var(--color-green-700)}.dark .toast-title.success.svelte-syezpc{color:var(--color-green-50)}.toast-close.svelte-syezpc{margin:0 var(--size-3);border-radius:var(--size-3);padding:0px var(--size-1-5);font-size:var(--size-5);line-height:var(--size-5)}.toast-close.error.svelte-syezpc{color:var(--color-red-700)}.dark .toast-close.error.svelte-syezpc{color:var(--color-red-500)}.toast-close.warning.svelte-syezpc{color:var(--color-yellow-700)}.dark .toast-close.warning.svelte-syezpc{color:var(--color-yellow-500)}.toast-close.info.svelte-syezpc{color:var(--color-grey-700)}.dark .toast-close.info.svelte-syezpc{color:var(--color-grey-500)}.toast-close.success.svelte-syezpc{color:var(--color-green-700)}.dark .toast-close.success.svelte-syezpc{color:var(--color-green-500)}.toast-text.svelte-syezpc{font-size:var(--text-lg);word-wrap:break-word;overflow-wrap:break-word;word-break:break-word}.toast-text.error.svelte-syezpc{color:var(--color-red-700)}.dark .toast-text.error.svelte-syezpc{color:var(--color-red-50)}.toast-text.warning.svelte-syezpc{color:var(--color-yellow-700)}.dark .toast-text.warning.svelte-syezpc{color:var(--color-yellow-50)}.toast-text.info.svelte-syezpc{color:var(--color-grey-700)}.dark .toast-text.info.svelte-syezpc{color:var(--color-grey-50)}.toast-text.success.svelte-syezpc{color:var(--color-green-700)}.dark .toast-text.success.svelte-syezpc{color:var(--color-green-50)}.toast-details.svelte-syezpc{margin:var(--size-3) var(--size-3) var(--size-3) 0;width:100%}.toast-icon.svelte-syezpc{display:flex;position:absolute;position:relative;flex-shrink:0;justify-content:center;align-items:center;margin:var(--size-2);border-radius:var(--radius-full);padding:var(--size-1);padding-left:calc(var(--size-1) - 1px);width:35px;height:35px}.toast-icon.error.svelte-syezpc{color:var(--color-red-700)}.dark .toast-icon.error.svelte-syezpc{color:var(--color-red-500)}.toast-icon.warning.svelte-syezpc{color:var(--color-yellow-700)}.dark .toast-icon.warning.svelte-syezpc{color:var(--color-yellow-500)}.toast-icon.info.svelte-syezpc{color:var(--color-grey-700)}.dark .toast-icon.info.svelte-syezpc{color:var(--color-grey-500)}.toast-icon.success.svelte-syezpc{color:var(--color-green-700)}.dark .toast-icon.success.svelte-syezpc{color:var(--color-green-500)}@keyframes svelte-syezpc-countdown{0%{transform:scaleX(1)}to{transform:scaleX(0)}}.timer.svelte-syezpc{position:absolute;bottom:0;left:0;transform-origin:0 0;animation:svelte-syezpc-countdown 10s linear forwards;width:100%;height:var(--size-1)}.timer.error.svelte-syezpc{background:var(--color-red-700)}.dark .timer.error.svelte-syezpc{background:var(--color-red-500)}.timer.warning.svelte-syezpc{background:var(--color-yellow-700)}.dark .timer.warning.svelte-syezpc{background:var(--color-yellow-500)}.timer.info.svelte-syezpc{background:var(--color-grey-700)}.dark .timer.info.svelte-syezpc{background:var(--color-grey-500)}.timer.success.svelte-syezpc{background:var(--color-green-700)}.dark .timer.success.svelte-syezpc{background:var(--color-green-500)}.hidden.svelte-syezpc{display:none}.toast-text.svelte-syezpc a{text-decoration:underline}.toast-wrap.svelte-je2isz{--toast-top:var(--size-4);display:flex;position:fixed;top:calc(var(--toast-top) + var(--size-4));right:var(--size-4);flex-direction:column;align-items:end;gap:var(--size-2);z-index:var(--layer-top);width:calc(100% - var(--size-8))}@media (--screen-sm){.toast-wrap.svelte-je2isz{width:calc(var(--size-96) + var(--size-10))}}.streaming-bar.svelte-ga0jj6{position:absolute;bottom:0;left:0;right:0;height:4px;background-color:var(--primary-600);animation:svelte-ga0jj6-countdown linear forwards;z-index:1}@keyframes svelte-ga0jj6-countdown{0%{transform:translate(0)}to{transform:translate(-100%)}}.gallery-container{position:relative;width:100%;height:100%}button{width:var(--size-full);height:var(--size-full);display:block;border-radius:var(--radius-lg)}.container.svelte-1onbytl.svelte-1onbytl{border-radius:var(--radius-lg);overflow:hidden}.container.selected.svelte-1onbytl.svelte-1onbytl{border:2px solid var(--border-color-accent)}.images-wrapper.svelte-1onbytl.svelte-1onbytl{display:flex;gap:var(--spacing-sm)}.container.table.svelte-1onbytl .images-wrapper.svelte-1onbytl{flex-direction:row;align-items:center;padding:var(--spacing-sm);border:1px solid var(--border-color-primary);border-radius:var(--radius-lg);background:var(--background-fill-secondary)}.container.gallery.svelte-1onbytl .images-wrapper.svelte-1onbytl{flex-direction:row;gap:0}.image-container.svelte-1onbytl.svelte-1onbytl{position:relative;flex-shrink:0}.container.table.svelte-1onbytl .image-container.svelte-1onbytl{width:var(--size-12);height:var(--size-12)}.container.gallery.svelte-1onbytl .image-container.svelte-1onbytl{width:var(--size-20);height:var(--size-20);margin-left:calc(-1 * var(--size-8))}.container.gallery.svelte-1onbytl .image-container.svelte-1onbytl:first-child{margin-left:0}.more-indicator.svelte-1onbytl.svelte-1onbytl{display:flex;align-items:center;justify-content:center;font-size:var(--text-lg);font-weight:700;color:var(--border-color-primary)}.container.table.svelte-1onbytl .more-indicator.svelte-1onbytl{width:var(--size-12);height:var(--size-12)}.container.gallery.svelte-1onbytl .more-indicator.svelte-1onbytl{width:var(--size-20);height:var(--size-20);margin-left:calc(-1 * var(--size-8));margin-right:calc(-1 * var(--size-6))}.image-container.svelte-1onbytl img.svelte-1onbytl,.image-container.svelte-1onbytl video.svelte-1onbytl{width:100%;height:100%;object-fit:cover;border-radius:var(--radius-md)}.caption.svelte-1onbytl.svelte-1onbytl{position:absolute;bottom:0;left:0;right:0;background:#000000b3;color:#fff;padding:var(--spacing-xs);font-size:var(--text-xs);text-align:center;border-radius:0 0 var(--radius-md) var(--radius-md);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.container.table.svelte-1onbytl .caption.svelte-1onbytl{display:none}
src/demo/app.py CHANGED
@@ -3,8 +3,7 @@ import gradio as gr
3
  from gradio_folderexplorer import FolderExplorer
4
  from gradio_folderexplorer.helpers import load_media_from_folder
5
  from gradio_mediagallery import MediaGallery
6
- from gradio_mediagallery.helpers import extract_metadata, transfer_metadata
7
- import os
8
 
9
  # Configuration constant for the root directory containing media files
10
  ROOT_DIR_PATH = "./src/examples"
@@ -29,7 +28,7 @@ def handle_load_metadata(image_data: gr.EventData) -> List[Any]:
29
  )
30
 
31
  # UI layout and logic
32
- with gr.Blocks() as demo:
33
  """
34
  A Gradio interface for browsing and displaying media files with metadata extraction.
35
  """
 
3
  from gradio_folderexplorer import FolderExplorer
4
  from gradio_folderexplorer.helpers import load_media_from_folder
5
  from gradio_mediagallery import MediaGallery
6
+ from gradio_mediagallery.helpers import transfer_metadata
 
7
 
8
  # Configuration constant for the root directory containing media files
9
  ROOT_DIR_PATH = "./src/examples"
 
28
  )
29
 
30
  # UI layout and logic
31
+ with gr.Blocks(theme=gr.themes.Ocean()) as demo:
32
  """
33
  A Gradio interface for browsing and displaying media files with metadata extraction.
34
  """
src/demo/space.py CHANGED
@@ -43,8 +43,7 @@ import gradio as gr
43
  from gradio_folderexplorer import FolderExplorer
44
  from gradio_folderexplorer.helpers import load_media_from_folder
45
  from gradio_mediagallery import MediaGallery
46
- from gradio_mediagallery.helpers import extract_metadata, transfer_metadata
47
- import os
48
 
49
  # Configuration constant for the root directory containing media files
50
  ROOT_DIR_PATH = "./src/examples"
@@ -69,7 +68,7 @@ def handle_load_metadata(image_data: gr.EventData) -> List[Any]:
69
  )
70
 
71
  # UI layout and logic
72
- with gr.Blocks() as demo:
73
  \"\"\"
74
  A Gradio interface for browsing and displaying media files with metadata extraction.
75
  \"\"\"
 
43
  from gradio_folderexplorer import FolderExplorer
44
  from gradio_folderexplorer.helpers import load_media_from_folder
45
  from gradio_mediagallery import MediaGallery
46
+ from gradio_mediagallery.helpers import transfer_metadata
 
47
 
48
  # Configuration constant for the root directory containing media files
49
  ROOT_DIR_PATH = "./src/examples"
 
68
  )
69
 
70
  # UI layout and logic
71
+ with gr.Blocks(theme=gr.themes.Ocean()) as demo:
72
  \"\"\"
73
  A Gradio interface for browsing and displaying media files with metadata extraction.
74
  \"\"\"
src/frontend/Gallery.css CHANGED
@@ -1,31 +1,3 @@
1
- :global(*::-webkit-scrollbar) {
2
- width: 8px;
3
- height: 8px;
4
- background-color: transparent;
5
- }
6
-
7
- :global(*::-webkit-scrollbar-track) {
8
- background: transparent;
9
- border-radius: 10px;
10
- }
11
-
12
- :global(*::-webkit-scrollbar-thumb) {
13
- background-color: rgba(136, 136, 136, 0.4);
14
- border-radius: 10px;
15
- border: 2px solid transparent;
16
- background-clip: content-box;
17
- }
18
-
19
- :global(*::-webkit-scrollbar-thumb:hover) {
20
- background-color: rgba(136, 136, 136, 0.7);
21
- }
22
-
23
- /* Para Firefox */
24
- :global(html) {
25
- scrollbar-width: thin;
26
- scrollbar-color: rgba(136, 136, 136, 0.7) transparent;
27
- }
28
-
29
  /**
30
  * Styles for the gallery container, which holds the entire component.
31
  */
@@ -45,427 +17,3 @@
45
  border-radius: var(--radius-lg);
46
  }
47
 
48
- /**
49
- * Styles for the preview mode, displaying a selected media item.
50
- */
51
- .preview {
52
- display: flex;
53
- position: absolute;
54
- flex-direction: column;
55
- z-index: var(--layer-2);
56
- border-radius: calc(var(--block-radius) - var(--block-border-width));
57
- -webkit-backdrop-filter: blur(8px);
58
- backdrop-filter: blur(8px);
59
- width: var(--size-full);
60
- height: var(--size-full);
61
- }
62
-
63
- .preview:focus-visible {
64
- outline: none;
65
- }
66
-
67
- .preview.minimal {
68
- width: fit-content;
69
- height: fit-content;
70
- }
71
-
72
- .preview::before {
73
- content: "";
74
- position: absolute;
75
- z-index: var(--layer-below);
76
- background: var(--background-fill-primary);
77
- opacity: 0.9;
78
- width: var(--size-full);
79
- height: var(--size-full);
80
- }
81
-
82
- /**
83
- * Styles for the grid wrapper with fixed height constraints.
84
- */
85
- .fixed-height {
86
- min-height: var(--size-80);
87
- max-height: 65vh;
88
- }
89
-
90
- @media (--screen-xl) {
91
- .fixed-height {
92
- min-height: 450px;
93
- }
94
- }
95
-
96
- /**
97
- * Styles for the media container in preview mode.
98
- */
99
- .media-container {
100
- height: calc(100% - var(--size-14));
101
- width: 100%;
102
- display: flex;
103
- align-items: center;
104
- justify-content: center;
105
- cursor: pointer;
106
- }
107
-
108
- .media-container :global(img),
109
- .media-container :global(video) {
110
- max-width: 100%;
111
- max-height: 100%;
112
- object-fit: contain;
113
- }
114
-
115
- /**
116
- * Styles for thumbnails in the preview mode carousel.
117
- */
118
- .thumbnails :global(img) {
119
- object-fit: cover;
120
- width: var(--size-full);
121
- height: var(--size-full);
122
- }
123
-
124
- .thumbnails :global(svg) {
125
- position: absolute;
126
- top: var(--size-2);
127
- left: var(--size-2);
128
- width: 50%;
129
- height: 50%;
130
- opacity: 50%;
131
- }
132
-
133
- /**
134
- * Styles for captions in preview mode.
135
- */
136
- .caption {
137
- padding: var(--size-2) var(--size-3);
138
- overflow: hidden;
139
- color: var(--block-label-text-color);
140
- font-weight: var(--weight-semibold);
141
- text-align: center;
142
- text-overflow: ellipsis;
143
- white-space: nowrap;
144
- align-self: center;
145
- }
146
-
147
- /**
148
- * Styles for the thumbnails carousel in preview mode.
149
- */
150
- .thumbnails {
151
- display: flex;
152
- position: absolute;
153
- bottom: 0;
154
- justify-content: flex-start;
155
- align-items: center;
156
- gap: var(--spacing-lg);
157
- width: var(--size-full);
158
- height: var(--size-14);
159
- overflow-x: scroll;
160
- }
161
-
162
- /**
163
- * Styles for individual thumbnail items.
164
- */
165
- .thumbnail-item {
166
- --ring-color: transparent;
167
- position: relative;
168
- box-shadow: inset 0 0 0 1px var(--ring-color), var(--shadow-drop);
169
- border: 1px solid var(--border-color-primary);
170
- border-radius: var(--button-small-radius);
171
- background: var(--background-fill-secondary);
172
- aspect-ratio: var(--ratio-square);
173
- width: var(--size-full);
174
- height: var(--size-full);
175
- overflow: clip;
176
- }
177
-
178
- .thumbnail-item:hover {
179
- --ring-color: var(--color-accent);
180
- border-color: var(--color-accent);
181
- filter: brightness(1.1);
182
- }
183
-
184
- .thumbnail-item.selected {
185
- --ring-color: var(--color-accent);
186
- border-color: var(--color-accent);
187
- }
188
-
189
- .thumbnail-item :global(svg) {
190
- position: absolute;
191
- top: 50%;
192
- left: 50%;
193
- width: 50%;
194
- height: 50%;
195
- opacity: 50%;
196
- transform: translate(-50%, -50%);
197
- }
198
-
199
- .thumbnail-item :global(video) {
200
- width: var(--size-full);
201
- height: var(--size-full);
202
- overflow: hidden;
203
- object-fit: cover;
204
- }
205
-
206
- /**
207
- * Styles for small thumbnails in the preview carousel.
208
- */
209
- .thumbnail-small {
210
- flex: none;
211
- transform: scale(0.9);
212
- transition: 0.075s;
213
- width: var(--size-9);
214
- height: var(--size-9);
215
- }
216
-
217
- .thumbnail-small.selected {
218
- --ring-color: var(--color-accent);
219
- transform: scale(1);
220
- border-color: var(--color-accent);
221
- }
222
-
223
- /**
224
- * Styles for the grid wrapper containing the gallery items.
225
- */
226
- .grid-wrap {
227
- position: relative;
228
- padding: var(--size-2);
229
- overflow-y: auto;
230
- }
231
-
232
- .grid-wrap.fixed-height {
233
- min-height: var(--size-80);
234
- max-height: 65vh;
235
- }
236
-
237
- /**
238
- * Styles for the grid container for multiple items.
239
- */
240
- .grid-container {
241
- display: grid;
242
- position: relative;
243
- grid-template-rows: repeat(var(--grid-rows), minmax(100px, 1fr));
244
- grid-template-columns: repeat(var(--grid-cols), minmax(100px, 1fr));
245
- grid-auto-rows: minmax(100px, 1fr);
246
- gap: var(--spacing-lg);
247
- }
248
-
249
- /**
250
- * Styles for single-item view wrapper.
251
- */
252
- .single-item-wrapper {
253
- display: flex;
254
- align-items: center;
255
- justify-content: center;
256
- width: 100%;
257
- height: 100%;
258
- padding: var(--spacing-xxl);
259
- box-sizing: border-box;
260
- }
261
-
262
- .single-item-wrapper .gallery-item-with-name {
263
- width: 100%;
264
- height: 100%;
265
- max-width: min(300px, 80vw);
266
- max-height: min(320px, calc(80vh - var(--size-4)));
267
- display: flex;
268
- flex-direction: column;
269
- align-items: center;
270
- }
271
-
272
- .single-item-wrapper .gallery-item {
273
- width: 100%;
274
- height: 100%;
275
- max-width: 100%;
276
- max-height: 100%;
277
- }
278
-
279
- .single-item-wrapper .thumbnail-item.thumbnail-lg {
280
- display: flex !important;
281
- align-items: center !important;
282
- justify-content: center !important;
283
- }
284
-
285
- .single-item-wrapper .thumbnail-filename {
286
- height: var(--size-4);
287
- line-height: var(--size-4);
288
- }
289
-
290
- .single-item-wrapper .thumbnail-lg > :global(img),
291
- .single-item-wrapper .thumbnail-lg > :global(video) {
292
- object-fit: var(--object-fit) !important;
293
- }
294
-
295
- /**
296
- * Styles for large thumbnails in the grid or single-item view.
297
- */
298
- .thumbnail-lg > :global(img),
299
- .thumbnail-lg > :global(video) {
300
- width: var(--size-full);
301
- height: var(--size-full);
302
- overflow: hidden;
303
- object-fit: var(--object-fit);
304
- }
305
-
306
- .thumbnail-lg:hover .caption-label {
307
- opacity: 0.5;
308
- }
309
-
310
- /**
311
- * Styles for captions in the grid or single-item view.
312
- */
313
- .caption-label {
314
- position: absolute;
315
- right: var(--block-label-margin);
316
- bottom: var(--block-label-margin);
317
- z-index: var(--layer-1);
318
- border-top: 1px solid var(--border-color-primary);
319
- border-left: 1px solid var(--border-color-primary);
320
- border-radius: var(--block-label-radius);
321
- background: var(--background-fill-secondary);
322
- padding: var(--block-label-padding);
323
- max-width: 80%;
324
- overflow: hidden;
325
- font-size: var(--block-label-text-size);
326
- text-align: left;
327
- text-overflow: ellipsis;
328
- white-space: nowrap;
329
- }
330
-
331
- .grid-wrap.minimal {
332
- padding: 0;
333
- }
334
-
335
- /**
336
- * Styles for gallery items with associated filenames.
337
- */
338
- .gallery-item-with-name {
339
- display: flex;
340
- flex-direction: column;
341
- gap: var(--size-1);
342
- width: 100%;
343
- height: 100%;
344
- }
345
-
346
- .thumbnail-filename {
347
- font-size: var(--text-xs);
348
- color: var(--body-text-color);
349
- text-align: center;
350
- width: 100%;
351
- overflow: hidden;
352
- text-overflow: ellipsis;
353
- white-space: nowrap;
354
- padding: 0 var(--size-1);
355
- }
356
-
357
- .gallery-item {
358
- position: relative;
359
- width: 100%;
360
- height: 100%;
361
- }
362
-
363
- /**
364
- * Styles for the metadata popup displayed in preview mode.
365
- */
366
- .metadata-popup {
367
- position: fixed;
368
- top: 50%;
369
- left: 50%;
370
- transform: translate(-50%, -50%);
371
- background: var(--background-fill-primary, white);
372
- border: 1px solid var(--border-color-primary);
373
- box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
374
- z-index: 1000;
375
- border-radius: 8px;
376
- max-width: min(90%, 600px);
377
- max-height: min(50vh, calc(100% - 2rem));
378
- min-height: 200px;
379
- display: flex;
380
- flex-direction: column;
381
- pointer-events: auto;
382
- }
383
-
384
- .popup-content {
385
- padding: 1rem;
386
- display: flex;
387
- flex-direction: column;
388
- width: 100%;
389
- box-sizing: border-box;
390
- overflow-y: auto;
391
- position: relative;
392
- }
393
-
394
- .close-button {
395
- position: absolute;
396
- top: 0.5rem;
397
- right: 0.5rem;
398
- background: none;
399
- border: none;
400
- font-size: 1.25rem;
401
- cursor: pointer;
402
- z-index: 20;
403
- color: var(--body-text-color);
404
- padding: 0.25rem;
405
- line-height: 1;
406
- width: 24px;
407
- height: 24px;
408
- text-align: center;
409
- }
410
-
411
- .popup-title {
412
- font-weight: bold;
413
- margin: 0 0 1rem 0;
414
- flex-shrink: 0;
415
- padding-right: 2.5rem;
416
- }
417
-
418
- .metadata-table-container {
419
- flex-grow: 1;
420
- overflow-y: auto;
421
- max-height: calc(100% - 5rem);
422
- min-height: 0;
423
- margin-bottom: 1rem;
424
- }
425
-
426
- .metadata-table {
427
- width: 100%;
428
- border-collapse: collapse;
429
- table-layout: auto;
430
- }
431
-
432
- .metadata-label {
433
- background: var(--background-fill-secondary, #f5f5f5);
434
- padding: 0.5rem;
435
- font-weight: bold;
436
- text-align: left;
437
- vertical-align: top;
438
- width: 35%;
439
- }
440
-
441
- .metadata-value {
442
- text-align: left;
443
- padding: 0.5rem;
444
- white-space: pre-wrap;
445
- word-break: break-all;
446
- vertical-align: top;
447
- }
448
-
449
- .load-metadata-button {
450
- margin-top: 1rem;
451
- padding: 0.5rem 1rem;
452
- background-color: var(--button-primary-background-fill);
453
- color: var(--button-primary-text-color);
454
- border: none;
455
- border-radius: 4px;
456
- cursor: pointer;
457
- align-self: center;
458
- flex-shrink: 0;
459
- }
460
-
461
- .load-metadata-button:hover {
462
- background-color: var(--button-primary-background-fill-hover);
463
- }
464
-
465
- .no-metadata-message {
466
- flex-grow: 1;
467
- display: flex;
468
- align-items: center;
469
- justify-content: center;
470
- color: var(--body-text-color-subdued);
471
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  /**
2
  * Styles for the gallery container, which holds the entire component.
3
  */
 
17
  border-radius: var(--radius-lg);
18
  }
19
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/frontend/shared/Gallery.svelte CHANGED
@@ -650,27 +650,8 @@
650
  </div>
651
  {/if}
652
 
653
- <style lang="postcss">
654
- /**
655
- * Styles for the gallery container, which holds the entire component.
656
- */
657
- .gallery-container {
658
- position: relative;
659
- width: 100%;
660
- height: 100%;
661
- }
662
-
663
- /**
664
- * Styles for buttons to ensure they fill their container.
665
- */
666
- button {
667
- width: var(--size-full);
668
- height: var(--size-full);
669
- display: block;
670
- border-radius: var(--radius-lg);
671
- }
672
-
673
- /**
674
  * Styles for the preview mode, displaying a selected media item.
675
  */
676
  .preview {
@@ -1074,7 +1055,7 @@
1074
  .load-metadata-button {
1075
  margin-top: 1rem;
1076
  padding: 0.5rem 1rem;
1077
- background-color: var(--button-primary-background-fill);
1078
  color: var(--button-primary-text-color);
1079
  border: none;
1080
  border-radius: 4px;
@@ -1095,5 +1076,4 @@
1095
  color: var(--body-text-color-subdued);
1096
  }
1097
 
1098
-
1099
  </style>
 
650
  </div>
651
  {/if}
652
 
653
+ <style>
654
+ /**
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
655
  * Styles for the preview mode, displaying a selected media item.
656
  */
657
  .preview {
 
1055
  .load-metadata-button {
1056
  margin-top: 1rem;
1057
  padding: 0.5rem 1rem;
1058
+ background-color: var(--button-primary-border-color);
1059
  color: var(--button-primary-text-color);
1060
  border: none;
1061
  border-radius: 4px;
 
1076
  color: var(--body-text-color-subdued);
1077
  }
1078
 
 
1079
  </style>
src/pyproject.toml CHANGED
@@ -8,7 +8,7 @@ build-backend = "hatchling.build"
8
 
9
  [project]
10
  name = "gradio_mediagallery"
11
- version = "0.0.1"
12
  description = "Python library for easily interacting with trained machine learning models"
13
  readme = "README.md"
14
  license = "Apache-2.0"
 
8
 
9
  [project]
10
  name = "gradio_mediagallery"
11
+ version = "0.0.2"
12
  description = "Python library for easily interacting with trained machine learning models"
13
  readme = "README.md"
14
  license = "Apache-2.0"