@pk-design/react-tailwind 1.13.0 → 1.13.1
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/cjs/components/Drawer/Drawer.js +42 -6
- package/dist/cjs/components/Drawer/Drawer.js.map +1 -1
- package/dist/cjs/components/QuantityStepper/QuantityStepper.js +1 -1
- package/dist/cjs/components/QuantityStepper/QuantityStepper.js.map +1 -1
- package/dist/cjs/components/SelectBox/SelectBox.js +1 -1
- package/dist/cjs/components/SelectBox/SelectBox.js.map +1 -1
- package/dist/es/components/Drawer/Drawer.js +42 -6
- package/dist/es/components/Drawer/Drawer.js.map +1 -1
- package/dist/es/components/QuantityStepper/QuantityStepper.js +1 -1
- package/dist/es/components/QuantityStepper/QuantityStepper.js.map +1 -1
- package/dist/es/components/SelectBox/SelectBox.js +1 -1
- package/dist/es/components/SelectBox/SelectBox.js.map +1 -1
- package/dist/react-tailwind.cjs.js +44 -8
- package/dist/react-tailwind.cjs.js.map +1 -1
- package/dist/react-tailwind.es.js +44 -8
- package/dist/react-tailwind.es.js.map +1 -1
- package/package.json +1 -1
|
@@ -392,8 +392,10 @@ const panelAlignmentMap = {
|
|
|
392
392
|
start: 'data-[closed]:-translate-x-1/2 rounded-r-2xl',
|
|
393
393
|
end: 'data-[closed]:translate-x-1/2 rounded-l-2xl',
|
|
394
394
|
top: 'data-[closed]:-translate-y-1/2 rounded-b-2xl',
|
|
395
|
-
// Bottom sheets clear the home indicator on notched phones (0 elsewhere).
|
|
396
|
-
|
|
395
|
+
// Bottom sheets clear the home indicator on notched phones (0 elsewhere). Never
|
|
396
|
+
// taller than the container: with the keyboard up it's shorter than 88dvh, and a
|
|
397
|
+
// bottom-anchored panel past its top is off screen and can't be scrolled to.
|
|
398
|
+
bottom: 'data-[closed]:translate-y-full rounded-t-2xl md:rounded-t-3xl max-h-[min(88dvh,100%)] pb-[env(safe-area-inset-bottom,0px)]',
|
|
397
399
|
};
|
|
398
400
|
const panelSizeMap = {
|
|
399
401
|
xs: 'max-w-xs',
|
|
@@ -476,6 +478,31 @@ const Drawer = ({ isOpen, onClose = () => { }, closeOnOutsideClick = true, align
|
|
|
476
478
|
: [panelAlignmentMap[align], panelSizeMap[size], panelClass])), "data-layout": fullscreen ? 'fullscreen' : undefined, children: [shouldShowDragHandle && (jsxRuntime.jsx("div", { className: "w-12 h-1.5 rounded-full bg-gray-300 dark:bg-gray-600 mx-auto my-2.5 shrink-0 cursor-grab", "data-testid": "drawer-drag-handle" })), fullscreen && (jsxRuntime.jsxs("div", { className: "sticky top-0 z-10 flex h-14 shrink-0 items-center gap-1 border-b border-[var(--ui-border)] bg-white pl-1 pr-3 pt-[env(safe-area-inset-top,0px)] box-content dark:bg-gray-800", children: [jsxRuntime.jsx(Button, { iconOnly: true, "aria-label": "Close", variant: "plain", theme: "secondary", onClick: onClose, className: "shrink-0", children: jsxRuntime.jsx(SvgX, { className: "size-5" }) }), title && (jsxRuntime.jsx(react.DialogTitle, { as: "h3", className: "min-w-0 flex-1 truncate text-base font-semibold text-gray-900 dark:text-white", children: title })), headerAction && jsxRuntime.jsx("div", { className: "ml-auto shrink-0", children: headerAction })] })), !fullscreen && showTitleSection && (jsxRuntime.jsxs("div", { className: buildClassName('space-y-1 py-3 px-4 md:px-6 flex flex-col border-b border-[var(--ui-border)] shrink-0', titleSticky && 'sticky top-0 bg-white dark:bg-gray-800 z-10'), children: [jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-3 min-w-0", children: [jsxRuntime.jsxs("div", { className: "flex items-center gap-2 min-w-0 flex-1", children: [showBackButton && (jsxRuntime.jsx(Button, { iconOnly: true, "aria-label": "Back", variant: "plain", theme: "secondary", size: "xs", onClick: onClose, children: jsxRuntime.jsx(SvgChevronLeft, { className: "size-4" }) })), title && (jsxRuntime.jsx(react.DialogTitle, { as: "h3", className: buildClassName('text-lg font-semibold text-gray-900 dark:text-white truncate tracking-tight min-w-0', titleClass), children: title }))] }), showCloseButton && (jsxRuntime.jsx(Button, { iconOnly: true, "aria-label": "Close drawer", variant: "plain", theme: "secondary", size: "xs", onClick: onClose, className: "rounded-full text-gray-400 hover:text-gray-600 dark:hover:text-gray-200 shrink-0", children: jsxRuntime.jsx(SvgX, { className: "size-4" }) }))] }), description && (jsxRuntime.jsx("p", { className: buildClassName('text-sm text-gray-500 dark:text-gray-400 font-normal truncate', descriptionClass), children: description }))] })), jsxRuntime.jsxs("div", { className: buildClassName('flex-1 p-4 md:p-6 space-y-4 min-w-0', contentClass, fullscreen && 'pb-[calc(1rem+env(safe-area-inset-bottom,0px))]'), children: [fullscreen && description && (jsxRuntime.jsx("p", { className: buildClassName('text-sm text-gray-500 dark:text-gray-400', descriptionClass), children: description })), children] }), !fullscreen && footer && (jsxRuntime.jsx("div", { className: buildClassName('p-4 border-t border-[var(--ui-border-muted)] bg-white dark:bg-gray-800 shrink-0 min-w-0', footerSticky && 'sticky bottom-0 z-10'), children: footer }))] }) }) })] }));
|
|
477
479
|
};
|
|
478
480
|
Drawer.displayName = 'Drawer';
|
|
481
|
+
// history.back() lands later, so a drawer opening meanwhile (one replacing another,
|
|
482
|
+
// or React re-running effects under StrictMode) would have its new entry removed
|
|
483
|
+
// instead, and close at once. Removals are counted, and an opening drawer waits for them.
|
|
484
|
+
let pendingBacks = 0;
|
|
485
|
+
const afterBacks = [];
|
|
486
|
+
function settleBack() {
|
|
487
|
+
pendingBacks = Math.max(0, pendingBacks - 1);
|
|
488
|
+
if (pendingBacks === 0)
|
|
489
|
+
afterBacks.splice(0).forEach((run) => run());
|
|
490
|
+
}
|
|
491
|
+
function removeEntry() {
|
|
492
|
+
pendingBacks += 1;
|
|
493
|
+
let settled = false;
|
|
494
|
+
const settle = () => {
|
|
495
|
+
if (settled)
|
|
496
|
+
return;
|
|
497
|
+
settled = true;
|
|
498
|
+
window.removeEventListener('popstate', settle);
|
|
499
|
+
settleBack();
|
|
500
|
+
};
|
|
501
|
+
window.addEventListener('popstate', settle);
|
|
502
|
+
// A back that never reports (nothing to go back to) mustn't hold others up.
|
|
503
|
+
window.setTimeout(settle, 500);
|
|
504
|
+
window.history.back();
|
|
505
|
+
}
|
|
479
506
|
/**
|
|
480
507
|
* While `active`, the browser's back button (and Android's back gesture)
|
|
481
508
|
* closes the drawer instead of leaving the page: opening adds a history entry
|
|
@@ -493,8 +520,7 @@ function useCloseOnBack(active, onClose) {
|
|
|
493
520
|
if (!active || typeof window === 'undefined')
|
|
494
521
|
return;
|
|
495
522
|
const pushEntry = () => { var _a; return window.history.pushState({ ...((_a = window.history.state) !== null && _a !== void 0 ? _a : {}), drawer: token }, ''); };
|
|
496
|
-
|
|
497
|
-
let entryPresent = true;
|
|
523
|
+
let entryPresent = false;
|
|
498
524
|
let disposed = false;
|
|
499
525
|
const handlePop = () => {
|
|
500
526
|
var _a;
|
|
@@ -511,13 +537,23 @@ function useCloseOnBack(active, onClose) {
|
|
|
511
537
|
entryPresent = true;
|
|
512
538
|
}, 0);
|
|
513
539
|
};
|
|
514
|
-
|
|
540
|
+
const start = () => {
|
|
541
|
+
if (disposed)
|
|
542
|
+
return;
|
|
543
|
+
pushEntry();
|
|
544
|
+
entryPresent = true;
|
|
545
|
+
window.addEventListener('popstate', handlePop);
|
|
546
|
+
};
|
|
547
|
+
if (pendingBacks > 0)
|
|
548
|
+
afterBacks.push(start);
|
|
549
|
+
else
|
|
550
|
+
start();
|
|
515
551
|
return () => {
|
|
516
552
|
var _a;
|
|
517
553
|
disposed = true;
|
|
518
554
|
window.removeEventListener('popstate', handlePop);
|
|
519
555
|
if (entryPresent && ((_a = window.history.state) === null || _a === void 0 ? void 0 : _a.drawer) === token)
|
|
520
|
-
|
|
556
|
+
removeEntry();
|
|
521
557
|
};
|
|
522
558
|
}, [active, token]);
|
|
523
559
|
}
|
|
@@ -4359,7 +4395,7 @@ const SelectBox = React.forwardRef((props, forwardedRef) => {
|
|
|
4359
4395
|
const isOptSelected = selectedValueSet.has(optVal);
|
|
4360
4396
|
return (jsxRuntime.jsx(react.ComboboxOption, { disabled: option.disabled, value: option, className: "group rounded-lg py-1.5 px-3 select-none data-[focus]:bg-gray-100 dark:data-[focus]:bg-white/10 data-disabled:opacity-50 cursor-pointer data-disabled:pointer-events-none", children: renderOption ? (renderOption(option, Boolean(isOptSelected))) : (jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-2 text-gray-900 dark:text-white group-data-[selected]:text-blue-600", children: [jsxRuntime.jsx("span", { className: "text-sm/6", children: getDisplayValue(option) }), jsxRuntime.jsx(SvgCheck, { className: "invisible size-5 dark:stroke-gray-300 group-data-[selected]:visible" })] })) }, optVal));
|
|
4361
4397
|
};
|
|
4362
|
-
return (jsxRuntime.jsxs("div", { className: buildClassName('group
|
|
4398
|
+
return (jsxRuntime.jsxs("div", { className: buildClassName('group', hasError && 'has-error', containerClass), ref: containerRef, children: [label && (jsxRuntime.jsxs("div", { className: buildClassName('flex items-center justify-between mb-1.5', labelWrapperClass), children: [jsxRuntime.jsx(Label, { className: labelClass, htmlFor: id, "aria-required": required, children: label }), labelHint && jsxRuntime.jsx(TextContent, { xsmall: true, children: labelHint })] })), jsxRuntime.jsxs(react.Combobox, { multiple: multiple, immediate: immediate, name: name, value: normalizedSelected, onChange: comboboxOnChangeWrapper, onClose: () => setQuery(''), disabled: disabled, by: (a, b) => (a && b ? getValue(a) === getValue(b) : a === b), children: [multiple ? (jsxRuntime.jsxs("div", { className: buildClassName(baseInputClass, 'flex flex-wrap gap-2 peer relative', rightPaddingClass, hasLeftGroup ? (size === 'lg' ? 'ps-12' : size === 'sm' ? 'ps-8' : 'ps-10') : ''), ref: forwardedRef, children: [hasLeftGroup && (jsxRuntime.jsx("span", { className: buildClassName('absolute left-0 top-0 h-full flex items-center justify-center text-gray-400 dark:text-gray-500', currentSize.group), children: leftGroup })), isArray(normalizedSelected) &&
|
|
4363
4399
|
(normalizedSelected === null || normalizedSelected === void 0 ? void 0 : normalizedSelected.length) > 0 &&
|
|
4364
4400
|
normalizedSelected.map((option, idx) => (jsxRuntime.jsx(Badge, { theme: "secondary", size: currentSize.badgeSize, removable: !disabled, onRemove: () => removeSelection(idx), children: getDisplayValue(option) }, `${getValue(option)}-${idx}`))), jsxRuntime.jsx(react.ComboboxInput, { className: "outline-none flex-1 dark:placeholder-gray-400 placeholder-gray-400 bg-transparent", "aria-label": name, value: query, autoComplete: "off", placeholder: (normalizedSelected === null || normalizedSelected === void 0 ? void 0 : normalizedSelected.length) ? '' : placeholder, onChange: (e) => {
|
|
4365
4401
|
const val = e.target.value;
|
|
@@ -4490,7 +4526,7 @@ const QuantityStepper = React.forwardRef((props, ref) => {
|
|
|
4490
4526
|
};
|
|
4491
4527
|
const isAtMin = disabled || value <= min;
|
|
4492
4528
|
const isAtMax = disabled || value >= max;
|
|
4493
|
-
return (jsxRuntime.jsxs("div", { className: buildClassName('flex flex-col gap-1 inline-flex', className), children: [label && (jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-2", children: [jsxRuntime.jsx(Label, { htmlFor: stepperId, className: disabled ? 'opacity-70 cursor-not-allowed' : '', children: label }), labelHint && jsxRuntime.jsx(TextContent, { xsmall: true, children: labelHint })] })), jsxRuntime.jsxs("div", { className: buildClassName('inline-flex items-center rounded-lg shadow-2xs transition-all duration-150', 'outline outline-1 -outline-offset-1', CONTAINER_SIZE_CLASS[size], hasError
|
|
4529
|
+
return (jsxRuntime.jsxs("div", { className: buildClassName('flex flex-col gap-1.5 inline-flex', className), children: [label && (jsxRuntime.jsxs("div", { className: "flex items-center justify-between gap-2", children: [jsxRuntime.jsx(Label, { htmlFor: stepperId, className: disabled ? 'opacity-70 cursor-not-allowed' : '', children: label }), labelHint && jsxRuntime.jsx(TextContent, { xsmall: true, children: labelHint })] })), jsxRuntime.jsxs("div", { className: buildClassName('inline-flex items-center rounded-lg shadow-2xs transition-all duration-150', 'outline outline-1 -outline-offset-1', CONTAINER_SIZE_CLASS[size], hasError
|
|
4494
4530
|
? '!outline-red-500 !ring-1 !ring-red-500/50 dark:!outline-red-500'
|
|
4495
4531
|
: 'outline-[var(--ui-border)]', disabled
|
|
4496
4532
|
? 'pointer-events-none bg-gray-100 dark:bg-gray-800 outline-[var(--ui-border-muted)]'
|