@erplora/outfitkit 0.1.19 → 0.1.21

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 (90) hide show
  1. package/README.md +5 -6
  2. package/dist/cdn.d.ts +0 -5
  3. package/dist/index.d.ts +2 -9
  4. package/dist/index.js +8 -11
  5. package/dist/ok-data-table.js +1 -1
  6. package/dist/ok-file-manager.js +1 -1
  7. package/dist/ok-lightbox.js +1 -1
  8. package/dist/outfitkit.bundle.js +3634 -5572
  9. package/dist/outfitkit.js +0 -5
  10. package/dist/shared/icons.js +3 -3
  11. package/dist/showcase/auth-login-saas-parity.test.d.ts +1 -0
  12. package/dist/showcase/component-catalog-completeness.test.d.ts +1 -0
  13. package/dist/showcase/current-page-contract.test.d.ts +1 -0
  14. package/dist/showcase/hub-access-dashboard-parity.test.d.ts +1 -0
  15. package/dist/showcase/hub-apps-billing-pages-parity.test.d.ts +1 -0
  16. package/dist/showcase/hub-employee-forms-parity.test.d.ts +1 -0
  17. package/dist/showcase/hub-shell-parity.test.d.ts +1 -0
  18. package/dist/showcase/hub-system-settings-shell-parity.test.d.ts +1 -0
  19. package/dist/showcase/hub-table-pages-parity.test.d.ts +1 -0
  20. package/dist/showcase/ionic-boundary.test.d.ts +1 -0
  21. package/dist/showcase/ionic-ios-default.test.d.ts +1 -0
  22. package/dist/showcase/module-appointments-parity.test.d.ts +1 -0
  23. package/dist/showcase/module-backup-pages-parity.test.d.ts +1 -0
  24. package/dist/showcase/module-cart-checkout-pages-parity.test.d.ts +1 -0
  25. package/dist/showcase/module-cash-register-parity.test.d.ts +1 -0
  26. package/dist/showcase/module-customers-fields-parity.test.d.ts +1 -0
  27. package/dist/showcase/module-customers-groups-parity.test.d.ts +1 -0
  28. package/dist/showcase/module-customers-list-parity.test.d.ts +1 -0
  29. package/dist/showcase/module-customers-tags-parity.test.d.ts +1 -0
  30. package/dist/showcase/module-inventory-categories-parity.test.d.ts +1 -0
  31. package/dist/showcase/module-inventory-dashboard-parity.test.d.ts +1 -0
  32. package/dist/showcase/module-inventory-products-parity.test.d.ts +1 -0
  33. package/dist/showcase/module-invoice-list-parity.test.d.ts +1 -0
  34. package/dist/showcase/module-invoice-series-list-parity.test.d.ts +1 -0
  35. package/dist/showcase/module-invoice-settings-parity.test.d.ts +1 -0
  36. package/dist/showcase/module-kitchen-pages-parity.test.d.ts +1 -0
  37. package/dist/showcase/module-online-booking-pages-parity.test.d.ts +1 -0
  38. package/dist/showcase/module-pages-data.test.d.ts +1 -0
  39. package/dist/showcase/module-payment-gateways-parity.test.d.ts +1 -0
  40. package/dist/showcase/module-payments-list-parity.test.d.ts +1 -0
  41. package/dist/showcase/module-pricing-lists-parity.test.d.ts +1 -0
  42. package/dist/showcase/module-printing-pages-parity.test.d.ts +1 -0
  43. package/dist/showcase/module-reservations-availability-parity.test.d.ts +1 -0
  44. package/dist/showcase/module-reservations-list-parity.test.d.ts +1 -0
  45. package/dist/showcase/module-reservations-waitlist-parity.test.d.ts +1 -0
  46. package/dist/showcase/module-sales-list-parity.test.d.ts +1 -0
  47. package/dist/showcase/module-sales-pos-parity.test.d.ts +1 -0
  48. package/dist/showcase/module-schedules-hours-parity.test.d.ts +1 -0
  49. package/dist/showcase/module-services-parity.test.d.ts +1 -0
  50. package/dist/showcase/module-staff-members-parity.test.d.ts +1 -0
  51. package/dist/showcase/module-staff-roles-parity.test.d.ts +1 -0
  52. package/dist/showcase/module-staff-schedules-parity.test.d.ts +1 -0
  53. package/dist/showcase/module-staff-time-off-parity.test.d.ts +1 -0
  54. package/dist/showcase/module-tables-pages-parity.test.d.ts +1 -0
  55. package/dist/showcase/module-tasks-list-parity.test.d.ts +1 -0
  56. package/dist/showcase/module-tasks-projects-parity.test.d.ts +1 -0
  57. package/dist/showcase/module-taxes-pages-parity.test.d.ts +1 -0
  58. package/dist/showcase/module-tickets-list-parity.test.d.ts +1 -0
  59. package/dist/showcase/module-tickets-sla-parity.test.d.ts +1 -0
  60. package/dist/showcase/module-verifactu-pages-parity.test.d.ts +1 -0
  61. package/dist/showcase/module-whatsapp-inbox-pages-parity.test.d.ts +1 -0
  62. package/dist/showcase/page-catalog.test.d.ts +1 -0
  63. package/dist/showcase/page-navigation.test.d.ts +1 -0
  64. package/dist/showcase/saas-account-help-pages-parity.test.d.ts +1 -0
  65. package/dist/showcase/saas-auth-account-pages-parity.test.d.ts +1 -0
  66. package/dist/showcase/saas-billing-table-pages-parity.test.d.ts +1 -0
  67. package/dist/showcase/saas-dashboard-shell-parity.test.d.ts +1 -0
  68. package/dist/showcase/saas-developer-pages-parity.test.d.ts +1 -0
  69. package/dist/showcase/saas-developer-table-pages-parity.test.d.ts +1 -0
  70. package/dist/showcase/saas-hub-detail-pages-parity.test.d.ts +1 -0
  71. package/dist/showcase/saas-hubs-table-pages-parity.test.d.ts +1 -0
  72. package/dist/showcase/saas-operations-marketplace-pages-parity.test.d.ts +1 -0
  73. package/dist/showcase/saas-organizations-page-parity.test.d.ts +1 -0
  74. package/dist/showcase/saas-organizations-users-detail-pages-parity.test.d.ts +1 -0
  75. package/dist/showcase/saas-public-error-pages-parity.test.d.ts +1 -0
  76. package/dist/tabbar/tabbar.d.ts +69 -0
  77. package/dist/tabbar/tabbar.test.d.ts +1 -0
  78. package/dist/tabbar.css +72 -0
  79. package/dist/tabbar.js +76 -0
  80. package/package.json +7 -6
  81. package/dist/components/ok-date-picker/ok-date-picker.d.ts +0 -81
  82. package/dist/components/ok-drawer/ok-drawer.d.ts +0 -56
  83. package/dist/components/ok-range-dual/ok-range-dual.d.ts +0 -38
  84. package/dist/components/ok-skeleton/ok-skeleton.d.ts +0 -40
  85. package/dist/components/ok-time-picker/ok-time-picker.d.ts +0 -50
  86. package/dist/ok-date-picker.js +0 -737
  87. package/dist/ok-drawer.js +0 -358
  88. package/dist/ok-range-dual.js +0 -280
  89. package/dist/ok-skeleton.js +0 -345
  90. package/dist/ok-time-picker.js +0 -472
