sdga-ui 1.0.5 → 1.0.6

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.
@@ -10,114 +10,10 @@ import { CodeExampleComponent } from '../../shared/code-example/code-example.com
10
10
  styleUrl: './links.component.scss'
11
11
  })
12
12
  export class LinksComponent {
13
- // Basic link colors
14
- basicLinksCode = `<a href="#" class="link-primary">Primary link</a>
15
- <a href="#" class="link-secondary">Secondary link</a>
16
- <a href="#" class="link-success">Success link</a>
17
- <a href="#" class="link-danger">Danger link</a>
18
- <a href="#" class="link-warning">Warning link</a>
19
- <a href="#" class="link-info">Info link</a>`;
13
+ // Basic link variants (primary, neutral, on-color, disabled)
14
+ basicLinksCode = `<a href=\"javascript:void(0);\" class=\"link-primary link-offset-2\">Primary link</a>
15
+ <a href=\"javascript:void(0);\" class=\"link-neutral link-offset-2\">Neutral link</a>
16
+ <div class=\"p-3 bg-primary rounded-2\"><a href=\"javascript:void(0);\" class=\"link-oncolor link-offset-2\">On-color link</a></div>
17
+ <a href=\"javascript:void(0);\" class=\"link-primary disabled link-offset-2\" aria-disabled=\"true\" tabindex=\"-1\">Disabled link</a>`;
20
18
 
21
- // Underline utilities with opacity variants
22
- underlineLinksCode = `<!-- Default underline -->
23
- <a href="#" class="link-underline">Link with underline</a>
24
-
25
- <!-- Opacity variants -->
26
- <a href="#" class="link-underline-opacity-0">No underline (opacity 0)</a>
27
- <a href="#" class="link-underline-opacity-25">25% underline opacity</a>
28
- <a href="#" class="link-underline-opacity-50">50% underline opacity</a>
29
- <a href="#" class="link-underline-opacity-75">75% underline opacity</a>
30
- <a href="#" class="link-underline-opacity-100">100% underline opacity</a>`;
31
-
32
- // Hover underline effects
33
- hoverLinksCode = `<!-- Show underline on hover -->
34
- <a href="#" class="link-primary link-underline-opacity-0 link-underline-opacity-100-hover">
35
- Underline appears on hover
36
- </a>
37
-
38
- <!-- Hide underline on hover -->
39
- <a href="#" class="link-secondary link-underline-opacity-100 link-underline-opacity-0-hover">
40
- Underline disappears on hover
41
- </a>`;
42
-
43
- // Underline offset utilities
44
- offsetLinksCode = `<a href="#" class="link-offset-1">Link with offset 1</a>
45
- <a href="#" class="link-offset-2">Link with offset 2</a>
46
- <a href="#" class="link-offset-3">Link with offset 3</a>`;
47
-
48
- // Combined offset and hover
49
- offsetHoverCode = `<a href="#" class="link-offset-2 link-offset-3-hover link-underline link-underline-opacity-0 link-underline-opacity-75-hover">
50
- Link with offset that changes on hover
51
- </a>`;
52
-
53
- // Links with icons
54
- iconLinksCode = `<!-- Icon before text -->
55
- <a href="#" class="link-primary">
56
- <i class="hgi hgi-stroke hgi-link-01 me-2"></i>
57
- Link with leading icon
58
- </a>
59
-
60
- <!-- Icon after text -->
61
- <a href="#" class="link-secondary">
62
- External link
63
- <i class="hgi hgi-stroke hgi-link-external-01 ms-2"></i>
64
- </a>
65
-
66
- <!-- Icon with arrow -->
67
- <a href="#" class="link-success">
68
- <i class="hgi hgi-stroke hgi-arrow-right-01 me-2"></i>
69
- Arrow link
70
- </a>`;
71
-
72
- // Custom link styles - subtle
73
- subtleLinkCode = `<a href="#" class="custom-link-subtle">Subtle link style</a>`;
74
-
75
- subtleLinkScss = `.custom-link-subtle {
76
- color: var(--dga-neutral-600);
77
- text-decoration: none;
78
-
79
- &:hover {
80
- color: var(--dga-primary);
81
- text-decoration: underline;
82
- }
83
- }`;
84
-
85
- // Custom link styles - bold
86
- boldLinkCode = `<a href="#" class="custom-link-bold">Bold link style</a>`;
87
-
88
- boldLinkScss = `.custom-link-bold {
89
- color: var(--dga-primary);
90
- font-weight: 600;
91
- text-decoration: none;
92
-
93
- &:hover {
94
- color: var(--dga-primary-dark);
95
- text-decoration: underline;
96
- }
97
- }`;
98
-
99
- // Custom link styles - decorated
100
- decoratedLinkCode = `<a href="#" class="custom-link-decorated">Decorated link with animated underline</a>`;
101
-
102
- decoratedLinkScss = `.custom-link-decorated {
103
- color: var(--dga-secondary);
104
- text-decoration: none;
105
- position: relative;
106
- padding-bottom: 2px;
107
-
108
- &::after {
109
- content: '';
110
- position: absolute;
111
- bottom: 0;
112
- left: 0;
113
- width: 0;
114
- height: 2px;
115
- background-color: var(--dga-secondary);
116
- transition: width 0.3s ease;
117
- }
118
-
119
- &:hover::after {
120
- width: 100%;
121
- }
122
- }`;
123
19
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sdga-ui",
3
- "version": "1.0.5",
3
+ "version": "1.0.6",
4
4
  "description": "DGA UI - Government-Style Bootstrap Theme",
5
5
  "keywords": [
6
6
  "sdga",
@@ -32,9 +32,10 @@
32
32
  "format:check": "prettier --check \"**/*.{js,json,md,css,scss}\"",
33
33
  "build-css": "sass --load-path=node_modules theme/dga-ui.scss css/dga-ui.css",
34
34
  "watch-css": "sass --load-path=node_modules --watch theme/dga-ui.scss css/dga-ui.css",
35
+ "update-demo-version": "node -e \"const fs=require('fs');const pkg=JSON.parse(fs.readFileSync('package.json'));const demoPkg=JSON.parse(fs.readFileSync('demo-angular/package.json'));demoPkg.dependencies['sdga-ui']='^'+pkg.version;fs.writeFileSync('demo-angular/package.json',JSON.stringify(demoPkg,null,2)+'\\n');\"",
35
36
  "prepublishOnly": "npm run build-css",
36
37
  "preversion": "npm run build-css",
37
- "version": "git add .",
38
+ "version": "npm run update-demo-version && git add .",
38
39
  "postversion": "git push --follow-tags"
39
40
  },
40
41
  "peerDependencies": {
@@ -18,4 +18,3 @@ $card-height: null;
18
18
  $card-color: null;
19
19
  $card-bg: var(--#{$prefix}body-bg);
20
20
  $card-img-overlay-padding: $spacer;
21
- $card-group-margin: $grid-gutter-width * .5;
@@ -16,12 +16,12 @@ $pagination-border-width: 1px;
16
16
  $pagination-margin-start: calc(#{$pagination-border-width} * -1);
17
17
  $pagination-border-color: $gray-300;
18
18
 
19
- $pagination-focus-color: $link-hover-color;
19
+ $pagination-focus-color: null;
20
20
  $pagination-focus-bg: $gray-200;
21
21
  $pagination-focus-box-shadow: $input-focus-box-shadow;
22
22
  $pagination-focus-outline: 0;
23
23
 
24
- $pagination-hover-color: $link-hover-color;
24
+ $pagination-hover-color: null;
25
25
  $pagination-hover-bg: $gray-200;
26
26
  $pagination-hover-border-color: $gray-300;
27
27
 
@@ -17,15 +17,6 @@ $body-bg: $white;
17
17
  $body-color: $black;
18
18
  $body-text-align: start;
19
19
 
20
- // ============================================
21
- // LINKS
22
- // ============================================
23
-
24
- $link-color: $primary;
25
- $link-decoration: none;
26
- $link-hover-color: color.scale($primary, $lightness: -32%);
27
- $link-hover-decoration: underline;
28
-
29
20
  // ============================================
30
21
  // COMPONENTS BASE
31
22
  // ============================================
@@ -33,16 +24,7 @@ $link-hover-decoration: underline;
33
24
  $component-active-color: $white;
34
25
  $component-active-bg: $primary;
35
26
 
36
- // Border
37
- $border-width: 1px;
38
- $border-widths: (
39
- 0: 0,
40
- 1: 1px,
41
- 2: 2px,
42
- 3: 3px,
43
- 4: 4px,
44
- 5: 5px
45
- );
27
+
46
28
  // Shadow base color (using SDGA neutral-900 shade)
47
29
  $shadow-color: $gray-900;
48
30
  $border-color: $gray-500;
@@ -50,7 +32,7 @@ $border-color: $gray-500;
50
32
  // Focus
51
33
  $focus-ring-width: 0.25rem;
52
34
  $focus-ring-opacity: 0.25;
53
- $focus-ring-color: rgba($shadow-color, $focus-ring-opacity);
35
+ $focus-ring-color: shadow-rgba($focus-ring-opacity);
54
36
  $focus-ring-blur: 0;
55
37
  $focus-ring-box-shadow: 0 0 $focus-ring-blur $focus-ring-width $focus-ring-color;
56
38
 
@@ -65,27 +47,6 @@ $enable-rfs: true;
65
47
  $enable-important-utilities: true;
66
48
  $enable-ripple-effect: true !default;
67
49
 
68
- // ============================================
69
- // CONTAINER
70
- // ============================================
71
-
72
- $container-max-widths: (
73
- sm: 540px,
74
- md: 720px,
75
- lg: 960px,
76
- xl: 1140px,
77
- xxl: 1320px
78
- );
79
-
80
- $container-padding-x: 1rem;
81
-
82
- // ============================================
83
- // GRID
84
- // ============================================
85
-
86
- $grid-columns: 12;
87
- $grid-gutter-width: 1.5rem;
88
- $grid-row-columns: 6;
89
50
 
90
51
  // ============================================
91
52
  // Z-INDEX
@@ -218,17 +218,6 @@
218
218
  }
219
219
  }
220
220
  }
221
-
222
- &.alert-dismissible {
223
- padding-inline-end: $alert-padding-x;
224
- padding-inline-start: $alert-padding-x;
225
-
226
- .btn-close {
227
- position: absolute;
228
- top: 0.5rem;
229
- inset-inline-end: 0.5rem;
230
- }
231
- }
232
221
  }
