shadcn_phlexcomponents 0.1.11 → 0.1.14

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 (63) hide show
  1. checksums.yaml +4 -4
  2. data/app/javascript/controllers/accordion_controller.ts +65 -62
  3. data/app/javascript/controllers/alert_dialog_controller.ts +12 -0
  4. data/app/javascript/controllers/avatar_controller.ts +7 -2
  5. data/app/javascript/controllers/checkbox_controller.ts +11 -4
  6. data/app/javascript/controllers/collapsible_controller.ts +12 -5
  7. data/app/javascript/controllers/combobox_controller.ts +270 -39
  8. data/app/javascript/controllers/command_controller.ts +223 -51
  9. data/app/javascript/controllers/date_picker_controller.ts +185 -125
  10. data/app/javascript/controllers/date_range_picker_controller.ts +89 -79
  11. data/app/javascript/controllers/dialog_controller.ts +59 -57
  12. data/app/javascript/controllers/dropdown_menu_controller.ts +212 -36
  13. data/app/javascript/controllers/dropdown_menu_sub_controller.ts +31 -29
  14. data/app/javascript/controllers/form_field_controller.ts +6 -1
  15. data/app/javascript/controllers/hover_card_controller.ts +36 -26
  16. data/app/javascript/controllers/loading_button_controller.ts +6 -1
  17. data/app/javascript/controllers/popover_controller.ts +42 -65
  18. data/app/javascript/controllers/progress_controller.ts +9 -3
  19. data/app/javascript/controllers/radio_group_controller.ts +16 -9
  20. data/app/javascript/controllers/select_controller.ts +206 -65
  21. data/app/javascript/controllers/slider_controller.ts +23 -16
  22. data/app/javascript/controllers/switch_controller.ts +11 -4
  23. data/app/javascript/controllers/tabs_controller.ts +26 -18
  24. data/app/javascript/controllers/theme_switcher_controller.ts +6 -1
  25. data/app/javascript/controllers/toast_container_controller.ts +6 -1
  26. data/app/javascript/controllers/toast_controller.ts +7 -1
  27. data/app/javascript/controllers/toggle_controller.ts +28 -0
  28. data/app/javascript/controllers/toggle_group_controller.ts +28 -0
  29. data/app/javascript/controllers/tooltip_controller.ts +43 -31
  30. data/app/javascript/shadcn_phlexcomponents.ts +29 -25
  31. data/app/javascript/utils/command.ts +544 -0
  32. data/app/javascript/utils/floating_ui.ts +196 -0
  33. data/app/javascript/utils/index.ts +417 -0
  34. data/app/stylesheets/date_picker.css +118 -0
  35. data/lib/shadcn_phlexcomponents/alias.rb +3 -0
  36. data/lib/shadcn_phlexcomponents/components/accordion.rb +2 -1
  37. data/lib/shadcn_phlexcomponents/components/alert_dialog.rb +18 -15
  38. data/lib/shadcn_phlexcomponents/components/base.rb +14 -0
  39. data/lib/shadcn_phlexcomponents/components/collapsible.rb +1 -2
  40. data/lib/shadcn_phlexcomponents/components/combobox.rb +87 -57
  41. data/lib/shadcn_phlexcomponents/components/command.rb +77 -47
  42. data/lib/shadcn_phlexcomponents/components/date_picker.rb +25 -81
  43. data/lib/shadcn_phlexcomponents/components/date_range_picker.rb +21 -4
  44. data/lib/shadcn_phlexcomponents/components/dialog.rb +14 -12
  45. data/lib/shadcn_phlexcomponents/components/dropdown_menu.rb +5 -4
  46. data/lib/shadcn_phlexcomponents/components/dropdown_menu_sub.rb +2 -1
  47. data/lib/shadcn_phlexcomponents/components/form/form_combobox.rb +64 -0
  48. data/lib/shadcn_phlexcomponents/components/form.rb +14 -0
  49. data/lib/shadcn_phlexcomponents/components/hover_card.rb +3 -2
  50. data/lib/shadcn_phlexcomponents/components/popover.rb +3 -3
  51. data/lib/shadcn_phlexcomponents/components/select.rb +10 -25
  52. data/lib/shadcn_phlexcomponents/components/sheet.rb +15 -11
  53. data/lib/shadcn_phlexcomponents/components/table.rb +1 -1
  54. data/lib/shadcn_phlexcomponents/components/tabs.rb +1 -1
  55. data/lib/shadcn_phlexcomponents/components/toast_container.rb +1 -1
  56. data/lib/shadcn_phlexcomponents/components/toggle.rb +54 -0
  57. data/lib/shadcn_phlexcomponents/components/tooltip.rb +3 -2
  58. data/lib/shadcn_phlexcomponents/engine.rb +1 -5
  59. data/lib/shadcn_phlexcomponents/version.rb +1 -1
  60. metadata +9 -4
  61. data/app/javascript/controllers/command_root_controller.ts +0 -355
  62. data/app/javascript/controllers/dropdown_menu_root_controller.ts +0 -234
  63. data/app/javascript/utils.ts +0 -437
