@carbon/web-components 2.60.0-rc.0 → 2.60.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.
- package/custom-elements.json +54 -1
- package/es/components/feature-flags/index.d.ts +39 -4
- package/es/components/feature-flags/index.d.ts.map +1 -1
- package/es/components/feature-flags/index.js +43 -6
- package/es/components/feature-flags/index.js.map +1 -1
- package/es/packages/feature-flags/es/index.js +42 -2
- package/es/packages/feature-flags/es/index.js.map +1 -1
- package/es-custom/components/feature-flags/index.d.ts +39 -4
- package/es-custom/components/feature-flags/index.d.ts.map +1 -1
- package/es-custom/components/feature-flags/index.js +43 -6
- package/es-custom/components/feature-flags/index.js.map +1 -1
- package/es-custom/packages/feature-flags/es/index.js +42 -2
- package/es-custom/packages/feature-flags/es/index.js.map +1 -1
- package/lib/components/feature-flags/index.d.ts +39 -4
- package/lib/components/feature-flags/index.d.ts.map +1 -1
- package/package.json +6 -6
- package/telemetry.yml +10 -1
package/custom-elements.json
CHANGED
|
@@ -6892,7 +6892,60 @@
|
|
|
6892
6892
|
},
|
|
6893
6893
|
{
|
|
6894
6894
|
"name": "feature-flags",
|
|
6895
|
-
"path": "./src/components/feature-flags/index.ts"
|
|
6895
|
+
"path": "./src/components/feature-flags/index.ts",
|
|
6896
|
+
"description": "Feature Flags\n\nProvides scoped feature flags to child components. Flags are read from the\nnearest `<feature-flags>` ancestor, and nested elements inherit any flag they\ndo not set themselves.\n\nAttributes are declared below rather than inferred, because the flag list is\nbuilt at runtime from `observedAttributes` and cannot be read statically.",
|
|
6897
|
+
"attributes": [
|
|
6898
|
+
{
|
|
6899
|
+
"name": "enable-v12-release",
|
|
6900
|
+
"description": "Enable the features and functionality\nfor the v12 Release. Enabling this turns on every `enable-v12-*` flag at\nonce, as well as `enable-focus-wrap-without-sentinels`.",
|
|
6901
|
+
"type": "boolean"
|
|
6902
|
+
},
|
|
6903
|
+
{
|
|
6904
|
+
"name": "enable-v12-tile-default-icons",
|
|
6905
|
+
"description": "Enable rendering of default\nicons in the tile components. Becomes the default behavior in v12.",
|
|
6906
|
+
"type": "boolean"
|
|
6907
|
+
},
|
|
6908
|
+
{
|
|
6909
|
+
"name": "enable-v12-tile-radio-icons",
|
|
6910
|
+
"description": "Enable rendering of radio icons\nin the `cds-radio-tile` component. Becomes the default behavior in v12.",
|
|
6911
|
+
"type": "boolean"
|
|
6912
|
+
},
|
|
6913
|
+
{
|
|
6914
|
+
"name": "enable-v12-overflowmenu",
|
|
6915
|
+
"description": "Enable the use of the v12\n`cds-overflow-menu` leveraging the menu subcomponents. Becomes the default\nbehavior in v12.",
|
|
6916
|
+
"type": "boolean"
|
|
6917
|
+
},
|
|
6918
|
+
{
|
|
6919
|
+
"name": "enable-v12-dynamic-floating-styles",
|
|
6920
|
+
"description": "Enable dynamic setting\nof floating styles for components like `cds-popover`, `cds-tooltip`, etc.\nBecomes the default behavior in v12.",
|
|
6921
|
+
"type": "boolean"
|
|
6922
|
+
},
|
|
6923
|
+
{
|
|
6924
|
+
"name": "enable-v12-toggle-reduced-label-spacing",
|
|
6925
|
+
"description": "Enable a reduced\nspacing between the toggle control and its label. Becomes the default\nbehavior in v12.",
|
|
6926
|
+
"type": "boolean"
|
|
6927
|
+
},
|
|
6928
|
+
{
|
|
6929
|
+
"name": "enable-treeview-controllable",
|
|
6930
|
+
"description": "Enable the new `cds-treeview`\ncontrollable API.",
|
|
6931
|
+
"type": "boolean"
|
|
6932
|
+
},
|
|
6933
|
+
{
|
|
6934
|
+
"name": "enable-dialog-element",
|
|
6935
|
+
"description": "Enable components to utilize the\nnative `dialog` element.",
|
|
6936
|
+
"type": "boolean"
|
|
6937
|
+
},
|
|
6938
|
+
{
|
|
6939
|
+
"name": "enable-focus-wrap-without-sentinels",
|
|
6940
|
+
"description": "Enable the new focus\nwrap behavior that doesn't use sentinel nodes.",
|
|
6941
|
+
"type": "boolean"
|
|
6942
|
+
},
|
|
6943
|
+
{
|
|
6944
|
+
"name": "enable-experimental-focus-wrap-without-sentinels",
|
|
6945
|
+
"description": "Deprecated,\nuse `enable-focus-wrap-without-sentinels` instead.",
|
|
6946
|
+
"type": "boolean"
|
|
6947
|
+
}
|
|
6948
|
+
]
|
|
6896
6949
|
},
|
|
6897
6950
|
{
|
|
6898
6951
|
"name": "cds-file-uploader-button",
|
|
@@ -13,10 +13,8 @@
|
|
|
13
13
|
* <component></component>
|
|
14
14
|
* </feature-flags>
|
|
15
15
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* - enable-treeview-controllable
|
|
19
|
-
* - ... (and others listed in observedAttributes)
|
|
16
|
+
* The supported flags are documented as `@attr` tags on `FeatureFlagsElement`
|
|
17
|
+
* below, which is also what surfaces them in `custom-elements.json`.
|
|
20
18
|
*
|
|
21
19
|
* How to check a Flag in your component:
|
|
22
20
|
* import { isFeatureFlagEnabled } from './feature-flags';
|
|
@@ -24,6 +22,43 @@
|
|
|
24
22
|
* Returns true if the flag is enabled in the nearest <feature-flags> ancestor
|
|
25
23
|
*/
|
|
26
24
|
import { LitElement } from 'lit';
|
|
25
|
+
/**
|
|
26
|
+
* Feature Flags
|
|
27
|
+
*
|
|
28
|
+
* Provides scoped feature flags to child components. Flags are read from the
|
|
29
|
+
* nearest `<feature-flags>` ancestor, and nested elements inherit any flag they
|
|
30
|
+
* do not set themselves.
|
|
31
|
+
*
|
|
32
|
+
* Attributes are declared below rather than inferred, because the flag list is
|
|
33
|
+
* built at runtime from `observedAttributes` and cannot be read statically.
|
|
34
|
+
*
|
|
35
|
+
* @element feature-flags
|
|
36
|
+
*
|
|
37
|
+
* @attr {boolean} enable-v12-release - Enable the features and functionality
|
|
38
|
+
* for the v12 Release. Enabling this turns on every `enable-v12-*` flag at
|
|
39
|
+
* once, as well as `enable-focus-wrap-without-sentinels`.
|
|
40
|
+
* @attr {boolean} enable-v12-tile-default-icons - Enable rendering of default
|
|
41
|
+
* icons in the tile components. Becomes the default behavior in v12.
|
|
42
|
+
* @attr {boolean} enable-v12-tile-radio-icons - Enable rendering of radio icons
|
|
43
|
+
* in the `cds-radio-tile` component. Becomes the default behavior in v12.
|
|
44
|
+
* @attr {boolean} enable-v12-overflowmenu - Enable the use of the v12
|
|
45
|
+
* `cds-overflow-menu` leveraging the menu subcomponents. Becomes the default
|
|
46
|
+
* behavior in v12.
|
|
47
|
+
* @attr {boolean} enable-v12-dynamic-floating-styles - Enable dynamic setting
|
|
48
|
+
* of floating styles for components like `cds-popover`, `cds-tooltip`, etc.
|
|
49
|
+
* Becomes the default behavior in v12.
|
|
50
|
+
* @attr {boolean} enable-v12-toggle-reduced-label-spacing - Enable a reduced
|
|
51
|
+
* spacing between the toggle control and its label. Becomes the default
|
|
52
|
+
* behavior in v12.
|
|
53
|
+
* @attr {boolean} enable-treeview-controllable - Enable the new `cds-treeview`
|
|
54
|
+
* controllable API.
|
|
55
|
+
* @attr {boolean} enable-dialog-element - Enable components to utilize the
|
|
56
|
+
* native `dialog` element.
|
|
57
|
+
* @attr {boolean} enable-focus-wrap-without-sentinels - Enable the new focus
|
|
58
|
+
* wrap behavior that doesn't use sentinel nodes.
|
|
59
|
+
* @attr {boolean} enable-experimental-focus-wrap-without-sentinels - Deprecated,
|
|
60
|
+
* use `enable-focus-wrap-without-sentinels` instead.
|
|
61
|
+
*/
|
|
27
62
|
declare class FeatureFlagsElement extends LitElement {
|
|
28
63
|
private scope;
|
|
29
64
|
private flags;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/feature-flags/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/feature-flags/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH;;;;;;;;;;;;;;;;GAgBG;AAQH,OAAO,EAAE,UAAU,EAAQ,MAAM,KAAK,CAAC;AAOvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,cACM,mBAAoB,SAAQ,UAAU;IAC1C,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,KAAK,CAAoB;IAEjC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAW7B;IAEX,MAAM,KAAK,kBAAkB,aAE5B;;IAOD,iBAAiB;IAKjB,wBAAwB,CACtB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,MAAM,EAAE,MAAM,GAAG,IAAI;IAmBvB,OAAO,CAAC,yBAAyB;IA+BjC,OAAO,CAAC,4BAA4B;IAepC,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,0BAA0B;IAWlC,OAAO,CAAC,WAAW;IAWnB,MAAM;IAIC,oBAAoB,CAAC,IAAI,EAAE,MAAM;IAIxC,OAAO,CAAC,QAAQ;CAGjB;AAED,eAAe,mBAAmB,CAAC;AAKnC,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,WAAW,GACd,mBAAmB,GAAG,IAAI,CAa5B;AAGD,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,WAAW,GACnB,OAAO,CAST"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
import { carbonElement } from "../../globals/decorators/carbon-element.js";
|
|
9
9
|
import __decorate from "../../_virtual/_@oxc-project_runtime@0.139.0/helpers/esm/decorate.js";
|
|
10
|
-
import { FeatureFlags, createScope } from "../../packages/feature-flags/es/index.js";
|
|
10
|
+
import { FeatureFlags, createScope, notifyAvailableFlag } from "../../packages/feature-flags/es/index.js";
|
|
11
11
|
import { LitElement, html } from "lit";
|
|
12
12
|
//#region src/components/feature-flags/index.ts
|
|
13
13
|
/**
|
|
@@ -25,10 +25,8 @@ import { LitElement, html } from "lit";
|
|
|
25
25
|
* <component></component>
|
|
26
26
|
* </feature-flags>
|
|
27
27
|
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* - enable-treeview-controllable
|
|
31
|
-
* - ... (and others listed in observedAttributes)
|
|
28
|
+
* The supported flags are documented as `@attr` tags on `FeatureFlagsElement`
|
|
29
|
+
* below, which is also what surfaces them in `custom-elements.json`.
|
|
32
30
|
*
|
|
33
31
|
* How to check a Flag in your component:
|
|
34
32
|
* import { isFeatureFlagEnabled } from './feature-flags';
|
|
@@ -37,6 +35,43 @@ import { LitElement, html } from "lit";
|
|
|
37
35
|
*/
|
|
38
36
|
var _FeatureFlagsElement;
|
|
39
37
|
const hasOwn = (obj, key) => Object.prototype.hasOwnProperty.call(obj, key);
|
|
38
|
+
/**
|
|
39
|
+
* Feature Flags
|
|
40
|
+
*
|
|
41
|
+
* Provides scoped feature flags to child components. Flags are read from the
|
|
42
|
+
* nearest `<feature-flags>` ancestor, and nested elements inherit any flag they
|
|
43
|
+
* do not set themselves.
|
|
44
|
+
*
|
|
45
|
+
* Attributes are declared below rather than inferred, because the flag list is
|
|
46
|
+
* built at runtime from `observedAttributes` and cannot be read statically.
|
|
47
|
+
*
|
|
48
|
+
* @element feature-flags
|
|
49
|
+
*
|
|
50
|
+
* @attr {boolean} enable-v12-release - Enable the features and functionality
|
|
51
|
+
* for the v12 Release. Enabling this turns on every `enable-v12-*` flag at
|
|
52
|
+
* once, as well as `enable-focus-wrap-without-sentinels`.
|
|
53
|
+
* @attr {boolean} enable-v12-tile-default-icons - Enable rendering of default
|
|
54
|
+
* icons in the tile components. Becomes the default behavior in v12.
|
|
55
|
+
* @attr {boolean} enable-v12-tile-radio-icons - Enable rendering of radio icons
|
|
56
|
+
* in the `cds-radio-tile` component. Becomes the default behavior in v12.
|
|
57
|
+
* @attr {boolean} enable-v12-overflowmenu - Enable the use of the v12
|
|
58
|
+
* `cds-overflow-menu` leveraging the menu subcomponents. Becomes the default
|
|
59
|
+
* behavior in v12.
|
|
60
|
+
* @attr {boolean} enable-v12-dynamic-floating-styles - Enable dynamic setting
|
|
61
|
+
* of floating styles for components like `cds-popover`, `cds-tooltip`, etc.
|
|
62
|
+
* Becomes the default behavior in v12.
|
|
63
|
+
* @attr {boolean} enable-v12-toggle-reduced-label-spacing - Enable a reduced
|
|
64
|
+
* spacing between the toggle control and its label. Becomes the default
|
|
65
|
+
* behavior in v12.
|
|
66
|
+
* @attr {boolean} enable-treeview-controllable - Enable the new `cds-treeview`
|
|
67
|
+
* controllable API.
|
|
68
|
+
* @attr {boolean} enable-dialog-element - Enable components to utilize the
|
|
69
|
+
* native `dialog` element.
|
|
70
|
+
* @attr {boolean} enable-focus-wrap-without-sentinels - Enable the new focus
|
|
71
|
+
* wrap behavior that doesn't use sentinel nodes.
|
|
72
|
+
* @attr {boolean} enable-experimental-focus-wrap-without-sentinels - Deprecated,
|
|
73
|
+
* use `enable-focus-wrap-without-sentinels` instead.
|
|
74
|
+
*/
|
|
40
75
|
let FeatureFlagsElement = class FeatureFlagsElement extends LitElement {
|
|
41
76
|
static {
|
|
42
77
|
_FeatureFlagsElement = this;
|
|
@@ -142,7 +177,9 @@ function findParentFeatureFlags(el) {
|
|
|
142
177
|
return null;
|
|
143
178
|
}
|
|
144
179
|
function isFeatureFlagEnabled(flag, context) {
|
|
145
|
-
|
|
180
|
+
const enabled = findParentFeatureFlags(context)?.isFeatureFlagEnabled(flag) ?? false;
|
|
181
|
+
notifyAvailableFlag(flag, enabled);
|
|
182
|
+
return enabled;
|
|
146
183
|
}
|
|
147
184
|
//#endregion
|
|
148
185
|
export { feature_flags_default as default, findParentFeatureFlags, isFeatureFlagEnabled };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["GlobalFeatureFlags","customElement"],"sources":["../../../src/components/feature-flags/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2025, 2026\n *\n * This source code is licensed under the Apache-2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/**\n * <feature-flags> provides scoped feature flags to child components.\n *\n * Usage:\n * Wrap any child components inside <feature-flags> to provide scoped feature flags like this:\n * <feature-flags enable-dialog-element=\"true\">\n * <component></component>\n * </feature-flags>\n *\n * Available flags:\n * - enable-dialog-element\n * - enable-treeview-controllable\n * - ... (and others listed in observedAttributes)\n *\n * How to check a Flag in your component:\n * import { isFeatureFlagEnabled } from './feature-flags';\n * isFeatureFlagEnabled('enable-dialog-element', this)\n * Returns true if the flag is enabled in the nearest <feature-flags> ancestor\n */\n\nimport {\n FeatureFlags as GlobalFeatureFlags,\n createScope,\n} from '@carbon/feature-flags';\nimport { carbonElement as customElement } from '../../globals/decorators/carbon-element';\nimport { LitElement, html } from 'lit';\n\n/**\n * Feature Flags\n *\n * @element feature-flags\n */\ntype FeatureFlags = Record<string, boolean>;\n\nconst hasOwn = <T extends object>(obj: T, key: PropertyKey): key is keyof T =>\n Object.prototype.hasOwnProperty.call(obj, key);\n\n@customElement('feature-flags')\nclass FeatureFlagsElement extends LitElement {\n private scope = GlobalFeatureFlags;\n private flags: FeatureFlags = {};\n\n /**\n * Mapping of feature flag attributes to their related component names.\n */\n private static readonly flagComponentMap = {\n 'enable-v12-release': null,\n 'enable-v12-tile-default-icons': 'CDS-CLICKABLE-TILE',\n 'enable-v12-tile-radio-icons': 'CDS-TILE',\n 'enable-v12-overflowmenu': 'CDS-OVERFLOW-MENU',\n 'enable-treeview-controllable': 'CDS-TREEVIEW',\n 'enable-experimental-focus-wrap-without-sentinels': 'CDS-FOCUS-WRAP',\n 'enable-focus-wrap-without-sentinels': 'CDS-FOCUS-WRAP',\n 'enable-dialog-element': 'CDS-MODAL',\n 'enable-v12-dynamic-floating-styles': 'CDS-FLOATING',\n 'enable-v12-toggle-reduced-label-spacing': 'CDS-TOGGLE',\n } as const;\n\n static get observedAttributes() {\n return Object.keys(FeatureFlagsElement.flagComponentMap);\n }\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n super.connectedCallback();\n this.updateScope();\n }\n\n attributeChangedCallback(\n name: string,\n _oldVal: string | null,\n newVal: string | null\n ) {\n const value = newVal !== null && newVal !== 'false';\n this.flags[name] = value;\n\n // Set feature flag to top component level\n const relatedComponent = hasOwn(FeatureFlagsElement.flagComponentMap, name)\n ? FeatureFlagsElement.flagComponentMap[name]\n : null;\n if (\n relatedComponent &&\n this.firstElementChild?.tagName === relatedComponent\n ) {\n this.firstElementChild.setAttribute(name, '');\n }\n\n this.updateScope();\n }\n\n private syncFeatureFlagAttributes() {\n for (const [flag, relatedComponent] of Object.entries(\n FeatureFlagsElement.flagComponentMap\n )) {\n if (!relatedComponent) {\n continue;\n }\n\n let isEnabled = false;\n try {\n isEnabled = this.scope.enabled(flag);\n } catch {\n isEnabled = false;\n }\n\n for (const element of this.querySelectorAll(\n relatedComponent.toLowerCase()\n )) {\n if (findParentFeatureFlags(element as HTMLElement) !== this) {\n continue;\n }\n\n if (isEnabled) {\n element.setAttribute(flag, '');\n } else {\n element.removeAttribute(flag);\n }\n }\n }\n }\n\n private getParentFeatureFlagsElement() {\n let parent: Node | null = this.parentNode;\n while (parent) {\n if (parent instanceof ShadowRoot) {\n parent = parent.host;\n continue;\n }\n if (parent instanceof FeatureFlagsElement) {\n return parent;\n }\n parent = parent.parentNode;\n }\n return null;\n }\n\n private getParentScope() {\n return this.getParentFeatureFlagsElement()?.getScope() ?? null;\n }\n\n private syncChildFeatureFlagScopes() {\n for (const element of this.querySelectorAll('feature-flags')) {\n if (\n element instanceof FeatureFlagsElement &&\n element.getParentFeatureFlagsElement() === this\n ) {\n element.updateScope();\n }\n }\n }\n\n private updateScope() {\n const newScope = createScope(this.flags);\n const parentScope = this.getParentScope() || GlobalFeatureFlags;\n if (parentScope) {\n newScope.mergeWithScope(parentScope);\n }\n this.scope = newScope;\n this.syncFeatureFlagAttributes();\n this.syncChildFeatureFlagScopes();\n }\n\n render() {\n return html` <slot></slot> `;\n }\n\n public isFeatureFlagEnabled(flag: string) {\n return this.scope.enabled(flag);\n }\n\n private getScope() {\n return this.scope;\n }\n}\n\nexport default FeatureFlagsElement;\n\n// Utility functions\n\n// Function to find the nearest parent FeatureFlagsElement\nexport function findParentFeatureFlags(\n el: HTMLElement\n): FeatureFlagsElement | null {\n let parent: Node | null = el.parentNode;\n while (parent) {\n if (parent instanceof ShadowRoot) {\n parent = parent.host;\n continue;\n }\n if (parent instanceof FeatureFlagsElement) {\n return parent;\n }\n parent = (parent as HTMLElement).parentNode;\n }\n return null;\n}\n\n// function to check if a feature flag is enabled in components\nexport function isFeatureFlagEnabled(\n flag: string,\n context: HTMLElement\n): boolean {\n const instance = findParentFeatureFlags(context);\n return instance?.isFeatureFlagEnabled(flag) ?? false;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCA,MAAM,UAA4B,KAAQ,QACxC,OAAO,UAAU,eAAe,KAAK,KAAK,GAAG;AAE/C,IAAA,sBAAA,MACM,4BAA4B,WAAW;;;;;0BAOA;GACzC,sBAAsB;GACtB,iCAAiC;GACjC,+BAA+B;GAC/B,2BAA2B;GAC3B,gCAAgC;GAChC,oDAAoD;GACpD,uCAAuC;GACvC,yBAAyB;GACzB,sCAAsC;GACtC,2CAA2C;EAC7C;;CAEA,WAAW,qBAAqB;EAC9B,OAAO,OAAO,KAAA,qBAAyB,gBAAgB;CACzD;CAEA,cAAc;EACZ,MAAM;eAxBQA;eACc,CAAC;EAwB7B,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;CACpC;CAEA,oBAAoB;EAClB,MAAM,kBAAkB;EACxB,KAAK,YAAY;CACnB;CAEA,yBACE,MACA,SACA,QACA;EACA,MAAM,QAAQ,WAAW,QAAQ,WAAW;EAC5C,KAAK,MAAM,QAAQ;EAGnB,MAAM,mBAAmB,OAAA,qBAA2B,kBAAkB,IAAI,IAAA,qBAClD,iBAAiB,QACrC;EACJ,IACE,oBACA,KAAK,mBAAmB,YAAY,kBAEpC,KAAK,kBAAkB,aAAa,MAAM,EAAE;EAG9C,KAAK,YAAY;CACnB;CAEA,4BAAoC;EAClC,KAAK,MAAM,CAAC,MAAM,qBAAqB,OAAO,QAAA,qBACxB,gBACtB,GAAG;GACD,IAAI,CAAC,kBACH;GAGF,IAAI,YAAY;GAChB,IAAI;IACF,YAAY,KAAK,MAAM,QAAQ,IAAI;GACrC,QAAQ;IACN,YAAY;GACd;GAEA,KAAK,MAAM,WAAW,KAAK,iBACzB,iBAAiB,YAAY,CAC/B,GAAG;IACD,IAAI,uBAAuB,OAAsB,MAAM,MACrD;IAGF,IAAI,WACF,QAAQ,aAAa,MAAM,EAAE;SAE7B,QAAQ,gBAAgB,IAAI;GAEhC;EACF;CACF;CAEA,+BAAuC;EACrC,IAAI,SAAsB,KAAK;EAC/B,OAAO,QAAQ;GACb,IAAI,kBAAkB,YAAY;IAChC,SAAS,OAAO;IAChB;GACF;GACA,IAAI,kBAAA,sBACF,OAAO;GAET,SAAS,OAAO;EAClB;EACA,OAAO;CACT;CAEA,iBAAyB;EACvB,OAAO,KAAK,6BAA6B,CAAC,EAAE,SAAS,KAAK;CAC5D;CAEA,6BAAqC;EACnC,KAAK,MAAM,WAAW,KAAK,iBAAiB,eAAe,GACzD,IACE,mBAAA,wBACA,QAAQ,6BAA6B,MAAM,MAE3C,QAAQ,YAAY;CAG1B;CAEA,cAAsB;EACpB,MAAM,WAAW,YAAY,KAAK,KAAK;EACvC,MAAM,cAAc,KAAK,eAAe,KAAKA;EAC7C,IAAI,aACF,SAAS,eAAe,WAAW;EAErC,KAAK,QAAQ;EACb,KAAK,0BAA0B;EAC/B,KAAK,2BAA2B;CAClC;CAEA,SAAS;EACP,OAAO,IAAI;CACb;CAEA,qBAA4B,MAAc;EACxC,OAAO,KAAK,MAAM,QAAQ,IAAI;CAChC;CAEA,WAAmB;EACjB,OAAO,KAAK;CACd;AACF;yDA5ICC,cAAc,eAAe,CAAA,GAAA,mBAAA;AA8I9B,IAAA,wBAAe;AAKf,SAAgB,uBACd,IAC4B;CAC5B,IAAI,SAAsB,GAAG;CAC7B,OAAO,QAAQ;EACb,IAAI,kBAAkB,YAAY;GAChC,SAAS,OAAO;GAChB;EACF;EACA,IAAI,kBAAkB,qBACpB,OAAO;EAET,SAAU,OAAuB;CACnC;CACA,OAAO;AACT;AAGA,SAAgB,qBACd,MACA,SACS;CAET,OADiB,uBAAuB,OAC1B,CAAC,EAAE,qBAAqB,IAAI,KAAK;AACjD"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["GlobalFeatureFlags","customElement"],"sources":["../../../src/components/feature-flags/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2025, 2026\n *\n * This source code is licensed under the Apache-2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/**\n * <feature-flags> provides scoped feature flags to child components.\n *\n * Usage:\n * Wrap any child components inside <feature-flags> to provide scoped feature flags like this:\n * <feature-flags enable-dialog-element=\"true\">\n * <component></component>\n * </feature-flags>\n *\n * The supported flags are documented as `@attr` tags on `FeatureFlagsElement`\n * below, which is also what surfaces them in `custom-elements.json`.\n *\n * How to check a Flag in your component:\n * import { isFeatureFlagEnabled } from './feature-flags';\n * isFeatureFlagEnabled('enable-dialog-element', this)\n * Returns true if the flag is enabled in the nearest <feature-flags> ancestor\n */\n\nimport {\n FeatureFlags as GlobalFeatureFlags,\n createScope,\n notifyAvailableFlag,\n} from '@carbon/feature-flags';\nimport { carbonElement as customElement } from '../../globals/decorators/carbon-element';\nimport { LitElement, html } from 'lit';\n\ntype FeatureFlags = Record<string, boolean>;\n\nconst hasOwn = <T extends object>(obj: T, key: PropertyKey): key is keyof T =>\n Object.prototype.hasOwnProperty.call(obj, key);\n\n/**\n * Feature Flags\n *\n * Provides scoped feature flags to child components. Flags are read from the\n * nearest `<feature-flags>` ancestor, and nested elements inherit any flag they\n * do not set themselves.\n *\n * Attributes are declared below rather than inferred, because the flag list is\n * built at runtime from `observedAttributes` and cannot be read statically.\n *\n * @element feature-flags\n *\n * @attr {boolean} enable-v12-release - Enable the features and functionality\n * for the v12 Release. Enabling this turns on every `enable-v12-*` flag at\n * once, as well as `enable-focus-wrap-without-sentinels`.\n * @attr {boolean} enable-v12-tile-default-icons - Enable rendering of default\n * icons in the tile components. Becomes the default behavior in v12.\n * @attr {boolean} enable-v12-tile-radio-icons - Enable rendering of radio icons\n * in the `cds-radio-tile` component. Becomes the default behavior in v12.\n * @attr {boolean} enable-v12-overflowmenu - Enable the use of the v12\n * `cds-overflow-menu` leveraging the menu subcomponents. Becomes the default\n * behavior in v12.\n * @attr {boolean} enable-v12-dynamic-floating-styles - Enable dynamic setting\n * of floating styles for components like `cds-popover`, `cds-tooltip`, etc.\n * Becomes the default behavior in v12.\n * @attr {boolean} enable-v12-toggle-reduced-label-spacing - Enable a reduced\n * spacing between the toggle control and its label. Becomes the default\n * behavior in v12.\n * @attr {boolean} enable-treeview-controllable - Enable the new `cds-treeview`\n * controllable API.\n * @attr {boolean} enable-dialog-element - Enable components to utilize the\n * native `dialog` element.\n * @attr {boolean} enable-focus-wrap-without-sentinels - Enable the new focus\n * wrap behavior that doesn't use sentinel nodes.\n * @attr {boolean} enable-experimental-focus-wrap-without-sentinels - Deprecated,\n * use `enable-focus-wrap-without-sentinels` instead.\n */\n@customElement('feature-flags')\nclass FeatureFlagsElement extends LitElement {\n private scope = GlobalFeatureFlags;\n private flags: FeatureFlags = {};\n\n /**\n * Mapping of feature flag attributes to their related component names.\n */\n private static readonly flagComponentMap = {\n 'enable-v12-release': null,\n 'enable-v12-tile-default-icons': 'CDS-CLICKABLE-TILE',\n 'enable-v12-tile-radio-icons': 'CDS-TILE',\n 'enable-v12-overflowmenu': 'CDS-OVERFLOW-MENU',\n 'enable-treeview-controllable': 'CDS-TREEVIEW',\n 'enable-experimental-focus-wrap-without-sentinels': 'CDS-FOCUS-WRAP',\n 'enable-focus-wrap-without-sentinels': 'CDS-FOCUS-WRAP',\n 'enable-dialog-element': 'CDS-MODAL',\n 'enable-v12-dynamic-floating-styles': 'CDS-FLOATING',\n 'enable-v12-toggle-reduced-label-spacing': 'CDS-TOGGLE',\n } as const;\n\n static get observedAttributes() {\n return Object.keys(FeatureFlagsElement.flagComponentMap);\n }\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n super.connectedCallback();\n this.updateScope();\n }\n\n attributeChangedCallback(\n name: string,\n _oldVal: string | null,\n newVal: string | null\n ) {\n const value = newVal !== null && newVal !== 'false';\n this.flags[name] = value;\n\n // Set feature flag to top component level\n const relatedComponent = hasOwn(FeatureFlagsElement.flagComponentMap, name)\n ? FeatureFlagsElement.flagComponentMap[name]\n : null;\n if (\n relatedComponent &&\n this.firstElementChild?.tagName === relatedComponent\n ) {\n this.firstElementChild.setAttribute(name, '');\n }\n\n this.updateScope();\n }\n\n private syncFeatureFlagAttributes() {\n for (const [flag, relatedComponent] of Object.entries(\n FeatureFlagsElement.flagComponentMap\n )) {\n if (!relatedComponent) {\n continue;\n }\n\n let isEnabled = false;\n try {\n isEnabled = this.scope.enabled(flag);\n } catch {\n isEnabled = false;\n }\n\n for (const element of this.querySelectorAll(\n relatedComponent.toLowerCase()\n )) {\n if (findParentFeatureFlags(element as HTMLElement) !== this) {\n continue;\n }\n\n if (isEnabled) {\n element.setAttribute(flag, '');\n } else {\n element.removeAttribute(flag);\n }\n }\n }\n }\n\n private getParentFeatureFlagsElement() {\n let parent: Node | null = this.parentNode;\n while (parent) {\n if (parent instanceof ShadowRoot) {\n parent = parent.host;\n continue;\n }\n if (parent instanceof FeatureFlagsElement) {\n return parent;\n }\n parent = parent.parentNode;\n }\n return null;\n }\n\n private getParentScope() {\n return this.getParentFeatureFlagsElement()?.getScope() ?? null;\n }\n\n private syncChildFeatureFlagScopes() {\n for (const element of this.querySelectorAll('feature-flags')) {\n if (\n element instanceof FeatureFlagsElement &&\n element.getParentFeatureFlagsElement() === this\n ) {\n element.updateScope();\n }\n }\n }\n\n private updateScope() {\n const newScope = createScope(this.flags);\n const parentScope = this.getParentScope() || GlobalFeatureFlags;\n if (parentScope) {\n newScope.mergeWithScope(parentScope);\n }\n this.scope = newScope;\n this.syncFeatureFlagAttributes();\n this.syncChildFeatureFlagScopes();\n }\n\n render() {\n return html` <slot></slot> `;\n }\n\n public isFeatureFlagEnabled(flag: string) {\n return this.scope.enabled(flag);\n }\n\n private getScope() {\n return this.scope;\n }\n}\n\nexport default FeatureFlagsElement;\n\n// Utility functions\n\n// Function to find the nearest parent FeatureFlagsElement\nexport function findParentFeatureFlags(\n el: HTMLElement\n): FeatureFlagsElement | null {\n let parent: Node | null = el.parentNode;\n while (parent) {\n if (parent instanceof ShadowRoot) {\n parent = parent.host;\n continue;\n }\n if (parent instanceof FeatureFlagsElement) {\n return parent;\n }\n parent = (parent as HTMLElement).parentNode;\n }\n return null;\n}\n\n// function to check if a feature flag is enabled in components\nexport function isFeatureFlagEnabled(\n flag: string,\n context: HTMLElement\n): boolean {\n const instance = findParentFeatureFlags(context);\n const enabled = instance?.isFeatureFlagEnabled(flag) ?? false;\n\n if (process.env.NODE_ENV !== 'production') {\n notifyAvailableFlag(flag, enabled);\n }\n\n return enabled;\n}\n"],"mappings":"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"}
|
|
@@ -190,6 +190,12 @@ const featureFlagInfo = [
|
|
|
190
190
|
];
|
|
191
191
|
const v12ReleaseFlag = "enable-v12-release";
|
|
192
192
|
const v12FlagPrefix = "enable-v12-";
|
|
193
|
+
const unprefixedV12Flags = /* @__PURE__ */ new Set(["enable-focus-wrap-without-sentinels"]);
|
|
194
|
+
/**
|
|
195
|
+
* Whether a flag becomes the default behavior in v12, and so is turned on by
|
|
196
|
+
* `enable-v12-release`.
|
|
197
|
+
*/
|
|
198
|
+
const isV12Flag = (name) => name !== "enable-v12-release" && (name.startsWith(v12FlagPrefix) || unprefixedV12Flags.has(name));
|
|
193
199
|
var FeatureFlagScope = class {
|
|
194
200
|
constructor(flags) {
|
|
195
201
|
this.flags = /* @__PURE__ */ new Map();
|
|
@@ -244,11 +250,45 @@ var FeatureFlagScope = class {
|
|
|
244
250
|
*/
|
|
245
251
|
enabled(name) {
|
|
246
252
|
this.checkForFlag(name);
|
|
247
|
-
if (name
|
|
253
|
+
if (isV12Flag(name) && this.flags.get("enable-v12-release") === true) return true;
|
|
248
254
|
return this.flags.get(name) ?? false;
|
|
249
255
|
}
|
|
250
256
|
};
|
|
251
257
|
/**
|
|
258
|
+
* Copyright IBM Corp. 2026
|
|
259
|
+
*
|
|
260
|
+
* This source code is licensed under the Apache-2.0 license found in the
|
|
261
|
+
* LICENSE file in the root directory of this source tree.
|
|
262
|
+
*/
|
|
263
|
+
const descriptions = new Map(featureFlagInfo.map(({ name, description }) => [name, description]));
|
|
264
|
+
const notified = /* @__PURE__ */ new Set();
|
|
265
|
+
/**
|
|
266
|
+
* Log a one-time notice that a v12 feature flag is available but not enabled.
|
|
267
|
+
*
|
|
268
|
+
* A v12 flag becomes the default behavior in v12, so a consumer on v11 is opted
|
|
269
|
+
* out of a change they will eventually receive regardless. Surfacing it lets
|
|
270
|
+
* them preview and migrate on their own schedule instead of absorbing it all at
|
|
271
|
+
* the major release.
|
|
272
|
+
*
|
|
273
|
+
* Only v12 flags are reported. Other flags are opt-in indefinitely and have no
|
|
274
|
+
* deadline attached, so announcing them would be noise.
|
|
275
|
+
*
|
|
276
|
+
* Callers are responsible for restricting this to development. This package is
|
|
277
|
+
* bundled with `process.env.NODE_ENV` inlined at publish time, so a guard here
|
|
278
|
+
* would be resolved once when the package is built rather than by the
|
|
279
|
+
* consumer's bundler. The framework packages guard at their call sites, where
|
|
280
|
+
* `process.env.NODE_ENV` survives for the consumer to replace.
|
|
281
|
+
*
|
|
282
|
+
* @param name - The flag that was checked.
|
|
283
|
+
* @param enabled - Whether the flag resolved to enabled.
|
|
284
|
+
*/
|
|
285
|
+
const notifyAvailableFlag = (name, enabled) => {
|
|
286
|
+
if (enabled || !isV12Flag(name) || notified.has(name)) return;
|
|
287
|
+
notified.add(name);
|
|
288
|
+
const description = descriptions.get(name)?.trim();
|
|
289
|
+
console.info(`[@carbon/feature-flags] \`${name}\` is available but not enabled.` + (description ? `\n${description}` : "") + `\nThis becomes the default behavior in v12. Enable it to migrate early, or enable \`${v12ReleaseFlag}\` to turn on every v12 flag at once.`);
|
|
290
|
+
};
|
|
291
|
+
/**
|
|
252
292
|
* Copyright IBM Corp. 2015, 2026
|
|
253
293
|
*
|
|
254
294
|
* This source code is licensed under the Apache-2.0 license found in the
|
|
@@ -267,6 +307,6 @@ FeatureFlags.disable.bind(FeatureFlags);
|
|
|
267
307
|
FeatureFlags.enabled.bind(FeatureFlags);
|
|
268
308
|
FeatureFlags.merge.bind(FeatureFlags);
|
|
269
309
|
//#endregion
|
|
270
|
-
export { FeatureFlags, createScope };
|
|
310
|
+
export { FeatureFlags, createScope, notifyAvailableFlag };
|
|
271
311
|
|
|
272
312
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../../../feature-flags/es/index.js"],"sourcesContent":["/**\n * Copyright IBM Corp. 2015, 2026\n *\n * This source code is licensed under the Apache-2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n//#region src/generated/feature-flags.js\n/**\n* Code generated by @carbon/feature-flags. DO NOT EDIT.\n*\n* Copyright IBM Corp. 2015, 2023\n*\n* This source code is licensed under the Apache-2.0 license found in the\n* LICENSE file in the root directory of this source tree.\n*/\nconst enabled$1 = {};\ntry {\n\tif (process.env.CARBON_ENABLE_CSS_CUSTOM_PROPERTIES) if (process.env.CARBON_ENABLE_CSS_CUSTOM_PROPERTIES === \"true\") enabled$1.enableCssCustomProperties = true;\n\telse enabled$1.enableCssCustomProperties = false;\n\telse enabled$1.enableCssCustomProperties = false;\n\tif (process.env.CARBON_ENABLE_CSS_GRID) if (process.env.CARBON_ENABLE_CSS_GRID === \"true\") enabled$1.enableCssGrid = true;\n\telse enabled$1.enableCssGrid = false;\n\telse enabled$1.enableCssGrid = false;\n\tif (process.env.CARBON_ENABLE_V11_RELEASE) if (process.env.CARBON_ENABLE_V11_RELEASE === \"true\") enabled$1.enableV11Release = true;\n\telse enabled$1.enableV11Release = false;\n\telse enabled$1.enableV11Release = true;\n\tif (process.env.CARBON_ENABLE_V12_RELEASE) if (process.env.CARBON_ENABLE_V12_RELEASE === \"true\") enabled$1.enableV12Release = true;\n\telse enabled$1.enableV12Release = false;\n\telse enabled$1.enableV12Release = false;\n\tif (process.env.CARBON_ENABLE_EXPERIMENTAL_TILE_CONTRAST) if (process.env.CARBON_ENABLE_EXPERIMENTAL_TILE_CONTRAST === \"true\") enabled$1.enableExperimentalTileContrast = true;\n\telse enabled$1.enableExperimentalTileContrast = false;\n\telse enabled$1.enableExperimentalTileContrast = false;\n\tif (process.env.CARBON_ENABLE_TILE_CONTRAST) if (process.env.CARBON_ENABLE_TILE_CONTRAST === \"true\") enabled$1.enableTileContrast = true;\n\telse enabled$1.enableTileContrast = false;\n\telse enabled$1.enableTileContrast = false;\n\tif (process.env.CARBON_ENABLE_V12_TILE_DEFAULT_ICONS) if (process.env.CARBON_ENABLE_V12_TILE_DEFAULT_ICONS === \"true\") enabled$1.enableV12TileDefaultIcons = true;\n\telse enabled$1.enableV12TileDefaultIcons = false;\n\telse enabled$1.enableV12TileDefaultIcons = false;\n\tif (process.env.CARBON_ENABLE_V12_TILE_RADIO_ICONS) if (process.env.CARBON_ENABLE_V12_TILE_RADIO_ICONS === \"true\") enabled$1.enableV12TileRadioIcons = true;\n\telse enabled$1.enableV12TileRadioIcons = false;\n\telse enabled$1.enableV12TileRadioIcons = false;\n\tif (process.env.CARBON_ENABLE_V12_OVERFLOWMENU) if (process.env.CARBON_ENABLE_V12_OVERFLOWMENU === \"true\") enabled$1.enableV12Overflowmenu = true;\n\telse enabled$1.enableV12Overflowmenu = false;\n\telse enabled$1.enableV12Overflowmenu = false;\n\tif (process.env.CARBON_ENABLE_TREEVIEW_CONTROLLABLE) if (process.env.CARBON_ENABLE_TREEVIEW_CONTROLLABLE === \"true\") enabled$1.enableTreeviewControllable = true;\n\telse enabled$1.enableTreeviewControllable = false;\n\telse enabled$1.enableTreeviewControllable = false;\n\tif (process.env.CARBON_ENABLE_V12_STRUCTURED_LIST_VISIBLE_ICONS) if (process.env.CARBON_ENABLE_V12_STRUCTURED_LIST_VISIBLE_ICONS === \"true\") enabled$1.enableV12StructuredListVisibleIcons = true;\n\telse enabled$1.enableV12StructuredListVisibleIcons = false;\n\telse enabled$1.enableV12StructuredListVisibleIcons = false;\n\tif (process.env.CARBON_ENABLE_EXPERIMENTAL_FOCUS_WRAP_WITHOUT_SENTINELS) if (process.env.CARBON_ENABLE_EXPERIMENTAL_FOCUS_WRAP_WITHOUT_SENTINELS === \"true\") enabled$1.enableExperimentalFocusWrapWithoutSentinels = true;\n\telse enabled$1.enableExperimentalFocusWrapWithoutSentinels = false;\n\telse enabled$1.enableExperimentalFocusWrapWithoutSentinels = false;\n\tif (process.env.CARBON_ENABLE_FOCUS_WRAP_WITHOUT_SENTINELS) if (process.env.CARBON_ENABLE_FOCUS_WRAP_WITHOUT_SENTINELS === \"true\") enabled$1.enableFocusWrapWithoutSentinels = true;\n\telse enabled$1.enableFocusWrapWithoutSentinels = false;\n\telse enabled$1.enableFocusWrapWithoutSentinels = false;\n\tif (process.env.CARBON_ENABLE_DIALOG_ELEMENT) if (process.env.CARBON_ENABLE_DIALOG_ELEMENT === \"true\") enabled$1.enableDialogElement = true;\n\telse enabled$1.enableDialogElement = false;\n\telse enabled$1.enableDialogElement = false;\n\tif (process.env.CARBON_ENABLE_V12_DYNAMIC_FLOATING_STYLES) if (process.env.CARBON_ENABLE_V12_DYNAMIC_FLOATING_STYLES === \"true\") enabled$1.enableV12DynamicFloatingStyles = true;\n\telse enabled$1.enableV12DynamicFloatingStyles = false;\n\telse enabled$1.enableV12DynamicFloatingStyles = false;\n\tif (process.env.CARBON_ENABLE_V12_TOGGLE_REDUCED_LABEL_SPACING) if (process.env.CARBON_ENABLE_V12_TOGGLE_REDUCED_LABEL_SPACING === \"true\") enabled$1.enableV12ToggleReducedLabelSpacing = true;\n\telse enabled$1.enableV12ToggleReducedLabelSpacing = false;\n\telse enabled$1.enableV12ToggleReducedLabelSpacing = false;\n\tif (process.env.CARBON_ENABLE_ENHANCED_FILE_UPLOADER) if (process.env.CARBON_ENABLE_ENHANCED_FILE_UPLOADER === \"true\") enabled$1.enableEnhancedFileUploader = true;\n\telse enabled$1.enableEnhancedFileUploader = false;\n\telse enabled$1.enableEnhancedFileUploader = false;\n\tif (process.env.CARBON_ENABLE_PRESENCE) if (process.env.CARBON_ENABLE_PRESENCE === \"true\") enabled$1.enablePresence = true;\n\telse enabled$1.enablePresence = false;\n\telse enabled$1.enablePresence = false;\n} catch (error) {\n\tenabled$1.enableCssCustomProperties = false;\n\tenabled$1.enableCssGrid = false;\n\tenabled$1.enableV11Release = true;\n\tenabled$1.enableV12Release = false;\n\tenabled$1.enableExperimentalTileContrast = false;\n\tenabled$1.enableTileContrast = false;\n\tenabled$1.enableV12TileDefaultIcons = false;\n\tenabled$1.enableV12TileRadioIcons = false;\n\tenabled$1.enableV12Overflowmenu = false;\n\tenabled$1.enableTreeviewControllable = false;\n\tenabled$1.enableV12StructuredListVisibleIcons = false;\n\tenabled$1.enableExperimentalFocusWrapWithoutSentinels = false;\n\tenabled$1.enableFocusWrapWithoutSentinels = false;\n\tenabled$1.enableDialogElement = false;\n\tenabled$1.enableV12DynamicFloatingStyles = false;\n\tenabled$1.enableV12ToggleReducedLabelSpacing = false;\n\tenabled$1.enableEnhancedFileUploader = false;\n\tenabled$1.enablePresence = false;\n}\nconst featureFlagInfo = [\n\t{\n\t\tname: \"enable-css-custom-properties\",\n\t\tdescription: \"Describe what the flag does\",\n\t\tenabled: enabled$1.enableCssCustomProperties\n\t},\n\t{\n\t\tname: \"enable-css-grid\",\n\t\tdescription: \"Enable CSS Grid Layout in the Grid and Column React components\\n\",\n\t\tenabled: enabled$1.enableCssGrid\n\t},\n\t{\n\t\tname: \"enable-v11-release\",\n\t\tdescription: \"Enable the features and functionality for the v11 Release\\n\",\n\t\tenabled: enabled$1.enableV11Release\n\t},\n\t{\n\t\tname: \"enable-v12-release\",\n\t\tdescription: \"Enable the features and functionality for the v12 Release\\n\",\n\t\tenabled: enabled$1.enableV12Release\n\t},\n\t{\n\t\tname: \"enable-experimental-tile-contrast\",\n\t\tdescription: \"Deprecated, use enable-tile-contrast instead\\n\",\n\t\tenabled: enabled$1.enableExperimentalTileContrast\n\t},\n\t{\n\t\tname: \"enable-tile-contrast\",\n\t\tdescription: \"Enable the experimental tile improved contrast styles\\n\",\n\t\tenabled: enabled$1.enableTileContrast\n\t},\n\t{\n\t\tname: \"enable-v12-tile-default-icons\",\n\t\tdescription: \"Enable rendering of default icons in the tile components\\n\",\n\t\tenabled: enabled$1.enableV12TileDefaultIcons\n\t},\n\t{\n\t\tname: \"enable-v12-tile-radio-icons\",\n\t\tdescription: \"Enable rendering of radio icons in the RadioTile component\\n\",\n\t\tenabled: enabled$1.enableV12TileRadioIcons\n\t},\n\t{\n\t\tname: \"enable-v12-overflowmenu\",\n\t\tdescription: \"Enable the use of the v12 OverflowMenu leveraging the Menu subcomponents\\n\",\n\t\tenabled: enabled$1.enableV12Overflowmenu\n\t},\n\t{\n\t\tname: \"enable-treeview-controllable\",\n\t\tdescription: \"Enable the new TreeView controllable API\\n\",\n\t\tenabled: enabled$1.enableTreeviewControllable\n\t},\n\t{\n\t\tname: \"enable-v12-structured-list-visible-icons\",\n\t\tdescription: \"Enable rendering of radio icons in the StructuredList component\\n\",\n\t\tenabled: enabled$1.enableV12StructuredListVisibleIcons\n\t},\n\t{\n\t\tname: \"enable-experimental-focus-wrap-without-sentinels\",\n\t\tdescription: \"Deprecated, use enable-focus-wrap-without-sentinels instead\\n\",\n\t\tenabled: enabled$1.enableExperimentalFocusWrapWithoutSentinels\n\t},\n\t{\n\t\tname: \"enable-focus-wrap-without-sentinels\",\n\t\tdescription: \"Enable the new focus wrap behavior that doesn't use sentinel nodes\\n\",\n\t\tenabled: enabled$1.enableFocusWrapWithoutSentinels\n\t},\n\t{\n\t\tname: \"enable-dialog-element\",\n\t\tdescription: \"Enable components to utilize the native dialog element\\n\",\n\t\tenabled: enabled$1.enableDialogElement\n\t},\n\t{\n\t\tname: \"enable-v12-dynamic-floating-styles\",\n\t\tdescription: \"Enable dynamic setting of floating styles for components like Popover, Tooltip, etc.\\n\",\n\t\tenabled: enabled$1.enableV12DynamicFloatingStyles\n\t},\n\t{\n\t\tname: \"enable-v12-toggle-reduced-label-spacing\",\n\t\tdescription: \"Enable a reduced spacing between the toggle control and its label\\n\",\n\t\tenabled: enabled$1.enableV12ToggleReducedLabelSpacing\n\t},\n\t{\n\t\tname: \"enable-enhanced-file-uploader\",\n\t\tdescription: \"Enable enhanced functionality for the FileUploader component, including richer callback data and expanded trigger events for onChange and onDelete.\\n\",\n\t\tenabled: enabled$1.enableEnhancedFileUploader\n\t},\n\t{\n\t\tname: \"enable-presence\",\n\t\tdescription: \"Enable components to remain unmounted in closed state and mount in open state.\\n\",\n\t\tenabled: enabled$1.enablePresence\n\t}\n];\n//#endregion\n//#region src/FeatureFlagScope.ts\nconst v12ReleaseFlag = \"enable-v12-release\";\nconst v12FlagPrefix = \"enable-v12-\";\nvar FeatureFlagScope = class {\n\tconstructor(flags) {\n\t\tthis.flags = /* @__PURE__ */ new Map();\n\t\tif (flags) Object.keys(flags).forEach((key) => {\n\t\t\tthis.flags.set(key, flags[key]);\n\t\t});\n\t}\n\t/**\n\t* Check to see if a flag exists\n\t*/\n\tcheckForFlag(name) {\n\t\tif (!this.flags.has(name)) throw new Error(`Unable to find a feature flag with the name: \\`${name}\\``);\n\t}\n\t/**\n\t* Add a feature flag\n\t*/\n\tadd(name, enabled) {\n\t\tif (this.flags.has(name)) throw new Error(`The feature flag: ${name} already exists`);\n\t\tthis.flags.set(name, enabled);\n\t}\n\t/**\n\t* Enable a feature flag\n\t*/\n\tenable(name) {\n\t\tthis.checkForFlag(name);\n\t\tthis.flags.set(name, true);\n\t}\n\t/**\n\t* Disable a feature flag\n\t*/\n\tdisable(name) {\n\t\tthis.checkForFlag(name);\n\t\tthis.flags.set(name, false);\n\t}\n\t/**\n\t* Merge the given feature flags with the current set of feature flags.\n\t* Duplicate keys will be set to the value in the given feature flags.\n\t*/\n\tmerge(flags) {\n\t\tObject.keys(flags).forEach((key) => {\n\t\t\tthis.flags.set(key, flags[key]);\n\t\t});\n\t}\n\tmergeWithScope(scope) {\n\t\tfor (const [key, value] of scope.flags) {\n\t\t\tif (this.flags.has(key)) continue;\n\t\t\tthis.flags.set(key, value);\n\t\t}\n\t}\n\t/**\n\t* Check if a feature flag is enabled\n\t*/\n\tenabled(name) {\n\t\tthis.checkForFlag(name);\n\t\tif (name !== v12ReleaseFlag && name.startsWith(v12FlagPrefix) && this.flags.get(v12ReleaseFlag) === true) return true;\n\t\treturn this.flags.get(name) ?? false;\n\t}\n};\n//#endregion\n//#region src/index.ts\n/**\n* Copyright IBM Corp. 2015, 2026\n*\n* This source code is licensed under the Apache-2.0 license found in the\n* LICENSE file in the root directory of this source tree.\n*/\nconst createScope = (flags) => new FeatureFlagScope(flags);\nconst createDefaultScope = () => {\n\tconst scope = createScope();\n\tfor (const featureFlag of featureFlagInfo) scope.add(featureFlag.name, featureFlag.enabled);\n\treturn scope;\n};\nconst FeatureFlags = createDefaultScope();\nconst add = FeatureFlags.add.bind(FeatureFlags);\nconst enable = FeatureFlags.enable.bind(FeatureFlags);\nconst disable = FeatureFlags.disable.bind(FeatureFlags);\nconst enabled = FeatureFlags.enabled.bind(FeatureFlags);\nconst merge = FeatureFlags.merge.bind(FeatureFlags);\n//#endregion\nexport { FeatureFlags, add, createScope, disable, enable, enabled, merge };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../../feature-flags/es/index.js"],"sourcesContent":["/**\n * Copyright IBM Corp. 2015, 2026\n *\n * This source code is licensed under the Apache-2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n//#region src/generated/feature-flags.js\n/**\n* Code generated by @carbon/feature-flags. DO NOT EDIT.\n*\n* Copyright IBM Corp. 2015, 2023\n*\n* This source code is licensed under the Apache-2.0 license found in the\n* LICENSE file in the root directory of this source tree.\n*/\nconst enabled$1 = {};\ntry {\n\tif (process.env.CARBON_ENABLE_CSS_CUSTOM_PROPERTIES) if (process.env.CARBON_ENABLE_CSS_CUSTOM_PROPERTIES === \"true\") enabled$1.enableCssCustomProperties = true;\n\telse enabled$1.enableCssCustomProperties = false;\n\telse enabled$1.enableCssCustomProperties = false;\n\tif (process.env.CARBON_ENABLE_CSS_GRID) if (process.env.CARBON_ENABLE_CSS_GRID === \"true\") enabled$1.enableCssGrid = true;\n\telse enabled$1.enableCssGrid = false;\n\telse enabled$1.enableCssGrid = false;\n\tif (process.env.CARBON_ENABLE_V11_RELEASE) if (process.env.CARBON_ENABLE_V11_RELEASE === \"true\") enabled$1.enableV11Release = true;\n\telse enabled$1.enableV11Release = false;\n\telse enabled$1.enableV11Release = true;\n\tif (process.env.CARBON_ENABLE_V12_RELEASE) if (process.env.CARBON_ENABLE_V12_RELEASE === \"true\") enabled$1.enableV12Release = true;\n\telse enabled$1.enableV12Release = false;\n\telse enabled$1.enableV12Release = false;\n\tif (process.env.CARBON_ENABLE_EXPERIMENTAL_TILE_CONTRAST) if (process.env.CARBON_ENABLE_EXPERIMENTAL_TILE_CONTRAST === \"true\") enabled$1.enableExperimentalTileContrast = true;\n\telse enabled$1.enableExperimentalTileContrast = false;\n\telse enabled$1.enableExperimentalTileContrast = false;\n\tif (process.env.CARBON_ENABLE_TILE_CONTRAST) if (process.env.CARBON_ENABLE_TILE_CONTRAST === \"true\") enabled$1.enableTileContrast = true;\n\telse enabled$1.enableTileContrast = false;\n\telse enabled$1.enableTileContrast = false;\n\tif (process.env.CARBON_ENABLE_V12_TILE_DEFAULT_ICONS) if (process.env.CARBON_ENABLE_V12_TILE_DEFAULT_ICONS === \"true\") enabled$1.enableV12TileDefaultIcons = true;\n\telse enabled$1.enableV12TileDefaultIcons = false;\n\telse enabled$1.enableV12TileDefaultIcons = false;\n\tif (process.env.CARBON_ENABLE_V12_TILE_RADIO_ICONS) if (process.env.CARBON_ENABLE_V12_TILE_RADIO_ICONS === \"true\") enabled$1.enableV12TileRadioIcons = true;\n\telse enabled$1.enableV12TileRadioIcons = false;\n\telse enabled$1.enableV12TileRadioIcons = false;\n\tif (process.env.CARBON_ENABLE_V12_OVERFLOWMENU) if (process.env.CARBON_ENABLE_V12_OVERFLOWMENU === \"true\") enabled$1.enableV12Overflowmenu = true;\n\telse enabled$1.enableV12Overflowmenu = false;\n\telse enabled$1.enableV12Overflowmenu = false;\n\tif (process.env.CARBON_ENABLE_TREEVIEW_CONTROLLABLE) if (process.env.CARBON_ENABLE_TREEVIEW_CONTROLLABLE === \"true\") enabled$1.enableTreeviewControllable = true;\n\telse enabled$1.enableTreeviewControllable = false;\n\telse enabled$1.enableTreeviewControllable = false;\n\tif (process.env.CARBON_ENABLE_V12_STRUCTURED_LIST_VISIBLE_ICONS) if (process.env.CARBON_ENABLE_V12_STRUCTURED_LIST_VISIBLE_ICONS === \"true\") enabled$1.enableV12StructuredListVisibleIcons = true;\n\telse enabled$1.enableV12StructuredListVisibleIcons = false;\n\telse enabled$1.enableV12StructuredListVisibleIcons = false;\n\tif (process.env.CARBON_ENABLE_EXPERIMENTAL_FOCUS_WRAP_WITHOUT_SENTINELS) if (process.env.CARBON_ENABLE_EXPERIMENTAL_FOCUS_WRAP_WITHOUT_SENTINELS === \"true\") enabled$1.enableExperimentalFocusWrapWithoutSentinels = true;\n\telse enabled$1.enableExperimentalFocusWrapWithoutSentinels = false;\n\telse enabled$1.enableExperimentalFocusWrapWithoutSentinels = false;\n\tif (process.env.CARBON_ENABLE_FOCUS_WRAP_WITHOUT_SENTINELS) if (process.env.CARBON_ENABLE_FOCUS_WRAP_WITHOUT_SENTINELS === \"true\") enabled$1.enableFocusWrapWithoutSentinels = true;\n\telse enabled$1.enableFocusWrapWithoutSentinels = false;\n\telse enabled$1.enableFocusWrapWithoutSentinels = false;\n\tif (process.env.CARBON_ENABLE_DIALOG_ELEMENT) if (process.env.CARBON_ENABLE_DIALOG_ELEMENT === \"true\") enabled$1.enableDialogElement = true;\n\telse enabled$1.enableDialogElement = false;\n\telse enabled$1.enableDialogElement = false;\n\tif (process.env.CARBON_ENABLE_V12_DYNAMIC_FLOATING_STYLES) if (process.env.CARBON_ENABLE_V12_DYNAMIC_FLOATING_STYLES === \"true\") enabled$1.enableV12DynamicFloatingStyles = true;\n\telse enabled$1.enableV12DynamicFloatingStyles = false;\n\telse enabled$1.enableV12DynamicFloatingStyles = false;\n\tif (process.env.CARBON_ENABLE_V12_TOGGLE_REDUCED_LABEL_SPACING) if (process.env.CARBON_ENABLE_V12_TOGGLE_REDUCED_LABEL_SPACING === \"true\") enabled$1.enableV12ToggleReducedLabelSpacing = true;\n\telse enabled$1.enableV12ToggleReducedLabelSpacing = false;\n\telse enabled$1.enableV12ToggleReducedLabelSpacing = false;\n\tif (process.env.CARBON_ENABLE_ENHANCED_FILE_UPLOADER) if (process.env.CARBON_ENABLE_ENHANCED_FILE_UPLOADER === \"true\") enabled$1.enableEnhancedFileUploader = true;\n\telse enabled$1.enableEnhancedFileUploader = false;\n\telse enabled$1.enableEnhancedFileUploader = false;\n\tif (process.env.CARBON_ENABLE_PRESENCE) if (process.env.CARBON_ENABLE_PRESENCE === \"true\") enabled$1.enablePresence = true;\n\telse enabled$1.enablePresence = false;\n\telse enabled$1.enablePresence = false;\n} catch (error) {\n\tenabled$1.enableCssCustomProperties = false;\n\tenabled$1.enableCssGrid = false;\n\tenabled$1.enableV11Release = true;\n\tenabled$1.enableV12Release = false;\n\tenabled$1.enableExperimentalTileContrast = false;\n\tenabled$1.enableTileContrast = false;\n\tenabled$1.enableV12TileDefaultIcons = false;\n\tenabled$1.enableV12TileRadioIcons = false;\n\tenabled$1.enableV12Overflowmenu = false;\n\tenabled$1.enableTreeviewControllable = false;\n\tenabled$1.enableV12StructuredListVisibleIcons = false;\n\tenabled$1.enableExperimentalFocusWrapWithoutSentinels = false;\n\tenabled$1.enableFocusWrapWithoutSentinels = false;\n\tenabled$1.enableDialogElement = false;\n\tenabled$1.enableV12DynamicFloatingStyles = false;\n\tenabled$1.enableV12ToggleReducedLabelSpacing = false;\n\tenabled$1.enableEnhancedFileUploader = false;\n\tenabled$1.enablePresence = false;\n}\nconst featureFlagInfo = [\n\t{\n\t\tname: \"enable-css-custom-properties\",\n\t\tdescription: \"Describe what the flag does\",\n\t\tenabled: enabled$1.enableCssCustomProperties\n\t},\n\t{\n\t\tname: \"enable-css-grid\",\n\t\tdescription: \"Enable CSS Grid Layout in the Grid and Column React components\\n\",\n\t\tenabled: enabled$1.enableCssGrid\n\t},\n\t{\n\t\tname: \"enable-v11-release\",\n\t\tdescription: \"Enable the features and functionality for the v11 Release\\n\",\n\t\tenabled: enabled$1.enableV11Release\n\t},\n\t{\n\t\tname: \"enable-v12-release\",\n\t\tdescription: \"Enable the features and functionality for the v12 Release\\n\",\n\t\tenabled: enabled$1.enableV12Release\n\t},\n\t{\n\t\tname: \"enable-experimental-tile-contrast\",\n\t\tdescription: \"Deprecated, use enable-tile-contrast instead\\n\",\n\t\tenabled: enabled$1.enableExperimentalTileContrast\n\t},\n\t{\n\t\tname: \"enable-tile-contrast\",\n\t\tdescription: \"Enable the experimental tile improved contrast styles\\n\",\n\t\tenabled: enabled$1.enableTileContrast\n\t},\n\t{\n\t\tname: \"enable-v12-tile-default-icons\",\n\t\tdescription: \"Enable rendering of default icons in the tile components\\n\",\n\t\tenabled: enabled$1.enableV12TileDefaultIcons\n\t},\n\t{\n\t\tname: \"enable-v12-tile-radio-icons\",\n\t\tdescription: \"Enable rendering of radio icons in the RadioTile component\\n\",\n\t\tenabled: enabled$1.enableV12TileRadioIcons\n\t},\n\t{\n\t\tname: \"enable-v12-overflowmenu\",\n\t\tdescription: \"Enable the use of the v12 OverflowMenu leveraging the Menu subcomponents\\n\",\n\t\tenabled: enabled$1.enableV12Overflowmenu\n\t},\n\t{\n\t\tname: \"enable-treeview-controllable\",\n\t\tdescription: \"Enable the new TreeView controllable API\\n\",\n\t\tenabled: enabled$1.enableTreeviewControllable\n\t},\n\t{\n\t\tname: \"enable-v12-structured-list-visible-icons\",\n\t\tdescription: \"Enable rendering of radio icons in the StructuredList component\\n\",\n\t\tenabled: enabled$1.enableV12StructuredListVisibleIcons\n\t},\n\t{\n\t\tname: \"enable-experimental-focus-wrap-without-sentinels\",\n\t\tdescription: \"Deprecated, use enable-focus-wrap-without-sentinels instead\\n\",\n\t\tenabled: enabled$1.enableExperimentalFocusWrapWithoutSentinels\n\t},\n\t{\n\t\tname: \"enable-focus-wrap-without-sentinels\",\n\t\tdescription: \"Enable the new focus wrap behavior that doesn't use sentinel nodes\\n\",\n\t\tenabled: enabled$1.enableFocusWrapWithoutSentinels\n\t},\n\t{\n\t\tname: \"enable-dialog-element\",\n\t\tdescription: \"Enable components to utilize the native dialog element\\n\",\n\t\tenabled: enabled$1.enableDialogElement\n\t},\n\t{\n\t\tname: \"enable-v12-dynamic-floating-styles\",\n\t\tdescription: \"Enable dynamic setting of floating styles for components like Popover, Tooltip, etc.\\n\",\n\t\tenabled: enabled$1.enableV12DynamicFloatingStyles\n\t},\n\t{\n\t\tname: \"enable-v12-toggle-reduced-label-spacing\",\n\t\tdescription: \"Enable a reduced spacing between the toggle control and its label\\n\",\n\t\tenabled: enabled$1.enableV12ToggleReducedLabelSpacing\n\t},\n\t{\n\t\tname: \"enable-enhanced-file-uploader\",\n\t\tdescription: \"Enable enhanced functionality for the FileUploader component, including richer callback data and expanded trigger events for onChange and onDelete.\\n\",\n\t\tenabled: enabled$1.enableEnhancedFileUploader\n\t},\n\t{\n\t\tname: \"enable-presence\",\n\t\tdescription: \"Enable components to remain unmounted in closed state and mount in open state.\\n\",\n\t\tenabled: enabled$1.enablePresence\n\t}\n];\n//#endregion\n//#region src/FeatureFlagScope.ts\nconst v12ReleaseFlag = \"enable-v12-release\";\nconst v12FlagPrefix = \"enable-v12-\";\nconst unprefixedV12Flags = /* @__PURE__ */ new Set([\"enable-focus-wrap-without-sentinels\"]);\n/**\n* Whether a flag becomes the default behavior in v12, and so is turned on by\n* `enable-v12-release`.\n*/\nconst isV12Flag = (name) => name !== \"enable-v12-release\" && (name.startsWith(v12FlagPrefix) || unprefixedV12Flags.has(name));\nvar FeatureFlagScope = class {\n\tconstructor(flags) {\n\t\tthis.flags = /* @__PURE__ */ new Map();\n\t\tif (flags) Object.keys(flags).forEach((key) => {\n\t\t\tthis.flags.set(key, flags[key]);\n\t\t});\n\t}\n\t/**\n\t* Check to see if a flag exists\n\t*/\n\tcheckForFlag(name) {\n\t\tif (!this.flags.has(name)) throw new Error(`Unable to find a feature flag with the name: \\`${name}\\``);\n\t}\n\t/**\n\t* Add a feature flag\n\t*/\n\tadd(name, enabled) {\n\t\tif (this.flags.has(name)) throw new Error(`The feature flag: ${name} already exists`);\n\t\tthis.flags.set(name, enabled);\n\t}\n\t/**\n\t* Enable a feature flag\n\t*/\n\tenable(name) {\n\t\tthis.checkForFlag(name);\n\t\tthis.flags.set(name, true);\n\t}\n\t/**\n\t* Disable a feature flag\n\t*/\n\tdisable(name) {\n\t\tthis.checkForFlag(name);\n\t\tthis.flags.set(name, false);\n\t}\n\t/**\n\t* Merge the given feature flags with the current set of feature flags.\n\t* Duplicate keys will be set to the value in the given feature flags.\n\t*/\n\tmerge(flags) {\n\t\tObject.keys(flags).forEach((key) => {\n\t\t\tthis.flags.set(key, flags[key]);\n\t\t});\n\t}\n\tmergeWithScope(scope) {\n\t\tfor (const [key, value] of scope.flags) {\n\t\t\tif (this.flags.has(key)) continue;\n\t\t\tthis.flags.set(key, value);\n\t\t}\n\t}\n\t/**\n\t* Check if a feature flag is enabled\n\t*/\n\tenabled(name) {\n\t\tthis.checkForFlag(name);\n\t\tif (isV12Flag(name) && this.flags.get(\"enable-v12-release\") === true) return true;\n\t\treturn this.flags.get(name) ?? false;\n\t}\n};\n//#endregion\n//#region src/notify.ts\n/**\n* Copyright IBM Corp. 2026\n*\n* This source code is licensed under the Apache-2.0 license found in the\n* LICENSE file in the root directory of this source tree.\n*/\nconst descriptions = new Map(featureFlagInfo.map(({ name, description }) => [name, description]));\nconst notified = /* @__PURE__ */ new Set();\n/**\n* Log a one-time notice that a v12 feature flag is available but not enabled.\n*\n* A v12 flag becomes the default behavior in v12, so a consumer on v11 is opted\n* out of a change they will eventually receive regardless. Surfacing it lets\n* them preview and migrate on their own schedule instead of absorbing it all at\n* the major release.\n*\n* Only v12 flags are reported. Other flags are opt-in indefinitely and have no\n* deadline attached, so announcing them would be noise.\n*\n* Callers are responsible for restricting this to development. This package is\n* bundled with `process.env.NODE_ENV` inlined at publish time, so a guard here\n* would be resolved once when the package is built rather than by the\n* consumer's bundler. The framework packages guard at their call sites, where\n* `process.env.NODE_ENV` survives for the consumer to replace.\n*\n* @param name - The flag that was checked.\n* @param enabled - Whether the flag resolved to enabled.\n*/\nconst notifyAvailableFlag = (name, enabled) => {\n\tif (enabled || !isV12Flag(name) || notified.has(name)) return;\n\tnotified.add(name);\n\tconst description = descriptions.get(name)?.trim();\n\tconsole.info(`[@carbon/feature-flags] \\`${name}\\` is available but not enabled.` + (description ? `\\n${description}` : \"\") + `\\nThis becomes the default behavior in v12. Enable it to migrate early, or enable \\`${v12ReleaseFlag}\\` to turn on every v12 flag at once.`);\n};\n//#endregion\n//#region src/index.ts\n/**\n* Copyright IBM Corp. 2015, 2026\n*\n* This source code is licensed under the Apache-2.0 license found in the\n* LICENSE file in the root directory of this source tree.\n*/\nconst createScope = (flags) => new FeatureFlagScope(flags);\nconst createDefaultScope = () => {\n\tconst scope = createScope();\n\tfor (const featureFlag of featureFlagInfo) scope.add(featureFlag.name, featureFlag.enabled);\n\treturn scope;\n};\nconst FeatureFlags = createDefaultScope();\nconst add = FeatureFlags.add.bind(FeatureFlags);\nconst enable = FeatureFlags.enable.bind(FeatureFlags);\nconst disable = FeatureFlags.disable.bind(FeatureFlags);\nconst enabled = FeatureFlags.enabled.bind(FeatureFlags);\nconst merge = FeatureFlags.merge.bind(FeatureFlags);\n//#endregion\nexport { FeatureFlags, add, createScope, disable, enable, enabled, merge, notifyAvailableFlag };\n"],"mappings":"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"}
|
|
@@ -13,10 +13,8 @@
|
|
|
13
13
|
* <component></component>
|
|
14
14
|
* </feature-flags>
|
|
15
15
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* - enable-treeview-controllable
|
|
19
|
-
* - ... (and others listed in observedAttributes)
|
|
16
|
+
* The supported flags are documented as `@attr` tags on `FeatureFlagsElement`
|
|
17
|
+
* below, which is also what surfaces them in `custom-elements.json`.
|
|
20
18
|
*
|
|
21
19
|
* How to check a Flag in your component:
|
|
22
20
|
* import { isFeatureFlagEnabled } from './feature-flags';
|
|
@@ -24,6 +22,43 @@
|
|
|
24
22
|
* Returns true if the flag is enabled in the nearest <feature-flags> ancestor
|
|
25
23
|
*/
|
|
26
24
|
import { LitElement } from 'lit';
|
|
25
|
+
/**
|
|
26
|
+
* Feature Flags
|
|
27
|
+
*
|
|
28
|
+
* Provides scoped feature flags to child components. Flags are read from the
|
|
29
|
+
* nearest `<feature-flags>` ancestor, and nested elements inherit any flag they
|
|
30
|
+
* do not set themselves.
|
|
31
|
+
*
|
|
32
|
+
* Attributes are declared below rather than inferred, because the flag list is
|
|
33
|
+
* built at runtime from `observedAttributes` and cannot be read statically.
|
|
34
|
+
*
|
|
35
|
+
* @element feature-flags
|
|
36
|
+
*
|
|
37
|
+
* @attr {boolean} enable-v12-release - Enable the features and functionality
|
|
38
|
+
* for the v12 Release. Enabling this turns on every `enable-v12-*` flag at
|
|
39
|
+
* once, as well as `enable-focus-wrap-without-sentinels`.
|
|
40
|
+
* @attr {boolean} enable-v12-tile-default-icons - Enable rendering of default
|
|
41
|
+
* icons in the tile components. Becomes the default behavior in v12.
|
|
42
|
+
* @attr {boolean} enable-v12-tile-radio-icons - Enable rendering of radio icons
|
|
43
|
+
* in the `cds-custom-radio-tile` component. Becomes the default behavior in v12.
|
|
44
|
+
* @attr {boolean} enable-v12-overflowmenu - Enable the use of the v12
|
|
45
|
+
* `cds-custom-overflow-menu` leveraging the menu subcomponents. Becomes the default
|
|
46
|
+
* behavior in v12.
|
|
47
|
+
* @attr {boolean} enable-v12-dynamic-floating-styles - Enable dynamic setting
|
|
48
|
+
* of floating styles for components like `cds-custom-popover`, `cds-custom-tooltip`, etc.
|
|
49
|
+
* Becomes the default behavior in v12.
|
|
50
|
+
* @attr {boolean} enable-v12-toggle-reduced-label-spacing - Enable a reduced
|
|
51
|
+
* spacing between the toggle control and its label. Becomes the default
|
|
52
|
+
* behavior in v12.
|
|
53
|
+
* @attr {boolean} enable-treeview-controllable - Enable the new `cds-custom-treeview`
|
|
54
|
+
* controllable API.
|
|
55
|
+
* @attr {boolean} enable-dialog-element - Enable components to utilize the
|
|
56
|
+
* native `dialog` element.
|
|
57
|
+
* @attr {boolean} enable-focus-wrap-without-sentinels - Enable the new focus
|
|
58
|
+
* wrap behavior that doesn't use sentinel nodes.
|
|
59
|
+
* @attr {boolean} enable-experimental-focus-wrap-without-sentinels - Deprecated,
|
|
60
|
+
* use `enable-focus-wrap-without-sentinels` instead.
|
|
61
|
+
*/
|
|
27
62
|
declare class FeatureFlagsElement extends LitElement {
|
|
28
63
|
private scope;
|
|
29
64
|
private flags;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/feature-flags/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/feature-flags/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH;;;;;;;;;;;;;;;;GAgBG;AAQH,OAAO,EAAE,UAAU,EAAQ,MAAM,KAAK,CAAC;AAOvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,cACM,mBAAoB,SAAQ,UAAU;IAC1C,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,KAAK,CAAoB;IAEjC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAW7B;IAEX,MAAM,KAAK,kBAAkB,aAE5B;;IAOD,iBAAiB;IAKjB,wBAAwB,CACtB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,MAAM,EAAE,MAAM,GAAG,IAAI;IAmBvB,OAAO,CAAC,yBAAyB;IA+BjC,OAAO,CAAC,4BAA4B;IAepC,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,0BAA0B;IAWlC,OAAO,CAAC,WAAW;IAWnB,MAAM;IAIC,oBAAoB,CAAC,IAAI,EAAE,MAAM;IAIxC,OAAO,CAAC,QAAQ;CAGjB;AAED,eAAe,mBAAmB,CAAC;AAKnC,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,WAAW,GACd,mBAAmB,GAAG,IAAI,CAa5B;AAGD,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,WAAW,GACnB,OAAO,CAST"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
import { carbonElement } from "../../globals/decorators/carbon-element.js";
|
|
9
9
|
import __decorate from "../../_virtual/_@oxc-project_runtime@0.139.0/helpers/esm/decorate.js";
|
|
10
|
-
import { FeatureFlags, createScope } from "../../packages/feature-flags/es/index.js";
|
|
10
|
+
import { FeatureFlags, createScope, notifyAvailableFlag } from "../../packages/feature-flags/es/index.js";
|
|
11
11
|
import { LitElement, html } from "lit";
|
|
12
12
|
//#region src/components/feature-flags/index.ts
|
|
13
13
|
/**
|
|
@@ -25,10 +25,8 @@ import { LitElement, html } from "lit";
|
|
|
25
25
|
* <component></component>
|
|
26
26
|
* </feature-flags>
|
|
27
27
|
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* - enable-treeview-controllable
|
|
31
|
-
* - ... (and others listed in observedAttributes)
|
|
28
|
+
* The supported flags are documented as `@attr` tags on `FeatureFlagsElement`
|
|
29
|
+
* below, which is also what surfaces them in `custom-elements.json`.
|
|
32
30
|
*
|
|
33
31
|
* How to check a Flag in your component:
|
|
34
32
|
* import { isFeatureFlagEnabled } from './feature-flags';
|
|
@@ -37,6 +35,43 @@ import { LitElement, html } from "lit";
|
|
|
37
35
|
*/
|
|
38
36
|
var _FeatureFlagsElement;
|
|
39
37
|
const hasOwn = (obj, key) => Object.prototype.hasOwnProperty.call(obj, key);
|
|
38
|
+
/**
|
|
39
|
+
* Feature Flags
|
|
40
|
+
*
|
|
41
|
+
* Provides scoped feature flags to child components. Flags are read from the
|
|
42
|
+
* nearest `<feature-flags>` ancestor, and nested elements inherit any flag they
|
|
43
|
+
* do not set themselves.
|
|
44
|
+
*
|
|
45
|
+
* Attributes are declared below rather than inferred, because the flag list is
|
|
46
|
+
* built at runtime from `observedAttributes` and cannot be read statically.
|
|
47
|
+
*
|
|
48
|
+
* @element feature-flags
|
|
49
|
+
*
|
|
50
|
+
* @attr {boolean} enable-v12-release - Enable the features and functionality
|
|
51
|
+
* for the v12 Release. Enabling this turns on every `enable-v12-*` flag at
|
|
52
|
+
* once, as well as `enable-focus-wrap-without-sentinels`.
|
|
53
|
+
* @attr {boolean} enable-v12-tile-default-icons - Enable rendering of default
|
|
54
|
+
* icons in the tile components. Becomes the default behavior in v12.
|
|
55
|
+
* @attr {boolean} enable-v12-tile-radio-icons - Enable rendering of radio icons
|
|
56
|
+
* in the `cds-custom-radio-tile` component. Becomes the default behavior in v12.
|
|
57
|
+
* @attr {boolean} enable-v12-overflowmenu - Enable the use of the v12
|
|
58
|
+
* `cds-custom-overflow-menu` leveraging the menu subcomponents. Becomes the default
|
|
59
|
+
* behavior in v12.
|
|
60
|
+
* @attr {boolean} enable-v12-dynamic-floating-styles - Enable dynamic setting
|
|
61
|
+
* of floating styles for components like `cds-custom-popover`, `cds-custom-tooltip`, etc.
|
|
62
|
+
* Becomes the default behavior in v12.
|
|
63
|
+
* @attr {boolean} enable-v12-toggle-reduced-label-spacing - Enable a reduced
|
|
64
|
+
* spacing between the toggle control and its label. Becomes the default
|
|
65
|
+
* behavior in v12.
|
|
66
|
+
* @attr {boolean} enable-treeview-controllable - Enable the new `cds-custom-treeview`
|
|
67
|
+
* controllable API.
|
|
68
|
+
* @attr {boolean} enable-dialog-element - Enable components to utilize the
|
|
69
|
+
* native `dialog` element.
|
|
70
|
+
* @attr {boolean} enable-focus-wrap-without-sentinels - Enable the new focus
|
|
71
|
+
* wrap behavior that doesn't use sentinel nodes.
|
|
72
|
+
* @attr {boolean} enable-experimental-focus-wrap-without-sentinels - Deprecated,
|
|
73
|
+
* use `enable-focus-wrap-without-sentinels` instead.
|
|
74
|
+
*/
|
|
40
75
|
let FeatureFlagsElement = class FeatureFlagsElement extends LitElement {
|
|
41
76
|
static {
|
|
42
77
|
_FeatureFlagsElement = this;
|
|
@@ -142,7 +177,9 @@ function findParentFeatureFlags(el) {
|
|
|
142
177
|
return null;
|
|
143
178
|
}
|
|
144
179
|
function isFeatureFlagEnabled(flag, context) {
|
|
145
|
-
|
|
180
|
+
const enabled = findParentFeatureFlags(context)?.isFeatureFlagEnabled(flag) ?? false;
|
|
181
|
+
notifyAvailableFlag(flag, enabled);
|
|
182
|
+
return enabled;
|
|
146
183
|
}
|
|
147
184
|
//#endregion
|
|
148
185
|
export { feature_flags_default as default, findParentFeatureFlags, isFeatureFlagEnabled };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["GlobalFeatureFlags","customElement"],"sources":["../../../src/components/feature-flags/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2025, 2026\n *\n * This source code is licensed under the Apache-2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/**\n * <feature-flags> provides scoped feature flags to child components.\n *\n * Usage:\n * Wrap any child components inside <feature-flags> to provide scoped feature flags like this:\n * <feature-flags enable-dialog-element=\"true\">\n * <component></component>\n * </feature-flags>\n *\n * Available flags:\n * - enable-dialog-element\n * - enable-treeview-controllable\n * - ... (and others listed in observedAttributes)\n *\n * How to check a Flag in your component:\n * import { isFeatureFlagEnabled } from './feature-flags';\n * isFeatureFlagEnabled('enable-dialog-element', this)\n * Returns true if the flag is enabled in the nearest <feature-flags> ancestor\n */\n\nimport {\n FeatureFlags as GlobalFeatureFlags,\n createScope,\n} from '@carbon/feature-flags';\nimport { carbonElement as customElement } from '../../globals/decorators/carbon-element';\nimport { LitElement, html } from 'lit';\n\n/**\n * Feature Flags\n *\n * @element feature-flags\n */\ntype FeatureFlags = Record<string, boolean>;\n\nconst hasOwn = <T extends object>(obj: T, key: PropertyKey): key is keyof T =>\n Object.prototype.hasOwnProperty.call(obj, key);\n\n@customElement('feature-flags')\nclass FeatureFlagsElement extends LitElement {\n private scope = GlobalFeatureFlags;\n private flags: FeatureFlags = {};\n\n /**\n * Mapping of feature flag attributes to their related component names.\n */\n private static readonly flagComponentMap = {\n 'enable-v12-release': null,\n 'enable-v12-tile-default-icons': 'CDS-CLICKABLE-TILE',\n 'enable-v12-tile-radio-icons': 'CDS-TILE',\n 'enable-v12-overflowmenu': 'CDS-OVERFLOW-MENU',\n 'enable-treeview-controllable': 'CDS-TREEVIEW',\n 'enable-experimental-focus-wrap-without-sentinels': 'CDS-FOCUS-WRAP',\n 'enable-focus-wrap-without-sentinels': 'CDS-FOCUS-WRAP',\n 'enable-dialog-element': 'CDS-MODAL',\n 'enable-v12-dynamic-floating-styles': 'CDS-FLOATING',\n 'enable-v12-toggle-reduced-label-spacing': 'CDS-TOGGLE',\n } as const;\n\n static get observedAttributes() {\n return Object.keys(FeatureFlagsElement.flagComponentMap);\n }\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n super.connectedCallback();\n this.updateScope();\n }\n\n attributeChangedCallback(\n name: string,\n _oldVal: string | null,\n newVal: string | null\n ) {\n const value = newVal !== null && newVal !== 'false';\n this.flags[name] = value;\n\n // Set feature flag to top component level\n const relatedComponent = hasOwn(FeatureFlagsElement.flagComponentMap, name)\n ? FeatureFlagsElement.flagComponentMap[name]\n : null;\n if (\n relatedComponent &&\n this.firstElementChild?.tagName === relatedComponent\n ) {\n this.firstElementChild.setAttribute(name, '');\n }\n\n this.updateScope();\n }\n\n private syncFeatureFlagAttributes() {\n for (const [flag, relatedComponent] of Object.entries(\n FeatureFlagsElement.flagComponentMap\n )) {\n if (!relatedComponent) {\n continue;\n }\n\n let isEnabled = false;\n try {\n isEnabled = this.scope.enabled(flag);\n } catch {\n isEnabled = false;\n }\n\n for (const element of this.querySelectorAll(\n relatedComponent.toLowerCase()\n )) {\n if (findParentFeatureFlags(element as HTMLElement) !== this) {\n continue;\n }\n\n if (isEnabled) {\n element.setAttribute(flag, '');\n } else {\n element.removeAttribute(flag);\n }\n }\n }\n }\n\n private getParentFeatureFlagsElement() {\n let parent: Node | null = this.parentNode;\n while (parent) {\n if (parent instanceof ShadowRoot) {\n parent = parent.host;\n continue;\n }\n if (parent instanceof FeatureFlagsElement) {\n return parent;\n }\n parent = parent.parentNode;\n }\n return null;\n }\n\n private getParentScope() {\n return this.getParentFeatureFlagsElement()?.getScope() ?? null;\n }\n\n private syncChildFeatureFlagScopes() {\n for (const element of this.querySelectorAll('feature-flags')) {\n if (\n element instanceof FeatureFlagsElement &&\n element.getParentFeatureFlagsElement() === this\n ) {\n element.updateScope();\n }\n }\n }\n\n private updateScope() {\n const newScope = createScope(this.flags);\n const parentScope = this.getParentScope() || GlobalFeatureFlags;\n if (parentScope) {\n newScope.mergeWithScope(parentScope);\n }\n this.scope = newScope;\n this.syncFeatureFlagAttributes();\n this.syncChildFeatureFlagScopes();\n }\n\n render() {\n return html` <slot></slot> `;\n }\n\n public isFeatureFlagEnabled(flag: string) {\n return this.scope.enabled(flag);\n }\n\n private getScope() {\n return this.scope;\n }\n}\n\nexport default FeatureFlagsElement;\n\n// Utility functions\n\n// Function to find the nearest parent FeatureFlagsElement\nexport function findParentFeatureFlags(\n el: HTMLElement\n): FeatureFlagsElement | null {\n let parent: Node | null = el.parentNode;\n while (parent) {\n if (parent instanceof ShadowRoot) {\n parent = parent.host;\n continue;\n }\n if (parent instanceof FeatureFlagsElement) {\n return parent;\n }\n parent = (parent as HTMLElement).parentNode;\n }\n return null;\n}\n\n// function to check if a feature flag is enabled in components\nexport function isFeatureFlagEnabled(\n flag: string,\n context: HTMLElement\n): boolean {\n const instance = findParentFeatureFlags(context);\n return instance?.isFeatureFlagEnabled(flag) ?? false;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCA,MAAM,UAA4B,KAAQ,QACxC,OAAO,UAAU,eAAe,KAAK,KAAK,GAAG;AAE/C,IAAA,sBAAA,MACM,4BAA4B,WAAW;;;;;0BAOA;GACzC,sBAAsB;GACtB,iCAAiC;GACjC,+BAA+B;GAC/B,2BAA2B;GAC3B,gCAAgC;GAChC,oDAAoD;GACpD,uCAAuC;GACvC,yBAAyB;GACzB,sCAAsC;GACtC,2CAA2C;EAC7C;;CAEA,WAAW,qBAAqB;EAC9B,OAAO,OAAO,KAAA,qBAAyB,gBAAgB;CACzD;CAEA,cAAc;EACZ,MAAM;eAxBQA;eACc,CAAC;EAwB7B,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;CACpC;CAEA,oBAAoB;EAClB,MAAM,kBAAkB;EACxB,KAAK,YAAY;CACnB;CAEA,yBACE,MACA,SACA,QACA;EACA,MAAM,QAAQ,WAAW,QAAQ,WAAW;EAC5C,KAAK,MAAM,QAAQ;EAGnB,MAAM,mBAAmB,OAAA,qBAA2B,kBAAkB,IAAI,IAAA,qBAClD,iBAAiB,QACrC;EACJ,IACE,oBACA,KAAK,mBAAmB,YAAY,kBAEpC,KAAK,kBAAkB,aAAa,MAAM,EAAE;EAG9C,KAAK,YAAY;CACnB;CAEA,4BAAoC;EAClC,KAAK,MAAM,CAAC,MAAM,qBAAqB,OAAO,QAAA,qBACxB,gBACtB,GAAG;GACD,IAAI,CAAC,kBACH;GAGF,IAAI,YAAY;GAChB,IAAI;IACF,YAAY,KAAK,MAAM,QAAQ,IAAI;GACrC,QAAQ;IACN,YAAY;GACd;GAEA,KAAK,MAAM,WAAW,KAAK,iBACzB,iBAAiB,YAAY,CAC/B,GAAG;IACD,IAAI,uBAAuB,OAAsB,MAAM,MACrD;IAGF,IAAI,WACF,QAAQ,aAAa,MAAM,EAAE;SAE7B,QAAQ,gBAAgB,IAAI;GAEhC;EACF;CACF;CAEA,+BAAuC;EACrC,IAAI,SAAsB,KAAK;EAC/B,OAAO,QAAQ;GACb,IAAI,kBAAkB,YAAY;IAChC,SAAS,OAAO;IAChB;GACF;GACA,IAAI,kBAAA,sBACF,OAAO;GAET,SAAS,OAAO;EAClB;EACA,OAAO;CACT;CAEA,iBAAyB;EACvB,OAAO,KAAK,6BAA6B,CAAC,EAAE,SAAS,KAAK;CAC5D;CAEA,6BAAqC;EACnC,KAAK,MAAM,WAAW,KAAK,iBAAiB,eAAe,GACzD,IACE,mBAAA,wBACA,QAAQ,6BAA6B,MAAM,MAE3C,QAAQ,YAAY;CAG1B;CAEA,cAAsB;EACpB,MAAM,WAAW,YAAY,KAAK,KAAK;EACvC,MAAM,cAAc,KAAK,eAAe,KAAKA;EAC7C,IAAI,aACF,SAAS,eAAe,WAAW;EAErC,KAAK,QAAQ;EACb,KAAK,0BAA0B;EAC/B,KAAK,2BAA2B;CAClC;CAEA,SAAS;EACP,OAAO,IAAI;CACb;CAEA,qBAA4B,MAAc;EACxC,OAAO,KAAK,MAAM,QAAQ,IAAI;CAChC;CAEA,WAAmB;EACjB,OAAO,KAAK;CACd;AACF;yDA5ICC,cAAc,eAAe,CAAA,GAAA,mBAAA;AA8I9B,IAAA,wBAAe;AAKf,SAAgB,uBACd,IAC4B;CAC5B,IAAI,SAAsB,GAAG;CAC7B,OAAO,QAAQ;EACb,IAAI,kBAAkB,YAAY;GAChC,SAAS,OAAO;GAChB;EACF;EACA,IAAI,kBAAkB,qBACpB,OAAO;EAET,SAAU,OAAuB;CACnC;CACA,OAAO;AACT;AAGA,SAAgB,qBACd,MACA,SACS;CAET,OADiB,uBAAuB,OAC1B,CAAC,EAAE,qBAAqB,IAAI,KAAK;AACjD"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["GlobalFeatureFlags","customElement"],"sources":["../../../src/components/feature-flags/index.ts"],"sourcesContent":["/**\n * Copyright IBM Corp. 2025, 2026\n *\n * This source code is licensed under the Apache-2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/**\n * <feature-flags> provides scoped feature flags to child components.\n *\n * Usage:\n * Wrap any child components inside <feature-flags> to provide scoped feature flags like this:\n * <feature-flags enable-dialog-element=\"true\">\n * <component></component>\n * </feature-flags>\n *\n * The supported flags are documented as `@attr` tags on `FeatureFlagsElement`\n * below, which is also what surfaces them in `custom-elements.json`.\n *\n * How to check a Flag in your component:\n * import { isFeatureFlagEnabled } from './feature-flags';\n * isFeatureFlagEnabled('enable-dialog-element', this)\n * Returns true if the flag is enabled in the nearest <feature-flags> ancestor\n */\n\nimport {\n FeatureFlags as GlobalFeatureFlags,\n createScope,\n notifyAvailableFlag,\n} from '@carbon/feature-flags';\nimport { carbonElement as customElement } from '../../globals/decorators/carbon-element';\nimport { LitElement, html } from 'lit';\n\ntype FeatureFlags = Record<string, boolean>;\n\nconst hasOwn = <T extends object>(obj: T, key: PropertyKey): key is keyof T =>\n Object.prototype.hasOwnProperty.call(obj, key);\n\n/**\n * Feature Flags\n *\n * Provides scoped feature flags to child components. Flags are read from the\n * nearest `<feature-flags>` ancestor, and nested elements inherit any flag they\n * do not set themselves.\n *\n * Attributes are declared below rather than inferred, because the flag list is\n * built at runtime from `observedAttributes` and cannot be read statically.\n *\n * @element feature-flags\n *\n * @attr {boolean} enable-v12-release - Enable the features and functionality\n * for the v12 Release. Enabling this turns on every `enable-v12-*` flag at\n * once, as well as `enable-focus-wrap-without-sentinels`.\n * @attr {boolean} enable-v12-tile-default-icons - Enable rendering of default\n * icons in the tile components. Becomes the default behavior in v12.\n * @attr {boolean} enable-v12-tile-radio-icons - Enable rendering of radio icons\n * in the `cds-custom-radio-tile` component. Becomes the default behavior in v12.\n * @attr {boolean} enable-v12-overflowmenu - Enable the use of the v12\n * `cds-custom-overflow-menu` leveraging the menu subcomponents. Becomes the default\n * behavior in v12.\n * @attr {boolean} enable-v12-dynamic-floating-styles - Enable dynamic setting\n * of floating styles for components like `cds-custom-popover`, `cds-custom-tooltip`, etc.\n * Becomes the default behavior in v12.\n * @attr {boolean} enable-v12-toggle-reduced-label-spacing - Enable a reduced\n * spacing between the toggle control and its label. Becomes the default\n * behavior in v12.\n * @attr {boolean} enable-treeview-controllable - Enable the new `cds-custom-treeview`\n * controllable API.\n * @attr {boolean} enable-dialog-element - Enable components to utilize the\n * native `dialog` element.\n * @attr {boolean} enable-focus-wrap-without-sentinels - Enable the new focus\n * wrap behavior that doesn't use sentinel nodes.\n * @attr {boolean} enable-experimental-focus-wrap-without-sentinels - Deprecated,\n * use `enable-focus-wrap-without-sentinels` instead.\n */\n@customElement('feature-flags')\nclass FeatureFlagsElement extends LitElement {\n private scope = GlobalFeatureFlags;\n private flags: FeatureFlags = {};\n\n /**\n * Mapping of feature flag attributes to their related component names.\n */\n private static readonly flagComponentMap = {\n 'enable-v12-release': null,\n 'enable-v12-tile-default-icons': 'CDS-CLICKABLE-TILE',\n 'enable-v12-tile-radio-icons': 'CDS-TILE',\n 'enable-v12-overflowmenu': 'CDS-OVERFLOW-MENU',\n 'enable-treeview-controllable': 'CDS-TREEVIEW',\n 'enable-experimental-focus-wrap-without-sentinels': 'CDS-FOCUS-WRAP',\n 'enable-focus-wrap-without-sentinels': 'CDS-FOCUS-WRAP',\n 'enable-dialog-element': 'CDS-MODAL',\n 'enable-v12-dynamic-floating-styles': 'CDS-FLOATING',\n 'enable-v12-toggle-reduced-label-spacing': 'CDS-TOGGLE',\n } as const;\n\n static get observedAttributes() {\n return Object.keys(FeatureFlagsElement.flagComponentMap);\n }\n\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n\n connectedCallback() {\n super.connectedCallback();\n this.updateScope();\n }\n\n attributeChangedCallback(\n name: string,\n _oldVal: string | null,\n newVal: string | null\n ) {\n const value = newVal !== null && newVal !== 'false';\n this.flags[name] = value;\n\n // Set feature flag to top component level\n const relatedComponent = hasOwn(FeatureFlagsElement.flagComponentMap, name)\n ? FeatureFlagsElement.flagComponentMap[name]\n : null;\n if (\n relatedComponent &&\n this.firstElementChild?.tagName === relatedComponent\n ) {\n this.firstElementChild.setAttribute(name, '');\n }\n\n this.updateScope();\n }\n\n private syncFeatureFlagAttributes() {\n for (const [flag, relatedComponent] of Object.entries(\n FeatureFlagsElement.flagComponentMap\n )) {\n if (!relatedComponent) {\n continue;\n }\n\n let isEnabled = false;\n try {\n isEnabled = this.scope.enabled(flag);\n } catch {\n isEnabled = false;\n }\n\n for (const element of this.querySelectorAll(\n relatedComponent.toLowerCase()\n )) {\n if (findParentFeatureFlags(element as HTMLElement) !== this) {\n continue;\n }\n\n if (isEnabled) {\n element.setAttribute(flag, '');\n } else {\n element.removeAttribute(flag);\n }\n }\n }\n }\n\n private getParentFeatureFlagsElement() {\n let parent: Node | null = this.parentNode;\n while (parent) {\n if (parent instanceof ShadowRoot) {\n parent = parent.host;\n continue;\n }\n if (parent instanceof FeatureFlagsElement) {\n return parent;\n }\n parent = parent.parentNode;\n }\n return null;\n }\n\n private getParentScope() {\n return this.getParentFeatureFlagsElement()?.getScope() ?? null;\n }\n\n private syncChildFeatureFlagScopes() {\n for (const element of this.querySelectorAll('feature-flags')) {\n if (\n element instanceof FeatureFlagsElement &&\n element.getParentFeatureFlagsElement() === this\n ) {\n element.updateScope();\n }\n }\n }\n\n private updateScope() {\n const newScope = createScope(this.flags);\n const parentScope = this.getParentScope() || GlobalFeatureFlags;\n if (parentScope) {\n newScope.mergeWithScope(parentScope);\n }\n this.scope = newScope;\n this.syncFeatureFlagAttributes();\n this.syncChildFeatureFlagScopes();\n }\n\n render() {\n return html` <slot></slot> `;\n }\n\n public isFeatureFlagEnabled(flag: string) {\n return this.scope.enabled(flag);\n }\n\n private getScope() {\n return this.scope;\n }\n}\n\nexport default FeatureFlagsElement;\n\n// Utility functions\n\n// Function to find the nearest parent FeatureFlagsElement\nexport function findParentFeatureFlags(\n el: HTMLElement\n): FeatureFlagsElement | null {\n let parent: Node | null = el.parentNode;\n while (parent) {\n if (parent instanceof ShadowRoot) {\n parent = parent.host;\n continue;\n }\n if (parent instanceof FeatureFlagsElement) {\n return parent;\n }\n parent = (parent as HTMLElement).parentNode;\n }\n return null;\n}\n\n// function to check if a feature flag is enabled in components\nexport function isFeatureFlagEnabled(\n flag: string,\n context: HTMLElement\n): boolean {\n const instance = findParentFeatureFlags(context);\n const enabled = instance?.isFeatureFlagEnabled(flag) ?? false;\n\n if (process.env.NODE_ENV !== 'production') {\n notifyAvailableFlag(flag, enabled);\n }\n\n return enabled;\n}\n"],"mappings":"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"}
|
|
@@ -190,6 +190,12 @@ const featureFlagInfo = [
|
|
|
190
190
|
];
|
|
191
191
|
const v12ReleaseFlag = "enable-v12-release";
|
|
192
192
|
const v12FlagPrefix = "enable-v12-";
|
|
193
|
+
const unprefixedV12Flags = /* @__PURE__ */ new Set(["enable-focus-wrap-without-sentinels"]);
|
|
194
|
+
/**
|
|
195
|
+
* Whether a flag becomes the default behavior in v12, and so is turned on by
|
|
196
|
+
* `enable-v12-release`.
|
|
197
|
+
*/
|
|
198
|
+
const isV12Flag = (name) => name !== "enable-v12-release" && (name.startsWith(v12FlagPrefix) || unprefixedV12Flags.has(name));
|
|
193
199
|
var FeatureFlagScope = class {
|
|
194
200
|
constructor(flags) {
|
|
195
201
|
this.flags = /* @__PURE__ */ new Map();
|
|
@@ -244,11 +250,45 @@ var FeatureFlagScope = class {
|
|
|
244
250
|
*/
|
|
245
251
|
enabled(name) {
|
|
246
252
|
this.checkForFlag(name);
|
|
247
|
-
if (name
|
|
253
|
+
if (isV12Flag(name) && this.flags.get("enable-v12-release") === true) return true;
|
|
248
254
|
return this.flags.get(name) ?? false;
|
|
249
255
|
}
|
|
250
256
|
};
|
|
251
257
|
/**
|
|
258
|
+
* Copyright IBM Corp. 2026
|
|
259
|
+
*
|
|
260
|
+
* This source code is licensed under the Apache-2.0 license found in the
|
|
261
|
+
* LICENSE file in the root directory of this source tree.
|
|
262
|
+
*/
|
|
263
|
+
const descriptions = new Map(featureFlagInfo.map(({ name, description }) => [name, description]));
|
|
264
|
+
const notified = /* @__PURE__ */ new Set();
|
|
265
|
+
/**
|
|
266
|
+
* Log a one-time notice that a v12 feature flag is available but not enabled.
|
|
267
|
+
*
|
|
268
|
+
* A v12 flag becomes the default behavior in v12, so a consumer on v11 is opted
|
|
269
|
+
* out of a change they will eventually receive regardless. Surfacing it lets
|
|
270
|
+
* them preview and migrate on their own schedule instead of absorbing it all at
|
|
271
|
+
* the major release.
|
|
272
|
+
*
|
|
273
|
+
* Only v12 flags are reported. Other flags are opt-in indefinitely and have no
|
|
274
|
+
* deadline attached, so announcing them would be noise.
|
|
275
|
+
*
|
|
276
|
+
* Callers are responsible for restricting this to development. This package is
|
|
277
|
+
* bundled with `process.env.NODE_ENV` inlined at publish time, so a guard here
|
|
278
|
+
* would be resolved once when the package is built rather than by the
|
|
279
|
+
* consumer's bundler. The framework packages guard at their call sites, where
|
|
280
|
+
* `process.env.NODE_ENV` survives for the consumer to replace.
|
|
281
|
+
*
|
|
282
|
+
* @param name - The flag that was checked.
|
|
283
|
+
* @param enabled - Whether the flag resolved to enabled.
|
|
284
|
+
*/
|
|
285
|
+
const notifyAvailableFlag = (name, enabled) => {
|
|
286
|
+
if (enabled || !isV12Flag(name) || notified.has(name)) return;
|
|
287
|
+
notified.add(name);
|
|
288
|
+
const description = descriptions.get(name)?.trim();
|
|
289
|
+
console.info(`[@carbon/feature-flags] \`${name}\` is available but not enabled.` + (description ? `\n${description}` : "") + `\nThis becomes the default behavior in v12. Enable it to migrate early, or enable \`${v12ReleaseFlag}\` to turn on every v12 flag at once.`);
|
|
290
|
+
};
|
|
291
|
+
/**
|
|
252
292
|
* Copyright IBM Corp. 2015, 2026
|
|
253
293
|
*
|
|
254
294
|
* This source code is licensed under the Apache-2.0 license found in the
|
|
@@ -267,6 +307,6 @@ FeatureFlags.disable.bind(FeatureFlags);
|
|
|
267
307
|
FeatureFlags.enabled.bind(FeatureFlags);
|
|
268
308
|
FeatureFlags.merge.bind(FeatureFlags);
|
|
269
309
|
//#endregion
|
|
270
|
-
export { FeatureFlags, createScope };
|
|
310
|
+
export { FeatureFlags, createScope, notifyAvailableFlag };
|
|
271
311
|
|
|
272
312
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../../../feature-flags/es/index.js"],"sourcesContent":["/**\n * Copyright IBM Corp. 2015, 2026\n *\n * This source code is licensed under the Apache-2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n//#region src/generated/feature-flags.js\n/**\n* Code generated by @carbon/feature-flags. DO NOT EDIT.\n*\n* Copyright IBM Corp. 2015, 2023\n*\n* This source code is licensed under the Apache-2.0 license found in the\n* LICENSE file in the root directory of this source tree.\n*/\nconst enabled$1 = {};\ntry {\n\tif (process.env.CARBON_ENABLE_CSS_CUSTOM_PROPERTIES) if (process.env.CARBON_ENABLE_CSS_CUSTOM_PROPERTIES === \"true\") enabled$1.enableCssCustomProperties = true;\n\telse enabled$1.enableCssCustomProperties = false;\n\telse enabled$1.enableCssCustomProperties = false;\n\tif (process.env.CARBON_ENABLE_CSS_GRID) if (process.env.CARBON_ENABLE_CSS_GRID === \"true\") enabled$1.enableCssGrid = true;\n\telse enabled$1.enableCssGrid = false;\n\telse enabled$1.enableCssGrid = false;\n\tif (process.env.CARBON_ENABLE_V11_RELEASE) if (process.env.CARBON_ENABLE_V11_RELEASE === \"true\") enabled$1.enableV11Release = true;\n\telse enabled$1.enableV11Release = false;\n\telse enabled$1.enableV11Release = true;\n\tif (process.env.CARBON_ENABLE_V12_RELEASE) if (process.env.CARBON_ENABLE_V12_RELEASE === \"true\") enabled$1.enableV12Release = true;\n\telse enabled$1.enableV12Release = false;\n\telse enabled$1.enableV12Release = false;\n\tif (process.env.CARBON_ENABLE_EXPERIMENTAL_TILE_CONTRAST) if (process.env.CARBON_ENABLE_EXPERIMENTAL_TILE_CONTRAST === \"true\") enabled$1.enableExperimentalTileContrast = true;\n\telse enabled$1.enableExperimentalTileContrast = false;\n\telse enabled$1.enableExperimentalTileContrast = false;\n\tif (process.env.CARBON_ENABLE_TILE_CONTRAST) if (process.env.CARBON_ENABLE_TILE_CONTRAST === \"true\") enabled$1.enableTileContrast = true;\n\telse enabled$1.enableTileContrast = false;\n\telse enabled$1.enableTileContrast = false;\n\tif (process.env.CARBON_ENABLE_V12_TILE_DEFAULT_ICONS) if (process.env.CARBON_ENABLE_V12_TILE_DEFAULT_ICONS === \"true\") enabled$1.enableV12TileDefaultIcons = true;\n\telse enabled$1.enableV12TileDefaultIcons = false;\n\telse enabled$1.enableV12TileDefaultIcons = false;\n\tif (process.env.CARBON_ENABLE_V12_TILE_RADIO_ICONS) if (process.env.CARBON_ENABLE_V12_TILE_RADIO_ICONS === \"true\") enabled$1.enableV12TileRadioIcons = true;\n\telse enabled$1.enableV12TileRadioIcons = false;\n\telse enabled$1.enableV12TileRadioIcons = false;\n\tif (process.env.CARBON_ENABLE_V12_OVERFLOWMENU) if (process.env.CARBON_ENABLE_V12_OVERFLOWMENU === \"true\") enabled$1.enableV12Overflowmenu = true;\n\telse enabled$1.enableV12Overflowmenu = false;\n\telse enabled$1.enableV12Overflowmenu = false;\n\tif (process.env.CARBON_ENABLE_TREEVIEW_CONTROLLABLE) if (process.env.CARBON_ENABLE_TREEVIEW_CONTROLLABLE === \"true\") enabled$1.enableTreeviewControllable = true;\n\telse enabled$1.enableTreeviewControllable = false;\n\telse enabled$1.enableTreeviewControllable = false;\n\tif (process.env.CARBON_ENABLE_V12_STRUCTURED_LIST_VISIBLE_ICONS) if (process.env.CARBON_ENABLE_V12_STRUCTURED_LIST_VISIBLE_ICONS === \"true\") enabled$1.enableV12StructuredListVisibleIcons = true;\n\telse enabled$1.enableV12StructuredListVisibleIcons = false;\n\telse enabled$1.enableV12StructuredListVisibleIcons = false;\n\tif (process.env.CARBON_ENABLE_EXPERIMENTAL_FOCUS_WRAP_WITHOUT_SENTINELS) if (process.env.CARBON_ENABLE_EXPERIMENTAL_FOCUS_WRAP_WITHOUT_SENTINELS === \"true\") enabled$1.enableExperimentalFocusWrapWithoutSentinels = true;\n\telse enabled$1.enableExperimentalFocusWrapWithoutSentinels = false;\n\telse enabled$1.enableExperimentalFocusWrapWithoutSentinels = false;\n\tif (process.env.CARBON_ENABLE_FOCUS_WRAP_WITHOUT_SENTINELS) if (process.env.CARBON_ENABLE_FOCUS_WRAP_WITHOUT_SENTINELS === \"true\") enabled$1.enableFocusWrapWithoutSentinels = true;\n\telse enabled$1.enableFocusWrapWithoutSentinels = false;\n\telse enabled$1.enableFocusWrapWithoutSentinels = false;\n\tif (process.env.CARBON_ENABLE_DIALOG_ELEMENT) if (process.env.CARBON_ENABLE_DIALOG_ELEMENT === \"true\") enabled$1.enableDialogElement = true;\n\telse enabled$1.enableDialogElement = false;\n\telse enabled$1.enableDialogElement = false;\n\tif (process.env.CARBON_ENABLE_V12_DYNAMIC_FLOATING_STYLES) if (process.env.CARBON_ENABLE_V12_DYNAMIC_FLOATING_STYLES === \"true\") enabled$1.enableV12DynamicFloatingStyles = true;\n\telse enabled$1.enableV12DynamicFloatingStyles = false;\n\telse enabled$1.enableV12DynamicFloatingStyles = false;\n\tif (process.env.CARBON_ENABLE_V12_TOGGLE_REDUCED_LABEL_SPACING) if (process.env.CARBON_ENABLE_V12_TOGGLE_REDUCED_LABEL_SPACING === \"true\") enabled$1.enableV12ToggleReducedLabelSpacing = true;\n\telse enabled$1.enableV12ToggleReducedLabelSpacing = false;\n\telse enabled$1.enableV12ToggleReducedLabelSpacing = false;\n\tif (process.env.CARBON_ENABLE_ENHANCED_FILE_UPLOADER) if (process.env.CARBON_ENABLE_ENHANCED_FILE_UPLOADER === \"true\") enabled$1.enableEnhancedFileUploader = true;\n\telse enabled$1.enableEnhancedFileUploader = false;\n\telse enabled$1.enableEnhancedFileUploader = false;\n\tif (process.env.CARBON_ENABLE_PRESENCE) if (process.env.CARBON_ENABLE_PRESENCE === \"true\") enabled$1.enablePresence = true;\n\telse enabled$1.enablePresence = false;\n\telse enabled$1.enablePresence = false;\n} catch (error) {\n\tenabled$1.enableCssCustomProperties = false;\n\tenabled$1.enableCssGrid = false;\n\tenabled$1.enableV11Release = true;\n\tenabled$1.enableV12Release = false;\n\tenabled$1.enableExperimentalTileContrast = false;\n\tenabled$1.enableTileContrast = false;\n\tenabled$1.enableV12TileDefaultIcons = false;\n\tenabled$1.enableV12TileRadioIcons = false;\n\tenabled$1.enableV12Overflowmenu = false;\n\tenabled$1.enableTreeviewControllable = false;\n\tenabled$1.enableV12StructuredListVisibleIcons = false;\n\tenabled$1.enableExperimentalFocusWrapWithoutSentinels = false;\n\tenabled$1.enableFocusWrapWithoutSentinels = false;\n\tenabled$1.enableDialogElement = false;\n\tenabled$1.enableV12DynamicFloatingStyles = false;\n\tenabled$1.enableV12ToggleReducedLabelSpacing = false;\n\tenabled$1.enableEnhancedFileUploader = false;\n\tenabled$1.enablePresence = false;\n}\nconst featureFlagInfo = [\n\t{\n\t\tname: \"enable-css-custom-properties\",\n\t\tdescription: \"Describe what the flag does\",\n\t\tenabled: enabled$1.enableCssCustomProperties\n\t},\n\t{\n\t\tname: \"enable-css-grid\",\n\t\tdescription: \"Enable CSS Grid Layout in the Grid and Column React components\\n\",\n\t\tenabled: enabled$1.enableCssGrid\n\t},\n\t{\n\t\tname: \"enable-v11-release\",\n\t\tdescription: \"Enable the features and functionality for the v11 Release\\n\",\n\t\tenabled: enabled$1.enableV11Release\n\t},\n\t{\n\t\tname: \"enable-v12-release\",\n\t\tdescription: \"Enable the features and functionality for the v12 Release\\n\",\n\t\tenabled: enabled$1.enableV12Release\n\t},\n\t{\n\t\tname: \"enable-experimental-tile-contrast\",\n\t\tdescription: \"Deprecated, use enable-tile-contrast instead\\n\",\n\t\tenabled: enabled$1.enableExperimentalTileContrast\n\t},\n\t{\n\t\tname: \"enable-tile-contrast\",\n\t\tdescription: \"Enable the experimental tile improved contrast styles\\n\",\n\t\tenabled: enabled$1.enableTileContrast\n\t},\n\t{\n\t\tname: \"enable-v12-tile-default-icons\",\n\t\tdescription: \"Enable rendering of default icons in the tile components\\n\",\n\t\tenabled: enabled$1.enableV12TileDefaultIcons\n\t},\n\t{\n\t\tname: \"enable-v12-tile-radio-icons\",\n\t\tdescription: \"Enable rendering of radio icons in the RadioTile component\\n\",\n\t\tenabled: enabled$1.enableV12TileRadioIcons\n\t},\n\t{\n\t\tname: \"enable-v12-overflowmenu\",\n\t\tdescription: \"Enable the use of the v12 OverflowMenu leveraging the Menu subcomponents\\n\",\n\t\tenabled: enabled$1.enableV12Overflowmenu\n\t},\n\t{\n\t\tname: \"enable-treeview-controllable\",\n\t\tdescription: \"Enable the new TreeView controllable API\\n\",\n\t\tenabled: enabled$1.enableTreeviewControllable\n\t},\n\t{\n\t\tname: \"enable-v12-structured-list-visible-icons\",\n\t\tdescription: \"Enable rendering of radio icons in the StructuredList component\\n\",\n\t\tenabled: enabled$1.enableV12StructuredListVisibleIcons\n\t},\n\t{\n\t\tname: \"enable-experimental-focus-wrap-without-sentinels\",\n\t\tdescription: \"Deprecated, use enable-focus-wrap-without-sentinels instead\\n\",\n\t\tenabled: enabled$1.enableExperimentalFocusWrapWithoutSentinels\n\t},\n\t{\n\t\tname: \"enable-focus-wrap-without-sentinels\",\n\t\tdescription: \"Enable the new focus wrap behavior that doesn't use sentinel nodes\\n\",\n\t\tenabled: enabled$1.enableFocusWrapWithoutSentinels\n\t},\n\t{\n\t\tname: \"enable-dialog-element\",\n\t\tdescription: \"Enable components to utilize the native dialog element\\n\",\n\t\tenabled: enabled$1.enableDialogElement\n\t},\n\t{\n\t\tname: \"enable-v12-dynamic-floating-styles\",\n\t\tdescription: \"Enable dynamic setting of floating styles for components like Popover, Tooltip, etc.\\n\",\n\t\tenabled: enabled$1.enableV12DynamicFloatingStyles\n\t},\n\t{\n\t\tname: \"enable-v12-toggle-reduced-label-spacing\",\n\t\tdescription: \"Enable a reduced spacing between the toggle control and its label\\n\",\n\t\tenabled: enabled$1.enableV12ToggleReducedLabelSpacing\n\t},\n\t{\n\t\tname: \"enable-enhanced-file-uploader\",\n\t\tdescription: \"Enable enhanced functionality for the FileUploader component, including richer callback data and expanded trigger events for onChange and onDelete.\\n\",\n\t\tenabled: enabled$1.enableEnhancedFileUploader\n\t},\n\t{\n\t\tname: \"enable-presence\",\n\t\tdescription: \"Enable components to remain unmounted in closed state and mount in open state.\\n\",\n\t\tenabled: enabled$1.enablePresence\n\t}\n];\n//#endregion\n//#region src/FeatureFlagScope.ts\nconst v12ReleaseFlag = \"enable-v12-release\";\nconst v12FlagPrefix = \"enable-v12-\";\nvar FeatureFlagScope = class {\n\tconstructor(flags) {\n\t\tthis.flags = /* @__PURE__ */ new Map();\n\t\tif (flags) Object.keys(flags).forEach((key) => {\n\t\t\tthis.flags.set(key, flags[key]);\n\t\t});\n\t}\n\t/**\n\t* Check to see if a flag exists\n\t*/\n\tcheckForFlag(name) {\n\t\tif (!this.flags.has(name)) throw new Error(`Unable to find a feature flag with the name: \\`${name}\\``);\n\t}\n\t/**\n\t* Add a feature flag\n\t*/\n\tadd(name, enabled) {\n\t\tif (this.flags.has(name)) throw new Error(`The feature flag: ${name} already exists`);\n\t\tthis.flags.set(name, enabled);\n\t}\n\t/**\n\t* Enable a feature flag\n\t*/\n\tenable(name) {\n\t\tthis.checkForFlag(name);\n\t\tthis.flags.set(name, true);\n\t}\n\t/**\n\t* Disable a feature flag\n\t*/\n\tdisable(name) {\n\t\tthis.checkForFlag(name);\n\t\tthis.flags.set(name, false);\n\t}\n\t/**\n\t* Merge the given feature flags with the current set of feature flags.\n\t* Duplicate keys will be set to the value in the given feature flags.\n\t*/\n\tmerge(flags) {\n\t\tObject.keys(flags).forEach((key) => {\n\t\t\tthis.flags.set(key, flags[key]);\n\t\t});\n\t}\n\tmergeWithScope(scope) {\n\t\tfor (const [key, value] of scope.flags) {\n\t\t\tif (this.flags.has(key)) continue;\n\t\t\tthis.flags.set(key, value);\n\t\t}\n\t}\n\t/**\n\t* Check if a feature flag is enabled\n\t*/\n\tenabled(name) {\n\t\tthis.checkForFlag(name);\n\t\tif (name !== v12ReleaseFlag && name.startsWith(v12FlagPrefix) && this.flags.get(v12ReleaseFlag) === true) return true;\n\t\treturn this.flags.get(name) ?? false;\n\t}\n};\n//#endregion\n//#region src/index.ts\n/**\n* Copyright IBM Corp. 2015, 2026\n*\n* This source code is licensed under the Apache-2.0 license found in the\n* LICENSE file in the root directory of this source tree.\n*/\nconst createScope = (flags) => new FeatureFlagScope(flags);\nconst createDefaultScope = () => {\n\tconst scope = createScope();\n\tfor (const featureFlag of featureFlagInfo) scope.add(featureFlag.name, featureFlag.enabled);\n\treturn scope;\n};\nconst FeatureFlags = createDefaultScope();\nconst add = FeatureFlags.add.bind(FeatureFlags);\nconst enable = FeatureFlags.enable.bind(FeatureFlags);\nconst disable = FeatureFlags.disable.bind(FeatureFlags);\nconst enabled = FeatureFlags.enabled.bind(FeatureFlags);\nconst merge = FeatureFlags.merge.bind(FeatureFlags);\n//#endregion\nexport { FeatureFlags, add, createScope, disable, enable, enabled, merge };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../../feature-flags/es/index.js"],"sourcesContent":["/**\n * Copyright IBM Corp. 2015, 2026\n *\n * This source code is licensed under the Apache-2.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n//#region src/generated/feature-flags.js\n/**\n* Code generated by @carbon/feature-flags. DO NOT EDIT.\n*\n* Copyright IBM Corp. 2015, 2023\n*\n* This source code is licensed under the Apache-2.0 license found in the\n* LICENSE file in the root directory of this source tree.\n*/\nconst enabled$1 = {};\ntry {\n\tif (process.env.CARBON_ENABLE_CSS_CUSTOM_PROPERTIES) if (process.env.CARBON_ENABLE_CSS_CUSTOM_PROPERTIES === \"true\") enabled$1.enableCssCustomProperties = true;\n\telse enabled$1.enableCssCustomProperties = false;\n\telse enabled$1.enableCssCustomProperties = false;\n\tif (process.env.CARBON_ENABLE_CSS_GRID) if (process.env.CARBON_ENABLE_CSS_GRID === \"true\") enabled$1.enableCssGrid = true;\n\telse enabled$1.enableCssGrid = false;\n\telse enabled$1.enableCssGrid = false;\n\tif (process.env.CARBON_ENABLE_V11_RELEASE) if (process.env.CARBON_ENABLE_V11_RELEASE === \"true\") enabled$1.enableV11Release = true;\n\telse enabled$1.enableV11Release = false;\n\telse enabled$1.enableV11Release = true;\n\tif (process.env.CARBON_ENABLE_V12_RELEASE) if (process.env.CARBON_ENABLE_V12_RELEASE === \"true\") enabled$1.enableV12Release = true;\n\telse enabled$1.enableV12Release = false;\n\telse enabled$1.enableV12Release = false;\n\tif (process.env.CARBON_ENABLE_EXPERIMENTAL_TILE_CONTRAST) if (process.env.CARBON_ENABLE_EXPERIMENTAL_TILE_CONTRAST === \"true\") enabled$1.enableExperimentalTileContrast = true;\n\telse enabled$1.enableExperimentalTileContrast = false;\n\telse enabled$1.enableExperimentalTileContrast = false;\n\tif (process.env.CARBON_ENABLE_TILE_CONTRAST) if (process.env.CARBON_ENABLE_TILE_CONTRAST === \"true\") enabled$1.enableTileContrast = true;\n\telse enabled$1.enableTileContrast = false;\n\telse enabled$1.enableTileContrast = false;\n\tif (process.env.CARBON_ENABLE_V12_TILE_DEFAULT_ICONS) if (process.env.CARBON_ENABLE_V12_TILE_DEFAULT_ICONS === \"true\") enabled$1.enableV12TileDefaultIcons = true;\n\telse enabled$1.enableV12TileDefaultIcons = false;\n\telse enabled$1.enableV12TileDefaultIcons = false;\n\tif (process.env.CARBON_ENABLE_V12_TILE_RADIO_ICONS) if (process.env.CARBON_ENABLE_V12_TILE_RADIO_ICONS === \"true\") enabled$1.enableV12TileRadioIcons = true;\n\telse enabled$1.enableV12TileRadioIcons = false;\n\telse enabled$1.enableV12TileRadioIcons = false;\n\tif (process.env.CARBON_ENABLE_V12_OVERFLOWMENU) if (process.env.CARBON_ENABLE_V12_OVERFLOWMENU === \"true\") enabled$1.enableV12Overflowmenu = true;\n\telse enabled$1.enableV12Overflowmenu = false;\n\telse enabled$1.enableV12Overflowmenu = false;\n\tif (process.env.CARBON_ENABLE_TREEVIEW_CONTROLLABLE) if (process.env.CARBON_ENABLE_TREEVIEW_CONTROLLABLE === \"true\") enabled$1.enableTreeviewControllable = true;\n\telse enabled$1.enableTreeviewControllable = false;\n\telse enabled$1.enableTreeviewControllable = false;\n\tif (process.env.CARBON_ENABLE_V12_STRUCTURED_LIST_VISIBLE_ICONS) if (process.env.CARBON_ENABLE_V12_STRUCTURED_LIST_VISIBLE_ICONS === \"true\") enabled$1.enableV12StructuredListVisibleIcons = true;\n\telse enabled$1.enableV12StructuredListVisibleIcons = false;\n\telse enabled$1.enableV12StructuredListVisibleIcons = false;\n\tif (process.env.CARBON_ENABLE_EXPERIMENTAL_FOCUS_WRAP_WITHOUT_SENTINELS) if (process.env.CARBON_ENABLE_EXPERIMENTAL_FOCUS_WRAP_WITHOUT_SENTINELS === \"true\") enabled$1.enableExperimentalFocusWrapWithoutSentinels = true;\n\telse enabled$1.enableExperimentalFocusWrapWithoutSentinels = false;\n\telse enabled$1.enableExperimentalFocusWrapWithoutSentinels = false;\n\tif (process.env.CARBON_ENABLE_FOCUS_WRAP_WITHOUT_SENTINELS) if (process.env.CARBON_ENABLE_FOCUS_WRAP_WITHOUT_SENTINELS === \"true\") enabled$1.enableFocusWrapWithoutSentinels = true;\n\telse enabled$1.enableFocusWrapWithoutSentinels = false;\n\telse enabled$1.enableFocusWrapWithoutSentinels = false;\n\tif (process.env.CARBON_ENABLE_DIALOG_ELEMENT) if (process.env.CARBON_ENABLE_DIALOG_ELEMENT === \"true\") enabled$1.enableDialogElement = true;\n\telse enabled$1.enableDialogElement = false;\n\telse enabled$1.enableDialogElement = false;\n\tif (process.env.CARBON_ENABLE_V12_DYNAMIC_FLOATING_STYLES) if (process.env.CARBON_ENABLE_V12_DYNAMIC_FLOATING_STYLES === \"true\") enabled$1.enableV12DynamicFloatingStyles = true;\n\telse enabled$1.enableV12DynamicFloatingStyles = false;\n\telse enabled$1.enableV12DynamicFloatingStyles = false;\n\tif (process.env.CARBON_ENABLE_V12_TOGGLE_REDUCED_LABEL_SPACING) if (process.env.CARBON_ENABLE_V12_TOGGLE_REDUCED_LABEL_SPACING === \"true\") enabled$1.enableV12ToggleReducedLabelSpacing = true;\n\telse enabled$1.enableV12ToggleReducedLabelSpacing = false;\n\telse enabled$1.enableV12ToggleReducedLabelSpacing = false;\n\tif (process.env.CARBON_ENABLE_ENHANCED_FILE_UPLOADER) if (process.env.CARBON_ENABLE_ENHANCED_FILE_UPLOADER === \"true\") enabled$1.enableEnhancedFileUploader = true;\n\telse enabled$1.enableEnhancedFileUploader = false;\n\telse enabled$1.enableEnhancedFileUploader = false;\n\tif (process.env.CARBON_ENABLE_PRESENCE) if (process.env.CARBON_ENABLE_PRESENCE === \"true\") enabled$1.enablePresence = true;\n\telse enabled$1.enablePresence = false;\n\telse enabled$1.enablePresence = false;\n} catch (error) {\n\tenabled$1.enableCssCustomProperties = false;\n\tenabled$1.enableCssGrid = false;\n\tenabled$1.enableV11Release = true;\n\tenabled$1.enableV12Release = false;\n\tenabled$1.enableExperimentalTileContrast = false;\n\tenabled$1.enableTileContrast = false;\n\tenabled$1.enableV12TileDefaultIcons = false;\n\tenabled$1.enableV12TileRadioIcons = false;\n\tenabled$1.enableV12Overflowmenu = false;\n\tenabled$1.enableTreeviewControllable = false;\n\tenabled$1.enableV12StructuredListVisibleIcons = false;\n\tenabled$1.enableExperimentalFocusWrapWithoutSentinels = false;\n\tenabled$1.enableFocusWrapWithoutSentinels = false;\n\tenabled$1.enableDialogElement = false;\n\tenabled$1.enableV12DynamicFloatingStyles = false;\n\tenabled$1.enableV12ToggleReducedLabelSpacing = false;\n\tenabled$1.enableEnhancedFileUploader = false;\n\tenabled$1.enablePresence = false;\n}\nconst featureFlagInfo = [\n\t{\n\t\tname: \"enable-css-custom-properties\",\n\t\tdescription: \"Describe what the flag does\",\n\t\tenabled: enabled$1.enableCssCustomProperties\n\t},\n\t{\n\t\tname: \"enable-css-grid\",\n\t\tdescription: \"Enable CSS Grid Layout in the Grid and Column React components\\n\",\n\t\tenabled: enabled$1.enableCssGrid\n\t},\n\t{\n\t\tname: \"enable-v11-release\",\n\t\tdescription: \"Enable the features and functionality for the v11 Release\\n\",\n\t\tenabled: enabled$1.enableV11Release\n\t},\n\t{\n\t\tname: \"enable-v12-release\",\n\t\tdescription: \"Enable the features and functionality for the v12 Release\\n\",\n\t\tenabled: enabled$1.enableV12Release\n\t},\n\t{\n\t\tname: \"enable-experimental-tile-contrast\",\n\t\tdescription: \"Deprecated, use enable-tile-contrast instead\\n\",\n\t\tenabled: enabled$1.enableExperimentalTileContrast\n\t},\n\t{\n\t\tname: \"enable-tile-contrast\",\n\t\tdescription: \"Enable the experimental tile improved contrast styles\\n\",\n\t\tenabled: enabled$1.enableTileContrast\n\t},\n\t{\n\t\tname: \"enable-v12-tile-default-icons\",\n\t\tdescription: \"Enable rendering of default icons in the tile components\\n\",\n\t\tenabled: enabled$1.enableV12TileDefaultIcons\n\t},\n\t{\n\t\tname: \"enable-v12-tile-radio-icons\",\n\t\tdescription: \"Enable rendering of radio icons in the RadioTile component\\n\",\n\t\tenabled: enabled$1.enableV12TileRadioIcons\n\t},\n\t{\n\t\tname: \"enable-v12-overflowmenu\",\n\t\tdescription: \"Enable the use of the v12 OverflowMenu leveraging the Menu subcomponents\\n\",\n\t\tenabled: enabled$1.enableV12Overflowmenu\n\t},\n\t{\n\t\tname: \"enable-treeview-controllable\",\n\t\tdescription: \"Enable the new TreeView controllable API\\n\",\n\t\tenabled: enabled$1.enableTreeviewControllable\n\t},\n\t{\n\t\tname: \"enable-v12-structured-list-visible-icons\",\n\t\tdescription: \"Enable rendering of radio icons in the StructuredList component\\n\",\n\t\tenabled: enabled$1.enableV12StructuredListVisibleIcons\n\t},\n\t{\n\t\tname: \"enable-experimental-focus-wrap-without-sentinels\",\n\t\tdescription: \"Deprecated, use enable-focus-wrap-without-sentinels instead\\n\",\n\t\tenabled: enabled$1.enableExperimentalFocusWrapWithoutSentinels\n\t},\n\t{\n\t\tname: \"enable-focus-wrap-without-sentinels\",\n\t\tdescription: \"Enable the new focus wrap behavior that doesn't use sentinel nodes\\n\",\n\t\tenabled: enabled$1.enableFocusWrapWithoutSentinels\n\t},\n\t{\n\t\tname: \"enable-dialog-element\",\n\t\tdescription: \"Enable components to utilize the native dialog element\\n\",\n\t\tenabled: enabled$1.enableDialogElement\n\t},\n\t{\n\t\tname: \"enable-v12-dynamic-floating-styles\",\n\t\tdescription: \"Enable dynamic setting of floating styles for components like Popover, Tooltip, etc.\\n\",\n\t\tenabled: enabled$1.enableV12DynamicFloatingStyles\n\t},\n\t{\n\t\tname: \"enable-v12-toggle-reduced-label-spacing\",\n\t\tdescription: \"Enable a reduced spacing between the toggle control and its label\\n\",\n\t\tenabled: enabled$1.enableV12ToggleReducedLabelSpacing\n\t},\n\t{\n\t\tname: \"enable-enhanced-file-uploader\",\n\t\tdescription: \"Enable enhanced functionality for the FileUploader component, including richer callback data and expanded trigger events for onChange and onDelete.\\n\",\n\t\tenabled: enabled$1.enableEnhancedFileUploader\n\t},\n\t{\n\t\tname: \"enable-presence\",\n\t\tdescription: \"Enable components to remain unmounted in closed state and mount in open state.\\n\",\n\t\tenabled: enabled$1.enablePresence\n\t}\n];\n//#endregion\n//#region src/FeatureFlagScope.ts\nconst v12ReleaseFlag = \"enable-v12-release\";\nconst v12FlagPrefix = \"enable-v12-\";\nconst unprefixedV12Flags = /* @__PURE__ */ new Set([\"enable-focus-wrap-without-sentinels\"]);\n/**\n* Whether a flag becomes the default behavior in v12, and so is turned on by\n* `enable-v12-release`.\n*/\nconst isV12Flag = (name) => name !== \"enable-v12-release\" && (name.startsWith(v12FlagPrefix) || unprefixedV12Flags.has(name));\nvar FeatureFlagScope = class {\n\tconstructor(flags) {\n\t\tthis.flags = /* @__PURE__ */ new Map();\n\t\tif (flags) Object.keys(flags).forEach((key) => {\n\t\t\tthis.flags.set(key, flags[key]);\n\t\t});\n\t}\n\t/**\n\t* Check to see if a flag exists\n\t*/\n\tcheckForFlag(name) {\n\t\tif (!this.flags.has(name)) throw new Error(`Unable to find a feature flag with the name: \\`${name}\\``);\n\t}\n\t/**\n\t* Add a feature flag\n\t*/\n\tadd(name, enabled) {\n\t\tif (this.flags.has(name)) throw new Error(`The feature flag: ${name} already exists`);\n\t\tthis.flags.set(name, enabled);\n\t}\n\t/**\n\t* Enable a feature flag\n\t*/\n\tenable(name) {\n\t\tthis.checkForFlag(name);\n\t\tthis.flags.set(name, true);\n\t}\n\t/**\n\t* Disable a feature flag\n\t*/\n\tdisable(name) {\n\t\tthis.checkForFlag(name);\n\t\tthis.flags.set(name, false);\n\t}\n\t/**\n\t* Merge the given feature flags with the current set of feature flags.\n\t* Duplicate keys will be set to the value in the given feature flags.\n\t*/\n\tmerge(flags) {\n\t\tObject.keys(flags).forEach((key) => {\n\t\t\tthis.flags.set(key, flags[key]);\n\t\t});\n\t}\n\tmergeWithScope(scope) {\n\t\tfor (const [key, value] of scope.flags) {\n\t\t\tif (this.flags.has(key)) continue;\n\t\t\tthis.flags.set(key, value);\n\t\t}\n\t}\n\t/**\n\t* Check if a feature flag is enabled\n\t*/\n\tenabled(name) {\n\t\tthis.checkForFlag(name);\n\t\tif (isV12Flag(name) && this.flags.get(\"enable-v12-release\") === true) return true;\n\t\treturn this.flags.get(name) ?? false;\n\t}\n};\n//#endregion\n//#region src/notify.ts\n/**\n* Copyright IBM Corp. 2026\n*\n* This source code is licensed under the Apache-2.0 license found in the\n* LICENSE file in the root directory of this source tree.\n*/\nconst descriptions = new Map(featureFlagInfo.map(({ name, description }) => [name, description]));\nconst notified = /* @__PURE__ */ new Set();\n/**\n* Log a one-time notice that a v12 feature flag is available but not enabled.\n*\n* A v12 flag becomes the default behavior in v12, so a consumer on v11 is opted\n* out of a change they will eventually receive regardless. Surfacing it lets\n* them preview and migrate on their own schedule instead of absorbing it all at\n* the major release.\n*\n* Only v12 flags are reported. Other flags are opt-in indefinitely and have no\n* deadline attached, so announcing them would be noise.\n*\n* Callers are responsible for restricting this to development. This package is\n* bundled with `process.env.NODE_ENV` inlined at publish time, so a guard here\n* would be resolved once when the package is built rather than by the\n* consumer's bundler. The framework packages guard at their call sites, where\n* `process.env.NODE_ENV` survives for the consumer to replace.\n*\n* @param name - The flag that was checked.\n* @param enabled - Whether the flag resolved to enabled.\n*/\nconst notifyAvailableFlag = (name, enabled) => {\n\tif (enabled || !isV12Flag(name) || notified.has(name)) return;\n\tnotified.add(name);\n\tconst description = descriptions.get(name)?.trim();\n\tconsole.info(`[@carbon/feature-flags] \\`${name}\\` is available but not enabled.` + (description ? `\\n${description}` : \"\") + `\\nThis becomes the default behavior in v12. Enable it to migrate early, or enable \\`${v12ReleaseFlag}\\` to turn on every v12 flag at once.`);\n};\n//#endregion\n//#region src/index.ts\n/**\n* Copyright IBM Corp. 2015, 2026\n*\n* This source code is licensed under the Apache-2.0 license found in the\n* LICENSE file in the root directory of this source tree.\n*/\nconst createScope = (flags) => new FeatureFlagScope(flags);\nconst createDefaultScope = () => {\n\tconst scope = createScope();\n\tfor (const featureFlag of featureFlagInfo) scope.add(featureFlag.name, featureFlag.enabled);\n\treturn scope;\n};\nconst FeatureFlags = createDefaultScope();\nconst add = FeatureFlags.add.bind(FeatureFlags);\nconst enable = FeatureFlags.enable.bind(FeatureFlags);\nconst disable = FeatureFlags.disable.bind(FeatureFlags);\nconst enabled = FeatureFlags.enabled.bind(FeatureFlags);\nconst merge = FeatureFlags.merge.bind(FeatureFlags);\n//#endregion\nexport { FeatureFlags, add, createScope, disable, enable, enabled, merge, notifyAvailableFlag };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAgBA,MAAM,YAAY,CAAC;AACnB,IAAI;CACH,IAAI,QAAQ,IAAI,qCAAqC,IAAI,QAAQ,IAAI,wCAAwC,QAAQ,UAAU,4BAA4B;MACtJ,UAAU,4BAA4B;MACtC,UAAU,4BAA4B;CAC3C,IAAI,QAAQ,IAAI,wBAAwB,IAAI,QAAQ,IAAI,2BAA2B,QAAQ,UAAU,gBAAgB;MAChH,UAAU,gBAAgB;MAC1B,UAAU,gBAAgB;CAC/B,IAAI,QAAQ,IAAI,2BAA2B,IAAI,QAAQ,IAAI,8BAA8B,QAAQ,UAAU,mBAAmB;MACzH,UAAU,mBAAmB;MAC7B,UAAU,mBAAmB;CAClC,IAAI,QAAQ,IAAI,2BAA2B,IAAI,QAAQ,IAAI,8BAA8B,QAAQ,UAAU,mBAAmB;MACzH,UAAU,mBAAmB;MAC7B,UAAU,mBAAmB;CAClC,IAAI,QAAQ,IAAI,0CAA0C,IAAI,QAAQ,IAAI,6CAA6C,QAAQ,UAAU,iCAAiC;MACrK,UAAU,iCAAiC;MAC3C,UAAU,iCAAiC;CAChD,IAAI,QAAQ,IAAI,6BAA6B,IAAI,QAAQ,IAAI,gCAAgC,QAAQ,UAAU,qBAAqB;MAC/H,UAAU,qBAAqB;MAC/B,UAAU,qBAAqB;CACpC,IAAI,QAAQ,IAAI,sCAAsC,IAAI,QAAQ,IAAI,yCAAyC,QAAQ,UAAU,4BAA4B;MACxJ,UAAU,4BAA4B;MACtC,UAAU,4BAA4B;CAC3C,IAAI,QAAQ,IAAI,oCAAoC,IAAI,QAAQ,IAAI,uCAAuC,QAAQ,UAAU,0BAA0B;MAClJ,UAAU,0BAA0B;MACpC,UAAU,0BAA0B;CACzC,IAAI,QAAQ,IAAI,gCAAgC,IAAI,QAAQ,IAAI,mCAAmC,QAAQ,UAAU,wBAAwB;MACxI,UAAU,wBAAwB;MAClC,UAAU,wBAAwB;CACvC,IAAI,QAAQ,IAAI,qCAAqC,IAAI,QAAQ,IAAI,wCAAwC,QAAQ,UAAU,6BAA6B;MACvJ,UAAU,6BAA6B;MACvC,UAAU,6BAA6B;CAC5C,IAAI,QAAQ,IAAI,iDAAiD,IAAI,QAAQ,IAAI,oDAAoD,QAAQ,UAAU,sCAAsC;MACxL,UAAU,sCAAsC;MAChD,UAAU,sCAAsC;CACrD,IAAI,QAAQ,IAAI,yDAAyD,IAAI,QAAQ,IAAI,4DAA4D,QAAQ,UAAU,8CAA8C;MAChN,UAAU,8CAA8C;MACxD,UAAU,8CAA8C;CAC7D,IAAI,QAAQ,IAAI,4CAA4C,IAAI,QAAQ,IAAI,+CAA+C,QAAQ,UAAU,kCAAkC;MAC1K,UAAU,kCAAkC;MAC5C,UAAU,kCAAkC;CACjD,IAAI,QAAQ,IAAI,8BAA8B,IAAI,QAAQ,IAAI,iCAAiC,QAAQ,UAAU,sBAAsB;MAClI,UAAU,sBAAsB;MAChC,UAAU,sBAAsB;CACrC,IAAI,QAAQ,IAAI,2CAA2C,IAAI,QAAQ,IAAI,8CAA8C,QAAQ,UAAU,iCAAiC;MACvK,UAAU,iCAAiC;MAC3C,UAAU,iCAAiC;CAChD,IAAI,QAAQ,IAAI,gDAAgD,IAAI,QAAQ,IAAI,mDAAmD,QAAQ,UAAU,qCAAqC;MACrL,UAAU,qCAAqC;MAC/C,UAAU,qCAAqC;CACpD,IAAI,QAAQ,IAAI,sCAAsC,IAAI,QAAQ,IAAI,yCAAyC,QAAQ,UAAU,6BAA6B;MACzJ,UAAU,6BAA6B;MACvC,UAAU,6BAA6B;CAC5C,IAAI,QAAQ,IAAI,wBAAwB,IAAI,QAAQ,IAAI,2BAA2B,QAAQ,UAAU,iBAAiB;MACjH,UAAU,iBAAiB;MAC3B,UAAU,iBAAiB;AACjC,SAAS,OAAO;CACf,UAAU,4BAA4B;CACtC,UAAU,gBAAgB;CAC1B,UAAU,mBAAmB;CAC7B,UAAU,mBAAmB;CAC7B,UAAU,iCAAiC;CAC3C,UAAU,qBAAqB;CAC/B,UAAU,4BAA4B;CACtC,UAAU,0BAA0B;CACpC,UAAU,wBAAwB;CAClC,UAAU,6BAA6B;CACvC,UAAU,sCAAsC;CAChD,UAAU,8CAA8C;CACxD,UAAU,kCAAkC;CAC5C,UAAU,sBAAsB;CAChC,UAAU,iCAAiC;CAC3C,UAAU,qCAAqC;CAC/C,UAAU,6BAA6B;CACvC,UAAU,iBAAiB;AAC5B;AACA,MAAM,kBAAkB;CACvB;EACC,MAAM;EACN,aAAa;EACb,SAAS,UAAU;CACpB;CACA;EACC,MAAM;EACN,aAAa;EACb,SAAS,UAAU;CACpB;CACA;EACC,MAAM;EACN,aAAa;EACb,SAAS,UAAU;CACpB;CACA;EACC,MAAM;EACN,aAAa;EACb,SAAS,UAAU;CACpB;CACA;EACC,MAAM;EACN,aAAa;EACb,SAAS,UAAU;CACpB;CACA;EACC,MAAM;EACN,aAAa;EACb,SAAS,UAAU;CACpB;CACA;EACC,MAAM;EACN,aAAa;EACb,SAAS,UAAU;CACpB;CACA;EACC,MAAM;EACN,aAAa;EACb,SAAS,UAAU;CACpB;CACA;EACC,MAAM;EACN,aAAa;EACb,SAAS,UAAU;CACpB;CACA;EACC,MAAM;EACN,aAAa;EACb,SAAS,UAAU;CACpB;CACA;EACC,MAAM;EACN,aAAa;EACb,SAAS,UAAU;CACpB;CACA;EACC,MAAM;EACN,aAAa;EACb,SAAS,UAAU;CACpB;CACA;EACC,MAAM;EACN,aAAa;EACb,SAAS,UAAU;CACpB;CACA;EACC,MAAM;EACN,aAAa;EACb,SAAS,UAAU;CACpB;CACA;EACC,MAAM;EACN,aAAa;EACb,SAAS,UAAU;CACpB;CACA;EACC,MAAM;EACN,aAAa;EACb,SAAS,UAAU;CACpB;CACA;EACC,MAAM;EACN,aAAa;EACb,SAAS,UAAU;CACpB;CACA;EACC,MAAM;EACN,aAAa;EACb,SAAS,UAAU;CACpB;AACD;AAGA,MAAM,iBAAiB;AACvB,MAAM,gBAAgB;AACtB,MAAM,qCAAqC,IAAI,IAAI,CAAC,qCAAqC,CAAC;;;;;AAK1F,MAAM,aAAa,SAAS,SAAS,yBAAyB,KAAK,WAAW,aAAa,KAAK,mBAAmB,IAAI,IAAI;AAC3H,IAAI,mBAAmB,MAAM;CAC5B,YAAY,OAAO;EAClB,KAAK,wBAAwB,IAAI,IAAI;EACrC,IAAI,OAAO,OAAO,KAAK,KAAK,CAAC,CAAC,SAAS,QAAQ;GAC9C,KAAK,MAAM,IAAI,KAAK,MAAM,IAAI;EAC/B,CAAC;CACF;;;;CAIA,aAAa,MAAM;EAClB,IAAI,CAAC,KAAK,MAAM,IAAI,IAAI,GAAG,MAAM,IAAI,MAAM,kDAAkD,KAAK,GAAG;CACtG;;;;CAIA,IAAI,MAAM,SAAS;EAClB,IAAI,KAAK,MAAM,IAAI,IAAI,GAAG,MAAM,IAAI,MAAM,qBAAqB,KAAK,gBAAgB;EACpF,KAAK,MAAM,IAAI,MAAM,OAAO;CAC7B;;;;CAIA,OAAO,MAAM;EACZ,KAAK,aAAa,IAAI;EACtB,KAAK,MAAM,IAAI,MAAM,IAAI;CAC1B;;;;CAIA,QAAQ,MAAM;EACb,KAAK,aAAa,IAAI;EACtB,KAAK,MAAM,IAAI,MAAM,KAAK;CAC3B;;;;;CAKA,MAAM,OAAO;EACZ,OAAO,KAAK,KAAK,CAAC,CAAC,SAAS,QAAQ;GACnC,KAAK,MAAM,IAAI,KAAK,MAAM,IAAI;EAC/B,CAAC;CACF;CACA,eAAe,OAAO;EACrB,KAAK,MAAM,CAAC,KAAK,UAAU,MAAM,OAAO;GACvC,IAAI,KAAK,MAAM,IAAI,GAAG,GAAG;GACzB,KAAK,MAAM,IAAI,KAAK,KAAK;EAC1B;CACD;;;;CAIA,QAAQ,MAAM;EACb,KAAK,aAAa,IAAI;EACtB,IAAI,UAAU,IAAI,KAAK,KAAK,MAAM,IAAI,oBAAoB,MAAM,MAAM,OAAO;EAC7E,OAAO,KAAK,MAAM,IAAI,IAAI,KAAK;CAChC;AACD;;;;;;;AASA,MAAM,eAAe,IAAI,IAAI,gBAAgB,KAAK,EAAE,MAAM,kBAAkB,CAAC,MAAM,WAAW,CAAC,CAAC;AAChG,MAAM,2BAA2B,IAAI,IAAI;;;;;;;;;;;;;;;;;;;;;AAqBzC,MAAM,uBAAuB,MAAM,YAAY;CAC9C,IAAI,WAAW,CAAC,UAAU,IAAI,KAAK,SAAS,IAAI,IAAI,GAAG;CACvD,SAAS,IAAI,IAAI;CACjB,MAAM,cAAc,aAAa,IAAI,IAAI,CAAC,EAAE,KAAK;CACjD,QAAQ,KAAK,6BAA6B,KAAK,qCAAqC,cAAc,KAAK,gBAAgB,MAAM,uFAAuF,eAAe,sCAAsC;AAC1Q;;;;;;;AASA,MAAM,eAAe,UAAU,IAAI,iBAAiB,KAAK;AACzD,MAAM,2BAA2B;CAChC,MAAM,QAAQ,YAAY;CAC1B,KAAK,MAAM,eAAe,iBAAiB,MAAM,IAAI,YAAY,MAAM,YAAY,OAAO;CAC1F,OAAO;AACR;AACA,MAAM,eAAe,mBAAmB;AAC5B,aAAa,IAAI,KAAK,YAAY;AAC/B,aAAa,OAAO,KAAK,YAAY;AACpC,aAAa,QAAQ,KAAK,YAAY;AACtC,aAAa,QAAQ,KAAK,YAAY;AACxC,aAAa,MAAM,KAAK,YAAY"}
|
|
@@ -13,10 +13,8 @@
|
|
|
13
13
|
* <component></component>
|
|
14
14
|
* </feature-flags>
|
|
15
15
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
* - enable-treeview-controllable
|
|
19
|
-
* - ... (and others listed in observedAttributes)
|
|
16
|
+
* The supported flags are documented as `@attr` tags on `FeatureFlagsElement`
|
|
17
|
+
* below, which is also what surfaces them in `custom-elements.json`.
|
|
20
18
|
*
|
|
21
19
|
* How to check a Flag in your component:
|
|
22
20
|
* import { isFeatureFlagEnabled } from './feature-flags';
|
|
@@ -24,6 +22,43 @@
|
|
|
24
22
|
* Returns true if the flag is enabled in the nearest <feature-flags> ancestor
|
|
25
23
|
*/
|
|
26
24
|
import { LitElement } from 'lit';
|
|
25
|
+
/**
|
|
26
|
+
* Feature Flags
|
|
27
|
+
*
|
|
28
|
+
* Provides scoped feature flags to child components. Flags are read from the
|
|
29
|
+
* nearest `<feature-flags>` ancestor, and nested elements inherit any flag they
|
|
30
|
+
* do not set themselves.
|
|
31
|
+
*
|
|
32
|
+
* Attributes are declared below rather than inferred, because the flag list is
|
|
33
|
+
* built at runtime from `observedAttributes` and cannot be read statically.
|
|
34
|
+
*
|
|
35
|
+
* @element feature-flags
|
|
36
|
+
*
|
|
37
|
+
* @attr {boolean} enable-v12-release - Enable the features and functionality
|
|
38
|
+
* for the v12 Release. Enabling this turns on every `enable-v12-*` flag at
|
|
39
|
+
* once, as well as `enable-focus-wrap-without-sentinels`.
|
|
40
|
+
* @attr {boolean} enable-v12-tile-default-icons - Enable rendering of default
|
|
41
|
+
* icons in the tile components. Becomes the default behavior in v12.
|
|
42
|
+
* @attr {boolean} enable-v12-tile-radio-icons - Enable rendering of radio icons
|
|
43
|
+
* in the `cds-radio-tile` component. Becomes the default behavior in v12.
|
|
44
|
+
* @attr {boolean} enable-v12-overflowmenu - Enable the use of the v12
|
|
45
|
+
* `cds-overflow-menu` leveraging the menu subcomponents. Becomes the default
|
|
46
|
+
* behavior in v12.
|
|
47
|
+
* @attr {boolean} enable-v12-dynamic-floating-styles - Enable dynamic setting
|
|
48
|
+
* of floating styles for components like `cds-popover`, `cds-tooltip`, etc.
|
|
49
|
+
* Becomes the default behavior in v12.
|
|
50
|
+
* @attr {boolean} enable-v12-toggle-reduced-label-spacing - Enable a reduced
|
|
51
|
+
* spacing between the toggle control and its label. Becomes the default
|
|
52
|
+
* behavior in v12.
|
|
53
|
+
* @attr {boolean} enable-treeview-controllable - Enable the new `cds-treeview`
|
|
54
|
+
* controllable API.
|
|
55
|
+
* @attr {boolean} enable-dialog-element - Enable components to utilize the
|
|
56
|
+
* native `dialog` element.
|
|
57
|
+
* @attr {boolean} enable-focus-wrap-without-sentinels - Enable the new focus
|
|
58
|
+
* wrap behavior that doesn't use sentinel nodes.
|
|
59
|
+
* @attr {boolean} enable-experimental-focus-wrap-without-sentinels - Deprecated,
|
|
60
|
+
* use `enable-focus-wrap-without-sentinels` instead.
|
|
61
|
+
*/
|
|
27
62
|
declare class FeatureFlagsElement extends LitElement {
|
|
28
63
|
private scope;
|
|
29
64
|
private flags;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/feature-flags/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/feature-flags/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH;;;;;;;;;;;;;;;;GAgBG;AAQH,OAAO,EAAE,UAAU,EAAQ,MAAM,KAAK,CAAC;AAOvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,cACM,mBAAoB,SAAQ,UAAU;IAC1C,OAAO,CAAC,KAAK,CAAsB;IACnC,OAAO,CAAC,KAAK,CAAoB;IAEjC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAW7B;IAEX,MAAM,KAAK,kBAAkB,aAE5B;;IAOD,iBAAiB;IAKjB,wBAAwB,CACtB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,MAAM,EAAE,MAAM,GAAG,IAAI;IAmBvB,OAAO,CAAC,yBAAyB;IA+BjC,OAAO,CAAC,4BAA4B;IAepC,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,0BAA0B;IAWlC,OAAO,CAAC,WAAW;IAWnB,MAAM;IAIC,oBAAoB,CAAC,IAAI,EAAE,MAAM;IAIxC,OAAO,CAAC,QAAQ;CAGjB;AAED,eAAe,mBAAmB,CAAC;AAKnC,wBAAgB,sBAAsB,CACpC,EAAE,EAAE,WAAW,GACd,mBAAmB,GAAG,IAAI,CAa5B;AAGD,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,WAAW,GACnB,OAAO,CAST"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@carbon/web-components",
|
|
3
3
|
"description": "Web components for the Carbon Design System",
|
|
4
|
-
"version": "2.60.0
|
|
4
|
+
"version": "2.60.0",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"main": "es/index.js",
|
|
7
7
|
"module": "es/index.js",
|
|
@@ -69,8 +69,8 @@
|
|
|
69
69
|
},
|
|
70
70
|
"dependencies": {
|
|
71
71
|
"@carbon/icon-helpers": "10.47.0",
|
|
72
|
-
"@carbon/icons": "^11.85.0
|
|
73
|
-
"@carbon/styles": "^1.112.0
|
|
72
|
+
"@carbon/icons": "^11.85.0",
|
|
73
|
+
"@carbon/styles": "^1.112.0",
|
|
74
74
|
"@carbon/utilities": "^0.17.0",
|
|
75
75
|
"@floating-ui/dom": "^1.6.3",
|
|
76
76
|
"@ibm/telemetry-js": "^1.10.2",
|
|
@@ -80,8 +80,8 @@
|
|
|
80
80
|
"tslib": "^2.6.3"
|
|
81
81
|
},
|
|
82
82
|
"devDependencies": {
|
|
83
|
-
"@carbon/layout": "^11.56.0
|
|
84
|
-
"@carbon/motion": "^11.49.0
|
|
83
|
+
"@carbon/layout": "^11.56.0",
|
|
84
|
+
"@carbon/motion": "^11.49.0",
|
|
85
85
|
"@juggle/resize-observer": "^3.4.0",
|
|
86
86
|
"@mordech/vite-lit-loader": "^0.40.0",
|
|
87
87
|
"@open-wc/testing": "^5.0.0",
|
|
@@ -130,5 +130,5 @@
|
|
|
130
130
|
}
|
|
131
131
|
]
|
|
132
132
|
},
|
|
133
|
-
"gitHead": "
|
|
133
|
+
"gitHead": "a57cf8a896fe3fe09c5ab27648cd58947f37360a"
|
|
134
134
|
}
|
package/telemetry.yml
CHANGED
|
@@ -72,6 +72,7 @@ collect:
|
|
|
72
72
|
- download
|
|
73
73
|
- dropShadow
|
|
74
74
|
- enable-counter
|
|
75
|
+
- enable-dialog-element
|
|
75
76
|
- enable-v12-overflowmenu
|
|
76
77
|
- enter-delay-ms
|
|
77
78
|
- even
|
|
@@ -410,7 +411,6 @@ collect:
|
|
|
410
411
|
- renderIcon
|
|
411
412
|
# cds-modal
|
|
412
413
|
- container-class
|
|
413
|
-
- enable-dialog-element
|
|
414
414
|
- has-scrolling-content
|
|
415
415
|
- oncds-modal-beingclosed
|
|
416
416
|
- oncds-modal-closed
|
|
@@ -586,6 +586,15 @@ collect:
|
|
|
586
586
|
- is-expanded
|
|
587
587
|
- oneventSelected
|
|
588
588
|
- oneventToggled
|
|
589
|
+
# feature-flags
|
|
590
|
+
- enable-experimental-focus-wrap-without-sentinels
|
|
591
|
+
- enable-focus-wrap-without-sentinels
|
|
592
|
+
- enable-treeview-controllable
|
|
593
|
+
- enable-v12-dynamic-floating-styles
|
|
594
|
+
- enable-v12-release
|
|
595
|
+
- enable-v12-tile-default-icons
|
|
596
|
+
- enable-v12-tile-radio-icons
|
|
597
|
+
- enable-v12-toggle-reduced-label-spacing
|
|
589
598
|
# tabs-story-wrapper
|
|
590
599
|
- with-icons
|
|
591
600
|
allowedAttributeStringValues:
|