@flux-ui/components 3.0.0-next.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 (261) hide show
  1. package/README.md +45 -0
  2. package/package.json +77 -0
  3. package/src/component/FluxAction.vue +27 -0
  4. package/src/component/FluxActionBar.vue +94 -0
  5. package/src/component/FluxActionPane.vue +40 -0
  6. package/src/component/FluxActions.vue +27 -0
  7. package/src/component/FluxAlert.vue +37 -0
  8. package/src/component/FluxAnimatedColors.vue +141 -0
  9. package/src/component/FluxAspectRatio.vue +21 -0
  10. package/src/component/FluxAutoGrid.vue +27 -0
  11. package/src/component/FluxAvatar.vue +119 -0
  12. package/src/component/FluxBadge.vue +84 -0
  13. package/src/component/FluxBadgeStack.vue +18 -0
  14. package/src/component/FluxBorderShine.vue +36 -0
  15. package/src/component/FluxBoxedIcon.vue +36 -0
  16. package/src/component/FluxButton.vue +110 -0
  17. package/src/component/FluxButtonGroup.vue +15 -0
  18. package/src/component/FluxButtonStack.vue +28 -0
  19. package/src/component/FluxCalendar.vue +254 -0
  20. package/src/component/FluxCalendarEvent.vue +41 -0
  21. package/src/component/FluxCheckbox.vue +60 -0
  22. package/src/component/FluxChip.vue +57 -0
  23. package/src/component/FluxClickablePane.vue +61 -0
  24. package/src/component/FluxColorPicker.vue +265 -0
  25. package/src/component/FluxColorSelect.vue +81 -0
  26. package/src/component/FluxComment.vue +71 -0
  27. package/src/component/FluxConfirm.vue +42 -0
  28. package/src/component/FluxContainer.vue +23 -0
  29. package/src/component/FluxDataTable.vue +96 -0
  30. package/src/component/FluxDatePicker.vue +353 -0
  31. package/src/component/FluxDestructiveButton.vue +28 -0
  32. package/src/component/FluxDisabled.vue +22 -0
  33. package/src/component/FluxDivider.vue +37 -0
  34. package/src/component/FluxDotPattern.vue +72 -0
  35. package/src/component/FluxDropZone.vue +202 -0
  36. package/src/component/FluxDynamicView.vue +16 -0
  37. package/src/component/FluxExpandable.vue +119 -0
  38. package/src/component/FluxExpandableGroup.vue +53 -0
  39. package/src/component/FluxFader.vue +64 -0
  40. package/src/component/FluxFaderItem.vue +15 -0
  41. package/src/component/FluxFilter.vue +133 -0
  42. package/src/component/FluxFilterDate.vue +58 -0
  43. package/src/component/FluxFilterDateRange.vue +59 -0
  44. package/src/component/FluxFilterOption.vue +49 -0
  45. package/src/component/FluxFilterOptionAsync.vue +103 -0
  46. package/src/component/FluxFilterOptions.vue +62 -0
  47. package/src/component/FluxFilterOptionsAsync.vue +113 -0
  48. package/src/component/FluxFilterRange.vue +91 -0
  49. package/src/component/FluxFlickeringGrid.vue +141 -0
  50. package/src/component/FluxFlyout.vue +205 -0
  51. package/src/component/FluxFocalPointEditor.vue +137 -0
  52. package/src/component/FluxFocalPointImage.vue +29 -0
  53. package/src/component/FluxForm.vue +35 -0
  54. package/src/component/FluxFormColumn.vue +15 -0
  55. package/src/component/FluxFormDateInput.vue +92 -0
  56. package/src/component/FluxFormDateRangeInput.vue +87 -0
  57. package/src/component/FluxFormDateTimeInput.vue +120 -0
  58. package/src/component/FluxFormField.vue +98 -0
  59. package/src/component/FluxFormFieldAddition.vue +37 -0
  60. package/src/component/FluxFormInput.vue +223 -0
  61. package/src/component/FluxFormInputAddition.vue +31 -0
  62. package/src/component/FluxFormInputGroup.vue +25 -0
  63. package/src/component/FluxFormPinInput.vue +135 -0
  64. package/src/component/FluxFormRangeSlider.vue +179 -0
  65. package/src/component/FluxFormRow.vue +15 -0
  66. package/src/component/FluxFormSection.vue +23 -0
  67. package/src/component/FluxFormSelect.vue +59 -0
  68. package/src/component/FluxFormSelectAsync.vue +118 -0
  69. package/src/component/FluxFormSlider.vue +123 -0
  70. package/src/component/FluxFormTextArea.vue +53 -0
  71. package/src/component/FluxFormTimeZonePicker.vue +713 -0
  72. package/src/component/FluxGallery.vue +99 -0
  73. package/src/component/FluxGalleryItem.vue +49 -0
  74. package/src/component/FluxGrid.vue +28 -0
  75. package/src/component/FluxGridColumn.vue +31 -0
  76. package/src/component/FluxGridPattern.vue +60 -0
  77. package/src/component/FluxIcon.vue +79 -0
  78. package/src/component/FluxInfo.vue +28 -0
  79. package/src/component/FluxInfoStack.vue +17 -0
  80. package/src/component/FluxLegend.vue +27 -0
  81. package/src/component/FluxLink.vue +35 -0
  82. package/src/component/FluxMenu.vue +31 -0
  83. package/src/component/FluxMenuGroup.vue +21 -0
  84. package/src/component/FluxMenuItem.vue +84 -0
  85. package/src/component/FluxMenuOptions.vue +38 -0
  86. package/src/component/FluxMenuSubHeader.vue +33 -0
  87. package/src/component/FluxMenuTitle.vue +17 -0
  88. package/src/component/FluxNotice.vue +79 -0
  89. package/src/component/FluxNoticeStack.vue +17 -0
  90. package/src/component/FluxOverlay.vue +31 -0
  91. package/src/component/FluxPagination.vue +148 -0
  92. package/src/component/FluxPaginationBar.vue +81 -0
  93. package/src/component/FluxPane.vue +45 -0
  94. package/src/component/FluxPaneBody.vue +15 -0
  95. package/src/component/FluxPaneDeck.vue +24 -0
  96. package/src/component/FluxPaneFooter.vue +15 -0
  97. package/src/component/FluxPaneGroup.vue +15 -0
  98. package/src/component/FluxPaneHeader.vue +44 -0
  99. package/src/component/FluxPaneIllustration.vue +68 -0
  100. package/src/component/FluxPaneMedia.vue +31 -0
  101. package/src/component/FluxPercentageBar.vue +45 -0
  102. package/src/component/FluxPersona.vue +48 -0
  103. package/src/component/FluxPlaceholder.vue +56 -0
  104. package/src/component/FluxPressable.vue +77 -0
  105. package/src/component/FluxPrimaryButton.vue +28 -0
  106. package/src/component/FluxProgressBar.vue +75 -0
  107. package/src/component/FluxPrompt.vue +77 -0
  108. package/src/component/FluxPublishButton.vue +59 -0
  109. package/src/component/FluxQuantitySelector.vue +109 -0
  110. package/src/component/FluxRemove.vue +34 -0
  111. package/src/component/FluxRoot.vue +60 -0
  112. package/src/component/FluxSecondaryButton.vue +28 -0
  113. package/src/component/FluxSegmentedControl.vue +77 -0
  114. package/src/component/FluxSegmentedView.vue +15 -0
  115. package/src/component/FluxSeparator.vue +19 -0
  116. package/src/component/FluxSlideOver.vue +25 -0
  117. package/src/component/FluxSnackbar.vue +154 -0
  118. package/src/component/FluxSnackbarProvider.vue +34 -0
  119. package/src/component/FluxSpacer.vue +9 -0
  120. package/src/component/FluxSpacing.vue +32 -0
  121. package/src/component/FluxSpinner.vue +48 -0
  122. package/src/component/FluxSplitButton.vue +61 -0
  123. package/src/component/FluxStack.vue +40 -0
  124. package/src/component/FluxStatistic.vue +68 -0
  125. package/src/component/FluxStepper.vue +69 -0
  126. package/src/component/FluxStepperStep.vue +15 -0
  127. package/src/component/FluxStepperSteps.vue +62 -0
  128. package/src/component/FluxTab.vue +23 -0
  129. package/src/component/FluxTabBar.vue +87 -0
  130. package/src/component/FluxTabBarItem.vue +104 -0
  131. package/src/component/FluxTable.vue +68 -0
  132. package/src/component/FluxTableActions.vue +16 -0
  133. package/src/component/FluxTableCell.vue +47 -0
  134. package/src/component/FluxTableHeader.vue +111 -0
  135. package/src/component/FluxTableRow.vue +15 -0
  136. package/src/component/FluxTabs.vue +91 -0
  137. package/src/component/FluxTag.vue +85 -0
  138. package/src/component/FluxTagStack.vue +18 -0
  139. package/src/component/FluxTicks.vue +44 -0
  140. package/src/component/FluxTimeline.vue +17 -0
  141. package/src/component/FluxTimelineItem.vue +73 -0
  142. package/src/component/FluxToggle.vue +64 -0
  143. package/src/component/FluxToolbar.vue +32 -0
  144. package/src/component/FluxToolbarGroup.vue +18 -0
  145. package/src/component/FluxTooltip.vue +56 -0
  146. package/src/component/FluxTooltipProvider.vue +176 -0
  147. package/src/component/FluxWindow.vue +47 -0
  148. package/src/component/index.ts +142 -0
  149. package/src/component/primitive/Anchor.vue +17 -0
  150. package/src/component/primitive/AnchorPopup.vue +194 -0
  151. package/src/component/primitive/CoordinatePicker.vue +155 -0
  152. package/src/component/primitive/CoordinatePickerThumb.vue +71 -0
  153. package/src/component/primitive/FilterItem.vue +44 -0
  154. package/src/component/primitive/FilterMenuRenderer.ts +233 -0
  155. package/src/component/primitive/FilterOptionBase.vue +67 -0
  156. package/src/component/primitive/SelectBase.vue +340 -0
  157. package/src/component/primitive/SliderBase.vue +89 -0
  158. package/src/component/primitive/SliderThumb.vue +64 -0
  159. package/src/component/primitive/SliderTrack.vue +22 -0
  160. package/src/component/primitive/VNodeRenderer.ts +11 -0
  161. package/src/component/primitive/index.ts +10 -0
  162. package/src/composable/index.ts +9 -0
  163. package/src/composable/private/index.ts +3 -0
  164. package/src/composable/private/useFormSelect.ts +66 -0
  165. package/src/composable/private/useLoaded.ts +21 -0
  166. package/src/composable/private/useTranslate.ts +35 -0
  167. package/src/composable/useBreakpoints.ts +54 -0
  168. package/src/composable/useDisabled.ts +9 -0
  169. package/src/composable/useDisabledInjection.ts +6 -0
  170. package/src/composable/useExpandableGroupInjection.ts +10 -0
  171. package/src/composable/useFilterInjection.ts +22 -0
  172. package/src/composable/useFlyoutInjection.ts +10 -0
  173. package/src/composable/useFormFieldInjection.ts +8 -0
  174. package/src/composable/useTableInjection.ts +11 -0
  175. package/src/css/base.scss +33 -0
  176. package/src/css/component/Action.module.scss +107 -0
  177. package/src/css/component/Avatar.module.scss +177 -0
  178. package/src/css/component/Badge.module.scss +189 -0
  179. package/src/css/component/Button.module.scss +293 -0
  180. package/src/css/component/Calendar.module.scss +171 -0
  181. package/src/css/component/Chip.module.scss +58 -0
  182. package/src/css/component/Color.module.scss +184 -0
  183. package/src/css/component/Comment.module.scss +123 -0
  184. package/src/css/component/DatePicker.module.scss +193 -0
  185. package/src/css/component/Divider.module.scss +79 -0
  186. package/src/css/component/DropZone.module.scss +99 -0
  187. package/src/css/component/Expandable.module.scss +112 -0
  188. package/src/css/component/Fader.module.scss +38 -0
  189. package/src/css/component/Filter.module.scss +80 -0
  190. package/src/css/component/Flyout.module.scss +63 -0
  191. package/src/css/component/FocalPoint.module.scss +84 -0
  192. package/src/css/component/Form.module.scss +812 -0
  193. package/src/css/component/Gallery.module.scss +64 -0
  194. package/src/css/component/Grid.module.scss +24 -0
  195. package/src/css/component/Icon.module.scss +104 -0
  196. package/src/css/component/Info.module.scss +15 -0
  197. package/src/css/component/Layout.module.scss +63 -0
  198. package/src/css/component/Legend.module.scss +32 -0
  199. package/src/css/component/Menu.module.scss +314 -0
  200. package/src/css/component/Notice.module.scss +279 -0
  201. package/src/css/component/Overlay.module.scss +149 -0
  202. package/src/css/component/Pagination.module.scss +59 -0
  203. package/src/css/component/Pane.module.scss +218 -0
  204. package/src/css/component/PercentageBar.module.scss +31 -0
  205. package/src/css/component/Placeholder.module.scss +72 -0
  206. package/src/css/component/Progress.module.scss +84 -0
  207. package/src/css/component/Remove.module.scss +29 -0
  208. package/src/css/component/Root.module.scss +8 -0
  209. package/src/css/component/SegmentedControl.module.scss +82 -0
  210. package/src/css/component/Snackbar.module.scss +227 -0
  211. package/src/css/component/Spinner.module.scss +36 -0
  212. package/src/css/component/Statistic.module.scss +118 -0
  213. package/src/css/component/Stepper.module.scss +103 -0
  214. package/src/css/component/Tab.module.scss +162 -0
  215. package/src/css/component/Table.module.scss +164 -0
  216. package/src/css/component/Timeline.module.scss +173 -0
  217. package/src/css/component/Toolbar.module.scss +82 -0
  218. package/src/css/component/Tooltip.module.scss +62 -0
  219. package/src/css/component/Transition.module.scss +142 -0
  220. package/src/css/component/Visual.module.scss +70 -0
  221. package/src/css/component/base/Button.module.scss +87 -0
  222. package/src/css/component/base/Effect.module.scss +139 -0
  223. package/src/css/component/base/Grid.module.scss +8 -0
  224. package/src/css/component/base/Pane.module.scss +54 -0
  225. package/src/css/component/primitive/CoordinatePicker.module.scss +24 -0
  226. package/src/css/component/primitive/Slider.module.scss +116 -0
  227. package/src/css/index.scss +5 -0
  228. package/src/css/layers.scss +1 -0
  229. package/src/css/mixin/breakpoints.scss +112 -0
  230. package/src/css/mixin/focus-ring.scss +56 -0
  231. package/src/css/mixin/hover.scss +7 -0
  232. package/src/css/mixin/index.scss +3 -0
  233. package/src/css/reset.scss +169 -0
  234. package/src/css/typography.scss +87 -0
  235. package/src/css/variables.scss +214 -0
  236. package/src/data/di.ts +42 -0
  237. package/src/data/filter.ts +9 -0
  238. package/src/data/helper.ts +9 -0
  239. package/src/data/i18n.ts +55 -0
  240. package/src/data/iconRegistry.ts +21 -0
  241. package/src/data/index.ts +8 -0
  242. package/src/data/inputMask.ts +34 -0
  243. package/src/data/store.ts +233 -0
  244. package/src/image/avatar-mask.svg +3 -0
  245. package/src/index.ts +25 -0
  246. package/src/transition/FluxAutoHeightTransition.vue +59 -0
  247. package/src/transition/FluxAutoWidthTransition.vue +59 -0
  248. package/src/transition/FluxBreakthroughTransition.vue +23 -0
  249. package/src/transition/FluxFadeTransition.vue +24 -0
  250. package/src/transition/FluxOverlayTransition.vue +22 -0
  251. package/src/transition/FluxRouteTransition.vue +23 -0
  252. package/src/transition/FluxSlideOverTransition.vue +22 -0
  253. package/src/transition/FluxTooltipTransition.vue +22 -0
  254. package/src/transition/FluxVerticalWindowTransition.vue +23 -0
  255. package/src/transition/FluxWindowTransition.vue +23 -0
  256. package/src/transition/index.ts +10 -0
  257. package/src/util/createDialogRenderer.ts +64 -0
  258. package/src/util/createLabelForDateRange.ts +61 -0
  259. package/src/util/index.ts +2 -0
  260. package/src/vite.d.ts +13 -0
  261. package/tsconfig.json +45 -0
