blixify-ui-web-mcp 0.1.18 → 0.1.20
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/lib/components/action/button/button.stories.tsx +35 -18
- package/lib/components/action/buttonGroup/buttonGroup.stories.tsx +79 -7
- package/lib/components/action/iconButton/README.md +1 -0
- package/lib/components/action/iconButton/iconButton.stories.tsx +14 -5
- package/lib/components/action/radioList/radioList.stories.tsx +7 -7
- package/lib/components/action/slider/slider.stories.tsx +6 -6
- package/lib/components/action/textButton/textButton.stories.tsx +3 -3
- package/lib/components/action/toggle/toggle.stories.tsx +3 -3
- package/lib/components/advanced/collapse/collapse.stories.tsx +238 -16
- package/lib/components/advanced/infoWindow/infoWindow.stories.tsx +7 -7
- package/lib/components/advanced/popUp/README.md +12 -0
- package/lib/components/advanced/popUp/popUp.stories.tsx +6 -6
- package/lib/components/auth/bareSignIn/bareSignIn.stories.tsx +8 -8
- package/lib/components/auth/bareSignUp/bareSignUp.stories.tsx +4 -4
- package/lib/components/chart/areaChart/areaChart.stories.tsx +6 -6
- package/lib/components/chart/barChart/barChart.stories.tsx +6 -6
- package/lib/components/chart/boxPlotChart/boxPlotChart.stories.tsx +4 -4
- package/lib/components/chart/bubbleChart/bubbleChart.stories.tsx +4 -4
- package/lib/components/chart/card/card.stories.tsx +170 -30
- package/lib/components/chart/ganttChart/ganttChart.stories.tsx +7 -7
- package/lib/components/chart/heatmapChart/heatmapChart.stories.tsx +8 -8
- package/lib/components/chart/lineChart/lineChart.stories.tsx +5 -5
- package/lib/components/chart/pieChart/pieChart.stories.tsx +8 -8
- package/lib/components/chart/polarAreaChart/polarAreaChart.stories.tsx +4 -4
- package/lib/components/chart/radarChart/radarChart.stories.tsx +3 -3
- package/lib/components/chart/rangeBarChart/rangeBarChart.stories.tsx +5 -5
- package/lib/components/chart/statsCard/README.md +24 -0
- package/lib/components/chart/statsCard/statsCard.stories.tsx +77 -9
- package/lib/components/chart/treemapChart/treemapChart.stories.tsx +4 -4
- package/lib/components/chat/chatAnchor/README.md +7 -0
- package/lib/components/chat/chatAnchor/chatAnchor.stories.tsx +3 -3
- package/lib/components/chat/chatBase/chatBase.stories.tsx +16 -16
- package/lib/components/chat/chatDashboard/chatDashboard.stories.tsx +5 -5
- package/lib/components/data/dataGraph/dataGraph.stories.tsx +10 -10
- package/lib/components/data/dataReference/dataReference.stories.tsx +6 -6
- package/lib/components/data/dataTemplate/README.md +402 -85
- package/lib/components/data/dataTemplate/dataTemplate.stories.tsx +308 -304
- package/lib/components/data/dataWrapper/README.md +310 -101
- package/lib/components/data/dataWrapper/dataWrapper.bareHooks.stories.tsx +951 -0
- package/lib/components/data/dataWrapper/dataWrapper.edit.stories.tsx +758 -0
- package/lib/components/data/dataWrapper/dataWrapper.view.stories.tsx +1347 -0
- package/lib/components/data/queryForm/queryForm.stories.tsx +3 -3
- package/lib/components/data/readQuery/readQuery.stories.tsx +3 -3
- package/lib/components/data/readQueryHoc/readQueryHoc.stories.tsx +3 -3
- package/lib/components/data/writeQuery/README.md +21 -10
- package/lib/components/data/writeQuery/writeQuery.stories.tsx +3 -3
- package/lib/components/design/actionSection/actionSection.stories.tsx +5 -5
- package/lib/components/design/banner/banner.stories.tsx +3 -3
- package/lib/components/design/bannerAction/bannerAction.stories.tsx +98 -13
- package/lib/components/design/blogSection/blogSection.stories.tsx +3 -3
- package/lib/components/design/carouselSection/carouselSection.stories.tsx +3 -3
- package/lib/components/design/designList/designList.stories.tsx +3 -3
- package/lib/components/design/faq/faq.stories.tsx +51 -23
- package/lib/components/design/fileGrid/fileGrid.stories.tsx +7 -7
- package/lib/components/design/fileViewer/fileViewer.stories.tsx +3 -3
- package/lib/components/design/footerSection/footerSection.stories.tsx +3 -3
- package/lib/components/design/googleReview/googleReview.stories.tsx +3 -3
- package/lib/components/design/heroSection/heroSection.stories.tsx +7 -7
- package/lib/components/design/iconList/iconList.stories.tsx +3 -3
- package/lib/components/design/imageGallery/imageGallery.stories.tsx +3 -3
- package/lib/components/design/imageZoom/imageZoom.stories.tsx +3 -3
- package/lib/components/design/leftContent/leftContent.stories.tsx +3 -3
- package/lib/components/design/logoCloud/logoCloud.stories.tsx +3 -3
- package/lib/components/design/onboarding/onboarding.stories.tsx +5 -5
- package/lib/components/design/pricing/pricing.stories.tsx +3 -3
- package/lib/components/design/rightContent/rightContent.stories.tsx +3 -3
- package/lib/components/design/sectionList/sectionList.stories.tsx +3 -3
- package/lib/components/design/teams/teams.stories.tsx +3 -3
- package/lib/components/display/alert/alert.stories.tsx +5 -5
- package/lib/components/display/calendar/calendar.stories.tsx +10 -10
- package/lib/components/display/clipboard/clipboard.stories.tsx +3 -3
- package/lib/components/display/detailList/README.md +11 -10
- package/lib/components/display/detailList/detailList.stories.tsx +182 -40
- package/lib/components/display/drawer/README.md +44 -11
- package/lib/components/display/drawer/drawer.stories.tsx +69 -9
- package/lib/components/display/emptyState/emptyState.stories.tsx +45 -7
- package/lib/components/display/feeds/README.md +3 -3
- package/lib/components/display/feeds/feeds.stories.tsx +6 -6
- package/lib/components/display/filePreview/filePreview.stories.tsx +111 -0
- package/lib/components/display/flexTable/flexTable.stories.tsx +210 -15
- package/lib/components/display/grid/README.md +4 -6
- package/lib/components/display/grid/grid.stories.tsx +13 -14
- package/lib/components/display/kanban/kanban.stories.tsx +4 -4
- package/lib/components/display/list/list.stories.tsx +8 -8
- package/lib/components/display/loading/loading.stories.tsx +3 -3
- package/lib/components/display/mapView/mapView.stories.tsx +6 -6
- package/lib/components/display/modal/README.md +3 -0
- package/lib/components/display/modal/modal.stories.tsx +53 -4
- package/lib/components/display/newCalendar/README.md +163 -0
- package/lib/components/display/newCalendar/newCalendar.stories.tsx +292 -0
- package/lib/components/display/newFeeds/README.md +53 -0
- package/lib/components/display/newFeeds/newFeeds.stories.tsx +104 -0
- package/lib/components/display/newKanban/README.md +25 -0
- package/lib/components/display/newKanban/newKanban.stories.tsx +131 -0
- package/lib/components/display/newList/README.md +30 -0
- package/lib/components/display/newList/newList.stories.tsx +231 -0
- package/lib/components/display/newPagination/README.md +15 -0
- package/lib/components/display/newTable/README.md +121 -0
- package/lib/components/display/newTable/newTable.stories.tsx +576 -0
- package/lib/components/display/notification/notification.stories.tsx +3 -3
- package/lib/components/display/progress/progress.stories.tsx +3 -3
- package/lib/components/display/stepper/README.md +4 -0
- package/lib/components/display/stepper/stepper.stories.tsx +67 -15
- package/lib/components/display/table/table.stories.tsx +28 -24
- package/lib/components/display/tag/tag.stories.tsx +31 -31
- package/lib/components/input/address/address.stories.tsx +9 -9
- package/lib/components/input/canvas/canvas.stories.tsx +9 -9
- package/lib/components/input/checkbox/checkbox.stories.tsx +4 -4
- package/lib/components/input/datePicker/datePicker.stories.tsx +38 -2
- package/lib/components/input/form/form.stories.tsx +8 -8
- package/lib/components/input/markdown/README.md +80 -2
- package/lib/components/input/markdown/markdown.stories.tsx +83 -25
- package/lib/components/input/monthYearPicker/monthYearPicker.stories.tsx +50 -16
- package/lib/components/input/netPromoterScore/netPromoterScore.stories.tsx +3 -3
- package/lib/components/input/rating/rating.stories.tsx +3 -3
- package/lib/components/input/select/README.md +2 -1
- package/lib/components/input/select/select.stories.tsx +30 -30
- package/lib/components/input/signature/signature.stories.tsx +9 -9
- package/lib/components/input/textArea/textArea.stories.tsx +3 -3
- package/lib/components/input/textInput/textinput.stories.tsx +11 -11
- package/lib/components/input/uploadInput/uploadInput.stories.tsx +14 -14
- package/lib/components/navigation/bars/README.md +27 -0
- package/lib/components/navigation/bars/bars.stories.tsx +54 -11
- package/lib/components/navigation/bottomTab/bottomTab.stories.tsx +3 -3
- package/lib/components/navigation/breadcrumb/breadcrumb.stories.tsx +5 -5
- package/lib/components/navigation/header/header.stories.tsx +11 -11
- package/lib/components/navigation/leftNav/leftNav.stories.tsx +182 -7
- package/lib/components/navigation/tabs/tabs.stories.tsx +30 -7
- package/lib/components/structure/column/column.stories.tsx +6 -6
- package/lib/components/structure/container/container.stories.tsx +4 -4
- package/lib/components/structure/link/link.stories.tsx +8 -8
- package/lib/components/structure/text/text.stories.tsx +8 -8
- package/lib/components/template/calendarView/calendarView.stories.tsx +726 -0
- package/lib/components/template/chatDashboard/chatDashboard.stories.tsx +497 -0
- package/lib/components/template/landingPage/landingPage.stories.tsx +2 -1
- package/lib/components/template/mapLayout/mapLayout.stories.tsx +519 -0
- package/lib/components/template/userHomePage/userHomePage.stories.tsx +380 -521
- package/lib/components/template/userRankingDashboard/userRankingDashboard.stories.tsx +142 -66
- package/lib/mcp/tools/componentsRoot.d.ts +2 -0
- package/lib/mcp/tools/componentsRoot.d.ts.map +1 -0
- package/lib/mcp/tools/componentsRoot.js +59 -0
- package/lib/mcp/tools/componentsRoot.js.map +1 -0
- package/lib/mcp/tools/getBackendComponent.d.ts.map +1 -1
- package/lib/mcp/tools/getBackendComponent.js +9 -8
- package/lib/mcp/tools/getBackendComponent.js.map +1 -1
- package/lib/mcp/tools/getComponent.d.ts.map +1 -1
- package/lib/mcp/tools/getComponent.js +2 -5
- package/lib/mcp/tools/getComponent.js.map +1 -1
- package/lib/mcp/tools/listComponents.d.ts.map +1 -1
- package/lib/mcp/tools/listComponents.js +15 -10
- package/lib/mcp/tools/listComponents.js.map +1 -1
- package/lib/mcp/tools/suggestTemplate.d.ts.map +1 -1
- package/lib/mcp/tools/suggestTemplate.js +107 -21
- package/lib/mcp/tools/suggestTemplate.js.map +1 -1
- package/package.json +1 -1
- package/lib/components/data/dataTemplate/dataModule.stories.tsx +0 -190
- package/lib/components/data/dataWrapper/dataWrapper.stories.tsx +0 -600
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
import {
|
|
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
|
|
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
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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-
|
|
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="p-2"</code> (tighter) or{" "}
|
|
206
|
+
<code>contentClassName="p-8"</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
|
-
<
|
|
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-
|
|
141
|
-
notCollapseContainerCss="bg-primary-
|
|
142
|
-
titleClassName="text-white text-
|
|
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 → 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
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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
|
-
<
|
|
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"]}
|