@coreui/vue-pro 5.14.0 → 5.16.0

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 (127) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/components/calendar/CCalendar.js +67 -65
  3. package/dist/cjs/components/calendar/CCalendar.js.map +1 -1
  4. package/dist/cjs/components/calendar/utils.d.ts +53 -2
  5. package/dist/cjs/components/calendar/utils.js +466 -43
  6. package/dist/cjs/components/calendar/utils.js.map +1 -1
  7. package/dist/cjs/components/date-range-picker/CDateRangePicker.js +86 -57
  8. package/dist/cjs/components/date-range-picker/CDateRangePicker.js.map +1 -1
  9. package/dist/cjs/components/date-range-picker/utils.d.ts +0 -9
  10. package/dist/cjs/components/date-range-picker/utils.js +0 -38
  11. package/dist/cjs/components/date-range-picker/utils.js.map +1 -1
  12. package/dist/cjs/components/dropdown/CDropdown.d.ts +32 -7
  13. package/dist/cjs/components/dropdown/CDropdown.js +67 -29
  14. package/dist/cjs/components/dropdown/CDropdown.js.map +1 -1
  15. package/dist/cjs/components/dropdown/CDropdownToggle.d.ts +19 -0
  16. package/dist/cjs/components/dropdown/CDropdownToggle.js +17 -2
  17. package/dist/cjs/components/dropdown/CDropdownToggle.js.map +1 -1
  18. package/dist/cjs/components/dropdown/utils.d.ts +2 -0
  19. package/dist/cjs/components/dropdown/utils.js +13 -0
  20. package/dist/cjs/components/dropdown/utils.js.map +1 -1
  21. package/dist/cjs/components/focus-trap/CFocusTrap.d.ts +108 -0
  22. package/dist/cjs/components/focus-trap/CFocusTrap.js +254 -0
  23. package/dist/cjs/components/focus-trap/CFocusTrap.js.map +1 -0
  24. package/dist/cjs/components/focus-trap/index.d.ts +6 -0
  25. package/dist/cjs/components/focus-trap/index.js +13 -0
  26. package/dist/cjs/components/focus-trap/index.js.map +1 -0
  27. package/dist/cjs/components/focus-trap/utils.d.ts +28 -0
  28. package/dist/cjs/components/focus-trap/utils.js +83 -0
  29. package/dist/cjs/components/focus-trap/utils.js.map +1 -0
  30. package/dist/cjs/components/index.d.ts +1 -0
  31. package/dist/cjs/components/index.js +70 -66
  32. package/dist/cjs/components/index.js.map +1 -1
  33. package/dist/cjs/components/modal/CModal.d.ts +2 -2
  34. package/dist/cjs/components/modal/CModal.js +19 -27
  35. package/dist/cjs/components/modal/CModal.js.map +1 -1
  36. package/dist/cjs/components/modal/CModalHeader.js +4 -2
  37. package/dist/cjs/components/modal/CModalHeader.js.map +1 -1
  38. package/dist/cjs/components/nav/CNavItem.d.ts +2 -2
  39. package/dist/cjs/components/offcanvas/COffcanvas.js +3 -2
  40. package/dist/cjs/components/offcanvas/COffcanvas.js.map +1 -1
  41. package/dist/cjs/components/picker/CPicker.js +3 -2
  42. package/dist/cjs/components/picker/CPicker.js.map +1 -1
  43. package/dist/cjs/components/time-picker/CTimePicker.d.ts +45 -1
  44. package/dist/cjs/components/time-picker/CTimePicker.js +64 -8
  45. package/dist/cjs/components/time-picker/CTimePicker.js.map +1 -1
  46. package/dist/cjs/components/time-picker/CTimePickerRollCol.d.ts +19 -7
  47. package/dist/cjs/components/time-picker/CTimePickerRollCol.js +80 -8
  48. package/dist/cjs/components/time-picker/CTimePickerRollCol.js.map +1 -1
  49. package/dist/cjs/components/time-picker/utils.d.ts +1 -1
  50. package/dist/cjs/composables/useDebouncedCallback.d.ts +1 -1
  51. package/dist/cjs/composables/useDebouncedCallback.js +1 -1
  52. package/dist/cjs/composables/useDebouncedCallback.js.map +1 -1
  53. package/dist/cjs/index.js +76 -72
  54. package/dist/cjs/index.js.map +1 -1
  55. package/dist/esm/components/calendar/CCalendar.js +67 -65
  56. package/dist/esm/components/calendar/CCalendar.js.map +1 -1
  57. package/dist/esm/components/calendar/utils.d.ts +53 -2
  58. package/dist/esm/components/calendar/utils.js +464 -44
  59. package/dist/esm/components/calendar/utils.js.map +1 -1
  60. package/dist/esm/components/date-range-picker/CDateRangePicker.js +86 -57
  61. package/dist/esm/components/date-range-picker/CDateRangePicker.js.map +1 -1
  62. package/dist/esm/components/date-range-picker/utils.d.ts +0 -9
  63. package/dist/esm/components/date-range-picker/utils.js +1 -38
  64. package/dist/esm/components/date-range-picker/utils.js.map +1 -1
  65. package/dist/esm/components/dropdown/CDropdown.d.ts +32 -7
  66. package/dist/esm/components/dropdown/CDropdown.js +69 -31
  67. package/dist/esm/components/dropdown/CDropdown.js.map +1 -1
  68. package/dist/esm/components/dropdown/CDropdownToggle.d.ts +19 -0
  69. package/dist/esm/components/dropdown/CDropdownToggle.js +17 -2
  70. package/dist/esm/components/dropdown/CDropdownToggle.js.map +1 -1
  71. package/dist/esm/components/dropdown/utils.d.ts +2 -0
  72. package/dist/esm/components/dropdown/utils.js +13 -1
  73. package/dist/esm/components/dropdown/utils.js.map +1 -1
  74. package/dist/esm/components/focus-trap/CFocusTrap.d.ts +108 -0
  75. package/dist/esm/components/focus-trap/CFocusTrap.js +252 -0
  76. package/dist/esm/components/focus-trap/CFocusTrap.js.map +1 -0
  77. package/dist/esm/components/focus-trap/index.d.ts +6 -0
  78. package/dist/esm/components/focus-trap/index.js +10 -0
  79. package/dist/esm/components/focus-trap/index.js.map +1 -0
  80. package/dist/esm/components/focus-trap/utils.d.ts +28 -0
  81. package/dist/esm/components/focus-trap/utils.js +78 -0
  82. package/dist/esm/components/focus-trap/utils.js.map +1 -0
  83. package/dist/esm/components/index.d.ts +1 -0
  84. package/dist/esm/components/index.js +2 -0
  85. package/dist/esm/components/index.js.map +1 -1
  86. package/dist/esm/components/modal/CModal.d.ts +2 -2
  87. package/dist/esm/components/modal/CModal.js +19 -27
  88. package/dist/esm/components/modal/CModal.js.map +1 -1
  89. package/dist/esm/components/modal/CModalHeader.js +4 -2
  90. package/dist/esm/components/modal/CModalHeader.js.map +1 -1
  91. package/dist/esm/components/nav/CNavItem.d.ts +2 -2
  92. package/dist/esm/components/offcanvas/COffcanvas.js +3 -2
  93. package/dist/esm/components/offcanvas/COffcanvas.js.map +1 -1
  94. package/dist/esm/components/picker/CPicker.js +3 -2
  95. package/dist/esm/components/picker/CPicker.js.map +1 -1
  96. package/dist/esm/components/time-picker/CTimePicker.d.ts +45 -1
  97. package/dist/esm/components/time-picker/CTimePicker.js +64 -8
  98. package/dist/esm/components/time-picker/CTimePicker.js.map +1 -1
  99. package/dist/esm/components/time-picker/CTimePickerRollCol.d.ts +19 -7
  100. package/dist/esm/components/time-picker/CTimePickerRollCol.js +80 -8
  101. package/dist/esm/components/time-picker/CTimePickerRollCol.js.map +1 -1
  102. package/dist/esm/components/time-picker/utils.d.ts +1 -1
  103. package/dist/esm/composables/useDebouncedCallback.d.ts +1 -1
  104. package/dist/esm/composables/useDebouncedCallback.js +1 -1
  105. package/dist/esm/composables/useDebouncedCallback.js.map +1 -1
  106. package/dist/esm/index.js +2 -0
  107. package/dist/esm/index.js.map +1 -1
  108. package/package.json +5 -5
  109. package/src/components/calendar/CCalendar.ts +61 -70
  110. package/src/components/calendar/utils.ts +595 -47
  111. package/src/components/date-range-picker/CDateRangePicker.ts +131 -82
  112. package/src/components/date-range-picker/utils.ts +0 -58
  113. package/src/components/dropdown/CDropdown.ts +119 -52
  114. package/src/components/dropdown/CDropdownToggle.ts +18 -3
  115. package/src/components/dropdown/utils.ts +21 -0
  116. package/src/components/focus-trap/CFocusTrap.ts +303 -0
  117. package/src/components/focus-trap/index.ts +10 -0
  118. package/src/components/focus-trap/utils.ts +90 -0
  119. package/src/components/index.ts +1 -0
  120. package/src/components/modal/CModal.ts +32 -37
  121. package/src/components/modal/CModalHeader.ts +5 -3
  122. package/src/components/nav/CNavItem.ts +1 -1
  123. package/src/components/offcanvas/COffcanvas.ts +40 -36
  124. package/src/components/picker/CPicker.ts +58 -52
  125. package/src/components/time-picker/CTimePicker.ts +80 -22
  126. package/src/components/time-picker/CTimePickerRollCol.ts +87 -9
  127. package/src/composables/useDebouncedCallback.ts +1 -1
