@unipin/angular-applet 21.5.0 → 21.6.0

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.
Files changed (65) hide show
  1. package/fesm2022/unipin-angular-applet-accordion.mjs +12 -12
  2. package/fesm2022/unipin-angular-applet-accordion.mjs.map +1 -1
  3. package/fesm2022/unipin-angular-applet-alert-dialog.mjs +6 -6
  4. package/fesm2022/unipin-angular-applet-alert-dialog.mjs.map +1 -1
  5. package/fesm2022/unipin-angular-applet-alert.mjs +9 -9
  6. package/fesm2022/unipin-angular-applet-alert.mjs.map +1 -1
  7. package/fesm2022/unipin-angular-applet-approval.mjs +119 -10
  8. package/fesm2022/unipin-angular-applet-approval.mjs.map +1 -1
  9. package/fesm2022/{unipin-angular-applet-audit-audit-modal.component-Y61VDaze.mjs → unipin-angular-applet-audit-audit-modal.component-DNlMbUda.mjs} +4 -4
  10. package/fesm2022/{unipin-angular-applet-audit-audit-modal.component-Y61VDaze.mjs.map → unipin-angular-applet-audit-audit-modal.component-DNlMbUda.mjs.map} +1 -1
  11. package/fesm2022/unipin-angular-applet-audit.mjs +7 -7
  12. package/fesm2022/unipin-angular-applet-audit.mjs.map +1 -1
  13. package/fesm2022/unipin-angular-applet-auth.mjs +21 -21
  14. package/fesm2022/unipin-angular-applet-auth.mjs.map +1 -1
  15. package/fesm2022/unipin-angular-applet-avatar.mjs +3 -3
  16. package/fesm2022/unipin-angular-applet-avatar.mjs.map +1 -1
  17. package/fesm2022/unipin-angular-applet-badge.mjs +3 -3
  18. package/fesm2022/unipin-angular-applet-badge.mjs.map +1 -1
  19. package/fesm2022/unipin-angular-applet-buttons.mjs +6 -6
  20. package/fesm2022/unipin-angular-applet-buttons.mjs.map +1 -1
  21. package/fesm2022/unipin-angular-applet-calendar.mjs +12 -12
  22. package/fesm2022/unipin-angular-applet-calendar.mjs.map +1 -1
  23. package/fesm2022/unipin-angular-applet-collapsible.mjs +9 -9
  24. package/fesm2022/unipin-angular-applet-collapsible.mjs.map +1 -1
  25. package/fesm2022/unipin-angular-applet-common.mjs +24 -24
  26. package/fesm2022/unipin-angular-applet-common.mjs.map +1 -1
  27. package/fesm2022/unipin-angular-applet-containers.mjs +12 -12
  28. package/fesm2022/unipin-angular-applet-containers.mjs.map +1 -1
  29. package/fesm2022/unipin-angular-applet-dialog.mjs +21 -21
  30. package/fesm2022/unipin-angular-applet-dialog.mjs.map +1 -1
  31. package/fesm2022/unipin-angular-applet-forms.mjs +165 -107
  32. package/fesm2022/unipin-angular-applet-forms.mjs.map +1 -1
  33. package/fesm2022/unipin-angular-applet-froala.mjs +3 -3
  34. package/fesm2022/unipin-angular-applet-froala.mjs.map +1 -1
  35. package/fesm2022/unipin-angular-applet-grids.mjs +13 -9
  36. package/fesm2022/unipin-angular-applet-grids.mjs.map +1 -1
  37. package/fesm2022/unipin-angular-applet-infinite-scroll.mjs +3 -3
  38. package/fesm2022/unipin-angular-applet-infinite-scroll.mjs.map +1 -1
  39. package/fesm2022/unipin-angular-applet-json-viewer.mjs +3 -3
  40. package/fesm2022/unipin-angular-applet-json-viewer.mjs.map +1 -1
  41. package/fesm2022/unipin-angular-applet-kbd.mjs +3 -3
  42. package/fesm2022/unipin-angular-applet-kbd.mjs.map +1 -1
  43. package/fesm2022/unipin-angular-applet-loading-dialog.mjs +6 -6
  44. package/fesm2022/unipin-angular-applet-loading-dialog.mjs.map +1 -1
  45. package/fesm2022/unipin-angular-applet-markdown.mjs +13 -10
  46. package/fesm2022/unipin-angular-applet-markdown.mjs.map +1 -1
  47. package/fesm2022/unipin-angular-applet-popover.mjs +15 -15
  48. package/fesm2022/unipin-angular-applet-popover.mjs.map +1 -1
  49. package/fesm2022/unipin-angular-applet-progress-bar.mjs +3 -3
  50. package/fesm2022/unipin-angular-applet-progress-bar.mjs.map +1 -1
  51. package/fesm2022/unipin-angular-applet-skeleton.mjs +3 -3
  52. package/fesm2022/unipin-angular-applet-skeleton.mjs.map +1 -1
  53. package/fesm2022/unipin-angular-applet-spinner.mjs +3 -3
  54. package/fesm2022/unipin-angular-applet-spinner.mjs.map +1 -1
  55. package/fesm2022/unipin-angular-applet-stepper.mjs +6 -6
  56. package/fesm2022/unipin-angular-applet-stepper.mjs.map +1 -1
  57. package/fesm2022/unipin-angular-applet-swipeable.mjs +12 -12
  58. package/fesm2022/unipin-angular-applet-swipeable.mjs.map +1 -1
  59. package/fesm2022/unipin-angular-applet-tabs.mjs +9 -9
  60. package/fesm2022/unipin-angular-applet-tabs.mjs.map +1 -1
  61. package/fesm2022/unipin-angular-applet-tooltip.mjs +3 -3
  62. package/fesm2022/unipin-angular-applet-tooltip.mjs.map +1 -1
  63. package/package.json +1 -1
  64. package/types/unipin-angular-applet-approval.d.ts +42 -11
  65. package/types/unipin-angular-applet-forms.d.ts +27 -4
