@windycom/plugin-devtools 2.0.0 → 3.0.1

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 (143) hide show
  1. package/README.md +4 -0
  2. package/index.mjs +2 -2
  3. package/package.json +2 -3
  4. package/types/client/AccessProducts.d.ts +8 -0
  5. package/types/client/BottomSlide.d.ts +3 -0
  6. package/types/client/BottomSveltePlugins.d.ts +8 -0
  7. package/types/client/Calendar.d.ts +9 -17
  8. package/types/client/Color.d.ts +44 -91
  9. package/types/client/EcmwfProduct.d.ts +0 -22
  10. package/types/client/Evented.d.ts +4 -0
  11. package/types/client/ExternalSveltePlugin.d.ts +8 -2
  12. package/types/client/IDB.d.ts +69 -0
  13. package/types/client/IconProducts.d.ts +2 -0
  14. package/types/client/Layer.d.ts +1 -2
  15. package/types/client/Metric.d.ts +13 -9
  16. package/types/client/MetricClasses.d.ts +4 -3
  17. package/types/client/Overlay.d.ts +31 -16
  18. package/types/client/OverlayClasses.d.ts +11 -7
  19. package/types/client/Plugin.d.ts +6 -2
  20. package/types/client/Product.d.ts +33 -30
  21. package/types/client/RadarPlusProduct.d.ts +19 -0
  22. package/types/client/Renderer.d.ts +2 -10
  23. package/types/client/SatelliteProduct.d.ts +1 -1
  24. package/types/client/SveltePlugin.d.ts +16 -5
  25. package/types/client/TileLayer.d.ts +1 -2
  26. package/types/client/TopoMap.d.ts +10 -0
  27. package/types/client/WindowPlugin.d.ts +9 -4
  28. package/types/client/appsFlyer.d.ts +2 -0
  29. package/types/client/baseMap.d.ts +8 -5
  30. package/types/client/cityLabels.d.ts +10 -2
  31. package/types/client/cloudSync.d.ts +3 -1
  32. package/types/client/colorGradients.d.ts +13 -0
  33. package/types/client/compatibilityCheck.d.ts +1 -0
  34. package/types/client/connection.d.ts +1 -1
  35. package/types/client/customColors.d.ts +1 -0
  36. package/types/client/d.ts.files/Calendar.d.ts +11 -2
  37. package/types/client/d.ts.files/Color.d.ts +17 -5
  38. package/types/client/d.ts.files/LabelsLayer.d.ts +3 -20
  39. package/types/client/d.ts.files/Layer.d.ts +8 -1
  40. package/types/client/d.ts.files/Metric.d.ts +1 -0
  41. package/types/client/d.ts.files/Renderer.d.ts +22 -1
  42. package/types/client/d.ts.files/alerts.d.ts +119 -0
  43. package/types/client/d.ts.files/broadcast.d.ts +51 -18
  44. package/types/client/d.ts.files/dataSpecifications.d.ts +121 -137
  45. package/types/client/d.ts.files/favs.d.ts +68 -0
  46. package/types/client/d.ts.files/incomingMessages.d.ts +0 -4
  47. package/types/client/d.ts.files/lib.d.ts +5 -7
  48. package/types/client/d.ts.files/notifications.d.ts +2 -2
  49. package/types/client/d.ts.files/plugin-params.d.ts +53 -57
  50. package/types/client/d.ts.files/plugins.d.ts +31 -42
  51. package/types/client/d.ts.files/pois.d.ts +1 -1
  52. package/types/client/d.ts.files/products.d.ts +16 -5
  53. package/types/client/d.ts.files/rootScope.d.ts +13 -31
  54. package/types/client/d.ts.files/startup.d.ts +65 -0
  55. package/types/client/d.ts.files/storage.d.ts +12 -35
  56. package/types/client/d.ts.files/user.d.ts +82 -24
  57. package/types/client/detectDevice.d.ts +0 -3
  58. package/types/client/device.d.ts +1 -0
  59. package/types/client/deviceLogging.d.ts +2 -1
  60. package/types/client/embed.d.ts +70 -0
  61. package/types/client/embed2.d.ts +14 -31
  62. package/types/client/errorLogger.d.ts +28 -3
  63. package/types/client/errors.d.ts +6 -0
  64. package/types/client/fetch.d.ts +41 -16
  65. package/types/client/format.d.ts +1 -1
  66. package/types/client/ga.d.ts +1 -1
  67. package/types/client/geolocation.d.ts +15 -7
  68. package/types/client/globals.d.ts +1 -0
  69. package/types/client/http.d.ts +17 -6
  70. package/types/client/idbInstances.d.ts +36 -0
  71. package/types/client/imaker.d.ts +112 -0
  72. package/types/client/imakerMain.d.ts +49 -0
  73. package/types/client/langFiles.d.ts +2 -0
  74. package/types/client/latestBroadcasts.d.ts +1 -1
  75. package/types/client/layers.d.ts +2 -0
  76. package/types/client/lib.d.ts +6 -22
  77. package/types/client/libHtml.d.ts +1 -1
  78. package/types/client/liveAlerts.d.ts +5 -0
  79. package/types/client/liveAlerts.types.d.ts +28 -0
  80. package/types/client/loadArticlesOrWhatsNew.d.ts +1 -0
  81. package/types/client/location.d.ts +5 -0
  82. package/types/client/log.d.ts +4 -1
  83. package/types/client/lruCache.d.ts +6 -0
  84. package/types/client/map.d.ts +17 -6
  85. package/types/client/mobile.d.ts +31 -22
  86. package/types/client/models.d.ts +7 -5
  87. package/types/client/notifications.d.ts +29 -67
  88. package/types/client/overlays.d.ts +4 -1
  89. package/types/client/params.d.ts +0 -1
  90. package/types/client/permanentPromos.d.ts +1 -1
  91. package/types/client/persistentStorage.d.ts +8 -0
  92. package/types/client/picker.d.ts +1 -1
  93. package/types/client/plugins.d.ts +4 -0
  94. package/types/client/pois.d.ts +1 -2
  95. package/types/client/promo.d.ts +6 -16
  96. package/types/client/pushNotifications.d.ts +1 -1
  97. package/types/client/queryString.d.ts +1 -1
  98. package/types/client/renderUtils.d.ts +1 -1
  99. package/types/client/renderers.d.ts +7 -3
  100. package/types/client/rootScope.d.ts +23 -24
  101. package/types/client/router.d.ts +9 -29
  102. package/types/client/seoParser.d.ts +0 -14
  103. package/types/client/serviceWorkerCtrl.d.ts +8 -0
  104. package/types/client/showableErrorsService.d.ts +6 -10
  105. package/types/client/startupWeather.d.ts +13 -9
  106. package/types/client/store.d.ts +2 -2
  107. package/types/client/storeLastPosition.d.ts +4 -0
  108. package/types/client/subscription.d.ts +1 -0
  109. package/types/client/swDownloader.d.ts +7 -7
  110. package/types/client/swProxy.d.ts +1 -1
  111. package/types/client/swUtils.d.ts +3 -3
  112. package/types/client/trans.d.ts +26 -37
  113. package/types/client/user.d.ts +7 -13
  114. package/types/client/userAlerts.d.ts +68 -0
  115. package/types/client/userConsent.d.ts +6 -0
  116. package/types/client/userFavs.d.ts +46 -122
  117. package/types/client/utils.d.ts +67 -9
  118. package/types/iconfont.d.ts +8 -0
  119. package/types/interfaces.d.ts +226 -284
  120. package/types/lang-files.d.ts +1334 -142
  121. package/types/offline.d.ts +100 -0
  122. package/types/types.d.ts +108 -34
  123. package/types/client/Bar.d.ts +0 -114
  124. package/types/client/BindedBar.d.ts +0 -51
  125. package/types/client/BindedCheckbox.d.ts +0 -30
  126. package/types/client/BindedSwitch.d.ts +0 -35
  127. package/types/client/BottomTagPlugin.d.ts +0 -8
  128. package/types/client/DraggableDiv.d.ts +0 -21
  129. package/types/client/GhostBox.d.ts +0 -17
  130. package/types/client/Legend.d.ts +0 -6
  131. package/types/client/LongTap.d.ts +0 -21
  132. package/types/client/MobileCalendar.d.ts +0 -51
  133. package/types/client/OfflineMessagesClasses.d.ts +0 -30
  134. package/types/client/ProductSwitch.d.ts +0 -14
  135. package/types/client/Scrollable.d.ts +0 -14
  136. package/types/client/Switch.d.ts +0 -24
  137. package/types/client/TimestampBar.d.ts +0 -8
  138. package/types/client/d.ts.files/Product.d.ts +0 -37
  139. package/types/client/d.ts.files/errorLogger.d.ts +0 -35
  140. package/types/client/d.ts.files/trans.d.ts +0 -55
  141. package/types/client/favs.d.ts +0 -83
  142. package/types/client/offlineController.d.ts +0 -20
  143. /package/types/client/d.ts.files/{Webcams.d.ts → webcams.d.ts} +0 -0
