@indielayer/ui 1.14.2 → 1.14.4

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/lib/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- declare const _default: "1.14.2";
1
+ declare const _default: "1.14.4";
2
2
  export default _default;
package/lib/version.js CHANGED
@@ -1,4 +1,4 @@
1
- const e = "1.14.2";
1
+ const e = "1.14.4";
2
2
  export {
3
3
  e as default
4
4
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@indielayer/ui",
3
- "version": "1.14.2",
3
+ "version": "1.14.4",
4
4
  "description": "Indielayer UI Components with Tailwind CSS build for Vue 3",
5
5
  "author": {
6
6
  "name": "João Teixeira",
@@ -96,7 +96,7 @@ const { styles, classes, className } = useTheme('Badge', {}, props)
96
96
  <slot></slot>
97
97
  <div
98
98
  v-if="show"
99
- class="absolute rounded-full z-10 bg-[color:var(--x-badge-bg)]"
99
+ class="absolute rounded-full z-10 bg-[color:var(--x-badge-bg)] pointer-events-none"
100
100
  :style="offsetStyle"
101
101
  :class="[
102
102
  positionClasses,
@@ -42,6 +42,7 @@ const elRef = ref<HTMLElement | null>(null)
42
42
  const checked = ref(false)
43
43
 
44
44
  function toggle() {
45
+ if (props.disabled || props.loading || props.readonly) return
45
46
  checked.value = !checked.value
46
47
  }
47
48
 
@@ -138,7 +139,7 @@ defineExpose({ focus, blur, toggle, reset, validate, setError })
138
139
  :aria-disabled="disabled ? 'true' : undefined"
139
140
  type="checkbox"
140
141
  class="invisible absolute"
141
- :disabled="disabled || loading"
142
+ :disabled="disabled || loading || readonly"
142
143
  :required="required"
143
144
  v-on="listeners"
144
145
  />
@@ -149,7 +150,12 @@ defineExpose({ focus, blur, toggle, reset, validate, setError })
149
150
  ]"
150
151
  >
151
152
  <x-spinner v-if="loading" :size="size" class="absolute" />
152
- <span v-else-if="indeterminate" name="check-icon" class="w-2/3 h-[2px] bg-white dark:bg-secondary-900"></span>
153
+ <span
154
+ v-else-if="indeterminate"
155
+ name="check-icon"
156
+ class="w-2/3 h-[1.5px]"
157
+ :class="[disabled ? 'bg-secondary-400 dark:bg-secondary-500' : 'bg-white']"
158
+ ></span>
153
159
  <slot v-else name="icon">
154
160
  <svg
155
161
  viewBox="0 0 20 20"
@@ -159,7 +165,7 @@ defineExpose({ focus, blur, toggle, reset, validate, setError })
159
165
  </svg>
160
166
  </slot>
161
167
  </div>
162
- <div :class="classes.label">
168
+ <div v-if="label || $slots.default" :class="classes.label">
163
169
  <span v-if="label" v-text="label"></span>
164
170
  <slot v-else></slot>
165
171
  </div>
@@ -29,7 +29,10 @@ const theme: CheckboxTheme = {
29
29
  },
30
30
 
31
31
  icon: ({ props }) => {
32
- const classes = ['fill-current text-white']
32
+ const classes = ['fill-current']
33
+
34
+ if (props.disabled) classes.push('text-secondary-400 dark:text-secondary-500')
35
+ else classes.push('text-white')
33
36
 
34
37
  if (props.size === 'lg') classes.push('h-3 w-3')
35
38
  else if (props.size === 'xl') classes.push('h-4 w-4')
@@ -106,9 +106,11 @@ watch(value, (val) => {
106
106
  }
107
107
  })
108
108
 
109
- watch(() => props.modelValue, checkVisibiliy, { immediate: true })
109
+ let initTrapTimeout: ReturnType<typeof setTimeout>
110
110
 
111
- async function checkVisibiliy() {
111
+ watch(() => props.modelValue, checkVisibility, { immediate: true })
112
+
113
+ async function checkVisibility() {
112
114
  const val = props.modelValue
113
115
 
114
116
  if (val) {
@@ -120,15 +122,16 @@ async function checkVisibiliy() {
120
122
 
121
123
  visible.value = val
122
124
 
123
- await nextTick()
124
-
125
- initFocusTrap(modalRef)
125
+ initTrapTimeout = setTimeout(() => {
126
+ initFocusTrap(modalRef)
127
+ }, 100)
126
128
 
127
129
  document.body.style.paddingRight = `${scrollbarWidth}px`
128
130
  document.body.style.overflow = 'hidden'
129
131
  } else {
130
132
  visible.value = val
131
133
  value.value = val
134
+ clearTimeout(initTrapTimeout)
132
135
  clearFocusTrap()
133
136
  document.body.style.paddingRight = ''
134
137
  document.body.style.overflow = 'auto'
@@ -27,6 +27,10 @@ const notificationsProps = {
27
27
  type: [Symbol, String],
28
28
  default: injectNotificationKey,
29
29
  },
30
+ offset: {
31
+ type: [String, Number],
32
+ default: 0,
33
+ },
30
34
  }
31
35
 
32
36
  const validators = {
@@ -78,7 +82,7 @@ export default {
78
82
  </script>
79
83
 
80
84
  <script setup lang="ts">
81
- import { ref, provide, watch, type PropType, type ExtractPublicPropTypes } from 'vue'
85
+ import { ref, provide, watch, type PropType, type ExtractPublicPropTypes, computed } from 'vue'
82
86
  import { injectNotificationKey } from '../../composables/keys'
83
87
  import { useColors } from '../../composables/useColors'
84
88
  import { useCSS } from '../../composables/useCSS'
@@ -254,6 +258,8 @@ function resume(notification: NotificationEvent) {
254
258
  }
255
259
  }
256
260
 
261
+ const offsetStyle = computed(() => `${props.offset}px`)
262
+
257
263
  const { styles, classes, className } = useTheme('Notifications', {}, props)
258
264
 
259
265
  defineExpose({ log, info, success, warn, warning: warn, error })
@@ -279,6 +285,9 @@ defineExpose({ log, info, success, warn, warning: warn, error })
279
285
  >
280
286
  <transition-group
281
287
  tag="ul"
288
+ :style="[
289
+ internalPosition === 'bottom' ? `padding-bottom: ${offsetStyle};` : `padding-top: ${offsetStyle};`
290
+ ]"
282
291
  :class="[
283
292
  classes.list,
284
293
  { 'flex-col-reverse': internalPosition }
@@ -547,7 +547,7 @@ defineExpose({ focus, blur, reset, validate, setError, filterRef })
547
547
  >+{{ hiddenTags }}</div>
548
548
  </div>
549
549
  </template>
550
- <template v-else-if="!internalMultiple && !isEmpty(selected)">
550
+ <template v-else-if="!internalMultiple && !isEmpty(selected) && getLabel(selected) !== ''">
551
551
  {{ getLabel(selected) }}
552
552
  </template>
553
553
 
@@ -6,7 +6,7 @@ const theme: TabTheme = {
6
6
  const c = ['transition-colors duration-150 ease-in-out whitespace-nowrap text-center']
7
7
 
8
8
  if (data.variant === 'line') c.push('py-2')
9
- if (data.variant === 'block') c.push('py-1.5 px-8')
9
+ if (data.variant === 'block') c.push('py-1 px-8')
10
10
 
11
11
  if (props.size === 'xs') c.push('text-xs')
12
12
  else if (props.size === 'sm') c.push('text-sm')
@@ -31,7 +31,13 @@ export function useFocusTrap() {
31
31
  }
32
32
 
33
33
  const handleKeydown = (event: KeyboardEvent) => {
34
- if (event.key !== 'Tab' || focusable.value.length === 0) return
34
+ if (event.key === 'Tab' && focusable.value.length === 0) {
35
+ event.preventDefault()
36
+
37
+ return
38
+ }
39
+
40
+ if (event.key !== 'Tab') return
35
41
 
36
42
  const isShiftPressed = event.shiftKey
37
43
  const currentEl = document.activeElement as HTMLElement | null
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export default '1.14.2'
1
+ export default '1.14.4'