@@ -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;8GAjCY,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,QAAA,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;;2FAeV,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;;;;"}
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.7", ngImport: i0, type: UpKbdDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
13
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.7", 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 }); }
12
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: UpKbdDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
13
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.10", 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.7", ngImport: i0, type: UpKbdDirective, decorators: [{
15
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", 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;8GAdY,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAd,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;;2FAAd,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;;;;"}
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.7", ngImport: i0, type: UpLoadingDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
60
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.7", 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: [
59
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: UpLoadingDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
60
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.10", 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.7", ngImport: i0, type: UpLoadingDialogComponent, decorators: [{
127
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", 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.7", 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.7", ngImport: i0, type: UpLoadingDialogController, providedIn: 'root' }); }
236
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", 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.10", ngImport: i0, type: UpLoadingDialogController, providedIn: 'root' }); }
238
238
  }
239
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: UpLoadingDialogController, decorators: [{
239
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", 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(/&gt;/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.7", ngImport: i0, type: UpMarkdownDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
346
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.7", type: UpMarkdownDirective, isStandalone: true, selector: "[upMarkdown]", host: { properties: { "class": "class" } }, exportAs: ["upMarkdown"], ngImport: i0 }); }
348
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", 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.10", 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.7", ngImport: i0, type: UpMarkdownDirective, decorators: [{
351
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", 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.7", ngImport: i0, type: MarkdownService, deps: [{ token: UNIPIN_GQL_CONFIG }, { token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
388
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: MarkdownService, providedIn: 'root' }); }
390
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", 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.10", ngImport: i0, type: MarkdownService, providedIn: 'root' }); }
389
392
  }
390
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: MarkdownService, decorators: [{
393
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", 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.7", ngImport: i0, type: UpMarkdownInputComponent, deps: [{ token: MarkdownService }], target: i0.ɵɵFactoryTarget.Component }); }
641
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.7", 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: [
643
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: UpMarkdownInputComponent, deps: [{ token: MarkdownService }], target: i0.ɵɵFactoryTarget.Component }); }
644
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.10", 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.7", ngImport: i0, type: UpMarkdownInputComponent, decorators: [{
665
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", 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(/&gt;/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 = `![${ this.imageData.fileName }](${ this.imageData.publicUrl.replace(/ /g, '%20') })`;\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(/&gt;/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 = `![${ this.imageData.fileName }](${ this.imageData.publicUrl.replace(/ /g, '%20') })`;\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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"}
@@ -4,10 +4,10 @@ import { UpDialogCloseDirective, UpDialogTriggerDirective, UpDialogRef, UpDialog
4
4
  import { up } from '@unipin/angular-applet/common';
5
5
 
6
6
  class UpPopoverCloseDirective extends UpDialogCloseDirective {
7
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: UpPopoverCloseDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
8
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.7", type: UpPopoverCloseDirective, isStandalone: true, selector: "[upPopoverClose]", exportAs: ["upPopoverClose"], usesInheritance: true, ngImport: i0 }); }
7
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: UpPopoverCloseDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
8
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.10", type: UpPopoverCloseDirective, isStandalone: true, selector: "[upPopoverClose]", exportAs: ["upPopoverClose"], usesInheritance: true, ngImport: i0 }); }
9
9
  }
10
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: UpPopoverCloseDirective, decorators: [{
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: UpPopoverCloseDirective, decorators: [{
11
11
  type: Directive,
12
12
  args: [{
13
13
  exportAs: 'upPopoverClose',
@@ -25,10 +25,10 @@ class UpPopoverTriggerDirective extends UpDialogTriggerDirective {
25
25
  this.dialog.mutableAttachTo().set(this.host.nativeElement);
26
26
  this.dialog.mutableCloseOnOutsidePointerEvents().set(true);
27
27
  }
28
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: UpPopoverTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
29
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.7", type: UpPopoverTriggerDirective, isStandalone: true, selector: "[upPopoverTrigger]", host: { attributes: { "aria-haspopup": "dialog" }, properties: { "id": "id()", "attr.data-state": "state()" } }, exportAs: ["upPopoverTrigger"], usesInheritance: true, ngImport: i0 }); }
28
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: UpPopoverTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
29
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.10", type: UpPopoverTriggerDirective, isStandalone: true, selector: "[upPopoverTrigger]", host: { attributes: { "aria-haspopup": "dialog" }, properties: { "id": "id()", "attr.data-state": "state()" } }, exportAs: ["upPopoverTrigger"], usesInheritance: true, ngImport: i0 }); }
30
30
  }
31
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: UpPopoverTriggerDirective, decorators: [{
31
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: UpPopoverTriggerDirective, decorators: [{
32
32
  type: Directive,
33
33
  args: [{
34
34
  exportAs: 'upPopoverTrigger',
@@ -50,10 +50,10 @@ class UpPopoverContentDirective {
50
50
  return up('relative border-border w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none transition-all duration-200', 'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out data-[state=open]:fade-in', 'data-[side=top]:slide-in-from-bottom-4 data-[side=top]:slide-out-from-top-4', 'data-[side=bottom]:slide-in-from-top-4 data-[side=bottom]:slide-out-from-bottom-4', 'data-[side=left]:slide-in-from-right-4 data-[side=left]:slide-out-from-left-4', 'data-[side=right]:slide-in-from-left-4 data-[side=right]:slide-out-from-right-4', this.inlineClass());
51
51
  }, ...(ngDevMode ? [{ debugName: "_computedClass" }] : /* istanbul ignore next */ []));
52
52
  }
53
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: UpPopoverContentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
54
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.7", type: UpPopoverContentDirective, isStandalone: true, selector: "[upPopoverContent]", inputs: { inlineClass: { classPropertyName: "inlineClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "_computedClass()", "attr.data-state": "state()" } }, exportAs: ["upPopoverContent"], ngImport: i0 }); }
53
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: UpPopoverContentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
54
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.2.10", type: UpPopoverContentDirective, isStandalone: true, selector: "[upPopoverContent]", inputs: { inlineClass: { classPropertyName: "inlineClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "_computedClass()", "attr.data-state": "state()" } }, exportAs: ["upPopoverContent"], ngImport: i0 }); }
55
55
  }
