@adyen/bento-mcp 0.1.4 → 0.2.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 (184) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/README.md +50 -5
  3. package/SKILL.md +138 -0
  4. package/bin/add-skill.js +46 -0
  5. package/dist/assets/components/accordion/accordion.types.ts +1 -0
  6. package/dist/assets/components/action-bar/action-bar.types.ts +1 -0
  7. package/dist/assets/components/ai-tag/ai-tag.types.ts +1 -0
  8. package/dist/assets/components/alert/alert.types.ts +1 -0
  9. package/dist/assets/components/anchor-scroller/anchor-scroller.types.ts +1 -0
  10. package/dist/assets/components/anchor-scroller/components/anchor-scroller-list/anchor-scroller-list.types.ts +1 -0
  11. package/dist/assets/components/avatar/components/avatar-image/avatar-image.types.ts +1 -0
  12. package/dist/assets/components/button/button.types.ts +1 -0
  13. package/dist/assets/components/button/components/ai-button/ai-button.types.ts +1 -0
  14. package/dist/assets/components/button/components/button-actions/button-actions.types.ts +1 -0
  15. package/dist/assets/components/button/components/loading-button/loading-button.types.ts +1 -0
  16. package/dist/assets/components/button/components/toggle-button/toggle.types.ts +1 -0
  17. package/dist/assets/components/card/card.types.ts +1 -0
  18. package/dist/assets/components/checkbox/checkbox.types.ts +1 -0
  19. package/dist/assets/components/checkbox/components/checkbox-group/checkbox-group.types.ts +1 -0
  20. package/dist/assets/components/chip/chip.types.ts +1 -0
  21. package/dist/assets/components/code-snippet/code-snippet.types.ts +1 -0
  22. package/dist/assets/components/country/country.types.ts +1 -0
  23. package/dist/assets/components/currency/currency.types.ts +1 -0
  24. package/dist/assets/components/dashed-underline/dashed-underline.types.ts +1 -0
  25. package/dist/assets/components/data-grid/components/data-grid-cell/data-grid-cell.types.ts +1 -0
  26. package/dist/assets/components/data-grid/components/data-grid-cell-actions/data-grid-cell-actions.types.ts +1 -0
  27. package/dist/assets/components/data-grid/components/data-grid-columns/data-grid-columns.types.ts +1 -0
  28. package/dist/assets/components/data-grid/components/data-grid-config-settings/data-grid-config-settings.types.ts +1 -0
  29. package/dist/assets/components/data-grid/components/data-grid-row/data-grid-row.types.ts +1 -0
  30. package/dist/assets/components/data-grid/components/data-grid-static-icon/data-grid-static-icon.types.ts +1 -0
  31. package/dist/assets/components/data-grid/components/data-grid-summary-cell/data-grid-summary-cell.types.ts +1 -0
  32. package/dist/assets/components/data-grid/components/data-grid-tag-with-text-cell/data-grid-tag-with-text-cell.types.ts +1 -0
  33. package/dist/assets/components/data-grid/components/data-grid-trend-cell/data-grid-trend-cell.types.ts +1 -0
  34. package/dist/assets/components/data-grid/composables/use-calculate-column-width/use-calculate-column-width.types.ts +1 -0
  35. package/dist/assets/components/data-grid/composables/use-column-hovering/use-column-hovering.types.ts +1 -0
  36. package/dist/assets/components/data-grid/composables/use-config-settings/use-config.settings.types.ts +1 -0
  37. package/dist/assets/components/data-grid/composables/use-keyboard-navigator/use-keyboard-navigator.types.ts +1 -0
  38. package/dist/assets/components/data-grid/data-grid.types.ts +1 -0
  39. package/dist/assets/components/date/date.types.ts +1 -0
  40. package/dist/assets/components/date-picker/composables/use-date-picker-single-calendar-text.types.ts +1 -0
  41. package/dist/assets/components/date-picker/date-picker.types.ts +1 -0
  42. package/dist/assets/components/date-range-picker/components/date-range-picker-calendar/date-range-picker-calendar.types.ts +1 -0
  43. package/dist/assets/components/date-range-picker/composables/use-date-range-picker-calendar-text.types.ts +1 -0
  44. package/dist/assets/components/date-range-picker/composables/use-granularity-memory.types.ts +1 -0
  45. package/dist/assets/components/date-range-picker/date-range-picker.types.ts +1 -0
  46. package/dist/assets/components/divider/divider.types.ts +1 -0
  47. package/dist/assets/components/draggable-handle/draggable-handle.types.ts +1 -0
  48. package/dist/assets/components/dropdown/components/dropdown-base-textbox/dropdown-base-textbox.types.ts +1 -0
  49. package/dist/assets/components/dropdown/components/variants/dropdown-avatar/dropdown-avatar.types.ts +1 -0
  50. package/dist/assets/components/dropdown/components/variants/dropdown-country/dropdown-country.types.ts +1 -0
  51. package/dist/assets/components/dropdown/components/variants/dropdown-currency/dropdown-currency.types.ts +1 -0
  52. package/dist/assets/components/dropdown/components/variants/dropdown-payment-method/dropdown-payment-method.types.ts +1 -0
  53. package/dist/assets/components/dropdown/components/variants/dropdown-tag/dropdown-tag.types.ts +1 -0
  54. package/dist/assets/components/dropdown/composables/use-display-value.types.ts +1 -0
  55. package/dist/assets/components/dropdown/composables/use-keyboard-navigation.types.ts +1 -0
  56. package/dist/assets/components/dropdown/dropdown.types.ts +1 -0
  57. package/dist/assets/components/empty-state/empty-state.types.ts +1 -0
  58. package/dist/assets/components/file-uploader/components/file-uploader-file-card/file-uploader-file-card.types.ts +1 -0
  59. package/dist/assets/components/file-uploader/components/file-uploader-restrictions/file-uploader-restrictions.types.ts +1 -0
  60. package/dist/assets/components/file-uploader/composables/use-drag-drop-state/use-drag-drop-state.types.ts +1 -0
  61. package/dist/assets/components/file-uploader/file-uploader.types.ts +1 -0
  62. package/dist/assets/components/filter-bar/components/all-filters-modal/all-filters-modal.types.ts +1 -0
  63. package/dist/assets/components/filter-bar/components/all-filters-modal/all-filters-modal.vue +1 -1
  64. package/dist/assets/components/filter-bar/components/base-filter/base-filter.types.ts +1 -0
  65. package/dist/assets/components/filter-bar/components/checkbox-group-filter/checkbox-group-filter.types.ts +1 -0
  66. package/dist/assets/components/filter-bar/components/filter-bar-button-group/filter-bar-button-group.types.ts +1 -0
  67. package/dist/assets/components/filter-bar/components/input-filter/input-filter.types.ts +1 -0
  68. package/dist/assets/components/filter-bar/components/radio-group-filter/radio-group-filter.types.ts +1 -0
  69. package/dist/assets/components/filter-bar/components/toggle-filter/toggle-filter.types.ts +1 -0
  70. package/dist/assets/components/filter-bar/filter-bar.types.ts +1 -0
  71. package/dist/assets/components/focus-trap/focus-trap.types.ts +1 -0
  72. package/dist/assets/components/form-layout/components/form-layout-field-tip/form-layout-tip.types.ts +1 -0
  73. package/dist/assets/components/form-layout/components/form-layout-group/form-layout-group.types.ts +1 -0
  74. package/dist/assets/components/form-layout/form-layout.types.ts +1 -0
  75. package/dist/assets/components/header/header.types.ts +1 -0
  76. package/dist/assets/components/header-with-views/components/header-with-views-all-views/header-with-views-all-views.types.ts +1 -0
  77. package/dist/assets/components/header-with-views/components/header-with-views-item-edit-form/header-with-views-edit-form.types.ts +1 -0
  78. package/dist/assets/components/header-with-views/header-with-views.types.ts +1 -0
  79. package/dist/assets/components/image/image.types.ts +1 -0
  80. package/dist/assets/components/info-icon/info-icon.types.ts +1 -0
  81. package/dist/assets/components/input-field/input-field.types.ts +1 -0
  82. package/dist/assets/components/input-field-password/input-field-password.types.ts +1 -0
  83. package/dist/assets/components/input-field-phone-number/input-field-phone-number.types.ts +1 -0
  84. package/dist/assets/components/inspector/inspector.types.ts +1 -0
  85. package/dist/assets/components/internal/base-button/base-button.types.ts +1 -0
  86. package/dist/assets/components/internal/button-actions-with-menu/button-actions-with-menu.types.ts +1 -0
  87. package/dist/assets/components/internal/calendar/calendar.types.ts +1 -0
  88. package/dist/assets/components/internal/calendar/components/calendar-month/calendar-month.types.ts +1 -0
  89. package/dist/assets/components/internal/calendar/components/calendar-month/components/calendar-month-day/calendar-month-day.types.ts +1 -0
  90. package/dist/assets/components/internal/calendar/components/calendar-month/composables/granular-min-max-date.types.ts +1 -0
  91. package/dist/assets/components/internal/calendar/components/calendar-year/calendar-year.types.ts +1 -0
  92. package/dist/assets/components/internal/calendar/components/calendar-year/components/calendar-year-month/calendar-year-month.types.ts +1 -0
  93. package/dist/assets/components/internal/calendar/composables/use-granularity-adjustments.types.ts +1 -0
  94. package/dist/assets/components/internal/checkbox-input/checkbox-input.types.ts +1 -0
  95. package/dist/assets/components/internal/copy/copy.types.ts +1 -0
  96. package/dist/assets/components/internal/dialog-page/dialog-page.types.ts +1 -0
  97. package/dist/assets/components/internal/grid-layout/grid-layout.types.ts +1 -0
  98. package/dist/assets/components/internal/header-meta/header-meta.types.ts +1 -0
  99. package/dist/assets/components/internal/listbox/components/listbox-multi-select/components/listbox-multi-select-options/components/listbox-multi-select-category/listbox-multi-select-category.types.ts +1 -0
  100. package/dist/assets/components/internal/listbox/components/listbox-multi-select/components/listbox-multi-select-options/listbox-multi-select-options.types.ts +1 -0
  101. package/dist/assets/components/internal/listbox/components/listbox-multi-select/listbox-multi-select.types.ts +1 -0
  102. package/dist/assets/components/internal/listbox/listbox.types.ts +1 -0
  103. package/dist/assets/components/internal/radio-input/radio-input.types.ts +1 -0
  104. package/dist/assets/components/internal/teleport/teleport.types.ts +1 -0
  105. package/dist/assets/components/internal/tooltip/tooltip.types.ts +1 -0
  106. package/dist/assets/components/layout/layout.types.ts +1 -0
  107. package/dist/assets/components/link/link.types.ts +1 -0
  108. package/dist/assets/components/list/components/list-item/list-item.stories.ts +1 -0
  109. package/dist/assets/components/list/components/list-item/list-item.types.ts +1 -0
  110. package/dist/assets/components/list/components/list-item/list-item.vue +1 -0
  111. package/dist/assets/components/list/list.docs.mdx +97 -0
  112. package/dist/assets/components/list/list.stories.ts +1 -0
  113. package/dist/assets/components/list/list.types.ts +1 -0
  114. package/dist/assets/components/list/list.vue +1 -0
  115. package/dist/assets/components/loading-indicator/loading-indicator.types.ts +1 -0
  116. package/dist/assets/components/menu/components/menu-item/menu-item.types.ts +1 -0
  117. package/dist/assets/components/menu/menu.types.ts +1 -0
  118. package/dist/assets/components/modal/components/modal-page/modal-page.types.ts +1 -0
  119. package/dist/assets/components/modal/modal.types.ts +1 -0
  120. package/dist/assets/components/pagination/pagination.types.ts +1 -0
  121. package/dist/assets/components/payment-method/payment-method.types.ts +1 -0
  122. package/dist/assets/components/popover/popover.types.ts +1 -0
  123. package/dist/assets/components/popper-container/popper-container.types.ts +1 -0
  124. package/dist/assets/components/promo-banner/promo-banner.types.ts +1 -0
  125. package/dist/assets/components/radio-group/components/radio-button/radio-button.types.ts +1 -0
  126. package/dist/assets/components/radio-group/radio-group.types.ts +1 -0
  127. package/dist/assets/components/rich-text-editor/components/rich-text-editor-content-area/rich-text-editor-content-area.types.ts +1 -0
  128. package/dist/assets/components/rich-text-editor/components/rich-text-editor-renderer/components/rich-text-editor-code-block/rich-text-editor-code-block.types.ts +1 -0
  129. package/dist/assets/components/rich-text-editor/components/rich-text-editor-renderer/components/rich-text-editor-inline-code/rich-text-editor-inline-code.types.ts +1 -0
  130. package/dist/assets/components/rich-text-editor/components/rich-text-editor-renderer/components/rich-text-editor-link/rich-text-editor-link.types.ts +1 -0
  131. package/dist/assets/components/rich-text-editor/components/rich-text-editor-renderer/components/rich-text-editor-list-item/rich-text-editor-list-item.types.ts +1 -0
  132. package/dist/assets/components/rich-text-editor/components/rich-text-editor-renderer/rich-text-editor-renderer.types.ts +1 -0
  133. package/dist/assets/components/rich-text-editor/rich-text-editor.types.ts +1 -0
  134. package/dist/assets/components/search-bar/search-bar.types.ts +1 -0
  135. package/dist/assets/components/secondary-nav/secondary-nav.types.ts +1 -0
  136. package/dist/assets/components/segmented-control/segmented-control.types.ts +1 -0
  137. package/dist/assets/components/selection-card/components/selection-card-group/selection-card-group.types.ts +1 -0
  138. package/dist/assets/components/selection-card/selection-card.types.ts +1 -0
  139. package/dist/assets/components/sidepanel/sidepanel.types.ts +1 -0
  140. package/dist/assets/components/status/status.types.ts +1 -0
  141. package/dist/assets/components/stepper/stepper.types.ts +1 -0
  142. package/dist/assets/components/structured-list/structured-list.types.ts +1 -0
  143. package/dist/assets/components/summary-grid/components/summary-grid-item/summary-grid-item.types.ts +1 -0
  144. package/dist/assets/components/summary-grid/components/summary-grid-item-amount/summary-grid-item-amount.types.ts +1 -0
  145. package/dist/assets/components/summary-grid/components/summary-grid-item-custom/summary-grid-item-custom.types.ts +1 -0
  146. package/dist/assets/components/summary-grid/components/summary-grid-item-numeric/summary-grid-item-numeric.types.ts +1 -0
  147. package/dist/assets/components/summary-grid/components/summary-grid-item-percentage/summary-grid-item-percentage.types.ts +1 -0
  148. package/dist/assets/components/summary-grid/components/summary-grid-item-text/summary-grid-item-text.types.ts +1 -0
  149. package/dist/assets/components/summary-grid/summary-grid.types.ts +1 -0
  150. package/dist/assets/components/tabs/components/tab.types.ts +1 -0
  151. package/dist/assets/components/tabs/tabs.types.ts +1 -0
  152. package/dist/assets/components/tag/tag.types.ts +1 -0
  153. package/dist/assets/components/textarea/textarea.types.ts +1 -0
  154. package/dist/assets/components/timeline/components/timeline-item/timeline-item.vue +1 -1
  155. package/dist/assets/components/timeline/timeline.stories.ts +1 -1
  156. package/dist/assets/components/timeline/timeline.types.ts +1 -0
  157. package/dist/assets/components/toast/components/toast-shadow-stack/toast-shadow-stack.types.ts +1 -0
  158. package/dist/assets/components/toggle/toggle.types.ts +1 -0
  159. package/dist/assets/components/tutorial/tutorial.types.ts +1 -0
  160. package/dist/assets/components/typography/typography.types.ts +1 -0
  161. package/dist/assets/components.json +101 -0
  162. package/dist/assets/composables/use-bento-theme/install.ts +1 -0
  163. package/dist/assets/composables/use-bento-theme/install.types.ts +1 -0
  164. package/dist/assets/composables/use-bento-theme/use-bento-theme.types.ts +1 -0
  165. package/dist/assets/composables/use-bento-toast-controller/install.ts +1 -0
  166. package/dist/assets/composables/use-bento-toast-controller/use-bento-toast-controller.types.ts +1 -0
  167. package/dist/assets/composables/use-form-validate/use-form.types.ts +1 -0
  168. package/dist/assets/composables/use-form-validate-zod-4/use-form.types.ts +1 -0
  169. package/dist/assets/composables/use-virtual-list/use-virtual-list.types.ts +1 -0
  170. package/dist/assets/deprecations.md +330 -0
  171. package/dist/assets/directives/keyboard-navigation/keyboard-navigation.types.ts +1 -0
  172. package/dist/assets/directives/tooltip/tooltip.types.ts +1 -0
  173. package/dist/assets/icons.json +415 -0
  174. package/dist/assets/index.ts +1 -1
  175. package/dist/assets/install.ts +1 -0
  176. package/dist/assets/tailwind/README.md +89 -0
  177. package/dist/assets/templates/dashboard-template/dashboard-template.types.ts +1 -0
  178. package/dist/assets/templates/data-grid-template/data-grid-template.stories.ts +1 -1
  179. package/dist/assets/templates/data-grid-template/data-grid-template.types.ts +1 -0
  180. package/dist/assets/utility-classes.md +92 -0
  181. package/dist/assets/utils/ts/currency/currency.types.ts +1 -0
  182. package/dist/assets/variables.css +309 -0
  183. package/dist/main.js +395 -29
  184. package/package.json +15 -6
