cmssy-cli 0.19.6 → 0.20.1

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.
@@ -4,6 +4,18 @@ let blocks = [];
4
4
  let previewData = {};
5
5
  let eventSource = null;
6
6
 
7
+ // Filters state
8
+ let filters = {
9
+ search: '',
10
+ type: 'all',
11
+ category: '',
12
+ tags: []
13
+ };
14
+
15
+ // Available categories and tags (populated from blocks)
16
+ let availableCategories = [];
17
+ let availableTags = [];
18
+
7
19
  // Initialize app
8
20
  async function init() {
9
21
  await loadBlocks();
@@ -15,6 +27,7 @@ async function loadBlocks() {
15
27
  try {
16
28
  const response = await fetch('/api/blocks');
17
29
  blocks = await response.json();
30
+ populateFilters();
18
31
  renderBlocksList();
19
32
  } catch (error) {
20
33
  console.error('Failed to load blocks:', error);
@@ -26,6 +39,170 @@ async function loadBlocks() {
26
39
  }
27
40
  }
28
41
 
42
+ // Populate filter options from loaded blocks
43
+ function populateFilters() {
44
+ // Extract unique categories
45
+ const categoriesSet = new Set();
46
+ const tagsSet = new Set();
47
+
48
+ blocks.forEach(block => {
49
+ if (block.category) {
50
+ categoriesSet.add(block.category);
51
+ }
52
+ if (block.tags && Array.isArray(block.tags)) {
53
+ block.tags.forEach(tag => tagsSet.add(tag));
54
+ }
55
+ });
56
+
57
+ availableCategories = Array.from(categoriesSet).sort();
58
+ availableTags = Array.from(tagsSet).sort();
59
+
60
+ // Populate category dropdown
61
+ const categorySelect = document.getElementById('category-filter');
62
+ if (categorySelect) {
63
+ categorySelect.innerHTML = '<option value="">All Categories</option>';
64
+ availableCategories.forEach(cat => {
65
+ const option = document.createElement('option');
66
+ option.value = cat;
67
+ option.textContent = cat;
68
+ categorySelect.appendChild(option);
69
+ });
70
+ }
71
+
72
+ // Populate tags filter
73
+ const tagsContainer = document.getElementById('tags-filter');
74
+ if (tagsContainer) {
75
+ if (availableTags.length === 0) {
76
+ tagsContainer.style.display = 'none';
77
+ } else {
78
+ tagsContainer.style.display = 'flex';
79
+ tagsContainer.innerHTML = availableTags.map(tag => `
80
+ <button
81
+ type="button"
82
+ class="tag-chip ${filters.tags.includes(tag) ? 'active' : ''}"
83
+ data-tag="${escapeHtml(tag)}"
84
+ onclick="toggleTagFilter('${escapeHtml(tag)}')"
85
+ >${escapeHtml(tag)}</button>
86
+ `).join('');
87
+
88
+ // Add clear button if any filters active
89
+ if (hasActiveFilters()) {
90
+ tagsContainer.innerHTML += `
91
+ <button type="button" class="clear-filters" onclick="clearAllFilters()">
92
+ Clear all
93
+ </button>
94
+ `;
95
+ }
96
+ }
97
+ }
98
+ }
99
+
100
+ // Check if any filters are active
101
+ function hasActiveFilters() {
102
+ return filters.search !== '' ||
103
+ filters.type !== 'all' ||
104
+ filters.category !== '' ||
105
+ filters.tags.length > 0;
106
+ }
107
+
108
+ // Filter handlers
109
+ window.handleSearchInput = function(event) {
110
+ filters.search = event.target.value.toLowerCase();
111
+ renderBlocksList();
112
+ };
113
+
114
+ window.setTypeFilter = function(type) {
115
+ filters.type = type;
116
+
117
+ // Update tab UI
118
+ document.querySelectorAll('.filter-tab').forEach(tab => {
119
+ tab.classList.toggle('active', tab.dataset.type === type);
120
+ });
121
+
122
+ renderBlocksList();
123
+ };
124
+
125
+ window.setCategoryFilter = function(category) {
126
+ filters.category = category;
127
+ renderBlocksList();
128
+ };
129
+
130
+ window.toggleTagFilter = function(tag) {
131
+ const index = filters.tags.indexOf(tag);
132
+ if (index === -1) {
133
+ filters.tags.push(tag);
134
+ } else {
135
+ filters.tags.splice(index, 1);
136
+ }
137
+
138
+ // Update tag chip UI
139
+ document.querySelectorAll('.tag-chip').forEach(chip => {
140
+ if (chip.dataset.tag === tag) {
141
+ chip.classList.toggle('active');
142
+ }
143
+ });
144
+
145
+ // Re-render to update clear button
146
+ populateFilters();
147
+ renderBlocksList();
148
+ };
149
+
150
+ window.clearAllFilters = function() {
151
+ filters = {
152
+ search: '',
153
+ type: 'all',
154
+ category: '',
155
+ tags: []
156
+ };
157
+
158
+ // Reset UI
159
+ document.getElementById('search-input').value = '';
160
+ document.getElementById('category-filter').value = '';
161
+ document.querySelectorAll('.filter-tab').forEach(tab => {
162
+ tab.classList.toggle('active', tab.dataset.type === 'all');
163
+ });
164
+
165
+ populateFilters();
166
+ renderBlocksList();
167
+ };
168
+
169
+ // Get filtered blocks based on current filters
170
+ function getFilteredBlocks() {
171
+ return blocks.filter(block => {
172
+ // Search filter
173
+ if (filters.search) {
174
+ const searchLower = filters.search.toLowerCase();
175
+ const matchesSearch =
176
+ (block.displayName || block.name).toLowerCase().includes(searchLower) ||
177
+ (block.description || '').toLowerCase().includes(searchLower) ||
178
+ (block.name || '').toLowerCase().includes(searchLower);
179
+ if (!matchesSearch) return false;
180
+ }
181
+
182
+ // Type filter
183
+ if (filters.type !== 'all') {
184
+ const blockType = block.type || 'block';
185
+ if (blockType !== filters.type) {
186
+ return false;
187
+ }
188
+ }
189
+
190
+ // Category filter
191
+ if (filters.category && block.category !== filters.category) {
192
+ return false;
193
+ }
194
+
195
+ // Tags filter (match ANY selected tag)
196
+ if (filters.tags.length > 0) {
197
+ const blockTags = block.tags || [];
198
+ const hasAnyTag = filters.tags.some(tag => blockTags.includes(tag));
199
+ if (!hasAnyTag) return false;
200
+ }
201
+
202
+ return true;
203
+ });
204
+ }
205
+
29
206
  // Render blocks list
30
207
  function renderBlocksList() {
31
208
  const listEl = document.getElementById('blocks-list');
@@ -37,24 +214,85 @@ function renderBlocksList() {
37
214
  return;
38
215
  }
39
216
 
40
- countEl.textContent = `${blocks.length} ${blocks.length === 1 ? 'block' : 'blocks'}`;
217
+ // Get filtered blocks
218
+ const filteredBlocks = getFilteredBlocks();
219
+
220
+ // Update count with filter info
221
+ if (hasActiveFilters()) {
222
+ countEl.textContent = `${filteredBlocks.length} of ${blocks.length} items`;
223
+ } else {
224
+ countEl.textContent = `${blocks.length} ${blocks.length === 1 ? 'item' : 'items'}`;
225
+ }
226
+
227
+ // Handle empty filtered results
228
+ if (filteredBlocks.length === 0) {
229
+ listEl.innerHTML = `
230
+ <div class="no-results">
231
+ <div class="no-results-icon">🔍</div>
232
+ <div>No items match your filters</div>
233
+ <button
234
+ type="button"
235
+ style="margin-top: 12px; padding: 6px 16px; background: #667eea; color: white; border: none; border-radius: 6px; cursor: pointer; font-size: 13px;"
236
+ onclick="clearAllFilters()"
237
+ >Clear filters</button>
238
+ </div>
239
+ `;
240
+ return;
241
+ }
242
+
243
+ // Group blocks by category
244
+ const grouped = {};
245
+ filteredBlocks.forEach(block => {
246
+ const cat = block.category || 'Uncategorized';
247
+ if (!grouped[cat]) grouped[cat] = [];
248
+ grouped[cat].push(block);
249
+ });
41
250
 
42
- listEl.innerHTML = blocks.map(block => `
251
+ // Sort categories alphabetically (but put Uncategorized last)
252
+ const sortedCategories = Object.keys(grouped).sort((a, b) => {
253
+ if (a === 'Uncategorized') return 1;
254
+ if (b === 'Uncategorized') return -1;
255
+ return a.localeCompare(b);
256
+ });
257
+
258
+ // Render grouped blocks
259
+ listEl.innerHTML = sortedCategories.map(category => `
260
+ <div class="block-category">
261
+ <div class="category-header">
262
+ ${escapeHtml(category)}
263
+ <span class="category-count">${grouped[category].length}</span>
264
+ </div>
265
+ ${grouped[category].map(block => renderBlockItem(block)).join('')}
266
+ </div>
267
+ `).join('');
268
+ }
269
+
270
+ // Render a single block item
271
+ function renderBlockItem(block) {
272
+ const isTemplate = block.type === 'template';
273
+ const typeBadge = isTemplate
274
+ ? '<span class="type-badge template">Template</span>'
275
+ : '';
276
+
277
+ return `
43
278
  <div
44
279
  class="block-item ${currentBlock?.name === block.name ? 'active' : ''}"
45
- data-block="${block.name}"
46
- onclick="selectBlock('${block.name}')"
280
+ data-block="${escapeHtml(block.name)}"
281
+ onclick="selectBlock('${escapeHtml(block.name)}')"
47
282
  >
48
283
  <div class="block-item-header">
49
- <div class="block-item-name">${block.displayName || block.name}</div>
284
+ <div class="block-item-name">
285
+ ${escapeHtml(block.displayName || block.name)}
286
+ ${typeBadge}
287
+ </div>
50
288
  <span class="version-badge">v${block.version || '1.0.0'}</span>
51
289
  </div>
52
290
  <div class="block-item-footer">
53
- <span class="block-item-type">${block.type}</span>
291
+ <span class="block-item-type">${escapeHtml(block.category || 'Block')}</span>
54
292
  <span class="status-badge status-local">Local</span>
55
293
  </div>
56
294
  </div>
57
- `).join('');
295
+ `;
58
296
  }
59
297
 
60
298
  // Select a block
@@ -626,7 +864,8 @@ function populateWorkspaceSelect(workspaces) {
626
864
  workspaces.forEach(ws => {
627
865
  const option = document.createElement('option');
628
866
  option.value = ws.id;
629
- option.textContent = `${ws.name} (${ws.myRole})`;
867
+ const roleName = ws.myRole?.name || 'member';
868
+ option.textContent = `${ws.name} (${roleName})`;
630
869
  select.appendChild(option);
631
870
  });
632
871
  }
@@ -206,8 +206,244 @@
206
206
  transform: rotate(180deg);
207
207
  }
208
208
 
209
+ /* Filters Section */
210
+ .blocks-filters {
211
+ padding: 12px;
212
+ border-bottom: 1px solid #e0e0e0;
213
+ background: #fafafa;
214
+ display: flex;
215
+ flex-direction: column;
216
+ gap: 12px;
217
+ flex-shrink: 0;
218
+ }
219
+
220
+ .container.left-collapsed .blocks-filters {
221
+ opacity: 0;
222
+ pointer-events: none;
223
+ height: 0;
224
+ padding: 0;
225
+ overflow: hidden;
226
+ }
227
+
228
+ .search-input {
229
+ width: 100%;
230
+ padding: 8px 12px;
231
+ border: 1px solid #ddd;
232
+ border-radius: 6px;
233
+ font-size: 13px;
234
+ background: white;
235
+ transition: all 0.2s;
236
+ }
237
+
238
+ .search-input:focus {
239
+ outline: none;
240
+ border-color: #667eea;
241
+ box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);
242
+ }
243
+
244
+ .search-input::placeholder {
245
+ color: #999;
246
+ }
247
+
248
+ .filter-tabs {
249
+ display: flex;
250
+ gap: 4px;
251
+ background: #e0e0e0;
252
+ padding: 3px;
253
+ border-radius: 8px;
254
+ }
255
+
256
+ .filter-tab {
257
+ flex: 1;
258
+ padding: 6px 12px;
259
+ border: none;
260
+ background: transparent;
261
+ cursor: pointer;
262
+ font-size: 12px;
263
+ font-weight: 500;
264
+ color: #666;
265
+ border-radius: 6px;
266
+ transition: all 0.2s;
267
+ }
268
+
269
+ .filter-tab:hover {
270
+ color: #333;
271
+ }
272
+
273
+ .filter-tab.active {
274
+ background: white;
275
+ color: #333;
276
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
277
+ }
278
+
279
+ .filter-row {
280
+ display: flex;
281
+ gap: 8px;
282
+ }
283
+
284
+ .filter-select {
285
+ flex: 1;
286
+ padding: 6px 10px;
287
+ border: 1px solid #ddd;
288
+ border-radius: 6px;
289
+ font-size: 12px;
290
+ background: white;
291
+ cursor: pointer;
292
+ color: #333;
293
+ }
294
+
295
+ .filter-select:focus {
296
+ outline: none;
297
+ border-color: #667eea;
298
+ }
299
+
300
+ /* Tags Multi-Select */
301
+ .tags-filter {
302
+ display: flex;
303
+ flex-wrap: wrap;
304
+ gap: 6px;
305
+ }
306
+
307
+ .tag-chip {
308
+ display: inline-flex;
309
+ align-items: center;
310
+ padding: 4px 10px;
311
+ border: 1px solid #ddd;
312
+ border-radius: 12px;
313
+ font-size: 11px;
314
+ cursor: pointer;
315
+ background: white;
316
+ color: #666;
317
+ transition: all 0.2s;
318
+ }
319
+
320
+ .tag-chip:hover {
321
+ border-color: #667eea;
322
+ color: #667eea;
323
+ }
324
+
325
+ .tag-chip.active {
326
+ background: #667eea;
327
+ border-color: #667eea;
328
+ color: white;
329
+ }
330
+
331
+ .clear-filters {
332
+ padding: 4px 10px;
333
+ border: 1px dashed #ddd;
334
+ border-radius: 12px;
335
+ font-size: 11px;
336
+ cursor: pointer;
337
+ background: transparent;
338
+ color: #999;
339
+ transition: all 0.2s;
340
+ }
341
+
342
+ .clear-filters:hover {
343
+ border-color: #e53935;
344
+ color: #e53935;
345
+ }
346
+
209
347
  .blocks-list {
210
348
  padding: 12px;
349
+ overflow-y: auto;
350
+ flex: 1;
351
+ }
352
+
353
+ /* Category Group */
354
+ .block-category {
355
+ margin-bottom: 16px;
356
+ }
357
+
358
+ .block-category:last-child {
359
+ margin-bottom: 0;
360
+ }
361
+
362
+ .category-header {
363
+ font-size: 11px;
364
+ font-weight: 600;
365
+ text-transform: uppercase;
366
+ letter-spacing: 0.5px;
367
+ color: #999;
368
+ padding: 8px 12px 6px;
369
+ margin-bottom: 4px;
370
+ display: flex;
371
+ align-items: center;
372
+ gap: 8px;
373
+ }
374
+
375
+ .category-count {
376
+ font-size: 10px;
377
+ font-weight: 500;
378
+ background: #e0e0e0;
379
+ padding: 2px 6px;
380
+ border-radius: 10px;
381
+ color: #666;
382
+ }
383
+
384
+ /* Template badge */
385
+ .type-badge {
386
+ font-size: 10px;
387
+ padding: 2px 6px;
388
+ border-radius: 4px;
389
+ font-weight: 500;
390
+ margin-left: 8px;
391
+ }
392
+
393
+ .type-badge.template {
394
+ background: #f3e8ff;
395
+ color: #7c3aed;
396
+ }
397
+
398
+ .type-badge.block {
399
+ background: #e8f5e9;
400
+ color: #2e7d32;
401
+ }
402
+
403
+ /* Active filters indicator */
404
+ .active-filters {
405
+ display: flex;
406
+ flex-wrap: wrap;
407
+ gap: 6px;
408
+ padding-top: 4px;
409
+ }
410
+
411
+ .active-filter-chip {
412
+ display: inline-flex;
413
+ align-items: center;
414
+ gap: 4px;
415
+ padding: 2px 8px;
416
+ background: #667eea;
417
+ color: white;
418
+ border-radius: 10px;
419
+ font-size: 11px;
420
+ }
421
+
422
+ .active-filter-chip button {
423
+ background: none;
424
+ border: none;
425
+ color: white;
426
+ cursor: pointer;
427
+ padding: 0;
428
+ font-size: 12px;
429
+ opacity: 0.8;
430
+ }
431
+
432
+ .active-filter-chip button:hover {
433
+ opacity: 1;
434
+ }
435
+
436
+ /* Empty state for filtered results */
437
+ .no-results {
438
+ text-align: center;
439
+ padding: 40px 20px;
440
+ color: #999;
441
+ }
442
+
443
+ .no-results-icon {
444
+ font-size: 32px;
445
+ margin-bottom: 12px;
446
+ opacity: 0.5;
211
447
  }
212
448
 
213
449
  .block-item {
@@ -907,6 +1143,34 @@
907
1143
  </div>
908
1144
  </button>
909
1145
  </div>
1146
+
1147
+ <!-- Filters Section -->
1148
+ <div class="blocks-filters" id="blocks-filters">
1149
+ <input
1150
+ type="search"
1151
+ class="search-input"
1152
+ id="search-input"
1153
+ placeholder="Search blocks..."
1154
+ oninput="handleSearchInput(event)"
1155
+ />
1156
+
1157
+ <div class="filter-tabs">
1158
+ <button class="filter-tab active" data-type="all" onclick="setTypeFilter('all')">All</button>
1159
+ <button class="filter-tab" data-type="block" onclick="setTypeFilter('block')">Blocks</button>
1160
+ <button class="filter-tab" data-type="template" onclick="setTypeFilter('template')">Templates</button>
1161
+ </div>
1162
+
1163
+ <div class="filter-row">
1164
+ <select class="filter-select" id="category-filter" onchange="setCategoryFilter(this.value)">
1165
+ <option value="">All Categories</option>
1166
+ </select>
1167
+ </div>
1168
+
1169
+ <div class="tags-filter" id="tags-filter">
1170
+ <!-- Tags will be populated dynamically -->
1171
+ </div>
1172
+ </div>
1173
+
910
1174
  <div class="blocks-list" id="blocks-list">
911
1175
  <div class="loading">
912
1176
  <div class="spinner"></div>
@@ -1 +1 @@
1
- {"version":3,"file":"field-schema.d.ts","sourceRoot":"","sources":["../../src/utils/field-schema.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAoGD,wBAAsB,aAAa,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAqCpE;AA8BD,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,mBAAmB,EAAE,GAChC,OAAO,CAET"}
1
+ {"version":3,"file":"field-schema.d.ts","sourceRoot":"","sources":["../../src/utils/field-schema.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,kBAAkB,EAAE,OAAO,CAAC;CAC7B;AAyHD,wBAAsB,aAAa,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAqCpE;AA8BD,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,mBAAmB,EAAE,GAChC,OAAO,CAET"}
@@ -97,6 +97,27 @@ const FALLBACK_FIELD_TYPES = [
97
97
  allowsDefaultValue: false,
98
98
  supportsValidation: true,
99
99
  },
100
+ {
101
+ type: "form",
102
+ label: "Form",
103
+ description: "Form picker",
104
+ allowsDefaultValue: true,
105
+ supportsValidation: false,
106
+ },
107
+ {
108
+ type: "emailTemplate",
109
+ label: "Email Template",
110
+ description: "Email template picker",
111
+ allowsDefaultValue: true,
112
+ supportsValidation: false,
113
+ },
114
+ {
115
+ type: "emailConfiguration",
116
+ label: "Email Configuration",
117
+ description: "Email configuration picker",
118
+ allowsDefaultValue: true,
119
+ supportsValidation: false,
120
+ },
100
121
  ];
101
122
  export async function getFieldTypes() {
102
123
  // Check cache first
@@ -1 +1 @@
1
- {"version":3,"file":"field-schema.js","sourceRoot":"","sources":["../../src/utils/field-schema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"field-schema.js","sourceRoot":"","sources":["../../src/utils/field-schema.ts"],"names":[],"mappings":"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"}
@@ -2,4 +2,5 @@ import { GraphQLClient } from "graphql-request";
2
2
  export declare function createClient(): GraphQLClient;
3
3
  export declare const PUBLISH_PACKAGE_MUTATION = "\n mutation PublishPackage($token: String!, $input: PublishPackageInput!) {\n publishPackage(token: $token, input: $input) {\n success\n message\n packageId\n status\n }\n }\n";
4
4
  export declare const IMPORT_BLOCK_MUTATION = "\n mutation ImportBlock($input: ImportBlockInput!) {\n importBlock(input: $input) {\n id\n blockType\n name\n description\n icon\n category\n layoutSlot\n schemaFields {\n key\n type\n label\n defaultValue\n placeholder\n required\n helperText\n options\n minValue\n maxValue\n group\n showWhen {\n field\n equals\n notEquals\n notEmpty\n isEmpty\n }\n validation {\n minLength\n maxLength\n min\n max\n pattern\n message\n }\n }\n defaultContent\n requires {\n auth\n language\n workspace\n modules\n permissions\n features\n }\n version\n createdAt\n }\n }\n";
5
+ export declare const IMPORT_TEMPLATE_MUTATION = "\n mutation ImportTemplate($input: ImportTemplateInput!) {\n importTemplate(input: $input) {\n success\n block {\n id\n blockType\n name\n version\n }\n pagesCreated\n pagesUpdated\n layoutSlotsCreated\n layoutSlotsUpdated\n message\n }\n }\n";
5
6
  //# sourceMappingURL=graphql.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"graphql.d.ts","sourceRoot":"","sources":["../../src/utils/graphql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,wBAAgB,YAAY,IAAI,aAAa,CAe5C;AAGD,eAAO,MAAM,wBAAwB,gNASpC,CAAC;AAEF,eAAO,MAAM,qBAAqB,y3BAmDjC,CAAC"}
1
+ {"version":3,"file":"graphql.d.ts","sourceRoot":"","sources":["../../src/utils/graphql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGhD,wBAAgB,YAAY,IAAI,aAAa,CAe5C;AAGD,eAAO,MAAM,wBAAwB,gNASpC,CAAC;AAEF,eAAO,MAAM,qBAAqB,y3BAmDjC,CAAC;AAEF,eAAO,MAAM,wBAAwB,mUAiBpC,CAAC"}
@@ -75,4 +75,22 @@ export const IMPORT_BLOCK_MUTATION = `
75
75
  }
76
76
  }
77
77
  `;
78
+ export const IMPORT_TEMPLATE_MUTATION = `
79
+ mutation ImportTemplate($input: ImportTemplateInput!) {
80
+ importTemplate(input: $input) {
81
+ success
82
+ block {
83
+ id
84
+ blockType
85
+ name
86
+ version
87
+ }
88
+ pagesCreated
89
+ pagesUpdated
90
+ layoutSlotsCreated
91
+ layoutSlotsUpdated
92
+ message
93
+ }
94
+ }
95
+ `;
78
96
  //# sourceMappingURL=graphql.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"graphql.js","sourceRoot":"","sources":["../../src/utils/graphql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,UAAU,YAAY;IAC1B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACb,sDAAsD,CACvD,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE;QACtC,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,MAAM,CAAC,QAAQ,EAAE;SAC3C;KACF,CAAC,CAAC;AACL,CAAC;AAED,oBAAoB;AACpB,MAAM,CAAC,MAAM,wBAAwB,GAAG;;;;;;;;;CASvC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmDpC,CAAC"}
1
+ {"version":3,"file":"graphql.js","sourceRoot":"","sources":["../../src/utils/graphql.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,UAAU,YAAY;IAC1B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAE5B,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,IAAI,KAAK,CACb,sDAAsD,CACvD,CAAC;IACJ,CAAC;IAED,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE;QACtC,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,MAAM,CAAC,QAAQ,EAAE;SAC3C;KACF,CAAC,CAAC;AACL,CAAC;AAED,oBAAoB;AACpB,MAAM,CAAC,MAAM,wBAAwB,GAAG;;;;;;;;;CASvC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmDpC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG;;;;;;;;;;;;;;;;;CAiBvC,CAAC"}