@unipin/angular-applet 21.5.0 → 21.6.1
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/fesm2022/unipin-angular-applet-accordion.mjs +12 -12
- package/fesm2022/unipin-angular-applet-accordion.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-alert-dialog.mjs +6 -6
- package/fesm2022/unipin-angular-applet-alert-dialog.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-alert.mjs +9 -9
- package/fesm2022/unipin-angular-applet-alert.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-approval.mjs +119 -10
- package/fesm2022/unipin-angular-applet-approval.mjs.map +1 -1
- package/fesm2022/{unipin-angular-applet-audit-audit-modal.component-Y61VDaze.mjs → unipin-angular-applet-audit-audit-modal.component-BYf0y6cO.mjs} +4 -4
- package/fesm2022/{unipin-angular-applet-audit-audit-modal.component-Y61VDaze.mjs.map → unipin-angular-applet-audit-audit-modal.component-BYf0y6cO.mjs.map} +1 -1
- package/fesm2022/unipin-angular-applet-audit.mjs +7 -7
- package/fesm2022/unipin-angular-applet-audit.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-auth.mjs +21 -21
- package/fesm2022/unipin-angular-applet-auth.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-avatar.mjs +3 -3
- package/fesm2022/unipin-angular-applet-avatar.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-badge.mjs +3 -3
- package/fesm2022/unipin-angular-applet-badge.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-buttons.mjs +6 -6
- package/fesm2022/unipin-angular-applet-buttons.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-calendar.mjs +12 -12
- package/fesm2022/unipin-angular-applet-calendar.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-collapsible.mjs +9 -9
- package/fesm2022/unipin-angular-applet-collapsible.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-common.mjs +24 -24
- package/fesm2022/unipin-angular-applet-common.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-containers.mjs +12 -12
- package/fesm2022/unipin-angular-applet-containers.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-dialog.mjs +21 -21
- package/fesm2022/unipin-angular-applet-dialog.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-forms.mjs +165 -107
- package/fesm2022/unipin-angular-applet-forms.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-froala.mjs +3 -3
- package/fesm2022/unipin-angular-applet-froala.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-grids.mjs +20 -14
- package/fesm2022/unipin-angular-applet-grids.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-infinite-scroll.mjs +3 -3
- package/fesm2022/unipin-angular-applet-infinite-scroll.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-json-viewer.mjs +3 -3
- package/fesm2022/unipin-angular-applet-json-viewer.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-kbd.mjs +3 -3
- package/fesm2022/unipin-angular-applet-kbd.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-loading-dialog.mjs +6 -6
- package/fesm2022/unipin-angular-applet-loading-dialog.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-markdown.mjs +13 -10
- package/fesm2022/unipin-angular-applet-markdown.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-popover.mjs +15 -15
- package/fesm2022/unipin-angular-applet-popover.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-progress-bar.mjs +3 -3
- package/fesm2022/unipin-angular-applet-progress-bar.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-skeleton.mjs +3 -3
- package/fesm2022/unipin-angular-applet-skeleton.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-spinner.mjs +3 -3
- package/fesm2022/unipin-angular-applet-spinner.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-stepper.mjs +6 -6
- package/fesm2022/unipin-angular-applet-stepper.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-swipeable.mjs +12 -12
- package/fesm2022/unipin-angular-applet-swipeable.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-tabs.mjs +9 -9
- package/fesm2022/unipin-angular-applet-tabs.mjs.map +1 -1
- package/fesm2022/unipin-angular-applet-tooltip.mjs +3 -3
- package/fesm2022/unipin-angular-applet-tooltip.mjs.map +1 -1
- package/package.json +1 -1
- package/types/unipin-angular-applet-approval.d.ts +42 -11
- package/types/unipin-angular-applet-forms.d.ts +27 -4
|
@@ -29,8 +29,8 @@ class JsonViewerComponent {
|
|
|
29
29
|
return up('block overflow-hidden', this.inlineClass());
|
|
30
30
|
}, ...(ngDevMode ? [{ debugName: "_computedClass" }] : /* istanbul ignore next */ []));
|
|
31
31
|
}
|
|
32
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
33
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.
|
|
32
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: JsonViewerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
33
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.11", type: JsonViewerComponent, isStandalone: true, selector: "up-json-viewer", inputs: { json: { classPropertyName: "json", publicName: "json", isSignal: true, isRequired: true, transformFunction: null }, expanded: { classPropertyName: "expanded", publicName: "expanded", isSignal: true, isRequired: false, transformFunction: null }, depth: { classPropertyName: "depth", publicName: "depth", isSignal: true, isRequired: false, transformFunction: null }, inlineClass: { classPropertyName: "inlineClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "_computedClass()" } }, ngImport: i0, template: `
|
|
34
34
|
<div class="w-full selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] focus-visible:outline-none">
|
|
35
35
|
<ngx-json-viewer
|
|
36
36
|
[json]="json()"
|
|
@@ -40,7 +40,7 @@ class JsonViewerComponent {
|
|
|
40
40
|
</div>
|
|
41
41
|
`, isInline: true, dependencies: [{ kind: "ngmodule", type: NgxJsonViewerModule }, { kind: "component", type: i1.NgxJsonViewerComponent, selector: "ngx-json-viewer", inputs: ["json", "expanded", "depth", "_currentDepth"] }] }); }
|
|
42
42
|
}
|
|
43
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
43
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: JsonViewerComponent, decorators: [{
|
|
44
44
|
type: Component,
|
|
45
45
|
args: [{
|
|
46
46
|
selector: 'up-json-viewer',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unipin-angular-applet-json-viewer.mjs","sources":["../../../projects/unipin-angular/json-viewer/json-viewer.component.ts","../../../projects/unipin-angular/json-viewer/unipin-angular-applet-json-viewer.ts"],"sourcesContent":["import { Component, computed, input, InputSignal } from '@angular/core';\nimport { ClassValue } from 'clsx';\nimport { NgxJsonViewerModule } from 'ngx-json-viewer';\nimport { up } from '@unipin/angular-applet/common';\n\n\n@Component({\n selector: 'up-json-viewer',\n imports: [\n NgxJsonViewerModule\n ],\n host: {\n '[class]': '_computedClass()',\n },\n template: `\n <div class=\"w-full selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] focus-visible:outline-none\">\n <ngx-json-viewer\n [json]=\"json()\"\n [depth]=\"depth()\"\n [expanded]=\"expanded()\"\n />\n </div>\n `\n})\nexport class JsonViewerComponent {\n \n /**\n * Input for the JSON data to be displayed.\n *\n * @type {InputSignal<Record<string, any>>}\n */\n public readonly json: InputSignal<Record<string, any>> = input.required<Record<string, any>>();\n\n /**\n * Input for if the JSON data should be expanded by default.\n *\n * @type {InputSignal<boolean>}\n */\n public readonly expanded: InputSignal<boolean> = input<boolean>(false);\n\n /**\n * Input for the depth of the JSON data to be displayed.\n *\n * @type {InputSignal<number>}\n */\n public readonly depth: InputSignal<number> = input<number>(2);\n\n public readonly inlineClass = input<ClassValue>('', { alias: 'class' });\n\n protected readonly _computedClass = computed(\n () => {\n return up(\n 'block overflow-hidden',\n this.inlineClass(),\n );\n }\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;MAwBa,mBAAmB,CAAA;AAlBhC,IAAA,WAAA,GAAA;AAoBE;;;;AAIG;AACa,QAAA,IAAA,CAAA,IAAI,GAAqC,KAAK,CAAC,QAAQ,0EAAuB;AAE9F;;;;AAIG;AACa,QAAA,IAAA,CAAA,QAAQ,GAAyB,KAAK,CAAU,KAAK,+EAAC;AAEtE;;;;AAIG;AACa,QAAA,IAAA,CAAA,KAAK,GAAwB,KAAK,CAAS,CAAC,4EAAC;QAE7C,IAAA,CAAA,WAAW,GAAG,KAAK,CAAa,EAAE,mFAAI,KAAK,EAAE,OAAO,EAAA,CAAG;AAEpD,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAC1C,MAAK;YACH,OAAO,EAAE,CACP,uBAAuB,EACvB,IAAI,CAAC,WAAW,EAAE,CACnB;AACH,QAAA,CAAC,qFACF;AACF,IAAA
|
|
1
|
+
{"version":3,"file":"unipin-angular-applet-json-viewer.mjs","sources":["../../../projects/unipin-angular/json-viewer/json-viewer.component.ts","../../../projects/unipin-angular/json-viewer/unipin-angular-applet-json-viewer.ts"],"sourcesContent":["import { Component, computed, input, InputSignal } from '@angular/core';\nimport { ClassValue } from 'clsx';\nimport { NgxJsonViewerModule } from 'ngx-json-viewer';\nimport { up } from '@unipin/angular-applet/common';\n\n\n@Component({\n selector: 'up-json-viewer',\n imports: [\n NgxJsonViewerModule\n ],\n host: {\n '[class]': '_computedClass()',\n },\n template: `\n <div class=\"w-full selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] focus-visible:outline-none\">\n <ngx-json-viewer\n [json]=\"json()\"\n [depth]=\"depth()\"\n [expanded]=\"expanded()\"\n />\n </div>\n `\n})\nexport class JsonViewerComponent {\n \n /**\n * Input for the JSON data to be displayed.\n *\n * @type {InputSignal<Record<string, any>>}\n */\n public readonly json: InputSignal<Record<string, any>> = input.required<Record<string, any>>();\n\n /**\n * Input for if the JSON data should be expanded by default.\n *\n * @type {InputSignal<boolean>}\n */\n public readonly expanded: InputSignal<boolean> = input<boolean>(false);\n\n /**\n * Input for the depth of the JSON data to be displayed.\n *\n * @type {InputSignal<number>}\n */\n public readonly depth: InputSignal<number> = input<number>(2);\n\n public readonly inlineClass = input<ClassValue>('', { alias: 'class' });\n\n protected readonly _computedClass = computed(\n () => {\n return up(\n 'block overflow-hidden',\n this.inlineClass(),\n );\n }\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;MAwBa,mBAAmB,CAAA;AAlBhC,IAAA,WAAA,GAAA;AAoBE;;;;AAIG;AACa,QAAA,IAAA,CAAA,IAAI,GAAqC,KAAK,CAAC,QAAQ,0EAAuB;AAE9F;;;;AAIG;AACa,QAAA,IAAA,CAAA,QAAQ,GAAyB,KAAK,CAAU,KAAK,+EAAC;AAEtE;;;;AAIG;AACa,QAAA,IAAA,CAAA,KAAK,GAAwB,KAAK,CAAS,CAAC,4EAAC;QAE7C,IAAA,CAAA,WAAW,GAAG,KAAK,CAAa,EAAE,mFAAI,KAAK,EAAE,OAAO,EAAA,CAAG;AAEpD,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAC1C,MAAK;YACH,OAAO,EAAE,CACP,uBAAuB,EACvB,IAAI,CAAC,WAAW,EAAE,CACnB;AACH,QAAA,CAAC,qFACF;AACF,IAAA;+GAjCY,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,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,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAVpB;;;;;;;;AAQT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAbC,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,OAAA,EAAA,eAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAeV,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAlB/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,OAAO,EAAE;wBACP;AACD,qBAAA;AACD,oBAAA,IAAI,EAAE;AACJ,wBAAA,SAAS,EAAE,kBAAkB;AAC9B,qBAAA;AACD,oBAAA,QAAQ,EAAE;;;;;;;;AAQT,EAAA;AACF,iBAAA;;;ACvBD;;AAEG;;;;"}
|
|
@@ -9,10 +9,10 @@ class UpKbdDirective {
|
|
|
9
9
|
return up('bg-muted text-muted-foreground border border-border pointer-events-none inline-flex items-center gap-1 h-5 w-fit min-w-5 justify-center rounded-sm px-1 font-sans text-xs font-medium select-none', `[&_ng-icon:not([class*='size-'])]:size-3`, '[[data-slot=tooltip-content]_&]:bg-background/20 [[data-slot=tooltip-content]_&]:text-background dark:[[data-slot=tooltip-content]_&]:bg-background/10', this.inlineClass());
|
|
10
10
|
}, ...(ngDevMode ? [{ debugName: "_computedClass" }] : /* istanbul ignore next */ []));
|
|
11
11
|
}
|
|
12
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
13
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.
|
|
12
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: UpKbdDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
13
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.11", type: UpKbdDirective, isStandalone: true, selector: "[upKbd]", inputs: { inlineClass: { classPropertyName: "inlineClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "_computedClass()" } }, exportAs: ["upKbd"], ngImport: i0 }); }
|
|
14
14
|
}
|
|
15
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
15
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: UpKbdDirective, decorators: [{
|
|
16
16
|
type: Directive,
|
|
17
17
|
args: [{
|
|
18
18
|
exportAs: 'upKbd',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unipin-angular-applet-kbd.mjs","sources":["../../../projects/unipin-angular/kbd/kbd.directive.ts","../../../projects/unipin-angular/kbd/unipin-angular-applet-kbd.ts"],"sourcesContent":["import { computed, Directive, input } from '@angular/core';\nimport { ClassValue } from 'clsx';\nimport { up } from '@unipin/angular-applet/common';\n\n\n@Directive({\n exportAs: 'upKbd',\n selector: '[upKbd]',\n host: {\n '[class]': '_computedClass()',\n }\n})\nexport class UpKbdDirective {\n\n public readonly inlineClass = input<ClassValue>('', { alias: 'class' });\n\n protected readonly _computedClass = computed(\n () => {\n return up(\n 'bg-muted text-muted-foreground border border-border pointer-events-none inline-flex items-center gap-1 h-5 w-fit min-w-5 justify-center rounded-sm px-1 font-sans text-xs font-medium select-none',\n `[&_ng-icon:not([class*='size-'])]:size-3`,\n '[[data-slot=tooltip-content]_&]:bg-background/20 [[data-slot=tooltip-content]_&]:text-background dark:[[data-slot=tooltip-content]_&]:bg-background/10',\n this.inlineClass()\n );\n }\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;MAYa,cAAc,CAAA;AAP3B,IAAA,WAAA,GAAA;QASkB,IAAA,CAAA,WAAW,GAAG,KAAK,CAAa,EAAE,mFAAI,KAAK,EAAE,OAAO,EAAA,CAAG;AAEpD,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAC1C,MAAK;AACH,YAAA,OAAO,EAAE,CACP,mMAAmM,EACnM,CAAA,wCAAA,CAA0C,EAC1C,wJAAwJ,EACxJ,IAAI,CAAC,WAAW,EAAE,CACnB;AACH,QAAA,CAAC,qFACF;AACF,IAAA
|
|
1
|
+
{"version":3,"file":"unipin-angular-applet-kbd.mjs","sources":["../../../projects/unipin-angular/kbd/kbd.directive.ts","../../../projects/unipin-angular/kbd/unipin-angular-applet-kbd.ts"],"sourcesContent":["import { computed, Directive, input } from '@angular/core';\nimport { ClassValue } from 'clsx';\nimport { up } from '@unipin/angular-applet/common';\n\n\n@Directive({\n exportAs: 'upKbd',\n selector: '[upKbd]',\n host: {\n '[class]': '_computedClass()',\n }\n})\nexport class UpKbdDirective {\n\n public readonly inlineClass = input<ClassValue>('', { alias: 'class' });\n\n protected readonly _computedClass = computed(\n () => {\n return up(\n 'bg-muted text-muted-foreground border border-border pointer-events-none inline-flex items-center gap-1 h-5 w-fit min-w-5 justify-center rounded-sm px-1 font-sans text-xs font-medium select-none',\n `[&_ng-icon:not([class*='size-'])]:size-3`,\n '[[data-slot=tooltip-content]_&]:bg-background/20 [[data-slot=tooltip-content]_&]:text-background dark:[[data-slot=tooltip-content]_&]:bg-background/10',\n this.inlineClass()\n );\n }\n );\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;MAYa,cAAc,CAAA;AAP3B,IAAA,WAAA,GAAA;QASkB,IAAA,CAAA,WAAW,GAAG,KAAK,CAAa,EAAE,mFAAI,KAAK,EAAE,OAAO,EAAA,CAAG;AAEpD,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAC1C,MAAK;AACH,YAAA,OAAO,EAAE,CACP,mMAAmM,EACnM,CAAA,wCAAA,CAA0C,EAC1C,wJAAwJ,EACxJ,IAAI,CAAC,WAAW,EAAE,CACnB;AACH,QAAA,CAAC,qFACF;AACF,IAAA;+GAdY,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAd,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,kBAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA,OAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAP1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,OAAO;AACjB,oBAAA,QAAQ,EAAE,SAAS;AACnB,oBAAA,IAAI,EAAE;AACJ,wBAAA,SAAS,EAAE,kBAAkB;AAC9B;AACF,iBAAA;;;ACXD;;AAEG;;;;"}
|
|
@@ -56,8 +56,8 @@ class UpLoadingDialogComponent {
|
|
|
56
56
|
};
|
|
57
57
|
});
|
|
58
58
|
}
|
|
59
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
60
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
59
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: UpLoadingDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
60
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.11", type: UpLoadingDialogComponent, isStandalone: true, selector: "up-loading-dialog", host: { properties: { "attr.data-state": "state()" }, classAttribute: "\n grid relative gap-6 bg-white rounded-xl shadow-lg \n [animation-duration:200] data-[state=open]:animate-in data-[state=closed]:animate-out \n data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 \n data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 \n data-[state=closed]:slide-out-to-top-[2%] data-[state=open]:slide-in-from-top-[2%] \n w-full p-6 max-w-[calc(100%-2rem)] mx-auto\n md:w-full md:min-w-120 md:max-w-130\n overflow-hidden border border-border\n " }, providers: [
|
|
61
61
|
provideIcons({
|
|
62
62
|
matWarningRound
|
|
63
63
|
})
|
|
@@ -124,7 +124,7 @@ class UpLoadingDialogComponent {
|
|
|
124
124
|
</div>
|
|
125
125
|
`, isInline: true, dependencies: [{ kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: UpButtonDirective, selector: "[upButton]", inputs: ["size", "variant", "class"], exportAs: ["upButton"] }, { kind: "directive", type: UpProgressBarDirective, selector: "[upProgressBar]", inputs: ["max", "progress", "class"], exportAs: ["upProgressBar"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
126
126
|
}
|
|
127
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
127
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: UpLoadingDialogComponent, decorators: [{
|
|
128
128
|
type: Component,
|
|
129
129
|
args: [{
|
|
130
130
|
selector: 'up-loading-dialog',
|
|
@@ -233,10 +233,10 @@ class UpLoadingDialogController {
|
|
|
233
233
|
}
|
|
234
234
|
});
|
|
235
235
|
}
|
|
236
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
237
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
236
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: UpLoadingDialogController, deps: [{ token: i1.UpDialogService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
237
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: UpLoadingDialogController, providedIn: 'root' }); }
|
|
238
238
|
}
|
|
239
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
239
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: UpLoadingDialogController, decorators: [{
|
|
240
240
|
type: Injectable,
|
|
241
241
|
args: [{
|
|
242
242
|
providedIn: 'root'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unipin-angular-applet-loading-dialog.mjs","sources":["../../../projects/unipin-angular/loading-dialog/components/loading-dialog.component.ts","../../../projects/unipin-angular/loading-dialog/services/loading-dialog-controller.service.ts","../../../projects/unipin-angular/loading-dialog/unipin-angular-applet-loading-dialog.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, inject, OnInit, signal } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { NgIcon, provideIcons } from '@ng-icons/core';\nimport { matWarningRound } from '@ng-icons/material-icons/round';\nimport { UpButtonDirective } from '@unipin/angular-applet/buttons';\nimport { UpProgressBarDirective } from '@unipin/angular-applet/progress-bar';\nimport { injectDialogContext, UpDialogRef } from '@unipin/angular-applet/dialog';\nimport { LoadingDialogOptions } from '../types/loading-dialog-options.type';\n\n\n@Component({\n selector: 'up-loading-dialog',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.data-state]': 'state()',\n 'class': `\n grid relative gap-6 bg-white rounded-xl shadow-lg \n [animation-duration:200] data-[state=open]:animate-in data-[state=closed]:animate-out \n data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 \n data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 \n data-[state=closed]:slide-out-to-top-[2%] data-[state=open]:slide-in-from-top-[2%] \n w-full p-6 max-w-[calc(100%-2rem)] mx-auto\n md:w-full md:min-w-120 md:max-w-130\n overflow-hidden border border-border\n `,\n },\n providers: [\n provideIcons(\n {\n matWarningRound\n }\n )\n ],\n imports: [\n NgIcon,\n UpButtonDirective,\n UpProgressBarDirective,\n ],\n template: `\n <div class=\"border-b border-border pb-4\">\n <h3 class=\"text-lg font-semibold text-gray-900 flex items-center gap-3\">\n Processing Request\n </h3>\n </div>\n\n <div class=\"space-y-2\">\n <div class=\"flex items-center justify-between text-sm\">\n <span class=\"font-medium\">Progress</span>\n \n <span class=\"font-semibold\">\n {{ requestState().progress }}/{{ requestState().totalProgress }}\n </span>\n </div>\n \n <span \n upProgressBar \n class=\"h-2.5 w-full bg-gray-200 rounded-full overflow-hidden\"\n [max]=\"requestState().totalProgress\" \n [progress]=\"requestState().progress\"\n >\n </span>\n </div>\n\n @if (\n opts.showError && \n requestState().errorMessages.length > 0 && \n requestState().isDone\n ) {\n <div class=\"space-y-3 mt-4\">\n <div class=\"flex items-center gap-2 text-yellow-500\">\n <ng-icon name=\"matWarningRound\"/>\n \n <h4 class=\"text-sm font-medium text-gray-700\">\n Issues ({{ requestState().errorMessages.length }})\n </h4>\n </div>\n \n <div class=\"max-h-24 overflow-y-auto bg-gray-50 rounded-md border border-border\">\n <ul>\n @for (err of requestState().errorMessages; track $index) {\n <li class=\"px-3 py-2 text-xs bg-red-50 border-l-4 border-red-400 text-destructive\">\n {{err}}\n </li>\n }\n </ul>\n </div>\n </div>\n }\n\n <div class=\"flex flex-col-reverse gap-3 sm:flex-row sm:justify-end pt-2\">\n <button\n upButton\n class=\"flex-1 sm:flex-none sm:min-w-[120px] px-4 py-2.5 text-sm font-medium\"\n [disabled]=\"!requestState().isDone\"\n (click)=\"dialogRef.close()\"\n >\n {{ requestState().isDone? 'Done' : 'Processing...' }}\n </button>\n </div>\n `\n})\nexport class UpLoadingDialogComponent implements OnInit {\n \n public readonly dialogRef = inject(UpDialogRef);\n public readonly opts = injectDialogContext<LoadingDialogOptions>();\n \n public readonly requestState = signal(\n {\n progress: 0,\n isDone: false,\n totalProgress: 0,\n errorMessages: [] as string[],\n }\n );\n public readonly state = computed(() => this.dialogRef?.state()?? 'closed');\n \n public ngOnInit(): void{\n this.executeTasks();\n }\n\n protected async executeTasks(): Promise<void>{\n const { serviceCalls } = this.opts;\n\n this.requestState.set(\n {\n progress: 0,\n isDone: false,\n errorMessages: [],\n totalProgress: serviceCalls.length,\n }\n );\n\n for (const [i, service] of serviceCalls.entries()) {\n try {\n await firstValueFrom(service);\n } catch (err: unknown) {\n this.handleError(i, err);\n } finally {\n this.requestState.update((s) => ({ ...s, progress: s.progress + 1 }));\n }\n }\n this.requestState.update((s) => ({ ...s, isDone: true }));\n }\n\n protected handleError(i: number, err: unknown): void{\n const message = err instanceof Error? err.message : String(err);\n this.requestState.update(\n (s) => {\n return {\n ...s,\n errorMessages: [\n ...s.errorMessages, \n `Request #${i + 1} failed: ${message}`\n ]\n };\n }\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { UpDialogRef, UpDialogService } from '@unipin/angular-applet/dialog';\nimport { LoadingDialogOptions } from '../types/loading-dialog-options.type';\nimport { UpLoadingDialogComponent } from '../components/loading-dialog.component';\n\n@Injectable({ \n providedIn: 'root' \n})\nexport class UpLoadingDialogController {\n\n constructor(\n protected readonly dialog: UpDialogService\n ) { }\n\n public show(options: LoadingDialogOptions): UpDialogRef{\n return this.dialog.open(\n {\n context: options,\n content: UpLoadingDialogComponent,\n options: {\n hasBackdrop: true,\n disableClose: true,\n closeOnBackdropClick: false,\n closeOnOutsidePointerEvents: false\n }\n }\n );\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"unipin-angular-applet-loading-dialog.mjs","sources":["../../../projects/unipin-angular/loading-dialog/components/loading-dialog.component.ts","../../../projects/unipin-angular/loading-dialog/services/loading-dialog-controller.service.ts","../../../projects/unipin-angular/loading-dialog/unipin-angular-applet-loading-dialog.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, computed, inject, OnInit, signal } from '@angular/core';\nimport { firstValueFrom } from 'rxjs';\nimport { NgIcon, provideIcons } from '@ng-icons/core';\nimport { matWarningRound } from '@ng-icons/material-icons/round';\nimport { UpButtonDirective } from '@unipin/angular-applet/buttons';\nimport { UpProgressBarDirective } from '@unipin/angular-applet/progress-bar';\nimport { injectDialogContext, UpDialogRef } from '@unipin/angular-applet/dialog';\nimport { LoadingDialogOptions } from '../types/loading-dialog-options.type';\n\n\n@Component({\n selector: 'up-loading-dialog',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[attr.data-state]': 'state()',\n 'class': `\n grid relative gap-6 bg-white rounded-xl shadow-lg \n [animation-duration:200] data-[state=open]:animate-in data-[state=closed]:animate-out \n data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 \n data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 \n data-[state=closed]:slide-out-to-top-[2%] data-[state=open]:slide-in-from-top-[2%] \n w-full p-6 max-w-[calc(100%-2rem)] mx-auto\n md:w-full md:min-w-120 md:max-w-130\n overflow-hidden border border-border\n `,\n },\n providers: [\n provideIcons(\n {\n matWarningRound\n }\n )\n ],\n imports: [\n NgIcon,\n UpButtonDirective,\n UpProgressBarDirective,\n ],\n template: `\n <div class=\"border-b border-border pb-4\">\n <h3 class=\"text-lg font-semibold text-gray-900 flex items-center gap-3\">\n Processing Request\n </h3>\n </div>\n\n <div class=\"space-y-2\">\n <div class=\"flex items-center justify-between text-sm\">\n <span class=\"font-medium\">Progress</span>\n \n <span class=\"font-semibold\">\n {{ requestState().progress }}/{{ requestState().totalProgress }}\n </span>\n </div>\n \n <span \n upProgressBar \n class=\"h-2.5 w-full bg-gray-200 rounded-full overflow-hidden\"\n [max]=\"requestState().totalProgress\" \n [progress]=\"requestState().progress\"\n >\n </span>\n </div>\n\n @if (\n opts.showError && \n requestState().errorMessages.length > 0 && \n requestState().isDone\n ) {\n <div class=\"space-y-3 mt-4\">\n <div class=\"flex items-center gap-2 text-yellow-500\">\n <ng-icon name=\"matWarningRound\"/>\n \n <h4 class=\"text-sm font-medium text-gray-700\">\n Issues ({{ requestState().errorMessages.length }})\n </h4>\n </div>\n \n <div class=\"max-h-24 overflow-y-auto bg-gray-50 rounded-md border border-border\">\n <ul>\n @for (err of requestState().errorMessages; track $index) {\n <li class=\"px-3 py-2 text-xs bg-red-50 border-l-4 border-red-400 text-destructive\">\n {{err}}\n </li>\n }\n </ul>\n </div>\n </div>\n }\n\n <div class=\"flex flex-col-reverse gap-3 sm:flex-row sm:justify-end pt-2\">\n <button\n upButton\n class=\"flex-1 sm:flex-none sm:min-w-[120px] px-4 py-2.5 text-sm font-medium\"\n [disabled]=\"!requestState().isDone\"\n (click)=\"dialogRef.close()\"\n >\n {{ requestState().isDone? 'Done' : 'Processing...' }}\n </button>\n </div>\n `\n})\nexport class UpLoadingDialogComponent implements OnInit {\n \n public readonly dialogRef = inject(UpDialogRef);\n public readonly opts = injectDialogContext<LoadingDialogOptions>();\n \n public readonly requestState = signal(\n {\n progress: 0,\n isDone: false,\n totalProgress: 0,\n errorMessages: [] as string[],\n }\n );\n public readonly state = computed(() => this.dialogRef?.state()?? 'closed');\n \n public ngOnInit(): void{\n this.executeTasks();\n }\n\n protected async executeTasks(): Promise<void>{\n const { serviceCalls } = this.opts;\n\n this.requestState.set(\n {\n progress: 0,\n isDone: false,\n errorMessages: [],\n totalProgress: serviceCalls.length,\n }\n );\n\n for (const [i, service] of serviceCalls.entries()) {\n try {\n await firstValueFrom(service);\n } catch (err: unknown) {\n this.handleError(i, err);\n } finally {\n this.requestState.update((s) => ({ ...s, progress: s.progress + 1 }));\n }\n }\n this.requestState.update((s) => ({ ...s, isDone: true }));\n }\n\n protected handleError(i: number, err: unknown): void{\n const message = err instanceof Error? err.message : String(err);\n this.requestState.update(\n (s) => {\n return {\n ...s,\n errorMessages: [\n ...s.errorMessages, \n `Request #${i + 1} failed: ${message}`\n ]\n };\n }\n );\n }\n}\n","import { Injectable } from '@angular/core';\nimport { UpDialogRef, UpDialogService } from '@unipin/angular-applet/dialog';\nimport { LoadingDialogOptions } from '../types/loading-dialog-options.type';\nimport { UpLoadingDialogComponent } from '../components/loading-dialog.component';\n\n@Injectable({ \n providedIn: 'root' \n})\nexport class UpLoadingDialogController {\n\n constructor(\n protected readonly dialog: UpDialogService\n ) { }\n\n public show(options: LoadingDialogOptions): UpDialogRef{\n return this.dialog.open(\n {\n context: options,\n content: UpLoadingDialogComponent,\n options: {\n hasBackdrop: true,\n disableClose: true,\n closeOnBackdropClick: false,\n closeOnOutsidePointerEvents: false\n }\n }\n );\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -336,16 +336,19 @@ class UpMarkdownDirective {
|
|
|
336
336
|
this.markdown.set(native.innerHTML);
|
|
337
337
|
this.renderer.setProperty(native, 'innerHTML', marked(this.markdown()
|
|
338
338
|
.replace(/>/g, '>')
|
|
339
|
-
.replace(/\+\+(.*?)\+\+/g, '<u>$1</u>')
|
|
339
|
+
.replace(/\+\+(.*?)\+\+/g, '<u>$1</u>'), {
|
|
340
|
+
gfm: true,
|
|
341
|
+
breaks: true
|
|
342
|
+
}));
|
|
340
343
|
});
|
|
341
344
|
}
|
|
342
345
|
ngOnDestroy() {
|
|
343
346
|
this.observer.disconnect();
|
|
344
347
|
}
|
|
345
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
346
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.
|
|
348
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: UpMarkdownDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
349
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.11", type: UpMarkdownDirective, isStandalone: true, selector: "[upMarkdown]", host: { properties: { "class": "class" } }, exportAs: ["upMarkdown"], ngImport: i0 }); }
|
|
347
350
|
}
|
|
348
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
351
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: UpMarkdownDirective, decorators: [{
|
|
349
352
|
type: Directive,
|
|
350
353
|
args: [{
|
|
351
354
|
exportAs: 'upMarkdown',
|
|
@@ -384,10 +387,10 @@ class MarkdownService {
|
|
|
384
387
|
})
|
|
385
388
|
});
|
|
386
389
|
}
|
|
387
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
388
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.
|
|
390
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: MarkdownService, deps: [{ token: UNIPIN_GQL_CONFIG }, { token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
391
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: MarkdownService, providedIn: 'root' }); }
|
|
389
392
|
}
|
|
390
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
393
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: MarkdownService, decorators: [{
|
|
391
394
|
type: Injectable,
|
|
392
395
|
args: [{
|
|
393
396
|
providedIn: 'root'
|
|
@@ -637,8 +640,8 @@ class UpMarkdownInputComponent extends UpFieldControlComponent {
|
|
|
637
640
|
return null;
|
|
638
641
|
}
|
|
639
642
|
}
|
|
640
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.
|
|
641
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.
|
|
643
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: UpMarkdownInputComponent, deps: [{ token: MarkdownService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
644
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.11", type: UpMarkdownInputComponent, isStandalone: true, selector: "up-markdown-input", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, inlineClass: { classPropertyName: "inlineClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, contextGuid: { classPropertyName: "contextGuid", publicName: "contextGuid", isSignal: true, isRequired: false, transformFunction: null }, contextType: { classPropertyName: "contextType", publicName: "contextType", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { value: "valueChange", mode: "modeChange" }, host: { listeners: { "document:keyup": "handleStyleWithKeyboard($event)" }, properties: { "class": "_computedClass()" } }, providers: [
|
|
642
645
|
{
|
|
643
646
|
provide: UpFieldControl,
|
|
644
647
|
useExisting: forwardRef(() => UpMarkdownInputComponent)
|
|
@@ -659,7 +662,7 @@ class UpMarkdownInputComponent extends UpFieldControlComponent {
|
|
|
659
662
|
}),
|
|
660
663
|
], viewQueries: [{ propertyName: "textarea", first: true, predicate: ["textarea"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"shrink-0 w-full flex flex-col-reverse md:flex-row md:items-center justify-between gap-1 bg-[#f5f7f6]\">\n <div class=\"flex items-center h-full\">\n <button\n upButton\n variant=\"ghost\"\n class=\"transition-none rounded-none rounded-t-md\"\n [class]=\"\n mode() !== 'write'? '' : 'border-r border-input bg-white'\n \"\n (click)=\"mode.set('write')\"\n >\n Write\n </button>\n\n <button\n upButton\n variant=\"ghost\"\n class=\"transition-none rounded-none rounded-t-md\"\n [class]=\"\n mode() !== 'preview'? '' : 'border-x border-input bg-white'\n \"\n (click)=\"mode.set('preview')\"\n >\n Preview\n </button>\n </div>\n\n @if (mode() === 'write') {\n <div class=\"flex justify-start md:justify-end items-center gap-0.5\">\n @for (btn of buttons; track btn.action) {\n <button\n upButton\n size=\"sm\"\n variant=\"ghost\"\n class=\"p-0 px-2 py-1\"\n [disabled]=\"disabled()\"\n (click)=\"applyStyle(btn.action)\"\n >\n <ng-icon\n size=\"16px\" \n [name]=\"btn.icon\"\n />\n </button>\n }\n </div>\n }\n</div>\n\n<div class=\"grow relative\">\n @if (mode() === 'preview') {\n <div\n upMarkdown\n class=\"size-full absolute top-0 left-0 bg-white p-2 outline-none text-wrap break-words overflow-y-auto\"\n [innerHTML]=\"(value() || 'Nothing to preview')\"\n ></div>\n }\n @else {\n <textarea\n #textarea\n class=\"size-full absolute top-0 left-0 bg-white p-2 outline-none resize-none\" \n [value]=\"value()\"\n [disabled]=\"disabled()\"\n [placeholder]=\"placeholder()\"\n (blur)=\"touch()\"\n (input)=\"change($event)\"\n (paste)=\"pasteImage($event)\"\n (keyup)=\"changeSelection($event)\"\n (mouseup)=\"changeSelection($event)\"\n ></textarea>\n }\n</div>\n", dependencies: [{ kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: UpMarkdownDirective, selector: "[upMarkdown]", exportAs: ["upMarkdown"] }, { kind: "directive", type: UpButtonDirective, selector: "[upButton]", inputs: ["size", "variant", "class"], exportAs: ["upButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
661
664
|
}
|
|
662
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.
|
|
665
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: UpMarkdownInputComponent, decorators: [{
|
|
663
666
|
type: Component,
|
|
664
667
|
args: [{ selector: 'up-markdown-input', changeDetection: ChangeDetectionStrategy.OnPush, host: {
|
|
665
668
|
'[class]': '_computedClass()',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unipin-angular-applet-markdown.mjs","sources":["../../../projects/unipin-angular/markdown/utils/markdown-style.utils.ts","../../../projects/unipin-angular/markdown/directives/markdown.directive.ts","../../../projects/unipin-angular/markdown/services/markdown.services.ts","../../../projects/unipin-angular/markdown/components/markdown-input.component.ts","../../../projects/unipin-angular/markdown/components/markdown-input.component.html","../../../projects/unipin-angular/markdown/unipin-angular-applet-markdown.ts"],"sourcesContent":["export type SelectionType = {\n end: number;\n word: string;\n start: number;\n}\n\nexport function toggleBold(textarea: HTMLTextAreaElement, selection: SelectionType): string{\n \n const { word, start, end } = getWordAtCursor(textarea.value, selection.start);\n let newText: string;\n\n //add with selection\n if (\n selection.start < selection.end &&\n !selection.word.startsWith('**') &&\n !selection.word.endsWith('**')\n ) {\n newText = textarea.value.slice(0, selection.start) + `**${selection.word}**` + textarea.value.slice(selection.end);\n \n setTimeout(\n () => {\n textarea.setSelectionRange(selection.end + 2, selection.end + 2);\n textarea.focus();\n }\n );\n return newText;\n }\n \n //add without selection\n if (\n selection.start === selection.end &&\n !word.startsWith('**') &&\n !word.endsWith('**')\n ) {\n newText = textarea.value.slice(0, start) + `**${word}**` + textarea.value.slice(end);\n\n setTimeout(\n () => {\n textarea.setSelectionRange(end + 2, end + 2);\n textarea.focus();\n }\n );\n return newText;\n }\n\n //remove without selection\n if (\n word.startsWith('**') &&\n word.endsWith('**')\n ) {\n newText = textarea.value.slice(0, start) + word.slice(2, -2) + textarea.value.slice(end);\n \n setTimeout(\n () => {\n textarea.setSelectionRange(selection.start, selection.end);\n textarea.focus();\n }\n );\n return newText;\n }\n\n //remove with selection\n if (\n selection.word.startsWith('**') &&\n selection.word.endsWith('**')\n ) {\n newText = textarea.value.slice(0, selection.start) + selection.word.slice(2, -2) + textarea.value.slice(selection.end);\n \n setTimeout(\n () => {\n textarea.setSelectionRange(selection.start, selection.start);\n textarea.focus();\n }\n );\n return newText;\n }\n return textarea.value;\n}\n\nexport function toggleUnderline(textarea: HTMLTextAreaElement, selection: SelectionType): string{\n \n const { word, start, end } = getWordAtCursor(textarea.value, selection.start);\n let newText: string;\n\n //add with selection\n if (\n selection.start < selection.end &&\n !selection.word.startsWith('++') &&\n !selection.word.endsWith('++')\n ) {\n newText = textarea.value.slice(0, selection.start) + `++${selection.word}++` + textarea.value.slice(selection.end);\n \n setTimeout(\n () => {\n textarea.setSelectionRange(selection.end + 2, selection.end + 2);\n textarea.focus();\n }\n );\n return newText;\n }\n \n //add without selection\n if (\n selection.start === selection.end &&\n !word.startsWith('++') &&\n !word.endsWith('++')\n ) {\n newText = textarea.value.slice(0, start) + `++${word}++` + textarea.value.slice(end);\n\n setTimeout(\n () => {\n textarea.setSelectionRange(end + 2, end + 2);\n textarea.focus();\n }\n );\n return newText;\n }\n\n //remove without selection\n if (word.startsWith('++') && word.endsWith('++')) {\n newText = textarea.value.slice(0, start) + word.slice(2, -2) + textarea.value.slice(end);\n \n setTimeout(\n () => {\n textarea.setSelectionRange(selection.start, selection.end);\n textarea.focus();\n }\n );\n return newText;\n }\n\n //remove with selection\n if (\n selection.word.startsWith('++') &&\n selection.word.endsWith('++')\n ) {\n newText = textarea.value.slice(0, selection.start) + selection.word.slice(2, -2) + textarea.value.slice(selection.end);\n \n setTimeout(\n () => {\n textarea.setSelectionRange(selection.start, selection.start);\n textarea.focus();\n }\n );\n return newText;\n }\n return textarea.value;\n}\n\nexport function toggleItalic(textarea: HTMLTextAreaElement, selection: SelectionType): string{\n \n const { word, start, end } = getWordAtCursor(textarea.value, selection.start);\n let newText: string;\n\n //add with selection\n if (\n selection.start < selection.end &&\n !selection.word.startsWith('_') &&\n !selection.word.endsWith('_')\n ) {\n newText = textarea.value.slice(0, selection.start) + `_${selection.word}_` + textarea.value.slice(selection.end);\n \n setTimeout(\n () => {\n textarea.setSelectionRange(selection.end + 2, selection.end + 2);\n textarea.focus();\n }\n );\n return newText;\n }\n \n //add without selection\n if (selection.start === selection.end && !word.startsWith('_') && !word.endsWith('_')) {\n newText = textarea.value.slice(0, start) + `_${word}_` + textarea.value.slice(end);\n\n setTimeout(\n () => {\n textarea.setSelectionRange(end + 1, end + 1);\n textarea.focus();\n }\n );\n return newText;\n }\n\n //remove without selection\n if (word.startsWith('_') && word.endsWith('_')) {\n newText = textarea.value.slice(0, start) + word.slice(1, -1) + textarea.value.slice(end);\n \n setTimeout(\n () => {\n textarea.setSelectionRange(selection.start, selection.end);\n textarea.focus();\n }\n );\n return newText;\n }\n\n //remove with selection\n if (selection.word.startsWith('_') && selection.word.endsWith('_')) {\n newText = textarea.value.slice(0, selection.start) + selection.word.slice(1, -1) + textarea.value.slice(selection.end);\n \n setTimeout(\n () => {\n textarea.setSelectionRange(selection.start, selection.start);\n textarea.focus();\n }\n );\n return newText;\n }\n return textarea.value;\n}\n\n\nexport function toggleUnorderedList(text: string, cursorPos: number): string{\n \n const lines = text.split('\\n');\n let currentLineIndex = 0;\n let charCount = 0;\n\n for (let i = 0; i < lines.length; i++) {\n charCount += lines[i].length + 1;\n \n if (charCount > cursorPos) {\n currentLineIndex = i;\n break;\n }\n }\n const line = lines[currentLineIndex];\n\n if (line.startsWith('- ')) {\n lines[currentLineIndex] = line.slice(2);\n } else {\n lines[currentLineIndex] = `- ${line}`;\n }\n return lines.join('\\n');\n}\n\nexport function toggleOrderedList(text: string, cursorPos: number): string{\n \n const lines = text.split('\\n');\n let currentLineIndex = 0;\n let charCount = 0;\n\n for (let i = 0; i < lines.length; i++) {\n charCount += lines[i].length + 1;\n \n if (charCount > cursorPos) {\n currentLineIndex = i;\n break;\n }\n }\n\n const line = lines[currentLineIndex];\n const match = line.match(/^(\\d+)\\.\\s(.*)$/);\n\n if (match) {\n lines[currentLineIndex] = match[2];\n } else {\n let number = 1;\n \n for (let i = 0; i < currentLineIndex; i++) {\n const prevMatch = lines[i].match(/^(\\d+)\\.\\s/);\n \n if (prevMatch) {\n number = parseInt(prevMatch[1], 10) + 1;\n }\n }\n lines[currentLineIndex] = `${number}. ${line}`;\n }\n return lines.join('\\n');\n}\n\nexport function toggleTaskList(text: string, cursorPos: number): string {\n \n const lines = text.split('\\n');\n let currentLineIndex = 0;\n let charCount = 0;\n\n for (let i = 0; i < lines.length; i++) {\n charCount += lines[i].length + 1;\n \n if (charCount > cursorPos) {\n currentLineIndex = i;\n break;\n }\n }\n const line = lines[currentLineIndex];\n\n if (/^- \\[ \\]\\s/.test(line)) {\n lines[currentLineIndex] = line.replace(/^- \\[ \\]\\s/, '- [x] ');\n } else if (/^- \\[x\\]\\s/.test(line)) {\n lines[currentLineIndex] = line.replace(/^- \\[x\\]\\s/, '');\n } else {\n lines[currentLineIndex] = `- [ ] ${line}`;\n }\n return lines.join('\\n');\n}\n\nexport function toggleHeading(textarea: HTMLTextAreaElement, selection: { start: number; end: number }): string {\n \n const lines = textarea.value.split('\\n');\n\n let charCount = 0;\n let lineIndex = 0;\n for (let i = 0; i < lines.length; i++) {\n charCount += lines[i].length + 1;\n \n if (selection.start < charCount) {\n lineIndex = i;\n break;\n }\n }\n let lineContent = lines[lineIndex];\n\n if (lineContent.startsWith('### ')) {\n lines[lineIndex] = lineContent.slice(4);\n selection.start -= 4;\n selection.end -= 4;\n } else {\n lines[lineIndex] = `### ${lineContent}`;\n selection.start += 4;\n selection.end += 4;\n }\n\n const newText = lines.join('\\n');\n setTimeout(\n () => {\n textarea.focus();\n textarea.setSelectionRange(selection.start, selection.end);\n }\n );\n return newText;\n}\n\nexport function toggleBlockQuote(textarea: HTMLTextAreaElement, selection: { start: number; end: number }): string {\n \n const lines = textarea.value.split('\\n');\n\n let charCount = 0;\n let lineIndex = 0;\n for (let i = 0; i < lines.length; i++) {\n charCount += lines[i].length + 1;\n \n if (selection.start < charCount) {\n lineIndex = i;\n break;\n }\n }\n let lineContent = lines[lineIndex];\n\n if (lineContent.startsWith('> ')) {\n lines[lineIndex] = lineContent.slice(2);\n selection.start -= 2;\n selection.end -= 2;\n } else {\n lines[lineIndex] = `> ${lineContent}`;\n selection.start += 2;\n selection.end += 2;\n }\n\n const newText = lines.join('\\n');\n setTimeout(\n () => {\n textarea.focus();\n textarea.setSelectionRange(selection.start, selection.end);\n }\n );\n return newText;\n}\n\nfunction getWordAtCursor(text: string, cursorPosition: number): SelectionType{\n \n if (!text || cursorPosition < 0 || cursorPosition > text.length) {\n return {\n start: cursorPosition,\n end: cursorPosition,\n word: ''\n };\n }\n\n let start = cursorPosition;\n while (start > 0 && !isWordSeparator(text[start - 1])) {\n start--;\n }\n\n let end = cursorPosition;\n while (end < text.length && !isWordSeparator(text[end])) {\n end++;\n }\n\n return {\n start,\n end,\n word: text.substring(start, end)\n };\n}\n\nfunction isWordSeparator(char: string): boolean {\n return /\\s|\\t|\\n|\\r|,|\\.|!|\\?|:|;|\\(|\\)/.test(char);\n}\n","import { Directive, ElementRef, Renderer2, signal, effect, WritableSignal, OnDestroy } from '@angular/core';\nimport { marked } from 'marked';\n\n\n@Directive({\n exportAs: 'upMarkdown',\n selector: '[upMarkdown]',\n host: {\n '[class]': 'class',\n }\n})\nexport class UpMarkdownDirective implements OnDestroy {\n \n protected readonly markdown: WritableSignal<string> = signal('');\n protected readonly class: string = `\n [&_h1]:text-4xl [&_h1]:font-bold [&_h1]:mt-0 [&_h1]:mb-4 [&_h1]:border-b [&_h1]:border-[#eeeeee]\n [&_h2]:text-2xl [&_h2]:font-bold [&_h2]:mt-0 [&_h2]:mb-4 [&_h2]:border-b [&_h2]:border-[#eeeeee]\n [&_h3]:text-xl [&_h3]:font-bold [&_h3]:mt-0 [&_h3]:mb-4 [&_h3]:border-b [&_h3]:border-[#eeeeee]\n [&_h4]:text-base [&_h4]:font-bold [&_h4]:mt-0 [&_h4]:mb-4 [&_h4]:border-b [&_h4]:border-[#eeeeee]\n [&_h5]:text-sm [&_h5]:font-bold [&_h5]:mt-0 [&_h5]:mb-4 [&_h5]:border-b [&_h5]:border-[#eeeeee]\n [&_h6]:text-xs [&_h6]:font-bold [&_h6]:mt-0 [&_h6]:mb-4 [&_h6]:border-b [&_h6]:border-[#eeeeee]\n\n [&_p]:mt-0 [&_p]:mb-4\n\n [&_ul]:mt-0 [&_ul]:pl-5 [&_ul]:list-disc [&_ul]:mb-4\n [&_ol]:mt-0 [&_ol]:pl-5 [&_ol]:list-decimal [&_ol]:mb-4\n\n [&_blockquote]:pl-3 [&_blockquote]:border-l-2 [&_blockquote]:border-[var(--color-primary)] [&_blockquote]:text-gray-700\n\n [&_a]:text-[var(--color-primary)] [&_a]:underline\n `;\n protected observer: MutationObserver;\n\n constructor(\n protected readonly el: ElementRef,\n protected readonly renderer: Renderer2,\n ) {\n this.observer = new MutationObserver(\n () => {\n this.markdown.set(this.el.nativeElement.innerHTML || '');\n }\n );\n\n this.observer.observe(\n this.el.nativeElement, \n {\n subtree: true,\n childList: true,\n characterData: true,\n }\n );\n\n effect(\n () => {\n const native: HTMLElement = (this.el.nativeElement);\n \n this.markdown.set(native.innerHTML);\n this.renderer.setProperty(\n native, \n 'innerHTML', \n marked(\n this.markdown()\n .replace(/>/g, '>')\n .replace(/\\+\\+(.*?)\\+\\+/g, '<u>$1</u>')\n )\n );\n }\n );\n }\n\n public ngOnDestroy(): void{\n this.observer.disconnect();\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { UNIPIN_GQL_CONFIG, UniPinGqlConfig } from '@unipin/angular-gql';\n\n@Injectable({ \n providedIn: 'root'\n})\nexport class MarkdownService {\n\n constructor(\n @Inject(UNIPIN_GQL_CONFIG) public readonly config: UniPinGqlConfig,\n protected readonly http: HttpClient\n ) { }\n\n public uploadImage(file: File): Observable<any>{\n const formData = new FormData();\n \n formData.append(\n 'operations', \n JSON.stringify({\n query: `\n mutation ($attachment: Upload!) {\n fileMgmtSysMsFileUpload(attachment: $attachment, isPublic: true) {\n guid\n fileName\n publicUrl\n }\n }\n `\n })\n );\n \n formData.append('file', file);\n formData.append(\n 'map', \n JSON.stringify(\n { \n file: ['variables.attachment'] \n }\n )\n );\n \n return this.http.post(\n this.config.uri, \n formData, \n {\n headers: new HttpHeaders({\n 'x-apollo-operation-name': 'fileUpload'\n })\n }\n );\n }\n}\n","import { booleanAttribute, ChangeDetectionStrategy, Component, computed, forwardRef, HostListener, input, InputSignal, model, viewChild } from '@angular/core';\nimport { ControlValueAccessor } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { ClassValue } from 'clsx';\nimport { NgIcon, provideIcons } from '@ng-icons/core';\nimport { matChecklistRound, matFormatQuoteRound, matFormatBoldRound, matFormatItalicRound, matFormatListBulletedRound, matFormatListNumberedRound, matFormatUnderlinedRound } from '@ng-icons/material-icons/round';\nimport { up } from '@unipin/angular-applet/common';\nimport { compressImage } from '@unipin/angular-applet/common';\nimport { UpButtonDirective } from '@unipin/angular-applet/buttons';\nimport { UpFieldControl, UpFieldControlComponent } from '@unipin/angular-applet/forms';\nimport { SelectionType, toggleBlockQuote, toggleBold, toggleHeading, toggleItalic, toggleOrderedList, toggleTaskList, toggleUnderline, toggleUnorderedList } from '../utils/markdown-style.utils';\nimport { UpMarkdownDirective } from '../directives/markdown.directive';\nimport { MarkdownService } from '../services/markdown.services';\n\n\n@Component({\n selector: 'up-markdown-input',\n templateUrl: './markdown-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': '_computedClass()',\n },\n providers: [\n {\n provide: UpFieldControl,\n useExisting: forwardRef(() => UpMarkdownInputComponent)\n },\n provideIcons(\n {\n matFormatBoldRound,\n matFormatQuoteRound,\n matFormatItalicRound,\n matFormatUnderlinedRound,\n matFormatListNumberedRound,\n matFormatListBulletedRound,\n matChecklistRound,\n customHeading: `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M6 4v16h3V13h6v7h3V4h-3v7H9V4H6z\" transform=\"scale(0.8) translate(3,2)\"/>\n </svg>\n `\n }\n ),\n ],\n imports: [\n NgIcon,\n UpMarkdownDirective,\n UpButtonDirective\n ],\n})\nexport class UpMarkdownInputComponent extends UpFieldControlComponent implements ControlValueAccessor {\n\n public readonly value = model('');\n public readonly placeholder = input('');\n public readonly mode = model<'write' | 'preview'>('write');\n public readonly inlineClass = input<ClassValue>('', { alias: 'class' });\n\n public readonly textarea = viewChild<{ nativeElement: HTMLTextAreaElement }>('textarea');\n public readonly buttons = [\n { icon: 'customHeading', action: 'heading' },\n { icon: 'matFormatBoldRound', action: 'bold' },\n { icon: 'matFormatItalicRound', action: 'italic' },\n { icon: 'matFormatUnderlinedRound', action: 'underline' },\n { icon: 'matFormatQuoteRound', action: 'blockQuote' },\n { icon: 'matFormatListNumberedRound', action: 'ol' },\n { icon: 'matFormatListBulletedRound', action: 'ul' },\n { icon: 'matChecklistRound', action: 'taskList' },\n ];\n\n public readonly disabled = input(\n false, \n { \n transform: booleanAttribute \n }\n );\n public readonly contextGuid: InputSignal<string> = input('');\n public readonly contextType: InputSignal<string> = input('');\n\n public isTouched: boolean = false;\n \n protected readonly _computedClass = computed(\n () => {\n return up(\n 'peer placeholder:text-muted-foreground/30 selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex flex-col min-h-48 size-full min-w-0 rounded-md border bg-transparent text-base shadow-xs transition-[color,box-shadow] outline-none md:text-sm overflow-hidden',\n 'has-[textarea:focus-visible]:border-ring has-[textarea:focus-visible]:ring-ring/50 has-[textarea:focus-visible]:ring-[3px] has-[textarea:focus-visible]:outline-none',\n this.error()? 'ring-destructive/20 dark:ring-destructive/40 border-destructive has-[textarea:focus-visible]:ring-destructive/50' : '',\n this.inlineClass(),\n );\n }\n );\n\n protected imageData?: any;\n protected selection?: SelectionType;\n protected sub: Subscription | null = null;\n\n /**\n * Callback function to handle value changes in the markdown input component.\n * @type {(_val: any) => void}\n */\n protected _onChange: (_val: any) => void = (_val: any): void => {};\n\n /**\n * Callback function to handle touch events in the markdown input component.\n * @type {() => void}\n */\n protected _onTouched: () => void = (): void => {};\n\n constructor(\n protected readonly markdownService: MarkdownService\n ) {\n super();\n\n if (this.ngControl !== null) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n /**\n * Handles keyboard events and button actions for the markdown input.\n *\n * @param {KeyboardEvent} event - The keyboard event.\n */\n @HostListener('document:keyup', ['$event'])\n protected handleStyleWithKeyboard(event: KeyboardEvent): void{\n if (\n !this.textarea() ||\n this.textarea()!.nativeElement.tagName !== 'TEXTAREA'\n ) {\n return;\n }\n\n if (\n event.ctrlKey || \n event.metaKey\n ) {\n let result = null;\n\n if (event.key.toLowerCase() === 'b') {\n result = this.setStyle('bold', this.textarea()!.nativeElement);\n }\n\n if (event.key.toLowerCase() === 'i') {\n result = this.setStyle('italic', this.textarea()!.nativeElement);\n }\n\n if (event.key.toLowerCase() === 'u') {\n result = this.setStyle('underline', this.textarea()!.nativeElement);\n }\n\n if (result !== null) {\n this.value.set(result);\n this._onChange(result);\n }\n }\n }\n \n public ngOnDestroy(): void{\n this.sub?.unsubscribe()\n }\n\n /**\n * Registers a callback function to be called when the password input value changes.\n * @param {(_val: any) => void} fn - Callback function for value changes.\n */\n public registerOnChange(fn: any): void{\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function to be called when the password input is touched.\n * @param {() => void} fn - Callback function for touch events.\n */\n public registerOnTouched(fn: any): void{\n this._onTouched = fn;\n }\n\n /**\n * Writes a new value to the markdown input.\n * @param {*} val - The new value to be set.\n */\n public writeValue(val: any): void{\n this.value.set(val?? '');\n }\n\n /**\n * Event handler to handle touch status.\n *\n * @returns {void}\n */\n public touch(): void{\n if (!this.isTouched) {\n this._onTouched();\n this.isTouched = true;\n }\n this.value.set(this.textarea()!.nativeElement.value);\n }\n\n public change(event: Event): void{\n const value = (event.target as HTMLTextAreaElement).value;\n\n if (!this.isTouched) {\n this._onTouched();\n this.isTouched = true;\n }\n this._onChange(value);\n }\n\n /**\n * Handles button actions for the markdown input.\n *\n * @param {string} action - The action to perform.\n * @returns {void}\n */\n public applyStyle(action: string): void {\n const textarea = this.textarea()?.nativeElement;\n if (!textarea) {\n return;\n }\n\n const result = this.setStyle(action, textarea);\n if (result !== null) {\n this.value.set(result);\n this._onChange(result);\n }\n }\n\n public changeSelection(event: Event): void{\n const target = event.target as HTMLTextAreaElement;\n const word = target.value.substring(target.selectionStart, target.selectionEnd);\n\n this.selection = {\n word,\n end: target.selectionEnd,\n start: target.selectionStart,\n };\n }\n\n public async pasteImage(event: ClipboardEvent): Promise<void>{\n const cursor = this.selection?.start;\n const items = event.clipboardData?.items;\n const textarea = this.textarea()?.nativeElement;\n \n if (\n !items || \n cursor === undefined ||\n cursor === null ||\n !textarea\n ) {\n return;\n } \n\n for (let i = 0; i < items.length; i++) {\n if (items[i].type.startsWith('image/')) {\n const file = await compressImage(\n {\n quality: 0.8,\n file: items[i].getAsFile()!,\n }\n );\n\n if (!file) {\n return;\n }\n\n const errorImageText = `<!-- Upload image failed -->`;\n const errorImageSizeText = `<!-- Image size must be less than 5MB -->`;\n const uploadText = `<!-- Uploading \"${ file?.name.replace(/ /g, '-') }\"... -->`;\n\n textarea.value = textarea.value.substring(0, cursor) + uploadText;\n \n this.value.set(textarea.value);\n this._onChange(textarea.value);\n\n setTimeout(\n () => {\n textarea.setSelectionRange( cursor + uploadText.length, cursor + uploadText.length,);\n textarea.focus();\n }\n );\n\n if (\n file?.size && \n file?.size > 5 * 1024 * 1024\n ) {\n this.replaceAndSetCursor(\n textarea!,\n {\n searchValue: uploadText,\n replaceValue: errorImageSizeText\n },\n {\n start: cursor! + errorImageSizeText.length,\n end: cursor! + errorImageSizeText.length\n }\n )\n return;\n }\n\n this.sub?.unsubscribe();\n this.sub = this.markdownService.uploadImage(file).subscribe({\n error: () => {\n this.replaceAndSetCursor(\n textarea,\n {\n searchValue: uploadText,\n replaceValue: errorImageText\n },\n {\n start: cursor + errorImageText.length,\n end: cursor + errorImageText.length\n }\n );\n },\n next: ({ data:{ fileMgmtSysMsFileUpload }}) => {\n this.imageData = fileMgmtSysMsFileUpload;\n \n const markdownImageText = ` })`;\n this.replaceAndSetCursor(\n textarea,\n {\n searchValue: uploadText,\n replaceValue: markdownImageText\n },\n {\n start: cursor + markdownImageText.length,\n end: cursor + markdownImageText.length\n }\n );\n },\n });\n }\n }\n }\n\n protected replaceAndSetCursor(\n textarea: HTMLTextAreaElement, \n textReplace: {\n searchValue: string, replaceValue: string\n }, \n cursorPosition: {\n start: number, end: number\n }\n ): void{\n this.value.set(\n textarea.value.replace(\n textReplace.searchValue, \n textReplace.replaceValue\n )\n );\n \n this._onChange(\n textarea.value.replace(\n textReplace.searchValue, \n textReplace.replaceValue\n )\n );\n\n setTimeout(\n () => {\n textarea.setSelectionRange( cursorPosition.start, cursorPosition.end );\n textarea.focus();\n }\n );\n }\n\n protected setStyle(action: string, textarea: HTMLTextAreaElement): string | null{\n if (\n !textarea ||\n textarea.tagName !== 'TEXTAREA' ||\n !this.selection\n ) {\n return null;\n }\n\n switch (action) {\n case 'bold':\n return toggleBold(textarea, this.selection);\n\n case 'italic':\n return toggleItalic(textarea, this.selection);\n\n case 'underline':\n return toggleUnderline(textarea, this.selection);\n\n case 'ul':\n return toggleUnorderedList(textarea.value, this.selection.start);\n\n case 'ol':\n return toggleOrderedList(textarea.value, this.selection.start);\n\n case 'heading':\n return toggleHeading(textarea, this.selection);\n\n case 'taskList':\n return toggleTaskList(textarea.value, this.selection.start);\n\n case 'blockQuote':\n return toggleBlockQuote(textarea, this.selection);\n\n default:\n return null;\n }\n }\n}\n","<div class=\"shrink-0 w-full flex flex-col-reverse md:flex-row md:items-center justify-between gap-1 bg-[#f5f7f6]\">\n <div class=\"flex items-center h-full\">\n <button\n upButton\n variant=\"ghost\"\n class=\"transition-none rounded-none rounded-t-md\"\n [class]=\"\n mode() !== 'write'? '' : 'border-r border-input bg-white'\n \"\n (click)=\"mode.set('write')\"\n >\n Write\n </button>\n\n <button\n upButton\n variant=\"ghost\"\n class=\"transition-none rounded-none rounded-t-md\"\n [class]=\"\n mode() !== 'preview'? '' : 'border-x border-input bg-white'\n \"\n (click)=\"mode.set('preview')\"\n >\n Preview\n </button>\n </div>\n\n @if (mode() === 'write') {\n <div class=\"flex justify-start md:justify-end items-center gap-0.5\">\n @for (btn of buttons; track btn.action) {\n <button\n upButton\n size=\"sm\"\n variant=\"ghost\"\n class=\"p-0 px-2 py-1\"\n [disabled]=\"disabled()\"\n (click)=\"applyStyle(btn.action)\"\n >\n <ng-icon\n size=\"16px\" \n [name]=\"btn.icon\"\n />\n </button>\n }\n </div>\n }\n</div>\n\n<div class=\"grow relative\">\n @if (mode() === 'preview') {\n <div\n upMarkdown\n class=\"size-full absolute top-0 left-0 bg-white p-2 outline-none text-wrap break-words overflow-y-auto\"\n [innerHTML]=\"(value() || 'Nothing to preview')\"\n ></div>\n }\n @else {\n <textarea\n #textarea\n class=\"size-full absolute top-0 left-0 bg-white p-2 outline-none resize-none\" \n [value]=\"value()\"\n [disabled]=\"disabled()\"\n [placeholder]=\"placeholder()\"\n (blur)=\"touch()\"\n (input)=\"change($event)\"\n (paste)=\"pasteImage($event)\"\n (keyup)=\"changeSelection($event)\"\n (mouseup)=\"changeSelection($event)\"\n ></textarea>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.MarkdownService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"unipin-angular-applet-markdown.mjs","sources":["../../../projects/unipin-angular/markdown/utils/markdown-style.utils.ts","../../../projects/unipin-angular/markdown/directives/markdown.directive.ts","../../../projects/unipin-angular/markdown/services/markdown.services.ts","../../../projects/unipin-angular/markdown/components/markdown-input.component.ts","../../../projects/unipin-angular/markdown/components/markdown-input.component.html","../../../projects/unipin-angular/markdown/unipin-angular-applet-markdown.ts"],"sourcesContent":["export type SelectionType = {\n end: number;\n word: string;\n start: number;\n}\n\nexport function toggleBold(textarea: HTMLTextAreaElement, selection: SelectionType): string{\n \n const { word, start, end } = getWordAtCursor(textarea.value, selection.start);\n let newText: string;\n\n //add with selection\n if (\n selection.start < selection.end &&\n !selection.word.startsWith('**') &&\n !selection.word.endsWith('**')\n ) {\n newText = textarea.value.slice(0, selection.start) + `**${selection.word}**` + textarea.value.slice(selection.end);\n \n setTimeout(\n () => {\n textarea.setSelectionRange(selection.end + 2, selection.end + 2);\n textarea.focus();\n }\n );\n return newText;\n }\n \n //add without selection\n if (\n selection.start === selection.end &&\n !word.startsWith('**') &&\n !word.endsWith('**')\n ) {\n newText = textarea.value.slice(0, start) + `**${word}**` + textarea.value.slice(end);\n\n setTimeout(\n () => {\n textarea.setSelectionRange(end + 2, end + 2);\n textarea.focus();\n }\n );\n return newText;\n }\n\n //remove without selection\n if (\n word.startsWith('**') &&\n word.endsWith('**')\n ) {\n newText = textarea.value.slice(0, start) + word.slice(2, -2) + textarea.value.slice(end);\n \n setTimeout(\n () => {\n textarea.setSelectionRange(selection.start, selection.end);\n textarea.focus();\n }\n );\n return newText;\n }\n\n //remove with selection\n if (\n selection.word.startsWith('**') &&\n selection.word.endsWith('**')\n ) {\n newText = textarea.value.slice(0, selection.start) + selection.word.slice(2, -2) + textarea.value.slice(selection.end);\n \n setTimeout(\n () => {\n textarea.setSelectionRange(selection.start, selection.start);\n textarea.focus();\n }\n );\n return newText;\n }\n return textarea.value;\n}\n\nexport function toggleUnderline(textarea: HTMLTextAreaElement, selection: SelectionType): string{\n \n const { word, start, end } = getWordAtCursor(textarea.value, selection.start);\n let newText: string;\n\n //add with selection\n if (\n selection.start < selection.end &&\n !selection.word.startsWith('++') &&\n !selection.word.endsWith('++')\n ) {\n newText = textarea.value.slice(0, selection.start) + `++${selection.word}++` + textarea.value.slice(selection.end);\n \n setTimeout(\n () => {\n textarea.setSelectionRange(selection.end + 2, selection.end + 2);\n textarea.focus();\n }\n );\n return newText;\n }\n \n //add without selection\n if (\n selection.start === selection.end &&\n !word.startsWith('++') &&\n !word.endsWith('++')\n ) {\n newText = textarea.value.slice(0, start) + `++${word}++` + textarea.value.slice(end);\n\n setTimeout(\n () => {\n textarea.setSelectionRange(end + 2, end + 2);\n textarea.focus();\n }\n );\n return newText;\n }\n\n //remove without selection\n if (word.startsWith('++') && word.endsWith('++')) {\n newText = textarea.value.slice(0, start) + word.slice(2, -2) + textarea.value.slice(end);\n \n setTimeout(\n () => {\n textarea.setSelectionRange(selection.start, selection.end);\n textarea.focus();\n }\n );\n return newText;\n }\n\n //remove with selection\n if (\n selection.word.startsWith('++') &&\n selection.word.endsWith('++')\n ) {\n newText = textarea.value.slice(0, selection.start) + selection.word.slice(2, -2) + textarea.value.slice(selection.end);\n \n setTimeout(\n () => {\n textarea.setSelectionRange(selection.start, selection.start);\n textarea.focus();\n }\n );\n return newText;\n }\n return textarea.value;\n}\n\nexport function toggleItalic(textarea: HTMLTextAreaElement, selection: SelectionType): string{\n \n const { word, start, end } = getWordAtCursor(textarea.value, selection.start);\n let newText: string;\n\n //add with selection\n if (\n selection.start < selection.end &&\n !selection.word.startsWith('_') &&\n !selection.word.endsWith('_')\n ) {\n newText = textarea.value.slice(0, selection.start) + `_${selection.word}_` + textarea.value.slice(selection.end);\n \n setTimeout(\n () => {\n textarea.setSelectionRange(selection.end + 2, selection.end + 2);\n textarea.focus();\n }\n );\n return newText;\n }\n \n //add without selection\n if (selection.start === selection.end && !word.startsWith('_') && !word.endsWith('_')) {\n newText = textarea.value.slice(0, start) + `_${word}_` + textarea.value.slice(end);\n\n setTimeout(\n () => {\n textarea.setSelectionRange(end + 1, end + 1);\n textarea.focus();\n }\n );\n return newText;\n }\n\n //remove without selection\n if (word.startsWith('_') && word.endsWith('_')) {\n newText = textarea.value.slice(0, start) + word.slice(1, -1) + textarea.value.slice(end);\n \n setTimeout(\n () => {\n textarea.setSelectionRange(selection.start, selection.end);\n textarea.focus();\n }\n );\n return newText;\n }\n\n //remove with selection\n if (selection.word.startsWith('_') && selection.word.endsWith('_')) {\n newText = textarea.value.slice(0, selection.start) + selection.word.slice(1, -1) + textarea.value.slice(selection.end);\n \n setTimeout(\n () => {\n textarea.setSelectionRange(selection.start, selection.start);\n textarea.focus();\n }\n );\n return newText;\n }\n return textarea.value;\n}\n\n\nexport function toggleUnorderedList(text: string, cursorPos: number): string{\n \n const lines = text.split('\\n');\n let currentLineIndex = 0;\n let charCount = 0;\n\n for (let i = 0; i < lines.length; i++) {\n charCount += lines[i].length + 1;\n \n if (charCount > cursorPos) {\n currentLineIndex = i;\n break;\n }\n }\n const line = lines[currentLineIndex];\n\n if (line.startsWith('- ')) {\n lines[currentLineIndex] = line.slice(2);\n } else {\n lines[currentLineIndex] = `- ${line}`;\n }\n return lines.join('\\n');\n}\n\nexport function toggleOrderedList(text: string, cursorPos: number): string{\n \n const lines = text.split('\\n');\n let currentLineIndex = 0;\n let charCount = 0;\n\n for (let i = 0; i < lines.length; i++) {\n charCount += lines[i].length + 1;\n \n if (charCount > cursorPos) {\n currentLineIndex = i;\n break;\n }\n }\n\n const line = lines[currentLineIndex];\n const match = line.match(/^(\\d+)\\.\\s(.*)$/);\n\n if (match) {\n lines[currentLineIndex] = match[2];\n } else {\n let number = 1;\n \n for (let i = 0; i < currentLineIndex; i++) {\n const prevMatch = lines[i].match(/^(\\d+)\\.\\s/);\n \n if (prevMatch) {\n number = parseInt(prevMatch[1], 10) + 1;\n }\n }\n lines[currentLineIndex] = `${number}. ${line}`;\n }\n return lines.join('\\n');\n}\n\nexport function toggleTaskList(text: string, cursorPos: number): string {\n \n const lines = text.split('\\n');\n let currentLineIndex = 0;\n let charCount = 0;\n\n for (let i = 0; i < lines.length; i++) {\n charCount += lines[i].length + 1;\n \n if (charCount > cursorPos) {\n currentLineIndex = i;\n break;\n }\n }\n const line = lines[currentLineIndex];\n\n if (/^- \\[ \\]\\s/.test(line)) {\n lines[currentLineIndex] = line.replace(/^- \\[ \\]\\s/, '- [x] ');\n } else if (/^- \\[x\\]\\s/.test(line)) {\n lines[currentLineIndex] = line.replace(/^- \\[x\\]\\s/, '');\n } else {\n lines[currentLineIndex] = `- [ ] ${line}`;\n }\n return lines.join('\\n');\n}\n\nexport function toggleHeading(textarea: HTMLTextAreaElement, selection: { start: number; end: number }): string {\n \n const lines = textarea.value.split('\\n');\n\n let charCount = 0;\n let lineIndex = 0;\n for (let i = 0; i < lines.length; i++) {\n charCount += lines[i].length + 1;\n \n if (selection.start < charCount) {\n lineIndex = i;\n break;\n }\n }\n let lineContent = lines[lineIndex];\n\n if (lineContent.startsWith('### ')) {\n lines[lineIndex] = lineContent.slice(4);\n selection.start -= 4;\n selection.end -= 4;\n } else {\n lines[lineIndex] = `### ${lineContent}`;\n selection.start += 4;\n selection.end += 4;\n }\n\n const newText = lines.join('\\n');\n setTimeout(\n () => {\n textarea.focus();\n textarea.setSelectionRange(selection.start, selection.end);\n }\n );\n return newText;\n}\n\nexport function toggleBlockQuote(textarea: HTMLTextAreaElement, selection: { start: number; end: number }): string {\n \n const lines = textarea.value.split('\\n');\n\n let charCount = 0;\n let lineIndex = 0;\n for (let i = 0; i < lines.length; i++) {\n charCount += lines[i].length + 1;\n \n if (selection.start < charCount) {\n lineIndex = i;\n break;\n }\n }\n let lineContent = lines[lineIndex];\n\n if (lineContent.startsWith('> ')) {\n lines[lineIndex] = lineContent.slice(2);\n selection.start -= 2;\n selection.end -= 2;\n } else {\n lines[lineIndex] = `> ${lineContent}`;\n selection.start += 2;\n selection.end += 2;\n }\n\n const newText = lines.join('\\n');\n setTimeout(\n () => {\n textarea.focus();\n textarea.setSelectionRange(selection.start, selection.end);\n }\n );\n return newText;\n}\n\nfunction getWordAtCursor(text: string, cursorPosition: number): SelectionType{\n \n if (!text || cursorPosition < 0 || cursorPosition > text.length) {\n return {\n start: cursorPosition,\n end: cursorPosition,\n word: ''\n };\n }\n\n let start = cursorPosition;\n while (start > 0 && !isWordSeparator(text[start - 1])) {\n start--;\n }\n\n let end = cursorPosition;\n while (end < text.length && !isWordSeparator(text[end])) {\n end++;\n }\n\n return {\n start,\n end,\n word: text.substring(start, end)\n };\n}\n\nfunction isWordSeparator(char: string): boolean {\n return /\\s|\\t|\\n|\\r|,|\\.|!|\\?|:|;|\\(|\\)/.test(char);\n}\n","import { Directive, ElementRef, Renderer2, signal, effect, WritableSignal, OnDestroy } from '@angular/core';\nimport { marked } from 'marked';\n\n\n@Directive({\n exportAs: 'upMarkdown',\n selector: '[upMarkdown]',\n host: {\n '[class]': 'class',\n }\n})\nexport class UpMarkdownDirective implements OnDestroy {\n \n protected readonly markdown: WritableSignal<string> = signal('');\n protected readonly class: string = `\n [&_h1]:text-4xl [&_h1]:font-bold [&_h1]:mt-0 [&_h1]:mb-4 [&_h1]:border-b [&_h1]:border-[#eeeeee]\n [&_h2]:text-2xl [&_h2]:font-bold [&_h2]:mt-0 [&_h2]:mb-4 [&_h2]:border-b [&_h2]:border-[#eeeeee]\n [&_h3]:text-xl [&_h3]:font-bold [&_h3]:mt-0 [&_h3]:mb-4 [&_h3]:border-b [&_h3]:border-[#eeeeee]\n [&_h4]:text-base [&_h4]:font-bold [&_h4]:mt-0 [&_h4]:mb-4 [&_h4]:border-b [&_h4]:border-[#eeeeee]\n [&_h5]:text-sm [&_h5]:font-bold [&_h5]:mt-0 [&_h5]:mb-4 [&_h5]:border-b [&_h5]:border-[#eeeeee]\n [&_h6]:text-xs [&_h6]:font-bold [&_h6]:mt-0 [&_h6]:mb-4 [&_h6]:border-b [&_h6]:border-[#eeeeee]\n\n [&_p]:mt-0 [&_p]:mb-4\n\n [&_ul]:mt-0 [&_ul]:pl-5 [&_ul]:list-disc [&_ul]:mb-4\n [&_ol]:mt-0 [&_ol]:pl-5 [&_ol]:list-decimal [&_ol]:mb-4\n\n [&_blockquote]:pl-3 [&_blockquote]:border-l-2 [&_blockquote]:border-[var(--color-primary)] [&_blockquote]:text-gray-700\n\n [&_a]:text-[var(--color-primary)] [&_a]:underline\n `;\n protected observer: MutationObserver;\n\n constructor(\n protected readonly el: ElementRef,\n protected readonly renderer: Renderer2,\n ) {\n this.observer = new MutationObserver(\n () => {\n this.markdown.set(this.el.nativeElement.innerHTML || '');\n }\n );\n\n this.observer.observe(\n this.el.nativeElement, \n {\n subtree: true,\n childList: true,\n characterData: true,\n }\n );\n\n effect(\n () => {\n const native: HTMLElement = (this.el.nativeElement);\n \n this.markdown.set(native.innerHTML);\n this.renderer.setProperty(\n native, \n 'innerHTML', \n marked(\n this.markdown()\n .replace(/>/g, '>')\n .replace(/\\+\\+(.*?)\\+\\+/g, '<u>$1</u>'),\n {\n gfm: true,\n breaks: true\n }\n )\n );\n }\n );\n }\n\n public ngOnDestroy(): void{\n this.observer.disconnect();\n }\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { UNIPIN_GQL_CONFIG, UniPinGqlConfig } from '@unipin/angular-gql';\n\n@Injectable({ \n providedIn: 'root'\n})\nexport class MarkdownService {\n\n constructor(\n @Inject(UNIPIN_GQL_CONFIG) public readonly config: UniPinGqlConfig,\n protected readonly http: HttpClient\n ) { }\n\n public uploadImage(file: File): Observable<any>{\n const formData = new FormData();\n \n formData.append(\n 'operations', \n JSON.stringify({\n query: `\n mutation ($attachment: Upload!) {\n fileMgmtSysMsFileUpload(attachment: $attachment, isPublic: true) {\n guid\n fileName\n publicUrl\n }\n }\n `\n })\n );\n \n formData.append('file', file);\n formData.append(\n 'map', \n JSON.stringify(\n { \n file: ['variables.attachment'] \n }\n )\n );\n \n return this.http.post(\n this.config.uri, \n formData, \n {\n headers: new HttpHeaders({\n 'x-apollo-operation-name': 'fileUpload'\n })\n }\n );\n }\n}\n","import { booleanAttribute, ChangeDetectionStrategy, Component, computed, forwardRef, HostListener, input, InputSignal, model, viewChild } from '@angular/core';\nimport { ControlValueAccessor } from '@angular/forms';\nimport { Subscription } from 'rxjs';\nimport { ClassValue } from 'clsx';\nimport { NgIcon, provideIcons } from '@ng-icons/core';\nimport { matChecklistRound, matFormatQuoteRound, matFormatBoldRound, matFormatItalicRound, matFormatListBulletedRound, matFormatListNumberedRound, matFormatUnderlinedRound } from '@ng-icons/material-icons/round';\nimport { up } from '@unipin/angular-applet/common';\nimport { compressImage } from '@unipin/angular-applet/common';\nimport { UpButtonDirective } from '@unipin/angular-applet/buttons';\nimport { UpFieldControl, UpFieldControlComponent } from '@unipin/angular-applet/forms';\nimport { SelectionType, toggleBlockQuote, toggleBold, toggleHeading, toggleItalic, toggleOrderedList, toggleTaskList, toggleUnderline, toggleUnorderedList } from '../utils/markdown-style.utils';\nimport { UpMarkdownDirective } from '../directives/markdown.directive';\nimport { MarkdownService } from '../services/markdown.services';\n\n\n@Component({\n selector: 'up-markdown-input',\n templateUrl: './markdown-input.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': '_computedClass()',\n },\n providers: [\n {\n provide: UpFieldControl,\n useExisting: forwardRef(() => UpMarkdownInputComponent)\n },\n provideIcons(\n {\n matFormatBoldRound,\n matFormatQuoteRound,\n matFormatItalicRound,\n matFormatUnderlinedRound,\n matFormatListNumberedRound,\n matFormatListBulletedRound,\n matChecklistRound,\n customHeading: `\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path d=\"M6 4v16h3V13h6v7h3V4h-3v7H9V4H6z\" transform=\"scale(0.8) translate(3,2)\"/>\n </svg>\n `\n }\n ),\n ],\n imports: [\n NgIcon,\n UpMarkdownDirective,\n UpButtonDirective\n ],\n})\nexport class UpMarkdownInputComponent extends UpFieldControlComponent implements ControlValueAccessor {\n\n public readonly value = model('');\n public readonly placeholder = input('');\n public readonly mode = model<'write' | 'preview'>('write');\n public readonly inlineClass = input<ClassValue>('', { alias: 'class' });\n\n public readonly textarea = viewChild<{ nativeElement: HTMLTextAreaElement }>('textarea');\n public readonly buttons = [\n { icon: 'customHeading', action: 'heading' },\n { icon: 'matFormatBoldRound', action: 'bold' },\n { icon: 'matFormatItalicRound', action: 'italic' },\n { icon: 'matFormatUnderlinedRound', action: 'underline' },\n { icon: 'matFormatQuoteRound', action: 'blockQuote' },\n { icon: 'matFormatListNumberedRound', action: 'ol' },\n { icon: 'matFormatListBulletedRound', action: 'ul' },\n { icon: 'matChecklistRound', action: 'taskList' },\n ];\n\n public readonly disabled = input(\n false, \n { \n transform: booleanAttribute \n }\n );\n public readonly contextGuid: InputSignal<string> = input('');\n public readonly contextType: InputSignal<string> = input('');\n\n public isTouched: boolean = false;\n \n protected readonly _computedClass = computed(\n () => {\n return up(\n 'peer placeholder:text-muted-foreground/30 selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex flex-col min-h-48 size-full min-w-0 rounded-md border bg-transparent text-base shadow-xs transition-[color,box-shadow] outline-none md:text-sm overflow-hidden',\n 'has-[textarea:focus-visible]:border-ring has-[textarea:focus-visible]:ring-ring/50 has-[textarea:focus-visible]:ring-[3px] has-[textarea:focus-visible]:outline-none',\n this.error()? 'ring-destructive/20 dark:ring-destructive/40 border-destructive has-[textarea:focus-visible]:ring-destructive/50' : '',\n this.inlineClass(),\n );\n }\n );\n\n protected imageData?: any;\n protected selection?: SelectionType;\n protected sub: Subscription | null = null;\n\n /**\n * Callback function to handle value changes in the markdown input component.\n * @type {(_val: any) => void}\n */\n protected _onChange: (_val: any) => void = (_val: any): void => {};\n\n /**\n * Callback function to handle touch events in the markdown input component.\n * @type {() => void}\n */\n protected _onTouched: () => void = (): void => {};\n\n constructor(\n protected readonly markdownService: MarkdownService\n ) {\n super();\n\n if (this.ngControl !== null) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n /**\n * Handles keyboard events and button actions for the markdown input.\n *\n * @param {KeyboardEvent} event - The keyboard event.\n */\n @HostListener('document:keyup', ['$event'])\n protected handleStyleWithKeyboard(event: KeyboardEvent): void{\n if (\n !this.textarea() ||\n this.textarea()!.nativeElement.tagName !== 'TEXTAREA'\n ) {\n return;\n }\n\n if (\n event.ctrlKey || \n event.metaKey\n ) {\n let result = null;\n\n if (event.key.toLowerCase() === 'b') {\n result = this.setStyle('bold', this.textarea()!.nativeElement);\n }\n\n if (event.key.toLowerCase() === 'i') {\n result = this.setStyle('italic', this.textarea()!.nativeElement);\n }\n\n if (event.key.toLowerCase() === 'u') {\n result = this.setStyle('underline', this.textarea()!.nativeElement);\n }\n\n if (result !== null) {\n this.value.set(result);\n this._onChange(result);\n }\n }\n }\n \n public ngOnDestroy(): void{\n this.sub?.unsubscribe()\n }\n\n /**\n * Registers a callback function to be called when the password input value changes.\n * @param {(_val: any) => void} fn - Callback function for value changes.\n */\n public registerOnChange(fn: any): void{\n this._onChange = fn;\n }\n\n /**\n * Registers a callback function to be called when the password input is touched.\n * @param {() => void} fn - Callback function for touch events.\n */\n public registerOnTouched(fn: any): void{\n this._onTouched = fn;\n }\n\n /**\n * Writes a new value to the markdown input.\n * @param {*} val - The new value to be set.\n */\n public writeValue(val: any): void{\n this.value.set(val?? '');\n }\n\n /**\n * Event handler to handle touch status.\n *\n * @returns {void}\n */\n public touch(): void{\n if (!this.isTouched) {\n this._onTouched();\n this.isTouched = true;\n }\n this.value.set(this.textarea()!.nativeElement.value);\n }\n\n public change(event: Event): void{\n const value = (event.target as HTMLTextAreaElement).value;\n\n if (!this.isTouched) {\n this._onTouched();\n this.isTouched = true;\n }\n this._onChange(value);\n }\n\n /**\n * Handles button actions for the markdown input.\n *\n * @param {string} action - The action to perform.\n * @returns {void}\n */\n public applyStyle(action: string): void {\n const textarea = this.textarea()?.nativeElement;\n if (!textarea) {\n return;\n }\n\n const result = this.setStyle(action, textarea);\n if (result !== null) {\n this.value.set(result);\n this._onChange(result);\n }\n }\n\n public changeSelection(event: Event): void{\n const target = event.target as HTMLTextAreaElement;\n const word = target.value.substring(target.selectionStart, target.selectionEnd);\n\n this.selection = {\n word,\n end: target.selectionEnd,\n start: target.selectionStart,\n };\n }\n\n public async pasteImage(event: ClipboardEvent): Promise<void>{\n const cursor = this.selection?.start;\n const items = event.clipboardData?.items;\n const textarea = this.textarea()?.nativeElement;\n \n if (\n !items || \n cursor === undefined ||\n cursor === null ||\n !textarea\n ) {\n return;\n } \n\n for (let i = 0; i < items.length; i++) {\n if (items[i].type.startsWith('image/')) {\n const file = await compressImage(\n {\n quality: 0.8,\n file: items[i].getAsFile()!,\n }\n );\n\n if (!file) {\n return;\n }\n\n const errorImageText = `<!-- Upload image failed -->`;\n const errorImageSizeText = `<!-- Image size must be less than 5MB -->`;\n const uploadText = `<!-- Uploading \"${ file?.name.replace(/ /g, '-') }\"... -->`;\n\n textarea.value = textarea.value.substring(0, cursor) + uploadText;\n \n this.value.set(textarea.value);\n this._onChange(textarea.value);\n\n setTimeout(\n () => {\n textarea.setSelectionRange( cursor + uploadText.length, cursor + uploadText.length,);\n textarea.focus();\n }\n );\n\n if (\n file?.size && \n file?.size > 5 * 1024 * 1024\n ) {\n this.replaceAndSetCursor(\n textarea!,\n {\n searchValue: uploadText,\n replaceValue: errorImageSizeText\n },\n {\n start: cursor! + errorImageSizeText.length,\n end: cursor! + errorImageSizeText.length\n }\n )\n return;\n }\n\n this.sub?.unsubscribe();\n this.sub = this.markdownService.uploadImage(file).subscribe({\n error: () => {\n this.replaceAndSetCursor(\n textarea,\n {\n searchValue: uploadText,\n replaceValue: errorImageText\n },\n {\n start: cursor + errorImageText.length,\n end: cursor + errorImageText.length\n }\n );\n },\n next: ({ data:{ fileMgmtSysMsFileUpload }}) => {\n this.imageData = fileMgmtSysMsFileUpload;\n \n const markdownImageText = ` })`;\n this.replaceAndSetCursor(\n textarea,\n {\n searchValue: uploadText,\n replaceValue: markdownImageText\n },\n {\n start: cursor + markdownImageText.length,\n end: cursor + markdownImageText.length\n }\n );\n },\n });\n }\n }\n }\n\n protected replaceAndSetCursor(\n textarea: HTMLTextAreaElement, \n textReplace: {\n searchValue: string, replaceValue: string\n }, \n cursorPosition: {\n start: number, end: number\n }\n ): void{\n this.value.set(\n textarea.value.replace(\n textReplace.searchValue, \n textReplace.replaceValue\n )\n );\n \n this._onChange(\n textarea.value.replace(\n textReplace.searchValue, \n textReplace.replaceValue\n )\n );\n\n setTimeout(\n () => {\n textarea.setSelectionRange( cursorPosition.start, cursorPosition.end );\n textarea.focus();\n }\n );\n }\n\n protected setStyle(action: string, textarea: HTMLTextAreaElement): string | null{\n if (\n !textarea ||\n textarea.tagName !== 'TEXTAREA' ||\n !this.selection\n ) {\n return null;\n }\n\n switch (action) {\n case 'bold':\n return toggleBold(textarea, this.selection);\n\n case 'italic':\n return toggleItalic(textarea, this.selection);\n\n case 'underline':\n return toggleUnderline(textarea, this.selection);\n\n case 'ul':\n return toggleUnorderedList(textarea.value, this.selection.start);\n\n case 'ol':\n return toggleOrderedList(textarea.value, this.selection.start);\n\n case 'heading':\n return toggleHeading(textarea, this.selection);\n\n case 'taskList':\n return toggleTaskList(textarea.value, this.selection.start);\n\n case 'blockQuote':\n return toggleBlockQuote(textarea, this.selection);\n\n default:\n return null;\n }\n }\n}\n","<div class=\"shrink-0 w-full flex flex-col-reverse md:flex-row md:items-center justify-between gap-1 bg-[#f5f7f6]\">\n <div class=\"flex items-center h-full\">\n <button\n upButton\n variant=\"ghost\"\n class=\"transition-none rounded-none rounded-t-md\"\n [class]=\"\n mode() !== 'write'? '' : 'border-r border-input bg-white'\n \"\n (click)=\"mode.set('write')\"\n >\n Write\n </button>\n\n <button\n upButton\n variant=\"ghost\"\n class=\"transition-none rounded-none rounded-t-md\"\n [class]=\"\n mode() !== 'preview'? '' : 'border-x border-input bg-white'\n \"\n (click)=\"mode.set('preview')\"\n >\n Preview\n </button>\n </div>\n\n @if (mode() === 'write') {\n <div class=\"flex justify-start md:justify-end items-center gap-0.5\">\n @for (btn of buttons; track btn.action) {\n <button\n upButton\n size=\"sm\"\n variant=\"ghost\"\n class=\"p-0 px-2 py-1\"\n [disabled]=\"disabled()\"\n (click)=\"applyStyle(btn.action)\"\n >\n <ng-icon\n size=\"16px\" \n [name]=\"btn.icon\"\n />\n </button>\n }\n </div>\n }\n</div>\n\n<div class=\"grow relative\">\n @if (mode() === 'preview') {\n <div\n upMarkdown\n class=\"size-full absolute top-0 left-0 bg-white p-2 outline-none text-wrap break-words overflow-y-auto\"\n [innerHTML]=\"(value() || 'Nothing to preview')\"\n ></div>\n }\n @else {\n <textarea\n #textarea\n class=\"size-full absolute top-0 left-0 bg-white p-2 outline-none resize-none\" \n [value]=\"value()\"\n [disabled]=\"disabled()\"\n [placeholder]=\"placeholder()\"\n (blur)=\"touch()\"\n (input)=\"change($event)\"\n (paste)=\"pasteImage($event)\"\n (keyup)=\"changeSelection($event)\"\n (mouseup)=\"changeSelection($event)\"\n ></textarea>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.MarkdownService"],"mappings":"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"}
|