@ckeditor/ckeditor5-ui 38.0.1 → 38.1.0

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.
@@ -114,4 +114,4 @@ msgstr "Barra degli strumenti contestuale dell'editor"
114
114
 
115
115
  msgctxt "Label of an input field for typing colors in the HEX color format."
116
116
  msgid "HEX"
117
- msgstr ""
117
+ msgstr "HEX"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ckeditor/ckeditor5-ui",
3
- "version": "38.0.1",
3
+ "version": "38.1.0",
4
4
  "description": "The UI framework and standard UI library of CKEditor 5.",
5
5
  "keywords": [
6
6
  "ckeditor",
@@ -11,38 +11,13 @@
11
11
  ],
12
12
  "main": "src/index.js",
13
13
  "dependencies": {
14
- "@ckeditor/ckeditor5-core": "^38.0.1",
15
- "@ckeditor/ckeditor5-utils": "^38.0.1",
14
+ "@ckeditor/ckeditor5-core": "38.1.0",
15
+ "@ckeditor/ckeditor5-utils": "38.1.0",
16
16
  "color-convert": "2.0.1",
17
17
  "color-parse": "1.4.2",
18
18
  "lodash-es": "^4.17.15",
19
19
  "vanilla-colorful": "0.7.2"
20
20
  },
21
- "devDependencies": {
22
- "@ckeditor/ckeditor5-basic-styles": "^38.0.1",
23
- "@ckeditor/ckeditor5-block-quote": "^38.0.1",
24
- "@ckeditor/ckeditor5-editor-balloon": "^38.0.1",
25
- "@ckeditor/ckeditor5-editor-classic": "^38.0.1",
26
- "@ckeditor/ckeditor5-engine": "^38.0.1",
27
- "@ckeditor/ckeditor5-enter": "^38.0.1",
28
- "@ckeditor/ckeditor5-essentials": "^38.0.1",
29
- "@ckeditor/ckeditor5-find-and-replace": "^38.0.1",
30
- "@ckeditor/ckeditor5-font": "^38.0.1",
31
- "@ckeditor/ckeditor5-heading": "^38.0.1",
32
- "@ckeditor/ckeditor5-horizontal-line": "^38.0.1",
33
- "@ckeditor/ckeditor5-image": "^38.0.1",
34
- "@ckeditor/ckeditor5-link": "^38.0.1",
35
- "@ckeditor/ckeditor5-list": "^38.0.1",
36
- "@ckeditor/ckeditor5-mention": "^38.0.1",
37
- "@ckeditor/ckeditor5-paragraph": "^38.0.1",
38
- "@ckeditor/ckeditor5-source-editing": "^38.0.1",
39
- "@ckeditor/ckeditor5-table": "^38.0.1",
40
- "@ckeditor/ckeditor5-typing": "^38.0.1",
41
- "@types/color-convert": "2.0.0",
42
- "typescript": "^4.8.4",
43
- "webpack": "^5.58.1",
44
- "webpack-cli": "^4.9.0"
45
- },
46
21
  "engines": {
47
22
  "node": ">=16.0.0",
48
23
  "npm": ">=5.7.1"
@@ -64,9 +39,5 @@
64
39
  "ckeditor5-metadata.json",
65
40
  "CHANGELOG.md"
66
41
  ],
67
- "scripts": {
68
- "build": "tsc -p ./tsconfig.json",
69
- "postversion": "npm run build"
70
- },
71
42
  "types": "src/index.d.ts"
72
43
  }
@@ -51,7 +51,10 @@ export default class ColorPickerView extends View {
51
51
  this._hexColor = convertColorToCommonHexFormat(this.color);
52
52
  });
