@silexlabs/silex 3.3.1-3 → 3.3.1-4
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/client/css/admin.css +26 -9
- package/dist/client/index.html +3 -3
- package/dist/client/js/main.js +119 -51
- package/dist/client/js/main.js.LICENSE.txt +1 -1
- package/dist/client/page.d.ts +1 -1
- package/dist/client/types.d.ts +1 -17
- package/dist/plugins/client/types.d.ts +1 -17
- package/dist/plugins/client/types.js.map +1 -1
- package/dist/plugins/server/page.d.ts +1 -1
- package/dist/plugins/server/page.js.map +1 -1
- package/dist/plugins/server/plugins/server/GitlabConnector.js +94 -28
- package/dist/plugins/server/plugins/server/GitlabConnector.js.map +1 -1
- package/dist/plugins/server/types.d.ts +1 -17
- package/dist/plugins/server/types.js.map +1 -1
- package/dist/server/server/cli.js +0 -0
- package/package.json +6 -6
- package/src/css/_variables.scss +4 -0
- package/src/css/grapesjs-plugins.scss +5 -0
- package/src/css/grapesjs.scss +8 -2
- package/src/css/loader.scss +9 -6
- package/src/css/page-panel.scss +3 -2
- package/src/css/project-bar.scss +0 -1
- package/src/html/index.pug +1 -1
- package/src/ts/client/assetUrl.ts +1 -1
- package/src/ts/client/grapesjs/css-props.ts +4 -3
- package/src/ts/client/grapesjs/flex.ts +8 -4
- package/src/ts/client/grapesjs/img.ts +9 -3
- package/src/ts/client/grapesjs/li.ts +3 -1
- package/src/ts/client/grapesjs/sectors.ts +3 -1
- package/src/ts/client/grapesjs/storage.ts +25 -27
- package/src/ts/client/index.ts +3 -2
- package/src/ts/page.ts +1 -1
- package/src/ts/plugins/server/GitlabConnector.ts +99 -31
- package/src/ts/types.ts +2 -20
- package/dist/client/css/admin.css.map +0 -1
- package/dist/client/grapesjs-filter-styles/dist/index.d.ts +0 -4
- package/dist/client/grapesjs-fonts/dist/index.d.ts +0 -4
- package/dist/client/grapesjs-fonts/src/commands.d.ts +0 -3
- package/dist/client/grapesjs-fonts/src/fonts.d.ts +0 -4
- package/dist/client/grapesjs-storage-rate-limit/dist/index.d.ts +0 -4
- package/dist/client/grapesjs-ui-suggest-classes/dist/index.d.ts +0 -4
- package/dist/client/silex-lib/src/ts/client/api.d.ts +0 -90
- package/dist/client/silex-lib/src/ts/client/assetUrl.d.ts +0 -46
- package/dist/client/silex-lib/src/ts/client/config.d.ts +0 -102
- package/dist/client/silex-lib/src/ts/client/events.d.ts +0 -23
- package/dist/client/silex-lib/src/ts/client/expose.d.ts +0 -8
- package/dist/client/silex-lib/src/ts/client/grapesjs/LoginDialog.d.ts +0 -15
- package/dist/client/silex-lib/src/ts/client/grapesjs/PublicationManager.d.ts +0 -74
- package/dist/client/silex-lib/src/ts/client/grapesjs/PublicationUi.d.ts +0 -59
- package/dist/client/silex-lib/src/ts/client/grapesjs/blocks.d.ts +0 -1
- package/dist/client/silex-lib/src/ts/client/grapesjs/breadcrumbs.d.ts +0 -1
- package/dist/client/silex-lib/src/ts/client/grapesjs/css-props.d.ts +0 -6
- package/dist/client/silex-lib/src/ts/client/grapesjs/flex.d.ts +0 -7
- package/dist/client/silex-lib/src/ts/client/grapesjs/footer.d.ts +0 -2
- package/dist/client/silex-lib/src/ts/client/grapesjs/img.d.ts +0 -6
- package/dist/client/silex-lib/src/ts/client/grapesjs/index.d.ts +0 -9
- package/dist/client/silex-lib/src/ts/client/grapesjs/internal-links.d.ts +0 -1
- package/dist/client/silex-lib/src/ts/client/grapesjs/keymaps.d.ts +0 -123
- package/dist/client/silex-lib/src/ts/client/grapesjs/li.d.ts +0 -7
- package/dist/client/silex-lib/src/ts/client/grapesjs/new-page-dialog.d.ts +0 -2
- package/dist/client/silex-lib/src/ts/client/grapesjs/openImport.d.ts +0 -9
- package/dist/client/silex-lib/src/ts/client/grapesjs/page-panel.d.ts +0 -9
- package/dist/client/silex-lib/src/ts/client/grapesjs/project-bar.d.ts +0 -21
- package/dist/client/silex-lib/src/ts/client/grapesjs/resize-panel.d.ts +0 -1
- package/dist/client/silex-lib/src/ts/client/grapesjs/rich-text.d.ts +0 -4
- package/dist/client/silex-lib/src/ts/client/grapesjs/scroll.d.ts +0 -7
- package/dist/client/silex-lib/src/ts/client/grapesjs/sectors.d.ts +0 -11
- package/dist/client/silex-lib/src/ts/client/grapesjs/semantic.d.ts +0 -1
- package/dist/client/silex-lib/src/ts/client/grapesjs/settings-sections.d.ts +0 -16
- package/dist/client/silex-lib/src/ts/client/grapesjs/settings.d.ts +0 -4
- package/dist/client/silex-lib/src/ts/client/grapesjs/storage.d.ts +0 -3
- package/dist/client/silex-lib/src/ts/client/grapesjs/symbolDialogs.d.ts +0 -3
- package/dist/client/silex-lib/src/ts/client/grapesjs/upload-progress.d.ts +0 -2
- package/dist/client/silex-lib/src/ts/client/grapesjs/view-buttons.d.ts +0 -1
- package/dist/client/silex-lib/src/ts/client/index.d.ts +0 -10
- package/dist/client/silex-lib/src/ts/client/publication-transformers.d.ts +0 -42
- package/dist/client/silex-lib/src/ts/client/publish-custom-code-block.d.ts +0 -4
- package/dist/client/silex-lib/src/ts/client/publish-fonts.d.ts +0 -4
- package/dist/client/silex-lib/src/ts/client/utils.d.ts +0 -22
- package/dist/client/silex-lib/src/ts/constants.d.ts +0 -33
- package/dist/client/silex-lib/src/ts/page.d.ts +0 -2
- package/dist/client/silex-lib/src/ts/types.d.ts +0 -341
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { API_PATH, API_WEBSITE_ASSET_READ, API_WEBSITE_PATH } from '../constants'
|
|
2
|
-
import { Asset, ClientSideFileType,
|
|
2
|
+
import { Asset, ClientSideFileType, ConnectorId, Style, WebsiteId } from '../types'
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* @fileoverview Helpers to manage assets URL
|
|
@@ -128,19 +128,20 @@ export default (editor: Editor, opts) => {
|
|
|
128
128
|
name: 'Content',
|
|
129
129
|
property: 'content',
|
|
130
130
|
type: 'text',
|
|
131
|
-
defaults: '',
|
|
131
|
+
defaults: '"Content in double quotes"',
|
|
132
132
|
info: 'Generates content for an element.',
|
|
133
133
|
full: true,
|
|
134
134
|
visible: false,
|
|
135
135
|
}],
|
|
136
136
|
shouldShow: async () => {
|
|
137
137
|
return new Promise<boolean>((resolve, reject) => {
|
|
138
|
+
|
|
138
139
|
requestAnimationFrame(() => {
|
|
139
140
|
try {
|
|
140
141
|
const state = editor.StyleManager
|
|
141
142
|
.getSelected()
|
|
142
|
-
|
|
143
|
-
if (['before', 'after'].includes(state)) {
|
|
143
|
+
?.get('state')
|
|
144
|
+
if (state && ['before', 'after'].includes(state)) {
|
|
144
145
|
return resolve(true)
|
|
145
146
|
}
|
|
146
147
|
return resolve(false)
|
|
@@ -15,7 +15,6 @@
|
|
|
15
15
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
16
16
|
*/
|
|
17
17
|
import { Component, Editor } from 'grapesjs'
|
|
18
|
-
import { SectorConfig, registerSector } from './sectors'
|
|
19
18
|
|
|
20
19
|
/**
|
|
21
20
|
* @fileoverview This plugin adds CSS properties for the UL, OL and LI elements
|
|
@@ -54,12 +53,16 @@ export default (editor: Editor) => {
|
|
|
54
53
|
// })
|
|
55
54
|
// }
|
|
56
55
|
// })
|
|
57
|
-
//
|
|
58
|
-
// This is a workaround grapesjs behavior: https://github.com/GrapesJS/grapesjs/issues/3123
|
|
59
|
-
sector.on('change:visible', () => applyVisibility())
|
|
56
|
+
// Listen to the events that should trigger a visibility check
|
|
60
57
|
editor.on('component:selected', comp => applyVisibility(comp))
|
|
58
|
+
// `change:visible` is a workaround grapesjs behavior: https://github.com/GrapesJS/grapesjs/issues/3123
|
|
59
|
+
editor.on('change:visible', applyVisibility)
|
|
60
|
+
// `style:property:update` is useful for instantly display the flex sector when selecting display: inline-flex;
|
|
61
|
+
editor.on('style:property:update', () => applyVisibility())
|
|
61
62
|
function applyVisibility(comp: Component = editor.getSelected()) {
|
|
63
|
+
editor.off('change:visible', applyVisibility) // Avoid infinite loop
|
|
62
64
|
requestAnimationFrame(() => {
|
|
65
|
+
if(!comp) return // No selection yet
|
|
63
66
|
const computedDisplay = comp?.view?.el && getComputedStyle(comp.view.el)['display'] as string || ''
|
|
64
67
|
const isFlex = computedDisplay === 'flex' || computedDisplay === 'inline-flex'
|
|
65
68
|
const parent = comp.parent()
|
|
@@ -78,6 +81,7 @@ export default (editor: Editor) => {
|
|
|
78
81
|
sector.getProperties()
|
|
79
82
|
.forEach(p => p.set('visible', FLEX_ITEM_PROPS.includes(p.getId())))
|
|
80
83
|
}
|
|
84
|
+
editor.on('change:visible', applyVisibility)
|
|
81
85
|
})
|
|
82
86
|
}
|
|
83
87
|
})
|
|
@@ -144,9 +144,15 @@ export default (editor: Editor, opts) => {
|
|
|
144
144
|
}
|
|
145
145
|
})
|
|
146
146
|
// Watch changes made by grapesjs and revert them if needed
|
|
147
|
-
|
|
148
|
-
if(sector.get('visible') !== showSector)
|
|
149
|
-
|
|
147
|
+
function doubleCheck() {
|
|
148
|
+
if(sector.get('visible') !== showSector){
|
|
149
|
+
sector.off('change:visible', doubleCheck)
|
|
150
|
+
sector.set('visible', showSector)
|
|
151
|
+
sector.on('change:visible', doubleCheck)
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
sector.on('change:visible', doubleCheck)
|
|
155
|
+
|
|
150
156
|
// Add a new image type that handles the storage URL vs displayed URL
|
|
151
157
|
domc.addType('image', {
|
|
152
158
|
...imgType,
|
|
@@ -68,7 +68,9 @@ export default (editor: Editor) => {
|
|
|
68
68
|
defaults: '',
|
|
69
69
|
},
|
|
70
70
|
],
|
|
71
|
-
shouldShow: comp =>
|
|
71
|
+
shouldShow: comp => {
|
|
72
|
+
return comp && ['ul', 'ol', 'li'].includes(comp.get('tagName')?.toLowerCase() || '')
|
|
73
|
+
},
|
|
72
74
|
},
|
|
73
75
|
]
|
|
74
76
|
|
|
@@ -46,12 +46,14 @@ export function registerSector(editor: Editor, config: SectorConfig, at?: number
|
|
|
46
46
|
async function applyVisibility(comp: Component = editor.getSelected()) {
|
|
47
47
|
const shouldShow = await config.shouldShow(comp)
|
|
48
48
|
if (sector.get('visible') !== shouldShow) {
|
|
49
|
+
sector.off('change:visible', applyVisibility)
|
|
49
50
|
sector.set('visible', shouldShow)
|
|
51
|
+
sector.on('change:visible', applyVisibility)
|
|
50
52
|
// sector.getProperties()
|
|
51
53
|
// .forEach(p => p.set('visible', shouldShow))
|
|
52
54
|
}
|
|
53
55
|
}
|
|
54
56
|
|
|
55
|
-
sector.on('change:visible',
|
|
57
|
+
sector.on('change:visible', applyVisibility)
|
|
56
58
|
editor.on('component:selected', comp => applyVisibility(comp))
|
|
57
59
|
}
|
|
@@ -21,7 +21,7 @@ import { cmdLogin, eventLoggedIn, eventLoggedOut, getCurrentUser, updateUser } f
|
|
|
21
21
|
import { addTempDataToAssetUrl, addTempDataToStyles, removeTempDataFromAssetUrl, removeTempDataFromStyles } from '../assetUrl'
|
|
22
22
|
import { PublicationStatus, PublishableEditor } from './PublicationManager'
|
|
23
23
|
import { ClientEvent } from '../events'
|
|
24
|
-
import { ProjectData } from 'grapesjs'
|
|
24
|
+
import { Page, PageProperties, ProjectData } from 'grapesjs'
|
|
25
25
|
import { html, render, TemplateResult } from 'lit-html'
|
|
26
26
|
import { unsafeHTML } from 'lit-html/directives/unsafe-html.js'
|
|
27
27
|
|
|
@@ -62,10 +62,11 @@ export const storagePlugin = (editor: PublishableEditor) => {
|
|
|
62
62
|
// Add useful commands
|
|
63
63
|
editor.Commands.add(cmdPauseAutoSave, {
|
|
64
64
|
run: () => {
|
|
65
|
-
if(!editor.StorageManager.isAutosave())
|
|
65
|
+
if(!editor.StorageManager.isAutosave()) console.warn('Autosave is not enabled')
|
|
66
66
|
editor.StorageManager.setAutosave(false)
|
|
67
67
|
},
|
|
68
68
|
stop: () => {
|
|
69
|
+
if(editor.StorageManager.isAutosave()) console.warn('Autosave is already enabled')
|
|
69
70
|
editor.editor.set('changesCount', 0)
|
|
70
71
|
editor.UndoManager.clear()
|
|
71
72
|
editor.StorageManager.setAutosave(true)
|
|
@@ -80,13 +81,27 @@ export const storagePlugin = (editor: PublishableEditor) => {
|
|
|
80
81
|
const data = await websiteLoad({ websiteId: options.id, connectorId: user.storage.connectorId }) as WebsiteData
|
|
81
82
|
if (data.assets) data.assets = addTempDataToAssetUrl(data.assets, options.id, user.storage.connectorId)
|
|
82
83
|
if (data.styles) data.styles = addTempDataToStyles(data.styles, options.id, user.storage.connectorId)
|
|
83
|
-
//setTimeout(() => progressiveLoadPages(editor, data))
|
|
84
84
|
if (!data.pages) {
|
|
85
85
|
// This happens when the website was just created
|
|
86
86
|
// Let grapesjs create the pages in the frontend
|
|
87
87
|
return data
|
|
88
88
|
} else {
|
|
89
|
-
|
|
89
|
+
const { pages, ...rest } = data
|
|
90
|
+
// Load any additional project data, e.g. symbols, but not the ones we progressive load
|
|
91
|
+
loader && render(getLoaderHtml('Loading styles, assets and symbols', 0, pages.length + 1), loader)
|
|
92
|
+
if (Object.keys(rest).length > 0) {
|
|
93
|
+
editor.loadProjectData(rest)
|
|
94
|
+
}
|
|
95
|
+
// Load the rest of the data
|
|
96
|
+
await progressiveLoadPages(editor, pages)
|
|
97
|
+
await nextFrame()
|
|
98
|
+
// Select the first page
|
|
99
|
+
const firstPage = editor.Pages.getAll()[0]
|
|
100
|
+
if (firstPage) editor.Pages.select(firstPage)
|
|
101
|
+
loader && render(getLoaderHtml('Starting', 1, 1), loader)
|
|
102
|
+
await nextFrame()
|
|
103
|
+
editor.trigger('storage:end:load', data)
|
|
104
|
+
editor.trigger('canvas:frame:load', editor)
|
|
90
105
|
return {}
|
|
91
106
|
}
|
|
92
107
|
} catch (err) {
|
|
@@ -115,7 +130,7 @@ export const storagePlugin = (editor: PublishableEditor) => {
|
|
|
115
130
|
return await this.addToQueue(myData, options)
|
|
116
131
|
},
|
|
117
132
|
|
|
118
|
-
async addToQueue(data: WebsiteData, options) {
|
|
133
|
+
async addToQueue(data: WebsiteData, options: { id: WebsiteId, connectorId: ConnectorId }) {
|
|
119
134
|
// Handle concurrent saving
|
|
120
135
|
if (lastPendingSaving && lastPendingSaving !== data) {
|
|
121
136
|
// Cancel previous saving
|
|
@@ -125,7 +140,7 @@ export const storagePlugin = (editor: PublishableEditor) => {
|
|
|
125
140
|
return this.doStore(lastPendingSaving, options)
|
|
126
141
|
},
|
|
127
142
|
|
|
128
|
-
async doStore(data, options) {
|
|
143
|
+
async doStore(data: WebsiteData, options: { id: WebsiteId, connectorId: ConnectorId }) {
|
|
129
144
|
if (editor.PublicationManager.status === PublicationStatus.STATUS_PENDING) {
|
|
130
145
|
// Publication is pending, save is delayed
|
|
131
146
|
return new Promise((resolve) => {
|
|
@@ -217,32 +232,15 @@ export const storagePlugin = (editor: PublishableEditor) => {
|
|
|
217
232
|
}
|
|
218
233
|
}
|
|
219
234
|
|
|
220
|
-
async function progressiveLoadPages(editor: PublishableEditor,
|
|
235
|
+
async function progressiveLoadPages(editor: PublishableEditor, pages: Page[]) {
|
|
221
236
|
editor.Pages.getAll().forEach(page => editor.Pages.remove(page))
|
|
222
|
-
const max = data.pages.length + 1
|
|
223
237
|
let i = 0
|
|
224
|
-
for (const page of
|
|
225
|
-
loader && render(getLoaderHtml(`Loading page <strong>${++i}</strong> / ${
|
|
238
|
+
for (const page of pages) {
|
|
239
|
+
loader && render(getLoaderHtml(`Loading page <strong>${++i}</strong> / ${pages.length + 1}`, i, pages.length + 1), loader)
|
|
226
240
|
//await new Promise(resolve => setTimeout(resolve, 1000 * 60 * 1000))
|
|
227
241
|
await nextFrame()
|
|
228
242
|
const newPage = editor.Pages.add({
|
|
229
243
|
...page,
|
|
230
|
-
})
|
|
244
|
+
} as PageProperties)
|
|
231
245
|
}
|
|
232
|
-
|
|
233
|
-
// Charger les styles, assets, etc. après les pages
|
|
234
|
-
loader && render(getLoaderHtml('Loading styles and assets', data.pages.length + 1, max), loader)
|
|
235
|
-
if (data.styles) editor.setStyle(data.styles)
|
|
236
|
-
if (data.assets) editor.AssetManager.add(data.assets)
|
|
237
|
-
|
|
238
|
-
await nextFrame()
|
|
239
|
-
setTimeout(() => {
|
|
240
|
-
// FIXME: Why is this setTimeout needed?
|
|
241
|
-
editor.trigger('storage:end:load', data)
|
|
242
|
-
editor.trigger('canvas:frame:load', editor)
|
|
243
|
-
})
|
|
244
|
-
|
|
245
|
-
// Sélectionner la première page
|
|
246
|
-
const firstPage = editor.Pages.getAll()[0]
|
|
247
|
-
if (firstPage) editor.Pages.select(firstPage)
|
|
248
246
|
}
|
package/src/ts/client/index.ts
CHANGED
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
*
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
|
+
import { Editor } from 'grapesjs'
|
|
24
25
|
import { DEV_MESSAGE } from '../constants'
|
|
25
26
|
import { ClientConfig } from './config'
|
|
26
27
|
import { ClientEvent } from './events'
|
|
@@ -86,8 +87,8 @@ export async function start(options = {}): Promise<void> {
|
|
|
86
87
|
// Load the site
|
|
87
88
|
try {
|
|
88
89
|
editor.runCommand(cmdPauseAutoSave)
|
|
90
|
+
editor.once('canvas:frame:load storage:after:load', () => editor.stopCommand(cmdPauseAutoSave))
|
|
89
91
|
await editor.load(null)
|
|
90
|
-
editor.once('canvas:frame:load', () => editor.stopCommand(cmdPauseAutoSave))
|
|
91
92
|
} catch(e) {
|
|
92
93
|
if(e.httpStatusCode === 401) {
|
|
93
94
|
// Unauthorized, will try to login
|
|
@@ -103,7 +104,7 @@ export async function start(options = {}): Promise<void> {
|
|
|
103
104
|
}
|
|
104
105
|
}
|
|
105
106
|
|
|
106
|
-
function loaded(editor) {
|
|
107
|
+
function loaded(editor: Editor) {
|
|
107
108
|
document.querySelector('.silex-loader').classList.add('silex-dialog-hide')
|
|
108
109
|
document.querySelector('#gjs').classList.remove('silex-dialog-hide')
|
|
109
110
|
config.emit(ClientEvent.STARTUP_END, { editor, config })
|
package/src/ts/page.ts
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
// Page related functions
|
|
19
19
|
// This is used on the client and the server
|
|
20
|
-
export function getPageSlug(pageName) {
|
|
20
|
+
export function getPageSlug(pageName: string | undefined) {
|
|
21
21
|
return (pageName || 'index')
|
|
22
22
|
.toLowerCase()
|
|
23
23
|
.replace(/[^a-z0-9 -]/g, '')
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
import { API_CONNECTOR_LOGIN_CALLBACK, API_CONNECTOR_PATH, API_PATH, WEBSITE_DATA_FILE, WEBSITE_PAGES_FOLDER } from '../../constants'
|
|
19
19
|
import { ServerConfig } from '../../server/config'
|
|
20
20
|
import { ConnectorFile, ConnectorFileContent, StatusCallback, StorageConnector, contentToBuffer, contentToString, toConnectorData } from '../../server/connectors/connectors'
|
|
21
|
-
import { ApiError, ConnectorType, ConnectorUser, WebsiteData, WebsiteId, WebsiteMeta, WebsiteMetaFileContent, JobStatus
|
|
21
|
+
import { ApiError, ConnectorType, ConnectorUser, WebsiteData, WebsiteId, WebsiteMeta, WebsiteMetaFileContent, JobStatus } from '../../types'
|
|
22
22
|
import fetch from 'node-fetch'
|
|
23
23
|
import crypto, { createHash } from 'crypto'
|
|
24
24
|
import { join } from 'path'
|
|
@@ -26,6 +26,7 @@ import { Agent } from 'https'
|
|
|
26
26
|
import { getPageSlug } from '../../page'
|
|
27
27
|
import e from 'express'
|
|
28
28
|
import { fork } from 'child_process'
|
|
29
|
+
import { Page } from 'grapesjs'
|
|
29
30
|
|
|
30
31
|
/**
|
|
31
32
|
* Gitlab connector
|
|
@@ -220,6 +221,10 @@ function sanitizeGitlabPath(name: string): string {
|
|
|
220
221
|
.toLowerCase()
|
|
221
222
|
}
|
|
222
223
|
|
|
224
|
+
function getPageName(page: Page | GitlabPage) {
|
|
225
|
+
return (page as any).getName ? (page as Page).getName() : (page as GitlabPage).name
|
|
226
|
+
}
|
|
227
|
+
|
|
223
228
|
export default class GitlabConnector implements StorageConnector {
|
|
224
229
|
connectorId = 'gitlab'
|
|
225
230
|
connectorType = ConnectorType.STORAGE
|
|
@@ -327,15 +332,21 @@ export default class GitlabConnector implements StorageConnector {
|
|
|
327
332
|
'Content-Type': 'application/json',
|
|
328
333
|
}
|
|
329
334
|
if (method === 'GET' && requestBody) {
|
|
330
|
-
console.error('
|
|
335
|
+
console.error('[GitlabConnector] Invalid GET request: GET requests should not have a body', { url, method, body: requestBody, params })
|
|
331
336
|
}
|
|
332
337
|
// With or without body
|
|
333
|
-
let response
|
|
338
|
+
let response: Response
|
|
334
339
|
const body = requestBody ? JSON.stringify(requestBody) : undefined
|
|
335
340
|
try {
|
|
336
|
-
if(body && Buffer.byteLength(body) > MAX_BODY_SIZE_KB * 1024) {
|
|
337
|
-
|
|
338
|
-
|
|
341
|
+
if (body && Buffer.byteLength(body) > MAX_BODY_SIZE_KB * 1024) {
|
|
342
|
+
console.warn('[GitlabConnector] Request body size exceeds Gitlab API limit', {
|
|
343
|
+
size: Buffer.byteLength(body),
|
|
344
|
+
maxAllowed: MAX_BODY_SIZE_KB * 1024,
|
|
345
|
+
url,
|
|
346
|
+
method,
|
|
347
|
+
params,
|
|
348
|
+
session,
|
|
349
|
+
})
|
|
339
350
|
}
|
|
340
351
|
response = await fetch(url, requestBody && method !== 'GET' ? {
|
|
341
352
|
agent: this.getAgent(),
|
|
@@ -348,8 +359,16 @@ export default class GitlabConnector implements StorageConnector {
|
|
|
348
359
|
headers,
|
|
349
360
|
})
|
|
350
361
|
} catch (e) {
|
|
351
|
-
console.error('Gitlab API
|
|
352
|
-
|
|
362
|
+
console.error('[GitlabConnector] Failed to reach Gitlab API endpoint', {
|
|
363
|
+
error: e,
|
|
364
|
+
url,
|
|
365
|
+
method,
|
|
366
|
+
body: requestBody,
|
|
367
|
+
params,
|
|
368
|
+
session,
|
|
369
|
+
stack: e?.stack || new Error().stack,
|
|
370
|
+
})
|
|
371
|
+
throw new ApiError(`Could not reach Gitlab API: ${e.message || e}`, 500)
|
|
353
372
|
}
|
|
354
373
|
// Pass the response headers to the caller
|
|
355
374
|
response.headers.forEach((value, name) => responseHeaders[name] = value)
|
|
@@ -358,14 +377,30 @@ export default class GitlabConnector implements StorageConnector {
|
|
|
358
377
|
try {
|
|
359
378
|
return await response.text()
|
|
360
379
|
} catch (e) {
|
|
361
|
-
console.error('
|
|
362
|
-
|
|
380
|
+
console.error('[GitlabConnector] Failed to read response body from Gitlab API', {
|
|
381
|
+
status: response.status,
|
|
382
|
+
statusText: response.statusText,
|
|
383
|
+
url,
|
|
384
|
+
method,
|
|
385
|
+
body: requestBody,
|
|
386
|
+
params,
|
|
387
|
+
error: e
|
|
388
|
+
})
|
|
389
|
+
throw new ApiError(`Gitlab API: Could not read response body (${e.message})`, 500)
|
|
363
390
|
}
|
|
364
391
|
}()
|
|
365
392
|
if (!response.ok) {
|
|
366
|
-
console.error('Gitlab API
|
|
393
|
+
console.error('[GitlabConnector] Gitlab API responded with error status', {
|
|
394
|
+
status: response.status,
|
|
395
|
+
statusText: response.statusText,
|
|
396
|
+
url,
|
|
397
|
+
method,
|
|
398
|
+
body: requestBody,
|
|
399
|
+
params,
|
|
400
|
+
responseText: text
|
|
401
|
+
})
|
|
367
402
|
if (text.includes('A file with this name doesn\'t exist')) {
|
|
368
|
-
throw new ApiError('Gitlab API
|
|
403
|
+
throw new ApiError('Gitlab API: File not found', 404)
|
|
369
404
|
} else if (response.status === 401 && this.getSessionToken(session).token?.refresh_token) {
|
|
370
405
|
// Refresh the token
|
|
371
406
|
const token = this.getSessionToken(session).token
|
|
@@ -401,17 +436,28 @@ export default class GitlabConnector implements StorageConnector {
|
|
|
401
436
|
})
|
|
402
437
|
} else {
|
|
403
438
|
const message = typeof refreshJson?.message === 'object' ? Object.entries(refreshJson.message).map(entry => entry.join(' ')).join(' ') : refreshJson?.message ?? refreshJson?.error ?? response.statusText
|
|
404
|
-
console.error('
|
|
405
|
-
|
|
406
|
-
|
|
439
|
+
console.error('[GitlabConnector] Failed to refresh Gitlab OAuth token', {
|
|
440
|
+
status: response.status,
|
|
441
|
+
statusText: response.statusText,
|
|
442
|
+
message,
|
|
443
|
+
refresh_token: token?.refresh_token
|
|
444
|
+
})
|
|
407
445
|
this.logout(session)
|
|
408
|
-
|
|
409
|
-
throw new ApiError(`Gitlab API error (2): ${message}`, response.status)
|
|
446
|
+
throw new ApiError(`Gitlab API: Could not refresh token (${message})`, response.status)
|
|
410
447
|
}
|
|
411
448
|
} else {
|
|
412
449
|
const message = response.statusText
|
|
413
|
-
console.error('Gitlab API error
|
|
414
|
-
|
|
450
|
+
console.error('[GitlabConnector] Unhandled Gitlab API error response', {
|
|
451
|
+
status: response.status,
|
|
452
|
+
statusText: response.statusText,
|
|
453
|
+
url,
|
|
454
|
+
method,
|
|
455
|
+
body: requestBody,
|
|
456
|
+
params,
|
|
457
|
+
responseText: text,
|
|
458
|
+
message
|
|
459
|
+
})
|
|
460
|
+
throw new ApiError(`Gitlab API error: ${message} (${text})`, response.status)
|
|
415
461
|
}
|
|
416
462
|
}
|
|
417
463
|
let json: { message: string, error: string } | any
|
|
@@ -419,11 +465,19 @@ export default class GitlabConnector implements StorageConnector {
|
|
|
419
465
|
json = JSON.parse(text)
|
|
420
466
|
} catch (e) {
|
|
421
467
|
if (!response.ok) {
|
|
422
|
-
// A real error
|
|
423
468
|
throw e
|
|
424
469
|
} else {
|
|
425
|
-
|
|
426
|
-
|
|
470
|
+
console.error('[GitlabConnector] Response from Gitlab API is not valid JSON', {
|
|
471
|
+
statusText: response.statusText,
|
|
472
|
+
url,
|
|
473
|
+
method,
|
|
474
|
+
body: requestBody,
|
|
475
|
+
params,
|
|
476
|
+
responseText: text,
|
|
477
|
+
error: e,
|
|
478
|
+
session,
|
|
479
|
+
stack: e?.stack || new Error().stack,
|
|
480
|
+
})
|
|
427
481
|
return text
|
|
428
482
|
}
|
|
429
483
|
}
|
|
@@ -451,18 +505,30 @@ export default class GitlabConnector implements StorageConnector {
|
|
|
451
505
|
if (!fileRes.ok) {
|
|
452
506
|
const errText = await fileRes.text()
|
|
453
507
|
if (errText.includes('not found') || fileRes.status === 404) {
|
|
454
|
-
|
|
508
|
+
console.error('[GitlabConnector] GitLab raw file not found', {
|
|
509
|
+
status: fileRes.status,
|
|
510
|
+
statusText: fileRes.statusText,
|
|
511
|
+
url: rawUrl,
|
|
512
|
+
responseText: errText
|
|
513
|
+
})
|
|
514
|
+
throw new ApiError(`GitLab raw file not found: filePath="${filePath}" (status ${fileRes.status})`, 404)
|
|
455
515
|
}
|
|
456
|
-
console.error('
|
|
457
|
-
|
|
516
|
+
console.error('[GitlabConnector] Failed to fetch raw file from GitLab', {
|
|
517
|
+
filePath,
|
|
518
|
+
url: rawUrl,
|
|
519
|
+
status: fileRes.status,
|
|
520
|
+
statusText: fileRes.statusText,
|
|
521
|
+
responseText: errText
|
|
522
|
+
})
|
|
523
|
+
throw new ApiError(`Failed to fetch raw file from GitLab: filePath="${filePath}" - ${fileRes.statusText} (${errText})`, fileRes.status)
|
|
458
524
|
}
|
|
459
525
|
|
|
460
526
|
try {
|
|
461
527
|
const buffer = await fileRes.buffer()
|
|
462
528
|
return buffer
|
|
463
529
|
} catch (e) {
|
|
464
|
-
console.error('
|
|
465
|
-
throw new ApiError('
|
|
530
|
+
console.error('[GitlabConnector] Error reading binary content from GitLab raw file', e)
|
|
531
|
+
throw new ApiError('Failed to read binary content from GitLab raw file', 500)
|
|
466
532
|
}
|
|
467
533
|
}
|
|
468
534
|
|
|
@@ -691,8 +757,9 @@ export default class GitlabConnector implements StorageConnector {
|
|
|
691
757
|
// Load each page in parallel
|
|
692
758
|
const pages = await Promise.all(websiteData.pages.map(async (page: GitlabPage | Page) => {
|
|
693
759
|
if ((page as GitlabPage).isFile) {
|
|
694
|
-
const name =
|
|
695
|
-
const
|
|
760
|
+
const name = getPageName(page)
|
|
761
|
+
const slug = getPageSlug(name)
|
|
762
|
+
const fileName = (`${slug}-${page.id}`)
|
|
696
763
|
const filePath = `${WEBSITE_PAGES_FOLDER}/${fileName}.json`
|
|
697
764
|
const pageContent = await this.downloadRawFile(session, websiteId, filePath)
|
|
698
765
|
const res = JSON.parse(pageContent.toString('utf8')) as Page
|
|
@@ -747,7 +814,8 @@ export default class GitlabConnector implements StorageConnector {
|
|
|
747
814
|
// **
|
|
748
815
|
// Create the pages for batch upload
|
|
749
816
|
const pages = websiteData.pages.map((page: Page) => {
|
|
750
|
-
|
|
817
|
+
/* @ts-ignore */
|
|
818
|
+
const fileName = encodeURIComponent(`${getPageSlug(getPageName(page))}-${page.id}`)
|
|
751
819
|
const filePath = `${WEBSITE_PAGES_FOLDER}/${fileName}.json`
|
|
752
820
|
const content = JSON.stringify(page)
|
|
753
821
|
const newSha = computeGitBlobSha(content, false)
|
|
@@ -771,7 +839,7 @@ export default class GitlabConnector implements StorageConnector {
|
|
|
771
839
|
}
|
|
772
840
|
|
|
773
841
|
return {
|
|
774
|
-
name: page
|
|
842
|
+
name: getPageName(page),
|
|
775
843
|
id: page.id,
|
|
776
844
|
isFile: true,
|
|
777
845
|
}
|
package/src/ts/types.ts
CHANGED
|
@@ -15,6 +15,8 @@
|
|
|
15
15
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
16
16
|
*/
|
|
17
17
|
|
|
18
|
+
import { Page } from 'grapesjs'
|
|
19
|
+
|
|
18
20
|
/**
|
|
19
21
|
* @fileoverview define types for Silex client and server
|
|
20
22
|
*/
|
|
@@ -98,26 +100,6 @@ export const defaultWebsiteData: WebsiteData = {
|
|
|
98
100
|
} as WebsiteData
|
|
99
101
|
|
|
100
102
|
|
|
101
|
-
// **
|
|
102
|
-
// Grapesjs types
|
|
103
|
-
// From grapesjs, not imported because it breaks the build on the server side
|
|
104
|
-
export interface Component {
|
|
105
|
-
type: string,
|
|
106
|
-
content?: string,
|
|
107
|
-
attributes: { [key: string]: string },
|
|
108
|
-
components: Component[],
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
export interface Page {
|
|
112
|
-
id: string,
|
|
113
|
-
name: string,
|
|
114
|
-
slug: string,
|
|
115
|
-
settings: WebsiteSettings, // TODO: why is this here? It is used in the publication manager
|
|
116
|
-
frames: {
|
|
117
|
-
component: Component,
|
|
118
|
-
}[]
|
|
119
|
-
}
|
|
120
|
-
|
|
121
103
|
export interface WebsiteData {
|
|
122
104
|
pages: Page[],
|
|
123
105
|
assets: Asset[],
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sourceRoot":"","sources":["../../../src/css/index.scss","../../../../../node_modules/normalize.css/normalize.css","../../../src/css/_variables.scss","../../../../../node_modules/grapesjs/src/styles/scss/main.scss","../../../../../node_modules/codemirror/lib/codemirror.css","../../../../../node_modules/codemirror/theme/hopscotch.css","../../../../../node_modules/grapesjs/src/styles/scss/_gjs_vars.scss","../../../../../node_modules/grapesjs/src/styles/scss/_gjs_status.scss","../../../../../node_modules/grapesjs/src/styles/scss/_gjs_main_mixins.scss","../../../../../node_modules/grapesjs/src/styles/scss/_gjs_root.scss","../../../../../node_modules/grapesjs/src/styles/scss/_gjs_category_general.scss","../../../../../node_modules/grapesjs/src/styles/scss/_gjs_traits.scss","../../../../../node_modules/grapesjs/src/styles/scss/_gjs_canvas.scss","../../../../../node_modules/grapesjs/src/styles/scss/_gjs_commands.scss","../../../../../node_modules/grapesjs/src/styles/scss/_gjs_panels.scss","../../../../../node_modules/grapesjs/src/styles/scss/_gjs_inputs.scss","../../../../../node_modules/grapesjs/src/styles/scss/_gjs_devices.scss","../../../../../node_modules/grapesjs/src/styles/scss/_gjs_style_manager.scss","../../../../../node_modules/grapesjs/src/styles/scss/_gjs_blocks.scss","../../../../../node_modules/grapesjs/src/styles/scss/_gjs_layers.scss","../../../../../node_modules/grapesjs/src/styles/scss/_gjs_selectors.scss","../../../../../node_modules/grapesjs/src/styles/scss/_gjs_modal.scss","../../../../../node_modules/grapesjs/src/styles/scss/_gjs_assets.scss","../../../../../node_modules/grapesjs/src/styles/scss/_gjs_file_uploader.scss","../../../../../node_modules/grapesjs/src/styles/scss/_gjs_code_manager.scss","../../../../../node_modules/grapesjs/src/styles/scss/_gjs_rte.scss","../../../../../node_modules/grapesjs/src/styles/scss/spectrum.scss","../../../../../node_modules/grapesjs/src/styles/scss/_gjs_spectrum.scss","../../../src/css/silex.scss","../../../src/css/_mixins.scss","../../../src/css/loader.scss","../../../src/css/footer.scss","../../../src/css/dialog.scss","../../../src/css/fonts.scss","../../../src/css/project-bar.scss","../../../src/css/page-panel.scss","../../../src/css/website-info.scss","../../../../../node_modules/grapick/dist/grapick.min.css","../../../src/css/grapesjs-plugins.scss","../../../src/css/grapesjs.scss","../../../../../node_modules/@fontsource/ubuntu/index.css"],"names":[],"mappings":"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EAEE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAMR;EACE;;AAGE;EACE;;AAGF;EACE;EACA;;AAEA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAOV;EACE;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGJ;EACE;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE,YACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAEA;EACE;;;AASJ;EACE;EACA;EACA;;AAEF;EACE;;AAEF;EACE;EACA;EACA;;AAEF;EACE;;;AAKN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;AAyEA;AAKA;;AA5EA;EACE;;AAGF;EACE;EACA;EACA;;AAKA;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EJ5NF,SI8NmC;EJ7NnC;;AIgOA;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;;AAaJ;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA,YACE;EAEF;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;;AAIJ;EAGE;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;AAAA;AAAA;EJnUE,SIyUiC;EJxUjC;EI0UA;EACA;;;AAGF;AAAA;EJ/UE,SIiViC;EJhVjC;;;AImVF;AAAA;EAEE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAIA;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAIJ;AAAA;EAEE;EACA;;AAGF;AAAA;EAEE;EACA;;;AAIJ;AAAA;EAEE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AC7eF;AAAA;EAEE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAQF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;AAAA;AAAA;EAGE;EACA;EACA;EACA;;;AAGF;AAAA;EAEE;EACA;EACA;EACA,YACE;;;AAMJ;AAAA;AAAA;EAGE;EACA;EACA;;;AAGF;AAAA;AAAA;EAGE;EACA;EACA;;;AAGF;AAAA;AAAA;EAGE;EACA;EACA;EACA;EACA;EACA;EACA;;;AC/EA;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;EAEE;EACA;EACA;;AAIJ;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;AAIJ;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;;;ACrEN;AAmBE;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAEA;EACE;;AAIJ;EAEE;EACA;;AAGF;EAKE;;AAIA;AAAA;AAAA;EPxBF,oBO2BwC;EP1BxC,iBO0BwC;EPzBxC,YOyBwC;EAEpC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;AAAA;AAAA;EACE;;AAIJ;EACE;;AAEA;EAEE;EACA;;AAIJ;EACE;;AAIA;EACE;;;AAMR;AAAA;AAAA;AAAA;AAAA;AAAA;EAME;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EAEE;;;AAKF;EACE;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;;AAIJ;EAGE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;;;AAIJ;EACE;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;;;AAIJ;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;AAqBA;;AAnBA;EACE;;AAGF;EACE;EACA;EAnTJ;EACA;EACA;EACA;EACA;EACA;;AAmTE;EAxTF;EACA;EACA;EACA;EACA;EACA;;AAuTE;EA5TF;EACA;EACA;EACA;EACA;EACA;;AA4TE;EAxTF;EACA;EACA;EACA;;AAyTE;EA5TF;EACA;EACA;EACA;;AA6TE;EAhUF;EACA;EACA;EACA;;;AAoUA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAIJ;EACE;;;AAIJ;EPrUE,eOsUmC;EPrUnC,mBOqUmC;EPpUnC,gBOoUmC;EPnUnC,WOmUmC;EAEnC;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EPhWA,SOkWiC;EPjWjC;;AOmWA;EPpWA,SOqWmC;EPpWnC;;AOuWA;EACE;;;ACjYJ;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;;ACdF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAIF;EACE;EACA;EACA;;AAEA;EAEE;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAMA;EACE;;AAKN;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAIF;EACE;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EThDA,SSkDiC;ETjDjC;;ASmDA;ETpDA,SSqDmC;ETpDnC;;;ASwDF;AAEA;EACE;EACA;;AAEA;AAAA;AAAA;AAAA;EAEE;EACA,OX1DW;EW2DX;EACA;;AAGF;EACE;;AAGF;EACE;EACA;ETxEF,oBS0EsC;ETzEtC,iBSyEsC;ETxEtC,YSwEsC;;AAEpC;EACE;;AAIJ;EACE;EACA;;AAGF;AAAA;AAAA;AAAA;EAEE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAIE;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAGE;EACA;;AAGF;AAAA;AAAA;AAAA;EAEE;;AAGF;EAKE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;;AAKJ;EACE;EACA;;;AAIJ;AAEA;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;;AAIJ;AAII;EACE;;;AAKN;EACE;EACA;EACA;EACA;EACA;;AAEA;EAOE;;AAGF;EACE;EACA;EACA,YACE;EAEF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;ETpRF,SSsRmC;ETrRnC;;ASwRA;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAGF;EAGE;EACA;EACA;;;AAMJ;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EAGE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;ET/XF,SSiYmC;EThYnC;;ASkYE;ETnYF,SSoYqC;ETnYrC;;;ASwYF;AAEA;EACE;;;AAGF;EAGE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;ET9ZA,SS+ZmC;ET9ZnC;;;ASkaF;EAGE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGA;AAAA;EAEE;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;ET/cE,SSgdiC;ET/cjC;ESidA;EACA;EACA;EACA;;AAEA;ETvdA,SSwdmC;ETvdnC;;;AUvBF;EACE;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;AAUA;EACE;;;AAIJ;EVdE,kBUeqC;EVdrC,oBUcqC;EVbrC,qBUaqC;EVZrC,iBUYqC;EVXrC,gBUWqC;EVVrC,aUUqC;EAErC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;EACA;;;AAIJ;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;ACvFA;EACE;;AAGF;EXeA,SWdmC;EXenC;;AWZA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEE;EACA;EACA;;AAGF;EACE;;AAIJ;EXlBF,SWmBqC;EXlBrC;;AWqBE;EACE;EACA;EACA;;AAEA;EAEE;EACA;EACA;;AAGF;EACE;;AAIA;EACE;;AAEF;EACE;;AAKN;EACE;EACA;EACA;EACA;EACA;EACA;EXtDJ,SWuDqC;EXtDrC;;AWwDI;EXzDJ,SW0DuC;EXzDvC;;AW6DE;EACE;;AAGF;EAGE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAGF;EACE;;AAIJ;EACE;EACA;EACA,WAhHU;EAiHV,YAjHU;EAkHV;;AAEA;EACE;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;;AAGA;EACE;;AAIJ;EACE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;;;AAKN;EACE;EACA;;AAEA;EACE;EACA;;AAEA;EACE;EACA;;AAEA;EACE;;;AC1KR;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIA;EACE;EACA;;AAGF;EACE;EACA;EACA;;AAEA;EACE;EACA;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EAEE;EACA;EACA;;AAEA;EACE;EACA;;AAKN;EACE;EACA;;AAGF;EACE;EZ5CF,SY6CmC;EZ5CnC;;AY+CA;EACE;EACA;;;AAIJ;EACE;EACA;;AAEA;EACE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAGF;EAGE;EACA;EACA;;AAGF;EZ3FA,SY4FmC;EZ3FnC;EY4FE;EACA;EACA;EACA;;AAGA;EZnGF,SYoGqC;EZnGrC;;AYuGA;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AC1IF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EAGE;EACA;EACA;;AAGF;EACE;;AAGF;EAEE;EACA;;AAGF;EACE;EACA;EACA;;;AAIJ;EACE;EACA;EACA;EACA;;;AC1DF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIA;EACE;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAIA;EACE;EACA;;AAGF;EACE;EACA;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;Ed5CE,Sc6CiC;Ed5CjC;Ec8CA;EACA;EACA;EACA;;;AAGF;EdrDE,ScsDiC;EdrDjC;EcuDA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;;AAIJ;EAGE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;;AAIJ;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;ACjIF;EACE;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;;AAGF;EfEF,SeDqC;EfErC;EeDI;EACA;EACA;;AAIJ;EACE;EACA;EACA;;;ACjCJ;EACE;EACA;EACA;;AAEA;EACE;;;AAGJ;EACE;;AAEA;EACE;EACA;;AACA;EACE;;AAGJ;EACE;;AACA;EACE;;AAGJ;EACE;EACA;EACA;EACA;;;AC3BF;EAGE;EACA;;AAGF;EACE;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAIJ;EACE;;AAEF;EACE;EACA;;AACA;EACE;;;AC/CN;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;EACE;EACA;EACA;EACA;AACA;EACA;EACA;;;AAEF;EACE;;;AAGF;AACA;AAAA;EAEE;EACA;EACA;;;AAGF;AACA;EACE;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAEF;AAAA;EAEE;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAUE;EACA;EACA;EACA;;;AAGF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAGF;EACE;;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EAUA;EAUA;EAUA;EAYA;EAUA;;;AAYF;AAAA;AAAA;AAAA;AAIA;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAEF;EACE;EACA;;;AAGF;EACE;;;AAGF;AACA;AAAA;EAEE;EACA;;;AAEF;EACE;;;AAGF;AACA;EACE;IACE;;EAEF;IACE;;EAEF;IACE;;;AAGJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAMA;EACE;EACA;EACA;EACA;;;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;EAME,MACE;EAMF;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;AAAA;AAAA;EAGE;;;AAGF;AACA;EACE;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;AAAA;EAEE;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;;;AAGF;AACA;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;AAAA;EAEE;;;AAEF;EACE;;;AAGF;AACA;EACE;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;AACA;AAAA;EAEE;;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;AAAA;EAEE;EACA;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;;;AAEF;EACE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;EACA,oBACE;EAEF,iBACE;EAEF,gBACE;EAEF,eACE;EAEF,YACE;;;AAGJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA;;;AAGF;AAAA;EAEE;;;AAGF;AAAA;AAAA;EAGE;EACA;;;AAEF;AAAA;AAAA;EAGE;EACA;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;;AC5lBF;EACE;EACA;EACA;;;AAIA;AAAA;EAEE;;AAEF;AAAA;EAEE;;AAEF;AAAA;EAEE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;AAAA;EAEE;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;;AAEF;AAAA;EAEE;;AAEF;EACE;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;;AAEF;EACE;EACA;EACA;EACA;;AAEA;AAAA;AAAA;EAGE;EACA;EACA;EACA;EACA;EACA;;AAGJ;EACE;EACA;EACA;EACA;;AAEF;AAAA;EAEE;;AAGF;AAAA;EAEE;;;AxBxDE;EACE,kBAPI;;AAUN;EACE,OAXI;;AAaJ;EACE,OAdE;;AAMN;EACE,kBAPI;;AAUN;EACE,OAXI;;AAaJ;EACE,OAdE;;AAMN;EACE,kBAPI;;AAUN;EACE,OAXI;;AAaJ;EACE,OAdE;;AAMN;EACE,kBAPI;;AAUN;EACE,OAXI;;AAaJ;EACE,OAdE;;AAMN;EACE,kBAPI;;AAUN;EACE,OAXI;;AAaJ;EACE,OAdE;;;AAqBZ;EACE;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAIE;EACA;;;AAGF;EACE;;;AAGF;EAGE;EACA;EACA;EACA;;;AAIF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;AAQE;EACE;;AAGF;EKrGA,kBLsGuC;EKrGvC,oBLqGuC;EKpGvC,qBLoGuC;EKnGvC,iBLmGuC;EKlGvC,gBLkGuC;EKjGvC,aLiGuC;EK7FvC,SL8FmC;EK7FnC;;ALgGA;EACE;EACA;EACA;EACA;EACA;;;AAIJ;AAAA;EK1GE,SL4GiC;EK3GjC;EL4GA;;;AAGF;EACE;;;AAGF;EACE;IACE;IACA;;EAEF;IACE;IACA;;;AAIJ;EACE;IACE;IACA;;EAEF;IACE;IACA;;;AAIJ;EACE;;;AH9JF;A4BJA;ECFE;EACA;EACA;EACA;EACA;EDAA;;AACA;EACE,a1BkBS;;A0BhBX;EACE;;AAEF;EACE;EACA,Y1BPkB;E0BQlB;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;;AAGF;EACE,kB1BrBiB;;A0BuBnB;EACE,O1B3Ba;;;A0B+BjB;EACE;;;AAKA;EACI,S1BlBoB;E0BmBpB;EACA;;AAEA;EACE;;;AAKR;AACE;EACA;EACA;EACA;EACA;EACA;EACA;;;AAIF;EACE;EACA;EACA;EACA;;AACA;EACE;;AACA;EACE;;AAGJ;EACE;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA,kB1BpFW;;A0BqFX;EACE;;AAEF;EACE;EACA;EACA;;AAGJ;EACE;EACA;;;AAIJ;AAAA;AAAA;EAGE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,kB1B5GoB;E0B6GpB;EACA;;AACA;AAAA;AAAA;EACE;EACA;;AAEF;AAAA;AAAA;EACE,kB1BrHiB;;;A0ByHrB;AAAA;EAEE;EACA;;;AAGF;EACE,kB1B/HoB;;;A0BkItB;EACE,kB1BxIa;;;A0B2If;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;AAAA;EAEE;;AACA;AAAA;EACE;;AAEF;AAAA;EACE;;;AAIJ;AAAA;EAEE;EACA;EACA;;AAEA;AAAA;EACE;EACA;EAEA;;AAEF;AAAA;EACE,c1BhLkB;;A0BkLpB;AAAA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;AAAA;EACE;;AAEF;AAAA;EACE;EACA;;AACA;AAAA;EACE;EACA;EACA;;;AAOJ;AAAA;EACE;EACA;EACA;EACA,qB1B/MkB;E0BgNlB;EACA;;AAEF;AAAA;EACE,kB1BpNkB;;A0BsNpB;AAAA;AAAA;EAEE,O1B3NY;E0B4NZ,kB1B1NiB;;;A0B8NrB;EACE;EACA;;AACA;EACE;EACA;EACA;EACA;;AAEF;EACE,kB1BxOiB;E0ByOjB,O1B5Oa;E0B6Ob;EACA;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;EACA;;AAEF;EACE;;;AE3PJ;EDFE;EACA;EACA;EACA;EACA;ECAA;EACA,O5BHe;E4BIf;EACA;EACA,kB5BPa;E4BQb,S5BYS;E4BXT;EACA;EACA;;AACA;EACE;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;EACA,kB5BrBS;E4BsBT;EACA;EACA;;AACA;EACE,kB5BzBS;E4B0BT;;AAEF;EACE,kB5B9BO;E4B+BP;;AAEF;EACE,kB5BjCS;E4BkCT;;AAKJ;EACE;;AACA;EACE;EACA;EACA;EACA;;;AC9CR;EACE;EACA,M7BMgB;E6BLhB;EACA;EACA;EACA;EACA;EACA,Q7BKa;;;A8BZf;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;;;AAGF;EACE;EACA,kB9Bfa;E8BgBb,S9BGgB;E8BFhB;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;;AAEF;EACE;EACA;EACA;EACA;;AAEF;EACE;EACA;EACA;;AAEF;EACE,O9BnCc;;A8BqChB;EACE;;;AAIJ;EACE;EACA;EACA;EACA;EACA,kB9B7CoB;E8B8CpB,O9BlDe;E8BmDf;;AACA;EACE;;AAEF;EACE,O9BtDc;;;A8B0DlB;EACE;EACA;;;AC/DA;EACE;EACA;EACA;EACA;EACA;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;;AAEF;EACE;EACA;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA,kB/B1BW;;;AgCKf;EACE;EACA;EACA;;;AAKF;EACE,OhCNgB;EgCOhB;;AACA;EACE;EACA;EACA;;AACA;EACE;;AAEF;EACE;EACA;;AACA;EACE,kBhCtBc;EgCuBd,OhCpBU;EgCqBV;;AAGJ;EACE,kBhC9BY;EgC+BZ;;AAGJ;EACE;EACA;EACA;EACA;EACA;;;AAKJ;EACE;;;AAEF;EACE,ShC9BwB;EgC+BxB;EACA;;;AAGF;EACE;;;AAIF;EACE,KhCvDa;EgCwDb,OhCtDkB;EgCuDlB,WhCtDqB;EgCuDrB;EACA,kBhC7DoB;;AgC8DpB;EACE;EACA;;AAEF;EACE;EACA;EACA;EACA,kBhC3EW;EgC4EX;;AACA;EACE,kBhC9ES;;AgCiFb;EACE;EACA;;AAED;EACG;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;;AACA;EACE;EACA;EACA;EACA;;AAGJ;EACE,OhC5GU;;;AiCFhB;EACE;;AAEF;EACE;EACA;EACA;;AACA;EACE;EACA;EACA,kBjCXS;;AiCaX;EACE;EACA;EACA,kBjCZe;EiCaf;EACA;;AACA;EACE,kBjCpBO;;AiCqBP;EACE,OjCnBQ;;AiCuBd;EACE,kBjCtBgB;EiCuBhB;;AACA;EACE,OjC3BU;;AiC8Bd;EACE;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;;AAEF;EACE,OjCjDY;;AiCoDhB;EACE;;ACxDJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,kBlCNmB;;;AmCNrB;EAAa;;;AAA+J;EAAa;EAAkB;EAAM;EAAO;EAAW;EAAY;;;AAAiB;EAAa;EAAU;EAAiB;EAAiB;EAAyB;EAAsB;;;AAAY;EAAmB;EAAsB;EAAmB;EAAuC;EAAsB;EAAkB;EAAW;EAAY;EAAiB;EAAiB;EAAe;;;AAAe;EAAqB;EAAkB;;;AAAU;EAAkB;EAAiC;EAAkB;EAAW;;;AAAY;EAAwC;;;AAAuC;EAAkB;;;AAAa;EAAwC;;;AAAc;EAAqB;EAAW;EAAY;EAAiB;EAAsB;EAAuC;EAAgB;EAAmB;;;AAAe;EAAuC;EAAU;;;ACcpmC;EAPE;EACA;EACA;EACA;EACA;EACA;EAIA,cpCbe;;;AoCejB;EAXE;EACA;EACA;EACA;EACA;EACA;EAQA,kBpCjBe;;;AoCmBjB;EAfE;EACA;EACA;EACA;EACA;EACA;EAYA,qBpCrBe;;;AoCuBjB;EAnBE;EACA;EACA;EACA;EACA;EACA;EAgBA,mBpCzBe;;;AoC2BjB;EAvBE;EACA;EACA;EACA;EACA;EACA;EAoBA,oBpC7Be;;;AoCiCjB;EACE;EACA;;;AAEF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EAOE;EACA;;;AAEF;AAAA;EAEE;EACA;;;AAGF;EACE;;;AAIF;EACE;IACE;;EAEF;IACE;;;AAKF;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA,kBpChFY;;AoCmFd;EACE,kBpCpFY;;AoCuFd;EACE,kBpCxFY;;AoC2Fd;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA,OpChHW;;AoCmHb;EACE,OpClHY;;AoCsHhB;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAGF;EACE;EACA;;AAGF;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAKN;EACE;EACA,cpCnLc;EoCoLd,kBpCrLa;;AoCwLf;EACE;;AAIJ;EACE;;AAGF;EACE;EACA;EACA;;AAEA;EACE;;AAGF;EACE;;AAIJ;EACE,kBpClNU;;;AoCwNhB;EACE;EACA;EACA;EACA;EACA;;;AC9NF;EACE;;;AAOI;EACE,kBAHgB;;AAMlB;EACE,OAPgB;;AAShB;EACE,OAVc;;AAElB;EACE,kBAHgB;;AAMlB;EACE,OAPgB;;AAShB;EACE,OAVc;;AAElB;EACE,kBAHgB;;AAMlB;EACE,OAPgB;;AAShB;EACE,OAVc;;AAElB;EACE,kBAHgB;;AAMlB;EACE,OAPgB;;AAShB;EACE,OAVc;;;AAiBxB;AAAA;AAAA;EAGE,MrCnBgB;;;AqCqBlB;AAAA;AAAA;AAAA;EAIE;;;AAEF;EACE;;;AAEF;EACE;;AACA;EACE;;;AAMJ;EACE,arCzBW;EqC0BX;;;AAIF;EACE,kBrCtDa;EqCuDb,OrCtDe;EqCuDf;EACA;;AACA;EACE;;;AAKJ;EACE,kBrC/Dc;;;AqCiEhB;EACE,crClEc;;;AqCoEhB;EACI,kBrCrEY;;;AqCuEhB;EACI;;;AAIJ;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;EACE;;;AAIF;EACE;EACA;EACA;EACA,kBrCnGa;EqCoGb;EACA;;;AAEF;EACE;;;AAEF;EACE;EACA;EACA;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;EACA;;;AAEF;EACE;;;AAGF;AAAA;AAIA;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;EACC;;;AAGD;AACA;EACC;;;AAGD;EACC;;;AAID;EACE;;;AAGF;EACE;;;AAGF;EACC;EACC;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAIF;EACI;;;AAEJ;AAAA;EAEI;EACA;EACA;EACA;;;AAEJ;EACI;EACA;;;AAEJ;EACI;EACA;;;AC5NJ;AACA;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;EACA;;AAGF;AACA;EACE;EACA;EACA;EACA;EACA;EACA;;AxClCF;EACE;EACA;EACA;EACA;EACA;EACA;EACA","file":"admin.css"}
|