blixify-ui-web-mcp 0.1.18 → 0.1.19

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 (154) hide show
  1. package/lib/components/action/button/button.stories.tsx +35 -18
  2. package/lib/components/action/buttonGroup/buttonGroup.stories.tsx +79 -7
  3. package/lib/components/action/iconButton/README.md +1 -0
  4. package/lib/components/action/iconButton/iconButton.stories.tsx +3 -3
  5. package/lib/components/action/radioList/radioList.stories.tsx +7 -7
  6. package/lib/components/action/slider/slider.stories.tsx +6 -6
  7. package/lib/components/action/textButton/textButton.stories.tsx +3 -3
  8. package/lib/components/action/toggle/toggle.stories.tsx +3 -3
  9. package/lib/components/advanced/collapse/collapse.stories.tsx +238 -16
  10. package/lib/components/advanced/infoWindow/infoWindow.stories.tsx +7 -7
  11. package/lib/components/advanced/popUp/README.md +12 -0
  12. package/lib/components/advanced/popUp/popUp.stories.tsx +6 -6
  13. package/lib/components/auth/bareSignIn/bareSignIn.stories.tsx +8 -8
  14. package/lib/components/auth/bareSignUp/bareSignUp.stories.tsx +4 -4
  15. package/lib/components/chart/areaChart/areaChart.stories.tsx +6 -6
  16. package/lib/components/chart/barChart/barChart.stories.tsx +6 -6
  17. package/lib/components/chart/boxPlotChart/boxPlotChart.stories.tsx +4 -4
  18. package/lib/components/chart/bubbleChart/bubbleChart.stories.tsx +4 -4
  19. package/lib/components/chart/card/card.stories.tsx +170 -30
  20. package/lib/components/chart/ganttChart/ganttChart.stories.tsx +7 -7
  21. package/lib/components/chart/heatmapChart/heatmapChart.stories.tsx +8 -8
  22. package/lib/components/chart/lineChart/lineChart.stories.tsx +5 -5
  23. package/lib/components/chart/pieChart/pieChart.stories.tsx +8 -8
  24. package/lib/components/chart/polarAreaChart/polarAreaChart.stories.tsx +4 -4
  25. package/lib/components/chart/radarChart/radarChart.stories.tsx +3 -3
  26. package/lib/components/chart/rangeBarChart/rangeBarChart.stories.tsx +5 -5
  27. package/lib/components/chart/statsCard/statsCard.stories.tsx +9 -9
  28. package/lib/components/chart/treemapChart/treemapChart.stories.tsx +4 -4
  29. package/lib/components/chat/chatAnchor/README.md +7 -0
  30. package/lib/components/chat/chatAnchor/chatAnchor.stories.tsx +3 -3
  31. package/lib/components/chat/chatBase/chatBase.stories.tsx +15 -15
  32. package/lib/components/chat/chatDashboard/chatDashboard.stories.tsx +5 -5
  33. package/lib/components/data/dataGraph/dataGraph.stories.tsx +5 -5
  34. package/lib/components/data/dataReference/dataReference.stories.tsx +6 -6
  35. package/lib/components/data/dataTemplate/README.md +361 -74
  36. package/lib/components/data/dataTemplate/dataModule.stories.tsx +7 -6
  37. package/lib/components/data/dataTemplate/dataTemplate.stories.tsx +18 -26
  38. package/lib/components/data/dataWrapper/README.md +205 -83
  39. package/lib/components/data/dataWrapper/dataWrapper.consumer.stories.tsx +2125 -0
  40. package/lib/components/data/dataWrapper/dataWrapper.edit.stories.tsx +607 -0
  41. package/lib/components/data/dataWrapper/dataWrapper.utils.stories.tsx +576 -0
  42. package/lib/components/data/dataWrapper/dataWrapper.view.stories.tsx +1273 -0
  43. package/lib/components/data/flexFilter/flexFilter.stories.tsx +171 -0
  44. package/lib/components/data/queryForm/queryForm.stories.tsx +3 -3
  45. package/lib/components/data/readQuery/readQuery.stories.tsx +3 -3
  46. package/lib/components/data/readQueryHoc/readQueryHoc.stories.tsx +3 -3
  47. package/lib/components/data/writeQuery/README.md +21 -10
  48. package/lib/components/data/writeQuery/writeQuery.stories.tsx +3 -3
  49. package/lib/components/design/actionSection/actionSection.stories.tsx +5 -5
  50. package/lib/components/design/banner/banner.stories.tsx +3 -3
  51. package/lib/components/design/bannerAction/bannerAction.stories.tsx +98 -13
  52. package/lib/components/design/blogSection/blogSection.stories.tsx +3 -3
  53. package/lib/components/design/carouselSection/carouselSection.stories.tsx +3 -3
  54. package/lib/components/design/designList/designList.stories.tsx +3 -3
  55. package/lib/components/design/faq/faq.stories.tsx +51 -23
  56. package/lib/components/design/fileGrid/fileGrid.stories.tsx +7 -7
  57. package/lib/components/design/fileViewer/fileViewer.stories.tsx +3 -3
  58. package/lib/components/design/footerSection/footerSection.stories.tsx +3 -3
  59. package/lib/components/design/googleReview/googleReview.stories.tsx +3 -3
  60. package/lib/components/design/heroSection/heroSection.stories.tsx +7 -7
  61. package/lib/components/design/iconList/iconList.stories.tsx +3 -3
  62. package/lib/components/design/imageGallery/imageGallery.stories.tsx +3 -3
  63. package/lib/components/design/imageZoom/imageZoom.stories.tsx +3 -3
  64. package/lib/components/design/leftContent/leftContent.stories.tsx +3 -3
  65. package/lib/components/design/logoCloud/logoCloud.stories.tsx +3 -3
  66. package/lib/components/design/onboarding/onboarding.stories.tsx +5 -5
  67. package/lib/components/design/pricing/pricing.stories.tsx +3 -3
  68. package/lib/components/design/rightContent/rightContent.stories.tsx +3 -3
  69. package/lib/components/design/sectionList/sectionList.stories.tsx +3 -3
  70. package/lib/components/design/teams/teams.stories.tsx +3 -3
  71. package/lib/components/display/alert/alert.stories.tsx +5 -5
  72. package/lib/components/display/calendar/calendar.stories.tsx +9 -9
  73. package/lib/components/display/clipboard/clipboard.stories.tsx +3 -3
  74. package/lib/components/display/detailList/detailList.stories.tsx +167 -38
  75. package/lib/components/display/drawer/README.md +44 -11
  76. package/lib/components/display/drawer/drawer.stories.tsx +69 -9
  77. package/lib/components/display/emptyState/emptyState.stories.tsx +45 -7
  78. package/lib/components/display/feeds/feeds.stories.tsx +3 -3
  79. package/lib/components/display/flexTable/flexTable.stories.tsx +210 -15
  80. package/lib/components/display/grid/README.md +4 -6
  81. package/lib/components/display/grid/grid.stories.tsx +13 -14
  82. package/lib/components/display/kanban/kanban.stories.tsx +4 -4
  83. package/lib/components/display/list/list.stories.tsx +8 -8
  84. package/lib/components/display/loading/loading.stories.tsx +3 -3
  85. package/lib/components/display/mapView/mapView.stories.tsx +6 -6
  86. package/lib/components/display/modal/modal.stories.tsx +3 -3
  87. package/lib/components/display/newCalendar/README.md +163 -0
  88. package/lib/components/display/newCalendar/newCalendar.stories.tsx +292 -0
  89. package/lib/components/display/newFeeds/README.md +53 -0
  90. package/lib/components/display/newFeeds/newFeeds.stories.tsx +104 -0
  91. package/lib/components/display/newKanban/README.md +25 -0
  92. package/lib/components/display/newKanban/newKanban.stories.tsx +131 -0
  93. package/lib/components/display/newList/README.md +30 -0
  94. package/lib/components/display/newList/newList.stories.tsx +231 -0
  95. package/lib/components/display/newPagination/README.md +15 -0
  96. package/lib/components/display/newTable/README.md +121 -0
  97. package/lib/components/display/newTable/newTable.stories.tsx +551 -0
  98. package/lib/components/display/notification/notification.stories.tsx +3 -3
  99. package/lib/components/display/progress/progress.stories.tsx +3 -3
  100. package/lib/components/display/stepper/README.md +4 -0
  101. package/lib/components/display/stepper/stepper.stories.tsx +67 -15
  102. package/lib/components/display/table/table.stories.tsx +28 -24
  103. package/lib/components/display/tag/tag.stories.tsx +31 -31
  104. package/lib/components/input/address/address.stories.tsx +9 -9
  105. package/lib/components/input/canvas/canvas.stories.tsx +9 -9
  106. package/lib/components/input/checkbox/checkbox.stories.tsx +4 -4
  107. package/lib/components/input/datePicker/datePicker.stories.tsx +38 -2
  108. package/lib/components/input/form/form.stories.tsx +8 -8
  109. package/lib/components/input/markdown/README.md +80 -2
  110. package/lib/components/input/markdown/markdown.stories.tsx +81 -25
  111. package/lib/components/input/monthYearPicker/monthYearPicker.stories.tsx +50 -16
  112. package/lib/components/input/netPromoterScore/netPromoterScore.stories.tsx +3 -3
  113. package/lib/components/input/rating/rating.stories.tsx +3 -3
  114. package/lib/components/input/select/README.md +2 -1
  115. package/lib/components/input/select/select.stories.tsx +30 -30
  116. package/lib/components/input/signature/signature.stories.tsx +9 -9
  117. package/lib/components/input/textArea/textArea.stories.tsx +3 -3
  118. package/lib/components/input/textInput/textinput.stories.tsx +11 -11
  119. package/lib/components/input/uploadInput/uploadInput.stories.tsx +14 -14
  120. package/lib/components/navigation/bars/README.md +27 -0
  121. package/lib/components/navigation/bars/bars.stories.tsx +54 -11
  122. package/lib/components/navigation/bottomTab/bottomTab.stories.tsx +3 -3
  123. package/lib/components/navigation/breadcrumb/breadcrumb.stories.tsx +5 -5
  124. package/lib/components/navigation/header/header.stories.tsx +11 -11
  125. package/lib/components/navigation/leftNav/leftNav.stories.tsx +7 -7
  126. package/lib/components/navigation/tabs/tabs.stories.tsx +7 -7
  127. package/lib/components/structure/column/column.stories.tsx +6 -6
  128. package/lib/components/structure/container/container.stories.tsx +4 -4
  129. package/lib/components/structure/link/link.stories.tsx +8 -8
  130. package/lib/components/structure/text/text.stories.tsx +8 -8
  131. package/lib/components/template/calendarView/calendarView.stories.tsx +726 -0
  132. package/lib/components/template/chatDashboard/chatDashboard.stories.tsx +497 -0
  133. package/lib/components/template/landingPage/landingPage.stories.tsx +2 -1
  134. package/lib/components/template/mapLayout/mapLayout.stories.tsx +519 -0
  135. package/lib/components/template/userHomePage/userHomePage.stories.tsx +380 -521
  136. package/lib/components/template/userRankingDashboard/userRankingDashboard.stories.tsx +142 -66
  137. package/lib/mcp/tools/componentsRoot.d.ts +2 -0
  138. package/lib/mcp/tools/componentsRoot.d.ts.map +1 -0
  139. package/lib/mcp/tools/componentsRoot.js +59 -0
  140. package/lib/mcp/tools/componentsRoot.js.map +1 -0
  141. package/lib/mcp/tools/getBackendComponent.d.ts.map +1 -1
  142. package/lib/mcp/tools/getBackendComponent.js +2 -5
  143. package/lib/mcp/tools/getBackendComponent.js.map +1 -1
  144. package/lib/mcp/tools/getComponent.d.ts.map +1 -1
  145. package/lib/mcp/tools/getComponent.js +2 -5
  146. package/lib/mcp/tools/getComponent.js.map +1 -1
  147. package/lib/mcp/tools/listComponents.d.ts.map +1 -1
  148. package/lib/mcp/tools/listComponents.js +15 -10
  149. package/lib/mcp/tools/listComponents.js.map +1 -1
  150. package/lib/mcp/tools/suggestTemplate.d.ts.map +1 -1
  151. package/lib/mcp/tools/suggestTemplate.js +107 -21
  152. package/lib/mcp/tools/suggestTemplate.js.map +1 -1
  153. package/package.json +1 -1
  154. package/lib/components/data/dataWrapper/dataWrapper.stories.tsx +0 -600
