tauri-notice-window 1.0.10 → 1.0.11

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/README.md CHANGED
@@ -712,6 +712,50 @@ setNoticeConfig({
712
712
 
713
713
  **URL Validation:** Before creating a WebviewWindow, the library validates the window URL. If the URL is invalid (empty, malformed, or doesn't start with `/`, `http://`, `https://`, or `tauri://`), it automatically falls back to the `notFoundUrl` and logs a warning.
714
714
 
715
+ #### deleteMessageById()
716
+
717
+ Delete a message by ID. Removes the message from both the runtime queue (Zustand) and persistent storage (IndexedDB).
718
+
719
+ ```typescript
720
+ import { deleteMessageById } from 'tauri-notice-window'
721
+
722
+ await deleteMessageById('message-123')
723
+ ```
724
+
725
+ **Behavior:**
726
+ - Removes message from queue and database
727
+ - If message is currently displayed, window closes automatically
728
+ - Next message in queue shows immediately
729
+
730
+ #### hideMessageById()
731
+
732
+ Hide a message by ID. Marks the message as hidden in the database and removes it from the queue.
733
+
734
+ ```typescript
735
+ import { hideMessageById } from 'tauri-notice-window'
736
+
737
+ // Typically used for server-triggered hide events
738
+ await hideMessageById('message-123')
739
+ ```
740
+
741
+ **Behavior:**
742
+ - Marks message as hidden in database
743
+ - Removes from queue
744
+ - Closes window if currently displayed
745
+
746
+ #### markMessageAsShown()
747
+
748
+ Mark a message as shown to prevent it from being displayed again.
749
+
750
+ ```typescript
751
+ import { markMessageAsShown } from 'tauri-notice-window'
752
+
753
+ // Manually mark without displaying
754
+ await markMessageAsShown('message-123')
755
+ ```
756
+
757
+ **Use Case:** When you need to acknowledge a message without showing its window (e.g., user already saw it elsewhere).
758
+
715
759
  ### Store Methods (Recommended)
716
760
 
717
761
  All operations should go through the Zustand store for consistency:
@@ -822,14 +866,18 @@ app/
822
866
 
823
867
  ### Message Deletion and Queue Management
824
868
 
825
- All message operations should go through the Zustand store to maintain consistency.
869
+ All message operations go through clean public APIs that internally use the Zustand store.
826
870
 
827
871
  ```typescript
828
- import { useNoticeWindow, useMessageQueueStore } from 'tauri-notice-window'
872
+ import {
873
+ useNoticeWindow,
874
+ deleteMessageById,
875
+ hideMessageById,
876
+ markMessageAsShown
877
+ } from 'tauri-notice-window'
829
878
 
830
879
  function NoticeManager() {
831
880
  const { showNotice } = useNoticeWindow()
832
- const store = useMessageQueueStore.getState()
833
881
 
834
882
  // Example 1: Delete a message from the queue
835
883
  const handleDeleteMessage = async () => {
@@ -837,8 +885,8 @@ function NoticeManager() {
837
885
  await showNotice({ id: '2', title: 'Second', type: 'announcement', data: {} })
838
886
  await showNotice({ id: '3', title: 'Third', type: 'announcement', data: {} })
839
887
 
840
- // Delete message '2' from queue via store
841
- await store.deleteMessage('2')
888
+ // Delete message '2' from queue
889
+ await deleteMessageById('2')
842
890
  // Result: Message removed from queue and database
843
891
  // Console output: "Message 2 was deleted, skipping to next"
844
892
  }
@@ -848,42 +896,50 @@ function NoticeManager() {
848
896
  await showNotice({ id: '4', title: 'Current', type: 'announcement', data: {} })
849
897
  // Window for message '4' is now open
850
898
 
851
- // Delete via store
852
- await store.deleteMessage('4')
899
+ // Delete current message
900
+ await deleteMessageById('4')
853
901
  // Result: Window closes, next message shows automatically
854
902
  }
855
903
 
856
- // Example 3: Remove from queue without deleting from DB
857
- const handleRemoveFromQueue = async () => {
858
- await store.removeFromQueue('5') // Only removes from runtime queue
859
- // Message still exists in DB for historical queries
904
+ // Example 3: Hide a message (server-triggered)
905
+ const handleHideMessage = async (messageId: string) => {
906
+ await hideMessageById(messageId)
907
+ // Marks as hidden in DB + removes from queue + closes window
860
908
  }
861
909
 
862
- // Example 4: Hide a message (server-triggered)
863
- const handleHideMessage = async () => {
864
- await store.hideMessage('6') // Marks as hidden + removes from queue
910
+ // Example 4: Mark as shown without displaying
911
+ const handleMarkAsShown = async (messageId: string) => {
912
+ await markMessageAsShown(messageId)
913
+ // Prevents message from being shown in the future
865
914
  }
866
915
  }
867
916
  ```
868
917
 
869
918
  **How it works:**
870
- 1. **Store methods** handle both memory (Zustand) and persistence (IndexedDB)
871
- 2. `deleteMessage()` removes from both queue and database
919
+ 1. All operations update both the store (Zustand) and database (IndexedDB)
920
+ 2. `deleteMessageById()` removes from both queue and database
872
921
  3. If deleted message is currently shown, window closes automatically
873
922
  4. Queue position changes are persisted to database
874
923
  5. Before showing any message, system verifies it exists in database
875
924
  6. **Safety Layer:** `NoticeLayout` component auto-closes if message is missing
876
925
 
877
- **Key Difference from Old API:**
926
+ **API Methods:**
878
927
  ```typescript
879
- // OLD: Direct database access (bypassed store, caused circular deps)
880
- import { deleteMessageById } from 'tauri-notice-window'
881
- await deleteMessageById('123') // Only deleted from DB, not from queue
882
-
883
- // ✅ NEW: Store-first approach (clean, consistent)
884
- import { useMessageQueueStore } from 'tauri-notice-window'
885
- const store = useMessageQueueStore.getState()
886
- await store.deleteMessage('123') // Updates both store and database
928
+ // Delete message completely
929
+ await deleteMessageById('123')
930
+ // Removes from queue AND database
931
+ // → If currently showing, window closes
932
+
933
+ // Hide message (server-triggered)
934
+ await hideMessageById('123')
935
+ // Marks as hidden in database
936
+ // → Removes from queue
937
+ // → Closes window if open
938
+
939
+ // Mark as shown
940
+ await markMessageAsShown('123')
941
+ // → Updates database
942
+ // → Prevents future display
887
943
  ```
888
944
 
889
945
  ### Server-Triggered Hide
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const de=require("zustand"),he=require("zustand-sync"),ge=require("dexie"),g=require("react"),N=require("react/jsx-runtime"),X="tauri-notice-config",H={routePrefix:"/notice",databaseName:"tauri-notice-db",defaultWidth:400,defaultHeight:300,notFoundUrl:"/404"},ee=()=>{try{const t=localStorage.getItem(X);if(t)return{...H,...JSON.parse(t)}}catch(t){console.warn("Failed to load config from localStorage:",t)}return H},ye=t=>{try{localStorage.setItem(X,JSON.stringify(t))}catch(e){console.warn("Failed to save config to localStorage:",e)}},be=t=>{const i={...ee(),...t};ye(i)},F=()=>ee();class pe extends ge{messages;constructor(e){super(e),this.version(1).stores({messages:"id, queueStatus, queuePosition, timestamp"})}}let z=null;const B=()=>{if(!z){const t=F();z=new pe(t.databaseName)}return z},h=()=>z||B(),_e=async t=>{const e={...t,timestamp:new Date().toISOString(),isRead:!1,isShown:!1,queueStatus:"pending",queuePosition:0};await h().messages.put(e)},fe=async t=>!!await h().messages.get(t),me=async t=>{const e=await h().messages.get(t);return e?.isShown===!0||e?.queueStatus==="shown"},te=async()=>await h().messages.where("queueStatus").equals("pending").sortBy("queuePosition"),ve=async(t,e)=>{await h().messages.update(t,{queueStatus:e})},We=async t=>{await h().messages.update(t,{queueStatus:"shown",isShown:!0})},Se=async t=>{await h().messages.update(t,{queueStatus:"hidden"})},U=async t=>await h().messages.get(t),Ne=async t=>{await h().messages.delete(t)},De=async()=>{await h().messages.where("queueStatus").anyOf(["pending","showing"]).delete()},ze=async t=>{const e=t.map(i=>h().messages.update(i.id,{queuePosition:i.position}));await Promise.all(e)},Ae=(t,e)=>({queue:[],currentMessage:null,isProcessing:!1,initialized:!1,activeWindowIds:[],enqueue:async i=>{const n=e();if(await me(i.id)){console.log(`Message ${i.id} was already shown, skipping`);return}if(await fe(i.id)||await _e(i),!n.queue.some(u=>u.id===i.id)){const u=[...n.queue,i];t({queue:u}),await e().persistQueue()}!n.isProcessing&&!n.currentMessage&&await e().showNext()},dequeue:()=>{const i=e();if(i.queue.length===0)return null;const[n,...a]=i.queue;return t({queue:a}),n},showNext:async()=>{if(e().isProcessing)return;const n=e().dequeue();if(!n){t({isProcessing:!1,currentMessage:null});return}if(!await U(n.id)){console.log(`Message ${n.id} was deleted, skipping to next`),await e().showNext();return}t({currentMessage:n,isProcessing:!0}),await ve(n.id,"showing"),await e().persistQueue()},clearCurrent:()=>{t({currentMessage:null,isProcessing:!1}),e().queue.length>0&&e().showNext()},setCurrentMessage:i=>{t({currentMessage:i})},setIsProcessing:i=>{t({isProcessing:i})},setQueue:i=>{t({queue:i})},initializeFromDatabase:async()=>{if(e().initialized)return;t({initialized:!0});const n=await te();n.length>0&&(t({queue:n}),await e().showNext())},persistQueue:async()=>{const n=e().queue.map((a,r)=>({id:a.id,position:r}));await ze(n)},clearOnLogout:async()=>{t({queue:[],currentMessage:null,isProcessing:!1,activeWindowIds:[],initialized:!1}),await De()},removeFromQueue:async i=>{const n=e(),a=n.queue.filter(r=>r.id!==i);t({queue:a}),await e().persistQueue(),n.currentMessage?.id===i&&e().clearCurrent()},deleteMessage:async i=>{await Ne(i),await e().removeFromQueue(i)},hideMessage:async i=>{await Se(i),await e().removeFromQueue(i)},markMessageAsShown:async i=>{await We(i)},addActiveWindow:i=>{const n=e(),a=String(i);n.activeWindowIds.includes(a)||t({activeWindowIds:[...n.activeWindowIds,a]})},removeActiveWindow:i=>{const n=e(),a=String(i);t({activeWindowIds:n.activeWindowIds.filter(r=>r!==a)})},isWindowActive:i=>{const n=e(),a=String(i);return n.activeWindowIds.includes(a)}}),w=de.create()(he.syncTabs(Ae,{name:"tauri-notice-queue"})),D={queueLength:t=>t.queue.length,currentMessage:t=>t.currentMessage,isProcessing:t=>t.isProcessing,queue:t=>t.queue},xe=()=>{const t=w(i=>i.enqueue);return{showNotice:g.useCallback(async i=>{await t(i)},[t])}};function Oe(t,e,i,n){if(typeof e=="function"?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return i==="m"?n:i==="a"?n.call(t):n?n.value:e.get(t)}function Me(t,e,i,n,a){if(typeof e=="function"?t!==e||!0:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return e.set(t,i),i}var O;const d="__TAURI_TO_IPC_KEY__";function Pe(t,e=!1){return window.__TAURI_INTERNALS__.transformCallback(t,e)}async function s(t,e={},i){return window.__TAURI_INTERNALS__.invoke(t,e,i)}class ke{get rid(){return Oe(this,O,"f")}constructor(e){O.set(this,void 0),Me(this,O,e)}async close(){return s("plugin:resources|close",{rid:this.rid})}}O=new WeakMap;class ie{constructor(...e){this.type="Logical",e.length===1?"Logical"in e[0]?(this.width=e[0].Logical.width,this.height=e[0].Logical.height):(this.width=e[0].width,this.height=e[0].height):(this.width=e[0],this.height=e[1])}toPhysical(e){return new b(this.width*e,this.height*e)}[d](){return{width:this.width,height:this.height}}toJSON(){return this[d]()}}class b{constructor(...e){this.type="Physical",e.length===1?"Physical"in e[0]?(this.width=e[0].Physical.width,this.height=e[0].Physical.height):(this.width=e[0].width,this.height=e[0].height):(this.width=e[0],this.height=e[1])}toLogical(e){return new ie(this.width/e,this.height/e)}[d](){return{width:this.width,height:this.height}}toJSON(){return this[d]()}}class y{constructor(e){this.size=e}toLogical(e){return this.size instanceof ie?this.size:this.size.toLogical(e)}toPhysical(e){return this.size instanceof b?this.size:this.size.toPhysical(e)}[d](){return{[`${this.size.type}`]:{width:this.size.width,height:this.size.height}}}toJSON(){return this[d]()}}class ne{constructor(...e){this.type="Logical",e.length===1?"Logical"in e[0]?(this.x=e[0].Logical.x,this.y=e[0].Logical.y):(this.x=e[0].x,this.y=e[0].y):(this.x=e[0],this.y=e[1])}toPhysical(e){return new c(this.x*e,this.y*e)}[d](){return{x:this.x,y:this.y}}toJSON(){return this[d]()}}class c{constructor(...e){this.type="Physical",e.length===1?"Physical"in e[0]?(this.x=e[0].Physical.x,this.y=e[0].Physical.y):(this.x=e[0].x,this.y=e[0].y):(this.x=e[0],this.y=e[1])}toLogical(e){return new ne(this.x/e,this.y/e)}[d](){return{x:this.x,y:this.y}}toJSON(){return this[d]()}}class f{constructor(e){this.position=e}toLogical(e){return this.position instanceof ne?this.position:this.position.toLogical(e)}toPhysical(e){return this.position instanceof c?this.position:this.position.toPhysical(e)}[d](){return{[`${this.position.type}`]:{x:this.position.x,y:this.position.y}}}toJSON(){return this[d]()}}var o;(function(t){t.WINDOW_RESIZED="tauri://resize",t.WINDOW_MOVED="tauri://move",t.WINDOW_CLOSE_REQUESTED="tauri://close-requested",t.WINDOW_DESTROYED="tauri://destroyed",t.WINDOW_FOCUS="tauri://focus",t.WINDOW_BLUR="tauri://blur",t.WINDOW_SCALE_FACTOR_CHANGED="tauri://scale-change",t.WINDOW_THEME_CHANGED="tauri://theme-changed",t.WINDOW_CREATED="tauri://window-created",t.WEBVIEW_CREATED="tauri://webview-created",t.DRAG_ENTER="tauri://drag-enter",t.DRAG_OVER="tauri://drag-over",t.DRAG_DROP="tauri://drag-drop",t.DRAG_LEAVE="tauri://drag-leave"})(o||(o={}));async function se(t,e){window.__TAURI_EVENT_PLUGIN_INTERNALS__.unregisterListener(t,e),await s("plugin:event|unlisten",{event:t,eventId:e})}async function k(t,e,i){var n;const a=typeof i?.target=="string"?{kind:"AnyLabel",label:i.target}:(n=i?.target)!==null&&n!==void 0?n:{kind:"Any"};return s("plugin:event|listen",{event:t,target:a,handler:Pe(e)}).then(r=>async()=>se(t,r))}async function Q(t,e,i){return k(t,n=>{se(t,n.id),e(n)},i)}async function ae(t,e){await s("plugin:event|emit",{event:t,payload:e})}async function le(t,e,i){await s("plugin:event|emit_to",{target:typeof t=="string"?{kind:"AnyLabel",label:t}:t,event:e,payload:i})}class A extends ke{constructor(e){super(e)}static async new(e,i,n){return s("plugin:image|new",{rgba:P(e),width:i,height:n}).then(a=>new A(a))}static async fromBytes(e){return s("plugin:image|from_bytes",{bytes:P(e)}).then(i=>new A(i))}static async fromPath(e){return s("plugin:image|from_path",{path:e}).then(i=>new A(i))}async rgba(){return s("plugin:image|rgba",{rid:this.rid}).then(e=>new Uint8Array(e))}async size(){return s("plugin:image|size",{rid:this.rid})}}function P(t){return t==null?null:typeof t=="string"?t:t instanceof A?t.rid:t}var q;(function(t){t[t.Critical=1]="Critical",t[t.Informational=2]="Informational"})(q||(q={}));class Ce{constructor(e){this._preventDefault=!1,this.event=e.event,this.id=e.id}preventDefault(){this._preventDefault=!0}isPreventDefault(){return this._preventDefault}}var j;(function(t){t.None="none",t.Normal="normal",t.Indeterminate="indeterminate",t.Paused="paused",t.Error="error"})(j||(j={}));function re(){return new C(window.__TAURI_INTERNALS__.metadata.currentWindow.label,{skip:!0})}async function E(){return s("plugin:window|get_all_windows").then(t=>t.map(e=>new C(e,{skip:!0})))}const R=["tauri://created","tauri://error"];class C{constructor(e,i={}){var n;this.label=e,this.listeners=Object.create(null),i?.skip||s("plugin:window|create",{options:{...i,parent:typeof i.parent=="string"?i.parent:(n=i.parent)===null||n===void 0?void 0:n.label,label:e}}).then(async()=>this.emit("tauri://created")).catch(async a=>this.emit("tauri://error",a))}static async getByLabel(e){var i;return(i=(await E()).find(n=>n.label===e))!==null&&i!==void 0?i:null}static getCurrent(){return re()}static async getAll(){return E()}static async getFocusedWindow(){for(const e of await E())if(await e.isFocused())return e;return null}async listen(e,i){return this._handleTauriEvent(e,i)?()=>{const n=this.listeners[e];n.splice(n.indexOf(i),1)}:k(e,i,{target:{kind:"Window",label:this.label}})}async once(e,i){return this._handleTauriEvent(e,i)?()=>{const n=this.listeners[e];n.splice(n.indexOf(i),1)}:Q(e,i,{target:{kind:"Window",label:this.label}})}async emit(e,i){if(R.includes(e)){for(const n of this.listeners[e]||[])n({event:e,id:-1,payload:i});return}return ae(e,i)}async emitTo(e,i,n){if(R.includes(i)){for(const a of this.listeners[i]||[])a({event:i,id:-1,payload:n});return}return le(e,i,n)}_handleTauriEvent(e,i){return R.includes(e)?(e in this.listeners?this.listeners[e].push(i):this.listeners[e]=[i],!0):!1}async scaleFactor(){return s("plugin:window|scale_factor",{label:this.label})}async innerPosition(){return s("plugin:window|inner_position",{label:this.label}).then(e=>new c(e))}async outerPosition(){return s("plugin:window|outer_position",{label:this.label}).then(e=>new c(e))}async innerSize(){return s("plugin:window|inner_size",{label:this.label}).then(e=>new b(e))}async outerSize(){return s("plugin:window|outer_size",{label:this.label}).then(e=>new b(e))}async isFullscreen(){return s("plugin:window|is_fullscreen",{label:this.label})}async isMinimized(){return s("plugin:window|is_minimized",{label:this.label})}async isMaximized(){return s("plugin:window|is_maximized",{label:this.label})}async isFocused(){return s("plugin:window|is_focused",{label:this.label})}async isDecorated(){return s("plugin:window|is_decorated",{label:this.label})}async isResizable(){return s("plugin:window|is_resizable",{label:this.label})}async isMaximizable(){return s("plugin:window|is_maximizable",{label:this.label})}async isMinimizable(){return s("plugin:window|is_minimizable",{label:this.label})}async isClosable(){return s("plugin:window|is_closable",{label:this.label})}async isVisible(){return s("plugin:window|is_visible",{label:this.label})}async title(){return s("plugin:window|title",{label:this.label})}async theme(){return s("plugin:window|theme",{label:this.label})}async isAlwaysOnTop(){return s("plugin:window|is_always_on_top",{label:this.label})}async center(){return s("plugin:window|center",{label:this.label})}async requestUserAttention(e){let i=null;return e&&(e===q.Critical?i={type:"Critical"}:i={type:"Informational"}),s("plugin:window|request_user_attention",{label:this.label,value:i})}async setResizable(e){return s("plugin:window|set_resizable",{label:this.label,value:e})}async setEnabled(e){return s("plugin:window|set_enabled",{label:this.label,value:e})}async isEnabled(){return s("plugin:window|is_enabled",{label:this.label})}async setMaximizable(e){return s("plugin:window|set_maximizable",{label:this.label,value:e})}async setMinimizable(e){return s("plugin:window|set_minimizable",{label:this.label,value:e})}async setClosable(e){return s("plugin:window|set_closable",{label:this.label,value:e})}async setTitle(e){return s("plugin:window|set_title",{label:this.label,value:e})}async maximize(){return s("plugin:window|maximize",{label:this.label})}async unmaximize(){return s("plugin:window|unmaximize",{label:this.label})}async toggleMaximize(){return s("plugin:window|toggle_maximize",{label:this.label})}async minimize(){return s("plugin:window|minimize",{label:this.label})}async unminimize(){return s("plugin:window|unminimize",{label:this.label})}async show(){return s("plugin:window|show",{label:this.label})}async hide(){return s("plugin:window|hide",{label:this.label})}async close(){return s("plugin:window|close",{label:this.label})}async destroy(){return s("plugin:window|destroy",{label:this.label})}async setDecorations(e){return s("plugin:window|set_decorations",{label:this.label,value:e})}async setShadow(e){return s("plugin:window|set_shadow",{label:this.label,value:e})}async setEffects(e){return s("plugin:window|set_effects",{label:this.label,value:e})}async clearEffects(){return s("plugin:window|set_effects",{label:this.label,value:null})}async setAlwaysOnTop(e){return s("plugin:window|set_always_on_top",{label:this.label,value:e})}async setAlwaysOnBottom(e){return s("plugin:window|set_always_on_bottom",{label:this.label,value:e})}async setContentProtected(e){return s("plugin:window|set_content_protected",{label:this.label,value:e})}async setSize(e){return s("plugin:window|set_size",{label:this.label,value:e instanceof y?e:new y(e)})}async setMinSize(e){return s("plugin:window|set_min_size",{label:this.label,value:e instanceof y?e:e?new y(e):null})}async setMaxSize(e){return s("plugin:window|set_max_size",{label:this.label,value:e instanceof y?e:e?new y(e):null})}async setSizeConstraints(e){function i(n){return n?{Logical:n}:null}return s("plugin:window|set_size_constraints",{label:this.label,value:{minWidth:i(e?.minWidth),minHeight:i(e?.minHeight),maxWidth:i(e?.maxWidth),maxHeight:i(e?.maxHeight)}})}async setPosition(e){return s("plugin:window|set_position",{label:this.label,value:e instanceof f?e:new f(e)})}async setFullscreen(e){return s("plugin:window|set_fullscreen",{label:this.label,value:e})}async setSimpleFullscreen(e){return s("plugin:window|set_simple_fullscreen",{label:this.label,value:e})}async setFocus(){return s("plugin:window|set_focus",{label:this.label})}async setFocusable(e){return s("plugin:window|set_focusable",{label:this.label,value:e})}async setIcon(e){return s("plugin:window|set_icon",{label:this.label,value:P(e)})}async setSkipTaskbar(e){return s("plugin:window|set_skip_taskbar",{label:this.label,value:e})}async setCursorGrab(e){return s("plugin:window|set_cursor_grab",{label:this.label,value:e})}async setCursorVisible(e){return s("plugin:window|set_cursor_visible",{label:this.label,value:e})}async setCursorIcon(e){return s("plugin:window|set_cursor_icon",{label:this.label,value:e})}async setBackgroundColor(e){return s("plugin:window|set_background_color",{color:e})}async setCursorPosition(e){return s("plugin:window|set_cursor_position",{label:this.label,value:e instanceof f?e:new f(e)})}async setIgnoreCursorEvents(e){return s("plugin:window|set_ignore_cursor_events",{label:this.label,value:e})}async startDragging(){return s("plugin:window|start_dragging",{label:this.label})}async startResizeDragging(e){return s("plugin:window|start_resize_dragging",{label:this.label,value:e})}async setBadgeCount(e){return s("plugin:window|set_badge_count",{label:this.label,value:e})}async setBadgeLabel(e){return s("plugin:window|set_badge_label",{label:this.label,value:e})}async setOverlayIcon(e){return s("plugin:window|set_overlay_icon",{label:this.label,value:e?P(e):void 0})}async setProgressBar(e){return s("plugin:window|set_progress_bar",{label:this.label,value:e})}async setVisibleOnAllWorkspaces(e){return s("plugin:window|set_visible_on_all_workspaces",{label:this.label,value:e})}async setTitleBarStyle(e){return s("plugin:window|set_title_bar_style",{label:this.label,value:e})}async setTheme(e){return s("plugin:window|set_theme",{label:this.label,value:e})}async onResized(e){return this.listen(o.WINDOW_RESIZED,i=>{i.payload=new b(i.payload),e(i)})}async onMoved(e){return this.listen(o.WINDOW_MOVED,i=>{i.payload=new c(i.payload),e(i)})}async onCloseRequested(e){return this.listen(o.WINDOW_CLOSE_REQUESTED,async i=>{const n=new Ce(i);await e(n),n.isPreventDefault()||await this.destroy()})}async onDragDropEvent(e){const i=await this.listen(o.DRAG_ENTER,l=>{e({...l,payload:{type:"enter",paths:l.payload.paths,position:new c(l.payload.position)}})}),n=await this.listen(o.DRAG_OVER,l=>{e({...l,payload:{type:"over",position:new c(l.payload.position)}})}),a=await this.listen(o.DRAG_DROP,l=>{e({...l,payload:{type:"drop",paths:l.payload.paths,position:new c(l.payload.position)}})}),r=await this.listen(o.DRAG_LEAVE,l=>{e({...l,payload:{type:"leave"}})});return()=>{i(),a(),n(),r()}}async onFocusChanged(e){const i=await this.listen(o.WINDOW_FOCUS,a=>{e({...a,payload:!0})}),n=await this.listen(o.WINDOW_BLUR,a=>{e({...a,payload:!1})});return()=>{i(),n()}}async onScaleChanged(e){return this.listen(o.WINDOW_SCALE_FACTOR_CHANGED,e)}async onThemeChanged(e){return this.listen(o.WINDOW_THEME_CHANGED,e)}}var V;(function(t){t.Disabled="disabled",t.Throttle="throttle",t.Suspend="suspend"})(V||(V={}));var $;(function(t){t.Default="default",t.FluentOverlay="fluentOverlay"})($||($={}));var J;(function(t){t.AppearanceBased="appearanceBased",t.Light="light",t.Dark="dark",t.MediumLight="mediumLight",t.UltraDark="ultraDark",t.Titlebar="titlebar",t.Selection="selection",t.Menu="menu",t.Popover="popover",t.Sidebar="sidebar",t.HeaderView="headerView",t.Sheet="sheet",t.WindowBackground="windowBackground",t.HudWindow="hudWindow",t.FullScreenUI="fullScreenUI",t.Tooltip="tooltip",t.ContentBackground="contentBackground",t.UnderWindowBackground="underWindowBackground",t.UnderPageBackground="underPageBackground",t.Mica="mica",t.Blur="blur",t.Acrylic="acrylic",t.Tabbed="tabbed",t.TabbedDark="tabbedDark",t.TabbedLight="tabbedLight"})(J||(J={}));var Z;(function(t){t.FollowsWindowActiveState="followsWindowActiveState",t.Active="active",t.Inactive="inactive"})(Z||(Z={}));function Ie(t){return t===null?null:{name:t.name,scaleFactor:t.scaleFactor,position:new c(t.position),size:new b(t.size),workArea:{position:new c(t.workArea.position),size:new b(t.workArea.size)}}}async function Le(){return s("plugin:window|primary_monitor").then(Ie)}function oe(){return new G(re(),window.__TAURI_INTERNALS__.metadata.currentWebview.label,{skip:!0})}async function Y(){return s("plugin:webview|get_all_webviews").then(t=>t.map(e=>new G(new C(e.windowLabel,{skip:!0}),e.label,{skip:!0})))}const T=["tauri://created","tauri://error"];class G{constructor(e,i,n){this.window=e,this.label=i,this.listeners=Object.create(null),n?.skip||s("plugin:webview|create_webview",{windowLabel:e.label,options:{...n,label:i}}).then(async()=>this.emit("tauri://created")).catch(async a=>this.emit("tauri://error",a))}static async getByLabel(e){var i;return(i=(await Y()).find(n=>n.label===e))!==null&&i!==void 0?i:null}static getCurrent(){return oe()}static async getAll(){return Y()}async listen(e,i){return this._handleTauriEvent(e,i)?()=>{const n=this.listeners[e];n.splice(n.indexOf(i),1)}:k(e,i,{target:{kind:"Webview",label:this.label}})}async once(e,i){return this._handleTauriEvent(e,i)?()=>{const n=this.listeners[e];n.splice(n.indexOf(i),1)}:Q(e,i,{target:{kind:"Webview",label:this.label}})}async emit(e,i){if(T.includes(e)){for(const n of this.listeners[e]||[])n({event:e,id:-1,payload:i});return}return ae(e,i)}async emitTo(e,i,n){if(T.includes(i)){for(const a of this.listeners[i]||[])a({event:i,id:-1,payload:n});return}return le(e,i,n)}_handleTauriEvent(e,i){return T.includes(e)?(e in this.listeners?this.listeners[e].push(i):this.listeners[e]=[i],!0):!1}async position(){return s("plugin:webview|webview_position",{label:this.label}).then(e=>new c(e))}async size(){return s("plugin:webview|webview_size",{label:this.label}).then(e=>new b(e))}async close(){return s("plugin:webview|webview_close",{label:this.label})}async setSize(e){return s("plugin:webview|set_webview_size",{label:this.label,value:e instanceof y?e:new y(e)})}async setPosition(e){return s("plugin:webview|set_webview_position",{label:this.label,value:e instanceof f?e:new f(e)})}async setFocus(){return s("plugin:webview|set_webview_focus",{label:this.label})}async setAutoResize(e){return s("plugin:webview|set_webview_auto_resize",{label:this.label,value:e})}async hide(){return s("plugin:webview|webview_hide",{label:this.label})}async show(){return s("plugin:webview|webview_show",{label:this.label})}async setZoom(e){return s("plugin:webview|set_webview_zoom",{label:this.label,value:e})}async reparent(e){return s("plugin:webview|reparent",{label:this.label,window:typeof e=="string"?e:e.label})}async clearAllBrowsingData(){return s("plugin:webview|clear_all_browsing_data")}async setBackgroundColor(e){return s("plugin:webview|set_webview_background_color",{color:e})}async onDragDropEvent(e){const i=await this.listen(o.DRAG_ENTER,l=>{e({...l,payload:{type:"enter",paths:l.payload.paths,position:new c(l.payload.position)}})}),n=await this.listen(o.DRAG_OVER,l=>{e({...l,payload:{type:"over",position:new c(l.payload.position)}})}),a=await this.listen(o.DRAG_DROP,l=>{e({...l,payload:{type:"drop",paths:l.payload.paths,position:new c(l.payload.position)}})}),r=await this.listen(o.DRAG_LEAVE,l=>{e({...l,payload:{type:"leave"}})});return()=>{i(),a(),n(),r()}}}function M(){const t=oe();return new m(t.label,{skip:!0})}async function K(){return s("plugin:window|get_all_windows").then(t=>t.map(e=>new m(e,{skip:!0})))}class m{constructor(e,i={}){var n;this.label=e,this.listeners=Object.create(null),i?.skip||s("plugin:webview|create_webview_window",{options:{...i,parent:typeof i.parent=="string"?i.parent:(n=i.parent)===null||n===void 0?void 0:n.label,label:e}}).then(async()=>this.emit("tauri://created")).catch(async a=>this.emit("tauri://error",a))}static async getByLabel(e){var i;const n=(i=(await K()).find(a=>a.label===e))!==null&&i!==void 0?i:null;return n?new m(n.label,{skip:!0}):null}static getCurrent(){return M()}static async getAll(){return K()}async listen(e,i){return this._handleTauriEvent(e,i)?()=>{const n=this.listeners[e];n.splice(n.indexOf(i),1)}:k(e,i,{target:{kind:"WebviewWindow",label:this.label}})}async once(e,i){return this._handleTauriEvent(e,i)?()=>{const n=this.listeners[e];n.splice(n.indexOf(i),1)}:Q(e,i,{target:{kind:"WebviewWindow",label:this.label}})}async setBackgroundColor(e){return s("plugin:window|set_background_color",{color:e}).then(()=>s("plugin:webview|set_webview_background_color",{color:e}))}}Ee(m,[C,G]);function Ee(t,e){(Array.isArray(e)?e:[e]).forEach(i=>{Object.getOwnPropertyNames(i.prototype).forEach(n=>{var a;typeof t.prototype=="object"&&t.prototype&&n in t.prototype||Object.defineProperty(t.prototype,n,(a=Object.getOwnPropertyDescriptor(i.prototype,n))!==null&&a!==void 0?a:Object.create(null))})})}const x=new Map,Re=t=>{if(!t||t.trim()==="")return!1;try{return!!(t.startsWith("/")||t.startsWith("http://")||t.startsWith("https://")||t.startsWith("tauri://"))}catch{return!1}},Te=async(t,e,i)=>{const n=i?.padding??20;if(i?.x!==void 0&&i?.y!==void 0)return{x:i.x,y:i.y};let a=1920,r=1080;try{const u=await Le();u?.size&&(a=u.size.width,r=u.size.height)}catch(u){console.warn("Failed to get monitor info, using defaults:",u)}switch(i?.position??"right-bottom"){case"right-bottom":return{x:a-t-n,y:r-e-n};case"right-top":return{x:a-t-n,y:n};case"left-bottom":return{x:n,y:r-e-n};case"left-top":return{x:n,y:n};case"center":return{x:(a-t)/2,y:(r-e)/2};default:return{x:a-t-n,y:r-e-n}}},ue=async t=>{const e=String(t.id),i=w.getState();if(i.isWindowActive(e)){console.log(`Notice window already open for message: ${e}`);return}const n=F(),a=`notice-${e}`;let r=`${n.routePrefix}/${t.type}?id=${t.id}`;Re(r)||(console.warn(`Invalid window URL: ${r}. Using fallback 404 page.`),r=n.notFoundUrl||"/404");const l=t.min_width||n.defaultWidth,u=t.min_height||n.defaultHeight,{x:v,y:W}=await Te(l,u,t.windowPosition);try{const p=new m(a,{url:r,title:t.title,width:l,height:u,x:v,y:W,resizable:!0,decorations:!0,skipTaskbar:!1,alwaysOnTop:!0});x.set(e,p),i.addActiveWindow(e),p.once("tauri://destroyed",async()=>{x.delete(e),i.removeActiveWindow(e),await i.markMessageAsShown(e),i.clearCurrent()}),console.log(`Created notice window: ${a}`)}catch(p){console.error("Failed to create notice window:",p),i.removeActiveWindow(e),i.clearCurrent()}},I=async t=>{const e=String(t),i=x.get(e),n=w.getState();if(i)try{await i.close(),x.delete(e),n.removeActiveWindow(e),await n.markMessageAsShown(e),n.clearCurrent(),console.log(`Closed notice window: ${e}`)}catch(a){console.error("Failed to close notice window:",a)}},ce=async()=>{const t=Array.from(x.keys()).map(e=>I(e));await Promise.all(t)},we=()=>{let t=null;w.subscribe(e=>{const i=e.currentMessage;i&&i!==t?(t=i,ue(i)):i||(t=null)}),console.log("Notice window system initialized")},qe=()=>{const t=w(i=>i.currentMessage);return{closeNotice:g.useCallback(async()=>{t&&await I(t.id)},[t])}},Fe=()=>{const t=w(i=>i.hideMessage);return{hideNotice:g.useCallback(async i=>{await t(i),await I(i)},[t])}},Be=()=>{const t=w(i=>i.clearOnLogout);return{hideAllNotices:g.useCallback(async()=>{await ce(),await t()},[t])}},Ue=()=>{const t=w(D.queueLength),e=w(D.currentMessage),i=w(D.isProcessing),n=w(D.queue);return{queueLength:t,currentMessage:e,isProcessing:i,queue:n}},Qe=({children:t,onLoad:e,onClose:i})=>{const[n,a]=g.useState(null),[r,l]=g.useState(!0),[u,v]=g.useState(null);return g.useEffect(()=>{(async()=>{try{const _=new URLSearchParams(window.location.search).get("id");if(!_){v("No message ID provided"),l(!1),setTimeout(async()=>{try{await M().close()}catch(S){console.error("Failed to close window:",S)}},1e3);return}const L=await U(_);if(!L){console.log(`Message ${_} not found in database, closing window`),v("Message not found"),l(!1),setTimeout(async()=>{try{await M().close()}catch(S){console.error("Failed to close window:",S)}},500);return}a(L),l(!1),e&&e(L)}catch(p){console.error("Failed to load message:",p),v("Failed to load message"),l(!1),setTimeout(async()=>{try{await M().close()}catch(_){console.error("Failed to close window:",_)}},1e3)}})()},[e]),g.useEffect(()=>{if(!n||!i)return;const W=()=>{i(n)};return window.addEventListener("beforeunload",W),()=>{window.removeEventListener("beforeunload",W)}},[n,i]),r?N.jsx("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh",fontFamily:"system-ui, -apple-system, sans-serif"},children:"Loading..."}):u?N.jsx("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh",fontFamily:"system-ui, -apple-system, sans-serif",color:"#ef4444"},children:u}):n?N.jsx(N.Fragment,{children:t(n)}):N.jsx("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh",fontFamily:"system-ui, -apple-system, sans-serif",color:"#ef4444"},children:"Closing window..."})},Ge=async()=>{B(),we();const{initializeFromDatabase:t}=w.getState();await t(),console.log("Tauri Notice System initialized")};exports.NoticeLayout=Qe;exports.closeAllNoticeWindows=ce;exports.closeNoticeWindow=I;exports.createNoticeWindow=ue;exports.getMessage=U;exports.getNoticeConfig=F;exports.getPendingMessages=te;exports.initializeDatabase=B;exports.initializeNoticeSystem=Ge;exports.initializeNoticeWindowSystem=we;exports.messageQueueSelectors=D;exports.setNoticeConfig=be;exports.useCloseNotice=qe;exports.useHideAllNotices=Be;exports.useHideNotice=Fe;exports.useMessageQueue=Ue;exports.useMessageQueueStore=w;exports.useNoticeWindow=xe;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const we=require("zustand"),he=require("zustand-sync"),ge=require("dexie"),g=require("react"),N=require("react/jsx-runtime"),X="tauri-notice-config",H={routePrefix:"/notice",databaseName:"tauri-notice-db",defaultWidth:400,defaultHeight:300,notFoundUrl:"/404"},ee=()=>{try{const t=localStorage.getItem(X);if(t)return{...H,...JSON.parse(t)}}catch(t){console.warn("Failed to load config from localStorage:",t)}return H},ye=t=>{try{localStorage.setItem(X,JSON.stringify(t))}catch(e){console.warn("Failed to save config to localStorage:",e)}},be=t=>{const i={...ee(),...t};ye(i)},F=()=>ee();class pe extends ge{messages;constructor(e){super(e),this.version(1).stores({messages:"id, queueStatus, queuePosition, timestamp"})}}let D=null;const B=()=>{if(!D){const t=F();D=new pe(t.databaseName)}return D},h=()=>D||B(),_e=async t=>{const e={...t,timestamp:new Date().toISOString(),isRead:!1,isShown:!1,queueStatus:"pending",queuePosition:0};await h().messages.put(e)},fe=async t=>!!await h().messages.get(t),me=async t=>{const e=await h().messages.get(t);return e?.isShown===!0||e?.queueStatus==="shown"},te=async()=>await h().messages.where("queueStatus").equals("pending").sortBy("queuePosition"),ve=async(t,e)=>{await h().messages.update(t,{queueStatus:e})},Se=async t=>{await h().messages.update(t,{queueStatus:"shown",isShown:!0})},We=async t=>{await h().messages.update(t,{queueStatus:"hidden"})},U=async t=>await h().messages.get(t),Ne=async t=>{await h().messages.delete(t)},Ae=async()=>{await h().messages.where("queueStatus").anyOf(["pending","showing"]).delete()},De=async t=>{const e=t.map(i=>h().messages.update(i.id,{queuePosition:i.position}));await Promise.all(e)},ze=(t,e)=>({queue:[],currentMessage:null,isProcessing:!1,initialized:!1,activeWindowIds:[],enqueue:async i=>{const n=e();if(await me(i.id)){console.log(`Message ${i.id} was already shown, skipping`);return}if(await fe(i.id)||await _e(i),!n.queue.some(c=>c.id===i.id)){const c=[...n.queue,i];t({queue:c}),await e().persistQueue()}!n.isProcessing&&!n.currentMessage&&await e().showNext()},dequeue:()=>{const i=e();if(i.queue.length===0)return null;const[n,...a]=i.queue;return t({queue:a}),n},showNext:async()=>{if(e().isProcessing)return;const n=e().dequeue();if(!n){t({isProcessing:!1,currentMessage:null});return}if(!await U(n.id)){console.log(`Message ${n.id} was deleted, skipping to next`),await e().showNext();return}t({currentMessage:n,isProcessing:!0}),await ve(n.id,"showing"),await e().persistQueue()},clearCurrent:()=>{t({currentMessage:null,isProcessing:!1}),e().queue.length>0&&e().showNext()},setCurrentMessage:i=>{t({currentMessage:i})},setIsProcessing:i=>{t({isProcessing:i})},setQueue:i=>{t({queue:i})},initializeFromDatabase:async()=>{if(e().initialized)return;t({initialized:!0});const n=await te();n.length>0&&(t({queue:n}),await e().showNext())},persistQueue:async()=>{const n=e().queue.map((a,r)=>({id:a.id,position:r}));await De(n)},clearOnLogout:async()=>{t({queue:[],currentMessage:null,isProcessing:!1,activeWindowIds:[],initialized:!1}),await Ae()},removeFromQueue:async i=>{const n=e(),a=n.queue.filter(r=>r.id!==i);t({queue:a}),await e().persistQueue(),n.currentMessage?.id===i&&e().clearCurrent()},deleteMessage:async i=>{await Ne(i),await e().removeFromQueue(i)},hideMessage:async i=>{await We(i),await e().removeFromQueue(i)},markMessageAsShown:async i=>{await Se(i)},addActiveWindow:i=>{const n=e(),a=String(i);n.activeWindowIds.includes(a)||t({activeWindowIds:[...n.activeWindowIds,a]})},removeActiveWindow:i=>{const n=e(),a=String(i);t({activeWindowIds:n.activeWindowIds.filter(r=>r!==a)})},isWindowActive:i=>{const n=e(),a=String(i);return n.activeWindowIds.includes(a)}}),u=we.create()(he.syncTabs(ze,{name:"tauri-notice-queue"})),A={queueLength:t=>t.queue.length,currentMessage:t=>t.currentMessage,isProcessing:t=>t.isProcessing,queue:t=>t.queue},Me=()=>{const t=u(i=>i.enqueue);return{showNotice:g.useCallback(async i=>{await t(i)},[t])}};function xe(t,e,i,n){if(typeof e=="function"?t!==e||!n:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return i==="m"?n:i==="a"?n.call(t):n?n.value:e.get(t)}function Oe(t,e,i,n,a){if(typeof e=="function"?t!==e||!0:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return e.set(t,i),i}var x;const w="__TAURI_TO_IPC_KEY__";function ke(t,e=!1){return window.__TAURI_INTERNALS__.transformCallback(t,e)}async function s(t,e={},i){return window.__TAURI_INTERNALS__.invoke(t,e,i)}class Pe{get rid(){return xe(this,x,"f")}constructor(e){x.set(this,void 0),Oe(this,x,e)}async close(){return s("plugin:resources|close",{rid:this.rid})}}x=new WeakMap;class ie{constructor(...e){this.type="Logical",e.length===1?"Logical"in e[0]?(this.width=e[0].Logical.width,this.height=e[0].Logical.height):(this.width=e[0].width,this.height=e[0].height):(this.width=e[0],this.height=e[1])}toPhysical(e){return new b(this.width*e,this.height*e)}[w](){return{width:this.width,height:this.height}}toJSON(){return this[w]()}}class b{constructor(...e){this.type="Physical",e.length===1?"Physical"in e[0]?(this.width=e[0].Physical.width,this.height=e[0].Physical.height):(this.width=e[0].width,this.height=e[0].height):(this.width=e[0],this.height=e[1])}toLogical(e){return new ie(this.width/e,this.height/e)}[w](){return{width:this.width,height:this.height}}toJSON(){return this[w]()}}class y{constructor(e){this.size=e}toLogical(e){return this.size instanceof ie?this.size:this.size.toLogical(e)}toPhysical(e){return this.size instanceof b?this.size:this.size.toPhysical(e)}[w](){return{[`${this.size.type}`]:{width:this.size.width,height:this.size.height}}}toJSON(){return this[w]()}}class ne{constructor(...e){this.type="Logical",e.length===1?"Logical"in e[0]?(this.x=e[0].Logical.x,this.y=e[0].Logical.y):(this.x=e[0].x,this.y=e[0].y):(this.x=e[0],this.y=e[1])}toPhysical(e){return new d(this.x*e,this.y*e)}[w](){return{x:this.x,y:this.y}}toJSON(){return this[w]()}}class d{constructor(...e){this.type="Physical",e.length===1?"Physical"in e[0]?(this.x=e[0].Physical.x,this.y=e[0].Physical.y):(this.x=e[0].x,this.y=e[0].y):(this.x=e[0],this.y=e[1])}toLogical(e){return new ne(this.x/e,this.y/e)}[w](){return{x:this.x,y:this.y}}toJSON(){return this[w]()}}class f{constructor(e){this.position=e}toLogical(e){return this.position instanceof ne?this.position:this.position.toLogical(e)}toPhysical(e){return this.position instanceof d?this.position:this.position.toPhysical(e)}[w](){return{[`${this.position.type}`]:{x:this.position.x,y:this.position.y}}}toJSON(){return this[w]()}}var o;(function(t){t.WINDOW_RESIZED="tauri://resize",t.WINDOW_MOVED="tauri://move",t.WINDOW_CLOSE_REQUESTED="tauri://close-requested",t.WINDOW_DESTROYED="tauri://destroyed",t.WINDOW_FOCUS="tauri://focus",t.WINDOW_BLUR="tauri://blur",t.WINDOW_SCALE_FACTOR_CHANGED="tauri://scale-change",t.WINDOW_THEME_CHANGED="tauri://theme-changed",t.WINDOW_CREATED="tauri://window-created",t.WEBVIEW_CREATED="tauri://webview-created",t.DRAG_ENTER="tauri://drag-enter",t.DRAG_OVER="tauri://drag-over",t.DRAG_DROP="tauri://drag-drop",t.DRAG_LEAVE="tauri://drag-leave"})(o||(o={}));async function se(t,e){window.__TAURI_EVENT_PLUGIN_INTERNALS__.unregisterListener(t,e),await s("plugin:event|unlisten",{event:t,eventId:e})}async function P(t,e,i){var n;const a=typeof i?.target=="string"?{kind:"AnyLabel",label:i.target}:(n=i?.target)!==null&&n!==void 0?n:{kind:"Any"};return s("plugin:event|listen",{event:t,target:a,handler:ke(e)}).then(r=>async()=>se(t,r))}async function Q(t,e,i){return P(t,n=>{se(t,n.id),e(n)},i)}async function ae(t,e){await s("plugin:event|emit",{event:t,payload:e})}async function le(t,e,i){await s("plugin:event|emit_to",{target:typeof t=="string"?{kind:"AnyLabel",label:t}:t,event:e,payload:i})}class z extends Pe{constructor(e){super(e)}static async new(e,i,n){return s("plugin:image|new",{rgba:k(e),width:i,height:n}).then(a=>new z(a))}static async fromBytes(e){return s("plugin:image|from_bytes",{bytes:k(e)}).then(i=>new z(i))}static async fromPath(e){return s("plugin:image|from_path",{path:e}).then(i=>new z(i))}async rgba(){return s("plugin:image|rgba",{rid:this.rid}).then(e=>new Uint8Array(e))}async size(){return s("plugin:image|size",{rid:this.rid})}}function k(t){return t==null?null:typeof t=="string"?t:t instanceof z?t.rid:t}var q;(function(t){t[t.Critical=1]="Critical",t[t.Informational=2]="Informational"})(q||(q={}));class Ie{constructor(e){this._preventDefault=!1,this.event=e.event,this.id=e.id}preventDefault(){this._preventDefault=!0}isPreventDefault(){return this._preventDefault}}var j;(function(t){t.None="none",t.Normal="normal",t.Indeterminate="indeterminate",t.Paused="paused",t.Error="error"})(j||(j={}));function re(){return new I(window.__TAURI_INTERNALS__.metadata.currentWindow.label,{skip:!0})}async function E(){return s("plugin:window|get_all_windows").then(t=>t.map(e=>new I(e,{skip:!0})))}const R=["tauri://created","tauri://error"];class I{constructor(e,i={}){var n;this.label=e,this.listeners=Object.create(null),i?.skip||s("plugin:window|create",{options:{...i,parent:typeof i.parent=="string"?i.parent:(n=i.parent)===null||n===void 0?void 0:n.label,label:e}}).then(async()=>this.emit("tauri://created")).catch(async a=>this.emit("tauri://error",a))}static async getByLabel(e){var i;return(i=(await E()).find(n=>n.label===e))!==null&&i!==void 0?i:null}static getCurrent(){return re()}static async getAll(){return E()}static async getFocusedWindow(){for(const e of await E())if(await e.isFocused())return e;return null}async listen(e,i){return this._handleTauriEvent(e,i)?()=>{const n=this.listeners[e];n.splice(n.indexOf(i),1)}:P(e,i,{target:{kind:"Window",label:this.label}})}async once(e,i){return this._handleTauriEvent(e,i)?()=>{const n=this.listeners[e];n.splice(n.indexOf(i),1)}:Q(e,i,{target:{kind:"Window",label:this.label}})}async emit(e,i){if(R.includes(e)){for(const n of this.listeners[e]||[])n({event:e,id:-1,payload:i});return}return ae(e,i)}async emitTo(e,i,n){if(R.includes(i)){for(const a of this.listeners[i]||[])a({event:i,id:-1,payload:n});return}return le(e,i,n)}_handleTauriEvent(e,i){return R.includes(e)?(e in this.listeners?this.listeners[e].push(i):this.listeners[e]=[i],!0):!1}async scaleFactor(){return s("plugin:window|scale_factor",{label:this.label})}async innerPosition(){return s("plugin:window|inner_position",{label:this.label}).then(e=>new d(e))}async outerPosition(){return s("plugin:window|outer_position",{label:this.label}).then(e=>new d(e))}async innerSize(){return s("plugin:window|inner_size",{label:this.label}).then(e=>new b(e))}async outerSize(){return s("plugin:window|outer_size",{label:this.label}).then(e=>new b(e))}async isFullscreen(){return s("plugin:window|is_fullscreen",{label:this.label})}async isMinimized(){return s("plugin:window|is_minimized",{label:this.label})}async isMaximized(){return s("plugin:window|is_maximized",{label:this.label})}async isFocused(){return s("plugin:window|is_focused",{label:this.label})}async isDecorated(){return s("plugin:window|is_decorated",{label:this.label})}async isResizable(){return s("plugin:window|is_resizable",{label:this.label})}async isMaximizable(){return s("plugin:window|is_maximizable",{label:this.label})}async isMinimizable(){return s("plugin:window|is_minimizable",{label:this.label})}async isClosable(){return s("plugin:window|is_closable",{label:this.label})}async isVisible(){return s("plugin:window|is_visible",{label:this.label})}async title(){return s("plugin:window|title",{label:this.label})}async theme(){return s("plugin:window|theme",{label:this.label})}async isAlwaysOnTop(){return s("plugin:window|is_always_on_top",{label:this.label})}async center(){return s("plugin:window|center",{label:this.label})}async requestUserAttention(e){let i=null;return e&&(e===q.Critical?i={type:"Critical"}:i={type:"Informational"}),s("plugin:window|request_user_attention",{label:this.label,value:i})}async setResizable(e){return s("plugin:window|set_resizable",{label:this.label,value:e})}async setEnabled(e){return s("plugin:window|set_enabled",{label:this.label,value:e})}async isEnabled(){return s("plugin:window|is_enabled",{label:this.label})}async setMaximizable(e){return s("plugin:window|set_maximizable",{label:this.label,value:e})}async setMinimizable(e){return s("plugin:window|set_minimizable",{label:this.label,value:e})}async setClosable(e){return s("plugin:window|set_closable",{label:this.label,value:e})}async setTitle(e){return s("plugin:window|set_title",{label:this.label,value:e})}async maximize(){return s("plugin:window|maximize",{label:this.label})}async unmaximize(){return s("plugin:window|unmaximize",{label:this.label})}async toggleMaximize(){return s("plugin:window|toggle_maximize",{label:this.label})}async minimize(){return s("plugin:window|minimize",{label:this.label})}async unminimize(){return s("plugin:window|unminimize",{label:this.label})}async show(){return s("plugin:window|show",{label:this.label})}async hide(){return s("plugin:window|hide",{label:this.label})}async close(){return s("plugin:window|close",{label:this.label})}async destroy(){return s("plugin:window|destroy",{label:this.label})}async setDecorations(e){return s("plugin:window|set_decorations",{label:this.label,value:e})}async setShadow(e){return s("plugin:window|set_shadow",{label:this.label,value:e})}async setEffects(e){return s("plugin:window|set_effects",{label:this.label,value:e})}async clearEffects(){return s("plugin:window|set_effects",{label:this.label,value:null})}async setAlwaysOnTop(e){return s("plugin:window|set_always_on_top",{label:this.label,value:e})}async setAlwaysOnBottom(e){return s("plugin:window|set_always_on_bottom",{label:this.label,value:e})}async setContentProtected(e){return s("plugin:window|set_content_protected",{label:this.label,value:e})}async setSize(e){return s("plugin:window|set_size",{label:this.label,value:e instanceof y?e:new y(e)})}async setMinSize(e){return s("plugin:window|set_min_size",{label:this.label,value:e instanceof y?e:e?new y(e):null})}async setMaxSize(e){return s("plugin:window|set_max_size",{label:this.label,value:e instanceof y?e:e?new y(e):null})}async setSizeConstraints(e){function i(n){return n?{Logical:n}:null}return s("plugin:window|set_size_constraints",{label:this.label,value:{minWidth:i(e?.minWidth),minHeight:i(e?.minHeight),maxWidth:i(e?.maxWidth),maxHeight:i(e?.maxHeight)}})}async setPosition(e){return s("plugin:window|set_position",{label:this.label,value:e instanceof f?e:new f(e)})}async setFullscreen(e){return s("plugin:window|set_fullscreen",{label:this.label,value:e})}async setSimpleFullscreen(e){return s("plugin:window|set_simple_fullscreen",{label:this.label,value:e})}async setFocus(){return s("plugin:window|set_focus",{label:this.label})}async setFocusable(e){return s("plugin:window|set_focusable",{label:this.label,value:e})}async setIcon(e){return s("plugin:window|set_icon",{label:this.label,value:k(e)})}async setSkipTaskbar(e){return s("plugin:window|set_skip_taskbar",{label:this.label,value:e})}async setCursorGrab(e){return s("plugin:window|set_cursor_grab",{label:this.label,value:e})}async setCursorVisible(e){return s("plugin:window|set_cursor_visible",{label:this.label,value:e})}async setCursorIcon(e){return s("plugin:window|set_cursor_icon",{label:this.label,value:e})}async setBackgroundColor(e){return s("plugin:window|set_background_color",{color:e})}async setCursorPosition(e){return s("plugin:window|set_cursor_position",{label:this.label,value:e instanceof f?e:new f(e)})}async setIgnoreCursorEvents(e){return s("plugin:window|set_ignore_cursor_events",{label:this.label,value:e})}async startDragging(){return s("plugin:window|start_dragging",{label:this.label})}async startResizeDragging(e){return s("plugin:window|start_resize_dragging",{label:this.label,value:e})}async setBadgeCount(e){return s("plugin:window|set_badge_count",{label:this.label,value:e})}async setBadgeLabel(e){return s("plugin:window|set_badge_label",{label:this.label,value:e})}async setOverlayIcon(e){return s("plugin:window|set_overlay_icon",{label:this.label,value:e?k(e):void 0})}async setProgressBar(e){return s("plugin:window|set_progress_bar",{label:this.label,value:e})}async setVisibleOnAllWorkspaces(e){return s("plugin:window|set_visible_on_all_workspaces",{label:this.label,value:e})}async setTitleBarStyle(e){return s("plugin:window|set_title_bar_style",{label:this.label,value:e})}async setTheme(e){return s("plugin:window|set_theme",{label:this.label,value:e})}async onResized(e){return this.listen(o.WINDOW_RESIZED,i=>{i.payload=new b(i.payload),e(i)})}async onMoved(e){return this.listen(o.WINDOW_MOVED,i=>{i.payload=new d(i.payload),e(i)})}async onCloseRequested(e){return this.listen(o.WINDOW_CLOSE_REQUESTED,async i=>{const n=new Ie(i);await e(n),n.isPreventDefault()||await this.destroy()})}async onDragDropEvent(e){const i=await this.listen(o.DRAG_ENTER,l=>{e({...l,payload:{type:"enter",paths:l.payload.paths,position:new d(l.payload.position)}})}),n=await this.listen(o.DRAG_OVER,l=>{e({...l,payload:{type:"over",position:new d(l.payload.position)}})}),a=await this.listen(o.DRAG_DROP,l=>{e({...l,payload:{type:"drop",paths:l.payload.paths,position:new d(l.payload.position)}})}),r=await this.listen(o.DRAG_LEAVE,l=>{e({...l,payload:{type:"leave"}})});return()=>{i(),a(),n(),r()}}async onFocusChanged(e){const i=await this.listen(o.WINDOW_FOCUS,a=>{e({...a,payload:!0})}),n=await this.listen(o.WINDOW_BLUR,a=>{e({...a,payload:!1})});return()=>{i(),n()}}async onScaleChanged(e){return this.listen(o.WINDOW_SCALE_FACTOR_CHANGED,e)}async onThemeChanged(e){return this.listen(o.WINDOW_THEME_CHANGED,e)}}var V;(function(t){t.Disabled="disabled",t.Throttle="throttle",t.Suspend="suspend"})(V||(V={}));var $;(function(t){t.Default="default",t.FluentOverlay="fluentOverlay"})($||($={}));var J;(function(t){t.AppearanceBased="appearanceBased",t.Light="light",t.Dark="dark",t.MediumLight="mediumLight",t.UltraDark="ultraDark",t.Titlebar="titlebar",t.Selection="selection",t.Menu="menu",t.Popover="popover",t.Sidebar="sidebar",t.HeaderView="headerView",t.Sheet="sheet",t.WindowBackground="windowBackground",t.HudWindow="hudWindow",t.FullScreenUI="fullScreenUI",t.Tooltip="tooltip",t.ContentBackground="contentBackground",t.UnderWindowBackground="underWindowBackground",t.UnderPageBackground="underPageBackground",t.Mica="mica",t.Blur="blur",t.Acrylic="acrylic",t.Tabbed="tabbed",t.TabbedDark="tabbedDark",t.TabbedLight="tabbedLight"})(J||(J={}));var Z;(function(t){t.FollowsWindowActiveState="followsWindowActiveState",t.Active="active",t.Inactive="inactive"})(Z||(Z={}));function Ce(t){return t===null?null:{name:t.name,scaleFactor:t.scaleFactor,position:new d(t.position),size:new b(t.size),workArea:{position:new d(t.workArea.position),size:new b(t.workArea.size)}}}async function Le(){return s("plugin:window|primary_monitor").then(Ce)}function oe(){return new G(re(),window.__TAURI_INTERNALS__.metadata.currentWebview.label,{skip:!0})}async function Y(){return s("plugin:webview|get_all_webviews").then(t=>t.map(e=>new G(new I(e.windowLabel,{skip:!0}),e.label,{skip:!0})))}const T=["tauri://created","tauri://error"];class G{constructor(e,i,n){this.window=e,this.label=i,this.listeners=Object.create(null),n?.skip||s("plugin:webview|create_webview",{windowLabel:e.label,options:{...n,label:i}}).then(async()=>this.emit("tauri://created")).catch(async a=>this.emit("tauri://error",a))}static async getByLabel(e){var i;return(i=(await Y()).find(n=>n.label===e))!==null&&i!==void 0?i:null}static getCurrent(){return oe()}static async getAll(){return Y()}async listen(e,i){return this._handleTauriEvent(e,i)?()=>{const n=this.listeners[e];n.splice(n.indexOf(i),1)}:P(e,i,{target:{kind:"Webview",label:this.label}})}async once(e,i){return this._handleTauriEvent(e,i)?()=>{const n=this.listeners[e];n.splice(n.indexOf(i),1)}:Q(e,i,{target:{kind:"Webview",label:this.label}})}async emit(e,i){if(T.includes(e)){for(const n of this.listeners[e]||[])n({event:e,id:-1,payload:i});return}return ae(e,i)}async emitTo(e,i,n){if(T.includes(i)){for(const a of this.listeners[i]||[])a({event:i,id:-1,payload:n});return}return le(e,i,n)}_handleTauriEvent(e,i){return T.includes(e)?(e in this.listeners?this.listeners[e].push(i):this.listeners[e]=[i],!0):!1}async position(){return s("plugin:webview|webview_position",{label:this.label}).then(e=>new d(e))}async size(){return s("plugin:webview|webview_size",{label:this.label}).then(e=>new b(e))}async close(){return s("plugin:webview|webview_close",{label:this.label})}async setSize(e){return s("plugin:webview|set_webview_size",{label:this.label,value:e instanceof y?e:new y(e)})}async setPosition(e){return s("plugin:webview|set_webview_position",{label:this.label,value:e instanceof f?e:new f(e)})}async setFocus(){return s("plugin:webview|set_webview_focus",{label:this.label})}async setAutoResize(e){return s("plugin:webview|set_webview_auto_resize",{label:this.label,value:e})}async hide(){return s("plugin:webview|webview_hide",{label:this.label})}async show(){return s("plugin:webview|webview_show",{label:this.label})}async setZoom(e){return s("plugin:webview|set_webview_zoom",{label:this.label,value:e})}async reparent(e){return s("plugin:webview|reparent",{label:this.label,window:typeof e=="string"?e:e.label})}async clearAllBrowsingData(){return s("plugin:webview|clear_all_browsing_data")}async setBackgroundColor(e){return s("plugin:webview|set_webview_background_color",{color:e})}async onDragDropEvent(e){const i=await this.listen(o.DRAG_ENTER,l=>{e({...l,payload:{type:"enter",paths:l.payload.paths,position:new d(l.payload.position)}})}),n=await this.listen(o.DRAG_OVER,l=>{e({...l,payload:{type:"over",position:new d(l.payload.position)}})}),a=await this.listen(o.DRAG_DROP,l=>{e({...l,payload:{type:"drop",paths:l.payload.paths,position:new d(l.payload.position)}})}),r=await this.listen(o.DRAG_LEAVE,l=>{e({...l,payload:{type:"leave"}})});return()=>{i(),a(),n(),r()}}}function O(){const t=oe();return new m(t.label,{skip:!0})}async function K(){return s("plugin:window|get_all_windows").then(t=>t.map(e=>new m(e,{skip:!0})))}class m{constructor(e,i={}){var n;this.label=e,this.listeners=Object.create(null),i?.skip||s("plugin:webview|create_webview_window",{options:{...i,parent:typeof i.parent=="string"?i.parent:(n=i.parent)===null||n===void 0?void 0:n.label,label:e}}).then(async()=>this.emit("tauri://created")).catch(async a=>this.emit("tauri://error",a))}static async getByLabel(e){var i;const n=(i=(await K()).find(a=>a.label===e))!==null&&i!==void 0?i:null;return n?new m(n.label,{skip:!0}):null}static getCurrent(){return O()}static async getAll(){return K()}async listen(e,i){return this._handleTauriEvent(e,i)?()=>{const n=this.listeners[e];n.splice(n.indexOf(i),1)}:P(e,i,{target:{kind:"WebviewWindow",label:this.label}})}async once(e,i){return this._handleTauriEvent(e,i)?()=>{const n=this.listeners[e];n.splice(n.indexOf(i),1)}:Q(e,i,{target:{kind:"WebviewWindow",label:this.label}})}async setBackgroundColor(e){return s("plugin:window|set_background_color",{color:e}).then(()=>s("plugin:webview|set_webview_background_color",{color:e}))}}Ee(m,[I,G]);function Ee(t,e){(Array.isArray(e)?e:[e]).forEach(i=>{Object.getOwnPropertyNames(i.prototype).forEach(n=>{var a;typeof t.prototype=="object"&&t.prototype&&n in t.prototype||Object.defineProperty(t.prototype,n,(a=Object.getOwnPropertyDescriptor(i.prototype,n))!==null&&a!==void 0?a:Object.create(null))})})}const M=new Map,Re=t=>{if(!t||t.trim()==="")return!1;try{return!!(t.startsWith("/")||t.startsWith("http://")||t.startsWith("https://")||t.startsWith("tauri://"))}catch{return!1}},Te=async(t,e,i)=>{const n=i?.padding??20;if(i?.x!==void 0&&i?.y!==void 0)return{x:i.x,y:i.y};let a=1920,r=1080;try{const c=await Le();c?.size&&(a=c.size.width,r=c.size.height)}catch(c){console.warn("Failed to get monitor info, using defaults:",c)}switch(i?.position??"right-bottom"){case"right-bottom":return{x:a-t-n,y:r-e-n};case"right-top":return{x:a-t-n,y:n};case"left-bottom":return{x:n,y:r-e-n};case"left-top":return{x:n,y:n};case"center":return{x:(a-t)/2,y:(r-e)/2};default:return{x:a-t-n,y:r-e-n}}},ue=async t=>{const e=String(t.id),i=u.getState();if(i.isWindowActive(e)){console.log(`Notice window already open for message: ${e}`);return}const n=F(),a=`notice-${e}`;let r=`${n.routePrefix}/${t.type}?id=${t.id}`;Re(r)||(console.warn(`Invalid window URL: ${r}. Using fallback 404 page.`),r=n.notFoundUrl||"/404");const l=t.min_width||n.defaultWidth,c=t.min_height||n.defaultHeight,{x:v,y:S}=await Te(l,c,t.windowPosition);try{const p=new m(a,{url:r,title:t.title,width:l,height:c,x:v,y:S,resizable:!0,decorations:!0,skipTaskbar:!1,alwaysOnTop:!0});M.set(e,p),i.addActiveWindow(e),p.once("tauri://destroyed",async()=>{M.delete(e),i.removeActiveWindow(e),await i.markMessageAsShown(e),i.clearCurrent()}),console.log(`Created notice window: ${a}`)}catch(p){console.error("Failed to create notice window:",p),i.removeActiveWindow(e),i.clearCurrent()}},C=async t=>{const e=String(t),i=M.get(e),n=u.getState();if(i)try{await i.close(),M.delete(e),n.removeActiveWindow(e),await n.markMessageAsShown(e),n.clearCurrent(),console.log(`Closed notice window: ${e}`)}catch(a){console.error("Failed to close notice window:",a)}},ce=async()=>{const t=Array.from(M.keys()).map(e=>C(e));await Promise.all(t)},de=()=>{let t=null;u.subscribe(e=>{const i=e.currentMessage;i&&i!==t?(t=i,ue(i)):i||(t=null)}),console.log("Notice window system initialized")},qe=()=>{const t=u(i=>i.currentMessage);return{closeNotice:g.useCallback(async()=>{t&&await C(t.id)},[t])}},Fe=()=>{const t=u(i=>i.hideMessage);return{hideNotice:g.useCallback(async i=>{await t(i),await C(i)},[t])}},Be=()=>{const t=u(i=>i.clearOnLogout);return{hideAllNotices:g.useCallback(async()=>{await ce(),await t()},[t])}},Ue=()=>{const t=u(A.queueLength),e=u(A.currentMessage),i=u(A.isProcessing),n=u(A.queue);return{queueLength:t,currentMessage:e,isProcessing:i,queue:n}},Qe=({children:t,onLoad:e,onClose:i})=>{const[n,a]=g.useState(null),[r,l]=g.useState(!0),[c,v]=g.useState(null);return g.useEffect(()=>{(async()=>{try{const _=new URLSearchParams(window.location.search).get("id");if(!_){v("No message ID provided"),l(!1),setTimeout(async()=>{try{await O().close()}catch(W){console.error("Failed to close window:",W)}},1e3);return}const L=await U(_);if(!L){console.log(`Message ${_} not found in database, closing window`),v("Message not found"),l(!1),setTimeout(async()=>{try{await O().close()}catch(W){console.error("Failed to close window:",W)}},500);return}a(L),l(!1),e&&e(L)}catch(p){console.error("Failed to load message:",p),v("Failed to load message"),l(!1),setTimeout(async()=>{try{await O().close()}catch(_){console.error("Failed to close window:",_)}},1e3)}})()},[e]),g.useEffect(()=>{if(!n||!i)return;const S=()=>{i(n)};return window.addEventListener("beforeunload",S),()=>{window.removeEventListener("beforeunload",S)}},[n,i]),r?N.jsx("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh",fontFamily:"system-ui, -apple-system, sans-serif"},children:"Loading..."}):c?N.jsx("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh",fontFamily:"system-ui, -apple-system, sans-serif",color:"#ef4444"},children:c}):n?N.jsx(N.Fragment,{children:t(n)}):N.jsx("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh",fontFamily:"system-ui, -apple-system, sans-serif",color:"#ef4444"},children:"Closing window..."})},Ge=async()=>{B(),de();const{initializeFromDatabase:t}=u.getState();await t(),console.log("Tauri Notice System initialized")},He=async t=>{await u.getState().deleteMessage(t)},je=async t=>{await u.getState().hideMessage(t)},Ve=async t=>{await u.getState().markMessageAsShown(t)};exports.NoticeLayout=Qe;exports.closeAllNoticeWindows=ce;exports.closeNoticeWindow=C;exports.createNoticeWindow=ue;exports.deleteMessageById=He;exports.getMessage=U;exports.getNoticeConfig=F;exports.getPendingMessages=te;exports.hideMessageById=je;exports.initializeDatabase=B;exports.initializeNoticeSystem=Ge;exports.initializeNoticeWindowSystem=de;exports.markMessageAsShown=Ve;exports.messageQueueSelectors=A;exports.setNoticeConfig=be;exports.useCloseNotice=qe;exports.useHideAllNotices=Be;exports.useHideNotice=Fe;exports.useMessageQueue=Ue;exports.useMessageQueueStore=u;exports.useNoticeWindow=Me;
2
2
  //# sourceMappingURL=index.cjs.map