@@ -0,0 +1,252 @@
1
+ import { defineComponent, ref, watch, onMounted, onUnmounted, cloneVNode } from 'vue';
2
+ import { focusableChildren } from './utils.js';
3
+
4
+ const CFocusTrap = defineComponent({
5
+ name: 'CFocusTrap',
6
+ props: {
7
+ /**
8
+ * Controls whether the focus trap is active or inactive.
9
+ * When `true`, focus will be trapped within the child element.
10
+ * When `false`, normal focus behavior is restored.
11
+ */
12
+ active: {
13
+ type: Boolean,
14
+ default: true,
15
+ },
16
+ /**
17
+ * Additional container elements to include in the focus trap.
18
+ * Useful for floating elements like tooltips or popovers that are
19
+ * rendered outside the main container but should be part of the trap.
20
+ */
21
+ additionalContainer: {
22
+ type: Object,
23
+ default: undefined,
24
+ },
25
+ /**
26
+ * Controls whether to focus the first selectable element or the container itself.
27
+ * When `true`, focuses the first tabbable element within the container.
28
+ * When `false`, focuses the container element directly.
29
+ *
30
+ * This is useful for containers that should receive focus themselves,
31
+ * such as scrollable regions or custom interactive components.
32
+ */
33
+ focusFirstElement: {
34
+ type: Boolean,
35
+ default: false,
36
+ },
37
+ /**
38
+ * Automatically restores focus to the previously focused element when the trap is deactivated.
39
+ * This is crucial for accessibility as it maintains the user's place in the document
40
+ * when returning from modal dialogs or overlay components.
41
+ *
42
+ * Recommended to be `true` for modal dialogs and popover components.
43
+ */
44
+ restoreFocus: {
45
+ type: Boolean,
46
+ default: true,
47
+ },
48
+ },
49
+ emits: {
50
+ /**
51
+ * Emitted when the focus trap becomes active.
52
+ * Useful for triggering additional accessibility announcements or analytics.
53
+ */
54
+ activate: () => true,
55
+ /**
56
+ * Emitted when the focus trap is deactivated.
57
+ * Can be used for cleanup, analytics, or triggering state changes.
58
+ */
59
+ deactivate: () => true,
60
+ },
61
+ setup(props, { emit, slots, expose }) {
62
+ const containerRef = ref(null);
63
+ const prevFocusedRef = ref(null);
64
+ const isActiveRef = ref(false);
65
+ const lastTabNavDirectionRef = ref('forward');
66
+ const tabEventSourceRef = ref(null);
67
+ let handleKeyDown = null;
68
+ let handleFocusIn = null;
69
+ const activateTrap = () => {
70
+ const container = containerRef.value;
71
+ const additionalContainer = props.additionalContainer?.value || null;
72
+ if (!container) {
73
+ return;
74
+ }
75
+ prevFocusedRef.value = document.activeElement;
76
+ // Activating...
77
+ isActiveRef.value = true;
78
+ // Set initial focus
79
+ if (props.focusFirstElement) {
80
+ const elements = focusableChildren(container);
81
+ if (elements.length > 0) {
82
+ elements[0].focus({ preventScroll: true });
83
+ }
84
+ else {
85
+ // Fallback to container if no focusable elements
86
+ container.focus({ preventScroll: true });
87
+ }
88
+ }
89
+ else {
90
+ container.focus({ preventScroll: true });
91
+ }
92
+ emit('activate');
93
+ // Create event handlers
94
+ handleFocusIn = (event) => {
95
+ // Only handle focus events from tab navigation
96
+ if (containerRef.value !== tabEventSourceRef.value) {
97
+ return;
98
+ }
99
+ const target = event.target;
100
+ // Allow focus within container
101
+ if (target === document || target === container || container.contains(target)) {
102
+ return;
103
+ }
104
+ // Allow focus within additional elements
105
+ if (additionalContainer &&
106
+ (target === additionalContainer || additionalContainer.contains(target))) {
107
+ return;
108
+ }
109
+ // Focus escaped, bring it back
110
+ const elements = focusableChildren(container);
111
+ if (elements.length === 0) {
112
+ container.focus({ preventScroll: true });
113
+ }
114
+ else if (lastTabNavDirectionRef.value === 'backward') {
115
+ elements.at(-1)?.focus({ preventScroll: true });
116
+ }
117
+ else {
118
+ elements[0].focus({ preventScroll: true });
119
+ }
120
+ };
121
+ handleKeyDown = (event) => {
122
+ if (event.key !== 'Tab') {
123
+ return;
124
+ }
125
+ tabEventSourceRef.value = container;
126
+ lastTabNavDirectionRef.value = event.shiftKey ? 'backward' : 'forward';
127
+ if (!additionalContainer) {
128
+ return;
129
+ }
130
+ const containerElements = focusableChildren(container);
131
+ const additionalElements = focusableChildren(additionalContainer);
132
+ if (containerElements.length === 0 && additionalElements.length === 0) {
133
+ // No focusable elements, prevent tab
134
+ event.preventDefault();
135
+ return;
136
+ }
137
+ const activeElement = document.activeElement;
138
+ const isInContainer = containerElements.includes(activeElement);
139
+ const isInAdditional = additionalElements.includes(activeElement);
140
+ // Handle tab navigation between container and additional elements
141
+ if (isInContainer) {
142
+ const index = containerElements.indexOf(activeElement);
143
+ if (!event.shiftKey &&
144
+ index === containerElements.length - 1 &&
145
+ additionalElements.length > 0) {
146
+ // Tab forward from last container element to first additional element
147
+ event.preventDefault();
148
+ additionalElements[0].focus({ preventScroll: true });
149
+ }
150
+ else if (event.shiftKey && index === 0 && additionalElements.length > 0) {
151
+ // Tab backward from first container element to last additional element
152
+ event.preventDefault();
153
+ additionalElements.at(-1)?.focus({ preventScroll: true });
154
+ }
155
+ }
156
+ else if (isInAdditional) {
157
+ const index = additionalElements.indexOf(activeElement);
158
+ if (!event.shiftKey &&
159
+ index === additionalElements.length - 1 &&
160
+ containerElements.length > 0) {
161
+ // Tab forward from last additional element to first container element
162
+ event.preventDefault();
163
+ containerElements[0].focus({ preventScroll: true });
164
+ }
165
+ else if (event.shiftKey && index === 0 && containerElements.length > 0) {
166
+ // Tab backward from first additional element to last container element
167
+ event.preventDefault();
168
+ containerElements.at(-1)?.focus({ preventScroll: true });
169
+ }
170
+ }
171
+ };
172
+ // Add event listeners
173
+ container.addEventListener('keydown', handleKeyDown, true);
174
+ if (additionalContainer) {
175
+ additionalContainer.addEventListener('keydown', handleKeyDown, true);
176
+ }
177
+ document.addEventListener('focusin', handleFocusIn, true);
178
+ };
179
+ const deactivateTrap = () => {
180
+ if (!isActiveRef.value) {
181
+ return;
182
+ }
183
+ // Cleanup event listeners
184
+ const container = containerRef.value;
185
+ const additionalContainer = props.additionalContainer?.value || null;
186
+ if (container && handleKeyDown) {
187
+ container.removeEventListener('keydown', handleKeyDown, true);
188
+ }
189
+ if (additionalContainer && handleKeyDown) {
190
+ additionalContainer.removeEventListener('keydown', handleKeyDown, true);
191
+ }
192
+ if (handleFocusIn) {
193
+ document.removeEventListener('focusin', handleFocusIn, true);
194
+ }
195
+ // Restore focus
196
+ if (props.restoreFocus && prevFocusedRef.value?.isConnected) {
197
+ prevFocusedRef.value.focus({ preventScroll: true });
198
+ }
199
+ emit('deactivate');
200
+ isActiveRef.value = false;
201
+ prevFocusedRef.value = null;
202
+ };
203
+ watch(() => props.active, (newActive) => {
204
+ if (newActive && containerRef.value) {
205
+ activateTrap();
206
+ }
207
+ else {
208
+ deactivateTrap();
209
+ }
210
+ }, { immediate: false });
211
+ watch(() => props.additionalContainer?.value, () => {
212
+ if (props.active && isActiveRef.value) {
213
+ // Reactivate to update event listeners
214
+ deactivateTrap();
215
+ activateTrap();
216
+ }
217
+ });
218
+ onMounted(() => {
219
+ if (props.active && containerRef.value) {
220
+ activateTrap();
221
+ }
222
+ });
223
+ onUnmounted(() => {
224
+ deactivateTrap();
225
+ });
226
+ // Expose containerRef for parent components
227
+ expose({
228
+ containerRef,
229
+ });
230
+ return () => {
231
+ const vnodes = slots.default?.();
232
+ const vnode = vnodes?.[0];
233
+ if (!vnode)
234
+ return null;
235
+ const originalRef = vnode.props?.ref;
236
+ return cloneVNode(vnode, {
237
+ ref: (el) => {
238
+ containerRef.value = el;
239
+ if (typeof originalRef === 'function') {
240
+ originalRef(el);
241
+ }
242
+ else if (originalRef && typeof originalRef === 'object' && 'value' in originalRef) {
243
+ originalRef.value = el;
244
+ }
245
+ },
246
+ });
247
+ };
248
+ },
249
+ });
250
+
251
+ export { CFocusTrap };
252
+ //# sourceMappingURL=CFocusTrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CFocusTrap.js","sources":["../../../../src/components/focus-trap/CFocusTrap.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAYA,MAAM,UAAU,GAAG,eAAe,CAAC;AACjC,IAAA,IAAI,EAAE,YAAY;AAClB,IAAA,KAAK,EAAE;AACL;;;;AAIG;AACH,QAAA,MAAM,EAAE;AACN,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,OAAO,EAAE,IAAI;AACd,SAAA;AAED;;;;AAIG;AACH,QAAA,mBAAmB,EAAE;AACnB,YAAA,IAAI,EAAE,MAA2C;AACjD,YAAA,OAAO,EAAE,SAAS;AACnB,SAAA;AAED;;;;;;;AAOG;AACH,QAAA,iBAAiB,EAAE;AACjB,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,OAAO,EAAE,KAAK;AACf,SAAA;AAED;;;;;;AAMG;AACH,QAAA,YAAY,EAAE;AACZ,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,OAAO,EAAE,IAAI;AACd,SAAA;AACF,KAAA;AACD,IAAA,KAAK,EAAE;AACL;;;AAGG;AACH,QAAA,QAAQ,EAAE,MAAM,IAAI;AACpB;;;AAGG;AACH,QAAA,UAAU,EAAE,MAAM,IAAI;AACvB,KAAA;IACD,KAAK,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAA;AAClC,QAAA,MAAM,YAAY,GAAG,GAAG,CAAqB,IAAI,CAAC;AAClD,QAAA,MAAM,cAAc,GAAG,GAAG,CAAqB,IAAI,CAAC;AACpD,QAAA,MAAM,WAAW,GAAG,GAAG,CAAU,KAAK,CAAC;AACvC,QAAA,MAAM,sBAAsB,GAAG,GAAG,CAAyB,SAAS,CAAC;AACrE,QAAA,MAAM,iBAAiB,GAAG,GAAG,CAAqB,IAAI,CAAC;QAEvD,IAAI,aAAa,GAA4C,IAAI;QACjE,IAAI,aAAa,GAAyC,IAAI;QAE9D,MAAM,YAAY,GAAG,MAAK;AACxB,YAAA,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK;YACpC,MAAM,mBAAmB,GAAG,KAAK,CAAC,mBAAmB,EAAE,KAAK,IAAI,IAAI;YAEpE,IAAI,CAAC,SAAS,EAAE;gBACd;YACF;AAEA,YAAA,cAAc,CAAC,KAAK,GAAG,QAAQ,CAAC,aAAmC;;AAGnE,YAAA,WAAW,CAAC,KAAK,GAAG,IAAI;;AAGxB,YAAA,IAAI,KAAK,CAAC,iBAAiB,EAAE;AAC3B,gBAAA,MAAM,QAAQ,GAAG,iBAAiB,CAAC,SAAS,CAAC;AAC7C,gBAAA,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACvB,oBAAA,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;gBAC5C;qBAAO;;oBAEL,SAAS,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;gBAC1C;YACF;iBAAO;gBACL,SAAS,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;YAC1C;YAEA,IAAI,CAAC,UAAU,CAAC;;AAGhB,YAAA,aAAa,GAAG,CAAC,KAAiB,KAAI;;gBAEpC,IAAI,YAAY,CAAC,KAAK,KAAK,iBAAiB,CAAC,KAAK,EAAE;oBAClD;gBACF;AAEA,gBAAA,MAAM,MAAM,GAAG,KAAK,CAAC,MAAc;;AAGnC,gBAAA,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,SAAS,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;oBAC7E;gBACF;;AAGA,gBAAA,IACE,mBAAmB;AACnB,qBAAC,MAAM,KAAK,mBAAmB,IAAI,mBAAmB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EACxE;oBACA;gBACF;;AAGA,gBAAA,MAAM,QAAQ,GAAG,iBAAiB,CAAC,SAAS,CAAC;AAE7C,gBAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;oBACzB,SAAS,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;gBAC1C;AAAO,qBAAA,IAAI,sBAAsB,CAAC,KAAK,KAAK,UAAU,EAAE;AACtD,oBAAA,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;gBACjD;qBAAO;AACL,oBAAA,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;gBAC5C;AACF,YAAA,CAAC;AAED,YAAA,aAAa,GAAG,CAAC,KAAoB,KAAI;AACvC,gBAAA,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE;oBACvB;gBACF;AAEA,gBAAA,iBAAiB,CAAC,KAAK,GAAG,SAAS;AACnC,gBAAA,sBAAsB,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ,GAAG,UAAU,GAAG,SAAS;gBAEtE,IAAI,CAAC,mBAAmB,EAAE;oBACxB;gBACF;AAEA,gBAAA,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,SAAS,CAAC;AACtD,gBAAA,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,mBAAmB,CAAC;AAEjE,gBAAA,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,IAAI,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAAE;;oBAErE,KAAK,CAAC,cAAc,EAAE;oBACtB;gBACF;AAEA,gBAAA,MAAM,aAAa,GAAG,QAAQ,CAAC,aAA4B;gBAC3D,MAAM,aAAa,GAAG,iBAAiB,CAAC,QAAQ,CAAC,aAAa,CAAC;gBAC/D,MAAM,cAAc,GAAG,kBAAkB,CAAC,QAAQ,CAAC,aAAa,CAAC;;gBAGjE,IAAI,aAAa,EAAE;oBACjB,MAAM,KAAK,GAAG,iBAAiB,CAAC,OAAO,CAAC,aAAa,CAAC;oBAEtD,IACE,CAAC,KAAK,CAAC,QAAQ;AACf,wBAAA,KAAK,KAAK,iBAAiB,CAAC,MAAM,GAAG,CAAC;AACtC,wBAAA,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAC7B;;wBAEA,KAAK,CAAC,cAAc,EAAE;AACtB,wBAAA,kBAAkB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;oBACtD;AAAO,yBAAA,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,KAAK,CAAC,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;;wBAEzE,KAAK,CAAC,cAAc,EAAE;AACtB,wBAAA,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;oBAC3D;gBACF;qBAAO,IAAI,cAAc,EAAE;oBACzB,MAAM,KAAK,GAAG,kBAAkB,CAAC,OAAO,CAAC,aAAa,CAAC;oBAEvD,IACE,CAAC,KAAK,CAAC,QAAQ;AACf,wBAAA,KAAK,KAAK,kBAAkB,CAAC,MAAM,GAAG,CAAC;AACvC,wBAAA,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAC5B;;wBAEA,KAAK,CAAC,cAAc,EAAE;AACtB,wBAAA,iBAAiB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;oBACrD;AAAO,yBAAA,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,KAAK,CAAC,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE;;wBAExE,KAAK,CAAC,cAAc,EAAE;AACtB,wBAAA,iBAAiB,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;oBAC1D;gBACF;AACF,YAAA,CAAC;;YAGD,SAAS,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,EAAE,IAAI,CAAC;YAC1D,IAAI,mBAAmB,EAAE;gBACvB,mBAAmB,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,EAAE,IAAI,CAAC;YACtE;YACA,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,aAAa,EAAE,IAAI,CAAC;AAC3D,QAAA,CAAC;QAED,MAAM,cAAc,GAAG,MAAK;AAC1B,YAAA,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE;gBACtB;YACF;;AAGA,YAAA,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK;YACpC,MAAM,mBAAmB,GAAG,KAAK,CAAC,mBAAmB,EAAE,KAAK,IAAI,IAAI;AAEpE,YAAA,IAAI,SAAS,IAAI,aAAa,EAAE;gBAC9B,SAAS,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,EAAE,IAAI,CAAC;YAC/D;AACA,YAAA,IAAI,mBAAmB,IAAI,aAAa,EAAE;gBACxC,mBAAmB,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,EAAE,IAAI,CAAC;YACzE;YACA,IAAI,aAAa,EAAE;gBACjB,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,aAAa,EAAE,IAAI,CAAC;YAC9D;;YAGA,IAAI,KAAK,CAAC,YAAY,IAAI,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE;gBAC3D,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;YACrD;YAEA,IAAI,CAAC,YAAY,CAAC;AAClB,YAAA,WAAW,CAAC,KAAK,GAAG,KAAK;AACzB,YAAA,cAAc,CAAC,KAAK,GAAG,IAAI;AAC7B,QAAA,CAAC;QAED,KAAK,CACH,MAAM,KAAK,CAAC,MAAM,EAClB,CAAC,SAAS,KAAI;AACZ,YAAA,IAAI,SAAS,IAAI,YAAY,CAAC,KAAK,EAAE;AACnC,gBAAA,YAAY,EAAE;YAChB;iBAAO;AACL,gBAAA,cAAc,EAAE;YAClB;AACF,QAAA,CAAC,EACD,EAAE,SAAS,EAAE,KAAK,EAAE,CACrB;QAED,KAAK,CACH,MAAM,KAAK,CAAC,mBAAmB,EAAE,KAAK,EACtC,MAAK;YACH,IAAI,KAAK,CAAC,MAAM,IAAI,WAAW,CAAC,KAAK,EAAE;;AAErC,gBAAA,cAAc,EAAE;AAChB,gBAAA,YAAY,EAAE;YAChB;AACF,QAAA,CAAC,CACF;QAED,SAAS,CAAC,MAAK;YACb,IAAI,KAAK,CAAC,MAAM,IAAI,YAAY,CAAC,KAAK,EAAE;AACtC,gBAAA,YAAY,EAAE;YAChB;AACF,QAAA,CAAC,CAAC;QAEF,WAAW,CAAC,MAAK;AACf,YAAA,cAAc,EAAE;AAClB,QAAA,CAAC,CAAC;;AAGF,QAAA,MAAM,CAAC;YACL,YAAY;AACb,SAAA,CAAC;AAEF,QAAA,OAAO,MAAK;AACV,YAAA,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,IAAI;AAChC,YAAA,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,CAAC;AACzB,YAAA,IAAI,CAAC,KAAK;AAAE,gBAAA,OAAO,IAAI;AAEvB,YAAA,MAAM,WAAW,GAAI,KAAK,CAAC,KAAa,EAAE,GAAG;YAE7C,OAAO,UAAU,CAAC,KAAK,EAAE;AACvB,gBAAA,GAAG,EAAE,CAAC,EAAE,KAAI;AACV,oBAAA,YAAY,CAAC,KAAK,GAAG,EAAwB;AAE7C,oBAAA,IAAI,OAAO,WAAW,KAAK,UAAU,EAAE;wBACrC,WAAW,CAAC,EAAE,CAAC;oBACjB;yBAAO,IAAI,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,OAAO,IAAI,WAAW,EAAE;AACjF,wBAAA,WAA8B,CAAC,KAAK,GAAG,EAAE;oBAC7C;gBACF,CAAC;AACF,aAAA,CAAC;AACJ,QAAA,CAAC;IACH,CAAC;AACF,CAAA;;;;"}
@@ -0,0 +1,6 @@
1
+ import { App } from 'vue';
2
+ import { CFocusTrap } from './CFocusTrap';
3
+ declare const CFocusTrapPlugin: {
4
+ install: (app: App) => void;
5
+ };
6
+ export { CFocusTrapPlugin, CFocusTrap };
@@ -0,0 +1,10 @@
1
+ import { CFocusTrap } from './CFocusTrap.js';
2
+
3
+ const CFocusTrapPlugin = {
4
+ install: (app) => {
5
+ app.component(CFocusTrap.name, CFocusTrap);
6
+ },
7
+ };
8
+
9
+ export { CFocusTrap, CFocusTrapPlugin };
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/focus-trap/index.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAGA,MAAM,gBAAgB,GAAG;AACvB,IAAA,OAAO,EAAE,CAAC,GAAQ,KAAU;QAC1B,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,IAAc,EAAE,UAAU,CAAC;IACtD,CAAC;;;;;"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Gets all focusable child elements within a container.
3
+ * Uses a comprehensive selector to find elements that can receive focus.
4
+ * @param element - The container element to search within
5
+ * @returns Array of focusable HTML elements
6
+ */
7
+ export declare const focusableChildren: (element: HTMLElement) => HTMLElement[];
8
+ /**
9
+ * Checks if an element is disabled.
10
+ * Considers various ways an element can be disabled including CSS classes and attributes.
11
+ * @param element - The HTML element to check
12
+ * @returns True if the element is disabled, false otherwise
13
+ */
14
+ export declare const isDisabled: (element: HTMLElement) => boolean;
15
+ /**
16
+ * Type guard to check if an object is an Element.
17
+ * Handles edge cases including jQuery objects.
18
+ * @param object - The object to check
19
+ * @returns True if the object is an Element, false otherwise
20
+ */
21
+ export declare const isElement: (object: unknown) => object is Element;
22
+ /**
23
+ * Checks if an element is visible in the DOM.
24
+ * Considers client rects and computed visibility styles, handling edge cases like details elements.
25
+ * @param element - The HTML element to check for visibility
26
+ * @returns True if the element is visible, false otherwise
27
+ */
28
+ export declare const isVisible: (element: HTMLElement) => boolean;
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Gets all focusable child elements within a container.
3
+ * Uses a comprehensive selector to find elements that can receive focus.
4
+ * @param element - The container element to search within
5
+ * @returns Array of focusable HTML elements
6
+ */
7
+ const focusableChildren = (element) => {
8
+ const focusableSelectors = [
9
+ 'a[href]',
10
+ 'button:not([disabled])',
11
+ 'input:not([disabled])',
12
+ 'textarea:not([disabled])',
13
+ 'select:not([disabled])',
14
+ 'details',
15
+ '[tabindex]:not([tabindex="-1"])',
16
+ '[contenteditable="true"]',
17
+ ].join(',');
18
+ const elements = [...element.querySelectorAll(focusableSelectors)];
19
+ return elements.filter((el) => !isDisabled(el) && isVisible(el));
20
+ };
21
+ /**
22
+ * Checks if an element is disabled.
23
+ * Considers various ways an element can be disabled including CSS classes and attributes.
24
+ * @param element - The HTML element to check
25
+ * @returns True if the element is disabled, false otherwise
26
+ */
27
+ const isDisabled = (element) => {
28
+ if (!element || element.nodeType !== Node.ELEMENT_NODE) {
29
+ return true;
30
+ }
31
+ if (element.classList.contains('disabled')) {
32
+ return true;
33
+ }
34
+ if ('disabled' in element && typeof element.disabled === 'boolean') {
35
+ return element.disabled;
36
+ }
37
+ return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false';
38
+ };
39
+ /**
40
+ * Type guard to check if an object is an Element.
41
+ * Handles edge cases including jQuery objects.
42
+ * @param object - The object to check
43
+ * @returns True if the object is an Element, false otherwise
44
+ */
45
+ const isElement = (object) => {
46
+ if (!object || typeof object !== 'object') {
47
+ return false;
48
+ }
49
+ return 'nodeType' in object && typeof object.nodeType === 'number';
50
+ };
51
+ /**
52
+ * Checks if an element is visible in the DOM.
53
+ * Considers client rects and computed visibility styles, handling edge cases like details elements.
54
+ * @param element - The HTML element to check for visibility
55
+ * @returns True if the element is visible, false otherwise
56
+ */
57
+ const isVisible = (element) => {
58
+ if (!isElement(element) || element.getClientRects().length === 0) {
59
+ return false;
60
+ }
61
+ const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible';
62
+ // Handle `details` element as its content may falsely appear visible when it is closed
63
+ const closedDetails = element.closest('details:not([open])');
64
+ if (!closedDetails) {
65
+ return elementIsVisible;
66
+ }
67
+ if (closedDetails !== element) {
68
+ const summary = element.closest('summary');
69
+ // Check if summary is a direct child of the closed details
70
+ if (summary?.parentNode !== closedDetails) {
71
+ return false;
72
+ }
73
+ }
74
+ return elementIsVisible;
75
+ };
76
+
77
+ export { focusableChildren, isDisabled, isElement, isVisible };
78
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sources":["../../../../src/components/focus-trap/utils.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;AAKG;AACI,MAAM,iBAAiB,GAAG,CAAC,OAAoB,KAAmB;AACvE,IAAA,MAAM,kBAAkB,GAAG;QACzB,SAAS;QACT,wBAAwB;QACxB,uBAAuB;QACvB,0BAA0B;QAC1B,wBAAwB;QACxB,SAAS;QACT,iCAAiC;QACjC,0BAA0B;AAC3B,KAAA,CAAC,IAAI,CAAC,GAAG,CAAC;IAEX,MAAM,QAAQ,GAAG,CAAC,GAAG,OAAO,CAAC,gBAAgB,CAAc,kBAAkB,CAAC,CAAkB;IAEhG,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC;AAClE;AAEA;;;;;AAKG;AACI,MAAM,UAAU,GAAG,CAAC,OAAoB,KAAa;IAC1D,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAAE;AACtD,QAAA,OAAO,IAAI;IACb;IAEA,IAAI,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AAC1C,QAAA,OAAO,IAAI;IACb;IAEA,IAAI,UAAU,IAAI,OAAO,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE;QAClE,OAAO,OAAO,CAAC,QAAQ;IACzB;AAEA,IAAA,OAAO,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,OAAO;AACzF;AAEA;;;;;AAKG;AACI,MAAM,SAAS,GAAG,CAAC,MAAe,KAAuB;IAC9D,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE;AACzC,QAAA,OAAO,KAAK;IACd;IAEA,OAAO,UAAU,IAAI,MAAM,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ;AACpE;AAEA;;;;;AAKG;AACI,MAAM,SAAS,GAAG,CAAC,OAAoB,KAAa;AACzD,IAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;AAChE,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,YAAY,CAAC,KAAK,SAAS;;IAG/F,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,qBAAqB,CAAC;IAE5D,IAAI,CAAC,aAAa,EAAE;AAClB,QAAA,OAAO,gBAAgB;IACzB;AAEA,IAAA,IAAI,aAAa,KAAK,OAAO,EAAE;QAC7B,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC;;AAG1C,QAAA,IAAI,OAAO,EAAE,UAAU,KAAK,aAAa,EAAE;AACzC,YAAA,OAAO,KAAK;QACd;IACF;AAEA,IAAA,OAAO,gBAAgB;AACzB;;;;"}
@@ -18,6 +18,7 @@ export * from './date-picker';
18
18
  export * from './date-range-picker';
