-
+
+
+ {{ self.variable + "=" }}
+
+
@@ -57,80 +61,119 @@
-
-
diff --git a/src/editor/annotationList.vue b/src/editor/annotationList.vue
index 17bef9b..90ec93f 100644
--- a/src/editor/annotationList.vue
+++ b/src/editor/annotationList.vue
@@ -11,13 +11,13 @@
v-for="(item, index) in profile.annotations"
:key="item.key"
>
-
+
- {{ t("buttons.add") }}
+ {{ t("editor.add") }}
@@ -25,10 +25,11 @@
diff --git a/src/editor/import.vue b/src/editor/import.vue
index 6da4afe..271b977 100644
--- a/src/editor/import.vue
+++ b/src/editor/import.vue
@@ -4,28 +4,31 @@
- {{ t("buttons.import") }}
+ {{ t("editor.import") }}
-
{{ t("title.source") }}
+
+ {{ t("editor.importRelated.title") }}
+
- {{ t("buttons.cancel") }}
+ {{ t("editor.importRelated.cancel") }}
- {{ t("buttons.confirm") }}
+ {{ t("editor.importRelated.confirm") }}
-
-
diff --git a/src/editor/inputs/implicit.vue b/src/editor/inputs/implicit.vue
new file mode 100644
index 0000000..50cdd8f
--- /dev/null
+++ b/src/editor/inputs/implicit.vue
@@ -0,0 +1,50 @@
+
+
+
+
+
diff --git a/src/editor/inputs/inputs.scss b/src/editor/inputs/inputs.scss
new file mode 100644
index 0000000..448d0dd
--- /dev/null
+++ b/src/editor/inputs/inputs.scss
@@ -0,0 +1,83 @@
+.input-inner {
+ display: flex;
+ flex-direction: column;
+ --input-inner-gap: 8px;
+ gap: var(--input-inner-gap);
+
+ .field.main-fn {
+ font-size: 25px;
+ display: flex;
+ align-items: center;
+ .label {
+ margin: 0 0.1em 0 0;
+ width: 1.8em;
+ margin-left: 0;
+ text-align: right;
+ }
+ .fn {
+ font-size: 24px;
+ width: 0;
+ flex-grow: 1;
+ }
+ }
+
+ & > .fold-shell {
+ margin: -8px -15px 0 -15px;
+ }
+ s-divider {
+ margin: var(--input-inner-gap) 15px;
+ padding: var(--input-inner-gap) 0;
+ }
+
+ .fields {
+ display: grid;
+ grid-template-columns: max-content minmax(auto, 18em);
+ justify-content: space-between;
+ align-items: center;
+ row-gap: var(--input-inner-gap);
+ column-gap: 1.5em;
+ }
+
+ .input-inner-optional {
+ font-size: 16px;
+ padding: 0 15px;
+
+ s-text-field {
+ width: 100%;
+ font-size: inherit;
+ }
+ .label {
+ justify-self: start;
+ display: flex;
+ }
+ .input {
+ justify-self: end;
+ }
+
+ .switches {
+ display: flex;
+ margin-top: var(--input-inner-gap);
+ column-gap: 2em;
+ align-items: center;
+ flex-wrap: wrap;
+ }
+ s-checkbox {
+ margin-left: -10px;
+ }
+ s-checkbox[disabled] {
+ color: var(--s-color-outline);
+ }
+ }
+
+ .tuple {
+ display: flex;
+ align-items: center;
+ font-size: 24px;
+ gap: 0.2em;
+ }
+ .tuple-input {
+ width: 0;
+ flex-grow: 1;
+ font-size: 22px;
+ }
+}
diff --git a/src/editor/inputs/linear.vue b/src/editor/inputs/linear.vue
new file mode 100644
index 0000000..3d4332e
--- /dev/null
+++ b/src/editor/inputs/linear.vue
@@ -0,0 +1,90 @@
+
+
+
+
+
diff --git a/src/editor/inputs/optInputs.vue b/src/editor/inputs/optInputs.vue
deleted file mode 100644
index cceb367..0000000
--- a/src/editor/inputs/optInputs.vue
+++ /dev/null
@@ -1,58 +0,0 @@
-
-
- {{ t(input.label) }}
-
-
-
-
-
-
-
-
diff --git a/src/editor/inputs/parametric.vue b/src/editor/inputs/parametric.vue
new file mode 100644
index 0000000..cf1d9e3
--- /dev/null
+++ b/src/editor/inputs/parametric.vue
@@ -0,0 +1,69 @@
+
+
+
+
+
diff --git a/src/editor/inputs/points.vue b/src/editor/inputs/points.vue
new file mode 100644
index 0000000..dde69da
--- /dev/null
+++ b/src/editor/inputs/points.vue
@@ -0,0 +1,48 @@
+
+
+
+
+
diff --git a/src/editor/inputs/polar.vue b/src/editor/inputs/polar.vue
new file mode 100644
index 0000000..845abc6
--- /dev/null
+++ b/src/editor/inputs/polar.vue
@@ -0,0 +1,70 @@
+
+
+
+
+
diff --git a/src/editor/inputs/strInputs.vue b/src/editor/inputs/strInputs.vue
deleted file mode 100644
index 9b086f4..0000000
--- a/src/editor/inputs/strInputs.vue
+++ /dev/null
@@ -1,49 +0,0 @@
-
-
- {{ t(input.title) }}
-
-
-
-
-
-
-
-
diff --git a/src/editor/inputs/subblocks/coloUtils.ts b/src/editor/inputs/subblocks/coloUtils.ts
new file mode 100644
index 0000000..0ad34f7
--- /dev/null
+++ b/src/editor/inputs/subblocks/coloUtils.ts
@@ -0,0 +1,165 @@
+export function nameToHex(name: string) {
+ if (name.startsWith("#") || name.startsWith("rgb")) return undefined;
+ const hex = colorNames[name.toLowerCase() as keyof typeof colorNames];
+ if (hex) return hex;
+ return undefined;
+}
+
+export function hexToRgba(hex: string) {
+ if (hex.startsWith("#")) {
+ hex = hex.slice(1);
+ }
+ if (hex.length === 3 || hex.length === 4)
+ hex = [...hex].map((c) => c + c).join("");
+ if (hex.length === 6) hex += "FF";
+ const bigint = parseInt(hex, 16);
+ const r = (bigint >> 24) & 255;
+ const g = (bigint >> 16) & 255;
+ const b = (bigint >> 8) & 255;
+ const a = bigint & 255;
+ if (a === 255) return `rgb(${r}, ${g}, ${b})`;
+ return `rgba(${r}, ${g}, ${b}, ${a / 255})`;
+}
+
+const colorNames = {
+ aliceblue: "#f0f8ff",
+ antiquewhite: "#faebd7",
+ aqua: "#00ffff",
+ aquamarine: "#7fffd4",
+ azure: "#f0ffff",
+ beige: "#f5f5dc",
+ bisque: "#ffe4c4",
+ black: "#000000",
+ blanchedalmond: "#ffebcd",
+ blue: "#0000ff",
+ blueviolet: "#8a2be2",
+ brown: "#a52a2a",
+ burlywood: "#deb887",
+ cadetblue: "#5f9ea0",
+ chartreuse: "#7fff00",
+ chocolate: "#d2691e",
+ coral: "#ff7f50",
+ cornflowerblue: "#6495ed",
+ cornsilk: "#fff8dc",
+ crimson: "#dc143c",
+ cyan: "#00ffff",
+ darkblue: "#00008b",
+ darkcyan: "#008b8b",
+ darkgoldenrod: "#b8860b",
+ darkgray: "#a9a9a9",
+ darkgreen: "#006400",
+ darkkhaki: "#bdb76b",
+ darkmagenta: "#8b008b",
+ darkolivegreen: "#556b2f",
+ darkorange: "#ff8c00",
+ darkorchid: "#9932cc",
+ darkred: "#8b0000",
+ darksalmon: "#e9967a",
+ darkseagreen: "#8fbc8f",
+ darkslateblue: "#483d8b",
+ darkslategray: "#2f4f4f",
+ darkturquoise: "#00ced1",
+ darkviolet: "#9400d3",
+ deeppink: "#ff1493",
+ deepskyblue: "#00bfff",
+ dimgray: "#696969",
+ dodgerblue: "#1e90ff",
+ firebrick: "#b22222",
+ floralwhite: "#fffaf0",
+ forestgreen: "#228b22",
+ fuchsia: "#ff00ff",
+ gainsboro: "#dcdcdc",
+ ghostwhite: "#f8f8ff",
+ gold: "#ffd700",
+ goldenrod: "#daa520",
+ gray: "#808080",
+ green: "#008000",
+ greenyellow: "#adff2f",
+ honeydew: "#f0fff0",
+ hotpink: "#ff69b4",
+ indianred: "#cd5c5c",
+ indigo: "#4b0082",
+ ivory: "#fffff0",
+ khaki: "#f0e68c",
+ lavender: "#e6e6fa",
+ lavenderblush: "#fff0f5",
+ lawngreen: "#7cfc00",
+ lemonchiffon: "#fffacd",
+ lightblue: "#add8e6",
+ lightcoral: "#f08080",
+ lightcyan: "#e0ffff",
+ lightgoldenrodyellow: "#fafad2",
+ lightgray: "#d3d3d3",
+ lightgreen: "#90ee90",
+ lightpink: "#ffb6c1",
+ lightsalmon: "#ffa07a",
+ lightseagreen: "#20b2aa",
+ lightskyblue: "#87cefa",
+ lightslategray: "#778899",
+ lightsteelblue: "#b0c4de",
+ lightyellow: "#ffffe0",
+ lime: "#00ff00",
+ limegreen: "#32cd32",
+ linen: "#faf0e6",
+ magenta: "#ff00ff",
+ maroon: "#800000",
+ mediumaquamarine: "#66cdaa",
+ mediumblue: "#0000cd",
+ mediumorchid: "#ba55d3",
+ mediumpurple: "#9370db",
+ mediumseagreen: "#3cb371",
+ mediumslateblue: "#7b68ee",
+ mediumspringgreen: "#00fa9a",
+ mediumturquoise: "#48d1cc",
+ mediumvioletred: "#c71585",
+ midnightblue: "#191970",
+ mintcream: "#f5fffa",
+ mistyrose: "#ffe4e1",
+ moccasin: "#ffe4b5",
+ navajowhite: "#ffdead",
+ navy: "#000080",
+ oldlace: "#fdf5e6",
+ olive: "#808000",
+ olivedrab: "#6b8e23",
+ orange: "#ffa500",
+ orangered: "#ff4500",
+ orchid: "#da70d6",
+ palegoldenrod: "#eee8aa",
+ palegreen: "#98fb98",
+ paleturquoise: "#afeeee",
+ palevioletred: "#db7093",
+ papayawhip: "#ffefd5",
+ peachpuff: "#ffdab9",
+ peru: "#cd853f",
+ pink: "#ffc0cb",
+ plum: "#dda0dd",
+ powderblue: "#b0e0e6",
+ purple: "#800080",
+ red: "#ff0000",
+ rosybrown: "#bc8f8f",
+ royalblue: "#4169e1",
+ saddlebrown: "#8b4513",
+ salmon: "#fa8072",
+ sandybrown: "#f4a460",
+ seagreen: "#2e8b57",
+ seashell: "#fff5ee",
+ sienna: "#a0522d",
+ silver: "#c0c0c0",
+ skyblue: "#87ceeb",
+ slateblue: "#6a5acd",
+ slategray: "#708090",
+ snow: "#fffafa",
+ springgreen: "#00ff7f",
+ steelblue: "#4682b4",
+ tan: "#d2b48c",
+ teal: "#008080",
+ thistle: "#d8bfd8",
+ tomato: "#ff6347",
+ turquoise: "#40e0d0",
+ violet: "#ee82ee",
+ wheat: "#f5deb3",
+ white: "#ffffff",
+ whitesmoke: "#f5f5f5",
+ yellow: "#ffff00",
+ yellowgreen: "#9acd32",
+} as const;
diff --git a/src/editor/inputs/subblocks/colorPicker.vue b/src/editor/inputs/subblocks/colorPicker.vue
new file mode 100644
index 0000000..033ff58
--- /dev/null
+++ b/src/editor/inputs/subblocks/colorPicker.vue
@@ -0,0 +1,222 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/editor/inputs/subblocks/derivatePane.vue b/src/editor/inputs/subblocks/derivatePane.vue
new file mode 100644
index 0000000..7b103fd
--- /dev/null
+++ b/src/editor/inputs/subblocks/derivatePane.vue
@@ -0,0 +1,357 @@
+
+
+
+
+
+ {{ t("data.derivate.title") }}
+
+
+
+
+
+
+
+ {{ t("data.secant.title") }}
+
+
+
+
+
+
+
+
+
+
+
{{ t("data.derivate.enable") }}
+
+
+
+ y'=
+
+
+
+
{{ t("data.derivate.point") }}
+
+
+ {{ t("data.derivate.followMouse") }}
+
+
+ {{ t("data.derivate.manual") }}
+
+
+
+
+
+
{{ t("data.derivate.sepcify") }}
+
+
+
+
+
+
+
+
+
{{ t("data.secant.enable") }}
+
+
+
+
+
+
+
+ {{ t("data.secant.followMouse") }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t("data.secant.add") }}
+
+
+
+
+
+
+
+
diff --git a/src/editor/inputs/subblocks/domain.vue b/src/editor/inputs/subblocks/domain.vue
new file mode 100644
index 0000000..f4f7353
--- /dev/null
+++ b/src/editor/inputs/subblocks/domain.vue
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/editor/inputs/subblocks/function.vue b/src/editor/inputs/subblocks/function.vue
new file mode 100644
index 0000000..5e4958a
--- /dev/null
+++ b/src/editor/inputs/subblocks/function.vue
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/editor/inputs/subblocks/helpIcon.vue b/src/editor/inputs/subblocks/helpIcon.vue
new file mode 100644
index 0000000..3adbf4d
--- /dev/null
+++ b/src/editor/inputs/subblocks/helpIcon.vue
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/editor/inputs/coordArrInputs.vue b/src/editor/inputs/subblocks/pointsInput.vue
similarity index 56%
rename from src/editor/inputs/coordArrInputs.vue
rename to src/editor/inputs/subblocks/pointsInput.vue
index 7c448ad..a452196 100644
--- a/src/editor/inputs/coordArrInputs.vue
+++ b/src/editor/inputs/subblocks/pointsInput.vue
@@ -1,7 +1,6 @@
- {{
- t(fnType.coordArr.label) + fnType.coordArr.fir
- }}
+ (
- {{ fnType.coordArr.sep }}
+ ,
- {{ fnType.coordArr.fin }}
-
-
-
+ )
+
+
+
+
+ {{ t("data.points.delete") }}
+