@erplora/outfitkit 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +457 -0
- package/dist/base/anchor.d.ts +13 -0
- package/dist/base/define.d.ts +1 -0
- package/dist/base/relay.d.ts +1 -0
- package/dist/cdn.d.ts +96 -0
- package/dist/components/ok-app-launcher/ok-app-launcher.d.ts +57 -0
- package/dist/components/ok-audio/ok-audio.d.ts +45 -0
- package/dist/components/ok-avatar/ok-avatar.d.ts +36 -0
- package/dist/components/ok-avatar-group/ok-avatar-group.d.ts +38 -0
- package/dist/components/ok-bar-list/ok-bar-list.d.ts +36 -0
- package/dist/components/ok-bento/ok-bento.d.ts +17 -0
- package/dist/components/ok-bento-item/ok-bento-item.d.ts +34 -0
- package/dist/components/ok-calculator/ok-calculator.d.ts +46 -0
- package/dist/components/ok-calendar/ok-calendar.d.ts +63 -0
- package/dist/components/ok-carousel/ok-carousel.d.ts +48 -0
- package/dist/components/ok-chart/ok-chart.d.ts +55 -0
- package/dist/components/ok-chat/ok-chat.d.ts +54 -0
- package/dist/components/ok-coachmark/ok-coachmark.d.ts +69 -0
- package/dist/components/ok-code/ok-code.d.ts +28 -0
- package/dist/components/ok-color-picker/ok-color-picker.d.ts +63 -0
- package/dist/components/ok-combo/ok-combo.d.ts +46 -0
- package/dist/components/ok-command-palette/ok-command-palette.d.ts +72 -0
- package/dist/components/ok-contact-form/ok-contact-form.d.ts +54 -0
- package/dist/components/ok-cropper/ok-cropper.d.ts +60 -0
- package/dist/components/ok-cta-band/ok-cta-band.d.ts +18 -0
- package/dist/components/ok-currency/ok-currency.d.ts +31 -0
- package/dist/components/ok-data-table/ok-data-table.d.ts +312 -0
- package/dist/components/ok-date-picker/ok-date-picker.d.ts +81 -0
- package/dist/components/ok-detail-list/ok-detail-list.d.ts +30 -0
- package/dist/components/ok-diff/ok-diff.d.ts +38 -0
- package/dist/components/ok-donut/ok-donut.d.ts +38 -0
- package/dist/components/ok-drawer/ok-drawer.d.ts +56 -0
- package/dist/components/ok-dropzone/ok-dropzone.d.ts +48 -0
- package/dist/components/ok-empty-state/ok-empty-state.d.ts +16 -0
- package/dist/components/ok-error-page/ok-error-page.d.ts +77 -0
- package/dist/components/ok-event-card/ok-event-card.d.ts +56 -0
- package/dist/components/ok-feature-card/ok-feature-card.d.ts +23 -0
- package/dist/components/ok-file-item/ok-file-item.d.ts +31 -0
- package/dist/components/ok-file-manager/ok-file-manager.d.ts +145 -0
- package/dist/components/ok-footer/ok-footer.d.ts +10 -0
- package/dist/components/ok-funnel/ok-funnel.d.ts +31 -0
- package/dist/components/ok-gallery/ok-gallery.d.ts +34 -0
- package/dist/components/ok-gauge/ok-gauge.d.ts +49 -0
- package/dist/components/ok-heatmap/ok-heatmap.d.ts +45 -0
- package/dist/components/ok-hero/ok-hero.d.ts +10 -0
- package/dist/components/ok-hover-card/ok-hover-card.d.ts +76 -0
- package/dist/components/ok-icon-tile/ok-icon-tile.d.ts +24 -0
- package/dist/components/ok-image/ok-image.d.ts +56 -0
- package/dist/components/ok-inline-feedback/ok-inline-feedback.d.ts +33 -0
- package/dist/components/ok-invoice/ok-invoice.d.ts +137 -0
- package/dist/components/ok-json-viewer/ok-json-viewer.d.ts +31 -0
- package/dist/components/ok-kanban/ok-kanban.d.ts +56 -0
- package/dist/components/ok-kbd/ok-kbd.d.ts +21 -0
- package/dist/components/ok-keyboard/ok-keyboard.d.ts +35 -0
- package/dist/components/ok-kpi/ok-kpi.d.ts +24 -0
- package/dist/components/ok-language-select/ok-language-select.d.ts +31 -0
- package/dist/components/ok-lightbox/ok-lightbox.d.ts +59 -0
- package/dist/components/ok-logo-cloud/ok-logo-cloud.d.ts +14 -0
- package/dist/components/ok-loyalty-card/ok-loyalty-card.d.ts +35 -0
- package/dist/components/ok-mail/ok-mail.d.ts +117 -0
- package/dist/components/ok-menu/ok-menu.d.ts +75 -0
- package/dist/components/ok-menubar/ok-menubar.d.ts +75 -0
- package/dist/components/ok-navbar/ok-navbar.d.ts +42 -0
- package/dist/components/ok-notification-center/ok-notification-center.d.ts +79 -0
- package/dist/components/ok-org-chart/ok-org-chart.d.ts +67 -0
- package/dist/components/ok-otp/ok-otp.d.ts +31 -0
- package/dist/components/ok-page-header/ok-page-header.d.ts +23 -0
- package/dist/components/ok-pagination/ok-pagination.d.ts +44 -0
- package/dist/components/ok-pdf/ok-pdf.d.ts +32 -0
- package/dist/components/ok-phone/ok-phone.d.ts +48 -0
- package/dist/components/ok-pinpad/ok-pinpad.d.ts +29 -0
- package/dist/components/ok-pricing-card/ok-pricing-card.d.ts +31 -0
- package/dist/components/ok-product-card/ok-product-card.d.ts +25 -0
- package/dist/components/ok-qr/ok-qr.d.ts +24 -0
- package/dist/components/ok-qty-stepper/ok-qty-stepper.d.ts +35 -0
- package/dist/components/ok-range-dual/ok-range-dual.d.ts +38 -0
- package/dist/components/ok-rating/ok-rating.d.ts +33 -0
- package/dist/components/ok-receipt/ok-receipt.d.ts +103 -0
- package/dist/components/ok-reveal/ok-reveal.d.ts +21 -0
- package/dist/components/ok-rich-text/ok-rich-text.d.ts +46 -0
- package/dist/components/ok-scheduler/ok-scheduler.d.ts +74 -0
- package/dist/components/ok-select-card/ok-select-card.d.ts +37 -0
- package/dist/components/ok-signature/ok-signature.d.ts +55 -0
- package/dist/components/ok-skeleton/ok-skeleton.d.ts +40 -0
- package/dist/components/ok-sparkline/ok-sparkline.d.ts +27 -0
- package/dist/components/ok-split-button/ok-split-button.d.ts +49 -0
- package/dist/components/ok-splitter/ok-splitter.d.ts +36 -0
- package/dist/components/ok-stat/ok-stat.d.ts +16 -0
- package/dist/components/ok-status-dot/ok-status-dot.d.ts +24 -0
- package/dist/components/ok-status-pill/ok-status-pill.d.ts +22 -0
- package/dist/components/ok-stepper/ok-stepper.d.ts +33 -0
- package/dist/components/ok-store/ok-store.d.ts +33 -0
- package/dist/components/ok-tag-input/ok-tag-input.d.ts +39 -0
- package/dist/components/ok-testimonial/ok-testimonial.d.ts +21 -0
- package/dist/components/ok-time-picker/ok-time-picker.d.ts +50 -0
- package/dist/components/ok-timeline/ok-timeline.d.ts +33 -0
- package/dist/components/ok-tree/ok-tree.d.ts +46 -0
- package/dist/components/ok-video/ok-video.d.ts +49 -0
- package/dist/components/ok-widget-board/ok-widget-board.d.ts +71 -0
- package/dist/components/ok-wizard/ok-wizard.d.ts +30 -0
- package/dist/define.js +8 -0
- package/dist/erplora.css +112 -0
- package/dist/index.d.ts +158 -0
- package/dist/index.js +197 -0
- package/dist/layout.css +338 -0
- package/dist/ok-app-launcher.js +396 -0
- package/dist/ok-audio.js +308 -0
- package/dist/ok-avatar-group.js +158 -0
- package/dist/ok-avatar.js +179 -0
- package/dist/ok-bar-list.js +189 -0
- package/dist/ok-bento-item.js +168 -0
- package/dist/ok-bento.js +63 -0
- package/dist/ok-calculator.js +406 -0
- package/dist/ok-calendar.js +541 -0
- package/dist/ok-carousel.js +352 -0
- package/dist/ok-chart.js +325 -0
- package/dist/ok-chat.js +320 -0
- package/dist/ok-coachmark.js +500 -0
- package/dist/ok-code.js +190 -0
- package/dist/ok-color-picker.js +569 -0
- package/dist/ok-combo.js +294 -0
- package/dist/ok-command-palette.js +448 -0
- package/dist/ok-contact-form.js +288 -0
- package/dist/ok-cropper.js +404 -0
- package/dist/ok-cta-band.js +134 -0
- package/dist/ok-currency.js +172 -0
- package/dist/ok-data-table.js +1281 -0
- package/dist/ok-date-picker.js +736 -0
- package/dist/ok-detail-list.js +156 -0
- package/dist/ok-diff.js +200 -0
- package/dist/ok-donut.js +280 -0
- package/dist/ok-drawer.js +357 -0
- package/dist/ok-dropzone.js +376 -0
- package/dist/ok-empty-state.js +104 -0
- package/dist/ok-error-page.js +547 -0
- package/dist/ok-event-card.js +384 -0
- package/dist/ok-feature-card.js +152 -0
- package/dist/ok-file-item.js +259 -0
- package/dist/ok-file-manager.js +1116 -0
- package/dist/ok-footer.js +67 -0
- package/dist/ok-funnel.js +181 -0
- package/dist/ok-gallery.js +293 -0
- package/dist/ok-gauge.js +385 -0
- package/dist/ok-heatmap.js +268 -0
- package/dist/ok-hero.js +43 -0
- package/dist/ok-hover-card.js +480 -0
- package/dist/ok-icon-tile.js +123 -0
- package/dist/ok-image.js +471 -0
- package/dist/ok-inline-feedback.js +221 -0
- package/dist/ok-invoice.js +229 -0
- package/dist/ok-json-viewer.js +330 -0
- package/dist/ok-kanban.js +427 -0
- package/dist/ok-kbd.js +159 -0
- package/dist/ok-keyboard.js +402 -0
- package/dist/ok-kpi.js +147 -0
- package/dist/ok-language-select.js +188 -0
- package/dist/ok-lightbox.js +490 -0
- package/dist/ok-logo-cloud.js +92 -0
- package/dist/ok-loyalty-card.js +353 -0
- package/dist/ok-mail.js +562 -0
- package/dist/ok-menu.js +529 -0
- package/dist/ok-menubar.js +628 -0
- package/dist/ok-navbar.js +306 -0
- package/dist/ok-notification-center.js +545 -0
- package/dist/ok-org-chart.js +619 -0
- package/dist/ok-otp.js +199 -0
- package/dist/ok-page-header.js +202 -0
- package/dist/ok-pagination.js +366 -0
- package/dist/ok-pdf.js +160 -0
- package/dist/ok-phone.js +225 -0
- package/dist/ok-pinpad.js +171 -0
- package/dist/ok-pricing-card.js +184 -0
- package/dist/ok-product-card.js +178 -0
- package/dist/ok-qr.js +652 -0
- package/dist/ok-qty-stepper.js +212 -0
- package/dist/ok-range-dual.js +280 -0
- package/dist/ok-rating.js +199 -0
- package/dist/ok-receipt.js +183 -0
- package/dist/ok-reveal.js +94 -0
- package/dist/ok-rich-text.js +538 -0
- package/dist/ok-scheduler.js +518 -0
- package/dist/ok-select-card.js +231 -0
- package/dist/ok-signature.js +267 -0
- package/dist/ok-skeleton.js +345 -0
- package/dist/ok-sparkline.js +150 -0
- package/dist/ok-split-button.js +251 -0
- package/dist/ok-splitter.js +289 -0
- package/dist/ok-stat.js +77 -0
- package/dist/ok-status-dot.js +163 -0
- package/dist/ok-status-pill.js +123 -0
- package/dist/ok-stepper.js +299 -0
- package/dist/ok-store.js +83 -0
- package/dist/ok-tag-input.js +358 -0
- package/dist/ok-testimonial.js +136 -0
- package/dist/ok-time-picker.js +472 -0
- package/dist/ok-timeline.js +251 -0
- package/dist/ok-tree.js +266 -0
- package/dist/ok-video.js +362 -0
- package/dist/ok-widget-board.js +265 -0
- package/dist/ok-wizard.js +153 -0
- package/dist/outfitkit.js +96 -0
- package/dist/shared/anchor.js +14 -0
- package/dist/store/controller.d.ts +17 -0
- package/dist/store/idb.d.ts +16 -0
- package/dist/store/store.d.ts +39 -0
- package/dist/store-controller.js +31 -0
- package/dist/store.js +182 -0
- package/dist/theme.example.css +70 -0
- package/package.json +147 -0
package/dist/layout.css
ADDED
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
/* OutfitKit — layout.css
|
|
2
|
+
*
|
|
3
|
+
* Primitivos de layout como CSS PLANO (sin web component). Para geometría pura
|
|
4
|
+
* (container, grid, sección de marketing) un custom element solo aporta costes:
|
|
5
|
+
* FOUC hasta `:defined`, shadow boundary que rompe el grid del padre y peso de
|
|
6
|
+
* registro/upgrade. Regla: comportamiento/estado → web component (ok-*);
|
|
7
|
+
* geometría/tipografía → clase CSS de este fichero.
|
|
8
|
+
*
|
|
9
|
+
* Reemplaza a los antiguos <ok-container>, <ok-container-full> y <ok-section>
|
|
10
|
+
* (eliminados del paquete). Complementa a Ionic: para el padding de página de
|
|
11
|
+
* un dashboard usa `.ion-padding` dentro de <ion-content>; aquí solo vive lo
|
|
12
|
+
* que Ionic NO tiene (grid de 12 col, container con max-width, secciones).
|
|
13
|
+
*
|
|
14
|
+
* Tokens: hereda --ok-container-max / --ok-spacing del tema (outfitkit-theme.css
|
|
15
|
+
* o equivalente) con los mismos fallbacks que usaban los componentes.
|
|
16
|
+
* Cargar después del tema. Export del paquete: `@erplora/outfitkit/layout.css`.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
:root {
|
|
20
|
+
--ok-grid-gap: clamp(0.75rem, 1.5vw, 1.25rem);
|
|
21
|
+
--ok-section-pad-y: clamp(3rem, 7vw, 5.5rem);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/* ===== Container (web pública; en dashboard NO: ahí el ancho lo da el split-pane) ===== */
|
|
25
|
+
|
|
26
|
+
.ok-container {
|
|
27
|
+
width: 100%;
|
|
28
|
+
max-width: var(--ok-container-max, 1140px);
|
|
29
|
+
margin-inline: auto;
|
|
30
|
+
padding-inline: var(--ok-spacing, var(--ion-padding, 16px));
|
|
31
|
+
box-sizing: border-box;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.ok-container-fluid {
|
|
35
|
+
width: 100%;
|
|
36
|
+
min-width: 0;
|
|
37
|
+
padding-inline: var(--ok-spacing, var(--ion-padding, 16px));
|
|
38
|
+
box-sizing: border-box;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/* ===== Grid de 12 columnas (compatible con ion-split-pane: minmax(0,1fr) +
|
|
42
|
+
min-width:0 evitan que el contenido fuerce el ancho cuando el menú está abierto).
|
|
43
|
+
Breakpoints = los de Ionic (md 768 / lg 992 / xl 1200). ===== */
|
|
44
|
+
|
|
45
|
+
.ok-grid {
|
|
46
|
+
display: grid;
|
|
47
|
+
grid-template-columns: repeat(12, minmax(0, 1fr));
|
|
48
|
+
gap: var(--ok-grid-gap);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.ok-col {
|
|
52
|
+
grid-column: span 12;
|
|
53
|
+
min-width: 0;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/* Grid de cards/KPIs sin clases de breakpoint: se adapta solo al ancho útil. */
|
|
57
|
+
.ok-grid-cards {
|
|
58
|
+
display: grid;
|
|
59
|
+
grid-template-columns: repeat(auto-fill, minmax(var(--ok-card-min, 260px), 1fr));
|
|
60
|
+
gap: var(--ok-grid-gap);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
@media (min-width: 768px) {
|
|
64
|
+
.ok-md-3 { grid-column: span 3; }
|
|
65
|
+
.ok-md-4 { grid-column: span 4; }
|
|
66
|
+
.ok-md-6 { grid-column: span 6; }
|
|
67
|
+
.ok-md-8 { grid-column: span 8; }
|
|
68
|
+
.ok-md-9 { grid-column: span 9; }
|
|
69
|
+
.ok-md-12 { grid-column: span 12; }
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
@media (min-width: 992px) {
|
|
73
|
+
.ok-lg-3 { grid-column: span 3; }
|
|
74
|
+
.ok-lg-4 { grid-column: span 4; }
|
|
75
|
+
.ok-lg-6 { grid-column: span 6; }
|
|
76
|
+
.ok-lg-8 { grid-column: span 8; }
|
|
77
|
+
.ok-lg-9 { grid-column: span 9; }
|
|
78
|
+
.ok-lg-12 { grid-column: span 12; }
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
@media (min-width: 1200px) {
|
|
82
|
+
.ok-xl-3 { grid-column: span 3; }
|
|
83
|
+
.ok-xl-4 { grid-column: span 4; }
|
|
84
|
+
.ok-xl-6 { grid-column: span 6; }
|
|
85
|
+
.ok-xl-8 { grid-column: span 8; }
|
|
86
|
+
.ok-xl-9 { grid-column: span 9; }
|
|
87
|
+
.ok-xl-12 { grid-column: span 12; }
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/* ===== Sección de marketing (antes <ok-section>) =====
|
|
91
|
+
*
|
|
92
|
+
* <section class="ok-section ok-section--center ok-section--divider">
|
|
93
|
+
* <header class="ok-section-head">
|
|
94
|
+
* <span class="ok-eyebrow">Plataforma</span>
|
|
95
|
+
* <h2 class="ok-section-title">Todo en uno</h2>
|
|
96
|
+
* <p class="ok-section-sub">…</p>
|
|
97
|
+
* </header>
|
|
98
|
+
* …contenido…
|
|
99
|
+
* </section>
|
|
100
|
+
*
|
|
101
|
+
* El centrado horizontal se hace con padding-inline:max(...) en el propio
|
|
102
|
+
* elemento (sin wrapper interno): así el divisor (border-top) ocupa el ancho
|
|
103
|
+
* completo igual que hacía el :host del componente.
|
|
104
|
+
*/
|
|
105
|
+
|
|
106
|
+
.ok-section {
|
|
107
|
+
display: block;
|
|
108
|
+
width: 100%;
|
|
109
|
+
box-sizing: border-box;
|
|
110
|
+
padding-block: var(--ok-section-pad-y);
|
|
111
|
+
padding-inline: max(
|
|
112
|
+
var(--ok-spacing, 1.25rem),
|
|
113
|
+
calc((100% - var(--ok-container-max, 1140px)) / 2 + var(--ok-spacing, 1.25rem))
|
|
114
|
+
);
|
|
115
|
+
color: var(--ok-text, var(--ion-text-color, #18181b));
|
|
116
|
+
font-family: var(--ok-font, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
.ok-section--divider {
|
|
120
|
+
border-top: 1px solid color-mix(in oklab, var(--ok-text, var(--ion-text-color, #18181b)) 8%, transparent);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.ok-section-head {
|
|
124
|
+
display: flex;
|
|
125
|
+
flex-direction: column;
|
|
126
|
+
gap: 0.9rem;
|
|
127
|
+
margin-bottom: clamp(2rem, 4vw, 3rem);
|
|
128
|
+
max-width: 56ch;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.ok-section--center .ok-section-head {
|
|
132
|
+
align-items: center;
|
|
133
|
+
text-align: center;
|
|
134
|
+
margin-inline: auto;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.ok-eyebrow {
|
|
138
|
+
display: inline-flex;
|
|
139
|
+
align-items: center;
|
|
140
|
+
gap: 0.4rem;
|
|
141
|
+
align-self: flex-start;
|
|
142
|
+
padding: 0.28rem 0.7rem;
|
|
143
|
+
border-radius: 999px;
|
|
144
|
+
font-size: 0.72rem;
|
|
145
|
+
font-weight: 600;
|
|
146
|
+
letter-spacing: 0.04em;
|
|
147
|
+
text-transform: uppercase;
|
|
148
|
+
color: var(--ok-primary, var(--ion-color-primary, #1496d6));
|
|
149
|
+
background: color-mix(in oklab, var(--ok-primary, var(--ion-color-primary, #1496d6)) 12%, transparent);
|
|
150
|
+
border: 1px solid color-mix(in oklab, var(--ok-primary, var(--ion-color-primary, #1496d6)) 22%, transparent);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
.ok-section--center .ok-eyebrow {
|
|
154
|
+
align-self: center;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
.ok-section-title {
|
|
158
|
+
margin: 0;
|
|
159
|
+
font-size: clamp(1.75rem, 1.1rem + 2.6vw, 2.85rem);
|
|
160
|
+
line-height: 1.06;
|
|
161
|
+
letter-spacing: -0.025em;
|
|
162
|
+
font-weight: 650;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
.ok-section-sub {
|
|
166
|
+
margin: 0;
|
|
167
|
+
font-size: clamp(1rem, 0.95rem + 0.3vw, 1.15rem);
|
|
168
|
+
line-height: 1.55;
|
|
169
|
+
color: var(--ok-muted, rgba(var(--ion-text-color-rgb, 24, 24, 27), 0.62));
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/* ===== Tabla apilable (.ok-table-stack) — patrón «no more tables» =====
|
|
173
|
+
*
|
|
174
|
+
* Solo CSS, sin web component (para CRUDs ricos usa <ok-data-table>; esto es
|
|
175
|
+
* para tablas simples/estáticas). En escritorio se ve como tabla; bajo 768px
|
|
176
|
+
* (breakpoint md de Ionic) cada fila se convierte en una card apilada y cada
|
|
177
|
+
* celda pinta su etiqueta de columna delante con `content: attr(data-title)`.
|
|
178
|
+
*
|
|
179
|
+
* Funciona con tres tipos de markup:
|
|
180
|
+
* 1) <table class="ok-table-stack"> nativo:
|
|
181
|
+
* <td data-title="Precio">9,90 €</td>
|
|
182
|
+
* 2) divs (o cualquier elemento):
|
|
183
|
+
* .ok-table-stack > .ok-thead/.ok-trow > .ok-tcell[data-title]
|
|
184
|
+
* 3) Ionic:
|
|
185
|
+
* ion-grid.ok-table-stack > ion-row.ok-trow > ion-col.ok-tcell
|
|
186
|
+
* (los estilos del documento ganan al :host de Ionic, así que el grid
|
|
187
|
+
* propio sustituye al flex de ion-row; ::before sí renderiza en hosts
|
|
188
|
+
* con shadow DOM)
|
|
189
|
+
*
|
|
190
|
+
* Tokens: --ok-table-cols (columnas del markup no-<table>; por defecto
|
|
191
|
+
* partes iguales) · --ok-table-label-w (ancho de la etiqueta en móvil, 45%).
|
|
192
|
+
* Celdas sin data-title (p.ej. acciones) ocupan el ancho completo en móvil.
|
|
193
|
+
*/
|
|
194
|
+
|
|
195
|
+
.ok-table-stack {
|
|
196
|
+
width: 100%;
|
|
197
|
+
box-sizing: border-box;
|
|
198
|
+
font-family: var(--ok-font, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif);
|
|
199
|
+
color: var(--ok-text, var(--ion-text-color, #18181b));
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
table.ok-table-stack {
|
|
203
|
+
border-collapse: collapse;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
/* Markup no-<table>: cabecera y filas como grid de columnas iguales */
|
|
207
|
+
.ok-table-stack > .ok-thead,
|
|
208
|
+
.ok-table-stack > .ok-trow {
|
|
209
|
+
display: grid;
|
|
210
|
+
grid-template-columns: var(--ok-table-cols, repeat(auto-fit, minmax(0, 1fr)));
|
|
211
|
+
align-items: center;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
.ok-table-stack :is(th, td, .ok-tcell) {
|
|
215
|
+
padding: 0.6rem 0.75rem;
|
|
216
|
+
text-align: left;
|
|
217
|
+
min-width: 0;
|
|
218
|
+
box-sizing: border-box;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
.ok-table-stack :is(thead th, .ok-thead .ok-tcell) {
|
|
222
|
+
font-weight: 600;
|
|
223
|
+
font-size: 0.82rem;
|
|
224
|
+
letter-spacing: 0.02em;
|
|
225
|
+
color: var(--ok-muted, rgba(var(--ion-text-color-rgb, 24, 24, 27), 0.62));
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
.ok-table-stack :is(tr, .ok-trow, .ok-thead) {
|
|
229
|
+
border-bottom: 1px solid color-mix(in oklab, var(--ok-text, var(--ion-text-color, #18181b)) 10%, transparent);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
@media (max-width: 767px) {
|
|
233
|
+
/* La tabla nativa deja de comportarse como tabla */
|
|
234
|
+
table.ok-table-stack,
|
|
235
|
+
table.ok-table-stack :is(thead, tbody, tfoot, tr, th, td),
|
|
236
|
+
.ok-table-stack > .ok-trow {
|
|
237
|
+
display: block;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/* Cabecera oculta visualmente, no para lectores de pantalla */
|
|
241
|
+
.ok-table-stack :is(thead, .ok-thead) {
|
|
242
|
+
position: absolute;
|
|
243
|
+
width: 1px;
|
|
244
|
+
height: 1px;
|
|
245
|
+
overflow: hidden;
|
|
246
|
+
clip-path: inset(50%);
|
|
247
|
+
white-space: nowrap;
|
|
248
|
+
border: 0;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/* Fila = card */
|
|
252
|
+
.ok-table-stack :is(tbody tr, .ok-trow) {
|
|
253
|
+
border: 1px solid color-mix(in oklab, var(--ok-text, var(--ion-text-color, #18181b)) 12%, transparent);
|
|
254
|
+
border-radius: 8px;
|
|
255
|
+
margin-bottom: 0.75rem;
|
|
256
|
+
overflow: hidden;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/* Celda = par etiqueta/valor (display/width explícitos: pisan el :host
|
|
260
|
+
flex de ion-col, que si no se queda con su sizing de columna) */
|
|
261
|
+
.ok-table-stack :is(td, .ok-tcell) {
|
|
262
|
+
display: block;
|
|
263
|
+
width: 100%;
|
|
264
|
+
max-width: 100%;
|
|
265
|
+
position: relative;
|
|
266
|
+
border: none;
|
|
267
|
+
border-bottom: 1px solid color-mix(in oklab, var(--ok-text, var(--ion-text-color, #18181b)) 7%, transparent);
|
|
268
|
+
padding: 0.55rem 0.75rem;
|
|
269
|
+
padding-inline-start: calc(var(--ok-table-label-w, 45%) + 0.75rem);
|
|
270
|
+
white-space: normal;
|
|
271
|
+
text-align: left;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
.ok-table-stack :is(td, .ok-tcell):last-child {
|
|
275
|
+
border-bottom: none;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
.ok-table-stack :is(td, .ok-tcell)::before {
|
|
279
|
+
content: attr(data-title);
|
|
280
|
+
position: absolute;
|
|
281
|
+
top: 0.55rem;
|
|
282
|
+
inset-inline-start: 0.75rem;
|
|
283
|
+
width: calc(var(--ok-table-label-w, 45%) - 1rem);
|
|
284
|
+
overflow: hidden;
|
|
285
|
+
white-space: nowrap;
|
|
286
|
+
text-overflow: ellipsis;
|
|
287
|
+
font-weight: 600;
|
|
288
|
+
font-size: 0.82rem;
|
|
289
|
+
color: var(--ok-muted, rgba(var(--ion-text-color-rgb, 24, 24, 27), 0.62));
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
/* Celdas sin etiqueta (acciones, etc.): ancho completo, sin ::before */
|
|
293
|
+
.ok-table-stack :is(td, .ok-tcell):not([data-title]),
|
|
294
|
+
.ok-table-stack :is(td, .ok-tcell)[data-title=''] {
|
|
295
|
+
padding-inline-start: 0.75rem;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
/* ===== Masonry (columnas CSS, sin JS) — hueco de Ionic ===== */
|
|
300
|
+
/* Layout de columnas tipo Pinterest: los items fluyen por columnas con
|
|
301
|
+
* break-inside:avoid. Variantes 2..5 columnas; colapsa a 2 (768px) y 1 (480px).
|
|
302
|
+
* Para galerías de cards de altura desigual. (Antiguo ux-masonry.) */
|
|
303
|
+
.ok-masonry {
|
|
304
|
+
--_cols: 3;
|
|
305
|
+
column-count: var(--_cols);
|
|
306
|
+
column-gap: var(--ok-grid-gap, 1rem);
|
|
307
|
+
}
|
|
308
|
+
.ok-masonry-2 { --_cols: 2; }
|
|
309
|
+
.ok-masonry-3 { --_cols: 3; }
|
|
310
|
+
.ok-masonry-4 { --_cols: 4; }
|
|
311
|
+
.ok-masonry-5 { --_cols: 5; }
|
|
312
|
+
.ok-masonry > * {
|
|
313
|
+
break-inside: avoid;
|
|
314
|
+
margin-bottom: var(--ok-grid-gap, 1rem);
|
|
315
|
+
}
|
|
316
|
+
@media (max-width: 768px) {
|
|
317
|
+
.ok-masonry { column-count: 2; }
|
|
318
|
+
}
|
|
319
|
+
@media (max-width: 480px) {
|
|
320
|
+
.ok-masonry { column-count: 1; }
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
/* ===== Form actions (barra de acciones de pie de formulario/modal) — hueco de Ionic ===== */
|
|
324
|
+
/* Pie estandarizado de formularios: borde superior, gap y alineación de botones.
|
|
325
|
+
* Más barato como utilidad CSS que como web component. (Antiguo ux-form-actions.)
|
|
326
|
+
* Uso: <div class="ok-form-actions ok-form-actions-end"><ion-button…/></div> */
|
|
327
|
+
.ok-form-actions {
|
|
328
|
+
display: flex;
|
|
329
|
+
flex-wrap: wrap;
|
|
330
|
+
align-items: center;
|
|
331
|
+
gap: 0.5rem;
|
|
332
|
+
padding-top: 1rem;
|
|
333
|
+
margin-top: 1rem;
|
|
334
|
+
border-top: 1px solid var(--ok-border-color, var(--ion-border-color, rgba(0, 0, 0, 0.1)));
|
|
335
|
+
}
|
|
336
|
+
.ok-form-actions-end { justify-content: flex-end; }
|
|
337
|
+
.ok-form-actions-start { justify-content: flex-start; }
|
|
338
|
+
.ok-form-actions-between { justify-content: space-between; }
|