@scattered-light/loomiere-base-ui 0.2.0 → 0.3.0

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 (56) hide show
  1. package/dist/design-system/components/Button/README.md +1 -1
  2. package/dist/design-system/components/IconButton/README.md +31 -0
  3. package/dist/design-system/components/IconButton/preview.html +19 -0
  4. package/dist/design-system/components/Popover/README.md +2 -2
  5. package/dist/design-system/components/Popover/preview.html +1 -1
  6. package/dist/design-system/components/bundle.js +5 -5
  7. package/dist/design-system/components/index.d.ts +13 -2
  8. package/dist/design-system/components/styles.css +119 -46
  9. package/dist/index.d.ts +13 -2
  10. package/dist/index.js +36 -26
  11. package/dist/index.js.map +1 -1
  12. package/dist/styles/components/Accordion.css +1 -1
  13. package/dist/styles/components/AlertDialog.css +1 -1
  14. package/dist/styles/components/Autocomplete.css +1 -1
  15. package/dist/styles/components/Avatar.css +1 -1
  16. package/dist/styles/components/Button.css +25 -5
  17. package/dist/styles/components/Checkbox.css +1 -1
  18. package/dist/styles/components/CheckboxGroup.css +1 -1
  19. package/dist/styles/components/Collapsible.css +1 -1
  20. package/dist/styles/components/Combobox.css +1 -1
  21. package/dist/styles/components/ContextMenu.css +1 -1
  22. package/dist/styles/components/Dialog.css +1 -1
  23. package/dist/styles/components/Drawer.css +1 -1
  24. package/dist/styles/components/Field.css +1 -1
  25. package/dist/styles/components/Fieldset.css +1 -1
  26. package/dist/styles/components/Form.css +1 -1
  27. package/dist/styles/components/IconButton.css +49 -0
  28. package/dist/styles/components/Input.css +1 -1
  29. package/dist/styles/components/Menu.css +1 -1
  30. package/dist/styles/components/Menubar.css +1 -1
  31. package/dist/styles/components/Meter.css +1 -1
  32. package/dist/styles/components/NavigationMenu.css +1 -1
  33. package/dist/styles/components/NumberField.css +1 -1
  34. package/dist/styles/components/OTPField.css +1 -1
  35. package/dist/styles/components/Popover.css +5 -2
  36. package/dist/styles/components/PreviewCard.css +1 -1
  37. package/dist/styles/components/Progress.css +1 -1
  38. package/dist/styles/components/Radio.css +1 -1
  39. package/dist/styles/components/ScrollArea.css +1 -1
  40. package/dist/styles/components/Select.css +1 -1
  41. package/dist/styles/components/Separator.css +1 -1
  42. package/dist/styles/components/Slider.css +1 -1
  43. package/dist/styles/components/Switch.css +1 -1
  44. package/dist/styles/components/Tabs.css +1 -1
  45. package/dist/styles/components/Toast.css +1 -1
  46. package/dist/styles/components/Toggle.css +1 -1
  47. package/dist/styles/components/ToggleGroup.css +1 -1
  48. package/dist/styles/components/Toolbar.css +1 -1
  49. package/dist/styles/components/Tooltip.css +1 -1
  50. package/dist/styles/index.css +2 -1
  51. package/dist/styles/reset/accessibility.css +1 -1
  52. package/dist/styles/reset/reset-accessibility.css +1 -1
  53. package/dist/styles/reset/reset-tailwind.css +1 -1
  54. package/dist/styles/reset/reset.css +1 -1
  55. package/dist/styles/tailwind.css +2 -1
  56. package/package.json +2 -2
@@ -1,5 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import * as _base_ui_react_field from '@base-ui/react/field';
3
+ import * as _base_ui_react_button from '@base-ui/react/button';
3
4
  import { Button as Button$1 } from '@base-ui/react/button';
4
5
  import * as _base_ui_react_input from '@base-ui/react/input';
5
6
  import { Input as Input$1 } from '@base-ui/react/input';
