frappe-ui 1.0.0-beta.3 → 1.0.0-beta.5

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 (302) hide show
  1. package/frappe/Billing/SignupBanner.vue +1 -1
  2. package/frappe/Billing/TrialBanner.vue +1 -1
  3. package/frappe/DataImport/DataImport.vue +1 -1
  4. package/frappe/DataImport/ImportSteps.vue +6 -6
  5. package/frappe/DataImport/PreviewStep.vue +8 -8
  6. package/frappe/DataImport/TemplateModal.vue +1 -1
  7. package/frappe/DataImport/UploadStep.vue +4 -4
  8. package/frappe/Filter/Filter.vue +1 -1
  9. package/frappe/Help/HelpModal.vue +1 -1
  10. package/frappe/Link/stories/Suffix.vue +2 -2
  11. package/frappe/Onboarding/GettingStartedBanner.vue +1 -1
  12. package/frappe/drive/components/AppSwitcher.vue +1 -1
  13. package/frappe/drive/components/InfoDialog.vue +2 -2
  14. package/frappe/drive/components/MoveDialog.vue +1 -1
  15. package/frappe/drive/components/Select/Select.vue +2 -2
  16. package/icons/IconPicker.vue +1 -1
  17. package/package.json +60 -33
  18. package/src/components/Alert/Alert.md +4 -0
  19. package/src/components/Alert/Alert.vue +4 -4
  20. package/src/components/Autocomplete/Autocomplete.vue +3 -3
  21. package/src/components/Avatar/Avatar.md +4 -0
  22. package/src/components/Avatar/Avatar.vue +4 -4
  23. package/src/components/Badge/Badge.api.md +1 -1
  24. package/src/components/Badge/Badge.cy.ts +34 -16
  25. package/src/components/Badge/Badge.md +20 -4
  26. package/src/components/Badge/Badge.vue +60 -45
  27. package/src/components/Badge/stories/CallMeta.vue +35 -0
  28. package/src/components/Badge/stories/EventStatus.vue +16 -0
  29. package/src/components/Badge/stories/ListStatus.vue +91 -0
  30. package/src/components/Badge/stories/Reactions.vue +33 -0
  31. package/src/components/Badge/stories/RowTags.vue +39 -0
  32. package/src/components/Badge/types.ts +1 -2
  33. package/src/components/Breadcrumbs/Breadcrumbs.md +4 -0
  34. package/src/components/Breadcrumbs/Breadcrumbs.vue +3 -3
  35. package/src/components/Button/Button.api.md +37 -32
  36. package/src/components/Button/Button.cy.ts +18 -2
  37. package/src/components/Button/Button.md +20 -8
  38. package/src/components/Button/Button.vue +76 -64
  39. package/src/components/Button/stories/InlineActions.vue +10 -0
  40. package/src/components/Button/stories/LiveClassCard.vue +34 -0
  41. package/src/components/Button/stories/SectionAction.vue +17 -0
  42. package/src/components/Button/stories/SectionControls.vue +28 -0
  43. package/src/components/Button/stories/SelectionToolbar.vue +20 -0
  44. package/src/components/Button/stories/StackedActions.vue +10 -0
  45. package/src/components/Button/types.ts +1 -1
  46. package/src/components/Calendar/Calendar.vue +1 -1
  47. package/src/components/Calendar/CalendarDaily.vue +1 -1
  48. package/src/components/Calendar/CalendarMonthEvent.vue +1 -1
  49. package/src/components/Calendar/CalendarMonthly.vue +2 -2
  50. package/src/components/Calendar/CalendarWeekDayEvent.vue +2 -2
  51. package/src/components/Calendar/CalendarWeekly.vue +2 -2
  52. package/src/components/Calendar/EventModalContent.vue +6 -6
  53. package/src/components/Calendar/ShowMoreCalendarEvent.vue +1 -1
  54. package/src/components/Calendar/stories/CustomHeader.vue +1 -1
  55. package/src/components/Card.vue +1 -1
  56. package/src/components/Charts/ECharts.vue +1 -1
  57. package/src/components/Charts/NumberChart.vue +7 -7
  58. package/src/components/Charts/eChartOptions.ts +6 -6
  59. package/src/components/Checkbox/Checkbox.md +28 -0
  60. package/src/components/Checkbox/Checkbox.vue +5 -5
  61. package/src/components/Checkbox/stories/Group.vue +27 -0
  62. package/src/components/Checkbox/stories/HorizontalGroup.vue +24 -0
  63. package/src/components/Checkbox/stories/SettingRow.vue +23 -0
  64. package/src/components/Checkbox/stories/WithDescription.vue +27 -0
  65. package/src/components/Combobox/Combobox.md +4 -0
  66. package/src/components/Combobox/Combobox.vue +2 -2
  67. package/src/components/Combobox/ComboboxResults.vue +1 -1
  68. package/src/components/Combobox/stories/Clearable.vue +2 -2
  69. package/src/components/Combobox/stories/CreateNew.vue +1 -1
  70. package/src/components/Combobox/stories/InDialog.vue +1 -1
  71. package/src/components/CommandPalette/CommandPaletteItem.vue +1 -1
  72. package/src/components/DatePicker/CalendarPanel.vue +7 -7
  73. package/src/components/DatePicker/DatePicker.vue +1 -1
  74. package/src/components/DatePicker/DateRangePicker.vue +1 -1
  75. package/src/components/DatePicker/DateTimePicker.vue +1 -1
  76. package/src/components/DatePicker/stories/Range.vue +1 -1
  77. package/src/components/Dialog/Dialog.md +4 -0
  78. package/src/components/Dialog/Dialog.vue +8 -7
  79. package/src/components/Dialog/stories/CommandPalette.vue +1 -1
  80. package/src/components/Dialog/stories/Wizard.vue +1 -1
  81. package/src/components/Divider/Divider.api.md +1 -1
  82. package/src/components/Divider/Divider.md +4 -0
  83. package/src/components/Dropdown/Dropdown.md +4 -0
  84. package/src/components/Dropdown/stories/05_KebabMenu.vue +1 -1
  85. package/src/components/Dropdown/stories/06_UserMenu.vue +1 -1
  86. package/src/components/Dropdown/utils.ts +3 -3
  87. package/src/components/ErrorMessage/ErrorMessage.cy.ts +1 -1
  88. package/src/components/ErrorMessage/ErrorMessage.md +4 -0
  89. package/src/components/ErrorMessage/ErrorMessage.vue +1 -1
  90. package/src/components/FormControl/FormControl.md +4 -0
  91. package/src/components/FormControl/stories/RealForm.vue +3 -3
  92. package/src/components/Icon/Icon.cy.ts +78 -0
  93. package/src/components/Icon/Icon.vue +50 -0
  94. package/src/components/Icon/index.ts +1 -0
  95. package/src/components/InputLabeling/InputError.vue +1 -1
  96. package/src/components/InputLabeling/RequiredIndicator.vue +1 -1
  97. package/src/components/ItemListRow/ItemListRow.vue +2 -2
  98. package/src/components/ItemListRow/stories/RowStates.vue +1 -1
  99. package/src/components/KeyboardShortcut.vue +4 -8
  100. package/src/components/KeyboardShortcutsModal/KeyboardShortcutsModal.vue +2 -2
  101. package/src/components/ListFilter/ListFilter.vue +2 -2
  102. package/src/components/ListItem.vue +1 -1
  103. package/src/components/ListView/ListEmptyState.vue +1 -1
  104. package/src/components/ListView/ListGroupHeader.vue +2 -2
  105. package/src/components/ListView/ListRow.vue +1 -1
  106. package/src/components/ListView/ListSelectBanner.vue +1 -1
  107. package/src/components/ListView/stories/CustomList.vue +1 -1
  108. package/src/components/ListView/stories/GroupedRows.vue +1 -1
  109. package/src/components/LoadingIndicator.vue +13 -22
  110. package/src/components/LoadingText.vue +3 -13
  111. package/src/components/MonthPicker/MonthPicker.vue +1 -1
  112. package/src/components/MultiSelect/MultiSelect.md +4 -0
  113. package/src/components/MultiSelect/MultiSelect.vue +2 -2
  114. package/src/components/MultiSelect/MultiSelectResults.vue +1 -1
  115. package/src/components/MultiSelect/stories/Members.vue +1 -1
  116. package/src/components/MultiSelect/stories/TagsTrigger.vue +1 -1
  117. package/src/components/Password/Password.md +4 -0
  118. package/src/components/Password/Password.vue +2 -2
  119. package/src/components/Pill/Pill.api.md +99 -0
  120. package/src/components/Pill/Pill.md +20 -0
  121. package/src/components/Pill/Pill.vue +161 -0
  122. package/src/components/Pill/index.ts +10 -0
  123. package/src/components/Pill/stories/BrowserEdges.vue +42 -0
  124. package/src/components/Pill/stories/Sizes.vue +49 -0
  125. package/src/components/Pill/stories/Variants.vue +53 -0
  126. package/src/components/Pill/types.ts +43 -0
  127. package/src/components/Popover/Popover.api.md +1 -1
  128. package/src/components/Popover/Popover.vue +1 -1
  129. package/src/components/Progress/Progress.cy.ts +2 -2
  130. package/src/components/Progress/Progress.md +4 -0
  131. package/src/components/Progress/Progress.vue +4 -4
  132. package/src/components/Rating/Rating.md +4 -0
  133. package/src/components/Rating/Rating.vue +3 -3
  134. package/src/components/Rating/stories/CustomSlot.vue +2 -2
  135. package/src/components/Select/Select.cy.ts +0 -1
  136. package/src/components/Select/Select.md +4 -0
  137. package/src/components/Select/Select.vue +2 -2
  138. package/src/components/Select/stories/Example.vue +2 -2
  139. package/src/components/Select/stories/States.vue +1 -1
  140. package/src/components/Select/stories/TriggerSlots.vue +2 -2
  141. package/src/components/Select/utils.ts +3 -3
  142. package/src/components/Sidebar/Sidebar.api.md +9 -3
  143. package/src/components/Sidebar/Sidebar.vue +1 -1
  144. package/src/components/Sidebar/SidebarHeader.vue +2 -2
  145. package/src/components/Sidebar/SidebarItem.vue +1 -1
  146. package/src/components/Slider/Slider.md +4 -0
  147. package/src/components/Slider/Slider.vue +7 -7
  148. package/src/components/Spinner/Spinner.api.md +32 -0
  149. package/src/components/Spinner/Spinner.cy.ts +87 -0
  150. package/src/components/Spinner/Spinner.md +21 -0
  151. package/src/components/Spinner/Spinner.vue +168 -0
  152. package/src/components/Spinner/index.ts +2 -0
  153. package/src/components/Spinner/stories/InContext.vue +49 -0
  154. package/src/components/Spinner/stories/Sizes.vue +12 -0
  155. package/src/components/Spinner/stories/Themes.vue +10 -0
  156. package/src/components/Spinner/stories/Track.vue +12 -0
  157. package/src/components/Spinner/types.ts +14 -0
  158. package/src/components/Switch/Switch.md +4 -0
  159. package/src/components/Switch/Switch.vue +4 -5
  160. package/src/components/TabButtons/TabButtons.api.md +52 -2
  161. package/src/components/TabButtons/TabButtons.cy.ts +18 -5
  162. package/src/components/TabButtons/TabButtons.md +49 -0
  163. package/src/components/TabButtons/TabButtons.vue +206 -109
  164. package/src/components/TabButtons/index.ts +11 -1
  165. package/src/components/TabButtons/stories/PrefixSuffix.vue +65 -0
  166. package/src/components/TabButtons/stories/Sizes.vue +26 -0
  167. package/src/components/TabButtons/stories/Variants.vue +40 -0
  168. package/src/components/TabButtons/stories/Vertical.vue +64 -0
  169. package/src/components/TabButtons/types.ts +49 -0
  170. package/src/components/Tabs/Tabs.md +4 -0
  171. package/src/components/Tabs/Tabs.vue +1 -1
  172. package/src/components/TextEditor/TextEditor.cy.ts +1 -1
  173. package/src/components/TextEditor/TextEditor.vue +5 -2
  174. package/src/components/TextEditor/components/FontColor.vue +1 -1
  175. package/src/components/TextEditor/components/LinkPopup.vue +1 -1
  176. package/src/components/TextEditor/components/MediaNodeView.vue +17 -17
  177. package/src/components/TextEditor/components/MentionList.vue +1 -1
  178. package/src/components/TextEditor/components/Menu.vue +3 -3
  179. package/src/components/TextEditor/extensions/iframe/IframeNodeView.vue +1 -1
  180. package/src/components/TextEditor/extensions/iframe/InsertIframe.vue +2 -2
  181. package/src/components/TextEditor/extensions/iframe/iframe-extension.ts +62 -19
  182. package/src/components/TextEditor/extensions/image-group/ImageGroupNodeView.vue +1 -1
  183. package/src/components/TextEditor/extensions/image-group/ImageGroupUploadDialog.vue +4 -4
  184. package/src/components/TextEditor/extensions/suggestion/SuggestionList.vue +1 -1
  185. package/src/components/TextEditor/extensions/toc-node/TocNodeView.vue +1 -1
  186. package/src/components/TextInput/TextInput.cy.ts +3 -3
  187. package/src/components/TextInput/TextInput.md +4 -0
  188. package/src/components/TextInput/TextInput.vue +6 -6
  189. package/src/components/TextInput/stories/Slots.vue +1 -1
  190. package/src/components/Textarea/Textarea.cy.ts +1 -1
  191. package/src/components/Textarea/Textarea.md +4 -0
  192. package/src/components/Textarea/Textarea.vue +6 -6
  193. package/src/components/TimePicker/TimePicker.vue +1 -1
  194. package/src/components/TimePicker/stories/Range.vue +1 -1
  195. package/src/components/Toast/Toast.md +1 -1
  196. package/src/components/Toast/Toast.vue +7 -7
  197. package/src/components/Toast/ToastProvider.vue +9 -9
  198. package/src/components/Toast/stories/CustomIcon.vue +1 -1
  199. package/src/components/Tooltip/Tooltip.api.md +4 -4
  200. package/src/components/Tooltip/Tooltip.md +4 -0
  201. package/src/components/Tooltip/Tooltip.vue +1 -1
  202. package/src/components/Tooltip/TooltipBubble.vue +2 -2
  203. package/src/components/Tooltip/stories/Slots.vue +2 -2
  204. package/src/components/VueGridLayout/Layout.vue +1 -1
  205. package/src/components/shared/selection/utils.ts +6 -6
  206. package/src/index.ts +5 -1
  207. package/src/molecules/editor/EditorBubbleMenu.vue +1 -1
  208. package/src/molecules/editor/EditorContent.vue +48 -7
  209. package/src/molecules/editor/EditorFloatingMenu.vue +1 -1
  210. package/src/molecules/editor/EditorTableMenu.vue +108 -21
  211. package/src/molecules/editor/MenuItems.vue +10 -3
  212. package/src/molecules/editor/commands.ts +3 -2
  213. package/src/molecules/editor/components/EditorDropZone.vue +27 -11
  214. package/src/molecules/editor/components/EditorPopover.vue +1 -1
  215. package/src/molecules/editor/components/MediaNodeView.vue +156 -49
  216. package/src/molecules/editor/components/MediaResizeHandles.vue +36 -0
  217. package/src/molecules/editor/components/MediaToolbar.vue +108 -54
  218. package/src/molecules/editor/components/TableContextMenu.vue +65 -8
  219. package/src/molecules/editor/components/UploadProgressIndicator.vue +33 -0
  220. package/src/molecules/editor/components/VideoControls.vue +208 -0
  221. package/src/molecules/editor/components/font-color/swatches.ts +1 -1
  222. package/src/molecules/editor/components/media-node-view-controller.ts +4 -4
  223. package/src/molecules/editor/components/media-node-view-utils.test.ts +0 -13
  224. package/src/molecules/editor/components/media-node-view-utils.ts +0 -10
  225. package/src/molecules/editor/components/table-size-picker/TableSizePicker.vue +92 -0
  226. package/src/molecules/editor/components/table-size-picker/tableSizePickerController.ts +40 -0
  227. package/src/molecules/editor/composables/useEditorFileDrop.ts +21 -3
  228. package/src/molecules/editor/composables/useFloatingPopup.ts +1 -0
  229. package/src/molecules/editor/composables/useNodeViewResize.test.ts +60 -11
  230. package/src/molecules/editor/composables/useNodeViewResize.ts +80 -21
  231. package/src/molecules/editor/extensions/content-paste/content-paste-extension.ts +5 -3
  232. package/src/molecules/editor/extensions/iframe/IframeInsertDialog.vue +34 -7
  233. package/src/molecules/editor/extensions/iframe/IframeNodeView.vue +55 -49
  234. package/src/molecules/editor/extensions/iframe/iframe-allowlist.ts +33 -4
  235. package/src/molecules/editor/extensions/iframe/iframe-commands.ts +49 -5
  236. package/src/molecules/editor/extensions/iframe/iframe-embed-utils.ts +30 -0
  237. package/src/molecules/editor/extensions/iframe/iframe-extension.ts +4 -4
  238. package/src/molecules/editor/extensions/iframe/iframeInsertDialogController.ts +12 -1
  239. package/src/molecules/editor/extensions/iframe/index.ts +4 -4
  240. package/src/molecules/editor/extensions/iframe/useIframeDialog.ts +25 -13
  241. package/src/molecules/editor/extensions/image/image-extension.ts +29 -11
  242. package/src/molecules/editor/extensions/image-group/ImageGroupGrid.vue +27 -11
  243. package/src/molecules/editor/extensions/image-group/ImageGroupGridCell.vue +55 -11
  244. package/src/molecules/editor/extensions/image-group/ImageGroupNodeView.vue +64 -31
  245. package/src/molecules/editor/extensions/image-group/ImageGroupUploadDialog.vue +84 -40
  246. package/src/molecules/editor/extensions/image-group/image-group-extension.ts +4 -3
  247. package/src/molecules/editor/extensions/image-group/useImageGroupDialog.ts +116 -17
  248. package/src/molecules/editor/extensions/shared/media-dimensions.ts +36 -3
  249. package/src/molecules/editor/extensions/shared/media-node-ops.ts +17 -0
  250. package/src/molecules/editor/extensions/shared/media-plugin.test.ts +60 -0
  251. package/src/molecules/editor/extensions/shared/media-plugin.ts +1 -0
  252. package/src/molecules/editor/extensions/shared/media-upload-engine.test.ts +39 -2
  253. package/src/molecules/editor/extensions/shared/media-upload-engine.ts +104 -10
  254. package/src/molecules/editor/extensions/shared/media-upload-state.ts +55 -0
  255. package/src/molecules/editor/extensions/shared/media-upload-types.ts +33 -1
  256. package/src/molecules/editor/extensions/shared/suggestion-types.ts +7 -0
  257. package/src/molecules/editor/extensions/shared/upload-types.ts +1 -0
  258. package/src/molecules/editor/extensions/slash-commands/slash-commands-extension.test.ts +38 -0
  259. package/src/molecules/editor/extensions/slash-commands/slash-commands-extension.ts +116 -55
  260. package/src/molecules/editor/extensions/suggestion/SuggestionList.vue +49 -17
  261. package/src/molecules/editor/extensions/table/drag-scroll.ts +154 -0
  262. package/src/molecules/editor/extensions/table/table-navigation.ts +270 -41
  263. package/src/molecules/editor/extensions/table/table-selection-overlay.ts +23 -0
  264. package/src/molecules/editor/extensions/toc-node/TocNodeView.vue +1 -1
  265. package/src/molecules/editor/extensions/video/video-extension.ts +64 -5
  266. package/src/molecules/editor/extensions.ts +143 -5
  267. package/src/molecules/editor/kits.test.ts +12 -1
  268. package/src/molecules/editor/kits.ts +20 -24
  269. package/src/molecules/editor/menu.test.ts +3 -1
  270. package/src/molecules/editor/menu.ts +39 -12
  271. package/src/molecules/editor/stories/Comment.vue +4 -4
  272. package/src/molecules/editor/stories/Inline.vue +1 -1
  273. package/src/molecules/editor/stories/Primitives.vue +1 -1
  274. package/src/molecules/editor/stories/RichText.vue +1 -1
  275. package/src/molecules/editor/style.css +12 -4
  276. package/src/molecules/editor/useEditor.test.ts +4 -0
  277. package/src/molecules/editor/useEditor.ts +7 -3
  278. package/src/utils/config.ts +4 -1
  279. package/src/utils/dialog.cy.ts +9 -9
  280. package/src/utils/fileSize.ts +36 -0
  281. package/src/utils/fileUploadHandler.ts +49 -5
  282. package/src/utils/plugin.js +19 -0
  283. package/src/utils/useFileUpload.ts +68 -22
  284. package/tailwind/audit-token-drift.cjs +176 -0
  285. package/tailwind/colorPalette.js +53 -6
  286. package/tailwind/colors.json +1101 -383
  287. package/tailwind/figma-tokens-to-theme.js +359 -0
  288. package/tailwind/generated/colors.json +1217 -0
  289. package/tailwind/generated/effects.json +41 -0
  290. package/tailwind/generated/radius.json +20 -0
  291. package/tailwind/generated/typography.json +479 -0
  292. package/tailwind/migrate-tokens-v2.js +391 -0
  293. package/tailwind/plugin.js +183 -9
  294. package/tailwind/tokens.js +41 -37
  295. package/src/components/Badge/stories/Themes.vue +0 -10
  296. package/src/components/Badge/stories/Variants.vue +0 -10
  297. package/src/components/Button/stories/Icons.vue +0 -27
  298. package/src/components/Button/stories/Sizes.vue +0 -11
  299. package/src/components/Button/stories/Themes.vue +0 -10
  300. package/src/components/Button/stories/Variants.vue +0 -10
  301. package/src/components/Spinner.vue +0 -3
  302. package/src/components/TabButtons/TabButtons.story.vue +0 -22
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <div
3
3
  v-if="!isSidebarCollapsed"