package/dist/outfitkit.js CHANGED
@@ -42,7 +42,6 @@ import "./ok-spotlight-search.js";
42
42
  import "./ok-color-picker.js";
43
43
  import "./ok-avatar.js";
44
44
  import "./ok-status-pill.js";
45
- import "./ok-drawer.js";
46
45
  import "./ok-page-header.js";
47
46
  import "./ok-bento.js";
48
47
  import "./ok-bento-item.js";
@@ -58,7 +57,6 @@ import "./ok-navbar.js";
58
57
  import "./ok-footer.js";
59
58
  import "./ok-hero.js";
60
59
  import "./ok-pagination.js";
61
- import "./ok-skeleton.js";
62
60
  import "./ok-gauge.js";
63
61
  import "./ok-chart.js";
64
62
  import "./ok-donut.js";
@@ -76,9 +74,6 @@ import "./ok-coachmark.js";
76
74
  import "./ok-select-card.js";
77
75
  import "./ok-theme-picker.js";
78
76
  import "./ok-error-page.js";
79
- import "./ok-date-picker.js";
80
- import "./ok-time-picker.js";
81
- import "./ok-range-dual.js";
82
77
  import "./ok-file-item.js";
83
78
  import "./ok-rich-text.js";
84
79
  import "./ok-code.js";
