pixifact-cli 0.16.0 → 0.18.0

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 @@
1
+ :root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;color:var(--text);background:var(--bg);font-synthesis:none;text-rendering:optimizelegibility;font-variant-numeric:tabular-nums;--bg:var(--lightningcss-light,#e8ebf0)var(--lightningcss-dark,#1c1e23);--chrome:var(--lightningcss-light,#e9ebef)var(--lightningcss-dark,#2b2d33);--sidebar:var(--lightningcss-light,#eef0f4)var(--lightningcss-dark,#25282e);--panel:var(--lightningcss-light,#f7f8fa)var(--lightningcss-dark,#292c32);--panel-raised:var(--lightningcss-light,#fff)var(--lightningcss-dark,#343840);--section:var(--lightningcss-light,#f0f2f5)var(--lightningcss-dark,#30343b);--canvas:var(--lightningcss-light,#dfe3e9)var(--lightningcss-dark,#181b20);--grid-line:var(--lightningcss-light,#d0d6de)var(--lightningcss-dark,#272c33);--line:var(--lightningcss-light,#d4d8df)var(--lightningcss-dark,#3b4048);--line-strong:var(--lightningcss-light,#bdc4ce)var(--lightningcss-dark,#535a64);--soft-line:var(--lightningcss-light,#e4e7ec)var(--lightningcss-dark,#363b43);--text:var(--lightningcss-light,#242832)var(--lightningcss-dark,#edf0f4);--muted:var(--lightningcss-light,#626b78)var(--lightningcss-dark,#a9b0bc);--faint:var(--lightningcss-light,#8a93a1)var(--lightningcss-dark,#818a96);--focus:var(--lightningcss-light,#007aff)var(--lightningcss-dark,#0a84ff);--focus-hover:var(--lightningcss-light,#006bdd)var(--lightningcss-dark,#3598ff);--focus-soft:var(--lightningcss-light,#dcecff)var(--lightningcss-dark,#203c5d);--selected-text:var(--lightningcss-light,#14518e)var(--lightningcss-dark,#e0f0ff);--hover:var(--lightningcss-light,#e8edf4)var(--lightningcss-dark,#373c44);--drop:var(--lightningcss-light,#d6e9ff)var(--lightningcss-dark,#244463);--success:var(--lightningcss-light,#25855a)var(--lightningcss-dark,#59b987);--success-soft:var(--lightningcss-light,#e4f3e9)var(--lightningcss-dark,#1b3a2c);--success-soft-hover:var(--lightningcss-light,#d8eee0)var(--lightningcss-dark,#244735);--warning:var(--lightningcss-light,#a36d16)var(--lightningcss-dark,#d9a44a);--warning-soft:var(--lightningcss-light,#fff4df)var(--lightningcss-dark,#413625);--warning-text:var(--lightningcss-light,#78551b)var(--lightningcss-dark,#e4be75);--danger:var(--lightningcss-light,#c73f4a)var(--lightningcss-dark,#f07f83);--danger-soft:var(--lightningcss-light,#fff0f1)var(--lightningcss-dark,#492b32);--danger-line:var(--lightningcss-light,#e6bfc4)var(--lightningcss-dark,#85515b);--control:var(--lightningcss-light,#fff)var(--lightningcss-dark,#24272d);--disabled-bg:var(--lightningcss-light,#edf0f3)var(--lightningcss-dark,#30343b);--disabled-text:var(--lightningcss-light,#929aa5)var(--lightningcss-dark,#858f9b);--icon:var(--lightningcss-light,#6a83a6)var(--lightningcss-dark,#91a7c1);--icon-bright:var(--lightningcss-light,#4974ab)var(--lightningcss-dark,#bdd6f8);--binding:var(--lightningcss-light,#1a649e)var(--lightningcss-dark,#8abdec);--overlay:var(--lightningcss-light,#20283885)var(--lightningcss-dark,#080b10b8);--shadow:0 14px 32px var(--lightningcss-light,#2632482b)var(--lightningcss-dark,#06090c8c);font-family:-apple-system,BlinkMacSystemFont,SF Pro Text,PingFang SC,Helvetica Neue,sans-serif}:root[data-theme=system]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark}@media (prefers-color-scheme:dark){:root[data-theme=system]{--lightningcss-light: ;--lightningcss-dark:initial}}:root[data-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html,body,#app{width:100%;height:100%;margin:0;overflow:hidden}button,input,select{color:inherit;font:inherit;letter-spacing:0}button{border:0}svg.lucide{stroke-width:1.8px}.editor-shell{grid-template-columns:min(var(--left-width), 18vw) 5px min(var(--hierarchy-width), 21vw) 5px minmax(220px, 1fr) 5px min(var(--right-width), 31vw);background:var(--bg);grid-template-rows:48px 36px minmax(0,1fr);width:100%;height:100%;display:grid}.editor-session-standby{background:var(--bg);place-items:center;width:100%;height:100%;display:grid}.editor-session-standby>section{gap:18px;width:min(420px,100vw - 40px);display:grid}.standby-product{color:var(--faint);font-size:10px;font-weight:750}.editor-session-standby h1{color:var(--text);letter-spacing:0;margin:0;font-size:18px}.standby-context{border-top:1px solid var(--line);border-bottom:1px solid var(--line);grid-template-columns:76px minmax(0,1fr);gap:8px 12px;padding:14px 0;display:grid}.standby-context span{color:var(--muted);font-size:12px}.standby-context strong{min-width:0;color:var(--text);text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:500;overflow:hidden}.takeover-button{border:1px solid var(--focus);background:var(--focus);color:#fff;cursor:pointer;border-radius:8px;justify-self:start;min-width:104px;height:34px;padding:0 14px;font-size:12px;font-weight:650}.takeover-button:hover:not(:disabled){background:var(--focus-hover)}.standby-note,.standby-error{margin:-6px 0 0;font-size:11px;line-height:1.6}.standby-note{color:var(--muted)}.standby-error{color:var(--danger)}.topbar{border-bottom:1px solid var(--line);background:var(--chrome);-webkit-backdrop-filter:blur(18px)saturate(1.15);backdrop-filter:blur(18px)saturate(1.15);grid-area:1/1/auto/-1;align-items:center;min-width:0;display:flex}.brand{min-width:0;height:100%;color:var(--text);letter-spacing:.08em;align-items:center;gap:14px;padding:0 16px;font-size:11px;font-weight:700;display:flex}.project-name{border-left:1px solid var(--line-strong);min-width:0;max-width:min(30vw,320px);color:var(--muted);letter-spacing:0;text-overflow:ellipsis;white-space:nowrap;padding-left:14px;font-size:13px;font-weight:600;overflow:hidden}.history-tools{align-items:center;gap:3px;margin-left:auto;padding-right:10px;display:flex}.history-tools button,.reset-button{width:30px;height:30px;color:var(--muted);cursor:pointer;background:0 0;border-radius:7px;place-items:center;padding:0;display:inline-grid}.history-tools button:hover:not(:disabled),.reset-button:hover:not(:disabled){background:var(--hover);color:var(--text)}.history-tools .save-button{border:1px solid var(--focus);background:var(--focus);color:#fff;gap:5px;width:auto;padding:0 10px;font-size:11px;font-weight:600;display:inline-flex}.history-tools .save-button:hover:not(:disabled){border-color:var(--focus-hover);background:var(--focus-hover);color:#fff}button:disabled{opacity:.35;cursor:default}button:focus-visible,summary:focus-visible,.panel-resizer:focus-visible{outline:2px solid var(--focus);outline-offset:-2px}.sync-state{border-left:1px solid var(--line);min-width:95px;height:100%;color:var(--muted);align-items:center;gap:7px;padding:0 14px;font-size:11px;display:flex}.sync-state span{background:var(--success);border-radius:50%;width:7px;height:7px}.sync-state[data-state=saving] span,.sync-state[data-state=unsaved] span{background:var(--warning)}.sync-state[data-state=conflict] span,.sync-state[data-state=error] span{background:var(--danger)}.scene-tabs{scrollbar-width:thin;scrollbar-color:var(--line-strong) transparent;border-bottom:1px solid var(--line);background:var(--chrome);grid-area:2/3/auto/-1;min-width:0;display:flex;overflow:auto hidden}@supports selector(::-webkit-scrollbar){.scene-tabs{scrollbar-width:auto;scrollbar-color:auto}.scene-tabs::-webkit-scrollbar{height:4px}.scene-tabs::-webkit-scrollbar-track{background:0 0}.scene-tabs::-webkit-scrollbar-thumb{background:var(--line-strong);border-radius:2px}.scene-tabs::-webkit-scrollbar-thumb:hover{background:var(--faint)}}.scene-tab{max-width:240px;color:var(--muted);border:1px solid #0000;border-bottom:0;border-radius:8px 8px 0 0;flex:none;align-items:center;margin:4px 2px 0;display:flex;position:relative}.scene-tab:hover:not(.active){background:var(--hover)}.scene-tab.active{border-color:var(--line);background:var(--panel-raised);color:var(--text)}.scene-tab.dragging{opacity:.5}.scene-tab.drop-before:before,.scene-tab.drop-after:after{z-index:1;background:var(--focus);content:"";pointer-events:none;border-radius:1px;width:2px;position:absolute;top:2px;bottom:2px}.scene-tab.drop-before:before{left:-2px}.scene-tab.drop-after:after{right:-2px}.scene-tab-activate{-webkit-user-select:none;user-select:none;touch-action:none;min-width:0;height:100%;color:inherit;cursor:pointer;background:0 0;align-items:center;gap:7px;padding:0 4px 0 12px;font-size:12px;display:flex}.scene-tab-activate>span:first-child{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.scene-tab-status{color:var(--warning);font-size:10px}.scene-tab-status.error{color:var(--danger);font-weight:800}.scene-tab-close{height:25px;color:inherit;cursor:pointer;background:0 0;border-radius:4px;flex:0 0 25px;place-items:center;margin-right:4px;display:grid}.scene-tab-close:hover:not(:disabled){background:var(--hover)}.editor-modal-backdrop{z-index:30;background:var(--overlay);place-items:center;display:grid;position:fixed;inset:0}.editor-modal{border:1px solid var(--line-strong);background:var(--panel-raised);width:min(440px,100vw - 32px);box-shadow:var(--shadow);color:var(--text);border-radius:13px;padding:22px}.editor-modal h2{margin:0 0 10px;font-size:15px}.editor-modal p{color:var(--muted);margin:0 0 20px;font-size:12px;line-height:1.5}.editor-modal-actions{justify-content:flex-end;gap:8px;display:flex}.editor-modal-actions button{border:1px solid var(--line);background:var(--section);min-height:31px;color:var(--text);cursor:pointer;border-radius:7px;padding:0 12px;font-size:11px}.editor-modal-actions button.primary{border-color:var(--focus);background:var(--focus);color:#fff}.conflict-modal{width:min(920px,100vw - 32px)}.conflict-sources{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-bottom:20px;display:grid}.conflict-sources strong{margin-bottom:7px;font-size:11px;display:block}.conflict-sources pre{border:1px solid var(--line);background:var(--control);height:min(42vh,340px);color:var(--text);margin:0;padding:10px;font-size:11px;overflow:auto}.workspace{display:contents}.left-panel{grid-area:2/1/4}.asset-resizer{grid-area:2/2/4}.hierarchy-sidebar{grid-area:3/3}.hierarchy-resizer{grid-area:3/4}.canvas-panel{grid-area:3/5}.inspector-resizer{grid-area:3/6}.right-panel{grid-area:3/7}.panel-resizer{z-index:4;background:var(--panel);box-shadow:inset 1px 0 var(--line);cursor:col-resize;position:relative}.panel-resizer:before{content:"";position:absolute;inset:0 -3px}.panel-resizer:hover,.is-resizing-panel .panel-resizer{background:var(--focus-soft);box-shadow:inset 1px 0 var(--focus)}.panel-resizer.disabled,.panel-resizer.disabled:hover{background:var(--panel);box-shadow:inset 1px 0 var(--line);cursor:default}.is-resizing-panel,.is-resizing-panel *{cursor:col-resize!important;-webkit-user-select:none!important;user-select:none!important}.left-panel,.hierarchy-sidebar,.right-panel,.canvas-panel{min-width:0;min-height:0}.hierarchy-sidebar,.right-panel{background:var(--panel)}.left-panel{background:var(--sidebar)}.left-panel,.hierarchy-sidebar{flex-direction:column;display:flex}.right-panel{flex-direction:column;display:flex;overflow:hidden}.right-panel>.inspector-panel,.asset-panel-content,.hierarchy-panel-content{flex:1;min-height:0;overflow:auto}.panel-collapse-button,.panel-rail-toggle{color:var(--muted);cursor:pointer;background:0 0;place-items:center;padding:0;display:grid}.panel-collapse-button:hover,.panel-rail-toggle:hover{background:var(--hover);color:var(--text)}.panel-rail-toggle{width:40px;height:40px}.left-panel-footer{border-top:1px solid var(--line);background:var(--sidebar);flex:0 0 44px;align-items:center;padding:0 8px;display:flex}.settings-trigger{width:100%;height:32px;color:var(--muted);text-align:left;cursor:pointer;background:0 0;border-radius:7px;align-items:center;gap:9px;padding:0 8px;font-size:12px;display:flex}.settings-trigger:hover,.settings-trigger[data-state=open]{background:var(--hover);color:var(--text)}.editor-settings-popover{z-index:20;border:1px solid var(--line);background:var(--panel-raised);width:248px;box-shadow:var(--shadow);color:var(--text);border-radius:12px;padding:8px}.settings-heading{padding:6px 8px 10px;font-size:13px;font-weight:600}.settings-option{background:var(--section);cursor:pointer;border-radius:8px;justify-content:space-between;align-items:center;gap:10px;min-height:54px;padding:9px 10px;display:flex}.settings-option:hover{background:var(--hover)}.settings-option span{gap:4px;min-width:0;display:grid}.settings-option strong{font-size:12px;font-weight:600}.settings-option small{color:var(--muted);font-size:11px}.settings-option .settings-switch{appearance:none;background:var(--line-strong);cursor:pointer;border-radius:999px;flex:0 0 32px;width:32px;height:20px;margin:0;transition:background-color .16s;position:relative}.settings-option .settings-switch:before{content:"";background:#fff;border-radius:50%;width:16px;height:16px;transition:transform .16s;position:absolute;top:2px;left:2px;box-shadow:0 1px 3px #26324838}.settings-option .settings-switch:checked{background:var(--focus)}.settings-option .settings-switch:checked:before{transform:translate(12px)}.settings-option .settings-switch:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.settings-theme{background:var(--section);border-radius:8px;gap:9px;margin-top:6px;padding:10px;display:grid}.settings-theme>strong{font-size:12px;font-weight:600}.settings-theme-options{background:var(--hover);border-radius:7px;grid-template-columns:1.35fr 1fr 1fr;gap:2px;padding:2px;display:grid}.settings-theme-options button{min-width:0;min-height:26px;color:var(--muted);cursor:pointer;background:0 0;border-radius:5px;padding:0 4px;font-size:11px}.settings-theme-options button[aria-pressed=true]{background:var(--panel-raised);color:var(--text);box-shadow:0 1px 3px var(--lightningcss-light,#26324829)var(--lightningcss-dark,#080b104d)}.settings-theme-options button:focus-visible{outline:2px solid var(--focus);outline-offset:1px}@media (prefers-reduced-motion:reduce){.settings-option .settings-switch,.settings-option .settings-switch:before{transition:none}}.panel-title,.inspector-section-title,.asset-group-label{color:var(--muted);font-size:10px;font-weight:700}.panel-title{z-index:2;border-bottom:1px solid var(--line);background:var(--panel);height:38px;color:var(--text);flex:0 0 38px;justify-content:space-between;align-items:center;padding:0 8px 0 14px;font-size:12px;font-weight:600;display:flex;position:sticky;top:0}.left-panel>.panel-title{background:var(--sidebar);flex-basis:36px;height:36px}.panel-title .panel-collapse-button{width:26px;height:26px}.tree-list{margin:0;padding:0;list-style:none}.hierarchy-panel{min-height:100%;padding:0 0 6px}.hierarchy-toolbar{z-index:2;border-bottom:1px solid var(--line);background:var(--panel);grid-template-columns:minmax(0,1fr) repeat(3,30px);align-items:center;gap:2px;height:42px;padding:5px 6px;display:grid;position:sticky;top:0}.hierarchy-toolbar button{width:30px;height:30px;color:var(--muted);cursor:pointer;background:0 0;border-radius:6px;place-items:center;padding:0;display:grid}.add-node-menu{min-width:0}.add-node-menu summary{width:30px;height:30px;color:var(--muted);cursor:pointer;background:0 0;border-radius:6px;place-items:center;padding:0;list-style:none;display:grid;position:relative}.add-node-menu summary:after{background:var(--muted);clip-path:polygon(100% 0,100% 100%,0 100%);content:"";pointer-events:none;width:7px;height:7px;position:absolute;bottom:3px;right:3px}.add-node-menu summary::-webkit-details-marker{display:none}.add-node-menu summary:hover,.add-node-menu[open] summary{background:var(--hover);color:var(--text)}.add-node-options{z-index:10;border:1px solid var(--line);background:var(--panel-raised);width:calc(100% - 20px);max-height:min(70vh,470px);box-shadow:var(--shadow);border-radius:10px;grid-template-columns:minmax(0,1fr);gap:10px;padding:10px;display:grid;position:absolute;top:38px;left:10px;overflow:auto}.add-node-group{align-content:start;gap:2px;display:grid}.add-node-group>span{color:var(--muted);padding:4px 7px;font-size:10px;font-weight:700}.add-node-group button{width:100%;height:27px;color:var(--text);text-align:left;padding:0 7px;font-size:11px;display:block}.hierarchy-context-menu,.scene-tab-context-menu{z-index:30;border:1px solid var(--line);background:var(--panel-raised);min-width:156px;box-shadow:var(--shadow);color:var(--text);border-radius:10px;padding:5px}.hierarchy-context-submenu{min-width:172px;max-height:min(70vh,560px);overflow-y:auto}.hierarchy-context-item,.scene-tab-context-item{cursor:default;border-radius:6px;outline:none;justify-content:space-between;align-items:center;width:100%;min-height:27px;padding:0 9px;font-size:12px;display:flex}.hierarchy-context-item[data-highlighted],.scene-tab-context-item[data-highlighted]{background:var(--hover)}.hierarchy-context-item[data-disabled],.scene-tab-context-item[data-disabled]{color:var(--faint)}.hierarchy-context-label{color:var(--muted);padding:7px 9px 3px;font-size:10px;font-weight:700}.hierarchy-context-separator{background:var(--soft-line);height:1px;margin:5px 4px}.hierarchy-search{border:1px solid var(--line);background:var(--control);min-width:0;height:30px;color:var(--muted);border-radius:7px;align-items:center;gap:5px;padding:0 6px;display:flex}.hierarchy-search:focus-within{border-color:var(--focus);box-shadow:0 0 0 2px var(--focus-soft)}.hierarchy-search input{width:100%;min-width:0;color:var(--text);background:0 0;border:0;outline:0;font-size:11px}.hierarchy-search svg{flex:none}.hierarchy-search input::placeholder{color:var(--faint)}.hierarchy-toolbar button:hover:not(:disabled){background:var(--hover);color:var(--text)}.tree-row{width:calc(100% - 12px);height:28px;color:var(--text);text-align:left;cursor:default;background:0 0;border-radius:6px;grid-template-columns:15px 16px minmax(0,1fr) auto;align-items:center;gap:4px;margin:0 6px;padding-top:0;padding-bottom:0;padding-right:9px;display:grid;position:relative}.hierarchy-panel.is-dragging .tree-row{cursor:grabbing}.hierarchy-panel.is-asset-dragging .tree-row{cursor:copy}.tree-row.drop-inside{background:var(--drop);box-shadow:inset 0 0 0 1px var(--focus)}.tree-row.drop-before:before,.tree-row.drop-after:after{z-index:1;background:var(--focus);content:"";pointer-events:none;height:2px;position:absolute;left:5px;right:5px}.tree-row.drop-before:before{top:-1px}.tree-row.drop-after:after{bottom:-1px}.tree-row:hover{background:var(--hover)}.tree-row.selected{background:var(--focus-soft);color:var(--selected-text)}.tree-disclosure{width:15px;height:20px;color:var(--muted);place-items:center;display:grid}.tree-disclosure.empty{visibility:hidden}.tree-icon{color:var(--icon)}.tree-label{text-overflow:ellipsis;white-space:nowrap;min-width:0;font-size:12px;overflow:hidden}.tree-row small{color:var(--faint);font-size:9px}.scene-root{cursor:default;padding-left:8px;font-weight:650}.scene-mark{border:1px solid var(--icon);width:14px;height:14px;color:var(--icon-bright);border-radius:4px;place-items:center;font-size:8px;display:grid}.asset-list{padding:7px 0 14px}.asset-row{width:calc(100% - 12px);height:28px;color:var(--text);text-align:left;background:0 0;border-radius:6px;grid-template-columns:14px 18px minmax(0,1fr);align-items:center;gap:5px;margin:0 6px;padding:0 12px;display:grid}button.asset-row{cursor:pointer}.asset-directory{color:var(--muted)}.asset-directory svg:nth-of-type(2){color:var(--icon-bright)}.asset-row[data-asset-draggable=true]{cursor:grab;-webkit-user-select:none;user-select:none}.asset-row:hover,.asset-row.selected{background:var(--hover)}.asset-row.selected{background:var(--focus-soft);color:var(--selected-text)}.asset-row.focused{background:var(--focus-soft);box-shadow:inset 2px 0 var(--focus)}.asset-row span{text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.asset-row .asset-row-spacer{width:14px}.asset-thumbnail{object-fit:contain;pointer-events:none;border-radius:2px;width:18px;height:18px}.asset-row.asset-draggable{color:var(--muted)}.asset-empty,.panel-empty{color:var(--faint);padding:14px 12px;font-size:12px}.panel-empty.compact{padding-top:18px}.canvas-panel{background:var(--canvas);position:relative}.scene-canvas-host{-webkit-user-select:none;user-select:none;position:absolute;inset:0;overflow:hidden}.scene-canvas-host.is-asset-drop-target:after{z-index:2;border:1px solid var(--focus);content:"";pointer-events:none;position:absolute;inset:3px}.canvas-grid{background-image:linear-gradient(var(--grid-line) 1px, transparent 1px), linear-gradient(90deg, var(--grid-line) 1px, transparent 1px);pointer-events:none;background-size:24px 24px;position:absolute;inset:0}.scene-canvas{display:block;position:absolute;inset:0}.scene-canvas-host.is-pan-ready .scene-canvas{cursor:grab!important}.scene-canvas-host.is-panning .scene-canvas{cursor:grabbing!important}.canvas-tools{z-index:3;position:absolute;top:10px;right:10px}.canvas-view-tools{border:1px solid var(--line);background:var(--panel-raised);height:30px;color:var(--muted);font-variant-numeric:tabular-nums;border-radius:8px;align-items:center;gap:0;padding:0 2px 0 10px;font-size:11px;display:flex}.canvas-view-size{border-right:1px solid var(--line-strong);padding-right:10px}.canvas-view-zoom{min-width:48px;color:var(--text);text-align:center;padding:0 9px}.canvas-tools.canvas-view-tools button{background:0 0;border:0;width:26px;height:26px}.canvas-tools.canvas-view-tools button:hover:not(:disabled){background:var(--hover)}.canvas-mode-tools{gap:4px;display:flex;left:10px;right:auto}.canvas-tools .canvas-layout-trigger{gap:1px;width:38px;margin-left:5px;display:inline-flex}.canvas-tools .canvas-layout-trigger[data-state=open]{border-color:var(--focus);background:var(--focus-soft);color:var(--selected-text)}.canvas-layout-popover{z-index:20;border:1px solid var(--line);background:var(--panel-raised);box-shadow:var(--shadow);color:var(--text);border-radius:10px;padding:7px}.canvas-layout-group+.canvas-layout-group{border-top:1px solid var(--line);margin-top:8px;padding-top:8px}.canvas-layout-heading{color:var(--muted);margin:0 4px 6px;font-size:11px}.canvas-layout-actions{grid-template-columns:repeat(3,30px) 12px repeat(3,30px);gap:4px;display:grid}.canvas-layout-actions>span:nth-child(4){grid-column:5}.canvas-layout-actions button{width:30px;height:30px;color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:6px;place-items:center;padding:0;display:inline-grid}.canvas-layout-actions button:hover:not(:disabled),.canvas-layout-actions button:focus-visible{background:var(--hover);color:var(--text)}.canvas-layout-actions button:disabled{opacity:.4;cursor:not-allowed}.canvas-tools button{border:1px solid var(--line);background:var(--panel-raised);width:28px;height:28px;color:var(--muted);cursor:pointer;border-radius:7px;place-items:center;padding:0;display:inline-grid}.canvas-tools button:hover:not(:disabled){border-color:var(--line-strong);background:var(--panel-raised);color:var(--text)}.canvas-tools button[aria-pressed=true]{border-color:var(--focus);background:var(--focus-soft);color:var(--selected-text)}.canvas-status{border:1px solid var(--line);background:var(--panel-raised);max-width:min(520px,100% - 48px);box-shadow:var(--shadow);color:var(--muted);border-radius:8px;padding:7px 10px;font-size:12px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.inspector-panel{min-height:0}.asset-preview-panel{border-top:1px solid var(--line);background:var(--panel);flex-direction:column;flex:0 0 clamp(190px,35vh,270px);min-height:0;padding:0 12px 10px;display:flex}.asset-preview-heading{color:var(--text);flex:0 0 34px;justify-content:space-between;align-items:center;font-size:11px;display:flex}.asset-preview-heading button{width:24px;height:24px;color:var(--muted);cursor:pointer;background:0 0;border-radius:5px;place-items:center;display:grid}.asset-preview-heading button:hover{background:var(--hover);color:var(--text)}.asset-preview-image{border:1px solid var(--line);background:repeating-conic-gradient(var(--line) 0% 25%, var(--panel-raised) 0% 50%) 0 0 / 16px 16px;min-height:0;color:var(--muted);border-radius:6px;flex:1;place-items:center;font-size:11px;display:grid;overflow:hidden}.asset-preview-image img{object-fit:contain;max-width:100%;max-height:100%;display:block}.asset-preview-image span{overflow-wrap:anywhere;text-align:center;padding:8px}.asset-preview-details{color:var(--muted);flex:none;gap:2px;padding-top:7px;font-size:11px;display:grid}.asset-preview-details strong{color:var(--text);overflow-wrap:anywhere;font-weight:600}.inspector-heading{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;min-height:56px;padding:8px 14px;display:flex}.inspector-heading div{gap:4px;min-width:0;display:grid}.inspector-heading strong{text-overflow:ellipsis;white-space:nowrap;font-size:14px;overflow:hidden}.inspector-heading small{color:var(--muted);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.inspector-section-title{border-bottom:1px solid var(--line);background:var(--section);min-height:30px;color:var(--text);align-items:center;padding:0 14px;font-size:11px;display:flex}summary.inspector-section-title{cursor:pointer;justify-content:space-between;list-style:none}summary.inspector-section-title::-webkit-details-marker{display:none}summary.inspector-section-title:after{color:var(--muted);content:"⌄";font-size:15px}details:not([open])>summary.inspector-section-title:after{transform:rotate(-90deg)}.layout-control-note{border-left:2px solid var(--warning);background:var(--warning-soft);color:var(--warning-text);border-radius:6px;gap:4px;margin:8px 12px;padding:7px 10px;font-size:11px;line-height:1.5;display:grid}.layout-control-note strong{color:var(--warning-text)}.layout-constraints{border-bottom:1px solid var(--soft-line);padding:6px 12px}.layout-presets{border-bottom:1px solid var(--soft-line);grid-template-columns:repeat(10,minmax(0,1fr));gap:2px;padding-bottom:4px;display:grid}.layout-presets button{min-width:0;height:24px;color:var(--muted);cursor:pointer;background:0 0;border:1px solid #0000;border-radius:4px;place-items:center;padding:0;display:grid}.layout-presets button:hover:not(:disabled){border-color:var(--line-strong);background:var(--hover);color:var(--text)}.layout-presets button:focus-visible{outline:2px solid var(--focus)}.layout-presets button:disabled{opacity:.4;cursor:default}.constraint-grid{grid-template-rows:22px 90px 24px;grid-template-columns:28px minmax(0,1fr) 54px;gap:4px;margin:6px 0;display:grid}.constraint-diagram{border:1px solid var(--line-strong);background:var(--control);border-radius:3px;grid-area:2/2;position:relative;overflow:hidden}.constraint-child{border:1px solid var(--icon);background:var(--focus-soft);border-radius:3px;width:40px;height:30px;position:absolute;top:30%;left:24%}.constraint-child>span{border-bottom:1px solid var(--icon);background:var(--section);height:6px;display:block}.constraint-x-start{left:8%}.constraint-x-center{left:calc(50% - 20px)}.constraint-x-end{left:calc(92% - 40px)}.constraint-x-stretch{width:84%;left:8%}.constraint-y-start{top:8%}.constraint-y-center{top:calc(50% - 15px)}.constraint-y-end{top:calc(92% - 30px)}.constraint-y-stretch{height:84%;top:8%}.constraint-x-mixed,.constraint-y-mixed{opacity:.6;border-style:dashed}.constraint-guide{pointer-events:none;opacity:.22;border-color:var(--line-strong);border-style:dashed;border-width:0;position:absolute}.constraint-guide-left,.constraint-guide-horizontal,.constraint-guide-right{border-left-width:1px;top:0;bottom:0}.constraint-guide-top,.constraint-guide-vertical,.constraint-guide-bottom{border-top-width:1px;left:0;right:0}.constraint-guide-left{left:8%}.constraint-guide-horizontal{left:50%}.constraint-guide-right{right:8%}.constraint-guide-top{top:8%}.constraint-guide-vertical{top:50%}.constraint-guide-bottom{bottom:8%}.constraint-guide.is-active{border-color:var(--focus);opacity:1;border-style:solid}.constraint-guide.is-mixed{border-color:var(--focus);opacity:.8}.constraint-toggles,.constraint-values{place-items:center stretch;gap:4px;min-width:0;display:grid}.constraint-toggles-x,.constraint-values-x{grid-template-columns:repeat(3,minmax(0,1fr))}.constraint-toggles-y,.constraint-values-y{grid-template-rows:repeat(3,minmax(0,1fr))}.constraint-toggles-x{grid-area:1/2}.constraint-toggles-y{grid-area:2/1}.constraint-values-x{grid-area:3/2}.constraint-values-y{grid-area:2/3}.constraint-toggles label{color:var(--muted);cursor:pointer;justify-content:center;align-items:center;gap:3px;font-size:10px;display:flex}.constraint-toggles input{width:13px;height:13px;accent-color:var(--focus);margin:0}.constraint-values .property-value{position:relative}.constraint-values input{border:1px solid var(--line-strong);background:var(--control);width:100%;min-width:0;height:24px;color:var(--text);text-align:center;appearance:textfield;border-radius:4px;outline:none;padding:0 3px;font-size:11px}.constraint-values input::-webkit-inner-spin-button{appearance:none;margin:0}.constraint-values input::-webkit-outer-spin-button{appearance:none;margin:0}.constraint-values input:focus{border-color:var(--focus);box-shadow:0 0 0 2px var(--focus-soft)}.constraint-values input:disabled{color:var(--disabled-text);background:var(--disabled-bg)}.constraint-values input.is-overridden{color:var(--muted);border-style:dashed}.constraint-values input:has(+.constraint-unbind){padding-right:16px}.constraint-unbind{width:16px;color:var(--binding);cursor:pointer;background:0 0;padding:0;position:absolute;top:1px;bottom:1px;right:1px}.constraint-help,.constraint-warning{color:var(--muted);margin:2px 0 0;font-size:10px;line-height:1.4}.constraint-warning{color:var(--warning-text)}.property-row{border-bottom:1px solid var(--soft-line);grid-template-columns:minmax(0,1fr);min-height:36px;padding:4px 12px 4px 14px;display:grid}.property-row.is-paired{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.property-field{grid-template-columns:minmax(70px,.8fr) minmax(120px,1.4fr);align-items:center;min-width:0;display:grid}.property-row.is-paired .property-field{grid-template-columns:max-content minmax(0,1fr);align-items:center;gap:4px}.property-row.is-paired .property-field>span{font-size:10px}.property-row.is-paired .property-control{grid-template-columns:minmax(0,1fr) 20px;gap:2px}.property-row.is-paired .reset-button{width:20px}.property-field>span{color:var(--text);text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.property-field>span.inherited{color:var(--muted)}.property-field.is-image-drop-candidate{background:var(--success-soft);box-shadow:inset 2px 0 var(--success);cursor:copy}.property-field.is-image-drop-candidate:hover{background:var(--success-soft-hover)}.property-field.is-image-drop-candidate .property-control input[type=text]{border-color:var(--success)}.property-control{grid-template-columns:minmax(0,1fr) 24px;align-items:start;gap:3px;display:grid}.node-id-control{grid-template-columns:minmax(0,1fr)}.property-value{gap:3px;min-width:0;display:grid}.property-control input[type=text],.property-control input[type=number],.property-control select{border:1px solid var(--line-strong);background:var(--control);width:100%;min-width:0;height:27px;color:var(--text);border-radius:6px;outline:none;padding:0 7px;font-size:12px}.property-control input.resource-reference{cursor:alias}.property-control input:focus,.property-control select:focus{border-color:var(--focus);box-shadow:0 0 0 2px var(--focus-soft)}.property-control input[type=text].is-invalid,.property-control input[type=text].is-invalid:focus{border-color:var(--danger)}.property-control input:disabled,.property-control select:disabled{border-color:var(--line);background:var(--disabled-bg);color:var(--disabled-text);cursor:default;opacity:1}.property-control input[type=checkbox]{width:15px;height:15px;accent-color:var(--focus)}.property-control input[type=color]{border:1px solid var(--line-strong);background:var(--control);border-radius:6px;width:34px;height:24px;padding:2px}.reset-button{width:26px;height:27px}.binding-source{min-width:0;color:var(--binding);text-overflow:ellipsis;white-space:nowrap;align-items:center;gap:4px;font-size:10px;display:flex;overflow:hidden}.inline-error,.global-error{color:var(--danger);margin:0;font-size:11px}.inline-error{border-bottom:1px solid var(--danger-line);background:var(--danger-soft);padding:9px 12px}.global-error{border:1px solid var(--danger-line);background:var(--danger-soft);max-width:min(520px,100vw - 24px);box-shadow:var(--shadow);border-radius:8px;padding:9px 11px;position:fixed;bottom:12px;right:12px}@media (width<=860px){.editor-shell{grid-template-columns:min(var(--left-width), 17vw) 5px min(var(--hierarchy-width), 20vw) 5px minmax(170px, 1fr) 5px min(var(--right-width), 32vw)}.canvas-view-size{display:none}.brand{padding:0 10px}.project-name{max-width:140px}.history-tools{gap:0;padding-right:3px}}
package/editor/index.html CHANGED
@@ -4,9 +4,9 @@
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>Pixifact Editor</title>
7
- <script type="module" crossorigin src="/assets/editor-B86_QMTa.js"></script>
7
+ <script type="module" crossorigin src="/assets/editor-DdhHqfDl.js"></script>
8
8
  <link rel="modulepreload" crossorigin href="/assets/captureCompilerScenePreview-BYHGr0JS.js">
9
- <link rel="stylesheet" crossorigin href="/assets/editor-DEgKgAKM.css">
9
+ <link rel="stylesheet" crossorigin href="/assets/editor-DmOIioK0.css">
10
10
  </head>
11
11
  <body>
12
12
  <div id="app"></div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pixifact-cli",
3
- "version": "0.16.0",
3
+ "version": "0.18.0",
4
4
  "description": "Pixifact Scene 自动化 CLI。",
5
5
  "packageManager": "bun@1.3.13",
6
6
  "type": "module",
@@ -32,7 +32,7 @@
32
32
  "start": "bun src/pixifact-cli.ts"
33
33
  },