4
- class="flex flex-col gap-3 shadow-sm rounded-lg py-2.5 px-3 bg-surface-white text-base"
4
+ class="flex flex-col gap-3 shadow-sm rounded-lg py-2.5 px-3 bg-surface-base text-base"
5
5
  >
6
6
  <div class="flex flex-col gap-1">
7
7
  <slot>
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <div
3
3
  v-if="!isSidebarCollapsed && showBanner"
4
- class="flex flex-col gap-3 shadow-sm rounded-lg py-2.5 px-3 bg-surface-modal text-base"
4
+ class="flex flex-col gap-3 shadow-sm rounded-lg py-2.5 px-3 bg-surface-elevation-2 text-base"
5
5
  >
6
6
  <div class="flex flex-col gap-1">
7
7
  <div class="inline-flex text-ink-gray-9 gap-2 items-center font-medium">
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <header
3
- class="sticky flex items-center justify-between space-x-28 top-0 z-10 border-b bg-surface-white px-3 py-2.5 sm:px-5"
3
+ class="sticky flex items-center justify-between space-x-28 top-0 z-10 border-b bg-surface-base px-3 py-2.5 sm:px-5"
4
4
  >
5
5
  <Breadcrumbs :items="breadcrumbs" />
6
6
  <ImportSteps class="flex-1 hidden lg:flex" v-if="step != 'list'" :data="data" :step="step" @updateStep="updateStep" />
