@acorex/components 19.8.0-next.2 → 19.8.0-next.21
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/action-sheet/lib/action-sheet.class.d.ts +1 -2
- package/avatar/lib/avatar.component.d.ts +3 -2
- package/badge/lib/badge.component.d.ts +2 -2
- package/button/lib/button.component.d.ts +1 -6
- package/button-group/lib/button-group-item.component.d.ts +3 -1
- package/button-group/lib/button-group.component.d.ts +1 -0
- package/button-group/lib/button-group.module.d.ts +2 -1
- package/chips/lib/chips.component.d.ts +11 -7
- package/color-box/lib/color-box.component.d.ts +5 -1
- package/color-palette/lib/color-palette-picker.component.d.ts +19 -14
- package/color-palette/lib/color-palette.module.d.ts +2 -1
- package/common/lib/classes/styles.class.d.ts +6 -4
- package/common/lib/components/button-base-component.class.d.ts +0 -1
- package/conversation/lib/conversation-input/conversation-input.component.d.ts +3 -2
- package/conversation/lib/conversation-message/conversation-message.component.d.ts +2 -1
- package/conversation/lib/conversation-view/conversation-view.component.d.ts +3 -1
- package/datetime-picker/lib/datetime-picker.component.d.ts +0 -10
- package/datetime-picker/lib/datetime-picker.module.d.ts +2 -1
- package/decorators/index.d.ts +5 -4
- package/decorators/lib/components/color-indicator/color-indicator.component.d.ts +6 -0
- package/decorators/lib/decorators.module.d.ts +7 -6
- package/dialog/lib/dialog.component.d.ts +2 -0
- package/dropdown-button/lib/dropdown-button.component.d.ts +1 -1
- package/fesm2022/acorex-components-action-sheet.mjs +4 -4
- package/fesm2022/acorex-components-action-sheet.mjs.map +1 -1
- package/fesm2022/acorex-components-alert.mjs +4 -4
- package/fesm2022/acorex-components-alert.mjs.map +1 -1
- package/fesm2022/acorex-components-audio-wave.mjs +5 -5
- package/fesm2022/acorex-components-audio-wave.mjs.map +1 -1
- package/fesm2022/acorex-components-avatar.mjs +6 -5
- package/fesm2022/acorex-components-avatar.mjs.map +1 -1
- package/fesm2022/acorex-components-badge.mjs +6 -6
- package/fesm2022/acorex-components-badge.mjs.map +1 -1
- package/fesm2022/acorex-components-bottom-navigation.mjs +3 -3
- package/fesm2022/acorex-components-bottom-navigation.mjs.map +1 -1
- package/fesm2022/acorex-components-breadcrumbs.mjs +3 -3
- package/fesm2022/acorex-components-breadcrumbs.mjs.map +1 -1
- package/fesm2022/acorex-components-button-group.mjs +169 -156
- package/fesm2022/acorex-components-button-group.mjs.map +1 -1
- package/fesm2022/acorex-components-button.mjs +19 -22
- package/fesm2022/acorex-components-button.mjs.map +1 -1
- package/fesm2022/acorex-components-calendar.mjs +5 -5
- package/fesm2022/acorex-components-calendar.mjs.map +1 -1
- package/fesm2022/acorex-components-check-box.mjs +3 -3
- package/fesm2022/acorex-components-check-box.mjs.map +1 -1
- package/fesm2022/acorex-components-chips.mjs +12 -10
- package/fesm2022/acorex-components-chips.mjs.map +1 -1
- package/fesm2022/acorex-components-circular-progress.mjs +7 -7
- package/fesm2022/acorex-components-circular-progress.mjs.map +1 -1
- package/fesm2022/acorex-components-collapse.mjs +4 -4
- package/fesm2022/acorex-components-collapse.mjs.map +1 -1
- package/fesm2022/acorex-components-color-box.mjs +11 -4
- package/fesm2022/acorex-components-color-box.mjs.map +1 -1
- package/fesm2022/acorex-components-color-palette.mjs +344 -326
- package/fesm2022/acorex-components-color-palette.mjs.map +1 -1
- package/fesm2022/acorex-components-comment.mjs +9 -9
- package/fesm2022/acorex-components-comment.mjs.map +1 -1
- package/fesm2022/acorex-components-common.mjs +22 -7
- package/fesm2022/acorex-components-common.mjs.map +1 -1
- package/fesm2022/acorex-components-conversation.mjs +27 -23
- package/fesm2022/acorex-components-conversation.mjs.map +1 -1
- package/fesm2022/acorex-components-cron-job.mjs +3 -3
- package/fesm2022/acorex-components-cron-job.mjs.map +1 -1
- package/fesm2022/acorex-components-data-pager.mjs +27 -29
- package/fesm2022/acorex-components-data-pager.mjs.map +1 -1
- package/fesm2022/acorex-components-data-table.mjs +5 -5
- package/fesm2022/acorex-components-data-table.mjs.map +1 -1
- package/fesm2022/acorex-components-datetime-box.mjs +3 -4
- package/fesm2022/acorex-components-datetime-box.mjs.map +1 -1
- package/fesm2022/acorex-components-datetime-input.mjs +3 -3
- package/fesm2022/acorex-components-datetime-input.mjs.map +1 -1
- package/fesm2022/acorex-components-datetime-picker.mjs +18 -24
- package/fesm2022/acorex-components-datetime-picker.mjs.map +1 -1
- package/fesm2022/acorex-components-decorators.mjs +30 -18
- package/fesm2022/acorex-components-decorators.mjs.map +1 -1
- package/fesm2022/acorex-components-dialog.mjs +11 -4
- package/fesm2022/acorex-components-dialog.mjs.map +1 -1
- package/fesm2022/acorex-components-drawer.mjs +6 -6
- package/fesm2022/acorex-components-drawer.mjs.map +1 -1
- package/fesm2022/acorex-components-dropdown-button.mjs +7 -13
- package/fesm2022/acorex-components-dropdown-button.mjs.map +1 -1
- package/fesm2022/acorex-components-dropdown.mjs +4 -4
- package/fesm2022/acorex-components-dropdown.mjs.map +1 -1
- package/fesm2022/acorex-components-form.mjs +11 -4
- package/fesm2022/acorex-components-form.mjs.map +1 -1
- package/fesm2022/acorex-components-grid-layout-builder.mjs +3 -3
- package/fesm2022/acorex-components-grid-layout-builder.mjs.map +1 -1
- package/fesm2022/acorex-components-image-editor.mjs +42 -57
- package/fesm2022/acorex-components-image-editor.mjs.map +1 -1
- package/fesm2022/acorex-components-image.mjs +3 -3
- package/fesm2022/acorex-components-image.mjs.map +1 -1
- package/fesm2022/acorex-components-json-viewer.mjs +3 -3
- package/fesm2022/acorex-components-json-viewer.mjs.map +1 -1
- package/fesm2022/acorex-components-kbd.mjs +56 -0
- package/fesm2022/acorex-components-kbd.mjs.map +1 -0
- package/fesm2022/acorex-components-label.mjs +3 -3
- package/fesm2022/acorex-components-label.mjs.map +1 -1
- package/fesm2022/acorex-components-list.mjs +3 -3
- package/fesm2022/acorex-components-list.mjs.map +1 -1
- package/fesm2022/acorex-components-loading-dialog.mjs +3 -3
- package/fesm2022/acorex-components-loading-dialog.mjs.map +1 -1
- package/fesm2022/acorex-components-loading.mjs +5 -5
- package/fesm2022/acorex-components-loading.mjs.map +1 -1
- package/fesm2022/acorex-components-map.mjs +1 -1
- package/fesm2022/acorex-components-media-viewer.mjs +5 -5
- package/fesm2022/acorex-components-media-viewer.mjs.map +1 -1
- package/fesm2022/acorex-components-menu.mjs +7 -7
- package/fesm2022/acorex-components-menu.mjs.map +1 -1
- package/fesm2022/acorex-components-navbar.mjs +4 -4
- package/fesm2022/acorex-components-navbar.mjs.map +1 -1
- package/fesm2022/acorex-components-notification.mjs +5 -5
- package/fesm2022/acorex-components-notification.mjs.map +1 -1
- package/fesm2022/acorex-components-number-box.mjs +3 -7
- package/fesm2022/acorex-components-number-box.mjs.map +1 -1
- package/fesm2022/acorex-components-otp.mjs +3 -3
- package/fesm2022/acorex-components-otp.mjs.map +1 -1
- package/fesm2022/acorex-components-page.mjs +1 -1
- package/fesm2022/acorex-components-paint.mjs +11 -11
- package/fesm2022/acorex-components-paint.mjs.map +1 -1
- package/fesm2022/acorex-components-password-box.mjs +5 -5
- package/fesm2022/acorex-components-password-box.mjs.map +1 -1
- package/fesm2022/acorex-components-pdf-reader.mjs +1 -1
- package/fesm2022/acorex-components-phone-box.mjs +3 -3
- package/fesm2022/acorex-components-phone-box.mjs.map +1 -1
- package/fesm2022/acorex-components-picker.mjs +128 -233
- package/fesm2022/acorex-components-picker.mjs.map +1 -1
- package/fesm2022/acorex-components-popover.mjs +1 -1
- package/fesm2022/acorex-components-popup.mjs +3 -3
- package/fesm2022/acorex-components-popup.mjs.map +1 -1
- package/fesm2022/acorex-components-progress-bar.mjs +23 -23
- package/fesm2022/acorex-components-progress-bar.mjs.map +1 -1
- package/fesm2022/acorex-components-qrcode.mjs +1 -1
- package/fesm2022/acorex-components-radio.mjs +1 -1
- package/fesm2022/acorex-components-rail-navigation.mjs +4 -4
- package/fesm2022/acorex-components-rail-navigation.mjs.map +1 -1
- package/fesm2022/acorex-components-range-slider.mjs +4 -4
- package/fesm2022/acorex-components-range-slider.mjs.map +1 -1
- package/fesm2022/acorex-components-rate-picker.mjs +7 -7
- package/fesm2022/acorex-components-rate-picker.mjs.map +1 -1
- package/fesm2022/acorex-components-result.mjs +3 -3
- package/fesm2022/acorex-components-result.mjs.map +1 -1
- package/fesm2022/acorex-components-routing-progress.mjs +3 -3
- package/fesm2022/acorex-components-routing-progress.mjs.map +1 -1
- package/fesm2022/acorex-components-scheduler.mjs +12 -12
- package/fesm2022/acorex-components-scheduler.mjs.map +1 -1
- package/fesm2022/acorex-components-search-box.mjs +20 -11
- package/fesm2022/acorex-components-search-box.mjs.map +1 -1
- package/fesm2022/acorex-components-select-box.mjs +4 -3
- package/fesm2022/acorex-components-select-box.mjs.map +1 -1
- package/fesm2022/acorex-components-selection-list.mjs +4 -4
- package/fesm2022/acorex-components-selection-list.mjs.map +1 -1
- package/fesm2022/acorex-components-side-menu.mjs +9 -18
- package/fesm2022/acorex-components-side-menu.mjs.map +1 -1
- package/fesm2022/acorex-components-skeleton.mjs +3 -3
- package/fesm2022/acorex-components-skeleton.mjs.map +1 -1
- package/fesm2022/acorex-components-slider.mjs +3 -3
- package/fesm2022/acorex-components-slider.mjs.map +1 -1
- package/fesm2022/acorex-components-step-wizard.mjs +3 -3
- package/fesm2022/acorex-components-step-wizard.mjs.map +1 -1
- package/fesm2022/acorex-components-switch.mjs +9 -4
- package/fesm2022/acorex-components-switch.mjs.map +1 -1
- package/fesm2022/acorex-components-tabs.mjs +6 -6
- package/fesm2022/acorex-components-tabs.mjs.map +1 -1
- package/fesm2022/acorex-components-tag.mjs +4 -4
- package/fesm2022/acorex-components-tag.mjs.map +1 -1
- package/fesm2022/acorex-components-text-area.mjs +7 -4
- package/fesm2022/acorex-components-text-area.mjs.map +1 -1
- package/fesm2022/acorex-components-text-box.mjs +3 -3
- package/fesm2022/acorex-components-text-box.mjs.map +1 -1
- package/fesm2022/acorex-components-time-line.mjs +9 -9
- package/fesm2022/acorex-components-time-line.mjs.map +1 -1
- package/fesm2022/acorex-components-toast.mjs +5 -5
- package/fesm2022/acorex-components-toast.mjs.map +1 -1
- package/fesm2022/acorex-components-toolbar.mjs +3 -11
- package/fesm2022/acorex-components-toolbar.mjs.map +1 -1
- package/fesm2022/acorex-components-tooltip.mjs +3 -3
- package/fesm2022/acorex-components-tooltip.mjs.map +1 -1
- package/fesm2022/acorex-components-tree-view.mjs +4 -4
- package/fesm2022/acorex-components-tree-view.mjs.map +1 -1
- package/fesm2022/acorex-components-uploader.mjs +8 -8
- package/fesm2022/acorex-components-uploader.mjs.map +1 -1
- package/fesm2022/acorex-components-video-player.mjs +1 -1
- package/fesm2022/acorex-components-wysiwyg.mjs +26 -26
- package/fesm2022/acorex-components-wysiwyg.mjs.map +1 -1
- package/form/lib/form.component.d.ts +3 -2
- package/image-editor/index.d.ts +0 -1
- package/image-editor/lib/image-editor-container/image-editor-container.component.d.ts +22 -3
- package/image-editor/lib/image-editor.module.d.ts +16 -17
- package/kbd/README.md +3 -0
- package/kbd/index.d.ts +3 -0
- package/kbd/lib/kbd-item/kbd-item.component.d.ts +7 -0
- package/kbd/lib/kbd.component.d.ts +7 -0
- package/kbd/lib/kbd.module.d.ts +9 -0
- package/loading/lib/loading-spinner.component.d.ts +1 -1
- package/menu/lib/menu-item.component.d.ts +2 -1
- package/notification/lib/notification.service.d.ts +1 -1
- package/package.json +5 -1
- package/paint/lib/paint/paint-view/paint-view.component.d.ts +1 -1
- package/picker/index.d.ts +3 -2
- package/picker/lib/picker-container/picker-container.component.d.ts +7 -0
- package/picker/lib/picker-items/picker-items.component.d.ts +20 -0
- package/picker/lib/picker-title/picker-title.component.d.ts +5 -0
- package/picker/lib/picker.module.d.ts +6 -4
- package/progress-bar/lib/progress-bar.component.d.ts +19 -19
- package/range-slider/lib/range-slider.component.d.ts +1 -1
- package/scheduler/lib/scheduler-month-view.component.d.ts +6 -6
- package/search-box/lib/search-box.component.d.ts +5 -1
- package/side-menu/lib/side-menu-item/side-menu-item.component.d.ts +3 -6
- package/side-menu/lib/side-menu.component.d.ts +1 -2
- package/tabs/lib/tabs.class.d.ts +1 -1
- package/text-area/lib/text-area.component.d.ts +5 -1
- package/time-line/lib/time-line.component.d.ts +1 -1
- package/toast/lib/toast.service.d.ts +1 -1
- package/toolbar/lib/toolbar.component.d.ts +1 -2
- package/wysiwyg/lib/wysiwyg/wysiwyg-container/wysiwyg-container.component.d.ts +2 -2
- package/image-editor/lib/image-editor-toolbar/image-editor-toolbar.component.d.ts +0 -27
- package/picker/lib/picker-column.directive.d.ts +0 -16
- package/picker/lib/picker.component.d.ts +0 -61
- /package/decorators/lib/components/{clear-button.component.d.ts → clear-button/clear-button.component.d.ts} +0 -0
- /package/decorators/lib/components/{close-button.component.d.ts → close-button/close-button.component.d.ts} +0 -0
- /package/decorators/lib/components/{full-screen-button.component.d.ts → full-screen/full-screen-button.component.d.ts} +0 -0
- /package/decorators/lib/components/{icon.component.d.ts → icon/icon.component.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-components-grid-layout-builder.mjs","sources":["../../../../libs/components/grid-layout-builder/src/lib/grid-layout-widget.component.ts","../../../../libs/components/grid-layout-builder/src/lib/grid-layout-container.component.ts","../../../../libs/components/grid-layout-builder/src/lib/grid-layout-builder.module.ts","../../../../libs/components/grid-layout-builder/src/lib/types.ts","../../../../libs/components/grid-layout-builder/src/acorex-components-grid-layout-builder.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXGridLayoutNode, AXGridLayoutWidget, AXGridLayoutWidgetCompElement } from './types';\n\n/**\n * A component that represents a widget within the grid layout. It serves as an individual\n * item within a `gridstack` layout, providing options for customization and interaction.\n *\n * This widget component is used within the `AXGridLayoutContainerComponent` to manage the\n * layout of widgets in a grid system. The component interacts with the GridStack library\n * to offer features like resizing, movement, and customization of the widget's properties.\n *\n * @example\n * <ax-grid-layout-widget [options]=\"widgetOptions\">\n * <div>Widget Content</div>\n * </ax-grid-layout-widget>\n */\n@Component({\n selector: 'ax-grid-layout-widget',\n template: ` <div class=\"grid-stack-item-content\">\n <ng-template #container></ng-template>\n <ng-content></ng-content>\n {{ options().content }}\n </div>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: false,\n})\nexport class AXGridLayoutWidgetComponent {\n /**\n * A reference to the native element of this widget component. It is used for interaction\n * with the underlying DOM element and for updating the widget properties via GridStack.\n */\n private readonly elementRef: ElementRef<AXGridLayoutWidgetCompElement> = inject(ElementRef);\n \n /**\n * The native element of the widget component.\n */\n public el: AXGridLayoutWidgetCompElement = this.elementRef.nativeElement;\n\n /**\n * The current options of the widget. These options are used to define the layout,\n * content, and behavior of the widget within the grid.\n *\n * @internal\n */\n private _options?: AXGridLayoutNode;\n\n /**\n * Input property that represents the widget's configuration options.\n *\n * The options include properties such as position, size, content, and other\n * configuration values. These options are updated dynamically.\n *\n * @param {AXGridLayoutNode} val The configuration object for the widget.\n * @returns {AXGridLayoutWidgetCompElement} The element associated with the widget.\n */\n public options = input(null, {\n transform: (val: AXGridLayoutNode) => {\n const grid = this.el.gridstackNode?.grid;\n if (grid) {\n grid.update(this.el, val);\n } else {\n this._options = { ...val, el: this.el };\n }\n return this.el.gridstackNode || this._options || { el: this.el };\n },\n });\n\n /**\n * Clears the widget's options.\n *\n * This method removes any existing options set for the widget and resets it\n * to its default state.\n */\n public clearOptions() {\n this._options = null;\n }\n\n /**\n * Constructor that initializes the widget component and sets the reference to\n * the grid widget component in the element's properties.\n */\n constructor() {\n this.el._gridWidgetComp = this;\n }\n\n /**\n * Removes this widget from the grid.\n *\n * This method interacts with GridStack to remove the widget from the layout.\n * Once removed, the widget will no longer be part of the grid.\n */\n public removeWidget() {\n this.el.gridstackNode.grid.removeWidget(this.el);\n }\n\n /**\n * Sets whether the widget can be locked (i.e., not resizable).\n *\n * @param {boolean} state Whether the widget should be locked or not.\n * @remarks\n * If the widget is locked, it cannot be resized.\n */\n public setlockable(state: boolean): void {\n this.el.gridstackNode.grid.update(this.el, { noResize: state });\n }\n\n /**\n * Sets whether the widget can be resized.\n *\n * @param {boolean} state Whether the widget should be resizable or not.\n * @remarks\n * If the widget is resizable, the user can change its size by dragging.\n */\n public setResizable(state: boolean): void {\n this.el.gridstackNode.grid.update(this.el, { noMove: state });\n }\n\n /**\n * Updates the options of the widget.\n *\n * @param {AXGridLayoutWidget} options The new options to apply to the widget.\n */\n setOptions(options: AXGridLayoutWidget) {\n this.el.gridstackNode.grid.update(this.el, options);\n }\n\n /**\n * Retrieves the current options of the widget.\n *\n * @returns {AXGridLayoutNode} The current configuration options of the widget.\n * @remarks\n * This method provides access to the widget's layout and configuration.\n * If no specific options are set, it returns the default options.\n */\n getOptions(): AXGridLayoutNode {\n const gridstackNode = this.el.gridstackNode;\n if (gridstackNode) {\n return {\n ...gridstackNode,\n el: this.el,\n };\n }\n return this.options() || this._options || { el: this.el };\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n NgZone,\n ViewEncapsulation,\n WritableSignal,\n computed,\n contentChildren,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { merge } from 'lodash-es';\nimport { AXGridLayoutWidgetComponent } from './grid-layout-widget.component';\nimport {\n AXGridLayout,\n AXGridLayoutContainerCompElement,\n AXGridLayoutDroppedEvent,\n AXGridLayoutElementEvent,\n AXGridLayoutEventEvent,\n AXGridLayoutNode,\n AXGridLayoutNodesEvent,\n AXGridLayoutOptions,\n AXGridLayoutWidget,\n AXGridLayoutWidgetCompElement,\n AXGridLayoutWidgetElement,\n AXSaveCallback,\n} from './types';\n\n/**\n * The `AXGridLayoutContainerComponent` is an Angular component that acts as a wrapper for the GridStack library.\n * It provides a flexible grid layout system for arranging items within a container. It integrates with GridStack.js\n * and allows dynamic manipulation of grid items (widgets), including adding, removing, resizing, and dragging.\n *\n * This component uses Angular's reactive signals, outputs, and lifecycle hooks to manage grid state and interactions.\n */\n@Component({\n selector: 'ax-grid-layout-container',\n template: ` <ng-template #container></ng-template>\n <ng-content></ng-content>`,\n styleUrl: './grid-layout-container.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: false,\n})\nexport class AXGridLayoutContainerComponent {\n private serializedData?: AXGridLayoutOptions;\n /**\n * Content children elements of type `AXGridLayoutWidgetComponent` that are dynamically managed within the grid.\n */\n private items = contentChildren(AXGridLayoutWidgetComponent);\n\n /**\n * Input that holds options for configuring the GridStack grid layout.\n */\n public options = input<AXGridLayoutOptions>();\n\n /**\n * A computed signal that merges the provided `options` with the grid's existing configuration (if any).\n */\n private calcOptions = computed(() => this.grid()?.opts || this.options() || {});\n\n /**\n * A reference to the native element of the container component.\n */\n private readonly elementRef: ElementRef<AXGridLayoutContainerCompElement> = inject(ElementRef);\n\n /**\n * Angular's NgZone for running code outside Angular's change detection.\n */\n private ngZone = inject(NgZone);\n\n /**\n * A writable signal representing the current state of the grid.\n */\n private grid: WritableSignal<AXGridLayout | undefined> = signal(undefined);\n\n /**\n * Flag indicating whether the grid has been loaded with content.\n */\n private loaded?: boolean;\n\n /**\n * A reference to the native element representing the grid container.\n */\n private el: AXGridLayoutContainerCompElement = this.elementRef.nativeElement;\n\n // Outputs\n\n /**\n * Output event emitted when a widget is added to the grid.\n */\n protected onAdded = output<AXGridLayoutNodesEvent>();\n\n /**\n * Output event emitted when a widget or layout is changed.\n */\n protected onChange = output<AXGridLayoutNodesEvent>();\n\n /**\n * Output event emitted when the grid is disabled.\n */\n protected onDisable = output<AXGridLayoutEventEvent>();\n\n /**\n * Output event emitted during a drag operation on a widget.\n */\n protected onDrag = output<AXGridLayoutElementEvent>();\n\n /**\n * Output event emitted when drag starts on a widget.\n */\n protected onDragStart = output<AXGridLayoutElementEvent>();\n\n /**\n * Output event emitted when drag stops on a widget.\n */\n protected onDragStop = output<AXGridLayoutElementEvent>();\n\n /**\n * Output event emitted when a widget is dropped on the grid.\n */\n protected onDropped = output<AXGridLayoutDroppedEvent>();\n\n /**\n * Output event emitted when the grid is enabled.\n */\n protected onEnable = output<AXGridLayoutEventEvent>();\n\n /**\n * Output event emitted when a widget is removed from the grid.\n */\n protected onRemoved = output<AXGridLayoutNodesEvent>();\n\n /**\n * Output event emitted when a widget is resized.\n */\n protected onResize = output<AXGridLayoutElementEvent>();\n\n /**\n * Output event emitted when resizing starts on a widget.\n */\n protected onResizeStart = output<AXGridLayoutElementEvent>();\n\n /**\n * Output event emitted when resizing stops on a widget.\n */\n protected onResizeStop = output<AXGridLayoutElementEvent>();\n\n /**\n * Output event emitted when the grid is rendered.\n */\n protected isRendered = output<boolean>();\n\n // Model\n\n /**\n * Model that tracks whether the grid container is empty.\n */\n protected isEmpty = model(false);\n\n // Lifecycle\n\n /**\n * Initializes the grid layout component and sets up the GridStack grid.\n */\n constructor() {\n this.el._gridComp = this;\n }\n\n /**\n * Angular lifecycle hook that initializes the grid once the component is created.\n * It sets up GridStack and loads any initial layout configuration.\n */\n protected async ngOnInit(): Promise<void> {\n this.ngZone.runOutsideAngular(async () => {\n this.loaded = !!this.calcOptions()?.children?.length;\n const { GridStack } = await import('gridstack');\n this.grid.set(GridStack.init(this.calcOptions(), this.el));\n this.checkEmpty();\n });\n }\n\n /**\n * Angular lifecycle hook that cleans up resources when the component is destroyed.\n * It removes event listeners and destroys the GridStack instance.\n */\n protected ngOnDestroy(): void {\n this.unhookEvents(this.grid());\n this.grid()?.destroy();\n }\n\n // Effects\n\n /**\n * Effect that reacts to changes in the grid layout and updates the DOM accordingly.\n */\n private gridChange = effect(() => {\n if (this.grid()) {\n if (!this.loaded) this.updateAll();\n this.hookEvents(this.grid());\n this.isRendered.emit(true);\n console.log('Grid Rendered!');\n }\n });\n\n /**\n * Effect that reacts to changes in child widgets and updates the grid layout.\n */\n private childChange = effect(() => {\n if (this.items()) {\n this.updateAll();\n }\n });\n\n // Methods\n\n /**\n * Updates the grid layout with the current set of widgets, clearing previous options.\n */\n private updateAll() {\n if (!this.grid()) return;\n const layout: AXGridLayoutWidget[] = [];\n this.items()?.forEach((item) => {\n layout.push(item.options());\n item.clearOptions();\n });\n this.grid().load(layout);\n }\n\n /**\n * Checks whether the grid is empty and updates the `isEmpty` model accordingly.\n */\n private checkEmpty() {\n if (this.grid()) {\n const isEmpty = !this.grid().engine.nodes.length;\n if (isEmpty === this.isEmpty()) return;\n this.isEmpty.set(isEmpty);\n }\n }\n\n // Event Listeners\n\n /**\n * Hooks event listeners to the grid for various grid events (e.g., add, remove, drag, resize).\n */\n private hookEvents(grid?: AXGridLayout): void {\n if (grid) {\n grid\n .on('added', (event: Event, nodes: AXGridLayoutNode[]) => {\n this.checkEmpty();\n this.onAdded.emit({ event, nodes });\n })\n .on('removed', (event: Event, nodes: AXGridLayoutNode[]) => {\n this.checkEmpty();\n this.onRemoved.emit({ event, nodes });\n })\n .on('change', (event: Event, nodes: AXGridLayoutNode[]) => this.onChange.emit({ event, nodes }))\n .on('disable', (event: Event) => this.onDisable.emit({ event }))\n .on('drag', (event: Event, el: AXGridLayoutWidgetElement) => this.onDrag.emit({ event, el }))\n .on('dragstart', (event: Event, el: AXGridLayoutWidgetElement) =>\n this.onDragStart.emit({ event, el }),\n )\n .on('dragstop', (event: Event, el: AXGridLayoutWidgetElement) => this.onDragStop.emit({ event, el }))\n .on('dropped', (event: Event, previousNode: AXGridLayoutNode, newNode: AXGridLayoutNode) =>\n this.onDropped.emit({ event, previousNode, newNode }),\n )\n .on('enable', (event: Event) => this.onEnable.emit({ event }))\n .on('resize', (event: Event, el: AXGridLayoutWidgetElement) => this.onResize.emit({ event, el }))\n .on('resizestart', (event: Event, el: AXGridLayoutWidgetElement) =>\n this.onResizeStart.emit({ event, el }),\n )\n .on('resizestop', (event: Event, el: AXGridLayoutWidgetElement) =>\n this.onResizeStop.emit({ event, el }),\n );\n }\n }\n\n /**\n * Removes all event listeners from the grid.\n */\n private unhookEvents(grid?: AXGridLayout) {\n if (grid) {\n grid.offAll();\n }\n }\n\n //PUBLIC SETTER METHODS\n\n /**\n * Creates a new widget and returns it.\n * @param w - Widget position/size options.\n * @returns The created widget's HTML element, or `undefined` if the grid is not initialized.\n */\n public addWidget(w: AXGridLayoutWidget, withAutoArrange = false): AXGridLayoutWidgetElement | undefined {\n if (withAutoArrange) {\n this.compact();\n }\n return this.grid()?.addWidget(w);\n }\n\n /**\n * Re-layout grid items to reclaim any empty space.\n * @param layout - Compaction mode: 'list' or 'compact'. Default is 'compact'.\n * @param doSort - Whether to sort items automatically. Default is `true`.\n */\n public compact(layout: 'list' | 'compact' = 'compact', doSort = true): void {\n this.grid()?.compact(layout, doSort);\n }\n\n /**\n * Updates the current cell height.\n * @param val - The new cell height value.\n * @param update - Whether to rebuild the internal CSS stylesheet. Default is `true`.\n */\n public setCellHeight(val: number, update = true): void {\n this.grid()?.cellHeight(val, update);\n }\n\n /**\n * Sets the number of columns in the grid and updates existing widgets to conform to the new layout.\n * @param column - Number of columns (must be > 0). Default is 12.\n * @param layout - Re-layout behavior: 'list', 'compact', 'moveScale', 'move', 'scale', 'none'.\n * Default is 'moveScale'.\n */\n public setColumn(\n column: number,\n layout: 'list' | 'compact' | 'moveScale' | 'move' | 'scale' | 'none' = 'moveScale',\n ): void {\n this.grid()?.column(column, layout);\n }\n\n /**\n * Destroys the grid instance.\n * @param removeDOM - If `false`, nodes and grid will not be removed from the DOM. Default is `true`.\n */\n public destroy(removeDOM = true): void {\n this.grid()?.destroy(removeDOM);\n }\n\n /**\n * Sets whether widgets in the grid can be moved (dragged).\n *\n * @param state If true, widgets are movable; otherwise, they are locked.\n * @param recurse If true, the setting is applied to nested widgets as well.\n */\n public setMovable(state: boolean, recurse?: boolean) {\n this.grid().enableMove(state, recurse);\n }\n\n /**\n * Sets whether widgets in the grid can be resized.\n *\n * @param state If true, widgets are resizable; otherwise, they are fixed.\n * @param recurse If true, the setting is applied to nested widgets as well.\n */\n public setResizable(state: boolean, recurse?: boolean) {\n this.grid().enableResize(state, recurse);\n }\n\n /**\n * Sets or gets the floating behavior of widgets.\n * @param val - If provided, sets floating behavior (`true` or `false`). If not provided, returns the current value.\n * @returns The current floating behavior if `val` is not provided.\n */\n public setFloat(val: boolean): void {\n this.grid()?.float(val);\n }\n\n /**\n * Sets the margin (gap) between grid items and their content.\n * @param value - The margin value (number or string).\n */\n public setMargin(value: number | string): void {\n this.grid()?.margin(value);\n }\n\n /**\n * Removes a widget from the grid.\n * @param el - The widget to remove.\n * @param removeDOM - If `false`, the widget won't be removed from the DOM. Default is `true`.\n * @param triggerEvent - If `false`, no 'removed' callbacks will be called. Default is `true`.\n */\n public removeWidget(el: AXGridLayoutWidgetElement, removeDOM = true, triggerEvent = true): void {\n this.grid()?.removeWidget(el, removeDOM, triggerEvent);\n }\n\n /**\n * Removes all widgets from the grid.\n * @param removeDOM - If `false`, widgets won't be removed from the DOM. Default is `true`.\n */\n public removeAll(removeDOM = true): void {\n this.grid()?.removeAll(removeDOM);\n }\n\n /**\n * Rotates a widget by swapping its width and height.\n * @param els - The widget or selector of widgets to rotate.\n * @param relative - Optional pixel coordinates to rotate around (keeps that cell under the cursor).\n */\n public setRotate(element: AXGridLayoutWidgetCompElement) {\n this.grid().rotate(element);\n }\n\n /**\n * Toggles the grid animation state.\n * @param doAnimate - If `true`, the grid will animate.\n */\n public setAnimation(doAnimate: boolean): void {\n this.grid()?.setAnimation(doAnimate);\n }\n\n /**\n * Saves the current state of the grid and its widgets.\n *\n * @param saveContent If true, the content of the widgets will be saved.\n * @param saveGridOpt If true, the grid options will be saved.\n * @param saveCallback Optional callback to invoke after saving the grid state.\n * @returns The saved grid layout options.\n */\n public save(saveContent = false, saveGridOpt = true, saveCallback?: AXSaveCallback): AXGridLayoutOptions {\n return (this.serializedData = this.grid().save(\n saveContent,\n saveGridOpt,\n saveCallback,\n ) as AXGridLayoutOptions);\n }\n\n /**\n * Loads a serialized grid layout configuration into the grid.\n *\n * @param serializedData The serialized grid options to load.\n * @param cleanBeforeLoad If true, the grid will be cleared before loading the new layout.\n * @returns A promise that resolves to the loaded grid instance.\n */\n public async load(\n serializedData: AXGridLayoutOptions = this.serializedData,\n cleanBeforeLoad = true,\n ): Promise<AXGridLayout> {\n if (cleanBeforeLoad) {\n this.grid().removeAll();\n }\n const { GridStack } = await import('gridstack');\n return GridStack.addGrid(this.el, serializedData);\n }\n\n /**\n * Sets up draggable functionality for external elements to be added to the grid.\n *\n * @param dragIn A CSS selector or an array of elements that can be dragged into the grid.\n * @param widgets An optional set of widgets that are draggable into the grid.\n */\n public async setupDraggable(dragIn?: string | HTMLElement[], widgets?: AXGridLayoutWidget) {\n if (typeof dragIn === 'string') {\n document.querySelectorAll(dragIn).forEach((item) => {\n if (!item.classList.contains('grid-stack-item')) {\n item.classList.add('grid-stack-item');\n }\n });\n }\n const { GridStack } = await import('gridstack');\n GridStack.setupDragIn(dragIn, undefined, [widgets]);\n }\n\n /**\n * Sets grid layout options.\n * @param options The new grid layout options to apply.\n *\n * `Experimental`\n */\n public setOption(options: AXGridLayoutOptions) {\n this.grid().opts = merge({}, this.grid().opts, options);\n }\n\n // PUBLIC GETTER METHODS //\n\n /**\n * Retrieves the current grid layout options.\n *\n * @returns The current grid options.\n */\n public getOptions(): AXGridLayoutOptions {\n return this.grid().opts;\n }\n\n /**\n * Retrieves all the child nodes (widgets) in the grid layout.\n *\n * @returns An array of grid layout nodes representing the widgets.\n */\n public getChildren(): AXGridLayoutNode[] {\n return this.grid().engine.nodes;\n }\n}\n","/**\n * gridstack.component.ts 11.1.1-dev\n * Copyright (c) 2022-2024 Alain Dumesny - see GridStack root license\n */\n\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { AXGridLayoutContainerComponent } from './grid-layout-container.component';\nimport { AXGridLayoutWidgetComponent } from './grid-layout-widget.component';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [AXGridLayoutContainerComponent, AXGridLayoutWidgetComponent],\n exports: [AXGridLayoutContainerComponent, AXGridLayoutWidgetComponent],\n})\nexport class AXGridLayoutBuilderModule {\n // constructor() {\n // set globally our method to create the right widget type\n // GridStack.addRemoveCB = gsCreateNgComponents;\n // GridStack.saveCB = gsSaveAdditionalNgInfo;\n // }\n}\n","import { AXGridLayoutContainerComponent } from './grid-layout-container.component';\nimport { AXGridLayoutWidgetComponent } from './grid-layout-widget.component';\n//TYPES\nexport type AXGridLayoutNode = import('gridstack').GridStackNode;\nexport type AXGridLayout = import('gridstack').GridStack;\nexport type AXGridLayoutOptions = import('gridstack').GridStackOptions;\nexport type AXGridLayoutWidget = import('gridstack').GridStackWidget & { data?: any };\nexport type AXGridLayoutContainerElement = import('gridstack').GridHTMLElement;\nexport type AXGridLayoutWidgetElement = import('gridstack').GridItemHTMLElement;\n//EVENTS\nexport type AXGridLayoutEventEvent = { event: Event };\nexport type AXGridLayoutElementEvent = { event: Event; el: AXGridLayoutWidgetElement };\nexport type AXGridLayoutNodesEvent = { event: Event; nodes: AXGridLayoutNode[] };\nexport type AXGridLayoutDroppedEvent = {\n event: Event;\n previousNode: AXGridLayoutNode;\n newNode: AXGridLayoutNode;\n};\n//COMPONENTS\nexport interface AXGridLayoutContainerCompElement extends AXGridLayoutContainerElement {\n _gridComp?: AXGridLayoutContainerComponent;\n}\nexport interface AXGridLayoutWidgetCompElement extends AXGridLayoutWidgetElement {\n _gridWidgetComp?: AXGridLayoutWidgetComponent;\n}\n\n//Callback\nexport type AXSaveCallback = import('gridstack').SaveFcn;\n\n// //DYNAMIC\n// export type AXNgCompInputs = { [key: string]: any };\n// export type SelectorToType = { [key: string]: Type<object> }; // selector string to runtime Type mapping\n// export interface AXNgGridLayoutWidget extends AXGridLayoutWidget {\n// selector?: string; //Angular tag selector for this component to create at runtime\n// input?: AXNgCompInputs; // serialized data for the component input fields\n// subGridOpts?: AXNgGridLayoutOptions; // nested grid options\n// }\n// export interface AXNgGridLayoutNode extends AXGridLayoutNode {\n// selector?: string; // component type to create as content\n// }\n// export interface AXNgGridLayoutOptions extends AXGridLayoutOptions {\n// children?: AXNgGridLayoutWidget[];\n// subGridOpts?: AXNgGridLayoutOptions;\n// }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"acorex-components-grid-layout-builder.mjs","sources":["../../../../libs/components/grid-layout-builder/src/lib/grid-layout-widget.component.ts","../../../../libs/components/grid-layout-builder/src/lib/grid-layout-container.component.ts","../../../../libs/components/grid-layout-builder/src/lib/grid-layout-builder.module.ts","../../../../libs/components/grid-layout-builder/src/lib/types.ts","../../../../libs/components/grid-layout-builder/src/acorex-components-grid-layout-builder.ts"],"sourcesContent":["import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n inject,\n input,\n ViewEncapsulation,\n} from '@angular/core';\nimport { AXGridLayoutNode, AXGridLayoutWidget, AXGridLayoutWidgetCompElement } from './types';\n\n/**\n * A component that represents a widget within the grid layout. It serves as an individual\n * item within a `gridstack` layout, providing options for customization and interaction.\n *\n * This widget component is used within the `AXGridLayoutContainerComponent` to manage the\n * layout of widgets in a grid system. The component interacts with the GridStack library\n * to offer features like resizing, movement, and customization of the widget's properties.\n *\n * @example\n * <ax-grid-layout-widget [options]=\"widgetOptions\">\n * <div>Widget Content</div>\n * </ax-grid-layout-widget>\n */\n@Component({\n selector: 'ax-grid-layout-widget',\n template: ` <div class=\"grid-stack-item-content\">\n <ng-template #container></ng-template>\n <ng-content></ng-content>\n {{ options().content }}\n </div>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: false,\n})\nexport class AXGridLayoutWidgetComponent {\n /**\n * A reference to the native element of this widget component. It is used for interaction\n * with the underlying DOM element and for updating the widget properties via GridStack.\n */\n private readonly elementRef: ElementRef<AXGridLayoutWidgetCompElement> = inject(ElementRef);\n \n /**\n * The native element of the widget component.\n */\n public el: AXGridLayoutWidgetCompElement = this.elementRef.nativeElement;\n\n /**\n * The current options of the widget. These options are used to define the layout,\n * content, and behavior of the widget within the grid.\n *\n * @internal\n */\n private _options?: AXGridLayoutNode;\n\n /**\n * Input property that represents the widget's configuration options.\n *\n * The options include properties such as position, size, content, and other\n * configuration values. These options are updated dynamically.\n *\n * @param {AXGridLayoutNode} val The configuration object for the widget.\n * @returns {AXGridLayoutWidgetCompElement} The element associated with the widget.\n */\n public options = input(null, {\n transform: (val: AXGridLayoutNode) => {\n const grid = this.el.gridstackNode?.grid;\n if (grid) {\n grid.update(this.el, val);\n } else {\n this._options = { ...val, el: this.el };\n }\n return this.el.gridstackNode || this._options || { el: this.el };\n },\n });\n\n /**\n * Clears the widget's options.\n *\n * This method removes any existing options set for the widget and resets it\n * to its default state.\n */\n public clearOptions() {\n this._options = null;\n }\n\n /**\n * Constructor that initializes the widget component and sets the reference to\n * the grid widget component in the element's properties.\n */\n constructor() {\n this.el._gridWidgetComp = this;\n }\n\n /**\n * Removes this widget from the grid.\n *\n * This method interacts with GridStack to remove the widget from the layout.\n * Once removed, the widget will no longer be part of the grid.\n */\n public removeWidget() {\n this.el.gridstackNode.grid.removeWidget(this.el);\n }\n\n /**\n * Sets whether the widget can be locked (i.e., not resizable).\n *\n * @param {boolean} state Whether the widget should be locked or not.\n * @remarks\n * If the widget is locked, it cannot be resized.\n */\n public setlockable(state: boolean): void {\n this.el.gridstackNode.grid.update(this.el, { noResize: state });\n }\n\n /**\n * Sets whether the widget can be resized.\n *\n * @param {boolean} state Whether the widget should be resizable or not.\n * @remarks\n * If the widget is resizable, the user can change its size by dragging.\n */\n public setResizable(state: boolean): void {\n this.el.gridstackNode.grid.update(this.el, { noMove: state });\n }\n\n /**\n * Updates the options of the widget.\n *\n * @param {AXGridLayoutWidget} options The new options to apply to the widget.\n */\n setOptions(options: AXGridLayoutWidget) {\n this.el.gridstackNode.grid.update(this.el, options);\n }\n\n /**\n * Retrieves the current options of the widget.\n *\n * @returns {AXGridLayoutNode} The current configuration options of the widget.\n * @remarks\n * This method provides access to the widget's layout and configuration.\n * If no specific options are set, it returns the default options.\n */\n getOptions(): AXGridLayoutNode {\n const gridstackNode = this.el.gridstackNode;\n if (gridstackNode) {\n return {\n ...gridstackNode,\n el: this.el,\n };\n }\n return this.options() || this._options || { el: this.el };\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n NgZone,\n ViewEncapsulation,\n WritableSignal,\n computed,\n contentChildren,\n effect,\n inject,\n input,\n model,\n output,\n signal,\n} from '@angular/core';\nimport { merge } from 'lodash-es';\nimport { AXGridLayoutWidgetComponent } from './grid-layout-widget.component';\nimport {\n AXGridLayout,\n AXGridLayoutContainerCompElement,\n AXGridLayoutDroppedEvent,\n AXGridLayoutElementEvent,\n AXGridLayoutEventEvent,\n AXGridLayoutNode,\n AXGridLayoutNodesEvent,\n AXGridLayoutOptions,\n AXGridLayoutWidget,\n AXGridLayoutWidgetCompElement,\n AXGridLayoutWidgetElement,\n AXSaveCallback,\n} from './types';\n\n/**\n * The `AXGridLayoutContainerComponent` is an Angular component that acts as a wrapper for the GridStack library.\n * It provides a flexible grid layout system for arranging items within a container. It integrates with GridStack.js\n * and allows dynamic manipulation of grid items (widgets), including adding, removing, resizing, and dragging.\n *\n * This component uses Angular's reactive signals, outputs, and lifecycle hooks to manage grid state and interactions.\n */\n@Component({\n selector: 'ax-grid-layout-container',\n template: ` <ng-template #container></ng-template>\n <ng-content></ng-content>`,\n styleUrl: './grid-layout-container.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n standalone: false,\n})\nexport class AXGridLayoutContainerComponent {\n private serializedData?: AXGridLayoutOptions;\n /**\n * Content children elements of type `AXGridLayoutWidgetComponent` that are dynamically managed within the grid.\n */\n private items = contentChildren(AXGridLayoutWidgetComponent);\n\n /**\n * Input that holds options for configuring the GridStack grid layout.\n */\n public options = input<AXGridLayoutOptions>();\n\n /**\n * A computed signal that merges the provided `options` with the grid's existing configuration (if any).\n */\n private calcOptions = computed(() => this.grid()?.opts || this.options() || {});\n\n /**\n * A reference to the native element of the container component.\n */\n private readonly elementRef: ElementRef<AXGridLayoutContainerCompElement> = inject(ElementRef);\n\n /**\n * Angular's NgZone for running code outside Angular's change detection.\n */\n private ngZone = inject(NgZone);\n\n /**\n * A writable signal representing the current state of the grid.\n */\n private grid: WritableSignal<AXGridLayout | undefined> = signal(undefined);\n\n /**\n * Flag indicating whether the grid has been loaded with content.\n */\n private loaded?: boolean;\n\n /**\n * A reference to the native element representing the grid container.\n */\n private el: AXGridLayoutContainerCompElement = this.elementRef.nativeElement;\n\n // Outputs\n\n /**\n * Output event emitted when a widget is added to the grid.\n */\n protected onAdded = output<AXGridLayoutNodesEvent>();\n\n /**\n * Output event emitted when a widget or layout is changed.\n */\n protected onChange = output<AXGridLayoutNodesEvent>();\n\n /**\n * Output event emitted when the grid is disabled.\n */\n protected onDisable = output<AXGridLayoutEventEvent>();\n\n /**\n * Output event emitted during a drag operation on a widget.\n */\n protected onDrag = output<AXGridLayoutElementEvent>();\n\n /**\n * Output event emitted when drag starts on a widget.\n */\n protected onDragStart = output<AXGridLayoutElementEvent>();\n\n /**\n * Output event emitted when drag stops on a widget.\n */\n protected onDragStop = output<AXGridLayoutElementEvent>();\n\n /**\n * Output event emitted when a widget is dropped on the grid.\n */\n protected onDropped = output<AXGridLayoutDroppedEvent>();\n\n /**\n * Output event emitted when the grid is enabled.\n */\n protected onEnable = output<AXGridLayoutEventEvent>();\n\n /**\n * Output event emitted when a widget is removed from the grid.\n */\n protected onRemoved = output<AXGridLayoutNodesEvent>();\n\n /**\n * Output event emitted when a widget is resized.\n */\n protected onResize = output<AXGridLayoutElementEvent>();\n\n /**\n * Output event emitted when resizing starts on a widget.\n */\n protected onResizeStart = output<AXGridLayoutElementEvent>();\n\n /**\n * Output event emitted when resizing stops on a widget.\n */\n protected onResizeStop = output<AXGridLayoutElementEvent>();\n\n /**\n * Output event emitted when the grid is rendered.\n */\n protected isRendered = output<boolean>();\n\n // Model\n\n /**\n * Model that tracks whether the grid container is empty.\n */\n protected isEmpty = model(false);\n\n // Lifecycle\n\n /**\n * Initializes the grid layout component and sets up the GridStack grid.\n */\n constructor() {\n this.el._gridComp = this;\n }\n\n /**\n * Angular lifecycle hook that initializes the grid once the component is created.\n * It sets up GridStack and loads any initial layout configuration.\n */\n protected async ngOnInit(): Promise<void> {\n this.ngZone.runOutsideAngular(async () => {\n this.loaded = !!this.calcOptions()?.children?.length;\n const { GridStack } = await import('gridstack');\n this.grid.set(GridStack.init(this.calcOptions(), this.el));\n this.checkEmpty();\n });\n }\n\n /**\n * Angular lifecycle hook that cleans up resources when the component is destroyed.\n * It removes event listeners and destroys the GridStack instance.\n */\n protected ngOnDestroy(): void {\n this.unhookEvents(this.grid());\n this.grid()?.destroy();\n }\n\n // Effects\n\n /**\n * Effect that reacts to changes in the grid layout and updates the DOM accordingly.\n */\n private gridChange = effect(() => {\n if (this.grid()) {\n if (!this.loaded) this.updateAll();\n this.hookEvents(this.grid());\n this.isRendered.emit(true);\n console.log('Grid Rendered!');\n }\n });\n\n /**\n * Effect that reacts to changes in child widgets and updates the grid layout.\n */\n private childChange = effect(() => {\n if (this.items()) {\n this.updateAll();\n }\n });\n\n // Methods\n\n /**\n * Updates the grid layout with the current set of widgets, clearing previous options.\n */\n private updateAll() {\n if (!this.grid()) return;\n const layout: AXGridLayoutWidget[] = [];\n this.items()?.forEach((item) => {\n layout.push(item.options());\n item.clearOptions();\n });\n this.grid().load(layout);\n }\n\n /**\n * Checks whether the grid is empty and updates the `isEmpty` model accordingly.\n */\n private checkEmpty() {\n if (this.grid()) {\n const isEmpty = !this.grid().engine.nodes.length;\n if (isEmpty === this.isEmpty()) return;\n this.isEmpty.set(isEmpty);\n }\n }\n\n // Event Listeners\n\n /**\n * Hooks event listeners to the grid for various grid events (e.g., add, remove, drag, resize).\n */\n private hookEvents(grid?: AXGridLayout): void {\n if (grid) {\n grid\n .on('added', (event: Event, nodes: AXGridLayoutNode[]) => {\n this.checkEmpty();\n this.onAdded.emit({ event, nodes });\n })\n .on('removed', (event: Event, nodes: AXGridLayoutNode[]) => {\n this.checkEmpty();\n this.onRemoved.emit({ event, nodes });\n })\n .on('change', (event: Event, nodes: AXGridLayoutNode[]) => this.onChange.emit({ event, nodes }))\n .on('disable', (event: Event) => this.onDisable.emit({ event }))\n .on('drag', (event: Event, el: AXGridLayoutWidgetElement) => this.onDrag.emit({ event, el }))\n .on('dragstart', (event: Event, el: AXGridLayoutWidgetElement) =>\n this.onDragStart.emit({ event, el }),\n )\n .on('dragstop', (event: Event, el: AXGridLayoutWidgetElement) => this.onDragStop.emit({ event, el }))\n .on('dropped', (event: Event, previousNode: AXGridLayoutNode, newNode: AXGridLayoutNode) =>\n this.onDropped.emit({ event, previousNode, newNode }),\n )\n .on('enable', (event: Event) => this.onEnable.emit({ event }))\n .on('resize', (event: Event, el: AXGridLayoutWidgetElement) => this.onResize.emit({ event, el }))\n .on('resizestart', (event: Event, el: AXGridLayoutWidgetElement) =>\n this.onResizeStart.emit({ event, el }),\n )\n .on('resizestop', (event: Event, el: AXGridLayoutWidgetElement) =>\n this.onResizeStop.emit({ event, el }),\n );\n }\n }\n\n /**\n * Removes all event listeners from the grid.\n */\n private unhookEvents(grid?: AXGridLayout) {\n if (grid) {\n grid.offAll();\n }\n }\n\n //PUBLIC SETTER METHODS\n\n /**\n * Creates a new widget and returns it.\n * @param w - Widget position/size options.\n * @returns The created widget's HTML element, or `undefined` if the grid is not initialized.\n */\n public addWidget(w: AXGridLayoutWidget, withAutoArrange = false): AXGridLayoutWidgetElement | undefined {\n if (withAutoArrange) {\n this.compact();\n }\n return this.grid()?.addWidget(w);\n }\n\n /**\n * Re-layout grid items to reclaim any empty space.\n * @param layout - Compaction mode: 'list' or 'compact'. Default is 'compact'.\n * @param doSort - Whether to sort items automatically. Default is `true`.\n */\n public compact(layout: 'list' | 'compact' = 'compact', doSort = true): void {\n this.grid()?.compact(layout, doSort);\n }\n\n /**\n * Updates the current cell height.\n * @param val - The new cell height value.\n * @param update - Whether to rebuild the internal CSS stylesheet. Default is `true`.\n */\n public setCellHeight(val: number, update = true): void {\n this.grid()?.cellHeight(val, update);\n }\n\n /**\n * Sets the number of columns in the grid and updates existing widgets to conform to the new layout.\n * @param column - Number of columns (must be > 0). Default is 12.\n * @param layout - Re-layout behavior: 'list', 'compact', 'moveScale', 'move', 'scale', 'none'.\n * Default is 'moveScale'.\n */\n public setColumn(\n column: number,\n layout: 'list' | 'compact' | 'moveScale' | 'move' | 'scale' | 'none' = 'moveScale',\n ): void {\n this.grid()?.column(column, layout);\n }\n\n /**\n * Destroys the grid instance.\n * @param removeDOM - If `false`, nodes and grid will not be removed from the DOM. Default is `true`.\n */\n public destroy(removeDOM = true): void {\n this.grid()?.destroy(removeDOM);\n }\n\n /**\n * Sets whether widgets in the grid can be moved (dragged).\n *\n * @param state If true, widgets are movable; otherwise, they are locked.\n * @param recurse If true, the setting is applied to nested widgets as well.\n */\n public setMovable(state: boolean, recurse?: boolean) {\n this.grid().enableMove(state, recurse);\n }\n\n /**\n * Sets whether widgets in the grid can be resized.\n *\n * @param state If true, widgets are resizable; otherwise, they are fixed.\n * @param recurse If true, the setting is applied to nested widgets as well.\n */\n public setResizable(state: boolean, recurse?: boolean) {\n this.grid().enableResize(state, recurse);\n }\n\n /**\n * Sets or gets the floating behavior of widgets.\n * @param val - If provided, sets floating behavior (`true` or `false`). If not provided, returns the current value.\n * @returns The current floating behavior if `val` is not provided.\n */\n public setFloat(val: boolean): void {\n this.grid()?.float(val);\n }\n\n /**\n * Sets the margin (gap) between grid items and their content.\n * @param value - The margin value (number or string).\n */\n public setMargin(value: number | string): void {\n this.grid()?.margin(value);\n }\n\n /**\n * Removes a widget from the grid.\n * @param el - The widget to remove.\n * @param removeDOM - If `false`, the widget won't be removed from the DOM. Default is `true`.\n * @param triggerEvent - If `false`, no 'removed' callbacks will be called. Default is `true`.\n */\n public removeWidget(el: AXGridLayoutWidgetElement, removeDOM = true, triggerEvent = true): void {\n this.grid()?.removeWidget(el, removeDOM, triggerEvent);\n }\n\n /**\n * Removes all widgets from the grid.\n * @param removeDOM - If `false`, widgets won't be removed from the DOM. Default is `true`.\n */\n public removeAll(removeDOM = true): void {\n this.grid()?.removeAll(removeDOM);\n }\n\n /**\n * Rotates a widget by swapping its width and height.\n * @param els - The widget or selector of widgets to rotate.\n * @param relative - Optional pixel coordinates to rotate around (keeps that cell under the cursor).\n */\n public setRotate(element: AXGridLayoutWidgetCompElement) {\n this.grid().rotate(element);\n }\n\n /**\n * Toggles the grid animation state.\n * @param doAnimate - If `true`, the grid will animate.\n */\n public setAnimation(doAnimate: boolean): void {\n this.grid()?.setAnimation(doAnimate);\n }\n\n /**\n * Saves the current state of the grid and its widgets.\n *\n * @param saveContent If true, the content of the widgets will be saved.\n * @param saveGridOpt If true, the grid options will be saved.\n * @param saveCallback Optional callback to invoke after saving the grid state.\n * @returns The saved grid layout options.\n */\n public save(saveContent = false, saveGridOpt = true, saveCallback?: AXSaveCallback): AXGridLayoutOptions {\n return (this.serializedData = this.grid().save(\n saveContent,\n saveGridOpt,\n saveCallback,\n ) as AXGridLayoutOptions);\n }\n\n /**\n * Loads a serialized grid layout configuration into the grid.\n *\n * @param serializedData The serialized grid options to load.\n * @param cleanBeforeLoad If true, the grid will be cleared before loading the new layout.\n * @returns A promise that resolves to the loaded grid instance.\n */\n public async load(\n serializedData: AXGridLayoutOptions = this.serializedData,\n cleanBeforeLoad = true,\n ): Promise<AXGridLayout> {\n if (cleanBeforeLoad) {\n this.grid().removeAll();\n }\n const { GridStack } = await import('gridstack');\n return GridStack.addGrid(this.el, serializedData);\n }\n\n /**\n * Sets up draggable functionality for external elements to be added to the grid.\n *\n * @param dragIn A CSS selector or an array of elements that can be dragged into the grid.\n * @param widgets An optional set of widgets that are draggable into the grid.\n */\n public async setupDraggable(dragIn?: string | HTMLElement[], widgets?: AXGridLayoutWidget) {\n if (typeof dragIn === 'string') {\n document.querySelectorAll(dragIn).forEach((item) => {\n if (!item.classList.contains('grid-stack-item')) {\n item.classList.add('grid-stack-item');\n }\n });\n }\n const { GridStack } = await import('gridstack');\n GridStack.setupDragIn(dragIn, undefined, [widgets]);\n }\n\n /**\n * Sets grid layout options.\n * @param options The new grid layout options to apply.\n *\n * `Experimental`\n */\n public setOption(options: AXGridLayoutOptions) {\n this.grid().opts = merge({}, this.grid().opts, options);\n }\n\n // PUBLIC GETTER METHODS //\n\n /**\n * Retrieves the current grid layout options.\n *\n * @returns The current grid options.\n */\n public getOptions(): AXGridLayoutOptions {\n return this.grid().opts;\n }\n\n /**\n * Retrieves all the child nodes (widgets) in the grid layout.\n *\n * @returns An array of grid layout nodes representing the widgets.\n */\n public getChildren(): AXGridLayoutNode[] {\n return this.grid().engine.nodes;\n }\n}\n","/**\n * gridstack.component.ts 11.1.1-dev\n * Copyright (c) 2022-2024 Alain Dumesny - see GridStack root license\n */\n\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { AXGridLayoutContainerComponent } from './grid-layout-container.component';\nimport { AXGridLayoutWidgetComponent } from './grid-layout-widget.component';\n\n@NgModule({\n imports: [CommonModule],\n declarations: [AXGridLayoutContainerComponent, AXGridLayoutWidgetComponent],\n exports: [AXGridLayoutContainerComponent, AXGridLayoutWidgetComponent],\n})\nexport class AXGridLayoutBuilderModule {\n // constructor() {\n // set globally our method to create the right widget type\n // GridStack.addRemoveCB = gsCreateNgComponents;\n // GridStack.saveCB = gsSaveAdditionalNgInfo;\n // }\n}\n","import { AXGridLayoutContainerComponent } from './grid-layout-container.component';\nimport { AXGridLayoutWidgetComponent } from './grid-layout-widget.component';\n//TYPES\nexport type AXGridLayoutNode = import('gridstack').GridStackNode;\nexport type AXGridLayout = import('gridstack').GridStack;\nexport type AXGridLayoutOptions = import('gridstack').GridStackOptions;\nexport type AXGridLayoutWidget = import('gridstack').GridStackWidget & { data?: any };\nexport type AXGridLayoutContainerElement = import('gridstack').GridHTMLElement;\nexport type AXGridLayoutWidgetElement = import('gridstack').GridItemHTMLElement;\n//EVENTS\nexport type AXGridLayoutEventEvent = { event: Event };\nexport type AXGridLayoutElementEvent = { event: Event; el: AXGridLayoutWidgetElement };\nexport type AXGridLayoutNodesEvent = { event: Event; nodes: AXGridLayoutNode[] };\nexport type AXGridLayoutDroppedEvent = {\n event: Event;\n previousNode: AXGridLayoutNode;\n newNode: AXGridLayoutNode;\n};\n//COMPONENTS\nexport interface AXGridLayoutContainerCompElement extends AXGridLayoutContainerElement {\n _gridComp?: AXGridLayoutContainerComponent;\n}\nexport interface AXGridLayoutWidgetCompElement extends AXGridLayoutWidgetElement {\n _gridWidgetComp?: AXGridLayoutWidgetComponent;\n}\n\n//Callback\nexport type AXSaveCallback = import('gridstack').SaveFcn;\n\n// //DYNAMIC\n// export type AXNgCompInputs = { [key: string]: any };\n// export type SelectorToType = { [key: string]: Type<object> }; // selector string to runtime Type mapping\n// export interface AXNgGridLayoutWidget extends AXGridLayoutWidget {\n// selector?: string; //Angular tag selector for this component to create at runtime\n// input?: AXNgCompInputs; // serialized data for the component input fields\n// subGridOpts?: AXNgGridLayoutOptions; // nested grid options\n// }\n// export interface AXNgGridLayoutNode extends AXGridLayoutNode {\n// selector?: string; // component type to create as content\n// }\n// export interface AXNgGridLayoutOptions extends AXGridLayoutOptions {\n// children?: AXNgGridLayoutWidget[];\n// subGridOpts?: AXNgGridLayoutOptions;\n// }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,18 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MXInputBaseValueComponent, MXLookComponent, AXComponent, AXFocusableComponent, AXClearableComponent, AXValuableComponent, MXBaseComponent } from '@acorex/components/common';
|
|
2
|
+
import { AXDialogService, AXDialogModule } from '@acorex/components/dialog';
|
|
2
3
|
import * as i0 from '@angular/core';
|
|
3
|
-
import { signal, Injectable, inject, viewChild,
|
|
4
|
+
import { signal, Injectable, inject, viewChild, forwardRef, ViewEncapsulation, Component, HostBinding, input, Renderer2, computed, NgZone, afterNextRender, effect, ChangeDetectionStrategy, NgModule } from '@angular/core';
|
|
5
|
+
import * as i1$1 from '@angular/forms';
|
|
6
|
+
import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
|
|
7
|
+
import { classes } from 'polytype';
|
|
4
8
|
import * as i1 from '@acorex/components/loading';
|
|
5
9
|
import { AXLoadingModule } from '@acorex/components/loading';
|
|
6
|
-
import { AXDialogService, AXDialogModule } from '@acorex/components/dialog';
|
|
7
|
-
import * as i1$2 from '@angular/forms';
|
|
8
|
-
import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
|
|
9
|
-
import * as i1$1 from '@acorex/components/button';
|
|
10
|
-
import { AXButtonModule } from '@acorex/components/button';
|
|
11
10
|
import * as i2 from '@acorex/components/color-box';
|
|
12
11
|
import { AXColorBoxModule } from '@acorex/components/color-box';
|
|
13
12
|
import * as i3 from '@acorex/components/tooltip';
|
|
14
13
|
import { AXTooltipModule } from '@acorex/components/tooltip';
|
|
14
|
+
import * as i1$2 from '@acorex/components/button';
|
|
15
|
+
import { AXButtonModule } from '@acorex/components/button';
|
|
15
16
|
import * as i2$1 from '@acorex/components/decorators';
|
|
16
17
|
import { AXDecoratorModule } from '@acorex/components/decorators';
|
|
17
18
|
import * as i3$1 from '@acorex/components/range-slider';
|
|
@@ -45,33 +46,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImpor
|
|
|
45
46
|
* paint container.
|
|
46
47
|
* @category Components
|
|
47
48
|
*/
|
|
48
|
-
class AXImageEditorContainerComponent extends MXLookComponent {
|
|
49
|
+
class AXImageEditorContainerComponent extends classes((MXInputBaseValueComponent), MXLookComponent) {
|
|
49
50
|
constructor() {
|
|
50
51
|
super(...arguments);
|
|
51
52
|
/** @ignore */
|
|
52
53
|
this.service = inject(AXImageEditorService);
|
|
53
54
|
this.imageEditorContainer = viewChild('f');
|
|
54
|
-
}
|
|
55
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXImageEditorContainerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
56
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: AXImageEditorContainerComponent, isStandalone: false, selector: "ax-image-editor-container", providers: [AXImageEditorService], viewQueries: [{ propertyName: "imageEditorContainer", first: true, predicate: ["f"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (service.isImageLoad()) {\n <div #f class=\"ax-editor-container ax-look-solid\">\n <ng-content> </ng-content>\n </div>\n} @else {\n <ax-loading-spinner [size]=\"16\" color=\"primary\" text=\"Loading Image ...\"></ax-loading-spinner>\n}\n", styles: ["ax-image-editor-container{display:flex;justify-content:center;align-items:center;max-width:100%}ax-image-editor-container>.ax-editor-container{display:flex;flex-direction:column;justify-content:center;align-items:center;height:auto!important}\n"], dependencies: [{ kind: "component", type: i1.AXLoadingSpinnerComponent, selector: "ax-loading-spinner", inputs: ["text", "color", "size", "stroke"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
57
|
-
}
|
|
58
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXImageEditorContainerComponent, decorators: [{
|
|
59
|
-
type: Component,
|
|
60
|
-
args: [{ selector: 'ax-image-editor-container', encapsulation: ViewEncapsulation.None, providers: [AXImageEditorService], standalone: false, template: "@if (service.isImageLoad()) {\n <div #f class=\"ax-editor-container ax-look-solid\">\n <ng-content> </ng-content>\n </div>\n} @else {\n <ax-loading-spinner [size]=\"16\" color=\"primary\" text=\"Loading Image ...\"></ax-loading-spinner>\n}\n", styles: ["ax-image-editor-container{display:flex;justify-content:center;align-items:center;max-width:100%}ax-image-editor-container>.ax-editor-container{display:flex;flex-direction:column;justify-content:center;align-items:center;height:auto!important}\n"] }]
|
|
61
|
-
}] });
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
*paint toolbar
|
|
65
|
-
* @category Components
|
|
66
|
-
*/
|
|
67
|
-
class AXImageEditorToolbarComponent extends MXInputBaseValueComponent {
|
|
68
|
-
constructor() {
|
|
69
|
-
super(...arguments);
|
|
70
55
|
/** @ignore */
|
|
71
56
|
this.dialogService = inject(AXDialogService);
|
|
72
57
|
/** @ignore */
|
|
73
|
-
this.service = inject(AXImageEditorService);
|
|
74
|
-
/** @ignore */
|
|
75
58
|
this.options = signal({
|
|
76
59
|
color: 'primary',
|
|
77
60
|
title: 'Attention',
|
|
@@ -81,45 +64,50 @@ class AXImageEditorToolbarComponent extends MXInputBaseValueComponent {
|
|
|
81
64
|
draggable: true,
|
|
82
65
|
});
|
|
83
66
|
}
|
|
84
|
-
|
|
85
|
-
saveHandler() {
|
|
67
|
+
save() {
|
|
86
68
|
if (this.service.initialImage() !== this.service.newImage()) {
|
|
87
69
|
this.dialogService
|
|
88
70
|
.confirm(this.options().title, this.options().content, this.options().color, this.options().orientation, this.options().draggable)
|
|
89
71
|
.then((data) => {
|
|
90
72
|
if (data.result) {
|
|
91
73
|
this.service.initialImage.set(this.service.newImage());
|
|
92
|
-
this.commitValue(this.service.imageBlob());
|
|
74
|
+
this.commitValue(this.service.imageBlob(), true);
|
|
93
75
|
}
|
|
94
|
-
})
|
|
76
|
+
})
|
|
77
|
+
.catch(() => this.commitValue(null));
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
this.commitValue(null);
|
|
95
81
|
}
|
|
96
82
|
}
|
|
97
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type:
|
|
98
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
99
|
-
|
|
100
|
-
{ provide:
|
|
101
|
-
{ provide:
|
|
102
|
-
{ provide:
|
|
83
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXImageEditorContainerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
84
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: AXImageEditorContainerComponent, isStandalone: false, selector: "ax-image-editor-container", inputs: { look: "look" }, outputs: { onValueChanged: "onValueChanged" }, providers: [
|
|
85
|
+
AXImageEditorService,
|
|
86
|
+
{ provide: AXComponent, useExisting: AXImageEditorContainerComponent },
|
|
87
|
+
{ provide: AXFocusableComponent, useExisting: AXImageEditorContainerComponent },
|
|
88
|
+
{ provide: AXClearableComponent, useExisting: AXImageEditorContainerComponent },
|
|
89
|
+
{ provide: AXValuableComponent, useExisting: AXImageEditorContainerComponent },
|
|
103
90
|
{
|
|
104
91
|
provide: NG_VALUE_ACCESSOR,
|
|
105
|
-
useExisting: forwardRef(() =>
|
|
92
|
+
useExisting: forwardRef(() => AXImageEditorContainerComponent),
|
|
106
93
|
multi: true,
|
|
107
94
|
},
|
|
108
|
-
], usesInheritance: true, ngImport: i0, template: "<div class=\"ax-
|
|
95
|
+
], viewQueries: [{ propertyName: "imageEditorContainer", first: true, predicate: ["f"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "@if (service.isImageLoad()) {\n <div #f class=\"ax-editor-container ax-{{ look }}\">\n <ng-content> </ng-content>\n <ng-content select=\"ax-validation-rule\"> </ng-content>\n </div>\n <div class=\"ax-error-container\"></div>\n} @else {\n <div class=\"ax-loading-spinner-container\">\n <ax-loading-spinner [size]=\"16\" color=\"primary\" text=\"Loading Image ...\"></ax-loading-spinner>\n </div>\n}\n", styles: [".ax-editor-container{--ax-comp-editor-border-radius: var(--ax-sys-border-radius);--ax-comp-editor-height: calc(var(--ax-sys-size-base) * var(--ax-comp-editor-size-ratio));--ax-comp-editor-font-family: inherit;--ax-comp-editor-font-weight: normal;--ax-comp-editor-focus-color: var(--ax-sys-color-primary-500);--ax-comp-editor-padding-y: 0;--ax-comp-editor-button-text-color: var(--ax-sys-color-input-surface-text)}.ax-xs .ax-editor-container,.ax-editor-container.ax-xs{--ax-comp-editor-size-ratio: .75;--ax-comp-editor-font-size: .675rem;--ax-comp-editor-padding-x: .188rem;--ax-comp-editor-decorator-padding-x: .125rem}.ax-sm .ax-editor-container,.ax-editor-container.ax-sm{--ax-comp-editor-size-ratio: .875;--ax-comp-editor-font-size: .75rem;--ax-comp-editor-padding-x: .375rem;--ax-comp-editor-decorator-padding-x: .25rem}.ax-md .ax-editor-container,.ax-editor-container{--ax-comp-editor-size-ratio: 1;--ax-comp-editor-font-size: .875rem;--ax-comp-editor-padding-x: .75rem;--ax-comp-editor-decorator-padding-x: .5rem}.ax-lg .ax-editor-container,.ax-editor-container.ax-lg{--ax-comp-editor-size-ratio: 1.125;--ax-comp-editor-font-size: 1rem;--ax-comp-editor-padding-x: .875rem;--ax-comp-editor-decorator-padding-x: .75rem}.ax-xl .ax-editor-container,.ax-editor-container.ax-xl{--ax-comp-editor-size-ratio: 1.5;--ax-comp-editor-font-size: 1.5rem;--ax-comp-editor-padding-x: 1rem;--ax-comp-editor-decorator-padding-x: .875rem}.ax-editor-container.ax-solid{--ax-comp-editor-bg-color: var(--ax-sys-color-input-surface);--ax-comp-editor-text-color: var(--ax-sys-color-input-surface-text);--ax-comp-editor-placeholder-color: var(--ax-sys-color-input-surface-placeholder);--ax-comp-editor-border-color: var(--ax-sys-color-input-surface-border);--ax-comp-editor-border-radius: var(--ax-sys-border-radius);--ax-comp-editor-button-bg-hover-color: var(--ax-sys-color-surface-high);--ax-comp-editor-border-width: 1px;--ax-comp-editor-box-shadow: inset 0px -1px rgba(var(--ax-comp-editor-border-color))}.ax-editor-container.ax-solid:focus,.ax-editor-container.ax-solid:focus-within,.ax-editor-container.ax-solid:focus-visible{--ax-comp-editor-border-color: var(--ax-sys-color-primary-500);--ax-comp-editor-box-shadow: 0px 0px 0 1px rgba(var(--ax-sys-color-primary-500))}.ax-editor-container.ax-fill{--ax-comp-editor-bg-color: var(--ax-sys-color-surface);--ax-comp-editor-text-color: var(--ax-sys-color-input-surface-text);--ax-comp-editor-placeholder-color: var(--ax-sys-color-input-surface-placeholder);--ax-comp-editor-border-color: transparent;--ax-comp-editor-border-radius: var(--ax-sys-border-radius);--ax-comp-editor-border-width: 0px}.ax-editor-container.ax-fill:focus,.ax-editor-container.ax-fill:focus-within,.ax-editor-container.ax-fill:focus-visible{--ax-comp-editor-border-color: var(--ax-sys-color-primary-500);--ax-comp-editor-box-shadow: 0px 0px 0 2px rgba(var(--ax-sys-color-primary-500))}.ax-editor-container.ax-outline{--ax-comp-editor-bg-color: transparent;--ax-comp-editor-text-color: var(--ax-sys-color-input-surface-text);--ax-comp-editor-placeholder-color: var(--ax-sys-color-input-surface-placeholder);--ax-comp-editor-border-color: var(--ax-sys-color-input-surface-border);--ax-comp-editor-border-radius: var(--ax-sys-border-radius);--ax-comp-editor-border-width: 1px}.ax-editor-container.ax-outline:focus,.ax-editor-container.ax-outline:focus-within,.ax-editor-container.ax-outline:focus-visible{--ax-comp-editor-border-color: var(--ax-sys-color-primary-500);--ax-comp-editor-box-shadow: 0px 0px 0 1px rgba(var(--ax-sys-color-primary-500))}.ax-editor-container.ax-flat{--ax-comp-editor-bg-color: 0, 0, 0, 0;--ax-comp-editor-text-color: var(--ax-sys-color-input-surface-text);--ax-comp-editor-placeholder-color: var(--ax-sys-color-input-surface-placeholder);--ax-comp-editor-border-color: var(--ax-sys-color-input-surface-border);--ax-comp-editor-border-radius: 0px;--ax-comp-editor-border-width: 0 0 1px 0}.ax-editor-container.ax-flat:focus,.ax-editor-container.ax-flat:focus-within,.ax-editor-container.ax-flat:focus-visible{--ax-comp-editor-border-color: var(--ax-sys-color-primary-500);--ax-comp-editor-box-shadow: 0px 1px 0 0px rgba(var(--ax-sys-color-primary-500))}.ax-editor-container{background-color:rgba(var(--ax-comp-editor-bg-color));color:rgba(var(--ax-comp-editor-text-color));border-width:var(--ax-comp-editor-border-width, 0);border-color:rgba(var(--ax-comp-editor-border-color));border-radius:var(--ax-comp-editor-border-radius);border-style:solid;display:inline-flex;align-items:center;height:var(--ax-comp-editor-height);width:100%;overflow:hidden;position:relative}.ax-editor-container:focus,.ax-editor-container:focus-within,.ax-editor-container:focus-visible{box-shadow:var(--ax-comp-editor-box-shadow)}.ax-editor-container ax-prefix{max-width:fit-content;font-size:var(--ax-comp-editor-font-size);padding-inline-start:var(--ax-comp-editor-decorator-padding-x)}.ax-editor-container ax-clear-button{margin-inline-end:var(--ax-comp-editor-decorator-padding-x)}.ax-editor-container ax-suffix{margin-inline-start:var(--ax-comp-editor-decorator-padding-x)}.ax-editor-container .ax-input{width:100%;height:100%;font-size:var(--ax-comp-editor-font-size);padding:0;outline-width:0px;padding:0 var(--ax-comp-editor-padding-x);background-color:transparent}.ax-editor-container .ax-input:focus,.ax-editor-container .ax-input:focus-visible,.ax-editor-container .ax-input:focus-within{outline:none}.ax-editor-container .ax-input::placeholder{color:rgba(var(--ax-comp-editor-placeholder-color));font-size:calc(var(--ax-comp-editor-font-size))}.ax-editor-container .ax-editor-button{height:var(--ax-comp-editor-button-height, 100%);padding:var(--ax-comp-editor-decorator-button-y, 0) var(--ax-comp-editor-decorator-button-x, .75rem);font-size:var(--ax-comp-editor-button-font-size, 100%);color:rgba(var(--ax-comp-editor-button-text-color),var(--ax-comp-editor-button-text-color-opacity, .6));display:flex;align-items:center;justify-content:center}ax-image-editor-container{width:fit-content;display:block}ax-image-editor-container>.ax-editor-container{display:flex;flex-direction:column;justify-content:center;align-items:center;height:auto!important}ax-image-editor-container .ax-loading-spinner-container{display:flex;justify-content:center;align-items:center}\n"], dependencies: [{ kind: "component", type: i1.AXLoadingSpinnerComponent, selector: "ax-loading-spinner", inputs: ["text", "color", "size", "stroke"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
109
96
|
}
|
|
110
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type:
|
|
97
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXImageEditorContainerComponent, decorators: [{
|
|
111
98
|
type: Component,
|
|
112
|
-
args: [{ selector: 'ax-image-editor-
|
|
113
|
-
|
|
114
|
-
{ provide:
|
|
115
|
-
{ provide:
|
|
116
|
-
{ provide:
|
|
99
|
+
args: [{ selector: 'ax-image-editor-container', encapsulation: ViewEncapsulation.None, standalone: false, outputs: ['onValueChanged'], inputs: ['look'], providers: [
|
|
100
|
+
AXImageEditorService,
|
|
101
|
+
{ provide: AXComponent, useExisting: AXImageEditorContainerComponent },
|
|
102
|
+
{ provide: AXFocusableComponent, useExisting: AXImageEditorContainerComponent },
|
|
103
|
+
{ provide: AXClearableComponent, useExisting: AXImageEditorContainerComponent },
|
|
104
|
+
{ provide: AXValuableComponent, useExisting: AXImageEditorContainerComponent },
|
|
117
105
|
{
|
|
118
106
|
provide: NG_VALUE_ACCESSOR,
|
|
119
|
-
useExisting: forwardRef(() =>
|
|
107
|
+
useExisting: forwardRef(() => AXImageEditorContainerComponent),
|
|
120
108
|
multi: true,
|
|
121
109
|
},
|
|
122
|
-
],
|
|
110
|
+
], template: "@if (service.isImageLoad()) {\n <div #f class=\"ax-editor-container ax-{{ look }}\">\n <ng-content> </ng-content>\n <ng-content select=\"ax-validation-rule\"> </ng-content>\n </div>\n <div class=\"ax-error-container\"></div>\n} @else {\n <div class=\"ax-loading-spinner-container\">\n <ax-loading-spinner [size]=\"16\" color=\"primary\" text=\"Loading Image ...\"></ax-loading-spinner>\n </div>\n}\n", styles: [".ax-editor-container{--ax-comp-editor-border-radius: var(--ax-sys-border-radius);--ax-comp-editor-height: calc(var(--ax-sys-size-base) * var(--ax-comp-editor-size-ratio));--ax-comp-editor-font-family: inherit;--ax-comp-editor-font-weight: normal;--ax-comp-editor-focus-color: var(--ax-sys-color-primary-500);--ax-comp-editor-padding-y: 0;--ax-comp-editor-button-text-color: var(--ax-sys-color-input-surface-text)}.ax-xs .ax-editor-container,.ax-editor-container.ax-xs{--ax-comp-editor-size-ratio: .75;--ax-comp-editor-font-size: .675rem;--ax-comp-editor-padding-x: .188rem;--ax-comp-editor-decorator-padding-x: .125rem}.ax-sm .ax-editor-container,.ax-editor-container.ax-sm{--ax-comp-editor-size-ratio: .875;--ax-comp-editor-font-size: .75rem;--ax-comp-editor-padding-x: .375rem;--ax-comp-editor-decorator-padding-x: .25rem}.ax-md .ax-editor-container,.ax-editor-container{--ax-comp-editor-size-ratio: 1;--ax-comp-editor-font-size: .875rem;--ax-comp-editor-padding-x: .75rem;--ax-comp-editor-decorator-padding-x: .5rem}.ax-lg .ax-editor-container,.ax-editor-container.ax-lg{--ax-comp-editor-size-ratio: 1.125;--ax-comp-editor-font-size: 1rem;--ax-comp-editor-padding-x: .875rem;--ax-comp-editor-decorator-padding-x: .75rem}.ax-xl .ax-editor-container,.ax-editor-container.ax-xl{--ax-comp-editor-size-ratio: 1.5;--ax-comp-editor-font-size: 1.5rem;--ax-comp-editor-padding-x: 1rem;--ax-comp-editor-decorator-padding-x: .875rem}.ax-editor-container.ax-solid{--ax-comp-editor-bg-color: var(--ax-sys-color-input-surface);--ax-comp-editor-text-color: var(--ax-sys-color-input-surface-text);--ax-comp-editor-placeholder-color: var(--ax-sys-color-input-surface-placeholder);--ax-comp-editor-border-color: var(--ax-sys-color-input-surface-border);--ax-comp-editor-border-radius: var(--ax-sys-border-radius);--ax-comp-editor-button-bg-hover-color: var(--ax-sys-color-surface-high);--ax-comp-editor-border-width: 1px;--ax-comp-editor-box-shadow: inset 0px -1px rgba(var(--ax-comp-editor-border-color))}.ax-editor-container.ax-solid:focus,.ax-editor-container.ax-solid:focus-within,.ax-editor-container.ax-solid:focus-visible{--ax-comp-editor-border-color: var(--ax-sys-color-primary-500);--ax-comp-editor-box-shadow: 0px 0px 0 1px rgba(var(--ax-sys-color-primary-500))}.ax-editor-container.ax-fill{--ax-comp-editor-bg-color: var(--ax-sys-color-surface);--ax-comp-editor-text-color: var(--ax-sys-color-input-surface-text);--ax-comp-editor-placeholder-color: var(--ax-sys-color-input-surface-placeholder);--ax-comp-editor-border-color: transparent;--ax-comp-editor-border-radius: var(--ax-sys-border-radius);--ax-comp-editor-border-width: 0px}.ax-editor-container.ax-fill:focus,.ax-editor-container.ax-fill:focus-within,.ax-editor-container.ax-fill:focus-visible{--ax-comp-editor-border-color: var(--ax-sys-color-primary-500);--ax-comp-editor-box-shadow: 0px 0px 0 2px rgba(var(--ax-sys-color-primary-500))}.ax-editor-container.ax-outline{--ax-comp-editor-bg-color: transparent;--ax-comp-editor-text-color: var(--ax-sys-color-input-surface-text);--ax-comp-editor-placeholder-color: var(--ax-sys-color-input-surface-placeholder);--ax-comp-editor-border-color: var(--ax-sys-color-input-surface-border);--ax-comp-editor-border-radius: var(--ax-sys-border-radius);--ax-comp-editor-border-width: 1px}.ax-editor-container.ax-outline:focus,.ax-editor-container.ax-outline:focus-within,.ax-editor-container.ax-outline:focus-visible{--ax-comp-editor-border-color: var(--ax-sys-color-primary-500);--ax-comp-editor-box-shadow: 0px 0px 0 1px rgba(var(--ax-sys-color-primary-500))}.ax-editor-container.ax-flat{--ax-comp-editor-bg-color: 0, 0, 0, 0;--ax-comp-editor-text-color: var(--ax-sys-color-input-surface-text);--ax-comp-editor-placeholder-color: var(--ax-sys-color-input-surface-placeholder);--ax-comp-editor-border-color: var(--ax-sys-color-input-surface-border);--ax-comp-editor-border-radius: 0px;--ax-comp-editor-border-width: 0 0 1px 0}.ax-editor-container.ax-flat:focus,.ax-editor-container.ax-flat:focus-within,.ax-editor-container.ax-flat:focus-visible{--ax-comp-editor-border-color: var(--ax-sys-color-primary-500);--ax-comp-editor-box-shadow: 0px 1px 0 0px rgba(var(--ax-sys-color-primary-500))}.ax-editor-container{background-color:rgba(var(--ax-comp-editor-bg-color));color:rgba(var(--ax-comp-editor-text-color));border-width:var(--ax-comp-editor-border-width, 0);border-color:rgba(var(--ax-comp-editor-border-color));border-radius:var(--ax-comp-editor-border-radius);border-style:solid;display:inline-flex;align-items:center;height:var(--ax-comp-editor-height);width:100%;overflow:hidden;position:relative}.ax-editor-container:focus,.ax-editor-container:focus-within,.ax-editor-container:focus-visible{box-shadow:var(--ax-comp-editor-box-shadow)}.ax-editor-container ax-prefix{max-width:fit-content;font-size:var(--ax-comp-editor-font-size);padding-inline-start:var(--ax-comp-editor-decorator-padding-x)}.ax-editor-container ax-clear-button{margin-inline-end:var(--ax-comp-editor-decorator-padding-x)}.ax-editor-container ax-suffix{margin-inline-start:var(--ax-comp-editor-decorator-padding-x)}.ax-editor-container .ax-input{width:100%;height:100%;font-size:var(--ax-comp-editor-font-size);padding:0;outline-width:0px;padding:0 var(--ax-comp-editor-padding-x);background-color:transparent}.ax-editor-container .ax-input:focus,.ax-editor-container .ax-input:focus-visible,.ax-editor-container .ax-input:focus-within{outline:none}.ax-editor-container .ax-input::placeholder{color:rgba(var(--ax-comp-editor-placeholder-color));font-size:calc(var(--ax-comp-editor-font-size))}.ax-editor-container .ax-editor-button{height:var(--ax-comp-editor-button-height, 100%);padding:var(--ax-comp-editor-decorator-button-y, 0) var(--ax-comp-editor-decorator-button-x, .75rem);font-size:var(--ax-comp-editor-button-font-size, 100%);color:rgba(var(--ax-comp-editor-button-text-color),var(--ax-comp-editor-button-text-color-opacity, .6));display:flex;align-items:center;justify-content:center}ax-image-editor-container{width:fit-content;display:block}ax-image-editor-container>.ax-editor-container{display:flex;flex-direction:column;justify-content:center;align-items:center;height:auto!important}ax-image-editor-container .ax-loading-spinner-container{display:flex;justify-content:center;align-items:center}\n"] }]
|
|
123
111
|
}] });
|
|
124
112
|
|
|
125
113
|
/**
|
|
@@ -142,11 +130,11 @@ class AXImageEditorColorPickerComponent {
|
|
|
142
130
|
return `.5rem`;
|
|
143
131
|
}
|
|
144
132
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXImageEditorColorPickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
145
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: AXImageEditorColorPickerComponent, isStandalone: false, selector: "ax-image-editor-color-picker", host: { properties: { "style.marginInline": "this.__hostClass" } }, ngImport: i0, template: "<ax-color-box\n axTooltip=\"Color Picker\"\n axTooltipPlacement=\"top\"\n look=\"
|
|
133
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: AXImageEditorColorPickerComponent, isStandalone: false, selector: "ax-image-editor-color-picker", host: { properties: { "style.marginInline": "this.__hostClass" } }, ngImport: i0, template: "<ax-color-box\n axTooltip=\"Color Picker\"\n axTooltipPlacement=\"top\"\n look=\"solid\"\n [ngModel]=\"selectedColor()\"\n (ngModelChange)=\"changeColorHandler($event)\"\n>\n</ax-color-box>\n", styles: ["ax-image-editor-color-picker{margin-inline:0!important}ax-image-editor-color-picker .ax-submit-color{border:1px solid rgba(var(--ax-sys-body-text-color));width:.6rem;height:.6rem;border-radius:1000vmax}ax-image-editor-color-picker .ax-color-flex-container{display:flex;align-items:center;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.AXColorBoxComponent, selector: "ax-color-box", inputs: ["disabled", "readonly", "tabIndex", "placeholder", "minValue", "maxValue", "value", "state", "name", "id", "type", "look", "showBadge", "showValue", "showClearButton", "showIcon"], outputs: ["valueChange", "stateChange", "onValueChanged", "onBlur", "onFocus", "readonlyChange", "disabledChange"] }, { kind: "directive", type: i3.AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltip", "axTooltipPlacement", "axTooltipOpenAfter", "axTooltipCloseAfter"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
146
134
|
}
|
|
147
135
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXImageEditorColorPickerComponent, decorators: [{
|
|
148
136
|
type: Component,
|
|
149
|
-
args: [{ selector: 'ax-image-editor-color-picker', encapsulation: ViewEncapsulation.None, standalone: false, template: "<ax-color-box\n axTooltip=\"Color Picker\"\n axTooltipPlacement=\"top\"\n look=\"
|
|
137
|
+
args: [{ selector: 'ax-image-editor-color-picker', encapsulation: ViewEncapsulation.None, standalone: false, template: "<ax-color-box\n axTooltip=\"Color Picker\"\n axTooltipPlacement=\"top\"\n look=\"solid\"\n [ngModel]=\"selectedColor()\"\n (ngModelChange)=\"changeColorHandler($event)\"\n>\n</ax-color-box>\n", styles: ["ax-image-editor-color-picker{margin-inline:0!important}ax-image-editor-color-picker .ax-submit-color{border:1px solid rgba(var(--ax-sys-body-text-color));width:.6rem;height:.6rem;border-radius:1000vmax}ax-image-editor-color-picker .ax-color-flex-container{display:flex;align-items:center;cursor:pointer}\n"] }]
|
|
150
138
|
}], propDecorators: { __hostClass: [{
|
|
151
139
|
type: HostBinding,
|
|
152
140
|
args: ['style.marginInline']
|
|
@@ -176,7 +164,7 @@ class AXImageEditorCropComponent {
|
|
|
176
164
|
});
|
|
177
165
|
}
|
|
178
166
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXImageEditorCropComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
179
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: AXImageEditorCropComponent, isStandalone: false, selector: "ax-image-editor-crop", ngImport: i0, template: "<ax-button\n axTooltip=\"Crop Image\"\n axTooltipPlacement=\"top\"\n [selected]=\"service.cropState().state && true\"\n (click)=\"crop()\"\n look=\"blank\"\n>\n <ax-icon class=\"ax-icon ax-icon-crop\"></ax-icon>\n</ax-button>\n\n<ax-button axTooltip=\"Rotate Left\" axTooltipPlacement=\"top\" (click)=\"rotateLeftHandler()\" look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-undo\"></ax-icon>\n</ax-button>\n\n<ax-button axTooltip=\"Rotate Right\" axTooltipPlacement=\"top\" (click)=\"rotateRightHandler()\" look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-redo\"></ax-icon>\n</ax-button>\n", dependencies: [{ kind: "component", type: i1$
|
|
167
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: AXImageEditorCropComponent, isStandalone: false, selector: "ax-image-editor-crop", ngImport: i0, template: "<ax-button\n axTooltip=\"Crop Image\"\n axTooltipPlacement=\"top\"\n [selected]=\"service.cropState().state && true\"\n (click)=\"crop()\"\n look=\"blank\"\n>\n <ax-icon class=\"ax-icon ax-icon-crop\"></ax-icon>\n</ax-button>\n\n<ax-button axTooltip=\"Rotate Left\" axTooltipPlacement=\"top\" (click)=\"rotateLeftHandler()\" look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-undo\"></ax-icon>\n</ax-button>\n\n<ax-button axTooltip=\"Rotate Right\" axTooltipPlacement=\"top\" (click)=\"rotateRightHandler()\" look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-redo\"></ax-icon>\n</ax-button>\n", dependencies: [{ kind: "component", type: i1$2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "component", type: i2$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "directive", type: i3.AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltip", "axTooltipPlacement", "axTooltipOpenAfter", "axTooltipCloseAfter"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
180
168
|
}
|
|
181
169
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXImageEditorCropComponent, decorators: [{
|
|
182
170
|
type: Component,
|
|
@@ -221,7 +209,7 @@ class AXImageEditorPenModeChangerComponent {
|
|
|
221
209
|
this.service.lineWidth.set(e);
|
|
222
210
|
}
|
|
223
211
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXImageEditorPenModeChangerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
224
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: AXImageEditorPenModeChangerComponent, isStandalone: false, selector: "ax-image-editor-pen-mode-changer", host: { properties: { "style.marginInline": "this.__hostClass" } }, ngImport: i0, template: "<ax-button axTooltip=\"Draw Utilities\" axTooltipPlacement=\"top\" look=\"blank\" #alignPop>\n @switch (service.penType()) {\n @case ('pen') {\n <ax-icon class=\"ax-icon ax-icon-pen\"></ax-icon>\n }\n @case ('highlight') {\n <ax-icon class=\"ax-icon ax-icon-highlight\"></ax-icon>\n }\n }\n</ax-button>\n\n<ax-button axTooltip=\"Reset Changes\" axTooltipPlacement=\"top\" (click)=\"clear()\" look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-refresh\"></ax-icon>\n</ax-button>\n\n<ax-popover\n [openOn]=\"popoverOption.openOn\"\n [closeOn]=\"popoverOption.closeOn\"\n [target]=\"alignPop\"\n [placement]=\"popoverOption.placement\"\n>\n <div class=\"ax-overlay-pane\">\n <ax-button\n (click)=\"penTypeHandler('pen')\"\n look=\"blank\"\n [selected]=\"this.service.penType() === 'pen' ? true : false\"\n >\n <ax-icon class=\"ax-icon ax-icon-pen\"></ax-icon>\n </ax-button>\n\n <ax-button\n (click)=\"penTypeHandler('highlight')\"\n look=\"blank\"\n [selected]=\"this.service.penType() === 'highlight' ? true : false\"\n >\n <ax-icon class=\"ax-icon ax-icon-highlight\"></ax-icon>\n </ax-button>\n\n <div class=\"ax-paint-width-slider\">\n <ax-range-slider\n [min]=\"2\"\n [max]=\"20\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"valueHandler($event)\"\n ></ax-range-slider>\n </div>\n </div>\n</ax-popover>\n", styles: ["ax-image-editor-pen-mode-changer{margin-inline:0!important}ax-image-editor-pen-mode-changer ax-range-slider{padding:.5rem .75rem}ax-image-editor-pen-mode-changer ax-range-slider .ax-range-slider .ax-range-slider-handler{width:1rem!important;height:1rem!important}ax-image-editor-pen-mode-changer .ax-paint-pen-mode-changer-container{display:flex;align-items:center}ax-image-editor-pen-mode-changer .ax-paint-pen-mode-changer-container .ax-pen-type-container{margin-inline-end:.5rem}ax-image-editor-pen-mode-changer .ax-overlay-pane{padding:.5rem!important}\n"], dependencies: [{ kind: "component", type: i1$
|
|
212
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.0.3", type: AXImageEditorPenModeChangerComponent, isStandalone: false, selector: "ax-image-editor-pen-mode-changer", host: { properties: { "style.marginInline": "this.__hostClass" } }, ngImport: i0, template: "<ax-button axTooltip=\"Draw Utilities\" axTooltipPlacement=\"top\" look=\"blank\" #alignPop>\n @switch (service.penType()) {\n @case ('pen') {\n <ax-icon class=\"ax-icon ax-icon-pen\"></ax-icon>\n }\n @case ('highlight') {\n <ax-icon class=\"ax-icon ax-icon-highlight\"></ax-icon>\n }\n }\n</ax-button>\n\n<ax-button axTooltip=\"Reset Changes\" axTooltipPlacement=\"top\" (click)=\"clear()\" look=\"blank\">\n <ax-icon class=\"ax-icon ax-icon-refresh\"></ax-icon>\n</ax-button>\n\n<ax-popover\n [openOn]=\"popoverOption.openOn\"\n [closeOn]=\"popoverOption.closeOn\"\n [target]=\"alignPop\"\n [placement]=\"popoverOption.placement\"\n>\n <div class=\"ax-overlay-pane\">\n <ax-button\n (click)=\"penTypeHandler('pen')\"\n look=\"blank\"\n [selected]=\"this.service.penType() === 'pen' ? true : false\"\n >\n <ax-icon class=\"ax-icon ax-icon-pen\"></ax-icon>\n </ax-button>\n\n <ax-button\n (click)=\"penTypeHandler('highlight')\"\n look=\"blank\"\n [selected]=\"this.service.penType() === 'highlight' ? true : false\"\n >\n <ax-icon class=\"ax-icon ax-icon-highlight\"></ax-icon>\n </ax-button>\n\n <div class=\"ax-paint-width-slider\">\n <ax-range-slider\n [min]=\"2\"\n [max]=\"20\"\n [(ngModel)]=\"value\"\n (ngModelChange)=\"valueHandler($event)\"\n ></ax-range-slider>\n </div>\n </div>\n</ax-popover>\n", styles: ["ax-image-editor-pen-mode-changer{margin-inline:0!important}ax-image-editor-pen-mode-changer ax-range-slider{padding:.5rem .75rem}ax-image-editor-pen-mode-changer ax-range-slider .ax-range-slider .ax-range-slider-handler{width:1rem!important;height:1rem!important}ax-image-editor-pen-mode-changer .ax-paint-pen-mode-changer-container{display:flex;align-items:center}ax-image-editor-pen-mode-changer .ax-paint-pen-mode-changer-container .ax-pen-type-container{margin-inline-end:.5rem}ax-image-editor-pen-mode-changer .ax-overlay-pane{padding:.5rem!important}\n"], dependencies: [{ kind: "component", type: i1$2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3$1.AXRangeSliderComponent, selector: "ax-range-slider", inputs: ["disabled", "readonly", "orientation", "color", "values", "mode", "min", "max", "step", "snap", "tooltipMode", "snapMode", "hasStep", "hasSnap", "hasLable", "hasTooltip"], outputs: ["valuesChange"] }, { kind: "component", type: i4.AXPopoverComponent, selector: "ax-popover", inputs: ["offsetX", "offsetY", "target", "placement", "content", "openOn", "closeOn", "hasBackdrop", "openAfter", "closeAfter", "backdropClass", "panelClass", "adaptivityEnabled"], outputs: ["onOpened", "onClosed"] }, { kind: "component", type: i2$1.AXDecoratorIconComponent, selector: "ax-icon", inputs: ["icon"] }, { kind: "directive", type: i3.AXTooltipDirective, selector: "[axTooltip]", inputs: ["axTooltip", "axTooltipPlacement", "axTooltipOpenAfter", "axTooltipCloseAfter"] }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
225
213
|
}
|
|
226
214
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXImageEditorPenModeChangerComponent, decorators: [{
|
|
227
215
|
type: Component,
|
|
@@ -580,7 +568,7 @@ class AXImageEditorViewComponent extends MXBaseComponent {
|
|
|
580
568
|
return `width: ${this.service.initialImage()?.width}px; height: ${this.service.initialImage()?.height}px`;
|
|
581
569
|
}
|
|
582
570
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXImageEditorViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
583
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.0.3", type: AXImageEditorViewComponent, isStandalone: false, selector: "ax-image-editor-view", inputs: { src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style": "this.__hostStyle" } }, viewQueries: [{ propertyName: "canvasElem", first: true, predicate: ["canvasElem"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<canvas\n tabindex=\"1\"\n (mousedown)=\"mouseDownHandler($event)\"\n (mouseup)=\"mouseUpHandler()\"\n (mousemove)=\"mouseMoveHandler($event)\"\n (touchstart)=\"touchStartHandler($event)\"\n (touchend)=\"touchEndHandler()\"\n (touchmove)=\"touchMoveHandler($event)\"\n class=\"ax-canvas-element\"\n #canvasElem\n></canvas>\n<ax-button\n (click)=\"cropButtonHandler()\"\n [style]=\"{ display: service.cropState().state ? 'block' : 'none' }\"\n class=\"ax-crop-save ax-sm\"\n text=\"Crop\"\n></ax-button>\n", styles: ["ax-image-editor-view{position:relative;display:flex;justify-content:center;align-items:center;background-color:#fff;width:100%}ax-image-editor-view .ax-canvas-element{cursor:crosshair}ax-image-editor-view .ax-crop-save{position:absolute;top:0;right:0;margin:1rem}\n"], dependencies: [{ kind: "component", type: i1$
|
|
571
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "19.0.3", type: AXImageEditorViewComponent, isStandalone: false, selector: "ax-image-editor-view", inputs: { src: { classPropertyName: "src", publicName: "src", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style": "this.__hostStyle" } }, viewQueries: [{ propertyName: "canvasElem", first: true, predicate: ["canvasElem"], descendants: true, isSignal: true }], usesInheritance: true, ngImport: i0, template: "<canvas\n tabindex=\"1\"\n (mousedown)=\"mouseDownHandler($event)\"\n (mouseup)=\"mouseUpHandler()\"\n (mousemove)=\"mouseMoveHandler($event)\"\n (touchstart)=\"touchStartHandler($event)\"\n (touchend)=\"touchEndHandler()\"\n (touchmove)=\"touchMoveHandler($event)\"\n class=\"ax-canvas-element\"\n #canvasElem\n></canvas>\n<ax-button\n (click)=\"cropButtonHandler()\"\n [style]=\"{ display: service.cropState().state ? 'block' : 'none' }\"\n class=\"ax-crop-save ax-sm\"\n text=\"Crop\"\n></ax-button>\n", styles: ["ax-image-editor-view{position:relative;display:flex;justify-content:center;align-items:center;background-color:#fff;width:100%}ax-image-editor-view .ax-canvas-element{cursor:crosshair}ax-image-editor-view .ax-crop-save{position:absolute;top:0;right:0;margin:1rem}\n"], dependencies: [{ kind: "component", type: i1$2.AXButtonComponent, selector: "ax-button", inputs: ["disabled", "size", "tabIndex", "color", "look", "text", "toggleable", "selected", "type", "loadingText"], outputs: ["onBlur", "onFocus", "onClick", "selectedChange", "toggleableChange", "lookChange", "colorChange", "disabledChange", "loadingTextChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
584
572
|
}
|
|
585
573
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXImageEditorViewComponent, decorators: [{
|
|
586
574
|
type: Component,
|
|
@@ -591,7 +579,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImpor
|
|
|
591
579
|
}] } });
|
|
592
580
|
|
|
593
581
|
const COMPONENT = [
|
|
594
|
-
AXImageEditorToolbarComponent,
|
|
595
582
|
AXImageEditorColorPickerComponent,
|
|
596
583
|
AXImageEditorPenModeChangerComponent,
|
|
597
584
|
AXImageEditorViewComponent,
|
|
@@ -612,8 +599,7 @@ const MODULES = [
|
|
|
612
599
|
];
|
|
613
600
|
class AXImageEditorModule {
|
|
614
601
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: AXImageEditorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
615
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.3", ngImport: i0, type: AXImageEditorModule, declarations: [
|
|
616
|
-
AXImageEditorColorPickerComponent,
|
|
602
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.3", ngImport: i0, type: AXImageEditorModule, declarations: [AXImageEditorColorPickerComponent,
|
|
617
603
|
AXImageEditorPenModeChangerComponent,
|
|
618
604
|
AXImageEditorViewComponent,
|
|
619
605
|
AXImageEditorContainerComponent,
|
|
@@ -626,8 +612,7 @@ class AXImageEditorModule {
|
|
|
626
612
|
AXDecoratorModule,
|
|
627
613
|
AXLoadingModule,
|
|
628
614
|
AXDialogModule,
|
|
629
|
-
AXTooltipModule], exports: [
|
|
630
|
-
AXImageEditorColorPickerComponent,
|
|
615
|
+
AXTooltipModule], exports: [AXImageEditorColorPickerComponent,
|
|
631
616
|
AXImageEditorPenModeChangerComponent,
|
|
632
617
|
AXImageEditorViewComponent,
|
|
633
618
|
AXImageEditorContainerComponent,
|
|
@@ -648,5 +633,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImpor
|
|
|
648
633
|
* Generated bundle index. Do not edit.
|
|
649
634
|
*/
|
|
650
635
|
|
|
651
|
-
export { AXImageEditorColorPickerComponent, AXImageEditorContainerComponent, AXImageEditorCropComponent, AXImageEditorModule, AXImageEditorPenModeChangerComponent,
|
|
636
|
+
export { AXImageEditorColorPickerComponent, AXImageEditorContainerComponent, AXImageEditorCropComponent, AXImageEditorModule, AXImageEditorPenModeChangerComponent, AXImageEditorViewComponent };
|
|
652
637
|
//# sourceMappingURL=acorex-components-image-editor.mjs.map
|