@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
@@ -1,48 +1,33 @@
1
- .icon {
2
- height: 1em;
3
- width: 1em;
4
- flex-shrink: 0;
5
- font-size: 20px;
6
- line-height: 1;
7
- overflow: visible;
8
- }
9
-
10
- .fontAwesomeIcon {
11
- composes: icon;
12
-
13
- display: inline-block;
14
- }
1
+ @layer flux-base {
2
+ .icon {
3
+ height: 1em;
4
+ width: 1em;
5
+ flex-shrink: 0;
6
+ font-size: 20px;
7
+ line-height: 1;
8
+ overflow: visible;
9
+ }
15
10
 
16
- .materialSymbolIcon {
17
- composes: icon;
18
-
19
- display: inline-flex;
20
- color: currentColor;
21
- font-family: 'Material Symbols Outlined', sans-serif;
22
- font-weight: 400;
23
- font-style: normal;
24
- user-select: none;
25
- -webkit-font-feature-settings: 'liga';
26
- -webkit-font-smoothing: antialiased;
27
- }
11
+ .fontAwesomeIcon {
12
+ composes: icon;
28
13
 
29
- .iconBoxed {
30
- composes: basePane from './base/Pane.module.scss';
14
+ display: inline-block;
15
+ }
31
16
 
32
- display: flex;
33
- height: 1em;
34
- width: 1em;
35
- align-items: center;
36
- flex-shrink: 0;
37
- justify-content: center;
38
- font-size: 42px;
17
+ .iconBoxed {
18
+ composes: basePane from './base/Pane.module.scss';
39
19
 
40
- .icon {
41
- font-size: .45em;
42
- }
20
+ display: flex;
21
+ height: 1em;
22
+ width: 1em;
23
+ align-items: center;
24
+ flex-shrink: 0;
25
+ justify-content: center;
26
+ font-size: 42px;
43
27
 
44
- .materialSymbolIcon {
45
- font-size: .5em;
28
+ .icon {
29
+ font-size: .45em;
30
+ }
46
31
  }
47
32
  }
48
33
 
@@ -4,6 +4,7 @@
4
4
  display: flex;
5
5
  flex-flow: row nowrap;
6
6
  gap: 21px;
7
+ text-align: left;
7
8
  }
8
9
 
9
10
  .itemActions {
@@ -13,30 +14,40 @@
13
14
  .itemContent {
14
15
  display: flex;
15
16
  flex-flow: column;
17
+ flex-grow: 1;
16
18
  gap: 3px;
17
19
  }
18
20
 
19
21
  .itemMedia {
22
+ --size: 48px;
23
+
20
24
  flex-shrink: 0;
21
25
  }
22
26
 
23
27
  .itemMedia > img {
24
- height: 48px;
25
- width: 48px;
28
+ height: var(--size);
29
+ width: var(--size);
26
30
  object-fit: cover;
27
31
  object-position: center;
28
32
  }
29
33
 
30
34
  .itemMedia > .avatar {
31
- font-size: 48px;
35
+ font-size: var(--size);
32
36
  }
33
37
 
34
38
  .itemMedia > .icon {
35
- font-size: 24px;
39
+ margin: 1px;
40
+ font-size: 20px;
36
41
  }
37
42
 
38
43
  .itemMedia > .iconBoxed {
39
- font-size: 48px;
44
+ font-size: var(--size);
45
+ }
46
+
47
+ .itemActions.isCenter,
48
+ .itemContent.isCenter,
49
+ .itemMedia.isCenter {
50
+ align-self: center;
40
51
  }
41
52
 
42
53
  .itemStack {
@@ -57,3 +68,7 @@
57
68
  .basePaneStructure > .itemStack > .item {
58
69
  margin: 0;
59
70
  }
71
+
72
+ .basePaneStructure:is(a, button):hover:has(> .item) {
73
+ background-color: color-mix(in srgb, rgb(from var(--surface-hover) r g b / .125), var(--surface));
74
+ }
@@ -65,7 +65,10 @@
65
65
  .menuItemIcon {
66
66
  composes: buttonIcon from './base/Button.module.scss';
67
67
 
68
+ margin-left: 2px;
69
+ margin-right: 2px;
68
70
  color: var(--foreground-prominent);
71
+ font-size: 16px;
69
72
  }
70
73
 
71
74
  .menuItemLabel {
@@ -18,13 +18,22 @@
18
18
  --surface: var(--background);
19
19
  }
20
20
 
21
+ :is(.paneDefault, .paneFlat, .paneWell):is(button) {
22
+ padding: 0;
23
+ }
21
24
 
22
25
  :is(.paneDefault, .paneFlat, .paneWell):is(a, button) {
23
- transition: box-shadow 210ms var(--swift-out);
26
+ cursor: pointer;
27
+ transition: 210ms var(--swift-out);
28
+ transition-property: background, box-shadow;
24
29
 
25
30
  &:hover {
26
31
  box-shadow: var(--shadow-lg);
27
32
  }
33
+
34
+ &:active {
35
+ box-shadow: var(--shadow-xs);
36
+ }
28
37
  }
29
38
 
30
39
  .paneHeader {
@@ -108,6 +108,13 @@
108
108
  border-color: var(--foreground);
109
109
  }
110
110
  }
111
+
112
+ &:disabled,
113
+ &[aria-disabled=true] {
114
+ box-shadow: none;
115
+ opacity: .5;
116
+ pointer-events: none;
117
+ }
111
118
  }
112
119
 
113
120
  .tabBarItemActive {
@@ -106,7 +106,7 @@ tfoot .tableCell {
106
106
  }
107
107
 
108
108
  .tableActions {
109
- margin: -3px 0 -3px -3px;
109
+ margin: -4px 0 -4px -3px;
110
110
  }
111
111
 
112
112
  .tableFill {
@@ -57,14 +57,18 @@
57
57
 
58
58
  .timelineItemBody {
59
59
  position: relative;
60
- align-self: center;
60
+ display: flex;
61
61
  padding-top: 9px;
62
62
  padding-bottom: 9px;
63
+ align-items: flex-start;
64
+ align-self: center;
65
+ flex-flow: column;
66
+ gap: 15px;
63
67
  }
64
68
 
65
69
  .timelineItemHeader {
66
70
  display: flex;
67
- margin-bottom: 9px;
71
+ margin-bottom: -9px;
68
72
  flex-flow: column;
69
73
 
70
74
  :is(strong) {
@@ -84,4 +84,14 @@
84
84
  min-width: 42px;
85
85
  }
86
86
  }
87
+
88
+ .badge {
89
+ &:first-child {
90
+ margin-left: -6px;
91
+ }
92
+
93
+ &:last-child {
94
+ margin-right: -6px;
95
+ }
96
+ }
87
97
  }
@@ -7,7 +7,7 @@
7
7
 
8
8
  h1 {
9
9
  color: var(--foreground-prominent);
10
- font-size: 30px;
10
+ font-size: 27px;
11
11
  }
12
12
 
13
13
  h2 {
@@ -35,8 +35,10 @@
35
35
  a:not([class]), a[class=""] {
36
36
  color: var(--primary-600);
37
37
  text-decoration: underline;
38
+ text-decoration-color: var(--primary-400);
39
+ text-decoration-skip: auto;
38
40
  text-decoration-thickness: 1px;
39
- text-underline-offset: 4px;
41
+ text-underline-offset: 2px;
40
42
 
41
43
  &:hover {
42
44
  text-decoration: none;
@@ -47,6 +49,10 @@
47
49
  line-height: 1.6;
48
50
  }
49
51
 
52
+ small {
53
+ font-size: 14px;
54
+ }
55
+
50
56
  blockquote {
51
57
  position: relative;
52
58
  margin: 0 0 0 30px;
@@ -205,7 +205,7 @@
205
205
  --background: var(--gray-50);
206
206
  --foreground: var(--gray-700);
207
207
  --foreground-prominent: var(--gray-900);
208
- --foreground-secondary: var(--gray-400);
208
+ --foreground-secondary: var(--gray-500);
209
209
  --surface: var(--gray-25);
210
210
  --surface-loader: rgb(from var(--gray-25) r g b / .75);
211
211
  --surface-stroke: var(--gray-200);
@@ -11,8 +11,10 @@ type Props = {
11
11
  };
12
12
 
13
13
  const TARGET_SELECTOR = `.${$style.overlayProvider.replaceAll(' ', '.')}`;
14
+ let DIALOG_ID = 0;
14
15
 
15
16
  export default function (attrs: object, props: Props, emit: Emit, slots: Slots, className: string, transition: Component): RenderFunction {
17
+ const dialogId = `flux-dialog:${DIALOG_ID++}`;
16
18
  let unregister: Function | null = null;
17
19
  let zIndex = 0;
18
20
 
@@ -58,7 +60,7 @@ export default function (attrs: object, props: Props, emit: Emit, slots: Slots,
58
60
  }
59
61
 
60
62
  content = h('div', {
61
- key: props.viewKey,
63
+ key: props.viewKey ?? dialogId,
62
64
  ref: dialogRef,
63
65
  class: [className, zIndex === dialogCount && $style.isCurrent],
64
66
  style: {
@@ -1,5 +0,0 @@
1
- import { ComputedRef } from 'vue';
2
- export default function (): {
3
- isLoading: ComputedRef<boolean>;
4
- loaded: <T extends Function>(fn: T) => T;
5
- };
@@ -1,21 +0,0 @@
1
- import { computed, shallowRef, unref } from 'vue';
2
-
3
- export default function () {
4
- const tasks = shallowRef(0);
5
-
6
- const isLoading = computed(() => unref(tasks) > 0);
7
-
8
- function loaded<T extends Function>(fn: T): T {
9
- return (async (...args: any[]) => {
10
- tasks.value++;
11
-
12
- return await fn(...args)
13
- .finally(() => tasks.value--);
14
- }) as unknown as T;
15
- }
16
-
17
- return {
18
- isLoading,
19
- loaded
20
- };
21
- }