@wordpress/block-editor 15.5.1-next.ff1cebbba.0 → 15.6.1-next.36001005c.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.
Files changed (121) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/build/components/background-image-control/index.js +2 -2
  3. package/build/components/background-image-control/index.js.map +2 -2
  4. package/build/components/block-edit/edit.js +2 -2
  5. package/build/components/block-edit/edit.js.map +2 -2
  6. package/build/components/block-quick-navigation/index.js +1 -0
  7. package/build/components/block-quick-navigation/index.js.map +2 -2
  8. package/build/components/global-styles/border-panel.js +2 -1
  9. package/build/components/global-styles/border-panel.js.map +2 -2
  10. package/build/components/global-styles/color-panel.js +2 -1
  11. package/build/components/global-styles/color-panel.js.map +2 -2
  12. package/build/components/global-styles/dimensions-panel.js +3 -2
  13. package/build/components/global-styles/dimensions-panel.js.map +2 -2
  14. package/build/components/global-styles/filters-panel.js +2 -1
  15. package/build/components/global-styles/filters-panel.js.map +2 -2
  16. package/build/components/global-styles/hooks.js +23 -95
  17. package/build/components/global-styles/hooks.js.map +2 -2
  18. package/build/components/global-styles/index.js +0 -14
  19. package/build/components/global-styles/index.js.map +2 -2
  20. package/build/components/global-styles/typography-panel.js +2 -1
  21. package/build/components/global-styles/typography-panel.js.map +2 -2
  22. package/build/components/global-styles/typography-utils.js +2 -49
  23. package/build/components/global-styles/typography-utils.js.map +2 -2
  24. package/build/components/global-styles/utils.js +0 -377
  25. package/build/components/global-styles/utils.js.map +2 -2
  26. package/build/hooks/block-style-variation.js +6 -10
  27. package/build/hooks/block-style-variation.js.map +2 -2
  28. package/build/hooks/duotone.js +3 -3
  29. package/build/hooks/duotone.js.map +2 -2
  30. package/build/hooks/fit-text.js +17 -8
  31. package/build/hooks/fit-text.js.map +2 -2
  32. package/build/hooks/font-size.js +2 -2
  33. package/build/hooks/font-size.js.map +2 -2
  34. package/build/hooks/use-typography-props.js +2 -2
  35. package/build/hooks/use-typography-props.js.map +2 -2
  36. package/build/utils/fit-text-utils.js +4 -4
  37. package/build/utils/fit-text-utils.js.map +2 -2
  38. package/build-module/components/background-image-control/index.js +1 -1
  39. package/build-module/components/background-image-control/index.js.map +2 -2
  40. package/build-module/components/block-edit/edit.js +2 -2
  41. package/build-module/components/block-edit/edit.js.map +2 -2
  42. package/build-module/components/block-quick-navigation/index.js +1 -0
  43. package/build-module/components/block-quick-navigation/index.js.map +2 -2
  44. package/build-module/components/global-styles/border-panel.js +2 -1
  45. package/build-module/components/global-styles/border-panel.js.map +2 -2
  46. package/build-module/components/global-styles/color-panel.js +2 -1
  47. package/build-module/components/global-styles/color-panel.js.map +2 -2
  48. package/build-module/components/global-styles/dimensions-panel.js +2 -1
  49. package/build-module/components/global-styles/dimensions-panel.js.map +2 -2
  50. package/build-module/components/global-styles/filters-panel.js +2 -1
  51. package/build-module/components/global-styles/filters-panel.js.map +2 -2
  52. package/build-module/components/global-styles/hooks.js +27 -95
  53. package/build-module/components/global-styles/hooks.js.map +2 -2
  54. package/build-module/components/global-styles/index.js +0 -14
  55. package/build-module/components/global-styles/index.js.map +2 -2
  56. package/build-module/components/global-styles/typography-panel.js +2 -1
  57. package/build-module/components/global-styles/typography-panel.js.map +2 -2
  58. package/build-module/components/global-styles/typography-utils.js +1 -49
  59. package/build-module/components/global-styles/typography-utils.js.map +2 -2
  60. package/build-module/components/global-styles/utils.js +0 -364
  61. package/build-module/components/global-styles/utils.js.map +2 -2
  62. package/build-module/hooks/block-style-variation.js +4 -12
  63. package/build-module/hooks/block-style-variation.js.map +2 -2
  64. package/build-module/hooks/duotone.js +3 -3
  65. package/build-module/hooks/duotone.js.map +2 -2
  66. package/build-module/hooks/fit-text.js +18 -9
  67. package/build-module/hooks/fit-text.js.map +2 -2
  68. package/build-module/hooks/font-size.js +1 -1
  69. package/build-module/hooks/font-size.js.map +2 -2
  70. package/build-module/hooks/use-typography-props.js +1 -1
  71. package/build-module/hooks/use-typography-props.js.map +2 -2
  72. package/build-module/utils/fit-text-utils.js +4 -4
  73. package/build-module/utils/fit-text-utils.js.map +2 -2
  74. package/build-style/content-rtl.css +4 -0
  75. package/build-style/content.css +4 -0
  76. package/build-style/style-rtl.css +10 -6
  77. package/build-style/style.css +10 -6
  78. package/package.json +36 -35
  79. package/src/components/background-image-control/index.js +1 -1
  80. package/src/components/block-card/style.scss +1 -1
  81. package/src/components/block-edit/edit.js +2 -2
  82. package/src/components/block-navigation/style.scss +1 -1
  83. package/src/components/block-quick-navigation/index.js +1 -0
  84. package/src/components/block-quick-navigation/style.scss +5 -0
  85. package/src/components/block-switcher/style.scss +1 -1
  86. package/src/components/color-palette/test/__snapshots__/control.js.snap +1 -1
  87. package/src/components/global-styles/border-panel.js +2 -1
  88. package/src/components/global-styles/color-panel.js +2 -1
  89. package/src/components/global-styles/color-panel.native.js +1 -1
  90. package/src/components/global-styles/dimensions-panel.js +2 -1
  91. package/src/components/global-styles/filters-panel.js +2 -1
  92. package/src/components/global-styles/hooks.js +29 -108
  93. package/src/components/global-styles/index.js +0 -8
  94. package/src/components/global-styles/test/typography-utils.js +0 -806
  95. package/src/components/global-styles/test/utils.js +1 -442
  96. package/src/components/global-styles/typography-panel.js +2 -1
  97. package/src/components/global-styles/typography-utils.js +0 -133
  98. package/src/components/global-styles/utils.js +0 -537
  99. package/src/components/inserter/style.scss +2 -2
  100. package/src/components/link-control/test/index.js +7 -6
  101. package/src/components/multi-selection-inspector/style.scss +1 -1
  102. package/src/components/rich-text/content.scss +5 -0
  103. package/src/hooks/block-style-variation.js +4 -12
  104. package/src/hooks/duotone.js +3 -3
  105. package/src/hooks/fit-text.js +27 -11
  106. package/src/hooks/font-size.js +1 -1
  107. package/src/hooks/use-typography-props.js +1 -1
  108. package/src/style.scss +1 -0
  109. package/src/utils/fit-text-utils.js +16 -4
  110. package/tsconfig.json +1 -0
  111. package/build/components/global-styles/get-block-css-selector.js +0 -78
  112. package/build/components/global-styles/get-block-css-selector.js.map +0 -7
  113. package/build/components/global-styles/use-global-styles-output.js +0 -998
  114. package/build/components/global-styles/use-global-styles-output.js.map +0 -7
  115. package/build-module/components/global-styles/get-block-css-selector.js +0 -54
  116. package/build-module/components/global-styles/get-block-css-selector.js.map +0 -7
  117. package/build-module/components/global-styles/use-global-styles-output.js +0 -979
  118. package/build-module/components/global-styles/use-global-styles-output.js.map +0 -7
  119. package/src/components/global-styles/get-block-css-selector.js +0 -114
  120. package/src/components/global-styles/test/use-global-styles-output.js +0 -1131
  121. package/src/components/global-styles/use-global-styles-output.js +0 -1487
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { addFilter } from '@wordpress/hooks';
5
5
  import { hasBlockSupport } from '@wordpress/blocks';
