duoop-ui 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (5) hide show
  1. package/README.md +131 -200
  2. package/THIRD_PARTY_NOTICES.md +116 -116
  3. package/lib/index.js +2657 -2255
  4. package/lib/styles.css +1743 -1364
  5. package/package.json +80 -79
package/README.md CHANGED
@@ -1,201 +1,132 @@
1
- <div align="center">
2
-
3
- <img src="public/armadillo-logo.png" alt="Duoop UI armadillo" width="88" />
4
-
5
- # Duoop UI
6
-
7
- ### Interfaces you can feel. Source code you can own.
8
-
9
- Tactile React components with crisp outlines, playful motion, and satisfying feedback.
10
-
11
- [**Explore the live catalog →**](https://duoop-ui.pages.dev/) · [Components](https://duoop-ui.pages.dev/?page=components) · [Installation](https://duoop-ui.pages.dev/?page=installation) · [Page examples](https://duoop-ui.pages.dev/?page=examples)
12
-
13
- [![CI](https://github.com/gus-rlin/Duoop-UI/actions/workflows/ci.yml/badge.svg)](https://github.com/gus-rlin/Duoop-UI/actions/workflows/ci.yml)
14
- [![License: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-303b51?style=flat-square)](LICENSE)
15
- [![React 19](https://img.shields.io/badge/React-19-303b51?style=flat-square&logo=react)](https://react.dev/)
16
-
17
- </div>
18
-
19
- [![Duoop UI live catalog](docs/images/catalog.png)](https://duoop-ui.pages.dev/)
20
-
21
- ## Why Duoop?
22
-
23
- - **A distinctive feel.** Raised surfaces, short shadows, expressive SVGs, and motion that responds to your actions.
24
- - **Source included.** Preview, inspect, and copy complete JSX and CSS files, including local helpers.
25
- - **Runnable downloads.** Download a Vite project with the displayed example, styles, and dependencies.
26
- - **Plain React and CSS.** No Tailwind setup, custom CLI, or global provider required for a basic button.
27
- - **Interaction matters.** Keyboard behavior, visible focus, reduced motion, and clear action feedback are part of the design.
28
-
29
- This repository contains the documentation site and the installable React library, under Apache 2.0. Use the package to install the whole collection, or keep copying source files and downloading examples when you want to edit their implementation. Dedicated TypeScript declarations are not yet supplied.
30
-
31
- ## Install the library
32
-
33
- The package is prepared in this repository; the first npm registry release is still pending. Until it is published, build an installable archive from a checkout:
34
-
35
- ```sh
36
- npm ci
37
- npm pack
38
- ```
39
-
40
- In your React 19 application, install the generated archive (adjust the path):
41
-
42
- ```sh
43
- npm i /path/to/Duoop-UI/duoop-ui-1.0.0.tgz
44
- ```
45
-
46
- After the first registry release, the equivalent command will be `npm i duoop-ui`. Both methods install the component dependencies automatically. React and React DOM are shared with your application as peer dependencies.
47
-
48
- Import the stylesheet once in your application entry, then import components by name:
49
-
50
- ```jsx
51
- import { Button, Card } from 'duoop-ui';
52
- import 'duoop-ui/styles.css';
53
-
54
- export default function App() {
55
- return <Card><Button onClick={() => alert('Hello!')}>Press me</Button></Card>;
56
- }
57
- ```
58
-
59
- The ESM package contains all public components, their compound components and helpers, including `IconButton`. It excludes the catalogue, demos and development tools. Your bundler can remove unused JavaScript exports; the single stylesheet includes the full collection, the shared foundation and Leaflet styles. The foundation sets page defaults such as body margin and font, so import your application overrides afterwards. DM Sans remains an optional font installation.
60
-
61
- Use a React bundler such as Vite. For Next.js, import the stylesheet in the root layout and use interactive components from a client component; the library entry preserves its `"use client"` boundary. Next.js integration and dedicated TypeScript declarations are not yet verified/provided. The source-copy instructions below remain available.
62
-
63
- ## Explore the collection
64
-
65
- **46 components · 7 categories**, each with downloadable examples. The collection includes Breadcrumb and Separator, plus Tooltip, Popover, Slider, Calendar, Date Picker, Table, Pagination, Sheet, File Upload, Skeleton and Alert. See [integration notes and verification](docs/essential-components.md).
66
-
67
- | Collection | Explore |
68
- | --- | --- |
69
- | Buttons | [Raised buttons and reactions](https://duoop-ui.pages.dev/?category=Buttons) |
70
- | Forms | [Inputs, selection, and validation](https://duoop-ui.pages.dev/?category=Forms) |
71
- | Navigation | [Menus and tabs](https://duoop-ui.pages.dev/?category=Navigation) |
72
- | Cards | [Cards and composed layouts](https://duoop-ui.pages.dev/?category=Cards) |
73
- | Feedback | [Toasts, progress, and achievements](https://duoop-ui.pages.dev/?category=Feedback) |
74
- | Motion | [Animated text and expressive interactions](https://duoop-ui.pages.dev/?category=Motion) |
75
- | Display | [Avatars, maps, and more](https://duoop-ui.pages.dev/?category=Display) |
76
-
77
- Explore [Page examples](https://duoop-ui.pages.dev/?page=examples). Sources include a [studio landing page](src/examples/LandingPage.jsx) and a [settings page](src/examples/SettingsPage.jsx). Example brands, pricing, forms, and persistence are demonstrations; connect your own services when adapting them.
78
-
79
- ## Your first component by copying source
80
-
81
- Use **React 19 + React DOM 19**, JSX compilation, and CSS imports. For a new Vite app, use Node.js **22.12+ or 24+**:
82
-
83
- ```sh
84
- npm create vite@latest my-duoop-app -- --template react
85
- cd my-duoop-app
86
- npm install
87
- ```
88
-
89
- Open [Raised button Code](https://duoop-ui.pages.dev/?component=builtin-relief-button&tab=code) and copy these files, preserving their paths:
90
-
91
- | File | Purpose |
92
- | --- | --- |
93
- | [src/base.css](src/base.css) | Shared sizing, font fallback, accessible hidden text, and inset focus. |
94
- | [src/components/Button/Button.jsx](src/components/Button/Button.jsx) | Button and ActionFeedback; imports its CSS and helper. |
95
- | [src/components/Button/Button.css](src/components/Button/Button.css) | Appearance, depth, states, and reduced motion. |
96
- | [src/components/Button/buttonColor.js](src/components/Button/buttonColor.js) | Custom color palette calculations. |
97
-
98
- Or select **Download project**, unzip it, run `npm install`, then `npm run dev`. The download already includes the setup below.
99
-
100
- Replace `src/main.jsx` with:
101
-
102
- ```jsx
103
- import React from 'react';
104
- import { createRoot } from 'react-dom/client';
105
- import App from './App.jsx';
106
- import './base.css';
107
-
108
- createRoot(document.getElementById('root')).render(<App />);
109
- ```
110
-
111
- Keep Vite's `<div id="root"></div>` in `index.html`. Remove its template `index.css` and `App.css` imports to avoid conflicting layout rules. Do not copy the catalog's `src/styles.css` into your app.
112
-
113
- Replace `src/App.jsx` with:
114
-
115
- ```jsx
116
- import React, { useState } from 'react';
117
- import { Button } from './components/Button/Button.jsx';
118
-
119
- export default function App() {
120
- const [count, setCount] = useState(0);
121
- return (
122
- <main style={{ padding: 32 }}>
123
- <Button onClick={() => setCount(value => value + 1)}>
124
- Pressed {count} times
125
- </Button>
126
- </main>
127
- );
128
- }
129
- ```
130
-
131
- Run `npm run dev`. Clicking increments the counter; Tab reveals inset focus and Enter/Space activate the button. `npm run build` creates `dist/`. Button needs no additional dependencies beyond React.
132
-
133
- ### Styling and integration
134
-
135
- Import `base.css` once; components import their own styles. To match the site's **DM Sans** font, install and import `@fontsource-variable/dm-sans`, then set `:root { --duoop-font: 'DM Sans Variable', system-ui, sans-serif; }`. Otherwise, the foundation uses a system font.
136
-
137
- | Feature | Integration |
138
- | --- | --- |
139
- | GSAP motion | Install `gsap` when listed in Installation. Preserve reduced-motion behavior; Text Loop includes an explicit pause in its minimal example. |
140
- | Map | Install `leaflet`; preserve CSS and attribution. OSM/CARTO tiles need network access and remain subject to provider terms and capacity. |
141
- | Toast | Wrap `useToast()` consumers in `ToastProvider` and render `ToastViewport` once. |
142
- | Dialog, Select, Menu | Keep the positioning helpers and CSS listed in Installation. Overlays may use portals. |
143
- | Images and async demos | Supply production images and connect authentication, server validation, requests, quotas, and persistence. |
144
- | Next.js | Add a `'use client';` boundary above hook-based components; import the foundation in your layout. Map needs client-only loading without SSR. This framework integration is not separately verified. |
145
- | TypeScript | Allow JavaScript with `allowJs: true`, or add types in your project. |
146
-
147
- Page downloads map the page to `src/App.jsx` and [pages.css](src/examples/pages.css) to `src/example.css`, including the foundation and local dependencies. The settings example stores test data under `duoop-example-settings-v1`; replace `readSettings()` and `save()` with your API.
148
-
149
- On Windows, if npm reports `UNABLE_TO_VERIFY_LEAF_SIGNATURE` and your network certificate is in the system store, use Node.js 24 and set `$env:NODE_USE_SYSTEM_CA = '1'` in PowerShell before installing. This preserves TLS verification.
150
-
151
- ## Develop and test
152
-
153
- Catalog tooling requires **Node.js 22.18+ in the 22.x line, or 24.11+**, and npm.
154
-
155
- ```sh
156
- git clone https://github.com/gus-rlin/Duoop-UI.git
157
- cd Duoop-UI
158
- npm ci
159
- npm run dev
160
- ```
161
-
162
- | Command | Purpose |
163
- | --- | --- |
164
- | `npm run build` | Build the static site into `dist/`. |
165
- | `npm run build:lib` | Build the npm library into `lib/`. |
166
- | `npm pack` | Build and create the installable `duoop-ui-1.0.0.tgz` archive. |
167
- | `npm run test:package` | Install the archive in an isolated app; verify exports, build, styling and interaction. |
168
- | `npm run preview` | Preview the production build. |
169
- | `npm test` | Build, check imports, run public browser/SEO tests, and build downloaded projects. |
170
- | `npm run test:primitives` | Run detailed primitive suites against a dev server on port 5176. |
171
- | `npm run test:a11y` | Audit galleries against a dev server on port 5176. |
172
- | `npm run test:pages` | Build and test downloaded pages after `npm test`. |
173
- | `npm run test:integration` | Verify the README button in a fresh Vite app; requires npm access. |
174
-
175
- Install Chromium with `npx playwright install chromium`. For a fixed dev port, run `npm run dev -- --port 5176 --strictPort`; `TEST_URL` overrides the primitive suites' server address. Reports and screenshots go to the ignored `artifacts/` directory.
176
-
177
- GitHub CI runs the production build, import checks, and SEO browser tests. See [VALIDATION.md](VALIDATION.md) for historical results and known limitations. Automated accessibility checks are not a comprehensive certification.
178
-
179
- ## Deployment
180
-
181
- ### npm release
182
-
183
- Run `npm run test:package` before releasing (Chromium must be installed). Review `npm pack --dry-run`, verify that you control the npm package name, and sign in with `npm login`. Set the release version with `npm version <version>`, then run `npm publish --access public`. The `prepack` hook rebuilds the library for packing and publishing. Registry publication is a separate maintainer action; this repository does not publish automatically. Once the first release is available, update the pending-release instructions here and on the Installation page.
184
-
185
- ### Documentation site
186
-
187
- The live site is on [Cloudflare Pages](https://duoop-ui.pages.dev/). Deploy `dist/` over HTTPS for clipboard access. Query-based deep links do not need route rewrites. Preserve public TXT/XML files and allow required remote demo assets in any CSP. See [SEO.md](SEO.md).
188
-
189
- Legacy personal entries in `duoop-ui.components.v1` are no longer displayed; their stored data is not deleted or rewritten.
190
-
191
- ## Contribute
192
-
193
- Start with [CONTRIBUTING.md](CONTRIBUTING.md), follow the [design guidelines](design.md), and use the [issue templates](https://github.com/gus-rlin/Duoop-UI/issues/new/choose) for bugs and ideas.
194
-
195
- Useful entry points: [catalog metadata](src/catalog/catalog.js), [integration recipes](src/catalog/recipes.js), [source bundling](src/catalog/source-bundle.js), and [code documentation](src/components/Button/Documentation.jsx).
196
-
197
- If Duoop helps you build something, a GitHub star helps others discover it.
198
-
199
- ## License
200
-
1
+ <div align="center">
2
+
3
+ <img src="public/armadillo-logo.png" alt="Duoop UI armadillo" width="88" />
4
+
5
+ # Duoop UI
6
+
7
+ ### Interfaces you can feel. Source code you can own.
8
+
9
+ Tactile React components with crisp outlines, playful motion, and satisfying feedback.
10
+
11
+ **46 components across 7 categories interactive previews, source code, and downloadable examples.**
12
+
13
+ [**Explore the live catalog →**](https://duoop-ui.com/) · [Components](https://duoop-ui.com/?page=components) · [Installation](https://duoop-ui.com/?page=installation) · [Page examples](https://duoop-ui.com/?page=examples)
14
+
15
+ [![CI](https://github.com/gus-rlin/Duoop-UI/actions/workflows/ci.yml/badge.svg)](https://github.com/gus-rlin/Duoop-UI/actions/workflows/ci.yml)
16
+ [![License: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-303b51?style=flat-square)](LICENSE)
17
+ [![React 19](https://img.shields.io/badge/React-19-303b51?style=flat-square&logo=react)](https://react.dev/)
18
+
19
+ </div>
20
+
21
+ [![Duoop UI live catalog](docs/images/catalog.png)](https://duoop-ui.com/)
22
+
23
+ ## Why Duoop?
24
+
25
+ - **A distinctive feel.** Raised surfaces, short shadows, expressive SVGs, and motion that responds to your actions.
26
+ - **Source included.** Preview, inspect, and copy complete JSX and CSS files, including local helpers.
27
+ - **Runnable downloads.** Download a Vite project with the displayed example, styles, and dependencies.
28
+ - **Plain React and CSS.** No Tailwind setup, custom CLI, or global provider required for a basic button.
29
+ - **Interaction matters.** Keyboard behavior, visible focus, reduced motion, and clear action feedback are part of the design.
30
+
31
+ **Duoop UI is published on npm as `duoop-ui`.** Install the library with npm to use its components in your React application. This repository contains the library source and documentation site, under Apache 2.0.
32
+
33
+ ## Install the library
34
+
35
+ Install the published [duoop-ui package](https://www.npmjs.com/package/duoop-ui) in your React 19 application:
36
+
37
+ ```sh
38
+ npm i duoop-ui
39
+ ```
40
+
41
+ The package installs its runtime dependencies automatically. React and React DOM are peer dependencies supplied by your React 19 application.
42
+
43
+ Import the stylesheet once in your application entry, then import components by name:
44
+
45
+ ```jsx
46
+ import { Button, Card } from 'duoop-ui';
47
+ import 'duoop-ui/styles.css';
48
+
49
+ export default function App() {
50
+ return <Card><Button onClick={() => alert('Hello!')}>Press me</Button></Card>;
51
+ }
52
+ ```
53
+
54
+ The ESM package contains all public components, their compound components and helpers, including `IconButton`. It excludes the catalogue, demos and development tools. Your bundler can remove unused JavaScript exports; the single stylesheet includes the full collection, the shared foundation and Leaflet styles. The foundation sets page defaults such as body margin and font, so import your application overrides afterwards. DM Sans remains an optional font installation.
55
+
56
+ Use a React bundler such as Vite. For Next.js, import the stylesheet in the root layout and use interactive components from a client component; the library entry preserves its `"use client"` boundary. Next.js and server rendering have not been separately validated. Dedicated TypeScript declarations are not supplied.
57
+
58
+ ## Explore the collection
59
+
60
+ **46 components · 7 categories**, each with downloadable examples. The collection includes Breadcrumb and Separator, plus Tooltip, Popover, Slider, Calendar, Date Picker, Table, Pagination, Sheet, File Upload, Skeleton and Alert. See [integration notes and verification](docs/essential-components.md).
61
+
62
+ | Collection | Explore |
63
+ | --- | --- |
64
+ | Buttons | [Raised buttons and reactions](https://duoop-ui.com/?category=Buttons) |
65
+ | Forms | [Inputs, selection, and validation](https://duoop-ui.com/?category=Forms) |
66
+ | Navigation | [Menus and tabs](https://duoop-ui.com/?category=Navigation) |
67
+ | Cards | [Cards and composed layouts](https://duoop-ui.com/?category=Cards) |
68
+ | Feedback | [Toasts and progress](https://duoop-ui.com/?category=Feedback) |
69
+ | Motion | [Animated text and expressive interactions](https://duoop-ui.com/?category=Motion) |
70
+ | Display | [Avatars, maps, and more](https://duoop-ui.com/?category=Display) |
71
+
72
+ Explore the [outdoor adventure landing page](https://duoop-ui.com/?page=examples&example=landing), the current public page example, with [source](src/examples/LandingPage.jsx), styles and a runnable download. [SettingsPage.jsx](src/examples/SettingsPage.jsx) remains a source-only example in the repository; it is not listed in the public catalog. Example brands, pricing, forms, and persistence are demonstrations; connect your own services when adapting them.
73
+
74
+ ## Optional: own the source files
75
+
76
+ For direct edits to a component implementation, follow the [source-copy guide](docs/source-installation.md), or choose **Download project** in the catalog for a complete Vite example. These are optional ways to use the same components. The npm installation above is complete on its own.
77
+
78
+ ## Develop and test
79
+
80
+ Catalog tooling requires **Node.js 22.18+ in the 22.x line, or 24.11+**, and npm.
81
+
82
+ ```sh
83
+ git clone https://github.com/gus-rlin/Duoop-UI.git
84
+ cd Duoop-UI
85
+ npm ci
86
+ npm run dev
87
+ ```
88
+
89
+ | Command | Purpose |
90
+ | --- | --- |
91
+ | `npm run build` | Build the static site into `dist/`. |
92
+ | `npm run build:lib` | Build the npm library into `lib/`. |
93
+ | `npm pack` | Build and create the installable `duoop-ui-1.0.1.tgz` archive. |
94
+ | `npm run test:package` | Install the archive in an isolated app; verify exports, build, styling and interaction. |
95
+ | `npm run preview` | Preview the production build. |
96
+ | `npm run test:docs` | Check documentation counts, public URLs, local links and documented npm scripts against the project. |
97
+ | `npm test` | Run documentation checks, build, check imports, run essentials and public browser/SEO tests, then build downloaded projects. See current limitations in VALIDATION.md. |
98
+ | `npm run test:essentials` | Start its own server and check the eleven essential component families. |
99
+ | `npm run test:essential-downloads` | Start its own server, download and build essential starters and gallery variants. |
100
+ | `npm run test:navigation` | Start its own server and check Breadcrumb and Separator. |
101
+ | `npm run test:primitives` | Run detailed primitive suites against a dev server on port 5176. |
102
+ | `npm run test:a11y` | Audit galleries against a dev server on port 5176. |
103
+ | `npm run test:pages` | Legacy two-page regression script; requires old downloads and selectors. See VALIDATION.md before using. |
104
+ | `npm run test:integration` | Verify the optional source-copy guide in a fresh Vite app; requires npm access. |
105
+
106
+ Install Chromium with `npx playwright install chromium`. For a fixed dev port, run `npm run dev -- --port 5176 --strictPort`. Most primitive suites accept `TEST_URL`, but some diagnostic scripts use fixed addresses; keep port 5176 for the combined run. Reports and screenshots go to the ignored `artifacts/` directory.
107
+
108
+ GitHub CI runs documentation checks, the production build, import checks, package installation tests, essential-component browser checks, and SEO browser tests. See [VALIDATION.md](VALIDATION.md) for verification scope and known limitations. Automated accessibility checks are not a comprehensive certification.
109
+
110
+ ## Deployment
111
+
112
+ Maintainer instructions for [packing and publishing a new npm release](CONTRIBUTING.md#publish-a-new-npm-release-maintainers) are in the contribution guide.
113
+
114
+ ### Documentation site
115
+
116
+ The live site is on [Cloudflare Pages](https://duoop-ui.com/). Deploy `dist/` over HTTPS for clipboard access. Query-based deep links do not need route rewrites. Preserve public TXT/XML files and allow required remote demo assets in any CSP. See [SEO.md](SEO.md).
117
+
118
+ Legacy personal entries in `duoop-ui.components.v1` are no longer displayed; their stored data is not deleted or rewritten.
119
+
120
+ ## Contribute
121
+
122
+ Start with [CONTRIBUTING.md](CONTRIBUTING.md), follow the [design guidelines](design.md), and use the [issue templates](https://github.com/gus-rlin/Duoop-UI/issues/new/choose) for bugs and ideas.
123
+
124
+ Useful entry points: [catalog metadata](src/catalog/catalog.js), [integration recipes](src/catalog/recipes.js), [source bundling](src/catalog/source-bundle.js), and [code documentation](src/components/Button/Documentation.jsx).
125
+
126
+ Documentation ownership and the update checklist are in [CONTRIBUTING.md](CONTRIBUTING.md#keep-documentation-consistent). Catalog counts come from `entries` and `categories` in `src/catalog/catalog.js`; package requirements come from `package.json`; canonical URLs come from `src/catalog/seo.js`. Counts refer to catalog entries, not the larger set of exported compound components and helpers.
127
+
128
+ If Duoop helps you build something, a GitHub star helps others discover it.
129
+
130
+ ## License
131
+
201
132
  [Apache License 2.0](LICENSE). Preserve required license and attribution notices. Third-party dependencies and demo assets retain their own terms.
@@ -1,119 +1,119 @@
1
- # Third-party component foundations
2
-
3
- Duoop adapts the official composition examples and uses the unstyled runtime packages below. Duoop CSS, demos and integration are maintained in this repository. Dependency source is installed through npm, rather than vendored.
4
-
5
- - Radix Primitives — Tooltip, Popover, Slider and Dialog (Sheet): https://github.com/radix-ui/primitives and https://www.radix-ui.com/primitives/docs/components
6
- - React DayPicker v9 — Calendar and Date Picker: https://github.com/gpbl/react-day-picker and https://daypicker.dev/v9
7
- - React Dropzone — file selection and validation: https://github.com/react-dropzone/react-dropzone
8
-
9
- The following MIT notices are retained for these foundations and accompanying examples. Other transitive dependencies retain their own notices in their npm distributions.
10
-
11
- ## Radix Primitives
12
- MIT License
13
-
14
- Copyright (c) 2022 WorkOS
15
-
16
- Permission is hereby granted, free of charge, to any person obtaining a copy
17
- of this software and associated documentation files (the "Software"), to deal
18
- in the Software without restriction, including without limitation the rights
19
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
20
- copies of the Software, and to permit persons to whom the Software is
21
- furnished to do so, subject to the following conditions:
22
-
23
- The above copyright notice and this permission notice shall be included in all
24
- copies or substantial portions of the Software.
25
-
26
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
27
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
28
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
29
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
30
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
31
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
32
- SOFTWARE.
33
-
34
- ## React DayPicker
35
-
36
- The MIT License (MIT)
37
-
38
- Copyright (c) 2014-2025 Giampaolo Bellavite <io@gpbl.dev> and contributors
39
-
40
- Permission is hereby granted, free of charge, to any person obtaining a copy
41
- of this software and associated documentation files (the "Software"), to deal
42
- in the Software without restriction, including without limitation the rights
43
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
44
- copies of the Software, and to permit persons to whom the Software is
45
- furnished to do so, subject to the following conditions:
46
-
47
- The above copyright notice and this permission notice shall be included in all
48
- copies or substantial portions of the Software.
49
-
50
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
51
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
52
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
53
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
54
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
55
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
56
- SOFTWARE.
57
-
58
- ## React Dropzone
59
-
60
- The MIT License (MIT)
61
-
62
- Copyright (c) 2018 Param Aggarwal
63
-
64
- Permission is hereby granted, free of charge, to any person obtaining a copy
65
- of this software and associated documentation files (the "Software"), to deal
66
- in the Software without restriction, including without limitation the rights
67
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
68
- copies of the Software, and to permit persons to whom the Software is
69
- furnished to do so, subject to the following conditions:
70
-
71
- The above copyright notice and this permission notice shall be included in all
72
- copies or substantial portions of the Software.
73
-
74
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
75
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
76
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
77
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
78
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
79
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
80
- SOFTWARE.
81
-
82
-
83
-
84
- ## Breadcrumb and Separator adaptations
85
-
86
- Breadcrumb adapts shadcn/ui's composable breadcrumb source (https://github.com/shadcn-ui/ui/blob/main/apps/v4/registry/new-york-v4/ui/breadcrumb.tsx), replacing Tailwind, Slot and Lucide with local CSS and native elements. Separator adapts the orientation and decorative semantics from https://github.com/radix-ui/primitives/blob/main/packages/react/separator/src/separator.tsx using a native div; the Radix MIT notice above applies. No new runtime dependencies are required.
87
-
88
- ## shadcn/ui
89
-
90
- MIT License
91
-
92
- Copyright (c) 2023 shadcn
93
-
94
- Permission is hereby granted, free of charge, to any person obtaining a copy
95
- of this software and associated documentation files (the "Software"), to deal
96
- in the Software without restriction, including without limitation the rights
97
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
98
- copies of the Software, and to permit persons to whom the Software is
99
- furnished to do so, subject to the following conditions:
100
-
101
- The above copyright notice and this permission notice shall be included in all
102
- copies or substantial portions of the Software.
103
-
104
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
105
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
106
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
107
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
108
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
109
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
110
- SOFTWARE.
111
-
112
-
113
- ## Leaflet
114
-
115
- The library stylesheet includes Leaflet CSS and its referenced marker images.
116
-
1
+ # Third-party component foundations
2
+
3
+ Duoop adapts the official composition examples and uses the unstyled runtime packages below. Duoop CSS, demos and integration are maintained in this repository. Dependency source is installed through npm, rather than vendored.
4
+
5
+ - Radix Primitives — Tooltip, Popover, Slider and Dialog (Sheet): https://github.com/radix-ui/primitives and https://www.radix-ui.com/primitives/docs/components
6
+ - React DayPicker v9 — Calendar and Date Picker: https://github.com/gpbl/react-day-picker and https://daypicker.dev/v9
7
+ - React Dropzone — file selection and validation: https://github.com/react-dropzone/react-dropzone
8
+
9
+ The following MIT notices are retained for these foundations and accompanying examples. Other transitive dependencies retain their own notices in their npm distributions.
10
+
11
+ ## Radix Primitives
12
+ MIT License
13
+
14
+ Copyright (c) 2022 WorkOS
15
+
16
+ Permission is hereby granted, free of charge, to any person obtaining a copy
17
+ of this software and associated documentation files (the "Software"), to deal
18
+ in the Software without restriction, including without limitation the rights
19
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
20
+ copies of the Software, and to permit persons to whom the Software is
21
+ furnished to do so, subject to the following conditions:
22
+
23
+ The above copyright notice and this permission notice shall be included in all
24
+ copies or substantial portions of the Software.
25
+
26
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
27
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
28
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
29
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
30
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
31
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
32
+ SOFTWARE.
33
+
34
+ ## React DayPicker
35
+
36
+ The MIT License (MIT)
37
+
38
+ Copyright (c) 2014-2025 Giampaolo Bellavite <io@gpbl.dev> and contributors
39
+
40
+ Permission is hereby granted, free of charge, to any person obtaining a copy
41
+ of this software and associated documentation files (the "Software"), to deal
42
+ in the Software without restriction, including without limitation the rights
43
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
44
+ copies of the Software, and to permit persons to whom the Software is
45
+ furnished to do so, subject to the following conditions:
46
+
47
+ The above copyright notice and this permission notice shall be included in all
48
+ copies or substantial portions of the Software.
49
+
50
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
51
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
52
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
53
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
54
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
55
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
56
+ SOFTWARE.
57
+
58
+ ## React Dropzone
59
+
60
+ The MIT License (MIT)
61
+
62
+ Copyright (c) 2018 Param Aggarwal
63
+
64
+ Permission is hereby granted, free of charge, to any person obtaining a copy
65
+ of this software and associated documentation files (the "Software"), to deal
66
+ in the Software without restriction, including without limitation the rights
67
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
68
+ copies of the Software, and to permit persons to whom the Software is
69
+ furnished to do so, subject to the following conditions:
70
+
71
+ The above copyright notice and this permission notice shall be included in all
72
+ copies or substantial portions of the Software.
73
+
74
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
75
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
76
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
77
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
78
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
79
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
80
+ SOFTWARE.
81
+
82
+
83
+
84
+ ## Breadcrumb and Separator adaptations
85
+
86
+ Breadcrumb adapts shadcn/ui's composable breadcrumb source (https://github.com/shadcn-ui/ui/blob/main/apps/v4/registry/new-york-v4/ui/breadcrumb.tsx), replacing Tailwind, Slot and Lucide with local CSS and native elements. Separator adapts the orientation and decorative semantics from https://github.com/radix-ui/primitives/blob/main/packages/react/separator/src/separator.tsx using a native div; the Radix MIT notice above applies. No new runtime dependencies are required.
87
+
88
+ ## shadcn/ui
89
+
90
+ MIT License
91
+
92
+ Copyright (c) 2023 shadcn
93
+
94
+ Permission is hereby granted, free of charge, to any person obtaining a copy
95
+ of this software and associated documentation files (the "Software"), to deal
96
+ in the Software without restriction, including without limitation the rights
97
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
98
+ copies of the Software, and to permit persons to whom the Software is
99
+ furnished to do so, subject to the following conditions:
100
+
101
+ The above copyright notice and this permission notice shall be included in all
102
+ copies or substantial portions of the Software.
103
+
104
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
105
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
106
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
107
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
108
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
109
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
110
+ SOFTWARE.
111
+
112
+
113
+ ## Leaflet
114
+
115
+ The library stylesheet includes Leaflet CSS and its referenced marker images.
116
+
117
117
  BSD 2-Clause License
118
118
 
119
119
  Copyright (c) 2010-2023, Volodymyr Agafonkin