@ulu/frontend 0.6.8 → 0.6.10
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.dev.md +6 -1
- package/dist/mcp-data.json +72004 -0
- package/dist/umd/frontend.css +1 -1
- package/lib/scss/base/_root.scss +6 -6
- package/lib/scss/base/_themes.demo.html +25 -0
- package/lib/scss/components/_accordion.demo.html +89 -0
- package/lib/scss/components/_accordion.scss +1 -1
- package/lib/scss/components/_badge-stack.demo.html +54 -0
- package/lib/scss/components/_badge.demo.html +41 -0
- package/lib/scss/components/_basic-hero.demo.html +33 -0
- package/lib/scss/components/_breadcrumb.demo.html +39 -0
- package/lib/scss/components/_button-group.demo.html +19 -0
- package/lib/scss/components/_button-verbose.demo.html +23 -0
- package/lib/scss/components/_button.demo.html +24 -0
- package/lib/scss/components/_callout.demo.html +32 -0
- package/lib/scss/components/_captioned-figure.demo.html +32 -0
- package/lib/scss/components/_card-grid.demo.html +34 -0
- package/lib/scss/components/_card.demo.html +49 -0
- package/lib/scss/components/_card.scss +14 -4
- package/lib/scss/components/_counter-list.demo.html +28 -0
- package/lib/scss/components/_css-icon.demo.html +49 -0
- package/lib/scss/components/_data-grid.demo.html +47 -0
- package/lib/scss/components/_data-list.demo.html +67 -0
- package/lib/scss/components/_data-table.demo.html +91 -0
- package/lib/scss/components/_definition-list.demo.html +59 -0
- package/lib/scss/components/_flipcard.demo.html +40 -0
- package/lib/scss/components/_headline-label.demo.html +9 -0
- package/lib/scss/components/_hero.demo.html +40 -0
- package/lib/scss/components/_image-grid.demo.html +24 -0
- package/lib/scss/components/_input-group.demo.html +42 -0
- package/lib/scss/components/_list-inline.demo.html +20 -0
- package/lib/scss/components/_list-lines.demo.html +19 -0
- package/lib/scss/components/_menu-stack.demo.html +69 -0
- package/lib/scss/components/_modal.demo.html +49 -0
- package/lib/scss/components/_modal.scss +8 -8
- package/lib/scss/components/_nav-strip.demo.html +36 -0
- package/lib/scss/components/_overlay-section.demo.html +29 -0
- package/lib/scss/components/_panel.demo.html +31 -0
- package/lib/scss/components/_popover.demo.html +48 -0
- package/lib/scss/components/_progress-bar.demo.html +40 -0
- package/lib/scss/components/_progress-circle.demo.html +44 -0
- package/lib/scss/components/_pull-quote.demo.html +20 -0
- package/lib/scss/components/_rail.demo.html +41 -0
- package/lib/scss/components/_ratio-box.demo.html +15 -0
- package/lib/scss/components/_rule.demo.html +22 -0
- package/lib/scss/components/_skeleton.demo.html +39 -0
- package/lib/scss/components/_slider.demo.html +28 -0
- package/lib/scss/components/_sticky-list.demo.html +25 -0
- package/lib/scss/components/_tabs.demo.html +41 -0
- package/lib/scss/components/_tag.demo.html +20 -0
- package/lib/scss/components/_tagged.demo.html +17 -0
- package/lib/scss/components/_tile-grid.demo.html +22 -0
- package/lib/scss/components/_wysiwyg.demo.html +14 -0
- package/package.json +9 -4
package/lib/scss/base/_root.scss
CHANGED
|
@@ -10,20 +10,20 @@
|
|
|
10
10
|
|
|
11
11
|
/// Module Settings
|
|
12
12
|
/// @type Map
|
|
13
|
-
/// @prop {String} sticky-offset-top [cssvar.add("header-height", "sticky-margin")] - Total top offset for sticky positioning. Accounts for the primary header and any required breathing room.
|
|
13
|
+
/// @prop {String} sticky-offset-top [cssvar.add(cssvar.use-ulu("header-height"), cssvar.use-ulu("sticky-margin"))] - Total top offset for sticky positioning. Accounts for the primary header and any required breathing room.
|
|
14
14
|
/// @prop {Dimension} sticky-offset-bottom [0px] - Bottom offset for sticky positioning. Useful when accounting for fixed footers or mobile navigation bars.
|
|
15
15
|
/// @prop {Dimension} sticky-margin [0px] - Desired visual space between a sticky element and the bottom of the header.
|
|
16
16
|
/// @prop {Dimension} header-height [0px] - The physical rendered height of the site's fixed/sticky header.
|
|
17
|
-
/// @prop {String} fullscreen-height [cssvar.subtract(100dvh, "header-height")] - Utility height representing the visible viewport space below the header.
|
|
18
|
-
/// @prop {String} fullscreen-height-sticky [cssvar.subtract(100dvh, "sticky-offset-top", "sticky-offset-bottom")] - Utility height representing the safe scrollable area between all sticky layout boundaries.
|
|
17
|
+
/// @prop {String} fullscreen-height [cssvar.subtract(100dvh, cssvar.use-ulu("header-height"))] - Utility height representing the visible viewport space below the header.
|
|
18
|
+
/// @prop {String} fullscreen-height-sticky [cssvar.subtract(100dvh, cssvar.use-ulu("sticky-offset-top"), cssvar.use-ulu("sticky-offset-bottom"))] - Utility height representing the safe scrollable area between all sticky layout boundaries.
|
|
19
19
|
|
|
20
20
|
$config: (
|
|
21
|
-
"sticky-offset-top": cssvar.add("header-height", "sticky-margin"),
|
|
21
|
+
"sticky-offset-top": cssvar.add(cssvar.use-ulu("header-height"), cssvar.use-ulu("sticky-margin")),
|
|
22
22
|
"sticky-offset-bottom": 0px,
|
|
23
23
|
"sticky-margin": 0px,
|
|
24
24
|
"header-height": 0px,
|
|
25
|
-
"fullscreen-height": cssvar.subtract(100dvh, "header-height"),
|
|
26
|
-
"fullscreen-height-sticky": cssvar.subtract(100dvh, "sticky-offset-top", "sticky-offset-bottom")
|
|
25
|
+
"fullscreen-height": cssvar.subtract(100dvh, cssvar.use-ulu("header-height")),
|
|
26
|
+
"fullscreen-height-sticky": cssvar.subtract(100dvh, cssvar.use-ulu("sticky-offset-top"), cssvar.use-ulu("sticky-offset-bottom"))
|
|
27
27
|
) !default;
|
|
28
28
|
|
|
29
29
|
/// Change modules $config
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<!-- @ulu-demo
|
|
2
|
+
title: Theme Switching
|
|
3
|
+
description: Using the `theme-light` and `theme-dark` classes to change the visual context of a section.
|
|
4
|
+
-->
|
|
5
|
+
<div>
|
|
6
|
+
<button class="button" data-ulu-theme-toggle='{ "target": "#theme-demo-box" }'>Toggle Theme</button>
|
|
7
|
+
|
|
8
|
+
<div id="theme-demo-box" class="demo-theme-box theme-light padding">
|
|
9
|
+
<h3 class="h3">Themed Content</h3>
|
|
10
|
+
<p>This section changes its colors based on the applied theme class.</p>
|
|
11
|
+
<button class="button">Themed Button</button>
|
|
12
|
+
</div>
|
|
13
|
+
</div>
|
|
14
|
+
|
|
15
|
+
<!-- @ulu-demo
|
|
16
|
+
title: Theme Inversion
|
|
17
|
+
description: The `theme-inverse` utility automatically applies the opposite theme (e.g., dark inside light) based on the current context.
|
|
18
|
+
-->
|
|
19
|
+
<div class="demo-theme-box theme-light">
|
|
20
|
+
<h3 class="h3">Light Context</h3>
|
|
21
|
+
<div class="demo-theme-box theme-inverse padding margin-top">
|
|
22
|
+
<p>This box is automatically inverted to the dark theme because its parent is light.</p>
|
|
23
|
+
<button class="button">Inverted Button</button>
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
<!-- @ulu-demo
|
|
2
|
+
title: Basic Accordion
|
|
3
|
+
description: A standard accordion stack with plus-to-minus icons and one-at-a-time behavior.
|
|
4
|
+
-->
|
|
5
|
+
<div data-ulu-details-group='{ "onlyOneOpen": true }'>
|
|
6
|
+
<details class="accordion">
|
|
7
|
+
<summary class="accordion__summary">
|
|
8
|
+
What is your return policy?
|
|
9
|
+
<span class="accordion__icon" aria-hidden="true">
|
|
10
|
+
<span class="css-icon css-icon--plus-to-minus"></span>
|
|
11
|
+
</span>
|
|
12
|
+
</summary>
|
|
13
|
+
<div class="accordion__content">
|
|
14
|
+
<p>You can return any unused item within 30 days of purchase for a full refund.</p>
|
|
15
|
+
</div>
|
|
16
|
+
</details>
|
|
17
|
+
<details class="accordion">
|
|
18
|
+
<summary class="accordion__summary">
|
|
19
|
+
Do you offer customer support?
|
|
20
|
+
<span class="accordion__icon" aria-hidden="true">
|
|
21
|
+
<span class="css-icon css-icon--plus-to-minus"></span>
|
|
22
|
+
</span>
|
|
23
|
+
</summary>
|
|
24
|
+
<div class="accordion__content">
|
|
25
|
+
<p>Yes, our customer support team is available 24/7 via email, live chat, or phone.</p>
|
|
26
|
+
</div>
|
|
27
|
+
</details>
|
|
28
|
+
</div>
|
|
29
|
+
|
|
30
|
+
<!-- @ulu-demo
|
|
31
|
+
title: Transparent Variant
|
|
32
|
+
description: The `accordion--transparent` modifier blends the component into the background.
|
|
33
|
+
-->
|
|
34
|
+
<div data-ulu-details-group='{ "onlyOneOpen": true }'>
|
|
35
|
+
<details class="accordion accordion--transparent">
|
|
36
|
+
<summary class="accordion__summary">
|
|
37
|
+
Product Features
|
|
38
|
+
<span class="accordion__icon" aria-hidden="true">
|
|
39
|
+
<span class="css-icon css-icon--angle-right-to-down"></span>
|
|
40
|
+
</span>
|
|
41
|
+
</summary>
|
|
42
|
+
<div class="accordion__content">
|
|
43
|
+
<ul>
|
|
44
|
+
<li>Water-resistant design</li>
|
|
45
|
+
<li>24-hour battery life</li>
|
|
46
|
+
</ul>
|
|
47
|
+
</div>
|
|
48
|
+
</details>
|
|
49
|
+
<details class="accordion accordion--transparent">
|
|
50
|
+
<summary class="accordion__summary">
|
|
51
|
+
Warranty Information
|
|
52
|
+
<span class="accordion__icon" aria-hidden="true">
|
|
53
|
+
<span class="css-icon css-icon--angle-right-to-down"></span>
|
|
54
|
+
</span>
|
|
55
|
+
</summary>
|
|
56
|
+
<div class="accordion__content">
|
|
57
|
+
<p>This product comes with a one-year limited warranty covering manufacturer defects.</p>
|
|
58
|
+
</div>
|
|
59
|
+
</details>
|
|
60
|
+
</div>
|
|
61
|
+
|
|
62
|
+
<!-- @ulu-demo
|
|
63
|
+
title: Borderless Variant
|
|
64
|
+
description: The `accordion--borderless` modifier removes external borders for an inline look.
|
|
65
|
+
-->
|
|
66
|
+
<div data-ulu-details-group='{ "onlyOneOpen": true }'>
|
|
67
|
+
<details class="accordion accordion--borderless">
|
|
68
|
+
<summary class="accordion__summary">
|
|
69
|
+
Privacy Settings
|
|
70
|
+
<span class="accordion__icon" aria-hidden="true">
|
|
71
|
+
<span class="css-icon css-icon--angle-down-to-up"></span>
|
|
72
|
+
</span>
|
|
73
|
+
</summary>
|
|
74
|
+
<div class="accordion__content">
|
|
75
|
+
<p>Manage who can see your profile and activity status.</p>
|
|
76
|
+
</div>
|
|
77
|
+
</details>
|
|
78
|
+
<details class="accordion accordion--borderless">
|
|
79
|
+
<summary class="accordion__summary">
|
|
80
|
+
Cookie Policy
|
|
81
|
+
<span class="accordion__icon" aria-hidden="true">
|
|
82
|
+
<span class="css-icon css-icon--angle-down-to-up"></span>
|
|
83
|
+
</span>
|
|
84
|
+
</summary>
|
|
85
|
+
<div class="accordion__content">
|
|
86
|
+
<p>We use cookies to improve your browsing experience.</p>
|
|
87
|
+
</div>
|
|
88
|
+
</details>
|
|
89
|
+
</div>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
////
|
|
2
2
|
/// @group accordion
|
|
3
|
-
/// Outputs accordion component stylesheet, which can be used with
|
|
3
|
+
/// Outputs accordion component stylesheet, which can be used with html details element or custom disclosure components.
|
|
4
4
|
////
|
|
5
5
|
|
|
6
6
|
@use "sass:map";
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
<!-- @ulu-demo
|
|
2
|
+
title: Basic Badge Stack
|
|
3
|
+
description: Overlapping text-based badges.
|
|
4
|
+
-->
|
|
5
|
+
<ul class="badge-stack">
|
|
6
|
+
<li class="badge-stack__item">
|
|
7
|
+
<span class="badge badge--small">
|
|
8
|
+
<span class="badge__inner"><span>JD</span></span>
|
|
9
|
+
</span>
|
|
10
|
+
</li>
|
|
11
|
+
<li class="badge-stack__item">
|
|
12
|
+
<span class="badge badge--small">
|
|
13
|
+
<span class="badge__inner"><span>MS</span></span>
|
|
14
|
+
</span>
|
|
15
|
+
</li>
|
|
16
|
+
<li class="badge-stack__item">
|
|
17
|
+
<span class="badge badge--small">
|
|
18
|
+
<span class="badge__inner"><span>AJ</span></span>
|
|
19
|
+
</span>
|
|
20
|
+
</li>
|
|
21
|
+
<li class="badge-stack__item">
|
|
22
|
+
<span class="badge badge--small">
|
|
23
|
+
<span class="badge__inner"><span>+3</span></span>
|
|
24
|
+
</span>
|
|
25
|
+
</li>
|
|
26
|
+
</ul>
|
|
27
|
+
|
|
28
|
+
<!-- @ulu-demo
|
|
29
|
+
title: Clickable Image Stack
|
|
30
|
+
description: A stack of clickable user profiles with images.
|
|
31
|
+
-->
|
|
32
|
+
<ul class="badge-stack">
|
|
33
|
+
<li class="badge-stack__item">
|
|
34
|
+
<a href="#" class="badge badge--small badge--clickable">
|
|
35
|
+
<div class="badge__inner">
|
|
36
|
+
<img src="https://picsum.photos/id/64/100/100" alt="User 1">
|
|
37
|
+
</div>
|
|
38
|
+
</a>
|
|
39
|
+
</li>
|
|
40
|
+
<li class="badge-stack__item">
|
|
41
|
+
<a href="#" class="badge badge--small badge--clickable">
|
|
42
|
+
<div class="badge__inner">
|
|
43
|
+
<img src="https://picsum.photos/id/65/100/100" alt="User 2">
|
|
44
|
+
</div>
|
|
45
|
+
</a>
|
|
46
|
+
</li>
|
|
47
|
+
<li class="badge-stack__item">
|
|
48
|
+
<a href="#" class="badge badge--small badge--clickable">
|
|
49
|
+
<div class="badge__inner">
|
|
50
|
+
<img src="https://picsum.photos/id/66/100/100" alt="User 3">
|
|
51
|
+
</div>
|
|
52
|
+
</a>
|
|
53
|
+
</li>
|
|
54
|
+
</ul>
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<!-- @ulu-demo
|
|
2
|
+
title: Basic Badge
|
|
3
|
+
description: A standard badge with text.
|
|
4
|
+
-->
|
|
5
|
+
<div class="badge">
|
|
6
|
+
<div class="badge__inner">
|
|
7
|
+
<span>JS</span>
|
|
8
|
+
</div>
|
|
9
|
+
</div>
|
|
10
|
+
|
|
11
|
+
<!-- @ulu-demo
|
|
12
|
+
title: Badge Sizes
|
|
13
|
+
description: Demonstrating small, default, and large badge variants.
|
|
14
|
+
-->
|
|
15
|
+
<div style="display: flex; gap: 1rem; align-items: center;">
|
|
16
|
+
<div class="badge badge--small">
|
|
17
|
+
<div class="badge__inner">
|
|
18
|
+
<span>SM</span>
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
<div class="badge">
|
|
22
|
+
<div class="badge__inner">
|
|
23
|
+
<span>MD</span>
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
<div class="badge badge--large">
|
|
27
|
+
<div class="badge__inner">
|
|
28
|
+
<span>LG</span>
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
|
32
|
+
|
|
33
|
+
<!-- @ulu-demo
|
|
34
|
+
title: Clickable Badge with Image
|
|
35
|
+
description: A badge containing an image that scales on hover.
|
|
36
|
+
-->
|
|
37
|
+
<a href="#" class="badge">
|
|
38
|
+
<div class="badge__inner">
|
|
39
|
+
<img src="https://picsum.photos/id/64/300/300" alt="Profile Image">
|
|
40
|
+
</div>
|
|
41
|
+
</a>
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
<!-- @ulu-demo
|
|
2
|
+
title: Basic Hero
|
|
3
|
+
description: A hero section with content and media side-by-side on larger screens.
|
|
4
|
+
fullscreen: true
|
|
5
|
+
-->
|
|
6
|
+
<div class="basic-hero">
|
|
7
|
+
<div class="basic-hero__content container">
|
|
8
|
+
<div class="basic-hero__content-main">
|
|
9
|
+
<h1 class="h1">Hero Title with Supporting Text</h1>
|
|
10
|
+
<p class="type-large">This is a description that provides more context about the page or section.</p>
|
|
11
|
+
</div>
|
|
12
|
+
<div class="basic-hero__content-media">
|
|
13
|
+
<img src="https://picsum.photos/id/10/400/300" alt="Hero Media">
|
|
14
|
+
</div>
|
|
15
|
+
</div>
|
|
16
|
+
</div>
|
|
17
|
+
|
|
18
|
+
<!-- @ulu-demo
|
|
19
|
+
title: Centered Hero
|
|
20
|
+
description: A centered layout for the hero section.
|
|
21
|
+
fullscreen: true
|
|
22
|
+
-->
|
|
23
|
+
<div class="basic-hero basic-hero--center">
|
|
24
|
+
<div class="basic-hero__content container">
|
|
25
|
+
<div class="basic-hero__content-main">
|
|
26
|
+
<h1 class="h1">Centered Hero Title</h1>
|
|
27
|
+
<p class="type-large">A brief and compelling reason to explore further.</p>
|
|
28
|
+
</div>
|
|
29
|
+
<div class="basic-hero__content-media">
|
|
30
|
+
<img src="https://picsum.photos/id/20/400/300" alt="Hero Media">
|
|
31
|
+
</div>
|
|
32
|
+
</div>
|
|
33
|
+
</div>
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<!-- @ulu-demo
|
|
2
|
+
title: Standard Breadcrumb
|
|
3
|
+
description: A typical breadcrumb trail for navigation.
|
|
4
|
+
-->
|
|
5
|
+
<nav class="breadcrumb" aria-label="Breadcrumb">
|
|
6
|
+
<ol class="breadcrumb__list">
|
|
7
|
+
<li class="breadcrumb__item">
|
|
8
|
+
<a href="#" class="breadcrumb__link">Home</a>
|
|
9
|
+
<span class="breadcrumb__separator" aria-hidden="true">/</span>
|
|
10
|
+
</li>
|
|
11
|
+
<li class="breadcrumb__item">
|
|
12
|
+
<a href="#" class="breadcrumb__link">Products</a>
|
|
13
|
+
<span class="breadcrumb__separator" aria-hidden="true">/</span>
|
|
14
|
+
</li>
|
|
15
|
+
<li class="breadcrumb__item" aria-current="page">
|
|
16
|
+
<span class="breadcrumb__current">Electronic Gadgets</span>
|
|
17
|
+
</li>
|
|
18
|
+
</ol>
|
|
19
|
+
</nav>
|
|
20
|
+
|
|
21
|
+
<!-- @ulu-demo
|
|
22
|
+
title: Truncated Breadcrumb
|
|
23
|
+
description: Items automatically truncate with an ellipsis if they exceed the `item-max-width`.
|
|
24
|
+
-->
|
|
25
|
+
<nav class="breadcrumb" aria-label="Breadcrumb">
|
|
26
|
+
<ol class="breadcrumb__list">
|
|
27
|
+
<li class="breadcrumb__item">
|
|
28
|
+
<a href="#" class="breadcrumb__link">Home</a>
|
|
29
|
+
<span class="breadcrumb__separator" aria-hidden="true">/</span>
|
|
30
|
+
</li>
|
|
31
|
+
<li class="breadcrumb__item">
|
|
32
|
+
<a href="#" class="breadcrumb__link">This is an extremely long page title that will be truncated by the breadcrumb component</a>
|
|
33
|
+
<span class="breadcrumb__separator" aria-hidden="true">/</span>
|
|
34
|
+
</li>
|
|
35
|
+
<li class="breadcrumb__item" aria-current="page">
|
|
36
|
+
<span class="breadcrumb__current">Current Page</span>
|
|
37
|
+
</li>
|
|
38
|
+
</ol>
|
|
39
|
+
</nav>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<!-- @ulu-demo
|
|
2
|
+
title: Standard Button Group
|
|
3
|
+
description: A group of buttons with a standard gap between them.
|
|
4
|
+
-->
|
|
5
|
+
<div class="button-group">
|
|
6
|
+
<button class="button">Action 1</button>
|
|
7
|
+
<button class="button">Action 2</button>
|
|
8
|
+
<button class="button">Action 3</button>
|
|
9
|
+
</div>
|
|
10
|
+
|
|
11
|
+
<!-- @ulu-demo
|
|
12
|
+
title: Joined Button Group
|
|
13
|
+
description: Buttons in this group are visually connected, with rounded corners only on the outer edges.
|
|
14
|
+
-->
|
|
15
|
+
<div class="button-group button-group--joined">
|
|
16
|
+
<button class="button">Left</button>
|
|
17
|
+
<button class="button is-active">Middle</button>
|
|
18
|
+
<button class="button">Right</button>
|
|
19
|
+
</div>
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<!-- @ulu-demo
|
|
2
|
+
title: Standard Verbose Button
|
|
3
|
+
description: A button that includes a title and body text, often used for important links or pagination.
|
|
4
|
+
-->
|
|
5
|
+
<a href="#" class="button-verbose">
|
|
6
|
+
<strong class="button-verbose__title">Primary Action Title</strong>
|
|
7
|
+
<span class="button-verbose__body">Additional descriptive text that explains the consequence of this action.</span>
|
|
8
|
+
<span class="button-verbose__icon" aria-hidden="true">
|
|
9
|
+
<span class="css-icon css-icon--angle-right"></span>
|
|
10
|
+
</span>
|
|
11
|
+
</a>
|
|
12
|
+
|
|
13
|
+
<!-- @ulu-demo
|
|
14
|
+
title: Full Width Verbose Button
|
|
15
|
+
description: The `button-verbose--full-width` modifier makes the button span the entire width of its container.
|
|
16
|
+
-->
|
|
17
|
+
<a href="#" class="button-verbose button-verbose--full-width">
|
|
18
|
+
<strong class="button-verbose__title">Next Chapter</strong>
|
|
19
|
+
<span class="button-verbose__body">Continue reading about the architecture of the system.</span>
|
|
20
|
+
<span class="button-verbose__icon" aria-hidden="true">
|
|
21
|
+
<span class="css-icon css-icon--angle-right"></span>
|
|
22
|
+
</span>
|
|
23
|
+
</a>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<!-- @ulu-demo
|
|
2
|
+
title: Primary Button
|
|
3
|
+
description: The default button style for main actions.
|
|
4
|
+
wrapperClass: demo-theme-box demo-width-small
|
|
5
|
+
-->
|
|
6
|
+
<button class="button">Primary Button</button>
|
|
7
|
+
|
|
8
|
+
<!-- @ulu-demo
|
|
9
|
+
title: Secondary Button
|
|
10
|
+
description: An alternative style for less important actions.
|
|
11
|
+
-->
|
|
12
|
+
<button class="button button--secondary">Secondary Button</button>
|
|
13
|
+
|
|
14
|
+
<!-- @ulu-demo
|
|
15
|
+
title: Small Button
|
|
16
|
+
description: A smaller button variant.
|
|
17
|
+
-->
|
|
18
|
+
<button class="button button--small">Small Button</button>
|
|
19
|
+
|
|
20
|
+
<!-- @ulu-demo
|
|
21
|
+
title: Large Button
|
|
22
|
+
description: A larger button variant.
|
|
23
|
+
-->
|
|
24
|
+
<button class="button button--large">Large Button</button>
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
<!-- @ulu-demo
|
|
2
|
+
title: Basic Callout
|
|
3
|
+
description: A simple container to highlight content.
|
|
4
|
+
-->
|
|
5
|
+
<div class="callout">
|
|
6
|
+
<p>This is a default callout. It provides a subtle background to distinguish this section from the rest of the content.</p>
|
|
7
|
+
</div>
|
|
8
|
+
|
|
9
|
+
<!-- @ulu-demo
|
|
10
|
+
title: Status Callouts
|
|
11
|
+
description: Modifiers for different semantic states.
|
|
12
|
+
-->
|
|
13
|
+
<div class="callout callout--info">
|
|
14
|
+
<p><strong>Info:</strong> Use this for helpful tips or additional context.</p>
|
|
15
|
+
</div>
|
|
16
|
+
<div class="callout callout--success">
|
|
17
|
+
<p><strong>Success:</strong> Use this to confirm a positive action or state.</p>
|
|
18
|
+
</div>
|
|
19
|
+
<div class="callout callout--warning">
|
|
20
|
+
<p><strong>Warning:</strong> Use this to alert the user about potential issues.</p>
|
|
21
|
+
</div>
|
|
22
|
+
<div class="callout callout--danger">
|
|
23
|
+
<p><strong>Danger:</strong> Use this for critical errors or irreversible actions.</p>
|
|
24
|
+
</div>
|
|
25
|
+
|
|
26
|
+
<!-- @ulu-demo
|
|
27
|
+
title: Outline Callout
|
|
28
|
+
description: A variant with no background color.
|
|
29
|
+
-->
|
|
30
|
+
<div class="callout callout--outline">
|
|
31
|
+
<p>This is an outline callout. It uses a border without a background fill.</p>
|
|
32
|
+
</div>
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
<!-- @ulu-demo
|
|
2
|
+
title: Traditional Layout
|
|
3
|
+
description: A traditional figure layout with the caption appearing below the image.
|
|
4
|
+
-->
|
|
5
|
+
<figure class="captioned-figure captioned-figure--traditional">
|
|
6
|
+
<img src="https://picsum.photos/id/1018/600/400" alt="Landscape photo">
|
|
7
|
+
<figcaption class="captioned-figure__caption">
|
|
8
|
+
A beautiful landscape captured during sunset.
|
|
9
|
+
</figcaption>
|
|
10
|
+
</figure>
|
|
11
|
+
|
|
12
|
+
<!-- @ulu-demo
|
|
13
|
+
title: Bottom-Right Overlay
|
|
14
|
+
description: The caption is overlaid on the bottom-right of the image using absolute positioning.
|
|
15
|
+
-->
|
|
16
|
+
<figure class="captioned-figure captioned-figure--bottom captioned-figure--right">
|
|
17
|
+
<img src="https://picsum.photos/id/1015/600/400" alt="Landscape photo">
|
|
18
|
+
<figcaption class="captioned-figure__caption">
|
|
19
|
+
Overlay Caption
|
|
20
|
+
</figcaption>
|
|
21
|
+
</figure>
|
|
22
|
+
|
|
23
|
+
<!-- @ulu-demo
|
|
24
|
+
title: Bottom-Center Overlay
|
|
25
|
+
description: The caption is centered at the bottom of the image.
|
|
26
|
+
-->
|
|
27
|
+
<figure class="captioned-figure captioned-figure--bottom captioned-figure--center">
|
|
28
|
+
<img src="https://picsum.photos/id/1016/600/400" alt="Landscape photo">
|
|
29
|
+
<figcaption class="captioned-figure__caption">
|
|
30
|
+
Centered Overlay
|
|
31
|
+
</figcaption>
|
|
32
|
+
</figure>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<!-- @ulu-demo
|
|
2
|
+
title: Standard Card Grid
|
|
3
|
+
description: A responsive grid that automatically fills rows with cards.
|
|
4
|
+
-->
|
|
5
|
+
<div class="card-grid">
|
|
6
|
+
<article class="card">
|
|
7
|
+
<div class="card__body"><div class="card__main"><h3 class="card__title">Card 1</h3><p>Content for the first card.</p></div></div>
|
|
8
|
+
</article>
|
|
9
|
+
<article class="card">
|
|
10
|
+
<div class="card__body"><div class="card__main"><h3 class="card__title">Card 2</h3><p>Content for the second card.</p></div></div>
|
|
11
|
+
</article>
|
|
12
|
+
<article class="card">
|
|
13
|
+
<div class="card__body"><div class="card__main"><h3 class="card__title">Card 3</h3><p>Content for the third card.</p></div></div>
|
|
14
|
+
</article>
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
<!-- @ulu-demo
|
|
18
|
+
title: Compact Card Grid
|
|
19
|
+
description: A grid with smaller minimum column widths and tighter gaps.
|
|
20
|
+
-->
|
|
21
|
+
<div class="card-grid card-grid--compact">
|
|
22
|
+
<article class="card">
|
|
23
|
+
<div class="card__body"><div class="card__main"><h3 class="card__title">Compact 1</h3></div></div>
|
|
24
|
+
</article>
|
|
25
|
+
<article class="card">
|
|
26
|
+
<div class="card__body"><div class="card__main"><h3 class="card__title">Compact 2</h3></div></div>
|
|
27
|
+
</article>
|
|
28
|
+
<article class="card">
|
|
29
|
+
<div class="card__body"><div class="card__main"><h3 class="card__title">Compact 3</h3></div></div>
|
|
30
|
+
</article>
|
|
31
|
+
<article class="card">
|
|
32
|
+
<div class="card__body"><div class="card__main"><h3 class="card__title">Compact 4</h3></div></div>
|
|
33
|
+
</article>
|
|
34
|
+
</div>
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
<!-- @ulu-demo
|
|
2
|
+
title: Basic Card
|
|
3
|
+
description: A standard card with a title, body content, and a footer.
|
|
4
|
+
-->
|
|
5
|
+
<article class="card">
|
|
6
|
+
<div class="card__body">
|
|
7
|
+
<div class="card__main">
|
|
8
|
+
<h3 class="card__title">Card Title</h3>
|
|
9
|
+
<p>This is the main content of the card. It provides a brief summary or introduction to a more detailed resource.</p>
|
|
10
|
+
</div>
|
|
11
|
+
</div>
|
|
12
|
+
<div class="card__footer">
|
|
13
|
+
<a href="#" class="button button--small">Read More</a>
|
|
14
|
+
</div>
|
|
15
|
+
</article>
|
|
16
|
+
|
|
17
|
+
<!-- @ulu-demo
|
|
18
|
+
title: Card with Image
|
|
19
|
+
description: A card that includes a featured image at the top.
|
|
20
|
+
-->
|
|
21
|
+
<article class="card">
|
|
22
|
+
<div class="card__image">
|
|
23
|
+
<img src="https://picsum.photos/id/1035/600/400" alt="Card Image">
|
|
24
|
+
</div>
|
|
25
|
+
<div class="card__body">
|
|
26
|
+
<div class="card__main">
|
|
27
|
+
<h3 class="card__title">Featured Resource</h3>
|
|
28
|
+
<p>Discover interesting insights and helpful tips in our latest featured article.</p>
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
31
|
+
</article>
|
|
32
|
+
|
|
33
|
+
<!-- @ulu-demo
|
|
34
|
+
title: Clickable Card (Proxy Click)
|
|
35
|
+
description: A card where the entire area is clickable, using a proxy click pattern for accessibility.
|
|
36
|
+
-->
|
|
37
|
+
<article class="card" data-ulu-proxy-click>
|
|
38
|
+
<div class="card__image">
|
|
39
|
+
<img src="https://picsum.photos/id/1019/600/400" alt="Card Image">
|
|
40
|
+
</div>
|
|
41
|
+
<div class="card__body">
|
|
42
|
+
<div class="card__main">
|
|
43
|
+
<h3 class="card__title">
|
|
44
|
+
<a href="#" class="card__title-link" data-ulu-proxy-click-source>Entire Card is Clickable</a>
|
|
45
|
+
</h3>
|
|
46
|
+
<p>This pattern allows the whole card to act as a link while maintaining a single, accessible anchor point.</p>
|
|
47
|
+
</div>
|
|
48
|
+
</div>
|
|
49
|
+
</article>
|
|
@@ -551,21 +551,31 @@ $config: (
|
|
|
551
551
|
$prefix: selector.class("card");
|
|
552
552
|
|
|
553
553
|
grid-template-columns: get("horizontal-image-width") 1fr;
|
|
554
|
-
|
|
554
|
+
// Fix: Use minmax(0, ...) to allow the row to shrink smaller than the image's height
|
|
555
|
+
grid-template-rows: minmax(0, 1fr) auto; // Footer is native height, first row fills
|
|
555
556
|
min-height: get("horizontal-min-height");
|
|
556
557
|
max-width: get("horizontal-max-width");
|
|
557
558
|
|
|
558
559
|
// When no footer remove extra row
|
|
559
560
|
&:not(:has(> #{ $prefix }__footer)) {
|
|
560
|
-
grid-template-rows:
|
|
561
|
+
grid-template-rows: minmax(0, 1fr);
|
|
561
562
|
}
|
|
562
563
|
#{ $prefix }__image {
|
|
563
564
|
grid-column: 1 / 2;
|
|
564
565
|
grid-row: 1 / -1;
|
|
565
566
|
aspect-ratio: auto;
|
|
567
|
+
// Fix: Force the container to ignore the image's intrinsic height (height: 0)
|
|
568
|
+
// and instead stretch to fill the grid area (min-height: 100%).
|
|
569
|
+
height: 0;
|
|
570
|
+
min-height: 100%;
|
|
566
571
|
border-top-right-radius: 0;
|
|
567
572
|
border-bottom-left-radius: get("border-radius");
|
|
568
573
|
}
|
|
574
|
+
#{ $prefix }__image img,
|
|
575
|
+
#{ $prefix}__image-media {
|
|
576
|
+
// Fix: Ensure the image itself doesn't have a minimum size requirement
|
|
577
|
+
min-height: 0;
|
|
578
|
+
}
|
|
569
579
|
#{ $prefix }__body,
|
|
570
580
|
#{ $prefix }__footer {
|
|
571
581
|
grid-column: 2 / 3;
|
|
@@ -611,10 +621,10 @@ $config: (
|
|
|
611
621
|
$prefix: selector.class("card");
|
|
612
622
|
|
|
613
623
|
grid-template-columns: get("horizontal-image-width") 1fr auto;
|
|
614
|
-
|
|
624
|
+
// Fix: Use minmax(0, ...) to allow the row to shrink smaller than the image's height
|
|
625
|
+
grid-template-rows: minmax(0, 1fr);
|
|
615
626
|
#{ $prefix }__footer {
|
|
616
627
|
grid-column: 3;
|
|
617
|
-
|
|
618
628
|
}
|
|
619
629
|
}
|
|
620
630
|
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<!-- @ulu-demo
|
|
2
|
+
title: Numeric Counter List
|
|
3
|
+
description: A standard ordered list styled with custom counters.
|
|
4
|
+
-->
|
|
5
|
+
<ol class="counter-list">
|
|
6
|
+
<li>First item in the list.</li>
|
|
7
|
+
<li>Second item with more content to demonstrate how the counter stays aligned.</li>
|
|
8
|
+
<li>Third item.</li>
|
|
9
|
+
</ol>
|
|
10
|
+
|
|
11
|
+
<!-- @ulu-demo
|
|
12
|
+
title: Alphabetical Counter List
|
|
13
|
+
description: Using the `counter-list--alphabetical` modifier to use letters instead of numbers.
|
|
14
|
+
-->
|
|
15
|
+
<ol class="counter-list counter-list--alphabetical">
|
|
16
|
+
<li>Analyze the requirements.</li>
|
|
17
|
+
<li>Design the solution.</li>
|
|
18
|
+
<li>Implement the features.</li>
|
|
19
|
+
</ol>
|
|
20
|
+
|
|
21
|
+
<!-- @ulu-demo
|
|
22
|
+
title: Non-List Counter Elements
|
|
23
|
+
description: You can also use the `counter-list__item` class on non-list elements (like divs).
|
|
24
|
+
-->
|
|
25
|
+
<div class="counter-list">
|
|
26
|
+
<div class="counter-list__item">This is a div acting as a counter item.</div>
|
|
27
|
+
<div class="counter-list__item">Another div in the counter flow.</div>
|
|
28
|
+
</div>
|