@@ -7,10 +7,10 @@
7
7
  @click="emit('updateStep', 'upload', { ...data })"
8
8
  >
9
9
  <FeatherIcon v-if="uploadStepCompleted" name="check" class="size-5 text-sm border rounded-[5px] p-0.5" :class="{
10
- 'text-ink-white bg-surface-gray-7': onUploadStep,
10
+ 'text-ink-base bg-surface-gray-10': onUploadStep,
11
11
  }"/>
12
12
  <div v-else class="text-sm border rounded-[5px] px-1.5 py-0.5" :class="{
13
- 'text-ink-white bg-surface-gray-7': onUploadStep,
13
+ 'text-ink-base bg-surface-gray-10': onUploadStep,
14
14
  }">
15
15
  <span>
16
16
  1
@@ -28,10 +28,10 @@
28
28
  @click="moveToMapStep()"
29
29
  >
30
30
  <FeatherIcon v-if="mapStepCompleted" name="check" class="size-5 text-sm border rounded-[5px] p-0.5" :class="{
31
- 'text-ink-white bg-surface-gray-7': onMapStep,
31
+ 'text-ink-base bg-surface-gray-10': onMapStep,
32
32
  }"/>
33
33
  <div v-else class="text-sm border rounded-[5px] px-1.5 py-0.5" :class="{
