@imaginario27/air-ui-ds 1.15.0 → 1.15.2

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/CHANGELOG.md CHANGED
@@ -5,6 +5,17 @@ All notable changes to this package are documented in this file.
5
5
  Historical releases were reconstructed from git history (GitHub repository) and npm publish dates.
6
6
  Future releases will include detailed entries generated with Changesets.
7
7
 
8
+ ## 1.15.0 - 2026-06-30
9
+
10
+ Release type: minor.
11
+ Commits found in range: 1.
12
+
13
+ ### Added
14
+
15
+ 1. add NotificationsPopover; enhance MetricCard, ContainedIcon, SectionTitle, and Popover ([352e809](https://github.com/imaginario27/air-ui/commit/352e809a77a63b6ef70d3877ad5d8c4b20a4e65e))
16
+
17
+ - Package: @imaginario27/air-ui-ds.
18
+
8
19
  ## 1.14.2 - 2026-06-23
9
20
 
10
21
  Release type: patch.
@@ -71,7 +71,7 @@
71
71
  v-if="unit"
72
72
  :class="['text-lg', 'font-semibold', unitClass]"
73
73
  >
74
- /{{ unit }}
74
+ {{ unit }}
75
75
  </span>
76
76
  </div>
77
77
 
@@ -41,9 +41,11 @@
41
41
  {{ title }}
42
42
  </span>
43
43
 
44
- <slot name="description" />
44
+ <div v-if="$slots.description" class="max-w-[800px]">
45
+ <slot name="description" />
46
+ </div>
45
47
 
46
- <p v-if="!$slots.description" class="text-sm text-text-default">
48
+ <p v-if="!$slots.description" class="text-sm text-text-default max-w-[800px]">
47
49
  {{ description }}
48
50
  </p>
49
51
  </div>
@@ -53,8 +55,9 @@
53
55
  <Icon
54
56
  :name="timeAgoIcon"
55
57
  :size="IconSize.XS"
58
+ iconClass="text-icon-neutral-subtle"
56
59
  />
57
- <span class="text-xs text-text-neutral-subtle">
60
+ <span class="text-xs text-text-neutral-subtle whitespace-nowrap select-none">
58
61
  {{ timeAgo }}
59
62
  </span>
60
63
  </div>
@@ -62,8 +65,9 @@
62
65
  <Icon
63
66
  :name="authorIcon"
64
67
  :size="IconSize.XS"
68
+ iconClass="text-icon-neutral-subtle"
65
69
  />
66
- <span class="text-xs text-text-neutral-subtle">
70
+ <span class="text-xs text-text-neutral-subtle whitespace-nowrap select-none">
67
71
  {{ author }}
68
72
  </span>
69
73
  </div>
@@ -152,11 +156,12 @@ const props = defineProps({
152
156
  },
153
157
  })
154
158
 
155
- const emit = defineEmits(['update:modelValue', 'remove'])
159
+ const emit = defineEmits(['update:modelValue', 'remove', 'itemClick'])
156
160
 
157
- function onItemClick() {
161
+ const onItemClick = () => {
158
162
  if (!props.modelValue) {
159
163
  emit('update:modelValue', true)
160
164
  }
165
+ emit('itemClick')
161
166
  }
162
167
  </script>
@@ -5,9 +5,9 @@
5
5
  :trigger
6
6
  :popoverClass="['px-0 py-3', popoverClass]"
7
7
  >
8
- <template #content>
8
+ <template #content="{ onClose }">
9
9
  <div
10
- v-if="isLoading && !hasError"
10
+ v-if="isLoading && !hasError"
11
11
  class="w-full flex justify-center py-3"
12
12
  >
13
13
  <Loading
@@ -52,6 +52,7 @@
52
52
  :text="viewAllText"
53
53
  :to="viewAllLink"
54
54
  textClass="text-text-default text-sm! hover:text-text-primary-brand-hover font-normal"
55
+ @click="onViewAllClick($event, onClose)"
55
56
  />
56
57
  </div>
57
58
 
@@ -92,6 +93,7 @@
92
93
  :removeAriaLabel="listRemoveItemAriaLabel"
93
94
  @update:model-value="onReadStatusChange(notification.id, $event)"
94
95
  @remove="onRemoveNotification(notification.id)"
96
+ @itemClick="onClose"
95
97
  />
96
98
  </template>
97
99
 
@@ -134,41 +136,11 @@
134
136
  const props = defineProps({
135
137
  list: {
136
138
  type: Array as PropType<NotificationItem[]>,
137
- default: () => [
138
- {
139
- id: '1',
140
- read: false,
141
- icon: 'mdi:bell-outline',
142
- iconColor: ColorAccent.NEUTRAL,
143
- title: 'New Notification',
144
- description: 'This is a sample notification description.',
145
- timeAgo: '5 minutes ago',
146
- author: 'John Doe',
147
- link: '',
148
- },
149
- {
150
- id: '2',
151
- read: true,
152
- icon: 'mdi:bell-outline',
153
- iconColor: ColorAccent.SECONDARY_BRAND,
154
- title: 'Another Notification',
155
- description: 'This is another sample notification description.',
156
- timeAgo: '10 minutes ago',
157
- author: 'Jane Doe',
158
- link: '',
159
- },
160
- {
161
- id: '3',
162
- read: false,
163
- icon: 'mdi:bell-outline',
164
- iconColor: ColorAccent.PRIMARY_BRAND,
165
- title: 'Third Notification',
166
- description: 'This is the third sample notification description.',
167
- timeAgo: '15 minutes ago',
168
- author: 'Jim Doe',
169
- link: '',
170
- }
171
- ],
139
+ default: () => [],
140
+ },
141
+ limit: {
142
+ type: Number as PropType<number>,
143
+ default: 10,
172
144
  },
173
145
  isListIconContained: {
174
146
  type: Boolean as PropType<boolean>,
@@ -331,13 +303,19 @@ const hasError = computed(() => props.errorText.trim().length > 0)
331
303
  const unreadCount = computed(() => internalList.value.filter(notification => !notification.read).length)
332
304
 
333
305
  const filteredList = computed(() => {
334
- if (selectedFilterValue.value === 'unread') {
335
- return internalList.value.filter(notification => !notification.read)
336
- }
337
- return internalList.value
306
+ const source = selectedFilterValue.value === 'unread'
307
+ ? internalList.value.filter(notification => !notification.read)
308
+ : internalList.value
309
+
310
+ return source.slice(0, props.limit)
338
311
  })
339
312
 
340
313
  // Handlers
314
+ const onViewAllClick = (event: MouseEvent, onClose: () => void) => {
315
+ if (!props.viewAllLink) event.preventDefault()
316
+ onClose()
317
+ }
318
+
341
319
  const onRemoveNotification = (id: string) => {
342
320
  internalList.value = internalList.value.filter(notification => notification.id !== id)
343
321
  emit('remove', { id })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@imaginario27/air-ui-ds",
3
- "version": "1.15.0",
3
+ "version": "1.15.2",
4
4
  "author": "imaginario27",
5
5
  "type": "module",
6
6
  "homepage": "https://air-ui.netlify.app/",