@scattered-light/loomiere-base-ui 0.8.0 → 0.9.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 (80) hide show
  1. package/README.md +27 -1
  2. package/dist/{chunk-LJQ3RZDJ.js → chunk-LQWPDLLQ.js} +18 -3
  3. package/dist/chunk-LQWPDLLQ.js.map +1 -0
  4. package/dist/custom/index.d.ts +1 -1
  5. package/dist/custom/index.js +1 -1
  6. package/dist/design-system/components/AppBar/README.md +58 -0
  7. package/dist/design-system/components/AppBar/preview.html +19 -0
  8. package/dist/design-system/components/PickerButton/README.md +56 -0
  9. package/dist/design-system/components/PickerButton/preview.html +19 -0
  10. package/dist/design-system/components/ToggleGroup/README.md +2 -2
  11. package/dist/design-system/components/ToggleGroup/preview.html +1 -1
  12. package/dist/design-system/components/bundle.js +7 -7
  13. package/dist/design-system/components/index.d.ts +1 -1
  14. package/dist/design-system/components/styles.css +218 -57
  15. package/dist/{index-CBAo353T.d.ts → index-DdHpYalU.d.ts} +30 -1
  16. package/dist/index.d.ts +1 -1
  17. package/dist/index.js +1 -1
  18. package/dist/styles/components/Accordion.css +1 -1
  19. package/dist/styles/components/AlertDialog.css +1 -1
  20. package/dist/styles/components/Autocomplete.css +1 -1
  21. package/dist/styles/components/Avatar.css +1 -1
  22. package/dist/styles/components/Button.css +1 -1
  23. package/dist/styles/components/Checkbox.css +1 -1
  24. package/dist/styles/components/CheckboxGroup.css +1 -1
  25. package/dist/styles/components/Collapsible.css +1 -1
  26. package/dist/styles/components/Combobox.css +1 -1
  27. package/dist/styles/components/ContextMenu.css +1 -1
  28. package/dist/styles/components/Dialog.css +1 -1
  29. package/dist/styles/components/Drawer.css +1 -1
  30. package/dist/styles/components/Field.css +1 -1
  31. package/dist/styles/components/Fieldset.css +1 -1
  32. package/dist/styles/components/Form.css +1 -1
  33. package/dist/styles/components/Input.css +1 -1
  34. package/dist/styles/components/Menu.css +1 -1
  35. package/dist/styles/components/Menubar.css +1 -1
  36. package/dist/styles/components/Meter.css +1 -1
  37. package/dist/styles/components/NavigationMenu.css +1 -1
  38. package/dist/styles/components/NumberField.css +1 -1
  39. package/dist/styles/components/OTPField.css +1 -1
  40. package/dist/styles/components/Popover.css +1 -1
  41. package/dist/styles/components/PreviewCard.css +1 -1
  42. package/dist/styles/components/Progress.css +1 -1
  43. package/dist/styles/components/Radio.css +1 -1
  44. package/dist/styles/components/ScrollArea.css +1 -1
  45. package/dist/styles/components/Select.css +1 -1
  46. package/dist/styles/components/Separator.css +1 -1
  47. package/dist/styles/components/Slider.css +1 -1
  48. package/dist/styles/components/Switch.css +1 -1
  49. package/dist/styles/components/Tabs.css +1 -1
  50. package/dist/styles/components/Toast.css +1 -1
  51. package/dist/styles/components/Toggle.css +1 -1
  52. package/dist/styles/components/ToggleGroup.css +42 -1
  53. package/dist/styles/components/Toolbar.css +1 -1
  54. package/dist/styles/components/Tooltip.css +1 -1
  55. package/dist/styles/custom/AppBar.css +33 -0
  56. package/dist/styles/custom/Badge.css +1 -1
  57. package/dist/styles/custom/Collection.css +1 -1
  58. package/dist/styles/custom/CollectionPagination.css +1 -1
  59. package/dist/styles/custom/CollectionToolbar.css +1 -1
  60. package/dist/styles/custom/DataList.css +1 -1
  61. package/dist/styles/custom/DataTable.css +1 -1
  62. package/dist/styles/custom/DatePicker.css +1 -1
  63. package/dist/styles/custom/DescriptionList.css +1 -1
  64. package/dist/styles/custom/EditableList.css +1 -1
  65. package/dist/styles/custom/EmptyState.css +1 -1
  66. package/dist/styles/custom/ListDetail.css +1 -1
  67. package/dist/styles/custom/MoneyField.css +1 -1
  68. package/dist/styles/custom/PickerButton.css +85 -0
  69. package/dist/styles/custom/Sheet.css +1 -1
  70. package/dist/styles/custom/Splitter.css +1 -1
  71. package/dist/styles/custom/StatFigure.css +1 -1
  72. package/dist/styles/custom/Table.css +1 -1
  73. package/dist/styles/index.css +3 -1
  74. package/dist/styles/reset/accessibility.css +1 -1
  75. package/dist/styles/reset/reset-accessibility.css +1 -1
  76. package/dist/styles/reset/reset-tailwind.css +1 -1
  77. package/dist/styles/reset/reset.css +1 -1
  78. package/dist/styles/tailwind.css +3 -1
  79. package/package.json +2 -2
  80. package/dist/chunk-LJQ3RZDJ.js.map +0 -1
