ngx-kit 8.1.0 → 8.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngx-kit-tooltip.mjs","sources":["../../../projects/libs/tooltip/types/configs.ts","../../../projects/libs/tooltip/providers/tootip.provider.ts","../../../projects/libs/tooltip/directives/ngx-tooltip.directive.ts","../../../projects/libs/tooltip/ngx-kit-tooltip.ts"],"sourcesContent":["import type { NgxTooltipPlacement, NgxTooltipTrigger } from '../public-api';\n\nconst DEFAULT_OFFSET = 8;\nconst SHOW_DELAY = 80;\nconst HIDE_DELAY = 40;\n\nexport class NgxTooltipConfig {\n placement: NgxTooltipPlacement = 'bottom';\n offset: number = DEFAULT_OFFSET;\n delay: number = SHOW_DELAY;\n hideDelay: number = HIDE_DELAY;\n useHtml: boolean = false;\n usePopOver: boolean = true;\n trigger: NgxTooltipTrigger = 'hover';\n \n}\n","import { InjectionToken, makeEnvironmentProviders, type EnvironmentProviders } from '@angular/core';\nimport { NgxTooltipConfig } from '../types/configs';\n\nexport const NGX_TOOLTIP_CONFIG = new InjectionToken<NgxTooltipConfig>('ngx-tooltip-config', {\n factory: () => new NgxTooltipConfig(),\n});\nexport function provideTooltip(configs?: NgxTooltipConfig): EnvironmentProviders {\n return makeEnvironmentProviders([\n {\n provide: NGX_TOOLTIP_CONFIG,\n useValue: { ...new NgxTooltipConfig(), ...(configs || {}) },\n },\n ]);\n}\n","import {\n Directive,\n DOCUMENT,\n effect,\n ElementRef,\n inject,\n input,\n NgZone,\n OnDestroy,\n Renderer2,\n SecurityContext,\n} from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { NgxTooltipPlacement } from '../types/placement';\nimport { NgxTooltipTrigger } from '../types/trigger';\nimport { NGX_TOOLTIP_CONFIG } from '../providers/tootip.provider';\n\nconst TOOLTIP_CLASS = 'ngx-tooltip';\nconst VISIBLE_CLASS = 'ngx-tooltip-visible';\nconst VIEWPORT_PADDING = 8;\n\n@Directive({\n selector: '[ngxTooltip]',\n standalone: true,\n})\nexport class NgxTooltip implements OnDestroy {\n private readonly configs = inject(NGX_TOOLTIP_CONFIG);\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly renderer = inject(Renderer2);\n private readonly sanitizer = inject(DomSanitizer);\n private readonly doc = inject(DOCUMENT);\n\n private readonly element = this.elementRef.nativeElement;\n\n private tooltip?: HTMLElement;\n\n private showTimer?: ReturnType<typeof setTimeout>;\n private hideTimer?: ReturnType<typeof setTimeout>;\n\n private rafId = 0;\n private visible = false;\n private destroyed = false;\n\n private removeMouseEnter?: () => void;\n private removeMouseLeave?: () => void;\n private removeFocusIn?: () => void;\n private removeFocusOut?: () => void;\n private removeScroll?: () => void;\n private removeResize?: () => void;\n\n readonly tooltipText = input.required<string>({ alias: 'ngxTooltip' });\n readonly ngxTooltipUseOverlay = input<boolean>(true);\n\n readonly ngxTooltipPlacement = input<NgxTooltipPlacement>('bottom');\n\n readonly ngxTooltipOffset = input<number>(this.configs.offset);\n\n readonly ngxTooltipDelay = input<number>(this.configs.delay);\n\n readonly ngxTooltipHideDelay = input<number>(this.configs.hideDelay);\n\n readonly ngxTooltipAllowHtml = input<boolean>(false);\n\n readonly ngxTooltipTrigger = input<NgxTooltipTrigger>('hover');\n\n /**\n * If true, the tooltip automatically changes placement\n * when there is not enough room.\n */\n readonly ngxTooltipFlip = input<boolean>(true);\n\n /**\n * Keeps the tooltip inside the viewport.\n */\n readonly ngxTooltipShift = input<boolean>(true);\n\n constructor() {\n effect(() => {\n const trigger = this.ngxTooltipTrigger();\n this.bindEvents();\n });\n }\n\n ngOnDestroy(): void {\n this.destroyed = true;\n\n this.clearTimers();\n\n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n this.rafId = 0;\n }\n\n this.removeListeners();\n\n this.tooltip?.remove();\n this.tooltip = undefined;\n }\n\n private bindEvents(): void {\n const trigger = this.ngxTooltipTrigger();\n this.removeMouseEnter?.();\n this.removeMouseLeave?.();\n this.removeFocusIn?.();\n this.removeFocusOut?.();\n\n if (trigger === 'hover' || trigger === 'hover-focus') {\n this.removeMouseEnter = this.renderer.listen(this.element, 'mouseenter', () =>\n this.scheduleShow(),\n );\n\n this.removeMouseLeave = this.renderer.listen(this.element, 'mouseleave', () =>\n this.scheduleHide(),\n );\n }\n\n if (trigger === 'focus' || trigger === 'hover-focus') {\n this.removeFocusIn = this.renderer.listen(this.element, 'focusin', () => this.scheduleShow());\n\n this.removeFocusOut = this.renderer.listen(this.element, 'focusout', () =>\n this.scheduleHide(),\n );\n }\n }\n\n private scheduleShow(): void {\n if (this.destroyed || !this.hasContent()) {\n return;\n }\n\n this.clearHideTimer();\n\n if (this.visible) {\n this.schedulePositionUpdate();\n return;\n }\n\n this.clearShowTimer();\n\n this.showTimer = setTimeout(\n () => {\n this.showTimer = undefined;\n\n if (!this.destroyed) {\n this.show();\n }\n },\n Math.max(0, this.ngxTooltipDelay()),\n );\n }\n\n private scheduleHide(): void {\n this.clearShowTimer();\n\n if (!this.visible) {\n return;\n }\n\n this.clearHideTimer();\n\n this.hideTimer = setTimeout(\n () => {\n this.hideTimer = undefined;\n\n if (!this.destroyed) {\n this.hide();\n }\n },\n Math.max(0, this.ngxTooltipHideDelay()),\n );\n }\n\n private show(): void {\n if (this.visible || this.destroyed || !this.hasContent()) {\n return;\n }\n\n const tooltip = this.getOrCreateTooltip();\n\n this.updateContent(tooltip);\n\n const doc = this.element.ownerDocument;\n\n if (!tooltip.isConnected) {\n doc.body.appendChild(tooltip);\n }\n\n this.applyDirection();\n\n this.visible = true;\n\n if (this.ngxTooltipUseOverlay()) {\n const popover = tooltip as HTMLElement & {\n showPopover?: () => void;\n };\n\n popover.showPopover?.();\n }\n\n tooltip.classList.add(VISIBLE_CLASS);\n\n this.schedulePositionUpdate();\n this.addViewportListeners();\n }\n\n private hide(): void {\n if (!this.visible) {\n return;\n }\n\n this.visible = false;\n\n this.clearShowTimer();\n\n if (this.rafId) {\n cancelAnimationFrame(this.rafId);\n this.rafId = 0;\n }\n\n this.tooltip?.classList.remove(VISIBLE_CLASS);\n\n if (this.ngxTooltipUseOverlay() && this.tooltip?.matches(':popover-open')) {\n (\n this.tooltip as HTMLElement & {\n hidePopover(): void;\n }\n ).hidePopover();\n }\n\n // Tooltip should not stay in the DOM while hidden.\n this.tooltip?.remove();\n\n this.removeViewportListeners();\n }\n\n private getOrCreateTooltip(): HTMLElement {\n if (this.tooltip) {\n return this.tooltip;\n }\n\n const doc = this.element.ownerDocument;\n\n const tooltip = doc.createElement('div');\n\n tooltip.className = TOOLTIP_CLASS;\n tooltip.setAttribute('role', 'tooltip');\n\n if (this.ngxTooltipUseOverlay()) {\n tooltip.setAttribute('popover', 'manual');\n }\n\n tooltip.style.position = 'fixed';\n tooltip.style.left = '0';\n tooltip.style.top = '0';\n\n const content = doc.createElement('div');\n content.className = 'ngx-tooltip-content';\n\n tooltip.appendChild(content);\n\n this.tooltip = tooltip;\n\n return tooltip;\n }\n\n private updateContent(tooltip: HTMLElement): void {\n const content = tooltip.firstElementChild as HTMLElement | null;\n\n if (!content) {\n return;\n }\n\n const value = this.tooltipText() ?? '';\n if (this.ngxTooltipAllowHtml()) {\n content.innerHTML = this.sanitizer.sanitize(SecurityContext.STYLE, value) ?? '';\n } else {\n content.textContent = value;\n }\n }\n\n private applyDirection(): void {\n if (!this.tooltip) {\n return;\n }\n\n const direction = getComputedStyle(this.element).direction;\n\n this.tooltip.style.direction = direction;\n }\n\n private schedulePositionUpdate(): void {\n if (!this.visible || this.destroyed || !this.tooltip) {\n return;\n }\n\n if (this.rafId) {\n return;\n }\n\n this.rafId = requestAnimationFrame(() => {\n this.rafId = 0;\n\n if (!this.visible || this.destroyed) {\n return;\n }\n\n this.positionTooltip();\n });\n }\n\n private positionTooltip(): void {\n const tooltip = this.tooltip;\n\n if (!tooltip || !this.visible) {\n return;\n }\n\n const win = this.element.ownerDocument.defaultView;\n\n if (!win) {\n return;\n }\n\n const targetRect = this.element.getBoundingClientRect();\n\n if (targetRect.width === 0 || targetRect.height === 0 || !this.intersectsViewport(targetRect)) {\n tooltip.style.visibility = 'hidden';\n return;\n }\n\n tooltip.style.visibility = 'hidden';\n\n const tooltipRect = tooltip.getBoundingClientRect();\n\n const viewportWidth = win.innerWidth;\n const viewportHeight = win.innerHeight;\n\n const requestedPlacement = this.ngxTooltipPlacement();\n\n const placement = this.ngxTooltipFlip()\n ? this.findBestPlacement(\n requestedPlacement,\n targetRect,\n tooltipRect,\n viewportWidth,\n viewportHeight,\n )\n : requestedPlacement;\n\n let { left, top } = this.calculatePosition(\n placement,\n targetRect,\n tooltipRect,\n this.ngxTooltipOffset(),\n );\n\n if (this.ngxTooltipShift()) {\n const shifted = this.shiftIntoViewport(left, top, tooltipRect, viewportWidth, viewportHeight);\n\n left = shifted.left;\n top = shifted.top;\n }\n\n tooltip.dataset['placement'] = placement;\n\n tooltip.style.left = `${Math.round(left)}px`;\n tooltip.style.top = `${Math.round(top)}px`;\n\n tooltip.style.visibility = 'visible';\n }\n\n private calculatePosition(\n placement: NgxTooltipPlacement,\n target: DOMRect,\n tooltip: DOMRect,\n offset: number,\n ): { left: number; top: number } {\n const [side, align] = this.parsePlacement(placement);\n\n let left: number = 0;\n let top: number = 0;\n\n switch (side) {\n case 'top':\n top = target.top - tooltip.height - offset;\n break;\n\n case 'bottom':\n top = target.bottom + offset;\n break;\n\n case 'left':\n left = target.left - tooltip.width - offset;\n break;\n\n case 'right':\n left = target.right + offset;\n break;\n }\n\n if (side === 'top' || side === 'bottom') {\n switch (align) {\n case 'start':\n left = target.left;\n break;\n\n case 'end':\n left = target.right - tooltip.width;\n break;\n\n default:\n left = target.left + (target.width - tooltip.width) / 2;\n }\n } else {\n switch (align) {\n case 'start':\n top = target.top;\n break;\n\n case 'end':\n top = target.bottom - tooltip.height;\n break;\n\n default:\n top = target.top + (target.height - tooltip.height) / 2;\n }\n }\n\n return { left, top };\n }\n\n private findBestPlacement(\n requested: NgxTooltipPlacement,\n target: DOMRect,\n tooltip: DOMRect,\n viewportWidth: number,\n viewportHeight: number,\n ): NgxTooltipPlacement {\n const candidates = this.getPlacementCandidates(requested);\n\n for (const placement of candidates) {\n const position = this.calculatePosition(placement, target, tooltip, this.ngxTooltipOffset());\n\n if (this.fitsViewport(position.left, position.top, tooltip, viewportWidth, viewportHeight)) {\n return placement;\n }\n }\n\n return requested;\n }\n\n private getPlacementCandidates(placement: NgxTooltipPlacement): NgxTooltipPlacement[] {\n switch (placement) {\n case 'top':\n return ['top', 'bottom', 'right', 'left'];\n\n case 'bottom':\n return ['bottom', 'top', 'right', 'left'];\n\n case 'left':\n return ['left', 'right', 'top', 'bottom'];\n\n case 'right':\n return ['right', 'left', 'top', 'bottom'];\n }\n }\n\n private shiftIntoViewport(\n left: number,\n top: number,\n tooltip: DOMRect,\n viewportWidth: number,\n viewportHeight: number,\n ): { left: number; top: number } {\n const minLeft = VIEWPORT_PADDING;\n const maxLeft = viewportWidth - tooltip.width - VIEWPORT_PADDING;\n\n const minTop = VIEWPORT_PADDING;\n const maxTop = viewportHeight - tooltip.height - VIEWPORT_PADDING;\n\n left = Math.min(Math.max(left, minLeft), Math.max(minLeft, maxLeft));\n\n top = Math.min(Math.max(top, minTop), Math.max(minTop, maxTop));\n\n return { left, top };\n }\n\n private fitsViewport(\n left: number,\n top: number,\n tooltip: DOMRect,\n viewportWidth: number,\n viewportHeight: number,\n ): boolean {\n return (\n left >= VIEWPORT_PADDING &&\n top >= VIEWPORT_PADDING &&\n left + tooltip.width <= viewportWidth - VIEWPORT_PADDING &&\n top + tooltip.height <= viewportHeight - VIEWPORT_PADDING\n );\n }\n\n private intersectsViewport(rect: DOMRect): boolean {\n const win = this.element.ownerDocument.defaultView;\n\n if (!win) {\n return false;\n }\n\n return (\n rect.bottom > 0 && rect.right > 0 && rect.top < win.innerHeight && rect.left < win.innerWidth\n );\n }\n\n private parsePlacement(\n placement: NgxTooltipPlacement,\n ): ['top' | 'bottom' | 'left' | 'right', 'start' | 'end' | 'center'] {\n const [side, alignment] = placement.split('-') as [\n 'top' | 'bottom' | 'left' | 'right',\n 'start' | 'end' | undefined,\n ];\n\n return [side, alignment ?? 'center'];\n }\n\n private addViewportListeners(): void {\n if (this.removeScroll || this.removeResize) {\n return;\n }\n\n const win = this.element.ownerDocument.defaultView;\n\n if (!win) {\n return;\n }\n\n const onScroll = () => this.schedulePositionUpdate();\n const onResize = () => this.schedulePositionUpdate();\n\n win.addEventListener('scroll', onScroll, {\n passive: true,\n });\n\n win.addEventListener('resize', onResize, {\n passive: true,\n });\n\n this.removeScroll = () => {\n win.removeEventListener('scroll', onScroll);\n };\n\n this.removeResize = () => {\n win.removeEventListener('resize', onResize);\n };\n }\n\n private removeViewportListeners(): void {\n this.removeScroll?.();\n this.removeScroll = undefined;\n\n this.removeResize?.();\n this.removeResize = undefined;\n }\n\n private removeListeners(): void {\n this.removeMouseEnter?.();\n this.removeMouseLeave?.();\n this.removeFocusIn?.();\n this.removeFocusOut?.();\n\n this.removeMouseEnter = undefined;\n this.removeMouseLeave = undefined;\n this.removeFocusIn = undefined;\n this.removeFocusOut = undefined;\n }\n\n private hasContent(): boolean {\n return !!this.tooltipText()?.trim();\n }\n\n private clearTimers(): void {\n this.clearShowTimer();\n this.clearHideTimer();\n }\n\n private clearShowTimer(): void {\n if (this.showTimer !== undefined) {\n clearTimeout(this.showTimer);\n this.showTimer = undefined;\n }\n }\n\n private clearHideTimer(): void {\n if (this.hideTimer !== undefined) {\n clearTimeout(this.hideTimer);\n this.hideTimer = undefined;\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  # ngx-kit/gradient-picker
2
2
 
3
- A linear/radial gradient picker with multiple draggable color stops, outputting a ready-to-use CSS string.
3
+ A linear, radial, conic, and repeating gradient picker with multiple draggable color stops, outputting a ready-to-use CSS string.
4
4
 
5
5
  ## Install
6
6
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ngx-kit",
3
- "version": "8.1.0",
3
+ "version": "8.3.0",
4
4
  "description": "Angular input components",
5
5
  "author": "Mohammadreza Samani <mr.samani1368@gmail.com>",
6
6
  "license": "MIT",
@@ -117,6 +117,10 @@
117
117
  "types": "./types/ngx-kit-time-picker.d.ts",
118
118
  "default": "./fesm2022/ngx-kit-time-picker.mjs"
119
119
  },