34
- 'text-ink-white bg-surface-gray-7': onMapStep,
34
+ 'text-ink-base bg-surface-gray-10': onMapStep,
35
35
  }">
36
36
  <span>
37
37
  2
@@ -49,10 +49,10 @@
49
49
  @click="moveToPreviewStep()"
50
50
  >
51
51
  <FeatherIcon v-if="previewStepCompleted" name="check" class="size-5 text-sm border rounded-[5px] p-0.5" :class="{
52
- 'text-ink-white bg-surface-gray-7': onPreviewStep,
52
+ 'text-ink-base bg-surface-gray-10': onPreviewStep,
53
53
  }"/>
54
54
  <div v-else class="text-sm border rounded-[5px] px-1.5 py-0.5" :class="{
55
- 'text-ink-white bg-surface-gray-7': onPreviewStep,
55
+ 'text-ink-base bg-surface-gray-10': onPreviewStep,
56
56
  }">
57
57
  <span>
58
58
  3
@@ -47,8 +47,8 @@
47
47
  </div>
48
48
  <div class="rounded-md bg-surface-amber-2 p-2 space-y-2 text-xs">
49
49
  <div v-for="warning in warnings" class="flex items-center space-x-2">
50
- <FeatherIcon name="alert-circle" class="size-3 text-ink-amber-3" />
51
- <div v-html="warning.message" class="text-ink-amber-3"></div>
50
+ <FeatherIcon name="alert-circle" class="size-3 text-ink-amber-6" />
51
+ <div v-html="warning.message" class="text-ink-amber-6"></div>
52
52
  </div>
53
53
  </div>
54
54
  </div>
@@ -71,7 +71,7 @@
71
71
  </th>
72
72
  </tr>
73
73
  </thead>
74
- <tbody class="bg-surface-white divide-y divide-surface-gray-2">
74
+ <tbody class="bg-surface-base divide-y divide-surface-gray-2">
75
75
  <tr v-for="(row, rowIndex) in previewData" :key="rowIndex">
76
76
  <td
77
77
  v-for="column in previewColumns"
@@ -117,12 +117,12 @@
117
117
  </th>
118
118
  </tr>
119
119
  </thead>
120
- <tbody class="bg-surface-white divide-y divide-surface-gray-2">
120
+ <tbody class="bg-surface-base divide-y divide-surface-gray-2">
121
121
  <tr v-for="(row, rowIndex) in filteredLogs" :key="rowIndex" class="group">
122
122
  <td class="px-3 py-2 text-sm text-ink-gray-7 border-r">
123
123
  <div class="flex items-center justify-center space-x-2">
124
124
  <div v-if="row.success" class="size-1.5 bg-surface-green-3 rounded"></div>
