@elementar-rt/components 0.6.55
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 -0
- package/action-required/index.d.ts +13 -0
- package/alert/index.d.ts +51 -0
- package/announcement/index.d.ts +45 -0
- package/avatar/index.d.ts +67 -0
- package/block-loader/index.d.ts +21 -0
- package/block-state/index.d.ts +33 -0
- package/brand-colors/index.d.ts +27 -0
- package/breadcrumbs/index.d.ts +104 -0
- package/card-overlay/index.d.ts +20 -0
- package/carousel/index.d.ts +75 -0
- package/code-highlighter/index.d.ts +18 -0
- package/color-picker/index.d.ts +92 -0
- package/color-scheme/index.d.ts +44 -0
- package/command-bar/index.d.ts +28 -0
- package/comment-editor/index.d.ts +194 -0
- package/comparison-slider/index.d.ts +51 -0
- package/confirm/index.d.ts +35 -0
- package/content-fade/index.d.ts +17 -0
- package/cookie-popup/index.d.ts +41 -0
- package/core/index.d.ts +252 -0
- package/country-select/index.d.ts +76 -0
- package/crop/index.d.ts +59 -0
- package/currency-select/index.d.ts +78 -0
- package/dashboard/index.d.ts +48 -0
- package/data-view/index.d.ts +127 -0
- package/date-format-select/index.d.ts +56 -0
- package/divider/index.d.ts +13 -0
- package/drawer/index.d.ts +35 -0
- package/emoji-picker/index.d.ts +49 -0
- package/expand/index.d.ts +26 -0
- package/fesm2022/elementar-rt-components-action-required.mjs +30 -0
- package/fesm2022/elementar-rt-components-action-required.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-alert.mjs +139 -0
- package/fesm2022/elementar-rt-components-alert.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-announcement.mjs +73 -0
- package/fesm2022/elementar-rt-components-announcement.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-avatar.mjs +234 -0
- package/fesm2022/elementar-rt-components-avatar.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-block-loader.mjs +54 -0
- package/fesm2022/elementar-rt-components-block-loader.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-block-state.mjs +75 -0
- package/fesm2022/elementar-rt-components-block-state.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-brand-colors.mjs +78 -0
- package/fesm2022/elementar-rt-components-brand-colors.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-breadcrumbs.mjs +213 -0
- package/fesm2022/elementar-rt-components-breadcrumbs.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-card-overlay.mjs +55 -0
- package/fesm2022/elementar-rt-components-card-overlay.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-carousel.mjs +605 -0
- package/fesm2022/elementar-rt-components-carousel.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-code-highlighter.mjs +57 -0
- package/fesm2022/elementar-rt-components-code-highlighter.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-color-picker.mjs +708 -0
- package/fesm2022/elementar-rt-components-color-picker.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-color-scheme.mjs +106 -0
- package/fesm2022/elementar-rt-components-color-scheme.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-command-bar.mjs +59 -0
- package/fesm2022/elementar-rt-components-command-bar.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-comment-editor.mjs +1039 -0
- package/fesm2022/elementar-rt-components-comment-editor.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-comparison-slider.mjs +193 -0
- package/fesm2022/elementar-rt-components-comparison-slider.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-confirm.mjs +86 -0
- package/fesm2022/elementar-rt-components-confirm.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-content-fade.mjs +35 -0
- package/fesm2022/elementar-rt-components-content-fade.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-cookie-popup.mjs +109 -0
- package/fesm2022/elementar-rt-components-cookie-popup.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-core.mjs +837 -0
- package/fesm2022/elementar-rt-components-core.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-country-select.mjs +477 -0
- package/fesm2022/elementar-rt-components-country-select.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-crop.mjs +183 -0
- package/fesm2022/elementar-rt-components-crop.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-currency-select.mjs +384 -0
- package/fesm2022/elementar-rt-components-currency-select.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-dashboard.mjs +96 -0
- package/fesm2022/elementar-rt-components-dashboard.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-data-view.mjs +302 -0
- package/fesm2022/elementar-rt-components-data-view.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-date-format-select.mjs +136 -0
- package/fesm2022/elementar-rt-components-date-format-select.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-divider.mjs +31 -0
- package/fesm2022/elementar-rt-components-divider.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-drawer.mjs +131 -0
- package/fesm2022/elementar-rt-components-drawer.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-emoji-picker.mjs +249 -0
- package/fesm2022/elementar-rt-components-emoji-picker.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-expand.mjs +60 -0
- package/fesm2022/elementar-rt-components-expand.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-filter-builder.mjs +333 -0
- package/fesm2022/elementar-rt-components-filter-builder.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-form-renderer-autocomplete-many-field.component-AqEghjO_.mjs +123 -0
- package/fesm2022/elementar-rt-components-form-renderer-autocomplete-many-field.component-AqEghjO_.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-form-renderer-checkbox-field.component-CUKmZGFq.mjs +22 -0
- package/fesm2022/elementar-rt-components-form-renderer-checkbox-field.component-CUKmZGFq.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-form-renderer-datepicker-field.component-DihIRWMt.mjs +40 -0
- package/fesm2022/elementar-rt-components-form-renderer-datepicker-field.component-DihIRWMt.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-form-renderer-divider-content.component-CjlGcU3B.mjs +17 -0
- package/fesm2022/elementar-rt-components-form-renderer-divider-content.component-CjlGcU3B.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-form-renderer-image-content.component-0pL2Fk0H.mjs +17 -0
- package/fesm2022/elementar-rt-components-form-renderer-image-content.component-0pL2Fk0H.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-form-renderer-input-field.component-X2sKvj6J.mjs +33 -0
- package/fesm2022/elementar-rt-components-form-renderer-input-field.component-X2sKvj6J.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-form-renderer-radio-group-field.component-DWXZAA3F.mjs +38 -0
- package/fesm2022/elementar-rt-components-form-renderer-radio-group-field.component-DWXZAA3F.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-form-renderer-select-field.component-Cx9DZoD6.mjs +39 -0
- package/fesm2022/elementar-rt-components-form-renderer-select-field.component-Cx9DZoD6.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-form-renderer-text-content.component-BmFyUG06.mjs +24 -0
- package/fesm2022/elementar-rt-components-form-renderer-text-content.component-BmFyUG06.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-form-renderer-textarea-field.component-D9KmE049.mjs +37 -0
- package/fesm2022/elementar-rt-components-form-renderer-textarea-field.component-D9KmE049.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-form-renderer-timezone-field.component-BroP_Q4P.mjs +35 -0
- package/fesm2022/elementar-rt-components-form-renderer-timezone-field.component-BroP_Q4P.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-form-renderer-toggle-field.component-nGbtVi1_.mjs +22 -0
- package/fesm2022/elementar-rt-components-form-renderer-toggle-field.component-nGbtVi1_.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-form-renderer.mjs +321 -0
- package/fesm2022/elementar-rt-components-form-renderer.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-gauge.mjs +50 -0
- package/fesm2022/elementar-rt-components-gauge.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-icon.mjs +62 -0
- package/fesm2022/elementar-rt-components-icon.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-image-resizer.mjs +159 -0
- package/fesm2022/elementar-rt-components-image-resizer.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-image-viewer.mjs +349 -0
- package/fesm2022/elementar-rt-components-image-viewer.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-incidents.mjs +259 -0
- package/fesm2022/elementar-rt-components-incidents.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-inline-text-edit.mjs +181 -0
- package/fesm2022/elementar-rt-components-inline-text-edit.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-input-mask.mjs +180 -0
- package/fesm2022/elementar-rt-components-input-mask.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-input-validator.mjs +24 -0
- package/fesm2022/elementar-rt-components-input-validator.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-kanban-board.mjs +156 -0
- package/fesm2022/elementar-rt-components-kanban-board.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-layout.mjs +188 -0
- package/fesm2022/elementar-rt-components-layout.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-logo.mjs +43 -0
- package/fesm2022/elementar-rt-components-logo.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-marquee.mjs +79 -0
- package/fesm2022/elementar-rt-components-marquee.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-micro-chart.mjs +950 -0
- package/fesm2022/elementar-rt-components-micro-chart.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-navigation.mjs +379 -0
- package/fesm2022/elementar-rt-components-navigation.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-notifications.mjs +190 -0
- package/fesm2022/elementar-rt-components-notifications.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-number-input.mjs +288 -0
- package/fesm2022/elementar-rt-components-number-input.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-overlay-scrollbar.mjs +455 -0
- package/fesm2022/elementar-rt-components-overlay-scrollbar.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-overlay.mjs +112 -0
- package/fesm2022/elementar-rt-components-overlay.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-page-loading-bar.mjs +79 -0
- package/fesm2022/elementar-rt-components-page-loading-bar.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-panel.mjs +105 -0
- package/fesm2022/elementar-rt-components-panel.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-password-strength.mjs +474 -0
- package/fesm2022/elementar-rt-components-password-strength.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-phone-input.mjs +637 -0
- package/fesm2022/elementar-rt-components-phone-input.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-pin-input.mjs +197 -0
- package/fesm2022/elementar-rt-components-pin-input.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-popover.mjs +262 -0
- package/fesm2022/elementar-rt-components-popover.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-radio-card.mjs +102 -0
- package/fesm2022/elementar-rt-components-radio-card.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-rail-nav.mjs +84 -0
- package/fesm2022/elementar-rt-components-rail-nav.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-resizable-container.mjs +69 -0
- package/fesm2022/elementar-rt-components-resizable-container.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-screen-loader.mjs +27 -0
- package/fesm2022/elementar-rt-components-screen-loader.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-scroll-spy.mjs +165 -0
- package/fesm2022/elementar-rt-components-scroll-spy.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-segmented.mjs +153 -0
- package/fesm2022/elementar-rt-components-segmented.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-side-panel.mjs +110 -0
- package/fesm2022/elementar-rt-components-side-panel.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-sidebar.mjs +423 -0
- package/fesm2022/elementar-rt-components-sidebar.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-signature-pad.mjs +452 -0
- package/fesm2022/elementar-rt-components-signature-pad.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-skeleton.mjs +56 -0
- package/fesm2022/elementar-rt-components-skeleton.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-splash-screen.mjs +91 -0
- package/fesm2022/elementar-rt-components-splash-screen.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-stepper.mjs +194 -0
- package/fesm2022/elementar-rt-components-stepper.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-suggestions.mjs +76 -0
- package/fesm2022/elementar-rt-components-suggestions.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-tab-panel.mjs +270 -0
- package/fesm2022/elementar-rt-components-tab-panel.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-text-editor.mjs +1025 -0
- package/fesm2022/elementar-rt-components-text-editor.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-thumbnail-maker.mjs +214 -0
- package/fesm2022/elementar-rt-components-thumbnail-maker.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-timeline.mjs +122 -0
- package/fesm2022/elementar-rt-components-timeline.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-timezone-select.mjs +351 -0
- package/fesm2022/elementar-rt-components-timezone-select.mjs.map +1 -0
- package/fesm2022/elementar-rt-components-upload.mjs +340 -0
- package/fesm2022/elementar-rt-components-upload.mjs.map +1 -0
- package/fesm2022/elementar-rt-components.mjs +6 -0
- package/fesm2022/elementar-rt-components.mjs.map +1 -0
- package/filter-builder/index.d.ts +107 -0
- package/form-renderer/index.d.ts +121 -0
- package/gauge/index.d.ts +21 -0
- package/icon/index.d.ts +17 -0
- package/image-resizer/index.d.ts +35 -0
- package/image-viewer/index.d.ts +63 -0
- package/incidents/index.d.ts +119 -0
- package/index.d.ts +2 -0
- package/inline-text-edit/index.d.ts +39 -0
- package/input-mask/index.d.ts +36 -0
- package/input-validator/index.d.ts +5 -0
- package/kanban-board/index.d.ts +68 -0
- package/layout/index.d.ts +75 -0
- package/logo/index.d.ts +21 -0
- package/marquee/index.d.ts +26 -0
- package/micro-chart/index.d.ts +193 -0
- package/navigation/index.d.ts +119 -0
- package/notifications/index.d.ts +84 -0
- package/number-input/index.d.ts +93 -0
- package/overlay/index.d.ts +12 -0
- package/overlay-scrollbar/index.d.ts +66 -0
- package/package.json +356 -0
- package/page-loading-bar/index.d.ts +20 -0
- package/panel/index.d.ts +43 -0
- package/password-strength/index.d.ts +109 -0
- package/phone-input/index.d.ts +94 -0
- package/pin-input/index.d.ts +48 -0
- package/popover/index.d.ts +75 -0
- package/radio-card/index.d.ts +37 -0
- package/rail-nav/index.d.ts +36 -0
- package/resizable-container/index.d.ts +21 -0
- package/screen-loader/index.d.ts +9 -0
- package/scroll-spy/index.d.ts +48 -0
- package/segmented/index.d.ts +54 -0
- package/side-panel/index.d.ts +42 -0
- package/sidebar/index.d.ts +143 -0
- package/signature-pad/index.d.ts +49 -0
- package/skeleton/index.d.ts +24 -0
- package/splash-screen/index.d.ts +31 -0
- package/stepper/index.d.ts +65 -0
- package/styles/_common.scss +776 -0
- package/styles/themes/cyan-orange.scss +41 -0
- package/styles/themes/default.scss +5 -0
- package/styles/themes/magenta-violet.scss +41 -0
- package/styles/themes/rose-red.scss +41 -0
- package/suggestions/index.d.ts +32 -0
- package/tab-panel/index.d.ts +96 -0
- package/text-editor/index.d.ts +191 -0
- package/thumbnail-maker/index.d.ts +35 -0
- package/timeline/index.d.ts +57 -0
- package/timezone-select/index.d.ts +72 -0
- package/upload/index.d.ts +134 -0
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { InjectionToken, Component, input, booleanAttribute, signal, forwardRef } from '@angular/core';
|
|
3
|
+
import { NgComponentOutlet, NgTemplateOutlet, AsyncPipe } from '@angular/common';
|
|
4
|
+
import { SkeletonLineComponent, SkeletonBlockComponent, SkeletonComponent } from '@elementar-rt/components/skeleton';
|
|
5
|
+
|
|
6
|
+
const DASHBOARD = new InjectionToken('DASHBOARD');
|
|
7
|
+
|
|
8
|
+
class WidgetSkeletonComponent {
|
|
9
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: WidgetSkeletonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.10", type: WidgetSkeletonComponent, isStandalone: true, selector: "emr-widget-skeleton", host: { classAttribute: "emr-widget-skeleton" }, exportAs: ["emrWidgetSkeleton"], ngImport: i0, template: "<emr-skeleton direction=\"col\" class=\"h-full\">\r\n <emr-skeleton-line class=\"h-4 w-8/12\"/>\r\n <div class=\"grow min-h-12\">\r\n <emr-skeleton-block class=\"h-full\"/>\r\n </div>\r\n</emr-skeleton>\r\n", styles: [":host{display:flex;flex-direction:column;height:100%;gap:calc(var(--spacing, .25rem) * 4)}\n/*! tailwindcss v4.1.14 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "component", type: SkeletonLineComponent, selector: "emr-skeleton-line", exportAs: ["emrSkeletonLine"] }, { kind: "component", type: SkeletonBlockComponent, selector: "emr-skeleton-block", exportAs: ["emrSkeletonBlock"] }, { kind: "component", type: SkeletonComponent, selector: "emr-skeleton", inputs: ["direction"], exportAs: ["emrSkeleton"] }] });
|
|
11
|
+
}
|
|
12
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: WidgetSkeletonComponent, decorators: [{
|
|
13
|
+
type: Component,
|
|
14
|
+
args: [{ selector: 'emr-widget-skeleton', exportAs: 'emrWidgetSkeleton', imports: [
|
|
15
|
+
SkeletonLineComponent,
|
|
16
|
+
SkeletonBlockComponent,
|
|
17
|
+
SkeletonComponent
|
|
18
|
+
], host: {
|
|
19
|
+
'class': 'emr-widget-skeleton',
|
|
20
|
+
}, template: "<emr-skeleton direction=\"col\" class=\"h-full\">\r\n <emr-skeleton-line class=\"h-4 w-8/12\"/>\r\n <div class=\"grow min-h-12\">\r\n <emr-skeleton-block class=\"h-full\"/>\r\n </div>\r\n</emr-skeleton>\r\n", styles: [":host{display:flex;flex-direction:column;height:100%;gap:calc(var(--spacing, .25rem) * 4)}\n/*! tailwindcss v4.1.14 | MIT License | https://tailwindcss.com */\n"] }]
|
|
21
|
+
}] });
|
|
22
|
+
|
|
23
|
+
class DashboardComponent {
|
|
24
|
+
_skeletonMap = new Map();
|
|
25
|
+
_componentsMap = new Map();
|
|
26
|
+
configs = input([], ...(ngDevMode ? [{ debugName: "configs" }] : []));
|
|
27
|
+
items = input([], ...(ngDevMode ? [{ debugName: "items" }] : []));
|
|
28
|
+
plain = input(false, ...(ngDevMode ? [{ debugName: "plain", transform: booleanAttribute }] : [{
|
|
29
|
+
transform: booleanAttribute
|
|
30
|
+
}]));
|
|
31
|
+
waitWhenAllWidgetLoaded = input(false, ...(ngDevMode ? [{ debugName: "waitWhenAllWidgetLoaded", transform: booleanAttribute }] : [{
|
|
32
|
+
transform: booleanAttribute
|
|
33
|
+
}]));
|
|
34
|
+
_allLoaded = signal(false, ...(ngDevMode ? [{ debugName: "_allLoaded" }] : []));
|
|
35
|
+
_loadedWidgetsCount = signal(0, ...(ngDevMode ? [{ debugName: "_loadedWidgetsCount" }] : []));
|
|
36
|
+
ngOnInit() {
|
|
37
|
+
if (this.configs().length === 0) {
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
if (!this.waitWhenAllWidgetLoaded()) {
|
|
41
|
+
this._allLoaded.set(true);
|
|
42
|
+
}
|
|
43
|
+
this.configs().forEach(config => {
|
|
44
|
+
this._skeletonMap.set(config.type, config.skeleton);
|
|
45
|
+
});
|
|
46
|
+
this.configs().forEach(async (config, index) => {
|
|
47
|
+
this._componentsMap.set(config.type, config.component());
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
markWidgetAsLoaded(id) {
|
|
51
|
+
this._loadedWidgetsCount.set(this._loadedWidgetsCount() + 1);
|
|
52
|
+
this._allLoaded.set(this._loadedWidgetsCount() === this.items().length);
|
|
53
|
+
}
|
|
54
|
+
getWidgetConfig(type) {
|
|
55
|
+
return this.configs().find(config => config.type === type);
|
|
56
|
+
}
|
|
57
|
+
getSkeletonComponent(type) {
|
|
58
|
+
return this._skeletonMap.get(type);
|
|
59
|
+
}
|
|
60
|
+
getWidgetComponent(type) {
|
|
61
|
+
return this._componentsMap.get(type);
|
|
62
|
+
}
|
|
63
|
+
getWidgetInputs(widgetItem) {
|
|
64
|
+
return widgetItem.widget ? { widget: widgetItem.widget, id: widgetItem.id } : { id: widgetItem.id };
|
|
65
|
+
}
|
|
66
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: DashboardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
67
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.10", type: DashboardComponent, isStandalone: true, selector: "emr-dashboard", inputs: { configs: { classPropertyName: "configs", publicName: "configs", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: false, transformFunction: null }, plain: { classPropertyName: "plain", publicName: "plain", isSignal: true, isRequired: false, transformFunction: null }, waitWhenAllWidgetLoaded: { classPropertyName: "waitWhenAllWidgetLoaded", publicName: "waitWhenAllWidgetLoaded", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "emr-dashboard" }, providers: [
|
|
68
|
+
{
|
|
69
|
+
provide: DASHBOARD,
|
|
70
|
+
useExisting: forwardRef(() => DashboardComponent),
|
|
71
|
+
}
|
|
72
|
+
], exportAs: ["emrDashboard"], ngImport: i0, template: "<div class=\"dashgrid\">\r\n <ng-container *ngTemplateOutlet=\"itemsTpl; context: { $implicit: items() }\"/>\r\n</div>\r\n\r\n<ng-template #itemsTpl let-items>\r\n @for (item of items; track $index) {\r\n <div class=\"dashgrid-item\"\r\n [style.--emr-dashgrid-item-colspan]=\"item.columns || 12\">\r\n @if (item.children?.length > 0) {\r\n <div class=\"dashgrid\">\r\n <ng-container *ngTemplateOutlet=\"itemsTpl; context: { $implicit: item.children }\"/>\r\n </div>\r\n } @else {\r\n <div class=\"widget\"\r\n [style.--emr-dashboard-widget-height]=\"item.height\"\r\n [class.plain]=\"getWidgetConfig(item.type).plain || plain()\"\r\n [class.hidden]=\"!_allLoaded()\">\r\n <ng-container [ngComponentOutlet]=\"getWidgetComponent(item.type) | async\"\r\n [ngComponentOutletInputs]=\"getWidgetInputs(item)\"/>\r\n </div>\r\n\r\n @if (!_allLoaded()) {\r\n <div class=\"widget skeleton\"\r\n [style.--emr-dashboard-widget-skeleton-min-height]=\"item.skeletonHeight || item.height\">\r\n @let skeletonComponent = getSkeletonComponent(item.type);\r\n\r\n @if (skeletonComponent) {\r\n <ng-container [ngComponentOutlet]=\"skeletonComponent\"/>\r\n } @else {\r\n <emr-widget-skeleton/>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n }\r\n</ng-template>\r\n", styles: [":host{--emr-dashboard-gap: calc(var(--spacing, .25rem) * 6);display:block}:host .dashgrid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:var(--emr-dashboard-gap)}:host .dashgrid-item{--emr-dashgrid-item-colspan: 12;grid-column:span var(--emr-dashgrid-item-colspan)/span var(--emr-dashgrid-item-colspan)}:host .widget{--emr-dashboard-widget-height: 100%;height:var(--emr-dashboard-widget-height)}:host .widget:not(.plain){border:1px solid var(--color-border);border-radius:1rem}:host .skeleton{--emr-dashboard-widget-skeleton-min-height: 100px;padding:calc(var(--spacing, .25rem) * 5);min-height:var(--emr-dashboard-widget-skeleton-min-height)}\n/*! tailwindcss v4.1.14 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "component", type: WidgetSkeletonComponent, selector: "emr-widget-skeleton", exportAs: ["emrWidgetSkeleton"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: AsyncPipe, name: "async" }] });
|
|
73
|
+
}
|
|
74
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: DashboardComponent, decorators: [{
|
|
75
|
+
type: Component,
|
|
76
|
+
args: [{ selector: 'emr-dashboard', exportAs: 'emrDashboard', imports: [
|
|
77
|
+
NgComponentOutlet,
|
|
78
|
+
AsyncPipe,
|
|
79
|
+
WidgetSkeletonComponent,
|
|
80
|
+
NgTemplateOutlet
|
|
81
|
+
], providers: [
|
|
82
|
+
{
|
|
83
|
+
provide: DASHBOARD,
|
|
84
|
+
useExisting: forwardRef(() => DashboardComponent),
|
|
85
|
+
}
|
|
86
|
+
], host: {
|
|
87
|
+
'class': 'emr-dashboard'
|
|
88
|
+
}, template: "<div class=\"dashgrid\">\r\n <ng-container *ngTemplateOutlet=\"itemsTpl; context: { $implicit: items() }\"/>\r\n</div>\r\n\r\n<ng-template #itemsTpl let-items>\r\n @for (item of items; track $index) {\r\n <div class=\"dashgrid-item\"\r\n [style.--emr-dashgrid-item-colspan]=\"item.columns || 12\">\r\n @if (item.children?.length > 0) {\r\n <div class=\"dashgrid\">\r\n <ng-container *ngTemplateOutlet=\"itemsTpl; context: { $implicit: item.children }\"/>\r\n </div>\r\n } @else {\r\n <div class=\"widget\"\r\n [style.--emr-dashboard-widget-height]=\"item.height\"\r\n [class.plain]=\"getWidgetConfig(item.type).plain || plain()\"\r\n [class.hidden]=\"!_allLoaded()\">\r\n <ng-container [ngComponentOutlet]=\"getWidgetComponent(item.type) | async\"\r\n [ngComponentOutletInputs]=\"getWidgetInputs(item)\"/>\r\n </div>\r\n\r\n @if (!_allLoaded()) {\r\n <div class=\"widget skeleton\"\r\n [style.--emr-dashboard-widget-skeleton-min-height]=\"item.skeletonHeight || item.height\">\r\n @let skeletonComponent = getSkeletonComponent(item.type);\r\n\r\n @if (skeletonComponent) {\r\n <ng-container [ngComponentOutlet]=\"skeletonComponent\"/>\r\n } @else {\r\n <emr-widget-skeleton/>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n }\r\n</ng-template>\r\n", styles: [":host{--emr-dashboard-gap: calc(var(--spacing, .25rem) * 6);display:block}:host .dashgrid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:var(--emr-dashboard-gap)}:host .dashgrid-item{--emr-dashgrid-item-colspan: 12;grid-column:span var(--emr-dashgrid-item-colspan)/span var(--emr-dashgrid-item-colspan)}:host .widget{--emr-dashboard-widget-height: 100%;height:var(--emr-dashboard-widget-height)}:host .widget:not(.plain){border:1px solid var(--color-border);border-radius:1rem}:host .skeleton{--emr-dashboard-widget-skeleton-min-height: 100px;padding:calc(var(--spacing, .25rem) * 5);min-height:var(--emr-dashboard-widget-skeleton-min-height)}\n/*! tailwindcss v4.1.14 | MIT License | https://tailwindcss.com */\n"] }]
|
|
89
|
+
}], propDecorators: { configs: [{ type: i0.Input, args: [{ isSignal: true, alias: "configs", required: false }] }], items: [{ type: i0.Input, args: [{ isSignal: true, alias: "items", required: false }] }], plain: [{ type: i0.Input, args: [{ isSignal: true, alias: "plain", required: false }] }], waitWhenAllWidgetLoaded: [{ type: i0.Input, args: [{ isSignal: true, alias: "waitWhenAllWidgetLoaded", required: false }] }] } });
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* Generated bundle index. Do not edit.
|
|
93
|
+
*/
|
|
94
|
+
|
|
95
|
+
export { DASHBOARD, DashboardComponent };
|
|
96
|
+
//# sourceMappingURL=elementar-rt-components-dashboard.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elementar-rt-components-dashboard.mjs","sources":["../../../projects/components/dashboard/src/types.ts","../../../projects/components/dashboard/src/widget-skeleton/widget-skeleton.component.ts","../../../projects/components/dashboard/src/widget-skeleton/widget-skeleton.component.html","../../../projects/components/dashboard/src/dashboard/dashboard.component.ts","../../../projects/components/dashboard/src/dashboard/dashboard.component.html","../../../projects/components/dashboard/elementar-rt-components-dashboard.ts"],"sourcesContent":["import { InjectionToken, InputSignal } from '@angular/core';\r\n\r\nexport interface Dashboard {\r\n markWidgetAsLoaded(id: any): void;\r\n}\r\n\r\nexport interface WidgetComponent {\r\n id: InputSignal<any>;\r\n widget?: InputSignal<any>;\r\n}\r\n\r\nexport interface WidgetConfig {\r\n type: string;\r\n skeleton?: any;\r\n plain?: boolean;\r\n component: () => Promise<any>;\r\n}\r\n\r\nexport interface WidgetItem {\r\n id: any;\r\n type?: string;\r\n columns: number;\r\n children?: WidgetItem[];\r\n skeletonHeight?: string;\r\n height?: string;\r\n widget?: any; // widget data or nothing\r\n}\r\n\r\nexport const DASHBOARD = new InjectionToken('DASHBOARD');\r\n","import { Component } from '@angular/core';\r\nimport { SkeletonBlockComponent, SkeletonComponent, SkeletonLineComponent } from '@elementar-rt/components/skeleton';\r\n\r\n@Component({\r\n selector: 'emr-widget-skeleton',\r\n exportAs: 'emrWidgetSkeleton',\r\n imports: [\r\n SkeletonLineComponent,\r\n SkeletonBlockComponent,\r\n SkeletonComponent\r\n ],\r\n templateUrl: './widget-skeleton.component.html',\r\n styleUrl: './widget-skeleton.component.scss',\r\n host: {\r\n 'class': 'emr-widget-skeleton',\r\n }\r\n})\r\nexport class WidgetSkeletonComponent {\r\n\r\n}\r\n","<emr-skeleton direction=\"col\" class=\"h-full\">\r\n <emr-skeleton-line class=\"h-4 w-8/12\"/>\r\n <div class=\"grow min-h-12\">\r\n <emr-skeleton-block class=\"h-full\"/>\r\n </div>\r\n</emr-skeleton>\r\n","import {\r\n booleanAttribute,\r\n Component,\r\n forwardRef,\r\n input,\r\n OnInit,\r\n signal\r\n} from '@angular/core';\r\nimport {\r\n DASHBOARD, WidgetConfig, WidgetItem\r\n} from '../types';\r\nimport { AsyncPipe, NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\r\nimport { WidgetSkeletonComponent } from '../widget-skeleton/widget-skeleton.component';\r\n\r\n@Component({\r\n selector: 'emr-dashboard',\r\n exportAs: 'emrDashboard',\r\n imports: [\r\n NgComponentOutlet,\r\n AsyncPipe,\r\n WidgetSkeletonComponent,\r\n NgTemplateOutlet\r\n ],\r\n providers: [\r\n {\r\n provide: DASHBOARD,\r\n useExisting: forwardRef(() => DashboardComponent),\r\n }\r\n ],\r\n templateUrl: './dashboard.component.html',\r\n styleUrl: './dashboard.component.scss',\r\n host: {\r\n 'class': 'emr-dashboard'\r\n }\r\n})\r\nexport class DashboardComponent implements OnInit {\r\n protected _skeletonMap = new Map<string, any>();\r\n protected _componentsMap = new Map<string, any>();\r\n\r\n readonly configs = input<WidgetConfig[]>([]);\r\n readonly items = input<WidgetItem[]>([]);\r\n readonly plain = input(false, {\r\n transform: booleanAttribute\r\n });\r\n readonly waitWhenAllWidgetLoaded = input(false, {\r\n transform: booleanAttribute\r\n });\r\n\r\n protected _allLoaded = signal(false);\r\n protected _loadedWidgetsCount = signal(0);\r\n\r\n ngOnInit() {\r\n if (this.configs().length === 0) {\r\n return;\r\n }\r\n\r\n if (!this.waitWhenAllWidgetLoaded()) {\r\n this._allLoaded.set(true);\r\n }\r\n\r\n this.configs().forEach(config => {\r\n this._skeletonMap.set(config.type, config.skeleton);\r\n });\r\n this.configs().forEach(async (config, index: number) => {\r\n this._componentsMap.set(config.type, config.component());\r\n });\r\n }\r\n\r\n markWidgetAsLoaded(id: any) {\r\n this._loadedWidgetsCount.set(this._loadedWidgetsCount() + 1);\r\n this._allLoaded.set(this._loadedWidgetsCount() === this.items().length);\r\n }\r\n\r\n protected getWidgetConfig(type: string): WidgetConfig {\r\n return this.configs().find(config => config.type === type) as WidgetConfig;\r\n }\r\n\r\n protected getSkeletonComponent(type: string): any {\r\n return this._skeletonMap.get(type);\r\n }\r\n\r\n protected getWidgetComponent(type: string) {\r\n return this._componentsMap.get(type);\r\n }\r\n\r\n protected getWidgetInputs(widgetItem: WidgetItem): any {\r\n return widgetItem.widget ? { widget: widgetItem.widget, id: widgetItem.id } : { id: widgetItem.id };\r\n }\r\n}\r\n","<div class=\"dashgrid\">\r\n <ng-container *ngTemplateOutlet=\"itemsTpl; context: { $implicit: items() }\"/>\r\n</div>\r\n\r\n<ng-template #itemsTpl let-items>\r\n @for (item of items; track $index) {\r\n <div class=\"dashgrid-item\"\r\n [style.--emr-dashgrid-item-colspan]=\"item.columns || 12\">\r\n @if (item.children?.length > 0) {\r\n <div class=\"dashgrid\">\r\n <ng-container *ngTemplateOutlet=\"itemsTpl; context: { $implicit: item.children }\"/>\r\n </div>\r\n } @else {\r\n <div class=\"widget\"\r\n [style.--emr-dashboard-widget-height]=\"item.height\"\r\n [class.plain]=\"getWidgetConfig(item.type).plain || plain()\"\r\n [class.hidden]=\"!_allLoaded()\">\r\n <ng-container [ngComponentOutlet]=\"getWidgetComponent(item.type) | async\"\r\n [ngComponentOutletInputs]=\"getWidgetInputs(item)\"/>\r\n </div>\r\n\r\n @if (!_allLoaded()) {\r\n <div class=\"widget skeleton\"\r\n [style.--emr-dashboard-widget-skeleton-min-height]=\"item.skeletonHeight || item.height\">\r\n @let skeletonComponent = getSkeletonComponent(item.type);\r\n\r\n @if (skeletonComponent) {\r\n <ng-container [ngComponentOutlet]=\"skeletonComponent\"/>\r\n } @else {\r\n <emr-widget-skeleton/>\r\n }\r\n </div>\r\n }\r\n }\r\n </div>\r\n }\r\n</ng-template>\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { inject, TemplateRef, Directive, ChangeDetectorRef, ElementRef, Renderer2, contentChild, viewChild, input, booleanAttribute, computed, Injector, output, effect, Component } from '@angular/core';
|
|
3
|
+
import { MatTableDataSource, MatCell, MatColumnDef, MatHeaderCell, MatHeaderRow, MatHeaderRowDef, MatRow, MatRowDef, MatTable, MatHeaderCellDef, MatCellDef } from '@angular/material/table';
|
|
4
|
+
import { MatCheckbox } from '@angular/material/checkbox';
|
|
5
|
+
import { SelectionModel } from '@angular/cdk/collections';
|
|
6
|
+
import { MatSort, MatSortHeader } from '@angular/material/sort';
|
|
7
|
+
import { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';
|
|
8
|
+
import { SkeletonBlockComponent, SkeletonLineComponent, SkeletonCircleComponent, SkeletonComponent } from '@elementar-rt/components/skeleton';
|
|
9
|
+
|
|
10
|
+
class DataViewEmptyDataDirective {
|
|
11
|
+
templateRef = inject(TemplateRef);
|
|
12
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: DataViewEmptyDataDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
13
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.10", type: DataViewEmptyDataDirective, isStandalone: true, selector: "[emrDataViewEmptyData]", host: { classAttribute: "emr-data-view-empty-data" }, exportAs: ["emrDataViewEmptyData"], ngImport: i0 });
|
|
14
|
+
}
|
|
15
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: DataViewEmptyDataDirective, decorators: [{
|
|
16
|
+
type: Directive,
|
|
17
|
+
args: [{
|
|
18
|
+
selector: '[emrDataViewEmptyData]',
|
|
19
|
+
exportAs: 'emrDataViewEmptyData',
|
|
20
|
+
standalone: true,
|
|
21
|
+
host: {
|
|
22
|
+
'class': 'emr-data-view-empty-data',
|
|
23
|
+
}
|
|
24
|
+
}]
|
|
25
|
+
}] });
|
|
26
|
+
|
|
27
|
+
class DataViewEmptyFilterResultsDirective {
|
|
28
|
+
templateRef = inject(TemplateRef);
|
|
29
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: DataViewEmptyFilterResultsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
30
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.10", type: DataViewEmptyFilterResultsDirective, isStandalone: true, selector: "[emrDataViewEmptyFilterResults]", host: { classAttribute: "emr-data-view-empty-filter-results" }, exportAs: ["emrDataViewEmptyFilterResults"], ngImport: i0 });
|
|
31
|
+
}
|
|
32
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: DataViewEmptyFilterResultsDirective, decorators: [{
|
|
33
|
+
type: Directive,
|
|
34
|
+
args: [{
|
|
35
|
+
selector: '[emrDataViewEmptyFilterResults]',
|
|
36
|
+
exportAs: 'emrDataViewEmptyFilterResults',
|
|
37
|
+
standalone: true,
|
|
38
|
+
host: {
|
|
39
|
+
'class': 'emr-data-view-empty-filter-results',
|
|
40
|
+
}
|
|
41
|
+
}]
|
|
42
|
+
}] });
|
|
43
|
+
|
|
44
|
+
class DataViewActionBarDirective {
|
|
45
|
+
templateRef = inject(TemplateRef);
|
|
46
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: DataViewActionBarDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
47
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.3.10", type: DataViewActionBarDirective, isStandalone: true, selector: "[emrDataViewActionBar]", ngImport: i0 });
|
|
48
|
+
}
|
|
49
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: DataViewActionBarDirective, decorators: [{
|
|
50
|
+
type: Directive,
|
|
51
|
+
args: [{
|
|
52
|
+
selector: '[emrDataViewActionBar]',
|
|
53
|
+
standalone: true
|
|
54
|
+
}]
|
|
55
|
+
}] });
|
|
56
|
+
|
|
57
|
+
class DataViewComponent {
|
|
58
|
+
_cdr = inject(ChangeDetectorRef);
|
|
59
|
+
_elementRef = inject(ElementRef);
|
|
60
|
+
_renderer = inject(Renderer2);
|
|
61
|
+
_emptyDataRef = contentChild(DataViewEmptyDataDirective, ...(ngDevMode ? [{ debugName: "_emptyDataRef" }] : []));
|
|
62
|
+
_emptyFilterResults = contentChild(DataViewEmptyFilterResultsDirective, ...(ngDevMode ? [{ debugName: "_emptyFilterResults" }] : []));
|
|
63
|
+
_actionBarRef = contentChild(DataViewActionBarDirective, ...(ngDevMode ? [{ debugName: "_actionBarRef" }] : []));
|
|
64
|
+
_matTable = viewChild('table', ...(ngDevMode ? [{ debugName: "_matTable" }] : []));
|
|
65
|
+
_matSort = viewChild(MatSort, ...(ngDevMode ? [{ debugName: "_matSort" }] : []));
|
|
66
|
+
variant = input('list', ...(ngDevMode ? [{ debugName: "variant" }] : []));
|
|
67
|
+
paginator = input(...(ngDevMode ? [undefined, { debugName: "paginator" }] : []));
|
|
68
|
+
columnDefs = input([], ...(ngDevMode ? [{ debugName: "columnDefs" }] : []));
|
|
69
|
+
data = input([], ...(ngDevMode ? [{ debugName: "data" }] : []));
|
|
70
|
+
withSelection = input(false, ...(ngDevMode ? [{ debugName: "withSelection", transform: booleanAttribute }] : [{
|
|
71
|
+
transform: booleanAttribute
|
|
72
|
+
}]));
|
|
73
|
+
highlightHeader = input(false, ...(ngDevMode ? [{ debugName: "highlightHeader", transform: booleanAttribute }] : [{
|
|
74
|
+
transform: booleanAttribute
|
|
75
|
+
}]));
|
|
76
|
+
rowModelType = input('clientSide', ...(ngDevMode ? [{ debugName: "rowModelType" }] : []));
|
|
77
|
+
withSorting = input(false, ...(ngDevMode ? [{ debugName: "withSorting", transform: booleanAttribute }] : [{
|
|
78
|
+
transform: booleanAttribute
|
|
79
|
+
}]));
|
|
80
|
+
stickyHeader = input(false, ...(ngDevMode ? [{ debugName: "stickyHeader", transform: booleanAttribute }] : [{
|
|
81
|
+
transform: booleanAttribute
|
|
82
|
+
}]));
|
|
83
|
+
hoverRows = input(false, ...(ngDevMode ? [{ debugName: "hoverRows", transform: booleanAttribute }] : [{
|
|
84
|
+
transform: booleanAttribute
|
|
85
|
+
}]));
|
|
86
|
+
displayedColumns = computed(() => {
|
|
87
|
+
const displayedColumns = this
|
|
88
|
+
.columnDefs()
|
|
89
|
+
.filter(colDef => colDef.visible)
|
|
90
|
+
.map(colDef => colDef.dataField);
|
|
91
|
+
if (this.withSelection()) {
|
|
92
|
+
displayedColumns.unshift('selection');
|
|
93
|
+
}
|
|
94
|
+
return [...displayedColumns, '__actionBar'];
|
|
95
|
+
}, ...(ngDevMode ? [{ debugName: "displayedColumns" }] : []));
|
|
96
|
+
dataSource = computed(() => {
|
|
97
|
+
const dataSource = new MatTableDataSource(this.data());
|
|
98
|
+
if (this.paginator()) {
|
|
99
|
+
dataSource.paginator = this.paginator();
|
|
100
|
+
}
|
|
101
|
+
if (this.withSorting() && this.rowModelType() === 'clientSide') {
|
|
102
|
+
dataSource.sort = this._matSort();
|
|
103
|
+
}
|
|
104
|
+
dataSource.sortingDataAccessor = (item, property) => {
|
|
105
|
+
const columnDef = this.columnDefs().find(colDef => colDef.dataField === property);
|
|
106
|
+
if (columnDef) {
|
|
107
|
+
if (columnDef.valueGetter) {
|
|
108
|
+
return columnDef.valueGetter(item[property]);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
switch (property) {
|
|
112
|
+
default: {
|
|
113
|
+
return item[property];
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
return dataSource;
|
|
118
|
+
}, ...(ngDevMode ? [{ debugName: "dataSource" }] : []));
|
|
119
|
+
cellRenderers = input([], ...(ngDevMode ? [{ debugName: "cellRenderers" }] : []));
|
|
120
|
+
loading = input(false, ...(ngDevMode ? [{ debugName: "loading", transform: booleanAttribute }] : [{
|
|
121
|
+
transform: booleanAttribute
|
|
122
|
+
}]));
|
|
123
|
+
search = input('', ...(ngDevMode ? [{ debugName: "search" }] : []));
|
|
124
|
+
injector = inject(Injector);
|
|
125
|
+
selection = new SelectionModel(true, []);
|
|
126
|
+
cellRenderersMap = new Map();
|
|
127
|
+
loadingCellRenderers = false;
|
|
128
|
+
rowSelectionChanged = output();
|
|
129
|
+
selectionChanged = output();
|
|
130
|
+
allRowsSelectionChanged = output();
|
|
131
|
+
sortChange = output();
|
|
132
|
+
get api() {
|
|
133
|
+
return {
|
|
134
|
+
search: (value) => {
|
|
135
|
+
this.dataSource().filter = value.trim().toLowerCase();
|
|
136
|
+
},
|
|
137
|
+
selectAll: () => {
|
|
138
|
+
this._selectAll();
|
|
139
|
+
},
|
|
140
|
+
unselectAll: () => {
|
|
141
|
+
this._unselectAll();
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
get noFilteredResults() {
|
|
146
|
+
return !!(this._emptyDataRef() || this._emptyFilterResults()) &&
|
|
147
|
+
((this.dataSource().filteredData.length === 0 && this.rowModelType() === 'clientSide') ||
|
|
148
|
+
(this.dataSource().data.length === 0 && this.rowModelType() === 'serverSide'));
|
|
149
|
+
}
|
|
150
|
+
get actionBarTemplateRef() {
|
|
151
|
+
return this._actionBarRef()?.templateRef;
|
|
152
|
+
}
|
|
153
|
+
get emptyTemplateRef() {
|
|
154
|
+
return this._emptyDataRef()?.templateRef;
|
|
155
|
+
}
|
|
156
|
+
get emptyFilterResultsTemplateRef() {
|
|
157
|
+
return this._emptyFilterResults()?.templateRef;
|
|
158
|
+
}
|
|
159
|
+
get hasFilterValue() {
|
|
160
|
+
return !!this.search().trim();
|
|
161
|
+
}
|
|
162
|
+
constructor() {
|
|
163
|
+
effect(() => {
|
|
164
|
+
if (this.rowModelType() === 'clientSide') {
|
|
165
|
+
this.dataSource().filter = this.search().trim().toLowerCase();
|
|
166
|
+
}
|
|
167
|
+
this._renderer.setAttribute(this._elementRef.nativeElement, 'data-view-variant', this.variant());
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
ngOnInit() {
|
|
171
|
+
if (this.cellRenderers().length === 0) {
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
this.loadingCellRenderers = true;
|
|
175
|
+
const components = this.cellRenderers().map(cellRenderer => cellRenderer.component());
|
|
176
|
+
Promise.all(components).then(components => {
|
|
177
|
+
components.forEach((component, index) => {
|
|
178
|
+
this.cellRenderersMap.set(this.cellRenderers()[index].dataRenderer, component);
|
|
179
|
+
});
|
|
180
|
+
this.loadingCellRenderers = false;
|
|
181
|
+
this._cdr.detectChanges();
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
get matTable() {
|
|
185
|
+
return this._matTable();
|
|
186
|
+
}
|
|
187
|
+
get matSort() {
|
|
188
|
+
return this._matSort();
|
|
189
|
+
}
|
|
190
|
+
hasCellRenderer(dataRenderer) {
|
|
191
|
+
return this.cellRenderersMap.has(dataRenderer);
|
|
192
|
+
}
|
|
193
|
+
getCellRenderer(dataRenderer) {
|
|
194
|
+
return this.cellRenderersMap.get(dataRenderer);
|
|
195
|
+
}
|
|
196
|
+
isAllSelected() {
|
|
197
|
+
return this.selection.selected.length === this.data().length;
|
|
198
|
+
}
|
|
199
|
+
toggleAllRows() {
|
|
200
|
+
if (this.isAllSelected()) {
|
|
201
|
+
this._unselectAll();
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
this._selectAll();
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
rowSelectionToggle(event, row) {
|
|
208
|
+
if (event.checked) {
|
|
209
|
+
this.selection.select(row);
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
this.selection.deselect(row);
|
|
213
|
+
}
|
|
214
|
+
this.rowSelectionChanged.emit({
|
|
215
|
+
matCheckboxChange: event,
|
|
216
|
+
row,
|
|
217
|
+
checked: event.checked
|
|
218
|
+
});
|
|
219
|
+
this.selectionChanged.emit(this.selection.selected);
|
|
220
|
+
}
|
|
221
|
+
onSortChange(event) {
|
|
222
|
+
this.sortChange.emit(event);
|
|
223
|
+
}
|
|
224
|
+
_selectAll() {
|
|
225
|
+
this.selection.select(...this.data());
|
|
226
|
+
this.selectionChanged.emit(this.data());
|
|
227
|
+
this.allRowsSelectionChanged.emit(true);
|
|
228
|
+
}
|
|
229
|
+
_unselectAll() {
|
|
230
|
+
this.selection.clear();
|
|
231
|
+
this.selectionChanged.emit([]);
|
|
232
|
+
this.allRowsSelectionChanged.emit(false);
|
|
233
|
+
}
|
|
234
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: DataViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
235
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.10", type: DataViewComponent, isStandalone: true, selector: "emr-data-view", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, paginator: { classPropertyName: "paginator", publicName: "paginator", isSignal: true, isRequired: false, transformFunction: null }, columnDefs: { classPropertyName: "columnDefs", publicName: "columnDefs", isSignal: true, isRequired: false, transformFunction: null }, data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, withSelection: { classPropertyName: "withSelection", publicName: "withSelection", isSignal: true, isRequired: false, transformFunction: null }, highlightHeader: { classPropertyName: "highlightHeader", publicName: "highlightHeader", isSignal: true, isRequired: false, transformFunction: null }, rowModelType: { classPropertyName: "rowModelType", publicName: "rowModelType", isSignal: true, isRequired: false, transformFunction: null }, withSorting: { classPropertyName: "withSorting", publicName: "withSorting", isSignal: true, isRequired: false, transformFunction: null }, stickyHeader: { classPropertyName: "stickyHeader", publicName: "stickyHeader", isSignal: true, isRequired: false, transformFunction: null }, hoverRows: { classPropertyName: "hoverRows", publicName: "hoverRows", isSignal: true, isRequired: false, transformFunction: null }, cellRenderers: { classPropertyName: "cellRenderers", publicName: "cellRenderers", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, search: { classPropertyName: "search", publicName: "search", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { rowSelectionChanged: "rowSelectionChanged", selectionChanged: "selectionChanged", allRowsSelectionChanged: "allRowsSelectionChanged", sortChange: "sortChange" }, host: { properties: { "class.highlight-header": "highlightHeader()", "class.hover-rows": "hoverRows()", "class.is-loading": "loading()" }, classAttribute: "emr-data-view" }, queries: [{ propertyName: "_emptyDataRef", first: true, predicate: DataViewEmptyDataDirective, descendants: true, isSignal: true }, { propertyName: "_emptyFilterResults", first: true, predicate: DataViewEmptyFilterResultsDirective, descendants: true, isSignal: true }, { propertyName: "_actionBarRef", first: true, predicate: DataViewActionBarDirective, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "_matTable", first: true, predicate: ["table"], descendants: true, isSignal: true }, { propertyName: "_matSort", first: true, predicate: MatSort, descendants: true, isSignal: true }], exportAs: ["emrDataView"], ngImport: i0, template: "<emr-skeleton>\r\n <mat-table matSort\r\n [dataSource]=\"dataSource()\"\r\n [matSortDisabled]=\"!withSorting() || (loading() && rowModelType() === 'serverSide')\"\r\n (matSortChange)=\"onSortChange($event)\"\r\n class=\"table\"\r\n [class.hidden]=\"noFilteredResults\">\r\n @if (withSelection()) {\r\n <ng-container matColumnDef=\"selection\">\r\n <mat-header-cell *matHeaderCellDef>\r\n @if (loadingCellRenderers || loading()) {\r\n <emr-skeleton-block class=\"size-6\"/>\r\n } @else {\r\n <mat-checkbox (change)=\"$event ? toggleAllRows() : null\"\r\n [checked]=\"selection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n }\r\n </mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\">\r\n @if (loadingCellRenderers || loading()) {\r\n <emr-skeleton-block class=\"size-6 max-w-full\"/>\r\n } @else {\r\n <mat-checkbox (click)=\"$event.stopPropagation()\"\r\n (change)=\"rowSelectionToggle($event, row)\"\r\n [checked]=\"selection.isSelected(row)\">\r\n </mat-checkbox>\r\n }\r\n </mat-cell>\r\n </ng-container>\r\n }\r\n\r\n @for (columnDef of columnDefs(); track columnDef) {\r\n @if (columnDef.visible) {\r\n <ng-container [matColumnDef]=\"columnDef.dataField\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header class=\"header-cell\"\r\n [style.--emr-data-view-cell-width]=\"columnDef.width\">\r\n <div class=\"overflow-hidden w-full\">\r\n @if (loadingCellRenderers || loading()) {\r\n <emr-skeleton-line class=\"w-24 max-w-full\"/>\r\n } @else {\r\n {{ columnDef.name }}\r\n }\r\n </div>\r\n </mat-header-cell>\r\n <mat-cell *matCellDef=\"let element\" class=\"cell\"\r\n [style.--emr-data-view-cell-width]=\"columnDef.width\">\r\n <div class=\"overflow-hidden w-full\">\r\n @if (loadingCellRenderers || loading()) {\r\n <emr-skeleton-line/>\r\n } @else {\r\n @if (columnDef.dataRenderer && hasCellRenderer(columnDef.dataRenderer)) {\r\n <ng-container [ngComponentOutlet]=\"getCellRenderer(columnDef.dataRenderer)\"\r\n [ngComponentOutletInputs]=\"{ element, columnDef, fieldData: element[columnDef.dataField] }\"\r\n [ngComponentOutletInjector]=\"injector\"/>\r\n } @else {\r\n {{ element[columnDef.dataField] }}\r\n }\r\n }\r\n </div>\r\n </mat-cell>\r\n </ng-container>\r\n }\r\n }\r\n\r\n <ng-container matColumnDef=\"__actionBar\">\r\n <mat-header-cell *matHeaderCellDef class=\"header-cell-action-bar\"/>\r\n <mat-cell *matCellDef=\"let element\" class=\"cell-action-bar\">\r\n @if (actionBarTemplateRef) {\r\n <ng-container [ngTemplateOutlet]=\"actionBarTemplateRef\" [ngTemplateOutletContext]=\"{ $implicit: element }\"/>\r\n }\r\n </mat-cell>\r\n </ng-container>\r\n <mat-header-row *matHeaderRowDef=\"displayedColumns(); sticky: stickyHeader()\"/>\r\n <mat-row *matRowDef=\"let row; columns: displayedColumns()\" class=\"data-view-row\"\r\n [class.is-selected]=\"selection.isSelected(row)\"/>\r\n </mat-table>\r\n</emr-skeleton>\r\n\r\n@if (noFilteredResults) {\r\n @if (loading()) {\r\n <div class=\"flex flex-col items-center justify-center h-full\">\r\n <emr-skeleton-circle class=\"size-32\"/>\r\n <emr-skeleton-line class=\"w-1/2 mt-9\"/>\r\n <emr-skeleton-line class=\"w-1/3 h-4 mt-5\"/>\r\n </div>\r\n } @else {\r\n @if (hasFilterValue) {\r\n <ng-container [ngTemplateOutlet]=\"emptyFilterResultsTemplateRef\"/>\r\n } @else {\r\n <ng-container [ngTemplateOutlet]=\"emptyTemplateRef\"/>\r\n }\r\n }\r\n}\r\n", styles: [":host{--emr-data-view-row-bg: var(--color-background);--emr-data-view-hl-header-row-bg: var(--color-surface-container);--emr-data-view-hl-header-margin: calc(var(--spacing) * 1) 0;--emr-data-view-sticky-header-top: 0;--emr-data-view-selected-border-color: var(--color-primary);--emr-data-view-row-hover-bg: var(--color-surface-bright);--emr-data-view-bg: transparent;--mat-table-row-item-outline-width: 0;--mat-table-background-color: var(--emr-data-view-bg);--emr-content-fade-color: var(--emr-data-view-row-bg);--emr-data-view-header-bg: var(--color-background);display:flex;flex-direction:column;height:100%}:host mat-table{height:100%;padding-bottom:calc(var(--spacing) * 3)}:host ::ng-deep emr-block-state{--emr-block-state-padding: 0}:host ::ng-deep .mat-mdc-header-row{background:var(--emr-data-view-header-bg)}:host .mat-mdc-cell{background:var(--emr-data-view-row-bg)}:host .mat-mdc-cell.cell-action-bar{background:linear-gradient(to left,var(--emr-data-view-row-bg) 90%,transparent)}:host .emr-skeleton-block{z-index:1}:host .mdc-data-table__cell.mat-column-selection:first-child,:host .mdc-data-table__header-cell.mat-column-selection:first-child{max-width:calc(var(--spacing) * 16);padding:0;justify-content:center}:host .mat-mdc-header-cell{text-transform:uppercase;font-size:var(--text-xs);overflow:hidden}:host .mat-mdc-row.mdc-data-table__row{border:1px solid var(--color-border)!important;border-radius:.75rem;overflow:hidden;height:calc(var(--spacing) * 16)}:host .mat-mdc-row.mdc-data-table__row+.mdc-data-table__row{margin-top:calc(var(--spacing) * 4)}:host .mdc-data-table__row{position:relative}:host .mdc-data-table__row.is-selected{border-color:var(--emr-data-view-selected-border-color)!important}:host.hover-rows .data-view-row:hover .mat-mdc-cell{--emr-data-view-row-bg: var(--emr-data-view-row-hover-bg)}:host .data-view-row:hover .cell-action-bar{opacity:100%;z-index:1}:host.is-loading .data-view-row .cell-action-bar{display:none}:host ::ng-deep .header-cell,:host ::ng-deep .cell{min-width:var(--emr-data-view-cell-width, auto);max-width:var(--emr-data-view-cell-width, auto)}:host ::ng-deep .cell{padding-top:calc(var(--spacing) * 2);padding-bottom:calc(var(--spacing) * 2)}:host ::ng-deep .header-cell-action-bar,:host ::ng-deep .cell-action-bar{position:absolute;top:0;bottom:0;inset-inline-end:0;padding:0}:host ::ng-deep .header-cell-action-bar:not(:has(.force-visible)),:host ::ng-deep .cell-action-bar:not(:has(.force-visible)){opacity:0;z-index:-50}:host .mat-mdc-table .mat-mdc-header-cell{color:var(--sys-on-surface)}:host.highlight-header ::ng-deep .mat-mdc-header-row{position:relative;margin:var(--emr-data-view-hl-header-margin)}:host.highlight-header ::ng-deep .mat-mdc-header-row:before{content:\"\";position:absolute;left:0;right:0;background:var(--emr-data-view-hl-header-row-bg);height:calc(var(--spacing) * 10);border-radius:.5rem;z-index:0}:host.highlight-header ::ng-deep .mdc-data-table__header-cell{--emr-skeleton-from-bg: var(--color-neutral-300);--emr-skeleton-to-bg: var(--color-neutral-400)}:host.highlight-header ::ng-deep .mat-mdc-table .mat-mdc-header-cell{background:transparent;color:var(--text-neutral-700)}:host ::ng-deep .mat-sort-header{z-index:1;position:relative}:host ::ng-deep .mat-sort-header-stem{width:1px}:host ::ng-deep .mat-sort-header-pointer-left,:host ::ng-deep .mat-sort-header-pointer-right{height:1px}:host ::ng-deep .mat-sort-header-pointer-middle{width:1px;height:1px}:host[data-view-variant=table]{--emr-data-view-hl-header-margin: 0}:host[data-view-variant=table] .mat-mdc-header-row:before{height:calc(var(--spacing) * 12)}:host[data-view-variant=table] .mat-mdc-row.mdc-data-table__row{border:none!important;border-top:1px solid var(--color-border)!important;height:auto;border-radius:0}:host[data-view-variant=table] .mat-mdc-row.mdc-data-table__row+.mdc-data-table__row{margin-top:0}:host[data-view-variant=table].highlight-header .mat-mdc-row.mdc-data-table__row:first-of-type{border-top:none!important}:host-context(html.dark){--emr-data-view-row-hover-bg: var(--color-surface-container-low)}:host-context(html.dark) ::ng-deep .mdc-data-table__header-cell{--emr-skeleton-from-bg: var(--color-neutral-700);--emr-skeleton-to-bg: var(--color-neutral-800)}:host-context(html.dark) ::ng-deep .mat-mdc-table .mat-mdc-header-cell{color:var(--text-neutral-400)}\n/*! tailwindcss v4.1.14 | MIT License | https://tailwindcss.com */\n"], dependencies: [{ kind: "directive", type: MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "aria-expanded", "aria-controls", "aria-owns", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "directive", type: MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "component", type: MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "directive", type: MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "component", type: MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "component", type: MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"], exportAs: ["ngComponentOutlet"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: SkeletonBlockComponent, selector: "emr-skeleton-block", exportAs: ["emrSkeletonBlock"] }, { kind: "directive", type: MatCellDef, selector: "[matCellDef]" }, { kind: "component", type: SkeletonLineComponent, selector: "emr-skeleton-line", exportAs: ["emrSkeletonLine"] }, { kind: "component", type: SkeletonCircleComponent, selector: "emr-skeleton-circle", exportAs: ["emrSkeletonCircle"] }, { kind: "component", type: SkeletonComponent, selector: "emr-skeleton", inputs: ["direction"], exportAs: ["emrSkeleton"] }] });
|
|
236
|
+
}
|
|
237
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: DataViewComponent, decorators: [{
|
|
238
|
+
type: Component,
|
|
239
|
+
args: [{ selector: 'emr-data-view', exportAs: 'emrDataView', imports: [
|
|
240
|
+
MatCell,
|
|
241
|
+
MatCheckbox,
|
|
242
|
+
MatColumnDef,
|
|
243
|
+
MatHeaderCell,
|
|
244
|
+
MatHeaderRow,
|
|
245
|
+
MatHeaderRowDef,
|
|
246
|
+
MatRow,
|
|
247
|
+
MatRowDef,
|
|
248
|
+
MatTable,
|
|
249
|
+
MatHeaderCellDef,
|
|
250
|
+
MatSort,
|
|
251
|
+
MatSortHeader,
|
|
252
|
+
NgComponentOutlet,
|
|
253
|
+
NgTemplateOutlet,
|
|
254
|
+
SkeletonBlockComponent,
|
|
255
|
+
MatCellDef,
|
|
256
|
+
SkeletonLineComponent,
|
|
257
|
+
SkeletonCircleComponent,
|
|
258
|
+
SkeletonComponent,
|
|
259
|
+
], host: {
|
|
260
|
+
'class': 'emr-data-view',
|
|
261
|
+
'[class.highlight-header]': 'highlightHeader()',
|
|
262
|
+
'[class.hover-rows]': 'hoverRows()',
|
|
263
|
+
'[class.is-loading]': 'loading()',
|
|
264
|
+
}, template: "<emr-skeleton>\r\n <mat-table matSort\r\n [dataSource]=\"dataSource()\"\r\n [matSortDisabled]=\"!withSorting() || (loading() && rowModelType() === 'serverSide')\"\r\n (matSortChange)=\"onSortChange($event)\"\r\n class=\"table\"\r\n [class.hidden]=\"noFilteredResults\">\r\n @if (withSelection()) {\r\n <ng-container matColumnDef=\"selection\">\r\n <mat-header-cell *matHeaderCellDef>\r\n @if (loadingCellRenderers || loading()) {\r\n <emr-skeleton-block class=\"size-6\"/>\r\n } @else {\r\n <mat-checkbox (change)=\"$event ? toggleAllRows() : null\"\r\n [checked]=\"selection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n }\r\n </mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\">\r\n @if (loadingCellRenderers || loading()) {\r\n <emr-skeleton-block class=\"size-6 max-w-full\"/>\r\n } @else {\r\n <mat-checkbox (click)=\"$event.stopPropagation()\"\r\n (change)=\"rowSelectionToggle($event, row)\"\r\n [checked]=\"selection.isSelected(row)\">\r\n </mat-checkbox>\r\n }\r\n </mat-cell>\r\n </ng-container>\r\n }\r\n\r\n @for (columnDef of columnDefs(); track columnDef) {\r\n @if (columnDef.visible) {\r\n <ng-container [matColumnDef]=\"columnDef.dataField\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header class=\"header-cell\"\r\n [style.--emr-data-view-cell-width]=\"columnDef.width\">\r\n <div class=\"overflow-hidden w-full\">\r\n @if (loadingCellRenderers || loading()) {\r\n <emr-skeleton-line class=\"w-24 max-w-full\"/>\r\n } @else {\r\n {{ columnDef.name }}\r\n }\r\n </div>\r\n </mat-header-cell>\r\n <mat-cell *matCellDef=\"let element\" class=\"cell\"\r\n [style.--emr-data-view-cell-width]=\"columnDef.width\">\r\n <div class=\"overflow-hidden w-full\">\r\n @if (loadingCellRenderers || loading()) {\r\n <emr-skeleton-line/>\r\n } @else {\r\n @if (columnDef.dataRenderer && hasCellRenderer(columnDef.dataRenderer)) {\r\n <ng-container [ngComponentOutlet]=\"getCellRenderer(columnDef.dataRenderer)\"\r\n [ngComponentOutletInputs]=\"{ element, columnDef, fieldData: element[columnDef.dataField] }\"\r\n [ngComponentOutletInjector]=\"injector\"/>\r\n } @else {\r\n {{ element[columnDef.dataField] }}\r\n }\r\n }\r\n </div>\r\n </mat-cell>\r\n </ng-container>\r\n }\r\n }\r\n\r\n <ng-container matColumnDef=\"__actionBar\">\r\n <mat-header-cell *matHeaderCellDef class=\"header-cell-action-bar\"/>\r\n <mat-cell *matCellDef=\"let element\" class=\"cell-action-bar\">\r\n @if (actionBarTemplateRef) {\r\n <ng-container [ngTemplateOutlet]=\"actionBarTemplateRef\" [ngTemplateOutletContext]=\"{ $implicit: element }\"/>\r\n }\r\n </mat-cell>\r\n </ng-container>\r\n <mat-header-row *matHeaderRowDef=\"displayedColumns(); sticky: stickyHeader()\"/>\r\n <mat-row *matRowDef=\"let row; columns: displayedColumns()\" class=\"data-view-row\"\r\n [class.is-selected]=\"selection.isSelected(row)\"/>\r\n </mat-table>\r\n</emr-skeleton>\r\n\r\n@if (noFilteredResults) {\r\n @if (loading()) {\r\n <div class=\"flex flex-col items-center justify-center h-full\">\r\n <emr-skeleton-circle class=\"size-32\"/>\r\n <emr-skeleton-line class=\"w-1/2 mt-9\"/>\r\n <emr-skeleton-line class=\"w-1/3 h-4 mt-5\"/>\r\n </div>\r\n } @else {\r\n @if (hasFilterValue) {\r\n <ng-container [ngTemplateOutlet]=\"emptyFilterResultsTemplateRef\"/>\r\n } @else {\r\n <ng-container [ngTemplateOutlet]=\"emptyTemplateRef\"/>\r\n }\r\n }\r\n}\r\n", styles: [":host{--emr-data-view-row-bg: var(--color-background);--emr-data-view-hl-header-row-bg: var(--color-surface-container);--emr-data-view-hl-header-margin: calc(var(--spacing) * 1) 0;--emr-data-view-sticky-header-top: 0;--emr-data-view-selected-border-color: var(--color-primary);--emr-data-view-row-hover-bg: var(--color-surface-bright);--emr-data-view-bg: transparent;--mat-table-row-item-outline-width: 0;--mat-table-background-color: var(--emr-data-view-bg);--emr-content-fade-color: var(--emr-data-view-row-bg);--emr-data-view-header-bg: var(--color-background);display:flex;flex-direction:column;height:100%}:host mat-table{height:100%;padding-bottom:calc(var(--spacing) * 3)}:host ::ng-deep emr-block-state{--emr-block-state-padding: 0}:host ::ng-deep .mat-mdc-header-row{background:var(--emr-data-view-header-bg)}:host .mat-mdc-cell{background:var(--emr-data-view-row-bg)}:host .mat-mdc-cell.cell-action-bar{background:linear-gradient(to left,var(--emr-data-view-row-bg) 90%,transparent)}:host .emr-skeleton-block{z-index:1}:host .mdc-data-table__cell.mat-column-selection:first-child,:host .mdc-data-table__header-cell.mat-column-selection:first-child{max-width:calc(var(--spacing) * 16);padding:0;justify-content:center}:host .mat-mdc-header-cell{text-transform:uppercase;font-size:var(--text-xs);overflow:hidden}:host .mat-mdc-row.mdc-data-table__row{border:1px solid var(--color-border)!important;border-radius:.75rem;overflow:hidden;height:calc(var(--spacing) * 16)}:host .mat-mdc-row.mdc-data-table__row+.mdc-data-table__row{margin-top:calc(var(--spacing) * 4)}:host .mdc-data-table__row{position:relative}:host .mdc-data-table__row.is-selected{border-color:var(--emr-data-view-selected-border-color)!important}:host.hover-rows .data-view-row:hover .mat-mdc-cell{--emr-data-view-row-bg: var(--emr-data-view-row-hover-bg)}:host .data-view-row:hover .cell-action-bar{opacity:100%;z-index:1}:host.is-loading .data-view-row .cell-action-bar{display:none}:host ::ng-deep .header-cell,:host ::ng-deep .cell{min-width:var(--emr-data-view-cell-width, auto);max-width:var(--emr-data-view-cell-width, auto)}:host ::ng-deep .cell{padding-top:calc(var(--spacing) * 2);padding-bottom:calc(var(--spacing) * 2)}:host ::ng-deep .header-cell-action-bar,:host ::ng-deep .cell-action-bar{position:absolute;top:0;bottom:0;inset-inline-end:0;padding:0}:host ::ng-deep .header-cell-action-bar:not(:has(.force-visible)),:host ::ng-deep .cell-action-bar:not(:has(.force-visible)){opacity:0;z-index:-50}:host .mat-mdc-table .mat-mdc-header-cell{color:var(--sys-on-surface)}:host.highlight-header ::ng-deep .mat-mdc-header-row{position:relative;margin:var(--emr-data-view-hl-header-margin)}:host.highlight-header ::ng-deep .mat-mdc-header-row:before{content:\"\";position:absolute;left:0;right:0;background:var(--emr-data-view-hl-header-row-bg);height:calc(var(--spacing) * 10);border-radius:.5rem;z-index:0}:host.highlight-header ::ng-deep .mdc-data-table__header-cell{--emr-skeleton-from-bg: var(--color-neutral-300);--emr-skeleton-to-bg: var(--color-neutral-400)}:host.highlight-header ::ng-deep .mat-mdc-table .mat-mdc-header-cell{background:transparent;color:var(--text-neutral-700)}:host ::ng-deep .mat-sort-header{z-index:1;position:relative}:host ::ng-deep .mat-sort-header-stem{width:1px}:host ::ng-deep .mat-sort-header-pointer-left,:host ::ng-deep .mat-sort-header-pointer-right{height:1px}:host ::ng-deep .mat-sort-header-pointer-middle{width:1px;height:1px}:host[data-view-variant=table]{--emr-data-view-hl-header-margin: 0}:host[data-view-variant=table] .mat-mdc-header-row:before{height:calc(var(--spacing) * 12)}:host[data-view-variant=table] .mat-mdc-row.mdc-data-table__row{border:none!important;border-top:1px solid var(--color-border)!important;height:auto;border-radius:0}:host[data-view-variant=table] .mat-mdc-row.mdc-data-table__row+.mdc-data-table__row{margin-top:0}:host[data-view-variant=table].highlight-header .mat-mdc-row.mdc-data-table__row:first-of-type{border-top:none!important}:host-context(html.dark){--emr-data-view-row-hover-bg: var(--color-surface-container-low)}:host-context(html.dark) ::ng-deep .mdc-data-table__header-cell{--emr-skeleton-from-bg: var(--color-neutral-700);--emr-skeleton-to-bg: var(--color-neutral-800)}:host-context(html.dark) ::ng-deep .mat-mdc-table .mat-mdc-header-cell{color:var(--text-neutral-400)}\n/*! tailwindcss v4.1.14 | MIT License | https://tailwindcss.com */\n"] }]
|
|
265
|
+
}], ctorParameters: () => [], propDecorators: { _emptyDataRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => DataViewEmptyDataDirective), { isSignal: true }] }], _emptyFilterResults: [{ type: i0.ContentChild, args: [i0.forwardRef(() => DataViewEmptyFilterResultsDirective), { isSignal: true }] }], _actionBarRef: [{ type: i0.ContentChild, args: [i0.forwardRef(() => DataViewActionBarDirective), { isSignal: true }] }], _matTable: [{ type: i0.ViewChild, args: ['table', { isSignal: true }] }], _matSort: [{ type: i0.ViewChild, args: [i0.forwardRef(() => MatSort), { isSignal: true }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], paginator: [{ type: i0.Input, args: [{ isSignal: true, alias: "paginator", required: false }] }], columnDefs: [{ type: i0.Input, args: [{ isSignal: true, alias: "columnDefs", required: false }] }], data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], withSelection: [{ type: i0.Input, args: [{ isSignal: true, alias: "withSelection", required: false }] }], highlightHeader: [{ type: i0.Input, args: [{ isSignal: true, alias: "highlightHeader", required: false }] }], rowModelType: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowModelType", required: false }] }], withSorting: [{ type: i0.Input, args: [{ isSignal: true, alias: "withSorting", required: false }] }], stickyHeader: [{ type: i0.Input, args: [{ isSignal: true, alias: "stickyHeader", required: false }] }], hoverRows: [{ type: i0.Input, args: [{ isSignal: true, alias: "hoverRows", required: false }] }], cellRenderers: [{ type: i0.Input, args: [{ isSignal: true, alias: "cellRenderers", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], search: [{ type: i0.Input, args: [{ isSignal: true, alias: "search", required: false }] }], rowSelectionChanged: [{ type: i0.Output, args: ["rowSelectionChanged"] }], selectionChanged: [{ type: i0.Output, args: ["selectionChanged"] }], allRowsSelectionChanged: [{ type: i0.Output, args: ["allRowsSelectionChanged"] }], sortChange: [{ type: i0.Output, args: ["sortChange"] }] } });
|
|
266
|
+
|
|
267
|
+
class DataViewActionBarComponent {
|
|
268
|
+
forceVisible = input(false, ...(ngDevMode ? [{ debugName: "forceVisible", transform: booleanAttribute }] : [{
|
|
269
|
+
transform: booleanAttribute
|
|
270
|
+
}]));
|
|
271
|
+
_forceVisible = false;
|
|
272
|
+
get api() {
|
|
273
|
+
return {
|
|
274
|
+
setForceVisible: (forceVisible) => {
|
|
275
|
+
this._forceVisible = forceVisible;
|
|
276
|
+
},
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: DataViewActionBarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
280
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.10", type: DataViewActionBarComponent, isStandalone: true, selector: "emr-data-view-action-bar", inputs: { forceVisible: { classPropertyName: "forceVisible", publicName: "forceVisible", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class.force-visible": "forceVisible() || _forceVisible" }, classAttribute: "emr-data-view-action-bar" }, exportAs: ["emrDataViewActionBar"], ngImport: i0, template: "<ng-content/>\r\n", styles: [":host{height:100%;padding-inline-start:calc(var(--spacing) * 4);padding-inline-end:calc(var(--spacing) * 4);display:flex;align-items:center;gap:calc(var(--spacing) * 3);position:relative}\n/*! tailwindcss v4.1.14 | MIT License | https://tailwindcss.com */\n"] });
|
|
281
|
+
}
|
|
282
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.10", ngImport: i0, type: DataViewActionBarComponent, decorators: [{
|
|
283
|
+
type: Component,
|
|
284
|
+
args: [{ selector: 'emr-data-view-action-bar', exportAs: 'emrDataViewActionBar', host: {
|
|
285
|
+
'class': 'emr-data-view-action-bar',
|
|
286
|
+
'[class.force-visible]': 'forceVisible() || _forceVisible'
|
|
287
|
+
}, template: "<ng-content/>\r\n", styles: [":host{height:100%;padding-inline-start:calc(var(--spacing) * 4);padding-inline-end:calc(var(--spacing) * 4);display:flex;align-items:center;gap:calc(var(--spacing) * 3);position:relative}\n/*! tailwindcss v4.1.14 | MIT License | https://tailwindcss.com */\n"] }]
|
|
288
|
+
}], propDecorators: { forceVisible: [{ type: i0.Input, args: [{ isSignal: true, alias: "forceVisible", required: false }] }] } });
|
|
289
|
+
|
|
290
|
+
function cellRenderer(dataRenderer, component) {
|
|
291
|
+
return {
|
|
292
|
+
dataRenderer,
|
|
293
|
+
component
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/**
|
|
298
|
+
* Generated bundle index. Do not edit.
|
|
299
|
+
*/
|
|
300
|
+
|
|
301
|
+
export { DataViewActionBarComponent, DataViewActionBarDirective, DataViewComponent, DataViewEmptyDataDirective, DataViewEmptyFilterResultsDirective, cellRenderer };
|
|
302
|
+
//# sourceMappingURL=elementar-rt-components-data-view.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"elementar-rt-components-data-view.mjs","sources":["../../../projects/components/data-view/src/data-view-empty-data.directive.ts","../../../projects/components/data-view/src/data-view-empty-filter-results.directive.ts","../../../projects/components/data-view/src/data-view-action-bar.directive.ts","../../../projects/components/data-view/src/data-view/data-view.component.ts","../../../projects/components/data-view/src/data-view/data-view.component.html","../../../projects/components/data-view/src/data-view-action-bar/data-view-action-bar.component.ts","../../../projects/components/data-view/src/data-view-action-bar/data-view-action-bar.component.html","../../../projects/components/data-view/src/cell-renderer.ts","../../../projects/components/data-view/elementar-rt-components-data-view.ts"],"sourcesContent":["import { Directive, inject, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[emrDataViewEmptyData]',\r\n exportAs: 'emrDataViewEmptyData',\r\n standalone: true,\r\n host: {\r\n 'class': 'emr-data-view-empty-data',\r\n }\r\n})\r\nexport class DataViewEmptyDataDirective {\r\n readonly templateRef = inject(TemplateRef);\r\n}\r\n","import { Directive, inject, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[emrDataViewEmptyFilterResults]',\r\n exportAs: 'emrDataViewEmptyFilterResults',\r\n standalone: true,\r\n host: {\r\n 'class': 'emr-data-view-empty-filter-results',\r\n }\r\n})\r\nexport class DataViewEmptyFilterResultsDirective {\r\n readonly templateRef = inject(TemplateRef);\r\n}\r\n","import { Directive, inject, TemplateRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[emrDataViewActionBar]',\r\n standalone: true\r\n})\r\nexport class DataViewActionBarDirective {\r\n readonly templateRef = inject(TemplateRef);\r\n}\r\n","import {\r\n booleanAttribute,\r\n ChangeDetectorRef,\r\n Component,\r\n computed, contentChild, effect, ElementRef,\r\n inject, Injector,\r\n input,\r\n OnInit,\r\n output, Renderer2, TemplateRef,\r\n viewChild\r\n} from '@angular/core';\r\nimport {\r\n MatCell,\r\n MatCellDef,\r\n MatColumnDef,\r\n MatHeaderCell, MatHeaderCellDef,\r\n MatHeaderRow,\r\n MatHeaderRowDef, MatRow, MatRowDef, MatTable, MatTableDataSource\r\n} from '@angular/material/table';\r\nimport { MatCheckbox, MatCheckboxChange } from '@angular/material/checkbox';\r\nimport {\r\n DataView,\r\n DataViewAPI,\r\n DataViewCellRenderer,\r\n DataViewColumnDef, DataViewRowModelType,\r\n DataViewRowSelectionEvent\r\n} from '../types';\r\nimport { SelectionModel } from '@angular/cdk/collections';\r\nimport { MatPaginator } from '@angular/material/paginator';\r\nimport { MatSort, MatSortHeader, Sort } from '@angular/material/sort';\r\nimport { NgComponentOutlet, NgTemplateOutlet } from '@angular/common';\r\nimport {\r\n SkeletonBlockComponent,\r\n SkeletonCircleComponent,\r\n SkeletonComponent,\r\n SkeletonLineComponent\r\n} from '@elementar-rt/components/skeleton';\r\nimport { DataViewEmptyDataDirective } from '../data-view-empty-data.directive';\r\nimport { DataViewEmptyFilterResultsDirective } from '../data-view-empty-filter-results.directive';\r\nimport { DataViewActionBarDirective } from '../data-view-action-bar.directive';\r\n\r\n@Component({\r\n selector: 'emr-data-view',\r\n exportAs: 'emrDataView',\r\n imports: [\r\n MatCell,\r\n MatCheckbox,\r\n MatColumnDef,\r\n MatHeaderCell,\r\n MatHeaderRow,\r\n MatHeaderRowDef,\r\n MatRow,\r\n MatRowDef,\r\n MatTable,\r\n MatHeaderCellDef,\r\n MatSort,\r\n MatSortHeader,\r\n NgComponentOutlet,\r\n NgTemplateOutlet,\r\n SkeletonBlockComponent,\r\n MatCellDef,\r\n SkeletonLineComponent,\r\n SkeletonCircleComponent,\r\n SkeletonComponent,\r\n ],\r\n templateUrl: './data-view.component.html',\r\n styleUrl: './data-view.component.scss',\r\n host: {\r\n 'class': 'emr-data-view',\r\n '[class.highlight-header]': 'highlightHeader()',\r\n '[class.hover-rows]': 'hoverRows()',\r\n '[class.is-loading]': 'loading()',\r\n }\r\n})\r\nexport class DataViewComponent<T> implements OnInit, DataView {\r\n private _cdr = inject(ChangeDetectorRef);\r\n private _elementRef = inject(ElementRef);\r\n private _renderer = inject(Renderer2);\r\n\r\n protected _emptyDataRef = contentChild(DataViewEmptyDataDirective);\r\n protected _emptyFilterResults = contentChild(DataViewEmptyFilterResultsDirective);\r\n protected _actionBarRef = contentChild<DataViewActionBarDirective>(DataViewActionBarDirective);\r\n private _matTable = viewChild<MatTable<T>>('table');\r\n private _matSort = viewChild<MatSort>(MatSort);\r\n\r\n variant = input<string>('list');\r\n paginator = input<MatPaginator>();\r\n columnDefs = input<DataViewColumnDef[]>([]);\r\n data = input<T[]>([]);\r\n withSelection = input(false, {\r\n transform: booleanAttribute\r\n });\r\n highlightHeader = input(false, {\r\n transform: booleanAttribute\r\n });\r\n rowModelType = input<DataViewRowModelType>('clientSide');\r\n withSorting = input(false, {\r\n transform: booleanAttribute\r\n });\r\n stickyHeader = input(false, {\r\n transform: booleanAttribute\r\n });\r\n hoverRows = input(false, {\r\n transform: booleanAttribute\r\n });\r\n displayedColumns = computed((): string[] => {\r\n const displayedColumns = this\r\n .columnDefs()\r\n .filter(colDef => colDef.visible)\r\n .map(colDef => colDef.dataField)\r\n ;\r\n\r\n if (this.withSelection()) {\r\n displayedColumns.unshift('selection');\r\n }\r\n\r\n return [...displayedColumns, '__actionBar'];\r\n });\r\n dataSource = computed((): MatTableDataSource<T> => {\r\n const dataSource = new MatTableDataSource<T>(this.data());\r\n\r\n if (this.paginator()) {\r\n dataSource.paginator = this.paginator() as MatPaginator;\r\n }\r\n\r\n if (this.withSorting() && this.rowModelType() === 'clientSide') {\r\n dataSource.sort = this._matSort() as MatSort;\r\n }\r\n\r\n dataSource.sortingDataAccessor = (item: any, property) => {\r\n const columnDef = this.columnDefs().find(colDef => colDef.dataField === property);\r\n\r\n if (columnDef) {\r\n if (columnDef.valueGetter) {\r\n return columnDef.valueGetter(item[property]);\r\n }\r\n }\r\n\r\n switch (property) {\r\n default: {\r\n return item[property];\r\n }\r\n }\r\n };\r\n\r\n return dataSource;\r\n });\r\n cellRenderers = input<DataViewCellRenderer[]>([]);\r\n loading = input(false, {\r\n transform: booleanAttribute\r\n });\r\n search = input<string>('');\r\n\r\n protected injector = inject(Injector);\r\n protected selection = new SelectionModel<T>(true, []);\r\n protected cellRenderersMap = new Map<string, any>();\r\n protected loadingCellRenderers = false;\r\n\r\n readonly rowSelectionChanged = output<DataViewRowSelectionEvent<T>>();\r\n readonly selectionChanged = output<T[]>();\r\n readonly allRowsSelectionChanged = output<boolean>();\r\n readonly sortChange = output<Sort>();\r\n\r\n get api(): DataViewAPI {\r\n return {\r\n search: (value: string): void => {\r\n this.dataSource().filter = value.trim().toLowerCase();\r\n },\r\n selectAll: (): void => {\r\n this._selectAll();\r\n },\r\n unselectAll: (): void => {\r\n this._unselectAll();\r\n }\r\n }\r\n }\r\n\r\n get noFilteredResults(): boolean {\r\n return !!(this._emptyDataRef() || this._emptyFilterResults()) &&\r\n ((this.dataSource().filteredData.length === 0 && this.rowModelType() === 'clientSide') ||\r\n (this.dataSource().data.length === 0 && this.rowModelType() === 'serverSide'))\r\n ;\r\n }\r\n\r\n get actionBarTemplateRef(): TemplateRef<any> | undefined {\r\n return this._actionBarRef()?.templateRef;\r\n }\r\n\r\n protected get emptyTemplateRef(): TemplateRef<any> {\r\n return this._emptyDataRef()?.templateRef as TemplateRef<any>;\r\n }\r\n\r\n protected get emptyFilterResultsTemplateRef(): TemplateRef<any> {\r\n return this._emptyFilterResults()?.templateRef as TemplateRef<any>;\r\n }\r\n\r\n protected get hasFilterValue(): boolean {\r\n return !!this.search().trim();\r\n }\r\n\r\n constructor() {\r\n effect(() => {\r\n if (this.rowModelType() === 'clientSide') {\r\n this.dataSource().filter = this.search().trim().toLowerCase();\r\n }\r\n\r\n this._renderer.setAttribute(this._elementRef.nativeElement, 'data-view-variant', this.variant());\r\n });\r\n }\r\n\r\n ngOnInit() {\r\n if (this.cellRenderers().length === 0) {\r\n return;\r\n }\r\n\r\n this.loadingCellRenderers = true;\r\n const components = this.cellRenderers().map(cellRenderer => cellRenderer.component());\r\n Promise.all(components).then(components => {\r\n components.forEach((component, index: number) => {\r\n this.cellRenderersMap.set(this.cellRenderers()[index].dataRenderer, component)\r\n });\r\n this.loadingCellRenderers = false;\r\n this._cdr.detectChanges();\r\n });\r\n }\r\n\r\n get matTable(): MatTable<T> {\r\n return this._matTable() as MatTable<T>;\r\n }\r\n\r\n get matSort(): MatSort {\r\n return this._matSort() as MatSort;\r\n }\r\n\r\n hasCellRenderer(dataRenderer: string): boolean {\r\n return this.cellRenderersMap.has(dataRenderer);\r\n }\r\n\r\n getCellRenderer(dataRenderer: string): any {\r\n return this.cellRenderersMap.get(dataRenderer);\r\n }\r\n\r\n isAllSelected(): boolean {\r\n return this.selection.selected.length === this.data().length;\r\n }\r\n\r\n toggleAllRows(): void {\r\n if (this.isAllSelected()) {\r\n this._unselectAll();\r\n } else {\r\n this._selectAll();\r\n }\r\n }\r\n\r\n rowSelectionToggle(event: MatCheckboxChange, row: T): void {\r\n if (event.checked) {\r\n this.selection.select(row);\r\n } else {\r\n this.selection.deselect(row);\r\n }\r\n\r\n this.rowSelectionChanged.emit({\r\n matCheckboxChange: event,\r\n row,\r\n checked: event.checked\r\n });\r\n this.selectionChanged.emit(this.selection.selected);\r\n }\r\n\r\n protected onSortChange(event: Sort): void {\r\n this.sortChange.emit(event);\r\n }\r\n\r\n private _selectAll(): void {\r\n this.selection.select(...this.data());\r\n this.selectionChanged.emit(this.data());\r\n this.allRowsSelectionChanged.emit(true);\r\n }\r\n\r\n private _unselectAll(): void {\r\n this.selection.clear();\r\n this.selectionChanged.emit([]);\r\n this.allRowsSelectionChanged.emit(false);\r\n }\r\n}\r\n","<emr-skeleton>\r\n <mat-table matSort\r\n [dataSource]=\"dataSource()\"\r\n [matSortDisabled]=\"!withSorting() || (loading() && rowModelType() === 'serverSide')\"\r\n (matSortChange)=\"onSortChange($event)\"\r\n class=\"table\"\r\n [class.hidden]=\"noFilteredResults\">\r\n @if (withSelection()) {\r\n <ng-container matColumnDef=\"selection\">\r\n <mat-header-cell *matHeaderCellDef>\r\n @if (loadingCellRenderers || loading()) {\r\n <emr-skeleton-block class=\"size-6\"/>\r\n } @else {\r\n <mat-checkbox (change)=\"$event ? toggleAllRows() : null\"\r\n [checked]=\"selection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\">\r\n </mat-checkbox>\r\n }\r\n </mat-header-cell>\r\n <mat-cell *matCellDef=\"let row\">\r\n @if (loadingCellRenderers || loading()) {\r\n <emr-skeleton-block class=\"size-6 max-w-full\"/>\r\n } @else {\r\n <mat-checkbox (click)=\"$event.stopPropagation()\"\r\n (change)=\"rowSelectionToggle($event, row)\"\r\n [checked]=\"selection.isSelected(row)\">\r\n </mat-checkbox>\r\n }\r\n </mat-cell>\r\n </ng-container>\r\n }\r\n\r\n @for (columnDef of columnDefs(); track columnDef) {\r\n @if (columnDef.visible) {\r\n <ng-container [matColumnDef]=\"columnDef.dataField\">\r\n <mat-header-cell *matHeaderCellDef mat-sort-header class=\"header-cell\"\r\n [style.--emr-data-view-cell-width]=\"columnDef.width\">\r\n <div class=\"overflow-hidden w-full\">\r\n @if (loadingCellRenderers || loading()) {\r\n <emr-skeleton-line class=\"w-24 max-w-full\"/>\r\n } @else {\r\n {{ columnDef.name }}\r\n }\r\n </div>\r\n </mat-header-cell>\r\n <mat-cell *matCellDef=\"let element\" class=\"cell\"\r\n [style.--emr-data-view-cell-width]=\"columnDef.width\">\r\n <div class=\"overflow-hidden w-full\">\r\n @if (loadingCellRenderers || loading()) {\r\n <emr-skeleton-line/>\r\n } @else {\r\n @if (columnDef.dataRenderer && hasCellRenderer(columnDef.dataRenderer)) {\r\n <ng-container [ngComponentOutlet]=\"getCellRenderer(columnDef.dataRenderer)\"\r\n [ngComponentOutletInputs]=\"{ element, columnDef, fieldData: element[columnDef.dataField] }\"\r\n [ngComponentOutletInjector]=\"injector\"/>\r\n } @else {\r\n {{ element[columnDef.dataField] }}\r\n }\r\n }\r\n </div>\r\n </mat-cell>\r\n </ng-container>\r\n }\r\n }\r\n\r\n <ng-container matColumnDef=\"__actionBar\">\r\n <mat-header-cell *matHeaderCellDef class=\"header-cell-action-bar\"/>\r\n <mat-cell *matCellDef=\"let element\" class=\"cell-action-bar\">\r\n @if (actionBarTemplateRef) {\r\n <ng-container [ngTemplateOutlet]=\"actionBarTemplateRef\" [ngTemplateOutletContext]=\"{ $implicit: element }\"/>\r\n }\r\n </mat-cell>\r\n </ng-container>\r\n <mat-header-row *matHeaderRowDef=\"displayedColumns(); sticky: stickyHeader()\"/>\r\n <mat-row *matRowDef=\"let row; columns: displayedColumns()\" class=\"data-view-row\"\r\n [class.is-selected]=\"selection.isSelected(row)\"/>\r\n </mat-table>\r\n</emr-skeleton>\r\n\r\n@if (noFilteredResults) {\r\n @if (loading()) {\r\n <div class=\"flex flex-col items-center justify-center h-full\">\r\n <emr-skeleton-circle class=\"size-32\"/>\r\n <emr-skeleton-line class=\"w-1/2 mt-9\"/>\r\n <emr-skeleton-line class=\"w-1/3 h-4 mt-5\"/>\r\n </div>\r\n } @else {\r\n @if (hasFilterValue) {\r\n <ng-container [ngTemplateOutlet]=\"emptyFilterResultsTemplateRef\"/>\r\n } @else {\r\n <ng-container [ngTemplateOutlet]=\"emptyTemplateRef\"/>\r\n }\r\n }\r\n}\r\n","import { booleanAttribute, Component, input } from '@angular/core';\r\nimport { DataViewActionBarAPI } from '../types';\r\n\r\n@Component({\r\n selector: 'emr-data-view-action-bar',\r\n exportAs: 'emrDataViewActionBar',\r\n templateUrl: './data-view-action-bar.component.html',\r\n styleUrl: './data-view-action-bar.component.scss',\r\n host: {\r\n 'class': 'emr-data-view-action-bar',\r\n '[class.force-visible]': 'forceVisible() || _forceVisible'\r\n }\r\n})\r\nexport class DataViewActionBarComponent {\r\n forceVisible = input(false, {\r\n transform: booleanAttribute\r\n });\r\n protected _forceVisible = false;\r\n\r\n get api(): DataViewActionBarAPI {\r\n return {\r\n setForceVisible: (forceVisible: boolean): void => {\r\n this._forceVisible = forceVisible;\r\n },\r\n }\r\n }\r\n}\r\n","<ng-content/>\r\n","import { DataViewCellRenderer } from './types';\r\n\r\nexport function cellRenderer<T>(dataRenderer: string, component: any): DataViewCellRenderer {\r\n return {\r\n dataRenderer,\r\n component\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|