@hubpav/hwio-ui 0.1.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 (43) hide show
  1. package/README.md +8 -0
  2. package/package.json +40 -0
  3. package/src/components/HWioBreadcrumbs.astro +19 -0
  4. package/src/components/HWioButton.astro +43 -0
  5. package/src/components/HWioChoiceCards.astro +31 -0
  6. package/src/components/HWioContactSection.astro +37 -0
  7. package/src/components/HWioCookieConsent.astro +87 -0
  8. package/src/components/HWioCtaBand.astro +20 -0
  9. package/src/components/HWioFaq.astro +19 -0
  10. package/src/components/HWioFeatureCard.astro +15 -0
  11. package/src/components/HWioFeatureGrid.astro +9 -0
  12. package/src/components/HWioFontGate.astro +18 -0
  13. package/src/components/HWioFooter.astro +96 -0
  14. package/src/components/HWioFooterSites.astro +16 -0
  15. package/src/components/HWioFormField.astro +29 -0
  16. package/src/components/HWioHeader.astro +92 -0
  17. package/src/components/HWioHeroSplit.astro +33 -0
  18. package/src/components/HWioHubSpotForm.astro +58 -0
  19. package/src/components/HWioIcon.astro +44 -0
  20. package/src/components/HWioLanguageSwitcher.astro +27 -0
  21. package/src/components/HWioLogoStrip.astro +29 -0
  22. package/src/components/HWioNotFound.astro +12 -0
  23. package/src/components/HWioPricingTiers.astro +28 -0
  24. package/src/components/HWioProcessSteps.astro +17 -0
  25. package/src/components/HWioSection.astro +10 -0
  26. package/src/components/HWioSectionHeader.astro +24 -0
  27. package/src/components/HWioSeoHead.astro +83 -0
  28. package/src/components/HWioShell.astro +20 -0
  29. package/src/components/HWioSkipLink.astro +5 -0
  30. package/src/components/HWioStatsBand.astro +27 -0
  31. package/src/components/HWioThemeToggle.astro +22 -0
  32. package/src/components/HWioTurnstile.astro +10 -0
  33. package/src/html.ts +31 -0
  34. package/src/integration.mjs +61 -0
  35. package/src/schemas.ts +51 -0
  36. package/src/styles/prose.css +24 -0
  37. package/src/styles/styles.css +221 -0
  38. package/src/styles/themes/er3o.css +55 -0
  39. package/src/styles/themes/hwio-dark.css +49 -0
  40. package/src/styles/themes/hwio-forestry-dark.css +42 -0
  41. package/src/styles/themes/hwio-forestry.css +42 -0
  42. package/src/styles/themes/hwio.css +42 -0
  43. package/src/types.ts +51 -0