120
+ "./tooltip": {
121
+ "types": "./types/ngx-kit-tooltip.d.ts",
122
+ "default": "./fesm2022/ngx-kit-tooltip.mjs"
123
+ },
120
124
  "./virtual-scroll": {
121
125
  "types": "./types/ngx-kit-virtual-scroll.d.ts",
122
126
  "default": "./fesm2022/ngx-kit-virtual-scroll.mjs"
package/styles/all.css CHANGED
@@ -12,41 +12,6 @@
12
12
  color-scheme: only dark;
13
13
  }
14
14
 
15
- dialog.ngx-ui-overlay::backdrop {
16
- background: transparent;
17
- }
18
-
19
- @keyframes menu-enter {
20
- from {
21
- opacity: 0;
22
- transform: scale(0.8);
23
- }
24
- to {
25
- opacity: 1;
26
- transform: none;
27
- }
28
- }
29
- @keyframes menu-exit {
30
- from {
31
- opacity: 1;
32
- }
33
- to {
34
- opacity: 0;
35
- }
36
- }
37
- dialog.ngx-image-viewer-dialog {
38
- border: none;
39
- padding: 1rem;
40
- max-inline-size: 96vw;
41
- max-block-size: 96vh;
42
- inline-size: min(900px, 96vw);
43
- background: light-dark(#ffffff, #1c1c20);
44
- border-radius: 12px;
45
- }
46
- dialog.ngx-image-viewer-dialog::backdrop {
47
- background: rgba(0, 0, 0, 0.75);
48
- }
49
-
50
15
  /* ---------- confetti (success only) ---------- */
51
16
  .confetti {
52
17
  position: absolute;
@@ -75,3 +40,128 @@ dialog.ngx-image-viewer-dialog::backdrop {
75
40
  transform: translateY(340px) rotate(340deg);
76
41
  }
77
42
  }
43
+ .ngx-tooltip {
44
+ --ngx-tooltip-bg: light-dark(#f4f4f5, #18181b);
45
+ --ngx-tooltip-fg: light-dark(#18181b, #f4f4f5);
46
+ --ngx-tooltip-border: light-dark(#63636336, #ffffff1a);
47
+ --ngx-tooltip-shadow: 0 10px 30px rgb(0 0 0 / 0.25), 0 2px 8px rgb(0 0 0 / 0.18);
48
+ --ngx-tooltip-font-size: 12px;
49
+ --ngx-tooltip-radius: 7px;
50
+ --ngx-tooltip-arrow-size: 6px;
51
+ --ngx-tooltip-max-height: 200px;
52
+ position: fixed;
53
+ inset: auto;
54
+ margin: 0;
55
+ z-index: 2147483000;
56
+ display: block;
57
+ max-width: min(360px, 100vw - 16px);
58
+ padding: 8px 10px;
59
+ box-sizing: border-box;
60
+ background: var(--ngx-tooltip-bg);
61
+ color: var(--ngx-tooltip-fg);
62
+ border: 1px solid var(--ngx-tooltip-border);
63
+ border-radius: var(--ngx-tooltip-radius);
64
+ box-shadow: var(--ngx-tooltip-shadow);
65
+ font-size: var(--ngx-tooltip-font-size);
66
+ font-weight: 450;
67
+ line-height: 1.45;
68
+ text-align: start;
69
+ user-select: none;
70
+ opacity: 0;
71
+ visibility: hidden;
72
+ transform: scale(0.96);
73
+ transition: opacity 120ms ease, transform 120ms cubic-bezier(0.2, 0.8, 0.2, 1), visibility 120ms linear;
74
+ overflow-wrap: anywhere;
75
+ overflow: visible;
76
+ }
77
+ .ngx-tooltip[data-placement^=top] {
78
+ transform-origin: bottom center;
79
+ }
80
+ .ngx-tooltip[data-placement^=bottom] {
81
+ transform-origin: top center;
82
+ }
83
+ .ngx-tooltip[data-placement^=left] {
84
+ transform-origin: right center;
85
+ }
86
+ .ngx-tooltip[data-placement^=right] {
87
+ transform-origin: left center;
88
+ }
89
+ .ngx-tooltip.ngx-tooltip-visible {
90
+ opacity: 1;
91
+ visibility: visible;
92
+ transform: scale(1);
93
+ }
94
+ .ngx-tooltip .ngx-tooltip-content {
95
+ position: relative;
96
+ white-space: pre;
97
+ max-height: var(--ngx-tooltip-max-height);
98
+ overflow: auto;
99
+ padding: 1px;
100
+ }
101
+ .ngx-tooltip .ngx-tooltip-content p {
102
+ margin: 0 0 6px;
103
+ }
104
+ .ngx-tooltip .ngx-tooltip-content p:last-child {
105
+ margin-bottom: 0;
106
+ }
107
+ .ngx-tooltip .ngx-tooltip-content code {
108
+ padding: 1px 4px;
109
+ border-radius: 4px;
110
+ background: rgba(255, 255, 255, 0.08);
111
+ font-family: "Cascadia Code", "SFMono-Regular", Consolas, monospace;
112
+ font-size: 0.9em;
113
+ }
114
+ .ngx-tooltip .ngx-tooltip-content strong {
115
+ font-weight: 650;
116
+ }
117
+ .ngx-tooltip .ngx-tooltip-content a {
118
+ color: inherit;
119
+ text-decoration: underline;
120
+ text-underline-offset: 2px;
121
+ }
122
+ .ngx-tooltip::before {
123
+ content: " ";
124
+ position: absolute;
125
+ width: calc(var(--ngx-tooltip-arrow-size) * 2);
126
+ height: calc(var(--ngx-tooltip-arrow-size) * 2);
127
+ background: var(--ngx-tooltip-bg);
128
+ border: 1px solid var(--ngx-tooltip-border);
129
+ transform: rotate(45deg);
130
+ pointer-events: none;
131
+ }
132
+ .ngx-tooltip[data-placement^=top]:before {
133
+ left: var(--ngx-tooltip-arrow-offset, 50%);
134
+ bottom: calc(var(--ngx-tooltip-arrow-size) * -1);
135
+ transform: translateX(-50%) rotate(45deg);
136
+ border-left: 0;
137
+ border-top: 0;
138
+ }
139
+ .ngx-tooltip[data-placement^=bottom]:before {
140
+ left: var(--ngx-tooltip-arrow-offset, 50%);
141
+ top: calc(var(--ngx-tooltip-arrow-size) * -1);
142
+ transform: translateX(-50%) rotate(45deg);
143
+ border-right: 0;
144
+ border-bottom: 0;
145
+ }
146
+ .ngx-tooltip[data-placement^=left]:before {
147
+ right: calc(var(--ngx-tooltip-arrow-size) * -1);
148
+ top: var(--ngx-tooltip-arrow-offset, 50%);
149
+ transform: translateY(-50%) rotate(45deg);
150
+ border-left: 0;
151
+ border-bottom: 0;
152
+ }
153
+ .ngx-tooltip[data-placement^=right]:before {
154
+ left: calc(var(--ngx-tooltip-arrow-size) * -1);
155
+ top: var(--ngx-tooltip-arrow-offset, 50%);
156
+ transform: translateY(-50%) rotate(45deg);
157
+ border-right: 0;
158
+ border-top: 0;
159
+ }
160
+ @media (prefers-reduced-motion: reduce) {
161
+ .ngx-tooltip {
162
+ transition: none;
163
+ }
164
+ .ngx-tooltip.ngx-tooltip-visible {
165
+ transform: none;
166
+ }
167
+ }
@@ -0,0 +1,120 @@
1
+ .ngx-tooltip {
2
+ --ngx-tooltip-bg: light-dark(#f4f4f5, #18181b);
3
+ --ngx-tooltip-fg: light-dark(#18181b, #f4f4f5);
4
+ --ngx-tooltip-border: #ffffff1a;
5
+ --ngx-tooltip-shadow: 0 10px 30px rgb(0 0 0 / 0.25), 0 2px 8px rgb(0 0 0 / 0.18);
6
+ --ngx-tooltip-radius: 7px;
7
+ --ngx-tooltip-arrow-size: 6px;
8
+ position: fixed;
9
+ inset: auto;
10
+ margin: 0;
11
+ z-index: 2147483000;
12
+ display: block;
13
+ max-width: min(360px, 100vw - 16px);
14
+ padding: 8px 10px;
15
+ box-sizing: border-box;
16
+ background: var(--ngx-tooltip-bg);
17
+ color: var(--ngx-tooltip-fg);
18
+ border: 1px solid var(--ngx-tooltip-border);
19
+ border-radius: var(--ngx-tooltip-radius);
20
+ box-shadow: var(--ngx-tooltip-shadow);
21
+ font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
22
+ font-size: 12px;
23
+ font-weight: 450;
24
+ line-height: 1.45;
25
+ text-align: start;
26
+ pointer-events: none;
27
+ user-select: none;
28
+ opacity: 0;
29
+ visibility: hidden;
30
+ transform: scale(0.96);
31
+ transition: opacity 120ms ease, transform 120ms cubic-bezier(0.2, 0.8, 0.2, 1), visibility 120ms linear;
32
+ overflow-wrap: anywhere;
33
+ }
34
+ .ngx-tooltip[data-placement^=top] {
35
+ transform-origin: bottom center;
36
+ }
37
+ .ngx-tooltip[data-placement^=bottom] {
38
+ transform-origin: top center;
39
+ }
40
+ .ngx-tooltip[data-placement^=left] {
41
+ transform-origin: right center;
42
+ }
43
+ .ngx-tooltip[data-placement^=right] {
44
+ transform-origin: left center;
45
+ }
46
+ .ngx-tooltip.ngx-tooltip-visible {
47
+ opacity: 1;
48
+ visibility: visible;
49
+ transform: scale(1);
50
+ }
51
+ .ngx-tooltip .ngx-tooltip-content {
52
+ position: relative;
53
+ max-width: inherit;
54
+ }
55
+ .ngx-tooltip .ngx-tooltip-content p {
56
+ margin: 0 0 6px;
57
+ }
58
+ .ngx-tooltip .ngx-tooltip-content p:last-child {
59
+ margin-bottom: 0;
60
+ }
61
+ .ngx-tooltip .ngx-tooltip-content code {
62
+ padding: 1px 4px;
63
+ border-radius: 4px;
64
+ background: rgba(255, 255, 255, 0.08);
65
+ font-family: "Cascadia Code", "SFMono-Regular", Consolas, monospace;
66
+ font-size: 0.9em;
67
+ }
68
+ .ngx-tooltip .ngx-tooltip-content strong {
69
+ font-weight: 650;
70
+ }
71
+ .ngx-tooltip .ngx-tooltip-content a {
72
+ color: inherit;
73
+ text-decoration: underline;
74
+ text-underline-offset: 2px;
75
+ }
76
+ .ngx-tooltip .ngx-tooltip-arrow {
77
+ position: absolute;
78
+ width: calc(var(--ngx-tooltip-arrow-size) * 2);
79
+ height: calc(var(--ngx-tooltip-arrow-size) * 2);
80
+ background: var(--ngx-tooltip-bg);
81
+ border: 1px solid var(--ngx-tooltip-border);
82
+ transform: rotate(45deg);
83
+ pointer-events: none;
84
+ }
85
+ .ngx-tooltip[data-placement^=top] .ngx-tooltip-arrow {
86
+ left: var(--ngx-tooltip-arrow-offset, 50%);
87
+ bottom: calc(var(--ngx-tooltip-arrow-size) * -1);
88
+ transform: translateX(-50%) rotate(45deg);
89
+ border-left: 0;
90
+ border-top: 0;
91
+ }
92
+ .ngx-tooltip[data-placement^=bottom] .ngx-tooltip-arrow {
93
+ left: var(--ngx-tooltip-arrow-offset, 50%);
94
+ top: calc(var(--ngx-tooltip-arrow-size) * -1);
95
+ transform: translateX(-50%) rotate(45deg);
96
+ border-right: 0;
97
+ border-bottom: 0;
98
+ }
99
+ .ngx-tooltip[data-placement^=left] .ngx-tooltip-arrow {
100
+ right: calc(var(--ngx-tooltip-arrow-size) * -1);
101
+ top: var(--ngx-tooltip-arrow-offset, 50%);
102
+ transform: translateY(-50%) rotate(45deg);
103
+ border-left: 0;
104
+ border-bottom: 0;
105
+ }
106
+ .ngx-tooltip[data-placement^=right] .ngx-tooltip-arrow {
107
+ left: calc(var(--ngx-tooltip-arrow-size) * -1);
108
+ top: var(--ngx-tooltip-arrow-offset, 50%);
109
+ transform: translateY(-50%) rotate(45deg);
110
+ border-right: 0;
111
+ border-top: 0;
112
+ }
113
+ @media (prefers-reduced-motion: reduce) {
114
+ .ngx-tooltip {
115
+ transition: none;
116
+ }
117
+ .ngx-tooltip.ngx-tooltip-visible {
118
+ transform: none;
119
+ }
120
+ }
@@ -0,0 +1 @@
1
+ # @ngx-kit/tooltip
@@ -35,7 +35,8 @@ declare class NgxShadowBox implements OnInit, AfterViewInit {
35
35
  writeValue(val: string): void;
36
36
  addShadow(container: HTMLElement): void;
37
37
  setShadow(el: HTMLElement, item: BoxShadow, index: number): void;
38
- removeShadow(ev: Event, index: number): void;
38
+ protected removeShadow(ev: Event, index: number): void;
39
+ protected duplicate(ev: Event, index: number): void;
39
40
  private update;
40
41
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxShadowBox, never>;
41
42
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<NgxShadowBox, "ngx-box-shadow", never, { "maxRange": { "alias": "maxRange"; "required": false; "isSignal": true; }; }, { "shadowChange": "shadowChange"; }, never, never, true, never>;
@@ -181,8 +181,8 @@ declare class NgxInputColor implements AfterViewInit, OnDestroy, ControlValueAcc
181
181
  private readonly renderer;
182
182
  private readonly viewContainerRef;
183
183
  private readonly overlayService;
184
- setInputBackgroundColor: boolean;
185
184
  protected readonly configs: NgxInputColorConfig;
185
+ readonly setInputBackgroundColor: _angular_core.InputSignal<boolean>;
186
186
  /** Minifi UI */
187
187
  readonly simpleMode: _angular_core.InputSignal<boolean>;
188
188
  readonly outputType: _angular_core.InputSignal<OutputType>;
@@ -212,8 +212,8 @@ declare class NgxInputColor implements AfterViewInit, OnDestroy, ControlValueAcc
212
212
  private color?;
213
213
  private pickerRef?;
214
214
  private _targetInput?;
215
- private explicitTargetInput;
216
215
  private isHostInput;
216
+ private syncingTargetInput;
217
217
  private removeInputListener?;
218
218
  private disabled;
219
219
  private invalid;
@@ -251,11 +251,7 @@ declare class NgxInputColor implements AfterViewInit, OnDestroy, ControlValueAcc
251
251
  private handleInputEvent;
252
252
  toggle(): void;
253
253
  private destroyColorPicker;
254
- /**
255
- * User-originated/custom-picker value.
256
- *
257
- * This is the ONLY place where _onChange is called.
258
- */
254
+ /** Propagates values selected from the custom picker. */
259
255
  private emitChange;
260
256
  /**
261
257
  * Synchronize all visual representations.
@@ -270,10 +266,11 @@ declare class NgxInputColor implements AfterViewInit, OnDestroy, ControlValueAcc
270
266
  private getNativeInputColor;
271
267
  private getViewColor;
272
268
  private syncHostBackground;
269
+ private readTargetInput;
273
270
  private notifyValidatorChange;
274
271
  private isInputElement;
275
272
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxInputColor, never>;
276
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NgxInputColor, "[ngxInputColor]", ["ngxInputColor"], { "setInputBackgroundColor": { "alias": "setInputBackgroundColor"; "required": false; }; "simpleMode": { "alias": "simpleMode"; "required": false; "isSignal": true; }; "outputType": { "alias": "outputType"; "required": false; "isSignal": true; }; "defaultInspector": { "alias": "defaultInspector"; "required": false; "isSignal": true; }; "useAlphaChannel": { "alias": "useAlphaChannel"; "required": false; "isSignal": true; }; "showPresets": { "alias": "showPresets"; "required": false; "isSignal": true; }; "presetColors": { "alias": "presetColors"; "required": false; "isSignal": true; }; "ngxInputColor": { "alias": "ngxInputColor"; "required": false; }; }, { "defaultInspector": "defaultInspectorChange"; "colorChange": "colorChange"; "change": "change"; }, never, never, true, never>;
273
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NgxInputColor, "[ngxInputColor]", ["ngxInputColor"], { "setInputBackgroundColor": { "alias": "setInputBackgroundColor"; "required": false; "isSignal": true; }; "simpleMode": { "alias": "simpleMode"; "required": false; "isSignal": true; }; "outputType": { "alias": "outputType"; "required": false; "isSignal": true; }; "defaultInspector": { "alias": "defaultInspector"; "required": false; "isSignal": true; }; "useAlphaChannel": { "alias": "useAlphaChannel"; "required": false; "isSignal": true; }; "showPresets": { "alias": "showPresets"; "required": false; "isSignal": true; }; "presetColors": { "alias": "presetColors"; "required": false; "isSignal": true; }; "ngxInputColor": { "alias": "ngxInputColor"; "required": false; }; }, { "defaultInspector": "defaultInspectorChange"; "colorChange": "colorChange"; "change": "change"; }, never, never, true, never>;
277
274
  }
278
275
 
279
276
  declare class EnumToArrayPipe implements PipeTransform {
@@ -1,25 +1,26 @@
1
1
  import * as i0 from '@angular/core';
2
- import { OnInit, OnDestroy, EventEmitter, ChangeDetectorRef, AfterViewInit, ElementRef, Renderer2, ViewContainerRef } from '@angular/core';
2
+ import { OnInit, OnDestroy, ChangeDetectorRef, AfterViewInit, ElementRef, EventEmitter, Renderer2, ViewContainerRef } from '@angular/core';
3
3
  import { ControlValueAccessor, Validator, AbstractControl, ValidationErrors } from '@angular/forms';
4
- import { BrowserService, RangeSliderComponent, OverlayService } from 'ngx-kit/core';
4
+ import { RangeSliderComponent, OverlayService } from 'ngx-kit/core';
5
5
 
6
6
  interface GradientStop {
7
7
  id: string;
8
8
  value: number;
9
9
  color: string;
10
10
  }
11
- type GradientType = 'linear' | 'radial';
11
+ type GradientType = 'linear' | 'radial' | 'conic' | 'repeating-linear' | 'repeating-radial' | 'repeating-conic';
12
12
 
13
13
  declare class NgxInputGradientComponent implements OnInit, OnDestroy, ControlValueAccessor, Validator {
14
14
  private cd;
15
- browserService: BrowserService;
16
- change: EventEmitter<string>;
15
+ readonly showSamples: i0.InputSignal<boolean>;
16
+ readonly change: i0.OutputEmitterRef<string>;
17
17
  defaultGradients: string[];
18
18
  resultGradient: string;
19
19
  baseBg: string;
20
20
  rangeValues: GradientStop[];
21
21
  type: GradientType;
22
22
  rotation: number;
23
+ gradientOptions: string;
23
24
  selectedIndex: number;
24
25
  isDisabled: boolean;
25
26
  protected _onChange: (value: string) => void;
@@ -39,12 +40,14 @@ declare class NgxInputGradientComponent implements OnInit, OnDestroy, ControlVal
39
40
  stopPropagation(ev: Event): void;
40
41
  remove(): void;
41
42
  generateGradient(ev?: string): void;
43
+ updateGradientType(): void;
44
+ updateRotation(): void;
42
45
  updateRangeSlider(): void;
43
46
  emitChange(): void;
44
47
  setDefaultGradients(): void;
45
48
  onSelectDefault(item: string, i: number): void;
46
49
  static ɵfac: i0.ɵɵFactoryDeclaration<NgxInputGradientComponent, never>;
47
- static ɵcmp: i0.ɵɵComponentDeclaration<NgxInputGradientComponent, "ngx-input-gradient", never, {}, { "change": "change"; }, never, never, true, never>;
50
+ static ɵcmp: i0.ɵɵComponentDeclaration<NgxInputGradientComponent, "ngx-input-gradient", never, { "showSamples": { "alias": "showSamples"; "required": false; "isSignal": true; }; }, { "change": "change"; }, never, never, true, never>;
48
51
  }
49
52
 
50
53
  declare class NgxInputGradient implements AfterViewInit, OnDestroy, ControlValueAccessor, Validator {
@@ -0,0 +1,88 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { OnDestroy, InjectionToken, EnvironmentProviders } from '@angular/core';
3
+
4
+ type NgxTooltipPlacement = 'top' | 'bottom' | 'left' | 'right';
5
+
6
+ type NgxTooltipTrigger = 'hover' | 'focus' | 'hover-focus';
7
+
8
+ declare class NgxTooltip implements OnDestroy {
9
+ private readonly configs;
10
+ private readonly elementRef;
11
+ private readonly renderer;
12
+ private readonly sanitizer;
13
+ private readonly doc;
14
+ private readonly element;
15
+ private tooltip?;
16
+ private showTimer?;
17
+ private hideTimer?;
18
+ private rafId;
19
+ private visible;
20
+ private destroyed;
21
+ private removeMouseEnter?;
22
+ private removeMouseLeave?;
23
+ private removeFocusIn?;
24
+ private removeFocusOut?;
25
+ private removeScroll?;
26
+ private removeResize?;
27
+ readonly tooltipText: _angular_core.InputSignal<string>;
28
+ readonly ngxTooltipUseOverlay: _angular_core.InputSignal<boolean>;
29
+ readonly ngxTooltipPlacement: _angular_core.InputSignal<NgxTooltipPlacement>;
30
+ readonly ngxTooltipOffset: _angular_core.InputSignal<number>;
31
+ readonly ngxTooltipDelay: _angular_core.InputSignal<number>;
32
+ readonly ngxTooltipHideDelay: _angular_core.InputSignal<number>;
33
+ readonly ngxTooltipAllowHtml: _angular_core.InputSignal<boolean>;
34
+ readonly ngxTooltipTrigger: _angular_core.InputSignal<NgxTooltipTrigger>;
35
+ /**
36
+ * If true, the tooltip automatically changes placement
37
+ * when there is not enough room.
38
+ */
39
+ readonly ngxTooltipFlip: _angular_core.InputSignal<boolean>;
40
+ /**
41
+ * Keeps the tooltip inside the viewport.
42
+ */
43
+ readonly ngxTooltipShift: _angular_core.InputSignal<boolean>;
44
+ constructor();
45
+ ngOnDestroy(): void;
46
+ private bindEvents;
47
+ private scheduleShow;
48
+ private scheduleHide;
49
+ private show;
50
+ private hide;
51
+ private getOrCreateTooltip;
52
+ private updateContent;
53
+ private applyDirection;
54
+ private schedulePositionUpdate;
55
+ private positionTooltip;
56
+ private calculatePosition;
57
+ private findBestPlacement;
58
+ private getPlacementCandidates;
59
+ private shiftIntoViewport;
60
+ private fitsViewport;
61
+ private intersectsViewport;
62
+ private parsePlacement;
63
+ private addViewportListeners;
64
+ private removeViewportListeners;
65
+ private removeListeners;
66
+ private hasContent;
67
+ private clearTimers;
68
+ private clearShowTimer;
69
+ private clearHideTimer;
70
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<NgxTooltip, never>;
71
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<NgxTooltip, "[ngxTooltip]", never, { "tooltipText": { "alias": "ngxTooltip"; "required": true; "isSignal": true; }; "ngxTooltipUseOverlay": { "alias": "ngxTooltipUseOverlay"; "required": false; "isSignal": true; }; "ngxTooltipPlacement": { "alias": "ngxTooltipPlacement"; "required": false; "isSignal": true; }; "ngxTooltipOffset": { "alias": "ngxTooltipOffset"; "required": false; "isSignal": true; }; "ngxTooltipDelay": { "alias": "ngxTooltipDelay"; "required": false; "isSignal": true; }; "ngxTooltipHideDelay": { "alias": "ngxTooltipHideDelay"; "required": false; "isSignal": true; }; "ngxTooltipAllowHtml": { "alias": "ngxTooltipAllowHtml"; "required": false; "isSignal": true; }; "ngxTooltipTrigger": { "alias": "ngxTooltipTrigger"; "required": false; "isSignal": true; }; "ngxTooltipFlip": { "alias": "ngxTooltipFlip"; "required": false; "isSignal": true; }; "ngxTooltipShift": { "alias": "ngxTooltipShift"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
72
+ }
73
+
74
+ declare class NgxTooltipConfig {
75
+ placement: NgxTooltipPlacement;
76
+ offset: number;
77
+ delay: number;
78
+ hideDelay: number;
79
+ useHtml: boolean;
80
+ usePopOver: boolean;
81
+ trigger: NgxTooltipTrigger;
82
+ }
83
+
84
+ declare const NGX_TOOLTIP_CONFIG: InjectionToken<NgxTooltipConfig>;
85
+ declare function provideTooltip(configs?: NgxTooltipConfig): EnvironmentProviders;
86
+
87
+ export { NGX_TOOLTIP_CONFIG, NgxTooltip, provideTooltip };
88
+ export type { NgxTooltipPlacement, NgxTooltipTrigger };