@ariakit/core
Version:
Ariakit core
174 lines (157 loc) • 5.59 kB
JavaScript
;Object.defineProperty(exports, "__esModule", {value: true});
var _OYTZFOIJcjs = require('../__chunks/OYTZFOIJ.cjs');
require('../__chunks/GDZQUFNP.cjs');
var _HGVIF2R4cjs = require('../__chunks/HGVIF2R4.cjs');
require('../__chunks/4ITB54IT.cjs');
var _WPBYRKFQcjs = require('../__chunks/WPBYRKFQ.cjs');
var _6BYUUR4Mcjs = require('../__chunks/6BYUUR4M.cjs');
// src/tab/tab-store.ts
function createTabStore({
composite: parentComposite,
combobox,
...props
} = {}) {
const independentKeys = [
"items",
"renderedItems",
"moves",
"orientation",
"virtualFocus",
"includesBaseElement",
"baseElement",
"focusLoop",
"focusShift",
"focusWrap"
];
const store = _WPBYRKFQcjs.mergeStore.call(void 0,
props.store,
_WPBYRKFQcjs.omit.call(void 0, parentComposite, independentKeys),
_WPBYRKFQcjs.omit.call(void 0, combobox, independentKeys)
);
const syncState = store == null ? void 0 : store.getState();
const composite = _OYTZFOIJcjs.createCompositeStore.call(void 0, {
...props,
store,
// We need to explicitly set the default value of `includesBaseElement` to
// `false` since we don't want the composite store to default it to `true`
// when the activeId state is null, which could be the case when rendering
// combobox with tab.
includesBaseElement: _6BYUUR4Mcjs.defaultValue.call(void 0,
props.includesBaseElement,
syncState == null ? void 0 : syncState.includesBaseElement,
false
),
orientation: _6BYUUR4Mcjs.defaultValue.call(void 0,
props.orientation,
syncState == null ? void 0 : syncState.orientation,
"horizontal"
),
focusLoop: _6BYUUR4Mcjs.defaultValue.call(void 0, props.focusLoop, syncState == null ? void 0 : syncState.focusLoop, true)
});
const panels = _HGVIF2R4cjs.createCollectionStore.call(void 0, );
const initialState = {
...composite.getState(),
selectedId: _6BYUUR4Mcjs.defaultValue.call(void 0,
props.selectedId,
syncState == null ? void 0 : syncState.selectedId,
props.defaultSelectedId
),
selectOnMove: _6BYUUR4Mcjs.defaultValue.call(void 0,
props.selectOnMove,
syncState == null ? void 0 : syncState.selectOnMove,
true
)
};
const tab = _WPBYRKFQcjs.createStore.call(void 0, initialState, composite, store);
_WPBYRKFQcjs.setup.call(void 0,
tab,
() => _WPBYRKFQcjs.sync.call(void 0, tab, ["moves"], () => {
const { activeId, selectOnMove } = tab.getState();
if (!selectOnMove) return;
if (!activeId) return;
const tabItem = composite.item(activeId);
if (!tabItem) return;
if (tabItem.dimmed) return;
if (tabItem.disabled) return;
tab.setState("selectedId", tabItem.id);
})
);
let syncActiveId = true;
_WPBYRKFQcjs.setup.call(void 0,
tab,
() => _WPBYRKFQcjs.batch.call(void 0, tab, ["selectedId"], (state, prev) => {
if (!syncActiveId) {
syncActiveId = true;
return;
}
if (parentComposite && state.selectedId === prev.selectedId) return;
tab.setState("activeId", state.selectedId);
})
);
_WPBYRKFQcjs.setup.call(void 0,
tab,
() => _WPBYRKFQcjs.sync.call(void 0, tab, ["selectedId", "renderedItems"], (state) => {
if (state.selectedId !== void 0) return;
const { activeId, renderedItems } = tab.getState();
const tabItem = composite.item(activeId);
if (tabItem && !tabItem.disabled && !tabItem.dimmed) {
tab.setState("selectedId", tabItem.id);
} else {
const tabItem2 = renderedItems.find(
(item) => !item.disabled && !item.dimmed
);
tab.setState("selectedId", tabItem2 == null ? void 0 : tabItem2.id);
}
})
);
_WPBYRKFQcjs.setup.call(void 0,
tab,
() => _WPBYRKFQcjs.sync.call(void 0, tab, ["renderedItems"], (state) => {
const tabs = state.renderedItems;
if (!tabs.length) return;
return _WPBYRKFQcjs.sync.call(void 0, panels, ["renderedItems"], (state2) => {
const items = state2.renderedItems;
const hasOrphanPanels = items.some((panel) => !panel.tabId);
if (!hasOrphanPanels) return;
items.forEach((panel, i) => {
if (panel.tabId) return;
const tabItem = tabs[i];
if (!tabItem) return;
panels.renderItem({ ...panel, tabId: tabItem.id });
});
});
})
);
let selectedIdFromSelectedValue = null;
_WPBYRKFQcjs.setup.call(void 0, tab, () => {
const backupSelectedId = () => {
selectedIdFromSelectedValue = tab.getState().selectedId;
};
const restoreSelectedId = () => {
syncActiveId = false;
tab.setState("selectedId", selectedIdFromSelectedValue);
};
if (parentComposite && "setSelectElement" in parentComposite) {
return _6BYUUR4Mcjs.chain.call(void 0,
_WPBYRKFQcjs.sync.call(void 0, parentComposite, ["value"], backupSelectedId),
_WPBYRKFQcjs.sync.call(void 0, parentComposite, ["mounted"], restoreSelectedId)
);
}
if (!combobox) return;
return _6BYUUR4Mcjs.chain.call(void 0,
_WPBYRKFQcjs.sync.call(void 0, combobox, ["selectedValue"], backupSelectedId),
_WPBYRKFQcjs.sync.call(void 0, combobox, ["mounted"], restoreSelectedId)
);
});
return {
...composite,
...tab,
panels,
setSelectedId: (id) => tab.setState("selectedId", id),
select: (id) => {
tab.setState("selectedId", id);
composite.move(id);
}
};
}
exports.createTabStore = createTabStore;