53
53
  this.on('change:_hexColor', () => {
54
- this.picker.setAttribute('color', this._hexColor);
54
+ // Should update color in color picker when its not focused
55
+ if (document.activeElement !== this.picker) {
56
+ this.picker.setAttribute('color', this._hexColor);
57
+ }
55
58
  // There has to be two way binding between properties.
56
59
  // Extra precaution has to be taken to trigger change back only when the color really changes.
57
60
  if (convertColorToCommonHexFormat(this.color) != convertColorToCommonHexFormat(this._hexColor)) {
@@ -38,6 +38,10 @@ export default class BodyCollection extends ViewCollection {
38
38
  * @param initialItems The initial items of the collection.
39
39
  */
40
40
  constructor(locale: Locale, initialItems?: Iterable<View>);
41
+ /**
42
+ * The element holding elements of the body region.
43
+ */
44
+ get bodyCollectionContainer(): HTMLElement | undefined;
41
45
  /**
42
46
  * Attaches the body collection to the DOM body element. You need to execute this method to render the content of
43
47
  * the body collection.
@@ -36,6 +36,12 @@ export default class BodyCollection extends ViewCollection {
36
36
  super(initialItems);
37
37
  this.locale = locale;
38
38
  }
39
+ /**
40
+ * The element holding elements of the body region.
41
+ */
42
+ get bodyCollectionContainer() {
43
+ return this._bodyCollectionContainer;
44
+ }
39
45
  /**
40
46
  * Attaches the body collection to the DOM body element. You need to execute this method to render the content of
41
47
  * the body collection.
@@ -211,6 +211,14 @@ export default abstract class EditorUI extends EditorUI_base {
211
211
  * @returns `true` when the toolbar candidate was focused. `false` otherwise.
212
212
  */
213
213
  private _focusFocusableCandidateToolbar;
214
+ /**
215
+ * Provides an integration between {@link #viewportOffset} and {@link module:utils/dom/scroll~scrollViewportToShowTarget}.
216
+ * It allows the UI-agnostic engine method to consider user-configured viewport offsets specific for the integration.
217
+ *
218
+ * @param evt The `scrollToTheSelection` event info.
219
+ * @param data The payload carried by the `scrollToTheSelection` event.
220
+ */
221
+ private _handleScrollToTheSelection;
214
222
  }
215
223
  /**
216
224
  * Fired when the editor UI is ready.
@@ -36,6 +36,7 @@ export default class EditorUI extends ObservableMixin() {
36
36
  * All available & focusable toolbars.
37
37
  */
38
38
  this._focusableToolbarDefinitions = [];
39
+ const editingView = editor.editing.view;
39
40
  this.editor = editor;
40
41
  this.componentFactory = new ComponentFactory(editor);
41
42
  this.focusTracker = new FocusTracker();
@@ -46,7 +47,8 @@ export default class EditorUI extends ObservableMixin() {
46
47
  this.isReady = true;
47
48
  });
48
49
  // Informs UI components that should be refreshed after layout change.
49
- this.listenTo(editor.editing.view.document, 'layoutChanged', () => this.update());
50
+ this.listenTo(editingView.document, 'layoutChanged', this.update.bind(this));
51
+ this.listenTo(editingView, 'scrollToTheSelection', this._handleScrollToTheSelection.bind(this));
50
52
  this._initFocusTracking();
51
53
  }
52
54
  /**
@@ -364,6 +366,26 @@ export default class EditorUI extends ObservableMixin() {
364
366
  toolbarView.focus();
365
367
  return true;
366
368
  }
369
+ /**
370
+ * Provides an integration between {@link #viewportOffset} and {@link module:utils/dom/scroll~scrollViewportToShowTarget}.
371
+ * It allows the UI-agnostic engine method to consider user-configured viewport offsets specific for the integration.
372
+ *
373
+ * @param evt The `scrollToTheSelection` event info.
374
+ * @param data The payload carried by the `scrollToTheSelection` event.
375
+ */
376
+ _handleScrollToTheSelection(evt, data) {
377
+ const configuredViewportOffset = {
378
+ top: 0,
379
+ bottom: 0,
380
+ left: 0,
381
+ right: 0,
382
+ ...this.viewportOffset
383
+ };
384
+ data.viewportOffset.top += configuredViewportOffset.top;
385
+ data.viewportOffset.bottom += configuredViewportOffset.bottom;
386
+ data.viewportOffset.left += configuredViewportOffset.left;
387
+ data.viewportOffset.right += configuredViewportOffset.right;
388
+ }
367
389
  }
368
390
  /**
369
391
  * Returns a number (weight) for a toolbar definition. Visible toolbars have a higher priority and so do
@@ -8,12 +8,7 @@
8
8
  import type { Editor } from '@ckeditor/ckeditor5-core';
9
9
  declare const PoweredBy_base: {
10
10
  new (): import("@ckeditor/ckeditor5-utils").DomEmitter;
11
- prototype: import("@ckeditor/ckeditor5-utils").DomEmitter; /**
12
- * Creates a "powered by" helper for a given editor. The feature is initialized on Editor#ready
13
- * event.
14
- *
15
- * @param editor
16
- */
11
+ prototype: import("@ckeditor/ckeditor5-utils").DomEmitter;
17
12
  };
18
13
  /**
19
14
  * A helper that enables the "powered by" feature in the editor and renders a link to the project's
@@ -10,6 +10,8 @@ import { throttle } from 'lodash-es';
10
10
  import poweredByIcon from '../../theme/icons/project-logo.svg';
11
11
  const ICON_WIDTH = 53;
12
12
  const ICON_HEIGHT = 10;
13
+ // ⚠ Note, whenever changing the threshold, make sure to update the docs/support/managing-ckeditor-logo.md docs
14
+ // as this information is also mentioned there ⚠.
13
15
  const NARROW_ROOT_HEIGHT_THRESHOLD = 50;
14
16
  const NARROW_ROOT_WIDTH_THRESHOLD = 350;
15
17
  const DEFAULT_LABEL = 'Powered by';
@@ -61,8 +63,9 @@ export default class PoweredBy extends DomEmitterMixin() {
61
63
  */