@@ -39,10 +40,20 @@ type ButtonProps = React.ComponentProps<typeof Button$1> & {
39
40
  };
40
41
  /**
41
42
  * Base UI [Button](https://base-ui.com/react/components/button) with design-system `Button` classes.
42
- * Icon-only buttons must include a visible label for assistive tech (`aria-label` or `aria-labelledby`).
43
+ * A button holding only an icon gets `data-icon-only` and is drawn square (a circle, with the pill
44
+ * corners). Icon-only buttons must include a label for assistive tech (`aria-label` or `aria-labelledby`).
43
45
  */
44
46
  declare const Button: React.ForwardRefExoticComponent<Omit<ButtonProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
45
47
 
48
+ type IconButtonProps = React.ComponentProps<typeof Button$1>;
49
+ /**
50
+ * A small, quiet icon-only button: the icon-button concept (the X that closes a dialog, a field's
51
+ * clear button) as a part of its own, for calendar arrows, row actions and other controls that a
52
+ * full Button would make too loud. Base UI [Button](https://base-ui.com/react/components/button)
53
+ * with the `IconButton` class. Always give it `aria-label` or `aria-labelledby`.
54
+ */
55
+ declare const IconButton: React.ForwardRefExoticComponent<Omit<Omit<_base_ui_react_button.ButtonProps, "ref"> & React.RefAttributes<HTMLElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
56
+
46
57
  type InputProps = React.ComponentProps<typeof Input$1>;
47
58
  /**
48
59
  * Base UI [Input](https://base-ui.com/react/components/input) with design-system `Input` classes.
@@ -104,4 +115,4 @@ type FieldControlProps = React.ComponentProps<typeof Field.Control>;
104
115
  type FieldValidityProps = React.ComponentProps<typeof Field.Validity>;
105
116
  type FieldItemProps = React.ComponentProps<typeof Field.Item>;
106
117
 
107
- export { Button, type ButtonProps, Field, type FieldControlProps, type FieldDescriptionProps, type FieldErrorProps, type FieldItemProps, type FieldLabelProps, type FieldRootProps, type FieldValidityProps, Fieldset, FieldsetDescription, type FieldsetDescriptionProps, type FieldsetLegendProps, type FieldsetRootProps, Form, FormActions, type FormActionsProps, type FormProps, Input, type InputProps, NavigationMenu, type NavigationMenuListProps, type NavigationMenuRootProps, cn, cnState };
118
+ export { Button, type ButtonProps, Field, type FieldControlProps, type FieldDescriptionProps, type FieldErrorProps, type FieldItemProps, type FieldLabelProps, type FieldRootProps, type FieldValidityProps, Fieldset, FieldsetDescription, type FieldsetDescriptionProps, type FieldsetLegendProps, type FieldsetRootProps, Form, FormActions, type FormActionsProps, type FormProps, IconButton, type IconButtonProps, Input, type InputProps, NavigationMenu, type NavigationMenuListProps, type NavigationMenuRootProps, cn, cnState };
@@ -1,5 +1,5 @@
1
1
  @import url('https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,400,0..1,0');
2
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
2
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
3
3
  /* Loomiere for Base UI: component styles. Brand-free: every value is a --sl- variable from a
4
4
  Loomiere theme. Load the theme first:
5
5
  @import '<your theme>/tokens.css';
@@ -9,7 +9,7 @@
9
9
  /* Document defaults, in the reset layer so any unlayered rule wins over them, and so layered
10
10
  frameworks (Chakra's recipes, Tailwind's utilities) are not undone by them. */
