@trackunit/iris-app-api 1.7.23 → 1.7.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## 1.7.25 (2025-10-09)
2
+
3
+ This was a version bump only for iris-app-api to align it with other projects, there were no code changes.
4
+
5
+ ## 1.7.24 (2025-10-09)
6
+
7
+ This was a version bump only for iris-app-api to align it with other projects, there were no code changes.
8
+
1
9
  ## 1.7.23 (2025-10-09)
2
10
 
3
11
  This was a version bump only for iris-app-api to align it with other projects, there were no code changes.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@trackunit/iris-app-api",
3
- "version": "1.7.23",
3
+ "version": "1.7.25",
4
4
  "license": "SEE LICENSE IN LICENSE.txt",
5
5
  "repository": "https://github.com/Trackunit/manager",
6
6
  "engines": {
@@ -1,5 +1,19 @@
1
1
  import { IconByName, IconByPath, ImageByPath } from "../iconImage";
2
2
  import { AbstractExtensionManifest, TranslationKey, Translations } from "../irisAppExtensionManifest";
3
+ /**
4
+ * Check if the object is a footer with a link
5
+ *
6
+ * @param object - The object to check
7
+ * @returns {boolean} if the object is a footer with a link, false otherwise
8
+ */
9
+ export declare const isFooterWithLink: (object: FooterWithLink | FooterWithoutLink) => object is FooterWithLink;
10
+ /**
11
+ * Check if the object is a footer without a link
12
+ *
13
+ * @param object - The object to check
14
+ * @returns {boolean} if the object is a footer without a link, false otherwise
15
+ */
16
+ export declare const isFooterWithoutLink: (object: FooterWithLink | FooterWithoutLink) => object is FooterWithoutLink;
3
17
  export type WidgetSupportedLocations = "MY_HOME" | "SITE_HOME" | "PLAYGROUND";
4
18
  export type WidgetSupportedFilterBars = "CUSTOMERS" | "ASSETS" | "SITES";
5
19
  export type WidgetSupportedFilters = WidgetSupportedFilterBars | "TIME_RANGE";
@@ -31,6 +45,30 @@ export type SupportedFiltersConfig = {
31
45
  CUSTOMERS?: FilterConfig<CustomerFilterKeysWithCustomFields>;
32
46
  TIME_RANGE?: FilterConfig<TimeRangeFilterKeys>;
33
47
  };
48
+ export type FooterWithLink = {
49
+ /**
50
+ * The link to display in the footer. The link is fixed and will always point to the same route.
51
+ */
52
+ link: string;
53
+ /**
54
+ * The link description to display in the footer, if not it will default to localized version of 'See full details'. Only relevant if link is provided.
55
+ */
56
+ linkDescription?: string | Translations | TranslationKey;
57
+ /**
58
+ * A logo can be displayed in the footer to show that the widget is powered by an entity. You can use an SVG logo, and provide background and foreground colors.
59
+ * You can also use a SVG, PNG, JPEG or JPG logo directly max size 150x16px.
60
+ */
61
+ poweredByImage?: ImageByPath;
62
+ };
63
+ export type FooterWithoutLink = {
64
+ link?: never;
65
+ linkDescription?: never;
66
+ /**
67
+ * A logo can be displayed in the footer to show that the widget is powered by an entity. You can use an SVG logo, and provide background and foreground colors.
68
+ * You can also use a SVG, PNG, JPEG or JPG logo directly max size 150x16px.
69
+ */
70
+ poweredByImage?: ImageByPath;
71
+ };
34
72
  /**
35
73
  * BETA! DO NOT USE THIS YET - its under development
36
74
  */
@@ -78,21 +116,7 @@ export interface WidgetExtensionManifest extends AbstractExtensionManifest {
78
116
  */
79
117
  hasEditDialog?: boolean;
80
118
  };
81
- footer?: {
82
- /**
83
- * The link description to display in the footer, if not it will default to localized version of 'See full details'.
84
- */
85
- linkDescription?: string | Translations | TranslationKey;
86
- /**
87
- * The link to display in the footer. The link is fixed and will always point to the same route.
88
- */
89
- link: string;
90
- /**
91
- * A logo can be displayed in the footer to show that the widget is powered by an entity. You can use an SVG logo, and provide background and foreground colors.
92
- * You can also use a SVG, PNG, JPEG or JPG logo directly max size 150x16px.
93
- */
94
- poweredByImage?: ImageByPath;
95
- };
119
+ footer?: FooterWithLink | FooterWithoutLink;
96
120
  /**
97
121
  * The locations where the widget can be placed. Choose between My Home, Site Home and Playground.
98
122
  */
@@ -1,6 +1,26 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.allTimeRangeFilterKeys = exports.allCustomerFilterKeysWithCustomFields = exports.allCustomerFilterKeys = exports.allSiteFilterKeysWithCustomFields = exports.allSiteFilterKeys = exports.allAssetFilterKeysWithCustomFields = exports.customFieldFilterKey = exports.allAssetFilterKeysWithCustomer = exports.allAssetFilterKeys = exports.widgetTypes = void 0;
3
+ exports.allTimeRangeFilterKeys = exports.allCustomerFilterKeysWithCustomFields = exports.allCustomerFilterKeys = exports.allSiteFilterKeysWithCustomFields = exports.allSiteFilterKeys = exports.allAssetFilterKeysWithCustomFields = exports.customFieldFilterKey = exports.allAssetFilterKeysWithCustomer = exports.allAssetFilterKeys = exports.widgetTypes = exports.isFooterWithoutLink = exports.isFooterWithLink = void 0;
4
+ /**
5
+ * Check if the object is a footer with a link
6
+ *
7
+ * @param object - The object to check
8
+ * @returns {boolean} if the object is a footer with a link, false otherwise
9
+ */
10
+ const isFooterWithLink = (object) => {
11
+ return typeof object === "object" && "link" in object;
12
+ };
13
+ exports.isFooterWithLink = isFooterWithLink;
14
+ /**
15
+ * Check if the object is a footer without a link
16
+ *
17
+ * @param object - The object to check
18
+ * @returns {boolean} if the object is a footer without a link, false otherwise
19
+ */
20
+ const isFooterWithoutLink = (object) => {
21
+ return typeof object === "object" && "link" in object === false;
22
+ };
23
+ exports.isFooterWithoutLink = isFooterWithoutLink;
4
24
  exports.widgetTypes = ["KPI", "CHART", "LIST", "MAP", "OTHER"];
5
25
  exports.allAssetFilterKeys = [
6
26
  "search",
@@ -1 +1 @@
1
- {"version":3,"file":"widgetExtensionManifest.js","sourceRoot":"","sources":["../../../../../../../libs/iris-app-sdk/iris-app-api/src/types/extensions/widgetExtensionManifest.ts"],"names":[],"mappings":";;;AASa,QAAA,WAAW,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAU,CAAC;AAIhE,QAAA,kBAAkB,GAAG;IAChC,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,OAAO;IACP,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,aAAa;IACb,UAAU;IACV,sBAAsB;IACtB,UAAU;IACV,UAAU;IACV,UAAU;IACV,iBAAiB;IACjB,MAAM;IACN,SAAS;IACT,iBAAiB;IACjB,eAAe;IACf,qBAAqB;IACrB,cAAc;IACd,uBAAuB;CACf,CAAC;AAEE,QAAA,8BAA8B,GAAG;IAC5C,GAAG,0BAAkB;IACrB,aAAa;IACb,gBAAgB;IAChB,2BAA2B;IAC3B,6BAA6B;IAC7B,6CAA6C;CAC9C,CAAC;AACW,QAAA,oBAAoB,GAAG,cAAuB,CAAC;AAK/C,QAAA,kCAAkC,GAAG,CAAC,GAAG,sCAA8B,EAAE,4BAAoB,CAAU,CAAC;AAGxG,QAAA,iBAAiB,GAAG,CAAC,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAU,CAAC;AAElE,QAAA,iCAAiC,GAAG,CAAC,GAAG,yBAAiB,EAAE,4BAAoB,CAAU,CAAC;AAG1F,QAAA,qBAAqB,GAAG,CAAC,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,CAAU,CAAC;AAE1F,QAAA,qCAAqC,GAAG,CAAC,GAAG,6BAAqB,EAAE,4BAAoB,CAAU,CAAC;AAGlG,QAAA,sBAAsB,GAAG,CAAC,KAAK,CAAU,CAAC","sourcesContent":["import { IconByName, IconByPath, ImageByPath } from \"../iconImage\";\nimport { AbstractExtensionManifest, TranslationKey, Translations } from \"../irisAppExtensionManifest\";\n\nexport type WidgetSupportedLocations = \"MY_HOME\" | \"SITE_HOME\" | \"PLAYGROUND\";\n\nexport type WidgetSupportedFilterBars = \"CUSTOMERS\" | \"ASSETS\" | \"SITES\";\n\nexport type WidgetSupportedFilters = WidgetSupportedFilterBars | \"TIME_RANGE\";\n\nexport const widgetTypes = [\"KPI\", \"CHART\", \"LIST\", \"MAP\", \"OTHER\"] as const;\n\nexport type WidgetType = (typeof widgetTypes)[number];\n\nexport const allAssetFilterKeys = [\n \"search\",\n \"siteIds\",\n \"groups\",\n \"types\",\n \"assetType\",\n \"brands\",\n \"models\",\n \"criticality\",\n \"activity\",\n \"metadataCompleteness\",\n \"lastSeen\",\n \"followed\",\n \"siteType\",\n \"ownerAccountIds\",\n \"area\",\n \"partner\",\n \"productionYears\",\n \"serviceStatus\",\n \"telematicsConnected\",\n \"activeFilter\",\n \"siteDepotOwnershipIds\",\n] as const;\n\nexport const allAssetFilterKeysWithCustomer = [\n ...allAssetFilterKeys,\n \"customerIds\",\n \"rentalStatuses\",\n \"rentalContractOrderNumber\",\n \"rentalContractReferenceCode\",\n \"rentalContractReferenceCodeDescriptionQuery\",\n];\nexport const customFieldFilterKey = \"customFields\" as const;\nexport type AssetFilterKeys = typeof allAssetFilterKeys;\n\nexport type AssetFilterKeysWithCustomer = typeof allAssetFilterKeysWithCustomer;\n\nexport const allAssetFilterKeysWithCustomFields = [...allAssetFilterKeysWithCustomer, customFieldFilterKey] as const;\nexport type AssetFilterKeysWithCustomFields = typeof allAssetFilterKeysWithCustomFields;\n\nexport const allSiteFilterKeys = [\"search\", \"siteStatus\", \"siteType\"] as const;\nexport type SiteFilterKeys = typeof allSiteFilterKeys;\nexport const allSiteFilterKeysWithCustomFields = [...allSiteFilterKeys, customFieldFilterKey] as const;\nexport type SiteFilterKeysWithCustomFields = typeof allSiteFilterKeysWithCustomFields;\n\nexport const allCustomerFilterKeys = [\"search\", \"customerType\", \"criticality\", \"servicePlan\"] as const;\nexport type CustomerFilterKeys = typeof allCustomerFilterKeys;\nexport const allCustomerFilterKeysWithCustomFields = [...allCustomerFilterKeys, customFieldFilterKey] as const;\nexport type CustomerFilterKeysWithCustomFields = typeof allCustomerFilterKeysWithCustomFields;\n\nexport const allTimeRangeFilterKeys = [\"ALL\"] as const;\nexport type TimeRangeFilterKeys = typeof allTimeRangeFilterKeys;\n\ntype FilterConfig<TFilterKeys extends ReadonlyArray<string>> = {\n include: Array<TFilterKeys[number]>;\n};\n\nexport type SupportedFiltersConfig = {\n ASSETS?: FilterConfig<AssetFilterKeysWithCustomFields>;\n SITES?: FilterConfig<SiteFilterKeysWithCustomFields>;\n CUSTOMERS?: FilterConfig<CustomerFilterKeysWithCustomFields>;\n TIME_RANGE?: FilterConfig<TimeRangeFilterKeys>;\n};\n\n/**\n * BETA! DO NOT USE THIS YET - its under development\n */\nexport interface WidgetExtensionManifest extends AbstractExtensionManifest {\n type: \"WIDGET_EXTENSION\";\n\n preview?: {\n /**\n * The description of the widget will be displayed in the drawer for adding widgets.\n */\n description?: string | Translations | TranslationKey;\n };\n\n /**\n * The widget type is used for filtering the widgets in the drawer.\n */\n widgetType: WidgetType;\n\n /**\n * Each widget must have one fixed size.\n * Standard widgets are 2x2.\n * Smaller widgets can be either 1x1 or 2x1.\n * It is not recommended to create widgets that are larger than 2x2 by default.\n * If a widget needs to support multiple sizes, create a separate widget for each size.\n * Use `allowFullWidth: true` to let users expand the widget across the full width of the screen.\n * This is generally recommended only for charts and maps where a larger display improves usability.\n */\n size: {\n default: {\n width: 1 | 2 | 3 | 4 | 5 | 6;\n height: 1 | 2 | 3 | 4 | 5 | 6;\n };\n allowFullWidth?: boolean;\n };\n\n header: {\n /**\n * The name of the widget to display in the header. Do not place date ranges or fixed filters in the name. It is used for finding the widget in the drawer.\n * Widgets sized 1x1 do not show the name in the header, but it is still visible in the drawer.\n */\n name: string | Translations | TranslationKey;\n\n /**\n * The image of the widget to display in the header, if not it will default to the icon of the manifest.\n * Most standard widgets use icons, but you can use an SVG logo instead.\n */\n image?: IconByName | IconByPath;\n\n /**\n * If true, a button will be on the header and an editDialog from the src folder of this extension will be loaded to allow users to configure the widget.\n */\n hasEditDialog?: boolean;\n };\n\n footer?: {\n /**\n * The link description to display in the footer, if not it will default to localized version of 'See full details'.\n */\n linkDescription?: string | Translations | TranslationKey;\n\n /**\n * The link to display in the footer. The link is fixed and will always point to the same route.\n */\n link: string;\n\n /**\n * A logo can be displayed in the footer to show that the widget is powered by an entity. You can use an SVG logo, and provide background and foreground colors.\n * You can also use a SVG, PNG, JPEG or JPG logo directly max size 150x16px.\n */\n poweredByImage?: ImageByPath;\n };\n\n /**\n * The locations where the widget can be placed. Choose between My Home, Site Home and Playground.\n */\n supportedLocations: Array<WidgetSupportedLocations>;\n\n /**\n * The filters that the widget can be filtered by. To support a date range filter, add \"TIME_RANGE\" to the list. The date range will be displayed separately in the menu.\n * If you would like to lock the filters to a specific value, you can do so by adding the filter to the list and setting the value to the filter.\n */\n supportedFilters?: SupportedFiltersConfig;\n}\n"]}
1
+ {"version":3,"file":"widgetExtensionManifest.js","sourceRoot":"","sources":["../../../../../../../libs/iris-app-sdk/iris-app-api/src/types/extensions/widgetExtensionManifest.ts"],"names":[],"mappings":";;;AAGA;;;;;GAKG;AACI,MAAM,gBAAgB,GAAG,CAAC,MAA0C,EAA4B,EAAE;IACvG,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,IAAI,MAAM,CAAC;AACxD,CAAC,CAAC;AAFW,QAAA,gBAAgB,oBAE3B;AAEF;;;;;GAKG;AACI,MAAM,mBAAmB,GAAG,CAAC,MAA0C,EAA+B,EAAE;IAC7G,OAAO,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,IAAI,MAAM,KAAK,KAAK,CAAC;AAClE,CAAC,CAAC;AAFW,QAAA,mBAAmB,uBAE9B;AAQW,QAAA,WAAW,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAU,CAAC;AAIhE,QAAA,kBAAkB,GAAG;IAChC,QAAQ;IACR,SAAS;IACT,QAAQ;IACR,OAAO;IACP,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,aAAa;IACb,UAAU;IACV,sBAAsB;IACtB,UAAU;IACV,UAAU;IACV,UAAU;IACV,iBAAiB;IACjB,MAAM;IACN,SAAS;IACT,iBAAiB;IACjB,eAAe;IACf,qBAAqB;IACrB,cAAc;IACd,uBAAuB;CACf,CAAC;AAEE,QAAA,8BAA8B,GAAG;IAC5C,GAAG,0BAAkB;IACrB,aAAa;IACb,gBAAgB;IAChB,2BAA2B;IAC3B,6BAA6B;IAC7B,6CAA6C;CAC9C,CAAC;AACW,QAAA,oBAAoB,GAAG,cAAuB,CAAC;AAK/C,QAAA,kCAAkC,GAAG,CAAC,GAAG,sCAA8B,EAAE,4BAAoB,CAAU,CAAC;AAGxG,QAAA,iBAAiB,GAAG,CAAC,QAAQ,EAAE,YAAY,EAAE,UAAU,CAAU,CAAC;AAElE,QAAA,iCAAiC,GAAG,CAAC,GAAG,yBAAiB,EAAE,4BAAoB,CAAU,CAAC;AAG1F,QAAA,qBAAqB,GAAG,CAAC,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,aAAa,CAAU,CAAC;AAE1F,QAAA,qCAAqC,GAAG,CAAC,GAAG,6BAAqB,EAAE,4BAAoB,CAAU,CAAC;AAGlG,QAAA,sBAAsB,GAAG,CAAC,KAAK,CAAU,CAAC","sourcesContent":["import { IconByName, IconByPath, ImageByPath } from \"../iconImage\";\nimport { AbstractExtensionManifest, TranslationKey, Translations } from \"../irisAppExtensionManifest\";\n\n/**\n * Check if the object is a footer with a link\n *\n * @param object - The object to check\n * @returns {boolean} if the object is a footer with a link, false otherwise\n */\nexport const isFooterWithLink = (object: FooterWithLink | FooterWithoutLink): object is FooterWithLink => {\n return typeof object === \"object\" && \"link\" in object;\n};\n\n/**\n * Check if the object is a footer without a link\n *\n * @param object - The object to check\n * @returns {boolean} if the object is a footer without a link, false otherwise\n */\nexport const isFooterWithoutLink = (object: FooterWithLink | FooterWithoutLink): object is FooterWithoutLink => {\n return typeof object === \"object\" && \"link\" in object === false;\n};\n\nexport type WidgetSupportedLocations = \"MY_HOME\" | \"SITE_HOME\" | \"PLAYGROUND\";\n\nexport type WidgetSupportedFilterBars = \"CUSTOMERS\" | \"ASSETS\" | \"SITES\";\n\nexport type WidgetSupportedFilters = WidgetSupportedFilterBars | \"TIME_RANGE\";\n\nexport const widgetTypes = [\"KPI\", \"CHART\", \"LIST\", \"MAP\", \"OTHER\"] as const;\n\nexport type WidgetType = (typeof widgetTypes)[number];\n\nexport const allAssetFilterKeys = [\n \"search\",\n \"siteIds\",\n \"groups\",\n \"types\",\n \"assetType\",\n \"brands\",\n \"models\",\n \"criticality\",\n \"activity\",\n \"metadataCompleteness\",\n \"lastSeen\",\n \"followed\",\n \"siteType\",\n \"ownerAccountIds\",\n \"area\",\n \"partner\",\n \"productionYears\",\n \"serviceStatus\",\n \"telematicsConnected\",\n \"activeFilter\",\n \"siteDepotOwnershipIds\",\n] as const;\n\nexport const allAssetFilterKeysWithCustomer = [\n ...allAssetFilterKeys,\n \"customerIds\",\n \"rentalStatuses\",\n \"rentalContractOrderNumber\",\n \"rentalContractReferenceCode\",\n \"rentalContractReferenceCodeDescriptionQuery\",\n];\nexport const customFieldFilterKey = \"customFields\" as const;\nexport type AssetFilterKeys = typeof allAssetFilterKeys;\n\nexport type AssetFilterKeysWithCustomer = typeof allAssetFilterKeysWithCustomer;\n\nexport const allAssetFilterKeysWithCustomFields = [...allAssetFilterKeysWithCustomer, customFieldFilterKey] as const;\nexport type AssetFilterKeysWithCustomFields = typeof allAssetFilterKeysWithCustomFields;\n\nexport const allSiteFilterKeys = [\"search\", \"siteStatus\", \"siteType\"] as const;\nexport type SiteFilterKeys = typeof allSiteFilterKeys;\nexport const allSiteFilterKeysWithCustomFields = [...allSiteFilterKeys, customFieldFilterKey] as const;\nexport type SiteFilterKeysWithCustomFields = typeof allSiteFilterKeysWithCustomFields;\n\nexport const allCustomerFilterKeys = [\"search\", \"customerType\", \"criticality\", \"servicePlan\"] as const;\nexport type CustomerFilterKeys = typeof allCustomerFilterKeys;\nexport const allCustomerFilterKeysWithCustomFields = [...allCustomerFilterKeys, customFieldFilterKey] as const;\nexport type CustomerFilterKeysWithCustomFields = typeof allCustomerFilterKeysWithCustomFields;\n\nexport const allTimeRangeFilterKeys = [\"ALL\"] as const;\nexport type TimeRangeFilterKeys = typeof allTimeRangeFilterKeys;\n\ntype FilterConfig<TFilterKeys extends ReadonlyArray<string>> = {\n include: Array<TFilterKeys[number]>;\n};\n\nexport type SupportedFiltersConfig = {\n ASSETS?: FilterConfig<AssetFilterKeysWithCustomFields>;\n SITES?: FilterConfig<SiteFilterKeysWithCustomFields>;\n CUSTOMERS?: FilterConfig<CustomerFilterKeysWithCustomFields>;\n TIME_RANGE?: FilterConfig<TimeRangeFilterKeys>;\n};\n\nexport type FooterWithLink = {\n /**\n * The link to display in the footer. The link is fixed and will always point to the same route.\n */\n link: string;\n\n /**\n * The link description to display in the footer, if not it will default to localized version of 'See full details'. Only relevant if link is provided.\n */\n linkDescription?: string | Translations | TranslationKey;\n\n /**\n * A logo can be displayed in the footer to show that the widget is powered by an entity. You can use an SVG logo, and provide background and foreground colors.\n * You can also use a SVG, PNG, JPEG or JPG logo directly max size 150x16px.\n */\n poweredByImage?: ImageByPath;\n};\n\nexport type FooterWithoutLink = {\n link?: never;\n linkDescription?: never;\n\n /**\n * A logo can be displayed in the footer to show that the widget is powered by an entity. You can use an SVG logo, and provide background and foreground colors.\n * You can also use a SVG, PNG, JPEG or JPG logo directly max size 150x16px.\n */\n poweredByImage?: ImageByPath;\n};\n\n/**\n * BETA! DO NOT USE THIS YET - its under development\n */\nexport interface WidgetExtensionManifest extends AbstractExtensionManifest {\n type: \"WIDGET_EXTENSION\";\n\n preview?: {\n /**\n * The description of the widget will be displayed in the drawer for adding widgets.\n */\n description?: string | Translations | TranslationKey;\n };\n\n /**\n * The widget type is used for filtering the widgets in the drawer.\n */\n widgetType: WidgetType;\n\n /**\n * Each widget must have one fixed size.\n * Standard widgets are 2x2.\n * Smaller widgets can be either 1x1 or 2x1.\n * It is not recommended to create widgets that are larger than 2x2 by default.\n * If a widget needs to support multiple sizes, create a separate widget for each size.\n * Use `allowFullWidth: true` to let users expand the widget across the full width of the screen.\n * This is generally recommended only for charts and maps where a larger display improves usability.\n */\n size: {\n default: {\n width: 1 | 2 | 3 | 4 | 5 | 6;\n height: 1 | 2 | 3 | 4 | 5 | 6;\n };\n allowFullWidth?: boolean;\n };\n\n header: {\n /**\n * The name of the widget to display in the header. Do not place date ranges or fixed filters in the name. It is used for finding the widget in the drawer.\n * Widgets sized 1x1 do not show the name in the header, but it is still visible in the drawer.\n */\n name: string | Translations | TranslationKey;\n\n /**\n * The image of the widget to display in the header, if not it will default to the icon of the manifest.\n * Most standard widgets use icons, but you can use an SVG logo instead.\n */\n image?: IconByName | IconByPath;\n\n /**\n * If true, a button will be on the header and an editDialog from the src folder of this extension will be loaded to allow users to configure the widget.\n */\n hasEditDialog?: boolean;\n };\n\n footer?: FooterWithLink | FooterWithoutLink;\n\n /**\n * The locations where the widget can be placed. Choose between My Home, Site Home and Playground.\n */\n supportedLocations: Array<WidgetSupportedLocations>;\n\n /**\n * The filters that the widget can be filtered by. To support a date range filter, add \"TIME_RANGE\" to the list. The date range will be displayed separately in the menu.\n * If you would like to lock the filters to a specific value, you can do so by adding the filter to the list and setting the value to the filter.\n */\n supportedFilters?: SupportedFiltersConfig;\n}\n"]}