endset_three_editor 0.3.1 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/PropertyPanel/DataPanelTab.vue.d.ts +7 -0
- package/dist/endset_three_editor.css +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/three/addHandle.d.ts +22 -0
- package/dist/three/css2dPanel.d.ts +127 -0
- package/dist/three/index.d.ts +18 -2
- package/dist/three-editor.cjs.js +42 -3
- package/dist/three-editor.cjs.js.map +1 -1
- package/dist/three-editor.es.js +2266 -1842
- package/dist/three-editor.es.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Object3D } from 'three';
|
|
2
|
+
type __VLS_Props = {
|
|
3
|
+
selectedObject: Object3D | null;
|
|
4
|
+
};
|
|
5
|
+
declare const __VLS_export: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
|
|
6
|
+
declare const _default: typeof __VLS_export;
|
|
7
|
+
export default _default;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.tree-node .tree-item[data-v-5ad9c842]{display:flex;align-items:center;padding:4px 10px;cursor:pointer;transition:background .15s}.tree-node .tree-item[data-v-5ad9c842]:hover{background:#2a4050}.tree-node .tree-item.selected[data-v-5ad9c842]{background:#3e5a6b}.tree-node .toggle-icon[data-v-5ad9c842]{cursor:pointer;width:20px;text-align:center;font-size:12px;-webkit-user-select:none;user-select:none}.tree-node .toggle-placeholder[data-v-5ad9c842]{width:20px;display:inline-block}.tree-node .tree-icon[data-v-5ad9c842]{margin-right:6px;font-size:14px}.tree-node .tree-name[data-v-5ad9c842]{flex:1;font-size:13px;-webkit-user-select:none;user-select:none}.tree-node .tree-delete[data-v-5ad9c842]{background:transparent;border:none;color:#e74c3c;font-size:16px;cursor:pointer;padding:0 4px;line-height:1}.tree-node .tree-delete[data-v-5ad9c842]:hover{color:#ff6b6b}.tree-children[data-v-5ad9c842]{padding-left:20px}.property-group[data-v-4cecf018]{margin-bottom:20px;border-bottom:1px solid #1a2a36;padding-bottom:12px}.property-group label[data-v-4cecf018]{font-weight:700;display:block;margin-bottom:8px;color:#f1c40f}.property-group .row[data-v-4cecf018]{display:flex;align-items:center;gap:8px;margin-bottom:6px}.property-group .row span[data-v-4cecf018]{width:20px;text-align:right}.property-group .row input[data-v-4cecf018]{background:#1e2a36;border:1px solid #3e5a6b;color:#ecf0f1;padding:4px 8px;border-radius:4px;width:48px}.light-group .intensity-input[data-v-4cecf018]{width:48px;background:#1e2a36;border:1px solid #3e5a6b;color:#ecf0f1;padding:2px 6px;border-radius:4px;text-align:center;flex:0 0 auto}.material-group .slider-row[data-v-4cecf018]{display:flex;align-items:center;gap:8px;margin-bottom:6px}.material-group .slider-row .slider-label[data-v-4cecf018]{width:50px;font-size:12px;color:#95a5a6}.material-group .slider-row input[type=range][data-v-4cecf018]{flex:1;height:4px;-webkit-appearance:none;background:#1e2a36;border-radius:2px;outline:none}.material-group .slider-row input[type=range][data-v-4cecf018]::-webkit-slider-thumb{-webkit-appearance:none;width:12px;height:12px;border-radius:50%;background:#f1c40f;cursor:pointer}.material-group .slider-row .slider-value[data-v-4cecf018]{width:36px;font-size:12px;text-align:center;color:#ecf0f1}.material-group .material-hint[data-v-4cecf018]{margin-top:6px;font-size:12px;color:#e67e22}.userdata-group .userdata-add-row[data-v-29e2eaf6]{display:flex;gap:4px;margin-bottom:10px}.userdata-group .userdata-add-row .ud-input[data-v-29e2eaf6]{flex:1;background:#1e2a36;border:1px solid #3e5a6b;color:#ecf0f1;padding:4px 6px;border-radius:4px;font-size:12px;min-width:0}.userdata-group .userdata-add-row .ud-input[data-v-29e2eaf6]::placeholder{color:#5a7a8a}.userdata-group .userdata-add-row .ud-textarea[data-v-29e2eaf6]{resize:none;min-height:28px;max-height:28px;line-height:1.4;font-family:inherit}.userdata-group .userdata-add-row .ud-btn[data-v-29e2eaf6]{flex:0 0 28px;height:28px;border:none;border-radius:4px;cursor:pointer;font-size:14px;line-height:1;display:flex;align-items:center;justify-content:center;transition:background .2s}.userdata-group .userdata-add-row .ud-btn.add-btn[data-v-29e2eaf6]{background:#27ae60;color:#fff}.userdata-group .userdata-add-row .ud-btn.add-btn[data-v-29e2eaf6]:hover{background:#2ecc71}.userdata-group .userdata-list[data-v-29e2eaf6]{display:flex;flex-direction:column;gap:4px}.userdata-group .userdata-list .userdata-item[data-v-29e2eaf6]{display:flex;align-items:center;gap:4px;padding:3px 4px;background:#1a2a36;border-radius:4px;border:1px solid transparent}.userdata-group .userdata-list .userdata-item.readonly[data-v-29e2eaf6]{background:#1a1f2a;border-color:#3e5a6b}.userdata-group .userdata-list .userdata-item .ud-key[data-v-29e2eaf6]{flex:0 0 auto;min-width:60px;max-width:90px;font-size:11px;color:#f1c40f;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.userdata-group .userdata-list .userdata-item .ud-value-input[data-v-29e2eaf6]{flex:1;min-width:0;background:#1e2a36;border:1px solid #3e5a6b;color:#ecf0f1;padding:2px 4px;border-radius:3px;font-size:12px}.userdata-group .userdata-list .userdata-item .ud-value-readonly[data-v-29e2eaf6]{flex:1;font-size:11px;color:#95a5a6;padding:2px 4px;cursor:not-allowed}.userdata-group .userdata-list .userdata-item .ud-value-json-preview[data-v-29e2eaf6]{flex:1;min-width:0;font-size:11px;color:#bdc3c7;padding:2px 4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:Courier New,Courier,monospace}.userdata-group .userdata-list .userdata-item.editing-json[data-v-29e2eaf6]{flex-direction:column;align-items:stretch;gap:4px;padding:6px}.userdata-group .userdata-list .userdata-item .ud-json-error[data-v-29e2eaf6]{font-size:10px;color:#e6b32a;padding:2px 4px;line-height:1.4;word-break:break-all}.userdata-group .userdata-list .userdata-item .ud-json-textarea[data-v-29e2eaf6]{width:100%;min-height:50px;background:#1e2a36;border:1px solid #3e5a6b;color:#ecf0f1;padding:4px 6px;border-radius:4px;font-size:11px;font-family:Courier New,Courier,monospace;resize:vertical;box-sizing:border-box}.userdata-group .userdata-list .userdata-item .ud-json-textarea[data-v-29e2eaf6]:focus{outline:none;border-color:#f1c40f}.userdata-group .userdata-list .userdata-item .ud-json-textarea.has-error[data-v-29e2eaf6]{border-color:#e6b32a}.userdata-group .userdata-list .userdata-item .ud-json-actions[data-v-29e2eaf6]{display:flex;gap:4px;justify-content:flex-end}.userdata-group .userdata-list .userdata-item .ud-btn[data-v-29e2eaf6]{flex:0 0 22px;height:22px;border:none;border-radius:3px;cursor:pointer;font-size:11px;line-height:1;display:flex;align-items:center;justify-content:center;transition:background .2s}.userdata-group .userdata-list .userdata-item .ud-btn.del-btn[data-v-29e2eaf6]{background:#c0392b;color:#fff}.userdata-group .userdata-list .userdata-item .ud-btn.del-btn[data-v-29e2eaf6]:hover{background:#e74c3c}.userdata-group .userdata-list .userdata-item .ud-btn.apply-btn[data-v-29e2eaf6]{background:#27ae60;color:#fff}.userdata-group .userdata-list .userdata-item .ud-btn.apply-btn[data-v-29e2eaf6]:hover{background:#2ecc71}.userdata-group .userdata-list .userdata-item .ud-btn.cancel-btn[data-v-29e2eaf6]{background:#7f8c8d;color:#fff}.userdata-group .userdata-list .userdata-item .ud-btn.cancel-btn[data-v-29e2eaf6]:hover{background:#95a5a6}.userdata-group .userdata-list .userdata-item .ud-btn.edit-json-btn[data-v-29e2eaf6]{flex:0 0 22px;height:22px;background:#2980b9;color:#fff}.userdata-group .userdata-list .userdata-item .ud-btn.edit-json-btn[data-v-29e2eaf6]:hover{background:#3498db}.userdata-group .userdata-empty[data-v-29e2eaf6]{font-size:12px;color:#5a7a8a;text-align:center;padding:8px 0;font-style:italic}.property-panel[data-v-f001bf03]{width:320px;height:100%;background:#2c3e50;color:#ecf0f1;padding:16px;box-sizing:border-box;border-left:1px solid #1a2a36;overflow-y:auto;font-size:14px}.property-panel h3[data-v-f001bf03]{margin-top:0;text-align:center}.property-panel .property-group[data-v-f001bf03]{margin-bottom:20px;border-bottom:1px solid #1a2a36;padding-bottom:12px}.property-panel .property-group label[data-v-f001bf03]{font-weight:700;display:block;margin-bottom:8px;color:#f1c40f}.empty[data-v-f001bf03]{text-align:center;color:#95a5a6}.tree-group .tree-container[data-v-f001bf03]{height:200px;overflow-y:auto;background:#1a2a36;border-radius:4px;padding:4px 0}.tree-empty[data-v-f001bf03]{padding:8px 10px;color:#95a5a6;font-style:italic}.tabs[data-v-f001bf03]{display:flex;gap:0;border-bottom:2px solid #1a2a36;margin-bottom:16px}.tabs .tab-btn[data-v-f001bf03]{flex:1;padding:8px 12px;background:transparent;border:none;color:#95a5a6;font-size:13px;cursor:pointer;transition:color .2s,border-bottom .2s;border-bottom:2px solid transparent;margin-bottom:-2px}.tabs .tab-btn[data-v-f001bf03]:hover{color:#ecf0f1}.tabs .tab-btn.active[data-v-f001bf03]{color:#f1c40f;border-bottom-color:#f1c40f}.tab-content[data-v-f001bf03]{height:calc(100% - 430px);overflow-y:auto;overflow-x:hidden}.transform-mode-row[data-v-f001bf03]{display:flex;gap:4px}.transform-mode-row .mode-btn[data-v-f001bf03]{flex:1;padding:6px 8px;background:#1e2a36;border:1px solid #3e5a6b;color:#95a5a6;font-size:12px;border-radius:4px;cursor:pointer;transition:background .2s,color .2s,border-color .2s}.transform-mode-row .mode-btn[data-v-f001bf03]:hover{background:#2c3e50;color:#ecf0f1}.transform-mode-row .mode-btn.active[data-v-f001bf03]{background:#3e5a6b;color:#f1c40f;border-color:#f1c40f}.property-panel[data-v-f001bf03],.tree-container[data-v-f001bf03]{scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.25) transparent}.top-bar[data-v-d738da51]{height:40px;background:#1a2a36;display:flex;align-items:center;justify-content:space-between;padding:0 16px;border-bottom:1px solid #2a4050;flex-shrink:0;-webkit-user-select:none;user-select:none}.top-bar .left-section[data-v-d738da51]{display:flex;gap:12px;align-items:center}.top-bar .left-section .dropdown-wrapper[data-v-d738da51]{position:relative;display:inline-block}.top-bar .left-section .dropdown-wrapper .menu-btn[data-v-d738da51]{background:transparent;border:none;color:#ecf0f1;padding:6px 12px;border-radius:4px;cursor:pointer;font-size:14px;transition:background .2s}.top-bar .left-section .dropdown-wrapper .menu-btn[data-v-d738da51]:hover{background:#2a4050}.top-bar .left-section .dropdown-wrapper .dropdown-menu[data-v-d738da51]{position:absolute;top:100%;left:0;background:#2c3e50;border:1px solid #3e5a6b;border-radius:4px;min-width:140px;padding:4px 0;z-index:100;box-shadow:0 4px 12px #0000004d}.top-bar .left-section .dropdown-wrapper .dropdown-menu .menu-item[data-v-d738da51]{padding:6px 16px;color:#ecf0f1;cursor:pointer;font-size:13px;transition:background .15s;white-space:nowrap}.top-bar .left-section .dropdown-wrapper .dropdown-menu .menu-item[data-v-d738da51]:hover{background:#3e5a6b}.top-bar .left-section .dropdown-wrapper .dropdown-menu .menu-item.sub-trigger[data-v-d738da51]{display:flex;justify-content:space-between;align-items:center;position:relative}.top-bar .left-section .dropdown-wrapper .sub-menu[data-v-d738da51]{position:absolute;left:100%;top:0;background:#2c3e50;border:1px solid #3e5a6b;border-radius:4px;min-width:140px;padding:4px 0;z-index:101;box-shadow:0 4px 12px #0000004d}.top-bar .right-section[data-v-d738da51]{display:flex;align-items:center}.top-bar .app-title[data-v-d738da51]{color:#8af;font-size:16px;font-weight:500;letter-spacing:.5px}.bottom-bar[data-v-3427bb27]{height:40px;background:#1a2a36;border-top:1px solid #2a4050;display:flex;align-items:center;justify-content:space-between;padding:0 16px;flex-shrink:0;color:#95a5a6;font-size:13px;-webkit-user-select:none;user-select:none}.bottom-bar .status-left[data-v-3427bb27],.bottom-bar .status-right[data-v-3427bb27]{display:flex;gap:16px}.app-layout[data-v-3b2548fa]{display:flex;flex-direction:column;height:100%;width:100%;background-color:#333}.editor-container[data-v-3b2548fa]{display:flex;width:100%}.editor-container-mode-edit[data-v-3b2548fa]{height:calc(100% - 80px)}.editor-container-mode-run[data-v-3b2548fa]{height:100%}.canvas[data-v-3b2548fa]{height:100%;background-color:transparent;position:relative}.canvas-mode-edit[data-v-3b2548fa]{width:calc(100% - 320px)}.canvas-mode-run[data-v-3b2548fa]{width:100%}
|
|
1
|
+
.tree-node .tree-item[data-v-5ad9c842]{display:flex;align-items:center;padding:4px 10px;cursor:pointer;transition:background .15s}.tree-node .tree-item[data-v-5ad9c842]:hover{background:#2a4050}.tree-node .tree-item.selected[data-v-5ad9c842]{background:#3e5a6b}.tree-node .toggle-icon[data-v-5ad9c842]{cursor:pointer;width:20px;text-align:center;font-size:12px;-webkit-user-select:none;user-select:none}.tree-node .toggle-placeholder[data-v-5ad9c842]{width:20px;display:inline-block}.tree-node .tree-icon[data-v-5ad9c842]{margin-right:6px;font-size:14px}.tree-node .tree-name[data-v-5ad9c842]{flex:1;font-size:13px;-webkit-user-select:none;user-select:none}.tree-node .tree-delete[data-v-5ad9c842]{background:transparent;border:none;color:#e74c3c;font-size:16px;cursor:pointer;padding:0 4px;line-height:1}.tree-node .tree-delete[data-v-5ad9c842]:hover{color:#ff6b6b}.tree-children[data-v-5ad9c842]{padding-left:20px}.property-group[data-v-4cecf018]{margin-bottom:20px;border-bottom:1px solid #1a2a36;padding-bottom:12px}.property-group label[data-v-4cecf018]{font-weight:700;display:block;margin-bottom:8px;color:#f1c40f}.property-group .row[data-v-4cecf018]{display:flex;align-items:center;gap:8px;margin-bottom:6px}.property-group .row span[data-v-4cecf018]{width:20px;text-align:right}.property-group .row input[data-v-4cecf018]{background:#1e2a36;border:1px solid #3e5a6b;color:#ecf0f1;padding:4px 8px;border-radius:4px;width:48px}.light-group .intensity-input[data-v-4cecf018]{width:48px;background:#1e2a36;border:1px solid #3e5a6b;color:#ecf0f1;padding:2px 6px;border-radius:4px;text-align:center;flex:0 0 auto}.material-group .slider-row[data-v-4cecf018]{display:flex;align-items:center;gap:8px;margin-bottom:6px}.material-group .slider-row .slider-label[data-v-4cecf018]{width:50px;font-size:12px;color:#95a5a6}.material-group .slider-row input[type=range][data-v-4cecf018]{flex:1;height:4px;-webkit-appearance:none;background:#1e2a36;border-radius:2px;outline:none}.material-group .slider-row input[type=range][data-v-4cecf018]::-webkit-slider-thumb{-webkit-appearance:none;width:12px;height:12px;border-radius:50%;background:#f1c40f;cursor:pointer}.material-group .slider-row .slider-value[data-v-4cecf018]{width:36px;font-size:12px;text-align:center;color:#ecf0f1}.material-group .material-hint[data-v-4cecf018]{margin-top:6px;font-size:12px;color:#e67e22}.userdata-group .userdata-add-row[data-v-29e2eaf6]{display:flex;gap:4px;margin-bottom:10px}.userdata-group .userdata-add-row .ud-input[data-v-29e2eaf6]{flex:1;background:#1e2a36;border:1px solid #3e5a6b;color:#ecf0f1;padding:4px 6px;border-radius:4px;font-size:12px;min-width:0}.userdata-group .userdata-add-row .ud-input[data-v-29e2eaf6]::placeholder{color:#5a7a8a}.userdata-group .userdata-add-row .ud-textarea[data-v-29e2eaf6]{resize:none;min-height:28px;max-height:28px;line-height:1.4;font-family:inherit}.userdata-group .userdata-add-row .ud-btn[data-v-29e2eaf6]{flex:0 0 28px;height:28px;border:none;border-radius:4px;cursor:pointer;font-size:14px;line-height:1;display:flex;align-items:center;justify-content:center;transition:background .2s}.userdata-group .userdata-add-row .ud-btn.add-btn[data-v-29e2eaf6]{background:#27ae60;color:#fff}.userdata-group .userdata-add-row .ud-btn.add-btn[data-v-29e2eaf6]:hover{background:#2ecc71}.userdata-group .userdata-list[data-v-29e2eaf6]{display:flex;flex-direction:column;gap:4px}.userdata-group .userdata-list .userdata-item[data-v-29e2eaf6]{display:flex;align-items:center;gap:4px;padding:3px 4px;background:#1a2a36;border-radius:4px;border:1px solid transparent}.userdata-group .userdata-list .userdata-item.readonly[data-v-29e2eaf6]{background:#1a1f2a;border-color:#3e5a6b}.userdata-group .userdata-list .userdata-item .ud-key[data-v-29e2eaf6]{flex:0 0 auto;min-width:60px;max-width:90px;font-size:11px;color:#f1c40f;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.userdata-group .userdata-list .userdata-item .ud-value-input[data-v-29e2eaf6]{flex:1;min-width:0;background:#1e2a36;border:1px solid #3e5a6b;color:#ecf0f1;padding:2px 4px;border-radius:3px;font-size:12px}.userdata-group .userdata-list .userdata-item .ud-value-readonly[data-v-29e2eaf6]{flex:1;font-size:11px;color:#95a5a6;padding:2px 4px;cursor:not-allowed}.userdata-group .userdata-list .userdata-item .ud-value-json-preview[data-v-29e2eaf6]{flex:1;min-width:0;font-size:11px;color:#bdc3c7;padding:2px 4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:Courier New,Courier,monospace}.userdata-group .userdata-list .userdata-item.editing-json[data-v-29e2eaf6]{flex-direction:column;align-items:stretch;gap:4px;padding:6px}.userdata-group .userdata-list .userdata-item .ud-json-error[data-v-29e2eaf6]{font-size:10px;color:#e6b32a;padding:2px 4px;line-height:1.4;word-break:break-all}.userdata-group .userdata-list .userdata-item .ud-json-textarea[data-v-29e2eaf6]{width:100%;min-height:50px;background:#1e2a36;border:1px solid #3e5a6b;color:#ecf0f1;padding:4px 6px;border-radius:4px;font-size:11px;font-family:Courier New,Courier,monospace;resize:vertical;box-sizing:border-box}.userdata-group .userdata-list .userdata-item .ud-json-textarea[data-v-29e2eaf6]:focus{outline:none;border-color:#f1c40f}.userdata-group .userdata-list .userdata-item .ud-json-textarea.has-error[data-v-29e2eaf6]{border-color:#e6b32a}.userdata-group .userdata-list .userdata-item .ud-json-actions[data-v-29e2eaf6]{display:flex;gap:4px;justify-content:flex-end}.userdata-group .userdata-list .userdata-item .ud-btn[data-v-29e2eaf6]{flex:0 0 22px;height:22px;border:none;border-radius:3px;cursor:pointer;font-size:11px;line-height:1;display:flex;align-items:center;justify-content:center;transition:background .2s}.userdata-group .userdata-list .userdata-item .ud-btn.del-btn[data-v-29e2eaf6]{background:#c0392b;color:#fff}.userdata-group .userdata-list .userdata-item .ud-btn.del-btn[data-v-29e2eaf6]:hover{background:#e74c3c}.userdata-group .userdata-list .userdata-item .ud-btn.apply-btn[data-v-29e2eaf6]{background:#27ae60;color:#fff}.userdata-group .userdata-list .userdata-item .ud-btn.apply-btn[data-v-29e2eaf6]:hover{background:#2ecc71}.userdata-group .userdata-list .userdata-item .ud-btn.cancel-btn[data-v-29e2eaf6]{background:#7f8c8d;color:#fff}.userdata-group .userdata-list .userdata-item .ud-btn.cancel-btn[data-v-29e2eaf6]:hover{background:#95a5a6}.userdata-group .userdata-list .userdata-item .ud-btn.edit-json-btn[data-v-29e2eaf6]{flex:0 0 22px;height:22px;background:#2980b9;color:#fff}.userdata-group .userdata-list .userdata-item .ud-btn.edit-json-btn[data-v-29e2eaf6]:hover{background:#3498db}.userdata-group .userdata-empty[data-v-29e2eaf6]{font-size:12px;color:#5a7a8a;text-align:center;padding:8px 0;font-style:italic}.datapanel-tab .dp-section[data-v-f359ca09]{margin-bottom:12px}.datapanel-tab .dp-section .dp-label-sm[data-v-f359ca09]{display:block;font-size:12px;color:#8af;margin-bottom:4px}.datapanel-tab .dp-input[data-v-f359ca09]{background:#1e2a36;border:1px solid #3e5a6b;color:#ecf0f1;padding:4px 6px;border-radius:4px;font-size:12px;width:100%;box-sizing:border-box}.datapanel-tab .dp-input[data-v-f359ca09]::placeholder{color:#5a7a8a}.datapanel-tab .dp-input[data-v-f359ca09]:focus{outline:none;border-color:#f1c40f}.datapanel-tab .dp-input-sm[data-v-f359ca09]{flex:2;min-width:0}.datapanel-tab .dp-input-xs[data-v-f359ca09]{flex:1;min-width:0}.datapanel-tab .dp-list[data-v-f359ca09]{display:flex;flex-direction:column;gap:4px;margin-bottom:6px}.datapanel-tab .dp-list .dp-item[data-v-f359ca09],.datapanel-tab .dp-add-row[data-v-f359ca09]{display:flex;gap:4px;align-items:center}.datapanel-tab .dp-btn[data-v-f359ca09]{flex:0 0 24px;height:24px;border:none;border-radius:4px;cursor:pointer;font-size:12px;display:flex;align-items:center;justify-content:center;transition:background .2s;line-height:1}.datapanel-tab .dp-btn.dp-btn-add[data-v-f359ca09]{background:#27ae60;color:#fff}.datapanel-tab .dp-btn.dp-btn-add[data-v-f359ca09]:hover{background:#2ecc71}.datapanel-tab .dp-btn.dp-btn-del[data-v-f359ca09]{background:#c0392b;color:#fff}.datapanel-tab .dp-btn.dp-btn-del[data-v-f359ca09]:hover{background:#e74c3c}.property-panel[data-v-c92c9fa7]{width:380px;height:100%;background:#2c3e50;color:#ecf0f1;padding:16px;box-sizing:border-box;border-left:1px solid #1a2a36;overflow-y:auto;font-size:14px}.property-panel h3[data-v-c92c9fa7]{margin-top:0;text-align:center}.property-panel .property-group[data-v-c92c9fa7]{margin-bottom:20px;border-bottom:1px solid #1a2a36;padding-bottom:12px}.property-panel .property-group label[data-v-c92c9fa7]{font-weight:700;display:block;margin-bottom:8px;color:#f1c40f}.empty[data-v-c92c9fa7]{text-align:center;color:#95a5a6}.tree-group .tree-container[data-v-c92c9fa7]{height:200px;overflow-y:auto;background:#1a2a36;border-radius:4px;padding:4px 0}.tree-empty[data-v-c92c9fa7]{padding:8px 10px;color:#95a5a6;font-style:italic}.tabs[data-v-c92c9fa7]{display:flex;gap:0;border-bottom:2px solid #1a2a36;margin-bottom:16px}.tabs .tab-btn[data-v-c92c9fa7]{flex:1;padding:8px 12px;background:transparent;border:none;color:#95a5a6;font-size:13px;cursor:pointer;transition:color .2s,border-bottom .2s;border-bottom:2px solid transparent;margin-bottom:-2px}.tabs .tab-btn[data-v-c92c9fa7]:hover{color:#ecf0f1}.tabs .tab-btn.active[data-v-c92c9fa7]{color:#f1c40f;border-bottom-color:#f1c40f}.tab-content[data-v-c92c9fa7]{height:calc(100% - 430px);overflow-y:auto;overflow-x:hidden}.transform-mode-row[data-v-c92c9fa7]{display:flex;gap:4px}.transform-mode-row .mode-btn[data-v-c92c9fa7]{flex:1;padding:6px 8px;background:#1e2a36;border:1px solid #3e5a6b;color:#95a5a6;font-size:12px;border-radius:4px;cursor:pointer;transition:background .2s,color .2s,border-color .2s}.transform-mode-row .mode-btn[data-v-c92c9fa7]:hover{background:#2c3e50;color:#ecf0f1}.transform-mode-row .mode-btn.active[data-v-c92c9fa7]{background:#3e5a6b;color:#f1c40f;border-color:#f1c40f}.property-panel[data-v-c92c9fa7],.tree-container[data-v-c92c9fa7]{scrollbar-width:thin;scrollbar-color:rgba(255,255,255,.25) transparent}.top-bar[data-v-474c56f9]{height:40px;background:#1a2a36;display:flex;align-items:center;justify-content:space-between;padding:0 16px;border-bottom:1px solid #2a4050;flex-shrink:0;-webkit-user-select:none;user-select:none}.top-bar .left-section[data-v-474c56f9]{display:flex;gap:12px;align-items:center}.top-bar .left-section .dropdown-wrapper[data-v-474c56f9]{position:relative;display:inline-block}.top-bar .left-section .dropdown-wrapper .menu-btn[data-v-474c56f9]{background:transparent;border:none;color:#ecf0f1;padding:6px 12px;border-radius:4px;cursor:pointer;font-size:14px;transition:background .2s}.top-bar .left-section .dropdown-wrapper .menu-btn[data-v-474c56f9]:hover{background:#2a4050}.top-bar .left-section .dropdown-wrapper .dropdown-menu[data-v-474c56f9]{position:absolute;top:100%;left:0;background:#2c3e50;border:1px solid #3e5a6b;border-radius:4px;min-width:140px;padding:4px 0;z-index:100;box-shadow:0 4px 12px #0000004d}.top-bar .left-section .dropdown-wrapper .dropdown-menu .menu-item[data-v-474c56f9]{padding:6px 16px;color:#ecf0f1;cursor:pointer;font-size:13px;transition:background .15s;white-space:nowrap}.top-bar .left-section .dropdown-wrapper .dropdown-menu .menu-item[data-v-474c56f9]:hover{background:#3e5a6b}.top-bar .left-section .dropdown-wrapper .dropdown-menu .menu-item.sub-trigger[data-v-474c56f9]{display:flex;justify-content:space-between;align-items:center;position:relative}.top-bar .left-section .dropdown-wrapper .sub-menu[data-v-474c56f9]{position:absolute;left:100%;top:0;background:#2c3e50;border:1px solid #3e5a6b;border-radius:4px;min-width:140px;padding:4px 0;z-index:101;box-shadow:0 4px 12px #0000004d}.top-bar .right-section[data-v-474c56f9]{display:flex;align-items:center}.top-bar .app-title[data-v-474c56f9]{color:#8af;font-size:16px;font-weight:500;letter-spacing:.5px}.bottom-bar[data-v-3427bb27]{height:40px;background:#1a2a36;border-top:1px solid #2a4050;display:flex;align-items:center;justify-content:space-between;padding:0 16px;flex-shrink:0;color:#95a5a6;font-size:13px;-webkit-user-select:none;user-select:none}.bottom-bar .status-left[data-v-3427bb27],.bottom-bar .status-right[data-v-3427bb27]{display:flex;gap:16px}.app-layout[data-v-ffa5f5c1]{display:flex;flex-direction:column;height:100%;width:100%;background-color:#333}.editor-container[data-v-ffa5f5c1]{display:flex;width:100%}.editor-container-mode-edit[data-v-ffa5f5c1]{height:calc(100% - 80px)}.editor-container-mode-run[data-v-ffa5f5c1]{height:100%}.canvas[data-v-ffa5f5c1]{height:100%;background-color:transparent;position:relative}.canvas-mode-edit[data-v-ffa5f5c1]{width:calc(100% - 380px)}.canvas-mode-run[data-v-ffa5f5c1]{width:100%}.loading-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:#00000080;display:flex;flex-direction:column;align-items:center;justify-content:center;z-index:9999}.loading-overlay .loading-spinner{width:48px;height:48px;border:4px solid rgba(255,255,255,.3);border-top-color:#8af;border-radius:50%;animation:spin .8s linear infinite}.loading-overlay .loading-text{margin-top:16px;color:#ecf0f1;font-size:16px;letter-spacing:1px}@keyframes spin{to{transform:rotate(360deg)}}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,3 +6,5 @@ export { default as TreeItem } from './components/TreeItem.vue';
|
|
|
6
6
|
export * from './three';
|
|
7
7
|
export * from './three/addHandle';
|
|
8
8
|
export { useTreeExpand } from './composables/useTreeExpand';
|
|
9
|
+
export { DataPanel, createCSS2DRenderer, getCSS2DRenderer, renderCSS2D, resizeCSS2DRenderer, disposeCSS2DRenderer } from './three/css2dPanel';
|
|
10
|
+
export type { DataPanelItem, DataPanelOptions } from './three/css2dPanel';
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { DataPanel, DataPanelItem } from './css2dPanel';
|
|
2
|
+
import { Object3D } from 'three';
|
|
1
3
|
/**
|
|
2
4
|
* 提供添加基础几何体(正方体、球体)以及导入外部模型文件的功能
|
|
3
5
|
* 所有模型均自动标记为可移动(isMovable = true)
|
|
@@ -45,3 +47,23 @@ export declare function importModelFromFile(file: File): Promise<THREE.Object3D>
|
|
|
45
47
|
* @param type - 'box' 或 'sphere'
|
|
46
48
|
*/
|
|
47
49
|
export declare function addModelByType(type: string): void;
|
|
50
|
+
/**
|
|
51
|
+
* 为当前选中的物体添加数据面板
|
|
52
|
+
* 面板配置存储在该物体的 userData.dataPanel 中
|
|
53
|
+
* @param options - 面板配置选项(可选,默认有示例数据)
|
|
54
|
+
*/
|
|
55
|
+
export declare function addDataPanel(options?: {
|
|
56
|
+
title?: string;
|
|
57
|
+
items?: DataPanelItem[];
|
|
58
|
+
}): DataPanel | null;
|
|
59
|
+
/**
|
|
60
|
+
* 获取物体上已附加的数据面板
|
|
61
|
+
* @param obj - 3D 物体
|
|
62
|
+
* @returns DataPanel 实例或 null
|
|
63
|
+
*/
|
|
64
|
+
export declare function getDataPanel(obj: Object3D): DataPanel | null;
|
|
65
|
+
/**
|
|
66
|
+
* 移除物体上的数据面板
|
|
67
|
+
* @param obj - 3D 物体
|
|
68
|
+
*/
|
|
69
|
+
export declare function removeDataPanel(obj: Object3D): void;
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { CSS2DRenderer } from 'three/examples/jsm/renderers/CSS2DRenderer.js';
|
|
2
|
+
/**
|
|
3
|
+
* CSS2D 数据面板模块
|
|
4
|
+
* 使用 CSS2DRenderer + HTML/CSS 在 3D 模型上渲染可自定义内容的数据面板
|
|
5
|
+
* 支持外部动态修改面板显示内容
|
|
6
|
+
*/
|
|
7
|
+
import * as THREE from "three";
|
|
8
|
+
/** 单个数据项 */
|
|
9
|
+
export interface DataPanelItem {
|
|
10
|
+
/** 标签名(如 "温度") */
|
|
11
|
+
label: string;
|
|
12
|
+
/** 值(如 "30℃") */
|
|
13
|
+
value: string;
|
|
14
|
+
/** 单位(可选,如 "℃") */
|
|
15
|
+
unit?: string;
|
|
16
|
+
/** 自定义 CSS 类名 */
|
|
17
|
+
className?: string;
|
|
18
|
+
}
|
|
19
|
+
/** 面板配置选项 */
|
|
20
|
+
export interface DataPanelOptions {
|
|
21
|
+
/** 面板标题(可选) */
|
|
22
|
+
title?: string;
|
|
23
|
+
/** 数据项列表 */
|
|
24
|
+
items?: DataPanelItem[];
|
|
25
|
+
/** 面板相对于模型中心的偏移(Y 轴向上) */
|
|
26
|
+
offsetY?: number;
|
|
27
|
+
/** 字体大小 */
|
|
28
|
+
fontSize?: string;
|
|
29
|
+
/** 面板宽度 */
|
|
30
|
+
width?: string;
|
|
31
|
+
/** 面板背景色 */
|
|
32
|
+
backgroundColor?: string;
|
|
33
|
+
/** 面板文字颜色 */
|
|
34
|
+
textColor?: string;
|
|
35
|
+
/** 面板边框颜色 */
|
|
36
|
+
borderColor?: string;
|
|
37
|
+
/** 自定义 CSS 类名(添加到面板容器) */
|
|
38
|
+
className?: string;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* CSS2D 数据面板
|
|
42
|
+
* 挂载到指定 3D 物体上,在物体上方渲染 HTML 面板
|
|
43
|
+
*/
|
|
44
|
+
export declare class DataPanel {
|
|
45
|
+
/** CSS2DObject 实例 */
|
|
46
|
+
private css2dObject;
|
|
47
|
+
/** 面板容器 DOM 元素 */
|
|
48
|
+
private container;
|
|
49
|
+
/** 面板配置 */
|
|
50
|
+
private options;
|
|
51
|
+
/** 附着到的 3D 物体 */
|
|
52
|
+
private attachedObject;
|
|
53
|
+
/** 面板是否可见 */
|
|
54
|
+
private _visible;
|
|
55
|
+
constructor(options?: DataPanelOptions);
|
|
56
|
+
/** 根据当前 options 构建面板 DOM 结构 */
|
|
57
|
+
private buildPanel;
|
|
58
|
+
/** 渲染数据项到 DOM 列表 */
|
|
59
|
+
private renderItems;
|
|
60
|
+
/** 转义 HTML 防止 XSS */
|
|
61
|
+
private escapeHtml;
|
|
62
|
+
/**
|
|
63
|
+
* 将面板附着到指定 3D 物体上
|
|
64
|
+
* 面板会显示在物体的上方(Y 轴正方向偏移 offsetY)
|
|
65
|
+
* @param obj - 目标 3D 物体
|
|
66
|
+
*/
|
|
67
|
+
attachTo(obj: THREE.Object3D): void;
|
|
68
|
+
/**
|
|
69
|
+
* 从附着的物体上移除面板
|
|
70
|
+
*/
|
|
71
|
+
detach(): void;
|
|
72
|
+
/** 显示面板 */
|
|
73
|
+
show(): void;
|
|
74
|
+
/** 隐藏面板 */
|
|
75
|
+
hide(): void;
|
|
76
|
+
/** 面板是否可见 */
|
|
77
|
+
get visible(): boolean;
|
|
78
|
+
/** 设置面板标题(轻量 DOM 更新) */
|
|
79
|
+
setTitle(title: string): void;
|
|
80
|
+
/** 获取面板标题 */
|
|
81
|
+
getTitle(): string;
|
|
82
|
+
/** 设置面板数据项(轻量 DOM 更新) */
|
|
83
|
+
setItems(items: DataPanelItem[]): void;
|
|
84
|
+
/** 获取所有数据项 */
|
|
85
|
+
getItems(): DataPanelItem[];
|
|
86
|
+
/** 追加一个数据项(轻量 DOM 更新) */
|
|
87
|
+
addItem(item: DataPanelItem): void;
|
|
88
|
+
/** 根据 label 移除数据项(轻量 DOM 更新) */
|
|
89
|
+
removeItem(label: string): void;
|
|
90
|
+
/** 更新指定 label 的数据项的值(轻量 DOM 更新) */
|
|
91
|
+
updateItem(label: string, value: string, unit?: string): void;
|
|
92
|
+
/** 清空所有数据项(轻量 DOM 更新) */
|
|
93
|
+
clearItems(): void;
|
|
94
|
+
/** 重建面板(用于需要完整重建 DOM 的场景,如更新样式配置) */
|
|
95
|
+
private rebuildPanel;
|
|
96
|
+
/** 更新面板配置(部分更新) */
|
|
97
|
+
updateOptions(newOptions: Partial<DataPanelOptions>): void;
|
|
98
|
+
/** 更新面板 Y 轴偏移 */
|
|
99
|
+
setOffsetY(offsetY: number): void;
|
|
100
|
+
/** 获取面板 DOM 元素(用于外部样式自定义) */
|
|
101
|
+
getElement(): HTMLDivElement | null;
|
|
102
|
+
/** 销毁面板,释放资源 */
|
|
103
|
+
dispose(): void;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* 创建 CSS2DRenderer 并挂载到容器
|
|
107
|
+
* @param container - 渲染器挂载的 DOM 容器(应与 WebGL 渲染器同一容器)
|
|
108
|
+
*/
|
|
109
|
+
export declare function createCSS2DRenderer(container: HTMLElement): CSS2DRenderer;
|
|
110
|
+
/**
|
|
111
|
+
* 获取当前 CSS2DRenderer 实例
|
|
112
|
+
*/
|
|
113
|
+
export declare function getCSS2DRenderer(): CSS2DRenderer | null;
|
|
114
|
+
/**
|
|
115
|
+
* 渲染 CSS2D 层(在 animate 循环中调用)
|
|
116
|
+
* @param scene - Three.js 场景
|
|
117
|
+
* @param camera - 相机
|
|
118
|
+
*/
|
|
119
|
+
export declare function renderCSS2D(scene: THREE.Scene, camera: THREE.Camera): void;
|
|
120
|
+
/**
|
|
121
|
+
* 调整 CSS2DRenderer 尺寸
|
|
122
|
+
*/
|
|
123
|
+
export declare function resizeCSS2DRenderer(width: number, height: number): void;
|
|
124
|
+
/**
|
|
125
|
+
* 销毁 CSS2DRenderer
|
|
126
|
+
*/
|
|
127
|
+
export declare function disposeCSS2DRenderer(): void;
|
package/dist/three/index.d.ts
CHANGED
|
@@ -16,6 +16,16 @@ export declare function initEditor(container: HTMLElement, mode?: string, sceneD
|
|
|
16
16
|
* @param obj - 要选中的物体
|
|
17
17
|
*/
|
|
18
18
|
export declare function selectObject(obj: Object3D): void;
|
|
19
|
+
/**
|
|
20
|
+
* 加载中的回调类型(用于导出/导入等异步操作)
|
|
21
|
+
*/
|
|
22
|
+
type LoadingCallback = (loading: boolean) => void;
|
|
23
|
+
/**
|
|
24
|
+
* 注册加载中的回调
|
|
25
|
+
* @param cb - 回调函数,参数为是否正在加载
|
|
26
|
+
*/
|
|
27
|
+
export declare function setLoadingCallback(cb: LoadingCallback): void;
|
|
28
|
+
export declare function setLoading(loading: boolean): void;
|
|
19
29
|
/**
|
|
20
30
|
* 设置变换控制器的模式
|
|
21
31
|
* @param mode - "translate" | "rotate" | "scale"
|
|
@@ -63,14 +73,19 @@ export declare function onSceneObjectsChangeCallback(cb: SceneObjectsChangeCallb
|
|
|
63
73
|
* @returns 顶层物体数组
|
|
64
74
|
*/
|
|
65
75
|
export declare function getSceneObjects(): THREE.Object3D<THREE.Object3DEventMap>[];
|
|
76
|
+
/**
|
|
77
|
+
* 获取当前选中的物体
|
|
78
|
+
* @returns 当前选中物体或 null
|
|
79
|
+
*/
|
|
80
|
+
export declare function getSelectedObject(): Object3D | null;
|
|
66
81
|
export declare function getScene(): THREE.Scene<THREE.Object3DEventMap> | null;
|
|
67
82
|
export declare function getCamera(): THREE.PerspectiveCamera | null;
|
|
68
83
|
export declare function getRenderer(): THREE.WebGLRenderer | null;
|
|
69
84
|
/**
|
|
70
85
|
* 将当前 Three.js 场景导出为 JSON 数据(使用 Three.js 内置 toJSON)
|
|
71
|
-
* @returns JSON
|
|
86
|
+
* @returns JSON 字符串的 Promise
|
|
72
87
|
*/
|
|
73
|
-
export declare function exportSceneToJSON(): string
|
|
88
|
+
export declare function exportSceneToJSON(): Promise<string>;
|
|
74
89
|
/**
|
|
75
90
|
* 从 JSON 数据恢复场景(使用 Three.js 内置 ObjectLoader)
|
|
76
91
|
* @param json - JSON 字符串或对象
|
|
@@ -82,3 +97,4 @@ export declare function loadSceneFromJSON(json: string | object, mode?: string):
|
|
|
82
97
|
* 调用后编辑器将完全卸载,可重新调用 initEditor 重新初始化
|
|
83
98
|
*/
|
|
84
99
|
export declare function destroyEditor(): void;
|
|
100
|
+
export {};
|