tyrell-components 1.0.0-RC14 → 1.0.0-RC15

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 (113) hide show
  1. package/README.md +9 -1
  2. package/css/tyrell-theme.css +25 -2
  3. package/css/tyrell.css +4 -0
  4. package/dist/tyrell-colors-static.css +1 -316
  5. package/dist/tyrell-theme.css +1 -1443
  6. package/dist/tyrell.css +1 -1390
  7. package/dist/tyrell.js +1 -1
  8. package/lib/base/ty-component.js +196 -196
  9. package/lib/components/button.d.ts +1 -1
  10. package/lib/components/button.js +261 -259
  11. package/lib/components/calendar-month.d.ts +2 -2
  12. package/lib/components/calendar-month.js +439 -416
  13. package/lib/components/calendar-navigation.js +238 -238
  14. package/lib/components/calendar.d.ts +5 -3
  15. package/lib/components/calendar.js +611 -602
  16. package/lib/components/checkbox.d.ts +1 -1
  17. package/lib/components/checkbox.js +273 -272
  18. package/lib/components/copy.d.ts +1 -1
  19. package/lib/components/copy.js +280 -278
  20. package/lib/components/date-picker.d.ts +8 -1
  21. package/lib/components/date-picker.js +1128 -1108
  22. package/lib/components/file-upload.js +404 -404
  23. package/lib/components/icon.js +141 -141
  24. package/lib/components/input.d.ts +1 -1
  25. package/lib/components/input.js +593 -596
  26. package/lib/components/modal.js +319 -319
  27. package/lib/components/option.js +167 -167
  28. package/lib/components/popup.js +233 -233
  29. package/lib/components/radio.d.ts +2 -2
  30. package/lib/components/radio.js +407 -406
  31. package/lib/components/resize-observer.js +67 -67
  32. package/lib/components/scroll-container.js +292 -294
  33. package/lib/components/select.d.ts +71 -12
  34. package/lib/components/select.js +1605 -1529
  35. package/lib/components/selected-tags.d.ts +1 -1
  36. package/lib/components/selected-tags.js +188 -182
  37. package/lib/components/step.js +62 -62
  38. package/lib/components/switch.d.ts +1 -1
  39. package/lib/components/switch.js +214 -213
  40. package/lib/components/tab.js +62 -62
  41. package/lib/components/tabs.d.ts +1 -0
  42. package/lib/components/tabs.js +523 -492
  43. package/lib/components/tag.d.ts +1 -1
  44. package/lib/components/tag.js +236 -235
  45. package/lib/components/textarea.d.ts +1 -1
  46. package/lib/components/textarea.js +457 -456
  47. package/lib/components/tooltip.js +283 -283
  48. package/lib/components/wizard.js +384 -384
  49. package/lib/icons/heroicons/micro.js +392 -392
  50. package/lib/icons/heroicons/mini.js +382 -382
  51. package/lib/icons/heroicons/outline.js +337 -337
  52. package/lib/icons/heroicons/solid.js +407 -407
  53. package/lib/icons/lucide.js +22843 -22843
  54. package/lib/icons/material/filled.js +9653 -9653
  55. package/lib/icons/material/outlined.js +10271 -10271
  56. package/lib/icons/material/round.js +10495 -10495
  57. package/lib/icons/material/sharp.js +9905 -9905
  58. package/lib/icons/material/two-tone.js +12792 -12792
  59. package/lib/index.js +21 -21
  60. package/lib/styles/button.js +200 -302
  61. package/lib/styles/calendar-month.js +123 -183
  62. package/lib/styles/calendar-navigation.d.ts +1 -1
  63. package/lib/styles/calendar-navigation.js +64 -79
  64. package/lib/styles/calendar.d.ts +1 -1
  65. package/lib/styles/calendar.js +9 -9
  66. package/lib/styles/checkbox.js +45 -72
  67. package/lib/styles/copy.js +67 -91
  68. package/lib/styles/custom-scrollbar.js +80 -100
  69. package/lib/styles/date-picker.js +261 -331
  70. package/lib/styles/field-size.d.ts +6 -0
  71. package/lib/styles/field-size.js +91 -0
  72. package/lib/styles/file-upload.js +139 -169
  73. package/lib/styles/icon.js +92 -156
  74. package/lib/styles/input.js +125 -241
  75. package/lib/styles/modal.js +67 -102
  76. package/lib/styles/option.d.ts +1 -1
  77. package/lib/styles/option.js +47 -67
  78. package/lib/styles/popup.js +34 -65
  79. package/lib/styles/radio.js +69 -96
  80. package/lib/styles/resize-observer.js +2 -5
  81. package/lib/styles/scroll-container.js +100 -130
  82. package/lib/styles/select-base.js +596 -773
  83. package/lib/styles/select.js +140 -228
  84. package/lib/styles/step.js +22 -29
  85. package/lib/styles/switch.js +34 -55
  86. package/lib/styles/tab.d.ts +1 -1
  87. package/lib/styles/tab.js +22 -29
  88. package/lib/styles/tabs.d.ts +1 -1
  89. package/lib/styles/tabs.js +186 -180
  90. package/lib/styles/tag.js +135 -188
  91. package/lib/styles/textarea.d.ts +1 -1
  92. package/lib/styles/textarea.js +205 -271
  93. package/lib/styles/tooltip.js +3 -3
  94. package/lib/styles/wizard.js +170 -226
  95. package/lib/types/common.d.ts +2 -0
  96. package/lib/types/common.js +6 -5
  97. package/lib/utils/calendar-utils.js +100 -100
  98. package/lib/utils/custom-scrollbar.js +272 -272
  99. package/lib/utils/flavor-sheet.js +14 -14
  100. package/lib/utils/icon-registry.js +127 -127
  101. package/lib/utils/loader-registry.js +3 -3
  102. package/lib/utils/locale.js +34 -34
  103. package/lib/utils/mobile.js +1 -1
  104. package/lib/utils/number-format.js +54 -54
  105. package/lib/utils/positioning.js +212 -212
  106. package/lib/utils/property-capture.js +36 -36
  107. package/lib/utils/property-manager.js +125 -125
  108. package/lib/utils/resize-observer.js +23 -23
  109. package/lib/utils/scroll-lock.js +57 -57
  110. package/lib/utils/styles.js +17 -17
  111. package/lib/version.d.ts +1 -1
  112. package/lib/version.js +1 -1
  113. package/package.json +4 -4
