@aleph-alpha/ui-library 1.18.0 → 1.20.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.
- package/config.d.ts +7 -0
- package/config.js +100 -0
- package/dist/system/index.d.ts +15 -1
- package/dist/system/lib.js +11471 -11418
- package/docs/public-docs/getting-started-designers.md +19 -6
- package/package.json +1 -1
- package/src/components/UiDropdownMenu/UiDropdownMenu.stories.ts +110 -0
- package/src/components/UiField/UiField.vue +2 -2
- package/src/components/UiField/UiFieldError.vue +1 -1
- package/src/components/core/badge/Badge.vue +25 -2
- package/src/components/core/badge/index.ts +4 -5
- package/src/components/core/button/Button.vue +30 -2
- package/src/components/core/button/index.ts +7 -7
- package/src/directives/index.ts +1 -0
- package/src/directives/vHover.stories.ts +129 -0
- package/src/directives/vHover.ts +70 -0
- package/src/index.ts +4 -0
- package/src/patterns/UiDataTable/UiDataTable.stories.ts +98 -1
- package/src/patterns/UiDataTable/UiDataTable.vue +15 -0
- package/src/patterns/UiDataTable/UiDataTableColumnHeader.vue +29 -55
- package/src/patterns/UiDataTable/__tests__/UiDataTable.test.ts +90 -8
- package/src/patterns/UiDataTable/__tests__/UiDataTableColumnHeader.test.ts +27 -81
- package/src/patterns/UiDataTable/types.ts +5 -0
- package/src/patterns/UiDatePicker/__tests__/UiDatePicker.test.ts +8 -6
- package/src/theme/Overlay.stories.ts +12 -12
- package/tokens.json +4048 -1388
package/config.d.ts
CHANGED
|
@@ -176,6 +176,13 @@ export declare const presetUiLibraryThemeFromTokens: (options?: UiLibraryPresetO
|
|
|
176
176
|
*/
|
|
177
177
|
export declare const presetUiLibraryUtils: () => Preset;
|
|
178
178
|
|
|
179
|
+
/** Overlay tier keys for the `v-hover` directive (injected hover overlay span). */
|
|
180
|
+
export declare const vHoverOverlayVariants: Readonly<{
|
|
181
|
+
subtle: 'subtle';
|
|
182
|
+
default: 'default';
|
|
183
|
+
strong: 'strong';
|
|
184
|
+
}>;
|
|
185
|
+
|
|
179
186
|
/**
|
|
180
187
|
* Typography shortcut tuple: [className, cssProperties]
|
|
181
188
|
*/
|
package/config.js
CHANGED
|
@@ -336,6 +336,11 @@ const buildShadcnVarsFromModeSet = (modeSetName) => {
|
|
|
336
336
|
// Hover overlays
|
|
337
337
|
const hoverDefault = resolve('overlay.hover.default-hover');
|
|
338
338
|
|
|
339
|
+
// Overlay hover surfaces (3-mode overlay.hover → utilities: bg-overlay-hover-*)
|
|
340
|
+
const overlayHoverDefault = resolve('overlay.hover.default');
|
|
341
|
+
const overlayHoverSubtle = resolve('overlay.hover.subtle');
|
|
342
|
+
const overlayHoverStrong = resolve('overlay.hover.strong');
|
|
343
|
+
|
|
339
344
|
// Modal overlay
|
|
340
345
|
const modalOverlay = resolve('overlay.surface.modal-overlay');
|
|
341
346
|
|
|
@@ -383,6 +388,9 @@ const buildShadcnVarsFromModeSet = (modeSetName) => {
|
|
|
383
388
|
'ring-offset': background,
|
|
384
389
|
link,
|
|
385
390
|
'hover-default': hoverDefault,
|
|
391
|
+
'overlay-hover-default': overlayHoverDefault,
|
|
392
|
+
'overlay-hover-subtle': overlayHoverSubtle,
|
|
393
|
+
'overlay-hover-strong': overlayHoverStrong,
|
|
386
394
|
'modal-overlay': modalOverlay,
|
|
387
395
|
inverse,
|
|
388
396
|
'inverse-foreground': inverseForeground,
|
|
@@ -537,6 +545,9 @@ export const presetUiLibraryThemeFromTokens = (options = {}) => {
|
|
|
537
545
|
modal: 'oklch(var(--modal))',
|
|
538
546
|
link: 'oklch(var(--link))',
|
|
539
547
|
'hover-default': 'oklch(var(--hover-default))',
|
|
548
|
+
'overlay-hover-default': 'oklch(var(--overlay-hover-default))',
|
|
549
|
+
'overlay-hover-subtle': 'oklch(var(--overlay-hover-subtle))',
|
|
550
|
+
'overlay-hover-strong': 'oklch(var(--overlay-hover-strong))',
|
|
540
551
|
'modal-overlay': 'oklch(var(--modal-overlay))',
|
|
541
552
|
inverse: 'oklch(var(--inverse))',
|
|
542
553
|
'inverse-foreground': 'oklch(var(--inverse-foreground))',
|
|
@@ -586,6 +597,93 @@ export const presetUiLibraryThemeFromTokens = (options = {}) => {
|
|
|
586
597
|
};
|
|
587
598
|
};
|
|
588
599
|
|
|
600
|
+
/** Overlay tier names for the `v-hover` directive (token-backed hover layer). */
|
|
601
|
+
export const vHoverOverlayVariants = Object.freeze({
|
|
602
|
+
subtle: 'subtle',
|
|
603
|
+
default: 'default',
|
|
604
|
+
strong: 'strong',
|
|
605
|
+
});
|
|
606
|
+
|
|
607
|
+
const vHoverOverlayCSS = `
|
|
608
|
+
.v-hover-root {
|
|
609
|
+
position: relative;
|
|
610
|
+
overflow: hidden;
|
|
611
|
+
}
|
|
612
|
+
.v-hover-overlay {
|
|
613
|
+
position: absolute;
|
|
614
|
+
inset: 0;
|
|
615
|
+
z-index: 0;
|
|
616
|
+
border-radius: inherit;
|
|
617
|
+
pointer-events: none;
|
|
618
|
+
opacity: 0;
|
|
619
|
+
mix-blend-mode: overlay;
|
|
620
|
+
transition: opacity 0.2s ease;
|
|
621
|
+
}
|
|
622
|
+
.v-hover-root > :not(.v-hover-overlay) {
|
|
623
|
+
position: relative;
|
|
624
|
+
z-index: 1;
|
|
625
|
+
}
|
|
626
|
+
.v-hover-overlay[data-v-hover-variant="subtle"] {
|
|
627
|
+
background: linear-gradient(
|
|
628
|
+
0deg,
|
|
629
|
+
oklch(var(--overlay-hover-subtle, 0% 0 0 / 20%)) 0%,
|
|
630
|
+
oklch(var(--overlay-hover-subtle, 0% 0 0 / 20%)) 100%
|
|
631
|
+
);
|
|
632
|
+
}
|
|
633
|
+
.v-hover-overlay[data-v-hover-variant="default"] {
|
|
634
|
+
background: linear-gradient(
|
|
635
|
+
0deg,
|
|
636
|
+
oklch(var(--overlay-hover-default, 0% 0 0 / 50%)) 0%,
|
|
637
|
+
oklch(var(--overlay-hover-default, 0% 0 0 / 50%)) 100%
|
|
638
|
+
);
|
|
639
|
+
}
|
|
640
|
+
.v-hover-overlay[data-v-hover-variant="strong"] {
|
|
641
|
+
background: linear-gradient(
|
|
642
|
+
0deg,
|
|
643
|
+
oklch(var(--overlay-hover-strong, 0% 0 0 / 70%)) 0%,
|
|
644
|
+
oklch(var(--overlay-hover-strong, 0% 0 0 / 70%)) 100%
|
|
645
|
+
);
|
|
646
|
+
}
|
|
647
|
+
@media (hover: hover) {
|
|
648
|
+
.v-hover-root:hover .v-hover-overlay {
|
|
649
|
+
opacity: 1;
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
.v-hover-root:focus-visible .v-hover-overlay {
|
|
653
|
+
opacity: 1;
|
|
654
|
+
}
|
|
655
|
+
@media (prefers-reduced-motion: reduce) {
|
|
656
|
+
.v-hover-overlay {
|
|
657
|
+
transition: none;
|
|
658
|
+
}
|
|
659
|
+
}
|
|
660
|
+
/* Link variant: mix subtle overlay into text color (not background overlay). */
|
|
661
|
+
.overlay-link-hover-subtle {
|
|
662
|
+
transition: color 0.2s ease;
|
|
663
|
+
}
|
|
664
|
+
@media (hover: hover) {
|
|
665
|
+
.overlay-link-hover-subtle:hover {
|
|
666
|
+
color: color-mix(
|
|
667
|
+
in oklch,
|
|
668
|
+
oklch(var(--content-on-surface-link, var(--link))) 88%,
|
|
669
|
+
oklch(var(--overlay-hover-subtle, 0% 0 0 / 20%)) 12%
|
|
670
|
+
);
|
|
671
|
+
}
|
|
672
|
+
}
|
|
673
|
+
.overlay-link-hover-subtle:focus-visible {
|
|
674
|
+
color: color-mix(
|
|
675
|
+
in oklch,
|
|
676
|
+
oklch(var(--content-on-surface-link, var(--link))) 88%,
|
|
677
|
+
oklch(var(--overlay-hover-subtle, 0% 0 0 / 20%)) 12%
|
|
678
|
+
);
|
|
679
|
+
}
|
|
680
|
+
@media (prefers-reduced-motion: reduce) {
|
|
681
|
+
.overlay-link-hover-subtle {
|
|
682
|
+
transition: none;
|
|
683
|
+
}
|
|
684
|
+
}
|
|
685
|
+
`.trim();
|
|
686
|
+
|
|
589
687
|
/**
|
|
590
688
|
* UnoCSS preset with utility rules required by the UI library's components.
|
|
591
689
|
* Adds Tailwind v4 CSS variable syntax (w-(--var), h-(--var), etc.)
|
|
@@ -594,6 +692,7 @@ export const presetUiLibraryThemeFromTokens = (options = {}) => {
|
|
|
594
692
|
export const presetUiLibraryUtils = () =>
|
|
595
693
|
definePreset(() => ({
|
|
596
694
|
name: '@aleph-alpha/ui-library-utils',
|
|
695
|
+
preflights: [{ getCSS: () => vHoverOverlayCSS }],
|
|
597
696
|
rules: [
|
|
598
697
|
[/^w-\(--(.+)\)$/, ([, name]) => ({ width: `var(--${name})` })],
|
|
599
698
|
[/^max-w-\(--(.+)\)$/, ([, name]) => ({ 'max-width': `var(--${name})` })],
|
|
@@ -643,6 +742,7 @@ export const defineUiLibraryConfig = (options = {}) => {
|
|
|
643
742
|
|
|
644
743
|
return defineConfig({
|
|
645
744
|
...getUiLibraryContentConfig(),
|
|
745
|
+
safelist: ['overlay-link-hover-subtle'],
|
|
646
746
|
presets: [
|
|
647
747
|
presetWind(),
|
|
648
748
|
presetAnimations(),
|
package/dist/system/index.d.ts
CHANGED
|
@@ -24,6 +24,7 @@ import { getLocalTimeZone } from '@internationalized/date';
|
|
|
24
24
|
import { HTMLAttributes } from 'vue';
|
|
25
25
|
import { ImgHTMLAttributes } from 'vue';
|
|
26
26
|
import { Matcher } from 'reka-ui/date';
|
|
27
|
+
import { ObjectDirective } from 'vue';
|
|
27
28
|
import { PointerDownOutsideEvent } from 'reka-ui';
|
|
28
29
|
import { PublicProps } from 'vue';
|
|
29
30
|
import { Ref } from 'vue';
|
|
@@ -4462,6 +4463,11 @@ export declare type UiDataTableProps<TData, TValue> = {
|
|
|
4462
4463
|
* @example "400px"
|
|
4463
4464
|
*/
|
|
4464
4465
|
tableMinHeight?: string;
|
|
4466
|
+
/**
|
|
4467
|
+
* Callback when a data row is clicked. Receives the row's original data item.
|
|
4468
|
+
* @example (item) => router.push(`/details/${item.id}`)
|
|
4469
|
+
*/
|
|
4470
|
+
onRowClick?: (item: TData) => void;
|
|
4465
4471
|
};
|
|
4466
4472
|
|
|
4467
4473
|
export declare const UiDataTableToolbar: <TData>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal_5<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_expose?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
|
|
@@ -4506,6 +4512,7 @@ export declare const UiDatePicker: DefineComponent<__VLS_PublicProps_20, {}, {},
|
|
|
4506
4512
|
"onUpdate:open"?: ((value: boolean) => any) | undefined;
|
|
4507
4513
|
}>, {
|
|
4508
4514
|
disabled: boolean;
|
|
4515
|
+
mode: UiDatePickerMode;
|
|
4509
4516
|
pagedNavigation: boolean;
|
|
4510
4517
|
preventDeselect: boolean;
|
|
4511
4518
|
weekStartsOn: UiDatePickerWeekStartsOn;
|
|
@@ -4514,7 +4521,6 @@ fixedWeeks: boolean;
|
|
|
4514
4521
|
locale: string;
|
|
4515
4522
|
numberOfMonths: number;
|
|
4516
4523
|
readonly: boolean;
|
|
4517
|
-
mode: UiDatePickerMode;
|
|
4518
4524
|
dateFormat: Intl.DateTimeFormatOptions;
|
|
4519
4525
|
closeOnSelect: boolean;
|
|
4520
4526
|
rangeSeparator: string;
|
|
@@ -7582,4 +7588,12 @@ export declare const useSidebar: <T extends {
|
|
|
7582
7588
|
toggleSidebar: () => void;
|
|
7583
7589
|
};
|
|
7584
7590
|
|
|
7591
|
+
export declare const vHover: ObjectDirective<HTMLElement, VHoverBinding>;
|
|
7592
|
+
|
|
7593
|
+
declare type VHoverBinding = VHoverVariant | false | null | undefined | {
|
|
7594
|
+
variant: VHoverVariant;
|
|
7595
|
+
};
|
|
7596
|
+
|
|
7597
|
+
export declare type VHoverVariant = 'subtle' | 'default' | 'strong';
|
|
7598
|
+
|
|
7585
7599
|
export { }
|