@tolle_/tolle-ui 18.2.28 → 18.2.30
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/esm2022/lib/accordion-item.component.mjs +5 -11
- package/esm2022/lib/accordion.component.mjs +4 -9
- package/esm2022/lib/alert-dialog-dynamic.component.mjs +5 -10
- package/esm2022/lib/alert-dialog.component.mjs +44 -59
- package/esm2022/lib/alert.component.mjs +5 -11
- package/esm2022/lib/aspect-ratio.component.mjs +119 -0
- package/esm2022/lib/attachment.component.mjs +334 -0
- package/esm2022/lib/avatar-fallback.component.mjs +3 -3
- package/esm2022/lib/avatar.component.mjs +4 -9
- package/esm2022/lib/badge.component.mjs +4 -9
- package/esm2022/lib/breadcrumb-item.component.mjs +3 -3
- package/esm2022/lib/breadcrumb-link.component.mjs +3 -3
- package/esm2022/lib/breadcrumb-separator.component.mjs +3 -3
- package/esm2022/lib/breadcrumb.component.mjs +3 -3
- package/esm2022/lib/bubble.component.mjs +301 -0
- package/esm2022/lib/button.component.mjs +5 -11
- package/esm2022/lib/calendar.component.mjs +5 -11
- package/esm2022/lib/card.component.mjs +14 -43
- package/esm2022/lib/carousel/carousel.component.mjs +5 -12
- package/esm2022/lib/chain-of-thought.component.mjs +380 -0
- package/esm2022/lib/chart-pie.component.mjs +386 -0
- package/esm2022/lib/chart.component.mjs +1146 -0
- package/esm2022/lib/chart.service.mjs +555 -0
- package/esm2022/lib/checkbox.component.mjs +5 -11
- package/esm2022/lib/checkpoint.component.mjs +134 -0
- package/esm2022/lib/collapsible.component.mjs +4 -11
- package/esm2022/lib/combobox.component.mjs +372 -0
- package/esm2022/lib/command-dialog.component.mjs +164 -0
- package/esm2022/lib/command.component.mjs +514 -0
- package/esm2022/lib/command.service.mjs +130 -0
- package/esm2022/lib/confirmation.component.mjs +219 -0
- package/esm2022/lib/context-menu-trigger.directive.mjs +36 -0
- package/esm2022/lib/context-menu.component.mjs +460 -0
- package/esm2022/lib/context-menu.service.mjs +121 -0
- package/esm2022/lib/context.component.mjs +377 -0
- package/esm2022/lib/conversation.component.mjs +442 -0
- package/esm2022/lib/country-selector.component.mjs +5 -11
- package/esm2022/lib/data-table.component.mjs +63 -12
- package/esm2022/lib/date-picker.component.mjs +251 -198
- package/esm2022/lib/date-range-picker.component.mjs +224 -116
- package/esm2022/lib/date-time-picker.component.mjs +506 -0
- package/esm2022/lib/direction.component.mjs +79 -0
- package/esm2022/lib/dropdown-item.component.mjs +3 -3
- package/esm2022/lib/dropdown-label.component.mjs +3 -3
- package/esm2022/lib/dropdown-menu.component.mjs +3 -3
- package/esm2022/lib/dropdown-separator.component.mjs +3 -3
- package/esm2022/lib/dropdown-trigger.directive.mjs +6 -4
- package/esm2022/lib/empty-state.component.mjs +4 -9
- package/esm2022/lib/field.component.mjs +394 -0
- package/esm2022/lib/hover-card.component.mjs +6 -16
- package/esm2022/lib/inline-citation.component.mjs +263 -0
- package/esm2022/lib/input-group.component.mjs +418 -0
- package/esm2022/lib/input.component.mjs +5 -11
- package/esm2022/lib/item.component.mjs +243 -0
- package/esm2022/lib/kbd.component.mjs +82 -0
- package/esm2022/lib/label.component.mjs +4 -9
- package/esm2022/lib/marker.component.mjs +135 -0
- package/esm2022/lib/masked-input.component.mjs +5 -11
- package/esm2022/lib/menubar.component.mjs +683 -0
- package/esm2022/lib/message-scroller.component.mjs +353 -0
- package/esm2022/lib/message-scroller.service.mjs +157 -0
- package/esm2022/lib/message.component.mjs +228 -0
- package/esm2022/lib/model-selector.component.mjs +310 -0
- package/esm2022/lib/multi-select.component.mjs +155 -72
- package/esm2022/lib/native-select.component.mjs +201 -0
- package/esm2022/lib/navigation-menu.component.mjs +642 -0
- package/esm2022/lib/otp-group.component.mjs +3 -3
- package/esm2022/lib/otp-slot.component.mjs +4 -9
- package/esm2022/lib/otp.component.mjs +5 -11
- package/esm2022/lib/pagination.component.mjs +7 -10
- package/esm2022/lib/plan.component.mjs +335 -0
- package/esm2022/lib/popover-content.component.mjs +4 -9
- package/esm2022/lib/popover.component.mjs +15 -13
- package/esm2022/lib/progress.component.mjs +4 -9
- package/esm2022/lib/prompt-input.component.mjs +526 -0
- package/esm2022/lib/queue.component.mjs +280 -0
- package/esm2022/lib/radio-group.component.mjs +6 -13
- package/esm2022/lib/radio-item.component.mjs +4 -9
- package/esm2022/lib/range-calendar.component.mjs +5 -11
- package/esm2022/lib/reasoning.component.mjs +335 -0
- package/esm2022/lib/resizable.component.mjs +219 -0
- package/esm2022/lib/segment.component.mjs +17 -7
- package/esm2022/lib/select-group.component.mjs +4 -8
- package/esm2022/lib/select-item.component.mjs +4 -9
- package/esm2022/lib/select-separator.component.mjs +4 -8
- package/esm2022/lib/select.component.mjs +133 -49
- package/esm2022/lib/separator.component.mjs +4 -9
- package/esm2022/lib/sheet.component.mjs +38 -56
- package/esm2022/lib/shimmer.component.mjs +84 -0
- package/esm2022/lib/sidebar.component.mjs +11 -1
- package/esm2022/lib/skeleton.component.mjs +4 -9
- package/esm2022/lib/sources.component.mjs +452 -0
- package/esm2022/lib/spinner.component.mjs +68 -0
- package/esm2022/lib/suggestion.component.mjs +207 -0
- package/esm2022/lib/switch.component.mjs +5 -11
- package/esm2022/lib/table.component.mjs +213 -0
- package/esm2022/lib/tabs.component.mjs +4 -11
- package/esm2022/lib/tag-input.component.mjs +5 -11
- package/esm2022/lib/task.component.mjs +359 -0
- package/esm2022/lib/textarea.component.mjs +5 -11
- package/esm2022/lib/theme.service.mjs +17 -6
- package/esm2022/lib/time-picker.component.mjs +923 -0
- package/esm2022/lib/toast.service.mjs +3 -2
- package/esm2022/lib/toaster.component.mjs +76 -39
- package/esm2022/lib/toggle-group.component.mjs +4 -9
- package/esm2022/lib/toggle.component.mjs +5 -11
- package/esm2022/lib/tool.component.mjs +462 -0
- package/esm2022/lib/typography.component.mjs +83 -0
- package/esm2022/lib/utils/color.mjs +140 -19
- package/esm2022/public-api.mjs +61 -1
- package/fesm2022/tolle-ui.mjs +16457 -1024
- package/fesm2022/tolle-ui.mjs.map +1 -1
- package/lib/alert-dialog.component.d.ts +10 -2
- package/lib/aspect-ratio.component.d.ts +20 -0
- package/lib/attachment.component.d.ts +101 -0
- package/lib/bubble.component.d.ts +112 -0
- package/lib/chain-of-thought.component.d.ts +166 -0
- package/lib/chart-pie.component.d.ts +108 -0
- package/lib/chart.component.d.ts +369 -0
- package/lib/chart.service.d.ts +222 -0
- package/lib/checkpoint.component.d.ts +51 -0
- package/lib/combobox.component.d.ts +90 -0
- package/lib/command-dialog.component.d.ts +53 -0
- package/lib/command.component.d.ts +189 -0
- package/lib/command.service.d.ts +67 -0
- package/lib/confirmation.component.d.ts +70 -0
- package/lib/context-menu-trigger.directive.d.ts +12 -0
- package/lib/context-menu.component.d.ts +41 -0
- package/lib/context-menu.service.d.ts +38 -0
- package/lib/context.component.d.ts +134 -0
- package/lib/conversation.component.d.ts +165 -0
- package/lib/data-table.component.d.ts +27 -1
- package/lib/date-picker.component.d.ts +72 -11
- package/lib/date-range-picker.component.d.ts +63 -6
- package/lib/date-time-picker.component.d.ts +119 -0
- package/lib/direction.component.d.ts +45 -0
- package/lib/field.component.d.ts +201 -0
- package/lib/inline-citation.component.d.ts +103 -0
- package/lib/input-group.component.d.ts +150 -0
- package/lib/item.component.d.ts +154 -0
- package/lib/kbd.component.d.ts +50 -0
- package/lib/marker.component.d.ts +58 -0
- package/lib/menubar.component.d.ts +247 -0
- package/lib/message-scroller.component.d.ts +159 -0
- package/lib/message-scroller.service.d.ts +73 -0
- package/lib/message.component.d.ts +128 -0
- package/lib/model-selector.component.d.ts +103 -0
- package/lib/multi-select.component.d.ts +66 -14
- package/lib/native-select.component.d.ts +57 -0
- package/lib/navigation-menu.component.d.ts +230 -0
- package/lib/plan.component.d.ts +120 -0
- package/lib/popover.component.d.ts +1 -0
- package/lib/prompt-input.component.d.ts +194 -0
- package/lib/queue.component.d.ts +106 -0
- package/lib/reasoning.component.d.ts +127 -0
- package/lib/resizable.component.d.ts +43 -0
- package/lib/segment.component.d.ts +13 -3
- package/lib/select.component.d.ts +37 -5
- package/lib/sheet.component.d.ts +3 -0
- package/lib/shimmer.component.d.ts +38 -0
- package/lib/sidebar.component.d.ts +2 -0
- package/lib/sources.component.d.ts +156 -0
- package/lib/spinner.component.d.ts +29 -0
- package/lib/suggestion.component.d.ts +96 -0
- package/lib/table.component.d.ts +106 -0
- package/lib/task.component.d.ts +151 -0
- package/lib/theme.service.d.ts +9 -0
- package/lib/time-picker.component.d.ts +243 -0
- package/lib/toast.service.d.ts +3 -1
- package/lib/toaster.component.d.ts +26 -9
- package/lib/tool.component.d.ts +158 -0
- package/lib/typography.component.d.ts +32 -0
- package/lib/utils/color.d.ts +19 -5
- package/package.json +1 -1
- package/public-api.d.ts +50 -0
- package/registry/docs-content.json +8497 -1553
- package/registry/llms-full.txt +2679 -318
- package/registry/llms.txt +43 -4
- package/registry/manifest.json +9093 -1739
- package/registry/r/accordion-item.json +1 -1
- package/registry/r/accordion.json +1 -1
- package/registry/r/alert-dialog-dynamic.json +1 -1
- package/registry/r/alert-dialog.json +1 -1
- package/registry/r/alert.json +1 -1
- package/registry/r/attachment.json +23 -0
- package/registry/r/avatar-fallback.json +1 -1
- package/registry/r/avatar.json +1 -1
- package/registry/r/badge.json +1 -1
- package/registry/r/breadcrumb-item.json +1 -1
- package/registry/r/breadcrumb-link.json +1 -1
- package/registry/r/breadcrumb-separator.json +1 -1
- package/registry/r/breadcrumb.json +1 -1
- package/registry/r/bubble.json +23 -0
- package/registry/r/button.json +1 -1
- package/registry/r/calendar.json +1 -1
- package/registry/r/card.json +1 -1
- package/registry/r/carousel.json +1 -1
- package/registry/r/chain-of-thought.json +23 -0
- package/registry/r/chart-pie.json +30 -0
- package/registry/r/chart.json +28 -0
- package/registry/r/checkbox.json +1 -1
- package/registry/r/checkpoint.json +23 -0
- package/registry/r/collapsible.json +1 -1
- package/registry/r/combobox.json +31 -0
- package/registry/r/command-dialog.json +21 -0
- package/registry/r/command.json +26 -0
- package/registry/r/confirmation.json +23 -0
- package/registry/r/context.json +26 -0
- package/registry/r/conversation.json +23 -0
- package/registry/r/country-selector.json +1 -1
- package/registry/r/data-table.json +1 -1
- package/registry/r/date-picker.json +4 -4
- package/registry/r/date-range-picker.json +3 -3
- package/registry/r/date-time-picker.json +28 -0
- package/registry/r/direction.json +16 -0
- package/registry/r/dropdown-item.json +1 -1
- package/registry/r/dropdown-label.json +1 -1
- package/registry/r/dropdown-menu.json +1 -1
- package/registry/r/dropdown-separator.json +1 -1
- package/registry/r/dropdown-trigger.json +1 -1
- package/registry/r/empty-state.json +1 -1
- package/registry/r/field.json +23 -0
- package/registry/r/hover-card.json +1 -1
- package/registry/r/inline-citation.json +26 -0
- package/registry/r/input-group.json +23 -0
- package/registry/r/input.json +1 -1
- package/registry/r/item.json +23 -0
- package/registry/r/kbd.json +23 -0
- package/registry/r/label.json +1 -1
- package/registry/r/marker.json +23 -0
- package/registry/r/masked-input.json +1 -1
- package/registry/r/menubar.json +24 -0
- package/registry/r/message-scroller.json +26 -0
- package/registry/r/message.json +23 -0
- package/registry/r/model-selector.json +32 -0
- package/registry/r/multi-select.json +2 -2
- package/registry/r/native-select.json +23 -0
- package/registry/r/navigation-menu.json +24 -0
- package/registry/r/otp-group.json +1 -1
- package/registry/r/otp-slot.json +1 -1
- package/registry/r/otp.json +1 -1
- package/registry/r/pagination.json +3 -2
- package/registry/r/plan.json +23 -0
- package/registry/r/popover-content.json +1 -1
- package/registry/r/popover.json +1 -1
- package/registry/r/progress.json +1 -1
- package/registry/r/prompt-input.json +23 -0
- package/registry/r/queue.json +23 -0
- package/registry/r/radio-group.json +1 -1
- package/registry/r/radio-item.json +1 -1
- package/registry/r/range-calendar.json +1 -1
- package/registry/r/reasoning.json +23 -0
- package/registry/r/segment.json +1 -1
- package/registry/r/select-group.json +1 -1
- package/registry/r/select-item.json +1 -1
- package/registry/r/select-separator.json +1 -1
- package/registry/r/select.json +4 -3
- package/registry/r/separator.json +1 -1
- package/registry/r/sheet.json +1 -1
- package/registry/r/shimmer.json +23 -0
- package/registry/r/sidebar.json +1 -1
- package/registry/r/skeleton.json +1 -1
- package/registry/r/sources.json +23 -0
- package/registry/r/spinner.json +23 -0
- package/registry/r/suggestion.json +23 -0
- package/registry/r/switch.json +1 -1
- package/registry/r/table.json +21 -0
- package/registry/r/tabs.json +1 -1
- package/registry/r/tag-input.json +1 -1
- package/registry/r/task.json +23 -0
- package/registry/r/textarea.json +1 -1
- package/registry/r/time-picker.json +24 -0
- package/registry/r/toaster.json +2 -2
- package/registry/r/toggle-group.json +1 -1
- package/registry/r/toggle.json +1 -1
- package/registry/r/tool.json +23 -0
- package/registry/r/typography.json +23 -0
- package/registry/registry.json +915 -22
- package/theme.css +109 -8
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, inject } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import { cva } from 'class-variance-authority';
|
|
4
|
+
import { cn } from './utils/cn';
|
|
5
|
+
import { HoverCardComponent, HoverCardTriggerComponent, HoverCardContentComponent, } from './hover-card.component';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "@angular/common";
|
|
8
|
+
const inlineCitationVariants = cva('cursor-pointer rounded-sm align-super font-medium leading-none transition-colors', {
|
|
9
|
+
variants: {
|
|
10
|
+
variant: {
|
|
11
|
+
default: 'text-primary hover:text-primary/80',
|
|
12
|
+
muted: 'text-muted-foreground hover:text-foreground',
|
|
13
|
+
subtle: 'text-foreground/60 hover:text-foreground',
|
|
14
|
+
},
|
|
15
|
+
size: {
|
|
16
|
+
sm: 'text-[9px]',
|
|
17
|
+
default: 'text-[10px]',
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
defaultVariants: { variant: 'default', size: 'default' },
|
|
21
|
+
});
|
|
22
|
+
/**
|
|
23
|
+
* A superscript citation marker for prose. Hovering the marker reveals the
|
|
24
|
+
* projected source card, positioned by the existing `tolle-hover-card`.
|
|
25
|
+
*
|
|
26
|
+
* ```html
|
|
27
|
+
* The model was released in March.<tolle-inline-citation [index]="1">
|
|
28
|
+
* <tolle-inline-citation-card
|
|
29
|
+
* title="Release notes"
|
|
30
|
+
* url="https://example.com/notes"
|
|
31
|
+
* snippet="Shipped on 14 March."
|
|
32
|
+
* ></tolle-inline-citation-card>
|
|
33
|
+
* </tolle-inline-citation>
|
|
34
|
+
* ```
|
|
35
|
+
* @new
|
|
36
|
+
*/
|
|
37
|
+
export class InlineCitationComponent {
|
|
38
|
+
/**
|
|
39
|
+
* Angular writes a bound `class` input through its styling path, which does
|
|
40
|
+
* not mark an OnPush component dirty — without this hook the component keeps
|
|
41
|
+
* rendering the class it was born with.
|
|
42
|
+
*/
|
|
43
|
+
ngOnChanges() {
|
|
44
|
+
this.cdr.markForCheck();
|
|
45
|
+
}
|
|
46
|
+
/** Number rendered in the superscript marker. @default 1 */
|
|
47
|
+
index = 1;
|
|
48
|
+
/** Colour treatment of the marker. @default 'default' */
|
|
49
|
+
variant = 'default';
|
|
50
|
+
/** Text size of the marker. @default 'default' */
|
|
51
|
+
size = 'default';
|
|
52
|
+
/** Side of the marker the source card opens on. @default 'top' */
|
|
53
|
+
placement = 'top';
|
|
54
|
+
/** Milliseconds to wait before opening the card. @default 150 */
|
|
55
|
+
openDelay = 150;
|
|
56
|
+
/** Milliseconds to wait before closing the card. @default 200 */
|
|
57
|
+
closeDelay = 200;
|
|
58
|
+
/** Accessible label for the marker; falls back to "Citation {index}". @default '' */
|
|
59
|
+
ariaLabel = '';
|
|
60
|
+
/** Extra Tailwind classes merged onto the marker via `cn()` (last-wins). */
|
|
61
|
+
class = '';
|
|
62
|
+
/** Extra Tailwind classes merged onto the hover card panel via `cn()` (last-wins). */
|
|
63
|
+
cardClass = '';
|
|
64
|
+
cdr = inject(ChangeDetectorRef);
|
|
65
|
+
refreshTimer;
|
|
66
|
+
get computedClass() {
|
|
67
|
+
return cn(inlineCitationVariants({ variant: this.variant, size: this.size }), this.class);
|
|
68
|
+
}
|
|
69
|
+
get contentClass() {
|
|
70
|
+
return cn('w-72 p-0', this.cardClass);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* `tolle-hover-card` flips its own visibility from a `setTimeout`, which never
|
|
74
|
+
* marks this OnPush view dirty. Re-check just after the delay elapses so the
|
|
75
|
+
* card actually appears (and disappears) inside an OnPush host.
|
|
76
|
+
*/
|
|
77
|
+
scheduleRefresh(delay) {
|
|
78
|
+
clearTimeout(this.refreshTimer);
|
|
79
|
+
this.refreshTimer = setTimeout(() => this.cdr.markForCheck(), delay + 32);
|
|
80
|
+
}
|
|
81
|
+
ngOnDestroy() {
|
|
82
|
+
clearTimeout(this.refreshTimer);
|
|
83
|
+
}
|
|
84
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InlineCitationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
85
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: InlineCitationComponent, isStandalone: true, selector: "tolle-inline-citation", inputs: { index: "index", variant: "variant", size: "size", placement: "placement", openDelay: "openDelay", closeDelay: "closeDelay", ariaLabel: "ariaLabel", class: "class", cardClass: "cardClass" }, usesOnChanges: true, ngImport: i0, template: `
|
|
86
|
+
<tolle-hover-card
|
|
87
|
+
[openDelay]="openDelay"
|
|
88
|
+
[closeDelay]="closeDelay"
|
|
89
|
+
[placement]="placement"
|
|
90
|
+
(mouseenter)="scheduleRefresh(openDelay)"
|
|
91
|
+
(mouseleave)="scheduleRefresh(closeDelay)"
|
|
92
|
+
>
|
|
93
|
+
<tolle-hover-card-trigger>
|
|
94
|
+
<sup
|
|
95
|
+
role="button"
|
|
96
|
+
tabindex="0"
|
|
97
|
+
[attr.aria-label]="ariaLabel || 'Citation ' + index"
|
|
98
|
+
[class]="computedClass"
|
|
99
|
+
>{{ index }}</sup
|
|
100
|
+
>
|
|
101
|
+
</tolle-hover-card-trigger>
|
|
102
|
+
<tolle-hover-card-content [class]="contentClass">
|
|
103
|
+
<ng-content></ng-content>
|
|
104
|
+
</tolle-hover-card-content>
|
|
105
|
+
</tolle-hover-card>
|
|
106
|
+
`, isInline: true, styles: [":host{display:inline-flex}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: HoverCardComponent, selector: "tolle-hover-card", inputs: ["openDelay", "closeDelay", "placement"] }, { kind: "component", type: HoverCardTriggerComponent, selector: "tolle-hover-card-trigger" }, { kind: "component", type: HoverCardContentComponent, selector: "tolle-hover-card-content", inputs: ["class"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
107
|
+
}
|
|
108
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InlineCitationComponent, decorators: [{
|
|
109
|
+
type: Component,
|
|
110
|
+
args: [{ selector: 'tolle-inline-citation', standalone: true, imports: [CommonModule, HoverCardComponent, HoverCardTriggerComponent, HoverCardContentComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
111
|
+
<tolle-hover-card
|
|
112
|
+
[openDelay]="openDelay"
|
|
113
|
+
[closeDelay]="closeDelay"
|
|
114
|
+
[placement]="placement"
|
|
115
|
+
(mouseenter)="scheduleRefresh(openDelay)"
|
|
116
|
+
(mouseleave)="scheduleRefresh(closeDelay)"
|
|
117
|
+
>
|
|
118
|
+
<tolle-hover-card-trigger>
|
|
119
|
+
<sup
|
|
120
|
+
role="button"
|
|
121
|
+
tabindex="0"
|
|
122
|
+
[attr.aria-label]="ariaLabel || 'Citation ' + index"
|
|
123
|
+
[class]="computedClass"
|
|
124
|
+
>{{ index }}</sup
|
|
125
|
+
>
|
|
126
|
+
</tolle-hover-card-trigger>
|
|
127
|
+
<tolle-hover-card-content [class]="contentClass">
|
|
128
|
+
<ng-content></ng-content>
|
|
129
|
+
</tolle-hover-card-content>
|
|
130
|
+
</tolle-hover-card>
|
|
131
|
+
`, styles: [":host{display:inline-flex}\n"] }]
|
|
132
|
+
}], propDecorators: { index: [{
|
|
133
|
+
type: Input
|
|
134
|
+
}], variant: [{
|
|
135
|
+
type: Input
|
|
136
|
+
}], size: [{
|
|
137
|
+
type: Input
|
|
138
|
+
}], placement: [{
|
|
139
|
+
type: Input
|
|
140
|
+
}], openDelay: [{
|
|
141
|
+
type: Input
|
|
142
|
+
}], closeDelay: [{
|
|
143
|
+
type: Input
|
|
144
|
+
}], ariaLabel: [{
|
|
145
|
+
type: Input
|
|
146
|
+
}], class: [{
|
|
147
|
+
type: Input
|
|
148
|
+
}], cardClass: [{
|
|
149
|
+
type: Input
|
|
150
|
+
}] } });
|
|
151
|
+
/** The source preview shown inside a citation's hover card. */
|
|
152
|
+
export class InlineCitationCardComponent {
|
|
153
|
+
cdr = inject(ChangeDetectorRef);
|
|
154
|
+
/**
|
|
155
|
+
* Angular writes a bound `class` input through its styling path, which does
|
|
156
|
+
* not mark an OnPush component dirty — without this hook the component keeps
|
|
157
|
+
* rendering the class it was born with.
|
|
158
|
+
*/
|
|
159
|
+
ngOnChanges() {
|
|
160
|
+
this.cdr.markForCheck();
|
|
161
|
+
}
|
|
162
|
+
/** Title of the cited source. @default '' */
|
|
163
|
+
title = '';
|
|
164
|
+
/** Link to the cited source. @default '' */
|
|
165
|
+
url = '';
|
|
166
|
+
/** Short excerpt from the source. @default '' */
|
|
167
|
+
snippet = '';
|
|
168
|
+
/** Extra Tailwind classes merged onto the card via `cn()` (last-wins). */
|
|
169
|
+
class = '';
|
|
170
|
+
get computedClass() {
|
|
171
|
+
return cn('flex flex-col p-3', this.class);
|
|
172
|
+
}
|
|
173
|
+
/** The URL without its scheme, which reads better in a narrow card. */
|
|
174
|
+
get displayUrl() {
|
|
175
|
+
return this.url.replace(/^https?:\/\//, '');
|
|
176
|
+
}
|
|
177
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InlineCitationCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
178
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: InlineCitationCardComponent, isStandalone: true, selector: "tolle-inline-citation-card", inputs: { title: "title", url: "url", snippet: "snippet", class: "class" }, usesOnChanges: true, ngImport: i0, template: `
|
|
179
|
+
<div [class]="computedClass">
|
|
180
|
+
<p class="truncate text-sm font-medium text-popover-foreground">{{ title }}</p>
|
|
181
|
+
<a
|
|
182
|
+
*ngIf="url"
|
|
183
|
+
[href]="url"
|
|
184
|
+
target="_blank"
|
|
185
|
+
rel="noreferrer noopener"
|
|
186
|
+
class="mt-0.5 flex items-center gap-1 truncate text-xs text-muted-foreground underline-offset-2 hover:text-foreground hover:underline"
|
|
187
|
+
>
|
|
188
|
+
<i class="ri-external-link-line shrink-0" aria-hidden="true"></i>
|
|
189
|
+
<span class="truncate">{{ displayUrl }}</span>
|
|
190
|
+
</a>
|
|
191
|
+
<p *ngIf="snippet" class="mt-2 line-clamp-3 text-xs leading-relaxed text-muted-foreground">{{ snippet }}</p>
|
|
192
|
+
<ng-content></ng-content>
|
|
193
|
+
</div>
|
|
194
|
+
`, isInline: true, styles: [":host{display:block}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
195
|
+
}
|
|
196
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InlineCitationCardComponent, decorators: [{
|
|
197
|
+
type: Component,
|
|
198
|
+
args: [{ selector: 'tolle-inline-citation-card', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
199
|
+
<div [class]="computedClass">
|
|
200
|
+
<p class="truncate text-sm font-medium text-popover-foreground">{{ title }}</p>
|
|
201
|
+
<a
|
|
202
|
+
*ngIf="url"
|
|
203
|
+
[href]="url"
|
|
204
|
+
target="_blank"
|
|
205
|
+
rel="noreferrer noopener"
|
|
206
|
+
class="mt-0.5 flex items-center gap-1 truncate text-xs text-muted-foreground underline-offset-2 hover:text-foreground hover:underline"
|
|
207
|
+
>
|
|
208
|
+
<i class="ri-external-link-line shrink-0" aria-hidden="true"></i>
|
|
209
|
+
<span class="truncate">{{ displayUrl }}</span>
|
|
210
|
+
</a>
|
|
211
|
+
<p *ngIf="snippet" class="mt-2 line-clamp-3 text-xs leading-relaxed text-muted-foreground">{{ snippet }}</p>
|
|
212
|
+
<ng-content></ng-content>
|
|
213
|
+
</div>
|
|
214
|
+
`, styles: [":host{display:block}\n"] }]
|
|
215
|
+
}], propDecorators: { title: [{
|
|
216
|
+
type: Input
|
|
217
|
+
}], url: [{
|
|
218
|
+
type: Input
|
|
219
|
+
}], snippet: [{
|
|
220
|
+
type: Input
|
|
221
|
+
}], class: [{
|
|
222
|
+
type: Input
|
|
223
|
+
}] } });
|
|
224
|
+
/** A pulled quote from the cited source, shown inside the citation card. */
|
|
225
|
+
export class InlineCitationQuoteComponent {
|
|
226
|
+
cdr = inject(ChangeDetectorRef);
|
|
227
|
+
/**
|
|
228
|
+
* Angular writes a bound `class` input through its styling path, which does
|
|
229
|
+
* not mark an OnPush component dirty — without this hook the component keeps
|
|
230
|
+
* rendering the class it was born with.
|
|
231
|
+
*/
|
|
232
|
+
ngOnChanges() {
|
|
233
|
+
this.cdr.markForCheck();
|
|
234
|
+
}
|
|
235
|
+
/** Attribution shown beneath the quote. @default '' */
|
|
236
|
+
cite = '';
|
|
237
|
+
/** Extra Tailwind classes merged onto the quote via `cn()` (last-wins). */
|
|
238
|
+
class = '';
|
|
239
|
+
get computedClass() {
|
|
240
|
+
return cn('mt-2 border-l-2 border-border pl-3 text-xs italic leading-relaxed text-muted-foreground', this.class);
|
|
241
|
+
}
|
|
242
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InlineCitationQuoteComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
243
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: InlineCitationQuoteComponent, isStandalone: true, selector: "tolle-inline-citation-quote", inputs: { cite: "cite", class: "class" }, usesOnChanges: true, ngImport: i0, template: `
|
|
244
|
+
<blockquote [class]="computedClass">
|
|
245
|
+
<ng-content></ng-content>
|
|
246
|
+
<footer *ngIf="cite" class="mt-1 text-[11px] not-italic text-muted-foreground/80">— {{ cite }}</footer>
|
|
247
|
+
</blockquote>
|
|
248
|
+
`, isInline: true, styles: [":host{display:inline-flex}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
249
|
+
}
|
|
250
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: InlineCitationQuoteComponent, decorators: [{
|
|
251
|
+
type: Component,
|
|
252
|
+
args: [{ selector: 'tolle-inline-citation-quote', standalone: true, imports: [CommonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: `
|
|
253
|
+
<blockquote [class]="computedClass">
|
|
254
|
+
<ng-content></ng-content>
|
|
255
|
+
<footer *ngIf="cite" class="mt-1 text-[11px] not-italic text-muted-foreground/80">— {{ cite }}</footer>
|
|
256
|
+
</blockquote>
|
|
257
|
+
`, styles: [":host{display:inline-flex}\n"] }]
|
|
258
|
+
}], propDecorators: { cite: [{
|
|
259
|
+
type: Input
|
|
260
|
+
}], class: [{
|
|
261
|
+
type: Input
|
|
262
|
+
}] } });
|
|
263
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5saW5lLWNpdGF0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3RvbGxlL3NyYy9saWIvaW5saW5lLWNpdGF0aW9uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBYSxNQUFNLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDM0gsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxHQUFHLEVBQXFCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoQyxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLHlCQUF5QixFQUN6Qix5QkFBeUIsR0FDMUIsTUFBTSx3QkFBd0IsQ0FBQzs7O0FBRWhDLE1BQU0sc0JBQXNCLEdBQUcsR0FBRyxDQUNoQyxrRkFBa0YsRUFDbEY7SUFDRSxRQUFRLEVBQUU7UUFDUixPQUFPLEVBQUU7WUFDUCxPQUFPLEVBQUUsb0NBQW9DO1lBQzdDLEtBQUssRUFBRSw2Q0FBNkM7WUFDcEQsTUFBTSxFQUFFLDBDQUEwQztTQUNuRDtRQUNELElBQUksRUFBRTtZQUNKLEVBQUUsRUFBRSxZQUFZO1lBQ2hCLE9BQU8sRUFBRSxhQUFhO1NBQ3ZCO0tBQ0Y7SUFDRCxlQUFlLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7Q0FDekQsQ0FDRixDQUFDO0FBSUY7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUE4QkgsTUFBTSxPQUFPLHVCQUF1QjtJQUVsQzs7OztPQUlHO0lBQ0gsV0FBVztRQUNULElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELDREQUE0RDtJQUNuRCxLQUFLLEdBQW9CLENB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dGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBpbmplY3QsIE9uQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGN2YSwgdHlwZSBWYXJpYW50UHJvcHMgfSBmcm9tICdjbGFzcy12YXJpYW5jZS1hdXRob3JpdHknO1xuaW1wb3J0IHsgY24gfSBmcm9tICcuL3V0aWxzL2NuJztcbmltcG9ydCB7XG4gIEhvdmVyQ2FyZENvbXBvbmVudCxcbiAgSG92ZXJDYXJkVHJpZ2dlckNvbXBvbmVudCxcbiAgSG92ZXJDYXJkQ29udGVudENvbXBvbmVudCxcbn0gZnJvbSAnLi9ob3Zlci1jYXJkLmNvbXBvbmVudCc7XG5cbmNvbnN0IGlubGluZUNpdGF0aW9uVmFyaWFudHMgPSBjdmEoXG4gICdjdXJzb3ItcG9pbnRlciByb3VuZGVkLXNtIGFsaWduLXN1cGVyIGZvbnQtbWVkaXVtIGxlYWRpbmctbm9uZSB0cmFuc2l0aW9uLWNvbG9ycycsXG4gIHtcbiAgICB2YXJpYW50czoge1xuICAgICAgdmFyaWFudDoge1xuICAgICAgICBkZWZhdWx0OiAndGV4dC1wcmltYXJ5IGhvdmVyOnRleHQtcHJpbWFyeS84MCcsXG4gICAgICAgIG11dGVkOiAndGV4dC1tdXRlZC1mb3JlZ3JvdW5kIGhvdmVyOnRleHQtZm9yZWdyb3VuZCcsXG4gICAgICAgIHN1YnRsZTogJ3RleHQtZm9yZWdyb3VuZC82MCBob3Zlcjp0ZXh0LWZvcmVncm91bmQnLFxuICAgICAgfSxcbiAgICAgIHNpemU6IHtcbiAgICAgICAgc206ICd0ZXh0LVs5cHhdJyxcbiAgICAgICAgZGVmYXVsdDogJ3RleHQtWzEwcHhdJyxcbiAgICAgIH0sXG4gICAgfSxcbiAgICBkZWZhdWx0VmFyaWFudHM6IHsgdmFyaWFudDogJ2RlZmF1bHQnLCBzaXplOiAnZGVmYXVsdCcgfSxcbiAgfVxuKTtcblxuZXhwb3J0IHR5cGUgSW5saW5lQ2l0YXRpb25Qcm9wcyA9IFZhcmlhbnRQcm9wczx0eXBlb2YgaW5saW5lQ2l0YXRpb25WYXJpYW50cz47XG5cbi8qKlxuICogQSBzdXBlcnNjcmlwdCBjaXRhdGlvbiBtYXJrZXIgZm9yIHByb3NlLiBIb3ZlcmluZyB0aGUgbWFya2VyIHJldmVhbHMgdGhlXG4gKiBwcm9qZWN0ZWQgc291cmNlIGNhcmQsIHBvc2l0aW9uZWQgYnkgdGhlIGV4aXN0aW5nIGB0b2xsZS1ob3Zlci1jYXJkYC5cbiAqXG4gKiBgYGBodG1sXG4gKiBUaGUgbW9kZWwgd2FzIHJlbGVhc2VkIGluIE1hcmNoLjx0b2xsZS1pbmxpbmUtY2l0YXRpb24gW2luZGV4XT1cIjFcIj5cbiAqICAgPHRvbGxlLWlubGluZS1jaXRhdGlvbi1jYXJkXG4gKiAgICAgdGl0bGU9XCJSZWxlYXNlIG5vdGVzXCJcbiAqICAgICB1cmw9XCJodHRwczovL2V4YW1wbGUuY29tL25vdGVzXCJcbiAqICAgICBzbmlwcGV0PVwiU2hpcHBlZCBvbiAxNCBNYXJjaC5cIlxuICogICA+PC90b2xsZS1pbmxpbmUtY2l0YXRpb24tY2FyZD5cbiAqIDwvdG9sbGUtaW5saW5lLWNpdGF0aW9uPlxuICogYGBgXG4gKiBAbmV3XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3RvbGxlLWlubGluZS1jaXRhdGlvbicsXG4gIHN0eWxlczogWyc6aG9zdCB7IGRpc3BsYXk6IGlubGluZS1mbGV4OyB9J10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIEhvdmVyQ2FyZENvbXBvbmVudCwgSG92ZXJDYXJkVHJpZ2dlckNvbXBvbmVudCwgSG92ZXJDYXJkQ29udGVudENvbXBvbmVudF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZTogYFxuICAgIDx0b2xsZS1ob3Zlci1jYXJkXG4gICAgICBbb3BlbkRlbGF5XT1cIm9wZW5EZWxheVwiXG4gICAgICBbY2xvc2VEZWxheV09XCJjbG9zZURlbGF5XCJcbiAgICAgIFtwbGFjZW1lbnRdPVwicGxhY2VtZW50XCJcbiAgICAgIChtb3VzZWVudGVyKT1cInNjaGVkdWxlUmVmcmVzaChvcGVuRGVsYXkpXCJcbiAgICAgIChtb3VzZWxlYXZlKT1cInNjaGVkdWxlUmVmcmVzaChjbG9zZURlbGF5KVwiXG4gICAgPlxuICAgICAgPHRvbGxlLWhvdmVyLWNhcmQtdHJpZ2dlcj5cbiAgICAgICAgPHN1cFxuICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWwgfHwgJ0NpdGF0aW9uICcgKyBpbmRleFwiXG4gICAgICAgICAgW2NsYXNzXT1cImNvbXB1dGVkQ2xhc3NcIlxuICAgICAgICAgID57eyBpbmRleCB9fTwvc3VwXG4gICAgICAgID5cbiAgICAgIDwvdG9sbGUtaG92ZXItY2FyZC10cmlnZ2VyPlxuICAgICAgPHRvbGxlLWhvdmVyLWNhcmQtY29udGVudCBbY2xhc3NdPVwiY29udGVudENsYXNzXCI+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgIDwvdG9sbGUtaG92ZXItY2FyZC1jb250ZW50PlxuICAgIDwvdG9sbGUtaG92ZXItY2FyZD5cbiAgYCxcbn0pXG5leHBvcnQgY2xhc3MgSW5saW5lQ2l0YXRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG5cbiAgLyoqXG4gICAqIEFuZ3VsYXIgd3JpdGVzIGEgYm91bmQgYGNsYXNzYCBpbnB1dCB0aHJvdWdoIGl0cyBzdHlsaW5nIHBhdGgsIHdoaWNoIGRvZXNcbiAgICogbm90IG1hcmsgYW4gT25QdXNoIGNvbXBvbmVudCBkaXJ0eSDigJQgd2l0aG91dCB0aGlzIGhvb2sgdGhlIGNvbXBvbmVudCBrZWVwc1xuICAgKiByZW5kZXJpbmcgdGhlIGNsYXNzIGl0IHdhcyBib3JuIHdpdGguXG4gICAqL1xuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKiBOdW1iZXIgcmVuZGVyZWQgaW4gdGhlIHN1cGVyc2NyaXB0IG1hcmtlci4gQGRlZmF1bHQgMSAqL1xuICBASW5wdXQoKSBpbmRleDogbnVtYmVyIHwgc3RyaW5nID0gMTtcbiAgLyoqIENvbG91ciB0cmVhdG1lbnQgb2YgdGhlIG1hcmtlci4gQGRlZmF1bHQgJ2RlZmF1bHQnICovXG4gIEBJbnB1dCgpIHZhcmlhbnQ6IElubGluZUNpdGF0aW9uUHJvcHNbJ3ZhcmlhbnQnXSA9ICdkZWZhdWx0JztcbiAgLyoqIFRleHQgc2l6ZSBvZiB0aGUgbWFya2VyLiBAZGVmYXVsdCAnZGVmYXVsdCcgKi9cbiAgQElucHV0KCkgc2l6ZTogSW5saW5lQ2l0YXRpb25Qcm9wc1snc2l6ZSddID0gJ2RlZmF1bHQnO1xuICAvKiogU2lkZSBvZiB0aGUgbWFya2VyIHRoZSBzb3VyY2UgY2FyZCBvcGVucyBvbi4gQGRlZmF1bHQgJ3RvcCcgKi9cbiAgQElucHV0KCkgcGxhY2VtZW50OiAndG9wJyB8ICdib3R0b20nIHwgJ2xlZnQnIHwgJ3JpZ2h0JyA9ICd0b3AnO1xuICAvKiogTWlsbGlzZWNvbmRzIHRvIHdhaXQgYmVmb3JlIG9wZW5pbmcgdGhlIGNhcmQuIEBkZWZhdWx0IDE1MCAqL1xuICBASW5wdXQoKSBvcGVuRGVsYXkgPSAxNTA7XG4gIC8qKiBNaWxsaXNlY29uZHMgdG8gd2FpdCBiZWZvcmUgY2xvc2luZyB0aGUgY2FyZC4gQGRlZmF1bHQgMjAwICovXG4gIEBJbnB1dCgpIGNsb3NlRGVsYXkgPSAyMDA7XG4gIC8qKiBBY2Nlc3NpYmxlIGxhYmVsIGZvciB0aGUgbWFya2VyOyBmYWxscyBiYWNrIHRvIFwiQ2l0YXRpb24ge2luZGV4fVwiLiBAZGVmYXVsdCAnJyAqL1xuICBASW5wdXQoKSBhcmlhTGFiZWwgPSAnJztcbiAgLyoqIEV4dHJhIFRhaWx3aW5kIGNsYXNzZXMgbWVyZ2VkIG9udG8gdGhlIG1hcmtlciB2aWEgYGNuKClgIChsYXN0LXdpbnMpLiAqL1xuICBASW5wdXQoKSBjbGFzcyA9ICcnO1xuICAvKiogRXh0cmEgVGFpbHdpbmQgY2xhc3NlcyBtZXJnZWQgb250byB0aGUgaG92ZXIgY2FyZCBwYW5lbCB2aWEgYGNuKClgIChsYXN0LXdpbnMpLiAqL1xuICBASW5wdXQoKSBjYXJkQ2xhc3MgPSAnJztcblxuICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByaXZhdGUgcmVmcmVzaFRpbWVyPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG5cbiAgZ2V0IGNvbXB1dGVkQ2xhc3MoKSB7XG4gICAgcmV0dXJuIGNuKGlubGluZUNpdGF0aW9uVmFyaWFudHMoeyB2YXJpYW50OiB0aGlzLnZhcmlhbnQsIHNpemU6IHRoaXMuc2l6ZSB9KSwgdGhpcy5jbGFzcyk7XG4gIH1cblxuICBnZXQgY29udGVudENsYXNzKCkge1xuICAgIHJldHVybiBjbigndy03MiBwLTAnLCB0aGlzLmNhcmRDbGFzcyk7XG4gIH1cblxuICAvKipcbiAgICogYHRvbGxlLWhvdmVyLWNhcmRgIGZsaXBzIGl0cyBvd24gdmlzaWJpbGl0eSBmcm9tIGEgYHNldFRpbWVvdXRgLCB3aGljaCBuZXZlclxuICAgKiBtYXJrcyB0aGlzIE9uUHVzaCB2aWV3IGRpcnR5LiBSZS1jaGVjayBqdXN0IGFmdGVyIHRoZSBkZWxheSBlbGFwc2VzIHNvIHRoZVxuICAgKiBjYXJkIGFjdHVhbGx5IGFwcGVhcnMgKGFuZCBkaXNhcHBlYXJzKSBpbnNpZGUgYW4gT25QdXNoIGhvc3QuXG4gICAqL1xuICBzY2hlZHVsZVJlZnJlc2goZGVsYXk6IG51bWJlcik6IHZvaWQge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnJlZnJlc2hUaW1lcik7XG4gICAgdGhpcy5yZWZyZXNoVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpLCBkZWxheSArIDMyKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnJlZnJlc2hUaW1lcik7XG4gIH1cbn1cblxuLyoqIFRoZSBzb3VyY2UgcHJldmlldyBzaG93biBpbnNpZGUgYSBjaXRhdGlvbidzIGhvdmVyIGNhcmQuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd0b2xsZS1pbmxpbmUtY2l0YXRpb24tY2FyZCcsXG4gIHN0eWxlczogWyc6aG9zdCB7IGRpc3BsYXk6IGJsb2NrOyB9J10sXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IFtjbGFzc109XCJjb21wdXRlZENsYXNzXCI+XG4gICAgICA8cCBjbGFzcz1cInRydW5jYXRlIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1wb3BvdmVyLWZvcmVncm91bmRcIj57eyB0aXRsZSB9fTwvcD5cbiAgICAgIDxhXG4gICAgICAgICpuZ0lmPVwidXJsXCJcbiAgICAgICAgW2hyZWZdPVwidXJsXCJcbiAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgcmVsPVwibm9yZWZlcnJlciBub29wZW5lclwiXG4gICAgICAgIGNsYXNzPVwibXQtMC41IGZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHRydW5jYXRlIHRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kIHVuZGVybGluZS1vZmZzZXQtMiBob3Zlcjp0ZXh0LWZvcmVncm91bmQgaG92ZXI6dW5kZXJsaW5lXCJcbiAgICAgID5cbiAgICAgICAgPGkgY2xhc3M9XCJyaS1leHRlcm5hbC1saW5rLWxpbmUgc2hyaW5rLTBcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidHJ1bmNhdGVcIj57eyBkaXNwbGF5VXJsIH19PC9zcGFuPlxuICAgICAgPC9hPlxuICAgICAgPHAgKm5nSWY9XCJzbmlwcGV0XCIgY2xhc3M9XCJtdC0yIGxpbmUtY2xhbXAtMyB0ZXh0LXhzIGxlYWRpbmctcmVsYXhlZCB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj57eyBzbmlwcGV0IH19PC9wPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBJbmxpbmVDaXRhdGlvbkNhcmRDb21wb25lbnQgIGltcGxlbWVudHMgT25DaGFuZ2Vze1xuICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cbiAgLyoqXG4gICAqIEFuZ3VsYXIgd3JpdGVzIGEgYm91bmQgYGNsYXNzYCBpbnB1dCB0aHJvdWdoIGl0cyBzdHlsaW5nIHBhdGgsIHdoaWNoIGRvZXNcbiAgICogbm90IG1hcmsgYW4gT25QdXNoIGNvbXBvbmVudCBkaXJ0eSDigJQgd2l0aG91dCB0aGlzIGhvb2sgdGhlIGNvbXBvbmVudCBrZWVwc1xuICAgKiByZW5kZXJpbmcgdGhlIGNsYXNzIGl0IHdhcyBib3JuIHdpdGguXG4gICAqL1xuICBuZ09uQ2hhbmdlcygpOiB2b2lkIHtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKiBUaXRsZSBvZiB0aGUgY2l0ZWQgc291cmNlLiBAZGVmYXVsdCAnJyAqL1xuICBASW5wdXQoKSB0aXRsZSA9ICcnO1xuICAvKiogTGluayB0byB0aGUgY2l0ZWQgc291cmNlLiBAZGVmYXVsdCAnJyAqL1xuICBASW5wdXQoKSB1cmwgPSAnJztcbiAgLyoqIFNob3J0IGV4Y2VycHQgZnJvbSB0aGUgc291cmNlLiBAZGVmYXVsdCAnJyAqL1xuICBASW5wdXQoKSBzbmlwcGV0ID0gJyc7XG4gIC8qKiBFeHRyYSBUYWlsd2luZCBjbGFzc2VzIG1lcmdlZCBvbnRvIHRoZSBjYXJkIHZpYSBgY24oKWAgKGxhc3Qtd2lucykuICovXG4gIEBJbnB1dCgpIGNsYXNzID0gJyc7XG5cbiAgZ2V0IGNvbXB1dGVkQ2xhc3MoKSB7XG4gICAgcmV0dXJuIGNuKCdmbGV4IGZsZXgtY29sIHAtMycsIHRoaXMuY2xhc3MpO1xuICB9XG5cbiAgLyoqIFRoZSBVUkwgd2l0aG91dCBpdHMgc2NoZW1lLCB3aGljaCByZWFkcyBiZXR0ZXIgaW4gYSBuYXJyb3cgY2FyZC4gKi9cbiAgZ2V0IGRpc3BsYXlVcmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy51cmwucmVwbGFjZSgvXmh0dHBzPzpcXC9cXC8vLCAnJyk7XG4gIH1cbn1cblxuLyoqIEEgcHVsbGVkIHF1b3RlIGZyb20gdGhlIGNpdGVkIHNvdXJjZSwgc2hvd24gaW5zaWRlIHRoZSBjaXRhdGlvbiBjYXJkLiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndG9sbGUtaW5saW5lLWNpdGF0aW9uLXF1b3RlJyxcbiAgc3R5bGVzOiBbJzpob3N0IHsgZGlzcGxheTogaW5saW5lLWZsZXg7IH0nXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxibG9ja3F1b3RlIFtjbGFzc109XCJjb21wdXRlZENsYXNzXCI+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICA8Zm9vdGVyICpuZ0lmPVwiY2l0ZVwiIGNsYXNzPVwibXQtMSB0ZXh0LVsxMXB4XSBub3QtaXRhbGljIHRleHQtbXV0ZWQtZm9yZWdyb3VuZC84MFwiPuKAlCB7eyBjaXRlIH19PC9mb290ZXI+XG4gICAgPC9ibG9ja3F1b3RlPlxuICBgLFxufSlcbmV4cG9ydCBjbGFzcyBJbmxpbmVDaXRhdGlvblF1b3RlQ29tcG9uZW50ICBpbXBsZW1lbnRzIE9uQ2hhbmdlc3tcbiAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gIC8qKlxuICAgKiBBbmd1bGFyIHdyaXRlcyBhIGJvdW5kIGBjbGFzc2AgaW5wdXQgdGhyb3VnaCBpdHMgc3R5bGluZyBwYXRoLCB3aGljaCBkb2VzXG4gICAqIG5vdCBtYXJrIGFuIE9uUHVzaCBjb21wb25lbnQgZGlydHkg4oCUIHdpdGhvdXQgdGhpcyBob29rIHRoZSBjb21wb25lbnQga2VlcHNcbiAgICogcmVuZGVyaW5nIHRoZSBjbGFzcyBpdCB3YXMgYm9ybiB3aXRoLlxuICAgKi9cbiAgbmdPbkNoYW5nZXMoKTogdm9pZCB7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKiogQXR0cmlidXRpb24gc2hvd24gYmVuZWF0aCB0aGUgcXVvdGUuIEBkZWZhdWx0ICcnICovXG4gIEBJbnB1dCgpIGNpdGUgPSAnJztcbiAgLyoqIEV4dHJhIFRhaWx3aW5kIGNsYXNzZXMgbWVyZ2VkIG9udG8gdGhlIHF1b3RlIHZpYSBgY24oKWAgKGxhc3Qtd2lucykuICovXG4gIEBJbnB1dCgpIGNsYXNzID0gJyc7XG5cbiAgZ2V0IGNvbXB1dGVkQ2xhc3MoKSB7XG4gICAgcmV0dXJuIGNuKFxuICAgICAgJ210LTIgYm9yZGVyLWwtMiBib3JkZXItYm9yZGVyIHBsLTMgdGV4dC14cyBpdGFsaWMgbGVhZGluZy1yZWxheGVkIHRleHQtbXV0ZWQtZm9yZWdyb3VuZCcsXG4gICAgICB0aGlzLmNsYXNzXG4gICAgKTtcbiAgfVxufVxuIl19
|