react-semaphor 0.1.277 → 0.1.279

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.
Files changed (30) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/chunks/{dashboard-controls-D9mU5Z1G.js → dashboard-controls-Cm_n6Dce.js} +1 -1
  3. package/dist/chunks/{dashboard-controls-DHf9WSeg.js → dashboard-controls-I3SWzXID.js} +4 -4
  4. package/dist/chunks/dashboard-filter-controls-button-DXXJnFns.js +11 -0
  5. package/dist/chunks/{dashboard-filter-controls-button-Col3P9nH.js → dashboard-filter-controls-button-DuifafhB.js} +3 -3
  6. package/dist/chunks/{dashboard-json-BZrsDc0Z.js → dashboard-json--iZU90D2.js} +1 -1
  7. package/dist/chunks/{dashboard-json-DiHAynxA.js → dashboard-json-C0_fJrmP.js} +1 -1
  8. package/dist/chunks/{dashboard-summary-settings-dialog-BJxnE9wH.js → dashboard-summary-settings-dialog-BzWnRhFU.js} +2 -1
  9. package/dist/chunks/{dashboard-summary-settings-dialog-t6Y8a94z.js → dashboard-summary-settings-dialog-DOofgrKU.js} +1 -1
  10. package/dist/chunks/{edit-dashboard-visual-CdJVVU7F.js → edit-dashboard-visual-CEb2cSMS.js} +2889 -2862
  11. package/dist/chunks/edit-dashboard-visual-DEuJScSB.js +193 -0
  12. package/dist/chunks/{index-BI7I65hX.js → index-BzQ2UBDI.js} +25392 -25254
  13. package/dist/chunks/{index-DVnK3_oU.js → index-ZpmXTndp.js} +236 -236
  14. package/dist/chunks/{resource-management-panel-BuDLgHdE.js → resource-management-panel-DMHJbuqI.js} +2 -2
  15. package/dist/chunks/{resource-management-panel-BpGYomkJ.js → resource-management-panel-DNez0W3b.js} +2 -2
  16. package/dist/chunks/{use-create-flow-overlay-state-BfpuoFBE.js → use-create-flow-overlay-state-BdoJfJmU.js} +1 -1
  17. package/dist/chunks/{use-create-flow-overlay-state-DgQupBfa.js → use-create-flow-overlay-state-BvBTFIgX.js} +2 -2
  18. package/dist/chunks/{use-visual-utils-BA3-XR15.js → use-visual-utils-C2syL_qa.js} +1 -1
  19. package/dist/chunks/{use-visual-utils-DWrGnklK.js → use-visual-utils-D4Lp-wat.js} +1 -1
  20. package/dist/dashboard/index.cjs +1 -1
  21. package/dist/dashboard/index.js +1 -1
  22. package/dist/index.cjs +1 -1
  23. package/dist/index.js +5 -5
  24. package/dist/style.css +1 -1
  25. package/dist/surfboard/index.cjs +1 -1
  26. package/dist/surfboard/index.js +2 -2
  27. package/dist/types/main.d.ts +1 -1
  28. package/package.json +1 -1
  29. package/dist/chunks/dashboard-filter-controls-button-C3eC--zB.js +0 -11
  30. package/dist/chunks/edit-dashboard-visual-Cg9xHe7E.js +0 -193
package/CHANGELOG.md CHANGED
@@ -8,6 +8,25 @@ All notable changes to this project will be documented in this file.
8
8
 
9
9
  ### Changed
10
10
 
11
+ - **Visual refresh — default palette and radius aligned with semaphor-app.** The shipped `--semaphor-*` CSS variable *values* in `src/components/index.css` now mirror the zinc-based design tokens used by the main Semaphor app. Variable names, selector prefixing (`.semaphor-scope`), and the public API are unchanged — only the default values differ.
12
+
13
+ Light mode:
14
+ - `--semaphor-foreground`, `--semaphor-card-foreground`, `--semaphor-popover-foreground`: shifted from `240 10% 3.9%` to `240 5.9% 10%` (zinc-900 warm neutral).
15
+ - `--semaphor-muted`: `240 4.8% 95.9%` → `0 0% 98%` (raised surface now lighter than canvas on hover-states).
16
+ - `--semaphor-destructive`: `0 84.2% 60.2%` → `0 72.2% 50.6%` (red-500, less saturated).
17
+ - `--semaphor-radius`: `0.5rem` (8px) → `0.3125rem` (5px). Cards, controls, tables become denser.
18
+ - Added `--semaphor-brand: 217 91% 53%` as a default (falls back to `--semaphor-foreground` when unset, per Tailwind config — now has an explicit default).
19
+
20
+ Dark mode:
21
+ - Canvas darkened from zinc-900 (`240 10% 10%`) to zinc-950 (`240 10% 3.9%`). No longer pure black — keeps depth without being harsh.
22
+ - Body foreground shifted from `0 0% 80%` to `0 0% 93%` (calm off-white — Linear / Vercel / Notion style). Primary and primary-foreground keep crisp 98% contrast for white-on-dark buttons.
23
+ - Muted swapped so raised surfaces lift *lighter* from canvas (`240 3.7% 15.9%` → `240 5.9% 10%`). Elevation in dark mode now adds light, not darkness.
24
+ - Ring color crisp (`240 4.9% 83.9%` → `0 0% 98%`) for focus visibility.
25
+
26
+ **Customer impact**: customers overriding `--semaphor-*` vars on the host see no change — their overrides still win via cascade. Customers relying on the shipped defaults will see a palette shift (warmer zinc, calmer dark) and tighter radii. No API changes.
27
+
28
+ **Known issue not addressed in this pass**: `theme-provider.tsx` still mutates `document.documentElement.classList` for light/dark, which leaks into the host app. Tracked separately under the `brand-studio` appearance runtime.
29
+
11
30
  - Dashboard assistant visibility now resolves with token precedence: `config.showDashboardAssistant` overrides `showAssistant`, and falls back to `false` when both are unset.
12
31
 
13
32
  ## [0.0.96] - 2025-04-26
