@hienlh/ppm 0.13.44 → 0.13.46

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 (128) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/assets/skills/ppm/SKILL.md +1 -1
  3. package/assets/skills/ppm/references/http-api.md +1 -1
  4. package/dist/web/assets/ai-settings-section-Btix996C.js +2 -1
  5. package/dist/web/assets/ai-settings-section-Btix996C.js.map +1 -0
  6. package/dist/web/assets/api-client-DIhJ5qVW.js +2 -1
  7. package/dist/web/assets/api-client-DIhJ5qVW.js.map +1 -0
  8. package/dist/web/assets/api-settings-DnHv6JgF.js +2 -1
  9. package/dist/web/assets/api-settings-DnHv6JgF.js.map +1 -0
  10. package/dist/web/assets/arrow-up-Rcw6_KKu.js +2 -1
  11. package/dist/web/assets/arrow-up-Rcw6_KKu.js.map +1 -0
  12. package/dist/web/assets/{audio-preview-B6a1Djtr.js → audio-preview-DxMRYiEV.js} +2 -1
  13. package/dist/web/assets/audio-preview-DxMRYiEV.js.map +1 -0
  14. package/dist/web/assets/{chat-tab-Z5VNzYCz.js → chat-tab-BhBnSv7l.js} +5 -4
  15. package/dist/web/assets/chat-tab-BhBnSv7l.js.map +1 -0
  16. package/dist/web/assets/chevron-right-DnHIvvcy.js +2 -1
  17. package/dist/web/assets/chevron-right-DnHIvvcy.js.map +1 -0
  18. package/dist/web/assets/code-DGBecc50.js +2 -1
  19. package/dist/web/assets/code-DGBecc50.js.map +1 -0
  20. package/dist/web/assets/{code-editor-Clvs0e0Q.js → code-editor-xpj_wkR6.js} +4 -3
  21. package/dist/web/assets/code-editor-xpj_wkR6.js.map +1 -0
  22. package/dist/web/assets/{conflict-editor-B6nO1gln.js → conflict-editor-B2ZiP5jB.js} +3 -2
  23. package/dist/web/assets/conflict-editor-B2ZiP5jB.js.map +1 -0
  24. package/dist/web/assets/createLucideIcon-BjHrJDVb.js +2 -1
  25. package/dist/web/assets/createLucideIcon-BjHrJDVb.js.map +1 -0
  26. package/dist/web/assets/csv-parser-Dly5nqE1.js +2 -1
  27. package/dist/web/assets/csv-parser-Dly5nqE1.js.map +1 -0
  28. package/dist/web/assets/csv-preview-CsqFmPzb.js +2 -1
  29. package/dist/web/assets/csv-preview-CsqFmPzb.js.map +1 -0
  30. package/dist/web/assets/data-grid-overlay-editor-aTzJjALy.js +2 -1
  31. package/dist/web/assets/data-grid-overlay-editor-aTzJjALy.js.map +1 -0
  32. package/dist/web/assets/data-grid-types-BISkUXAY.js +2 -1
  33. package/dist/web/assets/data-grid-types-BISkUXAY.js.map +1 -0
  34. package/dist/web/assets/database-DOWH9-Vv.js +2 -1
  35. package/dist/web/assets/database-DOWH9-Vv.js.map +1 -0
  36. package/dist/web/assets/{database-viewer-Boup8MJ_.js → database-viewer-kLLaxFlG.js} +2 -1
  37. package/dist/web/assets/database-viewer-kLLaxFlG.js.map +1 -0
  38. package/dist/web/assets/{diff-viewer-Je2KYGME.js → diff-viewer-BDq46KKr.js} +3 -2
  39. package/dist/web/assets/diff-viewer-BDq46KKr.js.map +1 -0
  40. package/dist/web/assets/dist-B1I_4Jtc.js +2 -1
  41. package/dist/web/assets/dist-B1I_4Jtc.js.map +1 -0
  42. package/dist/web/assets/dist-CcDNqGjt.js +2 -1
  43. package/dist/web/assets/dist-CcDNqGjt.js.map +1 -0
  44. package/dist/web/assets/dist-wf2npcsG.js +2 -1
  45. package/dist/web/assets/dist-wf2npcsG.js.map +1 -0
  46. package/dist/web/assets/esm-UZtw2QcY.js +2 -1
  47. package/dist/web/assets/esm-UZtw2QcY.js.map +1 -0
  48. package/dist/web/assets/{extension-webview-T9TN70nb.js → extension-webview-CL0P7VTp.js} +3 -2
  49. package/dist/web/assets/extension-webview-CL0P7VTp.js.map +1 -0
  50. package/dist/web/assets/file-exclamation-point-BwzaQ50n.js +2 -1
  51. package/dist/web/assets/file-exclamation-point-BwzaQ50n.js.map +1 -0
  52. package/dist/web/assets/file-store-DOxcU_7s.js +2 -1
  53. package/dist/web/assets/file-store-DOxcU_7s.js.map +1 -0
  54. package/dist/web/assets/{glide-data-grid-CqT8WzTs.js → glide-data-grid-B4jpQtyq.js} +3 -2
  55. package/dist/web/assets/glide-data-grid-B4jpQtyq.js.map +1 -0
  56. package/dist/web/assets/{image-preview-DeNUcGI9.js → image-preview-DWS5nxo4.js} +2 -1
  57. package/dist/web/assets/image-preview-DWS5nxo4.js.map +1 -0
  58. package/dist/web/assets/{index-DJtqbPFT.js → index-uw3_0tuz.js} +4 -3
  59. package/dist/web/assets/index-uw3_0tuz.js.map +1 -0
  60. package/dist/web/assets/input-_LFQwhzd.js +2 -1
  61. package/dist/web/assets/input-_LFQwhzd.js.map +1 -0
  62. package/dist/web/assets/katex-Bqvo_ZG0.js +2 -1
  63. package/dist/web/assets/katex-Bqvo_ZG0.js.map +1 -0
  64. package/dist/web/assets/keybindings-store-CF1UVWPu.js +1 -0
  65. package/dist/web/assets/lib-Bu71-TFS.js +2 -1
  66. package/dist/web/assets/lib-Bu71-TFS.js.map +1 -0
  67. package/dist/web/assets/{markdown-renderer-CXPtICSx.js → markdown-renderer-CDMdfyg_.js} +3 -2
  68. package/dist/web/assets/markdown-renderer-CDMdfyg_.js.map +1 -0
  69. package/dist/web/assets/notification-store-DkD9Jciv.js +1 -0
  70. package/dist/web/assets/number-overlay-editor-CewUR5pB.js +2 -1
  71. package/dist/web/assets/number-overlay-editor-CewUR5pB.js.map +1 -0
  72. package/dist/web/assets/{pdf-preview-DI2JU2Lm.js → pdf-preview-BX_bMYi6.js} +2 -1
  73. package/dist/web/assets/pdf-preview-BX_bMYi6.js.map +1 -0
  74. package/dist/web/assets/{port-forwarding-tab-Cuv_37LW.js → port-forwarding-tab-Dg52V5Ib.js} +2 -1
  75. package/dist/web/assets/port-forwarding-tab-Dg52V5Ib.js.map +1 -0
  76. package/dist/web/assets/{postgres-viewer-D76ygOZo.js → postgres-viewer-kpN4j_KO.js} +3 -2
  77. package/dist/web/assets/postgres-viewer-kpN4j_KO.js.map +1 -0
  78. package/dist/web/assets/react-DMIOAtcX.js +2 -1
  79. package/dist/web/assets/react-DMIOAtcX.js.map +1 -0
  80. package/dist/web/assets/refresh-cw-BjrAbUJe.js +2 -1
  81. package/dist/web/assets/refresh-cw-BjrAbUJe.js.map +1 -0
  82. package/dist/web/assets/scroll-area-BDi_FNzr.js +2 -1
  83. package/dist/web/assets/scroll-area-BDi_FNzr.js.map +1 -0
  84. package/dist/web/assets/search-tM8K5zWU.js +2 -1
  85. package/dist/web/assets/search-tM8K5zWU.js.map +1 -0
  86. package/dist/web/assets/settings-store-CVrIYYCB.js +2 -1
  87. package/dist/web/assets/settings-store-CVrIYYCB.js.map +1 -0
  88. package/dist/web/assets/{settings-tab-DXn2OnPA.js → settings-tab-qpJTWk-6.js} +1 -1
  89. package/dist/web/assets/sparkles-CulWHe4c.js +2 -1
  90. package/dist/web/assets/sparkles-CulWHe4c.js.map +1 -0
  91. package/dist/web/assets/{sql-query-editor-lSlKMPlG.js → sql-query-editor-B757BARc.js} +3 -2
  92. package/dist/web/assets/sql-query-editor-B757BARc.js.map +1 -0
  93. package/dist/web/assets/{sqlite-viewer-DwTatNwI.js → sqlite-viewer-Ct7Q2GeF.js} +2 -1
  94. package/dist/web/assets/sqlite-viewer-Ct7Q2GeF.js.map +1 -0
  95. package/dist/web/assets/tab-store-S9w6U5gm.js +2 -1
  96. package/dist/web/assets/tab-store-S9w6U5gm.js.map +1 -0
  97. package/dist/web/assets/table-BzjWcs87.js +2 -1
  98. package/dist/web/assets/table-BzjWcs87.js.map +1 -0
  99. package/dist/web/assets/{terminal-tab-XKe1TZiV.js → terminal-tab-Dz_fCsTu.js} +2 -1
  100. package/dist/web/assets/terminal-tab-Dz_fCsTu.js.map +1 -0
  101. package/dist/web/assets/text-wrap-DJz9Bgpa.js +2 -1
  102. package/dist/web/assets/text-wrap-DJz9Bgpa.js.map +1 -0
  103. package/dist/web/assets/use-blob-url-QX-XajU8.js +2 -1
  104. package/dist/web/assets/use-blob-url-QX-XajU8.js.map +1 -0
  105. package/dist/web/assets/use-monaco-theme-BePWbY58.js +2 -1
  106. package/dist/web/assets/use-monaco-theme-BePWbY58.js.map +1 -0
  107. package/dist/web/assets/utils-CQux7CsO.js +2 -1
  108. package/dist/web/assets/utils-CQux7CsO.js.map +1 -0
  109. package/dist/web/assets/vendor-markdown-0Mxgxy0L.js +2 -1
  110. package/dist/web/assets/vendor-markdown-0Mxgxy0L.js.map +1 -0
  111. package/dist/web/assets/vendor-mermaid-Cl50p6TB.js +2 -1
  112. package/dist/web/assets/vendor-mermaid-Cl50p6TB.js.map +1 -0
  113. package/dist/web/assets/vendor-ui-UXCWAcmi.js +2 -1
  114. package/dist/web/assets/vendor-ui-UXCWAcmi.js.map +1 -0
  115. package/dist/web/assets/vendor-xterm-K3_Xwigj.js +2 -1
  116. package/dist/web/assets/vendor-xterm-K3_Xwigj.js.map +1 -0
  117. package/dist/web/assets/{video-preview-wHVbAYar.js → video-preview-lB315e7y.js} +2 -1
  118. package/dist/web/assets/video-preview-lB315e7y.js.map +1 -0
  119. package/dist/web/assets/x-BPReZWnP.js +2 -1
  120. package/dist/web/assets/x-BPReZWnP.js.map +1 -0
  121. package/dist/web/index.html +1 -1
  122. package/dist/web/sw.js +2 -1
  123. package/dist/web/sw.js.map +1 -0
  124. package/package.json +1 -1
  125. package/src/web/components/chat/message-list.tsx +3 -3
  126. package/vite.config.ts +1 -0
  127. package/dist/web/assets/keybindings-store-DChqpL1V.js +0 -1
  128. package/dist/web/assets/notification-store-Dn9zySnl.js +0 -1
@@ -1,3 +1,4 @@
1
- import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{b as t,x as n}from"./vendor-markdown-0Mxgxy0L.js";import{r}from"./api-client-DIhJ5qVW.js";import{G as i,w as a}from"./index-DJtqbPFT.js";var o=e(n(),1),s=t(),c=`<script>
1
+ import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{b as t,x as n}from"./vendor-markdown-0Mxgxy0L.js";import{r}from"./api-client-DIhJ5qVW.js";import{G as i,w as a}from"./index-uw3_0tuz.js";var o=e(n(),1),s=t(),c=`<script>
2
2
  function acquireVsCodeApi(){return{postMessage:function(m){window.parent.postMessage(m,"*")},getState:function(){try{return JSON.parse(sessionStorage.getItem("vscode-state")||"null")}catch{return null}},setState:function(s){sessionStorage.setItem("vscode-state",JSON.stringify(s));return s}}}
