terrier-engine 4.7.4 → 4.7.6
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/data-dive/dives/dive-list.ts +110 -48
- package/data-dive/queries/query-editor.ts +12 -3
- package/package.json +1 -1
- package/terrier/gen/hub-icons.ts +33 -1
- package/terrier/images/icons/existing_child.svg +1 -0
- package/terrier/images/icons/existing_parent.svg +1 -0
- package/terrier/images/icons/new_child.svg +1 -0
- package/terrier/images/icons/new_parent.svg +1 -0
- package/terrier/images/optimized/icon-existing_child.svg +1 -0
- package/terrier/images/optimized/icon-existing_parent.svg +1 -0
- package/terrier/images/optimized/icon-new_child.svg +1 -0
- package/terrier/images/optimized/icon-new_parent.svg +1 -0
- package/terrier/images/raw/icon-existing_child.svg +11 -0
- package/terrier/images/raw/icon-existing_parent.svg +11 -0
- package/terrier/images/raw/icon-new_child.svg +12 -0
- package/terrier/images/raw/icon-new_parent.svg +12 -0
|
@@ -12,6 +12,8 @@ import {DiveSettingsModal} from "./dive-settings"
|
|
|
12
12
|
import DdSession from "../dd-session"
|
|
13
13
|
import Messages from "tuff-core/messages"
|
|
14
14
|
import Arrays from "tuff-core/arrays"
|
|
15
|
+
import TerrierPart from "../../terrier/parts/terrier-part"
|
|
16
|
+
import {DiveRunModal} from "./dive-runs"
|
|
15
17
|
|
|
16
18
|
const log = new Logger("DiveList")
|
|
17
19
|
|
|
@@ -20,43 +22,32 @@ const log = new Logger("DiveList")
|
|
|
20
22
|
// List
|
|
21
23
|
////////////////////////////////////////////////////////////////////////////////
|
|
22
24
|
|
|
23
|
-
export
|
|
25
|
+
export type DiveListState = {
|
|
26
|
+
mode: 'editor' | 'readonly' // whether or not to allow editing or simply viewing dives
|
|
27
|
+
}
|
|
24
28
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
+
/**
|
|
30
|
+
* Show a list of all dive groups and dives that match the given state.
|
|
31
|
+
*/
|
|
32
|
+
export class DiveListPart extends TerrierPart<DiveListState> {
|
|
33
|
+
|
|
34
|
+
editGroupKey = Messages.typedKey<{ id: string }>()
|
|
35
|
+
newDiveKey = Messages.typedKey<{ group_id: string }>()
|
|
36
|
+
editDiveKey = Messages.typedKey<{ id: string }>()
|
|
37
|
+
runDiveKey = Messages.typedKey<{ id: string }>()
|
|
29
38
|
|
|
30
39
|
session!: DdSession
|
|
31
40
|
result!: DiveListResult
|
|
32
41
|
schema!: SchemaDef
|
|
33
42
|
groupMap: Record<string, DdDiveGroup> = {}
|
|
34
|
-
diveMap: Record<string,DdDive> = {}
|
|
43
|
+
diveMap: Record<string, DdDive> = {}
|
|
44
|
+
|
|
35
45
|
|
|
36
46
|
async init() {
|
|
37
|
-
this.setTitle("Data Dive")
|
|
38
|
-
this.setIcon('glyp-data_dives')
|
|
39
47
|
|
|
40
48
|
this.schema = await Schema.get()
|
|
41
49
|
this.session = await DdSession.get()
|
|
42
50
|
|
|
43
|
-
this.mainContentWidth = 'wide'
|
|
44
|
-
|
|
45
|
-
this.addAction({
|
|
46
|
-
title: "New Group",
|
|
47
|
-
icon: 'glyp-plus_outline',
|
|
48
|
-
click: {key: this.newGroupKey}
|
|
49
|
-
}, 'tertiary')
|
|
50
|
-
|
|
51
|
-
this.onClick(this.newGroupKey, _ => {
|
|
52
|
-
log.info("Showing new dive group model")
|
|
53
|
-
const newGroup = {name: '', group_types: []}
|
|
54
|
-
this.app.showModal(GroupEditorModal, {session: this.session,
|
|
55
|
-
group: newGroup,
|
|
56
|
-
callback: _ => this.reload()
|
|
57
|
-
})
|
|
58
|
-
})
|
|
59
|
-
|
|
60
51
|
this.onClick(this.editGroupKey, m => {
|
|
61
52
|
log.info(`Edit group ${m.data.id}`)
|
|
62
53
|
const group = this.groupMap[m.data.id]
|
|
@@ -66,8 +57,7 @@ export class DiveListPage extends PagePart<{}> {
|
|
|
66
57
|
group: group as UnpersistedDdDiveGroup,
|
|
67
58
|
callback: _ => this.reload()
|
|
68
59
|
})
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
60
|
+
} else {
|
|
71
61
|
this.alertToast(`No group with id ${m.data.id}`)
|
|
72
62
|
}
|
|
73
63
|
})
|
|
@@ -91,13 +81,22 @@ export class DiveListPage extends PagePart<{}> {
|
|
|
91
81
|
if (dive) {
|
|
92
82
|
log.info(`Editing settings for dive: ${dive.name}`)
|
|
93
83
|
this.app.showModal(DiveSettingsModal, {schema: this.schema, dive, session: this.session})
|
|
84
|
+
} else {
|
|
85
|
+
log.warn(`No dive with id ${m.data.id}`)
|
|
94
86
|
}
|
|
95
|
-
|
|
87
|
+
})
|
|
88
|
+
|
|
89
|
+
this.onClick(this.runDiveKey, m => {
|
|
90
|
+
const dive = this.diveMap[m.data.id] as DdDive
|
|
91
|
+
if (dive) {
|
|
92
|
+
log.info(`Running dive ${dive.name}`)
|
|
93
|
+
this.app.showModal(DiveRunModal, {dive})
|
|
94
|
+
} else {
|
|
96
95
|
log.warn(`No dive with id ${m.data.id}`)
|
|
97
96
|
}
|
|
98
97
|
})
|
|
99
98
|
|
|
100
|
-
|
|
99
|
+
this.reload().then()
|
|
101
100
|
}
|
|
102
101
|
|
|
103
102
|
async reload() {
|
|
@@ -109,7 +108,7 @@ export class DiveListPage extends PagePart<{}> {
|
|
|
109
108
|
this.dirty()
|
|
110
109
|
}
|
|
111
110
|
|
|
112
|
-
|
|
111
|
+
render(parent: PartTag): any {
|
|
113
112
|
|
|
114
113
|
const groupedDives = Arrays.groupBy(this.result.dives, 'dd_dive_group_id')
|
|
115
114
|
|
|
@@ -122,7 +121,7 @@ export class DiveListPage extends PagePart<{}> {
|
|
|
122
121
|
}
|
|
123
122
|
|
|
124
123
|
renderGroupPanel(parent: PartTag, group: DdDiveGroup, dives: DdDive[]) {
|
|
125
|
-
Fragments.panel(this.theme)
|
|
124
|
+
const panel = Fragments.panel(this.theme)
|
|
126
125
|
.title(group.name)
|
|
127
126
|
.icon((group.icon || 'glyp-data_dives') as IconName)
|
|
128
127
|
.classes('group')
|
|
@@ -132,36 +131,99 @@ export class DiveListPage extends PagePart<{}> {
|
|
|
132
131
|
this.renderDiveRow(content, dive)
|
|
133
132
|
}
|
|
134
133
|
})
|
|
135
|
-
|
|
134
|
+
if (this.state.mode == 'editor') {
|
|
135
|
+
panel.addAction({
|
|
136
136
|
title: "New Dive",
|
|
137
137
|
icon: 'glyp-data_dive',
|
|
138
138
|
click: {key: this.newDiveKey, data: {group_id: group.id}}
|
|
139
139
|
}, 'secondary')
|
|
140
|
-
.addAction({
|
|
140
|
+
panel.addAction({
|
|
141
141
|
icon: 'glyp-settings',
|
|
142
142
|
click: {key: this.editGroupKey, data: {id: group.id}}
|
|
143
143
|
}, 'tertiary')
|
|
144
|
-
|
|
144
|
+
}
|
|
145
|
+
panel.render(parent)
|
|
145
146
|
}
|
|
146
147
|
|
|
147
148
|
renderDiveRow(parent: PartTag, dive: DdDive) {
|
|
148
149
|
parent.div('.dive', row => {
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
.
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
a
|
|
161
|
-
|
|
162
|
-
|
|
150
|
+
if (this.state.mode == 'editor') {
|
|
151
|
+
row.a({href: routes.editor.path({id: dive.id})}, a => {
|
|
152
|
+
if (dive.visibility == 'private') {
|
|
153
|
+
a.i('.glyp-privacy')
|
|
154
|
+
.data({tooltip: "Private Dive"})
|
|
155
|
+
} else {
|
|
156
|
+
a.i('.glyp-data_dive')
|
|
157
|
+
.data({tooltip: "Public Dive"})
|
|
158
|
+
}
|
|
159
|
+
a.span().text(dive.name)
|
|
160
|
+
}).data({tooltip: "Open Editor"})
|
|
161
|
+
row.a('.icon-only', a => {
|
|
162
|
+
a.i('.glyp-settings')
|
|
163
|
+
}).data({tooltip: "Dive Settings"})
|
|
164
|
+
.emitClick(this.editDiveKey, {id: dive.id})
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
// readonly mode
|
|
168
|
+
row.a(a => {
|
|
169
|
+
if (dive.visibility == 'private') {
|
|
170
|
+
a.i('.glyp-privacy')
|
|
171
|
+
.data({tooltip: "Private Dive"})
|
|
172
|
+
} else {
|
|
173
|
+
a.i('.glyp-data_dive')
|
|
174
|
+
.data({tooltip: "Public Dive"})
|
|
175
|
+
}
|
|
176
|
+
a.span().text(dive.name)
|
|
177
|
+
})
|
|
178
|
+
.data({tooltip: "Run Dive"})
|
|
179
|
+
.emitClick(this.runDiveKey, {id: dive.id})
|
|
180
|
+
}
|
|
163
181
|
})
|
|
164
182
|
}
|
|
165
183
|
|
|
166
184
|
}
|
|
167
185
|
|
|
186
|
+
|
|
187
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
188
|
+
// Page
|
|
189
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
190
|
+
|
|
191
|
+
export class DiveListPage extends PagePart<{}> {
|
|
192
|
+
|
|
193
|
+
listPart!: DiveListPart
|
|
194
|
+
newGroupKey = Messages.untypedKey()
|
|
195
|
+
|
|
196
|
+
async init() {
|
|
197
|
+
this.setTitle("Data Dive")
|
|
198
|
+
this.setIcon('glyp-data_dives')
|
|
199
|
+
this.mainContentWidth = 'wide'
|
|
200
|
+
|
|
201
|
+
this.listPart = this.makePart(DiveListPart, {mode: 'editor'})
|
|
202
|
+
|
|
203
|
+
this.addAction({
|
|
204
|
+
title: "New Group",
|
|
205
|
+
icon: 'glyp-plus_outline',
|
|
206
|
+
click: {key: this.newGroupKey}
|
|
207
|
+
}, 'tertiary')
|
|
208
|
+
|
|
209
|
+
// we're handling this here instead of in the list part because, as of 9/15/23,
|
|
210
|
+
// attach: 'passive' doesn't seem to work for click handlers,
|
|
211
|
+
// so this handler never got called when it was inside the list part
|
|
212
|
+
this.onClick(this.newGroupKey, _ => {
|
|
213
|
+
log.info("Showing new dive group model")
|
|
214
|
+
const newGroup = {name: '', group_types: []}
|
|
215
|
+
this.app.showModal(GroupEditorModal, {
|
|
216
|
+
session: this.listPart.session,
|
|
217
|
+
group: newGroup,
|
|
218
|
+
callback: _ => this.listPart.reload()
|
|
219
|
+
})
|
|
220
|
+
})
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
renderContent(parent: PartTag): void {
|
|
224
|
+
parent.part(this.listPart)
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
|
|
228
|
+
}
|
|
229
|
+
|
|
@@ -120,9 +120,18 @@ class PreviewPart extends ContentPart<SubEditorState> {
|
|
|
120
120
|
|
|
121
121
|
renderContent(parent: PartTag) {
|
|
122
122
|
if (this.result) {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
123
|
+
if (this.result.columns?.length) {
|
|
124
|
+
parent.div('.table-container', col => {
|
|
125
|
+
Queries.renderPreview(col, this.result!)
|
|
126
|
+
})
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
// empty query
|
|
130
|
+
parent.div('.dd-hint-container', hintContainer => {
|
|
131
|
+
hintContainer.div('.dd-hint.centered.glyp-columns')
|
|
132
|
+
.text("Select at least one column")
|
|
133
|
+
})
|
|
134
|
+
}
|
|
126
135
|
}
|
|
127
136
|
else {
|
|
128
137
|
parent.a('.tt-button.stretch', a => {
|
package/package.json
CHANGED
package/terrier/gen/hub-icons.ts
CHANGED
|
@@ -117,6 +117,14 @@ import EditRaw from '../images/icons/edit.svg?raw'
|
|
|
117
117
|
// @ts-ignore
|
|
118
118
|
import EditSrc from '../images/icons/edit.svg'
|
|
119
119
|
// @ts-ignore
|
|
120
|
+
import ExistingChildRaw from '../images/icons/existing_child.svg?raw'
|
|
121
|
+
// @ts-ignore
|
|
122
|
+
import ExistingChildSrc from '../images/icons/existing_child.svg'
|
|
123
|
+
// @ts-ignore
|
|
124
|
+
import ExistingParentRaw from '../images/icons/existing_parent.svg?raw'
|
|
125
|
+
// @ts-ignore
|
|
126
|
+
import ExistingParentSrc from '../images/icons/existing_parent.svg'
|
|
127
|
+
// @ts-ignore
|
|
120
128
|
import FeatureRaw from '../images/icons/feature.svg?raw'
|
|
121
129
|
// @ts-ignore
|
|
122
130
|
import FeatureSrc from '../images/icons/feature.svg'
|
|
@@ -209,6 +217,14 @@ import MinusRaw from '../images/icons/minus.svg?raw'
|
|
|
209
217
|
// @ts-ignore
|
|
210
218
|
import MinusSrc from '../images/icons/minus.svg'
|
|
211
219
|
// @ts-ignore
|
|
220
|
+
import NewChildRaw from '../images/icons/new_child.svg?raw'
|
|
221
|
+
// @ts-ignore
|
|
222
|
+
import NewChildSrc from '../images/icons/new_child.svg'
|
|
223
|
+
// @ts-ignore
|
|
224
|
+
import NewParentRaw from '../images/icons/new_parent.svg?raw'
|
|
225
|
+
// @ts-ignore
|
|
226
|
+
import NewParentSrc from '../images/icons/new_parent.svg'
|
|
227
|
+
// @ts-ignore
|
|
212
228
|
import NightRaw from '../images/icons/night.svg?raw'
|
|
213
229
|
// @ts-ignore
|
|
214
230
|
import NightSrc from '../images/icons/night.svg'
|
|
@@ -470,6 +486,14 @@ export const IconDefs: Record<HubIconName,{ raw: string, src: string }> = {
|
|
|
470
486
|
raw: EditRaw,
|
|
471
487
|
src: EditSrc,
|
|
472
488
|
},
|
|
489
|
+
"hub-existing_child": {
|
|
490
|
+
raw: ExistingChildRaw,
|
|
491
|
+
src: ExistingChildSrc,
|
|
492
|
+
},
|
|
493
|
+
"hub-existing_parent": {
|
|
494
|
+
raw: ExistingParentRaw,
|
|
495
|
+
src: ExistingParentSrc,
|
|
496
|
+
},
|
|
473
497
|
"hub-feature": {
|
|
474
498
|
raw: FeatureRaw,
|
|
475
499
|
src: FeatureSrc,
|
|
@@ -562,6 +586,14 @@ export const IconDefs: Record<HubIconName,{ raw: string, src: string }> = {
|
|
|
562
586
|
raw: MinusRaw,
|
|
563
587
|
src: MinusSrc,
|
|
564
588
|
},
|
|
589
|
+
"hub-new_child": {
|
|
590
|
+
raw: NewChildRaw,
|
|
591
|
+
src: NewChildSrc,
|
|
592
|
+
},
|
|
593
|
+
"hub-new_parent": {
|
|
594
|
+
raw: NewParentRaw,
|
|
595
|
+
src: NewParentSrc,
|
|
596
|
+
},
|
|
565
597
|
"hub-night": {
|
|
566
598
|
raw: NightRaw,
|
|
567
599
|
src: NightSrc,
|
|
@@ -713,7 +745,7 @@ export const IconDefs: Record<HubIconName,{ raw: string, src: string }> = {
|
|
|
713
745
|
}
|
|
714
746
|
|
|
715
747
|
const Names = [
|
|
716
|
-
'hub-active', 'hub-admin', 'hub-archive', 'hub-arrow_down', 'hub-arrow_left', 'hub-arrow_right', 'hub-arrow_up', 'hub-assign', 'hub-attachment', 'hub-back', 'hub-badge', 'hub-board', 'hub-branch', 'hub-bug', 'hub-calculator', 'hub-checkmark', 'hub-close', 'hub-clypboard', 'hub-comment', 'hub-complete', 'hub-dashboard', 'hub-data_pull', 'hub-data_update', 'hub-database', 'hub-day', 'hub-delete', 'hub-documentation', 'hub-edit', 'hub-feature', 'hub-flex', 'hub-forward', 'hub-github', 'hub-history', 'hub-home', 'hub-image', 'hub-inbox', 'hub-info', 'hub-internal', 'hub-issue', 'hub-lane', 'hub-lane_asap', 'hub-lane_days', 'hub-lane_hours', 'hub-lane_weeks', 'hub-lanes_board', 'hub-level_complete', 'hub-level_highway', 'hub-level_on_ramp', 'hub-level_parking', 'hub-metrics', 'hub-minus', 'hub-night', 'hub-origin', 'hub-pending', 'hub-plus', 'hub-post', 'hub-posts', 'hub-pr_closed', 'hub-pr_merged', 'hub-pr_open', 'hub-prioritized', 'hub-project', 'hub-question', 'hub-reaction', 'hub-read_mail', 'hub-recent', 'hub-refresh', 'hub-related_posts', 'hub-request', 'hub-settings', 'hub-status', 'hub-step_deploy', 'hub-step_develop', 'hub-step_investigate', 'hub-step_review', 'hub-step_test', 'hub-steps', 'hub-steps_board', 'hub-subscribe', 'hub-support', 'hub-terrier', 'hub-thumbs_up', 'hub-type', 'hub-unprioritized', 'hub-upload', 'hub-user', 'hub-users', 'hub-week'
|
|
748
|
+
'hub-active', 'hub-admin', 'hub-archive', 'hub-arrow_down', 'hub-arrow_left', 'hub-arrow_right', 'hub-arrow_up', 'hub-assign', 'hub-attachment', 'hub-back', 'hub-badge', 'hub-board', 'hub-branch', 'hub-bug', 'hub-calculator', 'hub-checkmark', 'hub-close', 'hub-clypboard', 'hub-comment', 'hub-complete', 'hub-dashboard', 'hub-data_pull', 'hub-data_update', 'hub-database', 'hub-day', 'hub-delete', 'hub-documentation', 'hub-edit', 'hub-existing_child', 'hub-existing_parent', 'hub-feature', 'hub-flex', 'hub-forward', 'hub-github', 'hub-history', 'hub-home', 'hub-image', 'hub-inbox', 'hub-info', 'hub-internal', 'hub-issue', 'hub-lane', 'hub-lane_asap', 'hub-lane_days', 'hub-lane_hours', 'hub-lane_weeks', 'hub-lanes_board', 'hub-level_complete', 'hub-level_highway', 'hub-level_on_ramp', 'hub-level_parking', 'hub-metrics', 'hub-minus', 'hub-new_child', 'hub-new_parent', 'hub-night', 'hub-origin', 'hub-pending', 'hub-plus', 'hub-post', 'hub-posts', 'hub-pr_closed', 'hub-pr_merged', 'hub-pr_open', 'hub-prioritized', 'hub-project', 'hub-question', 'hub-reaction', 'hub-read_mail', 'hub-recent', 'hub-refresh', 'hub-related_posts', 'hub-request', 'hub-settings', 'hub-status', 'hub-step_deploy', 'hub-step_develop', 'hub-step_investigate', 'hub-step_review', 'hub-step_test', 'hub-steps', 'hub-steps_board', 'hub-subscribe', 'hub-support', 'hub-terrier', 'hub-thumbs_up', 'hub-type', 'hub-unprioritized', 'hub-upload', 'hub-user', 'hub-users', 'hub-week'
|
|
717
749
|
] as const
|
|
718
750
|
|
|
719
751
|
export type HubIconName = typeof Names[number]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"><g fill="none" fill-rule="evenodd"><circle cx="8" cy="24" r="3" fill="currentColor" fill-opacity="0.33" stroke="currentColor" stroke-linejoin="round" stroke-width="2"/><circle cx="16" cy="8" r="3" fill="currentColor" fill-opacity="0.33" stroke="currentColor" stroke-linejoin="round" stroke-width="2"/><path stroke="currentColor" stroke-linejoin="round" stroke-width="2" d="M8 21v-3a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v5"/><path fill="currentColor" d="M15 11h2v5h-2zM19.415 23.65l3.826 4.464a1 1 0 0 0 1.518 0l3.826-4.463a1 1 0 0 0-.76-1.651h-7.65a1 1 0 0 0-.76 1.65Z"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"><g fill="none" fill-rule="evenodd"><circle cx="8" cy="24" r="3" fill="currentColor" fill-opacity="0.33" stroke="currentColor" stroke-linejoin="round" stroke-width="2"/><circle cx="24" cy="24" r="3" fill="currentColor" fill-opacity="0.33" stroke="currentColor" stroke-linejoin="round" stroke-width="2"/><path stroke="currentColor" stroke-linejoin="round" stroke-width="2" d="M8 21v-3a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v3"/><path fill="currentColor" d="M15 9h2v7h-2z"/><path fill="currentColor" d="m11.415 8.35 3.826-4.464a1 1 0 0 1 1.518 0l3.826 4.463a1 1 0 0 1-.76 1.651h-7.65a1 1 0 0 1-.76-1.65Z"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"><g fill="none" fill-rule="evenodd"><circle cx="16" cy="8" r="3" fill="currentColor" fill-opacity="0.33" stroke="currentColor" stroke-linejoin="round" stroke-width="2"/><circle cx="8" cy="24" r="3" fill="currentColor" fill-opacity="0.33" stroke="currentColor" stroke-linejoin="round" stroke-width="2"/><circle cx="24" cy="24" r="5" fill="currentColor" fill-opacity="0.33" stroke="currentColor" stroke-linejoin="round" stroke-width="2"/><path stroke="currentColor" stroke-linejoin="round" stroke-width="2" d="M8 21v-3a2 2 0 0 1 2-2h12.023a2 2 0 0 1 2 1.977l.011.977"/><path fill="currentColor" d="M15 11h2v5h-2zM24 21a1 1 0 0 1 1 1v.999L26 23a1 1 0 0 1 0 2h-1v1a1 1 0 0 1-2 0v-1h-1a1 1 0 0 1 0-2h1v-1a1 1 0 0 1 1-1Z"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"><g fill="none" fill-rule="evenodd"><circle cx="8" cy="24" r="3" fill="currentColor" fill-opacity="0.33" stroke="currentColor" stroke-linejoin="round" stroke-width="2"/><circle cx="24" cy="24" r="3" fill="currentColor" fill-opacity="0.33" stroke="currentColor" stroke-linejoin="round" stroke-width="2"/><path stroke="currentColor" stroke-linejoin="round" stroke-width="2" d="M8 21v-3a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v3"/><path fill="currentColor" d="M15 13h2v3h-2z"/><circle cx="16" cy="8" r="5" fill="currentColor" fill-opacity="0.33" stroke="currentColor" stroke-linejoin="round" stroke-width="2"/><path fill="currentColor" d="M16 5a1 1 0 0 1 1 1v.999L18 7a1 1 0 0 1 0 2h-1v1a1 1 0 0 1-2 0V9h-1a1 1 0 0 1 0-2h1V6a1 1 0 0 1 1-1Z"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"><g fill="none" fill-rule="evenodd"><circle cx="8" cy="24" r="3" fill="#000" fill-opacity=".25" stroke="#000" stroke-linejoin="round" stroke-width="2"/><circle cx="16" cy="8" r="3" fill="#000" fill-opacity=".25" stroke="#000" stroke-linejoin="round" stroke-width="2"/><path stroke="#000" stroke-linejoin="round" stroke-width="2" d="M8 21v-3a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v5"/><path fill="#000" d="M15 11h2v5h-2zM19.415 23.65l3.826 4.464a1 1 0 0 0 1.518 0l3.826-4.463a1 1 0 0 0-.76-1.651h-7.65a1 1 0 0 0-.76 1.65Z"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"><g fill="none" fill-rule="evenodd"><circle cx="8" cy="24" r="3" fill="#000" fill-opacity=".25" stroke="#000" stroke-linejoin="round" stroke-width="2"/><circle cx="24" cy="24" r="3" fill="#000" fill-opacity=".25" stroke="#000" stroke-linejoin="round" stroke-width="2"/><path stroke="#000" stroke-linejoin="round" stroke-width="2" d="M8 21v-3a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v3"/><path fill="#000" d="M15 9h2v7h-2z"/><path fill="#000" d="m11.415 8.35 3.826-4.464a1 1 0 0 1 1.518 0l3.826 4.463a1 1 0 0 1-.76 1.651h-7.65a1 1 0 0 1-.76-1.65Z"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"><g fill="none" fill-rule="evenodd"><circle cx="16" cy="8" r="3" fill="#000" fill-opacity=".25" stroke="#000" stroke-linejoin="round" stroke-width="2"/><circle cx="8" cy="24" r="3" fill="#000" fill-opacity=".25" stroke="#000" stroke-linejoin="round" stroke-width="2"/><circle cx="24" cy="24" r="5" fill="#000" fill-opacity=".25" stroke="#000" stroke-linejoin="round" stroke-width="2"/><path stroke="#000" stroke-linejoin="round" stroke-width="2" d="M8 21v-3a2 2 0 0 1 2-2h12.023a2 2 0 0 1 2 1.977l.011.977"/><path fill="#000" d="M15 11h2v5h-2zM24 21a1 1 0 0 1 1 1v.999L26 23a1 1 0 0 1 0 2h-1v1a1 1 0 0 1-2 0v-1h-1a1 1 0 0 1 0-2h1v-1a1 1 0 0 1 1-1Z"/></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"><g fill="none" fill-rule="evenodd"><circle cx="8" cy="24" r="3" fill="#000" fill-opacity=".25" stroke="#000" stroke-linejoin="round" stroke-width="2"/><circle cx="24" cy="24" r="3" fill="#000" fill-opacity=".25" stroke="#000" stroke-linejoin="round" stroke-width="2"/><path stroke="#000" stroke-linejoin="round" stroke-width="2" d="M8 21v-3a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v3"/><path fill="#000" d="M15 13h2v3h-2z"/><circle cx="16" cy="8" r="5" fill="#000" fill-opacity=".25" stroke="#000" stroke-linejoin="round" stroke-width="2"/><path fill="#000" d="M16 5a1 1 0 0 1 1 1v.999L18 7a1 1 0 0 1 0 2h-1v1a1 1 0 0 1-2 0V9h-1a1 1 0 0 1 0-2h1V6a1 1 0 0 1 1-1Z"/></g></svg>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
3
|
+
<title>icon-existing_child</title>
|
|
4
|
+
<g id="icon-existing_child" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
|
5
|
+
<circle id="Oval-Copy" stroke="#000000" stroke-width="2" fill-opacity="0.25" fill="#000000" stroke-linejoin="round" cx="8" cy="24" r="3"></circle>
|
|
6
|
+
<circle id="Oval-Copy-2" stroke="#000000" stroke-width="2" fill-opacity="0.25" fill="#000000" stroke-linejoin="round" cx="16" cy="8" r="3"></circle>
|
|
7
|
+
<path d="M8,21 L8,18 C8,16.8954305 8.8954305,16 10,16 L22,16 C23.1045695,16 24,16.8954305 24,18 L24,23 L24,23" id="Path-100" stroke="#000000" stroke-width="2" stroke-linejoin="round"></path>
|
|
8
|
+
<rect id="Rectangle" fill="#000000" x="15" y="11" width="2" height="5"></rect>
|
|
9
|
+
<path d="M22.1507914,20.914964 L26.6142006,24.7407434 C27.0335265,25.1001655 27.082088,25.7314655 26.7226659,26.1507914 C26.6893412,26.1896702 26.6530794,26.2259319 26.6142006,26.2592566 L22.1507914,30.085036 C21.7314655,30.4444581 21.1001655,30.3958966 20.7407434,29.9765707 C20.5853922,29.7953276 20.5,29.5644906 20.5,29.3257794 L20.5,21.6742206 C20.5,21.1219359 20.9477153,20.6742206 21.5,20.6742206 C21.7387113,20.6742206 21.9695483,20.7596128 22.1507914,20.914964 Z" id="Path-101" fill="#000000" transform="translate(24, 25.5) scale(1, -1) rotate(-90) translate(-24, -25.5)"></path>
|
|
10
|
+
</g>
|
|
11
|
+
</svg>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
3
|
+
<title>icon-existing_parent</title>
|
|
4
|
+
<g id="icon-existing_parent" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
|
5
|
+
<circle id="Oval-Copy" stroke="#000000" stroke-width="2" fill-opacity="0.25" fill="#000000" stroke-linejoin="round" cx="8" cy="24" r="3"></circle>
|
|
6
|
+
<circle id="Oval-Copy-2" stroke="#000000" stroke-width="2" fill-opacity="0.25" fill="#000000" stroke-linejoin="round" cx="24" cy="24" r="3"></circle>
|
|
7
|
+
<path d="M8,21 L8,18 C8,16.8954305 8.8954305,16 10,16 L22,16 C23.1045695,16 24,16.8954305 24,18 L24,21 L24,21" id="Path-100" stroke="#000000" stroke-width="2" stroke-linejoin="round"></path>
|
|
8
|
+
<rect id="Rectangle" fill="#000000" x="15" y="9" width="2" height="7"></rect>
|
|
9
|
+
<path d="M14.1507914,1.91496403 L18.6142006,5.7407434 C19.0335265,6.10016555 19.082088,6.73146553 18.7226659,7.15079137 C18.6893412,7.18967018 18.6530794,7.22593191 18.6142006,7.2592566 L14.1507914,11.085036 C13.7314655,11.4444581 13.1001655,11.3958966 12.7407434,10.9765707 C12.5853922,10.7953276 12.5,10.5644906 12.5,10.3257794 L12.5,2.67422064 C12.5,2.12193589 12.9477153,1.67422064 13.5,1.67422064 C13.7387113,1.67422064 13.9695483,1.7596128 14.1507914,1.91496403 Z" id="Path-101" fill="#000000" transform="translate(16, 6.5) rotate(-90) translate(-16, -6.5)"></path>
|
|
10
|
+
</g>
|
|
11
|
+
</svg>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
3
|
+
<title>icon-new-child</title>
|
|
4
|
+
<g id="icon-new-child" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
|
5
|
+
<circle id="Oval" stroke="#000000" stroke-width="2" fill-opacity="0.25" fill="#000000" stroke-linejoin="round" cx="16" cy="8" r="3"></circle>
|
|
6
|
+
<circle id="Oval-Copy" stroke="#000000" stroke-width="2" fill-opacity="0.25" fill="#000000" stroke-linejoin="round" cx="8" cy="24" r="3"></circle>
|
|
7
|
+
<circle id="Oval-Copy-2" stroke="#000000" stroke-width="2" fill-opacity="0.25" fill="#000000" stroke-linejoin="round" cx="24" cy="24" r="5"></circle>
|
|
8
|
+
<path d="M8,21 L8,18 C8,16.8954305 8.8954305,16 10,16 L22.0231969,16 C23.1186657,16 24.0102814,16.8812743 24.0230608,17.9766686 L24.0344614,18.9538745 L24.0344614,18.9538745" id="Path-100" stroke="#000000" stroke-width="2" stroke-linejoin="round"></path>
|
|
9
|
+
<rect id="Rectangle" fill="#000000" x="15" y="11" width="2" height="5"></rect>
|
|
10
|
+
<path d="M24,21 C24.5522847,21 25,21.4477153 25,22 L25,22.999 L26,23 C26.5522847,23 27,23.4477153 27,24 C27,24.5522847 26.5522847,25 26,25 L25,25 L25,26 C25,26.5522847 24.5522847,27 24,27 C23.4477153,27 23,26.5522847 23,26 L23,25 L22,25 C21.4477153,25 21,24.5522847 21,24 C21,23.4477153 21.4477153,23 22,23 L23,23 L23,22 C23,21.4477153 23.4477153,21 24,21 Z" id="Combined-Shape" fill="#000000"></path>
|
|
11
|
+
</g>
|
|
12
|
+
</svg>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<svg width="32px" height="32px" viewBox="0 0 32 32" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
|
3
|
+
<title>icon-new_parent</title>
|
|
4
|
+
<g id="icon-new_parent" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
|
5
|
+
<circle id="Oval-Copy" stroke="#000000" stroke-width="2" fill-opacity="0.25" fill="#000000" stroke-linejoin="round" cx="8" cy="24" r="3"></circle>
|
|
6
|
+
<circle id="Oval-Copy-2" stroke="#000000" stroke-width="2" fill-opacity="0.25" fill="#000000" stroke-linejoin="round" cx="24" cy="24" r="3"></circle>
|
|
7
|
+
<path d="M8,21 L8,18 C8,16.8954305 8.8954305,16 10,16 L22,16 C23.1045695,16 24,16.8954305 24,18 L24,21 L24,21" id="Path-100" stroke="#000000" stroke-width="2" stroke-linejoin="round"></path>
|
|
8
|
+
<rect id="Rectangle" fill="#000000" x="15" y="13" width="2" height="3"></rect>
|
|
9
|
+
<circle id="Oval-Copy-2" stroke="#000000" stroke-width="2" fill-opacity="0.25" fill="#000000" stroke-linejoin="round" cx="16" cy="8" r="5"></circle>
|
|
10
|
+
<path d="M16,5 C16.5522847,5 17,5.44771525 17,6 L17,6.999 L18,7 C18.5522847,7 19,7.44771525 19,8 C19,8.55228475 18.5522847,9 18,9 L17,9 L17,10 C17,10.5522847 16.5522847,11 16,11 C15.4477153,11 15,10.5522847 15,10 L15,9 L14,9 C13.4477153,9 13,8.55228475 13,8 C13,7.44771525 13.4477153,7 14,7 L15,7 L15,6 C15,5.44771525 15.4477153,5 16,5 Z" id="Combined-Shape" fill="#000000"></path>
|
|
11
|
+
</g>
|
|
12
|
+
</svg>
|