@@ -158,9 +158,9 @@ export {
158
158
  iconAdd as K,
159
159
  iconSearchOutline as L,
160
160
  iconNotificationsOffOutline as M,
161
- iconCalendarOutline as N,
162
- iconPlayOutline as O,
163
- iconFolderOpenOutline as P,
161
+ iconPlayOutline as N,
162
+ iconFolderOpenOutline as O,
163
+ iconCalendarOutline as P,
164
164
  iconChevronForward as Q,
165
165
  iconFileTrayOutline as R,
166
166
  iconSwapVerticalOutline as S,
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Tabbar de footer — comportamiento compartido Cloud↔Hub para un `ion-segment` usado como barra de
3
+ * NAVEGACIÓN (no como el pill de filtro de iOS).
4
+ *
5
+ * Por qué está aquí y no en cada producto: el Hub y el SaaS habían resuelto POR SEPARADO el mismo
6
+ * problema, con reglas que ya divergían. Y es un hueco real de Ionic, no un wrapper: `ion-segment`
7
+ * no trae `scrollIntoView` a la pestaña activa, y su prop `scrollable` sólo cambia layout y gestos.
8
+ * Si desborda y por dónde va el scroll es justo lo que CSS no puede saber solo, así que se publica
9
+ * en `data-overflow` y el degradado lo pinta `tabbar.css`.
10
+ *
11
+ * Uso: una sola llamada, y guardar el cleanup.
12
+ *
13
+ * const cleanup = bindTabbar(document.querySelector('ion-footer ion-segment'));
14
+ * // al desmontar la vista → cleanup();
15
+ */
16
+ /** Qué bordes del tabbar esconden pestañas. `none` = caben todas. */
17
+ export type TabbarOverflow = 'none' | 'start' | 'end' | 'both';
18
+ /**
19
+ * Calcula qué bordes esconden pestañas, para pintar el degradado SOLO donde hay más.
20
+ *
21
+ * Un degradado fijo a la derecha seguiría oscureciendo la última pestaña cuando ya has llegado al
22
+ * final: se lee como un fallo de pintado, no como "hay más". Por eso son cuatro estados.
23
+ */
24
+ export declare function tabbarOverflow(segment: HTMLElement | null): TabbarOverflow;
25
+ /** Publica el estado en `data-overflow` para que el degradado lo pinte desde CSS. */
26
+ export declare function syncTabbarOverflow(segment: HTMLElement | null): void;
27
+ /**
28
+ * Trae a la vista la pestaña activa.
29
+ *
30
+ * Hace falta cuando la pestaña activa la fija la RUTA y no un toque (deep-link, back/forward): al
31
+ * montar, la barra arranca en `scrollLeft: 0` y la activa puede quedar fuera de pantalla, así que el
32
+ * usuario no ve en cuál está. Se mueve `scrollLeft` y no `scrollIntoView` para no arrastrar a los
33
+ * ancestros scrolleables ni pelearse con el scroll de la página.
34
+ */
35
+ export declare function scrollActiveTabIntoView(segment: HTMLElement | null): void;
36
+ /**
37
+ * ¿Merece la pena la pista de scroll al entrar?
38
+ *
39
+ * El degradado dice que hay más; el movimiento enseña el GESTO. Pero es movimiento que el usuario
40
+ * no ha pedido, así que sólo se da cuando aporta: si caben todas no hay nada que descubrir; si ya
41
+ * estás al final a la derecha no queda nada; con `prefers-reduced-motion` no se anima; y si la barra
42
+ * ya se movió sola para revelar la activa, repetirlo sería un tirón raro.
43
+ */
44
+ export declare function shouldHintScroll(opts: {
45
+ overflow: TabbarOverflow;
46
+ reducedMotion: boolean;
47
+ yaScrolleado: boolean;
48
+ }): boolean;
49
+ /**
50
+ * Asoma la barra unos píxeles y la devuelve: enseña que se puede deslizar.
51
+ *
52
+ * Mueve el scroll REAL (no un `transform`) para que el degradado se recalcule solo con el evento
53
+ * `scroll` — al asomarse aparece el degradado izquierdo, lo que refuerza la pista.
54
+ */
55
+ export declare function hintScroll(segment: HTMLElement | null): void;
56
+ /**
57
+ * Cablea un tabbar y devuelve su cleanup. Es la única llamada que necesita el consumidor.
58
+ *
59
+ * Observa tres cosas distintas porque son tres causas distintas de cambio:
60
+ * - `scroll` → el usuario desliza;
61
+ * - `ResizeObserver` → cambia el ancho disponible (rotar el móvil, plegar el menú);
62
+ * - `MutationObserver` → cambia el NÚMERO de pestañas sin cambiar el ancho (un shell que las carga
63
+ * async desde un manifest), caso en el que el ResizeObserver no se entera.
64
+ *
65
+ * `hint: false` desactiva la pista de movimiento (el degradado se mantiene).
66
+ */
67
+ export declare function bindTabbar(segment: HTMLElement | null, opts?: {
68
+ hint?: boolean;
69
+ }): () => void;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,72 @@
1
+ /* OutfitKit — tabbar.css
2
+ *
3
+ * Un `ion-segment` usado como barra de NAVEGACIÓN de footer (no como el pill de filtro de iOS).
4
+ * Complementa a Ionic en un hueco real, no lo envuelve: Ionic no tiene ninguna estrategia para un
5
+ * tabbar con más pestañas de las que caben, y su geometría cambia según el modo.
6
+ *
7
+ * La clase `.ok-tabbar` la pone `bindTabbar()` (`@erplora/outfitkit/tabbar`), no el consumidor:
8
+ * así el CSS y el comportamiento no pueden desincronizarse. Ese mismo JS mantiene `data-overflow`,
9
+ * que es lo único que CSS no puede calcular solo (si desborda y por dónde va el scroll).
10
+ *
11
+ * Tokens:
12
+ * --ok-tabbar-min ancho mínimo de pestaña antes de scrollear (default 88px)
13
+ * --ok-tabbar-fade anchura del degradado de borde (default 36px)
14
+ *
15
+ * Export del paquete: `@erplora/outfitkit/tabbar.css`. Cargar después del tema.
16
+ */
17
+
18
+ .ok-tabbar {
19
+ /* En modo `ios` Ionic trata el segment como el segmented control compacto y le pone
20
+ `:host(.in-toolbar){ width:auto; margin-inline:auto }`, así que el host se encoge a su
21
+ contenido (medido: 289px dentro de una toolbar de 1560px) sin importar cómo dimensiones las
22
+ columnas. Esto es lo que lo arregla; el `grid-auto-columns` por sí solo NO basta. */
23
+ width: 100%;
24
+ margin-inline: 0;
25
+ box-sizing: border-box;
26
+
27
+ /* Con pocas pestañas manda el `1fr` y llenan el ancho; con muchas manda el mínimo y NO se
28
+ aplastan. El default de 88px sale de MEDIR el umbral en que se trunca el label más largo del
29
+ Hub (86px) más 2px de margen por si el render de la fuente es algo más ancho. Cada producto
30
+ puede ajustarlo con `--ok-tabbar-min`: preferimos scroll antes que labels cortados. */
31
+ grid-auto-columns: minmax(var(--ok-tabbar-min, 88px), 1fr);
32
+ justify-content: start;
33
+
34
+ overflow-x: auto;
35
+ scrollbar-width: none;
36
+ }
37
+
38
+ .ok-tabbar::-webkit-scrollbar {
39
+ display: none;
40
+ }
41
+
42
+ /* Degradado de borde. Al esconder la barra de scroll hay que señalar de otro modo que quedan
43
+ pestañas fuera: sin esto el único indicio es una pestaña cortada a medias, que se lee como un
44
+ fallo de maquetación y no como una invitación a deslizar.
45
+ Va SOLO en el lado que esconde algo — uno fijo a la derecha seguiría oscureciendo la última
46
+ pestaña al llegar al final, que es justo el efecto de "roto" que se quiere evitar. */
47
+ .ok-tabbar[data-overflow='end'] {
48
+ -webkit-mask-image: linear-gradient(to right, #000 calc(100% - var(--ok-tabbar-fade, 36px)), transparent 100%);
49
+ mask-image: linear-gradient(to right, #000 calc(100% - var(--ok-tabbar-fade, 36px)), transparent 100%);
50
+ }
51
+
52
+ .ok-tabbar[data-overflow='start'] {
53
+ -webkit-mask-image: linear-gradient(to left, #000 calc(100% - var(--ok-tabbar-fade, 36px)), transparent 100%);
54
+ mask-image: linear-gradient(to left, #000 calc(100% - var(--ok-tabbar-fade, 36px)), transparent 100%);
55
+ }
56
+
57
+ .ok-tabbar[data-overflow='both'] {
58
+ -webkit-mask-image: linear-gradient(
59
+ to right,
60
+ transparent 0,
61
+ #000 var(--ok-tabbar-fade, 36px),
62
+ #000 calc(100% - var(--ok-tabbar-fade, 36px)),
63
+ transparent 100%
64
+ );
65
+ mask-image: linear-gradient(
66
+ to right,
67
+ transparent 0,
68
+ #000 var(--ok-tabbar-fade, 36px),
69
+ #000 calc(100% - var(--ok-tabbar-fade, 36px)),
70
+ transparent 100%
71
+ );
72
+ }
package/dist/tabbar.js ADDED
@@ -0,0 +1,76 @@
1
+ const EPSILON = 1;
2
+ const HINT_PX = 28;
3
+ const HINT_VUELTA_MS = 420;
4
+ const CLASE = "ok-tabbar";
5
+ function tabbarOverflow(segment) {
6
+ if (!segment) return "none";
7
+ const maximo = segment.scrollWidth - segment.clientWidth;
8
+ if (maximo <= EPSILON) return "none";
9
+ const hayAntes = segment.scrollLeft > EPSILON;
10
+ const hayDespues = segment.scrollLeft < maximo - EPSILON;
11
+ if (hayAntes && hayDespues) return "both";
12
+ if (hayAntes) return "start";
13
+ return "end";
14
+ }
15
+ function syncTabbarOverflow(segment) {
16
+ if (!segment) return;
17
+ segment.dataset.overflow = tabbarOverflow(segment);
18
+ }
19
+ function scrollActiveTabIntoView(segment) {
20
+ if (!segment) return;
21
+ const activa = segment.querySelector(".segment-button-checked");
22
+ if (!activa) return;
23
+ if (segment.scrollWidth <= segment.clientWidth) return;
24
+ const inicio = activa.offsetLeft;
25
+ const fin = inicio + activa.offsetWidth;
26
+ const visibleInicio = segment.scrollLeft;
27
+ const visibleFin = visibleInicio + segment.clientWidth;
28
+ if (inicio < visibleInicio) segment.scrollLeft = inicio;
29
+ else if (fin > visibleFin) segment.scrollLeft = fin - segment.clientWidth;
30
+ }
31
+ function shouldHintScroll(opts) {
32
+ if (opts.reducedMotion) return false;
33
+ if (opts.yaScrolleado) return false;
34
+ return opts.overflow === "end" || opts.overflow === "both";
35
+ }
36
+ function hintScroll(segment) {
37
+ if (!segment) return;
38
+ segment.scrollTo({ left: HINT_PX, behavior: "smooth" });
39
+ setTimeout(() => segment.scrollTo({ left: 0, behavior: "smooth" }), HINT_VUELTA_MS);
40
+ }
41
+ function bindTabbar(segment, opts = {}) {
42
+ if (!segment) return () => {
43
+ };
44
+ segment.classList.add(CLASE);
45
+ const sync = () => syncTabbarOverflow(segment);
46
+ sync();
47
+ segment.addEventListener("scroll", sync, { passive: true });
48
+ const ro = typeof ResizeObserver !== "undefined" ? new ResizeObserver(sync) : null;
49
+ ro?.observe(segment);
50
+ const mo = typeof MutationObserver !== "undefined" ? new MutationObserver(sync) : null;
51
+ mo?.observe(segment, { childList: true });
52
+ let pista = null;
53
+ if (opts.hint !== false) {
54
+ pista = setTimeout(() => {
55
+ pista = null;
56
+ const reducedMotion = typeof matchMedia !== "undefined" && matchMedia("(prefers-reduced-motion: reduce)").matches;
57
+ if (shouldHintScroll({ overflow: tabbarOverflow(segment), reducedMotion, yaScrolleado: segment.scrollLeft > 1 })) {
58
+ hintScroll(segment);
59
+ }
60
+ }, 450);
61
+ }
62
+ return () => {
63
+ segment.removeEventListener("scroll", sync);
64
+ ro?.disconnect();
65
+ mo?.disconnect();
66
+ if (pista) clearTimeout(pista);
67
+ };
68
+ }
69
+ export {
70
+ bindTabbar,
71
+ hintScroll,
72
+ scrollActiveTabIntoView,
73
+ shouldHintScroll,
74
+ syncTabbarOverflow,
75
+ tabbarOverflow
76
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@erplora/outfitkit",
3
- "version": "0.1.19",
3
+ "version": "0.1.21",
4
4
  "description": "OutfitKit — librería de Web Components (Lit) que CONSTRUYE lo que Ionic no tiene (tree, data-table rica, inline-feedback, kpi/stat, stepper/wizard, calendar, kanban…) sobre primitivos de Ionic. Ionic es la base; OutfitKit cubre los huecos. npm + CDN, imports individuales, CSP-safe. Tema vía tokens --ok-* (fallback a --ion-*).",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -27,6 +27,10 @@
27
27
  "types": "./dist/store/controller.d.ts",
28
28
  "import": "./dist/store-controller.js"
29
29
  },
30
+ "./tabbar": {
31
+ "types": "./dist/tabbar/tabbar.d.ts",
32
+ "import": "./dist/tabbar.js"
33
+ },
30
34
  "./ok-store": "./dist/ok-store.js",
31
35
  "./ok-data-table": "./dist/ok-data-table.js",
32
36
  "./ok-mail": "./dist/ok-mail.js",
@@ -70,7 +74,6 @@
70
74
  "./ok-color-picker": "./dist/ok-color-picker.js",
71
75
  "./ok-avatar": "./dist/ok-avatar.js",
72
76
  "./ok-status-pill": "./dist/ok-status-pill.js",
73
- "./ok-drawer": "./dist/ok-drawer.js",
74
77
  "./ok-page-header": "./dist/ok-page-header.js",
75
78
  "./ok-bento": "./dist/ok-bento.js",
76
79
  "./ok-bento-item": "./dist/ok-bento-item.js",
@@ -86,7 +89,6 @@
86
89
  "./ok-footer": "./dist/ok-footer.js",
87
90
  "./ok-hero": "./dist/ok-hero.js",
88
91
  "./ok-pagination": "./dist/ok-pagination.js",
89
- "./ok-skeleton": "./dist/ok-skeleton.js",
90
92
  "./ok-gauge": "./dist/ok-gauge.js",
91
93
  "./ok-chart": "./dist/ok-chart.js",
92
94
  "./ok-donut": "./dist/ok-donut.js",
@@ -104,9 +106,6 @@
104
106
  "./ok-select-card": "./dist/ok-select-card.js",
105
107
  "./ok-theme-picker": "./dist/ok-theme-picker.js",
106
108
  "./ok-error-page": "./dist/ok-error-page.js",
107
- "./ok-date-picker": "./dist/ok-date-picker.js",
108
- "./ok-time-picker": "./dist/ok-time-picker.js",
109
- "./ok-range-dual": "./dist/ok-range-dual.js",
110
109
  "./ok-file-item": "./dist/ok-file-item.js",
111
110
  "./ok-rich-text": "./dist/ok-rich-text.js",
112
111
  "./ok-code": "./dist/ok-code.js",
@@ -128,6 +127,7 @@
128
127
  "./erplora.css": "./dist/erplora.css",
129
128
  "./palettes.css": "./dist/palettes.css",
130
129
  "./layout.css": "./dist/layout.css",
130
+ "./tabbar.css": "./dist/tabbar.css",
131
131
  "./cdn": "./dist/outfitkit.js",
132
132
  "./bundle": "./dist/outfitkit.bundle.js"
133
133
  },
@@ -140,6 +140,7 @@
140
140
  "scripts": {
141
141
  "build": "vite build && vite build --config vite.config.cdn.ts && tsc -p tsconfig.build.json --emitDeclarationOnly",
142
142
  "dev": "vite build --watch",
143
+ "generate:module-pages": "node scripts/generate-module-pages.mjs",
143
144
  "typecheck": "tsc --noEmit",
144
145
  "test": "vitest run",
145
146
  "verify:csp": "node scripts/assert-csp-safe.mjs dist",
@@ -1,81 +0,0 @@
1
- import { LitElement } from 'lit';
2
- export type OkDatePickerMode = 'single' | 'range';
3
- export interface OkDateRange {
4
- start: string | null;
5
- end: string | null;
6
- }
7
- export type OkDatePickerValue = string | OkDateRange | null;
8
- export interface OkDatePreset {
9
- /** Clave estable del preset. */
10
- id: string;
11
- /** Texto visible en el chip. */
12
- label: string;
13
- }
14
- export interface OkDatePickerLabels {
15
- /** aria-label del botón anterior. */
16
- prev: string;
17
- /** aria-label del botón siguiente. */
18
- next: string;
19
- /** aria-label del botón disparador cuando no hay valor. */
20
- open: string;
21
- }
22
- export declare class OkDatePicker extends LitElement {
23
- static styles: import("lit").CSSResult;
24
- /** Modo: una fecha ('single') o un rango ('range'). */
25
- mode: OkDatePickerMode;
26
- /** Valor actual: ISO `YYYY-MM-DD` (single) o {start,end} (range). */
27
- value: OkDatePickerValue;
28
- /** Fecha mínima seleccionable (ISO `YYYY-MM-DD`). */
29
- min?: string;
30
- /** Fecha máxima seleccionable (ISO `YYYY-MM-DD`). */
31
- max?: string;
32
- /** Chips de preset; pasa `[]` para ocultar la fila. */
33
- presets: OkDatePreset[];
34
- /** Locale para el nombre del mes (Intl). Default = es-ES. */
35
- locale: string;
36
- /** Texto del campo cuando no hay valor. */
37
- placeholder: string;
38
- /** Número de meses visibles en el popover (1 o 2). */
39
- months: 1 | 2;
40
- /** Textos traducibles (merge sobre los defaults en español). */
41
- labels: Partial<OkDatePickerLabels>;
42
- private open;
43
- private side;
44
- private viewDate;
45
- private hoverDate;
46
- private get t();
47
- private readonly onDocPointer;
48
- private readonly onKeydown;
49
- disconnectedCallback(): void;
50
- private get fieldEl();
51
- willUpdate(changed: Map<string, unknown>): void;
52
- private bind;
53
- private unbind;
54
- private toggle;
55
- private openPopover;
56
- private close;
57
- private get rangeValue();
58
- private get singleValue();
59
- private anchorDateFromValue;
60
- private get minDate();
61
- private get maxDate();
62
- private isDisabled;
63
- private selectDay;
64
- private emit;
65
- private prevMonth;
66
- private nextMonth;
67
- private applyPreset;
68
- private isPresetActive;
69
- private presetValue;
70
- private fieldLabel;
71
- render(): unknown;
72
- private renderMonth;
73
- private renderDay;
74
- private onDayHover;
75
- private dayRangeFlags;
76
- }
77
- declare global {
78
- interface HTMLElementTagNameMap {
79
- 'ok-date-picker': OkDatePicker;
80
- }
81
- }