@threadlabs/looma 0.25.1 → 0.25.2

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.
@@ -5202,7 +5202,7 @@ svg[data-v-521a280a-s] {
5202
5202
  whole value is. The action slot takes one button at the end, inside the border, for the one
5203
5203
  thing the field is for ("Continue" after a site's address), so it reads as the field's action
5204
5204
  and not the form's. */
5205
- [data-component~="ui-input-group"][data-v-875c0c72] {
5205
+ [data-component~="ui-input-group"][data-v-57e02424] {
5206
5206
  /* The group's own border and height stand for the input's, so the group is a lone Input's height.
5207
5207
  Hooks do not inherit, so these are defaults for the input; its own hooks still win. */
5208
5208
  --_ui-default-input-border-width: 0;
@@ -5249,36 +5249,36 @@ svg[data-v-521a280a-s] {
5249
5249
  }
5250
5250
 
5251
5251
  /* The frame takes its input's size, so a small group lines up with small buttons and fields. */
5252
- [data-component~="ui-input-group"][data-v-875c0c72]:has(.field [data-ui-input-state~="size=sm"]) {
5252
+ [data-component~="ui-input-group"][data-v-57e02424]:has(.field [data-ui-input-state~="size=sm"]) {
5253
5253
  min-block-size: var(--ui-control-size-sm);
5254
5254
  }
5255
- [data-component~="ui-input-group"][data-v-875c0c72]:has(.field [data-ui-input-state~="size=lg"]) {
5255
+ [data-component~="ui-input-group"][data-v-57e02424]:has(.field [data-ui-input-state~="size=lg"]) {
5256
5256
  min-block-size: var(--ui-control-size-lg);
5257
5257
  }
5258
5258
  @media (pointer: coarse) {
5259
- [data-component~="ui-input-group"][data-v-875c0c72]:has(.field [data-ui-input-state~="size=sm"]) {
5259
+ [data-component~="ui-input-group"][data-v-57e02424]:has(.field [data-ui-input-state~="size=sm"]) {
5260
5260
  min-block-size: var(--ui-control-min-block-size);
5261
5261
  }
5262
5262
  }
5263
- [data-component~="ui-input-group"][data-v-875c0c72]:hover:not(:has(:is(input, textarea):focus, :is(input, textarea):disabled, :is(input, textarea):read-only, [aria-invalid="true"], :is(:user-invalid, [data-user-invalid]))) {
5263
+ [data-component~="ui-input-group"][data-v-57e02424]:hover:not(:has(:is(input, textarea):focus, :is(input, textarea):disabled, :is(input, textarea):read-only, [aria-invalid="true"], :is(:user-invalid, [data-user-invalid]))) {
5264
5264
  border-color: var(--ui-control-border-hover, var(--ui-text-secondary));
5265
5265
  }
5266
5266
 
5267
5267
  /* The ring shows when the field's input would show its own: when it is focus-visible, which a
5268
5268
  text input is for a pointer as well as a keyboard. A focused action button draws its own. */
5269
- [data-component~="ui-input-group"][data-v-875c0c72]:has(.field :is(input, textarea):focus-visible) {
5269
+ [data-component~="ui-input-group"][data-v-57e02424]:has(.field :is(input, textarea):focus-visible) {
5270
5270
  border-color: var(--ui-control-focus, var(--ui-accent-solid));
5271
5271
  box-shadow:
5272
5272
  var(--ui-control-inset),
5273
5273
  var(--ui-control-focus-halo-shadow);
5274
5274
  }
5275
- [data-component~="ui-input-group"][data-v-875c0c72]:has([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])) {
5275
+ [data-component~="ui-input-group"][data-v-57e02424]:has([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])) {
5276
5276
  border-color: var(
5277
5277
  --ui-input-group-invalid-border,
5278
5278
  var(--ui-field-danger, var(--ui-danger-solid))
5279
5279
  );
5280
5280
  }
5281
- [data-component~="ui-input-group"][data-v-875c0c72]:has(:is(input, textarea):is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible) {
5281
+ [data-component~="ui-input-group"][data-v-57e02424]:has(:is(input, textarea):is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible) {
5282
5282
  box-shadow: var(
5283
5283
  --ui-input-group-invalid-focus-shadow,
5284
5284
  var(--ui-control-inset),
@@ -5292,23 +5292,23 @@ svg[data-v-521a280a-s] {
5292
5292
 
5293
5293
  /* Forced colors drop box shadows, so the focus ring becomes an outline. */
5294
5294
  @media (forced-colors: active) {
5295
- [data-component~="ui-input-group"][data-v-875c0c72]:has(:is(input, textarea):focus-visible) {
5295
+ [data-component~="ui-input-group"][data-v-57e02424]:has(:is(input, textarea):focus-visible) {
5296
5296
  outline: var(--ui-focus-width) solid Highlight;
5297
5297
  outline-offset: var(--ui-border-width);
5298
5298
  }
5299
5299
  }
5300
- [data-component~="ui-input-group"][data-ui-input-group-state~="disabled"][data-v-875c0c72],
5301
- [data-component~="ui-input-group"][data-v-875c0c72]:has(:is(input, textarea):disabled) {
5300
+ [data-component~="ui-input-group"][data-ui-input-group-state~="disabled"][data-v-57e02424],
5301
+ [data-component~="ui-input-group"][data-v-57e02424]:has(:is(input, textarea):disabled) {
5302
5302
  background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
5303
5303
  box-shadow: none;
5304
5304
  cursor: not-allowed;
5305
5305
  }
5306
- .field[data-v-875c0c72] {
5306
+ .field[data-v-57e02424] {
5307
5307
  display: flex;
5308
5308
  flex: 1;
5309
5309
  min-inline-size: 0;
5310
5310
  }
5311
- .affix[data-v-875c0c72] {
5311
+ .affix[data-v-57e02424] {
5312
5312
  display: inline-flex;
5313
5313
  flex: none;
5314
5314
  align-items: center;
@@ -5320,21 +5320,21 @@ svg[data-v-521a280a-s] {
5320
5320
  }
5321
5321
 
5322
5322
  /* Fixed text is part of the value, but should not look editable. */
5323
- .affix[data-v-875c0c72]:has([slot="prefix"]),
5324
- .affix[data-v-875c0c72]:has([slot="suffix"]) {
5323
+ .affix[data-v-57e02424]:has([slot="prefix"]),
5324
+ .affix[data-v-57e02424]:has([slot="suffix"]) {
5325
5325
  background: var(--ui-surface-muted);
5326
5326
  }
5327
- .affix[data-v-875c0c72]:has([slot="prefix"]) {
5327
+ .affix[data-v-57e02424]:has([slot="prefix"]) {
5328
5328
  border-inline-end: var(--ui-border-width) solid var(--ui-border-divider);
5329
5329
  }
5330
- .affix[data-v-875c0c72]:has([slot="suffix"]) {
5330
+ .affix[data-v-57e02424]:has([slot="suffix"]) {
5331
5331
  border-inline-start: var(--ui-border-width) solid var(--ui-border-divider);
5332
5332
  }
5333
- [data-component~="ui-input-group"][data-ui-input-group-state~="prefixKind=icon"][data-v-875c0c72] {
5333
+ [data-component~="ui-input-group"][data-ui-input-group-state~="prefixKind=icon"][data-v-57e02424] {
5334
5334
  --_ui-default-input-padding-inline-start: var(--ui-space-2);
5335
5335
  }
5336
5336
  [data-component~="ui-input-group"][data-ui-input-group-state~="prefixKind=icon"]
5337
- .affix[data-v-875c0c72]:first-child {
5337
+ .affix[data-v-57e02424]:first-child {
5338
5338
  padding-inline-end: 0;
5339
5339
  border-inline-end: 0;
5340
5340
  background: transparent;
@@ -5342,7 +5342,7 @@ svg[data-v-521a280a-s] {
5342
5342
 
5343
5343
  /* Centred rather than padded above and below: the group is exactly a lone Input's height, so a
5344
5344
  small button sits inside it with the difference split evenly, and the field keeps its height. */
5345
- .action[data-v-875c0c72] {
5345
+ .action[data-v-57e02424] {
5346
5346
  display: flex;
5347
5347
  flex: none;
5348
5348
  align-items: center;
@@ -5350,26 +5350,46 @@ svg[data-v-521a280a-s] {
5350
5350
  }
5351
5351
 
5352
5352
  /* Multiline text owns the first row; its action remains inside the same frame below it. */
5353
- [data-component~="ui-input-group"][data-ui-input-group-state~="multiline"][data-v-875c0c72] {
5353
+ [data-component~="ui-input-group"][data-ui-input-group-state~="multiline"][data-v-57e02424] {
5354
5354
  display: grid;
5355
5355
  grid-template-columns: auto minmax(0, 1fr) auto;
5356
5356
  }
5357
- [data-component~="ui-input-group"][data-ui-input-group-state~="multiline"] .field[data-v-875c0c72] {
5357
+ [data-component~="ui-input-group"][data-ui-input-group-state~="multiline"] .field[data-v-57e02424] {
5358
5358
  grid-column: 2;
5359
5359
  }
5360
- [data-component~="ui-input-group"][data-ui-input-group-state~="multiline"] .action[data-v-875c0c72] {
5360
+ [data-component~="ui-input-group"][data-ui-input-group-state~="multiline"] .action[data-v-57e02424] {
5361
5361
  grid-column: 1 / -1;
5362
5362
  justify-content: end;
5363
5363
  padding: var(--ui-space-2);
5364
5364
  padding-block-start: 0;
5365
5365
  }
5366
- .affix[data-v-875c0c72]:empty,
5367
- .action[data-v-875c0c72]:empty {
5366
+
5367
+ /* The same textarea keeps its full resizeable box. Its text reserves the action's live width,
5368
+ so a translated label or pending indicator cannot cover what the person types. */
5369
+ [data-component~="ui-input-group"][data-ui-input-group-state~="multiline"][data-ui-input-group-state~="actionPosition=top-end"][data-v-57e02424] {
5370
+ --_ui-default-textarea-padding-inline-end: calc(
5371
+ var(--_ui-input-group-action-inline-size, 7rem) + var(--ui-space-3)
5372
+ );
5373
+ }
5374
+ [data-component~="ui-input-group"][data-ui-input-group-state~="multiline"][data-ui-input-group-state~="actionPosition=top-end"]
5375
+ .field[data-v-57e02424] {
5376
+ grid-row: 1;
5377
+ }
5378
+ [data-component~="ui-input-group"][data-ui-input-group-state~="multiline"][data-ui-input-group-state~="actionPosition=top-end"]
5379
+ .action[data-v-57e02424] {
5380
+ grid-column: 2;
5381
+ grid-row: 1;
5382
+ align-self: start;
5383
+ justify-self: end;
5384
+ padding: var(--ui-space-2);
5385
+ }
5386
+ .affix[data-v-57e02424]:empty,
5387
+ .action[data-v-57e02424]:empty {
5368
5388
  display: none;
5369
5389
  }
5370
5390
 
5371
5391
  /* A component that sets its display still honours the hidden attribute on its root. */
5372
- [data-component~="ui-input-group"][hidden][data-v-875c0c72] {
5392
+ [data-component~="ui-input-group"][hidden][data-v-57e02424] {
5373
5393
  display: none;
5374
5394
  }
5375
5395
 
@@ -8236,7 +8256,11 @@ tbody tr[data-v-93c9ac9c-s]:last-child > * {
8236
8256
  syntax: "*";
8237
8257
  inherits: false;
8238
8258
  }
8239
- [data-component~="ui-textarea"][data-v-cb05f253] {
8259
+ @property --ui-textarea-padding-inline-end {
8260
+ syntax: "*";
8261
+ inherits: false;
8262
+ }
8263
+ [data-component~="ui-textarea"][data-v-f5b6ae17] {
8240
8264
  box-sizing: border-box;
8241
8265
  display: inline-block;
8242
8266
  inline-size: 100%;
@@ -8245,6 +8269,10 @@ tbody tr[data-v-93c9ac9c-s]:last-child > * {
8245
8269
  margin: 0;
8246
8270
  --_padding-block: var(--ui-space-2);
8247
8271
  padding: var(--ui-space-2) var(--ui-space-3);
8272
+ padding-inline-end: var(
8273
+ --ui-textarea-padding-inline-end,
8274
+ var(--_ui-default-textarea-padding-inline-end, var(--ui-space-3))
8275
+ );
8248
8276
  appearance: none;
8249
8277
  resize: vertical;
8250
8278
  border: var(
@@ -8277,15 +8305,15 @@ tbody tr[data-v-93c9ac9c-s]:last-child > * {
8277
8305
  }
8278
8306
 
8279
8307
  /* Tabbing into a field selects its text; tint that selection softly instead of the page highlight. */
8280
- [data-component~="ui-textarea"][data-v-cb05f253]::selection {
8308
+ [data-component~="ui-textarea"][data-v-f5b6ae17]::selection {
8281
8309
  background: color-mix(in srgb, var(--ui-accent-solid) 20%, transparent);
8282
8310
  color: inherit;
8283
8311
  }
8284
- [data-component~="ui-textarea"][data-v-cb05f253]::placeholder {
8312
+ [data-component~="ui-textarea"][data-v-f5b6ae17]::placeholder {
8285
8313
  color: var(--ui-control-placeholder, var(--ui-text-secondary));
8286
8314
  opacity: 1;
8287
8315
  }
8288
- [data-component~="ui-textarea"][data-v-cb05f253]:hover:not(:focus):not(:disabled):not(:read-only):not([aria-invalid="true"]):not(:is(:user-invalid, [data-user-invalid])) {
8316
+ [data-component~="ui-textarea"][data-v-f5b6ae17]:hover:not(:focus):not(:disabled):not(:read-only):not([aria-invalid="true"]):not(:is(:user-invalid, [data-user-invalid])) {
8289
8317
  border-color: var(
8290
8318
  --ui-textarea-border-hover,
8291
8319
  var(
@@ -8294,7 +8322,7 @@ tbody tr[data-v-93c9ac9c-s]:last-child > * {
8294
8322
  )
8295
8323
  );
8296
8324
  }
8297
- [data-component~="ui-textarea"][data-v-cb05f253]:focus-visible {
8325
+ [data-component~="ui-textarea"][data-v-f5b6ae17]:focus-visible {
8298
8326
  border-color: var(
8299
8327
  --ui-textarea-focus-border,
8300
8328
  var(--_ui-default-textarea-focus-border, var(--ui-control-focus, var(--ui-accent-solid)))
@@ -8311,14 +8339,14 @@ tbody tr[data-v-93c9ac9c-s]:last-child > * {
8311
8339
  }
8312
8340
 
8313
8341
  /* The app's invalid flag, or the browser's own verdict once the user has left an invalid field. */
8314
- [data-component~="ui-textarea"][aria-invalid="true"][data-v-cb05f253],
8315
- [data-component~="ui-textarea"][data-v-cb05f253]:is(:user-invalid, [data-user-invalid]) {
8342
+ [data-component~="ui-textarea"][aria-invalid="true"][data-v-f5b6ae17],
8343
+ [data-component~="ui-textarea"][data-v-f5b6ae17]:is(:user-invalid, [data-user-invalid]) {
8316
8344
  border-color: var(
8317
8345
  --ui-textarea-invalid-border,
8318
8346
  var(--_ui-default-textarea-invalid-border, var(--ui-field-danger, var(--ui-danger-solid)))
8319
8347
  );
8320
8348
  }
8321
- [data-component~="ui-textarea"][data-v-cb05f253]:is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible {
8349
+ [data-component~="ui-textarea"][data-v-f5b6ae17]:is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible {
8322
8350
  box-shadow: var(
8323
8351
  --ui-textarea-invalid-focus-shadow,
8324
8352
  var(
@@ -8335,24 +8363,32 @@ tbody tr[data-v-93c9ac9c-s]:last-child > * {
8335
8363
  )
8336
8364
  );
8337
8365
  }
8338
- [data-component~="ui-textarea"][data-v-cb05f253]:disabled {
8366
+ [data-component~="ui-textarea"][data-v-f5b6ae17]:disabled {
8339
8367
  background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
8340
8368
  color: var(--ui-disabled-text);
8341
8369
  box-shadow: none;
8342
8370
  cursor: not-allowed;
8343
8371
  }
8344
- [data-component~="ui-textarea"][data-ui-textarea-state~="size=sm"][data-v-cb05f253] {
8372
+ [data-component~="ui-textarea"][data-ui-textarea-state~="size=sm"][data-v-f5b6ae17] {
8345
8373
  --_padding-block: var(--ui-space-1);
8346
8374
  padding: var(--ui-space-1) var(--ui-space-2);
8375
+ padding-inline-end: var(
8376
+ --ui-textarea-padding-inline-end,
8377
+ var(--_ui-default-textarea-padding-inline-end, var(--ui-space-2))
8378
+ );
8347
8379
  font-size: var(--ui-font-size-sm);
8348
8380
  }
8349
- [data-component~="ui-textarea"][data-ui-textarea-state~="size=lg"][data-v-cb05f253] {
8381
+ [data-component~="ui-textarea"][data-ui-textarea-state~="size=lg"][data-v-f5b6ae17] {
8350
8382
  --_padding-block: var(--ui-space-3);
8351
8383
  padding: var(--ui-space-3) var(--ui-space-4);
8384
+ padding-inline-end: var(
8385
+ --ui-textarea-padding-inline-end,
8386
+ var(--_ui-default-textarea-padding-inline-end, var(--ui-space-4))
8387
+ );
8352
8388
  font-size: var(--ui-font-size-md);
8353
8389
  }
8354
8390
  @supports (field-sizing: content) {
8355
- [data-component~="ui-textarea"][data-ui-textarea-state~="autosize"][data-v-cb05f253] {
8391
+ [data-component~="ui-textarea"][data-ui-textarea-state~="autosize"][data-v-f5b6ae17] {
8356
8392
  field-sizing: content;
8357
8393
  min-block-size: calc(var(--_rows) * 1lh + var(--_padding-block) + var(--_padding-block) + 2px);
8358
8394
  }
@@ -8360,13 +8396,13 @@ tbody tr[data-v-93c9ac9c-s]:last-child > * {
8360
8396
 
8361
8397
  /* Below 16px, iOS zooms the page into the focused field, so touch keeps body-size text. */
8362
8398
  @media (pointer: coarse) {
8363
- [data-component~="ui-textarea"][data-ui-textarea-state~="size=sm"][data-v-cb05f253] {
8399
+ [data-component~="ui-textarea"][data-ui-textarea-state~="size=sm"][data-v-f5b6ae17] {
8364
8400
  font-size: inherit;
8365
8401
  }
8366
8402
  }
8367
8403
 
8368
8404
  /* A component that sets its display still honours the hidden attribute on its root. */
8369
- [data-component~="ui-textarea"][hidden][data-v-cb05f253] {
8405
+ [data-component~="ui-textarea"][hidden][data-v-f5b6ae17] {
8370
8406
  display: none;
8371
8407
  }
8372
8408