@@ -1,13 +1,16 @@
1
- import { ArrowsPointingOutIcon, MapIcon } from "@heroicons/react/24/solid";
1
+ import {
2
+ ArrowsPointingOutIcon,
3
+ MapIcon,
4
+ SparklesIcon,
5
+ } from "@heroicons/react/24/solid";
2
6
  import React, { useState } from "react";
3
- import { Collapse } from ".";
7
+ import { Collapse as CollapseImpl } from ".";
4
8
  import { Stepper } from "../../display/stepper";
5
9
  import { StorySection } from "../../storyUtils";
6
10
 
7
11
  const meta = { title: "Advanced/Collapse" };
8
12
  export default meta;
9
13
 
10
-
11
14
  const loremContent = (
12
15
  <div className="w-full p-3 text-sm text-gray-700">
13
16
  Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent quis urna
@@ -32,12 +35,12 @@ const stepperComp = (
32
35
  </div>
33
36
  );
34
37
 
35
- export const CollapseStory = () => {
38
+ export const Collapse = () => {
36
39
  const [collapse, setCollapse] = useState(true);
37
40
  const toggle = () => setCollapse((prev) => !prev);
38
41
 
39
42
  return (
40
- <div className="font-sans max-w-2xl p-6">
43
+ <div className="font-sans p-6">
41
44
  <StorySection
42
45
  title="Default"
43
46
  description={
@@ -50,7 +53,7 @@ export const CollapseStory = () => {
50
53
  }
51
54
  >
52
55
  <div className="w-full rounded-lg border overflow-hidden">
53
- <Collapse
56
+ <CollapseImpl
54
57
  title="Map View"
55
58
  collapse={collapse}
56
59
  defaultValue={false}
@@ -73,7 +76,7 @@ export const CollapseStory = () => {
73
76
  }
74
77
  >
75
78
  <div className="w-full rounded-lg border overflow-hidden">
76
- <Collapse
79
+ <CollapseImpl
77
80
  title="Map View"
78
81
  collapse={collapse}
79
82
  icon={<MapIcon className="w-5 h-5 text-primary-500" />}
@@ -105,15 +108,15 @@ export const CollapseStory = () => {
105
108
  }
106
109
  >
107
110
  <div className="w-full rounded-lg border overflow-hidden">
108
- <Collapse
111
+ <CollapseImpl
109
112
  title="Map View"
110
113
  desc="Lorem ipsum dolor sit amet"
111
114
  collapse={collapse}
112
115
  icon={<></>}
113
116
  collapseContainerCss="bg-primary-600"
114
117
  notCollapseContainerCss="bg-primary-600"
115
- titleClassName="text-white text-2xl"
116
- descClassName="text-white"
118
+ titleClassName="text-white text-base font-semibold leading-tight"
119
+ descClassName="text-white text-xs"
117
120
  iconClassName="w-5 h-5 text-white"
118
121
  content={loremContent}
119
122
  handleCollapse={toggle}
@@ -121,6 +124,114 @@ export const CollapseStory = () => {
121
124
  </div>
122
125
  </StorySection>
123
126
 
127
+ <StorySection
128
+ title="Summary Line"
129
+ description={
130
+ <>
131
+ Use <code>summary</code> to show a one-line gist beside the title
132
+ while collapsed. Lets users scan a list of sections without
133
+ expanding each one.
134
+ </>
135
+ }
136
+ >
137
+ <div className="w-full rounded-lg border overflow-hidden">
138
+ <CollapseImpl
139
+ title="Order Details"
140
+ summary="3 items · RM 1,260"
141
+ icon={<MapIcon className="w-5 h-5 text-primary-500" />}
142
+ content={loremContent}
143
+ defaultOpen={false}
144
+ />
145
+ </div>
146
+ </StorySection>
147
+
148
+ <StorySection
149
+ title="Modern Mobile — Gradient Header + Content Padding"
150
+ description={
151
+ <>
152
+ iOS-card feel for mobile: 3-stop gradient header (
153
+ <code>
154
+ bg-gradient-to-br from-primary-700 via-primary-500 to-primary-300
155
+ </code>
156
+ ), rounded-2xl outer shadow, and the new{" "}
157
+ <code>contentClassName</code> prop to control padding/bg around the
158
+ content area. Use <code>summary</code> to keep the gist visible
159
+ while collapsed.
160
+ </>
161
+ }
162
+ >
163
+ <div className="w-full overflow-hidden rounded-2xl shadow-md">
164
+ <CollapseImpl
165
+ title="Order Details"
166
+ summary="3 items · RM 1,260"
167
+ collapse={collapse}
168
+ handleCollapse={toggle}
169
+ icon={<MapIcon className="w-5 h-5 text-white" />}
170
+ collapseContainerCss="bg-gradient-to-br from-primary-700 via-primary-500 to-primary-300 !border-0"
171
+ notCollapseContainerCss="bg-gradient-to-br from-primary-700 via-primary-500 to-primary-300"
172
+ titleClassName="text-white text-base font-semibold"
173
+ summaryClassName="text-primary-50"
174
+ descClassName="text-primary-50"
175
+ iconClassName="w-5 h-5 text-white"
176
+ contentClassName="p-5 bg-white border-t border-primary-100"
177
+ content={
178
+ <div className="space-y-2 text-sm text-gray-700">
179
+ <div className="flex items-center justify-between">
180
+ <span className="text-gray-500">Subtotal</span>
181
+ <span className="font-medium">RM 1,200.00</span>
182
+ </div>
183
+ <div className="flex items-center justify-between">
184
+ <span className="text-gray-500">Tax</span>
185
+ <span className="font-medium">RM 60.00</span>
186
+ </div>
187
+ <div className="flex items-center justify-between border-t border-gray-100 pt-2">
188
+ <span className="font-semibold text-gray-900">Total</span>
189
+ <span className="font-bold text-primary-600">
190
+ RM 1,260.00
191
+ </span>
192
+ </div>
193
+ </div>
194
+ }
195
+ />
196
+ </div>
197
+ </StorySection>
198
+
199
+ <StorySection
200
+ title="Modern Mobile — Padding-only Override"
201
+ description={
202
+ <>
203
+ If the default gradient/header is fine but you just want tighter or
204
+ looser content padding, pass{" "}
205
+ <code>contentClassName=&quot;p-2&quot;</code> (tighter) or{" "}
206
+ <code>contentClassName=&quot;p-8&quot;</code> (looser). No need to
207
+ override the whole header.
208
+ </>
209
+ }
210
+ >
211
+ <div className="w-full space-y-3">
212
+ <div className="overflow-hidden rounded-xl border border-gray-200">
213
+ <CollapseImpl
214
+ title="Tight padding (p-2)"
215
+ icon={<MapIcon className="w-5 h-5 text-primary-500" />}
216
+ contentClassName="p-2 text-xs text-gray-600"
217
+ content={<div>Content with tight padding.</div>}
218
+ defaultOpen
219
+ />
220
+ </div>
221
+ <div className="overflow-hidden rounded-xl border border-gray-200">
222
+ <CollapseImpl
223
+ title="Loose padding (p-8)"
224
+ icon={<MapIcon className="w-5 h-5 text-primary-500" />}
225
+ contentClassName="p-8 text-sm text-gray-700"
226
+ content={
227
+ <div>Content with loose padding for breathing room.</div>
228
+ }
229
+ defaultOpen
230
+ />
231
+ </div>
232
+ </div>
233
+ </StorySection>
234
+
124
235
  <StorySection
125
236
  title="Collapse Additional Component + Expand Button"
126
237
  description={
@@ -132,15 +243,15 @@ export const CollapseStory = () => {
132
243
  }
133
244
  >
134
245
  <div className="w-full rounded-lg border overflow-hidden">
135
- <Collapse
246
+ <CollapseImpl
136
247
  title="Map View"
137
248
  desc="Lorem ipsum dolor sit amet, consectetur adipiscing elit."
138
249
  collapse={collapse}
139
250
  icon={<></>}
140
- collapseContainerCss="bg-primary-800"
141
- notCollapseContainerCss="bg-primary-800"
142
- titleClassName="text-white text-2xl"
143
- descClassName="text-white"
251
+ collapseContainerCss="bg-primary-600"
252
+ notCollapseContainerCss="bg-primary-600"
253
+ titleClassName="text-white text-base font-semibold leading-tight"
254
+ descClassName="text-white text-xs"
144
255
  iconClassName="w-5 h-5 text-white"
145
256
  collapseAdditionalComp={stepperComp}
146
257
  content={
@@ -154,6 +265,117 @@ export const CollapseStory = () => {
154
265
  />
155
266
  </div>
156
267
  </StorySection>
268
+
269
+ <StorySection
270
+ title="Compact"
271
+ description={
272
+ <>
273
+ Use <code>size="compact"</code> for reduced padding and font size.
274
+ </>
275
+ }
276
+ >
277
+ <div className="w-full space-y-2">
278
+ {["Order Summary", "Shipping Details", "Payment Info", "Notes"].map(
279
+ (sectionTitle) => (
280
+ <div
281
+ key={sectionTitle}
282
+ className="overflow-hidden rounded-lg border border-gray-200"
283
+ >
284
+ <CollapseImpl
285
+ title={sectionTitle}
286
+ icon={<MapIcon className="w-4 h-4 text-primary-500" />}
287
+ size="compact"
288
+ content={loremContent}
289
+ />
290
+ </div>
291
+ )
292
+ )}
293
+ </div>
294
+ </StorySection>
295
+
296
+ <StorySection
297
+ title="AI Overview — Animated Gradient Glow"
298
+ description={
299
+ <>
300
+ Sci-fi accent for an "AI"-themed surface. Wraps the{" "}
301
+ <code>Collapse</code> in a 2px padding ring whose background is a
302
+ two-colour gradient (primary &rarr; violet) that animates by
303
+ shifting <code>background-position</code> over 4s, producing a slow
304
+ shimmering glow. A blurred sibling layer underneath adds an outer
305
+ halo for depth. Pure CSS — no extra libraries.
306
+ </>
307
+ }
308
+ >
309
+ <style>{`
310
+ @keyframes ai-glow {
311
+ 0% { background-position: 0% 50%; }
312
+ 100% { background-position: 400% 50%; }
313
+ }
314
+ @keyframes ai-pulse {
315
+ 0%, 100% { opacity: 0.55; }
316
+ 50% { opacity: 0.85; }
317
+ }
318
+ .ai-glow-bg {
319
+ /* 5-stop, non-palindrome gradient so every position looks
320
+ distinct — symmetric gradients look stationary mid-cycle */
321
+ background-image: linear-gradient(
322
+ 120deg,
323
+ #6366f1 0%,
324
+ #a855f7 25%,
325
+ #ec4899 50%,
326
+ #06b6d4 75%,
327
+ #6366f1 100%
328
+ );
329
+ background-size: 400% 100%;
330
+ background-repeat: repeat-x;
331
+ animation: ai-glow 6s linear infinite;
332
+ }
333
+ .ai-glow-halo {
334
+ filter: blur(16px);
335
+ animation: ai-glow 6s linear infinite, ai-pulse 4s ease-in-out infinite;
336
+ }
337
+ `}</style>
338
+ <div className="relative w-full">
339
+ {/* Halo — blurred sibling that bleeds outside the ring. Same
340
+ gradient as the ring so the colours stay in sync. */}
341
+ <div className="ai-glow-bg ai-glow-halo absolute -inset-1 rounded-2xl" />
342
+ {/* Gradient ring + inner white card. notCollapseContainerCss /
343
+ collapseContainerCss set to bg-transparent + !border-0 so
344
+ the inner Collapse doesn't paint a white background or a
345
+ divider line over the gradient ring. */}
346
+ <div className="ai-glow-bg relative rounded-2xl p-[2px]">
347
+ <div className="rounded-2xl bg-white overflow-hidden">
348
+ <CollapseImpl
349
+ title="AI Overview"
350
+ summary="Generated 12 seconds ago"
351
+ desc="Personalised insights powered by AI"
352
+ collapse={collapse}
353
+ handleCollapse={toggle}
354
+ icon={<SparklesIcon className="h-5 w-5 text-violet-500" />}
355
+ titleClassName="text-gray-900 text-base font-semibold"
356
+ summaryClassName="text-violet-600 text-xs"
357
+ descClassName="text-gray-500 text-xs"
358
+ collapseContainerCss="!border-0"
359
+ notCollapseContainerCss="!border-0"
360
+ contentClassName="px-4 pb-4 pt-3 border-t border-violet-100"
361
+ content={
362
+ <div className="space-y-2 text-sm text-gray-700">
363
+ <p>
364
+ Your activity is trending up. Engagement is 18% above last
365
+ month and your completion rate is the highest it has been
366
+ since April.
367
+ </p>
368
+ <p className="text-xs text-gray-500">
369
+ Suggested next step: review yesterday's incomplete tasks
370
+ before the standup at 10:00 AM.
371
+ </p>
372
+ </div>
373
+ }
374
+ />
375
+ </div>
376
+ </div>
377
+ </div>
378
+ </StorySection>
157
379
  </div>
158
380
  );
159
- }
381
+ };
@@ -1,7 +1,7 @@
1
1
  import { BoltIcon } from "@heroicons/react/24/outline";
2
2
  import { QuestionMarkCircleIcon } from "@heroicons/react/24/solid";
3
3
  import React from "react";
4
- import { InfoWindow } from ".";
4
+ import { InfoWindow as InfoWindowImpl } from ".";
5
5
  import { StorySection } from "../../storyUtils";
6
6
 
7
7
  const meta = { title: "Advanced/Info Window" };
@@ -16,7 +16,7 @@ const infoContent = (
16
16
 
17
17
  const iconClassName = "h-6 w-6 text-gray-400";
18
18
 
19
- export const InfoWindowStory = () => (
19
+ export const InfoWindow = () => (
20
20
  <div className="font-sans max-w-2xl p-6">
21
21
  <StorySection
22
22
  title="Position: Right"
@@ -28,7 +28,7 @@ export const InfoWindowStory = () => (
28
28
  </>
29
29
  }
30
30
  >
31
- <InfoWindow
31
+ <InfoWindowImpl
32
32
  type="right"
33
33
  defaultOpen={true}
34
34
  content={infoContent}
@@ -45,7 +45,7 @@ export const InfoWindowStory = () => (
45
45
  </>
46
46
  }
47
47
  >
48
- <InfoWindow
48
+ <InfoWindowImpl
49
49
  type="left"
50
50
  content={infoContent}
51
51
  icon={<QuestionMarkCircleIcon className={iconClassName} />}
@@ -62,7 +62,7 @@ export const InfoWindowStory = () => (
62
62
  </>
63
63
  }
64
64
  >
65
- <InfoWindow
65
+ <InfoWindowImpl
66
66
  type="bottom start"
67
67
  content={infoContent}
68
68
  icon={<BoltIcon className={iconClassName} />}
@@ -78,7 +78,7 @@ export const InfoWindowStory = () => (
78
78
  </>
79
79
  }
80
80
  >
81
- <InfoWindow
81
+ <InfoWindowImpl
82
82
  type="top start"
83
83
  content={infoContent}
84
84
  icon={<BoltIcon className={iconClassName} />}
@@ -95,7 +95,7 @@ export const InfoWindowStory = () => (
95
95
  </>
96
96
  }
97
97
  >
98
- <InfoWindow
98
+ <InfoWindowImpl
99
99
  type="bottom end"
100
100
  content={infoContent}
101
101
  icon={<BoltIcon className={iconClassName} />}
@@ -107,3 +107,15 @@ When a `ref` is attached, the following method is available:
107
107
  | Method | Description |
108
108
  | --------------- | ----------------------------------------------------------------- |
109
109
  | `handleOnClose` | Programmatically closes the panel and fires `onClose` if provided |
110
+
111
+ ##### Escaping a clipping container
112
+
113
+ `portal` renders the panel into `document.body`, positioned against the trigger,
114
+ for a popup that sits inside a scrolling or clipping ancestor — an absolutely
115
+ positioned panel is cut off by one. The outside-click check follows the panel
116
+ there, so clicking inside it does not close it, and the enter/leave transition is
117
+ skipped since a portal cannot hold the ref `Transition` needs.
118
+
119
+ ```tsx
120
+ <PopUp portal anchor="right" excludePortalIds={["select-portal"]} … />
121
+ ```
@@ -6,7 +6,7 @@ import {
6
6
  UserGroupIcon,
7
7
  } from "@heroicons/react/24/solid";
8
8
  import React, { useRef } from "react";
9
- import { PopUp } from ".";
9
+ import { PopUp as PopUpImpl } from ".";
10
10
  import { TextButton } from "../../action/textButton";
11
11
  import { Card } from "../../chart/card";
12
12
  import { StorySection } from "../../storyUtils";
@@ -17,7 +17,7 @@ export default meta;
17
17
 
18
18
  const lib = { Transition };
19
19
 
20
- export const PopUpStory = () => {
20
+ export const PopUp = () => {
21
21
  const ref = useRef<any>(null);
22
22
 
23
23
  const richContent = (
@@ -70,7 +70,7 @@ export const PopUpStory = () => {
70
70
  <div className="p-4 rounded-lg bg-primary-700 text-white w-72">
71
71
  <div className="flex justify-between items-center">
72
72
  <h5 className="font-semibold text-sm">Click to open</h5>
73
- <PopUp
73
+ <PopUpImpl
74
74
  ref={ref}
75
75
  ctaComp={
76
76
  <ChevronDownIcon className="h-5 w-5 text-white cursor-pointer" />
@@ -97,7 +97,7 @@ export const PopUpStory = () => {
97
97
  <div className="p-4 rounded-lg bg-primary-700 text-white w-72">
98
98
  <div className="flex justify-between items-center">
99
99
  <h5 className="font-semibold text-sm">Opens above</h5>
100
- <PopUp
100
+ <PopUpImpl
101
101
  ref={ref}
102
102
  ctaComp={
103
103
  <ChevronUpIcon className="h-5 w-5 text-white cursor-pointer" />
@@ -124,7 +124,7 @@ export const PopUpStory = () => {
124
124
  </>
125
125
  }
126
126
  >
127
- <PopUp
127
+ <PopUpImpl
128
128
  ref={ref}
129
129
  ctaComp={
130
130
  <Card
@@ -151,7 +151,7 @@ export const PopUpStory = () => {
151
151
  </>
152
152
  }
153
153
  >
154
- <PopUp
154
+ <PopUpImpl
155
155
  ref={ref}
156
156
  ctaComp={
157
157
  <Card
@@ -1,5 +1,5 @@
1
1
  import React, { useState } from "react";
2
- import { AvailableProvider, BareSignIn } from ".";
2
+ import { AvailableProvider, BareSignIn as BareSignInImpl } from ".";
3
3
  import { StorySection } from "../../storyUtils";
4
4
 
5
5
  const meta = { title: "Auth/Bare Sign In" };
@@ -9,7 +9,7 @@ export default meta;
9
9
  const cardCls =
10
10
  "w-full max-w-md bg-white rounded-lg shadow-sm border border-gray-100";
11
11
 
12
- export const BareSignInStory = () => {
12
+ export const BareSignIn = () => {
13
13
  const [provider, setProvider] = useState<typeof AvailableProvider>("email");
14
14
 
15
15
  return (
@@ -26,7 +26,7 @@ export const BareSignInStory = () => {
26
26
  }
27
27
  >
28
28
  <div className={cardCls}>
29
- <BareSignIn
29
+ <BareSignInImpl
30
30
  version="0.0.1"
31
31
  type="email"
32
32
  provider={["email", "phone", "google", "username"]}
@@ -49,7 +49,7 @@ export const BareSignInStory = () => {
49
49
  }
50
50
  >
51
51
  <div className={cardCls}>
52
- <BareSignIn
52
+ <BareSignInImpl
53
53
  version="0.0.1"
54
54
  type="phone"
55
55
  mobilePicker={true}
@@ -73,7 +73,7 @@ export const BareSignInStory = () => {
73
73
  }
74
74
  >
75
75
  <div className={cardCls}>
76
- <BareSignIn
76
+ <BareSignInImpl
77
77
  version="0.0.1"
78
78
  type="username"
79
79
  provider={["username", "email"]}
@@ -95,7 +95,7 @@ export const BareSignInStory = () => {
95
95
  }
96
96
  >
97
97
  <div className={cardCls}>
98
- <BareSignIn
98
+ <BareSignInImpl
99
99
  version="0.0.1"
100
100
  type="phoneOTP"
101
101
  provider={["phoneOTP"]}
@@ -120,7 +120,7 @@ export const BareSignInStory = () => {
120
120
  }
121
121
  >
122
122
  <div className={cardCls}>
123
- <BareSignIn
123
+ <BareSignInImpl
124
124
  version="0.0.1"
125
125
  type="phoneOTP"
126
126
  provider={["phoneOTP"]}
@@ -144,7 +144,7 @@ export const BareSignInStory = () => {
144
144
  }
145
145
  >
146
146
  <div className={cardCls}>
147
- <BareSignIn
147
+ <BareSignInImpl
148
148
  version="0.0.1"
149
149
  type={provider}
150
150
  mobilePicker={true}
@@ -1,5 +1,5 @@
1
1
  import React, { useRef, useState } from "react";
2
- import { BareSignUp } from ".";
2
+ import { BareSignUp as BareSignUpImpl } from ".";
3
3
  import { Option, Select } from "../../input/select";
4
4
  import { TextInput } from "../../input/textInput";
5
5
  import { AvailableProvider } from "../bareSignIn";
@@ -14,7 +14,7 @@ const genderOptions: Option[] = [
14
14
  { key: "F", label: "Female" },
15
15
  ];
16
16
 
17
- export const BareSignUpStory = () => {
17
+ export const BareSignUp = () => {
18
18
  const custFormRef: any = useRef(null);
19
19
  const signUpFormRef: any = useRef(null);
20
20
  const input1: any = useRef(null);
@@ -112,7 +112,7 @@ export const BareSignUpStory = () => {
112
112
  }
113
113
  >
114
114
  <div className="p-4 w-full max-w-md bg-white rounded-lg shadow-sm border border-gray-100">
115
- <BareSignUp
115
+ <BareSignUpImpl
116
116
  type={signUpType}
117
117
  stepIndex={stepIndex}
118
118
  handleUpdateStepIndex={setStepIndex}
@@ -135,7 +135,7 @@ export const BareSignUpStory = () => {
135
135
  }
136
136
  >
137
137
  <div className="p-4 w-full max-w-sm bg-white rounded-lg shadow-sm border border-gray-100">
138
- <BareSignUp
138
+ <BareSignUpImpl
139
139
  type={signUpType}
140
140
  stepIndex={stepIndex}
141
141
  handleUpdateStepIndex={setStepIndex}
@@ -1,7 +1,7 @@
1
1
  import { PencilIcon } from "@heroicons/react/24/outline";
2
2
  import dayjs from "../../dayjs";
3
3
  import React, { useCallback, useEffect, useMemo, useState } from "react";
4
- import { AreaChart } from ".";
4
+ import { AreaChart as AreaChartImpl } from ".";
5
5
  import { RangeInterface } from "../DateRange";
6
6
  import { StorySection } from "../../storyUtils";
7
7
 
@@ -45,7 +45,7 @@ const rawData = [
45
45
  { label: "Banana", value: 55, daysAgo: 28 },
46
46
  ];
47
47
 
48
- export const AreaChartStory = () => {
48
+ export const AreaChart = () => {
49
49
  const [seriesData, setSeriesData] = useState<any[]>([]);
50
50
 
51
51
  const chartDummyData = useMemo(() => {
@@ -102,7 +102,7 @@ export const AreaChartStory = () => {
102
102
  </>
103
103
  }
104
104
  >
105
- <AreaChart
105
+ <AreaChartImpl
106
106
  title="Sales"
107
107
  seriesName="Value"
108
108
  seriesData={seriesData}
@@ -126,7 +126,7 @@ export const AreaChartStory = () => {
126
126
  </>
127
127
  }
128
128
  >
129
- <AreaChart
129
+ <AreaChartImpl
130
130
  title="Sales by Region"
131
131
  categories={categories}
132
132
  stackedAreaSeries={stackedAreaSeries}
@@ -152,7 +152,7 @@ export const AreaChartStory = () => {
152
152
  }
153
153
  dark
154
154
  >
155
- <AreaChart
155
+ <AreaChartImpl
156
156
  title="Sales by Region"
157
157
  categories={categories}
158
158
  stackedAreaSeries={stackedAreaSeries}
@@ -179,7 +179,7 @@ export const AreaChartStory = () => {
179
179
  </>
180
180
  }
181
181
  >
182
- <AreaChart
182
+ <AreaChartImpl
183
183
  title="Sales"
184
184
  seriesName="Value"
185
185
  seriesData={seriesData}
@@ -1,7 +1,7 @@
1
1
  import { PencilIcon } from "@heroicons/react/24/outline";
2
2
  import dayjs from "../../dayjs";
3
3
  import React, { useCallback, useEffect, useMemo, useState } from "react";
4
- import { BarChart } from ".";
4
+ import { BarChart as BarChartImpl } from ".";
5
5
  import { RangeInterface } from "../DateRange";
6
6
  import { StorySection } from "../../storyUtils";
7
7
 
@@ -23,7 +23,7 @@ const rawData = [
23
23
  { label: "Banana", value: 55, daysAgo: 28 },
24
24
  ];
25
25
 
26
- export const BarChartStory = () => {
26
+ export const BarChart = () => {
27
27
  const [seriesData, setSeriesData] = useState<any[]>([]);
28
28
 
29
29
  const chartDummyData = useMemo(() => {
@@ -80,7 +80,7 @@ export const BarChartStory = () => {
80
80
  </>
81
81
  }
82
82
  >
83
- <BarChart
83
+ <BarChartImpl
84
84
  title="Sales"
85
85
  seriesName="Value"
86
86
  seriesData={seriesData}
@@ -106,7 +106,7 @@ export const BarChartStory = () => {
106
106
  </>
107
107
  }
108
108
  >
109
- <BarChart
109
+ <BarChartImpl
110
110
  title="Sales by Company"
111
111
  stackedBarSeries={stackedSeries}
112
112
  orientation="col"
@@ -132,7 +132,7 @@ export const BarChartStory = () => {
132
132
  }
133
133
  dark
134
134
  >
135
- <BarChart
135
+ <BarChartImpl
136
136
  title="Sales by Company"
137
137
  stackedBarSeries={stackedSeries}
138
138
  orientation="col"
@@ -165,7 +165,7 @@ export const BarChartStory = () => {
165
165
  >
166
166
  <div className="overflow-x-auto w-full">
167
167
  <div className="min-w-[600px]">
168
- <BarChart
168
+ <BarChartImpl
169
169
  title=""
170
170
  containerStyle="bg-gradient-to-b from-[#4a3aff] to-[#6959ff] rounded-2xl p-6 shadow-lg"
171
171
  categories={["May", "Jun", "Jul", "Aug", "Sep", "Oct"]}