@atlaskit/editor-plugin-extension 22.0.1 → 22.0.3

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/CHANGELOG.md CHANGED
@@ -1,5 +1,32 @@
1
1
  # @atlaskit/editor-plugin-extension
2
2
 
3
+ ## 22.0.3
4
+
5
+ ### Patch Changes
6
+
7
+ - [`8e4fd6774f6ec`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/8e4fd6774f6ec) -
8
+ Add Stage-0 ADF schema support for the `annotation` mark on `extension` nodes (ADF Change 111).
9
+ Adds the `with_annotation` and `root_only_with_annotation` Stage-0 variants and wires them into
10
+ the approved root and nested placements (doc root, panel, blockquote, expand, nestedExpand,
11
+ listItem, blockTaskItem, table cells), registers the matching validator specs, and adds
12
+ valid/invalid reference fixtures, with regenerated PM/JSON/validator artifacts. Scoped to
13
+ `extension` only (not `bodiedExtension`/`multiBodiedExtension`); the full schema is unchanged.
14
+ Editor/renderer acceptance of the mark is gated by `cc_maui_annotations_on_extensions`.
15
+
16
+ Allowing the `annotation` mark on `extension` requires its container nodes (panel, table cells,
17
+ list items, etc.) to permit the mark too, so they can hold an annotated extension child. This made
18
+ the renderer's `getIndexMatch` double-count text inside those containers, corrupting inline
19
+ text-comment anchoring. Fixed by skipping block containers during serialisation (they are still
20
+ walked through so their inner text is counted once); leaf nodes and media are unaffected.
21
+
22
+ - Updated dependencies
23
+
24
+ ## 22.0.2
25
+
26
+ ### Patch Changes
27
+
28
+ - Updated dependencies
29
+
3
30
  ## 22.0.1
4
31
 
5
32
  ### Patch Changes
