@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 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(),
@@ -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 { }