11
11
  @layer reset {
12
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
12
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
13
13
  /* CSS Reset - Mojave Theme */
14
14
 
15
15
  /* ============================================
@@ -453,7 +453,7 @@ hr {
453
453
  }
454
454
  }
455
455
  @layer reset {
456
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
456
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
457
457
  /* Accessibility — base rules (no theme color dependencies). Theme-specific focus/invalid: accessibility-theme.css */
458
458
 
459
459
  /* Remove default focus; keyboard focus styled in accessibility-theme.css */
@@ -566,7 +566,7 @@ main:focus {
566
566
 
567
567
  }
568
568
  @layer reset {
569
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
569
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
570
570
  /* Focus, invalid, contrast — requires theme tokens (after theme-accessibility.css). */
571
571
 
572
572
  :focus-visible {
@@ -634,7 +634,7 @@ button,
634
634
 
635
635
  }
636
636
  /* Component styles */
637
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
637
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
638
638
  /* Accordion - Mojave Theme
639
639
  *
640
640
  * No component tokens. Hover, press, chevron, divider and motion are the disclosure
@@ -755,7 +755,7 @@ button,
755
755
  overflow: hidden;
756
756
  }
757
757
 
758
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
758
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
759
759
  /* Alert Dialog - Mojave Theme
760
760
  *
761
761
  * No component tokens and no rules of its own. An alert dialog looks exactly like a
@@ -764,7 +764,7 @@ button,
764
764
  * cancel quiet, and a destructive one bold with data-color="error".
765
765
  */
766
766
 
767
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
767
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
768
768
  /* Autocomplete - Mojave Theme
769
769
  *
770
770
  * No component tokens. The input is Input (Input.css), the clear button is an icon
@@ -966,7 +966,7 @@ button,
966
966
  (reset-accessibility.css).
967
967
  ============================================ */
968
968
 
969
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
969
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
970
970
  /* Avatar - Mojave Theme
971
971
  *
972
972
  * A round picture with a ring in the page color, so avatars in a group cut out of each other in
@@ -1101,7 +1101,7 @@ button,
1101
1101
  }
1102
1102
  }
1103
1103
 
1104
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
1104
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
1105
1105
  /* Button - Mojave Theme
1106
1106
  *
1107
1107
  * Colors are the brand's emphasis levels, sizes are control.*, text is the trigger
@@ -1135,9 +1135,23 @@ button,
1135
1135
  user-select: none;
1136
1136
  }
1137
1137
 
1138
- .Button svg {
1138
+ .Button svg,
1139
+ .Button .material-symbols-outlined {
1139
1140
  width: var(--sl-icon-size-magnify);
1140
1141
  height: var(--sl-icon-size-magnify);
1142
+ font-size: var(--sl-icon-size-magnify);
1143
+ line-height: 1;
1144
+ }
1145
+
1146
+ /* Icon only: square, so the pill corners make a circle instead of a wide oval. The Button
1147
+ wrapper sets data-icon-only when its only child is an icon. A plain .Button (a Popover or
1148
+ Toolbar trigger) qualifies on its own with an aria-label and a single icon inside, since an
1149
+ icon-only button needs the label anyway; CSS can't see text, so the label is the signal. */
1150
+ .Button[data-icon-only],
1151
+ .Button[aria-label]:has(> svg:only-child),
1152
+ .Button[aria-label]:has(> .material-symbols-outlined:only-child) {
1153
+ aspect-ratio: 1;
1154
+ padding-inline: 0;
1141
1155
  }
1142
1156
 
1143
1157
  /* ============================================
@@ -1195,9 +1209,11 @@ button,
1195
1209
  padding-inline: var(--sl-control-padding-inline-xs);
1196
1210
  }
1197
1211
 
1198
- .Button[data-size='xs'] svg {
1212
+ .Button[data-size='xs'] svg,
1213
+ .Button[data-size='xs'] .material-symbols-outlined {
1199
1214
  width: var(--sl-icon-size-condense);
1200
1215
  height: var(--sl-icon-size-condense);
1216
+ font-size: var(--sl-icon-size-condense);
1201
1217
  }
1202
1218
 
1203
1219
  .Button[data-size='sm'] {
@@ -1211,9 +1227,11 @@ button,
1211
1227
  padding-inline: var(--sl-control-padding-inline-sm);
1212
1228
  }
1213
1229
 
1214
- .Button[data-size='sm'] svg {
1230
+ .Button[data-size='sm'] svg,
1231
+ .Button[data-size='sm'] .material-symbols-outlined {
1215
1232
  width: var(--sl-icon-size-base);
1216
1233
  height: var(--sl-icon-size-base);
1234
+ font-size: var(--sl-icon-size-base);
1217
1235
  }
1218
1236
 
1219
1237
  .Button[data-size='lg'] {
@@ -1226,12 +1244,14 @@ button,
1226
1244
  padding-inline: var(--sl-control-padding-inline-lg);
1227
1245
  }
1228
1246
 
1229
- .Button[data-size='lg'] svg {
1247
+ .Button[data-size='lg'] svg,
1248
+ .Button[data-size='lg'] .material-symbols-outlined {
1230
1249
  width: var(--sl-icon-size-maximize);
1231
1250
  height: var(--sl-icon-size-maximize);
1251
+ font-size: var(--sl-icon-size-maximize);
1232
1252
  }
1233
1253
 
1234
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
1254
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
1235
1255
  /* Checkbox - Mojave Theme
1236
1256
  * Sizes follow the label: the box is the icon size one tier above the label's text
1237
1257
  * tier (like a button's icon) and the check mark one tier below it.
@@ -1388,7 +1408,7 @@ button,
1388
1408
  border-radius: var(--sl-radius-pill);
1389
1409
  }
1390
1410
 
1391
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
1411
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
1392
1412
  /* Checkbox Group - Mojave Theme */
1393
1413
 
1394
1414
  /* Each checkbox row is already a full tap target tall, so the rows sit close. */
@@ -1404,7 +1424,7 @@ button,
1404
1424
  pointer-events: none;
1405
1425
  }
1406
1426
 
1407
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
1427
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
1408
1428
  /* Collapsible - Mojave Theme
1409
1429
  *
1410
1430
  * No component tokens. Hover, press, chevron and motion are the disclosure concept
@@ -1520,7 +1540,7 @@ button,
1520
1540
  background: var(--sl-surface-raised);
1521
1541
  }
1522
1542
 
1523
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
1543
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
1524
1544
  /* Combobox - Mojave Theme
1525
1545
  *
1526
1546
  * No component tokens. The input is Input (Input.css); the chips box is a field; the
@@ -2005,7 +2025,7 @@ button,
2005
2025
  color: var(--sl-text-tertiary);
2006
2026
  }
2007
2027
 
2008
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
2028
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
2009
2029
  /* Context Menu - Mojave Theme
2010
2030
  *
2011
2031
  * No component tokens. Opens on right-click; the trigger area only sets the cursor. The popup is the popup concept, rows are item rows at the
@@ -2174,7 +2194,7 @@ button,
2174
2194
  stroke-width: var(--sl-stroke-default);
2175
2195
  }
2176
2196
 
2177
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
2197
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
2178
2198
  /* Dialog and Alert dialog - Mojave Theme
2179
2199
  *
2180
2200
  * Both are centered modals built from the modal concept (tokens/semantic/modal.json):
@@ -2320,7 +2340,7 @@ button,
2320
2340
  margin-top: var(--sl-modal-actions-spacing);
2321
2341
  }
2322
2342
 
2323
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
2343
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
2324
2344
  /* Drawer - a panel that slides in from an edge and can be swiped away.
2325
2345
  The surface, scrim, heading and motion are the modal concept's (--sl-modal-*), so a
2326
2346
  drawer reads as a dialog's sibling; only its size and grab bar are its own
@@ -2447,7 +2467,7 @@ button,
2447
2467
  color: var(--sl-modal-description-color);
2448
2468
  }
2449
2469
 
2450
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
2470
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
2451
2471
  /* Field - Mojave Theme
2452
2472
  *
2453
2473
  * Label, control, description and error. No component tokens: spacing is the field
@@ -2508,7 +2528,57 @@ textarea.FieldControl {
2508
2528
  height: auto;
2509
2529
  }
2510
2530
 
2511
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
2531
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
2532
+ /* Icon Button - Mojave Theme
2533
+ *
2534
+ * A small, quiet icon-only button: the icon-button concept (tokens/semantic/icon-button.json),
2535
+ * the same look as the X that closes a dialog or toast, as a part of its own. For calendar
2536
+ * arrows, row actions and clear buttons, where a Button would be too loud. No component tokens.
2537
+ */
2538
+
2539
+ .IconButton {
2540
+ display: flex;
2541
+ align-items: center;
2542
+ justify-content: center;
2543
+ flex-shrink: 0;
2544
+ width: var(--sl-icon-button-size);
2545
+ height: var(--sl-icon-button-size);
2546
+ padding: 0;
2547
+ border: none;
2548
+ border-radius: var(--sl-icon-button-radius);
2549
+ background: transparent;
2550
+ color: var(--sl-icon-button-color);
2551
+ cursor: pointer;
2552
+ outline: none;
2553
+ transition: var(--sl-icon-button-transition);
2554
+ }
2555
+
2556
+ .IconButton svg,
2557
+ .IconButton .material-symbols-outlined {
2558
+ width: var(--sl-icon-size-base);
2559
+ height: var(--sl-icon-size-base);
2560
+ font-size: var(--sl-icon-size-base);
2561
+ line-height: 1;
2562
+ }
2563
+
2564
+ .IconButton:hover:not(:disabled):not([aria-disabled='true']) {
2565
+ background: var(--sl-icon-button-background-hover);
2566
+ color: var(--sl-icon-button-color-hover);
2567
+ }
2568
+
2569
+ .IconButton:focus-visible {
2570
+ outline: var(--sl-focus-outline);
2571
+ outline-offset: var(--sl-focus-outline-offset);
2572
+ box-shadow: 0 0 0 var(--sl-focus-halo-spread) var(--sl-focus-halo-color);
2573
+ }
2574
+
2575
+ .IconButton:disabled,
2576
+ .IconButton[aria-disabled='true'] {
2577
+ color: var(--sl-text-disabled);
2578
+ cursor: not-allowed;
2579
+ }
2580
+
2581
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
2512
2582
  /* Fieldset - Mojave Theme
2513
2583
  *
2514
2584
  * No component tokens: a titled group of fields, spaced by the stack gaps, with
@@ -2550,7 +2620,7 @@ textarea.FieldControl {
2550
2620
  color: var(--sl-text-secondary);
2551
2621
  }
2552
2622
 
2553
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
2623
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
2554
2624
  /* Form - Mojave Theme
2555
2625
  *
2556
2626
  * No component tokens: fields stack with the large block space, and the action
@@ -2570,7 +2640,7 @@ textarea.FieldControl {
2570
2640
  margin-top: var(--sl-space-block-md);
2571
2641
  }
2572
2642
 
2573
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
2643
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
2574
2644
  /* Input - Mojave Theme
2575
2645
  *
2576
2646
  * No component tokens: the look is the field concept (tokens/semantic/field.json),
@@ -2707,7 +2777,7 @@ textarea.FieldControl {
2707
2777
  padding-inline: var(--sl-control-padding-inline-lg);
2708
2778
  }
2709
2779
 
2710
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
2780
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
2711
2781
  /* Menu - Mojave Theme
2712
2782
  *
2713
2783
  * No component tokens. The trigger is a Button. The popup is the popup concept, rows are item rows at the
@@ -2856,7 +2926,7 @@ textarea.FieldControl {
2856
2926
  color: var(--sl-text-tertiary);
2857
2927
  }
2858
2928
 
2859
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
2929
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
2860
2930
  /* Menubar - Mojave Theme
2861
2931
  *
2862
2932
  * No component tokens. A row of quiet triggers, each opening a menu. The popup is the popup concept, rows are item rows at the
@@ -3049,7 +3119,7 @@ textarea.FieldControl {
3049
3119
  color: var(--sl-text-tertiary);
3050
3120
  }
3051
3121
 
3052
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
3122
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
3053
3123
  /* Meter - Mojave Theme
3054
3124
  *
3055
3125
  * A gauge (tokens/semantic/gauge.json). The fill is the solid color of the scope around it:
@@ -3109,7 +3179,7 @@ textarea.FieldControl {
3109
3179
  height: var(--sl-gauge-height-lg);
3110
3180
  }
3111
3181
 
3112
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
3182
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
3113
3183
  /* Navigation Menu - Mojave Theme
3114
3184
  *
3115
3185
  * The strip is the bar concept, the panel is the popup concept and each link is an item
@@ -3529,7 +3599,7 @@ textarea.FieldControl {
3529
3599
  width: 100%;
3530
3600
  }
3531
3601
 
3532
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
3602
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
3533
3603
  /* Number Field - Mojave Theme
3534
3604
  *
3535
3605
  * No component tokens. The input is Input (Input.css) and the label, description and
@@ -3620,7 +3690,7 @@ textarea.FieldControl {
3620
3690
  user-select: none;
3621
3691
  }
3622
3692
 
3623
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
3693
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
3624
3694
  /* OTP Field - Mojave Theme
3625
3695
  *
3626
3696
  * One-time code entry: a row of single-character inputs. Each slot is the same control as Input
@@ -3683,7 +3753,7 @@ textarea.FieldControl {
3683
3753
  letter-spacing: var(--sl-font-magnify-letter-spacing);
3684
3754
  }
3685
3755
 
3686
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
3756
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
3687
3757
  /* Popover - Mojave Theme */
3688
3758
 
3689
3759
  /* ============================================
@@ -3733,7 +3803,8 @@ textarea.FieldControl {
3733
3803
  transform var(--sl-popup-animation-duration) var(--sl-popup-animation-easing);
3734
3804
  position: relative;
3735
3805
  min-width: var(--sl-popover-popup-min-width);
3736
- max-width: var(--sl-popover-popup-max-width);
3806
+ /* No fixed cap: wide content (a calendar, a form) fits; Base UI reports the room beside the trigger. */
3807
+ max-width: var(--available-width, 100vw);
3737
3808
  padding: var(--sl-popup-padding-panel);
3738
3809
  }
