svedit 0.6.3 → 0.7.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.
- package/README.md +117 -45
- package/dist/AnnotatedTextProperty.svelte +19 -16
- package/dist/AnnotatedTextProperty.svelte.d.ts.map +1 -1
- package/dist/Command.svelte.d.ts +3 -3
- package/dist/Command.svelte.js +5 -5
- package/dist/CustomProperty.svelte +5 -4
- package/dist/Node.svelte +29 -14
- package/dist/Node.svelte.d.ts.map +1 -1
- package/dist/NodeArrayProperty.svelte +29 -9
- package/dist/NodeArrayProperty.svelte.d.ts.map +1 -1
- package/dist/NodeCaret.svelte +71 -0
- package/dist/NodeCaret.svelte.d.ts +27 -0
- package/dist/NodeCaret.svelte.d.ts.map +1 -0
- package/dist/NodeGap.svelte +249 -0
- package/dist/NodeGap.svelte.d.ts +20 -0
- package/dist/NodeGap.svelte.d.ts.map +1 -0
- package/dist/NodeGapMarkers.svelte +456 -0
- package/dist/NodeGapMarkers.svelte.d.ts +12 -0
- package/dist/NodeGapMarkers.svelte.d.ts.map +1 -0
- package/dist/NodeSelectionMarkers.svelte +49 -0
- package/dist/NodeSelectionMarkers.svelte.d.ts +7 -0
- package/dist/NodeSelectionMarkers.svelte.d.ts.map +1 -0
- package/dist/Session.svelte.d.ts +6 -6
- package/dist/Session.svelte.d.ts.map +1 -1
- package/dist/Session.svelte.js +13 -69
- package/dist/Svedit.svelte +158 -90
- package/dist/Svedit.svelte.d.ts.map +1 -1
- package/dist/Transaction.svelte.d.ts +1 -1
- package/dist/Transaction.svelte.d.ts.map +1 -1
- package/dist/Transaction.svelte.js +10 -70
- package/dist/doc_utils.d.ts +12 -0
- package/dist/doc_utils.d.ts.map +1 -1
- package/dist/doc_utils.js +61 -2
- package/dist/index.d.ts +4 -0
- package/dist/index.js +4 -0
- package/dist/node_gap_computation.svelte.d.ts +5 -0
- package/dist/node_gap_computation.svelte.d.ts.map +1 -0
- package/dist/node_gap_computation.svelte.js +621 -0
- package/dist/styles/svedit-colors.css +8 -0
- package/dist/transforms.svelte.d.ts.map +1 -1
- package/dist/transforms.svelte.js +7 -10
- package/dist/types.d.ts +56 -68
- package/dist/utils.d.ts +0 -3
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +10 -10
- package/package.json +21 -21
- package/src/lib/AnnotatedTextProperty.svelte +19 -16
- package/src/lib/Command.svelte.js +5 -5
- package/src/lib/CustomProperty.svelte +5 -4
- package/src/lib/Node.svelte +29 -14
- package/src/lib/NodeArrayProperty.svelte +29 -9
- package/src/lib/NodeCaret.svelte +71 -0
- package/src/lib/NodeGap.svelte +249 -0
- package/src/lib/NodeGapMarkers.svelte +456 -0
- package/src/lib/NodeSelectionMarkers.svelte +49 -0
- package/src/lib/Session.svelte.js +13 -69
- package/src/lib/Svedit.svelte +158 -90
- package/src/lib/Transaction.svelte.js +10 -70
- package/src/lib/doc_utils.js +61 -2
- package/src/lib/index.js +4 -0
- package/src/lib/node_gap_computation.svelte.js +621 -0
- package/src/lib/styles/svedit-colors.css +8 -0
- package/src/lib/transforms.svelte.js +7 -10
- package/src/lib/types.d.ts +56 -68
- package/src/lib/utils.js +10 -10
|
@@ -1,24 +1,39 @@
|
|
|
1
1
|
<script>
|
|
2
|
-
import { getContext } from 'svelte';
|
|
2
|
+
import { getContext, setContext } from 'svelte';
|
|
3
3
|
import UnknownNode from './UnknownNode.svelte';
|
|
4
4
|
import { snake_to_pascal } from './utils.js';
|
|
5
|
+
import DefaultNodeGap from './NodeGap.svelte';
|
|
6
|
+
import DefaultNodeGapMarkers from './NodeGapMarkers.svelte';
|
|
5
7
|
|
|
6
8
|
/** @import { NodeArrayPropertyProps } from './types.d.ts'; */
|
|
7
9
|
|
|
8
10
|
const svedit = getContext('svedit');
|
|
9
|
-
let
|
|
11
|
+
let NodeGap = $derived(svedit.session.config.system_components?.NodeGap ?? DefaultNodeGap);
|
|
12
|
+
let NodeGapMarkers = $derived(svedit.session.config.system_components?.NodeGapMarkers ?? DefaultNodeGapMarkers);
|
|
10
13
|
|
|
11
14
|
/** @type {NodeArrayPropertyProps} */
|
|
12
|
-
let { path, tag = 'div', class: css_class } = $props();
|
|
15
|
+
let { path, tag = 'div', class: css_class, style = '', ...rest } = $props();
|
|
13
16
|
|
|
14
17
|
let nodes = $derived(
|
|
15
18
|
svedit.session
|
|
16
19
|
.get(path)
|
|
17
20
|
.map(/** @param {string} node_id */ (node_id) => svedit.session.get(node_id))
|
|
18
21
|
);
|
|
19
|
-
</script>
|
|
20
22
|
|
|
21
|
-
|
|
23
|
+
// Expose array metadata to child Node.svelte instances via context,
|
|
24
|
+
// avoiding expensive session.inspect() / session.get() calls per node.
|
|
25
|
+
setContext('node_array_meta', {
|
|
26
|
+
get length() { return nodes.length; }
|
|
27
|
+
});
|
|
28
|
+
</script>
|
|
29
|
+
<!-- we use the anchor of node_array in Overlays.svelte to position the last insertion point in a horizontal layout based on the right edge of the container -->
|
|
30
|
+
<svelte:element
|
|
31
|
+
this={tag}
|
|
32
|
+
class={css_class}
|
|
33
|
+
data-type="node_array"
|
|
34
|
+
data-path={path.join('.')}
|
|
35
|
+
style="anchor-name: --{path.join('-')};{style ? ` ${style}` : ''}" {...rest}
|
|
36
|
+
>
|
|
22
37
|
{#if nodes.length === 0 && svedit.editable}
|
|
23
38
|
<!--
|
|
24
39
|
Experimental: We'll let .empty-node-array act like a node, so the existing
|
|
@@ -32,10 +47,12 @@
|
|
|
32
47
|
data-type="node"
|
|
33
48
|
style="anchor-name: --{[...path, 0].join(
|
|
34
49
|
'-'
|
|
35
|
-
)};
|
|
36
|
-
>
|
|
37
|
-
|
|
38
|
-
|
|
50
|
+
)}; min-height: 40px; min-width: 24px;"
|
|
51
|
+
></div>
|
|
52
|
+
<!-- Sibling (not child) of .empty-node-array so its .svedit-selectable
|
|
53
|
+
resolves anchor positioning against the shared containing block,
|
|
54
|
+
not the placeholder which inherits .node positioning styles. -->
|
|
55
|
+
<NodeGap path={[...path, 0]} type="gap-before" empty />
|
|
39
56
|
{/if}
|
|
40
57
|
{#each nodes as node, index (index)}
|
|
41
58
|
{@const Component = svedit.session.config.node_components[snake_to_pascal(node.type)]}
|
|
@@ -45,4 +62,7 @@
|
|
|
45
62
|
<UnknownNode path={[...path, index]} />
|
|
46
63
|
{/if}
|
|
47
64
|
{/each}
|
|
65
|
+
{#if svedit.editable && NodeGapMarkers}
|
|
66
|
+
<NodeGapMarkers {path} />
|
|
67
|
+
{/if}
|
|
48
68
|
</svelte:element>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NodeArrayProperty.svelte.d.ts","sourceRoot":"","sources":["../src/lib/NodeArrayProperty.svelte.js"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"NodeArrayProperty.svelte.d.ts","sourceRoot":"","sources":["../src/lib/NodeArrayProperty.svelte.js"],"names":[],"mappings":";;;;;AA8DA,mHAAgE"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
/**
|
|
3
|
+
* Visual insertion caret rendered inside the active insertion marker.
|
|
4
|
+
*
|
|
5
|
+
* This component is presentation-only. It reads styling tokens for
|
|
6
|
+
* color/shape/animation and switches orientation via var(--row, 1)
|
|
7
|
+
* with the * 99999 multiplier trick — works in all browsers.
|
|
8
|
+
*/
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<div class="caret" role="none"></div>
|
|
12
|
+
|
|
13
|
+
<style>
|
|
14
|
+
@keyframes node-caret-blink {
|
|
15
|
+
0%, 60% { opacity: 1; }
|
|
16
|
+
68% { opacity: 0; }
|
|
17
|
+
88% { opacity: 0; }
|
|
18
|
+
100% { opacity: 1; }
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.caret {
|
|
22
|
+
--_R: var(--row, 1);
|
|
23
|
+
--_C: calc(1 - var(--row, 1));
|
|
24
|
+
position: absolute;
|
|
25
|
+
inset: 0;
|
|
26
|
+
pointer-events: none;
|
|
27
|
+
z-index: var(--node-caret-z-index, 20);
|
|
28
|
+
animation: var(
|
|
29
|
+
--node-caret-animation,
|
|
30
|
+
node-caret-blink var(--node-caret-blink-duration, 1.1s) ease-in-out infinite
|
|
31
|
+
);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.caret::before {
|
|
35
|
+
--_ci: var(--node-caret-inset, var(--node-caret-marker-inset, 2px));
|
|
36
|
+
--_ct: var(--node-caret-thickness, 2px);
|
|
37
|
+
--_cp: var(--node-caret-row-inline-position, 50%);
|
|
38
|
+
content: '';
|
|
39
|
+
position: absolute;
|
|
40
|
+
background: var(--node-caret-bg, var(--svedit-editing-stroke));
|
|
41
|
+
/* Increase the visibility of the caret by contrasting it with a box shadow that's the inverted brightness of the current text color. */
|
|
42
|
+
/* Component developers must set their background color and text color on the node itself, not a child element, for this to work. */
|
|
43
|
+
box-shadow: var(--node-caret-shadow, 0 0 0 0.5px oklch(from currentColor calc(1 - l) c h));
|
|
44
|
+
border: var(--node-caret-border, none);
|
|
45
|
+
border-radius: var(--node-caret-radius, 1px);
|
|
46
|
+
/*
|
|
47
|
+
* Column: horizontal line at 50% — top=50%, bottom=50%-thickness.
|
|
48
|
+
* Row: vertical line at --_cp — left=cp, right=100%-cp-thickness.
|
|
49
|
+
* No explicit height/width — inset pairs control dimensions.
|
|
50
|
+
*/
|
|
51
|
+
top: min(
|
|
52
|
+
calc(50% + var(--_R) * 99999px),
|
|
53
|
+
calc(var(--_ci) + var(--_C) * 99999px)
|
|
54
|
+
);
|
|
55
|
+
bottom: min(
|
|
56
|
+
calc(50% - var(--_ct) + var(--_R) * 99999px),
|
|
57
|
+
calc(var(--_ci) + var(--_C) * 99999px)
|
|
58
|
+
);
|
|
59
|
+
left: min(
|
|
60
|
+
calc(var(--_ci) + var(--_R) * 99999px),
|
|
61
|
+
calc(var(--_cp) + var(--_C) * 99999px)
|
|
62
|
+
);
|
|
63
|
+
right: min(
|
|
64
|
+
calc(var(--_ci) + var(--_R) * 99999px),
|
|
65
|
+
calc(100% - var(--_cp) - var(--_ct) + var(--_C) * 99999px)
|
|
66
|
+
);
|
|
67
|
+
transform:
|
|
68
|
+
translateY(calc(var(--_C) * -0.5px))
|
|
69
|
+
translateX(calc(var(--_R) * -0.5px));
|
|
70
|
+
}
|
|
71
|
+
</style>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export default NodeCaret;
|
|
2
|
+
type NodeCaret = SvelteComponent<{
|
|
3
|
+
[x: string]: never;
|
|
4
|
+
}, {
|
|
5
|
+
[evt: string]: CustomEvent<any>;
|
|
6
|
+
}, {}> & {
|
|
7
|
+
$$bindings?: string;
|
|
8
|
+
};
|
|
9
|
+
declare const NodeCaret: $$__sveltets_2_IsomorphicComponent<{
|
|
10
|
+
[x: string]: never;
|
|
11
|
+
}, {
|
|
12
|
+
[evt: string]: CustomEvent<any>;
|
|
13
|
+
}, {}, {}, string>;
|
|
14
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
15
|
+
new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
|
|
16
|
+
$$bindings?: Bindings;
|
|
17
|
+
} & Exports;
|
|
18
|
+
(internal: unknown, props: {
|
|
19
|
+
$$events?: Events;
|
|
20
|
+
$$slots?: Slots;
|
|
21
|
+
}): Exports & {
|
|
22
|
+
$set?: any;
|
|
23
|
+
$on?: any;
|
|
24
|
+
};
|
|
25
|
+
z_$$bindings?: Bindings;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=NodeCaret.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeCaret.svelte.d.ts","sourceRoot":"","sources":["../src/lib/NodeCaret.svelte.js"],"names":[],"mappings":";;;;;;;;AA4BA;;;;mBAAqH;6CATxE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,OAAO,OAAO,QAAQ;IAC3L,cAAc,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,WAAW,OAAO,SAAS;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IACtG,eAAe,QAAQ,CAAC"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
/**
|
|
3
|
+
* Invisible keyboard caret selectable and gap hit area.
|
|
4
|
+
*
|
|
5
|
+
* Always present in the DOM when editable (stable structure for
|
|
6
|
+
* selection anchoring, scrollTo, etc.). Anchor positioning is
|
|
7
|
+
* activated lazily via the `positioned` prop — only gaps near the
|
|
8
|
+
* viewport pay the layout cost of anchor() resolution. Off-screen
|
|
9
|
+
* gaps are zero-size static elements with no layout cost.
|
|
10
|
+
*
|
|
11
|
+
* `position-visibility: anchors-visible` does NOT skip anchor
|
|
12
|
+
* resolution — the browser resolves all anchor() then hides the
|
|
13
|
+
* result. The `.positioned` class toggle is required to prevent
|
|
14
|
+
* O(N) anchor resolution on every layout pass.
|
|
15
|
+
*
|
|
16
|
+
* Row/column detection uses var(--row, 1) with the * 99999 multiplier
|
|
17
|
+
* trick — no @container style() queries, works in all browsers.
|
|
18
|
+
*
|
|
19
|
+
* Node.svelte does NOT set position: relative, so the selectable's
|
|
20
|
+
* containing block is a higher ancestor that contains all sibling
|
|
21
|
+
* nodes, making cross-sibling anchor references valid.
|
|
22
|
+
*/
|
|
23
|
+
let { path, type, empty = false, last = false, positioned = true } = $props();
|
|
24
|
+
|
|
25
|
+
let gap_style = $derived.by(() => {
|
|
26
|
+
const p = path.join('-');
|
|
27
|
+
const arr = path.slice(0, -1).join('-');
|
|
28
|
+
const idx = parseInt(String(path.at(-1)), 10);
|
|
29
|
+
return `--_pa:--${p};--_next:--${arr}-${idx + 1};--_container:--${arr}`;
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
let anchor_name = $derived(`--g-${path.join('-')}-${type}`);
|
|
33
|
+
</script>
|
|
34
|
+
|
|
35
|
+
<div
|
|
36
|
+
class="node-gap {type}"
|
|
37
|
+
class:empty
|
|
38
|
+
class:last
|
|
39
|
+
class:positioned
|
|
40
|
+
data-type={type}
|
|
41
|
+
style={gap_style}
|
|
42
|
+
>
|
|
43
|
+
<div class="svedit-selectable" style="anchor-name:{anchor_name}"><br /></div>
|
|
44
|
+
</div>
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
<style>
|
|
48
|
+
.node-gap {
|
|
49
|
+
height: 0;
|
|
50
|
+
overflow: visible;
|
|
51
|
+
outline: none;
|
|
52
|
+
pointer-events: none;
|
|
53
|
+
caret-color: transparent;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/* ------------------------------------------------------------------ */
|
|
57
|
+
/* Un-positioned: minimal in-DOM presence, no anchor resolution */
|
|
58
|
+
/* ------------------------------------------------------------------ */
|
|
59
|
+
|
|
60
|
+
.node-gap:not(.positioned) .svedit-selectable {
|
|
61
|
+
content-visibility: hidden;
|
|
62
|
+
contain-intrinsic-size: 0 0;
|
|
63
|
+
position: static;
|
|
64
|
+
pointer-events: none;
|
|
65
|
+
width: 0;
|
|
66
|
+
height: 0;
|
|
67
|
+
overflow: clip;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/* ------------------------------------------------------------------ */
|
|
71
|
+
/* Positioned: full anchor layout */
|
|
72
|
+
/* ------------------------------------------------------------------ */
|
|
73
|
+
|
|
74
|
+
/*
|
|
75
|
+
* Anchor references resolved from CSS variable names passed via
|
|
76
|
+
* inline style (--_pa, --_next, --_container). Same pattern as
|
|
77
|
+
* NodeGapMarkers — keeps JS minimal and anchor() in CSS.
|
|
78
|
+
*/
|
|
79
|
+
.node-gap.positioned {
|
|
80
|
+
--_s-t: anchor(var(--_pa) top);
|
|
81
|
+
--_s-b: anchor(var(--_pa) bottom);
|
|
82
|
+
--_s-l: anchor(var(--_pa) left);
|
|
83
|
+
--_s-r: anchor(var(--_pa) right);
|
|
84
|
+
}
|
|
85
|
+
.positioned.gap-after:not(.last) {
|
|
86
|
+
--_n-t: anchor(var(--_next) top);
|
|
87
|
+
--_n-l: anchor(var(--_next) left);
|
|
88
|
+
--_c-r: anchor(var(--_container) right);
|
|
89
|
+
}
|
|
90
|
+
.positioned.gap-after.last,
|
|
91
|
+
.positioned.gap-before.empty {
|
|
92
|
+
--_c-t: anchor(var(--_container) top);
|
|
93
|
+
--_c-b: anchor(var(--_container) bottom);
|
|
94
|
+
--_c-l: anchor(var(--_container) left);
|
|
95
|
+
--_c-r: anchor(var(--_container) right);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.positioned .svedit-selectable {
|
|
99
|
+
--_eg: var(--node-caret-edge-gap, 24px);
|
|
100
|
+
--_gm: var(--node-caret-gap-min-size, 16px);
|
|
101
|
+
--_R: var(--row, 1);
|
|
102
|
+
--_C: calc(1 - var(--row, 1));
|
|
103
|
+
user-select: none;
|
|
104
|
+
pointer-events: auto;
|
|
105
|
+
position: absolute;
|
|
106
|
+
position-anchor: var(--_pa);
|
|
107
|
+
position-visibility: anchors-visible;
|
|
108
|
+
z-index: var(--node-caret-gap-z-index, 1);
|
|
109
|
+
cursor: pointer;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/* ------------------------------------------------------------------ */
|
|
113
|
+
/* Merged column / row layout positioning */
|
|
114
|
+
/* */
|
|
115
|
+
/* Uses var(--row, 1) with the * 99999 multiplier trick: */
|
|
116
|
+
/* --_R = var(--row, 1) → 1 in row, 0 in column */
|
|
117
|
+
/* --_C = calc(1 - var(--row, 1))→ 1 in column, 0 in row */
|
|
118
|
+
/* Inside min(), + var(--_R) * 99999px disables a col branch in row, */
|
|
119
|
+
/* + var(--_C) * 99999px disables a row branch in column. */
|
|
120
|
+
/* ------------------------------------------------------------------ */
|
|
121
|
+
|
|
122
|
+
/* Between two siblings: col centers vertically, row centers horizontally */
|
|
123
|
+
.positioned.gap-after:not(.last) .svedit-selectable {
|
|
124
|
+
--_mid: calc((var(--_s-b) + var(--_n-t)) / 2 - var(--_gm) / 2);
|
|
125
|
+
top: min(
|
|
126
|
+
calc(var(--_s-b) + var(--_R) * 99999px),
|
|
127
|
+
calc(var(--_mid) + var(--_R) * 99999px),
|
|
128
|
+
calc(var(--_s-t) + var(--_C) * 99999px)
|
|
129
|
+
);
|
|
130
|
+
bottom: min(
|
|
131
|
+
calc(var(--_n-t) + var(--_R) * 99999px),
|
|
132
|
+
calc(var(--_mid) + var(--_R) * 99999px),
|
|
133
|
+
calc(var(--_s-b) + var(--_C) * 99999px)
|
|
134
|
+
);
|
|
135
|
+
left: min(
|
|
136
|
+
calc(var(--_s-l) + var(--_R) * 99999px),
|
|
137
|
+
calc(var(--_s-r) + var(--_C) * 99999px),
|
|
138
|
+
calc(
|
|
139
|
+
(var(--_s-r) + var(--_n-l)) / 2
|
|
140
|
+
- var(--_gm) / 2
|
|
141
|
+
+ max(0px, var(--_s-r) - var(--_n-l)) * 999
|
|
142
|
+
+ var(--_C) * 99999px
|
|
143
|
+
),
|
|
144
|
+
calc(100% - var(--_eg) + var(--_C) * 99999px)
|
|
145
|
+
);
|
|
146
|
+
right: min(
|
|
147
|
+
calc(var(--_s-r) + var(--_R) * 99999px),
|
|
148
|
+
calc(
|
|
149
|
+
max(
|
|
150
|
+
0px,
|
|
151
|
+
min(
|
|
152
|
+
var(--_n-l),
|
|
153
|
+
calc(
|
|
154
|
+
(var(--_s-r) + var(--_n-l)) / 2
|
|
155
|
+
- var(--_gm) / 2
|
|
156
|
+
),
|
|
157
|
+
max(
|
|
158
|
+
min(
|
|
159
|
+
calc(var(--_c-r) - var(--_eg)),
|
|
160
|
+
calc(var(--_s-r) - var(--_eg))
|
|
161
|
+
),
|
|
162
|
+
calc(
|
|
163
|
+
var(--_s-r)
|
|
164
|
+
- (var(--_n-l) - var(--_s-r)) * 999
|
|
165
|
+
)
|
|
166
|
+
)
|
|
167
|
+
)
|
|
168
|
+
)
|
|
169
|
+
+ var(--_C) * 99999px
|
|
170
|
+
)
|
|
171
|
+
);
|
|
172
|
+
min-height: calc(var(--_gm) * var(--_C));
|
|
173
|
+
min-width: calc(var(--_gm) * var(--_R));
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/* After last node: col extends down, row extends right */
|
|
177
|
+
.positioned.gap-after.last .svedit-selectable {
|
|
178
|
+
top: min(
|
|
179
|
+
calc(var(--_s-b) + var(--_R) * 99999px),
|
|
180
|
+
calc(var(--_s-t) + var(--_C) * 99999px)
|
|
181
|
+
);
|
|
182
|
+
bottom: min(
|
|
183
|
+
calc(var(--_s-b) - var(--_eg) + var(--_R) * 99999px),
|
|
184
|
+
calc(var(--_s-b) + var(--_C) * 99999px)
|
|
185
|
+
);
|
|
186
|
+
left: min(
|
|
187
|
+
calc(var(--_s-l) + var(--_R) * 99999px),
|
|
188
|
+
calc(var(--_s-r) + var(--_C) * 99999px),
|
|
189
|
+
calc(100% - var(--_eg) + var(--_C) * 99999px)
|
|
190
|
+
);
|
|
191
|
+
right: min(
|
|
192
|
+
calc(var(--_s-r) + var(--_R) * 99999px),
|
|
193
|
+
calc(
|
|
194
|
+
max(
|
|
195
|
+
0px,
|
|
196
|
+
min(
|
|
197
|
+
calc(var(--_c-r) - var(--_eg)),
|
|
198
|
+
calc(var(--_s-r) - var(--_eg))
|
|
199
|
+
)
|
|
200
|
+
)
|
|
201
|
+
+ var(--_C) * 99999px
|
|
202
|
+
)
|
|
203
|
+
);
|
|
204
|
+
min-height: calc(var(--_eg) * var(--_C));
|
|
205
|
+
min-width: calc(var(--_eg) * var(--_R));
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/* Before first node: col extends up, row extends left */
|
|
209
|
+
.positioned.gap-before:not(.empty) .svedit-selectable {
|
|
210
|
+
top: min(
|
|
211
|
+
calc(
|
|
212
|
+
max(0px, var(--_s-t) - var(--_eg))
|
|
213
|
+
+ var(--_R) * 99999px
|
|
214
|
+
),
|
|
215
|
+
calc(var(--_s-t) + var(--_C) * 99999px)
|
|
216
|
+
);
|
|
217
|
+
bottom: min(
|
|
218
|
+
calc(var(--_s-t) + var(--_R) * 99999px),
|
|
219
|
+
calc(var(--_s-b) + var(--_C) * 99999px)
|
|
220
|
+
);
|
|
221
|
+
left: min(
|
|
222
|
+
calc(var(--_s-l) + var(--_R) * 99999px),
|
|
223
|
+
calc(
|
|
224
|
+
max(0px, var(--_s-l) - var(--_eg))
|
|
225
|
+
+ var(--_C) * 99999px
|
|
226
|
+
)
|
|
227
|
+
);
|
|
228
|
+
right: min(
|
|
229
|
+
calc(var(--_s-r) + var(--_R) * 99999px),
|
|
230
|
+
calc(var(--_s-l) + var(--_C) * 99999px)
|
|
231
|
+
);
|
|
232
|
+
min-height: calc(var(--_eg) * var(--_C));
|
|
233
|
+
min-width: calc(var(--_eg) * var(--_R));
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
/* Empty array: spans the outermost edges of placeholder and container. */
|
|
237
|
+
.positioned.gap-before.empty .svedit-selectable {
|
|
238
|
+
top: min(var(--_s-t), var(--_c-t));
|
|
239
|
+
bottom: min(var(--_s-b), var(--_c-b));
|
|
240
|
+
left: min(var(--_s-l), var(--_c-l));
|
|
241
|
+
right: min(var(--_s-r), var(--_c-r));
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/* Debugging styles */
|
|
245
|
+
/* .positioned .svedit-selectable {
|
|
246
|
+
outline: 0.1px solid rgba(238, 0, 255, 0.5);
|
|
247
|
+
outline-offset: -0.5px;
|
|
248
|
+
} */
|
|
249
|
+
</style>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export default NodeGap;
|
|
2
|
+
type NodeGap = {
|
|
3
|
+
$on?(type: string, callback: (e: any) => void): () => void;
|
|
4
|
+
$set?(props: Partial<$$ComponentProps>): void;
|
|
5
|
+
};
|
|
6
|
+
declare const NodeGap: import("svelte").Component<{
|
|
7
|
+
path: any;
|
|
8
|
+
type: any;
|
|
9
|
+
empty?: boolean;
|
|
10
|
+
last?: boolean;
|
|
11
|
+
positioned?: boolean;
|
|
12
|
+
}, {}, "">;
|
|
13
|
+
type $$ComponentProps = {
|
|
14
|
+
path: any;
|
|
15
|
+
type: any;
|
|
16
|
+
empty?: boolean;
|
|
17
|
+
last?: boolean;
|
|
18
|
+
positioned?: boolean;
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=NodeGap.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NodeGap.svelte.d.ts","sourceRoot":"","sources":["../src/lib/NodeGap.svelte.js"],"names":[],"mappings":";;;;;AA8CA;UArB0B,GAAG;UAAQ,GAAG;YAAU,OAAO;WAAS,OAAO;iBAAe,OAAO;WAqBzC;wBArBpC;IAAE,IAAI,EAAE,GAAG,CAAC;IAAC,IAAI,EAAE,GAAG,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAAE"}
|