62
64
  _handleEditorReady() {
63
65
  const editor = this.editor;
66
+ const forceVisible = !!editor.config.get('ui.poweredBy.forceVisible');
64
67
  /* istanbul ignore next -- @preserve */
65
- if (verifyLicense(editor.config.get('licenseKey')) === 'VALID') {
68
+ if (!forceVisible && verifyLicense(editor.config.get('licenseKey')) === 'VALID') {
66
69
  return;
67
70
  }
68
71
  // No view means no body collection to append the powered by balloon to.
package/src/index.d.ts CHANGED
@@ -49,6 +49,7 @@ export { default as StickyPanelView } from './panel/sticky/stickypanelview';
49
49
  export { default as TooltipManager } from './tooltipmanager';
50
50
  export { default as Template, type TemplateDefinition } from './template';
51
51
  export { default as ToolbarView } from './toolbar/toolbarview';
52
+ export { default as ToolbarLineBreakView } from './toolbar/toolbarlinebreakview';
52
53
  export { default as ToolbarSeparatorView } from './toolbar/toolbarseparatorview';
53
54
  export { default as normalizeToolbarConfig } from './toolbar/normalizetoolbarconfig';
54
55
  export { default as BalloonToolbar, type BalloonToolbarShowEvent } from './toolbar/balloon/balloontoolbar';
package/src/index.js CHANGED
@@ -47,6 +47,7 @@ export { default as StickyPanelView } from './panel/sticky/stickypanelview';
47
47
  export { default as TooltipManager } from './tooltipmanager';
48
48
  export { default as Template } from './template';
49
49
  export { default as ToolbarView } from './toolbar/toolbarview';
50
+ export { default as ToolbarLineBreakView } from './toolbar/toolbarlinebreakview';
50
51
  export { default as ToolbarSeparatorView } from './toolbar/toolbarseparatorview';
51
52
  export { default as normalizeToolbarConfig } from './toolbar/normalizetoolbarconfig';
52
53
  export { default as BalloonToolbar } from './toolbar/balloon/balloontoolbar';
@@ -20,7 +20,7 @@ export default class Notification extends ContextPlugin {
20
20
  /**
21
21
  * @inheritDoc
22
22
  */
23
- static get pluginName(): 'Notification';
23
+ static get pluginName(): "Notification";
24
24
  /**
25
25
  * @inheritDoc
26
26
  */
@@ -106,7 +106,7 @@ export default class ContextualBalloon extends Plugin {
106
106
  /**
107
107
  * @inheritDoc
108
108
  */
109
- static get pluginName(): 'ContextualBalloon';
109
+ static get pluginName(): "ContextualBalloon";
110
110
  /**
111
111
  * @inheritDoc
112
112
  */
@@ -55,7 +55,7 @@ export default class BalloonToolbar extends Plugin {
55
55
  /**
56
56
  * @inheritDoc
57
57
  */
58
- static get pluginName(): 'BalloonToolbar';
58
+ static get pluginName(): "BalloonToolbar";
59
59
  /**
60
60
  * @inheritDoc
61
61
  */
@@ -86,7 +86,7 @@ export default class BlockToolbar extends Plugin {
86
86
  /**
87
87
  * @inheritDoc
88
88
  */
89
- static get pluginName(): 'BlockToolbar';
89
+ static get pluginName(): "BlockToolbar";
90
90
  /**
91
91
  * @inheritDoc
92
92
  */
@@ -131,6 +131,10 @@ export default class BlockToolbar extends Plugin {
131
131
  * If the toolbar is already visible, then it simply repositions it.
132
132
  */
133
133
  private _showPanel;
134
+ /**
135
+ * Returns currently selected editable, based on the model selection.
136
+ */
137
+ private _getSelectedEditableElement;
134
138
  /**
135
139
  * Hides the {@link #toolbarView}.
136
140
  *
@@ -144,8 +148,12 @@ export default class BlockToolbar extends Plugin {
144
148
  */
145
149
  private _attachButtonToElement;
146
150
  /**
147
- * Gets the {@link #toolbarView} max-width, based on
148
- * editable width plus distance between farthest edge of the {@link #buttonView} and the editable.
151
+ * Creates a resize observer that observes selected editable and resizes the toolbar panel accordingly.
152
+ */
153
+ private _setupToolbarResize;
154
+ /**
155
+ * Gets the {@link #toolbarView} max-width, based on given `editableElement` width plus the distance between the farthest
156
+ * edge of the {@link #buttonView} and the editable.
149
157
  *
150
158
  * @returns A maximum width that toolbar can have, in pixels.
151
159
  */
@@ -136,22 +136,11 @@ export default class BlockToolbar extends Plugin {
136
136
  * **Note:** This needs to be done after all plugins are ready.
137
137
  */
138
138
  afterInit() {
139
- const factory = this.editor.ui.componentFactory;
140
- const config = this._blockToolbarConfig;
141
- this.toolbarView.fillFromConfig(config, factory);
139
+ this.toolbarView.fillFromConfig(this._blockToolbarConfig, this.editor.ui.componentFactory);
142
140
  // Hide panel before executing each button in the panel.
143
141
  for (const item of this.toolbarView.items) {
144
142
  item.on('execute', () => this._hidePanel(true), { priority: 'high' });
145
143
  }
146
- if (!config.shouldNotGroupWhenFull) {
147
- this.listenTo(this.editor, 'ready', () => {
148
- const editableElement = this.editor.ui.view.editable.element;
149
- // Set #toolbarView's max-width just after the initialization and update it on the editable resize.
150
- this._resizeObserver = new ResizeObserver(editableElement, () => {
151
- this.toolbarView.maxWidth = this._getToolbarMaxWidth();
152
- });
153
- });
154
- }
155
144
  }
156
145
  /**
157
146
  * @inheritDoc
@@ -253,6 +242,8 @@ export default class BlockToolbar extends Plugin {
253
242
  const domTarget = view.domConverter.mapViewToDom(editor.editing.mapper.toViewElement(modelTarget));
254
243
  // Show block button.
255
244
  this.buttonView.isVisible = true;
245
+ // Make sure that the block toolbar panel is resized properly.
246
+ this._setupToolbarResize();
256
247
  // Attach block button to target DOM element.
257
248
  this._attachButtonToElement(domTarget);
258
249
  // When panel is opened then refresh it position to be properly aligned with block button.
@@ -303,15 +294,23 @@ export default class BlockToolbar extends Plugin {
303
294
  //
304
295
  // https://github.com/ckeditor/ckeditor5/issues/6449, https://github.com/ckeditor/ckeditor5/issues/6575
305
296
  this.panelView.show();
306
- this.toolbarView.maxWidth = this._getToolbarMaxWidth();
297
+ const editableElement = this._getSelectedEditableElement();
298
+ this.toolbarView.maxWidth = this._getToolbarMaxWidth(editableElement);
307
299
  this.panelView.pin({
308
300
  target: this.buttonView.element,
309
- limiter: this.editor.ui.getEditableElement()
301
+ limiter: editableElement
310
302
  });
311
303
  if (!wasVisible) {
312
304
  this.toolbarView.items.get(0).focus();
313
305
  }
314
306
  }
307
+ /**
308
+ * Returns currently selected editable, based on the model selection.
309
+ */
310
+ _getSelectedEditableElement() {
311
+ const selectedModelRootName = this.editor.model.document.selection.getFirstRange().root.rootName;
312
+ return this.editor.ui.getEditableElement(selectedModelRootName);
313
+ }
315
314
  /**
316
315
  * Hides the {@link #toolbarView}.
317
316
  *
@@ -330,9 +329,9 @@ export default class BlockToolbar extends Plugin {
330
329
  */
331
330
  _attachButtonToElement(targetElement) {
332
331
  const contentStyles = window.getComputedStyle(targetElement);
333
- const editableRect = new Rect(this.editor.ui.getEditableElement());
332
+ const editableRect = new Rect(this._getSelectedEditableElement());
334
333
  const contentPaddingTop = parseInt(contentStyles.paddingTop, 10);
335
- // When line height is not an integer then thread it as "normal".
334
+ // When line height is not an integer then treat it as "normal".
336
335
  // MDN says that 'normal' == ~1.2 on desktop browsers.
337
336
  const contentLineHeight = parseInt(contentStyles.lineHeight, 10) || parseInt(contentStyles.fontSize, 10) * 1.2;
338
337
  const position = getOptimalPosition({
@@ -358,13 +357,31 @@ export default class BlockToolbar extends Plugin {
358
357
  this.buttonView.left = position.left;
359
358
  }
360
359
  /**
361
- * Gets the {@link #toolbarView} max-width, based on
362
- * editable width plus distance between farthest edge of the {@link #buttonView} and the editable.
360
+ * Creates a resize observer that observes selected editable and resizes the toolbar panel accordingly.
361
+ */
362
+ _setupToolbarResize() {
363
+ const editableElement = this._getSelectedEditableElement();
364
+ // Do this only if the automatic grouping is turned on.
365
+ if (!this._blockToolbarConfig.shouldNotGroupWhenFull) {
366
+ // If resize observer is attached to a different editable than currently selected editable, re-attach it.
367
+ if (this._resizeObserver && this._resizeObserver.element !== editableElement) {
368
+ this._resizeObserver.destroy();
369
+ this._resizeObserver = null;
370
+ }
371
+ if (!this._resizeObserver) {
372
+ this._resizeObserver = new ResizeObserver(editableElement, () => {
373
+ this.toolbarView.maxWidth = this._getToolbarMaxWidth(editableElement);
374
+ });
375
+ }
376
+ }
377
+ }
378
+ /**
379
+ * Gets the {@link #toolbarView} max-width, based on given `editableElement` width plus the distance between the farthest
380
+ * edge of the {@link #buttonView} and the editable.
363
381
  *
364
382
  * @returns A maximum width that toolbar can have, in pixels.
365
383
  */
366
- _getToolbarMaxWidth() {
367
- const editableElement = this.editor.ui.view.editable.element;
384
+ _getToolbarMaxWidth(editableElement) {
368
385
  const editableRect = new Rect(editableElement);
369
386
  const buttonRect = new Rect(this.buttonView.element);
370
387
  const isRTL = this.editor.locale.uiLanguageDirection === 'rtl';
@@ -3,12 +3,12 @@
3
3
  * For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
4
4
  */
5
5
 
6
- .ck.ck-input {
7
- min-width: unset;
8
- }
9
-
10
6
  .color-picker-hex-input {
11
7
  width: max-content;
8
+
9
+ & .ck.ck-input {
10
+ min-width: unset;
11
+ }
12
12
  }
13
13
 
14
14
  .ck.ck-color-picker__row {
@@ -16,10 +16,10 @@
16
16
  .ck.ck-balloon-panel.ck-powered-by-balloon {
17
17
  --ck-border-radius: var(--ck-powered-by-border-radius);
18
18
 
19
- border: 0;
20
19
  box-shadow: none;
21
20
  background: var(--ck-powered-by-background);
22
21
  min-height: unset;
22
+ z-index: calc( var(--ck-z-modal) - 1 );
23
23
 
24
24
  & .ck.ck-powered-by {
25
25
  line-height: var(--ck-powered-by-line-height);
@@ -60,6 +60,10 @@
60
60
  }
61
61
  }
62
62
 
63
+ &[class*="position_inside"] {
64
+ border-color: transparent;
65
+ }
66
+
63
67
  &[class*="position_border"] {
64
68
  border: var(--ck-focus-ring);
65
69
  border-color: var(--ck-powered-by-border-color);
@@ -1 +1 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="53" height="10" viewBox="0 0 53 10"><g clip-path="url(#a)"><path fill="#1C2331" d="M31.724 1.492a15.139 15.139 0 0 0 .045 1.16 2.434 2.434 0 0 0-.687-.34 3.68 3.68 0 0 0-1.103-.166 2.332 2.332 0 0 0-1.14.255 1.549 1.549 0 0 0-.686.87c-.15.41-.225.98-.225 1.712 0 .939.148 1.659.444 2.161.297.503.792.754 1.487.754.452.015.9-.094 1.294-.316.296-.174.557-.4.771-.669l.14.852h1.282V.007h-1.623v1.485ZM31 6.496a1.77 1.77 0 0 1-.494.061.964.964 0 0 1-.521-.127.758.758 0 0 1-.296-.466 3.984 3.984 0 0 1-.093-.992 4.208 4.208 0 0 1 .098-1.052.753.753 0 0 1 .307-.477 1.08 1.08 0 0 1 .55-.122c.233-.004.466.026.69.089l.483.144v2.553c-.11.076-.213.143-.307.2a1.73 1.73 0 0 1-.417.189ZM35.68 0l-.702.004c-.322.002-.482.168-.48.497l.004.581c.002.33.164.493.486.49l.702-.004c.322-.002.481-.167.48-.496L36.165.49c-.002-.33-.164-.493-.486-.491ZM36.145 2.313l-1.612.01.034 5.482 1.613-.01-.035-5.482ZM39.623.79 37.989.8 38 2.306l-.946.056.006 1.009.949-.006.024 2.983c.003.476.143.844.419 1.106.275.26.658.39 1.148.387.132 0 .293-.01.483-.03.19-.02.38-.046.57-.08.163-.028.324-.068.482-.119l-.183-1.095-.702.004a.664.664 0 0 1-.456-.123.553.553 0 0 1-.14-.422l-.016-2.621 1.513-.01-.006-1.064-1.514.01-.01-1.503ZM46.226 2.388c-.41-.184-.956-.274-1.636-.27-.673.004-1.215.101-1.627.29-.402.179-.72.505-.888.91-.18.419-.268.979-.264 1.68.004.688.1 1.24.285 1.655.172.404.495.724.9.894.414.18.957.268 1.63.264.68-.004 1.224-.099 1.632-.284.4-.176.714-.501.878-.905.176-.418.263-.971.258-1.658-.004-.702-.097-1.261-.28-1.677a1.696 1.696 0 0 0-.888-.9Zm-.613 3.607a.77.77 0 0 1-.337.501 1.649 1.649 0 0 1-1.317.009.776.776 0 0 1-.343-.497 4.066 4.066 0 0 1-.105-1.02 4.136 4.136 0 0 1 .092-1.03.786.786 0 0 1 .337-.507 1.59 1.59 0 0 1 1.316-.008.79.79 0 0 1 .344.502c.078.337.113.683.105 1.03.012.343-.019.685-.092 1.02ZM52.114 2.07a2.67 2.67 0 0 0-1.128.278c-.39.191-.752.437-1.072.73l-.157-.846-1.273.008.036 5.572 1.623-.01-.024-3.78c.35-.124.646-.22.887-.286.26-.075.53-.114.8-.118l.45-.003.144-1.546-.286.001ZM22.083 7.426l-1.576-2.532a2.137 2.137 0 0 0-.172-.253 1.95 1.95 0 0 0-.304-.29.138.138 0 0 1 .042-.04 1.7 1.7 0 0 0 .328-.374l1.75-2.71c.01-.015.025-.028.024-.048-.01-.01-.021-.007-.031-.007L20.49 1.17a.078.078 0 0 0-.075.045l-.868 1.384c-.23.366-.46.732-.688 1.099a.108.108 0 0 1-.112.06c-.098-.005-.196-.001-.294-.002-.018 0-.038.006-.055-.007.002-.02.002-.039.005-.058a4.6 4.6 0 0 0 .046-.701V1.203c0-.02-.009-.032-.03-.03h-.033L16.93 1.17c-.084 0-.073-.01-.073.076v6.491c-.001.018.006.028.025.027h1.494c.083 0 .072.007.072-.071v-2.19c0-.055-.003-.11-.004-.166a3.366 3.366 0 0 0-.05-.417h.06c.104 0 .209.002.313-.002a.082.082 0 0 1 .084.05c.535.913 1.07 1.824 1.607 2.736a.104.104 0 0 0 .103.062c.554-.003 1.107-.002 1.66-.002l.069-.003-.019-.032-.188-.304ZM27.112 6.555c-.005-.08-.004-.08-.082-.08h-2.414c-.053 0-.106-.003-.159-.011a.279.279 0 0 1-.246-.209.558.558 0 0 1-.022-.15c0-.382 0-.762-.002-1.143 0-.032.007-.049.042-.044h2.504c.029.003.037-.012.034-.038V3.814c0-.089.013-.078-.076-.078h-2.44c-.07 0-.062.003-.062-.06v-.837c0-.047.004-.093.013-.14a.283.283 0 0 1 .241-.246.717.717 0 0 1 .146-.011h2.484c.024.002.035-.009.036-.033l.003-.038.03-.496c.01-.183.024-.365.034-.548.005-.085.003-.087-.082-.094-.218-.018-.437-.038-.655-.05a17.845 17.845 0 0 0-.657-.026 72.994 72.994 0 0 0-1.756-.016 1.7 1.7 0 0 0-.471.064 1.286 1.286 0 0 0-.817.655c-.099.196-.149.413-.145.633v3.875c0 .072.003.144.011.216a1.27 1.27 0 0 0 .711 1.029c.228.113.48.167.734.158.757-.005 1.515.002 2.272-.042.274-.016.548-.034.82-.053.03-.002.043-.008.04-.041-.008-.104-.012-.208-.019-.312a69.964 69.964 0 0 1-.05-.768ZM16.14 7.415l-.127-1.075c-.004-.03-.014-.04-.044-.037a13.125 13.125 0 0 1-.998.073c-.336.01-.672.02-1.008.016-.116-.001-.233-.014-.347-.039a.746.746 0 0 1-.45-.262c-.075-.1-.132-.211-.167-.33a3.324 3.324 0 0 1-.126-.773 9.113 9.113 0 0 1-.015-.749c0-.285.022-.57.065-.852.023-.158.066-.312.127-.46a.728.728 0 0 1 .518-.443 1.64 1.64 0 0 1 .397-.048c.628-.001 1.255.003 1.882.05.022.001.033-.006.036-.026l.003-.031.06-.55c.019-.177.036-.355.057-.532.004-.034-.005-.046-.04-.056a5.595 5.595 0 0 0-1.213-.21 10.783 10.783 0 0 0-.708-.02c-.24-.003-.48.01-.719.041a3.477 3.477 0 0 0-.625.14 1.912 1.912 0 0 0-.807.497c-.185.2-.33.433-.424.688a4.311 4.311 0 0 0-.24 1.096c-.031.286-.045.572-.042.86-.006.43.024.86.091 1.286.04.25.104.497.193.734.098.279.26.53.473.734.214.205.473.358.756.446.344.11.702.17 1.063.177a8.505 8.505 0 0 0 1.578-.083 6.11 6.11 0 0 0 .766-.18c.03-.008.047-.023.037-.057a.157.157 0 0 1-.003-.025Z"/><path fill="#AFE229" d="M6.016 6.69a1.592 1.592 0 0 0-.614.21c-.23.132-.422.32-.56.546-.044.072-.287.539-.287.539l-.836 1.528.009.006c.038.025.08.046.123.063.127.046.26.07.395.073.505.023 1.011-.007 1.517-.003.29.009.58.002.869-.022a.886.886 0 0 0 .395-.116.962.962 0 0 0 .312-.286c.056-.083.114-.163.164-.249.24-.408.48-.816.718-1.226.075-.128.148-.257.222-.386l.112-.192a1.07 1.07 0 0 0 .153-.518l-1.304.023s-1.258-.005-1.388.01Z"/><path fill="#771BFF" d="m2.848 9.044.76-1.39.184-.352c-.124-.067-.245-.14-.367-.21-.346-.204-.706-.384-1.045-.6a.984.984 0 0 1-.244-.207c-.108-.134-.136-.294-.144-.46-.021-.409-.002-.818-.009-1.227-.003-.195 0-.39.003-.585.004-.322.153-.553.427-.713l.833-.488c.22-.13.44-.257.662-.385.05-.029.105-.052.158-.077.272-.128.519-.047.76.085l.044.028c.123.06.242.125.358.196.318.178.635.357.952.537.095.056.187.117.275.184.194.144.254.35.266.578.016.284.007.569.006.853-.001.28.004.558 0 .838.592-.003 1.259 0 1.259 0l.723-.013c-.003-.292-.007-.584-.007-.876 0-.524.015-1.048-.016-1.571-.024-.42-.135-.8-.492-1.067a5.02 5.02 0 0 0-.506-.339A400.52 400.52 0 0 0 5.94.787C5.722.664 5.513.524 5.282.423 5.255.406 5.228.388 5.2.373 4.758.126 4.305-.026 3.807.21c-.097.046-.197.087-.29.14A699.896 699.896 0 0 0 .783 1.948c-.501.294-.773.717-.778 1.31-.004.36-.009.718-.001 1.077.016.754-.017 1.508.024 2.261.016.304.07.6.269.848.127.15.279.28.448.382.622.4 1.283.734 1.92 1.11l.183.109Z"/></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h52.4v10H0z"/></clipPath></defs></svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="53" height="10" viewBox="0 0 53 10"><path fill="#1C2331" d="M31.724 1.492a15.139 15.139 0 0 0 .045 1.16 2.434 2.434 0 0 0-.687-.34 3.68 3.68 0 0 0-1.103-.166 2.332 2.332 0 0 0-1.14.255 1.549 1.549 0 0 0-.686.87c-.15.41-.225.98-.225 1.712 0 .939.148 1.659.444 2.161.297.503.792.754 1.487.754.452.015.9-.094 1.294-.316.296-.174.557-.4.771-.669l.14.852h1.282V.007h-1.623v1.485ZM31 6.496a1.77 1.77 0 0 1-.494.061.964.964 0 0 1-.521-.127.758.758 0 0 1-.296-.466 3.984 3.984 0 0 1-.093-.992 4.208 4.208 0 0 1 .098-1.052.753.753 0 0 1 .307-.477 1.08 1.08 0 0 1 .55-.122c.233-.004.466.026.69.089l.483.144v2.553c-.11.076-.213.143-.307.2a1.73 1.73 0 0 1-.417.189ZM35.68 0l-.702.004c-.322.002-.482.168-.48.497l.004.581c.002.33.164.493.486.49l.702-.004c.322-.002.481-.167.48-.496L36.165.49c-.002-.33-.164-.493-.486-.491ZM36.145 2.313l-1.612.01.034 5.482 1.613-.01-.035-5.482ZM39.623.79 37.989.8 38 2.306l-.946.056.006 1.009.949-.006.024 2.983c.003.476.143.844.419 1.106.275.26.658.39 1.148.387.132 0 .293-.01.483-.03.19-.02.38-.046.57-.08.163-.028.324-.068.482-.119l-.183-1.095-.702.004a.664.664 0 0 1-.456-.123.553.553 0 0 1-.14-.422l-.016-2.621 1.513-.01-.006-1.064-1.514.01-.01-1.503ZM46.226 2.388c-.41-.184-.956-.274-1.636-.27-.673.004-1.215.101-1.627.29-.402.179-.72.505-.888.91-.18.419-.268.979-.264 1.68.004.688.1 1.24.285 1.655.172.404.495.724.9.894.414.18.957.268 1.63.264.68-.004 1.224-.099 1.632-.284.4-.176.714-.501.878-.905.176-.418.263-.971.258-1.658-.004-.702-.097-1.261-.28-1.677a1.696 1.696 0 0 0-.888-.9Zm-.613 3.607a.77.77 0 0 1-.337.501 1.649 1.649 0 0 1-1.317.009.776.776 0 0 1-.343-.497 4.066 4.066 0 0 1-.105-1.02 4.136 4.136 0 0 1 .092-1.03.786.786 0 0 1 .337-.507 1.59 1.59 0 0 1 1.316-.008.79.79 0 0 1 .344.502c.078.337.113.683.105 1.03.012.343-.019.685-.092 1.02ZM52.114 2.07a2.67 2.67 0 0 0-1.128.278c-.39.191-.752.437-1.072.73l-.157-.846-1.273.008.036 5.572 1.623-.01-.024-3.78c.35-.124.646-.22.887-.286.26-.075.53-.114.8-.118l.45-.003.144-1.546-.286.001ZM22.083 7.426l-1.576-2.532a2.137 2.137 0 0 0-.172-.253 1.95 1.95 0 0 0-.304-.29.138.138 0 0 1 .042-.04 1.7 1.7 0 0 0 .328-.374l1.75-2.71c.01-.015.025-.028.024-.048-.01-.01-.021-.007-.031-.007L20.49 1.17a.078.078 0 0 0-.075.045l-.868 1.384c-.23.366-.46.732-.688 1.099a.108.108 0 0 1-.112.06c-.098-.005-.196-.001-.294-.002-.018 0-.038.006-.055-.007.002-.02.002-.039.005-.058a4.6 4.6 0 0 0 .046-.701V1.203c0-.02-.009-.032-.03-.03h-.033L16.93 1.17c-.084 0-.073-.01-.073.076v6.491c-.001.018.006.028.025.027h1.494c.083 0 .072.007.072-.071v-2.19c0-.055-.003-.11-.004-.166a3.366 3.366 0 0 0-.05-.417h.06c.104 0 .209.002.313-.002a.082.082 0 0 1 .084.05c.535.913 1.07 1.824 1.607 2.736a.104.104 0 0 0 .103.062c.554-.003 1.107-.002 1.66-.002l.069-.003-.019-.032-.188-.304ZM27.112 6.555c-.005-.08-.004-.08-.082-.08h-2.414c-.053 0-.106-.003-.159-.011a.279.279 0 0 1-.246-.209.558.558 0 0 1-.022-.15c0-.382 0-.762-.002-1.143 0-.032.007-.049.042-.044h2.504c.029.003.037-.012.034-.038V3.814c0-.089.013-.078-.076-.078h-2.44c-.07 0-.062.003-.062-.06v-.837c0-.047.004-.093.013-.14a.283.283 0 0 1 .241-.246.717.717 0 0 1 .146-.011h2.484c.024.002.035-.009.036-.033l.003-.038.03-.496c.01-.183.024-.365.034-.548.005-.085.003-.087-.082-.094-.218-.018-.437-.038-.655-.05a17.845 17.845 0 0 0-.657-.026 72.994 72.994 0 0 0-1.756-.016 1.7 1.7 0 0 0-.471.064 1.286 1.286 0 0 0-.817.655c-.099.196-.149.413-.145.633v3.875c0 .072.003.144.011.216a1.27 1.27 0 0 0 .711 1.029c.228.113.48.167.734.158.757-.005 1.515.002 2.272-.042.274-.016.548-.034.82-.053.03-.002.043-.008.04-.041-.008-.104-.012-.208-.019-.312a69.964 69.964 0 0 1-.05-.768ZM16.14 7.415l-.127-1.075c-.004-.03-.014-.04-.044-.037a13.125 13.125 0 0 1-.998.073c-.336.01-.672.02-1.008.016-.116-.001-.233-.014-.347-.039a.746.746 0 0 1-.45-.262c-.075-.1-.132-.211-.167-.33a3.324 3.324 0 0 1-.126-.773 9.113 9.113 0 0 1-.015-.749c0-.285.022-.57.065-.852.023-.158.066-.312.127-.46a.728.728 0 0 1 .518-.443 1.64 1.64 0 0 1 .397-.048c.628-.001 1.255.003 1.882.05.022.001.033-.006.036-.026l.003-.031.06-.55c.019-.177.036-.355.057-.532.004-.034-.005-.046-.04-.056a5.595 5.595 0 0 0-1.213-.21 10.783 10.783 0 0 0-.708-.02c-.24-.003-.48.01-.719.041a3.477 3.477 0 0 0-.625.14 1.912 1.912 0 0 0-.807.497c-.185.2-.33.433-.424.688a4.311 4.311 0 0 0-.24 1.096c-.031.286-.045.572-.042.86-.006.43.024.86.091 1.286.04.25.104.497.193.734.098.279.26.53.473.734.214.205.473.358.756.446.344.11.702.17 1.063.177a8.505 8.505 0 0 0 1.578-.083 6.11 6.11 0 0 0 .766-.18c.03-.008.047-.023.037-.057a.157.157 0 0 1-.003-.025Z"/><path fill="#AFE229" d="M6.016 6.69a1.592 1.592 0 0 0-.614.21c-.23.132-.422.32-.56.546-.044.072-.287.539-.287.539l-.836 1.528.009.006c.038.025.08.046.123.063.127.046.26.07.395.073.505.023 1.011-.007 1.517-.003.29.009.58.002.869-.022a.886.886 0 0 0 .395-.116.962.962 0 0 0 .312-.286c.056-.083.114-.163.164-.249.24-.408.48-.816.718-1.226.075-.128.148-.257.222-.386l.112-.192a1.07 1.07 0 0 0 .153-.518l-1.304.023s-1.258-.005-1.388.01Z"/><path fill="#771BFF" d="m2.848 9.044.76-1.39.184-.352c-.124-.067-.245-.14-.367-.21-.346-.204-.706-.384-1.045-.6a.984.984 0 0 1-.244-.207c-.108-.134-.136-.294-.144-.46-.021-.409-.002-.818-.009-1.227-.003-.195 0-.39.003-.585.004-.322.153-.553.427-.713l.833-.488c.22-.13.44-.257.662-.385.05-.029.105-.052.158-.077.272-.128.519-.047.76.085l.044.028c.123.06.242.125.358.196.318.178.635.357.952.537.095.056.187.117.275.184.194.144.254.35.266.578.016.284.007.569.006.853-.001.28.004.558 0 .838.592-.003 1.259 0 1.259 0l.723-.013c-.003-.292-.007-.584-.007-.876 0-.524.015-1.048-.016-1.571-.024-.42-.135-.8-.492-1.067a5.02 5.02 0 0 0-.506-.339A400.52 400.52 0 0 0 5.94.787C5.722.664 5.513.524 5.282.423 5.255.406 5.228.388 5.2.373 4.758.126 4.305-.026 3.807.21c-.097.046-.197.087-.29.14A699.896 699.896 0 0 0 .783 1.948c-.501.294-.773.717-.778 1.31-.004.36-.009.718-.001 1.077.016.754-.017 1.508.024 2.261.016.304.07.6.269.848.127.15.279.28.448.382.622.4 1.283.734 1.92 1.11l.183.109Z"/></svg>