@bagelink/vue 1.15.112 → 1.15.116
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/components/FloatingPanel.vue.d.ts +37 -0
- package/dist/components/FloatingPanel.vue.d.ts.map +1 -0
- package/dist/components/form/inputs/DateInput.vue.d.ts +12 -4
- package/dist/components/form/inputs/DateInput.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/DatePicker.vue.d.ts +12 -1
- package/dist/components/form/inputs/DatePicker.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/SelectInput.vue.d.ts.map +1 -1
- package/dist/components/form/inputs/TextInput.vue.d.ts.map +1 -1
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/layout/AppContent.vue.d.ts.map +1 -1
- package/dist/components/layout/AppLayout.vue.d.ts +19 -29
- package/dist/components/layout/AppLayout.vue.d.ts.map +1 -1
- package/dist/components/layout/AppNav.vue.d.ts +39 -0
- package/dist/components/layout/AppNav.vue.d.ts.map +1 -0
- package/dist/components/layout/appLayoutContext.d.ts +35 -5
- package/dist/components/layout/appLayoutContext.d.ts.map +1 -1
- package/dist/components/layout/index.d.ts +2 -1
- package/dist/components/layout/index.d.ts.map +1 -1
- package/dist/index.cjs +178 -151
- package/dist/index.mjs +35744 -41481
- package/dist/style.css +1 -2
- package/package.json +1 -1
- package/src/components/FloatingPanel.vue +111 -0
- package/src/components/form/inputs/DateInput.vue +105 -18
- package/src/components/form/inputs/DatePicker.vue +124 -8
- package/src/components/form/inputs/SelectInput.vue +1 -1
- package/src/components/form/inputs/TextInput.vue +37 -11
- package/src/components/index.ts +1 -0
- package/src/components/layout/AppContent.vue +11 -28
- package/src/components/layout/AppLayout.vue +215 -81
- package/src/components/layout/AppNav.vue +106 -0
- package/src/components/layout/appLayoutContext.ts +63 -7
- package/src/components/layout/index.ts +2 -1
- package/src/styles/dark.css +2 -4
|
@@ -4,24 +4,70 @@ import { inject, ref } from 'vue'
|
|
|
4
4
|
export const SIDEBAR_COLLAPSED_WIDTH = '66px'
|
|
5
5
|
export const SIDEBAR_COLLAPSED_WIDTH_CARD = '82px'
|
|
6
6
|
|
|
7
|
+
export type RegionSide = 'start' | 'end' | 'top' | 'bottom'
|
|
8
|
+
|
|
9
|
+
export interface RegionState {
|
|
10
|
+
/** Something is mounted in this region (drives whether we reserve/paint it). */
|
|
11
|
+
present: boolean
|
|
12
|
+
/** Expanded (reserves full `size`) vs collapsed/hidden (reserves `collapsedSize`). */
|
|
13
|
+
open: boolean
|
|
14
|
+
/**
|
|
15
|
+
* push → reserves room; center content is inset by `size` (or `collapsedSize`).
|
|
16
|
+
* overlay → floats above center; reserves nothing (floating/full chat, mobile drawer).
|
|
17
|
+
*/
|
|
18
|
+
mode: 'push' | 'overlay'
|
|
19
|
+
/** Inline-size for start/end, block-size for top/bottom. Any CSS length. */
|
|
20
|
+
size: string
|
|
21
|
+
/** Size when `open === false`. `'0'` fully collapses the region away. */
|
|
22
|
+
collapsedSize: string
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export type RegionPatch = Partial<RegionState>
|
|
26
|
+
|
|
7
27
|
export interface AppLayoutContext {
|
|
8
|
-
|
|
28
|
+
// ── existing (kept as aliases over regions.start) ─────────────────────
|
|
29
|
+
/** Sidebar open (expanded) state — alias of `regions.start.open`. */
|
|
9
30
|
isOpen: Ref<boolean>
|
|
10
|
-
/** Viewport is below MOBILE_BREAKPOINT */
|
|
31
|
+
/** Viewport is below MOBILE_BREAKPOINT. */
|
|
11
32
|
isMobile: Ref<boolean>
|
|
33
|
+
/** Toggle the sidebar (start region) open/closed — alias of `toggleStart`. */
|
|
12
34
|
toggleMenu: () => void
|
|
13
|
-
/** Close the sidebar when on mobile (e.g. after navigating) */
|
|
35
|
+
/** Close the sidebar when on mobile (e.g. after navigating). */
|
|
14
36
|
closeOnMobile: () => void
|
|
15
37
|
sidebarWidth: string
|
|
16
38
|
sidebarCollapsedWidth: string
|
|
17
|
-
/** Sidebar rendered as a floating card */
|
|
39
|
+
/** Sidebar rendered as a floating card. */
|
|
18
40
|
sidebarCardStyle: boolean
|
|
41
|
+
|
|
42
|
+
// ── region manager ────────────────────────────────────────────────────
|
|
43
|
+
/** Live state for every edge. Center insets are derived from this. */
|
|
44
|
+
regions: Readonly<Ref<Record<RegionSide, RegionState>>>
|
|
45
|
+
/** Dedicated per-side patchers — a child (e.g. ChatWindow) reports its intent. */
|
|
46
|
+
setStart: (patch: RegionPatch) => void
|
|
47
|
+
setEnd: (patch: RegionPatch) => void
|
|
48
|
+
setTop: (patch: RegionPatch) => void
|
|
49
|
+
setBottom: (patch: RegionPatch) => void
|
|
50
|
+
/** Dedicated per-side open toggles. `toggleStart` === `toggleMenu`. */
|
|
51
|
+
toggleStart: () => void
|
|
52
|
+
toggleEnd: () => void
|
|
53
|
+
toggleTop: () => void
|
|
54
|
+
toggleBottom: () => void
|
|
19
55
|
}
|
|
20
56
|
|
|
21
57
|
export const AppLayoutKey: InjectionKey<AppLayoutContext> = Symbol('AppLayout')
|
|
22
58
|
|
|
59
|
+
function inertRegions(): Ref<Record<RegionSide, RegionState>> {
|
|
60
|
+
const base: RegionState = { present: false, open: false, mode: 'push', size: '0', collapsedSize: '0' }
|
|
61
|
+
return ref({
|
|
62
|
+
start: { ...base },
|
|
63
|
+
end: { ...base },
|
|
64
|
+
top: { ...base },
|
|
65
|
+
bottom: { ...base },
|
|
66
|
+
})
|
|
67
|
+
}
|
|
68
|
+
|
|
23
69
|
/**
|
|
24
|
-
* Access the AppLayout context (sidebar open state, mobile flag
|
|
70
|
+
* Access the AppLayout context (region state, sidebar open state, mobile flag).
|
|
25
71
|
* Works inside AppLayout's slots — including custom header buttons.
|
|
26
72
|
* Outside an AppLayout it warns (dev) and returns an inert fallback.
|
|
27
73
|
*/
|
|
@@ -32,13 +78,23 @@ export function useAppLayout(): AppLayoutContext {
|
|
|
32
78
|
if (import.meta.env?.DEV) {
|
|
33
79
|
console.warn('[bagelink] useAppLayout() called outside <AppLayout>. AppSidebar/AppContent are designed to be used inside it.')
|
|
34
80
|
}
|
|
81
|
+
const noop = () => {}
|
|
35
82
|
return {
|
|
36
83
|
isOpen: ref(true),
|
|
37
84
|
isMobile: ref(false),
|
|
38
|
-
toggleMenu:
|
|
39
|
-
closeOnMobile:
|
|
85
|
+
toggleMenu: noop,
|
|
86
|
+
closeOnMobile: noop,
|
|
40
87
|
sidebarWidth: '260px',
|
|
41
88
|
sidebarCollapsedWidth: SIDEBAR_COLLAPSED_WIDTH,
|
|
42
89
|
sidebarCardStyle: false,
|
|
90
|
+
regions: inertRegions(),
|
|
91
|
+
setStart: noop,
|
|
92
|
+
setEnd: noop,
|
|
93
|
+
setTop: noop,
|
|
94
|
+
setBottom: noop,
|
|
95
|
+
toggleStart: noop,
|
|
96
|
+
toggleEnd: noop,
|
|
97
|
+
toggleTop: noop,
|
|
98
|
+
toggleBottom: noop,
|
|
43
99
|
}
|
|
44
100
|
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
export { default as AppContent } from './AppContent.vue'
|
|
2
2
|
export { default as AppLayout } from './AppLayout.vue'
|
|
3
|
+
export { default as AppNav } from './AppNav.vue'
|
|
3
4
|
export { default as AppSidebar } from './AppSidebar.vue'
|
|
4
5
|
export { useAppLayout } from './appLayoutContext'
|
|
5
|
-
export type { AppLayoutContext } from './appLayoutContext'
|
|
6
|
+
export type { AppLayoutContext, RegionSide, RegionState, RegionPatch } from './appLayoutContext'
|
|
6
7
|
export { default as BottomMenu } from './BottomMenu.vue'
|
|
7
8
|
export { default as Divider } from './Divider.vue'
|
|
8
9
|
export { default as Layout } from './Layout.vue'
|
package/src/styles/dark.css
CHANGED
|
@@ -25,10 +25,8 @@
|
|
|
25
25
|
#00000020 (translucent dark). Blends over any dark surface (bg, card,
|
|
26
26
|
input) instead of being a fixed opaque gray. */
|
|
27
27
|
|
|
28
|
-
/* ---- Brand (
|
|
29
|
-
--bgl-primary:
|
|
30
|
-
--bgl-primary-tint: #4f7cff33;
|
|
31
|
-
--bgl-primary-light: #1a2236;
|
|
28
|
+
/* ---- Brand (derived from the project's --bgl-primary, not hardcoded) --- */
|
|
29
|
+
--bgl-primary-tint: color-mix(in srgb, var(--bgl-primary) 20%, transparent);
|
|
32
30
|
|
|
33
31
|
/* ---- Status / accent colors (tuned for dark backgrounds) ------------- *
|
|
34
32
|
* The light-mode bases (e.g. blue #2e5bff, green #75c98f, red #ed6c6f,
|