mirror of
https://github.com/barsdeveloper/ueblueprint.git
synced 2026-02-04 08:50:33 +08:00
Object reference moved to entity
This commit is contained in:
3
.vscode/settings.json
vendored
Normal file
3
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"prettier.tabWidth": 4
|
||||
}
|
||||
@@ -1,9 +1,9 @@
|
||||
.ueb-draggable,
|
||||
.ueb-node {
|
||||
/* Indicate the element draggable */
|
||||
cursor : move;
|
||||
cursor: move;
|
||||
/* It will be positioned absolutely */
|
||||
position : absolute;
|
||||
position: absolute;
|
||||
/* Doesn't allow to select the content inside */
|
||||
user-select: none;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,50 +1,49 @@
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style : light;
|
||||
src :
|
||||
url('../font/roboto-light.woff2') format('woff2'),
|
||||
url('../font/roboto-light.woff') format('woff');
|
||||
font-family: "Roboto";
|
||||
font-style: light;
|
||||
src: url("../font/roboto-light.woff2") format("woff2"),
|
||||
url("../font/roboto-light.woff") format("woff");
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'Roboto';
|
||||
font-style : regular;
|
||||
src :
|
||||
url('../font/roboto-regular.woff2') format('woff2'),
|
||||
url('../font/roboto-regular.woff') format('woff');
|
||||
font-family: "Roboto";
|
||||
font-style: regular;
|
||||
src: url("../font/roboto-regular.woff2") format("woff2"),
|
||||
url("../font/roboto-regular.woff") format("woff");
|
||||
}
|
||||
|
||||
:root {
|
||||
--ueb-fron-size : 13px;
|
||||
--ueb-viewport-height : 30rem;
|
||||
--ueb-viewport-width : 100%;
|
||||
--ueb-grid-size : 16px;
|
||||
--ueb-grid-line-width : 2px;
|
||||
--ueb-grid-line-color : #353535;
|
||||
--ueb-grid-set : 8;
|
||||
--ueb-grid-set-line-color : #161616;
|
||||
--ueb-fron-size: 13px;
|
||||
--ueb-viewport-height: 30rem;
|
||||
--ueb-viewport-width: 100%;
|
||||
--ueb-grid-size: 16px;
|
||||
--ueb-grid-line-width: 2px;
|
||||
--ueb-grid-line-color: #353535;
|
||||
--ueb-grid-set: 8;
|
||||
--ueb-grid-set-line-color: #161616;
|
||||
--ueb-grid-axis-line-color: black;
|
||||
--ueb-grid-snap : 16px;
|
||||
--ueb-node-radius : 7px;
|
||||
--ueb-grid-snap: 16px;
|
||||
--ueb-node-radius: 7px;
|
||||
}
|
||||
|
||||
u-blueprint {
|
||||
display : block;
|
||||
position : relative;
|
||||
font-family: Roboto, Noto, Oxygen, Ubuntu, 'Open Sans', 'Helvetica Neue', sans-serif;
|
||||
font-size : var(--ueb-fron-size);
|
||||
display: block;
|
||||
position: relative;
|
||||
font-family: Roboto, Noto, Oxygen, Ubuntu, "Open Sans", "Helvetica Neue",
|
||||
sans-serif;
|
||||
font-size: var(--ueb-fron-size);
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.ueb-viewport-header {
|
||||
display : flex;
|
||||
position : absolute;
|
||||
top : 0;
|
||||
right : 0;
|
||||
left : 0;
|
||||
height : 1.5em;
|
||||
display: flex;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
left: 0;
|
||||
height: 1.5em;
|
||||
background: rgba(0, 0, 0, 0.5);
|
||||
z-index : 1;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.ueb-viewport-zoom {
|
||||
@@ -52,10 +51,10 @@ u-blueprint {
|
||||
}
|
||||
|
||||
.ueb-viewport-body {
|
||||
position : relative;
|
||||
height : var(--ueb-viewport-height);
|
||||
width : var(--ueb-viewport-width);
|
||||
overflow : hidden;
|
||||
position: relative;
|
||||
height: var(--ueb-viewport-height);
|
||||
width: var(--ueb-viewport-width);
|
||||
overflow: hidden;
|
||||
scrollbar-width: 0;
|
||||
}
|
||||
|
||||
@@ -64,147 +63,166 @@ u-blueprint[data-focused="true"] .ueb-viewport-body {
|
||||
}
|
||||
|
||||
.ueb-grid {
|
||||
--ueb-grid-line-actual-width: calc(var(--ueb-grid-line-width) / var(--ueb-scale));
|
||||
position : absolute;
|
||||
min-width : 100%;
|
||||
min-height : 100%;
|
||||
width : calc((100% + var(--ueb-additional-x) * 1px) / var(--ueb-scale));
|
||||
height : calc((100% + var(--ueb-additional-y) * 1px) / var(--ueb-scale));
|
||||
background-color : #262626;
|
||||
background-image :
|
||||
/* Axis lines */
|
||||
linear-gradient(var(--ueb-grid-axis-line-color), var(--ueb-grid-axis-line-color)),
|
||||
linear-gradient(var(--ueb-grid-axis-line-color), var(--ueb-grid-axis-line-color)),
|
||||
--ueb-grid-line-actual-width: calc(
|
||||
var(--ueb-grid-line-width) / var(--ueb-scale)
|
||||
);
|
||||
position: absolute;
|
||||
min-width: 100%;
|
||||
min-height: 100%;
|
||||
width: calc((100% + var(--ueb-additional-x) * 1px) / var(--ueb-scale));
|
||||
height: calc((100% + var(--ueb-additional-y) * 1px) / var(--ueb-scale));
|
||||
background-color: #262626;
|
||||
background-image:
|
||||
/* Axis lines */ linear-gradient(
|
||||
var(--ueb-grid-axis-line-color),
|
||||
var(--ueb-grid-axis-line-color)
|
||||
),
|
||||
linear-gradient(
|
||||
var(--ueb-grid-axis-line-color),
|
||||
var(--ueb-grid-axis-line-color)
|
||||
),
|
||||
/* Dark bigger grid */
|
||||
linear-gradient(to right,
|
||||
linear-gradient(
|
||||
to right,
|
||||
var(--ueb-grid-set-line-color),
|
||||
var(--ueb-grid-set-line-color) var(--ueb-grid-line-actual-width),
|
||||
transparent var(--ueb-grid-line-actual-width),
|
||||
transparent
|
||||
),
|
||||
linear-gradient(
|
||||
to bottom,
|
||||
var(--ueb-grid-set-line-color),
|
||||
var(--ueb-grid-set-line-color) var(--ueb-grid-line-actual-width),
|
||||
transparent var(--ueb-grid-line-actual-width),
|
||||
transparent),
|
||||
linear-gradient(to bottom,
|
||||
var(--ueb-grid-set-line-color),
|
||||
var(--ueb-grid-set-line-color) var(--ueb-grid-line-actual-width),
|
||||
transparent var(--ueb-grid-line-actual-width),
|
||||
transparent),
|
||||
transparent
|
||||
),
|
||||
/* Light grid */
|
||||
linear-gradient(to right,
|
||||
linear-gradient(
|
||||
to right,
|
||||
var(--ueb-grid-line-color),
|
||||
var(--ueb-grid-line-color) var(--ueb-grid-line-actual-width),
|
||||
transparent var(--ueb-grid-line-actual-width),
|
||||
transparent
|
||||
),
|
||||
linear-gradient(
|
||||
to bottom,
|
||||
var(--ueb-grid-line-color),
|
||||
var(--ueb-grid-line-color) var(--ueb-grid-line-actual-width),
|
||||
transparent var(--ueb-grid-line-actual-width),
|
||||
transparent),
|
||||
linear-gradient(to bottom,
|
||||
var(--ueb-grid-line-color),
|
||||
var(--ueb-grid-line-color)var(--ueb-grid-line-actual-width),
|
||||
transparent var(--ueb-grid-line-actual-width),
|
||||
transparent);
|
||||
transparent
|
||||
);
|
||||
background-size:
|
||||
/* Axis lines */
|
||||
100% var(--ueb-grid-line-actual-width),
|
||||
/* Axis lines */ 100%
|
||||
var(--ueb-grid-line-actual-width),
|
||||
var(--ueb-grid-line-actual-width) 100%,
|
||||
/* Dark bigger grid */
|
||||
calc(var(--ueb-grid-set) * var(--ueb-grid-actual-size)) calc(var(--ueb-grid-set) * var(--ueb-grid-actual-size)),
|
||||
calc(var(--ueb-grid-set) * var(--ueb-grid-actual-size)) calc(var(--ueb-grid-set) * var(--ueb-grid-actual-size)),
|
||||
/* Light grid */
|
||||
var(--ueb-grid-actual-size) var(--ueb-grid-actual-size),
|
||||
calc(var(--ueb-grid-set) * var(--ueb-grid-actual-size))
|
||||
calc(var(--ueb-grid-set) * var(--ueb-grid-actual-size)),
|
||||
calc(var(--ueb-grid-set) * var(--ueb-grid-actual-size))
|
||||
calc(var(--ueb-grid-set) * var(--ueb-grid-actual-size)),
|
||||
/* Light grid */ var(--ueb-grid-actual-size) var(--ueb-grid-actual-size),
|
||||
var(--ueb-grid-actual-size) var(--ueb-grid-actual-size);
|
||||
background-position: calc(var(--ueb-translate-x) * 1px) calc(var(--ueb-translate-y) * 1px);
|
||||
background-repeat : repeat-x, repeat-y, repeat, repeat, repeat, repeat;
|
||||
transform : scale(var(--ueb-scale), var(--ueb-scale));
|
||||
transform-origin : 0 0;
|
||||
overflow : hidden;
|
||||
background-position: calc(var(--ueb-translate-x) * 1px)
|
||||
calc(var(--ueb-translate-y) * 1px);
|
||||
background-repeat: repeat-x, repeat-y, repeat, repeat, repeat, repeat;
|
||||
transform: scale(var(--ueb-scale), var(--ueb-scale));
|
||||
transform-origin: 0 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.ueb-zoom--.ueb,
|
||||
.ueb {
|
||||
/* 16/16 */
|
||||
--ueb-scale : 1;
|
||||
--ueb-scale: 1;
|
||||
--ueb-grid-actual-size: var(--ueb-grid-size);
|
||||
}
|
||||
|
||||
.ueb-zoom--1.ueb {
|
||||
/* 14/16 */
|
||||
--ueb-scale: 0.875
|
||||
--ueb-scale: 0.875;
|
||||
}
|
||||
|
||||
.ueb-zoom--2.ueb {
|
||||
/* 12/16 */
|
||||
--ueb-scale: 0.75
|
||||
--ueb-scale: 0.75;
|
||||
}
|
||||
|
||||
.ueb-zoom--3.ueb {
|
||||
/* 10.8/16 */
|
||||
--ueb-scale: 0.675
|
||||
--ueb-scale: 0.675;
|
||||
}
|
||||
|
||||
.ueb-zoom--4.ueb {
|
||||
/* 8/16 */
|
||||
--ueb-scale : 0.5;
|
||||
--ueb-grid-actual-size: calc(var(--ueb-grid-size) * 2)
|
||||
--ueb-scale: 0.5;
|
||||
--ueb-grid-actual-size: calc(var(--ueb-grid-size) * 2);
|
||||
}
|
||||
|
||||
.ueb-zoom--5.ueb {
|
||||
/* 6/16 */
|
||||
--ueb-scale : 0.375;
|
||||
--ueb-scale: 0.375;
|
||||
--ueb-grid-actual-size: calc(var(--ueb-grid-size) * 2);
|
||||
}
|
||||
|
||||
.ueb-zoom--6.ueb {
|
||||
--ueb-scale : 0.333333;
|
||||
--ueb-scale: 0.333333;
|
||||
--ueb-grid-actual-size: calc(var(--ueb-grid-size) * 3);
|
||||
}
|
||||
|
||||
.ueb-zoom--7.ueb {
|
||||
--ueb-scale : 0.3;
|
||||
--ueb-scale: 0.3;
|
||||
--ueb-grid-actual-size: calc(var(--ueb-grid-size) * 3);
|
||||
}
|
||||
|
||||
.ueb-zoom--8.ueb {
|
||||
--ueb-scale : 0.266666;
|
||||
--ueb-scale: 0.266666;
|
||||
--ueb-grid-actual-size: calc(var(--ueb-grid-size) * 3);
|
||||
}
|
||||
|
||||
.ueb-zoom--9.ueb {
|
||||
--ueb-scale : 0.233333;
|
||||
--ueb-scale: 0.233333;
|
||||
--ueb-grid-actual-size: calc(var(--ueb-grid-size) * 3);
|
||||
}
|
||||
|
||||
.ueb-zoom--10.ueb {
|
||||
/* 12/16 */
|
||||
--ueb-scale : 0.2;
|
||||
--ueb-scale: 0.2;
|
||||
--ueb-grid-actual-size: calc(var(--ueb-grid-size) * 3);
|
||||
}
|
||||
|
||||
.ueb-zoom--11.ueb {
|
||||
/* 12/16 */
|
||||
--ueb-scale : 0.166666;
|
||||
--ueb-scale: 0.166666;
|
||||
--ueb-grid-actual-size: calc(var(--ueb-grid-size) * 6);
|
||||
}
|
||||
|
||||
.ueb-zoom--12.ueb {
|
||||
/* 12/16 */
|
||||
--ueb-scale : 0.133333;
|
||||
--ueb-scale: 0.133333;
|
||||
--ueb-grid-actual-size: calc(var(--ueb-grid-size) * 6);
|
||||
}
|
||||
|
||||
.ueb-grid-content {
|
||||
position : relative;
|
||||
width : 0;
|
||||
height : 0;
|
||||
transform: translateX(calc(var(--ueb-translate-x) * 1px)) translateY(calc(var(--ueb-translate-y) * 1px))
|
||||
position: relative;
|
||||
width: 0;
|
||||
height: 0;
|
||||
transform: translateX(calc(var(--ueb-translate-x) * 1px))
|
||||
translateY(calc(var(--ueb-translate-y) * 1px));
|
||||
}
|
||||
|
||||
.ueb-node {
|
||||
display : block;
|
||||
position : absolute;
|
||||
transform : translateX(calc(var(--ueb-position-x) * 1px)) translateY(calc(var(--ueb-position-y) * 1px));
|
||||
display: block;
|
||||
position: absolute;
|
||||
transform: translateX(calc(var(--ueb-position-x) * 1px))
|
||||
translateY(calc(var(--ueb-position-y) * 1px));
|
||||
border-radius: var(--ueb-node-radius);
|
||||
box-shadow : 0 0 1px 0 black, 1px 4px 6px 0 rgba(0, 0, 0, 0.3);
|
||||
will-change : transform;
|
||||
box-shadow: 0 0 1px 0 black, 1px 4px 6px 0 rgba(0, 0, 0, 0.3);
|
||||
will-change: transform;
|
||||
}
|
||||
|
||||
.ueb-node-border {
|
||||
margin : -3px;
|
||||
padding : 3px;
|
||||
margin: -3px;
|
||||
padding: 3px;
|
||||
border-radius: calc(var(--ueb-node-radius) * 1.4);
|
||||
}
|
||||
|
||||
@@ -212,45 +230,53 @@ u-blueprint[data-focused="true"] .ueb-viewport-body {
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.ueb-selected>.ueb-node-border {
|
||||
background-image:
|
||||
linear-gradient(to right, #f1b000 0%, #f1b000 100%),
|
||||
.ueb-selected > .ueb-node-border {
|
||||
background-image: linear-gradient(to right, #f1b000 0%, #f1b000 100%),
|
||||
linear-gradient(to bottom, #f1b000 0%, #cc6700 100%),
|
||||
linear-gradient(to right, #cc6700 0%, #cc6700 100%),
|
||||
linear-gradient(to bottom, #f1b000 0%, #cc6700 100%);
|
||||
background-size : 100% 7px, 7px 100%, 100% 7px, 7px 100%;
|
||||
background-size: 100% 7px, 7px 100%, 100% 7px, 7px 100%;
|
||||
background-position: top, right, bottom, left;
|
||||
background-repeat : repeat-x, repeat-y, repeat-x, repeat-y;
|
||||
background-repeat: repeat-x, repeat-y, repeat-x, repeat-y;
|
||||
}
|
||||
|
||||
.ueb-node-content {
|
||||
padding : 1px;
|
||||
box-shadow : inset 0 0 2px 0 black;
|
||||
padding: 1px;
|
||||
box-shadow: inset 0 0 2px 0 black;
|
||||
border-radius: var(--ueb-node-radius);
|
||||
background : rgba(0, 0, 0, 0.7);
|
||||
overflow : hidden;
|
||||
background: rgba(0, 0, 0, 0.7);
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.ueb-node-header {
|
||||
padding : 0.2em 0.7em;
|
||||
box-shadow : inset 0 1px 2px 0 #313631, inset 0 2px 0 0 #92c381;
|
||||
padding: 0.2em 0.7em;
|
||||
box-shadow: inset 0 1px 2px 0 #313631, inset 0 2px 0 0 #92c381;
|
||||
border-radius: var(--ueb-node-radius) var(--ueb-node-radius) 0 0;
|
||||
background : linear-gradient(170deg, #5f815a 0%, #5f815a 50%, transparent 100%);
|
||||
color : #c0c0c0;
|
||||
font-weight : 600;
|
||||
white-space : nowrap;
|
||||
background: linear-gradient(
|
||||
170deg,
|
||||
#5f815a 0%,
|
||||
#5f815a 50%,
|
||||
transparent 100%
|
||||
);
|
||||
color: #c0c0c0;
|
||||
font-weight: 600;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.ueb-node-name {
|
||||
background: radial-gradient(closest-side, rgba(0, 0, 0, 0.5) 0%, transparent 90%);
|
||||
margin : -0.1em -1.6em;
|
||||
padding : 0.1em 1.6em;
|
||||
background: radial-gradient(
|
||||
closest-side,
|
||||
rgba(0, 0, 0, 0.5) 0%,
|
||||
transparent 90%
|
||||
);
|
||||
margin: -0.1em -1.6em;
|
||||
padding: 0.1em 1.6em;
|
||||
}
|
||||
|
||||
.ueb-node-body {
|
||||
display : flex;
|
||||
padding : 0.6em 0.8em;
|
||||
color : white;
|
||||
display: flex;
|
||||
padding: 6px 0;
|
||||
color: white;
|
||||
font-weight: 100;
|
||||
white-space: nowrap;
|
||||
}
|
||||
@@ -259,24 +285,30 @@ u-blueprint[data-focused="true"] .ueb-viewport-body {
|
||||
margin-right: auto;
|
||||
}
|
||||
|
||||
.ueb-node-input,
|
||||
.ueb-node-output {
|
||||
padding: 4px 8px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.ueb-node-value-icon {
|
||||
display : inline-block;
|
||||
position : relative;
|
||||
width : 0.85em;
|
||||
height : 0.85em;
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
width: 0.85em;
|
||||
height: 0.85em;
|
||||
vertical-align: baseline;
|
||||
margin : 0 0.4em -1px 0.3em;
|
||||
margin: 0 0.4em -1px 0.3em;
|
||||
}
|
||||
|
||||
.ueb-node-value-icon::before {
|
||||
content : "";
|
||||
display : block;
|
||||
position : absolute;
|
||||
top : 0;
|
||||
right : 0;
|
||||
bottom : 0;
|
||||
left : 0;
|
||||
border : 2px solid var(--ueb-node-value-color);
|
||||
content: "";
|
||||
display: block;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
border: 2px solid var(--ueb-node-value-color);
|
||||
border-radius: 50%;
|
||||
}
|
||||
|
||||
@@ -285,116 +317,129 @@ u-blueprint[data-focused="true"] .ueb-viewport-body {
|
||||
}
|
||||
|
||||
.ueb-node-value-icon::after {
|
||||
content : "";
|
||||
display : block;
|
||||
position : absolute;
|
||||
top : calc(50% - 0.3em);
|
||||
left : calc(100% + 1px);
|
||||
width : 0;
|
||||
height : 0;
|
||||
border-top : 0.3em solid transparent;
|
||||
content: "";
|
||||
display: block;
|
||||
position: absolute;
|
||||
top: calc(50% - 0.3em);
|
||||
left: calc(100% + 1px);
|
||||
width: 0;
|
||||
height: 0;
|
||||
border-top: 0.3em solid transparent;
|
||||
border-bottom: 0.3em solid transparent;
|
||||
border-left : 0.3em solid var(--ueb-node-value-color);
|
||||
border-left: 0.3em solid var(--ueb-node-value-color);
|
||||
}
|
||||
|
||||
.ueb-selector {
|
||||
display : block;
|
||||
position : absolute;
|
||||
display: block;
|
||||
position: absolute;
|
||||
visibility: hidden;
|
||||
top : 0;
|
||||
left : 0;
|
||||
width : 0;
|
||||
height : 0;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 0;
|
||||
height: 0;
|
||||
background-image:
|
||||
/* Top */
|
||||
repeating-linear-gradient(90deg,
|
||||
/* Top */ repeating-linear-gradient(
|
||||
90deg,
|
||||
transparent,
|
||||
transparent calc(1px / var(--ueb-scale)),
|
||||
white calc(2px / var(--ueb-scale)),
|
||||
white calc(7px / var(--ueb-scale)),
|
||||
transparent calc(7px / var(--ueb-scale)),
|
||||
transparent calc(11px / var(--ueb-scale))),
|
||||
repeating-linear-gradient(90deg,
|
||||
transparent calc(11px / var(--ueb-scale))
|
||||
),
|
||||
repeating-linear-gradient(
|
||||
90deg,
|
||||
black,
|
||||
black calc(8px / var(--ueb-scale)),
|
||||
transparent calc(9px / var(--ueb-scale)),
|
||||
transparent calc(11px / var(--ueb-scale))),
|
||||
transparent calc(11px / var(--ueb-scale))
|
||||
),
|
||||
/* Bottom */
|
||||
repeating-linear-gradient(90deg,
|
||||
transparent,
|
||||
transparent calc(1px / var(--ueb-scale)),
|
||||
white calc(2px / var(--ueb-scale)),
|
||||
white calc(7px / var(--ueb-scale)),
|
||||
transparent calc(7px / var(--ueb-scale)),
|
||||
transparent calc(11px / var(--ueb-scale))),
|
||||
repeating-linear-gradient(90deg,
|
||||
repeating-linear-gradient(
|
||||
90deg,
|
||||
transparent,
|
||||
transparent calc(1px / var(--ueb-scale)),
|
||||
white calc(2px / var(--ueb-scale)),
|
||||
white calc(7px / var(--ueb-scale)),
|
||||
transparent calc(7px / var(--ueb-scale)),
|
||||
transparent calc(11px / var(--ueb-scale))
|
||||
),
|
||||
repeating-linear-gradient(
|
||||
90deg,
|
||||
black,
|
||||
black calc(8px / var(--ueb-scale)),
|
||||
transparent calc(9px / var(--ueb-scale)),
|
||||
transparent calc(11px / var(--ueb-scale))),
|
||||
transparent calc(11px / var(--ueb-scale))
|
||||
),
|
||||
/* Left */
|
||||
repeating-linear-gradient(180deg,
|
||||
transparent,
|
||||
transparent calc(1px / var(--ueb-scale)),
|
||||
white calc(1px / var(--ueb-scale)),
|
||||
white calc(7px / var(--ueb-scale)),
|
||||
transparent calc(7px / var(--ueb-scale)),
|
||||
transparent calc(11px / var(--ueb-scale))),
|
||||
repeating-linear-gradient(180deg,
|
||||
repeating-linear-gradient(
|
||||
180deg,
|
||||
transparent,
|
||||
transparent calc(1px / var(--ueb-scale)),
|
||||
white calc(1px / var(--ueb-scale)),
|
||||
white calc(7px / var(--ueb-scale)),
|
||||
transparent calc(7px / var(--ueb-scale)),
|
||||
transparent calc(11px / var(--ueb-scale))
|
||||
),
|
||||
repeating-linear-gradient(
|
||||
180deg,
|
||||
black,
|
||||
black calc(8px / var(--ueb-scale)),
|
||||
transparent calc(9px / var(--ueb-scale)),
|
||||
transparent calc(11px / var(--ueb-scale))),
|
||||
transparent calc(11px / var(--ueb-scale))
|
||||
),
|
||||
/* Right */
|
||||
repeating-linear-gradient(0deg,
|
||||
transparent,
|
||||
transparent calc(1px / var(--ueb-scale)),
|
||||
white calc(2px / var(--ueb-scale)),
|
||||
white calc(7px / var(--ueb-scale)),
|
||||
transparent calc(7px / var(--ueb-scale)),
|
||||
transparent calc(11px / var(--ueb-scale))),
|
||||
repeating-linear-gradient(0deg,
|
||||
repeating-linear-gradient(
|
||||
0deg,
|
||||
transparent,
|
||||
transparent calc(1px / var(--ueb-scale)),
|
||||
white calc(2px / var(--ueb-scale)),
|
||||
white calc(7px / var(--ueb-scale)),
|
||||
transparent calc(7px / var(--ueb-scale)),
|
||||
transparent calc(11px / var(--ueb-scale))
|
||||
),
|
||||
repeating-linear-gradient(
|
||||
0deg,
|
||||
black,
|
||||
black calc(8px / var(--ueb-scale)),
|
||||
transparent calc(9px / var(--ueb-scale)),
|
||||
transparent calc(11px / var(--ueb-scale)));
|
||||
transparent calc(11px / var(--ueb-scale))
|
||||
);
|
||||
background-size:
|
||||
/* Top */
|
||||
100% calc(1px / var(--ueb-scale)),
|
||||
/* Top */ 100% calc(1px / var(--ueb-scale)),
|
||||
100% calc(3px / var(--ueb-scale)),
|
||||
/* Bottom */
|
||||
100% calc(1px / var(--ueb-scale)),
|
||||
/* Bottom */ 100% calc(1px / var(--ueb-scale)),
|
||||
100% calc(3px / var(--ueb-scale)),
|
||||
/* Left */
|
||||
calc(1px / var(--ueb-scale)) 100%,
|
||||
/* Left */ calc(1px / var(--ueb-scale)) 100%,
|
||||
calc(3px / var(--ueb-scale)) 100%,
|
||||
/* Right */
|
||||
calc(1px / var(--ueb-scale)) 100%,
|
||||
/* Right */ calc(1px / var(--ueb-scale)) 100%,
|
||||
calc(3px / var(--ueb-scale)) 100%;
|
||||
background-position:
|
||||
/* Top */
|
||||
0 calc(1px / var(--ueb-scale)),
|
||||
0 0,
|
||||
/* Bottom */
|
||||
0 calc(100% - 1px / var(--ueb-scale)),
|
||||
0 100%,
|
||||
/* Left */
|
||||
calc(1px / var(--ueb-scale)) 0,
|
||||
0 0,
|
||||
/* Right */
|
||||
calc(100% - 1px / var(--ueb-scale)) 0,
|
||||
100% 0;
|
||||
/* Top */ 0 calc(1px / var(--ueb-scale)), 0 0,
|
||||
/* Bottom */ 0 calc(100% - 1px / var(--ueb-scale)), 0 100%,
|
||||
/* Left */ calc(1px / var(--ueb-scale)) 0, 0 0,
|
||||
/* Right */ calc(100% - 1px / var(--ueb-scale)) 0, 100% 0;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
.ueb-selector>* {
|
||||
.ueb-selector > * {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
.ueb-selector[data-selecting="true"] {
|
||||
visibility: visible;
|
||||
top : min(var(--ueb-select-from-y) * 1px, var(--ueb-select-to-y) * 1px);
|
||||
left : min(var(--ueb-select-from-x) * 1px, var(--ueb-select-to-x) * 1px);
|
||||
width : calc(max(var(--ueb-select-from-x) - var(--ueb-select-to-x), var(--ueb-select-to-x) - var(--ueb-select-from-x)) * 1px);
|
||||
height : calc(max(var(--ueb-select-from-y) - var(--ueb-select-to-y), var(--ueb-select-to-y) - var(--ueb-select-from-y)) * 1px);
|
||||
}
|
||||
top: min(var(--ueb-select-from-y) * 1px, var(--ueb-select-to-y) * 1px);
|
||||
left: min(var(--ueb-select-from-x) * 1px, var(--ueb-select-to-x) * 1px);
|
||||
width: calc(
|
||||
max(
|
||||
var(--ueb-select-from-x) - var(--ueb-select-to-x),
|
||||
var(--ueb-select-to-x) - var(--ueb-select-from-x)
|
||||
) * 1px
|
||||
);
|
||||
height: calc(
|
||||
max(
|
||||
var(--ueb-select-from-y) - var(--ueb-select-to-y),
|
||||
var(--ueb-select-to-y) - var(--ueb-select-from-y)
|
||||
) * 1px
|
||||
);
|
||||
}
|
||||
|
||||
65
dist/ueblueprint.js
vendored
65
dist/ueblueprint.js
vendored
@@ -192,32 +192,22 @@ class Entity {
|
||||
}
|
||||
}
|
||||
|
||||
class ObjectReference extends Primitive {
|
||||
class ObjectReferenceEntity extends Entity {
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {String} type
|
||||
* @param {String} path
|
||||
*/
|
||||
constructor(type, path) {
|
||||
super();
|
||||
this.type = type;
|
||||
this.path = path;
|
||||
static attributes = {
|
||||
type: String,
|
||||
path: String
|
||||
}
|
||||
|
||||
toString() {
|
||||
return (this.type ?? "") + (
|
||||
this.path
|
||||
? this.type ? `'"${this.path}"'` : this.path
|
||||
: ""
|
||||
)
|
||||
getAttributes() {
|
||||
return ObjectReferenceEntity.attributes
|
||||
}
|
||||
}
|
||||
|
||||
class FunctionReferenceEntity extends Entity {
|
||||
|
||||
static attributes = {
|
||||
MemberParent: ObjectReference,
|
||||
MemberParent: ObjectReferenceEntity,
|
||||
MemberName: ""
|
||||
}
|
||||
|
||||
@@ -309,10 +299,10 @@ class PinEntity extends Entity {
|
||||
PinType: {
|
||||
PinCategory: "",
|
||||
PinSubCategory: "",
|
||||
PinSubCategoryObject: ObjectReference,
|
||||
PinSubCategoryObject: ObjectReferenceEntity,
|
||||
PinSubCategoryMemberReference: null,
|
||||
PinValueType: null,
|
||||
ContainerType: ObjectReference,
|
||||
ContainerType: ObjectReferenceEntity,
|
||||
bIsReference: false,
|
||||
bIsConst: false,
|
||||
bIsWeakPointer: false,
|
||||
@@ -365,12 +355,12 @@ class VariableReferenceEntity extends Entity {
|
||||
class ObjectEntity extends Entity {
|
||||
|
||||
static attributes = {
|
||||
Class: ObjectReference,
|
||||
Class: ObjectReferenceEntity,
|
||||
Name: "",
|
||||
bIsPureFunc: new TypeInitialization(Boolean, false, false),
|
||||
VariableReference: new TypeInitialization(VariableReferenceEntity, false, null),
|
||||
FunctionReference: new TypeInitialization(FunctionReferenceEntity, false, null,),
|
||||
TargetType: new TypeInitialization(ObjectReference, false, null),
|
||||
TargetType: new TypeInitialization(ObjectReferenceEntity, false, null),
|
||||
NodePosX: 0,
|
||||
NodePosY: 0,
|
||||
NodeGuid: Guid,
|
||||
@@ -412,7 +402,7 @@ class Grammar {
|
||||
InlineOptWhitespace = _ => P.regex(/[^\S\n]*/).desc("inline optional whitespace")
|
||||
WhitespaceNewline = _ => P.regex(/[^\S\n]*\n\s*/).desc("whitespace with at least a newline")
|
||||
Null = r => P.seq(P.string("("), r.InlineOptWhitespace, P.string(")")).map(_ => null).desc("null: ()")
|
||||
None = _ => P.string("None").map(_ => new ObjectReference("None", "")).desc("none")
|
||||
None = _ => P.string("None").map(_ => new ObjectReferenceEntity({ type: "None", path: "" })).desc("none")
|
||||
Boolean = _ => P.alt(P.string("True"), P.string("False")).map(v => v === "True" ? true : false).desc("either True or False")
|
||||
Number = _ => P.regex(/[0-9]+(?:\.[0-9]+)?/).map(Number).desc("a number")
|
||||
Integer = _ => P.regex(/[0-9]+/).map(v => new Integer(v)).desc("an integer")
|
||||
@@ -427,7 +417,7 @@ class Grammar {
|
||||
.desc('a path (words with possibly underscore, separated by ".", separated by "/")')
|
||||
Reference = r => P.alt(
|
||||
r.None,
|
||||
r.ReferencePath.map(path => new ObjectReference("", path)),
|
||||
r.ReferencePath.map(path => new ObjectReferenceEntity({ type: "", path: path })),
|
||||
P.seqMap(
|
||||
r.Word,
|
||||
P.optWhitespace,
|
||||
@@ -436,7 +426,7 @@ class Grammar {
|
||||
P.string(result.split("").reverse().join(""))
|
||||
)
|
||||
),
|
||||
(referenceType, _, referencePath) => new ObjectReference(referenceType, referencePath)
|
||||
(referenceType, _, referencePath) => new ObjectReferenceEntity({ type: referenceType, path: referencePath })
|
||||
)
|
||||
)
|
||||
AttributeName = r => r.Word.sepBy1(P.string(".")).tieWith(".").desc('words separated by ""')
|
||||
@@ -476,7 +466,7 @@ class Grammar {
|
||||
return r.String
|
||||
case Guid:
|
||||
return r.Guid
|
||||
case ObjectReference:
|
||||
case ObjectReferenceEntity:
|
||||
return r.Reference
|
||||
case LocalizedTextEntity:
|
||||
return r.LocalizedText
|
||||
@@ -733,7 +723,7 @@ class ObjectSerializer extends Serializer {
|
||||
* @returns
|
||||
*/
|
||||
write(object) {
|
||||
let result = `Begin Object Class=${object.Class} Name="${object.Name}"
|
||||
let result = `Begin Object Class=${this.writeValue(object.Class)} Name=${this.writeValue(object.Name)}
|
||||
${this.subWrite([], object)
|
||||
+ object
|
||||
.CustomProperties.map(pin => this.separator + this.prefix + "CustomProperties " + SerializerFactory.getSerializer(PinEntity).write(pin))
|
||||
@@ -2153,6 +2143,19 @@ class GraphLink extends GraphElement {
|
||||
|
||||
customElements.define('u-link', GraphLink);
|
||||
|
||||
class CustomSerializer extends GeneralSerializer {
|
||||
|
||||
constructor(objectWriter, entityType) {
|
||||
super(undefined, entityType);
|
||||
this.objectWriter = objectWriter;
|
||||
}
|
||||
|
||||
write(object) {
|
||||
let result = this.objectWriter(object);
|
||||
return result
|
||||
}
|
||||
}
|
||||
|
||||
SerializerFactory.registerSerializer(
|
||||
ObjectEntity,
|
||||
new ObjectSerializer()
|
||||
@@ -2172,6 +2175,16 @@ SerializerFactory.registerSerializer(
|
||||
SerializerFactory.registerSerializer(
|
||||
PinReferenceEntity,
|
||||
new GeneralSerializer(v => v, PinReferenceEntity, "", " ", false, "", _ => "")
|
||||
);
|
||||
SerializerFactory.registerSerializer(
|
||||
ObjectReferenceEntity,
|
||||
new CustomSerializer(
|
||||
/** @param {ObjectReferenceEntity} objectReference */
|
||||
objectReference => (objectReference.type ?? "") + (
|
||||
objectReference.path
|
||||
? objectReference.type ? `'"${objectReference.path}"'` : objectReference.path
|
||||
: ""
|
||||
))
|
||||
);
|
||||
|
||||
export { Blueprint, GraphLink, GraphNode };
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
import Entity from "./Entity"
|
||||
import ObjectReference from "./primitive/ObjectReference"
|
||||
import ObjectReferenceEntity from "./ObjectReferenceEntity"
|
||||
|
||||
export default class FunctionReferenceEntity extends Entity {
|
||||
|
||||
static attributes = {
|
||||
MemberParent: ObjectReference,
|
||||
MemberParent: ObjectReferenceEntity,
|
||||
MemberName: ""
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import Entity from "./Entity"
|
||||
import FunctionReferenceEntity from "./FunctionReferenceEntity"
|
||||
import Guid from "./primitive/Guid"
|
||||
import ObjectReference from "./primitive/ObjectReference"
|
||||
import ObjectReferenceEntity from "./ObjectReferenceEntity"
|
||||
import PinEntity from "./PinEntity"
|
||||
import TypeInitialization from "./TypeInitialization"
|
||||
import VariableReferenceEntity from "./VariableReferenceEntity"
|
||||
@@ -9,12 +9,12 @@ import VariableReferenceEntity from "./VariableReferenceEntity"
|
||||
export default class ObjectEntity extends Entity {
|
||||
|
||||
static attributes = {
|
||||
Class: ObjectReference,
|
||||
Class: ObjectReferenceEntity,
|
||||
Name: "",
|
||||
bIsPureFunc: new TypeInitialization(Boolean, false, false),
|
||||
VariableReference: new TypeInitialization(VariableReferenceEntity, false, null),
|
||||
FunctionReference: new TypeInitialization(FunctionReferenceEntity, false, null,),
|
||||
TargetType: new TypeInitialization(ObjectReference, false, null),
|
||||
TargetType: new TypeInitialization(ObjectReferenceEntity, false, null),
|
||||
NodePosX: 0,
|
||||
NodePosY: 0,
|
||||
NodeGuid: Guid,
|
||||
|
||||
13
js/entity/ObjectReferenceEntity.js
Executable file
13
js/entity/ObjectReferenceEntity.js
Executable file
@@ -0,0 +1,13 @@
|
||||
import Entity from "./Entity"
|
||||
|
||||
export default class ObjectReferenceEntity extends Entity {
|
||||
|
||||
static attributes = {
|
||||
type: String,
|
||||
path: String
|
||||
}
|
||||
|
||||
getAttributes() {
|
||||
return ObjectReferenceEntity.attributes
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
import Entity from "./Entity"
|
||||
import Guid from "./primitive/Guid"
|
||||
import LocalizedTextEntity from "./LocalizedTextEntity"
|
||||
import ObjectReference from "./primitive/ObjectReference"
|
||||
import ObjectReferenceEntity from "./ObjectReferenceEntity"
|
||||
import PinReferenceEntity from "./PinReferenceEntity"
|
||||
import TypeInitialization from "./TypeInitialization"
|
||||
|
||||
@@ -16,10 +16,10 @@ export default class PinEntity extends Entity {
|
||||
PinType: {
|
||||
PinCategory: "",
|
||||
PinSubCategory: "",
|
||||
PinSubCategoryObject: ObjectReference,
|
||||
PinSubCategoryObject: ObjectReferenceEntity,
|
||||
PinSubCategoryMemberReference: null,
|
||||
PinValueType: null,
|
||||
ContainerType: ObjectReference,
|
||||
ContainerType: ObjectReferenceEntity,
|
||||
bIsReference: false,
|
||||
bIsConst: false,
|
||||
bIsWeakPointer: false,
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
import Primitive from "./Primitive"
|
||||
|
||||
export default class ObjectReference extends Primitive {
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {String} type
|
||||
* @param {String} path
|
||||
*/
|
||||
constructor(type, path) {
|
||||
super()
|
||||
this.type = type
|
||||
this.path = path
|
||||
}
|
||||
|
||||
toString() {
|
||||
return (this.type ?? "") + (
|
||||
this.path
|
||||
? this.type ? `'"${this.path}"'` : this.path
|
||||
: ""
|
||||
)
|
||||
}
|
||||
}
|
||||
12
js/export.js
12
js/export.js
@@ -9,6 +9,8 @@ import Blueprint from "./Blueprint"
|
||||
import GraphNode from "./graph/GraphNode"
|
||||
import GraphLink from "./graph/GraphLink"
|
||||
import PinReferenceEntity from "./entity/PinReferenceEntity"
|
||||
import ObjectReferenceEntity from "./entity/ObjectReferenceEntity"
|
||||
import CustomSerializer from "./serialization/CustomSerializer"
|
||||
|
||||
SerializerFactory.registerSerializer(
|
||||
ObjectEntity,
|
||||
@@ -30,5 +32,15 @@ SerializerFactory.registerSerializer(
|
||||
PinReferenceEntity,
|
||||
new GeneralSerializer(v => v, PinReferenceEntity, "", " ", false, "", _ => "")
|
||||
)
|
||||
SerializerFactory.registerSerializer(
|
||||
ObjectReferenceEntity,
|
||||
new CustomSerializer(
|
||||
/** @param {ObjectReferenceEntity} objectReference */
|
||||
objectReference => (objectReference.type ?? "") + (
|
||||
objectReference.path
|
||||
? objectReference.type ? `'"${objectReference.path}"'` : objectReference.path
|
||||
: ""
|
||||
))
|
||||
)
|
||||
|
||||
export { Blueprint as Blueprint, GraphNode as GraphNode, GraphLink as GraphLink }
|
||||
14
js/serialization/CustomSerializer.js
Normal file
14
js/serialization/CustomSerializer.js
Normal file
@@ -0,0 +1,14 @@
|
||||
import GeneralSerializer from "./GeneralSerializer"
|
||||
|
||||
export default class CustomSerializer extends GeneralSerializer {
|
||||
|
||||
constructor(objectWriter, entityType) {
|
||||
super(undefined, entityType)
|
||||
this.objectWriter = objectWriter
|
||||
}
|
||||
|
||||
write(object) {
|
||||
let result = this.objectWriter(object)
|
||||
return result
|
||||
}
|
||||
}
|
||||
@@ -3,7 +3,7 @@ import Guid from "../entity/primitive/Guid"
|
||||
import Integer from "../entity/primitive/Integer"
|
||||
import LocalizedTextEntity from "../entity/LocalizedTextEntity"
|
||||
import ObjectEntity from "../entity/ObjectEntity"
|
||||
import ObjectReference from "../entity/primitive/ObjectReference"
|
||||
import ObjectReferenceEntity from "../entity/ObjectReferenceEntity"
|
||||
import Parsimmon from "parsimmon"
|
||||
import PinEntity from "../entity/PinEntity"
|
||||
import PinReferenceEntity from "../entity/PinReferenceEntity"
|
||||
@@ -18,7 +18,7 @@ export default class Grammar {
|
||||
InlineOptWhitespace = _ => P.regex(/[^\S\n]*/).desc("inline optional whitespace")
|
||||
WhitespaceNewline = _ => P.regex(/[^\S\n]*\n\s*/).desc("whitespace with at least a newline")
|
||||
Null = r => P.seq(P.string("("), r.InlineOptWhitespace, P.string(")")).map(_ => null).desc("null: ()")
|
||||
None = _ => P.string("None").map(_ => new ObjectReference("None", "")).desc("none")
|
||||
None = _ => P.string("None").map(_ => new ObjectReferenceEntity({ type: "None", path: "" })).desc("none")
|
||||
Boolean = _ => P.alt(P.string("True"), P.string("False")).map(v => v === "True" ? true : false).desc("either True or False")
|
||||
Number = _ => P.regex(/[0-9]+(?:\.[0-9]+)?/).map(Number).desc("a number")
|
||||
Integer = _ => P.regex(/[0-9]+/).map(v => new Integer(v)).desc("an integer")
|
||||
@@ -33,7 +33,7 @@ export default class Grammar {
|
||||
.desc('a path (words with possibly underscore, separated by ".", separated by "/")')
|
||||
Reference = r => P.alt(
|
||||
r.None,
|
||||
r.ReferencePath.map(path => new ObjectReference("", path)),
|
||||
r.ReferencePath.map(path => new ObjectReferenceEntity({ type: "", path: path })),
|
||||
P.seqMap(
|
||||
r.Word,
|
||||
P.optWhitespace,
|
||||
@@ -42,7 +42,7 @@ export default class Grammar {
|
||||
P.string(result.split("").reverse().join(""))
|
||||
)
|
||||
),
|
||||
(referenceType, _, referencePath) => new ObjectReference(referenceType, referencePath)
|
||||
(referenceType, _, referencePath) => new ObjectReferenceEntity({ type: referenceType, path: referencePath })
|
||||
)
|
||||
)
|
||||
AttributeName = r => r.Word.sepBy1(P.string(".")).tieWith(".").desc('words separated by ""')
|
||||
@@ -82,7 +82,7 @@ export default class Grammar {
|
||||
return r.String
|
||||
case Guid:
|
||||
return r.Guid
|
||||
case ObjectReference:
|
||||
case ObjectReferenceEntity:
|
||||
return r.Reference
|
||||
case LocalizedTextEntity:
|
||||
return r.LocalizedText
|
||||
|
||||
@@ -49,7 +49,7 @@ export default class ObjectSerializer extends Serializer {
|
||||
* @returns
|
||||
*/
|
||||
write(object) {
|
||||
let result = `Begin Object Class=${object.Class} Name="${object.Name}"
|
||||
let result = `Begin Object Class=${this.writeValue(object.Class)} Name=${this.writeValue(object.Name)}
|
||||
${this.subWrite([], object)
|
||||
+ object
|
||||
.CustomProperties.map(pin => this.separator + this.prefix + "CustomProperties " + SerializerFactory.getSerializer(PinEntity).write(pin))
|
||||
|
||||
Reference in New Issue
Block a user