diff --git a/.forgejo/workflows/dependency-builds.yml b/.forgejo/workflows/dependency-builds.yml index dc1748f..1db4e9d 100644 --- a/.forgejo/workflows/dependency-builds.yml +++ b/.forgejo/workflows/dependency-builds.yml @@ -4,7 +4,6 @@ on: pull_request: env: - NIX_CONFIG: experimental-features = nix-command flakes FORGEJO_TOKEN: "" GITHUB_TOKEN: "" @@ -14,7 +13,6 @@ jobs: name: Build & Lint runs-on: nixos steps: - - run: nix profile add nixpkgs#nodejs_24 - uses: https://data.forgejo.org/actions/checkout@v4 with: persist-credentials: false diff --git a/apps/showcase/index.html b/apps/showcase/index.html index 0226942..e03a0c5 100644 --- a/apps/showcase/index.html +++ b/apps/showcase/index.html @@ -2,7 +2,10 @@ - + Methanium UI Showcase diff --git a/apps/showcase/src/App.tsx b/apps/showcase/src/App.tsx index f67cc0d..8657a88 100644 --- a/apps/showcase/src/App.tsx +++ b/apps/showcase/src/App.tsx @@ -17,6 +17,7 @@ import { SelectValue, Sidebar, SidebarContent, + SidebarFooter, SidebarGroup, SidebarGroupContent, SidebarInset, @@ -205,6 +206,15 @@ export default function App() { + + + Privacy Policy + + diff --git a/package.json b/package.json index 914b420..86ec34f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@methanium/ui", - "version": "0.0.28", + "version": "0.0.32", "type": "module", "main": "./dist/index.js", "types": "./dist/index.d.ts", @@ -66,8 +66,8 @@ "emojibase-data": "^17.0.0", "hast-util-to-jsx-runtime": "^2.3.6", "input-otp": "^1.4.2", - "katex": "^0.18.2", - "lucide-react": "^1.30.0", + "katex": "^0.18.3", + "lucide-react": "^1.31.0", "next-themes": "^0.4.6", "react-markdown": "^10.1.0", "react-resizable-panels": "^4.12.2", @@ -80,7 +80,7 @@ "remark-math": "^6.0.0", "shadcn": "^4.16.2", "shiki": "^4.4.2", - "sonner": "^2.0.7", + "sonner": "^2.0.8", "tailwind-merge": "^3.6.0", "tw-animate-css": "^1.4.0", "unist-util-visit": "^5.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6fab24d..25f06d9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -57,11 +57,11 @@ importers: specifier: ^1.4.2 version: 1.4.2(react-dom@19.2.8(react@19.2.8))(react@19.2.8) katex: - specifier: ^0.18.2 - version: 0.18.2 + specifier: ^0.18.3 + version: 0.18.3 lucide-react: - specifier: ^1.30.0 - version: 1.30.0(react@19.2.8) + specifier: ^1.31.0 + version: 1.31.0(react@19.2.8) next-themes: specifier: ^0.4.6 version: 0.4.6(react-dom@19.2.8(react@19.2.8))(react@19.2.8) @@ -105,8 +105,8 @@ importers: specifier: ^4.4.2 version: 4.4.2 sonner: - specifier: ^2.0.7 - version: 2.0.7(react-dom@19.2.8(react@19.2.8))(react@19.2.8) + specifier: ^2.0.8 + version: 2.0.8(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) tailwind-merge: specifier: ^3.6.0 version: 3.6.0 @@ -1689,8 +1689,8 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.402: - resolution: {integrity: sha512-/oOpMaPT6Yg+6/1XQhyIPlzgj7Ye9zf+nNM2Uh6OcE2G2oNptWazFa+qB2Pdqqbsc9KnIDzgAntoYN0dbwOXwA==} + electron-to-chromium@1.5.403: + resolution: {integrity: sha512-MQsYmdaLzvaCX5j+ZZBr5Fm6uCCnPQcRtlvmvRlWqrXy+BH2O4ffXIAScF+JQznQWB9brWp4lSD9Z4yNmaf2BA==} embla-carousel-react@8.6.0: resolution: {integrity: sha512-0/PjqU7geVmo6F734pmPqpyHqiM99olvyecY7zdweCw+6tKEXnrE90pBiBbMMU8s5tICemzpQ3hi5EpxzGW+JA==} @@ -2277,8 +2277,8 @@ packages: resolution: {integrity: sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg==} hasBin: true - katex@0.18.2: - resolution: {integrity: sha512-3snve4y0SXTMequLim1FMiPvLGElySam0blN5xQZBqEY3lOJz1TnuaaiugnBZBqHzlSAGmFTYL7MCQkORuLKCA==} + katex@0.18.3: + resolution: {integrity: sha512-6kbPr8KiYZpRfNNIw+8Td33njnFzK/ELcw6bI9FzIHysYPatAUdepQimfCX1vG2VCD/5Lv+Gu6P5YA58k8HHmw==} hasBin: true keyv@4.5.4: @@ -2465,8 +2465,8 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - lucide-react@1.30.0: - resolution: {integrity: sha512-tUIr2jXLbWpCkdtH8XP7P7YppM9ueWgTky99lpWDY6z5REs6B+O6ZQ3U5tHkUUY59ANyOv/PBcs8E4Fe3KO3eA==} + lucide-react@1.31.0: + resolution: {integrity: sha512-G8u2eEtoHUnUa9f8lbvqDhCiORMnYLdUEo06EEG9MQvHQrInKcX3Pa2TH39MM5qyzRcWETxB0+aOwAPI1g1kEg==} peerDependencies: react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 @@ -3112,11 +3112,15 @@ packages: sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - sonner@2.0.7: - resolution: {integrity: sha512-W6ZN4p58k8aDKA4XPcx2hpIQXBRAgyiWVkYhT7CvK6D3iAu7xjvVyhQHg2/iaKJZ1XVJ4r7XuwGL+WGEK37i9w==} + sonner@2.0.8: + resolution: {integrity: sha512-UM/ByIoFra8yzV75n1o0Puu0bw5U/9UNnDacrJNspekBewIfsQ3D6ez1nvlWpt7aTsO6rujQtifBpycwIivqlg==} peerDependencies: + '@types/react': ^18.0.0 || ^19.0.0 react: ^18.0.0 || ^19.0.0 || ^19.0.0-rc react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-rc + peerDependenciesMeta: + '@types/react': + optional: true source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} @@ -4646,7 +4650,7 @@ snapshots: dependencies: baseline-browser-mapping: 2.11.13 caniuse-lite: 1.0.30001809 - electron-to-chromium: 1.5.402 + electron-to-chromium: 1.5.403 node-releases: 2.0.53 update-browserslist-db: 1.3.0(browserslist@4.28.8) @@ -4866,7 +4870,7 @@ snapshots: ee-first@1.1.1: {} - electron-to-chromium@1.5.402: {} + electron-to-chromium@1.5.403: {} embla-carousel-react@8.6.0(react@19.2.8): dependencies: @@ -5485,7 +5489,7 @@ snapshots: dependencies: commander: 8.3.0 - katex@0.18.2: + katex@0.18.3: dependencies: commander: 8.3.0 @@ -5622,7 +5626,7 @@ snapshots: dependencies: yallist: 3.1.1 - lucide-react@1.30.0(react@19.2.8): + lucide-react@1.31.0(react@19.2.8): dependencies: react: 19.2.8 @@ -6613,10 +6617,12 @@ snapshots: sisteransi@1.0.5: {} - sonner@2.0.7(react-dom@19.2.8(react@19.2.8))(react@19.2.8): + sonner@2.0.8(@types/react@19.2.18)(react-dom@19.2.8(react@19.2.8))(react@19.2.8): dependencies: react: 19.2.8 react-dom: 19.2.8(react@19.2.8) + optionalDependencies: + '@types/react': 19.2.18 source-map-js@1.2.1: {} diff --git a/src/cmp/alert-dialog.tsx b/src/cmp/alert-dialog.tsx index a0a9c26..848b7a9 100644 --- a/src/cmp/alert-dialog.tsx +++ b/src/cmp/alert-dialog.tsx @@ -52,7 +52,7 @@ function AlertDialogContent({ data-slot="alert-dialog-content" data-size={size} className={cn( - "group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 gap-4 rounded-xl bg-popover p-4 text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", + "group/alert-dialog-content fixed top-[calc((100dvh+max(1rem,var(--ui-safe-area-top))-max(1rem,var(--ui-safe-area-bottom)))/2)] left-[calc((100%+max(1rem,var(--ui-safe-area-left))-max(1rem,var(--ui-safe-area-right)))/2)] z-50 grid w-[calc(100%-max(1rem,var(--ui-safe-area-left))-max(1rem,var(--ui-safe-area-right)))] max-h-[calc(100dvh-max(1rem,var(--ui-safe-area-top))-max(1rem,var(--ui-safe-area-bottom)))] -translate-x-1/2 -translate-y-1/2 gap-4 overflow-y-auto rounded-xl bg-popover p-4 text-popover-foreground ring-1 ring-foreground/10 duration-100 outline-none data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-sm data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95", className, )} {...props} diff --git a/src/cmp/combobox.tsx b/src/cmp/combobox.tsx index dddb01f..755cc5d 100644 --- a/src/cmp/combobox.tsx +++ b/src/cmp/combobox.tsx @@ -2,6 +2,7 @@ import * as React from "react"; import { Combobox as ComboboxPrimitive } from "@base-ui/react"; import { cn } from "../lib/utils"; +import { useSafeAreaCollisionPadding } from "../hooks/use-safe-area"; import { Button } from "./button"; import { InputGroup, @@ -89,12 +90,20 @@ function ComboboxContent({ align = "start", alignOffset = 0, anchor, + collisionPadding, ...props }: ComboboxPrimitive.Popup.Props & Pick< ComboboxPrimitive.Positioner.Props, - "side" | "align" | "sideOffset" | "alignOffset" | "anchor" + | "side" + | "align" + | "sideOffset" + | "alignOffset" + | "anchor" + | "collisionPadding" >) { + const safeAreaCollisionPadding = useSafeAreaCollisionPadding(); + return ( ) { + const safeAreaCollisionPadding = useSafeAreaCollisionPadding(); + return ( ) { + const safeAreaCollisionPadding = useSafeAreaCollisionPadding(); + return ( ; @@ -20,12 +21,15 @@ function HoverCardContent({ sideOffset = 4, align = "center", alignOffset = 4, + collisionPadding, ...props }: PreviewCardPrimitive.Popup.Props & Pick< PreviewCardPrimitive.Positioner.Props, - "align" | "alignOffset" | "side" | "sideOffset" + "align" | "alignOffset" | "side" | "sideOffset" | "collisionPadding" >) { + const safeAreaCollisionPadding = useSafeAreaCollisionPadding(); + return ( -