34
34
  "dependencies": {
35
- "pixifact": "^0.16.0",
35
+ "pixifact": "^0.18.0",
36
36
  "playwright": "1.58.2",
37
37
  "vite": "^8.0.10"
38
38
  }
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env bun
2
2
  import fs from 'node:fs';
3
3
  import path from 'node:path';
4
- import { pathToFileURL } from 'node:url';
4
+ import { fileURLToPath, pathToFileURL } from 'node:url';
5
5
  import { createPixifactAutomation } from './automation';
6
6
  import { hintForCommandError } from 'pixifact';
7
7
  import { CompileSceneError, compileScenes } from 'pixifact/compiler-node';
@@ -50,6 +50,7 @@ interface ParsedArgs {
50
50
  }
51
51
 
52
52
  const runtimeScreenshotDefaultOutput = '.pixifact/runtime/frame.png';
53
+ const isCliEntrypoint = process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href;
53
54
 
54
55
  function parseArgs(argv: string[]): ParsedArgs {
55
56
  const positionals: string[] = [];
@@ -440,6 +441,7 @@ async function executeFileCommand(
440
441
  mode,
441
442
  watching: true,
442
443
  report: session.initialReport,
444
+ urls: session.urls,
443
445
  };
444
446
  } catch (error) {
445
447
  if (error instanceof PixifactTargetError) {
@@ -611,6 +613,30 @@ export async function executePixifactCli(argv: string[], options: CliOptions = {
611
613
  };
612
614
  }
613
615
 
616
+ if (isCliEntrypoint
617
+ && parsed.positionals.length === 1
618
+ && parsed.positionals[0] === 'dev'
619
+ && !process.execArgv.some((arg) => /^--inspect(?:-brk|-wait)?(?:=|$)/.test(arg))) {
620
+ assertAllowedFlags(parsed.flags, ['mode', 'project-root'], 'dev');
621
+ const child = Bun.spawn([
622
+ process.execPath,
623
+ ...process.execArgv,
624
+ '--inspect=0.0.0.0:0',
625
+ fileURLToPath(import.meta.url),
626
+ ...argv,
627
+ ], { stdin: 'inherit', stdout: 'inherit', stderr: 'inherit' });
628
+ const interrupt = () => child.kill('SIGINT');
629
+ const terminate = () => child.kill('SIGTERM');
630
+ process.on('SIGINT', interrupt);
631
+ process.on('SIGTERM', terminate);
632
+ try {
633
+ return { exitCode: await child.exited, stdout: '', stderr: '' };
634
+ } finally {
635
+ process.off('SIGINT', interrupt);
636
+ process.off('SIGTERM', terminate);
637
+ }
638
+ }
639
+
614
640
  const automation = options.automation ?? createPixifactAutomation();
615
641
  const result = await executeFileCommand(
616
642
  parsed.positionals,
@@ -650,7 +676,7 @@ export async function executePixifactCli(argv: string[], options: CliOptions = {
650
676
  }
651
677
  }
652
678
 
653
- if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {
679
+ if (isCliEntrypoint) {
654
680
  const result = await executePixifactCli(process.argv.slice(2), {
655
681
  onDevEvent: (event) => process.stdout.write(jsonLine(event)),
656
682
  });
package/src/viteTarget.ts CHANGED
@@ -4,6 +4,7 @@ import {
4
4
  build,
5
5
  createServer,
6
6
  resolveConfig,
7
+ type ResolvedServerUrls,
7
8
  type Rollup,
8
9
  } from 'vite';
9
10
  import {
@@ -42,6 +43,7 @@ export interface PixifactDevSession {
42
43
  close(): Promise<void>;
43
44
  initialReport: PixifactBuildReport;
44
45
  platform: PixifactPlatform;
46
+ urls?: ResolvedServerUrls | null;
45
47
  }
46
48
 
47
49
  export class PixifactTargetError extends Error {
@@ -123,12 +125,17 @@ export async function devPixifactTarget(
123
125
  root: validation.projectRoot,
124
126
  mode,
125
127
  logLevel: 'silent',
128
+ plugins: [{
129
+ name: 'pixifact-dev-host',
130
+ config: (config) => ({ server: { host: config.server?.host ?? true } }),
131
+ }],
126
132
  });
127
133
  await server.listen();
128
134
  return {
129
135
  close: () => server.close(),
130
136
  initialReport: emptyReport('web', validation.resolved.build.outDir),
131
137
  platform: 'web',
138
+ urls: server.resolvedUrls,
132
139
  };
133
140
  }
134
141
  let resolveInitial: (report: PixifactBuildReport) => void;