56
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: UpPopoverContentDirective, decorators: [{
56
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: UpPopoverContentDirective, decorators: [{
57
57
  type: Directive,
58
58
  args: [{
59
59
  exportAs: 'upPopoverContent',
@@ -66,12 +66,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImpor
66
66
  }], propDecorators: { inlineClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
67
67
 
68
68
  class UpPopoverContentRefDirective extends UpDialogContentRefDirective {
69
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: UpPopoverContentRefDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
70
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.7", type: UpPopoverContentRefDirective, isStandalone: true, selector: "[upPopoverContentRef]", providers: [
69
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: UpPopoverContentRefDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
70
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.10", type: UpPopoverContentRefDirective, isStandalone: true, selector: "[upPopoverContentRef]", providers: [
71
71
  provideExposesStateProviderExisting(() => UpPopoverContentRefDirective)
72
72
  ], exportAs: ["upPopoverContentRef"], usesInheritance: true, ngImport: i0 }); }
73
73
  }
74
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: UpPopoverContentRefDirective, decorators: [{
74
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: UpPopoverContentRefDirective, decorators: [{
75
75
  type: Directive,
76
76
  args: [{
77
77
  exportAs: 'upPopoverContentRef',
@@ -281,8 +281,8 @@ class UpPopoverComponent extends UpDialog {
281
281
  });
282
282
  });
283
283
  }
284
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: UpPopoverComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
285
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.7", type: UpPopoverComponent, isStandalone: true, selector: "up-popover", inputs: { placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null }, alignment: { classPropertyName: "alignment", publicName: "alignment", isSignal: true, isRequired: false, transformFunction: null }, placementOffset: { classPropertyName: "placementOffset", publicName: "placementOffset", isSignal: true, isRequired: false, transformFunction: null }, alignmentOffset: { classPropertyName: "alignmentOffset", publicName: "alignmentOffset", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
284
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: UpPopoverComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
285
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.10", type: UpPopoverComponent, isStandalone: true, selector: "up-popover", inputs: { placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null }, alignment: { classPropertyName: "alignment", publicName: "alignment", isSignal: true, isRequired: false, transformFunction: null }, placementOffset: { classPropertyName: "placementOffset", publicName: "placementOffset", isSignal: true, isRequired: false, transformFunction: null }, alignmentOffset: { classPropertyName: "alignmentOffset", publicName: "alignmentOffset", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
286
286
  {
287
287
  provide: UpDialog,
288
288
  useExisting: forwardRef(() => UpPopoverComponent)
@@ -295,7 +295,7 @@ class UpPopoverComponent extends UpDialog {
295
295
  <ng-content />
296
296
  `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
297
297
  }
298
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.7", ngImport: i0, type: UpPopoverComponent, decorators: [{
298
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.10", ngImport: i0, type: UpPopoverComponent, decorators: [{
299
299
  type: Component,
300
300
  args: [{
301
301
  selector: 'up-popover',