@unipin/angular-applet 18.9.7 → 21.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +49 -10
- package/common/assets/sprites/flagGlobal.png +0 -0
- package/common/assets/sprites/flagSprite42.webp +0 -0
- package/common/assets/styles/freakflags.scss +263 -0
- package/common/assets/styles/theme.css +69 -0
- package/fesm2022/unipin-angular-applet-accordion.mjs +242 -0
- package/fesm2022/unipin-angular-applet-accordion.mjs.map +1 -0
- package/fesm2022/unipin-angular-applet-alert-dialog.mjs +267 -0
- package/fesm2022/unipin-angular-applet-alert-dialog.mjs.map +1 -0
- package/fesm2022/unipin-angular-applet-alert.mjs +94 -0
- package/fesm2022/unipin-angular-applet-alert.mjs.map +1 -0
- package/fesm2022/unipin-angular-applet-auth.mjs +707 -0
- package/fesm2022/unipin-angular-applet-auth.mjs.map +1 -0
- package/fesm2022/unipin-angular-applet-avatar.mjs +41 -0
- package/fesm2022/unipin-angular-applet-avatar.mjs.map +1 -0
- package/fesm2022/unipin-angular-applet-badge.mjs +50 -0
- package/fesm2022/unipin-angular-applet-badge.mjs.map +1 -0
- package/fesm2022/unipin-angular-applet-buttons.mjs +263 -0
- package/fesm2022/unipin-angular-applet-buttons.mjs.map +1 -0
- package/fesm2022/unipin-angular-applet-calendar.mjs +492 -0
- package/fesm2022/unipin-angular-applet-calendar.mjs.map +1 -0
- package/fesm2022/unipin-angular-applet-collapsible.mjs +97 -0
- package/fesm2022/unipin-angular-applet-collapsible.mjs.map +1 -0
- package/fesm2022/unipin-angular-applet-common.mjs +342 -0
- package/fesm2022/unipin-angular-applet-common.mjs.map +1 -0
- package/fesm2022/unipin-angular-applet-containers.mjs +472 -0
- package/fesm2022/unipin-angular-applet-containers.mjs.map +1 -0
- package/fesm2022/unipin-angular-applet-dialog.mjs +535 -0
- package/fesm2022/unipin-angular-applet-dialog.mjs.map +1 -0
- package/fesm2022/unipin-angular-applet-forms.mjs +1699 -0
- package/fesm2022/unipin-angular-applet-forms.mjs.map +1 -0
- package/fesm2022/unipin-angular-applet-froala.mjs +298 -0
- package/fesm2022/unipin-angular-applet-froala.mjs.map +1 -0
- package/fesm2022/unipin-angular-applet-grids.mjs +105 -0
- package/fesm2022/unipin-angular-applet-grids.mjs.map +1 -0
- package/fesm2022/unipin-angular-applet-infinite-scroll.mjs +86 -0
- package/fesm2022/unipin-angular-applet-infinite-scroll.mjs.map +1 -0
- package/fesm2022/unipin-angular-applet-json-viewer.mjs +71 -0
- package/fesm2022/unipin-angular-applet-json-viewer.mjs.map +1 -0
- package/fesm2022/unipin-angular-applet-loading-dialog.mjs +252 -0
- package/fesm2022/unipin-angular-applet-loading-dialog.mjs.map +1 -0
- package/fesm2022/unipin-angular-applet-markdown.mjs +703 -0
- package/fesm2022/unipin-angular-applet-markdown.mjs.map +1 -0
- package/fesm2022/unipin-angular-applet-micro-frontend.mjs +75 -0
- package/fesm2022/unipin-angular-applet-micro-frontend.mjs.map +1 -0
- package/fesm2022/unipin-angular-applet-popover.mjs +333 -0
- package/fesm2022/unipin-angular-applet-popover.mjs.map +1 -0
- package/fesm2022/unipin-angular-applet-progress-bar.mjs +38 -0
- package/fesm2022/unipin-angular-applet-progress-bar.mjs.map +1 -0
- package/fesm2022/unipin-angular-applet-skeleton.mjs +32 -0
- package/fesm2022/unipin-angular-applet-skeleton.mjs.map +1 -0
- package/fesm2022/unipin-angular-applet-spinner.mjs +144 -0
- package/fesm2022/unipin-angular-applet-spinner.mjs.map +1 -0
- package/fesm2022/unipin-angular-applet-swipeable.mjs +270 -0
- package/fesm2022/unipin-angular-applet-swipeable.mjs.map +1 -0
- package/fesm2022/unipin-angular-applet-tabs.mjs +142 -0
- package/fesm2022/unipin-angular-applet-tabs.mjs.map +1 -0
- package/fesm2022/unipin-angular-applet-tooltip.mjs +118 -0
- package/fesm2022/unipin-angular-applet-tooltip.mjs.map +1 -0
- package/fesm2022/unipin-angular-applet.mjs +5 -4617
- package/fesm2022/unipin-angular-applet.mjs.map +1 -1
- package/package.json +132 -29
- package/types/unipin-angular-applet-accordion.d.ts +60 -0
- package/types/unipin-angular-applet-alert-dialog.d.ts +35 -0
- package/types/unipin-angular-applet-alert.d.ts +34 -0
- package/types/unipin-angular-applet-auth.d.ts +225 -0
- package/types/unipin-angular-applet-avatar.d.ts +16 -0
- package/types/unipin-angular-applet-badge.d.ts +20 -0
- package/types/unipin-angular-applet-buttons.d.ts +37 -0
- package/types/unipin-angular-applet-calendar.d.ts +44 -0
- package/types/unipin-angular-applet-collapsible.d.ts +35 -0
- package/types/unipin-angular-applet-common.d.ts +94 -0
- package/types/unipin-angular-applet-containers.d.ts +179 -0
- package/types/unipin-angular-applet-dialog.d.ts +180 -0
- package/types/unipin-angular-applet-forms.d.ts +412 -0
- package/types/unipin-angular-applet-froala.d.ts +85 -0
- package/types/unipin-angular-applet-grids.d.ts +22 -0
- package/types/unipin-angular-applet-infinite-scroll.d.ts +51 -0
- package/types/unipin-angular-applet-json-viewer.d.ts +30 -0
- package/types/unipin-angular-applet-loading-dialog.d.ts +19 -0
- package/types/unipin-angular-applet-markdown.d.ts +119 -0
- package/types/unipin-angular-applet-micro-frontend.d.ts +11 -0
- package/types/unipin-angular-applet-popover.d.ts +58 -0
- package/types/unipin-angular-applet-progress-bar.d.ts +14 -0
- package/types/unipin-angular-applet-skeleton.d.ts +11 -0
- package/types/unipin-angular-applet-spinner.d.ts +12 -0
- package/types/unipin-angular-applet-swipeable.d.ts +66 -0
- package/types/unipin-angular-applet-tabs.d.ts +40 -0
- package/types/unipin-angular-applet-tooltip.d.ts +32 -0
- package/types/unipin-angular-applet.d.ts +3 -0
- package/esm2022/graphql/generated.mjs +0 -938
- package/esm2022/lib/components/approval/detail/approval-detail.component.mjs +0 -78
- package/esm2022/lib/components/approval/form/approval-form.component.mjs +0 -128
- package/esm2022/lib/components/approval/index.mjs +0 -5
- package/esm2022/lib/components/approval/list/approval-list.component.mjs +0 -114
- package/esm2022/lib/components/approval/list/provide-approval-entities.util.mjs +0 -9
- package/esm2022/lib/components/approval/services/approval.service.mjs +0 -46
- package/esm2022/lib/components/audit/detail/audit-detail.component.mjs +0 -123
- package/esm2022/lib/components/audit/index.mjs +0 -3
- package/esm2022/lib/components/audit/list/audit-list.component.mjs +0 -81
- package/esm2022/lib/components/audit/service/audit.service.mjs +0 -49
- package/esm2022/lib/components/audit/types/audit-detail-form.type.mjs +0 -2
- package/esm2022/lib/components/buttons/group/btn-group.component.mjs +0 -43
- package/esm2022/lib/components/buttons/group/interfaces/btn-group-config.interface.mjs +0 -2
- package/esm2022/lib/components/buttons/index.mjs +0 -3
- package/esm2022/lib/components/buttons/loading/btn-loading.component.mjs +0 -48
- package/esm2022/lib/components/containers/applet-container/applet-container.component.mjs +0 -55
- package/esm2022/lib/components/containers/applet-container/provide-applet-config.util.mjs +0 -9
- package/esm2022/lib/components/containers/colum-header-container/column-header-container.component.mjs +0 -23
- package/esm2022/lib/components/containers/column-container/column-container.component.mjs +0 -79
- package/esm2022/lib/components/containers/column-container/directives/lazy-route.directive.mjs +0 -57
- package/esm2022/lib/components/containers/index.mjs +0 -7
- package/esm2022/lib/components/containers/list-container/index.mjs +0 -3
- package/esm2022/lib/components/containers/list-container/interfaces/list-container-config.interface.mjs +0 -2
- package/esm2022/lib/components/containers/list-container/list-pagination-container/list-pagination-container.component.mjs +0 -58
- package/esm2022/lib/components/containers/list-container/list-snapshot-container/list-snapshot-container.component.mjs +0 -57
- package/esm2022/lib/components/containers/modal-container/modal-container.component.mjs +0 -40
- package/esm2022/lib/components/filter/filter.component.mjs +0 -222
- package/esm2022/lib/components/filter/index.mjs +0 -2
- package/esm2022/lib/components/filter/interfaces/filter-config.interface.mjs +0 -2
- package/esm2022/lib/components/filter/interfaces/filter-field.interface.mjs +0 -2
- package/esm2022/lib/components/filter/interfaces/filter-search-event.interface.mjs +0 -2
- package/esm2022/lib/components/forms/country-input/form-country-input.component.mjs +0 -122
- package/esm2022/lib/components/forms/currency-input/form-currency-input.component.mjs +0 -157
- package/esm2022/lib/components/forms/date/form-date.component.mjs +0 -117
- package/esm2022/lib/components/forms/image-picker/directives/drag-n-drop.directive.mjs +0 -49
- package/esm2022/lib/components/forms/image-picker/form-image-picker.component.mjs +0 -68
- package/esm2022/lib/components/forms/index.mjs +0 -12
- package/esm2022/lib/components/forms/input/form-input.component.mjs +0 -98
- package/esm2022/lib/components/forms/number/form-number.component.mjs +0 -97
- package/esm2022/lib/components/forms/number/pipes/locale-number.pipe.mjs +0 -33
- package/esm2022/lib/components/forms/password/form-password.component.mjs +0 -100
- package/esm2022/lib/components/forms/rate-group-code-input/form-rate-group-code-input.component.mjs +0 -135
- package/esm2022/lib/components/forms/searchable-select/form-searchable-select.component.mjs +0 -138
- package/esm2022/lib/components/forms/select/form-select.component.mjs +0 -119
- package/esm2022/lib/components/forms/textarea/form-textarea.component.mjs +0 -88
- package/esm2022/lib/components/grids/grid-pagination/grid-pagination.component.mjs +0 -111
- package/esm2022/lib/components/grids/grid-snapshot/grid-snapshot.component.mjs +0 -109
- package/esm2022/lib/components/grids/index.mjs +0 -4
- package/esm2022/lib/components/grids/interfaces/grid-config.interface.mjs +0 -2
- package/esm2022/lib/components/grids/services/grid.service.mjs +0 -25
- package/esm2022/lib/components/index.mjs +0 -9
- package/esm2022/lib/components/infinite-scroll/directive/infinite-scroll.directive.mjs +0 -43
- package/esm2022/lib/components/infinite-scroll/index.mjs +0 -3
- package/esm2022/lib/components/infinite-scroll/infinite-scroll.component.mjs +0 -36
- package/esm2022/lib/components/tabs/index.mjs +0 -3
- package/esm2022/lib/components/tabs/tab-content/tab-content.component.mjs +0 -37
- package/esm2022/lib/components/tabs/tab-group/tab-group.component.mjs +0 -47
- package/esm2022/lib/guards/auth/auth.guard.mjs +0 -10
- package/esm2022/lib/guards/index.mjs +0 -2
- package/esm2022/lib/interceptors/header/header.interceptor.mjs +0 -29
- package/esm2022/lib/interceptors/index.mjs +0 -3
- package/esm2022/lib/interceptors/refresh-token/refresh-token.interceptor.mjs +0 -83
- package/esm2022/lib/interfaces/index.mjs +0 -2
- package/esm2022/lib/interfaces/user/user.interface.mjs +0 -2
- package/esm2022/lib/modules/index.mjs +0 -3
- package/esm2022/lib/modules/micro-frontend/index.mjs +0 -2
- package/esm2022/lib/modules/micro-frontend/utils/mf-bootstrap.util.mjs +0 -55
- package/esm2022/lib/modules/micro-frontend/utils/mf-global-state.util.mjs +0 -14
- package/esm2022/lib/modules/permission/directive/permission.directive.mjs +0 -41
- package/esm2022/lib/modules/permission/guards/permission.guard.mjs +0 -26
- package/esm2022/lib/modules/permission/index.mjs +0 -7
- package/esm2022/lib/modules/permission/pages/401/unauthorized.page.mjs +0 -15
- package/esm2022/lib/modules/permission/pages/loading/loading.page.mjs +0 -65
- package/esm2022/lib/modules/permission/pages/loading/provide-loading-config.util.mjs +0 -9
- package/esm2022/lib/modules/permission/services/permission.service.mjs +0 -50
- package/esm2022/lib/resolvers/auth/auth.resolver.mjs +0 -87
- package/esm2022/lib/resolvers/index.mjs +0 -2
- package/esm2022/lib/services/auth/auth.service.mjs +0 -171
- package/esm2022/lib/services/country/country.service.mjs +0 -43
- package/esm2022/lib/services/currency/currency.service.mjs +0 -40
- package/esm2022/lib/services/index.mjs +0 -6
- package/esm2022/lib/services/profile/profile.service.mjs +0 -82
- package/esm2022/lib/services/rate-group-code/rate-group-code.service.mjs +0 -31
- package/esm2022/lib/utils/contrast-color-generator/contrast-color-generator.util.mjs +0 -16
- package/esm2022/lib/utils/form-error-message/form-error-message.util.mjs +0 -21
- package/esm2022/lib/utils/format-capitalize/format-capitalize.util.mjs +0 -18
- package/esm2022/lib/utils/index.mjs +0 -5
- package/esm2022/lib/utils/redirect-to-first-menu/redirect-to-first-menu.util.mjs +0 -9
- package/esm2022/public-api.mjs +0 -10
- package/esm2022/unipin-angular-applet.mjs +0 -2
- package/graphql/generated.d.ts +0 -16225
- package/index.d.ts +0 -2
- package/lib/components/approval/detail/approval-detail.component.d.ts +0 -26
- package/lib/components/approval/form/approval-form.component.d.ts +0 -33
- package/lib/components/approval/index.d.ts +0 -4
- package/lib/components/approval/list/approval-list.component.d.ts +0 -33
- package/lib/components/approval/list/provide-approval-entities.util.d.ts +0 -3
- package/lib/components/approval/services/approval.service.d.ts +0 -18
- package/lib/components/audit/detail/audit-detail.component.d.ts +0 -33
- package/lib/components/audit/index.d.ts +0 -2
- package/lib/components/audit/list/audit-list.component.d.ts +0 -31
- package/lib/components/audit/service/audit.service.d.ts +0 -15
- package/lib/components/audit/types/audit-detail-form.type.d.ts +0 -12
- package/lib/components/buttons/group/btn-group.component.d.ts +0 -18
- package/lib/components/buttons/group/interfaces/btn-group-config.interface.d.ts +0 -11
- package/lib/components/buttons/index.d.ts +0 -3
- package/lib/components/buttons/loading/btn-loading.component.d.ts +0 -19
- package/lib/components/containers/applet-container/applet-container.component.d.ts +0 -22
- package/lib/components/containers/applet-container/provide-applet-config.util.d.ts +0 -15
- package/lib/components/containers/colum-header-container/column-header-container.component.d.ts +0 -7
- package/lib/components/containers/column-container/column-container.component.d.ts +0 -26
- package/lib/components/containers/column-container/directives/lazy-route.directive.d.ts +0 -17
- package/lib/components/containers/index.d.ts +0 -6
- package/lib/components/containers/list-container/index.d.ts +0 -3
- package/lib/components/containers/list-container/interfaces/list-container-config.interface.d.ts +0 -9
- package/lib/components/containers/list-container/list-pagination-container/list-pagination-container.component.d.ts +0 -23
- package/lib/components/containers/list-container/list-snapshot-container/list-snapshot-container.component.d.ts +0 -23
- package/lib/components/containers/modal-container/modal-container.component.d.ts +0 -16
- package/lib/components/filter/filter.component.d.ts +0 -44
- package/lib/components/filter/index.d.ts +0 -4
- package/lib/components/filter/interfaces/filter-config.interface.d.ts +0 -5
- package/lib/components/filter/interfaces/filter-field.interface.d.ts +0 -24
- package/lib/components/filter/interfaces/filter-search-event.interface.d.ts +0 -4
- package/lib/components/forms/country-input/form-country-input.component.d.ts +0 -41
- package/lib/components/forms/currency-input/form-currency-input.component.d.ts +0 -52
- package/lib/components/forms/date/form-date.component.d.ts +0 -33
- package/lib/components/forms/image-picker/directives/drag-n-drop.directive.d.ts +0 -10
- package/lib/components/forms/image-picker/form-image-picker.component.d.ts +0 -21
- package/lib/components/forms/index.d.ts +0 -11
- package/lib/components/forms/input/form-input.component.d.ts +0 -31
- package/lib/components/forms/number/form-number.component.d.ts +0 -27
- package/lib/components/forms/number/pipes/locale-number.pipe.d.ts +0 -8
- package/lib/components/forms/password/form-password.component.d.ts +0 -27
- package/lib/components/forms/rate-group-code-input/form-rate-group-code-input.component.d.ts +0 -41
- package/lib/components/forms/searchable-select/form-searchable-select.component.d.ts +0 -42
- package/lib/components/forms/select/form-select.component.d.ts +0 -34
- package/lib/components/forms/textarea/form-textarea.component.d.ts +0 -26
- package/lib/components/grids/grid-pagination/grid-pagination.component.d.ts +0 -33
- package/lib/components/grids/grid-snapshot/grid-snapshot.component.d.ts +0 -36
- package/lib/components/grids/index.d.ts +0 -4
- package/lib/components/grids/interfaces/grid-config.interface.d.ts +0 -16
- package/lib/components/grids/services/grid.service.d.ts +0 -12
- package/lib/components/index.d.ts +0 -8
- package/lib/components/infinite-scroll/directive/infinite-scroll.directive.d.ts +0 -15
- package/lib/components/infinite-scroll/index.d.ts +0 -2
- package/lib/components/infinite-scroll/infinite-scroll.component.d.ts +0 -12
- package/lib/components/tabs/index.d.ts +0 -6
- package/lib/components/tabs/tab-content/tab-content.component.d.ts +0 -14
- package/lib/components/tabs/tab-group/tab-group.component.d.ts +0 -18
- package/lib/guards/auth/auth.guard.d.ts +0 -1
- package/lib/guards/index.d.ts +0 -1
- package/lib/interceptors/header/header.interceptor.d.ts +0 -9
- package/lib/interceptors/index.d.ts +0 -2
- package/lib/interceptors/refresh-token/refresh-token.interceptor.d.ts +0 -14
- package/lib/interfaces/index.d.ts +0 -1
- package/lib/interfaces/user/user.interface.d.ts +0 -27
- package/lib/modules/index.d.ts +0 -2
- package/lib/modules/micro-frontend/index.d.ts +0 -1
- package/lib/modules/micro-frontend/utils/mf-bootstrap.util.d.ts +0 -9
- package/lib/modules/micro-frontend/utils/mf-global-state.util.d.ts +0 -4
- package/lib/modules/permission/directive/permission.directive.d.ts +0 -16
- package/lib/modules/permission/guards/permission.guard.d.ts +0 -2
- package/lib/modules/permission/index.d.ts +0 -6
- package/lib/modules/permission/pages/401/unauthorized.page.d.ts +0 -5
- package/lib/modules/permission/pages/loading/loading.page.d.ts +0 -18
- package/lib/modules/permission/pages/loading/provide-loading-config.util.d.ts +0 -10
- package/lib/modules/permission/services/permission.service.d.ts +0 -21
- package/lib/resolvers/auth/auth.resolver.d.ts +0 -14
- package/lib/resolvers/index.d.ts +0 -1
- package/lib/services/auth/auth.service.d.ts +0 -39
- package/lib/services/country/country.service.d.ts +0 -16
- package/lib/services/currency/currency.service.d.ts +0 -16
- package/lib/services/index.d.ts +0 -5
- package/lib/services/profile/profile.service.d.ts +0 -12
- package/lib/services/rate-group-code/rate-group-code.service.d.ts +0 -14
- package/lib/utils/contrast-color-generator/contrast-color-generator.util.d.ts +0 -4
- package/lib/utils/form-error-message/form-error-message.util.d.ts +0 -2
- package/lib/utils/format-capitalize/format-capitalize.util.d.ts +0 -1
- package/lib/utils/index.d.ts +0 -4
- package/lib/utils/redirect-to-first-menu/redirect-to-first-menu.util.d.ts +0 -2
- package/public-api.d.ts +0 -11
- package/src/assets/scss/forms.scss +0 -65
- package/src/assets/scss/grid.scss +0 -7505
- package/src/assets/scss/select.scss +0 -328
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unipin-angular-applet-froala.mjs","sources":["../../../projects/unipin-angular/froala/froala.component.ts","../../../projects/unipin-angular/froala/unipin-angular-applet-froala.ts"],"sourcesContent":["import { Component, ChangeDetectionStrategy, forwardRef, WritableSignal, signal, OnInit, computed, input, booleanAttribute } from '@angular/core';\nimport { ControlValueAccessor, ReactiveFormsModule } from '@angular/forms';\nimport { ClassValue } from 'clsx';\nimport { FroalaEditorModule, FroalaViewModule } from 'angular-froala-wysiwyg';\nimport FroalaEditor from 'froala-editor';\nimport { up } from '@unipin/angular-applet/common';\nimport { UpFieldControl, UpFieldControlComponent } from '@unipin/angular-applet/forms';\n\nimport 'froala-editor/js/plugins.pkgd.min.js';\nimport 'froala-editor/js/plugins/align.min.js';\nimport 'froala-editor/js/third_party/embedly.min';\nimport 'froala-editor/js/third_party/image_tui.min';\nimport 'froala-editor/js/third_party/font_awesome.min';\n\n@Component({\n standalone: true,\n selector: 'up-froala',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': '_computedClass()',\n },\n providers: [\n {\n provide: UpFieldControl,\n useExisting: forwardRef(() => UpFroalaComponent)\n },\n ],\n imports: [\n ReactiveFormsModule,\n FroalaViewModule,\n FroalaEditorModule\n ],\n template: `\n <div \n [froalaModel]=\"value()\" \n [froalaEditor]=\"froalaOptions()\"\n >\n </div>\n `\n})\nexport class UpFroalaComponent extends UpFieldControlComponent implements OnInit, ControlValueAccessor {\n\n public readonly froalaKey = input.required<string>();\n \n public readonly froalaEvents = input<any>({ });\n public readonly inlineClass = input<ClassValue>('', { alias: 'class' });\n\n public readonly useCustomSocialEmbed = input(\n false,\n {\n transform: booleanAttribute\n }\n );\n\n public readonly value: WritableSignal<string> = signal('');\n\n public readonly froalaOptions = computed(\n () => {\n return { \n fullPage: true,\n toolbarSticky: false,\n videoResponsive: true,\n imageMaxSize: 5242880,\n imageDefaultWidth: 100,\n videoMaxSize: 52428800,\n imageDefaultAlign: 'left',\n key: this.froalaKey(),\n imageResizeWithPercent: true,\n imageAllowedTypes: ['jpeg', 'jpg', 'png'],\n placeholderText: 'Add Page Content Here!',\n videoAllowedTypes: ['quicktime', 'webm', 'jpg', 'ogg'],\n pasteAllowedStyleProps: ['font-size', 'font-family', 'font-style', 'text-decoration', 'text-align', 'font-weight'],\n htmlAllowedTags: ['a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'blockquote', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hgroup', 'hr', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', 'main', 'map', 'mark', 'menu', 'menuitem', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'pre', 'progress', 'queue', 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'style', 'section', 'select', 'small', 'source', 'span', 'strike', 'strong', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr'],\n events: {\n ...this.froalaEvents(),\n 'initialized': (e: any) => {\n const styleTag = document.createElement('style');\n styleTag.innerHTML = `\n .adsense { \n width: 100%;\n height: 50px;\n padding: 5px;\n position: relative;\n background-color: #D3D3D3;\n &::after{\n content: 'Google Ads';\n position: absolute;\n top: 0;\n left: 0;\n margin-left: 50%;\n margin-top: 13px;\n transform: translate(-50%);\n }\n }\n .fr-view {\n font-family: Roboto, sans-serif !important;\n font-weight: 400 !important;\n font-size: 18px !important;\n line-height: 27px !important;\n text-align: justify !important;\n p {\n margin: 0 0 14px !important;\n }\n }`;\n \n const iframeDocument = e._editor.$el.get(0).ownerDocument;\n iframeDocument.head.appendChild(styleTag);\n },\n 'paste.afterCleanup': function (html: string) {\n const doc = new DOMParser().parseFromString(html, 'text/html');\n \n doc.querySelectorAll('iframe[src*=\"youtube.com\"]').forEach((video: any) => {\n video.setAttribute('style', 'width: 100%; height: 500px;');\n });\n \n doc.querySelectorAll('table').forEach((table) => {\n table.querySelectorAll('tr').forEach((row) => {\n row.querySelectorAll('td, th').forEach((cell: any) => cell.style.border = '1px solid #000');\n });\n });\n return doc.documentElement.innerHTML;\n },\n 'video.inserted': function (vid: any) {\n vid.attr('contentEditable', 'true');\n vid.css('width', '100%'); \n vid.css('height', '500px'); \n },\n 'window.copy': function () {\n localStorage.removeItem('fr-copied-html');\n localStorage.removeItem('fr-copied-text');\n },\n 'window.cut': function () {\n localStorage.removeItem('fr-copied-html');\n localStorage.removeItem('fr-copied-text');\n },\n 'contentChanged': () => this._onChange(this.value)\n },\n toolbarButtons: {\n moreText: {\n buttons: ['adsense', 'bold', 'italic', 'underline', 'strikeThrough', 'subscript', 'superscript', 'fontFamily', 'fontSize', 'textColor', 'backgroundColor', 'inlineClass', 'inlineStyle', 'clearFormatting'],\n align: 'left',\n buttonsVisible: 3\n },\n moreParagraph: {\n buttons: ['alignCenter', 'formatOLSimple', 'alignLeft', 'alignRight', 'alignJustify', 'formatOL', 'formatUL', 'paragraphFormat', 'paragraphStyle', 'lineHeight', 'outdent', 'indent', 'quote'],\n align: 'left',\n buttonsVisible: 2\n },\n moreRich: {\n buttons: ['insertLink', 'insertImage', 'customEmbed', 'insertVideo', 'insertTable', 'emoticons', 'specialCharacters', 'insertHR'],\n align: 'left',\n buttonsVisible: 4\n },\n moreMisc: {\n buttons: ['undo', 'redo', 'fullscreen', 'print', 'getPDF', 'spellChecker', 'selectAll', 'html', 'help'],\n align: 'right',\n buttonsVisible: 2\n }\n }\n };\n }\n );\n\n protected readonly _computedClass = computed(\n () => {\n return up(\n 'peer placeholder:text-muted-foreground 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 bg-white',\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 /**\n * Callback function to handle value changes in the password input.\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 password input.\n * @type {() => void}\n */\n protected _onTouched: () => void = (): void => {};\n\n constructor() {\n super();\n\n if (this.ngControl !== null) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n public ngOnInit(): void{\n if (this.useCustomSocialEmbed()) {\n this.customSocialEmbed();\n }\n\n FroalaEditor.DefineIcon('adsense', { NAME: 'plus', SVG_KEY: 'tags' });\n FroalaEditor.RegisterCommand('adsense', {\n title: 'Adsense',\n focus: false, undo: false,\n refreshAfterCallback: true,\n callback() { this.html.insert('<div class=\"adsense\"></div>'); }\n });\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 password 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 protected customSocialEmbed(): void{\n FroalaEditor.POPUP_TEMPLATES['customPlugin.popup'] = '[_BUTTONS_][_CUSTOM_LAYER_]';\n Object.assign(\n FroalaEditor.DEFAULTS, \n { popupButtons: ['popupClose'] }\n );\n\n FroalaEditor.PLUGINS.customPlugin = function (editor: any) {\n function initPopup() {\n let tabidx = 0;\n\n const popupButtons = `<div class=\"fr-buttons fr-tabs\">${ editor.button.buildList(editor.opts.popupButtons) }</div>`;\n const inputLayer = `\n <div class=\"fr-link-insert-layer fr-layer fr-active\" id=\"fr-link-insert-layer-${ editor.id }\">\n <div class=\"errorlist\"></div>\n <div class=\"fr-input-line\"><input name=\"href\" type=\"text\" placeholder=\"Paste in embed code\" tabIndex=\"${ (++tabidx) }\"></div>\n <div class=\"fr-action-buttons\"><button class=\"fr-command fr-submit\" data-cmd=\"linkCustomInsert\" href=\"#\" tabIndex=\"${ (++tabidx) }\" type=\"button\">${ editor.language.translate('Insert') }</button></div>\n </div>\n `;\n return editor.popups.create('customPlugin.popup', { buttons: popupButtons, custom_layer: inputLayer });\n }\n\n function showPopup() {\n let popup = editor.popups.get('customPlugin.popup');\n if (!popup) {\n popup = initPopup();\n }\n editor.popups.setContainer('customPlugin.popup', editor.$tb);\n const btn = editor.$tb.find('.fr-command[data-cmd=\"customEmbed\"]');\n\n editor.popups.show('customPlugin.popup', (btn.offset().left + btn.outerWidth() / 2), (btn.offset().top + (editor.opts.toolbarBottom ? 10 : btn.outerHeight() - 10)), btn.outerHeight());\n }\n\n function hidePopup() {\n editor.popups.hide('customPlugin.popup');\n editor.popups.get('customPlugin.popup').find('input[type=\"text\"][name=\"href\"]').val('');\n }\n\n function showError(error: string) {\n const popup = editor.popups.get('customPlugin.popup');\n const errors = popup.find('div.errorlist');\n\n errors.html('<small>' + error + '</small>');\n popup.find('input[type=\"text\"][name=\"href\"]').on('keyup', function(){ errors.html(''); });\n }\n\n function insert(url: string) {\n editor.events.focus(true);\n editor.selection.restore();\n if (url.includes('<script')){\n showError('Oops, can not insert script!');\n return false;\n }\n\n editor.html.insert('<center>' + url + '</center>');\n editor.popups.hide('customPlugin.popup');\n return false;\n } \n\n function insertCallback() {\n insert(editor.popups.get('customPlugin.popup').find('input[type=\"text\"][name=\"href\"]').val());\n }\n\n return { showPopup, hidePopup, insertCallback };\n };\n\n FroalaEditor.DefineIcon('socialEmbed', { NAME: 'star', SVG_KEY: 'insertEmbed'});\n FroalaEditor.RegisterCommand('customEmbed', {\n title: 'Embed Social',\n icon: 'socialEmbed',\n undo: false,\n focus: false,\n plugin: 'customPlugin',\n callback: function () { this['customPlugin'].showPopup(); }\n });\n\n FroalaEditor.DefineIcon('popupClose', { NAME: 'times', SVG_KEY: 'back' });\n FroalaEditor.RegisterCommand('popupClose', {\n title: 'Close',\n undo: false,\n focus: false,\n callback: function () { this['customPlugin'].hidePopup(); }\n });\n\n FroalaEditor.RegisterCommand('linkCustomInsert', {\n focus: false,\n refreshAfterCallback: false,\n callback: function () { this['customPlugin'].insertCallback(); }\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { up, generateContrastColor } from '@unipin/angular-applet/common';
|
|
2
|
+
import { badgeVariants } from '@unipin/angular-applet/badge';
|
|
3
|
+
|
|
4
|
+
function renderFlag(value) {
|
|
5
|
+
if (!value ||
|
|
6
|
+
!value.length) {
|
|
7
|
+
return '';
|
|
8
|
+
}
|
|
9
|
+
const values = Array.isArray(value) ? value : [value];
|
|
10
|
+
return `
|
|
11
|
+
<div class="d-flex align-items-center gap-2 h-100 fw-medium">
|
|
12
|
+
${values.map((v) => {
|
|
13
|
+
return `
|
|
14
|
+
<div class="d-flex align-items-center gap-1 size-full">
|
|
15
|
+
<div title="${v}" class="fflag-up border rounded fflag-${v}"></div>
|
|
16
|
+
</div>
|
|
17
|
+
`;
|
|
18
|
+
}).join('')}
|
|
19
|
+
</div>
|
|
20
|
+
`;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function renderGridBadge(value, { additionalClass = '', variant = 'default', isAutoGenerateColor = true, }) {
|
|
24
|
+
if (!value) {
|
|
25
|
+
return '';
|
|
26
|
+
}
|
|
27
|
+
const badgeClass = up(badgeVariants({
|
|
28
|
+
variant: variant
|
|
29
|
+
}), 'w-full', additionalClass);
|
|
30
|
+
let style = '';
|
|
31
|
+
if (isAutoGenerateColor) {
|
|
32
|
+
const { background, foreground } = generateContrastColor(value.substring(0, 3));
|
|
33
|
+
style = `background-color: ${background} !important; color: ${foreground} !important;`;
|
|
34
|
+
}
|
|
35
|
+
return `
|
|
36
|
+
<span
|
|
37
|
+
style="${style}"
|
|
38
|
+
class="${badgeClass}"
|
|
39
|
+
>
|
|
40
|
+
${value}
|
|
41
|
+
</span>
|
|
42
|
+
`;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const statusVariant = {
|
|
46
|
+
ACTIVE: {
|
|
47
|
+
class: '',
|
|
48
|
+
variant: 'default'
|
|
49
|
+
},
|
|
50
|
+
SUCCESS: {
|
|
51
|
+
variant: 'default',
|
|
52
|
+
class: 'bg-green-700'
|
|
53
|
+
},
|
|
54
|
+
APPROVED: {
|
|
55
|
+
variant: 'default',
|
|
56
|
+
class: 'bg-green-700'
|
|
57
|
+
},
|
|
58
|
+
FAIL: {
|
|
59
|
+
class: '',
|
|
60
|
+
variant: 'destructive'
|
|
61
|
+
},
|
|
62
|
+
FAILED: {
|
|
63
|
+
class: '',
|
|
64
|
+
variant: 'destructive'
|
|
65
|
+
},
|
|
66
|
+
DELETED: {
|
|
67
|
+
class: '',
|
|
68
|
+
variant: 'destructive'
|
|
69
|
+
},
|
|
70
|
+
INACTIVE: {
|
|
71
|
+
variant: 'default',
|
|
72
|
+
class: 'bg-yellow-500 text-black',
|
|
73
|
+
},
|
|
74
|
+
IN_PROGRESS: {
|
|
75
|
+
variant: 'default',
|
|
76
|
+
class: 'bg-yellow-500 text-black',
|
|
77
|
+
},
|
|
78
|
+
PENDING: {
|
|
79
|
+
variant: 'default',
|
|
80
|
+
class: 'bg-yellow-500 text-black',
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
function renderStatusBadge(value, { additionalStatus, additionalClass = '' }) {
|
|
84
|
+
if (!value) {
|
|
85
|
+
return '';
|
|
86
|
+
}
|
|
87
|
+
let used = statusVariant[value] || additionalStatus?.[value];
|
|
88
|
+
if (!used) {
|
|
89
|
+
return renderGridBadge(value, {
|
|
90
|
+
additionalClass
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
return renderGridBadge(value, {
|
|
94
|
+
isAutoGenerateColor: true,
|
|
95
|
+
variant: used.variant,
|
|
96
|
+
additionalClass: up(used.class, additionalClass)
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Generated bundle index. Do not edit.
|
|
102
|
+
*/
|
|
103
|
+
|
|
104
|
+
export { renderFlag, renderGridBadge, renderStatusBadge };
|
|
105
|
+
//# sourceMappingURL=unipin-angular-applet-grids.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unipin-angular-applet-grids.mjs","sources":["../../../projects/unipin-angular/grids/utils/render-flag/render-flag.util.ts","../../../projects/unipin-angular/grids/utils/render-grid-badge/render-grid-badge.util.ts","../../../projects/unipin-angular/grids/utils/render-status-badge/render-status-badge.util.ts","../../../projects/unipin-angular/grids/unipin-angular-applet-grids.ts"],"sourcesContent":["export function renderFlag(value: string | string[]): string{\n \n if (\n !value ||\n !value.length\n ) {\n return '';\n }\n\n const values = Array.isArray(value)? value : [ value ];\n return `\n <div class=\"d-flex align-items-center gap-2 h-100 fw-medium\">\n ${\n values.map(\n (v) => {\n return `\n <div class=\"d-flex align-items-center gap-1 size-full\">\n <div title=\"${ v }\" class=\"fflag-up border rounded fflag-${ v }\"></div>\n </div>\n `;\n }\n ).join('')\n }\n </div>\n `;\n}\n","import { generateContrastColor, up } from '@unipin/angular-applet/common';\nimport { BadgeVariants, badgeVariants } from '@unipin/angular-applet/badge';\n\n\nexport type RenderGridBadgeOptions = {\n additionalClass?: string;\n isAutoGenerateColor?: boolean;\n variant?: BadgeVariants['variant'];\n};\n\nexport function renderGridBadge(\n value: string,\n { \n additionalClass = '', \n variant = 'default',\n isAutoGenerateColor = true,\n }: RenderGridBadgeOptions\n): string{\n \n if (!value) {\n return '';\n }\n\n const badgeClass = up(\n badgeVariants(\n {\n variant: variant\n }\n ),\n 'w-full',\n additionalClass\n );\n\n let style = ''\n if (isAutoGenerateColor) {\n const { background, foreground } = generateContrastColor(value.substring(0,3));\n style = `background-color: ${ background } !important; color: ${ foreground } !important;`;\n }\n\n return `\n <span \n style=\"${ style }\" \n class=\"${ badgeClass }\"\n >\n ${ value }\n </span>\n `;\n}\n","import { up } from '@unipin/angular-applet/common';\nimport { BadgeVariants } from '@unipin/angular-applet/badge';\nimport { renderGridBadge, RenderGridBadgeOptions } from './../render-grid-badge/render-grid-badge.util';\n\n\ntype RenderStatusBadgeOptions = Omit<RenderGridBadgeOptions, 'isAutoGenerateColor' | 'variant'> & {\n additionalStatus?: {\n [key: string]: {\n class: string;\n variant: BadgeVariants['variant'];\n }\n };\n};\n\nconst statusVariant = {\n ACTIVE: {\n class: '',\n variant: 'default'\n },\n \n SUCCESS: {\n variant: 'default',\n class: 'bg-green-700'\n },\n APPROVED: {\n variant: 'default',\n class: 'bg-green-700'\n },\n\n FAIL: {\n class: '',\n variant: 'destructive'\n },\n FAILED: {\n class: '',\n variant: 'destructive'\n },\n DELETED: {\n class: '',\n variant: 'destructive'\n },\n\n INACTIVE: {\n variant: 'default',\n class: 'bg-yellow-500 text-black',\n },\n IN_PROGRESS: {\n variant: 'default',\n class: 'bg-yellow-500 text-black',\n },\n PENDING: {\n variant: 'default',\n class: 'bg-yellow-500 text-black',\n },\n};\n\nexport function renderStatusBadge(\n value: string,\n {\n additionalStatus,\n additionalClass = ''\n }: RenderStatusBadgeOptions\n): string{\n \n if (!value) {\n return '';\n }\n\n let used = statusVariant[value as keyof typeof statusVariant] || additionalStatus?.[value];\n if (!used) {\n return renderGridBadge(\n value, \n { \n additionalClass \n }\n );\n }\n\n return renderGridBadge(\n value,\n {\n isAutoGenerateColor: true,\n variant: used.variant as BadgeVariants['variant'],\n additionalClass: up(\n used.class,\n additionalClass\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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"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { input, output, Directive } from '@angular/core';
|
|
3
|
+
|
|
4
|
+
class UpInfiniteScrollDirective {
|
|
5
|
+
constructor(elementRef) {
|
|
6
|
+
this.elementRef = elementRef;
|
|
7
|
+
/**
|
|
8
|
+
* Threshold at which to trigger the callback. A value of 0.0 means that the callback
|
|
9
|
+
* will be triggered as soon as a single pixel is visible. 1.0 means that the callback will only be triggered when the entire element is visible.
|
|
10
|
+
* @type {InputSignal<number>}
|
|
11
|
+
*/
|
|
12
|
+
this.threshold = input(0.5, ...(ngDevMode ? [{ debugName: "threshold" }] : []));
|
|
13
|
+
/**
|
|
14
|
+
* Margin around the root. This can be used to grow or shrink the area used to
|
|
15
|
+
* determine intersections. It follows the same syntax as the CSS margin property.
|
|
16
|
+
* Example values: '10px', '10px 20px', '10%', '10% 20% 30% 40%'.
|
|
17
|
+
* @type {InputSignal<string>}
|
|
18
|
+
*/
|
|
19
|
+
this.rootMargin = input('10%', ...(ngDevMode ? [{ debugName: "rootMargin" }] : []));
|
|
20
|
+
/**
|
|
21
|
+
* Event emitted when the user has scrolled to the threshold.
|
|
22
|
+
* Used for triggering the component to load more data.
|
|
23
|
+
* @type {OutputEmitterRef<void>}
|
|
24
|
+
*/
|
|
25
|
+
this.scrolled = output();
|
|
26
|
+
}
|
|
27
|
+
ngOnInit() {
|
|
28
|
+
this.createIntersectionObserver();
|
|
29
|
+
}
|
|
30
|
+
ngOnDestroy() {
|
|
31
|
+
this.destroyIntersectionObserver();
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Updates the observer configuration when inputs change.
|
|
35
|
+
* Call this method if you need to update threshold or rootMargin dynamically.
|
|
36
|
+
*/
|
|
37
|
+
updateObserver() {
|
|
38
|
+
this.destroyIntersectionObserver();
|
|
39
|
+
this.createIntersectionObserver();
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Cleans up the Intersection Observer when the directive is destroyed.
|
|
43
|
+
*/
|
|
44
|
+
destroyIntersectionObserver() {
|
|
45
|
+
if (this.intersectionObserver) {
|
|
46
|
+
this.intersectionObserver.disconnect();
|
|
47
|
+
this.intersectionObserver = undefined;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Creates and configures the Intersection Observer to monitor when the element
|
|
52
|
+
* comes into view based on the specified threshold and root margin.
|
|
53
|
+
*/
|
|
54
|
+
createIntersectionObserver() {
|
|
55
|
+
const options = {
|
|
56
|
+
root: null, // Use the viewport as the root
|
|
57
|
+
rootMargin: this.rootMargin(),
|
|
58
|
+
threshold: this.threshold()
|
|
59
|
+
};
|
|
60
|
+
this.intersectionObserver = new IntersectionObserver((entries) => {
|
|
61
|
+
entries.forEach((entry) => {
|
|
62
|
+
if (entry.isIntersecting) {
|
|
63
|
+
this.scrolled.emit();
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}, options);
|
|
67
|
+
this.intersectionObserver.observe(this.elementRef.nativeElement);
|
|
68
|
+
}
|
|
69
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: UpInfiniteScrollDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
70
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "21.0.0", type: UpInfiniteScrollDirective, isStandalone: true, selector: "[upInfiniteScroll]", inputs: { threshold: { classPropertyName: "threshold", publicName: "threshold", isSignal: true, isRequired: false, transformFunction: null }, rootMargin: { classPropertyName: "rootMargin", publicName: "rootMargin", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { scrolled: "scrolled" }, exportAs: ["upInfiniteScroll"], ngImport: i0 }); }
|
|
71
|
+
}
|
|
72
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: UpInfiniteScrollDirective, decorators: [{
|
|
73
|
+
type: Directive,
|
|
74
|
+
args: [{
|
|
75
|
+
standalone: true,
|
|
76
|
+
exportAs: 'upInfiniteScroll',
|
|
77
|
+
selector: '[upInfiniteScroll]'
|
|
78
|
+
}]
|
|
79
|
+
}], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { threshold: [{ type: i0.Input, args: [{ isSignal: true, alias: "threshold", required: false }] }], rootMargin: [{ type: i0.Input, args: [{ isSignal: true, alias: "rootMargin", required: false }] }], scrolled: [{ type: i0.Output, args: ["scrolled"] }] } });
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* Generated bundle index. Do not edit.
|
|
83
|
+
*/
|
|
84
|
+
|
|
85
|
+
export { UpInfiniteScrollDirective };
|
|
86
|
+
//# sourceMappingURL=unipin-angular-applet-infinite-scroll.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unipin-angular-applet-infinite-scroll.mjs","sources":["../../../projects/unipin-angular/infinite-scroll/infinite-scroll.directive.ts","../../../projects/unipin-angular/infinite-scroll/unipin-angular-applet-infinite-scroll.ts"],"sourcesContent":["import { Directive, ElementRef, InputSignal, OnDestroy, OnInit, OutputEmitterRef, input, output } from '@angular/core';\n\n@Directive({\n standalone: true,\n exportAs: 'upInfiniteScroll',\n selector: '[upInfiniteScroll]'\n})\nexport class UpInfiniteScrollDirective implements OnInit, OnDestroy {\n \n /**\n * Threshold at which to trigger the callback. A value of 0.0 means that the callback\n * will be triggered as soon as a single pixel is visible. 1.0 means that the callback will only be triggered when the entire element is visible.\n * @type {InputSignal<number>}\n */\n public readonly threshold: InputSignal<number> = input<number>(0.5);\n\n /**\n * Margin around the root. This can be used to grow or shrink the area used to\n * determine intersections. It follows the same syntax as the CSS margin property.\n * Example values: '10px', '10px 20px', '10%', '10% 20% 30% 40%'.\n * @type {InputSignal<string>}\n */\n public readonly rootMargin: InputSignal<string> = input<string>('10%');\n\n /**\n * Event emitted when the user has scrolled to the threshold.\n * Used for triggering the component to load more data.\n * @type {OutputEmitterRef<void>}\n */\n public readonly scrolled: OutputEmitterRef<void> = output<void>();\n\n /**\n * IntersectionObserver instance used to observe the element.\n * @type {IntersectionObserver}\n */\n protected intersectionObserver?: IntersectionObserver;\n\n constructor(\n protected readonly elementRef: ElementRef\n ) { }\n\n public ngOnInit(): void{\n this.createIntersectionObserver();\n }\n\n public ngOnDestroy(): void{\n this.destroyIntersectionObserver();\n }\n\n /**\n * Updates the observer configuration when inputs change.\n * Call this method if you need to update threshold or rootMargin dynamically.\n */\n public updateObserver(): void{\n this.destroyIntersectionObserver();\n this.createIntersectionObserver();\n }\n\n /**\n * Cleans up the Intersection Observer when the directive is destroyed.\n */\n protected destroyIntersectionObserver(): void{\n if (this.intersectionObserver) {\n this.intersectionObserver.disconnect();\n this.intersectionObserver = undefined;\n }\n }\n\n /**\n * Creates and configures the Intersection Observer to monitor when the element\n * comes into view based on the specified threshold and root margin.\n */\n protected createIntersectionObserver(): void{\n const options: IntersectionObserverInit = {\n root: null, // Use the viewport as the root\n rootMargin: this.rootMargin(),\n threshold: this.threshold()\n };\n\n this.intersectionObserver = new IntersectionObserver(\n (entries) => {\n entries.forEach(\n (entry) => {\n if (entry.isIntersecting) {\n this.scrolled.emit();\n }\n }\n );\n },\n options\n );\n this.intersectionObserver.observe(this.elementRef.nativeElement);\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;MAOa,yBAAyB,CAAA;AA8BpC,IAAA,WAAA,CACqB,UAAsB,EAAA;QAAtB,IAAA,CAAA,UAAU,GAAV,UAAU;AA7B/B;;;;AAIG;AACa,QAAA,IAAA,CAAA,SAAS,GAAwB,KAAK,CAAS,GAAG,qDAAC;AAEnE;;;;;AAKG;AACa,QAAA,IAAA,CAAA,UAAU,GAAwB,KAAK,CAAS,KAAK,sDAAC;AAEtE;;;;AAIG;QACa,IAAA,CAAA,QAAQ,GAA2B,MAAM,EAAQ;IAU7D;IAEG,QAAQ,GAAA;QACb,IAAI,CAAC,0BAA0B,EAAE;IACnC;IAEO,WAAW,GAAA;QAChB,IAAI,CAAC,2BAA2B,EAAE;IACpC;AAEA;;;AAGG;IACI,cAAc,GAAA;QACnB,IAAI,CAAC,2BAA2B,EAAE;QAClC,IAAI,CAAC,0BAA0B,EAAE;IACnC;AAEA;;AAEG;IACO,2BAA2B,GAAA;AACnC,QAAA,IAAI,IAAI,CAAC,oBAAoB,EAAE;AAC7B,YAAA,IAAI,CAAC,oBAAoB,CAAC,UAAU,EAAE;AACtC,YAAA,IAAI,CAAC,oBAAoB,GAAG,SAAS;QACvC;IACF;AAEA;;;AAGG;IACO,0BAA0B,GAAA;AAClC,QAAA,MAAM,OAAO,GAA6B;YACxC,IAAI,EAAE,IAAI;AACV,YAAA,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE;AAC7B,YAAA,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B;QAED,IAAI,CAAC,oBAAoB,GAAG,IAAI,oBAAoB,CAClD,CAAC,OAAO,KAAI;AACV,YAAA,OAAO,CAAC,OAAO,CACb,CAAC,KAAK,KAAI;AACR,gBAAA,IAAI,KAAK,CAAC,cAAc,EAAE;AACxB,oBAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;gBACtB;AACF,YAAA,CAAC,CACF;QACH,CAAC,EACD,OAAO,CACR;QACD,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;IAClE;8GArFW,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAzB,yBAAyB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBALrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,QAAQ,EAAE,kBAAkB;AAC5B,oBAAA,QAAQ,EAAE;AACX,iBAAA;;;ACND;;AAEG;;;;"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { input, computed, Component } from '@angular/core';
|
|
3
|
+
import * as i1 from 'ngx-json-viewer';
|
|
4
|
+
import { NgxJsonViewerModule } from 'ngx-json-viewer';
|
|
5
|
+
import { up } from '@unipin/angular-applet/common';
|
|
6
|
+
|
|
7
|
+
class JsonViewerComponent {
|
|
8
|
+
constructor() {
|
|
9
|
+
/**
|
|
10
|
+
* Input for the JSON data to be displayed.
|
|
11
|
+
*
|
|
12
|
+
* @type {InputSignal<Record<string, any>>}
|
|
13
|
+
*/
|
|
14
|
+
this.json = input.required(...(ngDevMode ? [{ debugName: "json" }] : []));
|
|
15
|
+
/**
|
|
16
|
+
* Input for if the JSON data should be expanded by default.
|
|
17
|
+
*
|
|
18
|
+
* @type {InputSignal<boolean>}
|
|
19
|
+
*/
|
|
20
|
+
this.expanded = input(false, ...(ngDevMode ? [{ debugName: "expanded" }] : []));
|
|
21
|
+
/**
|
|
22
|
+
* Input for the depth of the JSON data to be displayed.
|
|
23
|
+
*
|
|
24
|
+
* @type {InputSignal<number>}
|
|
25
|
+
*/
|
|
26
|
+
this.depth = input(2, ...(ngDevMode ? [{ debugName: "depth" }] : []));
|
|
27
|
+
this.inlineClass = input('', ...(ngDevMode ? [{ debugName: "inlineClass", alias: 'class' }] : [{ alias: 'class' }]));
|
|
28
|
+
this._computedClass = computed(() => {
|
|
29
|
+
return up('block overflow-hidden', this.inlineClass());
|
|
30
|
+
}, ...(ngDevMode ? [{ debugName: "_computedClass" }] : []));
|
|
31
|
+
}
|
|
32
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: JsonViewerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
33
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.0.0", type: JsonViewerComponent, isStandalone: true, selector: "up-json-viewer", inputs: { json: { classPropertyName: "json", publicName: "json", isSignal: true, isRequired: true, transformFunction: null }, expanded: { classPropertyName: "expanded", publicName: "expanded", isSignal: true, isRequired: false, transformFunction: null }, depth: { classPropertyName: "depth", publicName: "depth", isSignal: true, isRequired: false, transformFunction: null }, inlineClass: { classPropertyName: "inlineClass", publicName: "class", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "_computedClass()" } }, ngImport: i0, template: `
|
|
34
|
+
<div class="w-full selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] focus-visible:outline-none">
|
|
35
|
+
<ngx-json-viewer
|
|
36
|
+
[json]="json()"
|
|
37
|
+
[depth]="depth()"
|
|
38
|
+
[expanded]="expanded()"
|
|
39
|
+
/>
|
|
40
|
+
</div>
|
|
41
|
+
`, isInline: true, dependencies: [{ kind: "ngmodule", type: NgxJsonViewerModule }, { kind: "component", type: i1.NgxJsonViewerComponent, selector: "ngx-json-viewer", inputs: ["json", "expanded", "depth", "_currentDepth"] }] }); }
|
|
42
|
+
}
|
|
43
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: JsonViewerComponent, decorators: [{
|
|
44
|
+
type: Component,
|
|
45
|
+
args: [{
|
|
46
|
+
standalone: true,
|
|
47
|
+
selector: 'up-json-viewer',
|
|
48
|
+
imports: [
|
|
49
|
+
NgxJsonViewerModule
|
|
50
|
+
],
|
|
51
|
+
host: {
|
|
52
|
+
'[class]': '_computedClass()',
|
|
53
|
+
},
|
|
54
|
+
template: `
|
|
55
|
+
<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">
|
|
56
|
+
<ngx-json-viewer
|
|
57
|
+
[json]="json()"
|
|
58
|
+
[depth]="depth()"
|
|
59
|
+
[expanded]="expanded()"
|
|
60
|
+
/>
|
|
61
|
+
</div>
|
|
62
|
+
`
|
|
63
|
+
}]
|
|
64
|
+
}], propDecorators: { json: [{ type: i0.Input, args: [{ isSignal: true, alias: "json", required: true }] }], expanded: [{ type: i0.Input, args: [{ isSignal: true, alias: "expanded", required: false }] }], depth: [{ type: i0.Input, args: [{ isSignal: true, alias: "depth", required: false }] }], inlineClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "class", required: false }] }] } });
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Generated bundle index. Do not edit.
|
|
68
|
+
*/
|
|
69
|
+
|
|
70
|
+
export { JsonViewerComponent };
|
|
71
|
+
//# sourceMappingURL=unipin-angular-applet-json-viewer.mjs.map
|
|
@@ -0,0 +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@Component({\n standalone: true,\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;AAnBhC,IAAA,WAAA,GAAA;AAqBE;;;;AAIG;AACa,QAAA,IAAA,CAAA,IAAI,GAAqC,KAAK,CAAC,QAAQ,+CAAuB;AAE9F;;;;AAIG;AACa,QAAA,IAAA,CAAA,QAAQ,GAAyB,KAAK,CAAU,KAAK,oDAAC;AAEtE;;;;AAIG;AACa,QAAA,IAAA,CAAA,KAAK,GAAwB,KAAK,CAAS,CAAC,iDAAC;AAE7C,QAAA,IAAA,CAAA,WAAW,GAAG,KAAK,CAAa,EAAE,+CAAI,KAAK,EAAE,OAAO,EAAA,CAAA,GAAA,CAAhB,EAAE,KAAK,EAAE,OAAO,EAAE,GAAC;AAEpD,QAAA,IAAA,CAAA,cAAc,GAAG,QAAQ,CAC1C,MAAK;YACH,OAAO,EAAE,CACP,uBAAuB,EACvB,IAAI,CAAC,WAAW,EAAE,CACnB;AACH,QAAA,CAAC,0DACF;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;kBAnB/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,UAAU,EAAE,IAAI;AAChB,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;;;;"}
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { inject, signal, computed, ChangeDetectionStrategy, Component, Injectable } from '@angular/core';
|
|
3
|
+
import { firstValueFrom } from 'rxjs';
|
|
4
|
+
import { NgIcon, provideIcons } from '@ng-icons/core';
|
|
5
|
+
import { matWarningRound } from '@ng-icons/material-icons/round';
|
|
6
|
+
import { UpButtonDirective } from '@unipin/angular-applet/buttons';
|
|
7
|
+
import { UpProgressBarDirective } from '@unipin/angular-applet/progress-bar';
|
|
8
|
+
import * as i1 from '@unipin/angular-applet/dialog';
|
|
9
|
+
import { UpDialogRef, injectDialogContext } from '@unipin/angular-applet/dialog';
|
|
10
|
+
|
|
11
|
+
class UpLoadingDialogComponent {
|
|
12
|
+
constructor() {
|
|
13
|
+
this.dialogRef = inject(UpDialogRef);
|
|
14
|
+
this.opts = injectDialogContext();
|
|
15
|
+
this.requestState = signal({
|
|
16
|
+
progress: 0,
|
|
17
|
+
isDone: false,
|
|
18
|
+
totalProgress: 0,
|
|
19
|
+
errorMessages: [],
|
|
20
|
+
}, ...(ngDevMode ? [{ debugName: "requestState" }] : []));
|
|
21
|
+
this.state = computed(() => this.dialogRef?.state() ?? 'closed', ...(ngDevMode ? [{ debugName: "state" }] : []));
|
|
22
|
+
}
|
|
23
|
+
ngOnInit() {
|
|
24
|
+
this.executeTasks();
|
|
25
|
+
}
|
|
26
|
+
async executeTasks() {
|
|
27
|
+
const { serviceCalls } = this.opts;
|
|
28
|
+
this.requestState.set({
|
|
29
|
+
progress: 0,
|
|
30
|
+
isDone: false,
|
|
31
|
+
errorMessages: [],
|
|
32
|
+
totalProgress: serviceCalls.length,
|
|
33
|
+
});
|
|
34
|
+
for (const [i, service] of serviceCalls.entries()) {
|
|
35
|
+
try {
|
|
36
|
+
await firstValueFrom(service);
|
|
37
|
+
}
|
|
38
|
+
catch (err) {
|
|
39
|
+
this.handleError(i, err);
|
|
40
|
+
}
|
|
41
|
+
finally {
|
|
42
|
+
this.requestState.update((s) => ({ ...s, progress: s.progress + 1 }));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
this.requestState.update((s) => ({ ...s, isDone: true }));
|
|
46
|
+
}
|
|
47
|
+
handleError(i, err) {
|
|
48
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
49
|
+
this.requestState.update((s) => {
|
|
50
|
+
return {
|
|
51
|
+
...s,
|
|
52
|
+
errorMessages: [
|
|
53
|
+
...s.errorMessages,
|
|
54
|
+
`Request #${i + 1} failed: ${message}`
|
|
55
|
+
]
|
|
56
|
+
};
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: UpLoadingDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
60
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.0", 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
|
+
provideIcons({
|
|
62
|
+
matWarningRound
|
|
63
|
+
})
|
|
64
|
+
], ngImport: i0, template: `
|
|
65
|
+
<div class="border-b border-border pb-4">
|
|
66
|
+
<h3 class="text-lg font-semibold text-gray-900 flex items-center gap-3">
|
|
67
|
+
Processing Request
|
|
68
|
+
</h3>
|
|
69
|
+
</div>
|
|
70
|
+
|
|
71
|
+
<div class="space-y-2">
|
|
72
|
+
<div class="flex items-center justify-between text-sm">
|
|
73
|
+
<span class="font-medium">Progress</span>
|
|
74
|
+
|
|
75
|
+
<span class="font-semibold">
|
|
76
|
+
{{ requestState().progress }}/{{ requestState().totalProgress }}
|
|
77
|
+
</span>
|
|
78
|
+
</div>
|
|
79
|
+
|
|
80
|
+
<span
|
|
81
|
+
upProgressBar
|
|
82
|
+
class="h-2.5 w-full bg-gray-200 rounded-full overflow-hidden"
|
|
83
|
+
[max]="requestState().totalProgress"
|
|
84
|
+
[progress]="requestState().progress"
|
|
85
|
+
>
|
|
86
|
+
</span>
|
|
87
|
+
</div>
|
|
88
|
+
|
|
89
|
+
@if (
|
|
90
|
+
opts.showError &&
|
|
91
|
+
requestState().errorMessages.length > 0 &&
|
|
92
|
+
requestState().isDone
|
|
93
|
+
) {
|
|
94
|
+
<div class="space-y-3 mt-4">
|
|
95
|
+
<div class="flex items-center gap-2 text-yellow-500">
|
|
96
|
+
<ng-icon name="matWarningRound"/>
|
|
97
|
+
|
|
98
|
+
<h4 class="text-sm font-medium text-gray-700">
|
|
99
|
+
Issues ({{ requestState().errorMessages.length }})
|
|
100
|
+
</h4>
|
|
101
|
+
</div>
|
|
102
|
+
|
|
103
|
+
<div class="max-h-24 overflow-y-auto bg-gray-50 rounded-md border border-border">
|
|
104
|
+
<ul>
|
|
105
|
+
@for (err of requestState().errorMessages; track $index) {
|
|
106
|
+
<li class="px-3 py-2 text-xs bg-red-50 border-l-4 border-red-400 text-destructive">
|
|
107
|
+
{{err}}
|
|
108
|
+
</li>
|
|
109
|
+
}
|
|
110
|
+
</ul>
|
|
111
|
+
</div>
|
|
112
|
+
</div>
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
<div class="flex flex-col-reverse gap-3 sm:flex-row sm:justify-end pt-2">
|
|
116
|
+
<button
|
|
117
|
+
upButton
|
|
118
|
+
class="flex-1 sm:flex-none sm:min-w-[120px] px-4 py-2.5 text-sm font-medium"
|
|
119
|
+
[disabled]="!requestState().isDone"
|
|
120
|
+
(click)="dialogRef.close()"
|
|
121
|
+
>
|
|
122
|
+
{{ requestState().isDone? 'Done' : 'Processing...' }}
|
|
123
|
+
</button>
|
|
124
|
+
</div>
|
|
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
|
+
}
|
|
127
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: UpLoadingDialogComponent, decorators: [{
|
|
128
|
+
type: Component,
|
|
129
|
+
args: [{
|
|
130
|
+
standalone: true,
|
|
131
|
+
selector: 'up-loading-dialog',
|
|
132
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
133
|
+
host: {
|
|
134
|
+
'[attr.data-state]': 'state()',
|
|
135
|
+
'class': `
|
|
136
|
+
grid relative gap-6 bg-white rounded-xl shadow-lg
|
|
137
|
+
[animation-duration:200] data-[state=open]:animate-in data-[state=closed]:animate-out
|
|
138
|
+
data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0
|
|
139
|
+
data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95
|
|
140
|
+
data-[state=closed]:slide-out-to-top-[2%] data-[state=open]:slide-in-from-top-[2%]
|
|
141
|
+
w-full p-6 max-w-[calc(100%-2rem)] mx-auto
|
|
142
|
+
md:w-full md:min-w-120 md:max-w-130
|
|
143
|
+
overflow-hidden border border-border
|
|
144
|
+
`,
|
|
145
|
+
},
|
|
146
|
+
providers: [
|
|
147
|
+
provideIcons({
|
|
148
|
+
matWarningRound
|
|
149
|
+
})
|
|
150
|
+
],
|
|
151
|
+
imports: [
|
|
152
|
+
NgIcon,
|
|
153
|
+
UpButtonDirective,
|
|
154
|
+
UpProgressBarDirective,
|
|
155
|
+
],
|
|
156
|
+
template: `
|
|
157
|
+
<div class="border-b border-border pb-4">
|
|
158
|
+
<h3 class="text-lg font-semibold text-gray-900 flex items-center gap-3">
|
|
159
|
+
Processing Request
|
|
160
|
+
</h3>
|
|
161
|
+
</div>
|
|
162
|
+
|
|
163
|
+
<div class="space-y-2">
|
|
164
|
+
<div class="flex items-center justify-between text-sm">
|
|
165
|
+
<span class="font-medium">Progress</span>
|
|
166
|
+
|
|
167
|
+
<span class="font-semibold">
|
|
168
|
+
{{ requestState().progress }}/{{ requestState().totalProgress }}
|
|
169
|
+
</span>
|
|
170
|
+
</div>
|
|
171
|
+
|
|
172
|
+
<span
|
|
173
|
+
upProgressBar
|
|
174
|
+
class="h-2.5 w-full bg-gray-200 rounded-full overflow-hidden"
|
|
175
|
+
[max]="requestState().totalProgress"
|
|
176
|
+
[progress]="requestState().progress"
|
|
177
|
+
>
|
|
178
|
+
</span>
|
|
179
|
+
</div>
|
|
180
|
+
|
|
181
|
+
@if (
|
|
182
|
+
opts.showError &&
|
|
183
|
+
requestState().errorMessages.length > 0 &&
|
|
184
|
+
requestState().isDone
|
|
185
|
+
) {
|
|
186
|
+
<div class="space-y-3 mt-4">
|
|
187
|
+
<div class="flex items-center gap-2 text-yellow-500">
|
|
188
|
+
<ng-icon name="matWarningRound"/>
|
|
189
|
+
|
|
190
|
+
<h4 class="text-sm font-medium text-gray-700">
|
|
191
|
+
Issues ({{ requestState().errorMessages.length }})
|
|
192
|
+
</h4>
|
|
193
|
+
</div>
|
|
194
|
+
|
|
195
|
+
<div class="max-h-24 overflow-y-auto bg-gray-50 rounded-md border border-border">
|
|
196
|
+
<ul>
|
|
197
|
+
@for (err of requestState().errorMessages; track $index) {
|
|
198
|
+
<li class="px-3 py-2 text-xs bg-red-50 border-l-4 border-red-400 text-destructive">
|
|
199
|
+
{{err}}
|
|
200
|
+
</li>
|
|
201
|
+
}
|
|
202
|
+
</ul>
|
|
203
|
+
</div>
|
|
204
|
+
</div>
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
<div class="flex flex-col-reverse gap-3 sm:flex-row sm:justify-end pt-2">
|
|
208
|
+
<button
|
|
209
|
+
upButton
|
|
210
|
+
class="flex-1 sm:flex-none sm:min-w-[120px] px-4 py-2.5 text-sm font-medium"
|
|
211
|
+
[disabled]="!requestState().isDone"
|
|
212
|
+
(click)="dialogRef.close()"
|
|
213
|
+
>
|
|
214
|
+
{{ requestState().isDone? 'Done' : 'Processing...' }}
|
|
215
|
+
</button>
|
|
216
|
+
</div>
|
|
217
|
+
`
|
|
218
|
+
}]
|
|
219
|
+
}] });
|
|
220
|
+
|
|
221
|
+
class UpLoadingDialogController {
|
|
222
|
+
constructor(dialog) {
|
|
223
|
+
this.dialog = dialog;
|
|
224
|
+
}
|
|
225
|
+
show(options) {
|
|
226
|
+
return this.dialog.open({
|
|
227
|
+
context: options,
|
|
228
|
+
content: UpLoadingDialogComponent,
|
|
229
|
+
options: {
|
|
230
|
+
hasBackdrop: true,
|
|
231
|
+
disableClose: true,
|
|
232
|
+
closeOnBackdropClick: false,
|
|
233
|
+
closeOnOutsidePointerEvents: false
|
|
234
|
+
}
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: UpLoadingDialogController, deps: [{ token: i1.UpDialogService }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
238
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: UpLoadingDialogController, providedIn: 'root' }); }
|
|
239
|
+
}
|
|
240
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.0", ngImport: i0, type: UpLoadingDialogController, decorators: [{
|
|
241
|
+
type: Injectable,
|
|
242
|
+
args: [{
|
|
243
|
+
providedIn: 'root'
|
|
244
|
+
}]
|
|
245
|
+
}], ctorParameters: () => [{ type: i1.UpDialogService }] });
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* Generated bundle index. Do not edit.
|
|
249
|
+
*/
|
|
250
|
+
|
|
251
|
+
export { UpLoadingDialogController };
|
|
252
|
+
//# sourceMappingURL=unipin-angular-applet-loading-dialog.mjs.map
|
|
@@ -0,0 +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@Component({\n standalone: true,\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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"}
|