@fusion.dev/helix-headless 0.12.2 → 0.12.3

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.
@@ -14003,16 +14003,6 @@
14003
14003
  "description": "What the list says while they are on their way.",
14004
14004
  "attribute": "loading-text"
14005
14005
  },
14006
- {
14007
- "kind": "field",
14008
- "name": "maxTags",
14009
- "type": {
14010
- "text": "number"
14011
- },
14012
- "default": "0",
14013
- "description": "How many tags to draw before the rest become a count. `multiple` only.\n\n`0` is all of them, and is the default: a cap that guesses is worse than no\ncap, because the number that fits depends on the width of the field and the\nlength of what is in it, neither of which this element knows. What a cap is\ngenuinely for is a field in a row or a table cell, where a set of twelve\nchoices would push everything below it down a line at a time.\n\nThe remainder is counted rather than hidden. `+3` is a fact a reader can act\non, where a row that silently stops is a field that appears to have lost\nwhat was put in it. Date Input and Time Input carry the same property and\nthe same reasoning.",
14014
- "attribute": "max-tags"
14015
- },
14016
14006
  {
14017
14007
  "kind": "field",
14018
14008
  "name": "multiple",
@@ -14262,6 +14252,21 @@
14262
14252
  "readonly": true,
14263
14253
  "description": "Anywhere in the field opens the list, and puts the caret where typing goes.\n\nOn the field rather than on the `<input>`. The caret is a sibling of the\ninput and so is the tag strip, so a handler on the input alone leaves the\none part of the control that visibly says \"this opens\" doing nothing.\nAnything drawn inside the field is the field.\n\nA tag is the exception, because a tag is its own control: its dismiss\nremoves a choice, and opening the list on the way past would leave the\nreader looking at a panel they did not ask for. Read from the composed\npath, since the press lands on a button inside the tag's shadow root and\nthe event has retargeted by the time it arrives here.\n\nIt only ever opens. Closing is Escape, a choice, or leaving, which is what\nthe input already did and what a text field wants: a control that closed\nwhen you clicked into the middle of your own typing would be unusable."
14264
14254
  },
14255
+ {
14256
+ "kind": "method",
14257
+ "name": "removeLastToken",
14258
+ "privacy": "protected",
14259
+ "return": {
14260
+ "type": {
14261
+ "text": "void"
14262
+ }
14263
+ },
14264
+ "description": "The last chosen one goes, which is what Backspace on an empty field means.\n\n`MixinTokens` owns when this is asked for and this owns what it does: a\ntoken here is a chosen option, so it leaves by the same door a dismissed\ntag does.",
14265
+ "inheritedFrom": {
14266
+ "name": "MixinTokens",
14267
+ "module": "src/mixins/mixin-tokens/mixin-tokens.ts"
14268
+ }
14269
+ },
14265
14270
  {
14266
14271
  "kind": "field",
14267
14272
  "name": "handleDismiss",
@@ -14427,6 +14432,98 @@
14427
14432
  "text": "toggleOpen() => boolean"
14428
14433
  }
14429
14434
  },