19
19
  export * from './dropdown';
20
20
  export * from './element-cover';
21
+ export * from './focus-trap';
21
22
  export * from './footer';
22
23
  export * from './form';
23
24
  export * from './grid';
@@ -18,6 +18,7 @@ export { CDatePickerPlugin } from './date-picker/index.js';
18
18
  export { CDateRangePickerPlugin } from './date-range-picker/index.js';
19
19
  export { CDropdownPlugin } from './dropdown/index.js';
20
20
  export { CElementCoverPlugin } from './element-cover/index.js';
21
+ export { CFocusTrapPlugin } from './focus-trap/index.js';
21
22
  export { CFooterPlugin } from './footer/index.js';
22
23
  export { CFormPlugin } from './form/index.js';
23
24
  export { CGridPlugin } from './grid/index.js';
@@ -96,6 +97,7 @@ export { CDropdownDivider } from './dropdown/CDropdownDivider.js';
96
97
  export { CDropdownMenu } from './dropdown/CDropdownMenu.js';
97
98
  export { CDropdownToggle } from './dropdown/CDropdownToggle.js';
98
99
  export { CElementCover } from './element-cover/CElementCover.js';
100
+ export { CFocusTrap } from './focus-trap/CFocusTrap.js';
99
101
  export { CFooter } from './footer/CFooter.js';