3739
3810
 
@@ -3755,6 +3826,7 @@ textarea.FieldControl {
3755
3826
  letter-spacing: var(--sl-font-maximize-lg-letter-spacing);
3756
3827
  color: var(--sl-text-primary);
3757
3828
  margin: 0 0 var(--sl-space-block-xs) 0;
3829
+ max-width: var(--sl-popover-text-max-width);
3758
3830
  }
3759
3831
 
3760
3832
  /* ============================================
@@ -3769,6 +3841,7 @@ textarea.FieldControl {
3769
3841
  letter-spacing: var(--sl-font-base-letter-spacing);
3770
3842
  color: var(--sl-text-secondary);
3771
3843
  margin: 0;
3844
+ max-width: var(--sl-popover-text-max-width);
3772
3845
  }
3773
3846
 
3774
3847
  /* ============================================
@@ -3845,7 +3918,7 @@ textarea.FieldControl {
3845
3918
  fill: var(--sl-popup-arrow-stroke);
3846
3919
  }
3847
3920
 
3848
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
3921
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
3849
3922
  /* Preview Card - Mojave Theme
3850
3923
  *
3851
3924
  * The popup concept (surface, arrow, motion) with a maximize-lg title and condense
@@ -3962,7 +4035,7 @@ textarea.FieldControl {
3962
4035
  fill: var(--sl-popup-arrow-stroke);
3963
4036
  }
3964
4037
 
3965
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
4038
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
3966
4039
  /* Progress - Mojave Theme
3967
4040
  *
3968
4041
  * A gauge (tokens/semantic/gauge.json), the same bar as Meter. The fill is the solid color of
@@ -4039,7 +4112,7 @@ textarea.FieldControl {
4039
4112
  height: var(--sl-gauge-height-lg);
4040
4113
  }
4041
4114
 
4042
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
4115
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
4043
4116
  /* Radio - Mojave Theme
4044
4117
  * Same box as Checkbox, always round. Sizes follow the label the same way, and the
4045
4118
  * dot is a share of the circle (check.dot-scale).
@@ -4191,7 +4264,7 @@ textarea.FieldControl {
4191
4264
  gap: var(--sl-gap-stack-sm);
4192
4265
  }
4193
4266
 
4194
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
4267
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
4195
4268
  /* Scroll Area - Mojave Theme
4196
4269
  *
4197
4270
  * The scrollbar is the content scrollbar (content.scrollbar-*): a track that stays clear until
@@ -4273,7 +4346,7 @@ textarea.FieldControl {
4273
4346
  background: transparent;
4274
4347
  }
4275
4348
 
4276
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
4349
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
4277
4350
  /* Select - Mojave Theme
4278
4351
  *
4279
4352
  * The trigger is a field (the field pattern, control sizes, the base text style); the
@@ -4547,7 +4620,7 @@ textarea.FieldControl {
4547
4620
  stroke-width: var(--sl-stroke-default);
4548
4621
  }
4549
4622
 
4550
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
4623
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
4551
4624
  /* Separator - Mojave Theme
4552
4625
  *
4553
4626
  * A hairline in the everyday divider color (border.default), one stroke thick, with a step of
@@ -4575,7 +4648,7 @@ textarea.FieldControl {
4575
4648
  margin-inline: var(--sl-space-4);
4576
4649
  }
4577
4650
 
4578
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
4651
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
4579
4652
  /* Slider - Mojave Theme
4580
4653
  *
4581
4654
  * A slider is a gauge you can drag: the track, fill and label row are gauge.* (the same bar as
@@ -4741,7 +4814,7 @@ textarea.FieldControl {
4741
4814
  transform: translate(-50%, 50%);
4742
4815
  }
4743
4816
 
4744
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
4817
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
4745
4818
  /* Switch - Mojave Theme
4746
4819
  * Switch keeps its track sizes. The thumb, its travel and the ON/OFF text are
4747
4820
  * worked out from them: the thumb fills the track's height inside the padding,
@@ -4907,7 +4980,7 @@ textarea.FieldControl {
4907
4980
  color: var(--sl-text-disabled);
4908
4981
  }
4909
4982
 
4910
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
4983
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
4911
4984
  /* Tabs - Mojave Theme
4912
4985
  *
4913
4986
  * No component tokens. The divider, the selected line and color, hover and the disabled
@@ -5043,7 +5116,7 @@ textarea.FieldControl {
5043
5116
  padding: var(--sl-space-6);
5044
5117
  }
5045
5118
 
5046
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
5119
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
5047
5120
  /* Toast - Mojave Theme
5048
5121
  *
5049
5122
  * A toast is a notice (tokens/semantic/notice.json) on the popup surface. A toast whose type
@@ -5279,7 +5352,7 @@ textarea.FieldControl {
5279
5352
  flex-shrink: 0;
5280
5353
  }
5281
5354
 
5282
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
5355
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
5283
5356
  /* Toggle - Mojave Theme
5284
5357
  * A toggle is a button that stays pressed: the same heights, padding, gap and
5285
5358
  * trigger text style as a button of the same size.
@@ -5389,7 +5462,7 @@ textarea.FieldControl {
5389
5462
  height: var(--sl-icon-size-maximize);
5390
5463
  }
5391
5464
 
5392
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
5465
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
5393
5466
  /* Toggle Group - Mojave Theme
5394
5467
  *
5395
5468
  * No component tokens. The strip is the bar concept (tokens/semantic/bar.json); the
@@ -5410,7 +5483,7 @@ textarea.FieldControl {
5410
5483
  border-radius: var(--sl-radius-item);
5411
5484
  }
5412
5485
 
5413
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
5486
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
5414
5487
  /* Toolbar - Mojave Theme
5415
5488
  *
5416
5489
  * The strip is the bar concept (tokens/semantic/bar.json). Buttons, toggles, selects
@@ -5472,7 +5545,7 @@ textarea.FieldControl {
5472
5545
  max-width: var(--sl-toolbar-input-max-width);
5473
5546
  }
5474
5547
 
5475
- /* @scattered-light/loomiere-base-ui 0.2.0 · styles for @base-ui/react 1.9.0 */
5548
+ /* @scattered-light/loomiere-base-ui 0.3.0 · styles for @base-ui/react 1.9.0 */
5476
5549
  /* Tooltip - Mojave Theme
5477
5550
  *
5478
5551
  * The inverse surface (surface.inverse, text.on-inverse-surface) with condense text, so a tooltip
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import * as React from 'react';
2
2
  import * as _base_ui_react_field from '@base-ui/react/field';
3
+ import * as _base_ui_react_button from '@base-ui/react/button';
3
4
  import { Button as Button$1 } from '@base-ui/react/button';
4
5
  import * as _base_ui_react_input from '@base-ui/react/input';
5
6
  import { Input as Input$1 } from '@base-ui/react/input';
@@ -39,10 +40,20 @@ type ButtonProps = React.ComponentProps<typeof Button$1> & {
39
40
  };
40
41
  /**
41
42
  * Base UI [Button](https://base-ui.com/react/components/button) with design-system `Button` classes.
42
- * Icon-only buttons must include a visible label for assistive tech (`aria-label` or `aria-labelledby`).
43
+ * A button holding only an icon gets `data-icon-only` and is drawn square (a circle, with the pill
44
+ * corners). Icon-only buttons must include a label for assistive tech (`aria-label` or `aria-labelledby`).
43
45
  */
