@elliemae/ds-form-date-time-picker 3.70.0-next.39 → 3.70.0-next.40

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 (29) hide show
  1. package/package.json +10 -10
  2. package/dist/types/tests/DSControlledDateTimePicker.PUI-16014.test.d.ts +0 -1
  3. package/dist/types/tests/DSControlledDateTimePicker.PUI-17323.test.d.ts +0 -1
  4. package/dist/types/tests/DSControlledDateTimePicker.data-testid.test.d.ts +0 -1
  5. package/dist/types/tests/DSControlledDateTimePicker.exports.test.d.ts +0 -1
  6. package/dist/types/tests/DSControlledDateTimePicker.segment-aria-labels.test.d.ts +0 -1
  7. package/dist/types/tests/custom-props/customProps.d.ts +0 -397
  8. package/dist/types/tests/custom-props/date-time-picker.date-custom-props.test.d.ts +0 -1
  9. package/dist/types/tests/custom-props/date-time-picker.date-time-custom-props.test.d.ts +0 -1
  10. package/dist/types/tests/custom-props/date-time-picker.time-custom-props.test.d.ts +0 -1
  11. package/dist/types/tests/date-time-picker.a11y.test.d.ts +0 -1
  12. package/dist/types/tests/date-time-picker.applyAriaDisabled.test.d.ts +0 -1
  13. package/dist/types/tests/date-time-picker.auto-advance.test.d.ts +0 -1
  14. package/dist/types/tests/date-time-picker.clear-button.test.d.ts +0 -1
  15. package/dist/types/tests/date-time-picker.keyboard-focus.test.d.ts +0 -1
  16. package/dist/types/tests/date-time-picker.keyboard.data-entry-typing.test.d.ts +0 -1
  17. package/dist/types/tests/date-time-picker.keyboard.fill-with-now.test.d.ts +0 -1
  18. package/dist/types/tests/date-time-picker.keyboard.regressive-backspace.test.d.ts +0 -1
  19. package/dist/types/tests/date-time-picker.keyboard.shortcut-clear.test.d.ts +0 -1
  20. package/dist/types/tests/date-time-picker.manual-delete-values.test.d.ts +0 -1
  21. package/dist/types/tests/date-time-picker.onChange-meta-info.test.d.ts +0 -1
  22. package/dist/types/tests/date-time-picker.readOnly.test.d.ts +0 -1
  23. package/dist/types/tests/date-time-picker.types-button.test.d.ts +0 -1
  24. package/dist/types/tests/date-time-picker.types-dom.test.d.ts +0 -1
  25. package/dist/types/tests/playwright-tests/full/ControlledTestRenderer.d.ts +0 -2
  26. package/dist/types/tests/playwright-tests/full/DSControlledDateTimePicker.full.navigation.test.playwright.d.ts +0 -1
  27. package/dist/types/typescript-testing/slot-arguments-engine.d.ts +0 -95
  28. package/dist/types/typescript-testing/slot-props.d.ts +0 -1
  29. package/dist/types/typescript-testing/typescript-date-time-picker-valid.d.ts +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elliemae/ds-form-date-time-picker",
3
- "version": "3.70.0-next.39",
3
+ "version": "3.70.0-next.40",
4
4
  "license": "MIT",
5
5
  "description": "ICE MT - Dimsum - Controlled Form Date Time Picker",
6
6
  "files": [
@@ -37,13 +37,13 @@
37
37
  },
38
38
  "dependencies": {
39
39
  "uid": "^2.0.2",
40
- "@elliemae/ds-button-v2": "3.70.0-next.39",
41
- "@elliemae/ds-floating-context": "3.70.0-next.39",
42
- "@elliemae/ds-props-helpers": "3.70.0-next.39",
43
- "@elliemae/ds-grid": "3.70.0-next.39",
44
- "@elliemae/ds-system": "3.70.0-next.39",
45
- "@elliemae/ds-icons": "3.70.0-next.39",
46
- "@elliemae/ds-typescript-helpers": "3.70.0-next.39"
40
+ "@elliemae/ds-floating-context": "3.70.0-next.40",
41
+ "@elliemae/ds-button-v2": "3.70.0-next.40",
42
+ "@elliemae/ds-icons": "3.70.0-next.40",
43
+ "@elliemae/ds-system": "3.70.0-next.40",
44
+ "@elliemae/ds-grid": "3.70.0-next.40",
45
+ "@elliemae/ds-props-helpers": "3.70.0-next.40",
46
+ "@elliemae/ds-typescript-helpers": "3.70.0-next.40"
47
47
  },
