@jumoo/usync 18.2.0 → 18.2.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.
- package/LICENCE +372 -372
- package/README.md +16 -10
- package/dist/components/usync-action-box.js +71 -71
- package/dist/components/usync-change-detail.js +409 -409
- package/dist/components/usync-change-view.js +49 -49
- package/dist/components/usync-progress-box.js +113 -113
- package/dist/components/usync-result-row.js +65 -65
- package/dist/components/usync-results-group-view.js +63 -63
- package/dist/components/usync-results-view.js +64 -64
- package/dist/components/usync-sync-file-info-view.js +10 -10
- package/dist/constants.js +1 -1
- package/dist/dialogs/details-modal-element.js +45 -45
- package/dist/dialogs/error-modal-element.js +22 -22
- package/dist/dialogs/legacy-modal-element.js +22 -22
- package/dist/dialogs/single-import-modal.element.js +31 -31
- package/dist/icons/svg/logo.js +20 -20
- package/dist/lang/files/da-dk.js +12 -12
- package/dist/lang/files/de-de.js +12 -12
- package/dist/lang/files/en-us.js +12 -12
- package/dist/lang/files/es-es.js +12 -12
- package/dist/lang/files/fr-fr.js +12 -12
- package/dist/lang/files/nl-nl.js +12 -12
- package/dist/signalr/signalr.context.js +73 -26
- package/dist/tree/usync.menu-element.js +8 -8
- package/dist/workspace/components/usync-action-button.js +53 -53
- package/dist/workspace/components/usync-file-picker.element.js +33 -33
- package/dist/workspace/components/usync-file-upload.element.js +25 -25
- package/dist/workspace/dialogs/import-modal.element.js +22 -22
- package/dist/workspace/views/addons/addons.element.js +97 -97
- package/dist/workspace/views/default/default.element.js +186 -186
- package/dist/workspace/views/legacy/legacy.element.js +81 -81
- package/dist/workspace/views/settings/components/usyncSettingItem.element.js +38 -38
- package/dist/workspace/views/settings/settings.element.js +124 -124
- package/dist/workspace/workspace.element.js +16 -16
- package/package.json +77 -77
package/dist/lang/files/de-de.js
CHANGED
|
@@ -46,21 +46,21 @@ export default {
|
|
|
46
46
|
changeHeading: 'Ergebnisse',
|
|
47
47
|
changeCount: '{1}/{0} Änderungen',
|
|
48
48
|
noChangeCount: '0/{0} Änderungen',
|
|
49
|
-
legacyInfo: `<p>uSync hat einen Legacy-uSync-Ordner unter <strong>%0%</strong> gefunden.<br />
|
|
49
|
+
legacyInfo: `<p>uSync hat einen Legacy-uSync-Ordner unter <strong>%0%</strong> gefunden.<br />
|
|
50
50
|
Der Inhalt muss wahrscheinlich konvertiert werden</p>`,
|
|
51
|
-
legacyObsolete: `<h4>Veraltete Datentypen</h4>
|
|
52
|
-
<ul>%0%</ul>
|
|
53
|
-
<p>Sie können diese Datentypen mit
|
|
54
|
-
<a href="https://github.com/Jumoo/uSyncMigrations" target="_blank">uSync.Migrations</a> konvertieren<br />
|
|
51
|
+
legacyObsolete: `<h4>Veraltete Datentypen</h4>
|
|
52
|
+
<ul>%0%</ul>
|
|
53
|
+
<p>Sie können diese Datentypen mit
|
|
54
|
+
<a href="https://github.com/Jumoo/uSyncMigrations" target="_blank">uSync.Migrations</a> konvertieren<br />
|
|
55
55
|
<em>(In der vollständigen uSync-Version wird die Konvertierung hier stattfinden.)</em></p>`,
|
|
56
|
-
legacyCopy: `<h4>Nach uSync/v14 kopieren</h4>
|
|
57
|
-
<p>Sie können Ihren %0%-Ordner in den ~/uSync/v14-Ordner kopieren<br />und einen Import ausführen.</p>
|
|
58
|
-
<p>Wenn nichts konvertiert werden muss, sollte alles korrekt importiert werden.</p>
|
|
56
|
+
legacyCopy: `<h4>Nach uSync/v14 kopieren</h4>
|
|
57
|
+
<p>Sie können Ihren %0%-Ordner in den ~/uSync/v14-Ordner kopieren<br />und einen Import ausführen.</p>
|
|
58
|
+
<p>Wenn nichts konvertiert werden muss, sollte alles korrekt importiert werden.</p>
|
|
59
59
|
<p><strong>Entfernen oder benennen Sie den %0%-Ordner um, um dieses Popup zu verhindern</strong></p>`,
|
|
60
|
-
hmacMismatch: `<h4>HMAC-Abweichung <uui-icon name="alert"></uui-icon></h4>
|
|
61
|
-
<p>Es scheint, dass die <code>Imaging:HMAC</code>-Einstellung, die zum Generieren der Dateien im uSync-Ordner verwendet wurde, nicht mit der aktuellen Einstellung dieser Website übereinstimmt.</p>
|
|
62
|
-
<p>Bilder in RTE-Steuerelementen haben den HMAC-Wert an die URL angehängt. Ohne zusätzliche Konfiguration werden diese Bilder möglicherweise nicht korrekt dargestellt.</p>
|
|
63
|
-
<ul><li>Sie können die "HMAC-Zuordnung" in uSync aktivieren,</li>
|
|
60
|
+
hmacMismatch: `<h4>HMAC-Abweichung <uui-icon name="alert"></uui-icon></h4>
|
|
61
|
+
<p>Es scheint, dass die <code>Imaging:HMAC</code>-Einstellung, die zum Generieren der Dateien im uSync-Ordner verwendet wurde, nicht mit der aktuellen Einstellung dieser Website übereinstimmt.</p>
|
|
62
|
+
<p>Bilder in RTE-Steuerelementen haben den HMAC-Wert an die URL angehängt. Ohne zusätzliche Konfiguration werden diese Bilder möglicherweise nicht korrekt dargestellt.</p>
|
|
63
|
+
<ul><li>Sie können die "HMAC-Zuordnung" in uSync aktivieren,</li>
|
|
64
64
|
<li>oder Sie können sicherstellen, dass der HMAC-Wert in der <code>Imaging:HMAC</code>-Einstellung mit dem Wert übereinstimmt, der zum Generieren der Dateien im uSync-Ordner verwendet wurde</li></ul>`,
|
|
65
65
|
formatMismatch: 'Die Formatversion der Synchronisierungsdatei stimmt nicht mit der erwarteten Version überein. Dies kann auf ein potenzielles Kompatibilitätsproblem hinweisen.',
|
|
66
66
|
legacyBanner: 'Diese Website enthält Dateien einer früheren Version von uSync. Details finden Sie auf der Registerkarte Legacy.',
|
package/dist/lang/files/en-us.js
CHANGED
|
@@ -77,21 +77,21 @@ export default {
|
|
|
77
77
|
changeHeading: 'Results',
|
|
78
78
|
changeCount: '{1}/{0} changes',
|
|
79
79
|
noChangeCount: '0/{0} changes',
|
|
80
|
-
legacyInfo: `<p>uSync has found a legacy uSync folder at <strong>%0%</strong>.<br />
|
|
80
|
+
legacyInfo: `<p>uSync has found a legacy uSync folder at <strong>%0%</strong>.<br />
|
|
81
81
|
Its likely that the content in it will need coverting in someway</p>`,
|
|
82
|
-
legacyObsolete: `<h4>Obsolete DataTypes</h4>
|
|
83
|
-
<ul>%0%</ul>
|
|
84
|
-
<p>You can convert these DataTypes using
|
|
85
|
-
<a href="https://github.com/Jumoo/uSyncMigrations" target="_blank">uSync.Migrations</a><br />
|
|
82
|
+
legacyObsolete: `<h4>Obsolete DataTypes</h4>
|
|
83
|
+
<ul>%0%</ul>
|
|
84
|
+
<p>You can convert these DataTypes using
|
|
85
|
+
<a href="https://github.com/Jumoo/uSyncMigrations" target="_blank">uSync.Migrations</a><br />
|
|
86
86
|
<em>(In the full uSync release conversion will happen here.)</em></p>`,
|
|
87
|
-
legacyCopy: `<h4>Copy to uSync/v14</h4>
|
|
88
|
-
<p>You can copy your %0% folder to the ~/uSync/v14 folder<br />and run an import.</p>
|
|
89
|
-
<p>If nothing needs converting, then everything should import.</p>
|
|
87
|
+
legacyCopy: `<h4>Copy to uSync/v14</h4>
|
|
88
|
+
<p>You can copy your %0% folder to the ~/uSync/v14 folder<br />and run an import.</p>
|
|
89
|
+
<p>If nothing needs converting, then everything should import.</p>
|
|
90
90
|
<p><strong>Remove or rename the %0% folder to prevent this popup</strong></p>`,
|
|
91
|
-
hmacMismatch: `<h4>HMAC Mismatch <uui-icon name="alert"></uui-icon></h4>
|
|
92
|
-
<p>It looks like the <code>Imaging:HMAC</code> setting used to generate the files in the uSync folder does not match the current setting for this site.</p>
|
|
93
|
-
<p>Images inside RTE controls will have the HMAC Value appended to the URL value, and without any additional configuration, these images may not render correctly.</p>
|
|
94
|
-
<ul><li>You can turn on "HMAC mapping" in uSync,</li>
|
|
91
|
+
hmacMismatch: `<h4>HMAC Mismatch <uui-icon name="alert"></uui-icon></h4>
|
|
92
|
+
<p>It looks like the <code>Imaging:HMAC</code> setting used to generate the files in the uSync folder does not match the current setting for this site.</p>
|
|
93
|
+
<p>Images inside RTE controls will have the HMAC Value appended to the URL value, and without any additional configuration, these images may not render correctly.</p>
|
|
94
|
+
<ul><li>You can turn on "HMAC mapping" in uSync,</li>
|
|
95
95
|
<li>or you can ensure the HMAC value in the <code>Imaging:HMAC</code> setting matches the value used to generate the files in the uSync folder</li></ul>`,
|
|
96
96
|
formatMismatch: 'The sync file format version does not match the expected version. This may indicate a potential compatibility issue.',
|
|
97
97
|
legacyBanner: 'This site contains files from a previous version of uSync, view the details in the legacy tab.',
|
package/dist/lang/files/es-es.js
CHANGED
|
@@ -46,21 +46,21 @@ export default {
|
|
|
46
46
|
changeHeading: 'Resultados',
|
|
47
47
|
changeCount: '{1}/{0} cambios',
|
|
48
48
|
noChangeCount: '0/{0} cambios',
|
|
49
|
-
legacyInfo: `<p>uSync ha encontrado una carpeta uSync heredada en <strong>%0%</strong>.<br />
|
|
49
|
+
legacyInfo: `<p>uSync ha encontrado una carpeta uSync heredada en <strong>%0%</strong>.<br />
|
|
50
50
|
Es probable que su contenido necesite convertirse de alguna manera</p>`,
|
|
51
|
-
legacyObsolete: `<h4>Tipos de datos obsoletos</h4>
|
|
52
|
-
<ul>%0%</ul>
|
|
53
|
-
<p>Puede convertir estos tipos de datos usando
|
|
54
|
-
<a href="https://github.com/Jumoo/uSyncMigrations" target="_blank">uSync.Migrations</a><br />
|
|
51
|
+
legacyObsolete: `<h4>Tipos de datos obsoletos</h4>
|
|
52
|
+
<ul>%0%</ul>
|
|
53
|
+
<p>Puede convertir estos tipos de datos usando
|
|
54
|
+
<a href="https://github.com/Jumoo/uSyncMigrations" target="_blank">uSync.Migrations</a><br />
|
|
55
55
|
<em>(En la versión completa de uSync, la conversión se realizará aquí.)</em></p>`,
|
|
56
|
-
legacyCopy: `<h4>Copiar a uSync/v14</h4>
|
|
57
|
-
<p>Puede copiar su carpeta %0% a la carpeta ~/uSync/v14<br />y ejecutar una importación.</p>
|
|
58
|
-
<p>Si nada necesita convertirse, todo debería importarse correctamente.</p>
|
|
56
|
+
legacyCopy: `<h4>Copiar a uSync/v14</h4>
|
|
57
|
+
<p>Puede copiar su carpeta %0% a la carpeta ~/uSync/v14<br />y ejecutar una importación.</p>
|
|
58
|
+
<p>Si nada necesita convertirse, todo debería importarse correctamente.</p>
|
|
59
59
|
<p><strong>Elimine o cambie el nombre de la carpeta %0% para evitar este popup</strong></p>`,
|
|
60
|
-
hmacMismatch: `<h4>Discrepancia HMAC <uui-icon name="alert"></uui-icon></h4>
|
|
61
|
-
<p>Parece que la configuración <code>Imaging:HMAC</code> utilizada para generar los archivos en la carpeta uSync no coincide con la configuración actual de este sitio.</p>
|
|
62
|
-
<p>Las imágenes dentro de los controles RTE tendrán el valor HMAC añadido a la URL, y sin configuración adicional, estas imágenes pueden no mostrarse correctamente.</p>
|
|
63
|
-
<ul><li>Puede activar el "mapeo HMAC" en uSync,</li>
|
|
60
|
+
hmacMismatch: `<h4>Discrepancia HMAC <uui-icon name="alert"></uui-icon></h4>
|
|
61
|
+
<p>Parece que la configuración <code>Imaging:HMAC</code> utilizada para generar los archivos en la carpeta uSync no coincide con la configuración actual de este sitio.</p>
|
|
62
|
+
<p>Las imágenes dentro de los controles RTE tendrán el valor HMAC añadido a la URL, y sin configuración adicional, estas imágenes pueden no mostrarse correctamente.</p>
|
|
63
|
+
<ul><li>Puede activar el "mapeo HMAC" en uSync,</li>
|
|
64
64
|
<li>o puede asegurarse de que el valor HMAC en la configuración <code>Imaging:HMAC</code> coincida con el valor utilizado para generar los archivos en la carpeta uSync</li></ul>`,
|
|
65
65
|
formatMismatch: 'La versión del formato del archivo de sincronización no coincide con la versión esperada. Esto puede indicar un posible problema de compatibilidad.',
|
|
66
66
|
legacyBanner: 'Este sitio contiene archivos de una versión anterior de uSync. Consulte los detalles en la pestaña Heredado.',
|
package/dist/lang/files/fr-fr.js
CHANGED
|
@@ -46,21 +46,21 @@ export default {
|
|
|
46
46
|
changeHeading: 'Résultats',
|
|
47
47
|
changeCount: '{1}/{0} modifications',
|
|
48
48
|
noChangeCount: '0/{0} modifications',
|
|
49
|
-
legacyInfo: `<p>uSync a trouvé un dossier uSync hérité à <strong>%0%</strong>.<br />
|
|
49
|
+
legacyInfo: `<p>uSync a trouvé un dossier uSync hérité à <strong>%0%</strong>.<br />
|
|
50
50
|
Il est probable que son contenu devra être converti d'une façon ou d'une autre</p>`,
|
|
51
|
-
legacyObsolete: `<h4>Types de données obsolètes</h4>
|
|
52
|
-
<ul>%0%</ul>
|
|
53
|
-
<p>Vous pouvez convertir ces types de données en utilisant
|
|
54
|
-
<a href="https://github.com/Jumoo/uSyncMigrations" target="_blank">uSync.Migrations</a><br />
|
|
51
|
+
legacyObsolete: `<h4>Types de données obsolètes</h4>
|
|
52
|
+
<ul>%0%</ul>
|
|
53
|
+
<p>Vous pouvez convertir ces types de données en utilisant
|
|
54
|
+
<a href="https://github.com/Jumoo/uSyncMigrations" target="_blank">uSync.Migrations</a><br />
|
|
55
55
|
<em>(Dans la version complète d'uSync, la conversion se fera ici.)</em></p>`,
|
|
56
|
-
legacyCopy: `<h4>Copier vers uSync/v14</h4>
|
|
57
|
-
<p>Vous pouvez copier votre dossier %0% vers le dossier ~/uSync/v14<br />et exécuter une importation.</p>
|
|
58
|
-
<p>Si rien ne nécessite de conversion, tout devrait s'importer correctement.</p>
|
|
56
|
+
legacyCopy: `<h4>Copier vers uSync/v14</h4>
|
|
57
|
+
<p>Vous pouvez copier votre dossier %0% vers le dossier ~/uSync/v14<br />et exécuter une importation.</p>
|
|
58
|
+
<p>Si rien ne nécessite de conversion, tout devrait s'importer correctement.</p>
|
|
59
59
|
<p><strong>Supprimez ou renommez le dossier %0% pour éviter cette popup</strong></p>`,
|
|
60
|
-
hmacMismatch: `<h4>Incompatibilité HMAC <uui-icon name="alert"></uui-icon></h4>
|
|
61
|
-
<p>Il semble que le paramètre <code>Imaging:HMAC</code> utilisé pour générer les fichiers dans le dossier uSync ne corresponde pas au paramètre actuel de ce site.</p>
|
|
62
|
-
<p>Les images dans les contrôles RTE auront la valeur HMAC ajoutée à l'URL, et sans configuration supplémentaire, ces images pourraient ne pas s'afficher correctement.</p>
|
|
63
|
-
<ul><li>Vous pouvez activer le "mappage HMAC" dans uSync,</li>
|
|
60
|
+
hmacMismatch: `<h4>Incompatibilité HMAC <uui-icon name="alert"></uui-icon></h4>
|
|
61
|
+
<p>Il semble que le paramètre <code>Imaging:HMAC</code> utilisé pour générer les fichiers dans le dossier uSync ne corresponde pas au paramètre actuel de ce site.</p>
|
|
62
|
+
<p>Les images dans les contrôles RTE auront la valeur HMAC ajoutée à l'URL, et sans configuration supplémentaire, ces images pourraient ne pas s'afficher correctement.</p>
|
|
63
|
+
<ul><li>Vous pouvez activer le "mappage HMAC" dans uSync,</li>
|
|
64
64
|
<li>ou vous pouvez vous assurer que la valeur HMAC dans le paramètre <code>Imaging:HMAC</code> correspond à la valeur utilisée pour générer les fichiers dans le dossier uSync</li></ul>`,
|
|
65
65
|
formatMismatch: 'La version du format du fichier de synchronisation ne correspond pas à la version attendue. Cela peut indiquer un problème de compatibilité potentiel.',
|
|
66
66
|
legacyBanner: 'Ce site contient des fichiers d\'une version précédente d\'uSync. Consultez les détails dans l\'onglet Héritage.',
|
package/dist/lang/files/nl-nl.js
CHANGED
|
@@ -46,21 +46,21 @@ export default {
|
|
|
46
46
|
changeHeading: 'Resultaten',
|
|
47
47
|
changeCount: '{1}/{0} wijzigingen',
|
|
48
48
|
noChangeCount: '0/{0} wijzigingen',
|
|
49
|
-
legacyInfo: `<p>uSync heeft een verouderde uSync-map gevonden op <strong>%0%</strong>.<br />
|
|
49
|
+
legacyInfo: `<p>uSync heeft een verouderde uSync-map gevonden op <strong>%0%</strong>.<br />
|
|
50
50
|
Het is waarschijnlijk dat de inhoud op de een of andere manier geconverteerd moet worden</p>`,
|
|
51
|
-
legacyObsolete: `<h4>Verouderde gegevenstypen</h4>
|
|
52
|
-
<ul>%0%</ul>
|
|
53
|
-
<p>U kunt deze gegevenstypen converteren met
|
|
54
|
-
<a href="https://github.com/Jumoo/uSyncMigrations" target="_blank">uSync.Migrations</a><br />
|
|
51
|
+
legacyObsolete: `<h4>Verouderde gegevenstypen</h4>
|
|
52
|
+
<ul>%0%</ul>
|
|
53
|
+
<p>U kunt deze gegevenstypen converteren met
|
|
54
|
+
<a href="https://github.com/Jumoo/uSyncMigrations" target="_blank">uSync.Migrations</a><br />
|
|
55
55
|
<em>(In de volledige uSync-release zal de conversie hier plaatsvinden.)</em></p>`,
|
|
56
|
-
legacyCopy: `<h4>Kopiëren naar uSync/v14</h4>
|
|
57
|
-
<p>U kunt uw %0%-map kopiëren naar de ~/uSync/v14-map<br />en een import uitvoeren.</p>
|
|
58
|
-
<p>Als er niets geconverteerd hoeft te worden, zou alles correct moeten importeren.</p>
|
|
56
|
+
legacyCopy: `<h4>Kopiëren naar uSync/v14</h4>
|
|
57
|
+
<p>U kunt uw %0%-map kopiëren naar de ~/uSync/v14-map<br />en een import uitvoeren.</p>
|
|
58
|
+
<p>Als er niets geconverteerd hoeft te worden, zou alles correct moeten importeren.</p>
|
|
59
59
|
<p><strong>Verwijder of hernoem de %0%-map om deze popup te voorkomen</strong></p>`,
|
|
60
|
-
hmacMismatch: `<h4>HMAC-mismatch <uui-icon name="alert"></uui-icon></h4>
|
|
61
|
-
<p>Het lijkt erop dat de <code>Imaging:HMAC</code>-instelling die werd gebruikt om de bestanden in de uSync-map te genereren, niet overeenkomt met de huidige instelling voor deze site.</p>
|
|
62
|
-
<p>Afbeeldingen in RTE-besturingselementen hebben de HMAC-waarde toegevoegd aan de URL-waarde, en zonder aanvullende configuratie worden deze afbeeldingen mogelijk niet correct weergegeven.</p>
|
|
63
|
-
<ul><li>U kunt "HMAC-mapping" inschakelen in uSync,</li>
|
|
60
|
+
hmacMismatch: `<h4>HMAC-mismatch <uui-icon name="alert"></uui-icon></h4>
|
|
61
|
+
<p>Het lijkt erop dat de <code>Imaging:HMAC</code>-instelling die werd gebruikt om de bestanden in de uSync-map te genereren, niet overeenkomt met de huidige instelling voor deze site.</p>
|
|
62
|
+
<p>Afbeeldingen in RTE-besturingselementen hebben de HMAC-waarde toegevoegd aan de URL-waarde, en zonder aanvullende configuratie worden deze afbeeldingen mogelijk niet correct weergegeven.</p>
|
|
63
|
+
<ul><li>U kunt "HMAC-mapping" inschakelen in uSync,</li>
|
|
64
64
|
<li>of u kunt ervoor zorgen dat de HMAC-waarde in de <code>Imaging:HMAC</code>-instelling overeenkomt met de waarde die werd gebruikt om de bestanden in de uSync-map te genereren</li></ul>`,
|
|
65
65
|
formatMismatch: 'De versie van het synchronisatiebestandsformaat komt niet overeen met de verwachte versie. Dit kan wijzen op een mogelijk compatibiliteitsprobleem.',
|
|
66
66
|
legacyBanner: 'Deze site bevat bestanden van een eerdere versie van uSync. Bekijk de details op het tabblad Verouderd.',
|
|
@@ -1,19 +1,20 @@
|
|
|
1
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
2
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
3
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
4
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
5
|
-
};
|
|
6
1
|
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
7
2
|
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
8
3
|
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
9
4
|
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
10
5
|
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
11
6
|
};
|
|
12
|
-
var
|
|
7
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
8
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
9
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
10
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
|
+
};
|
|
12
|
+
var _uSyncSignalRContext_instances, _uSyncSignalRContext_connection, _uSyncSignalRContext_auth, _uSyncSignalRContext_server, _uSyncSignalRContext_connect, _uSyncSignalRContext_clientId, _uSyncSignalRContext_connected, _uSyncSignalRContext_update, _uSyncSignalRContext_add, _uSyncSignalRContext_complete, _uSyncSignalRContext_setupConnection;
|
|
13
13
|
import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';
|
|
14
14
|
import { UmbObjectState } from '@umbraco-cms/backoffice/observable-api';
|
|
15
15
|
import { USYNC_SIGNALR_CONTEXT_TOKEN, } from '@jumoo/uSync';
|
|
16
16
|
import { UMB_AUTH_CONTEXT } from '@umbraco-cms/backoffice/auth';
|
|
17
|
+
import { UMB_SERVER_CONTEXT } from '@umbraco-cms/backoffice/server';
|
|
17
18
|
import * as signalR from '@jumoo/uSync/external/signalr';
|
|
18
19
|
import { uSyncSignalRReconnectPolicy } from './signalr-reconnect-policy.js';
|
|
19
20
|
export class uSyncSignalRContext extends UmbControllerBase {
|
|
@@ -21,6 +22,9 @@ export class uSyncSignalRContext extends UmbControllerBase {
|
|
|
21
22
|
super(host);
|
|
22
23
|
_uSyncSignalRContext_instances.add(this);
|
|
23
24
|
_uSyncSignalRContext_connection.set(this, void 0);
|
|
25
|
+
_uSyncSignalRContext_auth.set(this, void 0);
|
|
26
|
+
_uSyncSignalRContext_server.set(this, void 0);
|
|
27
|
+
_uSyncSignalRContext_clientId.set(this, null);
|
|
24
28
|
_uSyncSignalRContext_connected.set(this, new UmbObjectState(false));
|
|
25
29
|
this.connected = __classPrivateFieldGet(this, _uSyncSignalRContext_connected, "f").asObservable();
|
|
26
30
|
_uSyncSignalRContext_update.set(this, new UmbObjectState(undefined));
|
|
@@ -31,12 +35,12 @@ export class uSyncSignalRContext extends UmbControllerBase {
|
|
|
31
35
|
this.complete = __classPrivateFieldGet(this, _uSyncSignalRContext_complete, "f").asObservable();
|
|
32
36
|
this.provideContext(USYNC_SIGNALR_CONTEXT_TOKEN, this);
|
|
33
37
|
this.consumeContext(UMB_AUTH_CONTEXT, (auth) => {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
__classPrivateFieldGet(this, _uSyncSignalRContext_instances, "m",
|
|
38
|
+
__classPrivateFieldSet(this, _uSyncSignalRContext_auth, auth, "f");
|
|
39
|
+
__classPrivateFieldGet(this, _uSyncSignalRContext_instances, "m", _uSyncSignalRContext_connect).call(this);
|
|
40
|
+
});
|
|
41
|
+
this.consumeContext(UMB_SERVER_CONTEXT, (server) => {
|
|
42
|
+
__classPrivateFieldSet(this, _uSyncSignalRContext_server, server, "f");
|
|
43
|
+
__classPrivateFieldGet(this, _uSyncSignalRContext_instances, "m", _uSyncSignalRContext_connect).call(this);
|
|
40
44
|
});
|
|
41
45
|
}
|
|
42
46
|
hostConnected() {
|
|
@@ -49,7 +53,7 @@ export class uSyncSignalRContext extends UmbControllerBase {
|
|
|
49
53
|
});
|
|
50
54
|
}
|
|
51
55
|
getClientId() {
|
|
52
|
-
return __classPrivateFieldGet(this,
|
|
56
|
+
return __classPrivateFieldGet(this, _uSyncSignalRContext_clientId, "f");
|
|
53
57
|
}
|
|
54
58
|
/**
|
|
55
59
|
* Synchronous read of the current connection state - used by callers
|
|
@@ -75,11 +79,34 @@ export class uSyncSignalRContext extends UmbControllerBase {
|
|
|
75
79
|
__classPrivateFieldGet(this, _uSyncSignalRContext_update, "f").setValue({ message, count: 0, total: 1 });
|
|
76
80
|
}
|
|
77
81
|
}
|
|
78
|
-
_uSyncSignalRContext_connection = new WeakMap(), _uSyncSignalRContext_connected = new WeakMap(), _uSyncSignalRContext_update = new WeakMap(), _uSyncSignalRContext_add = new WeakMap(), _uSyncSignalRContext_complete = new WeakMap(), _uSyncSignalRContext_instances = new WeakSet(),
|
|
82
|
+
_uSyncSignalRContext_connection = new WeakMap(), _uSyncSignalRContext_auth = new WeakMap(), _uSyncSignalRContext_server = new WeakMap(), _uSyncSignalRContext_clientId = new WeakMap(), _uSyncSignalRContext_connected = new WeakMap(), _uSyncSignalRContext_update = new WeakMap(), _uSyncSignalRContext_add = new WeakMap(), _uSyncSignalRContext_complete = new WeakMap(), _uSyncSignalRContext_instances = new WeakSet(), _uSyncSignalRContext_connect = function _uSyncSignalRContext_connect() {
|
|
83
|
+
// either context being re-provided replaces the connection, so
|
|
84
|
+
// stop the old one rather than leave it running alongside.
|
|
85
|
+
if (__classPrivateFieldGet(this, _uSyncSignalRContext_connection, "f")) {
|
|
86
|
+
__classPrivateFieldGet(this, _uSyncSignalRContext_connection, "f").stop();
|
|
87
|
+
__classPrivateFieldSet(this, _uSyncSignalRContext_connection, undefined, "f");
|
|
88
|
+
__classPrivateFieldSet(this, _uSyncSignalRContext_clientId, null, "f");
|
|
89
|
+
__classPrivateFieldGet(this, _uSyncSignalRContext_connected, "f").setValue(false);
|
|
90
|
+
}
|
|
91
|
+
if (!__classPrivateFieldGet(this, _uSyncSignalRContext_auth, "f") || !__classPrivateFieldGet(this, _uSyncSignalRContext_server, "f"))
|
|
92
|
+
return;
|
|
93
|
+
if (!__classPrivateFieldGet(this, _uSyncSignalRContext_auth, "f").getOpenApiConfiguration())
|
|
94
|
+
return;
|
|
95
|
+
const connection = __classPrivateFieldGet(this, _uSyncSignalRContext_server, "f").getServerConnection();
|
|
96
|
+
// Older Umbraco versions do not expose this setting.
|
|
97
|
+
const skipNegotiation = 'getSignalRSkipNegotiation' in connection &&
|
|
98
|
+
typeof connection.getSignalRSkipNegotiation === 'function' &&
|
|
99
|
+
connection.getSignalRSkipNegotiation() === true;
|
|
100
|
+
__classPrivateFieldGet(this, _uSyncSignalRContext_instances, "m", _uSyncSignalRContext_setupConnection).call(this, '/umbraco/SyncHub', __classPrivateFieldGet(this, _uSyncSignalRContext_auth, "f"), skipNegotiation);
|
|
101
|
+
}, _uSyncSignalRContext_setupConnection = function _uSyncSignalRContext_setupConnection(url, auth, skipNegotiation) {
|
|
79
102
|
// the token is fetched on every (re)connect, so a reconnect after
|
|
80
103
|
// the original token has expired still authenticates.
|
|
81
104
|
__classPrivateFieldSet(this, _uSyncSignalRContext_connection, new signalR.HubConnectionBuilder()
|
|
82
|
-
.withUrl(url, {
|
|
105
|
+
.withUrl(url, {
|
|
106
|
+
accessTokenFactory: () => auth.getLatestToken(),
|
|
107
|
+
skipNegotiation,
|
|
108
|
+
transport: skipNegotiation ? signalR.HttpTransportType.WebSockets : undefined,
|
|
109
|
+
})
|
|
83
110
|
.withAutomaticReconnect(new uSyncSignalRReconnectPolicy())
|
|
84
111
|
.configureLogging(signalR.LogLevel.Warning)
|
|
85
112
|
.build(), "f");
|
|
@@ -92,19 +119,39 @@ _uSyncSignalRContext_connection = new WeakMap(), _uSyncSignalRContext_connected
|
|
|
92
119
|
__classPrivateFieldGet(this, _uSyncSignalRContext_connection, "f").on('complete', (data) => {
|
|
93
120
|
__classPrivateFieldGet(this, _uSyncSignalRContext_complete, "f").setValue(data);
|
|
94
121
|
});
|
|
95
|
-
__classPrivateFieldGet(this, _uSyncSignalRContext_connection, "f")
|
|
96
|
-
|
|
122
|
+
const connection = __classPrivateFieldGet(this, _uSyncSignalRContext_connection, "f");
|
|
123
|
+
// a stopped connection can still report state while it winds down,
|
|
124
|
+
// only the current one may update connected.
|
|
125
|
+
const setConnected = (connected) => {
|
|
126
|
+
if (__classPrivateFieldGet(this, _uSyncSignalRContext_connection, "f") !== connection)
|
|
127
|
+
return;
|
|
128
|
+
if (!connected)
|
|
129
|
+
__classPrivateFieldSet(this, _uSyncSignalRContext_clientId, null, "f");
|
|
130
|
+
__classPrivateFieldGet(this, _uSyncSignalRContext_connected, "f").setValue(connected);
|
|
131
|
+
};
|
|
132
|
+
// the connection id comes from the negotiate response, so when
|
|
133
|
+
// negotiation is skipped we have to ask the hub for it.
|
|
134
|
+
const onConnected = async () => {
|
|
135
|
+
const clientId = connection.connectionId ??
|
|
136
|
+
(await connection.invoke('GetConnectionId').catch(() => null));
|
|
137
|
+
if (__classPrivateFieldGet(this, _uSyncSignalRContext_connection, "f") !== connection)
|
|
138
|
+
return;
|
|
139
|
+
__classPrivateFieldSet(this, _uSyncSignalRContext_clientId, clientId, "f");
|
|
140
|
+
setConnected(true);
|
|
141
|
+
};
|
|
142
|
+
connection
|
|
143
|
+
.start()
|
|
144
|
+
.then(onConnected)
|
|
145
|
+
.catch((error) => {
|
|
146
|
+
// with negotiation skipped there is no transport fallback, so a
|
|
147
|
+
// blocked WebSocket ends here; status polling covers progress.
|
|
148
|
+
console.warn('uSync: SignalR connection failed', error);
|
|
149
|
+
setConnected(false);
|
|
97
150
|
});
|
|
98
151
|
// the client id changes on reconnect, requests made after this
|
|
99
152
|
// pick up the new one via getClientId().
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
__classPrivateFieldGet(this, _uSyncSignalRContext_connection, "f").onreconnected(() => {
|
|
104
|
-
__classPrivateFieldGet(this, _uSyncSignalRContext_connected, "f").setValue(true);
|
|
105
|
-
});
|
|
106
|
-
__classPrivateFieldGet(this, _uSyncSignalRContext_connection, "f").onclose(() => {
|
|
107
|
-
__classPrivateFieldGet(this, _uSyncSignalRContext_connected, "f").setValue(false);
|
|
108
|
-
});
|
|
153
|
+
connection.onreconnecting(() => setConnected(false));
|
|
154
|
+
connection.onreconnected(onConnected);
|
|
155
|
+
connection.onclose(() => setConnected(false));
|
|
109
156
|
};
|
|
110
157
|
export default uSyncSignalRContext;
|
|
@@ -37,17 +37,17 @@ let uSyncMenuElement = class uSyncMenuElement extends UmbElementMixin(LitElement
|
|
|
37
37
|
});
|
|
38
38
|
}
|
|
39
39
|
render() {
|
|
40
|
-
return html `<umb-menu-item-layout
|
|
41
|
-
label=${this.manifest.meta.label ?? this.manifest.name}
|
|
42
|
-
icon-name=${this.manifest.meta.icon ?? 'icon-bug'}
|
|
43
|
-
.href=${this.itemPath}
|
|
44
|
-
?has-Children=${this.hasChildren}
|
|
45
|
-
>${this.renderChildren()}
|
|
40
|
+
return html `<umb-menu-item-layout
|
|
41
|
+
label=${this.manifest.meta.label ?? this.manifest.name}
|
|
42
|
+
icon-name=${this.manifest.meta.icon ?? 'icon-bug'}
|
|
43
|
+
.href=${this.itemPath}
|
|
44
|
+
?has-Children=${this.hasChildren}
|
|
45
|
+
>${this.renderChildren()}
|
|
46
46
|
</umb-menu-item-layout>`;
|
|
47
47
|
}
|
|
48
48
|
renderChildren() {
|
|
49
|
-
return html `<umb-extension-slot
|
|
50
|
-
type="usync-menuItem"
|
|
49
|
+
return html `<umb-extension-slot
|
|
50
|
+
type="usync-menuItem"
|
|
51
51
|
default-element="umb-menu-item-default"></umb-extension-slot>`;
|
|
52
52
|
}
|
|
53
53
|
};
|
|
@@ -26,58 +26,58 @@ let SyncActionButtonElement = class SyncActionButtonElement extends UmbLitElemen
|
|
|
26
26
|
: this.renderSingleAction();
|
|
27
27
|
}
|
|
28
28
|
renderSingleAction() {
|
|
29
|
-
return html ` <uui-button
|
|
30
|
-
class="action-button"
|
|
31
|
-
.disabled=${this.disabled}
|
|
32
|
-
label=${this.localize.termOrDefault(`uSync_${this.button?.label}`, this.button?.label ?? '')}
|
|
33
|
-
color=${this.button?.color}
|
|
34
|
-
look=${this.button?.look}
|
|
35
|
-
state=${ifDefined(this.state)}
|
|
29
|
+
return html ` <uui-button
|
|
30
|
+
class="action-button"
|
|
31
|
+
.disabled=${this.disabled}
|
|
32
|
+
label=${this.localize.termOrDefault(`uSync_${this.button?.label}`, this.button?.label ?? '')}
|
|
33
|
+
color=${this.button?.color}
|
|
34
|
+
look=${this.button?.look}
|
|
35
|
+
state=${ifDefined(this.state)}
|
|
36
36
|
@click=${() => __classPrivateFieldGet(this, _SyncActionButtonElement_instances, "m", _SyncActionButtonElement_onClick).call(this, this.button)}></uui-button>`;
|
|
37
37
|
}
|
|
38
38
|
renderMultipleActions(parent) {
|
|
39
39
|
if (!this.button?.children)
|
|
40
40
|
return nothing;
|
|
41
41
|
const buttons = this.button?.children.map((item) => {
|
|
42
|
-
return html ` <uui-menu-item
|
|
43
|
-
.disabled=${this.disabled}
|
|
44
|
-
.label=${this.localize.termOrDefault(`uSync_${item.label}`, item.label)}
|
|
42
|
+
return html ` <uui-menu-item
|
|
43
|
+
.disabled=${this.disabled}
|
|
44
|
+
.label=${this.localize.termOrDefault(`uSync_${item.label}`, item.label)}
|
|
45
45
|
@click-label=${() => __classPrivateFieldGet(this, _SyncActionButtonElement_instances, "m", _SyncActionButtonElement_onClick).call(this, item)}></uui-menu-item>`;
|
|
46
46
|
});
|
|
47
47
|
if (buttons.length == 0)
|
|
48
48
|
return nothing;
|
|
49
49
|
const popoverId = `popover_${parent?.key}`;
|
|
50
|
-
return html `
|
|
51
|
-
<uui-button-group class="action-button">
|
|
52
|
-
<uui-button
|
|
53
|
-
.disabled=${this.disabled}
|
|
54
|
-
.label=${this.button.label}
|
|
55
|
-
color=${parent?.color}
|
|
56
|
-
look=${parent?.look}
|
|
57
|
-
@click=${() => __classPrivateFieldGet(this, _SyncActionButtonElement_instances, "m", _SyncActionButtonElement_onClick).call(this, this.button)}>
|
|
58
|
-
${this.localize.termOrDefault(`uSync_${this.button?.label}`, this.button?.label ?? '')}
|
|
59
|
-
</uui-button>
|
|
60
|
-
<uui-button
|
|
61
|
-
.disabled=${this.disabled}
|
|
62
|
-
popovertarget=${popoverId}
|
|
63
|
-
.label=${this.button.label}
|
|
64
|
-
color=${parent?.color}
|
|
65
|
-
look=${parent?.look}
|
|
66
|
-
compact>
|
|
67
|
-
<uui-symbol-expand
|
|
68
|
-
class="expand-symbol"
|
|
69
|
-
.open=${this._popoverOpen}></uui-symbol-expand>
|
|
70
|
-
</uui-button>
|
|
71
|
-
</uui-button-group>
|
|
72
|
-
|
|
73
|
-
<uui-popover-container
|
|
74
|
-
id=${popoverId}
|
|
75
|
-
placement="bottom-end"
|
|
76
|
-
@toggle=${__classPrivateFieldGet(this, _SyncActionButtonElement_instances, "m", _SyncActionButtonElement_onPopoverToggle)}>
|
|
77
|
-
<umb-popover-layout>
|
|
78
|
-
<uui-scroll-container> ${buttons} </uui-scroll-container>
|
|
79
|
-
</umb-popover-layout>
|
|
80
|
-
</uui-popover-container>
|
|
50
|
+
return html `
|
|
51
|
+
<uui-button-group class="action-button">
|
|
52
|
+
<uui-button
|
|
53
|
+
.disabled=${this.disabled}
|
|
54
|
+
.label=${this.button.label}
|
|
55
|
+
color=${parent?.color}
|
|
56
|
+
look=${parent?.look}
|
|
57
|
+
@click=${() => __classPrivateFieldGet(this, _SyncActionButtonElement_instances, "m", _SyncActionButtonElement_onClick).call(this, this.button)}>
|
|
58
|
+
${this.localize.termOrDefault(`uSync_${this.button?.label}`, this.button?.label ?? '')}
|
|
59
|
+
</uui-button>
|
|
60
|
+
<uui-button
|
|
61
|
+
.disabled=${this.disabled}
|
|
62
|
+
popovertarget=${popoverId}
|
|
63
|
+
.label=${this.button.label}
|
|
64
|
+
color=${parent?.color}
|
|
65
|
+
look=${parent?.look}
|
|
66
|
+
compact>
|
|
67
|
+
<uui-symbol-expand
|
|
68
|
+
class="expand-symbol"
|
|
69
|
+
.open=${this._popoverOpen}></uui-symbol-expand>
|
|
70
|
+
</uui-button>
|
|
71
|
+
</uui-button-group>
|
|
72
|
+
|
|
73
|
+
<uui-popover-container
|
|
74
|
+
id=${popoverId}
|
|
75
|
+
placement="bottom-end"
|
|
76
|
+
@toggle=${__classPrivateFieldGet(this, _SyncActionButtonElement_instances, "m", _SyncActionButtonElement_onPopoverToggle)}>
|
|
77
|
+
<umb-popover-layout>
|
|
78
|
+
<uui-scroll-container> ${buttons} </uui-scroll-container>
|
|
79
|
+
</umb-popover-layout>
|
|
80
|
+
</uui-popover-container>
|
|
81
81
|
`;
|
|
82
82
|
}
|
|
83
83
|
};
|
|
@@ -90,18 +90,18 @@ _SyncActionButtonElement_onClick = function _SyncActionButtonElement_onClick(ite
|
|
|
90
90
|
_SyncActionButtonElement_onPopoverToggle = function _SyncActionButtonElement_onPopoverToggle(e) {
|
|
91
91
|
this._popoverOpen = e.newState === 'open';
|
|
92
92
|
};
|
|
93
|
-
SyncActionButtonElement.styles = css `
|
|
94
|
-
.action-button {
|
|
95
|
-
min-width: 110px;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
.expand-symbol {
|
|
99
|
-
transform: rotate(90deg);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
.expand-symbol[open] {
|
|
103
|
-
transform: rotate(180deg);
|
|
104
|
-
}
|
|
93
|
+
SyncActionButtonElement.styles = css `
|
|
94
|
+
.action-button {
|
|
95
|
+
min-width: 110px;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.expand-symbol {
|
|
99
|
+
transform: rotate(90deg);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.expand-symbol[open] {
|
|
103
|
+
transform: rotate(180deg);
|
|
104
|
+
}
|
|
105
105
|
`;
|
|
106
106
|
__decorate([
|
|
107
107
|
property({ type: Object })
|
|
@@ -38,53 +38,53 @@ let uSyncFilePicker = class uSyncFilePicker extends UmbLitElement {
|
|
|
38
38
|
this.dispatchEvent(new uSyncFilePickerChangeEvent(this._file));
|
|
39
39
|
}
|
|
40
40
|
render() {
|
|
41
|
-
return html `<input
|
|
42
|
-
@click=${(e) => e.stopPropagation()}
|
|
43
|
-
type="file"
|
|
44
|
-
id="file"
|
|
45
|
-
this.accept=${this.accept}
|
|
46
|
-
@change=${this._onFilePickerChange} />
|
|
41
|
+
return html `<input
|
|
42
|
+
@click=${(e) => e.stopPropagation()}
|
|
43
|
+
type="file"
|
|
44
|
+
id="file"
|
|
45
|
+
this.accept=${this.accept}
|
|
46
|
+
@change=${this._onFilePickerChange} />
|
|
47
47
|
${this._renderFile()} ${this._renderButton()}`;
|
|
48
48
|
}
|
|
49
49
|
_renderFile() {
|
|
50
50
|
if (!this._file)
|
|
51
51
|
return nothing;
|
|
52
|
-
return html ` <div class="file">
|
|
53
|
-
<div>${this._file.name}</div>
|
|
54
|
-
<uui-button
|
|
55
|
-
@click="${() => this._removeFile()}"
|
|
56
|
-
compact
|
|
57
|
-
color="danger"
|
|
58
|
-
label="Remove">
|
|
59
|
-
<umb-icon name="icon-trash"></umb-icon>
|
|
60
|
-
</uui-button>
|
|
52
|
+
return html ` <div class="file">
|
|
53
|
+
<div>${this._file.name}</div>
|
|
54
|
+
<uui-button
|
|
55
|
+
@click="${() => this._removeFile()}"
|
|
56
|
+
compact
|
|
57
|
+
color="danger"
|
|
58
|
+
label="Remove">
|
|
59
|
+
<umb-icon name="icon-trash"></umb-icon>
|
|
60
|
+
</uui-button>
|
|
61
61
|
</div>`;
|
|
62
62
|
}
|
|
63
63
|
_renderButton() {
|
|
64
64
|
return this._file
|
|
65
65
|
? nothing
|
|
66
|
-
: html ` <uui-button
|
|
67
|
-
id="add-button"
|
|
68
|
-
look="placeholder"
|
|
69
|
-
label=${this.label}
|
|
66
|
+
: html ` <uui-button
|
|
67
|
+
id="add-button"
|
|
68
|
+
look="placeholder"
|
|
69
|
+
label=${this.label}
|
|
70
70
|
@click="${this._onUpload}"></uui-button>`;
|
|
71
71
|
}
|
|
72
72
|
};
|
|
73
73
|
uSyncFilePicker.styles = [
|
|
74
|
-
css `
|
|
75
|
-
.file {
|
|
76
|
-
display: flex;
|
|
77
|
-
align-items: center;
|
|
78
|
-
gap: var(--uui-size-space-2);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
#file {
|
|
82
|
-
display: none;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
#add-button {
|
|
86
|
-
width: 100%;
|
|
87
|
-
}
|
|
74
|
+
css `
|
|
75
|
+
.file {
|
|
76
|
+
display: flex;
|
|
77
|
+
align-items: center;
|
|
78
|
+
gap: var(--uui-size-space-2);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
#file {
|
|
82
|
+
display: none;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
#add-button {
|
|
86
|
+
width: 100%;
|
|
87
|
+
}
|
|
88
88
|
`,
|
|
89
89
|
];
|
|
90
90
|
__decorate([
|