verben-ng-ui 1.2.74 → 1.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.
Files changed (140) hide show
  1. package/INTEGRATION.md +270 -0
  2. package/README.md +17 -0
  3. package/THEMING.md +134 -0
  4. package/esm2022/public-api.mjs +3 -1
  5. package/esm2022/src/lib/components/card/card.component.mjs +2 -2
  6. package/esm2022/src/lib/components/card-data-view/card-data-view.component.mjs +3 -3
  7. package/esm2022/src/lib/components/chip/chip.component.mjs +3 -3
  8. package/esm2022/src/lib/components/data-columns/data-columns.component.mjs +3 -3
  9. package/esm2022/src/lib/components/data-export/data-export.component.mjs +3 -3
  10. package/esm2022/src/lib/components/data-extend/data-extend.component.mjs +3 -3
  11. package/esm2022/src/lib/components/data-filter/data-filter.component.mjs +3 -3
  12. package/esm2022/src/lib/components/data-import/data-import.component.mjs +3 -3
  13. package/esm2022/src/lib/components/data-sort/data-sort.component.mjs +3 -3
  14. package/esm2022/src/lib/components/data-table/data-table.component.mjs +33 -18
  15. package/esm2022/src/lib/components/data-table/data-table.types.mjs +1 -1
  16. package/esm2022/src/lib/components/data-table/footer.util.mjs +73 -0
  17. package/esm2022/src/lib/components/data-table/public-api.mjs +2 -1
  18. package/esm2022/src/lib/components/data-view/data-view.component.mjs +3 -3
  19. package/esm2022/src/lib/components/data-xport/data-xport.component.mjs +9 -5
  20. package/esm2022/src/lib/components/data-xport/data-xport.service.mjs +39 -3
  21. package/esm2022/src/lib/components/date-picker/date-picker.component.mjs +4 -4
  22. package/esm2022/src/lib/components/drop-down/drop-down-item/drop-down-item.component.mjs +3 -3
  23. package/esm2022/src/lib/components/drop-down/drop-down.component.mjs +4 -4
  24. package/esm2022/src/lib/components/notification/notification.component.mjs +3 -3
  25. package/esm2022/src/lib/components/number-input/number-input.component.mjs +2 -2
  26. package/esm2022/src/lib/components/pop-up/pop-up.component.mjs +4 -4
  27. package/esm2022/src/lib/components/sort-table/sort-table.component.mjs +3 -3
  28. package/esm2022/src/lib/components/svg/svg.component.mjs +6 -1
  29. package/esm2022/src/lib/components/table-filter/table-filter.component.mjs +3 -3
  30. package/esm2022/src/lib/components/tooltip/tooltip.component.mjs +3 -3
  31. package/esm2022/src/lib/components/verben-dialogue/verben-dialogue.component.mjs +6 -6
  32. package/esm2022/src/lib/components/verben-mail/verben-mail.component.mjs +4 -4
  33. package/esm2022/src/lib/components/verben-time-picker/verben-time-picker.component.mjs +2 -2
  34. package/esm2022/src/lib/components/verbena-tab/tab-item.component.mjs +2 -2
  35. package/esm2022/src/lib/components/verbena-tab/verbena-tab.component.mjs +2 -2
  36. package/esm2022/src/lib/components/visible-column/visible-column.component.mjs +3 -3
  37. package/esm2022/src/lib/services/notification.services.mjs +17 -17
  38. package/esm2022/src/lib/theme/index.mjs +2 -0
  39. package/esm2022/src/lib/theme/public-api.mjs +5 -0
  40. package/esm2022/src/lib/theme/theme.service.mjs +121 -0
  41. package/esm2022/src/lib/theme/theme.token.mjs +7 -0
  42. package/esm2022/src/lib/theme/theme.types.mjs +2 -0
  43. package/esm2022/src/lib/theme/verben-ng-ui-src-lib-theme.mjs +5 -0
  44. package/esm2022/src/lib/theme/verben-ui.module.mjs +41 -0
  45. package/esm2022/src/lib/theme-switcher/theme-switcher.directive.mjs +52 -44
  46. package/esm2022/src/lib/validate/error-message.service.mjs +4 -4
  47. package/esm2022/src/lib/validate/validate.directive.mjs +3 -3
  48. package/esm2022/src/lib/verbena-badge/verbena-badge.component.mjs +3 -3
  49. package/esm2022/src/lib/verbena-button/verbena-button.component.mjs +27 -25
  50. package/esm2022/src/lib/verbena-input/verbena-input.component.mjs +7 -7
  51. package/esm2022/src/lib/verbena-switch/verbena-switch.component.mjs +5 -5
  52. package/esm2022/src/lib/verbena-textarea/verbena-textarea.component.mjs +5 -5
  53. package/fesm2022/verben-ng-ui-src-lib-components-card-data-view.mjs +2 -2
  54. package/fesm2022/verben-ng-ui-src-lib-components-card-data-view.mjs.map +1 -1
  55. package/fesm2022/verben-ng-ui-src-lib-components-card.mjs +2 -2
  56. package/fesm2022/verben-ng-ui-src-lib-components-card.mjs.map +1 -1
  57. package/fesm2022/verben-ng-ui-src-lib-components-chip.mjs +2 -2
  58. package/fesm2022/verben-ng-ui-src-lib-components-chip.mjs.map +1 -1
  59. package/fesm2022/verben-ng-ui-src-lib-components-data-columns.mjs +2 -2
  60. package/fesm2022/verben-ng-ui-src-lib-components-data-columns.mjs.map +1 -1
  61. package/fesm2022/verben-ng-ui-src-lib-components-data-export.mjs +2 -2
  62. package/fesm2022/verben-ng-ui-src-lib-components-data-export.mjs.map +1 -1
  63. package/fesm2022/verben-ng-ui-src-lib-components-data-extend.mjs +2 -2
  64. package/fesm2022/verben-ng-ui-src-lib-components-data-extend.mjs.map +1 -1
  65. package/fesm2022/verben-ng-ui-src-lib-components-data-filter.mjs +2 -2
  66. package/fesm2022/verben-ng-ui-src-lib-components-data-filter.mjs.map +1 -1
  67. package/fesm2022/verben-ng-ui-src-lib-components-data-import.mjs +2 -2
  68. package/fesm2022/verben-ng-ui-src-lib-components-data-import.mjs.map +1 -1
  69. package/fesm2022/verben-ng-ui-src-lib-components-data-sort.mjs +2 -2
  70. package/fesm2022/verben-ng-ui-src-lib-components-data-sort.mjs.map +1 -1
  71. package/fesm2022/verben-ng-ui-src-lib-components-data-table.mjs +105 -18
  72. package/fesm2022/verben-ng-ui-src-lib-components-data-table.mjs.map +1 -1
  73. package/fesm2022/verben-ng-ui-src-lib-components-data-view.mjs +2 -2
  74. package/fesm2022/verben-ng-ui-src-lib-components-data-view.mjs.map +1 -1
  75. package/fesm2022/verben-ng-ui-src-lib-components-data-xport.mjs +46 -6
  76. package/fesm2022/verben-ng-ui-src-lib-components-data-xport.mjs.map +1 -1
  77. package/fesm2022/verben-ng-ui-src-lib-components-date-picker.mjs +3 -3
  78. package/fesm2022/verben-ng-ui-src-lib-components-date-picker.mjs.map +1 -1
  79. package/fesm2022/verben-ng-ui-src-lib-components-drop-down.mjs +5 -5
  80. package/fesm2022/verben-ng-ui-src-lib-components-drop-down.mjs.map +1 -1
  81. package/fesm2022/verben-ng-ui-src-lib-components-notification.mjs +2 -2
  82. package/fesm2022/verben-ng-ui-src-lib-components-notification.mjs.map +1 -1
  83. package/fesm2022/verben-ng-ui-src-lib-components-number-input.mjs +2 -2
  84. package/fesm2022/verben-ng-ui-src-lib-components-number-input.mjs.map +1 -1
  85. package/fesm2022/verben-ng-ui-src-lib-components-pop-up.mjs +3 -3
  86. package/fesm2022/verben-ng-ui-src-lib-components-pop-up.mjs.map +1 -1
  87. package/fesm2022/verben-ng-ui-src-lib-components-sort-table.mjs +2 -2
  88. package/fesm2022/verben-ng-ui-src-lib-components-sort-table.mjs.map +1 -1
  89. package/fesm2022/verben-ng-ui-src-lib-components-svg.mjs +5 -0
  90. package/fesm2022/verben-ng-ui-src-lib-components-svg.mjs.map +1 -1
  91. package/fesm2022/verben-ng-ui-src-lib-components-table-filter.mjs +2 -2
  92. package/fesm2022/verben-ng-ui-src-lib-components-table-filter.mjs.map +1 -1
  93. package/fesm2022/verben-ng-ui-src-lib-components-tooltip.mjs +2 -2
  94. package/fesm2022/verben-ng-ui-src-lib-components-tooltip.mjs.map +1 -1
  95. package/fesm2022/verben-ng-ui-src-lib-components-verben-dialogue.mjs +5 -5
  96. package/fesm2022/verben-ng-ui-src-lib-components-verben-dialogue.mjs.map +1 -1
  97. package/fesm2022/verben-ng-ui-src-lib-components-verben-mail.mjs +3 -3
  98. package/fesm2022/verben-ng-ui-src-lib-components-verben-mail.mjs.map +1 -1
  99. package/fesm2022/verben-ng-ui-src-lib-components-verben-time-picker.mjs +2 -2
  100. package/fesm2022/verben-ng-ui-src-lib-components-verben-time-picker.mjs.map +1 -1
  101. package/fesm2022/verben-ng-ui-src-lib-components-verbena-tab.mjs +3 -3
  102. package/fesm2022/verben-ng-ui-src-lib-components-verbena-tab.mjs.map +1 -1
  103. package/fesm2022/verben-ng-ui-src-lib-components-visible-column.mjs +2 -2
  104. package/fesm2022/verben-ng-ui-src-lib-components-visible-column.mjs.map +1 -1
  105. package/fesm2022/verben-ng-ui-src-lib-services.mjs +16 -16
  106. package/fesm2022/verben-ng-ui-src-lib-services.mjs.map +1 -1
  107. package/fesm2022/verben-ng-ui-src-lib-theme-switcher.mjs +50 -42
  108. package/fesm2022/verben-ng-ui-src-lib-theme-switcher.mjs.map +1 -1
  109. package/fesm2022/verben-ng-ui-src-lib-theme.mjs +170 -0
  110. package/fesm2022/verben-ng-ui-src-lib-theme.mjs.map +1 -0
  111. package/fesm2022/verben-ng-ui-src-lib-validate.mjs +5 -5
  112. package/fesm2022/verben-ng-ui-src-lib-validate.mjs.map +1 -1
  113. package/fesm2022/verben-ng-ui-src-lib-verbena-badge.mjs +2 -2
  114. package/fesm2022/verben-ng-ui-src-lib-verbena-badge.mjs.map +1 -1
  115. package/fesm2022/verben-ng-ui-src-lib-verbena-button.mjs +26 -24
  116. package/fesm2022/verben-ng-ui-src-lib-verbena-button.mjs.map +1 -1
  117. package/fesm2022/verben-ng-ui-src-lib-verbena-input.mjs +6 -6
  118. package/fesm2022/verben-ng-ui-src-lib-verbena-input.mjs.map +1 -1
  119. package/fesm2022/verben-ng-ui-src-lib-verbena-switch.mjs +4 -4
  120. package/fesm2022/verben-ng-ui-src-lib-verbena-switch.mjs.map +1 -1
  121. package/fesm2022/verben-ng-ui-src-lib-verbena-textarea.mjs +4 -4
  122. package/fesm2022/verben-ng-ui-src-lib-verbena-textarea.mjs.map +1 -1
  123. package/fesm2022/verben-ng-ui.mjs +2 -0
  124. package/fesm2022/verben-ng-ui.mjs.map +1 -1
  125. package/package.json +96 -90
  126. package/public-api.d.ts +2 -0
  127. package/src/lib/components/data-table/data-table.component.d.ts +4 -1
  128. package/src/lib/components/data-table/data-table.types.d.ts +33 -0
  129. package/src/lib/components/data-table/footer.util.d.ts +20 -0
  130. package/src/lib/components/data-table/public-api.d.ts +1 -0
  131. package/src/lib/components/data-xport/data-xport.component.d.ts +3 -1
  132. package/src/lib/components/data-xport/data-xport.service.d.ts +10 -1
  133. package/src/lib/theme/index.d.ts +1 -0
  134. package/src/lib/theme/public-api.d.ts +4 -0
  135. package/src/lib/theme/theme.service.d.ts +28 -0
  136. package/src/lib/theme/theme.token.d.ts +7 -0
  137. package/src/lib/theme/theme.types.d.ts +56 -0
  138. package/src/lib/theme/verben-ui.module.d.ts +30 -0
  139. package/src/lib/theme-switcher/theme-switcher.directive.d.ts +21 -9
  140. package/styles/theme.css +156 -0