100
102
  export { CForm } from './form/CForm.js';
101
103
  export { CFormCheck } from './form/CFormCheck.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -10,7 +10,7 @@ declare const CModal: import("vue").DefineComponent<import("vue").ExtractPropTyp
10
10
  validator: (value: string) => boolean;
11
11
  };
12
12
  /**
13
- * Apply a backdrop on body while offcanvas is open.
13
+ * Apply a backdrop on body while modal is open.
14
14
  *
15
15
  * @values boolean | 'static'
16
16
  */
@@ -110,7 +110,7 @@ declare const CModal: import("vue").DefineComponent<import("vue").ExtractPropTyp
110
110
  validator: (value: string) => boolean;
111
111
  };
112
112
  /**
113
- * Apply a backdrop on body while offcanvas is open.
113
+ * Apply a backdrop on body while modal is open.
114
114
  *
115
115
  * @values boolean | 'static'
116
116
  */
@@ -1,6 +1,7 @@
1
1
  import { defineComponent, ref, watch, provide, h, Transition, withDirectives, vShow } from 'vue';
2
2
  import { CBackdrop } from '../backdrop/CBackdrop.js';
3
3
  import { CConditionalTeleport } from '../conditional-teleport/CConditionalTeleport.js';
4
+ import { CFocusTrap } from '../focus-trap/CFocusTrap.js';
4
5
  import { executeAfterTransition } from '../../utils/transition.js';
