@nice2dev/ui-tools 1.2.0 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,108 @@
1
1
  # @nice2dev/ui-tools
2
2
 
3
+ ## 1.2.1
4
+
5
+ ### Patch Changes
6
+
7
+ - 8c82c30: 1.2.1 — the decisions that waited since 1.2.0, and the debts the CI gates were holding. One API
8
+ change, agreed: `NiceIconSuggestorAI` suggests Nice icons only. Two stylesheets to import if you use
9
+ the packages: `@nice2dev/social/style.css`, `@nice2dev/ui-science/style.css`. Upgrade notes:
10
+ `documentation/omniverk/OMNIVERK_UPGRADE_1.2.1.md`.
11
+
12
+ **Tree-shaking.** An import from a package no longer brings the whole package. Module-level
13
+ statements that may have a side effect — a `displayName` assigned after each component (now
14
+ `Object.assign` inside `/* @__PURE__ */`, or under a development check for plain functions),
15
+ unannotated `forwardRef` / `memo` / `createContext` / icon-factory calls, spreads, registries filled
16
+ at import, `<style>` tags injected at import, a direct `eval` in ui-math — are gone. One import from
17
+ each of 53 packages: 5066.5 kB → 1171.6 kB (`@nice2dev/ui` 1928.2 kB → 12.9 kB, icon packs 48–275 kB
18
+ → 1.6–2.6 kB). `defaultViewRegistry` has the Nice\* input controls from the start, each loading its
19
+ module on first render; sixteen controls add their styles to `<head>` on first render.
20
+
21
+ **Dead code.** 405 source files no entry point imported (never on npm) are deleted;
22
+ `NiceClipboardStack` (`@nice2dev/ui`) and `NiceSampleBrowser` (`@nice2dev/ui-audio`), finished and
23
+ documented, are exported.
24
+
25
+ **ui-mobile draws Nice icons.** New peer `@nice2dev/icons ^1.2.0`; `TabIcons`, `DrawerIcons`,
26
+ `HeaderIcons`, the `NiceSwipeActions` presets and the `NiceInfiniteScroll` states are `Ntd*` icons
27
+ instead of pasted `<svg>`, simple glyphs are CSS marks. `@nice2dev/icons` adds `NtdReply` and
28
+ `NtdInbox`; an icon no longer throws without `window.matchMedia`.
29
+
30
+ **`NiceIconSuggestorAI` (breaking, agreed).** `AIIconLibrary` is `'nice'`; `svgPath` and `unicode`
31
+ left `AISuggestedIcon`; the preview is a `<NiceIcon>`, "Copy SVG" is "Copy JSX".
32
+
33
+ **Peer ranges.** Every internal `@nice2dev/*` peer is `^1.2.0` (was as wide as `^1.0.20`), except
34
+ `@nice2dev/icons ^1.2.1` where a package draws an icon new in 1.2.1: ui-mobile (`NtdReply`,
35
+ `NtdInbox`), ui-audio (`NtdMicrophoneOff`) and ui-security (`NtdBackspace`). ui-security, licensing
36
+ (`^1.2.0`) and templates (`^1.2.0`) gain the `@nice2dev/icons` peer: their glyph icons (`⌫`, `←`,
37
+ `→`, `↑`, `↓`) are Nice icons now. `@nice2dev/icons` adds `NtdBackspace`.
38
+
39
+ **Class names inside components.** 834 class names in library stylesheets had no `nice-` prefix
40
+ (`.tab-button`, `.status-badge`, `.selected`, …) and styled every element of that name on the page.
41
+ They follow `nice-{block}__{element}--{modifier}` now — no change on screen. The class theme hooks
42
+ next to `[data-theme]` on seven controls (`dark` on the AI chart / data grid / code and HTML
43
+ editors / form builder, `light-theme` on `NiceMAM` and `NiceVideoAnnotator`) are `nice-dark` /
44
+ `nice-light`; `NiceLowPowerMode` marks `<html>` with `nice-lpm-no-animations` /
45
+ `nice-lpm-reduced-quality`; the `NiceVideoEditor` of `@nice2dev/ui-video` styles its elements under
46
+ `nice-video-studio`, so they no longer collide with the `NiceVideoEditor` of `@nice2dev/ui`.
47
+ Rules for classes nothing rendered are gone, among them the stylesheet of `NiceGanttChart`, which
48
+ left ui-erp in 1.0.10.
49
+
50
+ **Translations.** About 3,400 UI texts in 32 packages were hard-coded; they go through `t()` now,
51
+ with the English text unchanged and pl / de / fr / es / uk in `@nice2dev/i18n` (ui-diagrams,
52
+ ui-presentations and ui-math in their own dictionaries). In `@nice2dev/events` and
53
+ `@nice2dev/admin` that includes column headers, option labels and the statuses and roles they used
54
+ to print raw (`checked-in`, `no-show`) — English labels for those come from the dictionary. ui-3d and ui-graphics read the app's
55
+ global translator, as ui-audio does since 1.2.0 — their own provider overrides it. ui-audio's
56
+ controls used 631 keys the dictionary did not have (English in every language), and the radio
57
+ player showed raw keys (`search_stations`). Texts that were hard-coded **in Polish** — in
58
+ `NiceSidebarNav`, `NiceNetworkDiscoveryPanel`, the backup and smart-home controls,
59
+ `NiceSavedQueryPanel`, `NiceNotificationPreferences`, the ui-buildings panels, the ui-printing
60
+ template editor and the photo editor — default to English now; Polish is in the dictionary. English
61
+ plurals glued on (`result{s}`) are two keys. `presentationsTranslator(lang)` (ui-presentations)
62
+ translates outside its provider.
63
+
64
+ **List props are optional.** 170 list props (`items`, `columns`, `data`, …) in 15 packages that
65
+ were required without a default are optional, with a stable empty default; every one of those
66
+ controls mounts without data (tested). `NiceStockChart` without data no longer computes NaN
67
+ coordinates.
68
+
69
+ **Unstyled components get stylesheets.** 98 components rendered class names no stylesheet had —
70
+ admin panels, auth forms, events rounds and pickers, the ERP invoice / purchase order / VAT table /
71
+ HR dashboard, the radio player, `NiceInbox`, PWA prompts, `NiceViewRenderer`, shells, smart-home,
72
+ … The fixed layout that sat in inline style objects is in classes now, so an app can override it;
73
+ values that depend on data stay inline. **`@nice2dev/social` and `@nice2dev/ui-science` ship a
74
+ stylesheet — import `@nice2dev/social/style.css` / `@nice2dev/ui-science/style.css`.** ui-science's
75
+ `sideEffects` is `["*.css"]`. Colours, spacing and radii in every stylesheet come from theme tokens
76
+ (visible in dark themes: `NiceRecipe` difficulty badges, transcoder states, warehouse heat map).
77
+
78
+ **Icons only from Nice.** About 130 glyphs (`×`, `→`, `↑`) and 100 pasted `<svg>` used as icons
79
+ are Nice icons; 11 `<svg>` stay as the control's own graphic (logos, spinners, checkbox mark). `NiceIcon`
80
+ gains `pin`, `mic-off`, `log-out`, `chevrons-left`, `chevrons-right`, `zoom-in`, `zoom-out`,
81
+ `navigation`, `refresh-ccw`, `minimize` and `smartphone`; `@nice2dev/icons` gains
82
+ `NtdMicrophoneOff`. The `icon` fields of the module, menu, tab, mode, quick-action, scene and admin
83
+ widget DTOs, notification channels and view toolbar items are rendered through `NiceIcon` — they
84
+ used to be printed as text. `NiceRatings` `thumbs` draws shapes instead of emoji.
85
+
86
+ **Dialogs instead of `window.prompt` / `confirm` / `alert`.** New `useNiceDialogs()` — `prompt`,
87
+ `confirm` and `alert` as promises on `NicePromptDialog` / `NiceConfirmDialog` — and
88
+ `NiceConfirmDialog.showReject`. Seventeen controls asked through the browser's blocking dialogs and
89
+ use the library's now (`NiceFileManager`, `NiceHtmlEditor`, `NiceViewRenderer` action `confirm`, the 3D,
90
+ vector and pixel editors, …). Keys pressed in `NicePromptDialog` / `NiceConfirmDialog` no longer
91
+ reach the page's shortcuts (Escape still closes them), and `NicePromptDialog`'s backdrop covers the
92
+ whole viewport.
93
+
94
+ **Smaller fixes.** `NiceFileManager.items` is optional. `NiceMLStudio` status badges: `draft`,
95
+ `registered`, `archived`, `cancelled` get a neutral colour, deploying / stopped deployments theirs.
96
+ Component docs (`doc.json`) list only props the components have. `NiceMobileTabs`: tabs beyond
97
+ `maxTabs` open from "More" (it only logged). `NiceInventoryManager`: new `onCreatePurchaseOrder`;
98
+ without it the "Create PO" button is gone (it only logged). Keyboard: `NiceNavShell` tabs follow the
99
+ WAI-ARIA tabs pattern, clickable `NiceDeviceTile` / `NiceCardGroup` cards and animated icons with
100
+ `trigger="click"` are focusable. ui-math: `CalculatorService.evaluate` parses instead of running
101
+ `new Function` (`asin`, `sinh`, `ceil`, exponents and `angleUnit` were wrong); `ExpressionParser`
102
+ takes `functions`, `constants`, `ignoreCase` and `strict`, multiplies implicitly (`2x`) and reads `^`
103
+ right to left. `InvoiceLine.vatRate` and `VatRate.rate` are documented as fractions (0.23).
104
+ `AmqpServerBinding` is `Record<string, never>`.
105
+
3
106
  ## 1.2.0
4
107
 
5
108
  ### Minor Changes
@@ -140,8 +140,7 @@ export interface OpenAPIEncoding {
140
140
  allowReserved?: boolean;
141
141
  }
142
142
  /** Header object */
143
- export interface OpenAPIHeader extends Omit<OpenAPIParameter, 'name' | 'in'> {
144
- }
143
+ export type OpenAPIHeader = Omit<OpenAPIParameter, 'name' | 'in'>;
145
144
  /** Response object */
