shadcn_phlexcomponents 0.1.18 → 0.1.19

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 (128) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +321 -23
  3. data/app/javascript/controllers/accordion_controller.js +101 -90
  4. data/app/javascript/controllers/alert_dialog_controller.js +5 -4
  5. data/app/javascript/controllers/avatar_controller.js +12 -11
  6. data/app/javascript/controllers/checkbox_controller.js +26 -26
  7. data/app/javascript/controllers/collapsible_controller.js +35 -36
  8. data/app/javascript/controllers/combobox_controller.js +262 -231
  9. data/app/javascript/controllers/command_controller.js +205 -184
  10. data/app/javascript/controllers/date_picker_controller.js +252 -253
  11. data/app/javascript/controllers/date_range_picker_controller.js +189 -200
  12. data/app/javascript/controllers/dialog_controller.js +79 -78
  13. data/app/javascript/controllers/dropdown_menu_controller.js +229 -208
  14. data/app/javascript/controllers/dropdown_menu_sub_controller.js +111 -97
  15. data/app/javascript/controllers/form_field_controller.js +17 -16
  16. data/app/javascript/controllers/hover_card_controller.js +69 -71
  17. data/app/javascript/controllers/loading_button_controller.js +11 -10
  18. data/app/javascript/controllers/popover_controller.js +85 -78
  19. data/app/javascript/controllers/progress_controller.js +12 -11
  20. data/app/javascript/controllers/radio_group_controller.js +75 -74
  21. data/app/javascript/controllers/select_controller.js +247 -232
  22. data/app/javascript/controllers/sidebar_controller.js +26 -27
  23. data/app/javascript/controllers/sidebar_trigger_controller.js +12 -9
  24. data/app/javascript/controllers/slider_controller.js +74 -74
  25. data/app/javascript/controllers/switch_controller.js +23 -23
  26. data/app/javascript/controllers/tabs_controller.js +61 -61
  27. data/app/javascript/controllers/theme_switcher_controller.js +28 -27
  28. data/app/javascript/controllers/toast_container_controller.js +45 -31
  29. data/app/javascript/controllers/toast_controller.js +19 -18
  30. data/app/javascript/controllers/toggle_controller.js +17 -17
  31. data/app/javascript/controllers/toggle_group_controller.js +17 -17
  32. data/app/javascript/controllers/tooltip_controller.js +75 -77
  33. data/app/javascript/shadcn_phlexcomponents.js +27 -60
  34. data/app/javascript/utils/command.js +390 -334
  35. data/app/javascript/utils/floating_ui.js +139 -107
  36. data/app/javascript/utils/index.js +253 -190
  37. data/app/typescript/controllers/accordion_controller.ts +2 -0
  38. data/app/typescript/controllers/alert_dialog_controller.ts +2 -0
  39. data/app/typescript/controllers/avatar_controller.ts +2 -0
  40. data/app/typescript/controllers/checkbox_controller.ts +2 -0
  41. data/app/typescript/controllers/collapsible_controller.ts +2 -0
  42. data/app/typescript/controllers/combobox_controller.ts +2 -0
  43. data/app/typescript/controllers/command_controller.ts +2 -0
  44. data/app/typescript/controllers/date_picker_controller.ts +2 -0
  45. data/app/typescript/controllers/date_range_picker_controller.ts +2 -0
  46. data/app/typescript/controllers/dialog_controller.ts +2 -0
  47. data/app/typescript/controllers/dropdown_menu_controller.ts +2 -0
  48. data/app/typescript/controllers/dropdown_menu_sub_controller.ts +2 -0
  49. data/app/typescript/controllers/form_field_controller.ts +2 -0
  50. data/app/typescript/controllers/hover_card_controller.ts +2 -0
  51. data/app/typescript/controllers/loading_button_controller.ts +2 -0
  52. data/app/typescript/controllers/popover_controller.ts +2 -0
  53. data/app/typescript/controllers/progress_controller.ts +2 -0
  54. data/app/typescript/controllers/radio_group_controller.ts +2 -0
  55. data/app/typescript/controllers/select_controller.ts +2 -0
  56. data/app/typescript/controllers/slider_controller.ts +2 -0
  57. data/app/typescript/controllers/switch_controller.ts +2 -0
  58. data/app/typescript/controllers/tabs_controller.ts +2 -0
  59. data/app/typescript/controllers/theme_switcher_controller.ts +2 -0
  60. data/app/typescript/controllers/toast_container_controller.ts +2 -0
  61. data/app/typescript/controllers/toast_controller.ts +2 -0
  62. data/app/typescript/controllers/toggle_controller.ts +2 -0
  63. data/app/typescript/controllers/toggle_group_controller.ts +2 -0
  64. data/app/typescript/controllers/tooltip_controller.ts +2 -0
  65. data/app/typescript/shadcn_phlexcomponents.ts +27 -61
  66. data/app/typescript/utils/index.ts +7 -0
  67. data/lib/install/upgrade_shadcn_phlexcomponents.rb +28 -0
  68. data/lib/shadcn_phlexcomponents/components/accordion.rb +55 -12
  69. data/lib/shadcn_phlexcomponents/components/alert.rb +35 -16
  70. data/lib/shadcn_phlexcomponents/components/alert_dialog.rb +52 -12
  71. data/lib/shadcn_phlexcomponents/components/aspect_ratio.rb +33 -2
  72. data/lib/shadcn_phlexcomponents/components/avatar.rb +24 -7
  73. data/lib/shadcn_phlexcomponents/components/badge.rb +23 -18
  74. data/lib/shadcn_phlexcomponents/components/breadcrumb.rb +46 -6
  75. data/lib/shadcn_phlexcomponents/components/button.rb +32 -27
  76. data/lib/shadcn_phlexcomponents/components/card.rb +59 -10
  77. data/lib/shadcn_phlexcomponents/components/checkbox.rb +51 -30
  78. data/lib/shadcn_phlexcomponents/components/checkbox_group.rb +24 -4
  79. data/lib/shadcn_phlexcomponents/components/combobox.rb +212 -69
  80. data/lib/shadcn_phlexcomponents/components/command.rb +156 -52
  81. data/lib/shadcn_phlexcomponents/components/date_picker.rb +134 -48
  82. data/lib/shadcn_phlexcomponents/components/date_range_picker.rb +20 -42
  83. data/lib/shadcn_phlexcomponents/components/dialog.rb +80 -26
  84. data/lib/shadcn_phlexcomponents/components/dropdown_menu.rb +74 -25
  85. data/lib/shadcn_phlexcomponents/components/dropdown_menu_sub.rb +52 -24
  86. data/lib/shadcn_phlexcomponents/components/form/form_checkbox.rb +1 -1
  87. data/lib/shadcn_phlexcomponents/components/form/form_checkbox_group.rb +1 -1
  88. data/lib/shadcn_phlexcomponents/components/form/form_combobox.rb +1 -1
  89. data/lib/shadcn_phlexcomponents/components/form/form_date_picker.rb +1 -1
  90. data/lib/shadcn_phlexcomponents/components/form/form_date_range_picker.rb +1 -1
  91. data/lib/shadcn_phlexcomponents/components/form/form_error.rb +8 -1
  92. data/lib/shadcn_phlexcomponents/components/form/form_helpers.rb +3 -2
  93. data/lib/shadcn_phlexcomponents/components/form/form_hint.rb +8 -1
  94. data/lib/shadcn_phlexcomponents/components/form/form_input.rb +1 -1
  95. data/lib/shadcn_phlexcomponents/components/form/form_radio_group.rb +1 -1
  96. data/lib/shadcn_phlexcomponents/components/form/form_select.rb +1 -1
  97. data/lib/shadcn_phlexcomponents/components/form/form_slider.rb +1 -1
  98. data/lib/shadcn_phlexcomponents/components/form/form_switch.rb +1 -1
  99. data/lib/shadcn_phlexcomponents/components/form/form_textarea.rb +1 -1
  100. data/lib/shadcn_phlexcomponents/components/form.rb +22 -6
  101. data/lib/shadcn_phlexcomponents/components/hover_card.rb +48 -18
  102. data/lib/shadcn_phlexcomponents/components/input.rb +13 -8
  103. data/lib/shadcn_phlexcomponents/components/label.rb +9 -4
  104. data/lib/shadcn_phlexcomponents/components/link.rb +8 -1
  105. data/lib/shadcn_phlexcomponents/components/pagination.rb +34 -6
  106. data/lib/shadcn_phlexcomponents/components/popover.rb +43 -13
  107. data/lib/shadcn_phlexcomponents/components/progress.rb +37 -6
  108. data/lib/shadcn_phlexcomponents/components/radio_group.rb +41 -15
  109. data/lib/shadcn_phlexcomponents/components/select.rb +99 -42
  110. data/lib/shadcn_phlexcomponents/components/separator.rb +9 -4
  111. data/lib/shadcn_phlexcomponents/components/sheet.rb +87 -21
  112. data/lib/shadcn_phlexcomponents/components/skeleton.rb +8 -1
  113. data/lib/shadcn_phlexcomponents/components/switch.rb +45 -17
  114. data/lib/shadcn_phlexcomponents/components/table.rb +84 -17
  115. data/lib/shadcn_phlexcomponents/components/tabs.rb +36 -12
  116. data/lib/shadcn_phlexcomponents/components/textarea.rb +12 -7
  117. data/lib/shadcn_phlexcomponents/components/toast.rb +46 -20
  118. data/lib/shadcn_phlexcomponents/components/toast_container.rb +19 -14
  119. data/lib/shadcn_phlexcomponents/components/toggle.rb +28 -23
  120. data/lib/shadcn_phlexcomponents/components/tooltip.rb +49 -14
  121. data/lib/shadcn_phlexcomponents/configuration.rb +46 -0
  122. data/lib/shadcn_phlexcomponents/initializers/shadcn_phlexcomponents.rb +28 -0
  123. data/lib/shadcn_phlexcomponents/version.rb +1 -1
  124. data/lib/shadcn_phlexcomponents.rb +12 -1
  125. data/lib/tasks/upgrade.rake +10 -0
  126. metadata +15 -14
  127. data/app/typescript/controllers/sidebar_controller.ts +0 -39
  128. data/app/typescript/controllers/sidebar_trigger_controller.ts +0 -21
