playbook_ui 14.26.0.pre.rc.0 → 15.0.0.pre.alpha.play1986inlineloadingsolidvariant10321

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 (232) hide show
  1. checksums.yaml +4 -4
  2. data/app/pb_kits/playbook/_playbook.scss +0 -1
  3. data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +6 -6
  4. data/app/pb_kits/playbook/pb_advanced_table/advanced_table.test.jsx +1 -1
  5. data/app/pb_kits/playbook/pb_avatar/_avatar.scss +60 -65
  6. data/app/pb_kits/playbook/pb_avatar/avatar.test.js +1 -1
  7. data/app/pb_kits/playbook/pb_background/_background.scss +3 -3
  8. data/app/pb_kits/playbook/pb_badge/_badge.scss +135 -29
  9. data/app/pb_kits/playbook/pb_body/_body.scss +108 -35
  10. data/app/pb_kits/playbook/pb_body/_body_mixins.scss +1 -1
  11. data/app/pb_kits/playbook/pb_bread_crumbs/_bread_crumbs.scss +17 -30
  12. data/app/pb_kits/playbook/pb_button/_button.scss +39 -31
  13. data/app/pb_kits/playbook/pb_button/_button.tsx +12 -12
  14. data/app/pb_kits/playbook/pb_button/_button_mixins.scss +1 -1
  15. data/app/pb_kits/playbook/pb_button/button.rb +11 -18
  16. data/app/pb_kits/playbook/pb_button/button.test.js +3 -3
  17. data/app/pb_kits/playbook/pb_button_toolbar/_button_toolbar.scss +82 -73
  18. data/app/pb_kits/playbook/pb_button_toolbar/_button_toolbar_dark.scss +32 -33
  19. data/app/pb_kits/playbook/pb_button_toolbar/_button_toolbar_mixins.scss +1 -1
  20. data/app/pb_kits/playbook/pb_button_toolbar/button_toolbar.test.js +2 -2
  21. data/app/pb_kits/playbook/pb_caption/_caption.scss +100 -17
  22. data/app/pb_kits/playbook/pb_caption/_caption_mixin.scss +1 -8
  23. data/app/pb_kits/playbook/pb_card/_card.scss +116 -79
  24. data/app/pb_kits/playbook/pb_card/_card.tsx +26 -11
  25. data/app/pb_kits/playbook/pb_card/_card_mixin.scss +1 -1
  26. data/app/pb_kits/playbook/pb_card/card.rb +8 -7
  27. data/app/pb_kits/playbook/pb_card/card_header.rb +6 -2
  28. data/app/pb_kits/playbook/pb_card/docs/_card_header.html.erb +1 -1
  29. data/app/pb_kits/playbook/pb_checkbox/_checkbox.scss +11 -2
  30. data/app/pb_kits/playbook/pb_circle_icon_button/_circle_icon_button.scss +7 -7
  31. data/app/pb_kits/playbook/pb_circle_icon_button/circle_icon_button.test.js +1 -1
  32. data/app/pb_kits/playbook/pb_collapsible/__snapshots__/collapsible.test.js.snap +1 -1
  33. data/app/pb_kits/playbook/pb_collapsible/_collapsible.scss +4 -4
  34. data/app/pb_kits/playbook/pb_copy_button/copy_button.test.jsx +1 -1
  35. data/app/pb_kits/playbook/pb_currency/_currency.scss +124 -39
  36. data/app/pb_kits/playbook/pb_dashboard_value/_dashboard_value.scss +16 -6
  37. data/app/pb_kits/playbook/pb_date/_date.scss +16 -18
  38. data/app/pb_kits/playbook/pb_date/date.test.js +506 -0
  39. data/app/pb_kits/playbook/pb_date_picker/_date_picker.scss +1 -1
  40. data/app/pb_kits/playbook/pb_date_picker/sass_partials/_inline_styles.scss +12 -12
  41. data/app/pb_kits/playbook/pb_date_picker/sass_partials/_input_styles.scss +2 -2
  42. data/app/pb_kits/playbook/pb_date_picker/sass_partials/_time_selection_styles.scss +6 -5
  43. data/app/pb_kits/playbook/pb_date_range_inline/_date_range_inline.scss +29 -23
  44. data/app/pb_kits/playbook/pb_date_range_inline/_date_range_inline.tsx +1 -1
  45. data/app/pb_kits/playbook/pb_date_range_stacked/_date_range_stacked.scss +1 -1
  46. data/app/pb_kits/playbook/pb_date_range_stacked/date_range_stacked.test.js +2 -2
  47. data/app/pb_kits/playbook/pb_date_stacked/_date_stacked.scss +66 -26
  48. data/app/pb_kits/playbook/pb_date_stacked/date_stacked.rb +1 -1
  49. data/app/pb_kits/playbook/pb_date_stacked/date_stacked.test.js +2 -2
  50. data/app/pb_kits/playbook/pb_date_time/_date_time.scss +8 -15
  51. data/app/pb_kits/playbook/pb_date_time_stacked/_date_time_stacked.scss +6 -7
  52. data/app/pb_kits/playbook/pb_date_year_stacked/_date_year_stacked.scss +17 -14
  53. data/app/pb_kits/playbook/pb_date_year_stacked/date_year_stacked.test.js +1 -1
  54. data/app/pb_kits/playbook/pb_detail/_detail.scss +86 -21
  55. data/app/pb_kits/playbook/pb_dialog/_dialog.scss +330 -123
  56. data/app/pb_kits/playbook/pb_dialog/docs/_dialog_loading.html.erb +16 -2
  57. data/app/pb_kits/playbook/pb_distribution_bar/_distribution_bar.scss +10 -7
  58. data/app/pb_kits/playbook/pb_draggable/draggable.test.jsx +1 -1
  59. data/app/pb_kits/playbook/pb_dropdown/_dropdown.scss +1 -1
  60. data/app/pb_kits/playbook/pb_dropdown/dropdown.test.jsx +6 -6
  61. data/app/pb_kits/playbook/pb_dropdown/index.js +3 -3
  62. data/app/pb_kits/playbook/pb_empty_state/_empty_state.scss +4 -4
  63. data/app/pb_kits/playbook/pb_file_upload/_file_upload.scss +20 -9
  64. data/app/pb_kits/playbook/pb_file_upload/file_upload.html.erb +1 -1
  65. data/app/pb_kits/playbook/pb_filter/_filter.scss +8 -8
  66. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/_fixed_confirmation_toast.scss +65 -29
  67. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/_fixed_confirmation_toast.tsx +1 -2
  68. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_props_swift.md +3 -2
  69. data/app/pb_kits/playbook/pb_fixed_confirmation_toast/fixed_confirmation_toast.test.js +1 -1
  70. data/app/pb_kits/playbook/pb_flex/_flex.scss +106 -100
  71. data/app/pb_kits/playbook/pb_flex/_flex.tsx +32 -25
  72. data/app/pb_kits/playbook/pb_flex/_flex_item.scss +146 -51
  73. data/app/pb_kits/playbook/pb_flex/_flex_item.tsx +19 -8
  74. data/app/pb_kits/playbook/pb_flex/flex.rb +16 -16
  75. data/app/pb_kits/playbook/pb_flex/flex_item.rb +6 -6
  76. data/app/pb_kits/playbook/pb_form_group/_form_group.scss +1 -1
  77. data/app/pb_kits/playbook/pb_form_pill/_form_pill.scss +381 -344
  78. data/app/pb_kits/playbook/pb_form_pill/_form_pill.test.jsx +4 -4
  79. data/app/pb_kits/playbook/pb_form_pill/_form_pill.tsx +8 -7
  80. data/app/pb_kits/playbook/pb_form_pill/form_pill.rb +9 -2
  81. data/app/pb_kits/playbook/pb_gauge/_gauge.scss +5 -5
  82. data/app/pb_kits/playbook/pb_hashtag/_hashtag.scss +1 -1
  83. data/app/pb_kits/playbook/pb_highlight/_highlight.scss +1 -1
  84. data/app/pb_kits/playbook/pb_home_address_street/home_adress_street.test.js +2 -2
  85. data/app/pb_kits/playbook/pb_icon_button/_icon_button.scss +4 -4
  86. data/app/pb_kits/playbook/pb_icon_circle/_icon_circle.scss +40 -39
  87. data/app/pb_kits/playbook/pb_icon_circle/icon_circle.rb +1 -1
  88. data/app/pb_kits/playbook/pb_icon_stat_value/icon_stat_value.test.js +1 -1
  89. data/app/pb_kits/playbook/pb_icon_value/_icon_value.scss +16 -15
  90. data/app/pb_kits/playbook/pb_image/_image.scss +41 -36
  91. data/app/pb_kits/playbook/pb_label_pill/_label_pill.scss +1 -1
  92. data/app/pb_kits/playbook/pb_label_value/_label_value.scss +3 -2
  93. data/app/pb_kits/playbook/pb_label_value/label_value.test.js +2 -2
  94. data/app/pb_kits/playbook/pb_layout/_layout.scss +336 -305
  95. data/app/pb_kits/playbook/pb_layout/_layout.tsx +14 -11
  96. data/app/pb_kits/playbook/pb_layout/item.rb +1 -7
  97. data/app/pb_kits/playbook/pb_layout/layout.rb +16 -25
  98. data/app/pb_kits/playbook/pb_layout/layout.test.js +3 -3
  99. data/app/pb_kits/playbook/pb_legend/_legend.scss +66 -16
  100. data/app/pb_kits/playbook/pb_legend/legend.test.js +1 -1
  101. data/app/pb_kits/playbook/pb_lightbox/lightbox.scss +4 -4
  102. data/app/pb_kits/playbook/pb_lightbox/lightbox.test.jsx +1 -1
  103. data/app/pb_kits/playbook/pb_link/_link.scss +113 -19
  104. data/app/pb_kits/playbook/pb_list/_list.scss +1 -1
  105. data/app/pb_kits/playbook/pb_loading_inline/_loading_inline.scss +13 -11
  106. data/app/pb_kits/playbook/pb_loading_inline/_loading_inline.tsx +3 -1
  107. data/app/pb_kits/playbook/pb_loading_inline/docs/_loading_inline_variant.html.erb +5 -0
  108. data/app/pb_kits/playbook/pb_loading_inline/docs/_loading_inline_variant.jsx +24 -0
  109. data/app/pb_kits/playbook/pb_loading_inline/docs/example.yml +2 -0
  110. data/app/pb_kits/playbook/pb_loading_inline/docs/index.js +1 -0
  111. data/app/pb_kits/playbook/pb_loading_inline/loading_inline.html.erb +1 -1
  112. data/app/pb_kits/playbook/pb_loading_inline/loading_inline.rb +11 -0
  113. data/app/pb_kits/playbook/pb_map/_map.scss +1 -1
  114. data/app/pb_kits/playbook/pb_map/docs/_map_default.jsx +1 -1
  115. data/app/pb_kits/playbook/pb_map/docs/_map_with_custom_button.jsx +1 -1
  116. data/app/pb_kits/playbook/pb_map/docs/_map_with_plugin.jsx +1 -1
  117. data/app/pb_kits/playbook/pb_message/_message.scss +21 -16
  118. data/app/pb_kits/playbook/pb_message/_message.tsx +1 -0
  119. data/app/pb_kits/playbook/pb_message/_message_mixins.scss +5 -12
  120. data/app/pb_kits/playbook/pb_message/message.html.erb +1 -1
  121. data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.scss +6 -3
  122. data/app/pb_kits/playbook/pb_multiple_users/_multiple_users.scss +16 -15
  123. data/app/pb_kits/playbook/pb_multiple_users_stacked/_multiple_users_stacked.scss +1 -1
  124. data/app/pb_kits/playbook/pb_nav/_bold_mixin.scss +1 -1
  125. data/app/pb_kits/playbook/pb_nav/_collapsible_nav.scss +1 -1
  126. data/app/pb_kits/playbook/pb_online_status/_online_status.scss +19 -15
  127. data/app/pb_kits/playbook/pb_online_status/_online_status.tsx +1 -1
  128. data/app/pb_kits/playbook/pb_online_status/online_status.rb +5 -4
  129. data/app/pb_kits/playbook/pb_online_status/online_status.test.js +2 -2
  130. data/app/pb_kits/playbook/pb_overlay/_overlay.scss +1 -1
  131. data/app/pb_kits/playbook/pb_overlay/overlay.rb +1 -1
  132. data/app/pb_kits/playbook/pb_passphrase/_passphrase.scss +5 -2
  133. data/app/pb_kits/playbook/pb_person/_person.scss +1 -1
  134. data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.scss +1 -1
  135. data/app/pb_kits/playbook/pb_pill/_pill.scss +23 -21
  136. data/app/pb_kits/playbook/pb_progress_pills/_progress_pills.scss +15 -13
  137. data/app/pb_kits/playbook/pb_progress_simple/_progress_simple.scss +108 -33
  138. data/app/pb_kits/playbook/pb_progress_step/_progress_step.scss +1 -1
  139. data/app/pb_kits/playbook/pb_radio/_radio.scss +71 -52
  140. data/app/pb_kits/playbook/pb_radio/_radio.tsx +1 -1
  141. data/app/pb_kits/playbook/pb_radio/docs/_radio_react_hook.jsx +0 -3
  142. data/app/pb_kits/playbook/pb_rich_text_editor/_rich_text_editor.scss +4 -4
  143. data/app/pb_kits/playbook/pb_section_separator/_section_separator.scss +81 -70
  144. data/app/pb_kits/playbook/pb_section_separator/_section_separator.tsx +9 -1
  145. data/app/pb_kits/playbook/pb_section_separator/_section_separator_mixin.scss +1 -1
  146. data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_color.jsx +3 -1
  147. data/app/pb_kits/playbook/pb_section_separator/section_separator.rb +7 -1
  148. data/app/pb_kits/playbook/pb_select/_select.scss +4 -4
  149. data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.scss +6 -2
  150. data/app/pb_kits/playbook/pb_selectable_card_icon/_selectable_card_icon.scss +17 -8
  151. data/app/pb_kits/playbook/pb_selectable_icon/_selectable_icon.scss +39 -29
  152. data/app/pb_kits/playbook/pb_selectable_list/_item.tsx +2 -0
  153. data/app/pb_kits/playbook/pb_selectable_list/_selectable_list.scss +8 -11
  154. data/app/pb_kits/playbook/pb_selectable_list/selectable_list.test.js +2 -3
  155. data/app/pb_kits/playbook/pb_selectable_list/selectable_list_item.html.erb +2 -2
  156. data/app/pb_kits/playbook/pb_source/_source.scss +8 -8
  157. data/app/pb_kits/playbook/pb_star_rating/_star_rating.scss +1 -1
  158. data/app/pb_kits/playbook/pb_star_rating/star_rating.test.js +1 -1
  159. data/app/pb_kits/playbook/pb_stat_value/_stat_value.scss +2 -2
  160. data/app/pb_kits/playbook/pb_text_input/_text_input.scss +5 -5
  161. data/app/pb_kits/playbook/pb_textarea/_textarea.scss +6 -6
  162. data/app/pb_kits/playbook/pb_time/_time.scss +44 -17
  163. data/app/pb_kits/playbook/pb_time_range_inline/_time_range_inline.scss +44 -23
  164. data/app/pb_kits/playbook/pb_time_range_inline/time_range_inline.rb +1 -1
  165. data/app/pb_kits/playbook/pb_time_stacked/_time_stacked.scss +5 -8
  166. data/app/pb_kits/playbook/pb_timestamp/_timestamp.scss +16 -10
  167. data/app/pb_kits/playbook/pb_timestamp/_timestamp.tsx +1 -4
  168. data/app/pb_kits/playbook/pb_timestamp/timestamp.rb +1 -1
  169. data/app/pb_kits/playbook/pb_timestamp/timestamp.test.js +2 -2
  170. data/app/pb_kits/playbook/pb_title/_title.scss +44 -39
  171. data/app/pb_kits/playbook/pb_title/_title.tsx +17 -8
  172. data/app/pb_kits/playbook/pb_title/_title_mixin.scss +2 -2
  173. data/app/pb_kits/playbook/pb_title/title.rb +20 -10
  174. data/app/pb_kits/playbook/pb_title/title.test.js +4 -4
  175. data/app/pb_kits/playbook/pb_title_count/_title_count.scss +19 -8
  176. data/app/pb_kits/playbook/pb_title_detail/_title_detail.scss +10 -11
  177. data/app/pb_kits/playbook/pb_toggle/_toggle.scss +4 -1
  178. data/app/pb_kits/playbook/pb_tooltip/_tooltip.scss +3 -4
  179. data/app/pb_kits/playbook/pb_tooltip/tooltip.rb +1 -1
  180. data/app/pb_kits/playbook/pb_typeahead/_typeahead.test.jsx +3 -3
  181. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills.html.erb +1 -1
  182. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills.jsx +1 -1
  183. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_color.html.erb +1 -22
  184. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_color.jsx +1 -1
  185. data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_without_pills.html.erb +2 -2
  186. data/app/pb_kits/playbook/pb_user/_user.scss +83 -33
  187. data/app/pb_kits/playbook/pb_user/docs/_user_props_table.md +14 -7
  188. data/app/pb_kits/playbook/pb_user/user.test.js +1 -1
  189. data/app/pb_kits/playbook/pb_user_badge/_user_badge.scss +23 -8
  190. data/app/pb_kits/playbook/pb_weekday_stacked/_weekday_stacked.scss +10 -10
  191. data/app/pb_kits/playbook/pb_weekday_stacked/weekday_stacked.test.jsx +3 -3
  192. data/dist/chunks/{_line_graph-CiVc-Cod.js → _line_graph-CApw7aQD.js} +1 -1
  193. data/dist/chunks/{_typeahead-BQnvz-Ks.js → _typeahead-J1_avqdO.js} +1 -1
  194. data/dist/chunks/_weekday_stacked-BvW0QnF8.js +37 -0
  195. data/dist/chunks/vendor.js +1 -1
  196. data/dist/menu.yml +0 -6
  197. data/dist/playbook-doc.js +2 -2
  198. data/dist/playbook-rails-react-bindings.js +1 -1
  199. data/dist/playbook-rails.js +1 -1
  200. data/dist/playbook.css +1 -1
  201. data/lib/playbook/version.rb +2 -2
  202. metadata +8 -34
  203. data/app/pb_kits/playbook/pb_drawer/_close_icon.tsx +0 -25
  204. data/app/pb_kits/playbook/pb_drawer/_drawer.scss +0 -381
  205. data/app/pb_kits/playbook/pb_drawer/_drawer.tsx +0 -231
  206. data/app/pb_kits/playbook/pb_drawer/_drawer_context.tsx +0 -3
  207. data/app/pb_kits/playbook/pb_drawer/context.ts +0 -11
  208. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_behavior.html.erb +0 -8
  209. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_behavior.jsx +0 -41
  210. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_borders.html.erb +0 -33
  211. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_borders.jsx +0 -78
  212. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.html.erb +0 -3
  213. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.jsx +0 -26
  214. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_default.html.erb +0 -20
  215. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_default.jsx +0 -59
  216. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.html.erb +0 -24
  217. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.jsx +0 -61
  218. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.md +0 -24
  219. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.html.erb +0 -21
  220. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.jsx +0 -54
  221. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.md +0 -1
  222. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_sizes.html.erb +0 -49
  223. data/app/pb_kits/playbook/pb_drawer/docs/_drawer_sizes.jsx +0 -99
  224. data/app/pb_kits/playbook/pb_drawer/docs/example.yml +0 -20
  225. data/app/pb_kits/playbook/pb_drawer/docs/index.js +0 -7
  226. data/app/pb_kits/playbook/pb_drawer/drawer.html.erb +0 -20
  227. data/app/pb_kits/playbook/pb_drawer/drawer.rb +0 -56
  228. data/app/pb_kits/playbook/pb_drawer/drawer.test.jsx +0 -81
  229. data/app/pb_kits/playbook/pb_drawer/hooks/useBreakpoint.tsx +0 -60
  230. data/app/pb_kits/playbook/pb_drawer/hooks/useDrawerAnimation.tsx +0 -21
  231. data/app/pb_kits/playbook/pb_drawer/index.js +0 -257
  232. data/dist/chunks/_weekday_stacked-CX4YxAHz.js +0 -37