3
- <\/script>`;function l(e){if(!e)return e;let t=e.indexOf(`<head>`);return t===-1?c+e:e.slice(0,t+6)+c+e.slice(t+6)}function u({metadata:e}){let t=e?.panelId,n=e?.viewType,c=e?.projectName||void 0,[u,d]=(0,o.useState)(!1),f=a(e=>e.contributions!==null),p=a(e=>{if(t&&e.webviewPanels[t])return e.webviewPanels[t];if(n){let t=n.includes(`.`)?n:`${n}.view`;return Object.values(e.webviewPanels).find(e=>e.viewType===n||e.viewType===t)}}),m=p?.id??t,h=(0,o.useRef)(null),g=p?.html??``,_=l(g),v=(0,o.useRef)(null);(0,o.useEffect)(()=>{if(p||!n||!f||c&&c===v.current)return;c&&(v.current=c);let e=n.includes(`.`)?n:`${n}.view`,t=!1;async function i(){let n=[];if(c)try{let e=r(),t=(await(await fetch(`/api/projects`,e?{headers:{Authorization:`Bearer ${e}`}}:{})).json()).data?.find(e=>e.name===c);t&&(n=[t.path])}catch{}t||window.dispatchEvent(new CustomEvent(`ext:command:execute`,{detail:{command:e,args:n}}))}return i(),()=>{t=!0}},[p,n,c,f]);let y=e?.extensionId,b=a(e=>{if(y&&e.activationErrors[y])return e.activationErrors[y];if(n){for(let[t,r]of Object.entries(e.activationErrors))if(t===`ext-${n}`)return r}}),x=(0,o.useCallback)(()=>{if(d(!1),!n)return;let e=n.includes(`.`)?n:`${n}.view`;(async()=>{try{let t=r(),n=(await(await fetch(`/api/projects`,t?{headers:{Authorization:`Bearer ${t}`}}:{})).json()).data?.find(e=>e.name===c),i=n?[n.path]:[];window.dispatchEvent(new CustomEvent(`ext:command:execute`,{detail:{command:e,args:i}}))}catch{}})()},[n,c]),S=(0,o.useRef)(null),C=(0,o.useRef)(n);return(0,o.useEffect)(()=>{S.current=m??null},[m]),(0,o.useEffect)(()=>{C.current=n},[n]),(0,o.useEffect)(()=>()=>{let e=S.current;if(e){let t=C.current;a.getState().removeWebviewPanel(e),window.dispatchEvent(new CustomEvent(`ext:webview:close`,{detail:{panelId:e,viewType:t}}))}},[]),(0,o.useEffect)(()=>{if(p){d(!1);return}if(!f||!n)return;let e=0,t=setInterval(()=>{if(e++,e>3){clearInterval(t),d(!0);return}x()},2e3);return()=>clearInterval(t)},[p,f,n,x]),(0,o.useEffect)(()=>{if(!m)return;let e=e=>{h.current&&e.source===h.current.contentWindow&&window.dispatchEvent(new CustomEvent(`ext:webview:send`,{detail:{panelId:m,message:e.data}}))};return window.addEventListener(`message`,e),()=>window.removeEventListener(`message`,e)},[m]),(0,o.useEffect)(()=>{if(!m)return;let e=e=>{let{panelId:t,message:n}=e.detail;t===m&&h.current?.contentWindow?.postMessage(n,`*`)};return window.addEventListener(`ext:webview:message`,e),()=>window.removeEventListener(`ext:webview:message`,e)},[m]),!p||!g?(0,s.jsx)(`div`,{className:`flex flex-col items-center justify-center h-full gap-3 text-sm text-text-subtle`,children:u?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(`span`,{className:`text-destructive font-medium`,children:`Extension failed to load`}),b&&(0,s.jsx)(`span`,{className:`text-xs text-muted-foreground max-w-md text-center`,children:b}),(0,s.jsx)(`button`,{onClick:x,className:`text-xs text-primary hover:underline`,children:`Retry`})]}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i,{className:`size-5 animate-spin`}),(0,s.jsx)(`span`,{children:`Loading extension...`})]})}):(0,s.jsx)(`div`,{className:`h-full w-full relative`,children:(0,s.jsx)(`iframe`,{ref:h,srcDoc:_,sandbox:`allow-scripts`,className:`w-full h-full border-0 bg-white dark:bg-zinc-900`,title:p.title},m)})}export{u as ExtensionWebview};
3
+ <\/script>`;function l(e){if(!e)return e;let t=e.indexOf(`<head>`);return t===-1?c+e:e.slice(0,t+6)+c+e.slice(t+6)}function u({metadata:e}){let t=e?.panelId,n=e?.viewType,c=e?.projectName||void 0,[u,d]=(0,o.useState)(!1),f=a(e=>e.contributions!==null),p=a(e=>{if(t&&e.webviewPanels[t])return e.webviewPanels[t];if(n){let t=n.includes(`.`)?n:`${n}.view`;return Object.values(e.webviewPanels).find(e=>e.viewType===n||e.viewType===t)}}),m=p?.id??t,h=(0,o.useRef)(null),g=p?.html??``,_=l(g),v=(0,o.useRef)(null);(0,o.useEffect)(()=>{if(p||!n||!f||c&&c===v.current)return;c&&(v.current=c);let e=n.includes(`.`)?n:`${n}.view`,t=!1;async function i(){let n=[];if(c)try{let e=r(),t=(await(await fetch(`/api/projects`,e?{headers:{Authorization:`Bearer ${e}`}}:{})).json()).data?.find(e=>e.name===c);t&&(n=[t.path])}catch{}t||window.dispatchEvent(new CustomEvent(`ext:command:execute`,{detail:{command:e,args:n}}))}return i(),()=>{t=!0}},[p,n,c,f]);let y=e?.extensionId,b=a(e=>{if(y&&e.activationErrors[y])return e.activationErrors[y];if(n){for(let[t,r]of Object.entries(e.activationErrors))if(t===`ext-${n}`)return r}}),x=(0,o.useCallback)(()=>{if(d(!1),!n)return;let e=n.includes(`.`)?n:`${n}.view`;(async()=>{try{let t=r(),n=(await(await fetch(`/api/projects`,t?{headers:{Authorization:`Bearer ${t}`}}:{})).json()).data?.find(e=>e.name===c),i=n?[n.path]:[];window.dispatchEvent(new CustomEvent(`ext:command:execute`,{detail:{command:e,args:i}}))}catch{}})()},[n,c]),S=(0,o.useRef)(null),C=(0,o.useRef)(n);return(0,o.useEffect)(()=>{S.current=m??null},[m]),(0,o.useEffect)(()=>{C.current=n},[n]),(0,o.useEffect)(()=>()=>{let e=S.current;if(e){let t=C.current;a.getState().removeWebviewPanel(e),window.dispatchEvent(new CustomEvent(`ext:webview:close`,{detail:{panelId:e,viewType:t}}))}},[]),(0,o.useEffect)(()=>{if(p){d(!1);return}if(!f||!n)return;let e=0,t=setInterval(()=>{if(e++,e>3){clearInterval(t),d(!0);return}x()},2e3);return()=>clearInterval(t)},[p,f,n,x]),(0,o.useEffect)(()=>{if(!m)return;let e=e=>{h.current&&e.source===h.current.contentWindow&&window.dispatchEvent(new CustomEvent(`ext:webview:send`,{detail:{panelId:m,message:e.data}}))};return window.addEventListener(`message`,e),()=>window.removeEventListener(`message`,e)},[m]),(0,o.useEffect)(()=>{if(!m)return;let e=e=>{let{panelId:t,message:n}=e.detail;t===m&&h.current?.contentWindow?.postMessage(n,`*`)};return window.addEventListener(`ext:webview:message`,e),()=>window.removeEventListener(`ext:webview:message`,e)},[m]),!p||!g?(0,s.jsx)(`div`,{className:`flex flex-col items-center justify-center h-full gap-3 text-sm text-text-subtle`,children:u?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(`span`,{className:`text-destructive font-medium`,children:`Extension failed to load`}),b&&(0,s.jsx)(`span`,{className:`text-xs text-muted-foreground max-w-md text-center`,children:b}),(0,s.jsx)(`button`,{onClick:x,className:`text-xs text-primary hover:underline`,children:`Retry`})]}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(i,{className:`size-5 animate-spin`}),(0,s.jsx)(`span`,{children:`Loading extension...`})]})}):(0,s.jsx)(`div`,{className:`h-full w-full relative`,children:(0,s.jsx)(`iframe`,{ref:h,srcDoc:_,sandbox:`allow-scripts`,className:`w-full h-full border-0 bg-white dark:bg-zinc-900`,title:p.title},m)})}export{u as ExtensionWebview};
4
+ //# sourceMappingURL=extension-webview-CL0P7VTp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension-webview-CL0P7VTp.js","names":[],"sources":["../../../src/web/components/extensions/extension-webview.tsx"],"sourcesContent":["import { useRef, useEffect, useState, useCallback } from \"react\";\nimport { useExtensionStore } from \"@/stores/extension-store\";\nimport { getAuthToken } from \"@/lib/api-client\";\nimport { Loader2 } from \"lucide-react\";\n\n/** Inject acquireVsCodeApi() shim so extension webviews can postMessage to parent */\nconst VSCODE_API_SHIM = `<script>\nfunction acquireVsCodeApi(){return{postMessage:function(m){window.parent.postMessage(m,\"*\")},getState:function(){try{return JSON.parse(sessionStorage.getItem(\"vscode-state\")||\"null\")}catch{return null}},setState:function(s){sessionStorage.setItem(\"vscode-state\",JSON.stringify(s));return s}}}\n</script>`;\n\nfunction injectVscodeApiShim(html: string): string {\n if (!html) return html;\n // Insert shim right after <head> tag (or at start if no <head>)\n const headIdx = html.indexOf(\"<head>\");\n if (headIdx !== -1) {\n return html.slice(0, headIdx + 6) + VSCODE_API_SHIM + html.slice(headIdx + 6);\n }\n return VSCODE_API_SHIM + html;\n}\n\ninterface ExtensionWebviewProps {\n metadata?: Record<string, unknown>;\n}\n\n/**\n * iframe-based webview container for extension-contributed webview panels.\n * Matches panel by panelId (direct) or viewType (reload recovery).\n */\nexport function ExtensionWebview({ metadata }: ExtensionWebviewProps) {\n const panelId = metadata?.panelId as string | undefined;\n const viewType = metadata?.viewType as string | undefined;\n // Use the tab's own project name (frozen at creation time) — NOT the global\n // currentProject. Old project's ExtensionWebview must not react to project\n // switches, which would dispatch commands for the wrong project.\n const projectName = (metadata?.projectName as string | undefined) || undefined;\n const [timedOut, setTimedOut] = useState(false);\n // Track whether extensions are activated (contributions received from WS)\n const extensionsReady = useExtensionStore((s) => s.contributions !== null);\n\n // Match panel: prefer panelId (exact), fallback to viewType match (reload recovery)\n const panel = useExtensionStore((s) => {\n if (panelId && s.webviewPanels[panelId]) return s.webviewPanels[panelId];\n if (viewType) {\n // Find panel whose viewType matches (with or without .view suffix)\n const fullViewType = viewType.includes(\".\") ? viewType : `${viewType}.view`;\n return Object.values(s.webviewPanels).find(\n (p) => p.viewType === viewType || p.viewType === fullViewType,\n );\n }\n return undefined;\n });\n\n const resolvedPanelId = panel?.id ?? panelId;\n const iframeRef = useRef<HTMLIFrameElement>(null);\n\n // Inject acquireVsCodeApi shim + write HTML into iframe via srcdoc\n const rawHtml = panel?.html ?? \"\";\n const html = injectVscodeApiShim(rawHtml);\n\n // Track which project was last dispatched to prevent duplicate dispatches\n const prevProjectRef = useRef<string | null>(null);\n\n // On reload: resolve project path and dispatch command once.\n // Wait for extensions to be activated (contributions received) before dispatching.\n useEffect(() => {\n if (panel || !viewType || !extensionsReady) return;\n // Already dispatched for this project — panel is just temporarily missing\n if (projectName && projectName === prevProjectRef.current) return;\n if (projectName) prevProjectRef.current = projectName;\n const command = viewType.includes(\".\") ? viewType : `${viewType}.view`;\n let cancelled = false;\n\n async function dispatch() {\n let args: unknown[] = [];\n if (projectName) {\n try {\n const token = getAuthToken();\n const res = await fetch(\"/api/projects\", token ? { headers: { Authorization: `Bearer ${token}` } } : {});\n const json = await res.json() as { ok: boolean; data?: { name: string; path: string }[] };\n const match = json.data?.find((p) => p.name === projectName);\n if (match) args = [match.path];\n } catch {}\n }\n if (cancelled) return;\n window.dispatchEvent(new CustomEvent(\"ext:command:execute\", {\n detail: { command, args },\n }));\n }\n\n dispatch();\n return () => { cancelled = true; };\n }, [panel, viewType, projectName, extensionsReady]);\n\n // Check activation errors for this extension\n const extensionId = metadata?.extensionId as string | undefined;\n const activationError = useExtensionStore((s) => {\n // Direct match by extensionId (most reliable)\n if (extensionId && s.activationErrors[extensionId]) return s.activationErrors[extensionId];\n // Fallback: check by viewType prefix (e.g. \"ext-git-graph\" for viewType \"git-graph\")\n if (!viewType) return undefined;\n for (const [extId, error] of Object.entries(s.activationErrors)) {\n if (extId === `ext-${viewType}`) return error;\n }\n return undefined;\n });\n\n // Retry handler — re-dispatches the command\n const handleRetry = useCallback(() => {\n setTimedOut(false);\n if (!viewType) return;\n const command = viewType.includes(\".\") ? viewType : `${viewType}.view`;\n (async () => {\n try {\n const token = getAuthToken();\n const res = await fetch(\"/api/projects\", token ? { headers: { Authorization: `Bearer ${token}` } } : {});\n const json = await res.json() as { ok: boolean; data?: { name: string; path: string }[] };\n const match = json.data?.find((p) => p.name === projectName);\n const args = match ? [match.path] : [];\n window.dispatchEvent(new CustomEvent(\"ext:command:execute\", {\n detail: { command, args },\n }));\n } catch {}\n })();\n }, [viewType, projectName]);\n\n // On unmount: notify server to dispose the panel so extension clears activePanel state\n const panelIdForCleanup = useRef<string | null>(null);\n const viewTypeForCleanup = useRef<string | undefined>(viewType);\n useEffect(() => {\n panelIdForCleanup.current = resolvedPanelId ?? null;\n }, [resolvedPanelId]);\n useEffect(() => {\n viewTypeForCleanup.current = viewType;\n }, [viewType]);\n useEffect(() => {\n return () => {\n const id = panelIdForCleanup.current;\n if (id) {\n const vt = viewTypeForCleanup.current;\n useExtensionStore.getState().removeWebviewPanel(id);\n window.dispatchEvent(new CustomEvent(\"ext:webview:close\", { detail: { panelId: id, viewType: vt } }));\n }\n };\n }, []);\n\n // Auto-retry: if panel doesn't appear after extensions are ready,\n // re-dispatch the command every 2s (up to 3 times) before showing error.\n // This handles transient WS instability during initial page load where the\n // first command dispatch may be lost due to connection cycling.\n useEffect(() => {\n if (panel) { setTimedOut(false); return; }\n if (!extensionsReady || !viewType) return;\n let retries = 0;\n const id = setInterval(() => {\n retries++;\n if (retries > 3) {\n clearInterval(id);\n setTimedOut(true);\n return;\n }\n handleRetry();\n }, 2_000);\n return () => clearInterval(id);\n }, [panel, extensionsReady, viewType, handleRetry]);\n\n // Listen for postMessage from iframe → forward to extension via WS bridge\n useEffect(() => {\n if (!resolvedPanelId) return;\n const handler = (event: MessageEvent) => {\n if (iframeRef.current && event.source === iframeRef.current.contentWindow) {\n window.dispatchEvent(new CustomEvent(\"ext:webview:send\", {\n detail: { panelId: resolvedPanelId, message: event.data },\n }));\n }\n };\n window.addEventListener(\"message\", handler);\n return () => window.removeEventListener(\"message\", handler);\n }, [resolvedPanelId]);\n\n // Listen for server→webview messages (dispatched by useExtensionWs)\n useEffect(() => {\n if (!resolvedPanelId) return;\n const handler = (e: Event) => {\n const { panelId: targetId, message } = (e as CustomEvent).detail;\n if (targetId === resolvedPanelId) {\n iframeRef.current?.contentWindow?.postMessage(message, \"*\");\n }\n };\n window.addEventListener(\"ext:webview:message\", handler);\n return () => window.removeEventListener(\"ext:webview:message\", handler);\n }, [resolvedPanelId]);\n\n // Loading state — waiting for extension to create the panel AND deliver HTML.\n // We must wait for HTML before mounting the iframe because browsers don't\n // re-execute scripts when React updates the srcDoc attribute from \"\" to content.\n if (!panel || !rawHtml) {\n return (\n <div className=\"flex flex-col items-center justify-center h-full gap-3 text-sm text-text-subtle\">\n {timedOut ? (\n <>\n <span className=\"text-destructive font-medium\">Extension failed to load</span>\n {activationError && (\n <span className=\"text-xs text-muted-foreground max-w-md text-center\">{activationError}</span>\n )}\n <button\n onClick={handleRetry}\n className=\"text-xs text-primary hover:underline\"\n >\n Retry\n </button>\n </>\n ) : (\n <>\n <Loader2 className=\"size-5 animate-spin\" />\n <span>Loading extension...</span>\n </>\n )}\n </div>\n );\n }\n\n return (\n <div className=\"h-full w-full relative\">\n <iframe\n ref={iframeRef}\n key={resolvedPanelId}\n srcDoc={html}\n sandbox=\"allow-scripts\"\n className=\"w-full h-full border-0 bg-white dark:bg-zinc-900\"\n title={panel.title}\n />\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1 +1,2 @@
1
- import{t as e}from"./createLucideIcon-BjHrJDVb.js";var t=e(`file-exclamation-point`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]);export{t};
1
+ import{t as e}from"./createLucideIcon-BjHrJDVb.js";var t=e(`file-exclamation-point`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]);export{t};
2
+ //# sourceMappingURL=file-exclamation-point-BwzaQ50n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-exclamation-point-BwzaQ50n.js","names":[],"sources":["../../../node_modules/.bun/lucide-react@0.577.0+b1ab299f0a400331/node_modules/lucide-react/dist/esm/icons/file-exclamation-point.js"],"sourcesContent":["/**\n * @license lucide-react v0.577.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\n \"path\",\n {\n d: \"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z\",\n key: \"1oefj6\"\n }\n ],\n [\"path\", { d: \"M12 9v4\", key: \"juzpu7\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n];\nconst FileExclamationPoint = createLucideIcon(\"file-exclamation-point\", __iconNode);\n\nexport { __iconNode, FileExclamationPoint as default };\n//# sourceMappingURL=file-exclamation-point.js.map\n"],"x_google_ignoreList":[0],"mappings":"mDAoBA,IAAM,EAAuB,EAAiB,yBAX3B,CACjB,CACE,OACA,CACE,EAAG,iHACH,IAAK,SACN,CACF,CACD,CAAC,OAAQ,CAAE,EAAG,UAAW,IAAK,SAAU,CAAC,CACzC,CAAC,OAAQ,CAAE,EAAG,aAAc,IAAK,SAAU,CAAC,CAC7C,CACkF"}
@@ -1 +1,2 @@
1
- import{t as e}from"./react-DMIOAtcX.js";import{i as t,t as n}from"./api-client-DIhJ5qVW.js";var r=`ppm-custom-order`;function i(){try{let e=localStorage.getItem(r);return e?JSON.parse(e):null}catch{return null}}function a(e){try{localStorage.setItem(r,JSON.stringify(e))}catch{}}function o(e,t){if(!t)return[...e];let n=new Map(t.map((e,t)=>[e,t]));return[...e].sort((e,t)=>(n.get(e.name)??1/0)-(n.get(t.name)??1/0))}var s=e((e,t)=>({projects:[],activeProject:null,customOrder:i(),loading:!1,error:null,fetchProjects:async()=>{e({loading:!0,error:null});try{e({projects:await n.get(`/api/projects`),loading:!1})}catch(t){e({error:t instanceof Error?t.message:`Failed to fetch projects`,loading:!1})}},setActiveProject:t=>{e({activeProject:t})},addProject:async(r,i)=>{let a=await n.post(`/api/projects`,{path:r,name:i});await t().fetchProjects();let o=t().projects.find(e=>e.name===(i??a.name)||e.path===r);return o&&e({activeProject:o}),a},setProjectColor:async(e,r)=>{await n.patch(`/api/projects/${encodeURIComponent(e)}/color`,{color:r}),await t().fetchProjects()},moveProject:async(r,i)=>{let{projects:s,customOrder:c}=t(),l=o(s,c),u=l.findIndex(e=>e.name===r);if(u===-1)return;let d=i===`up`?u-1:u+1;if(d<0||d>=l.length)return;let f=l.map(e=>e.name);[f[u],f[d]]=[f[d],f[u]],a(f),await n.patch(`/api/projects/reorder`,{order:f}),e({customOrder:f})},reorderProjects:async t=>{a(t),e({customOrder:t}),await n.patch(`/api/projects/reorder`,{order:t}).catch(()=>{})},renameProject:async(e,r)=>{await n.patch(`/api/projects/${encodeURIComponent(e)}`,{name:r}),await t().fetchProjects()},deleteProject:async t=>{await n.del(`/api/projects/${encodeURIComponent(t)}`),e(e=>{let n=e.projects.filter(e=>e.name!==t),r=e.customOrder?e.customOrder.filter(e=>e!==t):null;return r&&a(r),{projects:n,customOrder:r,activeProject:e.activeProject?.name===t?n[0]??null:e.activeProject}})}}));function c(e,t){return e.map(e=>({name:e.name,path:t?`${t}/${e.name}`:e.name,type:e.type,ignored:e.isIgnored}))}function l(e,t,n){return t?e.map(e=>u(e,t,n)):n.map(t=>{let n=e.find(e=>e.path===t.path);return n?{...t,children:n.children}:t})}function u(e,t,n){if(e.path===t){let t=n.map(t=>{let n=e.children?.find(e=>e.path===t.path);return n?{...t,children:n.children}:t});return{...e,children:t}}return e.children&&t.startsWith(e.path+`/`)?{...e,children:e.children.map(e=>u(e,t,n))}:e}var d=e((e,r)=>({tree:[],fileIndex:[],loading:!1,error:null,expandedPaths:new Set,loadedPaths:new Set,inflight:new Map,indexStatus:`idle`,selectedFiles:[],inlineAction:null,clipboard:null,focusedPath:null,setInlineAction:t=>e({inlineAction:t}),clearInlineAction:()=>e({inlineAction:null}),setClipboard:t=>e({clipboard:t}),setFocusedPath:t=>e({focusedPath:t}),loadRoot:async i=>{e({loading:!0,error:null});try{let a=c(await n.get(`${t(i)}/files/list?path=`),``),o=new Set(r().loadedPaths);o.add(``),e({tree:a,loading:!1,loadedPaths:o})}catch(t){e({error:t instanceof Error?t.message:`Failed to load files`,loading:!1})}},loadChildren:async(i,a)=>{let o=r();if(o.loadedPaths.has(a))return;let s=o.inflight.get(a);s&&s.abort();let u=new AbortController,d=new Map(o.inflight);d.set(a,u),e({inflight:d});try{let o=encodeURIComponent(a),s=await n.get(`${t(i)}/files/list?path=${o}`,{signal:u.signal});if(u.signal.aborted)return;let d=c(s,a),f=r(),p=l(f.tree,a,d),m=new Set(f.loadedPaths);m.add(a);let h=new Map(f.inflight);h.delete(a),e({tree:p,loadedPaths:m,inflight:h})}catch(t){if(t instanceof Error&&t.name===`AbortError`)return;let n=new Map(r().inflight);n.delete(a),e({inflight:n})}},loadIndex:async r=>{e({indexStatus:`loading`});try{e({fileIndex:await n.get(`${t(r)}/files/index`),indexStatus:`ready`})}catch{e({indexStatus:`error`})}},invalidateIndex:()=>{e({indexStatus:`idle`,fileIndex:[]})},invalidateFolder:async(t,n)=>{let i=r();if(!i.loadedPaths.has(n))return;let a=new Set(i.loadedPaths);a.delete(n),e({loadedPaths:a}),(!n||i.expandedPaths.has(n))&&await r().loadChildren(t,n)},toggleExpand:(t,n)=>{let i=r(),a=new Set(i.expandedPaths);a.has(n)?(a.delete(n),e({expandedPaths:a})):(a.add(n),e({expandedPaths:a}),i.loadedPaths.has(n)||r().loadChildren(t,n))},setExpanded:(t,n)=>{let i=new Set(r().expandedPaths);n?i.add(t):i.delete(t),e({expandedPaths:i})},collapseAll:()=>{e({expandedPaths:new Set})},toggleFileSelect:t=>{let n=r().selectedFiles;n.indexOf(t)>=0?e({selectedFiles:n.filter(e=>e!==t)}):e({selectedFiles:[...n,t]})},setSelectedFiles:t=>e({selectedFiles:t}),clearSelection:()=>e({selectedFiles:[]}),reset:()=>{for(let e of r().inflight.values())e.abort();e({tree:[],fileIndex:[],loading:!1,error:null,expandedPaths:new Set,loadedPaths:new Set,inflight:new Map,indexStatus:`idle`,selectedFiles:[],inlineAction:null,clipboard:null,focusedPath:null})},fetchTree:async e=>{await r().loadRoot(e),r().loadIndex(e)}}));function f(){let{tree:e,expandedPaths:t}=d.getState(),n=[];function r(e){let i=[...e].sort((e,t)=>e.type===t.type?e.name.localeCompare(t.name):e.type===`directory`?-1:1);for(let e of i){let i=e;if(e.type===`directory`&&t.has(e.path)&&e.children)for(;i.children&&i.children.length===1&&i.children[0].type===`directory`&&t.has(i.children[0].path);)i=i.children[0];n.push(i.path),i.type===`directory`&&t.has(i.path)&&i.children&&r(i.children)}}return r(e),n}export{s as i,d as n,o as r,f as t};
1
+ import{t as e}from"./react-DMIOAtcX.js";import{i as t,t as n}from"./api-client-DIhJ5qVW.js";var r=`ppm-custom-order`;function i(){try{let e=localStorage.getItem(r);return e?JSON.parse(e):null}catch{return null}}function a(e){try{localStorage.setItem(r,JSON.stringify(e))}catch{}}function o(e,t){if(!t)return[...e];let n=new Map(t.map((e,t)=>[e,t]));return[...e].sort((e,t)=>(n.get(e.name)??1/0)-(n.get(t.name)??1/0))}var s=e((e,t)=>({projects:[],activeProject:null,customOrder:i(),loading:!1,error:null,fetchProjects:async()=>{e({loading:!0,error:null});try{e({projects:await n.get(`/api/projects`),loading:!1})}catch(t){e({error:t instanceof Error?t.message:`Failed to fetch projects`,loading:!1})}},setActiveProject:t=>{e({activeProject:t})},addProject:async(r,i)=>{let a=await n.post(`/api/projects`,{path:r,name:i});await t().fetchProjects();let o=t().projects.find(e=>e.name===(i??a.name)||e.path===r);return o&&e({activeProject:o}),a},setProjectColor:async(e,r)=>{await n.patch(`/api/projects/${encodeURIComponent(e)}/color`,{color:r}),await t().fetchProjects()},moveProject:async(r,i)=>{let{projects:s,customOrder:c}=t(),l=o(s,c),u=l.findIndex(e=>e.name===r);if(u===-1)return;let d=i===`up`?u-1:u+1;if(d<0||d>=l.length)return;let f=l.map(e=>e.name);[f[u],f[d]]=[f[d],f[u]],a(f),await n.patch(`/api/projects/reorder`,{order:f}),e({customOrder:f})},reorderProjects:async t=>{a(t),e({customOrder:t}),await n.patch(`/api/projects/reorder`,{order:t}).catch(()=>{})},renameProject:async(e,r)=>{await n.patch(`/api/projects/${encodeURIComponent(e)}`,{name:r}),await t().fetchProjects()},deleteProject:async t=>{await n.del(`/api/projects/${encodeURIComponent(t)}`),e(e=>{let n=e.projects.filter(e=>e.name!==t),r=e.customOrder?e.customOrder.filter(e=>e!==t):null;return r&&a(r),{projects:n,customOrder:r,activeProject:e.activeProject?.name===t?n[0]??null:e.activeProject}})}}));function c(e,t){return e.map(e=>({name:e.name,path:t?`${t}/${e.name}`:e.name,type:e.type,ignored:e.isIgnored}))}function l(e,t,n){return t?e.map(e=>u(e,t,n)):n.map(t=>{let n=e.find(e=>e.path===t.path);return n?{...t,children:n.children}:t})}function u(e,t,n){if(e.path===t){let t=n.map(t=>{let n=e.children?.find(e=>e.path===t.path);return n?{...t,children:n.children}:t});return{...e,children:t}}return e.children&&t.startsWith(e.path+`/`)?{...e,children:e.children.map(e=>u(e,t,n))}:e}var d=e((e,r)=>({tree:[],fileIndex:[],loading:!1,error:null,expandedPaths:new Set,loadedPaths:new Set,inflight:new Map,indexStatus:`idle`,selectedFiles:[],inlineAction:null,clipboard:null,focusedPath:null,setInlineAction:t=>e({inlineAction:t}),clearInlineAction:()=>e({inlineAction:null}),setClipboard:t=>e({clipboard:t}),setFocusedPath:t=>e({focusedPath:t}),loadRoot:async i=>{e({loading:!0,error:null});try{let a=c(await n.get(`${t(i)}/files/list?path=`),``),o=new Set(r().loadedPaths);o.add(``),e({tree:a,loading:!1,loadedPaths:o})}catch(t){e({error:t instanceof Error?t.message:`Failed to load files`,loading:!1})}},loadChildren:async(i,a)=>{let o=r();if(o.loadedPaths.has(a))return;let s=o.inflight.get(a);s&&s.abort();let u=new AbortController,d=new Map(o.inflight);d.set(a,u),e({inflight:d});try{let o=encodeURIComponent(a),s=await n.get(`${t(i)}/files/list?path=${o}`,{signal:u.signal});if(u.signal.aborted)return;let d=c(s,a),f=r(),p=l(f.tree,a,d),m=new Set(f.loadedPaths);m.add(a);let h=new Map(f.inflight);h.delete(a),e({tree:p,loadedPaths:m,inflight:h})}catch(t){if(t instanceof Error&&t.name===`AbortError`)return;let n=new Map(r().inflight);n.delete(a),e({inflight:n})}},loadIndex:async r=>{e({indexStatus:`loading`});try{e({fileIndex:await n.get(`${t(r)}/files/index`),indexStatus:`ready`})}catch{e({indexStatus:`error`})}},invalidateIndex:()=>{e({indexStatus:`idle`,fileIndex:[]})},invalidateFolder:async(t,n)=>{let i=r();if(!i.loadedPaths.has(n))return;let a=new Set(i.loadedPaths);a.delete(n),e({loadedPaths:a}),(!n||i.expandedPaths.has(n))&&await r().loadChildren(t,n)},toggleExpand:(t,n)=>{let i=r(),a=new Set(i.expandedPaths);a.has(n)?(a.delete(n),e({expandedPaths:a})):(a.add(n),e({expandedPaths:a}),i.loadedPaths.has(n)||r().loadChildren(t,n))},setExpanded:(t,n)=>{let i=new Set(r().expandedPaths);n?i.add(t):i.delete(t),e({expandedPaths:i})},collapseAll:()=>{e({expandedPaths:new Set})},toggleFileSelect:t=>{let n=r().selectedFiles;n.indexOf(t)>=0?e({selectedFiles:n.filter(e=>e!==t)}):e({selectedFiles:[...n,t]})},setSelectedFiles:t=>e({selectedFiles:t}),clearSelection:()=>e({selectedFiles:[]}),reset:()=>{for(let e of r().inflight.values())e.abort();e({tree:[],fileIndex:[],loading:!1,error:null,expandedPaths:new Set,loadedPaths:new Set,inflight:new Map,indexStatus:`idle`,selectedFiles:[],inlineAction:null,clipboard:null,focusedPath:null})},fetchTree:async e=>{await r().loadRoot(e),r().loadIndex(e)}}));function f(){let{tree:e,expandedPaths:t}=d.getState(),n=[];function r(e){let i=[...e].sort((e,t)=>e.type===t.type?e.name.localeCompare(t.name):e.type===`directory`?-1:1);for(let e of i){let i=e;if(e.type===`directory`&&t.has(e.path)&&e.children)for(;i.children&&i.children.length===1&&i.children[0].type===`directory`&&t.has(i.children[0].path);)i=i.children[0];n.push(i.path),i.type===`directory`&&t.has(i.path)&&i.children&&r(i.children)}}return r(e),n}export{s as i,d as n,o as r,f as t};
2
+ //# sourceMappingURL=file-store-DOxcU_7s.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-store-DOxcU_7s.js","names":[],"sources":["../../../src/web/stores/project-store.ts","../../../src/web/stores/file-tree-merge-helpers.ts","../../../src/web/stores/file-store.ts"],"sourcesContent":["import { create } from \"zustand\";\nimport { api } from \"@/lib/api-client\";\n\nexport interface Project {\n name: string;\n path: string;\n color?: string;\n}\n\nexport interface ProjectInfo extends Project {\n branch?: string;\n status?: \"clean\" | \"dirty\";\n}\n\n// ---------------------------------------------------------------------------\n// Recently-used tracking via localStorage\n// ---------------------------------------------------------------------------\nconst RECENT_KEY = \"ppm-recent-projects\";\nconst CUSTOM_ORDER_KEY = \"ppm-custom-order\";\n\nfunction loadRecentOrder(): string[] {\n try {\n const raw = localStorage.getItem(RECENT_KEY);\n return raw ? (JSON.parse(raw) as string[]) : [];\n } catch {\n return [];\n }\n}\n\nfunction saveRecentOrder(order: string[]) {\n try {\n localStorage.setItem(RECENT_KEY, JSON.stringify(order));\n } catch { /* ignore */ }\n}\n\n/** Move project name to front of recent list */\nfunction touchRecent(name: string) {\n const order = loadRecentOrder().filter((n) => n !== name);\n order.unshift(name);\n saveRecentOrder(order);\n}\n\n/** Sort projects by recent usage (most recent first) */\nexport function sortByRecent(projects: ProjectInfo[]): ProjectInfo[] {\n const order = loadRecentOrder();\n const orderMap = new Map(order.map((name, i) => [name, i]));\n return [...projects].sort((a, b) => {\n const ai = orderMap.get(a.name) ?? Infinity;\n const bi = orderMap.get(b.name) ?? Infinity;\n return ai - bi;\n });\n}\n\nfunction loadCustomOrder(): string[] | null {\n try {\n const raw = localStorage.getItem(CUSTOM_ORDER_KEY);\n return raw ? (JSON.parse(raw) as string[]) : null;\n } catch {\n return null;\n }\n}\n\nfunction saveCustomOrder(order: string[]) {\n try {\n localStorage.setItem(CUSTOM_ORDER_KEY, JSON.stringify(order));\n } catch { /* ignore */ }\n}\n\n/** Resolve display order: custom order if set, else preserve server order */\nexport function resolveOrder(projects: ProjectInfo[], customOrder: string[] | null): ProjectInfo[] {\n if (!customOrder) return [...projects];\n const orderMap = new Map(customOrder.map((name, i) => [name, i]));\n return [...projects].sort((a, b) => {\n const ai = orderMap.get(a.name) ?? Infinity;\n const bi = orderMap.get(b.name) ?? Infinity;\n return ai - bi;\n });\n}\n\n// ---------------------------------------------------------------------------\n// Store\n// ---------------------------------------------------------------------------\ninterface ProjectStore {\n projects: ProjectInfo[];\n activeProject: ProjectInfo | null;\n customOrder: string[] | null;\n loading: boolean;\n error: string | null;\n fetchProjects: () => Promise<void>;\n setActiveProject: (project: ProjectInfo) => void;\n addProject: (path: string, name?: string) => Promise<ProjectInfo>;\n setProjectColor: (name: string, color: string | null) => Promise<void>;\n moveProject: (name: string, direction: \"up\" | \"down\") => Promise<void>;\n reorderProjects: (newOrder: string[]) => Promise<void>;\n renameProject: (name: string, newName: string) => Promise<void>;\n deleteProject: (name: string) => Promise<void>;\n}\n\nexport const useProjectStore = create<ProjectStore>((set, get) => ({\n projects: [],\n activeProject: null,\n customOrder: loadCustomOrder(),\n loading: false,\n error: null,\n\n fetchProjects: async () => {\n set({ loading: true, error: null });\n try {\n const projects = await api.get<ProjectInfo[]>(\"/api/projects\");\n set({ projects, loading: false });\n } catch (err) {\n set({\n error: err instanceof Error ? err.message : \"Failed to fetch projects\",\n loading: false,\n });\n }\n },\n\n setActiveProject: (project) => {\n set({ activeProject: project });\n },\n\n addProject: async (path, name) => {\n const project = await api.post<ProjectInfo>(\"/api/projects\", { path, name });\n await get().fetchProjects();\n // Auto-select the newly added project\n const added = get().projects.find((p) => p.name === (name ?? project.name) || p.path === path);\n if (added) set({ activeProject: added });\n return project;\n },\n\n setProjectColor: async (name, color) => {\n await api.patch(`/api/projects/${encodeURIComponent(name)}/color`, { color });\n await get().fetchProjects();\n },\n\n moveProject: async (name, direction) => {\n const { projects, customOrder } = get();\n const ordered = resolveOrder(projects, customOrder);\n const idx = ordered.findIndex((p) => p.name === name);\n if (idx === -1) return;\n const newIdx = direction === \"up\" ? idx - 1 : idx + 1;\n if (newIdx < 0 || newIdx >= ordered.length) return;\n const newOrder = ordered.map((p) => p.name);\n [newOrder[idx], newOrder[newIdx]] = [newOrder[newIdx]!, newOrder[idx]!];\n saveCustomOrder(newOrder);\n await api.patch(\"/api/projects/reorder\", { order: newOrder });\n set({ customOrder: newOrder });\n },\n\n reorderProjects: async (newOrder) => {\n saveCustomOrder(newOrder);\n set({ customOrder: newOrder });\n await api.patch(\"/api/projects/reorder\", { order: newOrder }).catch(() => {});\n },\n\n renameProject: async (name, newName) => {\n await api.patch(`/api/projects/${encodeURIComponent(name)}`, { name: newName });\n // Refetch to get updated list\n await get().fetchProjects();\n },\n\n deleteProject: async (name) => {\n await api.del(`/api/projects/${encodeURIComponent(name)}`);\n set((s) => {\n const projects = s.projects.filter((p) => p.name !== name);\n const customOrder = s.customOrder ? s.customOrder.filter((n) => n !== name) : null;\n if (customOrder) saveCustomOrder(customOrder);\n return {\n projects,\n customOrder,\n activeProject: s.activeProject?.name === name\n ? (projects[0] ?? null)\n : s.activeProject,\n };\n });\n },\n}));\n","/**\n * Pure helper functions for immutable lazy-tree merging.\n * Kept separate to stay under the 200-line file size guideline.\n */\nimport type { FileDirEntry } from \"../../types/project\";\nimport type { FileNode } from \"./file-store\";\n\n/** Convert /files/list entries into sparse FileNode children (no grandchildren). */\nexport function entriesToNodes(entries: FileDirEntry[], parentPath: string): FileNode[] {\n return entries.map((e) => ({\n name: e.name,\n path: parentPath ? `${parentPath}/${e.name}` : e.name,\n type: e.type,\n ignored: e.isIgnored,\n // children intentionally undefined — loaded lazily on expand\n }));\n}\n\n/** Immutable deep-merge of newly loaded children into the sparse tree. */\nexport function mergeChildren(tree: FileNode[], folderPath: string, children: FileNode[]): FileNode[] {\n if (!folderPath) {\n // Root level: replace root entries, preserve already-loaded sub-children\n return children.map((newNode) => {\n const existing = tree.find((n) => n.path === newNode.path);\n return existing ? { ...newNode, children: existing.children } : newNode;\n });\n }\n return tree.map((node) => mergeNode(node, folderPath, children));\n}\n\nfunction mergeNode(node: FileNode, targetPath: string, children: FileNode[]): FileNode {\n if (node.path === targetPath) {\n // Merge: preserve already-loaded sub-children keyed by path\n const mergedChildren = children.map((newChild) => {\n const existing = node.children?.find((c) => c.path === newChild.path);\n return existing ? { ...newChild, children: existing.children } : newChild;\n });\n return { ...node, children: mergedChildren };\n }\n if (node.children && targetPath.startsWith(node.path + \"/\")) {\n return { ...node, children: node.children.map((child) => mergeNode(child, targetPath, children)) };\n }\n return node;\n}\n","import { create } from \"zustand\";\nimport { api, projectUrl } from \"@/lib/api-client\";\nimport type { FileEntry, FileDirEntry } from \"../../types/project\";\nimport { entriesToNodes, mergeChildren } from \"./file-tree-merge-helpers\";\n\nexport type { FileEntry };\n\nexport interface FileNode {\n name: string;\n path: string;\n type: \"file\" | \"directory\";\n children?: FileNode[];\n size?: number;\n modified?: string;\n /** True if path is matched by a .gitignore rule */\n ignored?: boolean;\n}\n\n/** State for inline create/rename in the file tree */\nexport interface InlineAction {\n type: \"new-file\" | \"new-folder\" | \"rename\";\n /** Parent directory path (for new-file/new-folder) or parent of the renamed file */\n parentPath: string;\n /** Existing node being renamed (only for type=rename) */\n existingNode?: FileNode;\n}\n\n/** Clipboard state for cut/copy/paste */\nexport interface ClipboardState {\n paths: string[];\n operation: \"cut\" | \"copy\";\n}\n\ninterface FileStore {\n tree: FileNode[];\n fileIndex: FileEntry[];\n loading: boolean;\n error: string | null;\n expandedPaths: Set<string>;\n loadedPaths: Set<string>;\n /** In-flight AbortControllers keyed by folder path */\n inflight: Map<string, AbortController>;\n indexStatus: \"idle\" | \"loading\" | \"ready\" | \"error\";\n selectedFiles: string[];\n inlineAction: InlineAction | null;\n clipboard: ClipboardState | null;\n focusedPath: string | null;\n\n setInlineAction(action: InlineAction | null): void;\n clearInlineAction(): void;\n setClipboard(clipboard: ClipboardState | null): void;\n setFocusedPath(path: string | null): void;\n loadRoot(projectName: string): Promise<void>;\n loadChildren(projectName: string, folderPath: string): Promise<void>;\n loadIndex(projectName: string): Promise<void>;\n invalidateIndex(): void;\n invalidateFolder(projectName: string, folderPath: string): Promise<void>;\n toggleExpand(projectName: string, path: string): void;\n setExpanded(path: string, expanded: boolean): void;\n collapseAll(): void;\n toggleFileSelect(path: string): void;\n setSelectedFiles(paths: string[]): void;\n clearSelection(): void;\n reset(): void;\n /** @deprecated Use loadRoot instead */\n fetchTree(projectName: string): Promise<void>;\n}\n\nexport const useFileStore = create<FileStore>((set, get) => ({\n tree: [],\n fileIndex: [],\n loading: false,\n error: null,\n expandedPaths: new Set<string>(),\n loadedPaths: new Set<string>(),\n inflight: new Map<string, AbortController>(),\n indexStatus: \"idle\",\n selectedFiles: [],\n inlineAction: null,\n clipboard: null,\n focusedPath: null,\n\n setInlineAction: (action) => set({ inlineAction: action }),\n clearInlineAction: () => set({ inlineAction: null }),\n setClipboard: (clipboard) => set({ clipboard }),\n setFocusedPath: (path) => set({ focusedPath: path }),\n\n loadRoot: async (projectName: string) => {\n set({ loading: true, error: null });\n try {\n const data = await api.get<FileDirEntry[]>(\n `${projectUrl(projectName)}/files/list?path=`,\n );\n const rootNodes = entriesToNodes(data, \"\");\n const loadedPaths = new Set(get().loadedPaths);\n loadedPaths.add(\"\"); // root is loaded\n set({ tree: rootNodes, loading: false, loadedPaths });\n } catch (err) {\n set({\n error: err instanceof Error ? err.message : \"Failed to load files\",\n loading: false,\n });\n }\n },\n\n loadChildren: async (projectName: string, folderPath: string) => {\n const state = get();\n\n // Idempotent guard — skip if already loaded\n if (state.loadedPaths.has(folderPath)) return;\n\n // Abort any existing in-flight request for this path\n const existing = state.inflight.get(folderPath);\n if (existing) existing.abort();\n\n const controller = new AbortController();\n const inflight = new Map(state.inflight);\n inflight.set(folderPath, controller);\n set({ inflight });\n\n try {\n const encodedPath = encodeURIComponent(folderPath);\n const data = await api.get<FileDirEntry[]>(\n `${projectUrl(projectName)}/files/list?path=${encodedPath}`,\n { signal: controller.signal },\n );\n\n // Check if aborted between request start and completion (defense in depth)\n if (controller.signal.aborted) return;\n\n const children = entriesToNodes(data, folderPath);\n const currentState = get();\n const newTree = mergeChildren(currentState.tree, folderPath, children);\n const newLoadedPaths = new Set(currentState.loadedPaths);\n newLoadedPaths.add(folderPath);\n const newInflight = new Map(currentState.inflight);\n newInflight.delete(folderPath);\n set({ tree: newTree, loadedPaths: newLoadedPaths, inflight: newInflight });\n } catch (err) {\n if (err instanceof Error && err.name === \"AbortError\") return;\n // Remove from inflight on error\n const newInflight = new Map(get().inflight);\n newInflight.delete(folderPath);\n set({ inflight: newInflight });\n }\n },\n\n loadIndex: async (projectName: string) => {\n set({ indexStatus: \"loading\" });\n try {\n const data = await api.get<FileEntry[]>(\n `${projectUrl(projectName)}/files/index`,\n );\n set({ fileIndex: data, indexStatus: \"ready\" });\n } catch {\n set({ indexStatus: \"error\" });\n }\n },\n\n invalidateIndex: () => {\n set({ indexStatus: \"idle\", fileIndex: [] });\n },\n\n invalidateFolder: async (projectName: string, folderPath: string) => {\n const state = get();\n\n // Only reload if this folder was previously loaded\n if (!state.loadedPaths.has(folderPath)) return;\n\n // Remove from loadedPaths to allow re-fetch\n const newLoadedPaths = new Set(state.loadedPaths);\n newLoadedPaths.delete(folderPath);\n set({ loadedPaths: newLoadedPaths });\n\n // Re-fetch if folder is currently expanded (or root)\n if (!folderPath || state.expandedPaths.has(folderPath)) {\n await get().loadChildren(projectName, folderPath);\n }\n },\n\n toggleExpand: (projectName: string, path: string) => {\n const state = get();\n const expanded = new Set(state.expandedPaths);\n if (expanded.has(path)) {\n expanded.delete(path);\n set({ expandedPaths: expanded });\n } else {\n expanded.add(path);\n set({ expandedPaths: expanded });\n // Lazy load children if not yet loaded\n if (!state.loadedPaths.has(path)) {\n get().loadChildren(projectName, path);\n }\n }\n },\n\n setExpanded: (path: string, expanded: boolean) => {\n const paths = new Set(get().expandedPaths);\n if (expanded) paths.add(path);\n else paths.delete(path);\n set({ expandedPaths: paths });\n },\n\n collapseAll: () => {\n set({ expandedPaths: new Set<string>() });\n },\n\n toggleFileSelect: (path: string) => {\n const current = get().selectedFiles;\n const idx = current.indexOf(path);\n if (idx >= 0) {\n set({ selectedFiles: current.filter((p) => p !== path) });\n } else {\n set({ selectedFiles: [...current, path] });\n }\n },\n\n setSelectedFiles: (paths) => set({ selectedFiles: paths }),\n\n clearSelection: () => set({ selectedFiles: [] }),\n\n reset: () => {\n // Abort all in-flight requests\n for (const ctrl of get().inflight.values()) ctrl.abort();\n set({\n tree: [],\n fileIndex: [],\n loading: false,\n error: null,\n expandedPaths: new Set(),\n loadedPaths: new Set(),\n inflight: new Map(),\n indexStatus: \"idle\",\n selectedFiles: [],\n inlineAction: null,\n clipboard: null,\n focusedPath: null,\n });\n },\n\n /** @deprecated Alias for loadRoot — kept for callers in tab-bar and mobile-nav */\n fetchTree: async (projectName: string) => {\n await get().loadRoot(projectName);\n get().loadIndex(projectName);\n },\n}));\n\n/** Compute flat visible path list from current tree state (for range selection) */\nexport function getVisiblePaths(): string[] {\n const { tree, expandedPaths } = useFileStore.getState();\n const result: string[] = [];\n function walk(nodes: FileNode[]) {\n const sorted = [...nodes].sort((a, b) => {\n if (a.type !== b.type) return a.type === \"directory\" ? -1 : 1;\n return a.name.localeCompare(b.name);\n });\n for (const n of sorted) {\n // Skip compacted intermediate dirs (matches compact folder rendering)\n let effective = n;\n if (n.type === \"directory\" && expandedPaths.has(n.path) && n.children) {\n while (\n effective.children &&\n effective.children.length === 1 &&\n effective.children[0]!.type === \"directory\" &&\n expandedPaths.has(effective.children[0]!.path)\n ) {\n effective = effective.children[0]!;\n }\n }\n result.push(effective.path);\n if (effective.type === \"directory\" && expandedPaths.has(effective.path) && effective.children) {\n walk(effective.children);\n }\n }\n }\n walk(tree);\n return result;\n}\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/data-grid-overlay-editor-aTzJjALy.js","assets/rolldown-runtime-FhOqtrmT.js","assets/dist-CcDNqGjt.js","assets/vendor-markdown-0Mxgxy0L.js","assets/vendor-ui-UXCWAcmi.js","assets/data-grid-types-BISkUXAY.js","assets/number-overlay-editor-CewUR5pB.js"])))=>i.map(i=>d[i]);
2
- import{o as e,t}from"./rolldown-runtime-FhOqtrmT.js";import{b as n,x as r}from"./vendor-markdown-0Mxgxy0L.js";import{Y as i}from"./vendor-ui-UXCWAcmi.js";import{t as a}from"./createLucideIcon-BjHrJDVb.js";import{n as o,r as s}from"./csv-parser-Dly5nqE1.js";import{t as c}from"./arrow-up-Rcw6_KKu.js";import{n as l}from"./database-DOWH9-Vv.js";import{t as u}from"./chevron-right-DnHIvvcy.js";import{i as d,n as f,r as p,t as m}from"./search-tM8K5zWU.js";import{a as h,i as g,n as _,r as v,t as y}from"./x-BPReZWnP.js";import{t as b}from"./sparkles-CulWHe4c.js";import{t as x}from"./text-wrap-DJz9Bgpa.js";import{K as S,j as C}from"./vendor-mermaid-Cl50p6TB.js";import{t as w}from"./tab-store-S9w6U5gm.js";import{$ as T,G as E,I as D,K as O,h as k}from"./index-DJtqbPFT.js";import{A,B as ee,C as te,D as ne,E as j,F as re,G as ie,H as ae,I as M,L as oe,M as N,N as P,O as se,P as ce,R as le,S as F,T as I,U as ue,V as de,W as fe,_ as pe,a as me,b as he,c as ge,d as _e,f as ve,g as L,h as ye,i as be,j as xe,k as R,l as Se,m as Ce,n as z,o as B,p as we,r as V,s as H,t as U,u as Te,v as Ee,w as W,x as De,y as Oe,z as ke}from"./data-grid-types-BISkUXAY.js";import{t as G}from"./dist-CcDNqGjt.js";import{n as Ae,t as je}from"./use-monaco-theme-BePWbY58.js";var Me=a(`funnel`,[[`path`,{d:`M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z`,key:`sc7q7i`}]]),Ne=a(`save`,[[`path`,{d:`M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z`,key:`1c8476`}],[`path`,{d:`M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7`,key:`1ydtos`}],[`path`,{d:`M7 3v4a1 1 0 0 0 1 1h7`,key:`t51u73`}]]),Pe=`SELECT.FROM.WHERE.INSERT.INTO.VALUES.UPDATE.SET.DELETE.CREATE.TABLE.ALTER.DROP.INDEX.JOIN.LEFT.RIGHT.INNER.OUTER.ON.AND.OR.NOT.NULL.IS.IN.LIKE.BETWEEN.HAVING.LIMIT.OFFSET.AS.DISTINCT.COUNT.SUM.AVG.MIN.MAX.CASE.WHEN.THEN.ELSE.END.EXISTS.UNION.ALL.ASC.DESC.ORDER BY.GROUP BY.LEFT JOIN.RIGHT JOIN.INNER JOIN.CROSS JOIN.FULL OUTER JOIN.IS NULL.IS NOT NULL`.split(`.`),Fe=[`COUNT`,`SUM`,`AVG`,`MIN`,`MAX`],Ie=[`=`,`!=`,`<>`,`>`,`<`,`>=`,`<=`,`LIKE`,`ILIKE`,`IN`,`NOT IN`,`BETWEEN`,`IS NULL`,`IS NOT NULL`],Le=[`ASC`,`DESC`],Re=new Map,ze=new Set(`WHERE.SET.ON.ORDER.GROUP.HAVING.LIMIT.LEFT.RIGHT.INNER.OUTER.CROSS.FULL.JOIN.AND.OR.VALUES.SELECT.FROM.INTO.UPDATE.DELETE.INSERT.CREATE.ALTER.DROP`.split(`.`));function Be(e){let t=new Set,n=new Map,r=e.matchAll(/\b(?:FROM|JOIN|UPDATE|INTO)\s+"?(\w+)"?(?:\s+AS\s+(\w+)|\s+(?!(?:FROM|JOIN|UPDATE|INTO|WHERE|SET|ON|ORDER|GROUP|HAVING|LIMIT|LEFT|RIGHT|INNER|OUTER|CROSS|FULL|AND|OR|VALUES|SELECT)\b)(\w+))?/gi);for(let e of r){let r=e[1];t.add(r);let i=e[2]??e[3];i&&!ze.has(i.toUpperCase())&&n.set(i.toLowerCase(),r)}return{tableRefs:t,aliasMap:n}}function Ve(e,t){return t.get(e.toLowerCase())??e}async function He(e,t){let n=e.toLowerCase(),r=Re.get(n);if(!r)try{r=await t.getColumns(e),Re.set(n,r)}catch{r=[]}return r}async function Ue(e,t,n,r){let i=[],a=new Set;for(let o of e){let e=await He(o,t);for(let t of e){if(a.has(t.name))continue;a.add(t.name);let e=/[A-Z]/.test(t.name);i.push({label:t.name,kind:n.languages.CompletionItemKind.Field,detail:`${o} · ${t.type}`,insertText:e?`"${t.name}"`:t.name,range:r,sortText:`0`+t.name})}}return i}function We(e){if(/(\w+)\.\s*$/.test(e))return`dot`;let t=e.match(/\b(?:ORDER|GROUP)\s+BY\s+(?:[\w"]+\s+(?:ASC|DESC)\s*,\s*)*[\w"]+\s+(\w*)$/i);if(t){let e=t[1].toUpperCase();return e===`ASC`||e===`DESC`?`after-direction`:`sort-direction`}return/\b(?:ORDER|GROUP)\s+BY\s+.*(?:ASC|DESC)\s*,\s*\w*$/i.test(e)?`order-by-next-col`:/\b(?:WHERE|AND|OR)\s+[\w"]+\s+\S*$/i.test(e)?`operator`:/\b(?:FROM|JOIN|INTO|UPDATE|TABLE)\s+\w*$/i.test(e)?`table`:/\bINSERT\s+INTO\s+[\w"]+\s*\(\s*(?:[\w"]+\s*,\s*)*\w*$/i.test(e)?`insert-cols`:/\b(?:SELECT|WHERE|ORDER\s+BY|GROUP\s+BY|HAVING|SET|ON|AND|OR)\s+(?:[\w"]+\s*,\s*)*\w*$/i.test(e)?`columns`:/,\s*\w*$/.test(e)?`comma-cols`:`default`}function Ge(e,t){return{triggerCharacters:[`.`,`,`],provideCompletionItems:async(n,r)=>{try{let i=n.getValueInRange({startLineNumber:1,startColumn:1,endLineNumber:r.lineNumber,endColumn:r.column}),a=n.getWordUntilPosition(r),o={startLineNumber:r.lineNumber,endLineNumber:r.lineNumber,startColumn:a.startColumn,endColumn:a.endColumn},{tableRefs:s,aliasMap:c}=Be(n.getValue()),l=[],u=We(i);if(u===`dot`){let n=i.match(/(\w+)\.\s*$/);if(n){let r=n[1],i=await He(Ve(r,c),t);for(let t of i){let n=/[A-Z]/.test(t.name);l.push({label:t.name,kind:e.languages.CompletionItemKind.Field,detail:t.type,insertText:n?`"${t.name}"`:t.name,range:o})}}return{suggestions:l}}if(u===`sort-direction`){for(let t of Le)l.push({label:t,kind:e.languages.CompletionItemKind.Keyword,insertText:t,range:o,sortText:`0`+t});return{suggestions:l}}if(u===`after-direction`)return{suggestions:[]};if(u===`order-by-next-col`)return l.push(...await Ue(s,t,e,o)),{suggestions:l};if(u===`operator`){for(let t of Ie)l.push({label:t,kind:e.languages.CompletionItemKind.Operator,insertText:t,range:o,sortText:`0`+t});return{suggestions:l}}if(u===`table`){for(let n of t.tables)l.push({label:n.name,kind:e.languages.CompletionItemKind.Struct,detail:n.schema,insertText:n.name,range:o,sortText:`0`+n.name});return{suggestions:l}}if(u===`insert-cols`)return l.push(...await Ue(s,t,e,o)),{suggestions:l};if(u===`columns`){if(l.push(...await Ue(s,t,e,o)),/\bSELECT\s+/i.test(i)){l.push({label:`*`,kind:e.languages.CompletionItemKind.Value,insertText:`*`,range:o,sortText:`00*`});for(let t of Fe)l.push({label:`${t}()`,kind:e.languages.CompletionItemKind.Function,insertText:`${t}($0)`,insertTextRules:e.languages.CompletionItemInsertTextRule.InsertAsSnippet,range:o,sortText:`1`+t})}for(let t of Pe)l.push({label:t,kind:e.languages.CompletionItemKind.Keyword,insertText:t,range:o,sortText:`3`+t});return{suggestions:l}}if(u===`comma-cols`&&s.size>0)return l.push(...await Ue(s,t,e,o)),{suggestions:l};for(let t of Pe)l.push({label:t,kind:e.languages.CompletionItemKind.Keyword,insertText:t,range:o,sortText:`2`+t});for(let n of t.tables)l.push({label:n.name,kind:e.languages.CompletionItemKind.Struct,detail:n.schema,insertText:n.name,range:o,sortText:`1`+n.name});return{suggestions:l}}catch{return{suggestions:[]}}}}}function Ke(){Re.clear()}var K=e(r(),1),qe=e(i(),1),q=n();function Je(e,t,n){let r=new Blob([t],{type:n}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=e,a.click(),URL.revokeObjectURL(i)}function Ye({columns:e,rows:t,filename:n=`export`,exportAllUrl:r}){let[i,a]=(0,K.useState)(!1),[s,c]=(0,K.useState)(!1),l=(0,K.useRef)(null),u=(0,K.useRef)(null);(0,K.useEffect)(()=>{if(!i)return;let e=e=>{u.current&&!u.current.contains(e.target)&&l.current&&!l.current.contains(e.target)&&a(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[i]);let d=(0,K.useCallback)(()=>a(e=>!e),[]),f=()=>{let r=o(e,t.map(t=>e.map(e=>String(t[e]??``))));Je(`${n}.csv`,r,`text/csv`),a(!1)},p=()=>{let e=JSON.stringify(t,null,2);Je(`${n}.json`,e,`application/json`),a(!1)},m=async()=>{let n=e.join(` `),r=t.map(t=>e.map(e=>String(t[e]??``)).join(` `)).join(`
2
+ import{o as e,t}from"./rolldown-runtime-FhOqtrmT.js";import{b as n,x as r}from"./vendor-markdown-0Mxgxy0L.js";import{Y as i}from"./vendor-ui-UXCWAcmi.js";import{t as a}from"./createLucideIcon-BjHrJDVb.js";import{n as o,r as s}from"./csv-parser-Dly5nqE1.js";import{t as c}from"./arrow-up-Rcw6_KKu.js";import{n as l}from"./database-DOWH9-Vv.js";import{t as u}from"./chevron-right-DnHIvvcy.js";import{i as d,n as f,r as p,t as m}from"./search-tM8K5zWU.js";import{a as h,i as g,n as _,r as v,t as y}from"./x-BPReZWnP.js";import{t as b}from"./sparkles-CulWHe4c.js";import{t as x}from"./text-wrap-DJz9Bgpa.js";import{K as S,j as C}from"./vendor-mermaid-Cl50p6TB.js";import{t as w}from"./tab-store-S9w6U5gm.js";import{$ as T,G as E,I as D,K as O,h as k}from"./index-uw3_0tuz.js";import{A,B as ee,C as te,D as ne,E as j,F as re,G as ie,H as ae,I as M,L as oe,M as N,N as P,O as se,P as ce,R as le,S as F,T as I,U as ue,V as de,W as fe,_ as pe,a as me,b as he,c as ge,d as _e,f as ve,g as L,h as ye,i as be,j as xe,k as R,l as Se,m as Ce,n as z,o as B,p as we,r as V,s as H,t as U,u as Te,v as Ee,w as W,x as De,y as Oe,z as ke}from"./data-grid-types-BISkUXAY.js";import{t as G}from"./dist-CcDNqGjt.js";import{n as Ae,t as je}from"./use-monaco-theme-BePWbY58.js";var Me=a(`funnel`,[[`path`,{d:`M10 20a1 1 0 0 0 .553.895l2 1A1 1 0 0 0 14 21v-7a2 2 0 0 1 .517-1.341L21.74 4.67A1 1 0 0 0 21 3H3a1 1 0 0 0-.742 1.67l7.225 7.989A2 2 0 0 1 10 14z`,key:`sc7q7i`}]]),Ne=a(`save`,[[`path`,{d:`M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z`,key:`1c8476`}],[`path`,{d:`M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7`,key:`1ydtos`}],[`path`,{d:`M7 3v4a1 1 0 0 0 1 1h7`,key:`t51u73`}]]),Pe=`SELECT.FROM.WHERE.INSERT.INTO.VALUES.UPDATE.SET.DELETE.CREATE.TABLE.ALTER.DROP.INDEX.JOIN.LEFT.RIGHT.INNER.OUTER.ON.AND.OR.NOT.NULL.IS.IN.LIKE.BETWEEN.HAVING.LIMIT.OFFSET.AS.DISTINCT.COUNT.SUM.AVG.MIN.MAX.CASE.WHEN.THEN.ELSE.END.EXISTS.UNION.ALL.ASC.DESC.ORDER BY.GROUP BY.LEFT JOIN.RIGHT JOIN.INNER JOIN.CROSS JOIN.FULL OUTER JOIN.IS NULL.IS NOT NULL`.split(`.`),Fe=[`COUNT`,`SUM`,`AVG`,`MIN`,`MAX`],Ie=[`=`,`!=`,`<>`,`>`,`<`,`>=`,`<=`,`LIKE`,`ILIKE`,`IN`,`NOT IN`,`BETWEEN`,`IS NULL`,`IS NOT NULL`],Le=[`ASC`,`DESC`],Re=new Map,ze=new Set(`WHERE.SET.ON.ORDER.GROUP.HAVING.LIMIT.LEFT.RIGHT.INNER.OUTER.CROSS.FULL.JOIN.AND.OR.VALUES.SELECT.FROM.INTO.UPDATE.DELETE.INSERT.CREATE.ALTER.DROP`.split(`.`));function Be(e){let t=new Set,n=new Map,r=e.matchAll(/\b(?:FROM|JOIN|UPDATE|INTO)\s+"?(\w+)"?(?:\s+AS\s+(\w+)|\s+(?!(?:FROM|JOIN|UPDATE|INTO|WHERE|SET|ON|ORDER|GROUP|HAVING|LIMIT|LEFT|RIGHT|INNER|OUTER|CROSS|FULL|AND|OR|VALUES|SELECT)\b)(\w+))?/gi);for(let e of r){let r=e[1];t.add(r);let i=e[2]??e[3];i&&!ze.has(i.toUpperCase())&&n.set(i.toLowerCase(),r)}return{tableRefs:t,aliasMap:n}}function Ve(e,t){return t.get(e.toLowerCase())??e}async function He(e,t){let n=e.toLowerCase(),r=Re.get(n);if(!r)try{r=await t.getColumns(e),Re.set(n,r)}catch{r=[]}return r}async function Ue(e,t,n,r){let i=[],a=new Set;for(let o of e){let e=await He(o,t);for(let t of e){if(a.has(t.name))continue;a.add(t.name);let e=/[A-Z]/.test(t.name);i.push({label:t.name,kind:n.languages.CompletionItemKind.Field,detail:`${o} · ${t.type}`,insertText:e?`"${t.name}"`:t.name,range:r,sortText:`0`+t.name})}}return i}function We(e){if(/(\w+)\.\s*$/.test(e))return`dot`;let t=e.match(/\b(?:ORDER|GROUP)\s+BY\s+(?:[\w"]+\s+(?:ASC|DESC)\s*,\s*)*[\w"]+\s+(\w*)$/i);if(t){let e=t[1].toUpperCase();return e===`ASC`||e===`DESC`?`after-direction`:`sort-direction`}return/\b(?:ORDER|GROUP)\s+BY\s+.*(?:ASC|DESC)\s*,\s*\w*$/i.test(e)?`order-by-next-col`:/\b(?:WHERE|AND|OR)\s+[\w"]+\s+\S*$/i.test(e)?`operator`:/\b(?:FROM|JOIN|INTO|UPDATE|TABLE)\s+\w*$/i.test(e)?`table`:/\bINSERT\s+INTO\s+[\w"]+\s*\(\s*(?:[\w"]+\s*,\s*)*\w*$/i.test(e)?`insert-cols`:/\b(?:SELECT|WHERE|ORDER\s+BY|GROUP\s+BY|HAVING|SET|ON|AND|OR)\s+(?:[\w"]+\s*,\s*)*\w*$/i.test(e)?`columns`:/,\s*\w*$/.test(e)?`comma-cols`:`default`}function Ge(e,t){return{triggerCharacters:[`.`,`,`],provideCompletionItems:async(n,r)=>{try{let i=n.getValueInRange({startLineNumber:1,startColumn:1,endLineNumber:r.lineNumber,endColumn:r.column}),a=n.getWordUntilPosition(r),o={startLineNumber:r.lineNumber,endLineNumber:r.lineNumber,startColumn:a.startColumn,endColumn:a.endColumn},{tableRefs:s,aliasMap:c}=Be(n.getValue()),l=[],u=We(i);if(u===`dot`){let n=i.match(/(\w+)\.\s*$/);if(n){let r=n[1],i=await He(Ve(r,c),t);for(let t of i){let n=/[A-Z]/.test(t.name);l.push({label:t.name,kind:e.languages.CompletionItemKind.Field,detail:t.type,insertText:n?`"${t.name}"`:t.name,range:o})}}return{suggestions:l}}if(u===`sort-direction`){for(let t of Le)l.push({label:t,kind:e.languages.CompletionItemKind.Keyword,insertText:t,range:o,sortText:`0`+t});return{suggestions:l}}if(u===`after-direction`)return{suggestions:[]};if(u===`order-by-next-col`)return l.push(...await Ue(s,t,e,o)),{suggestions:l};if(u===`operator`){for(let t of Ie)l.push({label:t,kind:e.languages.CompletionItemKind.Operator,insertText:t,range:o,sortText:`0`+t});return{suggestions:l}}if(u===`table`){for(let n of t.tables)l.push({label:n.name,kind:e.languages.CompletionItemKind.Struct,detail:n.schema,insertText:n.name,range:o,sortText:`0`+n.name});return{suggestions:l}}if(u===`insert-cols`)return l.push(...await Ue(s,t,e,o)),{suggestions:l};if(u===`columns`){if(l.push(...await Ue(s,t,e,o)),/\bSELECT\s+/i.test(i)){l.push({label:`*`,kind:e.languages.CompletionItemKind.Value,insertText:`*`,range:o,sortText:`00*`});for(let t of Fe)l.push({label:`${t}()`,kind:e.languages.CompletionItemKind.Function,insertText:`${t}($0)`,insertTextRules:e.languages.CompletionItemInsertTextRule.InsertAsSnippet,range:o,sortText:`1`+t})}for(let t of Pe)l.push({label:t,kind:e.languages.CompletionItemKind.Keyword,insertText:t,range:o,sortText:`3`+t});return{suggestions:l}}if(u===`comma-cols`&&s.size>0)return l.push(...await Ue(s,t,e,o)),{suggestions:l};for(let t of Pe)l.push({label:t,kind:e.languages.CompletionItemKind.Keyword,insertText:t,range:o,sortText:`2`+t});for(let n of t.tables)l.push({label:n.name,kind:e.languages.CompletionItemKind.Struct,detail:n.schema,insertText:n.name,range:o,sortText:`1`+n.name});return{suggestions:l}}catch{return{suggestions:[]}}}}}function Ke(){Re.clear()}var K=e(r(),1),qe=e(i(),1),q=n();function Je(e,t,n){let r=new Blob([t],{type:n}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=e,a.click(),URL.revokeObjectURL(i)}function Ye({columns:e,rows:t,filename:n=`export`,exportAllUrl:r}){let[i,a]=(0,K.useState)(!1),[s,c]=(0,K.useState)(!1),l=(0,K.useRef)(null),u=(0,K.useRef)(null);(0,K.useEffect)(()=>{if(!i)return;let e=e=>{u.current&&!u.current.contains(e.target)&&l.current&&!l.current.contains(e.target)&&a(!1)};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[i]);let d=(0,K.useCallback)(()=>a(e=>!e),[]),f=()=>{let r=o(e,t.map(t=>e.map(e=>String(t[e]??``))));Je(`${n}.csv`,r,`text/csv`),a(!1)},p=()=>{let e=JSON.stringify(t,null,2);Je(`${n}.json`,e,`application/json`),a(!1)},m=async()=>{let n=e.join(` `),r=t.map(t=>e.map(e=>String(t[e]??``)).join(` `)).join(`
3
3
  `);await navigator.clipboard.writeText(n+`
4
4
  `+r),a(!1)},g=async e=>{if(r){c(!0);try{let t=await(await fetch(`${r}&format=${e}&limit=10000`)).text(),i=e===`csv`?`text/csv`:`application/json`;Je(`${n}-all.${e}`,t,i)}catch{}c(!1),a(!1)}};if(e.length===0||t.length===0)return null;let _=l.current?.getBoundingClientRect(),v=document.getElementById(`portal`);return(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`button`,{ref:l,type:`button`,onClick:d,className:`p-1 rounded text-muted-foreground hover:text-foreground transition-colors`,title:`Export`,children:(0,q.jsx)(h,{className:`size-3.5`})}),i&&v&&_&&(0,qe.createPortal)((0,q.jsxs)(`div`,{ref:u,style:{position:`fixed`,left:Math.min(_.left,window.innerWidth-170),top:_.bottom+4,zIndex:1e4},className:`bg-popover border border-border rounded-md shadow-md py-1 min-w-[160px] text-xs`,children:[(0,q.jsx)(`button`,{onClick:m,className:`w-full text-left px-3 py-1.5 hover:bg-muted transition-colors text-foreground`,children:`Copy to Clipboard (TSV)`}),(0,q.jsx)(`button`,{onClick:f,className:`w-full text-left px-3 py-1.5 hover:bg-muted transition-colors text-foreground`,children:`Export Page (CSV)`}),(0,q.jsx)(`button`,{onClick:p,className:`w-full text-left px-3 py-1.5 hover:bg-muted transition-colors text-foreground`,children:`Export Page (JSON)`}),r&&(0,q.jsxs)(q.Fragment,{children:[(0,q.jsx)(`div`,{className:`border-t border-border my-1`}),(0,q.jsx)(`button`,{onClick:()=>g(`csv`),disabled:s,className:`w-full text-left px-3 py-1.5 hover:bg-muted transition-colors disabled:opacity-50 text-foreground`,children:s?`Exporting…`:`Export All (CSV)`}),(0,q.jsx)(`button`,{onClick:()=>g(`json`),disabled:s,className:`w-full text-left px-3 py-1.5 hover:bg-muted transition-colors disabled:opacity-50 text-foreground`,children:s?`Exporting…`:`Export All (JSON)`})]})]}),v)]})}var Xe=G(`div`)({name:`ImageOverlayEditorStyle`,class:`gdg-i2iowwq`,propsAsIs:!1}),Ze=t(((e,t)=>{t.exports=`SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED`})),Qe=t(((e,t)=>{var n=Ze();function r(){}function i(){}i.resetWarningCache=r,t.exports=function(){function e(e,t,r,i,a,o){if(o!==n){var s=Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw s.name=`Invariant Violation`,s}}e.isRequired=e;function t(){return e}var a={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:r};return a.PropTypes=a,a}})),$e=t(((e,t)=>{t.exports=Qe()()})),et=t((e=>{(function(t,n){if(typeof define==`function`&&define.amd)define([`exports`,`react`,`prop-types`],n);else if(e!==void 0)n(e,r(),$e());else{var i={exports:{}};n(i.exports,t.react,t.propTypes),t.reactSwipe=i.exports}})(e,function(e,t,n){Object.defineProperty(e,`__esModule`,{value:!0}),e.setHasSupportToCaptureOption=p;var r=a(t),i=a(n);function a(e){return e&&e.__esModule?e:{default:e}}var o=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e};function s(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function c(e,t){if(!(e instanceof t))throw TypeError(`Cannot call a class as a function`)}var l=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,`value`in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}();function u(e,t){if(!e)throw ReferenceError(`this hasn't been initialised - super() hasn't been called`);return t&&(typeof t==`object`||typeof t==`function`)?t:e}function d(e,t){if(typeof t!=`function`&&t!==null)throw TypeError(`Super expression must either be null or a function, not `+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var f=!1;function p(e){f=e}try{addEventListener(`test`,null,Object.defineProperty({},`capture`,{get:function(){p(!0)}}))}catch{}function m(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{capture:!0};return f?e:e.capture}function h(e){if(`touches`in e){var t=e.touches[0];return{x:t.pageX,y:t.pageY}}return{x:e.screenX,y:e.screenY}}var g=function(e){d(t,e);function t(){var e;c(this,t);var n=[...arguments],r=u(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(n)));return r._handleSwipeStart=r._handleSwipeStart.bind(r),r._handleSwipeMove=r._handleSwipeMove.bind(r),r._handleSwipeEnd=r._handleSwipeEnd.bind(r),r._onMouseDown=r._onMouseDown.bind(r),r._onMouseMove=r._onMouseMove.bind(r),r._onMouseUp=r._onMouseUp.bind(r),r._setSwiperRef=r._setSwiperRef.bind(r),r}return l(t,[{key:`componentDidMount`,value:function(){this.swiper&&this.swiper.addEventListener(`touchmove`,this._handleSwipeMove,m({capture:!0,passive:!1}))}},{key:`componentWillUnmount`,value:function(){this.swiper&&this.swiper.removeEventListener(`touchmove`,this._handleSwipeMove,m({capture:!0,passive:!1}))}},{key:`_onMouseDown`,value:function(e){this.props.allowMouseEvents&&(this.mouseDown=!0,document.addEventListener(`mouseup`,this._onMouseUp),document.addEventListener(`mousemove`,this._onMouseMove),this._handleSwipeStart(e))}},{key:`_onMouseMove`,value:function(e){this.mouseDown&&this._handleSwipeMove(e)}},{key:`_onMouseUp`,value:function(e){this.mouseDown=!1,document.removeEventListener(`mouseup`,this._onMouseUp),document.removeEventListener(`mousemove`,this._onMouseMove),this._handleSwipeEnd(e)}},{key:`_handleSwipeStart`,value:function(e){var t=h(e);this.moveStart={x:t.x,y:t.y},this.props.onSwipeStart(e)}},{key:`_handleSwipeMove`,value:function(e){if(this.moveStart){var t=h(e),n=t.x,r=t.y,i=n-this.moveStart.x,a=r-this.moveStart.y;this.moving=!0,this.props.onSwipeMove({x:i,y:a},e)&&e.cancelable&&e.preventDefault(),this.movePosition={deltaX:i,deltaY:a}}}},{key:`_handleSwipeEnd`,value:function(e){this.props.onSwipeEnd(e);var t=this.props.tolerance;this.moving&&this.movePosition&&(this.movePosition.deltaX<-t?this.props.onSwipeLeft(1,e):this.movePosition.deltaX>t&&this.props.onSwipeRight(1,e),this.movePosition.deltaY<-t?this.props.onSwipeUp(1,e):this.movePosition.deltaY>t&&this.props.onSwipeDown(1,e)),this.moveStart=null,this.moving=!1,this.movePosition=null}},{key:`_setSwiperRef`,value:function(e){this.swiper=e,this.props.innerRef(e)}},{key:`render`,value:function(){var e=this.props;e.tagName;var t=e.className,n=e.style,i=e.children;e.allowMouseEvents,e.onSwipeUp,e.onSwipeDown,e.onSwipeLeft,e.onSwipeRight,e.onSwipeStart,e.onSwipeMove,e.onSwipeEnd,e.innerRef,e.tolerance;var a=s(e,[`tagName`,`className`,`style`,`children`,`allowMouseEvents`,`onSwipeUp`,`onSwipeDown`,`onSwipeLeft`,`onSwipeRight`,`onSwipeStart`,`onSwipeMove`,`onSwipeEnd`,`innerRef`,`tolerance`]);return r.default.createElement(this.props.tagName,o({ref:this._setSwiperRef,onMouseDown:this._onMouseDown,onTouchStart:this._handleSwipeStart,onTouchEnd:this._handleSwipeEnd,className:t,style:n},a),i)}}]),t}(t.Component);g.displayName=`ReactSwipe`,g.propTypes={tagName:i.default.string,className:i.default.string,style:i.default.object,children:i.default.node,allowMouseEvents:i.default.bool,onSwipeUp:i.default.func,onSwipeDown:i.default.func,onSwipeLeft:i.default.func,onSwipeRight:i.default.func,onSwipeStart:i.default.func,onSwipeMove:i.default.func,onSwipeEnd:i.default.func,innerRef:i.default.func,tolerance:i.default.number.isRequired},g.defaultProps={tagName:`div`,allowMouseEvents:!1,onSwipeUp:function(){},onSwipeDown:function(){},onSwipeLeft:function(){},onSwipeRight:function(){},onSwipeStart:function(){},onSwipeMove:function(){},onSwipeEnd:function(){},innerRef:function(){},tolerance:0},e.default=g})})),tt=t((e=>{(function(t,n){if(typeof define==`function`&&define.amd)define([`exports`,`./react-swipe`],n);else if(e!==void 0)n(e,et());else{var r={exports:{}};n(r.exports,t.reactSwipe),t.index=r.exports}})(e,function(e,t){Object.defineProperty(e,`__esModule`,{value:!0});var n=r(t);function r(e){return e&&e.__esModule?e:{default:e}}e.default=n.default})})),nt=t(((e,t)=>{(function(){var e={}.hasOwnProperty;function n(){for(var e=``,t=0;t<arguments.length;t++){var n=arguments[t];n&&(e=i(e,r(n)))}return e}function r(t){if(typeof t==`string`||typeof t==`number`)return t;if(typeof t!=`object`)return``;if(Array.isArray(t))return n.apply(null,t);if(t.toString!==Object.prototype.toString&&!t.toString.toString().includes(`[native code]`))return t.toString();var r=``;for(var a in t)e.call(t,a)&&t[a]&&(r=i(r,a));return r}function i(e,t){return t?e?e+` `+t:e+t:e}t!==void 0&&t.exports?(n.default=n,t.exports=n):typeof define==`function`&&typeof define.amd==`object`&&define.amd?define(`classnames`,[],function(){return n}):window.classNames=n})()})),rt=t((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.default=void 0;var t=n(nt());function n(e){return e&&e.__esModule?e:{default:e}}function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}e.default={ROOT:function(e){return(0,t.default)(r({"carousel-root":!0},e||``,!!e))},CAROUSEL:function(e){return(0,t.default)({carousel:!0,"carousel-slider":e})},WRAPPER:function(e,n){return(0,t.default)({"thumbs-wrapper":!e,"slider-wrapper":e,"axis-horizontal":n===`horizontal`,"axis-vertical":n!==`horizontal`})},SLIDER:function(e,n){return(0,t.default)({thumbs:!e,slider:e,animated:!n})},ITEM:function(e,n,r){return(0,t.default)({thumb:!e,slide:e,selected:n,previous:r})},ARROW_PREV:function(e){return(0,t.default)({"control-arrow control-prev":!0,"control-disabled":e})},ARROW_NEXT:function(e){return(0,t.default)({"control-arrow control-next":!0,"control-disabled":e})},DOT:function(e){return(0,t.default)({dot:!0,selected:e})}}})),it=t((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.outerWidth=void 0,e.outerWidth=function(e){var t=e.offsetWidth,n=getComputedStyle(e);return t+=parseInt(n.marginLeft)+parseInt(n.marginRight),t}})),at=t((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.default=void 0,e.default=function(e,t,n){var r=e===0?e:e+t;return`translate3d`+(`(`+(n===`horizontal`?[r,0,0]:[0,r,0]).join(`,`)+`)`)}})),ot=t((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.default=void 0,e.default=function(){return window}})),st=t((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.default=void 0;var t=u(r()),n=c(rt()),i=it(),a=c(at()),o=c(tt()),s=c(ot());function c(e){return e&&e.__esModule?e:{default:e}}function l(){if(typeof WeakMap!=`function`)return null;var e=new WeakMap;return l=function(){return e},e}function u(e){if(e&&e.__esModule)return e;if(e===null||d(e)!==`object`&&typeof e!=`function`)return{default:e};var t=l();if(t&&t.has(e))return t.get(e);var n={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if(Object.prototype.hasOwnProperty.call(e,i)){var a=r?Object.getOwnPropertyDescriptor(e,i):null;a&&(a.get||a.set)?Object.defineProperty(n,i,a):n[i]=e[i]}return n.default=e,t&&t.set(e,n),n}function d(e){"@babel/helpers - typeof";return d=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},d(e)}function f(){return f=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},f.apply(this,arguments)}function p(e,t){if(!(e instanceof t))throw TypeError(`Cannot call a class as a function`)}function m(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,`value`in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function h(e,t,n){return t&&m(e.prototype,t),n&&m(e,n),e}function g(e,t){if(typeof t!=`function`&&t!==null)throw TypeError(`Super expression must either be null or a function`);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&_(e,t)}function _(e,t){return _=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},_(e,t)}function v(e){var t=x();return function(){var n=S(e),r;if(t){var i=S(this).constructor;r=Reflect.construct(n,arguments,i)}else r=n.apply(this,arguments);return y(this,r)}}function y(e,t){return t&&(d(t)===`object`||typeof t==`function`)?t:b(e)}function b(e){if(e===void 0)throw ReferenceError(`this hasn't been initialised - super() hasn't been called`);return e}function x(){if(typeof Reflect>`u`||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy==`function`)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch{return!1}}function S(e){return S=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},S(e)}function C(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var w=function(e){return e.hasOwnProperty(`key`)},T=function(e){g(c,e);var r=v(c);function c(e){var n;return p(this,c),n=r.call(this,e),C(b(n),`itemsWrapperRef`,void 0),C(b(n),`itemsListRef`,void 0),C(b(n),`thumbsRef`,void 0),C(b(n),`setItemsWrapperRef`,function(e){n.itemsWrapperRef=e}),C(b(n),`setItemsListRef`,function(e){n.itemsListRef=e}),C(b(n),`setThumbsRef`,function(e,t){n.thumbsRef||=[],n.thumbsRef[t]=e}),C(b(n),`updateSizes`,function(){if(!(!n.props.children||!n.itemsWrapperRef||!n.thumbsRef)){var e=t.Children.count(n.props.children),r=n.itemsWrapperRef.clientWidth,a=n.props.thumbWidth?n.props.thumbWidth:(0,i.outerWidth)(n.thumbsRef[0]),o=Math.floor(r/a),s=o<e,c=s?e-o:0;n.setState(function(e,t){return{itemSize:a,visibleItems:o,firstItem:s?n.getFirstItem(t.selectedItem):0,lastPosition:c,showArrows:s}})}}),C(b(n),`handleClickItem`,function(e,t,r){if(!w(r)||r.key===`Enter`){var i=n.props.onSelectItem;typeof i==`function`&&i(e,t)}}),C(b(n),`onSwipeStart`,function(){n.setState({swiping:!0})}),C(b(n),`onSwipeEnd`,function(){n.setState({swiping:!1})}),C(b(n),`onSwipeMove`,function(e){var r=e.x;if(!n.state.itemSize||!n.itemsWrapperRef||!n.state.visibleItems)return!1;var i=0,o=t.Children.count(n.props.children),s=-(n.state.firstItem*100)/n.state.visibleItems,c=-Math.max(o-n.state.visibleItems,0)*100/n.state.visibleItems;s===i&&r>0&&(r=0),s===c&&r<0&&(r=0);var l=s+100/(n.itemsWrapperRef.clientWidth/r);return n.itemsListRef&&[`WebkitTransform`,`MozTransform`,`MsTransform`,`OTransform`,`transform`,`msTransform`].forEach(function(e){n.itemsListRef.style[e]=(0,a.default)(l,`%`,n.props.axis)}),!0}),C(b(n),`slideRight`,function(e){n.moveTo(n.state.firstItem-(typeof e==`number`?e:1))}),C(b(n),`slideLeft`,function(e){n.moveTo(n.state.firstItem+(typeof e==`number`?e:1))}),C(b(n),`moveTo`,function(e){e=e<0?0:e,e=e>=n.state.lastPosition?n.state.lastPosition:e,n.setState({firstItem:e})}),n.state={selectedItem:e.selectedItem,swiping:!1,showArrows:!1,firstItem:0,visibleItems:0,lastPosition:0},n}return h(c,[{key:`componentDidMount`,value:function(){this.setupThumbs()}},{key:`componentDidUpdate`,value:function(e){this.props.selectedItem!==this.state.selectedItem&&this.setState({selectedItem:this.props.selectedItem,firstItem:this.getFirstItem(this.props.selectedItem)}),this.props.children!==e.children&&this.updateSizes()}},{key:`componentWillUnmount`,value:function(){this.destroyThumbs()}},{key:`setupThumbs`,value:function(){(0,s.default)().addEventListener(`resize`,this.updateSizes),(0,s.default)().addEventListener(`DOMContentLoaded`,this.updateSizes),this.updateSizes()}},{key:`destroyThumbs`,value:function(){(0,s.default)().removeEventListener(`resize`,this.updateSizes),(0,s.default)().removeEventListener(`DOMContentLoaded`,this.updateSizes)}},{key:`getFirstItem`,value:function(e){var t=e;return e>=this.state.lastPosition&&(t=this.state.lastPosition),e<this.state.firstItem+this.state.visibleItems&&(t=this.state.firstItem),e<this.state.firstItem&&(t=e),t}},{key:`renderItems`,value:function(){var e=this;return this.props.children.map(function(r,i){var a={key:i,ref:function(t){return e.setThumbsRef(t,i)},className:n.default.ITEM(!1,i===e.state.selectedItem),onClick:e.handleClickItem.bind(e,i,e.props.children[i]),onKeyDown:e.handleClickItem.bind(e,i,e.props.children[i]),"aria-label":`${e.props.labels.item} ${i+1}`,style:{width:e.props.thumbWidth}};return t.default.createElement(`li`,f({},a,{role:`button`,tabIndex:0}),r)})}},{key:`render`,value:function(){var e=this;if(!this.props.children)return null;var r=t.Children.count(this.props.children)>1,i=this.state.showArrows&&this.state.firstItem>0,s=this.state.showArrows&&this.state.firstItem<this.state.lastPosition,c={},l=-this.state.firstItem*(this.state.itemSize||0),u=(0,a.default)(l,`px`,this.props.axis),d=this.props.transitionTime+`ms`;return c={WebkitTransform:u,MozTransform:u,MsTransform:u,OTransform:u,transform:u,msTransform:u,WebkitTransitionDuration:d,MozTransitionDuration:d,MsTransitionDuration:d,OTransitionDuration:d,transitionDuration:d,msTransitionDuration:d},t.default.createElement(`div`,{className:n.default.CAROUSEL(!1)},t.default.createElement(`div`,{className:n.default.WRAPPER(!1),ref:this.setItemsWrapperRef},t.default.createElement(`button`,{type:`button`,className:n.default.ARROW_PREV(!i),onClick:function(){return e.slideRight()},"aria-label":this.props.labels.leftArrow}),r?t.default.createElement(o.default,{tagName:`ul`,className:n.default.SLIDER(!1,this.state.swiping),onSwipeLeft:this.slideLeft,onSwipeRight:this.slideRight,onSwipeMove:this.onSwipeMove,onSwipeStart:this.onSwipeStart,onSwipeEnd:this.onSwipeEnd,style:c,innerRef:this.setItemsListRef,allowMouseEvents:this.props.emulateTouch},this.renderItems()):t.default.createElement(`ul`,{className:n.default.SLIDER(!1,this.state.swiping),ref:function(t){return e.setItemsListRef(t)},style:c},this.renderItems()),t.default.createElement(`button`,{type:`button`,className:n.default.ARROW_NEXT(!s),onClick:function(){return e.slideLeft()},"aria-label":this.props.labels.rightArrow})))}}]),c}(t.Component);e.default=T,C(T,`displayName`,`Thumbs`),C(T,`defaultProps`,{axis:`horizontal`,labels:{leftArrow:`previous slide / item`,rightArrow:`next slide / item`,item:`slide item`},selectedItem:0,thumbWidth:80,transitionTime:350})})),ct=t((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.default=void 0,e.default=function(){return document}})),lt=t((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.setPosition=e.getPosition=e.isKeyboardEvent=e.defaultStatusFormatter=e.noop=void 0;var t=r(),n=i(at());function i(e){return e&&e.__esModule?e:{default:e}}e.noop=function(){},e.defaultStatusFormatter=function(e,t){return`${e} of ${t}`},e.isKeyboardEvent=function(e){return e?e.hasOwnProperty(`key`):!1},e.getPosition=function(e,n){if(n.infiniteLoop&&++e,e===0)return 0;var r=t.Children.count(n.children);if(n.centerMode&&n.axis===`horizontal`){var i=-e*n.centerSlidePercentage,a=r-1;return e&&(e!==a||n.infiniteLoop)?i+=(100-n.centerSlidePercentage)/2:e===a&&(i+=100-n.centerSlidePercentage),i}return-e*100},e.setPosition=function(e,t){var r={};return[`WebkitTransform`,`MozTransform`,`MsTransform`,`OTransform`,`transform`,`msTransform`].forEach(function(i){r[i]=(0,n.default)(e,`%`,t)}),r}})),ut=t((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.fadeAnimationHandler=e.slideStopSwipingHandler=e.slideSwipeAnimationHandler=e.slideAnimationHandler=void 0;var t=r(),n=a(at()),i=lt();function a(e){return e&&e.__esModule?e:{default:e}}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function s(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?o(Object(n),!0).forEach(function(t){c(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function c(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}e.slideAnimationHandler=function(e,r){var a={},o=r.selectedItem,c=o,l=t.Children.count(e.children)-1;if(e.infiniteLoop&&(o<0||o>l))return c<0?e.centerMode&&e.centerSlidePercentage&&e.axis===`horizontal`?a.itemListStyle=(0,i.setPosition)(-(l+2)*e.centerSlidePercentage-(100-e.centerSlidePercentage)/2,e.axis):a.itemListStyle=(0,i.setPosition)(-(l+2)*100,e.axis):c>l&&(a.itemListStyle=(0,i.setPosition)(0,e.axis)),a;var u=(0,i.getPosition)(o,e),d=(0,n.default)(u,`%`,e.axis),f=e.transitionTime+`ms`;return a.itemListStyle={WebkitTransform:d,msTransform:d,OTransform:d,transform:d},r.swiping||(a.itemListStyle=s(s({},a.itemListStyle),{},{WebkitTransitionDuration:f,MozTransitionDuration:f,OTransitionDuration:f,transitionDuration:f,msTransitionDuration:f})),a},e.slideSwipeAnimationHandler=function(e,n,r,a){var o={},s=n.axis===`horizontal`,c=t.Children.count(n.children),l=0,u=(0,i.getPosition)(r.selectedItem,n),d=n.infiniteLoop?(0,i.getPosition)(c-1,n)-100:(0,i.getPosition)(c-1,n),f=s?e.x:e.y,p=f;u===l&&f>0&&(p=0),u===d&&f<0&&(p=0);var m=u+100/(r.itemSize/p),h=Math.abs(f)>n.swipeScrollTolerance;return n.infiniteLoop&&h&&(r.selectedItem===0&&m>-100?m-=c*100:r.selectedItem===c-1&&m<-c*100&&(m+=c*100)),(!n.preventMovementUntilSwipeScrollTolerance||h||r.swipeMovementStarted)&&(r.swipeMovementStarted||a({swipeMovementStarted:!0}),o.itemListStyle=(0,i.setPosition)(m,n.axis)),h&&!r.cancelClick&&a({cancelClick:!0}),o},e.slideStopSwipingHandler=function(e,t){var n=(0,i.getPosition)(t.selectedItem,e);return{itemListStyle:(0,i.setPosition)(n,e.axis)}},e.fadeAnimationHandler=function(e,t){var n=e.transitionTime+`ms`,r=`ease-in-out`,i={position:`absolute`,display:`block`,zIndex:-2,minHeight:`100%`,opacity:0,top:0,right:0,left:0,bottom:0,transitionTimingFunction:r,msTransitionTimingFunction:r,MozTransitionTimingFunction:r,WebkitTransitionTimingFunction:r,OTransitionTimingFunction:r};return t.swiping||(i=s(s({},i),{},{WebkitTransitionDuration:n,MozTransitionDuration:n,OTransitionDuration:n,transitionDuration:n,msTransitionDuration:n})),{slideStyle:i,selectedStyle:s(s({},i),{},{opacity:1,position:`relative`}),prevStyle:s({},i)}}})),dt=t((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),e.default=void 0;var t=f(r()),n=u(tt()),i=u(rt()),a=u(st()),o=u(ct()),s=u(ot()),c=lt(),l=ut();function u(e){return e&&e.__esModule?e:{default:e}}function d(){if(typeof WeakMap!=`function`)return null;var e=new WeakMap;return d=function(){return e},e}function f(e){if(e&&e.__esModule)return e;if(e===null||p(e)!==`object`&&typeof e!=`function`)return{default:e};var t=d();if(t&&t.has(e))return t.get(e);var n={},r=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in e)if(Object.prototype.hasOwnProperty.call(e,i)){var a=r?Object.getOwnPropertyDescriptor(e,i):null;a&&(a.get||a.set)?Object.defineProperty(n,i,a):n[i]=e[i]}return n.default=e,t&&t.set(e,n),n}function p(e){"@babel/helpers - typeof";return p=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},p(e)}function m(){return m=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},m.apply(this,arguments)}function h(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function g(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?h(Object(n),!0).forEach(function(t){D(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):h(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function _(e,t){if(!(e instanceof t))throw TypeError(`Cannot call a class as a function`)}function v(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,`value`in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function y(e,t,n){return t&&v(e.prototype,t),n&&v(e,n),e}function b(e,t){if(typeof t!=`function`&&t!==null)throw TypeError(`Super expression must either be null or a function`);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&x(e,t)}function x(e,t){return x=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},x(e,t)}function S(e){var t=T();return function(){var n=E(e),r;if(t){var i=E(this).constructor;r=Reflect.construct(n,arguments,i)}else r=n.apply(this,arguments);return C(this,r)}}function C(e,t){return t&&(p(t)===`object`||typeof t==`function`)?t:w(e)}function w(e){if(e===void 0)throw ReferenceError(`this hasn't been initialised - super() hasn't been called`);return e}function T(){if(typeof Reflect>`u`||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy==`function`)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],function(){})),!0}catch{return!1}}function E(e){return E=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},E(e)}function D(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var O=function(e){b(u,e);var r=S(u);function u(e){var n;_(this,u),n=r.call(this,e),D(w(n),`thumbsRef`,void 0),D(w(n),`carouselWrapperRef`,void 0),D(w(n),`listRef`,void 0),D(w(n),`itemsRef`,void 0),D(w(n),`timer`,void 0),D(w(n),`animationHandler`,void 0),D(w(n),`setThumbsRef`,function(e){n.thumbsRef=e}),D(w(n),`setCarouselWrapperRef`,function(e){n.carouselWrapperRef=e}),D(w(n),`setListRef`,function(e){n.listRef=e}),D(w(n),`setItemsRef`,function(e,t){n.itemsRef||=[],n.itemsRef[t]=e}),D(w(n),`autoPlay`,function(){t.Children.count(n.props.children)<=1||(n.clearAutoPlay(),n.props.autoPlay&&(n.timer=setTimeout(function(){n.increment()},n.props.interval)))}),D(w(n),`clearAutoPlay`,function(){n.timer&&clearTimeout(n.timer)}),D(w(n),`resetAutoPlay`,function(){n.clearAutoPlay(),n.autoPlay()}),D(w(n),`stopOnHover`,function(){n.setState({isMouseEntered:!0},n.clearAutoPlay)}),D(w(n),`startOnLeave`,function(){n.setState({isMouseEntered:!1},n.autoPlay)}),D(w(n),`isFocusWithinTheCarousel`,function(){return n.carouselWrapperRef?!!((0,o.default)().activeElement===n.carouselWrapperRef||n.carouselWrapperRef.contains((0,o.default)().activeElement)):!1}),D(w(n),`navigateWithKeyboard`,function(e){if(n.isFocusWithinTheCarousel()){var t=n.props.axis===`horizontal`,r={ArrowUp:38,ArrowRight:39,ArrowDown:40,ArrowLeft:37},i=t?r.ArrowRight:r.ArrowDown,a=t?r.ArrowLeft:r.ArrowUp;i===e.keyCode?n.increment():a===e.keyCode&&n.decrement()}}),D(w(n),`updateSizes`,function(){if(!(!n.state.initialized||!n.itemsRef||n.itemsRef.length===0)){var e=n.props.axis===`horizontal`,t=n.itemsRef[0];if(t){var r=e?t.clientWidth:t.clientHeight;n.setState({itemSize:r}),n.thumbsRef&&n.thumbsRef.updateSizes()}}}),D(w(n),`setMountState`,function(){n.setState({hasMount:!0}),n.updateSizes()}),D(w(n),`handleClickItem`,function(e,r){if(t.Children.count(n.props.children)!==0){if(n.state.cancelClick){n.setState({cancelClick:!1});return}n.props.onClickItem(e,r),e!==n.state.selectedItem&&n.setState({selectedItem:e})}}),D(w(n),`handleOnChange`,function(e,r){t.Children.count(n.props.children)<=1||n.props.onChange(e,r)}),D(w(n),`handleClickThumb`,function(e,t){n.props.onClickThumb(e,t),n.moveTo(e)}),D(w(n),`onSwipeStart`,function(e){n.setState({swiping:!0}),n.props.onSwipeStart(e)}),D(w(n),`onSwipeEnd`,function(e){n.setState({swiping:!1,cancelClick:!1,swipeMovementStarted:!1}),n.props.onSwipeEnd(e),n.clearAutoPlay(),n.state.autoPlay&&n.autoPlay()}),D(w(n),`onSwipeMove`,function(e,t){n.props.onSwipeMove(t);var r=n.props.swipeAnimationHandler(e,n.props,n.state,n.setState.bind(w(n)));return n.setState(g({},r)),!!Object.keys(r).length}),D(w(n),`decrement`,function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:1;n.moveTo(n.state.selectedItem-(typeof e==`number`?e:1))}),D(w(n),`increment`,function(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:1;n.moveTo(n.state.selectedItem+(typeof e==`number`?e:1))}),D(w(n),`moveTo`,function(e){if(typeof e==`number`){var r=t.Children.count(n.props.children)-1;e<0&&(e=n.props.infiniteLoop?r:0),e>r&&(e=n.props.infiniteLoop?0:r),n.selectItem({selectedItem:e}),n.state.autoPlay&&n.state.isMouseEntered===!1&&n.resetAutoPlay()}}),D(w(n),`onClickNext`,function(){n.increment(1)}),D(w(n),`onClickPrev`,function(){n.decrement(1)}),D(w(n),`onSwipeForward`,function(){n.increment(1),n.props.emulateTouch&&n.setState({cancelClick:!0})}),D(w(n),`onSwipeBackwards`,function(){n.decrement(1),n.props.emulateTouch&&n.setState({cancelClick:!0})}),D(w(n),`changeItem`,function(e){return function(t){(!(0,c.isKeyboardEvent)(t)||t.key===`Enter`)&&n.moveTo(e)}}),D(w(n),`selectItem`,function(e){n.setState(g({previousItem:n.state.selectedItem},e),function(){n.setState(n.animationHandler(n.props,n.state))}),n.handleOnChange(e.selectedItem,t.Children.toArray(n.props.children)[e.selectedItem])}),D(w(n),`getInitialImage`,function(){var e=n.props.selectedItem,t=n.itemsRef&&n.itemsRef[e];return(t&&t.getElementsByTagName(`img`)||[])[0]}),D(w(n),`getVariableItemHeight`,function(e){var t=n.itemsRef&&n.itemsRef[e];if(n.state.hasMount&&t&&t.children.length){var r=t.children[0].getElementsByTagName(`img`)||[];if(r.length>0){var i=r[0];i.complete||i.addEventListener(`load`,function e(){n.forceUpdate(),i.removeEventListener(`load`,e)})}var a=(r[0]||t.children[0]).clientHeight;return a>0?a:null}return null});var i={initialized:!1,previousItem:e.selectedItem,selectedItem:e.selectedItem,hasMount:!1,isMouseEntered:!1,autoPlay:e.autoPlay,swiping:!1,swipeMovementStarted:!1,cancelClick:!1,itemSize:1,itemListStyle:{},slideStyle:{},selectedStyle:{},prevStyle:{}};return n.animationHandler=typeof e.animationHandler==`function`&&e.animationHandler||e.animationHandler===`fade`&&l.fadeAnimationHandler||l.slideAnimationHandler,n.state=g(g({},i),n.animationHandler(e,i)),n}return y(u,[{key:`componentDidMount`,value:function(){this.props.children&&this.setupCarousel()}},{key:`componentDidUpdate`,value:function(e,t){!e.children&&this.props.children&&!this.state.initialized&&this.setupCarousel(),!e.autoFocus&&this.props.autoFocus&&this.forceFocus(),t.swiping&&!this.state.swiping&&this.setState(g({},this.props.stopSwipingHandler(this.props,this.state))),(e.selectedItem!==this.props.selectedItem||e.centerMode!==this.props.centerMode)&&(this.updateSizes(),this.moveTo(this.props.selectedItem)),e.autoPlay!==this.props.autoPlay&&(this.props.autoPlay?this.setupAutoPlay():this.destroyAutoPlay(),this.setState({autoPlay:this.props.autoPlay}))}},{key:`componentWillUnmount`,value:function(){this.destroyCarousel()}},{key:`setupCarousel`,value:function(){var e=this;this.bindEvents(),this.state.autoPlay&&t.Children.count(this.props.children)>1&&this.setupAutoPlay(),this.props.autoFocus&&this.forceFocus(),this.setState({initialized:!0},function(){var t=e.getInitialImage();t&&!t.complete?t.addEventListener(`load`,e.setMountState):e.setMountState()})}},{key:`destroyCarousel`,value:function(){this.state.initialized&&(this.unbindEvents(),this.destroyAutoPlay())}},{key:`setupAutoPlay`,value:function(){this.autoPlay();var e=this.carouselWrapperRef;this.props.stopOnHover&&e&&(e.addEventListener(`mouseenter`,this.stopOnHover),e.addEventListener(`mouseleave`,this.startOnLeave))}},{key:`destroyAutoPlay`,value:function(){this.clearAutoPlay();var e=this.carouselWrapperRef;this.props.stopOnHover&&e&&(e.removeEventListener(`mouseenter`,this.stopOnHover),e.removeEventListener(`mouseleave`,this.startOnLeave))}},{key:`bindEvents`,value:function(){(0,s.default)().addEventListener(`resize`,this.updateSizes),(0,s.default)().addEventListener(`DOMContentLoaded`,this.updateSizes),this.props.useKeyboardArrows&&(0,o.default)().addEventListener(`keydown`,this.navigateWithKeyboard)}},{key:`unbindEvents`,value:function(){(0,s.default)().removeEventListener(`resize`,this.updateSizes),(0,s.default)().removeEventListener(`DOMContentLoaded`,this.updateSizes);var e=this.getInitialImage();e&&e.removeEventListener(`load`,this.setMountState),this.props.useKeyboardArrows&&(0,o.default)().removeEventListener(`keydown`,this.navigateWithKeyboard)}},{key:`forceFocus`,value:function(){var e;(e=this.carouselWrapperRef)==null||e.focus()}},{key:`renderItems`,value:function(e){var n=this;return this.props.children?t.Children.map(this.props.children,function(r,a){var o=a===n.state.selectedItem,s=a===n.state.previousItem,c=o&&n.state.selectedStyle||s&&n.state.prevStyle||n.state.slideStyle||{};n.props.centerMode&&n.props.axis===`horizontal`&&(c=g(g({},c),{},{minWidth:n.props.centerSlidePercentage+`%`})),n.state.swiping&&n.state.swipeMovementStarted&&(c=g(g({},c),{},{pointerEvents:`none`}));var l={ref:function(e){return n.setItemsRef(e,a)},key:`itemKey`+a+(e?`clone`:``),className:i.default.ITEM(!0,a===n.state.selectedItem,a===n.state.previousItem),onClick:n.handleClickItem.bind(n,a,r),style:c};return t.default.createElement(`li`,l,n.props.renderItem(r,{isSelected:a===n.state.selectedItem,isPrevious:a===n.state.previousItem}))}):[]}},{key:`renderControls`,value:function(){var e=this,n=this.props,r=n.showIndicators,i=n.labels,a=n.renderIndicator,o=n.children;return r?t.default.createElement(`ul`,{className:`control-dots`},t.Children.map(o,function(t,n){return a&&a(e.changeItem(n),n===e.state.selectedItem,n,i.item)})):null}},{key:`renderStatus`,value:function(){return this.props.showStatus?t.default.createElement(`p`,{className:`carousel-status`},this.props.statusFormatter(this.state.selectedItem+1,t.Children.count(this.props.children))):null}},{key:`renderThumbs`,value:function(){return!this.props.showThumbs||!this.props.children||t.Children.count(this.props.children)===0?null:t.default.createElement(a.default,{ref:this.setThumbsRef,onSelectItem:this.handleClickThumb,selectedItem:this.state.selectedItem,transitionTime:this.props.transitionTime,thumbWidth:this.props.thumbWidth,labels:this.props.labels,emulateTouch:this.props.emulateTouch},this.props.renderThumbs(this.props.children))}},{key:`render`,value:function(){var e=this;if(!this.props.children||t.Children.count(this.props.children)===0)return null;var r=this.props.swipeable&&t.Children.count(this.props.children)>1,a=this.props.axis===`horizontal`,o=this.props.showArrows&&t.Children.count(this.props.children)>1,s=o&&(this.state.selectedItem>0||this.props.infiniteLoop)||!1,c=o&&(this.state.selectedItem<t.Children.count(this.props.children)-1||this.props.infiniteLoop)||!1,l=this.renderItems(!0),u=l.shift(),d=l.pop(),f={className:i.default.SLIDER(!0,this.state.swiping),onSwipeMove:this.onSwipeMove,onSwipeStart:this.onSwipeStart,onSwipeEnd:this.onSwipeEnd,style:this.state.itemListStyle,tolerance:this.props.swipeScrollTolerance},p={};return a?(f.onSwipeLeft=this.onSwipeForward,f.onSwipeRight=this.onSwipeBackwards,this.props.dynamicHeight&&(p.height=this.getVariableItemHeight(this.state.selectedItem)||`auto`)):(f.onSwipeUp=this.props.verticalSwipe===`natural`?this.onSwipeBackwards:this.onSwipeForward,f.onSwipeDown=this.props.verticalSwipe===`natural`?this.onSwipeForward:this.onSwipeBackwards,f.style=g(g({},f.style),{},{height:this.state.itemSize}),p.height=this.state.itemSize),t.default.createElement(`div`,{"aria-label":this.props.ariaLabel,className:i.default.ROOT(this.props.className),ref:this.setCarouselWrapperRef,tabIndex:this.props.useKeyboardArrows?0:void 0},t.default.createElement(`div`,{className:i.default.CAROUSEL(!0),style:{width:this.props.width}},this.renderControls(),this.props.renderArrowPrev(this.onClickPrev,s,this.props.labels.leftArrow),t.default.createElement(`div`,{className:i.default.WRAPPER(!0,this.props.axis),style:p},r?t.default.createElement(n.default,m({tagName:`ul`,innerRef:this.setListRef},f,{allowMouseEvents:this.props.emulateTouch}),this.props.infiniteLoop&&d,this.renderItems(),this.props.infiniteLoop&&u):t.default.createElement(`ul`,{className:i.default.SLIDER(!0,this.state.swiping),ref:function(t){return e.setListRef(t)},style:this.state.itemListStyle||{}},this.props.infiniteLoop&&d,this.renderItems(),this.props.infiniteLoop&&u)),this.props.renderArrowNext(this.onClickNext,c,this.props.labels.rightArrow),this.renderStatus()),this.renderThumbs())}}]),u}(t.default.Component);e.default=O,D(O,`displayName`,`Carousel`),D(O,`defaultProps`,{ariaLabel:void 0,axis:`horizontal`,centerSlidePercentage:80,interval:3e3,labels:{leftArrow:`previous slide / item`,rightArrow:`next slide / item`,item:`slide item`},onClickItem:c.noop,onClickThumb:c.noop,onChange:c.noop,onSwipeStart:function(){},onSwipeEnd:function(){},onSwipeMove:function(){return!1},preventMovementUntilSwipeScrollTolerance:!1,renderArrowPrev:function(e,n,r){return t.default.createElement(`button`,{type:`button`,"aria-label":r,className:i.default.ARROW_PREV(!n),onClick:e})},renderArrowNext:function(e,n,r){return t.default.createElement(`button`,{type:`button`,"aria-label":r,className:i.default.ARROW_NEXT(!n),onClick:e})},renderIndicator:function(e,n,r,a){return t.default.createElement(`li`,{className:i.default.DOT(n),onClick:e,onKeyDown:e,value:r,key:r,role:`button`,tabIndex:0,"aria-label":`${a} ${r+1}`})},renderItem:function(e){return e},renderThumbs:function(e){var n=t.Children.map(e,function(e){var n=e;if(e.type!==`img`&&(n=t.Children.toArray(e.props.children).find(function(e){return e.type===`img`})),n)return n});return n.filter(function(e){return e}).length===0?(console.warn(`No images found! Can't build the thumb list without images. If you don't need thumbs, set showThumbs={false} in the Carousel. Note that it's not possible to get images rendered inside custom components. More info at https://github.com/leandrowd/react-responsive-carousel/blob/master/TROUBLESHOOTING.md`),[]):n},statusFormatter:c.defaultStatusFormatter,selectedItem:0,showArrows:!0,showIndicators:!0,showStatus:!0,showThumbs:!0,stopOnHover:!0,swipeScrollTolerance:5,swipeable:!0,transitionTime:350,verticalSwipe:`standard`,width:`100%`,animationHandler:`slide`,swipeAnimationHandler:l.slideSwipeAnimationHandler,stopSwipingHandler:l.slideStopSwipingHandler})})),ft=t((()=>{})),pt=t((e=>{Object.defineProperty(e,`__esModule`,{value:!0}),Object.defineProperty(e,`Carousel`,{enumerable:!0,get:function(){return t.default}}),Object.defineProperty(e,`CarouselProps`,{enumerable:!0,get:function(){return n.CarouselProps}}),Object.defineProperty(e,`Thumbs`,{enumerable:!0,get:function(){return r.default}});var t=i(dt()),n=ft(),r=i(st());function i(e){return e&&e.__esModule?e:{default:e}}})),mt=t(((e,t)=>{var n=xe();t.exports=function(){return n.Date.now()}})),ht=t(((e,t)=>{var n=/\s/;function r(e){for(var t=e.length;t--&&n.test(e.charAt(t)););return t}t.exports=r})),gt=t(((e,t)=>{var n=ht(),r=/^\s+/;function i(e){return e&&e.slice(0,n(e)+1).replace(r,``)}t.exports=i})),_t=t(((e,t)=>{var n=gt(),r=I(),i=ne(),a=NaN,o=/^[-+]0x[0-9a-f]+$/i,s=/^0b[01]+$/i,c=/^0o[0-7]+$/i,l=parseInt;function u(e){if(typeof e==`number`)return e;if(i(e))return a;if(r(e)){var t=typeof e.valueOf==`function`?e.valueOf():e;e=r(t)?t+``:t}if(typeof e!=`string`)return e===0?e:+e;e=n(e);var u=s.test(e);return u||c.test(e)?l(e.slice(2),u?2:8):o.test(e)?a:+e}t.exports=u})),vt=t(((e,t)=>{var n=I(),r=mt(),i=_t(),a=`Expected a function`,o=Math.max,s=Math.min;function c(e,t,c){var l,u,d,f,p,m,h=0,g=!1,_=!1,v=!0;if(typeof e!=`function`)throw TypeError(a);t=i(t)||0,n(c)&&(g=!!c.leading,_=`maxWait`in c,d=_?o(i(c.maxWait)||0,t):d,v=`trailing`in c?!!c.trailing:v);function y(t){var n=l,r=u;return l=u=void 0,h=t,f=e.apply(r,n),f}function b(e){return h=e,p=setTimeout(C,t),g?y(e):f}function x(e){var n=e-m,r=e-h,i=t-n;return _?s(i,d-r):i}function S(e){var n=e-m,r=e-h;return m===void 0||n>=t||n<0||_&&r>=d}function C(){var e=r();if(S(e))return w(e);p=setTimeout(C,x(e))}function w(e){return p=void 0,v&&l?y(e):(l=u=void 0,f)}function T(){p!==void 0&&clearTimeout(p),h=0,l=m=u=p=void 0}function E(){return p===void 0?f:w(r())}function D(){var e=r(),n=S(e);if(l=arguments,u=this,m=e,n){if(p===void 0)return b(m);if(_)return clearTimeout(p),p=setTimeout(C,t),y(m)}return p===void 0&&(p=setTimeout(C,t)),f}return D.cancel=T,D.flush=E,D}t.exports=c})),yt=e(vt(),1);function bt(e,t,n,r,i=!1){let a=K.useRef();a.current=t,K.useEffect(()=>{if(n===null||n.addEventListener===void 0)return;let t=n,o=e=>{a.current?.call(t,e)};return t.addEventListener(e,o,{passive:r,capture:i}),()=>{t.removeEventListener(e,o,{capture:i})}},[e,n,r,i])}function xt(e,t){return e===void 0?void 0:t}var St=Math.PI;function Ct(e){return e*St/180}var wt=(e,t,n)=>({x1:e-n/2,y1:t-n/2,x2:e+n/2,y2:t+n/2}),Tt=(e,t,n,r,i)=>{switch(e){case`left`:return Math.floor(t)+r+i/2;case`center`:return Math.floor(t+n/2);case`right`:return Math.floor(t+n)-r-i/2}},Et=(e,t,n)=>Math.min(e,t-n*2),Dt=(e,t,n)=>n.x1<=e&&e<=n.x2&&n.y1<=t&&t<=n.y2,Ot=e=>{let t=e.fgColor??`currentColor`;return K.createElement(`svg`,{viewBox:`0 0 24 24`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`},K.createElement(`path`,{d:`M12.7073 7.05029C7.87391 11.8837 10.4544 9.30322 6.03024 13.7273C5.77392 13.9836 5.58981 14.3071 5.50189 14.6587L4.52521 18.5655C4.38789 19.1148 4.88543 19.6123 5.43472 19.475L9.34146 18.4983C9.69313 18.4104 10.0143 18.2286 10.2706 17.9722L16.9499 11.2929`,stroke:t,strokeWidth:`1.5`,strokeLinecap:`round`,strokeLinejoin:`round`,fill:`none`,vectorEffect:`non-scaling-stroke`}),K.createElement(`path`,{d:`M20.4854 4.92901L19.0712 3.5148C18.2901 2.73375 17.0238 2.73375 16.2428 3.5148L14.475 5.28257C15.5326 7.71912 16.4736 8.6278 18.7176 9.52521L20.4854 7.75744C21.2665 6.97639 21.2665 5.71006 20.4854 4.92901Z`,stroke:t,strokeWidth:`1.5`,strokeLinecap:`round`,strokeLinejoin:`round`,fill:`none`,vectorEffect:`non-scaling-stroke`}))},kt=e=>{let t=e.fgColor??`currentColor`;return K.createElement(`svg`,{viewBox:`0 0 24 24`,fill:`none`,xmlns:`http://www.w3.org/2000/svg`},K.createElement(`path`,{d:`M19 6L10.3802 17L5.34071 11.8758`,vectorEffect:`non-scaling-stroke`,stroke:t,strokeWidth:`1.5`,strokeLinecap:`round`,strokeLinejoin:`round`}))};function At(e,t,n){let[r,i]=K.useState(e),a=K.useRef(!0);K.useEffect(()=>()=>{a.current=!1},[]);let o=K.useRef((0,yt.default)(e=>{a.current&&i(e)},n));return K.useLayoutEffect(()=>{a.current&&o.current(()=>e())},t),r}var jt=RegExp(`^[^A-Za-zÀ-ÖØ-öø-ʸ̀-֐ࠀ-῿‎Ⰰ-﬜︀-﹯﻽-￿]*[֑-߿יִ-﷽ﹰ-ﻼ]`);function Mt(e){return jt.test(e)?`rtl`:`not-rtl`}var Nt=void 0;function Pt(){if(typeof document>`u`)return 0;if(Nt!==void 0)return Nt;let e=document.createElement(`p`);e.style.width=`100%`,e.style.height=`200px`;let t=document.createElement(`div`);t.id=`testScrollbar`,t.style.position=`absolute`,t.style.top=`0px`,t.style.left=`0px`,t.style.visibility=`hidden`,t.style.width=`200px`,t.style.height=`150px`,t.style.overflow=`hidden`,t.append(e),document.body.append(t);let n=e.offsetWidth;t.style.overflow=`scroll`;let r=e.offsetWidth;return n===r&&(r=t.clientWidth),t.remove(),Nt=n-r,Nt}var Ft=Symbol();function It(e){let t=K.useRef([Ft,e]);t.current[1]!==e&&(t.current[0]=e),t.current[1]=e;let[n,r]=K.useState(e),[,i]=K.useState(),a=K.useCallback(e=>{let n=t.current[0];n!==Ft&&(e=typeof e==`function`?e(n):e,e===n)||(n!==Ft&&i({}),r(t=>typeof e==`function`?e(n===Ft?t:n):e),t.current[0]=Ft)},[]),o=K.useCallback(()=>{t.current[0]=Ft,i({})},[]);return[t.current[0]===Ft?n:t.current[0],a,o]}function Lt(e){if(e.length===0)return``;let t=0,n=0;for(let r of e){if(n+=r.length,n>1e4)break;t++}return e.slice(0,t).join(`, `)}function Rt(e){let t=K.useRef(e);return M(e,t.current)||(t.current=e),t.current}var zt=pt(),Bt=e=>{let{urls:t,canWrite:n,onEditClick:r,renderImage:i}=e,a=t.filter(e=>e!==``);if(a.length===0)return null;let o=a.length>1;return K.createElement(Xe,{"data-testid":`GDG-default-image-overlay-editor`},K.createElement(zt.Carousel,{showArrows:o,showThumbs:!1,swipeable:o,emulateTouch:o,infiniteLoop:o},a.map(e=>{let t=i?.(e)??K.createElement(`img`,{draggable:!1,src:e});return K.createElement(`div`,{className:`gdg-centering-container`,key:e},t)})),n&&r&&K.createElement(`button`,{className:`gdg-edit-icon`,onClick:r},K.createElement(Ot,null)))},Vt=G(`div`)({name:`MarkdownContainer`,class:`gdg-mnuv029`,propsAsIs:!1}),Ht=class extends K.PureComponent{targetElement=null;renderMarkdownIntoDiv(){let{targetElement:e,props:t}=this;if(e===null)return;let{contents:n,createNode:r}=t,i=C(n),a=document.createRange();a.selectNodeContents(e),a.deleteContents();let o=r?.(i);if(o===void 0){let e=document.createElement(`template`);e.innerHTML=i,o=e.content}e.append(o);let s=e.getElementsByTagName(`a`);for(let e of s)e.target=`_blank`,e.rel=`noreferrer noopener`}containerRefHook=e=>{this.targetElement=e,this.renderMarkdownIntoDiv()};render(){return this.renderMarkdownIntoDiv(),K.createElement(Vt,{ref:this.containerRefHook})}},Ut=G(`textarea`)({name:`InputBox`,class:`gdg-izpuzkl`,propsAsIs:!1}),Wt=G(`div`)({name:`ShadowBox`,class:`gdg-s69h75o`,propsAsIs:!1}),Gt=G(`div`)({name:`GrowingEntryStyle`,class:`gdg-g1y0xocz`,propsAsIs:!1}),Kt=0,qt=e=>{let{placeholder:t,value:n,onKeyDown:r,highlight:i,altNewline:a,validatedSelection:o,...s}=e,{onChange:c,className:l}=s,u=K.useRef(null),d=n??``;ce(c!==void 0,`GrowingEntry must be a controlled input area`);let[f]=K.useState(()=>`input-box-`+(Kt=(Kt+1)%1e7));K.useEffect(()=>{let e=u.current;if(e===null||e.disabled)return;let t=d.toString().length;e.focus(),e.setSelectionRange(i?0:t,t)},[]),K.useLayoutEffect(()=>{if(o!==void 0){let e=typeof o==`number`?[o,null]:o;u.current?.setSelectionRange(e[0],e[1])}},[o]);let p=K.useCallback(e=>{e.key===`Enter`&&e.shiftKey&&a===!0||r?.(e)},[a,r]);return K.createElement(Gt,{className:`gdg-growing-entry`},K.createElement(Wt,{className:l},d+`
5
5
  `),K.createElement(Ut,{...s,className:(l??``)+` gdg-input`,id:f,ref:u,onKeyDown:p,value:d,placeholder:t,dir:`auto`}))},Jt=new Map,Yt=new Map,Xt=new Map;function Zt(){Jt.clear(),Xt.clear(),Yt.clear()}function Qt(e,t,n,r,i){let a=0,o={};for(let t of e)a+=n.get(t)??i,o[t]=(o[t]??0)+1;let s=t-a;for(let e of Object.keys(o)){let t=o[e],c=n.get(e)??i,l=c+s*(c*t/a)*r/t;n.set(e,l)}}function $t(e,t){let n=new Map,r=0;for(let t of`abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890,.-+=?`){let i=e.measureText(t).width;n.set(t,i),r+=i}let i=r/n.size,a=(t/i+3)/4,o=n.keys();for(let e of o)n.set(e,(n.get(e)??i)*a);return n}function en(e,t,n,r){let i=Yt.get(n);if(r&&i!==void 0&&i.count>2e4){let r=Xt.get(n);if(r===void 0&&(r=$t(e,i.size),Xt.set(n,r)),i.count>5e5){let e=0;for(let n of t)e+=r.get(n)??i.size;return e*1.01}let a=e.measureText(t);return Qt(t,a.width,r,Math.max(.05,1-i.count/2e5),i.size),Yt.set(n,{count:i.count+t.length,size:i.size}),a.width}let a=e.measureText(t),o=a.width/t.length;if((i?.count??0)>2e4)return a.width;if(i===void 0)Yt.set(n,{count:t.length,size:o});else{let e=o-i.size,r=t.length/(i.count+t.length),a=i.size+e*r;Yt.set(n,{count:i.count+t.length,size:a})}return a.width}function tn(e,t,n,r,i,a,o,s){if(t.length<=1)return t.length;if(i<n)return-1;let c=Math.floor(n/i*a),l=en(e,t.slice(0,Math.max(0,c)),r,o),u=s?.(t);if(l!==n)if(l<n){for(;l<n;)c++,l=en(e,t.slice(0,Math.max(0,c)),r,o);c--}else for(;l>n;){let n=u===void 0?t.lastIndexOf(` `,c-1):0;n>0?c=n:c--,l=en(e,t.slice(0,Math.max(0,c)),r,o)}if(t[c]!==` `){let e=0;if(u===void 0)e=t.lastIndexOf(` `,c);else for(let t of u){if(t>c)break;e=t}e>0&&(c=e)}return c}function J(e,t,n,r,i,a){let o=`${t}_${n}_${r}px`,s=Jt.get(o);if(s!==void 0)return s;if(r<=0)return[];let c=[],l=t.split(`
@@ -133,4 +133,5 @@ import{o as e,t}from"./rolldown-runtime-FhOqtrmT.js";import{b as n,x as r}from".
133
133
  `,t.allowWrapping===!0?void 0:1),i=0;for(let t of r)i=Math.max(i,e.measureText(t).width);return i+2*n.cellHorizontalPadding},onDelete:e=>({...e,data:``}),provideEditor:e=>({disablePadding:e.allowWrapping===!0,editor:t=>{let{isHighlighted:n,onChange:r,value:i,validatedSelection:a}=t;return K.createElement(qt,{style:e.allowWrapping===!0?{padding:`3px 8.5px`}:void 0,highlight:n,autoFocus:i.readonly!==!0,disabled:i.readonly===!0,altNewline:!0,value:i.data,validatedSelection:a,onChange:e=>r({...i,data:e.target.value})})}}),onPaste:(e,t,n)=>e===t.data?void 0:{...t,data:e,displayData:n.formattedString??t.displayData}},Fs=G(`div`)({name:`UriOverlayEditorStyle`,class:`gdg-u1rrojo`,propsAsIs:!1}),Is=e=>{let{uri:t,onChange:n,forceEditMode:r,readonly:i,validatedSelection:a,preview:o}=e,[s,c]=K.useState(!i&&(t===``||r)),l=K.useCallback(()=>{c(!0)},[]);return s?K.createElement(qt,{validatedSelection:a,highlight:!0,autoFocus:!0,value:t,onChange:n}):K.createElement(Fs,null,K.createElement(`a`,{className:`gdg-link-area`,href:t,target:`_blank`,rel:`noopener noreferrer`},o),!i&&K.createElement(`div`,{className:`gdg-edit-icon`,onClick:l},K.createElement(Ot,null)),K.createElement(`textarea`,{className:`gdg-input`,autoFocus:!0}))};function Ls(e,t,n,r){let i=n.cellHorizontalPadding,a=t.height/2-e.actualBoundingBoxAscent/2,o=e.width,s=e.actualBoundingBoxAscent;return r===`right`?i=t.width-o-n.cellHorizontalPadding:r===`center`&&(i=t.width/2-o/2),{x:i,y:a,width:o,height:s}}var Rs=[Cs,Ds,es,is,ls,ms,vs,Ss,As,js,Ns,Ps,{getAccessibilityString:e=>e.data?.toString()??``,kind:z.Uri,needsHover:e=>e.hoverEffect===!0,needsHoverPosition:!0,useLabel:!0,drawPrep:kn,draw:e=>{let{cell:t,theme:n,overrideCursor:r,hoverX:i,hoverY:a,rect:o,ctx:s}=e,c=t.displayData??t.data,l=t.hoverEffect===!0;if(r!==void 0&&l&&i!==void 0&&a!==void 0){let{x:l,y:u,width:d,height:f}=Ls(Sn(c,s,n.baseFontFull),o,n,t.contentAlign);if(i>=l-4&&i<=l-4+d+8&&a>=u-4&&a<=u-4+f+8){let i=wn(s,n.baseFontFull);r(`pointer`);let a=u-i;s.beginPath(),s.moveTo(o.x+l,Math.floor(o.y+a+f+5)+.5),s.lineTo(o.x+l+d,Math.floor(o.y+a+f+5)+.5),s.strokeStyle=n.linkColor,s.stroke(),s.save(),s.fillStyle=e.cellFillColor,Pn({...e,rect:{...o,x:o.x-1}},c,t.contentAlign),Pn({...e,rect:{...o,x:o.x-2}},c,t.contentAlign),Pn({...e,rect:{...o,x:o.x+1}},c,t.contentAlign),Pn({...e,rect:{...o,x:o.x+2}},c,t.contentAlign),s.restore()}}s.fillStyle=l?n.linkColor:n.textDark,Pn(e,c,t.contentAlign)},onClick:e=>{let{cell:t,bounds:n,posX:r,posY:i,theme:a}=e,o=t.displayData??t.data;if(t.hoverEffect!==!0||t.onClickUri===void 0)return;let s=Cn(o,a.baseFontFull);if(s===void 0)return;let c=Ls(s,n,a,t.contentAlign);Br({x:c.x-4,y:c.y-4,width:c.width+8,height:c.height+8},r,i)&&t.onClickUri(e)},measure:(e,t,n)=>e.measureText(t.displayData??t.data).width+n.cellHorizontalPadding*2,onDelete:e=>({...e,data:``}),provideEditor:e=>t=>{let{onChange:n,value:r,forceEditMode:i,validatedSelection:a}=t;return K.createElement(Is,{forceEditMode:r.readonly!==!0&&(i||e.hoverEffect===!0&&e.onClickUri!==void 0),uri:r.data,preview:r.displayData??r.data,validatedSelection:a,readonly:r.readonly===!0,onChange:e=>n({...r,data:e.target.value})})},onPaste:(e,t,n)=>e===t.data?void 0:{...t,data:e,displayData:n.formattedString??t.displayData}}],zs=e(t(((e,t)=>{var n=vt(),r=I(),i=`Expected a function`;function a(e,t,a){var o=!0,s=!0;if(typeof e!=`function`)throw TypeError(i);return r(a)&&(o=`leading`in a?!!a.leading:o,s=`trailing`in a?!!a.trailing:s),n(e,t,{leading:o,maxWait:t,trailing:s})}t.exports=a}))(),1),Bs=[],Vs=class extends Un{imageLoaded=()=>void 0;loadedLocations=[];cache={};setCallback(e){this.imageLoaded=e}sendLoaded=(0,zs.default)(()=>{this.imageLoaded(new Gn(this.loadedLocations)),this.loadedLocations=[]},20);clearOutOfWindow=()=>{let e=Object.keys(this.cache);for(let t of e){let e=this.cache[t],n=!1;for(let t=0;t<e.cells.length;t++){let r=e.cells[t];if(this.isInWindow(r)){n=!0;break}}n?e.cells=e.cells.filter(this.isInWindow):(e.cancel(),delete this.cache[t])}};loadImage(e,t,n,r){let i=!1,a=Bs.pop()??new Image,o=!1,s={img:void 0,cells:[X(t,n)],url:e,cancel:()=>{o||(o=!0,Bs.length<12?Bs.unshift(a):i||(a.src=``))}},c=new Promise(e=>a.addEventListener(`load`,()=>e(null)));requestAnimationFrame(async()=>{try{a.src=e,await c,await a.decode();let t=this.cache[r];if(t!==void 0&&!o){t.img=a;for(let e of t.cells)this.loadedLocations.push(Hn(e));i=!0,this.sendLoaded()}}catch{s.cancel()}}),this.cache[r]=s}loadOrGetImage(e,t,n){let r=e,i=this.cache[r];if(i!==void 0){let e=X(t,n);return i.cells.includes(e)||i.cells.push(e),i.img}else this.loadImage(e,t,n,r)}},Hs=K.forwardRef((e,t)=>{let n=K.useMemo(()=>({...Ar,...e.headerIcons}),[e.headerIcons]),r=K.useMemo(()=>e.imageWindowLoader??new Vs,[e.imageWindowLoader]);return K.createElement(Qo,{...e,renderers:Rs,headerIcons:n,ref:t,imageWindowLoader:r})});function Us(e){return getComputedStyle(document.documentElement).getPropertyValue(e).trim()}function Ws(e,t){if(e.startsWith(`#`)){let n=e.slice(1);return`rgba(${parseInt(n.slice(0,2),16)}, ${parseInt(n.slice(2,4),16)}, ${parseInt(n.slice(4,6),16)}, ${t})`}return e}function Gs(){let e=Us(`--color-background`),t=Us(`--color-foreground`),n=Us(`--color-muted`),r=Us(`--color-muted-foreground`),i=Us(`--color-primary`),a=Us(`--color-primary-foreground`),o=Us(`--color-border`),s=Us(`--color-accent`),c=Us(`--color-text-secondary`),l=Us(`--color-text-subtle`),u=Us(`--font-sans`)||`Geist, system-ui, sans-serif`;return{bgCell:e,bgCellMedium:n,bgHeader:n,bgHeaderHasFocus:s,bgHeaderHovered:s,bgBubble:s,bgBubbleSelected:i,textDark:t,textMedium:c,textLight:l,textHeader:r,textGroupHeader:r,textHeaderSelected:t,textBubble:t,accentColor:i,accentFg:a,accentLight:Ws(i,.12),borderColor:o,horizontalBorderColor:o,fontFamily:u,baseFontStyle:`13px`,headerFontStyle:`600 12px`,editorFontSize:`13px`,lineHeight:1.5,cellHorizontalPadding:8,cellVerticalPadding:4,headerIconSize:16}}function Ks(){let[e,t]=(0,K.useState)(0);return(0,K.useEffect)(()=>{let e=new MutationObserver(()=>t(e=>e+1));return e.observe(document.documentElement,{attributes:!0,attributeFilter:[`class`]}),()=>e.disconnect()},[]),(0,K.useMemo)(()=>Gs(),[e])}function qs(e,t,n){let r=e.length*9+40,i=0,a=Math.min(t.length,20);for(let n=0;n<a;n++){let r=t[n]?.[e];if(r==null)continue;let a=typeof r==`object`?12:String(r).length;i=Math.max(i,a*8)}let o=/^(int|serial|bigint|smallint|float|double|decimal|numeric|real|money|bool)/.test(n.toLowerCase())?80:100;return Math.max(o,Math.min(Math.max(r,i)+16,400))}function Js(e,t,n,r,i,a,o){return(0,K.useMemo)(()=>{let s=t.filter(e=>n.has(e)),c=t.filter(e=>!n.has(e)),l=[...s,...c],u=new Map(e.map(e=>[e.name,e]));return{columns:l.map(e=>{let t=u.get(e),n=t?.pk??!1,s;return a===e?s=o===`ASC`?`sortAsc`:`sortDesc`:n?s=`headerRowID`:t?.fk&&(s=`headerFk`),{title:e,id:e,width:r.get(e)??qs(e,i,t?.type??`text`),hasMenu:!0,icon:s}}),freezeColumns:s.length,columnOrder:l}},[e,t,n,r,i,a,o])}function Ys(e){if(e==null)return!1;if(typeof e==`object`)return!0;let t=String(e);if(t.length>=200)return!0;let n=t.trimStart();return!!((n[0]===`{`||n[0]===`[`)&&(n.endsWith(`}`)||n.endsWith(`]`))||n.startsWith(`<?xml`)||n.startsWith(`<`)&&n.endsWith(`>`))}function Xs(e){return e==null?`NULL`:typeof e==`object`?JSON.stringify(e):String(e)}function Zs(e){let t=e.trimStart();if(t[0]===`{`||t[0]===`[`)try{return JSON.parse(t),`json`}catch{}return t.startsWith(`<?xml`)||t.startsWith(`<`)&&/<\/\w+>/.test(t)?`xml`:t.startsWith(`---`)||/^\w+:\s/m.test(t)?`yaml`:`plaintext`}function Qs(e){let t=e.toLowerCase();return/^(int|serial|bigint|smallint|float|double|decimal|numeric|real|money)/.test(t)?z.Number:/^bool/.test(t)?z.Boolean:z.Text}function $s(e){let t=e.type.toLowerCase();return!!(/^(serial|bigserial|smallserial)/.test(t)||/^(int|bigint|smallint|integer)/.test(t)&&e.defaultValue&&/nextval|identity|auto_increment/i.test(e.defaultValue)||t===`integer`&&e.pk&&!e.defaultValue)}function ec(e,t=200){return e.length>t?e.slice(0,t)+`…`:e}var tc={bgCell:`rgba(251, 191, 36, 0.15)`};function nc(e,t,n,r,i,a){let o=(0,K.useRef)(e);o.current=e;let s=(0,K.useRef)(t);s.current=t;let c=(0,K.useRef)(new Map);return c.current=new Map(n.map(e=>[e.name,e])),{getCellContent:(0,K.useCallback)(([e,t])=>{let n=s.current[e],i=o.current[t];if(!n||!i)return{kind:z.Text,data:``,displayData:``,allowOverlay:!1};let l=c.current.get(n),u=l?Qs(l.type):z.Text,d=l?.pk??!1,f=r?i[r]:void 0,p=typeof f==`string`&&f.startsWith(`__new_`),m=`${f}:${n}`,h=a.current.get(m),g=h===void 0?i[n]:h.newVal,_=h!==void 0;if(d&&p){if(l&&$s(l))return{kind:z.Text,data:``,displayData:`AUTO`,allowOverlay:!1,readonly:!0,themeOverride:{textDark:`#6b7280`}};let e=h===void 0?``:String(h.newVal??``);return{kind:z.Text,data:e,displayData:e||`Enter ID…`,allowOverlay:!0,readonly:!1,themeOverride:e?_?tc:void 0:{textDark:`#9ca3af`}}}if(g==null){let e=p?``:`NULL`;if(p&&!_&&l){let t=l.type.toLowerCase();l.defaultValue?e=l.defaultValue:/^(timestamp|datetime|date)/.test(t)?e=`NOW()`:/^(uuid)/.test(t)&&(e=`gen_random_uuid()`)}return{kind:z.Text,data:``,displayData:e,allowOverlay:!d,readonly:d,themeOverride:_?tc:p||e!==`NULL`?{textDark:`#9ca3af`}:{textDark:`#6b7280`}}}if(u===z.Number&&typeof g==`number`)return{kind:z.Number,data:g,displayData:String(g),allowOverlay:!d,readonly:d,themeOverride:_?tc:void 0};if(u===z.Boolean&&typeof g==`boolean`)return{kind:z.Boolean,data:g,readonly:d,allowOverlay:!1};let v=Xs(g);return{kind:z.Text,data:v,displayData:ec(v),allowOverlay:!d,readonly:d,themeOverride:_?tc:void 0}},[]),onCellEdited:(0,K.useCallback)(([e,t],n)=>{if(!r)return;let a=s.current[e],c=o.current[t];if(!a||!c)return;let l=c[r],u;if(n.kind===z.Text)u=n.data===``?null:n.data;else if(n.kind===z.Number)u=n.data;else if(n.kind===z.Boolean)u=n.data;else return;i(l,a,u)},[r,i])}}var rc={columns:U.empty(),rows:U.empty()};function ic(){let[e,t]=(0,K.useState)(rc);return{gridSelection:e,onGridSelectionChange:(0,K.useCallback)(e=>{t(e)},[]),selectedRowIndices:(0,K.useMemo)(()=>{let t=[];if(e.rows)for(let n of e.rows)if(Array.isArray(n))for(let e=n[0];e<n[1];e++)t.push(e);else t.push(n);return t},[e.rows]),clearSelection:(0,K.useCallback)(()=>{t(rc)},[])}}function ac(e,t,n){let[r,i]=(0,K.useState)(new Map),a=(0,K.useRef)(r);a.current=r;let o=(0,K.useRef)(!1);return{pendingEdits:r,pendingRef:a,addEdit:(0,K.useCallback)((e,t,n)=>{let r=`${e}:${t}`;i(i=>new Map(i).set(r,{pkVal:e,col:t,newVal:n}))},[]),commitAll:(0,K.useCallback)(async()=>{if(!e)return;let r=new Map;for(let n of a.current.values()){let i=String(n.pkVal);i.startsWith(`__new_`)?(r.has(i)||r.set(i,{}),r.get(i)[n.col]=n.newVal):t(e,n.pkVal,n.col,n.newVal)}if(n)for(let e of r.values())await n(e);o.current=!0},[e,t,n]),discardAll:(0,K.useCallback)(()=>{i(new Map),o.current=!1},[]),hasPending:r.size>0,pendingCount:r.size,committedRef:o}}function oc(e,t){let[n,r]=(0,K.useState)(new Set);return{effectiveRows:(0,K.useMemo)(()=>{if(n.size===0||!t)return e;let r=[],i=[];for(let a of e)n.has(String(a[t]??``))?i.push(a):r.push(a);return[...r,...i]},[e,n,t]),pinnedCount:n.size,pinnedPks:n,setPinnedPks:r}}function sc(e){let{displayRows:t,columnOrder:n,schema:r,pkCol:i,connectionId:a,connectionName:o,selectedTable:s,selectedSchema:c,addEdit:l,gridSelection:u,containerRef:d}=e,{openTab:f}=w(k(e=>({openTab:e.openTab}))),[p,m]=(0,K.useState)(null),h=(0,K.useRef)(t);h.current=t;let g=(0,K.useRef)(n);g.current=n;let _=(0,K.useCallback)(e=>{let n=t[e];if(!n)return;let r=i?String(n[i]??``):``,o=s??``,c=JSON.stringify(n,null,2);m({title:r?`Row #${r}${o?` — ${o}`:``}`:`Row — ${o}`,content:c,language:`json`,viewerKey:`${a}:${o}:row:${r}`})},[t,i,s,a]),v=(0,K.useCallback)((e,r)=>{let o=t[e];if(!o)return;let c=n[r];if(!c)return;let l=Xs(o[c]),u=i?String(o[i]??e):String(e),d=s??``;m({title:`${c} #${u}${d?` — ${d}`:``}`,content:l,language:Zs(l),viewerKey:`${a}:${d}:${c}:${u}`})},[t,n,i,s,a]),y=(0,K.useCallback)(()=>{p&&f({type:`editor`,title:p.title,projectId:null,closable:!0,metadata:{inlineContent:p.content,inlineLanguage:p.language,viewerKey:p.viewerKey}})},[f,p]),b=(0,K.useCallback)((e,t)=>{if(!i)return!1;let[n,a]=e;for(let e=0;e<t.length;e++){let o=h.current[a+e];if(!o)continue;let s=o[i];for(let i=0;i<t[e].length;i++){let a=g.current[n+i];if(!a||r.find(e=>e.name===a)?.pk)continue;let o=t[e][i];l(s,a,o===``?null:o)}}return!1},[i,r,l]),x=(0,K.useRef)(r);x.current=r;let S=(0,K.useRef)(u);S.current=u;let C=(0,K.useRef)(l);C.current=l;let T=(0,K.useRef)(i);return T.current=i,(0,K.useEffect)(()=>{if(!d)return;let e=e=>{let t=d.current;if(!t||!t.contains(document.activeElement))return;let n=document.activeElement?.tagName;if(n===`INPUT`||n===`TEXTAREA`)return;let r=T.current;if(!r)return;let i=S.current?.current;if(!i)return;let a=e.clipboardData?.getData(`text/plain`);if(!a)return;let o=a.split(/\r?\n/).filter(e=>e.length>0).map(e=>e.split(` `));if(o.length===0)return;let[s,c]=i.cell;for(let e=0;e<o.length;e++){let t=h.current[c+e];if(!t)continue;let n=t[r];for(let t=0;t<o[e].length;t++){let r=g.current[s+t];if(!r||x.current.find(e=>e.name===r)?.pk)continue;let i=o[e][t];C.current(n,r,i===``?null:i)}}e.preventDefault()};return document.addEventListener(`paste`,e),()=>document.removeEventListener(`paste`,e)},[d]),{previewData:p,setPreviewData:m,openRowPreview:_,openCellPreview:v,openPreviewInTab:y,handlePaste:b,getContextFk:(0,K.useCallback)(e=>e?r.find(t=>t.name===e)?.fk??null:null,[r]),isCellViewable:(0,K.useCallback)((e,t)=>e&&t?Ys(e[t]):!1,[]),openFkTable:(0,K.useCallback)((e,t)=>{t==null||!a||f({type:`database`,title:`${o??`DB`} · ${e.table}`,projectId:null,closable:!0,metadata:{connectionId:a,connectionName:o,tableName:e.table,schemaName:c??`public`,initialSql:`SELECT * FROM "${e.table}" WHERE "${e.column}" = '${String(t).replace(/'/g,`''`)}'`}})},[a,o,c,f])}}function cc({colName:e,bounds:t,isPinned:n,filterValue:r,sortState:i,onFilter:a,onSort:o,onClearSort:l,onTogglePin:u,onClose:d}){let[m,h]=(0,K.useState)(r),g=(0,K.useRef)(null),_=(0,K.useRef)(void 0);(0,K.useEffect)(()=>{let e=e=>{g.current&&!g.current.contains(e.target)&&d()};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[d]),(0,K.useEffect)(()=>{let e=e=>{e.key===`Escape`&&d()};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[d]);let v=e=>{h(e),clearTimeout(_.current),_.current=setTimeout(()=>a(e),300)},b=Math.min(t.x,window.innerWidth-220-8),x=t.y+t.height+2,S=document.getElementById(`portal`);return S?(0,qe.createPortal)((0,q.jsxs)(`div`,{ref:g,style:{position:`fixed`,left:b,top:x,zIndex:1e4},className:`w-[220px] bg-popover border border-border rounded-md shadow-lg text-xs overflow-hidden`,children:[(0,q.jsx)(`div`,{className:`px-3 py-1.5 border-b border-border text-muted-foreground font-medium truncate`,children:e}),(0,q.jsx)(`div`,{className:`px-2 py-1.5 border-b border-border`,children:(0,q.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,q.jsx)(Me,{className:`size-3 text-muted-foreground shrink-0`}),(0,q.jsx)(`input`,{autoFocus:!0,type:`text`,value:m,onChange:e=>v(e.target.value),placeholder:`Filter (ILIKE)…`,className:`flex-1 bg-transparent outline-none text-foreground placeholder:text-muted-foreground text-xs`}),m&&(0,q.jsx)(`button`,{type:`button`,onClick:()=>v(``),className:`text-muted-foreground hover:text-foreground`,children:(0,q.jsx)(y,{className:`size-3`})})]})}),(0,q.jsxs)(`div`,{className:`py-1`,children:[(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{o(),d()},className:`w-full text-left px-3 py-1.5 hover:bg-muted flex items-center gap-2 text-foreground`,children:[i===`asc`?(0,q.jsx)(s,{className:`size-3`}):(0,q.jsx)(c,{className:`size-3`}),i===`asc`?`Sort Descending`:`Sort Ascending`]}),i&&l&&(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{l(),d()},className:`w-full text-left px-3 py-1.5 hover:bg-muted flex items-center gap-2 text-foreground`,children:[(0,q.jsx)(y,{className:`size-3`}),`Clear Sort`]}),(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{u(),d()},className:`w-full text-left px-3 py-1.5 hover:bg-muted flex items-center gap-2 text-foreground`,children:[n?(0,q.jsx)(p,{className:`size-3`}):(0,q.jsx)(f,{className:`size-3`}),n?`Unpin Column`:`Pin Column`]})]})]}),S):null}function lc({position:e,isPinned:t,onViewRow:n,onViewCell:r,onPinRow:i,onDeleteRow:a,onOpenFkTable:o,fkLabel:s,onClose:c}){let[l,u]=(0,K.useState)(!1),d=(0,K.useRef)(null);(0,K.useEffect)(()=>{let e=e=>{d.current&&!d.current.contains(e.target)&&c()};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[c]),(0,K.useEffect)(()=>{let e=e=>{e.key===`Escape`&&c()};return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[c]);let m=Math.min(e.x,window.innerWidth-180-8),h=Math.min(e.y,window.innerHeight-130-8),v=document.getElementById(`portal`);return v?(0,qe.createPortal)((0,q.jsxs)(`div`,{ref:d,style:{position:`fixed`,left:m,top:h,zIndex:1e4},className:`w-[180px] bg-popover border border-border rounded-md shadow-lg text-xs overflow-hidden py-1`,children:[(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{n(),c()},className:`w-full text-left px-3 py-1.5 hover:bg-muted flex items-center gap-2 text-foreground`,children:[(0,q.jsx)(g,{className:`size-3`}),` View as JSON`]}),r&&(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{r(),c()},className:`w-full text-left px-3 py-1.5 hover:bg-muted flex items-center gap-2 text-foreground`,children:[(0,q.jsx)(g,{className:`size-3`}),` View Cell`]}),o&&(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{o(),c()},className:`w-full text-left px-3 py-1.5 hover:bg-muted flex items-center gap-2 text-blue-400`,children:[(0,q.jsx)(T,{className:`size-3`}),` `,s??`Open Referenced Table`]}),(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{i(),c()},className:`w-full text-left px-3 py-1.5 hover:bg-muted flex items-center gap-2 text-foreground`,children:[t?(0,q.jsx)(p,{className:`size-3`}):(0,q.jsx)(f,{className:`size-3`}),t?`Unpin Row`:`Pin Row`]}),(0,q.jsx)(`div`,{className:`border-t border-border my-0.5`}),l?(0,q.jsxs)(`div`,{className:`px-3 py-1.5 flex items-center gap-2`,children:[(0,q.jsx)(`button`,{type:`button`,onClick:()=>{a(),c()},className:`text-destructive font-medium hover:underline`,children:`Delete?`}),(0,q.jsx)(`button`,{type:`button`,onClick:()=>u(!1),className:`text-muted-foreground hover:underline`,children:`Cancel`})]}):(0,q.jsxs)(`button`,{type:`button`,onClick:()=>u(!0),className:`w-full text-left px-3 py-1.5 hover:bg-muted flex items-center gap-2 text-destructive`,children:[(0,q.jsx)(_,{className:`size-3`}),` Delete Row`]})]}),v):null}function uc({columns:e,onSelect:t,onClose:n,anchorRect:r}){let[i,a]=(0,K.useState)(``),[o,s]=(0,K.useState)(0),c=(0,K.useRef)(null),l=(0,K.useRef)(null),u=i?e.filter(e=>e.toLowerCase().includes(i.toLowerCase())):e;(0,K.useEffect)(()=>{s(0)},[i]),(0,K.useEffect)(()=>{let e=l.current;e&&e.children[o]?.scrollIntoView({block:`nearest`})},[o]),(0,K.useEffect)(()=>{let e=e=>{c.current&&!c.current.contains(e.target)&&n()};return document.addEventListener(`mousedown`,e),()=>document.removeEventListener(`mousedown`,e)},[n]);let d=(0,K.useCallback)(e=>{if(e.key===`Escape`){n();return}if(e.key===`ArrowDown`){e.preventDefault(),s(e=>Math.min(e+1,u.length-1));return}if(e.key===`ArrowUp`){e.preventDefault(),s(e=>Math.max(e-1,0));return}if(e.key===`Enter`){e.preventDefault();let r=u[o];r&&(t(r),n())}},[u,o,t,n]),f=document.getElementById(`portal`);return f?(0,qe.createPortal)((0,q.jsxs)(`div`,{ref:c,style:{position:`fixed`,left:Math.min(r.x,window.innerWidth-216),top:Math.min(r.y,window.innerHeight-308),zIndex:1e4},className:`w-[200px] max-h-[300px] bg-popover border border-border rounded-md shadow-lg text-xs overflow-hidden flex flex-col`,children:[(0,q.jsx)(`div`,{className:`px-2 py-1.5 border-b border-border`,children:(0,q.jsx)(`input`,{autoFocus:!0,value:i,onChange:e=>a(e.target.value),onKeyDown:d,placeholder:`Search columns…`,className:`w-full bg-transparent outline-none text-foreground placeholder:text-muted-foreground text-xs`})}),(0,q.jsxs)(`div`,{ref:l,className:`overflow-y-auto py-1`,children:[u.map((e,r)=>(0,q.jsx)(`button`,{type:`button`,onClick:()=>{t(e),n()},onMouseEnter:()=>s(r),className:`w-full text-left px-3 py-1 truncate text-foreground ${r===o?`bg-muted`:`hover:bg-muted`}`,children:e},e)),u.length===0&&(0,q.jsx)(`div`,{className:`px-3 py-2 text-muted-foreground`,children:`No columns found`})]})]}),f):null}function dc({hasSelection:e,selectedCount:t,onBulkDelete:n,onInsertRow:r,columns:i,selectedRows:a,connectionName:o,searchTerm:s,onSearchChange:c,onColumnJump:l,colSearchOpen:u,onColSearchChange:f}){let[p,h]=(0,K.useState)(!1),[g,b]=(0,K.useState)(!1),x=u??g,S=f??b,C=(0,K.useRef)(null),w=C.current?(()=>{let e=C.current.getBoundingClientRect();return{x:e.left,y:e.bottom+4}})():{x:0,y:0};return(0,q.jsxs)(`div`,{className:`flex items-center gap-2 px-2 py-1 border-b border-border bg-background shrink-0`,children:[e&&(0,q.jsxs)(`div`,{className:`flex items-center gap-1.5 text-xs`,children:[(0,q.jsxs)(`span`,{className:`text-muted-foreground`,children:[t,` selected`]}),n&&(p?(0,q.jsxs)(`span`,{className:`flex items-center gap-1`,children:[(0,q.jsxs)(`button`,{type:`button`,onClick:()=>{n(),h(!1)},className:`text-destructive text-[10px] font-medium hover:underline`,children:[`Delete `,t,`?`]}),(0,q.jsx)(`button`,{type:`button`,onClick:()=>h(!1),className:`text-muted-foreground text-[10px] hover:underline`,children:`Cancel`})]}):(0,q.jsx)(`button`,{type:`button`,onClick:()=>h(!0),className:`p-0.5 text-muted-foreground hover:text-destructive`,children:(0,q.jsx)(_,{className:`size-3`})})),(0,q.jsx)(Ye,{columns:i,rows:a,filename:`${o??`db`}-selected`})]}),(0,q.jsx)(`div`,{className:`flex-1`}),(0,q.jsxs)(`div`,{className:`flex items-center gap-1 text-xs`,children:[(0,q.jsx)(m,{className:`size-3 text-muted-foreground`}),(0,q.jsx)(`input`,{value:s,onChange:e=>c(e.target.value),placeholder:`Search page…`,className:`w-24 bg-transparent outline-none text-foreground placeholder:text-muted-foreground text-xs`}),s&&(0,q.jsx)(`button`,{type:`button`,onClick:()=>c(``),className:`text-muted-foreground hover:text-foreground`,children:(0,q.jsx)(y,{className:`size-3`})})]}),l&&(0,q.jsx)(`button`,{ref:C,type:`button`,onClick:()=>S(!x),className:`p-0.5 rounded text-muted-foreground hover:text-foreground transition-colors`,title:`Jump to column (/)`,children:(0,q.jsx)(d,{className:`size-3.5`})}),r&&(0,q.jsx)(`button`,{type:`button`,onClick:r,className:`p-0.5 rounded text-muted-foreground hover:text-primary transition-colors`,title:`Insert row`,children:(0,q.jsx)(v,{className:`size-3.5`})}),x&&l&&(0,q.jsx)(uc,{columns:i,onSelect:l,onClose:()=>S(!1),anchorRect:w})]})}function fc({pendingCount:e,onSave:t,onDiscard:n}){return e===0?null:(0,q.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-1.5 border-t border-amber-400/50 bg-amber-50 dark:bg-amber-950/30 shrink-0 text-xs`,children:[(0,q.jsxs)(`span`,{className:`text-amber-700 dark:text-amber-300 font-medium`,children:[e,` pending edit`,e>1?`s`:``]}),(0,q.jsx)(`div`,{className:`flex-1`}),(0,q.jsxs)(`button`,{type:`button`,onClick:n,className:`flex items-center gap-1 px-2 py-0.5 rounded text-muted-foreground hover:text-foreground hover:bg-muted transition-colors`,children:[(0,q.jsx)(D,{className:`size-3`}),` Discard`]}),(0,q.jsxs)(`button`,{type:`button`,onClick:t,className:`flex items-center gap-1 px-2 py-0.5 rounded bg-primary text-primary-foreground hover:bg-primary/90 transition-colors`,children:[(0,q.jsx)(Ne,{className:`size-3`}),` Save`,(0,q.jsx)(`kbd`,{className:`ml-1 text-[9px] opacity-70`,children:`⌘↵`})]})]})}function pc({total:e,page:t,totalPages:n,onPageChange:r}){return(0,q.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-1.5 border-t border-border bg-background shrink-0 text-xs text-muted-foreground`,children:[(0,q.jsxs)(`span`,{children:[e.toLocaleString(),` rows`]}),(0,q.jsxs)(`div`,{className:`hidden md:flex items-center gap-2 text-[10px] text-muted-foreground/50`,children:[(0,q.jsxs)(`span`,{children:[(0,q.jsx)(`kbd`,{className:`px-1 py-0.5 rounded bg-muted text-[9px]`,children:`/`}),` columns`]}),(0,q.jsxs)(`span`,{children:[(0,q.jsxs)(`kbd`,{className:`px-1 py-0.5 rounded bg-muted text-[9px]`,children:[`⌘`,`A`]}),` select all`]}),(0,q.jsxs)(`span`,{children:[(0,q.jsxs)(`kbd`,{className:`px-1 py-0.5 rounded bg-muted text-[9px]`,children:[`⌘`,`C`]}),` copy`]})]}),(0,q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,q.jsx)(`button`,{type:`button`,disabled:t<=1,onClick:()=>r(t-1),className:`p-0.5 rounded hover:bg-muted disabled:opacity-30`,children:(0,q.jsx)(l,{className:`size-3.5`})}),(0,q.jsxs)(`span`,{children:[t,` / `,n]}),(0,q.jsx)(`button`,{type:`button`,disabled:t>=n,onClick:()=>r(t+1),className:`p-0.5 rounded hover:bg-muted disabled:opacity-30`,children:(0,q.jsx)(u,{className:`size-3.5`})})]})]})}function mc({data:e,onClose:t,onOpenInTab:n}){let r=je(),[i,a]=(0,K.useState)(!0),[o,s]=(0,K.useState)(e.content),[c,l]=(0,K.useState)(!1),u=e.language===`json`||e.language===`xml`,d=(0,K.useRef)(e.title);d.current!==e.title&&(d.current=e.title,s(e.content),l(!1));let f=(0,K.useCallback)(()=>{if(c)s(e.content),l(!1);else if(e.language===`json`)try{s(JSON.stringify(JSON.parse(e.content.trim()),null,2)),l(!0)}catch{}else if(e.language===`xml`){let t=0;s(e.content.trim().replace(/>\s*</g,`>
134
134
  <`).split(`
135
135
  `).map(e=>{let n=e.trim();n.startsWith(`</`)&&(t=Math.max(0,t-1));let r=` `.repeat(t)+n;return n.startsWith(`<`)&&!n.startsWith(`</`)&&!n.endsWith(`/>`)&&!n.startsWith(`<?`)&&t++,r}).join(`
136
- `)),l(!0)}},[c,e.content,e.language]),[p,m]=(0,K.useState)(200),h=(0,K.useCallback)(e=>{e.preventDefault();let t=e.clientY,n=p,r=e=>m(Math.max(80,n+(t-e.clientY))),i=()=>{document.removeEventListener(`mousemove`,r),document.removeEventListener(`mouseup`,i)};document.addEventListener(`mousemove`,r),document.addEventListener(`mouseup`,i)},[p]);return(0,q.jsxs)(`div`,{className:`shrink-0 border-t border-border flex flex-col`,style:{height:p},children:[(0,q.jsx)(`div`,{onMouseDown:h,className:`shrink-0 h-1.5 cursor-row-resize bg-border/50 hover:bg-primary/30 flex items-center justify-center transition-colors`,children:(0,q.jsx)(O,{className:`size-3 text-muted-foreground/50`})}),(0,q.jsxs)(`div`,{className:`flex items-center gap-1 px-2 py-1 bg-muted/50 border-b border-border shrink-0`,children:[(0,q.jsx)(g,{className:`size-3 text-muted-foreground`}),(0,q.jsx)(`span`,{className:`text-xs font-medium text-foreground truncate flex-1`,children:e.title}),u&&(0,q.jsx)(`button`,{type:`button`,onClick:f,title:c?`Raw`:`Beautify`,className:`p-0.5 rounded transition-colors ${c?`text-primary`:`text-muted-foreground hover:text-foreground`}`,children:(0,q.jsx)(b,{className:`size-3`})}),(0,q.jsx)(`button`,{type:`button`,onClick:()=>a(!i),title:i?`No wrap`:`Word wrap`,className:`p-0.5 rounded transition-colors ${i?`text-primary`:`text-muted-foreground hover:text-foreground`}`,children:(0,q.jsx)(x,{className:`size-3`})}),(0,q.jsxs)(`button`,{type:`button`,onClick:n,title:`Open in new tab`,className:`flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] text-muted-foreground hover:text-foreground hover:bg-muted transition-colors`,children:[(0,q.jsx)(T,{className:`size-3`}),(0,q.jsx)(`span`,{className:`hidden sm:inline`,children:`Open in Tab`})]}),(0,q.jsx)(`button`,{type:`button`,onClick:t,title:`Close preview (Esc)`,className:`p-0.5 rounded text-muted-foreground hover:text-foreground transition-colors`,children:(0,q.jsx)(y,{className:`size-3`})})]}),(0,q.jsx)(`div`,{className:`flex-1 min-h-0`,children:(0,q.jsx)(Ae,{height:`100%`,language:e.language===`plaintext`?void 0:e.language,value:o,theme:r,options:{readOnly:!0,minimap:{enabled:!1},scrollBeyondLastLine:!1,wordWrap:i?`on`:`off`,lineNumbers:`on`,fontSize:12,folding:!0,bracketPairColorization:{enabled:!0},domReadOnly:!0,contextmenu:!1,overviewRulerLanes:0},loading:(0,q.jsx)(E,{className:`size-4 animate-spin text-muted-foreground`})})})]})}var hc={sortAsc:e=>`<svg viewBox="0 0 16 16" fill="${e.fgColor}"><path d="M8 4l4 6H4z"/></svg>`,sortDesc:e=>`<svg viewBox="0 0 16 16" fill="${e.fgColor}"><path d="M8 12l4-6H4z"/></svg>`,headerFk:()=>`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="none" stroke="#3b82f6" stroke-width="1.5" stroke-linecap="round"><path d="M6 4.5H4.5a2.5 2.5 0 000 5H6M10 4.5h1.5a2.5 2.5 0 010 5H10M5 7h6"/></svg>`};function gc(e){let{columns:t,rows:n,total:r,limit:i,schema:a,loading:o,page:s,onPageChange:c,onCellUpdate:l,onRowDelete:u,onBulkDelete:d,onInsertRow:f,orderBy:p,orderDir:m,onToggleSort:h,onClearSort:g,columnFilters:_={},onColumnFilter:v,connectionId:y,selectedTable:b,selectedSchema:x,connectionName:S}=e,C=Ks(),w=(0,K.useRef)(null),T=(0,K.useRef)(null),D=(0,K.useMemo)(()=>{let e=new Set(a.map(e=>e.name));return t.filter(t=>e.has(t))},[t,a]),[O,k]=(0,K.useState)(new Set),[A,ee]=(0,K.useState)(new Map),[te,ne]=(0,K.useState)(null),[j,re]=(0,K.useState)(null),[ie,ae]=(0,K.useState)(``),[M,oe]=(0,K.useState)([]),N=(0,K.useMemo)(()=>a.find(e=>e.pk)?.name??a.find(e=>e.name.toLowerCase()===`id`)?.name??null,[a]),{effectiveRows:P,pinnedCount:se,pinnedPks:ce,setPinnedPks:le}=oc(n,N),F=(0,K.useMemo)(()=>{if(se===0)return[...P,...M];let e=P.slice(0,P.length-se),t=P.slice(P.length-se);return[...e,...M,...t]},[P,M,se]),I=(0,K.useMemo)(()=>{if(!ie.trim())return F;let e=ie.toLowerCase();return F.filter(t=>D.some(n=>String(t[n]??``).toLowerCase().includes(e)))},[F,D,ie]),ue=(0,K.useMemo)(()=>se===0||!N?0:ie.trim()?I.filter(e=>ce.has(String(e[N]??``))).length:se,[se,N,ie,I,ce]),{pendingRef:de,addEdit:fe,commitAll:pe,discardAll:me,hasPending:he,pendingCount:ge,committedRef:_e}=ac(N,l,f),{columns:ve,freezeColumns:L,columnOrder:ye}=Js(a,D,O,A,I,p,m),{getCellContent:be,onCellEdited:xe}=nc(I,ye,a,N,fe,de),{gridSelection:R,onGridSelectionChange:Se,selectedRowIndices:Ce,clearSelection:z}=ic(),{previewData:B,setPreviewData:we,openRowPreview:V,openCellPreview:H,openPreviewInTab:U,handlePaste:Te,getContextFk:Ee,isCellViewable:W,openFkTable:De}=sc({displayRows:I,columnOrder:ye,schema:a,pkCol:N,connectionId:y,connectionName:S,selectedTable:b,selectedSchema:x,addEdit:fe,gridSelection:R,containerRef:T});(0,K.useEffect)(()=>{_e.current&&(_e.current=!1,me(),oe([]))},[n]);let Oe=(0,K.useCallback)((e,t)=>{ee(n=>new Map(n).set(e.id??e.title,t))},[]),ke=(0,K.useCallback)((e,t)=>{let n=ye[e];n&&ne({colName:n,bounds:t})},[ye]),G=(0,K.useCallback)(([e,t],n)=>{n.preventDefault(),re({position:{x:n.bounds.x+n.localEventX,y:n.bounds.y+n.localEventY},rowIdx:t,colIdx:e})},[]),Ae=(0,K.useCallback)(e=>{k(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),je=(0,K.useCallback)(e=>{if(!N)return;let t=I[e];if(!t)return;let n=String(t[N]??``);le(e=>{let t=new Set(e);return t.has(n)?t.delete(n):t.add(n),t})},[N,I,le]),Me=(0,K.useCallback)(e=>{if(ce.size===0||!N)return;let t=I[e];if(t&&ce.has(String(t[N]??``)))return{bgCell:C.bgCellMedium??C.bgHeader}},[ce,N,I,C]),Ne=(0,K.useCallback)(()=>{!N||!d||(d(N,Ce.map(e=>I[e]?.[N]).filter(e=>e!=null)),z())},[N,d,Ce,I,z]),[Pe,Fe]=(0,K.useState)(!1),Ie=(0,K.useCallback)(e=>{if(e.key===`Escape`){we(null),Fe(!1);return}(e.metaKey||e.ctrlKey)&&e.key===`Enter`&&he&&(e.preventDefault(),pe());let t=e.target?.tagName;e.key===`/`&&t!==`INPUT`&&t!==`TEXTAREA`&&(e.preventDefault(),Fe(!0))},[he,pe]),Le=(0,K.useCallback)(()=>{!N||!f||oe(e=>[...e,{[N]:`__new_${Date.now()}`}])},[N,f]),Re=(0,K.useCallback)(e=>{let t=ye.indexOf(e);t>=0&&w.current?.scrollTo&&w.current.scrollTo(t,0)},[ye]),ze=j?I[j.rowIdx]:null,Be=ze&&N?String(ze[N]??``):``,Ve=j?ye[j.colIdx]:null,He=W(ze??null,Ve??null),Ue=Ee(Ve??null),We=ze&&Ve?ze[Ve]:null;return D.length?(0,q.jsxs)(`div`,{ref:T,className:`flex flex-col h-full overflow-hidden relative`,tabIndex:0,onKeyDown:Ie,children:[(0,q.jsx)(dc,{hasSelection:Ce.length>0,selectedCount:Ce.length,onBulkDelete:d&&N?Ne:void 0,onInsertRow:f&&N?Le:void 0,columns:D,selectedRows:Ce.map(e=>I[e]).filter(Boolean),connectionName:S,searchTerm:ie,onSearchChange:ae,onColumnJump:Re,colSearchOpen:Pe,onColSearchChange:Fe}),o&&(0,q.jsx)(`div`,{className:`absolute inset-0 z-30 flex items-center justify-center bg-background/60`,children:(0,q.jsx)(E,{className:`size-5 animate-spin text-primary`})}),(0,q.jsx)(`div`,{className:`flex-1 min-h-0`,children:(0,q.jsx)(Hs,{ref:w,columns:ve,rows:I.length,getCellContent:be,getCellsForSelection:!0,onCellEdited:xe,onPaste:Te,theme:C,freezeColumns:L,freezeTrailingRows:ue,rowMarkers:N?`checkbox-visible`:`number`,gridSelection:R,onGridSelectionChange:Se,onColumnResize:Oe,onHeaderMenuClick:ke,onCellContextMenu:G,getRowThemeOverride:Me,trailingRowOptions:f&&N?{sticky:!0,tint:!0}:void 0,onRowAppended:f?Le:void 0,headerIcons:hc,smoothScrollX:!0,smoothScrollY:!0,width:`100%`,height:`100%`})}),he&&(0,q.jsx)(fc,{pendingCount:ge,onSave:pe,onDiscard:()=>{me(),oe([])}}),B&&(0,q.jsx)(mc,{data:B,onClose:()=>we(null),onOpenInTab:U}),(0,q.jsx)(pc,{total:r,page:s,totalPages:Math.ceil(r/i)||1,onPageChange:c}),te&&(0,q.jsx)(cc,{colName:te.colName,bounds:te.bounds,isPinned:O.has(te.colName),filterValue:_[te.colName]??``,sortState:p===te.colName?m===`ASC`?`asc`:`desc`:null,onFilter:e=>{if(!v)return;let t={..._};e?t[te.colName]=e:delete t[te.colName],v(t)},onSort:()=>{h&&h(te.colName)},onClearSort:g,onTogglePin:()=>Ae(te.colName),onClose:()=>ne(null)}),j&&ze&&(0,q.jsx)(lc,{position:j.position,isPinned:ce.has(Be),onViewRow:()=>V(j.rowIdx),onViewCell:He?()=>H(j.rowIdx,j.colIdx):void 0,onPinRow:()=>je(j.rowIdx),onDeleteRow:()=>{N&&u&&ze&&u(N,ze[N])},onOpenFkTable:Ue&&We!=null&&y?()=>De(Ue,We):void 0,fkLabel:Ue?`Open ${Ue.table}.${Ue.column}`:void 0,onClose:()=>re(null)})]}):(0,q.jsx)(`div`,{className:`flex items-center justify-center h-full text-xs text-muted-foreground`,children:o?(0,q.jsx)(E,{className:`size-4 animate-spin`}):`Select a table`})}export{Ge as i,Ye as n,Ke as r,gc as t};
136
+ `)),l(!0)}},[c,e.content,e.language]),[p,m]=(0,K.useState)(200),h=(0,K.useCallback)(e=>{e.preventDefault();let t=e.clientY,n=p,r=e=>m(Math.max(80,n+(t-e.clientY))),i=()=>{document.removeEventListener(`mousemove`,r),document.removeEventListener(`mouseup`,i)};document.addEventListener(`mousemove`,r),document.addEventListener(`mouseup`,i)},[p]);return(0,q.jsxs)(`div`,{className:`shrink-0 border-t border-border flex flex-col`,style:{height:p},children:[(0,q.jsx)(`div`,{onMouseDown:h,className:`shrink-0 h-1.5 cursor-row-resize bg-border/50 hover:bg-primary/30 flex items-center justify-center transition-colors`,children:(0,q.jsx)(O,{className:`size-3 text-muted-foreground/50`})}),(0,q.jsxs)(`div`,{className:`flex items-center gap-1 px-2 py-1 bg-muted/50 border-b border-border shrink-0`,children:[(0,q.jsx)(g,{className:`size-3 text-muted-foreground`}),(0,q.jsx)(`span`,{className:`text-xs font-medium text-foreground truncate flex-1`,children:e.title}),u&&(0,q.jsx)(`button`,{type:`button`,onClick:f,title:c?`Raw`:`Beautify`,className:`p-0.5 rounded transition-colors ${c?`text-primary`:`text-muted-foreground hover:text-foreground`}`,children:(0,q.jsx)(b,{className:`size-3`})}),(0,q.jsx)(`button`,{type:`button`,onClick:()=>a(!i),title:i?`No wrap`:`Word wrap`,className:`p-0.5 rounded transition-colors ${i?`text-primary`:`text-muted-foreground hover:text-foreground`}`,children:(0,q.jsx)(x,{className:`size-3`})}),(0,q.jsxs)(`button`,{type:`button`,onClick:n,title:`Open in new tab`,className:`flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] text-muted-foreground hover:text-foreground hover:bg-muted transition-colors`,children:[(0,q.jsx)(T,{className:`size-3`}),(0,q.jsx)(`span`,{className:`hidden sm:inline`,children:`Open in Tab`})]}),(0,q.jsx)(`button`,{type:`button`,onClick:t,title:`Close preview (Esc)`,className:`p-0.5 rounded text-muted-foreground hover:text-foreground transition-colors`,children:(0,q.jsx)(y,{className:`size-3`})})]}),(0,q.jsx)(`div`,{className:`flex-1 min-h-0`,children:(0,q.jsx)(Ae,{height:`100%`,language:e.language===`plaintext`?void 0:e.language,value:o,theme:r,options:{readOnly:!0,minimap:{enabled:!1},scrollBeyondLastLine:!1,wordWrap:i?`on`:`off`,lineNumbers:`on`,fontSize:12,folding:!0,bracketPairColorization:{enabled:!0},domReadOnly:!0,contextmenu:!1,overviewRulerLanes:0},loading:(0,q.jsx)(E,{className:`size-4 animate-spin text-muted-foreground`})})})]})}var hc={sortAsc:e=>`<svg viewBox="0 0 16 16" fill="${e.fgColor}"><path d="M8 4l4 6H4z"/></svg>`,sortDesc:e=>`<svg viewBox="0 0 16 16" fill="${e.fgColor}"><path d="M8 12l4-6H4z"/></svg>`,headerFk:()=>`<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="none" stroke="#3b82f6" stroke-width="1.5" stroke-linecap="round"><path d="M6 4.5H4.5a2.5 2.5 0 000 5H6M10 4.5h1.5a2.5 2.5 0 010 5H10M5 7h6"/></svg>`};function gc(e){let{columns:t,rows:n,total:r,limit:i,schema:a,loading:o,page:s,onPageChange:c,onCellUpdate:l,onRowDelete:u,onBulkDelete:d,onInsertRow:f,orderBy:p,orderDir:m,onToggleSort:h,onClearSort:g,columnFilters:_={},onColumnFilter:v,connectionId:y,selectedTable:b,selectedSchema:x,connectionName:S}=e,C=Ks(),w=(0,K.useRef)(null),T=(0,K.useRef)(null),D=(0,K.useMemo)(()=>{let e=new Set(a.map(e=>e.name));return t.filter(t=>e.has(t))},[t,a]),[O,k]=(0,K.useState)(new Set),[A,ee]=(0,K.useState)(new Map),[te,ne]=(0,K.useState)(null),[j,re]=(0,K.useState)(null),[ie,ae]=(0,K.useState)(``),[M,oe]=(0,K.useState)([]),N=(0,K.useMemo)(()=>a.find(e=>e.pk)?.name??a.find(e=>e.name.toLowerCase()===`id`)?.name??null,[a]),{effectiveRows:P,pinnedCount:se,pinnedPks:ce,setPinnedPks:le}=oc(n,N),F=(0,K.useMemo)(()=>{if(se===0)return[...P,...M];let e=P.slice(0,P.length-se),t=P.slice(P.length-se);return[...e,...M,...t]},[P,M,se]),I=(0,K.useMemo)(()=>{if(!ie.trim())return F;let e=ie.toLowerCase();return F.filter(t=>D.some(n=>String(t[n]??``).toLowerCase().includes(e)))},[F,D,ie]),ue=(0,K.useMemo)(()=>se===0||!N?0:ie.trim()?I.filter(e=>ce.has(String(e[N]??``))).length:se,[se,N,ie,I,ce]),{pendingRef:de,addEdit:fe,commitAll:pe,discardAll:me,hasPending:he,pendingCount:ge,committedRef:_e}=ac(N,l,f),{columns:ve,freezeColumns:L,columnOrder:ye}=Js(a,D,O,A,I,p,m),{getCellContent:be,onCellEdited:xe}=nc(I,ye,a,N,fe,de),{gridSelection:R,onGridSelectionChange:Se,selectedRowIndices:Ce,clearSelection:z}=ic(),{previewData:B,setPreviewData:we,openRowPreview:V,openCellPreview:H,openPreviewInTab:U,handlePaste:Te,getContextFk:Ee,isCellViewable:W,openFkTable:De}=sc({displayRows:I,columnOrder:ye,schema:a,pkCol:N,connectionId:y,connectionName:S,selectedTable:b,selectedSchema:x,addEdit:fe,gridSelection:R,containerRef:T});(0,K.useEffect)(()=>{_e.current&&(_e.current=!1,me(),oe([]))},[n]);let Oe=(0,K.useCallback)((e,t)=>{ee(n=>new Map(n).set(e.id??e.title,t))},[]),ke=(0,K.useCallback)((e,t)=>{let n=ye[e];n&&ne({colName:n,bounds:t})},[ye]),G=(0,K.useCallback)(([e,t],n)=>{n.preventDefault(),re({position:{x:n.bounds.x+n.localEventX,y:n.bounds.y+n.localEventY},rowIdx:t,colIdx:e})},[]),Ae=(0,K.useCallback)(e=>{k(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},[]),je=(0,K.useCallback)(e=>{if(!N)return;let t=I[e];if(!t)return;let n=String(t[N]??``);le(e=>{let t=new Set(e);return t.has(n)?t.delete(n):t.add(n),t})},[N,I,le]),Me=(0,K.useCallback)(e=>{if(ce.size===0||!N)return;let t=I[e];if(t&&ce.has(String(t[N]??``)))return{bgCell:C.bgCellMedium??C.bgHeader}},[ce,N,I,C]),Ne=(0,K.useCallback)(()=>{!N||!d||(d(N,Ce.map(e=>I[e]?.[N]).filter(e=>e!=null)),z())},[N,d,Ce,I,z]),[Pe,Fe]=(0,K.useState)(!1),Ie=(0,K.useCallback)(e=>{if(e.key===`Escape`){we(null),Fe(!1);return}(e.metaKey||e.ctrlKey)&&e.key===`Enter`&&he&&(e.preventDefault(),pe());let t=e.target?.tagName;e.key===`/`&&t!==`INPUT`&&t!==`TEXTAREA`&&(e.preventDefault(),Fe(!0))},[he,pe]),Le=(0,K.useCallback)(()=>{!N||!f||oe(e=>[...e,{[N]:`__new_${Date.now()}`}])},[N,f]),Re=(0,K.useCallback)(e=>{let t=ye.indexOf(e);t>=0&&w.current?.scrollTo&&w.current.scrollTo(t,0)},[ye]),ze=j?I[j.rowIdx]:null,Be=ze&&N?String(ze[N]??``):``,Ve=j?ye[j.colIdx]:null,He=W(ze??null,Ve??null),Ue=Ee(Ve??null),We=ze&&Ve?ze[Ve]:null;return D.length?(0,q.jsxs)(`div`,{ref:T,className:`flex flex-col h-full overflow-hidden relative`,tabIndex:0,onKeyDown:Ie,children:[(0,q.jsx)(dc,{hasSelection:Ce.length>0,selectedCount:Ce.length,onBulkDelete:d&&N?Ne:void 0,onInsertRow:f&&N?Le:void 0,columns:D,selectedRows:Ce.map(e=>I[e]).filter(Boolean),connectionName:S,searchTerm:ie,onSearchChange:ae,onColumnJump:Re,colSearchOpen:Pe,onColSearchChange:Fe}),o&&(0,q.jsx)(`div`,{className:`absolute inset-0 z-30 flex items-center justify-center bg-background/60`,children:(0,q.jsx)(E,{className:`size-5 animate-spin text-primary`})}),(0,q.jsx)(`div`,{className:`flex-1 min-h-0`,children:(0,q.jsx)(Hs,{ref:w,columns:ve,rows:I.length,getCellContent:be,getCellsForSelection:!0,onCellEdited:xe,onPaste:Te,theme:C,freezeColumns:L,freezeTrailingRows:ue,rowMarkers:N?`checkbox-visible`:`number`,gridSelection:R,onGridSelectionChange:Se,onColumnResize:Oe,onHeaderMenuClick:ke,onCellContextMenu:G,getRowThemeOverride:Me,trailingRowOptions:f&&N?{sticky:!0,tint:!0}:void 0,onRowAppended:f?Le:void 0,headerIcons:hc,smoothScrollX:!0,smoothScrollY:!0,width:`100%`,height:`100%`})}),he&&(0,q.jsx)(fc,{pendingCount:ge,onSave:pe,onDiscard:()=>{me(),oe([])}}),B&&(0,q.jsx)(mc,{data:B,onClose:()=>we(null),onOpenInTab:U}),(0,q.jsx)(pc,{total:r,page:s,totalPages:Math.ceil(r/i)||1,onPageChange:c}),te&&(0,q.jsx)(cc,{colName:te.colName,bounds:te.bounds,isPinned:O.has(te.colName),filterValue:_[te.colName]??``,sortState:p===te.colName?m===`ASC`?`asc`:`desc`:null,onFilter:e=>{if(!v)return;let t={..._};e?t[te.colName]=e:delete t[te.colName],v(t)},onSort:()=>{h&&h(te.colName)},onClearSort:g,onTogglePin:()=>Ae(te.colName),onClose:()=>ne(null)}),j&&ze&&(0,q.jsx)(lc,{position:j.position,isPinned:ce.has(Be),onViewRow:()=>V(j.rowIdx),onViewCell:He?()=>H(j.rowIdx,j.colIdx):void 0,onPinRow:()=>je(j.rowIdx),onDeleteRow:()=>{N&&u&&ze&&u(N,ze[N])},onOpenFkTable:Ue&&We!=null&&y?()=>De(Ue,We):void 0,fkLabel:Ue?`Open ${Ue.table}.${Ue.column}`:void 0,onClose:()=>re(null)})]}):(0,q.jsx)(`div`,{className:`flex items-center justify-center h-full text-xs text-muted-foreground`,children:o?(0,q.jsx)(E,{className:`size-4 animate-spin`}):`Select a table`})}export{Ge as i,Ye as n,Ke as r,gc as t};
137
+ //# sourceMappingURL=glide-data-grid-B4jpQtyq.js.map