@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.
Files changed (35) hide show
  1. package/dist/components/FloatingPanel.vue.d.ts +37 -0
  2. package/dist/components/FloatingPanel.vue.d.ts.map +1 -0
  3. package/dist/components/form/inputs/DateInput.vue.d.ts +12 -4
  4. package/dist/components/form/inputs/DateInput.vue.d.ts.map +1 -1
  5. package/dist/components/form/inputs/DatePicker.vue.d.ts +12 -1
  6. package/dist/components/form/inputs/DatePicker.vue.d.ts.map +1 -1
  7. package/dist/components/form/inputs/SelectInput.vue.d.ts.map +1 -1
  8. package/dist/components/form/inputs/TextInput.vue.d.ts.map +1 -1
  9. package/dist/components/index.d.ts +1 -0
  10. package/dist/components/index.d.ts.map +1 -1
  11. package/dist/components/layout/AppContent.vue.d.ts.map +1 -1
  12. package/dist/components/layout/AppLayout.vue.d.ts +19 -29
  13. package/dist/components/layout/AppLayout.vue.d.ts.map +1 -1
  14. package/dist/components/layout/AppNav.vue.d.ts +39 -0
  15. package/dist/components/layout/AppNav.vue.d.ts.map +1 -0
  16. package/dist/components/layout/appLayoutContext.d.ts +35 -5
  17. package/dist/components/layout/appLayoutContext.d.ts.map +1 -1
  18. package/dist/components/layout/index.d.ts +2 -1
  19. package/dist/components/layout/index.d.ts.map +1 -1
  20. package/dist/index.cjs +178 -151
  21. package/dist/index.mjs +35744 -41481
  22. package/dist/style.css +1 -2
  23. package/package.json +1 -1
  24. package/src/components/FloatingPanel.vue +111 -0
  25. package/src/components/form/inputs/DateInput.vue +105 -18
  26. package/src/components/form/inputs/DatePicker.vue +124 -8
  27. package/src/components/form/inputs/SelectInput.vue +1 -1
  28. package/src/components/form/inputs/TextInput.vue +37 -11
  29. package/src/components/index.ts +1 -0
  30. package/src/components/layout/AppContent.vue +11 -28
  31. package/src/components/layout/AppLayout.vue +215 -81
  32. package/src/components/layout/AppNav.vue +106 -0
  33. package/src/components/layout/appLayoutContext.ts +63 -7
  34. package/src/components/layout/index.ts +2 -1
  35. 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
- /** Sidebar open (expanded) state */
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, toggle).
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'
@@ -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 (slightly adjusted for dark backgrounds) ------------------- */
29
- --bgl-primary: #4f7cff !important;
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,