233
222
  }
234
223
  // ============================================
@@ -236,7 +225,10 @@
236
225
  // ============================================
237
226
  .alert-dismissible {
238
227
  .btn-close {
228
+ padding: 0.5rem;
229
+ position: absolute;
230
+ top: 1rem;
239
231
  right: unset;
240
- inset-inline-end: 0;
232
+ inset-inline-end: 1.5rem;
241
233
  }
242
- }
234
+ }
@@ -1,95 +1,83 @@
1
1
  // Links Customizations - SDGA Custom Enhancements
2
+ // Following Bootstrap 5.3 recommended practices
2
3
 
3
4
  // ============================================
4
- // LINK COLOR VARIANTS
5
+ // LINK COLOR VARIANTS - Using Sass map and @each loop
5
6
  // ============================================
6
7
 
7
- .link-primary {
8
- color: $primary-600 !important;
9
-
10
- &:hover,
11
- &:focus {
12
- color: $primary-400 !important;
13
- text-decoration-color: $primary-400 !important;
14
- }
15
-
16
- &:active {
17
- color: $primary-300 !important;
18
- text-decoration-color: $primary-300 !important;
19
- }
20
- }
21
-
22
- .link-secondary {
23
- color: $secondary-600 !important;
24
-
25
- &:hover,
26
- &:focus {
27
- color: $secondary-400 !important;
28
- text-decoration-color: $secondary-400 !important;
29
- }
30
-
31
- &:active {
32
- color: $secondary-300 !important;
33
- text-decoration-color: $secondary-300 !important;
8
+ // Define link color variants with their shades
9
+ $link-variants: (
10
+ "primary": (
11
+ base: $primary-600,
12
+ hover: $primary-400,
13
+ active: $primary-300 ),
14
+ "secondary": (
15
+ base: $secondary-600,
16
+ hover: $secondary-400,
17
+ active: $secondary-300 ),
18
+ "success": (
19
+ base: $success-600,
20
+ hover: $success-400,
21
+ active: $success-300 ),
22
+ "danger": (
23
+ base: $danger-600,
24
+ hover: $danger-400,
25
+ active: $danger-300 ),
26
+ "warning": (
27
+ base: $warning-600,
28
+ hover: $warning-400,
29
+ active: $warning-300 ),
30
+ "info": (
31
+ base: $info-600,
32
+ hover: $info-400,
33
+ active: $info-300 ),
34
+ "neutral": (
35
+ base: $neutral-700,
36
+ hover: $neutral-500,
37
+ active: $neutral-400 ),
38
+ "lavender": (
39
+ base: $lavender-600,
40
+ hover: $lavender-500,
41
+ active: $lavender-400 ),
42
+ "oncolor": (
43
+ base: $white,
44
+ hover: rgba($white, 0.8),
45
+ active: rgba($white, 0.6) )
46
+ );
47
+
48
+ // Generate link variant classes
49
+ @each $name, $colors in $link-variants {
50
+ .link-#{$name} {
51
+ color: map-get($colors, base) !important;
52
+ text-decoration-color: map-get($colors, base) !important;
53
+
54
+ &:visited,
55
+ &:focus-visible {
56
+ color: map-get($colors, base) !important;
57
+ text-decoration-color: map-get($colors, base) !important;
58
+ }
59
+
60
+ &:hover,
61
+ &:focus {
62
+ color: map-get($colors, hover) !important;
63
+ text-decoration-color: map-get($colors, hover) !important;
64
+ }
65
+
66
+ &:active {
67
+ color: map-get($colors, active) !important;
68
+ text-decoration-color: map-get($colors, active) !important;
69
+ }
34
70
  }
35
71
  }
36
72
 
37
- .link-success {
38
- color: $success-600 !important;
39
-
40
- &:hover,
41
- &:focus {
42
- color: $success-400 !important;
43
- text-decoration-color: $success-400 !important;
44
- }
73
+ a.disabled {
74
+ color: $gray-400 !important;
75
+ text-decoration-color: $gray-400 !important;
76
+ pointer-events: none;
45
77
 
46
- &:active {
47
- color: $success-300 !important;
48
- text-decoration-color: $success-300 !important;
78
+ &.link-oncolor {
79
+ color: rgba($white, 0.3) !important;
80
+ text-decoration-color: rgba($white, 0.3) !important;
49
81
  }
50
82
  }
51
83
 
52
- .link-danger {
53
- color: $danger-600 !important;
54
-
55
- &:hover,
56
- &:focus {
57
- color: $danger-400 !important;
58
- text-decoration-color: $danger-400 !important;
59
- }
60
-
61
- &:active {
62
- color: $danger-300 !important;
63
- text-decoration-color: $danger-300 !important;
64
- }
65
- }
66
-
67
- .link-warning {
68
- color: $warning-600 !important;
69
-
70
- &:hover,
71
- &:focus {
72
- color: $warning-400 !important;
73
- text-decoration-color: $warning-400 !important;
74
- }
75
-
76
- &:active {
77
- color: $warning-300 !important;
78
- text-decoration-color: $warning-300 !important;
79
- }
80
- }
81
-
82
- .link-info {
83
- color: $info-600 !important;
84
-
85
- &:hover,
86
- &:focus {
87
- color: $info-400 !important;
88
- text-decoration-color: $info-400 !important;
89
- }
90
-
91
- &:active {
92
- color: $info-300 !important;
93
- text-decoration-color: $info-300 !important;
94
- }
95
- }
@@ -21,10 +21,11 @@
21
21
  gap: .75rem;
22
22
 
23
23
  .btn-close {
24
+ padding: 0.5rem;
24
25
  position: absolute;
25
26
  top: 1rem;
27
+ right: unset;
26
28
  inset-inline-end: 1.5rem;
27
- margin: 0;
28
29
  }
29
30
  .toast-content {
30
31
  width: 100%;
package/theme/dga-ui.scss CHANGED
@@ -15,6 +15,7 @@
15
15
  // ============================================
16
16
 
17
17
  // Import all component customizations
18
+ @import './customizations/links';
18
19
  @import './customizations/global';
19
20
  @import './customizations/buttons';
20
21
  @import './customizations/cards';
@@ -24,5 +25,3 @@
24
25
  @import './customizations/forms';
25
26
  @import './customizations/forms-switch';
26
27
  @import './customizations/tables';
27
- @import './customizations/links';
28
- @import './customizations/utilities';
File without changes
@@ -1,138 +0,0 @@
1
- // Utility Customizations - SDGA Custom Enhancements
2
-
3
- @use 'sass:color';
4
-
5
- // ============================================
6
- // COLOR UTILITIES
7
- // ============================================
8
-
9
- // Neutral color utilities
10
- .bg-neutral {
11
- background-color: $gray-600 !important;
12
- }
13
-
14
- .text-neutral {
15
- color: $gray-600 !important;
16
- }
17
-
18
- .border-neutral {
19
- border-color: $gray-600 !important;
20
- }
21
-
22
- // ============================================
23
- // SHADOW UTILITIES
24
- // ============================================
25
-
26
- .shadow-xs {
27
- box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05) !important;
28
- }
29
-
30
- .shadow-2xl {
31
- box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25) !important;
32
- }
33
-
34
- // ============================================
35
- // GRADIENT UTILITIES
36
- // ============================================
37
-
38
- .bg-gradient-primary {
39
- background: linear-gradient(135deg, $primary 0%, color.scale($primary, $lightness: -48%) 100%) !important;
40
- }
41
-
42
- .bg-gradient-secondary {
43
- background: linear-gradient(135deg, $secondary 0%, color.scale($secondary, $lightness: -48%) 100%) !important;
44
- }
45
-
46
- .bg-gradient-lavender {
47
- background: linear-gradient(135deg, $lavender-600 0%, color.scale($lavender-600, $lightness: -48%) 100%) !important;
48
- }
49
-
50
- // ============================================
51
- // LINK VARIANTS
52
- // ============================================
53
-
54
- .link-lavender {
55
- color: $lavender-600 !important;
56
-
57
- &:hover,
58
- &:focus {
59
- color: color.scale($lavender-600, $lightness: -32%) !important;
60
- }
61
- }
62
-
63
- .link-neutral {
64
- color: $gray-600 !important;
65
-
66
- &:hover,
67
- &:focus {
68
- color: color.scale($gray-600, $lightness: -32%) !important;
69
- }
70
- }
71
-
72
- // ============================================
73
- // TEXT UTILITIES
74
- // ============================================
75
-
76
- .text-muted-light {
77
- color: $gray-400 !important;
78
- }
79
-
80
- .text-muted-dark {
81
- color: $gray-600 !important;
82
- }
83
-
84
- // ============================================
85
- // RESPONSIVE SPACING
86
- // ============================================
87
-
88
- @media (min-width: 768px) {
89
- .py-md-6 {
90
- padding-top: 2rem !important;
91
- padding-bottom: 2rem !important;
92
- }
93
-
94
- .py-md-7 {
95
- padding-top: 2.5rem !important;
96
- padding-bottom: 2.5rem !important;
97
- }
98
-
99
- .py-md-8 {
100
- padding-top: 3rem !important;
101
- padding-bottom: 3rem !important;
102
- }
103
- }
104
-
105
- // ============================================
106
- // SCROLLBAR UTILITIES
107
- // ============================================
108
-
109
- .custom-scrollbar {
110
- &::-webkit-scrollbar {
111
- width: 8px;
112
- height: 8px;
113
- }
114
-
115
- &::-webkit-scrollbar-track {
116
- background: $gray-100;
117
- border-radius: $radius-sm;
118
- }
119
-
120
- &::-webkit-scrollbar-thumb {
121
- background: $gray-400;
122
- border-radius: $radius-sm;
123
-
124
- &:hover {
125
- background: $gray-500;
126
- }
127
- }
128
- }
129
-
130
- // ============================================
131
- // PRINT UTILITIES
132
- // ============================================
133
-
134
- @media print {
135
- .no-print {
136
- display: none !important;
137
- }
138
- }