blixify-ui-web-mcp 0.1.1

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 (245) hide show
  1. package/README.md +5 -0
  2. package/lib/components/action/button/README.md +75 -0
  3. package/lib/components/action/button/button.stories.tsx +138 -0
  4. package/lib/components/action/buttonGroup/README.md +79 -0
  5. package/lib/components/action/buttonGroup/buttonGroup.stories.tsx +104 -0
  6. package/lib/components/action/iconButton/README.md +39 -0
  7. package/lib/components/action/iconButton/iconButton.stories.tsx +22 -0
  8. package/lib/components/action/radioList/README.md +98 -0
  9. package/lib/components/action/radioList/radioList.stories.tsx +181 -0
  10. package/lib/components/action/slider/README.md +86 -0
  11. package/lib/components/action/slider/slider.stories.tsx +133 -0
  12. package/lib/components/action/textButton/README.md +34 -0
  13. package/lib/components/action/textButton/textButton.stories.tsx +16 -0
  14. package/lib/components/action/toggle/README.md +39 -0
  15. package/lib/components/action/toggle/toggle.stories.tsx +23 -0
  16. package/lib/components/advanced/collapse/README.md +106 -0
  17. package/lib/components/advanced/collapse/collapse.stories.tsx +165 -0
  18. package/lib/components/advanced/infoWindow/README.md +69 -0
  19. package/lib/components/advanced/infoWindow/infoWindow.stories.tsx +112 -0
  20. package/lib/components/advanced/popUp/README.md +95 -0
  21. package/lib/components/advanced/popUp/popUp.stories.tsx +189 -0
  22. package/lib/components/auth/bareSignIn/README.md +78 -0
  23. package/lib/components/auth/bareSignIn/bareSignIn.stories.tsx +141 -0
  24. package/lib/components/auth/bareSignUp/README.md +130 -0
  25. package/lib/components/auth/bareSignUp/bareSignUp.stories.tsx +159 -0
  26. package/lib/components/auth/signIn/README.md +53 -0
  27. package/lib/components/auth/signIn/signIn.stories.tsx +120 -0
  28. package/lib/components/auth/signUp/README.md +136 -0
  29. package/lib/components/auth/signUp/signUp.stories.tsx +193 -0
  30. package/lib/components/chart/README.md +13 -0
  31. package/lib/components/chart/areaChart/README.md +133 -0
  32. package/lib/components/chart/areaChart/areaChart.stories.tsx +199 -0
  33. package/lib/components/chart/barChart/README.md +193 -0
  34. package/lib/components/chart/barChart/barChart.stories.tsx +318 -0
  35. package/lib/components/chart/boxPlotChart/README.md +124 -0
  36. package/lib/components/chart/boxPlotChart/boxPlotChart.stories.tsx +104 -0
  37. package/lib/components/chart/bubbleChart/README.md +166 -0
  38. package/lib/components/chart/bubbleChart/bubbleChart.stories.tsx +144 -0
  39. package/lib/components/chart/card/README.md +107 -0
  40. package/lib/components/chart/card/card.stories.tsx +89 -0
  41. package/lib/components/chart/ganttChart/README.md +142 -0
  42. package/lib/components/chart/ganttChart/ganttChart.stories.tsx +138 -0
  43. package/lib/components/chart/heatmapChart/README.md +125 -0
  44. package/lib/components/chart/heatmapChart/heatmapChart.stories.tsx +106 -0
  45. package/lib/components/chart/lineChart/README.md +140 -0
  46. package/lib/components/chart/lineChart/lineChart.stories.tsx +152 -0
  47. package/lib/components/chart/pieChart/README.md +117 -0
  48. package/lib/components/chart/pieChart/pieChart.stories.tsx +180 -0
  49. package/lib/components/chart/polarAreaChart/README.md +126 -0
  50. package/lib/components/chart/polarAreaChart/polarAreaChart.stories.tsx +106 -0
  51. package/lib/components/chart/radarChart/README.md +57 -0
  52. package/lib/components/chart/radarChart/radarChart.stories.tsx +36 -0
  53. package/lib/components/chart/radialBar/README.md +152 -0
  54. package/lib/components/chart/radialBar/radialChart.stories.tsx +136 -0
  55. package/lib/components/chart/rangeBarChart/README.md +323 -0
  56. package/lib/components/chart/rangeBarChart/rangeBarChart.stories.tsx +208 -0
  57. package/lib/components/chart/statsCard/README.md +97 -0
  58. package/lib/components/chart/statsCard/statsCard.stories.tsx +183 -0
  59. package/lib/components/chart/treemapChart/README.md +142 -0
  60. package/lib/components/chart/treemapChart/treemapChart.stories.tsx +122 -0
  61. package/lib/components/chat/chatAnchor/README.md +113 -0
  62. package/lib/components/chat/chatAnchor/chatAnchor.stories.tsx +156 -0
  63. package/lib/components/chat/chatBase/README.md +223 -0
  64. package/lib/components/chat/chatBase/chatBase.stories.tsx +306 -0
  65. package/lib/components/chat/chatDashboard/README.md +161 -0
  66. package/lib/components/chat/chatDashboard/chatDashboard.stories.tsx +154 -0
  67. package/lib/components/data/dataGraph/README.md +13 -0
  68. package/lib/components/data/dataGraph/dataGraph.stories.tsx +84 -0
  69. package/lib/components/data/dataReference/README.md +62 -0
  70. package/lib/components/data/dataReference/dataReference.stories.tsx +53 -0
  71. package/lib/components/data/dataTemplate/README.md +903 -0
  72. package/lib/components/data/dataTemplate/dataModule.stories.tsx +196 -0
  73. package/lib/components/data/dataTemplate/dataTemplate.stories.tsx +337 -0
  74. package/lib/components/data/dataWrapper/README.md +1077 -0
  75. package/lib/components/data/dataWrapper/dataWrapper.stories.tsx +831 -0
  76. package/lib/components/data/queryForm/README.md +56 -0
  77. package/lib/components/data/queryForm/queryForm.stories.tsx +85 -0
  78. package/lib/components/data/readQuery/README.md +282 -0
  79. package/lib/components/data/readQuery/readQuery.stories.tsx +256 -0
  80. package/lib/components/data/readQueryHoc/README.md +89 -0
  81. package/lib/components/data/readQueryHoc/readQueryHoc.stories.tsx +33 -0
  82. package/lib/components/data/writeQuery/README.md +178 -0
  83. package/lib/components/data/writeQuery/writeQuery.stories.tsx +209 -0
  84. package/lib/components/design/actionSection/README.md +47 -0
  85. package/lib/components/design/actionSection/actionSection.stories.tsx +74 -0
  86. package/lib/components/design/banner/README.md +43 -0
  87. package/lib/components/design/banner/banner.stories.tsx +34 -0
  88. package/lib/components/design/bannerAction/README.md +44 -0
  89. package/lib/components/design/bannerAction/bannerAction.stories.tsx +25 -0
  90. package/lib/components/design/blogSection/README.md +111 -0
  91. package/lib/components/design/blogSection/blogSection.stories.tsx +72 -0
  92. package/lib/components/design/carouselSection/README.md +82 -0
  93. package/lib/components/design/carouselSection/carouselSection.stories.tsx +52 -0
  94. package/lib/components/design/designList/README.md +60 -0
  95. package/lib/components/design/designList/designList.stories.tsx +44 -0
  96. package/lib/components/design/faq/README.md +121 -0
  97. package/lib/components/design/faq/faq.stories.tsx +103 -0
  98. package/lib/components/design/fileGrid/README.md +87 -0
  99. package/lib/components/design/fileGrid/fileGrid.stories.tsx +110 -0
  100. package/lib/components/design/fileViewer/README.md +40 -0
  101. package/lib/components/design/fileViewer/fileViewer.stories.tsx +28 -0
  102. package/lib/components/design/footerSection/README.md +62 -0
  103. package/lib/components/design/footerSection/footerSection.stories.tsx +84 -0
  104. package/lib/components/design/googleReview/README.md +45 -0
  105. package/lib/components/design/googleReview/googleReview.stories.tsx +33 -0
  106. package/lib/components/design/heroSection/README.md +48 -0
  107. package/lib/components/design/heroSection/heroSection.stories.tsx +85 -0
  108. package/lib/components/design/iconList/README.md +60 -0
  109. package/lib/components/design/iconList/iconList.stories.tsx +41 -0
  110. package/lib/components/design/imageGallery/README.md +56 -0
  111. package/lib/components/design/imageGallery/imageGallery.stories.tsx +45 -0
  112. package/lib/components/design/imageZoom/README.md +47 -0
  113. package/lib/components/design/imageZoom/imageZoom.stories.tsx +30 -0
  114. package/lib/components/design/leftContent/README.md +47 -0
  115. package/lib/components/design/leftContent/leftContent.stories.tsx +32 -0
  116. package/lib/components/design/logoCloud/README.md +42 -0
  117. package/lib/components/design/logoCloud/logoCloud.stories.tsx +44 -0
  118. package/lib/components/design/onboarding/README.md +100 -0
  119. package/lib/components/design/onboarding/onboarding.stories.tsx +113 -0
  120. package/lib/components/design/pricing/README.md +112 -0
  121. package/lib/components/design/pricing/pricing.stories.tsx +86 -0
  122. package/lib/components/design/rightContent/README.md +47 -0
  123. package/lib/components/design/rightContent/rightContent.stories.tsx +32 -0
  124. package/lib/components/design/sectionList/README.md +51 -0
  125. package/lib/components/design/sectionList/sectionList.stories.tsx +35 -0
  126. package/lib/components/design/teams/README.md +62 -0
  127. package/lib/components/design/teams/teams.stories.tsx +61 -0
  128. package/lib/components/display/alert/README.md +82 -0
  129. package/lib/components/display/alert/alert.stories.tsx +71 -0
  130. package/lib/components/display/calendar/README.md +113 -0
  131. package/lib/components/display/calendar/calendar.stories.tsx +159 -0
  132. package/lib/components/display/clipboard/README.md +36 -0
  133. package/lib/components/display/clipboard/clipboard.stories.tsx +32 -0
  134. package/lib/components/display/detailList/README.md +61 -0
  135. package/lib/components/display/detailList/detailList.stories.tsx +131 -0
  136. package/lib/components/display/drawer/README.md +74 -0
  137. package/lib/components/display/drawer/drawer.stories.tsx +66 -0
  138. package/lib/components/display/emptyState/README.md +38 -0
  139. package/lib/components/display/emptyState/emptyState.stories.tsx +22 -0
  140. package/lib/components/display/feeds/README.md +80 -0
  141. package/lib/components/display/feeds/feeds.stories.tsx +75 -0
  142. package/lib/components/display/flexTable/README.md +160 -0
  143. package/lib/components/display/flexTable/flexTable.stories.tsx +313 -0
  144. package/lib/components/display/grid/README.md +121 -0
  145. package/lib/components/display/grid/grid.stories.tsx +234 -0
  146. package/lib/components/display/kanban/README.md +78 -0
  147. package/lib/components/display/kanban/kanban.stories.tsx +133 -0
  148. package/lib/components/display/list/README.md +109 -0
  149. package/lib/components/display/list/list.stories.tsx +188 -0
  150. package/lib/components/display/loading/README.md +25 -0
  151. package/lib/components/display/loading/loading.stories.tsx +15 -0
  152. package/lib/components/display/mapView/README.md +99 -0
  153. package/lib/components/display/mapView/mapView.stories.tsx +225 -0
  154. package/lib/components/display/modal/README.md +43 -0
  155. package/lib/components/display/modal/modal.stories.tsx +81 -0
  156. package/lib/components/display/notification/README.md +43 -0
  157. package/lib/components/display/notification/notification.stories.tsx +30 -0
  158. package/lib/components/display/progress/README.md +25 -0
  159. package/lib/components/display/progress/progress.stories.tsx +15 -0
  160. package/lib/components/display/stepper/README.md +96 -0
  161. package/lib/components/display/stepper/stepper.stories.tsx +175 -0
  162. package/lib/components/display/table/README.md +176 -0
  163. package/lib/components/display/table/table.stories.tsx +330 -0
  164. package/lib/components/display/tag/README.md +74 -0
  165. package/lib/components/display/tag/tag.stories.tsx +79 -0
  166. package/lib/components/input/address/README.md +132 -0
  167. package/lib/components/input/address/address.stories.tsx +147 -0
  168. package/lib/components/input/canvas/README.md +131 -0
  169. package/lib/components/input/canvas/canvas.stories.tsx +165 -0
  170. package/lib/components/input/checkbox/README.md +61 -0
  171. package/lib/components/input/checkbox/checkbox.stories.tsx +30 -0
  172. package/lib/components/input/datePicker/README.md +124 -0
  173. package/lib/components/input/datePicker/datePicker.stories.tsx +197 -0
  174. package/lib/components/input/form/README.md +55 -0
  175. package/lib/components/input/form/form.stories.tsx +143 -0
  176. package/lib/components/input/markdown/README.md +146 -0
  177. package/lib/components/input/markdown/markdown.stories.tsx +40 -0
  178. package/lib/components/input/monthYearPicker/README.md +69 -0
  179. package/lib/components/input/monthYearPicker/monthYearPicker.stories.tsx +47 -0
  180. package/lib/components/input/netPromoterScore/README.md +52 -0
  181. package/lib/components/input/netPromoterScore/netPromoterScore.stories.tsx +30 -0
  182. package/lib/components/input/rating/README.md +51 -0
  183. package/lib/components/input/rating/rating.stories.tsx +30 -0
  184. package/lib/components/input/select/README.md +108 -0
  185. package/lib/components/input/select/select.stories.tsx +286 -0
  186. package/lib/components/input/signature/README.md +106 -0
  187. package/lib/components/input/signature/signature.stories.tsx +188 -0
  188. package/lib/components/input/textArea/README.md +55 -0
  189. package/lib/components/input/textArea/textArea.stories.tsx +30 -0
  190. package/lib/components/input/textInput/README.md +81 -0
  191. package/lib/components/input/textInput/textinput.stories.tsx +231 -0
  192. package/lib/components/input/uploadInput/README.md +134 -0
  193. package/lib/components/input/uploadInput/uploadInput.stories.tsx +193 -0
  194. package/lib/components/navigation/bars/README.md +40 -0
  195. package/lib/components/navigation/bars/bars.stories.tsx +85 -0
  196. package/lib/components/navigation/bottomTab/README.md +53 -0
  197. package/lib/components/navigation/bottomTab/bottomTab.stories.tsx +32 -0
  198. package/lib/components/navigation/breadcrumb/README.md +48 -0
  199. package/lib/components/navigation/breadcrumb/breadcrumb.stories.tsx +27 -0
  200. package/lib/components/navigation/header/README.md +149 -0
  201. package/lib/components/navigation/header/header.stories.tsx +107 -0
  202. package/lib/components/navigation/leftNav/README.md +91 -0
  203. package/lib/components/navigation/leftNav/leftNav.stories.tsx +106 -0
  204. package/lib/components/navigation/tabs/README.md +75 -0
  205. package/lib/components/navigation/tabs/tabs.stories.tsx +60 -0
  206. package/lib/components/structure/column/README.md +40 -0
  207. package/lib/components/structure/column/column.stories.tsx +26 -0
  208. package/lib/components/structure/container/README.md +34 -0
  209. package/lib/components/structure/container/container.stories.tsx +19 -0
  210. package/lib/components/structure/link/README.md +55 -0
  211. package/lib/components/structure/link/link.stories.tsx +30 -0
  212. package/lib/components/structure/text/README.md +42 -0
  213. package/lib/components/structure/text/text.stories.tsx +39 -0
  214. package/lib/components/template/authPage/authPage.stories.tsx +68 -0
  215. package/lib/components/template/landingPage/landingPage.stories.tsx +288 -0
  216. package/lib/components/template/productListing/productListing.stories.tsx +297 -0
  217. package/lib/components/template/productOverview/productOverview.stories.tsx +194 -0
  218. package/lib/components/template/shoppingCart/shoppingCart.stories.tsx +252 -0
  219. package/lib/components/template/userHomePage/userHomePage.stories.tsx +605 -0
  220. package/lib/components/template/userRankingDashboard/userRankingDashboard.stories.tsx +481 -0
  221. package/lib/mcp/server.d.ts +2 -0
  222. package/lib/mcp/server.d.ts.map +1 -0
  223. package/lib/mcp/server.js +33 -0
  224. package/lib/mcp/server.js.map +1 -0
  225. package/lib/mcp/tools/getBackendComponent.d.ts +13 -0
  226. package/lib/mcp/tools/getBackendComponent.d.ts.map +1 -0
  227. package/lib/mcp/tools/getBackendComponent.js +119 -0
  228. package/lib/mcp/tools/getBackendComponent.js.map +1 -0
  229. package/lib/mcp/tools/getComponent.d.ts +17 -0
  230. package/lib/mcp/tools/getComponent.d.ts.map +1 -0
  231. package/lib/mcp/tools/getComponent.js +118 -0
  232. package/lib/mcp/tools/getComponent.js.map +1 -0
  233. package/lib/mcp/tools/listComponents.d.ts +13 -0
  234. package/lib/mcp/tools/listComponents.d.ts.map +1 -0
  235. package/lib/mcp/tools/listComponents.js +113 -0
  236. package/lib/mcp/tools/listComponents.js.map +1 -0
  237. package/lib/mcp/tools/listTemplates.d.ts +13 -0
  238. package/lib/mcp/tools/listTemplates.d.ts.map +1 -0
  239. package/lib/mcp/tools/listTemplates.js +68 -0
  240. package/lib/mcp/tools/listTemplates.js.map +1 -0
  241. package/lib/mcp/tools/suggestTemplate.d.ts +17 -0
  242. package/lib/mcp/tools/suggestTemplate.d.ts.map +1 -0
  243. package/lib/mcp/tools/suggestTemplate.js +212 -0
  244. package/lib/mcp/tools/suggestTemplate.js.map +1 -0
  245. package/package.json +23 -0