@@ -786,6 +786,35 @@ type DescriptionItemProps = Omit<React.ComponentProps<'div'>, 'children'> & {
786
786
  /** One pair: a dt and its dd, grouped in a div as HTML allows inside a dl. */
787
787
  declare const DescriptionItem: React.ForwardRefExoticComponent<Omit<DescriptionItemProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
788
788
 
789
+ type AppBarProps = React.ComponentProps<'header'>;
790
+ /**
791
+ * The bar across the top of an app window: wordmark, context pickers, a module switch and
792
+ * icon actions in one row, on a line in the rule color (app-bar.*). A `header`, so it is the
793
+ * page's banner landmark when it sits outside `main`. Put an {@link AppBarSpacer} where the
794
+ * row should split, and a vertical Separator between groups of icon actions.
795
+ * Not a Base UI part, so it does not take `render`.
796
+ */
797
+ declare const AppBar: React.ForwardRefExoticComponent<Omit<React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement>, HTMLElement>, "ref"> & React.RefAttributes<HTMLElement>>;
798
+ type AppBarSpacerProps = Omit<React.ComponentProps<'div'>, 'children'>;
799
+ /** Takes the free space in an AppBar, pushing what follows it to the end of the row. */
800
+ declare const AppBarSpacer: React.ForwardRefExoticComponent<Omit<AppBarSpacerProps, "ref"> & React.RefAttributes<HTMLDivElement>>;
801
+
802
+ type PickerButtonProps = Omit<React.ComponentProps<'button'>, 'value'> & {
803
+ /** What the button picks, set in caps before the choice: "Client", "Entity". */
804
+ label: React.ReactNode;
805
+ /** The current choice. Cut with an ellipsis when it is long. */
806
+ value?: React.ReactNode;
807
+ /** Shown in place of the value while nothing is chosen. */
808
+ placeholder?: React.ReactNode;
809
+ };
810
+ /**
811
+ * A trigger that names what it picks with a caps label before the current choice, in the
812
+ * field look of a Select trigger. It opens nothing itself: render it as a Menu, Popover or
813
+ * Select trigger, `<Menu.Trigger render={(props) => <PickerButton {...props} label="Entity" value={name} />} />`.
814
+ * The label and the choice are both read as its name.
815
+ */
816
+ declare const PickerButton: React.ForwardRefExoticComponent<Omit<PickerButtonProps, "ref"> & React.RefAttributes<HTMLButtonElement>>;
817
+
789
818
  interface EditableListApi<T> {
790
819
  update: (patch: Partial<T>) => void;
791
820
  remove: () => void;
@@ -860,4 +889,4 @@ declare const EditableList: {
860
889
  Balance: typeof EditableListBalance;
861
890
  };
862
891
 
863
- export { inclusiveDays as $, type SheetProps as A, Badge as B, Calendar as C, DatePicker as D, EditableList as E, Splitter as F, type SplitterHandleProps as G, type SplitterPanelProps as H, type SplitterRootProps as I, StatFigure as J, type StatFigureProps as K, ListDetail as L, MoneyField as M, NumberField as N, addDays as O, type Preset as P, addMonths as Q, builtinPresets as R, Sheet as S, clampDate as T, daysInMonth as U, defaultPresets as V, defaultWeekStartsOn as W, endOfWeek as X, formatMoney as Y, fromMinorUnits as Z, getCurrencyDigits as _, type BadgeProps as a, moveFocusDate as a$, isValidCurrency as a0, isoWeek as a1, last30Days as a2, last7Days as a3, lastMonth as a4, lastWeek as a5, lengthBlockReason as a6, nextMonth as a7, nextWeek as a8, orderRange as a9, MoneyFieldRoot as aA, type MoneyFieldSteps as aB, type NormalizedPaste as aC, type PanelSpec as aD, type RuntimePanel as aE, type Size as aF, type SizeInput as aG, SplitterHandle as aH, type SplitterKey as aI, SplitterPanel as aJ, SplitterRoot as aK, type StoredLayout as aL, type StoredPanel as aM, affixSide as aN, applyKey as aO, applyStored as aP, ariaPercents as aQ, createPanels as aR, cssSize as aS, currencyName as aT, currencySymbol as aU, formatDay as aV, formatFull as aW, handleTarget as aX, layoutOf as aY, measure as aZ, monthCells as a_, parseDecimalString as aa, resolvePreset as ab, startOfWeek as ac, thisMonth as ad, thisQuarter as ae, thisWeek as af, toDecimalString as ag, toMinorUnits as ah, today as ai, todayDate as aj, tomorrow as ak, useListDetail as al, yearToDate as am, yesterday as an, CURRENCY_SEARCH_THRESHOLD as ao, CurrencySelect as ap, type KeyOptions as aq, ListDetailDetail as ar, ListDetailList as as, ListDetailRoot as at, MAX_MINOR_UNITS as au, type MoneyChangeDetails as av, type MoneyDisplay as aw, MoneyFieldAffix as ax, MoneyFieldGroup as ay, MoneyFieldInput as az, type CalendarProps as b, normalizePaste as b0, parseDate as b1, parseSize as b2, presetInBounds as b3, resetToDefault as b4, resizeByDelta as b5, roundHalfExpand as b6, roundingChangesValue as b7, sameSelection as b8, serializeSize as b9, settle as ba, sizeText as bb, syncPanels as bc, toggleCollapsed as bd, valueText as be, type CurrencyCode as c, type DatePickerProps as d, DatePresets as e, type DatePresetsProps as f, type DateRange as g, type DateValue as h, DescriptionItem as i, type DescriptionItemProps as j, DescriptionList as k, type DescriptionListProps as l, type EditableListApi as m, type EditableListRootProps as n, EmptyState as o, type EmptyStateKind as p, type EmptyStateProps as q, type ListDetailCloseReason as r, type ListDetailDetailProps as s, type ListDetailLayout as t, type ListDetailRootProps as u, type ListDetailValue as v, type MoneyFieldProps as w, type MoneyFieldRootProps as x, type NumberFieldLabelProps as y, type PresetValue as z };
892
+ export { defaultPresets as $, AppBar as A, Badge as B, Calendar as C, DatePicker as D, EditableList as E, type MoneyFieldRootProps as F, type NumberFieldLabelProps as G, type PickerButtonProps as H, type Preset as I, type PresetValue as J, type SheetProps as K, ListDetail as L, MoneyField as M, NumberField as N, Splitter as O, PickerButton as P, type SplitterHandleProps as Q, type SplitterPanelProps as R, Sheet as S, type SplitterRootProps as T, StatFigure as U, type StatFigureProps as V, addDays as W, addMonths as X, builtinPresets as Y, clampDate as Z, daysInMonth as _, type AppBarProps as a, formatDay as a$, defaultWeekStartsOn as a0, endOfWeek as a1, formatMoney as a2, fromMinorUnits as a3, getCurrencyDigits as a4, inclusiveDays as a5, isValidCurrency as a6, isoWeek as a7, last30Days as a8, last7Days as a9, MAX_MINOR_UNITS as aA, type MoneyChangeDetails as aB, type MoneyDisplay as aC, MoneyFieldAffix as aD, MoneyFieldGroup as aE, MoneyFieldInput as aF, MoneyFieldRoot as aG, type MoneyFieldSteps as aH, type NormalizedPaste as aI, type PanelSpec as aJ, type RuntimePanel as aK, type Size as aL, type SizeInput as aM, SplitterHandle as aN, type SplitterKey as aO, SplitterPanel as aP, SplitterRoot as aQ, type StoredLayout as aR, type StoredPanel as aS, affixSide as aT, applyKey as aU, applyStored as aV, ariaPercents as aW, createPanels as aX, cssSize as aY, currencyName as aZ, currencySymbol as a_, lastMonth as aa, lastWeek as ab, lengthBlockReason as ac, nextMonth as ad, nextWeek as ae, orderRange as af, parseDecimalString as ag, resolvePreset as ah, startOfWeek as ai, thisMonth as aj, thisQuarter as ak, thisWeek as al, toDecimalString as am, toMinorUnits as an, today as ao, todayDate as ap, tomorrow as aq, useListDetail as ar, yearToDate as as, yesterday as at, CURRENCY_SEARCH_THRESHOLD as au, CurrencySelect as av, type KeyOptions as aw, ListDetailDetail as ax, ListDetailList as ay, ListDetailRoot as az, AppBarSpacer as b, formatFull as b0, handleTarget as b1, layoutOf as b2, measure as b3, monthCells as b4, moveFocusDate as b5, normalizePaste as b6, parseDate as b7, parseSize as b8, presetInBounds as b9, resetToDefault as ba, resizeByDelta as bb, roundHalfExpand as bc, roundingChangesValue as bd, sameSelection as be, serializeSize as bf, settle as bg, sizeText as bh, syncPanels as bi, toggleCollapsed as bj, valueText as bk, type AppBarSpacerProps as c, type BadgeProps as d, type CalendarProps as e, type CurrencyCode as f, type DatePickerProps as g, DatePresets as h, type DatePresetsProps as i, type DateRange as j, type DateValue as k, DescriptionItem as l, type DescriptionItemProps as m, DescriptionList as n, type DescriptionListProps as o, type EditableListApi as p, type EditableListRootProps as q, EmptyState as r, type EmptyStateKind as s, type EmptyStateProps as t, type ListDetailCloseReason as u, type ListDetailDetailProps as v, type ListDetailLayout as w, type ListDetailRootProps as x, type ListDetailValue as y, type MoneyFieldProps as z };
package/dist/index.d.ts CHANGED
@@ -7,7 +7,7 @@ import { Fieldset as Fieldset$1 } from '@base-ui/react/fieldset';
7
7
  import { Form as Form$1 } from '@base-ui/react/form';
8
8
  import { NavigationMenu as NavigationMenu$1 } from '@base-ui/react/navigation-menu';
9
9
  import { Select as Select$1 } from '@base-ui/react/select';
10
- export { B as Badge, a as BadgeProps, C as Calendar, b as CalendarProps, c as CurrencyCode, D as DatePicker, d as DatePickerProps, e as DatePresets, f as DatePresetsProps, g as DateRange, h as DateValue, i as DescriptionItem, j as DescriptionItemProps, k as DescriptionList, l as DescriptionListProps, E as EditableList, m as EditableListApi, n as EditableListRootProps, o as EmptyState, p as EmptyStateKind, q as EmptyStateProps, L as ListDetail, r as ListDetailCloseReason, s as ListDetailDetailProps, t as ListDetailLayout, u as ListDetailRootProps, v as ListDetailValue, M as MoneyField, w as MoneyFieldProps, x as MoneyFieldRootProps, N as NumberField, y as NumberFieldLabelProps, P as Preset, z as PresetValue, S as Sheet, A as SheetProps, F as Splitter, G as SplitterHandleProps, H as SplitterPanelProps, I as SplitterRootProps, J as StatFigure, K as StatFigureProps, O as addDays, Q as addMonths, R as builtinPresets, T as clampDate, U as daysInMonth, V as defaultPresets, W as defaultWeekStartsOn, X as endOfWeek, Y as formatMoney, Z as fromMinorUnits, _ as getCurrencyDigits, $ as inclusiveDays, a0 as isValidCurrency, a1 as isoWeek, a2 as last30Days, a3 as last7Days, a4 as lastMonth, a5 as lastWeek, a6 as lengthBlockReason, a7 as nextMonth, a8 as nextWeek, a9 as orderRange, aa as parseDecimalString, ab as resolvePreset, ac as startOfWeek, ad as thisMonth, ae as thisQuarter, af as thisWeek, ag as toDecimalString, ah as toMinorUnits, ai as today, aj as todayDate, ak as tomorrow, al as useListDetail, am as yearToDate, an as yesterday } from './index-CBAo353T.js';
10
+ export { A as AppBar, a as AppBarProps, b as AppBarSpacer, c as AppBarSpacerProps, B as Badge, d as BadgeProps, C as Calendar, e as CalendarProps, f as CurrencyCode, D as DatePicker, g as DatePickerProps, h as DatePresets, i as DatePresetsProps, j as DateRange, k as DateValue, l as DescriptionItem, m as DescriptionItemProps, n as DescriptionList, o as DescriptionListProps, E as EditableList, p as EditableListApi, q as EditableListRootProps, r as EmptyState, s as EmptyStateKind, t as EmptyStateProps, L as ListDetail, u as ListDetailCloseReason, v as ListDetailDetailProps, w as ListDetailLayout, x as ListDetailRootProps, y as ListDetailValue, M as MoneyField, z as MoneyFieldProps, F as MoneyFieldRootProps, N as NumberField, G as NumberFieldLabelProps, P as PickerButton, H as PickerButtonProps, I as Preset, J as PresetValue, S as Sheet, K as SheetProps, O as Splitter, Q as SplitterHandleProps, R as SplitterPanelProps, T as SplitterRootProps, U as StatFigure, V as StatFigureProps, W as addDays, X as addMonths, Y as builtinPresets, Z as clampDate, _ as daysInMonth, $ as defaultPresets, a0 as defaultWeekStartsOn, a1 as endOfWeek, a2 as formatMoney, a3 as fromMinorUnits, a4 as getCurrencyDigits, a5 as inclusiveDays, a6 as isValidCurrency, a7 as isoWeek, a8 as last30Days, a9 as last7Days, aa as lastMonth, ab as lastWeek, ac as lengthBlockReason, ad as nextMonth, ae as nextWeek, af as orderRange, ag as parseDecimalString, ah as resolvePreset, ai as startOfWeek, aj as thisMonth, ak as thisQuarter, al as thisWeek, am as toDecimalString, an as toMinorUnits, ao as today, ap as todayDate, aq as tomorrow, ar as useListDetail, as as yearToDate, at as yesterday } from './index-DdHpYalU.js';
11
11
  import * as _base_ui_react_internals_filter from '@base-ui/react/internals/filter';
12
12
  import { AutocompleteRootProps, Autocomplete as Autocomplete$1 } from '@base-ui/react/autocomplete';
13
13
  import { ComboboxRootProps, Combobox as Combobox$1 } from '@base-ui/react/combobox';
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- export { Badge, Calendar, DatePicker, DatePresets, DescriptionItem, DescriptionList, Drawer, EditableList, Field, ListDetail, MoneyField, NumberField, Popover, Sheet, Splitter, StatFigure, addDays, addMonths, builtinPresets, clampDate, daysInMonth, defaultPresets, defaultWeekStartsOn, endOfWeek, formatMoney, fromMinorUnits, getCurrencyDigits, inclusiveDays, isValidCurrency, isoWeek, last30Days, last7Days, lastMonth, lastWeek, lengthBlockReason, nextMonth, nextWeek, orderRange, parseDecimalString, resolvePreset, startOfWeek, thisMonth, thisQuarter, thisWeek, toDecimalString, toMinorUnits, today, todayDate, tomorrow, useListDetail, yearToDate, yesterday } from './chunk-LJQ3RZDJ.js';
1
+ export { AppBar, AppBarSpacer, Badge, Calendar, DatePicker, DatePresets, DescriptionItem, DescriptionList, Drawer, EditableList, Field, ListDetail, MoneyField, NumberField, PickerButton, Popover, Sheet, Splitter, StatFigure, addDays, addMonths, builtinPresets, clampDate, daysInMonth, defaultPresets, defaultWeekStartsOn, endOfWeek, formatMoney, fromMinorUnits, getCurrencyDigits, inclusiveDays, isValidCurrency, isoWeek, last30Days, last7Days, lastMonth, lastWeek, lengthBlockReason, nextMonth, nextWeek, orderRange, parseDecimalString, resolvePreset, startOfWeek, thisMonth, thisQuarter, thisWeek, toDecimalString, toMinorUnits, today, todayDate, tomorrow, useListDetail, yearToDate, yesterday } from './chunk-LQWPDLLQ.js';
2
2
  export { Checkbox, CheckboxLabel, Input, Menu, Tabs } from './chunk-Y2CPBMFJ.js';
3
3
  import { cnState, styledPart, styledPartUnless, buttonPart, cn } from './chunk-M7KJASGK.js';
4
4
  export { Button, Combobox, EmptyState, Select, cn, cnState } from './chunk-M7KJASGK.js';
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Accordion - Mojave Theme
3
3
  *
4
4
  * No component tokens. Hover, press, chevron, divider and motion are the disclosure
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Alert Dialog - Mojave Theme
3
3
  *
4
4
  * No component tokens and no rules of its own. An alert dialog looks exactly like a
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Autocomplete - Mojave Theme
3
3
  *
4
4
  * No component tokens. The input is Input (Input.css), the clear button is an icon
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Avatar - Mojave Theme
3
3
  *
4
4
  * A round picture with a ring in the page color, so avatars in a group cut out of each other in
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Button - Mojave Theme
3
3
  *
4
4
  * Colors are the brand's emphasis levels, sizes are control.*, text is the trigger
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Checkbox - Mojave Theme
3
3
  * Sizes follow the label: the box is the icon size one tier above the label's text
4
4
  * tier (like a button's icon) and the check mark one tier below it.
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Checkbox Group - Mojave Theme */
3
3
 
4
4
  /* Each checkbox row is already a full tap target tall, so the rows sit close. */
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Collapsible - Mojave Theme
3
3
  *
4
4
  * No component tokens. Hover, press, chevron and motion are the disclosure concept
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Combobox - Mojave Theme
3
3
  *
4
4
  * No component tokens. The input is Input (Input.css); the chips box is a field; the
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Context Menu - Mojave Theme
3
3
  *
4
4
  * 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
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Dialog and Alert dialog - Mojave Theme
3
3
  *
4
4
  * Both are centered modals built from the modal concept (tokens/semantic/modal.json):
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Drawer - a panel that slides in from an edge and can be swiped away.
3
3
  The surface, scrim, heading and motion are the modal concept's (--sl-modal-*), so a
4
4
  drawer reads as a dialog's sibling; only its size and grab bar are its own
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Field - Mojave Theme
3
3
  *
4
4
  * Label, control, description and error. No component tokens: spacing is the field
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Fieldset - Mojave Theme
3
3
  *
4
4
  * No component tokens: a titled group of fields, spaced by the stack gaps, with
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Form - Mojave Theme
3
3
  *
4
4
  * No component tokens: fields stack with the large block space, and the action
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Input - Mojave Theme
3
3
  *
4
4
  * No component tokens: the look is the field concept (tokens/semantic/field.json),
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Menu - Mojave Theme
3
3
  *
4
4
  * No component tokens. The trigger is a Button. The popup is the popup concept, rows are item rows at the
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Menubar - Mojave Theme
3
3
  *
4
4
  * No component tokens. A row of quiet triggers, each opening a menu. The popup is the popup concept, rows are item rows at the
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Meter - Mojave Theme
3
3
  *
4
4
  * A gauge (tokens/semantic/gauge.json). The fill is the solid color of the scope around it:
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Navigation Menu - Mojave Theme
3
3
  *
4
4
  * The strip is the bar concept, the panel is the popup concept and each link is an item
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Number Field - Mojave Theme
3
3
  *
4
4
  * No component tokens. The input is Input (Input.css) and the label, description and
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* OTP Field - Mojave Theme
3
3
  *
4
4
  * One-time code entry: a row of single-character inputs. Each slot is the same control as Input
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Popover - Mojave Theme */
3
3
 
4
4
  /* ============================================
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Preview Card - Mojave Theme
3
3
  *
4
4
  * The popup concept (surface, arrow, motion) with a title-magnify title and condense
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Progress - Mojave Theme
3
3
  *
4
4
  * A gauge (tokens/semantic/gauge.json), the same bar as Meter. The fill is the solid color of
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Radio - Mojave Theme
3
3
  * Same box as Checkbox, always round. Sizes follow the label the same way, and the
4
4
  * dot is a share of the circle (check.dot-scale).
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Scroll Area - Mojave Theme
3
3
  *
4
4
  * The scrollbar is the content scrollbar (content.scrollbar-*): a track that stays clear until
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Select - Mojave Theme
3
3
  *
4
4
  * The trigger is a field (the field pattern, control sizes, the base text style); the
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Separator - Mojave Theme
3
3
  *
4
4
  * A hairline in the everyday divider color (border.default), one stroke thick, with a step of
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Slider - Mojave Theme
3
3
  *
4
4
  * A slider is a gauge you can drag: the track, fill and label row are gauge.* (the same bar as
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Switch - Mojave Theme
3
3
  * Switch keeps its track sizes. The thumb, its travel and the ON/OFF text are
4
4
  * worked out from them: the thumb fills the track's height inside the padding,
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Tabs - Mojave Theme
3
3
  *
4
4
  * No component tokens. The divider, the selected line and color, hover and the disabled
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Toast - Mojave Theme
3
3
  *
4
4
  * A toast is a notice (tokens/semantic/notice.json) on the popup surface. A toast whose type
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Toggle - Mojave Theme
3
3
  * A toggle is a button that stays pressed: the same heights, padding, gap and
4
4
  * trigger text style as a button of the same size. Pressed, it takes its emphasis level's
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Toggle Group - Mojave Theme
3
3
  *
4
4
  * No component tokens. The strip is the bar concept (tokens/semantic/bar.json); the
@@ -18,3 +18,44 @@
18
18
  .ToggleGroup .Toggle {
19
19
  border-radius: var(--sl-radius-item);
20
20
  }
21
+
22
+ /* ============================================
23
+ SEGMENTED (data-variant="segmented")
24
+ Joined toggles in one outline, the pressed one filled solid: a switch between a few
25
+ views or modules. Tokens: toggle-group.segmented-* (tokens/component/toggle-group.json).
26
+ ============================================ */
27
+
28
+ .ToggleGroup[data-variant='segmented'] {
29
+ padding: 0;
30
+ gap: 0;
31
+ background: var(--sl-toggle-group-segmented-background);
32
+ border: var(--sl-stroke-default) solid var(--sl-toggle-group-segmented-border-color);
33
+ border-radius: var(--sl-radius-chrome);
34
+ overflow: hidden;
35
+ }
36
+
37
+ .ToggleGroup[data-variant='segmented'] .Toggle {
38
+ height: calc(var(--sl-control-height-md) - 2 * var(--sl-stroke-default));
39
+ border: 0;
40
+ border-radius: 0;
41
+ background: transparent;
42
+ color: var(--sl-text-primary);
43
+ }
44
+
45
+ .ToggleGroup[data-variant='segmented'] .Toggle + .Toggle {
46
+ border-inline-start: var(--sl-stroke-default) solid var(--sl-toggle-group-segmented-border-color);
47
+ }
48
+
49
+ .ToggleGroup[data-variant='segmented'] .Toggle:hover:not([data-disabled]):not(:disabled) {
50
+ background: var(--sl-fill-subtle);
51
+ }
52
+
53
+ .ToggleGroup[data-variant='segmented'] .Toggle[data-pressed],
54
+ .ToggleGroup[data-variant='segmented'] .Toggle[data-pressed]:hover:not([data-disabled]):not(:disabled) {
55
+ background: var(--sl-toggle-group-segmented-pressed-background);
56
+ color: var(--sl-toggle-group-segmented-pressed-color);
57
+ }
58
+
59
+ .ToggleGroup[data-variant='segmented'] .Toggle:focus-visible {
60
+ outline-offset: var(--sl-focus-outline-offset-inset);
61
+ }
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Toolbar - Mojave Theme
3
3
  *
4
4
  * The strip is the bar concept (tokens/semantic/bar.json). Buttons, toggles, selects
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Tooltip - Mojave Theme
3
3
  *
4
4
  * The inverse surface (surface.inverse, text.on-inverse-surface) with condense text, so a tooltip
@@ -0,0 +1,33 @@
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
+ /* AppBar
3
+ *
4
+ * The bar across the top of an app window, one row on a line in the rule color. The line is
5
+ * app-bar.border-width while rule.width is 0, and the thicker of the two once a brand turns the
6
+ * rule on, so an ink-rule brand gets the working-paper rule under its app bar.
7
+ * AppBarSpacer pushes what follows it to the end. A vertical Separator inside is a short
8
+ * divider between groups of icon actions. Tokens: app-bar.* (tokens/component/app-bar.json).
9
+ */
10
+
11
+ .AppBar {
12
+ box-sizing: border-box;
13
+ display: flex;
14
+ align-items: center;
15
+ gap: var(--sl-app-bar-gap);
16
+ min-height: var(--sl-app-bar-height);
17
+ padding-inline: var(--sl-app-bar-padding-inline);
18
+ padding-block: var(--sl-space-2);
19
+ background: var(--sl-app-bar-background);
20
+ border-bottom: max(var(--sl-app-bar-border-width), var(--sl-rule-width)) solid var(--sl-app-bar-border-color);
21
+ min-width: 0;
22
+ }
23
+
24
+ .AppBarSpacer {
25
+ flex: 1 1 var(--sl-space-4);
26
+ min-width: 0;
27
+ }
28
+
29
+ .AppBar .Separator[data-orientation='vertical'] {
30
+ height: var(--sl-app-bar-divider-height);
31
+ margin-inline: var(--sl-space-1);
32
+ background: var(--sl-app-bar-divider-color);
33
+ }
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Badge
3
3
  *
4
4
  * A status or count label. Not a Base UI part, and not interactive: no hover or focus.
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Collection
3
3
  *
4
4
  * DataTable, DataList, the toolbar and the pagination, in one place so the two views
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Pagination
3
3
  *
4
4
  * Not tied to a collection. Anything with a page, a page count and a total can use it.
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Collection toolbar
3
3
  *
4
4
  * The wrap follows the toolbar's own width, not the window: a table in a narrow pane wraps
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* DataList
3
3
  *
4
4
  * The same rows as the table, in one container with the table's borders, hover, selected
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* DataTable additions on top of .Table.
3
3
  *
4
4
  * Sort buttons fill the header cell and inherit its hover, so old aria-sort markup keeps
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /*
3
3
  * DatePicker: a field that opens a calendar for one date or a period.
4
4
  * Not a Base UI part. The popup is Popover on a wide viewport and Drawer
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* DescriptionList
3
3
  *
4
4
  * Label and value pairs in a native dl, one DescriptionItem (a div holding a dt and a dd)
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* EditableList
3
3
  *
4
4
  * One table at every width, so a field is not submitted twice. Under the stack width each
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* EmptyState
3
3
  *
4
4
  * The block a page, pane, table, list or popup shows when it has nothing to show.
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* ListDetail
3
3
  *
4
4
  * The detail of one item, next to its list. Not a Base UI part. It is a Splitter
@@ -1,4 +1,4 @@
1
- /* @scattered-light/loomiere-base-ui 0.8.0 · styles for @base-ui/react 1.9.0 */
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
2
  /* Money field
3
3
  *
4
4
  * An amount of money, built on Number field. The value is an integer in minor units
@@ -0,0 +1,85 @@
1
+ /* @scattered-light/loomiere-base-ui 0.9.0 · styles for @base-ui/react 1.9.0 */
2
+ /* PickerButton
3
+ *
4
+ * A trigger with a caps label before the current choice: CLIENT Alpha Services. The field
5
+ * look and states of a Select trigger; the label is caps-condense in picker-button.label-color,
6
+ * the choice is cut with an ellipsis at picker-button.max-width and the chevron turns while
7
+ * its popup is open. Tokens: picker-button.* (tokens/component/picker-button.json) and field.*.
8
+ */
9
+
10
+ .PickerButton {
11
+ box-sizing: border-box;
12
+ color: var(--sl-field-color);
13
+ background: var(--sl-field-background);
14
+ border: var(--sl-field-border-width) solid var(--sl-field-border-color);
15
+ border-radius: var(--sl-field-radius);
16
+ transition: var(--sl-field-transition);
17
+ outline: none;
18
+ font-family: var(--sl-font-body-base-font-family);
19
+ font-size: var(--sl-font-body-base-font-size);
20
+ font-weight: var(--sl-font-body-base-font-weight);
21
+ line-height: var(--sl-font-body-base-line-height);
22
+ letter-spacing: var(--sl-font-body-base-letter-spacing);
23
+ display: inline-flex;
24
+ align-items: center;
25
+ gap: var(--sl-gap-control);
26
+ max-width: var(--sl-picker-button-max-width);
27
+ min-width: 0;
28
+ height: var(--sl-control-height-md);
29
+ margin: 0;
30
+ padding-block: var(--sl-control-padding-block);
31
+ padding-inline: var(--sl-control-padding-inline);
32
+ cursor: pointer;
33
+ white-space: nowrap;
34
+ }
35
+
36
+ .PickerButton:hover:not(:disabled) {
37
+ border-color: var(--sl-field-border-color-hover);
38
+ }
39
+
40
+ .PickerButton:focus-visible {
41
+ border-color: var(--sl-field-border-color-focus);
42
+ box-shadow: var(--sl-field-shadow-focus);
43
+ }
44
+
45
+ .PickerButton:disabled {
46
+ background: var(--sl-field-background-disabled);
47
+ color: var(--sl-field-color-disabled);
48
+ cursor: not-allowed;
49
+ }
50
+
51
+ .PickerButtonLabel {
52
+ font-family: var(--sl-font-caps-condense-font-family);
53
+ font-size: var(--sl-font-caps-condense-font-size);
54
+ font-weight: var(--sl-font-caps-condense-font-weight);
55
+ line-height: var(--sl-font-caps-condense-line-height);
56
+ letter-spacing: var(--sl-font-caps-condense-letter-spacing);
57
+ text-transform: var(--sl-font-caps-condense-text-transform);
58
+ flex: none;
59
+ color: var(--sl-picker-button-label-color);
60
+ }
61
+
62
+ .PickerButtonValue {
63
+ flex: 0 1 auto;
64
+ min-width: 0;
65
+ overflow: hidden;
66
+ text-overflow: ellipsis;
67
+ color: var(--sl-field-color);
68
+ }
69
+
70
+ .PickerButtonValue[data-placeholder] {
71
+ color: var(--sl-field-placeholder-color);
72
+ }
73
+
74
+ .PickerButtonIcon {
75
+ flex: none;
76
+ width: var(--sl-icon-size-base);
77
+ height: var(--sl-icon-size-base);
78
+ color: var(--sl-text-tertiary);
79
+ transition: transform var(--sl-duration-normal) var(--sl-easing-default);
80
+ }
81
+
82
+ .PickerButton[aria-expanded='true'] .PickerButtonIcon,
83
+ .PickerButton[data-popup-open] .PickerButtonIcon {
84
+ transform: rotate(180deg);
85
+ }