@keenmate/pure-admin-core 2.4.0 → 2.5.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.
- package/README.md +11 -6
- package/dist/css/main.css +47 -130
- package/package.json +1 -1
- package/snippets/AUDIT.md +94 -0
- package/snippets/alerts.html +264 -89
- package/snippets/badges.html +193 -61
- package/snippets/buttons.html +178 -0
- package/snippets/callouts.html +210 -129
- package/snippets/cards.html +383 -200
- package/snippets/checkbox-lists.html +199 -65
- package/snippets/code.html +55 -11
- package/snippets/command-palette.html +401 -111
- package/snippets/comparison.html +144 -93
- package/snippets/customization.html +311 -104
- package/snippets/data-display.html +584 -0
- package/snippets/detail-panel.html +470 -138
- package/snippets/filter-card.html +246 -0
- package/snippets/forms.html +408 -308
- package/snippets/grid.html +253 -141
- package/snippets/layout.html +379 -480
- package/snippets/lists.html +144 -47
- package/snippets/loaders.html +64 -39
- package/snippets/manifest.json +330 -280
- package/snippets/modal-dialogs.html +137 -64
- package/snippets/modals.html +221 -151
- package/snippets/notifications.html +285 -0
- package/snippets/popconfirm.html +213 -19
- package/snippets/profile.html +290 -330
- package/snippets/statistics.html +247 -0
- package/snippets/tables.html +359 -150
- package/snippets/tabs.html +129 -45
- package/snippets/timeline.html +123 -56
- package/snippets/toasts.html +179 -31
- package/snippets/tooltips.html +199 -81
- package/snippets/typography.html +183 -58
- package/snippets/utilities.html +511 -415
- package/snippets/virtual-scroll.html +201 -75
- package/snippets/web-daterangepicker.html +369 -189
- package/snippets/web-multiselect.html +360 -124
- package/src/scss/core-components/_alerts.scss +51 -12
- package/src/scss/core-components/_pagers.scss +1 -1
- package/src/scss/core-components/_popconfirm.scss +35 -13
- package/src/scss/core-components/_tables.scss +2 -134
- package/src/scss/variables/_components.scss +17 -2
package/snippets/alerts.html
CHANGED
|
@@ -6,42 +6,42 @@
|
|
|
6
6
|
<!-- BASIC ALERTS -->
|
|
7
7
|
|
|
8
8
|
<!-- Primary Alert -->
|
|
9
|
-
<div class="pa-alert pa-alert--primary">
|
|
9
|
+
<div class="pa-alert pa-alert--primary" role="alert">
|
|
10
10
|
<strong>Primary!</strong> This is a primary alert — check it out!
|
|
11
11
|
</div>
|
|
12
12
|
|
|
13
13
|
<!-- Secondary Alert -->
|
|
14
|
-
<div class="pa-alert pa-alert--secondary">
|
|
14
|
+
<div class="pa-alert pa-alert--secondary" role="alert">
|
|
15
15
|
<strong>Secondary!</strong> This is a secondary alert — check it out!
|
|
16
16
|
</div>
|
|
17
17
|
|
|
18
18
|
<!-- Success Alert -->
|
|
19
|
-
<div class="pa-alert pa-alert--success">
|
|
19
|
+
<div class="pa-alert pa-alert--success" role="alert">
|
|
20
20
|
<strong>Success!</strong> This is a success alert — your operation completed successfully.
|
|
21
21
|
</div>
|
|
22
22
|
|
|
23
23
|
<!-- Danger Alert -->
|
|
24
|
-
<div class="pa-alert pa-alert--danger">
|
|
24
|
+
<div class="pa-alert pa-alert--danger" role="alert">
|
|
25
25
|
<strong>Danger!</strong> This is a danger alert — something went wrong!
|
|
26
26
|
</div>
|
|
27
27
|
|
|
28
28
|
<!-- Warning Alert -->
|
|
29
|
-
<div class="pa-alert pa-alert--warning">
|
|
29
|
+
<div class="pa-alert pa-alert--warning" role="alert">
|
|
30
30
|
<strong>Warning!</strong> This is a warning alert — please review before proceeding.
|
|
31
31
|
</div>
|
|
32
32
|
|
|
33
33
|
<!-- Info Alert -->
|
|
34
|
-
<div class="pa-alert pa-alert--info">
|
|
34
|
+
<div class="pa-alert pa-alert--info" role="alert">
|
|
35
35
|
<strong>Info!</strong> This is an info alert — here's some useful information.
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
<!-- Light Alert -->
|
|
39
|
-
<div class="pa-alert pa-alert--light">
|
|
39
|
+
<div class="pa-alert pa-alert--light" role="alert">
|
|
40
40
|
<strong>Light!</strong> This is a light alert — subtle but important.
|
|
41
41
|
</div>
|
|
42
42
|
|
|
43
43
|
<!-- Dark Alert -->
|
|
44
|
-
<div class="pa-alert pa-alert--dark">
|
|
44
|
+
<div class="pa-alert pa-alert--dark" role="alert">
|
|
45
45
|
<strong>Dark!</strong> This is a dark alert — for high contrast messaging.
|
|
46
46
|
</div>
|
|
47
47
|
|
|
@@ -49,7 +49,7 @@
|
|
|
49
49
|
<!-- ALERTS WITH ICONS -->
|
|
50
50
|
|
|
51
51
|
<!-- Success Alert with Icon -->
|
|
52
|
-
<div class="pa-alert pa-alert--success">
|
|
52
|
+
<div class="pa-alert pa-alert--success" role="alert">
|
|
53
53
|
<span class="pa-alert__icon">✓</span>
|
|
54
54
|
<div class="pa-alert__content">
|
|
55
55
|
<strong>Success!</strong> Your changes have been saved successfully.
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
</div>
|
|
58
58
|
|
|
59
59
|
<!-- Danger Alert with Icon -->
|
|
60
|
-
<div class="pa-alert pa-alert--danger">
|
|
60
|
+
<div class="pa-alert pa-alert--danger" role="alert">
|
|
61
61
|
<span class="pa-alert__icon">⚠</span>
|
|
62
62
|
<div class="pa-alert__content">
|
|
63
63
|
<strong>Error!</strong> Unable to process your request. Please try again.
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
</div>
|
|
66
66
|
|
|
67
67
|
<!-- Warning Alert with Icon -->
|
|
68
|
-
<div class="pa-alert pa-alert--warning">
|
|
68
|
+
<div class="pa-alert pa-alert--warning" role="alert">
|
|
69
69
|
<span class="pa-alert__icon">!</span>
|
|
70
70
|
<div class="pa-alert__content">
|
|
71
71
|
<strong>Warning!</strong> Your session will expire in 5 minutes.
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
</div>
|
|
74
74
|
|
|
75
75
|
<!-- Info Alert with Icon -->
|
|
76
|
-
<div class="pa-alert pa-alert--info">
|
|
76
|
+
<div class="pa-alert pa-alert--info" role="alert">
|
|
77
77
|
<span class="pa-alert__icon">ⓘ</span>
|
|
78
78
|
<div class="pa-alert__content">
|
|
79
79
|
<strong>Information!</strong> New features are now available in your account.
|
|
@@ -81,10 +81,17 @@
|
|
|
81
81
|
</div>
|
|
82
82
|
|
|
83
83
|
|
|
84
|
-
<!--
|
|
84
|
+
<!--
|
|
85
|
+
DISMISSIBLE ALERTS
|
|
86
|
+
--dismissible adds padding-inline-end so the text doesn't run under the
|
|
87
|
+
close button. It's a spacing modifier, not a structural one — you still
|
|
88
|
+
render __content + __close yourself, and wire dismissal via JS.
|
|
89
|
+
__close uses inset-inline-end (logical) so it lands on the reading-end
|
|
90
|
+
side in both LTR and RTL.
|
|
91
|
+
-->
|
|
85
92
|
|
|
86
93
|
<!-- Dismissible Success Alert -->
|
|
87
|
-
<div class="pa-alert pa-alert--success pa-alert--dismissible">
|
|
94
|
+
<div class="pa-alert pa-alert--success pa-alert--dismissible" role="alert">
|
|
88
95
|
<div class="pa-alert__content">
|
|
89
96
|
<strong>Well done!</strong> You successfully read this important alert message.
|
|
90
97
|
</div>
|
|
@@ -94,7 +101,7 @@
|
|
|
94
101
|
</div>
|
|
95
102
|
|
|
96
103
|
<!-- Dismissible Danger Alert -->
|
|
97
|
-
<div class="pa-alert pa-alert--danger pa-alert--dismissible">
|
|
104
|
+
<div class="pa-alert pa-alert--danger pa-alert--dismissible" role="alert">
|
|
98
105
|
<div class="pa-alert__content">
|
|
99
106
|
<strong>Oh snap!</strong> Change a few things and try submitting again.
|
|
100
107
|
</div>
|
|
@@ -104,19 +111,50 @@
|
|
|
104
111
|
</div>
|
|
105
112
|
|
|
106
113
|
|
|
107
|
-
<!-- ALERTS WITH ADDITIONAL CONTENT
|
|
114
|
+
<!-- ALERTS WITH ADDITIONAL CONTENT
|
|
115
|
+
|
|
116
|
+
When an alert has a separate title element and body content (paragraph,
|
|
117
|
+
list, actions), use .pa-alert__heading for the title — never roll your
|
|
118
|
+
own <strong> + <p> stack. The heading defaults to the alert's body
|
|
119
|
+
font-size (compact); add --lg when you want the bigger, semibold-block
|
|
120
|
+
treatment for alerts that need deliberate attention.
|
|
121
|
+
|
|
122
|
+
NB: <strong> is still right for *inline* emphasis on a single-line
|
|
123
|
+
alert ("<strong>Primary!</strong> This is a primary alert"). The
|
|
124
|
+
heading element is for the case where the title sits on its own line
|
|
125
|
+
above body content.
|
|
126
|
+
-->
|
|
127
|
+
|
|
128
|
+
<!-- Multi-line alert (compact heading — default size) -->
|
|
129
|
+
<div class="pa-alert pa-alert--danger" role="alert">
|
|
130
|
+
<h4 class="pa-alert__heading">Validation failed</h4>
|
|
131
|
+
<p class="mb-0">Please fix the errors below.</p>
|
|
132
|
+
</div>
|
|
133
|
+
|
|
134
|
+
<!-- Same pattern, dismissible -->
|
|
135
|
+
<div class="pa-alert pa-alert--danger pa-alert--dismissible" role="alert">
|
|
136
|
+
<h4 class="pa-alert__heading">Validation failed</h4>
|
|
137
|
+
<p class="mb-0">Please fix the errors below.</p>
|
|
138
|
+
<button class="pa-alert__close" onclick="dismissAlert(this)" aria-label="Close">
|
|
139
|
+
<span aria-hidden="true">×</span>
|
|
140
|
+
</button>
|
|
141
|
+
</div>
|
|
108
142
|
|
|
109
|
-
<!--
|
|
110
|
-
<div class="pa-alert pa-alert--success">
|
|
111
|
-
<h4 class="pa-alert__heading">Success!</h4>
|
|
143
|
+
<!-- Punchy heading — adds the --lg modifier for the bigger presentation -->
|
|
144
|
+
<div class="pa-alert pa-alert--success" role="alert">
|
|
145
|
+
<h4 class="pa-alert__heading pa-alert__heading--lg">Success!</h4>
|
|
112
146
|
<p>Aww yeah, you successfully read this important alert message. This example text is going to run a bit longer so that you can see how spacing within an alert works with this kind of content.</p>
|
|
113
147
|
<hr>
|
|
114
148
|
<p class="mb-0">Whenever you need to, be sure to use margin utilities to keep things nice and tidy.</p>
|
|
115
149
|
</div>
|
|
116
150
|
|
|
117
|
-
<!-- Alert with List
|
|
118
|
-
|
|
119
|
-
|
|
151
|
+
<!-- Alert with List and Actions.
|
|
152
|
+
.pa-alert__actions sits below a thin divider with symmetric
|
|
153
|
+
padding — same separator pattern as .pa-toast__actions, so a
|
|
154
|
+
"System update / Update now" alert has the same visual weight
|
|
155
|
+
as a custom-action toast. -->
|
|
156
|
+
<div class="pa-alert pa-alert--info" role="alert">
|
|
157
|
+
<h4 class="pa-alert__heading pa-alert__heading--lg">System Update</h4>
|
|
120
158
|
<p>A new version of the application is available. This update includes:</p>
|
|
121
159
|
<ul class="pa-alert__list">
|
|
122
160
|
<li>Performance improvements</li>
|
|
@@ -130,63 +168,65 @@
|
|
|
130
168
|
</div>
|
|
131
169
|
|
|
132
170
|
|
|
133
|
-
<!-- OUTLINE ALERTS -->
|
|
171
|
+
<!-- OUTLINE ALERTS — border-only, transparent background -->
|
|
134
172
|
|
|
135
173
|
<!-- Outline Primary Alert -->
|
|
136
|
-
<div class="pa-alert pa-alert--outline-primary">
|
|
174
|
+
<div class="pa-alert pa-alert--outline-primary" role="alert">
|
|
137
175
|
<strong>Primary Outline!</strong> This is a primary outline alert.
|
|
138
176
|
</div>
|
|
139
177
|
|
|
140
178
|
<!-- Outline Success Alert -->
|
|
141
|
-
<div class="pa-alert pa-alert--outline-success">
|
|
179
|
+
<div class="pa-alert pa-alert--outline-success" role="alert">
|
|
142
180
|
<strong>Success Outline!</strong> This is a success outline alert.
|
|
143
181
|
</div>
|
|
144
182
|
|
|
145
183
|
<!-- Outline Danger Alert -->
|
|
146
|
-
<div class="pa-alert pa-alert--outline-danger">
|
|
184
|
+
<div class="pa-alert pa-alert--outline-danger" role="alert">
|
|
147
185
|
<strong>Danger Outline!</strong> This is a danger outline alert.
|
|
148
186
|
</div>
|
|
149
187
|
|
|
150
188
|
<!-- Outline Warning Alert -->
|
|
151
|
-
<div class="pa-alert pa-alert--outline-warning">
|
|
189
|
+
<div class="pa-alert pa-alert--outline-warning" role="alert">
|
|
152
190
|
<strong>Warning Outline!</strong> This is a warning outline alert.
|
|
153
191
|
</div>
|
|
154
192
|
|
|
155
193
|
<!-- Outline Info Alert -->
|
|
156
|
-
<div class="pa-alert pa-alert--outline-info">
|
|
194
|
+
<div class="pa-alert pa-alert--outline-info" role="alert">
|
|
157
195
|
<strong>Info Outline!</strong> This is an info outline alert.
|
|
158
196
|
</div>
|
|
159
197
|
|
|
198
|
+
<!-- Note: no outline variants for secondary / light / dark. -->
|
|
199
|
+
|
|
160
200
|
|
|
161
201
|
<!-- THEME COLOR ALERTS (color-1 through color-9) -->
|
|
162
202
|
|
|
163
203
|
<!-- Theme Color 1 Alert (filled) -->
|
|
164
|
-
<div class="pa-alert pa-alert--color-1">
|
|
204
|
+
<div class="pa-alert pa-alert--color-1" role="alert">
|
|
165
205
|
<strong>Color 1!</strong> Theme color slot 1 alert.
|
|
166
206
|
</div>
|
|
167
207
|
|
|
168
208
|
<!-- Theme Color 1 Alert (outline) -->
|
|
169
|
-
<div class="pa-alert pa-alert--outline-color-1">
|
|
209
|
+
<div class="pa-alert pa-alert--outline-color-1" role="alert">
|
|
170
210
|
<strong>Color 1 Outline!</strong> Theme color slot 1 outline alert.
|
|
171
211
|
</div>
|
|
172
212
|
|
|
173
|
-
<!-- Pattern: pa-alert--color-{1
|
|
213
|
+
<!-- Pattern: pa-alert--color-{1..9} (filled) and pa-alert--outline-color-{1..9} (outline). -->
|
|
174
214
|
|
|
175
215
|
|
|
176
216
|
<!-- ALERT SIZES -->
|
|
177
217
|
|
|
178
218
|
<!-- Small Alert -->
|
|
179
|
-
<div class="pa-alert pa-alert--success pa-alert--sm">
|
|
219
|
+
<div class="pa-alert pa-alert--success pa-alert--sm" role="alert">
|
|
180
220
|
<span class="pa-alert__icon">✓</span> Saved
|
|
181
221
|
</div>
|
|
182
222
|
|
|
183
223
|
<!-- Default Alert -->
|
|
184
|
-
<div class="pa-alert pa-alert--info">
|
|
224
|
+
<div class="pa-alert pa-alert--info" role="alert">
|
|
185
225
|
<span class="pa-alert__icon">ⓘ</span> Default size alert with standard padding
|
|
186
226
|
</div>
|
|
187
227
|
|
|
188
228
|
<!-- Large Alert -->
|
|
189
|
-
<div class="pa-alert pa-alert--warning pa-alert--lg">
|
|
229
|
+
<div class="pa-alert pa-alert--warning pa-alert--lg" role="alert">
|
|
190
230
|
<span class="pa-alert__icon">!</span>
|
|
191
231
|
<div class="pa-alert__content">
|
|
192
232
|
<strong>Large Alert!</strong> This is a large alert with increased font size for better prominence.
|
|
@@ -194,24 +234,6 @@
|
|
|
194
234
|
</div>
|
|
195
235
|
|
|
196
236
|
|
|
197
|
-
<!-- COMPACT ALERTS -->
|
|
198
|
-
|
|
199
|
-
<!-- Small Success Alert -->
|
|
200
|
-
<div class="pa-alert pa-alert--success pa-alert--sm">
|
|
201
|
-
<span class="pa-alert__icon">✓</span> Saved
|
|
202
|
-
</div>
|
|
203
|
-
|
|
204
|
-
<!-- Small Warning Alert -->
|
|
205
|
-
<div class="pa-alert pa-alert--warning pa-alert--sm">
|
|
206
|
-
<span class="pa-alert__icon">!</span> Pending
|
|
207
|
-
</div>
|
|
208
|
-
|
|
209
|
-
<!-- Small Danger Alert -->
|
|
210
|
-
<div class="pa-alert pa-alert--danger pa-alert--sm">
|
|
211
|
-
<span class="pa-alert__icon">×</span> Failed
|
|
212
|
-
</div>
|
|
213
|
-
|
|
214
|
-
|
|
215
237
|
<!-- JAVASCRIPT FOR DISMISSIBLE ALERTS -->
|
|
216
238
|
<script>
|
|
217
239
|
function dismissAlert(button) {
|
|
@@ -231,63 +253,210 @@ function dismissAlert(button) {
|
|
|
231
253
|
|
|
232
254
|
<!--
|
|
233
255
|
ALERT CLASSES:
|
|
234
|
-
- .pa-alert: Base alert
|
|
235
|
-
|
|
236
|
-
VARIANTS (solid background):
|
|
237
|
-
- .pa-alert--primary
|
|
238
|
-
- .pa-alert--secondary
|
|
239
|
-
- .pa-alert--success
|
|
240
|
-
- .pa-alert--danger
|
|
241
|
-
|
|
242
|
-
- .pa-alert--
|
|
243
|
-
- .pa-alert--
|
|
244
|
-
- .pa-alert--
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
- .pa-alert--outline-
|
|
249
|
-
- .pa-alert--outline-
|
|
250
|
-
- .pa-alert--outline-
|
|
251
|
-
- .pa-alert--outline-
|
|
256
|
+
- .pa-alert: Base alert — flex container, $spacing-sm gap, aligned flex-start
|
|
257
|
+
|
|
258
|
+
VARIANTS (solid tint background):
|
|
259
|
+
- .pa-alert--primary accent-tinted
|
|
260
|
+
- .pa-alert--secondary muted/neutral
|
|
261
|
+
- .pa-alert--success green
|
|
262
|
+
- .pa-alert--danger red (also honours $alert-danger-text-transform —
|
|
263
|
+
some themes set this to uppercase)
|
|
264
|
+
- .pa-alert--warning yellow/orange
|
|
265
|
+
- .pa-alert--info cyan/blue
|
|
266
|
+
- .pa-alert--light subtle light
|
|
267
|
+
- .pa-alert--dark subtle dark
|
|
268
|
+
|
|
269
|
+
OUTLINE VARIANTS (transparent background, coloured border):
|
|
270
|
+
- .pa-alert--outline-primary
|
|
271
|
+
- .pa-alert--outline-success
|
|
272
|
+
- .pa-alert--outline-danger
|
|
273
|
+
- .pa-alert--outline-warning
|
|
274
|
+
- .pa-alert--outline-info
|
|
275
|
+
(No outline variants for secondary / light / dark.)
|
|
252
276
|
|
|
253
277
|
THEME COLOR VARIANTS (1-9):
|
|
254
|
-
- .pa-alert--color-{1-9}
|
|
255
|
-
- .pa-alert--outline-color-{1-9}
|
|
278
|
+
- .pa-alert--color-{1-9} filled theme colour slot
|
|
279
|
+
- .pa-alert--outline-color-{1-9} outline theme colour slot
|
|
256
280
|
|
|
257
281
|
SIZES:
|
|
258
|
-
- .pa-alert--sm
|
|
259
|
-
-
|
|
260
|
-
-
|
|
282
|
+
- .pa-alert--sm $alert-padding-sm-{v,h} (0.5rem / 1rem),
|
|
283
|
+
$alert-font-size-sm
|
|
284
|
+
($font-size-xs = 1.2rem)
|
|
285
|
+
- (default) $alert-padding-{v,h} (0.75rem / 1.25rem),
|
|
286
|
+
$font-size-sm (1.4rem)
|
|
287
|
+
- .pa-alert--lg $alert-padding-lg-{v,h} (1rem / 1.5rem),
|
|
288
|
+
$alert-font-size-lg
|
|
289
|
+
($font-size-base = 1.6rem)
|
|
290
|
+
V steps 0.5 → 0.75 → 1; H steps 1 → 1.25 → 1.5. Clean 0.25rem
|
|
291
|
+
increments. Themes can override $alert-padding-{v,h},
|
|
292
|
+
$alert-padding-{sm,lg}-{v,h}, and $alert-font-size-{sm,lg} in
|
|
293
|
+
variables/_components.scss to retune the scale.
|
|
294
|
+
(No --xs / --xl.)
|
|
261
295
|
|
|
262
296
|
MODIFIERS:
|
|
263
|
-
- .pa-alert--dismissible
|
|
297
|
+
- .pa-alert--dismissible adds padding-inline-end so __close doesn't overlap
|
|
298
|
+
content; you still render the button yourself.
|
|
299
|
+
- .pa-alert--multiline opts out of the default `align-items: center`
|
|
300
|
+
and aligns flex children to flex-start. Use when
|
|
301
|
+
you have an icon (.pa-alert__icon) next to a
|
|
302
|
+
multi-line .pa-alert__content (heading + body +
|
|
303
|
+
actions) — without it the icon would sit in the
|
|
304
|
+
vertical middle of the content stack instead of
|
|
305
|
+
at the top with the heading. Not needed for
|
|
306
|
+
structural stacks without an icon (their children
|
|
307
|
+
are flex-basis: 100% and each take their own
|
|
308
|
+
row anyway).
|
|
264
309
|
|
|
265
310
|
ELEMENTS:
|
|
266
|
-
- .pa-alert__icon
|
|
267
|
-
- .pa-alert__content
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
311
|
+
- .pa-alert__icon leading icon (flex-shrink: 0, font-size-base)
|
|
312
|
+
- .pa-alert__content content wrapper (flex: 1, min-width: 0). When you
|
|
313
|
+
have an icon AND structured content (heading,
|
|
314
|
+
paragraph, list, actions), wrap everything that
|
|
315
|
+
isn't the icon inside __content — block-flow
|
|
316
|
+
inside the wrapper handles vertical stacking.
|
|
317
|
+
Drop the wrapper when there's no icon; direct
|
|
318
|
+
children work too.
|
|
319
|
+
- .pa-alert__heading alert title on <h4>; semibold, defaults to the
|
|
320
|
+
alert's body font-size (compact look). Add
|
|
321
|
+
--lg to bump to font-size-lg for the louder,
|
|
322
|
+
deliberate-read presentation. Spacing to the
|
|
323
|
+
next element is the alert's flex gap (no
|
|
324
|
+
built-in margin-bottom).
|
|
325
|
+
- .pa-alert__list <ul> inside the alert. Spacing to siblings is
|
|
326
|
+
the alert's flex gap (no built-in margin).
|
|
327
|
+
- .pa-alert__actions button row below a thin divider (border-top +
|
|
328
|
+
$spacing-base padding-top). Same separator
|
|
329
|
+
pattern as .pa-toast__actions, so action-bearing
|
|
330
|
+
alerts and toasts feel visually consistent.
|
|
331
|
+
Always renders on its own row — sits at the
|
|
332
|
+
bottom of the alert's content stack.
|
|
333
|
+
- .pa-alert__close absolutely positioned close button on the
|
|
334
|
+
inline-end side (logical — RTL-aware).
|
|
335
|
+
|
|
336
|
+
LAYOUT NOTE:
|
|
337
|
+
The alert is `display: flex; flex-wrap: wrap` with `gap: $spacing-sm`
|
|
338
|
+
and `align-items: center` (so an icon vertically centres against
|
|
339
|
+
single-line __content). Structural children (__heading, __list,
|
|
340
|
+
__actions, top-level <p>, <hr>) are forced to `flex-basis: 100%` so
|
|
341
|
+
they each take their own row. Inline siblings (__icon, __content,
|
|
342
|
+
bare text + <strong>) stay on the flex row.
|
|
343
|
+
|
|
344
|
+
For the icon + multi-line __content case, add .pa-alert--multiline
|
|
345
|
+
so the icon stops centring against the tall content stack and
|
|
346
|
+
top-aligns with the heading instead.
|
|
347
|
+
|
|
348
|
+
MARKUP SHAPES — WITH vs WITHOUT ICON:
|
|
349
|
+
The alert has two valid shapes depending on whether you have an icon:
|
|
350
|
+
|
|
351
|
+
- WITH icon: wrap the rest of the content in .pa-alert__content.
|
|
352
|
+
.pa-alert is a flex row, the icon is one flex item, __content is
|
|
353
|
+
the other flex item (flex: 1) that takes the remaining width.
|
|
354
|
+
Without the wrapper, every word/element next to the icon would
|
|
355
|
+
become its own flex item and the layout breaks.
|
|
356
|
+
|
|
357
|
+
<div class="pa-alert pa-alert--info">
|
|
358
|
+
<span class="pa-alert__icon">ⓘ</span>
|
|
359
|
+
<div class="pa-alert__content">
|
|
360
|
+
<strong>Title</strong> Body text…
|
|
361
|
+
</div>
|
|
362
|
+
</div>
|
|
363
|
+
|
|
364
|
+
- WITHOUT icon: skip __content and put the structural children
|
|
365
|
+
directly inside .pa-alert. There's no icon to flow around, and
|
|
366
|
+
__heading / __list / __actions / top-level <p>, <hr> get
|
|
367
|
+
flex-basis: 100% so each takes its own row anyway. Wrapping them
|
|
368
|
+
in __content for "consistency" would just add an empty <div>
|
|
369
|
+
with no visual or semantic gain — and it'd actually move them
|
|
370
|
+
out of the `> p` / `> hr` selector reach, breaking the layout
|
|
371
|
+
rules.
|
|
372
|
+
|
|
373
|
+
<div class="pa-alert pa-alert--danger">
|
|
374
|
+
<h4 class="pa-alert__heading">Sync failed</h4>
|
|
375
|
+
<p class="mb-0">We couldn't reach the server.</p>
|
|
376
|
+
<div class="pa-alert__actions">…</div>
|
|
377
|
+
</div>
|
|
378
|
+
|
|
379
|
+
Same alert system, two markup shapes — pick by whether there's an
|
|
380
|
+
icon to flow around. Both are first-class.
|
|
381
|
+
|
|
382
|
+
HEADING SIZE — DEFAULT vs --lg:
|
|
383
|
+
- Default: <h4 class="pa-alert__heading">Title</h4> sits at the
|
|
384
|
+
alert's body font-size + semibold weight. Compact look,
|
|
385
|
+
good for status banners ("Validation failed", "Saved",
|
|
386
|
+
"Connection lost") and most title+paragraph cases.
|
|
387
|
+
- --lg: <h4 class="pa-alert__heading pa-alert__heading--lg">Title</h4>
|
|
388
|
+
bumps to font-size-lg for the louder, deliberate-read
|
|
389
|
+
treatment. Use for blocking errors, system updates,
|
|
390
|
+
quota warnings — alerts the user has to deal with.
|
|
391
|
+
|
|
392
|
+
INLINE STYLE (no separate title element):
|
|
393
|
+
For single-line alerts where the bold word is just inline emphasis,
|
|
394
|
+
keep using <strong> directly — no heading element involved:
|
|
395
|
+
<strong>Primary!</strong> This is a primary alert.
|
|
396
|
+
This is a different pattern from .pa-alert__heading. Don't add the
|
|
397
|
+
heading class to inline <strong>s.
|
|
398
|
+
|
|
399
|
+
AUTOMATIC BEHAVIOUR:
|
|
400
|
+
- When the alert is the first or last child of .pa-card__body, its
|
|
401
|
+
top/bottom margin collapses — no extra classes needed.
|
|
402
|
+
- <a> inside an alert inherits colour, is underlined, and drops the
|
|
403
|
+
underline on hover.
|
|
404
|
+
- <hr> inside an alert gets a subtle thin border and tighter margins
|
|
405
|
+
for in-alert dividers.
|
|
406
|
+
|
|
407
|
+
ACCESSIBILITY:
|
|
408
|
+
- Add role="alert" on dynamic or dismissible alerts so screen readers
|
|
409
|
+
announce them as they appear.
|
|
272
410
|
|
|
273
411
|
STRUCTURE PATTERNS:
|
|
274
412
|
|
|
275
|
-
Simple alert:
|
|
276
|
-
<div class="pa-alert pa-alert--success">
|
|
413
|
+
Simple inline alert (one line, inline <strong> emphasis):
|
|
414
|
+
<div class="pa-alert pa-alert--success" role="alert">
|
|
277
415
|
<strong>Success!</strong> Message here.
|
|
278
416
|
</div>
|
|
279
417
|
|
|
280
|
-
|
|
281
|
-
<div class="pa-alert pa-alert--
|
|
418
|
+
Multi-line alert with default-size heading:
|
|
419
|
+
<div class="pa-alert pa-alert--danger" role="alert">
|
|
420
|
+
<h4 class="pa-alert__heading">Validation failed</h4>
|
|
421
|
+
<p class="mb-0">Please fix the errors below.</p>
|
|
422
|
+
</div>
|
|
423
|
+
|
|
424
|
+
Multi-line alert with --lg heading (deliberate read):
|
|
425
|
+
<div class="pa-alert pa-alert--info" role="alert">
|
|
426
|
+
<h4 class="pa-alert__heading pa-alert__heading--lg">System update</h4>
|
|
427
|
+
<p class="mb-0">A new version is available.</p>
|
|
428
|
+
</div>
|
|
429
|
+
|
|
430
|
+
Alert with icon — single-line content (icon + __content centred):
|
|
431
|
+
<div class="pa-alert pa-alert--success" role="alert">
|
|
282
432
|
<span class="pa-alert__icon">✓</span>
|
|
283
433
|
<div class="pa-alert__content">
|
|
284
434
|
<strong>Success!</strong> Message here.
|
|
285
435
|
</div>
|
|
286
436
|
</div>
|
|
287
437
|
|
|
288
|
-
Alert with
|
|
289
|
-
|
|
290
|
-
|
|
438
|
+
Alert with icon — multi-line content (use --multiline so the icon
|
|
439
|
+
sticks to the top with the heading instead of centring against
|
|
440
|
+
the whole stack):
|
|
441
|
+
<div class="pa-alert pa-alert--info pa-alert--multiline" role="alert">
|
|
442
|
+
<span class="pa-alert__icon">ⓘ</span>
|
|
443
|
+
<div class="pa-alert__content">
|
|
444
|
+
<h4 class="pa-alert__heading pa-alert__heading--lg">Heads up</h4>
|
|
445
|
+
<p class="mb-0">Long body text spans multiple lines…</p>
|
|
446
|
+
</div>
|
|
447
|
+
</div>
|
|
448
|
+
|
|
449
|
+
Dismissible alert (no icon — no __content needed):
|
|
450
|
+
<div class="pa-alert pa-alert--danger pa-alert--dismissible" role="alert">
|
|
451
|
+
<strong>Oh snap!</strong> Something went wrong.
|
|
452
|
+
<button class="pa-alert__close" aria-label="Close">
|
|
453
|
+
<span aria-hidden="true">×</span>
|
|
454
|
+
</button>
|
|
455
|
+
</div>
|
|
456
|
+
|
|
457
|
+
Alert with heading, list, and actions (--lg heading for prominence):
|
|
458
|
+
<div class="pa-alert pa-alert--info" role="alert">
|
|
459
|
+
<h4 class="pa-alert__heading pa-alert__heading--lg">Title</h4>
|
|
291
460
|
<p>Description text.</p>
|
|
292
461
|
<ul class="pa-alert__list">
|
|
293
462
|
<li>Item 1</li>
|
|
@@ -297,4 +466,10 @@ Alert with list and actions:
|
|
|
297
466
|
<button class="pa-btn pa-btn--sm pa-btn--primary">Action</button>
|
|
298
467
|
</div>
|
|
299
468
|
</div>
|
|
469
|
+
|
|
470
|
+
CALLOUT vs ALERT:
|
|
471
|
+
- Alert: full background tint or outline; supports --dismissible; fits
|
|
472
|
+
dynamic feedback, notifications, message banners.
|
|
473
|
+
- Callout: documentation-style, left border only, no dismiss; use for
|
|
474
|
+
static tips/notes/warnings inside content areas.
|
|
300
475
|
-->
|