@@ -0,0 +1,74 @@
1
+ # Drawer
2
+
3
+ <!-- STORY -->
4
+
5
+ <hr>
6
+
7
+ Drawer Component
8
+
9
+ ##### Import
10
+
11
+ ```js
12
+ import { Drawer } from "blixify-ui-web/components/display/drawer";
13
+ ```
14
+
15
+ ##### Usage
16
+
17
+ ```jsx
18
+ return (
19
+ <div className="flex gap-x-3">
20
+ <Drawer
21
+ cta={
22
+ <div className="w-full flex justify-center">
23
+ <Button text="Bottom Drawer" type="normal" />
24
+ </div>
25
+ }
26
+ content={
27
+ <div className="grid grid-cols-2 gap-4">
28
+ {Array.from({ length: 8 }).map((_, i) => (
29
+ <div key={i} className="h-48 w-full bg-gray-100 rounded-lg" />
30
+ ))}
31
+ </div>
32
+ }
33
+ maxHeight="50"
34
+ anchor="bottom"
35
+ title="This is drawer title"
36
+ desc="This is drawer description. Lorem ipsum dolor sit amet, consectetur adipiscing elit. "
37
+ />
38
+ <Drawer
39
+ cta={
40
+ <div className="w-full flex justify-center">
41
+ <Button text="Right Drawer" type="normal" />
42
+ </div>
43
+ }
44
+ content={
45
+ <div className="grid grid-cols-2 gap-4">
46
+ {Array.from({ length: 8 }).map((_, i) => (
47
+ <div key={i} className="h-48 w-full bg-gray-100 rounded-lg" />
48
+ ))}
49
+ </div>
50
+ }
51
+ maxWidth="3xl"
52
+ title="This is drawer title"
53
+ desc="This is drawer description. Lorem ipsum dolor sit amet, consectetur adipiscing elit. "
54
+ />
55
+ </div>
56
+ );
57
+ ```
58
+
59
+ ##### Required props
60
+
61
+ | Name | Type | Description |
62
+ | --------- | -------------- | -------------------------------------------- |
63
+ | `cta` | `ReactElement` | The element that triggers the drawer to open |
64
+ | `content` | `ReactElement` | The content to display inside the drawer |
65
+
66
+ ##### Optional props
67
+
68
+ | Name | Type | Default | Description |
69
+ | ----------- | -------------------------------------------------------------------- | ------- | ------------------------------------------------------------------------------------------------- |
70
+ | `title` | `string` | - | The title displayed at the top of the drawer |
71
+ | `desc` | `string` | - | The description text displayed below the title |
72
+ | `anchor` | `"bottom"` | - | Position of the drawer. If "bottom", drawer slides in from bottom. Otherwise slides in from right |
73
+ | `maxWidth` | `"lg" \| "xl" \| "2xl" \| "3xl" \| "4xl" \| "5xl" \| "6xl" \| "7xl"` | - | Maximum width of the drawer (only applies when anchor is not "bottom") |
74
+ | `maxHeight` | `"50" \| "75" \| "100"` | - | Maximum height of the drawer as viewport height percentage (only applies when anchor is "bottom") |
@@ -0,0 +1,66 @@
1
+ import { storiesOf } from "@storybook/react";
2
+ import { Drawer } from ".";
3
+ import { Button } from "../../action/button";
4
+ import README from "./README.md";
5
+
6
+ const stories = storiesOf("Display", module);
7
+
8
+ stories.addParameters({
9
+ readme: {
10
+ content: README,
11
+ },
12
+ });
13
+
14
+ stories.add("Drawer", () => {
15
+ return (
16
+ <div className="flex flex-col gap-4">
17
+ <div className="flex gap-x-3">
18
+ <Drawer
19
+ cta={
20
+ <div className="w-full flex justify-center">
21
+ <Button text="Bottom Drawer" type="normal" />
22
+ </div>
23
+ }
24
+ content={
25
+ <div className="grid grid-cols-2 gap-4">
26
+ {Array.from({ length: 8 }).map((_, i) => (
27
+ <div key={i} className="h-48 w-full bg-gray-100 rounded-lg" />
28
+ ))}
29
+ </div>
30
+ }
31
+ maxHeight="50"
32
+ anchor="bottom"
33
+ title="This is drawer title"
34
+ desc="This is drawer description. Lorem ipsum dolor sit amet, consectetur adipiscing elit. "
35
+ />
36
+ <Drawer
37
+ cta={
38
+ <div className="w-full flex justify-center">
39
+ <Button text="Right Drawer" type="normal" />
40
+ </div>
41
+ }
42
+ content={
43
+ <div className="grid grid-cols-2 gap-4">
44
+ {Array.from({ length: 8 }).map((_, i) => (
45
+ <div key={i} className="h-48 w-full bg-gray-100 rounded-lg" />
46
+ ))}
47
+ </div>
48
+ }
49
+ maxWidth="3xl"
50
+ title="This is drawer title"
51
+ desc="This is drawer description. Lorem ipsum dolor sit amet, consectetur adipiscing elit. "
52
+ />
53
+ </div>
54
+ <div className="grid grid-cols-1 gap-4">
55
+ {Array.from({ length: 1 }).map((_, i) => (
56
+ <div key={i} className="h-48 w-full bg-gray-100 rounded-lg" />
57
+ ))}
58
+ </div>
59
+ <div className="grid grid-cols-3 gap-4">
60
+ {Array.from({ length: 6 }).map((_, i) => (
61
+ <div key={i} className="h-48 w-full bg-gray-100 rounded-lg" />
62
+ ))}
63
+ </div>
64
+ </div>
65
+ );
66
+ });
@@ -0,0 +1,38 @@
1
+ # Empty State
2
+
3
+ <!-- STORY -->
4
+
5
+ <hr>
6
+
7
+ Empty State when there is no data to display
8
+
9
+ ##### Import
10
+
11
+ ```js
12
+ import { EmptyState } from "blixify-ui-web/components/display/emptyState";
13
+ ```
14
+
15
+ ##### Usage
16
+
17
+ ```jsx
18
+ return (
19
+ <EmptyState
20
+ text="There is no data to display"
21
+ icon={<InformationCircleIcon className="h-10 text-gray-600" />}
22
+ />
23
+ );
24
+ ```
25
+
26
+ ##### Required props
27
+
28
+ | Name | Type | Description |
29
+ | ------ | --------------- | ----------- |
30
+ | `text` | `string` | |
31
+ | `icon` | `React Element` | |
32
+
33
+ ##### Optional props
34
+
35
+ | Name | Type | Default | Description |
36
+ | -------------- | ---------------- | ------- | ----------- |
37
+ | `className` | `tailwind class` | "" | |
38
+ | `callToAction` | `React Element` | "" | |
@@ -0,0 +1,22 @@
1
+ import { InformationCircleIcon } from "@heroicons/react/24/outline";
2
+ import { storiesOf } from "@storybook/react";
3
+ import React from "react";
4
+ import { EmptyState } from ".";
5
+ import README from "./README.md";
6
+
7
+ const stories = storiesOf("Display", module);
8
+
9
+ stories.addParameters({
10
+ readme: {
11
+ content: README,
12
+ },
13
+ });
14
+
15
+ stories.add("Empty State", () => {
16
+ return (
17
+ <EmptyState
18
+ text="There is no data to display"
19
+ icon={<InformationCircleIcon className="h-10 text-gray-600" />}
20
+ />
21
+ );
22
+ });
@@ -0,0 +1,80 @@
1
+ # Feeds
2
+
3
+ <!-- STORY -->
4
+
5
+ <hr>
6
+
7
+ Feeds to display timeline content
8
+
9
+ ##### Import
10
+
11
+ ```js
12
+ import { Feeds } from "blixify-ui-web/components/display/feeds";
13
+ ```
14
+
15
+ ##### Usage
16
+
17
+ ```jsx
18
+ const feeds: Feed[] = [
19
+ {
20
+ iconClass: "bg-gray-400",
21
+ iconType: <UserIcon className="h-5 w-5 text-white" />,
22
+ content: "Sign up a Free Account",
23
+ step: "Step 1",
24
+ addContent: (
25
+ <p className="mt-2 text-sm text-gray-500">
26
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
27
+ tempor incididunt ut labore et dolore magna aliqua.
28
+ </p>
29
+ ),
30
+ },
31
+ {
32
+ iconClass: "bg-blue-500",
33
+ iconType: <HandThumbUpIcon className="h-5 w-5 text-white" />,
34
+ content: "Notify Arus Oil logistic team once you are ready to sell",
35
+ step: "Step 2",
36
+ addContent: (
37
+ <img
38
+ className="mt-4 w-36 sm:w-56 h-auto"
39
+ src="https://arusoil.com/static/oil_collection_drum-ddf6f26e6fbb1bc058bffb0faa722f51.webp"
40
+ alt=""
41
+ />
42
+ ),
43
+ },
44
+ {
45
+ iconClass: "bg-green-500",
46
+ iconType: <CheckIcon className="h-5 w-5 text-white" />,
47
+ content: "View payment made to you on Arus Oil App",
48
+ step: "Step 3",
49
+ },
50
+ ];
51
+
52
+ return <Feeds content={feeds} />;
53
+ ```
54
+
55
+ ##### Required props
56
+
57
+ | Name | Type | Description |
58
+ | --------- | ------------ | ----------- |
59
+ | `content` | `Feed Class` | Class |
60
+
61
+ ##### Optional props
62
+
63
+ | Name | Type | Default | Description |
64
+ | ------------------ | ------------------------- | ------- | ---------------------------------------------------------------- |
65
+ | `bold` | `boolean` | null | |
66
+ | `darkMode` | `boolean` | null | |
67
+ | `collapsible` | `boolean` | null | Enables collapsible functionality for feed items with addContent |
68
+ | `collapsedIds` | `string[]` | null | Array of feed item IDs that are currently collapsed |
69
+ | `onChangeCollapse` | `(ids: string[]) => void` | null | Callback function called when collapse state changes |
70
+
71
+ ##### Feed class
72
+
73
+ | Name | Type | Required | Description |
74
+ | ------------ | ---------------- | -------- | -------------------------------------------------------------- |
75
+ | `iconType` | `React Element` | Yes | |
76
+ | `iconClass` | `tailwind class` | Yes | |
77
+ | `content` | `string` | Yes | |
78
+ | `step` | `string` | Yes | |
79
+ | `addContent` | `React Element` | No | |
80
+ | `id` | `string` | No | Unique identifier for the feed item (required for collapsible) |
@@ -0,0 +1,75 @@
1
+ import {
2
+ CheckIcon,
3
+ HandThumbUpIcon,
4
+ UserIcon,
5
+ } from "@heroicons/react/24/outline";
6
+ import { storiesOf } from "@storybook/react";
7
+ import React, { useState } from "react";
8
+ import { Feed, Feeds } from ".";
9
+ import README from "./README.md";
10
+
11
+ const stories = storiesOf("Display", module);
12
+
13
+ stories.addParameters({
14
+ readme: {
15
+ content: README,
16
+ },
17
+ });
18
+
19
+ stories.add("Feeds", () => {
20
+ const [collapsedIds, setCollapsedIds] = useState<string[]>(["1"]);
21
+
22
+ const feeds: Feed[] = [
23
+ {
24
+ id: "1",
25
+ iconClass: "bg-gray-400",
26
+ iconType: <UserIcon className="h-5 w-5 text-white" />,
27
+ content: "Sign up a Free Account",
28
+ step: "2025-12-01",
29
+ addContent: (
30
+ <p className="mt-2 text-sm text-gray-500">
31
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
32
+ eiusmod tempor incididunt ut labore et dolore magna aliqua. Nisl
33
+ tincidunt eget nullam non nisi est sit amet facilisis. Ut porttitor
34
+ leo a diam. Sem viverra aliquet eget sit. Eu facilisis sed odio morbi
35
+ quis commodo odio aenean sed. Id porta nibh venenatis cras sed felis
36
+ eget velit aliquet. Faucibus a pellentesque sit amet porttitor. Tortor
37
+ vitae purus faucibus ornare suspendisse sed nisi lacus sed. Platea
38
+ dictumst quisque sagittis purus sit amet. At consectetur lorem donec
39
+ massa sapien faucibus et molestie ac.
40
+ </p>
41
+ ),
42
+ },
43
+ {
44
+ id: "2",
45
+ iconClass: "bg-blue-500",
46
+ iconType: <HandThumbUpIcon className="h-5 w-5 text-white" />,
47
+ content: "Notify Arus Oil logistic team once you are ready to sell",
48
+ step: "2025-12-11",
49
+ addContent: (
50
+ <img
51
+ className="mt-4 w-36 sm:w-56 h-auto"
52
+ src="https://arusoil.com/static/oil_collection_drum-ddf6f26e6fbb1bc058bffb0faa722f51.webp"
53
+ alt=""
54
+ />
55
+ ),
56
+ },
57
+ {
58
+ id: "3",
59
+ iconClass: "bg-green-500",
60
+ iconType: <CheckIcon className="h-5 w-5 text-white" />,
61
+ content: "View payment made to you on Arus Oil App",
62
+ step: "2025-12-15",
63
+ },
64
+ ];
65
+
66
+ return (
67
+ <Feeds
68
+ bold={true}
69
+ content={feeds}
70
+ collapsible
71
+ collapsedIds={collapsedIds}
72
+ onChangeCollapse={(ids) => setCollapsedIds(ids)}
73
+ />
74
+ );
75
+ });
@@ -0,0 +1,160 @@
1
+ # FlexTable
2
+
3
+ <!-- STORY -->
4
+
5
+ <hr>
6
+
7
+ A flexible table with category grouping, per-category subtotals, inline editing, computed math columns, and optional validation rules via `flexMathQueries`. Can be used standalone or inside a `Form` for validation.
8
+
9
+ ##### Import
10
+
11
+ ```js
12
+ import {
13
+ FlexTable,
14
+ FlexTableItem,
15
+ FlexTableColumn,
16
+ } from "blixify-ui-web/display/flexTable";
17
+ ```
18
+
19
+ ##### Usage
20
+
21
+ Basic editable table:
22
+
23
+ ```jsx
24
+ const [data, setData] = useState<FlexTableItem[]>([
25
+ { id: "1", title: "Investigator Salary", category: "Personnel", year1: 50000, year2: 52000 },
26
+ { id: "2", title: "Conference Travel", category: "Travel", year1: 5000, year2: 5500 },
27
+ ]);
28
+
29
+ const columns: DataStructure[] = [
30
+ { id: "year1", name: "Year 1", type: "number" },
31
+ { id: "year2", name: "Year 2", type: "number" },
32
+ ];
33
+
34
+ const categoryList = [
35
+ { title: "Personnel", description: "Staff salaries" },
36
+ { title: "Travel", description: "Travel expenses" },
37
+ ];
38
+
39
+ <FlexTable
40
+ label="Research Budget"
41
+ data={data}
42
+ columns={columns}
43
+ categoryList={categoryList}
44
+ showGrandTotal={true}
45
+ onChangeData={setData}
46
+ />
47
+ ```
48
+
49
+ With Form validation and flexMathQueries:
50
+
51
+ ```jsx
52
+ const formRef = useRef(null);
53
+ const tableRef = useRef(null);
54
+
55
+ <Button text="Submit" onClick={() => formRef.current?.handleSubmit()} />
56
+ <Form ref={formRef} refList={[tableRef]}>
57
+ <FlexTable
58
+ ref={tableRef}
59
+ label="Budget"
60
+ data={data}
61
+ columns={columns}
62
+ categoryList={categoryList}
63
+ flexMathQueries={[
64
+ { type: "categoryPercentage", targetCategory: "Travel", maxPercentage: 30 },
65
+ ]}
66
+ onChangeData={setData}
67
+ />
68
+ </Form>
69
+ ```
70
+
71
+ Math and list columns:
72
+
73
+ ```jsx
74
+ const columns: DataStructure[] = [
75
+ { id: "year1", name: "Year 1", type: "number" },
76
+ { id: "mode", name: "Mode", type: "list", listSelection: ["A", "B"] },
77
+ {
78
+ id: "computed",
79
+ name: "Computed",
80
+ type: "math",
81
+ mathExpression: "mode == 'A' ? year1 * 2 : year1 * 3",
82
+ },
83
+ ];
84
+ ```
85
+
86
+ ##### Props
87
+
88
+ | Name | Type | Default | Description |
89
+ | ---------------------- | ------------------------------------------------ | --------------- | ---------------------------------------------------------------------------------------------------------------------- |
90
+ | `data` | `FlexTableItem[]` | `[]` | Row data. Each item must have `id`, `title`, `category`, and any dynamic column keys |
91
+ | `columns` | `DataStructure[]` | — | Column definitions. Supports `type: "number"`, `"text"`, `"textarea"`, `"list"`, `"math"` |
92
+ | `columnList` | `string[]` | — | Legacy: additional predefined column keys to include |
93
+ | `categoryList` | `Array<{ title: string; description?: string }>` | — | Explicit category list with optional descriptions shown in a tooltip. If omitted, categories are derived from the data |
94
+ | `label` | `string` | — | Table heading shown above the table |
95
+ | `labelExtra` | `ReactElement` | — | Extra element rendered next to the label |
96
+ | `infoElement` | `ReactElement` | — | Info element rendered in the table header area |
97
+ | `id` | `string` | — | Used when the component is registered as a form input ref |
98
+ | `disabled` | `boolean` | `false` | Removes all editing controls — no add/remove row, no cell editing, no add column |
99
+ | `showTotal` | `boolean` | `true` | Show a subtotal row at the bottom of each category group |
100
+ | `showGrandTotal` | `boolean` | `false` | Show a grand total row summing all numeric columns across all categories |
101
+ | `hideCategory` | `boolean` | `false` | Hide category grouping and render a flat list of rows |
102
+ | `maxRows` | `number` | — | Maximum rows allowed per category. The add-row button is hidden once the limit is reached |
103
+ | `defaultTitleTemplate` | `string` | — | Default title string pre-filled when a new row is added |
104
+ | `flexMathQueries` | `FlexMathQuery[]` | — | Validation rules evaluated on form submit. See FlexMathQuery below |
105
+ | `darkMode` | `boolean` | `false` | Enable dark mode styling |
106
+ | `darkModeBg` | `string` | `"bg-gray-900"` | Tailwind bg class for the dark mode background |
107
+ | `className` | `string` | — | Additional Tailwind classes for the outer container |
108
+ | `onChangeData` | `(data: FlexTableItem[]) => void` | — | Called whenever a cell value, row add, or row remove changes the data |
109
+ | `onAddColumn` | `(column: FlexTableColumn) => void` | — | Called when the user adds a new column via the add-column modal |
110
+ | `onRemoveColumn` | `(columnKey: string) => void` | — | Called when the user removes a column |
111
+
112
+ ##### FlexTableItem
113
+
114
+ | Property | Type | Description |
115
+ | --------------- | ---------------- | ----------------------------------- |
116
+ | `id` | `string` | Unique row identifier |
117
+ | `title` | `string` | Row label shown in the first column |
118
+ | `category` | `string \| null` | Category this row belongs to |
119
+ | `[key: string]` | `any` | Dynamic values keyed by column `id` |
120
+
121
+ ##### FlexTableColumn
122
+
123
+ | Property | Type | Description |
124
+ | ---------- | ------------------------------------------------------ | -------------------------------------------- |
125
+ | `key` | `string` | Unique column identifier |
126
+ | `title` | `string` | Column header label |
127
+ | `type` | `"text" \| "number" \| "textarea" \| "math" \| "list"` | Input type for the column |
128
+ | `width` | `string` | Tailwind width class, e.g. `"min-w-[200px]"` |
129
+ | `editable` | `boolean` | Whether the column cells can be edited |
130
+
131
+ ##### FlexMathQuery
132
+
133
+ Validation rules passed to `flexMathQueries`. Evaluated when the component is used inside a `Form` and `handleSubmit` is called.
134
+
135
+ | Property | Type | Description |
136
+ | ----------------- | -------------------------------------------- | --------------------------------------------------------------------------------- |
137
+ | `type` | `"categoryPercentage" \| "columnPercentage"` | Validation rule type |
138
+ | `targetCategory` | `string` | (`categoryPercentage` only) The category whose subtotal is checked |
139
+ | `maxPercentage` | `number` | Maximum allowed percentage (0–100) |
140
+ | `targetColumn` | `string` | (`columnPercentage` only) The column whose total is checked |
141
+ | `subtotalColumns` | `string[]` | (`columnPercentage` only) Columns whose totals are summed to form the denominator |
142
+
143
+ > `categoryPercentage`: validates that `sum(targetCategory) / grandTotal <= maxPercentage / 100`
144
+ >
145
+ > `columnPercentage`: validates that `sum(targetColumn) / sum(subtotalColumns) <= maxPercentage / 100`
146
+
147
+ ##### Using with Form
148
+
149
+ `FlexTable` implements the form input ref interface. Pass it as a ref in `refList` to include it in form validation:
150
+
151
+ ```jsx
152
+ const formRef = useRef(null);
153
+ const tableRef = useRef(null);
154
+
155
+ <Form ref={formRef} refList={[tableRef]}>
156
+ <FlexTable ref={tableRef} ... flexMathQueries={[...]} />
157
+ </Form>
158
+ ```
159
+
160
+ Calling `formRef.current.handleSubmit()` will trigger `FlexTable.handleSubmit()`, which runs all `flexMathQueries` and blocks submission if any rule fails.