playbook_ui 14.25.0 → 15.0.0.pre.alpha.PLAY1981sectionseparatorverticalchildren10469
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.
- checksums.yaml +4 -4
- data/app/pb_kits/playbook/_playbook.scss +0 -1
- data/app/pb_kits/playbook/pb_advanced_table/_advanced_table.scss +6 -6
- data/app/pb_kits/playbook/pb_advanced_table/advanced_table.test.jsx +1 -1
- data/app/pb_kits/playbook/pb_avatar/_avatar.scss +60 -65
- data/app/pb_kits/playbook/pb_avatar/avatar.test.js +1 -1
- data/app/pb_kits/playbook/pb_background/_background.scss +3 -3
- data/app/pb_kits/playbook/pb_badge/_badge.scss +135 -29
- data/app/pb_kits/playbook/pb_body/_body.scss +108 -35
- data/app/pb_kits/playbook/pb_body/_body_mixins.scss +1 -1
- data/app/pb_kits/playbook/pb_bread_crumbs/_bread_crumbs.scss +17 -30
- data/app/pb_kits/playbook/pb_button/_button.scss +39 -31
- data/app/pb_kits/playbook/pb_button/_button.tsx +12 -12
- data/app/pb_kits/playbook/pb_button/_button_mixins.scss +1 -1
- data/app/pb_kits/playbook/pb_button/button.rb +11 -18
- data/app/pb_kits/playbook/pb_button/button.test.js +3 -3
- data/app/pb_kits/playbook/pb_button_toolbar/_button_toolbar.scss +82 -73
- data/app/pb_kits/playbook/pb_button_toolbar/_button_toolbar_dark.scss +32 -33
- data/app/pb_kits/playbook/pb_button_toolbar/_button_toolbar_mixins.scss +1 -1
- data/app/pb_kits/playbook/pb_button_toolbar/button_toolbar.test.js +2 -2
- data/app/pb_kits/playbook/pb_caption/_caption.scss +100 -17
- data/app/pb_kits/playbook/pb_caption/_caption_mixin.scss +1 -8
- data/app/pb_kits/playbook/pb_card/_card.scss +116 -79
- data/app/pb_kits/playbook/pb_card/_card.tsx +26 -11
- data/app/pb_kits/playbook/pb_card/_card_mixin.scss +1 -1
- data/app/pb_kits/playbook/pb_card/card.rb +8 -7
- data/app/pb_kits/playbook/pb_card/card_header.rb +6 -2
- data/app/pb_kits/playbook/pb_card/docs/_card_header.html.erb +1 -1
- data/app/pb_kits/playbook/pb_checkbox/_checkbox.scss +11 -2
- data/app/pb_kits/playbook/pb_circle_icon_button/_circle_icon_button.scss +7 -7
- data/app/pb_kits/playbook/pb_circle_icon_button/_circle_icon_button.tsx +2 -0
- data/app/pb_kits/playbook/pb_circle_icon_button/circle_icon_button.html.erb +1 -0
- data/app/pb_kits/playbook/pb_circle_icon_button/circle_icon_button.test.js +1 -1
- data/app/pb_kits/playbook/pb_collapsible/__snapshots__/collapsible.test.js.snap +2 -1
- data/app/pb_kits/playbook/pb_collapsible/_collapsible.scss +4 -4
- data/app/pb_kits/playbook/pb_copy_button/copy_button.test.jsx +1 -1
- data/app/pb_kits/playbook/pb_currency/_currency.scss +124 -39
- data/app/pb_kits/playbook/pb_dashboard_value/_dashboard_value.scss +16 -6
- data/app/pb_kits/playbook/pb_date/_date.scss +16 -18
- data/app/pb_kits/playbook/pb_date/date.test.js +506 -0
- data/app/pb_kits/playbook/pb_date_picker/_date_picker.scss +1 -1
- data/app/pb_kits/playbook/pb_date_picker/_date_picker.tsx +19 -0
- data/app/pb_kits/playbook/pb_date_picker/date_picker.html.erb +1 -0
- data/app/pb_kits/playbook/pb_date_picker/date_picker_helper.ts +48 -4
- data/app/pb_kits/playbook/pb_date_picker/sass_partials/_inline_styles.scss +12 -12
- data/app/pb_kits/playbook/pb_date_picker/sass_partials/_input_styles.scss +2 -2
- data/app/pb_kits/playbook/pb_date_picker/sass_partials/_time_selection_styles.scss +6 -5
- data/app/pb_kits/playbook/pb_date_range_inline/_date_range_inline.scss +29 -23
- data/app/pb_kits/playbook/pb_date_range_inline/_date_range_inline.tsx +1 -1
- data/app/pb_kits/playbook/pb_date_range_stacked/_date_range_stacked.scss +1 -1
- data/app/pb_kits/playbook/pb_date_range_stacked/date_range_stacked.test.js +2 -2
- data/app/pb_kits/playbook/pb_date_stacked/_date_stacked.scss +66 -26
- data/app/pb_kits/playbook/pb_date_stacked/date_stacked.rb +1 -1
- data/app/pb_kits/playbook/pb_date_stacked/date_stacked.test.js +2 -2
- data/app/pb_kits/playbook/pb_date_time/_date_time.scss +8 -15
- data/app/pb_kits/playbook/pb_date_time_stacked/_date_time_stacked.scss +6 -7
- data/app/pb_kits/playbook/pb_date_year_stacked/_date_year_stacked.scss +17 -14
- data/app/pb_kits/playbook/pb_date_year_stacked/date_year_stacked.test.js +1 -1
- data/app/pb_kits/playbook/pb_detail/_detail.scss +86 -21
- data/app/pb_kits/playbook/pb_dialog/_close_icon.tsx +5 -1
- data/app/pb_kits/playbook/pb_dialog/_dialog.scss +330 -123
- data/app/pb_kits/playbook/pb_dialog/_dialog.tsx +6 -8
- data/app/pb_kits/playbook/pb_dialog/dialog.html.erb +1 -1
- data/app/pb_kits/playbook/pb_dialog/dialog_header.html.erb +2 -2
- data/app/pb_kits/playbook/pb_dialog/docs/_dialog_loading.html.erb +16 -2
- data/app/pb_kits/playbook/pb_distribution_bar/_distribution_bar.scss +10 -7
- data/app/pb_kits/playbook/pb_draggable/draggable.test.jsx +1 -1
- data/app/pb_kits/playbook/pb_dropdown/_dropdown.scss +1 -1
- data/app/pb_kits/playbook/pb_dropdown/dropdown.test.jsx +6 -6
- data/app/pb_kits/playbook/pb_dropdown/index.js +3 -3
- data/app/pb_kits/playbook/pb_empty_state/_empty_state.scss +4 -4
- data/app/pb_kits/playbook/pb_file_upload/_file_upload.scss +20 -9
- data/app/pb_kits/playbook/pb_file_upload/file_upload.html.erb +1 -1
- data/app/pb_kits/playbook/pb_filter/_filter.scss +8 -8
- data/app/pb_kits/playbook/pb_fixed_confirmation_toast/_fixed_confirmation_toast.scss +65 -29
- data/app/pb_kits/playbook/pb_fixed_confirmation_toast/_fixed_confirmation_toast.tsx +1 -2
- data/app/pb_kits/playbook/pb_fixed_confirmation_toast/docs/_fixed_confirmation_toast_props_swift.md +3 -2
- data/app/pb_kits/playbook/pb_fixed_confirmation_toast/fixed_confirmation_toast.test.js +1 -1
- data/app/pb_kits/playbook/pb_flex/_flex.scss +106 -100
- data/app/pb_kits/playbook/pb_flex/_flex.tsx +38 -28
- data/app/pb_kits/playbook/pb_flex/_flex_item.scss +146 -51
- data/app/pb_kits/playbook/pb_flex/_flex_item.tsx +19 -8
- data/app/pb_kits/playbook/pb_flex/docs/_flex_gap.html.erb +12 -1
- data/app/pb_kits/playbook/pb_flex/docs/_flex_gap.jsx +26 -1
- data/app/pb_kits/playbook/pb_flex/docs/_flex_gap_rails.md +11 -0
- data/app/pb_kits/playbook/pb_flex/docs/_flex_gap_react.md +11 -0
- data/app/pb_kits/playbook/pb_flex/flex.rb +22 -28
- data/app/pb_kits/playbook/pb_flex/flex_item.rb +6 -6
- data/app/pb_kits/playbook/pb_form_group/_form_group.scss +1 -1
- data/app/pb_kits/playbook/pb_form_pill/_form_pill.scss +381 -344
- data/app/pb_kits/playbook/pb_form_pill/_form_pill.test.jsx +4 -4
- data/app/pb_kits/playbook/pb_form_pill/_form_pill.tsx +8 -7
- data/app/pb_kits/playbook/pb_form_pill/form_pill.rb +9 -2
- data/app/pb_kits/playbook/pb_gauge/_gauge.scss +5 -5
- data/app/pb_kits/playbook/pb_hashtag/_hashtag.scss +1 -1
- data/app/pb_kits/playbook/pb_highlight/_highlight.scss +1 -1
- data/app/pb_kits/playbook/pb_home_address_street/home_adress_street.test.js +2 -2
- data/app/pb_kits/playbook/pb_icon/_icon.scss +4 -0
- data/app/pb_kits/playbook/pb_icon/_icon.tsx +13 -2
- data/app/pb_kits/playbook/pb_icon/icon.rb +9 -1
- data/app/pb_kits/playbook/pb_icon_button/_icon_button.scss +4 -4
- data/app/pb_kits/playbook/pb_icon_circle/_icon_circle.scss +40 -39
- data/app/pb_kits/playbook/pb_icon_circle/icon_circle.html.erb +1 -1
- data/app/pb_kits/playbook/pb_icon_circle/icon_circle.rb +1 -1
- data/app/pb_kits/playbook/pb_icon_stat_value/icon_stat_value.test.js +1 -1
- data/app/pb_kits/playbook/pb_icon_value/_icon_value.scss +16 -15
- data/app/pb_kits/playbook/pb_image/_image.scss +41 -36
- data/app/pb_kits/playbook/pb_label_pill/_label_pill.scss +1 -1
- data/app/pb_kits/playbook/pb_label_value/_label_value.scss +3 -2
- data/app/pb_kits/playbook/pb_label_value/label_value.test.js +2 -2
- data/app/pb_kits/playbook/pb_layout/_layout.scss +336 -305
- data/app/pb_kits/playbook/pb_layout/_layout.tsx +14 -11
- data/app/pb_kits/playbook/pb_layout/item.rb +1 -7
- data/app/pb_kits/playbook/pb_layout/layout.rb +16 -25
- data/app/pb_kits/playbook/pb_layout/layout.test.js +3 -3
- data/app/pb_kits/playbook/pb_legend/_legend.scss +66 -16
- data/app/pb_kits/playbook/pb_legend/legend.test.js +1 -1
- data/app/pb_kits/playbook/pb_lightbox/lightbox.scss +4 -4
- data/app/pb_kits/playbook/pb_lightbox/lightbox.test.jsx +1 -1
- data/app/pb_kits/playbook/pb_link/_link.scss +113 -19
- data/app/pb_kits/playbook/pb_list/_list.scss +1 -1
- data/app/pb_kits/playbook/pb_loading_inline/_loading_inline.scss +13 -11
- data/app/pb_kits/playbook/pb_loading_inline/_loading_inline.tsx +3 -1
- data/app/pb_kits/playbook/pb_loading_inline/docs/_loading_inline_variant.html.erb +5 -0
- data/app/pb_kits/playbook/pb_loading_inline/docs/_loading_inline_variant.jsx +24 -0
- data/app/pb_kits/playbook/pb_loading_inline/docs/example.yml +2 -0
- data/app/pb_kits/playbook/pb_loading_inline/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_loading_inline/loading_inline.html.erb +1 -1
- data/app/pb_kits/playbook/pb_loading_inline/loading_inline.rb +11 -0
- data/app/pb_kits/playbook/pb_map/_map.scss +1 -1
- data/app/pb_kits/playbook/pb_map/docs/_map_default.jsx +1 -1
- data/app/pb_kits/playbook/pb_map/docs/_map_with_custom_button.jsx +1 -1
- data/app/pb_kits/playbook/pb_map/docs/_map_with_plugin.jsx +1 -1
- data/app/pb_kits/playbook/pb_message/_message.scss +21 -16
- data/app/pb_kits/playbook/pb_message/_message.tsx +1 -0
- data/app/pb_kits/playbook/pb_message/_message_mixins.scss +5 -12
- data/app/pb_kits/playbook/pb_message/message.html.erb +1 -1
- data/app/pb_kits/playbook/pb_multi_level_select/_multi_level_select.scss +6 -3
- data/app/pb_kits/playbook/pb_multiple_users/_multiple_users.scss +16 -15
- data/app/pb_kits/playbook/pb_multiple_users_stacked/_multiple_users_stacked.scss +1 -1
- data/app/pb_kits/playbook/pb_nav/_bold_mixin.scss +1 -1
- data/app/pb_kits/playbook/pb_nav/_collapsible_nav.scss +1 -1
- data/app/pb_kits/playbook/pb_online_status/_online_status.scss +19 -15
- data/app/pb_kits/playbook/pb_online_status/_online_status.tsx +1 -1
- data/app/pb_kits/playbook/pb_online_status/online_status.rb +5 -4
- data/app/pb_kits/playbook/pb_online_status/online_status.test.js +2 -2
- data/app/pb_kits/playbook/pb_overlay/_overlay.scss +1 -1
- data/app/pb_kits/playbook/pb_overlay/overlay.rb +1 -1
- data/app/pb_kits/playbook/pb_passphrase/_passphrase.scss +5 -2
- data/app/pb_kits/playbook/pb_person/_person.scss +1 -1
- data/app/pb_kits/playbook/pb_phone_number_input/_phone_number_input.scss +1 -1
- data/app/pb_kits/playbook/pb_pill/_pill.scss +23 -21
- data/app/pb_kits/playbook/pb_progress_pills/_progress_pills.scss +15 -13
- data/app/pb_kits/playbook/pb_progress_simple/_progress_simple.scss +108 -33
- data/app/pb_kits/playbook/pb_progress_step/_progress_step.scss +1 -1
- data/app/pb_kits/playbook/pb_radio/_radio.scss +71 -52
- data/app/pb_kits/playbook/pb_radio/_radio.tsx +1 -1
- data/app/pb_kits/playbook/pb_radio/docs/_radio_react_hook.jsx +0 -3
- data/app/pb_kits/playbook/pb_rich_text_editor/_rich_text_editor.scss +4 -4
- data/app/pb_kits/playbook/pb_section_separator/_section_separator.scss +90 -71
- data/app/pb_kits/playbook/pb_section_separator/_section_separator.tsx +9 -1
- data/app/pb_kits/playbook/pb_section_separator/_section_separator_mixin.scss +1 -1
- data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_children.html.erb +23 -0
- data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_children.jsx +45 -7
- data/app/pb_kits/playbook/pb_section_separator/docs/_section_separator_color.jsx +3 -1
- data/app/pb_kits/playbook/pb_section_separator/section_separator.html.erb +4 -1
- data/app/pb_kits/playbook/pb_section_separator/section_separator.rb +7 -1
- data/app/pb_kits/playbook/pb_section_separator/section_separator.test.js +165 -0
- data/app/pb_kits/playbook/pb_select/_select.scss +4 -4
- data/app/pb_kits/playbook/pb_selectable_card/_selectable_card.scss +6 -2
- data/app/pb_kits/playbook/pb_selectable_card_icon/_selectable_card_icon.scss +17 -8
- data/app/pb_kits/playbook/pb_selectable_icon/_selectable_icon.scss +39 -29
- data/app/pb_kits/playbook/pb_selectable_list/_item.tsx +2 -0
- data/app/pb_kits/playbook/pb_selectable_list/_selectable_list.scss +8 -11
- data/app/pb_kits/playbook/pb_selectable_list/selectable_list.test.js +2 -3
- data/app/pb_kits/playbook/pb_selectable_list/selectable_list_item.html.erb +2 -2
- data/app/pb_kits/playbook/pb_source/_source.scss +8 -8
- data/app/pb_kits/playbook/pb_star_rating/_star_rating.scss +1 -1
- data/app/pb_kits/playbook/pb_star_rating/star_rating.test.js +1 -1
- data/app/pb_kits/playbook/pb_stat_value/_stat_value.scss +2 -2
- data/app/pb_kits/playbook/pb_text_input/_text_input.scss +5 -5
- data/app/pb_kits/playbook/pb_text_input/_text_input.tsx +3 -0
- data/app/pb_kits/playbook/pb_text_input/docs/_text_input_autocomplete.html.erb +41 -0
- data/app/pb_kits/playbook/pb_text_input/docs/_text_input_autocomplete.jsx +80 -0
- data/app/pb_kits/playbook/pb_text_input/docs/_text_input_autocomplete.md +1 -0
- data/app/pb_kits/playbook/pb_text_input/docs/example.yml +3 -0
- data/app/pb_kits/playbook/pb_text_input/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_text_input/text_input.rb +17 -3
- data/app/pb_kits/playbook/pb_text_input/text_input.test.js +38 -0
- data/app/pb_kits/playbook/pb_textarea/_textarea.scss +6 -6
- data/app/pb_kits/playbook/pb_time/_time.scss +44 -17
- data/app/pb_kits/playbook/pb_time_range_inline/_time_range_inline.scss +44 -23
- data/app/pb_kits/playbook/pb_time_range_inline/time_range_inline.rb +1 -1
- data/app/pb_kits/playbook/pb_time_stacked/_time_stacked.scss +5 -8
- data/app/pb_kits/playbook/pb_timestamp/_timestamp.scss +16 -10
- data/app/pb_kits/playbook/pb_timestamp/_timestamp.tsx +1 -4
- data/app/pb_kits/playbook/pb_timestamp/timestamp.rb +1 -1
- data/app/pb_kits/playbook/pb_timestamp/timestamp.test.js +2 -2
- data/app/pb_kits/playbook/pb_title/_title.scss +44 -39
- data/app/pb_kits/playbook/pb_title/_title.tsx +17 -8
- data/app/pb_kits/playbook/pb_title/_title_mixin.scss +2 -2
- data/app/pb_kits/playbook/pb_title/title.rb +20 -10
- data/app/pb_kits/playbook/pb_title/title.test.js +4 -4
- data/app/pb_kits/playbook/pb_title_count/_title_count.scss +19 -8
- data/app/pb_kits/playbook/pb_title_detail/_title_detail.scss +10 -11
- data/app/pb_kits/playbook/pb_toggle/_toggle.scss +4 -1
- data/app/pb_kits/playbook/pb_tooltip/_tooltip.scss +3 -4
- data/app/pb_kits/playbook/pb_tooltip/tooltip.rb +1 -1
- data/app/pb_kits/playbook/pb_typeahead/_typeahead.test.jsx +3 -3
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills.html.erb +1 -1
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills.jsx +1 -1
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_color.html.erb +1 -22
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_with_pills_color.jsx +1 -1
- data/app/pb_kits/playbook/pb_typeahead/docs/_typeahead_without_pills.html.erb +2 -2
- data/app/pb_kits/playbook/pb_user/_user.scss +83 -33
- data/app/pb_kits/playbook/pb_user/docs/_user_props_table.md +14 -7
- data/app/pb_kits/playbook/pb_user/user.test.js +1 -1
- data/app/pb_kits/playbook/pb_user_badge/_user_badge.scss +23 -8
- data/app/pb_kits/playbook/pb_weekday_stacked/_weekday_stacked.scss +10 -10
- data/app/pb_kits/playbook/pb_weekday_stacked/weekday_stacked.test.jsx +3 -3
- data/app/pb_kits/playbook/utilities/_gap.scss +12 -24
- data/app/pb_kits/playbook/utilities/globalPropNames.mjs +2 -0
- data/app/pb_kits/playbook/utilities/globalProps.ts +28 -4
- data/dist/chunks/{_line_graph-BvTZR440.js → _line_graph-B-n_nsLR.js} +1 -1
- data/dist/chunks/_typeahead-CS9PvM1x.js +6 -0
- data/dist/chunks/_weekday_stacked-DaFBilv5.js +37 -0
- data/dist/chunks/{lib-DgtxnJqa.js → lib-BTs5acfO.js} +2 -2
- data/dist/chunks/{pb_form_validation-_NsOWfBS.js → pb_form_validation-CKkaQFX3.js} +1 -1
- data/dist/chunks/vendor.js +1 -1
- data/dist/menu.yml +0 -6
- data/dist/playbook-doc.js +2 -2
- data/dist/playbook-rails-react-bindings.js +1 -1
- data/dist/playbook-rails.js +1 -1
- data/dist/playbook.css +1 -1
- data/lib/playbook/classnames.rb +2 -0
- data/lib/playbook/spacing.rb +53 -1
- data/lib/playbook/version.rb +2 -2
- metadata +16 -38
- data/app/pb_kits/playbook/pb_dialog/dialogHelper.js +0 -65
- data/app/pb_kits/playbook/pb_drawer/_close_icon.tsx +0 -25
- data/app/pb_kits/playbook/pb_drawer/_drawer.scss +0 -381
- data/app/pb_kits/playbook/pb_drawer/_drawer.tsx +0 -231
- data/app/pb_kits/playbook/pb_drawer/_drawer_context.tsx +0 -3
- data/app/pb_kits/playbook/pb_drawer/context.ts +0 -11
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_behavior.html.erb +0 -8
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_behavior.jsx +0 -41
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_borders.html.erb +0 -33
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_borders.jsx +0 -78
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.html.erb +0 -3
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_breakpoints.jsx +0 -26
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_default.html.erb +0 -20
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_default.jsx +0 -59
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.html.erb +0 -24
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.jsx +0 -61
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_menu.md +0 -24
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.html.erb +0 -21
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.jsx +0 -54
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_overlay.md +0 -1
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_sizes.html.erb +0 -49
- data/app/pb_kits/playbook/pb_drawer/docs/_drawer_sizes.jsx +0 -99
- data/app/pb_kits/playbook/pb_drawer/docs/example.yml +0 -20
- data/app/pb_kits/playbook/pb_drawer/docs/index.js +0 -7
- data/app/pb_kits/playbook/pb_drawer/drawer.html.erb +0 -20
- data/app/pb_kits/playbook/pb_drawer/drawer.rb +0 -56
- data/app/pb_kits/playbook/pb_drawer/drawer.test.jsx +0 -81
- data/app/pb_kits/playbook/pb_drawer/hooks/useBreakpoint.tsx +0 -60
- data/app/pb_kits/playbook/pb_drawer/hooks/useDrawerAnimation.tsx +0 -21
- data/app/pb_kits/playbook/pb_drawer/index.js +0 -257
- data/app/pb_kits/playbook/pb_flex/docs/_flex_gap.md +0 -9
- data/dist/chunks/_typeahead-BtNEotfH.js +0 -6
- data/dist/chunks/_weekday_stacked-qhZxDWNu.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
|
+
})
|
@@ -4,6 +4,7 @@ import classnames from 'classnames'
|
|
4
4
|
import { buildAriaProps, buildCss, buildDataProps, buildHtmlProps } from '../utilities/props'
|
5
5
|
import { deprecatedProps, globalProps, GlobalProps } from '../utilities/globalProps'
|
6
6
|
import { getAllIcons } from "../utilities/icons/allicons"
|
7
|
+
import { camelToSnakeCase } from '../utilities/text'
|
7
8
|
|
8
9
|
import datePickerHelper from './date_picker_helper'
|
9
10
|
import Icon from '../pb_icon/_icon'
|
@@ -114,6 +115,20 @@ const DatePicker = (props: DatePickerProps): React.ReactElement => {
|
|
114
115
|
const inputAriaProps = buildAriaProps(inputAria)
|
115
116
|
const inputDataProps = buildDataProps(inputData)
|
116
117
|
|
118
|
+
// Convert cursor prop to CSS-style format to apply to input tag below
|
119
|
+
const getCursorStyle = (cursor?: string): string => {
|
120
|
+
// If input is disabled, always use 'not-allowed'
|
121
|
+
if (disableInput) return 'not-allowed'
|
122
|
+
|
123
|
+
// If cursor prop is provided, convert it to styling format
|
124
|
+
if (cursor) {
|
125
|
+
return camelToSnakeCase(cursor).replace(/_/g, '-')
|
126
|
+
}
|
127
|
+
|
128
|
+
// Default to 'pointer'
|
129
|
+
return 'pointer'
|
130
|
+
}
|
131
|
+
|
117
132
|
useEffect(() => {
|
118
133
|
datePickerHelper({
|
119
134
|
allowInput,
|
@@ -149,6 +164,7 @@ const DatePicker = (props: DatePickerProps): React.ReactElement => {
|
|
149
164
|
required: false,
|
150
165
|
}, scrollContainer)
|
151
166
|
}, initializeOnce ? [] : undefined)
|
167
|
+
|
152
168
|
const filteredProps = {...props}
|
153
169
|
if (filteredProps.marginBottom === undefined) {
|
154
170
|
filteredProps.marginBottom = "sm"
|
@@ -163,6 +179,7 @@ const DatePicker = (props: DatePickerProps): React.ReactElement => {
|
|
163
179
|
error ? 'error' : null,
|
164
180
|
className
|
165
181
|
)
|
182
|
+
|
166
183
|
const iconWrapperClass = () => {
|
167
184
|
let base = 'cal_icon_wrapper'
|
168
185
|
if (dark) {
|
@@ -176,6 +193,7 @@ const DatePicker = (props: DatePickerProps): React.ReactElement => {
|
|
176
193
|
}
|
177
194
|
return base
|
178
195
|
}
|
196
|
+
|
179
197
|
const angleDown = getAllIcons()["angleDown"].icon as unknown as { [key: string]: SVGElement }
|
180
198
|
|
181
199
|
return (
|
@@ -206,6 +224,7 @@ const DatePicker = (props: DatePickerProps): React.ReactElement => {
|
|
206
224
|
name={name}
|
207
225
|
onChange={inputOnChange}
|
208
226
|
placeholder={placeholder}
|
227
|
+
style={{ cursor: getCursorStyle(filteredProps.cursor) }}
|
209
228
|
value={inputValue}
|
210
229
|
/>
|
211
230
|
|
@@ -89,6 +89,48 @@ const datePickerHelper = (config: DatePickerConfig, scrollContainer: string | HT
|
|
89
89
|
}
|
90
90
|
}
|
91
91
|
|
92
|
+
// Helper function to get min/max years based on yearRange. If minDate/maxDate provided, grab year from those values
|
93
|
+
const getMinMaxYears = () => {
|
94
|
+
const [minYear, maxYear] = yearRange;
|
95
|
+
|
96
|
+
const extractYear = (dateOption: typeof minDate | typeof maxDate): number | null => {
|
97
|
+
if (!dateOption) return null;
|
98
|
+
|
99
|
+
// If it's already a number, assume it's a year
|
100
|
+
if (typeof dateOption === 'number') {
|
101
|
+
return dateOption;
|
102
|
+
}
|
103
|
+
|
104
|
+
// If it's a string, extract year with regex
|
105
|
+
if (typeof dateOption === 'string') {
|
106
|
+
const match = dateOption.match(/\b(19|20)\d{2}\b/);
|
107
|
+
return match ? parseInt(match[0], 10) : null;
|
108
|
+
}
|
109
|
+
|
110
|
+
// If it's a Date object, get the year directly
|
111
|
+
if (dateOption instanceof Date) {
|
112
|
+
return dateOption.getFullYear();
|
113
|
+
}
|
114
|
+
|
115
|
+
return null;
|
116
|
+
};
|
117
|
+
|
118
|
+
const setMinYear = minDate ? (extractYear(minDate) ?? minYear) : minYear;
|
119
|
+
const setMaxYear = maxDate ? (extractYear(maxDate) ?? maxYear) : maxYear;
|
120
|
+
|
121
|
+
return { setMinYear, setMaxYear };
|
122
|
+
};
|
123
|
+
|
124
|
+
const { setMinYear, setMaxYear } = getMinMaxYears()
|
125
|
+
|
126
|
+
// Helper function to get min/max dates based on yearRange
|
127
|
+
const getMinMaxDates = () => {
|
128
|
+
const setMinDate = minDate || `01/01/${setMinYear}`
|
129
|
+
const setMaxDate = maxDate || `12/31/${setMaxYear}`
|
130
|
+
|
131
|
+
return { setMinDate, setMaxDate }
|
132
|
+
}
|
133
|
+
|
92
134
|
const disabledWeekDays = () => {
|
93
135
|
return (
|
94
136
|
[
|
@@ -201,6 +243,8 @@ const datePickerHelper = (config: DatePickerConfig, scrollContainer: string | HT
|
|
201
243
|
// | Flatpickr initializer w/ config |
|
202
244
|
// ===========================================================
|
203
245
|
|
246
|
+
const { setMinDate, setMaxDate } = getMinMaxDates()
|
247
|
+
|
204
248
|
flatpickr(`#${pickerId}`, {
|
205
249
|
allowInput,
|
206
250
|
closeOnSelect,
|
@@ -212,8 +256,8 @@ const datePickerHelper = (config: DatePickerConfig, scrollContainer: string | HT
|
|
212
256
|
locale: {
|
213
257
|
rangeSeparator: ' to '
|
214
258
|
},
|
215
|
-
maxDate,
|
216
|
-
minDate,
|
259
|
+
maxDate: setMaxDate,
|
260
|
+
minDate: setMinDate,
|
217
261
|
mode,
|
218
262
|
nextArrow: '<i class="far fa-angle-right"></i>',
|
219
263
|
onOpen: [() => {
|
@@ -250,7 +294,7 @@ const datePickerHelper = (config: DatePickerConfig, scrollContainer: string | HT
|
|
250
294
|
|
251
295
|
// create html option tags for desired years
|
252
296
|
let years = ''
|
253
|
-
for (let year =
|
297
|
+
for (let year = setMaxYear; year >= setMinYear; year--) {
|
254
298
|
years += `<option value="${year}">${year}</option>`
|
255
299
|
}
|
256
300
|
|
@@ -323,7 +367,7 @@ const datePickerHelper = (config: DatePickerConfig, scrollContainer: string | HT
|
|
323
367
|
}
|
324
368
|
// === End of Automatic Sync Logic ===
|
325
369
|
|
326
|
-
|
370
|
+
|
327
371
|
// Adding dropdown icons to year and month select
|
328
372
|
dropdown.insertAdjacentHTML('afterend', `<i class="year-dropdown-icon">${angleDown}</i>`)
|
329
373
|
if (picker.monthElements[0].parentElement) {
|