@@ -0,0 +1,221 @@
1
+ /*
2
+ * @hubpav/hwio-ui entry stylesheet. A site's global.css does:
3
+ * @import "tailwindcss";
4
+ * @import "@hubpav/hwio-ui/styles.css";
5
+ * @import "@hubpav/hwio-ui/themes/hwio.css"; exactly one light theme (default: true)
6
+ * @import "@hubpav/hwio-ui/themes/hwio-dark.css"; optional: at most one dark theme (prefersdark)
7
+ * @import "@hubpav/hwio-brand/fonts/inter.css";
8
+ * :root { --hwio-container: 1640px; } landing preset only (hub sites keep 1275px)
9
+ */
10
+ @plugin "daisyui" {
11
+ themes: false;
12
+ exclude: rootscrollgutter;
13
+ logs: false;
14
+ }
15
+
16
+ /* The package's own component sources, so Tailwind emits the classes they use. */
17
+ @source "../components";
18
+
19
+ @theme inline {
20
+ --font-sans: var(--hwio-font-sans);
21
+ }
22
+
23
+ /* One container for the fleet; width comes from the theme (hub) or the site (landing). */
24
+ @utility container {
25
+ width: 100%;
26
+ margin-inline: auto;
27
+ max-width: var(--hwio-container);
28
+ padding-inline: var(--hwio-container-pad);
29
+ }
30
+
31
+ @layer base {
32
+ html {
33
+ font-family: var(--hwio-font-sans);
34
+ scroll-behavior: smooth;
35
+ scroll-padding-top: 100px;
36
+ }
37
+ html.is-routing {
38
+ scroll-behavior: auto;
39
+ }
40
+ body {
41
+ -webkit-font-smoothing: antialiased;
42
+ overflow-x: hidden;
43
+ background-color: var(--color-base-100);
44
+ color: var(--color-base-content);
45
+ font-size: 1.0625rem; /* 17 px body (direction A) */
46
+ line-height: 1.6;
47
+ }
48
+ button:not(:disabled),
49
+ [role='button']:not(:disabled) {
50
+ cursor: pointer;
51
+ }
52
+ /* Type ramp (direction A): 56 / 40 / 28 / 22 / 17 on large screens, tighter tracking as size grows. */
53
+ h1, h2, h3, h4, h5, h6 {
54
+ font-weight: 700;
55
+ text-wrap: balance;
56
+ }
57
+ h1 { font-size: 2.5rem; line-height: 1.05; letter-spacing: -0.03em; }
58
+ h2 { font-size: 2rem; line-height: 1.1; letter-spacing: -0.025em; }
59
+ h3 { font-size: 1.375rem; line-height: 1.2; letter-spacing: -0.01em; }
60
+ h4 { font-size: 1.125rem; line-height: 1.3; letter-spacing: -0.005em; }
61
+ @media (width >= 48rem) {
62
+ h1 { font-size: 3rem; }
63
+ h2 { font-size: 2.5rem; }
64
+ h3 { font-size: 1.375rem; }
65
+ }
66
+ @media (width >= 64rem) {
67
+ h1 { font-size: 3.5rem; }
68
+ }
69
+ :focus-visible {
70
+ outline: 2px solid var(--color-secondary);
71
+ outline-offset: 2px;
72
+ }
73
+ /* Font gate (owner ruling R3): text stays invisible until the face decodes; a bounded
74
+ failure pins the metric-matched fallback so nothing repaints later. */
75
+ html.fonts-loading body > :not([data-hwio-font-exempt]) {
76
+ visibility: hidden;
77
+ }
78
+ html.fonts-failed {
79
+ --hwio-font-sans: 'Inter Fallback', ui-sans-serif, system-ui, sans-serif;
80
+ }
81
+ }
82
+
83
+ @layer components {
84
+ /* Rhythm (direction A): 80 / 112 px sections, 40 / 48 px compact bands. */
85
+ .hwio-section { padding-block: calc(var(--spacing) * 20); }
86
+ .hwio-section-compact { padding-block: calc(var(--spacing) * 10); }
87
+ @media (width >= 64rem) {
88
+ .hwio-section { padding-block: calc(var(--spacing) * 28); }
89
+ .hwio-section-compact { padding-block: calc(var(--spacing) * 12); }
90
+ }
91
+ /* Kicker: the sentence-case red label above a heading (replaces www's uppercase eyebrows). */
92
+ .hwio-kicker,
93
+ .hwio-eyebrow {
94
+ color: var(--color-accent);
95
+ font-size: 0.875rem;
96
+ font-weight: 600;
97
+ line-height: 1.4;
98
+ }
99
+ .hwio-tone-neutral .hwio-kicker,
100
+ .hwio-tone-neutral .hwio-eyebrow {
101
+ color: var(--hwio-kicker-on-neutral, var(--color-accent));
102
+ }
103
+ .hwio-muted {
104
+ color: color-mix(in oklab, var(--color-base-content) 72%, transparent);
105
+ }
106
+ .hwio-tone-neutral .hwio-muted {
107
+ color: color-mix(in oklab, var(--color-neutral-content) 75%, transparent);
108
+ }
109
+ .hwio-lead {
110
+ font-size: 1.1875rem;
111
+ line-height: 1.55;
112
+ color: color-mix(in oklab, var(--color-base-content) 72%, transparent);
113
+ }
114
+ .hwio-tone-neutral .hwio-lead {
115
+ color: color-mix(in oklab, var(--color-neutral-content) 75%, transparent);
116
+ }
117
+ .hwio-hairline { border-color: var(--color-base-300); }
118
+ /* Inverse button for ink/neutral panels (navy on ink has no contrast). */
119
+ .hwio-btn-inverse {
120
+ background-color: var(--color-base-100);
121
+ border-color: var(--color-base-100);
122
+ color: var(--color-neutral);
123
+ }
124
+ .hwio-btn-inverse:hover {
125
+ background-color: var(--color-base-200);
126
+ border-color: var(--color-base-200);
127
+ }
128
+ .hwio-chip {
129
+ display: inline-flex;
130
+ align-items: center;
131
+ padding: calc(var(--spacing) * 1.5) calc(var(--spacing) * 3);
132
+ border-radius: 9999px;
133
+ background: color-mix(in oklab, var(--color-base-content) 6%, transparent);
134
+ font-size: var(--text-sm);
135
+ font-weight: 500;
136
+ }
137
+ /* Honeypot: off-screen, never display:none (bots check that), no inline style attribute. */
138
+ .hwio-hp {
139
+ position: absolute;
140
+ left: -9999px;
141
+ width: 1px;
142
+ height: 1px;
143
+ overflow: hidden;
144
+ opacity: 0;
145
+ }
146
+ [data-hs-status] {
147
+ margin-top: calc(var(--spacing) * 3);
148
+ font-size: var(--text-sm);
149
+ line-height: 1.4;
150
+ }
151
+ [data-hs-status].hs-status-success { color: var(--color-success); }
152
+ [data-hs-status].hs-status-error { color: var(--color-error); }
153
+
154
+ /* Scroll reveal: visible at rest for no-JS, animates in once the runtime marks it. */
155
+ .js [data-hwio-reveal]:not([data-hwio-revealed]) {
156
+ opacity: 0;
157
+ transform: translateY(24px);
158
+ }
159
+ [data-hwio-reveal] {
160
+ transition: opacity 0.6s ease-out, transform 0.6s ease-out;
161
+ }
162
+ [data-hwio-reveal][data-hwio-revealed] {
163
+ opacity: 1;
164
+ transform: none;
165
+ }
166
+
167
+ /* Count-up: reserve the width of the final value so the layout never jumps. */
168
+ .hwio-stat-value {
169
+ display: block;
170
+ font-variant-numeric: tabular-nums;
171
+ white-space: nowrap;
172
+ }
173
+
174
+ /* Logo marquee */
175
+ .hwio-marquee-track {
176
+ width: max-content;
177
+ animation: hwio-marquee 38s linear infinite;
178
+ will-change: transform;
179
+ }
180
+ .hwio-marquee-track:hover,
181
+ .hwio-marquee-track:focus-within {
182
+ animation-play-state: paused;
183
+ }
184
+ @keyframes hwio-marquee {
185
+ to { transform: translate3d(-25%, 0, 0); }
186
+ }
187
+ .hwio-logo-grey {
188
+ filter: grayscale(100%);
189
+ opacity: 0.55;
190
+ transition: filter 0.3s, opacity 0.3s;
191
+ }
192
+ .hwio-logo-grey:hover { filter: none; opacity: 1; }
193
+ [data-theme$='-dark'] .hwio-logo-grey { filter: grayscale(100%) invert(1); }
194
+ [data-theme$='-dark'] .hwio-logo-grey:hover { filter: grayscale(100%) invert(1); opacity: 1; }
195
+
196
+ .hwio-theme-transition,
197
+ .hwio-theme-transition *,
198
+ .hwio-theme-transition *::before,
199
+ .hwio-theme-transition *::after {
200
+ transition: background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease !important;
201
+ }
202
+
203
+ @media (prefers-reduced-motion: reduce) {
204
+ [data-hwio-reveal] { opacity: 1 !important; transform: none !important; transition: none !important; }
205
+ .hwio-marquee-track { animation: none; transform: none; will-change: auto; }
206
+ .hwio-marquee-track > [aria-hidden='true'] { display: none; }
207
+ }
208
+ }
209
+
210
+ /* Brand overrides of DaisyUI defaults. Unlayered on purpose: DaisyUI lives in the utilities layer
211
+ and would otherwise win. Direction A: 15 px/600 sentence-case buttons, 48 px tall, 8 px radius,
212
+ 28 px padding on large buttons at the same height; card padding 32 px. */
213
+ .btn {
214
+ --fontsize: 0.9375rem;
215
+ font-weight: 600;
216
+ padding-inline: 1.5rem;
217
+ }
218
+ .btn-sm { --fontsize: 0.875rem; padding-inline: 1rem; }
219
+ .btn-lg { height: var(--size); --fontsize: 0.9375rem; padding-inline: 1.75rem; }
220
+ .btn-square, .btn-circle { padding-inline: 0; }
221
+ .card .card-body { --card-p: 2rem; }
@@ -0,0 +1,55 @@
1
+ /* Generated from brand.json by @hubpav/hwio-ui (scripts/build-themes.mjs). Theme "er3o". */
2
+ @plugin "daisyui/theme" {
3
+ name: "er3o";
4
+ default: false;
5
+ prefersdark: false;
6
+ color-scheme: light;
7
+ --color-base-100: #ffffff;
8
+ --color-base-200: #f9fafb;
9
+ --color-base-300: #f3f4f6;
10
+ --color-base-content: #333333;
11
+ --color-primary: #14A0C0;
12
+ --color-primary-content: #ffffff;
13
+ --color-secondary: #01CC9B;
14
+ --color-secondary-content: #061920;
15
+ --color-accent: #0C6678;
16
+ --color-accent-content: #ffffff;
17
+ --color-neutral: #252532;
18
+ --color-neutral-content: #ffffff;
19
+ --color-info: #19768B;
20
+ --color-info-content: #ffffff;
21
+ --color-success: #15803d;
22
+ --color-success-content: #ffffff;
23
+ --color-warning: #b45309;
24
+ --color-warning-content: #ffffff;
25
+ --color-error: #dc2626;
26
+ --color-error-content: #ffffff;
27
+ --radius-selector: 2rem;
28
+ --radius-field: 2rem;
29
+ --radius-box: 1.5rem;
30
+ --size-selector: 0.25rem;
31
+ --size-field: 0.3rem;
32
+ --border: 1px;
33
+ --depth: 0;
34
+ --noise: 0;
35
+ }
36
+
37
+ [data-theme="er3o"] {
38
+ --hwio-font-sans: 'Poppins', 'Poppins Fallback', ui-sans-serif, system-ui, sans-serif;
39
+ --hwio-container: 1275px;
40
+ --hwio-container-pad: 27px;
41
+ --er3o-gradient-from: #01CC9B;
42
+ --er3o-gradient-to: #14A0C0;
43
+ }
44
+
45
+ /* ENEROOO carries its gradient as a theme rule: DaisyUI slots are single colours. */
46
+ [data-theme="er3o"] .btn-primary {
47
+ background-image: linear-gradient(90deg, var(--er3o-gradient-from), var(--er3o-gradient-to));
48
+ border-color: transparent;
49
+ }
50
+ [data-theme="er3o"] .er3o-gradient-text {
51
+ background-image: linear-gradient(90deg, var(--er3o-gradient-from), var(--er3o-gradient-to));
52
+ -webkit-background-clip: text;
53
+ background-clip: text;
54
+ color: transparent;
55
+ }
@@ -0,0 +1,49 @@
1
+ /* Generated from brand.json by @hubpav/hwio-ui (scripts/build-themes.mjs). Theme "hwio-dark". */
2
+ @plugin "daisyui/theme" {
3
+ name: "hwio-dark";
4
+ default: false;
5
+ prefersdark: true;
6
+ color-scheme: dark;
7
+ --color-base-100: #0f0f14;
8
+ --color-base-200: #1a1a22;
9
+ --color-base-300: #23232f;
10
+ --color-base-content: #e7e7ee;
11
+ --color-primary: #06367a;
12
+ --color-primary-content: #ffffff;
13
+ --color-secondary: #016ad4;
14
+ --color-secondary-content: #ffffff;
15
+ --color-accent: #f43f5e;
16
+ --color-accent-content: #0f0f14;
17
+ --color-neutral: #23232f;
18
+ --color-neutral-content: #e7e7ee;
19
+ --color-info: #009cfa;
20
+ --color-info-content: #06367a;
21
+ --color-success: #15803d;
22
+ --color-success-content: #ffffff;
23
+ --color-warning: #b45309;
24
+ --color-warning-content: #ffffff;
25
+ --color-error: #dc2626;
26
+ --color-error-content: #ffffff;
27
+ --radius-selector: 2rem;
28
+ --radius-field: 0.5rem;
29
+ --radius-box: 1rem;
30
+ --size-selector: 0.25rem;
31
+ --size-field: 0.3rem;
32
+ --border: 1px;
33
+ --depth: 0;
34
+ --noise: 0;
35
+ }
36
+
37
+ [data-theme="hwio-dark"] {
38
+ --hwio-font-sans: 'Inter', 'Inter Fallback', ui-sans-serif, system-ui, sans-serif;
39
+ --hwio-container: 1275px;
40
+ --hwio-container-pad: 27px;
41
+ --hwio-kicker-on-neutral: #f43f5e;
42
+ }
43
+
44
+ @media (prefers-color-scheme: dark) {
45
+ :root:not([data-theme]) {
46
+ --hwio-font-sans: 'Inter', 'Inter Fallback', ui-sans-serif, system-ui, sans-serif;
47
+ --hwio-kicker-on-neutral: #f43f5e;
48
+ }
49
+ }
@@ -0,0 +1,42 @@
1
+ /* Generated from brand.json by @hubpav/hwio-ui (scripts/build-themes.mjs). Theme "hwio-forestry-dark". */
2
+ @plugin "daisyui/theme" {
3
+ name: "hwio-forestry-dark";
4
+ default: false;
5
+ prefersdark: false;
6
+ color-scheme: dark;
7
+ --color-base-100: #0f0f14;
8
+ --color-base-200: #1a1a22;
9
+ --color-base-300: #23232f;
10
+ --color-base-content: #e7e7ee;
11
+ --color-primary: #2B7036;
12
+ --color-primary-content: #ffffff;
13
+ --color-secondary: #016ad4;
14
+ --color-secondary-content: #ffffff;
15
+ --color-accent: #5aa864;
16
+ --color-accent-content: #0f0f14;
17
+ --color-neutral: #23232f;
18
+ --color-neutral-content: #e7e7ee;
19
+ --color-info: #009cfa;
20
+ --color-info-content: #06367a;
21
+ --color-success: #15803d;
22
+ --color-success-content: #ffffff;
23
+ --color-warning: #b45309;
24
+ --color-warning-content: #ffffff;
25
+ --color-error: #dc2626;
26
+ --color-error-content: #ffffff;
27
+ --radius-selector: 2rem;
28
+ --radius-field: 0.5rem;
29
+ --radius-box: 1rem;
30
+ --size-selector: 0.25rem;
31
+ --size-field: 0.3rem;
32
+ --border: 1px;
33
+ --depth: 0;
34
+ --noise: 0;
35
+ }
36
+
37
+ [data-theme="hwio-forestry-dark"] {
38
+ --hwio-font-sans: 'Inter', 'Inter Fallback', ui-sans-serif, system-ui, sans-serif;
39
+ --hwio-container: 1275px;
40
+ --hwio-container-pad: 27px;
41
+ --hwio-kicker-on-neutral: #f43f5e;
42
+ }
@@ -0,0 +1,42 @@
1
+ /* Generated from brand.json by @hubpav/hwio-ui (scripts/build-themes.mjs). Theme "hwio-forestry". */
2
+ @plugin "daisyui/theme" {
3
+ name: "hwio-forestry";
4
+ default: false;
5
+ prefersdark: false;
6
+ color-scheme: light;
7
+ --color-base-100: #ffffff;
8
+ --color-base-200: #F1FAFF;
9
+ --color-base-300: #e5e7eb;
10
+ --color-base-content: #252532;
11
+ --color-primary: #2B7036;
12
+ --color-primary-content: #ffffff;
13
+ --color-secondary: #016ad4;
14
+ --color-secondary-content: #ffffff;
15
+ --color-accent: #2B7036;
16
+ --color-accent-content: #ffffff;
17
+ --color-neutral: #252532;
18
+ --color-neutral-content: #f3f4f6;
19
+ --color-info: #009cfa;
20
+ --color-info-content: #06367a;
21
+ --color-success: #15803d;
22
+ --color-success-content: #ffffff;
23
+ --color-warning: #b45309;
24
+ --color-warning-content: #ffffff;
25
+ --color-error: #dc2626;
26
+ --color-error-content: #ffffff;
27
+ --radius-selector: 2rem;
28
+ --radius-field: 0.5rem;
29
+ --radius-box: 1rem;
30
+ --size-selector: 0.25rem;
31
+ --size-field: 0.3rem;
32
+ --border: 1px;
33
+ --depth: 0;
34
+ --noise: 0;
35
+ }
36
+
37
+ [data-theme="hwio-forestry"] {
38
+ --hwio-font-sans: 'Inter', 'Inter Fallback', ui-sans-serif, system-ui, sans-serif;
39
+ --hwio-container: 1275px;
40
+ --hwio-container-pad: 27px;
41
+ --hwio-kicker-on-neutral: #f43f5e;
42
+ }
@@ -0,0 +1,42 @@
1
+ /* Generated from brand.json by @hubpav/hwio-ui (scripts/build-themes.mjs). Theme "hwio". */
2
+ @plugin "daisyui/theme" {
3
+ name: "hwio";
4
+ default: true;
5
+ prefersdark: false;
6
+ color-scheme: light;
7
+ --color-base-100: #ffffff;
8
+ --color-base-200: #F1FAFF;
9
+ --color-base-300: #e5e7eb;
10
+ --color-base-content: #252532;
11
+ --color-primary: #06367a;
12
+ --color-primary-content: #ffffff;
13
+ --color-secondary: #016ad4;
14
+ --color-secondary-content: #ffffff;
15
+ --color-accent: #e30427;
16
+ --color-accent-content: #ffffff;
17
+ --color-neutral: #252532;
18
+ --color-neutral-content: #f3f4f6;
19
+ --color-info: #009cfa;
20
+ --color-info-content: #06367a;
21
+ --color-success: #15803d;
22
+ --color-success-content: #ffffff;
23
+ --color-warning: #b45309;
24
+ --color-warning-content: #ffffff;
25
+ --color-error: #dc2626;
26
+ --color-error-content: #ffffff;
27
+ --radius-selector: 2rem;
28
+ --radius-field: 0.5rem;
29
+ --radius-box: 1rem;
30
+ --size-selector: 0.25rem;
31
+ --size-field: 0.3rem;
32
+ --border: 1px;
33
+ --depth: 0;
34
+ --noise: 0;
35
+ }
36
+
37
+ :root, [data-theme="hwio"] {
38
+ --hwio-font-sans: 'Inter', 'Inter Fallback', ui-sans-serif, system-ui, sans-serif;
39
+ --hwio-container: 1275px;
40
+ --hwio-container-pad: 27px;
41
+ --hwio-kicker-on-neutral: #f43f5e;
42
+ }
package/src/types.ts ADDED
@@ -0,0 +1,51 @@
1
+ /** Measurement contract shared with the GTM containers: data-track / data-track-location. */
2
+ export interface HWioTrack {
3
+ id: string;
4
+ location?: string;
5
+ }
6
+
7
+ export interface HWioLinkItem {
8
+ label: string;
9
+ href: string;
10
+ external?: boolean;
11
+ current?: boolean;
12
+ track?: HWioTrack;
13
+ }
14
+
15
+ export interface HWioMedia {
16
+ src: string;
17
+ alt: string;
18
+ width: number;
19
+ height: number;
20
+ srcset?: string;
21
+ sizes?: string;
22
+ }
23
+
24
+ export interface HWioCta extends HWioLinkItem {
25
+ /** Visual weight; primary is the DaisyUI btn-primary fill. */
26
+ variant?: 'primary' | 'secondary' | 'ghost';
27
+ }
28
+
29
+ export type HWioTone = 'base' | 'alt' | 'neutral';
30
+ export type HWioLocale = string;
31
+
32
+ export interface HWioAlternate {
33
+ lang: string;
34
+ href: string;
35
+ }
36
+
37
+ /** A form field definition for HWioHubSpotForm / HWioFormField. */
38
+ export interface HWioFieldDef {
39
+ name: string;
40
+ label: string;
41
+ type?: 'text' | 'email' | 'tel' | 'url' | 'textarea' | 'select' | 'checkbox' | 'hidden';
42
+ required?: boolean;
43
+ placeholder?: string;
44
+ autocomplete?: string;
45
+ options?: { value: string; label: string }[];
46
+ /** UI-only qualification field folded into the message ("Label: value"). */
47
+ messageField?: boolean;
48
+ half?: boolean;
49
+ value?: string;
50
+ rows?: number;
51
+ }