@prolibu-suite/cobalt-core 0.9.3 → 0.9.4
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/custom-elements.json +375 -25
- package/dist/cjs/co-audio-player.cjs.entry.js +107 -18
- package/dist/cjs/co-avatar_2.cjs.entry.js +7 -31
- package/dist/cjs/co-button.cjs.entry.js +6 -4
- package/dist/cjs/co-calendar-month_2.cjs.entry.js +59 -2
- package/dist/cjs/co-checkbox.cjs.entry.js +10 -4
- package/dist/cjs/co-chip_2.cjs.entry.js +388 -18
- package/dist/cjs/co-color-picker.cjs.entry.js +36 -3
- package/dist/cjs/co-combobox.cjs.entry.js +44 -4
- package/dist/cjs/co-event-popover.cjs.entry.js +5 -2
- package/dist/cjs/co-file-field.cjs.entry.js +11 -5
- package/dist/cjs/co-icon-button.cjs.entry.js +5 -2
- package/dist/cjs/co-icon.cjs.entry.js +17 -1
- package/dist/cjs/co-input.cjs.entry.js +21 -1
- package/dist/cjs/co-loader.cjs.entry.js +1 -1
- package/dist/cjs/co-number-field.cjs.entry.js +22 -2
- package/dist/cjs/co-ref-field.cjs.entry.js +87 -13
- package/dist/cjs/co-select.cjs.entry.js +273 -8
- package/dist/cjs/co-tags-field.cjs.entry.js +1 -1
- package/dist/cjs/cobalt.cjs.js +1 -1
- package/dist/cjs/color-YhUkm10t.js +32 -0
- package/dist/cjs/fieldChip-BLzo9MEV.js +7 -0
- package/dist/cjs/index-DK-2Lzmf.js +4 -4
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cobalt/cobalt.esm.js +1 -1
- package/dist/cobalt/p-0c463d9a.entry.js +1 -0
- package/dist/cobalt/p-0caa059c.entry.js +1 -0
- package/dist/cobalt/{p-3ced4269.entry.js → p-2828ecf6.entry.js} +1 -1
- package/dist/cobalt/p-2f88d151.entry.js +1 -0
- package/dist/cobalt/p-409f28bb.entry.js +1 -0
- package/dist/cobalt/{p-18af9e44.entry.js → p-568cfe8d.entry.js} +1 -1
- package/dist/cobalt/p-6bf814f9.entry.js +1 -0
- package/dist/cobalt/p-7ea87b75.entry.js +1 -0
- package/dist/cobalt/p-8b4b3589.entry.js +1 -0
- package/dist/cobalt/p-93c68029.entry.js +1 -0
- package/dist/cobalt/p-BG4WRR22.js +1 -0
- package/dist/cobalt/p-a2d31248.entry.js +1 -0
- package/dist/cobalt/p-bcedbd73.entry.js +1 -0
- package/dist/cobalt/p-dfd25f1d.entry.js +1 -0
- package/dist/cobalt/p-e364b8a5.entry.js +1 -0
- package/dist/cobalt/p-f00be11f.entry.js +1 -0
- package/dist/cobalt/p-f25967fb.entry.js +1 -0
- package/dist/cobalt/p-f5f1b463.entry.js +1 -0
- package/dist/cobalt/p-fef5db54.entry.js +1 -0
- package/dist/cobalt/p-mAGnZXRn.js +1 -0
- package/dist/collection/components/co-audio-player/co-audio-player.js +81 -17
- package/dist/collection/components/co-audio-player/co-audio-player.utils.js +27 -2
- package/dist/collection/components/co-autocomplete/co-autocomplete.js +1 -1
- package/dist/collection/components/co-avatar/co-avatar.js +5 -1
- package/dist/collection/components/co-avatar-group/co-avatar-group.js +1 -1
- package/dist/collection/components/co-button/co-button.css +7 -0
- package/dist/collection/components/co-button/co-button.js +7 -5
- package/dist/collection/components/co-calendar-month/co-calendar-month.js +59 -2
- package/dist/collection/components/co-checkbox/co-checkbox.css +22 -0
- package/dist/collection/components/co-checkbox/co-checkbox.js +9 -3
- package/dist/collection/components/co-checkbox-group/co-checkbox-group.js +1 -1
- package/dist/collection/components/co-color-picker/co-color-picker.css +7 -0
- package/dist/collection/components/co-color-picker/co-color-picker.js +35 -2
- package/dist/collection/components/co-combobox/co-combobox.css +7 -0
- package/dist/collection/components/co-combobox/co-combobox.js +44 -4
- package/dist/collection/components/co-command-search/co-command-search.js +1 -1
- package/dist/collection/components/co-data-table/co-data-table.js +1 -1
- package/dist/collection/components/co-date-range-picker/co-date-range-picker.js +2 -2
- package/dist/collection/components/co-event-popover/co-event-popover.js +5 -2
- package/dist/collection/components/co-file-field/co-file-field.js +8 -5
- package/dist/collection/components/co-icon/iconLoader.js +17 -1
- package/dist/collection/components/co-icon-button/co-icon-button.css +7 -0
- package/dist/collection/components/co-icon-button/co-icon-button.js +6 -3
- package/dist/collection/components/co-input/co-input.css +13 -0
- package/dist/collection/components/co-input/co-input.js +21 -0
- package/dist/collection/components/co-loader/co-loader.css +5 -3
- package/dist/collection/components/co-number-field/co-number-field.js +23 -2
- package/dist/collection/components/co-option-list/co-option-list.css +45 -2
- package/dist/collection/components/co-option-list/co-option-list.js +468 -18
- package/dist/collection/components/co-option-list/optionListLogic.js +25 -0
- package/dist/collection/components/co-popover/co-popover.js +1 -1
- package/dist/collection/components/co-radio-group/co-radio-group.js +1 -1
- package/dist/collection/components/co-ref-field/co-ref-field.css +49 -0
- package/dist/collection/components/co-ref-field/co-ref-field.js +240 -12
- package/dist/collection/components/co-segmented-bar/co-segmented-bar.js +1 -1
- package/dist/collection/components/co-select/co-select.css +19 -0
- package/dist/collection/components/co-select/co-select.js +275 -9
- package/dist/collection/components/co-sidebar-nav/co-sidebar-nav.js +1 -1
- package/dist/collection/components/co-toast/co-toast.js +2 -2
- package/dist/collection/components/co-transfer-list/co-transfer-list.js +1 -1
- package/dist/collection/utils/fieldChip.js +1 -1
- package/dist/collection/utils/fileI18n.js +3 -0
- package/dist/components/co-accordion.js +1 -1
- package/dist/components/co-action-bar.js +1 -1
- package/dist/components/co-audio-player.js +1 -1
- package/dist/components/co-autocomplete.js +1 -1
- package/dist/components/co-avatar-group.js +1 -1
- package/dist/components/co-avatar.js +1 -1
- package/dist/components/co-breadcrumb-item.js +1 -1
- package/dist/components/co-breadcrumb.js +1 -1
- package/dist/components/co-button.js +1 -1
- package/dist/components/co-calendar-month.js +1 -1
- package/dist/components/co-calendar-timegrid.js +1 -1
- package/dist/components/co-calendar.js +1 -1
- package/dist/components/co-carousel.js +1 -1
- package/dist/components/co-checkbox-group.js +1 -1
- package/dist/components/co-checkbox.js +1 -1
- package/dist/components/co-chip.js +1 -1
- package/dist/components/co-color-picker.js +1 -1
- package/dist/components/co-column-picker.js +1 -1
- package/dist/components/co-combobox.js +1 -1
- package/dist/components/co-command-search.js +1 -1
- package/dist/components/co-data-table-pagination.js +1 -1
- package/dist/components/co-data-table.js +1 -1
- package/dist/components/co-date-field.js +1 -1
- package/dist/components/co-date-picker.js +1 -1
- package/dist/components/co-date-range-picker.js +1 -1
- package/dist/components/co-date-range.js +1 -1
- package/dist/components/co-date-time-picker.js +1 -1
- package/dist/components/co-drawer.js +1 -1
- package/dist/components/co-drive-card.js +1 -1
- package/dist/components/co-drop-zone.js +1 -1
- package/dist/components/co-emoji-picker.js +1 -1
- package/dist/components/co-empty-state.js +1 -1
- package/dist/components/co-event-calendar.js +1 -1
- package/dist/components/co-event-popover.js +1 -1
- package/dist/components/co-fab.js +1 -1
- package/dist/components/co-file-field.js +1 -1
- package/dist/components/co-file-type-tile.js +1 -1
- package/dist/components/co-helper-text.js +1 -1
- package/dist/components/co-icon-button.js +1 -1
- package/dist/components/co-icon.js +1 -1
- package/dist/components/co-input.js +1 -1
- package/dist/components/co-json-field.js +1 -1
- package/dist/components/co-lightbox.js +1 -1
- package/dist/components/co-list-footer.js +1 -1
- package/dist/components/co-list-item.js +1 -1
- package/dist/components/co-loader.js +1 -1
- package/dist/components/co-menu-item.js +1 -1
- package/dist/components/co-modal.js +1 -1
- package/dist/components/co-number-field.js +1 -1
- package/dist/components/co-option-list.js +1 -1
- package/dist/components/co-page-header.js +1 -1
- package/dist/components/co-phone-field.js +1 -1
- package/dist/components/co-radio-group.js +1 -1
- package/dist/components/co-rating.js +1 -1
- package/dist/components/co-ref-field.js +1 -1
- package/dist/components/co-rich-text-editor.js +1 -1
- package/dist/components/co-rich-text-toolbar.js +1 -1
- package/dist/components/co-select.js +1 -1
- package/dist/components/co-sidebar-nav.js +1 -1
- package/dist/components/co-slider.js +1 -1
- package/dist/components/co-switch.js +1 -1
- package/dist/components/co-tab.js +1 -1
- package/dist/components/co-tags-field.js +1 -1
- package/dist/components/co-textarea.js +1 -1
- package/dist/components/co-toast.js +1 -1
- package/dist/components/co-toggle-button.js +1 -1
- package/dist/components/co-transfer-list.js +1 -1
- package/dist/components/co-video.js +1 -1
- package/dist/components/{p-CklsvHeL.js → p-B0Dc-I_C.js} +1 -1
- package/dist/components/{p-DzoNGEDU.js → p-BH184F0X.js} +1 -1
- package/dist/components/{p-BGD3oQ73.js → p-BHYtxTzM.js} +1 -1
- package/dist/components/{p-mom5kiBa.js → p-BTQEg3UO.js} +1 -1
- package/dist/components/p-BZIB4JDs.js +1 -0
- package/dist/components/p-Bbny3WUc.js +1 -0
- package/dist/components/{p-D5QJpmqf.js → p-Bxk96Zgc.js} +1 -1
- package/dist/components/p-C1Kv3zYZ.js +1 -0
- package/dist/components/p-C4U2tbRp.js +1 -0
- package/dist/components/{p-CyMaOb1j.js → p-CA_JAK9s.js} +1 -1
- package/dist/components/{p-AvSaw4Ua.js → p-CR0izsJC.js} +1 -1
- package/dist/components/p-CuZXTvDM.js +1 -0
- package/dist/components/{p-_131DL6m.js → p-D4qzGifz.js} +1 -1
- package/dist/components/{p-BsQQ7Mki.js → p-D5EdMieb.js} +1 -1
- package/dist/components/p-Dabi98BI.js +1 -0
- package/dist/components/p-DbipMAyT.js +1 -0
- package/dist/components/p-DgUBcJIS.js +1 -0
- package/dist/components/p-Dj1EZ5qD.js +1 -0
- package/dist/components/{p-DkmKOF60.js → p-P8wvwhM2.js} +1 -1
- package/dist/components/{p-nwy6X1QT.js → p-hfGFsvaD.js} +1 -1
- package/dist/esm/co-audio-player.entry.js +107 -18
- package/dist/esm/co-avatar_2.entry.js +6 -30
- package/dist/esm/co-button.entry.js +6 -4
- package/dist/esm/co-calendar-month_2.entry.js +59 -2
- package/dist/esm/co-checkbox.entry.js +10 -4
- package/dist/esm/co-chip_2.entry.js +388 -18
- package/dist/esm/co-color-picker.entry.js +36 -3
- package/dist/esm/co-combobox.entry.js +44 -4
- package/dist/esm/co-event-popover.entry.js +5 -2
- package/dist/esm/co-file-field.entry.js +11 -5
- package/dist/esm/co-icon-button.entry.js +5 -2
- package/dist/esm/co-icon.entry.js +17 -1
- package/dist/esm/co-input.entry.js +21 -1
- package/dist/esm/co-loader.entry.js +1 -1
- package/dist/esm/co-number-field.entry.js +22 -2
- package/dist/esm/co-ref-field.entry.js +87 -13
- package/dist/esm/co-select.entry.js +273 -8
- package/dist/esm/co-tags-field.entry.js +1 -1
- package/dist/esm/cobalt.js +1 -1
- package/dist/esm/color-BG4WRR22.js +30 -0
- package/dist/esm/fieldChip-DsAfq1e0.js +5 -0
- package/dist/esm/index-CrtiywTB.js +4 -4
- package/dist/esm/loader.js +1 -1
- package/dist/types/components/co-audio-player/co-audio-player.d.ts +13 -0
- package/dist/types/components/co-audio-player/co-audio-player.utils.d.ts +18 -1
- package/dist/types/components/co-button/co-button.d.ts +3 -1
- package/dist/types/components/co-calendar-month/co-calendar-month.d.ts +7 -0
- package/dist/types/components/co-checkbox/co-checkbox.d.ts +1 -0
- package/dist/types/components/co-color-picker/co-color-picker.d.ts +15 -0
- package/dist/types/components/co-combobox/co-combobox.d.ts +17 -0
- package/dist/types/components/co-icon-button/co-icon-button.d.ts +3 -0
- package/dist/types/components/co-input/co-input.d.ts +9 -0
- package/dist/types/components/co-number-field/co-number-field.d.ts +9 -0
- package/dist/types/components/co-option-list/co-option-list.d.ts +79 -0
- package/dist/types/components/co-option-list/optionListLogic.d.ts +23 -1
- package/dist/types/components/co-ref-field/co-ref-field.d.ts +46 -0
- package/dist/types/components/co-select/co-select.d.ts +67 -0
- package/dist/types/components.d.ts +110 -4
- package/dist/types/utils/fieldChip.d.ts +5 -0
- package/dist/types/utils/fileI18n.d.ts +1 -0
- package/package.json +3 -3
- package/dist/cjs/fieldChip-xNJPEFcS.js +0 -7
- package/dist/cobalt/p-02ac492f.entry.js +0 -1
- package/dist/cobalt/p-0ccb672b.entry.js +0 -1
- package/dist/cobalt/p-2d81b292.entry.js +0 -1
- package/dist/cobalt/p-4a503187.entry.js +0 -1
- package/dist/cobalt/p-55566b37.entry.js +0 -1
- package/dist/cobalt/p-680d3db8.entry.js +0 -1
- package/dist/cobalt/p-7457aa89.entry.js +0 -1
- package/dist/cobalt/p-77719335.entry.js +0 -1
- package/dist/cobalt/p-8f600512.entry.js +0 -1
- package/dist/cobalt/p-CQAYgqA6.js +0 -1
- package/dist/cobalt/p-a02db338.entry.js +0 -1
- package/dist/cobalt/p-a51d8775.entry.js +0 -1
- package/dist/cobalt/p-aafb9d11.entry.js +0 -1
- package/dist/cobalt/p-b28dc0fe.entry.js +0 -1
- package/dist/cobalt/p-c6b9b9d6.entry.js +0 -1
- package/dist/cobalt/p-d4debd6f.entry.js +0 -1
- package/dist/cobalt/p-d629fb4e.entry.js +0 -1
- package/dist/components/p-B3TkpLNh.js +0 -1
- package/dist/components/p-B7hvddnu.js +0 -1
- package/dist/components/p-BT5tSgZa.js +0 -1
- package/dist/components/p-CXLX8DpD.js +0 -1
- package/dist/components/p-DTvb412h.js +0 -1
- package/dist/components/p-DvhR3H61.js +0 -1
- package/dist/components/p-KWTokD0C.js +0 -1
- package/dist/components/p-Q6caHt79.js +0 -1
- package/dist/components/p-WWlZiln1.js +0 -1
- package/dist/esm/fieldChip-BZDUy9Z-.js +0 -5
|
@@ -70,6 +70,17 @@ export function buildRows(items) {
|
|
|
70
70
|
}
|
|
71
71
|
/** Mueve `fromId` a la posición de `toId` en `order`. No muta el input;
|
|
72
72
|
* devuelve el mismo array (referencia) si es no-op. */
|
|
73
|
+
/**
|
|
74
|
+
* Universo del drag del bloque seleccionado: los ids seleccionados VIVOS en su
|
|
75
|
+
* orden visible. A diferencia del snapshot (congelado al abrir), incluye lo
|
|
76
|
+
* seleccionado durante la sesión del panel — sin esto, esos ítems renderizan
|
|
77
|
+
* handle pero el drop los rechaza, y un reorder del snapshot emitiría un value
|
|
78
|
+
* truncado (pierde las selecciones frescas).
|
|
79
|
+
*/
|
|
80
|
+
export function liveSelectedOrder(items, selectedIds) {
|
|
81
|
+
const sel = new Set(selectedIds);
|
|
82
|
+
return items.filter((i) => sel.has(i._id)).map((i) => i._id);
|
|
83
|
+
}
|
|
73
84
|
export function reorderIds(order, fromId, toId) {
|
|
74
85
|
if (fromId === toId)
|
|
75
86
|
return order;
|
|
@@ -81,6 +92,13 @@ export function reorderIds(order, fromId, toId) {
|
|
|
81
92
|
next.splice(to, 0, next.splice(from, 1)[0]);
|
|
82
93
|
return next;
|
|
83
94
|
}
|
|
95
|
+
/** Reorder de lista completa: los extremos pineados son inválidos (ni origen ni
|
|
96
|
+
* destino) — devuelve la misma referencia, señal de no-op para el caller. */
|
|
97
|
+
export function listReorderIds(order, fromId, toId, isPinned) {
|
|
98
|
+
if (isPinned(fromId) || isPinned(toId))
|
|
99
|
+
return order;
|
|
100
|
+
return reorderIds(order, fromId, toId);
|
|
101
|
+
}
|
|
84
102
|
/** Siguiente highlight: wrap, salta disabled. -1 = sin items navegables. */
|
|
85
103
|
export function nextActiveIndex(current, delta, items) {
|
|
86
104
|
const positions = [];
|
|
@@ -95,6 +113,13 @@ export function nextActiveIndex(current, delta, items) {
|
|
|
95
113
|
return delta === 1 ? positions[0] : positions[positions.length - 1];
|
|
96
114
|
return positions[(at + delta + positions.length) % positions.length];
|
|
97
115
|
}
|
|
116
|
+
/** Highlight inicial de la sesión del panel: primera fila seleccionada
|
|
117
|
+
* NAVEGABLE en orden visible (contrato de scrollToSelected, paridad
|
|
118
|
+
* resetActiveIndex de co-select). -1 = nada que anclar. */
|
|
119
|
+
export function selectedActiveIndex(items, selectedIds) {
|
|
120
|
+
const sel = new Set(selectedIds);
|
|
121
|
+
return items.findIndex((it) => sel.has(it._id) && !it.disabled);
|
|
122
|
+
}
|
|
98
123
|
/** `total > 0` tiene precedencia (deriva remaining); si no, vale `hasMoreProp`. */
|
|
99
124
|
export function deriveMore(count, total, hasMoreProp) {
|
|
100
125
|
if (total > 0)
|
|
@@ -322,7 +322,7 @@ export class CoPopover {
|
|
|
322
322
|
"references": {
|
|
323
323
|
"PopoverPlacement": {
|
|
324
324
|
"location": "local",
|
|
325
|
-
"path": "/Users/agox/
|
|
325
|
+
"path": "/Users/agox/Documents/Prolibu/prolibu-cobalt/packages/core/src/components/co-popover/co-popover.tsx",
|
|
326
326
|
"id": "src/components/co-popover/co-popover.tsx::PopoverPlacement"
|
|
327
327
|
}
|
|
328
328
|
}
|
|
@@ -219,7 +219,7 @@ export class CoRadioGroup {
|
|
|
219
219
|
"references": {
|
|
220
220
|
"RadioOption": {
|
|
221
221
|
"location": "local",
|
|
222
|
-
"path": "/Users/agox/
|
|
222
|
+
"path": "/Users/agox/Documents/Prolibu/prolibu-cobalt/packages/core/src/components/co-radio-group/co-radio-group.tsx",
|
|
223
223
|
"id": "src/components/co-radio-group/co-radio-group.tsx::RadioOption"
|
|
224
224
|
}
|
|
225
225
|
}
|
|
@@ -109,6 +109,14 @@
|
|
|
109
109
|
box-shadow: 0 0 0 2px var(--co-semantic-border-focus-ring);
|
|
110
110
|
}
|
|
111
111
|
|
|
112
|
+
/* Anillo de foco por teclado — mismo trazo que el estado abierto. Solo
|
|
113
|
+
:focus-visible: el click de mouse no debe encenderlo. */
|
|
114
|
+
.co-ref-field__trigger:focus-visible {
|
|
115
|
+
outline: none;
|
|
116
|
+
border-color: var(--co-semantic-border-focus);
|
|
117
|
+
box-shadow: 0 0 0 2px var(--co-semantic-border-focus-ring);
|
|
118
|
+
}
|
|
119
|
+
|
|
112
120
|
.co-ref-field--disabled {
|
|
113
121
|
background: var(--co-semantic-surface-disabled);
|
|
114
122
|
border-color: transparent;
|
|
@@ -194,6 +202,23 @@
|
|
|
194
202
|
color: var(--co-semantic-text-default);
|
|
195
203
|
}
|
|
196
204
|
|
|
205
|
+
.co-ref-field__edit {
|
|
206
|
+
flex-shrink: 0;
|
|
207
|
+
display: flex;
|
|
208
|
+
align-items: center;
|
|
209
|
+
padding: 0;
|
|
210
|
+
margin: 0;
|
|
211
|
+
border: none;
|
|
212
|
+
background: transparent;
|
|
213
|
+
cursor: pointer;
|
|
214
|
+
color: var(--co-semantic-text-muted);
|
|
215
|
+
transition: color var(--co-motion-duration-fast) var(--co-motion-ease-out);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
.co-ref-field__edit:hover {
|
|
219
|
+
color: var(--co-semantic-text-default);
|
|
220
|
+
}
|
|
221
|
+
|
|
197
222
|
/* ── Selected single value ──────────────────────────────── */
|
|
198
223
|
.co-ref-field__selected {
|
|
199
224
|
display: flex;
|
|
@@ -299,6 +324,30 @@
|
|
|
299
324
|
flex-shrink: 0;
|
|
300
325
|
}
|
|
301
326
|
|
|
327
|
+
/* colorMode='fill': the item color is the chip background (inline style);
|
|
328
|
+
label + remove flip to WCAG-contrast ink. Dot-less, so keep the dot chips'
|
|
329
|
+
min-height via the size modifiers (unchanged). Radius 6px = co-chip square
|
|
330
|
+
(the tag chip spec) — NOT the neutral chips' full pill. */
|
|
331
|
+
.co-ref-field__chip--fill {
|
|
332
|
+
color: var(--co-color-base-blanco);
|
|
333
|
+
border-radius: var(--co-spacing-sm);
|
|
334
|
+
}
|
|
335
|
+
.co-ref-field__chip--fill-light { color: var(--co-color-base-negro); }
|
|
336
|
+
|
|
337
|
+
.co-ref-field__chip--fill .co-ref-field__chip-label,
|
|
338
|
+
.co-ref-field__chip--fill .co-ref-field__chip-remove {
|
|
339
|
+
color: inherit;
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
.co-ref-field__chip--fill .co-ref-field__chip-remove {
|
|
343
|
+
opacity: 0.72;
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
.co-ref-field__chip--fill .co-ref-field__chip-remove:hover {
|
|
347
|
+
color: inherit;
|
|
348
|
+
opacity: 1;
|
|
349
|
+
}
|
|
350
|
+
|
|
302
351
|
.co-ref-field__chip-label {
|
|
303
352
|
color: var(--co-semantic-text-default);
|
|
304
353
|
white-space: nowrap;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { h } from "@stencil/core";
|
|
2
2
|
import { RequiredMark } from "../../utils/requiredMark";
|
|
3
3
|
import { FieldChip } from "../../utils/fieldChip";
|
|
4
|
+
import { isLightColor } from "../../utils/color";
|
|
4
5
|
export class CoRefField {
|
|
5
6
|
constructor() {
|
|
6
7
|
/** Whether the field is required (renders a required marker on the label). */
|
|
@@ -8,6 +9,12 @@ export class CoRefField {
|
|
|
8
9
|
this.placeholder = 'Select…';
|
|
9
10
|
this.disabled = false;
|
|
10
11
|
this.clearable = true;
|
|
12
|
+
/** Shows a pencil button on the single-value trigger that emits
|
|
13
|
+
* `coEditSelected` with the selected record id. The host owns policy
|
|
14
|
+
* (permissions, what opens) — the component only paints and emits. */
|
|
15
|
+
this.editable = false;
|
|
16
|
+
/** Accessible name / tooltip for the edit button. */
|
|
17
|
+
this.editLabel = 'Edit';
|
|
11
18
|
this.multiple = false;
|
|
12
19
|
this.status = 'default';
|
|
13
20
|
/** Label layout: vertical (label above) or horizontal (label beside) */
|
|
@@ -56,6 +63,13 @@ export class CoRefField {
|
|
|
56
63
|
this.maxChips = 0;
|
|
57
64
|
/** Panel color theme. 'auto' follows trigger, 'dark' forces dark panel, 'light' forces light. */
|
|
58
65
|
this.panelTheme = 'auto';
|
|
66
|
+
/**
|
|
67
|
+
* How `item.color` paints the selected chips (multiple mode).
|
|
68
|
+
* 'dot' (default) = neutral chip with a leading 8px color dot.
|
|
69
|
+
* 'fill' = the color becomes the chip BACKGROUND (label/remove switch to
|
|
70
|
+
* WCAG-contrast text) — the tag look. Avatar/image items keep the avatar.
|
|
71
|
+
*/
|
|
72
|
+
this.colorMode = 'dot';
|
|
59
73
|
/**
|
|
60
74
|
* Phosphor icon rendered as a small status badge after the selected label in
|
|
61
75
|
* the trigger (e.g. 'funnel' = strict workspace filter active). Only shows
|
|
@@ -71,6 +85,10 @@ export class CoRefField {
|
|
|
71
85
|
* a smooth squircle. The avatar border can be themed via --co-avatar-border-color.
|
|
72
86
|
*/
|
|
73
87
|
this.avatarShape = 'circle';
|
|
88
|
+
/** Push-pin por fila en el panel (forward a co-option-list). */
|
|
89
|
+
this.pinnable = false;
|
|
90
|
+
/** Drag-reorder de la lista del panel (forward a co-option-list). */
|
|
91
|
+
this.listReorderable = false;
|
|
74
92
|
this.isOpen = false;
|
|
75
93
|
/** How many trailing chips don't fit the trigger width (responsive mode). */
|
|
76
94
|
this.overflowCount = 0;
|
|
@@ -87,6 +105,24 @@ export class CoRefField {
|
|
|
87
105
|
if (this.disabled)
|
|
88
106
|
e.stopPropagation();
|
|
89
107
|
};
|
|
108
|
+
this.handleTriggerKeyDown = (e) => {
|
|
109
|
+
if (this.disabled)
|
|
110
|
+
return;
|
|
111
|
+
// Solo las teclas del PROPIO trigger togglean el panel. Los botones
|
|
112
|
+
// internos (clear, "x" de los chips) llevan tabIndex={-1} pero quedan
|
|
113
|
+
// focuseados al clickearlos: su Enter/Space debe activarlos de forma
|
|
114
|
+
// nativa, no abrir/cerrar el panel bajo ellos.
|
|
115
|
+
if (e.target !== this.triggerEl)
|
|
116
|
+
return;
|
|
117
|
+
if (e.key === 'Enter' || e.key === ' ') {
|
|
118
|
+
e.preventDefault();
|
|
119
|
+
this.isOpen = !this.isOpen;
|
|
120
|
+
}
|
|
121
|
+
else if (e.key === 'ArrowDown' && !this.isOpen) {
|
|
122
|
+
e.preventDefault();
|
|
123
|
+
this.isOpen = true;
|
|
124
|
+
}
|
|
125
|
+
};
|
|
90
126
|
/** Change de la co-option-list: `value: null` = deselección explícita (la X
|
|
91
127
|
* de la fila) → mismo camino que la X del trigger (clear + coClear). El
|
|
92
128
|
* resto sigue por handleOptionClick con el ítem. */
|
|
@@ -129,6 +165,12 @@ export class CoRefField {
|
|
|
129
165
|
this.value = this.multiple ? '[]' : '';
|
|
130
166
|
this.coClear.emit();
|
|
131
167
|
};
|
|
168
|
+
this.handleEditClick = (e) => {
|
|
169
|
+
e.stopPropagation();
|
|
170
|
+
const selected = this.effectiveDisplayItems[0];
|
|
171
|
+
if (selected)
|
|
172
|
+
this.coEditSelected.emit(selected._id);
|
|
173
|
+
};
|
|
132
174
|
this.handleRemoveChip = (id, e) => {
|
|
133
175
|
e.stopPropagation();
|
|
134
176
|
const newValue = this.parsedValue.filter((v) => v !== id);
|
|
@@ -281,6 +323,17 @@ export class CoRefField {
|
|
|
281
323
|
}
|
|
282
324
|
else {
|
|
283
325
|
this.coClose.emit();
|
|
326
|
+
this.restoreTriggerFocus();
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
/** Devuelve el foco al trigger al cerrar el panel (Escape, selección),
|
|
330
|
+
* salvo que el cierre venga de un click-outside que ya movió el foco a
|
|
331
|
+
* otro elemento — en ese caso no robarlo. */
|
|
332
|
+
restoreTriggerFocus() {
|
|
333
|
+
var _a;
|
|
334
|
+
const active = document.activeElement;
|
|
335
|
+
if (active === this.el || this.el.contains(active)) {
|
|
336
|
+
(_a = this.triggerEl) === null || _a === void 0 ? void 0 : _a.focus();
|
|
284
337
|
}
|
|
285
338
|
}
|
|
286
339
|
// ── Render helpers ─────────────────────────────────────────
|
|
@@ -294,7 +347,7 @@ export class CoRefField {
|
|
|
294
347
|
[`co-ref-field--${this.normalizedSize}`]: true,
|
|
295
348
|
[`co-ref-field--${this.status}`]: this.status !== 'default',
|
|
296
349
|
'co-ref-field--flat': this.variant === 'flat',
|
|
297
|
-
}, onClick: this.handleTriggerClick }, this.iconLeft && (h("span", { class: "co-ref-field__icon" }, h("co-icon", { name: this.iconLeft, size: 16 }))), h("div", { class: "co-ref-field__value" }, !hasValue && h("span", { class: "co-ref-field__placeholder", part: "trigger-placeholder" }, this.placeholder), hasValue && !this.multiple && this.renderSingleValue(selected[0]), hasValue && this.multiple && this.renderMultipleValue(selected)), hasValue && this.triggerBadgeIcon && (h("span", { class: "co-ref-field__trigger-badge", part: "trigger-badge", role: "img", title: this.triggerBadgeLabel || undefined, "aria-label": this.triggerBadgeLabel || undefined }, h("co-icon", { name: this.triggerBadgeIcon, size: 11, weight: "fill" }))), hasValue && this.clearable && !this.disabled && (h("button", { class: "co-ref-field__clear", part: "trigger-clear", onClick: this.handleClear, type: "button" }, h("co-icon", { name: "x", size: 14 }))), h("span", { class: "co-ref-field__caret", part: "trigger-chevron" }, h("co-icon", { name: "caret-up-down", size: 16 }))));
|
|
350
|
+
}, role: "combobox", "aria-expanded": this.isOpen ? 'true' : 'false', "aria-haspopup": "listbox", "aria-label": this.label || undefined, "aria-disabled": this.disabled ? 'true' : undefined, "aria-controls": this.isOpen ? CoRefField.LIST_ID : undefined, tabIndex: this.disabled ? -1 : 0, ref: (el) => (this.triggerEl = el), onClick: this.handleTriggerClick, onKeyDown: this.handleTriggerKeyDown }, this.iconLeft && (h("span", { class: "co-ref-field__icon" }, h("co-icon", { name: this.iconLeft, size: 16 }))), h("div", { class: "co-ref-field__value" }, !hasValue && h("span", { class: "co-ref-field__placeholder", part: "trigger-placeholder" }, this.placeholder), hasValue && !this.multiple && this.renderSingleValue(selected[0]), hasValue && this.multiple && this.renderMultipleValue(selected)), hasValue && this.triggerBadgeIcon && (h("span", { class: "co-ref-field__trigger-badge", part: "trigger-badge", role: "img", title: this.triggerBadgeLabel || undefined, "aria-label": this.triggerBadgeLabel || undefined }, h("co-icon", { name: this.triggerBadgeIcon, size: 11, weight: "fill" }))), hasValue && !this.multiple && this.editable && !this.disabled && (h("button", { class: "co-ref-field__edit", part: "trigger-edit", tabIndex: -1, onClick: this.handleEditClick, type: "button", title: this.editLabel || undefined, "aria-label": this.editLabel || undefined }, h("co-icon", { name: "pencil-simple", size: 14 }))), hasValue && this.clearable && !this.disabled && (h("button", { class: "co-ref-field__clear", part: "trigger-clear", tabIndex: -1, onClick: this.handleClear, type: "button" }, h("co-icon", { name: "x", size: 14 }))), h("span", { class: "co-ref-field__caret", part: "trigger-chevron" }, h("co-icon", { name: "caret-up-down", size: 16 }))));
|
|
298
351
|
}
|
|
299
352
|
/**
|
|
300
353
|
* Leading visual for a selected value / chip. Prefers a real avatar (image
|
|
@@ -327,25 +380,32 @@ export class CoRefField {
|
|
|
327
380
|
const visible = fixed ? items.slice(0, this.maxChips) : items;
|
|
328
381
|
const overflow = fixed ? items.length - this.maxChips : responsiveOverflow;
|
|
329
382
|
const visibleCount = items.length - (fixed ? 0 : responsiveOverflow);
|
|
330
|
-
return (h("div", { class: "co-ref-field__chips-row" }, h("div", { class: "co-ref-field__chips", ref: (el) => (this.chipsEl = el) }, visible.map((item, i) =>
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
383
|
+
return (h("div", { class: "co-ref-field__chips-row" }, h("div", { class: "co-ref-field__chips", ref: (el) => (this.chipsEl = el) }, visible.map((item, i) => {
|
|
384
|
+
// 'fill' mode: the item color IS the chip background (tag look);
|
|
385
|
+
// no leading dot, label/remove flip to contrast via CSS `inherit`.
|
|
386
|
+
const fill = this.colorMode === 'fill' && !!item.color && !(item.image || item.avatar);
|
|
387
|
+
return (
|
|
388
|
+
// Shared field-chip (utils/fieldChip.tsx); the leading avatar /
|
|
389
|
+
// color-dot goes in as children, the "+N" overflow stays here.
|
|
390
|
+
h(FieldChip, { key: item._id, baseClass: "co-ref-field__chip", label: item.label, modifiers: {
|
|
391
|
+
'co-ref-field__chip--avatar': !!(item.image || item.avatar),
|
|
392
|
+
'co-ref-field__chip--fill': fill,
|
|
393
|
+
'co-ref-field__chip--fill-light': fill && isLightColor(item.color),
|
|
394
|
+
'co-ref-field__chip--clipped': !fixed && i >= visibleCount,
|
|
395
|
+
[`co-ref-field__chip--${this.normalizedSize}`]: true,
|
|
396
|
+
}, style: fill ? { backgroundColor: item.color } : undefined, onRemove: (e) => this.handleRemoveChip(item._id, e) }, item.image || item.avatar ? (this.renderItemAvatar(item)) : item.color && !fill ? (h("span", { class: "co-ref-field__chip-dot", style: { backgroundColor: item.color } })) : null));
|
|
397
|
+
})), overflow > 0 && h("span", { class: "co-ref-field__chip-overflow" }, "+", overflow)));
|
|
338
398
|
}
|
|
339
399
|
renderPanel() {
|
|
340
400
|
return (h("div", { class: {
|
|
341
401
|
'co-ref-field__panel': true,
|
|
342
402
|
'co-ref-field__panel--dark': this.panelTheme === 'dark',
|
|
343
403
|
'co-ref-field__panel--light': this.panelTheme === 'light',
|
|
344
|
-
}, style: this.panelWidth ? { width: this.panelWidth } : undefined }, h("co-option-list", { ref: (el) => (this.optionListEl = el), items: typeof this.options === 'string' ? this.options : JSON.stringify(this.options), value: this.value, selectedItems: typeof this.selectedDisplay === 'string' ? this.selectedDisplay : JSON.stringify(this.selectedDisplay), multiple: this.multiple, selectedFirst: this.multiple, reorderable: this.multiple, selectedAffordance: "deselect", searchable: this.searchable, searchPlaceholder: this.searchPlaceholder, searchDebounce: this.searchDebounce, loading: this.loading, total: this.total, emptyMessage: this.emptyMessage, avatarShape: this.avatarShape, onCoSearch: (e) => this.coSearch.emit(e.detail), onCoChange: (e) => this.handleListChange(e.detail), onCoReorder: (e) => this.handleReorder(e.detail), onCoLoadMore: () => this.coLoadMore.emit() }, h("slot", { name: "panel-footer", slot: "footer" }), this.showFooter && (h("div", { class: "co-ref-field__footer", slot: "footer" }, this.footerSecondaryLabel && (h("button", { class: "co-ref-field__footer-btn co-ref-field__footer-btn--secondary", type: "button", onClick: this.handleFooterSecondary }, h("co-icon", { name: "plus", size: 16 }), h("span", null, this.footerSecondaryLabel))), h("button", { class: "co-ref-field__footer-btn co-ref-field__footer-btn--primary", type: "button", onClick: this.handleFooterPrimary }, h("co-icon", { name: "check", size: 16 }), h("span", null, this.footerPrimaryLabel)))))));
|
|
404
|
+
}, style: this.panelWidth ? { width: this.panelWidth } : undefined }, h("co-option-list", { id: CoRefField.LIST_ID, ref: (el) => (this.optionListEl = el), items: typeof this.options === 'string' ? this.options : JSON.stringify(this.options), value: this.value, selectedItems: typeof this.selectedDisplay === 'string' ? this.selectedDisplay : JSON.stringify(this.selectedDisplay), multiple: this.multiple, selectedFirst: this.multiple, reorderable: this.multiple, pinnable: this.pinnable, listReorderable: this.listReorderable, selectedAffordance: "deselect", searchable: this.searchable, searchPlaceholder: this.searchPlaceholder, searchDebounce: this.searchDebounce, loading: this.loading, total: this.total, emptyMessage: this.emptyMessage, avatarShape: this.avatarShape, onCoSearch: (e) => this.coSearch.emit(e.detail), onCoChange: (e) => this.handleListChange(e.detail), onCoReorder: (e) => this.handleReorder(e.detail), onCoPinToggle: (e) => this.coPinToggle.emit(e.detail), onCoListReorder: (e) => this.coListReorder.emit(e.detail), onCoLoadMore: () => this.coLoadMore.emit() }, h("slot", { name: "panel-footer", slot: "footer" }), this.showFooter && (h("div", { class: "co-ref-field__footer", slot: "footer" }, this.footerSecondaryLabel && (h("button", { class: "co-ref-field__footer-btn co-ref-field__footer-btn--secondary", type: "button", onClick: this.handleFooterSecondary }, h("co-icon", { name: "plus", size: 16 }), h("span", null, this.footerSecondaryLabel))), h("button", { class: "co-ref-field__footer-btn co-ref-field__footer-btn--primary", type: "button", onClick: this.handleFooterPrimary }, h("co-icon", { name: "check", size: 16 }), h("span", null, this.footerPrimaryLabel)))))));
|
|
345
405
|
}
|
|
346
406
|
// ── Main render ────────────────────────────────────────────
|
|
347
407
|
render() {
|
|
348
|
-
return (h("div", { key: '
|
|
408
|
+
return (h("div", { key: '6bfad2357faa70a7fe4d71aa61b8eaab589c26f2', class: "co-ref-field" }, (this.label || this.secondaryLabel) && (h("div", { key: '0de5d626d21c9cc3d96b7c39da180369bfd2b228', class: "co-ref-field__labels" }, this.label && (h("label", { key: 'ae25a6e7630ce52208ae0d13c0228fa0cac9496d', class: "co-ref-field__label" }, this.labelIcon && (h("co-icon", { key: 'bce6b7a835f291d658eab0ca3589d39bf5ab7d5c', class: "co-ref-field__label-icon", name: this.labelIcon, size: 16 })), this.label, h(RequiredMark, { key: '84f6a8d95f46674717e1b7e5699790b317a69a67', required: this.required }))), this.secondaryLabel && (h("span", { key: 'f9bbcdcb833a0347b2b2ee050e1ba58f95bb3d40', class: "co-ref-field__secondary-label" }, this.secondaryLabel)))), h("co-popover", { key: '18ac882e39908cd9fdda86d70ed750faca8bc8d1', open: this.isOpen, placement: "bottom-start", matchWidth: !this.panelWidth, offset: 4, onCoOpen: this.handlePopoverOpen, onCoClose: this.handlePopoverClose }, h("div", { key: 'e542d937f4738a7199f38057986931a21fc8462f', slot: "trigger" }, this.renderTrigger()), this.isOpen && this.renderPanel()), this.helperText && (h("div", { key: 'f75928e549c2c1f6f5f0589e105c00b71e85f661', class: `co-ref-field__helper co-ref-field__helper--${this.status}` }, this.status !== 'default' && (h("co-icon", { key: '1f329a60a6b03fdfc77361c8c2287cc55369764f', name: this.status === 'error' ? 'warning-circle' : this.status === 'success' ? 'check-circle' : 'info', size: 14 })), h("span", { key: '5fa6dbe648f63789c496081c9197eac7ac89c9b3' }, this.helperText)))));
|
|
349
409
|
}
|
|
350
410
|
static get is() { return "co-ref-field"; }
|
|
351
411
|
static get encapsulation() { return "shadow"; }
|
|
@@ -498,6 +558,46 @@ export class CoRefField {
|
|
|
498
558
|
"attribute": "clearable",
|
|
499
559
|
"defaultValue": "true"
|
|
500
560
|
},
|
|
561
|
+
"editable": {
|
|
562
|
+
"type": "boolean",
|
|
563
|
+
"mutable": false,
|
|
564
|
+
"complexType": {
|
|
565
|
+
"original": "boolean",
|
|
566
|
+
"resolved": "boolean",
|
|
567
|
+
"references": {}
|
|
568
|
+
},
|
|
569
|
+
"required": false,
|
|
570
|
+
"optional": false,
|
|
571
|
+
"docs": {
|
|
572
|
+
"tags": [],
|
|
573
|
+
"text": "Shows a pencil button on the single-value trigger that emits\n`coEditSelected` with the selected record id. The host owns policy\n(permissions, what opens) \u2014 the component only paints and emits."
|
|
574
|
+
},
|
|
575
|
+
"getter": false,
|
|
576
|
+
"setter": false,
|
|
577
|
+
"reflect": false,
|
|
578
|
+
"attribute": "editable",
|
|
579
|
+
"defaultValue": "false"
|
|
580
|
+
},
|
|
581
|
+
"editLabel": {
|
|
582
|
+
"type": "string",
|
|
583
|
+
"mutable": false,
|
|
584
|
+
"complexType": {
|
|
585
|
+
"original": "string",
|
|
586
|
+
"resolved": "string",
|
|
587
|
+
"references": {}
|
|
588
|
+
},
|
|
589
|
+
"required": false,
|
|
590
|
+
"optional": false,
|
|
591
|
+
"docs": {
|
|
592
|
+
"tags": [],
|
|
593
|
+
"text": "Accessible name / tooltip for the edit button."
|
|
594
|
+
},
|
|
595
|
+
"getter": false,
|
|
596
|
+
"setter": false,
|
|
597
|
+
"reflect": false,
|
|
598
|
+
"attribute": "edit-label",
|
|
599
|
+
"defaultValue": "'Edit'"
|
|
600
|
+
},
|
|
501
601
|
"multiple": {
|
|
502
602
|
"type": "boolean",
|
|
503
603
|
"mutable": false,
|
|
@@ -916,6 +1016,26 @@ export class CoRefField {
|
|
|
916
1016
|
"attribute": "panel-theme",
|
|
917
1017
|
"defaultValue": "'auto'"
|
|
918
1018
|
},
|
|
1019
|
+
"colorMode": {
|
|
1020
|
+
"type": "string",
|
|
1021
|
+
"mutable": false,
|
|
1022
|
+
"complexType": {
|
|
1023
|
+
"original": "'dot' | 'fill'",
|
|
1024
|
+
"resolved": "\"dot\" | \"fill\"",
|
|
1025
|
+
"references": {}
|
|
1026
|
+
},
|
|
1027
|
+
"required": false,
|
|
1028
|
+
"optional": false,
|
|
1029
|
+
"docs": {
|
|
1030
|
+
"tags": [],
|
|
1031
|
+
"text": "How `item.color` paints the selected chips (multiple mode).\n'dot' (default) = neutral chip with a leading 8px color dot.\n'fill' = the color becomes the chip BACKGROUND (label/remove switch to\nWCAG-contrast text) \u2014 the tag look. Avatar/image items keep the avatar."
|
|
1032
|
+
},
|
|
1033
|
+
"getter": false,
|
|
1034
|
+
"setter": false,
|
|
1035
|
+
"reflect": false,
|
|
1036
|
+
"attribute": "color-mode",
|
|
1037
|
+
"defaultValue": "'dot'"
|
|
1038
|
+
},
|
|
919
1039
|
"triggerBadgeIcon": {
|
|
920
1040
|
"type": "string",
|
|
921
1041
|
"mutable": false,
|
|
@@ -994,6 +1114,46 @@ export class CoRefField {
|
|
|
994
1114
|
"reflect": false,
|
|
995
1115
|
"attribute": "avatar-shape",
|
|
996
1116
|
"defaultValue": "'circle'"
|
|
1117
|
+
},
|
|
1118
|
+
"pinnable": {
|
|
1119
|
+
"type": "boolean",
|
|
1120
|
+
"mutable": false,
|
|
1121
|
+
"complexType": {
|
|
1122
|
+
"original": "boolean",
|
|
1123
|
+
"resolved": "boolean",
|
|
1124
|
+
"references": {}
|
|
1125
|
+
},
|
|
1126
|
+
"required": false,
|
|
1127
|
+
"optional": false,
|
|
1128
|
+
"docs": {
|
|
1129
|
+
"tags": [],
|
|
1130
|
+
"text": "Push-pin por fila en el panel (forward a co-option-list)."
|
|
1131
|
+
},
|
|
1132
|
+
"getter": false,
|
|
1133
|
+
"setter": false,
|
|
1134
|
+
"reflect": false,
|
|
1135
|
+
"attribute": "pinnable",
|
|
1136
|
+
"defaultValue": "false"
|
|
1137
|
+
},
|
|
1138
|
+
"listReorderable": {
|
|
1139
|
+
"type": "boolean",
|
|
1140
|
+
"mutable": false,
|
|
1141
|
+
"complexType": {
|
|
1142
|
+
"original": "boolean",
|
|
1143
|
+
"resolved": "boolean",
|
|
1144
|
+
"references": {}
|
|
1145
|
+
},
|
|
1146
|
+
"required": false,
|
|
1147
|
+
"optional": false,
|
|
1148
|
+
"docs": {
|
|
1149
|
+
"tags": [],
|
|
1150
|
+
"text": "Drag-reorder de la lista del panel (forward a co-option-list)."
|
|
1151
|
+
},
|
|
1152
|
+
"getter": false,
|
|
1153
|
+
"setter": false,
|
|
1154
|
+
"reflect": false,
|
|
1155
|
+
"attribute": "list-reorderable",
|
|
1156
|
+
"defaultValue": "false"
|
|
997
1157
|
}
|
|
998
1158
|
};
|
|
999
1159
|
}
|
|
@@ -1020,7 +1180,7 @@ export class CoRefField {
|
|
|
1020
1180
|
"references": {
|
|
1021
1181
|
"RefFieldOption": {
|
|
1022
1182
|
"location": "local",
|
|
1023
|
-
"path": "/Users/agox/
|
|
1183
|
+
"path": "/Users/agox/Documents/Prolibu/prolibu-cobalt/packages/core/src/components/co-ref-field/co-ref-field.tsx",
|
|
1024
1184
|
"id": "src/components/co-ref-field/co-ref-field.tsx::RefFieldOption"
|
|
1025
1185
|
}
|
|
1026
1186
|
}
|
|
@@ -1145,6 +1305,63 @@ export class CoRefField {
|
|
|
1145
1305
|
"resolved": "void",
|
|
1146
1306
|
"references": {}
|
|
1147
1307
|
}
|
|
1308
|
+
}, {
|
|
1309
|
+
"method": "coPinToggle",
|
|
1310
|
+
"name": "coPinToggle",
|
|
1311
|
+
"bubbles": true,
|
|
1312
|
+
"cancelable": true,
|
|
1313
|
+
"composed": true,
|
|
1314
|
+
"docs": {
|
|
1315
|
+
"tags": [],
|
|
1316
|
+
"text": "Re-emisi\u00F3n del toggle de pin de una fila del panel (pinnable)."
|
|
1317
|
+
},
|
|
1318
|
+
"complexType": {
|
|
1319
|
+
"original": "{ item: RefFieldOption }",
|
|
1320
|
+
"resolved": "{ item: RefFieldOption; }",
|
|
1321
|
+
"references": {
|
|
1322
|
+
"RefFieldOption": {
|
|
1323
|
+
"location": "local",
|
|
1324
|
+
"path": "/Users/agox/Documents/Prolibu/prolibu-cobalt/packages/core/src/components/co-ref-field/co-ref-field.tsx",
|
|
1325
|
+
"id": "src/components/co-ref-field/co-ref-field.tsx::RefFieldOption"
|
|
1326
|
+
}
|
|
1327
|
+
}
|
|
1328
|
+
}
|
|
1329
|
+
}, {
|
|
1330
|
+
"method": "coListReorder",
|
|
1331
|
+
"name": "coListReorder",
|
|
1332
|
+
"bubbles": true,
|
|
1333
|
+
"cancelable": true,
|
|
1334
|
+
"composed": true,
|
|
1335
|
+
"docs": {
|
|
1336
|
+
"tags": [],
|
|
1337
|
+
"text": "Re-emisi\u00F3n del drag-reorder de la lista del panel (listReorderable)."
|
|
1338
|
+
},
|
|
1339
|
+
"complexType": {
|
|
1340
|
+
"original": "{ value: string[]; item: RefFieldOption }",
|
|
1341
|
+
"resolved": "{ value: string[]; item: RefFieldOption; }",
|
|
1342
|
+
"references": {
|
|
1343
|
+
"RefFieldOption": {
|
|
1344
|
+
"location": "local",
|
|
1345
|
+
"path": "/Users/agox/Documents/Prolibu/prolibu-cobalt/packages/core/src/components/co-ref-field/co-ref-field.tsx",
|
|
1346
|
+
"id": "src/components/co-ref-field/co-ref-field.tsx::RefFieldOption"
|
|
1347
|
+
}
|
|
1348
|
+
}
|
|
1349
|
+
}
|
|
1350
|
+
}, {
|
|
1351
|
+
"method": "coEditSelected",
|
|
1352
|
+
"name": "coEditSelected",
|
|
1353
|
+
"bubbles": true,
|
|
1354
|
+
"cancelable": true,
|
|
1355
|
+
"composed": true,
|
|
1356
|
+
"docs": {
|
|
1357
|
+
"tags": [],
|
|
1358
|
+
"text": "Pencil click on the single-value trigger. Detail = selected record `_id`."
|
|
1359
|
+
},
|
|
1360
|
+
"complexType": {
|
|
1361
|
+
"original": "string",
|
|
1362
|
+
"resolved": "string",
|
|
1363
|
+
"references": {}
|
|
1364
|
+
}
|
|
1148
1365
|
}];
|
|
1149
1366
|
}
|
|
1150
1367
|
static get elementRef() { return "el"; }
|
|
@@ -1155,3 +1372,14 @@ export class CoRefField {
|
|
|
1155
1372
|
}];
|
|
1156
1373
|
}
|
|
1157
1374
|
}
|
|
1375
|
+
/**
|
|
1376
|
+
* Id del <co-option-list> del panel, target de `aria-controls` del trigger.
|
|
1377
|
+
* Constante (no aleatoria): vive en el shadow root de ESTA instancia, donde
|
|
1378
|
+
* los ids no colisionan con los de otras. Se referencia el HOST de la
|
|
1379
|
+
* primitiva — su listbox interno queda tras su propio shadow boundary y no
|
|
1380
|
+
* es direccionable desde acá (limitación conocida y aceptada).
|
|
1381
|
+
*
|
|
1382
|
+
* El trigger solo emite `aria-controls` mientras `isOpen`: el panel se monta
|
|
1383
|
+
* on-demand, así que cerrado el IDREF quedaría colgante.
|
|
1384
|
+
*/
|
|
1385
|
+
CoRefField.LIST_ID = 'co-ref-field-list';
|
|
@@ -154,7 +154,7 @@ export class CoSegmentedBar {
|
|
|
154
154
|
"references": {
|
|
155
155
|
"CoSegment": {
|
|
156
156
|
"location": "local",
|
|
157
|
-
"path": "/Users/agox/
|
|
157
|
+
"path": "/Users/agox/Documents/Prolibu/prolibu-cobalt/packages/core/src/components/co-segmented-bar/co-segmented-bar.tsx",
|
|
158
158
|
"id": "src/components/co-segmented-bar/co-segmented-bar.tsx::CoSegment"
|
|
159
159
|
}
|
|
160
160
|
}
|
|
@@ -818,9 +818,19 @@ html[data-overlayscrollbars-viewport~=scrollbarHidden] > body::-webkit-scrollbar
|
|
|
818
818
|
box-shadow: 0 0 0 2px var(--co-semantic-border-focus-ring);
|
|
819
819
|
}
|
|
820
820
|
|
|
821
|
+
/* Anillo de foco por teclado — mismo trazo que el estado abierto. */
|
|
822
|
+
.co-select__trigger:focus-visible {
|
|
823
|
+
outline: none;
|
|
824
|
+
border-color: var(--co-semantic-border-focus);
|
|
825
|
+
box-shadow: 0 0 0 2px var(--co-semantic-border-focus-ring);
|
|
826
|
+
}
|
|
827
|
+
|
|
821
828
|
.co-select--disabled .co-select__trigger {
|
|
822
829
|
background: var(--co-semantic-surface-disabled);
|
|
823
830
|
border-color: transparent;
|
|
831
|
+
/* Un focus() programático sobre el trigger deshabilitado si no pintaría el
|
|
832
|
+
anillo del :focus-visible. */
|
|
833
|
+
box-shadow: none;
|
|
824
834
|
cursor: not-allowed;
|
|
825
835
|
}
|
|
826
836
|
|
|
@@ -978,6 +988,15 @@ html[data-overlayscrollbars-viewport~=scrollbarHidden] > body::-webkit-scrollbar
|
|
|
978
988
|
background: var(--co-semantic-surface-muted);
|
|
979
989
|
}
|
|
980
990
|
|
|
991
|
+
/* Opción resaltada por teclado (`aria-activedescendant`). Va DESPUÉS de
|
|
992
|
+
* `--selected` a propósito: sobre una opción ya elegida tiene que ganar, si no
|
|
993
|
+
* el usuario de teclado pierde de vista dónde está parado. Mismo gris que el
|
|
994
|
+
* hover — el check sigue distinguiendo lo seleccionado (igual que
|
|
995
|
+
* co-option-list). */
|
|
996
|
+
.co-select__option--active {
|
|
997
|
+
background: var(--co-semantic-surface-hover);
|
|
998
|
+
}
|
|
999
|
+
|
|
981
1000
|
.co-select__option--disabled {
|
|
982
1001
|
opacity: 0.4;
|
|
983
1002
|
cursor: not-allowed;
|