125
- <div v-else class="size-1.5 bg-surface-red-5 rounded"></div>
125
+ <div v-else class="size-1.5 bg-surface-red-7 rounded"></div>
126
126
  <div>
127
127
  {{ JSON.parse(row["row_indexes"])[0] - 1 }}
128
128
  </div>
@@ -312,11 +312,11 @@ const importErrorCount = computed(() => {
312
312
 
313
313
  const importBannerClass = computed(() => {
314
314
  if (importErrorCount.value == 0) {
315
- return 'bg-surface-green-2 text-ink-green-3'
315
+ return 'bg-surface-green-2 text-ink-green-6'
316
316
  } else if (importSuccessCount.value == 0) {
317
- return 'bg-surface-red-2 text-ink-red-3'
317
+ return 'bg-surface-red-2 text-ink-red-6'
318
318
  } else {
319
- return 'bg-surface-amber-2 text-ink-amber-3'
319
+ return 'bg-surface-amber-2 text-ink-amber-6'
320
320
  }
321
321
  })
322
322
 
@@ -37,7 +37,7 @@
37
37
  <label
38
38
  :for="`checkbox-${doctype}-${field.fieldname}`"
39
39
  :class="{
40
- 'text-ink-red-3': field.reqd
40
+ 'text-ink-red-6': field.reqd
41
41
  }">
42
42
  {{ field.label || field.fieldname }}
43
43
  </label>
@@ -47,7 +47,7 @@
47
47
  </span>
48
48
  </div>
49
49
  </div>
50
- <div v-else-if="showFileSelector && uploading" class="w-4/5 lg:w-2/5 bg-surface-white border rounded-md p-2">
50
+ <div v-else-if="showFileSelector && uploading" class="w-4/5 lg:w-2/5 bg-surface-base border rounded-md p-2">
51
51
  <div class="space-y-2">
52
52
  <div class="font-medium">
53
53
  {{ uploadingdFile.name }}
@@ -58,14 +58,14 @@
58
58
  </div>
59
59
  <div class="w-full bg-surface-gray-1 h-1 rounded-full mt-3">
60
60
  <div
61
- class="bg-surface-gray-7 h-1 rounded-full transition-all duration-500 ease-in-out"
61
+ class="bg-surface-gray-10 h-1 rounded-full transition-all duration-500 ease-in-out"
62
62
  :style="`width: ${uploadProgress}%`"
63
63
  ></div>
64
64
  </div>
65
65
  </div>
66
66
  </div>
67
67
  <div v-else-if="importFile" class="h-[300px] flex items-center justify-center bg-surface-gray-1 border border-dashed border-outline-gray-3 rounded-md">
68
- <div class="w-4/5 lg:w-2/5 bg-surface-white border rounded-md p-2 flex items-center justify-between items-center">
68
+ <div class="w-4/5 lg:w-2/5 bg-surface-base border rounded-md p-2 flex items-center justify-between items-center">
69
69
  <div class="space-y-2">
70
70
  <div class="font-medium leading-5 text-ink-gray-9">
71
71
  {{ importFile.file_name || importFile.split("/").pop() }}
@@ -76,7 +76,7 @@
76
76
  </div>
77
77
  <FeatherIcon
78
78
  name="trash-2"
79
- class="size-4 stroke-1.5 text-ink-red-3 cursor-pointer"
79
+ class="size-4 stroke-1.5 text-ink-red-6 cursor-pointer"
80
80
  @click="deleteFile"
81
81
  />
82
82
  </div>
@@ -133,7 +133,7 @@ const filterCount = computed(() =>
133
133
 
134
134
  <template>
135
135
  <Popover
136
- popover-class="mt-2 p-2 rounded-lg border bg-surface-modal shadow-xl max-w-xl"
136
+ popover-class="mt-2 p-2 rounded-lg border bg-surface-elevation-2 shadow-xl max-w-xl"
137
137
  placement="bottom-end"
138
138
  :matchTargetWidth="true"
139
139
  >
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <div
3
3
  v-show="show"
4
- class="fixed z-50 right-0 w-80 h-[calc(100%_-_80px)] text-ink-gray-9 m-5 mt-[62px] p-3 flex gap-2 flex-col justify-between rounded-lg bg-surface-modal shadow-2xl"
4
+ class="fixed z-50 right-0 w-80 h-[calc(100%_-_80px)] text-ink-gray-9 m-5 mt-[62px] p-3 flex gap-2 flex-col justify-between rounded-lg bg-surface-elevation-2 shadow-2xl"
5
5
  :class="{ 'top-[calc(100%_-_120px)] border': minimize }"
6
6
  @click.stop
7
7
  >
@@ -76,7 +76,7 @@ const selectedUser = computed(() =>
76
76
  class="inline-flex shrink-0 items-center gap-1 rounded-full px-1.5 py-0.5 text-p-xs"
77
77
  :class="
78
78
  selectedUser.enabled
79
- ? 'bg-surface-green-1 text-ink-green-3'
79
+ ? 'bg-surface-green-1 text-ink-green-6'
80
80
  : 'bg-surface-gray-2 text-ink-gray-5'
81
81
  "
82
82
  >
@@ -85,7 +85,7 @@ const selectedUser = computed(() =>
85
85
  :class="
86
86
  selectedUser.enabled
87
87
  ? 'bg-surface-green-3'
88
- : 'bg-surface-gray-5'
88
+ : 'bg-surface-gray-8'
89
89
  "
90
90
  />
91
91
  {{ selectedUser.enabled ? 'Active' : 'Disabled' }}
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <div
3
3
  v-if="!isSidebarCollapsed"
4
- class="flex flex-col gap-3 shadow-sm rounded-lg py-2.5 px-3 bg-surface-modal text-base"
4
+ class="flex flex-col gap-3 shadow-sm rounded-lg py-2.5 px-3 bg-surface-elevation-2 text-base"
5
5
  >
6
6
  <div
7
7
  v-if="stepsCompleted != totalSteps"
@@ -22,7 +22,7 @@ const open = ref(false)
22
22
  <template>
23
23
  <div class="fixed left-0 top-0 h-screen w-3 z-40" @mouseenter="open = true" />
24
24
  <aside
25
- class="fixed left-0 top-0 h-screen z-50 transition-transform duration-300 ease-out bg-surface-white border-r border-gray-200 px-2"
25
+ class="fixed left-0 top-0 h-screen z-50 transition-transform duration-300 ease-out bg-surface-base border-r border-gray-200 px-2"
26
26
  :class="!open && '-translate-x-full'"
27
27
  @mouseleave="open = false"
28
28
  >
@@ -190,12 +190,12 @@ onKeyDown('D', () => {
190
190
  const accessConfig = {
191
191
  team: {
192
192
  icon: LucideBuilding2,
193
- color: 'bg-surface-blue-2 text-ink-blue-2',
193
+ color: 'bg-surface-blue-2 text-ink-blue-5',
194
194
  label: 'Team',
195
195
  },
196
196
  public: {
197
197
  icon: LucideGlobe2,
198
- color: 'bg-surface-red-2 text-ink-red-3',
198
+ color: 'bg-surface-red-2 text-ink-red-6',
199
199
  label: 'Public',
200
200
  },
201
201
  restricted: {
@@ -75,7 +75,7 @@
75
75
  ? 'bg-surface-gray-3'
76
76
  : 'hover:bg-surface-gray-2',
77
77
  entities[0].parent_entity === node.value
78
- ? 'cursor-not-allowed hover:bg-surface-white'
78
+ ? 'cursor-not-allowed hover:bg-surface-base'
79
79
  : 'group',
80
80
  ]"
81
81
  >
@@ -84,7 +84,7 @@ const labelFunction = (val: SelectValue_, selected = false) => {
84
84
  <SelectContent
85
85
  :hide-when-detached="true"
86
86
  :align="'start'"
87
- class="z-10 min-w-[--reka-select-trigger-width] mt-1 bg-surface-modal overflow-hidden rounded-lg shadow-2xl"
87
+ class="z-10 min-w-[--reka-select-trigger-width] mt-1 bg-surface-elevation-2 overflow-hidden rounded-lg shadow-2xl"
88
88
  >
89
89
  <SelectViewport
90
90
  class="max-h-60 overflow-auto p-1.5"
@@ -99,7 +99,7 @@ const labelFunction = (val: SelectValue_, selected = false) => {
99
99
  <hr v-if="optionOrGroup.group === true" class="my-1.5" />
100
100
  <SelectLabel
101
101
  v-else
102
- class="px-2.5 pt-3 pb-1.5 text-sm font-medium text-ink-gray-5 sticky top-0 bg-surface-modal z-10"
102
+ class="px-2.5 pt-3 pb-1.5 text-sm font-medium text-ink-gray-5 sticky top-0 bg-surface-elevation-2 z-10"
103
103
  >
104
104
  {{ optionOrGroup.group }}
105
105
  </SelectLabel>
@@ -182,7 +182,7 @@ defineExpose({
182
182
  </ComboboxAnchor>
183
183
  <ComboboxPortal>
184
184
  <ComboboxContent
185
- class="z-10 w-60 mt-1 bg-surface-modal overflow-hidden rounded-lg shadow-2xl"
185
+ class="z-10 w-60 mt-1 bg-surface-elevation-2 overflow-hidden rounded-lg shadow-2xl"
186
186
  position="popper"
187
187
  @openAutoFocus.prevent
188
188
  @closeAutoFocus.prevent
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "frappe-ui",
3
- "version": "1.0.0-beta.3",
3
+ "version": "1.0.0-beta.5",
4
4
  "description": "A set of components and utilities for rapid UI development",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -17,8 +17,8 @@
17
17
  "test:cypress:coverage": "cross-env COVERAGE=true cypress run --component",
18
18
  "coverage": "yarn test:coverage && yarn test:cypress:coverage && yarn coverage:merge",
19
19
  "coverage:merge": "tsx .github/scripts/merge-coverage.ts",
20
- "type-check": "vue-tsc --noEmit",
21
- "type-check:tsc": "tsc --noEmit",
20
+ "type-check": "vue-tsc --noEmit -p tsconfig.app.json",
21
+ "type-check:tsc": "tsc --noEmit -p tsconfig.app.json",
22
22
  "format": "prettier -w ./src",
23
23
  "bump-and-release": "yarn test && git pull --rebase origin main && yarn run release-patch",
24
24
  "release-patch": "yarn version --patch && git push && git push --tags",
@@ -31,7 +31,8 @@
31
31
  "docs:build": "vitepress build docs",
32
32
  "docs:preview": "vitepress preview docs",
33
33
  "docs:gen": "tsx docs/scripts/propsgen.ts",
34
- "docs:gen:all": "yarn docs:gen --all"
34
+ "docs:gen:all": "yarn docs:gen --all",
35
+ "sync-tokens": "node tailwind/figma-tokens-to-theme.js"
35
36
  },
36
37
  "exports": {
37
38
  ".": {
@@ -98,31 +99,41 @@
98
99
  "@tailwindcss/forms": "^0.5.3",
99
100
  "@tailwindcss/line-clamp": "^0.4.4",
100
101
  "@tailwindcss/typography": "^0.5.16",
101
- "@tiptap/core": "^3.11.0",
102
- "@tiptap/extension-bubble-menu": "^3.11.0",
103
- "@tiptap/extension-code": "^3.11.0",
104
- "@tiptap/extension-code-block": "^3.11.0",
105
- "@tiptap/extension-code-block-lowlight": "^3.11.0",
106
- "@tiptap/extension-color": "^3.11.0",
107
- "@tiptap/extension-heading": "^3.11.0",
108
- "@tiptap/extension-highlight": "^3.11.0",
109
- "@tiptap/extension-image": "^3.11.0",
110
- "@tiptap/extension-link": "^3.11.0",
111
- "@tiptap/extension-list": "^3.11.0",
112
- "@tiptap/extension-mention": "^3.11.0",
113
- "@tiptap/extension-node-range": "^3.11.0",
114
- "@tiptap/extension-placeholder": "^3.11.0",
115
- "@tiptap/extension-table": "^3.11.0",
116
- "@tiptap/extension-task-item": "^3.11.0",
117
- "@tiptap/extension-task-list": "^3.11.0",
118
- "@tiptap/extension-text-align": "^3.11.0",
119
- "@tiptap/extension-text-style": "^3.11.0",
120
- "@tiptap/extension-typography": "^3.11.0",
121
- "@tiptap/extensions": "^3.11.0",
122
- "@tiptap/pm": "^3.11.0",
123
- "@tiptap/starter-kit": "^3.11.0",
124
- "@tiptap/suggestion": "^3.11.0",
125
- "@tiptap/vue-3": "^3.11.0",
102
+ "@tiptap/core": "^3.26.0",
103
+ "@tiptap/extension-blockquote": "^3.26.0",
104
+ "@tiptap/extension-bold": "^3.26.0",
105
+ "@tiptap/extension-bubble-menu": "^3.26.0",
106
+ "@tiptap/extension-code": "^3.26.0",
107
+ "@tiptap/extension-code-block": "^3.26.0",
108
+ "@tiptap/extension-code-block-lowlight": "^3.26.0",
109
+ "@tiptap/extension-color": "^3.26.0",
110
+ "@tiptap/extension-document": "^3.26.0",
111
+ "@tiptap/extension-hard-break": "^3.26.0",
112
+ "@tiptap/extension-heading": "^3.26.0",
113
+ "@tiptap/extension-highlight": "^3.26.0",
114
+ "@tiptap/extension-horizontal-rule": "^3.26.0",
115
+ "@tiptap/extension-image": "^3.26.0",
116
+ "@tiptap/extension-italic": "^3.26.0",
117
+ "@tiptap/extension-link": "^3.26.0",
118
+ "@tiptap/extension-list": "^3.26.0",
119
+ "@tiptap/extension-mention": "^3.26.0",
120
+ "@tiptap/extension-node-range": "^3.26.0",
121
+ "@tiptap/extension-paragraph": "^3.26.0",
122
+ "@tiptap/extension-placeholder": "^3.26.0",
123
+ "@tiptap/extension-strike": "^3.26.0",
124
+ "@tiptap/extension-table": "^3.26.0",
125
+ "@tiptap/extension-task-item": "^3.26.0",
126
+ "@tiptap/extension-task-list": "^3.26.0",
127
+ "@tiptap/extension-text": "^3.26.0",
128
+ "@tiptap/extension-text-align": "^3.26.0",
129
+ "@tiptap/extension-text-style": "^3.26.0",
130
+ "@tiptap/extension-typography": "^3.26.0",
131
+ "@tiptap/extension-underline": "^3.26.0",
132
+ "@tiptap/extensions": "^3.26.0",
133
+ "@tiptap/pm": "^3.26.0",
134
+ "@tiptap/starter-kit": "^3.26.0",
135
+ "@tiptap/suggestion": "^3.26.0",
136
+ "@tiptap/vue-3": "^3.26.0",
126
137
  "@vueuse/core": "^10.4.1",
127
138
  "dayjs": "^1.11.13",
128
139
  "dompurify": "^3.4.0",
@@ -178,10 +189,26 @@
178
189
  "vue-tsc": "^3.2.7"
179
190
  },
180
191
  "resolutions": {
181
- "prosemirror-model": "1.25.2",
182
- "prosemirror-state": "1.4.3",
183
- "prosemirror-view": "1.40.0",
184
- "prosemirror-transform": "1.10.4",
192
+ "prosemirror-model": "1.25.7",
193
+ "prosemirror-state": "1.4.4",
194
+ "prosemirror-view": "1.41.8",
195
+ "prosemirror-transform": "1.12.0",
196
+ "@tiptap/extension-blockquote": "3.26.0",
197
+ "@tiptap/extension-bold": "3.26.0",
198
+ "@tiptap/extension-bullet-list": "3.26.0",
199
+ "@tiptap/extension-document": "3.26.0",
200
+ "@tiptap/extension-dropcursor": "3.26.0",
201
+ "@tiptap/extension-gapcursor": "3.26.0",
202
+ "@tiptap/extension-hard-break": "3.26.0",
203
+ "@tiptap/extension-horizontal-rule": "3.26.0",
204
+ "@tiptap/extension-italic": "3.26.0",
205
+ "@tiptap/extension-list-item": "3.26.0",
206
+ "@tiptap/extension-list-keymap": "3.26.0",
207
+ "@tiptap/extension-ordered-list": "3.26.0",
208
+ "@tiptap/extension-paragraph": "3.26.0",
209
+ "@tiptap/extension-strike": "3.26.0",
210
+ "@tiptap/extension-text": "3.26.0",
211
+ "@tiptap/extension-underline": "3.26.0",
185
212
  "defu": "^6.1.5",
186
213
  "esbuild": "^0.25.0",
187
214
  "lodash": "^4.18.0",
@@ -2,6 +2,10 @@
2
2
 
3
3
  A prominent message used to communicate important information, warnings, or status updates to the user.
4
4
 
5
+ ## Playground
6
+
7
+ <ClientOnly><AlertBuilder /></ClientOnly>
8
+
5
9
  ## Themes
6
10
  <ComponentPreview name="Alert-Themes" />
7
11
 
@@ -28,10 +28,10 @@ const classes = computed(() => {
28
28
 
29
29
  const icon = computed(() => {
30
30
  const data = {
31
- yellow: { class: 'lucide-triangle-alert', css: 'text-ink-amber-3' },
32
- blue: { class: 'lucide-info', css: 'text-ink-blue-3' },
33
- red: { class: 'lucide-circle-x', css: 'text-ink-red-3' },
34
- green: { class: 'lucide-circle-check', css: 'text-ink-green-3' },
31
+ yellow: { class: 'lucide-triangle-alert', css: 'text-ink-amber-6' },
32
+ blue: { class: 'lucide-info', css: 'text-ink-blue-6' },
33
+ red: { class: 'lucide-circle-x', css: 'text-ink-red-6' },
34
+ green: { class: 'lucide-circle-check', css: 'text-ink-green-6' },
35
35
  }
36
36
  return props.theme ? data[props.theme] : null
37
37
  })
@@ -59,7 +59,7 @@
59
59
  <template #body="{ isOpen, togglePopover }">
60
60
  <div v-show="isOpen">
61
61
  <div
62
- class="relative mt-1 rounded-lg bg-surface-modal text-base shadow-2xl"
62
+ class="relative mt-1 rounded-lg bg-surface-elevation-2 text-base shadow-2xl"
63
63
  :class="bodyClasses"
64
64
  >
65
65
  <ComboboxOptions
@@ -69,7 +69,7 @@
69
69
  >
70
70
  <div
71
71
  v-if="!hideSearch"
72
- class="sticky top-0 z-10 flex items-stretch space-x-1.5 bg-surface-modal py-1.5"
72
+ class="sticky top-0 z-10 flex items-stretch space-x-1.5 bg-surface-elevation-2 py-1.5"
73
73
  >
74
74
  <div class="relative w-full">
75
75
  <ComboboxInput
@@ -101,7 +101,7 @@
101
101
  >
102
102
  <div
103
103
  v-if="group.group && !group.hideLabel"
104
- class="sticky top-10 truncate bg-surface-modal px-2.5 py-1.5 text-sm font-medium text-ink-gray-5"
104
+ class="sticky top-10 truncate bg-surface-elevation-2 px-2.5 py-1.5 text-sm-medium text-ink-gray-5"
105
105
  >
106
106
  {{ group.group }}
107
107
  </div>
@@ -2,6 +2,10 @@
2
2
 
3
3
  A visual representation of a user, typically shown as an image, initials, or an icon.
4
4
 
5
+ ## Playground
6
+
7
+ <ClientOnly><AvatarBuilder /></ClientOnly>
8
+
5
9
  ## Themes
6
10
  <ComponentPreview name="Avatar-Shapes" />
7
11
 
@@ -25,7 +25,7 @@
25
25
  <div
26
26
  v-if="$slots.indicator"
27
27
  :class="[
28
- 'absolute bottom-0 right-0 grid place-items-center rounded-full bg-surface-white',
28
+ 'absolute bottom-0 right-0 grid place-items-center rounded-full bg-surface-base',
29
29
  indicatorContainerClasses,
30
30
  ]"
31
31
  >
@@ -80,9 +80,9 @@ const labelClasses = computed(() => {
80
80
  sm: 'text-sm',
81
81
  md: 'text-base',
82
82
  lg: 'text-base',
83
- xl: 'text-lg',
84
- '2xl': 'text-xl',
85
- '3xl': 'text-2xl',
83
+ xl: 'text-xl',
84
+ '2xl': 'text-3xl',
85
+ '3xl': 'text-4xl',
86
86
  }[props.size]
87
87
  return ['font-medium', sizeClass]
88
88
  })
@@ -9,7 +9,7 @@
9
9
  name: 'theme',
10
10
  description: 'Visual color theme of the badge',
11
11
  required: false,
12
- type: '"blue" | "red" | "green" | "gray" | "orange"',
12
+ type: '"blue" | "red" | "green" | "gray" | "amber" | "violet" | "orange"',
13
13
  default: '"gray"'
14
14
  },
15
15
  {
@@ -41,7 +41,7 @@ describe('<Badge />', () => {
41
41
  label: 'Blue',
42
42
  },
43
43
  })
44
- cy.get('.inline-flex.rounded-full').should('have.class', 'text-ink-blue-2')
44
+ cy.get('.inline-flex.rounded-full').should('have.class', 'text-ink-blue-8')
45
45
  cy.get('.inline-flex.rounded-full').should('have.class', 'bg-surface-blue-2')
46
46
 
47
47
  // Green
@@ -51,18 +51,28 @@ describe('<Badge />', () => {
51
51
  label: 'Green',
52
52
  },
53
53
  })
54
- cy.get('.inline-flex.rounded-full').should('have.class', 'text-ink-green-3')
54
+ cy.get('.inline-flex.rounded-full').should('have.class', 'text-ink-green-8')
55
55
  cy.get('.inline-flex.rounded-full').should('have.class', 'bg-surface-green-2')
56
56
 
57
- // Orange
57
+ // Amber
58
+ cy.mount(Badge, {
59
+ props: {
60
+ theme: 'amber',
61
+ label: 'Amber',
62
+ },
63
+ })
64
+ cy.get('.inline-flex.rounded-full').should('have.class', 'text-ink-amber-8')
65
+ cy.get('.inline-flex.rounded-full').should('have.class', 'bg-surface-amber-2')
66
+
67
+ // Orange (deprecated alias for amber)
58
68
  cy.mount(Badge, {
59
69
  props: {
60
70
  theme: 'orange',
61
71
  label: 'Orange',
62
72
  },
63
73
  })
64
- cy.get('.inline-flex.rounded-full').should('have.class', 'text-ink-amber-3')
65
- cy.get('.inline-flex.rounded-full').should('have.class', 'bg-surface-amber-1')
74
+ cy.get('.inline-flex.rounded-full').should('have.class', 'text-ink-amber-8')
75
+ cy.get('.inline-flex.rounded-full').should('have.class', 'bg-surface-amber-2')
66
76
 
67
77
  // Red
68
78
  cy.mount(Badge, {
@@ -71,20 +81,30 @@ describe('<Badge />', () => {
71
81
  label: 'Red',
72
82
  },
73
83
  })
74
- cy.get('.inline-flex.rounded-full').should('have.class', 'text-ink-red-4')
84
+ cy.get('.inline-flex.rounded-full').should('have.class', 'text-ink-red-8')
75
85
  cy.get('.inline-flex.rounded-full').should('have.class', 'bg-surface-red-2')
86
+
87
+ // Violet
88
+ cy.mount(Badge, {
89
+ props: {
90
+ theme: 'violet',
91
+ label: 'Violet',
92
+ },
93
+ })
94
+ cy.get('.inline-flex.rounded-full').should('have.class', 'text-ink-violet-8')
95
+ cy.get('.inline-flex.rounded-full').should('have.class', 'bg-surface-violet-2')
76
96
  })
77
97
 
78
98
  it('renders different variants with gray theme', () => {
79
- // Solid
99
+ // Solid (gray uses semantic token; non-gray solids use raw palette)
80
100
  cy.mount(Badge, {
81
101
  props: {
82
102
  variant: 'solid',
83
103
  label: 'Solid',
84
104
  },
85
105
  })
86
- cy.get('.inline-flex.rounded-full').should('have.class', 'text-ink-white')
87
- cy.get('.inline-flex.rounded-full').should('have.class', 'bg-surface-gray-7')
106
+ cy.get('.inline-flex.rounded-full').should('have.class', 'text-ink-base')
107
+ cy.get('.inline-flex.rounded-full').should('have.class', 'bg-surface-gray-10')
88
108
 
89
109
  // Subtle (default)
90
110
  cy.mount(Badge, {
@@ -104,8 +124,7 @@ describe('<Badge />', () => {
104
124
  },
105
125
  })
106
126
  cy.get('.inline-flex.rounded-full').should('have.class', 'text-ink-gray-6')
107
- cy.get('.inline-flex.rounded-full').should('have.class', 'bg-transparent')
108
- cy.get('.inline-flex.rounded-full').should('have.class', 'border-outline-gray-1')
127
+ cy.get('.inline-flex.rounded-full').should('have.class', 'border-outline-gray-2')
109
128
 
110
129
  // Ghost
111
130
  cy.mount(Badge, {
@@ -115,7 +134,6 @@ describe('<Badge />', () => {
115
134
  },
116
135
  })
117
136
  cy.get('.inline-flex.rounded-full').should('have.class', 'text-ink-gray-6')
118
- cy.get('.inline-flex.rounded-full').should('have.class', 'bg-transparent')
119
137
  })
120
138
 
121
139
  it('renders different sizes', () => {
@@ -149,7 +167,7 @@ describe('<Badge />', () => {
149
167
  },
150
168
  })
151
169
  cy.get('.inline-flex.rounded-full').should('have.class', 'h-6')
152
- cy.get('.inline-flex.rounded-full').should('have.class', 'text-sm')
170
+ cy.get('.inline-flex.rounded-full').should('have.class', 'text-[13px]')
153
171
  cy.get('.inline-flex.rounded-full').should('have.class', 'px-2')
154
172
  })
155
173
 
@@ -250,7 +268,7 @@ describe('<Badge />', () => {
250
268
  prefix: () => h(TestIcon),
251
269
  },
252
270
  })
253
- cy.get('[data-cy="prefix-icon"]').parent().should('have.class', 'max-h-4')
271
+ cy.get('[data-cy="prefix-icon"]').parent().should('have.class', 'size-2.5')
254
272
 
255
273
  // Test with md size (default)
256
274
  cy.mount(Badge, {
@@ -259,7 +277,7 @@ describe('<Badge />', () => {
259
277
  prefix: () => h(TestIcon),
260
278
  },
261
279
  })
262
- cy.get('[data-cy="prefix-icon"]').parent().should('have.class', 'max-h-4')
280
+ cy.get('[data-cy="prefix-icon"]').parent().should('have.class', 'size-2.5')
263
281
 
264
282
  // Test with lg size
265
283
  cy.mount(Badge, {
@@ -268,6 +286,6 @@ describe('<Badge />', () => {
268
286
  prefix: () => h(TestIcon),
269
287
  },
270
288
  })
271
- cy.get('[data-cy="prefix-icon"]').parent().should('have.class', 'max-h-6')
289
+ cy.get('[data-cy="prefix-icon"]').parent().should('have.class', 'size-3')
272
290
  })
273
291
  })