146
145
  export interface OpenAPIResponse {
147
146
  description: string;
@@ -529,9 +528,8 @@ export interface KafkaServerBinding {
529
528
  schemaRegistryUrl?: string;
530
529
  schemaRegistryVendor?: string;
531
530
  }
532
- /** AMQP server binding */
533
- export interface AmqpServerBinding {
534
- }
531
+ /** AMQP server binding — the AsyncAPI bindings spec reserves it and defines no fields. */
532
+ export type AmqpServerBinding = Record<string, never>;
535
533
  /** AsyncAPI channel */
536
534
  export interface AsyncAPIChannel {
537
535
  description?: string;
@@ -691,9 +689,8 @@ export interface AsyncAPIParameter {
691
689
  schema?: AsyncAPISchema;
692
690
  location?: string;
693
691
  }
694
- /** AsyncAPI schema (JSON Schema) */
695
- export interface AsyncAPISchema extends OpenAPISchema {
696
- }
692
+ /** AsyncAPI schema (JSON Schema, as OpenAPI's) */
693
+ export type AsyncAPISchema = OpenAPISchema;
697
694
  /** AsyncAPI tag */
698
695
  export interface AsyncAPITag {
699
696
  name: string;
@@ -446,14 +446,11 @@ export interface ScriptVariables {
446
446
  toObject(): Record<string, string>;
447
447
  }
448
448
  /** Script environment */
449
- export interface ScriptEnvironment extends ScriptVariables {
450
- }
449
+ export type ScriptEnvironment = ScriptVariables;
451
450
  /** Script globals */
452
- export interface ScriptGlobals extends ScriptVariables {
453
- }
451
+ export type ScriptGlobals = ScriptVariables;
454
452
  /** Script collection variables */
455
- export interface ScriptCollectionVariables extends ScriptVariables {
456
- }
453
+ export type ScriptCollectionVariables = ScriptVariables;
457
454
  /** Script iteration data */
458
455
  export interface ScriptIterationData {
459
456
  get(key: string): unknown;
package/dist/index.cjs CHANGED
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("@nice2dev/ui"),u=require("react"),V=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),U=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),H=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Q=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),q=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),$=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),G=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),W=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),X=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),K=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),J=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Y=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Z=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),ee=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),te=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),re=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),oe=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),ne=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),ae=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),ie=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),se=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),le=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),de=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),ce=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),ue=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),pe=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),ge=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),fe=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),me=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),be=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),he=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),ye=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),we=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Se=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),_e=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),ve={"operation-operationId":{name:"operation-operationId",description:"Operation must have an operationId",severity:"error",category:"structure",fixable:!1},"operation-description":{name:"operation-description",description:"Operation should have a description",severity:"warn",category:"documentation",fixable:!1},"info-contact":{name:"info-contact",description:"Info object should have contact information",severity:"warn",category:"documentation",fixable:!1},"no-$ref-siblings":{name:"no-$ref-siblings",description:"A $ref object must not have sibling properties",severity:"error",category:"structure",fixable:!1},"path-params":{name:"path-params",description:"Path parameters must be defined",severity:"error",category:"structure",fixable:!1}},Oe=Object.freeze(Object.defineProperty({__proto__:null,OPENAPI_LINT_RULES:ve},Symbol.toStringTag,{value:"Module"})),Pe=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),je=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Me=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Te=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),De=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Ce=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Ae=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),ke=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),ze=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Ne=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),xe=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Le=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Ie=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Ee=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Fe=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Re=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Be=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Ve=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Ue=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),He=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Qe=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),qe=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),$e=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Ge=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),We=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Xe=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Ke=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Je=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Ye=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Ze=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),et=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),tt=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),rt=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));function ot(a,e=2){if(a===0)return"0 B";const t=1024,r=e<0?0:e,o=["B","KB","MB","GB","TB","PB"],i=Math.floor(Math.log(a)/Math.log(t));return parseFloat((a/Math.pow(t,i)).toFixed(r))+" "+o[i]}function f(a){let t="B/s",r=a;return a>=1024*1024*1024?(t="GB/s",r=a/(1024*1024*1024)):a>=1024*1024?(t="MB/s",r=a/(1024*1024)):a>=1024&&(t="KB/s",r=a/1024),{bytesPerSecond:a,displayValue:r.toFixed(2),displayUnit:t}}function nt(a){if(!isFinite(a)||a<0)return"∞";const e=Math.floor(a/3600),t=Math.floor(a%3600/60),r=Math.floor(a%60);return e>0?`${e}h ${t}m`:t>0?`${t}m ${r}s`:`${r}s`}function _(a,e){if(!(e<=0))return Math.ceil(a/e)}function D(a){var e;if(a.startsWith("magnet:"))return C(a);try{const t=new URL(a),o=decodeURIComponent(t.pathname).split("/").pop()||"download",i=o.includes(".")?(e=o.split(".").pop())==null?void 0:e.toLowerCase():void 0;let s="https";return t.protocol==="http:"?s="http":t.protocol==="ftp:"?s="ftp":t.protocol==="sftp:"&&(s="sftp"),{url:a,protocol:s,host:t.host,filename:o,extension:i,fileType:i?A(i):void 0,resumable:s==="https"||s==="http",requiresAuth:!!t.username,isMagnet:!1,isMetalink:!1}}catch{return{url:a,protocol:"https",host:"unknown",filename:"download",resumable:!1,isMagnet:!1,isMetalink:!1}}}function C(a){var b;const e=new URLSearchParams(a.replace("magnet:?","")),r=(e.get("xt")||"").replace("urn:btih:",""),o=e.get("dn")||"Unknown Torrent",i=e.getAll("tr"),s=e.get("xl")?parseInt(e.get("xl"),10):void 0,c=((b=e.get("kt"))==null?void 0:b.split("+"))||[];return{url:a,protocol:"bittorrent",host:"bittorrent",filename:o,size:s,resumable:!0,isMagnet:!0,isMetalink:!1,magnetInfo:{infoHash:r,displayName:o,trackers:i,exactLength:s,keywords:c}}}function A(a){const e={video:["mp4","mkv","avi","mov","wmv","flv","webm","m4v","mpeg","mpg","3gp"],audio:["mp3","flac","wav","aac","ogg","wma","m4a","opus","aiff"],image:["jpg","jpeg","png","gif","bmp","svg","webp","ico","tiff","raw"],document:["pdf","doc","docx","xls","xlsx","ppt","pptx","txt","rtf","odt"],archive:["zip","rar","7z","tar","gz","bz2","xz","iso"],executable:["exe","msi","dmg","app","deb","rpm","apk"],code:["js","ts","py","java","cpp","c","cs","go","rs","rb","php"]};for(const[t,r]of Object.entries(e))if(r.includes(a.toLowerCase()))return t;return"other"}function k(){return`dl_${Date.now().toString(36)}_${Math.random().toString(36).substring(2,9)}`}async function z(a,e){if(typeof crypto>"u"||!crypto.subtle)return console.warn("Web Crypto API not available for checksum validation"),!0;const r={sha256:"SHA-256",sha512:"SHA-512",sha1:"SHA-1"}[e.algorithm];if(!r)return console.warn(`Unsupported checksum algorithm: ${e.algorithm}`),!0;const o=await crypto.subtle.digest(r,a);return Array.from(new Uint8Array(o)).map(c=>c.toString(16).padStart(2,"0")).join("").toLowerCase()===e.value.toLowerCase()}function at(a,e){if(a<=0||e<=0)return[];const t=Math.ceil(a/e),r=[];for(let o=0;o<e;o++){const i=o*t,s=Math.min(i+t-1,a-1);r.push({index:o,start:i,end:s,downloaded:0,status:"pending",retries:0})}return r}class N{constructor(e={}){this.downloads=new Map,this.activeDownloads=new Set,this.abortControllers=new Map,this.speedSamples=new Map,this.eventListeners=new Map,this.updateInterval=null,this.config={defaultDownloadPath:e.defaultDownloadPath??"/downloads",maxConcurrentDownloads:e.maxConcurrentDownloads??3,bandwidthLimit:e.bandwidthLimit,retryAttempts:e.retryAttempts??3,retryDelay:e.retryDelay??5e3,autoStart:e.autoStart??!0,resumeOnStartup:e.resumeOnStartup??!0,categories:e.categories??[],fileTypeFilters:e.fileTypeFilters??[]}}on(e,t){return this.eventListeners.has(e)||this.eventListeners.set(e,new Set),this.eventListeners.get(e).add(t),()=>{var r;return(r=this.eventListeners.get(e))==null?void 0:r.delete(t)}}emit(e){const t=this.eventListeners.get(e.type);if(t)for(const r of t)try{r(e)}catch(o){console.error("Download event listener error:",o)}}addDownload(e,t={}){const r=D(e),o=k(),i={id:o,url:e,filename:t.filename??r.filename,path:t.path??this.config.defaultDownloadPath,status:"queued",priority:t.priority??"normal",size:r.size,downloadedBytes:0,progress:0,speed:f(0),addedDate:new Date,retryCount:0,category:t.category??this.detectCategory(r.extension),source:{type:r.isMagnet?"magnet":"direct",protocol:r.protocol,host:r.host},checksum:t.checksum};return this.downloads.set(o,i),this.emit({type:"added",download:i}),this.emitQueueChanged(),(t.autoStart??this.config.autoStart)&&this.activeDownloads.size<this.config.maxConcurrentDownloads&&this.startDownload(o),i}addDownloads(e,t={}){return e.map(r=>this.addDownload(r,t))}removeDownload(e,t=!1){return this.downloads.get(e)?(this.cancelDownload(e),this.downloads.delete(e),this.emitQueueChanged(),t&&console.warn("File deletion not implemented in browser environment"),!0):!1}getDownload(e){return this.downloads.get(e)}getAllDownloads(){return Array.from(this.downloads.values())}getQueue(){const e=this.getAllDownloads(),t=e.reduce((o,i)=>o+(i.size??0),0),r=e.reduce((o,i)=>o+i.downloadedBytes,0);return{items:e,totalSize:t,totalProgress:t>0?r/t*100:0,activeDownloads:this.activeDownloads.size,queuedDownloads:e.filter(o=>o.status==="queued").length,completedDownloads:e.filter(o=>o.status==="completed").length}}getDownloadsByStatus(e){return this.getAllDownloads().filter(t=>t.status===e)}getDownloadsByCategory(e){return this.getAllDownloads().filter(t=>t.category===e)}async startDownload(e){const t=this.downloads.get(e);if(!t||t.status==="downloading")return;if(this.activeDownloads.size>=this.config.maxConcurrentDownloads){t.status="queued";return}t.status="downloading",t.startedDate=new Date,this.activeDownloads.add(e);const r=new AbortController;this.abortControllers.set(e,r),this.speedSamples.set(e,[]),this.emit({type:"started",download:t});try{await this.executeDownload(t,r.signal),t.status="completed",t.completedDate=new Date,t.progress=100,this.emit({type:"completed",download:t})}catch(o){if(r.signal.aborted)return;t.errorMessage=o instanceof Error?o.message:"Download failed",t.retryCount<this.config.retryAttempts?(t.retryCount++,t.status="queued",setTimeout(()=>this.startDownload(e),this.config.retryDelay)):(t.status="failed",this.emit({type:"failed",download:t,error:o instanceof Error?o:new Error(String(o))}))}finally{this.activeDownloads.delete(e),this.abortControllers.delete(e),this.speedSamples.delete(e),this.emitQueueChanged(),this.processQueue()}}pauseDownload(e){const t=this.downloads.get(e);if(!t||t.status!=="downloading")return;const r=this.abortControllers.get(e);r&&r.abort(),t.status="paused",this.activeDownloads.delete(e),this.emit({type:"paused",download:t}),this.emitQueueChanged(),this.processQueue()}resumeDownload(e){const t=this.downloads.get(e);!t||t.status!=="paused"||(t.status="queued",this.emit({type:"resumed",download:t}),this.startDownload(e))}cancelDownload(e){const t=this.downloads.get(e);if(!t)return;const r=this.abortControllers.get(e);r&&r.abort(),t.status="cancelled",this.activeDownloads.delete(e),this.emit({type:"cancelled",download:t}),this.emitQueueChanged(),this.processQueue()}pauseAll(){for(const e of this.activeDownloads)this.pauseDownload(e)}resumeAll(){for(const e of this.downloads.values())e.status==="paused"&&this.resumeDownload(e.id)}cancelAll(){for(const e of this.downloads.keys())this.cancelDownload(e)}setPriority(e,t){const r=this.downloads.get(e);r&&(r.priority=t,this.emitQueueChanged())}moveInQueue(e,t){const r=this.getAllDownloads().filter(i=>i.status==="queued"),o=r.findIndex(i=>i.id===e);if(o!==-1){switch(t){case"top":r[o].priority="critical";break;case"up":r[o].priority==="normal"?r[o].priority="high":r[o].priority==="low"&&(r[o].priority="normal");break;case"down":r[o].priority==="normal"?r[o].priority="low":r[o].priority==="high"&&(r[o].priority="normal");break;case"bottom":r[o].priority="low";break}this.emitQueueChanged()}}getConfig(){return{...this.config}}updateConfig(e){this.config={...this.config,...e}}setBandwidthLimit(e){this.config.bandwidthLimit=e}setMaxConcurrentDownloads(e){this.config.maxConcurrentDownloads=e,this.processQueue()}addCategory(e){this.config.categories=[...this.config.categories??[],e]}getStats(){const e=this.getAllDownloads(),t=e.reduce((i,s)=>i+s.downloadedBytes,0),r=e.reduce((i,s)=>i+(s.size??0),0);let o=0;for(const i of this.activeDownloads){const s=this.downloads.get(i);s&&(o+=s.speed.bytesPerSecond)}return{downloaded:t,uploaded:0,remaining:r-t,total:r,progress:r>0?t/r*100:0,downloadSpeed:f(o),uploadSpeed:f(0),eta:o>0?_(r-t,o):void 0}}async executeDownload(e,t){var g,d;const r=await fetch(e.url,{signal:t,headers:(g=e.source)!=null&&g.auth?this.buildAuthHeaders(e.source.auth):void 0});if(!r.ok)throw new Error(`HTTP ${r.status}: ${r.statusText}`);const o=r.headers.get("content-length");o&&(e.size=parseInt(o,10));const i=(d=r.body)==null?void 0:d.getReader();if(!i)throw new Error("Response body is not readable");const s=[];let c=Date.now(),m=0;for(;;){const{done:p,value:h}=await i.read();if(p)break;s.push(h),e.downloadedBytes+=h.length,m+=h.length,e.size&&(e.progress=e.downloadedBytes/e.size*100);const S=Date.now(),T=S-c;if(T>=500){const O=m/T*1e3;this.updateSpeed(e.id,O),e.speed=f(O),e.eta=e.size?_(e.size-e.downloadedBytes,O):void 0,this.emit({type:"progress",download:e}),c=S,m=0}}const b=new Uint8Array(e.downloadedBytes);let l=0;for(const p of s)b.set(p,l),l+=p.length;if(e.checksum){if(!await z(b.buffer,e.checksum))throw new Error("Checksum validation failed");e.checksum.verified=!0}this.handleDownloadComplete(e,b)}handleDownloadComplete(e,t){if(typeof window<"u"&&typeof document<"u"){const r=new Blob([new Uint8Array(t)]),o=URL.createObjectURL(r),i=document.createElement("a");i.href=o,i.download=e.filename,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(o)}}buildAuthHeaders(e){if(!e)return{};switch(e.type){case"basic":return{Authorization:`Basic ${btoa(`${e.username}:${e.password}`)}`};case"bearer":return{Authorization:`Bearer ${e.token}`};case"api_key":return{"X-API-Key":e.apiKey??""};default:return{}}}updateSpeed(e,t){const r=this.speedSamples.get(e)||[];r.push(t),r.length>10&&r.shift(),this.speedSamples.set(e,r)}processQueue(){if(this.activeDownloads.size>=this.config.maxConcurrentDownloads)return;const e=this.getDownloadsByStatus("queued").sort((t,r)=>{const o={critical:0,high:1,normal:2,low:3};return o[t.priority]-o[r.priority]});for(const t of e){if(this.activeDownloads.size>=this.config.maxConcurrentDownloads)break;this.startDownload(t.id)}}detectCategory(e){var t;if(!(!e||!this.config.categories)){for(const r of this.config.categories)if((t=r.fileTypes)!=null&&t.includes(e.toLowerCase()))return r.id}}emitQueueChanged(){this.emit({type:"queue-changed",queue:this.getQueue()})}dispose(){this.cancelAll(),this.updateInterval&&clearInterval(this.updateInterval),this.eventListeners.clear(),this.downloads.clear()}}let y=null;function x(a){return y||(y=new N(a)),y}function it(){y==null||y.dispose(),y=null}function st(a={}){const{config:e,autoRefresh:t=!0,refreshInterval:r=1e3}=a,o=u.useMemo(()=>x(e),[e]),[i,s]=u.useState(o.getQueue()),[c,m]=u.useState(o.getStats());u.useEffect(()=>{const d=()=>{s(o.getQueue()),m(o.getStats())},p=[o.on("added",d),o.on("started",d),o.on("progress",d),o.on("paused",d),o.on("resumed",d),o.on("completed",d),o.on("failed",d),o.on("cancelled",d),o.on("queue-changed",d)];let h;return t&&(h=setInterval(()=>{o.getQueue().activeDownloads>0&&d()},r)),()=>{p.forEach(S=>S()),h&&clearInterval(h)}},[o,t,r]);const b=u.useMemo(()=>i.items.filter(d=>d.status==="downloading"),[i]),l=u.useCallback((d,p)=>o.addDownload(d,p),[o]),g=u.useCallback((d,p)=>o.addDownloads(d,p),[o]);return{queue:i,stats:c,activeDownloads:b,addDownload:l,addDownloads:g,startDownload:u.useCallback(d=>o.startDownload(d),[o]),pauseDownload:u.useCallback(d=>o.pauseDownload(d),[o]),resumeDownload:u.useCallback(d=>o.resumeDownload(d),[o]),cancelDownload:u.useCallback(d=>o.cancelDownload(d),[o]),removeDownload:u.useCallback((d,p)=>o.removeDownload(d,p),[o]),pauseAll:u.useCallback(()=>o.pauseAll(),[o]),resumeAll:u.useCallback(()=>o.resumeAll(),[o]),setBandwidthLimit:u.useCallback(d=>o.setBandwidthLimit(d),[o]),setPriority:u.useCallback((d,p)=>o.setPriority(d,p),[o])}}function j(){const a="0123456789abcdef";let e="";for(let t=0;t<40;t++)e+=a[Math.floor(Math.random()*a.length)];return e}function L(){const a="-NI0100-",e=Array.from({length:12},()=>Math.floor(Math.random()*256).toString(16).padStart(2,"0")).join("");return a+e}function I(a){var m;if(!a.startsWith("magnet:?"))return null;const e=new URLSearchParams(a.replace("magnet:?","")),t=e.get("xt");if(!t)return null;const r=t.replace("urn:btih:",""),o=e.get("dn")||void 0,i=e.getAll("tr"),s=e.get("xl")?parseInt(e.get("xl"),10):void 0,c=((m=e.get("kt"))==null?void 0:m.split("+"))||void 0;return{infoHash:r,displayName:o,trackers:i.length>0?i:void 0,exactLength:s,keywords:c}}function E(a){const e=new URLSearchParams;if(e.set("xt",`urn:btih:${a.infoHash}`),e.set("dn",a.name),a.size&&e.set("xl",a.size.toString()),a.trackers)for(const t of a.trackers)e.append("tr",t);return`magnet:?${e.toString()}`}function v(a,e=262144){return Math.ceil(a/e)}function P(a){return Array.from({length:a},()=>"missing")}function lt(a,e){return`${a}/${e}`}function dt(a,e){if(a===0)return"dead";const t=a/(e+1);return t>=2&&a>=10?"excellent":t>=1&&a>=5?"good":a>=1?"fair":"poor"}function ct(a){return new Map(a.map(e=>[e.index,e.wanted]))}function M(a,e){return a.filter(t=>{var o;const r=(o=t.name.split(".").pop())==null?void 0:o.toLowerCase();return r&&e.includes(r)})}function ut(a){return M(a,["mp4","mkv","avi","mov","wmv","flv","webm","m4v","mpeg","mpg"])}function pt(a){return M(a,["mp3","flac","wav","aac","ogg","wma","m4a","opus"])}function gt(a){return a.reduce((e,t)=>t.size>((e==null?void 0:e.size)??0)?t:e,void 0)}class F{constructor(e={}){this.torrents=new Map,this.eventListeners=new Map,this.updateIntervals=new Map,this.peerId=L(),this.config={downloadPath:e.downloadPath??"/downloads/torrents",tempPath:e.tempPath,maxActiveTorrents:e.maxActiveTorrents??5,maxActiveSeedsperTorrent:e.maxActiveSeedsperTorrent??50,maxConnectionsPerTorrent:e.maxConnectionsPerTorrent??50,maxGlobalConnections:e.maxGlobalConnections??200,bandwidthLimit:e.bandwidthLimit??{enabled:!1,unit:"MB/s"},dhtEnabled:e.dhtEnabled??!0,pexEnabled:e.pexEnabled??!0,lpdEnabled:e.lpdEnabled??!0,upnpEnabled:e.upnpEnabled??!0,natPmpEnabled:e.natPmpEnabled??!0,encryptionMode:e.encryptionMode??"enabled",ipv6Enabled:e.ipv6Enabled??!0,listeningPort:e.listeningPort??6881,proxySettings:e.proxySettings},this.config.dhtEnabled&&this.initDHT(),this.config.pexEnabled&&this.initPEX()}on(e,t){return this.eventListeners.has(e)||this.eventListeners.set(e,new Set),this.eventListeners.get(e).add(t),()=>{var r;return(r=this.eventListeners.get(e))==null?void 0:r.delete(t)}}emit(e){const t=this.eventListeners.get(e.type);if(t)for(const r of t)try{r(e)}catch(o){console.error("Torrent event listener error:",o)}}addMagnet(e,t={}){const r=I(e);if(!r)return console.error("Invalid magnet URI"),null;if(this.torrents.has(r.infoHash))return this.torrents.get(r.infoHash);const o=this.createTorrent({infoHash:r.infoHash,name:r.displayName??"Unknown Torrent",size:r.exactLength,trackers:r.trackers,magnetUri:e,...t});return this.torrents.set(o.infoHash,o),this.emit({type:"added",torrent:o}),t.autoStart!==!1&&this.startTorrent(o.infoHash),o}addTorrentFile(e,t={}){const r=j(),o=this.createTorrent({infoHash:r,name:"Torrent from file",...t});return this.torrents.set(o.infoHash,o),this.emit({type:"added",torrent:o}),t.autoStart!==!1&&this.startTorrent(o.infoHash),o}createTorrent(e){const t=e.size?v(e.size):0,r=(e.trackers||this.getDefaultTrackers()).filter((o,i,s)=>s.indexOf(o)===i).map((o,i)=>({url:o,tier:Math.floor(i/3),status:"not_contacted",seeds:void 0,leechers:void 0}));return{id:`torrent_${Date.now().toString(36)}_${Math.random().toString(36).substring(2,9)}`,infoHash:e.infoHash,name:e.name,status:"queued",priority:e.priority??"normal",size:e.size??0,downloadedBytes:0,uploadedBytes:0,progress:0,ratio:0,downloadSpeed:f(0),uploadSpeed:f(0),seeds:0,peers:0,trackers:r,files:[],pieces:P(t),savePath:e.path??this.config.downloadPath,isPrivate:!1,magnetUri:e.magnetUri,addedDate:new Date,sequentialDownload:e.sequentialDownload??!1,selectedFiles:e.selectedFiles??[]}}removeTorrent(e,t=!1){const r=this.torrents.get(e);return r?(this.stopTorrent(e),this.torrents.delete(e),this.emit({type:"removed",torrent:r}),t&&console.warn("Data deletion not implemented in browser environment"),!0):!1}getTorrent(e){return this.torrents.get(e)}getAllTorrents(){return Array.from(this.torrents.values())}getTorrentsByStatus(e){return this.getAllTorrents().filter(t=>t.status===e)}startTorrent(e){const t=this.torrents.get(e);t&&(t.status==="downloading"||t.status==="seeding"||(t.files.length===0&&t.magnetUri?(t.status="checking",this.fetchMetadata(t)):(t.status="downloading",t.startedDate=new Date),this.emit({type:"started",torrent:t}),this.simulateTorrentProgress(e)))}pauseTorrent(e){const t=this.torrents.get(e);if(!t)return;const r=this.updateIntervals.get(e);r&&(clearInterval(r),this.updateIntervals.delete(e)),t.status="paused",t.downloadSpeed=f(0),t.uploadSpeed=f(0),this.emit({type:"paused",torrent:t})}resumeTorrent(e){const t=this.torrents.get(e);!t||t.status!=="paused"||(t.status=t.progress>=100?"seeding":"downloading",this.emit({type:"resumed",torrent:t}),this.simulateTorrentProgress(e))}stopTorrent(e){const t=this.torrents.get(e);if(!t)return;const r=this.updateIntervals.get(e);r&&(clearInterval(r),this.updateIntervals.delete(e)),t.status="stopped",t.downloadSpeed=f(0),t.uploadSpeed=f(0)}recheckTorrent(e){const t=this.torrents.get(e);t&&(t.status="checking",setTimeout(()=>{t.status==="checking"&&(t.status=t.progress>=100?"seeding":"queued")},2e3))}announceToTrackers(e){const t=this.torrents.get(e);if(t)for(const r of t.trackers)r.status="updating",setTimeout(()=>{r.status="working",r.lastAnnounce=new Date,r.seeds=Math.floor(Math.random()*100),r.leechers=Math.floor(Math.random()*50),this.emit({type:"tracker-update",torrent:t,tracker:r})},1e3+Math.random()*2e3)}setFileSelection(e,t,r){const o=this.torrents.get(e);if(!o)return;const i=o.files.find(s=>s.index===t);i&&(i.wanted=r,i.priority=r?"normal":"skip",o.selectedFiles&&(r&&!o.selectedFiles.includes(t)?o.selectedFiles.push(t):r||(o.selectedFiles=o.selectedFiles.filter(s=>s!==t))))}setFilePriority(e,t,r){const o=this.torrents.get(e);if(!o)return;const i=o.files.find(s=>s.index===t);i&&(i.priority=r,i.wanted=r!=="skip")}selectAllFiles(e){const t=this.torrents.get(e);if(t){for(const r of t.files)r.wanted=!0,r.priority="normal";t.selectedFiles!==void 0&&(t.selectedFiles=t.files.map(r=>r.index))}}deselectAllFiles(e){const t=this.torrents.get(e);if(t){for(const r of t.files)r.wanted=!1,r.priority="skip";t.selectedFiles!==void 0&&(t.selectedFiles=[])}}setSequentialDownload(e,t){const r=this.torrents.get(e);r&&(r.sequentialDownload=t)}getConfig(){return{...this.config}}updateConfig(e){this.config={...this.config,...e}}setDownloadLimit(e){e!==void 0?this.config.bandwidthLimit={...this.config.bandwidthLimit,download:e,enabled:!0}:this.config.bandwidthLimit={...this.config.bandwidthLimit,download:void 0}}setUploadLimit(e){e!==void 0?this.config.bandwidthLimit={...this.config.bandwidthLimit,upload:e,enabled:!0}:this.config.bandwidthLimit={...this.config.bandwidthLimit,upload:void 0}}setDHTEnabled(e){this.config.dhtEnabled=e,e&&this.initDHT()}setPEXEnabled(e){this.config.pexEnabled=e,e&&this.initPEX()}getStatistics(){const e=this.getAllTorrents();let t=0,r=0,o=0,i=0,s=0;for(const c of e)t+=c.downloadedBytes,r+=c.uploadedBytes,o+=c.downloadSpeed.bytesPerSecond,i+=c.uploadSpeed.bytesPerSecond,s+=c.peers;return{activeSeeders:e.filter(c=>c.status==="seeding").length,activeDownloads:e.filter(c=>c.status==="downloading").length,totalDownloaded:t,totalUploaded:r,downloadSpeed:f(o),uploadSpeed:f(i),globalRatio:t>0?r/t:0,dhtNodes:this.config.dhtEnabled?Math.floor(Math.random()*500+100):0,totalPeers:s,sessionDuration:0}}getDefaultTrackers(){return["udp://tracker.opentrackr.org:1337/announce","udp://tracker.openbittorrent.com:6969/announce","udp://open.stealth.si:80/announce","udp://tracker.torrent.eu.org:451/announce"]}initDHT(){console.log("DHT initialized")}initPEX(){console.log("PEX initialized")}fetchMetadata(e){setTimeout(()=>{e.status==="checking"&&(e.files=[{index:0,name:`${e.name}.mkv`,path:`${e.name}/${e.name}.mkv`,size:Math.floor(Math.random()*2e9)+5e8,progress:0,downloaded:0,priority:"normal",wanted:!0},{index:1,name:"sample.mp4",path:`${e.name}/sample.mp4`,size:Math.floor(Math.random()*5e7)+1e7,progress:0,downloaded:0,priority:"normal",wanted:!0},{index:2,name:"readme.txt",path:`${e.name}/readme.txt`,size:1024,progress:0,downloaded:0,priority:"low",wanted:!0}],e.size=e.files.reduce((t,r)=>t+r.size,0),e.selectedFiles=e.files.map(t=>t.index),e.pieces=P(v(e.size)),e.status="downloading",this.emit({type:"metadata",torrent:e}),this.emit({type:"started",torrent:e}))},2e3+Math.random()*3e3)}simulateTorrentProgress(e){this.updateIntervals.has(e)&&clearInterval(this.updateIntervals.get(e));const t=setInterval(()=>{const r=this.torrents.get(e);if(!r){clearInterval(t);return}if(!(r.status!=="downloading"&&r.status!=="seeding")){if(r.status==="downloading"&&r.size>0){const o=1e6+Math.random()*5e6,i=this.config.bandwidthLimit.download?Math.min(o,this.config.bandwidthLimit.download):o,s=i*(1+Math.random()*.5);r.downloadedBytes=Math.min(r.downloadedBytes+s,r.size),r.progress=r.downloadedBytes/r.size*100,r.downloadSpeed=f(i),r.uploadSpeed=f(i*.1*Math.random());for(const c of r.files)c.wanted&&(c.downloaded=Math.min(c.downloaded+s*(c.size/r.size),c.size),c.progress=c.downloaded/c.size*100);r.peers=Math.floor(Math.random()*30)+5,r.seeds=Math.floor(r.peers*.6),r.eta=_(r.size-r.downloadedBytes,i),this.emit({type:"progress",torrent:r}),r.progress>=100&&(r.status="seeding",r.completedDate=new Date,r.progress=100,r.downloadedBytes=r.size,this.emit({type:"completed",torrent:r}),this.emit({type:"seeding",torrent:r}))}if(r.status==="seeding"){const o=5e5+Math.random()*2e6;r.uploadedBytes+=o,r.uploadSpeed=f(o),r.downloadSpeed=f(0),r.ratio=r.size>0?r.uploadedBytes/r.size:0,r.peers=Math.floor(Math.random()*10)+1,r.seeds=0}}},1e3);this.updateIntervals.set(e,t)}dispose(){for(const e of this.updateIntervals.values())clearInterval(e);this.updateIntervals.clear(),this.torrents.clear(),this.eventListeners.clear()}}async function R(a){const{name:e,files:t,trackers:r=[],comment:o,isPrivate:i=!1,pieceSize:s=262144,webSeeds:c=[]}=a,m=t.reduce((h,S)=>h+S.size,0),b=j(),l=v(m,s),g=E({infoHash:b,name:e,trackers:r,size:m}),p=new TextEncoder().encode(JSON.stringify({announce:r[0]||"",info:{name:e,"piece length":s,length:m,private:i?1:0},comment:o,"url-list":c}));return{infoHash:b,magnetLink:g,torrentFile:p,size:m,pieceCount:l,pieceSize:s}}let w=null;function B(a){return w||(w=new F(a)),w}function ft(){w==null||w.dispose(),w=null}function mt(a={}){const{config:e,autoRefresh:t=!0,refreshInterval:r=1e3}=a,o=u.useMemo(()=>B(e),[e]),[i,s]=u.useState(o.getAllTorrents()),[c,m]=u.useState(o.getStatistics());u.useEffect(()=>{const l=()=>{s([...o.getAllTorrents()]),m(o.getStatistics())},g=[o.on("added",l),o.on("metadata",l),o.on("started",l),o.on("progress",l),o.on("paused",l),o.on("resumed",l),o.on("completed",l),o.on("seeding",l),o.on("failed",l),o.on("removed",l)];let d;return t&&(d=setInterval(()=>{(o.getStatistics().activeDownloads>0||o.getStatistics().activeSeeders>0)&&l()},r)),()=>{g.forEach(p=>p()),d&&clearInterval(d)}},[o,t,r]);const b=u.useMemo(()=>i.filter(l=>l.status==="downloading"||l.status==="seeding"),[i]);return{torrents:i,statistics:c,activeTorrents:b,addMagnet:u.useCallback((l,g)=>o.addMagnet(l,g),[o]),addTorrentFile:u.useCallback((l,g)=>o.addTorrentFile(l,g),[o]),removeTorrent:u.useCallback((l,g)=>o.removeTorrent(l,g),[o]),startTorrent:u.useCallback(l=>o.startTorrent(l),[o]),pauseTorrent:u.useCallback(l=>o.pauseTorrent(l),[o]),resumeTorrent:u.useCallback(l=>o.resumeTorrent(l),[o]),stopTorrent:u.useCallback(l=>o.stopTorrent(l),[o]),setFileSelection:u.useCallback((l,g,d)=>o.setFileSelection(l,g,d),[o]),setSequentialDownload:u.useCallback((l,g)=>o.setSequentialDownload(l,g),[o]),setDownloadLimit:u.useCallback(l=>o.setDownloadLimit(l),[o]),setUploadLimit:u.useCallback(l=>o.setUploadLimit(l),[o]),createTorrent:R}}const bt={cookiesAllowed:!1,localStorageAllowed:!1,sessionStorageAllowed:!1,indexedDBAllowed:!1,webSQLAllowed:!1,serviceWorkerCacheAllowed:!1,effectiveMode:"traceless",consentRequired:!1,canPersist:!1,policySource:"instance",resolvedAt:new Date().toISOString()},ht={cookiesAllowed:!0,localStorageAllowed:!0,sessionStorageAllowed:!0,indexedDBAllowed:!0,webSQLAllowed:!0,serviceWorkerCacheAllowed:!0,effectiveMode:"full",consentRequired:!0,canPersist:!0,policySource:"instance",resolvedAt:new Date().toISOString()},yt={traceless:{cookiesAllowed:!1,localStorageAllowed:!1,sessionStorageAllowed:!1,indexedDBAllowed:!1,webSQLAllowed:!1,serviceWorkerCacheAllowed:!1},ephemeral:{cookiesAllowed:!1,localStorageAllowed:!1,sessionStorageAllowed:!0,indexedDBAllowed:!1,webSQLAllowed:!1,serviceWorkerCacheAllowed:!1},private:{cookiesAllowed:!1,localStorageAllowed:!1,sessionStorageAllowed:!0,indexedDBAllowed:!1,webSQLAllowed:!1,serviceWorkerCacheAllowed:!1},balanced:{cookiesAllowed:!1,localStorageAllowed:!0,sessionStorageAllowed:!0,indexedDBAllowed:!0,webSQLAllowed:!1,serviceWorkerCacheAllowed:!0},full:{cookiesAllowed:!0,localStorageAllowed:!0,sessionStorageAllowed:!0,indexedDBAllowed:!0,webSQLAllowed:!0,serviceWorkerCacheAllowed:!0},custom:{cookiesAllowed:!1,localStorageAllowed:!1,sessionStorageAllowed:!1,indexedDBAllowed:!1,webSQLAllowed:!1,serviceWorkerCacheAllowed:!1}},wt=Object.freeze(Object.defineProperty({__proto__:null,DEFAULT_FULL_POLICY:ht,DEFAULT_TRACELESS_POLICY:bt,MODE_CAPABILITIES:yt},Symbol.toStringTag,{value:"Module"})),St={normalText:4.5,largeText:3,uiComponents:3,graphicalObjects:3,focusIndicators:3},_t={normalText:7,largeText:4.5,uiComponents:3,graphicalObjects:3,focusIndicators:4.5},vt={targetLevel:"AA",wcagVersion:"2.1",screenReaderOptimizations:!0,keyboardNavigation:!0,enforceColorContrast:!0,minContrastRatio:4.5,respectReducedMotion:!0,focusVisible:!0,highContrastSupport:!0,forcedColorsSupport:!0,automatedTesting:!0},Ot=["en","en-US","en-GB","es","es-ES","es-MX","fr","fr-FR","fr-CA","de","de-DE","it","it-IT","pt","pt-BR","pt-PT","ru","ru-RU","zh","zh-CN","zh-TW","ja","ja-JP","ko","ko-KR","ar","ar-SA","he","he-IL","hi","hi-IN","pl","pl-PL","nl","nl-NL","tr","tr-TR","sv","sv-SE","da","da-DK","no","nb-NO","fi","fi-FI","cs","cs-CZ","sk","sk-SK","hu","hu-HU","ro","ro-RO","bg","bg-BG","uk","uk-UA","el","el-GR","th","th-TH","vi","vi-VN","id","id-ID","ms","ms-MY"],Pt=["ar","ar-SA","ar-AE","ar-EG","ar-MA","he","he-IL","fa","fa-IR","ur","ur-PK","ps","sd","yi"],jt=Object.freeze(Object.defineProperty({__proto__:null,COMMON_LOCALES:Ot,DEFAULT_ACCESSIBILITY_CONFIG:vt,RTL_LOCALES:Pt,WCAG_AAA_CONTRAST:_t,WCAG_AA_CONTRAST:St},Symbol.toStringTag,{value:"Module"})),Mt=[{width:16,height:16,purpose:"favicon",format:"ico"},{width:32,height:32,purpose:"favicon",format:"png"},{width:48,height:48,purpose:"favicon",format:"png"},{width:180,height:180,purpose:"apple-touch",format:"png"},{width:192,height:192,purpose:"any",format:"png"},{width:512,height:512,purpose:"any",format:"png"},{width:512,height:512,purpose:"maskable",format:"png"}],Tt=[{name:"Business Icons",npmName:"@nice2dev/icons-business",description:"All ERP-related icons for business applications",iconCount:500,categories:["accounting","hr","crm","production","warehouse","sales","purchasing"],domains:["business","finance","hr","logistics"],dependencies:[],version:"1.0.0"},{name:"Education Icons",npmName:"@nice2dev/icons-education",description:"Educational, scientific, and mathematical icons",iconCount:300,categories:["subjects","learning","school","science","math"],domains:["education","science"],dependencies:[],version:"1.0.0"},{name:"Tech Icons",npmName:"@nice2dev/icons-tech",description:"Development tools, infrastructure, cloud, and containers",iconCount:400,categories:["devtools","infrastructure","cloud","containers","networking"],domains:["technology"],dependencies:[],version:"1.0.0"},{name:"Media Icons",npmName:"@nice2dev/icons-media",description:"Audio, video, graphics, 3D, and streaming icons",iconCount:350,categories:["audio","video","graphics","3d","streaming"],domains:["creative"],dependencies:[],version:"1.0.0"},{name:"Social Icons",npmName:"@nice2dev/icons-social",description:"Social platforms, reactions, and messaging icons",iconCount:200,categories:["platforms","reactions","messaging"],domains:[],dependencies:[],version:"1.0.0"},{name:"Game Icons",npmName:"@nice2dev/icons-game",description:"Characters, items, UI elements, and game actions",iconCount:400,categories:["characters","items","ui","actions"],domains:["gaming"],dependencies:[],version:"1.0.0"},{name:"Life Management Icons",npmName:"@nice2dev/icons-life",description:"Personal finance, health, productivity, and home icons",iconCount:300,categories:["finance","health","productivity","home","family"],domains:["life-management"],dependencies:[],version:"1.0.0"},{name:"All Icons",npmName:"@nice2dev/icons-all",description:"Meta-package containing all icon packs",iconCount:2500,categories:[],domains:[],dependencies:["@nice2dev/icons-business","@nice2dev/icons-education","@nice2dev/icons-tech","@nice2dev/icons-media","@nice2dev/icons-social","@nice2dev/icons-game","@nice2dev/icons-life"],version:"1.0.0"}],Dt=Object.freeze(Object.defineProperty({__proto__:null,STANDARD_FAVICON_SIZES:Mt,THEMATIC_PACKAGES:Tt},Symbol.toStringTag,{value:"Module"})),Ct=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));Object.defineProperty(exports,"CURRENT_SCHEMA_VERSION",{enumerable:!0,get:()=>n.CURRENT_SCHEMA_VERSION});Object.defineProperty(exports,"NiceAuditLog",{enumerable:!0,get:()=>n.NiceAuditLog});Object.defineProperty(exports,"NiceChat",{enumerable:!0,get:()=>n.NiceChat});Object.defineProperty(exports,"NiceColumnChooser",{enumerable:!0,get:()=>n.NiceColumnChooser});Object.defineProperty(exports,"NiceComponentTypeMapping",{enumerable:!0,get:()=>n.NiceComponentTypeMapping});Object.defineProperty(exports,"NiceDesignTokens",{enumerable:!0,get:()=>n.NiceDesignTokens});Object.defineProperty(exports,"NiceDiagramDesigner",{enumerable:!0,get:()=>n.NiceDiagramDesigner});Object.defineProperty(exports,"NiceDisplayStylePicker",{enumerable:!0,get:()=>n.NiceDisplayStylePicker});Object.defineProperty(exports,"NiceDocumentViewer",{enumerable:!0,get:()=>n.NiceDocumentViewer});Object.defineProperty(exports,"NiceDraggable",{enumerable:!0,get:()=>n.NiceDraggable});Object.defineProperty(exports,"NiceFeatureFlagsProvider",{enumerable:!0,get:()=>n.NiceFeatureFlagsProvider});Object.defineProperty(exports,"NiceFeatureGate",{enumerable:!0,get:()=>n.NiceFeatureGate});Object.defineProperty(exports,"NiceFileManager",{enumerable:!0,get:()=>n.NiceFileManager});Object.defineProperty(exports,"NiceFilterBuilder",{enumerable:!0,get:()=>n.NiceFilterBuilder});Object.defineProperty(exports,"NiceGallery",{enumerable:!0,get:()=>n.NiceGallery});Object.defineProperty(exports,"NiceGitManager",{enumerable:!0,get:()=>n.NiceGitManager});Object.defineProperty(exports,"NiceLifecycleHooksEditor",{enumerable:!0,get:()=>n.NiceLifecycleHooksEditor});Object.defineProperty(exports,"NiceMap",{enumerable:!0,get:()=>n.NiceMap});Object.defineProperty(exports,"NiceModuleHotSwap",{enumerable:!0,get:()=>n.NiceModuleHotSwap});Object.defineProperty(exports,"NiceModuleLoaderProvider",{enumerable:!0,get:()=>n.NiceModuleLoaderProvider});Object.defineProperty(exports,"NiceModuleRoute",{enumerable:!0,get:()=>n.NiceModuleRoute});Object.defineProperty(exports,"NicePermissionMatrix",{enumerable:!0,get:()=>n.NicePermissionMatrix});Object.defineProperty(exports,"NicePrintPreview",{enumerable:!0,get:()=>n.NicePrintPreview});Object.defineProperty(exports,"NiceRecipeEditor",{enumerable:!0,get:()=>n.NiceRecipeEditor});Object.defineProperty(exports,"NiceRevisionHistory",{enumerable:!0,get:()=>n.NiceRevisionHistory});Object.defineProperty(exports,"NiceShowcase",{enumerable:!0,get:()=>n.NiceShowcase});Object.defineProperty(exports,"NiceSortable",{enumerable:!0,get:()=>n.NiceSortable});Object.defineProperty(exports,"NiceSpeechToText",{enumerable:!0,get:()=>n.NiceSpeechToText});Object.defineProperty(exports,"NiceThemeDesigner",{enumerable:!0,get:()=>n.NiceThemeDesigner});Object.defineProperty(exports,"NiceUndoManager",{enumerable:!0,get:()=>n.NiceUndoManager});Object.defineProperty(exports,"NiceUndoProvider",{enumerable:!0,get:()=>n.NiceUndoProvider});Object.defineProperty(exports,"NiceUpload",{enumerable:!0,get:()=>n.NiceUpload});Object.defineProperty(exports,"NiceValidationGroup",{enumerable:!0,get:()=>n.NiceValidationGroup});Object.defineProperty(exports,"NiceValidationSummary",{enumerable:!0,get:()=>n.NiceValidationSummary});Object.defineProperty(exports,"NiceValidator",{enumerable:!0,get:()=>n.NiceValidator});Object.defineProperty(exports,"NiceViewCache",{enumerable:!0,get:()=>n.NiceViewCache});Object.defineProperty(exports,"NiceViewFetchError",{enumerable:!0,get:()=>n.NiceViewFetchError});Object.defineProperty(exports,"NiceViewFetcher",{enumerable:!0,get:()=>n.NiceViewFetcher});Object.defineProperty(exports,"NiceViewHotReload",{enumerable:!0,get:()=>n.NiceViewHotReload});Object.defineProperty(exports,"NiceViewRegistry",{enumerable:!0,get:()=>n.NiceViewRegistry});Object.defineProperty(exports,"NiceViewRenderer",{enumerable:!0,get:()=>n.NiceViewRenderer});Object.defineProperty(exports,"autoDetectColumns",{enumerable:!0,get:()=>n.autoDetectColumns});Object.defineProperty(exports,"checkModuleHealth",{enumerable:!0,get:()=>n.checkModuleHealth});Object.defineProperty(exports,"checkPermissions",{enumerable:!0,get:()=>n.checkPermissions});Object.defineProperty(exports,"checkSingleModule",{enumerable:!0,get:()=>n.checkSingleModule});Object.defineProperty(exports,"compareSemver",{enumerable:!0,get:()=>n.compareSemver});Object.defineProperty(exports,"createEmptyRecipe",{enumerable:!0,get:()=>n.createEmptyRecipe});Object.defineProperty(exports,"createStandardErpContracts",{enumerable:!0,get:()=>n.createStandardErpContracts});Object.defineProperty(exports,"createUndoMiddleware",{enumerable:!0,get:()=>n.createUndoMiddleware});Object.defineProperty(exports,"defaultTypeMapping",{enumerable:!0,get:()=>n.defaultTypeMapping});Object.defineProperty(exports,"defaultViewRegistry",{enumerable:!0,get:()=>n.defaultViewRegistry});Object.defineProperty(exports,"deserializeManifest",{enumerable:!0,get:()=>n.deserializeManifest});Object.defineProperty(exports,"deserializeRbacPolicy",{enumerable:!0,get:()=>n.deserializeRbacPolicy});Object.defineProperty(exports,"deserializeView",{enumerable:!0,get:()=>n.deserializeView});Object.defineProperty(exports,"diffObjects",{enumerable:!0,get:()=>n.diffObjects});Object.defineProperty(exports,"diffViews",{enumerable:!0,get:()=>n.diffViews});Object.defineProperty(exports,"downloadCSV",{enumerable:!0,get:()=>n.downloadCSV});Object.defineProperty(exports,"downloadHTML",{enumerable:!0,get:()=>n.downloadHTML});Object.defineProperty(exports,"downloadJSON",{enumerable:!0,get:()=>n.downloadJSON});Object.defineProperty(exports,"downloadPDF",{enumerable:!0,get:()=>n.downloadPDF});Object.defineProperty(exports,"downloadXLSX",{enumerable:!0,get:()=>n.downloadXLSX});Object.defineProperty(exports,"exportToCSV",{enumerable:!0,get:()=>n.exportToCSV});Object.defineProperty(exports,"exportToHTML",{enumerable:!0,get:()=>n.exportToHTML});Object.defineProperty(exports,"exportToJSON",{enumerable:!0,get:()=>n.exportToJSON});Object.defineProperty(exports,"exportToPDF",{enumerable:!0,get:()=>n.exportToPDF});Object.defineProperty(exports,"exportToXLSX",{enumerable:!0,get:()=>n.exportToXLSX});Object.defineProperty(exports,"extractControlTypes",{enumerable:!0,get:()=>n.extractControlTypes});Object.defineProperty(exports,"extractTokensFromTheme",{enumerable:!0,get:()=>n.extractTokensFromTheme});Object.defineProperty(exports,"formatDiffAsText",{enumerable:!0,get:()=>n.formatDiffAsText});Object.defineProperty(exports,"generateAllForRbac",{enumerable:!0,get:()=>n.generateAllForRbac});Object.defineProperty(exports,"generateAllForView",{enumerable:!0,get:()=>n.generateAllForView});Object.defineProperty(exports,"generateDartModel",{enumerable:!0,get:()=>n.generateDartModel});Object.defineProperty(exports,"generateMermaidSyntax",{enumerable:!0,get:()=>n.generateMermaidSyntax});Object.defineProperty(exports,"generateRbacDart",{enumerable:!0,get:()=>n.generateRbacDart});Object.defineProperty(exports,"generateRbacTypescript",{enumerable:!0,get:()=>n.generateRbacTypescript});Object.defineProperty(exports,"generateScaffold",{enumerable:!0,get:()=>n.generateScaffold});Object.defineProperty(exports,"generateStoriesFromViews",{enumerable:!0,get:()=>n.generateStoriesFromViews});Object.defineProperty(exports,"generateStoryFromView",{enumerable:!0,get:()=>n.generateStoryFromView});Object.defineProperty(exports,"generateTokens",{enumerable:!0,get:()=>n.generateTokens});Object.defineProperty(exports,"generateTypescriptModel",{enumerable:!0,get:()=>n.generateTypescriptModel});Object.defineProperty(exports,"generateViewCatalog",{enumerable:!0,get:()=>n.generateViewCatalog});Object.defineProperty(exports,"isAllowed",{enumerable:!0,get:()=>n.isAllowed});Object.defineProperty(exports,"isVersionCompatible",{enumerable:!0,get:()=>n.isVersionCompatible});Object.defineProperty(exports,"isViewCompatibleWith",{enumerable:!0,get:()=>n.isViewCompatibleWith});Object.defineProperty(exports,"listScaffoldTemplates",{enumerable:!0,get:()=>n.listScaffoldTemplates});Object.defineProperty(exports,"newRecipeId",{enumerable:!0,get:()=>n.newRecipeId});Object.defineProperty(exports,"niceExport",{enumerable:!0,get:()=>n.niceExport});Object.defineProperty(exports,"recipeTotalMinutes",{enumerable:!0,get:()=>n.recipeTotalMinutes});Object.defineProperty(exports,"resolvePermissions",{enumerable:!0,get:()=>n.resolvePermissions});Object.defineProperty(exports,"runContractTests",{enumerable:!0,get:()=>n.runContractTests});Object.defineProperty(exports,"serializeManifest",{enumerable:!0,get:()=>n.serializeManifest});Object.defineProperty(exports,"serializeRbacPolicy",{enumerable:!0,get:()=>n.serializeRbacPolicy});Object.defineProperty(exports,"serializeView",{enumerable:!0,get:()=>n.serializeView});Object.defineProperty(exports,"useAuditLog",{enumerable:!0,get:()=>n.useAuditLog});Object.defineProperty(exports,"useColumnChooser",{enumerable:!0,get:()=>n.useColumnChooser});Object.defineProperty(exports,"useFeatureFlag",{enumerable:!0,get:()=>n.useFeatureFlag});Object.defineProperty(exports,"useFeatureFlags",{enumerable:!0,get:()=>n.useFeatureFlags});Object.defineProperty(exports,"useModuleLoader",{enumerable:!0,get:()=>n.useModuleLoader});Object.defineProperty(exports,"useNiceValidation",{enumerable:!0,get:()=>n.useNiceValidation});Object.defineProperty(exports,"usePrintPreview",{enumerable:!0,get:()=>n.usePrintPreview});Object.defineProperty(exports,"useUndoKeyboard",{enumerable:!0,get:()=>n.useUndoKeyboard});Object.defineProperty(exports,"useUndoManager",{enumerable:!0,get:()=>n.useUndoManager});Object.defineProperty(exports,"validateCrossPlatformView",{enumerable:!0,get:()=>n.validateCrossPlatformView});Object.defineProperty(exports,"validateDiagramSchema",{enumerable:!0,get:()=>n.validateDiagramSchema});Object.defineProperty(exports,"validateModuleManifest",{enumerable:!0,get:()=>n.validateModuleManifest});Object.defineProperty(exports,"validateRbacPolicy",{enumerable:!0,get:()=>n.validateRbacPolicy});Object.defineProperty(exports,"validateViewDefinition",{enumerable:!0,get:()=>n.validateViewDefinition});Object.defineProperty(exports,"validateViewForDeploy",{enumerable:!0,get:()=>n.validateViewForDeploy});Object.defineProperty(exports,"validateViewsBatch",{enumerable:!0,get:()=>n.validateViewsBatch});exports.AIAssistant=ae;exports.AIPlaygrounds=Ge;exports.APMProfiling=be;exports.AccessControl=Se;exports.AccessibilityI18n=jt;exports.AlertingIncidents=he;exports.ApiDesigner=Oe;exports.ApiTesting=Pe;exports.Artifacts=re;exports.AuditCompliance=_e;exports.Certificates=J;exports.ChartBuilder=xe;exports.CloudInstances=q;exports.ConfigManagement=ee;exports.Containers=U;exports.DashboardDesigner=Ne;exports.DataManagement=ce;exports.DataPipeline=Le;exports.DataWarehouse=Ie;exports.DatasetManagement=He;exports.DbAdapters=ue;exports.DbAdmin=pe;exports.DbDesigner=de;exports.Debugger=ie;exports.DeviceManagement=Fe;exports.DistributedTracing=me;exports.DnsManagement=K;exports.DownloadManager=N;exports.DownloadTorrent=rt;exports.EdgeComputing=Be;exports.Education=Je;exports.EmailTemplate=ze;exports.ErpEnterprise=Ye;exports.FormBuilder=Ae;exports.GameEngineAdvanced=Ct;exports.Git=te;exports.HardwareIntegration=Xe;exports.IDE=oe;exports.IaC=Z;exports.IconTools=Dt;exports.IntegrationPlatform=je;exports.Kubernetes=H;exports.LifeManagement=Ze;exports.LogManagement=fe;exports.Mathematics=tt;exports.MessageQueue=Me;exports.MetricsDashboard=ge;exports.MobileComponents=We;exports.ModelDeployment=$e;exports.ModelRegistry=qe;exports.ModelTraining=Qe;exports.NetworkConfig=G;exports.NetworkMonitoring=W;exports.PdfTools=Te;exports.Pipelines=Y;exports.RemoteDesktop=V;exports.ReportDesigner=ke;exports.ScadaIndustrial=Ve;exports.ScientificResearch=et;exports.SecretManagement=we;exports.SecurityScanning=ye;exports.SelfServiceAnalytics=Ee;exports.SensorDashboard=Re;exports.ServerManagement=X;exports.SmartHome=Ue;exports.Spreadsheet=De;exports.SqlEditor=le;exports.Terminal=$;exports.TestingQA=Ke;exports.TorrentClient=F;exports.Traceless=wt;exports.VirtualMachines=Q;exports.VisualScripting=ne;exports.WordProcessor=Ce;exports.Workspace=se;exports.calculateETA=_;exports.calculatePieces=v;exports.calculateTorrentHealth=dt;exports.createDownloadSegments=at;exports.createFileSelection=ct;exports.createMagnetUri=E;exports.createPieceStatus=P;exports.createTorrent=R;exports.disposeDownloadManager=it;exports.disposeTorrentClient=ft;exports.filterFilesByExtension=M;exports.formatBytes=ot;exports.formatDuration=nt;exports.formatPeerCount=lt;exports.formatSpeed=f;exports.generateDownloadId=k;exports.generateInfoHash=j;exports.generatePeerId=L;exports.getAudioFiles=pt;exports.getDownloadManager=x;exports.getFileType=A;exports.getLargestFile=gt;exports.getTorrentClient=B;exports.getVideoFiles=ut;exports.parseDownloadUrl=D;exports.parseMagnetLink=C;exports.parseMagnetUri=I;exports.useDownloadManager=st;exports.useTorrentClient=mt;exports.validateChecksum=z;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("@nice2dev/ui"),u=require("react"),V=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),U=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),H=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Q=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),q=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),$=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),G=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),W=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),X=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),K=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),J=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Y=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Z=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),ee=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),te=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),re=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),oe=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),ne=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),ae=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),ie=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),se=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),le=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),de=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),ce=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),ue=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),pe=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),ge=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),fe=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),me=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),be=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),he=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),ye=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),we=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Se=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),_e=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),ve={"operation-operationId":{name:"operation-operationId",description:"Operation must have an operationId",severity:"error",category:"structure",fixable:!1},"operation-description":{name:"operation-description",description:"Operation should have a description",severity:"warn",category:"documentation",fixable:!1},"info-contact":{name:"info-contact",description:"Info object should have contact information",severity:"warn",category:"documentation",fixable:!1},"no-$ref-siblings":{name:"no-$ref-siblings",description:"A $ref object must not have sibling properties",severity:"error",category:"structure",fixable:!1},"path-params":{name:"path-params",description:"Path parameters must be defined",severity:"error",category:"structure",fixable:!1}},Oe=Object.freeze(Object.defineProperty({__proto__:null,OPENAPI_LINT_RULES:ve},Symbol.toStringTag,{value:"Module"})),Pe=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),je=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Me=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Te=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),De=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Ce=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Ae=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),ke=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),ze=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Ne=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),xe=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Le=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Ie=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Ee=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Fe=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Re=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Be=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Ve=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Ue=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),He=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Qe=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),qe=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),$e=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Ge=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),We=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Xe=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Ke=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Je=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Ye=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),Ze=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),et=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),tt=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"})),rt=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));function ot(a,e=2){if(a===0)return"0 B";const t=1024,r=e<0?0:e,o=["B","KB","MB","GB","TB","PB"],i=Math.floor(Math.log(a)/Math.log(t));return parseFloat((a/Math.pow(t,i)).toFixed(r))+" "+o[i]}function f(a){let t="B/s",r=a;return a>=1024*1024*1024?(t="GB/s",r=a/(1024*1024*1024)):a>=1024*1024?(t="MB/s",r=a/(1024*1024)):a>=1024&&(t="KB/s",r=a/1024),{bytesPerSecond:a,displayValue:r.toFixed(2),displayUnit:t}}function nt(a){if(!isFinite(a)||a<0)return"∞";const e=Math.floor(a/3600),t=Math.floor(a%3600/60),r=Math.floor(a%60);return e>0?`${e}h ${t}m`:t>0?`${t}m ${r}s`:`${r}s`}function _(a,e){if(!(e<=0))return Math.ceil(a/e)}function D(a){var e;if(a.startsWith("magnet:"))return C(a);try{const t=new URL(a),o=decodeURIComponent(t.pathname).split("/").pop()||"download",i=o.includes(".")?(e=o.split(".").pop())==null?void 0:e.toLowerCase():void 0;let s="https";return t.protocol==="http:"?s="http":t.protocol==="ftp:"?s="ftp":t.protocol==="sftp:"&&(s="sftp"),{url:a,protocol:s,host:t.host,filename:o,extension:i,fileType:i?A(i):void 0,resumable:s==="https"||s==="http",requiresAuth:!!t.username,isMagnet:!1,isMetalink:!1}}catch{return{url:a,protocol:"https",host:"unknown",filename:"download",resumable:!1,isMagnet:!1,isMetalink:!1}}}function C(a){var b;const e=new URLSearchParams(a.replace("magnet:?","")),r=(e.get("xt")||"").replace("urn:btih:",""),o=e.get("dn")||"Unknown Torrent",i=e.getAll("tr"),s=e.get("xl")?parseInt(e.get("xl"),10):void 0,c=((b=e.get("kt"))==null?void 0:b.split("+"))||[];return{url:a,protocol:"bittorrent",host:"bittorrent",filename:o,size:s,resumable:!0,isMagnet:!0,isMetalink:!1,magnetInfo:{infoHash:r,displayName:o,trackers:i,exactLength:s,keywords:c}}}function A(a){const e={video:["mp4","mkv","avi","mov","wmv","flv","webm","m4v","mpeg","mpg","3gp"],audio:["mp3","flac","wav","aac","ogg","wma","m4a","opus","aiff"],image:["jpg","jpeg","png","gif","bmp","svg","webp","ico","tiff","raw"],document:["pdf","doc","docx","xls","xlsx","ppt","pptx","txt","rtf","odt"],archive:["zip","rar","7z","tar","gz","bz2","xz","iso"],executable:["exe","msi","dmg","app","deb","rpm","apk"],code:["js","ts","py","java","cpp","c","cs","go","rs","rb","php"]};for(const[t,r]of Object.entries(e))if(r.includes(a.toLowerCase()))return t;return"other"}function k(){return`dl_${Date.now().toString(36)}_${Math.random().toString(36).substring(2,9)}`}async function z(a,e){if(typeof crypto>"u"||!crypto.subtle)return console.warn("Web Crypto API not available for checksum validation"),!0;const r={sha256:"SHA-256",sha512:"SHA-512",sha1:"SHA-1"}[e.algorithm];if(!r)return console.warn(`Unsupported checksum algorithm: ${e.algorithm}`),!0;const o=await crypto.subtle.digest(r,a);return Array.from(new Uint8Array(o)).map(c=>c.toString(16).padStart(2,"0")).join("").toLowerCase()===e.value.toLowerCase()}function at(a,e){if(a<=0||e<=0)return[];const t=Math.ceil(a/e),r=[];for(let o=0;o<e;o++){const i=o*t,s=Math.min(i+t-1,a-1);r.push({index:o,start:i,end:s,downloaded:0,status:"pending",retries:0})}return r}class N{constructor(e={}){this.downloads=new Map,this.activeDownloads=new Set,this.abortControllers=new Map,this.speedSamples=new Map,this.eventListeners=new Map,this.updateInterval=null,this.config={defaultDownloadPath:e.defaultDownloadPath??"/downloads",maxConcurrentDownloads:e.maxConcurrentDownloads??3,bandwidthLimit:e.bandwidthLimit,retryAttempts:e.retryAttempts??3,retryDelay:e.retryDelay??5e3,autoStart:e.autoStart??!0,resumeOnStartup:e.resumeOnStartup??!0,categories:e.categories??[],fileTypeFilters:e.fileTypeFilters??[]}}on(e,t){return this.eventListeners.has(e)||this.eventListeners.set(e,new Set),this.eventListeners.get(e).add(t),()=>{var r;return(r=this.eventListeners.get(e))==null?void 0:r.delete(t)}}emit(e){const t=this.eventListeners.get(e.type);if(t)for(const r of t)try{r(e)}catch(o){console.error("Download event listener error:",o)}}addDownload(e,t={}){const r=D(e),o=k(),i={id:o,url:e,filename:t.filename??r.filename,path:t.path??this.config.defaultDownloadPath,status:"queued",priority:t.priority??"normal",size:r.size,downloadedBytes:0,progress:0,speed:f(0),addedDate:new Date,retryCount:0,category:t.category??this.detectCategory(r.extension),source:{type:r.isMagnet?"magnet":"direct",protocol:r.protocol,host:r.host},checksum:t.checksum};return this.downloads.set(o,i),this.emit({type:"added",download:i}),this.emitQueueChanged(),(t.autoStart??this.config.autoStart)&&this.activeDownloads.size<this.config.maxConcurrentDownloads&&this.startDownload(o),i}addDownloads(e,t={}){return e.map(r=>this.addDownload(r,t))}removeDownload(e,t=!1){return this.downloads.get(e)?(this.cancelDownload(e),this.downloads.delete(e),this.emitQueueChanged(),t&&console.warn("File deletion not implemented in browser environment"),!0):!1}getDownload(e){return this.downloads.get(e)}getAllDownloads(){return Array.from(this.downloads.values())}getQueue(){const e=this.getAllDownloads(),t=e.reduce((o,i)=>o+(i.size??0),0),r=e.reduce((o,i)=>o+i.downloadedBytes,0);return{items:e,totalSize:t,totalProgress:t>0?r/t*100:0,activeDownloads:this.activeDownloads.size,queuedDownloads:e.filter(o=>o.status==="queued").length,completedDownloads:e.filter(o=>o.status==="completed").length}}getDownloadsByStatus(e){return this.getAllDownloads().filter(t=>t.status===e)}getDownloadsByCategory(e){return this.getAllDownloads().filter(t=>t.category===e)}async startDownload(e){const t=this.downloads.get(e);if(!t||t.status==="downloading")return;if(this.activeDownloads.size>=this.config.maxConcurrentDownloads){t.status="queued";return}t.status="downloading",t.startedDate=new Date,this.activeDownloads.add(e);const r=new AbortController;this.abortControllers.set(e,r),this.speedSamples.set(e,[]),this.emit({type:"started",download:t});try{await this.executeDownload(t,r.signal),t.status="completed",t.completedDate=new Date,t.progress=100,this.emit({type:"completed",download:t})}catch(o){if(r.signal.aborted)return;t.errorMessage=o instanceof Error?o.message:"Download failed",t.retryCount<this.config.retryAttempts?(t.retryCount++,t.status="queued",setTimeout(()=>this.startDownload(e),this.config.retryDelay)):(t.status="failed",this.emit({type:"failed",download:t,error:o instanceof Error?o:new Error(String(o))}))}finally{this.activeDownloads.delete(e),this.abortControllers.delete(e),this.speedSamples.delete(e),this.emitQueueChanged(),this.processQueue()}}pauseDownload(e){const t=this.downloads.get(e);if(!t||t.status!=="downloading")return;const r=this.abortControllers.get(e);r&&r.abort(),t.status="paused",this.activeDownloads.delete(e),this.emit({type:"paused",download:t}),this.emitQueueChanged(),this.processQueue()}resumeDownload(e){const t=this.downloads.get(e);!t||t.status!=="paused"||(t.status="queued",this.emit({type:"resumed",download:t}),this.startDownload(e))}cancelDownload(e){const t=this.downloads.get(e);if(!t)return;const r=this.abortControllers.get(e);r&&r.abort(),t.status="cancelled",this.activeDownloads.delete(e),this.emit({type:"cancelled",download:t}),this.emitQueueChanged(),this.processQueue()}pauseAll(){for(const e of this.activeDownloads)this.pauseDownload(e)}resumeAll(){for(const e of this.downloads.values())e.status==="paused"&&this.resumeDownload(e.id)}cancelAll(){for(const e of this.downloads.keys())this.cancelDownload(e)}setPriority(e,t){const r=this.downloads.get(e);r&&(r.priority=t,this.emitQueueChanged())}moveInQueue(e,t){const r=this.getAllDownloads().filter(i=>i.status==="queued"),o=r.findIndex(i=>i.id===e);if(o!==-1){switch(t){case"top":r[o].priority="critical";break;case"up":r[o].priority==="normal"?r[o].priority="high":r[o].priority==="low"&&(r[o].priority="normal");break;case"down":r[o].priority==="normal"?r[o].priority="low":r[o].priority==="high"&&(r[o].priority="normal");break;case"bottom":r[o].priority="low";break}this.emitQueueChanged()}}getConfig(){return{...this.config}}updateConfig(e){this.config={...this.config,...e}}setBandwidthLimit(e){this.config.bandwidthLimit=e}setMaxConcurrentDownloads(e){this.config.maxConcurrentDownloads=e,this.processQueue()}addCategory(e){this.config.categories=[...this.config.categories??[],e]}getStats(){const e=this.getAllDownloads(),t=e.reduce((i,s)=>i+s.downloadedBytes,0),r=e.reduce((i,s)=>i+(s.size??0),0);let o=0;for(const i of this.activeDownloads){const s=this.downloads.get(i);s&&(o+=s.speed.bytesPerSecond)}return{downloaded:t,uploaded:0,remaining:r-t,total:r,progress:r>0?t/r*100:0,downloadSpeed:f(o),uploadSpeed:f(0),eta:o>0?_(r-t,o):void 0}}async executeDownload(e,t){var g,d;const r=await fetch(e.url,{signal:t,headers:(g=e.source)!=null&&g.auth?this.buildAuthHeaders(e.source.auth):void 0});if(!r.ok)throw new Error(`HTTP ${r.status}: ${r.statusText}`);const o=r.headers.get("content-length");o&&(e.size=parseInt(o,10));const i=(d=r.body)==null?void 0:d.getReader();if(!i)throw new Error("Response body is not readable");const s=[];let c=Date.now(),m=0;for(;;){const{done:p,value:h}=await i.read();if(p)break;s.push(h),e.downloadedBytes+=h.length,m+=h.length,e.size&&(e.progress=e.downloadedBytes/e.size*100);const S=Date.now(),T=S-c;if(T>=500){const O=m/T*1e3;this.updateSpeed(e.id,O),e.speed=f(O),e.eta=e.size?_(e.size-e.downloadedBytes,O):void 0,this.emit({type:"progress",download:e}),c=S,m=0}}const b=new Uint8Array(e.downloadedBytes);let l=0;for(const p of s)b.set(p,l),l+=p.length;if(e.checksum){if(!await z(b.buffer,e.checksum))throw new Error("Checksum validation failed");e.checksum.verified=!0}this.handleDownloadComplete(e,b)}handleDownloadComplete(e,t){if(typeof window<"u"&&typeof document<"u"){const r=new Blob([new Uint8Array(t)]),o=URL.createObjectURL(r),i=document.createElement("a");i.href=o,i.download=e.filename,document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(o)}}buildAuthHeaders(e){if(!e)return{};switch(e.type){case"basic":return{Authorization:`Basic ${btoa(`${e.username}:${e.password}`)}`};case"bearer":return{Authorization:`Bearer ${e.token}`};case"api_key":return{"X-API-Key":e.apiKey??""};default:return{}}}updateSpeed(e,t){const r=this.speedSamples.get(e)||[];r.push(t),r.length>10&&r.shift(),this.speedSamples.set(e,r)}processQueue(){if(this.activeDownloads.size>=this.config.maxConcurrentDownloads)return;const e=this.getDownloadsByStatus("queued").sort((t,r)=>{const o={critical:0,high:1,normal:2,low:3};return o[t.priority]-o[r.priority]});for(const t of e){if(this.activeDownloads.size>=this.config.maxConcurrentDownloads)break;this.startDownload(t.id)}}detectCategory(e){var t;if(!(!e||!this.config.categories)){for(const r of this.config.categories)if((t=r.fileTypes)!=null&&t.includes(e.toLowerCase()))return r.id}}emitQueueChanged(){this.emit({type:"queue-changed",queue:this.getQueue()})}dispose(){this.cancelAll(),this.updateInterval&&clearInterval(this.updateInterval),this.eventListeners.clear(),this.downloads.clear()}}let y=null;function x(a){return y||(y=new N(a)),y}function it(){y==null||y.dispose(),y=null}function st(a={}){const{config:e,autoRefresh:t=!0,refreshInterval:r=1e3}=a,o=u.useMemo(()=>x(e),[e]),[i,s]=u.useState(o.getQueue()),[c,m]=u.useState(o.getStats());u.useEffect(()=>{const d=()=>{s(o.getQueue()),m(o.getStats())},p=[o.on("added",d),o.on("started",d),o.on("progress",d),o.on("paused",d),o.on("resumed",d),o.on("completed",d),o.on("failed",d),o.on("cancelled",d),o.on("queue-changed",d)];let h;return t&&(h=setInterval(()=>{o.getQueue().activeDownloads>0&&d()},r)),()=>{p.forEach(S=>S()),h&&clearInterval(h)}},[o,t,r]);const b=u.useMemo(()=>i.items.filter(d=>d.status==="downloading"),[i]),l=u.useCallback((d,p)=>o.addDownload(d,p),[o]),g=u.useCallback((d,p)=>o.addDownloads(d,p),[o]);return{queue:i,stats:c,activeDownloads:b,addDownload:l,addDownloads:g,startDownload:u.useCallback(d=>o.startDownload(d),[o]),pauseDownload:u.useCallback(d=>o.pauseDownload(d),[o]),resumeDownload:u.useCallback(d=>o.resumeDownload(d),[o]),cancelDownload:u.useCallback(d=>o.cancelDownload(d),[o]),removeDownload:u.useCallback((d,p)=>o.removeDownload(d,p),[o]),pauseAll:u.useCallback(()=>o.pauseAll(),[o]),resumeAll:u.useCallback(()=>o.resumeAll(),[o]),setBandwidthLimit:u.useCallback(d=>o.setBandwidthLimit(d),[o]),setPriority:u.useCallback((d,p)=>o.setPriority(d,p),[o])}}function j(){const a="0123456789abcdef";let e="";for(let t=0;t<40;t++)e+=a[Math.floor(Math.random()*a.length)];return e}function L(){const a="-NI0100-",e=Array.from({length:12},()=>Math.floor(Math.random()*256).toString(16).padStart(2,"0")).join("");return a+e}function I(a){var m;if(!a.startsWith("magnet:?"))return null;const e=new URLSearchParams(a.replace("magnet:?","")),t=e.get("xt");if(!t)return null;const r=t.replace("urn:btih:",""),o=e.get("dn")||void 0,i=e.getAll("tr"),s=e.get("xl")?parseInt(e.get("xl"),10):void 0,c=((m=e.get("kt"))==null?void 0:m.split("+"))||void 0;return{infoHash:r,displayName:o,trackers:i.length>0?i:void 0,exactLength:s,keywords:c}}function E(a){const e=new URLSearchParams;if(e.set("xt",`urn:btih:${a.infoHash}`),e.set("dn",a.name),a.size&&e.set("xl",a.size.toString()),a.trackers)for(const t of a.trackers)e.append("tr",t);return`magnet:?${e.toString()}`}function v(a,e=262144){return Math.ceil(a/e)}function P(a){return Array.from({length:a},()=>"missing")}function lt(a,e){return`${a}/${e}`}function dt(a,e){if(a===0)return"dead";const t=a/(e+1);return t>=2&&a>=10?"excellent":t>=1&&a>=5?"good":a>=1?"fair":"poor"}function ct(a){return new Map(a.map(e=>[e.index,e.wanted]))}function M(a,e){return a.filter(t=>{var o;const r=(o=t.name.split(".").pop())==null?void 0:o.toLowerCase();return r&&e.includes(r)})}function ut(a){return M(a,["mp4","mkv","avi","mov","wmv","flv","webm","m4v","mpeg","mpg"])}function pt(a){return M(a,["mp3","flac","wav","aac","ogg","wma","m4a","opus"])}function gt(a){return a.reduce((e,t)=>t.size>((e==null?void 0:e.size)??0)?t:e,void 0)}class F{constructor(e={}){this.torrents=new Map,this.eventListeners=new Map,this.updateIntervals=new Map,this.peerId=L(),this.config={downloadPath:e.downloadPath??"/downloads/torrents",tempPath:e.tempPath,maxActiveTorrents:e.maxActiveTorrents??5,maxActiveSeedsperTorrent:e.maxActiveSeedsperTorrent??50,maxConnectionsPerTorrent:e.maxConnectionsPerTorrent??50,maxGlobalConnections:e.maxGlobalConnections??200,bandwidthLimit:e.bandwidthLimit??{enabled:!1,unit:"MB/s"},dhtEnabled:e.dhtEnabled??!0,pexEnabled:e.pexEnabled??!0,lpdEnabled:e.lpdEnabled??!0,upnpEnabled:e.upnpEnabled??!0,natPmpEnabled:e.natPmpEnabled??!0,encryptionMode:e.encryptionMode??"enabled",ipv6Enabled:e.ipv6Enabled??!0,listeningPort:e.listeningPort??6881,proxySettings:e.proxySettings},this.config.dhtEnabled&&this.initDHT(),this.config.pexEnabled&&this.initPEX()}on(e,t){return this.eventListeners.has(e)||this.eventListeners.set(e,new Set),this.eventListeners.get(e).add(t),()=>{var r;return(r=this.eventListeners.get(e))==null?void 0:r.delete(t)}}emit(e){const t=this.eventListeners.get(e.type);if(t)for(const r of t)try{r(e)}catch(o){console.error("Torrent event listener error:",o)}}addMagnet(e,t={}){const r=I(e);if(!r)return console.error("Invalid magnet URI"),null;if(this.torrents.has(r.infoHash))return this.torrents.get(r.infoHash);const o=this.createTorrent({infoHash:r.infoHash,name:r.displayName??"Unknown Torrent",size:r.exactLength,trackers:r.trackers,magnetUri:e,...t});return this.torrents.set(o.infoHash,o),this.emit({type:"added",torrent:o}),t.autoStart!==!1&&this.startTorrent(o.infoHash),o}addTorrentFile(e,t={}){const r=j(),o=this.createTorrent({infoHash:r,name:"Torrent from file",...t});return this.torrents.set(o.infoHash,o),this.emit({type:"added",torrent:o}),t.autoStart!==!1&&this.startTorrent(o.infoHash),o}createTorrent(e){const t=e.size?v(e.size):0,r=(e.trackers||this.getDefaultTrackers()).filter((o,i,s)=>s.indexOf(o)===i).map((o,i)=>({url:o,tier:Math.floor(i/3),status:"not_contacted",seeds:void 0,leechers:void 0}));return{id:`torrent_${Date.now().toString(36)}_${Math.random().toString(36).substring(2,9)}`,infoHash:e.infoHash,name:e.name,status:"queued",priority:e.priority??"normal",size:e.size??0,downloadedBytes:0,uploadedBytes:0,progress:0,ratio:0,downloadSpeed:f(0),uploadSpeed:f(0),seeds:0,peers:0,trackers:r,files:[],pieces:P(t),savePath:e.path??this.config.downloadPath,isPrivate:!1,magnetUri:e.magnetUri,addedDate:new Date,sequentialDownload:e.sequentialDownload??!1,selectedFiles:e.selectedFiles??[]}}removeTorrent(e,t=!1){const r=this.torrents.get(e);return r?(this.stopTorrent(e),this.torrents.delete(e),this.emit({type:"removed",torrent:r}),t&&console.warn("Data deletion not implemented in browser environment"),!0):!1}getTorrent(e){return this.torrents.get(e)}getAllTorrents(){return Array.from(this.torrents.values())}getTorrentsByStatus(e){return this.getAllTorrents().filter(t=>t.status===e)}startTorrent(e){const t=this.torrents.get(e);t&&(t.status==="downloading"||t.status==="seeding"||(t.files.length===0&&t.magnetUri?(t.status="checking",this.fetchMetadata(t)):(t.status="downloading",t.startedDate=new Date),this.emit({type:"started",torrent:t}),this.simulateTorrentProgress(e)))}pauseTorrent(e){const t=this.torrents.get(e);if(!t)return;const r=this.updateIntervals.get(e);r&&(clearInterval(r),this.updateIntervals.delete(e)),t.status="paused",t.downloadSpeed=f(0),t.uploadSpeed=f(0),this.emit({type:"paused",torrent:t})}resumeTorrent(e){const t=this.torrents.get(e);!t||t.status!=="paused"||(t.status=t.progress>=100?"seeding":"downloading",this.emit({type:"resumed",torrent:t}),this.simulateTorrentProgress(e))}stopTorrent(e){const t=this.torrents.get(e);if(!t)return;const r=this.updateIntervals.get(e);r&&(clearInterval(r),this.updateIntervals.delete(e)),t.status="stopped",t.downloadSpeed=f(0),t.uploadSpeed=f(0)}recheckTorrent(e){const t=this.torrents.get(e);t&&(t.status="checking",setTimeout(()=>{t.status==="checking"&&(t.status=t.progress>=100?"seeding":"queued")},2e3))}announceToTrackers(e){const t=this.torrents.get(e);if(t)for(const r of t.trackers)r.status="updating",setTimeout(()=>{r.status="working",r.lastAnnounce=new Date,r.seeds=Math.floor(Math.random()*100),r.leechers=Math.floor(Math.random()*50),this.emit({type:"tracker-update",torrent:t,tracker:r})},1e3+Math.random()*2e3)}setFileSelection(e,t,r){const o=this.torrents.get(e);if(!o)return;const i=o.files.find(s=>s.index===t);i&&(i.wanted=r,i.priority=r?"normal":"skip",o.selectedFiles&&(r&&!o.selectedFiles.includes(t)?o.selectedFiles.push(t):r||(o.selectedFiles=o.selectedFiles.filter(s=>s!==t))))}setFilePriority(e,t,r){const o=this.torrents.get(e);if(!o)return;const i=o.files.find(s=>s.index===t);i&&(i.priority=r,i.wanted=r!=="skip")}selectAllFiles(e){const t=this.torrents.get(e);if(t){for(const r of t.files)r.wanted=!0,r.priority="normal";t.selectedFiles!==void 0&&(t.selectedFiles=t.files.map(r=>r.index))}}deselectAllFiles(e){const t=this.torrents.get(e);if(t){for(const r of t.files)r.wanted=!1,r.priority="skip";t.selectedFiles!==void 0&&(t.selectedFiles=[])}}setSequentialDownload(e,t){const r=this.torrents.get(e);r&&(r.sequentialDownload=t)}getConfig(){return{...this.config}}updateConfig(e){this.config={...this.config,...e}}setDownloadLimit(e){e!==void 0?this.config.bandwidthLimit={...this.config.bandwidthLimit,download:e,enabled:!0}:this.config.bandwidthLimit={...this.config.bandwidthLimit,download:void 0}}setUploadLimit(e){e!==void 0?this.config.bandwidthLimit={...this.config.bandwidthLimit,upload:e,enabled:!0}:this.config.bandwidthLimit={...this.config.bandwidthLimit,upload:void 0}}setDHTEnabled(e){this.config.dhtEnabled=e,e&&this.initDHT()}setPEXEnabled(e){this.config.pexEnabled=e,e&&this.initPEX()}getStatistics(){const e=this.getAllTorrents();let t=0,r=0,o=0,i=0,s=0;for(const c of e)t+=c.downloadedBytes,r+=c.uploadedBytes,o+=c.downloadSpeed.bytesPerSecond,i+=c.uploadSpeed.bytesPerSecond,s+=c.peers;return{activeSeeders:e.filter(c=>c.status==="seeding").length,activeDownloads:e.filter(c=>c.status==="downloading").length,totalDownloaded:t,totalUploaded:r,downloadSpeed:f(o),uploadSpeed:f(i),globalRatio:t>0?r/t:0,dhtNodes:this.config.dhtEnabled?Math.floor(Math.random()*500+100):0,totalPeers:s,sessionDuration:0}}getDefaultTrackers(){return["udp://tracker.opentrackr.org:1337/announce","udp://tracker.openbittorrent.com:6969/announce","udp://open.stealth.si:80/announce","udp://tracker.torrent.eu.org:451/announce"]}initDHT(){}initPEX(){}fetchMetadata(e){setTimeout(()=>{e.status==="checking"&&(e.files=[{index:0,name:`${e.name}.mkv`,path:`${e.name}/${e.name}.mkv`,size:Math.floor(Math.random()*2e9)+5e8,progress:0,downloaded:0,priority:"normal",wanted:!0},{index:1,name:"sample.mp4",path:`${e.name}/sample.mp4`,size:Math.floor(Math.random()*5e7)+1e7,progress:0,downloaded:0,priority:"normal",wanted:!0},{index:2,name:"readme.txt",path:`${e.name}/readme.txt`,size:1024,progress:0,downloaded:0,priority:"low",wanted:!0}],e.size=e.files.reduce((t,r)=>t+r.size,0),e.selectedFiles=e.files.map(t=>t.index),e.pieces=P(v(e.size)),e.status="downloading",this.emit({type:"metadata",torrent:e}),this.emit({type:"started",torrent:e}))},2e3+Math.random()*3e3)}simulateTorrentProgress(e){this.updateIntervals.has(e)&&clearInterval(this.updateIntervals.get(e));const t=setInterval(()=>{const r=this.torrents.get(e);if(!r){clearInterval(t);return}if(!(r.status!=="downloading"&&r.status!=="seeding")){if(r.status==="downloading"&&r.size>0){const o=1e6+Math.random()*5e6,i=this.config.bandwidthLimit.download?Math.min(o,this.config.bandwidthLimit.download):o,s=i*(1+Math.random()*.5);r.downloadedBytes=Math.min(r.downloadedBytes+s,r.size),r.progress=r.downloadedBytes/r.size*100,r.downloadSpeed=f(i),r.uploadSpeed=f(i*.1*Math.random());for(const c of r.files)c.wanted&&(c.downloaded=Math.min(c.downloaded+s*(c.size/r.size),c.size),c.progress=c.downloaded/c.size*100);r.peers=Math.floor(Math.random()*30)+5,r.seeds=Math.floor(r.peers*.6),r.eta=_(r.size-r.downloadedBytes,i),this.emit({type:"progress",torrent:r}),r.progress>=100&&(r.status="seeding",r.completedDate=new Date,r.progress=100,r.downloadedBytes=r.size,this.emit({type:"completed",torrent:r}),this.emit({type:"seeding",torrent:r}))}if(r.status==="seeding"){const o=5e5+Math.random()*2e6;r.uploadedBytes+=o,r.uploadSpeed=f(o),r.downloadSpeed=f(0),r.ratio=r.size>0?r.uploadedBytes/r.size:0,r.peers=Math.floor(Math.random()*10)+1,r.seeds=0}}},1e3);this.updateIntervals.set(e,t)}dispose(){for(const e of this.updateIntervals.values())clearInterval(e);this.updateIntervals.clear(),this.torrents.clear(),this.eventListeners.clear()}}async function R(a){const{name:e,files:t,trackers:r=[],comment:o,isPrivate:i=!1,pieceSize:s=262144,webSeeds:c=[]}=a,m=t.reduce((h,S)=>h+S.size,0),b=j(),l=v(m,s),g=E({infoHash:b,name:e,trackers:r,size:m}),p=new TextEncoder().encode(JSON.stringify({announce:r[0]||"",info:{name:e,"piece length":s,length:m,private:i?1:0},comment:o,"url-list":c}));return{infoHash:b,magnetLink:g,torrentFile:p,size:m,pieceCount:l,pieceSize:s}}let w=null;function B(a){return w||(w=new F(a)),w}function ft(){w==null||w.dispose(),w=null}function mt(a={}){const{config:e,autoRefresh:t=!0,refreshInterval:r=1e3}=a,o=u.useMemo(()=>B(e),[e]),[i,s]=u.useState(o.getAllTorrents()),[c,m]=u.useState(o.getStatistics());u.useEffect(()=>{const l=()=>{s([...o.getAllTorrents()]),m(o.getStatistics())},g=[o.on("added",l),o.on("metadata",l),o.on("started",l),o.on("progress",l),o.on("paused",l),o.on("resumed",l),o.on("completed",l),o.on("seeding",l),o.on("failed",l),o.on("removed",l)];let d;return t&&(d=setInterval(()=>{(o.getStatistics().activeDownloads>0||o.getStatistics().activeSeeders>0)&&l()},r)),()=>{g.forEach(p=>p()),d&&clearInterval(d)}},[o,t,r]);const b=u.useMemo(()=>i.filter(l=>l.status==="downloading"||l.status==="seeding"),[i]);return{torrents:i,statistics:c,activeTorrents:b,addMagnet:u.useCallback((l,g)=>o.addMagnet(l,g),[o]),addTorrentFile:u.useCallback((l,g)=>o.addTorrentFile(l,g),[o]),removeTorrent:u.useCallback((l,g)=>o.removeTorrent(l,g),[o]),startTorrent:u.useCallback(l=>o.startTorrent(l),[o]),pauseTorrent:u.useCallback(l=>o.pauseTorrent(l),[o]),resumeTorrent:u.useCallback(l=>o.resumeTorrent(l),[o]),stopTorrent:u.useCallback(l=>o.stopTorrent(l),[o]),setFileSelection:u.useCallback((l,g,d)=>o.setFileSelection(l,g,d),[o]),setSequentialDownload:u.useCallback((l,g)=>o.setSequentialDownload(l,g),[o]),setDownloadLimit:u.useCallback(l=>o.setDownloadLimit(l),[o]),setUploadLimit:u.useCallback(l=>o.setUploadLimit(l),[o]),createTorrent:R}}const bt={cookiesAllowed:!1,localStorageAllowed:!1,sessionStorageAllowed:!1,indexedDBAllowed:!1,webSQLAllowed:!1,serviceWorkerCacheAllowed:!1,effectiveMode:"traceless",consentRequired:!1,canPersist:!1,policySource:"instance",resolvedAt:new Date().toISOString()},ht={cookiesAllowed:!0,localStorageAllowed:!0,sessionStorageAllowed:!0,indexedDBAllowed:!0,webSQLAllowed:!0,serviceWorkerCacheAllowed:!0,effectiveMode:"full",consentRequired:!0,canPersist:!0,policySource:"instance",resolvedAt:new Date().toISOString()},yt={traceless:{cookiesAllowed:!1,localStorageAllowed:!1,sessionStorageAllowed:!1,indexedDBAllowed:!1,webSQLAllowed:!1,serviceWorkerCacheAllowed:!1},ephemeral:{cookiesAllowed:!1,localStorageAllowed:!1,sessionStorageAllowed:!0,indexedDBAllowed:!1,webSQLAllowed:!1,serviceWorkerCacheAllowed:!1},private:{cookiesAllowed:!1,localStorageAllowed:!1,sessionStorageAllowed:!0,indexedDBAllowed:!1,webSQLAllowed:!1,serviceWorkerCacheAllowed:!1},balanced:{cookiesAllowed:!1,localStorageAllowed:!0,sessionStorageAllowed:!0,indexedDBAllowed:!0,webSQLAllowed:!1,serviceWorkerCacheAllowed:!0},full:{cookiesAllowed:!0,localStorageAllowed:!0,sessionStorageAllowed:!0,indexedDBAllowed:!0,webSQLAllowed:!0,serviceWorkerCacheAllowed:!0},custom:{cookiesAllowed:!1,localStorageAllowed:!1,sessionStorageAllowed:!1,indexedDBAllowed:!1,webSQLAllowed:!1,serviceWorkerCacheAllowed:!1}},wt=Object.freeze(Object.defineProperty({__proto__:null,DEFAULT_FULL_POLICY:ht,DEFAULT_TRACELESS_POLICY:bt,MODE_CAPABILITIES:yt},Symbol.toStringTag,{value:"Module"})),St={normalText:4.5,largeText:3,uiComponents:3,graphicalObjects:3,focusIndicators:3},_t={normalText:7,largeText:4.5,uiComponents:3,graphicalObjects:3,focusIndicators:4.5},vt={targetLevel:"AA",wcagVersion:"2.1",screenReaderOptimizations:!0,keyboardNavigation:!0,enforceColorContrast:!0,minContrastRatio:4.5,respectReducedMotion:!0,focusVisible:!0,highContrastSupport:!0,forcedColorsSupport:!0,automatedTesting:!0},Ot=["en","en-US","en-GB","es","es-ES","es-MX","fr","fr-FR","fr-CA","de","de-DE","it","it-IT","pt","pt-BR","pt-PT","ru","ru-RU","zh","zh-CN","zh-TW","ja","ja-JP","ko","ko-KR","ar","ar-SA","he","he-IL","hi","hi-IN","pl","pl-PL","nl","nl-NL","tr","tr-TR","sv","sv-SE","da","da-DK","no","nb-NO","fi","fi-FI","cs","cs-CZ","sk","sk-SK","hu","hu-HU","ro","ro-RO","bg","bg-BG","uk","uk-UA","el","el-GR","th","th-TH","vi","vi-VN","id","id-ID","ms","ms-MY"],Pt=["ar","ar-SA","ar-AE","ar-EG","ar-MA","he","he-IL","fa","fa-IR","ur","ur-PK","ps","sd","yi"],jt=Object.freeze(Object.defineProperty({__proto__:null,COMMON_LOCALES:Ot,DEFAULT_ACCESSIBILITY_CONFIG:vt,RTL_LOCALES:Pt,WCAG_AAA_CONTRAST:_t,WCAG_AA_CONTRAST:St},Symbol.toStringTag,{value:"Module"})),Mt=[{width:16,height:16,purpose:"favicon",format:"ico"},{width:32,height:32,purpose:"favicon",format:"png"},{width:48,height:48,purpose:"favicon",format:"png"},{width:180,height:180,purpose:"apple-touch",format:"png"},{width:192,height:192,purpose:"any",format:"png"},{width:512,height:512,purpose:"any",format:"png"},{width:512,height:512,purpose:"maskable",format:"png"}],Tt=[{name:"Business Icons",npmName:"@nice2dev/icons-business",description:"All ERP-related icons for business applications",iconCount:500,categories:["accounting","hr","crm","production","warehouse","sales","purchasing"],domains:["business","finance","hr","logistics"],dependencies:[],version:"1.0.0"},{name:"Education Icons",npmName:"@nice2dev/icons-education",description:"Educational, scientific, and mathematical icons",iconCount:300,categories:["subjects","learning","school","science","math"],domains:["education","science"],dependencies:[],version:"1.0.0"},{name:"Tech Icons",npmName:"@nice2dev/icons-tech",description:"Development tools, infrastructure, cloud, and containers",iconCount:400,categories:["devtools","infrastructure","cloud","containers","networking"],domains:["technology"],dependencies:[],version:"1.0.0"},{name:"Media Icons",npmName:"@nice2dev/icons-media",description:"Audio, video, graphics, 3D, and streaming icons",iconCount:350,categories:["audio","video","graphics","3d","streaming"],domains:["creative"],dependencies:[],version:"1.0.0"},{name:"Social Icons",npmName:"@nice2dev/icons-social",description:"Social platforms, reactions, and messaging icons",iconCount:200,categories:["platforms","reactions","messaging"],domains:[],dependencies:[],version:"1.0.0"},{name:"Game Icons",npmName:"@nice2dev/icons-game",description:"Characters, items, UI elements, and game actions",iconCount:400,categories:["characters","items","ui","actions"],domains:["gaming"],dependencies:[],version:"1.0.0"},{name:"Life Management Icons",npmName:"@nice2dev/icons-life",description:"Personal finance, health, productivity, and home icons",iconCount:300,categories:["finance","health","productivity","home","family"],domains:["life-management"],dependencies:[],version:"1.0.0"},{name:"All Icons",npmName:"@nice2dev/icons-all",description:"Meta-package containing all icon packs",iconCount:2500,categories:[],domains:[],dependencies:["@nice2dev/icons-business","@nice2dev/icons-education","@nice2dev/icons-tech","@nice2dev/icons-media","@nice2dev/icons-social","@nice2dev/icons-game","@nice2dev/icons-life"],version:"1.0.0"}],Dt=Object.freeze(Object.defineProperty({__proto__:null,STANDARD_FAVICON_SIZES:Mt,THEMATIC_PACKAGES:Tt},Symbol.toStringTag,{value:"Module"})),Ct=Object.freeze(Object.defineProperty({__proto__:null},Symbol.toStringTag,{value:"Module"}));Object.defineProperty(exports,"CURRENT_SCHEMA_VERSION",{enumerable:!0,get:()=>n.CURRENT_SCHEMA_VERSION});Object.defineProperty(exports,"NiceAuditLog",{enumerable:!0,get:()=>n.NiceAuditLog});Object.defineProperty(exports,"NiceChat",{enumerable:!0,get:()=>n.NiceChat});Object.defineProperty(exports,"NiceColumnChooser",{enumerable:!0,get:()=>n.NiceColumnChooser});Object.defineProperty(exports,"NiceComponentTypeMapping",{enumerable:!0,get:()=>n.NiceComponentTypeMapping});Object.defineProperty(exports,"NiceDesignTokens",{enumerable:!0,get:()=>n.NiceDesignTokens});Object.defineProperty(exports,"NiceDiagramDesigner",{enumerable:!0,get:()=>n.NiceDiagramDesigner});Object.defineProperty(exports,"NiceDisplayStylePicker",{enumerable:!0,get:()=>n.NiceDisplayStylePicker});Object.defineProperty(exports,"NiceDocumentViewer",{enumerable:!0,get:()=>n.NiceDocumentViewer});Object.defineProperty(exports,"NiceDraggable",{enumerable:!0,get:()=>n.NiceDraggable});Object.defineProperty(exports,"NiceFeatureFlagsProvider",{enumerable:!0,get:()=>n.NiceFeatureFlagsProvider});Object.defineProperty(exports,"NiceFeatureGate",{enumerable:!0,get:()=>n.NiceFeatureGate});Object.defineProperty(exports,"NiceFileManager",{enumerable:!0,get:()=>n.NiceFileManager});Object.defineProperty(exports,"NiceFilterBuilder",{enumerable:!0,get:()=>n.NiceFilterBuilder});Object.defineProperty(exports,"NiceGallery",{enumerable:!0,get:()=>n.NiceGallery});Object.defineProperty(exports,"NiceGitManager",{enumerable:!0,get:()=>n.NiceGitManager});Object.defineProperty(exports,"NiceLifecycleHooksEditor",{enumerable:!0,get:()=>n.NiceLifecycleHooksEditor});Object.defineProperty(exports,"NiceMap",{enumerable:!0,get:()=>n.NiceMap});Object.defineProperty(exports,"NiceModuleHotSwap",{enumerable:!0,get:()=>n.NiceModuleHotSwap});Object.defineProperty(exports,"NiceModuleLoaderProvider",{enumerable:!0,get:()=>n.NiceModuleLoaderProvider});Object.defineProperty(exports,"NiceModuleRoute",{enumerable:!0,get:()=>n.NiceModuleRoute});Object.defineProperty(exports,"NicePermissionMatrix",{enumerable:!0,get:()=>n.NicePermissionMatrix});Object.defineProperty(exports,"NicePrintPreview",{enumerable:!0,get:()=>n.NicePrintPreview});Object.defineProperty(exports,"NiceRecipeEditor",{enumerable:!0,get:()=>n.NiceRecipeEditor});Object.defineProperty(exports,"NiceRevisionHistory",{enumerable:!0,get:()=>n.NiceRevisionHistory});Object.defineProperty(exports,"NiceShowcase",{enumerable:!0,get:()=>n.NiceShowcase});Object.defineProperty(exports,"NiceSortable",{enumerable:!0,get:()=>n.NiceSortable});Object.defineProperty(exports,"NiceSpeechToText",{enumerable:!0,get:()=>n.NiceSpeechToText});Object.defineProperty(exports,"NiceThemeDesigner",{enumerable:!0,get:()=>n.NiceThemeDesigner});Object.defineProperty(exports,"NiceUndoManager",{enumerable:!0,get:()=>n.NiceUndoManager});Object.defineProperty(exports,"NiceUndoProvider",{enumerable:!0,get:()=>n.NiceUndoProvider});Object.defineProperty(exports,"NiceUpload",{enumerable:!0,get:()=>n.NiceUpload});Object.defineProperty(exports,"NiceValidationGroup",{enumerable:!0,get:()=>n.NiceValidationGroup});Object.defineProperty(exports,"NiceValidationSummary",{enumerable:!0,get:()=>n.NiceValidationSummary});Object.defineProperty(exports,"NiceValidator",{enumerable:!0,get:()=>n.NiceValidator});Object.defineProperty(exports,"NiceViewCache",{enumerable:!0,get:()=>n.NiceViewCache});Object.defineProperty(exports,"NiceViewFetchError",{enumerable:!0,get:()=>n.NiceViewFetchError});Object.defineProperty(exports,"NiceViewFetcher",{enumerable:!0,get:()=>n.NiceViewFetcher});Object.defineProperty(exports,"NiceViewHotReload",{enumerable:!0,get:()=>n.NiceViewHotReload});Object.defineProperty(exports,"NiceViewRegistry",{enumerable:!0,get:()=>n.NiceViewRegistry});Object.defineProperty(exports,"NiceViewRenderer",{enumerable:!0,get:()=>n.NiceViewRenderer});Object.defineProperty(exports,"autoDetectColumns",{enumerable:!0,get:()=>n.autoDetectColumns});Object.defineProperty(exports,"checkModuleHealth",{enumerable:!0,get:()=>n.checkModuleHealth});Object.defineProperty(exports,"checkPermissions",{enumerable:!0,get:()=>n.checkPermissions});Object.defineProperty(exports,"checkSingleModule",{enumerable:!0,get:()=>n.checkSingleModule});Object.defineProperty(exports,"compareSemver",{enumerable:!0,get:()=>n.compareSemver});Object.defineProperty(exports,"createEmptyRecipe",{enumerable:!0,get:()=>n.createEmptyRecipe});Object.defineProperty(exports,"createStandardErpContracts",{enumerable:!0,get:()=>n.createStandardErpContracts});Object.defineProperty(exports,"createUndoMiddleware",{enumerable:!0,get:()=>n.createUndoMiddleware});Object.defineProperty(exports,"defaultTypeMapping",{enumerable:!0,get:()=>n.defaultTypeMapping});Object.defineProperty(exports,"defaultViewRegistry",{enumerable:!0,get:()=>n.defaultViewRegistry});Object.defineProperty(exports,"deserializeManifest",{enumerable:!0,get:()=>n.deserializeManifest});Object.defineProperty(exports,"deserializeRbacPolicy",{enumerable:!0,get:()=>n.deserializeRbacPolicy});Object.defineProperty(exports,"deserializeView",{enumerable:!0,get:()=>n.deserializeView});Object.defineProperty(exports,"diffObjects",{enumerable:!0,get:()=>n.diffObjects});Object.defineProperty(exports,"diffViews",{enumerable:!0,get:()=>n.diffViews});Object.defineProperty(exports,"downloadCSV",{enumerable:!0,get:()=>n.downloadCSV});Object.defineProperty(exports,"downloadHTML",{enumerable:!0,get:()=>n.downloadHTML});Object.defineProperty(exports,"downloadJSON",{enumerable:!0,get:()=>n.downloadJSON});Object.defineProperty(exports,"downloadPDF",{enumerable:!0,get:()=>n.downloadPDF});Object.defineProperty(exports,"downloadXLSX",{enumerable:!0,get:()=>n.downloadXLSX});Object.defineProperty(exports,"exportToCSV",{enumerable:!0,get:()=>n.exportToCSV});Object.defineProperty(exports,"exportToHTML",{enumerable:!0,get:()=>n.exportToHTML});Object.defineProperty(exports,"exportToJSON",{enumerable:!0,get:()=>n.exportToJSON});Object.defineProperty(exports,"exportToPDF",{enumerable:!0,get:()=>n.exportToPDF});Object.defineProperty(exports,"exportToXLSX",{enumerable:!0,get:()=>n.exportToXLSX});Object.defineProperty(exports,"extractControlTypes",{enumerable:!0,get:()=>n.extractControlTypes});Object.defineProperty(exports,"extractTokensFromTheme",{enumerable:!0,get:()=>n.extractTokensFromTheme});Object.defineProperty(exports,"formatDiffAsText",{enumerable:!0,get:()=>n.formatDiffAsText});Object.defineProperty(exports,"generateAllForRbac",{enumerable:!0,get:()=>n.generateAllForRbac});Object.defineProperty(exports,"generateAllForView",{enumerable:!0,get:()=>n.generateAllForView});Object.defineProperty(exports,"generateDartModel",{enumerable:!0,get:()=>n.generateDartModel});Object.defineProperty(exports,"generateMermaidSyntax",{enumerable:!0,get:()=>n.generateMermaidSyntax});Object.defineProperty(exports,"generateRbacDart",{enumerable:!0,get:()=>n.generateRbacDart});Object.defineProperty(exports,"generateRbacTypescript",{enumerable:!0,get:()=>n.generateRbacTypescript});Object.defineProperty(exports,"generateScaffold",{enumerable:!0,get:()=>n.generateScaffold});Object.defineProperty(exports,"generateStoriesFromViews",{enumerable:!0,get:()=>n.generateStoriesFromViews});Object.defineProperty(exports,"generateStoryFromView",{enumerable:!0,get:()=>n.generateStoryFromView});Object.defineProperty(exports,"generateTokens",{enumerable:!0,get:()=>n.generateTokens});Object.defineProperty(exports,"generateTypescriptModel",{enumerable:!0,get:()=>n.generateTypescriptModel});Object.defineProperty(exports,"generateViewCatalog",{enumerable:!0,get:()=>n.generateViewCatalog});Object.defineProperty(exports,"isAllowed",{enumerable:!0,get:()=>n.isAllowed});Object.defineProperty(exports,"isVersionCompatible",{enumerable:!0,get:()=>n.isVersionCompatible});Object.defineProperty(exports,"isViewCompatibleWith",{enumerable:!0,get:()=>n.isViewCompatibleWith});Object.defineProperty(exports,"listScaffoldTemplates",{enumerable:!0,get:()=>n.listScaffoldTemplates});Object.defineProperty(exports,"newRecipeId",{enumerable:!0,get:()=>n.newRecipeId});Object.defineProperty(exports,"niceExport",{enumerable:!0,get:()=>n.niceExport});Object.defineProperty(exports,"recipeTotalMinutes",{enumerable:!0,get:()=>n.recipeTotalMinutes});Object.defineProperty(exports,"resolvePermissions",{enumerable:!0,get:()=>n.resolvePermissions});Object.defineProperty(exports,"runContractTests",{enumerable:!0,get:()=>n.runContractTests});Object.defineProperty(exports,"serializeManifest",{enumerable:!0,get:()=>n.serializeManifest});Object.defineProperty(exports,"serializeRbacPolicy",{enumerable:!0,get:()=>n.serializeRbacPolicy});Object.defineProperty(exports,"serializeView",{enumerable:!0,get:()=>n.serializeView});Object.defineProperty(exports,"useAuditLog",{enumerable:!0,get:()=>n.useAuditLog});Object.defineProperty(exports,"useColumnChooser",{enumerable:!0,get:()=>n.useColumnChooser});Object.defineProperty(exports,"useFeatureFlag",{enumerable:!0,get:()=>n.useFeatureFlag});Object.defineProperty(exports,"useFeatureFlags",{enumerable:!0,get:()=>n.useFeatureFlags});Object.defineProperty(exports,"useModuleLoader",{enumerable:!0,get:()=>n.useModuleLoader});Object.defineProperty(exports,"useNiceValidation",{enumerable:!0,get:()=>n.useNiceValidation});Object.defineProperty(exports,"usePrintPreview",{enumerable:!0,get:()=>n.usePrintPreview});Object.defineProperty(exports,"useUndoKeyboard",{enumerable:!0,get:()=>n.useUndoKeyboard});Object.defineProperty(exports,"useUndoManager",{enumerable:!0,get:()=>n.useUndoManager});Object.defineProperty(exports,"validateCrossPlatformView",{enumerable:!0,get:()=>n.validateCrossPlatformView});Object.defineProperty(exports,"validateDiagramSchema",{enumerable:!0,get:()=>n.validateDiagramSchema});Object.defineProperty(exports,"validateModuleManifest",{enumerable:!0,get:()=>n.validateModuleManifest});Object.defineProperty(exports,"validateRbacPolicy",{enumerable:!0,get:()=>n.validateRbacPolicy});Object.defineProperty(exports,"validateViewDefinition",{enumerable:!0,get:()=>n.validateViewDefinition});Object.defineProperty(exports,"validateViewForDeploy",{enumerable:!0,get:()=>n.validateViewForDeploy});Object.defineProperty(exports,"validateViewsBatch",{enumerable:!0,get:()=>n.validateViewsBatch});exports.AIAssistant=ae;exports.AIPlaygrounds=Ge;exports.APMProfiling=be;exports.AccessControl=Se;exports.AccessibilityI18n=jt;exports.AlertingIncidents=he;exports.ApiDesigner=Oe;exports.ApiTesting=Pe;exports.Artifacts=re;exports.AuditCompliance=_e;exports.Certificates=J;exports.ChartBuilder=xe;exports.CloudInstances=q;exports.ConfigManagement=ee;exports.Containers=U;exports.DashboardDesigner=Ne;exports.DataManagement=ce;exports.DataPipeline=Le;exports.DataWarehouse=Ie;exports.DatasetManagement=He;exports.DbAdapters=ue;exports.DbAdmin=pe;exports.DbDesigner=de;exports.Debugger=ie;exports.DeviceManagement=Fe;exports.DistributedTracing=me;exports.DnsManagement=K;exports.DownloadManager=N;exports.DownloadTorrent=rt;exports.EdgeComputing=Be;exports.Education=Je;exports.EmailTemplate=ze;exports.ErpEnterprise=Ye;exports.FormBuilder=Ae;exports.GameEngineAdvanced=Ct;exports.Git=te;exports.HardwareIntegration=Xe;exports.IDE=oe;exports.IaC=Z;exports.IconTools=Dt;exports.IntegrationPlatform=je;exports.Kubernetes=H;exports.LifeManagement=Ze;exports.LogManagement=fe;exports.Mathematics=tt;exports.MessageQueue=Me;exports.MetricsDashboard=ge;exports.MobileComponents=We;exports.ModelDeployment=$e;exports.ModelRegistry=qe;exports.ModelTraining=Qe;exports.NetworkConfig=G;exports.NetworkMonitoring=W;exports.PdfTools=Te;exports.Pipelines=Y;exports.RemoteDesktop=V;exports.ReportDesigner=ke;exports.ScadaIndustrial=Ve;exports.ScientificResearch=et;exports.SecretManagement=we;exports.SecurityScanning=ye;exports.SelfServiceAnalytics=Ee;exports.SensorDashboard=Re;exports.ServerManagement=X;exports.SmartHome=Ue;exports.Spreadsheet=De;exports.SqlEditor=le;exports.Terminal=$;exports.TestingQA=Ke;exports.TorrentClient=F;exports.Traceless=wt;exports.VirtualMachines=Q;exports.VisualScripting=ne;exports.WordProcessor=Ce;exports.Workspace=se;exports.calculateETA=_;exports.calculatePieces=v;exports.calculateTorrentHealth=dt;exports.createDownloadSegments=at;exports.createFileSelection=ct;exports.createMagnetUri=E;exports.createPieceStatus=P;exports.createTorrent=R;exports.disposeDownloadManager=it;exports.disposeTorrentClient=ft;exports.filterFilesByExtension=M;exports.formatBytes=ot;exports.formatDuration=nt;exports.formatPeerCount=lt;exports.formatSpeed=f;exports.generateDownloadId=k;exports.generateInfoHash=j;exports.generatePeerId=L;exports.getAudioFiles=pt;exports.getDownloadManager=x;exports.getFileType=A;exports.getLargestFile=gt;exports.getTorrentClient=B;exports.getVideoFiles=ut;exports.parseDownloadUrl=D;exports.parseMagnetLink=C;exports.parseMagnetUri=I;exports.useDownloadManager=st;exports.useTorrentClient=mt;exports.validateChecksum=z;
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { CURRENT_SCHEMA_VERSION as It, NiceAuditLog as Et, NiceChat as Nt, NiceColumnChooser as Ft, NiceComponentTypeMapping as Bt, NiceDesignTokens as Rt, NiceDiagramDesigner as Ut, NiceDisplayStylePicker as Vt, NiceDocumentViewer as Ht, NiceDraggable as Qt, NiceFeatureFlagsProvider as $t, NiceFeatureGate as qt, NiceFileManager as Gt, NiceFilterBuilder as Wt, NiceGallery as Kt, NiceGitManager as Xt, NiceLifecycleHooksEditor as Jt, NiceMap as Yt, NiceModuleHotSwap as Zt, NiceModuleLoaderProvider as eo, NiceModuleRoute as to, NicePermissionMatrix as oo, NicePrintPreview as no, NiceRecipeEditor as ro, NiceRevisionHistory as so, NiceShowcase as ao, NiceSortable as io, NiceSpeechToText as lo, NiceThemeDesigner as co, NiceUndoManager as uo, NiceUndoProvider as po, NiceUpload as fo, NiceValidationGroup as go, NiceValidationSummary as mo, NiceValidator as ho, NiceViewCache as bo, NiceViewFetchError as wo, NiceViewFetcher as yo, NiceViewHotReload as So, NiceViewRegistry as _o, NiceViewRenderer as vo, autoDetectColumns as Mo, checkModuleHealth as To, checkPermissions as Do, checkSingleModule as Oo, compareSemver as Ao, createEmptyRecipe as jo, createStandardErpContracts as Po, createUndoMiddleware as zo, defaultTypeMapping as Co, defaultViewRegistry as ko, deserializeManifest as xo, deserializeRbacPolicy as Lo, deserializeView as Io, diffObjects as Eo, diffViews as No, downloadCSV as Fo, downloadHTML as Bo, downloadJSON as Ro, downloadPDF as Uo, downloadXLSX as Vo, exportToCSV as Ho, exportToHTML as Qo, exportToJSON as $o, exportToPDF as qo, exportToXLSX as Go, extractControlTypes as Wo, extractTokensFromTheme as Ko, formatDiffAsText as Xo, generateAllForRbac as Jo, generateAllForView as Yo, generateDartModel as Zo, generateMermaidSyntax as en, generateRbacDart as tn, generateRbacTypescript as on, generateScaffold as nn, generateStoriesFromViews as rn, generateStoryFromView as sn, generateTokens as an, generateTypescriptModel as ln, generateViewCatalog as dn, isAllowed as cn, isVersionCompatible as un, isViewCompatibleWith as pn, listScaffoldTemplates as fn, newRecipeId as gn, niceExport as mn, recipeTotalMinutes as hn, resolvePermissions as bn, runContractTests as wn, serializeManifest as yn, serializeRbacPolicy as Sn, serializeView as _n, useAuditLog as vn, useColumnChooser as Mn, useFeatureFlag as Tn, useFeatureFlags as Dn, useModuleLoader as On, useNiceValidation as An, usePrintPreview as jn, useUndoKeyboard as Pn, useUndoManager as zn, validateCrossPlatformView as Cn, validateDiagramSchema as kn, validateModuleManifest as xn, validateRbacPolicy as Ln, validateViewDefinition as In, validateViewForDeploy as En, validateViewsBatch as Nn } from "@nice2dev/ui";
1
+ import { CURRENT_SCHEMA_VERSION as It, NiceAuditLog as Et, NiceChat as Nt, NiceColumnChooser as Ft, NiceComponentTypeMapping as Bt, NiceDesignTokens as Rt, NiceDiagramDesigner as Ut, NiceDisplayStylePicker as Vt, NiceDocumentViewer as Qt, NiceDraggable as Ht, NiceFeatureFlagsProvider as $t, NiceFeatureGate as qt, NiceFileManager as Gt, NiceFilterBuilder as Wt, NiceGallery as Kt, NiceGitManager as Xt, NiceLifecycleHooksEditor as Jt, NiceMap as Yt, NiceModuleHotSwap as Zt, NiceModuleLoaderProvider as eo, NiceModuleRoute as to, NicePermissionMatrix as oo, NicePrintPreview as no, NiceRecipeEditor as ro, NiceRevisionHistory as so, NiceShowcase as ao, NiceSortable as io, NiceSpeechToText as lo, NiceThemeDesigner as co, NiceUndoManager as uo, NiceUndoProvider as po, NiceUpload as fo, NiceValidationGroup as go, NiceValidationSummary as mo, NiceValidator as ho, NiceViewCache as bo, NiceViewFetchError as wo, NiceViewFetcher as yo, NiceViewHotReload as So, NiceViewRegistry as _o, NiceViewRenderer as vo, autoDetectColumns as Mo, checkModuleHealth as To, checkPermissions as Do, checkSingleModule as Oo, compareSemver as Ao, createEmptyRecipe as jo, createStandardErpContracts as Po, createUndoMiddleware as zo, defaultTypeMapping as Co, defaultViewRegistry as ko, deserializeManifest as xo, deserializeRbacPolicy as Lo, deserializeView as Io, diffObjects as Eo, diffViews as No, downloadCSV as Fo, downloadHTML as Bo, downloadJSON as Ro, downloadPDF as Uo, downloadXLSX as Vo, exportToCSV as Qo, exportToHTML as Ho, exportToJSON as $o, exportToPDF as qo, exportToXLSX as Go, extractControlTypes as Wo, extractTokensFromTheme as Ko, formatDiffAsText as Xo, generateAllForRbac as Jo, generateAllForView as Yo, generateDartModel as Zo, generateMermaidSyntax as en, generateRbacDart as tn, generateRbacTypescript as on, generateScaffold as nn, generateStoriesFromViews as rn, generateStoryFromView as sn, generateTokens as an, generateTypescriptModel as ln, generateViewCatalog as dn, isAllowed as cn, isVersionCompatible as un, isViewCompatibleWith as pn, listScaffoldTemplates as fn, newRecipeId as gn, niceExport as mn, recipeTotalMinutes as hn, resolvePermissions as bn, runContractTests as wn, serializeManifest as yn, serializeRbacPolicy as Sn, serializeView as _n, useAuditLog as vn, useColumnChooser as Mn, useFeatureFlag as Tn, useFeatureFlags as Dn, useModuleLoader as On, useNiceValidation as An, usePrintPreview as jn, useUndoKeyboard as Pn, useUndoManager as zn, validateCrossPlatformView as Cn, validateDiagramSchema as kn, validateModuleManifest as xn, validateRbacPolicy as Ln, validateViewDefinition as In, validateViewForDeploy as En, validateViewsBatch as Nn } from "@nice2dev/ui";
2
2
  import { useMemo as S, useState as _, useEffect as A, useCallback as c } from "react";
