@devalok/shilp-sutra 0.48.0 → 0.49.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.
Files changed (185) hide show
  1. package/BREAKING.json +32 -0
  2. package/MIGRATION.md +891 -881
  3. package/dist/_chunks/badge-group.js +50 -63
  4. package/dist/_chunks/badge-group.js.map +1 -1
  5. package/dist/_chunks/chat.js +1 -1
  6. package/dist/_chunks/chat.js.map +1 -1
  7. package/dist/_chunks/field-state.js +8 -0
  8. package/dist/_chunks/field-state.js.map +1 -0
  9. package/dist/_chunks/popover.js +50 -47
  10. package/dist/_chunks/popover.js.map +1 -1
  11. package/dist/_chunks/primitives.js +155 -155
  12. package/dist/_chunks/primitives.js.map +1 -1
  13. package/dist/_chunks/shared.js +4 -4
  14. package/dist/_chunks/tiptap.js +10 -10
  15. package/dist/_chunks/use-calendar.js +1 -1
  16. package/dist/_chunks/use-calendar.js.map +1 -1
  17. package/dist/_chunks/use-controllable-open.js +15 -0
  18. package/dist/_chunks/use-controllable-open.js.map +1 -0
  19. package/dist/composed/command-palette.js +3 -3
  20. package/dist/composed/command-palette.js.map +1 -1
  21. package/dist/composed/confirm-dialog.js +3 -3
  22. package/dist/composed/confirm-dialog.js.map +1 -1
  23. package/dist/composed/date-picker/index.js +3 -3
  24. package/dist/composed/date-picker/index.js.map +1 -1
  25. package/dist/composed/error-boundary.js +1 -1
  26. package/dist/composed/error-boundary.js.map +1 -1
  27. package/dist/composed/index.d.ts +3 -1
  28. package/dist/composed/index.d.ts.map +1 -1
  29. package/dist/composed/index.js +4 -3
  30. package/dist/composed/loading-skeleton.js +15 -15
  31. package/dist/composed/loading-skeleton.js.map +1 -1
  32. package/dist/composed/page-header.d.ts.map +1 -1
  33. package/dist/composed/page-header.js +32 -45
  34. package/dist/composed/page-header.js.map +1 -1
  35. package/dist/composed/page-skeletons.js +19 -19
  36. package/dist/composed/page-skeletons.js.map +1 -1
  37. package/dist/composed/responsive-modal.d.ts +39 -0
  38. package/dist/composed/responsive-modal.d.ts.map +1 -0
  39. package/dist/composed/responsive-modal.js +212 -0
  40. package/dist/composed/responsive-modal.js.map +1 -0
  41. package/dist/composed/rich-chat-input.js +4 -4
  42. package/dist/composed/rich-text-editor.js +1 -1
  43. package/dist/composed/rich-text-editor.js.map +1 -1
  44. package/dist/composed/schedule-view.d.ts +1 -1
  45. package/dist/composed/schedule-view.d.ts.map +1 -1
  46. package/dist/composed/schedule-view.js +48 -54
  47. package/dist/composed/schedule-view.js.map +1 -1
  48. package/dist/composed/status-badge.d.ts +13 -11
  49. package/dist/composed/status-badge.d.ts.map +1 -1
  50. package/dist/composed/status-badge.js +54 -130
  51. package/dist/composed/status-badge.js.map +1 -1
  52. package/dist/shell/bottom-navbar.js +1 -1
  53. package/dist/shell/bottom-navbar.js.map +1 -1
  54. package/dist/shell/top-bar.js +1 -1
  55. package/dist/shell/top-bar.js.map +1 -1
  56. package/dist/tokens/semantic.css +8 -1
  57. package/dist/ui/accordion.js +9 -9
  58. package/dist/ui/alert-dialog.js +26 -26
  59. package/dist/ui/aspect-ratio.js +1 -1
  60. package/dist/ui/autocomplete.js +7 -7
  61. package/dist/ui/avatar.d.ts.map +1 -1
  62. package/dist/ui/avatar.js +87 -82
  63. package/dist/ui/avatar.js.map +1 -1
  64. package/dist/ui/badge.d.ts.map +1 -1
  65. package/dist/ui/breadcrumb.d.ts +0 -1
  66. package/dist/ui/breadcrumb.d.ts.map +1 -1
  67. package/dist/ui/breadcrumb.js +58 -35
  68. package/dist/ui/breadcrumb.js.map +1 -1
  69. package/dist/ui/button.js +3 -3
  70. package/dist/ui/checkbox.d.ts +4 -2
  71. package/dist/ui/checkbox.d.ts.map +1 -1
  72. package/dist/ui/checkbox.js +33 -28
  73. package/dist/ui/checkbox.js.map +1 -1
  74. package/dist/ui/collapsible.js +4 -4
  75. package/dist/ui/combobox.d.ts +3 -0
  76. package/dist/ui/combobox.d.ts.map +1 -1
  77. package/dist/ui/combobox.js +137 -132
  78. package/dist/ui/combobox.js.map +1 -1
  79. package/dist/ui/context-menu.js +46 -46
  80. package/dist/ui/dialog.d.ts.map +1 -1
  81. package/dist/ui/dialog.js +53 -50
  82. package/dist/ui/dialog.js.map +1 -1
  83. package/dist/ui/dot.d.ts +38 -0
  84. package/dist/ui/dot.d.ts.map +1 -0
  85. package/dist/ui/dot.js +92 -0
  86. package/dist/ui/dot.js.map +1 -0
  87. package/dist/ui/dropdown-menu.d.ts.map +1 -1
  88. package/dist/ui/dropdown-menu.js +70 -65
  89. package/dist/ui/dropdown-menu.js.map +1 -1
  90. package/dist/ui/hover-card.js +11 -11
  91. package/dist/ui/index.d.ts +3 -2
  92. package/dist/ui/index.d.ts.map +1 -1
  93. package/dist/ui/index.js +67 -67
  94. package/dist/ui/index.js.map +1 -1
  95. package/dist/ui/input-otp.js +1 -1
  96. package/dist/ui/input-otp.js.map +1 -1
  97. package/dist/ui/input.d.ts +4 -2
  98. package/dist/ui/input.d.ts.map +1 -1
  99. package/dist/ui/input.js +38 -37
  100. package/dist/ui/input.js.map +1 -1
  101. package/dist/ui/label.js +1 -1
  102. package/dist/ui/lib/field-state.d.ts +21 -0
  103. package/dist/ui/lib/field-state.d.ts.map +1 -0
  104. package/dist/ui/lib/use-controllable-open.d.ts +32 -0
  105. package/dist/ui/lib/use-controllable-open.d.ts.map +1 -0
  106. package/dist/ui/link.js +1 -1
  107. package/dist/ui/number-input.d.ts +4 -2
  108. package/dist/ui/number-input.d.ts.map +1 -1
  109. package/dist/ui/number-input.js +51 -50
  110. package/dist/ui/number-input.js.map +1 -1
  111. package/dist/ui/pagination.js +1 -1
  112. package/dist/ui/popover.d.ts.map +1 -1
  113. package/dist/ui/progress.d.ts +66 -42
  114. package/dist/ui/progress.d.ts.map +1 -1
  115. package/dist/ui/progress.js +144 -40
  116. package/dist/ui/progress.js.map +1 -1
  117. package/dist/ui/radio.d.ts +6 -2
  118. package/dist/ui/radio.d.ts.map +1 -1
  119. package/dist/ui/radio.js +44 -33
  120. package/dist/ui/radio.js.map +1 -1
  121. package/dist/ui/select.d.ts +1 -1
  122. package/dist/ui/select.d.ts.map +1 -1
  123. package/dist/ui/select.js +58 -57
  124. package/dist/ui/select.js.map +1 -1
  125. package/dist/ui/separator.js +2 -2
  126. package/dist/ui/separator.js.map +1 -1
  127. package/dist/ui/sheet.d.ts.map +1 -1
  128. package/dist/ui/sheet.js +59 -56
  129. package/dist/ui/sheet.js.map +1 -1
  130. package/dist/ui/sidebar.js +5 -5
  131. package/dist/ui/sidebar.js.map +1 -1
  132. package/dist/ui/slider.js +6 -6
  133. package/dist/ui/slider.js.map +1 -1
  134. package/dist/ui/stat-card.d.ts.map +1 -1
  135. package/dist/ui/stat-card.js +122 -125
  136. package/dist/ui/stat-card.js.map +1 -1
  137. package/dist/ui/surface.js +1 -1
  138. package/dist/ui/switch.d.ts +3 -1
  139. package/dist/ui/switch.d.ts.map +1 -1
  140. package/dist/ui/switch.js +32 -27
  141. package/dist/ui/switch.js.map +1 -1
  142. package/dist/ui/textarea.d.ts +3 -3
  143. package/dist/ui/textarea.d.ts.map +1 -1
  144. package/dist/ui/textarea.js +18 -17
  145. package/dist/ui/textarea.js.map +1 -1
  146. package/dist/ui/toast.js +2 -2
  147. package/dist/ui/toast.js.map +1 -1
  148. package/dist/ui/toggle-group.js +1 -1
  149. package/dist/ui/toggle.js +1 -1
  150. package/dist/ui/tooltip.d.ts.map +1 -1
  151. package/dist/ui/tooltip.js +36 -33
  152. package/dist/ui/tooltip.js.map +1 -1
  153. package/docs/components/ai/ai-command-provider.md +46 -0
  154. package/docs/components/ai/block-renderer.md +59 -0
  155. package/docs/components/ai/command-bar.md +78 -0
  156. package/docs/components/ai/conversation.md +59 -0
  157. package/docs/components/ai/devadoot-icon.md +41 -0
  158. package/docs/components/composed/page-header.md +1 -1
  159. package/docs/components/composed/responsive-modal.md +66 -0
  160. package/docs/components/composed/schedule-view.md +6 -2
  161. package/docs/components/ui/breadcrumb.md +1 -1
  162. package/docs/components/ui/checkbox.md +4 -1
  163. package/docs/components/ui/combobox.md +4 -0
  164. package/docs/components/ui/dot.md +61 -0
  165. package/docs/components/ui/progress.md +54 -16
  166. package/docs/components/ui/radio.md +6 -2
  167. package/docs/components/ui/select.md +9 -5
  168. package/docs/components/ui/switch.md +4 -1
  169. package/docs/components/ui/table.md +2 -1
  170. package/llms.txt +11 -3
  171. package/make-kit/components/form.md +2 -2
  172. package/make-kit/components/icon.md +2 -2
  173. package/make-kit/components/overview.md +2 -2
  174. package/make-kit/components/select.md +1 -1
  175. package/make-kit/components/table.md +1 -1
  176. package/mcp-manifest.json +2656 -1068
  177. package/mcp-manifest.schema.json +18 -0
  178. package/package.json +11 -6
  179. package/skill/SKILL.md +1 -1
  180. package/skill/references/components.md +11 -3
  181. package/dist/ui/status-dot.d.ts +0 -27
  182. package/dist/ui/status-dot.d.ts.map +0 -1
  183. package/dist/ui/status-dot.js +0 -68
  184. package/dist/ui/status-dot.js.map +0 -1
  185. package/docs/components/ui/status-dot.md +0 -35