@@ -1,5 +1,5 @@
1
1
  import { NumberedMetric, PrecipMetric, PtypeMetric, UVIndexMetric } from '@windy/MetricClasses';
2
- import { DataQuality, FileSuffix } from '@windy/Product.d';
2
+ import { DataQuality, FileSuffix } from '@windy/Product';
3
3
  import { WeatherParameters } from '@windy/interfaces.d';
4
4
  import { Levels, Overlays } from '@windy/rootScope.d';
5
5
  import { NumValue, Path } from '@windy/types.d';
@@ -71,6 +71,7 @@ export interface LayerMetricType {
71
71
  dustsm: NumberedMetric;
72
72
  radar: NumberedMetric;
73
73
  satellite: NumberedMetric;
74
+ radarPlus: NumberedMetric;
74
75
  gtco3: NumberedMetric;
75
76
  pm2p5: NumberedMetric;
76
77
  no2: NumberedMetric;
@@ -91,6 +92,7 @@ export interface LayerMetricType {
91
92
  dfm10h: NumberedMetric;
92
93
  turbulence: NumberedMetric;
93
94
  icing: NumberedMetric;
95
+ topoMap: undefined;
94
96
  }
95
97
 
96
98
  /**
@@ -181,4 +183,9 @@ interface FullRenderParameters extends WeatherParameters, RenderParams {
181
183
  refTime: string;
182
184
  fullPath: string;
183
185
  path: Path;
186
+
187
+ /**
188
+ * Optional accumulation range in hours
189
+ */
190
+ acRangeInHours?: number;
184
191
  }
