UNPKG

pragmate-ui

Version:

An advanced, on-demand React UI library optimized for BeyondJS. Pragmate UI provides modular, responsive, and accessible components with a focus on efficient bundle sizes and a streamlined development process.

354 lines (334 loc) 12.1 kB
System.register(["@beyond-js/kernel/bundle", "@beyond-js/kernel/styles", "react", "@beyond-js/kernel/routing"], function (_export, _context2) { "use strict"; var dependency_0, dependency_1, dependency_2, dependency_3, __Bundle, __pkg, ims, TabsContainer, Panes, Tab, Tabs, __beyond_pkg, hmr; _export({ TabsContainer: void 0, Panes: void 0, Tab: void 0, Tabs: void 0 }); return { setters: [function (_beyondJsKernelBundle) { dependency_0 = _beyondJsKernelBundle; }, function (_beyondJsKernelStyles) { dependency_1 = _beyondJsKernelStyles; }, function (_react2) { dependency_2 = _react2; }, function (_beyondJsKernelRouting) { dependency_3 = _beyondJsKernelRouting; }], execute: function () { ({ Bundle: __Bundle } = dependency_0); __pkg = new __Bundle({ "module": { "vspecifier": "pragmate-ui@1.0.1/tabs" }, "type": "code" }, _context2.meta.url).package(); ; __pkg.dependencies.update([['@beyond-js/kernel/styles', dependency_1], ['react', dependency_2], ['@beyond-js/kernel/routing', dependency_3]]); brequire('@beyond-js/kernel/styles').styles.register('pragmate-ui@1.0.1/tabs'); ims = new Map(); /************************* INTERNAL MODULE: ./context *************************/ ims.set('./context', { hash: 451487243, creator: function (require, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useTabsContext = exports.TabsContext = void 0; var _react = require("react"); const TabsContext = exports.TabsContext = _react.default.createContext({}); const useTabsContext = () => _react.default.useContext(TabsContext); exports.useTabsContext = useTabsContext; } }); /***************************** INTERNAL MODULE: ./definitions *****************************/ ims.set('./definitions', { hash: 1537491585, creator: function (require, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); } }); /*********************** INTERNAL MODULE: ./index ***********************/ ims.set('./index', { hash: 1102662752, creator: function (require, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TabsContainer = TabsContainer; var _routing = require("@beyond-js/kernel/routing"); var _react = require("react"); var _context = require("./context"); /* bundle */ function TabsContainer({ active = 0, onChange, className, current, children, tabs = [], panes, trackUrl }) { // Extract tab names from children if (trackUrl) { const tab = _routing.routing.uri.qs.get('tab'); current = current ?? tab; } const activeIndex = tabs.includes(current) ? tabs.indexOf(current) : active; const [activeTab, setActiveTab] = _react.default.useState(activeIndex); const [currentTabName, setCurrentTabName] = _react.default.useState(current); // Update active tab if `current` prop changes const value = { panes, activeTab, setActiveTab, onChange, trackUrl, current: currentTabName, currentTabName, setCurrentTabName, names: tabs }; const cls = `pui-tabs-container${className ? ` ${className}` : ''}`; return _react.default.createElement(_context.TabsContext.Provider, { value: value }, _react.default.createElement("section", { className: cls }, children)); } } }); /*********************** INTERNAL MODULE: ./panes ***********************/ ims.set('./panes', { hash: 1726352262, creator: function (require, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Panes = Panes; var _react = require("react"); var _context = require("./context"); /*bundle*/ function Panes({ children, className, items }) { const { activeTab } = (0, _context.useTabsContext)(); if (items) { const Control = items[activeTab]; return _react.default.createElement("section", { className: `tab-content ${className ? ` ${className}` : ''}` }, _react.default.createElement(Control, null)); } const childrenArray = _react.default.Children.toArray(children); const Control = childrenArray[activeTab]; const cls = `tab-content ${className ? ` ${className}` : ''}`; return _react.default.createElement("section", { className: cls }, Control); } } }); /********************* INTERNAL MODULE: ./tab *********************/ ims.set('./tab', { hash: 588532965, creator: function (require, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Tab = Tab; var _react = require("react"); var _context = require("./context"); var _routing = require("@beyond-js/kernel/routing"); /*bundle */ function Tab(props) { const { children, index, disabled, className, name } = props; const { activeTab, setActiveTab, onChange, trackUrl } = (0, _context.useTabsContext)(); let cls = `tab ${index === activeTab ? 'active' : ''} ${disabled ? ' is-disabled' : ''}`; if (className) cls += ' ' + className; const onClick = event => { // todo: this event must be removed if (trackUrl) { // Convert `routing.uri.qs.entries` to an object const queryParams = Object.fromEntries(_routing.routing.uri.qs.entries()); // Update the `tab` parameter queryParams.tab = name; // Build the new query string const queryString = new URLSearchParams(queryParams).toString(); // Update the URL without reloading the page _routing.routing.replaceState({}, '', `${_routing.routing.uri.pathname}?${queryString}`); } if (onChange) onChange(event, index); setActiveTab(index); }; const attrs = {}; if (!disabled) attrs.onClick = onClick; return _react.default.createElement("div", { className: cls, ...attrs, "data-name": name, "data-index": index }, children); } } }); /********************** INTERNAL MODULE: ./tabs **********************/ ims.set('./tabs', { hash: 1755048068, creator: function (require, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Tabs = void 0; var _react = require("react"); var _context = require("./context"); var _useScroll = require("./use-scroll"); var _tab = require("./tab"); /*bundle*/ const Tabs = ({ children, className }) => { const { activeTab, names } = (0, _context.useTabsContext)(); const ref = _react.default.useRef(null); const cls = `pui-tabs-menu tabs${className ? ` ${className}` : ''}`; const clone = (item, index) => { if (!_react.default.isValidElement(item) || item.type !== _tab.Tab) return item; const props = { ...item.props, index, key: index, name: names[index] }; const tabChild = item; return _react.default.cloneElement(tabChild, props); }; const output = _react.default.Children.map(children, clone); (0, _useScroll.useScroll)(ref, activeTab); return _react.default.createElement("header", { className: cls, ref: ref }, output); }; exports.Tabs = Tabs; } }); /**************************** INTERNAL MODULE: ./use-scroll ****************************/ ims.set('./use-scroll', { hash: 1668718188, creator: function (require, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useScroll = useScroll; var _react = require("react"); function useScroll(tabRef, activeTab) { _react.default.useEffect(() => { const scrollToTab = index => { const tabElement = tabRef.current?.querySelectorAll('.tab')[index]; if (tabElement) { const container = tabRef.current; const containerRect = container.getBoundingClientRect(); const tabRect = tabElement.getBoundingClientRect(); const scrollLeft = container.scrollLeft; if (tabRect.left < containerRect.left) { container.scrollTo({ left: scrollLeft + tabRect.left - containerRect.left, behavior: 'smooth' }); } else if (tabRect.right > containerRect.right) { container.scrollTo({ left: scrollLeft + tabRect.right - containerRect.right, behavior: 'smooth' }); } } }; scrollToTab(activeTab); }, [activeTab]); } } }); __pkg.exports.descriptor = [{ "im": "./index", "from": "TabsContainer", "name": "TabsContainer" }, { "im": "./panes", "from": "Panes", "name": "Panes" }, { "im": "./tab", "from": "Tab", "name": "Tab" }, { "im": "./tabs", "from": "Tabs", "name": "Tabs" }]; // Module exports __pkg.exports.process = function ({ require, prop, value }) { (require || prop === 'TabsContainer') && _export("TabsContainer", TabsContainer = require ? require('./index').TabsContainer : value); (require || prop === 'Panes') && _export("Panes", Panes = require ? require('./panes').Panes : value); (require || prop === 'Tab') && _export("Tab", Tab = require ? require('./tab').Tab : value); (require || prop === 'Tabs') && _export("Tabs", Tabs = require ? require('./tabs').Tabs : value); }; _export("__beyond_pkg", __beyond_pkg = __pkg); _export("hmr", hmr = new function () { this.on = (event, listener) => void 0; this.off = (event, listener) => void 0; }()); __pkg.initialise(ims); } }; }); //# sourceMappingURL=tabs.sjs.js.map