5
6
 
6
7
  const CModal = defineComponent({
@@ -19,7 +20,7 @@ const CModal = defineComponent({
19
20
  },
20
21
  },
21
22
  /**
22
- * Apply a backdrop on body while offcanvas is open.
23
+ * Apply a backdrop on body while modal is open.
23
24
  *
24
25
  * @values boolean | 'static'
25
26
  */
@@ -162,7 +163,7 @@ const CModal = defineComponent({
162
163
  const handleAfterEnter = () => {
163
164
  props.focus && modalRef.value?.focus();
164
165
  window.addEventListener('mousedown', handleMouseDown);
165
- window.addEventListener('keyup', handleKeyUp);
166
+ window.addEventListener('keydown', handleKeyDown);
166
167
  };
167
168
  // eslint-disable-next-line unicorn/consistent-function-scoping
168
169
  const handleLeave = (el, done) => {
@@ -174,29 +175,28 @@ const CModal = defineComponent({
174
175
  document.body.removeAttribute('class');
175
176
  }
176
177
  el.classList.remove('show');
178
+ emit('close');
177
179
  };
178
180
  const handleAfterLeave = (el) => {
179
181
  activeElementRef.value?.focus();
180
182
  window.removeEventListener('mousedown', handleMouseDown);
181
- window.removeEventListener('keyup', handleKeyUp);
183
+ window.removeEventListener('keydown', handleKeyDown);
182
184
  el.style.display = 'none';
183
185
  };
184
186
  const handleDismiss = () => {
185
- emit('close');
187
+ if (props.backdrop === 'static') {
188
+ modalRef.value.classList.add('modal-static');
189
+ emit('close-prevented');
190
+ setTimeout(() => {
191
+ modalRef.value.classList.remove('modal-static');
192
+ }, 300);
193
+ return;
194
+ }
186
195
  visible.value = false;
187
196
  };
188
- const handleKeyUp = (event) => {
189
- if (modalContentRef.value && !modalContentRef.value.contains(event.target)) {
190
- if (props.backdrop !== 'static' && event.key === 'Escape' && props.keyboard) {
191
- handleDismiss();
192
- }
193
- if (props.backdrop === 'static') {
194
- modalRef.value.classList.add('modal-static');
195
- emit('close-prevented');
196
- setTimeout(() => {
197
- modalRef.value.classList.remove('modal-static');
198
- }, 300);
199
- }
197
+ const handleKeyDown = (event) => {
198
+ if (event.key === 'Escape' && props.keyboard) {
199
+ handleDismiss();
200
200
  }
201
201
  };
202
202
  const handleMouseDown = (event) => {
@@ -204,18 +204,10 @@ const CModal = defineComponent({
204
204
  };
205
205
  const handleMouseUp = (event) => {
206
206
  if (modalContentRef.value && !modalContentRef.value.contains(event.target)) {
207
- if (props.backdrop !== 'static') {
208
- handleDismiss();
209
- }
210
- if (props.backdrop === 'static') {
211
- modalRef.value.classList.add('modal-static');
212
- setTimeout(() => {
213
- modalRef.value.classList.remove('modal-static');
214
- }, 300);
215
- }
207
+ handleDismiss();
216
208
  }
217
209
  };
218
- provide('handleDismiss', handleDismiss);
210
+ provide('visible', visible);
219
211
  const modal = () => h('div', {
220
212
  ...attrs,
221
213
  class: [
@@ -238,7 +230,7 @@ const CModal = defineComponent({
238
230
  [`modal-${props.size}`]: props.size,
239
231
  },
240
232
  ],
241
- }, h('div', { class: ['modal-content', props.contentClassName], ref: modalContentRef }, slots.default && slots.default())));
233
+ }, h(CFocusTrap, { active: props.focus }, () => h('div', { class: ['modal-content', props.contentClassName], ref: modalContentRef }, slots.default && slots.default()))));
242
234
  return () => h(CConditionalTeleport, {
243
235
  container: props.container,
244
236
  teleport: props.teleport,
@@ -1 +1 @@
1
- {"version":3,"file":"CModal.js","sources":["../../../../src/components/modal/CModal.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CModal.js","sources":["../../../../src/components/modal/CModal.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -13,10 +13,12 @@ const CModalHeader = defineComponent({
13
13
  },
14
14
  },
15
15
  setup(props, { slots }) {
16
- const handleDismiss = inject('handleDismiss');
16
+ const visible = inject('visible');
17
17
  return () => h('span', { class: 'modal-header' }, [
18
18
  slots.default && slots.default(),
19
- props.closeButton && h(CCloseButton, { onClick: () => handleDismiss() }, ''),
19
+ props.closeButton && h(CCloseButton, { onClick: () => {
20
+ visible.value = false;
21
+ } }, ''),
20
22
  ]);
21
23
  },
22
24
  });
@@ -1 +1 @@
1
- {"version":3,"file":"CModalHeader.js","sources":["../../../../src/components/modal/CModalHeader.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAIA,MAAM,YAAY,GAAG,eAAe,CAAC;AACnC,IAAA,IAAI,EAAE,cAAc;AACpB,IAAA,KAAK,EAAE;AACL;;AAEG;AACH,QAAA,WAAW,EAAE;AACX,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,OAAO,EAAE,IAAI;AACd,SAAA;AACF,KAAA;AACD,IAAA,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAA;AACpB,QAAA,MAAM,aAAa,GAAG,MAAM,CAAC,eAAe,CAAe;AAC3D,QAAA,OAAO,MACL,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE;AACnC,YAAA,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE;AAChC,YAAA,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,MAAM,aAAa,EAAE,EAAE,EAAE,EAAE,CAAC;AAC7E,SAAA,CAAC;IACN,CAAC;AACF,CAAA;;;;"}
1
+ {"version":3,"file":"CModalHeader.js","sources":["../../../../src/components/modal/CModalHeader.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAIA,MAAM,YAAY,GAAG,eAAe,CAAC;AACnC,IAAA,IAAI,EAAE,cAAc;AACpB,IAAA,KAAK,EAAE;AACL;;AAEG;AACH,QAAA,WAAW,EAAE;AACX,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,OAAO,EAAE,IAAI;AACd,SAAA;AACF,KAAA;AACD,IAAA,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,EAAA;AACpB,QAAA,MAAM,OAAO,GAAG,MAAM,CAAe,SAAS,CAAE;AAChD,QAAA,OAAO,MACL,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE;AACnC,YAAA,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE;YAChC,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,MAAK;AACnD,oBAAA,OAAO,CAAC,KAAK,GAAG,KAAK;gBACvB,CAAC,EAAE,EAAE,EAAE,CAAC;AACT,SAAA,CAAC;IACN,CAAC;AACF,CAAA;;;;"}
@@ -1,6 +1,6 @@
1
1
  declare const CNavItem: import("vue").DefineComponent<{
2
2
  as: string;
3
- class: string;
3
+ class?: string | undefined;
4
4
  disabled?: boolean | undefined;
5
5
  active?: boolean | undefined;
6
6
  href?: string | undefined;
@@ -8,7 +8,7 @@ declare const CNavItem: import("vue").DefineComponent<{
8
8
  [key: string]: any;
9
9
  }>, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{
10
10
  as: string;
11
- class: string;
11
+ class?: string | undefined;
12
12
  disabled?: boolean | undefined;
13
13
  active?: boolean | undefined;
14
14
  href?: string | undefined;
@@ -1,5 +1,6 @@
1
1
  import { defineComponent, ref, watch, h, Transition, withDirectives } from 'vue';
2
2
  import { CBackdrop } from '../backdrop/CBackdrop.js';
3
+ import { CFocusTrap } from '../focus-trap/CFocusTrap.js';
3
4
  import { vVisible } from '../../directives/v-c-visible.js';
4
5
  import { executeAfterTransition } from '../../utils/transition.js';
5
6
 
@@ -143,7 +144,7 @@ const COffcanvas = defineComponent({
143
144
  }
144
145
  };
145
146
  return () => [
146
- h(Transition, {
147
+ h(CFocusTrap, { active: visible.value && Boolean(props.backdrop) }, () => h(Transition, {
147
148
  appear: visible.value,
148
149
  css: false,
149
150
  onEnter: (el, done) => handleEnter(el, done),
@@ -164,7 +165,7 @@ const COffcanvas = defineComponent({
164
165
  role: 'dialog',
165
166
  tabindex: -1,
166
167
  ...(props.dark && { 'data-coreui-theme': 'dark' }),
167
- }, slots.default && slots.default()), [[vVisible, props.visible]])),
168
+ }, slots.default && slots.default()), [[vVisible, props.visible]]))),
168
169
  props.backdrop &&
169
170
  h(CBackdrop, {
170
171
  class: 'offcanvas-backdrop',