@open-rlb/ng-bootstrap 3.3.41 → 3.3.43
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/assets/scss/_variables.scss +1146 -1114
- package/assets/scss/custom/components/_badge.scss +60 -31
- package/fesm2022/open-rlb-ng-bootstrap.mjs +18 -12
- package/fesm2022/open-rlb-ng-bootstrap.mjs.map +1 -1
- package/package.json +1 -1
- package/schematics/ng-add/claude-skills/rlb-components/SKILL.md +54 -11
- package/types/open-rlb-ng-bootstrap.d.ts +4 -2
package/package.json
CHANGED
|
@@ -125,9 +125,21 @@ type TextAlignment = 'left' | 'center' | 'right';
|
|
|
125
125
|
>
|
|
126
126
|
3
|
|
127
127
|
</span>
|
|
128
|
+
<span
|
|
129
|
+
rlb-badge
|
|
130
|
+
color="warning"
|
|
131
|
+
[soft]="true"
|
|
132
|
+
>
|
|
133
|
+
Pending
|
|
134
|
+
</span>
|
|
128
135
|
```
|
|
129
136
|
|
|
130
|
-
**Inputs:** `color`, `pill`, `border`, `hidden-text`, `class`, `badge-text-color`
|
|
137
|
+
**Inputs:** `color`, `pill`, `border`, `soft`, `hidden-text`, `class`, `badge-text-color`
|
|
138
|
+
|
|
139
|
+
`soft` (default `false`) swaps the solid fill for a tinted surface with emphasis text. It is
|
|
140
|
+
theme-aware (re-derives under `[data-bs-theme]`) and AA-legible in both light and dark, unlike the
|
|
141
|
+
solid variants whose fixed text colour fails on several colours. Also on the `[badge]` directive as
|
|
142
|
+
`badge-soft` — ignored for `badge-dot`, which stays solid.
|
|
131
143
|
|
|
132
144
|
---
|
|
133
145
|
|
|
@@ -205,24 +217,55 @@ type TextAlignment = 'left' | 'center' | 'right';
|
|
|
205
217
|
|
|
206
218
|
## Tabs
|
|
207
219
|
|
|
220
|
+
`rlb-tabs` holds the tab strip; `rlb-tab-content` holds the panes. Each `rlb-tab`'s `target`
|
|
221
|
+
must equal its `rlb-tab-pane`'s `id`. Seed the initially-open tab/pane with `active`. The tab
|
|
222
|
+
label is projected content, so you can put a `rlb-badge` count inside it.
|
|
223
|
+
|
|
208
224
|
```html
|
|
209
|
-
<rlb-tabs
|
|
210
|
-
view="tab"
|
|
211
|
-
[vertical]="false"
|
|
212
|
-
fill="fill"
|
|
213
|
-
>
|
|
214
|
-
<rlb-tab title="Tab 1">Content for tab 1</rlb-tab>
|
|
215
|
-
<rlb-tab title="Tab 2">Content for tab 2</rlb-tab>
|
|
225
|
+
<rlb-tabs view="tab">
|
|
216
226
|
<rlb-tab
|
|
217
|
-
|
|
227
|
+
target="home"
|
|
228
|
+
active
|
|
229
|
+
>
|
|
230
|
+
Home
|
|
231
|
+
</rlb-tab>
|
|
232
|
+
<rlb-tab target="profile">
|
|
233
|
+
Profile
|
|
234
|
+
<span
|
|
235
|
+
rlb-badge
|
|
236
|
+
color="secondary"
|
|
237
|
+
[pill]="true"
|
|
238
|
+
>
|
|
239
|
+
3
|
|
240
|
+
</span>
|
|
241
|
+
</rlb-tab>
|
|
242
|
+
<rlb-tab
|
|
243
|
+
target="messages"
|
|
218
244
|
[disabled]="true"
|
|
219
245
|
>
|
|
220
|
-
|
|
246
|
+
Messages
|
|
221
247
|
</rlb-tab>
|
|
222
248
|
</rlb-tabs>
|
|
249
|
+
|
|
250
|
+
<rlb-tab-content>
|
|
251
|
+
<rlb-tab-pane
|
|
252
|
+
id="home"
|
|
253
|
+
active
|
|
254
|
+
>
|
|
255
|
+
Home content.
|
|
256
|
+
</rlb-tab-pane>
|
|
257
|
+
<rlb-tab-pane id="profile">Profile content.</rlb-tab-pane>
|
|
258
|
+
<rlb-tab-pane id="messages">Messages content.</rlb-tab-pane>
|
|
259
|
+
</rlb-tab-content>
|
|
223
260
|
```
|
|
224
261
|
|
|
225
|
-
|
|
262
|
+
**`rlb-tabs` inputs:** `view` ('tab'|'pills'|'underline'|'none'), `vertical`, `fill` ('fill'|'justified'), `horizontal-alignment` ('center'|'end'), `id`, `class`
|
|
263
|
+
**`rlb-tab` inputs:** `target` (**required** — matches a pane `id`), `active`, `disabled`, `class`
|
|
264
|
+
**`rlb-tab-pane` inputs:** `id` (**required**), `active`, `fade`
|
|
265
|
+
|
|
266
|
+
> Switching is driven by Bootstrap's tab plugin — there is **no select/change output**, and
|
|
267
|
+
> `active` only seeds the initial tab. For router-controlled or deep-linked tabs (active state
|
|
268
|
+
> lives in the URL), drive the markup yourself with plain `nav-tabs` instead.
|
|
226
269
|
|
|
227
270
|
---
|
|
228
271
|
|
|
@@ -438,6 +438,7 @@ declare class BadgeComponent implements OnInit {
|
|
|
438
438
|
color: _angular_core.InputSignal<Color | undefined>;
|
|
439
439
|
hiddenText: _angular_core.InputSignal<string | undefined>;
|
|
440
440
|
border: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
441
|
+
soft: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
441
442
|
cssClass: _angular_core.InputSignal<string | undefined>;
|
|
442
443
|
textColor: _angular_core.InputSignal<string | undefined>;
|
|
443
444
|
template: _angular_core.Signal<TemplateRef<any>>;
|
|
@@ -446,7 +447,7 @@ declare class BadgeComponent implements OnInit {
|
|
|
446
447
|
constructor();
|
|
447
448
|
ngOnInit(): void;
|
|
448
449
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BadgeComponent, never>;
|
|
449
|
-
static ɵcmp: _angular_core.ɵɵComponentDeclaration<BadgeComponent, "span[rlb-badge], img[rlb-badge]", never, { "pill": { "alias": "pill"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "hiddenText": { "alias": "hidden-text"; "required": false; "isSignal": true; }; "border": { "alias": "border"; "required": false; "isSignal": true; }; "cssClass": { "alias": "class"; "required": false; "isSignal": true; }; "textColor": { "alias": "badge-text-color"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
450
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<BadgeComponent, "span[rlb-badge], img[rlb-badge]", never, { "pill": { "alias": "pill"; "required": false; "isSignal": true; }; "color": { "alias": "color"; "required": false; "isSignal": true; }; "hiddenText": { "alias": "hidden-text"; "required": false; "isSignal": true; }; "border": { "alias": "border"; "required": false; "isSignal": true; }; "soft": { "alias": "soft"; "required": false; "isSignal": true; }; "cssClass": { "alias": "class"; "required": false; "isSignal": true; }; "textColor": { "alias": "badge-text-color"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
|
|
450
451
|
}
|
|
451
452
|
|
|
452
453
|
declare class BadgeDirective implements AfterViewInit {
|
|
@@ -459,6 +460,7 @@ declare class BadgeDirective implements AfterViewInit {
|
|
|
459
460
|
textColor: _angular_core.InputSignal<string>;
|
|
460
461
|
hiddenText: _angular_core.InputSignal<string | undefined>;
|
|
461
462
|
dot: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
463
|
+
soft: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
462
464
|
private badgeContent;
|
|
463
465
|
private badgeElement;
|
|
464
466
|
private elementRef;
|
|
@@ -469,7 +471,7 @@ declare class BadgeDirective implements AfterViewInit {
|
|
|
469
471
|
private createBadgeElement;
|
|
470
472
|
private castToString;
|
|
471
473
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<BadgeDirective, never>;
|
|
472
|
-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BadgeDirective, "[badge]", never, { "badge": { "alias": "badge"; "required": false; "isSignal": true; }; "pill": { "alias": "badge-pill"; "required": false; "isSignal": true; }; "border": { "alias": "badge-border"; "required": false; "isSignal": true; }; "top": { "alias": "badge-top"; "required": false; "isSignal": true; }; "start": { "alias": "badge-start"; "required": false; "isSignal": true; }; "color": { "alias": "badge-color"; "required": false; "isSignal": true; }; "textColor": { "alias": "badge-text-color"; "required": false; "isSignal": true; }; "hiddenText": { "alias": "hidden-text"; "required": false; "isSignal": true; }; "dot": { "alias": "badge-dot"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
474
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<BadgeDirective, "[badge]", never, { "badge": { "alias": "badge"; "required": false; "isSignal": true; }; "pill": { "alias": "badge-pill"; "required": false; "isSignal": true; }; "border": { "alias": "badge-border"; "required": false; "isSignal": true; }; "top": { "alias": "badge-top"; "required": false; "isSignal": true; }; "start": { "alias": "badge-start"; "required": false; "isSignal": true; }; "color": { "alias": "badge-color"; "required": false; "isSignal": true; }; "textColor": { "alias": "badge-text-color"; "required": false; "isSignal": true; }; "hiddenText": { "alias": "hidden-text"; "required": false; "isSignal": true; }; "dot": { "alias": "badge-dot"; "required": false; "isSignal": true; }; "soft": { "alias": "badge-soft"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
473
475
|
}
|
|
474
476
|
|
|
475
477
|
interface BreadcrumbItem {
|