@@ -0,0 +1,506 @@
1
+ import React from 'react'
2
+ import { render, screen } from '../utilities/test-utils'
3
+ import PbDate from './_date'
4
+ import DateTime from '../pb_kit/dateTime'
5
+
6
+ // Mock DateTime utility functions
7
+ jest.mock('../pb_kit/dateTime', () => ({
8
+ toWeekday: jest.fn(),
9
+ toMonth: jest.fn(),
10
+ toDay: jest.fn(),
11
+ toYear: jest.fn(),
12
+ }))
13
+
14
+ // Set test date
15
+ const TEST_DATE = new Date('2025-08-19T10:30:00Z') // Monday, August 19, 2025
16
+ const CURRENT_YEAR = new Date().getFullYear()
17
+
18
+ describe('PbDate Kit', () => {
19
+ beforeEach(() => {
20
+ // Reset mocks before each test
21
+ jest.clearAllMocks()
22
+
23
+ // Set up default mock returns
24
+ DateTime.toWeekday.mockReturnValue('Monday')
25
+ DateTime.toMonth.mockReturnValue('August')
26
+ DateTime.toDay.mockReturnValue('19')
27
+ DateTime.toYear.mockReturnValue(2025)
28
+
29
+ // Mock console.error to avoid noise in tests
30
+ jest.spyOn(console, 'error').mockImplementation(() => {})
31
+ })
32
+
33
+ afterEach(() => {
34
+ console.error.mockRestore()
35
+ })
36
+
37
+ // Default Props
38
+ describe('Default Props', () => {
39
+ test('renders with minimal required props', () => {
40
+ const testId = 'pb-date-default'
41
+ render(
42
+ <PbDate
43
+ data={{ testid: testId }}
44
+ value={TEST_DATE}
45
+ />
46
+ )
47
+
48
+ const kit = screen.getByTestId(testId)
49
+ expect(kit).toBeInTheDocument()
50
+ expect(kit).toHaveClass('pb_date_kit_left')
51
+ })
52
+
53
+ test('displays date in default format without day of week', () => {
54
+ // Mock current year to test hiding logic
55
+ DateTime.toYear.mockReturnValue(CURRENT_YEAR)
56
+
57
+ const testId = 'pb-date-format'
58
+ render(
59
+ <PbDate
60
+ data={{ testid: testId }}
61
+ value={TEST_DATE}
62
+ />
63
+ )
64
+
65
+ const kit = screen.getByTestId(testId)
66
+ expect(kit).toHaveTextContent('August 19')
67
+ expect(kit).not.toHaveTextContent('Monday')
68
+ expect(kit).not.toHaveTextContent(`, ${CURRENT_YEAR}`)
69
+ })
70
+
71
+ test('applies default CSS classes', () => {
72
+ const testId = 'pb-date-css'
73
+ render(
74
+ <PbDate
75
+ data={{ testid: testId }}
76
+ value={TEST_DATE}
77
+ />
78
+ )
79
+
80
+ const kit = screen.getByTestId(testId)
81
+ expect(kit).toHaveClass('pb_date_kit_left')
82
+ })
83
+ })
84
+
85
+ // Prop Variations
86
+ describe('Prop Variations', () => {
87
+ test('renders with showDayOfWeek enabled', () => {
88
+ const testId = 'pb-date-weekday'
89
+ render(
90
+ <PbDate
91
+ data={{ testid: testId }}
92
+ showDayOfWeek
93
+ value={TEST_DATE}
94
+ />
95
+ )
96
+
97
+ const kit = screen.getByTestId(testId)
98
+ expect(kit).toHaveTextContent('Monday')
99
+ expect(kit).toHaveTextContent('•')
100
+ expect(kit).toHaveTextContent('August 19')
101
+ })
102
+
103
+ test('renders with showCurrentYear enabled', () => {
104
+ const testId = 'pb-date-current-year'
105
+ render(
106
+ <PbDate
107
+ data={{ testid: testId }}
108
+ showCurrentYear
109
+ value={TEST_DATE}
110
+ />
111
+ )
112
+
113
+ const kit = screen.getByTestId(testId)
114
+ expect(kit).toHaveTextContent(', 2025')
115
+ })
116
+
117
+ test('renders with showIcon enabled for medium size', () => {
118
+ const testId = 'pb-date-icon-md'
119
+ render(
120
+ <PbDate
121
+ data={{ testid: testId }}
122
+ showIcon
123
+ size="md"
124
+ value={TEST_DATE}
125
+ />
126
+ )
127
+
128
+ const kit = screen.getByTestId(testId)
129
+ const iconContainer = kit.querySelector('.pb_icon_kit_container')
130
+ expect(iconContainer).toBeInTheDocument()
131
+ })
132
+
133
+ test('renders with showIcon enabled for small size', () => {
134
+ const testId = 'pb-date-icon-sm'
135
+ render(
136
+ <PbDate
137
+ data={{ testid: testId }}
138
+ showIcon
139
+ size="sm"
140
+ value={TEST_DATE}
141
+ />
142
+ )
143
+
144
+ const kit = screen.getByTestId(testId)
145
+ const iconContainer = kit.querySelector('.pb_icon_kit_container')
146
+ expect(iconContainer).toBeInTheDocument()
147
+ })
148
+
149
+ test('renders different sizes correctly', () => {
150
+ const sizes = ['sm', 'md', 'lg']
151
+
152
+ sizes.forEach(size => {
153
+ const testId = `pb-date-size-${size}`
154
+ render(
155
+ <PbDate
156
+ data={{ testid: testId }}
157
+ size={size}
158
+ value={TEST_DATE}
159
+ />
160
+ )
161
+
162
+ const kit = screen.getByTestId(testId)
163
+ expect(kit).toBeInTheDocument()
164
+
165
+ expect(kit).toHaveTextContent('August 19')
166
+ })
167
+ })
168
+
169
+ test('renders different alignments correctly', () => {
170
+ const alignments = ['left', 'center', 'right']
171
+
172
+ alignments.forEach(alignment => {
173
+ const testId = `pb-date-align-${alignment}`
174
+ render(
175
+ <PbDate
176
+ alignment={alignment}
177
+ data={{ testid: testId }}
178
+ value={TEST_DATE}
179
+ />
180
+ )
181
+
182
+ const kit = screen.getByTestId(testId)
183
+ expect(kit).toHaveClass(`pb_date_kit_${alignment}`)
184
+ })
185
+ })
186
+
187
+ test('renders in dark mode', () => {
188
+ const testId = 'pb-date-dark'
189
+ render(
190
+ <PbDate
191
+ dark
192
+ data={{ testid: testId }}
193
+ value={TEST_DATE}
194
+ />
195
+ )
196
+
197
+ const kit = screen.getByTestId(testId)
198
+ expect(kit).toBeInTheDocument()
199
+ })
200
+
201
+ test('renders in unstyled mode', () => {
202
+ const testId = 'pb-date-unstyled'
203
+ render(
204
+ <PbDate
205
+ data={{ testid: testId }}
206
+ showDayOfWeek
207
+ showIcon
208
+ unstyled
209
+ value={TEST_DATE}
210
+ />
211
+ )
212
+
213
+ const kit = screen.getByTestId(testId)
214
+ expect(kit).toHaveTextContent('Monday')
215
+ expect(kit).toHaveTextContent('•')
216
+ expect(kit).toHaveTextContent('August 19')
217
+
218
+ expect(kit.querySelector('.pb_title_kit')).not.toBeInTheDocument()
219
+ expect(kit.querySelector('.pb_caption_kit')).not.toBeInTheDocument()
220
+ })
221
+
222
+ test('applies custom className', () => {
223
+ const testId = 'pb-date-custom-class'
224
+ const customClass = 'my-custom-date-class'
225
+
226
+ render(
227
+ <PbDate
228
+ className={customClass}
229
+ data={{ testid: testId }}
230
+ value={TEST_DATE}
231
+ />
232
+ )
233
+
234
+ const kit = screen.getByTestId(testId)
235
+ expect(kit).toHaveClass(customClass)
236
+ })
237
+
238
+ test('applies custom id', () => {
239
+ const customId = 'my-custom-date-id'
240
+
241
+ render(
242
+ <PbDate
243
+ id={customId}
244
+ value={TEST_DATE}
245
+ />
246
+ )
247
+
248
+ const kit = document.getElementById(customId)
249
+ expect(kit).toBeInTheDocument()
250
+ expect(kit).toHaveAttribute('id', customId)
251
+ })
252
+ })
253
+
254
+ // Year Display
255
+ describe('Year Display Logic', () => {
256
+ test('hides current year by default', () => {
257
+ DateTime.toYear.mockReturnValue(CURRENT_YEAR)
258
+
259
+ const testId = 'pb-date-current-year-hidden'
260
+ render(
261
+ <PbDate
262
+ data={{ testid: testId }}
263
+ value={TEST_DATE}
264
+ />
265
+ )
266
+
267
+ const kit = screen.getByTestId(testId)
268
+ expect(kit).not.toHaveTextContent(`, ${CURRENT_YEAR}`)
269
+ })
270
+
271
+ test('shows current year when showCurrentYear is true', () => {
272
+ DateTime.toYear.mockReturnValue(CURRENT_YEAR)
273
+
274
+ const testId = 'pb-date-force-current-year'
275
+ render(
276
+ <PbDate
277
+ data={{ testid: testId }}
278
+ showCurrentYear
279
+ value={TEST_DATE}
280
+ />
281
+ )
282
+
283
+ const kit = screen.getByTestId(testId)
284
+ expect(kit).toHaveTextContent(`, ${CURRENT_YEAR}`)
285
+ })
286
+
287
+ test('shows non-current year automatically', () => {
288
+ const pastYear = CURRENT_YEAR - 1
289
+ DateTime.toYear.mockReturnValue(pastYear)
290
+
291
+ const testId = 'pb-date-past-year'
292
+ render(
293
+ <PbDate
294
+ data={{ testid: testId }}
295
+ value={TEST_DATE}
296
+ />
297
+ )
298
+
299
+ const kit = screen.getByTestId(testId)
300
+ expect(kit).toHaveTextContent(`, ${pastYear}`)
301
+ })
302
+
303
+ test('shows future year automatically', () => {
304
+ const futureYear = CURRENT_YEAR + 1
305
+ DateTime.toYear.mockReturnValue(futureYear)
306
+
307
+ const testId = 'pb-date-future-year'
308
+ render(
309
+ <PbDate
310
+ data={{ testid: testId }}
311
+ value={TEST_DATE}
312
+ />
313
+ )
314
+
315
+ const kit = screen.getByTestId(testId)
316
+ expect(kit).toHaveTextContent(`, ${futureYear}`)
317
+ })
318
+ })
319
+
320
+ // Edge Cases
321
+ describe('Edge Cases', () => {
322
+ test('handles leap year date', () => {
323
+ const leapYearDate = new Date('2024-02-29T12:00:00Z')
324
+ DateTime.toMonth.mockReturnValue('February')
325
+ DateTime.toDay.mockReturnValue('29')
326
+ DateTime.toYear.mockReturnValue(2024)
327
+ DateTime.toWeekday.mockReturnValue('Thursday')
328
+
329
+ const testId = 'pb-date-leap-year'
330
+ render(
331
+ <PbDate
332
+ data={{ testid: testId }}
333
+ value={leapYearDate}
334
+ />
335
+ )
336
+
337
+ const kit = screen.getByTestId(testId)
338
+ expect(kit).toHaveTextContent('February 29')
339
+ })
340
+
341
+ test('handles beginning of year', () => {
342
+ const newYearDate = new Date('2023-01-01T00:00:00Z')
343
+ DateTime.toMonth.mockReturnValue('January')
344
+ DateTime.toDay.mockReturnValue('1')
345
+ DateTime.toYear.mockReturnValue(2023)
346
+ DateTime.toWeekday.mockReturnValue('Sunday')
347
+
348
+ const testId = 'pb-date-new-year'
349
+ render(
350
+ <PbDate
351
+ data={{ testid: testId }}
352
+ value={newYearDate}
353
+ />
354
+ )
355
+
356
+ const kit = screen.getByTestId(testId)
357
+ expect(kit).toHaveTextContent('January 1')
358
+ })
359
+
360
+ test('handles end of year', () => {
361
+ const endYearDate = new Date('2023-12-31T23:59:59Z')
362
+ DateTime.toMonth.mockReturnValue('December')
363
+ DateTime.toDay.mockReturnValue('31')
364
+ DateTime.toYear.mockReturnValue(2023)
365
+ DateTime.toWeekday.mockReturnValue('Sunday')
366
+
367
+ const testId = 'pb-date-end-year'
368
+ render(
369
+ <PbDate
370
+ data={{ testid: testId }}
371
+ value={endYearDate}
372
+ />
373
+ )
374
+
375
+ const kit = screen.getByTestId(testId)
376
+ expect(kit).toHaveTextContent('December 31')
377
+ })
378
+
379
+ test('handles very old date', () => {
380
+ const oldDate = new Date('1900-01-01T00:00:00Z')
381
+ DateTime.toMonth.mockReturnValue('January')
382
+ DateTime.toDay.mockReturnValue('1')
383
+ DateTime.toYear.mockReturnValue(1900)
384
+ DateTime.toWeekday.mockReturnValue('Monday')
385
+
386
+ const testId = 'pb-date-old'
387
+ render(
388
+ <PbDate
389
+ data={{ testid: testId }}
390
+ value={oldDate}
391
+ />
392
+ )
393
+
394
+ const kit = screen.getByTestId(testId)
395
+ expect(kit).toHaveTextContent('January 1')
396
+ expect(kit).toHaveTextContent(', 1900')
397
+ })
398
+
399
+ test('handles far future date', () => {
400
+ const futureDate = new Date('2099-12-31T23:59:59Z')
401
+ DateTime.toMonth.mockReturnValue('December')
402
+ DateTime.toDay.mockReturnValue('31')
403
+ DateTime.toYear.mockReturnValue(2099)
404
+ DateTime.toWeekday.mockReturnValue('Friday')
405
+
406
+ const testId = 'pb-date-future'
407
+ render(
408
+ <PbDate
409
+ data={{ testid: testId }}
410
+ value={futureDate}
411
+ />
412
+ )
413
+
414
+ const kit = screen.getByTestId(testId)
415
+ expect(kit).toHaveTextContent('December 31')
416
+ expect(kit).toHaveTextContent(', 2099')
417
+ })
418
+ })
419
+
420
+ // Accessibility and HTML
421
+ describe('Accessibility and HTML Attributes', () => {
422
+ test('applies aria attributes correctly', () => {
423
+ const testId = 'pb-date-aria'
424
+ const ariaLabel = 'Custom date label'
425
+
426
+ render(
427
+ <PbDate
428
+ aria={{ label: ariaLabel }}
429
+ data={{ testid: testId }}
430
+ value={TEST_DATE}
431
+ />
432
+ )
433
+
434
+ const kit = screen.getByTestId(testId)
435
+ expect(kit).toHaveAttribute('aria-label', ariaLabel)
436
+ })
437
+
438
+ test('applies data attributes correctly', () => {
439
+ const testId = 'pb-date-data'
440
+ const customData = 'custom-value'
441
+
442
+ render(
443
+ <PbDate
444
+ data={{ testid: testId, custom: customData }}
445
+ value={TEST_DATE}
446
+ />
447
+ )
448
+
449
+ const kit = screen.getByTestId(testId)
450
+ expect(kit).toHaveAttribute('data-custom', customData)
451
+ })
452
+
453
+ test('applies HTML options correctly', () => {
454
+ const testId = 'pb-date-html'
455
+ const title = 'Custom title'
456
+
457
+ render(
458
+ <PbDate
459
+ data={{ testid: testId }}
460
+ htmlOptions={{ title }}
461
+ value={TEST_DATE}
462
+ />
463
+ )
464
+
465
+ const kit = screen.getByTestId(testId)
466
+ expect(kit).toHaveAttribute('title', title)
467
+ })
468
+ })
469
+
470
+ // Componenet Integration
471
+ describe('Component Integration', () => {
472
+ test('calls DateTime utility functions correctly', () => {
473
+ render(
474
+ <PbDate value={TEST_DATE} />
475
+ )
476
+
477
+ expect(DateTime.toWeekday).toHaveBeenCalledWith(TEST_DATE)
478
+ expect(DateTime.toMonth).toHaveBeenCalledWith(TEST_DATE)
479
+ expect(DateTime.toDay).toHaveBeenCalledWith(TEST_DATE)
480
+ expect(DateTime.toYear).toHaveBeenCalledWith(TEST_DATE)
481
+ })
482
+
483
+ test('renders all components together correctly', () => {
484
+ const testId = 'pb-date-full-featured'
485
+ render(
486
+ <PbDate
487
+ alignment="center"
488
+ data={{ testid: testId }}
489
+ showDayOfWeek
490
+ showIcon
491
+ size="lg"
492
+ value={TEST_DATE}
493
+ />
494
+ )
495
+
496
+ const kit = screen.getByTestId(testId)
497
+ expect(kit).toHaveClass('pb_date_kit_center')
498
+ expect(kit).toHaveTextContent('Monday')
499
+ expect(kit).toHaveTextContent('•')
500
+ expect(kit).toHaveTextContent('August 19')
501
+
502
+ const iconContainer = kit.querySelector('.pb_icon_kit_container')
503
+ expect(iconContainer).toBeInTheDocument()
504
+ })
505
+ })
506
+ })
@@ -8,7 +8,7 @@
8
8
  @import "./sass_partials/input_styles";