@@ -101,6 +101,7 @@ export interface MetricTypes {
101
101
  dust: NumberedMetric;
102
102
  cosc: NumberedMetric;
103
103
  radar: NumberedMetric;
104
+ radsat: SatelliteMetric;
104
105
  satellite: SatelliteMetric;
105
106
  ptype: PtypeMetric;
106
107
  gh: NumberedMetric;
@@ -1,16 +1,25 @@
1
1
  import { TransformFunction } from '@windy/Layer.d';
2
2
  import { TilePoint } from '@windy/interfaces.d';
3
3
 
4
+ import type { BottomSveltePlugins, Plugins, SveltePlugins } from '@windy/plugins.d';
5
+
6
+ export type AllowedRenderPlugins = Pick<
7
+ Plugins,
8
+ 'radar' | 'satellite' | 'radar-plus' | 'cap-alerts' | 'isolines' | 'gl-particles' | 'particles'
9
+ >;
10
+
4
11
  export type Renderers =
5
12
  | 'tileLayer'
6
13
  | 'radar'
7
14
  | 'satellite'
15
+ | 'radarPlus'
8
16
  | 'capAlerts'
9
17
  | 'isolines'
10
18
  | 'particles'
11
19
  | 'accumulations'
12
20
  | 'daySwitcher'
13
- | 'noUserControl';
21
+ | 'noUserControl'
22
+ | 'topoMap';
14
23
 
15
24
  export interface TileParams extends TilePoint {
16
25
  url: string;
@@ -21,3 +30,15 @@ export interface TileParams extends TilePoint {
21
30
  transformG: TransformFunction | null;
22
31
  transformB: TransformFunction | null;
23
32
  }
33
+
34
+ export type AllowedUserControls =
35
+ | keyof BottomSveltePlugins
36
+ | keyof SveltePlugins
37
+ | 'map-selector'
38
+ | 'none';
39
+
40
+ export interface RendererInitParams {
41
+ ident: Renderers;
42
+ dependency?: keyof AllowedRenderPlugins;
43
+ userControl?: AllowedUserControls;
44
+ }
@@ -0,0 +1,119 @@
1
+ import {
2
+ AlertConditionType,
3
+ CloudCoverage,
4
+ AlertStatus,
5
+ Direction,
6
+ Weekday,
7
+ } from '@windy/userAlerts';
8
+ import type { Timestamp, UserInterest } from '@windy/types';
9
+ import type { Products } from '@windy/rootScope.d';
10
+ import type { LatLon } from '@windy/interfaces';
11
+
12
+ export interface AlertRequest {
13
+ conditions: AlertCondition[];
14
+ description: string;
15
+ favToDeleteId?: string;
16
+ lat: number;
17
+ locationName: string;
18
+ lon: number;
19
+ model: GlobalProductWithWaves | null;
20
+ priority?: number;
21
+ suspended: boolean;
22
+ userInterest: UserInterest;
23
+ hasCustomDescription?: boolean;
24
+ }
25
+
26
+ export type GlobalProductWithWaves = Extends<Products, 'ecmwf' | 'gfs' | 'icon' | 'mblue'>;
27
+
28
+ export interface AlertCheckResponse {
29
+ /**
30
+ * Array of timestamps when the trigger is triggered
31
+ */
32
+ timestamps: Timestamp[];
33
+ }
34
+
35
+ export interface NumberRange {
36
+ from: number;
37
+ to: number;
38
+ }
39
+
40
+ export interface AlertConditionBase {
41
+ type: AlertConditionType;
42
+ }
43
+
44
+ export interface CloudinessAlertCondition extends AlertConditionBase {
45
+ type: AlertConditionType.Cloudiness;
46
+ cloudCoverage: CloudCoverage[];
47
+ }
48
+
49
+ export interface FreshSnowAlertCondition extends AlertConditionBase {
50
+ rangeCentimeters: NumberRange;
51
+ type: AlertConditionType.FreshSnow;
52
+ }
53
+
54
+ export interface RainfallAlertCondition extends AlertConditionBase {
55
+ hours: number;
56
+ rangeMilliliters: NumberRange;
57
+ type: AlertConditionType.Rainfall;
58
+ }
59
+
60
+ export interface SwellAlertCondition extends AlertConditionBase {
61
+ directions: Direction[];
62
+ rangeSwellMeters: NumberRange;
63
+ type: AlertConditionType.Swell;
64
+ }
65
+
66
+ export interface TemperatureAlertCondition extends AlertConditionBase {
67
+ rangeKelvin: NumberRange;
68
+ type: AlertConditionType.Temperature;
69
+ }
70
+
71
+ export interface TimeAlertCondition extends AlertConditionBase {
72
+ /** Days of the week in which the conditions must be met */
73
+ days: Weekday[];
74
+ /** Hours of the day in which the conditions must be met */
75
+ hours?: NumberRange[];
76
+ /** Minimum duration of meeting the conditions to send the notification */
77
+ minDurationHours: number;
78
+ /** Range of days which will be checked for conditions */
79
+ rangeDays?: NumberRange;
80
+ type: AlertConditionType.Time;
81
+ }
82
+
83
+ export interface WindAlertCondition extends AlertConditionBase {
84
+ directions: Direction[];
85
+ rangeWindMetersPerSecond: NumberRange;
86
+ type: AlertConditionType.Wind;
87
+ }
88
+
89
+ export type AlertCondition =
90
+ | CloudinessAlertCondition
91
+ | FreshSnowAlertCondition
92
+ | RainfallAlertCondition
93
+ | SwellAlertCondition
94
+ | TemperatureAlertCondition
95
+ | TimeAlertCondition
96
+ | WindAlertCondition;
97
+
98
+ /** MongoDb id of the alert */
99
+ export type AlertId = string;
100
+
101
+ export interface AlertResponse extends AlertRequest {
102
+ created: Timestamp;
103
+ updated: Timestamp;
104
+ id: AlertId;
105
+ }
106
+
107
+ /** Group with multiple alerts in it */
108
+ export interface AlertGroupObject extends LatLon {
109
+ key: string;
110
+ locationName: string;
111
+ priority: number;
112
+ alerts: AlertResponse[];
113
+ }
114
+
115
+ /** Enhanced Alert */
116
+ export interface EnhancedAlert extends AlertResponse {
117
+ status: AlertStatus;
118
+ timestamps: Timestamp[];
119
+ }
@@ -8,20 +8,23 @@
8
8
  TODO: Minimize amount of these events and reduce their usage
9
9
 
10
10
  */
11
- import { DetailLocChangeParams } from '@plugins/detail/detail.d';
12
11
  import { ParsLocation as GlobeParsLocation } from '@plugins/globe/main/receiver.d';
13
12
  import { Params as GlobeParams, Poi as GlobePoi } from '@plugins/globe/types.d';
14
13
  import { ExtendedDataAndParams } from '@plugins/isolines/IsolinesCanvas2D.d';
15
- import { ClientMessage, DownloadProgress, ServiceWorkerMessage } from '@plugins/offline/offline';
16
14
  import { Evented } from '@windy/Evented';
17
15
  import { MetricIdent, MetricItem } from '@windy/Metric.d';
18
16
  import { PluginIdent } from '@windy/Plugin';
19
17
  import { NotificationPreferences } from '@windy/dataSpecifications.d';
20
- import { Fav, GeolocationInfo, LatLon, WeatherParameters } from '@windy/interfaces.d';
18
+ import { GeolocationInfo, LatLon, WeatherParameters } from '@windy/interfaces.d';
21
19
  import { PluginSource, PluginsOpenParams, PluginsQsParams } from '@windy/plugin-params.d';
22
20
  import { Plugins } from '@windy/plugins.d';
23
21
  import { Pois } from '@windy/rootScope.d';
24
22
  import type { ExternalPluginIdent } from '@windy/types';
23
+ import type { CenterOptions } from '@windy/map';
24
+ import type { AnimationOptions, FitBoundsOptions, LngLatBoundsLike } from '@windycom/maplibre-gl';
25
+ import type { ViewportBounds } from '@plugins/_shared/maplibre/utils/maplibreUtils';
26
+ import type { RadarPlusLayer } from '@plugins/radar-plus/types';
27
+ import type { ParsedStartupValues } from './router';
25
28
 
26
29
  type BcastTypesNonGeneric = {
27
30
  /**
@@ -74,7 +77,7 @@ export interface BasicBcastTypes<T extends keyof Plugins> {
74
77
  /** Plugin was successfully loaded and closed */
75
78
  pluginClosed: [PluginIdent | string];
76
79
 
77
- /** Plugin was succesfully closed */
80
+ /** Plugin was successfully closed */
78
81
  pluginOpened: [PluginIdent | string];
79
82
 
80
83
  /**
@@ -101,38 +104,70 @@ export interface BasicBcastTypes<T extends keyof Plugins> {
101
104
  */
102
105
  metricChanged: [MetricIdent | undefined, MetricItem | undefined];
103
106
 
104
- /** Indicates that user added, remover or rename his fav @ignore */
107
+ /** Indicates that user added, remover or rename his fav */
105
108
  favChanged: [];
106
109
 
110
+ /** Indicates that user added, remover or rename his alert */
111
+ alertChanged: [];
112
+
107
113
  /**
108
- * Indicates, that router has parsed URL and launched plugin
109
- * that was requested in URL
114
+ * Indicates, that router has parsed URL
110
115
  */
111
- routerParsed: [PluginIdent | ExternalPluginIdent | void];
116
+ routerParsed: [PluginIdent | ExternalPluginIdent | void, ParsedStartupValues | undefined];
117
+
118
+ /**
119
+ * Indicates that mobile ui of plugin using BottomSlide was half opened
120
+ */
121
+ pluginHalfOpened: [PluginIdent, boolean];
122
+
123
+ /**
124
+ * Request to half open plugin, used in BottomSlide
125
+ */
126
+ rqstHalfOpen: [ident: PluginIdent, value: boolean | undefined, emit: boolean | undefined];
112
127
 
113
128
  // prettier-ignore
114
129
  /** @ignore */ globeOpened: [];
115
130
  /** @ignore */ globeClose: [];
116
131
  /** @ignore */ globeFailed: [];
117
- /** @ignore */ 'globe-detail': [DetailLocChangeParams | (LatLon & PluginSource)];
132
+
133
+ /** @ignore */ 'globe-detail': [LatLon & PluginSource];
118
134
  /** @ignore */ 'globe-isolines': [ExtendedDataAndParams | null];
119
135
  /** @ignore */ 'globe-poi': [GlobeParsLocation & { type?: string; id?: string }];
120
136
  /** @ignore */ 'globe-zoomIn': [[number, number] | null] | [];
121
137
  /** @ignore */ 'globe-zoomOut': [[number, number] | null] | [];
122
138
  /** @ignore */ 'globe-paramsChanged': [GlobeParams];
123
- /** @ignore */ 'maps-zoomIn': [number | undefined, L.ZoomOptions | undefined];
124
- /** @ignore */ 'maps-zoomOut': [number | undefined, L.ZoomOptions | undefined];
125
- /** @ignore */ 'maps-paramsChanged': [WeatherParameters, keyof WeatherParameters | undefined];
139
+
140
+ /** @ignore */ 'leaflet-zoomIn': [number | undefined, L.ZoomOptions | undefined];
141
+ /** @ignore */ 'leaflet-zoomOut': [number | undefined, L.ZoomOptions | undefined];
142
+ /** @ignore */ 'leaflet-paramsChanged': [
143
+ WeatherParameters,
144
+ keyof WeatherParameters | undefined,
145
+ ];
146
+
147
+ /** @ignore */ 'maplibre-zoomIn': [AnimationOptions | undefined, unknown | undefined];
148
+ /** @ignore */ 'maplibre-zoomOut': [AnimationOptions | undefined, unknown | undefined];
149
+ /** @ignore */ 'maplibre-setZoom': [number, unknown | undefined];
150
+ /** @ignore */ 'maplibre-centerMap': [CenterOptions];
151
+ /** @ignore */ 'maplibre-triggerDragging': [boolean];
152
+ /** @ignore */ 'maplibre-fitBounds': [LngLatBoundsLike, FitBoundsOptions | undefined];
153
+ /** @ignore */ 'maplibre-panToOffset': [number, number, number];
154
+ /** @ignore */ 'maplibre-ensurePointVisibleY': [number, number, number];
155
+ /** @ignore */ 'maplibre-moveEnd': [];
156
+ /** @ignore */ 'maplibre-zoomChange': [number];
157
+ /** @ignore */ 'maplibre-boundsChange': [ViewportBounds];
158
+ /** @ignore */ 'maplibre-paramsChanged': [
159
+ WeatherParameters,
160
+ keyof WeatherParameters | undefined,
161
+ ];
162
+ /** @ignore */ 'radarPlus-open-layer': [RadarPlusLayer, boolean | undefined]; // Layer to open, whether to open layer for color editing
126
163
  /** @ignore */ detailClose: [];
127
- /** @ignore */ detailRendered: []; // used only in embed2
164
+ /** @ignore */ detailRendered: []; // used only in embed, imaker indicates that detail is ready
165
+ /** @ignore */ stationRendered: []; // used only in embed, imaker indicates that detail is ready
128
166
  /** @ignore */ reloadFavs: [];
129
167
  /** @ignore */ notifPrefChanged: [NotificationPreferences | undefined];
130
168
  /** @ignore */ satBackupReload: [];
131
169
  /** @ignore */ promptSavePassword: [];
132
- /** @ignore */ screenshotReady: [];
133
- /** @ignore */ screenshotError: [Error];
134
170
  /** @ignore */ onResume: [];
135
- /** @ignore */ cloudSync: ['error', { data: Fav | string; action: string; type: 'fav' }];
136
171
  /** @ignore */ back2home: [];
137
172
  /** @ignore */ reloadMobileApp: [];
138
173
  /** @ignore */ newLocation: [GeolocationInfo];
@@ -145,8 +180,6 @@ export interface BasicBcastTypes<T extends keyof Plugins> {
145
180
  /** @ignore */ openCapAlerts: [PluginsOpenParams['picker']];
146
181
  /** @ignore */ openapp: [];
147
182
  /** @ignore */ openSearch: [];
148
- /** @ignore */ offlineNativeMessage: [ClientMessage];
149
- /** @ignore */ offlineClientMessage: [ServiceWorkerMessage | { data: DownloadProgress }];
150
183
  }
151
184
 
152
185
  interface BcastTypes<T extends keyof Plugins> extends BcastTypesNonGeneric, BasicBcastTypes<T> {}