@@ -1,4 +1,4 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),s=require("./index-DVnK3_oU.js"),x=require("react");require("react-dom");const P=require("./dashboard-filter-controls-button-C3eC--zB.js"),_s=require("./date-formatter-CqXdM6JO.js"),Xe=require("./dashboard-summary-settings-dialog-t6Y8a94z.js"),Us=require("./use-debounced-dirty-check-XHSwAefL.js"),we=require("./normalize-dashboard-for-dirty-check-BXRUMVb2.js"),Ye=require("./use-create-flow-overlay-state-BfpuoFBE.js");function Rs(t){const o=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const a in t)if(a!=="default"){const r=Object.getOwnPropertyDescriptor(t,a);Object.defineProperty(o,a,r.get?r:{enumerable:!0,get:()=>t[a]})}}return o.default=t,Object.freeze(o)}const C=Rs(x);/**
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),s=require("./index-ZpmXTndp.js"),x=require("react");require("react-dom");const P=require("./dashboard-filter-controls-button-DXXJnFns.js"),_s=require("./date-formatter-CqXdM6JO.js"),Xe=require("./dashboard-summary-settings-dialog-DOofgrKU.js"),Us=require("./use-debounced-dirty-check-XHSwAefL.js"),we=require("./normalize-dashboard-for-dirty-check-BXRUMVb2.js"),Ye=require("./use-create-flow-overlay-state-BdoJfJmU.js");function Rs(t){const o=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(t){for(const a in t)if(a!=="default"){const r=Object.getOwnPropertyDescriptor(t,a);Object.defineProperty(o,a,r.get?r:{enumerable:!0,get:()=>t[a]})}}return o.default=t,Object.freeze(o)}const C=Rs(x);/**
2
2
  * @license lucide-react v0.453.0 - ISC
3
3
  *
4
4
  * This source code is licensed under the ISC license.
@@ -1,14 +1,14 @@
1
1
  import { jsxs as o, jsx as e, Fragment as k } from "react/jsx-runtime";
2
- import { bM as de, dp as qs, u as x, cA as ra, cB as na, B as A, cD as oa, cE as Q, dq as ia, N as qa, b as $, e as la, dr as Hs, cr as ca, f as da, g as ua, h as ma, i as Ha, L as Qe, I as ce, v as js, a7 as K, ds as we, cI as We, dt as zs, du as Pa, dv as ja, c as Y, dw as za, dx as Bs, cZ as ha, dy as Ks, dz as Qs, dA as Ws, dB as Js, dC as Xs, dD as Ys, H as Me, W as Ae, x as I, dE as Le, dF as Ba, dG as Ka, d7 as Zs, dH as et, w as Z, cH as J, dI as at, dJ as st, dK as Je, dL as tt, dM as rt, dN as Qa, dO as Wa, dP as Ce, dQ as Ee, d3 as Xe, cN as Ye, dR as Ze, ce as Ja, dS as ea, c9 as Xa, dT as nt, cQ as Ya, cR as Za, cS as es, cT as as, cU as ss, cV as ts, cW as rs, cX as aa, dU as ns, cz as ot, dV as it, ag as lt, U as Ua, af as De, dW as ct, am as dt, ah as je, dX as ut, dY as mt, dZ as ht, aB as pt, d_ as ft, d$ as gt, bT as vt, bU as bt, bV as yt, e0 as Nt, bW as St, cF as xt, at as Dt, e1 as wt, e2 as Ct, dn as Et, e3 as Mt, e4 as At, cC as Lt, a9 as It, cK as kt, e5 as Ot, al as Tt, aa as _t, as as Pt, e6 as Ut } from "./index-BI7I65hX.js";
2
+ import { bM as de, dn as qs, u as x, cA as ra, cB as na, B as A, cD as oa, cE as Q, dp as ia, N as qa, b as $, e as la, dq as Hs, cr as ca, f as da, g as ua, h as ma, i as Ha, L as Qe, I as ce, v as js, a7 as K, dr as we, cI as We, ds as zs, dt as Pa, du as ja, c as Y, dv as za, dw as Bs, cZ as ha, dx as Ks, dy as Qs, dz as Ws, dA as Js, dB as Xs, dC as Ys, H as Me, W as Ae, x as I, dD as Le, dE as Ba, dF as Ka, d6 as Zs, dG as et, w as Z, cH as J, dH as at, dI as st, dJ as Je, dK as tt, dL as rt, dM as Qa, dN as Wa, dO as Ce, dP as Ee, d2 as Xe, cN as Ye, dQ as Ze, ce as Ja, dR as ea, c9 as Xa, dS as nt, cQ as Ya, cR as Za, cS as es, cT as as, cU as ss, cV as ts, cW as rs, cX as aa, dT as ns, cz as ot, dU as it, ag as lt, U as Ua, af as De, dV as ct, am as dt, ah as je, dW as ut, dX as mt, dY as ht, aB as pt, dZ as ft, d_ as gt, bT as vt, bU as bt, bV as yt, d$ as Nt, bW as St, cF as xt, at as Dt, e0 as wt, e1 as Ct, dm as Et, e2 as Mt, e3 as At, cC as Lt, a9 as It, cK as kt, e4 as Ot, al as Tt, aa as _t, as as Pt, e5 as Ut } from "./index-BzQ2UBDI.js";
3
3
  import * as M from "react";
4
4
  import os, { useState as N, useMemo as W, useCallback as Ra, useEffect as Rt } from "react";
5
5
  import "react-dom";
6
- import { b as Gt, u as Ft, d as $t, A as Vt, V as qt, N as Ht, c as jt, D as zt, U as Bt } from "./dashboard-filter-controls-button-Col3P9nH.js";
6
+ import { b as Gt, u as Ft, d as $t, A as Vt, V as qt, N as Ht, c as jt, D as zt, U as Bt } from "./dashboard-filter-controls-button-DuifafhB.js";
7
7
  import { l as Kt } from "./date-formatter-vkCj9Ct-.js";
8
- import { C as Qt, D as Wt } from "./dashboard-summary-settings-dialog-BJxnE9wH.js";
8
+ import { C as Qt, D as Wt } from "./dashboard-summary-settings-dialog-BzWnRhFU.js";
9
9
  import { u as Jt } from "./use-debounced-dirty-check-BwAbnX_5.js";
10
10
  import { s as ze } from "./normalize-dashboard-for-dirty-check-5KpZN8xr.js";
11
- import { S as Ga } from "./use-create-flow-overlay-state-DgQupBfa.js";
11
+ import { S as Ga } from "./use-create-flow-overlay-state-BvBTFIgX.js";
12
12
  /**
13
13
  * @license lucide-react v0.453.0 - ISC
14
14
  *
@@ -0,0 +1,11 @@
1
+ "use strict";const v=require("react"),e=require("./index-ZpmXTndp.js"),t=require("react/jsx-runtime"),I=require("./use-create-flow-overlay-state-BdoJfJmU.js"),k=require("./use-visual-utils-D4Lp-wat.js"),L=require("./date-formatter-CqXdM6JO.js");/**
2
+ * @license lucide-react v0.453.0 - ISC
3
+ *
4
+ * This source code is licensed under the ISC license.
5
+ * See the LICENSE file in the root directory of this source tree.
6
+ */const T=e.createLucideIcon("FileDown",[["path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z",key:"1rqfz7"}],["path",{d:"M14 2v4a2 2 0 0 0 2 2h4",key:"tnqrlb"}],["path",{d:"M12 18v-6",key:"17g6i2"}],["path",{d:"m9 15 3 3 3-3",key:"1npd3o"}]]);/**
7
+ * @license lucide-react v0.453.0 - ISC
8
+ *
9
+ * This source code is licensed under the ISC license.
10
+ * See the LICENSE file in the root directory of this source tree.
11
+ */const P=e.createLucideIcon("FilterX",[["path",{d:"M13.013 3H2l8 9.46V19l4 2v-8.54l.9-1.055",key:"1fi1da"}],["path",{d:"m22 3-5 5",key:"12jva0"}],["path",{d:"m17 3 5 5",key:"k36vhe"}]]),V=1e4,O=15e3,z=3e4,R=3e4,$=12e4,M=2*60*60*1e3;function H(s){const r=Date.now()-s.getTime();return r<R?V:r<$?O:z}function q(){const{authToken:s,tokenProps:r}=e.useSemaphorContext(),p=e.useExportStore(m=>m.activeExports),[d,c]=v.useState(typeof document<"u"?!document.hidden:!0),u=v.useRef(null),n=v.useRef(!1),l=v.useRef(void 0),h=r==null?void 0:r.apiServiceUrl,o=s==null?void 0:s.accessToken,f=v.useCallback(()=>{const m=e.useExportStore.getState().activeExports;return Array.from(m.values()).filter(C=>e.isExportInProgress(C.status))},[]);v.useEffect(()=>{if(typeof document>"u")return;const m=()=>{c(!document.hidden)};return document.addEventListener("visibilitychange",m),()=>{document.removeEventListener("visibilitychange",m)}},[]);const b=v.useCallback(async()=>{if(!h||!o){n.current=!1;return}const m=f();if(m.length===0){n.current=!1;return}const C=Date.now(),D=m.filter(a=>C-a.startedAt.getTime()>M);if(D.length>0){const{updateExport:a}=e.useExportStore.getState().actions;for(const i of D)a(i.id,{status:"failed",error:"Export timed out. Please try again or contact support.",lastUpdatedAt:new Date})}const x=m.filter(a=>C-a.startedAt.getTime()<=M);if(x.length===0){n.current=!1;return}const j=await Promise.allSettled(x.map(async a=>{try{const i=await e.getExportStatus(h,o,a.id);let g;if(i.status==="completed")try{g=await e.getDownloadUrl(h,o,a.id)}catch(A){console.error(`[useExportPolling] Failed to get download URL for ${a.id}:`,A)}return{id:a.id,status:i.status,progress:i.progress,completedChunks:i.completedChunks,completedAt:i.completedAt?new Date(i.completedAt):void 0,lastUpdatedAt:new Date,fileSize:i.fileSize,error:i.error,downloadUrl:g}}catch(i){return console.error(`[useExportPolling] Failed to poll export ${a.id}:`,i),null}})),{updateExport:N}=e.useExportStore.getState().actions;for(const a of j)a.status==="fulfilled"&&a.value&&N(a.value.id,a.value);const w=f();if(w.length>0&&!document.hidden){const a=w.reduce((g,A)=>A.startedAt<g?A.startedAt:g,w[0].startedAt),i=H(a);u.current&&clearTimeout(u.current),u.current=setTimeout(()=>{var g;(g=l.current)==null||g.call(l)},i)}else n.current=!1},[h,o,f]);return v.useEffect(()=>{l.current=b},[b]),v.useEffect(()=>{var C;f().length>0&&d&&!n.current&&(n.current=!0,(C=l.current)==null||C.call(l))},[p,d,f]),v.useEffect(()=>{var C;const m=f();d&&m.length>0&&!n.current&&(n.current=!0,(C=l.current)==null||C.call(l))},[d,f]),v.useEffect(()=>{!d&&u.current&&(clearTimeout(u.current),u.current=null,n.current=!1)},[d]),v.useEffect(()=>()=>{u.current&&(clearTimeout(u.current),u.current=null)},[]),{isPolling:n.current,isTabVisible:d,inProgressCount:f().length}}function _(){const{authToken:s,tokenProps:r}=e.useSemaphorContext(),p=e.useExportStore(l=>l.activeExports),{addExport:d}=e.useExportActions(),c=v.useRef(!1),u=r==null?void 0:r.apiServiceUrl,n=s==null?void 0:s.accessToken;v.useEffect(()=>{if(c.current||!u||!n)return;(async()=>{try{const{exports:h}=await e.getExports(u,n,{status:["pending","processing","chunking","compacting","completed","failed"],limit:20});for(const o of h){if(p.has(o.id))continue;const f=o.totalChunks?Math.round(o.completedChunks/o.totalChunks*100):0;let b;if(o.status==="completed")try{b=await e.getDownloadUrl(u,n,o.id)}catch(C){console.error(`[useExportRecovery] Failed to get download URL for ${o.id}:`,C)}const m={id:o.id,status:o.status,progress:f,title:X(o),totalRows:o.totalRows,totalChunks:o.totalChunks,completedChunks:o.completedChunks,startedAt:new Date(o.createdAt),lastUpdatedAt:new Date,completedAt:o.completedAt?new Date(o.completedAt):void 0,fileSize:o.fileSize,error:o.error,expiresAt:new Date(o.expiresAt),downloadUrl:b};d(m)}c.current=!0}catch(h){console.error("[useExportRecovery] Failed to recover exports:",h),c.current=!0}})()},[u,n,d,p])}function X(s){return s.title?s.title:e.isExportInProgress(s.status)?"Export in progress...":s.status==="completed"?"Export completed":s.status==="failed"?"Export failed":"Export"}function G({open:s,onOpenChange:r,isLibraryVisual:p,currentVisualName:d,isSaving:c=!1,destinationMode:u="both",onConfirm:n}){const[l,h]=v.useState(p&&d?`Copy of ${d}`:d||""),[o,f]=v.useState("");v.useEffect(()=>{s&&(h(p&&d?`Copy of ${d}`:d||""),f(""))},[s,p,d]);const b=!!l.trim(),m=u==="local"?{saveToLibrary:!1,saveToCurrentDashboard:!0,badgeType:"local",description:"Creates a local copy on the current dashboard.",actionLabel:"Add to Dashboard (Local)"}:u==="library"?{saveToLibrary:!0,saveToCurrentDashboard:!1,badgeType:"library",description:"Creates a reusable visual in Visual Library.",actionLabel:"Save as Library Visual"}:{saveToLibrary:!0,saveToCurrentDashboard:!0,badgeType:"linked",description:"Creates a new library visual and adds a linked copy to this dashboard.",actionLabel:"Save Copy as Linked Visual"},C=()=>{!b||c||n({name:l.trim(),description:o.trim()||void 0,saveToLibrary:m.saveToLibrary,saveToCurrentDashboard:m.saveToCurrentDashboard})};return t.jsx(e.Dialog,{open:s,onOpenChange:r,children:t.jsxs(e.DialogContent,{className:"sm:max-w-[500px]",children:[t.jsxs(e.DialogHeader,{children:[t.jsxs(e.DialogTitle,{className:"flex items-center gap-2",children:[t.jsx("span",{children:"Save Visual As"}),m.badgeType!=="local"&&t.jsx(I.VisualBadge,{type:m.badgeType,showLabel:!0,className:"px-2 py-0.5"})]}),t.jsx(e.DialogDescription,{children:m.description})]}),t.jsxs("div",{className:"grid gap-4 py-4",children:[t.jsxs("div",{className:"grid gap-2",children:[t.jsx(e.Label,{htmlFor:"name",children:"Name"}),t.jsx(e.Input,{id:"name",value:l,onChange:D=>h(D.target.value),placeholder:"Enter visual name",disabled:c})]}),t.jsxs("div",{className:"grid gap-2",children:[t.jsx(e.Label,{htmlFor:"description",children:"Description (optional)"}),t.jsx(e.Textarea,{id:"description",value:o,onChange:D=>f(D.target.value),placeholder:"Enter visual description",rows:3,disabled:c})]})]}),t.jsxs(e.DialogFooter,{children:[t.jsx(e.Button,{variant:"outline",onClick:()=>r(!1),disabled:c,children:"Cancel"}),t.jsxs(e.Button,{onClick:C,disabled:!b||c,children:[c&&t.jsx(e.LoaderCircle,{className:"mr-2 h-4 w-4 animate-spin"}),m.actionLabel]})]})]})})}function K(){const[s,r]=v.useState(!1),[p,d]=v.useState(!1),[c,u]=v.useState(null),n=e.useEditorStore(i=>i.frame),l=e.useEditorStore(i=>i.card),h=e.useSelectedVisual(),o=e.useDashboardStore(i=>i.selectedSheetId),f=e.useDashboardStore(i=>i.actions.setIsDashboardPanelOpen),{getUpdatedFrame:b}=k.useVisualUtils(),{selectVisual:m}=e.useManagementActions(),{addFrame:C,setSelectedFrameId:D,setIsVisualEditing:x}=e.useDashboardActions(),j=!!(n!=null&&n.visualId),N=(()=>{var i,g;return((i=n==null?void 0:n.cards)==null?void 0:i.length)===1&&((g=n.cards[0])!=null&&g.title)?n.cards[0].title:h!=null&&h.title?h.title:(l==null?void 0:l.title)||"Untitled Visual"})(),w=e.useCreateVisualWithFrame(i=>{if(i!=null&&i.id){if(m(i),p&&c&&o){const g={...c,id:e.v4(),visualId:i.id};C(o,g,"end"),D(g.id),d(!1),u(null),x(!1)}f(!0),r(!1)}});return{saveAsDialogOpen:s,setSaveAsDialogOpen:r,handleSaveAs:async i=>{if(!o){e.ue.error("No sheet selected");return}const g=b(),A=e.getDynamicFrameSaveIssue(g);if(A){e.ue.error(A);return}const E=g.cards.length===1?{...g,cards:g.cards.map(y=>({...y,title:i.name}))}:g;if(i.saveToLibrary){d(i.saveToCurrentDashboard),u(E);const y={title:i.name,description:i.description,frameObject:E,isPrivate:!1};w.mutate(y)}else if(i.saveToCurrentDashboard){const y={...E,id:e.v4(),visualId:void 0};C(o,y,"end"),D(y.id),e.ue.success("Visual saved to dashboard"),r(!1),x(!1)}},isLibraryVisual:j,currentVisualName:N,isSaving:w.isPending}}function W({className:s}){const r=e.useEditorStore(S=>S.frame),p=e.useManagementStore(S=>S.selectedVisual),d=e.useDashboardStore(S=>S.selectedFrameId),c=e.useDashboardStore(S=>S.selectedSheetId),{setIsVisualEditing:u,updateFrame:n}=e.useDashboardActions(),[l,h]=v.useState(!1),[o,f]=v.useState("both"),b=!!(r!=null&&r.visualId||p!=null&&p.id),m=!!(r!=null&&r.visualId&&d),C=b&&!m,{saveAsDialogOpen:D,setSaveAsDialogOpen:x,handleSaveAs:j,isLibraryVisual:N,currentVisualName:w,isSaving:a}=K(),{getUpdatedFrame:i}=k.useVisualUtils(),g=()=>{if(!c){e.ue.error("No sheet selected");return}if(l)return;h(!0);const S=i(),E=e.getDynamicFrameSaveIssue(S);if(E){h(!1),e.ue.error(E);return}const y={...S,visualId:void 0};n(c,y),setTimeout(()=>{h(!1),e.ue.success("Changes applied. Visual is now local to this dashboard"),u(!1)},300)},A=S=>{f(S),x(!0)};return t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"inline-flex items-center overflow-hidden rounded-md border border-input",children:[!b&&t.jsx(I.EditorAcceptButton,{className:e.cn(s,"rounded-none border-0"),variant:"default"}),b&&C&&t.jsx(I.VisualSaveButton,{className:e.cn(s,"rounded-none border-0"),variant:"default"}),b&&m&&t.jsx(I.VisualSaveAndApplyButton,{className:e.cn(s,"rounded-none border-0")}),t.jsxs(e.DropdownMenu,{modal:!1,children:[t.jsx(e.DropdownMenuTrigger,{className:"h-8",asChild:!0,children:t.jsx(e.Button,{variant:"default",size:"sm",className:e.cn(s,"w-8 rounded-none border-0 border-l border-primary-foreground/30 px-2"),"aria-label":"Open visual save options",disabled:a||l,children:t.jsx(e.ChevronDown,{className:"h-4 w-4"})})}),t.jsxs(e.DropdownMenuContent,{align:"end",children:[m&&t.jsxs(t.Fragment,{children:[t.jsxs(e.DropdownMenuItem,{onClick:g,disabled:l,children:[t.jsx(e.Check,{className:"mr-2 h-4 w-4"}),l?"Applying...":"Apply Locally"]}),t.jsx(e.DropdownMenuSeparator,{})]}),t.jsxs(e.DropdownMenuItem,{onClick:()=>A("local"),disabled:a,children:[t.jsx(e.Plus,{className:"mr-2 h-4 w-4"}),"Add to Dashboard (Local)"]}),t.jsxs(e.DropdownMenuItem,{onClick:()=>A("library"),disabled:a,children:[t.jsx(I.Library,{className:"mr-2 h-4 w-4"}),"Save as Library Visual"]}),t.jsxs(e.DropdownMenuItem,{onClick:()=>A("both"),disabled:a,children:[t.jsx(I.Link2,{className:"mr-2 h-4 w-4"}),"Save Copy as Linked Visual"]})]})]})]}),t.jsx(I.EditorCancelButton,{className:s}),t.jsx(G,{open:D,onOpenChange:S=>{a||x(S)},isLibraryVisual:N,currentVisualName:w,isSaving:a,destinationMode:o,onConfirm:j})]})}function Q({className:s,switchClassName:r}){const p=e.useEditorStore(l=>l.isDevMode),d=e.useDashboardStore(l=>l.isVisualEditing),{setIsDevMode:c}=e.useEditorActions(),{config:u}=v.useContext(e.SemaphorContext).tokenProps,n=(u==null?void 0:u.showAdvancedMode)!==!1;return!d||!n?null:t.jsxs("div",{className:e.cn("flex items-center space-x-2",s),children:[t.jsx(e.DevModeSwitch,{className:e.cn("",r),checked:p,onCheckedChange:()=>c(!p),id:"advanced-mode",icon:t.jsx(e.CodeXml,{className:"h-4 w-4"}),tooltip:"Advanced Mode"}),t.jsx("label",{htmlFor:"advanced-mode",className:"sr-only",children:"Advanced Mode"})]})}function Y({open:s,onOpenChange:r,onSave:p,onDiscard:d,isSaving:c,title:u="Unsaved changes",description:n="You have unsaved changes to this dashboard. What would you like to do?",cancelLabel:l="Cancel",discardLabel:h="Discard",saveLabel:o="Save"}){const f=b=>{!b&&c||r(b)};return t.jsx(e.AlertDialog,{open:s,onOpenChange:f,children:t.jsxs(e.AlertDialogContent,{children:[t.jsxs(e.AlertDialogHeader,{children:[t.jsx(e.AlertDialogTitle,{children:u}),t.jsx(e.AlertDialogDescription,{children:n})]}),t.jsxs(e.AlertDialogFooter,{children:[t.jsx(e.AlertDialogCancel,{disabled:c,children:l}),t.jsx(e.Button,{type:"button",onClick:d,disabled:c,variant:"destructive",className:"bg-destructive text-destructive-foreground hover:bg-destructive/90",children:h}),t.jsx(e.Button,{type:"button",onClick:p,disabled:c,children:c?t.jsxs(t.Fragment,{children:[t.jsx(e.LoaderCircle,{className:"mr-2 h-4 w-4 animate-spin"}),"Saving..."]}):o})]})]})})}function Z(s,r,p,d){v.useEffect(()=>{s&&!p&&r&&d(e.cloneDeep(r))},[s,p,r,d])}function U({export:s,onRemove:r}){const p=()=>{s.downloadUrl&&window.open(s.downloadUrl,"_blank")},d=l=>{l.stopPropagation(),r==null||r(s.id)},c=()=>{switch(s.status){case"completed":return t.jsx(e.CircleCheck,{className:"mt-0.5 h-5 w-5 shrink-0 text-green-600"});case"failed":return t.jsx(I.CircleX,{className:"mt-0.5 h-5 w-5 shrink-0 text-destructive"});default:return t.jsx(e.LoaderCircle,{className:"text-foreground-muted mt-0.5 h-5 w-5 shrink-0 animate-spin"})}},u=e.isExportInProgress(s.status),n=(()=>{switch(s.status){case"pending":return"Queued...";case"processing":return"Processing...";case"chunking":return"Processing...";case"compacting":return"Finalizing...";default:return"Processing..."}})();return t.jsxs("div",{className:"group p-4 transition-colors hover:bg-muted/50",children:[t.jsxs("div",{className:"mb-2 flex items-start justify-between gap-3",children:[t.jsxs("div",{className:"flex min-w-0 flex-1 items-start gap-3",children:[c(),t.jsxs("div",{className:"min-w-0 flex-1",children:[t.jsx("h4",{className:"mb-1 truncate text-sm font-medium",children:s.title}),s.status==="completed"&&t.jsxs("div",{className:"flex items-center gap-2 text-xs text-muted-foreground",children:[t.jsxs("span",{children:[s.totalRows.toLocaleString()," rows"]}),s.fileSize&&t.jsxs(t.Fragment,{children:[t.jsx("span",{children:"•"}),t.jsx("span",{children:e.formatFileSize(s.fileSize)})]})]}),u&&t.jsx("div",{className:"text-xs text-muted-foreground",children:n}),s.status==="failed"&&t.jsx("div",{className:"line-clamp-2 text-xs text-destructive",children:s.error||"Export failed"})]})]}),t.jsx(e.Button,{variant:"ghost",size:"icon",className:"h-6 w-6 shrink-0 opacity-0 transition-opacity group-hover:opacity-100",onClick:d,"aria-label":"Remove notification",children:t.jsx(e.X,{className:"h-4 w-4"})})]}),t.jsxs("div",{className:"ml-8",children:[s.status==="completed"&&t.jsxs("div",{className:"flex items-center justify-between",children:[t.jsx("span",{className:"text-xs text-muted-foreground",children:L.formatDistanceToNow(s.startedAt,{addSuffix:!0})}),s.downloadUrl&&t.jsxs(e.Button,{size:"sm",variant:"outline",className:"h-8 bg-transparent",onClick:p,children:[t.jsx(e.Download,{className:"mr-1.5 h-3.5 w-3.5"}),"Download"]})]}),u&&t.jsxs("div",{children:[t.jsx(e.Progress,{value:s.progress,className:"h-1.5"}),t.jsxs("span",{className:"mt-1 block text-xs text-muted-foreground",children:[s.progress,"% complete"]})]}),s.status==="failed"&&t.jsx("span",{className:"text-xs text-muted-foreground",children:L.formatDistanceToNow(s.startedAt,{addSuffix:!0})})]})]})}function B(){const{authToken:s,tokenProps:r}=e.useSemaphorContext(),p=e.useExportStore(x=>x.activeExports),{clearCompleted:d,removeExport:c,updateExport:u}=e.useExportActions(),[n,l]=v.useState(!1),[h,o]=v.useState(!1),f=Array.from(p.values()).sort((x,j)=>j.startedAt.getTime()-x.startedAt.getTime()),b=f.some(x=>x.status==="completed"||x.status==="failed"),m=v.useCallback(async()=>{const x=r==null?void 0:r.apiServiceUrl,j=s==null?void 0:s.accessToken;if(!(!x||!j)){l(!0);try{const N=Array.from(p.values());await Promise.all(N.map(async w=>{try{const a=await e.getExportStatus(x,j,w.id);let i;if(a.status==="completed")try{i=await e.getDownloadUrl(x,j,w.id)}catch(g){console.error(`Failed to get download URL for ${w.id}:`,g)}u(w.id,{status:a.status,progress:a.progress,completedChunks:a.completedChunks,completedAt:a.completedAt?new Date(a.completedAt):void 0,lastUpdatedAt:new Date,fileSize:a.fileSize,error:a.error,downloadUrl:i})}catch(a){console.error(`Failed to refresh export ${w.id}:`,a)}}))}finally{l(!1)}}},[p,s==null?void 0:s.accessToken,r==null?void 0:r.apiServiceUrl,u]),C=v.useCallback(async()=>{const x=r==null?void 0:r.apiServiceUrl,j=s==null?void 0:s.accessToken;if(!x||!j){d();return}o(!0);try{const N=f.filter(a=>a.status==="completed"||a.status==="failed"),w=await Promise.allSettled(N.map(async a=>(await e.cancelExport(x,j,a.id),a.id)));for(const a of w)a.status==="fulfilled"?c(a.value):console.error("Failed to delete export:",a.reason)}finally{o(!1)}},[f,r==null?void 0:r.apiServiceUrl,s==null?void 0:s.accessToken,d,c]),D=v.useCallback(async x=>{const j=r==null?void 0:r.apiServiceUrl,N=s==null?void 0:s.accessToken;if(j&&N)try{await e.cancelExport(j,N,x),c(x);return}catch(w){console.error(`Failed to cancel export ${x}:`,w)}c(x)},[r==null?void 0:r.apiServiceUrl,s==null?void 0:s.accessToken,c]);return f.length===0?t.jsxs("div",{className:"p-6 text-center",children:[t.jsx(T,{className:"mx-auto mb-2 h-8 w-8 text-muted-foreground"}),t.jsx("p",{className:"text-sm text-muted-foreground",children:"No active exports"}),t.jsx("p",{className:"mt-1 text-xs text-muted-foreground",children:"Large exports will appear here"})]}):t.jsxs("div",{className:"flex flex-col",children:[t.jsxs("div",{className:"flex items-center justify-between border-b px-4 py-3",children:[t.jsxs("div",{className:"flex items-center gap-2",children:[t.jsx(T,{className:"h-5 w-5 text-muted-foreground"}),t.jsx("h4",{className:"font-semibold",children:"Exports"})]}),t.jsxs("div",{className:"flex items-center gap-1",children:[t.jsx(e.Button,{variant:"ghost",size:"sm",className:"h-7 w-7 p-0",onClick:m,disabled:n,title:"Refresh status",children:t.jsx(e.RefreshCw,{className:`h-4 w-4 ${n?"animate-spin":""}`})}),b&&t.jsx(e.Button,{variant:"ghost",size:"sm",className:"h-7 px-2 text-sm",onClick:C,disabled:h,children:h?"Clearing...":"Clear all"})]})]}),t.jsx("div",{className:"max-h-[350px] overflow-y-auto",children:t.jsx("div",{className:"divide-y",children:f.map(x=>t.jsx(U,{export:x,onRemove:D},x.id))})})]})}function J({variant:s}){const r=e.useExportStore(h=>h.activeExports),p=e.useInProgressExportsCount(),d=r.size>0,c=Array.from(r.values()).some(h=>h.status==="completed"||h.status==="failed"),n=p>0?p>9?"9+":String(p):null,l=d;return t.jsxs(e.Popover,{children:[t.jsx(e.PopoverTrigger,{asChild:!0,children:t.jsxs(e.Button,{variant:s??"ghost",size:"icon",className:"relative h-8 w-8","aria-label":"Export notifications",children:[t.jsx(e.Bell,{className:"h-4 w-4"}),l&&t.jsx("span",{className:`absolute flex items-center justify-center rounded-full bg-primary text-primary-foreground ${n?"-right-0.5 -top-0.5 h-4 min-w-4 px-0.5 text-[10px] font-semibold":"right-0.5 top-0.5 h-2 w-2"}`,children:n})]})}),t.jsx(e.PopoverContent,{className:"w-80 p-0",align:"end",sideOffset:8,children:t.jsx(B,{})})]})}function ee(s){if(s)return{renamed:s.type==="rename"?{oldId:s.oldId,newId:s.newId}:void 0,removedControlId:s.type==="remove"?s.controlId:void 0,cardBindingsById:s.type==="add"||s.type==="update"?s.cardBindingsById:void 0,affectedBindingControlIds:s.type==="add"||s.type==="update"?s.affectedBindingControlIds:void 0}}function te({open:s,onOpenChange:r,trigger:p,showTrigger:d=!0,initialMode:c="manage"}){const u=c==="create",{forceClose:n,handleOpenChange:l,isCreateFlowActive:h,preventPassiveDismissDuringCreate:o,resolvedOpen:f,setIsCreateFlowActive:b}=I.useCreateFlowOverlayState({open:s,onOpenChange:r,initialCreateFlowActive:c==="create"}),m=e.useDashboardStore(E=>E.dashboard),{setDashboardControlsModel:C}=e.useDashboardActions(),{participants:D}=e.useDashboardStructuralParticipants(e.getDashboardCards(m)),x=Array.from(new Map(D.flatMap(E=>E.fieldChoices.map(y=>{var F;return[y.value,{option:y,target:(F=E.fieldTargetMap)==null?void 0:F[y.value]}]}))).values()),j=Array.from(new Map(D.flatMap(E=>E.metricChoices.map(y=>{var F;return[y.value,{option:y,target:(F=E.metricTargetMap)==null?void 0:F[y.value]}]}))).values()),N=e.collectDashboardControlIds({...m||{},controls:[]}),w=e.buildDashboardStructuralParticipantIdsByControlId(m),a=(E,y,F)=>{C(E,y,ee(F))},i=v.useCallback(()=>{if(u){n();return}b(!1)},[u,n,b]),g=t.jsx(I.ControlDefinitionListEditor,{scope:"dashboard",controls:m.controls||[],reservedControlIds:N,defaultValues:m.defaultControlValues||{},usageByControlId:e.buildDashboardControlUsageById(m),availableFieldChoices:x,availableMetricChoices:j,structuralParticipants:D,structuralParticipantIdsByControlId:w,initialCreateFlow:c==="create",onCreateFlowActiveChange:b,onCreateFlowComplete:i,onChange:a,emptyMessage:"No dashboard controls yet."}),A=h?"Add dashboard control":"Dashboard Controls",S=t.jsxs(t.Fragment,{children:[t.jsxs("div",{className:"space-y-1",children:[t.jsx("h4",{className:"text-sm font-medium",children:"Dashboard Controls"}),t.jsx("p",{className:"text-xs text-muted-foreground",children:"Add shared controls viewers can use across the dashboard. Each card can decide how to respond to the same control."})]}),g]});return d?t.jsxs(e.Popover,{open:f,onOpenChange:l,children:[t.jsx(e.PopoverTrigger,{asChild:!0,children:p||t.jsxs(e.Button,{variant:"outline",className:"h-7 px-2",size:"sm",children:[t.jsx(e.SlidersHorizontal,{className:"mr-2 h-4 w-4"}),"Controls"]})}),t.jsx(e.PopoverContent,{className:"w-[620px] max-w-[95vw] space-y-4",align:"end",onEscapeKeyDown:o,onPointerDownOutside:o,children:S})]}):t.jsx(e.Dialog,{open:f,onOpenChange:l,children:t.jsxs(e.DialogContent,{className:"flex max-h-[88vh] max-w-[980px] flex-col overflow-hidden",showCloseButton:!h,onEscapeKeyDown:o,onPointerDownOutside:o,children:[t.jsxs(e.DialogHeader,{className:h?"space-y-0":void 0,children:[t.jsx(e.DialogTitle,{children:A}),t.jsx(e.DialogDescription,{className:h?"sr-only":void 0,children:h?"Configure and add a shared dashboard control.":"Add shared controls viewers can use across the dashboard. Each card can decide how to respond to the same control."})]}),t.jsx("div",{className:"min-h-0 overflow-y-auto pr-1",children:g})]})})}function se({showFilters:s,onToggleFilters:r,onAddFilter:p,onAddControl:d,onManageControls:c,size:u="default",className:n,primaryButtonClassName:l,secondaryButtonClassName:h,dropdownContentClassName:o}){const f=u==="toolbar";return t.jsxs("div",{className:e.cn("relative inline-flex items-stretch overflow-visible rounded-md border border-input bg-background shadow-none",n),children:[t.jsxs(e.Button,{variant:"ghost",className:e.cn(f?"h-8":"h-7","rounded-none border-0 bg-transparent pl-3 pr-2 shadow-none hover:bg-accent/50",l),onClick:r,size:"sm",children:[s?t.jsx(P,{className:"mr-2 h-4 w-4"}):t.jsx(e.Filter,{className:"mr-2 h-4 w-4"}),"Filter"]}),t.jsxs(e.DropdownMenu,{children:[t.jsx(e.DropdownMenuTrigger,{asChild:!0,children:t.jsx(e.Button,{className:e.cn(f?"h-8 w-8":"h-7 w-8","rounded-none border-0 bg-transparent px-1 shadow-none hover:bg-accent/50",h),variant:"ghost",size:"sm","aria-label":"Filter and control actions",children:t.jsx(e.ChevronDown,{className:"h-4 w-4"})})}),t.jsxs(e.DropdownMenuContent,{align:"start",className:e.cn("rounded-xl border border-border/60 p-1 shadow-sm",o),children:[t.jsxs(e.DropdownMenuItem,{onSelect:p,children:[t.jsx(e.Filter,{className:"mr-2 h-4 w-4"}),"Add filter"]}),t.jsxs(e.DropdownMenuItem,{onSelect:d,children:[t.jsx(e.SlidersHorizontal,{className:"mr-2 h-4 w-4"}),"Add control"]}),t.jsxs(e.DropdownMenuItem,{onSelect:c,children:[t.jsx(e.Pencil,{className:"mr-2 h-4 w-4"}),"Manage controls"]})]})]})]})}exports.AdvancedModeToggle=Q;exports.DashboardControlsSettings=te;exports.DashboardFilterControlsButton=se;exports.ExportNotificationItem=U;exports.ExportNotificationList=B;exports.NotificationBell=J;exports.UnsavedChangesAlert=Y;exports.VisualEditingControls=W;exports.useExportPolling=q;exports.useExportRecovery=_;exports.usePristineSnapshotInitializer=Z;
@@ -1,8 +1,8 @@
1
1
  import ge, { useState as F, useRef as z, useCallback as V, useEffect as T, useContext as be } from "react";
