@ngstarter-ui/components 21.0.12 → 21.0.14
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/ai/component-registry.json +24 -8
- package/fesm2022/ngstarter-ui-components-button-toggle.mjs +19 -16
- package/fesm2022/ngstarter-ui-components-button-toggle.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-code-highlighter.mjs +8 -6
- package/fesm2022/ngstarter-ui-components-code-highlighter.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-drawer.mjs +2 -2
- package/fesm2022/ngstarter-ui-components-drawer.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-image-designer.mjs +1 -1
- package/fesm2022/ngstarter-ui-components-image-designer.mjs.map +1 -1
- package/fesm2022/ngstarter-ui-components-scrollbar-area.mjs +97 -9
- package/fesm2022/ngstarter-ui-components-scrollbar-area.mjs.map +1 -1
- package/package.json +1 -1
- package/types/ngstarter-ui-components-button-toggle.d.ts +23 -22
- package/types/ngstarter-ui-components-scrollbar-area.d.ts +25 -5
|
@@ -1002,6 +1002,7 @@
|
|
|
1002
1002
|
"useWhen": "Use for mode switching, view density, filters, or mutually exclusive short choices.",
|
|
1003
1003
|
"exampleTopics": [
|
|
1004
1004
|
"Basic Button Toggle",
|
|
1005
|
+
"Icon Only Button Toggle",
|
|
1005
1006
|
"Selection Mode",
|
|
1006
1007
|
"Button toggle selection mode"
|
|
1007
1008
|
],
|
|
@@ -1018,6 +1019,12 @@
|
|
|
1018
1019
|
"title": "Button toggle selection mode",
|
|
1019
1020
|
"file": "projects/docs/src/app/forms/button-toggle/_examples/button-toggle-selection-mode-example/button-toggle-selection-mode-example.html",
|
|
1020
1021
|
"source": "<div>\n <p class=\"mt-0\">Single selection:</p>\n <ngs-button-toggle-group name=\"favoriteColor\" aria-label=\"Favorite Color\">\n <ngs-button-toggle value=\"red\">Red</ngs-button-toggle>\n <ngs-button-toggle value=\"green\">Green</ngs-button-toggle>\n <ngs-button-toggle value=\"blue\">Blue</ngs-button-toggle>\n </ngs-button-toggle-group>\n</div>\n<div class=\"mt-8\">\n <p>Single selection (hidden indicator):</p>\n <ngs-button-toggle-group name=\"favoriteColorHidden\" aria-label=\"Favorite Color Hidden\" hideSelectionIndicator>\n <ngs-button-toggle value=\"red\">Red</ngs-button-toggle>\n <ngs-button-toggle value=\"green\">Green</ngs-button-toggle>\n <ngs-button-toggle value=\"blue\">Blue</ngs-button-toggle>\n </ngs-button-toggle-group>\n</div>\n<div class=\"mt-8\">\n <p>Multiple selection:</p>\n <ngs-button-toggle-group name=\"ingredients\" aria-label=\"Ingredients\" multiple>\n <ngs-button-toggle value=\"flour\">Flour</ngs-button-toggle>\n <ngs-button-toggle value=\"eggs\">Eggs</ngs-button-toggle>\n <ngs-button-toggle value=\"sugar\">Sugar</ngs-button-toggle>\n </ngs-button-toggle-group>\n</div>"
|
|
1022
|
+
},
|
|
1023
|
+
{
|
|
1024
|
+
"name": "icon-only-button-toggle-example",
|
|
1025
|
+
"title": "Icon only button toggle",
|
|
1026
|
+
"file": "projects/docs/src/app/forms/button-toggle/_examples/icon-only-button-toggle-example/icon-only-button-toggle-example.html",
|
|
1027
|
+
"source": "<ngs-button-toggle-group value=\"grid\" hideSelectionIndicator onlyIcon aria-label=\"View mode\">\n <ngs-button-toggle value=\"list\">\n <ngs-icon name=\"fluent:text-bullet-list-ltr-24-regular\" />\n <span class=\"sr-only\">List</span>\n </ngs-button-toggle>\n <ngs-button-toggle value=\"grid\">\n <ngs-icon name=\"fluent:grid-24-regular\" />\n <span class=\"sr-only\">Grid</span>\n </ngs-button-toggle>\n <ngs-button-toggle value=\"board\">\n <ngs-icon name=\"fluent:board-24-regular\" />\n <span class=\"sr-only\">Board</span>\n </ngs-button-toggle>\n</ngs-button-toggle-group>"
|
|
1021
1028
|
}
|
|
1022
1029
|
],
|
|
1023
1030
|
"previewAsset": "projects/components/button-toggle/preview.svg",
|
|
@@ -1038,6 +1045,7 @@
|
|
|
1038
1045
|
"id",
|
|
1039
1046
|
"multiple",
|
|
1040
1047
|
"name",
|
|
1048
|
+
"onlyIcon",
|
|
1041
1049
|
"value",
|
|
1042
1050
|
"vertical"
|
|
1043
1051
|
],
|
|
@@ -1047,6 +1055,10 @@
|
|
|
1047
1055
|
"cssTokens": [
|
|
1048
1056
|
"--ngs-button-height",
|
|
1049
1057
|
"--ngs-button-radius",
|
|
1058
|
+
"--ngs-button-toggle-button-font-size",
|
|
1059
|
+
"--ngs-button-toggle-button-font-weight",
|
|
1060
|
+
"--ngs-button-toggle-button-only-icon-padding",
|
|
1061
|
+
"--ngs-button-toggle-button-padding",
|
|
1050
1062
|
"--ngs-button-toggle-checked-bg-color",
|
|
1051
1063
|
"--ngs-button-toggle-checked-text-color",
|
|
1052
1064
|
"--ngs-button-toggle-group-bg",
|
|
@@ -4449,8 +4461,8 @@
|
|
|
4449
4461
|
{
|
|
4450
4462
|
"name": "close-on-backdrop-click-example",
|
|
4451
4463
|
"title": "Close on backdrop click",
|
|
4452
|
-
"file": "projects/docs/src/app/components/guided-tour/_examples/close-on-backdrop-click-example/close-on-backdrop-click-example.
|
|
4453
|
-
"source": "
|
|
4464
|
+
"file": "projects/docs/src/app/components/guided-tour/_examples/close-on-backdrop-click-example/close-on-backdrop-click-example.html",
|
|
4465
|
+
"source": "<div class=\"flex flex-col gap-4\">\n <div class=\"flex gap-4\">\n <button ngsButton=\"filled\" (click)=\"startTour()\">Start Tour (Close on Backdrop Click)</button>\n </div>\n <div class=\"flex gap-10 mt-10\">\n <div id=\"close-step1\" class=\"p-4 border rounded\">Step 1</div>\n <div id=\"close-step2\" class=\"p-4 border rounded\">Step 2</div>\n </div>\n</div>"
|
|
4454
4466
|
}
|
|
4455
4467
|
],
|
|
4456
4468
|
"previewAsset": "projects/components/guided-tour/preview.svg",
|
|
@@ -4556,9 +4568,8 @@
|
|
|
4556
4568
|
"Symbols Icons (Default)",
|
|
4557
4569
|
"Phosphor Icons",
|
|
4558
4570
|
"Circle Flags Icons",
|
|
4559
|
-
"
|
|
4560
|
-
"Circle flags"
|
|
4561
|
-
"Material symbols icons"
|
|
4571
|
+
"Material symbols icons",
|
|
4572
|
+
"Circle flags"
|
|
4562
4573
|
],
|
|
4563
4574
|
"minimalExample": "<div class=\"flex gap-4\">\n <ngs-icon name=\"circle-flags:us\"/>\n <ngs-icon name=\"circle-flags:ge\"/>\n <ngs-icon name=\"circle-flags:de\"/>\n</div>\n<div class=\"mt-8 flex gap-4 items-center\">\n <ngs-icon name=\"circle-flags:us\" class=\"size-4\"/>\n <ngs-icon name=\"circle-flags:ge\" class=\"size-10\"/>\n <ngs-icon name=\"circle-flags:de\" class=\"size-16\"/>\n</div>",
|
|
4564
4575
|
"exampleFiles": [
|
|
@@ -7353,14 +7364,19 @@
|
|
|
7353
7364
|
"exampleFiles": [],
|
|
7354
7365
|
"previewAsset": "projects/components/scrollbar-area/preview.svg",
|
|
7355
7366
|
"selectors": [
|
|
7367
|
+
"[ngsScrollContainerFixed]",
|
|
7356
7368
|
"ngs-scrollbar-area"
|
|
7357
7369
|
],
|
|
7358
7370
|
"exportedSymbols": [
|
|
7359
|
-
"ScrollbarArea"
|
|
7371
|
+
"ScrollbarArea",
|
|
7372
|
+
"ScrollContainerFixed"
|
|
7360
7373
|
],
|
|
7361
7374
|
"inputs": [
|
|
7362
7375
|
"absolute",
|
|
7363
7376
|
"autoHide",
|
|
7377
|
+
"ngsScrollContainerFixed",
|
|
7378
|
+
"ngsScrollContainerFixedBottomOffset",
|
|
7379
|
+
"ngsScrollContainerFixedMinHeight",
|
|
7364
7380
|
"scrollbarWidth"
|
|
7365
7381
|
],
|
|
7366
7382
|
"outputs": [
|
|
@@ -8246,8 +8262,8 @@
|
|
|
8246
8262
|
"Basic Snackbar",
|
|
8247
8263
|
"Snackbar With Custom Component",
|
|
8248
8264
|
"Configurable Snackbar",
|
|
8249
|
-
"Snackbar",
|
|
8250
|
-
"Snackbar
|
|
8265
|
+
"Snackbar with custom",
|
|
8266
|
+
"Snackbar"
|
|
8251
8267
|
],
|
|
8252
8268
|
"minimalExample": "<div class=\"flex items-center gap-5\">\n <ngs-form-field subscriptHiddenIfEmpty>\n <ngs-label>Message</ngs-label>\n <input ngsInput value=\"Disco party!\" #message>\n </ngs-form-field>\n <ngs-form-field subscriptHiddenIfEmpty>\n <ngs-label>Action</ngs-label>\n <input ngsInput value=\"Dance\" #action>\n </ngs-form-field>\n <button ngsButton=\"outlined\"\n (click)=\"openSnackBar(message.value, action.value)\">Show snack-bar</button>\n</div>",
|
|
8253
8269
|
"exampleFiles": [
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { contentChildren, forwardRef, input, booleanAttribute, model, output, effect, ChangeDetectionStrategy, Component, inject, ChangeDetectorRef } from '@angular/core';
|
|
3
|
-
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
4
3
|
import { Icon } from '@ngstarter-ui/components/icon';
|
|
4
|
+
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
5
|
+
import { Ripple } from '@ngstarter-ui/components/core';
|
|
5
6
|
|
|
6
|
-
let nextId = 0;
|
|
7
7
|
class ButtonToggleGroup {
|
|
8
8
|
_buttonToggles = contentChildren(forwardRef(() => ButtonToggle), { ...(ngDevMode ? { debugName: "_buttonToggles" } : /* istanbul ignore next */ {}), descendants: true });
|
|
9
9
|
appearance = input('standard', ...(ngDevMode ? [{ debugName: "appearance" }] : /* istanbul ignore next */ []));
|
|
@@ -12,6 +12,7 @@ class ButtonToggleGroup {
|
|
|
12
12
|
hideSelectionIndicator = input(false, { ...(ngDevMode ? { debugName: "hideSelectionIndicator" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
13
13
|
vertical = input(false, { ...(ngDevMode ? { debugName: "vertical" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
14
14
|
value = model(undefined, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
15
|
+
onlyIcon = input(false, { ...(ngDevMode ? { debugName: "onlyIcon" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
15
16
|
change = output();
|
|
16
17
|
_onChange = () => { };
|
|
17
18
|
_onTouched = () => { };
|
|
@@ -82,13 +83,13 @@ class ButtonToggleGroup {
|
|
|
82
83
|
this._emitChangeEvent(newValue);
|
|
83
84
|
}
|
|
84
85
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: ButtonToggleGroup, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
85
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.4", type: ButtonToggleGroup, isStandalone: true, selector: "ngs-button-toggle-group", inputs: { appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, hideSelectionIndicator: { classPropertyName: "hideSelectionIndicator", publicName: "hideSelectionIndicator", isSignal: true, isRequired: false, transformFunction: null }, vertical: { classPropertyName: "vertical", publicName: "vertical", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", change: "change" }, host: { properties: { "class.ngs-button-toggle-group-vertical": "vertical()", "attr.role": "multiple() ? \"group\" : \"radiogroup\"", "attr.aria-disabled": "disabled()" }, classAttribute: "ngs-button-toggle-group" }, providers: [
|
|
86
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.4", type: ButtonToggleGroup, isStandalone: true, selector: "ngs-button-toggle-group", inputs: { appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, multiple: { classPropertyName: "multiple", publicName: "multiple", isSignal: true, isRequired: false, transformFunction: null }, hideSelectionIndicator: { classPropertyName: "hideSelectionIndicator", publicName: "hideSelectionIndicator", isSignal: true, isRequired: false, transformFunction: null }, vertical: { classPropertyName: "vertical", publicName: "vertical", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, onlyIcon: { classPropertyName: "onlyIcon", publicName: "onlyIcon", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", change: "change" }, host: { properties: { "class.ngs-button-toggle-group-vertical": "vertical()", "attr.role": "multiple() ? \"group\" : \"radiogroup\"", "class.only-icon": "onlyIcon()", "attr.aria-disabled": "disabled()" }, classAttribute: "ngs-button-toggle-group" }, providers: [
|
|
86
87
|
{
|
|
87
88
|
provide: NG_VALUE_ACCESSOR,
|
|
88
89
|
useExisting: forwardRef(() => ButtonToggleGroup),
|
|
89
90
|
multi: true
|
|
90
91
|
}
|
|
91
|
-
], queries: [{ propertyName: "_buttonToggles", predicate: i0.forwardRef(() => ButtonToggle), descendants: true, isSignal: true }], exportAs: ["ngsButtonToggleGroup"], ngImport: i0, template: "<ng-content />\n", styles: [":host{--ngs-button-toggle-group-border-color: var(--ngs-color-surface-container-highest);--ngs-button-toggle-group-bg: var(--ngs-color-surface-container);display:inline-flex;flex-direction:row;white-space:nowrap;overflow:hidden;border-radius:var(--ngs-button-toggle-group-border-radius, var(--ngs-button-radius));background:var(--ngs-button-toggle-group-bg);height:var(--ngs-button-height)}:host
|
|
92
|
+
], queries: [{ propertyName: "_buttonToggles", predicate: i0.forwardRef(() => ButtonToggle), descendants: true, isSignal: true }], exportAs: ["ngsButtonToggleGroup"], ngImport: i0, template: "<ng-content />\n", styles: [":host{--ngs-button-toggle-group-border-color: var(--ngs-color-surface-container-highest);--ngs-button-toggle-group-bg: var(--ngs-color-surface-container);--ngs-button-toggle-text-color: var(--ngs-color-on-surface-variant);--ngs-button-toggle-hover-bg-color: var(--ngs-color-surface-container-high);--ngs-button-toggle-checked-bg-color: var(--ngs-color-surface-container-highest);--ngs-button-toggle-checked-text-color: var(--ngs-color-on-surface);--ngs-button-toggle-selection-indicator-color: var(--ngs-color-primary);--ngs-button-toggle-button-padding: 0 calc(var(--spacing, .25rem) * 4);--ngs-button-toggle-button-only-icon-padding: 0 calc(var(--spacing, .25rem) * 2.5);--ngs-button-toggle-button-font-size: .875rem;--ngs-button-toggle-button-font-weight: 500;display:inline-flex;flex-direction:row;white-space:nowrap;overflow:hidden;border-radius:var(--ngs-button-toggle-group-border-radius, var(--ngs-button-radius));background:var(--ngs-button-toggle-group-bg);height:var(--ngs-button-height)}:host ::ng-deep .ngs-button-toggle+.ngs-button-toggle{border-left:1px solid var(--ngs-button-toggle-group-border-color)}:host.ngs-button-toggle-group-vertical{flex-direction:column}:host.ngs-button-toggle-group-vertical ::ng-deep .ngs-button-toggle+.ngs-button-toggle{border-top:1px solid var(--ngs-button-toggle-group-border-color);border-left:none}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
92
93
|
}
|
|
93
94
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: ButtonToggleGroup, decorators: [{
|
|
94
95
|
type: Component,
|
|
@@ -102,16 +103,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
|
|
|
102
103
|
'class': 'ngs-button-toggle-group',
|
|
103
104
|
'[class.ngs-button-toggle-group-vertical]': 'vertical()',
|
|
104
105
|
'[attr.role]': 'multiple() ? "group" : "radiogroup"',
|
|
106
|
+
'[class.only-icon]': 'onlyIcon()',
|
|
105
107
|
'[attr.aria-disabled]': 'disabled()',
|
|
106
|
-
}, template: "<ng-content />\n", styles: [":host{--ngs-button-toggle-group-border-color: var(--ngs-color-surface-container-highest);--ngs-button-toggle-group-bg: var(--ngs-color-surface-container);display:inline-flex;flex-direction:row;white-space:nowrap;overflow:hidden;border-radius:var(--ngs-button-toggle-group-border-radius, var(--ngs-button-radius));background:var(--ngs-button-toggle-group-bg);height:var(--ngs-button-height)}:host
|
|
107
|
-
}], ctorParameters: () => [], propDecorators: { _buttonToggles: [{ type: i0.ContentChildren, args: [forwardRef(() => ButtonToggle), { ...{ descendants: true }, isSignal: true }] }], appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], hideSelectionIndicator: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideSelectionIndicator", required: false }] }], vertical: [{ type: i0.Input, args: [{ isSignal: true, alias: "vertical", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], change: [{ type: i0.Output, args: ["change"] }] } });
|
|
108
|
+
}, template: "<ng-content />\n", styles: [":host{--ngs-button-toggle-group-border-color: var(--ngs-color-surface-container-highest);--ngs-button-toggle-group-bg: var(--ngs-color-surface-container);--ngs-button-toggle-text-color: var(--ngs-color-on-surface-variant);--ngs-button-toggle-hover-bg-color: var(--ngs-color-surface-container-high);--ngs-button-toggle-checked-bg-color: var(--ngs-color-surface-container-highest);--ngs-button-toggle-checked-text-color: var(--ngs-color-on-surface);--ngs-button-toggle-selection-indicator-color: var(--ngs-color-primary);--ngs-button-toggle-button-padding: 0 calc(var(--spacing, .25rem) * 4);--ngs-button-toggle-button-only-icon-padding: 0 calc(var(--spacing, .25rem) * 2.5);--ngs-button-toggle-button-font-size: .875rem;--ngs-button-toggle-button-font-weight: 500;display:inline-flex;flex-direction:row;white-space:nowrap;overflow:hidden;border-radius:var(--ngs-button-toggle-group-border-radius, var(--ngs-button-radius));background:var(--ngs-button-toggle-group-bg);height:var(--ngs-button-height)}:host ::ng-deep .ngs-button-toggle+.ngs-button-toggle{border-left:1px solid var(--ngs-button-toggle-group-border-color)}:host.ngs-button-toggle-group-vertical{flex-direction:column}:host.ngs-button-toggle-group-vertical ::ng-deep .ngs-button-toggle+.ngs-button-toggle{border-top:1px solid var(--ngs-button-toggle-group-border-color);border-left:none}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
|
|
109
|
+
}], ctorParameters: () => [], propDecorators: { _buttonToggles: [{ type: i0.ContentChildren, args: [forwardRef(() => ButtonToggle), { ...{ descendants: true }, isSignal: true }] }], appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], multiple: [{ type: i0.Input, args: [{ isSignal: true, alias: "multiple", required: false }] }], hideSelectionIndicator: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideSelectionIndicator", required: false }] }], vertical: [{ type: i0.Input, args: [{ isSignal: true, alias: "vertical", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }, { type: i0.Output, args: ["valueChange"] }], onlyIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "onlyIcon", required: false }] }], change: [{ type: i0.Output, args: ["change"] }] } });
|
|
110
|
+
|
|
111
|
+
let nextId = 0;
|
|
108
112
|
class ButtonToggle {
|
|
109
|
-
_id = `ngs-button-toggle-${nextId++}`;
|
|
110
113
|
id = input(`ngs-button-toggle-${nextId++}`, ...(ngDevMode ? [{ debugName: "id" }] : /* istanbul ignore next */ []));
|
|
111
114
|
value = input(undefined, ...(ngDevMode ? [{ debugName: "value" }] : /* istanbul ignore next */ []));
|
|
112
115
|
name = input(undefined, ...(ngDevMode ? [{ debugName: "name" }] : /* istanbul ignore next */ []));
|
|
113
116
|
checked = input(false, { ...(ngDevMode ? { debugName: "checked" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
114
117
|
disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
118
|
+
onlyIcon = input(false, { ...(ngDevMode ? { debugName: "onlyIcon" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
115
119
|
_internalChecked = false;
|
|
116
120
|
get isChecked() {
|
|
117
121
|
return this.checked() || this._internalChecked;
|
|
@@ -149,23 +153,22 @@ class ButtonToggle {
|
|
|
149
153
|
this.change.emit({ source: this, value: this.value() });
|
|
150
154
|
}
|
|
151
155
|
}
|
|
152
|
-
_markForCheck() {
|
|
153
|
-
this._changeDetectorRef.markForCheck();
|
|
154
|
-
}
|
|
155
156
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: ButtonToggle, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
156
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: ButtonToggle, isStandalone: true, selector: "ngs-button-toggle", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { change: "change" }, host: { properties: { "class.ngs-button-toggle-checked": "isChecked", "class.ngs-button-toggle-disabled": "isDisabled", "attr.id": "id()" }, classAttribute: "ngs-button-toggle" }, ngImport: i0, template: "<button type=\"button\"\n class=\"ngs-button-toggle-button\"\n [attr.id]=\"id() + '-button'\"\n [disabled]=\"isDisabled\"\n [attr.name]=\"name()\"\n [attr.aria-pressed]=\"isChecked\"\n (click)=\"_onButtonClick()\">\n @if (_shouldShowSelectionIndicator) {\n <ngs-icon name=\"fluent:checkmark-24-regular\" class=\"ngs-button-toggle-selection-indicator size-5\"/>\n }\n <span class=\"ngs-button-toggle-label-content\">\n <ng-content />\n </span>\n</button>\n", styles: [":host{
|
|
157
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: ButtonToggle, isStandalone: true, selector: "ngs-button-toggle", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, name: { classPropertyName: "name", publicName: "name", isSignal: true, isRequired: false, transformFunction: null }, checked: { classPropertyName: "checked", publicName: "checked", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, onlyIcon: { classPropertyName: "onlyIcon", publicName: "onlyIcon", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { change: "change" }, host: { properties: { "class.ngs-button-toggle-checked": "isChecked", "class.ngs-button-toggle-disabled": "isDisabled", "class.only-icon": "onlyIcon()", "attr.id": "id()" }, classAttribute: "ngs-button-toggle" }, exportAs: ["ngsButtonToggle"], ngImport: i0, template: "<button type=\"button\"\n ngsRipple\n class=\"ngs-button-toggle-button\"\n [attr.id]=\"id() + '-button'\"\n [disabled]=\"isDisabled\"\n [attr.name]=\"name()\"\n [attr.aria-pressed]=\"isChecked\"\n (click)=\"_onButtonClick()\">\n @if (_shouldShowSelectionIndicator) {\n <ngs-icon name=\"fluent:checkmark-24-regular\" class=\"ngs-button-toggle-selection-indicator size-5\"/>\n }\n <span class=\"ngs-button-toggle-label-content\">\n <ng-content />\n </span>\n</button>\n", styles: [":host{display:inline-block;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent}:host .ngs-button-toggle-button{display:flex;align-items:center;justify-content:center;padding:var(--ngs-button-toggle-button-padding);cursor:pointer;font-size:var(--ngs-button-toggle-button-font-size);line-height:1.25rem;font-weight:var(--ngs-button-toggle-button-font-weight);border:none;background:none;color:var(--ngs-button-toggle-text-color);width:100%;height:100%;outline:none}:host .ngs-button-toggle-button:hover:not(:disabled){background:var(--ngs-button-toggle-hover-bg-color)}:host .ngs-button-toggle-button:disabled{cursor:not-allowed;color:var(--ngs-color-on-surface);background:transparent}@supports (color: color-mix(in lab,red,red)){:host .ngs-button-toggle-button:disabled{color:color-mix(in srgb,var(--ngs-color-on-surface),transparent 62%)}}:host .ngs-button-toggle-button:disabled .ngs-button-toggle-selection-indicator{color:var(--ngs-color-on-surface)}@supports (color: color-mix(in lab,red,red)){:host .ngs-button-toggle-button:disabled .ngs-button-toggle-selection-indicator{color:color-mix(in srgb,var(--ngs-color-on-surface),transparent 62%)}}:host .ngs-button-toggle-button .ngs-button-toggle-selection-indicator{display:inline-flex;align-items:center;justify-content:center;font-size:1rem;color:var(--ngs-button-toggle-selection-indicator-color);margin-right:8px;animation:ngs-button-toggle-indicator-fade-in .2s cubic-bezier(0,0,.2,1)}:host.only-icon{padding:var(--ngs-button-toggle-button-only-icon-padding)}:host:has(.ngs-button-toggle-label-content:has(ngs-icon)){padding:0 12px}:host.ngs-button-toggle-checked .ngs-button-toggle-button{background:var(--ngs-button-toggle-checked-bg-color);color:var(--ngs-button-toggle-checked-text-color)}:host.ngs-button-toggle-checked .ngs-button-toggle-button:disabled{background:var(--ngs-color-on-surface);color:var(--ngs-color-on-surface)}@supports (color: color-mix(in lab,red,red)){:host.ngs-button-toggle-checked .ngs-button-toggle-button:disabled{background:color-mix(in srgb,var(--ngs-color-on-surface),transparent 88%)}}@supports (color: color-mix(in lab,red,red)){:host.ngs-button-toggle-checked .ngs-button-toggle-button:disabled{color:color-mix(in srgb,var(--ngs-color-on-surface),transparent 62%)}}:host .ngs-button-toggle-label-content{line-height:0}:host-context(ngs-button-toggle-group.only-icon) .ngs-button-toggle-button{padding:var(--ngs-button-toggle-button-only-icon-padding)}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "component", type: Icon, selector: "ngs-icon", inputs: ["name"], exportAs: ["ngsIcon"] }, { kind: "directive", type: Ripple, selector: "[ngsRipple]", inputs: ["ngsRippleColor", "ngsRippleUnbounded", "ngsRippleCentered", "ngsRippleRadius", "ngsRippleAnimation", "ngsRippleDisabled", "ngsRippleTrigger"], outputs: ["ngsRippleCenteredChange", "ngsRippleDisabledChange", "ngsRippleTriggerChange"], exportAs: ["ngsRipple"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
157
158
|
}
|
|
158
159
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: ButtonToggle, decorators: [{
|
|
159
160
|
type: Component,
|
|
160
|
-
args: [{ selector: 'ngs-button-toggle',
|
|
161
|
+
args: [{ selector: 'ngs-button-toggle', exportAs: 'ngsButtonToggle', imports: [
|
|
162
|
+
Icon,
|
|
163
|
+
Ripple
|
|
164
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
161
165
|
'[class.ngs-button-toggle-checked]': 'isChecked',
|
|
162
166
|
'[class.ngs-button-toggle-disabled]': 'isDisabled',
|
|
167
|
+
'[class.only-icon]': 'onlyIcon()',
|
|
163
168
|
'[attr.id]': 'id()',
|
|
164
169
|
'class': 'ngs-button-toggle',
|
|
165
|
-
},
|
|
166
|
-
|
|
167
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<button type=\"button\"\n class=\"ngs-button-toggle-button\"\n [attr.id]=\"id() + '-button'\"\n [disabled]=\"isDisabled\"\n [attr.name]=\"name()\"\n [attr.aria-pressed]=\"isChecked\"\n (click)=\"_onButtonClick()\">\n @if (_shouldShowSelectionIndicator) {\n <ngs-icon name=\"fluent:checkmark-24-regular\" class=\"ngs-button-toggle-selection-indicator size-5\"/>\n }\n <span class=\"ngs-button-toggle-label-content\">\n <ng-content />\n </span>\n</button>\n", styles: [":host{--ngs-button-toggle-text-color: var(--ngs-color-on-surface-variant);--ngs-button-toggle-hover-bg-color: var(--ngs-color-surface-container-high);--ngs-button-toggle-checked-bg-color: var(--ngs-color-surface-container-highest);--ngs-button-toggle-checked-text-color: var(--ngs-color-on-surface);--ngs-button-toggle-selection-indicator-color: var(--ngs-color-primary);display:inline-block;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent}:host .ngs-button-toggle-button{display:flex;align-items:center;justify-content:center;padding:0 16px;cursor:pointer;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.2s;font-size:.875rem;line-height:1.25rem;font-weight:500;border:none;background:none;color:var(--ngs-button-toggle-text-color);width:100%;height:100%;outline:none}:host .ngs-button-toggle-button:hover:not(:disabled){background:var(--ngs-button-toggle-hover-bg-color)}:host .ngs-button-toggle-button:disabled{cursor:not-allowed;color:var(--ngs-color-on-surface);background:transparent}@supports (color: color-mix(in lab,red,red)){:host .ngs-button-toggle-button:disabled{color:color-mix(in srgb,var(--ngs-color-on-surface),transparent 62%)}}:host .ngs-button-toggle-button:disabled .ngs-button-toggle-selection-indicator{color:var(--ngs-color-on-surface)}@supports (color: color-mix(in lab,red,red)){:host .ngs-button-toggle-button:disabled .ngs-button-toggle-selection-indicator{color:color-mix(in srgb,var(--ngs-color-on-surface),transparent 62%)}}:host .ngs-button-toggle-button .ngs-button-toggle-selection-indicator{display:inline-flex;align-items:center;justify-content:center;font-size:1rem;color:var(--ngs-button-toggle-selection-indicator-color);margin-right:8px;animation:ngs-button-toggle-indicator-fade-in .2s cubic-bezier(0,0,.2,1)}:host.ngs-button-toggle-checked .ngs-button-toggle-button{background:var(--ngs-button-toggle-checked-bg-color);color:var(--ngs-button-toggle-checked-text-color)}:host.ngs-button-toggle-checked .ngs-button-toggle-button:disabled{background:var(--ngs-color-on-surface);color:var(--ngs-color-on-surface)}@supports (color: color-mix(in lab,red,red)){:host.ngs-button-toggle-checked .ngs-button-toggle-button:disabled{background:color-mix(in srgb,var(--ngs-color-on-surface),transparent 88%)}}@supports (color: color-mix(in lab,red,red)){:host.ngs-button-toggle-checked .ngs-button-toggle-button:disabled{color:color-mix(in srgb,var(--ngs-color-on-surface),transparent 62%)}}:host .ngs-button-toggle-label-content{line-height:1}@keyframes ngs-button-toggle-indicator-fade-in{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
|
|
168
|
-
}], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], checked: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], change: [{ type: i0.Output, args: ["change"] }] } });
|
|
170
|
+
}, template: "<button type=\"button\"\n ngsRipple\n class=\"ngs-button-toggle-button\"\n [attr.id]=\"id() + '-button'\"\n [disabled]=\"isDisabled\"\n [attr.name]=\"name()\"\n [attr.aria-pressed]=\"isChecked\"\n (click)=\"_onButtonClick()\">\n @if (_shouldShowSelectionIndicator) {\n <ngs-icon name=\"fluent:checkmark-24-regular\" class=\"ngs-button-toggle-selection-indicator size-5\"/>\n }\n <span class=\"ngs-button-toggle-label-content\">\n <ng-content />\n </span>\n</button>\n", styles: [":host{display:inline-block;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent}:host .ngs-button-toggle-button{display:flex;align-items:center;justify-content:center;padding:var(--ngs-button-toggle-button-padding);cursor:pointer;font-size:var(--ngs-button-toggle-button-font-size);line-height:1.25rem;font-weight:var(--ngs-button-toggle-button-font-weight);border:none;background:none;color:var(--ngs-button-toggle-text-color);width:100%;height:100%;outline:none}:host .ngs-button-toggle-button:hover:not(:disabled){background:var(--ngs-button-toggle-hover-bg-color)}:host .ngs-button-toggle-button:disabled{cursor:not-allowed;color:var(--ngs-color-on-surface);background:transparent}@supports (color: color-mix(in lab,red,red)){:host .ngs-button-toggle-button:disabled{color:color-mix(in srgb,var(--ngs-color-on-surface),transparent 62%)}}:host .ngs-button-toggle-button:disabled .ngs-button-toggle-selection-indicator{color:var(--ngs-color-on-surface)}@supports (color: color-mix(in lab,red,red)){:host .ngs-button-toggle-button:disabled .ngs-button-toggle-selection-indicator{color:color-mix(in srgb,var(--ngs-color-on-surface),transparent 62%)}}:host .ngs-button-toggle-button .ngs-button-toggle-selection-indicator{display:inline-flex;align-items:center;justify-content:center;font-size:1rem;color:var(--ngs-button-toggle-selection-indicator-color);margin-right:8px;animation:ngs-button-toggle-indicator-fade-in .2s cubic-bezier(0,0,.2,1)}:host.only-icon{padding:var(--ngs-button-toggle-button-only-icon-padding)}:host:has(.ngs-button-toggle-label-content:has(ngs-icon)){padding:0 12px}:host.ngs-button-toggle-checked .ngs-button-toggle-button{background:var(--ngs-button-toggle-checked-bg-color);color:var(--ngs-button-toggle-checked-text-color)}:host.ngs-button-toggle-checked .ngs-button-toggle-button:disabled{background:var(--ngs-color-on-surface);color:var(--ngs-color-on-surface)}@supports (color: color-mix(in lab,red,red)){:host.ngs-button-toggle-checked .ngs-button-toggle-button:disabled{background:color-mix(in srgb,var(--ngs-color-on-surface),transparent 88%)}}@supports (color: color-mix(in lab,red,red)){:host.ngs-button-toggle-checked .ngs-button-toggle-button:disabled{color:color-mix(in srgb,var(--ngs-color-on-surface),transparent 62%)}}:host .ngs-button-toggle-label-content{line-height:0}:host-context(ngs-button-toggle-group.only-icon) .ngs-button-toggle-button{padding:var(--ngs-button-toggle-button-only-icon-padding)}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
|
|
171
|
+
}], propDecorators: { id: [{ type: i0.Input, args: [{ isSignal: true, alias: "id", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: false }] }], checked: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], onlyIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "onlyIcon", required: false }] }], change: [{ type: i0.Output, args: ["change"] }] } });
|
|
169
172
|
|
|
170
173
|
/**
|
|
171
174
|
* Generated bundle index. Do not edit.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngstarter-ui-components-button-toggle.mjs","sources":["../../../projects/components/button-toggle/src/button-toggle/button-toggle.ts","../../../projects/components/button-toggle/src/button-toggle-group/button-toggle-group.html","../../../projects/components/button-toggle/src/button-toggle/button-toggle.html","../../../projects/components/button-toggle/ngstarter-ui-components-button-toggle.ts"],"sourcesContent":["import {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n forwardRef,\n inject,\n input,\n OnInit,\n booleanAttribute,\n output,\n model,\n contentChildren,\n effect\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { Icon } from '@ngstarter-ui/components/icon';\n\nlet nextId = 0;\n\nexport type ButtonToggleAppearance = 'standard' | 'legacy';\n\n@Component({\n selector: 'ngs-button-toggle-group',\n exportAs: 'ngsButtonToggleGroup',\n templateUrl: '../button-toggle-group/button-toggle-group.html',\n styleUrl: '../button-toggle-group/button-toggle-group.scss',\n standalone: true,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ButtonToggleGroup),\n multi: true\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-button-toggle-group',\n '[class.ngs-button-toggle-group-vertical]': 'vertical()',\n '[attr.role]': 'multiple() ? \"group\" : \"radiogroup\"',\n '[attr.aria-disabled]': 'disabled()',\n },\n})\nexport class ButtonToggleGroup implements ControlValueAccessor, AfterContentInit {\n readonly _buttonToggles = contentChildren(forwardRef(() => ButtonToggle), { descendants: true });\n\n appearance = input<ButtonToggleAppearance>('standard');\n disabled = input(false, { transform: booleanAttribute });\n multiple = input(false, { transform: booleanAttribute });\n hideSelectionIndicator = input(false, { transform: booleanAttribute });\n vertical = input(false, { transform: booleanAttribute });\n value = model<any>(undefined);\n\n readonly change = output<any>();\n\n _onChange: (value: any) => void = () => {};\n _onTouched: () => void = () => {};\n\n constructor() {\n effect(() => {\n this.value();\n this._buttonToggles();\n this._updateSelectedButtonsFromValue();\n });\n }\n\n ngAfterContentInit() {\n this._updateSelectedButtonsFromValue();\n }\n\n writeValue(value: any): void {\n this.value.set(value);\n }\n\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n // Note: If we want to support setDisabledState with input signals,\n // we might need a separate internal signal or just accept that it won't work well with reactive inputs\n // but typically CVA's setDisabledState is for the form control to disable the component.\n // For now, let's use a private signal if we need to combine them.\n }\n\n _emitChangeEvent(value: any): void {\n this._onChange(value);\n this.change.emit({ source: this, value });\n }\n\n private _updateSelectedButtonsFromValue() {\n const _buttonToggles = this._buttonToggles();\n if (_buttonToggles) {\n _buttonToggles.forEach(toggle => {\n toggle._setChecked(this._isSelected(toggle.value()));\n });\n }\n }\n\n private _isSelected(val: any): boolean {\n if (this.multiple()) {\n return Array.isArray(this.value()) && this.value().includes(val);\n }\n return this.value() === val;\n }\n\n _onButtonClick(toggle: ButtonToggle) {\n if (this.disabled() || toggle.disabled()) {\n return;\n }\n\n if (this.multiple()) {\n const currentValue = Array.isArray(this.value()) ? [...this.value()] : [];\n const index = currentValue.indexOf(toggle.value());\n\n if (index !== -1) {\n currentValue.splice(index, 1);\n } else {\n currentValue.push(toggle.value());\n }\n this._updateValue(currentValue);\n } else {\n this._updateValue(toggle.value());\n }\n }\n\n private _updateValue(newValue: any) {\n this.value.set(newValue);\n this._emitChangeEvent(newValue);\n }\n}\n\n@Component({\n selector: 'ngs-button-toggle',\n templateUrl: './button-toggle.html',\n styleUrl: './button-toggle.scss',\n host: {\n '[class.ngs-button-toggle-checked]': 'isChecked',\n '[class.ngs-button-toggle-disabled]': 'isDisabled',\n '[attr.id]': 'id()',\n 'class': 'ngs-button-toggle',\n },\n standalone: true,\n imports: [\n Icon\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ButtonToggle implements OnInit {\n private _id = `ngs-button-toggle-${nextId++}`;\n\n id = input<string>(`ngs-button-toggle-${nextId++}`);\n value = input<any>(undefined);\n name = input<string | undefined>(undefined);\n checked = input(false, { transform: booleanAttribute });\n disabled = input(false, { transform: booleanAttribute });\n private _internalChecked = false;\n get isChecked(): boolean {\n return this.checked() || this._internalChecked;\n }\n _setChecked(value: boolean) {\n this._internalChecked = value;\n this._changeDetectorRef.markForCheck();\n }\n\n readonly change = output<any>();\n\n public buttonToggleGroup = inject(forwardRef(() => ButtonToggleGroup), { optional: true });\n private _changeDetectorRef = inject(ChangeDetectorRef);\n\n get isDisabled(): boolean {\n return this.disabled() || (this.buttonToggleGroup && this.buttonToggleGroup.disabled());\n }\n\n get _shouldShowSelectionIndicator(): boolean {\n if (!this.isChecked) {\n return false;\n }\n\n if (!this.buttonToggleGroup) {\n return false;\n }\n\n return !this.buttonToggleGroup.hideSelectionIndicator();\n }\n\n ngOnInit() {\n if (this.buttonToggleGroup && this.buttonToggleGroup.value() === this.value()) {\n this._setChecked(true);\n }\n }\n\n _onButtonClick() {\n if (this.buttonToggleGroup) {\n this.buttonToggleGroup._onButtonClick(this);\n } else {\n this._setChecked(!this.isChecked);\n this.change.emit({ source: this, value: this.value() });\n }\n }\n\n _markForCheck() {\n this._changeDetectorRef.markForCheck();\n }\n}\n","<ng-content />\n","<button type=\"button\"\n class=\"ngs-button-toggle-button\"\n [attr.id]=\"id() + '-button'\"\n [disabled]=\"isDisabled\"\n [attr.name]=\"name()\"\n [attr.aria-pressed]=\"isChecked\"\n (click)=\"_onButtonClick()\">\n @if (_shouldShowSelectionIndicator) {\n <ngs-icon name=\"fluent:checkmark-24-regular\" class=\"ngs-button-toggle-selection-indicator size-5\"/>\n }\n <span class=\"ngs-button-toggle-label-content\">\n <ng-content />\n </span>\n</button>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngstarter-ui-components-button-toggle.mjs","sources":["../../../projects/components/button-toggle/src/button-toggle-group/button-toggle-group.ts","../../../projects/components/button-toggle/src/button-toggle-group/button-toggle-group.html","../../../projects/components/button-toggle/src/button-toggle/button-toggle.ts","../../../projects/components/button-toggle/src/button-toggle/button-toggle.html","../../../projects/components/button-toggle/ngstarter-ui-components-button-toggle.ts"],"sourcesContent":["import {\n AfterContentInit,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n contentChildren,\n effect,\n forwardRef,\n input,\n model,\n output\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { ButtonToggle } from '../button-toggle/button-toggle';\n\nexport type ButtonToggleAppearance = 'standard' | 'legacy';\n\n@Component({\n selector: 'ngs-button-toggle-group',\n exportAs: 'ngsButtonToggleGroup',\n templateUrl: './button-toggle-group.html',\n styleUrl: './button-toggle-group.scss',\n standalone: true,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => ButtonToggleGroup),\n multi: true\n }\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-button-toggle-group',\n '[class.ngs-button-toggle-group-vertical]': 'vertical()',\n '[attr.role]': 'multiple() ? \"group\" : \"radiogroup\"',\n '[class.only-icon]': 'onlyIcon()',\n '[attr.aria-disabled]': 'disabled()',\n },\n})\nexport class ButtonToggleGroup implements ControlValueAccessor, AfterContentInit {\n readonly _buttonToggles = contentChildren(forwardRef(() => ButtonToggle), { descendants: true });\n\n appearance = input<ButtonToggleAppearance>('standard');\n disabled = input(false, { transform: booleanAttribute });\n multiple = input(false, { transform: booleanAttribute });\n hideSelectionIndicator = input(false, { transform: booleanAttribute });\n vertical = input(false, { transform: booleanAttribute });\n value = model<any>(undefined);\n onlyIcon = input(false, { transform: booleanAttribute });\n\n readonly change = output<any>();\n\n _onChange: (value: any) => void = () => {};\n _onTouched: () => void = () => {};\n\n constructor() {\n effect(() => {\n this.value();\n this._buttonToggles();\n this._updateSelectedButtonsFromValue();\n });\n }\n\n ngAfterContentInit() {\n this._updateSelectedButtonsFromValue();\n }\n\n writeValue(value: any): void {\n this.value.set(value);\n }\n\n registerOnChange(fn: any): void {\n this._onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this._onTouched = fn;\n }\n\n setDisabledState?(isDisabled: boolean): void {\n // Note: If we want to support setDisabledState with input signals,\n // we might need a separate internal signal or just accept that it won't work well with reactive inputs\n // but typically CVA's setDisabledState is for the form control to disable the component.\n // For now, let's use a private signal if we need to combine them.\n }\n\n _emitChangeEvent(value: any): void {\n this._onChange(value);\n this.change.emit({ source: this, value });\n }\n\n private _updateSelectedButtonsFromValue() {\n const _buttonToggles = this._buttonToggles();\n if (_buttonToggles) {\n _buttonToggles.forEach(toggle => {\n toggle._setChecked(this._isSelected(toggle.value()));\n });\n }\n }\n\n private _isSelected(val: any): boolean {\n if (this.multiple()) {\n return Array.isArray(this.value()) && this.value().includes(val);\n }\n return this.value() === val;\n }\n\n _onButtonClick(toggle: ButtonToggle) {\n if (this.disabled() || toggle.disabled()) {\n return;\n }\n\n if (this.multiple()) {\n const currentValue = Array.isArray(this.value()) ? [...this.value()] : [];\n const index = currentValue.indexOf(toggle.value());\n\n if (index !== -1) {\n currentValue.splice(index, 1);\n } else {\n currentValue.push(toggle.value());\n }\n this._updateValue(currentValue);\n } else {\n this._updateValue(toggle.value());\n }\n }\n\n private _updateValue(newValue: any) {\n this.value.set(newValue);\n this._emitChangeEvent(newValue);\n }\n}\n","<ng-content />\n","import {\n booleanAttribute,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n forwardRef,\n inject,\n input,\n OnInit,\n output,\n} from '@angular/core';\nimport { Icon } from '@ngstarter-ui/components/icon';\nimport { ButtonToggleGroup } from '../button-toggle-group/button-toggle-group';\nimport {Ripple} from \"@ngstarter-ui/components/core\";\n\nlet nextId = 0;\n\n@Component({\n selector: 'ngs-button-toggle',\n exportAs: 'ngsButtonToggle',\n imports: [\n Icon,\n Ripple\n ],\n templateUrl: './button-toggle.html',\n styleUrl: './button-toggle.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.ngs-button-toggle-checked]': 'isChecked',\n '[class.ngs-button-toggle-disabled]': 'isDisabled',\n '[class.only-icon]': 'onlyIcon()',\n '[attr.id]': 'id()',\n 'class': 'ngs-button-toggle',\n },\n})\nexport class ButtonToggle implements OnInit {\n id = input<string>(`ngs-button-toggle-${nextId++}`);\n value = input<any>(undefined);\n name = input<string | undefined>(undefined);\n checked = input(false, { transform: booleanAttribute });\n disabled = input(false, { transform: booleanAttribute });\n onlyIcon = input(false, { transform: booleanAttribute });\n\n private _internalChecked = false;\n get isChecked(): boolean {\n return this.checked() || this._internalChecked;\n }\n _setChecked(value: boolean) {\n this._internalChecked = value;\n this._changeDetectorRef.markForCheck();\n }\n\n readonly change = output<any>();\n\n public buttonToggleGroup = inject(forwardRef(() => ButtonToggleGroup), { optional: true });\n private _changeDetectorRef = inject(ChangeDetectorRef);\n\n get isDisabled(): boolean {\n return this.disabled() || (this.buttonToggleGroup && this.buttonToggleGroup.disabled());\n }\n\n get _shouldShowSelectionIndicator(): boolean {\n if (!this.isChecked) {\n return false;\n }\n\n if (!this.buttonToggleGroup) {\n return false;\n }\n\n return !this.buttonToggleGroup.hideSelectionIndicator();\n }\n\n ngOnInit() {\n if (this.buttonToggleGroup && this.buttonToggleGroup.value() === this.value()) {\n this._setChecked(true);\n }\n }\n\n _onButtonClick() {\n if (this.buttonToggleGroup) {\n this.buttonToggleGroup._onButtonClick(this);\n } else {\n this._setChecked(!this.isChecked);\n this.change.emit({ source: this, value: this.value() });\n }\n }\n}\n","<button type=\"button\"\n ngsRipple\n class=\"ngs-button-toggle-button\"\n [attr.id]=\"id() + '-button'\"\n [disabled]=\"isDisabled\"\n [attr.name]=\"name()\"\n [attr.aria-pressed]=\"isChecked\"\n (click)=\"_onButtonClick()\">\n @if (_shouldShowSelectionIndicator) {\n <ngs-icon name=\"fluent:checkmark-24-regular\" class=\"ngs-button-toggle-selection-indicator size-5\"/>\n }\n <span class=\"ngs-button-toggle-label-content\">\n <ng-content />\n </span>\n</button>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;MAuCa,iBAAiB,CAAA;AACnB,IAAA,cAAc,GAAG,eAAe,CAAC,UAAU,CAAC,MAAM,YAAY,CAAC,EAAA,EAAA,IAAA,SAAA,GAAA,EAAA,SAAA,EAAA,gBAAA,EAAA,8BAAA,EAAA,CAAA,EAAI,WAAW,EAAE,IAAI,GAAG;AAEhG,IAAA,UAAU,GAAG,KAAK,CAAyB,UAAU,iFAAC;IACtD,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IACxD,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IACxD,sBAAsB,GAAG,KAAK,CAAC,KAAK,8FAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IACtE,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;AACxD,IAAA,KAAK,GAAG,KAAK,CAAM,SAAS,4EAAC;IAC7B,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IAE/C,MAAM,GAAG,MAAM,EAAO;AAE/B,IAAA,SAAS,GAAyB,MAAK,EAAE,CAAC;AAC1C,IAAA,UAAU,GAAe,MAAK,EAAE,CAAC;AAEjC,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,CAAC,cAAc,EAAE;YACrB,IAAI,CAAC,+BAA+B,EAAE;AACxC,QAAA,CAAC,CAAC;IACJ;IAEA,kBAAkB,GAAA;QAChB,IAAI,CAAC,+BAA+B,EAAE;IACxC;AAEA,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;IACvB;AAEA,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;IACrB;AAEA,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;IACtB;AAEA,IAAA,gBAAgB,CAAE,UAAmB,EAAA;;;;;IAKrC;AAEA,IAAA,gBAAgB,CAAC,KAAU,EAAA;AACzB,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AACrB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IAC3C;IAEQ,+BAA+B,GAAA;AACrC,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE;QAC5C,IAAI,cAAc,EAAE;AAClB,YAAA,cAAc,CAAC,OAAO,CAAC,MAAM,IAAG;AAC9B,gBAAA,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;AACtD,YAAA,CAAC,CAAC;QACJ;IACF;AAEQ,IAAA,WAAW,CAAC,GAAQ,EAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;AACnB,YAAA,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC;QAClE;AACA,QAAA,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG;IAC7B;AAEA,IAAA,cAAc,CAAC,MAAoB,EAAA;QACjC,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE;YACxC;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACnB,MAAM,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE;YACzE,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;AAElD,YAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AAChB,gBAAA,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YAC/B;iBAAO;gBACL,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACnC;AACA,YAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC;QACjC;aAAO;YACL,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACnC;IACF;AAEQ,IAAA,YAAY,CAAC,QAAa,EAAA;AAChC,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;AACxB,QAAA,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;IACjC;uGA3FW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,sBAAA,EAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,wCAAA,EAAA,YAAA,EAAA,WAAA,EAAA,yCAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,oBAAA,EAAA,YAAA,EAAA,EAAA,cAAA,EAAA,yBAAA,EAAA,EAAA,SAAA,EAhBjB;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,iBAAiB,CAAC;AAChD,gBAAA,KAAK,EAAE;AACR;SACF,EAAA,OAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,SAAA,EAAA,EAAA,CAAA,UAAA,CAAA,MAW0D,YAAY,qGCxCzE,kBACA,EAAA,MAAA,EAAA,CAAA,44CAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FDsCa,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAtB7B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,yBAAyB,EAAA,QAAA,EACzB,sBAAsB,EAAA,UAAA,EAGpB,IAAI,EAAA,SAAA,EACL;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,uBAAuB,CAAC;AAChD,4BAAA,KAAK,EAAE;AACR;qBACF,EAAA,eAAA,EACgB,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,OAAO,EAAE,yBAAyB;AAClC,wBAAA,0CAA0C,EAAE,YAAY;AACxD,wBAAA,aAAa,EAAE,qCAAqC;AACpD,wBAAA,mBAAmB,EAAE,YAAY;AACjC,wBAAA,sBAAsB,EAAE,YAAY;AACrC,qBAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,44CAAA,CAAA,EAAA;4GAGyC,UAAU,CAAC,MAAM,YAAY,CAAC,EAAA,EAAA,GAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,YAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,sBAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,KAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,aAAA,CAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,KAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,KAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,CAAA,EAAA,CAAA,EAAA,MAAA,EAAA,CAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,IAAA,EAAA,CAAA,QAAA,CAAA,EAAA,CAAA,EAAA,EAAA,CAAA;;AEzBjG,IAAI,MAAM,GAAG,CAAC;MAoBD,YAAY,CAAA;IACvB,EAAE,GAAG,KAAK,CAAS,CAAA,kBAAA,EAAqB,MAAM,EAAE,CAAA,CAAE,yEAAC;AACnD,IAAA,KAAK,GAAG,KAAK,CAAM,SAAS,4EAAC;AAC7B,IAAA,IAAI,GAAG,KAAK,CAAqB,SAAS,2EAAC;IAC3C,OAAO,GAAG,KAAK,CAAC,KAAK,+EAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IACvD,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IACxD,QAAQ,GAAG,KAAK,CAAC,KAAK,gFAAI,SAAS,EAAE,gBAAgB,EAAA,CAAG;IAEhD,gBAAgB,GAAG,KAAK;AAChC,IAAA,IAAI,SAAS,GAAA;QACX,OAAO,IAAI,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,gBAAgB;IAChD;AACA,IAAA,WAAW,CAAC,KAAc,EAAA;AACxB,QAAA,IAAI,CAAC,gBAAgB,GAAG,KAAK;AAC7B,QAAA,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE;IACxC;IAES,MAAM,GAAG,MAAM,EAAO;AAExB,IAAA,iBAAiB,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,iBAAiB,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAClF,IAAA,kBAAkB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAEtD,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,KAAK,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,CAAC;IACzF;AAEA,IAAA,IAAI,6BAA6B,GAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACnB,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;AAC3B,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,sBAAsB,EAAE;IACzD;IAEA,QAAQ,GAAA;AACN,QAAA,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,IAAI,CAAC,KAAK,EAAE,EAAE;AAC7E,YAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QACxB;IACF;IAEA,cAAc,GAAA;AACZ,QAAA,IAAI,IAAI,CAAC,iBAAiB,EAAE;AAC1B,YAAA,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,IAAI,CAAC;QAC7C;aAAO;YACL,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;AACjC,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;QACzD;IACF;uGAnDW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAZ,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iCAAA,EAAA,WAAA,EAAA,kCAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,mBAAA,EAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECnCzB,ghBAeA,EAAA,MAAA,EAAA,CAAA,k/EAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDMI,IAAI,8FACJ,MAAM,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,gBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,kBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,yBAAA,EAAA,yBAAA,EAAA,wBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;2FAaG,YAAY,EAAA,UAAA,EAAA,CAAA;kBAlBxB,SAAS;+BACE,mBAAmB,EAAA,QAAA,EACnB,iBAAiB,EAAA,OAAA,EAClB;wBACP,IAAI;wBACJ;qBACD,EAAA,eAAA,EAGgB,uBAAuB,CAAC,MAAM,EAAA,IAAA,EACzC;AACJ,wBAAA,mCAAmC,EAAE,WAAW;AAChD,wBAAA,oCAAoC,EAAE,YAAY;AAClD,wBAAA,mBAAmB,EAAE,YAAY;AACjC,wBAAA,WAAW,EAAE,MAAM;AACnB,wBAAA,OAAO,EAAE,mBAAmB;AAC7B,qBAAA,EAAA,QAAA,EAAA,ghBAAA,EAAA,MAAA,EAAA,CAAA,k/EAAA,CAAA,EAAA;;;AEjCH;;AAEG;;;;"}
|
|
@@ -284,13 +284,15 @@ class CodeHighlighter {
|
|
|
284
284
|
};
|
|
285
285
|
}
|
|
286
286
|
async ngOnChanges(changes) {
|
|
287
|
-
|
|
288
|
-
|
|
287
|
+
const code = this.code() ?? '';
|
|
288
|
+
if (code.length === 0) {
|
|
289
|
+
this.isLoading.set(false);
|
|
290
|
+
this.content.set(this.sanitizer.bypassSecurityTrustHtml('<pre class="shiki"><code></code></pre>'));
|
|
289
291
|
return;
|
|
290
292
|
}
|
|
291
293
|
this.isLoading.set(true);
|
|
292
294
|
try {
|
|
293
|
-
const highlighted = await codeToHtml(
|
|
295
|
+
const highlighted = await codeToHtml(code, {
|
|
294
296
|
lang: this.language(),
|
|
295
297
|
theme: this.theme(),
|
|
296
298
|
transformers: [diffTransformer, this.getHighlightTransformer()],
|
|
@@ -300,7 +302,7 @@ class CodeHighlighter {
|
|
|
300
302
|
}
|
|
301
303
|
catch (e) {
|
|
302
304
|
// Fallback: raw code escaped inside pre
|
|
303
|
-
const escaped =
|
|
305
|
+
const escaped = code
|
|
304
306
|
.replace(/&/g, '&')
|
|
305
307
|
.replace(/</g, '<')
|
|
306
308
|
.replace(/>/g, '>');
|
|
@@ -328,7 +330,7 @@ class CodeHighlighter {
|
|
|
328
330
|
}
|
|
329
331
|
}
|
|
330
332
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: CodeHighlighter, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
331
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: CodeHighlighter, isStandalone: true, selector: "ngs-code-highlighter", inputs: { code: { classPropertyName: "code", publicName: "code", isSignal: true, isRequired: true, transformFunction: null }, language: { classPropertyName: "language", publicName: "language", isSignal: true, isRequired: false, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, diff: { classPropertyName: "diff", publicName: "diff", isSignal: true, isRequired: false, transformFunction: null }, highlightLines: { classPropertyName: "highlightLines", publicName: "highlightLines", isSignal: true, isRequired: false, transformFunction: null }, showLanguage: { classPropertyName: "showLanguage", publicName: "showLanguage", isSignal: true, isRequired: false, transformFunction: null }, showCopyButton: { classPropertyName: "showCopyButton", publicName: "showCopyButton", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.appearance-bordered": "appearance() === \"bordered\"", "class.appearance-none": "appearance() === \"none\"" }, classAttribute: "ngs-code-highlighter not-prose" }, exportAs: ["ngsCodeHighlighter"], usesOnChanges: true, ngImport: i0, template: "<figure>\n @if (title()) {\n <figcaption>\n @if (title()) {\n <span class=\"title\">{{ title() }}</span>\n }\n </figcaption>\n }\n\n <div class=\"content relative\">\n @if (showLanguage()) {\n <div class=\"languageName\">{{ displayedLanguage() }}</div>\n }\n\n @if (showCopyButton()) {\n <span class=\"absolute top-2 right-2\">\n <button\n ngsIconButton\n (click)=\"copyCode()\"\n >\n <ngs-icon\n [name]=\"copied() ? 'fluent:checkmark-24-regular' : 'fluent:copy-24-regular'\"\n [class.text-green-500]=\"copied()\"\n />\n </button>\n </span>\n }\n\n <div>\n @if (content()) {\n <div [innerHTML]=\"content()\"></div>\n } @else {\n <div class=\"loading\">Loading\u2026</div>\n }\n </div>\n </div>\n</figure>\n", styles: [":host{--ngs-code-highlighter-bg: var(--ngs-color-background);--ngs-code-highlighter-radius: var(--ngs-radius-xl);--ngs-code-highlighter-padding: calc(var(--spacing, .25rem) * 5);--ngs-code-highlighter-margin: calc(var(--spacing, .25rem) * 5);--ngs-code-highlighter-border: 1px solid var(--ngs-color-border);--ngs-code-highlighter-title-padding: calc(var(--spacing, .25rem) * 2) calc(var(--spacing, .25rem) * 3) calc(var(--spacing, .25rem) * 1) calc(var(--spacing, .25rem) * 3);--ngs-code-highlighter-title-color: var(--ngs-color-neutral-500);display:block;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}:host figcaption{font-size:var(--ngs-font-size-xs);font-weight:500;padding:var(--ngs-code-highlighter-title-padding);background:var(--ngs-code-highlighter-bg);color:var(--ngs-code-highlighter-title-color);position:relative;z-index:1}:host figcaption:after{content:\"\";position:absolute;left:0;right:0;bottom:-1px;height:1px;background:var(--ngs-code-highlighter-bg)}:host .languageName{font-size:var(--ngs-font-size-sm);font-weight:600;padding:0 calc(var(--spacing, .25rem) * 6);width:max-content;margin-bottom:calc(var(--spacing, .25rem) * 4);margin-top:calc(calc(var(--spacing, .25rem) * 1) * -1);position:relative}:host ::ng-deep pre{padding:var(--ngs-code-highlighter-padding) 0;line-height:1.75;font-size:var(--ngs-font-size-sm);position:relative}:host ::ng-deep pre code{display:grid}:host ::ng-deep pre .line{padding-left:calc(var(--spacing, .25rem) * 6);padding-right:var(--ngs-code-highlighter-padding);min-height:1.75em}:host ::ng-deep pre .line.diff.remove{background-color:var(--ngs-color-danger);display:inline-block;width:100%}@supports (color: color-mix(in lab,red,red)){:host ::ng-deep pre .line.diff.remove{background-color:color-mix(in srgb,var(--ngs-color-danger),transparent 85%)}}:host ::ng-deep pre .line.diff.remove:before{content:\"-\";color:var(--ngs-color-danger);position:absolute;left:calc(var(--spacing, .25rem) * 2)}:host ::ng-deep pre .line.diff.add{background-color:var(--ngs-color-success);display:inline-block;width:100%}@supports (color: color-mix(in lab,red,red)){:host ::ng-deep pre .line.diff.add{background-color:color-mix(in srgb,var(--ngs-color-success),transparent 85%)}}:host ::ng-deep pre .line.diff.add:before{content:\"+\";color:var(--ngs-color-success);position:absolute;left:calc(var(--spacing, .25rem) * 2)}:host ::ng-deep pre .line.highlighted{background-color:var(--ngs-color-primary);display:inline-block;width:100%}@supports (color: color-mix(in lab,red,red)){:host ::ng-deep pre .line.highlighted{background-color:color-mix(in srgb,var(--ngs-color-primary),transparent 92%)}}:host ::ng-deep code{white-space:pre}:host .content{overflow:auto;background:var(--ngs-code-highlighter-bg)}:host .content button{color:inherit}:host .content button ngs-icon.text-green-500{color:var(--ngs-color-success)!important}:host.appearance-bordered figcaption{border:var(--ngs-code-highlighter-border);border-bottom:none;border-top-left-radius:var(--ngs-radius-xl);border-top-right-radius:var(--ngs-radius-xl);width:max-content}:host.appearance-bordered .content{border:var(--ngs-code-highlighter-border);border-radius:var(--ngs-code-highlighter-radius);z-index:0}:host.appearance-bordered:has(figcaption) .content{border-top-left-radius:0}:host.appearance-none .content{border:none;background-color:transparent!important;border-radius:0}:host.appearance-none ::ng-deep pre{padding-left:0;padding-right:0}:host.loading{opacity:.6}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "component", type: Button, selector: " button[ngsButton], button[ngsIconButton], a[ngsButton], a[ngsIconButton] ", inputs: ["ngsButton", "ngsIconButton", "loading", "disabled", "disabledInteractive", "disableRipple", "reverse", "fullWidth", "hideTextOnMobile"], exportAs: ["ngsButton"] }, { kind: "component", type: Icon, selector: "ngs-icon", inputs: ["name"], exportAs: ["ngsIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
333
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.4", type: CodeHighlighter, isStandalone: true, selector: "ngs-code-highlighter", inputs: { code: { classPropertyName: "code", publicName: "code", isSignal: true, isRequired: true, transformFunction: null }, language: { classPropertyName: "language", publicName: "language", isSignal: true, isRequired: false, transformFunction: null }, theme: { classPropertyName: "theme", publicName: "theme", isSignal: true, isRequired: false, transformFunction: null }, title: { classPropertyName: "title", publicName: "title", isSignal: true, isRequired: false, transformFunction: null }, appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, diff: { classPropertyName: "diff", publicName: "diff", isSignal: true, isRequired: false, transformFunction: null }, highlightLines: { classPropertyName: "highlightLines", publicName: "highlightLines", isSignal: true, isRequired: false, transformFunction: null }, showLanguage: { classPropertyName: "showLanguage", publicName: "showLanguage", isSignal: true, isRequired: false, transformFunction: null }, showCopyButton: { classPropertyName: "showCopyButton", publicName: "showCopyButton", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.appearance-bordered": "appearance() === \"bordered\"", "class.appearance-none": "appearance() === \"none\"" }, classAttribute: "ngs-code-highlighter not-prose" }, exportAs: ["ngsCodeHighlighter"], usesOnChanges: true, ngImport: i0, template: "<figure class=\"h-full\">\n @if (title()) {\n <figcaption>\n @if (title()) {\n <span class=\"title\">{{ title() }}</span>\n }\n </figcaption>\n }\n\n <div class=\"content relative h-full\">\n @if (showLanguage()) {\n <div class=\"languageName\">{{ displayedLanguage() }}</div>\n }\n\n @if (showCopyButton()) {\n <span class=\"absolute top-2 right-2\">\n <button\n ngsIconButton\n (click)=\"copyCode()\"\n >\n <ngs-icon\n [name]=\"copied() ? 'fluent:checkmark-24-regular' : 'fluent:copy-24-regular'\"\n [class.text-green-500]=\"copied()\"\n />\n </button>\n </span>\n }\n\n <div>\n @if (content()) {\n <div [innerHTML]=\"content()\"></div>\n } @else if (isLoading()) {\n <div class=\"loading\">Loading\u2026</div>\n }\n </div>\n </div>\n</figure>\n", styles: [":host{--ngs-code-highlighter-bg: var(--ngs-color-background);--ngs-code-highlighter-radius: var(--ngs-radius-xl);--ngs-code-highlighter-padding: calc(var(--spacing, .25rem) * 5);--ngs-code-highlighter-margin: calc(var(--spacing, .25rem) * 5);--ngs-code-highlighter-border: 1px solid var(--ngs-color-border);--ngs-code-highlighter-title-padding: calc(var(--spacing, .25rem) * 2) calc(var(--spacing, .25rem) * 3) calc(var(--spacing, .25rem) * 1) calc(var(--spacing, .25rem) * 3);--ngs-code-highlighter-title-color: var(--ngs-color-neutral-500);display:block;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}:host figcaption{font-size:var(--ngs-font-size-xs);font-weight:500;padding:var(--ngs-code-highlighter-title-padding);background:var(--ngs-code-highlighter-bg);color:var(--ngs-code-highlighter-title-color);position:relative;z-index:1}:host figcaption:after{content:\"\";position:absolute;left:0;right:0;bottom:-1px;height:1px;background:var(--ngs-code-highlighter-bg)}:host .languageName{font-size:var(--ngs-font-size-sm);font-weight:600;padding:0 calc(var(--spacing, .25rem) * 6);width:max-content;margin-bottom:calc(var(--spacing, .25rem) * 4);margin-top:calc(calc(var(--spacing, .25rem) * 1) * -1);position:relative}:host ::ng-deep pre{padding:var(--ngs-code-highlighter-padding) 0;line-height:1.75;font-size:var(--ngs-font-size-sm);position:relative}:host ::ng-deep pre code{display:grid}:host ::ng-deep pre .line{padding-left:calc(var(--spacing, .25rem) * 6);padding-right:var(--ngs-code-highlighter-padding);min-height:1.75em}:host ::ng-deep pre .line.diff.remove{background-color:var(--ngs-color-danger);display:inline-block;width:100%}@supports (color: color-mix(in lab,red,red)){:host ::ng-deep pre .line.diff.remove{background-color:color-mix(in srgb,var(--ngs-color-danger),transparent 85%)}}:host ::ng-deep pre .line.diff.remove:before{content:\"-\";color:var(--ngs-color-danger);position:absolute;left:calc(var(--spacing, .25rem) * 2)}:host ::ng-deep pre .line.diff.add{background-color:var(--ngs-color-success);display:inline-block;width:100%}@supports (color: color-mix(in lab,red,red)){:host ::ng-deep pre .line.diff.add{background-color:color-mix(in srgb,var(--ngs-color-success),transparent 85%)}}:host ::ng-deep pre .line.diff.add:before{content:\"+\";color:var(--ngs-color-success);position:absolute;left:calc(var(--spacing, .25rem) * 2)}:host ::ng-deep pre .line.highlighted{background-color:var(--ngs-color-primary);display:inline-block;width:100%}@supports (color: color-mix(in lab,red,red)){:host ::ng-deep pre .line.highlighted{background-color:color-mix(in srgb,var(--ngs-color-primary),transparent 92%)}}:host ::ng-deep code{white-space:pre}:host .content{overflow:auto;background:var(--ngs-code-highlighter-bg)}:host .content button{color:inherit}:host .content button ngs-icon.text-green-500{color:var(--ngs-color-success)!important}:host.appearance-bordered figcaption{border:var(--ngs-code-highlighter-border);border-bottom:none;border-top-left-radius:var(--ngs-radius-xl);border-top-right-radius:var(--ngs-radius-xl);width:max-content}:host.appearance-bordered .content{border:var(--ngs-code-highlighter-border);border-radius:var(--ngs-code-highlighter-radius);z-index:0}:host.appearance-bordered:has(figcaption) .content{border-top-left-radius:0}:host.appearance-none .content{border:none;background-color:transparent!important;border-radius:0}:host.appearance-none ::ng-deep pre{padding-left:0;padding-right:0}:host.loading{opacity:.6}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "component", type: Button, selector: " button[ngsButton], button[ngsIconButton], a[ngsButton], a[ngsIconButton] ", inputs: ["ngsButton", "ngsIconButton", "loading", "disabled", "disabledInteractive", "disableRipple", "reverse", "fullWidth", "hideTextOnMobile"], exportAs: ["ngsButton"] }, { kind: "component", type: Icon, selector: "ngs-icon", inputs: ["name"], exportAs: ["ngsIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
332
334
|
}
|
|
333
335
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImport: i0, type: CodeHighlighter, decorators: [{
|
|
334
336
|
type: Component,
|
|
@@ -336,7 +338,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.4", ngImpor
|
|
|
336
338
|
'class': 'ngs-code-highlighter not-prose',
|
|
337
339
|
'[class.appearance-bordered]': 'appearance() === "bordered"',
|
|
338
340
|
'[class.appearance-none]': 'appearance() === "none"',
|
|
339
|
-
}, template: "<figure>\n @if (title()) {\n <figcaption>\n @if (title()) {\n <span class=\"title\">{{ title() }}</span>\n }\n </figcaption>\n }\n\n <div class=\"content relative\">\n @if (showLanguage()) {\n <div class=\"languageName\">{{ displayedLanguage() }}</div>\n }\n\n @if (showCopyButton()) {\n <span class=\"absolute top-2 right-2\">\n <button\n ngsIconButton\n (click)=\"copyCode()\"\n >\n <ngs-icon\n [name]=\"copied() ? 'fluent:checkmark-24-regular' : 'fluent:copy-24-regular'\"\n [class.text-green-500]=\"copied()\"\n />\n </button>\n </span>\n }\n\n <div>\n @if (content()) {\n <div [innerHTML]=\"content()\"></div>\n } @else {\n <div class=\"loading\">Loading\u2026</div>\n }\n </div>\n </div>\n</figure>\n", styles: [":host{--ngs-code-highlighter-bg: var(--ngs-color-background);--ngs-code-highlighter-radius: var(--ngs-radius-xl);--ngs-code-highlighter-padding: calc(var(--spacing, .25rem) * 5);--ngs-code-highlighter-margin: calc(var(--spacing, .25rem) * 5);--ngs-code-highlighter-border: 1px solid var(--ngs-color-border);--ngs-code-highlighter-title-padding: calc(var(--spacing, .25rem) * 2) calc(var(--spacing, .25rem) * 3) calc(var(--spacing, .25rem) * 1) calc(var(--spacing, .25rem) * 3);--ngs-code-highlighter-title-color: var(--ngs-color-neutral-500);display:block;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}:host figcaption{font-size:var(--ngs-font-size-xs);font-weight:500;padding:var(--ngs-code-highlighter-title-padding);background:var(--ngs-code-highlighter-bg);color:var(--ngs-code-highlighter-title-color);position:relative;z-index:1}:host figcaption:after{content:\"\";position:absolute;left:0;right:0;bottom:-1px;height:1px;background:var(--ngs-code-highlighter-bg)}:host .languageName{font-size:var(--ngs-font-size-sm);font-weight:600;padding:0 calc(var(--spacing, .25rem) * 6);width:max-content;margin-bottom:calc(var(--spacing, .25rem) * 4);margin-top:calc(calc(var(--spacing, .25rem) * 1) * -1);position:relative}:host ::ng-deep pre{padding:var(--ngs-code-highlighter-padding) 0;line-height:1.75;font-size:var(--ngs-font-size-sm);position:relative}:host ::ng-deep pre code{display:grid}:host ::ng-deep pre .line{padding-left:calc(var(--spacing, .25rem) * 6);padding-right:var(--ngs-code-highlighter-padding);min-height:1.75em}:host ::ng-deep pre .line.diff.remove{background-color:var(--ngs-color-danger);display:inline-block;width:100%}@supports (color: color-mix(in lab,red,red)){:host ::ng-deep pre .line.diff.remove{background-color:color-mix(in srgb,var(--ngs-color-danger),transparent 85%)}}:host ::ng-deep pre .line.diff.remove:before{content:\"-\";color:var(--ngs-color-danger);position:absolute;left:calc(var(--spacing, .25rem) * 2)}:host ::ng-deep pre .line.diff.add{background-color:var(--ngs-color-success);display:inline-block;width:100%}@supports (color: color-mix(in lab,red,red)){:host ::ng-deep pre .line.diff.add{background-color:color-mix(in srgb,var(--ngs-color-success),transparent 85%)}}:host ::ng-deep pre .line.diff.add:before{content:\"+\";color:var(--ngs-color-success);position:absolute;left:calc(var(--spacing, .25rem) * 2)}:host ::ng-deep pre .line.highlighted{background-color:var(--ngs-color-primary);display:inline-block;width:100%}@supports (color: color-mix(in lab,red,red)){:host ::ng-deep pre .line.highlighted{background-color:color-mix(in srgb,var(--ngs-color-primary),transparent 92%)}}:host ::ng-deep code{white-space:pre}:host .content{overflow:auto;background:var(--ngs-code-highlighter-bg)}:host .content button{color:inherit}:host .content button ngs-icon.text-green-500{color:var(--ngs-color-success)!important}:host.appearance-bordered figcaption{border:var(--ngs-code-highlighter-border);border-bottom:none;border-top-left-radius:var(--ngs-radius-xl);border-top-right-radius:var(--ngs-radius-xl);width:max-content}:host.appearance-bordered .content{border:var(--ngs-code-highlighter-border);border-radius:var(--ngs-code-highlighter-radius);z-index:0}:host.appearance-bordered:has(figcaption) .content{border-top-left-radius:0}:host.appearance-none .content{border:none;background-color:transparent!important;border-radius:0}:host.appearance-none ::ng-deep pre{padding-left:0;padding-right:0}:host.loading{opacity:.6}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
|
|
341
|
+
}, template: "<figure class=\"h-full\">\n @if (title()) {\n <figcaption>\n @if (title()) {\n <span class=\"title\">{{ title() }}</span>\n }\n </figcaption>\n }\n\n <div class=\"content relative h-full\">\n @if (showLanguage()) {\n <div class=\"languageName\">{{ displayedLanguage() }}</div>\n }\n\n @if (showCopyButton()) {\n <span class=\"absolute top-2 right-2\">\n <button\n ngsIconButton\n (click)=\"copyCode()\"\n >\n <ngs-icon\n [name]=\"copied() ? 'fluent:checkmark-24-regular' : 'fluent:copy-24-regular'\"\n [class.text-green-500]=\"copied()\"\n />\n </button>\n </span>\n }\n\n <div>\n @if (content()) {\n <div [innerHTML]=\"content()\"></div>\n } @else if (isLoading()) {\n <div class=\"loading\">Loading\u2026</div>\n }\n </div>\n </div>\n</figure>\n", styles: [":host{--ngs-code-highlighter-bg: var(--ngs-color-background);--ngs-code-highlighter-radius: var(--ngs-radius-xl);--ngs-code-highlighter-padding: calc(var(--spacing, .25rem) * 5);--ngs-code-highlighter-margin: calc(var(--spacing, .25rem) * 5);--ngs-code-highlighter-border: 1px solid var(--ngs-color-border);--ngs-code-highlighter-title-padding: calc(var(--spacing, .25rem) * 2) calc(var(--spacing, .25rem) * 3) calc(var(--spacing, .25rem) * 1) calc(var(--spacing, .25rem) * 3);--ngs-code-highlighter-title-color: var(--ngs-color-neutral-500);display:block;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}:host figcaption{font-size:var(--ngs-font-size-xs);font-weight:500;padding:var(--ngs-code-highlighter-title-padding);background:var(--ngs-code-highlighter-bg);color:var(--ngs-code-highlighter-title-color);position:relative;z-index:1}:host figcaption:after{content:\"\";position:absolute;left:0;right:0;bottom:-1px;height:1px;background:var(--ngs-code-highlighter-bg)}:host .languageName{font-size:var(--ngs-font-size-sm);font-weight:600;padding:0 calc(var(--spacing, .25rem) * 6);width:max-content;margin-bottom:calc(var(--spacing, .25rem) * 4);margin-top:calc(calc(var(--spacing, .25rem) * 1) * -1);position:relative}:host ::ng-deep pre{padding:var(--ngs-code-highlighter-padding) 0;line-height:1.75;font-size:var(--ngs-font-size-sm);position:relative}:host ::ng-deep pre code{display:grid}:host ::ng-deep pre .line{padding-left:calc(var(--spacing, .25rem) * 6);padding-right:var(--ngs-code-highlighter-padding);min-height:1.75em}:host ::ng-deep pre .line.diff.remove{background-color:var(--ngs-color-danger);display:inline-block;width:100%}@supports (color: color-mix(in lab,red,red)){:host ::ng-deep pre .line.diff.remove{background-color:color-mix(in srgb,var(--ngs-color-danger),transparent 85%)}}:host ::ng-deep pre .line.diff.remove:before{content:\"-\";color:var(--ngs-color-danger);position:absolute;left:calc(var(--spacing, .25rem) * 2)}:host ::ng-deep pre .line.diff.add{background-color:var(--ngs-color-success);display:inline-block;width:100%}@supports (color: color-mix(in lab,red,red)){:host ::ng-deep pre .line.diff.add{background-color:color-mix(in srgb,var(--ngs-color-success),transparent 85%)}}:host ::ng-deep pre .line.diff.add:before{content:\"+\";color:var(--ngs-color-success);position:absolute;left:calc(var(--spacing, .25rem) * 2)}:host ::ng-deep pre .line.highlighted{background-color:var(--ngs-color-primary);display:inline-block;width:100%}@supports (color: color-mix(in lab,red,red)){:host ::ng-deep pre .line.highlighted{background-color:color-mix(in srgb,var(--ngs-color-primary),transparent 92%)}}:host ::ng-deep code{white-space:pre}:host .content{overflow:auto;background:var(--ngs-code-highlighter-bg)}:host .content button{color:inherit}:host .content button ngs-icon.text-green-500{color:var(--ngs-color-success)!important}:host.appearance-bordered figcaption{border:var(--ngs-code-highlighter-border);border-bottom:none;border-top-left-radius:var(--ngs-radius-xl);border-top-right-radius:var(--ngs-radius-xl);width:max-content}:host.appearance-bordered .content{border:var(--ngs-code-highlighter-border);border-radius:var(--ngs-code-highlighter-radius);z-index:0}:host.appearance-bordered:has(figcaption) .content{border-top-left-radius:0}:host.appearance-none .content{border:none;background-color:transparent!important;border-radius:0}:host.appearance-none ::ng-deep pre{padding-left:0;padding-right:0}:host.loading{opacity:.6}\n/*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */\n"] }]
|
|
340
342
|
}], propDecorators: { code: [{ type: i0.Input, args: [{ isSignal: true, alias: "code", required: true }] }], language: [{ type: i0.Input, args: [{ isSignal: true, alias: "language", required: false }] }], theme: [{ type: i0.Input, args: [{ isSignal: true, alias: "theme", required: false }] }], title: [{ type: i0.Input, args: [{ isSignal: true, alias: "title", required: false }] }], appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: false }] }], diff: [{ type: i0.Input, args: [{ isSignal: true, alias: "diff", required: false }] }], highlightLines: [{ type: i0.Input, args: [{ isSignal: true, alias: "highlightLines", required: false }] }], showLanguage: [{ type: i0.Input, args: [{ isSignal: true, alias: "showLanguage", required: false }] }], showCopyButton: [{ type: i0.Input, args: [{ isSignal: true, alias: "showCopyButton", required: false }] }] } });
|
|
341
343
|
|
|
342
344
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngstarter-ui-components-code-highlighter.mjs","sources":["../../../projects/components/code-highlighter/src/code-highlighter/code-highlighter.ts","../../../projects/components/code-highlighter/src/code-highlighter/code-highlighter.html","../../../projects/components/code-highlighter/ngstarter-ui-components-code-highlighter.ts"],"sourcesContent":["import { Component, ChangeDetectionStrategy, input, OnChanges, SimpleChanges, signal, computed, inject, booleanAttribute } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { codeToHtml, ShikiTransformer } from 'shiki';\nimport { Button } from '@ngstarter-ui/components/button';\nimport { Icon } from '@ngstarter-ui/components/icon';\n\nconst removeDiffPrefix = (node: any) => {\n if (!node.children || node.children.length === 0) return;\n\n const firstChild = node.children[0];\n if (firstChild.type === 'element' && firstChild.children && firstChild.children.length > 0) {\n const textNode = firstChild.children[0];\n if (textNode.type === 'text' && (textNode.value.startsWith('+') || textNode.value.startsWith('-'))) {\n textNode.value = textNode.value.slice(1);\n if (textNode.value === '' && firstChild.children.length === 1) {\n node.children.shift();\n }\n }\n } else if (firstChild.type === 'text' && (firstChild.value.startsWith('+') || firstChild.value.startsWith('-'))) {\n firstChild.value = firstChild.value.slice(1);\n if (firstChild.value === '') {\n node.children.shift();\n }\n }\n};\n\nconst diffTransformer: ShikiTransformer = {\n line(node, line) {\n if (this.options.lang === 'diff' || (this.options as any).diff) {\n const lineTokens = this.tokens[line - 1];\n const text = lineTokens.map(token => token.content).join('');\n if (text.startsWith('+')) {\n this.addClassToHast(node, 'diff add');\n removeDiffPrefix(node);\n } else if (text.startsWith('-')) {\n this.addClassToHast(node, 'diff remove');\n removeDiffPrefix(node);\n }\n }\n }\n};\n\n@Component({\n selector: 'ngs-code-highlighter',\n standalone: true,\n imports: [Button, Icon],\n exportAs: 'ngsCodeHighlighter',\n templateUrl: './code-highlighter.html',\n styleUrl: './code-highlighter.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-code-highlighter not-prose',\n '[class.appearance-bordered]': 'appearance() === \"bordered\"',\n '[class.appearance-none]': 'appearance() === \"none\"',\n }\n})\nexport class CodeHighlighter implements OnChanges {\n private sanitizer = inject(DomSanitizer);\n\n code = input.required<string>();\n language = input<string>('none');\n theme = input<string>('github-light');\n title = input<string | null>(null);\n appearance = input<'none' | 'bordered'>('bordered');\n diff = input<boolean>(false);\n highlightLines = input<number[] | number[][]>([]);\n showLanguage = input(false, { transform: booleanAttribute });\n showCopyButton = input(false, { transform: booleanAttribute });\n\n readonly content = signal<SafeHtml | null>(null);\n readonly isLoading = signal<boolean>(false);\n\n readonly displayedLanguage = computed(() => {\n const lang = this.language();\n if (!lang || lang === 'none') return '';\n\n const langMap: Record<string, string> = {\n '1c': '1C',\n 'abap': 'ABAP',\n 'actionscript-3': 'ActionScript 3',\n 'ada': 'Ada',\n 'apache': 'Apache',\n 'apex': 'Apex',\n 'apl': 'APL',\n 'applescript': 'AppleScript',\n 'ara': 'Ara',\n 'asm': 'Assembly',\n 'astro': 'Astro',\n 'awk': 'AWK',\n 'ballerina': 'Ballerina',\n 'bash': 'Bash',\n 'sh': 'Bash',\n 'batch': 'Batch',\n 'berry': 'Berry',\n 'bibtex': 'BibTeX',\n 'bicep': 'Bicep',\n 'blade': 'Blade',\n 'c': 'C',\n 'cadence': 'Cadence',\n 'clarity': 'Clarity',\n 'clojure': 'Clojure',\n 'clj': 'Clojure',\n 'cmake': 'CMake',\n 'cobol': 'COBOL',\n 'codeql': 'CodeQL',\n 'coffee': 'CoffeeScript',\n 'cpp': 'C++',\n 'csharp': 'C#',\n 'cs': 'C#',\n 'css': 'CSS',\n 'cue': 'CUE',\n 'cypher': 'Cypher',\n 'd': 'D',\n 'dart': 'Dart',\n 'dax': 'DAX',\n 'diff': 'Diff',\n 'docker': 'Docker',\n 'dockerfile': 'Dockerfile',\n 'dream-maker': 'Dream Maker',\n 'elixir': 'Elixir',\n 'elm': 'Elm',\n 'erb': 'ERB',\n 'erlang': 'Erlang',\n 'fish': 'Fish',\n 'fsharp': 'F#',\n 'fs': 'F#',\n 'gdresource': 'GDResource',\n 'gdscript': 'GDScript',\n 'gdshader': 'GDShader',\n 'gherkin': 'Gherkin',\n 'git-commit': 'Git Commit',\n 'git-rebase': 'Git Rebase',\n 'glimmer-js': 'Glimmer JS',\n 'gljs': 'Glimmer JS',\n 'glsl': 'GLSL',\n 'gnuplot': 'Gnuplot',\n 'go': 'Go',\n 'graphql': 'GraphQL',\n 'groovy': 'Groovy',\n 'hack': 'Hack',\n 'haml': 'Haml',\n 'handlebars': 'Handlebars',\n 'hbs': 'Handlebars',\n 'haskell': 'Haskell',\n 'hs': 'Haskell',\n 'hcl': 'HCL',\n 'hjson': 'Hjson',\n 'hlsl': 'HLSL',\n 'html': 'HTML',\n 'http': 'HTTP',\n 'imba': 'Imba',\n 'ini': 'INI',\n 'java': 'Java',\n 'javascript': 'JavaScript',\n 'js': 'JavaScript',\n 'jinja-html': 'Jinja HTML',\n 'jjson': 'JJSON',\n 'json': 'JSON',\n 'json5': 'JSON5',\n 'jsonc': 'JSONC',\n 'jsonnet': 'Jsonnet',\n 'jssm': 'JSSM',\n 'jsx': 'JSX',\n 'julia': 'Julia',\n 'kotlin': 'Kotlin',\n 'kt': 'Kotlin',\n 'kts': 'Kotlin',\n 'kusto': 'Kusto',\n 'latex': 'LaTeX',\n 'lat': 'LaTeX',\n 'tex': 'LaTeX',\n 'lean': 'Lean',\n 'less': 'Less',\n 'liquid': 'Liquid',\n 'lisp': 'Lisp',\n 'logo': 'Logo',\n 'lua': 'Lua',\n 'make': 'Make',\n 'makefile': 'Makefile',\n 'markdown': 'Markdown',\n 'md': 'Markdown',\n 'marko': 'Marko',\n 'matlab': 'MATLAB',\n 'mdx': 'MDX',\n 'mermaid': 'Mermaid',\n 'mipsasm': 'MIPS Assembly',\n 'mips': 'MIPS Assembly',\n 'mojolicious': 'Mojolicious',\n 'move': 'Move',\n 'narrat': 'Narrat',\n 'nextflow': 'Nextflow',\n 'nginx': 'Nginx',\n 'nim': 'Nim',\n 'nix': 'Nix',\n 'objective-c': 'Objective-C',\n 'objc': 'Objective-C',\n 'objective-cpp': 'Objective-C++',\n 'ocaml': 'OCaml',\n 'pascal': 'Pascal',\n 'perl': 'Perl',\n 'pl': 'Perl',\n 'php': 'PHP',\n 'plsql': 'PL/SQL',\n 'postcss': 'PostCSS',\n 'powerquery': 'PowerQuery',\n 'powershell': 'PowerShell',\n 'ps1': 'PowerShell',\n 'prisma': 'Prisma',\n 'prolog': 'Prolog',\n 'proto': 'Protocol Buffers',\n 'pug': 'Pug',\n 'jade': 'Pug',\n 'puppet': 'Puppet',\n 'purescript': 'PureScript',\n 'python': 'Python',\n 'py': 'Python',\n 'r': 'R',\n 'raku': 'Raku',\n 'razor': 'Razor',\n 'reg': 'Registry',\n 'rel': 'Rel',\n 'riscv': 'RISC-V',\n 'rst': 'reStructuredText',\n 'ruby': 'Ruby',\n 'rb': 'Ruby',\n 'rust': 'Rust',\n 'rs': 'Rust',\n 'sas': 'SAS',\n 'sass': 'Sass',\n 'scala': 'Scala',\n 'scheme': 'Scheme',\n 'scss': 'SCSS',\n 'shaderlab': 'ShaderLab',\n 'shader': 'ShaderLab',\n 'shell': 'Shell',\n 'shellscript': 'Shell',\n 'smalltalk': 'Smalltalk',\n 'solidity': 'Solidity',\n 'sparql': 'SPARQL',\n 'sql': 'SQL',\n 'ssh-config': 'SSH Config',\n 'stata': 'Stata',\n 'stylus': 'Stylus',\n 'styl': 'Stylus',\n 'svelte': 'Svelte',\n 'swift': 'Swift',\n 'system-verilog': 'SystemVerilog',\n 'tasl': 'Tasl',\n 'tcl': 'Tcl',\n 'terraform': 'Terraform',\n 'tf': 'Terraform',\n 'toml': 'TOML',\n 'tsx': 'TSX',\n 'turtle': 'Turtle',\n 'twig': 'Twig',\n 'typescript': 'TypeScript',\n 'ts': 'TypeScript',\n 'v': 'V',\n 'vb': 'Visual Basic',\n 'verilog': 'Verilog',\n 'vhdl': 'VHDL',\n 'viml': 'VimL',\n 'vim': 'VimL',\n 'vue': 'Vue',\n 'vyper': 'Vyper',\n 'wasm': 'WebAssembly',\n 'wenyan': 'Wenyan',\n 'wgsl': 'WGSL',\n 'wolfram': 'Wolfram',\n 'xml': 'XML',\n 'xsl': 'XSL',\n 'yaml': 'YAML',\n 'yml': 'YAML',\n 'zenscript': 'ZenScript',\n 'zig': 'Zig',\n 'zsh': 'Zsh',\n };\n\n return langMap[lang.toLowerCase()] || lang;\n });\n\n private getHighlightTransformer(): ShikiTransformer {\n const highlights = this.highlightLines();\n if (!highlights || (Array.isArray(highlights) && highlights.length === 0)) {\n return {};\n }\n\n const isHighlighted = (line: number): boolean => {\n if (Array.isArray(highlights[0])) {\n return (highlights as number[][]).some(([start, end]) => line >= start && line <= end);\n } else {\n const [start, end] = highlights as number[];\n return line >= start && line <= end;\n }\n };\n\n return {\n line(node, line) {\n if (isHighlighted(line)) {\n this.addClassToHast(node, 'highlighted');\n }\n }\n };\n }\n\n async ngOnChanges(changes: SimpleChanges) {\n if (!this.code()) {\n this.content.set(null);\n return;\n }\n this.isLoading.set(true);\n try {\n const highlighted = await codeToHtml(\n this.code(),\n {\n lang: this.language(),\n theme: this.theme(),\n transformers: [diffTransformer, this.getHighlightTransformer()],\n diff: this.diff()\n } as any\n );\n this.content.set(this.sanitizer.bypassSecurityTrustHtml(highlighted));\n } catch (e) {\n // Fallback: raw code escaped inside pre\n const escaped = this.code()\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n const fallback = `<pre class=\"shiki\"><code>${escaped}</code></pre>`;\n this.content.set(this.sanitizer.bypassSecurityTrustHtml(fallback));\n console.error('CodeHighlighter error:', e);\n } finally {\n this.isLoading.set(false);\n }\n }\n\n copied = signal(false);\n private copyTimeout?: any;\n\n copyCode() {\n if (this.code()) {\n navigator.clipboard.writeText(this.code());\n this.copied.set(true);\n\n if (this.copyTimeout) {\n clearTimeout(this.copyTimeout);\n }\n\n this.copyTimeout = setTimeout(() => {\n this.copied.set(false);\n this.copyTimeout = undefined;\n }, 2000);\n }\n }\n}\n","<figure>\n @if (title()) {\n <figcaption>\n @if (title()) {\n <span class=\"title\">{{ title() }}</span>\n }\n </figcaption>\n }\n\n <div class=\"content relative\">\n @if (showLanguage()) {\n <div class=\"languageName\">{{ displayedLanguage() }}</div>\n }\n\n @if (showCopyButton()) {\n <span class=\"absolute top-2 right-2\">\n <button\n ngsIconButton\n (click)=\"copyCode()\"\n >\n <ngs-icon\n [name]=\"copied() ? 'fluent:checkmark-24-regular' : 'fluent:copy-24-regular'\"\n [class.text-green-500]=\"copied()\"\n />\n </button>\n </span>\n }\n\n <div>\n @if (content()) {\n <div [innerHTML]=\"content()\"></div>\n } @else {\n <div class=\"loading\">Loading…</div>\n }\n </div>\n </div>\n</figure>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngstarter-ui-components-code-highlighter.mjs","sources":["../../../projects/components/code-highlighter/src/code-highlighter/code-highlighter.ts","../../../projects/components/code-highlighter/src/code-highlighter/code-highlighter.html","../../../projects/components/code-highlighter/ngstarter-ui-components-code-highlighter.ts"],"sourcesContent":["import { Component, ChangeDetectionStrategy, input, OnChanges, SimpleChanges, signal, computed, inject, booleanAttribute } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\nimport { codeToHtml, ShikiTransformer } from 'shiki';\nimport { Button } from '@ngstarter-ui/components/button';\nimport { Icon } from '@ngstarter-ui/components/icon';\n\nconst removeDiffPrefix = (node: any) => {\n if (!node.children || node.children.length === 0) return;\n\n const firstChild = node.children[0];\n if (firstChild.type === 'element' && firstChild.children && firstChild.children.length > 0) {\n const textNode = firstChild.children[0];\n if (textNode.type === 'text' && (textNode.value.startsWith('+') || textNode.value.startsWith('-'))) {\n textNode.value = textNode.value.slice(1);\n if (textNode.value === '' && firstChild.children.length === 1) {\n node.children.shift();\n }\n }\n } else if (firstChild.type === 'text' && (firstChild.value.startsWith('+') || firstChild.value.startsWith('-'))) {\n firstChild.value = firstChild.value.slice(1);\n if (firstChild.value === '') {\n node.children.shift();\n }\n }\n};\n\nconst diffTransformer: ShikiTransformer = {\n line(node, line) {\n if (this.options.lang === 'diff' || (this.options as any).diff) {\n const lineTokens = this.tokens[line - 1];\n const text = lineTokens.map(token => token.content).join('');\n if (text.startsWith('+')) {\n this.addClassToHast(node, 'diff add');\n removeDiffPrefix(node);\n } else if (text.startsWith('-')) {\n this.addClassToHast(node, 'diff remove');\n removeDiffPrefix(node);\n }\n }\n }\n};\n\n@Component({\n selector: 'ngs-code-highlighter',\n standalone: true,\n imports: [Button, Icon],\n exportAs: 'ngsCodeHighlighter',\n templateUrl: './code-highlighter.html',\n styleUrl: './code-highlighter.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ngs-code-highlighter not-prose',\n '[class.appearance-bordered]': 'appearance() === \"bordered\"',\n '[class.appearance-none]': 'appearance() === \"none\"',\n }\n})\nexport class CodeHighlighter implements OnChanges {\n private sanitizer = inject(DomSanitizer);\n\n code = input.required<string>();\n language = input<string>('none');\n theme = input<string>('github-light');\n title = input<string | null>(null);\n appearance = input<'none' | 'bordered'>('bordered');\n diff = input<boolean>(false);\n highlightLines = input<number[] | number[][]>([]);\n showLanguage = input(false, { transform: booleanAttribute });\n showCopyButton = input(false, { transform: booleanAttribute });\n\n readonly content = signal<SafeHtml | null>(null);\n readonly isLoading = signal<boolean>(false);\n\n readonly displayedLanguage = computed(() => {\n const lang = this.language();\n if (!lang || lang === 'none') return '';\n\n const langMap: Record<string, string> = {\n '1c': '1C',\n 'abap': 'ABAP',\n 'actionscript-3': 'ActionScript 3',\n 'ada': 'Ada',\n 'apache': 'Apache',\n 'apex': 'Apex',\n 'apl': 'APL',\n 'applescript': 'AppleScript',\n 'ara': 'Ara',\n 'asm': 'Assembly',\n 'astro': 'Astro',\n 'awk': 'AWK',\n 'ballerina': 'Ballerina',\n 'bash': 'Bash',\n 'sh': 'Bash',\n 'batch': 'Batch',\n 'berry': 'Berry',\n 'bibtex': 'BibTeX',\n 'bicep': 'Bicep',\n 'blade': 'Blade',\n 'c': 'C',\n 'cadence': 'Cadence',\n 'clarity': 'Clarity',\n 'clojure': 'Clojure',\n 'clj': 'Clojure',\n 'cmake': 'CMake',\n 'cobol': 'COBOL',\n 'codeql': 'CodeQL',\n 'coffee': 'CoffeeScript',\n 'cpp': 'C++',\n 'csharp': 'C#',\n 'cs': 'C#',\n 'css': 'CSS',\n 'cue': 'CUE',\n 'cypher': 'Cypher',\n 'd': 'D',\n 'dart': 'Dart',\n 'dax': 'DAX',\n 'diff': 'Diff',\n 'docker': 'Docker',\n 'dockerfile': 'Dockerfile',\n 'dream-maker': 'Dream Maker',\n 'elixir': 'Elixir',\n 'elm': 'Elm',\n 'erb': 'ERB',\n 'erlang': 'Erlang',\n 'fish': 'Fish',\n 'fsharp': 'F#',\n 'fs': 'F#',\n 'gdresource': 'GDResource',\n 'gdscript': 'GDScript',\n 'gdshader': 'GDShader',\n 'gherkin': 'Gherkin',\n 'git-commit': 'Git Commit',\n 'git-rebase': 'Git Rebase',\n 'glimmer-js': 'Glimmer JS',\n 'gljs': 'Glimmer JS',\n 'glsl': 'GLSL',\n 'gnuplot': 'Gnuplot',\n 'go': 'Go',\n 'graphql': 'GraphQL',\n 'groovy': 'Groovy',\n 'hack': 'Hack',\n 'haml': 'Haml',\n 'handlebars': 'Handlebars',\n 'hbs': 'Handlebars',\n 'haskell': 'Haskell',\n 'hs': 'Haskell',\n 'hcl': 'HCL',\n 'hjson': 'Hjson',\n 'hlsl': 'HLSL',\n 'html': 'HTML',\n 'http': 'HTTP',\n 'imba': 'Imba',\n 'ini': 'INI',\n 'java': 'Java',\n 'javascript': 'JavaScript',\n 'js': 'JavaScript',\n 'jinja-html': 'Jinja HTML',\n 'jjson': 'JJSON',\n 'json': 'JSON',\n 'json5': 'JSON5',\n 'jsonc': 'JSONC',\n 'jsonnet': 'Jsonnet',\n 'jssm': 'JSSM',\n 'jsx': 'JSX',\n 'julia': 'Julia',\n 'kotlin': 'Kotlin',\n 'kt': 'Kotlin',\n 'kts': 'Kotlin',\n 'kusto': 'Kusto',\n 'latex': 'LaTeX',\n 'lat': 'LaTeX',\n 'tex': 'LaTeX',\n 'lean': 'Lean',\n 'less': 'Less',\n 'liquid': 'Liquid',\n 'lisp': 'Lisp',\n 'logo': 'Logo',\n 'lua': 'Lua',\n 'make': 'Make',\n 'makefile': 'Makefile',\n 'markdown': 'Markdown',\n 'md': 'Markdown',\n 'marko': 'Marko',\n 'matlab': 'MATLAB',\n 'mdx': 'MDX',\n 'mermaid': 'Mermaid',\n 'mipsasm': 'MIPS Assembly',\n 'mips': 'MIPS Assembly',\n 'mojolicious': 'Mojolicious',\n 'move': 'Move',\n 'narrat': 'Narrat',\n 'nextflow': 'Nextflow',\n 'nginx': 'Nginx',\n 'nim': 'Nim',\n 'nix': 'Nix',\n 'objective-c': 'Objective-C',\n 'objc': 'Objective-C',\n 'objective-cpp': 'Objective-C++',\n 'ocaml': 'OCaml',\n 'pascal': 'Pascal',\n 'perl': 'Perl',\n 'pl': 'Perl',\n 'php': 'PHP',\n 'plsql': 'PL/SQL',\n 'postcss': 'PostCSS',\n 'powerquery': 'PowerQuery',\n 'powershell': 'PowerShell',\n 'ps1': 'PowerShell',\n 'prisma': 'Prisma',\n 'prolog': 'Prolog',\n 'proto': 'Protocol Buffers',\n 'pug': 'Pug',\n 'jade': 'Pug',\n 'puppet': 'Puppet',\n 'purescript': 'PureScript',\n 'python': 'Python',\n 'py': 'Python',\n 'r': 'R',\n 'raku': 'Raku',\n 'razor': 'Razor',\n 'reg': 'Registry',\n 'rel': 'Rel',\n 'riscv': 'RISC-V',\n 'rst': 'reStructuredText',\n 'ruby': 'Ruby',\n 'rb': 'Ruby',\n 'rust': 'Rust',\n 'rs': 'Rust',\n 'sas': 'SAS',\n 'sass': 'Sass',\n 'scala': 'Scala',\n 'scheme': 'Scheme',\n 'scss': 'SCSS',\n 'shaderlab': 'ShaderLab',\n 'shader': 'ShaderLab',\n 'shell': 'Shell',\n 'shellscript': 'Shell',\n 'smalltalk': 'Smalltalk',\n 'solidity': 'Solidity',\n 'sparql': 'SPARQL',\n 'sql': 'SQL',\n 'ssh-config': 'SSH Config',\n 'stata': 'Stata',\n 'stylus': 'Stylus',\n 'styl': 'Stylus',\n 'svelte': 'Svelte',\n 'swift': 'Swift',\n 'system-verilog': 'SystemVerilog',\n 'tasl': 'Tasl',\n 'tcl': 'Tcl',\n 'terraform': 'Terraform',\n 'tf': 'Terraform',\n 'toml': 'TOML',\n 'tsx': 'TSX',\n 'turtle': 'Turtle',\n 'twig': 'Twig',\n 'typescript': 'TypeScript',\n 'ts': 'TypeScript',\n 'v': 'V',\n 'vb': 'Visual Basic',\n 'verilog': 'Verilog',\n 'vhdl': 'VHDL',\n 'viml': 'VimL',\n 'vim': 'VimL',\n 'vue': 'Vue',\n 'vyper': 'Vyper',\n 'wasm': 'WebAssembly',\n 'wenyan': 'Wenyan',\n 'wgsl': 'WGSL',\n 'wolfram': 'Wolfram',\n 'xml': 'XML',\n 'xsl': 'XSL',\n 'yaml': 'YAML',\n 'yml': 'YAML',\n 'zenscript': 'ZenScript',\n 'zig': 'Zig',\n 'zsh': 'Zsh',\n };\n\n return langMap[lang.toLowerCase()] || lang;\n });\n\n private getHighlightTransformer(): ShikiTransformer {\n const highlights = this.highlightLines();\n if (!highlights || (Array.isArray(highlights) && highlights.length === 0)) {\n return {};\n }\n\n const isHighlighted = (line: number): boolean => {\n if (Array.isArray(highlights[0])) {\n return (highlights as number[][]).some(([start, end]) => line >= start && line <= end);\n } else {\n const [start, end] = highlights as number[];\n return line >= start && line <= end;\n }\n };\n\n return {\n line(node, line) {\n if (isHighlighted(line)) {\n this.addClassToHast(node, 'highlighted');\n }\n }\n };\n }\n\n async ngOnChanges(changes: SimpleChanges) {\n const code = this.code() ?? '';\n\n if (code.length === 0) {\n this.isLoading.set(false);\n this.content.set(this.sanitizer.bypassSecurityTrustHtml('<pre class=\"shiki\"><code></code></pre>'));\n return;\n }\n\n this.isLoading.set(true);\n try {\n const highlighted = await codeToHtml(\n code,\n {\n lang: this.language(),\n theme: this.theme(),\n transformers: [diffTransformer, this.getHighlightTransformer()],\n diff: this.diff()\n } as any\n );\n this.content.set(this.sanitizer.bypassSecurityTrustHtml(highlighted));\n } catch (e) {\n // Fallback: raw code escaped inside pre\n const escaped = code\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n const fallback = `<pre class=\"shiki\"><code>${escaped}</code></pre>`;\n this.content.set(this.sanitizer.bypassSecurityTrustHtml(fallback));\n console.error('CodeHighlighter error:', e);\n } finally {\n this.isLoading.set(false);\n }\n }\n\n copied = signal(false);\n private copyTimeout?: any;\n\n copyCode() {\n if (this.code()) {\n navigator.clipboard.writeText(this.code());\n this.copied.set(true);\n\n if (this.copyTimeout) {\n clearTimeout(this.copyTimeout);\n }\n\n this.copyTimeout = setTimeout(() => {\n this.copied.set(false);\n this.copyTimeout = undefined;\n }, 2000);\n }\n }\n}\n","<figure class=\"h-full\">\n @if (title()) {\n <figcaption>\n @if (title()) {\n <span class=\"title\">{{ title() }}</span>\n }\n </figcaption>\n }\n\n <div class=\"content relative h-full\">\n @if (showLanguage()) {\n <div class=\"languageName\">{{ displayedLanguage() }}</div>\n }\n\n @if (showCopyButton()) {\n <span class=\"absolute top-2 right-2\">\n <button\n ngsIconButton\n (click)=\"copyCode()\"\n >\n <ngs-icon\n [name]=\"copied() ? 'fluent:checkmark-24-regular' : 'fluent:copy-24-regular'\"\n [class.text-green-500]=\"copied()\"\n />\n </button>\n </span>\n }\n\n <div>\n @if (content()) {\n <div [innerHTML]=\"content()\"></div>\n } @else if (isLoading()) {\n <div class=\"loading\">Loading…</div>\n }\n </div>\n </div>\n</figure>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|