3
3
  const te = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
4
4
  __proto__: null
@@ -121,10 +121,10 @@ const te = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
121
121
  __proto__: null
122
122
  }, Symbol.toStringTag, { value: "Module" })), Ve = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
123
123
  __proto__: null
124
- }, Symbol.toStringTag, { value: "Module" })), He = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
125
- __proto__: null
126
124
  }, Symbol.toStringTag, { value: "Module" })), Qe = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
127
125
  __proto__: null
126
+ }, Symbol.toStringTag, { value: "Module" })), He = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
127
+ __proto__: null
128
128
  }, Symbol.toStringTag, { value: "Module" })), $e = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
129
129
  __proto__: null
130
130
  }, Symbol.toStringTag, { value: "Module" })), qe = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
@@ -1192,13 +1192,11 @@ class U {
1192
1192
  * Initializes DHT.
1193
1193
  */
1194
1194
  initDHT() {
1195
- console.log("DHT initialized");
1196
1195
  }
1197
1196
  /**
1198
1197
  * Initializes PEX.
1199
1198
  */
1200
1199
  initPEX() {
1201
- console.log("PEX initialized");
1202
1200
  }
1203
1201
  /**
1204
1202
  * Fetches torrent metadata from magnet.
@@ -1315,14 +1313,14 @@ async function V(r) {
1315
1313
  };
1316
1314
  }
1317
1315
  let w = null;
1318
- function H(r) {
1316
+ function Q(r) {
1319
1317
  return w || (w = new U(r)), w;
1320
1318
  }
1321
1319
  function At() {
1322
1320
  w == null || w.dispose(), w = null;
1323
1321
  }
1324
1322
  function jt(r = {}) {
1325
- const { config: e, autoRefresh: t = !0, refreshInterval: o = 1e3 } = r, n = S(() => H(e), [e]), [s, a] = _(n.getAllTorrents()), [d, f] = _(n.getStatistics());
1323
+ const { config: e, autoRefresh: t = !0, refreshInterval: o = 1e3 } = r, n = S(() => Q(e), [e]), [s, a] = _(n.getAllTorrents()), [d, f] = _(n.getStatistics());
1326
1324
  A(() => {
1327
1325
  const i = () => {
1328
1326
  a([...n.getAllTorrents()]), f(n.getStatistics());
@@ -1373,7 +1371,7 @@ function jt(r = {}) {
1373
1371
  createTorrent: V
1374
1372
  };
1375
1373
  }
1376
- const Q = {
1374
+ const H = {
1377
1375
  cookiesAllowed: !1,
1378
1376
  localStorageAllowed: !1,
1379
1377
  sessionStorageAllowed: !1,
@@ -1450,7 +1448,7 @@ const Q = {
1450
1448
  }, Pt = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
1451
1449
  __proto__: null,
1452
1450
  DEFAULT_FULL_POLICY: $,
1453
- DEFAULT_TRACELESS_POLICY: Q,
1451
+ DEFAULT_TRACELESS_POLICY: H,
1454
1452
  MODE_CAPABILITIES: q
1455
1453
  }, Symbol.toStringTag, { value: "Module" })), G = {
1456
1454
  normalText: 4.5,
@@ -1708,7 +1706,7 @@ export {
1708
1706
  ct as Education,
1709
1707
  $e as EmailTemplate,
1710
1708
  ut as ErpEnterprise,
1711
- He as FormBuilder,
1709
+ Qe as FormBuilder,
1712
1710
  kt as GameEngineAdvanced,
1713
1711
  me as Git,
1714
1712
  lt as HardwareIntegration,
@@ -1735,8 +1733,8 @@ export {
1735
1733
  Rt as NiceDesignTokens,
1736
1734
  Ut as NiceDiagramDesigner,
1737
1735
  Vt as NiceDisplayStylePicker,
1738
- Ht as NiceDocumentViewer,
1739
- Qt as NiceDraggable,
1736
+ Qt as NiceDocumentViewer,
1737
+ Ht as NiceDraggable,
1740
1738
  $t as NiceFeatureFlagsProvider,
1741
1739
  qt as NiceFeatureGate,
1742
1740
  Gt as NiceFileManager,
@@ -1771,7 +1769,7 @@ export {
1771
1769
  Re as PdfTools,
1772
1770
  pe as Pipelines,
1773
1771
  te as RemoteDesktop,
1774
- Qe as ReportDesigner,
1772
+ He as ReportDesigner,
1775
1773
  et as ScadaIndustrial,
1776
1774
  ft as ScientificResearch,
1777
1775
  xe as SecretManagement,
@@ -1820,8 +1818,8 @@ export {
1820
1818
  Ro as downloadJSON,
1821
1819
  Uo as downloadPDF,
1822
1820
  Vo as downloadXLSX,
1823
- Ho as exportToCSV,
1824
- Qo as exportToHTML,
1821
+ Qo as exportToCSV,
1822
+ Ho as exportToHTML,
1825
1823
  $o as exportToJSON,
1826
1824
  qo as exportToPDF,
1827
1825
  Go as exportToXLSX,
@@ -1852,7 +1850,7 @@ export {
1852
1850
  N as getDownloadManager,
1853
1851
  x as getFileType,
1854
1852
  Ot as getLargestFile,
1855
- H as getTorrentClient,
1853
+ Q as getTorrentClient,
1856
1854
  Tt as getVideoFiles,
1857
1855
  cn as isAllowed,
1858
1856
  un as isVersionCompatible,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nice2dev/ui-tools",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "description": "Nice2Dev UI Tools — FileManager, FilterBuilder, Gallery, Map, Git, Validation, Export, ColumnChooser, AuditLog, Designers",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -28,12 +28,12 @@
28
28
  "prepublishOnly": "npm run build"
29
29
  },
30
30
  "peerDependencies": {
31
- "@nice2dev/ui": "^1.0.20",
31
+ "@nice2dev/ui": "^1.2.0",
32
32
  "react": ">=17.0.0",
33
33
  "react-dom": ">=17.0.0"
34
34
  },
35
35
  "devDependencies": {
36
- "@nice2dev/ui": "^1.2.0",
36
+ "@nice2dev/ui": "^1.2.1",
37
37
  "@types/react": "^19.2.18",
38
38
  "@types/react-dom": "^19.2.7",
39
39
  "@vitejs/plugin-react": "^4.7.0",