@threadlabs/looma 0.11.1 → 0.11.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.
@@ -3123,7 +3123,7 @@ svg[data-v-bcedd63e-s] {
3123
3123
  display: none;
3124
3124
  }
3125
3125
 
3126
- [data-component~="ui-input"][data-v-f84acfe8] {
3126
+ [data-component~="ui-input"][data-v-12ffae5a] {
3127
3127
  box-sizing: border-box;
3128
3128
  display: inline-block;
3129
3129
  inline-size: 100%;
@@ -3132,9 +3132,9 @@ svg[data-v-bcedd63e-s] {
3132
3132
  margin: 0;
3133
3133
  padding: var(--ui-space-2) var(--ui-space-3);
3134
3134
  appearance: none;
3135
- border: 1px solid var(--ui-control-border, var(--ui-border-strong));
3135
+ border: 1px solid var(--ui-input-border, var(--ui-control-border, var(--ui-border-strong)));
3136
3136
  border-radius: var(--ui-input-radius, var(--ui-radius-md));
3137
- background: var(--ui-control-surface, var(--ui-surface-elevated));
3137
+ background: var(--ui-input-surface, var(--ui-control-surface, var(--ui-surface-elevated)));
3138
3138
  color: var(--ui-text-primary);
3139
3139
  font: inherit;
3140
3140
  line-height: var(--ui-line-height-md);
@@ -3146,19 +3146,22 @@ svg[data-v-bcedd63e-s] {
3146
3146
  }
3147
3147
 
3148
3148
  /* Tabbing into a field selects its text; tint that selection softly instead of the page highlight. */
3149
- [data-component~="ui-input"][data-v-f84acfe8]::selection {
3149
+ [data-component~="ui-input"][data-v-12ffae5a]::selection {
3150
3150
  background: color-mix(in srgb, var(--ui-accent-solid) 20%, transparent);
3151
3151
  color: inherit;
3152
3152
  }
3153
- [data-component~="ui-input"][data-v-f84acfe8]::placeholder {
3153
+ [data-component~="ui-input"][data-v-12ffae5a]::placeholder {
3154
3154
  color: var(--ui-control-placeholder, var(--ui-text-secondary));
3155
3155
  opacity: 1;
3156
3156
  }
3157
- [data-component~="ui-input"][data-v-f84acfe8]:hover:not(:focus):not(:disabled) {
3158
- border-color: var(--ui-control-border-hover, var(--ui-text-secondary));
3157
+ [data-component~="ui-input"][data-v-12ffae5a]:hover:not(:focus):not(:disabled) {
3158
+ border-color: var(
3159
+ --ui-input-border-hover,
3160
+ var(--ui-control-border-hover, var(--ui-text-secondary))
3161
+ );
3159
3162
  }
3160
- [data-component~="ui-input"][data-v-f84acfe8]:focus-visible {
3161
- border-color: var(--ui-control-focus, var(--ui-accent-solid));
3163
+ [data-component~="ui-input"][data-v-12ffae5a]:focus-visible {
3164
+ border-color: var(--ui-input-focus-border, var(--ui-control-focus, var(--ui-accent-solid)));
3162
3165
  outline: none;
3163
3166
  box-shadow: var(
3164
3167
  --ui-input-focus-shadow,
@@ -3168,16 +3171,16 @@ svg[data-v-bcedd63e-s] {
3168
3171
  }
3169
3172
 
3170
3173
  /* The app's invalid flag, or the browser's own verdict once the user has left an invalid field. */
3171
- [data-component~="ui-input"][aria-invalid="true"][data-v-f84acfe8],
3172
- [data-component~="ui-input"][data-v-f84acfe8]:is(:user-invalid, [data-user-invalid]) {
3174
+ [data-component~="ui-input"][aria-invalid="true"][data-v-12ffae5a],
3175
+ [data-component~="ui-input"][data-v-12ffae5a]:is(:user-invalid, [data-user-invalid]) {
3173
3176
  border-color: var(--ui-danger-solid);
3174
3177
  }
3175
- [data-component~="ui-input"][data-v-f84acfe8]:is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible {
3178
+ [data-component~="ui-input"][data-v-12ffae5a]:is([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])):focus-visible {
3176
3179
  box-shadow:
3177
3180
  var(--ui-control-inset),
3178
3181
  0 0 0 3px color-mix(in srgb, var(--ui-danger-solid) 22%, transparent);
3179
3182
  }
3180
- [data-component~="ui-input"][data-v-f84acfe8]:disabled {
3183
+ [data-component~="ui-input"][data-v-12ffae5a]:disabled {
3181
3184
  background: var(--ui-control-surface-disabled, var(--ui-surface-muted));
3182
3185
  color: var(--ui-text-muted);
3183
3186
  box-shadow: none;
@@ -3188,14 +3191,84 @@ svg[data-v-bcedd63e-s] {
3188
3191
  * scroll vertically inside the field. Native inputs already center their single line. */
3189
3192
 
3190
3193
  /* A component that sets its display still honours the hidden attribute on its root. */
3191
- [data-component~="ui-input"][hidden][data-v-f84acfe8] {
3194
+ [data-component~="ui-input"][hidden][data-v-12ffae5a] {
3195
+ display: none;
3196
+ }
3197
+
3198
+ /* An input with fixed text before or after it, such as a domain after a site's name
3199
+ ("acme" + ".example.com") or slashes around a path. The group draws the field's border and
3200
+ focus ring around the input and its affixes together; the input inside drops its own through
3201
+ its custom properties, so it is still the one ui-input, with its form behaviour intact. The
3202
+ affixes are plain text beside the input, so name the input with a label that says what the
3203
+ whole value is. */
3204
+ [data-component~="ui-input-group"][data-v-0a135fc1] {
3205
+ --ui-input-border: transparent;
3206
+ --ui-input-border-hover: transparent;
3207
+ --ui-input-focus-border: transparent;
3208
+ --ui-input-shadow: none;
3209
+ --ui-input-focus-shadow: none;
3210
+ --ui-input-radius: 0;
3211
+ --ui-input-surface: transparent;
3212
+
3213
+ display: flex;
3214
+ align-items: stretch;
3215
+ box-sizing: border-box;
3216
+ inline-size: 100%;
3217
+ min-inline-size: 0;
3218
+ min-block-size: var(--ui-control-size-md);
3219
+ border: 1px solid var(--ui-border-strong);
3220
+ border-radius: var(--ui-radius-md);
3221
+ background: var(--ui-surface-elevated);
3222
+ box-shadow: var(--ui-control-inset);
3223
+ overflow: hidden;
3224
+ transition:
3225
+ border-color var(--ui-motion-fast) var(--ui-motion-ease),
3226
+ box-shadow var(--ui-motion-fast) var(--ui-motion-ease);
3227
+ }
3228
+ [data-component~="ui-input-group"][data-v-0a135fc1]:hover:not(:focus-within) {
3229
+ border-color: var(--ui-text-secondary);
3230
+ }
3231
+ [data-component~="ui-input-group"][data-v-0a135fc1]:focus-within {
3232
+ border-color: var(--ui-accent-solid);
3233
+ box-shadow:
3234
+ var(--ui-control-inset),
3235
+ var(--ui-control-focus-halo-shadow);
3236
+ }
3237
+ [data-component~="ui-input-group"][data-v-0a135fc1]:has([aria-invalid="true"], :is(:user-invalid, [data-user-invalid])) {
3238
+ border-color: var(--ui-danger-solid);
3239
+ }
3240
+ [data-component~="ui-input-group"][data-ui-input-group-state~="disabled"][data-v-0a135fc1] {
3241
+ background: var(--ui-surface-muted);
3242
+ box-shadow: none;
3243
+ }
3244
+ .field[data-v-0a135fc1] {
3245
+ display: flex;
3246
+ flex: 1;
3247
+ min-inline-size: 0;
3248
+ }
3249
+ .affix[data-v-0a135fc1] {
3250
+ display: inline-flex;
3251
+ flex: none;
3252
+ align-items: center;
3253
+ padding-inline: var(--ui-space-2);
3254
+ color: var(--ui-text-secondary);
3255
+ font-family: var(--ui-font-family-mono);
3256
+ font-size: var(--ui-font-size-sm);
3257
+ white-space: nowrap;
3258
+ }
3259
+ .affix[data-v-0a135fc1]:empty {
3260
+ display: none;
3261
+ }
3262
+
3263
+ /* A component that sets its display still honours the hidden attribute on its root. */
3264
+ [data-component~="ui-input-group"][hidden][data-v-0a135fc1] {
3192
3265
  display: none;
3193
3266
  }
3194
3267
 
3195
3268
  /* A list of items (ui-list-item). It owns the spacing between them, so a view never sets it. The
3196
3269
  explicit list role keeps the list announced as one: some browsers drop it from a list with no
3197
3270
  markers. */
3198
- [data-component~="ui-list"][data-v-935b1197] {
3271
+ [data-component~="ui-list"][data-v-9e6cf63f] {
3199
3272
  display: flex;
3200
3273
  flex-direction: column;
3201
3274
  gap: var(--ui-list-gap, var(--ui-space-1));
@@ -3204,7 +3277,16 @@ svg[data-v-bcedd63e-s] {
3204
3277
  padding: 0;
3205
3278
  list-style: none;
3206
3279
  }
3207
- [data-component~="ui-list"][data-ui-list-state~="layout=grid"][data-v-935b1197] {
3280
+
3281
+ /* Compact passes its size to the items through private properties, which cross into each item. */
3282
+ [data-component~="ui-list"][data-ui-list-state~="density=compact"][data-v-9e6cf63f] {
3283
+ --_ui-list-item-min-size: 0;
3284
+ --_ui-list-item-padding-block: 0;
3285
+ --_ui-list-item-padding-inline: 0;
3286
+ --_ui-list-item-title-weight: var(--ui-font-normal);
3287
+ gap: var(--ui-list-gap, var(--ui-space-2));
3288
+ }
3289
+ [data-component~="ui-list"][data-ui-list-state~="layout=grid"][data-v-9e6cf63f] {
3208
3290
  display: grid;
3209
3291
  grid-template-columns:
3210
3292
  repeat(auto-fill, minmax(min(100%, var(--ui-list-min-item-width, 14rem)), 1fr));
@@ -3212,7 +3294,7 @@ svg[data-v-bcedd63e-s] {
3212
3294
  }
3213
3295
 
3214
3296
  /* A component that sets its display still honours the hidden attribute on its root. */
3215
- [data-component~="ui-list"][hidden][data-v-935b1197] {
3297
+ [data-component~="ui-list"][hidden][data-v-9e6cf63f] {
3216
3298
  display: none;
3217
3299
  }
3218
3300
 
@@ -3225,95 +3307,101 @@ svg[data-v-bcedd63e-s] {
3225
3307
  padding follow it too, and the item takes the link's focus ring. The link stays a real link, so
3226
3308
  a router, a modified click, and "open in new tab" all work. Trailing controls sit above it and
3227
3309
  stay their own. */
3228
- [data-component~="ui-list-item"][data-v-d61daf46] {
3310
+ [data-component~="ui-list-item"][data-v-30896b18] {
3229
3311
  position: relative;
3230
3312
  box-sizing: border-box;
3231
3313
  display: flex;
3232
3314
  align-items: center;
3233
3315
  gap: var(--ui-list-item-gap, var(--ui-space-3));
3234
3316
  min-inline-size: 0;
3235
- min-block-size: var(--ui-control-size, 2.5rem);
3236
- padding-block: var(--ui-list-item-padding-block, var(--ui-space-2));
3237
- padding-inline: var(--ui-list-item-padding-inline, var(--ui-space-3));
3317
+ min-block-size: var(--_ui-list-item-min-size, var(--ui-control-size, 2.5rem));
3318
+ padding-block: var(
3319
+ --ui-list-item-padding-block,
3320
+ var(--_ui-list-item-padding-block, var(--ui-space-2))
3321
+ );
3322
+ padding-inline: var(
3323
+ --ui-list-item-padding-inline,
3324
+ var(--_ui-list-item-padding-inline, var(--ui-space-3))
3325
+ );
3238
3326
  border-radius: var(--ui-radius-md);
3239
3327
  color: var(--ui-text-primary);
3240
3328
  transition:
3241
3329
  background-color var(--ui-motion-fast) var(--ui-motion-ease),
3242
3330
  border-color var(--ui-motion-fast) var(--ui-motion-ease);
3243
3331
  }
3244
- [data-component~="ui-list-item"][data-ui-list-item-state~="variant=card"][data-v-d61daf46] {
3332
+ [data-component~="ui-list-item"][data-ui-list-item-state~="variant=card"][data-v-30896b18] {
3245
3333
  padding-block: var(--ui-list-item-padding-block, var(--ui-space-3));
3246
3334
  padding-inline: var(--ui-list-item-padding-inline, var(--ui-space-4));
3247
3335
  border: 1px solid var(--ui-border-default);
3248
3336
  border-radius: var(--ui-radius-lg);
3249
3337
  background: var(--ui-surface-raised);
3250
3338
  }
3251
- [data-component~="ui-list-item"][data-v-d61daf46]:has(.title a[href]:hover) {
3339
+ [data-component~="ui-list-item"][data-v-30896b18]:has(.title a[href]:hover) {
3252
3340
  background: var(--ui-surface-hover);
3253
3341
  }
3254
- [data-component~="ui-list-item"][data-ui-list-item-state~="variant=card"][data-v-d61daf46]:has(.title
3342
+ [data-component~="ui-list-item"][data-ui-list-item-state~="variant=card"][data-v-30896b18]:has(.title
3255
3343
  a[href]:hover) {
3256
3344
  border-color: var(--ui-border-strong);
3257
3345
  }
3258
- [data-component~="ui-list-item"][data-ui-list-item-state~="current"][data-v-d61daf46] {
3346
+ [data-component~="ui-list-item"][data-ui-list-item-state~="current"][data-v-30896b18] {
3259
3347
  background: var(--ui-surface-hover);
3260
3348
  }
3261
- [data-component~="ui-list-item"][data-v-d61daf46]:has(.title a[href]:focus-visible) {
3349
+ [data-component~="ui-list-item"][data-v-30896b18]:has(.title a[href]:focus-visible) {
3262
3350
  box-shadow: 0 0 0 2px var(--ui-focus-ring);
3263
3351
  }
3264
- .leading[data-v-d61daf46],
3265
- .trailing[data-v-d61daf46] {
3352
+ .leading[data-v-30896b18],
3353
+ .trailing[data-v-30896b18] {
3266
3354
  display: inline-flex;
3267
3355
  flex: none;
3268
3356
  align-items: center;
3269
3357
  gap: var(--ui-space-2);
3270
3358
  }
3271
- .leading[data-v-d61daf46] {
3359
+ .leading[data-v-30896b18] {
3272
3360
  color: var(--ui-text-muted);
3273
3361
  font-size: var(--ui-list-item-icon-size, var(--ui-font-size-lg));
3274
3362
  }
3275
3363
 
3276
3364
  /* Trailing controls take their own clicks, above the title link's stretched hit area. */
3277
- .trailing[data-v-d61daf46] {
3365
+ .trailing[data-v-30896b18] {
3278
3366
  position: relative;
3279
3367
  z-index: 1;
3280
3368
  color: var(--ui-text-muted);
3281
3369
  font-size: var(--ui-font-size-sm);
3282
3370
  }
3283
- .content[data-v-d61daf46] {
3371
+ .content[data-v-30896b18] {
3284
3372
  display: flex;
3285
3373
  flex: 1;
3286
3374
  flex-direction: column;
3287
3375
  gap: var(--ui-space-0-5, 2px);
3288
3376
  min-inline-size: 0;
3289
3377
  }
3290
- .title[data-v-d61daf46],
3291
- .description[data-v-d61daf46] {
3378
+ .title[data-v-30896b18],
3379
+ .description[data-v-30896b18] {
3292
3380
  display: block;
3293
3381
  min-inline-size: 0;
3294
3382
  overflow: hidden;
3295
3383
  text-overflow: ellipsis;
3296
3384
  white-space: nowrap;
3297
3385
  }
3298
- .title[data-v-d61daf46] {
3386
+ .title[data-v-30896b18] {
3299
3387
  font-size: var(--ui-font-size-md);
3300
- font-weight: var(--ui-font-medium);
3388
+ font-weight: var(--_ui-list-item-title-weight, var(--ui-font-medium));
3301
3389
  line-height: var(--ui-line-height-tight);
3302
3390
  }
3303
- .description[data-v-d61daf46] {
3391
+ .description[data-v-30896b18] {
3304
3392
  color: var(--ui-text-muted);
3305
3393
  font-size: var(--ui-font-size-sm);
3306
3394
  line-height: var(--ui-line-height-tight);
3307
3395
  }
3308
- .title > a[data-v-d61daf46-s] {
3396
+ .title > a[data-v-30896b18-s] {
3309
3397
  color: inherit;
3310
3398
  text-decoration: none;
3311
3399
  }
3312
- .title > a[data-v-d61daf46-s]:focus-visible {
3400
+ .title > a[data-v-30896b18-s]:focus-visible {
3313
3401
  outline: none;
3314
3402
  box-shadow: none;
3315
3403
  }
3316
- .title > a[href][data-v-d61daf46-s]::after {
3404
+ .title > a[href][data-v-30896b18-s]::after {
3317
3405
  position: absolute;
3318
3406
  inset: 0;
3319
3407
  border-radius: inherit;
@@ -3321,14 +3409,14 @@ svg[data-v-bcedd63e-s] {
3321
3409
  }
3322
3410
 
3323
3411
  /* An unused region takes no space. */
3324
- .leading[data-v-d61daf46]:empty,
3325
- .description[data-v-d61daf46]:empty,
3326
- .trailing[data-v-d61daf46]:empty {
3412
+ .leading[data-v-30896b18]:empty,
3413
+ .description[data-v-30896b18]:empty,
3414
+ .trailing[data-v-30896b18]:empty {
3327
3415
  display: none;
3328
3416
  }
3329
3417
 
3330
3418
  /* A component that sets its display still honours the hidden attribute on its root. */
3331
- [data-component~="ui-list-item"][hidden][data-v-d61daf46] {
3419
+ [data-component~="ui-list-item"][hidden][data-v-30896b18] {
3332
3420
  display: none;
3333
3421
  }
3334
3422
 
package/vue/index.d.ts CHANGED
@@ -32,6 +32,7 @@ export { default as Grid } from "./UiGrid.js";
32
32
  export { default as Icon } from "./UiIcon.js";
33
33
  export { default as IconButton } from "./UiIconButton.js";
34
34
  export { default as Input } from "./UiInput.js";
35
+ export { default as InputGroup } from "./UiInputGroup.js";
35
36
  export { default as List } from "./UiList.js";
36
37
  export { default as ListItem } from "./UiListItem.js";
37
38
  export { default as Menu } from "./UiMenu.js";
package/vue/index.js CHANGED
@@ -33,6 +33,7 @@ import { t as UiFormField_default } from "./chunks/UiFormField.js";
33
33
  import { t as UiGrid_default } from "./chunks/UiGrid.js";
34
34
  import { t as UiIconButton_default } from "./chunks/UiIconButton.js";
35
35
  import { t as UiInput_default } from "./chunks/UiInput.js";
36
+ import { t as UiInputGroup_default } from "./chunks/UiInputGroup.js";
36
37
  import { t as UiList_default } from "./chunks/UiList.js";
37
38
  import { t as UiListItem_default } from "./chunks/UiListItem.js";
38
39
  import { t as UiMenu_default } from "./chunks/UiMenu.js";
@@ -62,4 +63,4 @@ import { t as UiTopBar_default } from "./chunks/UiTopBar.js";
62
63
  import { t as UiTree_default } from "./chunks/UiTree.js";
63
64
  import { t as UiTreeItem_default } from "./chunks/UiTreeItem.js";
64
65
  import { trackInputModality } from "@threadlabs/looma/components/shared/input-modality.js";
65
- export { UiActionBar_default as ActionBar, UiAffordanceScope_default as AffordanceScope, UiAvatar_default as Avatar, UiAvatarGroup_default as AvatarGroup, UiBadge_default as Badge, UiBreadcrumbItem_default as BreadcrumbItem, UiBreadcrumbs_default as Breadcrumbs, UiButton_default as Button, UiCallout_default as Callout, UiCard_default as Card, UiCheckbox_default as Checkbox, UiCluster_default as Cluster, UiCombobox_default as Combobox, UiContainer_default as Container, UiContextMenu_default as ContextMenu, UiCover_default as Cover, UiDescriptionItem_default as DescriptionItem, UiDescriptionList_default as DescriptionList, UiDialog_default as Dialog, UiDisclosure_default as Disclosure, UiEditable_default as Editable, UiEditorInsertTableGrid_default as EditorInsertTableGrid, UiEditorMentionMenu_default as EditorMentionMenu, UiEditorSlashMenu_default as EditorSlashMenu, UiEditorTableContextMenu_default as EditorTableContextMenu, UiEditorTableOverlay_default as EditorTableOverlay, UiEditorTableToolbar_default as EditorTableToolbar, UiEditorToolbar_default as EditorToolbar, UiFloatingActionButton_default as FloatingActionButton, UiFormField_default as FormField, UiGrid_default as Grid, UiIcon_default as Icon, UiIconButton_default as IconButton, UiInput_default as Input, UiList_default as List, UiListItem_default as ListItem, UiMenu_default as Menu, UiMenuItem_default as MenuItem, UiPageHeader_default as PageHeader, UiPopover_default as Popover, UiRadio_default as Radio, UiRadioGroup_default as RadioGroup, UiReel_default as Reel, UiScrollArea_default as ScrollArea, UiSearchResultRow_default as SearchResultRow, UiSearchShell_default as SearchShell, UiSection_default as Section, UiSelect_default as Select, UiSeparator_default as Separator, UiSidebar_default as Sidebar, UiSpinner_default as Spinner, UiStack_default as Stack, UiStatusMessage_default as StatusMessage, UiSwitch_default as Switch, UiSwitcher_default as Switcher, UiTabs_default as Tabs, UiText_default as Text, UiTextarea_default as Textarea, UiToastRegion_default as ToastRegion, UiTooltip_default as Tooltip, UiTopBar_default as TopBar, UiTree_default as Tree, UiTreeItem_default as TreeItem, trackInputModality };
66
+ export { UiActionBar_default as ActionBar, UiAffordanceScope_default as AffordanceScope, UiAvatar_default as Avatar, UiAvatarGroup_default as AvatarGroup, UiBadge_default as Badge, UiBreadcrumbItem_default as BreadcrumbItem, UiBreadcrumbs_default as Breadcrumbs, UiButton_default as Button, UiCallout_default as Callout, UiCard_default as Card, UiCheckbox_default as Checkbox, UiCluster_default as Cluster, UiCombobox_default as Combobox, UiContainer_default as Container, UiContextMenu_default as ContextMenu, UiCover_default as Cover, UiDescriptionItem_default as DescriptionItem, UiDescriptionList_default as DescriptionList, UiDialog_default as Dialog, UiDisclosure_default as Disclosure, UiEditable_default as Editable, UiEditorInsertTableGrid_default as EditorInsertTableGrid, UiEditorMentionMenu_default as EditorMentionMenu, UiEditorSlashMenu_default as EditorSlashMenu, UiEditorTableContextMenu_default as EditorTableContextMenu, UiEditorTableOverlay_default as EditorTableOverlay, UiEditorTableToolbar_default as EditorTableToolbar, UiEditorToolbar_default as EditorToolbar, UiFloatingActionButton_default as FloatingActionButton, UiFormField_default as FormField, UiGrid_default as Grid, UiIcon_default as Icon, UiIconButton_default as IconButton, UiInput_default as Input, UiInputGroup_default as InputGroup, UiList_default as List, UiListItem_default as ListItem, UiMenu_default as Menu, UiMenuItem_default as MenuItem, UiPageHeader_default as PageHeader, UiPopover_default as Popover, UiRadio_default as Radio, UiRadioGroup_default as RadioGroup, UiReel_default as Reel, UiScrollArea_default as ScrollArea, UiSearchResultRow_default as SearchResultRow, UiSearchShell_default as SearchShell, UiSection_default as Section, UiSelect_default as Select, UiSeparator_default as Separator, UiSidebar_default as Sidebar, UiSpinner_default as Spinner, UiStack_default as Stack, UiStatusMessage_default as StatusMessage, UiSwitch_default as Switch, UiSwitcher_default as Switcher, UiTabs_default as Tabs, UiText_default as Text, UiTextarea_default as Textarea, UiToastRegion_default as ToastRegion, UiTooltip_default as Tooltip, UiTopBar_default as TopBar, UiTree_default as Tree, UiTreeItem_default as TreeItem, trackInputModality };