9
9
  @import "./sass_partials/quick_pick_styles";
10
10
 
11
- [class^=pb_date_picker_kit] {
11
+ .pb_date_picker_kit {
12
12
  .input_wrapper {
13
13
  position: relative;
14
14
 
@@ -6,11 +6,11 @@
6
6
  Default - display grey caret icon
7
7
  Hover - display blue caret icon
8
8
  */
9
- [class^=pb_date_picker_kit] {
9
+ .pb_date_picker_kit {
10
10
  /*Default - No value in date picker*/
11
11
  &.inline-date-picker {
12
- [class^="pb_text_input_kit"] .text_input_wrapper .flatpickr-wrapper input::placeholder,
13
- [class^="pb_text_input_kit"] .text_input_wrapper .flatpickr-wrapper .text_input .placeholder {
12
+ .pb_text_input_kit .text_input_wrapper .flatpickr-wrapper input::placeholder,
13
+ .pb_text_input_kit .text_input_wrapper .flatpickr-wrapper .text_input .placeholder {
14
14
  opacity: 1;
15
15
  }
16
16
  &:not(:hover) {
@@ -27,10 +27,10 @@
27
27
  }
28
28
  }
29
29
  &:hover {
30
- [class^="pb_text_input_kit"] .text_input_wrapper input,
31
- [class^="pb_text_input_kit"] .text_input_wrapper .text_input,
32
- [class^="pb_text_input_kit"] .text_input_wrapper .flatpickr-wrapper input::placeholder,
33
- [class^="pb_text_input_kit"] .text_input_wrapper .flatpickr-wrapper .text_input .placeholder {
30
+ .pb_text_input_kit .text_input_wrapper input,
31
+ .pb_text_input_kit .text_input_wrapper .text_input,
32
+ .pb_text_input_kit .text_input_wrapper .flatpickr-wrapper input::placeholder,
33
+ .pb_text_input_kit .text_input_wrapper .flatpickr-wrapper .text_input .placeholder {
34
34
  color: $primary;
35
35
  }
36
36
  .date-picker-inline-angle-down.cal_icon_wrapper {
@@ -95,7 +95,7 @@
95
95
  /*
96
96
  DARK MODE
97
97
  */
98
- [class^=pb_date_picker_kit].dark {
98
+ .pb_date_picker_kit.dark {
99
99
  &.inline-date-picker {
100
100
  &:not(:hover) {
101
101
  .date-picker-inline-angle-down.cal_icon_wrapper {
@@ -111,10 +111,10 @@
111
111
  }
112
112
  }
113
113
  &:hover {
114
- [class^="pb_text_input_kit"] .text_input_wrapper input,
115
- [class^="pb_text_input_kit"] .text_input_wrapper .text_input,
116
- [class^="pb_text_input_kit"] .text_input_wrapper .flatpickr-wrapper input::placeholder,
117
- [class^="pb_text_input_kit"] .text_input_wrapper .flatpickr-wrapper .text_input .placeholder {
114
+ .pb_text_input_kit .text_input_wrapper input,
115
+ .pb_text_input_kit .text_input_wrapper .text_input,
116
+ .pb_text_input_kit .text_input_wrapper .flatpickr-wrapper input::placeholder,
117
+ .pb_text_input_kit .text_input_wrapper .flatpickr-wrapper .text_input .placeholder {
118
118
  color: $white;
119
119
  }
120
120
  .date-picker-inline-angle-down.cal_icon_wrapper {
@@ -1,6 +1,6 @@
1
1
  @import "../../pb_textarea/textarea_mixin";
2
2
 
3
- [class^=pb_date_picker_kit] {
3
+ .pb_date_picker_kit {
4
4
 
5
5
  .pb_date_picker_kit_label {
6
6
  margin-bottom: $space_xs;
@@ -40,7 +40,7 @@
40
40
 
41
41
  &.error {
42
42
  .date_picker_input_wrapper {
43
- [class*=pb_body_kit] {
43
+ .pb_body_kit {
44
44
  margin-top: $space_xs / 2;
45
45
  }
46
46
 
@@ -2,7 +2,7 @@
2
2
  @import "../../tokens/spacing";
3
3
  @import "../../tokens/colors";
4
4
 
5
- [class^=pb_date_picker_kit] {
5
+ .pb_date_picker_kit {
6
6
  .pb_time_selection {
7
7
  color: inherit;
8
8
  text-align: left;
@@ -27,10 +27,10 @@
27
27
  }
28
28
  }
29
29
  }
30
- [class^=pb_caption_kit_md], [class^=pb_caption_kit_xs] {
30
+ .pb_caption_kit_md, .pb_caption_kit_xs {
31
31
  line-height: $text_larger;
32
32
  }
33
- [class^=pb_caption_kit_xs] {
33
+ .pb_caption_kit_xs {
34
34
  clear: both;
35
35
  display: block;
36
36
  }
@@ -41,7 +41,7 @@
41
41
  }
42
42
  }
43
43
  .meridiem {
44
- [class^=pb_form_group_kit] {
44
+ .pb_form_group_kit {
45
45
  margin-left: $space_sm;
46
46
  }
47
47
 
@@ -52,7 +52,8 @@
52
52
  background: transparent;
53
53
  }
54
54
 
55
- [class^=pb_selectable_card_kit] > label {
55
+ .pb_selectable_card_kit_enabled > label,
56
+ .pb_selectable_card_kit_checked_enabled > label {
56
57
  padding: 0;
57
58
  margin: 0;
58
59
  width: 60px;
@@ -1,34 +1,40 @@
1
- [class^=pb_date_range_inline_kit] {
2
- &[class*=_center] {
3
- & > [class^=pb_caption],
4
- & > [class^=pb_body] {
5
- text-align: center;
6
- }
7
- & > [class*=pb_date_range_inline_wrapper] {
8
- justify-content: center;
9
- }
10
- }
11
- &[class*=_right] {
12
- & > [class^=pb_caption],
13
- & > [class^=pb_body] {
14
- text-align: right;
15
- }
16
- & > [class*=pb_date_range_inline_wrapper] {
17
- justify-content: flex-end;
18
- }
19
- }
20
- [class^=pb_date_range_inline_wrapper] {
1
+ .pb_date_range_inline_kit,
2
+ .pb_date_range_inline_kit_left,
3
+ .pb_date_range_inline_kit_center,
4
+ .pb_date_range_inline_kit_right,
5
+ .pb_date_range_inline_kit_vertical {
6
+ .pb_date_range_inline_wrapper {
21
7
  display: flex;
22
8
  align-items: center;
23
- [class*=pb_date_range_inline_arrow] {
9
+ .pb_date_range_inline_arrow {
24
10
  margin-left: $space_xs/2;
25
11
  margin-right: $space_xs/2;
26
12
  }
27
- [class*=pb_date_range_inline_timezone] {
13
+ .pb_date_range_inline_timezone {
28
14
  margin-left: $space_xs/2;
29
15
  }
30
- [class*=pb_date_range_inline_icon] {
16
+ .pb_date_range_inline_icon {
31
17
  margin-right: $space_xs/2;
32
18
  }
33
19
  }
34
20
  }
21
+
22
+ .pb_date_range_inline_kit_center {
23
+ & > .pb_caption_kit,
24
+ & > .pb_body_kit {
25
+ text-align: center;
26
+ }
27
+ & > .pb_date_range_inline_wrapper {
28
+ justify-content: center;
29
+ }
30
+ }
31
+
32
+ .pb_date_range_inline_kit_right {
33
+ & > .pb_caption_kit,
34
+ & > .pb_body_kit {
35
+ text-align: right;
36
+ }
37
+ & > .pb_date_range_inline_wrapper {
38
+ justify-content: flex-end;
39
+ }
40
+ }
@@ -10,7 +10,7 @@ import Caption from "../pb_caption/_caption";
10
10
  import Icon from "../pb_icon/_icon";
11
11
 
12
12
  type DateRangeInlineProps = {
13
- align?: "left" | "center" | "vertical";
13
+ align?: "left" | "center" | "right";
14
14
  className?: string;
15
15
  dark?: boolean;
16
16
  data?: string;