@flux-ui/components 3.0.0-next.26 → 3.0.0-next.29

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 (59) hide show
  1. package/dist/component/FluxAnimatedColors.vue.d.ts +1 -0
  2. package/dist/component/FluxBorderShine.vue.d.ts +1 -1
  3. package/dist/component/FluxFormInput.vue.d.ts +1 -0
  4. package/dist/component/FluxGallery.vue.d.ts +2 -2
  5. package/dist/component/FluxItemActions.vue.d.ts +4 -1
  6. package/dist/component/FluxItemContent.vue.d.ts +4 -1
  7. package/dist/component/FluxItemMedia.vue.d.ts +5 -1
  8. package/dist/component/FluxPrompt.vue.d.ts +2 -0
  9. package/dist/component/FluxTableCell.vue.d.ts +1 -0
  10. package/dist/component/primitive/FilterBadge.vue.d.ts +12 -0
  11. package/dist/component/primitive/SelectBase.vue.d.ts +5 -3
  12. package/dist/component/primitive/SliderBase.vue.d.ts +2 -2
  13. package/dist/component/primitive/index.d.ts +2 -0
  14. package/dist/composable/private/index.d.ts +0 -1
  15. package/dist/index.css +189 -131
  16. package/dist/index.js +4058 -864
  17. package/dist/index.js.map +1 -1
  18. package/package.json +11 -11
  19. package/src/component/FluxAnimatedColors.vue +6 -4
  20. package/src/component/FluxAutoGrid.vue +1 -1
  21. package/src/component/FluxContainer.vue +1 -1
  22. package/src/component/FluxExpandable.vue +1 -1
  23. package/src/component/FluxFader.vue +2 -1
  24. package/src/component/FluxFilterBar.vue +32 -8
  25. package/src/component/FluxFilterOptionAsync.vue +1 -2
  26. package/src/component/FluxFilterOptionsAsync.vue +1 -2
  27. package/src/component/FluxFormInput.vue +7 -0
  28. package/src/component/FluxFormSelectAsync.vue +2 -2
  29. package/src/component/FluxGrid.vue +1 -1
  30. package/src/component/FluxIcon.vue +0 -12
  31. package/src/component/FluxItemActions.vue +6 -2
  32. package/src/component/FluxItemContent.vue +5 -1
  33. package/src/component/FluxItemMedia.vue +10 -1
  34. package/src/component/FluxOverflowBar.vue +11 -1
  35. package/src/component/FluxPressable.vue +1 -1
  36. package/src/component/FluxStack.vue +1 -1
  37. package/src/component/FluxTabBar.vue +2 -1
  38. package/src/component/FluxTableCell.vue +3 -1
  39. package/src/component/primitive/AnchorPopup.vue +1 -1
  40. package/src/component/primitive/FilterBadge.vue +43 -0
  41. package/src/component/primitive/FilterItem.vue +1 -1
  42. package/src/component/primitive/SelectBase.vue +2 -1
  43. package/src/component/primitive/index.ts +2 -0
  44. package/src/composable/private/index.ts +0 -1
  45. package/src/css/component/Badge.module.scss +2 -1
  46. package/src/css/component/Filter.module.scss +31 -2
  47. package/src/css/component/Icon.module.scss +25 -40
  48. package/src/css/component/Item.module.scss +20 -5
  49. package/src/css/component/Menu.module.scss +3 -0
  50. package/src/css/component/Pane.module.scss +10 -1
  51. package/src/css/component/Tab.module.scss +7 -0
  52. package/src/css/component/Table.module.scss +1 -1
  53. package/src/css/component/Timeline.module.scss +6 -2
  54. package/src/css/component/base/Button.module.scss +10 -0
  55. package/src/css/typography.scss +8 -2
  56. package/src/css/variables.scss +1 -1
  57. package/src/util/createDialogRenderer.ts +3 -1
  58. package/dist/composable/private/useLoaded.d.ts +0 -5
  59. package/src/composable/private/useLoaded.ts +0 -21
