@coreframe/vite 0.1.7 → 0.1.9

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.
@@ -0,0 +1,20 @@
1
+ import { ReactNode } from "react";
2
+
3
+ //#region managed-dev-overlay.d.ts
4
+ type ManagedDevOverlayIndicatorProps = {
5
+ color?: string;
6
+ size?: number | string;
7
+ };
8
+ type ManagedDevOverlayProps = {
9
+ indicator?: ReactNode;
10
+ };
11
+ declare function toggleManagedDevOverlay(): void;
12
+ declare function ManagedDevOverlay({
13
+ indicator
14
+ }: ManagedDevOverlayProps): import("react").ReactPortal | null;
15
+ declare function ManagedDevOverlayIndicator({
16
+ color,
17
+ size
18
+ }: ManagedDevOverlayIndicatorProps): import("react").JSX.Element;
19
+ //#endregion
20
+ export { ManagedDevOverlay, ManagedDevOverlayIndicator, ManagedDevOverlayIndicatorProps, ManagedDevOverlayProps, toggleManagedDevOverlay };
@@ -0,0 +1,2 @@
1
+ import{useEffect as e,useRef as t,useState as n,useSyncExternalStore as r}from"react";import{createPortal as i}from"react-dom";import{Fragment as a,jsx as o,jsxs as s}from"react/jsx-runtime";const c=()=>{if(typeof document>`u`)return;let e=document.querySelector(`meta[name="csp-nonce"]`);if(e?.content)return e.content;let t=document.querySelector(`script[nonce]`),n=t?.nonce||t?.getAttribute(`nonce`);if(n)return n},l=(e,t,n)=>{if(typeof document>`u`)return null;let r=`isolet-style-${e}`,i=typeof CSS<`u`&&CSS.escape?CSS.escape(r):r,a=`getElementById`in n?n.getElementById(r):n.querySelector(`#${i}`);if(a)return a.textContent=t,a;let o=document.createElement(`style`);o.id=r;let s=c();return s&&o.setAttribute(`nonce`,s),o.textContent=t,n.appendChild(o),o},u=`data-isolet`,d=(e,t,n={})=>{if(typeof document>`u`)return{host:null,shadowRoot:null,container:t,target:t};let r=n.isolation??`shadow-dom`;if(r===`none`){let r=`[${u}="${e}"]`,i=t.querySelector(r);if(i)return{host:i,shadowRoot:null,container:i,target:t};let a=document.createElement(`div`);if(a.setAttribute(u,e),n.hostAttributes)for(let[e,t]of Object.entries(n.hostAttributes))a.setAttribute(e,t);return f(a,n),n.css&&l(e,n.css,t),t.appendChild(a),{host:a,shadowRoot:null,container:a,target:t}}let i=`[${u}="${e}"]`,a=t.querySelector(i);if(a){if(r===`shadow-dom`&&a.shadowRoot){let e=a.shadowRoot.querySelector(`[${u}-root]`);if(e)return{host:a,shadowRoot:a.shadowRoot,container:e,target:t}}else if(r===`scoped`)return{host:a,shadowRoot:null,container:a,target:t}}let o=document.createElement(`div`);if(o.setAttribute(u,e),n.hostAttributes)for(let[e,t]of Object.entries(n.hostAttributes))o.setAttribute(e,t);if(r===`shadow-dom`){o.style.all=`initial`;let r=o.attachShadow({mode:n.shadowMode??`open`});n.css&&l(e,n.css,r);let i=document.createElement(`div`);return i.setAttribute(`${u}-root`,``),r.appendChild(i),f(o,n),t.appendChild(o),{host:o,shadowRoot:r,container:i,target:t}}return f(o,n),n.css&&l(e,n.css,t),t.appendChild(o),{host:o,shadowRoot:null,container:o,target:t}},f=(e,t)=>{if(t.hostStyles)for(let[n,r]of Object.entries(t.hostStyles))r==null||typeof r==`function`||e.style.setProperty(n.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`),String(r));t.zIndex!=null&&(e.style.zIndex=String(t.zIndex))};var p={actions:`actions`,button:`button`,checkbox:`checkbox`,closeButton:`closeButton`,content:`content`,dialog:`dialog`,error:`error`,filePath:`filePath`,files:`files`,header:`header`,indicatorButton:`indicatorButton`,indicatorDot:`indicatorDot`,message:`message`,paragraph:`paragraph`,primary:`primary`,radiate:`radiate`,title:`title`,warning:`warning`},m=`:host{color-scheme:light dark;font:14px/1.45 system-ui,sans-serif}.indicatorButton{appearance:none;cursor:pointer;pointer-events:auto;background:0 0;border:0;justify-content:center;align-items:center;width:44px;height:44px;padding:0;display:flex;position:fixed;bottom:10px;right:10px}.indicatorDot{background:var(--managed-dev-indicator-color);box-shadow:0 0 0 1px color-mix(in srgb, Canvas 70%, transparent);height:var(--managed-dev-indicator-size);width:var(--managed-dev-indicator-size);border-radius:50%;display:block;position:relative}.indicatorDot:before{border:max(1px, calc(var(--managed-dev-indicator-size) / 9)) solid var(--managed-dev-indicator-color);border-radius:inherit;content:"";animation:1.8s ease-out infinite radiate;position:absolute;inset:0}.dialog{border:1px solid color-mix(in srgb, CanvasText 18%, transparent);color:canvastext;box-sizing:border-box;pointer-events:auto;background:canvas;border-radius:14px;width:min(430px,100vw - 36px);max-width:min(430px,100vw - 36px);max-height:min(620px,100dvh - 80px);margin:0;padding:18px;position:fixed;inset:auto 18px 62px auto;overflow:auto;box-shadow:0 18px 60px #0005}.dialog[open]{gap:12px;display:grid}.header{justify-content:space-between;align-items:center;gap:12px;display:flex}.title{margin:0;font-size:16px}.closeButton{color:inherit;cursor:pointer;font:inherit;background:0 0;border:0;min-width:44px;min-height:44px;padding:6px}.content{gap:12px;display:grid}.paragraph{margin:0}.files{gap:7px;max-height:190px;display:grid;overflow:auto}.checkbox{overflow-wrap:anywhere;align-items:start;gap:8px;display:flex}.filePath{font-family:ui-monospace,monospace}.message{box-sizing:border-box;resize:vertical;width:100%;min-height:92px;font-family:ui-monospace,monospace}.actions{flex-wrap:wrap;justify-content:end;gap:8px;display:flex}.button{border:1px solid color-mix(in srgb, CanvasText 22%, transparent);cursor:pointer;font:inherit;border-radius:8px;padding:7px 11px}.primary{color:#fff;background:#2563eb;border-color:#2563eb}.button:disabled{cursor:wait;opacity:.55}.warning{color:#b45309;white-space:pre-wrap}.error{color:#dc2626;white-space:pre-wrap}@keyframes radiate{0%{opacity:.75;transform:scale(1)}to{opacity:0;transform:scale(2.4)}}@media (width<=600px){.dialog{width:auto;max-height:calc(100dvh - 86px);padding:16px;inset:auto 12px 62px}.button{min-height:44px}}@media (prefers-reduced-motion:reduce){.indicatorDot:before{opacity:.45;animation:none;transform:scale(1.65)}}
2
+ `;const h=`/__coreframe/managed-dev`;let g=!1;const _=new Set;function v(){g=!g;for(let e of _)e()}function y({indicator:t=o(b,{})}){let[a,c]=n(null),{act:l,status:u}=D(),f=r(O,k,A);return e(()=>{let e=!0,t=d(`coreframe-managed-dev`,document.body,{css:m,hostAttributes:{"aria-live":`polite`,id:`coreframe-managed-dev`},hostStyles:{inset:`0`,pointerEvents:`none`,position:`fixed`},zIndex:2147483647});return queueMicrotask(()=>{e&&c(t.container)}),()=>{e=!1,t.host?.remove()}},[]),a?i(s(`div`,{className:p.surface,children:[E(u)?t:null,f?o(x,{act:l,status:u}):null]}),a):null}function b({color:e=`#2563eb`,size:t=14}){let n=r(O,k,A),i={"--managed-dev-indicator-color":e,"--managed-dev-indicator-size":typeof t==`number`?`${t}px`:t};return o(`button`,{"aria-controls":`coreframe-managed-dev-dialog`,"aria-expanded":n,"aria-label":`${n?`Hide`:`Show`} Coreframe managed development`,className:p.indicatorButton,onClick:v,style:i,type:`button`,children:o(`span`,{className:p.indicatorDot})})}function x({act:e,status:t}){let[r,i]=n({value:``}),[c,l]=n(()=>({paths:new Set})),u=t?.draft,d=t?.target,f=c.fingerprint===u?.fingerprint?c.paths:new Set(u?.untracked??[]),m=r.fingerprint===u?.fingerprint&&r.proposal===t?.proposal?r.value:t?.proposal??``,h=!!(u?.untracked.length&&u.untracked.every(e=>f.has(e)));return s(`dialog`,{"aria-labelledby":`coreframe-managed-title`,className:p.dialog,id:`coreframe-managed-dev-dialog`,open:!0,children:[s(`div`,{className:p.header,children:[o(`h2`,{className:p.title,id:`coreframe-managed-title`,children:`Coreframe update`}),o(`button`,{className:p.closeButton,onClick:v,type:`button`,children:`Close`})]}),s(`div`,{className:p.content,children:[o(`p`,{className:`${p.paragraph} ${t?.mode===`error`?p.error:``}`,children:t?t.busy||t.message||T(t):`Checking managed development status…`}),d?s(`p`,{className:p.paragraph,children:[d.subject,` (`,d.shortCommit,`)`]}):null,t?.warnings.map((e,t)=>o(`p`,{className:`${p.paragraph} ${p.warning}`,children:e},`${t}-${e}`)),u?s(a,{children:[s(`div`,{className:p.files,children:[u.untracked.map(e=>o(S,{checked:f.has(e),label:o(`span`,{className:p.filePath,children:e}),onChange:t=>l(()=>{let n=new Set(f);return t?n.add(e):n.delete(e),{fingerprint:u.fingerprint,paths:n}})},e)),u.untracked.length>0?o(S,{checked:h,label:`Include all untracked files`,onChange:e=>l({fingerprint:u.fingerprint,paths:e?new Set(u.untracked):new Set})}):null]}),t.proposal===void 0?s(C,{children:[o(w,{busy:t.busy,onClick:()=>void e({type:`reject`}),children:`Reject`}),o(w,{busy:t.busy,onClick:()=>void e({type:`message`,fingerprint:u.fingerprint,untracked:[...f]}),primary:!0,children:`Generate commit message`})]}):s(a,{children:[o(`textarea`,{"aria-label":`Commit message`,className:p.message,onChange:e=>i({fingerprint:u.fingerprint,proposal:t.proposal,value:e.target.value}),value:m}),s(C,{children:[o(w,{busy:t.busy,onClick:()=>void e({type:`reject`}),children:`Reject`}),o(w,{busy:t.busy,onClick:()=>{d&&e({type:`apply`,target:d.commit,fingerprint:u.fingerprint,untracked:[...f],message:m})},primary:!0,children:`Commit and refresh`})]})]})]}):d&&!t.busy?o(C,{children:o(w,{busy:t.busy,onClick:()=>void e({type:`prepare`,target:d.commit}),primary:!0,children:d.source===`upstream`?`Refresh`:String(d.source)===`dev`?`Sync with dev`:`Sync with main`})}):null]})]})}function S({checked:e,label:t,onChange:n}){return s(`label`,{className:p.checkbox,children:[o(`input`,{checked:e,onChange:e=>n(e.target.checked),type:`checkbox`}),t]})}function C({children:e}){return o(`div`,{className:p.actions,children:e})}function w({busy:e,children:t,onClick:n,primary:r=!1}){return o(`button`,{className:`${p.button} ${r?p.primary:``}`,disabled:!!e,onClick:n,type:`button`,children:t})}function T(e){return e.mode===`waiting`?`Waiting for managed development to start.`:e.mode===`unmanaged`?`Managed synchronization is unavailable for this session.`:e.mode===`error`?`Managed synchronization stopped.`:e.target&&e.target.source!==`upstream`?String(e.target?.source)===`dev`?`New changes are available in local dev.`:`New changes are available in local main.`:e.target?`A newer main commit is ready.`:`Managed development is active. No updates are available.`}function E(e){return!e||e.mode===`waiting`?!1:e.mode===`managed`?!!(e.busy||e.draft||e.message||e.target||e.warnings.length>0):!0}function D(){let[r,i]=n(),a=t(null);return e(()=>{let e=!0,t=new BroadcastChannel(`coreframe-managed-dev`);a.current=t;let n=async()=>{try{let t=await fetch(`${h}/status`);if(t.ok&&e){let e=await t.json();i(e.status)}}catch{}};t.onmessage=()=>void n();let r=setInterval(n,2e3);return n(),()=>{e=!1,clearInterval(r),t.close(),a.current=null}},[]),{act:async e=>{try{let t=await fetch(`${h}/action`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)}),n=await t.json();i(e=>{let r=n.status??e??{mode:`error`,warnings:[]};return t.ok?r:{...r,message:n.error}}),a.current?.postMessage(`changed`)}catch(e){i(t=>({...t??{warnings:[]},message:e instanceof Error?e.message:String(e),mode:`error`}))}},status:r}}function O(e){return _.add(e),()=>_.delete(e)}function k(){return g}function A(){return!1}export{y as ManagedDevOverlay,b as ManagedDevOverlayIndicator,v as toggleManagedDevOverlay};
@@ -1,12 +1,14 @@
1
+ import { startManagedDevSession } from "@coreframe/scripts/managed-dev";
1
2
  import { Plugin } from "vite";
2
3
 
3
4
  //#region managed-dev.d.ts
4
5
  type CoreframeManagedDevPluginOptions = {
5
6
  env?: NodeJS.ProcessEnv;
7
+ startSession?: typeof startManagedDevSession;
6
8
  };
7
9
  declare function coreframeManagedDevPlugin({
8
- env
10
+ env,
11
+ startSession
9
12
  }?: CoreframeManagedDevPluginOptions): Plugin;
10
- declare const browserClientSource: string;
11
13
  //#endregion
12
- export { CoreframeManagedDevPluginOptions, browserClientSource, coreframeManagedDevPlugin };
14
+ export { CoreframeManagedDevPluginOptions, coreframeManagedDevPlugin };
@@ -1,152 +1 @@
1
- import{managedDevTokenEnv as e,managedDevUrlEnv as t}from"@coreframe/scripts/managed-dev-protocol";const n=`/__coreframe/managed-dev`;function r({env:r=process.env}={}){let l=r[t],u=r[e],d=!!(l&&u);async function f(e,t){if(!l||!u)throw Error(`Managed development is not configured.`);return fetch(new URL(e,l),{...t,headers:{...t?.headers,Authorization:`Bearer ${u}`,"Content-Type":`application/json`}})}return{name:`coreframe:managed-dev`,apply:`serve`,config(){return{define:{"import.meta.env.COREFRAME_MANAGED_DEV":JSON.stringify(d)}}},async configureServer(e){if(!d)return;let t=await f(`/handshake`,{method:`POST`});if(!t.ok){let e=await t.text();throw Error(`Coreframe managed development could not start: ${e}`)}e.middlewares.use(async(e,t,r)=>{if(!e.url){r();return}let l=new URL(e.url,`http://coreframe.local`).pathname;if(l===`/@coreframe/managed-dev`){t.statusCode=200,t.setHeader(`Content-Type`,`text/javascript; charset=utf-8`),t.end(c);return}if(l===`${n}/status`&&e.method===`GET`){await i(await f(`/status`),t);return}if(l===`${n}/action`&&e.method===`POST`){if(!o(e.socket.remoteAddress)){s(t,403,{error:`Managed development actions require a loopback client.`});return}await i(await f(`/action`,{body:await a(e),method:`POST`}),t);return}r()})}}}async function i(e,t){let n=await e.text();t.statusCode=e.status,t.setHeader(`Content-Type`,e.headers.get(`content-type`)??`application/json`),t.end(n)}async function a(e){let t=``;for await(let n of e)if(t+=String(n),t.length>1e6)throw Error(`Managed development request is too large.`);return t}function o(e){return e===`127.0.0.1`||e===`::1`||e?.startsWith(`::ffff:127.`)}function s(e,t,n){e.statusCode=t,e.setHeader(`Content-Type`,`application/json`),e.end(JSON.stringify(n))}const c=String.raw`
2
- const endpoint = "/__coreframe/managed-dev"
3
- const channel = new BroadcastChannel("coreframe-managed-dev")
4
- let status
5
- let selected = new Set()
6
-
7
- const host = document.createElement("div")
8
- host.id = "coreframe-managed-dev"
9
- host.setAttribute("aria-live", "polite")
10
- document.body.append(host)
11
- const root = host.attachShadow({ mode: "open" })
12
-
13
- root.innerHTML = \`
14
- <style>
15
- :host { color-scheme: light dark; font: 14px/1.45 ui-sans-serif, system-ui, sans-serif; }
16
- dialog { background: Canvas; color: CanvasText; border: 1px solid color-mix(in srgb, CanvasText 18%, transparent); border-radius: 14px; box-shadow: 0 18px 60px #0005; inset: auto 18px 18px auto; margin: 0; max-height: min(620px, calc(100vh - 36px)); max-width: min(430px, calc(100vw - 36px)); overflow: auto; padding: 18px; width: 100%; }
17
- dialog[open] { display: grid; gap: 12px; }
18
- h2 { font-size: 16px; margin: 0; }
19
- p { margin: 0; }
20
- .files { display: grid; gap: 7px; max-height: 190px; overflow: auto; }
21
- label { align-items: start; display: flex; gap: 8px; overflow-wrap: anywhere; }
22
- textarea { box-sizing: border-box; min-height: 92px; resize: vertical; width: 100%; }
23
- .actions { display: flex; flex-wrap: wrap; gap: 8px; justify-content: end; }
24
- button { border: 1px solid color-mix(in srgb, CanvasText 22%, transparent); border-radius: 8px; cursor: pointer; font: inherit; padding: 7px 11px; }
25
- button.primary { background: #2563eb; border-color: #2563eb; color: white; }
26
- button:disabled { cursor: wait; opacity: .55; }
27
- .warning { color: #b45309; white-space: pre-wrap; }
28
- .error { color: #dc2626; white-space: pre-wrap; }
29
- </style>
30
- <dialog aria-labelledby="coreframe-managed-title">
31
- <h2 id="coreframe-managed-title">Coreframe update</h2>
32
- <div class="content"></div>
33
- </dialog>
34
- \`
35
-
36
- const dialog = root.querySelector("dialog")
37
- const content = root.querySelector(".content")
38
-
39
- channel.onmessage = () => void loadStatus()
40
- setInterval(loadStatus, 2000)
41
- void loadStatus()
42
-
43
- async function loadStatus() {
44
- try {
45
- const response = await fetch(endpoint + "/status")
46
- if (!response.ok) return
47
- status = (await response.json()).status
48
- render()
49
- } catch {}
50
- }
51
-
52
- async function act(action) {
53
- const response = await fetch(endpoint + "/action", {
54
- method: "POST",
55
- headers: { "Content-Type": "application/json" },
56
- body: JSON.stringify(action),
57
- })
58
- const result = await response.json()
59
- status = response.ok
60
- ? result.status
61
- : { ...(result.status || status), message: result.error }
62
- channel.postMessage("changed")
63
- render()
64
- }
65
-
66
- function render() {
67
- if (!status || status.mode === "waiting" || (status.mode === "managed" && !status.target && !status.busy && !status.message && status.warnings.length === 0)) {
68
- dialog.close()
69
- return
70
- }
71
- if (!dialog.open) dialog.show()
72
- const target = status.target
73
- const draft = status.draft
74
- if (draft && selected.size === 0) selected = new Set(draft.untracked)
75
- content.innerHTML = ""
76
- content.append(paragraph(status.busy || status.message || modeMessage(status)))
77
- if (target) content.append(paragraph(target.subject + " (" + target.shortCommit + ")"))
78
- for (const warning of status.warnings || []) content.append(paragraph(warning, "warning"))
79
- if (status.mode === "error" && status.message) content.lastElementChild?.classList.add("error")
80
-
81
- if (draft) {
82
- const files = document.createElement("div")
83
- files.className = "files"
84
- for (const file of draft.untracked) files.append(checkbox(file, file, selected.has(file)))
85
- if (draft.untracked.length) files.append(checkbox("__all", "Include all untracked files", selected.size === draft.untracked.length))
86
- content.append(files)
87
- if (status.proposal !== undefined) {
88
- const message = document.createElement("textarea")
89
- message.value = status.proposal
90
- message.setAttribute("aria-label", "Commit message")
91
- content.append(message)
92
- content.append(actions(
93
- button("Reject", () => act({ type: "reject" })),
94
- button("Commit and refresh", () => act({ type: "apply", target: target.commit, fingerprint: draft.fingerprint, untracked: [...selected], message: message.value }), true),
95
- ))
96
- } else {
97
- content.append(actions(
98
- button("Reject", () => act({ type: "reject" })),
99
- button("Generate commit message", () => act({ type: "message", fingerprint: draft.fingerprint, untracked: [...selected] }), true),
100
- ))
101
- }
102
- } else if (target && !status.busy) {
103
- const label = target.source === "local" ? "Sync with main" : "Refresh"
104
- content.append(actions(button(label, () => act({ type: "prepare", target: target.commit }), true)))
105
- }
106
- }
107
-
108
- function checkbox(value, labelText, checked) {
109
- const label = document.createElement("label")
110
- const input = document.createElement("input")
111
- input.type = "checkbox"
112
- input.checked = checked
113
- input.onchange = () => {
114
- if (value === "__all") selected = input.checked ? new Set(status.draft.untracked) : new Set()
115
- else if (input.checked) selected.add(value)
116
- else selected.delete(value)
117
- render()
118
- }
119
- label.append(input, document.createTextNode(labelText))
120
- return label
121
- }
122
-
123
- function paragraph(text, className) {
124
- const element = document.createElement("p")
125
- element.textContent = text || ""
126
- if (className) element.className = className
127
- return element
128
- }
129
-
130
- function button(label, onclick, primary = false) {
131
- const element = document.createElement("button")
132
- element.textContent = label
133
- element.disabled = Boolean(status.busy)
134
- if (primary) element.className = "primary"
135
- element.onclick = onclick
136
- return element
137
- }
138
-
139
- function actions(...buttons) {
140
- const element = document.createElement("div")
141
- element.className = "actions"
142
- element.append(...buttons)
143
- return element
144
- }
145
-
146
- function modeMessage(value) {
147
- if (value.mode === "unmanaged") return "Managed synchronization is unavailable for this session."
148
- if (value.mode === "error") return "Managed synchronization stopped."
149
- if (value.target?.source === "local") return "New changes are available in local main."
150
- return "A newer main commit is ready."
151
- }
152
- `;export{c as browserClientSource,r as coreframeManagedDevPlugin};
1
+ import{readProjectConfig as e}from"@coreframe/scripts/config";import{startManagedDevSession as t}from"@coreframe/scripts/managed-dev";import{managedDevEnv as n}from"@coreframe/scripts/managed-dev-protocol";const r=`/__coreframe/managed-dev`;function i({env:i=process.env,startSession:c=t}={}){let l=i[n]===`1`,u;return{name:`coreframe:managed-dev`,apply:`serve`,config(){return{define:{"import.meta.env.COREFRAME_MANAGED_DEV":JSON.stringify(l)}}},async configureServer(t){if(!l)return;let n=t.config.root;u=await c({config:await e({cwd:n}),cwd:n,env:i,onRestart:()=>queueMicrotask(()=>void t.restart())}),await u.activate(),t.httpServer?.once(`close`,()=>void u?.close()),t.middlewares.use(async(e,t,n)=>{if(!e.url){n();return}let i=new URL(e.url,`http://coreframe.local`).pathname;if(i===`${r}/status`&&e.method===`GET`){s(t,200,{status:u.getStatus()});return}if(i===`${r}/action`&&e.method===`POST`){if(!o(e.socket.remoteAddress)){s(t,403,{error:`Managed development actions require a loopback client.`});return}try{let n=await a(e);s(t,200,await u.action(n))}catch(e){s(t,400,{error:e instanceof Error?e.message:String(e),status:u.getStatus()})}return}n()})},async closeBundle(){await u?.close()}}}async function a(e){let t=``;for await(let n of e)if(t+=String(n),t.length>1e6)throw Error(`Managed development request is too large.`);return t?JSON.parse(t):{}}function o(e){return e===`127.0.0.1`||e===`::1`||e?.startsWith(`::ffff:127.`)}function s(e,t,n){e.statusCode=t,e.setHeader(`Content-Type`,`application/json`),e.end(JSON.stringify(n))}export{i as coreframeManagedDevPlugin};
package/dist/style.css ADDED
@@ -0,0 +1 @@
1
+ :host{color-scheme:light dark;font:14px/1.45 system-ui,sans-serif}.indicatorButton{appearance:none;cursor:pointer;pointer-events:auto;background:0 0;border:0;justify-content:center;align-items:center;width:44px;height:44px;padding:0;display:flex;position:fixed;bottom:10px;right:10px}.indicatorDot{background:var(--managed-dev-indicator-color);box-shadow:0 0 0 1px color-mix(in srgb, Canvas 70%, transparent);height:var(--managed-dev-indicator-size);width:var(--managed-dev-indicator-size);border-radius:50%;display:block;position:relative}.indicatorDot:before{border:max(1px, calc(var(--managed-dev-indicator-size) / 9)) solid var(--managed-dev-indicator-color);border-radius:inherit;content:"";animation:1.8s ease-out infinite radiate;position:absolute;inset:0}.dialog{border:1px solid color-mix(in srgb, CanvasText 18%, transparent);color:canvastext;box-sizing:border-box;pointer-events:auto;background:canvas;border-radius:14px;width:min(430px,100vw - 36px);max-width:min(430px,100vw - 36px);max-height:min(620px,100dvh - 80px);margin:0;padding:18px;position:fixed;inset:auto 18px 62px auto;overflow:auto;box-shadow:0 18px 60px #0005}.dialog[open]{gap:12px;display:grid}.header{justify-content:space-between;align-items:center;gap:12px;display:flex}.title{margin:0;font-size:16px}.closeButton{color:inherit;cursor:pointer;font:inherit;background:0 0;border:0;min-width:44px;min-height:44px;padding:6px}.content{gap:12px;display:grid}.paragraph{margin:0}.files{gap:7px;max-height:190px;display:grid;overflow:auto}.checkbox{overflow-wrap:anywhere;align-items:start;gap:8px;display:flex}.filePath{font-family:ui-monospace,monospace}.message{box-sizing:border-box;resize:vertical;width:100%;min-height:92px;font-family:ui-monospace,monospace}.actions{flex-wrap:wrap;justify-content:end;gap:8px;display:flex}.button{border:1px solid color-mix(in srgb, CanvasText 22%, transparent);cursor:pointer;font:inherit;border-radius:8px;padding:7px 11px}.primary{color:#fff;background:#2563eb;border-color:#2563eb}.button:disabled{cursor:wait;opacity:.55}.warning{color:#b45309;white-space:pre-wrap}.error{color:#dc2626;white-space:pre-wrap}@keyframes radiate{0%{opacity:.75;transform:scale(1)}to{opacity:0;transform:scale(2.4)}}@media (width<=600px){.dialog{width:auto;max-height:calc(100dvh - 86px);padding:16px;inset:auto 12px 62px}.button{min-height:44px}}@media (prefers-reduced-motion:reduce){.indicatorDot:before{opacity:.45;animation:none;transform:scale(1.65)}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coreframe/vite",
3
- "version": "0.1.7",
3
+ "version": "0.1.9",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/airlock-labs/coreframe.git",
@@ -39,6 +39,10 @@
39
39
  "types": "./dist/managed-dev.d.ts",
40
40
  "default": "./dist/managed-dev.js"
41
41
  },
42
+ "./managed-dev-overlay": {
43
+ "types": "./dist/managed-dev-overlay.d.ts",
44
+ "default": "./dist/managed-dev-overlay.js"
45
+ },
42
46
  "./preset": {
43
47
  "types": "./dist/preset.d.ts",
44
48
  "default": "./dist/preset.js"
@@ -49,22 +53,30 @@
49
53
  "@svgr/core": "^8.1.0",
50
54
  "@svgr/plugin-jsx": "^8.1.0",
51
55
  "unplugin-icons": "^23.0.1",
52
- "@coreframe/dashboard": "^0.1.4",
53
56
  "@coreframe/lib": "^0.1.6",
54
- "@coreframe/scripts": "^0.1.20"
57
+ "@coreframe/dashboard": "^0.2.0",
58
+ "@coreframe/scripts": "^0.1.22"
55
59
  },
56
60
  "devDependencies": {
61
+ "@tsdown/css": "0.22.3",
57
62
  "@types/node": "^26.1.0",
63
+ "@types/react": "^19.2.17",
64
+ "@types/react-dom": "^19.2.3",
65
+ "isolet-js": "0.0.7",
66
+ "react": "^19.2.7",
67
+ "react-dom": "^19.2.7",
58
68
  "tsdown": "0.22.3",
59
69
  "typescript": "6.0.3",
60
70
  "vite": "^8.1.0",
61
71
  "vitest": "^4.1.9"
62
72
  },
63
73
  "peerDependencies": {
74
+ "react": ">=18",
75
+ "react-dom": ">=18",
64
76
  "vite": "^8.0.0"
65
77
  },
66
78
  "scripts": {
67
- "build": "tsdown",
79
+ "build": "tsdown && tsdown --config tsdown.overlay.config.ts",
68
80
  "test": "vitest run",
69
81
  "typecheck": "tsc --noEmit -p tsconfig.json",
70
82
  "format": "oxfmt",