UNPKG

@vue-ui-kit/ant

Version:

Vue3 UI Kit based on Ant Design

538 lines (495 loc) 15.9 kB
@charset "UTF-8"; /** * EVirtTable(PCanvasGrid / PCanvasTable)主题变量 * - 与 PGrid 共用 --p-* 语义变量,保证 Canvas 表格与 DOM 表格同色 * - 无对应 --p-* 的项使用 storybook theme.css 默认值 * - e-virt-table 初始化时通过 Config.updateCssVar() 读取 --evt-* */ /* Higher specificity than e-virt-table@1.4.x runtime-injected :root defaults. */ :root:root { --evt-border-color: var(--p-border-color, #d9d9d9); --evt-header-bg-color: var(--p-table-thead-bg-color, #f2f3f6); --evt-body-bg-color: var(--p-table-row-bg-color, #fff); --evt-stripe-color: var(--p-striped-bg-color, #f2f3f6); --evt-highlight-hover-row-color: var(--p-table-row-hover-bg-color, #e6e7ea); --evt-select-border-color: var(--p-primary-color, #4096ff); /* 可用 --p-select-area-color 覆盖;勿写死以免压过业务/示例 :root */ --evt-select-area-color: var(--p-select-area-color, rgba(82, 146, 247, 0.1)); /* 固定列阴影:靠近列边界 → 渐隐末端(宽度由 config.FIXED_COLUMN_SHADOW_WIDTH 控制) */ --evt-fixed-column-shadow-color: rgba(0, 0, 0, 0.1); --evt-fixed-column-shadow-fade-color: rgba(0, 0, 0, 0); --evt-sort-icon-color: var(--p-primary-color, #4096ff); --evt-required-color: var(--p-danger-color, #f5222d); --evt-error-tip-color: var(--p-danger-color, #f5222d); --evt-error-tip-icon-color: var(--p-danger-color, #f5222d); --evt-readonly-color: var(--p-table-row-bg-color, #fff); --evt-scroller-track-color: var(--p-table-row-bg-color, #fff); /* Canvas / HTML overlayer 共用文字色(业务可覆盖 --p-text-color) */ --evt-header-text-color: var(--p-text-color, #000000); --evt-body-text-color: var(--p-text-color, #000000); --evt-footer-text-color: var(--p-text-color, #000000); --evt-readonly-text-color: var(--p-text-color, #000000); /* 默认 14px。font 简写必须是「字重 字号 字体」;表头 bold、表体 normal */ --evt-header-font: bold 14px 'Microsoft YaHei', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; --evt-body-font: normal 14px 'Microsoft YaHei', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; --evt-scroller-color: #dee0e3; --evt-scroller-focus-color: #bbbec4; --evt-edit-bg-color: #fcf6ed; --evt-footer-bg-color: #fafafa; --evt-autofill-point-border-color: #fff; --evt-editor-bg-color: #fff; --evt-editor-text-color: var(--p-text-color, #000000); --evt-context-menu-bg-color: #fff; --evt-context-menu-text-color: var(--p-text-color, #000000); --evt-context-menu-item-hover-bg-color: #f5f5f5; } /* 夜间:背景随 --p-* 传递,仅覆盖 Canvas 专用色 */ html[theme-mode=dark], :root[data-theme=dark], :root.dark { --evt-header-text-color: var(--p-text-color, #ffffff); --evt-body-text-color: var(--p-text-color, #ffffff); --evt-footer-text-color: var(--p-text-color, #ffffff); --evt-readonly-text-color: var(--p-text-color, #ffffff); --evt-scroller-color: #414243; --evt-scroller-track-color: #141414; --evt-scroller-focus-color: #a3a6ad; --evt-edit-bg-color: #141414; --evt-footer-bg-color: #262727; --evt-autofill-point-border-color: #a3a6ad; --evt-editor-bg-color: #434343; --evt-editor-text-color: var(--p-text-color, #ffffff); --evt-context-menu-bg-color: #141414; --evt-context-menu-text-color: var(--p-text-color, #ffffff); --evt-context-menu-item-hover-bg-color: #414243; } /* #region EVirtTable overlayer cell */ .canvas-cell { display: flex; flex-direction: column; justify-content: center; align-items: start; padding: 0 8px; /* 与 Canvas BODY_TEXT_COLOR 一致,避免 slot HTML 继承页面色偏深/偏浅 */ color: var(--evt-body-text-color); } /* e-virt-table 给 .canvas-cell 写死 userSelect:none;不改单元格本身,只放开插槽后代以便框选文字 */ .canvas-cell * { -webkit-user-select: text !important; user-select: text !important; } /** * HTML overlayer 选中态:SVG 滤镜只给「文字/标签」叠 --evt-select-area-color, * 不给透明底再铺一层(底色交给 Canvas 那一次,避免加深)。 */ .canvas-cell.evt-selected-cell-layer { background: transparent; filter: url(#evt-select-area-overlay-filter); } /* #endregion */ .p-pane { background-color: var(--p-theme-bg, #fff); padding: 16px; border-radius: 4px; } .p-search-form--single-row .p-wrapper > .ant-form > .ant-row { flex-wrap: nowrap; } .p-search-form--single-row .p-wrapper > .ant-form > .ant-row > .ant-col:not(:last-child) { flex-shrink: 1; min-width: 0; } .p-search-form--single-row .p-wrapper > .ant-form > .ant-row > .ant-col:last-child { flex: none !important; margin-left: auto; } .text-slate-5 { color: #64748b; } /* #region patch for env without unocss/tailwind/windicss */ .w-full { width: 100%; } .cursor-pointer { cursor: pointer; } .py-4x { padding-top: 4px; padding-bottom: 4px; } .px-2x { padding-left: 2px; padding-right: 2px; } .pl-4x { padding-left: 1em; } .pl-8 { padding-left: 2em; } .h-0 { height: 0; } .h-full { height: 100%; } .flex { display: flex; } .flex-col { flex-direction: column; } .flex-1 { flex: 1; } .items-center { align-items: center; } .justify-between { justify-content: space-between; } .gap-4px { gap: 4px; } .gap-8px { gap: 8px; } .gap-12px { gap: 12px; } .flex-shrink-0 { flex-shrink: 0; } .min-w-0 { min-width: 0; } .min-h-0 { min-height: 0; } .pt-8px { padding-top: 8px; } .px-16px { padding-left: 16px; padding-right: 16px; } .mt-4px { margin-top: 4px; } .text-right { text-align: right; } .overflow-y-auto { overflow-y: auto; } .overflow-hidden { overflow: hidden; } /* #endregion */ /* #region P family styles */ .p-theme-bg { background-color: var(--p-theme-bg, #fff); } .p-wrapper .p-form-wrapper { z-index: 4; } .p-wrapper { /* PGrid / PCanvasGrid 底部栏(已选统计、分页)统一间距 */ } .p-wrapper .p-grid-footer { display: flex; width: 100%; align-items: center; gap: 12px; padding: 8px 16px 0; } .p-wrapper .p-canvas-pagination.ant-pagination { display: flex; flex-shrink: 0; justify-content: flex-end; margin-left: auto; } .p-wrapper .p-error-hang-out .ant-input-affix-wrapper-status-error:not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper { border-color: var(--p-border-color, #d9d9d9) !important; } .p-wrapper .p-error-hang-out .ant-input-affix-wrapper-status-error:not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper:focus { border-color: var(--p-primary-color, #4096ff) !important; } .p-wrapper .p-error-hang-out .ant-form-item-explain-error { opacity: 0 !important; transform: translateY(-10px) !important; max-height: 0 !important; overflow: hidden !important; transition: none !important; } .p-wrapper .ant-form-item-explain-error { opacity: 0; transform: translateY(-10px); max-height: 0; overflow: hidden; transition: opacity 0.3s ease-out 0.3s, transform 0.3s ease-out 0.3s, max-height 0.3s ease-out 0.3s; } .p-wrapper .ant-form-item-has-error .ant-form-item-explain-error { opacity: 1; transform: translateY(0); max-height: 100px; } .p-wrapper .p-toolbar-wrapper { box-shadow: 0 8px var(--p-bg-color, #fff); border-radius: 0.5em 0.5em 0 0; margin-bottom: -0.5em; } .p-wrapper .p-canvas-toolbar-wrapper { box-shadow: 0 8px var(--p-theme-bg, #fff); border-radius: 0.5em 0.5em 0 0; } .p-wrapper .ant-form .ant-form-item { margin-bottom: 0; } .p-wrapper .ant-form .ant-form-item.p-required .ant-form-item-label > label:before { display: inline-block; margin-inline-end: 4px; color: var(--p-danger-color, #ff4d4f); font-size: 14px; font-family: SimSun, sans-serif; line-height: 1; content: "*"; } .p-wrapper .ant-form .ant-form-item .ant-form-item-label { display: flex; align-items: start; justify-content: flex-end; } .p-wrapper .ant-form .ant-form-item .ant-form-item-label > label { white-space: break-spaces; align-items: flex-start; height: fit-content; padding-top: 0.36em; } .p-wrapper .ant-form .ant-form-item .ant-form-item-label > label:after { padding-left: 4px; margin-inline-start: unset; } .p-wrapper .ant-form.ant-form-vertical .ant-form-item .ant-form-item-label { justify-content: flex-start; font-weight: 600; } .p-wrapper .ant-table-wrapper .ant-table { background-color: var(--p-table-row-bg-color, #fff); } .p-wrapper .ant-table-wrapper .ant-table td.ant-table-cell { background-color: var(--p-table-row-bg-color, #fff); } .p-wrapper .ant-table-wrapper .ant-table-tbody > tr > td.ant-table-cell-row-hover { background-color: var(--p-table-row-hover-bg-color, #e6e7ea); } .p-wrapper .ant-table-wrapper .ant-table-pagination.ant-pagination { margin: unset; padding: 16px 0; } .p-wrapper .ant-table-wrapper tr.p-grid-row-striped { background-color: var(--p-striped-bg-color, #f2f3f6); } .p-wrapper .ant-table-wrapper tr.p-grid-row-striped > td.ant-table-cell { background-color: var(--p-striped-bg-color, #e6e7ea); } .p-wrapper .ant-table-wrapper tr.p-grid-row-striped > td.ant-table-cell.ant-table-cell-row-hover { background-color: var(--p-table-row-hover-bg-color, #e6e7ea); } .p-wrapper .ant-table-wrapper .ant-table-thead > tr > th { background-color: var(--p-table-thead-bg-color, #f2f3f6); } .p-wrapper .ant-table-sticky-scroll { visibility: hidden; } .p-wrapper .ant-table-header.ant-table-sticky-holder:before { content: ""; width: 100%; position: absolute; height: 22px; display: block; backdrop-filter: blur(2px); top: -16px; } .p-wrapper .ant-table-wrapper .ant-pagination { gap: 8px; } .p-wrapper .ant-table-wrapper .ant-pagination .ant-pagination-prev, .p-wrapper .ant-table-wrapper .ant-pagination .ant-pagination-next { border: 1px solid var(--p-pagination-border-color, #bbbdbf); } .p-wrapper .ant-table-wrapper .ant-pagination .ant-pagination-total-text { margin-inline-end: 0; padding-inline-end: 8px; } .p-wrapper .ant-table-wrapper .ant-pagination .ant-pagination-item { border: 1px solid var(--p-pagination-border-color, transparent); } .p-wrapper .ant-table-wrapper .ant-pagination .ant-pagination-item:not(.ant-pagination-item-active) { background-color: var(--p-pagination-bg-color, #fff); } .p-wrapper .ant-table-wrapper .ant-pagination .ant-pagination-item:not(.ant-pagination-item-active) > a { color: var(--p-pagination-color, #323335); } .p-wrapper .ant-table-wrapper .ant-pagination .ant-pagination-item:not(.ant-pagination-item-active):hover { background-color: var(--p-pagination-hover-bg-color, rgba(0, 0, 0, 0.0588235294)); } .p-wrapper .ant-table-wrapper .ant-pagination .ant-pagination-item:not(.ant-pagination-item-active):hover > a { color: var(--p-pagination-active-color, rgba(0, 0, 0, 0.8784313725)); } .p-wrapper .ant-table-wrapper .ant-pagination .ant-pagination-item.ant-pagination-item-active { background-color: var(--p-pagination-active-bg-color, #fff); border-color: var(--p-pagination-active-border-color, var(--p-primary-color, #4096ff)); } .p-wrapper .ant-table-wrapper .ant-pagination .ant-pagination-item.ant-pagination-item-active > a { color: var(--p-pagination-active-color, var(--p-primary-color, #4096ff)); } .p-wrapper .h-lack .ant-table-wrapper .ant-table-pagination.ant-pagination { padding: unset; margin-top: 8px; } .p-wrapper .p-inner-scroll > .ant-table-wrapper, .p-wrapper .p-inner-scroll > .p-grid-table-body > .ant-table-wrapper { height: 100%; } .p-wrapper .p-inner-scroll > .ant-table-wrapper > .ant-spin-nested-loading, .p-wrapper .p-inner-scroll > .p-grid-table-body > .ant-table-wrapper > .ant-spin-nested-loading { height: 100%; } .p-wrapper .p-inner-scroll > .ant-table-wrapper > .ant-spin-nested-loading > .ant-spin-container, .p-wrapper .p-inner-scroll > .p-grid-table-body > .ant-table-wrapper > .ant-spin-nested-loading > .ant-spin-container { height: 100%; display: flex; flex-direction: column; } .p-wrapper .p-inner-scroll > .ant-table-wrapper > .ant-spin-nested-loading > .ant-spin-container > .ant-table, .p-wrapper .p-inner-scroll > .p-grid-table-body > .ant-table-wrapper > .ant-spin-nested-loading > .ant-spin-container > .ant-table { flex: 1; height: 0; overflow-y: hidden; /*border-radius: unset; 修复模糊问题 according to https://stackoverflow.com/questions/49349337/chrome-text-blur-with-overflow-yscroll-and-fixed-height*/ border-radius: unset; } .p-wrapper .p-inner-scroll > .ant-table-wrapper > .ant-spin-nested-loading > .ant-spin-container > .ant-table > .ant-table-container > .ant-table-body, .p-wrapper .p-inner-scroll > .p-grid-table-body > .ant-table-wrapper > .ant-spin-nested-loading > .ant-spin-container > .ant-table > .ant-table-container > .ant-table-body { position: relative; } .p-wrapper .ant-pagination-options .ant-select { width: 100px; } .p-wrapper .ant-table-cell:not(.normal-break) { word-break: break-all; } .p-error-group-tab { position: relative; overflow: visible; color: var(--p-danger-color, #f5222d) !important; } .p-error-group-tab:after { content: "🏷️"; position: absolute; top: -1em; right: 0; width: 1em; height: 1em; font-size: 0.8em; animation: heartbeat 2s infinite; } .ant-picker-dropdown .ant-picker-footer { padding-left: 4px; } .p-error-hang-out .ant-input-affix-wrapper-status-error:not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper { border-color: var(--p-border-color, #d9d9d9) !important; } .p-error-hang-out .ant-input-affix-wrapper-status-error:not(.ant-input-affix-wrapper-disabled):not(.ant-input-affix-wrapper-borderless).ant-input-affix-wrapper:focus { border-color: var(--p-primary-color, #4096ff) !important; } .p-error-hang-out .ant-form-item-explain-error { display: none; } .no-error-border { border-color: var(--p-border-color, #d9d9d9) !important; } .no-error-border:focus { border-color: var(--p-primary-color, #4096ff) !important; } @media (max-width: 575px) { .p-wrapper .ant-form .ant-form-item .ant-form-item-label { justify-content: flex-start; } } .collapsible-card { background-color: var(--p-bg-color, #fff); border-color: var(--p-border-light-color, #f0f0f0); } .collapsible-card .ant-collapse-header { padding: 0 12px; min-height: 38px; display: flex; align-items: center; font-weight: 600; /* 业务侧可用 --collapsible-card-header-bg 覆盖为 --amp-bg-secondary 等 */ background-color: var(--collapsible-card-header-bg, transparent); } .collapsible-card .ant-collapse-header .ant-collapse-expand-icon { padding-inline-end: 8px; } .collapsible-card .ant-collapse-content { border-color: var(--p-border-light-color, #f0f0f0); } .collapsible-card .ant-collapse-content .ant-collapse-content-box { padding: var(--collapsible-card-body-padding, 12px); } .collapsible-card .ant-collapse-item { border-color: var(--p-border-light-color, #f0f0f0); } .collapsible-card .collapsible-card__expand-icon { transition: transform 0.2s; } /* #endregion */ /**/ .p-content-align-right.ant-form-item .ant-form-item-control-input-content { display: flex; justify-content: flex-end; align-items: center; text-align: right; } /**/ .p-content-align-center.ant-form-item .ant-form-item-control-input-content { display: flex; justify-content: center; align-items: center; text-align: center; } @keyframes heartbeat { 0% { transform: scale(1); } 6% { transform: scale(1.22); } 12% { transform: scale(1); } 18% { transform: scale(1.18); } 24% { transform: scale(1); } 48% { transform: scale(1); } 54% { transform: scale(1.22); } 60% { transform: scale(1); } 66% { transform: scale(1.18); } 72% { transform: scale(1); } 100% { transform: scale(1); } }