@vizejs/ui 0.454.0 → 0.457.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/dist/accordion.d.mts +1 -1
- package/dist/action-sheet.d.mts +1 -1
- package/dist/alert-dialog.d.mts +1 -1
- package/dist/{announcer-DcI680jo.d.mts → announcer-DunfmMGR.d.mts} +20 -20
- package/dist/announcer.d.mts +1 -1
- package/dist/app-bar-kKBZ3G2y.mjs +172 -0
- package/dist/app-bar-yxtiYseG.d.mts +103 -0
- package/dist/app-bar.d.mts +2 -0
- package/dist/app-bar.mjs +2 -0
- package/dist/autocomplete.d.mts +1 -1
- package/dist/avatar.d.mts +1 -1
- package/dist/badge.d.mts +1 -1
- package/dist/banner.d.mts +1 -1
- package/dist/block-ui.d.mts +1 -1
- package/dist/blockquote.d.mts +1 -1
- package/dist/calendar.d.mts +1 -1
- package/dist/callout.d.mts +1 -1
- package/dist/card.d.mts +1 -1
- package/dist/catalog.d.mts +22 -0
- package/dist/catalog.mjs +171 -130
- package/dist/chart.d.mts +1 -1
- package/dist/checkbox.d.mts +1 -1
- package/dist/code.d.mts +1 -1
- package/dist/collapsible.d.mts +1 -1
- package/dist/color-picker.d.mts +1 -1
- package/dist/combobox.d.mts +1 -1
- package/dist/command-palette.d.mts +1 -1
- package/dist/confirm.d.mts +1 -1
- package/dist/context-menu.d.mts +1 -1
- package/dist/copy-button.d.mts +1 -1
- package/dist/date-range-picker.d.mts +1 -1
- package/dist/dialog.d.mts +1 -1
- package/dist/direction.d.mts +1 -1
- package/dist/drawer.d.mts +1 -1
- package/dist/dropdown-menu.d.mts +1 -1
- package/dist/duration-field.d.mts +1 -1
- package/dist/empty-state.d.mts +1 -1
- package/dist/fieldset.d.mts +1 -1
- package/dist/file-upload.d.mts +1 -1
- package/dist/floating-action-button.d.mts +1 -1
- package/dist/focus-visible.d.mts +1 -1
- package/dist/{form-wizard-mErOrBg3.d.mts → form-wizard-D_B-Cydo.d.mts} +2 -2
- package/dist/form-wizard.d.mts +1 -1
- package/dist/fullscreen-button.d.mts +1 -1
- package/dist/heading.d.mts +1 -1
- package/dist/hover-card.d.mts +1 -1
- package/dist/icon-button.d.mts +1 -1
- package/dist/icon.d.mts +1 -1
- package/dist/index.d.mts +99 -98
- package/dist/index.mjs +2 -1
- package/dist/kbd.d.mts +1 -1
- package/dist/landmark.d.mts +1 -1
- package/dist/list.d.mts +1 -1
- package/dist/listbox.d.mts +1 -1
- package/dist/locale.d.mts +1 -1
- package/dist/media-preferences.d.mts +1 -1
- package/dist/menu.d.mts +1 -1
- package/dist/menubar.d.mts +1 -1
- package/dist/month-picker.d.mts +1 -1
- package/dist/native-select.d.mts +1 -1
- package/dist/navigation-rail.d.mts +1 -1
- package/dist/notification-center.d.mts +1 -1
- package/dist/pager.d.mts +1 -1
- package/dist/pagination.d.mts +1 -1
- package/dist/popconfirm.d.mts +1 -1
- package/dist/popover.d.mts +1 -1
- package/dist/print-button.d.mts +1 -1
- package/dist/progress-bar.d.mts +1 -1
- package/dist/radio-group.d.mts +1 -1
- package/dist/{range-calendar-DInfduyf.d.mts → range-calendar-DL_eKx8L.d.mts} +2 -2
- package/dist/range-calendar.d.mts +1 -1
- package/dist/resolver.d.mts +2 -0
- package/dist/resolver.mjs +2 -0
- package/dist/scroll-area.d.mts +1 -1
- package/dist/select.d.mts +1 -1
- package/dist/share-button.d.mts +1 -1
- package/dist/sidebar.d.mts +1 -1
- package/dist/split-button.d.mts +1 -1
- package/dist/splitter.d.mts +1 -1
- package/dist/status-light.d.mts +1 -1
- package/dist/stepper.d.mts +1 -1
- package/dist/surface.d.mts +1 -1
- package/dist/switch.d.mts +1 -1
- package/dist/tabs.d.mts +1 -1
- package/dist/tags-input.d.mts +1 -1
- package/dist/text.d.mts +1 -1
- package/dist/toggle.d.mts +1 -1
- package/dist/tooltip.d.mts +1 -1
- package/dist/tour.d.mts +1 -1
- package/dist/tree.d.mts +1 -1
- package/dist/week-picker.d.mts +1 -1
- package/package.json +7 -2
- package/registry/files/families/navigation/app-bar/app-bar-types.ts +32 -0
- package/registry/files/families/navigation/app-bar/app-bar.ts +3 -0
- package/registry/files/families/navigation/app-bar/app-bar.vue +215 -0
- package/registry/files/families/navigation/app-bar/examples/app-bar-basic.vue +21 -0
- package/registry/registry.json +53 -1
package/dist/tour.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { $c as _default$5, Al as TourStepValue, Cl as TourSlotState, Dl as TourState, El as TourSpotlightSlotState, Jc as _default$10, Kc as padTourRect, Ml as TourTargetState, Ol as TourStepDefinition, Qc as _default$6, Sl as TourRootExpose, Tl as TourSpotlightRect, Xc as _default$8, Yc as _default$9, Zc as _default$7, _l as TourHookResult, al as TourAfterLeave, bl as TourNavigationDirection, cl as TourBeforeEnter, dl as TourContentExpose, el as _default$4, fl as TourContentPlacement, gl as TourDismissReason, hl as TourDirection, il as _default, jl as TourTarget, kl as TourStepSlotState, ll as TourBeforeEnterContext, ml as TourControlSlotState, nl as _default$2, ol as TourAfterLeaveContext, pl as TourContentSlotState, qc as resolveTourTarget, rl as _default$1, sl as TourArrowSlotState, tl as _default$3, ul as TourCloseReason, vl as TourMessages, wl as TourSpotlightExpose, xl as TourProgressSlotState, yl as TourMissingTargetBehavior } from "./announcer-
|
|
1
|
+
import { $c as _default$5, Al as TourStepValue, Cl as TourSlotState, Dl as TourState, El as TourSpotlightSlotState, Jc as _default$10, Kc as padTourRect, Ml as TourTargetState, Ol as TourStepDefinition, Qc as _default$6, Sl as TourRootExpose, Tl as TourSpotlightRect, Xc as _default$8, Yc as _default$9, Zc as _default$7, _l as TourHookResult, al as TourAfterLeave, bl as TourNavigationDirection, cl as TourBeforeEnter, dl as TourContentExpose, el as _default$4, fl as TourContentPlacement, gl as TourDismissReason, hl as TourDirection, il as _default, jl as TourTarget, kl as TourStepSlotState, ll as TourBeforeEnterContext, ml as TourControlSlotState, nl as _default$2, ol as TourAfterLeaveContext, pl as TourContentSlotState, qc as resolveTourTarget, rl as _default$1, sl as TourArrowSlotState, tl as _default$3, ul as TourCloseReason, vl as TourMessages, wl as TourSpotlightExpose, xl as TourProgressSlotState, yl as TourMissingTargetBehavior } from "./announcer-DunfmMGR.mjs";
|
|
2
2
|
export { _default as Tour, _default as TourRoot, type TourAfterLeave, type TourAfterLeaveContext, _default$1 as TourArrow, type TourArrowSlotState, type TourBeforeEnter, type TourBeforeEnterContext, _default$2 as TourClose, type TourCloseReason, _default$3 as TourContent, type TourContentExpose, type TourContentPlacement, type TourContentSlotState, type TourControlSlotState, _default$4 as TourDescription, type TourDirection, type TourDismissReason, type TourHookResult, type TourMessages, type TourMissingTargetBehavior, type TourNavigationDirection, _default$5 as TourNext, _default$6 as TourPrev, _default$7 as TourProgress, type TourProgressSlotState, type TourRootExpose, type TourSlotState, _default$8 as TourSpotlight, type TourSpotlightExpose, type TourSpotlightRect, type TourSpotlightSlotState, type TourState, _default$9 as TourStep, type TourStepDefinition, type TourStepSlotState, type TourStepValue, type TourTarget, type TourTargetState, _default$10 as TourTitle, padTourRect, resolveTourTarget };
|
package/dist/tree.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { At as TreeItemState, Bt as TreeSlotState, Ct as TreeCheckPropagation, Dt as TreeFlatNode, Et as TreeDropPosition, Ft as TreeReorderController, Ht as TreeVirtualizer, It as TreeReorderItemRegistration, Lt as TreeReorderOptions, Mt as TreeLoadContext, Nt as TreeLoadState, Ot as TreeItemExpose, Pt as TreeMoveEvent, Rt as TreeRootExpose, St as _default, Tt as TreeDirection, Ut as TreeVirtualizerOptions, Vt as TreeState, Wt as TreeVirtualizerSource, _t as useTreeVirtualizer, bt as _default$2, dt as TreeIndexEntry, ft as deriveTreeCheckedStates, gt as toggleTreeChecked, ht as normalizeTreeChecked, jt as TreeKey, kt as TreeItemSlotState, lt as TreeIndex, mt as indexTree, pt as flattenVisibleTree, ut as TreeIndexAccessors, vt as useTreeReorder, wt as TreeCheckedState, xt as _default$1, yt as _default$3, zt as TreeSelectionMode } from "./announcer-
|
|
1
|
+
import { At as TreeItemState, Bt as TreeSlotState, Ct as TreeCheckPropagation, Dt as TreeFlatNode, Et as TreeDropPosition, Ft as TreeReorderController, Ht as TreeVirtualizer, It as TreeReorderItemRegistration, Lt as TreeReorderOptions, Mt as TreeLoadContext, Nt as TreeLoadState, Ot as TreeItemExpose, Pt as TreeMoveEvent, Rt as TreeRootExpose, St as _default, Tt as TreeDirection, Ut as TreeVirtualizerOptions, Vt as TreeState, Wt as TreeVirtualizerSource, _t as useTreeVirtualizer, bt as _default$2, dt as TreeIndexEntry, ft as deriveTreeCheckedStates, gt as toggleTreeChecked, ht as normalizeTreeChecked, jt as TreeKey, kt as TreeItemSlotState, lt as TreeIndex, mt as indexTree, pt as flattenVisibleTree, ut as TreeIndexAccessors, vt as useTreeReorder, wt as TreeCheckedState, xt as _default$1, yt as _default$3, zt as TreeSelectionMode } from "./announcer-DunfmMGR.mjs";
|
|
2
2
|
export { _default as Tree, _default as TreeRoot, type TreeCheckPropagation, type TreeCheckedState, type TreeDirection, type TreeDropPosition, type TreeFlatNode, type TreeIndex, type TreeIndexAccessors, type TreeIndexEntry, _default$1 as TreeItem, _default$2 as TreeItemCheckbox, type TreeItemExpose, type TreeItemSlotState, type TreeItemState, _default$3 as TreeItemToggle, type TreeKey, type TreeLoadContext, type TreeLoadState, type TreeMoveEvent, type TreeReorderController, type TreeReorderItemRegistration, type TreeReorderOptions, type TreeRootExpose, type TreeSelectionMode, type TreeSlotState, type TreeState, type TreeVirtualizer, type TreeVirtualizerOptions, type TreeVirtualizerSource, deriveTreeCheckedStates, flattenVisibleTree, indexTree, normalizeTreeChecked, toggleTreeChecked, useTreeReorder, useTreeVirtualizer };
|
package/dist/week-picker.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { S as formatIsoDate, i as IsoWeek, r as DateRange, s as PlainDate, z as parseIsoDate } from "./plain-date-By3bTWQG.mjs";
|
|
2
|
-
import { Bb as weekOf, Rb as WeekPickerRootExpose, Vb as _default, zb as WeekSelection } from "./announcer-
|
|
2
|
+
import { Bb as weekOf, Rb as WeekPickerRootExpose, Vb as _default, zb as WeekSelection } from "./announcer-DunfmMGR.mjs";
|
|
3
3
|
import { a as _default$2, i as _default$3, n as _default$5, o as _default$1, r as _default$4, t as _default$6 } from "./calendar-year-select.vue-BohqVCaU.mjs";
|
|
4
4
|
export { type DateRange, type IsoWeek, type PlainDate, _default as WeekPicker, _default as WeekPickerRoot, _default$1 as WeekPickerGrid, _default$2 as WeekPickerHeading, _default$3 as WeekPickerMonthSelect, _default$4 as WeekPickerNext, _default$5 as WeekPickerPrev, type WeekPickerRootExpose, _default$6 as WeekPickerYearSelect, type WeekSelection, formatIsoDate, parseIsoDate, weekOf };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vizejs/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.457.0",
|
|
4
4
|
"description": "Accessible, headless, Native CSS-first UI primitives",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"accessibility",
|
|
@@ -105,6 +105,11 @@
|
|
|
105
105
|
"import": "./dist/block-ui.mjs",
|
|
106
106
|
"default": "./dist/block-ui.mjs"
|
|
107
107
|
},
|
|
108
|
+
"./app-bar": {
|
|
109
|
+
"types": "./dist/app-bar.d.mts",
|
|
110
|
+
"import": "./dist/app-bar.mjs",
|
|
111
|
+
"default": "./dist/app-bar.mjs"
|
|
112
|
+
},
|
|
108
113
|
"./bottom-navigation": {
|
|
109
114
|
"types": "./dist/bottom-navigation.d.mts",
|
|
110
115
|
"import": "./dist/bottom-navigation.mjs",
|
|
@@ -1165,7 +1170,7 @@
|
|
|
1165
1170
|
"@tsdown/css": "0.22.14",
|
|
1166
1171
|
"@types/node": "25.9.2",
|
|
1167
1172
|
"@vitejs/plugin-vue": "6.0.7",
|
|
1168
|
-
"@vizejs/native": "0.
|
|
1173
|
+
"@vizejs/native": "0.457.0",
|
|
1169
1174
|
"@vue/compiler-sfc": "3.5.35",
|
|
1170
1175
|
"@vue/test-utils": "2.4.10",
|
|
1171
1176
|
"happy-dom": "20.11.2",
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/** Scroll container an AppBar follows: an element, a selector, or `null` for the window. */
|
|
2
|
+
export type AppBarTarget = HTMLElement | string | null;
|
|
3
|
+
|
|
4
|
+
/** Stable visibility state exposed for consumer-owned styling and tests. */
|
|
5
|
+
export type AppBarState = "visible" | "hidden";
|
|
6
|
+
|
|
7
|
+
/** State exposed to every AppBar slot. */
|
|
8
|
+
export interface AppBarSlotState {
|
|
9
|
+
/** Whether the followed container has scrolled past `elevateThreshold`. */
|
|
10
|
+
readonly elevated: boolean;
|
|
11
|
+
|
|
12
|
+
/** Whether `hideOnScroll` currently asks the consumer to move the bar out of view. */
|
|
13
|
+
readonly hidden: boolean;
|
|
14
|
+
|
|
15
|
+
/** Stable visibility token for styling and tests. */
|
|
16
|
+
readonly state: AppBarState;
|
|
17
|
+
|
|
18
|
+
/** Current scroll offset of the followed container in CSS pixels. */
|
|
19
|
+
readonly scrollTop: number;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** Public instance exposed by AppBar. */
|
|
23
|
+
export interface AppBarExpose extends AppBarSlotState {
|
|
24
|
+
/** Rendered root element. */
|
|
25
|
+
readonly element: HTMLElement | null;
|
|
26
|
+
|
|
27
|
+
/** Bring a hidden bar back into view. */
|
|
28
|
+
readonly show: () => void;
|
|
29
|
+
|
|
30
|
+
/** Re-read the scroll offset, for containers that scroll without a scroll event. */
|
|
31
|
+
readonly refresh: () => number;
|
|
32
|
+
}
|
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed, onMounted, onScopeDispose, shallowRef, useTemplateRef, watch } from "vue";
|
|
3
|
+
import type { ComputedRef, ShallowRef } from "vue";
|
|
4
|
+
|
|
5
|
+
import type { AppBarExpose, AppBarSlotState, AppBarState, AppBarTarget } from "./app-bar-types.ts";
|
|
6
|
+
|
|
7
|
+
const {
|
|
8
|
+
as = "header",
|
|
9
|
+
target = null,
|
|
10
|
+
elevateThreshold = 0,
|
|
11
|
+
hideOnScroll = false,
|
|
12
|
+
hideThreshold = 64,
|
|
13
|
+
ariaLabel = undefined,
|
|
14
|
+
ariaLabelledby = undefined,
|
|
15
|
+
} = defineProps<{
|
|
16
|
+
/**
|
|
17
|
+
* Host element. A top-level `header` is the page's banner landmark; use `div`
|
|
18
|
+
* when the bar sits inside another landmark that already has a header.
|
|
19
|
+
*
|
|
20
|
+
* @default "header"
|
|
21
|
+
*/
|
|
22
|
+
readonly as?: "header" | "div";
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Scroll container to follow: an element, a selector, or `null` for the window.
|
|
26
|
+
*
|
|
27
|
+
* @default null
|
|
28
|
+
*/
|
|
29
|
+
readonly target?: AppBarTarget;
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Scroll offset in CSS pixels past which the bar reports `elevated`.
|
|
33
|
+
*
|
|
34
|
+
* @default 0
|
|
35
|
+
*/
|
|
36
|
+
readonly elevateThreshold?: number;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Report `hidden` while the container scrolls down, and visible again as soon as it scrolls up.
|
|
40
|
+
*
|
|
41
|
+
* @default false
|
|
42
|
+
*/
|
|
43
|
+
readonly hideOnScroll?: boolean;
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Scroll offset in CSS pixels before `hideOnScroll` may hide the bar.
|
|
47
|
+
*
|
|
48
|
+
* @default 64
|
|
49
|
+
*/
|
|
50
|
+
readonly hideThreshold?: number;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Accessible name of the landmark when no visible title labels it.
|
|
54
|
+
*
|
|
55
|
+
* @default undefined
|
|
56
|
+
*/
|
|
57
|
+
readonly ariaLabel?: string;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Ids that label the landmark (overrides `ariaLabel`).
|
|
61
|
+
*
|
|
62
|
+
* @default undefined
|
|
63
|
+
*/
|
|
64
|
+
readonly ariaLabelledby?: string;
|
|
65
|
+
}>();
|
|
66
|
+
|
|
67
|
+
const emit = defineEmits<{
|
|
68
|
+
/** Fired when `hideOnScroll` hides or reveals the bar. */
|
|
69
|
+
"visibility-change": [hidden: boolean];
|
|
70
|
+
}>();
|
|
71
|
+
|
|
72
|
+
defineSlots<{
|
|
73
|
+
/** Leading content such as a navigation or back button. */
|
|
74
|
+
start?(props: AppBarSlotState): unknown;
|
|
75
|
+
/** Title and main content. */
|
|
76
|
+
default?(props: AppBarSlotState): unknown;
|
|
77
|
+
/** Trailing actions. */
|
|
78
|
+
end?(props: AppBarSlotState): unknown;
|
|
79
|
+
}>();
|
|
80
|
+
|
|
81
|
+
const element = useTemplateRef<HTMLElement>("element");
|
|
82
|
+
const scrollTop = shallowRef(0);
|
|
83
|
+
const hidden = shallowRef(false);
|
|
84
|
+
const focusWithin = shallowRef(false);
|
|
85
|
+
const finite = (value: number, fallback: number) =>
|
|
86
|
+
Number.isFinite(value) ? Math.max(0, value) : fallback;
|
|
87
|
+
const elevated = computed(() => scrollTop.value > finite(elevateThreshold, 0));
|
|
88
|
+
const state = computed<AppBarState>(() => (hidden.value ? "hidden" : "visible"));
|
|
89
|
+
const slotState = computed<AppBarSlotState>(() => ({
|
|
90
|
+
elevated: elevated.value,
|
|
91
|
+
hidden: hidden.value,
|
|
92
|
+
scrollTop: scrollTop.value,
|
|
93
|
+
state: state.value,
|
|
94
|
+
}));
|
|
95
|
+
let container: HTMLElement | Window | null = null;
|
|
96
|
+
|
|
97
|
+
function setHidden(next: boolean): void {
|
|
98
|
+
if (hidden.value === next) return;
|
|
99
|
+
hidden.value = next;
|
|
100
|
+
emit("visibility-change", next);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function resolveContainer(): HTMLElement | Window | null {
|
|
104
|
+
const ownerDocument = element.value?.ownerDocument;
|
|
105
|
+
if (!ownerDocument) return null;
|
|
106
|
+
if (target === null) return ownerDocument.defaultView;
|
|
107
|
+
if (typeof target !== "string") return target;
|
|
108
|
+
const found = ownerDocument.querySelector(target);
|
|
109
|
+
return found instanceof HTMLElement ? found : null;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
function readOffset(source: HTMLElement | Window): number {
|
|
113
|
+
const offset = "scrollY" in source ? source.scrollY : source.scrollTop;
|
|
114
|
+
return Number.isFinite(offset) ? Math.max(0, offset) : 0;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
function refresh(): number {
|
|
118
|
+
const previous = scrollTop.value;
|
|
119
|
+
const next = container === null ? 0 : readOffset(container);
|
|
120
|
+
scrollTop.value = next;
|
|
121
|
+
if (!hideOnScroll || focusWithin.value) setHidden(false);
|
|
122
|
+
else if (next < previous || next <= finite(hideThreshold, 64)) setHidden(false);
|
|
123
|
+
else if (next > previous) setHidden(true);
|
|
124
|
+
return next;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
function onScroll(): void {
|
|
128
|
+
refresh();
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
function detach(): void {
|
|
132
|
+
container?.removeEventListener("scroll", onScroll);
|
|
133
|
+
container = null;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
function attach(): void {
|
|
137
|
+
detach();
|
|
138
|
+
container = resolveContainer();
|
|
139
|
+
container?.addEventListener("scroll", onScroll, { passive: true });
|
|
140
|
+
scrollTop.value = container === null ? 0 : readOffset(container);
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
function onFocusin(): void {
|
|
144
|
+
focusWithin.value = true;
|
|
145
|
+
setHidden(false);
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
function onFocusout(event: FocusEvent): void {
|
|
149
|
+
const next = event.relatedTarget;
|
|
150
|
+
focusWithin.value = next instanceof Node && element.value?.contains(next) === true;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
function show(): void {
|
|
154
|
+
setHidden(false);
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
onMounted(attach);
|
|
158
|
+
watch(
|
|
159
|
+
() => target,
|
|
160
|
+
() => attach(),
|
|
161
|
+
);
|
|
162
|
+
watch(
|
|
163
|
+
() => hideOnScroll,
|
|
164
|
+
(enabled) => {
|
|
165
|
+
if (!enabled) setHidden(false);
|
|
166
|
+
},
|
|
167
|
+
);
|
|
168
|
+
onScopeDispose(detach);
|
|
169
|
+
|
|
170
|
+
defineExpose({
|
|
171
|
+
element,
|
|
172
|
+
elevated,
|
|
173
|
+
hidden,
|
|
174
|
+
refresh,
|
|
175
|
+
scrollTop,
|
|
176
|
+
show,
|
|
177
|
+
state,
|
|
178
|
+
} satisfies Omit<AppBarExpose, "element" | "elevated" | "hidden" | "scrollTop" | "state"> & {
|
|
179
|
+
readonly element: typeof element;
|
|
180
|
+
readonly elevated: ComputedRef<boolean>;
|
|
181
|
+
readonly hidden: Readonly<ShallowRef<boolean>>;
|
|
182
|
+
readonly scrollTop: Readonly<ShallowRef<number>>;
|
|
183
|
+
readonly state: ComputedRef<AppBarState>;
|
|
184
|
+
});
|
|
185
|
+
</script>
|
|
186
|
+
|
|
187
|
+
<template>
|
|
188
|
+
<component
|
|
189
|
+
:is="as"
|
|
190
|
+
ref="element"
|
|
191
|
+
:aria-label="ariaLabelledby === undefined ? ariaLabel : undefined"
|
|
192
|
+
:aria-labelledby
|
|
193
|
+
part="root"
|
|
194
|
+
data-vize-ui="app-bar"
|
|
195
|
+
:data-state="state"
|
|
196
|
+
:data-elevated="elevated ? 'true' : undefined"
|
|
197
|
+
:data-hidden="hidden ? 'true' : undefined"
|
|
198
|
+
@focusin="onFocusin"
|
|
199
|
+
@focusout="onFocusout"
|
|
200
|
+
>
|
|
201
|
+
<div v-if="$slots.start" part="start" data-vize-ui="app-bar-start">
|
|
202
|
+
<slot name="start" v-bind="slotState" />
|
|
203
|
+
</div>
|
|
204
|
+
<div part="content" data-vize-ui="app-bar-content">
|
|
205
|
+
<slot v-bind="slotState" />
|
|
206
|
+
</div>
|
|
207
|
+
<div v-if="$slots.end" part="end" data-vize-ui="app-bar-end">
|
|
208
|
+
<slot name="end" v-bind="slotState" />
|
|
209
|
+
</div>
|
|
210
|
+
</component>
|
|
211
|
+
</template>
|
|
212
|
+
|
|
213
|
+
<style scoped>
|
|
214
|
+
/* Headless by design. Position, elevation, and the hide transition are consumer-owned. */
|
|
215
|
+
</style>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
<!-- Top app bar with a menu button, a title, and a search action that hides while scrolling down. -->
|
|
2
|
+
<script setup lang="ts">
|
|
3
|
+
import { useId } from "vue";
|
|
4
|
+
import { AppBar } from "../app-bar.ts";
|
|
5
|
+
|
|
6
|
+
const titleId = useId();
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
<template>
|
|
10
|
+
<AppBar hide-on-scroll :aria-labelledby="titleId">
|
|
11
|
+
<template #start>
|
|
12
|
+
<button type="button" aria-label="Open navigation">≡</button>
|
|
13
|
+
</template>
|
|
14
|
+
<template #default="{ elevated }">
|
|
15
|
+
<span :id="titleId" :data-elevated="elevated ? 'true' : undefined">Inbox</span>
|
|
16
|
+
</template>
|
|
17
|
+
<template #end>
|
|
18
|
+
<button type="button">Search</button>
|
|
19
|
+
</template>
|
|
20
|
+
</AppBar>
|
|
21
|
+
</template>
|
package/registry/registry.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"registryKind": "vize-lib",
|
|
4
4
|
"package": {
|
|
5
5
|
"name": "@vizejs/ui",
|
|
6
|
-
"version": "0.
|
|
6
|
+
"version": "0.457.0"
|
|
7
7
|
},
|
|
8
8
|
"kind": "ui",
|
|
9
9
|
"filesDirectory": "files",
|
|
@@ -481,6 +481,58 @@
|
|
|
481
481
|
}
|
|
482
482
|
]
|
|
483
483
|
},
|
|
484
|
+
{
|
|
485
|
+
"name": "app-bar",
|
|
486
|
+
"kind": "ui",
|
|
487
|
+
"title": "App Bar",
|
|
488
|
+
"description": "Headless App Bar component (stable); covers HTML header landmark, Material top app bar, Vuetify v-app-bar.",
|
|
489
|
+
"aliases": [
|
|
490
|
+
"app header",
|
|
491
|
+
"header bar",
|
|
492
|
+
"navigation bar",
|
|
493
|
+
"top app bar"
|
|
494
|
+
],
|
|
495
|
+
"packageSubpath": "./app-bar",
|
|
496
|
+
"entry": "families/navigation/app-bar/app-bar.ts",
|
|
497
|
+
"files": [
|
|
498
|
+
{
|
|
499
|
+
"path": "families/navigation/app-bar/app-bar-types.ts",
|
|
500
|
+
"role": "types",
|
|
501
|
+
"sha256": "b879f2e17375f59b23f3ef2255575315f597c0a073a09c486228060994986bbe",
|
|
502
|
+
"size": 1142
|
|
503
|
+
},
|
|
504
|
+
{
|
|
505
|
+
"path": "families/navigation/app-bar/app-bar.ts",
|
|
506
|
+
"role": "entry",
|
|
507
|
+
"sha256": "47345ab2cde53e012af11e4953d52e3d2c671bdb1e84cc8f54e692eebfb1afd9",
|
|
508
|
+
"size": 262
|
|
509
|
+
},
|
|
510
|
+
{
|
|
511
|
+
"path": "families/navigation/app-bar/app-bar.vue",
|
|
512
|
+
"role": "component",
|
|
513
|
+
"sha256": "73b43ea845bd5302a3132cd7b6dbc116bdde28ea7230a97000d08e57e695754f",
|
|
514
|
+
"size": 5828
|
|
515
|
+
}
|
|
516
|
+
],
|
|
517
|
+
"registryDependencies": [],
|
|
518
|
+
"dependencies": [
|
|
519
|
+
{
|
|
520
|
+
"name": "vue",
|
|
521
|
+
"range": "^3.5.0 || ^3.6.0-rc.11",
|
|
522
|
+
"kind": "peer"
|
|
523
|
+
}
|
|
524
|
+
],
|
|
525
|
+
"contentHash": "a8958a46484dc33e0e7a1023ca8b25af39d2e5506fa96d42310b2b63f022b705",
|
|
526
|
+
"examples": [
|
|
527
|
+
{
|
|
528
|
+
"path": "families/navigation/app-bar/examples/app-bar-basic.vue",
|
|
529
|
+
"title": "Basic",
|
|
530
|
+
"description": "Top app bar with a menu button, a title, and a search action that hides while scrolling down.",
|
|
531
|
+
"sha256": "b93fe8e116cf8207b2cd934ad689359b9b10369ff9f3fd2225b47eced7bdc2da",
|
|
532
|
+
"size": 651
|
|
533
|
+
}
|
|
534
|
+
]
|
|
535
|
+
},
|
|
484
536
|
{
|
|
485
537
|
"name": "aspect-ratio",
|
|
486
538
|
"kind": "ui",
|