@backstage/ui 0.13.0-next.1 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/CHANGELOG.md +282 -0
  2. package/dist/analytics/getNodeText.esm.js +21 -0
  3. package/dist/analytics/getNodeText.esm.js.map +1 -0
  4. package/dist/analytics/useAnalytics.esm.js +26 -0
  5. package/dist/analytics/useAnalytics.esm.js.map +1 -0
  6. package/dist/components/Accordion/Accordion.module.css.esm.js +2 -2
  7. package/dist/components/Accordion/definition.esm.js +1 -0
  8. package/dist/components/Accordion/definition.esm.js.map +1 -1
  9. package/dist/components/Alert/definition.esm.js +1 -0
  10. package/dist/components/Alert/definition.esm.js.map +1 -1
  11. package/dist/components/Avatar/definition.esm.js +1 -0
  12. package/dist/components/Avatar/definition.esm.js.map +1 -1
  13. package/dist/components/Box/definition.esm.js +1 -0
  14. package/dist/components/Box/definition.esm.js.map +1 -1
  15. package/dist/components/Button/Button.module.css.esm.js +2 -2
  16. package/dist/components/Button/definition.esm.js +1 -0
  17. package/dist/components/Button/definition.esm.js.map +1 -1
  18. package/dist/components/ButtonIcon/ButtonIcon.module.css.esm.js +2 -2
  19. package/dist/components/ButtonIcon/definition.esm.js +1 -0
  20. package/dist/components/ButtonIcon/definition.esm.js.map +1 -1
  21. package/dist/components/ButtonLink/ButtonLink.esm.js +12 -4
  22. package/dist/components/ButtonLink/ButtonLink.esm.js.map +1 -1
  23. package/dist/components/ButtonLink/ButtonLink.module.css.esm.js +2 -2
  24. package/dist/components/ButtonLink/definition.esm.js +3 -0
  25. package/dist/components/ButtonLink/definition.esm.js.map +1 -1
  26. package/dist/components/Card/Card.esm.js +66 -5
  27. package/dist/components/Card/Card.esm.js.map +1 -1
  28. package/dist/components/Card/Card.module.css.esm.js +2 -2
  29. package/dist/components/Card/definition.esm.js +10 -2
  30. package/dist/components/Card/definition.esm.js.map +1 -1
  31. package/dist/components/Checkbox/Checkbox.esm.js +12 -3
  32. package/dist/components/Checkbox/Checkbox.esm.js.map +1 -1
  33. package/dist/components/Checkbox/Checkbox.module.css.esm.js +2 -2
  34. package/dist/components/Checkbox/definition.esm.js +1 -2
  35. package/dist/components/Checkbox/definition.esm.js.map +1 -1
  36. package/dist/components/Container/Container.module.css.esm.js +2 -2
  37. package/dist/components/Container/definition.esm.js +1 -0
  38. package/dist/components/Container/definition.esm.js.map +1 -1
  39. package/dist/components/Dialog/Dialog.esm.js +3 -1
  40. package/dist/components/Dialog/Dialog.esm.js.map +1 -1
  41. package/dist/components/Dialog/Dialog.module.css.esm.js +2 -2
  42. package/dist/components/Dialog/definition.esm.js +1 -0
  43. package/dist/components/Dialog/definition.esm.js.map +1 -1
  44. package/dist/components/FieldError/definition.esm.js +1 -0
  45. package/dist/components/FieldError/definition.esm.js.map +1 -1
  46. package/dist/components/FieldLabel/definition.esm.js +1 -0
  47. package/dist/components/FieldLabel/definition.esm.js.map +1 -1
  48. package/dist/components/Flex/Flex.esm.js +2 -1
  49. package/dist/components/Flex/Flex.esm.js.map +1 -1
  50. package/dist/components/Flex/definition.esm.js +1 -0
  51. package/dist/components/Flex/definition.esm.js.map +1 -1
  52. package/dist/components/FullPage/definition.esm.js +1 -0
  53. package/dist/components/FullPage/definition.esm.js.map +1 -1
  54. package/dist/components/Grid/Grid.esm.js +4 -2
  55. package/dist/components/Grid/Grid.esm.js.map +1 -1
  56. package/dist/components/Grid/definition.esm.js +1 -0
  57. package/dist/components/Grid/definition.esm.js.map +1 -1
  58. package/dist/components/{HeaderPage/HeaderPage.esm.js → Header/Header.esm.js} +6 -5
  59. package/dist/components/Header/Header.esm.js.map +1 -0
  60. package/dist/components/Header/Header.module.css.esm.js +8 -0
  61. package/dist/components/Header/Header.module.css.esm.js.map +1 -0
  62. package/dist/components/{HeaderPage → Header}/definition.esm.js +10 -8
  63. package/dist/components/Header/definition.esm.js.map +1 -0
  64. package/dist/components/Link/Link.esm.js +11 -3
  65. package/dist/components/Link/Link.esm.js.map +1 -1
  66. package/dist/components/Link/definition.esm.js +3 -0
  67. package/dist/components/Link/definition.esm.js.map +1 -1
  68. package/dist/components/List/List.esm.js +70 -0
  69. package/dist/components/List/List.esm.js.map +1 -0
  70. package/dist/components/List/List.module.css.esm.js +8 -0
  71. package/dist/components/List/List.module.css.esm.js.map +1 -0
  72. package/dist/components/List/definition.esm.js +44 -0
  73. package/dist/components/List/definition.esm.js.map +1 -0
  74. package/dist/components/Menu/Menu.esm.js +24 -9
  75. package/dist/components/Menu/Menu.esm.js.map +1 -1
  76. package/dist/components/Menu/Menu.module.css.esm.js +2 -2
  77. package/dist/components/Menu/definition.esm.js +3 -0
  78. package/dist/components/Menu/definition.esm.js.map +1 -1
  79. package/dist/components/PasswordField/definition.esm.js +1 -0
  80. package/dist/components/PasswordField/definition.esm.js.map +1 -1
  81. package/dist/components/PluginHeader/PluginHeader.esm.js +40 -8
  82. package/dist/components/PluginHeader/PluginHeader.esm.js.map +1 -1
  83. package/dist/components/PluginHeader/PluginHeader.module.css.esm.js +2 -2
  84. package/dist/components/PluginHeader/definition.esm.js +1 -0
  85. package/dist/components/PluginHeader/definition.esm.js.map +1 -1
  86. package/dist/components/Popover/definition.esm.js +1 -0
  87. package/dist/components/Popover/definition.esm.js.map +1 -1
  88. package/dist/components/RadioGroup/definition.esm.js +1 -0
  89. package/dist/components/RadioGroup/definition.esm.js.map +1 -1
  90. package/dist/components/SearchAutocomplete/SearchAutocomplete.esm.js +164 -0
  91. package/dist/components/SearchAutocomplete/SearchAutocomplete.esm.js.map +1 -0
  92. package/dist/components/SearchAutocomplete/SearchAutocomplete.module.css.esm.js +8 -0
  93. package/dist/components/SearchAutocomplete/SearchAutocomplete.module.css.esm.js.map +1 -0
  94. package/dist/components/SearchAutocomplete/definition.esm.js +52 -0
  95. package/dist/components/SearchAutocomplete/definition.esm.js.map +1 -0
  96. package/dist/components/SearchField/SearchField.module.css.esm.js +2 -2
  97. package/dist/components/SearchField/definition.esm.js +2 -0
  98. package/dist/components/SearchField/definition.esm.js.map +1 -1
  99. package/dist/components/Select/Select.module.css.esm.js +2 -2
  100. package/dist/components/Select/SelectTrigger.esm.js +5 -2
  101. package/dist/components/Select/SelectTrigger.esm.js.map +1 -1
  102. package/dist/components/Select/definition.esm.js +2 -0
  103. package/dist/components/Select/definition.esm.js.map +1 -1
  104. package/dist/components/Skeleton/definition.esm.js +1 -0
  105. package/dist/components/Skeleton/definition.esm.js.map +1 -1
  106. package/dist/components/Switch/definition.esm.js +1 -0
  107. package/dist/components/Switch/definition.esm.js.map +1 -1
  108. package/dist/components/Table/Table.module.css.esm.js +2 -2
  109. package/dist/components/Table/components/Column.esm.js +1 -1
  110. package/dist/components/Table/components/Column.esm.js.map +1 -1
  111. package/dist/components/Table/components/Row.esm.js +34 -9
  112. package/dist/components/Table/components/Row.esm.js.map +1 -1
  113. package/dist/components/Table/components/Table.esm.js +80 -67
  114. package/dist/components/Table/components/Table.esm.js.map +1 -1
  115. package/dist/components/Table/components/TableBodySkeleton.esm.js +33 -0
  116. package/dist/components/Table/components/TableBodySkeleton.esm.js.map +1 -0
  117. package/dist/components/Table/components/TableHeader.esm.js +2 -2
  118. package/dist/components/Table/components/TableHeader.esm.js.map +1 -1
  119. package/dist/components/Table/components/TableRoot.esm.js +1 -1
  120. package/dist/components/Table/components/TableRoot.esm.js.map +1 -1
  121. package/dist/components/Table/definition.esm.js +19 -3
  122. package/dist/components/Table/definition.esm.js.map +1 -1
  123. package/dist/components/Table/hooks/useCompletePagination.esm.js +14 -6
  124. package/dist/components/Table/hooks/useCompletePagination.esm.js.map +1 -1
  125. package/dist/components/TablePagination/definition.esm.js +1 -0
  126. package/dist/components/TablePagination/definition.esm.js.map +1 -1
  127. package/dist/components/Tabs/Tabs.esm.js +22 -8
  128. package/dist/components/Tabs/Tabs.esm.js.map +1 -1
  129. package/dist/components/Tabs/definition.esm.js +4 -1
  130. package/dist/components/Tabs/definition.esm.js.map +1 -1
  131. package/dist/components/TagGroup/TagGroup.esm.js +16 -6
  132. package/dist/components/TagGroup/TagGroup.esm.js.map +1 -1
  133. package/dist/components/TagGroup/definition.esm.js +3 -0
  134. package/dist/components/TagGroup/definition.esm.js.map +1 -1
  135. package/dist/components/Text/definition.esm.js +1 -0
  136. package/dist/components/Text/definition.esm.js.map +1 -1
  137. package/dist/components/TextField/TextField.module.css.esm.js +2 -2
  138. package/dist/components/TextField/definition.esm.js +2 -0
  139. package/dist/components/TextField/definition.esm.js.map +1 -1
  140. package/dist/components/ToggleButton/definition.esm.js +1 -0
  141. package/dist/components/ToggleButton/definition.esm.js.map +1 -1
  142. package/dist/components/ToggleButtonGroup/ToggleButtonGroup.module.css.esm.js +2 -2
  143. package/dist/components/ToggleButtonGroup/definition.esm.js +1 -0
  144. package/dist/components/ToggleButtonGroup/definition.esm.js.map +1 -1
  145. package/dist/components/Tooltip/definition.esm.js +1 -0
  146. package/dist/components/Tooltip/definition.esm.js.map +1 -1
  147. package/dist/components/VisuallyHidden/definition.esm.js +1 -0
  148. package/dist/components/VisuallyHidden/definition.esm.js.map +1 -1
  149. package/dist/css/styles.css +4 -3
  150. package/dist/hooks/useDefinition/defineComponent.esm.js.map +1 -1
  151. package/dist/hooks/useDefinition/useDefinition.esm.js +8 -1
  152. package/dist/hooks/useDefinition/useDefinition.esm.js.map +1 -1
  153. package/dist/index.d.ts +512 -42
  154. package/dist/index.esm.js +9 -2
  155. package/dist/index.esm.js.map +1 -1
  156. package/dist/provider/BUIProvider.esm.js +28 -0
  157. package/dist/provider/BUIProvider.esm.js.map +1 -0
  158. package/dist/utils/{isExternalLink.esm.js → linkUtils.esm.js} +5 -2
  159. package/dist/utils/linkUtils.esm.js.map +1 -0
  160. package/package.json +4 -4
  161. package/dist/components/HeaderPage/HeaderPage.esm.js.map +0 -1
  162. package/dist/components/HeaderPage/HeaderPage.module.css.esm.js +0 -8
  163. package/dist/components/HeaderPage/HeaderPage.module.css.esm.js.map +0 -1
  164. package/dist/components/HeaderPage/definition.esm.js.map +0 -1
  165. package/dist/components/InternalLinkProvider/InternalLinkProvider.esm.js +0 -55
  166. package/dist/components/InternalLinkProvider/InternalLinkProvider.esm.js.map +0 -1
  167. package/dist/utils/isExternalLink.esm.js.map +0 -1