@@ -0,0 +1,415 @@
1
+ [
2
+ "4-people",
3
+ "accessibility",
4
+ "account-switch",
5
+ "accounts",
6
+ "adyen-a-filled",
7
+ "adyen-giving",
8
+ "airplane",
9
+ "alternative",
10
+ "android",
11
+ "angle-right",
12
+ "angled-left",
13
+ "antenna",
14
+ "api-explorer",
15
+ "apple",
16
+ "arrow-bottom",
17
+ "arrow-bottom-small",
18
+ "arrow-circle-down",
19
+ "arrow-circle-down-filled",
20
+ "arrow-circle-left",
21
+ "arrow-circle-left-filled",
22
+ "arrow-circle-right",
23
+ "arrow-circle-right-filled",
24
+ "arrow-circle-up",
25
+ "arrow-circle-up-filled",
26
+ "arrow-diagonal-down",
27
+ "arrow-diagonal-down-small",
28
+ "arrow-down-up",
29
+ "arrow-left",
30
+ "arrow-left-right",
31
+ "arrow-left-small",
32
+ "arrow-right",
33
+ "arrow-right-small",
34
+ "arrow-top",
35
+ "arrow-top-small",
36
+ "arrow-up-down-sort",
37
+ "artificial-intelligence-ai",
38
+ "artificial-intelligence-ai-filled",
39
+ "attachment",
40
+ "backspace",
41
+ "backspace-filled",
42
+ "bag",
43
+ "balance-account",
44
+ "balance-platform",
45
+ "bank",
46
+ "bank-in",
47
+ "bank-in-up",
48
+ "bank-out",
49
+ "bank-out-up",
50
+ "battery-1",
51
+ "battery-2",
52
+ "battery-3",
53
+ "battery-empty",
54
+ "bin",
55
+ "bin-filled",
56
+ "biometric-thumb",
57
+ "blocked",
58
+ "blog",
59
+ "book",
60
+ "book-open",
61
+ "box-code",
62
+ "breadcrumb",
63
+ "browser",
64
+ "bucket",
65
+ "calendar",
66
+ "calendar-7",
67
+ "capital",
68
+ "capslock",
69
+ "car",
70
+ "card-lock",
71
+ "card-stack",
72
+ "cash",
73
+ "cash-stack",
74
+ "certificate",
75
+ "chain-1",
76
+ "chain-2",
77
+ "channels",
78
+ "checklist",
79
+ "checkmark",
80
+ "checkmark-circle",
81
+ "checkmark-circle-fill",
82
+ "checkmark-circle-small",
83
+ "checkmark-circle-small-fill",
84
+ "checkmark-small",
85
+ "checkmark-square",
86
+ "checkmark-square-fill",
87
+ "chevron-down",
88
+ "chevron-down-small",
89
+ "chevron-left",
90
+ "chevron-left-small",
91
+ "chevron-right",
92
+ "chevron-right-small",
93
+ "chevron-up",
94
+ "chevron-up-small",
95
+ "chevrons-down",
96
+ "chevrons-left",
97
+ "chevrons-right",
98
+ "chevrons-up",
99
+ "chip",
100
+ "chip-2",
101
+ "circle",
102
+ "circle-filled",
103
+ "circle-small",
104
+ "circle-small-filled",
105
+ "click",
106
+ "clock",
107
+ "cloud",
108
+ "code-1",
109
+ "code-2",
110
+ "code-3",
111
+ "coins",
112
+ "collapse",
113
+ "collection",
114
+ "contract",
115
+ "copy",
116
+ "creditcard",
117
+ "creditcard-chip",
118
+ "cross",
119
+ "cross-circle",
120
+ "cross-circle-fill",
121
+ "cross-circle-fill-small",
122
+ "cross-circle-small",
123
+ "cross-small",
124
+ "currency-dollar",
125
+ "customer-insights",
126
+ "dashboard",
127
+ "debit-card",
128
+ "diamond",
129
+ "direct-debit",
130
+ "discount",
131
+ "diversity",
132
+ "dna",
133
+ "document-1",
134
+ "document-lines",
135
+ "document-minus",
136
+ "document-person",
137
+ "document-plus",
138
+ "document-stack",
139
+ "dot",
140
+ "dot-small",
141
+ "dot-tiny",
142
+ "double-checkmark-small",
143
+ "down-up",
144
+ "download",
145
+ "edit-1",
146
+ "edit-2",
147
+ "edited",
148
+ "education",
149
+ "embedded-finance",
150
+ "emoticon-happy",
151
+ "enter-key",
152
+ "exit",
153
+ "expand",
154
+ "expand-vertically",
155
+ "experiments-1",
156
+ "experiments-2",
157
+ "external-link",
158
+ "external-link-small",
159
+ "facebook-small",
160
+ "filter",
161
+ "finance-monitoring",
162
+ "folder",
163
+ "folder-fill",
164
+ "food",
165
+ "food-beverage",
166
+ "food-beverage-filled",
167
+ "freeze",
168
+ "gambling",
169
+ "gaming",
170
+ "gift",
171
+ "gift-card",
172
+ "gift-card-activate",
173
+ "gift-card-cash-out",
174
+ "gift-card-error",
175
+ "gift-card-load",
176
+ "gift-card-reversed",
177
+ "global-acquiring",
178
+ "globe",
179
+ "globe-2",
180
+ "globe-small",
181
+ "grab",
182
+ "graph",
183
+ "graph-dots",
184
+ "graph-up",
185
+ "gym",
186
+ "hand-rock",
187
+ "hashtag",
188
+ "headquarter",
189
+ "heart",
190
+ "heart-fill",
191
+ "help-center",
192
+ "hide",
193
+ "history",
194
+ "hospitality",
195
+ "hotel",
196
+ "hourglass",
197
+ "idea",
198
+ "image",
199
+ "info",
200
+ "info-filled",
201
+ "inheritence",
202
+ "intelligent-money-movement",
203
+ "key",
204
+ "laptop",
205
+ "leaf",
206
+ "letter-i",
207
+ "letter-t",
208
+ "library",
209
+ "lightning",
210
+ "lightning-filled",
211
+ "line-height",
212
+ "linkedin-small",
213
+ "loading-lines",
214
+ "loading-small",
215
+ "local-payment-methods",
216
+ "location",
217
+ "location-2",
218
+ "location-2-filled",
219
+ "lock",
220
+ "lock-2",
221
+ "lock-3",
222
+ "lock-4",
223
+ "lock-5",
224
+ "lock-small",
225
+ "machine-learning",
226
+ "magnetic-swipe",
227
+ "mail",
228
+ "managed-risk",
229
+ "marketplace-laptop",
230
+ "menu",
231
+ "menu-2",
232
+ "message",
233
+ "microphone",
234
+ "minus",
235
+ "minus-circle",
236
+ "minus-circle-filled",
237
+ "minus-multiple",
238
+ "minus-small",
239
+ "minus-square",
240
+ "minus-square-filled",
241
+ "mobile",
242
+ "monitor",
243
+ "monitoring",
244
+ "monitoring-filled",
245
+ "move",
246
+ "navigation-collapse",
247
+ "navigation-expand",
248
+ "new-tab-link",
249
+ "news",
250
+ "notification",
251
+ "number-1",
252
+ "number-1-filled",
253
+ "number-2",
254
+ "number-2-filled",
255
+ "number-3",
256
+ "number-3-filled",
257
+ "nyc1",
258
+ "omnichannel-experiences",
259
+ "on-demand-monitor",
260
+ "options-horizontal",
261
+ "options-vertical",
262
+ "paint-roller",
263
+ "paper-bag",
264
+ "partner",
265
+ "pauze",
266
+ "pay-by-link",
267
+ "pay-by-link-plane",
268
+ "pay-later",
269
+ "payment-method-types",
270
+ "payment-methods",
271
+ "payout",
272
+ "person",
273
+ "person-circle",
274
+ "pie-chart",
275
+ "pin",
276
+ "platform-business-structure",
277
+ "platforms",
278
+ "play",
279
+ "play-circle",
280
+ "play-circle-filled",
281
+ "play-filled",
282
+ "plugins",
283
+ "plus",
284
+ "plus-circle",
285
+ "plus-circle-filled",
286
+ "plus-multiple",
287
+ "plus-small",
288
+ "plus-square",
289
+ "plus-square-filled",
290
+ "podcast",
291
+ "printer",
292
+ "printer-filled",
293
+ "prize",
294
+ "product-adyen",
295
+ "prohibited",
296
+ "prohibited-fill",
297
+ "radar",
298
+ "reconciliation",
299
+ "recurring",
300
+ "redo",
301
+ "refresh",
302
+ "refresh-small",
303
+ "refresh-small-square",
304
+ "refresh-small-square-filled",
305
+ "refund",
306
+ "restricted",
307
+ "restricted-fill",
308
+ "retail",
309
+ "revenue-accelerate",
310
+ "revenue-protect",
311
+ "revert-small-square",
312
+ "revert-small-square-filled",
313
+ "rocket",
314
+ "rules",
315
+ "save",
316
+ "scalability",
317
+ "search",
318
+ "search-list",
319
+ "search-small",
320
+ "section",
321
+ "settings",
322
+ "settings-filled",
323
+ "share",
324
+ "share-2",
325
+ "shield",
326
+ "shield-checkmark",
327
+ "shopping-cart",
328
+ "show",
329
+ "side-peak-left",
330
+ "side-peak-right",
331
+ "size",
332
+ "skip-down",
333
+ "skip-left",
334
+ "skip-right",
335
+ "skip-up",
336
+ "sleep",
337
+ "sliders-1",
338
+ "sliders-2",
339
+ "solution-data",
340
+ "solution-payments",
341
+ "solution-platform-engineering",
342
+ "solution-platforms-financial-services",
343
+ "sort-ascending",
344
+ "sort-descending",
345
+ "sound",
346
+ "square",
347
+ "square-6-fill",
348
+ "square-8-fill",
349
+ "square-fill",
350
+ "square-small",
351
+ "square-small-fill",
352
+ "stack",
353
+ "star",
354
+ "star-filled",
355
+ "star-half-filled",
356
+ "stop",
357
+ "store",
358
+ "striketrough",
359
+ "sun",
360
+ "support",
361
+ "table",
362
+ "tablet",
363
+ "tag",
364
+ "target",
365
+ "terminal-1",
366
+ "terminal-2",
367
+ "terminal-3",
368
+ "text-bold",
369
+ "text-bulet-list",
370
+ "text-italic",
371
+ "text-numbered-list",
372
+ "text-underline",
373
+ "thumb-down",
374
+ "thumb-up",
375
+ "timer",
376
+ "tools",
377
+ "tooltip",
378
+ "tooltip-filled",
379
+ "topic",
380
+ "touch",
381
+ "translation",
382
+ "travel-bag",
383
+ "triangle",
384
+ "triangle-down",
385
+ "triangle-fill",
386
+ "triangle-left",
387
+ "triangle-right",
388
+ "triangle-up",
389
+ "turn-left",
390
+ "turn-right",
391
+ "twitter-small",
392
+ "undo",
393
+ "unified-commerce",
394
+ "unlock",
395
+ "up-down",
396
+ "uplift",
397
+ "upload",
398
+ "virtual-card",
399
+ "wallet",
400
+ "warning",
401
+ "warning-circle",
402
+ "warning-circle-fill",
403
+ "warning-diamond",
404
+ "warning-diamond-filled",
405
+ "warning-filled",
406
+ "webcam",
407
+ "webinar",
408
+ "weight",
409
+ "wireless",
410
+ "world",
411
+ "wrench",
412
+ "wrench-filled",
413
+ "zoom-in",
414
+ "zoom-out"
415
+ ]
@@ -1 +1 @@
1
- import BentoVue from './install'; export * from './components/accordion'; export * from './components/action-bar'; export * from './components/ai-tag'; export * from './components/alert'; export * from './components/anchor-scroller'; export * from './components/avatar'; export * from './components/button'; export * from './components/dashed-underline'; export * from './components/data-grid'; export * from './components/card'; export * from './components/date-picker'; export * from './components/date-range-picker'; export * from './components/dropdown'; export * from './components/checkbox'; export * from './components/chip'; export * from './components/click-outside'; export * from './components/code-snippet'; export * from './components/country'; export * from './components/currency'; export * from './components/date'; export * from './components/divider'; export * from './components/empty-state'; export * from './components/file-uploader'; export * from './components/filter-bar'; export * from './components/form-layout'; export * from './components/header-with-views'; export * from './components/image'; export * from './components/info-icon'; export * from './components/input-field'; export * from './components/input-field-password'; export * from './components/input-field-phone-number'; export * from './components/inspector'; export * from './components/layout'; export * from './components/loading-indicator'; export * from './components/link'; export * from './components/menu'; export * from './components/modal'; export * from './components/modal-fullscreen'; export * from './components/header'; export * from './components/pagination'; export * from './components/payment-method'; export * from './components/popover'; export * from './components/promo-banner'; export * from './components/radio-group'; export * from './components/rich-text-editor'; export * from './components/search-bar'; export * from './components/secondary-nav'; export * from './components/selection-card'; export * from './components/segmented-control'; export * from './components/sidepanel'; export * from './components/status'; export * from './components/stepper'; export * from './components/structured-list'; export * from './components/summary-grid'; export * from './components/tabs'; export * from './components/tag'; export * from './components/textarea'; export * from './components/timeline'; export * from './components/toast'; export * from './components/toggle'; export * from './components/tutorial'; export * from './components/typography'; // Export Composables export * from './composables/use-bento-base-filter'; export * from './composables/use-bento-currency'; export * from './composables/use-bento-theme'; export * from './composables/use-bento-toast-controller'; export * from './composables/use-click-outside'; export * from './composables/use-form-validate'; // Export Templates export * from './templates/dashboard-template'; export * from './templates/data-grid-template'; // Export Types export * from './types'; // Export Directives export * from './directives'; // AdlVue Plugin export default BentoVue; export { BentoTheme } from './install';
1
+ import BentoVue from './install'; export * from './components/accordion'; export * from './components/action-bar'; export * from './components/ai-tag'; export * from './components/alert'; export * from './components/anchor-scroller'; export * from './components/avatar'; export * from './components/button'; export * from './components/dashed-underline'; export * from './components/data-grid'; export * from './components/card'; export * from './components/date-picker'; export * from './components/date-range-picker'; export * from './components/dropdown'; export * from './components/checkbox'; export * from './components/chip'; export * from './components/click-outside'; export * from './components/code-snippet'; export * from './components/country'; export * from './components/currency'; export * from './components/date'; export * from './components/divider'; export * from './components/empty-state'; export * from './components/file-uploader'; export * from './components/filter-bar'; export * from './components/form-layout'; export * from './components/header-with-views'; export * from './components/image'; export * from './components/info-icon'; export * from './components/input-field'; export * from './components/input-field-password'; export * from './components/input-field-phone-number'; export * from './components/inspector'; export * from './components/layout'; export * from './components/list'; export * from './components/loading-indicator'; export * from './components/link'; export * from './components/menu'; export * from './components/modal'; export * from './components/modal-fullscreen'; export * from './components/header'; export * from './components/pagination'; export * from './components/payment-method'; export * from './components/popover'; export * from './components/promo-banner'; export * from './components/radio-group'; export * from './components/rich-text-editor'; export * from './components/search-bar'; export * from './components/secondary-nav'; export * from './components/selection-card'; export * from './components/segmented-control'; export * from './components/sidepanel'; export * from './components/status'; export * from './components/stepper'; export * from './components/structured-list'; export * from './components/summary-grid'; export * from './components/tabs'; export * from './components/tag'; export * from './components/textarea'; export * from './components/timeline'; export * from './components/toast'; export * from './components/toggle'; export * from './components/tutorial'; export * from './components/typography'; // Export Composables export * from './composables/use-bento-base-filter'; export * from './composables/use-bento-currency'; export * from './composables/use-bento-theme'; export * from './composables/use-bento-toast-controller'; export * from './composables/use-click-outside'; export * from './composables/use-form-validate'; // Export Templates export * from './templates/dashboard-template'; export * from './templates/data-grid-template'; // Export Types export * from './types'; // Export Directives export * from './directives'; // AdlVue Plugin export default BentoVue; export { BentoTheme } from './install';
@@ -0,0 +1 @@
1
+ import installToast from './composables/use-bento-toast-controller/install'; import installTheme, { setTheme } from './composables/use-bento-theme/install'; import { deprecate } from './utils/ts/deprecate'; import { BentoTheme } from './composables/use-bento-theme/install.types'; import type { PluginObject } from 'vue'; interface BentoVuePlugin { theme?: BentoTheme; withToast?: boolean; withUtilityClasses?: boolean; withDesignTokensCSSInjection?: boolean; } const plugin: PluginObject<BentoVuePlugin> = { name: 'BentoVue', install: async ( Vue, { theme = BentoTheme.BENTO_LIGHT, withToast = false, withUtilityClasses = false, withDesignTokensCSSInjection = true, }: BentoVuePlugin ) => { installTheme(Vue); if (withToast) { installToast(Vue); } if (withDesignTokensCSSInjection) { deprecate( 'Using default setting withDesignTokensCSSInjection set to true in BentoVue plugin', 'Please disable CSS injection by setting withDesignTokensCSSInjection to false in BentoVue plugin options as highlighted here:\nhttps://adyen-bento.netlify.app/?path=/docs/welcome-getting-started--docs#import-css-variables', '2.0.0' ); // Make sure to put all awaited CSS imports below this point and not above! if (theme === BentoTheme.STYLEGUIDE) { await import('@adyen/bento-design-tokens/dist/css/bento/variables-styleguide.css'); } else { await import('@adyen/bento-design-tokens/dist/css/bento/variables.css'); } if (withUtilityClasses) { await import('@adyen/bento-design-tokens/dist/css/bento/utility.css'); } } if (theme === BentoTheme.STYLEGUIDE) { setTheme(BentoTheme.STYLEGUIDE); } else if (theme === BentoTheme.BENTO_SYSTEM) { setTheme(BentoTheme.BENTO_SYSTEM); } else if (theme === BentoTheme.BENTO_DARK) { setTheme(BentoTheme.BENTO_DARK); } else if (theme === BentoTheme.BENTO) { deprecate('Using `BentoTheme.BENTO`', 'Please use `BentoTheme.BENTO_LIGHT` instead', '2.0.0'); setTheme(BentoTheme.BENTO_LIGHT); } else { setTheme(BentoTheme.BENTO_LIGHT); } }, }; export { BentoTheme }; export default plugin;
@@ -0,0 +1,89 @@
1
+ # @adyen/bento-tailwind
2
+
3
+ This package provides a convenient [Tailwind CSS](https://tailwindcss.com/) preset designed to seamlessly integrate
4
+ Adyen's Bento design system into your projects through the use of utility classes.
5
+
6
+ By using this preset, you get the best of both worlds:
7
+
8
+ 1. **Full Tailwind Power:** Access to **all** the default Tailwind CSS utility classes you know and love. Nothing is
9
+ removed or fundamentally changed from the standard Tailwind experience.
10
+ 2. **Bento Integration:** Adds utility classes derived from Bento's alias tokens—covering colors, spacing, animations,
11
+ borders, shadows, and more enabling you to apply Bento's defined styles using familiar Tailwind syntax.
12
+
13
+ **Important:** This preset is designed to **complement**, not replace, the primary Bento UI component library (e.g.,
14
+ `@adyen/bento-vue2`, `@adyen/bento-vue3`).
15
+
16
+ Think of these utilities as tools for:
17
+
18
+ - Applying spacing, layout (margins, padding, flexbox, grid) around standard Bento components.
19
+ - Adding fundamental styles like colors, borders, animations, etc... to your own custom components or standard HTML
20
+ elements.
21
+ - Rapidly prototyping new, custom UI elements that adhere to the Bento design system's look and feel.
22
+
23
+ For implementing standard interface patterns (buttons, inputs, cards, etc.), using the pre-built components from the
24
+ main Bento library is generally recommended for consistency and accessibility.
25
+
26
+ ## Installation
27
+
28
+ Install the package using npm (or your preferred package manager):
29
+
30
+ ```bash
31
+ npm install @adyen/bento-tailwind
32
+ ```
33
+
34
+ ## Usage
35
+
36
+ ### 1. Import the Bento styles
37
+
38
+ For Adyen's consistent look and feel, you'll need to import CSS variables for Bento's foundational design rules for
39
+ colors, fonts, and spacing.
40
+
41
+ #### Using a components package
42
+
43
+ Adyen component packages (e.g. `@adyen/bento-vue3`) usually include styles automatically. To set a default theme
44
+ (light/dark), see Adyen's
45
+ [this guide](https://adyen-bento.netlify.app/?path=/docs/welcome-getting-started--docs#setting-a-default-theme).
46
+
47
+ #### Building a stand-alone static website
48
+
49
+ Add the following lines to your project's main CSS file:
50
+
51
+ ```css
52
+ /* This line imports the standard (base/light) theme styles */
53
+ @import '@adyen/bento-design-tokens/dist/css/bento/variables.css';
54
+ /* This line imports the dark theme styles.
55
+ To actually turn the dark theme on, you also need to add
56
+ the class "b-dark-theme" to the <body> element of your HTML page. */
57
+ @import '@adyen/bento-design-tokens/dist/css/bento/variables-dark.css';
58
+ ```
59
+
60
+ ### 2. Install Tailwind Bento theme
61
+
62
+ To integrate Bento styles and design tokens using the `@adyen/bento-tailwind` package.
63
+
64
+ 1. Run `npm install @adyen/bento-tailwind`
65
+
66
+ 2. Change your `main.css` to include the following
67
+
68
+ ```css
69
+ /* 1. Define the order of your layers */
70
+ @layer theme, base, components, utilities;
71
+
72
+ /* 2. Only import utilities */
73
+ @import 'tailwindcss/theme' layer(theme);
74
+ @import 'tailwindcss/utilities' layer(utilities);
75
+ /* 2. Tells tailwind where to look for utility classes */
76
+ @source '../src/**/*.{vue,css,scss}';
77
+ /* 3. Imports the bento tailwind theme configuration */
78
+ @import '@adyen/bento-tailwind';
79
+ ```
80
+
81
+ ## Exploring available classes
82
+
83
+ **Bento Custom Utilities:** To see the full range of custom utility classes added by this preset (e.g., specific Bento
84
+ colors like `bg-secondary-active`, spacing units, etc.), please explore our
85
+ **[Viewer Story](/story/welcome-tailwind--viewer)**.
86
+
87
+ **Default Tailwind Utilities:** For documentation on the standard utility classes like `flex`, `grid`, `pt-4`,
88
+ `text-center`, `rounded-lg`, etc., which are all included and work as expected, please refer to the official
89
+ **[Tailwind CSS Documentation](https://v3.tailwindcss.com/docs/utility-first)**.
@@ -0,0 +1 @@
1
+ import type { BentoTab } from '@/components/tabs'; import type { BentoHeader } from '@/components/header'; export type BentoDashboardTemplateTab = InstanceType<typeof BentoTab>['$props']; export type BentoDashboardTemplateHeader = InstanceType<typeof BentoHeader>['$props']; export interface BentoDashboardTemplateTabs { activeTabIndex?: number; tabs: Array<BentoDashboardTemplateTab>; }
@@ -1 +1 @@
1
- import { BentoButton } from '@/components/button'; import { BentoCountry, BentoCountryCode } from '@/components/country'; import { type BentoColumn, BentoDataGrid, type BentoDatagridData } from '@/components/data-grid'; import { type BentoFilterBarModel, BentoFilterItemType, type BentoFilterValues } from '@/components/filter-bar'; import { BentoHeaderWithViews, type BentoHeaderWithViewsItem } from '@/components/header-with-views'; import { type BentoInspectorProps } from '@/components/inspector'; import { BentoStatus } from '@/components/status'; import { BentoSummaryGrid, BentoSummaryGridItemAmount, BentoSummaryGridItemCustom } from '@/components/summary-grid'; import { BentoTypography } from '@/components/typography'; import { storybookDocsParameter } from '@/utils/ts/storybook'; import type { Meta, StoryObj } from '@storybook/vue'; import { computed, onMounted, ref } from 'vue'; import { isVue2 } from 'vue-demi'; import DataGridTemplateWithHeaderWithViews from './__tests__/data-grid-template-with-header-with-views.vue?raw'; import './data-grid-template.stories.scss?module'; import { type BentoDataGridTemplateTabs } from './data-grid-template.types'; import BentoDataGridTemplate from './data-grid-template.vue'; const meta: Meta = { title: 'Data grid template', component: BentoDataGridTemplate, parameters: { layout: 'fullscreen', }, }; const HEADER_PROPS = { title: 'Payments', actions: [ { title: 'Primary action', event: () => undefined }, { title: 'Secondary action', event: () => undefined }, { title: 'Tetiary action', event: () => undefined }, ], infoIconTooltipText: 'Title Tooltip Text', }; const HEADER_PROPS_DOCS = { title: 'Payments', actions: [ { title: 'Primary action', event: () => undefined }, { title: 'Secondary action', event: () => undefined }, { title: 'Tetiary action', event: () => undefined }, ], infoIconTooltipText: 'Title Tooltip Text', }; const PAGINATION_DOCS = { description: 'datagrid navigation', hasNext: true, size: 10 }; const DEFAULT_COLUMNS: Array<BentoColumn> = [ { field: 'name', label: 'Name', minWidth: 300, mandatory: true }, { field: 'company', label: 'Reference', minWidth: 150 }, { field: 'payment', label: 'Payment', width: 200, minWidth: 150 }, ]; const DATA_GRID_1_DATA: BentoDatagridData = Array.from({ length: 50 }, (_, index) => ({ name: `Name ${index + 1}`, company: `Company ${index + 1}`, payment: `Payment ${index + 1}`, id: `${index + 1}`, })); const FILTERS: BentoFilterBarModel = [ { field: 'name', label: 'Name', type: BentoFilterItemType.INPUT, }, { field: 'company', label: 'Company', type: BentoFilterItemType.INPUT, }, ]; const FILTER_VALUES: BentoFilterValues = [ { field: 'company', value: 'Company 1', }, ]; const FILTERS_DOCS = `[ { field: 'name', label: 'Name', type: BentoFilterItemType.INPUT, }, { field: 'company', label: 'Company', type: BentoFilterItemType.INPUT, }, ]`; const FILTER_VALUES_DOCS = `[ { field: 'company', value: 'Company 1' }, ]`; const TABS_ARGS: BentoDataGridTemplateTabs = { tabs: [{ title: 'Data grid title 1' }, { title: 'Data grid title 2' }], }; const INSPECTOR_ARGS: BentoInspectorProps = { title: 'Title', size: 'large', isOpen: false, activePage: '', expandable: true, }; const DATA_GRID_1_ARGS = { data: DATA_GRID_1_DATA, columns: DEFAULT_COLUMNS, allowColumnDragAndDrop: false, pagination: {}, filterSearchTerm: '', highlightedRows: [DATA_GRID_1_DATA[0].id], selectable: true, selection: [DATA_GRID_1_DATA[2].id], }; const DATA_GRID_2_DATA: BentoDatagridData = Array.from({ length: 30 }, (_, index) => ({ name: `Name ${index + 1}`, company: `Company ${index + 1}`, payment: `Payment ${index + 1}`, })); const DATA_GRID_2_ARGS = { data: DATA_GRID_2_DATA, columns: DEFAULT_COLUMNS, allowColumnDragAndDrop: false, pagination: {}, }; export default meta; type Story = StoryObj<typeof BentoDataGridTemplate>; const defaultCode = ` <template> <bento-data-grid-template :header="header" :tabs="tabs" sticky-tabs> <template #tab-1> <bento-data-grid :columns="columns" :data="dataArray" :pagination.sync="pagination" @navigate="clickNavigate" /> </template> <template #tab-2> <bento-data-grid :columns="columns" :data="dataArray" :filter-search-term.sync="searchTerm" :filters="filtersConfig" :filter-values.sync="filterValues" :sort-by.sync="sortBy" /> </template> </bento-data-grid-template> </template> <script setup lang="ts"> import { BentoCountryCode, type BentoColumn, type BentoDatagridSortByColumn, type BentoDatagridDataItem, BentoDataGridTemplate, BentoDataGrid, type BentoDataGridTemplateHeader, type BentoDatagridPaginationProps, type BentoFilterBarModel, BentoFilterItemType, } from '@adyen/bento-vue2'; import messages from './messages.json'; const { t } = useI18n({ messages }); const header: BentoDataGridTemplateHeader = { title: 'Payments', actions: [ { title: 'Primary action', event: () => {} }, { title: 'Secondary action', event: () => {} }, { title: 'Tetiary action', event: () => {} }, ], infoIconTooltipText: 'Title Tooltip Text', }; const tabs: BentoDataGridTemplateTabs = { tabs: [{ title: 'Data grid title 1' }, { title: 'Data grid title 2' }], }; const columns = computed<BentoColumn[]>(() => [ { field: 'name', label: t('Name'), minWidth: 300, mandatory: true, frozen: true, autoWidth: true, sortable: true, }, { field: 'company', label: t('Reference') }, { field: 'payment', label: t('Payment'), width: 200, minWidth: 150 }, ]); const filtersConfig = computed<BentoFilterBarModel>(() => [ { field: 'company', label: t('Company'), type: BentoFilterItemType.INPUT, }, { field: 'countryCode', label: t('Country'), options: { listboxItems: [ { value: BentoCountryCode.NL, }, { value: BentoCountryCode.BE, }, ], variant: 'name', }, type: BentoFilterItemType.SELECT_COUNTRY, }, ]); // Watch this to keep track if the user filters data const filterValues = ref(); // Watch this to keep track if the user sorts data const sortBy = ref<BentoDatagridSortByColumn[]>([]); // Watch this to keep track if the user searches for data const searchTerm = ref(''); // Watch this to keep track if the user pages through the data const pagination = ref<BentoDatagridPaginationProps>({ description: 'datagrid 1 navigation', hasNext: true, size: 10 }); // This is a contrived example of the dataArray as this will normally be retried via an API const dataArray = ref<BentoDatagridDataItem[]>([ { id: '03c0a799-1ced-4017-aea3-0cebb0106335', name: 'Shepherd Kane', payment: 160405, company: 'VURBO', registered: '2023-06-30T13:56:09.498Z', tags: ['deserunt', 'et', 'esse'], reference: 'UnbQaUncf3eR1D8XUBqn_UnbQaUncf3eR1D8XUBqn_UnbQaUncf3eR1D8XUBqn', paymentStatus: 1, countryCode: BentoCountryCode.NL, }, { id: 'b6d4f1fd-b1f6-40a6-a443-f785c89604ef', name: 'Santos Palmer', payment: 163500, company: 'POLARAX', registered: '2023-04-28T13:11:09.498Z', tags: ['et', 'Lorem', 'sint'], reference: 'IxUZ9FsEPCZ9dFFPpI9C', paymentStatus: 2, countryCode: BentoCountryCode.BE, }, ]); </script> `; export const Default: Story = { render: (_args, { argTypes }) => ({ components: { BentoDataGrid, BentoDataGridTemplate, }, props: Object.keys(argTypes), template: ` <bento-data-grid-template v-bind="args"> <template #infoIconTooltipContent>Test</template> <template #tab-1><bento-data-grid v-bind="dataGrid1Props" :filters="filters" :filter-values.sync="filterValues" column-panel /></template> <template #tab-2><bento-data-grid v-bind="dataGrid2Props" /></template> <template #inspector-content>Hello</template> </bento-data-grid-template> `, setup(props) { const args = isVue2 ? props : _args; const filters = ref<BentoFilterBarModel>(args?.filters ?? FILTERS); const filterValues = ref<BentoFilterValues>(args?.filterValues ?? FILTER_VALUES); const dataGrid1Props = DATA_GRID_1_ARGS; const dataGrid2Props = DATA_GRID_2_ARGS; return { // Values args, dataGrid1Props, dataGrid2Props, filters, filterValues, }; }, }), args: { header: HEADER_PROPS, tabs: TABS_ARGS, inspector: INSPECTOR_ARGS, }, parameters: storybookDocsParameter(defaultCode), }; const additionalContentCode = ` <bento-data-grid-template :header="${JSON.stringify(HEADER_PROPS_DOCS)}" :tabs="${JSON.stringify( TABS_ARGS )}" sticky-tabs> <template #additionalContent> Your additional content/component here </template> <template #tab-1> <bento-data-grid :columns="${JSON.stringify(DEFAULT_COLUMNS)}" :data="dataArray" :pagination="${JSON.stringify(PAGINATION_DOCS)}" @navigate="clickNavigate" /> </template> <template #tab-2> <bento-data-grid :columns="${JSON.stringify(DEFAULT_COLUMNS)}" :data="dataArray" :filter-search-term.sync="searchTerm" :filters="${FILTERS_DOCS}" :filter-values.sync="${FILTER_VALUES_DOCS}" @filter-search-clear="onSearchCleared" @filter-search-input="onSearchInput" /> </template> </bento-data-grid-template> `; export const withAdditionalContent: Story = { render: (_args, { argTypes }) => ({ components: { BentoCountry, BentoDataGrid, BentoDataGridTemplate, BentoStatus, BentoSummaryGrid, BentoSummaryGridItemAmount, BentoSummaryGridItemCustom, }, props: Object.keys(argTypes), template: ` <bento-data-grid-template v-bind="args"> <template #additionalContent> <bento-summary-grid> <template #cell-1-1> <bento-summary-grid-item-custom title="Title" info-icon-tooltip-text="Text for icon" > <bento-status variant="green"> Status </bento-status> </bento-summary-grid-item-custom> </template> <template #cell-1-2> <bento-summary-grid-item-amount title="Title" label="€200.00" secondary-label="/ day" info-icon-tooltip-text="Text for icon" copy="Copy this to clipboard" /> </template> <template #cell-1-3> <bento-summary-grid-item-custom title="Title" info-icon-tooltip-text="Text for icon" > <bento-country :code="BentoCountryCode.NL" /> </bento-summary-grid-item-custom> </template> </bento-summary-grid> </template> <template #tab-1><bento-data-grid v-bind="dataGrid1Props" :filters="filters" :filter-values.sync="filterValues" /></template> <template #tab-2><bento-data-grid v-bind="dataGrid2Props" /></template> </bento-data-grid-template> `, setup(props) { const args = isVue2 ? props : _args; const filters = ref<BentoFilterBarModel>(args?.filters ?? FILTERS); const filterValues = ref<BentoFilterValues>(args?.filterValues ?? FILTER_VALUES); const dataGrid1Props = DATA_GRID_1_ARGS; const dataGrid2Props = DATA_GRID_2_ARGS; return { // Values args, dataGrid1Props, dataGrid2Props, filters, filterValues, // Enums BentoCountryCode, }; }, }), args: { header: HEADER_PROPS, tabs: TABS_ARGS, }, parameters: storybookDocsParameter(additionalContentCode), }; const singularDataGridCode = ` <bento-data-grid-template :header="${JSON.stringify(HEADER_PROPS)}" sticky-tabs> <bento-data-grid :columns="${JSON.stringify(DEFAULT_COLUMNS)}" :data="dataArray" :pagination="${JSON.stringify(PAGINATION_DOCS)}" @navigate="clickNavigate" :filter-search-term.sync="searchTerm" :filters="${FILTERS_DOCS}" :filter-values.sync="${FILTER_VALUES_DOCS}" @filter-search-clear="onSearchCleared" @filter-search-input="onSearchInput" /> </bento-data-grid-template> `; export const singularDataGrid: Story = { render: (_args, { argTypes }) => ({ components: { BentoDataGrid, BentoDataGridTemplate }, props: Object.keys(argTypes), template: ` <bento-data-grid-template v-bind="args"> <bento-data-grid v-bind="dataGridProps" :filters="filters" :filter-values.sync="filterValues" /> </bento-data-grid-template> `, setup(props) { const args = isVue2 ? props : _args; const filters = ref<BentoFilterBarModel>(args?.filters ?? FILTERS); const filterValues = ref<BentoFilterValues>(args?.filterValues ?? FILTER_VALUES); const dataGridProps = DATA_GRID_1_ARGS; return { // Values args, dataGridProps, filters, filterValues, }; }, }), args: { header: HEADER_PROPS, }, parameters: storybookDocsParameter(singularDataGridCode), }; const inspectorCode = ` <template> <bento-data-grid-template :header="header" :inspector="computedInspectorProps" @update:is-open:inspector="isInspectorOpen = $event" @update:active-page:inspector="inspectorActivePage = $event" > <template #default> <bento-data-grid :columns="columns" :data="dataArray" /> </template> <template #inspector-content> <div style="padding: 1rem;"> <bento-typography variant="title" el="h3"> Details for: {{ inspectorTitle }} </bento-typography> </div> </template> </bento-data-grid-template> </template> <script setup lang="ts"> import { ref, computed, onMounted } from 'vue'; import { BentoDataGridTemplate, BentoDataGrid, BentoTypography, } from '@adyen/bento-vue2'; import type { BentoDataGridTemplateHeader, BentoColumn, BentoDatagridDataItem } from '@adyen/bento-vue3'; const isInspectorOpen = ref(true); const inspectorTitle = ref('Shepherd Kane'); const inspectorActivePage = ref('id-1'); const pageFocusAnchorRef = ref<HTMLElement | null>(null); const dataArray = ref([ { id: '1', name: 'Shepherd Kane', company: 'Company 1', payment: 1604.05 }, { id: '2', name: 'Santos Palmer', company: 'Company 2', payment: 1635.00 }, ]); const openInspector = (item) => { inspectorTitle.value = item.name as string; isInspectorOpen.value = true; inspectorActivePage.value = item.id as string; const row = document.querySelector(\`[role="row"][aria-rowindex="\${item.rowIndex + 1}"]\`); pageFocusAnchorRef.value = row?.querySelector('[role="gridcell"]') as HTMLElement; }; const columns = computed<BentoColumn[]>(() => [ { field: 'name', label: 'Name', cellActions: [{ variant: 'open', event: openInspector }], }, { field: 'payment', label: 'Payment (€)', width: 200, }, ]); const header = ref<BentoDataGridTemplateHeader>({ title: 'Payments', infoIconTooltipText: 'Click the > icon on a row to open the inspector.', }); const computedInspectorProps = computed(() => ({ isOpen: isInspectorOpen.value, title: inspectorTitle.value, activePage: inspectorActivePage.value, pageFocusAnchor: pageFocusAnchorRef.value, })); <script> `; export const withInspector: Story = { render: (_args, { argTypes }) => ({ components: { BentoDataGrid, BentoDataGridTemplate, BentoTypography, BentoButton, }, props: Object.keys(argTypes), template: ` <bento-data-grid-template v-bind="args" :inspector="computedInspectorProps" @update:is-open:inspector="isInspectorOpen = $event" @update:active-page:inspector="inspectorActivePage = $event" > <template #default> <bento-data-grid v-bind="dataGridProps" :filters="dataGridFilters" :filter-values.sync="dataGridFilterValues" /> </template> <template #inspector-content> <bento-typography v-for="i in 10" :key="i" style="padding: 5px"> {{ inspectorContent }} </bento-typography> </template> </bento-data-grid-template> `, setup(props) { const args = isVue2 ? props : _args; const isInspectorOpen = ref(args.inspector.isOpen); const inspectorTitle = ref(args.inspector.title); const inspectorActivePage = ref(''); const dataGridFilters = ref<BentoFilterBarModel>(args?.filters ?? FILTERS); const dataGridFilterValues = ref<BentoFilterValues>(args?.filterValues ?? []); const inspectorContent = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'; const cellWithActions = { ...DEFAULT_COLUMNS[0], cellActions: [{ variant: 'open', event: item => openInspector(item) }], } satisfies BentoColumn; const columnsWithActions: Array<BentoColumn> = [cellWithActions, ...DEFAULT_COLUMNS.slice(1, 2)]; const dataGridProps = { ...DATA_GRID_1_ARGS, columns: columnsWithActions }; const pageFocusAnchorRef = ref<HTMLElement | null>(null); // Find the element after the component has mounted in the browser onMounted(() => { pageFocusAnchorRef.value = document.body .querySelector('[role="row"][aria-rowindex="1"]') .querySelectorAll('[role="gridcell"]')[0] as HTMLElement; }); const openInspector = item => { inspectorTitle.value = item.name; isInspectorOpen.value = true; inspectorActivePage.value = item.name; pageFocusAnchorRef.value = document.body .querySelector(`[role="row"][aria-rowindex="${item.id}"]`) .querySelectorAll('[role="gridcell"]')[0] as HTMLElement; }; const computedInspectorProps = computed(() => ({ ...args.inspector, isOpen: isInspectorOpen.value, title: inspectorTitle.value, activePage: inspectorActivePage.value, pageFocusAnchor: pageFocusAnchorRef.value, })); return { args, dataGridProps, dataGridFilters, dataGridFilterValues, isInspectorOpen, inspectorActivePage, computedInspectorProps, inspectorContent, openInspector, }; }, }), args: { header: HEADER_PROPS, inspector: { title: DATA_GRID_1_DATA[0].name, isOpen: true, activePage: DATA_GRID_1_DATA[0].name, }, }, parameters: storybookDocsParameter(inspectorCode), }; export const withHeaderWithViews: Story = { render: (_args, { argTypes }) => ({ components: { BentoDataGrid, BentoDataGridTemplate, BentoHeaderWithViews, }, props: Object.keys(argTypes), template: ` <bento-data-grid-template v-bind="args"> <template #header> <bento-header-with-views :actions="headerActions" description="Description" title="Page Title" :hasChanges="false" skipUnsavedChangesText="Don’t show this message again" :views="headerViews" /> </template> <template #infoIconTooltipContent>Test</template> <template #tab-1><bento-data-grid v-bind="dataGrid1Props" :filters="filters" :filter-values.sync="filterValues" column-panel /></template> <template #tab-2><bento-data-grid v-bind="dataGrid2Props" /></template> <template #inspector-content>Hello</template> </bento-data-grid-template> `, setup(props) { const args = isVue2 ? props : _args; const filters = ref<BentoFilterBarModel>(args?.filters ?? FILTERS); const filterValues = ref<BentoFilterValues>(args?.filterValues ?? FILTER_VALUES); const dataGrid1Props = DATA_GRID_1_ARGS; const dataGrid2Props = DATA_GRID_2_ARGS; const headerViews: Array<BentoHeaderWithViewsItem> = [ { icon: 'stack', iconColor: 'primary', label: 'View 1', }, { icon: 'stack', iconColor: 'primary', label: 'View 2', }, ]; const headerActions = [ { title: 'Primary action', }, { title: 'Secondary action', }, ]; return { // Values args, dataGrid1Props, dataGrid2Props, filters, filterValues, headerActions, headerViews, }; }, }), args: { tabs: TABS_ARGS, inspector: INSPECTOR_ARGS, }, parameters: storybookDocsParameter(DataGridTemplateWithHeaderWithViews), };
1
+ import { BentoButton } from '@/components/button'; import { BentoCountry, BentoCountryCode } from '@/components/country'; import { type BentoColumn, BentoDataGrid, type BentoDatagridData } from '@/components/data-grid'; import { type BentoFilterBarModel, BentoFilterItemType, type BentoFilterValues } from '@/components/filter-bar'; import { BentoHeaderWithViews, type BentoHeaderWithViewsItem } from '@/components/header-with-views'; import { type BentoInspectorProps } from '@/components/inspector'; import { BentoStatus } from '@/components/status'; import { BentoSummaryGrid, BentoSummaryGridItemAmount, BentoSummaryGridItemCustom } from '@/components/summary-grid'; import { BentoTypography } from '@/components/typography'; import { storybookDocsParameter } from '@/utils/ts/storybook'; import type { Meta, StoryObj } from '@storybook/vue'; import { computed, onMounted, ref } from 'vue'; import { isVue2 } from 'vue-demi'; import DataGridTemplateWithHeaderWithViews from './__tests__/data-grid-template-with-header-with-views.vue?raw'; import './data-grid-template.stories.scss?module'; import { type BentoDataGridTemplateTabs } from './data-grid-template.types'; import BentoDataGridTemplate from './data-grid-template.vue'; const meta: Meta = { title: 'Data grid template', component: BentoDataGridTemplate, parameters: { layout: 'fullscreen', }, }; const HEADER_PROPS = { title: 'Payments', actions: [ { title: 'Primary action', event: () => undefined }, { title: 'Secondary action', event: () => undefined }, { title: 'Tetiary action', event: () => undefined }, ], infoIconTooltipText: 'Title Tooltip Text', }; const HEADER_PROPS_DOCS = { title: 'Payments', actions: [ { title: 'Primary action', event: () => undefined }, { title: 'Secondary action', event: () => undefined }, { title: 'Tetiary action', event: () => undefined }, ], infoIconTooltipText: 'Title Tooltip Text', }; const PAGINATION_DOCS = { description: 'datagrid navigation', hasNext: true, size: 10 }; const DEFAULT_COLUMNS: Array<BentoColumn> = [ { field: 'name', label: 'Name', minWidth: 300, mandatory: true }, { field: 'company', label: 'Reference', minWidth: 150 }, { field: 'payment', label: 'Payment', width: 200, minWidth: 150 }, ]; const DATA_GRID_1_DATA: BentoDatagridData = Array.from({ length: 50 }, (_, index) => ({ name: `Name ${index + 1}`, company: `Company ${index + 1}`, payment: `Payment ${index + 1}`, id: `${index + 1}`, })); const FILTERS: BentoFilterBarModel = [ { field: 'name', label: 'Name', type: BentoFilterItemType.INPUT, }, { field: 'company', label: 'Company', type: BentoFilterItemType.INPUT, }, ]; const FILTER_VALUES: BentoFilterValues = [ { field: 'company', value: 'Company 1', }, ]; const FILTERS_DOCS = `[ { field: 'name', label: 'Name', type: BentoFilterItemType.INPUT, }, { field: 'company', label: 'Company', type: BentoFilterItemType.INPUT, }, ]`; const FILTER_VALUES_DOCS = `[ { field: 'company', value: 'Company 1' }, ]`; const TABS_ARGS: BentoDataGridTemplateTabs = { tabs: [{ title: 'Data grid title 1' }, { title: 'Data grid title 2' }], }; const INSPECTOR_ARGS: BentoInspectorProps = { title: 'Title', size: 'large', isOpen: false, activePage: '', expandable: true, }; const BULK_ACTIONS = [ { title: 'Edit', event: () => undefined, }, { title: 'Delete', critical: true, event: () => undefined, }, ]; const DATA_GRID_1_ARGS = { data: DATA_GRID_1_DATA, columns: DEFAULT_COLUMNS, allowColumnDragAndDrop: false, pagination: {}, filterSearchTerm: '', highlightedRows: [DATA_GRID_1_DATA[0].id], selectable: true, selection: [DATA_GRID_1_DATA[2].id], bulkActions: BULK_ACTIONS, stickyPagination: true, }; const DATA_GRID_2_DATA: BentoDatagridData = Array.from({ length: 30 }, (_, index) => ({ name: `Name ${index + 1}`, company: `Company ${index + 1}`, payment: `Payment ${index + 1}`, })); const DATA_GRID_2_ARGS = { data: DATA_GRID_2_DATA, columns: DEFAULT_COLUMNS, allowColumnDragAndDrop: false, pagination: {}, }; export default meta; type Story = StoryObj<typeof BentoDataGridTemplate>; const defaultCode = ` <template> <bento-data-grid-template :header="header" :tabs="tabs" sticky-tabs> <template #tab-1> <bento-data-grid :columns="columns" :data="dataArray" :pagination.sync="pagination" :selection.sync="selection" :bulk-actions="bulkActions" selectable sticky-pagination @navigate="clickNavigate" /> </template> <template #tab-2> <bento-data-grid :columns="columns" :data="dataArray" :filter-search-term.sync="searchTerm" :filters="filtersConfig" :filter-values.sync="filterValues" :sort-by.sync="sortBy" /> </template> </bento-data-grid-template> </template> <script setup lang="ts"> import { BentoCountryCode, type BentoColumn, type BentoDatagridSortByColumn, type BentoDatagridDataItem, BentoDataGridTemplate, BentoDataGrid, type BentoDataGridTemplateHeader, type BentoDatagridPaginationProps, type BentoFilterBarModel, BentoFilterItemType, } from '@adyen/bento-vue2'; import messages from './messages.json'; const { t } = useI18n({ messages }); const header: BentoDataGridTemplateHeader = { title: 'Payments', actions: [ { title: 'Primary action', event: () => {} }, { title: 'Secondary action', event: () => {} }, { title: 'Tetiary action', event: () => {} }, ], infoIconTooltipText: 'Title Tooltip Text', }; const tabs: BentoDataGridTemplateTabs = { tabs: [{ title: 'Data grid title 1' }, { title: 'Data grid title 2' }], }; const columns = computed<BentoColumn[]>(() => [ { field: 'name', label: t('Name'), minWidth: 300, mandatory: true, frozen: true, autoWidth: true, sortable: true, }, { field: 'company', label: t('Reference') }, { field: 'payment', label: t('Payment'), width: 200, minWidth: 150 }, ]); const filtersConfig = computed<BentoFilterBarModel>(() => [ { field: 'company', label: t('Company'), type: BentoFilterItemType.INPUT, }, { field: 'countryCode', label: t('Country'), options: { listboxItems: [ { value: BentoCountryCode.NL, }, { value: BentoCountryCode.BE, }, ], variant: 'name', }, type: BentoFilterItemType.SELECT_COUNTRY, }, ]); // Watch this to keep track if the user filters data const filterValues = ref(); // Watch this to keep track if the user sorts data const sortBy = ref<BentoDatagridSortByColumn[]>([]); // Watch this to keep track if the user searches for data const searchTerm = ref(''); // Watch this to keep track if the user pages through the data const pagination = ref<BentoDatagridPaginationProps>({ description: 'datagrid 1 navigation', hasNext: true, size: 10 }); const selection = ref([]); const bulkActions = [ { title: 'Edit', event: () => undefined, }, { title: 'Delete', critical: true, event: () => undefined, }, ]; // This is a contrived example of the dataArray as this will normally be retried via an API const dataArray = ref<BentoDatagridDataItem[]>([ { id: '03c0a799-1ced-4017-aea3-0cebb0106335', name: 'Shepherd Kane', payment: 160405, company: 'VURBO', registered: '2023-06-30T13:56:09.498Z', tags: ['deserunt', 'et', 'esse'], reference: 'UnbQaUncf3eR1D8XUBqn_UnbQaUncf3eR1D8XUBqn_UnbQaUncf3eR1D8XUBqn', paymentStatus: 1, countryCode: BentoCountryCode.NL, }, { id: 'b6d4f1fd-b1f6-40a6-a443-f785c89604ef', name: 'Santos Palmer', payment: 163500, company: 'POLARAX', registered: '2023-04-28T13:11:09.498Z', tags: ['et', 'Lorem', 'sint'], reference: 'IxUZ9FsEPCZ9dFFPpI9C', paymentStatus: 2, countryCode: BentoCountryCode.BE, }, ]); </script> `; export const Default: Story = { render: (_args, { argTypes }) => ({ components: { BentoDataGrid, BentoDataGridTemplate, }, props: Object.keys(argTypes), template: ` <bento-data-grid-template v-bind="args"> <template #infoIconTooltipContent>Test</template> <template #tab-1><bento-data-grid v-bind="dataGrid1Props" :filters="filters" :filter-values.sync="filterValues" :selection.sync="selection" column-panel /></template> <template #tab-2><bento-data-grid v-bind="dataGrid2Props" /></template> <template #inspector-content>Hello</template> </bento-data-grid-template> `, setup(props) { const args = isVue2 ? props : _args; const filters = ref<BentoFilterBarModel>(args?.filters ?? FILTERS); const filterValues = ref<BentoFilterValues>(args?.filterValues ?? FILTER_VALUES); const selection = ref(DATA_GRID_1_ARGS.selection); const dataGrid1Props = DATA_GRID_1_ARGS; const dataGrid2Props = DATA_GRID_2_ARGS; return { // Values args, dataGrid1Props, dataGrid2Props, filters, filterValues, selection, }; }, }), args: { header: HEADER_PROPS, tabs: TABS_ARGS, inspector: INSPECTOR_ARGS, }, parameters: storybookDocsParameter(defaultCode), }; const additionalContentCode = ` <bento-data-grid-template :header="${JSON.stringify(HEADER_PROPS_DOCS)}" :tabs="${JSON.stringify( TABS_ARGS )}" sticky-tabs> <template #additionalContent> Your additional content/component here </template> <template #tab-1> <bento-data-grid :columns="${JSON.stringify(DEFAULT_COLUMNS)}" :data="dataArray" :pagination="${JSON.stringify(PAGINATION_DOCS)}" @navigate="clickNavigate" /> </template> <template #tab-2> <bento-data-grid :columns="${JSON.stringify(DEFAULT_COLUMNS)}" :data="dataArray" :filter-search-term.sync="searchTerm" :filters="${FILTERS_DOCS}" :filter-values.sync="${FILTER_VALUES_DOCS}" @filter-search-clear="onSearchCleared" @filter-search-input="onSearchInput" /> </template> </bento-data-grid-template> `; export const withAdditionalContent: Story = { render: (_args, { argTypes }) => ({ components: { BentoCountry, BentoDataGrid, BentoDataGridTemplate, BentoStatus, BentoSummaryGrid, BentoSummaryGridItemAmount, BentoSummaryGridItemCustom, }, props: Object.keys(argTypes), template: ` <bento-data-grid-template v-bind="args"> <template #additionalContent> <bento-summary-grid> <template #cell-1-1> <bento-summary-grid-item-custom title="Title" info-icon-tooltip-text="Text for icon" > <bento-status variant="green"> Status </bento-status> </bento-summary-grid-item-custom> </template> <template #cell-1-2> <bento-summary-grid-item-amount title="Title" label="€200.00" secondary-label="/ day" info-icon-tooltip-text="Text for icon" copy="Copy this to clipboard" /> </template> <template #cell-1-3> <bento-summary-grid-item-custom title="Title" info-icon-tooltip-text="Text for icon" > <bento-country :code="BentoCountryCode.NL" /> </bento-summary-grid-item-custom> </template> </bento-summary-grid> </template> <template #tab-1><bento-data-grid v-bind="dataGrid1Props" :filters="filters" :filter-values.sync="filterValues" /></template> <template #tab-2><bento-data-grid v-bind="dataGrid2Props" /></template> </bento-data-grid-template> `, setup(props) { const args = isVue2 ? props : _args; const filters = ref<BentoFilterBarModel>(args?.filters ?? FILTERS); const filterValues = ref<BentoFilterValues>(args?.filterValues ?? FILTER_VALUES); const dataGrid1Props = DATA_GRID_1_ARGS; const dataGrid2Props = DATA_GRID_2_ARGS; return { // Values args, dataGrid1Props, dataGrid2Props, filters, filterValues, // Enums BentoCountryCode, }; }, }), args: { header: HEADER_PROPS, tabs: TABS_ARGS, }, parameters: storybookDocsParameter(additionalContentCode), }; const singularDataGridCode = ` <bento-data-grid-template :header="${JSON.stringify(HEADER_PROPS)}" sticky-tabs> <bento-data-grid :columns="${JSON.stringify(DEFAULT_COLUMNS)}" :data="dataArray" :pagination="${JSON.stringify(PAGINATION_DOCS)}" @navigate="clickNavigate" :filter-search-term.sync="searchTerm" :filters="${FILTERS_DOCS}" :filter-values.sync="${FILTER_VALUES_DOCS}" @filter-search-clear="onSearchCleared" @filter-search-input="onSearchInput" /> </bento-data-grid-template> `; export const singularDataGrid: Story = { render: (_args, { argTypes }) => ({ components: { BentoDataGrid, BentoDataGridTemplate }, props: Object.keys(argTypes), template: ` <bento-data-grid-template v-bind="args"> <bento-data-grid v-bind="dataGridProps" :filters="filters" :filter-values.sync="filterValues" /> </bento-data-grid-template> `, setup(props) { const args = isVue2 ? props : _args; const filters = ref<BentoFilterBarModel>(args?.filters ?? FILTERS); const filterValues = ref<BentoFilterValues>(args?.filterValues ?? FILTER_VALUES); const dataGridProps = DATA_GRID_1_ARGS; return { // Values args, dataGridProps, filters, filterValues, }; }, }), args: { header: HEADER_PROPS, }, parameters: storybookDocsParameter(singularDataGridCode), }; const inspectorCode = ` <template> <bento-data-grid-template :header="header" :inspector="computedInspectorProps" @update:is-open:inspector="isInspectorOpen = $event" @update:active-page:inspector="inspectorActivePage = $event" > <template #default> <bento-data-grid :columns="columns" :data="dataArray" /> </template> <template #inspector-content> <div style="padding: 1rem;"> <bento-typography variant="title" el="h3"> Details for: {{ inspectorTitle }} </bento-typography> </div> </template> </bento-data-grid-template> </template> <script setup lang="ts"> import { ref, computed, onMounted } from 'vue'; import { BentoDataGridTemplate, BentoDataGrid, BentoTypography, } from '@adyen/bento-vue2'; import type { BentoDataGridTemplateHeader, BentoColumn, BentoDatagridDataItem } from '@adyen/bento-vue3'; const isInspectorOpen = ref(true); const inspectorTitle = ref('Shepherd Kane'); const inspectorActivePage = ref('id-1'); const pageFocusAnchorRef = ref<HTMLElement | null>(null); const dataArray = ref([ { id: '1', name: 'Shepherd Kane', company: 'Company 1', payment: 1604.05 }, { id: '2', name: 'Santos Palmer', company: 'Company 2', payment: 1635.00 }, ]); const openInspector = (item) => { inspectorTitle.value = item.name as string; isInspectorOpen.value = true; inspectorActivePage.value = item.id as string; const row = document.querySelector(\`[role="row"][aria-rowindex="\${item.rowIndex + 1}"]\`); pageFocusAnchorRef.value = row?.querySelector('[role="gridcell"]') as HTMLElement; }; const columns = computed<BentoColumn[]>(() => [ { field: 'name', label: 'Name', cellActions: [{ variant: 'open', event: openInspector }], }, { field: 'payment', label: 'Payment (€)', width: 200, }, ]); const header = ref<BentoDataGridTemplateHeader>({ title: 'Payments', infoIconTooltipText: 'Click the > icon on a row to open the inspector.', }); const computedInspectorProps = computed(() => ({ isOpen: isInspectorOpen.value, title: inspectorTitle.value, activePage: inspectorActivePage.value, pageFocusAnchor: pageFocusAnchorRef.value, })); <script> `; export const withInspector: Story = { render: (_args, { argTypes }) => ({ components: { BentoDataGrid, BentoDataGridTemplate, BentoTypography, BentoButton, }, props: Object.keys(argTypes), template: ` <bento-data-grid-template v-bind="args" :inspector="computedInspectorProps" @update:is-open:inspector="isInspectorOpen = $event" @update:active-page:inspector="inspectorActivePage = $event" > <template #default> <bento-data-grid v-bind="dataGridProps" :filters="dataGridFilters" :filter-values.sync="dataGridFilterValues" /> </template> <template #inspector-content> <bento-typography v-for="i in 10" :key="i" style="padding: 5px"> {{ inspectorContent }} </bento-typography> </template> </bento-data-grid-template> `, setup(props) { const args = isVue2 ? props : _args; const isInspectorOpen = ref(args.inspector.isOpen); const inspectorTitle = ref(args.inspector.title); const inspectorActivePage = ref(''); const dataGridFilters = ref<BentoFilterBarModel>(args?.filters ?? FILTERS); const dataGridFilterValues = ref<BentoFilterValues>(args?.filterValues ?? []); const inspectorContent = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'; const cellWithActions = { ...DEFAULT_COLUMNS[0], cellActions: [{ variant: 'open', event: item => openInspector(item) }], } satisfies BentoColumn; const columnsWithActions: Array<BentoColumn> = [cellWithActions, ...DEFAULT_COLUMNS.slice(1, 2)]; const dataGridProps = { ...DATA_GRID_1_ARGS, columns: columnsWithActions }; const pageFocusAnchorRef = ref<HTMLElement | null>(null); // Find the element after the component has mounted in the browser onMounted(() => { pageFocusAnchorRef.value = document.body .querySelector('[role="row"][aria-rowindex="1"]') .querySelectorAll('[role="gridcell"]')[0] as HTMLElement; }); const openInspector = item => { inspectorTitle.value = item.name; isInspectorOpen.value = true; inspectorActivePage.value = item.name; pageFocusAnchorRef.value = document.body .querySelector(`[role="row"][aria-rowindex="${item.id}"]`) .querySelectorAll('[role="gridcell"]')[0] as HTMLElement; }; const computedInspectorProps = computed(() => ({ ...args.inspector, isOpen: isInspectorOpen.value, title: inspectorTitle.value, activePage: inspectorActivePage.value, pageFocusAnchor: pageFocusAnchorRef.value, })); return { args, dataGridProps, dataGridFilters, dataGridFilterValues, isInspectorOpen, inspectorActivePage, computedInspectorProps, inspectorContent, openInspector, }; }, }), args: { header: HEADER_PROPS, inspector: { title: DATA_GRID_1_DATA[0].name, isOpen: true, activePage: DATA_GRID_1_DATA[0].name, }, }, parameters: storybookDocsParameter(inspectorCode), }; export const withHeaderWithViews: Story = { render: (_args, { argTypes }) => ({ components: { BentoDataGrid, BentoDataGridTemplate, BentoHeaderWithViews, }, props: Object.keys(argTypes), template: ` <bento-data-grid-template v-bind="args"> <template #header> <bento-header-with-views :actions="headerActions" description="Description" title="Page Title" :hasChanges="false" skipUnsavedChangesText="Don’t show this message again" :views="headerViews" /> </template> <template #infoIconTooltipContent>Test</template> <template #tab-1><bento-data-grid v-bind="dataGrid1Props" :filters="filters" :filter-values.sync="filterValues" column-panel /></template> <template #tab-2><bento-data-grid v-bind="dataGrid2Props" /></template> <template #inspector-content>Hello</template> </bento-data-grid-template> `, setup(props) { const args = isVue2 ? props : _args; const filters = ref<BentoFilterBarModel>(args?.filters ?? FILTERS); const filterValues = ref<BentoFilterValues>(args?.filterValues ?? FILTER_VALUES); const dataGrid1Props = DATA_GRID_1_ARGS; const dataGrid2Props = DATA_GRID_2_ARGS; const headerViews: Array<BentoHeaderWithViewsItem> = [ { icon: 'stack', iconColor: 'primary', label: 'View 1', }, { icon: 'stack', iconColor: 'primary', label: 'View 2', }, ]; const headerActions = [ { title: 'Primary action', }, { title: 'Secondary action', }, ]; return { // Values args, dataGrid1Props, dataGrid2Props, filters, filterValues, headerActions, headerViews, }; }, }), args: { tabs: TABS_ARGS, inspector: INSPECTOR_ARGS, }, parameters: storybookDocsParameter(DataGridTemplateWithHeaderWithViews), };
@@ -0,0 +1 @@
1
+ import { type Ref, type UnwrapRef } from 'vue'; import type { BentoTab } from '@/components/tabs'; import type { BentoHeader } from '@/components/header'; import { type BentoInspectorProps } from '@/components/inspector'; import { type Expand } from '@/types/prop-types'; export type BentoDataGridTemplateDataGrid = () => { additionalContentSlotRef?: Ref<UnwrapRef<HTMLDivElement>> | null; isDataGridTemplate: boolean; stickyAdditionalContent?: Ref<boolean>; stickyTabs: Ref<boolean>; tabsRef: Ref<UnwrapRef<HTMLDivElement>> | null; }; export type BentoDataGridTemplateTab = InstanceType<typeof BentoTab>['$props']; export type BentoDataGridTemplateHeader = InstanceType<typeof BentoHeader>['$props']; export interface BentoDataGridTemplateTabs { activeTabIndex?: number; tabs: Array<BentoDataGridTemplateTab>; } export type BentoDataGridTemplateInspector = Expand< Omit<BentoInspectorProps, 'activePage'> & { activePage: BentoInspectorProps['activePage']; } >;