@eifi1/ui-kit 0.39.0 → 0.40.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/README.md +8 -7
- package/dist/billing/billing-overview.d.ts +12 -2
- package/dist/billing/pay-page.js +1 -1
- package/dist/billing/pay-page.js.map +1 -1
- package/dist/bin/eifi1-pay-page.mjs +1 -1
- package/dist/components/autocomplete.js +5 -1
- package/dist/components/autocomplete.js.map +1 -1
- package/dist/components/combobox-core.d.ts +14 -1
- package/dist/components/combobox-core.js +4 -0
- package/dist/components/combobox-core.js.map +1 -1
- package/dist/components/combobox.js +9 -3
- package/dist/components/combobox.js.map +1 -1
- package/dist/components/data-table-labels.d.ts +5 -0
- package/dist/components/data-table-labels.js +2 -0
- package/dist/components/data-table-labels.js.map +1 -1
- package/dist/components/data-table-mobile.d.ts +36 -1
- package/dist/components/data-table-mobile.js +162 -15
- package/dist/components/data-table-mobile.js.map +1 -1
- package/dist/components/data-table.d.ts +39 -12
- package/dist/components/data-table.js +74 -13
- package/dist/components/data-table.js.map +1 -1
- package/dist/components/inline-entity-combobox.js +10 -3
- package/dist/components/inline-entity-combobox.js.map +1 -1
- package/dist/components/picker-sheet.d.ts +18 -1
- package/dist/components/picker-sheet.js +20 -2
- package/dist/components/picker-sheet.js.map +1 -1
- package/dist/components/tabs.d.ts +26 -2
- package/dist/components/tabs.js +41 -2
- package/dist/components/tabs.js.map +1 -1
- package/dist/components/translation-review-parts.d.ts +2 -1
- package/dist/components/translation-review-parts.js +1 -1
- package/dist/components/translation-review-parts.js.map +1 -1
- package/dist/components/ui-labels.js +3 -1
- package/dist/components/ui-labels.js.map +1 -1
- package/dist/eslint/index.js +1 -1
- package/dist/feedback/feedback-comment-thread.d.ts +8 -1
- package/dist/feedback/feedback-comment-thread.js +26 -1
- package/dist/feedback/feedback-comment-thread.js.map +1 -1
- package/dist/feedback/feedback-labels.d.ts +2 -1
- package/dist/feedback/feedback-labels.js +1 -0
- package/dist/feedback/feedback-labels.js.map +1 -1
- package/dist/feedback/feedback-menu-labels.js +3 -1
- package/dist/feedback/feedback-menu-labels.js.map +1 -1
- package/dist/feedback/feedback-menu.d.ts +31 -24
- package/dist/feedback/feedback-menu.js +16 -7
- package/dist/feedback/feedback-menu.js.map +1 -1
- package/dist/feedback/feedback-public-labels.d.ts +3 -2
- package/dist/feedback/feedback-public-labels.js +1 -1
- package/dist/feedback/feedback-public-labels.js.map +1 -1
- package/dist/feedback/feedback-public-list.js +1 -0
- package/dist/feedback/feedback-public-list.js.map +1 -1
- package/dist/feedback/feedback-public-types.d.ts +16 -3
- package/dist/feedback/feedback-record.d.ts +20 -3
- package/dist/feedback/feedback-record.js +15 -0
- package/dist/feedback/feedback-record.js.map +1 -1
- package/dist/feedback/feedback-replies.d.ts +13 -2
- package/dist/feedback/feedback-replies.js +67 -33
- package/dist/feedback/feedback-replies.js.map +1 -1
- package/dist/feedback/feedback-rework-entry-chip.d.ts +9 -0
- package/dist/feedback/feedback-rework-entry-chip.js +13 -0
- package/dist/feedback/feedback-rework-entry-chip.js.map +1 -0
- package/dist/feedback/feedback-row-detail.d.ts +31 -8
- package/dist/feedback/feedback-row-detail.js +31 -7
- package/dist/feedback/feedback-row-detail.js.map +1 -1
- package/dist/feedback/feedback-table-labels.js +1 -1
- package/dist/feedback/feedback-table-labels.js.map +1 -1
- package/dist/feedback/feedback-table.d.ts +5 -2
- package/dist/feedback/feedback-table.js +2 -2
- package/dist/feedback/feedback-table.js.map +1 -1
- package/dist/feedback/feedback-thread.js +3 -1
- package/dist/feedback/feedback-thread.js.map +1 -1
- package/dist/feedback/feedback-vocabulary.d.ts +9 -6
- package/dist/feedback/feedback-vocabulary.js +16 -1
- package/dist/feedback/feedback-vocabulary.js.map +1 -1
- package/dist/hooks/use-long-press.d.ts +30 -0
- package/dist/hooks/use-long-press.js +77 -0
- package/dist/hooks/use-long-press.js.map +1 -0
- package/dist/hooks/use-overlay-history.js +37 -3
- package/dist/hooks/use-overlay-history.js.map +1 -1
- package/dist/i18n/german.js +13 -5
- package/dist/i18n/german.js.map +1 -1
- package/dist/i18n/kit-labels.d.ts +3 -0
- package/dist/i18n/kit-labels.js.map +1 -1
- package/dist/i18n/locales/en.js +12 -5
- package/dist/i18n/locales/en.js.map +2 -2
- package/dist/i18n/locales/es.js +13 -5
- package/dist/i18n/locales/es.js.map +1 -1
- package/dist/i18n/locales/fr.js +13 -5
- package/dist/i18n/locales/fr.js.map +1 -1
- package/dist/i18n/locales/hu.js +13 -5
- package/dist/i18n/locales/hu.js.map +1 -1
- package/dist/i18n/locales/it.js +13 -5
- package/dist/i18n/locales/it.js.map +1 -1
- package/dist/i18n/locales/zh.js +13 -5
- package/dist/i18n/locales/zh.js.map +1 -1
- package/dist/i18n/shared-labels.js +1 -1
- package/dist/i18n/shared-labels.js.map +1 -1
- package/dist/pay/pay.js +1 -1
- package/dist/shell/app-shell.js +9 -0
- package/dist/shell/app-shell.js.map +1 -1
- package/dist/shell/fill-height.d.ts +38 -0
- package/dist/shell/fill-height.js +12 -0
- package/dist/shell/fill-height.js.map +1 -0
- package/dist/shell.d.ts +2 -0
- package/dist/shell.js +3 -0
- package/dist/shell.js.map +1 -1
- package/package.json +1 -1
- package/src/billing/billing-overview.ts +12 -2
- package/src/billing/pay-page.ts +1 -1
- package/src/components/autocomplete.tsx +5 -1
- package/src/components/combobox-core.tsx +20 -1
- package/src/components/combobox.tsx +9 -3
- package/src/components/data-table-labels.ts +7 -0
- package/src/components/data-table-mobile.tsx +193 -9
- package/src/components/data-table.tsx +141 -24
- package/src/components/inline-entity-combobox.tsx +12 -4
- package/src/components/picker-sheet.tsx +38 -1
- package/src/components/tabs.tsx +73 -3
- package/src/components/translation-review-parts.tsx +3 -2
- package/src/components/ui-labels.ts +2 -0
- package/src/feedback/feedback-comment-thread.tsx +39 -1
- package/src/feedback/feedback-labels.ts +3 -1
- package/src/feedback/feedback-menu-labels.ts +2 -0
- package/src/feedback/feedback-menu.tsx +48 -30
- package/src/feedback/feedback-public-labels.ts +4 -3
- package/src/feedback/feedback-public-list.tsx +4 -1
- package/src/feedback/feedback-public-types.ts +17 -3
- package/src/feedback/feedback-record.ts +34 -3
- package/src/feedback/feedback-replies.tsx +100 -31
- package/src/feedback/feedback-rework-entry-chip.tsx +18 -0
- package/src/feedback/feedback-row-detail.tsx +65 -12
- package/src/feedback/feedback-table-labels.ts +1 -1
- package/src/feedback/feedback-table.tsx +7 -4
- package/src/feedback/feedback-thread.tsx +5 -1
- package/src/feedback/feedback-vocabulary.ts +27 -6
- package/src/hooks/use-long-press.ts +126 -0
- package/src/hooks/use-overlay-history.ts +74 -3
- package/src/i18n/german.ts +10 -2
- package/src/i18n/kit-labels.tsx +3 -0
- package/src/i18n/locales/es.ts +10 -2
- package/src/i18n/locales/fr.ts +10 -2
- package/src/i18n/locales/hu.ts +10 -2
- package/src/i18n/locales/it.ts +10 -2
- package/src/i18n/locales/zh.ts +10 -2
- package/src/i18n/shared-labels.ts +1 -1
- package/src/shell/app-shell.tsx +9 -0
- package/src/shell/fill-height.tsx +45 -0
- package/src/shell.ts +3 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { createElement } from "react";
|
|
4
|
-
import { Fragment, useEffect, useId, useMemo, useRef, useState } from "react";
|
|
4
|
+
import { Fragment, useEffect, useId, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
5
5
|
import { Card } from "./card.js";
|
|
6
6
|
import { Spinner } from "./spinner.js";
|
|
7
7
|
import { ROW_ACTIONS_KEY, useRowActionColumn } from "./data-table-row-actions.js";
|
|
@@ -16,7 +16,7 @@ import {
|
|
|
16
16
|
resolveDataTableLabels,
|
|
17
17
|
splitCellProps
|
|
18
18
|
} from "./data-table-shared.js";
|
|
19
|
-
import { MobileFilters, MobileRow, MobileSort, StackedFields } from "./data-table-mobile.js";
|
|
19
|
+
import { MobileFilters, MobileRow, MobileSelectBar, MobileSort, StackedFields } from "./data-table-mobile.js";
|
|
20
20
|
import { DataTableHead } from "./data-table-head.js";
|
|
21
21
|
import { ColumnSettingsPanel } from "./data-table-column-settings.js";
|
|
22
22
|
import { useLargeText } from "../hooks/use-large-text.js";
|
|
@@ -343,6 +343,22 @@ function DataTable({
|
|
|
343
343
|
const d = dirOf(el);
|
|
344
344
|
if (d !== mobileDir) setMobileDir(d);
|
|
345
345
|
};
|
|
346
|
+
const phoneFill = fillHeight && !isMdUp;
|
|
347
|
+
const phoneListRef = useRef(null);
|
|
348
|
+
const [phoneListScrolls, setPhoneListScrolls] = useState(false);
|
|
349
|
+
useLayoutEffect(() => {
|
|
350
|
+
const el = phoneListRef.current;
|
|
351
|
+
if (!phoneFill || !el) return;
|
|
352
|
+
setPhoneListScrolls(el.scrollHeight > el.clientHeight + 1);
|
|
353
|
+
});
|
|
354
|
+
useEffect(() => {
|
|
355
|
+
const el = phoneListRef.current;
|
|
356
|
+
if (!phoneFill || !el || typeof ResizeObserver === "undefined") return;
|
|
357
|
+
const ro = new ResizeObserver(() => setPhoneListScrolls(el.scrollHeight > el.clientHeight + 1));
|
|
358
|
+
ro.observe(el);
|
|
359
|
+
if (el.parentElement) ro.observe(el.parentElement);
|
|
360
|
+
return () => ro.disconnect();
|
|
361
|
+
}, [phoneFill]);
|
|
346
362
|
const { mobileSlice, canRevealMoreMobile, loadMoreRef } = useMobileReveal({
|
|
347
363
|
rows: sorted,
|
|
348
364
|
slice,
|
|
@@ -351,6 +367,14 @@ function DataTable({
|
|
|
351
367
|
unpaged,
|
|
352
368
|
defaultPageSize
|
|
353
369
|
});
|
|
370
|
+
const anySelected = !!selection && (selection.someSelected || selection.allSelected && slice.length > 0);
|
|
371
|
+
const [phoneSelectMode, setPhoneSelectMode] = useState(false);
|
|
372
|
+
const [hadSelection, setHadSelection] = useState(anySelected);
|
|
373
|
+
if (anySelected !== hadSelection) {
|
|
374
|
+
setHadSelection(anySelected);
|
|
375
|
+
if (!anySelected) setPhoneSelectMode(false);
|
|
376
|
+
}
|
|
377
|
+
const phoneSelecting = !!selection && !isMdUp && (phoneSelectMode || anySelected);
|
|
354
378
|
const { selectionAnchor, rangeClick, canSelect, selectRange } = useRangeSelection({
|
|
355
379
|
selection,
|
|
356
380
|
slice,
|
|
@@ -384,7 +408,21 @@ function DataTable({
|
|
|
384
408
|
mobileSecondaryColumns,
|
|
385
409
|
mobileExpandAsDialog,
|
|
386
410
|
compact,
|
|
387
|
-
large
|
|
411
|
+
large,
|
|
412
|
+
select: selection ? {
|
|
413
|
+
active: phoneSelecting,
|
|
414
|
+
selectable: canSelect(row),
|
|
415
|
+
selected: selection.isSelected(row),
|
|
416
|
+
onToggle: (checked) => {
|
|
417
|
+
selectionAnchor.current = rowKey(row);
|
|
418
|
+
selection.onToggle(row, checked);
|
|
419
|
+
},
|
|
420
|
+
onLongPress: () => {
|
|
421
|
+
setPhoneSelectMode(true);
|
|
422
|
+
selectionAnchor.current = rowKey(row);
|
|
423
|
+
if (!selection.isSelected(row)) selection.onToggle(row, true);
|
|
424
|
+
}
|
|
425
|
+
} : null
|
|
388
426
|
},
|
|
389
427
|
rowKey(row)
|
|
390
428
|
);
|
|
@@ -402,13 +440,16 @@ function DataTable({
|
|
|
402
440
|
"data-density": density,
|
|
403
441
|
"data-frame": frame ? void 0 : "none",
|
|
404
442
|
"data-clips": frame ? "" : void 0,
|
|
443
|
+
"data-fill-height": fillHeight ? "" : void 0,
|
|
405
444
|
className: cn(
|
|
406
445
|
"group/table",
|
|
407
446
|
frame ? "overflow-clip" : "min-w-0",
|
|
408
447
|
// Both layouts, not just the table: the phone card list overflowing a bounded
|
|
409
448
|
// pane drew itself over whatever followed it, and in a viewport-locked shell
|
|
410
|
-
// the rows below the fold could not be reached at all.
|
|
411
|
-
|
|
449
|
+
// the rows below the fold could not be reached at all. From `md` the minimum is
|
|
450
|
+
// the content's again (`md:min-h-auto`): the body's floor below then holds the
|
|
451
|
+
// whole chain up to `<main>`, which scrolls instead of leaving a slit.
|
|
452
|
+
fillHeight && "flex flex-1 flex-col min-h-0 md:min-h-auto",
|
|
412
453
|
className
|
|
413
454
|
),
|
|
414
455
|
children: [
|
|
@@ -466,16 +507,36 @@ function DataTable({
|
|
|
466
507
|
}
|
|
467
508
|
}
|
|
468
509
|
),
|
|
510
|
+
selection && /* @__PURE__ */ jsx(
|
|
511
|
+
MobileSelectBar,
|
|
512
|
+
{
|
|
513
|
+
active: phoneSelecting,
|
|
514
|
+
allSelected: selection.allSelected,
|
|
515
|
+
someSelected: selection.someSelected,
|
|
516
|
+
compact,
|
|
517
|
+
labels,
|
|
518
|
+
onEnter: () => setPhoneSelectMode(true),
|
|
519
|
+
onToggleAll: selection.onToggleAll,
|
|
520
|
+
onCancel: () => {
|
|
521
|
+
setPhoneSelectMode(false);
|
|
522
|
+
if (anySelected) selection.onToggleAll(false);
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
),
|
|
469
526
|
/* @__PURE__ */ jsxs(
|
|
470
527
|
"ul",
|
|
471
528
|
{
|
|
529
|
+
ref: phoneListRef,
|
|
472
530
|
className: cn(
|
|
473
531
|
"divide-y divide-subtle",
|
|
474
|
-
// Under `fillHeight` the list
|
|
475
|
-
//
|
|
476
|
-
//
|
|
477
|
-
//
|
|
478
|
-
|
|
532
|
+
// Under `fillHeight` the list takes the room its parent gives it, and in a
|
|
533
|
+
// BOUNDED parent it is the scroller, as the table body is on a wide screen:
|
|
534
|
+
// the filter button stays above it and a server pager below. Only then —
|
|
535
|
+
// see `phoneListScrolls` (live #420). The endless-scroll sentinel still
|
|
536
|
+
// fires in here — an IntersectionObserver on the viewport sees through the
|
|
537
|
+
// clipping ancestor.
|
|
538
|
+
fillHeight && "min-h-0 flex-1",
|
|
539
|
+
fillHeight && phoneListScrolls && "overflow-y-auto overscroll-contain",
|
|
479
540
|
// Same busy treatment as the desktop body; see `isLoading` below.
|
|
480
541
|
isLoading && mobileSlice.length > 0 && "opacity-60 transition-opacity"
|
|
481
542
|
),
|
|
@@ -560,14 +621,14 @@ function DataTable({
|
|
|
560
621
|
}
|
|
561
622
|
)
|
|
562
623
|
] }),
|
|
563
|
-
isMdUp && /* @__PURE__ */ jsxs("div", { className: cn("flex", fillHeight && "
|
|
564
|
-
/* @__PURE__ */ jsxs("div", { className: cn("relative min-w-0 flex-1", fillHeight && "flex flex-col
|
|
624
|
+
isMdUp && /* @__PURE__ */ jsxs("div", { className: cn("flex", fillHeight && "flex-1"), children: [
|
|
625
|
+
/* @__PURE__ */ jsxs("div", { className: cn("relative min-w-0 flex-1", fillHeight && "flex flex-col"), children: [
|
|
565
626
|
/* @__PURE__ */ jsx(
|
|
566
627
|
"div",
|
|
567
628
|
{
|
|
568
629
|
ref: desktopScroller,
|
|
569
630
|
"data-clips": "",
|
|
570
|
-
className: cn("overflow-auto [scrollbar-gutter:stable]", fillHeight && "
|
|
631
|
+
className: cn("overflow-auto [scrollbar-gutter:stable]", fillHeight && "min-h-0 grow basis-48"),
|
|
571
632
|
...edgeFadeProps,
|
|
572
633
|
style: fillHeight ? edgeFadeProps.style : { ...edgeFadeProps.style, maxHeight: maxBodyHeight },
|
|
573
634
|
children: /* @__PURE__ */ jsxs(
|