@@ -33,8 +33,9 @@
33
33
  * limitations under the License.
34
34
  */
35
35
  @layer tokens {
36
- /* Light theme tokens */
37
- :root {
36
+ /* Light theme tokens (also used for nested light theme switching) */
37
+ :root,
38
+ [data-theme-mode='light'] {
38
39
  /* Font families */
39
40
  --bui-font-regular: system-ui;
40
41
  --bui-font-monospace: ui-monospace, 'Menlo', 'Monaco', 'Consolas',
@@ -137,7 +138,7 @@
137
138
  --bui-fg-info-on-bg: #173da6;
138
139
  --bui-fg-danger: #ec3b18;
139
140
  --bui-fg-warning: #ef7a32;
140
- --bui-fg-success: #1ed760;
141
+ --bui-fg-success: #1aaf4f;
141
142
  --bui-fg-info: #0d74ce;
142
143
 
143
144
  /* Border colors */
@@ -1 +1 @@
1
- {"version":3,"file":"defineComponent.esm.js","sources":["../../../src/hooks/useDefinition/defineComponent.ts"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type { ComponentConfig, BgPropsConstraint } from './types';\n\nexport function defineComponent<P extends Record<string, any>>() {\n return <\n const S extends Record<string, string>,\n const C extends ComponentConfig<P, S>,\n >(\n config: C & BgPropsConstraint<P, C['bg']>,\n ): C => config;\n}\n"],"names":[],"mappings":"AAkBO,SAAS,eAAA,GAAiD;AAC/D,EAAA,OAAO,CAIL,MAAA,KACM,MAAA;AACV;;;;"}
1
+ {"version":3,"file":"defineComponent.esm.js","sources":["../../../src/hooks/useDefinition/defineComponent.ts"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n ComponentConfig,\n BgPropsConstraint,\n AnalyticsPropsConstraint,\n} from './types';\n\nexport function defineComponent<P extends Record<string, any>>() {\n return <\n const S extends Record<string, string>,\n const C extends ComponentConfig<P, S>,\n >(\n config: C &\n BgPropsConstraint<P, C['bg']> &\n AnalyticsPropsConstraint<P, C['analytics']>,\n ): C => config;\n}\n"],"names":[],"mappings":"AAsBO,SAAS,eAAA,GAAiD;AAC/D,EAAA,OAAO,CAIL,MAAA,KAGM,MAAA;AACV;;;;"}
@@ -3,6 +3,7 @@ import clsx from 'clsx';
3
3
  import { useBreakpoint } from '../useBreakpoint.esm.js';
4
4
  import { useBgProvider, useBgConsumer, BgProvider } from '../useBg.esm.js';
5
5
  import { resolveDefinitionProps, processUtilityProps } from './helpers.esm.js';
6
+ import { useAnalytics, noopTracker } from '../../analytics/useAnalytics.esm.js';
6
7
 
7
8
  function useDefinition(definition, props, options) {
8
9
  const { breakpoint } = useBreakpoint();
@@ -35,6 +36,11 @@ function useDefinition(definition, props, options) {
35
36
  props,
36
37
  definition.utilityProps ?? []
37
38
  );
39
+ let analytics = noopTracker;
40
+ if (definition.analytics) {
41
+ const tracker = useAnalytics();
42
+ analytics = ownPropsResolved.noTrack ? noopTracker : tracker;
43
+ }
38
44
  const utilityTarget = options?.utilityTarget ?? "root";
39
45
  const classNameTarget = options?.classNameTarget ?? "root";
40
46
  const classes = {};
@@ -61,7 +67,8 @@ function useDefinition(definition, props, options) {
61
67
  },
62
68
  restProps,
63
69
  dataAttributes,
64
- utilityStyle
70
+ utilityStyle,
71
+ ...definition.analytics ? { analytics } : {}
65
72
  };
66
73
  }
67
74
 
@@ -1 +1 @@
1
- {"version":3,"file":"useDefinition.esm.js","sources":["../../../src/hooks/useDefinition/useDefinition.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ReactNode } from 'react';\nimport clsx from 'clsx';\nimport { useBreakpoint } from '../useBreakpoint';\nimport { useBgProvider, useBgConsumer, BgProvider } from '../useBg';\nimport { resolveDefinitionProps, processUtilityProps } from './helpers';\nimport type {\n ComponentConfig,\n UseDefinitionOptions,\n UseDefinitionResult,\n UtilityKeys,\n} from './types';\n\nexport function useDefinition<\n D extends ComponentConfig<any, any>,\n P extends Record<string, any>,\n>(\n definition: D,\n props: P,\n options?: UseDefinitionOptions<D>,\n): UseDefinitionResult<D, P> {\n const { breakpoint } = useBreakpoint();\n\n // Resolve all props centrally — applies responsive values and defaults\n const { ownPropsResolved, restProps } = resolveDefinitionProps(\n definition,\n props,\n breakpoint,\n );\n\n const dataAttributes: Record<string, string | undefined> = {};\n\n for (const [key, config] of Object.entries(definition.propDefs)) {\n const finalValue = ownPropsResolved[key];\n\n if (finalValue !== undefined) {\n // Skip data-bg for bg prop when the provider path handles it\n if (key === 'bg' && definition.bg === 'provider') continue;\n\n if ((config as any).dataAttribute) {\n // eslint-disable-next-line no-restricted-syntax\n dataAttributes[`data-${key.toLowerCase()}`] = String(finalValue);\n }\n }\n }\n\n // Provider: resolve bg and provide context for children\n const providerBg = useBgProvider(\n definition.bg === 'provider' ? ownPropsResolved.bg : undefined,\n );\n\n // Consumer: read parent context bg\n const consumerBg = useBgConsumer();\n\n // Provider: set data-bg from the resolved provider bg\n if (definition.bg === 'provider' && providerBg.bg !== undefined) {\n dataAttributes['data-bg'] = String(providerBg.bg);\n }\n\n // Consumer: set data-on-bg from the parent context\n if (definition.bg === 'consumer' && consumerBg.bg !== undefined) {\n dataAttributes['data-on-bg'] = String(consumerBg.bg);\n }\n\n const { utilityClasses, utilityStyle } = processUtilityProps<UtilityKeys<D>>(\n props,\n (definition.utilityProps ?? []) as readonly UtilityKeys<D>[],\n );\n\n const utilityTarget = options?.utilityTarget ?? 'root';\n const classNameTarget = options?.classNameTarget ?? 'root';\n\n const classes: Record<string, string> = {};\n\n for (const [name, cssKey] of Object.entries(definition.classNames)) {\n classes[name] = clsx(\n cssKey as string,\n definition.styles[cssKey as keyof typeof definition.styles],\n utilityTarget === name && utilityClasses,\n classNameTarget === name && ownPropsResolved.className,\n );\n }\n\n let children: ReactNode | undefined;\n let childrenWithBgProvider: ReactNode | undefined;\n\n if (definition.bg === 'provider') {\n childrenWithBgProvider = providerBg.bg ? (\n <BgProvider bg={providerBg.bg}>{props.children}</BgProvider>\n ) : (\n props.children\n );\n } else {\n children = props.children;\n }\n\n return {\n ownProps: {\n classes,\n ...ownPropsResolved,\n ...(definition.bg === 'provider'\n ? { childrenWithBgProvider }\n : { children }),\n },\n restProps,\n dataAttributes,\n utilityStyle,\n } as unknown as UseDefinitionResult<D, P>;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useDefinition.esm.js","sources":["../../../src/hooks/useDefinition/useDefinition.tsx"],"sourcesContent":["/*\n * Copyright 2025 The Backstage Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ReactNode } from 'react';\nimport clsx from 'clsx';\nimport { useBreakpoint } from '../useBreakpoint';\nimport { useBgProvider, useBgConsumer, BgProvider } from '../useBg';\nimport { resolveDefinitionProps, processUtilityProps } from './helpers';\nimport { useAnalytics } from '../../analytics/useAnalytics';\nimport { noopTracker } from '../../analytics/useAnalytics';\nimport type {\n ComponentConfig,\n UseDefinitionOptions,\n UseDefinitionResult,\n UtilityKeys,\n} from './types';\n\nexport function useDefinition<\n D extends ComponentConfig<any, any>,\n P extends Record<string, any>,\n>(\n definition: D,\n props: P,\n options?: UseDefinitionOptions<D>,\n): UseDefinitionResult<D, P> {\n const { breakpoint } = useBreakpoint();\n\n // Resolve all props centrally — applies responsive values and defaults\n const { ownPropsResolved, restProps } = resolveDefinitionProps(\n definition,\n props,\n breakpoint,\n );\n\n const dataAttributes: Record<string, string | undefined> = {};\n\n for (const [key, config] of Object.entries(definition.propDefs)) {\n const finalValue = ownPropsResolved[key];\n\n if (finalValue !== undefined) {\n // Skip data-bg for bg prop when the provider path handles it\n if (key === 'bg' && definition.bg === 'provider') continue;\n\n if ((config as any).dataAttribute) {\n // eslint-disable-next-line no-restricted-syntax\n dataAttributes[`data-${key.toLowerCase()}`] = String(finalValue);\n }\n }\n }\n\n // Provider: resolve bg and provide context for children\n const providerBg = useBgProvider(\n definition.bg === 'provider' ? ownPropsResolved.bg : undefined,\n );\n\n // Consumer: read parent context bg\n const consumerBg = useBgConsumer();\n\n // Provider: set data-bg from the resolved provider bg\n if (definition.bg === 'provider' && providerBg.bg !== undefined) {\n dataAttributes['data-bg'] = String(providerBg.bg);\n }\n\n // Consumer: set data-on-bg from the parent context\n if (definition.bg === 'consumer' && consumerBg.bg !== undefined) {\n dataAttributes['data-on-bg'] = String(consumerBg.bg);\n }\n\n const { utilityClasses, utilityStyle } = processUtilityProps<UtilityKeys<D>>(\n props,\n (definition.utilityProps ?? []) as readonly UtilityKeys<D>[],\n );\n\n // Analytics: conditionally call useAnalytics based on definition flag\n // Safe: definition is a module-level constant, condition never changes at runtime\n let analytics = noopTracker;\n if (definition.analytics) {\n const tracker = useAnalytics();\n analytics = ownPropsResolved.noTrack ? noopTracker : tracker;\n }\n\n const utilityTarget = options?.utilityTarget ?? 'root';\n const classNameTarget = options?.classNameTarget ?? 'root';\n\n const classes: Record<string, string> = {};\n\n for (const [name, cssKey] of Object.entries(definition.classNames)) {\n classes[name] = clsx(\n cssKey as string,\n definition.styles[cssKey as keyof typeof definition.styles],\n utilityTarget === name && utilityClasses,\n classNameTarget === name && ownPropsResolved.className,\n );\n }\n\n let children: ReactNode | undefined;\n let childrenWithBgProvider: ReactNode | undefined;\n\n if (definition.bg === 'provider') {\n childrenWithBgProvider = providerBg.bg ? (\n <BgProvider bg={providerBg.bg}>{props.children}</BgProvider>\n ) : (\n props.children\n );\n } else {\n children = props.children;\n }\n\n return {\n ownProps: {\n classes,\n ...ownPropsResolved,\n ...(definition.bg === 'provider'\n ? { childrenWithBgProvider }\n : { children }),\n },\n restProps,\n dataAttributes,\n utilityStyle,\n ...(definition.analytics ? { analytics } : {}),\n } as unknown as UseDefinitionResult<D, P>;\n}\n"],"names":[],"mappings":";;;;;;;AA8BO,SAAS,aAAA,CAId,UAAA,EACA,KAAA,EACA,OAAA,EAC2B;AAC3B,EAAA,MAAM,EAAE,UAAA,EAAW,GAAI,aAAA,EAAc;AAGrC,EAAA,MAAM,EAAE,gBAAA,EAAkB,SAAA,EAAU,GAAI,sBAAA;AAAA,IACtC,UAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,iBAAqD,EAAC;AAE5D,EAAA,KAAA,MAAW,CAAC,KAAK,MAAM,CAAA,IAAK,OAAO,OAAA,CAAQ,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC/D,IAAA,MAAM,UAAA,GAAa,iBAAiB,GAAG,CAAA;AAEvC,IAAA,IAAI,eAAe,MAAA,EAAW;AAE5B,MAAA,IAAI,GAAA,KAAQ,IAAA,IAAQ,UAAA,CAAW,EAAA,KAAO,UAAA,EAAY;AAElD,MAAA,IAAK,OAAe,aAAA,EAAe;AAEjC,QAAA,cAAA,CAAe,QAAQ,GAAA,CAAI,WAAA,EAAa,CAAA,CAAE,CAAA,GAAI,OAAO,UAAU,CAAA;AAAA,MACjE;AAAA,IACF;AAAA,EACF;AAGA,EAAA,MAAM,UAAA,GAAa,aAAA;AAAA,IACjB,UAAA,CAAW,EAAA,KAAO,UAAA,GAAa,gBAAA,CAAiB,EAAA,GAAK;AAAA,GACvD;AAGA,EAAA,MAAM,aAAa,aAAA,EAAc;AAGjC,EAAA,IAAI,UAAA,CAAW,EAAA,KAAO,UAAA,IAAc,UAAA,CAAW,OAAO,MAAA,EAAW;AAC/D,IAAA,cAAA,CAAe,SAAS,CAAA,GAAI,MAAA,CAAO,UAAA,CAAW,EAAE,CAAA;AAAA,EAClD;AAGA,EAAA,IAAI,UAAA,CAAW,EAAA,KAAO,UAAA,IAAc,UAAA,CAAW,OAAO,MAAA,EAAW;AAC/D,IAAA,cAAA,CAAe,YAAY,CAAA,GAAI,MAAA,CAAO,UAAA,CAAW,EAAE,CAAA;AAAA,EACrD;AAEA,EAAA,MAAM,EAAE,cAAA,EAAgB,YAAA,EAAa,GAAI,mBAAA;AAAA,IACvC,KAAA;AAAA,IACC,UAAA,CAAW,gBAAgB;AAAC,GAC/B;AAIA,EAAA,IAAI,SAAA,GAAY,WAAA;AAChB,EAAA,IAAI,WAAW,SAAA,EAAW;AACxB,IAAA,MAAM,UAAU,YAAA,EAAa;AAC7B,IAAA,SAAA,GAAY,gBAAA,CAAiB,UAAU,WAAA,GAAc,OAAA;AAAA,EACvD;AAEA,EAAA,MAAM,aAAA,GAAgB,SAAS,aAAA,IAAiB,MAAA;AAChD,EAAA,MAAM,eAAA,GAAkB,SAAS,eAAA,IAAmB,MAAA;AAEpD,EAAA,MAAM,UAAkC,EAAC;AAEzC,EAAA,KAAA,MAAW,CAAC,MAAM,MAAM,CAAA,IAAK,OAAO,OAAA,CAAQ,UAAA,CAAW,UAAU,CAAA,EAAG;AAClE,IAAA,OAAA,CAAQ,IAAI,CAAA,GAAI,IAAA;AAAA,MACd,MAAA;AAAA,MACA,UAAA,CAAW,OAAO,MAAwC,CAAA;AAAA,MAC1D,kBAAkB,IAAA,IAAQ,cAAA;AAAA,MAC1B,eAAA,KAAoB,QAAQ,gBAAA,CAAiB;AAAA,KAC/C;AAAA,EACF;AAEA,EAAA,IAAI,QAAA;AACJ,EAAA,IAAI,sBAAA;AAEJ,EAAA,IAAI,UAAA,CAAW,OAAO,UAAA,EAAY;AAChC,IAAA,sBAAA,GAAyB,UAAA,CAAW,EAAA,mBAClC,GAAA,CAAC,UAAA,EAAA,EAAW,EAAA,EAAI,WAAW,EAAA,EAAK,QAAA,EAAA,KAAA,CAAM,QAAA,EAAS,CAAA,GAE/C,KAAA,CAAM,QAAA;AAAA,EAEV,CAAA,MAAO;AACL,IAAA,QAAA,GAAW,KAAA,CAAM,QAAA;AAAA,EACnB;AAEA,EAAA,OAAO;AAAA,IACL,QAAA,EAAU;AAAA,MACR,OAAA;AAAA,MACA,GAAG,gBAAA;AAAA,MACH,GAAI,WAAW,EAAA,KAAO,UAAA,GAClB,EAAE,sBAAA,EAAuB,GACzB,EAAE,QAAA;AAAS,KACjB;AAAA,IACA,SAAA;AAAA,IACA,cAAA;AAAA,IACA,YAAA;AAAA,IACA,GAAI,UAAA,CAAW,SAAA,GAAY,EAAE,SAAA,KAAc;AAAC,GAC9C;AACF;;;;"}