@coreui/vue-pro 4.9.0-rc.0 → 5.0.0-alpha.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.
@@ -1,7 +1,6 @@
1
1
  import { defineComponent, h, ref, watch } from 'vue'
2
2
 
3
3
  import { CButton } from '../button'
4
- import { CInputGroup } from '../form'
5
4
  import { CFormControlWrapper } from '../form/CFormControlWrapper'
6
5
  import { CPicker } from '../picker'
7
6
 
@@ -392,10 +391,10 @@ const CTimePicker = defineComponent({
392
391
  }
393
392
 
394
393
  const InputGroup = () =>
395
- h(CInputGroup, { class: 'picker-input-group', size: props.size }, () => [
394
+ h('div', { class: 'time-picker-input-group' }, [
396
395
  h('input', {
397
396
  autocomplete: 'off',
398
- class: 'form-control',
397
+ class: 'time-picker-input',
399
398
  disabled: props.disabled,
400
399
  onInput: (event: Event) => {
401
400
  if (isValidTime((event.target as HTMLInputElement).value)) {
@@ -413,31 +412,13 @@ const CTimePicker = defineComponent({
413
412
  })
414
413
  : '',
415
414
  }),
416
- (props.indicator || props.cleaner) &&
417
- h('div', { class: 'input-group-text' }, [
418
- props.indicator &&
419
- h(
420
- 'span',
421
- {
422
- class: 'picker-input-group-indicator',
423
- },
424
- slots.indicator
425
- ? slots.indicator()
426
- : h('span', { class: 'picker-input-group-icon time-picker-input-icon' }),
427
- ),
428
- props.cleaner &&
429
- h(
430
- 'span',
431
- {
432
- class: 'picker-input-group-cleaner',
433
- onClick: (event: Event) => handleClear(event),
434
- role: 'button',
435
- },
436
- slots.cleaner
437
- ? slots.cleaner()
438
- : h('span', { class: 'picker-input-group-icon time-picker-cleaner-icon' }),
439
- ),
440
- ]),
415
+ props.indicator && h('div', { class: 'time-picker-indicator' }),
416
+ props.cleaner &&
417
+ date.value &&
418
+ h('div', {
419
+ class: 'time-picker-cleaner',
420
+ onClick: (event: Event) => handleClear(event),
421
+ }),
441
422
  ])
442
423
 
443
424
  const TimePickerSelect = () => [
@@ -587,6 +568,7 @@ const CTimePicker = defineComponent({
587
568
  class: [
588
569
  'time-picker',
589
570
  {
571
+ [`time-picker-${props.size}`]: props.size,
590
572
  disabled: props.disabled,
591
573
  'is-invalid': isValid.value === false ? true : false,
592
574
  'is-valid': isValid.value,
@@ -632,7 +614,7 @@ const CTimePicker = defineComponent({
632
614
  props.variant === 'select' ? TimePickerSelect() : TimePickerRoll(),
633
615
  ),
634
616
  footer: () =>
635
- h('div', { class: 'picker-footer' }, [
617
+ h('div', { class: 'time-picker-footer' }, [
636
618
  props.cancelButton &&
637
619
  h(
638
620
  CButton,
@@ -12,7 +12,7 @@ const CTooltip = defineComponent({
12
12
  /**
13
13
  * Apply a CSS fade transition to the tooltip.
14
14
  *
15
- * @since 4.9.0-rc.0
15
+ * @since 4.9.0
16
16
  */
17
17
  animation: {
18
18
  type: Boolean,
@@ -25,7 +25,7 @@ const CTooltip = defineComponent({
25
25
  /**
26
26
  * The delay for displaying and hiding the popover (in milliseconds). When a numerical value is provided, the delay applies to both the hide and show actions. The object structure for specifying the delay is as follows: delay: `{ 'show': 500, 'hide': 100 }`.
27
27
  *
28
- * @since 4.9.0-rc.0
28
+ * @since 4.9.0
29
29
  */
30
30
  delay: {
31
31
  type: [Number, Object] as PropType<number | { show: number; hide: number }>,
@@ -34,7 +34,7 @@ const CTooltip = defineComponent({
34
34
  /**
35
35
  * Specify the desired order of fallback placements by providing a list of placements as an array. The placements should be prioritized based on preference.
36
36
  *
37
- * @since 4.9.0-rc.0
37
+ * @since 4.9.0
38
38
  */
39
39
  fallbackPlacements: {
40
40
  type: [String, Array] as PropType<Placements | Placements[]>,
@@ -1,3 +1,4 @@
1
+ import { useColorModes } from './useColorModes'
1
2
  import { usePopper } from './usePopper'
2
3
 
3
- export { usePopper }
4
+ export { useColorModes, usePopper }
@@ -0,0 +1,63 @@
1
+ import { onBeforeMount, ref, watch } from 'vue'
2
+
3
+ const getStoredTheme = (localStorageItemName: string) =>
4
+ typeof window !== 'undefined' && localStorage.getItem(localStorageItemName)
5
+
6
+ const setStoredTheme = (localStorageItemName: string, colorMode: string) =>
7
+ localStorage.setItem(localStorageItemName, colorMode)
8
+
9
+ const getPreferredColorScheme = (localStorageItemName: string) => {
10
+ if (typeof window === 'undefined') {
11
+ return
12
+ }
13
+
14
+ const storedTheme = getStoredTheme(localStorageItemName)
15
+
16
+ if (storedTheme) {
17
+ return storedTheme
18
+ }
19
+
20
+ return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'
21
+ }
22
+
23
+ const setTheme = (colorMode: string) => {
24
+ document.documentElement.dataset.coreuiTheme =
25
+ colorMode === 'auto' && window.matchMedia('(prefers-color-scheme: dark)').matches
26
+ ? 'dark'
27
+ : colorMode
28
+
29
+ const event = new Event('ColorSchemeChange')
30
+ document.documentElement.dispatchEvent(event)
31
+ }
32
+
33
+ export const useColorModes = (localStorageItemName = 'coreui-vue-color-scheme') => {
34
+ const colorMode = ref(getPreferredColorScheme(localStorageItemName))
35
+
36
+ watch(colorMode, () => {
37
+ if (colorMode.value) {
38
+ setStoredTheme(localStorageItemName, colorMode.value)
39
+ setTheme(colorMode.value)
40
+ }
41
+ })
42
+
43
+ onBeforeMount(() => {
44
+ if (typeof getStoredTheme(localStorageItemName) === 'string' && colorMode.value) {
45
+ setTheme(colorMode.value)
46
+ }
47
+
48
+ window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
49
+ const storedTheme = getStoredTheme(localStorageItemName)
50
+ if (storedTheme !== 'light' && storedTheme !== 'dark' && colorMode.value) {
51
+ setTheme(colorMode.value)
52
+ }
53
+ })
54
+ })
55
+
56
+ return {
57
+ colorMode,
58
+ isColorModeSet: () => Boolean(getStoredTheme(localStorageItemName)),
59
+ setColorMode: (mode: string) => {
60
+ colorMode.value = mode
61
+ },
62
+ }
63
+ }