@payloadcms/ui 3.65.0-canary.7 → 3.65.0-internal.5b33fe0
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/elements/PublishButton/index.d.ts.map +1 -1
- package/dist/elements/PublishButton/index.js +16 -13
- package/dist/elements/PublishButton/index.js.map +1 -1
- package/dist/elements/withMergedProps/index.d.ts +1 -1
- package/dist/elements/withMergedProps/index.js +1 -1
- package/dist/elements/withMergedProps/index.js.map +1 -1
- package/dist/exports/client/{CodeEditor-IVFMKS4Z.js → CodeEditor-ORMD3ID3.js} +2 -2
- package/dist/exports/client/{chunk-XUCNM5EK.js → chunk-PXD7OIXB.js} +1 -1
- package/dist/exports/client/{chunk-XUCNM5EK.js.map → chunk-PXD7OIXB.js.map} +2 -2
- package/dist/exports/client/index.d.ts +1 -0
- package/dist/exports/client/index.d.ts.map +1 -1
- package/dist/exports/client/index.js +12 -12
- package/dist/exports/client/index.js.map +4 -4
- package/dist/exports/shared/index.js.map +1 -1
- package/dist/fields/Array/index.js +1 -1
- package/dist/fields/Array/index.js.map +1 -1
- package/dist/fields/Blocks/BlockSelector/BlockSearch/index.d.ts.map +1 -0
- package/dist/fields/Blocks/BlockSelector/BlockSearch/index.js.map +1 -0
- package/dist/fields/Blocks/BlockSelector/index.d.ts +14 -0
- package/dist/fields/Blocks/BlockSelector/index.d.ts.map +1 -0
- package/dist/fields/Blocks/BlockSelector/index.js +116 -0
- package/dist/fields/Blocks/BlockSelector/index.js.map +1 -0
- package/dist/fields/Blocks/BlocksDrawer/index.d.ts +0 -1
- package/dist/fields/Blocks/BlocksDrawer/index.d.ts.map +1 -1
- package/dist/fields/Blocks/BlocksDrawer/index.js +63 -105
- package/dist/fields/Blocks/BlocksDrawer/index.js.map +1 -1
- package/dist/hooks/useControllableState.d.ts.map +1 -1
- package/dist/hooks/useControllableState.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/utilities/handleLivePreview.d.ts.map +1 -1
- package/package.json +4 -4
- package/dist/fields/Blocks/BlocksDrawer/BlockSearch/index.d.ts.map +0 -1
- package/dist/fields/Blocks/BlocksDrawer/BlockSearch/index.js.map +0 -1
- /package/dist/exports/client/{CodeEditor-IVFMKS4Z.js.map → CodeEditor-ORMD3ID3.js.map} +0 -0
- /package/dist/fields/Blocks/{BlocksDrawer → BlockSelector}/BlockSearch/index.d.ts +0 -0
- /package/dist/fields/Blocks/{BlocksDrawer → BlockSelector}/BlockSearch/index.js +0 -0
- /package/dist/fields/Blocks/{BlocksDrawer → BlockSelector}/BlockSearch/index.scss +0 -0
- /package/dist/fields/Blocks/{BlocksDrawer → BlockSelector}/index.scss +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/fields/Blocks/BlocksDrawer/index.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/fields/Blocks/BlocksDrawer/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAIlD,OAAO,KAAoB,MAAM,OAAO,CAAA;AAMxC,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAA;IAC5E,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,MAAM,EAAE,CAAC,WAAW,GAAG,MAAM,CAAC,EAAE,CAAA;IACzC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA6BxC,CAAA"}
|
|
@@ -1,27 +1,15 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { c as _c } from "react/compiler-runtime";
|
|
4
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
4
5
|
import { useModal } from '@faceless-ui/modal';
|
|
5
6
|
import { getTranslation } from '@payloadcms/translations';
|
|
6
|
-
import React, { useEffect
|
|
7
|
+
import React, { useEffect } from 'react';
|
|
7
8
|
import { Drawer } from '../../../elements/Drawer/index.js';
|
|
8
|
-
import { ThumbnailCard } from '../../../elements/ThumbnailCard/index.js';
|
|
9
|
-
import { DefaultBlockImage } from '../../../graphics/DefaultBlockImage/index.js';
|
|
10
|
-
import { useConfig } from '../../../providers/Config/index.js';
|
|
11
9
|
import { useTranslation } from '../../../providers/Translation/index.js';
|
|
12
|
-
import '
|
|
13
|
-
import { BlockSearch } from './BlockSearch/index.js';
|
|
14
|
-
const baseClass = 'blocks-drawer';
|
|
15
|
-
const getBlockLabel = (block, i18n) => {
|
|
16
|
-
if (typeof block.labels.singular === 'string') {
|
|
17
|
-
return block.labels.singular.toLowerCase();
|
|
18
|
-
}
|
|
19
|
-
if (typeof block.labels.singular === 'object') {
|
|
20
|
-
return getTranslation(block.labels.singular, i18n).toLowerCase();
|
|
21
|
-
}
|
|
22
|
-
return '';
|
|
23
|
-
};
|
|
10
|
+
import { BlockSelector } from '../BlockSelector/index.js';
|
|
24
11
|
export const BlocksDrawer = props => {
|
|
12
|
+
const $ = _c(19);
|
|
25
13
|
const {
|
|
26
14
|
addRow,
|
|
27
15
|
addRowIndex,
|
|
@@ -29,8 +17,6 @@ export const BlocksDrawer = props => {
|
|
|
29
17
|
drawerSlug,
|
|
30
18
|
labels
|
|
31
19
|
} = props;
|
|
32
|
-
const [searchTerm, setSearchTerm] = useState('');
|
|
33
|
-
const [filteredBlocks, setFilteredBlocks] = useState(blocks);
|
|
34
20
|
const {
|
|
35
21
|
closeModal,
|
|
36
22
|
isModalOpen
|
|
@@ -39,94 +25,66 @@ export const BlocksDrawer = props => {
|
|
|
39
25
|
i18n,
|
|
40
26
|
t
|
|
41
27
|
} = useTranslation();
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
filteredBlocks.forEach(block => {
|
|
50
|
-
if (typeof block === 'object' && block.admin?.group) {
|
|
51
|
-
const group = block.admin.group;
|
|
52
|
-
const label = typeof group === 'string' ? group : getTranslation(group, i18n);
|
|
53
|
-
if (Object.hasOwn(groups, label)) {
|
|
54
|
-
groups[label].push(block);
|
|
55
|
-
} else {
|
|
56
|
-
groups[label] = [block];
|
|
57
|
-
}
|
|
58
|
-
} else {
|
|
59
|
-
groups._none.push(block);
|
|
28
|
+
const [searchTermOverride, setSearchTermOverride] = React.useState("");
|
|
29
|
+
let t0;
|
|
30
|
+
let t1;
|
|
31
|
+
if ($[0] !== drawerSlug || $[1] !== isModalOpen) {
|
|
32
|
+
t0 = () => {
|
|
33
|
+
if (!isModalOpen(drawerSlug)) {
|
|
34
|
+
setSearchTermOverride("");
|
|
60
35
|
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
36
|
+
};
|
|
37
|
+
t1 = [isModalOpen, drawerSlug];
|
|
38
|
+
$[0] = drawerSlug;
|
|
39
|
+
$[1] = isModalOpen;
|
|
40
|
+
$[2] = t0;
|
|
41
|
+
$[3] = t1;
|
|
42
|
+
} else {
|
|
43
|
+
t0 = $[2];
|
|
44
|
+
t1 = $[3];
|
|
45
|
+
}
|
|
46
|
+
useEffect(t0, t1);
|
|
47
|
+
let t2;
|
|
48
|
+
if ($[4] !== addRow || $[5] !== addRowIndex || $[6] !== blocks || $[7] !== closeModal || $[8] !== drawerSlug || $[9] !== i18n || $[10] !== labels || $[11] !== searchTermOverride || $[12] !== t) {
|
|
49
|
+
let t3;
|
|
50
|
+
if ($[14] !== addRow || $[15] !== addRowIndex || $[16] !== closeModal || $[17] !== drawerSlug) {
|
|
51
|
+
t3 = slug => {
|
|
52
|
+
addRow(addRowIndex, slug);
|
|
53
|
+
closeModal(drawerSlug);
|
|
54
|
+
};
|
|
55
|
+
$[14] = addRow;
|
|
56
|
+
$[15] = addRowIndex;
|
|
57
|
+
$[16] = closeModal;
|
|
58
|
+
$[17] = drawerSlug;
|
|
59
|
+
$[18] = t3;
|
|
60
|
+
} else {
|
|
61
|
+
t3 = $[18];
|
|
67
62
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
}, []);
|
|
79
|
-
setFilteredBlocks(matchingBlocks);
|
|
80
|
-
}, [searchTerm, blocks, i18n, config.blocksMap]);
|
|
81
|
-
return /*#__PURE__*/_jsxs(Drawer, {
|
|
82
|
-
slug: drawerSlug,
|
|
83
|
-
title: t('fields:addLabel', {
|
|
84
|
-
label: getTranslation(labels.singular, i18n)
|
|
85
|
-
}),
|
|
86
|
-
children: [/*#__PURE__*/_jsx(BlockSearch, {
|
|
87
|
-
setSearchTerm: setSearchTerm
|
|
88
|
-
}), /*#__PURE__*/_jsx("div", {
|
|
89
|
-
className: `${baseClass}__blocks-wrapper`,
|
|
90
|
-
children: /*#__PURE__*/_jsx("ul", {
|
|
91
|
-
className: `${baseClass}__block-groups`,
|
|
92
|
-
children: Object.entries(blockGroups).map(([groupLabel, groupBlocks]) => !groupBlocks.length ? null : /*#__PURE__*/_jsxs("li", {
|
|
93
|
-
className: [`${baseClass}__block-group`, groupLabel === '_none' && `${baseClass}__block-group-none`].filter(Boolean).join(' '),
|
|
94
|
-
children: [groupLabel !== '_none' && /*#__PURE__*/_jsx("h3", {
|
|
95
|
-
className: `${baseClass}__block-group-label`,
|
|
96
|
-
children: groupLabel
|
|
97
|
-
}), /*#__PURE__*/_jsx("ul", {
|
|
98
|
-
className: `${baseClass}__blocks`,
|
|
99
|
-
children: groupBlocks.map((_block_0, index) => {
|
|
100
|
-
const block_1 = typeof _block_0 === 'string' ? config.blocksMap[_block_0] : _block_0;
|
|
101
|
-
const {
|
|
102
|
-
slug,
|
|
103
|
-
imageAltText,
|
|
104
|
-
imageURL,
|
|
105
|
-
labels: blockLabels
|
|
106
|
-
} = block_1;
|
|
107
|
-
return /*#__PURE__*/_jsx("li", {
|
|
108
|
-
className: `${baseClass}__block`,
|
|
109
|
-
children: /*#__PURE__*/_jsx(ThumbnailCard, {
|
|
110
|
-
alignLabel: "center",
|
|
111
|
-
label: getTranslation(blockLabels?.singular, i18n),
|
|
112
|
-
onClick: () => {
|
|
113
|
-
void addRow(addRowIndex, slug);
|
|
114
|
-
closeModal(drawerSlug);
|
|
115
|
-
},
|
|
116
|
-
thumbnail: /*#__PURE__*/_jsx("div", {
|
|
117
|
-
className: `${baseClass}__default-image`,
|
|
118
|
-
children: imageURL ? /*#__PURE__*/_jsx("img", {
|
|
119
|
-
alt: imageAltText,
|
|
120
|
-
src: imageURL
|
|
121
|
-
}) : /*#__PURE__*/_jsx(DefaultBlockImage, {})
|
|
122
|
-
})
|
|
123
|
-
})
|
|
124
|
-
}, index);
|
|
125
|
-
})
|
|
126
|
-
})]
|
|
127
|
-
}, groupLabel))
|
|
63
|
+
t2 = _jsx(Drawer, {
|
|
64
|
+
slug: drawerSlug,
|
|
65
|
+
title: t("fields:addLabel", {
|
|
66
|
+
label: getTranslation(labels.singular, i18n)
|
|
67
|
+
}),
|
|
68
|
+
children: _jsx(BlockSelector, {
|
|
69
|
+
blocks,
|
|
70
|
+
labels,
|
|
71
|
+
onSelect: t3,
|
|
72
|
+
searchTerm: searchTermOverride
|
|
128
73
|
})
|
|
129
|
-
})
|
|
130
|
-
|
|
74
|
+
});
|
|
75
|
+
$[4] = addRow;
|
|
76
|
+
$[5] = addRowIndex;
|
|
77
|
+
$[6] = blocks;
|
|
78
|
+
$[7] = closeModal;
|
|
79
|
+
$[8] = drawerSlug;
|
|
80
|
+
$[9] = i18n;
|
|
81
|
+
$[10] = labels;
|
|
82
|
+
$[11] = searchTermOverride;
|
|
83
|
+
$[12] = t;
|
|
84
|
+
$[13] = t2;
|
|
85
|
+
} else {
|
|
86
|
+
t2 = $[13];
|
|
87
|
+
}
|
|
88
|
+
return t2;
|
|
131
89
|
};
|
|
132
90
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["
|
|
1
|
+
{"version":3,"file":"index.js","names":["c","_c","useModal","getTranslation","React","useEffect","Drawer","useTranslation","BlockSelector","BlocksDrawer","props","$","addRow","addRowIndex","blocks","drawerSlug","labels","closeModal","isModalOpen","i18n","t","searchTermOverride","setSearchTermOverride","useState","t0","t1","t2","t3","slug","_jsx","title","label","singular","children","onSelect","searchTerm"],"sources":["../../../../src/fields/Blocks/BlocksDrawer/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientBlock, Labels } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport React, { useEffect } from 'react'\n\nimport { Drawer } from '../../../elements/Drawer/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { BlockSelector } from '../BlockSelector/index.js'\n\nexport type Props = {\n readonly addRow: (index: number, blockType?: string) => Promise<void> | void\n readonly addRowIndex: number\n readonly blocks: (ClientBlock | string)[]\n readonly drawerSlug: string\n readonly labels: Labels\n}\n\nexport const BlocksDrawer: React.FC<Props> = (props) => {\n const { addRow, addRowIndex, blocks, drawerSlug, labels } = props\n\n const { closeModal, isModalOpen } = useModal()\n const { i18n, t } = useTranslation()\n const [searchTermOverride, setSearchTermOverride] = React.useState('')\n\n useEffect(() => {\n if (!isModalOpen(drawerSlug)) {\n setSearchTermOverride('')\n }\n }, [isModalOpen, drawerSlug])\n\n return (\n <Drawer\n slug={drawerSlug}\n title={t('fields:addLabel', { label: getTranslation(labels.singular, i18n) })}\n >\n <BlockSelector\n blocks={blocks}\n labels={labels}\n onSelect={(slug) => {\n void addRow(addRowIndex, slug)\n closeModal(drawerSlug)\n }}\n searchTerm={searchTermOverride}\n />\n </Drawer>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAGA,SAASC,QAAQ,QAAQ;AACzB,SAASC,cAAc,QAAQ;AAC/B,OAAOC,KAAA,IAASC,SAAS,QAAQ;AAEjC,SAASC,MAAM,QAAQ;AACvB,SAASC,cAAc,QAAQ;AAC/B,SAASC,aAAa,QAAQ;AAU9B,OAAO,MAAMC,YAAA,GAAgCC,KAAA;EAAA,MAAAC,CAAA,GAAAV,EAAA;EAC3C;IAAAW,MAAA;IAAAC,WAAA;IAAAC,MAAA;IAAAC,UAAA;IAAAC;EAAA,IAA4DN,KAAA;EAE5D;IAAAO,UAAA;IAAAC;EAAA,IAAoChB,QAAA;EACpC;IAAAiB,IAAA;IAAAC;EAAA,IAAoBb,cAAA;EACpB,OAAAc,kBAAA,EAAAC,qBAAA,IAAoDlB,KAAA,CAAAmB,QAAA,CAAe;EAAA,IAAAC,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAd,CAAA,QAAAI,UAAA,IAAAJ,CAAA,QAAAO,WAAA;IAEzDM,EAAA,GAAAA,CAAA;MAAA,KACHN,WAAA,CAAYH,UAAA;QACfO,qBAAA,CAAsB;MAAA;IAAA;IAEvBG,EAAA,IAACP,WAAA,EAAaH,UAAA;IAAWJ,CAAA,MAAAI,UAAA;IAAAJ,CAAA,MAAAO,WAAA;IAAAP,CAAA,MAAAa,EAAA;IAAAb,CAAA,MAAAc,EAAA;EAAA;IAAAD,EAAA,GAAAb,CAAA;IAAAc,EAAA,GAAAd,CAAA;EAAA;EAJ5BN,SAAA,CAAUmB,EAIV,EAAGC,EAAyB;EAAA,IAAAC,EAAA;EAAA,IAAAf,CAAA,QAAAC,MAAA,IAAAD,CAAA,QAAAE,WAAA,IAAAF,CAAA,QAAAG,MAAA,IAAAH,CAAA,QAAAM,UAAA,IAAAN,CAAA,QAAAI,UAAA,IAAAJ,CAAA,QAAAQ,IAAA,IAAAR,CAAA,SAAAK,MAAA,IAAAL,CAAA,SAAAU,kBAAA,IAAAV,CAAA,SAAAS,CAAA;IAAA,IAAAO,EAAA;IAAA,IAAAhB,CAAA,SAAAC,MAAA,IAAAD,CAAA,SAAAE,WAAA,IAAAF,CAAA,SAAAM,UAAA,IAAAN,CAAA,SAAAI,UAAA;MAUZY,EAAA,GAAAC,IAAA;QACHhB,MAAA,CAAOC,WAAA,EAAae,IAAA;QACzBX,UAAA,CAAWF,UAAA;MAAA;MACbJ,CAAA,OAAAC,MAAA;MAAAD,CAAA,OAAAE,WAAA;MAAAF,CAAA,OAAAM,UAAA;MAAAN,CAAA,OAAAI,UAAA;MAAAJ,CAAA,OAAAgB,EAAA;IAAA;MAAAA,EAAA,GAAAhB,CAAA;IAAA;IAVJe,EAAA,GAAAG,IAAA,CAAAvB,MAAA;MAAAsB,IAAA,EACQb,UAAA;MAAAe,KAAA,EACCV,CAAA,CAAE;QAAAW,KAAA,EAA4B5B,cAAA,CAAea,MAAA,CAAAgB,QAAA,EAAiBb,IAAA;MAAA,CAAM;MAAAc,QAAA,EAE3EJ,IAAA,CAAArB,aAAA;QAAAM,MAAA;QAAAE,MAAA;QAAAkB,QAAA,EAGYP,EAGV;QAAAQ,UAAA,EACYd;MAAA,C;;;;;;;;;;;;;;;SAXhBK,E;CAeJ","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useControllableState.d.ts","sourceRoot":"","sources":["../../src/hooks/useControllableState.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,CAAC,EACvC,SAAS,EAAE,CAAC,EACZ,aAAa,EAAE,CAAC,GACf,CAAC,CAAC,SAAS,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"useControllableState.d.ts","sourceRoot":"","sources":["../../src/hooks/useControllableState.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,CAAC,EACvC,SAAS,EAAE,CAAC,EACZ,aAAa,EAAE,CAAC,GACf,CAAC,CAAC,SAAS,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAA;AAE7F,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useControllableState.js","names":["c","_c","useEffect","useRef","useState","useControllableState","propValue","fallbackValue","$","localValue","setLocalValue","initialRenderRef","t0","t1","current","t2","t3"],"sources":["../../src/hooks/useControllableState.ts"],"sourcesContent":["'use client'\nimport { useEffect, useRef, useState } from 'react'\n\n/**\n * A hook for managing state that can be controlled by props but also overridden locally.\n * Props always take precedence if they change, but local state can override them temporarily.\n *\n * @param propValue - The controlled value from props\n * @param fallbackValue - Value to use when propValue is null or undefined\n *\n * @internal - may change or be removed without a major version bump\n */\nexport function useControllableState<T, D>(\n propValue: T,\n fallbackValue: D,\n): [T extends NonNullable<T> ? T : D | NonNullable<T>, (value: ((prev: T) => T) | T) => void]\nexport function useControllableState<T>(propValue: T): [T, (value: ((prev: T) => T) | T) => void]\nexport function useControllableState<T, D>(\n propValue: T,\n fallbackValue?: D,\n): [T extends NonNullable<T> ? T : D | NonNullable<T>, (value: ((prev: T) => T) | T) => void] {\n const [localValue, setLocalValue] = useState<T>(propValue)\n const initialRenderRef = useRef(true)\n\n useEffect(() => {\n if (initialRenderRef.current) {\n initialRenderRef.current = false\n return\n }\n\n setLocalValue(propValue)\n }, [propValue])\n\n return [localValue ?? fallbackValue, setLocalValue] as [\n T extends NonNullable<T> ? T : D | NonNullable<T>,\n (value: ((prev: T) => T) | T) => void,\n ]\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;AACA,SAASC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ;
|
|
1
|
+
{"version":3,"file":"useControllableState.js","names":["c","_c","useEffect","useRef","useState","useControllableState","propValue","fallbackValue","$","localValue","setLocalValue","initialRenderRef","t0","t1","current","t2","t3"],"sources":["../../src/hooks/useControllableState.ts"],"sourcesContent":["'use client'\nimport { useEffect, useRef, useState } from 'react'\n\n/**\n * A hook for managing state that can be controlled by props but also overridden locally.\n * Props always take precedence if they change, but local state can override them temporarily.\n *\n * @param propValue - The controlled value from props\n * @param fallbackValue - Value to use when propValue is null or undefined\n *\n * @internal - may change or be removed without a major version bump\n */\nexport function useControllableState<T, D>(\n propValue: T,\n fallbackValue: D,\n): [T extends NonNullable<T> ? T : D | NonNullable<T>, (value: ((prev: T) => T) | T) => void]\n\nexport function useControllableState<T>(propValue: T): [T, (value: ((prev: T) => T) | T) => void]\n\nexport function useControllableState<T, D>(\n propValue: T,\n fallbackValue?: D,\n): [T extends NonNullable<T> ? T : D | NonNullable<T>, (value: ((prev: T) => T) | T) => void] {\n const [localValue, setLocalValue] = useState<T>(propValue)\n const initialRenderRef = useRef(true)\n\n useEffect(() => {\n if (initialRenderRef.current) {\n initialRenderRef.current = false\n return\n }\n\n setLocalValue(propValue)\n }, [propValue])\n\n return [localValue ?? fallbackValue, setLocalValue] as [\n T extends NonNullable<T> ? T : D | NonNullable<T>,\n (value: ((prev: T) => T) | T) => void,\n ]\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;AACA,SAASC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ;AAkB5C,OAAO,SAAAC,qBAAAC,SAAA,EAAAC,aAAA;EAAA,MAAAC,CAAA,GAAAP,EAAA;EAIL,OAAAQ,UAAA,EAAAC,aAAA,IAAoCN,QAAA,CAAYE,SAAA;EAChD,MAAAK,gBAAA,GAAyBR,MAAA,KAAO;EAAA,IAAAS,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAL,CAAA,QAAAF,SAAA;IAEtBM,EAAA,GAAAA,CAAA;MAAA,IACJD,gBAAA,CAAAG,OAAA;QACFH,gBAAA,CAAAG,OAAA;QAAA;MAAA;MAIFJ,aAAA,CAAcJ,SAAA;IAAA;IACbO,EAAA,IAACP,SAAA;IAAUE,CAAA,MAAAF,SAAA;IAAAE,CAAA,MAAAI,EAAA;IAAAJ,CAAA,MAAAK,EAAA;EAAA;IAAAD,EAAA,GAAAJ,CAAA;IAAAK,EAAA,GAAAL,CAAA;EAAA;EAPdN,SAAA,CAAUU,EAOV,EAAGC,EAAW;EAEN,MAAAE,EAAA,GAAAN,UAAA,IAAcF,aAAA;EAAA,IAAAS,EAAA;EAAA,IAAAR,CAAA,QAAAO,EAAA;IAAfC,EAAA,IAACD,EAAc,EAAeL,aAAA;IAAcF,CAAA,MAAAO,EAAA;IAAAP,CAAA,MAAAQ,EAAA;EAAA;IAAAA,EAAA,GAAAR,CAAA;EAAA;EAAA,OAA5CQ,EAA4C;AAAA","ignoreList":[]}
|