48
48
  "devDependencies": {
49
49
  "@elliemae/pui-theme": "~2.13.0",
@@ -51,8 +51,8 @@
51
51
  "jest": "^30.0.0",
52
52
  "styled-components": "~5.3.9",
53
53
  "styled-system": "^5.1.5",
54
- "@elliemae/ds-test-utils": "3.70.0-next.39",
55
- "@elliemae/ds-monorepo-devops": "3.70.0-next.39"
54
+ "@elliemae/ds-monorepo-devops": "3.70.0-next.40",
55
+ "@elliemae/ds-test-utils": "3.70.0-next.40"
56
56
  },
57
57
  "peerDependencies": {
58
58
  "@elliemae/pui-theme": "~2.13.0",
@@ -1,397 +0,0 @@
1
- export const customPropsForFullDateTimePickerWhenClosed: {
2
- "ds-controlled-date-time-picker-calendar-timewheel-trigger-icon": {
3
- 'data-foo': string;
4
- 'aria-label': string;
5
- ignoredProp: string;
6
- };
7
- "ds-controlled-date-time-picker-hour-input": {
8
- 'data-foo': string;
9
- 'aria-label': string;
10
- ignoredProp: string;
11
- };
12
- "ds-controlled-date-time-picker-minute-input": {
13
- 'data-foo': string;
14
- 'aria-label': string;
15
- ignoredProp: string;
16
- };
17
- "ds-controlled-date-time-picker-meridiem-input": {
18
- 'data-foo': string;
19
- 'aria-label': string;
20
- ignoredProp: string;
21
- };
22
- "ds-controlled-date-time-picker-month-input": {
23
- 'data-foo': string;
24
- 'aria-label': string;
25
- ignoredProp: string;
26
- };
27
- "ds-controlled-date-time-picker-day-input": {
28
- 'data-foo': string;
29
- 'aria-label': string;
30
- ignoredProp: string;
31
- };
32
- "ds-controlled-date-time-picker-year-input": {
33
- 'data-foo': string;
34
- 'aria-label': string;
35
- ignoredProp: string;
36
- };
37
- "ds-controlled-date-time-picker-container": {
38
- 'data-foo': string;
39
- 'aria-label': string;
40
- ignoredProp: string;
41
- };
42
- };
43
- export const customPropsForFullDateTimePickerWhenOpen: {
44
- "ds-controlled-date-time-picker-timewheel-header-label": {
45
- 'data-foo': string;
46
- 'aria-label': string;
47
- ignoredProp: string;
48
- };
49
- "ds-controlled-date-time-picker-timewheel-prev-hour": {
50
- 'data-foo': string;
51
- 'aria-label': string;
52
- ignoredProp: string;
53
- };
54
- "ds-controlled-date-time-picker-timewheel-hour": {
55
- 'data-foo': string;
56
- 'aria-label': string;
57
- ignoredProp: string;
58
- };
59
- "ds-controlled-date-time-picker-timewheel-current-hour": {
60
- 'data-foo': string;
61
- 'aria-label': string;
62
- ignoredProp: string;
63
- };
64
- "ds-controlled-date-time-picker-timewheel-next-hour": {
65
- 'data-foo': string;
66
- 'aria-label': string;
67
- ignoredProp: string;
68
- };
69
- "ds-controlled-date-time-picker-timewheel-prev-minute": {
70
- 'data-foo': string;
71
- 'aria-label': string;
72
- ignoredProp: string;
73
- };
74
- "ds-controlled-date-time-picker-timewheel-minute": {
75
- 'data-foo': string;
76
- 'aria-label': string;
77
- ignoredProp: string;
78
- };
79
- "ds-controlled-date-time-picker-timewheel-current-minute": {
80
- 'data-foo': string;
81
- 'aria-label': string;
82
- ignoredProp: string;
83
- };
84
- "ds-controlled-date-time-picker-timewheel-next-minute": {
85
- 'data-foo': string;
86
- 'aria-label': string;
87
- ignoredProp: string;
88
- };
89
- "ds-controlled-date-time-picker-timewheel-prev-meridiem": {
90
- 'data-foo': string;
91
- 'aria-label': string;
92
- ignoredProp: string;
93
- };
94
- "ds-controlled-date-time-picker-timewheel-meridiem-visual-element": {
95
- 'data-foo': string;
96
- 'aria-label': string;
97
- ignoredProp: string;
98
- };
99
- "ds-controlled-date-time-picker-timewheel-current-meridiem-visual-element": {
100
- 'data-foo': string;
101
- 'aria-label': string;
102
- ignoredProp: string;
103
- };
104
- "ds-controlled-date-time-picker-timewheel-next-meridiem": {
105
- 'data-foo': string;
106
- 'aria-label': string;
107
- ignoredProp: string;
108
- };
109
- "ds-controlled-date-time-picker-calendar-header-label": {
110
- 'data-foo': string;
111
- 'aria-label': string;
112
- ignoredProp: string;
113
- };
114
- "ds-controlled-date-time-picker-calendar-prev-year": {
115
- 'data-foo': string;
116
- 'aria-label': string;
117
- ignoredProp: string;
118
- };
119
- "ds-controlled-date-time-picker-calendar-prev-month": {
120
- 'data-foo': string;
121
- 'aria-label': string;
122
- ignoredProp: string;
123
- };
124
- "ds-controlled-date-time-picker-calendar-day": {
125
- 'data-foo': string;
126
- 'aria-label': string;
127
- ignoredProp: string;
128
- };
129
- "ds-controlled-date-time-picker-calendar-next-month": {
130
- 'data-foo': string;
131
- 'aria-label': string;
132
- ignoredProp: string;
133
- };
134
- "ds-controlled-date-time-picker-calendar-next-year": {
135
- 'data-foo': string;
136
- 'aria-label': string;
137
- ignoredProp: string;
138
- };
139
- "ds-controlled-date-time-picker-calendar-timewheel-context-content-wrapper": {
140
- 'data-foo': string;
141
- 'aria-label': string;
142
- ignoredProp: string;
143
- };
144
- "ds-controlled-date-time-picker-calendar-timewheel-trigger-icon": {
145
- 'data-foo': string;
146
- 'aria-label': string;
147
- ignoredProp: string;
148
- };
149
- "ds-controlled-date-time-picker-hour-input": {
150
- 'data-foo': string;
151
- 'aria-label': string;
152
- ignoredProp: string;
153
- };
154
- "ds-controlled-date-time-picker-minute-input": {
155
- 'data-foo': string;
156
- 'aria-label': string;
157
- ignoredProp: string;
158
- };
159
- "ds-controlled-date-time-picker-meridiem-input": {
160
- 'data-foo': string;
161
- 'aria-label': string;
162
- ignoredProp: string;
163
- };
164
- "ds-controlled-date-time-picker-month-input": {
165
- 'data-foo': string;
166
- 'aria-label': string;
167
- ignoredProp: string;
168
- };
169
- "ds-controlled-date-time-picker-day-input": {
170
- 'data-foo': string;
171
- 'aria-label': string;
172
- ignoredProp: string;
173
- };
174
- "ds-controlled-date-time-picker-year-input": {
175
- 'data-foo': string;
176
- 'aria-label': string;
177
- ignoredProp: string;
178
- };
179
- "ds-controlled-date-time-picker-container": {
180
- 'data-foo': string;
181
- 'aria-label': string;
182
- ignoredProp: string;
183
- };
184
- };
185
- export const customPropsForFullDatePickerWhenClosed: {
186
- "ds-controlled-date-time-picker-calendar-trigger-icon": {
187
- 'data-foo': string;
188
- 'aria-label': string;
189
- ignoredProp: string;
190
- };
191
- "ds-controlled-date-time-picker-month-input": {
192
- 'data-foo': string;
193
- 'aria-label': string;
194
- ignoredProp: string;
195
- };
196
- "ds-controlled-date-time-picker-day-input": {
197
- 'data-foo': string;
198
- 'aria-label': string;
199
- ignoredProp: string;
200
- };
201
- "ds-controlled-date-time-picker-year-input": {
202
- 'data-foo': string;
203
- 'aria-label': string;
204
- ignoredProp: string;
205
- };
206
- "ds-controlled-date-time-picker-container": {
207
- 'data-foo': string;
208
- 'aria-label': string;
209
- ignoredProp: string;
210
- };
211
- };
212
- export const customPropsForFullDatePickerWhenOpen: {
213
- "ds-controlled-date-time-picker-calendar-header-label": {
214
- 'data-foo': string;
215
- 'aria-label': string;
216
- ignoredProp: string;
217
- };
218
- "ds-controlled-date-time-picker-calendar-prev-year": {
219
- 'data-foo': string;
220
- 'aria-label': string;
221
- ignoredProp: string;
222
- };
223
- "ds-controlled-date-time-picker-calendar-prev-month": {
224
- 'data-foo': string;
225
- 'aria-label': string;
226
- ignoredProp: string;
227
- };
228
- "ds-controlled-date-time-picker-calendar-day": {
229
- 'data-foo': string;
230
- 'aria-label': string;
231
- ignoredProp: string;
232
- };
233
- "ds-controlled-date-time-picker-calendar-next-month": {
234
- 'data-foo': string;
235
- 'aria-label': string;
236
- ignoredProp: string;
237
- };
238
- "ds-controlled-date-time-picker-calendar-next-year": {
239
- 'data-foo': string;
240
- 'aria-label': string;
241
- ignoredProp: string;
242
- };
243
- "ds-controlled-date-time-picker-calendar-context-content-wrapper": {
244
- 'data-foo': string;
245
- 'aria-label': string;
246
- ignoredProp: string;
247
- };
248
- "ds-controlled-date-time-picker-calendar-trigger-icon": {
249
- 'data-foo': string;
250
- 'aria-label': string;
251
- ignoredProp: string;
252
- };
253
- "ds-controlled-date-time-picker-month-input": {
254
- 'data-foo': string;
255
- 'aria-label': string;
256
- ignoredProp: string;
257
- };
258
- "ds-controlled-date-time-picker-day-input": {
259
- 'data-foo': string;
260
- 'aria-label': string;
261
- ignoredProp: string;
262
- };
263
- "ds-controlled-date-time-picker-year-input": {
264
- 'data-foo': string;
265
- 'aria-label': string;
266
- ignoredProp: string;
267
- };
268
- "ds-controlled-date-time-picker-container": {
269
- 'data-foo': string;
270
- 'aria-label': string;
271
- ignoredProp: string;
272
- };
273
- };
274
- export const customPropsForFullTimePickerWhenClosed: {
275
- "ds-controlled-date-time-picker-timewheel-trigger-icon": {
276
- 'data-foo': string;
277
- 'aria-label': string;
278
- ignoredProp: string;
279
- };
280
- "ds-controlled-date-time-picker-hour-input": {
281
- 'data-foo': string;
282
- 'aria-label': string;
283
- ignoredProp: string;
284
- };
285
- "ds-controlled-date-time-picker-minute-input": {
286
- 'data-foo': string;
287
- 'aria-label': string;
288
- ignoredProp: string;
289
- };
290
- "ds-controlled-date-time-picker-meridiem-input": {
291
- 'data-foo': string;
292
- 'aria-label': string;
293
- ignoredProp: string;
294
- };
295
- "ds-controlled-date-time-picker-container": {
296
- 'data-foo': string;
297
- 'aria-label': string;
298
- ignoredProp: string;
299
- };
300
- };
301
- export const customPropsForFullTimePickerWhenOpen: {
302
- "ds-controlled-date-time-picker-timewheel-header-label": {
303
- 'data-foo': string;
304
- 'aria-label': string;
305
- ignoredProp: string;
306
- };
307
- "ds-controlled-date-time-picker-timewheel-prev-hour": {
308
- 'data-foo': string;
309
- 'aria-label': string;
310
- ignoredProp: string;
311
- };
312
- "ds-controlled-date-time-picker-timewheel-hour": {
313
- 'data-foo': string;
314
- 'aria-label': string;
315
- ignoredProp: string;
316
- };
317
- "ds-controlled-date-time-picker-timewheel-current-hour": {
318
- 'data-foo': string;
319
- 'aria-label': string;
320
- ignoredProp: string;
321
- };
322
- "ds-controlled-date-time-picker-timewheel-next-hour": {
323
- 'data-foo': string;
324
- 'aria-label': string;
325
- ignoredProp: string;
326
- };
327
- "ds-controlled-date-time-picker-timewheel-prev-minute": {
328
- 'data-foo': string;
329
- 'aria-label': string;
330
- ignoredProp: string;
331
- };
332
- "ds-controlled-date-time-picker-timewheel-minute": {
333
- 'data-foo': string;
334
- 'aria-label': string;
335
- ignoredProp: string;
336
- };
337
- "ds-controlled-date-time-picker-timewheel-current-minute": {
338
- 'data-foo': string;
339
- 'aria-label': string;
340
- ignoredProp: string;
341
- };
342
- "ds-controlled-date-time-picker-timewheel-next-minute": {
343
- 'data-foo': string;
344
- 'aria-label': string;
345
- ignoredProp: string;
346
- };
347
- "ds-controlled-date-time-picker-timewheel-prev-meridiem": {
348
- 'data-foo': string;
349
- 'aria-label': string;
350
- ignoredProp: string;
351
- };
352
- "ds-controlled-date-time-picker-timewheel-meridiem-visual-element": {
353
- 'data-foo': string;
354
- 'aria-label': string;
355
- ignoredProp: string;
356
- };
357
- "ds-controlled-date-time-picker-timewheel-current-meridiem-visual-element": {
358
- 'data-foo': string;
359
- 'aria-label': string;
360
- ignoredProp: string;
361
- };
362
- "ds-controlled-date-time-picker-timewheel-next-meridiem": {
363
- 'data-foo': string;
364
- 'aria-label': string;
365
- ignoredProp: string;
366
- };
367
- "ds-controlled-date-time-picker-timewheel-context-content-wrapper": {
368
- 'data-foo': string;
369
- 'aria-label': string;
370
- ignoredProp: string;
371
- };
372
- "ds-controlled-date-time-picker-timewheel-trigger-icon": {
373
- 'data-foo': string;
374
- 'aria-label': string;
375
- ignoredProp: string;
376
- };
377
- "ds-controlled-date-time-picker-hour-input": {
378
- 'data-foo': string;
379
- 'aria-label': string;
380
- ignoredProp: string;
381
- };
382
- "ds-controlled-date-time-picker-minute-input": {
383
- 'data-foo': string;
384
- 'aria-label': string;
385
- ignoredProp: string;
386
- };
387
- "ds-controlled-date-time-picker-meridiem-input": {
388
- 'data-foo': string;
389
- 'aria-label': string;
390
- ignoredProp: string;
391
- };
392
- "ds-controlled-date-time-picker-container": {
393
- 'data-foo': string;
394
- 'aria-label': string;
395
- ignoredProp: string;
396
- };
397
- };
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1,2 +0,0 @@
1
- export const ControlledTestRenderer: React.FunctionComponent<React.JSX.IntrinsicAttributes>;
2
- import React from 'react';
@@ -1,95 +0,0 @@
1
- /**
2
- * ENGINE CONTRACT TESTS — ControlledDateTimePickerSlotEngine
3
- *
4
- * ─── What this file is about ──────────────────────────────────────────────────────────────────
5
- *
6
- * DSControlledDateTimePicker is a genuinely polymorphic component, not a configuration-based one.
7
- * The distinction matters and is worth stating explicitly because the two look superficially similar
8
- * (both have a `type` prop), but they require completely different type-system strategies.
9
- *
10
- * A *configuration-based* component renders a stable DOM shape and uses the `type` prop to adjust
11
- * behavior, appearance, or which features are active. The shape of valid props does not
12
- * fundamentally change across variants — it is a single interface, optionally narrowed. A date
13
- * input that gains a clearable button when `isClearable={true}` is configuration-based: the same
14
- * slots always exist, some are just conditionally rendered.
15
- *
16
- * A *polymorphic* component renders structurally different DOM trees depending on `type`. Each
17
- * tree has its own meaningful slot surface. Slots that belong to one DOM shape have no business
18
- * appearing on a variant that never renders them. DSControlledDateTimePicker has 12 type values
19
- * that produce 12 different DOM shapes — from a pure text-input row (`date-time-inputs`) to a
20
- * combined calendar + timewheel picker with a shared trigger icon and popper wrapper
21
- * (`date-time-picker`). A slot like `dsControlleddatetimepickerCalendarTriggerIcon` is only
22
- * meaningful when the calendar picker icon exists; accepting it as a valid prop on `time-inputs`
23
- * would be a silent no-op that a flat interface cannot detect.
24
- *
25
- * The engine in `slot-arguments-polymorphic-typescript.ts` is the pure TypeScript mechanism that
26
- * solves this. It encodes the DOM shape of each type variant as an incremental, non-overlapping
27
- * set of "slot buckets" — each bucket representing one DOM unit (calendar content, timewheel
28
- * footer, combined picker wrapper, etc.). A conditional type `ComposedBucketsFor<T>` selects and
29
- * intersects the exact buckets for each of the 12 `ControlTypes` values. The engine is
30
- * intentionally argument-type-agnostic: all slot values default to `() => object`. Component-
31
- * specific argument types (like `CalendarDaySlotArguments`) are injected externally via a
32
- * `TOverrides` generic, which `DSControlledDateTimePickerT` provides. This keeps the engine
33
- * reusable (with minor adaptation per component via copy paste and adapt)
34
- * and isolated from component concerns.
35
- *
36
- * ─── What this file is testing ────────────────────────────────────────────────────────────────
37
- *
38
- * This file tests the engine's *structural contract* — not the consumer-facing API.
39
- * Specifically, it asserts:
40
- *
41
- * 1. PRESENCE: A slot key that must exist for a given type variant is actually present in the
42
- * resolved type for that variant. If a bucket is accidentally omitted from a composition, a
43
- * check here will fail at compile time.
44
- *
45
- * 2. ABSENCE: A slot key that must NOT exist for a given type variant is not present. This is
46
- * the critical half of the contract — it catches the case where a bucket is added to the
47
- * wrong composition branch. Absence checks are harder to get right and easier to skip, which
48
- * is exactly why they live here as explicit compile-time assertions.
49
- *
50
- * 3. OVERRIDE MECHANISM: The `TOverrides` generic correctly replaces `() => object` with a
51
- * typed function signature for a specified slot key, while leaving all other slot keys in the
52
- * same type variant unaffected. This is the mechanism that allows `DSControlledDateTimePickerT`
53
- * to provide a typed `(args: CalendarDaySlotArguments) => object` for the calendar day slot
54
- * without polluting the engine with component-specific knowledge.
55
- *
56
- * 4. POLYMORPHIC WRAPPING: `PolymorphicSlotFunctionArguments<T, TOverrides>` correctly wraps
57
- * each slot as `object | fn` — accepting either a static object or a typed function — with
58
- * the typed function signature flowing through from `TOverrides`.
59
- *
60
- * The per-type *exhaustiveness* tests (all 12 control types, all slots required, using
61
- * `DSControlledDateTimePickerT.Slots<T>`) live in `slot-props.ts`. That file tests the consumer
62
- * API surface. This file tests the engine that generates it.
63
- *
64
- * ─── Value to consumers ───────────────────────────────────────────────────────────────────────
65
- *
66
- * When a consumer passes a slot prop while using an explicit `Slots<T>` type, TypeScript can tell
67
- * them at compile time that `dsControlleddatetimepickerCalendarTriggerIcon` is not a valid slot
68
- * for `type="time-inputs"` — because it genuinely does not exist in `Slots<'time-inputs'>`. This
69
- * is not a validation message or a runtime warning. It is a structural impossibility enforced by
70
- * the type system, which means no test needs to cover that case at runtime because the wrong
71
- * prop cannot be passed in the first place.
72
- *
73
- * Without this engine, the slot surface would be a flat union of all slots (the shape it had
74
- * before), and all 27 slots would be valid props for all 12 type variants regardless of whether
75
- * the target DOM actually renders them. A consumer using `Slots<'date-inputs'>` today gets exactly
76
- * 5 slots (root, 3 date inputs, clear button). Passing anything beyond those 5 is a compile error.
77
- *
78
- * ─── Why this specific pattern exists here and not in other components ─────────────────────────
79
- *
80
- * The engine pattern is a deliberate exception to the project's standard slot type strategy.
81
- * Standard components use `PropsForGlobalOnSlots<Name, Slots>`, which generates a flat
82
- * `object | GenericFunc<unknown, object>` for every slot key — sufficient for configuration-based
83
- * components where the slot surface is stable across all usage modes.
84
- *
85
- * DSControlledDateTimePicker cannot use that strategy because its slot surface is NOT stable. It
86
- * would require either (a) a flat union of all slots on all variants — permissive in the wrong
87
- * direction, silently accepting nonsensical props — or (b) 12 separate component types — the
88
- * correct structural answer but impractical given the shared rendering infrastructure.
89
- *
90
- * The engine is the middle path: one component, one prop interface per family (date / time /
91
- * date-time), with a type-level mechanism that narrows the slot surface for consumers who opt in
92
- * by specifying `Slots<T>`. The mechanism is isolated in its own file so it can be reasoned about,
93
- * tested, and evolved independently from the component's runtime behavior.
94
- */
95
- export {};
@@ -1 +0,0 @@
1
- export {};