/* @ds-bundle: {"format":3,"namespace":"MONAFamilyDesignSystem_68e947","components":[{"name":"AppHeader","sourcePath":"uploads/MONA Family Design System-handoff/project/components/app/AppHeader.jsx"},{"name":"LoginScreen","sourcePath":"uploads/MONA Family Design System-handoff/project/components/app/LoginScreen.jsx"},{"name":"SortableHeader","sourcePath":"uploads/MONA Family Design System-handoff/project/components/data/SortableHeader.jsx"},{"name":"Table","sourcePath":"uploads/MONA Family Design System-handoff/project/components/data/Table.jsx"},{"name":"Badge","sourcePath":"uploads/MONA Family Design System-handoff/project/components/feedback/Badge.jsx"},{"name":"EmptyState","sourcePath":"uploads/MONA Family Design System-handoff/project/components/feedback/EmptyState.jsx"},{"name":"EnvChip","sourcePath":"uploads/MONA Family Design System-handoff/project/components/feedback/EnvChip.jsx"},{"name":"ErrorState","sourcePath":"uploads/MONA Family Design System-handoff/project/components/feedback/ErrorState.jsx"},{"name":"ProgressBar","sourcePath":"uploads/MONA Family Design System-handoff/project/components/feedback/ProgressBar.jsx"},{"name":"RoleBadge","sourcePath":"uploads/MONA Family Design System-handoff/project/components/feedback/RoleBadge.jsx"},{"name":"Skeleton","sourcePath":"uploads/MONA Family Design System-handoff/project/components/feedback/Skeleton.jsx"},{"name":"StatusGrid","sourcePath":"uploads/MONA Family Design System-handoff/project/components/feedback/StatusGrid.jsx"},{"name":"Timeline","sourcePath":"uploads/MONA Family Design System-handoff/project/components/feedback/Timeline.jsx"},{"name":"Toast","sourcePath":"uploads/MONA Family Design System-handoff/project/components/feedback/Toast.jsx"},{"name":"ToastStack","sourcePath":"uploads/MONA Family Design System-handoff/project/components/feedback/Toast.jsx"},{"name":"Tooltip","sourcePath":"uploads/MONA Family Design System-handoff/project/components/feedback/Tooltip.jsx"},{"name":"Button","sourcePath":"uploads/MONA Family Design System-handoff/project/components/forms/Button.jsx"},{"name":"Checkbox","sourcePath":"uploads/MONA Family Design System-handoff/project/components/forms/Checkbox.jsx"},{"name":"CodeBlock","sourcePath":"uploads/MONA Family Design System-handoff/project/components/forms/CodeBlock.jsx"},{"name":"CopyButton","sourcePath":"uploads/MONA Family Design System-handoff/project/components/forms/CopyButton.jsx"},{"name":"IconButton","sourcePath":"uploads/MONA Family Design System-handoff/project/components/forms/IconButton.jsx"},{"name":"Input","sourcePath":"uploads/MONA Family Design System-handoff/project/components/forms/Input.jsx"},{"name":"MaskedField","sourcePath":"uploads/MONA Family Design System-handoff/project/components/forms/MaskedField.jsx"},{"name":"RadioGroup","sourcePath":"uploads/MONA Family Design System-handoff/project/components/forms/RadioGroup.jsx"},{"name":"Select","sourcePath":"uploads/MONA Family Design System-handoff/project/components/forms/Select.jsx"},{"name":"Switch","sourcePath":"uploads/MONA Family Design System-handoff/project/components/forms/Switch.jsx"},{"name":"Textarea","sourcePath":"uploads/MONA Family Design System-handoff/project/components/forms/Textarea.jsx"},{"name":"Breadcrumb","sourcePath":"uploads/MONA Family Design System-handoff/project/components/navigation/Breadcrumb.jsx"},{"name":"Pagination","sourcePath":"uploads/MONA Family Design System-handoff/project/components/navigation/Pagination.jsx"},{"name":"ProjectSwitcher","sourcePath":"uploads/MONA Family Design System-handoff/project/components/navigation/ProjectSwitcher.jsx"},{"name":"Tabs","sourcePath":"uploads/MONA Family Design System-handoff/project/components/navigation/Tabs.jsx"},{"name":"Card","sourcePath":"uploads/MONA Family Design System-handoff/project/components/surfaces/Card.jsx"},{"name":"ConfirmDialog","sourcePath":"uploads/MONA Family Design System-handoff/project/components/surfaces/ConfirmDialog.jsx"},{"name":"EnvBanner","sourcePath":"uploads/MONA Family Design System-handoff/project/components/surfaces/EnvBanner.jsx"},{"name":"Modal","sourcePath":"uploads/MONA Family Design System-handoff/project/components/surfaces/Modal.jsx"},{"name":"StatCard","sourcePath":"uploads/MONA Family Design System-handoff/project/components/surfaces/StatCard.jsx"}],"sourceHashes":{"uploads/MONA Family Design System-handoff/project/components/app/AppHeader.jsx":"6c8b78bb90ad","uploads/MONA Family Design System-handoff/project/components/app/LoginScreen.jsx":"a7541d0392f9","uploads/MONA Family Design System-handoff/project/components/data/SortableHeader.jsx":"f20c60b6e463","uploads/MONA Family Design System-handoff/project/components/data/Table.jsx":"fee9157d5583","uploads/MONA Family Design System-handoff/project/components/feedback/Badge.jsx":"382c4271bc43","uploads/MONA Family Design System-handoff/project/components/feedback/EmptyState.jsx":"36a27b3bbcf8","uploads/MONA Family Design System-handoff/project/components/feedback/EnvChip.jsx":"f207c64207bb","uploads/MONA Family Design System-handoff/project/components/feedback/ErrorState.jsx":"c78f3e17cf38","uploads/MONA Family Design System-handoff/project/components/feedback/ProgressBar.jsx":"00e079f34588","uploads/MONA Family Design System-handoff/project/components/feedback/RoleBadge.jsx":"8f9681d47b2e","uploads/MONA Family Design System-handoff/project/components/feedback/Skeleton.jsx":"fa638ece5ae3","uploads/MONA Family Design System-handoff/project/components/feedback/StatusGrid.jsx":"eb9cf0eb4cf1","uploads/MONA Family Design System-handoff/project/components/feedback/Timeline.jsx":"8cfde353c927","uploads/MONA Family Design System-handoff/project/components/feedback/Toast.jsx":"a5bb2f7feb4a","uploads/MONA Family Design System-handoff/project/components/feedback/Tooltip.jsx":"01ccf23f0807","uploads/MONA Family Design System-handoff/project/components/forms/Button.jsx":"60ff89fa879e","uploads/MONA Family Design System-handoff/project/components/forms/Checkbox.jsx":"2d04cec07990","uploads/MONA Family Design System-handoff/project/components/forms/CodeBlock.jsx":"06c371b22a70","uploads/MONA Family Design System-handoff/project/components/forms/CopyButton.jsx":"ba2768cecca8","uploads/MONA Family Design System-handoff/project/components/forms/IconButton.jsx":"fa21bdcf5aa4","uploads/MONA Family Design System-handoff/project/components/forms/Input.jsx":"e64dba91df63","uploads/MONA Family Design System-handoff/project/components/forms/MaskedField.jsx":"3a26776a6624","uploads/MONA Family Design System-handoff/project/components/forms/RadioGroup.jsx":"740afb99b703","uploads/MONA Family Design System-handoff/project/components/forms/Select.jsx":"528c1fd12d0e","uploads/MONA Family Design System-handoff/project/components/forms/Switch.jsx":"2b661aca2724","uploads/MONA Family Design System-handoff/project/components/forms/Textarea.jsx":"3ba886bbe82f","uploads/MONA Family Design System-handoff/project/components/navigation/Breadcrumb.jsx":"b1ceb08ec25a","uploads/MONA Family Design System-handoff/project/components/navigation/Pagination.jsx":"2482587cd467","uploads/MONA Family Design System-handoff/project/components/navigation/ProjectSwitcher.jsx":"4f1728ea8203","uploads/MONA Family Design System-handoff/project/components/navigation/Tabs.jsx":"c9bec984a757","uploads/MONA Family Design System-handoff/project/components/surfaces/Card.jsx":"3bf56605d926","uploads/MONA Family Design System-handoff/project/components/surfaces/ConfirmDialog.jsx":"be0ad5ddd04e","uploads/MONA Family Design System-handoff/project/components/surfaces/EnvBanner.jsx":"859f4395cba8","uploads/MONA Family Design System-handoff/project/components/surfaces/Modal.jsx":"efb655cffed7","uploads/MONA Family Design System-handoff/project/components/surfaces/StatCard.jsx":"98c5eb626506","uploads/MONA Family Design System-handoff/project/components/util.js":"536a9fc1f4ed","uploads/MONA Family Design System-handoff/project/ui_kits/airsflow/screens.jsx":"797d96a25b88","uploads/MONA Family Design System-handoff/project/ui_kits/files/screens.jsx":"751cf24d37f9","uploads/MONA Family Design System-handoff/project/ui_kits/pass/screens-admin.jsx":"7a521bbc5e8b","uploads/MONA Family Design System-handoff/project/ui_kits/pass/screens-detail.jsx":"85056062aba9","uploads/MONA Family Design System-handoff/project/ui_kits/pass/screens-request-project.jsx":"8260e261f374","uploads/MONA Family Design System-handoff/project/ui_kits/pass/screens-requests.jsx":"18bfb186c971","uploads/MONA Family Design System-handoff/project/ui_kits/pass/screens.jsx":"18d80e0f96cd"},"inlinedExternals":[],"unexposedExports":[{"name":"cx","sourcePath":"uploads/MONA Family Design System-handoff/project/components/util.js"},{"name":"injectStyle","sourcePath":"uploads/MONA Family Design System-handoff/project/components/util.js"}]} */ (() => { const __ds_ns = (window.MONAFamilyDesignSystem_68e947 = window.MONAFamilyDesignSystem_68e947 || {}); const __ds_scope = {}; (__ds_ns.__errors = __ds_ns.__errors || []); // uploads/MONA Family Design System-handoff/project/components/util.js try { (() => { // MONA Family — shared helpers for components. // Not a component (lowercase, no .d.ts): a tiny runtime util that lets each // component register its CSS once. Components stay styled by the family tokens // (var(--…)) and get real :hover / :focus-visible / :disabled states that // inline styles can't express. const _injected = new Set(); function injectStyle(id, css) { if (typeof document === 'undefined') return; if (_injected.has(id)) return; _injected.add(id); const el = document.createElement('style'); el.setAttribute('data-mona', id); el.textContent = css; document.head.appendChild(el); } // clsx-lite: join truthy class names. function cx(...parts) { return parts.filter(Boolean).join(' '); } Object.assign(__ds_scope, { injectStyle, cx }); })(); } catch (e) { __ds_ns.__errors.push({ path: "uploads/MONA Family Design System-handoff/project/components/util.js", error: String((e && e.message) || e) }); } // uploads/MONA Family Design System-handoff/project/components/data/SortableHeader.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } __ds_scope.injectStyle('mona-sortableheader', ` .mona-sorth { cursor: pointer; user-select: none; } .mona-sorth__inner { display: inline-flex; align-items: center; gap: 5px; } .mona-sorth:hover .mona-sorth__inner { color: var(--text-secondary); } .mona-sorth--active .mona-sorth__inner { color: var(--color-primary); } .mona-sorth__icon { display: flex; opacity: 0.5; } .mona-sorth--active .mona-sorth__icon { opacity: 1; } .mona-sorth--right .mona-sorth__inner { justify-content: flex-end; } `); const ICONS = { asc: /*#__PURE__*/React.createElement("path", { d: "m18 15-6-6-6 6" }), desc: /*#__PURE__*/React.createElement("path", { d: "m6 9 6 6 6-6" }), none: /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("path", { d: "m7 15 5 5 5-5" }), /*#__PURE__*/React.createElement("path", { d: "m7 9 5-5 5 5" })) }; /** * SortableHeader — a that cycles asc → desc → none on click and shows * the matching arrow. Pair with Table. */ function SortableHeader({ label, direction = 'none', onSort, align = 'left', className, ...rest }) { const next = direction === 'none' ? 'asc' : direction === 'asc' ? 'desc' : 'none'; return /*#__PURE__*/React.createElement("th", _extends({ className: __ds_scope.cx('mona-sorth', direction !== 'none' && 'mona-sorth--active', align === 'right' && 'mona-sorth--right', className), onClick: () => onSort && onSort(next), "aria-sort": direction === 'asc' ? 'ascending' : direction === 'desc' ? 'descending' : 'none' }, rest), /*#__PURE__*/React.createElement("span", { className: "mona-sorth__inner" }, label, /*#__PURE__*/React.createElement("span", { className: "mona-sorth__icon", "aria-hidden": "true" }, /*#__PURE__*/React.createElement("svg", { width: "13", height: "13", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, ICONS[direction])))); } Object.assign(__ds_scope, { SortableHeader }); })(); } catch (e) { __ds_ns.__errors.push({ path: "uploads/MONA Family Design System-handoff/project/components/data/SortableHeader.jsx", error: String((e && e.message) || e) }); } // uploads/MONA Family Design System-handoff/project/components/data/Table.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } __ds_scope.injectStyle('mona-table', ` .mona-table-wrap { width: 100%; overflow-x: auto; border: var(--border-width) solid var(--color-border); border-radius: var(--radius-lg); background: var(--surface-card); } .mona-table { width: 100%; border-collapse: collapse; font: var(--font-regular) var(--text-sm)/1.4 var(--font-sans); } .mona-table thead th { position: sticky; top: 0; z-index: var(--z-sticky); text-align: left; font-weight: var(--font-semibold); font-size: var(--text-2xs); text-transform: uppercase; letter-spacing: var(--tracking-wide); color: var(--text-muted); background: var(--surface-subtle); padding: 10px 14px; border-bottom: var(--border-width) solid var(--color-border); white-space: nowrap; } .mona-table tbody td { padding: 11px 14px; border-bottom: var(--border-width) solid var(--color-border); color: var(--text-body); vertical-align: middle; } .mona-table tbody tr:last-child td { border-bottom: 0; } .mona-table--hover tbody tr { transition: background-color var(--duration-fast) var(--ease); } .mona-table--hover tbody tr:hover td { background: var(--surface-hover); } .mona-table--zebra tbody tr:nth-child(even) td { background: var(--surface-subtle); } `); /** * Table — styled wrapper around a native . Provide / * (use SortableHeader for sortable columns). Sticky header, optional hover * and zebra striping. */ function Table({ hover = true, zebra = false, className, children, ...rest }) { return /*#__PURE__*/React.createElement("div", { className: "mona-table-wrap" }, /*#__PURE__*/React.createElement("table", _extends({ className: __ds_scope.cx('mona-table', hover && 'mona-table--hover', zebra && 'mona-table--zebra', className) }, rest), children)); } Object.assign(__ds_scope, { Table }); })(); } catch (e) { __ds_ns.__errors.push({ path: "uploads/MONA Family Design System-handoff/project/components/data/Table.jsx", error: String((e && e.message) || e) }); } // uploads/MONA Family Design System-handoff/project/components/feedback/Badge.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } __ds_scope.injectStyle('mona-badge', ` .mona-badge { display: inline-flex; align-items: center; gap: 5px; font-family: var(--font-sans); font-weight: var(--font-semibold); border: var(--border-width) solid transparent; white-space: nowrap; } .mona-badge--sm { font-size: var(--text-2xs); padding: 2px 7px; } .mona-badge--md { font-size: var(--text-xs); padding: 3px 9px; } .mona-badge--square { border-radius: var(--radius-sm); } .mona-badge--pill { border-radius: var(--radius-pill); } .mona-badge--upper { text-transform: uppercase; letter-spacing: var(--tracking-wide); } .mona-badge__dot { width: 6px; height: 6px; border-radius: 50%; background: currentColor; } .mona-badge--neutral { background: var(--surface-sunken); color: var(--text-secondary); border-color: var(--color-border); } .mona-badge--primary { background: var(--color-primary-subtle); color: var(--color-primary); } .mona-badge--success { background: var(--color-success-subtle); color: var(--color-success); } .mona-badge--warning { background: var(--color-warning-subtle); color: var(--color-warning); } .mona-badge--danger { background: var(--color-danger-subtle); color: var(--color-danger); } .mona-badge--info { background: var(--color-info-subtle); color: var(--color-info); } .mona-badge--purple { background: var(--color-role-platform-subtle); color: var(--color-role-platform); } `); /** * Badge — compact status / category label. Maps onto the semantic palette * (neutral / primary / success / warning / danger / info / purple). */ function Badge({ variant = 'neutral', size = 'md', shape = 'square', uppercase = false, dot = false, className, children, ...rest }) { return /*#__PURE__*/React.createElement("span", _extends({ className: __ds_scope.cx('mona-badge', `mona-badge--${variant}`, `mona-badge--${size}`, `mona-badge--${shape}`, uppercase && 'mona-badge--upper', className) }, rest), dot && /*#__PURE__*/React.createElement("span", { className: "mona-badge__dot" }), children); } Object.assign(__ds_scope, { Badge }); })(); } catch (e) { __ds_ns.__errors.push({ path: "uploads/MONA Family Design System-handoff/project/components/feedback/Badge.jsx", error: String((e && e.message) || e) }); } // uploads/MONA Family Design System-handoff/project/components/feedback/EmptyState.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } __ds_scope.injectStyle('mona-emptystate', ` .mona-empty { display: flex; flex-direction: column; align-items: center; text-align: center; } .mona-empty--sm { padding: 24px 16px; gap: 8px; } .mona-empty--md { padding: 40px 24px; gap: 10px; } .mona-empty--lg { padding: 64px 24px; gap: 12px; } .mona-empty__icon { display: grid; place-items: center; color: var(--text-disabled); background: var(--surface-sunken); border-radius: var(--radius-pill); width: 56px; height: 56px; margin-bottom: 4px; } .mona-empty--sm .mona-empty__icon { width: 44px; height: 44px; } .mona-empty__title { font: var(--font-semibold) var(--text-md)/1.4 var(--font-sans); color: var(--text-body); } .mona-empty--sm .mona-empty__title { font-size: var(--text-sm); } .mona-empty__desc { font: var(--font-regular) var(--text-sm)/1.5 var(--font-sans); color: var(--text-muted); max-width: 340px; } .mona-empty__action { margin-top: 6px; } `); /** * EmptyState — centered icon + title + description (+ optional action) for * empty lists, no-results and zero-data screens. The unified family API * (Files' text-only version is absorbed into this). */ function EmptyState({ icon = null, title, description, action = null, size = 'md', className, ...rest }) { return /*#__PURE__*/React.createElement("div", _extends({ className: __ds_scope.cx('mona-empty', `mona-empty--${size}`, className) }, rest), icon && /*#__PURE__*/React.createElement("div", { className: "mona-empty__icon", "aria-hidden": "true" }, icon), title && /*#__PURE__*/React.createElement("div", { className: "mona-empty__title" }, title), description && /*#__PURE__*/React.createElement("div", { className: "mona-empty__desc" }, description), action && /*#__PURE__*/React.createElement("div", { className: "mona-empty__action" }, action)); } Object.assign(__ds_scope, { EmptyState }); })(); } catch (e) { __ds_ns.__errors.push({ path: "uploads/MONA Family Design System-handoff/project/components/feedback/EmptyState.jsx", error: String((e && e.message) || e) }); } // uploads/MONA Family Design System-handoff/project/components/feedback/EnvChip.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } __ds_scope.injectStyle('mona-envchip', ` .mona-envchip { display: inline-flex; align-items: center; gap: 6px; font: var(--font-semibold) var(--text-2xs)/1 var(--font-sans); padding: 4px 9px; border-radius: var(--radius-pill); text-transform: uppercase; letter-spacing: var(--tracking-wide); } .mona-envchip__dot { width: 6px; height: 6px; border-radius: 50%; background: currentColor; } .mona-envchip--dev { background: var(--color-env-dev-subtle); color: var(--color-env-dev); } .mona-envchip--stage { background: var(--color-env-stage-subtle); color: var(--color-env-stage); } .mona-envchip--prod { background: var(--color-env-prod-subtle); color: var(--color-env-prod); } .mona-envchip--plain { padding-left: 8px; } `); /** * EnvChip — environment label (dev / stage / prod) rendered from the family * `--color-env-*` tokens. Smaller, inline counterpart to the full-width EnvBanner. */ function EnvChip({ env = 'dev', dot = true, children, className, ...rest }) { return /*#__PURE__*/React.createElement("span", _extends({ className: __ds_scope.cx('mona-envchip', `mona-envchip--${env}`, !dot && 'mona-envchip--plain', className) }, rest), dot && /*#__PURE__*/React.createElement("span", { className: "mona-envchip__dot" }), children ?? env); } Object.assign(__ds_scope, { EnvChip }); })(); } catch (e) { __ds_ns.__errors.push({ path: "uploads/MONA Family Design System-handoff/project/components/feedback/EnvChip.jsx", error: String((e && e.message) || e) }); } // uploads/MONA Family Design System-handoff/project/components/feedback/ErrorState.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } __ds_scope.injectStyle('mona-errorstate', ` .mona-err { display: flex; flex-direction: column; align-items: center; text-align: center; padding: 56px 24px; gap: 12px; } .mona-err__icon { display: grid; place-items: center; width: 60px; height: 60px; border-radius: var(--radius-pill); color: var(--color-danger); background: var(--color-danger-subtle); margin-bottom: 4px; } .mona-err__icon--warning { color: var(--color-warning); background: var(--color-warning-subtle); } .mona-err__icon--muted { color: var(--text-muted); background: var(--surface-sunken); } .mona-err__code { font: var(--font-bold) var(--text-2xl)/1 var(--font-mono); color: var(--text-disabled); letter-spacing: var(--tracking-tight); } .mona-err__title { font: var(--font-bold) var(--text-lg)/1.3 var(--font-sans); color: var(--text-body); } .mona-err__msg { font: var(--font-regular) var(--text-sm)/1.6 var(--font-sans); color: var(--text-muted); max-width: 420px; } .mona-err__detail { font: var(--font-regular) var(--text-xs)/1.6 var(--font-mono); color: var(--text-secondary); background: var(--surface-sunken); border-radius: var(--radius-md); padding: 10px 12px; max-width: 460px; overflow: auto; text-align: left; margin-top: 4px; } .mona-err__actions { display: flex; gap: 10px; margin-top: 8px; } `); /** * ErrorState — full-page / full-panel error surface, distinct from EmptyState. * Use for ErrorBoundary fallbacks and proxy errors (401/404/502/504). Optional * status `code`, monospace `detail` block and retry/refresh actions. */ function ErrorState({ icon = null, code, title, message, detail, actions = null, tone = 'danger', className, ...rest }) { return /*#__PURE__*/React.createElement("div", _extends({ className: __ds_scope.cx('mona-err', className) }, rest), icon && /*#__PURE__*/React.createElement("div", { className: __ds_scope.cx('mona-err__icon', tone !== 'danger' && `mona-err__icon--${tone}`) }, icon), code != null && /*#__PURE__*/React.createElement("div", { className: "mona-err__code" }, code), title && /*#__PURE__*/React.createElement("div", { className: "mona-err__title" }, title), message && /*#__PURE__*/React.createElement("div", { className: "mona-err__msg" }, message), detail && /*#__PURE__*/React.createElement("pre", { className: "mona-err__detail" }, detail), actions && /*#__PURE__*/React.createElement("div", { className: "mona-err__actions" }, actions)); } Object.assign(__ds_scope, { ErrorState }); })(); } catch (e) { __ds_ns.__errors.push({ path: "uploads/MONA Family Design System-handoff/project/components/feedback/ErrorState.jsx", error: String((e && e.message) || e) }); } // uploads/MONA Family Design System-handoff/project/components/feedback/ProgressBar.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } __ds_scope.injectStyle('mona-progress', ` .mona-prog { width: 100%; } .mona-prog__top { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; margin-bottom: 6px; } .mona-prog__label { font: var(--font-medium) var(--text-xs)/1.3 var(--font-sans); color: var(--text-secondary); } .mona-prog__value { font: var(--font-medium) var(--text-2xs)/1 var(--font-mono); color: var(--text-muted); } .mona-prog__track { width: 100%; height: 8px; background: var(--surface-sunken); border-radius: var(--radius-pill); overflow: hidden; } .mona-prog__track--sm { height: 5px; } .mona-prog__track--lg { height: 12px; } .mona-prog__fill { height: 100%; border-radius: var(--radius-pill); background: var(--color-primary); transition: width var(--duration) var(--ease), background-color var(--duration) var(--ease); } .mona-prog__fill--success { background: var(--color-success); } .mona-prog__fill--warning { background: var(--color-warning); } .mona-prog__fill--danger { background: var(--color-danger); } .mona-prog__fill--indeterminate { width: 40% !important; animation: mona-loading-bar 1.4s var(--ease) infinite; } `); /** * ProgressBar / Meter — track + fill for quota usage, cluster utilization and * upload progress. Pass `threshold` to auto-color (>=90% danger, >=70% warning), * or set `variant` explicitly. `indeterminate` for unknown-duration loading. */ function ProgressBar({ value = 0, max = 100, variant, threshold = false, indeterminate = false, size = 'md', label, valueText, showValue = false, className, ...rest }) { const pct = max > 0 ? Math.min(100, Math.max(0, value / max * 100)) : 0; let v = variant || 'primary'; if (threshold && !variant) v = pct >= 90 ? 'danger' : pct >= 70 ? 'warning' : 'primary'; return /*#__PURE__*/React.createElement("div", _extends({ className: __ds_scope.cx('mona-prog', className) }, rest), (label || showValue || valueText) && /*#__PURE__*/React.createElement("div", { className: "mona-prog__top" }, label && /*#__PURE__*/React.createElement("span", { className: "mona-prog__label" }, label), (valueText || showValue) && /*#__PURE__*/React.createElement("span", { className: "mona-prog__value" }, valueText ?? `${Math.round(pct)}%`)), /*#__PURE__*/React.createElement("div", { className: __ds_scope.cx('mona-prog__track', `mona-prog__track--${size}`), role: "progressbar", "aria-valuenow": indeterminate ? undefined : Math.round(pct), "aria-valuemin": 0, "aria-valuemax": 100 }, /*#__PURE__*/React.createElement("div", { className: __ds_scope.cx('mona-prog__fill', `mona-prog__fill--${v}`, indeterminate && 'mona-prog__fill--indeterminate'), style: indeterminate ? undefined : { width: `${pct}%` } }))); } Object.assign(__ds_scope, { ProgressBar }); })(); } catch (e) { __ds_ns.__errors.push({ path: "uploads/MONA Family Design System-handoff/project/components/feedback/ProgressBar.jsx", error: String((e && e.message) || e) }); } // uploads/MONA Family Design System-handoff/project/components/feedback/RoleBadge.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } __ds_scope.injectStyle('mona-rolebadge', ` .mona-role { display: inline-flex; align-items: center; font-family: var(--font-sans); font-weight: var(--font-semibold); font-size: var(--text-2xs); line-height: 1; text-transform: uppercase; letter-spacing: var(--tracking-wide); padding: 4px 9px; border-radius: var(--radius-pill); border: var(--border-width) solid transparent; } .mona-role--admin { background: var(--color-role-admin-subtle); color: var(--color-role-admin); } .mona-role--developer { background: var(--color-role-developer-subtle); color: var(--color-role-developer); } .mona-role--viewer { background: var(--color-role-viewer-subtle); color: var(--color-role-viewer); } .mona-role--platform { background: var(--color-role-platform-subtle); color: var(--color-role-platform); } `); const LABELS = { admin: 'admin', developer: 'developer', viewer: 'viewer' }; /** * RoleBadge — the unified family role chip. Resolves the old per-site * mismatch (Pass admin=red, AiRSFlow admin=amber) into ONE standard: * admin=amber, developer=blue, viewer=slate. Global platform-* roles use * purple and a "P-" prefix. */ function RoleBadge({ role = 'viewer', isPlatform = false, className, ...rest }) { const variant = isPlatform ? 'platform' : role; const label = (isPlatform ? 'P-' : '') + (LABELS[role] || role); return /*#__PURE__*/React.createElement("span", _extends({ className: __ds_scope.cx('mona-role', `mona-role--${variant}`, className) }, rest), label); } Object.assign(__ds_scope, { RoleBadge }); })(); } catch (e) { __ds_ns.__errors.push({ path: "uploads/MONA Family Design System-handoff/project/components/feedback/RoleBadge.jsx", error: String((e && e.message) || e) }); } // uploads/MONA Family Design System-handoff/project/components/feedback/Skeleton.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } __ds_scope.injectStyle('mona-skeleton', ` .mona-skel { display: block; background: var(--surface-sunken); border-radius: var(--radius-sm); position: relative; overflow: hidden; } .mona-skel::after { content: ''; position: absolute; inset: 0; background: linear-gradient(90deg, transparent, rgba(255,255,255,0.45), transparent); transform: translateX(-100%); animation: mona-loading-bar 1.4s var(--ease) infinite; } .dark .mona-skel::after { background: linear-gradient(90deg, transparent, rgba(255,255,255,0.06), transparent); } .mona-skel--text { height: 0.75em; border-radius: var(--radius-pill); margin: 0.25em 0; } .mona-skel--circle { border-radius: 50%; } `); /** * Skeleton — animated loading placeholder. Compose blocks to mirror the * shape of content while it loads (Files had no loader — this fills the gap). */ function Skeleton({ width, height, variant = 'block', radius, className, style, ...rest }) { const s = { ...style }; if (width != null) s.width = typeof width === 'number' ? `${width}px` : width; if (height != null) s.height = typeof height === 'number' ? `${height}px` : height; if (radius != null) s.borderRadius = typeof radius === 'number' ? `${radius}px` : radius; return /*#__PURE__*/React.createElement("span", _extends({ className: __ds_scope.cx('mona-skel', variant !== 'block' && `mona-skel--${variant}`, className), style: s }, rest)); } Object.assign(__ds_scope, { Skeleton }); })(); } catch (e) { __ds_ns.__errors.push({ path: "uploads/MONA Family Design System-handoff/project/components/feedback/Skeleton.jsx", error: String((e && e.message) || e) }); } // uploads/MONA Family Design System-handoff/project/components/feedback/StatusGrid.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } __ds_scope.injectStyle('mona-statusgrid', ` .mona-sg { display: grid; grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); gap: 10px; } .mona-sg__cell { display: flex; align-items: center; gap: 9px; padding: 11px 13px; border: var(--border-width) solid var(--color-border); border-radius: var(--radius-md); background: var(--surface-card); } .mona-sg__dot { width: 8px; height: 8px; border-radius: 50%; flex: none; } .mona-sg__name { font: var(--font-medium) var(--text-sm)/1.2 var(--font-sans); color: var(--text-body); flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .mona-sg__status { font: var(--font-medium) var(--text-2xs)/1 var(--font-sans); color: var(--text-muted); } /* ok */ .mona-sg__cell--ok { border-color: var(--color-success-subtle); background: var(--color-success-subtle); } .mona-sg__cell--ok .mona-sg__dot { background: var(--color-success); } .mona-sg__cell--ok .mona-sg__status { color: var(--color-success); } /* error */ .mona-sg__cell--error { border-color: var(--color-danger-subtle); background: var(--color-danger-subtle); } .mona-sg__cell--error .mona-sg__dot { background: var(--color-danger); } .mona-sg__cell--error .mona-sg__status { color: var(--color-danger); } /* pending */ .mona-sg__cell--pending .mona-sg__dot { background: var(--color-warning); } .mona-sg__cell--pending .mona-sg__status { color: var(--color-warning); } /* off / disabled */ .mona-sg__cell--off { opacity: 0.6; } .mona-sg__cell--off .mona-sg__dot { background: var(--text-disabled); } `); const LABELS = { ok: '정상', error: '오류', pending: '대기', off: '비활성' }; /** * StatusGrid — compact grid of integration/service health cells (Namespace, * Keycloak, ArgoCD, Grafana, S3, MLflow…). Each item: {name, status} where * status is ok / error / pending / off. Optional per-item statusLabel override. */ function StatusGrid({ items = [], className, ...rest }) { return /*#__PURE__*/React.createElement("div", _extends({ className: __ds_scope.cx('mona-sg', className) }, rest), items.map(it => { const s = it.status || 'ok'; return /*#__PURE__*/React.createElement("div", { className: __ds_scope.cx('mona-sg__cell', `mona-sg__cell--${s}`), key: it.name }, /*#__PURE__*/React.createElement("span", { className: "mona-sg__dot" }), /*#__PURE__*/React.createElement("span", { className: "mona-sg__name" }, it.name), /*#__PURE__*/React.createElement("span", { className: "mona-sg__status" }, it.statusLabel ?? LABELS[s])); })); } Object.assign(__ds_scope, { StatusGrid }); })(); } catch (e) { __ds_ns.__errors.push({ path: "uploads/MONA Family Design System-handoff/project/components/feedback/StatusGrid.jsx", error: String((e && e.message) || e) }); } // uploads/MONA Family Design System-handoff/project/components/feedback/Timeline.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } __ds_scope.injectStyle('mona-timeline', ` .mona-tl { display: flex; flex-direction: column; } .mona-tl__item { display: grid; grid-template-columns: 18px 1fr; gap: 12px; } .mona-tl__rail { display: flex; flex-direction: column; align-items: center; } .mona-tl__dot { width: 11px; height: 11px; border-radius: 50%; margin-top: 3px; flex: none; background: var(--color-primary); box-shadow: 0 0 0 3px var(--color-primary-subtle); } .mona-tl__dot--success { background: var(--color-success); box-shadow: 0 0 0 3px var(--color-success-subtle); } .mona-tl__dot--warning { background: var(--color-warning); box-shadow: 0 0 0 3px var(--color-warning-subtle); } .mona-tl__dot--danger { background: var(--color-danger); box-shadow: 0 0 0 3px var(--color-danger-subtle); } .mona-tl__dot--muted { background: var(--text-disabled); box-shadow: 0 0 0 3px var(--surface-sunken); } .mona-tl__line { flex: 1; width: 2px; background: var(--color-border); margin: 4px 0; min-height: 8px; } .mona-tl__body { padding-bottom: 18px; } .mona-tl__item:last-child .mona-tl__body { padding-bottom: 0; } .mona-tl__title { font: var(--font-medium) var(--text-sm)/1.4 var(--font-sans); color: var(--text-body); } .mona-tl__meta { font: var(--font-regular) var(--text-xs)/1.4 var(--font-sans); color: var(--text-muted); margin-top: 2px; } .mona-tl__desc { font: var(--font-regular) var(--text-sm)/1.5 var(--font-sans); color: var(--text-secondary); margin-top: 4px; } `); /** * Timeline — vertical event trail for request history and project activity * logs. Each item has a status dot (primary/success/warning/danger/muted), * a title, optional meta line and description. */ function Timeline({ items = [], className, ...rest }) { return /*#__PURE__*/React.createElement("div", _extends({ className: __ds_scope.cx('mona-tl', className) }, rest), items.map((it, i) => { const last = i === items.length - 1; return /*#__PURE__*/React.createElement("div", { className: "mona-tl__item", key: i }, /*#__PURE__*/React.createElement("div", { className: "mona-tl__rail" }, /*#__PURE__*/React.createElement("span", { className: __ds_scope.cx('mona-tl__dot', it.status && `mona-tl__dot--${it.status}`) }), !last && /*#__PURE__*/React.createElement("span", { className: "mona-tl__line" })), /*#__PURE__*/React.createElement("div", { className: "mona-tl__body" }, /*#__PURE__*/React.createElement("div", { className: "mona-tl__title" }, it.title), it.meta && /*#__PURE__*/React.createElement("div", { className: "mona-tl__meta" }, it.meta), it.description && /*#__PURE__*/React.createElement("div", { className: "mona-tl__desc" }, it.description))); })); } Object.assign(__ds_scope, { Timeline }); })(); } catch (e) { __ds_ns.__errors.push({ path: "uploads/MONA Family Design System-handoff/project/components/feedback/Timeline.jsx", error: String((e && e.message) || e) }); } // uploads/MONA Family Design System-handoff/project/components/feedback/Toast.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } __ds_scope.injectStyle('mona-toast', ` .mona-toast { display: flex; align-items: flex-start; gap: 11px; width: 360px; max-width: calc(100vw - 32px); background: var(--surface-card); border: var(--border-width) solid var(--color-border); border-radius: var(--radius-lg); box-shadow: var(--shadow-xl); padding: 13px 14px; animation: mona-fade-in var(--duration) var(--ease-out); } .mona-toast__icon { flex: none; margin-top: 1px; display: flex; } .mona-toast__body { flex: 1; min-width: 0; } .mona-toast__title { font: var(--font-semibold) var(--text-sm)/1.4 var(--font-sans); color: var(--text-body); } .mona-toast__msg { font: var(--font-regular) var(--text-xs)/1.5 var(--font-sans); color: var(--text-secondary); margin-top: 2px; word-break: break-word; } .mona-toast__close { flex: none; border: 0; background: transparent; cursor: pointer; color: var(--text-muted); border-radius: var(--radius-sm); padding: 2px; display: flex; } .mona-toast__close:hover { background: var(--surface-hover); color: var(--text-body); } .mona-toast--success .mona-toast__icon { color: var(--color-success); } .mona-toast--error .mona-toast__icon { color: var(--color-danger); } .mona-toast--warning .mona-toast__icon { color: var(--color-warning); } .mona-toast--info .mona-toast__icon { color: var(--color-info); } .mona-toaststack { position: fixed; bottom: 20px; right: 20px; display: flex; flex-direction: column; gap: 10px; z-index: var(--z-toast); } `); const ICONS = { success: /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("path", { d: "M21.801 10A10 10 0 1 1 17 3.335" }), /*#__PURE__*/React.createElement("path", { d: "m9 11 3 3L22 4" })), error: /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("circle", { cx: "12", cy: "12", r: "10" }), /*#__PURE__*/React.createElement("path", { d: "m15 9-6 6" }), /*#__PURE__*/React.createElement("path", { d: "m9 9 6 6" })), warning: /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("path", { d: "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3" }), /*#__PURE__*/React.createElement("path", { d: "M12 9v4" }), /*#__PURE__*/React.createElement("path", { d: "M12 17h.01" })), info: /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("circle", { cx: "12", cy: "12", r: "10" }), /*#__PURE__*/React.createElement("path", { d: "M12 16v-4" }), /*#__PURE__*/React.createElement("path", { d: "M12 8h.01" })) }; const TITLES = { success: '완료', error: '오류', warning: '경고', info: '알림' }; /** * Toast — a single transient notification. Render inside . * Four variants: success / error / warning / info. */ function Toast({ variant = 'info', title, message, onClose, className, ...rest }) { return /*#__PURE__*/React.createElement("div", _extends({ className: __ds_scope.cx('mona-toast', `mona-toast--${variant}`, className), role: "status" }, rest), /*#__PURE__*/React.createElement("span", { className: "mona-toast__icon", "aria-hidden": "true" }, /*#__PURE__*/React.createElement("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, ICONS[variant])), /*#__PURE__*/React.createElement("div", { className: "mona-toast__body" }, /*#__PURE__*/React.createElement("div", { className: "mona-toast__title" }, title ?? TITLES[variant]), message && /*#__PURE__*/React.createElement("div", { className: "mona-toast__msg" }, message)), onClose && /*#__PURE__*/React.createElement("button", { className: "mona-toast__close", "aria-label": "\uB2EB\uAE30", onClick: onClose }, /*#__PURE__*/React.createElement("svg", { width: "15", height: "15", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /*#__PURE__*/React.createElement("path", { d: "M18 6 6 18" }), /*#__PURE__*/React.createElement("path", { d: "m6 6 12 12" })))); } /** ToastStack — fixed bottom-right container for stacked toasts. */ function ToastStack({ children, className, ...rest }) { return /*#__PURE__*/React.createElement("div", _extends({ className: __ds_scope.cx('mona-toaststack', className) }, rest), children); } Object.assign(__ds_scope, { Toast, ToastStack }); })(); } catch (e) { __ds_ns.__errors.push({ path: "uploads/MONA Family Design System-handoff/project/components/feedback/Toast.jsx", error: String((e && e.message) || e) }); } // uploads/MONA Family Design System-handoff/project/components/feedback/Tooltip.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } __ds_scope.injectStyle('mona-tooltip', ` .mona-tip { position: relative; display: inline-flex; } .mona-tip__pop { position: absolute; z-index: var(--z-dropdown); pointer-events: none; background: var(--zinc-900); color: var(--zinc-50); font: var(--font-medium) var(--text-xs)/1.3 var(--font-sans); padding: 6px 9px; border-radius: var(--radius-sm); white-space: nowrap; box-shadow: var(--shadow-lg); opacity: 0; transform: translateY(2px); transition: opacity var(--duration-fast) var(--ease), transform var(--duration-fast) var(--ease); } .dark .mona-tip__pop { background: var(--zinc-100); color: var(--zinc-900); } .mona-tip:hover .mona-tip__pop, .mona-tip:focus-within .mona-tip__pop { opacity: 1; transform: translateY(0); } .mona-tip__pop--top { bottom: calc(100% + 7px); left: 50%; translate: -50% 0; } .mona-tip__pop--bottom { top: calc(100% + 7px); left: 50%; translate: -50% 0; } .mona-tip__pop--left { right: calc(100% + 7px); top: 50%; translate: 0 -50%; } .mona-tip__pop--right { left: calc(100% + 7px); top: 50%; translate: 0 -50%; } `); /** * Tooltip — lightweight hover/focus label. Wraps a single interactive child; * CSS-only, no portal. For rich help content use a popover instead. */ function Tooltip({ label, side = 'top', className, children, ...rest }) { return /*#__PURE__*/React.createElement("span", _extends({ className: __ds_scope.cx('mona-tip', className) }, rest), children, /*#__PURE__*/React.createElement("span", { className: `mona-tip__pop mona-tip__pop--${side}`, role: "tooltip" }, label)); } Object.assign(__ds_scope, { Tooltip }); })(); } catch (e) { __ds_ns.__errors.push({ path: "uploads/MONA Family Design System-handoff/project/components/feedback/Tooltip.jsx", error: String((e && e.message) || e) }); } // uploads/MONA Family Design System-handoff/project/components/forms/Button.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } __ds_scope.injectStyle('mona-button', ` .mona-btn { display: inline-flex; align-items: center; justify-content: center; gap: 7px; font-family: var(--font-sans); font-weight: var(--font-semibold); border: var(--border-width) solid transparent; border-radius: var(--radius-md); cursor: pointer; white-space: nowrap; text-decoration: none; transition: background-color var(--duration-fast) var(--ease), border-color var(--duration-fast) var(--ease), color var(--duration-fast) var(--ease), box-shadow var(--duration-fast) var(--ease), transform var(--duration-fast) var(--ease); } .mona-btn:focus-visible { outline: none; box-shadow: var(--focus-ring); } .mona-btn:active:not(:disabled) { transform: scale(0.97); } .mona-btn:disabled { opacity: 0.5; cursor: not-allowed; } .mona-btn--pill { border-radius: var(--radius-pill); } .mona-btn--block { width: 100%; } /* sizes */ .mona-btn--sm { font-size: var(--text-xs); padding: 0 12px; height: 30px; } .mona-btn--md { font-size: var(--text-sm); padding: 0 16px; height: 38px; } .mona-btn--lg { font-size: var(--text-base); padding: 0 22px; height: 46px; } /* variants */ .mona-btn--primary { background: var(--color-primary); color: var(--color-on-primary, var(--text-on-primary)); box-shadow: var(--shadow-sm); } .mona-btn--primary:hover:not(:disabled) { background: var(--color-primary-hover); } .mona-btn--primary:active:not(:disabled) { background: var(--color-primary-active); } .mona-btn--secondary { background: var(--surface-card); color: var(--text-body); border-color: var(--color-border-strong); } .mona-btn--secondary:hover:not(:disabled) { background: var(--surface-hover); } .mona-btn--ghost { background: transparent; color: var(--text-secondary); } .mona-btn--ghost:hover:not(:disabled) { background: var(--surface-hover); color: var(--text-body); } .mona-btn--danger { background: var(--color-danger); color: #fff; } .mona-btn--danger:hover:not(:disabled) { filter: brightness(1.06); } .mona-btn--danger-outline { background: var(--surface-card); color: var(--color-danger); border-color: var(--color-border-strong); } .mona-btn--danger-outline:hover:not(:disabled) { background: var(--color-danger-subtle); border-color: var(--color-danger); } `); /** * Button — the family's primary action control. * 8px radius by default (set `pill` for the rounded variant). */ function Button({ variant = 'primary', size = 'md', pill = false, block = false, leadingIcon = null, trailingIcon = null, as = 'button', className, children, ...rest }) { const Tag = as; return /*#__PURE__*/React.createElement(Tag, _extends({ className: __ds_scope.cx('mona-btn', `mona-btn--${variant}`, `mona-btn--${size}`, pill && 'mona-btn--pill', block && 'mona-btn--block', className) }, rest), leadingIcon, children, trailingIcon); } Object.assign(__ds_scope, { Button }); })(); } catch (e) { __ds_ns.__errors.push({ path: "uploads/MONA Family Design System-handoff/project/components/forms/Button.jsx", error: String((e && e.message) || e) }); } // uploads/MONA Family Design System-handoff/project/components/app/LoginScreen.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } __ds_scope.injectStyle('mona-login', ` .mona-login { min-height: 100%; display: grid; place-items: center; padding: 32px; background: radial-gradient(120% 90% at 0% 0%, var(--color-primary-subtle), transparent 55%), radial-gradient(120% 90% at 100% 100%, var(--color-primary-subtle), transparent 55%), var(--color-bg); } .mona-login__card { width: 100%; max-width: 400px; background: var(--surface-card); border: var(--border-width) solid var(--color-border); border-radius: var(--radius-xl); box-shadow: var(--shadow-xl); padding: 32px 30px; } .mona-login__logo { width: 52px; height: 52px; border-radius: var(--radius-lg); display: block; margin-bottom: 18px; } .mona-login__wordmark { font: var(--font-bold) var(--text-xl)/1 var(--font-sans); letter-spacing: var(--tracking-tight); color: var(--text-body); margin-bottom: 20px; } .mona-login__wordmark b { color: var(--color-primary); font-weight: var(--font-bold); } .mona-login__title { font: var(--font-bold) var(--text-2xl)/1.25 var(--font-sans); color: var(--text-body); letter-spacing: var(--tracking-tight); } .mona-login__subtitle { font: var(--font-regular) var(--text-sm)/1.6 var(--font-sans); color: var(--text-secondary); margin-top: 8px; } .mona-login__action { margin-top: 22px; } .mona-login__note { font: var(--font-regular) var(--text-xs)/1.6 var(--font-sans); color: var(--text-muted); margin-top: 16px; text-align: center; } .mona-login__note a { color: var(--color-primary); } `); const ArrowRight = /*#__PURE__*/React.createElement("svg", { width: "17", height: "17", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /*#__PURE__*/React.createElement("path", { d: "M5 12h14" }), /*#__PURE__*/React.createElement("path", { d: "m12 5 7 7-7 7" })); /** * LoginScreen — the shared SSO entry card (all sites use the same Keycloak). * Centered card with logo, wordmark, headline, sub-copy and one SSO button. */ function LoginScreen({ logo, product, title, subtitle, buttonLabel = 'SSO 로그인', onLogin, note, className, ...rest }) { return /*#__PURE__*/React.createElement("div", _extends({ className: __ds_scope.cx('mona-login', className) }, rest), /*#__PURE__*/React.createElement("div", { className: "mona-login__card" }, logo && /*#__PURE__*/React.createElement("img", { className: "mona-login__logo", src: logo, alt: "" }), /*#__PURE__*/React.createElement("div", { className: "mona-login__wordmark" }, "MONA", /*#__PURE__*/React.createElement("b", null, " ", product)), /*#__PURE__*/React.createElement("h1", { className: "mona-login__title" }, title), subtitle && /*#__PURE__*/React.createElement("p", { className: "mona-login__subtitle" }, subtitle), /*#__PURE__*/React.createElement("div", { className: "mona-login__action" }, /*#__PURE__*/React.createElement(__ds_scope.Button, { block: true, size: "lg", onClick: onLogin, trailingIcon: ArrowRight }, buttonLabel)), note && /*#__PURE__*/React.createElement("div", { className: "mona-login__note" }, note))); } Object.assign(__ds_scope, { LoginScreen }); })(); } catch (e) { __ds_ns.__errors.push({ path: "uploads/MONA Family Design System-handoff/project/components/app/LoginScreen.jsx", error: String((e && e.message) || e) }); } // uploads/MONA Family Design System-handoff/project/components/forms/Checkbox.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } __ds_scope.injectStyle('mona-checkbox', ` .mona-check { display: inline-flex; align-items: center; gap: 9px; cursor: pointer; font: var(--font-regular) var(--text-sm)/1.4 var(--font-sans); color: var(--text-body); user-select: none; } .mona-check input { position: absolute; opacity: 0; width: 0; height: 0; } .mona-check__box { width: 18px; height: 18px; flex: none; border-radius: 5px; border: 1.5px solid var(--color-border-strong); background: var(--surface-card); display: grid; place-items: center; color: #fff; transition: background-color var(--duration-fast) var(--ease), border-color var(--duration-fast) var(--ease), box-shadow var(--duration-fast) var(--ease); } .mona-check__box svg { opacity: 0; transform: scale(0.6); transition: opacity var(--duration-fast) var(--ease), transform var(--duration-fast) var(--ease); } .mona-check input:checked + .mona-check__box { background: var(--color-primary); border-color: var(--color-primary); } .mona-check input:checked + .mona-check__box svg { opacity: 1; transform: scale(1); } .mona-check input:indeterminate + .mona-check__box { background: var(--color-primary); border-color: var(--color-primary); } .mona-check input:focus-visible + .mona-check__box { box-shadow: var(--focus-ring); } .mona-check input:disabled ~ * { opacity: 0.5; } .mona-check--disabled { cursor: not-allowed; } `); /** * Checkbox — boolean toggle with an animated check. Renders a label when * `children` are provided. Supports the indeterminate state. */ function Checkbox({ indeterminate = false, disabled = false, className, children, ...rest }) { const ref = React.useRef(null); React.useEffect(() => { if (ref.current) ref.current.indeterminate = indeterminate; }, [indeterminate]); return /*#__PURE__*/React.createElement("label", { className: __ds_scope.cx('mona-check', disabled && 'mona-check--disabled', className) }, /*#__PURE__*/React.createElement("input", _extends({ ref: ref, type: "checkbox", disabled: disabled }, rest)), /*#__PURE__*/React.createElement("span", { className: "mona-check__box", "aria-hidden": "true" }, /*#__PURE__*/React.createElement("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "3.5", strokeLinecap: "round", strokeLinejoin: "round" }, /*#__PURE__*/React.createElement("path", { d: "M20 6 9 17l-5-5" }))), children && /*#__PURE__*/React.createElement("span", null, children)); } Object.assign(__ds_scope, { Checkbox }); })(); } catch (e) { __ds_ns.__errors.push({ path: "uploads/MONA Family Design System-handoff/project/components/forms/Checkbox.jsx", error: String((e && e.message) || e) }); } // uploads/MONA Family Design System-handoff/project/components/forms/CopyButton.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } __ds_scope.injectStyle('mona-copybtn', ` .mona-copy { display: inline-flex; align-items: center; gap: 6px; font: var(--font-medium) var(--text-xs)/1 var(--font-sans); color: var(--text-secondary); background: transparent; border: var(--border-width) solid var(--color-border-strong); border-radius: var(--radius-sm); padding: 5px 9px; cursor: pointer; transition: background-color var(--duration-fast) var(--ease), color var(--duration-fast) var(--ease), border-color var(--duration-fast) var(--ease); } .mona-copy:hover { background: var(--surface-hover); color: var(--text-body); } .mona-copy.is-copied { color: var(--color-success); border-color: var(--color-success); } .mona-copy--on-dark { color: #d4d4d8; border-color: rgba(255,255,255,0.18); } .mona-copy--on-dark:hover { background: rgba(255,255,255,0.08); color: #fff; } .mona-copy svg { display: block; } `); const COPY = /*#__PURE__*/React.createElement("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /*#__PURE__*/React.createElement("rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2" }), /*#__PURE__*/React.createElement("path", { d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" })); const CHECK = /*#__PURE__*/React.createElement("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.4", strokeLinecap: "round", strokeLinejoin: "round" }, /*#__PURE__*/React.createElement("path", { d: "M20 6 9 17l-5-5" })); /** * CopyButton — copies `value` to the clipboard and flips to a check for ~1.5s. * Use `onDark` inside dark code blocks. */ function CopyButton({ value, label = '복사', copiedLabel = '복사됨', onDark = false, className, ...rest }) { const [copied, setCopied] = React.useState(false); const copy = () => { try { navigator.clipboard && navigator.clipboard.writeText(String(value)); } catch (e) {/* noop */} setCopied(true); setTimeout(() => setCopied(false), 1500); }; return /*#__PURE__*/React.createElement("button", _extends({ type: "button", className: __ds_scope.cx('mona-copy', onDark && 'mona-copy--on-dark', copied && 'is-copied', className), onClick: copy }, rest), copied ? CHECK : COPY, copied ? copiedLabel : label); } Object.assign(__ds_scope, { CopyButton }); })(); } catch (e) { __ds_ns.__errors.push({ path: "uploads/MONA Family Design System-handoff/project/components/forms/CopyButton.jsx", error: String((e && e.message) || e) }); } // uploads/MONA Family Design System-handoff/project/components/forms/CodeBlock.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } __ds_scope.injectStyle('mona-codeblock', ` .mona-code { background: var(--zinc-900); border: var(--border-width) solid var(--color-border); border-radius: var(--radius-md); overflow: hidden; } .dark .mona-code { background: #0c0c0e; } .mona-code__bar { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 8px 12px; border-bottom: 1px solid rgba(255,255,255,0.08); } .mona-code__title { font: var(--font-medium) var(--text-2xs)/1 var(--font-mono); color: #a1a1aa; text-transform: uppercase; letter-spacing: var(--tracking-wide); } .mona-code__pre { margin: 0; padding: 13px 14px; overflow: auto; font: var(--font-regular) var(--text-xs)/1.7 var(--font-mono); color: #e4e4e7; } .mona-code__pre .g { color: #4ade80; } .mona-code__pre .b { color: #60a5fa; } .mona-code__pre .c { color: #71717a; } `); /** * CodeBlock — dark monospace block for CLI snippets (kubectl, AWS CLI) and * config, with an optional title bar and copy button. Pass plain text as * children, or pre-highlighted nodes. */ function CodeBlock({ title, copy = true, copyValue, className, children, ...rest }) { const text = copyValue != null ? copyValue : typeof children === 'string' ? children : ''; return /*#__PURE__*/React.createElement("div", _extends({ className: __ds_scope.cx('mona-code', className) }, rest), (title || copy) && /*#__PURE__*/React.createElement("div", { className: "mona-code__bar" }, /*#__PURE__*/React.createElement("span", { className: "mona-code__title" }, title), copy && /*#__PURE__*/React.createElement(__ds_scope.CopyButton, { value: text, onDark: true })), /*#__PURE__*/React.createElement("pre", { className: "mona-code__pre" }, children)); } Object.assign(__ds_scope, { CodeBlock }); })(); } catch (e) { __ds_ns.__errors.push({ path: "uploads/MONA Family Design System-handoff/project/components/forms/CodeBlock.jsx", error: String((e && e.message) || e) }); } // uploads/MONA Family Design System-handoff/project/components/forms/IconButton.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } __ds_scope.injectStyle('mona-iconbutton', ` .mona-iconbtn { display: inline-flex; align-items: center; justify-content: center; border: var(--border-width) solid transparent; border-radius: var(--radius-md); cursor: pointer; color: var(--text-secondary); background: transparent; transition: background-color var(--duration-fast) var(--ease), color var(--duration-fast) var(--ease), box-shadow var(--duration-fast) var(--ease); } .mona-iconbtn svg { display: block; } .mona-iconbtn:focus-visible { outline: none; box-shadow: var(--focus-ring); } .mona-iconbtn:disabled { opacity: 0.5; cursor: not-allowed; } .mona-iconbtn--round { border-radius: var(--radius-pill); } .mona-iconbtn--sm { width: 28px; height: 28px; } .mona-iconbtn--md { width: 34px; height: 34px; } .mona-iconbtn--lg { width: 40px; height: 40px; } .mona-iconbtn--ghost:hover:not(:disabled) { background: var(--surface-hover); color: var(--text-body); } .mona-iconbtn--secondary { background: var(--surface-card); border-color: var(--color-border); color: var(--text-secondary); } .mona-iconbtn--secondary:hover:not(:disabled) { background: var(--surface-hover); color: var(--text-body); } .mona-iconbtn--primary { background: var(--color-primary); color: #fff; } .mona-iconbtn--primary:hover:not(:disabled) { background: var(--color-primary-hover); } .mona-iconbtn--danger:hover:not(:disabled) { background: var(--color-danger-subtle); color: var(--color-danger); } `); /** * IconButton — square/round button for a single icon (toolbar actions, * theme toggle, close buttons). Always pass an accessible `aria-label`. */ function IconButton({ variant = 'ghost', size = 'md', round = false, className, children, ...rest }) { return /*#__PURE__*/React.createElement("button", _extends({ type: "button", className: __ds_scope.cx('mona-iconbtn', `mona-iconbtn--${variant}`, `mona-iconbtn--${size}`, round && 'mona-iconbtn--round', className) }, rest), children); } Object.assign(__ds_scope, { IconButton }); })(); } catch (e) { __ds_ns.__errors.push({ path: "uploads/MONA Family Design System-handoff/project/components/forms/IconButton.jsx", error: String((e && e.message) || e) }); } // uploads/MONA Family Design System-handoff/project/components/app/AppHeader.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } __ds_scope.injectStyle('mona-appheader', ` .mona-header { display: flex; align-items: center; gap: 16px; height: var(--header-height); padding: 0 var(--container-pad); background: var(--surface-card); border-bottom: var(--border-width) solid var(--color-border); } .mona-header__brand { display: inline-flex; align-items: center; gap: 9px; text-decoration: none; flex: none; } .mona-header__logo { width: 30px; height: 30px; border-radius: var(--radius-md); display: block; } .mona-header__wordmark { font: var(--font-bold) var(--text-md)/1 var(--font-sans); letter-spacing: var(--tracking-tight); color: var(--text-body); white-space: nowrap; } .mona-header__wordmark b { color: var(--color-primary); font-weight: var(--font-bold); } .mona-header__nav { display: flex; align-items: center; gap: 2px; } .mona-header__navlink { display: inline-flex; align-items: center; gap: 6px; font: var(--font-medium) var(--text-sm)/1 var(--font-sans); color: var(--text-secondary); padding: 8px 11px; border-radius: var(--radius-md); cursor: pointer; text-decoration: none; transition: background-color var(--duration-fast) var(--ease), color var(--duration-fast) var(--ease); } .mona-header__navlink:hover { background: var(--surface-hover); color: var(--text-body); } .mona-header__navlink--active { background: var(--surface-hover); color: var(--text-body); } .mona-header__spacer { flex: 1; } .mona-header__right { display: flex; align-items: center; gap: 8px; } .mona-header__divider { width: 1px; height: 22px; background: var(--color-border); margin: 0 2px; } .mona-header__avatar { width: 32px; height: 32px; border-radius: 50%; display: grid; place-items: center; font: var(--font-semibold) var(--text-xs)/1 var(--font-sans); color: #fff; background: linear-gradient(135deg, var(--color-primary), var(--color-role-platform)); cursor: pointer; } `); const Sun = /*#__PURE__*/React.createElement("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /*#__PURE__*/React.createElement("circle", { cx: "12", cy: "12", r: "4" }), /*#__PURE__*/React.createElement("path", { d: "M12 2v2M12 20v2M4.93 4.93l1.41 1.41M17.66 17.66l1.41 1.41M2 12h2M20 12h2M6.34 17.66l-1.41 1.41M19.07 4.93l-1.41 1.41" })); const Moon = /*#__PURE__*/React.createElement("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /*#__PURE__*/React.createElement("path", { d: "M12 3a6 6 0 0 0 9 9 9 9 0 1 1-9-9Z" })); function initials(name) { if (!name) return '·'; const t = name.trim(); return t.length <= 2 ? t : t.slice(0, 2); } /** * AppHeader — the shared family top bar. Logo + wordmark, nav links, a free * `center` slot (e.g. ProjectSwitcher for Files), theme toggle, custom right * actions and an avatar. One header, every site. */ function AppHeader({ logo, product, nav = [], activeNav, onNav, center = null, theme = 'light', onThemeToggle, rightExtra = null, user, onAvatar, className, ...rest }) { return /*#__PURE__*/React.createElement("header", _extends({ className: __ds_scope.cx('mona-header', className) }, rest), /*#__PURE__*/React.createElement("a", { className: "mona-header__brand", href: "#", onClick: e => e.preventDefault() }, logo && /*#__PURE__*/React.createElement("img", { className: "mona-header__logo", src: logo, alt: "" }), /*#__PURE__*/React.createElement("span", { className: "mona-header__wordmark" }, "MONA", /*#__PURE__*/React.createElement("b", null, " ", product))), nav.length > 0 && /*#__PURE__*/React.createElement("nav", { className: "mona-header__nav" }, nav.map(n => { const id = n.id ?? n.label; return /*#__PURE__*/React.createElement("a", { key: id, className: __ds_scope.cx('mona-header__navlink', id === activeNav && 'mona-header__navlink--active'), href: n.href || '#', onClick: e => { if (!n.href) e.preventDefault(); onNav && onNav(id); } }, n.icon, n.label); })), center && /*#__PURE__*/React.createElement("div", { style: { marginLeft: 4 } }, center), /*#__PURE__*/React.createElement("div", { className: "mona-header__spacer" }), /*#__PURE__*/React.createElement("div", { className: "mona-header__right" }, rightExtra, onThemeToggle && /*#__PURE__*/React.createElement(__ds_scope.IconButton, { "aria-label": "\uD14C\uB9C8 \uC804\uD658", onClick: onThemeToggle }, theme === 'dark' ? Sun : Moon), user && /*#__PURE__*/React.createElement("span", { className: "mona-header__divider" }), user && /*#__PURE__*/React.createElement("button", { className: "mona-header__avatar", onClick: onAvatar, title: user.name, "aria-label": user.name }, initials(user.name)))); } Object.assign(__ds_scope, { AppHeader }); })(); } catch (e) { __ds_ns.__errors.push({ path: "uploads/MONA Family Design System-handoff/project/components/app/AppHeader.jsx", error: String((e && e.message) || e) }); } // uploads/MONA Family Design System-handoff/project/components/forms/Input.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } __ds_scope.injectStyle('mona-input', ` .mona-field { display: flex; flex-direction: column; gap: 6px; } .mona-field__label { font: var(--font-medium) var(--text-xs)/1.4 var(--font-sans); color: var(--text-secondary); } .mona-field__label .req { color: var(--color-danger); margin-left: 2px; } .mona-inputwrap { position: relative; display: flex; align-items: center; } .mona-inputwrap__icon { position: absolute; left: 12px; display: flex; color: var(--text-muted); pointer-events: none; } .mona-input { width: 100%; font: var(--font-regular) var(--text-sm)/1.4 var(--font-sans); color: var(--text-body); background: var(--surface-card); border: var(--border-width) solid var(--color-border-strong); border-radius: var(--radius-md); padding: 9px 12px; transition: border-color var(--duration-fast) var(--ease), box-shadow var(--duration-fast) var(--ease); } .mona-inputwrap--with-icon .mona-input { padding-left: 36px; } .mona-input::placeholder { color: var(--text-disabled); } .mona-input:hover:not(:disabled):not(:focus) { border-color: var(--text-disabled); } .mona-input:focus { outline: none; border-color: var(--color-primary); box-shadow: var(--focus-ring); } .mona-input:disabled { background: var(--surface-sunken); color: var(--text-disabled); cursor: not-allowed; } .mona-field--error .mona-input { border-color: var(--color-danger); } .mona-field--error .mona-input:focus { box-shadow: 0 0 0 3px var(--color-danger-subtle); } .mona-field__hint { font: var(--font-regular) var(--text-xs)/1.4 var(--font-sans); color: var(--text-muted); } .mona-field__hint--error { color: var(--color-danger); } `); /** * Input — single-line text field with optional label, leading icon and * hint / error message. Wraps a native . */ function Input({ label, hint, error, required = false, leadingIcon = null, id, className, ...rest }) { const fieldId = id || (label ? `f-${Math.random().toString(36).slice(2, 8)}` : undefined); return /*#__PURE__*/React.createElement("div", { className: __ds_scope.cx('mona-field', error && 'mona-field--error', className) }, label && /*#__PURE__*/React.createElement("label", { className: "mona-field__label", htmlFor: fieldId }, label, required && /*#__PURE__*/React.createElement("span", { className: "req" }, "*")), /*#__PURE__*/React.createElement("div", { className: __ds_scope.cx('mona-inputwrap', leadingIcon && 'mona-inputwrap--with-icon') }, leadingIcon && /*#__PURE__*/React.createElement("span", { className: "mona-inputwrap__icon" }, leadingIcon), /*#__PURE__*/React.createElement("input", _extends({ id: fieldId, className: "mona-input", "aria-invalid": !!error }, rest))), (error || hint) && /*#__PURE__*/React.createElement("span", { className: __ds_scope.cx('mona-field__hint', error && 'mona-field__hint--error') }, error || hint)); } Object.assign(__ds_scope, { Input }); })(); } catch (e) { __ds_ns.__errors.push({ path: "uploads/MONA Family Design System-handoff/project/components/forms/Input.jsx", error: String((e && e.message) || e) }); } // uploads/MONA Family Design System-handoff/project/components/forms/MaskedField.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } __ds_scope.injectStyle('mona-masked', ` .mona-masked { display: flex; flex-direction: column; gap: 6px; } .mona-masked__label { font: var(--font-medium) var(--text-xs)/1.4 var(--font-sans); color: var(--text-secondary); } .mona-masked__row { display: flex; align-items: center; gap: 8px; background: var(--surface-sunken); border: var(--border-width) solid var(--color-border); border-radius: var(--radius-md); padding: 8px 10px; } .mona-masked__val { flex: 1; min-width: 0; font: var(--font-regular) var(--text-sm)/1.4 var(--font-mono); color: var(--text-body); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .mona-masked__btn { display: flex; border: 0; background: transparent; color: var(--text-muted); cursor: pointer; padding: 4px; border-radius: var(--radius-sm); } .mona-masked__btn:hover { background: var(--surface-hover); color: var(--text-body); } `); const EYE = /*#__PURE__*/React.createElement("svg", { width: "15", height: "15", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /*#__PURE__*/React.createElement("path", { d: "M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0" }), /*#__PURE__*/React.createElement("circle", { cx: "12", cy: "12", r: "3" })); const EYE_OFF = /*#__PURE__*/React.createElement("svg", { width: "15", height: "15", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }, /*#__PURE__*/React.createElement("path", { d: "M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49" }), /*#__PURE__*/React.createElement("path", { d: "M14.084 14.158a3 3 0 0 1-4.242-4.242" }), /*#__PURE__*/React.createElement("path", { d: "M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143" }), /*#__PURE__*/React.createElement("path", { d: "m2 2 20 20" })); /** * MaskedField — reveals/hides a secret (S3 access key, token) with an eye * toggle and a copy button. Shows a dotted mask until revealed. */ function MaskedField({ label, value = '', revealed: controlled, onToggle, className, ...rest }) { const [local, setLocal] = React.useState(false); const shown = controlled != null ? controlled : local; const toggle = () => { onToggle ? onToggle(!shown) : setLocal(s => !s); }; const masked = '•'.repeat(Math.min(24, Math.max(8, String(value).length))); return /*#__PURE__*/React.createElement("div", _extends({ className: __ds_scope.cx('mona-masked', className) }, rest), label && /*#__PURE__*/React.createElement("span", { className: "mona-masked__label" }, label), /*#__PURE__*/React.createElement("div", { className: "mona-masked__row" }, /*#__PURE__*/React.createElement("span", { className: "mona-masked__val" }, shown ? value : masked), /*#__PURE__*/React.createElement("button", { type: "button", className: "mona-masked__btn", "aria-label": shown ? '가리기' : '표시', onClick: toggle }, shown ? EYE_OFF : EYE), /*#__PURE__*/React.createElement(__ds_scope.CopyButton, { value: value, label: "", copiedLabel: "" }))); } Object.assign(__ds_scope, { MaskedField }); })(); } catch (e) { __ds_ns.__errors.push({ path: "uploads/MONA Family Design System-handoff/project/components/forms/MaskedField.jsx", error: String((e && e.message) || e) }); } // uploads/MONA Family Design System-handoff/project/components/forms/RadioGroup.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } __ds_scope.injectStyle('mona-radio', ` .mona-radiogroup { display: flex; flex-direction: column; gap: 8px; } .mona-radiogroup--row { flex-direction: row; flex-wrap: wrap; gap: 16px; } .mona-radio { display: flex; align-items: flex-start; gap: 10px; cursor: pointer; font-family: var(--font-sans); } .mona-radio--card { border: var(--border-width) solid var(--color-border-strong); border-radius: var(--radius-md); padding: 12px 14px; transition: border-color var(--duration-fast) var(--ease), background-color var(--duration-fast) var(--ease); } .mona-radio--card.is-checked { border-color: var(--color-primary); background: var(--color-primary-subtle); } .mona-radio--card.is-checked.is-danger { border-color: var(--color-danger); background: var(--color-danger-subtle); } .mona-radio input { position: absolute; opacity: 0; width: 0; height: 0; } .mona-radio__mark { width: 18px; height: 18px; flex: none; margin-top: 1px; border-radius: 50%; border: 1.5px solid var(--color-border-strong); display: grid; place-items: center; transition: border-color var(--duration-fast) var(--ease); } .mona-radio__mark::after { content: ''; width: 9px; height: 9px; border-radius: 50%; background: var(--color-primary); transform: scale(0); transition: transform var(--duration-fast) var(--ease); } .mona-radio input:checked + .mona-radio__mark { border-color: var(--color-primary); } .mona-radio input:checked + .mona-radio__mark::after { transform: scale(1); } .mona-radio.is-danger input:checked + .mona-radio__mark { border-color: var(--color-danger); } .mona-radio.is-danger input:checked + .mona-radio__mark::after { background: var(--color-danger); } .mona-radio input:focus-visible + .mona-radio__mark { box-shadow: var(--focus-ring); } .mona-radio__body { display: flex; flex-direction: column; gap: 3px; } .mona-radio__label { font: var(--font-medium) var(--text-sm)/1.3 var(--font-sans); color: var(--text-body); } .mona-radio__desc { font: var(--font-regular) var(--text-xs)/1.5 var(--font-sans); color: var(--text-muted); } `); /** * RadioGroup — single-select option set. Plain rows by default; `card` renders * bordered option cards (used by the destructive delete-policy dialog). Mark an * option `danger: true` to color its selected card red. */ function RadioGroup({ name, value, onChange, options = [], variant = 'list', card = false, row = false, className, ...rest }) { const gname = name || React.useId(); return /*#__PURE__*/React.createElement("div", _extends({ className: __ds_scope.cx('mona-radiogroup', row && 'mona-radiogroup--row', className), role: "radiogroup" }, rest), options.map(o => { const checked = o.value === value; return /*#__PURE__*/React.createElement("label", { key: o.value, className: __ds_scope.cx('mona-radio', card && 'mona-radio--card', checked && 'is-checked', o.danger && 'is-danger') }, /*#__PURE__*/React.createElement("input", { type: "radio", name: gname, value: o.value, checked: checked, onChange: () => onChange && onChange(o.value) }), /*#__PURE__*/React.createElement("span", { className: "mona-radio__mark", "aria-hidden": "true" }), /*#__PURE__*/React.createElement("span", { className: "mona-radio__body" }, /*#__PURE__*/React.createElement("span", { className: "mona-radio__label" }, o.label), o.description && /*#__PURE__*/React.createElement("span", { className: "mona-radio__desc" }, o.description))); })); } Object.assign(__ds_scope, { RadioGroup }); })(); } catch (e) { __ds_ns.__errors.push({ path: "uploads/MONA Family Design System-handoff/project/components/forms/RadioGroup.jsx", error: String((e && e.message) || e) }); } // uploads/MONA Family Design System-handoff/project/components/forms/Select.jsx try { (() => { function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } __ds_scope.injectStyle('mona-select', ` .mona-selectwrap { position: relative; display: inline-flex; align-items: center; width: 100%; } .mona-select { width: 100%; appearance: none; -webkit-appearance: none; font: var(--font-regular) var(--text-sm)/1.4 var(--font-sans); color: var(--text-body); background: var(--surface-card); border: var(--border-width) solid var(--color-border-strong); border-radius: var(--radius-md); padding: 9px 34px 9px 12px; cursor: pointer; transition: border-color var(--duration-fast) var(--ease), box-shadow var(--duration-fast) var(--ease); } .mona-select:hover:not(:disabled):not(:focus) { border-color: var(--text-disabled); } .mona-select:focus { outline: none; border-color: var(--color-primary); box-shadow: var(--focus-ring); } .mona-select:disabled { background: var(--surface-sunken); color: var(--text-disabled); cursor: not-allowed; } .mona-selectwrap__chev { position: absolute; right: 11px; pointer-events: none; color: var(--text-muted); display: flex; } `); /** * Select — styled wrapper over a native