@@ -4,6 +4,7 @@ type __VLS_Props = {
4
4
  readonly incrementor?: number;
5
5
  readonly opacity?: number;
6
6
  readonly seed?: number;
7
+ readonly static?: boolean;
7
8
  };
8
9
  declare const _default: DefineComponent<__VLS_Props, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {
9
10
  canvas: HTMLCanvasElement;
@@ -44,9 +44,9 @@ declare const _default: DefineComponent<ExtractPropTypes<{
44
44
  type: NumberConstructor;
45
45
  };
46
46
  }>> & Readonly<{}>, {
47
- colors: string[];
48
47
  duration: number;
49
48
  width: number;
49
+ colors: string[];
50
50
  offset: number;
51
51
  radius: string | number;
52
52
  }, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;
@@ -7,6 +7,7 @@ type __VLS_Props = {
7
7
  readonly iconTrailing?: FluxIconName;
8
8
  readonly disabled?: boolean;
9
9
  readonly isCondensed?: boolean;
10
+ readonly isLoading?: boolean;
10
11
  readonly isReadonly?: boolean;
11
12
  readonly isSecondary?: boolean;
12
13
  readonly max?: string | number;
@@ -19,11 +19,11 @@ declare function __VLS_template(): {
19
19
  };
20
20
  type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
21
21
  declare const __VLS_component: DefineComponent<__VLS_Props, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
22
- delete: (args_0: number) => any;
23
22
  upload: (args_0: File[]) => any;
23
+ delete: (args_0: number) => any;
24
24
  }, string, PublicProps, Readonly<__VLS_Props> & Readonly<{
25
- onDelete?: (args_0: number) => any;
26
25
  onUpload?: (args_0: File[]) => any;
26
+ onDelete?: (args_0: number) => any;
27
27
  }>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {}, HTMLDivElement>;
28
28
  declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
29
29
  export default _default;
@@ -1,4 +1,7 @@
1
1
  import { DefineComponent, ComponentOptionsMixin, PublicProps, ComponentProvideOptions } from 'vue';