@@ -106,11 +106,10 @@ export declare class TySelect extends TyComponent<SelectState> {
106
106
  };
107
107
  coerce: (v: any) => "none" | "slug";
108
108
  };
109
- searchable: {
110
- type: "string";
109
+ notSearchable: {
110
+ type: "boolean";
111
111
  visual: boolean;
112
- default: string;
113
- coerce: (v: any) => "auto" | "always" | "never";
112
+ default: boolean;
114
113
  };
115
114
  align: {
116
115
  type: "string";
@@ -127,7 +126,7 @@ export declare class TySelect extends TyComponent<SelectState> {
127
126
  size: {
128
127
  type: "string";
129
128
  visual: boolean;
130
- default: string;
129
+ default: Size;
131
130
  validate: (v: any) => boolean;
132
131
  coerce: (v: any) => any;
133
132
  };
@@ -142,6 +141,11 @@ export declare class TySelect extends TyComponent<SelectState> {
142
141
  visual: boolean;
143
142
  default: string;
144
143
  };
144
+ "selected-label": {
145
+ type: "string";
146
+ visual: boolean;
147
+ default: string;
148
+ };
145
149
  "no-options-message": {
146
150
  type: "string";
147
151
  visual: boolean;
@@ -170,11 +174,12 @@ export declare class TySelect extends TyComponent<SelectState> {
170
174
  private _externalSearch;
171
175
  private _allowCreate;
172
176
  private _createTransform;
173
- private _searchable;
177
+ private _notSearchable;
174
178
  private _loading;
175
179
  private _scrollLockId;
176
180
  private _size;
177
181
  private _availableLabel;
182
+ private _selectedLabel;
178
183
  private _noOptionsMessage;
179
184
  private _state;
180
185
  private _stubClickHandler;
@@ -208,6 +213,29 @@ export declare class TySelect extends TyComponent<SelectState> {
208
213
  private parseValue;
209
214
  /** Initialize component state from the value property / pre-selected children. */
210
215
  private initializeState;
216
+ /**
217
+ * Declarative init: no `value` attribute, but markup pre-marked one or more
218
+ * options `selected` — native <select> semantics. This is the ONE place
219
+ * selection is read FROM the DOM rather than treated as a rendering of
220
+ * state (see getSelectedValues()): it seeds initial state, once. After
221
+ * this, `value` rules — flipping an option's `selected` property later
222
+ * does nothing, same as native.
223
+ *
224
+ * Called from initializeState() at connect AND from the child observer:
225
+ * a real HTML parser upgrades a custom element the moment its start tag is
226
+ * seen, BEFORE its children exist — `<ty-select>` connects with zero
227
+ * `<ty-option>` children when it's part of the page's own markup (as
228
+ * opposed to an already-built fragment attached via innerHTML/appendChild,
229
+ * where children exist at connect). Calling this only at connect would
230
+ * silently miss every option parsed after that instant, which is the
231
+ * common case for markup that is literally in the page's initial HTML.
232
+ *
233
+ * Safe to call repeatedly: no-ops once `value` has ever been explicitly
234
+ * set (attribute or property) or state is already non-empty — including
235
+ * after a real `.clear()`, which removes `selected` from every option via
236
+ * syncSelectedTags, so there is nothing left here to (re-)seed from.
237
+ */
238
+ private resolveDeclarativeSelection;
211
239
  /**
212
240
  * Get all option elements from the component (ty-option preferred, ty-tag accepted)
213
241
  */
@@ -223,7 +251,15 @@ export declare class TySelect extends TyComponent<SelectState> {
223
251
  */
224
252
  private deselectTag;
225
253
  /**
226
- * Get array of currently selected values from tags (ALWAYS reads from DOM)
254
+ * Get the array of currently selected values.
255
+ *
256
+ * Reads STATE (`_state.selectedValues`), not the DOM: `value` is the
257
+ * selection, and an option's `selected` attribute is a rendering of it
258
+ * (written by syncSelectedTags below), never the other way round. This
259
+ * matters whenever options don't fully reflect the selection — external
260
+ * search legitimately has a selected value with no matching option
261
+ * present; a DOM scan would report empty and desync .value, `required`
262
+ * validation and the click-toggle logic from what's actually selected.
227
263
  */
228
264
  private getSelectedValues;
229
265
  private syncSelectedTags;
@@ -299,6 +335,13 @@ export declare class TySelect extends TyComponent<SelectState> {
299
335
  private blockSearchClick;
300
336
  private handleSearchInput;
301
337
  private handleKeyboard;
338
+ /**
339
+ * Next tag index in `direction` (-1/1) that isn't disabled, wrapping
340
+ * around — mirrors handleTagClick's disabled check so keyboard nav can
341
+ * never land on/select what a click already refuses to. Returns -1 if
342
+ * every tag is disabled (or there are none).
343
+ */
344
+ private nextEnabledTagIndex;
302
345
  private filterTags;
303
346
  private updateTagVisibility;
304
347
  private updateOptionsVisibility;
@@ -340,9 +383,25 @@ export declare class TySelect extends TyComponent<SelectState> {
340
383
  private handleMobileTagClick;
341
384
  private updateMobileSelectedState;
342
385
  /**
343
- * Should the popup show a search row? external-search always (the input is
344
- * the mechanism); searchable always/never wins otherwise; 'auto' shows it
345
- * only when the option list is long enough to need filtering.
386
+ * Hand the dialog's spare vertical space to one section or the other. Only
387
+ * one can own it: on a phone there isn't enough height for two scrollable
388
+ * lists to both be usefully tall, so tapping a header trades the space
389
+ * rather than splitting it. Selecting from the list hands it back to
390
+ * "available" — you're still picking, so that's the list you want open.
391
+ */
392
+ private expandMobileSection;
393
+ /**
394
+ * The selected values as dismissible chips, pinned above the available
395
+ * list so a long list can never scroll the current selection out of sight.
396
+ * Rebuilt wholesale: the strip is small, and diffing it would have to
397
+ * track chip identity for the sake of a handful of nodes.
398
+ */
399
+ private renderMobileSelectedChips;
400
+ /**
401
+ * Should the popup show a search row? external-search/allow-create pin it
402
+ * on (the input is the only way to get a query out at all), not-searchable
403
+ * forces it off, and otherwise it follows the list: shown once there are
404
+ * more options than fit without scrolling.
346
405
  */
347
406
  private shouldShowSearch;
348
407
  /**
@@ -400,8 +459,8 @@ export declare class TySelect extends TyComponent<SelectState> {
400
459
  set clearable(value: boolean);
401
460
  get required(): boolean;
402
461
  set required(value: boolean);
403
- get searchable(): "auto" | "always" | "never";
404
- set searchable(value: "auto" | "always" | "never" | boolean);
462
+ get notSearchable(): boolean;
463
+ set notSearchable(value: boolean);
405
464
  get externalSearch(): boolean;
406
465
  set externalSearch(value: boolean);
407
466
  get debounce(): number;