@tcn/ui 0.3.1 → 0.3.3
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.
- package/README.md +2 -1
- package/dist/actions/button/base_button/base_button.d.ts.map +1 -1
- package/dist/actions/button/base_button/base_button.js +18 -18
- package/dist/actions/button/base_button/base_button.js.map +1 -1
- package/dist/actions/button/button_group/button_group.d.ts +1 -1
- package/dist/actions/button/button_group/button_group.d.ts.map +1 -1
- package/dist/actions/button/button_group/button_group.js +10 -7
- package/dist/actions/button/button_group/button_group.js.map +1 -1
- package/dist/actions/button/select_group/select_group.js +2 -2
- package/dist/actions/button/select_group/select_group.js.map +1 -1
- package/dist/badge.css +1 -1
- package/dist/base_button.css +1 -1
- package/dist/body_text.css +1 -1
- package/dist/bottom_resize_handle.css +1 -1
- package/dist/bubble.css +1 -1
- package/dist/button.css +1 -1
- package/dist/button_group.css +1 -1
- package/dist/callout.css +1 -1
- package/dist/caption.css +1 -1
- package/dist/checkbox.css +1 -1
- package/dist/chip.css +1 -1
- package/dist/circle.css +1 -1
- package/dist/collapsible_box.css +1 -1
- package/dist/color_input.css +1 -1
- package/dist/color_picker.css +1 -1
- package/dist/column.css +1 -1
- package/dist/confirm.css +1 -1
- package/dist/css/layers.css +1 -0
- package/dist/date_picker.css +1 -1
- package/dist/date_picker_date.css +1 -1
- package/dist/date_picker_day.css +1 -1
- package/dist/date_picker_header.css +1 -1
- package/dist/date_picker_input.css +1 -1
- package/dist/date_picker_time_selector.css +1 -1
- package/dist/date_picker_year_input.css +1 -1
- package/dist/date_picker_year_selector.css +1 -1
- package/dist/divider.css +1 -1
- package/dist/draggable.css +1 -1
- package/dist/drawer_bottom.css +1 -1
- package/dist/drawer_end.css +1 -1
- package/dist/drawer_start.css +1 -1
- package/dist/drawer_top.css +1 -1
- package/dist/end_resize_handle.css +1 -1
- package/dist/feedback/progress/progress_bar.d.ts.map +1 -1
- package/dist/feedback/progress/progress_bar.js +34 -26
- package/dist/feedback/progress/progress_bar.js.map +1 -1
- package/dist/field_control.css +1 -1
- package/dist/field_set.css +1 -1
- package/dist/footer.css +1 -1
- package/dist/footnote.css +1 -1
- package/dist/form/field/common/field_control/field_control.js +9 -9
- package/dist/form/field/common/field_control/field_control.js.map +1 -1
- package/dist/form/field/common/field_description.js +3 -3
- package/dist/form/field/common/field_description.js.map +1 -1
- package/dist/form/field/common/field_error.js +16 -8
- package/dist/form/field/common/field_error.js.map +1 -1
- package/dist/form/field/common/field_header.js +7 -7
- package/dist/form/field/common/field_header.js.map +1 -1
- package/dist/form/field/common/status_input/status_input.d.ts.map +1 -1
- package/dist/form/field/common/status_input/status_input.js +15 -9
- package/dist/form/field/common/status_input/status_input.js.map +1 -1
- package/dist/form/field/h_field/h_field.js +1 -1
- package/dist/form/field/h_field/h_field.js.map +1 -1
- package/dist/form/field/v_field/v_field.js +5 -5
- package/dist/form/field/v_field/v_field.js.map +1 -1
- package/dist/form/field_set/field_set.d.ts.map +1 -1
- package/dist/form/field_set/field_set.js +17 -10
- package/dist/form/field_set/field_set.js.map +1 -1
- package/dist/frame.css +1 -1
- package/dist/grid.css +1 -1
- package/dist/h_body.css +1 -1
- package/dist/h_field.css +1 -1
- package/dist/h_panel.css +1 -1
- package/dist/header.css +1 -1
- package/dist/headline.css +1 -1
- package/dist/input.css +1 -1
- package/dist/inputs/checkbox/checkbox.js +14 -14
- package/dist/inputs/checkbox/checkbox.js.map +1 -1
- package/dist/inputs/checkbox/checkbox_row.d.ts +1 -1
- package/dist/inputs/checkbox/checkbox_row.d.ts.map +1 -1
- package/dist/inputs/checkbox/checkbox_row.js +19 -8
- package/dist/inputs/checkbox/checkbox_row.js.map +1 -1
- package/dist/inputs/color_input/color_input.d.ts.map +1 -1
- package/dist/inputs/color_input/color_input.js +32 -28
- package/dist/inputs/color_input/color_input.js.map +1 -1
- package/dist/inputs/color_input/color_picker.js +16 -16
- package/dist/inputs/color_input/color_picker.js.map +1 -1
- package/dist/inputs/combo_box/combo_box.js +1 -1
- package/dist/inputs/combo_box/combo_box.js.map +1 -1
- package/dist/inputs/date_picker/date_picker.js +10 -10
- package/dist/inputs/date_picker/date_picker.js.map +1 -1
- package/dist/inputs/date_picker/date_picker_body.js +1 -1
- package/dist/inputs/date_picker/date_picker_body.js.map +1 -1
- package/dist/inputs/date_picker/date_picker_date.js +2 -2
- package/dist/inputs/date_picker/date_picker_date.js.map +1 -1
- package/dist/inputs/date_picker/date_picker_day.d.ts.map +1 -1
- package/dist/inputs/date_picker/date_picker_day.js +16 -8
- package/dist/inputs/date_picker/date_picker_day.js.map +1 -1
- package/dist/inputs/date_picker/date_picker_header.js +1 -1
- package/dist/inputs/date_picker/date_picker_header.js.map +1 -1
- package/dist/inputs/date_picker/date_picker_input.js +3 -3
- package/dist/inputs/date_picker/date_picker_input.js.map +1 -1
- package/dist/inputs/date_picker/date_picker_time_selector.d.ts.map +1 -1
- package/dist/inputs/date_picker/date_picker_time_selector.js +14 -11
- package/dist/inputs/date_picker/date_picker_time_selector.js.map +1 -1
- package/dist/inputs/date_picker/date_picker_year_input.js +4 -4
- package/dist/inputs/date_picker/date_picker_year_input.js.map +1 -1
- package/dist/inputs/date_picker/date_picker_year_selector.d.ts.map +1 -1
- package/dist/inputs/date_picker/date_picker_year_selector.js +13 -10
- package/dist/inputs/date_picker/date_picker_year_selector.js.map +1 -1
- package/dist/inputs/index.d.ts +0 -4
- package/dist/inputs/index.d.ts.map +1 -1
- package/dist/inputs/index.js +53 -61
- package/dist/inputs/index.js.map +1 -1
- package/dist/inputs/input/input.js +3 -3
- package/dist/inputs/input/input.js.map +1 -1
- package/dist/inputs/multiselect/multiselect.d.ts.map +1 -1
- package/dist/inputs/multiselect/multiselect.js +10 -9
- package/dist/inputs/multiselect/multiselect.js.map +1 -1
- package/dist/inputs/multiselect/multiselect_inline_values.d.ts.map +1 -1
- package/dist/inputs/multiselect/multiselect_inline_values.js +18 -17
- package/dist/inputs/multiselect/multiselect_inline_values.js.map +1 -1
- package/dist/inputs/multiselect/multiselect_values.js +20 -20
- package/dist/inputs/multiselect/multiselect_values.js.map +1 -1
- package/dist/inputs/phone_number_input/phone_number_input.d.ts.map +1 -1
- package/dist/inputs/phone_number_input/phone_number_input.js +94 -81
- package/dist/inputs/phone_number_input/phone_number_input.js.map +1 -1
- package/dist/inputs/radio/radio.js +11 -11
- package/dist/inputs/radio/radio.js.map +1 -1
- package/dist/inputs/select/select.d.ts.map +1 -1
- package/dist/inputs/select/select.js +33 -33
- package/dist/inputs/select/select.js.map +1 -1
- package/dist/inputs/slider/slider.js +4 -4
- package/dist/inputs/slider/slider.js.map +1 -1
- package/dist/inputs/suggestions/suggestion_item.js +9 -9
- package/dist/inputs/suggestions/suggestion_item.js.map +1 -1
- package/dist/inputs/suggestions/suggestion_list.d.ts.map +1 -1
- package/dist/inputs/suggestions/suggestion_list.js +29 -22
- package/dist/inputs/suggestions/suggestion_list.js.map +1 -1
- package/dist/inputs/switch/switch.js +14 -14
- package/dist/inputs/switch/switch.js.map +1 -1
- package/dist/inputs/textarea/textarea.js +6 -6
- package/dist/inputs/textarea/textarea.js.map +1 -1
- package/dist/inputs/unit_input/unit_input.js +8 -8
- package/dist/inputs/unit_input/unit_input.js.map +1 -1
- package/dist/layouts/body/h_body.js +7 -7
- package/dist/layouts/body/h_body.js.map +1 -1
- package/dist/layouts/column/column.js +8 -8
- package/dist/layouts/column/column.js.map +1 -1
- package/dist/layouts/divider/divider.d.ts.map +1 -1
- package/dist/layouts/divider/divider.js +11 -12
- package/dist/layouts/divider/divider.js.map +1 -1
- package/dist/layouts/grid/grid.d.ts.map +1 -1
- package/dist/layouts/grid/grid.js +26 -17
- package/dist/layouts/grid/grid.js.map +1 -1
- package/dist/layouts/header/header.js +4 -4
- package/dist/layouts/header/header.js.map +1 -1
- package/dist/layouts/list/section_header.d.ts.map +1 -1
- package/dist/layouts/list/section_header.js +15 -5
- package/dist/layouts/list/section_header.js.map +1 -1
- package/dist/layouts/sidebar_end/sidebar_end.js +26 -26
- package/dist/layouts/sidebar_end/sidebar_end.js.map +1 -1
- package/dist/layouts/sidebar_start/sidebar_start.js +24 -24
- package/dist/layouts/sidebar_start/sidebar_start.js.map +1 -1
- package/dist/layouts/utility_bar/utility_bar.d.ts.map +1 -1
- package/dist/layouts/utility_bar/utility_bar.js +10 -15
- package/dist/layouts/utility_bar/utility_bar.js.map +1 -1
- package/dist/left_resize_handle.css +1 -1
- package/dist/loading.css +1 -1
- package/dist/menu.css +1 -1
- package/dist/modal.css +1 -1
- package/dist/multi_combo_box.css +1 -1
- package/dist/multiselect.css +1 -1
- package/dist/multiselect_values.css +1 -1
- package/dist/navigation/index.d.ts +7 -0
- package/dist/navigation/index.d.ts.map +1 -0
- package/dist/navigation/index.js +17 -0
- package/dist/navigation/index.js.map +1 -0
- package/dist/navigation/tabs/primitives/tabs_bar.d.ts +7 -0
- package/dist/navigation/tabs/primitives/tabs_bar.d.ts.map +1 -0
- package/dist/navigation/tabs/primitives/tabs_bar.js +21 -0
- package/dist/navigation/tabs/primitives/tabs_bar.js.map +1 -0
- package/dist/navigation/tabs/primitives/tabs_list.d.ts +10 -0
- package/dist/navigation/tabs/primitives/tabs_list.d.ts.map +1 -0
- package/dist/navigation/tabs/primitives/tabs_list.js +36 -0
- package/dist/navigation/tabs/primitives/tabs_list.js.map +1 -0
- package/dist/navigation/tabs/state/context.d.ts +21 -0
- package/dist/navigation/tabs/state/context.d.ts.map +1 -0
- package/dist/navigation/tabs/state/context.js +34 -0
- package/dist/navigation/tabs/state/context.js.map +1 -0
- package/dist/navigation/tabs/state/link/tab_link.d.ts +9 -0
- package/dist/navigation/tabs/state/link/tab_link.d.ts.map +1 -0
- package/dist/navigation/tabs/state/link/tab_link.js +36 -0
- package/dist/navigation/tabs/state/link/tab_link.js.map +1 -0
- package/dist/navigation/tabs/state/link/use_tab_link.d.ts +5 -0
- package/dist/navigation/tabs/state/link/use_tab_link.d.ts.map +1 -0
- package/dist/navigation/tabs/state/link/use_tab_link.js +13 -0
- package/dist/navigation/tabs/state/link/use_tab_link.js.map +1 -0
- package/dist/navigation/tabs/state/nav_bar.d.ts +5 -0
- package/dist/navigation/tabs/state/nav_bar.d.ts.map +1 -0
- package/dist/navigation/tabs/state/nav_bar.js +36 -0
- package/dist/navigation/tabs/state/nav_bar.js.map +1 -0
- package/dist/navigation/tabs/state/tab.d.ts +6 -0
- package/dist/navigation/tabs/state/tab.d.ts.map +1 -0
- package/dist/navigation/tabs/state/tab.js +6 -0
- package/dist/navigation/tabs/state/tab.js.map +1 -0
- package/dist/overlay/context_menu/context_menu.js +5 -5
- package/dist/overlay/context_menu/context_menu.js.map +1 -1
- package/dist/overlay/menu/menu.js +2 -2
- package/dist/overlay/menu/menu.js.map +1 -1
- package/dist/overlay/popper/legacy/popper.d.ts.map +1 -1
- package/dist/overlay/popper/legacy/popper.js +12 -11
- package/dist/overlay/popper/legacy/popper.js.map +1 -1
- package/dist/overlay/popper/preview_popper.js +16 -16
- package/dist/overlay/popper/preview_popper.js.map +1 -1
- package/dist/overlay/portal/portal.css +1 -0
- package/dist/overlay/portal/portal_platform.d.ts.map +1 -1
- package/dist/overlay/portal/portal_platform.js +8 -7
- package/dist/overlay/portal/portal_platform.js.map +1 -1
- package/dist/page.css +1 -1
- package/dist/phone_number_input.css +1 -1
- package/dist/picture_placeholder.css +1 -1
- package/dist/popper.css +1 -1
- package/dist/progress_bar.css +1 -1
- package/dist/radio.css +1 -1
- package/dist/rect.css +1 -1
- package/dist/right_resize_handle.css +1 -1
- package/dist/scaffold.css +1 -1
- package/dist/select.css +1 -1
- package/dist/select_group.css +1 -1
- package/dist/sidebar_end.css +1 -1
- package/dist/sidebar_start.css +1 -1
- package/dist/slider.css +1 -1
- package/dist/slim_button.css +1 -1
- package/dist/stack.css +1 -1
- package/dist/stacks/box/bottom_resize_handle.js +1 -1
- package/dist/stacks/box/bottom_resize_handle.js.map +1 -1
- package/dist/stacks/box/box.js +1 -1
- package/dist/stacks/box/box.js.map +1 -1
- package/dist/stacks/box/end_resize_handle.js +1 -1
- package/dist/stacks/box/end_resize_handle.js.map +1 -1
- package/dist/stacks/box/left_resize_handle.js +7 -7
- package/dist/stacks/box/left_resize_handle.js.map +1 -1
- package/dist/stacks/box/right_resize_handle.js +3 -3
- package/dist/stacks/box/right_resize_handle.js.map +1 -1
- package/dist/stacks/box/start_resize_handle.js +6 -6
- package/dist/stacks/box/start_resize_handle.js.map +1 -1
- package/dist/stacks/box/top_resize_handle.js +1 -1
- package/dist/stacks/box/top_resize_handle.js.map +1 -1
- package/dist/stacks/h_collapsible_box.d.ts.map +1 -1
- package/dist/stacks/h_collapsible_box.js +8 -4
- package/dist/stacks/h_collapsible_box.js.map +1 -1
- package/dist/stacks/h_stack.js +5 -5
- package/dist/stacks/h_stack.js.map +1 -1
- package/dist/stacks/spacer.js +13 -13
- package/dist/stacks/spacer.js.map +1 -1
- package/dist/stacks/story_components/circle.js +3 -3
- package/dist/stacks/story_components/circle.js.map +1 -1
- package/dist/stacks/story_components/picture_placeholder.d.ts.map +1 -1
- package/dist/stacks/story_components/picture_placeholder.js +5 -1
- package/dist/stacks/story_components/picture_placeholder.js.map +1 -1
- package/dist/stacks/story_components/rect.js +10 -10
- package/dist/stacks/story_components/rect.js.map +1 -1
- package/dist/stacks/v_collapsible_box.d.ts.map +1 -1
- package/dist/stacks/v_collapsible_box.js +12 -8
- package/dist/stacks/v_collapsible_box.js.map +1 -1
- package/dist/stacks/v_stack.js +4 -4
- package/dist/stacks/v_stack.js.map +1 -1
- package/dist/stacks/z_stack.js +7 -7
- package/dist/stacks/z_stack.js.map +1 -1
- package/dist/start_resize_handle.css +1 -1
- package/dist/status_input.css +1 -1
- package/dist/subheadline.css +1 -1
- package/dist/suggestion_item.css +1 -1
- package/dist/suggestion_list.css +1 -1
- package/dist/surfaces/alert/alert.js +6 -6
- package/dist/surfaces/alert/alert.js.map +1 -1
- package/dist/surfaces/confirm/confirm.d.ts.map +1 -1
- package/dist/surfaces/confirm/confirm.js +22 -15
- package/dist/surfaces/confirm/confirm.js.map +1 -1
- package/dist/surfaces/drawers/drawer_bottom/drawer_bottom.js +3 -3
- package/dist/surfaces/drawers/drawer_bottom/drawer_bottom.js.map +1 -1
- package/dist/surfaces/drawers/drawer_end/drawer_end.js +4 -4
- package/dist/surfaces/drawers/drawer_end/drawer_end.js.map +1 -1
- package/dist/surfaces/drawers/drawer_start/drawer_start.js +1 -1
- package/dist/surfaces/drawers/drawer_start/drawer_start.js.map +1 -1
- package/dist/surfaces/drawers/drawer_top/drawer_top.js +1 -1
- package/dist/surfaces/drawers/drawer_top/drawer_top.js.map +1 -1
- package/dist/surfaces/page/h_page.js +1 -1
- package/dist/surfaces/page/h_page.js.map +1 -1
- package/dist/surfaces/page/v_page.js +4 -4
- package/dist/surfaces/page/v_page.js.map +1 -1
- package/dist/surfaces/popover/popover.js +1 -1
- package/dist/surfaces/popover/popover.js.map +1 -1
- package/dist/switch.css +1 -1
- package/dist/tabs_bar.css +1 -0
- package/dist/tethered.css +1 -1
- package/dist/textarea.css +1 -1
- package/dist/theme_provider.css +1 -0
- package/dist/theme_provider.module-ChZQ5Xsk.js +5 -0
- package/dist/theme_provider.module-ChZQ5Xsk.js.map +1 -0
- package/dist/themes/stylesheets/reset.css +1 -0
- package/dist/themes/stylesheets/reset.js +134 -131
- package/dist/themes/stylesheets/reset.js.map +1 -1
- package/dist/themes/theme.d.ts +3 -2
- package/dist/themes/theme.d.ts.map +1 -1
- package/dist/themes/theme.js +24 -5
- package/dist/themes/theme.js.map +1 -1
- package/dist/themes/themes/ergo/ergo_theme.css +1 -0
- package/dist/themes/themes/ergo/ergo_theme.d.ts.map +1 -1
- package/dist/themes/themes/ergo/ergo_theme.js +608 -540
- package/dist/themes/themes/ergo/ergo_theme.js.map +1 -1
- package/dist/themes/themes/windows_98/windows_98.css +1 -0
- package/dist/themes/themes/windows_98/windows_98_theme.js +1071 -1167
- package/dist/themes/themes/windows_98/windows_98_theme.js.map +1 -1
- package/dist/title.css +1 -1
- package/dist/tokens/badge/badge.js +6 -6
- package/dist/tokens/badge/badge.js.map +1 -1
- package/dist/tokens/bubble/bubble.js +35 -27
- package/dist/tokens/bubble/bubble.js.map +1 -1
- package/dist/tokens/chip/chip.js +17 -9
- package/dist/tokens/chip/chip.js.map +1 -1
- package/dist/tooltip.css +1 -1
- package/dist/top_resize_handle.css +1 -1
- package/dist/typography/body_text/body_text.js +9 -9
- package/dist/typography/body_text/body_text.js.map +1 -1
- package/dist/typography/callout/callout.js +9 -9
- package/dist/typography/callout/callout.js.map +1 -1
- package/dist/typography/caption/caption.js +5 -5
- package/dist/typography/caption/caption.js.map +1 -1
- package/dist/typography/footnote/footnote.js +9 -9
- package/dist/typography/footnote/footnote.js.map +1 -1
- package/dist/typography/headline/headline.js +13 -13
- package/dist/typography/headline/headline.js.map +1 -1
- package/dist/typography/subheadline/subheadline.js +10 -10
- package/dist/typography/subheadline/subheadline.js.map +1 -1
- package/dist/typography/title/title.js +6 -6
- package/dist/typography/title/title.js.map +1 -1
- package/dist/unit_input.css +1 -1
- package/dist/utility_bar.css +1 -1
- package/dist/utils/css_utils.d.ts +9 -0
- package/dist/utils/css_utils.d.ts.map +1 -0
- package/dist/utils/css_utils.js +45 -0
- package/dist/utils/css_utils.js.map +1 -0
- package/dist/v_body.css +1 -1
- package/dist/window.css +1 -1
- package/package.json +10 -3
- package/src/actions/__docs__/actions.mdx +65 -2
- package/src/actions/__docs__/actions.stories.tsx +174 -2
- package/src/actions/button/__stories__/button_group.stories.tsx +63 -0
- package/src/actions/button/__stories__/select_group.stories.tsx +47 -4
- package/src/actions/button/base_button/base_button.module.css +15 -13
- package/src/actions/button/base_button/base_button.tsx +2 -1
- package/src/actions/button/button/button.module.css +52 -50
- package/src/actions/button/button_group/button_group.module.css +54 -52
- package/src/actions/button/button_group/button_group.tsx +9 -4
- package/src/actions/button/select_group/select_group.module.css +54 -52
- package/src/actions/button/select_group/select_group.tsx +2 -2
- package/src/actions/button/slim_button/slim_button.module.css +7 -5
- package/src/css/layers.css +1 -0
- package/src/feedback/loading/loading.module.css +17 -15
- package/src/feedback/progress/progress_bar.module.css +52 -50
- package/src/feedback/progress/progress_bar.tsx +6 -1
- package/src/form/field/common/field_control/field_control.module.css +17 -15
- package/src/form/field/common/field_control/field_control.tsx +1 -1
- package/src/form/field/common/field_description.tsx +1 -1
- package/src/form/field/common/field_error.tsx +1 -1
- package/src/form/field/common/field_header.tsx +1 -1
- package/src/form/field/common/status_input/status_input.module.css +10 -8
- package/src/form/field/common/status_input/status_input.tsx +8 -5
- package/src/form/field/h_field/h_field.module.css +7 -5
- package/src/form/field/h_field/h_field.tsx +1 -1
- package/src/form/field/v_field/v_field.tsx +1 -1
- package/src/form/field_set/field_set.module.css +16 -14
- package/src/form/field_set/field_set.tsx +7 -4
- package/src/inputs/checkbox/checkbox.module.css +45 -43
- package/src/inputs/checkbox/checkbox.tsx +1 -1
- package/src/inputs/checkbox/checkbox_row.tsx +9 -2
- package/src/inputs/color_input/color_input.module.css +58 -56
- package/src/inputs/color_input/color_input.tsx +8 -4
- package/src/inputs/color_input/color_picker.module.css +13 -11
- package/src/inputs/color_input/color_picker.tsx +2 -2
- package/src/inputs/combo_box/combo_box.tsx +1 -1
- package/src/inputs/date_picker/date_picker.module.css +19 -17
- package/src/inputs/date_picker/date_picker.tsx +2 -2
- package/src/inputs/date_picker/date_picker_body.tsx +1 -1
- package/src/inputs/date_picker/date_picker_date.module.css +71 -69
- package/src/inputs/date_picker/date_picker_date.tsx +2 -2
- package/src/inputs/date_picker/date_picker_day.module.css +5 -3
- package/src/inputs/date_picker/date_picker_day.tsx +7 -2
- package/src/inputs/date_picker/date_picker_header.module.css +4 -2
- package/src/inputs/date_picker/date_picker_header.tsx +1 -1
- package/src/inputs/date_picker/date_picker_input.module.css +55 -53
- package/src/inputs/date_picker/date_picker_input.tsx +3 -3
- package/src/inputs/date_picker/date_picker_time_selector.module.css +29 -28
- package/src/inputs/date_picker/date_picker_time_selector.tsx +7 -4
- package/src/inputs/date_picker/date_picker_year_input.module.css +46 -44
- package/src/inputs/date_picker/date_picker_year_input.tsx +1 -1
- package/src/inputs/date_picker/date_picker_year_selector.module.css +48 -46
- package/src/inputs/date_picker/date_picker_year_selector.tsx +5 -2
- package/src/inputs/index.ts +0 -4
- package/src/inputs/input/input.module.css +55 -79
- package/src/inputs/input/input.tsx +1 -1
- package/src/inputs/multi_combo_box/multi_combo_box.module.css +4 -2
- package/src/inputs/multiselect/multiselect.module.css +4 -2
- package/src/inputs/multiselect/multiselect.tsx +2 -1
- package/src/inputs/multiselect/multiselect_inline_values.tsx +3 -2
- package/src/inputs/multiselect/multiselect_values.module.css +28 -26
- package/src/inputs/multiselect/multiselect_values.tsx +3 -3
- package/src/inputs/phone_number_input/phone_number_input.module.css +54 -52
- package/src/inputs/phone_number_input/phone_number_input.tsx +15 -6
- package/src/inputs/radio/radio.module.css +48 -66
- package/src/inputs/radio/radio.tsx +2 -2
- package/src/inputs/select/select.module.css +57 -59
- package/src/inputs/select/select.tsx +4 -2
- package/src/inputs/slider/slider.module.css +151 -149
- package/src/inputs/slider/slider.tsx +1 -1
- package/src/inputs/suggestions/suggestion_item.module.css +35 -53
- package/src/inputs/suggestions/suggestion_item.tsx +1 -1
- package/src/inputs/suggestions/suggestion_list.module.css +29 -27
- package/src/inputs/suggestions/suggestion_list.tsx +6 -3
- package/src/inputs/switch/switch.module.css +111 -109
- package/src/inputs/switch/switch.tsx +3 -3
- package/src/inputs/textarea/textarea.module.css +46 -65
- package/src/inputs/textarea/textarea.tsx +1 -1
- package/src/inputs/unit_input/unit_input.module.css +20 -18
- package/src/inputs/unit_input/unit_input.tsx +3 -3
- package/src/layouts/body/h_body.module.css +7 -4
- package/src/layouts/body/h_body.tsx +1 -1
- package/src/layouts/body/v_body.module.css +6 -4
- package/src/layouts/column/column.module.css +30 -28
- package/src/layouts/column/column.tsx +2 -2
- package/src/layouts/divider/divider.module.css +103 -101
- package/src/layouts/divider/divider.tsx +1 -2
- package/src/layouts/footer/footer.module.css +24 -21
- package/src/layouts/grid/grid.module.css +20 -18
- package/src/layouts/grid/grid.tsx +6 -1
- package/src/layouts/header/header.module.css +7 -5
- package/src/layouts/header/header.tsx +1 -1
- package/src/layouts/list/section_header.module.css +16 -14
- package/src/layouts/list/section_header.tsx +7 -1
- package/src/layouts/scaffold/scaffold.module.css +6 -4
- package/src/layouts/sidebar_end/sidebar_end.module.css +28 -26
- package/src/layouts/sidebar_end/sidebar_end.tsx +2 -2
- package/src/layouts/sidebar_start/sidebar_start.module.css +28 -26
- package/src/layouts/sidebar_start/sidebar_start.tsx +2 -2
- package/src/layouts/utility_bar/utility_bar.module.css +5 -3
- package/src/layouts/utility_bar/utility_bar.tsx +1 -6
- package/src/navigation/index.ts +18 -0
- package/src/navigation/tabs/__stories__/state.stories.tsx +136 -0
- package/src/navigation/tabs/__stories__/tabs.stories.tsx +40 -0
- package/src/navigation/tabs/primitives/tabs_bar.module.css +13 -0
- package/src/navigation/tabs/primitives/tabs_bar.tsx +25 -0
- package/src/navigation/tabs/primitives/tabs_list.tsx +42 -0
- package/src/navigation/tabs/state/context.tsx +61 -0
- package/src/navigation/tabs/state/link/tab_link.tsx +45 -0
- package/src/navigation/tabs/state/link/use_tab_link.ts +17 -0
- package/src/navigation/tabs/state/nav_bar.tsx +37 -0
- package/src/navigation/tabs/state/tab.tsx +12 -0
- package/src/overlay/context_menu/context_menu.tsx +1 -1
- package/src/overlay/frame/frame.module.css +6 -4
- package/src/overlay/frame/frame_stories.module.css +14 -12
- package/src/overlay/menu/menu.module.css +30 -28
- package/src/overlay/menu/menu.tsx +2 -2
- package/src/overlay/popper/legacy/popper.module.css +10 -8
- package/src/overlay/popper/legacy/popper.tsx +2 -1
- package/src/overlay/popper/preview_popper.tsx +1 -1
- package/src/overlay/portal/portal.css +33 -31
- package/src/overlay/portal/portal_platform.tsx +6 -5
- package/src/overlay/tethered/tethered.module.css +9 -7
- package/src/stacks/box/bottom_resize_handle.module.css +11 -9
- package/src/stacks/box/bottom_resize_handle.tsx +1 -1
- package/src/stacks/box/box.tsx +1 -1
- package/src/stacks/box/end_resize_handle.module.css +16 -14
- package/src/stacks/box/end_resize_handle.tsx +1 -1
- package/src/stacks/box/left_resize_handle.module.css +11 -9
- package/src/stacks/box/left_resize_handle.tsx +1 -1
- package/src/stacks/box/right_resize_handle.module.css +11 -9
- package/src/stacks/box/right_resize_handle.tsx +1 -1
- package/src/stacks/box/start_resize_handle.module.css +16 -14
- package/src/stacks/box/start_resize_handle.tsx +1 -1
- package/src/stacks/box/top_resize_handle.module.css +11 -9
- package/src/stacks/box/top_resize_handle.tsx +1 -1
- package/src/stacks/collapsible_box.module.css +45 -29
- package/src/stacks/demo.module.css +5 -3
- package/src/stacks/h_collapsible_box.tsx +5 -1
- package/src/stacks/h_stack.tsx +1 -1
- package/src/stacks/spacer.tsx +1 -1
- package/src/stacks/stack.module.css +400 -393
- package/src/stacks/story_components/circle.module.css +8 -6
- package/src/stacks/story_components/circle.tsx +1 -1
- package/src/stacks/story_components/picture_placeholder.module.css +4 -2
- package/src/stacks/story_components/picture_placeholder.tsx +5 -1
- package/src/stacks/story_components/rect.module.css +9 -7
- package/src/stacks/story_components/rect.tsx +1 -1
- package/src/stacks/v_collapsible_box.tsx +5 -1
- package/src/stacks/v_stack.tsx +1 -1
- package/src/stacks/z_stack.tsx +1 -1
- package/src/surfaces/alert/alert.tsx +1 -1
- package/src/surfaces/card/card_stories.module.css +13 -11
- package/src/surfaces/confirm/confirm.module.css +37 -35
- package/src/surfaces/confirm/confirm.tsx +7 -4
- package/src/surfaces/drawers/drawer_bottom/drawer_bottom.module.css +4 -2
- package/src/surfaces/drawers/drawer_bottom/drawer_bottom.tsx +1 -1
- package/src/surfaces/drawers/drawer_end/drawer_end.module.css +4 -2
- package/src/surfaces/drawers/drawer_end/drawer_end.tsx +1 -1
- package/src/surfaces/drawers/drawer_start/drawer_start.module.css +4 -2
- package/src/surfaces/drawers/drawer_start/drawer_start.tsx +1 -1
- package/src/surfaces/drawers/drawer_top/drawer_top.module.css +4 -2
- package/src/surfaces/drawers/drawer_top/drawer_top.tsx +1 -1
- package/src/surfaces/modal/__stories__/modal.stories.tsx +3 -1
- package/src/surfaces/modal/modal.module.css +5 -3
- package/src/surfaces/page/h_page.tsx +1 -1
- package/src/surfaces/page/page.module.css +12 -10
- package/src/surfaces/page/v_page.tsx +1 -1
- package/src/surfaces/panel/panel.module.css +8 -7
- package/src/surfaces/popover/popover.tsx +1 -1
- package/src/surfaces/tooltip/tooltip.module.css +4 -2
- package/src/surfaces/window/window.module.css +6 -4
- package/src/themes/stylesheets/reset.css +134 -131
- package/src/themes/theme.tsx +29 -3
- package/src/themes/theme_provider.module.css +6 -0
- package/src/themes/themes/ergo/ergo_theme.css +607 -540
- package/src/themes/themes/ergo/ergo_theme.ts +1 -0
- package/src/themes/themes/windows_98/windows_98.css +1067 -1163
- package/src/tokens/badge/badge.module.css +13 -11
- package/src/tokens/badge/badge.tsx +2 -2
- package/src/tokens/bubble/bubble.module.css +12 -10
- package/src/tokens/bubble/bubble.tsx +1 -1
- package/src/tokens/chip/chip.module.css +14 -12
- package/src/tokens/chip/chip.tsx +1 -1
- package/src/typography/body_text/body_text.module.css +61 -59
- package/src/typography/body_text/body_text.tsx +1 -1
- package/src/typography/callout/callout.module.css +56 -54
- package/src/typography/callout/callout.tsx +1 -1
- package/src/typography/caption/caption.module.css +56 -54
- package/src/typography/caption/caption.tsx +1 -1
- package/src/typography/footnote/footnote.module.css +56 -54
- package/src/typography/footnote/footnote.tsx +1 -1
- package/src/typography/headline/headline.module.css +57 -55
- package/src/typography/headline/headline.tsx +1 -1
- package/src/typography/subheadline/subheadline.module.css +57 -55
- package/src/typography/subheadline/subheadline.tsx +1 -1
- package/src/typography/title/title.module.css +54 -52
- package/src/typography/title/title.tsx +1 -1
- package/src/utils/css_utils.ts +64 -0
- package/src/utils/dnd/draggable/draggable.module.css +8 -6
- package/dist/actions/types.js +0 -2
- package/dist/actions/types.js.map +0 -1
- package/dist/form/field/common/types.js +0 -2
- package/dist/form/field/common/types.js.map +0 -1
- package/dist/inputs/mask_input/mask_config.js +0 -2
- package/dist/inputs/mask_input/mask_config.js.map +0 -1
- package/dist/inputs/mask_input/mask_cursor.js +0 -2
- package/dist/inputs/mask_input/mask_cursor.js.map +0 -1
- package/dist/inputs/multiselect/multiselect_row.d.ts +0 -10
- package/dist/inputs/multiselect/multiselect_row.d.ts.map +0 -1
- package/dist/inputs/multiselect/multiselect_row.js +0 -35
- package/dist/inputs/multiselect/multiselect_row.js.map +0 -1
- package/dist/inputs/switch/switch_row.d.ts +0 -8
- package/dist/inputs/switch/switch_row.d.ts.map +0 -1
- package/dist/inputs/switch/switch_row.js +0 -16
- package/dist/inputs/switch/switch_row.js.map +0 -1
- package/dist/inputs/textarea/textarea_row.d.ts +0 -8
- package/dist/inputs/textarea/textarea_row.d.ts.map +0 -1
- package/dist/inputs/textarea/textarea_row.js +0 -12
- package/dist/inputs/textarea/textarea_row.js.map +0 -1
- package/dist/overlay/tethered/types.js +0 -2
- package/dist/overlay/tethered/types.js.map +0 -1
- package/dist/portal_platform.css +0 -1
- package/dist/stacks/box/handle_props.js +0 -2
- package/dist/stacks/box/handle_props.js.map +0 -1
- package/dist/utils/calendar/calendar_date.js +0 -2
- package/dist/utils/calendar/calendar_date.js.map +0 -1
- package/dist/utils/dnd/types.js +0 -2
- package/dist/utils/dnd/types.js.map +0 -1
- package/src/inputs/multiselect/multiselect_row.tsx +0 -57
- package/src/inputs/switch/TODO.md +0 -3
- package/src/inputs/switch/switch_row.tsx +0 -33
- package/src/inputs/textarea/textarea_row.tsx +0 -24
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { Meta, StoryObj } from '@storybook/react-vite';
|
|
2
|
+
import { useState } from 'react';
|
|
3
|
+
import { Tabs } from '../state/context.js';
|
|
4
|
+
import { TabLink } from '../state/link/tab_link.js';
|
|
5
|
+
import { Tab } from '../state/tab.js';
|
|
6
|
+
import { HStack } from '../../../stacks/h_stack.js';
|
|
7
|
+
import { VStack } from '../../../stacks/v_stack.js';
|
|
8
|
+
import { TabsNavbar } from '../state/nav_bar.js';
|
|
9
|
+
|
|
10
|
+
const meta: Meta = {
|
|
11
|
+
title: 'Navigation/Tabs/Stateful',
|
|
12
|
+
tags: ['autodocs'],
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export default meta;
|
|
16
|
+
|
|
17
|
+
type Story = StoryObj;
|
|
18
|
+
|
|
19
|
+
type ColorTab = 'coral' | 'teal' | 'violet' | 'opalescent';
|
|
20
|
+
|
|
21
|
+
const ColorPanel = ({
|
|
22
|
+
color,
|
|
23
|
+
label,
|
|
24
|
+
description,
|
|
25
|
+
}: {
|
|
26
|
+
color: string;
|
|
27
|
+
label: string;
|
|
28
|
+
description: string;
|
|
29
|
+
}) => (
|
|
30
|
+
<VStack
|
|
31
|
+
role="tabpanel"
|
|
32
|
+
hAlign="center"
|
|
33
|
+
vAlign="center"
|
|
34
|
+
padding="32px"
|
|
35
|
+
minHeight="200px"
|
|
36
|
+
style={{
|
|
37
|
+
borderRadius: 12,
|
|
38
|
+
background: color,
|
|
39
|
+
}}
|
|
40
|
+
>
|
|
41
|
+
<span style={{ fontSize: 24, fontWeight: 700, color: 'white' }}>{label}</span>
|
|
42
|
+
<span style={{ fontSize: 14, color: 'rgba(255,255,255,0.85)', marginTop: 8 }}>
|
|
43
|
+
{description}
|
|
44
|
+
</span>
|
|
45
|
+
</VStack>
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
interface TabsDemoProps {
|
|
49
|
+
variant?: 'inline';
|
|
50
|
+
minItemWidth?: number;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const TabsDemo = ({ variant, minItemWidth }: TabsDemoProps) => {
|
|
54
|
+
const [currentTab, setCurrentTab] = useState<ColorTab>('coral');
|
|
55
|
+
|
|
56
|
+
const isInline = variant === 'inline';
|
|
57
|
+
|
|
58
|
+
return (
|
|
59
|
+
<Tabs
|
|
60
|
+
value={currentTab}
|
|
61
|
+
onChange={v => setCurrentTab(v as ColorTab)}
|
|
62
|
+
minItemWidth={minItemWidth}
|
|
63
|
+
>
|
|
64
|
+
<VStack minWidth="400px" gap="8px">
|
|
65
|
+
<HStack
|
|
66
|
+
hAlign={isInline ? 'center' : 'start'}
|
|
67
|
+
gap={isInline ? 'small' : undefined}
|
|
68
|
+
>
|
|
69
|
+
<TabsNavbar variant={variant}>
|
|
70
|
+
<TabLink value="coral">Coral</TabLink>
|
|
71
|
+
<TabLink value="teal">Teal</TabLink>
|
|
72
|
+
<TabLink value="violet">Violet</TabLink>
|
|
73
|
+
<TabLink value="opalescent">Opalescent Periwinkle</TabLink>
|
|
74
|
+
</TabsNavbar>
|
|
75
|
+
</HStack>
|
|
76
|
+
|
|
77
|
+
<Tab value="coral">
|
|
78
|
+
<ColorPanel color="#FF6B6B" label="Coral" description="Warm and energetic" />
|
|
79
|
+
</Tab>
|
|
80
|
+
|
|
81
|
+
<Tab value="teal">
|
|
82
|
+
<ColorPanel color="#20B2AA" label="Teal" description="Calm and balanced" />
|
|
83
|
+
</Tab>
|
|
84
|
+
|
|
85
|
+
<Tab value="violet">
|
|
86
|
+
<ColorPanel
|
|
87
|
+
color="#9B59B6"
|
|
88
|
+
label="Violet"
|
|
89
|
+
description="Creative and mysterious"
|
|
90
|
+
/>
|
|
91
|
+
</Tab>
|
|
92
|
+
|
|
93
|
+
<Tab value="opalescent">
|
|
94
|
+
<ColorPanel
|
|
95
|
+
color="#C7C9E8"
|
|
96
|
+
label="Opalescent Periwinkle"
|
|
97
|
+
description="Soft, luminous and serene"
|
|
98
|
+
/>
|
|
99
|
+
</Tab>
|
|
100
|
+
</VStack>
|
|
101
|
+
</Tabs>
|
|
102
|
+
);
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
export const Baseline: Story = {
|
|
106
|
+
render: () => {
|
|
107
|
+
const [currentTab, setCurrentTab] = useState('1');
|
|
108
|
+
return (
|
|
109
|
+
<Tabs value={currentTab} onChange={v => setCurrentTab(v)}>
|
|
110
|
+
<TabsNavbar>
|
|
111
|
+
<TabLink value="1">One</TabLink>
|
|
112
|
+
<TabLink value="2">Two</TabLink>
|
|
113
|
+
<TabLink value="3">Three</TabLink>
|
|
114
|
+
<TabLink value="4">Four</TabLink>
|
|
115
|
+
</TabsNavbar>
|
|
116
|
+
|
|
117
|
+
<Tab value="1">Page One</Tab>
|
|
118
|
+
<Tab value="2">Page Two</Tab>
|
|
119
|
+
<Tab value="3">Page Three</Tab>
|
|
120
|
+
<Tab value="4">Page Four</Tab>
|
|
121
|
+
</Tabs>
|
|
122
|
+
);
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
export const MinItemWidth: Story = {
|
|
127
|
+
render: () => <TabsDemo minItemWidth={100} />,
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
export const InlineVariant: Story = {
|
|
131
|
+
render: () => <TabsDemo variant="inline" minItemWidth={100} />,
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
export const AutoWidth: Story = {
|
|
135
|
+
render: () => <TabsDemo />,
|
|
136
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { Meta, StoryObj } from '@storybook/react-vite';
|
|
2
|
+
import { TabsList } from '../primitives/tabs_list.js';
|
|
3
|
+
import { TabItem } from '../primitives/tabs_list.js';
|
|
4
|
+
import { TabsBar } from '../primitives/tabs_bar.js';
|
|
5
|
+
import { Spacer } from '../../../stacks/spacer.js';
|
|
6
|
+
import { Bubble } from '../../../tokens/bubble/bubble.js';
|
|
7
|
+
|
|
8
|
+
const meta: Meta = {
|
|
9
|
+
title: 'Navigation/Tabs/Component',
|
|
10
|
+
tags: ['autodocs'],
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export default meta;
|
|
14
|
+
|
|
15
|
+
type Story = StoryObj;
|
|
16
|
+
|
|
17
|
+
const TabDemo = () => {
|
|
18
|
+
return (
|
|
19
|
+
<TabsBar>
|
|
20
|
+
<TabsList>
|
|
21
|
+
<TabItem width={100}>Tab One</TabItem>
|
|
22
|
+
<TabItem width={100} selected>
|
|
23
|
+
Tab Two
|
|
24
|
+
</TabItem>
|
|
25
|
+
<TabItem width={100}>Tab Three</TabItem>
|
|
26
|
+
<TabItem width={100}>
|
|
27
|
+
Custom Label
|
|
28
|
+
<Spacer width="4px" />
|
|
29
|
+
<Bubble size="sm" backgroundColor="#e0383e" textColor="#fff">
|
|
30
|
+
10
|
|
31
|
+
</Bubble>
|
|
32
|
+
</TabItem>
|
|
33
|
+
</TabsList>
|
|
34
|
+
</TabsBar>
|
|
35
|
+
);
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export const Default: Story = {
|
|
39
|
+
render: () => <TabDemo />,
|
|
40
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type FC, type PropsWithChildren } from 'react';
|
|
2
|
+
import clsx from 'clsx';
|
|
3
|
+
import { HStack, type HStackProps } from '../../../stacks/h_stack.js';
|
|
4
|
+
import styles from './tabs_bar.module.css';
|
|
5
|
+
|
|
6
|
+
export interface TabsBarProps extends HStackProps {
|
|
7
|
+
variant?: 'default' | 'inline';
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const TabsBar: FC<PropsWithChildren<TabsBarProps>> = ({
|
|
11
|
+
children,
|
|
12
|
+
className,
|
|
13
|
+
variant = 'default',
|
|
14
|
+
...props
|
|
15
|
+
}) => {
|
|
16
|
+
return (
|
|
17
|
+
<HStack
|
|
18
|
+
data-variant={variant}
|
|
19
|
+
className={clsx('tcn-tabs-bar', styles['tabs-bar'], className)}
|
|
20
|
+
{...props}
|
|
21
|
+
>
|
|
22
|
+
{children}
|
|
23
|
+
</HStack>
|
|
24
|
+
);
|
|
25
|
+
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { forwardRef, type FC, type PropsWithChildren } from 'react';
|
|
2
|
+
import { BaseButton, type BaseButtonProps } from '../../../actions/index.js';
|
|
3
|
+
import { HStack, type HStackProps } from '../../../stacks/h_stack.js';
|
|
4
|
+
import clsx from 'clsx';
|
|
5
|
+
|
|
6
|
+
export type TabsListProps = HStackProps;
|
|
7
|
+
|
|
8
|
+
export const TabsList: FC<PropsWithChildren<TabsListProps>> = ({
|
|
9
|
+
children,
|
|
10
|
+
className,
|
|
11
|
+
role = 'tablist',
|
|
12
|
+
as = 'menu',
|
|
13
|
+
...props
|
|
14
|
+
}) => {
|
|
15
|
+
return (
|
|
16
|
+
<HStack as={as} role={role} className={clsx('tcn-tabs-list', className)} {...props}>
|
|
17
|
+
{children}
|
|
18
|
+
</HStack>
|
|
19
|
+
);
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export interface TabItemProps extends Omit<BaseButtonProps, 'hierarchy'> {
|
|
23
|
+
selected?: boolean;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export const TabItem = forwardRef<HTMLButtonElement, PropsWithChildren<TabItemProps>>(
|
|
27
|
+
({ children, className, role = 'tab', selected = false, ...props }, ref) => {
|
|
28
|
+
return (
|
|
29
|
+
<BaseButton
|
|
30
|
+
ref={ref}
|
|
31
|
+
role={role}
|
|
32
|
+
className={clsx(className, 'tcn-interactive', 'tcn-tab-item')}
|
|
33
|
+
hierarchy="tertiary"
|
|
34
|
+
data-is-selected={selected}
|
|
35
|
+
aria-selected={selected}
|
|
36
|
+
{...props}
|
|
37
|
+
>
|
|
38
|
+
{children}
|
|
39
|
+
</BaseButton>
|
|
40
|
+
);
|
|
41
|
+
}
|
|
42
|
+
);
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import {
|
|
2
|
+
createContext,
|
|
3
|
+
useState,
|
|
4
|
+
useContext,
|
|
5
|
+
useMemo,
|
|
6
|
+
type FC,
|
|
7
|
+
type PropsWithChildren,
|
|
8
|
+
} from 'react';
|
|
9
|
+
import type { Rectangle } from '../../../utils/index.js';
|
|
10
|
+
|
|
11
|
+
export interface TabsState {
|
|
12
|
+
value: string;
|
|
13
|
+
onChange?: (value: string) => void;
|
|
14
|
+
minItemWidth?: number;
|
|
15
|
+
maxItemWidth?: number;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export interface TabsContextValue extends TabsState {
|
|
19
|
+
activeTrigger: Rectangle | null;
|
|
20
|
+
setActiveTrigger: (trigger: Rectangle) => void;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const TabsContext = createContext<TabsContextValue | null>(null);
|
|
24
|
+
|
|
25
|
+
export function useTabs(): TabsContextValue {
|
|
26
|
+
const context = useContext(TabsContext);
|
|
27
|
+
if (!context) {
|
|
28
|
+
throw new Error('useTabs must be used within a Tabs provider');
|
|
29
|
+
}
|
|
30
|
+
return context;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export interface TabsProps {
|
|
34
|
+
value: string;
|
|
35
|
+
onChange?: (value: string) => void;
|
|
36
|
+
minItemWidth?: number;
|
|
37
|
+
maxItemWidth?: number;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export const Tabs: FC<PropsWithChildren<TabsProps>> = ({
|
|
41
|
+
value,
|
|
42
|
+
onChange,
|
|
43
|
+
children,
|
|
44
|
+
minItemWidth,
|
|
45
|
+
maxItemWidth,
|
|
46
|
+
}) => {
|
|
47
|
+
const [activeTrigger, setActiveTrigger] = useState<Rectangle | null>(null);
|
|
48
|
+
const contextValue = useMemo(
|
|
49
|
+
() => ({
|
|
50
|
+
value,
|
|
51
|
+
onChange,
|
|
52
|
+
activeTrigger,
|
|
53
|
+
setActiveTrigger,
|
|
54
|
+
minItemWidth,
|
|
55
|
+
maxItemWidth,
|
|
56
|
+
}),
|
|
57
|
+
[value, onChange, activeTrigger, minItemWidth, maxItemWidth]
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
return <TabsContext.Provider value={contextValue}>{children}</TabsContext.Provider>;
|
|
61
|
+
};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { forwardRef, useCallback, type PropsWithChildren } from 'react';
|
|
2
|
+
import { TabItem, type TabItemProps } from '../../primitives/tabs_list.js';
|
|
3
|
+
import { useForkRef } from '../../../../utils/index.js';
|
|
4
|
+
import { useTabs } from '../context.js';
|
|
5
|
+
import { useTabLink } from './use_tab_link.js';
|
|
6
|
+
|
|
7
|
+
export interface TabLinkOwnProps {
|
|
8
|
+
value: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface TabLinkProps
|
|
12
|
+
extends Omit<TabItemProps, 'selected' | 'value'>,
|
|
13
|
+
TabLinkOwnProps {}
|
|
14
|
+
|
|
15
|
+
export const TabLink = forwardRef<HTMLButtonElement, PropsWithChildren<TabLinkProps>>(
|
|
16
|
+
({ children, value, onClick, minWidth, maxWidth, ...props }, forwardedRef) => {
|
|
17
|
+
const { ref: internalRef, isMatch } = useTabLink(value);
|
|
18
|
+
const state = useTabs();
|
|
19
|
+
const ref = useForkRef(internalRef, forwardedRef);
|
|
20
|
+
|
|
21
|
+
const handleClick = useCallback(
|
|
22
|
+
(event: React.MouseEvent<HTMLButtonElement>) => {
|
|
23
|
+
state.onChange?.(value);
|
|
24
|
+
onClick?.(event);
|
|
25
|
+
},
|
|
26
|
+
[state, value, onClick]
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
const pickMinWidth = state.minItemWidth ?? minWidth;
|
|
30
|
+
const pickMaxWidth = state.maxItemWidth ?? maxWidth;
|
|
31
|
+
|
|
32
|
+
return (
|
|
33
|
+
<TabItem
|
|
34
|
+
ref={ref}
|
|
35
|
+
selected={isMatch}
|
|
36
|
+
onClick={handleClick}
|
|
37
|
+
minWidth={pickMinWidth}
|
|
38
|
+
maxWidth={pickMaxWidth}
|
|
39
|
+
{...props}
|
|
40
|
+
>
|
|
41
|
+
{children}
|
|
42
|
+
</TabItem>
|
|
43
|
+
);
|
|
44
|
+
}
|
|
45
|
+
);
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { useLayoutEffect } from 'react';
|
|
2
|
+
import { useTabs } from '../context.js';
|
|
3
|
+
import { useTrackActiveItemRectangle } from '../../../../utils/css_utils.js';
|
|
4
|
+
|
|
5
|
+
export function useTabLink(value: string) {
|
|
6
|
+
const state = useTabs();
|
|
7
|
+
const isMatch = state.value === value;
|
|
8
|
+
const { ref, rectangle } = useTrackActiveItemRectangle(isMatch);
|
|
9
|
+
|
|
10
|
+
useLayoutEffect(() => {
|
|
11
|
+
if (rectangle) {
|
|
12
|
+
state.setActiveTrigger(rectangle);
|
|
13
|
+
}
|
|
14
|
+
}, [rectangle, state.setActiveTrigger]);
|
|
15
|
+
|
|
16
|
+
return { ref, isMatch };
|
|
17
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { type FC, type PropsWithChildren } from 'react';
|
|
2
|
+
import clsx from 'clsx';
|
|
3
|
+
import { TabsBar, type TabsBarProps } from '../primitives/tabs_bar.js';
|
|
4
|
+
import { TabsList } from '../primitives/tabs_list.js';
|
|
5
|
+
import { useTabs } from './context.js';
|
|
6
|
+
import { convertRectangleToCssVariables } from '../../../utils/css_utils.js';
|
|
7
|
+
|
|
8
|
+
export type TabsNavbarProps = TabsBarProps;
|
|
9
|
+
|
|
10
|
+
export const TabsNavbar: FC<PropsWithChildren<TabsNavbarProps>> = ({
|
|
11
|
+
children,
|
|
12
|
+
className,
|
|
13
|
+
variant = 'default',
|
|
14
|
+
style,
|
|
15
|
+
...props
|
|
16
|
+
}) => {
|
|
17
|
+
const state = useTabs();
|
|
18
|
+
const cssVariables = convertRectangleToCssVariables(
|
|
19
|
+
'tabs',
|
|
20
|
+
'active',
|
|
21
|
+
state.activeTrigger
|
|
22
|
+
);
|
|
23
|
+
const finalStyle = {
|
|
24
|
+
...cssVariables,
|
|
25
|
+
...style,
|
|
26
|
+
};
|
|
27
|
+
return (
|
|
28
|
+
<TabsBar
|
|
29
|
+
style={finalStyle}
|
|
30
|
+
className={clsx('tcn-tabs-navbar', className)}
|
|
31
|
+
variant={variant}
|
|
32
|
+
{...props}
|
|
33
|
+
>
|
|
34
|
+
<TabsList>{children}</TabsList>
|
|
35
|
+
</TabsBar>
|
|
36
|
+
);
|
|
37
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { FC, PropsWithChildren } from 'react';
|
|
2
|
+
import { useTabs } from './context.js';
|
|
3
|
+
|
|
4
|
+
export interface TabProps {
|
|
5
|
+
value: string;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export const Tab: FC<PropsWithChildren<TabProps>> = ({ value, children }) => {
|
|
9
|
+
const state = useTabs();
|
|
10
|
+
if (state.value !== value) return null;
|
|
11
|
+
return children;
|
|
12
|
+
};
|
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
@layer tcn-system {
|
|
2
|
+
:where(.sb-frame-header) {
|
|
3
|
+
background: var(--accent-color);
|
|
4
|
+
color: white;
|
|
5
|
+
font-weight: bold;
|
|
6
|
+
border: 2px solid black;
|
|
7
|
+
padding: var(--padding-medium);
|
|
8
|
+
border-radius: var(--shape-radius-medium);
|
|
9
|
+
}
|
|
9
10
|
|
|
10
|
-
.sb-frame-container {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
:where(.sb-frame-container) {
|
|
12
|
+
background: #f7e9fe;
|
|
13
|
+
padding: var(--padding-medium);
|
|
14
|
+
border-radius: var(--shape-radius-large);
|
|
15
|
+
}
|
|
14
16
|
}
|
|
@@ -1,33 +1,35 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
@layer tcn-system {
|
|
2
|
+
:where(.menu) {
|
|
3
|
+
box-shadow: 0 0 30px rgba(0, 0, 0, 0.25);
|
|
4
|
+
border-radius: 8px;
|
|
5
|
+
background-color: rgb(255, 255, 255);
|
|
6
|
+
padding: 8px;
|
|
7
|
+
}
|
|
7
8
|
|
|
8
|
-
.menu-item {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
}
|
|
9
|
+
:where(.menu-item) {
|
|
10
|
+
border-radius: 4px;
|
|
11
|
+
padding: 4px;
|
|
12
|
+
padding-inline: 8px;
|
|
13
|
+
height: auto;
|
|
14
|
+
outline: none;
|
|
15
|
+
border: none;
|
|
16
|
+
background-color: transparent;
|
|
17
|
+
color: var(--text-color);
|
|
18
|
+
cursor: pointer;
|
|
19
|
+
}
|
|
19
20
|
|
|
20
|
-
.menu-item:active {
|
|
21
|
-
|
|
22
|
-
}
|
|
21
|
+
:where(.menu-item:active) {
|
|
22
|
+
opacity: 0.75;
|
|
23
|
+
}
|
|
23
24
|
|
|
24
|
-
.menu-item:hover,
|
|
25
|
-
.menu-item[data-is-open="true"] {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
}
|
|
25
|
+
:where(.menu-item:hover),
|
|
26
|
+
:where(.menu-item[data-is-open="true"]) {
|
|
27
|
+
background-color: var(--accent-color);
|
|
28
|
+
color: rgba(255, 255, 255, 0.9);
|
|
29
|
+
}
|
|
29
30
|
|
|
30
|
-
.menu-item:focus {
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
:where(.menu-item:focus) {
|
|
32
|
+
background-color: var(--accent-color);
|
|
33
|
+
color: rgba(255, 255, 255, 0.9);
|
|
34
|
+
}
|
|
33
35
|
}
|
|
@@ -105,7 +105,7 @@ export const Menu = React.forwardRef(function Menu(
|
|
|
105
105
|
restoreFocus={restoreFocus}
|
|
106
106
|
veil={veil}
|
|
107
107
|
>
|
|
108
|
-
<VStack ref={ref} className={clsx(styles.menu, className, 'menu')} {...props}>
|
|
108
|
+
<VStack ref={ref} className={clsx(styles.menu, className, 'tcn-menu')} {...props}>
|
|
109
109
|
{clonedChildren}
|
|
110
110
|
</VStack>
|
|
111
111
|
</Popper>
|
|
@@ -235,7 +235,7 @@ export const MenuItem = React.forwardRef(function MenuItem(
|
|
|
235
235
|
ref={forkedRef}
|
|
236
236
|
data-is-selected={Boolean(selected)}
|
|
237
237
|
data-has-children={Boolean(hasSubmenu)}
|
|
238
|
-
className={clsx(className, styles['menu-item'], 'menu-item')}
|
|
238
|
+
className={clsx(className, styles['menu-item'], 'tcn-menu-item')}
|
|
239
239
|
data-is-open={open}
|
|
240
240
|
{...props}
|
|
241
241
|
>
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
@layer tcn-system {
|
|
2
|
+
:where(.popover) {
|
|
3
|
+
display: inline-block;
|
|
4
|
+
position: absolute;
|
|
5
|
+
}
|
|
5
6
|
|
|
6
|
-
.popover-veil {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
:where(.popover-veil) {
|
|
8
|
+
position: fixed;
|
|
9
|
+
inset: 0;
|
|
10
|
+
background-color: rgba(0, 0, 0, 0);
|
|
11
|
+
}
|
|
10
12
|
}
|
|
@@ -2,6 +2,7 @@ import { ClickAwayListener, ScrollAwayListener } from '../../../utils/index.js';
|
|
|
2
2
|
import React, { useLayoutEffect, useRef, useState } from 'react';
|
|
3
3
|
import { Portal } from '../../portal/portal.js';
|
|
4
4
|
import styles from './popper.module.css';
|
|
5
|
+
import clsx from 'clsx';
|
|
5
6
|
|
|
6
7
|
export interface PopperProps {
|
|
7
8
|
anchorElement: HTMLElement | null;
|
|
@@ -179,7 +180,7 @@ export function Popper({
|
|
|
179
180
|
<ScrollAwayListener onScrollAway={close} isException={isScrollAwayException}>
|
|
180
181
|
<div
|
|
181
182
|
ref={popoverRef}
|
|
182
|
-
className={styles.popover}
|
|
183
|
+
className={clsx(styles.popover, 'tcn-popper')}
|
|
183
184
|
style={{
|
|
184
185
|
top: `${position.top}px`,
|
|
185
186
|
left: `${position.left}px`,
|
|
@@ -39,7 +39,7 @@ export const PreviewPopper = forwardRef<
|
|
|
39
39
|
onDismissal={close}
|
|
40
40
|
isException={isException}
|
|
41
41
|
dismissals={dismissals}
|
|
42
|
-
acceptedRefs={[popperRef, ...acceptedRefs]}
|
|
42
|
+
acceptedRefs={[popperRef, anchorElement, ...acceptedRefs]}
|
|
43
43
|
>
|
|
44
44
|
<ElementTethered
|
|
45
45
|
ref={merged}
|