2
- import { bM as Z, b as $, aC as U, bJ as _, bF as ee, bG as H, aD as te, bE as Ce, e as ae, f as se, g as re, h as oe, i as ne, L as G, d1 as we, d7 as ye, v as xe, B as I, w as j, U as R, J as De, u as B, K as Ne, N as X, d8 as Ae, d9 as K, x as P, b_ as ie, af as Se, c as L, cA as le, cB as de, a6 as ce, cD as ue, cE as M, s as Ee, cI as Ie, cr as Le, M as Fe, da as Te, db as ke, dc as Ue, cQ as Me, cR as Ve, cS as Pe, cT as Be, cU as Oe, cV as ze, cW as Re, as as $e, bL as _e, X as He, dd as je, de as Xe, cw as Ge, bH as W, a8 as Ke, aF as We, P as he, k as me, df as qe, l as pe, dg as Je, dh as Qe, di as Ye, dj as Ze, dk as et, dl as fe, dm as q, dn as tt } from "./index-BI7I65hX.js";
2
+ import { bM as Z, b as $, aC as U, bJ as _, bF as ee, bG as H, aD as te, bE as Ce, e as ae, f as se, g as re, h as oe, i as ne, L as G, I as we, d6 as ye, v as xe, B as I, w as j, U as R, J as De, u as B, K as Ne, N as X, d7 as Ae, d8 as K, x as P, b_ as ie, af as Se, c as L, cA as le, cB as de, a6 as ce, cD as ue, cE as M, s as Ee, cI as Ie, cr as Le, M as Fe, d9 as Te, da as ke, db as Ue, cQ as Me, cR as Ve, cS as Pe, cT as Be, cU as Oe, cV as ze, cW as Re, as as $e, bL as _e, X as He, dc as je, dd as Xe, cw as Ge, bH as W, a8 as Ke, aF as We, P as he, k as me, de as qe, l as pe, df as Je, dg as Qe, dh as Ye, di as Ze, dj as et, dk as fe, dl as q, dm as tt } from "./index-BzQ2UBDI.js";
3
3
  import { jsx as t, jsxs as s, Fragment as O } from "react/jsx-runtime";