14435
+ {
14436
+ "kind": "field",
14437
+ "name": "maxTags",
14438
+ "type": {
14439
+ "text": "number"
14440
+ },
14441
+ "default": "0",
14442
+ "description": "How many tokens to show before the rest become a count.",
14443
+ "attribute": "max-tags",
14444
+ "inheritedFrom": {
14445
+ "name": "MixinTokens",
14446
+ "module": "src/mixins/mixin-tokens/mixin-tokens.ts"
14447
+ }
14448
+ },
14449
+ {
14450
+ "kind": "method",
14451
+ "name": "renderTokenRow",
14452
+ "privacy": "protected",
14453
+ "return": {
14454
+ "type": {
14455
+ "text": "TemplateResult | typeof nothing"
14456
+ }
14457
+ },
14458
+ "parameters": [
14459
+ {
14460
+ "name": "content",
14461
+ "type": {
14462
+ "text": "unknown"
14463
+ }
14464
+ },
14465
+ {
14466
+ "name": "over",
14467
+ "type": {
14468
+ "text": "number"
14469
+ }
14470
+ }
14471
+ ],
14472
+ "inheritedFrom": {
14473
+ "name": "MixinTokens",
14474
+ "module": "src/mixins/mixin-tokens/mixin-tokens.ts"
14475
+ }
14476
+ },
14477
+ {
14478
+ "kind": "method",
14479
+ "name": "hideOverflow",
14480
+ "privacy": "protected",
14481
+ "return": {
14482
+ "type": {
14483
+ "text": "number"
14484
+ }
14485
+ },
14486
+ "parameters": [
14487
+ {
14488
+ "name": "slot",
14489
+ "type": {
14490
+ "text": "HTMLSlotElement | null | undefined"
14491
+ }
14492
+ }
14493
+ ],
14494
+ "inheritedFrom": {
14495
+ "name": "MixinTokens",
14496
+ "module": "src/mixins/mixin-tokens/mixin-tokens.ts"
14497
+ }
14498
+ },
14499
+ {
14500
+ "kind": "method",
14501
+ "name": "tokenKeydown",
14502
+ "privacy": "protected",
14503
+ "return": {
14504
+ "type": {
14505
+ "text": "boolean"
14506
+ }
14507
+ },
14508
+ "parameters": [
14509
+ {
14510
+ "name": "event",
14511
+ "type": {
14512
+ "text": "KeyboardEvent"
14513
+ }
14514
+ },
14515
+ {
14516
+ "name": "typed",
14517
+ "type": {
14518
+ "text": "string"
14519
+ }
14520
+ }
14521
+ ],
14522
+ "inheritedFrom": {
14523
+ "name": "MixinTokens",
14524
+ "module": "src/mixins/mixin-tokens/mixin-tokens.ts"
14525
+ }
14526
+ },
14430
14527
  {
14431
14528
  "kind": "field",
14432
14529
  "name": "defaultValue",
@@ -15219,15 +15316,6 @@
15219
15316
  "description": "What the list says while they are on their way.",
15220
15317
  "fieldName": "loadingText"
15221
15318
  },
15222
- {
15223
- "name": "max-tags",
15224
- "type": {
15225
- "text": "number"
15226
- },
15227
- "default": "0",
15228
- "description": "How many tags to draw before the rest become a count. `multiple` only.\n\n`0` is all of them, and is the default: a cap that guesses is worse than no\ncap, because the number that fits depends on the width of the field and the\nlength of what is in it, neither of which this element knows. What a cap is\ngenuinely for is a field in a row or a table cell, where a set of twelve\nchoices would push everything below it down a line at a time.\n\nThe remainder is counted rather than hidden. `+3` is a fact a reader can act\non, where a row that silently stops is a field that appears to have lost\nwhat was put in it. Date Input and Time Input carry the same property and\nthe same reasoning.",
15229
- "fieldName": "maxTags"
15230
- },
15231
15319
  {
15232
15320
  "name": "multiple",
15233
15321
  "type": {
@@ -15289,6 +15377,19 @@
15289
15377
  "module": "src/mixins/mixin-controller-open/mixin-controller-open.ts"
15290
15378
  }
15291
15379
  },
