@misael703/ui 1.49.0 → 1.51.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-KTK5EPQP.js → chunk-2XIFGGF2.js} +7 -7
- package/dist/{chunk-KTK5EPQP.js.map → chunk-2XIFGGF2.js.map} +1 -1
- package/dist/{chunk-A2U72HLY.mjs → chunk-3TS54SJB.mjs} +5 -5
- package/dist/{chunk-A2U72HLY.mjs.map → chunk-3TS54SJB.mjs.map} +1 -1
- package/dist/{chunk-QK3COHER.mjs → chunk-4LU36CNV.mjs} +3 -3
- package/dist/{chunk-QK3COHER.mjs.map → chunk-4LU36CNV.mjs.map} +1 -1
- package/dist/{chunk-XLKTIQTD.js → chunk-5UBYEEOF.js} +8 -8
- package/dist/{chunk-XLKTIQTD.js.map → chunk-5UBYEEOF.js.map} +1 -1
- package/dist/{chunk-VREEDSRE.js → chunk-64YL7DN5.js} +4 -4
- package/dist/{chunk-VREEDSRE.js.map → chunk-64YL7DN5.js.map} +1 -1
- package/dist/chunk-6D5UP23V.js +63 -0
- package/dist/chunk-6D5UP23V.js.map +1 -0
- package/dist/{chunk-KAQJWVXS.js → chunk-AKUGR3AX.js} +7 -7
- package/dist/{chunk-KAQJWVXS.js.map → chunk-AKUGR3AX.js.map} +1 -1
- package/dist/{chunk-BY4VPPA4.mjs → chunk-AP655IUN.mjs} +3 -3
- package/dist/{chunk-BY4VPPA4.mjs.map → chunk-AP655IUN.mjs.map} +1 -1
- package/dist/{chunk-RS74LVAT.mjs → chunk-C4XPGEU2.mjs} +4 -4
- package/dist/{chunk-RS74LVAT.mjs.map → chunk-C4XPGEU2.mjs.map} +1 -1
- package/dist/{chunk-QTSZWDZR.js → chunk-CJLCPURD.js} +5 -5
- package/dist/{chunk-QTSZWDZR.js.map → chunk-CJLCPURD.js.map} +1 -1
- package/dist/{chunk-SRSVD5AT.mjs → chunk-D6YFA5HW.mjs} +117 -6
- package/dist/chunk-D6YFA5HW.mjs.map +1 -0
- package/dist/{chunk-5BACX5CP.mjs → chunk-EE3VOAU4.mjs} +4 -4
- package/dist/{chunk-5BACX5CP.mjs.map → chunk-EE3VOAU4.mjs.map} +1 -1
- package/dist/{chunk-DQMKMRE4.js → chunk-EI2V2GGG.js} +6 -6
- package/dist/{chunk-DQMKMRE4.js.map → chunk-EI2V2GGG.js.map} +1 -1
- package/dist/{chunk-TMSEACN2.mjs → chunk-FI5U4TL5.mjs} +4 -4
- package/dist/{chunk-TMSEACN2.mjs.map → chunk-FI5U4TL5.mjs.map} +1 -1
- package/dist/{chunk-HCOJH3W3.mjs → chunk-H6ZT2DJ2.mjs} +3 -2
- package/dist/chunk-H6ZT2DJ2.mjs.map +1 -0
- package/dist/chunk-HT43MPKW.js +5 -0
- package/dist/{chunk-2KZ4NI3X.js.map → chunk-HT43MPKW.js.map} +1 -1
- package/dist/{chunk-NZNTB5OI.js → chunk-JDK4GEME.js} +2 -2
- package/dist/chunk-JDK4GEME.js.map +1 -0
- package/dist/{chunk-4IJTH556.mjs → chunk-JL77KUET.mjs} +3 -3
- package/dist/{chunk-4IJTH556.mjs.map → chunk-JL77KUET.mjs.map} +1 -1
- package/dist/chunk-JT6OOSI2.mjs +4 -0
- package/dist/{chunk-QQE3XOEM.mjs.map → chunk-JT6OOSI2.mjs.map} +1 -1
- package/dist/{chunk-AJNQDMWF.js → chunk-L5R6FKHH.js} +4 -4
- package/dist/{chunk-AJNQDMWF.js.map → chunk-L5R6FKHH.js.map} +1 -1
- package/dist/{chunk-PGTOBPHI.mjs → chunk-LDCG4KDI.mjs} +3 -3
- package/dist/{chunk-PGTOBPHI.mjs.map → chunk-LDCG4KDI.mjs.map} +1 -1
- package/dist/{chunk-2KBQSARY.mjs → chunk-MG4MFZL3.mjs} +4 -4
- package/dist/{chunk-2KBQSARY.mjs.map → chunk-MG4MFZL3.mjs.map} +1 -1
- package/dist/{chunk-SVXJ2IPG.js → chunk-MIUDP3FD.js} +8 -8
- package/dist/{chunk-SVXJ2IPG.js.map → chunk-MIUDP3FD.js.map} +1 -1
- package/dist/{chunk-WXODIWH7.js → chunk-MJMLNETS.js} +3 -2
- package/dist/chunk-MJMLNETS.js.map +1 -0
- package/dist/{chunk-KKJDF3EL.mjs → chunk-MMFYXM3J.mjs} +4 -4
- package/dist/{chunk-KKJDF3EL.mjs.map → chunk-MMFYXM3J.mjs.map} +1 -1
- package/dist/{chunk-5DFEMKK5.js → chunk-MR2KQSBB.js} +10 -10
- package/dist/{chunk-5DFEMKK5.js.map → chunk-MR2KQSBB.js.map} +1 -1
- package/dist/{chunk-YWRVGG7Q.js → chunk-N5N5K36B.js} +6 -6
- package/dist/{chunk-YWRVGG7Q.js.map → chunk-N5N5K36B.js.map} +1 -1
- package/dist/{chunk-7SMQLCIU.js → chunk-OG4IEN7J.js} +8 -8
- package/dist/{chunk-7SMQLCIU.js.map → chunk-OG4IEN7J.js.map} +1 -1
- package/dist/{chunk-LT52N2KJ.mjs → chunk-OSR32MPG.mjs} +4 -4
- package/dist/{chunk-LT52N2KJ.mjs.map → chunk-OSR32MPG.mjs.map} +1 -1
- package/dist/{chunk-64X5LNXF.mjs → chunk-PDZN6KBV.mjs} +4 -4
- package/dist/{chunk-64X5LNXF.mjs.map → chunk-PDZN6KBV.mjs.map} +1 -1
- package/dist/{chunk-JSKNG7Y2.js → chunk-Q4MSQLMS.js} +13 -13
- package/dist/{chunk-JSKNG7Y2.js.map → chunk-Q4MSQLMS.js.map} +1 -1
- package/dist/{chunk-5FIUO3RY.mjs → chunk-QMBSDSSN.mjs} +3 -3
- package/dist/{chunk-5FIUO3RY.mjs.map → chunk-QMBSDSSN.mjs.map} +1 -1
- package/dist/{chunk-OP2XWWSV.js → chunk-QUP2GEPF.js} +4 -4
- package/dist/{chunk-OP2XWWSV.js.map → chunk-QUP2GEPF.js.map} +1 -1
- package/dist/{chunk-5AC43UHU.mjs → chunk-RHS4E3R7.mjs} +4 -4
- package/dist/{chunk-5AC43UHU.mjs.map → chunk-RHS4E3R7.mjs.map} +1 -1
- package/dist/{chunk-4P2MAERZ.mjs → chunk-RSU5CPC7.mjs} +4 -4
- package/dist/{chunk-4P2MAERZ.mjs.map → chunk-RSU5CPC7.mjs.map} +1 -1
- package/dist/{chunk-MM7MT37Y.mjs → chunk-SDR7JKDF.mjs} +2 -2
- package/dist/chunk-SDR7JKDF.mjs.map +1 -0
- package/dist/{chunk-7SRJ4UVY.js → chunk-T3IZPDGQ.js} +5 -5
- package/dist/{chunk-7SRJ4UVY.js.map → chunk-T3IZPDGQ.js.map} +1 -1
- package/dist/{chunk-23U5TMYH.mjs → chunk-TS4UIWRG.mjs} +3 -3
- package/dist/{chunk-23U5TMYH.mjs.map → chunk-TS4UIWRG.mjs.map} +1 -1
- package/dist/{chunk-DHWGICRP.js → chunk-UWKP36N6.js} +121 -9
- package/dist/chunk-UWKP36N6.js.map +1 -0
- package/dist/{chunk-LL7PZ6Q3.js → chunk-UZX2SE42.js} +55 -41
- package/dist/chunk-UZX2SE42.js.map +1 -0
- package/dist/{chunk-GNRWMXHN.mjs → chunk-VNRZAYM7.mjs} +51 -37
- package/dist/chunk-VNRZAYM7.mjs.map +1 -0
- package/dist/{chunk-VZV24VNK.js → chunk-WXWEZQLX.js} +6 -6
- package/dist/{chunk-VZV24VNK.js.map → chunk-WXWEZQLX.js.map} +1 -1
- package/dist/{chunk-LWEX5XQF.js → chunk-Y6WOMG2H.js} +6 -6
- package/dist/{chunk-LWEX5XQF.js.map → chunk-Y6WOMG2H.js.map} +1 -1
- package/dist/{chunk-6NLW2VHE.mjs → chunk-YEIU5W7E.mjs} +4 -4
- package/dist/{chunk-6NLW2VHE.mjs.map → chunk-YEIU5W7E.mjs.map} +1 -1
- package/dist/chunk-YTKPENNW.mjs +41 -0
- package/dist/chunk-YTKPENNW.mjs.map +1 -0
- package/dist/{chunk-66QZFBTI.js → chunk-Z3GT7VB2.js} +10 -10
- package/dist/{chunk-66QZFBTI.js.map → chunk-Z3GT7VB2.js.map} +1 -1
- package/dist/components/AdvancedPickers.js +7 -7
- package/dist/components/AdvancedPickers.mjs +3 -3
- package/dist/components/AppShell.js +6 -5
- package/dist/components/AppShell.mjs +4 -3
- package/dist/components/Comments.js +6 -6
- package/dist/components/Comments.mjs +3 -3
- package/dist/components/Commerce.js +17 -16
- package/dist/components/Commerce.mjs +6 -5
- package/dist/components/DataTable.d.mts +19 -4
- package/dist/components/DataTable.d.ts +19 -4
- package/dist/components/DataTable.js +12 -11
- package/dist/components/DataTable.mjs +5 -4
- package/dist/components/Display.js +13 -13
- package/dist/components/Display.mjs +2 -2
- package/dist/components/Display3.js +8 -8
- package/dist/components/Display3.mjs +2 -2
- package/dist/components/Editing.d.mts +40 -1
- package/dist/components/Editing.d.ts +40 -1
- package/dist/components/Editing.js +14 -9
- package/dist/components/Editing.mjs +5 -4
- package/dist/components/Filters.js +9 -9
- package/dist/components/Filters.mjs +3 -3
- package/dist/components/Gallery.js +5 -5
- package/dist/components/Gallery.mjs +3 -3
- package/dist/components/Inputs.js +7 -7
- package/dist/components/Inputs.mjs +3 -3
- package/dist/components/InputsExtra.js +12 -12
- package/dist/components/InputsExtra.mjs +3 -3
- package/dist/components/Notifications.js +4 -4
- package/dist/components/Notifications.mjs +3 -3
- package/dist/components/Overlay.js +6 -5
- package/dist/components/Overlay.mjs +4 -3
- package/dist/components/Permissions.js +4 -4
- package/dist/components/Permissions.mjs +3 -3
- package/dist/components/Pickers.js +8 -8
- package/dist/components/Pickers.mjs +3 -3
- package/dist/components/TimeAgo.js +6 -6
- package/dist/components/TimeAgo.mjs +4 -4
- package/dist/components/Toast.js +4 -4
- package/dist/components/Toast.mjs +2 -2
- package/dist/hooks/index.d.mts +1 -0
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.js +6 -1
- package/dist/hooks/index.mjs +2 -1
- package/dist/hooks/useVirtualRows.d.mts +40 -0
- package/dist/hooks/useVirtualRows.d.ts +40 -0
- package/dist/hooks/useVirtualRows.js +13 -0
- package/dist/hooks/useVirtualRows.js.map +1 -0
- package/dist/hooks/useVirtualRows.mjs +4 -0
- package/dist/hooks/useVirtualRows.mjs.map +1 -0
- package/dist/index.d.mts +3 -2
- package/dist/index.d.ts +3 -2
- package/dist/index.js +122 -113
- package/dist/index.mjs +23 -22
- package/dist/locale/index.d.mts +2 -2
- package/dist/locale/index.d.ts +2 -2
- package/dist/locale/index.js +6 -6
- package/dist/locale/index.mjs +2 -2
- package/dist/{messages-CT40Sck2.d.ts → messages-D7YiIzCG.d.mts} +2 -0
- package/dist/{messages-CT40Sck2.d.mts → messages-D7YiIzCG.d.ts} +2 -0
- package/dist/styles.css +1 -1
- package/dist/utils/smartTime.d.mts +1 -1
- package/dist/utils/smartTime.d.ts +1 -1
- package/dist/utils/smartTime.js +6 -6
- package/dist/utils/smartTime.mjs +2 -2
- package/package.json +1 -1
- package/dist/chunk-2KZ4NI3X.js +0 -5
- package/dist/chunk-DHWGICRP.js.map +0 -1
- package/dist/chunk-GNRWMXHN.mjs.map +0 -1
- package/dist/chunk-HCOJH3W3.mjs.map +0 -1
- package/dist/chunk-LL7PZ6Q3.js.map +0 -1
- package/dist/chunk-MM7MT37Y.mjs.map +0 -1
- package/dist/chunk-NZNTB5OI.js.map +0 -1
- package/dist/chunk-QQE3XOEM.mjs +0 -4
- package/dist/chunk-SRSVD5AT.mjs.map +0 -1
- package/dist/chunk-WXODIWH7.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/locale/messages.ts"],"names":[],"mappings":";AA6MO,SAAS,MAAA,CAAO,UAAkB,IAAA,EAA+C;AACtF,EAAA,OAAO,QAAA,CAAS,OAAA;AAAA,IAAQ,YAAA;AAAA,IAAc,CAAC,KAAA,EAAO,GAAA,KAC5C,MAAA,CAAO,UAAU,cAAA,CAAe,IAAA,CAAK,IAAA,EAAM,GAAG,CAAA,GAAI,MAAA,CAAO,IAAA,CAAK,GAAG,CAAC,CAAA,GAAI;AAAA,GACxE;AACF","file":"chunk-SDR7JKDF.mjs","sourcesContent":["/**\n * Flat dictionary of UI strings used by the kit. Keys are dot-separated\n * namespaces (component or area). Values may include `{var}` placeholders\n * that get substituted via `format()`.\n */\nexport interface UiKitMessages {\n // Generic actions\n 'common.close': string;\n 'common.cancel': string;\n 'common.confirm': string;\n 'common.apply': string;\n 'common.clear': string;\n 'common.edit': string;\n 'common.empty': string;\n 'common.loading': string;\n 'common.search': string;\n 'common.noResults': string;\n\n // Overlay\n 'modal.close': string;\n 'drawer.close': string;\n 'toast.close': string;\n\n // DataTable\n 'table.empty': string;\n 'table.selectAll': string;\n /** Template: \"Seleccionar {label}\" */\n 'table.selectRow': string;\n /** Template: \"Ver {label}\" — accessible name of an interactive row. */\n 'table.rowAction': string;\n /** Template: \"Expandir detalle de {label}\" — accessible name of the row-expansion toggle. */\n 'table.expandRow': string;\n /** Accessible name of the (visually empty) expansion-toggle column header. */\n 'table.expandColumn': string;\n /** ColumnToggle trigger label / menu name (\"Columnas\"). */\n 'table.columns': string;\n /** EditableCell: shown (via title/aria) when an async commit rejects. */\n 'editable.commitError': string;\n\n // AppShell\n 'appshell.mainNav': string;\n 'appshell.breadcrumb': string;\n /** Accessible name for the kit's built-in menu toggle (opt-in via `showMenuToggle`). */\n 'appshell.toggleMenu': string;\n\n // TimeAgo / smart-time helpers\n /** Sub-minute past: \"ahora\". */\n 'timeAgo.now': string;\n /** Sub-minute future: \"pronto\". */\n 'timeAgo.soon': string;\n /** Template: \"hace {n} min\" (past, 1-59 minutes). */\n 'timeAgo.minAgo': string;\n /** Template: \"en {n} min\" (future, 1-59 minutes). */\n 'timeAgo.minIn': string;\n /** Same-day prefix: \"hoy\". */\n 'timeAgo.today': string;\n /** Day-before prefix: \"ayer\". */\n 'timeAgo.yesterday': string;\n /** Day-after prefix: \"mañana\". */\n 'timeAgo.tomorrow': string;\n /** Compact weekday names, index 0 = Sunday (matches `Date.prototype.getDay()`). */\n 'timeAgo.weekdaysShort': string[];\n /** Compact month names, index 0 = January (matches `Date.prototype.getMonth()`). */\n 'timeAgo.monthsShort': string[];\n\n // Notifications\n 'notifications.button': string;\n /** Template: \" ({n} sin leer)\" */\n 'notifications.unreadSuffix': string;\n 'notifications.empty': string;\n 'notifications.panel': string;\n 'notifications.title': string;\n 'notifications.markAllRead': string;\n 'notifications.clear': string;\n\n // Filters\n 'filters.panel': string;\n 'filters.clear': string;\n 'filters.bulkActions': string;\n 'filters.deselectAll': string;\n 'filters.sortBy': string;\n /** Template: \"{n} seleccionado\" (used when n === 1) */\n 'filters.selectedOne': string;\n /** Template: \"{n} seleccionados\" (used when n !== 1) */\n 'filters.selectedMany': string;\n\n // Editing\n 'transfer.available': string;\n 'transfer.assigned': string;\n 'transfer.assignSelected': string;\n 'transfer.removeSelected': string;\n 'transfer.empty': string;\n 'descList.edit': string;\n 'diff.label': string;\n 'diff.field': string;\n 'diff.before': string;\n 'diff.after': string;\n\n // Permissions\n 'permissions.markAll': string;\n 'permissions.unmarkAll': string;\n 'permissions.action': string;\n /** Template: \"{action} para {role}\" */\n 'permissions.cellLabel': string;\n\n // Comments\n 'comments.placeholder': string;\n 'comments.send': string;\n 'comments.internalTag': string;\n 'comments.internalOnly': string;\n 'attachments.empty': string;\n /** Template: \"Eliminar {name}\" */\n 'attachments.remove': string;\n /** Template: \"Descargar {name}\" */\n 'attachments.download': string;\n\n // Gallery\n 'gallery.thumbnails': string;\n 'gallery.viewer': string;\n 'gallery.prev': string;\n 'gallery.next': string;\n 'gallery.close': string;\n /** Template: \"Imagen {n}\" */\n 'gallery.imageNumber': string;\n\n // Display\n 'alert.close': string;\n 'spinner.loading': string;\n 'chip.remove': string;\n\n // Display3 — Calendar\n 'calendar.prevMonth': string;\n 'calendar.nextMonth': string;\n 'calendar.expand': string;\n 'calendar.collapse': string;\n /** Mon, Tue, Wed, Thu, Fri, Sat, Sun (in array order, kit assumes Mon-first) */\n 'calendar.weekdays': readonly [string, string, string, string, string, string, string];\n 'calendar.months': readonly [\n string, string, string, string, string, string,\n string, string, string, string, string, string,\n ];\n\n // Pickers\n 'picker.openCalendar': string;\n 'picker.clearSelection': string;\n 'picker.selectRange': string;\n 'picker.searchCommands': string;\n 'picker.commandPalette': string;\n 'picker.prevYear': string;\n 'picker.nextYear': string;\n 'picker.prevDecade': string;\n 'picker.nextDecade': string;\n 'picker.selectYear': string;\n 'picker.selectMonth': string;\n /**\n * Single-letter weekday initials used by compact calendar grids (DatePicker,\n * DateRangePicker). Mon-first to match the kit's calendars.\n */\n 'picker.weekdaysShort': readonly [string, string, string, string, string, string, string];\n /** Template: \"Quitar {label}\" */\n 'combobox.remove': string;\n 'fileUpload.title': string;\n\n // Inputs\n 'pagination.label': string;\n 'pagination.prev': string;\n 'pagination.next': string;\n /** Template: \"{from}–{to} de {total}\" */\n 'pagination.range': string;\n 'pagination.rowsPerPage': string;\n 'numberInput.decrement': string;\n 'numberInput.increment': string;\n\n // Commerce\n 'commerce.quantity': string;\n 'commerce.decreaseQty': string;\n 'commerce.increaseQty': string;\n 'commerce.removeFromCart': string;\n /** Template: \"Quitar {name}\" */\n 'commerce.removeItem': string;\n 'commerce.addFavorite': string;\n 'commerce.removeFavorite': string;\n 'commerce.applyCoupon': string;\n 'commerce.cartTitle': string;\n 'commerce.cartEmpty': string;\n 'commerce.subtotal': string;\n 'commerce.checkout': string;\n 'commerce.promoPlaceholder': string;\n 'commerce.promoInvalid': string;\n 'commerce.shippingAchieved': string;\n /** Template before {amount} placeholder: \"Te falta \" (suffix \" para envío gratis\"). Split into two so consumers can swap word order. */\n 'commerce.shippingPrefix': string;\n 'commerce.shippingSuffix': string;\n\n // Tags input\n /** Template: \"Quitar {tag}\" */\n 'tagsInput.remove': string;\n 'tagsInput.placeholder': string;\n}\n\n/**\n * Replace `{var}` placeholders in a template string with values from `vars`.\n * Missing vars are left as-is, so a typo surfaces during dev instead of being\n * silently dropped.\n */\nexport function format(template: string, vars: Record<string, string | number>): string {\n return template.replace(/\\{(\\w+)\\}/g, (match, key) =>\n Object.prototype.hasOwnProperty.call(vars, key) ? String(vars[key]) : match\n );\n}\n"]}
|
|
@@ -5,7 +5,7 @@ var chunkD2H4VZVL_js = require('./chunk-D2H4VZVL.js');
|
|
|
5
5
|
var chunkFL4ZCWUF_js = require('./chunk-FL4ZCWUF.js');
|
|
6
6
|
var chunkNPXEZCTA_js = require('./chunk-NPXEZCTA.js');
|
|
7
7
|
var chunk55P5FA5Q_js = require('./chunk-55P5FA5Q.js');
|
|
8
|
-
var
|
|
8
|
+
var chunkMJMLNETS_js = require('./chunk-MJMLNETS.js');
|
|
9
9
|
var chunkC4AKMVDZ_js = require('./chunk-C4AKMVDZ.js');
|
|
10
10
|
var chunkPASF6T4H_js = require('./chunk-PASF6T4H.js');
|
|
11
11
|
var React = require('react');
|
|
@@ -47,7 +47,7 @@ function Modal({
|
|
|
47
47
|
const ref = React__namespace.useRef(null);
|
|
48
48
|
const downOnBackdrop = React__namespace.useRef(false);
|
|
49
49
|
const titleId = React__namespace.useId();
|
|
50
|
-
const t =
|
|
50
|
+
const t = chunkMJMLNETS_js.useLocale();
|
|
51
51
|
const { mounted, closing } = chunkFL4ZCWUF_js.useDelayedUnmount(open, EXIT_MS);
|
|
52
52
|
chunkNPXEZCTA_js.useEscape(open, onClose, closeOnEsc);
|
|
53
53
|
chunk55P5FA5Q_js.useFocusTrap(ref, open);
|
|
@@ -102,7 +102,7 @@ function Drawer({
|
|
|
102
102
|
const ref = React__namespace.useRef(null);
|
|
103
103
|
const downOnBackdrop = React__namespace.useRef(false);
|
|
104
104
|
const titleId = React__namespace.useId();
|
|
105
|
-
const t =
|
|
105
|
+
const t = chunkMJMLNETS_js.useLocale();
|
|
106
106
|
const { mounted, closing } = chunkFL4ZCWUF_js.useDelayedUnmount(open, EXIT_MS);
|
|
107
107
|
chunkNPXEZCTA_js.useEscape(open, onClose, closeOnEsc);
|
|
108
108
|
chunk55P5FA5Q_js.useFocusTrap(ref, open);
|
|
@@ -146,5 +146,5 @@ function Drawer({
|
|
|
146
146
|
|
|
147
147
|
exports.Drawer = Drawer;
|
|
148
148
|
exports.Modal = Modal;
|
|
149
|
-
//# sourceMappingURL=chunk-
|
|
150
|
-
//# sourceMappingURL=chunk-
|
|
149
|
+
//# sourceMappingURL=chunk-T3IZPDGQ.js.map
|
|
150
|
+
//# sourceMappingURL=chunk-T3IZPDGQ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Overlay.tsx"],"names":["React","useLocale","useDelayedUnmount","useEscape","useFocusTrap","useScrollLock","createPortal","jsx","cx","jsxs","X"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,IAAM,OAAA,GAAU,GAAA;AAcT,SAAS,KAAA,CAAM;AAAA,EACpB,IAAA;AAAA,EAAM,OAAA;AAAA,EAAS,KAAA;AAAA,EAAO,QAAA;AAAA,EAAU,MAAA;AAAA,EAAQ,IAAA,GAAO,IAAA;AAAA,EAC/C,eAAA,GAAkB,IAAA;AAAA,EAAM,UAAA,GAAa,IAAA;AAAA,EAAM;AAC7C,CAAA,EAAiB;AACf,EAAA,MAAM,GAAA,GAAYA,wBAAuB,IAAI,CAAA;AAI7C,EAAA,MAAM,cAAA,GAAuBA,wBAAO,KAAK,CAAA;AACzC,EAAA,MAAM,UAAgBA,gBAAA,CAAA,KAAA,EAAM;AAC5B,EAAA,MAAM,IAAIC,0BAAA,EAAU;AAKpB,EAAA,MAAM,EAAE,OAAA,EAAS,OAAA,EAAQ,GAAIC,kCAAA,CAAkB,MAAM,OAAO,CAAA;AAC5D,EAAAC,0BAAA,CAAU,IAAA,EAAM,SAAS,UAAU,CAAA;AACnC,EAAAC,6BAAA,CAAa,KAAK,IAAI,CAAA;AACtB,EAAAC,8BAAA,CAAc,IAAI,CAAA;AAClB,EAAA,IAAI,CAAC,OAAA,IAAW,OAAO,QAAA,KAAa,aAAa,OAAO,IAAA;AACxD,EAAA,OAAOC,qBAAA;AAAA,oBACLC,cAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAWC,mBAAA,CAAG,gBAAA,EAAkB,OAAA,IAAW,YAAY,CAAA;AAAA,QACvD,WAAA,EAAa,CAAC,CAAA,KAAM;AAAE,UAAA,cAAA,CAAe,OAAA,GAAU,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,aAAA;AAAA,QAAe,CAAA;AAAA,QAC7E,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,UAAA,IAAI,mBAAmB,cAAA,CAAe,OAAA,IAAW,EAAE,MAAA,KAAW,CAAA,CAAE,eAAe,OAAA,EAAQ;AACvF,UAAA,cAAA,CAAe,OAAA,GAAU,KAAA;AAAA,QAC3B,CAAA;AAAA,QAEA,QAAA,kBAAAC,eAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,GAAA;AAAA,YACA,IAAA,EAAK,QAAA;AAAA,YACL,YAAA,EAAW,MAAA;AAAA,YACX,iBAAA,EAAiB,QAAQ,OAAA,GAAU,MAAA;AAAA,YACnC,SAAA,EAAWD,oBAAG,OAAA,EAAS,CAAA,OAAA,EAAU,IAAI,CAAA,CAAA,EAAI,OAAA,IAAW,cAAc,SAAS,CAAA;AAAA,YAE1E,QAAA,EAAA;AAAA,cAAA,KAAA,oBACCC,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACb,QAAA,EAAA;AAAA,gCAAAF,cAAA,CAAC,KAAA,EAAA,EAAI,EAAA,EAAI,OAAA,EAAS,SAAA,EAAU,gBAAgB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,+CACjD,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAU,gBAAe,OAAA,EAAS,OAAA,EAAS,YAAA,EAAY,CAAA,CAAE,aAAa,CAAA,EAAG,QAAA,kBAAAA,cAAA,CAACG,kBAAA,EAAA,EAAE,IAAA,EAAM,IAAI,CAAA,EAAE;AAAA,eAAA,EAChH,CAAA;AAAA,8BAEFH,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EAAe,QAAA,EAAS,CAAA;AAAA,cACtC,MAAA,oBAAUA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAiB,QAAA,EAAA,MAAA,EAAO;AAAA;AAAA;AAAA;AACpD;AAAA,KACF;AAAA,IACA,QAAA,CAAS;AAAA,GACX;AACF;AAMO,SAAS,MAAA,CAAO;AAAA,EACrB,IAAA;AAAA,EAAM,OAAA;AAAA,EAAS,KAAA;AAAA,EAAO,QAAA;AAAA,EAAU,MAAA;AAAA,EAAQ,IAAA,GAAO,OAAA;AAAA,EAC/C,eAAA,GAAkB,IAAA;AAAA,EAAM,UAAA,GAAa,IAAA;AAAA,EAAM;AAC7C,CAAA,EAAgB;AACd,EAAA,MAAM,GAAA,GAAYP,wBAAuB,IAAI,CAAA;AAI7C,EAAA,MAAM,cAAA,GAAuBA,wBAAO,KAAK,CAAA;AACzC,EAAA,MAAM,UAAgBA,gBAAA,CAAA,KAAA,EAAM;AAC5B,EAAA,MAAM,IAAIC,0BAAA,EAAU;AACpB,EAAA,MAAM,EAAE,OAAA,EAAS,OAAA,EAAQ,GAAIC,kCAAA,CAAkB,MAAM,OAAO,CAAA;AAC5D,EAAAC,0BAAA,CAAU,IAAA,EAAM,SAAS,UAAU,CAAA;AACnC,EAAAC,6BAAA,CAAa,KAAK,IAAI,CAAA;AACtB,EAAAC,8BAAA,CAAc,IAAI,CAAA;AAClB,EAAA,IAAI,CAAC,OAAA,IAAW,OAAO,QAAA,KAAa,aAAa,OAAO,IAAA;AACxD,EAAA,OAAOC,qBAAA;AAAA,oBACLC,cAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAWC,mBAAA,CAAG,iBAAA,EAAmB,OAAA,IAAW,YAAY,CAAA;AAAA,QACxD,WAAA,EAAa,CAAC,CAAA,KAAM;AAAE,UAAA,cAAA,CAAe,OAAA,GAAU,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,aAAA;AAAA,QAAe,CAAA;AAAA,QAC7E,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,UAAA,IAAI,mBAAmB,cAAA,CAAe,OAAA,IAAW,EAAE,MAAA,KAAW,CAAA,CAAE,eAAe,OAAA,EAAQ;AACvF,UAAA,cAAA,CAAe,OAAA,GAAU,KAAA;AAAA,QAC3B,CAAA;AAAA,QAEA,QAAA,kBAAAC,eAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,GAAA;AAAA,YACA,IAAA,EAAK,QAAA;AAAA,YACL,YAAA,EAAW,MAAA;AAAA,YACX,iBAAA,EAAiB,QAAQ,OAAA,GAAU,MAAA;AAAA,YACnC,SAAA,EAAWD,oBAAG,QAAA,EAAU,CAAA,QAAA,EAAW,IAAI,CAAA,CAAA,EAAI,OAAA,IAAW,cAAc,SAAS,CAAA;AAAA,YAE5E,QAAA,EAAA;AAAA,cAAA,KAAA,oBACCC,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,gCAAAF,cAAA,CAAC,KAAA,EAAA,EAAI,EAAA,EAAI,OAAA,EAAS,SAAA,EAAU,iBAAiB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,+CAClD,QAAA,EAAA,EAAO,IAAA,EAAK,QAAA,EAAS,SAAA,EAAU,iBAAgB,OAAA,EAAS,OAAA,EAAS,YAAA,EAAY,CAAA,CAAE,cAAc,CAAA,EAAG,QAAA,kBAAAA,cAAA,CAACG,kBAAA,EAAA,EAAE,IAAA,EAAM,IAAI,CAAA,EAAE;AAAA,eAAA,EAClH,CAAA;AAAA,8BAEFH,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cAAA,EAAgB,QAAA,EAAS,CAAA;AAAA,cACvC,MAAA,oBAAUA,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAkB,QAAA,EAAA,MAAA,EAAO;AAAA;AAAA;AAAA;AACrD;AAAA,KACF;AAAA,IACA,QAAA,CAAS;AAAA,GACX;AACF","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/components/Overlay.tsx"],"names":["React","useLocale","useDelayedUnmount","useEscape","useFocusTrap","useScrollLock","createPortal","jsx","cx","jsxs","X"],"mappings":"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","file":"chunk-T3IZPDGQ.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { createPortal } from 'react-dom';\nimport { cx } from '../utils/cx';\nimport { X } from './Icons';\nimport { useLocale } from '../locale/LocaleProvider';\nimport { useDelayedUnmount } from '../hooks/useDelayedUnmount';\nimport { useFocusTrap, useEscape, useScrollLock } from '../hooks';\n\n// Exit animation duration in ms. Must match `--duration-exit` and the\n// `is-closing` keyframes in src/styles/index.css (`.modal-backdrop`,\n// `.drawer-backdrop`).\nconst EXIT_MS = 150;\n\nexport interface OverlayProps {\n open: boolean;\n onClose: () => void;\n title?: React.ReactNode;\n children?: React.ReactNode;\n footer?: React.ReactNode;\n size?: 'sm' | 'md' | 'lg';\n closeOnBackdrop?: boolean;\n closeOnEsc?: boolean;\n className?: string;\n}\n\nexport function Modal({\n open, onClose, title, children, footer, size = 'md',\n closeOnBackdrop = true, closeOnEsc = true, className,\n}: OverlayProps) {\n const ref = React.useRef<HTMLDivElement>(null);\n // True only when the press both started AND ended on the backdrop itself.\n // Fixes: press inside (e.g. text-selecting in an input) released over the\n // backdrop must NOT dismiss.\n const downOnBackdrop = React.useRef(false);\n const titleId = React.useId();\n const t = useLocale();\n // useDelayedUnmount keeps the DOM mounted during exit animation. The\n // a11y/scroll-lock hooks still consume `open` (the user's intent), not\n // `mounted` — we don't want to trap focus or block scroll while\n // animating out.\n const { mounted, closing } = useDelayedUnmount(open, EXIT_MS);\n useEscape(open, onClose, closeOnEsc);\n useFocusTrap(ref, open);\n useScrollLock(open);\n if (!mounted || typeof document === 'undefined') return null;\n return createPortal(\n <div\n className={cx('modal-backdrop', closing && 'is-closing')}\n onMouseDown={(e) => { downOnBackdrop.current = e.target === e.currentTarget; }}\n onClick={(e) => {\n if (closeOnBackdrop && downOnBackdrop.current && e.target === e.currentTarget) onClose();\n downOnBackdrop.current = false;\n }}\n >\n <div\n ref={ref}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n className={cx('modal', `modal--${size}`, closing && 'is-closing', className)}\n >\n {title && (\n <div className=\"modal__header\">\n <div id={titleId} className=\"modal__title\">{title}</div>\n <button type=\"button\" className=\"modal__close\" onClick={onClose} aria-label={t['modal.close']}><X size={18} /></button>\n </div>\n )}\n <div className=\"modal__body\">{children}</div>\n {footer && <div className=\"modal__footer\">{footer}</div>}\n </div>\n </div>,\n document.body\n );\n}\n\nexport interface DrawerProps extends OverlayProps {\n side?: 'left' | 'right';\n}\n\nexport function Drawer({\n open, onClose, title, children, footer, side = 'right',\n closeOnBackdrop = true, closeOnEsc = true, className,\n}: DrawerProps) {\n const ref = React.useRef<HTMLDivElement>(null);\n // True only when the press both started AND ended on the backdrop itself.\n // Fixes: press inside (e.g. text-selecting in an input) released over the\n // backdrop must NOT dismiss.\n const downOnBackdrop = React.useRef(false);\n const titleId = React.useId();\n const t = useLocale();\n const { mounted, closing } = useDelayedUnmount(open, EXIT_MS);\n useEscape(open, onClose, closeOnEsc);\n useFocusTrap(ref, open);\n useScrollLock(open);\n if (!mounted || typeof document === 'undefined') return null;\n return createPortal(\n <div\n className={cx('drawer-backdrop', closing && 'is-closing')}\n onMouseDown={(e) => { downOnBackdrop.current = e.target === e.currentTarget; }}\n onClick={(e) => {\n if (closeOnBackdrop && downOnBackdrop.current && e.target === e.currentTarget) onClose();\n downOnBackdrop.current = false;\n }}\n >\n <div\n ref={ref}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n className={cx('drawer', `drawer--${side}`, closing && 'is-closing', className)}\n >\n {title && (\n <div className=\"drawer__header\">\n <div id={titleId} className=\"drawer__title\">{title}</div>\n <button type=\"button\" className=\"drawer__close\" onClick={onClose} aria-label={t['drawer.close']}><X size={18} /></button>\n </div>\n )}\n <div className=\"drawer__body\">{children}</div>\n {footer && <div className=\"drawer__footer\">{footer}</div>}\n </div>\n </div>,\n document.body\n );\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
'use client';
|
|
2
|
-
import { format } from './chunk-
|
|
2
|
+
import { format } from './chunk-SDR7JKDF.mjs';
|
|
3
3
|
|
|
4
4
|
// src/utils/smartTime.ts
|
|
5
5
|
var MINUTE_MS = 6e4;
|
|
@@ -82,5 +82,5 @@ function smartDate(iso, locale, now) {
|
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
export { formatIsoDate, formatIsoDateTime, smartDate, smartDateTime };
|
|
85
|
-
//# sourceMappingURL=chunk-
|
|
86
|
-
//# sourceMappingURL=chunk-
|
|
85
|
+
//# sourceMappingURL=chunk-TS4UIWRG.mjs.map
|
|
86
|
+
//# sourceMappingURL=chunk-TS4UIWRG.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/smartTime.ts"],"names":["d"],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/utils/smartTime.ts"],"names":["d"],"mappings":"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","file":"chunk-TS4UIWRG.mjs","sourcesContent":["import { format, type UiKitMessages } from '../locale/messages';\n\n// Smart time helpers — deterministic, Intl-free. SSR-safe because no\n// Intl.DateTimeFormat is involved; the only environment-dependent input\n// is `now`, which the consumer can inject for testing or for\n// hydration-safe rendering (TimeAgo flips from absolute to relative\n// post-mount). TZ follows the runtime — pass `now` from a known TZ if\n// you need cross-TZ consistency.\n\nconst MINUTE_MS = 60_000;\nconst DAY_MS = 86_400_000;\n\n// Day-precision inputs (\"YYYY-MM-DD\" with no time, or \"YYYY-MM-DDT00:00:00Z\"\n// from APIs that don't carry a real time-of-day) parse as UTC midnight by\n// the JS spec. In a negative TZ that lands on the previous calendar day\n// — the user expects the day they typed, not a TZ shift. We normalise\n// both forms to LOCAL midnight of the same calendar day. Timestamps with\n// a real time-of-day fall through to the standard parser.\nconst DATE_ONLY_RE = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\nconst DAY_UTC_RE = /^(\\d{4})-(\\d{2})-(\\d{2})T00:00:00(?:\\.0+)?Z$/;\n\nfunction parseIso(iso: string): Date | null {\n const dateOnly = DATE_ONLY_RE.exec(iso) ?? DAY_UTC_RE.exec(iso);\n if (dateOnly) {\n const [, y, m, d] = dateOnly;\n return new Date(Number(y), Number(m) - 1, Number(d));\n }\n const d = new Date(iso);\n return Number.isNaN(d.getTime()) ? null : d;\n}\n\nfunction pad2(n: number): string {\n return n < 10 ? `0${n}` : String(n);\n}\n\n// Day-precision markers (T00:00:00Z from Bsale/APIs that don't carry a\n// real time) parse as midnight in local TZ — checking local h/m matches\n// what the user sees. Without this, the smart formatter would render\n// \"mié 00:00\" for every day-precision value, which is noise.\nfunction hasMeaningfulTime(d: Date): boolean {\n return d.getHours() !== 0 || d.getMinutes() !== 0;\n}\n\nfunction startOfDay(d: Date): number {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate()).getTime();\n}\n\nfunction dayDiff(target: Date, ref: Date): number {\n return Math.round((startOfDay(target) - startOfDay(ref)) / DAY_MS);\n}\n\nfunction timeOfDay(d: Date): string {\n return `${pad2(d.getHours())}:${pad2(d.getMinutes())}`;\n}\n\nfunction dateOnlyText(d: Date, ref: Date, locale: UiKitMessages): string {\n const months = locale['timeAgo.monthsShort'];\n const base = `${d.getDate()} ${months[d.getMonth()]}`;\n return d.getFullYear() === ref.getFullYear() ? base : `${base} ${d.getFullYear()}`;\n}\n\n/**\n * Absolute date in compact form. Same-year omits the year (\"12 mar\");\n * different year appends it (\"12 mar 2025\"). Ignores time-of-day.\n */\nexport function formatIsoDate(iso: string, locale: UiKitMessages, now?: Date): string {\n const d = parseIso(iso);\n if (!d) return '';\n return dateOnlyText(d, now ?? new Date(), locale);\n}\n\n/**\n * Absolute date-time in compact form. Adds \", HH:MM\" only when the\n * input carries a meaningful time-of-day (see {@link hasMeaningfulTime}).\n */\nexport function formatIsoDateTime(iso: string, locale: UiKitMessages, now?: Date): string {\n const d = parseIso(iso);\n if (!d) return '';\n const base = dateOnlyText(d, now ?? new Date(), locale);\n return hasMeaningfulTime(d) ? `${base}, ${timeOfDay(d)}` : base;\n}\n\n/**\n * Adaptive date-time. Renders the most informative compact label given\n * the distance between `iso` and `now` (default: `new Date()`):\n * `<1 min` → \"ahora\" / \"pronto\"; `<60 min` → \"hace N min\" / \"en N min\";\n * same day → \"hoy HH:MM\"; ±1 day → \"ayer HH:MM\" / \"mañana HH:MM\";\n * `<7 days` → \"lun HH:MM\"; same year → \"12 mar\"; else \"12 mar 2025\".\n * The time-of-day portion is dropped when the input lacks one.\n */\nexport function smartDateTime(iso: string, locale: UiKitMessages, now?: Date): string {\n const d = parseIso(iso);\n if (!d) return '';\n const ref = now ?? new Date();\n const deltaMs = d.getTime() - ref.getTime();\n const deltaMin = Math.round(deltaMs / MINUTE_MS);\n const absMin = Math.abs(deltaMin);\n if (absMin < 1) return deltaMs < 0 ? locale['timeAgo.now'] : locale['timeAgo.soon'];\n if (absMin < 60) {\n return deltaMs < 0\n ? format(locale['timeAgo.minAgo'], { n: absMin })\n : format(locale['timeAgo.minIn'], { n: absMin });\n }\n const meaningful = hasMeaningfulTime(d);\n const dd = dayDiff(d, ref);\n const tod = meaningful ? ` ${timeOfDay(d)}` : '';\n if (dd === 0) return meaningful ? `${locale['timeAgo.today']} ${timeOfDay(d)}` : locale['timeAgo.today'];\n if (dd === -1) return meaningful ? `${locale['timeAgo.yesterday']} ${timeOfDay(d)}` : locale['timeAgo.yesterday'];\n if (dd === 1) return meaningful ? `${locale['timeAgo.tomorrow']} ${timeOfDay(d)}` : locale['timeAgo.tomorrow'];\n if (Math.abs(dd) < 7) {\n const weekdays = locale['timeAgo.weekdaysShort'];\n return `${weekdays[d.getDay()]}${tod}`;\n }\n return dateOnlyText(d, ref, locale);\n}\n\n/**\n * Adaptive date (date-only). Same scale as {@link smartDateTime} but\n * without the HH:MM portion — useful when the consumer wants\n * coarse-grained labels like \"hoy\" / \"lun\" / \"12 mar\" regardless of\n * whether the input carries a time-of-day.\n */\nexport function smartDate(iso: string, locale: UiKitMessages, now?: Date): string {\n const d = parseIso(iso);\n if (!d) return '';\n const ref = now ?? new Date();\n const dd = dayDiff(d, ref);\n if (dd === 0) return locale['timeAgo.today'];\n if (dd === -1) return locale['timeAgo.yesterday'];\n if (dd === 1) return locale['timeAgo.tomorrow'];\n if (Math.abs(dd) < 7) return locale['timeAgo.weekdaysShort'][d.getDay()];\n return dateOnlyText(d, ref, locale);\n}\n"]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var chunkT3IZPDGQ_js = require('./chunk-T3IZPDGQ.js');
|
|
5
5
|
var chunk6SSTTJV4_js = require('./chunk-6SSTTJV4.js');
|
|
6
|
-
var
|
|
6
|
+
var chunkMJMLNETS_js = require('./chunk-MJMLNETS.js');
|
|
7
7
|
var chunkC4AKMVDZ_js = require('./chunk-C4AKMVDZ.js');
|
|
8
8
|
var chunkPASF6T4H_js = require('./chunk-PASF6T4H.js');
|
|
9
9
|
var React = require('react');
|
|
@@ -42,7 +42,7 @@ function ConfirmDialog({
|
|
|
42
42
|
}) {
|
|
43
43
|
const [busy, setBusy] = React__namespace.useState(false);
|
|
44
44
|
const isBusy = loading ?? busy;
|
|
45
|
-
const t =
|
|
45
|
+
const t = chunkMJMLNETS_js.useLocale();
|
|
46
46
|
const confirmText = confirmLabel ?? t["common.confirm"];
|
|
47
47
|
const cancelText = cancelLabel ?? t["common.cancel"];
|
|
48
48
|
const handleConfirm = async () => {
|
|
@@ -55,7 +55,7 @@ function ConfirmDialog({
|
|
|
55
55
|
}
|
|
56
56
|
};
|
|
57
57
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
58
|
-
|
|
58
|
+
chunkT3IZPDGQ_js.Modal,
|
|
59
59
|
{
|
|
60
60
|
open,
|
|
61
61
|
onClose,
|
|
@@ -86,7 +86,7 @@ function DescriptionList({ children, className, ...rest }) {
|
|
|
86
86
|
return /* @__PURE__ */ jsxRuntime.jsx("dl", { className: chunkPASF6T4H_js.cx("desc-list", className), ...rest, children });
|
|
87
87
|
}
|
|
88
88
|
function DescriptionListItem({ label, value, onEdit, editable }) {
|
|
89
|
-
const t =
|
|
89
|
+
const t = chunkMJMLNETS_js.useLocale();
|
|
90
90
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
91
91
|
/* @__PURE__ */ jsxRuntime.jsx("dt", { className: "desc-list__label", children: label }),
|
|
92
92
|
/* @__PURE__ */ jsxRuntime.jsxs("dd", { className: "desc-list__value", children: [
|
|
@@ -96,7 +96,7 @@ function DescriptionListItem({ label, value, onEdit, editable }) {
|
|
|
96
96
|
] });
|
|
97
97
|
}
|
|
98
98
|
function DiffViewer({ entries, className, ...rest }) {
|
|
99
|
-
const t =
|
|
99
|
+
const t = chunkMJMLNETS_js.useLocale();
|
|
100
100
|
const beforeLabel = typeof t["diff.before"] === "string" ? t["diff.before"] : void 0;
|
|
101
101
|
const afterLabel = typeof t["diff.after"] === "string" ? t["diff.after"] : void 0;
|
|
102
102
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkPASF6T4H_js.cx("diff", className), role: "table", "aria-label": t["diff.label"], ...rest, children: [
|
|
@@ -122,7 +122,7 @@ function TransferList({
|
|
|
122
122
|
}) {
|
|
123
123
|
const [leftChecked, setLeftChecked] = React__namespace.useState(/* @__PURE__ */ new Set());
|
|
124
124
|
const [rightChecked, setRightChecked] = React__namespace.useState(/* @__PURE__ */ new Set());
|
|
125
|
-
const t =
|
|
125
|
+
const t = chunkMJMLNETS_js.useLocale();
|
|
126
126
|
const srcTitle = sourceTitle ?? t["transfer.available"];
|
|
127
127
|
const selTitle = selectedTitle ?? t["transfer.assigned"];
|
|
128
128
|
const selectedIds = React__namespace.useMemo(
|
|
@@ -188,11 +188,123 @@ function TransferList({
|
|
|
188
188
|
renderColumn(selTitle, right, rightChecked, setRightChecked)
|
|
189
189
|
] });
|
|
190
190
|
}
|
|
191
|
+
function EditableCell({
|
|
192
|
+
value,
|
|
193
|
+
onCommit,
|
|
194
|
+
type = "text",
|
|
195
|
+
formatDisplay,
|
|
196
|
+
validate,
|
|
197
|
+
disabled,
|
|
198
|
+
placeholder,
|
|
199
|
+
ariaLabel,
|
|
200
|
+
className
|
|
201
|
+
}) {
|
|
202
|
+
const t = chunkMJMLNETS_js.useLocale();
|
|
203
|
+
const [editing, setEditing] = React__namespace.useState(false);
|
|
204
|
+
const [draft, setDraft] = React__namespace.useState(value);
|
|
205
|
+
const [pending, setPending] = React__namespace.useState(false);
|
|
206
|
+
const [error, setError] = React__namespace.useState(null);
|
|
207
|
+
const inputRef = React__namespace.useRef(null);
|
|
208
|
+
const cancelledRef = React__namespace.useRef(false);
|
|
209
|
+
const startEdit = () => {
|
|
210
|
+
if (disabled) return;
|
|
211
|
+
setDraft(value);
|
|
212
|
+
setError(null);
|
|
213
|
+
setEditing(true);
|
|
214
|
+
};
|
|
215
|
+
React__namespace.useEffect(() => {
|
|
216
|
+
if (editing) {
|
|
217
|
+
inputRef.current?.focus();
|
|
218
|
+
inputRef.current?.select();
|
|
219
|
+
}
|
|
220
|
+
}, [editing]);
|
|
221
|
+
const commit = async () => {
|
|
222
|
+
if (pending) return;
|
|
223
|
+
if (draft === value) {
|
|
224
|
+
setEditing(false);
|
|
225
|
+
setError(null);
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
const invalid = validate?.(draft) ?? null;
|
|
229
|
+
if (invalid) {
|
|
230
|
+
setError(invalid);
|
|
231
|
+
inputRef.current?.focus();
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
try {
|
|
235
|
+
setPending(true);
|
|
236
|
+
await onCommit(draft);
|
|
237
|
+
setEditing(false);
|
|
238
|
+
setError(null);
|
|
239
|
+
} catch {
|
|
240
|
+
setError(t["editable.commitError"]);
|
|
241
|
+
inputRef.current?.focus();
|
|
242
|
+
} finally {
|
|
243
|
+
setPending(false);
|
|
244
|
+
}
|
|
245
|
+
};
|
|
246
|
+
const cancel = () => {
|
|
247
|
+
cancelledRef.current = true;
|
|
248
|
+
setEditing(false);
|
|
249
|
+
setError(null);
|
|
250
|
+
};
|
|
251
|
+
if (!editing) {
|
|
252
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
253
|
+
"button",
|
|
254
|
+
{
|
|
255
|
+
type: "button",
|
|
256
|
+
className: chunkPASF6T4H_js.cx("editable-cell", disabled && "is-disabled", className),
|
|
257
|
+
onClick: startEdit,
|
|
258
|
+
disabled,
|
|
259
|
+
"aria-label": ariaLabel,
|
|
260
|
+
children: [
|
|
261
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "editable-cell__value", children: formatDisplay ? formatDisplay(value) : value || placeholder }),
|
|
262
|
+
/* @__PURE__ */ jsxRuntime.jsx(chunkC4AKMVDZ_js.Edit, { size: 12, className: "editable-cell__icon", "aria-hidden": "true" })
|
|
263
|
+
]
|
|
264
|
+
}
|
|
265
|
+
);
|
|
266
|
+
}
|
|
267
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
268
|
+
"input",
|
|
269
|
+
{
|
|
270
|
+
ref: inputRef,
|
|
271
|
+
type,
|
|
272
|
+
className: chunkPASF6T4H_js.cx("input", "editable-cell__input", error != null && "is-invalid", className),
|
|
273
|
+
value: draft,
|
|
274
|
+
disabled: pending,
|
|
275
|
+
placeholder,
|
|
276
|
+
"aria-label": ariaLabel,
|
|
277
|
+
"aria-invalid": error != null || void 0,
|
|
278
|
+
title: error ?? void 0,
|
|
279
|
+
onChange: (e) => {
|
|
280
|
+
setDraft(e.target.value);
|
|
281
|
+
setError(null);
|
|
282
|
+
},
|
|
283
|
+
onKeyDown: (e) => {
|
|
284
|
+
if (e.key === "Enter") {
|
|
285
|
+
e.preventDefault();
|
|
286
|
+
void commit();
|
|
287
|
+
} else if (e.key === "Escape") {
|
|
288
|
+
e.preventDefault();
|
|
289
|
+
cancel();
|
|
290
|
+
}
|
|
291
|
+
},
|
|
292
|
+
onBlur: () => {
|
|
293
|
+
if (cancelledRef.current) {
|
|
294
|
+
cancelledRef.current = false;
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
void commit();
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
);
|
|
301
|
+
}
|
|
191
302
|
|
|
192
303
|
exports.ConfirmDialog = ConfirmDialog;
|
|
193
304
|
exports.DescriptionList = DescriptionList;
|
|
194
305
|
exports.DescriptionListItem = DescriptionListItem;
|
|
195
306
|
exports.DiffViewer = DiffViewer;
|
|
307
|
+
exports.EditableCell = EditableCell;
|
|
196
308
|
exports.TransferList = TransferList;
|
|
197
|
-
//# sourceMappingURL=chunk-
|
|
198
|
-
//# sourceMappingURL=chunk-
|
|
309
|
+
//# sourceMappingURL=chunk-UWKP36N6.js.map
|
|
310
|
+
//# sourceMappingURL=chunk-UWKP36N6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/Editing.tsx"],"names":["React","useLocale","jsx","Modal","jsxs","Fragment","cx","Checkbox","ChevronRight","ChevronLeft","Edit"],"mappings":"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","file":"chunk-UWKP36N6.js","sourcesContent":["'use client';\nimport * as React from 'react';\nimport { cx } from '../utils/cx';\nimport { Modal } from './Overlay';\nimport { ChevronLeft, ChevronRight, Edit as EditIcon } from './Icons';\nimport { Checkbox } from './Form';\nimport { useLocale } from '../locale/LocaleProvider';\n\n// ---------- ConfirmDialog -----------------------------------------------\nexport interface ConfirmDialogProps {\n open: boolean;\n onClose: () => void;\n onConfirm: () => void | Promise<void>;\n title: React.ReactNode;\n description?: React.ReactNode;\n confirmLabel?: React.ReactNode;\n cancelLabel?: React.ReactNode;\n /** 'danger' usa botón rojo. */\n tone?: 'default' | 'danger';\n /** Si true, deshabilita el confirm mientras se ejecuta. */\n loading?: boolean;\n}\n\nexport function ConfirmDialog({\n open, onClose, onConfirm, title, description,\n confirmLabel, cancelLabel,\n tone = 'default', loading,\n}: ConfirmDialogProps) {\n const [busy, setBusy] = React.useState(false);\n const isBusy = loading ?? busy;\n const t = useLocale();\n const confirmText = confirmLabel ?? t['common.confirm'];\n const cancelText = cancelLabel ?? t['common.cancel'];\n\n const handleConfirm = async () => {\n try {\n setBusy(true);\n await onConfirm();\n onClose();\n } finally {\n setBusy(false);\n }\n };\n\n return (\n <Modal\n open={open}\n onClose={onClose}\n size=\"sm\"\n title={title}\n footer={\n <>\n <button type=\"button\" className=\"btn btn--ghost btn--md\" onClick={onClose} disabled={isBusy}>\n {cancelText}\n </button>\n <button\n type=\"button\"\n className={cx('btn', tone === 'danger' ? 'btn--danger' : 'btn--primary', 'btn--md')}\n onClick={handleConfirm}\n disabled={isBusy}\n aria-busy={isBusy || undefined}\n >\n {isBusy ? <span className=\"spinner spinner--inverse\" aria-hidden=\"true\" /> : null}\n {confirmText}\n </button>\n </>\n }\n >\n {description && <p className=\"confirm__desc\">{description}</p>}\n </Modal>\n );\n}\n\n// ---------- DescriptionList (KeyValue editable) ------------------------\nexport interface DescriptionListItemProps {\n label: React.ReactNode;\n value: React.ReactNode;\n /** Si se pasa, el valor se vuelve editable inline. */\n onEdit?: () => void;\n editable?: boolean;\n}\n\nexport function DescriptionList({ children, className, ...rest }: React.HTMLAttributes<HTMLDListElement>) {\n return <dl className={cx('desc-list', className)} {...rest}>{children}</dl>;\n}\n\nexport function DescriptionListItem({ label, value, onEdit, editable }: DescriptionListItemProps) {\n const t = useLocale();\n return (\n <>\n <dt className=\"desc-list__label\">{label}</dt>\n <dd className=\"desc-list__value\">\n <span>{value}</span>\n {editable && onEdit && (\n <button type=\"button\" className=\"desc-list__edit\" onClick={onEdit}>\n {t['descList.edit']}\n </button>\n )}\n </dd>\n </>\n );\n}\n\n// ---------- DiffViewer (before / after) --------------------------------\nexport interface DiffEntry {\n field: React.ReactNode;\n before: React.ReactNode;\n after: React.ReactNode;\n}\n\nexport interface DiffViewerProps extends React.HTMLAttributes<HTMLDivElement> {\n entries: DiffEntry[];\n}\n\nexport function DiffViewer({ entries, className, ...rest }: DiffViewerProps) {\n const t = useLocale();\n // data-label feeds the mobile stacked layout's ::before pseudo-elements\n // so the \"Antes\" / \"Después\" labels remain i18n-able.\n const beforeLabel = typeof t['diff.before'] === 'string' ? t['diff.before'] : undefined;\n const afterLabel = typeof t['diff.after'] === 'string' ? t['diff.after'] : undefined;\n return (\n <div className={cx('diff', className)} role=\"table\" aria-label={t['diff.label']} {...rest}>\n <div className=\"diff__head\" role=\"row\">\n <div role=\"columnheader\">{t['diff.field']}</div>\n <div role=\"columnheader\">{t['diff.before']}</div>\n <div role=\"columnheader\">{t['diff.after']}</div>\n </div>\n {entries.map((e, i) => (\n <div key={i} className=\"diff__row\" role=\"row\">\n <div className=\"diff__field\" role=\"cell\">{e.field}</div>\n <div className=\"diff__before\" role=\"cell\" data-label={beforeLabel}><del>{e.before}</del></div>\n <div className=\"diff__after\" role=\"cell\" data-label={afterLabel}><ins>{e.after}</ins></div>\n </div>\n ))}\n </div>\n );\n}\n\n// ---------- TransferList (dual list select) ----------------------------\nexport interface TransferItem {\n id: string;\n label: React.ReactNode;\n description?: React.ReactNode;\n disabled?: boolean;\n}\n\nexport interface TransferListProps {\n source: TransferItem[];\n selected: TransferItem[];\n onChange: (selected: TransferItem[]) => void;\n sourceTitle?: React.ReactNode;\n selectedTitle?: React.ReactNode;\n className?: string;\n}\n\nexport function TransferList({\n source, selected, onChange,\n sourceTitle, selectedTitle,\n className,\n}: TransferListProps) {\n const [leftChecked, setLeftChecked] = React.useState<Set<string>>(new Set());\n const [rightChecked, setRightChecked] = React.useState<Set<string>>(new Set());\n const t = useLocale();\n const srcTitle = sourceTitle ?? t['transfer.available'];\n const selTitle = selectedTitle ?? t['transfer.assigned'];\n\n // Without memo, every checkbox click rebuilt selectedIds and re-filtered\n // `source` to compute `left`. At ~500 source items that's a measurable\n // O(n) hit per click.\n const selectedIds = React.useMemo(\n () => new Set(selected.map((s) => s.id)),\n [selected]\n );\n const left = React.useMemo(\n () => source.filter((s) => !selectedIds.has(s.id)),\n [source, selectedIds]\n );\n const right = selected;\n\n const moveRight = () => {\n const toMove = left.filter((i) => leftChecked.has(i.id));\n onChange([...right, ...toMove]);\n setLeftChecked(new Set());\n };\n const moveLeft = () => {\n onChange(right.filter((i) => !rightChecked.has(i.id)));\n setRightChecked(new Set());\n };\n\n const toggleCheck = (set: Set<string>, setSet: (s: Set<string>) => void, id: string) => {\n const next = new Set(set);\n if (next.has(id)) next.delete(id); else next.add(id);\n setSet(next);\n };\n\n const renderColumn = (title: React.ReactNode, items: TransferItem[], checked: Set<string>, setChecked: (s: Set<string>) => void) => (\n <div className=\"transfer__col\">\n <div className=\"transfer__col-head\">\n <span className=\"transfer__col-title\">{title}</span>\n <span className=\"transfer__col-count\">{items.length}</span>\n </div>\n <ul className=\"transfer__list\" role=\"listbox\" aria-label={typeof title === 'string' ? title : undefined}>\n {items.length === 0 ? (\n <li className=\"transfer__empty\">{t['transfer.empty']}</li>\n ) : items.map((it) => (\n <li\n key={it.id}\n className={cx('transfer__item', checked.has(it.id) && 'is-checked', it.disabled && 'is-disabled')}\n role=\"option\"\n aria-selected={checked.has(it.id)}\n onClick={() => !it.disabled && toggleCheck(checked, setChecked, it.id)}\n >\n <span onClick={(e) => e.stopPropagation()}>\n <Checkbox\n checked={checked.has(it.id)}\n disabled={it.disabled}\n onChange={() => toggleCheck(checked, setChecked, it.id)}\n />\n </span>\n <div className=\"transfer__item-body\">\n <div>{it.label}</div>\n {it.description && <div className=\"transfer__item-desc\">{it.description}</div>}\n </div>\n </li>\n ))}\n </ul>\n </div>\n );\n\n return (\n <div className={cx('transfer', className)}>\n {renderColumn(srcTitle, left, leftChecked, setLeftChecked)}\n <div className=\"transfer__controls\">\n <button type=\"button\" className=\"btn btn--outline btn--sm\" disabled={leftChecked.size === 0} onClick={moveRight} aria-label={t['transfer.assignSelected']}>\n <ChevronRight size={16} />\n </button>\n <button type=\"button\" className=\"btn btn--outline btn--sm\" disabled={rightChecked.size === 0} onClick={moveLeft} aria-label={t['transfer.removeSelected']}>\n <ChevronLeft size={16} />\n </button>\n </div>\n {renderColumn(selTitle, right, rightChecked, setRightChecked)}\n </div>\n );\n}\n\n// ---------- EditableCell ---------------------------------------------------\nexport interface EditableCellProps {\n /** Committed value (controlled — the consumer owns it). */\n value: string;\n /**\n * Called on commit (Enter or blur) with the edited raw value. May return\n * a promise: while it's pending the input is disabled; on rejection the\n * cell STAYS in edit mode with the invalid style, so the user's typing\n * is never lost to a failed PATCH. Not called when the value is\n * unchanged.\n */\n onCommit: (next: string) => void | Promise<void>;\n /** Input mode. `'number'` renders a numeric input. */\n type?: 'text' | 'number';\n /**\n * Display-mode formatter (e.g. `formatCurrency`) — editing always works\n * on the RAW `value`; only the resting presentation is formatted.\n */\n formatDisplay?: (value: string) => React.ReactNode;\n /**\n * Sync validation before commit. Return an error message to block the\n * commit (cell stays editing, invalid style, message via title/aria);\n * return `null` to allow it.\n */\n validate?: (next: string) => string | null;\n disabled?: boolean;\n placeholder?: string;\n /** Accessible name of the edit affordance (e.g. \"Editar precio de Taladro\"). */\n ariaLabel?: string;\n className?: string;\n}\n\n/**\n * Click-to-edit primitive for inline editing (Airtable/Notion semantics):\n * click or Enter to edit, Enter/blur commits, Escape cancels. Composable\n * anywhere — typically inside a `DataTable` cell via `accessor`. The kit\n * deliberately ships the CELL, not an editable-table subsystem: commit\n * orchestration (optimistic update, refetch, toast) stays in the consumer,\n * where the data layer lives.\n */\nexport function EditableCell({\n value, onCommit, type = 'text', formatDisplay, validate,\n disabled, placeholder, ariaLabel, className,\n}: EditableCellProps) {\n const t = useLocale();\n const [editing, setEditing] = React.useState(false);\n const [draft, setDraft] = React.useState(value);\n const [pending, setPending] = React.useState(false);\n const [error, setError] = React.useState<string | null>(null);\n const inputRef = React.useRef<HTMLInputElement>(null);\n // Distinguishes Escape-initiated blur from a committing blur.\n const cancelledRef = React.useRef(false);\n\n const startEdit = () => {\n if (disabled) return;\n setDraft(value);\n setError(null);\n setEditing(true);\n };\n\n React.useEffect(() => {\n if (editing) {\n inputRef.current?.focus();\n inputRef.current?.select();\n }\n }, [editing]);\n\n const commit = async () => {\n if (pending) return;\n if (draft === value) { setEditing(false); setError(null); return; }\n const invalid = validate?.(draft) ?? null;\n if (invalid) {\n setError(invalid);\n inputRef.current?.focus();\n return;\n }\n try {\n setPending(true);\n await onCommit(draft);\n setEditing(false);\n setError(null);\n } catch {\n // Keep the draft and the edit mode — the user decides to retry or Esc.\n setError(t['editable.commitError']);\n inputRef.current?.focus();\n } finally {\n setPending(false);\n }\n };\n\n const cancel = () => {\n cancelledRef.current = true;\n setEditing(false);\n setError(null);\n };\n\n if (!editing) {\n return (\n <button\n type=\"button\"\n className={cx('editable-cell', disabled && 'is-disabled', className)}\n onClick={startEdit}\n disabled={disabled}\n aria-label={ariaLabel}\n >\n <span className=\"editable-cell__value\">\n {formatDisplay ? formatDisplay(value) : (value || placeholder)}\n </span>\n <EditIcon size={12} className=\"editable-cell__icon\" aria-hidden=\"true\" />\n </button>\n );\n }\n\n return (\n <input\n ref={inputRef}\n type={type}\n className={cx('input', 'editable-cell__input', error != null && 'is-invalid', className)}\n value={draft}\n disabled={pending}\n placeholder={placeholder}\n aria-label={ariaLabel}\n aria-invalid={error != null || undefined}\n title={error ?? undefined}\n onChange={(e) => { setDraft(e.target.value); setError(null); }}\n onKeyDown={(e) => {\n if (e.key === 'Enter') { e.preventDefault(); void commit(); }\n else if (e.key === 'Escape') { e.preventDefault(); cancel(); }\n }}\n onBlur={() => {\n if (cancelledRef.current) { cancelledRef.current = false; return; }\n void commit();\n }}\n />\n );\n}\n"]}
|
|
@@ -2,10 +2,11 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var chunkMW7HQCFC_js = require('./chunk-MW7HQCFC.js');
|
|
5
|
-
var
|
|
5
|
+
var chunkAKUGR3AX_js = require('./chunk-AKUGR3AX.js');
|
|
6
6
|
var chunk6SSTTJV4_js = require('./chunk-6SSTTJV4.js');
|
|
7
|
-
var
|
|
8
|
-
var
|
|
7
|
+
var chunkJDK4GEME_js = require('./chunk-JDK4GEME.js');
|
|
8
|
+
var chunk6D5UP23V_js = require('./chunk-6D5UP23V.js');
|
|
9
|
+
var chunkMJMLNETS_js = require('./chunk-MJMLNETS.js');
|
|
9
10
|
var chunkAJ22SXI2_js = require('./chunk-AJ22SXI2.js');
|
|
10
11
|
var chunkC4AKMVDZ_js = require('./chunk-C4AKMVDZ.js');
|
|
11
12
|
var chunkPASF6T4H_js = require('./chunk-PASF6T4H.js');
|
|
@@ -141,9 +142,10 @@ function DataTable({
|
|
|
141
142
|
expandedKeys,
|
|
142
143
|
onExpandedChange,
|
|
143
144
|
hiddenColumnKeys,
|
|
145
|
+
virtualizeRows,
|
|
144
146
|
surface = "card"
|
|
145
147
|
}) {
|
|
146
|
-
const t =
|
|
148
|
+
const t = chunkMJMLNETS_js.useLocale();
|
|
147
149
|
const columns = React__namespace.useMemo(
|
|
148
150
|
() => hiddenColumnKeys?.size ? allColumns.filter((c) => !hiddenColumnKeys.has(c.key)) : allColumns,
|
|
149
151
|
[allColumns, hiddenColumnKeys]
|
|
@@ -203,6 +205,13 @@ function DataTable({
|
|
|
203
205
|
const expandable = renderExpanded != null;
|
|
204
206
|
const tableId = React__namespace.useId();
|
|
205
207
|
const totalCols = columns.length + (selectable ? 1 : 0) + (expandable ? 1 : 0);
|
|
208
|
+
const virtual = virtualizeRows != null && maxHeight != null && !expandable && mobileLayout !== "cards";
|
|
209
|
+
const vrange = chunk6D5UP23V_js.useVirtualRows(scrollRef, {
|
|
210
|
+
count: rows.length,
|
|
211
|
+
rowHeight: virtualizeRows?.rowHeight ?? 1,
|
|
212
|
+
overscan: virtualizeRows?.overscan,
|
|
213
|
+
enabled: virtual
|
|
214
|
+
});
|
|
206
215
|
const onSort = (col) => {
|
|
207
216
|
if (!col.sortable || !onSortChange) return;
|
|
208
217
|
if (!sort || sort.key !== col.key) onSortChange({ key: col.key, dir: "asc" });
|
|
@@ -217,6 +226,7 @@ function DataTable({
|
|
|
217
226
|
density === "comfortable" && "table--comfortable"
|
|
218
227
|
),
|
|
219
228
|
"aria-label": ariaLabel,
|
|
229
|
+
"aria-rowcount": virtual ? rows.length + 1 : void 0,
|
|
220
230
|
children: [
|
|
221
231
|
/* @__PURE__ */ jsxRuntime.jsx("thead", { children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
|
|
222
232
|
selectable && /* @__PURE__ */ jsxRuntime.jsx("th", { scope: "col", style: { width: 40 }, children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -270,38 +280,42 @@ function DataTable({
|
|
|
270
280
|
selectable && /* @__PURE__ */ jsxRuntime.jsx("td", { children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "skel", style: { height: 14 } }) }),
|
|
271
281
|
expandable && /* @__PURE__ */ jsxRuntime.jsx("td", { "aria-hidden": "true" }),
|
|
272
282
|
columns.map((c) => /* @__PURE__ */ jsxRuntime.jsx("td", { children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "skel", style: { height: 12, width: "70%" } }) }, c.key))
|
|
273
|
-
] }, `s${i}`)) : rows.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("tr", { children: /* @__PURE__ */ jsxRuntime.jsx("td", { colSpan: totalCols, style: { padding: 32 }, children: empty ?? /* @__PURE__ */ jsxRuntime.jsx("div", { style: { textAlign: "center", color: "var(--fg-muted)" }, children: t["table.empty"] }) }) }) :
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
283
|
+
] }, `s${i}`)) : rows.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("tr", { children: /* @__PURE__ */ jsxRuntime.jsx("td", { colSpan: totalCols, style: { padding: 32 }, children: empty ?? /* @__PURE__ */ jsxRuntime.jsx("div", { style: { textAlign: "center", color: "var(--fg-muted)" }, children: t["table.empty"] }) }) }) : /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
284
|
+
virtual && vrange.padTop > 0 && /* @__PURE__ */ jsxRuntime.jsx("tr", { className: "data-table__spacer", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx("td", { colSpan: totalCols, style: { height: vrange.padTop } }) }),
|
|
285
|
+
(virtual ? rows.slice(vrange.start, vrange.end) : rows).map((r) => {
|
|
286
|
+
const k = rowKey(r);
|
|
287
|
+
const label = rowLabel ? rowLabel(r) : k;
|
|
288
|
+
const href = rowHref?.(r);
|
|
289
|
+
const onActivate = onRowClick ? () => onRowClick(r) : void 0;
|
|
290
|
+
const expanded = expandable && !!expandedKeys?.has(k);
|
|
291
|
+
const detailId = `${tableId}-detail-${k}`;
|
|
292
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React__namespace.Fragment, { children: [
|
|
293
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
294
|
+
DataTableRow,
|
|
295
|
+
{
|
|
296
|
+
row: r,
|
|
297
|
+
rowK: k,
|
|
298
|
+
selected: !!selectedKeys?.has(k),
|
|
299
|
+
selectable: !!selectable,
|
|
300
|
+
selectAriaLabel: chunkJDK4GEME_js.format(t["table.selectRow"], { label }),
|
|
301
|
+
columns,
|
|
302
|
+
onToggle: toggleRow,
|
|
303
|
+
href,
|
|
304
|
+
onActivate,
|
|
305
|
+
actionLabel: chunkJDK4GEME_js.format(t["table.rowAction"], { label }),
|
|
306
|
+
renderRow,
|
|
307
|
+
expandable,
|
|
308
|
+
expanded,
|
|
309
|
+
onToggleExpand: toggleExpand,
|
|
310
|
+
expandLabel: chunkJDK4GEME_js.format(t["table.expandRow"], { label }),
|
|
311
|
+
detailId
|
|
312
|
+
}
|
|
313
|
+
),
|
|
314
|
+
expanded && /* @__PURE__ */ jsxRuntime.jsx("tr", { className: "data-table__detail", children: /* @__PURE__ */ jsxRuntime.jsx("td", { colSpan: totalCols, id: detailId, children: renderExpanded(r) }) })
|
|
315
|
+
] }, k);
|
|
316
|
+
}),
|
|
317
|
+
virtual && vrange.padBottom > 0 && /* @__PURE__ */ jsxRuntime.jsx("tr", { className: "data-table__spacer", "aria-hidden": "true", children: /* @__PURE__ */ jsxRuntime.jsx("td", { colSpan: totalCols, style: { height: vrange.padBottom } }) })
|
|
318
|
+
] }) }),
|
|
305
319
|
columns.some((c) => c.footer != null) && !error && !loading && rows.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("tfoot", { children: /* @__PURE__ */ jsxRuntime.jsxs("tr", { children: [
|
|
306
320
|
selectable && /* @__PURE__ */ jsxRuntime.jsx("td", {}),
|
|
307
321
|
expandable && /* @__PURE__ */ jsxRuntime.jsx("td", { "aria-hidden": "true" }),
|
|
@@ -423,7 +437,7 @@ function TablePagination({
|
|
|
423
437
|
pageSizeOptions = [10, 25, 50, 100],
|
|
424
438
|
className
|
|
425
439
|
}) {
|
|
426
|
-
const t =
|
|
440
|
+
const t = chunkMJMLNETS_js.useLocale();
|
|
427
441
|
const selectId = React__namespace.useId();
|
|
428
442
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkPASF6T4H_js.cx("table-pagination", className), children: [
|
|
429
443
|
onPageSizeChange && /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "table-pagination__size", htmlFor: selectId, children: [
|
|
@@ -440,7 +454,7 @@ function TablePagination({
|
|
|
440
454
|
)
|
|
441
455
|
] }),
|
|
442
456
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
443
|
-
|
|
457
|
+
chunkAKUGR3AX_js.Pagination,
|
|
444
458
|
{
|
|
445
459
|
page,
|
|
446
460
|
pageSize,
|
|
@@ -456,7 +470,7 @@ var TableToolbar = React__namespace.forwardRef(
|
|
|
456
470
|
}
|
|
457
471
|
);
|
|
458
472
|
function ColumnToggle({ columns, hiddenKeys, onChange, label, className }) {
|
|
459
|
-
const t =
|
|
473
|
+
const t = chunkMJMLNETS_js.useLocale();
|
|
460
474
|
const visibleCount = columns.length - columns.filter((c) => hiddenKeys.has(c.key)).length;
|
|
461
475
|
const toggle = (key) => {
|
|
462
476
|
const next = new Set(hiddenKeys);
|
|
@@ -497,5 +511,5 @@ exports.ColumnToggle = ColumnToggle;
|
|
|
497
511
|
exports.DataTable = DataTable;
|
|
498
512
|
exports.TablePagination = TablePagination;
|
|
499
513
|
exports.TableToolbar = TableToolbar;
|
|
500
|
-
//# sourceMappingURL=chunk-
|
|
501
|
-
//# sourceMappingURL=chunk-
|
|
514
|
+
//# sourceMappingURL=chunk-UZX2SE42.js.map
|
|
515
|
+
//# sourceMappingURL=chunk-UZX2SE42.js.map
|