@@ -1,18 +1,23 @@
1
1
  import { Controller } from '@hotwired/stimulus'
2
2
  import { useHover } from 'stimulus-use'
3
- import { initFloatingUi, ANIMATION_OUT_DELAY } from '../utils'
3
+ import { initFloatingUi } from '../utils/floating_ui'
4
+ import { showContent, hideContent } from '../utils'
4
5
 
5
- export default class extends Controller<HTMLElement> {
6
+ const TooltipController = class extends Controller<HTMLElement> {
7
+ // targets
6
8
  static targets = ['trigger', 'content', 'contentContainer', 'arrow']
7
- static values = {
8
- isOpen: Boolean,
9
- }
10
-
11
- declare isOpenValue: boolean
12
9
  declare readonly triggerTarget: HTMLElement
13
10
  declare readonly contentTarget: HTMLElement
14
11
  declare readonly contentContainerTarget: HTMLElement
15
12
  declare readonly arrowTarget: HTMLElement
13
+
14
+ // values
15
+ static values = {
16
+ isOpen: Boolean,
17
+ }
18
+ declare isOpenValue: boolean
19
+
20
+ // custom properties
16
21
  declare closeTimeout: number
17
22
  declare cleanup: () => void
18
23
  declare DOMKeydownListener: (event: KeyboardEvent) => void
@@ -47,22 +52,13 @@ export default class extends Controller<HTMLElement> {
47
52
  this.close()
48
53
  }
49
54
 
50
- onDOMKeydown(event: KeyboardEvent) {
51
- if (!this.isOpenValue) return
52
-
53
- const key = event.key
54
-
55
- if (['Escape', 'Enter', ' '].includes(key)) {
56
- event.preventDefault()
57
- event.stopImmediatePropagation()
58
- this.closeImmediately()
59
- }
60
- }
61
-
62
55
  isOpenValueChanged(isOpen: boolean) {
63
56
  if (isOpen) {
64
- this.contentContainerTarget.classList.remove('hidden')
65
- this.contentTarget.dataset.state = 'open'
57
+ showContent({
58
+ content: this.contentTarget,
59
+ contentContainer: this.contentContainerTarget,
60
+ })
61
+
66
62
  this.setupEventListeners()
67
63
 
68
64
  this.cleanup = initFloatingUi({
@@ -74,25 +70,41 @@ export default class extends Controller<HTMLElement> {
74
70
  sideOffset: 8,
75
71
  })
76
72
  } else {
77
- this.contentTarget.dataset.state = 'closed'
73
+ hideContent({
74
+ content: this.contentTarget,
75
+ contentContainer: this.contentContainerTarget,
76
+ })
78
77
  this.cleanupEventListeners()
78
+ }
79
+ }
80
+
81
+ disconnect() {
82
+ this.cleanupEventListeners()
83
+ }
84
+
85
+ protected onDOMKeydown(event: KeyboardEvent) {
86
+ if (!this.isOpenValue) return
87
+
88
+ const key = event.key
79
89
 
80
- setTimeout(() => {
81
- this.contentContainerTarget.classList.add('hidden')
82
- }, ANIMATION_OUT_DELAY)
90
+ if (['Escape', 'Enter', ' '].includes(key)) {
91
+ event.preventDefault()
92
+ event.stopImmediatePropagation()
93
+ this.closeImmediately()
83
94
  }
84
95
  }
85
96
 
86
- setupEventListeners() {
97
+ protected setupEventListeners() {
87
98
  document.addEventListener('keydown', this.DOMKeydownListener)
88
99
  }
89
100
 
90
- cleanupEventListeners() {
101
+ protected cleanupEventListeners() {
91
102
  if (this.cleanup) this.cleanup()
92
103
  document.removeEventListener('keydown', this.DOMKeydownListener)
93
104
  }
94
-
95
- disconnect() {
96
- this.cleanupEventListeners()
97
- }
98
105
  }
106
+
107
+ type Tooltip = InstanceType<typeof TooltipController>
108
+
109
+ export { TooltipController }
110
+ export type { Tooltip }
@@ -1,33 +1,36 @@
1
- import AccordionController from './controllers/accordion_controller'
2
- import AvatarController from './controllers/avatar_controller'
3
- import CheckboxController from './controllers/checkbox_controller'
4
- import CollapsibleController from './controllers/collapsible_controller'
5
- import ComboboxController from './controllers/combobox_controller'
6
- import CommandController from './controllers/command_controller'
7
- import DatePickerController from './controllers/date_picker_controller'
8
- import DateRangePickerController from './controllers/date_range_picker_controller'
9
- import DialogController from './controllers/dialog_controller'
10
- import DropdownMenuController from './controllers/dropdown_menu_controller'
11
- import DropdownMenuSubController from './controllers/dropdown_menu_sub_controller'
12
- import FormFieldController from './controllers/form_field_controller'
13
- import HoverCardController from './controllers/hover_card_controller'
14
- import LoadingButtonController from './controllers/loading_button_controller'
15
- import PopoverController from './controllers/popover_controller'
16
- import ProgressController from './controllers/progress_controller'
17
- import RadioGroupController from './controllers/radio_group_controller'
18
- import SelectController from './controllers/select_controller'
1
+ import { AccordionController } from './controllers/accordion_controller'
2
+ import { AlertDialogController } from './controllers/alert_dialog_controller'
3
+ import { AvatarController } from './controllers/avatar_controller'
4
+ import { CheckboxController } from './controllers/checkbox_controller'
5
+ import { CollapsibleController } from './controllers/collapsible_controller'
6
+ import { ComboboxController } from './controllers/combobox_controller'
7
+ import { CommandController } from './controllers/command_controller'
8
+ import { DatePickerController } from './controllers/date_picker_controller'
9
+ import { DateRangePickerController } from './controllers/date_range_picker_controller'
10
+ import { DialogController } from './controllers/dialog_controller'
11
+ import { DropdownMenuController } from './controllers/dropdown_menu_controller'
12
+ import { DropdownMenuSubController } from './controllers/dropdown_menu_sub_controller'
13
+ import { FormFieldController } from './controllers/form_field_controller'
14
+ import { HoverCardController } from './controllers/hover_card_controller'
15
+ import { LoadingButtonController } from './controllers/loading_button_controller'
16
+ import { PopoverController } from './controllers/popover_controller'
17
+ import { ProgressController } from './controllers/progress_controller'
18
+ import { RadioGroupController } from './controllers/radio_group_controller'
19
+ import { SelectController } from './controllers/select_controller'
19
20
  import SidebarController from './controllers/sidebar_controller'
20
21
  import SidebarTriggerController from './controllers/sidebar_trigger_controller'
21
- import SliderController from './controllers/slider_controller'
22
- import SwitchController from './controllers/switch_controller'
23
- import TabsController from './controllers/tabs_controller'
24
- import ThemeSwitcherController from './controllers/theme_switcher_controller'
25
- import ToastContainerController from './controllers/toast_container_controller'
26
- import ToastController from './controllers/toast_controller'
27
- import TooltipController from './controllers/tooltip_controller'
22
+ import { SliderController } from './controllers/slider_controller'
23
+ import { SwitchController } from './controllers/switch_controller'
24
+ import { TabsController } from './controllers/tabs_controller'
25
+ import { ThemeSwitcherController } from './controllers/theme_switcher_controller'
26
+ import { ToastContainerController } from './controllers/toast_container_controller'
27
+ import { ToastController } from './controllers/toast_controller'
28
+ import { ToggleController } from './controllers/toggle_controller'
29
+ import { TooltipController } from './controllers/tooltip_controller'
28
30
 
29
31
  export default {
30
32
  accordion: AccordionController,
33
+ 'alert-dialog': AlertDialogController,
31
34
  avatar: AvatarController,
32
35
  checkbox: CheckboxController,
33
36
  collapsible: CollapsibleController,
@@ -53,5 +56,6 @@ export default {
53
56
  'theme-switcher': ThemeSwitcherController,
54
57
  'toast-container': ToastContainerController,
55
58
  toast: ToastController,
59
+ toggle: ToggleController,
56
60
  tooltip: TooltipController,
57
61
  }