package/INTEGRATION.md ADDED
@@ -0,0 +1,270 @@
1
+ # Integrating the `verben-ng-ui` Theme (Consumer Guide)
2
+
3
+ > **Audience:** an engineer or coding agent working *inside a project that depends on
4
+ > `verben-ng-ui`*. This file tells you exactly how to wire the theme into that project.
5
+ > For the full token list and the design rationale, see **[THEMING.md](./THEMING.md)**.
6
+ > This is the task-oriented playbook; THEMING.md is the reference.
7
+
8
+ ---
9
+
10
+ ## 0. TL;DR (agent fast path)
11
+
12
+ The theme is a set of CSS custom properties (`--vbn-*`) shipped in
13
+ `node_modules/verben-ng-ui/styles/theme.css`. They cascade from `:root`, so they cross
14
+ component **and library** boundaries automatically. **Exactly one project — the top-level
15
+ application — loads `theme.css` and (optionally) calls `VerbenUiModule.forRoot(...)`.**
16
+ Everything nested below it inherits the same tokens for free.
17
+
18
+ First, determine which role this project plays, then jump to that section:
19
+
20
+ | Role | How to tell | What you do |
21
+ |---|---|---|
22
+ | **A. Leaf application** | Has a root `AppModule`/bootstrap, an `angular.json` with a buildable app target, is deployed to users. Depends on `verben-ng-ui` (directly or transitively). | §2 — load `theme.css`, call `forRoot()`. **This is the only layer that configures the theme.** |
23
+ | **B. Intermediate library** | Is itself an Angular library (`ng-packagr`, publishes to npm), lists `verben-ng-ui` under **`peerDependencies`**, is consumed by other projects. | §3 — do **not** load `theme.css` or call `forRoot()`. Just make your own styles read `--vbn-*` tokens. |
24
+ | **C. `verben-ng-ui` itself** | You're editing this library. | Not a consumer — see [THEMING.md](./THEMING.md). |
25
+
26
+ **Minimum version:** the theme layer ships in `verben-ng-ui@>=1.3.0` (the first release
27
+ that contains `styles/theme.css` and the `theme` entry point). If
28
+ `node_modules/verben-ng-ui/styles/theme.css` does not exist, upgrade first:
29
+ `npm i verben-ng-ui@latest`.
30
+
31
+ ---
32
+
33
+ ## 1. Mental model (read this once)
34
+
35
+ - **The contract is CSS custom properties**, prefixed `--vbn-`. Because custom
36
+ properties inherit through the DOM regardless of Angular's `ViewEncapsulation`, a value
37
+ set on `:root` reaches every component's scoped CSS **and** every `[ngStyle]`/inline
38
+ binding — in `verben-ng-ui` and in every other library that reads the same tokens.
39
+ - **Two token layers:** a small set of *core* tokens (brand, surface, text, border,
40
+ status, radius, typography) and *component* tokens that fall back to core via
41
+ `var(--vbn-component-x, var(--vbn-core-x))`. You normally set only core tokens.
42
+ - **`theme.css` is the single source of default values** (light `:root` + dark
43
+ `[data-vbn-theme="dark"]`). It must be loaded **once, globally**, by the leaf app.
44
+ Loading it in a library or more than once is wrong (see §3, §5).
45
+ - **`forRoot()` / `ThemeService` is a convenience layer** that writes tokens onto
46
+ `document.documentElement` from TypeScript. It is optional — a project can theme purely
47
+ by overriding `--vbn-*` in its own CSS. Use `forRoot()` for static brand config;
48
+ `ThemeService` for runtime changes (rebrand, dark-mode toggle).
49
+
50
+ ---
51
+
52
+ ## 2. Role A — Leaf application (the configuring layer)
53
+
54
+ Do all three steps. This is the complete integration for an app like `White360FE`.
55
+
56
+ ### 2.1 Load `theme.css` globally (required)
57
+
58
+ Add it as the **first** entry so your own styles can override tokens after it. Pick one:
59
+
60
+ **Option 1 — `angular.json` `styles` array** (preferred; add to every build config that
61
+ has a `styles` array):
62
+
63
+ ```jsonc
64
+ "styles": [
65
+ "node_modules/verben-ng-ui/styles/theme.css",
66
+ // ...existing entries (other verben-*-ui styles, src/styles.css) after this
67
+ ]
68
+ ```
69
+
70
+ **Option 2 — `@import` at the top of your global stylesheet** (`src/styles.css` / `.scss`):
71
+
72
+ ```css
73
+ @import 'verben-ng-ui/styles/theme.css';
74
+ ```
75
+
76
+ > Load `theme.css` **before** any other `verben-*-ui` style sheets and before your own
77
+ > `src/styles.*`, so those can override tokens.
78
+
79
+ ### 2.2 Configure the brand (optional but usual)
80
+
81
+ In your root `AppModule` (or `main.ts` providers for standalone bootstrap):
82
+
83
+ ```ts
84
+ import { VerbenUiModule } from 'verben-ng-ui';
85
+
86
+ @NgModule({
87
+ imports: [
88
+ // ...
89
+ VerbenUiModule.forRoot({
90
+ color: {
91
+ primary: '#D4A007', // your brand
92
+ error: '#E20000',
93
+ },
94
+ typography: { fontFamily: 'Montserrat, sans-serif' },
95
+ radius: '6px',
96
+ // Escape hatch for component tokens with no lean alias:
97
+ tokens: { '--vbn-table-header-bg': '#EFF2FB' },
98
+ }),
99
+ ],
100
+ })
101
+ export class AppModule {}
102
+ ```
103
+
104
+ Everything you omit keeps its shipped default. Skip `forRoot()` entirely and just
105
+ override `--vbn-*` in your own `:root {}` if you prefer pure CSS.
106
+
107
+ **Standalone bootstrap** (no `AppModule`): call `importProvidersFrom(VerbenUiModule.forRoot({...}))`
108
+ in `bootstrapApplication(AppComponent, { providers: [...] })`.
109
+
110
+ ### 2.3 Dark mode (optional)
111
+
112
+ `theme.css` already defines the dark set under `[data-vbn-theme="dark"]`. Activate it any of:
113
+
114
+ ```ts
115
+ constructor(private theme: ThemeService) {}
116
+ enableDark() { this.theme.setMode('dark'); } // or this.theme.toggleMode()
117
+ ```
118
+ or the directive on a toggle element (persists to `localStorage`):
119
+ ```html
120
+ <button [appThemeSwitcher]>Toggle theme</button>
121
+ ```
122
+ or set the attribute yourself: `document.documentElement.setAttribute('data-vbn-theme','dark')`.
123
+
124
+ ### 2.4 Runtime rebrand (optional)
125
+
126
+ ```ts
127
+ this.theme.applyTheme({ color: { primary: '#0ea5e9' } }); // repaints everything live
128
+ this.theme.setToken('--vbn-table-header-bg', '#1f2937'); // one raw token
129
+ ```
130
+
131
+ ### 2.5 Done — verify (see §4).
132
+
133
+ ---
134
+
135
+ ## 3. Role B — Intermediate library (e.g. `verben-workflow-ui`)
136
+
137
+ An intermediate library is consumed *inside* a leaf app that already loaded `theme.css`
138
+ and called `forRoot()`. Your job is only to **participate** in whatever theme the app
139
+ sets — not to configure or load anything.
140
+
141
+ ### DO
142
+
143
+ 1. **Keep `verben-ng-ui` in `peerDependencies`** (not `dependencies`). This guarantees the
144
+ final app resolves a single instance and a single `:root` token set.
145
+ ```jsonc
146
+ // projects/<your-lib>/package.json
147
+ "peerDependencies": {
148
+ "verben-ng-ui": "^1.3.0" // bump to the theming-capable range
149
+ }
150
+ ```
151
+ 2. **Make your own component styles read the tokens.** Replace hardcoded colors in your
152
+ library's `.css`/`.scss` and TS style objects with `var(--vbn-*)`. Example — this lib's
153
+ `base-table-style.ts` currently hardcodes `#D4A007` / `#FDFDFD` / `#EFF2FB`; theme-aware
154
+ version:
155
+ ```ts
156
+ export const baseStyle: TableStyles = {
157
+ border: '1px solid var(--vbn-color-border)',
158
+ rows: {
159
+ even: { backgroundColor: 'var(--vbn-table-row-even-bg)' },
160
+ odd: { backgroundColor: 'var(--vbn-table-row-odd-bg)' },
161
+ },
162
+ header: { backgroundColor: 'var(--vbn-table-header-bg)' },
163
+ };
164
+ ```
165
+ For colors unique to your library that have no `--vbn-*` equivalent, define your **own**
166
+ namespaced token that *falls back to* a verben core token, so it themes by default but
167
+ stays overridable:
168
+ ```css
169
+ .wf-node { background: var(--wf-node-bg, var(--vbn-color-surface)); }
170
+ ```
171
+ 3. **Document** (in your lib's README) that the host app must load `verben-ng-ui/styles/theme.css`.
172
+
173
+ ### DON'T
174
+
175
+ - ❌ Do **not** add `verben-ng-ui/styles/theme.css` to your library's `assets` or import it
176
+ in library styles. Libraries don't emit global stylesheets into the app's `:root`, and if
177
+ they did you'd get duplicate/competing token definitions.
178
+ - ❌ Do **not** call `VerbenUiModule.forRoot()` anywhere in the library. `forRoot()` is for
179
+ the app's root injector exactly once; calling it in a library breaks that contract.
180
+ - ❌ Do **not** move `verben-ng-ui` to `dependencies` — that risks a second copy being
181
+ bundled, splitting the token/`:root` ownership.
182
+
183
+ > Net effect: the workflow lib ships zero theme config. When `White360FE` sets
184
+ > `--vbn-color-primary`, the workflow lib's tables, buttons and the `verben-ng-ui`
185
+ > components it renders all recolor together, because they all read the same inherited
186
+ > `:root` variables.
187
+
188
+ ---
189
+
190
+ ## 4. Verification checklist (run these)
191
+
192
+ ```bash
193
+ # 1. The theme stylesheet exists in the installed package (leaf app):
194
+ ls node_modules/verben-ng-ui/styles/theme.css # must exist; else upgrade the dep
195
+
196
+ # 2. It's wired into the build (leaf app) — one of these must match:
197
+ grep -R "verben-ng-ui/styles/theme.css" angular.json src/styles.*
198
+
199
+ # 3. The app builds:
200
+ ng build
201
+
202
+ # 4. Prove configurability: change one forRoot value (e.g. color.primary) or
203
+ # override :root { --vbn-color-primary: hotpink } and confirm buttons, table
204
+ # headers/links, dropdown selection, tabs and switches all recolor.
205
+
206
+ # 5. Prove enforcement in an intermediate library (Role B): no stray literals
207
+ # should remain in your own styles/TS — they should all be var(--vbn-*):
208
+ grep -rEi '#[0-9a-f]{3,6}|rgba?\(|: *(red|black|white|gr[ae]y)' \
209
+ projects/<your-lib>/src --include=*.css --include=*.ts
210
+ ```
211
+
212
+ Runtime sanity check in the browser console (leaf app):
213
+ ```js
214
+ getComputedStyle(document.documentElement).getPropertyValue('--vbn-color-primary')
215
+ // -> your configured brand color, proving theme.css loaded and forRoot applied
216
+ ```
217
+
218
+ ---
219
+
220
+ ## 5. Multi-layer topology (worked example)
221
+
222
+ ```
223
+ White360FE (Role A — leaf app)
224
+ ├─ loads node_modules/verben-ng-ui/styles/theme.css ← the ONLY place theme.css loads
225
+ ├─ calls VerbenUiModule.forRoot({ color:{ primary } }) ← the ONLY place forRoot runs
226
+
227
+ ├─ depends on verben-ng-ui (direct)
228
+ └─ depends on verben-workflow-ui (Role B — intermediate library)
229
+ └─ peerDependency → verben-ng-ui (same single instance as the app's)
230
+ • no theme.css, no forRoot()
231
+ • its own styles read var(--vbn-*)
232
+ ```
233
+
234
+ Why this works and what to watch for:
235
+
236
+ - **Single `:root`, single source of tokens.** Only the leaf app injects `theme.css`, so
237
+ there is exactly one set of `--vbn-*` definitions. `forRoot()` writes onto the same
238
+ `<html>` element. Every nested library reads from that one place.
239
+ - **`peerDependency` is load-bearing.** It keeps `verben-ng-ui` a single resolved copy
240
+ across the app and the workflow lib, so tokens (and `TableStyles`, `InjectionToken`s,
241
+ etc.) are shared, not duplicated. Keep versions compatible: the app and every
242
+ intermediate lib should allow the same `verben-ng-ui` major (`^1.3.0`).
243
+ - **Tailwind coexistence.** These projects use Tailwind. Tailwind utilities and `--vbn-*`
244
+ tokens are independent — the tokens theme verben components; Tailwind classes theme your
245
+ own markup. If you want them to share a palette, point a Tailwind color at a token:
246
+ `colors: { primary: 'var(--vbn-color-primary)' }` in `tailwind.config.js`.
247
+ - **Upgrade order when adopting theming:** (1) publish `verben-ng-ui` with the theme layer;
248
+ (2) bump `verben-ng-ui` in the intermediate lib's `peerDependencies` and tokenize its
249
+ styles, republish; (3) in the leaf app, bump both deps, load `theme.css`, add `forRoot()`.
250
+
251
+ ---
252
+
253
+ ## 6. Troubleshooting
254
+
255
+ | Symptom | Cause | Fix |
256
+ |---|---|---|
257
+ | Components render unstyled / default browser colors | `theme.css` not loaded | Add it to `angular.json` `styles` or `@import` it (§2.1). |
258
+ | `forRoot` colors ignored | `theme.css` loaded *after* your overrides, or not at all | Ensure `theme.css` is first in the `styles` array. |
259
+ | `ls .../styles/theme.css` missing | Old `verben-ng-ui` (<1.3.0) | `npm i verben-ng-ui@latest`. |
260
+ | Colors change in some libs but not the workflow lib | Workflow lib still hardcodes colors | Tokenize its styles (§3, DO #2). |
261
+ | Two different primary colors on screen | Duplicate `verben-ng-ui` copies | Ensure intermediate libs use `peerDependencies`; run `npm ls verben-ng-ui` — expect one version. |
262
+ | Dark mode doesn't flip everything | A style bypasses tokens | Grep that component for literals (§4 step 5). |
263
+
264
+ ---
265
+
266
+ ## 7. Where to look next
267
+
268
+ - **[THEMING.md](./THEMING.md)** — every `--vbn-*` token, its light/dark default, and the
269
+ per-component "extra tokens" list. Use it to pick the right token when tokenizing styles.
270
+ - `styles/theme.css` (in the installed package) — the authoritative default values.
package/README.md CHANGED
@@ -2,6 +2,23 @@
2
2
 
3
3
  This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 18.2.0.
4
4
 
5
+ ## Theming
6
+
7
+ All components are themed through CSS custom properties (`--vbn-*`), configurable
8
+ once from the consuming app and obeyed everywhere — with reasonable defaults and
9
+ built-in light/dark mode.
10
+
11
+ 1. Load the token stylesheet: add `node_modules/verben-ng-ui/styles/theme.css` to
12
+ your `angular.json` `styles` (or `@import` it in your global stylesheet).
13
+ 2. Configure with plain CSS (override `--vbn-*` in `:root`) **or**
14
+ `VerbenUiModule.forRoot({ color: { primary: '#d4a007' } })`.
15
+ 3. Dark mode: `ThemeService.setMode('dark')` or the `[appThemeSwitcher]` directive.
16
+
17
+ Guides:
18
+ - **[INTEGRATION.md](./INTEGRATION.md)** — step-by-step consumer setup (leaf apps,
19
+ intermediate libraries, and multi-layer / peer-dependency projects). Agent-friendly.
20
+ - **[THEMING.md](./THEMING.md)** — full design guide and `--vbn-*` token reference.
21
+
5
22
  ## Code scaffolding
6
23
 
7
24
  Run `ng generate component component-name --project verben-ng-ui` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project verben-ng-ui`.
package/THEMING.md ADDED
@@ -0,0 +1,134 @@
1
+ # Theming `verben-ng-ui`
2
+
3
+ > **Just wiring this into a consuming project?** See **[INTEGRATION.md](./INTEGRATION.md)** —
4
+ > a task-oriented, agent-friendly playbook covering leaf apps, intermediate libraries, and
5
+ > the multi-layer (peer-dependency) setup. This file is the reference for tokens and design.
6
+
7
+ Every color, font, radius and shadow in the library is driven by CSS custom
8
+ properties (`--vbn-*`). Because custom properties inherit through the DOM
9
+ regardless of Angular's view encapsulation, a single value set on `:root`
10
+ reaches every component — including styles applied through `[ngStyle]`. This is
11
+ the enforcement mechanism: components have **no hardcoded colors**; they read
12
+ tokens, so the theme is always obeyed.
13
+
14
+ ## 1. Load the token stylesheet (required)
15
+
16
+ `styles/theme.css` ships the default values for every token (light + dark). Add
17
+ it once to your app's `angular.json` `styles` array:
18
+
19
+ ```jsonc
20
+ "styles": [
21
+ "node_modules/verben-ng-ui/styles/theme.css",
22
+ "src/styles.scss"
23
+ ]
24
+ ```
25
+
26
+ …or `@import` it from your global stylesheet:
27
+
28
+ ```scss
29
+ @import 'verben-ng-ui/styles/theme.css';
30
+ ```
31
+
32
+ ## 2. Configure (pick either approach)
33
+
34
+ ### a) Plain CSS — override tokens in your `:root`
35
+
36
+ ```css
37
+ :root {
38
+ --vbn-color-primary: #d4a007;
39
+ --vbn-color-error: #e20000;
40
+ --vbn-font-family: 'Montserrat', sans-serif;
41
+ --vbn-radius: 6px;
42
+ }
43
+ ```
44
+
45
+ ### b) TypeScript — `VerbenUiModule.forRoot()`
46
+
47
+ The lean config maps to core tokens; anything omitted keeps its default.
48
+
49
+ ```ts
50
+ import { VerbenUiModule } from 'verben-ng-ui';
51
+
52
+ @NgModule({
53
+ imports: [
54
+ VerbenUiModule.forRoot({
55
+ color: { primary: '#d4a007', error: '#e20000' },
56
+ typography: { fontFamily: 'Montserrat, sans-serif' },
57
+ radius: '6px',
58
+ // Escape hatch for component tokens that have no lean alias:
59
+ tokens: { '--vbn-table-header-bg': '#1f2937' },
60
+ }),
61
+ ],
62
+ })
63
+ export class AppModule {}
64
+ ```
65
+
66
+ For dynamic changes, inject `ThemeService`:
67
+
68
+ ```ts
69
+ constructor(private theme: ThemeService) {}
70
+ enableDark() { this.theme.setMode('dark'); } // or toggleMode()
71
+ rebrand() { this.theme.applyTheme({ color: { primary: '#0ea5e9' } }); }
72
+ ```
73
+
74
+ ## 3. Dark mode
75
+
76
+ `theme.css` defines a dark token set under `[data-vbn-theme="dark"]`. Activate it
77
+ with `ThemeService.setMode('dark')`, the `[appThemeSwitcher]` directive (click to
78
+ toggle, persists to localStorage), or by setting the attribute yourself.
79
+
80
+ ## 4. Per-instance overrides
81
+
82
+ The color `@Input()`s on components (`bgColor`, `textColor`, `[styleConfig]`, …)
83
+ still work and take precedence over the token for that one instance:
84
+
85
+ ```html
86
+ <verbena-button bgColor="#fff">One-off</verbena-button>
87
+ ```
88
+
89
+ ---
90
+
91
+ ## Token reference
92
+
93
+ ### Core tokens (the lean surface you normally set)
94
+
95
+ | Token | Default (light) | Default (dark) | Purpose |
96
+ |---|---|---|---|
97
+ | `--vbn-color-primary` | `#ffe681` | — | Brand color |
98
+ | `--vbn-color-on-primary` | `#404040` | — | Text/icon on `primary` |
99
+ | `--vbn-color-secondary` | `#e8eaf1` | — | Secondary surface |
100
+ | `--vbn-color-on-secondary` | `#404040` | — | Text on `secondary` |
101
+ | `--vbn-color-surface` | `#ffffff` | `#1e1e1e` | Component background |
102
+ | `--vbn-color-surface-alt` | `#f9f9f9` | `#2a2a2a` | Striping/hover/subtle fills |
103
+ | `--vbn-color-background` | `#ffffff` | `#121212` | Page/overlay base |
104
+ | `--vbn-color-text` | `#334155` | `#e5e7eb` | Body text |
105
+ | `--vbn-color-text-muted` | `#64748b` | `#9ca3af` | Secondary text |
106
+ | `--vbn-color-border` | `#cbd5e1` | `#3f3f46` | Borders/dividers |
107
+ | `--vbn-color-border-focus` | `#3b82f6` | — | Focus border / accent links |
108
+ | `--vbn-color-success` / `-bg` / `-contrast` | `#2db76f` / `#d6f3e6` / `#2db76f` | — | Success |
109
+ | `--vbn-color-warning` / `-bg` / `-contrast` | `#eda73f` / `#eda73f1a` / `#eda73f` | — | Warning |
110
+ | `--vbn-color-error` / `-bg` / `-contrast` | `#e20000` / `#ffe681` / `#e20000` | — | Error/danger |
111
+ | `--vbn-color-info` / `-bg` / `-contrast` | `#0552b5` / `#e7f1ff` / `#0552b5` | — | Info |
112
+ | `--vbn-color-scrim` | `rgba(0,0,0,.5)` | `rgba(0,0,0,.7)` | Modal/overlay backdrop |
113
+ | `--vbn-font-family` | `sans-serif` | — | Base font |
114
+ | `--vbn-font-size-base` / `-sm` / `-lg` | `.9rem` / `.8rem` / `1.1rem` | — | Font sizes |
115
+ | `--vbn-font-weight-normal` / `-bold` | `400` / `700` | — | Font weights |
116
+ | `--vbn-radius` / `-sm` / `-lg` | `5px` / `4px` / `8px` | — | Border radii |
117
+ | `--vbn-shadow-sm` / `-md` | — | — | Elevation |
118
+ | `--vbn-space-xs…lg` | `4–16px` | — | Spacing scale |
119
+
120
+ ### Component tokens (default to core; override for fine control)
121
+
122
+ These cascade from the core tokens above unless you set them explicitly.
123
+
124
+ | Group | Tokens |
125
+ |---|---|
126
+ | Button | `--vbn-btn-{primary,secondary,danger,small}-{bg,fg}`, `--vbn-btn-{outline,ylw-outline}-{bg,fg,border}`, `--vbn-btn-grey-fg` |
127
+ | Input | `--vbn-input-{bg,text,border,border-hover,border-focus,placeholder,disabled-bg}` |
128
+ | Chip | `--vbn-chip-bg` |
129
+ | States | `--vbn-state-{hover-bg,selected-bg,selected-fg,on}` |
130
+ | Data table | `--vbn-table-{header-bg,header-fg,row-even-bg,row-odd-bg,row-hover-bg,footer-bg,border}` |
131
+ | Status (notifications) | `--vbn-status-{success,error,warning,info}-{bg,fg}` |
132
+
133
+ > **Note on SVG icons:** the `<verben-svg>` component applies `fill`/`stroke`
134
+ > as inline styles, so `var(--vbn-*)` tokens resolve correctly there too.
@@ -4,6 +4,8 @@
4
4
  // export * from './lib/verben-ng-ui.service';
5
5
  // export * from './lib/verben-ng-ui.component';
6
6
  //New Exports
7
+ export * from 'verben-ng-ui/src/lib/theme';
8
+ export * from 'verben-ng-ui/src/lib/theme-switcher';
7
9
  export * from 'verben-ng-ui/src/lib/models';
8
10
  export * from 'verben-ng-ui/src/lib/services';
9
11
  export * from 'verben-ng-ui/src/lib/components/shared';
@@ -183,4 +185,4 @@ export * from 'verben-ng-ui/src/lib/components/number-input';
183
185
  // export * from './lib/components/verbena-tab/tab-item.component';
184
186
  // export * from './lib/components/number-input/number-input.component';
185
187
  // export * from './lib/components/number-input/number-input.module';
186
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1uZy11aS9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILDhDQUE4QztBQUM5QyxnREFBZ0Q7QUFDaEQsYUFBYTtBQUViLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMsZ0RBQWdELENBQUM7QUFDL0QsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyx1Q0FBdUMsQ0FBQztBQUN0RCxjQUFjLHlDQUF5QyxDQUFDO0FBQ3hELGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYyw4Q0FBOEMsQ0FBQztBQUM3RCxjQUFjLHNDQUFzQyxDQUFDO0FBQ3JELGNBQWMsd0NBQXdDLENBQUM7QUFDdkQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsZ0RBQWdELENBQUM7QUFDL0QsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsNkNBQTZDLENBQUM7QUFDNUQsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLDRDQUE0QyxDQUFDO0FBQzNELGNBQWMsNkNBQTZDLENBQUM7QUFDNUQsY0FBYywyQ0FBMkMsQ0FBQztBQUMxRCxjQUFjLDhDQUE4QyxDQUFDO0FBQzdELGNBQWMsc0NBQXNDLENBQUM7QUFD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RTlELG1FQUFtRTtBQUNuRSxzRUFBc0U7QUFFdEUsMkVBQTJFO0FBQzNFLDhFQUE4RTtBQUU5RSxpRkFBaUY7QUFDakYsb0ZBQW9GO0FBRXBGLHlCQUF5QjtBQUN6Qix3REFBd0Q7QUFFeEQseURBQXlEO0FBQ3pELDREQUE0RDtBQUU1RCxnQ0FBZ0M7QUFFaEMsNEVBQTRFO0FBQzVFLGtGQUFrRjtBQUNsRixxRUFBcUU7QUFFckUsZ0dBQWdHO0FBQ2hHLDJGQUEyRjtBQUUzRixtRUFBbUU7QUFDbkUsc0VBQXNFO0FBQ3RFLG1FQUFtRTtBQUVuRSx3RUFBd0U7QUFDeEUscUVBQXFFIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiB2ZXJiZW4tbmctdWlcbiAqL1xuXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi92ZXJiZW4tbmctdWkuc2VydmljZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi92ZXJiZW4tbmctdWkuY29tcG9uZW50Jztcbi8vTmV3IEV4cG9ydHNcblxuZXhwb3J0ICogZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvbW9kZWxzJztcbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL3NlcnZpY2VzJztcbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvc2hhcmVkJztcbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvY2FyZC1kYXRhLXZpZXcnO1xuZXhwb3J0ICogZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kcm9wLWRvd24nO1xuZXhwb3J0ICogZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9jaGlwJztcbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvc3ZnJztcbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvaW1hZ2UnO1xuZXhwb3J0ICogZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy90b29sdGlwJztcbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvdGFibGUtZmlsdGVyJztcbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uJztcbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvY2FyZCc7XG5leHBvcnQgKiBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9jb252ZXJ0LXRvLW51bWJlcic7XG5leHBvcnQgKiBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9jb252ZXJ0LXRvLWludGVnZXInO1xuZXhwb3J0ICogZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9zb3J0LXRhYmxlJztcbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvdmlzaWJsZS1jb2x1bW4nO1xuZXhwb3J0ICogZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLXZpZXcnO1xuZXhwb3J0ICogZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRlLXBpY2tlcic7XG5leHBvcnQgKiBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9waG9uZS1udW1iZXInO1xuZXhwb3J0ICogZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvdmFsaWRhdGUtaW5wdXQnO1xuZXhwb3J0ICogZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvbnVtYmVyLXJhbmdlJztcbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL3JlcXVpcmVkLWlucHV0JztcbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS10YWJsZSc7XG5leHBvcnQgKiBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtZXhwb3J0JztcbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS1pbXBvcnQnO1xuZXhwb3J0ICogZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWV4dGVuZCc7XG5leHBvcnQgKiBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEteHBvcnQnO1xuZXhwb3J0ICogZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWZpbHRlcic7XG5leHBvcnQgKiBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtc29ydCc7XG5leHBvcnQgKiBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtY29sdW1ucyc7XG5leHBvcnQgKiBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9jb250cm9sLW9wdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvdmFsaWRhdGUnO1xuZXhwb3J0ICogZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvZW1haWwtdmFsaWRhdG9yJztcbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL3ZlcmJlbmEtaW5wdXQnO1xuZXhwb3J0ICogZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvdmVyYmVuYS1idXR0b24nO1xuZXhwb3J0ICogZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvdmVyYmVuYS1iYWRnZSc7XG5leHBvcnQgKiBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi92ZXJiZW5hLXRleHRhcmVhJztcbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL3ZlcmJlbmEtc3dpdGNoJztcbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvdmVyYmVuLW1haWwnO1xuZXhwb3J0ICogZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy92ZXJiZW4tZGlhbG9ndWUnO1xuZXhwb3J0ICogZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy92ZXJiZW4tdGltZS1waWNrZXInO1xuZXhwb3J0ICogZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9wb3AtdXAnO1xuZXhwb3J0ICogZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9pY29ucyc7XG5leHBvcnQgKiBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL3ZlcmJlbmEtaWNvbic7XG5leHBvcnQgKiBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL3ZlcmJlbmEtdGFiJztcbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvbnVtYmVyLWlucHV0JztcblxuLy8gRXhwb3J0aW5nIG1vZHVsZXNcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvY2FyZC1kYXRhLXZpZXcvY2FyZC1kYXRhLXZpZXcuY29tcG9uZW50Jztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvY2FyZC1kYXRhLXZpZXcvY2FyZC1kYXRhLXZpZXcubW9kdWxlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvY2FyZC1kYXRhLXZpZXcvY2FyZC1kYXRhJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvY2FyZC1kYXRhLXZpZXcvbGVmdC1jYXJkLWRhdGEvbGVmdC1jYXJkLWRhdGEuY29tcG9uZW50Jztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvY2FyZC1kYXRhLXZpZXcvbGVmdC1jYXJkLWRhdGEtdmlldy9sZWZ0LWNhcmQtZGF0YS12aWV3LmNvbXBvbmVudCc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2NhcmQtZGF0YS12aWV3L3JpZ2h0LWNhcmQtZGF0YS12aWV3L3JpZ2h0LWNhcmQtZGF0YS12aWV3LmNvbXBvbmVudCc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2NhcmQtZGF0YS12aWV3L2NhcmQtZGF0YS12aWV3LWhlYWRlci9jYXJkLWRhdGEtdmlldy1oZWFkZXIuY29tcG9uZW50Jztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvY2FyZC1kYXRhLXZpZXcvY2FyZC1kYXRhLXZpZXctZm9vdGVyL2NhcmQtZGF0YS12aWV3LWZvb3Rlci5jb21wb25lbnQnO1xuXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Ryb3AtZG93bi9Ecm9wZG93bk1lbnVJdGVtJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHJvcC1kb3duL0Ryb3Bkb3duQ2hhbmdlRXZlbnQnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kcm9wLWRvd24vRHJvcGRvd25Mb2FkRXZlbnQnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9jaGlwL0NoaXBDaGFuZ2VFdmVudCc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Ryb3AtZG93bi9kcm9wLWRvd24ubW9kdWxlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHJvcC1kb3duL2Ryb3AtZG93bi5jb21wb25lbnQnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9jaGlwL2NoaXAubW9kdWxlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvY2hpcC9jaGlwLmNvbXBvbmVudCc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3NoYXJlZC5tb2R1bGUnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9UZW1wbGF0ZURpcmVjdGl2ZS5kaXJlY3RpdmUnO1xuXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2ltYWdlL2ltYWdlLm1vZHVsZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2ltYWdlL2ltYWdlLmNvbXBvbmVudCc7XG5cbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdG9vbHRpcC90b29sdGlwLmNvbXBvbmVudCc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3Rvb2x0aXAvdG9vbHRpcC5tb2R1bGUnO1xuXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3N2Zy9zdmcubW9kdWxlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvc3ZnL3N2Zy5jb21wb25lbnQnO1xuXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3RhYmxlLWZpbHRlci90YWJsZS1maWx0ZXIubW9kdWxlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdGFibGUtZmlsdGVyL3RhYmxlLWZpbHRlci5jb21wb25lbnQnO1xuXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi9ub3RpZmljYXRpb24ubW9kdWxlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvbm90aWZpY2F0aW9uL25vdGlmaWNhdGlvbi5jb21wb25lbnQnO1xuXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2NhcmQvY2FyZC5tb2R1bGUnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9jYXJkL2NhcmQuY29tcG9uZW50JztcblxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29udmVydC10by1udW1iZXIvY29udmVydC10by1udW1iZXIubW9kdWxlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnZlcnQtdG8taW50ZWdlci9jb252ZXJ0LXRvLWludGVnZXIubW9kdWxlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvc29ydC10YWJsZS9zb3J0LXRhYmxlLmNvbXBvbmVudCc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3NvcnQtdGFibGUvc29ydC10YWJsZS5tb2R1bGUnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy92aXNpYmxlLWNvbHVtbi92aXNpYmxlLWNvbHVtbi5jb21wb25lbnQnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy92aXNpYmxlLWNvbHVtbi92aXNpYmxlLWNvbHVtbi5tb2R1bGUnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kYXRhLXZpZXcvZGF0YS12aWV3LmNvbXBvbmVudCc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2RhdGEtdmlldy9kYXRhLXZpZXcubW9kdWxlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZGF0ZS1waWNrZXIvZGF0ZS1waWNrZXIuY29tcG9uZW50Jztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZGF0ZS1waWNrZXIvZGF0ZS1waWNrZXIubW9kdWxlJztcbi8vIC8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnZlcnQtdG8tZGVjaW1hbC9jb252ZXJ0LXRvLWRlY2ltYWwubW9kdWxlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL3Bob25lLW51bWJlci9waG9uZS1udW1iZXIubW9kdWxlJztcblxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvdmFsaWRhdGUtaW5wdXQvdmFsaWRhdGUtaW5wdXQubW9kdWxlJztcblxuLy8gLy8gQWxzbyBleHBvcnQgdGhlIGRpcmVjdGl2ZXMgaWYgbmVlZGVkIGRpcmVjdGx5XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb252ZXJ0LXRvLW51bWJlci9jb252ZXJ0LXRvLW51bWJlci5kaXJlY3RpdmUnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29udmVydC10by1pbnRlZ2VyL2NvbnZlcnQtdG8taW50ZWdlci5kaXJlY3RpdmUnO1xuLy8gLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29udmVydC10by1kZWNpbWFsL2NvbnZlcnQtdG8tZGVjaW1hbC5kaXJlY3RpdmUnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvcGhvbmUtbnVtYmVyL3Bob25lLW51bWJlci5kaXJlY3RpdmUnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvdmFsaWRhdGUtaW5wdXQvdmFsaWRhdGUtaW5wdXQuZGlyZWN0aXZlJztcblxuLy8gLy8gRXhwb3J0aW5nIE1heE51bWJlck1vZHVsZSBhbmQgTWF4TnVtYmVyRGlyZWN0aXZlXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9udW1iZXItcmFuZ2UvbnVtYmVyLXJhbmdlLm1vZHVsZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9udW1iZXItcmFuZ2UvbnVtYmVyLXJhbmdlLmRpcmVjdGl2ZSc7XG5cbi8vIC8vIGV4cG9ydCAqIGZyb20gJy4vbGliL251bWJlci1yYW5nZS9udW1iZXItcmFuZ2UubW9kdWxlJztcbi8vIC8vIGV4cG9ydCAqIGZyb20gJy4vbGliL251bWJlci1yYW5nZS9udW1iZXItcmFuZ2UuZGlyZWN0aXZlJztcblxuLy8gLy8gRXhwb3J0aW5nIFJlcXVpcmVkSW5wdXRNb2R1bGUgYW5kIFJlcXVpcmVkSW5wdXREaXJlY3RpdmVcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL3JlcXVpcmVkLWlucHV0L3JlcXVpcmVkLWlucHV0Lm1vZHVsZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9yZXF1aXJlZC1pbnB1dC9yZXF1aXJlZC1pbnB1dC5kaXJlY3RpdmUnO1xuXG4vLyAvLyBFeHBvcnRpbmcgRW1haWxWYWxpZGF0b3JNb2R1bGUgYW5kIEVtYWlsVmFsaWRhdG9yRGlyZWN0aXZlXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9lbWFpbC12YWxpZGF0b3IvZW1haWwtdmFsaWRhdG9yLm1vZHVsZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9lbWFpbC12YWxpZGF0b3IvZW1haWwtdmFsaWRhdG9yLmRpcmVjdGl2ZSc7XG5cbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZGF0YS10YWJsZS9kYXRhLXRhYmxlLm1vZHVsZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5jb21wb25lbnQnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kYXRhLXRhYmxlL2NvbHVtbi5kaXJlY3RpdmUnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kYXRhLXRhYmxlL2RhdGEtdGFibGUudHlwZXMnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kYXRhLXRhYmxlL3N0eWxlLnR5cGVzJztcblxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kYXRhLWV4cG9ydC9kYXRhLWV4cG9ydC5tb2R1bGUnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kYXRhLWV4cG9ydC9kYXRhLWV4cG9ydC5zZXJ2aWNlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZGF0YS1leHBvcnQvZGF0YS1leHBvcnQuY29tcG9uZW50Jztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZGF0YS1leHBvcnQvZGF0YS1leHBvcnQudHlwZXMnO1xuXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2RhdGEtaW1wb3J0L2RhdGEtaW1wb3J0Lm1vZHVsZSc7XG4vLyAvLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2RhdGEtaW1wb3J0L2RhdGEtaW1wb3J0LnNlcnZpY2UnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kYXRhLWltcG9ydC9kYXRhLWltcG9ydC5jb21wb25lbnQnO1xuLy8gLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kYXRhLWltcG9ydC9kYXRhLWltcG9ydC50eXBlcyc7XG5cbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZGF0YS1leHRlbmQvZGF0YS1leHRlbmQubW9kdWxlJztcbi8vIC8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZGF0YS1leHRlbmQvZGF0YS1leHRlbmQuc2VydmljZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2RhdGEtZXh0ZW5kL2RhdGEtZXh0ZW5kLmNvbXBvbmVudCc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2RhdGEtZXh0ZW5kL2RhdGEtZXh0ZW5kLnR5cGVzJztcblxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kYXRhLXhwb3J0L2RhdGEteHBvcnQubW9kdWxlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZGF0YS14cG9ydC9kYXRhLXhwb3J0LnNlcnZpY2UnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kYXRhLXhwb3J0L2RhdGEteHBvcnQuY29tcG9uZW50Jztcbi8vIC8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZGF0YS14cG9ydC9kYXRhLXhwb3J0LnR5cGVzJztcblxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kYXRhLWZpbHRlci9kYXRhLWZpbHRlci5tb2R1bGUnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kYXRhLWZpbHRlci9kYXRhLWZpbHRlci5zZXJ2aWNlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZGF0YS1maWx0ZXIvZGF0YS1maWx0ZXIuY29tcG9uZW50Jztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZGF0YS1maWx0ZXIvZGF0YS1maWx0ZXIudHlwZXMnO1xuXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2RhdGEtc29ydC9kYXRhLXNvcnQubW9kdWxlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZGF0YS1zb3J0L2RhdGEtc29ydC5zZXJ2aWNlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZGF0YS1zb3J0L2RhdGEtc29ydC5jb21wb25lbnQnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kYXRhLXNvcnQvZGF0YS1zb3J0LnR5cGVzJztcblxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kYXRhLWNvbHVtbnMvZGF0YS1jb2x1bW5zLm1vZHVsZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2RhdGEtY29sdW1ucy9kYXRhLWNvbHVtbnMuc2VydmljZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2RhdGEtY29sdW1ucy9kYXRhLWNvbHVtbnMuY29tcG9uZW50JztcblxuLy8gLy8gRXhwb3J0aW5nIENvbnRyb2xPcHRpb25Nb2R1bGUgYW5kIENvbnRyb2xPcHRpb25EaXJlY3RpdmVcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRyb2wtb3B0aW9ucy9jb250cm9sLW9wdGlvbnMubW9kdWxlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnRyb2wtb3B0aW9ucy9jb250cm9sLW9wdGlvbnMuZGlyZWN0aXZlJztcbi8vIC8vIEV4cG9ydGluZyBFbnVtIHR5cGUgZm9yIHNvcnQgdGFibGVcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy90YWJsZS1maWx0ZXInO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvbW9kZWxzL21haWwtbW9kZWwnO1xuXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi92YWxpZGF0ZS9lcnJvci1tZXNzYWdlLnNlcnZpY2UnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvdmFsaWRhdGUvdmFsaWRhdGUuZGlyZWN0aXZlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL3ZhbGlkYXRlL3ZhbGlkYXRlLm1vZHVsZSc7XG5cbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL3ZlcmJlbmEtaW5wdXQvdmVyYmVuYS1pbnB1dC5jb21wb25lbnQnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvdmVyYmVuYS1pbnB1dC92ZXJiZW5hLWlucHV0Lm1vZHVsZSc7XG5cbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL3ZlcmJlbmEtYnV0dG9uL3ZlcmJlbmEtYnV0dG9uLmNvbXBvbmVudCc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi92ZXJiZW5hLWJ1dHRvbi92ZXJiZW5hLWJ1dHRvbi5tb2R1bGUnO1xuXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi92ZXJiZW5hLWJhZGdlL3ZlcmJlbmEtYmFkZ2UuY29tcG9uZW50Jztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL3ZlcmJlbmEtYmFkZ2UvdmVyYmVuYS1iYWRnZS5tb2R1bGUnO1xuXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi92ZXJiZW5hLXRleHRhcmVhL3ZlcmJlbmEtdGV4dGFyZWEuY29tcG9uZW50Jztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL3ZlcmJlbmEtdGV4dGFyZWEvdmVyYmVuYS10ZXh0YXJlYS5tb2R1bGUnO1xuXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi92ZXJiZW5hLXN3aXRjaC92ZXJiZW5hLXN3aXRjaC5jb21wb25lbnQnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvdmVyYmVuYS1zd2l0Y2gvdmVyYmVuYS1zd2l0Y2gubW9kdWxlJztcblxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy92ZXJiZW4tbWFpbC92ZXJiZW4tbWFpbC5tb2R1bGUnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy92ZXJiZW4tbWFpbC92ZXJiZW4tbWFpbC5jb21wb25lbnQnO1xuXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3ZlcmJlbi1kaWFsb2d1ZS92ZXJiZW4tZGlhbG9ndWUubW9kdWxlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdmVyYmVuLWRpYWxvZ3VlL3ZlcmJlbi1kaWFsb2d1ZS5jb21wb25lbnQnO1xuXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3ZlcmJlbi10aW1lLXBpY2tlci92ZXJiZW4tdGltZS1waWNrZXIubW9kdWxlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdmVyYmVuLXRpbWUtcGlja2VyL3ZlcmJlbi10aW1lLXBpY2tlci5jb21wb25lbnQnO1xuXG4vLyAvL25vdGlmaWNhdGlvbiBzZXJ2aWNlXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9ub3RpZmljYXRpb24uc2VydmljZXMnO1xuXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3BvcC11cC9wb3AtdXAubW9kdWxlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvcG9wLXVwL3BvcC11cC5jb21wb25lbnQnO1xuXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi90b2tlbnMnO1xuXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2ljb25zL2ljb25zLm1vZHVsZSc7IC8vIEV4cG9ydCBJY29uTW9kdWxlXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2ljb25zL2ljb25zLmNvbXBvbmVudCc7IC8vIEV4cG9ydCBJY29uQ29tcG9uZW50XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9zZXJ2aWNlcy9pY29uLnNlcnZpY2UnOyAvLyBFeHBvcnQgSWNvblNlcnZpY2VcblxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy92ZXJiZW5hLWljb24vdmVyYmVuYS1pY29uLmNvbXBvbmVudCc7IC8vIEV4cG9ydCBJY29uQ29tcG9uZW50XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3ZlcmJlbmEtaWNvbi92ZXJiZW5hLWljb24ubW9kdWxlJzsgLy8gRXhwb3J0IEljb25TZXJ2aWNlXG5cbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdmVyYmVuYS10YWIvdmVyYmVuYS10YWIubW9kdWxlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdmVyYmVuYS10YWIvdmVyYmVuYS10YWIuY29tcG9uZW50Jztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdmVyYmVuYS10YWIvdGFiLWl0ZW0uY29tcG9uZW50JztcblxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9udW1iZXItaW5wdXQvbnVtYmVyLWlucHV0LmNvbXBvbmVudCc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL251bWJlci1pbnB1dC9udW1iZXItaW5wdXQubW9kdWxlJztcbiJdfQ==
188
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL3ZlcmJlbi1uZy11aS9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILDhDQUE4QztBQUM5QyxnREFBZ0Q7QUFDaEQsYUFBYTtBQUViLGNBQWMsNEJBQTRCLENBQUM7QUFDM0MsY0FBYyxxQ0FBcUMsQ0FBQztBQUNwRCxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyx3Q0FBd0MsQ0FBQztBQUN2RCxjQUFjLGdEQUFnRCxDQUFDO0FBQy9ELGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyx5Q0FBeUMsQ0FBQztBQUN4RCxjQUFjLDhDQUE4QyxDQUFDO0FBQzdELGNBQWMsOENBQThDLENBQUM7QUFDN0QsY0FBYyxzQ0FBc0MsQ0FBQztBQUNyRCxjQUFjLHdDQUF3QyxDQUFDO0FBQ3ZELGNBQWMseUNBQXlDLENBQUM7QUFDeEQsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLGdEQUFnRCxDQUFDO0FBQy9ELGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsNENBQTRDLENBQUM7QUFDM0QsY0FBYyw2Q0FBNkMsQ0FBQztBQUM1RCxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsNkNBQTZDLENBQUM7QUFDNUQsY0FBYyw0Q0FBNEMsQ0FBQztBQUMzRCxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsMkNBQTJDLENBQUM7QUFD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QUFxRTtBQUNyRSxrRUFBa0U7QUFFbEUsaUVBQWlFO0FBQ2pFLDhEQUE4RDtBQUU5RCxtRUFBbUU7QUFDbkUsc0VBQXNFO0FBRXRFLDJFQUEyRTtBQUMzRSw4RUFBOEU7QUFFOUUsaUZBQWlGO0FBQ2pGLG9GQUFvRjtBQUVwRix5QkFBeUI7QUFDekIsd0RBQXdEO0FBRXhELHlEQUF5RDtBQUN6RCw0REFBNEQ7QUFFNUQsZ0NBQWdDO0FBRWhDLDRFQUE0RTtBQUM1RSxrRkFBa0Y7QUFDbEYscUVBQXFFO0FBRXJFLGdHQUFnRztBQUNoRywyRkFBMkY7QUFFM0YsbUVBQW1FO0FBQ25FLHNFQUFzRTtBQUN0RSxtRUFBbUU7QUFFbkUsd0VBQXdFO0FBQ3hFLHFFQUFxRSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgdmVyYmVuLW5nLXVpXG4gKi9cblxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvdmVyYmVuLW5nLXVpLnNlcnZpY2UnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvdmVyYmVuLW5nLXVpLmNvbXBvbmVudCc7XG4vL05ldyBFeHBvcnRzXG5cbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL3RoZW1lJztcbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL3RoZW1lLXN3aXRjaGVyJztcbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL21vZGVscyc7XG5leHBvcnQgKiBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9zZXJ2aWNlcyc7XG5leHBvcnQgKiBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL3NoYXJlZCc7XG5leHBvcnQgKiBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2NhcmQtZGF0YS12aWV3JztcbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZHJvcC1kb3duJztcbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvY2hpcCc7XG5leHBvcnQgKiBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL3N2Zyc7XG5leHBvcnQgKiBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2ltYWdlJztcbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvdG9vbHRpcCc7XG5leHBvcnQgKiBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL3RhYmxlLWZpbHRlcic7XG5leHBvcnQgKiBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL25vdGlmaWNhdGlvbic7XG5leHBvcnQgKiBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2NhcmQnO1xuZXhwb3J0ICogZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29udmVydC10by1udW1iZXInO1xuZXhwb3J0ICogZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29udmVydC10by1pbnRlZ2VyJztcbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvc29ydC10YWJsZSc7XG5leHBvcnQgKiBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL3Zpc2libGUtY29sdW1uJztcbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS12aWV3JztcbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZGF0ZS1waWNrZXInO1xuZXhwb3J0ICogZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvcGhvbmUtbnVtYmVyJztcbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL3ZhbGlkYXRlLWlucHV0JztcbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL251bWJlci1yYW5nZSc7XG5leHBvcnQgKiBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9yZXF1aXJlZC1pbnB1dCc7XG5leHBvcnQgKiBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtdGFibGUnO1xuZXhwb3J0ICogZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWV4cG9ydCc7XG5leHBvcnQgKiBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL2RhdGEtaW1wb3J0JztcbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS1leHRlbmQnO1xuZXhwb3J0ICogZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLXhwb3J0JztcbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvZGF0YS1maWx0ZXInO1xuZXhwb3J0ICogZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLXNvcnQnO1xuZXhwb3J0ICogZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy9kYXRhLWNvbHVtbnMnO1xuZXhwb3J0ICogZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29udHJvbC1vcHRpb25zJztcbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL3ZhbGlkYXRlJztcbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2VtYWlsLXZhbGlkYXRvcic7XG5leHBvcnQgKiBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi92ZXJiZW5hLWlucHV0JztcbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL3ZlcmJlbmEtYnV0dG9uJztcbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL3ZlcmJlbmEtYmFkZ2UnO1xuZXhwb3J0ICogZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvdmVyYmVuYS10ZXh0YXJlYSc7XG5leHBvcnQgKiBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi92ZXJiZW5hLXN3aXRjaCc7XG5leHBvcnQgKiBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL3ZlcmJlbi1tYWlsJztcbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvdmVyYmVuLWRpYWxvZ3VlJztcbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvdmVyYmVuLXRpbWUtcGlja2VyJztcbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvcG9wLXVwJztcbmV4cG9ydCAqIGZyb20gJ3ZlcmJlbi1uZy11aS9zcmMvbGliL2NvbXBvbmVudHMvaWNvbnMnO1xuZXhwb3J0ICogZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy92ZXJiZW5hLWljb24nO1xuZXhwb3J0ICogZnJvbSAndmVyYmVuLW5nLXVpL3NyYy9saWIvY29tcG9uZW50cy92ZXJiZW5hLXRhYic7XG5leHBvcnQgKiBmcm9tICd2ZXJiZW4tbmctdWkvc3JjL2xpYi9jb21wb25lbnRzL251bWJlci1pbnB1dCc7XG5cbi8vIEV4cG9ydGluZyBtb2R1bGVzXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2NhcmQtZGF0YS12aWV3L2NhcmQtZGF0YS12aWV3LmNvbXBvbmVudCc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2NhcmQtZGF0YS12aWV3L2NhcmQtZGF0YS12aWV3Lm1vZHVsZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2NhcmQtZGF0YS12aWV3L2NhcmQtZGF0YSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2NhcmQtZGF0YS12aWV3L2xlZnQtY2FyZC1kYXRhL2xlZnQtY2FyZC1kYXRhLmNvbXBvbmVudCc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2NhcmQtZGF0YS12aWV3L2xlZnQtY2FyZC1kYXRhLXZpZXcvbGVmdC1jYXJkLWRhdGEtdmlldy5jb21wb25lbnQnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9jYXJkLWRhdGEtdmlldy9yaWdodC1jYXJkLWRhdGEtdmlldy9yaWdodC1jYXJkLWRhdGEtdmlldy5jb21wb25lbnQnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9jYXJkLWRhdGEtdmlldy9jYXJkLWRhdGEtdmlldy1oZWFkZXIvY2FyZC1kYXRhLXZpZXctaGVhZGVyLmNvbXBvbmVudCc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2NhcmQtZGF0YS12aWV3L2NhcmQtZGF0YS12aWV3LWZvb3Rlci9jYXJkLWRhdGEtdmlldy1mb290ZXIuY29tcG9uZW50JztcblxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kcm9wLWRvd24vRHJvcGRvd25NZW51SXRlbSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Ryb3AtZG93bi9Ecm9wZG93bkNoYW5nZUV2ZW50Jztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZHJvcC1kb3duL0Ryb3Bkb3duTG9hZEV2ZW50Jztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvY2hpcC9DaGlwQ2hhbmdlRXZlbnQnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kcm9wLWRvd24vZHJvcC1kb3duLm1vZHVsZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2Ryb3AtZG93bi9kcm9wLWRvd24uY29tcG9uZW50Jztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvY2hpcC9jaGlwLm1vZHVsZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2NoaXAvY2hpcC5jb21wb25lbnQnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9zaGFyZWQubW9kdWxlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvVGVtcGxhdGVEaXJlY3RpdmUuZGlyZWN0aXZlJztcblxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9pbWFnZS9pbWFnZS5tb2R1bGUnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9pbWFnZS9pbWFnZS5jb21wb25lbnQnO1xuXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3Rvb2x0aXAvdG9vbHRpcC5jb21wb25lbnQnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy90b29sdGlwL3Rvb2x0aXAubW9kdWxlJztcblxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9zdmcvc3ZnLm1vZHVsZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3N2Zy9zdmcuY29tcG9uZW50JztcblxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy90YWJsZS1maWx0ZXIvdGFibGUtZmlsdGVyLm1vZHVsZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3RhYmxlLWZpbHRlci90YWJsZS1maWx0ZXIuY29tcG9uZW50JztcblxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uLm1vZHVsZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL25vdGlmaWNhdGlvbi9ub3RpZmljYXRpb24uY29tcG9uZW50JztcblxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9jYXJkL2NhcmQubW9kdWxlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvY2FyZC9jYXJkLmNvbXBvbmVudCc7XG5cbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnZlcnQtdG8tbnVtYmVyL2NvbnZlcnQtdG8tbnVtYmVyLm1vZHVsZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb252ZXJ0LXRvLWludGVnZXIvY29udmVydC10by1pbnRlZ2VyLm1vZHVsZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3NvcnQtdGFibGUvc29ydC10YWJsZS5jb21wb25lbnQnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9zb3J0LXRhYmxlL3NvcnQtdGFibGUubW9kdWxlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdmlzaWJsZS1jb2x1bW4vdmlzaWJsZS1jb2x1bW4uY29tcG9uZW50Jztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdmlzaWJsZS1jb2x1bW4vdmlzaWJsZS1jb2x1bW4ubW9kdWxlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZGF0YS12aWV3L2RhdGEtdmlldy5jb21wb25lbnQnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kYXRhLXZpZXcvZGF0YS12aWV3Lm1vZHVsZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLmNvbXBvbmVudCc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2RhdGUtcGlja2VyL2RhdGUtcGlja2VyLm1vZHVsZSc7XG4vLyAvLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb252ZXJ0LXRvLWRlY2ltYWwvY29udmVydC10by1kZWNpbWFsLm1vZHVsZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9waG9uZS1udW1iZXIvcGhvbmUtbnVtYmVyLm1vZHVsZSc7XG5cbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL3ZhbGlkYXRlLWlucHV0L3ZhbGlkYXRlLWlucHV0Lm1vZHVsZSc7XG5cbi8vIC8vIEFsc28gZXhwb3J0IHRoZSBkaXJlY3RpdmVzIGlmIG5lZWRlZCBkaXJlY3RseVxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29udmVydC10by1udW1iZXIvY29udmVydC10by1udW1iZXIuZGlyZWN0aXZlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnZlcnQtdG8taW50ZWdlci9jb252ZXJ0LXRvLWludGVnZXIuZGlyZWN0aXZlJztcbi8vIC8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbnZlcnQtdG8tZGVjaW1hbC9jb252ZXJ0LXRvLWRlY2ltYWwuZGlyZWN0aXZlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL3Bob25lLW51bWJlci9waG9uZS1udW1iZXIuZGlyZWN0aXZlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL3ZhbGlkYXRlLWlucHV0L3ZhbGlkYXRlLWlucHV0LmRpcmVjdGl2ZSc7XG5cbi8vIC8vIEV4cG9ydGluZyBNYXhOdW1iZXJNb2R1bGUgYW5kIE1heE51bWJlckRpcmVjdGl2ZVxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvbnVtYmVyLXJhbmdlL251bWJlci1yYW5nZS5tb2R1bGUnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvbnVtYmVyLXJhbmdlL251bWJlci1yYW5nZS5kaXJlY3RpdmUnO1xuXG4vLyAvLyBleHBvcnQgKiBmcm9tICcuL2xpYi9udW1iZXItcmFuZ2UvbnVtYmVyLXJhbmdlLm1vZHVsZSc7XG4vLyAvLyBleHBvcnQgKiBmcm9tICcuL2xpYi9udW1iZXItcmFuZ2UvbnVtYmVyLXJhbmdlLmRpcmVjdGl2ZSc7XG5cbi8vIC8vIEV4cG9ydGluZyBSZXF1aXJlZElucHV0TW9kdWxlIGFuZCBSZXF1aXJlZElucHV0RGlyZWN0aXZlXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9yZXF1aXJlZC1pbnB1dC9yZXF1aXJlZC1pbnB1dC5tb2R1bGUnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvcmVxdWlyZWQtaW5wdXQvcmVxdWlyZWQtaW5wdXQuZGlyZWN0aXZlJztcblxuLy8gLy8gRXhwb3J0aW5nIEVtYWlsVmFsaWRhdG9yTW9kdWxlIGFuZCBFbWFpbFZhbGlkYXRvckRpcmVjdGl2ZVxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvZW1haWwtdmFsaWRhdG9yL2VtYWlsLXZhbGlkYXRvci5tb2R1bGUnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvZW1haWwtdmFsaWRhdG9yL2VtYWlsLXZhbGlkYXRvci5kaXJlY3RpdmUnO1xuXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2RhdGEtdGFibGUvZGF0YS10YWJsZS5tb2R1bGUnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kYXRhLXRhYmxlL2RhdGEtdGFibGUuY29tcG9uZW50Jztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZGF0YS10YWJsZS9jb2x1bW4uZGlyZWN0aXZlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZGF0YS10YWJsZS9kYXRhLXRhYmxlLnR5cGVzJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZGF0YS10YWJsZS9zdHlsZS50eXBlcyc7XG5cbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZGF0YS1leHBvcnQvZGF0YS1leHBvcnQubW9kdWxlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZGF0YS1leHBvcnQvZGF0YS1leHBvcnQuc2VydmljZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2RhdGEtZXhwb3J0L2RhdGEtZXhwb3J0LmNvbXBvbmVudCc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2RhdGEtZXhwb3J0L2RhdGEtZXhwb3J0LnR5cGVzJztcblxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kYXRhLWltcG9ydC9kYXRhLWltcG9ydC5tb2R1bGUnO1xuLy8gLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kYXRhLWltcG9ydC9kYXRhLWltcG9ydC5zZXJ2aWNlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZGF0YS1pbXBvcnQvZGF0YS1pbXBvcnQuY29tcG9uZW50Jztcbi8vIC8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZGF0YS1pbXBvcnQvZGF0YS1pbXBvcnQudHlwZXMnO1xuXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2RhdGEtZXh0ZW5kL2RhdGEtZXh0ZW5kLm1vZHVsZSc7XG4vLyAvLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2RhdGEtZXh0ZW5kL2RhdGEtZXh0ZW5kLnNlcnZpY2UnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kYXRhLWV4dGVuZC9kYXRhLWV4dGVuZC5jb21wb25lbnQnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kYXRhLWV4dGVuZC9kYXRhLWV4dGVuZC50eXBlcyc7XG5cbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZGF0YS14cG9ydC9kYXRhLXhwb3J0Lm1vZHVsZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2RhdGEteHBvcnQvZGF0YS14cG9ydC5zZXJ2aWNlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZGF0YS14cG9ydC9kYXRhLXhwb3J0LmNvbXBvbmVudCc7XG4vLyAvLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2RhdGEteHBvcnQvZGF0YS14cG9ydC50eXBlcyc7XG5cbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZGF0YS1maWx0ZXIvZGF0YS1maWx0ZXIubW9kdWxlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZGF0YS1maWx0ZXIvZGF0YS1maWx0ZXIuc2VydmljZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2RhdGEtZmlsdGVyL2RhdGEtZmlsdGVyLmNvbXBvbmVudCc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2RhdGEtZmlsdGVyL2RhdGEtZmlsdGVyLnR5cGVzJztcblxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kYXRhLXNvcnQvZGF0YS1zb3J0Lm1vZHVsZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2RhdGEtc29ydC9kYXRhLXNvcnQuc2VydmljZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL2RhdGEtc29ydC9kYXRhLXNvcnQuY29tcG9uZW50Jztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZGF0YS1zb3J0L2RhdGEtc29ydC50eXBlcyc7XG5cbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvZGF0YS1jb2x1bW5zL2RhdGEtY29sdW1ucy5tb2R1bGUnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kYXRhLWNvbHVtbnMvZGF0YS1jb2x1bW5zLnNlcnZpY2UnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9kYXRhLWNvbHVtbnMvZGF0YS1jb2x1bW5zLmNvbXBvbmVudCc7XG5cbi8vIC8vIEV4cG9ydGluZyBDb250cm9sT3B0aW9uTW9kdWxlIGFuZCBDb250cm9sT3B0aW9uRGlyZWN0aXZlXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb250cm9sLW9wdGlvbnMvY29udHJvbC1vcHRpb25zLm1vZHVsZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb250cm9sLW9wdGlvbnMvY29udHJvbC1vcHRpb25zLmRpcmVjdGl2ZSc7XG4vLyAvLyBFeHBvcnRpbmcgRW51bSB0eXBlIGZvciBzb3J0IHRhYmxlXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9tb2RlbHMvdGFibGUtZmlsdGVyJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL21vZGVscy9tYWlsLW1vZGVsJztcblxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvdmFsaWRhdGUvZXJyb3ItbWVzc2FnZS5zZXJ2aWNlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL3ZhbGlkYXRlL3ZhbGlkYXRlLmRpcmVjdGl2ZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi92YWxpZGF0ZS92YWxpZGF0ZS5tb2R1bGUnO1xuXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi92ZXJiZW5hLWlucHV0L3ZlcmJlbmEtaW5wdXQuY29tcG9uZW50Jztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL3ZlcmJlbmEtaW5wdXQvdmVyYmVuYS1pbnB1dC5tb2R1bGUnO1xuXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi92ZXJiZW5hLWJ1dHRvbi92ZXJiZW5hLWJ1dHRvbi5jb21wb25lbnQnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvdmVyYmVuYS1idXR0b24vdmVyYmVuYS1idXR0b24ubW9kdWxlJztcblxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvdmVyYmVuYS1iYWRnZS92ZXJiZW5hLWJhZGdlLmNvbXBvbmVudCc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi92ZXJiZW5hLWJhZGdlL3ZlcmJlbmEtYmFkZ2UubW9kdWxlJztcblxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvdmVyYmVuYS10ZXh0YXJlYS92ZXJiZW5hLXRleHRhcmVhLmNvbXBvbmVudCc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi92ZXJiZW5hLXRleHRhcmVhL3ZlcmJlbmEtdGV4dGFyZWEubW9kdWxlJztcblxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvdmVyYmVuYS1zd2l0Y2gvdmVyYmVuYS1zd2l0Y2guY29tcG9uZW50Jztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL3ZlcmJlbmEtc3dpdGNoL3ZlcmJlbmEtc3dpdGNoLm1vZHVsZSc7XG5cbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdmVyYmVuLW1haWwvdmVyYmVuLW1haWwubW9kdWxlJztcbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdmVyYmVuLW1haWwvdmVyYmVuLW1haWwuY29tcG9uZW50JztcblxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy92ZXJiZW4tZGlhbG9ndWUvdmVyYmVuLWRpYWxvZ3VlLm1vZHVsZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3ZlcmJlbi1kaWFsb2d1ZS92ZXJiZW4tZGlhbG9ndWUuY29tcG9uZW50JztcblxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy92ZXJiZW4tdGltZS1waWNrZXIvdmVyYmVuLXRpbWUtcGlja2VyLm1vZHVsZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3ZlcmJlbi10aW1lLXBpY2tlci92ZXJiZW4tdGltZS1waWNrZXIuY29tcG9uZW50JztcblxuLy8gLy9ub3RpZmljYXRpb24gc2VydmljZVxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvbm90aWZpY2F0aW9uLnNlcnZpY2VzJztcblxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9wb3AtdXAvcG9wLXVwLm1vZHVsZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3BvcC11cC9wb3AtdXAuY29tcG9uZW50JztcblxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvdG9rZW5zJztcblxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9pY29ucy9pY29ucy5tb2R1bGUnOyAvLyBFeHBvcnQgSWNvbk1vZHVsZVxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9pY29ucy9pY29ucy5jb21wb25lbnQnOyAvLyBFeHBvcnQgSWNvbkNvbXBvbmVudFxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvc2VydmljZXMvaWNvbi5zZXJ2aWNlJzsgLy8gRXhwb3J0IEljb25TZXJ2aWNlXG5cbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvdmVyYmVuYS1pY29uL3ZlcmJlbmEtaWNvbi5jb21wb25lbnQnOyAvLyBFeHBvcnQgSWNvbkNvbXBvbmVudFxuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy92ZXJiZW5hLWljb24vdmVyYmVuYS1pY29uLm1vZHVsZSc7IC8vIEV4cG9ydCBJY29uU2VydmljZVxuXG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3ZlcmJlbmEtdGFiL3ZlcmJlbmEtdGFiLm1vZHVsZSc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3ZlcmJlbmEtdGFiL3ZlcmJlbmEtdGFiLmNvbXBvbmVudCc7XG4vLyBleHBvcnQgKiBmcm9tICcuL2xpYi9jb21wb25lbnRzL3ZlcmJlbmEtdGFiL3RhYi1pdGVtLmNvbXBvbmVudCc7XG5cbi8vIGV4cG9ydCAqIGZyb20gJy4vbGliL2NvbXBvbmVudHMvbnVtYmVyLWlucHV0L251bWJlci1pbnB1dC5jb21wb25lbnQnO1xuLy8gZXhwb3J0ICogZnJvbSAnLi9saWIvY29tcG9uZW50cy9udW1iZXItaW5wdXQvbnVtYmVyLWlucHV0Lm1vZHVsZSc7XG4iXX0=
@@ -24,11 +24,11 @@ export class CardComponent {
24
24
  this.hasFooter = !this.cardFooter;
25
25
  }
26
26
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: CardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
27
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.10", type: CardComponent, selector: "verben-card", inputs: { pd: "pd", mg: "mg", height: "height", width: "width", textColor: "textColor", bgColor: "bgColor", border: "border", borderRadius: "borderRadius", disabled: "disabled", aspectRatio: "aspectRatio" }, queries: [{ propertyName: "cardHeader", first: true, predicate: ["card-header"], descendants: true }, { propertyName: "cardBody", first: true, predicate: ["card-body"], descendants: true }, { propertyName: "cardFooter", first: true, predicate: ["card-footer"], descendants: true }], ngImport: i0, template: " <div class=\"card\"\n [style.background-color]=\"bgColor\"\n [style.margin]=\"mg\"\n [style.border]=\"border\"\n [style.border-radius]=\"borderRadius\"\n [style.color]=\"textColor\"\n [style.width]=\"width\"\n [style.height]=\"height\"\n [ngClass]=\"disabled?'disable':''\"\n [style.aspect-ratio]=\"aspectRatio\"\n [style.padding]=\"pd\"\n >\n <div class=\"card-header\" *ngIf=\"hasHeader\">\n <ng-content select=\"[card-header]\"></ng-content>\n </div>\n <div class=\"card-body\" *ngIf=\"hasBody\">\n <ng-content select=\"[card-body]\"></ng-content>\n </div>\n <div class=\"card-footer\" *ngIf=\"hasFooter\">\n <ng-content select=\"[card-footer]\"></ng-content>\n </div>\n </div>\n ", styles: [".card{border:1px solid #ddd;border-radius:4px;overflow:hidden;box-shadow:0 2px 4px #0000001a}.card-header{background-color:#f8f9fa;padding:10px 15px;border-bottom:1px solid #ddd}.card-body{padding:15px}.card-footer{background-color:#f8f9fa;padding:10px 15px;border-top:1px solid #ddd}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
27
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.10", type: CardComponent, selector: "verben-card", inputs: { pd: "pd", mg: "mg", height: "height", width: "width", textColor: "textColor", bgColor: "bgColor", border: "border", borderRadius: "borderRadius", disabled: "disabled", aspectRatio: "aspectRatio" }, queries: [{ propertyName: "cardHeader", first: true, predicate: ["card-header"], descendants: true }, { propertyName: "cardBody", first: true, predicate: ["card-body"], descendants: true }, { propertyName: "cardFooter", first: true, predicate: ["card-footer"], descendants: true }], ngImport: i0, template: " <div class=\"card\"\n [style.background-color]=\"bgColor\"\n [style.margin]=\"mg\"\n [style.border]=\"border\"\n [style.border-radius]=\"borderRadius\"\n [style.color]=\"textColor\"\n [style.width]=\"width\"\n [style.height]=\"height\"\n [ngClass]=\"disabled?'disable':''\"\n [style.aspect-ratio]=\"aspectRatio\"\n [style.padding]=\"pd\"\n >\n <div class=\"card-header\" *ngIf=\"hasHeader\">\n <ng-content select=\"[card-header]\"></ng-content>\n </div>\n <div class=\"card-body\" *ngIf=\"hasBody\">\n <ng-content select=\"[card-body]\"></ng-content>\n </div>\n <div class=\"card-footer\" *ngIf=\"hasFooter\">\n <ng-content select=\"[card-footer]\"></ng-content>\n </div>\n </div>\n ", styles: [".card{border:1px solid var(--vbn-color-border);border-radius:var(--vbn-radius-sm);overflow:hidden;box-shadow:var(--vbn-shadow-sm)}.card-header{background-color:var(--vbn-color-surface-alt);padding:10px 15px;border-bottom:1px solid var(--vbn-color-border)}.card-body{padding:15px}.card-footer{background-color:var(--vbn-color-surface-alt);padding:10px 15px;border-top:1px solid var(--vbn-color-border)}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
28
28
  }
29
29
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: CardComponent, decorators: [{
30
30
  type: Component,
31
- args: [{ selector: 'verben-card', template: " <div class=\"card\"\n [style.background-color]=\"bgColor\"\n [style.margin]=\"mg\"\n [style.border]=\"border\"\n [style.border-radius]=\"borderRadius\"\n [style.color]=\"textColor\"\n [style.width]=\"width\"\n [style.height]=\"height\"\n [ngClass]=\"disabled?'disable':''\"\n [style.aspect-ratio]=\"aspectRatio\"\n [style.padding]=\"pd\"\n >\n <div class=\"card-header\" *ngIf=\"hasHeader\">\n <ng-content select=\"[card-header]\"></ng-content>\n </div>\n <div class=\"card-body\" *ngIf=\"hasBody\">\n <ng-content select=\"[card-body]\"></ng-content>\n </div>\n <div class=\"card-footer\" *ngIf=\"hasFooter\">\n <ng-content select=\"[card-footer]\"></ng-content>\n </div>\n </div>\n ", styles: [".card{border:1px solid #ddd;border-radius:4px;overflow:hidden;box-shadow:0 2px 4px #0000001a}.card-header{background-color:#f8f9fa;padding:10px 15px;border-bottom:1px solid #ddd}.card-body{padding:15px}.card-footer{background-color:#f8f9fa;padding:10px 15px;border-top:1px solid #ddd}\n"] }]
31
+ args: [{ selector: 'verben-card', template: " <div class=\"card\"\n [style.background-color]=\"bgColor\"\n [style.margin]=\"mg\"\n [style.border]=\"border\"\n [style.border-radius]=\"borderRadius\"\n [style.color]=\"textColor\"\n [style.width]=\"width\"\n [style.height]=\"height\"\n [ngClass]=\"disabled?'disable':''\"\n [style.aspect-ratio]=\"aspectRatio\"\n [style.padding]=\"pd\"\n >\n <div class=\"card-header\" *ngIf=\"hasHeader\">\n <ng-content select=\"[card-header]\"></ng-content>\n </div>\n <div class=\"card-body\" *ngIf=\"hasBody\">\n <ng-content select=\"[card-body]\"></ng-content>\n </div>\n <div class=\"card-footer\" *ngIf=\"hasFooter\">\n <ng-content select=\"[card-footer]\"></ng-content>\n </div>\n </div>\n ", styles: [".card{border:1px solid var(--vbn-color-border);border-radius:var(--vbn-radius-sm);overflow:hidden;box-shadow:var(--vbn-shadow-sm)}.card-header{background-color:var(--vbn-color-surface-alt);padding:10px 15px;border-bottom:1px solid var(--vbn-color-border)}.card-body{padding:15px}.card-footer{background-color:var(--vbn-color-surface-alt);padding:10px 15px;border-top:1px solid var(--vbn-color-border)}\n"] }]
32
32
  }], propDecorators: { pd: [{
33
33
  type: Input
34
34
  }], mg: [{