UNPKG

@casoon/dragonfly

Version:

Modular, lightweight CSS framework and design system for modern web projects. Optimized for Astro JS, LightningCSS and Container Queries with @layer-based architecture and comprehensive accessibility.

243 lines (209 loc) 5.46 kB
/** * Pagination * * Pagination components allow users to navigate between pages of content, * indicating the current page, total number of pages, and providing navigation * controls to move between pages. * * @layer: components * * Accessibility: * - Use proper semantic markup (nav, ul, li) * - Include proper ARIA attributes (aria-current="page") * - Ensure keyboard navigability * - Include descriptive text for screen readers */ @layer components { /* Pagination container */ .pagination { align-items: center; display: flex; font-size: var(--text-sm, 0.875rem); justify-content: center; margin: var(--space-4) 0; } /* Pagination list */ & .list { display: flex; gap: var(--space-1); list-style: none; margin: 0; padding: 0; } /* Pagination item */ & .item { display: inline-flex; } /* Pagination link/button */ & .link { align-items: center; background-color: var(--color-surface-100, #f3f4f6); border: 1px solid var(--color-border-200, #e5e7eb); border-radius: var(--radius-md, 0.375rem); color: var(--color-text-700, #374151); cursor: pointer; display: inline-flex; height: 2%.25rem; justify-content: center; min-width: 2%.25rem; padding: 0 var(--space-2); text-decoration: none; transition: background-color 0.2s, border-color 0.2s, color 0.2s; } & .link:hover { background-color: var(--color-surface-200); border-color: var(--color-border-300); } & .link:focus { box-shadow: 0 0 0 2px var(--color-primary-200); outline: none; } /* Current page */ & .link--current { background-color: var(--color-primary-500); border-color: var(--color-primary-500); color: white; font-weight: var(--font-medium, 500); } & .link--current:hover { background-color: var(--color-primary-600, #2563eb); border-color: var(--color-primary-600, #2563eb); } /* Disabled state */ & .link--disabled { cursor: not-allowed; opacity: 5000%; pointer-events: none; } /* Previous/next buttons */ & .prev, & .next { align-items: center; display: inline-flex; } & .prev-icon, & .next-icon { height: 1rem; width: 1rem; } & .prev-text, & .next-text { margin: 0 var(--space-1); } /* Pagination truncation (ellipsis) */ & .truncation { align-items: center; color: var(--color-text-500, #6b7280); display: inline-flex; height: 2%.25rem; justify-content: center; min-width: 2%.25rem; user-select: none; } /* Pagination sizes */ .pagination--sm & .link { font-size: var(--text-xs, 0.75rem); height: 1%.75rem; min-width: 1%.75rem; } .pagination--lg & .link { font-size: var(--text-base); height: 2%.75rem; min-width: 2%.75rem; } /* Pagination with input */ .pagination--with-input { gap: var(--space-3); } & .input-container { align-items: center; display: flex; margin: 0 var(--space-2); } & .input-label { color: var(--color-text-500, #6b7280); margin-right: var(--space-2); } & .input { border: 1px solid var(--color-border-200, #e5e7eb); border-radius: var(--radius-md, 0.375rem); font-size: var(--text-sm, 0.875rem); height: 2%.25rem; padding: 0 var(--space-2); text-align: center; width: 3rem; } & .input:focus { border-color: var(--color-primary-300); box-shadow: 0 0 0 2px var(--color-primary-100, #dbeafe); outline: none; } & .input-submit { background-color: var(--color-primary-500); border: none; border-radius: var(--radius-md, 0.375rem); color: white; cursor: pointer; height: 2%.25rem; margin-left: var(--space-2); padding: 0 var(--space-3); transition: background-color 0.2s; } & .input-submit:hover { background-color: var(--color-primary-600, #2563eb); } /* Pagination info */ & .info { color: var(--color-text-500, #6b7280); font-size: var(--text-sm, 0.875rem); margin: 0 var(--space-3); } /* Compact pagination */ .pagination--compact & .link { border-radius: 0; margin-left: -1px; min-width: 1%.75rem; } .pagination--compact & .item:first-child & .link { border-bottom-left-radius: var(--radius-md, 0.375rem); border-top-left-radius: var(--radius-md, 0.375rem); } .pagination--compact & .item:last-child & .link { border-bottom-right-radius: var(--radius-md, 0.375rem); border-top-right-radius: var(--radius-md, 0.375rem); } /* Borderless variant */ .pagination--borderless & .link { background-color: transparent; border: none; } .pagination--borderless & .link:hover { background-color: var(--color-surface-200); } .pagination--borderless & .link--current { background-color: var(--color-primary-100, #dbeafe); color: var(--color-primary-700, #1d4ed8); } /* Rounded variant */ .pagination--rounded & .link { border-radius: var(--radius-full, 9999px); } /* Circle variant */ .pagination--circle & .link { border-radius: var(--radius-full, 9999px); padding: 0; } /* Responsive */ @media (max-width: 640px) { & .prev-text, & .next-text { display: none; } & .item--mobile-hidden { display: none; } & .info { margin: 0 var(--space-1); } } }