4
- import { V as at, E as st, a as rt, b as ot, L as nt, c as it, d as lt, C as dt, u as ct, e as ut } from "./use-create-flow-overlay-state-DgQupBfa.js";
5
- import { u as ve } from "./use-visual-utils-BA3-XR15.js";
4
+ import { V as at, E as st, a as rt, b as ot, L as nt, c as it, d as lt, C as dt, u as ct, e as ut } from "./use-create-flow-overlay-state-BvBTFIgX.js";
5
+ import { u as ve } from "./use-visual-utils-C2syL_qa.js";
6
6
  import { k as J } from "./date-formatter-vkCj9Ct-.js";
7
7
  /**
8
8
  * @license lucide-react v0.453.0 - ISC
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),a=require("./index-DVnK3_oU.js");require("react");require("react-dom");function i(){const o=a.useDashboardStore(e=>e.dashboard),r=a.useDashboardStore(e=>e.actions.setDashboard),t=a.useDashboardStore(e=>e.showDashboardJSON),n=a.useDashboardStore(e=>e.actions.setShowDashboardJSON);return s.jsxs("div",{className:a.cn("relative p-2",{hidden:!t}),children:[s.jsxs(a.Button,{variant:"secondary",size:"sm",className:"absolute right-2 top-2 z-10 h-8",onClick:()=>n(!1),children:[s.jsx(a.X,{className:"mr-2 h-4 w-4"}),"Close"]}),s.jsx(a.de,{onChange:e=>{if(e)try{JSON.parse(e),r(JSON.parse(e))}catch{}},defaultLanguage:"json",className:"h-[550px] overflow-y-auto",value:JSON.stringify(o,null,2),options:{minimap:{enabled:!1},glyphMargin:!1,wordWrap:"on",scrollbar:{verticalScrollbarSize:0,horizontalScrollbarSize:0},fontSize:12,renderLineHighlight:"none"}})]})}exports.default=i;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react/jsx-runtime"),a=require("./index-ZpmXTndp.js");require("react");require("react-dom");function i(){const o=a.useDashboardStore(e=>e.dashboard),r=a.useDashboardStore(e=>e.actions.setDashboard),t=a.useDashboardStore(e=>e.showDashboardJSON),n=a.useDashboardStore(e=>e.actions.setShowDashboardJSON);return s.jsxs("div",{className:a.cn("relative p-2",{hidden:!t}),children:[s.jsxs(a.Button,{variant:"secondary",size:"sm",className:"absolute right-2 top-2 z-10 h-8",onClick:()=>n(!1),children:[s.jsx(a.X,{className:"mr-2 h-4 w-4"}),"Close"]}),s.jsx(a.de,{onChange:e=>{if(e)try{JSON.parse(e),r(JSON.parse(e))}catch{}},defaultLanguage:"json",className:"h-[550px] overflow-y-auto",value:JSON.stringify(o,null,2),options:{minimap:{enabled:!1},glyphMargin:!1,wordWrap:"on",scrollbar:{verticalScrollbarSize:0,horizontalScrollbarSize:0},fontSize:12,renderLineHighlight:"none"}})]})}exports.default=i;
@@ -1,5 +1,5 @@
1
1
  import { jsxs as o, jsx as r } from "react/jsx-runtime";
2
- import { u as s, c as l, B as h, X as d, d as c } from "./index-BI7I65hX.js";
2
+ import { u as s, c as l, B as h, X as d, d as c } from "./index-BzQ2UBDI.js";
3
3
  import "react";
4
4
  import "react-dom";
5
5
  function N() {
@@ -1,6 +1,6 @@
1
1
  import { jsx as e, jsxs as a, Fragment as ce } from "react/jsx-runtime";
2
2
  import de, { useState as f, useCallback as j, useEffect as K, useMemo as F } from "react";
3
- import { b as ue, e as q, f as Y, g as Q, h as ee, i as ae, R, c as k, j as $, L as y, P as me, k as he, B as E, C as fe, l as pe, m as ve, n as be, o as Se, p as ge, q as V, r as G, s as X, t as ye, v as re, w as we, x as P, S as xe, y as Ne, z as Ce, A as ke, E as Te, F as Z, I as Ie } from "./index-BI7I65hX.js";
3
+ import { b as ue, e as q, f as Y, g as Q, h as ee, i as ae, R, c as k, j as $, L as y, P as me, k as he, B as E, C as fe, l as pe, m as ve, n as be, o as Se, p as ge, q as V, r as G, s as X, t as ye, v as re, w as we, x as P, S as xe, y as Ne, z as Ce, A as ke, E as Te, F as Z, I as Ie } from "./index-BzQ2UBDI.js";
4
4
  function Pe(s = {}) {
5
5
  var I, D, M, L;
6
6
  const { authToken: i, tokenProps: r } = ue(), S = s.enabled ?? !0, o = (i == null ? void 0 : i.accessToken) ?? null, h = (r == null ? void 0 : r.apiServiceUrl) ?? null, [N, w] = f(!1), [g, v] = f(!1), [u, n] = f(!1), [x, c] = f(null), [p, C] = f(null), A = p || {
@@ -473,6 +473,7 @@ function _e({
473
473
  /* @__PURE__ */ e(
474
474
  xe,
475
475
  {
476
+ size: "sm",
476
477
  id: "dashboard-summary-enabled",
477
478
  checked: h,
478
479
  disabled: o,
@@ -1 +1 @@
1
- "use strict";const e=require("react/jsx-runtime"),l=require("react"),a=require("./index-DVnK3_oU.js");function W(r={}){var C,I,P,D;const{authToken:o,tokenProps:s}=a.useSemaphorContext(),S=r.enabled??!0,d=(o==null?void 0:o.accessToken)??null,f=(s==null?void 0:s.apiServiceUrl)??null,[y,g]=l.useState(!1),[v,p]=l.useState(!1),[m,n]=l.useState(!1),[j,c]=l.useState(null),[x,w]=l.useState(null),k=x||{tz:((I=(C=s==null?void 0:s.params)==null?void 0:C.calendarContext)==null?void 0:I.tz)||null,weekStart:((D=(P=s==null?void 0:s.params)==null?void 0:P.calendarContext)==null?void 0:D.weekStart)??null},b=l.useCallback(async()=>{if(!(!S||!d||!f)){g(!0),c(null);try{const u=await fetch(`${f}/v1/user-preferences/calendar`,{method:"GET",headers:{Authorization:`Bearer ${d}`}});if(!u.ok){const h=await u.json().catch(()=>({}));throw new Error(h.error||"Failed to fetch preferences")}const i=await u.json();w({tz:i.tz,weekStart:i.weekStart,source:i.source,isInherited:i.isInherited,userHasPrefs:i.userHasPrefs,inherited:i.inherited})}catch(u){const i=u instanceof Error?u.message:"Unknown error";c(i)}finally{g(!1)}}},[d,f,S]);l.useEffect(()=>{S&&b()},[S,b]);const T=l.useCallback(async u=>{if(!d||!f)return c("Not authenticated"),!1;p(!0),c(null);try{const i=await fetch(`${f}/v1/user-preferences/calendar`,{method:"PATCH",headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`},body:JSON.stringify(u)});if(!i.ok){const h=await i.json().catch(()=>({}));throw new Error(h.error||"Failed to update preferences")}return await b(),!0}catch(i){const h=i instanceof Error?i.message:"Unknown error";return c(h),!1}finally{p(!1)}},[d,f,b]),N=l.useCallback(async()=>{if(!d||!f)return c("Not authenticated"),!1;n(!0),c(null);try{const u=await fetch(`${f}/v1/user-preferences/calendar`,{method:"DELETE",headers:{Authorization:`Bearer ${d}`}});if(!u.ok){const h=await u.json().catch(()=>({}));throw new Error(h.error||"Failed to clear preferences")}const i=await u.text();if(i)try{const h=JSON.parse(i);return w({tz:h.tz,weekStart:h.weekStart,source:h.source,isInherited:h.isInherited??!0,userHasPrefs:!1,inherited:h.inherited}),!0}catch{}return await b(),!0}catch(u){const i=u instanceof Error?u.message:"Unknown error";return c(i),!1}finally{n(!1)}},[d,f,b]);return{preferences:k,isLoading:y,isSaving:v,isClearing:m,error:j,updatePreferences:T,clearPreferences:N,refetch:b}}const A=[{value:"America/New_York",label:"Eastern Time (US & Canada)"},{value:"America/Chicago",label:"Central Time (US & Canada)"},{value:"America/Denver",label:"Mountain Time (US & Canada)"},{value:"America/Los_Angeles",label:"Pacific Time (US & Canada)"},{value:"America/Phoenix",label:"Arizona"},{value:"America/Anchorage",label:"Alaska"},{value:"Pacific/Honolulu",label:"Hawaii"},{value:"Europe/London",label:"London"},{value:"Europe/Paris",label:"Paris, Berlin, Rome"},{value:"Asia/Tokyo",label:"Tokyo"},{value:"Asia/Shanghai",label:"Beijing, Shanghai"},{value:"Asia/Kolkata",label:"Mumbai, New Delhi"},{value:"Australia/Sydney",label:"Sydney"},{value:"UTC",label:"UTC"}],H=[{value:0,label:"Sunday"},{value:1,label:"Monday"},{value:6,label:"Saturday"}];function G(){try{const r=Intl;if(r.supportedValuesOf)return r.supportedValuesOf("timeZone")}catch{}return A.map(r=>r.value)}function V(r){switch(r){case"tenant":return"tenant";case"organization":return"organization";case"system":return"system";default:return"default"}}function U(r){const o=A.find(s=>s.value===r);return o?o.label:r}function X(r){const o=H.find(s=>s.value===r);return o?o.label:String(r)}function q({open:r,onOpenChange:o}){var M,z,F;const{preferences:s,isLoading:S,isSaving:d,isClearing:f,updatePreferences:y,clearPreferences:g}=W({enabled:r}),v=s.tz||((M=s.inherited)==null?void 0:M.tz)||Intl.DateTimeFormat().resolvedOptions().timeZone,p=s.weekStart??((z=s.inherited)==null?void 0:z.weekStart)??1,[m,n]=l.useState(!s.userHasPrefs),[j,c]=l.useState(!1),[x,w]=l.useState(v),[k,b]=l.useState(p),[T,N]=l.useState(!1),C=l.useMemo(()=>G(),[]),I=l.useMemo(()=>C.filter(t=>!A.some(R=>R.value===t)),[C]),P=l.useMemo(()=>U(x),[x]),D=s.inherited?U(s.inherited.tz):"UTC",u=s.inherited?X(s.inherited.weekStart):"Monday",i=V((F=s.inherited)==null?void 0:F.source);l.useEffect(()=>{if(!r){c(!1);return}j||(s.userHasPrefs!==void 0&&n(!s.userHasPrefs),w(v),b(p))},[r,j,s.userHasPrefs,v,p]);const h=async()=>{if(S){a.ue.error("Preferences are still loading. Please try again.");return}m?await g()?(a.ue.success("Now using default settings. Please refresh the page to apply changes.",{duration:5e3}),o(!1)):a.ue.error("Failed to save preferences. Please try again."):await y({tz:x,weekStart:k})?(a.ue.success("Preferences saved. Please refresh the page to apply changes.",{duration:5e3}),o(!1)):a.ue.error("Failed to save preferences. Please try again.")},$=()=>{o(!1)},L=d||f,O=L||S;return e.jsx(a.Dialog,{open:r,onOpenChange:o,children:e.jsxs(a.DialogContent,{className:"sm:max-w-[425px]",children:[e.jsxs(a.DialogHeader,{children:[e.jsx(a.DialogTitle,{children:"Calendar Preferences"}),e.jsx(a.DialogDescription,{children:"Set your timezone and week start preferences for date calculations and displays."})]}),e.jsxs("div",{className:"space-y-6 py-4",children:[e.jsxs(a.RadioGroup,{value:m?"defaults":"custom",onValueChange:t=>{c(!0),n(t==="defaults")},className:"space-y-3",children:[e.jsxs("div",{className:a.cn("flex items-start space-x-3 rounded-lg border p-4 cursor-pointer transition-colors",m?"border-primary bg-primary/5":"border-border hover:border-muted-foreground/50"),onClick:()=>{c(!0),n(!0)},children:[e.jsx(a.RadioGroupItem,{value:"defaults",id:"mode-defaults"}),e.jsxs("div",{className:"flex-1 space-y-1",children:[e.jsxs(a.Label,{htmlFor:"mode-defaults",className:"cursor-pointer font-medium",children:["Use ",i," defaults"]}),e.jsxs("p",{className:"text-sm text-muted-foreground",children:[D,", Week starts ",u]})]})]}),e.jsxs("div",{className:a.cn("flex items-start space-x-3 rounded-lg border p-4 cursor-pointer transition-colors",m?"border-border hover:border-muted-foreground/50":"border-primary bg-primary/5"),onClick:()=>{c(!0),n(!1)},children:[e.jsx(a.RadioGroupItem,{value:"custom",id:"mode-custom"}),e.jsx(a.Label,{htmlFor:"mode-custom",className:"cursor-pointer font-medium",children:"Use custom settings"})]})]}),e.jsxs("div",{className:a.cn("space-y-6 transition-opacity",m&&"opacity-50 pointer-events-none"),children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(a.Label,{children:"Timezone"}),e.jsxs(a.Popover,{open:T,onOpenChange:N,modal:!0,children:[e.jsx(a.PopoverTrigger,{asChild:!0,children:e.jsxs(a.Button,{variant:"outline",role:"combobox","aria-expanded":T,className:"w-full justify-between",disabled:m,children:[P,e.jsx(a.ChevronsUpDown,{className:"ml-2 h-4 w-4 shrink-0 opacity-50"})]})}),e.jsx(a.PopoverContent,{className:"z-50 w-[--radix-popover-trigger-width] p-0",align:"start",children:e.jsxs(a.Command,{className:"overflow-visible",children:[e.jsx(a.CommandInput,{placeholder:"Search timezones..."}),e.jsxs(a.CommandList,{children:[e.jsx(a.CommandEmpty,{children:"No timezone found."}),e.jsx(a.CommandGroup,{heading:"Common",children:A.map(t=>e.jsxs(a.CommandItem,{value:`${t.value} ${t.label}`,onSelect:()=>{c(!0),w(t.value),N(!1)},children:[e.jsx(a.Check,{className:a.cn("mr-2 h-4 w-4",x===t.value?"opacity-100":"opacity-0")}),e.jsx("span",{className:"flex-1",children:t.label}),e.jsx("span",{className:"text-xs text-muted-foreground",children:t.value})]},t.value))}),e.jsx(a.CommandSeparator,{}),e.jsx(a.CommandGroup,{heading:"All Timezones",children:I.map(t=>e.jsxs(a.CommandItem,{value:t,onSelect:()=>{c(!0),w(t),N(!1)},children:[e.jsx(a.Check,{className:a.cn("mr-2 h-4 w-4",x===t?"opacity-100":"opacity-0")}),t]},t))})]})]})})]})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsx(a.Label,{children:"Week Starts On"}),e.jsx(a.RadioGroup,{value:String(k),onValueChange:t=>{c(!0),b(Number(t))},className:"flex gap-4",disabled:m,children:H.map(t=>e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx(a.RadioGroupItem,{value:String(t.value),id:`week-start-${t.value}`,disabled:m}),e.jsx(a.Label,{htmlFor:`week-start-${t.value}`,className:a.cn("cursor-pointer font-normal",m&&"cursor-not-allowed"),children:t.label})]},t.value))})]})]})]}),e.jsxs(a.DialogFooter,{children:[e.jsx(a.Button,{variant:"outline",onClick:$,disabled:L,children:"Cancel"}),e.jsx(a.Button,{onClick:h,disabled:O,children:L?e.jsxs(e.Fragment,{children:[e.jsx(a.LoaderCircle,{className:"mr-2 h-4 w-4 animate-spin"}),"Saving..."]}):"Save"})]})]})})}const E=6,B=1,_=20;function Z(r){return Number.isNaN(r)?E:Math.min(_,Math.max(B,r))}function J({open:r,onOpenChange:o,dashboard:s,onApply:S,disabled:d=!1}){const[f,y]=l.useState(!1),[g,v]=l.useState("top"),[p,m]=l.useState(String(E)),n=s.summary;l.useEffect(()=>{r&&(y((n==null?void 0:n.enabled)===!0),v((n==null?void 0:n.position)==="bottom"?"bottom":"top"),m(String((n==null?void 0:n.maxItems)??E)))},[r,n==null?void 0:n.enabled,n==null?void 0:n.position,n==null?void 0:n.maxItems]);const j=l.useMemo(()=>Z(Number.parseInt(p||`${E}`,10)),[p]),c=()=>{S({enabled:f,position:g,maxItems:j}),o(!1)};return e.jsx(a.Dialog,{open:r,onOpenChange:o,children:e.jsxs(a.DialogContent,{className:"sm:max-w-[420px]",children:[e.jsxs(a.DialogHeader,{children:[e.jsx(a.DialogTitle,{children:"Summary Settings"}),e.jsx(a.DialogDescription,{children:"Configure dashboard-level summary display. Card-level summary settings still control which cards contribute."})]}),e.jsxs("div",{className:"space-y-4 py-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(a.Label,{htmlFor:"dashboard-summary-enabled",children:"Enable Dashboard Summary"}),e.jsx(a.SmallSwitch,{id:"dashboard-summary-enabled",checked:f,disabled:d,onCheckedChange:y})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(a.Label,{htmlFor:"dashboard-summary-position",children:"Position"}),e.jsxs(a.Select,{value:g,disabled:d,onValueChange:x=>v(x),children:[e.jsx(a.SelectTrigger,{id:"dashboard-summary-position",children:e.jsx(a.SelectValue,{placeholder:"Select position"})}),e.jsxs(a.SelectContent,{children:[e.jsx(a.SelectItem,{value:"top",children:"Top"}),e.jsx(a.SelectItem,{value:"bottom",children:"Bottom"})]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(a.Label,{htmlFor:"dashboard-summary-max-items",children:"Max Items"}),e.jsx(a.Input,{id:"dashboard-summary-max-items",type:"number",min:B,max:_,disabled:d,value:p,onChange:x=>m(x.target.value),onBlur:()=>m(String(j))}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Display limit only. Computation is unchanged."})]}),d&&e.jsx("p",{className:"text-xs text-amber-700",children:"Enter dashboard edit mode to modify summary settings."})]}),e.jsxs(a.DialogFooter,{children:[e.jsx(a.Button,{variant:"outline",onClick:()=>o(!1),children:"Cancel"}),e.jsx(a.Button,{onClick:c,disabled:d,children:"Apply"})]})]})})}exports.CalendarPreferencesDialog=q;exports.DashboardSummarySettingsDialog=J;
1
+ "use strict";const e=require("react/jsx-runtime"),l=require("react"),a=require("./index-ZpmXTndp.js");function W(r={}){var C,I,P,D;const{authToken:o,tokenProps:s}=a.useSemaphorContext(),v=r.enabled??!0,d=(o==null?void 0:o.accessToken)??null,f=(s==null?void 0:s.apiServiceUrl)??null,[y,g]=l.useState(!1),[S,p]=l.useState(!1),[m,n]=l.useState(!1),[j,c]=l.useState(null),[x,w]=l.useState(null),k=x||{tz:((I=(C=s==null?void 0:s.params)==null?void 0:C.calendarContext)==null?void 0:I.tz)||null,weekStart:((D=(P=s==null?void 0:s.params)==null?void 0:P.calendarContext)==null?void 0:D.weekStart)??null},b=l.useCallback(async()=>{if(!(!v||!d||!f)){g(!0),c(null);try{const u=await fetch(`${f}/v1/user-preferences/calendar`,{method:"GET",headers:{Authorization:`Bearer ${d}`}});if(!u.ok){const h=await u.json().catch(()=>({}));throw new Error(h.error||"Failed to fetch preferences")}const i=await u.json();w({tz:i.tz,weekStart:i.weekStart,source:i.source,isInherited:i.isInherited,userHasPrefs:i.userHasPrefs,inherited:i.inherited})}catch(u){const i=u instanceof Error?u.message:"Unknown error";c(i)}finally{g(!1)}}},[d,f,v]);l.useEffect(()=>{v&&b()},[v,b]);const T=l.useCallback(async u=>{if(!d||!f)return c("Not authenticated"),!1;p(!0),c(null);try{const i=await fetch(`${f}/v1/user-preferences/calendar`,{method:"PATCH",headers:{"Content-Type":"application/json",Authorization:`Bearer ${d}`},body:JSON.stringify(u)});if(!i.ok){const h=await i.json().catch(()=>({}));throw new Error(h.error||"Failed to update preferences")}return await b(),!0}catch(i){const h=i instanceof Error?i.message:"Unknown error";return c(h),!1}finally{p(!1)}},[d,f,b]),N=l.useCallback(async()=>{if(!d||!f)return c("Not authenticated"),!1;n(!0),c(null);try{const u=await fetch(`${f}/v1/user-preferences/calendar`,{method:"DELETE",headers:{Authorization:`Bearer ${d}`}});if(!u.ok){const h=await u.json().catch(()=>({}));throw new Error(h.error||"Failed to clear preferences")}const i=await u.text();if(i)try{const h=JSON.parse(i);return w({tz:h.tz,weekStart:h.weekStart,source:h.source,isInherited:h.isInherited??!0,userHasPrefs:!1,inherited:h.inherited}),!0}catch{}return await b(),!0}catch(u){const i=u instanceof Error?u.message:"Unknown error";return c(i),!1}finally{n(!1)}},[d,f,b]);return{preferences:k,isLoading:y,isSaving:S,isClearing:m,error:j,updatePreferences:T,clearPreferences:N,refetch:b}}const A=[{value:"America/New_York",label:"Eastern Time (US & Canada)"},{value:"America/Chicago",label:"Central Time (US & Canada)"},{value:"America/Denver",label:"Mountain Time (US & Canada)"},{value:"America/Los_Angeles",label:"Pacific Time (US & Canada)"},{value:"America/Phoenix",label:"Arizona"},{value:"America/Anchorage",label:"Alaska"},{value:"Pacific/Honolulu",label:"Hawaii"},{value:"Europe/London",label:"London"},{value:"Europe/Paris",label:"Paris, Berlin, Rome"},{value:"Asia/Tokyo",label:"Tokyo"},{value:"Asia/Shanghai",label:"Beijing, Shanghai"},{value:"Asia/Kolkata",label:"Mumbai, New Delhi"},{value:"Australia/Sydney",label:"Sydney"},{value:"UTC",label:"UTC"}],H=[{value:0,label:"Sunday"},{value:1,label:"Monday"},{value:6,label:"Saturday"}];function G(){try{const r=Intl;if(r.supportedValuesOf)return r.supportedValuesOf("timeZone")}catch{}return A.map(r=>r.value)}function V(r){switch(r){case"tenant":return"tenant";case"organization":return"organization";case"system":return"system";default:return"default"}}function U(r){const o=A.find(s=>s.value===r);return o?o.label:r}function X(r){const o=H.find(s=>s.value===r);return o?o.label:String(r)}function q({open:r,onOpenChange:o}){var M,z,F;const{preferences:s,isLoading:v,isSaving:d,isClearing:f,updatePreferences:y,clearPreferences:g}=W({enabled:r}),S=s.tz||((M=s.inherited)==null?void 0:M.tz)||Intl.DateTimeFormat().resolvedOptions().timeZone,p=s.weekStart??((z=s.inherited)==null?void 0:z.weekStart)??1,[m,n]=l.useState(!s.userHasPrefs),[j,c]=l.useState(!1),[x,w]=l.useState(S),[k,b]=l.useState(p),[T,N]=l.useState(!1),C=l.useMemo(()=>G(),[]),I=l.useMemo(()=>C.filter(t=>!A.some(R=>R.value===t)),[C]),P=l.useMemo(()=>U(x),[x]),D=s.inherited?U(s.inherited.tz):"UTC",u=s.inherited?X(s.inherited.weekStart):"Monday",i=V((F=s.inherited)==null?void 0:F.source);l.useEffect(()=>{if(!r){c(!1);return}j||(s.userHasPrefs!==void 0&&n(!s.userHasPrefs),w(S),b(p))},[r,j,s.userHasPrefs,S,p]);const h=async()=>{if(v){a.ue.error("Preferences are still loading. Please try again.");return}m?await g()?(a.ue.success("Now using default settings. Please refresh the page to apply changes.",{duration:5e3}),o(!1)):a.ue.error("Failed to save preferences. Please try again."):await y({tz:x,weekStart:k})?(a.ue.success("Preferences saved. Please refresh the page to apply changes.",{duration:5e3}),o(!1)):a.ue.error("Failed to save preferences. Please try again.")},$=()=>{o(!1)},L=d||f,O=L||v;return e.jsx(a.Dialog,{open:r,onOpenChange:o,children:e.jsxs(a.DialogContent,{className:"sm:max-w-[425px]",children:[e.jsxs(a.DialogHeader,{children:[e.jsx(a.DialogTitle,{children:"Calendar Preferences"}),e.jsx(a.DialogDescription,{children:"Set your timezone and week start preferences for date calculations and displays."})]}),e.jsxs("div",{className:"space-y-6 py-4",children:[e.jsxs(a.RadioGroup,{value:m?"defaults":"custom",onValueChange:t=>{c(!0),n(t==="defaults")},className:"space-y-3",children:[e.jsxs("div",{className:a.cn("flex items-start space-x-3 rounded-lg border p-4 cursor-pointer transition-colors",m?"border-primary bg-primary/5":"border-border hover:border-muted-foreground/50"),onClick:()=>{c(!0),n(!0)},children:[e.jsx(a.RadioGroupItem,{value:"defaults",id:"mode-defaults"}),e.jsxs("div",{className:"flex-1 space-y-1",children:[e.jsxs(a.Label,{htmlFor:"mode-defaults",className:"cursor-pointer font-medium",children:["Use ",i," defaults"]}),e.jsxs("p",{className:"text-sm text-muted-foreground",children:[D,", Week starts ",u]})]})]}),e.jsxs("div",{className:a.cn("flex items-start space-x-3 rounded-lg border p-4 cursor-pointer transition-colors",m?"border-border hover:border-muted-foreground/50":"border-primary bg-primary/5"),onClick:()=>{c(!0),n(!1)},children:[e.jsx(a.RadioGroupItem,{value:"custom",id:"mode-custom"}),e.jsx(a.Label,{htmlFor:"mode-custom",className:"cursor-pointer font-medium",children:"Use custom settings"})]})]}),e.jsxs("div",{className:a.cn("space-y-6 transition-opacity",m&&"opacity-50 pointer-events-none"),children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(a.Label,{children:"Timezone"}),e.jsxs(a.Popover,{open:T,onOpenChange:N,modal:!0,children:[e.jsx(a.PopoverTrigger,{asChild:!0,children:e.jsxs(a.Button,{variant:"outline",role:"combobox","aria-expanded":T,className:"w-full justify-between",disabled:m,children:[P,e.jsx(a.ChevronsUpDown,{className:"ml-2 h-4 w-4 shrink-0 opacity-50"})]})}),e.jsx(a.PopoverContent,{className:"z-50 w-[--radix-popover-trigger-width] p-0",align:"start",children:e.jsxs(a.Command,{className:"overflow-visible",children:[e.jsx(a.CommandInput,{placeholder:"Search timezones..."}),e.jsxs(a.CommandList,{children:[e.jsx(a.CommandEmpty,{children:"No timezone found."}),e.jsx(a.CommandGroup,{heading:"Common",children:A.map(t=>e.jsxs(a.CommandItem,{value:`${t.value} ${t.label}`,onSelect:()=>{c(!0),w(t.value),N(!1)},children:[e.jsx(a.Check,{className:a.cn("mr-2 h-4 w-4",x===t.value?"opacity-100":"opacity-0")}),e.jsx("span",{className:"flex-1",children:t.label}),e.jsx("span",{className:"text-xs text-muted-foreground",children:t.value})]},t.value))}),e.jsx(a.CommandSeparator,{}),e.jsx(a.CommandGroup,{heading:"All Timezones",children:I.map(t=>e.jsxs(a.CommandItem,{value:t,onSelect:()=>{c(!0),w(t),N(!1)},children:[e.jsx(a.Check,{className:a.cn("mr-2 h-4 w-4",x===t?"opacity-100":"opacity-0")}),t]},t))})]})]})})]})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsx(a.Label,{children:"Week Starts On"}),e.jsx(a.RadioGroup,{value:String(k),onValueChange:t=>{c(!0),b(Number(t))},className:"flex gap-4",disabled:m,children:H.map(t=>e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx(a.RadioGroupItem,{value:String(t.value),id:`week-start-${t.value}`,disabled:m}),e.jsx(a.Label,{htmlFor:`week-start-${t.value}`,className:a.cn("cursor-pointer font-normal",m&&"cursor-not-allowed"),children:t.label})]},t.value))})]})]})]}),e.jsxs(a.DialogFooter,{children:[e.jsx(a.Button,{variant:"outline",onClick:$,disabled:L,children:"Cancel"}),e.jsx(a.Button,{onClick:h,disabled:O,children:L?e.jsxs(e.Fragment,{children:[e.jsx(a.LoaderCircle,{className:"mr-2 h-4 w-4 animate-spin"}),"Saving..."]}):"Save"})]})]})})}const E=6,B=1,_=20;function Z(r){return Number.isNaN(r)?E:Math.min(_,Math.max(B,r))}function J({open:r,onOpenChange:o,dashboard:s,onApply:v,disabled:d=!1}){const[f,y]=l.useState(!1),[g,S]=l.useState("top"),[p,m]=l.useState(String(E)),n=s.summary;l.useEffect(()=>{r&&(y((n==null?void 0:n.enabled)===!0),S((n==null?void 0:n.position)==="bottom"?"bottom":"top"),m(String((n==null?void 0:n.maxItems)??E)))},[r,n==null?void 0:n.enabled,n==null?void 0:n.position,n==null?void 0:n.maxItems]);const j=l.useMemo(()=>Z(Number.parseInt(p||`${E}`,10)),[p]),c=()=>{v({enabled:f,position:g,maxItems:j}),o(!1)};return e.jsx(a.Dialog,{open:r,onOpenChange:o,children:e.jsxs(a.DialogContent,{className:"sm:max-w-[420px]",children:[e.jsxs(a.DialogHeader,{children:[e.jsx(a.DialogTitle,{children:"Summary Settings"}),e.jsx(a.DialogDescription,{children:"Configure dashboard-level summary display. Card-level summary settings still control which cards contribute."})]}),e.jsxs("div",{className:"space-y-4 py-2",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(a.Label,{htmlFor:"dashboard-summary-enabled",children:"Enable Dashboard Summary"}),e.jsx(a.Switch,{size:"sm",id:"dashboard-summary-enabled",checked:f,disabled:d,onCheckedChange:y})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(a.Label,{htmlFor:"dashboard-summary-position",children:"Position"}),e.jsxs(a.Select,{value:g,disabled:d,onValueChange:x=>S(x),children:[e.jsx(a.SelectTrigger,{id:"dashboard-summary-position",children:e.jsx(a.SelectValue,{placeholder:"Select position"})}),e.jsxs(a.SelectContent,{children:[e.jsx(a.SelectItem,{value:"top",children:"Top"}),e.jsx(a.SelectItem,{value:"bottom",children:"Bottom"})]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsx(a.Label,{htmlFor:"dashboard-summary-max-items",children:"Max Items"}),e.jsx(a.Input,{id:"dashboard-summary-max-items",type:"number",min:B,max:_,disabled:d,value:p,onChange:x=>m(x.target.value),onBlur:()=>m(String(j))}),e.jsx("p",{className:"text-xs text-muted-foreground",children:"Display limit only. Computation is unchanged."})]}),d&&e.jsx("p",{className:"text-xs text-amber-700",children:"Enter dashboard edit mode to modify summary settings."})]}),e.jsxs(a.DialogFooter,{children:[e.jsx(a.Button,{variant:"outline",onClick:()=>o(!1),children:"Cancel"}),e.jsx(a.Button,{onClick:c,disabled:d,children:"Apply"})]})]})})}exports.CalendarPreferencesDialog=q;exports.DashboardSummarySettingsDialog=J;