2
+ type __VLS_Props = {
3
+ readonly isCenter?: boolean;
4
+ };
2
5
  declare function __VLS_template(): {
3
6
  attrs: Partial<{}>;
4
7
  slots: {
@@ -8,7 +11,7 @@ declare function __VLS_template(): {
8
11
  rootEl: any;
9
12
  };
10
13
  type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
11
- declare const __VLS_component: DefineComponent<{}, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;
14
+ declare const __VLS_component: DefineComponent<__VLS_Props, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {}, any>;
12
15
  declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
13
16
  export default _default;
14
17
  type __VLS_WithTemplateSlots<T, S> = T & {
@@ -1,4 +1,7 @@
1
1
  import { DefineComponent, ComponentOptionsMixin, PublicProps, ComponentProvideOptions } from 'vue';
2
+ type __VLS_Props = {
3
+ readonly isCenter?: boolean;
4
+ };
2
5
  declare function __VLS_template(): {
3
6
  attrs: Partial<{}>;
4
7
  slots: {
@@ -8,7 +11,7 @@ declare function __VLS_template(): {
8
11
  rootEl: HTMLDivElement;
9
12
  };
10
13
  type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
11
- declare const __VLS_component: DefineComponent<{}, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {}, HTMLDivElement>;
14
+ declare const __VLS_component: DefineComponent<__VLS_Props, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {}, HTMLDivElement>;
12
15
  declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
13
16
  export default _default;
14
17
  type __VLS_WithTemplateSlots<T, S> = T & {
@@ -1,4 +1,8 @@
1
1
  import { DefineComponent, ComponentOptionsMixin, PublicProps, ComponentProvideOptions } from 'vue';
2
+ type __VLS_Props = {
3
+ readonly isCenter?: boolean;
4
+ readonly size?: number;
5
+ };
2
6
  declare function __VLS_template(): {
3
7
  attrs: Partial<{}>;
4
8
  slots: {
@@ -8,7 +12,7 @@ declare function __VLS_template(): {
8
12
  rootEl: HTMLDivElement;
9
13
  };
10
14
  type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
11
- declare const __VLS_component: DefineComponent<{}, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {}, HTMLDivElement>;
15
+ declare const __VLS_component: DefineComponent<__VLS_Props, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {}, string, PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, ComponentProvideOptions, true, {}, HTMLDivElement>;
12
16
  declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
13
17
  export default _default;
14
18
  type __VLS_WithTemplateSlots<T, S> = T & {
@@ -13,6 +13,7 @@ declare const _default: DefineComponent<__VLS_Props, {}, {}, {}, {}, ComponentOp
13
13
  readonly iconTrailing?: FluxIconName;
14
14
  readonly disabled?: boolean;
15
15
  readonly isCondensed?: boolean;
16
+ readonly isLoading?: boolean;
16
17
  readonly isReadonly?: boolean;
17
18
  readonly isSecondary?: boolean;
18
19
  readonly max?: string | number;
@@ -53,6 +54,7 @@ declare const _default: DefineComponent<__VLS_Props, {}, {}, {}, {}, ComponentOp
53
54
  readonly iconTrailing?: FluxIconName;
54
55
  readonly disabled?: boolean;
55
56
  readonly isCondensed?: boolean;
57
+ readonly isLoading?: boolean;
56
58
  readonly isReadonly?: boolean;
57
59
  readonly isSecondary?: boolean;
58
60
  readonly max?: string | number;
@@ -1,6 +1,7 @@
1
1
  import { DefineComponent, ComponentOptionsMixin, PublicProps, ComponentProvideOptions } from 'vue';
2
2
  type __VLS_Props = {
3
3
  readonly contentDirection?: 'column' | 'row';
4
+ readonly contentGap?: number;
4
5
  };
5
6
  declare function __VLS_template(): {
6
7
  attrs: Partial<{}>;
@@ -0,0 +1,12 @@
1
+ import { FluxFilterItem, FluxFilterValue } from '@flux-ui/types';
2
+ import { DefineComponent, ComponentOptionsMixin, PublicProps, ComponentProvideOptions } from 'vue';
3
+ type __VLS_Props = {
4
+ readonly item: FluxFilterItem;
5
+ readonly value: FluxFilterValue;
6
+ };
7
+ declare const _default: DefineComponent<__VLS_Props, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
8
+ click: (args_0: MouseEvent) => any;
9
+ }, string, PublicProps, Readonly<__VLS_Props> & Readonly<{
10
+ onClick?: (args_0: MouseEvent) => any;
11
+ }>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {}, any>;
12
+ export default _default;
@@ -15,20 +15,20 @@ type __VLS_PublicProps = {
15
15
  } & __VLS_Props;
16
16
  declare const _default: DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
17
17
  close: () => any;
18
- deselect: (args_0: string | number) => any;
19
18
  search: (args_0: string) => any;
20
19
  select: (args_0: string | number) => any;
21
20
  open: () => any;
22
21
  "update:searchQuery": (value: string) => any;
23
22
  keyDown: (args_0: KeyboardEvent) => any;
23
+ deselect: (args_0: string | number) => any;
24
24
  }, string, PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
25
25
  onClose?: () => any;
26
- onDeselect?: (args_0: string | number) => any;
27
26
  onSearch?: (args_0: string) => any;
28
27
  onSelect?: (args_0: string | number) => any;
29
28
  onOpen?: () => any;
30
29
  "onUpdate:searchQuery"?: (value: string) => any;
31
30
  onKeyDown?: (args_0: KeyboardEvent) => any;
31
+ onDeselect?: (args_0: string | number) => any;
32
32
  }>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {
33
33
  anchor: {
34
34
  $: ComponentInternalInstance;
@@ -155,6 +155,7 @@ declare const _default: DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, Compo
155
155
  readonly iconTrailing?: FluxIconName;
156
156
  readonly disabled?: boolean;
157
157
  readonly isCondensed?: boolean;
158
+ readonly isLoading?: boolean;
158
159
  readonly isReadonly?: boolean;
159
160
  readonly isSecondary?: boolean;
160
161
  readonly max?: string | number;
@@ -195,6 +196,7 @@ declare const _default: DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, Compo
195
196
  readonly iconTrailing?: FluxIconName;
196
197
  readonly disabled?: boolean;
197
198
  readonly isCondensed?: boolean;
199
+ readonly isLoading?: boolean;
198
200
  readonly isReadonly?: boolean;
199
201
  readonly isSecondary?: boolean;
200
202
  readonly max?: string | number;
@@ -218,7 +220,6 @@ declare const _default: DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, Compo
218
220
  $data: {};
219
221
  $props: Partial<{}> & Omit<{
220
222
  readonly label?: string;
221
- readonly target?: string;
222
223
  readonly disabled?: boolean;
223
224
  readonly to?: FluxTo;
224
225
  readonly tabindex?: string | number;
@@ -226,6 +227,7 @@ declare const _default: DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, Compo
226
227
  readonly isLoading?: boolean;
227
228
  readonly href?: string;
228
229
  readonly rel?: string;
230
+ readonly target?: string;
229
231
  readonly iconLeading?: FluxIconName | null;
230
232
  readonly iconTrailing?: FluxIconName | null;
231
233
  readonly command?: string;
@@ -19,11 +19,11 @@ declare function __VLS_template(): {
19
19
  };
20
20
  type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
21
21
  declare const __VLS_component: DefineComponent<__VLS_Props, {}, {}, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
22
- update: (args_0: number) => any;
23
22
  dragging: (args_0: boolean) => any;
23
+ update: (args_0: number) => any;
24
24
  }, string, PublicProps, Readonly<__VLS_Props> & Readonly<{
25
- onUpdate?: (args_0: number) => any;
26
25
  onDragging?: (args_0: boolean) => any;
26
+ onUpdate?: (args_0: number) => any;
27
27
  }>, {}, {}, {}, {}, string, ComponentProvideOptions, false, {
28
28
  root: HTMLDivElement;
29
29
  }, HTMLDivElement>;
@@ -1,5 +1,7 @@
1
1
  export { default as Anchor } from './Anchor.vue';
2
2
  export { default as AnchorPopup } from './AnchorPopup.vue';
3
+ export { default as FilterBadge } from './FilterBadge.vue';
4
+ export { default as FilterItem } from './FilterItem.vue';
3
5
  export { default as FilterOptionBase } from './FilterOptionBase.vue';
4
6
  export { default as SelectBase } from './SelectBase.vue';
5
7
  export { default as SliderBase } from './SliderBase.vue';
@@ -1,3 +1,2 @@
1
1
  export { default as useFormSelect } from './useFormSelect';
2
- export { default as useLoaded } from './useLoaded';
3
2
  export { default as useTranslate } from './useTranslate';
package/dist/index.css CHANGED
@@ -59,7 +59,7 @@
59
59
  --background: var(--gray-50);
60
60
  --foreground: var(--gray-700);
61
61
  --foreground-prominent: var(--gray-900);
62
- --foreground-secondary: var(--gray-400);
62
+ --foreground-secondary: var(--gray-500);
63
63
  --surface: var(--gray-25);
64
64
  --surface-loader: rgb(from var(--gray-25) r g b / .75);
65
65
  --surface-stroke: var(--gray-200);
@@ -258,7 +258,7 @@
258
258
  }
259
259
  h1 {
260
260
  color: var(--foreground-prominent);
261
- font-size: 30px;
261
+ font-size: 27px;
262
262
  }
263
263
  h2 {
264
264
  color: var(--foreground-prominent);
@@ -280,8 +280,10 @@
280
280
  a:not([class]), a[class=""] {
281
281
  color: var(--primary-600);
282
282
  text-decoration: underline;
283
+ text-decoration-color: var(--primary-400);
284
+ text-decoration-skip: auto;
283
285
  text-decoration-thickness: 1px;
284
- text-underline-offset: 4px;
286
+ text-underline-offset: 2px;
285
287
  }
286
288
  a:not([class]):hover, a[class=""]:hover {
287
289
  text-decoration: none;
@@ -289,6 +291,9 @@
289
291
  p {
290
292
  line-height: 1.6;
291
293
  }
294
+ small {
295
+ font-size: 14px;
296
+ }
292
297
  blockquote {
293
298
  position: relative;
294
299
  margin: 0 0 0 30px;
@@ -538,46 +543,31 @@
538
543
  .base-pane > .base-pane-element:only-child,
539
544
  .base-pane > .form > .base-pane-element:only-child {
540
545
  border: 0;
541
- }.icon {
542
- height: 1em;
543
- width: 1em;
544
- flex-shrink: 0;
545
- font-size: 20px;
546
- line-height: 1;
547
- overflow: visible;
548
- }
549
-
550
- .font-awesome-icon {
551
- display: inline-block;
552
- }
553
-
554
- .material-symbol-icon {
555
- display: inline-flex;
556
- color: currentColor;
557
- font-family: "Material Symbols Outlined", sans-serif;
558
- font-weight: 400;
559
- font-style: normal;
560
- user-select: none;
561
- -webkit-font-feature-settings: "liga";
562
- -webkit-font-smoothing: antialiased;
563
- }
564
-
565
- .icon-boxed {
566
- display: flex;
567
- height: 1em;
568
- width: 1em;
569
- align-items: center;
570
- flex-shrink: 0;
571
- justify-content: center;
572
- font-size: 42px;
573
- }
574
- .icon-boxed .icon {
575
- font-size: 0.45em;
576
- }
577
- .icon-boxed .material-symbol-icon {
578
- font-size: 0.5em;
546
+ }@layer flux-base {
547
+ .icon {
548
+ height: 1em;
549
+ width: 1em;
550
+ flex-shrink: 0;
551
+ font-size: 20px;
552
+ line-height: 1;
553
+ overflow: visible;
554
+ }
555
+ .font-awesome-icon {
556
+ display: inline-block;
557
+ }
558
+ .icon-boxed {
559
+ display: flex;
560
+ height: 1em;
561
+ width: 1em;
562
+ align-items: center;
563
+ flex-shrink: 0;
564
+ justify-content: center;
565
+ font-size: 42px;
566
+ }
567
+ .icon-boxed .icon {
568
+ font-size: 0.45em;
569
+ }
579
570
  }
580
-
581
571
  .icon-boxed-default {
582
572
  box-shadow: var(--shadow-sm);
583
573
  }
@@ -723,6 +713,12 @@
723
713
  margin-right: 6px;
724
714
  min-width: 42px;
725
715
  }
716
+ .badge:first-child {
717
+ margin-left: -6px;
718
+ }
719
+ .badge:last-child {
720
+ margin-right: -6px;
721
+ }
726
722
  }.action {
727
723
  height: 30px;
728
724
  width: 30px;
@@ -1097,12 +1093,21 @@
1097
1093
  --surface: var(--background);
1098
1094
  }
1099
1095
 
1096
+ :is(.pane-default, .pane-flat, .pane-well):is(button) {
1097
+ padding: 0;
1098
+ }
1099
+
1100
1100
  :is(.pane-default, .pane-flat, .pane-well):is(a, button) {
1101
- transition: box-shadow 210ms var(--swift-out);
1101
+ cursor: pointer;
1102
+ transition: 210ms var(--swift-out);
1103
+ transition-property: background, box-shadow;
1102
1104
  }
1103
1105
  :is(.pane-default, .pane-flat, .pane-well):is(a, button):hover {
1104
1106
  box-shadow: var(--shadow-lg);
1105
1107
  }
1108
+ :is(.pane-default, .pane-flat, .pane-well):is(a, button):active {
1109
+ box-shadow: var(--shadow-xs);
1110
+ }
1106
1111
 
1107
1112
  .pane-header {
1108
1113
  display: flex;
@@ -1791,6 +1796,7 @@
1791
1796
  color: var(--foreground-prominent);
1792
1797
  font-size: 13px;
1793
1798
  font-weight: 500;
1799
+ font-variant-numeric: tabular-nums;
1794
1800
  }
1795
1801
  .badge:is(a) {
1796
1802
  color: var(--foreground-prominent);
@@ -1861,7 +1867,7 @@
1861
1867
  }
1862
1868
 
1863
1869
  .badge-gray {
1864
- --color: var(--gray-700);
1870
+ --color: var(--foreground);
1865
1871
  }
1866
1872
  .badge-gray .badge-label {
1867
1873
  color: var(--foreground-prominent);
@@ -1926,6 +1932,111 @@
1926
1932
  }
1927
1933
 
1928
1934
  .tag-warning {
1935
+ }.filter {
1936
+ max-height: 50dvh;
1937
+ max-width: 100%;
1938
+ padding: 9px;
1939
+ width: 270px;
1940
+ overflow: auto;
1941
+ scrollbar-width: none;
1942
+ transition: height 150ms var(--deceleration-curve);
1943
+ z-index: 0;
1944
+ }
1945
+ .filter::-webkit-scrollbar {
1946
+ display: none;
1947
+ height: 0;
1948
+ width: 0;
1949
+ }
1950
+ .filter .menu > :where(.divider, .separator) {
1951
+ margin: 3px -9px;
1952
+ }
1953
+ .filter .menu > .menu-group > .menu-sub-header {
1954
+ top: 51px;
1955
+ }
1956
+ .filter .menu > .menu-group:has(.filter-search) > .menu-sub-header {
1957
+ top: 105px;
1958
+ }
1959
+ .filter .menu .menu-item-label {
1960
+ min-width: 0;
1961
+ overflow: hidden;
1962
+ text-overflow: ellipsis;
1963
+ white-space: nowrap;
1964
+ }
1965
+ .filter .pane-body {
1966
+ margin: -9px;
1967
+ }
1968
+
1969
+ .filter-badge {
1970
+ padding-left: 6px;
1971
+ padding-right: 6px;
1972
+ background: var(--primary-50);
1973
+ border: 1px dashed var(--primary-300);
1974
+ font-weight: 500;
1975
+ }
1976
+ .filter-badge .badge-label {
1977
+ color: var(--primary-900);
1978
+ }
1979
+
1980
+ .filter-button {
1981
+ border: 1px solid var(--surface-stroke);
1982
+ box-shadow: none;
1983
+ }
1984
+ .filter-button .badge {
1985
+ border-radius: var(--radius-half);
1986
+ }
1987
+ .filter-button .button-icon {
1988
+ color: var(--primary-700);
1989
+ font-size: 16px;
1990
+ }
1991
+
1992
+ .filter-header {
1993
+ position: sticky;
1994
+ margin: -9px -9px 3px;
1995
+ padding: 9px;
1996
+ top: -9px;
1997
+ background: var(--surface);
1998
+ border-bottom: 1px solid var(--surface-stroke);
1999
+ z-index: 2;
2000
+ }
2001
+ .filter-header:first-child {
2002
+ border-top-left-radius: var(--radius);
2003
+ border-top-right-radius: var(--radius);
2004
+ }
2005
+
2006
+ .filter-back {
2007
+ flex-grow: 1;
2008
+ }
2009
+
2010
+ .filter-reset {
2011
+ width: 42px;
2012
+ justify-content: center;
2013
+ }
2014
+
2015
+ .filter-date-picker {
2016
+ margin: -9px;
2017
+ }
2018
+
2019
+ .filter-search {
2020
+ position: sticky;
2021
+ margin: -9px -9px 0;
2022
+ padding: 9px;
2023
+ background: linear-gradient(to bottom, var(--surface) 75%, transparent);
2024
+ z-index: 1;
2025
+ }
2026
+
2027
+ .filter-header + .menu-group .filter-search {
2028
+ top: 52px;
2029
+ }
2030
+
2031
+ .filter-bar {
2032
+ display: flex;
2033
+ flex-flow: row nowrap;
2034
+ flex-grow: 1;
2035
+ gap: 15px;
2036
+ }
2037
+
2038
+ .filter-bar-search {
2039
+ max-width: 300px;
1929
2040
  }.menu {
1930
2041
  display: flex;
1931
2042
  flex-flow: column;
@@ -1978,7 +2089,10 @@
1978
2089
  }
1979
2090
 
1980
2091
  .menu-item-icon {
2092
+ margin-left: 2px;
2093
+ margin-right: 2px;
1981
2094
  color: var(--foreground-prominent);
2095
+ font-size: 16px;
1982
2096
  }
1983
2097
 
1984
2098
  .menu-item-label {
@@ -2954,85 +3068,6 @@
2954
3068
  .toggle-input::after {
2955
3069
  transition: 210ms var(--swift-out);
2956
3070
  transition-property: background, border-color, color, opacity, scale, translate, outline-color, outline-offset;
2957
- }.filter {
2958
- max-height: 50dvh;
2959
- max-width: 100%;
2960
- padding: 9px;
2961
- width: 300px;
2962
- overflow: auto;
2963
- scrollbar-width: none;
2964
- transition: height 150ms var(--deceleration-curve);
2965
- z-index: 0;
2966
- }
2967
- .filter::-webkit-scrollbar {
2968
- display: none;
2969
- height: 0;
2970
- width: 0;
2971
- }
2972
- .filter .menu > :where(.divider, .separator) {
2973
- margin: 3px -9px;
2974
- }
2975
- .filter .menu > .menu-group > .menu-sub-header {
2976
- top: 51px;
2977
- }
2978
- .filter .menu > .menu-group:has(.filter-search) > .menu-sub-header {
2979
- top: 105px;
2980
- }
2981
- .filter .menu .menu-item-label {
2982
- min-width: 0;
2983
- overflow: hidden;
2984
- text-overflow: ellipsis;
2985
- white-space: nowrap;
2986
- }
2987
- .filter .pane-body {
2988
- margin: -9px;
2989
- }
2990
-
2991
- .filter-header {
2992
- position: sticky;
2993
- margin: -9px -9px 3px;
2994
- padding: 9px;
2995
- top: -9px;
2996
- background: var(--surface);
2997
- border-bottom: 1px solid var(--surface-stroke);
2998
- z-index: 2;
2999
- }
3000
- .filter-header:first-child {
3001
- border-top-left-radius: var(--radius);
3002
- border-top-right-radius: var(--radius);
3003
- }
3004
-
3005
- .filter-back {
3006
- flex-grow: 1;
3007
- }
3008
-
3009
- .filter-reset {
3010
- width: 42px;
3011
- justify-content: center;
3012
- }
3013
-
3014
- .filter-date-picker {
3015
- margin: -9px;
3016
- }
3017
-
3018
- .filter-search {
3019
- position: sticky;
3020
- top: 52px;
3021
- margin: -9px -9px 0;
3022
- padding: 9px;
3023
- background: linear-gradient(to bottom, var(--surface) 75%, transparent);
3024
- z-index: 1;
3025
- }
3026
-
3027
- .filter-bar {
3028
- display: flex;
3029
- flex-flow: row nowrap;
3030
- flex-grow: 1;
3031
- gap: 15px;
3032
- }
3033
-
3034
- .filter-bar-search {
3035
- max-width: 300px;
3036
3071
  }.slider {
3037
3072
  position: relative;
3038
3073
  display: flex;
@@ -4006,7 +4041,7 @@ tfoot .table-cell {
4006
4041
  }
4007
4042
 
4008
4043
  .table-actions {
4009
- margin: -3px 0 -3px -3px;
4044
+ margin: -4px 0 -4px -3px;
4010
4045
  }
4011
4046
 
4012
4047
  .table-fill {
@@ -4634,6 +4669,7 @@ tfoot .table-cell {
4634
4669
  display: flex;
4635
4670
  flex-flow: row nowrap;
4636
4671
  gap: 21px;
4672
+ text-align: left;
4637
4673
  }
4638
4674
 
4639
4675
  .item-actions {
@@ -4643,30 +4679,39 @@ tfoot .table-cell {
4643
4679
  .item-content {
4644
4680
  display: flex;
4645
4681
  flex-flow: column;
4682
+ flex-grow: 1;
4646
4683
  gap: 3px;
4647
4684
  }
4648
4685
 
4649
4686
  .item-media {
4687
+ --size: 48px;
4650
4688
  flex-shrink: 0;
4651
4689
  }
4652
4690
 
4653
4691
  .item-media > img {
4654
- height: 48px;
4655
- width: 48px;
4692
+ height: var(--size);
4693
+ width: var(--size);
4656
4694
  object-fit: cover;
4657
4695
  object-position: center;
4658
4696
  }
4659
4697
 
4660
4698
  .item-media > .avatar {
4661
- font-size: 48px;
4699
+ font-size: var(--size);
4662
4700
  }
4663
4701
 
4664
4702
  .item-media > .icon {
4665
- font-size: 24px;
4703
+ margin: 1px;
4704
+ font-size: 20px;
4666
4705
  }
4667
4706
 
4668
4707
  .item-media > .icon-boxed {
4669
- font-size: 48px;
4708
+ font-size: var(--size);
4709
+ }
4710
+
4711
+ .item-actions.is-center,
4712
+ .item-content.is-center,
4713
+ .item-media.is-center {
4714
+ align-self: center;
4670
4715
  }
4671
4716
 
4672
4717
  .item-stack {
@@ -4685,6 +4730,10 @@ tfoot .table-cell {
4685
4730
 
4686
4731
  .base-pane-structure > .item-stack > .item {
4687
4732
  margin: 0;
4733
+ }
4734
+
4735
+ .base-pane-structure:is(a, button):hover:has(> .item) {
4736
+ background-color: color-mix(in srgb, rgb(from var(--surface-hover) r g b/0.125), var(--surface));
4688
4737
  }.legend-horizontal {
4689
4738
  gap: 12px 21px;
4690
4739
  }
@@ -5726,6 +5775,11 @@ tfoot .table-cell {
5726
5775
  border-color: var(--foreground);
5727
5776
  }
5728
5777
  }
5778
+ .tab-bar-item:disabled, .tab-bar-item[aria-disabled=true] {
5779
+ box-shadow: none;
5780
+ opacity: 0.5;
5781
+ pointer-events: none;
5782
+ }
5729
5783
 
5730
5784
  .tab-bar-item-active {
5731
5785
  border-color: var(--primary-600);
@@ -5843,14 +5897,18 @@ tfoot .table-cell {
5843
5897
 
5844
5898
  .timeline-item-body {
5845
5899
  position: relative;
5846
- align-self: center;
5900
+ display: flex;
5847
5901
  padding-top: 9px;
5848
5902
  padding-bottom: 9px;
5903
+ align-items: flex-start;
5904
+ align-self: center;
5905
+ flex-flow: column;
5906
+ gap: 15px;
5849
5907
  }
5850
5908
 
5851
5909
  .timeline-item-header {
5852
5910
  display: flex;
5853
- margin-bottom: 9px;
5911
+ margin-bottom: -9px;
5854
5912
  flex-flow: column;
5855
5913
  }
5856
5914
  .timeline-item-header :is(strong) {