@vaadin/hilla-react-crud 25.1.2 → 25.1.4

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/index.js CHANGED
@@ -6,7 +6,7 @@ export { useDataProvider, useGridDataProvider, useComboBoxDataProvider } from '.
6
6
  vaadinObj.registrations ??= [];
7
7
  vaadinObj.registrations.push({
8
8
  is: feature ? `@vaadin/hilla-react-crud/${feature}` : '@vaadin/hilla-react-crud',
9
- version: '25.1.2',
9
+ version: '25.1.4',
10
10
  });
11
11
  })();
12
12
  //# sourceMappingURL=index.js.map
package/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AAEtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAInG,CAAC,CAAC,OAAO,EAAE,SAAS,GAAG,CAAC,UAAU,CAAC,MAAM,KAAK,EAAE,CAAC,EAAE,EAAE;IACnD,SAAS,CAAC,aAAa,KAAK,EAAE,CAAC;IAC/B,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC;QAC3B,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,4BAA4B,OAAO,EAAE,CAAC,CAAC,CAAC,0BAA0B;QAChF,OAAO,EAAE,QAAQ;KAClB,CAAC,CAAC;AACL,CAAC,CAAC,EAAE,CAAC","sourcesContent":["export * from './autogrid-feature.js';\nexport type * from './crud.js';\nexport * from './autoform-feature.js';\nexport * from './autocrud-feature.js';\nexport { useDataProvider, useGridDataProvider, useComboBoxDataProvider } from './data-provider.js';\n\n// @ts-expect-error: esbuild injection\n// eslint-disable-next-line @typescript-eslint/no-unsafe-call\n((feature, vaadinObj = (globalThis.Vaadin ??= {})) => {\n vaadinObj.registrations ??= [];\n vaadinObj.registrations.push({\n is: feature ? `@vaadin/hilla-react-crud/${feature}` : '@vaadin/hilla-react-crud',\n version: '25.1.2',\n });\n})();\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AAEtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AAInG,CAAC,CAAC,OAAO,EAAE,SAAS,GAAG,CAAC,UAAU,CAAC,MAAM,KAAK,EAAE,CAAC,EAAE,EAAE;IACnD,SAAS,CAAC,aAAa,KAAK,EAAE,CAAC;IAC/B,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC;QAC3B,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,4BAA4B,OAAO,EAAE,CAAC,CAAC,CAAC,0BAA0B;QAChF,OAAO,EAAE,QAAQ;KAClB,CAAC,CAAC;AACL,CAAC,CAAC,EAAE,CAAC","sourcesContent":["export * from './autogrid-feature.js';\nexport type * from './crud.js';\nexport * from './autoform-feature.js';\nexport * from './autocrud-feature.js';\nexport { useDataProvider, useGridDataProvider, useComboBoxDataProvider } from './data-provider.js';\n\n// @ts-expect-error: esbuild injection\n// eslint-disable-next-line @typescript-eslint/no-unsafe-call\n((feature, vaadinObj = (globalThis.Vaadin ??= {})) => {\n vaadinObj.registrations ??= [];\n vaadinObj.registrations.push({\n is: feature ? `@vaadin/hilla-react-crud/${feature}` : '@vaadin/hilla-react-crud',\n version: '25.1.4',\n });\n})();\n"]}
package/model-info.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"model-info.js","sourceRoot":"","sources":["src/model-info.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n BooleanModel,\n NumberModel,\n StringModel,\n _meta,\n createDetachedModel,\n type AbstractModel,\n type DetachedModelConstructor,\n type ModelMetadata,\n EnumModel,\n ObjectModel,\n} from '@vaadin/hilla-lit-form';\n\nexport type PropertyType =\n | 'boolean'\n | 'date'\n | 'datetime'\n | 'decimal'\n | 'enum'\n | 'integer'\n | 'object'\n | 'string'\n | 'time'\n | undefined;\n\nconst javaTypeMap: Record<string, PropertyType> = {\n byte: 'integer',\n 'java.lang.Byte': 'integer',\n short: 'integer',\n 'java.lang.Short': 'integer',\n int: 'integer',\n 'java.lang.Integer': 'integer',\n long: 'integer',\n 'java.lang.Long': 'integer',\n float: 'decimal',\n 'java.lang.Float': 'decimal',\n double: 'decimal',\n 'java.lang.Double': 'decimal',\n 'java.time.LocalDate': 'date',\n 'java.time.LocalTime': 'time',\n 'java.time.OffsetTime': 'time',\n 'java.time.LocalDateTime': 'datetime',\n 'java.time.OffsetDateTime': 'datetime',\n 'java.time.ZonedDateTime': 'datetime',\n 'java.util.Date': 'datetime',\n 'java.sql.Date': 'datetime',\n};\n\nfunction determinePropertyType(model: AbstractModel): PropertyType {\n // Try detecting by Java type\n const { javaType } = model[_meta];\n const propertyType = javaType ? javaTypeMap[javaType] : undefined;\n if (propertyType) {\n return propertyType;\n }\n\n // Otherwise detect by model instance\n if (model instanceof StringModel) {\n return 'string';\n } else if (model instanceof NumberModel) {\n return 'decimal';\n } else if (model instanceof BooleanModel) {\n return 'boolean';\n } else if (model instanceof EnumModel) {\n return 'enum';\n } else if (model instanceof ObjectModel) {\n return 'object';\n }\n\n return undefined;\n}\n\nexport interface PropertyInfo {\n name: string;\n humanReadableName: string;\n type: PropertyType;\n meta: ModelMetadata;\n model: AbstractModel;\n}\n\nexport function hasAnnotation(meta: ModelMetadata, annotationName: string): boolean {\n return meta.annotations?.some((annotation) => annotation.name === annotationName) ?? false;\n}\n\n// This is from vaadin-grid-column.js, should be used from there maybe. At least we must be 100% sure to match grid and fields\nexport function _generateHeader(path: string): string {\n return path\n .substring(path.lastIndexOf('.') + 1)\n .replace(/([A-Z])/gu, '-$1')\n .toLowerCase()\n .replace(/-/gu, ' ')\n .replace(/^./u, (match) => match.toUpperCase());\n}\n\nconst getPropertyNames = (model: DetachedModelConstructor<AbstractModel>): string[] => {\n const propertyNames: string[] = [];\n\n for (let proto = model; proto !== ObjectModel; proto = Object.getPrototypeOf(proto)) {\n // parent properties are added at the beginning\n propertyNames.unshift(...Object.keys(Object.getOwnPropertyDescriptors(proto.prototype)).filter((p) => p !== 'new'));\n }\n\n return propertyNames;\n};\n\nexport class ModelInfo {\n private readonly modelInstance: AbstractModel;\n\n readonly idProperty?: PropertyInfo;\n\n constructor(model: DetachedModelConstructor<AbstractModel>, idPropertyName?: string) {\n this.modelInstance = createDetachedModel(model);\n\n // Try to find id property\n this.idProperty = ModelInfo.resolveIdProperty(this, idPropertyName);\n }\n\n private static resolveIdProperty(modelInfo: ModelInfo, idPropertyName?: string): PropertyInfo | undefined {\n // Return explicit property if defined\n if (idPropertyName) {\n return modelInfo.getProperty(idPropertyName);\n }\n\n // Otherwise check defaults\n const rootProperties = modelInfo.getRootProperties();\n // Check for @Id annotation\n let idProperty = rootProperties.find((propertyInfo) => hasAnnotation(propertyInfo.meta, 'jakarta.persistence.Id'));\n // Check for id name as fallback\n idProperty ??= rootProperties.find((propertyInfo) => propertyInfo.name === 'id');\n\n return idProperty;\n }\n\n private static resolvePropertyModel(modelInstance: AbstractModel, path: string): AbstractModel | undefined {\n const parts = path.split('.');\n let currentModel: AbstractModel | undefined = modelInstance;\n for (const part of parts) {\n if (!currentModel || !(currentModel instanceof ObjectModel)) {\n return undefined;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n currentModel = (currentModel as any)[part];\n }\n return currentModel;\n }\n\n getRootProperties(path?: string): PropertyInfo[] {\n const model = path ? ModelInfo.resolvePropertyModel(this.modelInstance, path) : this.modelInstance;\n if (!model) {\n return [];\n }\n return getPropertyNames(model.constructor as any)\n .map((name) => {\n const effectivePath = path ? `${path}.${name}` : name;\n return this.getProperty(effectivePath);\n })\n .filter(Boolean) as PropertyInfo[];\n }\n\n getProperty(path: string): PropertyInfo | undefined {\n const propertyModel = ModelInfo.resolvePropertyModel(this.modelInstance, path);\n if (!propertyModel?.[_meta]) {\n return undefined;\n }\n\n const pathParts = path.split('.');\n const name = pathParts[pathParts.length - 1];\n\n const meta = propertyModel[_meta];\n const humanReadableName = _generateHeader(name);\n const type = determinePropertyType(propertyModel);\n\n return {\n name: path,\n humanReadableName,\n type,\n meta,\n model: propertyModel,\n };\n }\n\n getProperties(paths: string[]): PropertyInfo[] {\n return paths.map((path) => this.getProperty(path)).filter(Boolean) as PropertyInfo[];\n }\n}\n\nexport function getDefaultProperties(modelInfo: ModelInfo): PropertyInfo[] {\n // Start from root properties\n const properties = modelInfo.getRootProperties();\n return (\n properties\n // Auto-expand nested properties of one-to-one relations\n .flatMap((prop) => {\n if (hasAnnotation(prop.meta, 'jakarta.persistence.OneToOne')) {\n return modelInfo.getRootProperties(prop.name);\n }\n return prop;\n })\n // Exclude properties that have an unknown type, or are annotated with id\n // and version\n .filter(\n (prop) =>\n !!prop.type &&\n !(\n hasAnnotation(prop.meta, 'jakarta.persistence.Id') ||\n hasAnnotation(prop.meta, 'jakarta.persistence.Version')\n ),\n )\n );\n}\n"]}
1
+ {"version":3,"file":"model-info.js","sourceRoot":"","sources":["src/model-info.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n BooleanModel,\n NumberModel,\n StringModel,\n _meta,\n createDetachedModel,\n type AbstractModel,\n type DetachedModelConstructor,\n type ModelMetadata,\n EnumModel,\n ObjectModel,\n} from '@vaadin/hilla-lit-form';\n\nexport type PropertyType =\n | 'boolean'\n | 'date'\n | 'datetime'\n | 'decimal'\n | 'enum'\n | 'integer'\n | 'object'\n | 'string'\n | 'time'\n | undefined;\n\nconst javaTypeMap: Record<string, PropertyType> = {\n byte: 'integer',\n 'java.lang.Byte': 'integer',\n short: 'integer',\n 'java.lang.Short': 'integer',\n int: 'integer',\n 'java.lang.Integer': 'integer',\n long: 'integer',\n 'java.lang.Long': 'integer',\n float: 'decimal',\n 'java.lang.Float': 'decimal',\n double: 'decimal',\n 'java.lang.Double': 'decimal',\n 'java.time.LocalDate': 'date',\n 'java.time.LocalTime': 'time',\n 'java.time.OffsetTime': 'time',\n 'java.time.LocalDateTime': 'datetime',\n 'java.time.OffsetDateTime': 'datetime',\n 'java.time.ZonedDateTime': 'datetime',\n 'java.util.Date': 'datetime',\n 'java.sql.Date': 'datetime',\n};\n\nfunction determinePropertyType(model: AbstractModel): PropertyType {\n // Try detecting by Java type\n const { javaType } = model[_meta];\n const propertyType = javaType ? javaTypeMap[javaType] : undefined;\n if (propertyType) {\n return propertyType;\n }\n\n // Otherwise detect by model instance\n if (model instanceof StringModel) {\n return 'string';\n } else if (model instanceof NumberModel) {\n return 'decimal';\n } else if (model instanceof BooleanModel) {\n return 'boolean';\n } else if (model instanceof EnumModel) {\n return 'enum';\n } else if (model instanceof ObjectModel) {\n return 'object';\n }\n\n return undefined;\n}\n\nexport interface PropertyInfo {\n name: string;\n humanReadableName: string;\n type: PropertyType;\n meta: ModelMetadata;\n model: AbstractModel;\n}\n\nexport function hasAnnotation(meta: ModelMetadata, annotationName: string): boolean {\n return meta.annotations?.some((annotation) => annotation.name === annotationName) ?? false;\n}\n\n// This is from vaadin-grid-column.js, should be used from there maybe. At least we must be 100% sure to match grid and fields\nexport function _generateHeader(path: string): string {\n return path\n .substring(path.lastIndexOf('.') + 1)\n .replace(/([A-Z])/gu, '-$1')\n .toLowerCase()\n .replace(/-/gu, ' ')\n .replace(/^./u, (match) => match.toUpperCase());\n}\n\nconst getPropertyNames = (model: AbstractModel['constructor']): string[] => {\n const propertyNames: string[] = [];\n\n for (let proto = model; proto !== ObjectModel; proto = Object.getPrototypeOf(proto)) {\n // parent properties are added at the beginning\n propertyNames.unshift(...Object.keys(Object.getOwnPropertyDescriptors(proto.prototype)).filter((p) => p !== 'new'));\n }\n\n return propertyNames;\n};\n\nexport class ModelInfo {\n private readonly modelInstance: AbstractModel;\n\n readonly idProperty?: PropertyInfo;\n\n constructor(model: DetachedModelConstructor<AbstractModel>, idPropertyName?: string) {\n this.modelInstance = createDetachedModel(model);\n\n // Try to find id property\n this.idProperty = ModelInfo.resolveIdProperty(this, idPropertyName);\n }\n\n private static resolveIdProperty(modelInfo: ModelInfo, idPropertyName?: string): PropertyInfo | undefined {\n // Return explicit property if defined\n if (idPropertyName) {\n return modelInfo.getProperty(idPropertyName);\n }\n\n // Otherwise check defaults\n const rootProperties = modelInfo.getRootProperties();\n // Check for @Id annotation\n let idProperty = rootProperties.find((propertyInfo) => hasAnnotation(propertyInfo.meta, 'jakarta.persistence.Id'));\n // Check for id name as fallback\n idProperty ??= rootProperties.find((propertyInfo) => propertyInfo.name === 'id');\n\n return idProperty;\n }\n\n private static resolvePropertyModel(modelInstance: AbstractModel, path: string): AbstractModel | undefined {\n const parts = path.split('.');\n let currentModel: AbstractModel | undefined = modelInstance;\n for (const part of parts) {\n if (!currentModel || !(currentModel instanceof ObjectModel)) {\n return undefined;\n }\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n currentModel = (currentModel as any)[part];\n }\n return currentModel;\n }\n\n getRootProperties(path?: string): PropertyInfo[] {\n const model = path ? ModelInfo.resolvePropertyModel(this.modelInstance, path) : this.modelInstance;\n if (!model) {\n return [];\n }\n return getPropertyNames(model.constructor)\n .map((name) => {\n const effectivePath = path ? `${path}.${name}` : name;\n return this.getProperty(effectivePath);\n })\n .filter(Boolean) as PropertyInfo[];\n }\n\n getProperty(path: string): PropertyInfo | undefined {\n const propertyModel = ModelInfo.resolvePropertyModel(this.modelInstance, path);\n if (!propertyModel?.[_meta]) {\n return undefined;\n }\n\n const pathParts = path.split('.');\n const name = pathParts[pathParts.length - 1];\n\n const meta = propertyModel[_meta];\n const humanReadableName = _generateHeader(name);\n const type = determinePropertyType(propertyModel);\n\n return {\n name: path,\n humanReadableName,\n type,\n meta,\n model: propertyModel,\n };\n }\n\n getProperties(paths: string[]): PropertyInfo[] {\n return paths.map((path) => this.getProperty(path)).filter(Boolean) as PropertyInfo[];\n }\n}\n\nexport function getDefaultProperties(modelInfo: ModelInfo): PropertyInfo[] {\n // Start from root properties\n const properties = modelInfo.getRootProperties();\n return (\n properties\n // Auto-expand nested properties of one-to-one relations\n .flatMap((prop) => {\n if (hasAnnotation(prop.meta, 'jakarta.persistence.OneToOne')) {\n return modelInfo.getRootProperties(prop.name);\n }\n return prop;\n })\n // Exclude properties that have an unknown type, or are annotated with id\n // and version\n .filter(\n (prop) =>\n !!prop.type &&\n !(\n hasAnnotation(prop.meta, 'jakarta.persistence.Id') ||\n hasAnnotation(prop.meta, 'jakarta.persistence.Version')\n ),\n )\n );\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vaadin/hilla-react-crud",
3
- "version": "25.1.2",
3
+ "version": "25.1.4",
4
4
  "description": "Hilla CRUD utils for React",
5
5
  "main": "index.js",
6
6
  "module": "index.js",
@@ -54,15 +54,15 @@
54
54
  "access": "public"
55
55
  },
56
56
  "dependencies": {
57
- "@vaadin/hilla-frontend": "25.1.2",
58
- "@vaadin/hilla-lit-form": "25.1.2",
59
- "@vaadin/hilla-react-form": "25.1.2",
60
- "@vaadin/vaadin-lumo-styles": "25.1.1",
61
- "@vaadin/react-components": "25.1.1",
57
+ "@vaadin/hilla-frontend": "25.1.4",
58
+ "@vaadin/hilla-lit-form": "25.1.4",
59
+ "@vaadin/hilla-react-form": "25.1.4",
60
+ "@vaadin/vaadin-lumo-styles": "25.1.2",
61
+ "@vaadin/react-components": "25.1.2",
62
62
  "type-fest": "4.35.0"
63
63
  },
64
64
  "peerDependencies": {
65
65
  "react": "18 || 19",
66
66
  "react-dom": "18 || 19"
67
67
  }
68
- }
68
+ }
package/util.js CHANGED
@@ -24,7 +24,7 @@ function useFeatureRegistration(feature) {
24
24
  vaadinObj.registrations ??= [];
25
25
  vaadinObj.registrations.push({
26
26
  is: feature ? `@vaadin/hilla-react-crud/${feature}` : '@vaadin/hilla-react-crud',
27
- version: '25.1.2',
27
+ version: '25.1.4',
28
28
  });
29
29
  })(feature);