@@ -1,41 +1,40 @@
1
- import { Controller } from '@hotwired/stimulus';
2
- import { hideContent, showContent } from '../utils';
1
+ import { Controller } from "@hotwired/stimulus";
2
+ import { hideContent, showContent } from "../utils";
3
3
  const CollapsibleController = class extends Controller {
4
- // targets
5
- static targets = ['trigger', 'content'];
6
- // values
7
- static values = {
8
- isOpen: Boolean,
9
- };
10
- toggle() {
11
- if (this.isOpenValue) {
12
- this.close();
13
- }
14
- else {
15
- this.open();
16
- }
4
+ static name = "collapsible";
5
+ // targets
6
+ static targets = ["trigger", "content"];
7
+ // values
8
+ static values = {
9
+ isOpen: Boolean,
10
+ };
11
+ toggle() {
12
+ if (this.isOpenValue) {
13
+ this.close();
14
+ } else {
15
+ this.open();
17
16
  }
18
- open() {
19
- this.isOpenValue = true;
20
- }
21
- close() {
22
- this.isOpenValue = false;
23
- }
24
- isOpenValueChanged(isOpen) {
25
- if (isOpen) {
26
- showContent({
27
- trigger: this.triggerTarget,
28
- content: this.contentTarget,
29
- contentContainer: this.contentTarget,
30
- });
31
- }
32
- else {
33
- hideContent({
34
- trigger: this.triggerTarget,
35
- content: this.contentTarget,
36
- contentContainer: this.contentTarget,
37
- });
38
- }
17
+ }
18
+ open() {
19
+ this.isOpenValue = true;
20
+ }
21
+ close() {
22
+ this.isOpenValue = false;
23
+ }
24
+ isOpenValueChanged(isOpen) {
25
+ if (isOpen) {
26
+ showContent({
27
+ trigger: this.triggerTarget,
28
+ content: this.contentTarget,
29
+ contentContainer: this.contentTarget,
30
+ });
31
+ } else {
32
+ hideContent({
33
+ trigger: this.triggerTarget,
34
+ content: this.contentTarget,
35
+ contentContainer: this.contentTarget,
36
+ });
39
37
  }
38
+ }
40
39
  };
41
40
  export { CollapsibleController };
@@ -1,247 +1,278 @@
1
- import { ON_OPEN_FOCUS_DELAY, lockScroll, showContent, unlockScroll, hideContent, focusTrigger, setGroupLabelsId, onClickOutside, } from '../utils';
2
- import { initFloatingUi } from '../utils/floating_ui';
3
- import { Controller } from '@hotwired/stimulus';
4
- import Fuse from 'fuse.js';
5
- import { scrollToItem, highlightItem, highlightItemByIndex, filteredItemsChanged, setItemsGroupId, search, clearRemoteResults, resetState, } from '../utils/command';
6
- import { useClickOutside, useDebounce } from 'stimulus-use';
1
+ import {
2
+ ON_OPEN_FOCUS_DELAY,
3
+ lockScroll,
4
+ showContent,
5
+ unlockScroll,
6
+ hideContent,
7
+ focusTrigger,
8
+ setGroupLabelsId,
9
+ onClickOutside,
10
+ } from "../utils";
11
+ import { initFloatingUi } from "../utils/floating_ui";
12
+ import { Controller } from "@hotwired/stimulus";
13
+ import Fuse from "fuse.js";
14
+ import {
15
+ scrollToItem,
16
+ highlightItem,
17
+ highlightItemByIndex,
18
+ filteredItemsChanged,
19
+ setItemsGroupId,
20
+ search,
21
+ clearRemoteResults,
22
+ resetState,
23
+ } from "../utils/command";
24
+ import { useClickOutside, useDebounce } from "stimulus-use";
7
25
  const ComboboxController = class extends Controller {
8
- // targets
9
- static targets = [
10
- 'trigger',
11
- 'triggerText',
12
- 'contentContainer',
13
- 'content',
14
- 'item',
15
- 'group',
16
- 'hiddenInput',
17
- 'searchInput',
18
- 'list',
19
- 'listContainer',
20
- 'empty',
21
- 'loading',
22
- 'error',
23
- ];
24
- // values
25
- static values = {
26
- isOpen: Boolean,
27
- selected: String,
28
- filteredItemIndexes: Array,
29
- };
30
- static debounces = ['search'];
31
- connect() {
32
- this.orderedItems = [...this.itemTargets];
33
- this.itemsInnerText = this.itemTargets.map((i) => i.innerText.trim());
34
- this.fuse = new Fuse(this.itemsInnerText);
35
- this.filteredItemIndexesValue = Array.from({ length: this.itemTargets.length }, (_, i) => i);
36
- this.isLoading = false;
37
- this.filteredItems = this.itemTargets;
38
- this.isDirty = false;
39
- this.searchPath = this.element.dataset.searchPath;
40
- setGroupLabelsId(this);
41
- setItemsGroupId(this);
42
- useDebounce(this);
43
- useClickOutside(this, { element: this.contentTarget, dispatchEvent: false });
44
- this.DOMKeydownListener = this.onDOMKeydown.bind(this);
26
+ static name = "combobox";
27
+ // targets
28
+ static targets = [
29
+ "trigger",
30
+ "triggerText",
31
+ "contentContainer",
32
+ "content",
33
+ "item",
34
+ "group",
35
+ "hiddenInput",
36
+ "searchInput",
37
+ "list",
38
+ "listContainer",
39
+ "empty",
40
+ "loading",
41
+ "error",
42
+ ];
43
+ // values
44
+ static values = {
45
+ isOpen: Boolean,
46
+ selected: String,
47
+ filteredItemIndexes: Array,
48
+ };
49
+ static debounces = ["search"];
50
+ connect() {
51
+ this.orderedItems = [...this.itemTargets];
52
+ this.itemsInnerText = this.itemTargets.map((i) => i.innerText.trim());
53
+ this.fuse = new Fuse(this.itemsInnerText);
54
+ this.filteredItemIndexesValue = Array.from(
55
+ { length: this.itemTargets.length },
56
+ (_, i) => i,
57
+ );
58
+ this.isLoading = false;
59
+ this.filteredItems = this.itemTargets;
60
+ this.isDirty = false;
61
+ this.searchPath = this.element.dataset.searchPath;
62
+ setGroupLabelsId(this);
63
+ setItemsGroupId(this);
64
+ useDebounce(this);
65
+ useClickOutside(this, {
66
+ element: this.contentTarget,
67
+ dispatchEvent: false,
68
+ });
69
+ this.DOMKeydownListener = this.onDOMKeydown.bind(this);
70
+ }
71
+ toggle() {
72
+ if (this.isOpenValue) {
73
+ this.close();
74
+ } else {
75
+ this.open();
45
76
  }
46
- toggle() {
47
- if (this.isOpenValue) {
48
- this.close();
77
+ }
78
+ open() {
79
+ this.isOpenValue = true;
80
+ setTimeout(() => {
81
+ this.searchInputTarget.focus();
82
+ let index = 0;
83
+ if (this.selectedValue) {
84
+ const item = this.filteredItems.find(
85
+ (i) => i.dataset.value === this.selectedValue,
86
+ );
87
+ if (item && !item.dataset.disabled) {
88
+ index = this.filteredItems.indexOf(item);
49
89
  }
50
- else {
51
- this.open();
52
- }
53
- }
54
- open() {
55
- this.isOpenValue = true;
56
- setTimeout(() => {
57
- this.searchInputTarget.focus();
58
- let index = 0;
59
- if (this.selectedValue) {
60
- const item = this.filteredItems.find((i) => i.dataset.value === this.selectedValue);
61
- if (item && !item.dataset.disabled) {
62
- index = this.filteredItems.indexOf(item);
63
- }
64
- }
65
- this.highlightItemByIndex(index);
66
- }, ON_OPEN_FOCUS_DELAY);
67
- }
68
- close() {
69
- this.isOpenValue = false;
70
- resetState(this);
71
- }
72
- scrollToItem(index) {
73
- scrollToItem(this, index);
90
+ }
91
+ this.highlightItemByIndex(index);
92
+ }, ON_OPEN_FOCUS_DELAY);
93
+ }
94
+ close() {
95
+ this.isOpenValue = false;
96
+ resetState(this);
97
+ }
98
+ scrollToItem(index) {
99
+ scrollToItem(this, index);
100
+ }
101
+ highlightItem(event = null, index = null) {
102
+ highlightItem(this, event, index);
103
+ }
104
+ highlightItemByIndex(index) {
105
+ highlightItemByIndex(this, index);
106
+ }
107
+ select(event) {
108
+ let item = undefined;
109
+ if (event instanceof KeyboardEvent) {
110
+ item = this.filteredItems.find((i) => i.dataset.highlighted === "true");
111
+ } else {
112
+ // mouse event
113
+ item = event.currentTarget;
74
114
  }
75
- highlightItem(event = null, index = null) {
76
- highlightItem(this, event, index);
115
+ if (item) {
116
+ this.selectedValue = item.dataset.value;
117
+ // setTimeout is needed for selectedValueChanged to finish executing
118
+ setTimeout(() => {
119
+ this.close();
120
+ }, 100);
77
121
  }
78
- highlightItemByIndex(index) {
79
- highlightItemByIndex(this, index);
80
- }
81
- select(event) {
82
- let item = undefined;
83
- if (event instanceof KeyboardEvent) {
84
- item = this.filteredItems.find((i) => i.dataset.highlighted === 'true');
85
- }
86
- else {
87
- // mouse event
88
- item = event.currentTarget;
89
- }
90
- if (item) {
91
- this.selectedValue = item.dataset.value;
92
- // setTimeout is needed for selectedValueChanged to finish executing
93
- setTimeout(() => {
94
- this.close();
95
- }, 100);
96
- }
122
+ }
123
+ inputKeydown(event) {
124
+ if (event.key === " " && this.searchInputTarget.value.length === 0) {
125
+ event.preventDefault();
97
126
  }
98
- inputKeydown(event) {
99
- if (event.key === ' ' && this.searchInputTarget.value.length === 0) {
100
- event.preventDefault();
127
+ this.hideError();
128
+ this.showList();
129
+ }
130
+ search(event) {
131
+ this.isDirty = true;
132
+ clearRemoteResults(this);
133
+ search(this, event);
134
+ }
135
+ clickOutside(event) {
136
+ onClickOutside(this, event);
137
+ }
138
+ selectedValueChanged(value) {
139
+ const item = this.itemTargets.find((i) => i.dataset.value === value);
140
+ if (item) {
141
+ this.triggerTextTarget.textContent = item.textContent;
142
+ this.itemTargets.forEach((i) => {
143
+ if (i.dataset.value === value) {
144
+ i.setAttribute("aria-selected", "true");
145
+ } else {
146
+ i.setAttribute("aria-selected", "false");
101
147
  }
102
- this.hideError();
103
- this.showList();
104
- }
105
- search(event) {
106
- this.isDirty = true;
107
- clearRemoteResults(this);
108
- search(this, event);
148
+ });
149
+ this.hiddenInputTarget.value = value;
109
150
  }
110
- clickOutside(event) {
111
- onClickOutside(this, event);
151
+ this.triggerTarget.dataset.hasValue = `${!!value && value.length > 0}`;
152
+ const placeholder = this.triggerTarget.dataset.placeholder;
153
+ if (placeholder && this.triggerTarget.dataset.hasValue === "false") {
154
+ this.triggerTextTarget.textContent = placeholder;
112
155
  }
113
- selectedValueChanged(value) {
114
- const item = this.itemTargets.find((i) => i.dataset.value === value);
115
- if (item) {
116
- this.triggerTextTarget.textContent = item.textContent;
117
- this.itemTargets.forEach((i) => {
118
- if (i.dataset.value === value) {
119
- i.setAttribute('aria-selected', 'true');
120
- }
121
- else {
122
- i.setAttribute('aria-selected', 'false');
123
- }
124
- });
125
- this.hiddenInputTarget.value = value;
126
- }
127
- this.triggerTarget.dataset.hasValue = `${!!value && value.length > 0}`;
128
- const placeholder = this.triggerTarget.dataset.placeholder;
129
- if (placeholder && this.triggerTarget.dataset.hasValue === 'false') {
130
- this.triggerTextTarget.textContent = placeholder;
131
- }
156
+ }
157
+ isOpenValueChanged(isOpen, previousIsOpen) {
158
+ if (isOpen) {
159
+ lockScroll(this.contentTarget.id);
160
+ showContent({
161
+ trigger: this.triggerTarget,
162
+ content: this.contentTarget,
163
+ contentContainer: this.contentContainerTarget,
164
+ setEqualWidth: true,
165
+ });
166
+ this.cleanup = initFloatingUi({
167
+ referenceElement: this.triggerTarget,
168
+ floatingElement: this.contentContainerTarget,
169
+ side: this.contentTarget.dataset.side,
170
+ align: this.contentTarget.dataset.align,
171
+ sideOffset: 4,
172
+ });
173
+ this.setupEventListeners();
174
+ } else {
175
+ unlockScroll(this.contentTarget.id);
176
+ hideContent({
177
+ trigger: this.triggerTarget,
178
+ content: this.contentTarget,
179
+ contentContainer: this.contentContainerTarget,
180
+ });
181
+ if (previousIsOpen) {
182
+ focusTrigger(this.triggerTarget);
183
+ }
184
+ this.cleanupEventListeners();
132
185
  }
133
- isOpenValueChanged(isOpen, previousIsOpen) {
134
- if (isOpen) {
135
- lockScroll(this.contentTarget.id);
136
- showContent({
137
- trigger: this.triggerTarget,
138
- content: this.contentTarget,
139
- contentContainer: this.contentContainerTarget,
140
- setEqualWidth: true,
141
- });
142
- this.cleanup = initFloatingUi({
143
- referenceElement: this.triggerTarget,
144
- floatingElement: this.contentContainerTarget,
145
- side: this.contentTarget.dataset.side,
146
- align: this.contentTarget.dataset.align,
147
- sideOffset: 4,
148
- });
149
- this.setupEventListeners();
186
+ }
187
+ filteredItemIndexesValueChanged(filteredItemIndexes) {
188
+ filteredItemsChanged(this, filteredItemIndexes);
189
+ }
190
+ disconnect() {
191
+ this.cleanupEventListeners();
192
+ resetState(this);
193
+ }
194
+ showLoading() {
195
+ this.isLoading = true;
196
+ this.loadingTarget.classList.remove("hidden");
197
+ }
198
+ hideLoading() {
199
+ this.isLoading = false;
200
+ this.loadingTarget.classList.add("hidden");
201
+ }
202
+ showList() {
203
+ this.listTarget.classList.remove("hidden");
204
+ }
205
+ hideList() {
206
+ this.listTarget.classList.add("hidden");
207
+ }
208
+ showError() {
209
+ this.errorTarget.classList.remove("hidden");
210
+ }
211
+ hideError() {
212
+ this.errorTarget.classList.add("hidden");
213
+ }
214
+ showEmpty() {
215
+ this.emptyTarget.classList.remove("hidden");
216
+ }
217
+ hideEmpty() {
218
+ this.emptyTarget.classList.add("hidden");
219
+ }
220
+ showSelectedRemoteItems() {
221
+ const remoteItems = Array.from(
222
+ this.element.querySelectorAll(
223
+ `[data-shadcn-phlexcomponents="${this.identifier}-item"][data-remote='true']`,
224
+ ),
225
+ );
226
+ remoteItems.forEach((i) => {
227
+ const isInsideGroup =
228
+ i.parentElement?.dataset?.shadcnPhlexcomponents ===
229
+ `${this.identifier}-group`;
230
+ if (isInsideGroup) {
231
+ const isRemoteGroup = i.parentElement.dataset.remote === "true";
232
+ if (isRemoteGroup) {
233
+ i.parentElement.classList.remove("hidden");
150
234
  }
151
- else {
152
- unlockScroll(this.contentTarget.id);
153
- hideContent({
154
- trigger: this.triggerTarget,
155
- content: this.contentTarget,
156
- contentContainer: this.contentContainerTarget,
157
- });
158
- if (previousIsOpen) {
159
- focusTrigger(this.triggerTarget);
160
- }
161
- this.cleanupEventListeners();
235
+ }
236
+ i.ariaHidden = "false";
237
+ i.classList.remove("hidden");
238
+ });
239
+ }
240
+ hideSelectedRemoteItems() {
241
+ const remoteItems = Array.from(
242
+ this.element.querySelectorAll(
243
+ `[data-shadcn-phlexcomponents="${this.identifier}-item"][data-remote='true']`,
244
+ ),
245
+ );
246
+ remoteItems.forEach((i) => {
247
+ const isInsideGroup =
248
+ i.parentElement?.dataset?.shadcnPhlexcomponents ===
249
+ `${this.identifier}-group`;
250
+ if (isInsideGroup) {
251
+ const isRemoteGroup = i.parentElement.dataset.remote === "true";
252
+ if (isRemoteGroup) {
253
+ i.parentElement.classList.add("hidden");
162
254
  }
255
+ }
256
+ i.ariaHidden = "true";
257
+ i.classList.add("hidden");
258
+ });
259
+ }
260
+ setupEventListeners() {
261
+ document.addEventListener("keydown", this.DOMKeydownListener);
262
+ }
263
+ cleanupEventListeners() {
264
+ document.removeEventListener("keydown", this.DOMKeydownListener);
265
+ if (this.abortController) {
266
+ this.abortController.abort();
163
267
  }
164
- filteredItemIndexesValueChanged(filteredItemIndexes) {
165
- filteredItemsChanged(this, filteredItemIndexes);
166
- }
167
- disconnect() {
168
- this.cleanupEventListeners();
169
- resetState(this);
170
- }
171
- showLoading() {
172
- this.isLoading = true;
173
- this.loadingTarget.classList.remove('hidden');
174
- }
175
- hideLoading() {
176
- this.isLoading = false;
177
- this.loadingTarget.classList.add('hidden');
178
- }
179
- showList() {
180
- this.listTarget.classList.remove('hidden');
181
- }
182
- hideList() {
183
- this.listTarget.classList.add('hidden');
184
- }
185
- showError() {
186
- this.errorTarget.classList.remove('hidden');
187
- }
188
- hideError() {
189
- this.errorTarget.classList.add('hidden');
190
- }
191
- showEmpty() {
192
- this.emptyTarget.classList.remove('hidden');
193
- }
194
- hideEmpty() {
195
- this.emptyTarget.classList.add('hidden');
196
- }
197
- showSelectedRemoteItems() {
198
- const remoteItems = Array.from(this.element.querySelectorAll(`[data-shadcn-phlexcomponents="${this.identifier}-item"][data-remote='true']`));
199
- remoteItems.forEach((i) => {
200
- const isInsideGroup = i.parentElement?.dataset?.shadcnPhlexcomponents ===
201
- `${this.identifier}-group`;
202
- if (isInsideGroup) {
203
- const isRemoteGroup = i.parentElement.dataset.remote === 'true';
204
- if (isRemoteGroup) {
205
- i.parentElement.classList.remove('hidden');
206
- }
207
- }
208
- i.ariaHidden = 'false';
209
- i.classList.remove('hidden');
210
- });
211
- }
212
- hideSelectedRemoteItems() {
213
- const remoteItems = Array.from(this.element.querySelectorAll(`[data-shadcn-phlexcomponents="${this.identifier}-item"][data-remote='true']`));
214
- remoteItems.forEach((i) => {
215
- const isInsideGroup = i.parentElement?.dataset?.shadcnPhlexcomponents ===
216
- `${this.identifier}-group`;
217
- if (isInsideGroup) {
218
- const isRemoteGroup = i.parentElement.dataset.remote === 'true';
219
- if (isRemoteGroup) {
220
- i.parentElement.classList.add('hidden');
221
- }
222
- }
223
- i.ariaHidden = 'true';
224
- i.classList.add('hidden');
225
- });
226
- }
227
- setupEventListeners() {
228
- document.addEventListener('keydown', this.DOMKeydownListener);
229
- }
230
- cleanupEventListeners() {
231
- document.removeEventListener('keydown', this.DOMKeydownListener);
232
- if (this.abortController) {
233
- this.abortController.abort();
234
- }
235
- }
236
- onDOMKeydown(event) {
237
- if (!this.isOpenValue)
238
- return;
239
- const key = event.key;
240
- if (['Tab', 'Enter'].includes(key))
241
- event.preventDefault();
242
- if (key === 'Escape') {
243
- this.close();
244
- }
268
+ }
269
+ onDOMKeydown(event) {
270
+ if (!this.isOpenValue) return;
271
+ const key = event.key;
272
+ if (["Tab", "Enter"].includes(key)) event.preventDefault();
273
+ if (key === "Escape") {
274
+ this.close();
245
275
  }
276
+ }
246
277
  };
247
278
  export { ComboboxController };