15380
+ {
15381
+ "name": "max-tags",
15382
+ "type": {
15383
+ "text": "number"
15384
+ },
15385
+ "default": "0",
15386
+ "description": "How many tokens to show before the rest become a count.",
15387
+ "fieldName": "maxTags",
15388
+ "inheritedFrom": {
15389
+ "name": "MixinTokens",
15390
+ "module": "src/mixins/mixin-tokens/mixin-tokens.ts"
15391
+ }
15392
+ },
15292
15393
  {
15293
15394
  "name": "default-value",
15294
15395
  "type": {
@@ -15398,6 +15499,10 @@
15398
15499
  "name": "MixinControllerOpen",
15399
15500
  "package": "@fusion.dev/helix-core"
15400
15501
  },
15502
+ {
15503
+ "name": "MixinTokens",
15504
+ "package": "@fusion.dev/helix-core"
15505
+ },
15401
15506
  {
15402
15507
  "name": "MixinControllerValue",
15403
15508
  "package": "@fusion.dev/helix-core"
@@ -2,7 +2,7 @@ import { AriaForwardController, HelixFormElement, PopoverController } from '@fus
2
2
  import { type PropertyValues, type TemplateResult } from 'lit';
3
3
  import '../../listbox/index.js';
4
4
  import '../../tag/index.js';
5
- declare const HelixHeadlessCombobox_base: (new (...args: any[]) => import("@fusion.dev/helix-core").MixinControllerOpenInterface) & (new (...args: any[]) => import("@fusion.dev/helix-core").MixinControllerValueInterface) & (new (...args: any[]) => import("@fusion.dev/helix-core").MixinFieldInterface) & typeof HelixFormElement;
5
+ declare const HelixHeadlessCombobox_base: (new (...args: any[]) => import("@fusion.dev/helix-core").MixinControllerOpenInterface) & (new (...args: any[]) => import("@fusion.dev/helix-core").MixinTokensInterface) & (new (...args: any[]) => import("@fusion.dev/helix-core").MixinControllerValueInterface) & (new (...args: any[]) => import("@fusion.dev/helix-core").MixinFieldInterface) & typeof HelixFormElement;
6
6
  /**
7
7
  * @summary A field that filters a list as it is typed into.
8
8
  *
@@ -121,21 +121,6 @@ export declare class HelixHeadlessCombobox extends HelixHeadlessCombobox_base {
121
121
  * What the list says while they are on their way.
122
122
  */
123
123
  loadingText: string;
124
- /**
125
- * How many tags to draw before the rest become a count. `multiple` only.
126
- *
127
- * `0` is all of them, and is the default: a cap that guesses is worse than no
128
- * cap, because the number that fits depends on the width of the field and the
129
- * length of what is in it, neither of which this element knows. What a cap is
130
- * genuinely for is a field in a row or a table cell, where a set of twelve
131
- * choices would push everything below it down a line at a time.
132
- *
133
- * The remainder is counted rather than hidden. `+3` is a fact a reader can act
134
- * on, where a row that silently stops is a field that appears to have lost
135
- * what was put in it. Date Input and Time Input carry the same property and
136
- * the same reasoning.
137
- */
138
- maxTags: number;
139
124
  /**
140
125
  * Whether more than one option can be chosen.
141
126
  *
@@ -295,6 +280,14 @@ export declare class HelixHeadlessCombobox extends HelixHeadlessCombobox_base {
295
280
  * when you clicked into the middle of your own typing would be unusable.
296
281
  */
297
282
  private readonly handleFieldClick;
283
+ /**
284
+ * The last chosen one goes, which is what Backspace on an empty field means.
285
+ *
286
+ * `MixinTokens` owns when this is asked for and this owns what it does: a
287
+ * token here is a chosen option, so it leaves by the same door a dismissed
288
+ * tag does.
289
+ */
290
+ protected removeLastToken(): void;
298
291
  /** One tag asking to be taken out of the set. */
299
292
  private readonly handleDismiss;
300
293
  /**
@@ -4,7 +4,7 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
4
4
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
5
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
6
  };
7
- import { AriaForwardController, customElement, HelixCreateEvent, HelixFormElement, MixinControllerOpen, MixinControllerValue, MixinField, PopoverController, } from '@fusion.dev/helix-core';
7
+ import { AriaForwardController, customElement, HelixCreateEvent, HelixFormElement, MixinControllerOpen, MixinControllerValue, MixinField, MixinTokens, PopoverController, } from '@fusion.dev/helix-core';
8
8
  import { caretDown } from '@fusion.dev/helix-icons';
9
9
  import { nothing } from 'lit';
10
10
  import { property, state } from 'lit/decorators.js';
@@ -13,7 +13,7 @@ import { html } from 'lit/static-html.js';
13
13
  import '../../listbox/index.js';
14
14
  import '../../tag/index.js';
15
15
  const isInsertion = (event) => !event.inputType?.startsWith('delete');
16
- let HelixHeadlessCombobox = class HelixHeadlessCombobox extends MixinControllerOpen(MixinControllerValue(MixinField(HelixFormElement))) {
16
+ let HelixHeadlessCombobox = class HelixHeadlessCombobox extends MixinControllerOpen(MixinTokens(MixinControllerValue(MixinField(HelixFormElement)))) {
17
17
  constructor() {
18
18
  super(...arguments);
19
19
  this.aria = new AriaForwardController(this, {
@@ -26,7 +26,6 @@ let HelixHeadlessCombobox = class HelixHeadlessCombobox extends MixinControllerO
26
26
  this.listLabel = 'Options';
27
27
  this.loading = false;
28
28
  this.loadingText = 'Loading';
29
- this.maxTags = 0;
30
29
  this.multiple = false;
31
30
  this.placeholder = '';
32
31
  this.removeLabel = 'Remove';
@@ -71,12 +70,7 @@ let HelixHeadlessCombobox = class HelixHeadlessCombobox extends MixinControllerO
71
70
  }
72
71
  return;
73
72
  }
74
- if (event.key === 'Backspace' && this.multiple && this.typed === '') {
75
- const last = this.values.at(-1);
76
- if (last !== undefined) {
77
- event.preventDefault();
78
- this.drop(last);
79
- }
73
+ if (this.multiple && this.tokenKeydown(event, this.typed)) {
80
74
  return;
81
75
  }
82
76
  if (event.key === 'Enter' && this.creation !== '' && !this.showing) {
@@ -206,6 +200,12 @@ let HelixHeadlessCombobox = class HelixHeadlessCombobox extends MixinControllerO
206
200
  const match = (this.listbox?.options ?? []).find((option) => !option.hidden && !option.disabled && option.text.toLowerCase().startsWith(needle));
207
201
  return match && match.text.length > typed.length ? match.text : '';
208
202
  }
203
+ removeLastToken() {
204
+ const last = this.values.at(-1);
205
+ if (last !== undefined) {
206
+ this.drop(last);
207
+ }
208
+ }
209
209
  sync() {
210
210
  this.internals.setFormValue(this.value === '' ? null : this.value);
211
211
  this.reportRequired(this.value === '', 'Choose one to continue.', 'control');
@@ -284,12 +284,7 @@ let HelixHeadlessCombobox = class HelixHeadlessCombobox extends MixinControllerO
284
284
  <div part="field" @click=${this.handleFieldClick}>
285
285
  <slot name="start"></slot>
286
286
  ${this.multiple && this.chosen.length > 0
287
- ? html `<span part="tags">
288
- ${this.shown.map((option) => this.renderTag(option))}
289
- ${this.restCount > 0
290
- ? html `<span part="rest">${`+${this.restCount}`}</span>`
291
- : nothing}
292
- </span>`
287
+ ? this.renderTokenRow(this.shown.map((option) => this.renderTag(option)), this.restCount)
293
288
  : nothing}
294
289
  <input
295
290
  part="control"
@@ -344,9 +339,6 @@ __decorate([
344
339
  __decorate([
345
340
  property({ attribute: 'loading-text' })
346
341
  ], HelixHeadlessCombobox.prototype, "loadingText", void 0);
347
- __decorate([
348
- property({ attribute: 'max-tags', type: Number })
349
- ], HelixHeadlessCombobox.prototype, "maxTags", void 0);
350
342
  __decorate([
351
343
  property({ type: Boolean })
352
344
  ], HelixHeadlessCombobox.prototype, "multiple", void 0);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@fusion.dev/helix-headless",
3
3
  "description": "Headless component tier. Structure, accessibility, state, and form participation. No styling.",
4
- "version": "0.12.2",
4
+ "version": "0.12.3",
5
5
  "license": "MIT",
6
6
  "author": "Ross Sheppard <ross.sheppard@fusion.dev>",
7
7
  "repository": {
@@ -45,14 +45,14 @@
45
45
  },
46
46
  "bugs": "https://github.com/project-fusion/fusion/issues",
47
47
  "dependencies": {
48
- "@fusion.dev/helix-core": "0.12.2",
49
- "@fusion.dev/helix-icons": "0.12.2",
48
+ "@fusion.dev/helix-core": "0.12.3",
49
+ "@fusion.dev/helix-icons": "0.12.3",
50
50
  "uqr": "^0.1.3"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@custom-elements-manifest/analyzer": "^0.11.0",
54
- "@fusion.dev/helix-cem": "0.12.2",
55
- "@fusion.dev/helix-testing": "0.12.2",
54
+ "@fusion.dev/helix-cem": "0.12.3",
55
+ "@fusion.dev/helix-testing": "0.12.3",
56
56
  "@fusion.dev/scripts": "0.0.0-dev",
57
57
  "@happy-dom/global-registrator": "^20.0.0",
58
58
  "@lit-labs/ssr": "^3.3.0",
package/types/jsx.d.ts CHANGED
@@ -3022,32 +3022,6 @@ message belongs. */
3022
3022
  "loading-text"?: (HelixHeadlessCombobox["loadingText"]) | undefined;
3023
3023
  /** What the list says while they are on their way. */
3024
3024
  loadingText?: (HelixHeadlessCombobox["loadingText"]) | undefined;
3025
- /** How many tags to draw before the rest become a count. `multiple` only.
3026
-
3027
- `0` is all of them, and is the default: a cap that guesses is worse than no
3028
- cap, because the number that fits depends on the width of the field and the
3029
- length of what is in it, neither of which this element knows. What a cap is
3030
- genuinely for is a field in a row or a table cell, where a set of twelve
3031
- choices would push everything below it down a line at a time.
3032
-
3033
- The remainder is counted rather than hidden. `+3` is a fact a reader can act
3034
- on, where a row that silently stops is a field that appears to have lost
3035
- what was put in it. Date Input and Time Input carry the same property and
3036
- the same reasoning. */
3037
- "max-tags"?: (HelixHeadlessCombobox["maxTags"]) | undefined;
3038
- /** How many tags to draw before the rest become a count. `multiple` only.
3039
-
3040
- `0` is all of them, and is the default: a cap that guesses is worse than no
3041
- cap, because the number that fits depends on the width of the field and the
3042
- length of what is in it, neither of which this element knows. What a cap is
3043
- genuinely for is a field in a row or a table cell, where a set of twelve
3044
- choices would push everything below it down a line at a time.
3045
-
3046
- The remainder is counted rather than hidden. `+3` is a fact a reader can act
3047
- on, where a row that silently stops is a field that appears to have lost
3048
- what was put in it. Date Input and Time Input carry the same property and
3049
- the same reasoning. */
3050
- maxTags?: (HelixHeadlessCombobox["maxTags"]) | undefined;
3051
3025
  /** Whether more than one option can be chosen.
3052
3026
 
3053
3027
  The list already does the work: `value` comes apart on commas, a press
@@ -3087,6 +3061,10 @@ the resolved state for stylesheets, which is what the mirror is for. */
3087
3061
  "default-open"?: (HelixHeadlessCombobox["defaultOpen"]) | undefined;
3088
3062
  /** Initial open state for uncontrolled use, where nothing declared one. */
3089
3063
  defaultOpen?: (HelixHeadlessCombobox["defaultOpen"]) | undefined;
3064
+ /** How many tokens to show before the rest become a count. */
3065
+ "max-tags"?: (HelixHeadlessCombobox["maxTags"]) | undefined;
3066
+ /** How many tokens to show before the rest become a count. */
3067
+ maxTags?: (HelixHeadlessCombobox["maxTags"]) | undefined;
3090
3068
  /** The value the markup declared, which is where a reset returns to. */
3091
3069
  "default-value"?: (HelixHeadlessCombobox["defaultValue"]) | undefined;
3092
3070
  /** The value the markup declared, which is where a reset returns to. */
@@ -3198,32 +3176,6 @@ message belongs. */
3198
3176
  "attr:loading-text"?: (HelixHeadlessCombobox["loadingText"]) | undefined;
3199
3177
  /** What the list says while they are on their way. */
3200
3178
  "prop:loadingText"?: (HelixHeadlessCombobox["loadingText"]) | undefined;
3201
- /** How many tags to draw before the rest become a count. `multiple` only.
3202
-
3203
- `0` is all of them, and is the default: a cap that guesses is worse than no
3204
- cap, because the number that fits depends on the width of the field and the
3205
- length of what is in it, neither of which this element knows. What a cap is
3206
- genuinely for is a field in a row or a table cell, where a set of twelve
3207
- choices would push everything below it down a line at a time.
3208
-
3209
- The remainder is counted rather than hidden. `+3` is a fact a reader can act
3210
- on, where a row that silently stops is a field that appears to have lost
3211
- what was put in it. Date Input and Time Input carry the same property and
3212
- the same reasoning. */
3213
- "attr:max-tags"?: (HelixHeadlessCombobox["maxTags"]) | undefined;
3214
- /** How many tags to draw before the rest become a count. `multiple` only.
3215
-
3216
- `0` is all of them, and is the default: a cap that guesses is worse than no
3217
- cap, because the number that fits depends on the width of the field and the
3218
- length of what is in it, neither of which this element knows. What a cap is
3219
- genuinely for is a field in a row or a table cell, where a set of twelve
3220
- choices would push everything below it down a line at a time.
3221
-
3222
- The remainder is counted rather than hidden. `+3` is a fact a reader can act
3223
- on, where a row that silently stops is a field that appears to have lost
3224
- what was put in it. Date Input and Time Input carry the same property and
3225
- the same reasoning. */
3226
- "prop:maxTags"?: (HelixHeadlessCombobox["maxTags"]) | undefined;
3227
3179
  /** Whether more than one option can be chosen.
3228
3180
 
3229
3181
  The list already does the work: `value` comes apart on commas, a press
@@ -3263,6 +3215,10 @@ the resolved state for stylesheets, which is what the mirror is for. */
3263
3215
  "bool:default-open"?: (HelixHeadlessCombobox["defaultOpen"]) | undefined;
3264
3216
  /** Initial open state for uncontrolled use, where nothing declared one. */
3265
3217
  "prop:defaultOpen"?: (HelixHeadlessCombobox["defaultOpen"]) | undefined;
3218
+ /** How many tokens to show before the rest become a count. */
3219
+ "attr:max-tags"?: (HelixHeadlessCombobox["maxTags"]) | undefined;
3220
+ /** How many tokens to show before the rest become a count. */
3221
+ "prop:maxTags"?: (HelixHeadlessCombobox["maxTags"]) | undefined;
3266
3222
  /** The value the markup declared, which is where a reset returns to. */
3267
3223
  "attr:default-value"?: (HelixHeadlessCombobox["defaultValue"]) | undefined;
3268
3224
  /** The value the markup declared, which is where a reset returns to. */
@@ -18216,18 +18172,6 @@ export type CustomElements = {
18216
18172
  * Passed straight to the list, which is where the rows are and so where the
18217
18173
  * message belongs.
18218
18174
  * - `loading-text`/`loadingText`: What the list says while they are on their way.
18219
- * - `max-tags`/`maxTags`: How many tags to draw before the rest become a count. `multiple` only.
18220
- *
18221
- * `0` is all of them, and is the default: a cap that guesses is worse than no
18222
- * cap, because the number that fits depends on the width of the field and the
18223
- * length of what is in it, neither of which this element knows. What a cap is
18224
- * genuinely for is a field in a row or a table cell, where a set of twelve
18225
- * choices would push everything below it down a line at a time.
18226
- *
18227
- * The remainder is counted rather than hidden. `+3` is a fact a reader can act
18228
- * on, where a row that silently stops is a field that appears to have lost
18229
- * what was put in it. Date Input and Time Input carry the same property and
18230
- * the same reasoning.
18231
18175
  * - `multiple`: Whether more than one option can be chosen.
18232
18176
  *
18233
18177
  * The list already does the work: `value` comes apart on commas, a press
@@ -18257,6 +18201,7 @@ export type CustomElements = {
18257
18201
  * last reader did rather than what the author wrote. `:state(open)` carries
18258
18202
  * the resolved state for stylesheets, which is what the mirror is for.
18259
18203
  * - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
18204
+ * - `max-tags`/`maxTags`: How many tokens to show before the rest become a count.
18260
18205
  * - `default-value`/`defaultValue`: The value the markup declared, which is where a reset returns to.
18261
18206
  * - `value`: What the control holds now, and what its form submits.
18262
18207
  *
@@ -32446,18 +32391,6 @@ export type CustomElementsSolidJs = {
32446
32391
  * Passed straight to the list, which is where the rows are and so where the
32447
32392
  * message belongs.
32448
32393
  * - `loading-text`/`loadingText`: What the list says while they are on their way.
32449
- * - `max-tags`/`maxTags`: How many tags to draw before the rest become a count. `multiple` only.
32450
- *
32451
- * `0` is all of them, and is the default: a cap that guesses is worse than no
32452
- * cap, because the number that fits depends on the width of the field and the
32453
- * length of what is in it, neither of which this element knows. What a cap is
32454
- * genuinely for is a field in a row or a table cell, where a set of twelve
32455
- * choices would push everything below it down a line at a time.
32456
- *
32457
- * The remainder is counted rather than hidden. `+3` is a fact a reader can act
32458
- * on, where a row that silently stops is a field that appears to have lost
32459
- * what was put in it. Date Input and Time Input carry the same property and
32460
- * the same reasoning.
32461
32394
  * - `multiple`: Whether more than one option can be chosen.
32462
32395
  *
32463
32396
  * The list already does the work: `value` comes apart on commas, a press
@@ -32487,6 +32420,7 @@ export type CustomElementsSolidJs = {
32487
32420
  * last reader did rather than what the author wrote. `:state(open)` carries
32488
32421
  * the resolved state for stylesheets, which is what the mirror is for.
32489
32422
  * - `default-open`/`defaultOpen`: Initial open state for uncontrolled use, where nothing declared one.
32423
+ * - `max-tags`/`maxTags`: How many tokens to show before the rest become a count.
32490
32424
  * - `default-value`/`defaultValue`: The value the markup declared, which is where a reset returns to.
32491
32425
  * - `value`: What the control holds now, and what its form submits.
32492
32426
  *
package/types/vue.d.ts CHANGED
@@ -1577,32 +1577,6 @@ message belongs. */
1577
1577
  "loading-text"?: (HelixHeadlessCombobox["loadingText"]) | undefined;
1578
1578
  /** What the list says while they are on their way. */
1579
1579
  loadingText?: (HelixHeadlessCombobox["loadingText"]) | undefined;
1580
- /** How many tags to draw before the rest become a count. `multiple` only.
1581
-
1582
- `0` is all of them, and is the default: a cap that guesses is worse than no
1583
- cap, because the number that fits depends on the width of the field and the
1584
- length of what is in it, neither of which this element knows. What a cap is
1585
- genuinely for is a field in a row or a table cell, where a set of twelve
1586
- choices would push everything below it down a line at a time.
1587
-
1588
- The remainder is counted rather than hidden. `+3` is a fact a reader can act
1589
- on, where a row that silently stops is a field that appears to have lost
1590
- what was put in it. Date Input and Time Input carry the same property and
1591
- the same reasoning. */
1592
- "max-tags"?: (HelixHeadlessCombobox["maxTags"]) | undefined;
1593
- /** How many tags to draw before the rest become a count. `multiple` only.
1594
-
1595
- `0` is all of them, and is the default: a cap that guesses is worse than no
1596
- cap, because the number that fits depends on the width of the field and the
1597
- length of what is in it, neither of which this element knows. What a cap is
1598
- genuinely for is a field in a row or a table cell, where a set of twelve
1599
- choices would push everything below it down a line at a time.
1600
-
1601
- The remainder is counted rather than hidden. `+3` is a fact a reader can act
1602
- on, where a row that silently stops is a field that appears to have lost
1603
- what was put in it. Date Input and Time Input carry the same property and
1604
- the same reasoning. */
1605
- maxTags?: (HelixHeadlessCombobox["maxTags"]) | undefined;
1606
1580
  /** Whether more than one option can be chosen.
1607
1581
 
1608
1582
  The list already does the work: `value` comes apart on commas, a press
@@ -1642,6 +1616,10 @@ the resolved state for stylesheets, which is what the mirror is for. */
1642
1616
  "default-open"?: (HelixHeadlessCombobox["defaultOpen"]) | undefined;
1643
1617
  /** Initial open state for uncontrolled use, where nothing declared one. */
1644
1618
  defaultOpen?: (HelixHeadlessCombobox["defaultOpen"]) | undefined;
1619
+ /** How many tokens to show before the rest become a count. */
1620
+ "max-tags"?: (HelixHeadlessCombobox["maxTags"]) | undefined;
1621
+ /** How many tokens to show before the rest become a count. */
1622
+ maxTags?: (HelixHeadlessCombobox["maxTags"]) | undefined;
1645
1623
  /** The value the markup declared, which is where a reset returns to. */
1646
1624
  "default-value"?: (HelixHeadlessCombobox["defaultValue"]) | undefined;
1647
1625
  /** The value the markup declared, which is where a reset returns to. */