@@ -0,0 +1,112 @@
1
+ @use 'sass:list';
2
+ @use 'sass:map';
3
+
4
+ $-breakpoints: (
5
+ xs: 0,
6
+ sm: 640px,
7
+ md: 768px,
8
+ lg: 1024px,
9
+ xl: 1280px
10
+ );
11
+
12
+ @function -next($breakpoint) {
13
+ $names: map.keys($-breakpoints);
14
+ $n: list.index($names, $breakpoint);
15
+
16
+ @if not $n {
17
+ @error 'Breakpoint "#{$breakpoint}" not found in "#{$names}".';
18
+ }
19
+
20
+ @return if($n < list.length($names), list.nth($names, $n + 1), null);
21
+ }
22
+
23
+ @function -maxWidth($breakpoint) {
24
+ $next: -next($breakpoint);
25
+
26
+ @return if($next, -minWidth($next) - .02, null);
27
+ }
28
+
29
+ @function -minWidth($breakpoint) {
30
+ $min: map.get($-breakpoints, $breakpoint);
31
+
32
+ @return if($min != 0, $min, null);
33
+ }
34
+
35
+ @mixin breakpoint-between($lower, $upper) {
36
+ $max: -maxWidth($upper);
37
+ $min: -minWidth($lower);
38
+
39
+ @if $max != null and $min != null {
40
+ @media (max-width: #{$max}) and (min-width: #{$min}) {
41
+ @content;
42
+ }
43
+ } @else if $max == null {
44
+ @include breakpoint-up($lower);
45
+ } @else if $min == null {
46
+ @include breakpoint-down($upper);
47
+ }
48
+ }
49
+
50
+ @mixin breakpoint-down($breakpoint) {
51
+ $max: -maxWidth($breakpoint);
52
+
53
+ @if $max {
54
+ @media (max-width: #{$max}) {
55
+ @content;
56
+ }
57
+ } @else {
58
+ @content;
59
+ }
60
+ }
61
+
62
+ @mixin breakpoint-only($breakpoint) {
63
+ @include breakpoint-between($breakpoint, $breakpoint);
64
+ }
65
+
66
+ @mixin breakpoint-up($breakpoint) {
67
+ $min: -minWidth($breakpoint);
68
+
69
+ @if $min {
70
+ @media (min-width: #{$min}) {
71
+ @content;
72
+ }
73
+ } @else {
74
+ @content;
75
+ }
76
+ }
77
+
78
+ @mixin container-breakpoint-down($container, $breakpoint) {
79
+ $max: -maxWidth($breakpoint);
80
+
81
+ @if $max {
82
+ @container #{$container} (max-width: #{$max}) {
83
+ @content;
84
+ }
85
+ } @else {
86
+ @content;
87
+ }
88
+ }
89
+
90
+ @mixin container-breakpoint-up($container, $breakpoint) {
91
+ $min: -minWidth($breakpoint);
92
+
93
+ @if $min {
94
+ @container #{$container} (min-width: #{$min}) {
95
+ @content;
96
+ }
97
+ } @else {
98
+ @content;
99
+ }
100
+ }
101
+
102
+ @mixin breakpoint-max-widths {
103
+ @each $-breakpoint, $-max-width in $-breakpoints {
104
+ @if $-breakpoint != xs {
105
+ @include breakpoint-up($-breakpoint) {
106
+ & {
107
+ max-width: #{$-max-width};
108
+ }
109
+ }
110
+ }
111
+ }
112
+ }
@@ -0,0 +1,56 @@
1
+ @mixin focus-outline {
2
+ outline: 2px solid rgb(var(--primary-7) / 0);
3
+ outline-offset: 0;
4
+ }
5
+
6
+ @mixin focus-outline-visible($offset: 0) {
7
+ outline-color: rgb(var(--primary-7));
8
+ outline-offset: $offset;
9
+ }
10
+
11
+ @mixin focus-ring($offset: 0, $within: false) {
12
+ @include focus-outline;
13
+
14
+ @if $within == true {
15
+ &:focus-visible,
16
+ &:focus-within {
17
+ @include focus-outline-visible($offset);
18
+ }
19
+ } @else {
20
+ &:focus-visible {
21
+ @include focus-outline-visible($offset);
22
+ }
23
+ }
24
+ }
25
+
26
+ @mixin focus-ring-pseudo($selector, $offset: 0, $within: false) {
27
+ &::#{$selector} {
28
+ @include focus-outline;
29
+ }
30
+
31
+ @if $within == true {
32
+ &:focus-visible::#{$selector},
33
+ &:focus-within::#{$selector} {
34
+ @include focus-outline-visible($offset);
35
+ }
36
+ } @else {
37
+ &:focus-visible::#{$selector} {
38
+ @include focus-outline-visible($offset);
39
+ }
40
+ }
41
+ }
42
+
43
+ @mixin focus-ring-remove {
44
+ outline: 0 !important;
45
+ }
46
+
47
+ @mixin focus-ring-transition($offset: 0, $within: false) {
48
+ transition: 180ms var(--swift-out);
49
+ transition-property: focus-ring-transition-properties();
50
+
51
+ @include focus-ring($offset, $within);
52
+ }
53
+
54
+ @function focus-ring-transition-properties() {
55
+ @return outline-color, outline-offset;
56
+ }
@@ -0,0 +1,7 @@
1
+ @mixin hover {
2
+ @media (hover: hover) {
3
+ &:hover {
4
+ @content;
5
+ }
6
+ }
7
+ }
@@ -0,0 +1,3 @@
1
+ @forward 'breakpoints';
2
+ @forward 'focus-ring';
3
+ @forward 'hover';
@@ -0,0 +1,169 @@
1
+ @layer flux-reset {
2
+ // More intuitive box-sizing model.
3
+ *, *::before, *::after {
4
+ box-sizing: border-box;
5
+ }
6
+
7
+ // Remove default margin.
8
+ * {
9
+ margin: 0;
10
+ }
11
+
12
+ // Keyword animations.
13
+ //html {
14
+ // interpolate-size: allow-keywords;
15
+ //}
16
+
17
+ body {
18
+ // Accessible line-height.
19
+ line-height: 1.5;
20
+
21
+ // Improved text rendering.
22
+ -webkit-font-smoothing: antialiased;
23
+
24
+ // Remove tap highlight color on iOS and macOS.
25
+ -webkit-tap-highlight-color: rgb(0 0 0 / 0);
26
+
27
+ // Default tab size.
28
+ -moz-tab-size: 4;
29
+ tab-size: 4;
30
+ }
31
+
32
+ // Improved media defaults.
33
+ img, picture, video, canvas, svg {
34
+ display: block;
35
+ max-width: 100%;
36
+ }
37
+
38
+ /* 7. Inherit fonts for form controls */
39
+ input, button, textarea, select {
40
+ font: inherit;
41
+ }
42
+
43
+ /* 8. Avoid text overflows */
44
+ p, h1, h2, h3, h4, h5, h6 {
45
+ overflow-wrap: break-word;
46
+ }
47
+
48
+ // Improved line wrapping for paragraphs.
49
+ p {
50
+ text-wrap: pretty;
51
+ }
52
+
53
+ // Improved line wrapping for headings.
54
+ h1, h2, h3, h4, h5, h6 {
55
+ text-wrap: balance;
56
+ }
57
+
58
+ // Remove automatic text transforms from buttons and selects.
59
+ button, select {
60
+ text-transform: none;
61
+ }
62
+
63
+ // Create a new root stacking context.
64
+ #app {
65
+ isolation: isolate;
66
+ }
67
+ }
68
+
69
+ //@layer flux-reset {
70
+ // *,
71
+ // *::before,
72
+ // *::after {
73
+ // box-sizing: border-box;
74
+ // }
75
+ //
76
+ // html {
77
+ // line-height: 1.6;
78
+ // -webkit-text-size-adjust: 100%;
79
+ // -webkit-tap-highlight-color: rgb(0 0 0 / 0);
80
+ // -moz-tab-size: 4;
81
+ // tab-size: 4;
82
+ // }
83
+ //
84
+ // body {
85
+ // margin: 0;
86
+ // padding: 0;
87
+ // line-height: inherit;
88
+ // }
89
+ //
90
+ // blockquote,
91
+ // dl,
92
+ // dd,
93
+ // h1,
94
+ // h2,
95
+ // h3,
96
+ // h4,
97
+ // h5,
98
+ // h6,
99
+ // hr,
100
+ // figure,
101
+ // p,
102
+ // pre {
103
+ // margin: 0;
104
+ // }
105
+ //
106
+ // h1,
107
+ // h2,
108
+ // h3,
109
+ // h4,
110
+ // h5,
111
+ // h6 {
112
+ // font-size: inherit;
113
+ // font-weight: inherit;
114
+ // }
115
+ //
116
+ // ul,
117
+ // ol {
118
+ // margin: 0;
119
+ // }
120
+ //
121
+ // code,
122
+ // kbd,
123
+ // samp,
124
+ // pre {
125
+ // font-family: monospace;
126
+ // font-size: 1em;
127
+ // }
128
+ //
129
+ // small {
130
+ // font-size: 80%;
131
+ // }
132
+ //
133
+ // sub,
134
+ // sup {
135
+ // position: relative;
136
+ // font-size: 75%;
137
+ // line-height: 0;
138
+ // vertical-align: baseline;
139
+ // }
140
+ //
141
+ // sub {
142
+ // bottom: -0.25em;
143
+ // }
144
+ //
145
+ // sup {
146
+ // top: -0.5em;
147
+ // }
148
+ //
149
+ // button,
150
+ // select {
151
+ // text-transform: none;
152
+ // }
153
+ //
154
+ // button,
155
+ // input,
156
+ // textarea {
157
+ // font: inherit;
158
+ // }
159
+ //
160
+ // a {
161
+ // color: inherit;
162
+ // text-decoration: none;
163
+ // }
164
+ //
165
+ // b,
166
+ // strong {
167
+ // font-weight: bolder;
168
+ // }
169
+ //}
@@ -0,0 +1,87 @@
1
+ @layer flux-base {
2
+ h1, h2, h3, h4, h5, h6 {
3
+ font-weight: 700;
4
+ line-height: 1.6;
5
+ text-wrap: balance;
6
+ }
7
+
8
+ h1 {
9
+ color: var(--foreground-prominent);
10
+ font-size: 30px;
11
+ }
12
+
13
+ h2 {
14
+ color: var(--foreground-prominent);
15
+ font-size: 21px;
16
+ }
17
+
18
+ h3 {
19
+ color: var(--foreground);
20
+ font-size: 18px;
21
+ }
22
+
23
+ h4 {
24
+ font-size: 16px;
25
+ }
26
+
27
+ h5 {
28
+ font-size: 15px;
29
+ }
30
+
31
+ h6 {
32
+ font-size: 14px;
33
+ }
34
+
35
+ a:not([class]), a[class=""] {
36
+ color: rgb(var(--primary-7));
37
+ text-decoration: underline;
38
+ text-decoration-thickness: 1px;
39
+ text-underline-offset: 4px;
40
+
41
+ &:hover {
42
+ text-decoration: none;
43
+ }
44
+ }
45
+
46
+ p {
47
+ line-height: 1.8;
48
+ }
49
+
50
+ blockquote {
51
+ position: relative;
52
+ margin: 0 0 0 30px;
53
+ padding: 15px 21px;
54
+ background: rgb(var(--gray-2));
55
+ border-radius: var(--radius);
56
+
57
+ &::before {
58
+ position: absolute;
59
+ top: 5px;
60
+ left: -27px;
61
+ content: '”';
62
+ color: rgb(var(--primary-7));
63
+ font-size: 39px;
64
+ font-weight: 700;
65
+ }
66
+ }
67
+
68
+ img:not([class]) {
69
+ height: unset;
70
+ max-width: 100%;
71
+ border-radius: calc(var(--radius) / 2);
72
+ outline: 1px solid rgb(0 0 0 / .025);
73
+ outline-offset: -1px;
74
+ }
75
+
76
+ :where(h1, h2, h3, h4, h5, h6, p, ul, ol, li, blockquote, img, [data-typography-aware]) + :where(h1, h2, h3) {
77
+ margin-top: 33px;
78
+ }
79
+
80
+ :where(h1, h2, h3, h4, h5, h6, p, ul, ol, li, blockquote, img, [data-typography-aware]) + :where(h4, h5, h6, p, ul, ol, li, blockquote, img) {
81
+ margin-top: 12px;
82
+ }
83
+
84
+ :where(h1, h2, h3, h4, h5, h6, p, ul, ol, li, blockquote, img, [data-typography-aware]) + :where([data-typography-aware]) {
85
+ margin-top: 21px;
86
+ }
87
+ }
@@ -0,0 +1,214 @@
1
+ @use 'sass:color';
2
+
3
+ @function -rgb($hex) {
4
+ @return color.channel($hex, 'red', $space: rgb) color.channel($hex, 'green', $space: rgb) color.channel($hex, 'blue', $space: rgb);
5
+ }
6
+
7
+ @mixin animation {
8
+ --acceleration-curve: cubic-bezier(0.4, 0, 1, 1);
9
+ --deceleration-curve: cubic-bezier(0, 0, 0.2, 1);
10
+ --standard-curve: cubic-bezier(0.4, 0, 0.2, 1);
11
+ --swift-out: cubic-bezier(0.55, 0, 0.1, 1);
12
+ }
13
+
14
+ @mixin color-light {
15
+ --primary-0: #{-rgb(#ffffff)};
16
+ --primary-1: #{-rgb(#f5f8ff)};
17
+ --primary-2: #{-rgb(#eff4ff)};
18
+ --primary-3: #{-rgb(#d1e0ff)};
19
+ --primary-4: #{-rgb(#b2ccff)};
20
+ --primary-5: #{-rgb(#84adff)};
21
+ --primary-6: #{-rgb(#528bff)};
22
+ --primary-7: #{-rgb(#2970ff)};
23
+ --primary-8: #{-rgb(#155eef)};
24
+ --primary-9: #{-rgb(#004eeb)};
25
+ --primary-10: #{-rgb(#0040c1)};
26
+ --primary-11: #{-rgb(#00359e)};
27
+
28
+ --danger-0: #{-rgb(#ffffff)};
29
+ --danger-1: #{-rgb(#fff1f2)};
30
+ --danger-2: #{-rgb(#ffe4e6)};
31
+ --danger-3: #{-rgb(#ffccd3)};
32
+ --danger-4: #{-rgb(#ffa1ad)};
33
+ --danger-5: #{-rgb(#ff637e)};
34
+ --danger-6: #{-rgb(#ff2056)};
35
+ --danger-7: #{-rgb(#ec003f)};
36
+ --danger-8: #{-rgb(#c70036)};
37
+ --danger-9: #{-rgb(#a50036)};
38
+ --danger-10: #{-rgb(#8b0836)};
39
+ --danger-11: #{-rgb(#4d0218)};
40
+
41
+ --info-0: #{-rgb(#ffffff)};
42
+ --info-1: #{-rgb(#eff6ff)};
43
+ --info-2: #{-rgb(#dbeafe)};
44
+ --info-3: #{-rgb(#bedbff)};
45
+ --info-4: #{-rgb(#8ec5ff)};
46
+ --info-5: #{-rgb(#51a2ff)};
47
+ --info-6: #{-rgb(#2b7fff)};
48
+ --info-7: #{-rgb(#155dfc)};
49
+ --info-8: #{-rgb(#1447e6)};
50
+ --info-9: #{-rgb(#193cb8)};
51
+ --info-10: #{-rgb(#1c398e)};
52
+ --info-11: #{-rgb(#162456)};
53
+
54
+ --success-0: #{-rgb(#ffffff)};
55
+ --success-1: #{-rgb(#f0fdf4)};
56
+ --success-2: #{-rgb(#dcfce7)};
57
+ --success-3: #{-rgb(#b9f8cf)};
58
+ --success-4: #{-rgb(#7bf1a8)};
59
+ --success-5: #{-rgb(#05df72)};
60
+ --success-6: #{-rgb(#00c950)};
61
+ --success-7: #{-rgb(#00a63e)};
62
+ --success-8: #{-rgb(#008236)};
63
+ --success-9: #{-rgb(#016630)};
64
+ --success-10: #{-rgb(#0d542b)};
65
+ --success-11: #{-rgb(#032e15)};
66
+
67
+ --warning-0: #{-rgb(#ffffff)};
68
+ --warning-1: #{-rgb(#fffbeb)};
69
+ --warning-2: #{-rgb(#fef3c6)};
70
+ --warning-3: #{-rgb(#fee685)};
71
+ --warning-4: #{-rgb(#ffd230)};
72
+ --warning-5: #{-rgb(#ffb900)};
73
+ --warning-6: #{-rgb(#fe9a00)};
74
+ --warning-7: #{-rgb(#e17100)};
75
+ --warning-8: #{-rgb(#bb4d00)};
76
+ --warning-9: #{-rgb(#973c00)};
77
+ --warning-10: #{-rgb(#7b3306)};
78
+ --warning-11: #{-rgb(#461901)};
79
+
80
+ --gray-0: #{-rgb(#ffffff)};
81
+ --gray-1: #{-rgb(#f8fafc)};
82
+ --gray-2: #{-rgb(#f1f5f9)};
83
+ --gray-3: #{-rgb(#e2e8f0)};
84
+ --gray-4: #{-rgb(#cad5e2)};
85
+ --gray-5: #{-rgb(#90a1b9)};
86
+ --gray-6: #{-rgb(#62748e)};
87
+ --gray-7: #{-rgb(#45556c)};
88
+ --gray-8: #{-rgb(#314158)};
89
+ --gray-9: #{-rgb(#1d293d)};
90
+ --gray-10: #{-rgb(#0f172b)};
91
+ --gray-11: #{-rgb(#020618)};
92
+ }
93
+
94
+ @mixin color-dark {
95
+ //--primary-0: #{-rgb(#182035)};
96
+ //--primary-1: #{-rgb(#1f2a45)};
97
+ //--primary-2: #{-rgb(#243254)};
98
+ //--primary-3: #{-rgb(#2b3c63)};
99
+ //--primary-4: #{-rgb(#314471)};
100
+ //--primary-5: #{-rgb(#385080)};
101
+ //--primary-6: #{-rgb(#3e5a8e)};
102
+ //--primary-7: #{-rgb(#44669e)};
103
+ //--primary-8: #{-rgb(#5077b0)};
104
+ //--primary-9: #{-rgb(#5a84bf)};
105
+ //--primary-10: #{-rgb(#6594d1)};
106
+ //--primary-11: #{-rgb(#709fe3)};
107
+
108
+ --danger-0: #{-rgb(#272325)};
109
+ --danger-1: #{-rgb(#331e23)};
110
+ --danger-2: #{-rgb(#3e1f28)};
111
+ --danger-3: #{-rgb(#4c222e)};
112
+ --danger-4: #{-rgb(#5b2635)};
113
+ --danger-5: #{-rgb(#6a2b3e)};
114
+ --danger-6: #{-rgb(#7a3047)};
115
+ --danger-7: #{-rgb(#8b3552)};
116
+ --danger-8: #{-rgb(#9e3a5f)};
117
+ --danger-9: #{-rgb(#a53d6e)};
118
+ --danger-10: #{-rgb(#b63e7c)};
119
+ --danger-11: #{-rgb(#c8408c)};
120
+
121
+ --info-0: #{-rgb(#23262c)};
122
+ --info-1: #{-rgb(#1f2832)};
123
+ --info-2: #{-rgb(#243141)};
124
+ --info-3: #{-rgb(#2a3d52)};
125
+ --info-4: #{-rgb(#2f4a66)};
126
+ --info-5: #{-rgb(#34567b)};
127
+ --info-6: #{-rgb(#3b638f)};
128
+ --info-7: #{-rgb(#436fa3)};
129
+ --info-8: #{-rgb(#4b7bb7)};
130
+ --info-9: #{-rgb(#5588cb)};
131
+ --info-10: #{-rgb(#6094df)};
132
+ --info-11: #{-rgb(#6aa3f3)};
133
+
134
+ --success-0: #{-rgb(#1d2620)};
135
+ --success-1: #{-rgb(#222d26)};
136
+ --success-2: #{-rgb(#26342c)};
137
+ --success-3: #{-rgb(#2c4435)};
138
+ --success-4: #{-rgb(#33543e)};
139
+ --success-5: #{-rgb(#3a6547)};
140
+ --success-6: #{-rgb(#417651)};
141
+ --success-7: #{-rgb(#4b875d)};
142
+ --success-8: #{-rgb(#589967)};
143
+ --success-9: #{-rgb(#6eac74)};
144
+ --success-10: #{-rgb(#86ba86)};
145
+ --success-11: #{-rgb(#9bc89b)};
146
+
147
+ --warning-0: #{-rgb(#2b261a)};
148
+ --warning-1: #{-rgb(#332b1b)};
149
+ --warning-2: #{-rgb(#3d321e)};
150
+ --warning-3: #{-rgb(#4a3c21)};
151
+ --warning-4: #{-rgb(#554825)};
152
+ --warning-5: #{-rgb(#63552a)};
153
+ --warning-6: #{-rgb(#74602f)};
154
+ --warning-7: #{-rgb(#8a6c34)};
155
+ --warning-8: #{-rgb(#a37b3a)};
156
+ --warning-9: #{-rgb(#c19041)};
157
+ --warning-10: #{-rgb(#d5a048)};
158
+ --warning-11: #{-rgb(#eab14f)};
159
+
160
+ --gray-0: #{-rgb(#14161a)};
161
+ --gray-1: #{-rgb(#1b1d21)};
162
+ --gray-2: #{-rgb(#22252b)};
163
+ --gray-3: #{-rgb(#2a2d33)};
164
+ --gray-4: #{-rgb(#333b3d)};
165
+ --gray-5: #{-rgb(#3d464a)};
166
+ --gray-6: #{-rgb(#475055)};
167
+ --gray-7: #{-rgb(#515d60)};
168
+ --gray-8: #{-rgb(#5c696b)};
169
+ --gray-9: #{-rgb(#677577)};
170
+ --gray-10: #{-rgb(#738180)};
171
+ --gray-11: #{-rgb(#7f8c8c)};
172
+ }
173
+
174
+ @mixin default-light {
175
+ --font-monospace: jetbrains-mono, monospace;
176
+ --font-sans: inter-variable, sans-serif;
177
+ --font-serif: serif;
178
+ --font-size: 15px;
179
+ --radius: 9px;
180
+
181
+ --background: rgb(var(--gray-2));
182
+
183
+ --foreground: rgb(var(--gray-8));
184
+ --foreground-prominent: rgb(var(--gray-10));
185
+ --foreground-secondary: rgb(var(--gray-5));
186
+ }
187
+
188
+ @mixin default-dark {
189
+ --background: rgb(var(--gray-2));
190
+
191
+ --foreground: #cbd5e1;
192
+ --foreground-prominent: #ffffff;
193
+ --foreground-secondary: #64748b;
194
+ }
195
+
196
+ @mixin shadow-light {
197
+ --shadow-px: 0 1px 1px rgb(29 41 61 / .025);
198
+ --shadow-xs: 0 1px 2px 0 rgb(29 41 61 / .025);
199
+ --shadow-sm: 0 1px 3px rgb(29 41 61 / .05), 0 1px 2px -1px rgb(29 41 61 / .05);
200
+ --shadow-md: 0 4px 6px -1px rgb(29 41 61 / .05), 0 2px 4px -2px rgb(29 41 61 / .05);
201
+ --shadow-lg: 0 10px 15px -3px rgb(29 41 61 / .05), 0 4px 6px -4px rgb(29 41 61 / .05);
202
+ --shadow-xl: 0 20px 25px -5px rgb(29 41 61 / .05), 0 8px 10px -6px rgb(29 41 61 / .05);
203
+ --shadow-2xl: 0 25px 50px -12px rgb(29 41 61 / .125);
204
+ }
205
+
206
+ @mixin shadow-dark {
207
+ --shadow-px: 0 1px 1px rgb(0 0 0 / .05);
208
+ --shadow-xs: 0 1px 2px 0 rgb(0 0 0 / .05);
209
+ --shadow-sm: 0 1px 3px rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);
210
+ --shadow-md: 0 4px 6px -1px rgb(0 0 0 / .1), 0 2px 4px -2px rgb(0 0 0 / .1);
211
+ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / .1), 0 4px 6px -4px rgb(0 0 0 / .1);
212
+ --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);
213
+ --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / .25);
214
+ }
package/src/data/di.ts ADDED
@@ -0,0 +1,42 @@
1
+ import type { FluxFilterState, FluxFilterValue } from '@flux-ui/types';
2
+ import type { ComponentInternalInstance, InjectionKey, Ref } from 'vue';
3
+
4
+ export const FluxDisabledInjectionKey: InjectionKey<Ref<boolean>> = Symbol();
5
+ export const FluxExpandableGroupInjectionKey: InjectionKey<FluxExpandableGroupInjection> = Symbol();
6
+ export const FluxFlyoutInjectionKey: InjectionKey<FluxFlyoutInjection> = Symbol();
7
+ export const FluxFilterInjectionKey: InjectionKey<FluxFilterInjection> = Symbol();
8
+ export const FluxFormFieldInjectionKey: InjectionKey<FluxFormFieldInjection> = Symbol();
9
+ export const FluxTableInjectionKey: InjectionKey<FluxTableInjection> = Symbol();
10
+
11
+ export type FluxExpandableGroupInjection = {
12
+ closeAll(): void;
13
+ register(uid: number, expandable: ComponentInternalInstance): void;
14
+ unregister(uid: number): void;
15
+ };
16
+
17
+ export type FluxFilterInjection = {
18
+ readonly state: Ref<FluxFilterState>;
19
+
20
+ back(): void;
21
+ reset(name: string | number): void;
22
+ getValue(name: string | number): FluxFilterValue | undefined;
23
+ hasValue(name: string | number): boolean;
24
+ setValue(name: string | number, value?: FluxFilterValue): void;
25
+ };
26
+
27
+ export type FluxFlyoutInjection = {
28
+ readonly isClosing: Ref<boolean>;
29
+ readonly isOpen: Ref<boolean>;
30
+ readonly isOpening: Ref<boolean>;
31
+ };
32
+
33
+ export type FluxFormFieldInjection = {
34
+ readonly id?: string;
35
+ };
36
+
37
+ export type FluxTableInjection = {
38
+ readonly isBordered: boolean;
39
+ readonly isHoverable: boolean;
40
+ readonly isSeparated: boolean;
41
+ readonly isStriped: boolean;
42
+ };
@@ -0,0 +1,9 @@
1
+ import type { FluxFilterOptionHeader, FluxFilterOptionItem } from '@flux-ui/types';
2
+
3
+ export function isFluxFilterOptionHeader(obj: object): obj is FluxFilterOptionHeader {
4
+ return 'title' in obj;
5
+ }
6
+
7
+ export function isFluxFilterOptionItem(obj: object): obj is FluxFilterOptionItem {
8
+ return 'label' in obj && 'value' in obj;
9
+ }