6
- import { useEffect, useCallback } from '@wordpress/element';
6
+ import { useEffect, useCallback, useRef } from '@wordpress/element';
7
7
  import { useSelect } from '@wordpress/data';
8
8
  import { __ } from '@wordpress/i18n';
9
9
  import {
@@ -62,18 +62,28 @@ function useFitText( { fitText, name, clientId } ) {
62
62
  const hasFitTextSupport = hasBlockSupport( name, FIT_TEXT_SUPPORT_KEY );
63
63
  const blockElement = useBlockElement( clientId );
64
64
 
65
- // Monitor block attribute changes
65
+ // Monitor block attribute changes and selection state
66
66
  // Any attribute may change the available space.
67
- const blockAttributes = useSelect(
67
+ const { blockAttributes, isSelected } = useSelect(
68
68
  ( select ) => {
69
69
  if ( ! clientId ) {
70
- return;
70
+ return { blockAttributes: undefined, isSelected: false };
71
71
  }
72
- return select( blockEditorStore ).getBlockAttributes( clientId );
72
+ return {
73
+ blockAttributes:
74
+ select( blockEditorStore ).getBlockAttributes( clientId ),
75
+ isSelected:
76
+ select( blockEditorStore ).isBlockSelected( clientId ),
77
+ };
73
78
  },
74
79
  [ clientId ]
75
80
  );
76
81
 
82
+ const isSelectedRef = useRef();
83
+ useEffect( () => {
84
+ isSelectedRef.current = isSelected;
85
+ }, [ isSelected ] );
86
+
77
87
  const applyFitText = useCallback( () => {
78
88
  if ( ! blockElement || ! hasFitTextSupport || ! fitText ) {
79
89
  return;
@@ -94,8 +104,13 @@ function useFitText( { fitText, name, clientId } ) {
94
104
  styleElement.textContent = css;
95
105
  };
96
106
 
97
- optimizeFitText( blockElement, blockSelector, applyStylesFn );
98
- }, [ blockElement, clientId, hasFitTextSupport, fitText ] );
107
+ // Avoid very jarring resizes when a user is actively editing the
108
+ // block. Placing a ceiling on how much the block can grow curbs the
109
+ // effect of the first few keypresses.
110
+ const maxSize = isSelectedRef.current ? 200 : undefined;
111
+
112
+ optimizeFitText( blockElement, blockSelector, applyStylesFn, maxSize );
113
+ }, [ blockElement, clientId, hasFitTextSupport, fitText, isSelectedRef ] );
99
114
 
100
115
  useEffect( () => {
101
116
  if (
@@ -138,17 +153,18 @@ function useFitText( { fitText, name, clientId } ) {
138
153
  // Trigger fit text recalculation when content changes
139
154
  useEffect( () => {
140
155
  if ( fitText && blockElement && hasFitTextSupport ) {
141
- // Small delay to ensure DOM has updated after content changes
142
- const timer = setTimeout( () => {
156
+ // Wait for next frame to ensure DOM has updated after content changes
157
+ const frameId = window.requestAnimationFrame( () => {
143
158
  if ( blockElement ) {
144
159
  applyFitText();
145
160
  }
146
- }, 1000 );
161
+ } );
147
162
 
148
- return () => clearTimeout( timer );
163
+ return () => window.cancelAnimationFrame( frameId );
149
164
  }
150
165
  }, [
151
166
  blockAttributes,
167
+ isSelected,
152
168
  fitText,
153
169
  applyFitText,
154
170
  blockElement,
@@ -4,6 +4,7 @@
4
4
  import { addFilter } from '@wordpress/hooks';
5
5
  import { hasBlockSupport } from '@wordpress/blocks';
6
6
  import TokenList from '@wordpress/token-list';
7
+ import { getTypographyFontSizeValue } from '@wordpress/global-styles-engine';
7
8
 
8
9
  /**
9
10
  * Internal dependencies
@@ -21,7 +22,6 @@ import {
21
22
  shouldSkipSerialization,
22
23
  } from './utils';
23
24
  import { useSettings } from '../components/use-settings';
24
- import { getTypographyFontSizeValue } from '../components/global-styles/typography-utils';
25
25
 
26
26
  export const FONT_SIZE_SUPPORT_KEY = 'typography.fontSize';
27
27
 
@@ -7,13 +7,13 @@ import clsx from 'clsx';
7
7
  * WordPress dependencies
8
8
  */
9
9
  import { privateApis as componentsPrivateApis } from '@wordpress/components';
10
+ import { getTypographyFontSizeValue } from '@wordpress/global-styles-engine';
10
11
 
11
12
  /**
12
13
  * Internal dependencies
13
14
  */
14
15
  import { getInlineStyles } from './style';
15
16
  import { getFontSizeClass } from '../components/font-sizes';
16
- import { getTypographyFontSizeValue } from '../components/global-styles/typography-utils';
17
17
  import { unlock } from '../lock-unlock';
18
18
 
19
19
  const { kebabCase } = unlock( componentsPrivateApis );
package/src/style.scss CHANGED
@@ -20,6 +20,7 @@
20
20
  @use "./components/block-patterns-paging/style.scss" as *;
21
21
  @use "./components/block-popover/style.scss" as *;
22
22
  @use "./components/block-preview/style.scss" as *;
23
+ @use "./components/block-quick-navigation/style.scss" as *;
23
24
  @use "./components/block-rename/style.scss" as *;
24
25
  @use "./components/block-styles/style.scss" as *;
25
26
  @use "./components/block-switcher/style.scss" as *;
@@ -20,13 +20,18 @@ function generateCSSRule( elementSelector, fontSize ) {
20
20
  * @param {HTMLElement} textElement The text element
21
21
  * @param {string} elementSelector CSS selector for the text element
22
22
  * @param {Function} applyStylesFn Function to apply test styles
23
+ * @param {number} maxSize Maximum font size in pixels (default: 600)
23
24
  * @return {number} Optimal font size
24
25
  */
25
- function findOptimalFontSize( textElement, elementSelector, applyStylesFn ) {
26
+ function findOptimalFontSize(
27
+ textElement,
28
+ elementSelector,
29
+ applyStylesFn,
30
+ maxSize = 600
31
+ ) {
26
32
  const alreadyHasScrollableHeight =
27
33
  textElement.scrollHeight > textElement.clientHeight;
28
34
  let minSize = 5;
29
- let maxSize = 600;
30
35
  let bestSize = minSize;
31
36
 
32
37
  while ( minSize <= maxSize ) {
@@ -56,8 +61,14 @@ function findOptimalFontSize( textElement, elementSelector, applyStylesFn ) {
56
61
  * @param {HTMLElement} textElement The text element (paragraph, heading, etc.)
57
62
  * @param {string} elementSelector CSS selector for the text element
58
63
  * @param {Function} applyStylesFn Function to apply CSS styles (pass empty string to clear)
64
+ * @param {number} maxSize Maximum font size in pixels.
59
65
  */
60
- export function optimizeFitText( textElement, elementSelector, applyStylesFn ) {
66
+ export function optimizeFitText(
67
+ textElement,
68
+ elementSelector,
69
+ applyStylesFn,
70
+ maxSize
71
+ ) {
61
72
  if ( ! textElement ) {
62
73
  return;
63
74
  }
@@ -67,7 +78,8 @@ export function optimizeFitText( textElement, elementSelector, applyStylesFn ) {
67
78
  const optimalSize = findOptimalFontSize(
68
79
  textElement,
69
80
  elementSelector,
70
- applyStylesFn
81
+ applyStylesFn,
82
+ maxSize
71
83
  );
72
84
 
73
85
  const cssRule = generateCSSRule( elementSelector, optimalSize );
package/tsconfig.json CHANGED
@@ -14,6 +14,7 @@
14
14
  { "path": "../dom" },
15
15
  { "path": "../element" },
16
16
  { "path": "../escape-html" },
17
+ { "path": "../global-styles-engine" },
17
18
  { "path": "../priority-queue" },
18
19
  { "path": "../private-apis" },
19
20
  { "path": "../hooks" },
@@ -1,78 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var get_block_css_selector_exports = {};
20
- __export(get_block_css_selector_exports, {
21
- getBlockCSSSelector: () => getBlockCSSSelector
22
- });
23
- module.exports = __toCommonJS(get_block_css_selector_exports);
24
- var import_utils = require("./utils");
25
- var import_object = require("../../utils/object");
26
- function getBlockCSSSelector(blockType, target = "root", options = {}) {
27
- if (!target) {
28
- return null;
29
- }
30
- const { fallback = false } = options;
31
- const { name, selectors, supports } = blockType;
32
- const hasSelectors = selectors && Object.keys(selectors).length > 0;
33
- const path = Array.isArray(target) ? target.join(".") : target;
34
- let rootSelector = null;
35
- if (hasSelectors && selectors.root) {
36
- rootSelector = selectors?.root;
37
- } else if (supports?.__experimentalSelector) {
38
- rootSelector = supports.__experimentalSelector;
39
- } else {
40
- rootSelector = ".wp-block-" + name.replace("core/", "").replace("/", "-");
41
- }
42
- if (path === "root") {
43
- return rootSelector;
44
- }
45
- const pathArray = Array.isArray(target) ? target : target.split(".");
46
- if (pathArray.length === 1) {
47
- const fallbackSelector = fallback ? rootSelector : null;
48
- if (hasSelectors) {
49
- const featureSelector2 = (0, import_object.getValueFromObjectPath)(selectors, `${path}.root`, null) || (0, import_object.getValueFromObjectPath)(selectors, path, null);
50
- return featureSelector2 || fallbackSelector;
51
- }
52
- const featureSelector = (0, import_object.getValueFromObjectPath)(
53
- supports,
54
- `${path}.__experimentalSelector`,
55
- null
56
- );
57
- if (!featureSelector) {
58
- return fallbackSelector;
59
- }
60
- return (0, import_utils.scopeSelector)(rootSelector, featureSelector);
61
- }
62
- let subfeatureSelector;
63
- if (hasSelectors) {
64
- subfeatureSelector = (0, import_object.getValueFromObjectPath)(selectors, path, null);
65
- }
66
- if (subfeatureSelector) {
67
- return subfeatureSelector;
68
- }
69
- if (fallback) {
70
- return getBlockCSSSelector(blockType, pathArray[0], options);
71
- }
72
- return null;
73
- }
74
- // Annotate the CommonJS export names for ESM import in node:
75
- 0 && (module.exports = {
76
- getBlockCSSSelector
77
- });
78
- //# sourceMappingURL=get-block-css-selector.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/global-styles/get-block-css-selector.js"],
4
- "sourcesContent": ["/**\n * Internal dependencies\n */\nimport { scopeSelector } from './utils';\nimport { getValueFromObjectPath } from '../../utils/object';\n\n/**\n * Determine the CSS selector for the block type and target provided, returning\n * it if available.\n *\n * @param {import('@wordpress/blocks').Block} blockType The block's type.\n * @param {string|string[]} target The desired selector's target e.g. `root`, delimited string, or array path.\n * @param {Object} options Options object.\n * @param {boolean} options.fallback Whether or not to fallback to broader selector.\n *\n * @return {?string} The CSS selector or `null` if no selector available.\n */\nexport function getBlockCSSSelector(\n\tblockType,\n\ttarget = 'root',\n\toptions = {}\n) {\n\tif ( ! target ) {\n\t\treturn null;\n\t}\n\n\tconst { fallback = false } = options;\n\tconst { name, selectors, supports } = blockType;\n\n\tconst hasSelectors = selectors && Object.keys( selectors ).length > 0;\n\tconst path = Array.isArray( target ) ? target.join( '.' ) : target;\n\n\t// Root selector.\n\n\t// Calculated before returning as it can be used as a fallback for feature\n\t// selectors later on.\n\tlet rootSelector = null;\n\n\tif ( hasSelectors && selectors.root ) {\n\t\t// Use the selectors API if available.\n\t\trootSelector = selectors?.root;\n\t} else if ( supports?.__experimentalSelector ) {\n\t\t// Use the old experimental selector supports property if set.\n\t\trootSelector = supports.__experimentalSelector;\n\t} else {\n\t\t// If no root selector found, generate default block class selector.\n\t\trootSelector =\n\t\t\t'.wp-block-' + name.replace( 'core/', '' ).replace( '/', '-' );\n\t}\n\n\t// Return selector if it's the root target we are looking for.\n\tif ( path === 'root' ) {\n\t\treturn rootSelector;\n\t}\n\n\t// If target is not `root` or `duotone` we have a feature or subfeature\n\t// as the target. If the target is a string convert to an array.\n\tconst pathArray = Array.isArray( target ) ? target : target.split( '.' );\n\n\t// Feature selectors ( may fallback to root selector );\n\tif ( pathArray.length === 1 ) {\n\t\tconst fallbackSelector = fallback ? rootSelector : null;\n\n\t\t// Prefer the selectors API if available.\n\t\tif ( hasSelectors ) {\n\t\t\t// Get selector from either `feature.root` or shorthand path.\n\t\t\tconst featureSelector =\n\t\t\t\tgetValueFromObjectPath( selectors, `${ path }.root`, null ) ||\n\t\t\t\tgetValueFromObjectPath( selectors, path, null );\n\n\t\t\t// Return feature selector if found or any available fallback.\n\t\t\treturn featureSelector || fallbackSelector;\n\t\t}\n\n\t\t// Try getting old experimental supports selector value.\n\t\tconst featureSelector = getValueFromObjectPath(\n\t\t\tsupports,\n\t\t\t`${ path }.__experimentalSelector`,\n\t\t\tnull\n\t\t);\n\n\t\t// If nothing to work with, provide fallback selector if available.\n\t\tif ( ! featureSelector ) {\n\t\t\treturn fallbackSelector;\n\t\t}\n\n\t\t// Scope the feature selector by the block's root selector.\n\t\treturn scopeSelector( rootSelector, featureSelector );\n\t}\n\n\t// Subfeature selector.\n\t// This may fallback either to parent feature or root selector.\n\tlet subfeatureSelector;\n\n\t// Use selectors API if available.\n\tif ( hasSelectors ) {\n\t\tsubfeatureSelector = getValueFromObjectPath( selectors, path, null );\n\t}\n\n\t// Only return if we have a subfeature selector.\n\tif ( subfeatureSelector ) {\n\t\treturn subfeatureSelector;\n\t}\n\n\t// To this point we don't have a subfeature selector. If a fallback has been\n\t// requested, remove subfeature from target path and return results of a\n\t// call for the parent feature's selector.\n\tif ( fallback ) {\n\t\treturn getBlockCSSSelector( blockType, pathArray[ 0 ], options );\n\t}\n\n\t// We tried.\n\treturn null;\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,mBAA8B;AAC9B,oBAAuC;AAahC,SAAS,oBACf,WACA,SAAS,QACT,UAAU,CAAC,GACV;AACD,MAAK,CAAE,QAAS;AACf,WAAO;AAAA,EACR;AAEA,QAAM,EAAE,WAAW,MAAM,IAAI;AAC7B,QAAM,EAAE,MAAM,WAAW,SAAS,IAAI;AAEtC,QAAM,eAAe,aAAa,OAAO,KAAM,SAAU,EAAE,SAAS;AACpE,QAAM,OAAO,MAAM,QAAS,MAAO,IAAI,OAAO,KAAM,GAAI,IAAI;AAM5D,MAAI,eAAe;AAEnB,MAAK,gBAAgB,UAAU,MAAO;AAErC,mBAAe,WAAW;AAAA,EAC3B,WAAY,UAAU,wBAAyB;AAE9C,mBAAe,SAAS;AAAA,EACzB,OAAO;AAEN,mBACC,eAAe,KAAK,QAAS,SAAS,EAAG,EAAE,QAAS,KAAK,GAAI;AAAA,EAC/D;AAGA,MAAK,SAAS,QAAS;AACtB,WAAO;AAAA,EACR;AAIA,QAAM,YAAY,MAAM,QAAS,MAAO,IAAI,SAAS,OAAO,MAAO,GAAI;AAGvE,MAAK,UAAU,WAAW,GAAI;AAC7B,UAAM,mBAAmB,WAAW,eAAe;AAGnD,QAAK,cAAe;AAEnB,YAAMA,uBACL,sCAAwB,WAAW,GAAI,IAAK,SAAS,IAAK,SAC1D,sCAAwB,WAAW,MAAM,IAAK;AAG/C,aAAOA,oBAAmB;AAAA,IAC3B;AAGA,UAAM,sBAAkB;AAAA,MACvB;AAAA,MACA,GAAI,IAAK;AAAA,MACT;AAAA,IACD;AAGA,QAAK,CAAE,iBAAkB;AACxB,aAAO;AAAA,IACR;AAGA,eAAO,4BAAe,cAAc,eAAgB;AAAA,EACrD;AAIA,MAAI;AAGJ,MAAK,cAAe;AACnB,6BAAqB,sCAAwB,WAAW,MAAM,IAAK;AAAA,EACpE;AAGA,MAAK,oBAAqB;AACzB,WAAO;AAAA,EACR;AAKA,MAAK,UAAW;AACf,WAAO,oBAAqB,WAAW,UAAW,CAAE,GAAG,OAAQ;AAAA,EAChE;AAGA,SAAO;AACR;",
6
- "names": ["featureSelector"]
7
- }