30
30
  }
package/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["src/util.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { type CSSProperties, forwardRef } from 'react';\nimport type FilterUnion from './types/com/vaadin/hilla/crud/filter/FilterUnion.js';\n\nexport type ComponentStyleProps = Readonly<{\n id?: string;\n style?: CSSProperties;\n className?: string;\n}>;\n\nexport function convertToTitleCase(inputString: string): string {\n // Convert underscores to spaces\n const stringWithSpaces = inputString.replace(/_/gu, ' ');\n\n // Convert to title case\n const words = stringWithSpaces.split(' ');\n const titleCaseWords = words.map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase());\n\n // Join the title case words with spaces\n return titleCaseWords.join(' ');\n}\n\nexport function registerStylesheet(stylesheet: CSSStyleSheet): void {\n const css = Array.from(stylesheet.cssRules)\n .map((rule) => rule.cssText)\n .join('\\n');\n\n const styleTag = document.createElement('style');\n styleTag.textContent = css;\n document.head.prepend(styleTag);\n}\n\nconst registeredFeatures = new Set<string>();\nfunction useFeatureRegistration(feature: string): void {\n if (registeredFeatures.has(feature)) {\n return;\n }\n\n registeredFeatures.add(feature);\n // @ts-expect-error: esbuild injection\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n ((feature, vaadinObj = (globalThis.Vaadin ??= {})) => {\n vaadinObj.registrations ??= [];\n vaadinObj.registrations.push({\n is: feature ? `@vaadin/hilla-react-crud/${feature}` : '@vaadin/hilla-react-crud',\n version: '25.1.2',\n });\n})(feature);\n}\n\nexport function featureRegistration<C extends (...args: any[]) => any>(Component: C, feature: string): C {\n return forwardRef<unknown, React.JSX.LibraryManagedAttributes<C, NonNullable<unknown>>>((props, ref) => {\n useFeatureRegistration(feature);\n return <Component {...(props as any)} ref={ref} />;\n }) as unknown as C;\n}\n\nexport function isFilterEmpty(filter: FilterUnion): boolean {\n if (filter['@type'] === 'and' || filter['@type'] === 'or') {\n if (filter.children.length === 0) {\n return true;\n }\n return filter.children.every((child) => isFilterEmpty(child as FilterUnion));\n }\n if ('filterValue' in filter) {\n return filter.filterValue === '';\n }\n throw new Error(`Unknown filter type: ${'@type' in filter ? filter['@type'] : JSON.stringify(filter)} `);\n}\n"]}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["src/util.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { type CSSProperties, forwardRef } from 'react';\nimport type FilterUnion from './types/com/vaadin/hilla/crud/filter/FilterUnion.js';\n\nexport type ComponentStyleProps = Readonly<{\n id?: string;\n style?: CSSProperties;\n className?: string;\n}>;\n\nexport function convertToTitleCase(inputString: string): string {\n // Convert underscores to spaces\n const stringWithSpaces = inputString.replace(/_/gu, ' ');\n\n // Convert to title case\n const words = stringWithSpaces.split(' ');\n const titleCaseWords = words.map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase());\n\n // Join the title case words with spaces\n return titleCaseWords.join(' ');\n}\n\nexport function registerStylesheet(stylesheet: CSSStyleSheet): void {\n const css = Array.from(stylesheet.cssRules)\n .map((rule) => rule.cssText)\n .join('\\n');\n\n const styleTag = document.createElement('style');\n styleTag.textContent = css;\n document.head.prepend(styleTag);\n}\n\nconst registeredFeatures = new Set<string>();\nfunction useFeatureRegistration(feature: string): void {\n if (registeredFeatures.has(feature)) {\n return;\n }\n\n registeredFeatures.add(feature);\n // @ts-expect-error: esbuild injection\n // eslint-disable-next-line @typescript-eslint/no-unsafe-call\n ((feature, vaadinObj = (globalThis.Vaadin ??= {})) => {\n vaadinObj.registrations ??= [];\n vaadinObj.registrations.push({\n is: feature ? `@vaadin/hilla-react-crud/${feature}` : '@vaadin/hilla-react-crud',\n version: '25.1.4',\n });\n})(feature);\n}\n\nexport function featureRegistration<C extends (...args: any[]) => any>(Component: C, feature: string): C {\n return forwardRef<unknown, React.JSX.LibraryManagedAttributes<C, NonNullable<unknown>>>((props, ref) => {\n useFeatureRegistration(feature);\n return <Component {...(props as any)} ref={ref} />;\n }) as unknown as C;\n}\n\nexport function isFilterEmpty(filter: FilterUnion): boolean {\n if (filter['@type'] === 'and' || filter['@type'] === 'or') {\n if (filter.children.length === 0) {\n return true;\n }\n return filter.children.every((child) => isFilterEmpty(child as FilterUnion));\n }\n if ('filterValue' in filter) {\n return filter.filterValue === '';\n }\n throw new Error(`Unknown filter type: ${'@type' in filter ? filter['@type'] : JSON.stringify(filter)} `);\n}\n"]}