@@ -7,8 +7,8 @@ Object.defineProperty(exports, "__esModule", {
7
7
  exports.extensionPlugin = void 0;
8
8
  var _uuid = require("uuid");
9
9
  var _extension = require("@atlaskit/adf-schema/extension");
10
- var _multiBodiedExtension = require("@atlaskit/adf-schema/multi-bodied-extension");
11
10
  var _inlineExtension = require("@atlaskit/adf-schema/inline-extension");
11
+ var _multiBodiedExtension = require("@atlaskit/adf-schema/multi-bodied-extension");
12
12
  var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
13
13
  var _fg = require("@atlaskit/platform-feature-flags/fg");
14
14
  var _actions = require("./editor-actions/actions");
@@ -49,7 +49,7 @@ var extensionPlugin = exports.extensionPlugin = function extensionPlugin(_ref) {
49
49
  nodes: function nodes() {
50
50
  var extensionNodes = [{
51
51
  name: 'extension',
52
- node: _extension.extension
52
+ node: (0, _fg.fg)('cc_maui_annotations_on_extensions') ? _extension.extensionWithAnnotationStage0 : _extension.extension
53
53
  }, {
54
54
  name: 'bodiedExtension',
55
55
  node: (0, _bodiedExtension.bodiedExtensionSpecWithFixedToDOM)()
@@ -6,8 +6,8 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.createPlugin = void 0;
8
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
- var _uuid = require("@atlaskit/adf-schema/uuid");
10
9
  var _setAttrs = require("@atlaskit/adf-schema/steps/set-attrs");
10
+ var _uuid = require("@atlaskit/adf-schema/uuid");
11
11
  var _safePlugin = require("@atlaskit/editor-common/safe-plugin");
12
12
  var _utils = require("@atlaskit/editor-common/utils");
13
13
  var _state = require("@atlaskit/editor-prosemirror/state");
@@ -8,8 +8,8 @@ exports.default = void 0;
8
8
  var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
9
9
  var _react = _interopRequireDefault(require("react"));
10
10
  var _reactLoadable = _interopRequireDefault(require("react-loadable"));
11
- var _isExperimentEnabled = require("@atlaskit/platform-feature-experiments/is-experiment-enabled");
12
11
  var _reactLooselyLazy = require("react-loosely-lazy");
12
+ var _isExperimentEnabled = require("@atlaskit/platform-feature-experiments/is-experiment-enabled");
13
13
  var _LoadingState = _interopRequireDefault(require("./LoadingState"));
14
14
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != (0, _typeof2.default)(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); } // oxlint-disable-next-line @atlassian/no-restricted-imports
15
15
  var loadConfigPanel = function loadConfigPanel() {
@@ -11,8 +11,8 @@ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/h
11
11
  var _react = require("react");
12
12
  var _react2 = require("@emotion/react");
13
13
  var _checkbox = require("@atlaskit/checkbox/checkbox");
14
- var _fieldset = require("@atlaskit/form/fieldset");
15
14
  var _field = _interopRequireDefault(require("@atlaskit/form/field"));
15
+ var _fieldset = require("@atlaskit/form/fieldset");
16
16
  var _FieldMessages = _interopRequireDefault(require("../FieldMessages"));
17
17
  var _types = require("../types");
18
18
  var _excluded = ["onChange", "value"];
@@ -10,10 +10,10 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
10
10
  var _react = _interopRequireWildcard(require("react"));
11
11
  var _react2 = require("@emotion/react");
12
12
  var _reactIntl = require("react-intl");
13
- var _tabs = _interopRequireDefault(require("@atlaskit/tabs/tabs"));
14
13
  var _tab = _interopRequireDefault(require("@atlaskit/tabs/tab"));
15
14
  var _tabList = _interopRequireDefault(require("@atlaskit/tabs/tab-list"));
16
15
  var _tabPanel = _interopRequireDefault(require("@atlaskit/tabs/tab-panel"));
16
+ var _tabs = _interopRequireDefault(require("@atlaskit/tabs/tabs"));
17
17
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
18
18
  /**
19
19
  * @jsxRuntime classic
@@ -1,2 +1,3 @@
1
1
  /* eslint-disable @atlaskit/editor/no-re-export */
2
+
2
3
  export { extensionPlugin } from '../extensionPlugin';
@@ -1,8 +1,8 @@
1
1
  // eslint-disable-next-line @atlaskit/platform/prefer-crypto-random-uuid -- Use crypto.randomUUID instead
2
2
  import { v4 as uuid } from 'uuid';
3
- import { extension } from '@atlaskit/adf-schema/extension';
4
- import { extensionFrame, multiBodiedExtension } from '@atlaskit/adf-schema/multi-bodied-extension';
3
+ import { extension, extensionWithAnnotationStage0 } from '@atlaskit/adf-schema/extension';
5
4
  import { inlineExtension } from '@atlaskit/adf-schema/inline-extension';
5
+ import { extensionFrame, multiBodiedExtension } from '@atlaskit/adf-schema/multi-bodied-extension';
6
6
  import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
7
7
  import { fg } from '@atlaskit/platform-feature-flags/fg';
8
8
  import { createEditSelectedExtensionAction, insertOrReplaceBodiedExtension, insertOrReplaceExtension } from './editor-actions/actions';
@@ -40,7 +40,7 @@ export const extensionPlugin = ({
40
40
  nodes() {
41
41
  const extensionNodes = [{
42
42
  name: 'extension',
43
- node: extension
43
+ node: fg('cc_maui_annotations_on_extensions') ? extensionWithAnnotationStage0 : extension
44
44
  }, {
45
45
  name: 'bodiedExtension',
46
46
  node: bodiedExtensionSpecWithFixedToDOM()
@@ -1,5 +1,5 @@
1
- import { uuid } from '@atlaskit/adf-schema/uuid';
2
1
  import { SetAttrsStep } from '@atlaskit/adf-schema/steps/set-attrs';
2
+ import { uuid } from '@atlaskit/adf-schema/uuid';
3
3
  import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
4
4
  import { stepAddsOneOf } from '@atlaskit/editor-common/utils';
5
5
  import { PluginKey } from '@atlaskit/editor-prosemirror/state';
@@ -1,8 +1,8 @@
1
1
  import React from 'react';
2
2
  import Loadable from 'react-loadable';
3
- import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
4
3
  // oxlint-disable-next-line @atlassian/no-restricted-imports
5
4
  import { lazyForPaint, LazySuspense } from 'react-loosely-lazy';
5
+ import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
6
6
  import LoadingState from './LoadingState';
7
7
  const loadConfigPanel = () => import( /* webpackChunkName: "@atlaskit-internal_editor-core-config-panel" */
8
8
  './ConfigPanelFieldsLoader').then(module => module.default);
@@ -9,8 +9,8 @@ import { Fragment, useCallback } from 'react';
9
9
  // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled, @typescript-eslint/consistent-type-imports
10
10
  import { css, jsx } from '@emotion/react';
11
11
  import { Checkbox as AKCheckbox } from '@atlaskit/checkbox/checkbox';
12
- import { Fieldset as AKFieldset } from '@atlaskit/form/fieldset';
13
12
  import Field from '@atlaskit/form/field';
13
+ import { Fieldset as AKFieldset } from '@atlaskit/form/fieldset';
14
14
  import FieldMessages from '../FieldMessages';
15
15
  import { ValidationError } from '../types';
16
16
  function validate(value, isRequired) {
@@ -7,10 +7,10 @@ import React, { useState } from 'react';
7
7
  // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
8
8
  import { css, jsx } from '@emotion/react';
9
9
  import { injectIntl } from 'react-intl';
10
- import Tabs from '@atlaskit/tabs/tabs';
11
10
  import Tab from '@atlaskit/tabs/tab';
12
11
  import TabList from '@atlaskit/tabs/tab-list';
13
12
  import TabPanel from '@atlaskit/tabs/tab-panel';
13
+ import Tabs from '@atlaskit/tabs/tabs';
14
14
  const panelWrapperStyles = css({
15
15
  flexGrow: 1,
16
16
  maxWidth: '100%'
@@ -1,2 +1,3 @@
1
1
  /* eslint-disable @atlaskit/editor/no-re-export */
2
+
2
3
  export { extensionPlugin } from '../extensionPlugin';
@@ -1,8 +1,8 @@
1
1
  // eslint-disable-next-line @atlaskit/platform/prefer-crypto-random-uuid -- Use crypto.randomUUID instead
2
2
  import { v4 as uuid } from 'uuid';
3
- import { extension } from '@atlaskit/adf-schema/extension';
4
- import { extensionFrame, multiBodiedExtension } from '@atlaskit/adf-schema/multi-bodied-extension';
3
+ import { extension, extensionWithAnnotationStage0 } from '@atlaskit/adf-schema/extension';
5
4
  import { inlineExtension } from '@atlaskit/adf-schema/inline-extension';
5
+ import { extensionFrame, multiBodiedExtension } from '@atlaskit/adf-schema/multi-bodied-extension';
6
6
  import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
7
7
  import { fg } from '@atlaskit/platform-feature-flags/fg';
8
8
  import { createEditSelectedExtensionAction, insertOrReplaceBodiedExtension as _insertOrReplaceBodiedExtension, insertOrReplaceExtension as _insertOrReplaceExtension } from './editor-actions/actions';
@@ -40,7 +40,7 @@ export var extensionPlugin = function extensionPlugin(_ref) {
40
40
  nodes: function nodes() {
41
41
  var extensionNodes = [{
42
42
  name: 'extension',
43
- node: extension
43
+ node: fg('cc_maui_annotations_on_extensions') ? extensionWithAnnotationStage0 : extension
44
44
  }, {
45
45
  name: 'bodiedExtension',
46
46
  node: bodiedExtensionSpecWithFixedToDOM()
@@ -1,8 +1,8 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
2
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
3
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
- import { uuid } from '@atlaskit/adf-schema/uuid';
5
4
  import { SetAttrsStep } from '@atlaskit/adf-schema/steps/set-attrs';
5
+ import { uuid } from '@atlaskit/adf-schema/uuid';
6
6
  import { SafePlugin } from '@atlaskit/editor-common/safe-plugin';
7
7
  import { stepAddsOneOf } from '@atlaskit/editor-common/utils';
8
8
  import { PluginKey } from '@atlaskit/editor-prosemirror/state';
@@ -1,8 +1,8 @@
1
1
  import React from 'react';
2
2
  import Loadable from 'react-loadable';
3
- import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
4
3
  // oxlint-disable-next-line @atlassian/no-restricted-imports
5
4
  import { lazyForPaint, LazySuspense } from 'react-loosely-lazy';
5
+ import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
6
6
  import LoadingState from './LoadingState';
7
7
  var loadConfigPanel = function loadConfigPanel() {
8
8
  return import( /* webpackChunkName: "@atlaskit-internal_editor-core-config-panel" */
@@ -12,8 +12,8 @@ import { Fragment, useCallback } from 'react';
12
12
  // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled, @typescript-eslint/consistent-type-imports
13
13
  import { css, jsx } from '@emotion/react';
14
14
  import { Checkbox as AKCheckbox } from '@atlaskit/checkbox/checkbox';
15
- import { Fieldset as AKFieldset } from '@atlaskit/form/fieldset';
16
15
  import Field from '@atlaskit/form/field';
16
+ import { Fieldset as AKFieldset } from '@atlaskit/form/fieldset';
17
17
  import FieldMessages from '../FieldMessages';
18
18
  import { ValidationError } from '../types';
19
19
  function _validate(value, isRequired) {
@@ -8,10 +8,10 @@ import React, { useState } from 'react';
8
8
  // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled -- Ignored via go/DSP-18766
9
9
  import { css, jsx } from '@emotion/react';
10
10
  import { injectIntl } from 'react-intl';
11
- import Tabs from '@atlaskit/tabs/tabs';
12
11
  import Tab from '@atlaskit/tabs/tab';
13
12
  import TabList from '@atlaskit/tabs/tab-list';
14
13
  import TabPanel from '@atlaskit/tabs/tab-panel';
14
+ import Tabs from '@atlaskit/tabs/tabs';
15
15
  var panelWrapperStyles = css({
16
16
  flexGrow: 1,
17
17
  maxWidth: '100%'
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
- import type { WithAnalyticsEventsProps } from '@atlaskit/analytics-next/withAnalyticsEvents';
3
2
  import type { WithContextProps } from '@atlaskit/analytics-next/withAnalyticsContext';
3
+ import type { WithAnalyticsEventsProps } from '@atlaskit/analytics-next/withAnalyticsEvents';
4
4
  import type { ExtensionManifest, FieldDefinition, OnSaveCallback, OnSaveCallbackAsync, Parameters } from '@atlaskit/editor-common/extensions';
5
5
  import type { ExtractInjectionAPI, FeatureFlags } from '@atlaskit/editor-common/types';
6
6
  import type { ExtensionPlugin, RejectSave } from '../../extensionPluginType';
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import type { WithIntlProps, WrappedComponentProps } from 'react-intl';
3
- import type { WithAnalyticsEventsProps } from '@atlaskit/analytics-next/withAnalyticsEvents';
4
3
  import type { WithContextProps } from '@atlaskit/analytics-next/withAnalyticsContext';
4
+ import type { WithAnalyticsEventsProps } from '@atlaskit/analytics-next/withAnalyticsEvents';
5
5
  import type { FieldDefinition } from '@atlaskit/editor-common/extensions';
6
6
  import type { ContextIdentifierProvider } from '@atlaskit/editor-common/provider-factory';
7
7
  interface Props {
@@ -3,6 +3,7 @@
3
3
  * @jsxRuntime classic
4
4
  * @jsx jsx
5
5
  */
6
+
6
7
  import { useEffect, useState } from 'react';
7
8
 
8
9
  // eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled, @typescript-eslint/consistent-type-imports
@@ -24,7 +25,6 @@ import TextArea from '@atlaskit/textarea/text-area';
24
25
  import { token } from '@atlaskit/tokens';
25
26
 
26
27
  import { useStateFromPromise } from '../../src/ui/ConfigPanel/use-state-from-promise';
27
-
28
28
  import ConfigPanelWithProviders from './ConfigPanelWithProviders';
29
29
  import type { CallbackParams } from './ExtensionNodePicker';
30
30
  import ExtensionNodePicker from './ExtensionNodePicker';
@@ -1,8 +1,11 @@
1
1
  /* eslint-disable @atlaskit/design-system/ensure-design-token-usage */
2
+
2
3
  import type { ReactNode } from 'react';
3
4
  import React, { useState } from 'react';
4
5
 
5
6
  import Loadable from 'react-loadable';
7
+ // oxlint-disable-next-line @atlassian/no-restricted-imports
8
+ import { lazyForPaint, LazySuspense } from 'react-loosely-lazy';
6
9
 
7
10
  import type {
8
11
  ExtensionManifest,
@@ -19,8 +22,6 @@ import MenuGroup from '@atlaskit/menu/menu-group';
19
22
  import Section from '@atlaskit/menu/section';
20
23
  import { isExperimentEnabled } from '@atlaskit/platform-feature-experiments/is-experiment-enabled';
21
24
  import { token } from '@atlaskit/tokens';
22
- // oxlint-disable-next-line @atlassian/no-restricted-imports
23
- import { lazyForPaint, LazySuspense } from 'react-loosely-lazy';
24
25
 
25
26
  import { useStateFromPromise } from '../../src/ui/ConfigPanel/use-state-from-promise';
26
27
 
@@ -1,4 +1,5 @@
1
1
  /* eslint-disable @atlaskit/design-system/ensure-design-token-usage */
2
+
2
3
  import React, { useState } from 'react';
3
4
 
4
5
  import type { FieldDefinition } from '@atlaskit/editor-common/extensions';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/editor-plugin-extension",
3
- "version": "22.0.1",
3
+ "version": "22.0.3",
4
4
  "description": "editor-plugin-extension plugin for @atlaskit/editor-core",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
@@ -26,12 +26,12 @@
26
26
  ],
27
27
  "atlaskit:src": "src/index.ts",
28
28
  "dependencies": {
29
- "@atlaskit/adf-schema": "^57.5.0",
29
+ "@atlaskit/adf-schema": "^57.6.0",
30
30
  "@atlaskit/adf-utils": "^20.9.0",
31
31
  "@atlaskit/analytics-next": "^12.5.0",
32
32
  "@atlaskit/avatar": "^28.0.0",
33
33
  "@atlaskit/browser-apis": "^1.2.0",
34
- "@atlaskit/button": "^25.3.0",
34
+ "@atlaskit/button": "^25.4.0",
35
35
  "@atlaskit/checkbox": "^19.2.0",
36
36
  "@atlaskit/code": "^19.2.0",
37
37
  "@atlaskit/datetime-picker": "^18.7.0",
@@ -44,7 +44,7 @@
44
44
  "@atlaskit/editor-plugin-copy-button": "^19.0.0",
45
45
  "@atlaskit/editor-plugin-decorations": "^19.0.0",
46
46
  "@atlaskit/editor-plugin-feature-flags": "^18.0.0",
47
- "@atlaskit/editor-plugin-mentions": "^21.0.0",
47
+ "@atlaskit/editor-plugin-mentions": "^21.1.0",
48
48
  "@atlaskit/editor-plugin-toolbar": "^16.0.0",
49
49
  "@atlaskit/editor-plugin-width": "^20.0.0",
50
50
  "@atlaskit/editor-prosemirror": "^9.0.0",
@@ -69,7 +69,7 @@
69
69
  "@atlaskit/tabs": "^21.2.0",
70
70
  "@atlaskit/textarea": "^10.2.0",
71
71
  "@atlaskit/textfield": "^10.2.0",
72
- "@atlaskit/tmp-editor-statsig": "^200.0.0",
72
+ "@atlaskit/tmp-editor-statsig": "^201.0.0",
73
73
  "@atlaskit/toggle": "^17.3.0",
74
74
  "@atlaskit/tokens": "^18.2.0",
75
75
  "@atlaskit/tooltip": "^24.3.0",
@@ -85,7 +85,7 @@
85
85
  "uuid": "^11.1.1"
86
86
  },
87
87
  "peerDependencies": {
88
- "@atlaskit/editor-common": "^123.0.0",
88
+ "@atlaskit/editor-common": "^123.4.0",
89
89
  "react": "^18.2.0 || ^19.2.0",
90
90
  "react-intl": "^5.25.1 || ^6.0.0 || ^7.0.0"
91
91
  },
@@ -97,6 +97,9 @@
97
97
  "react-select": "^5.4.0"
98
98
  },
99
99
  "platform-feature-flags": {
100
+ "cc_maui_annotations_on_extensions": {
101
+ "type": "boolean"
102
+ },
100
103
  "platform_editor_adf_validator_stage0": {
101
104
  "type": "boolean"
102
105
  },