@@ -1,39 +1,40 @@
1
1
  "use client";
2
- import { An as e, Dn as t, Gt as n, Jt as r, Kt as i, Yt as a, jn as o, kn as s, qt as c } from "./primitives.js";
2
+ import { An as e, En as t, Gt as n, Jt as r, Kt as i, On as a, Wt as o, kn as s, qt as c } from "./primitives.js";
3
3
  import { springs as l, tweens as u } from "../ui/lib/motion.js";
4
4
  import { cn as d } from "../ui/lib/utils.js";
5
5
  import { useIsMobile as f } from "../hooks/use-mobile.js";
6
- import * as p from "react";
7
- import { jsx as m, jsxs as h } from "react/jsx-runtime";
8
- import { AnimatePresence as g, motion as _, useReducedMotion as v } from "framer-motion";
6
+ import { t as p } from "./use-controllable-open.js";
7
+ import * as m from "react";
8
+ import { jsx as h, jsxs as g } from "react/jsx-runtime";
9
+ import { AnimatePresence as _, motion as v, useReducedMotion as y } from "framer-motion";
9
10
  //#region src/ui/lib/bottom-sheet.tsx
10
- function y({ open: n, onOpenChange: r, children: i, className: a, dragHandle: c = !0, swipeable: f = !0, title: y }) {
11
- let b = v(), x = p.useRef(null), S = p.useCallback((e, t) => {
11
+ function b({ open: n, onOpenChange: r, children: i, className: o, dragHandle: c = !0, swipeable: f = !0, title: p }) {
12
+ let b = y(), x = m.useRef(null), S = m.useCallback((e, t) => {
12
13
  let n = x.current?.getBoundingClientRect().height ?? 300;
13
14
  (t.offset.y > n * .3 || t.velocity.y > 500) && r(!1);
14
15
  }, [r]);
15
- return /* @__PURE__ */ m(o, {
16
+ return /* @__PURE__ */ h(e, {
16
17
  open: n,
17
18
  onOpenChange: r,
18
- children: /* @__PURE__ */ m(g, { children: n && /* @__PURE__ */ h(e, {
19
+ children: /* @__PURE__ */ h(_, { children: n && /* @__PURE__ */ g(s, {
19
20
  forceMount: !0,
20
- children: [/* @__PURE__ */ m(s, {
21
+ children: [/* @__PURE__ */ h(a, {
21
22
  forceMount: !0,
22
23
  asChild: !0,
23
- children: /* @__PURE__ */ m(_.div, {
24
+ children: /* @__PURE__ */ h(v.div, {
24
25
  className: "fixed inset-0 z-modal bg-overlay",
25
26
  initial: { opacity: 0 },
26
27
  animate: { opacity: 1 },
27
28
  exit: { opacity: 0 },
28
29
  transition: u.fade
29
30
  })
30
- }), /* @__PURE__ */ m(t, {
31
+ }), /* @__PURE__ */ h(t, {
31
32
  forceMount: !0,
32
33
  asChild: !0,
33
- "aria-label": y,
34
- children: /* @__PURE__ */ h(_.div, {
34
+ "aria-label": p,
35
+ children: /* @__PURE__ */ g(v.div, {
35
36
  ref: x,
36
- className: d("fixed inset-x-0 bottom-0 z-modal max-h-[85vh] overflow-y-auto rounded-t-overlay-lg border-t border-surface-border-strong bg-surface-overlay shadow-overlay outline-hidden", a),
37
+ className: d("fixed inset-x-0 bottom-0 z-modal max-h-[85vh] overflow-y-auto rounded-t-overlay-lg border-t border-surface-border-strong bg-surface-overlay shadow-overlay outline-hidden", o),
37
38
  initial: { y: "100%" },
38
39
  animate: { y: 0 },
39
40
  exit: { y: "100%" },
@@ -42,10 +43,10 @@ function y({ open: n, onOpenChange: r, children: i, className: a, dragHandle: c
42
43
  dragConstraints: { top: 0 },
43
44
  dragElastic: .2,
44
45
  onDragEnd: S,
45
- children: [c && /* @__PURE__ */ m("div", {
46
+ children: [c && /* @__PURE__ */ h("div", {
46
47
  className: "flex justify-center pt-ds-03 pb-ds-02",
47
- children: /* @__PURE__ */ m("div", { className: "h-1 w-8 rounded-pill bg-surface-border" })
48
- }), /* @__PURE__ */ m("div", {
48
+ children: /* @__PURE__ */ h("div", { className: "h-1 w-8 rounded-pill bg-surface-border" })
49
+ }), /* @__PURE__ */ h("div", {
49
50
  className: "px-ds-05 pb-ds-06",
50
51
  children: i
51
52
  })]
@@ -56,46 +57,48 @@ function y({ open: n, onOpenChange: r, children: i, className: a, dragHandle: c
56
57
  }
57
58
  //#endregion
58
59
  //#region src/ui/popover.tsx
59
- var b = p.createContext({
60
+ var x = m.createContext({
60
61
  open: !1,
61
62
  onClose: () => {}
62
- }), x = ({ open: e, defaultOpen: t = !1, onOpenChange: n, ...i }) => {
63
- let [a, o] = p.useState(t), s = e !== void 0, c = s ? e : a, l = p.useCallback((e) => {
64
- s || o(e), n?.(e);
65
- }, [s, n]), u = p.useMemo(() => ({
66
- open: c,
67
- onClose: () => l(!1)
68
- }), [c, l]);
69
- return /* @__PURE__ */ m(b.Provider, {
70
- value: u,
71
- children: /* @__PURE__ */ m(r, {
72
- open: c,
73
- onOpenChange: l,
74
- ...i
63
+ }), S = ({ open: e, defaultOpen: t = !1, onOpenChange: n, ...r }) => {
64
+ let { open: i, setOpen: a, close: o } = p({
65
+ open: e,
66
+ defaultOpen: t,
67
+ onOpenChange: n
68
+ }), s = m.useMemo(() => ({
69
+ open: i,
70
+ onClose: o
71
+ }), [i, o]);
72
+ return /* @__PURE__ */ h(x.Provider, {
73
+ value: s,
74
+ children: /* @__PURE__ */ h(c, {
75
+ open: i,
76
+ onOpenChange: a,
77
+ ...r
75
78
  })
76
79
  });
77
80
  };
78
- x.displayName = "Popover";
79
- var S = a, C = n, w = p.forwardRef(({ className: e, align: t = "center", sideOffset: n = 4, children: r, ...a }, o) => {
80
- let s = f(), { open: h, onClose: v } = p.useContext(b);
81
- return s ? /* @__PURE__ */ m(y, {
82
- open: h,
81
+ S.displayName = "Popover";
82
+ var C = r, w = o, T = m.forwardRef(({ className: e, align: t = "center", sideOffset: r = 4, children: a, ...o }, s) => {
83
+ let c = f(), { open: p, onClose: g } = m.useContext(x);
84
+ return c ? /* @__PURE__ */ h(b, {
85
+ open: p,
83
86
  onOpenChange: (e) => {
84
- e || v();
87
+ e || g();
85
88
  },
86
89
  title: "Options",
87
90
  className: e,
88
- children: r
89
- }) : /* @__PURE__ */ m(g, { children: h && /* @__PURE__ */ m(c, {
91
+ children: a
92
+ }) : /* @__PURE__ */ h(_, { children: p && /* @__PURE__ */ h(i, {
90
93
  forceMount: !0,
91
- children: /* @__PURE__ */ m(i, {
92
- ref: o,
94
+ children: /* @__PURE__ */ h(n, {
95
+ ref: s,
93
96
  align: t,
94
- sideOffset: n,
97
+ sideOffset: r,
95
98
  forceMount: !0,
96
99
  asChild: !0,
97
- ...a,
98
- children: /* @__PURE__ */ m(_.div, {
100
+ ...o,
101
+ children: /* @__PURE__ */ h(v.div, {
99
102
  initial: {
100
103
  opacity: 0,
101
104
  scale: .95
@@ -113,11 +116,11 @@ var S = a, C = n, w = p.forwardRef(({ className: e, align: t = "center", sideOff
113
116
  opacity: u.fade
114
117
  },
115
118
  className: d("z-popover w-72 rounded-overlay bg-surface-overlay p-ds-05 text-surface-fg shadow-floating outline-hidden", e),
116
- children: r
119
+ children: a
117
120
  })
118
121
  })
119
122
  }) });
120
123
  });
121
- w.displayName = i.displayName;
124
+ T.displayName = n.displayName;
122
125
  //#endregion
123
- export { S as i, C as n, w as r, x as t };
126
+ export { C as i, w as n, T as r, S as t };
@@ -1 +1 @@
1
- {"version":3,"file":"popover.js","names":[],"sources":["../../src/ui/lib/bottom-sheet.tsx","../../src/ui/popover.tsx"],"sourcesContent":["'use client'\n\nimport * as DialogPrimitive from '@primitives/react-dialog'\nimport { AnimatePresence, motion, useReducedMotion } from 'framer-motion'\nimport * as React from 'react'\n\nimport { springs, tweens } from './motion'\nimport { cn } from './utils'\n\nexport interface BottomSheetProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n children: React.ReactNode\n className?: string\n /** Show drag handle bar at top. @default true */\n dragHandle?: boolean\n /** Allow swipe-to-dismiss. @default true */\n swipeable?: boolean\n /** Title for accessibility (sets aria-label on the dialog). */\n title?: string\n}\n\nexport function BottomSheet({\n open,\n onOpenChange,\n children,\n className,\n dragHandle = true,\n swipeable = true,\n title,\n}: BottomSheetProps) {\n const isReduced = useReducedMotion()\n const sheetRef = React.useRef<HTMLDivElement>(null)\n\n const handleDragEnd = React.useCallback(\n (_: unknown, info: { offset: { y: number }; velocity: { y: number } }) => {\n const sheetHeight = sheetRef.current?.getBoundingClientRect().height ?? 300\n if (info.offset.y > sheetHeight * 0.3 || info.velocity.y > 500) {\n onOpenChange(false)\n }\n },\n [onOpenChange],\n )\n\n return (\n <DialogPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <AnimatePresence>\n {open && (\n <DialogPrimitive.Portal forceMount>\n <DialogPrimitive.Overlay forceMount asChild>\n <motion.div\n className=\"fixed inset-0 z-modal bg-overlay\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={tweens.fade}\n />\n </DialogPrimitive.Overlay>\n\n <DialogPrimitive.Content\n forceMount\n asChild\n aria-label={title}\n >\n <motion.div\n ref={sheetRef}\n className={cn(\n 'fixed inset-x-0 bottom-0 z-modal max-h-[85vh] overflow-y-auto rounded-t-overlay-lg border-t border-surface-border-strong bg-surface-overlay shadow-overlay outline-hidden',\n className,\n )}\n initial={{ y: '100%' }}\n animate={{ y: 0 }}\n exit={{ y: '100%' }}\n transition={isReduced ? { duration: 0 } : springs.smooth}\n drag={swipeable && !isReduced ? 'y' : false}\n dragConstraints={{ top: 0 }}\n dragElastic={0.2}\n onDragEnd={handleDragEnd}\n >\n {dragHandle && (\n <div className=\"flex justify-center pt-ds-03 pb-ds-02\">\n <div className=\"h-1 w-8 rounded-pill bg-surface-border\" />\n </div>\n )}\n <div className=\"px-ds-05 pb-ds-06\">\n {children}\n </div>\n </motion.div>\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n )}\n </AnimatePresence>\n </DialogPrimitive.Root>\n )\n}\n","'use client'\n\nimport * as PopoverPrimitive from '@primitives/react-popover'\nimport { AnimatePresence,motion } from 'framer-motion'\nimport * as React from 'react'\n\nimport { useIsMobile } from '../hooks/use-mobile'\nimport { BottomSheet } from './lib/bottom-sheet'\nimport { springs, tweens } from './lib/motion'\nimport { cn } from './lib/utils'\n\n// ── Internal context to thread `open` state to animated children ──\n\nconst PopoverOpenContext = React.createContext<{ open: boolean; onClose: () => void }>({ open: false, onClose: () => {} })\n\nconst Popover: React.FC<React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Root>> = ({\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n ...props\n}) => {\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen)\n const isControlled = controlledOpen !== undefined\n const open = isControlled ? controlledOpen : uncontrolledOpen\n\n const handleOpenChange = React.useCallback(\n (value: boolean) => {\n if (!isControlled) setUncontrolledOpen(value)\n onOpenChange?.(value)\n },\n [isControlled, onOpenChange],\n )\n\n const contextValue = React.useMemo(\n () => ({ open, onClose: () => handleOpenChange(false) }),\n [open, handleOpenChange],\n )\n\n return (\n <PopoverOpenContext.Provider value={contextValue}>\n <PopoverPrimitive.Root open={open} onOpenChange={handleOpenChange} {...props} />\n </PopoverOpenContext.Provider>\n )\n}\nPopover.displayName = 'Popover'\n\nconst PopoverTrigger = PopoverPrimitive.Trigger\n\nconst PopoverAnchor = PopoverPrimitive.Anchor\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = 'center', sideOffset = 4, children, ...props }, ref) => {\n const isMobileRaw = useIsMobile()\n const { open, onClose } = React.useContext(PopoverOpenContext)\n\n if (isMobileRaw) {\n return (\n <BottomSheet\n open={open}\n onOpenChange={(v) => { if (!v) onClose() }}\n title=\"Options\"\n className={className}\n >\n {children}\n </BottomSheet>\n )\n }\n\n return (\n <AnimatePresence>\n {open && (\n <PopoverPrimitive.Portal forceMount>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n forceMount\n asChild\n {...props}\n >\n <motion.div\n initial={{ opacity: 0, scale: 0.95 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.95 }}\n transition={{ ...springs.snappy, opacity: tweens.fade }}\n className={cn(\n 'z-popover w-72 rounded-overlay bg-surface-overlay p-ds-05 text-surface-fg shadow-floating outline-hidden',\n className,\n )}\n >\n {children}\n </motion.div>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n )}\n </AnimatePresence>\n )\n})\nPopoverContent.displayName = PopoverPrimitive.Content.displayName\n\nexport type PopoverContentProps = React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n\nexport { Popover, PopoverAnchor,PopoverContent, PopoverTrigger }\n"],"mappings":"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"}
1
+ {"version":3,"file":"popover.js","names":[],"sources":["../../src/ui/lib/bottom-sheet.tsx","../../src/ui/popover.tsx"],"sourcesContent":["'use client'\n\nimport * as DialogPrimitive from '@primitives/react-dialog'\nimport { AnimatePresence, motion, useReducedMotion } from 'framer-motion'\nimport * as React from 'react'\n\nimport { springs, tweens } from './motion'\nimport { cn } from './utils'\n\nexport interface BottomSheetProps {\n open: boolean\n onOpenChange: (open: boolean) => void\n children: React.ReactNode\n className?: string\n /** Show drag handle bar at top. @default true */\n dragHandle?: boolean\n /** Allow swipe-to-dismiss. @default true */\n swipeable?: boolean\n /** Title for accessibility (sets aria-label on the dialog). */\n title?: string\n}\n\nexport function BottomSheet({\n open,\n onOpenChange,\n children,\n className,\n dragHandle = true,\n swipeable = true,\n title,\n}: BottomSheetProps) {\n const isReduced = useReducedMotion()\n const sheetRef = React.useRef<HTMLDivElement>(null)\n\n const handleDragEnd = React.useCallback(\n (_: unknown, info: { offset: { y: number }; velocity: { y: number } }) => {\n const sheetHeight = sheetRef.current?.getBoundingClientRect().height ?? 300\n if (info.offset.y > sheetHeight * 0.3 || info.velocity.y > 500) {\n onOpenChange(false)\n }\n },\n [onOpenChange],\n )\n\n return (\n <DialogPrimitive.Root open={open} onOpenChange={onOpenChange}>\n <AnimatePresence>\n {open && (\n <DialogPrimitive.Portal forceMount>\n <DialogPrimitive.Overlay forceMount asChild>\n <motion.div\n className=\"fixed inset-0 z-modal bg-overlay\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={tweens.fade}\n />\n </DialogPrimitive.Overlay>\n\n <DialogPrimitive.Content\n forceMount\n asChild\n aria-label={title}\n >\n <motion.div\n ref={sheetRef}\n className={cn(\n 'fixed inset-x-0 bottom-0 z-modal max-h-[85vh] overflow-y-auto rounded-t-overlay-lg border-t border-surface-border-strong bg-surface-overlay shadow-overlay outline-hidden',\n className,\n )}\n initial={{ y: '100%' }}\n animate={{ y: 0 }}\n exit={{ y: '100%' }}\n transition={isReduced ? { duration: 0 } : springs.smooth}\n drag={swipeable && !isReduced ? 'y' : false}\n dragConstraints={{ top: 0 }}\n dragElastic={0.2}\n onDragEnd={handleDragEnd}\n >\n {dragHandle && (\n <div className=\"flex justify-center pt-ds-03 pb-ds-02\">\n <div className=\"h-1 w-8 rounded-pill bg-surface-border\" />\n </div>\n )}\n <div className=\"px-ds-05 pb-ds-06\">\n {children}\n </div>\n </motion.div>\n </DialogPrimitive.Content>\n </DialogPrimitive.Portal>\n )}\n </AnimatePresence>\n </DialogPrimitive.Root>\n )\n}\n","'use client'\n\nimport * as PopoverPrimitive from '@primitives/react-popover'\nimport { AnimatePresence,motion } from 'framer-motion'\nimport * as React from 'react'\n\nimport { useIsMobile } from '../hooks/use-mobile'\nimport { BottomSheet } from './lib/bottom-sheet'\nimport { springs, tweens } from './lib/motion'\nimport { useControllableOpen } from './lib/use-controllable-open'\nimport { cn } from './lib/utils'\n\n// ── Internal context to thread `open` state to animated children ──\n\nconst PopoverOpenContext = React.createContext<{ open: boolean; onClose: () => void }>({ open: false, onClose: () => {} })\n\nconst Popover: React.FC<React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Root>> = ({\n open: controlledOpen,\n defaultOpen = false,\n onOpenChange,\n ...props\n}) => {\n const { open, setOpen, close } = useControllableOpen({ open: controlledOpen, defaultOpen, onOpenChange })\n\n const contextValue = React.useMemo(\n () => ({ open, onClose: close }),\n [open, close],\n )\n\n return (\n <PopoverOpenContext.Provider value={contextValue}>\n <PopoverPrimitive.Root open={open} onOpenChange={setOpen} {...props} />\n </PopoverOpenContext.Provider>\n )\n}\nPopover.displayName = 'Popover'\n\nconst PopoverTrigger = PopoverPrimitive.Trigger\n\nconst PopoverAnchor = PopoverPrimitive.Anchor\n\nconst PopoverContent = React.forwardRef<\n React.ElementRef<typeof PopoverPrimitive.Content>,\n React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n>(({ className, align = 'center', sideOffset = 4, children, ...props }, ref) => {\n const isMobileRaw = useIsMobile()\n const { open, onClose } = React.useContext(PopoverOpenContext)\n\n if (isMobileRaw) {\n return (\n <BottomSheet\n open={open}\n onOpenChange={(v) => { if (!v) onClose() }}\n title=\"Options\"\n className={className}\n >\n {children}\n </BottomSheet>\n )\n }\n\n return (\n <AnimatePresence>\n {open && (\n <PopoverPrimitive.Portal forceMount>\n <PopoverPrimitive.Content\n ref={ref}\n align={align}\n sideOffset={sideOffset}\n forceMount\n asChild\n {...props}\n >\n <motion.div\n initial={{ opacity: 0, scale: 0.95 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.95 }}\n transition={{ ...springs.snappy, opacity: tweens.fade }}\n className={cn(\n 'z-popover w-72 rounded-overlay bg-surface-overlay p-ds-05 text-surface-fg shadow-floating outline-hidden',\n className,\n )}\n >\n {children}\n </motion.div>\n </PopoverPrimitive.Content>\n </PopoverPrimitive.Portal>\n )}\n </AnimatePresence>\n )\n})\nPopoverContent.displayName = PopoverPrimitive.Content.displayName\n\nexport type PopoverContentProps = React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Content>\n\nexport { Popover, PopoverAnchor,PopoverContent, PopoverTrigger }\n"],"mappings":"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"}