@erplora/outfitkit 0.1.6 → 0.1.8

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.
@@ -170,12 +170,15 @@ class OkDataTable extends LitElement {
170
170
 
171
171
  /* ── Topbar / cabecera (relieve) ─────────────────────────────────────────────────────── */
172
172
  .bar { display: flex; flex-direction: column; gap: 0.6rem; padding: 0.65rem 1rem; border-bottom: 1px solid var(--border-color); background: var(--header-background); }
173
- /* Toolbar CONSOLIDADA: TODOS los controles (buscador, filtros, page-size, vistas, columnas,
174
- * CSV, ⋮, alta) son hijos directos de UNA sola fila flex que envuelve ELEMENTO A ELEMENTO
175
- * (no por bloques): caben en una línea una línea; los que no caben bajan a la(s) línea(s)
176
- * que hagan falta. El cluster derecho se empuja al borde con .tk-spacer (hueco flexible)
177
- * solo cuando todo cabe en una línea; al envolver, el spacer se oculta y todo se apila a la
178
- * izquierda. */
173
+ /* Toolbar CONSOLIDADA: TODOS los controles son hijos directos de UNA sola fila flex que
174
+ * envuelve ELEMENTO A ELEMENTO (no por bloques): caben en una línea una línea; los que no
175
+ * caben bajan a la(s) línea(s) que hagan falta. El cluster derecho se empuja al borde con
176
+ * .tk-spacer (hueco flexible) solo cuando todo cabe en una línea; al envolver, el spacer se
177
+ * oculta y todo se apila a la izquierda.
178
+ * ORDEN CANÓNICO (2026-06-22, izquierda→derecha): [buscador] · [filtros en línea] · ‹spacer› ·
179
+ * [SELECTORES: columnas → filas/página] · [BOTONES: vistas → filtros(funnel) → import → export →
180
+ * alta → ⋮ → acción primaria]. Es decir: buscador al inicio, filtros en medio, y al final los
181
+ * selectores (columnas, luego «N por página») seguidos de los botones de acción. */
179
182
  .bar-main { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem; }
180
183
  .bar-main > ion-button { --padding-start: 0.5rem; --padding-end: 0.5rem; margin: 0; }
181
184
  /* Spacer que absorbe el hueco libre en pantallas anchas (empuja el cluster derecho al borde).
@@ -886,6 +889,19 @@ class OkDataTable extends LitElement {
886
889
  ${this.hasSearch ? html`<div class="search">${searchbar}</div>` : nothing}
887
890
  ${this.inlineFilters ? this.renderInlineFilters() : nothing}
888
891
  <span class="tk-spacer"></span>
892
+ ${this.effColumnPicker ? html`
893
+ <ion-select
894
+ class="tk-cols"
895
+ multiple
896
+ interface="popover"
897
+ aria-label=${this.t.columnsVisible}
898
+ .value=${this.visibleColumns.map((c) => c.key)}
899
+ .selectedText=${this.t.columns}
900
+ @ionChange=${(e) => this.setVisibleColumns(e.detail.value)}
901
+ >
902
+ ${this.columns.map((c) => html`<ion-select-option value=${c.key}>${c.header}</ion-select-option>`)}
903
+ </ion-select>
904
+ ` : nothing}
889
905
  ${this.effPageSizes.length ? html`
890
906
  <ion-select
891
907
  class="tk-psize"
@@ -903,19 +919,6 @@ class OkDataTable extends LitElement {
903
919
  ${this.toolButton("grid-outline", this.viewMode === "cards", () => this.setViewMode("cards"), this.t.viewCards)}
904
920
  </span>
905
921
  ` : nothing}
906
- ${this.effColumnPicker ? html`
907
- <ion-select
908
- class="tk-cols"
909
- multiple
910
- interface="popover"
911
- aria-label=${this.t.columnsVisible}
912
- .value=${this.visibleColumns.map((c) => c.key)}
913
- .selectedText=${this.t.columns}
914
- @ionChange=${(e) => this.setVisibleColumns(e.detail.value)}
915
- >
916
- ${this.columns.map((c) => html`<ion-select-option value=${c.key}>${c.header}</ion-select-option>`)}
917
- </ion-select>
918
- ` : nothing}
919
922
  ${this.hasFilterRow && !this.inlineFilters ? this.toolButton("funnel-outline", this.panel === "filters" || this.activeFilterCount > 0, () => this.toggle("filters"), this.t.filters, this.serverSide ? void 0 : this.activeFilterCount) : nothing}
920
923
  ${this.effImport ? html`
921
924
  ${this.toolButton("cloud-upload-outline", false, () => this.renderRoot.querySelector(".tk-file")?.click(), this.t.importCsv)}
@@ -1095,12 +1095,15 @@ class _ extends g {
1095
1095
 
1096
1096
  /* ── Topbar / cabecera (relieve) ─────────────────────────────────────────────────────── */
1097
1097
  .bar { display: flex; flex-direction: column; gap: 0.6rem; padding: 0.65rem 1rem; border-bottom: 1px solid var(--border-color); background: var(--header-background); }
1098
- /* Toolbar CONSOLIDADA: TODOS los controles (buscador, filtros, page-size, vistas, columnas,
1099
- * CSV, ⋮, alta) son hijos directos de UNA sola fila flex que envuelve ELEMENTO A ELEMENTO
1100
- * (no por bloques): caben en una línea una línea; los que no caben bajan a la(s) línea(s)
1101
- * que hagan falta. El cluster derecho se empuja al borde con .tk-spacer (hueco flexible)
1102
- * solo cuando todo cabe en una línea; al envolver, el spacer se oculta y todo se apila a la
1103
- * izquierda. */
1098
+ /* Toolbar CONSOLIDADA: TODOS los controles son hijos directos de UNA sola fila flex que
1099
+ * envuelve ELEMENTO A ELEMENTO (no por bloques): caben en una línea una línea; los que no
1100
+ * caben bajan a la(s) línea(s) que hagan falta. El cluster derecho se empuja al borde con
1101
+ * .tk-spacer (hueco flexible) solo cuando todo cabe en una línea; al envolver, el spacer se
1102
+ * oculta y todo se apila a la izquierda.
1103
+ * ORDEN CANÓNICO (2026-06-22, izquierda→derecha): [buscador] · [filtros en línea] · ‹spacer› ·
1104
+ * [SELECTORES: columnas → filas/página] · [BOTONES: vistas → filtros(funnel) → import → export →
1105
+ * alta → ⋮ → acción primaria]. Es decir: buscador al inicio, filtros en medio, y al final los
1106
+ * selectores (columnas, luego «N por página») seguidos de los botones de acción. */
1104
1107
  .bar-main { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem; }
1105
1108
  .bar-main > ion-button { --padding-start: 0.5rem; --padding-end: 0.5rem; margin: 0; }
1106
1109
  /* Spacer que absorbe el hueco libre en pantallas anchas (empuja el cluster derecho al borde).
@@ -1686,6 +1689,19 @@ class _ extends g {
1686
1689
  ${this.hasSearch ? s`<div class="search">${d}</div>` : m}
1687
1690
  ${this.inlineFilters ? this.renderInlineFilters() : m}
1688
1691
  <span class="tk-spacer"></span>
1692
+ ${this.effColumnPicker ? s`
1693
+ <ion-select
1694
+ class="tk-cols"
1695
+ multiple
1696
+ interface="popover"
1697
+ aria-label=${this.t.columnsVisible}
1698
+ .value=${this.visibleColumns.map((p) => p.key)}
1699
+ .selectedText=${this.t.columns}
1700
+ @ionChange=${(p) => this.setVisibleColumns(p.detail.value)}
1701
+ >
1702
+ ${this.columns.map((p) => s`<ion-select-option value=${p.key}>${p.header}</ion-select-option>`)}
1703
+ </ion-select>
1704
+ ` : m}
1689
1705
  ${this.effPageSizes.length ? s`
1690
1706
  <ion-select
1691
1707
  class="tk-psize"
@@ -1703,19 +1719,6 @@ class _ extends g {
1703
1719
  ${this.toolButton("grid-outline", this.viewMode === "cards", () => this.setViewMode("cards"), this.t.viewCards)}
1704
1720
  </span>
1705
1721
  ` : m}
1706
- ${this.effColumnPicker ? s`
1707
- <ion-select
1708
- class="tk-cols"
1709
- multiple
1710
- interface="popover"
1711
- aria-label=${this.t.columnsVisible}
1712
- .value=${this.visibleColumns.map((p) => p.key)}
1713
- .selectedText=${this.t.columns}
1714
- @ionChange=${(p) => this.setVisibleColumns(p.detail.value)}
1715
- >
1716
- ${this.columns.map((p) => s`<ion-select-option value=${p.key}>${p.header}</ion-select-option>`)}
1717
- </ion-select>
1718
- ` : m}
1719
1722
  ${this.hasFilterRow && !this.inlineFilters ? this.toolButton("funnel-outline", this.panel === "filters" || this.activeFilterCount > 0, () => this.toggle("filters"), this.t.filters, this.serverSide ? void 0 : this.activeFilterCount) : m}
1720
1723
  ${this.effImport ? s`
1721
1724
  ${this.toolButton("cloud-upload-outline", !1, () => this.renderRoot.querySelector(".tk-file")?.click(), this.t.importCsv)}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@erplora/outfitkit",
3
- "version": "0.1.6",
3
+ "version": "0.1.8",
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",