sveltekit-ui 1.0.27 → 1.0.29
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/Content/index.svelte +2 -2
- package/dist/Components/ContentInput/ContentPanelBuilder/ElementList/index.svelte +68 -6
- package/dist/Components/ContentInput/index.svelte +7 -2
- package/dist/Components/ContentInput/index.svelte.js +119 -6
- package/dist/client/astc_formatting/index.js +2 -0
- package/package.json +2 -2
- package/src/lib/Components/Content/index.svelte +2 -2
- package/src/lib/Components/ContentInput/ContentPanelBuilder/ElementList/index.svelte +68 -6
- package/src/lib/Components/ContentInput/index.svelte +7 -2
- package/src/lib/Components/ContentInput/index.svelte.js +119 -6
- package/src/lib/client/astc_formatting/index.js +2 -0
- package/src/routes/[component]/Showcase/ContentInput/index.svelte +918 -149
|
@@ -3,17 +3,24 @@
|
|
|
3
3
|
import Popover from "../../../Popover/index.svelte"
|
|
4
4
|
import TextInput from "../../../TextInput/index.svelte"
|
|
5
5
|
import AddElement from "../AddElement/index.svelte"
|
|
6
|
-
import Self from
|
|
6
|
+
import Self from "./index.svelte"
|
|
7
7
|
import { node_types } from "../../../../client/index.js"
|
|
8
8
|
|
|
9
9
|
let { manager, element_manager } = $props()
|
|
10
|
-
|
|
11
10
|
</script>
|
|
12
11
|
|
|
13
12
|
<div
|
|
14
13
|
class="container"
|
|
15
14
|
class:is_highlight={element_manager?.element?.selector_id &&
|
|
16
15
|
element_manager?.element?.selector_id == manager?.focused_selector_id}
|
|
16
|
+
class:is_drop_dragover={manager?.dragged_over_element_child?.selector_id == element_manager?.element?.selector_id}
|
|
17
|
+
role="listitem"
|
|
18
|
+
draggable="true"
|
|
19
|
+
aria-grabbed="false"
|
|
20
|
+
ondragover={(e) => manager?.handle_element_child_drag_over(e, element_manager?.element?.selector_id)}
|
|
21
|
+
ondrop={(e) => manager?.handle_element_child_drag_drop(e, element_manager?.element?.selector_id)}
|
|
22
|
+
ondragstart={(e) => manager?.handle_element_child_drag_start(e, element_manager?.element?.selector_id)}
|
|
23
|
+
ondragend={(e) => manager?.handle_element_child_drag_end(e, element_manager?.element?.selector_id)}
|
|
17
24
|
>
|
|
18
25
|
<div
|
|
19
26
|
class="event_handler"
|
|
@@ -23,12 +30,30 @@
|
|
|
23
30
|
>
|
|
24
31
|
<div class="el_row">
|
|
25
32
|
{#if element_manager?.element}
|
|
33
|
+
{#if manager?.dragged_over_element_child?.selector_id == element_manager?.element?.selector_id && element_manager?.element?.selector_id != manager?.dragging_selector_id && !manager?.dragged_over_element_child?.is_children}
|
|
34
|
+
<div class="drop_area" style="left: 0; top: 0;">Move Before Element</div>
|
|
35
|
+
{/if}
|
|
26
36
|
<div class="el_name">
|
|
27
|
-
<h4 class="el_title">
|
|
37
|
+
<h4 class="el_title">
|
|
38
|
+
{element_manager?.element?.type_id}
|
|
39
|
+
</h4>
|
|
28
40
|
<p class="el_id">{element_manager?.element?.selector_id}</p>
|
|
29
41
|
{#if Object.keys(node_types?.[element_manager?.element?.type_id]?.attributes || {})?.length > 0 || node_types?.[element_manager?.element?.type_id]?.custom_attributes_input}
|
|
30
42
|
<Button manager={element_manager?.edit_attributes_popover_button_manager} />
|
|
31
43
|
{/if}
|
|
44
|
+
{#if manager?.dragged_over_element_child?.selector_id == element_manager?.element?.selector_id && Object.keys(node_types?.[element_manager?.element?.type_id]?.child_elements || {}).length > 0}
|
|
45
|
+
<div
|
|
46
|
+
class="child_drop"
|
|
47
|
+
role="listitem"
|
|
48
|
+
ondragover={(e) =>
|
|
49
|
+
manager?.handle_element_child_drag_over(e, element_manager?.element?.selector_id, true)}
|
|
50
|
+
ondrop={(e) => manager?.handle_element_child_drag_drop(e, element_manager?.element?.selector_id, true)}
|
|
51
|
+
class:is_child_drop_dragover={manager?.dragged_over_element_child?.selector_id ==
|
|
52
|
+
element_manager?.element?.selector_id && manager?.dragged_over_element_child?.is_children}
|
|
53
|
+
>
|
|
54
|
+
Child Drop Zone
|
|
55
|
+
</div>
|
|
56
|
+
{/if}
|
|
32
57
|
</div>
|
|
33
58
|
{/if}
|
|
34
59
|
<div style="display: flex; flex: 0;">
|
|
@@ -39,10 +64,11 @@
|
|
|
39
64
|
<Button manager={element_manager?.small_preempt_add_child_element_button_manager} />
|
|
40
65
|
{/if}
|
|
41
66
|
{#if element_manager?.element}
|
|
42
|
-
|
|
67
|
+
<Button manager={element_manager?.extra_popover_button_manager} />
|
|
43
68
|
{/if}
|
|
44
69
|
<Popover manager={element_manager?.extra_popover_manager}>
|
|
45
70
|
{#snippet content()}
|
|
71
|
+
<Button manager={element_manager?.reset_ids_button_manager} />
|
|
46
72
|
<Button manager={element_manager?.copy_markdown_button_manager} />
|
|
47
73
|
<Button manager={element_manager?.copy_astc_button_manager} />
|
|
48
74
|
{#if Array.isArray(element_manager?.avail_child_element_ids) && element_manager?.avail_child_element_ids?.length > 0}
|
|
@@ -73,8 +99,13 @@
|
|
|
73
99
|
</div>
|
|
74
100
|
</div>
|
|
75
101
|
</div>
|
|
76
|
-
{#if
|
|
77
|
-
|
|
102
|
+
{#if manager?.dragged_over_element_child?.selector_id == element_manager?.element?.selector_id && element_manager?.element?.selector_id != manager?.dragging_selector_id && manager?.dragged_over_element_child?.is_children}
|
|
103
|
+
<div style="position: relative;">
|
|
104
|
+
<div class="drop_area" style="left: 1rem; top: 50%; ">Move to Element Children</div>
|
|
105
|
+
</div>
|
|
106
|
+
{/if}
|
|
107
|
+
{#if Array.isArray(element_manager?.children) && element_manager?.children.length > 0}
|
|
108
|
+
{#each element_manager.children as child, i}
|
|
78
109
|
<Self {manager} element_manager={child} />
|
|
79
110
|
{/each}
|
|
80
111
|
{/if}
|
|
@@ -95,6 +126,7 @@
|
|
|
95
126
|
transition: 0.2s;
|
|
96
127
|
}
|
|
97
128
|
.el_row {
|
|
129
|
+
position: relative;
|
|
98
130
|
display: flex;
|
|
99
131
|
/* align-items: center; */
|
|
100
132
|
justify-content: space-between;
|
|
@@ -111,6 +143,36 @@
|
|
|
111
143
|
font-weight: 600 !important;
|
|
112
144
|
margin-left: 0.5rem;
|
|
113
145
|
}
|
|
146
|
+
.is_drop_dragover {
|
|
147
|
+
background-color: oklch(var(--l12-t) var(--c10) var(--h16) / var(--o15));
|
|
148
|
+
border-radius: 0.5rem;
|
|
149
|
+
}
|
|
150
|
+
.drop_area {
|
|
151
|
+
position: absolute;
|
|
152
|
+
width: fit-content;
|
|
153
|
+
transform: translateY(-50%);
|
|
154
|
+
font-size: 1rem !important;
|
|
155
|
+
pointer-events: none;
|
|
156
|
+
border-radius: 0.5rem;
|
|
157
|
+
padding: 0.2rem 0.5rem;
|
|
158
|
+
border: 1px solid oklch(var(--l2-t) var(--c5) var(--h3) / var(--o22));
|
|
159
|
+
background-color: oklch(var(--l5-t) var(--c10) var(--h3) / var(--o20));
|
|
160
|
+
color: oklch(var(--l16-t) var(--c10) var(--h3));
|
|
161
|
+
}
|
|
162
|
+
.child_drop {
|
|
163
|
+
margin-left: 2rem;
|
|
164
|
+
border: 1px dotted var(--g3-t);
|
|
165
|
+
border-radius: 0.5rem;
|
|
166
|
+
display: grid;
|
|
167
|
+
place-content: center;
|
|
168
|
+
min-width: fit-content;
|
|
169
|
+
padding: 0.2rem 0.5rem;
|
|
170
|
+
white-space: nowrap;
|
|
171
|
+
}
|
|
172
|
+
.is_child_drop_dragover {
|
|
173
|
+
background-color: oklch(var(--l2-t) var(--c1) var(--h3) / var(--o15));
|
|
174
|
+
color: var(--g24-t);
|
|
175
|
+
}
|
|
114
176
|
.el_id {
|
|
115
177
|
color: var(--g8-t);
|
|
116
178
|
font-size: 1.2rem;
|
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
import Dropdown from "../Dropdown/index.svelte"
|
|
9
9
|
|
|
10
10
|
let { manager, panel_header } = $props()
|
|
11
|
-
|
|
12
11
|
</script>
|
|
13
12
|
|
|
14
13
|
<div class="container">
|
|
@@ -26,6 +25,13 @@
|
|
|
26
25
|
<Popover manager={manager?.paste_astc_markdown_popover_manager}>
|
|
27
26
|
{#snippet content()}
|
|
28
27
|
<div>
|
|
28
|
+
<p>Note: for valid json make sure all keys and strings are in double quotes, and no trailing commas. example:</p>
|
|
29
|
+
<pre>
|
|
30
|
+
{`{
|
|
31
|
+
"type_id": "div",
|
|
32
|
+
"children": []
|
|
33
|
+
}`}
|
|
34
|
+
</pre>
|
|
29
35
|
<Dropdown manager={manager?.paste_astc_markdown_dropdown_manager} />
|
|
30
36
|
<TextInput manager={manager?.paste_astc_markdown_text_input_manager} />
|
|
31
37
|
</div>
|
|
@@ -35,7 +41,6 @@
|
|
|
35
41
|
{/snippet}
|
|
36
42
|
</Popover>
|
|
37
43
|
|
|
38
|
-
|
|
39
44
|
<style>
|
|
40
45
|
.container {
|
|
41
46
|
display: flex;
|
|
@@ -39,6 +39,8 @@ export function create_content_input_manager(config) {
|
|
|
39
39
|
let attributes_input = $state(null)
|
|
40
40
|
let focused_selector_id = $state(null)
|
|
41
41
|
let definition_stack = $state([])
|
|
42
|
+
let dragging_selector_id = $state(null)
|
|
43
|
+
let dragged_over_element_child = $state(null)
|
|
42
44
|
|
|
43
45
|
let mapkit_js_token = $derived(set_closurable(config?.mapkit_js_token, null))
|
|
44
46
|
|
|
@@ -109,6 +111,7 @@ export function create_content_input_manager(config) {
|
|
|
109
111
|
let preempt_add_child_element_button_manager = $state(null)
|
|
110
112
|
let small_preempt_add_child_element_button_manager = $state(null)
|
|
111
113
|
let preempt_add_sibling_element_below_button_manager = $state(null)
|
|
114
|
+
let reset_ids_button_manager = $state(null)
|
|
112
115
|
let copy_markdown_button_manager = $state(null)
|
|
113
116
|
let copy_astc_button_manager = $state(null)
|
|
114
117
|
let shift_element_up_5_button_manager = $state(null)
|
|
@@ -177,6 +180,19 @@ export function create_content_input_manager(config) {
|
|
|
177
180
|
border_radius: 0.5,
|
|
178
181
|
on_click: () => initiate_add_child_el_to_selector(element?.selector_id),
|
|
179
182
|
})
|
|
183
|
+
reset_ids_button_manager = create_button_manager({
|
|
184
|
+
type: "soft",
|
|
185
|
+
support_icon: "refresh",
|
|
186
|
+
text_align: "left",
|
|
187
|
+
text: "Reset IDs",
|
|
188
|
+
is_success_animation: true,
|
|
189
|
+
on_click: () => {
|
|
190
|
+
extra_popover_manager.close()
|
|
191
|
+
setTimeout(() => {
|
|
192
|
+
reset_ids(element?.selector_id)
|
|
193
|
+
}, 200)
|
|
194
|
+
},
|
|
195
|
+
})
|
|
180
196
|
copy_markdown_button_manager = create_button_manager({
|
|
181
197
|
type: "soft",
|
|
182
198
|
support_icon: "clipboard",
|
|
@@ -336,6 +352,9 @@ export function create_content_input_manager(config) {
|
|
|
336
352
|
get preempt_add_sibling_element_below_button_manager() {
|
|
337
353
|
return preempt_add_sibling_element_below_button_manager
|
|
338
354
|
},
|
|
355
|
+
get reset_ids_button_manager() {
|
|
356
|
+
return reset_ids_button_manager
|
|
357
|
+
},
|
|
339
358
|
get copy_markdown_button_manager() {
|
|
340
359
|
return copy_markdown_button_manager
|
|
341
360
|
},
|
|
@@ -376,7 +395,7 @@ export function create_content_input_manager(config) {
|
|
|
376
395
|
}
|
|
377
396
|
}
|
|
378
397
|
|
|
379
|
-
function get_parent_el(selector_id) {
|
|
398
|
+
function get_parent_el(selector_id, element = null) {
|
|
380
399
|
function get_parent_el_recursive(selector_id, element) {
|
|
381
400
|
if (selector_id && element && Array.isArray(element?.children)) {
|
|
382
401
|
for (let child of element.children) {
|
|
@@ -393,7 +412,7 @@ export function create_content_input_manager(config) {
|
|
|
393
412
|
}
|
|
394
413
|
return null
|
|
395
414
|
}
|
|
396
|
-
return get_parent_el_recursive(selector_id, versions?.[selected_version_index])
|
|
415
|
+
return get_parent_el_recursive(selector_id, element ?? versions?.[selected_version_index])
|
|
397
416
|
}
|
|
398
417
|
|
|
399
418
|
function add_version(version) {
|
|
@@ -405,6 +424,92 @@ export function create_content_input_manager(config) {
|
|
|
405
424
|
}
|
|
406
425
|
}
|
|
407
426
|
|
|
427
|
+
function handle_element_child_drag_over(e, selector_id, is_children = false) {
|
|
428
|
+
e.preventDefault()
|
|
429
|
+
e.stopPropagation()
|
|
430
|
+
dragged_over_element_child = { selector_id, is_children }
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
function handle_element_child_drag_drop(e, selector_id, is_children = false) {
|
|
434
|
+
e.stopPropagation()
|
|
435
|
+
console.log("handle_element_child_drag_drop", { selector_id, dragging_selector_id, is_children })
|
|
436
|
+
if (selector_id == dragging_selector_id) {
|
|
437
|
+
dragging_selector_id = null
|
|
438
|
+
return
|
|
439
|
+
}
|
|
440
|
+
const found_element = traverse_els_for_match(dragging_selector_id)
|
|
441
|
+
const removed_version = remove_el_recursive(selected_version_prepped?.element, dragging_selector_id)
|
|
442
|
+
let readded_version = null
|
|
443
|
+
if (is_children) {
|
|
444
|
+
readded_version = add_child_to_el_recursive(removed_version, selector_id, found_element)
|
|
445
|
+
} else {
|
|
446
|
+
let dom_el_parent = get_parent_el(selector_id, removed_version)
|
|
447
|
+
const element_index_of_siblings = Array.isArray(dom_el_parent?.children)
|
|
448
|
+
? dom_el_parent.children.findIndex((h) => h.selector_id == selector_id)
|
|
449
|
+
: null
|
|
450
|
+
if (dom_el_parent && found_element) {
|
|
451
|
+
if (Array.isArray(dom_el_parent?.children)) {
|
|
452
|
+
dom_el_parent.children.splice(element_index_of_siblings, 0, found_element)
|
|
453
|
+
} else {
|
|
454
|
+
dom_el_parent.children = [found_element]
|
|
455
|
+
}
|
|
456
|
+
readded_version = replace_el_recursive(removed_version, dom_el_parent?.selector_id, dom_el_parent)
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
add_version(readded_version)
|
|
460
|
+
dragging_selector_id = null
|
|
461
|
+
}
|
|
462
|
+
function handle_element_child_drag_start(e, selector_id) {
|
|
463
|
+
e.stopPropagation()
|
|
464
|
+
dragging_selector_id = selector_id
|
|
465
|
+
}
|
|
466
|
+
function handle_element_child_drag_end(e, selector_id) {
|
|
467
|
+
dragged_over_element_child = null
|
|
468
|
+
dragging_selector_id = null
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
function reset_ids(selector_id) {
|
|
472
|
+
const found_element = traverse_els_for_match(selector_id)
|
|
473
|
+
const clean_element = reset_ids_recursive(found_element)
|
|
474
|
+
const new_version = find_and_replace_element(selector_id, selected_version_prepped?.element, clean_element)
|
|
475
|
+
add_version(new_version)
|
|
476
|
+
}
|
|
477
|
+
|
|
478
|
+
function reset_ids_recursive(element, selector_id) {
|
|
479
|
+
if (!element?.selector_id || element?.selector_id == selector_id) {
|
|
480
|
+
return null
|
|
481
|
+
}
|
|
482
|
+
element.selector_id = create_unique_id(null, 8)
|
|
483
|
+
let new_children = []
|
|
484
|
+
if (Array.isArray(element?.children)) {
|
|
485
|
+
for (let child of element?.children) {
|
|
486
|
+
const child_new_el = reset_ids_recursive(child, selector_id)
|
|
487
|
+
if (child_new_el) {
|
|
488
|
+
new_children.push(child_new_el)
|
|
489
|
+
}
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
element.children = new_children
|
|
493
|
+
return element
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
function find_and_replace_element(selector_id, root_el, replacement_el) {
|
|
497
|
+
function replace_recursive(node) {
|
|
498
|
+
if (!node) return null
|
|
499
|
+
if (node.selector_id === selector_id) {
|
|
500
|
+
return deep_copy(replacement_el)
|
|
501
|
+
}
|
|
502
|
+
const new_children = Array.isArray(node.children) ? node.children.map(replace_recursive).filter(Boolean) : []
|
|
503
|
+
return {
|
|
504
|
+
type_id: node.type_id,
|
|
505
|
+
selector_id: node.selector_id,
|
|
506
|
+
attributes: node.attributes ? { ...node.attributes } : node.attributes,
|
|
507
|
+
children: new_children,
|
|
508
|
+
}
|
|
509
|
+
}
|
|
510
|
+
return replace_recursive(root_el)
|
|
511
|
+
}
|
|
512
|
+
|
|
408
513
|
function copy_markdown() {
|
|
409
514
|
copy_to_clipboard(astc_to_markdown(selected_version_prepped?.element))
|
|
410
515
|
}
|
|
@@ -449,7 +554,6 @@ export function create_content_input_manager(config) {
|
|
|
449
554
|
}
|
|
450
555
|
|
|
451
556
|
function add_sibling_el(selector_id, el_type_id, element_to_add = null) {
|
|
452
|
-
console.log("add_sibling_el", selector_id, el_type_id)
|
|
453
557
|
let dom_el_parent = get_parent_el(selector_id)
|
|
454
558
|
const element_index_of_siblings = Array.isArray(dom_el_parent?.children)
|
|
455
559
|
? dom_el_parent.children.findIndex((h) => h.selector_id == selector_id)
|
|
@@ -469,10 +573,8 @@ export function create_content_input_manager(config) {
|
|
|
469
573
|
}
|
|
470
574
|
|
|
471
575
|
function initiate_add_sibling_el_to_selector(selector_id) {
|
|
472
|
-
console.log("initiate_add_sibling_el_to_selector", selector_id)
|
|
473
576
|
const dom_el_parent = get_parent_el(selector_id)
|
|
474
577
|
const avail_element_ids = calc_child_element_options(dom_el_parent)
|
|
475
|
-
console.log("avail_element_ids", avail_element_ids)
|
|
476
578
|
if (avail_element_ids.length > 1) {
|
|
477
579
|
location_to_add_element = "sibling"
|
|
478
580
|
find_and_open_add_element_popover_selector_id(selected_version_prepped, selector_id ?? "root")
|
|
@@ -518,7 +620,6 @@ export function create_content_input_manager(config) {
|
|
|
518
620
|
}
|
|
519
621
|
|
|
520
622
|
function add_el_to_el_children(selector_id, new_element) {
|
|
521
|
-
console.log("add_el_to_el_children", selector_id)
|
|
522
623
|
add_version(add_child_to_el_recursive(selected_version_prepped?.element, selector_id, new_element))
|
|
523
624
|
}
|
|
524
625
|
|
|
@@ -1013,6 +1114,12 @@ export function create_content_input_manager(config) {
|
|
|
1013
1114
|
get attributes_input() {
|
|
1014
1115
|
return attributes_input
|
|
1015
1116
|
},
|
|
1117
|
+
get dragging_selector_id() {
|
|
1118
|
+
return dragging_selector_id
|
|
1119
|
+
},
|
|
1120
|
+
get dragged_over_element_child() {
|
|
1121
|
+
return dragged_over_element_child
|
|
1122
|
+
},
|
|
1016
1123
|
|
|
1017
1124
|
init,
|
|
1018
1125
|
clean_content,
|
|
@@ -1049,5 +1156,11 @@ export function create_content_input_manager(config) {
|
|
|
1049
1156
|
set_element_attributes,
|
|
1050
1157
|
|
|
1051
1158
|
pass_event_down,
|
|
1159
|
+
reset_ids,
|
|
1160
|
+
|
|
1161
|
+
handle_element_child_drag_over,
|
|
1162
|
+
handle_element_child_drag_drop,
|
|
1163
|
+
handle_element_child_drag_start,
|
|
1164
|
+
handle_element_child_drag_end,
|
|
1052
1165
|
}
|
|
1053
1166
|
}
|
|
@@ -306,6 +306,8 @@ export function astc_to_markdown(astc) {
|
|
|
306
306
|
return `\`\`\`${language}\n${attributes.content}\n\`\`\`\n`
|
|
307
307
|
case "hr":
|
|
308
308
|
return "---\n"
|
|
309
|
+
case "br":
|
|
310
|
+
return "\n"
|
|
309
311
|
case "table":
|
|
310
312
|
const table_rows = children.map((child) => astc_element_to_markdown(child))
|
|
311
313
|
return table_rows.join("\n") + "\n"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sveltekit-ui",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.29",
|
|
4
4
|
"description": "A SvelteKit UI component library for building modern web applications",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"@sveltejs/adapter-vercel": "^5.10.2",
|
|
29
|
-
"@sveltejs/kit": "^2.
|
|
29
|
+
"@sveltejs/kit": "^2.36.1",
|
|
30
30
|
"@sveltejs/package": "^2.5.0",
|
|
31
31
|
"@sveltejs/vite-plugin-svelte": "^6.1.3",
|
|
32
32
|
"@vercel/analytics": "^1.5.0",
|
|
@@ -3,17 +3,24 @@
|
|
|
3
3
|
import Popover from "$lib/Components/Popover/index.svelte"
|
|
4
4
|
import TextInput from "$lib/Components/TextInput/index.svelte"
|
|
5
5
|
import AddElement from "$lib/Components/ContentInput/ContentPanelBuilder/AddElement/index.svelte"
|
|
6
|
-
import Self from
|
|
6
|
+
import Self from "./index.svelte"
|
|
7
7
|
import { node_types } from "$lib/client/index.js"
|
|
8
8
|
|
|
9
9
|
let { manager, element_manager } = $props()
|
|
10
|
-
|
|
11
10
|
</script>
|
|
12
11
|
|
|
13
12
|
<div
|
|
14
13
|
class="container"
|
|
15
14
|
class:is_highlight={element_manager?.element?.selector_id &&
|
|
16
15
|
element_manager?.element?.selector_id == manager?.focused_selector_id}
|
|
16
|
+
class:is_drop_dragover={manager?.dragged_over_element_child?.selector_id == element_manager?.element?.selector_id}
|
|
17
|
+
role="listitem"
|
|
18
|
+
draggable="true"
|
|
19
|
+
aria-grabbed="false"
|
|
20
|
+
ondragover={(e) => manager?.handle_element_child_drag_over(e, element_manager?.element?.selector_id)}
|
|
21
|
+
ondrop={(e) => manager?.handle_element_child_drag_drop(e, element_manager?.element?.selector_id)}
|
|
22
|
+
ondragstart={(e) => manager?.handle_element_child_drag_start(e, element_manager?.element?.selector_id)}
|
|
23
|
+
ondragend={(e) => manager?.handle_element_child_drag_end(e, element_manager?.element?.selector_id)}
|
|
17
24
|
>
|
|
18
25
|
<div
|
|
19
26
|
class="event_handler"
|
|
@@ -23,12 +30,30 @@
|
|
|
23
30
|
>
|
|
24
31
|
<div class="el_row">
|
|
25
32
|
{#if element_manager?.element}
|
|
33
|
+
{#if manager?.dragged_over_element_child?.selector_id == element_manager?.element?.selector_id && element_manager?.element?.selector_id != manager?.dragging_selector_id && !manager?.dragged_over_element_child?.is_children}
|
|
34
|
+
<div class="drop_area" style="left: 0; top: 0;">Move Before Element</div>
|
|
35
|
+
{/if}
|
|
26
36
|
<div class="el_name">
|
|
27
|
-
<h4 class="el_title">
|
|
37
|
+
<h4 class="el_title">
|
|
38
|
+
{element_manager?.element?.type_id}
|
|
39
|
+
</h4>
|
|
28
40
|
<p class="el_id">{element_manager?.element?.selector_id}</p>
|
|
29
41
|
{#if Object.keys(node_types?.[element_manager?.element?.type_id]?.attributes || {})?.length > 0 || node_types?.[element_manager?.element?.type_id]?.custom_attributes_input}
|
|
30
42
|
<Button manager={element_manager?.edit_attributes_popover_button_manager} />
|
|
31
43
|
{/if}
|
|
44
|
+
{#if manager?.dragged_over_element_child?.selector_id == element_manager?.element?.selector_id && Object.keys(node_types?.[element_manager?.element?.type_id]?.child_elements || {}).length > 0}
|
|
45
|
+
<div
|
|
46
|
+
class="child_drop"
|
|
47
|
+
role="listitem"
|
|
48
|
+
ondragover={(e) =>
|
|
49
|
+
manager?.handle_element_child_drag_over(e, element_manager?.element?.selector_id, true)}
|
|
50
|
+
ondrop={(e) => manager?.handle_element_child_drag_drop(e, element_manager?.element?.selector_id, true)}
|
|
51
|
+
class:is_child_drop_dragover={manager?.dragged_over_element_child?.selector_id ==
|
|
52
|
+
element_manager?.element?.selector_id && manager?.dragged_over_element_child?.is_children}
|
|
53
|
+
>
|
|
54
|
+
Child Drop Zone
|
|
55
|
+
</div>
|
|
56
|
+
{/if}
|
|
32
57
|
</div>
|
|
33
58
|
{/if}
|
|
34
59
|
<div style="display: flex; flex: 0;">
|
|
@@ -39,10 +64,11 @@
|
|
|
39
64
|
<Button manager={element_manager?.small_preempt_add_child_element_button_manager} />
|
|
40
65
|
{/if}
|
|
41
66
|
{#if element_manager?.element}
|
|
42
|
-
|
|
67
|
+
<Button manager={element_manager?.extra_popover_button_manager} />
|
|
43
68
|
{/if}
|
|
44
69
|
<Popover manager={element_manager?.extra_popover_manager}>
|
|
45
70
|
{#snippet content()}
|
|
71
|
+
<Button manager={element_manager?.reset_ids_button_manager} />
|
|
46
72
|
<Button manager={element_manager?.copy_markdown_button_manager} />
|
|
47
73
|
<Button manager={element_manager?.copy_astc_button_manager} />
|
|
48
74
|
{#if Array.isArray(element_manager?.avail_child_element_ids) && element_manager?.avail_child_element_ids?.length > 0}
|
|
@@ -73,8 +99,13 @@
|
|
|
73
99
|
</div>
|
|
74
100
|
</div>
|
|
75
101
|
</div>
|
|
76
|
-
{#if
|
|
77
|
-
|
|
102
|
+
{#if manager?.dragged_over_element_child?.selector_id == element_manager?.element?.selector_id && element_manager?.element?.selector_id != manager?.dragging_selector_id && manager?.dragged_over_element_child?.is_children}
|
|
103
|
+
<div style="position: relative;">
|
|
104
|
+
<div class="drop_area" style="left: 1rem; top: 50%; ">Move to Element Children</div>
|
|
105
|
+
</div>
|
|
106
|
+
{/if}
|
|
107
|
+
{#if Array.isArray(element_manager?.children) && element_manager?.children.length > 0}
|
|
108
|
+
{#each element_manager.children as child, i}
|
|
78
109
|
<Self {manager} element_manager={child} />
|
|
79
110
|
{/each}
|
|
80
111
|
{/if}
|
|
@@ -95,6 +126,7 @@
|
|
|
95
126
|
transition: 0.2s;
|
|
96
127
|
}
|
|
97
128
|
.el_row {
|
|
129
|
+
position: relative;
|
|
98
130
|
display: flex;
|
|
99
131
|
/* align-items: center; */
|
|
100
132
|
justify-content: space-between;
|
|
@@ -111,6 +143,36 @@
|
|
|
111
143
|
font-weight: 600 !important;
|
|
112
144
|
margin-left: 0.5rem;
|
|
113
145
|
}
|
|
146
|
+
.is_drop_dragover {
|
|
147
|
+
background-color: oklch(var(--l12-t) var(--c10) var(--h16) / var(--o15));
|
|
148
|
+
border-radius: 0.5rem;
|
|
149
|
+
}
|
|
150
|
+
.drop_area {
|
|
151
|
+
position: absolute;
|
|
152
|
+
width: fit-content;
|
|
153
|
+
transform: translateY(-50%);
|
|
154
|
+
font-size: 1rem !important;
|
|
155
|
+
pointer-events: none;
|
|
156
|
+
border-radius: 0.5rem;
|
|
157
|
+
padding: 0.2rem 0.5rem;
|
|
158
|
+
border: 1px solid oklch(var(--l2-t) var(--c5) var(--h3) / var(--o22));
|
|
159
|
+
background-color: oklch(var(--l5-t) var(--c10) var(--h3) / var(--o20));
|
|
160
|
+
color: oklch(var(--l16-t) var(--c10) var(--h3));
|
|
161
|
+
}
|
|
162
|
+
.child_drop {
|
|
163
|
+
margin-left: 2rem;
|
|
164
|
+
border: 1px dotted var(--g3-t);
|
|
165
|
+
border-radius: 0.5rem;
|
|
166
|
+
display: grid;
|
|
167
|
+
place-content: center;
|
|
168
|
+
min-width: fit-content;
|
|
169
|
+
padding: 0.2rem 0.5rem;
|
|
170
|
+
white-space: nowrap;
|
|
171
|
+
}
|
|
172
|
+
.is_child_drop_dragover {
|
|
173
|
+
background-color: oklch(var(--l2-t) var(--c1) var(--h3) / var(--o15));
|
|
174
|
+
color: var(--g24-t);
|
|
175
|
+
}
|
|
114
176
|
.el_id {
|
|
115
177
|
color: var(--g8-t);
|
|
116
178
|
font-size: 1.2rem;
|
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
import Dropdown from "$lib/Components/Dropdown/index.svelte"
|
|
9
9
|
|
|
10
10
|
let { manager, panel_header } = $props()
|
|
11
|
-
|
|
12
11
|
</script>
|
|
13
12
|
|
|
14
13
|
<div class="container">
|
|
@@ -26,6 +25,13 @@
|
|
|
26
25
|
<Popover manager={manager?.paste_astc_markdown_popover_manager}>
|
|
27
26
|
{#snippet content()}
|
|
28
27
|
<div>
|
|
28
|
+
<p>Note: for valid json make sure all keys and strings are in double quotes, and no trailing commas. example:</p>
|
|
29
|
+
<pre>
|
|
30
|
+
{`{
|
|
31
|
+
"type_id": "div",
|
|
32
|
+
"children": []
|
|
33
|
+
}`}
|
|
34
|
+
</pre>
|
|
29
35
|
<Dropdown manager={manager?.paste_astc_markdown_dropdown_manager} />
|
|
30
36
|
<TextInput manager={manager?.paste_astc_markdown_text_input_manager} />
|
|
31
37
|
</div>
|
|
@@ -35,7 +41,6 @@
|
|
|
35
41
|
{/snippet}
|
|
36
42
|
</Popover>
|
|
37
43
|
|
|
38
|
-
|
|
39
44
|
<style>
|
|
40
45
|
.container {
|
|
41
46
|
display: flex;
|