44
46
  declare const Button: React.ForwardRefExoticComponent<Omit<ButtonProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
45
47
 
48
+ type IconButtonProps = React.ComponentProps<typeof Button$1>;
49
+ /**
50
+ * A small, quiet icon-only button: the icon-button concept (the X that closes a dialog, a field's
51
+ * clear button) as a part of its own, for calendar arrows, row actions and other controls that a
52
+ * full Button would make too loud. Base UI [Button](https://base-ui.com/react/components/button)
53
+ * with the `IconButton` class. Always give it `aria-label` or `aria-labelledby`.
54
+ */
55
+ declare const IconButton: React.ForwardRefExoticComponent<Omit<Omit<_base_ui_react_button.ButtonProps, "ref"> & React.RefAttributes<HTMLElement>, "ref"> & React.RefAttributes<HTMLButtonElement>>;
56
+
46
57
  type InputProps = React.ComponentProps<typeof Input$1>;
47
58
  /**
48
59
  * Base UI [Input](https://base-ui.com/react/components/input) with design-system `Input` classes.
@@ -104,4 +115,4 @@ type FieldControlProps = React.ComponentProps<typeof Field.Control>;
104
115
  type FieldValidityProps = React.ComponentProps<typeof Field.Validity>;
105
116
  type FieldItemProps = React.ComponentProps<typeof Field.Item>;
106
117
 
107
- export { Button, type ButtonProps, Field, type FieldControlProps, type FieldDescriptionProps, type FieldErrorProps, type FieldItemProps, type FieldLabelProps, type FieldRootProps, type FieldValidityProps, Fieldset, FieldsetDescription, type FieldsetDescriptionProps, type FieldsetLegendProps, type FieldsetRootProps, Form, FormActions, type FormActionsProps, type FormProps, Input, type InputProps, NavigationMenu, type NavigationMenuListProps, type NavigationMenuRootProps, cn, cnState };
118
+ export { Button, type ButtonProps, Field, type FieldControlProps, type FieldDescriptionProps, type FieldErrorProps, type FieldItemProps, type FieldLabelProps, type FieldRootProps, type FieldValidityProps, Fieldset, FieldsetDescription, type FieldsetDescriptionProps, type FieldsetLegendProps, type FieldsetRootProps, Form, FormActions, type FormActionsProps, type FormProps, IconButton, type IconButtonProps, Input, type InputProps, NavigationMenu, type NavigationMenuListProps, type NavigationMenuRootProps, cn, cnState };