arxatec-ui 0.1.0 → 0.1.2
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.
- package/README.md +123 -60
- package/dist/arxatec-ui.css +2 -0
- package/dist/components/date_range_picker/index.d.ts +1 -1
- package/dist/components/description_markdown_editor/components/index.d.ts +1 -0
- package/dist/components/description_markdown_editor/components/toolbar_button/index.d.ts +12 -0
- package/dist/components/description_markdown_editor/index.d.ts +17 -0
- package/dist/components/description_markdown_editor/utils/index.d.ts +6 -0
- package/dist/components/form_input/index.d.ts +15 -0
- package/dist/components/form_select/index.d.ts +25 -0
- package/dist/components/form_textarea/index.d.ts +14 -0
- package/dist/components/rich_text_editor/components/document_dialog/index.d.ts +8 -0
- package/dist/components/rich_text_editor/components/index.d.ts +1 -0
- package/dist/components/rich_text_editor/extensions/floating_menu/index.d.ts +4 -0
- package/dist/components/rich_text_editor/extensions/floating_toolbar/index.d.ts +4 -0
- package/dist/components/rich_text_editor/extensions/image/image-extension.d.ts +1 -0
- package/dist/components/rich_text_editor/extensions/image/index.d.ts +1 -0
- package/dist/components/rich_text_editor/extensions/image/tiptap-image.d.ts +2 -0
- package/dist/components/rich_text_editor/extensions/image_placeholder/index.d.ts +17 -0
- package/dist/components/rich_text_editor/extensions/index.d.ts +5 -0
- package/dist/components/rich_text_editor/extensions/search_and_replace/index.d.ts +54 -0
- package/dist/components/rich_text_editor/index.d.ts +13 -0
- package/dist/components/rich_text_editor/lib/tiptap-utils.d.ts +15 -0
- package/dist/components/rich_text_editor/toolbars/alignment/index.d.ts +1 -0
- package/dist/components/rich_text_editor/toolbars/blockquote/index.d.ts +3 -0
- package/dist/components/rich_text_editor/toolbars/bold/index.d.ts +3 -0
- package/dist/components/rich_text_editor/toolbars/bullet_list/index.d.ts +3 -0
- package/dist/components/rich_text_editor/toolbars/code/index.d.ts +3 -0
- package/dist/components/rich_text_editor/toolbars/code_block/index.d.ts +3 -0
- package/dist/components/rich_text_editor/toolbars/color_and_highlight/index.d.ts +1 -0
- package/dist/components/rich_text_editor/toolbars/editor_toolbar/index.d.ts +7 -0
- package/dist/components/rich_text_editor/toolbars/hard_break/index.d.ts +3 -0
- package/dist/components/rich_text_editor/toolbars/headings/index.d.ts +2 -0
- package/dist/components/rich_text_editor/toolbars/horizontal_rule/index.d.ts +3 -0
- package/dist/components/rich_text_editor/toolbars/image_placeholder_toolbar/index.d.ts +3 -0
- package/dist/components/rich_text_editor/toolbars/index.d.ts +22 -0
- package/dist/components/rich_text_editor/toolbars/italic/index.d.ts +3 -0
- package/dist/components/rich_text_editor/toolbars/link/index.d.ts +3 -0
- package/dist/components/rich_text_editor/toolbars/mobile_toolbar_group/index.d.ts +12 -0
- package/dist/components/rich_text_editor/toolbars/ordered_list/index.d.ts +3 -0
- package/dist/components/rich_text_editor/toolbars/redo/index.d.ts +3 -0
- package/dist/components/rich_text_editor/toolbars/search_and_replace_toolbar/index.d.ts +1 -0
- package/dist/components/rich_text_editor/toolbars/strikethrough/index.d.ts +3 -0
- package/dist/components/rich_text_editor/toolbars/toolbar_provider/context.d.ts +7 -0
- package/dist/components/rich_text_editor/toolbars/toolbar_provider/index.d.ts +2 -0
- package/dist/components/rich_text_editor/toolbars/toolbar_provider/toolbar_provider.d.ts +8 -0
- package/dist/components/rich_text_editor/toolbars/underline/index.d.ts +3 -0
- package/dist/components/rich_text_editor/toolbars/undo/index.d.ts +3 -0
- package/dist/components/rich_text_editor/ui/floating-element.d.ts +20 -0
- package/dist/exports/index.d.ts +1 -0
- package/dist/exports/sidebar.d.ts +1 -0
- package/dist/hooks/index.d.ts +2 -0
- package/dist/hooks/use_image_upload/index.d.ts +15 -0
- package/dist/hooks/use_media_query/index.d.ts +1 -0
- package/dist/icons_data-BHKds1ja-BPOjhDPB-CoyEcb95.js +22025 -0
- package/dist/icons_data-BHKds1ja-BPOjhDPB-CoyEcb95.js.map +1 -0
- package/dist/icons_data-BHKds1ja-BPOjhDPB-O5bUR24H-DnafVe1n-Dkf4m7h1.js +22025 -0
- package/dist/icons_data-BHKds1ja-BPOjhDPB-O5bUR24H-DnafVe1n-Dkf4m7h1.js.map +1 -0
- package/dist/icons_data-BHKds1ja-Cqx-AFTA-DUeHq_rP-DVyOjjT-.js +22025 -0
- package/dist/icons_data-BHKds1ja-Cqx-AFTA-DUeHq_rP-DVyOjjT-.js.map +1 -0
- package/dist/icons_data-BHKds1ja-Cqx-AFTA-DUeHq_rP-dXd2WO7V-D1ANykD3-BvOdc1OQ.js +22025 -0
- package/dist/icons_data-BHKds1ja-Cqx-AFTA-DUeHq_rP-dXd2WO7V-D1ANykD3-BvOdc1OQ.js.map +1 -0
- package/dist/icons_data-BHKds1ja-CsVC001U.js +22025 -0
- package/dist/icons_data-BHKds1ja-CsVC001U.js.map +1 -0
- package/dist/icons_data-BHKds1ja-Cwl6KKva-BIDtxJa6-th7L9zrq-BwlsX6V6-DerXw7lM-BZuU3kG0.js +22025 -0
- package/dist/icons_data-BHKds1ja-Cwl6KKva-BIDtxJa6-th7L9zrq-BwlsX6V6-DerXw7lM-BZuU3kG0.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +24688 -2452
- package/dist/index.js.map +1 -1
- package/dist/sheet-BAH_9-wM.js +222 -0
- package/dist/sheet-BAH_9-wM.js.map +1 -0
- package/dist/sidebar.js +347 -0
- package/dist/sidebar.js.map +1 -0
- package/dist/styles.css +25 -0
- package/dist/utilities/index.d.ts +1 -0
- package/dist/utilities/tiptap/index.d.ts +7 -0
- package/package.json +51 -9
package/README.md
CHANGED
|
@@ -1,73 +1,136 @@
|
|
|
1
|
-
#
|
|
1
|
+
# arxatec-ui
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
React component kit for **Arxatec** products: primitives built on **Radix UI**, styling with **Tailwind CSS v4**, animations, and ready-made pieces for forms, data, maps, and more.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## Requirements
|
|
6
6
|
|
|
7
|
-
-
|
|
8
|
-
-
|
|
7
|
+
- **React** 18 or 19 (`react` and `react-dom` are *peer dependencies*).
|
|
8
|
+
- A bundler that supports **ESM** (recommended: **Vite**).
|
|
9
|
+
- **Tailwind CSS v4** and the **`@tailwindcss/vite`** plugin (or an equivalent pipeline that processes the library stylesheet).
|
|
9
10
|
|
|
10
|
-
##
|
|
11
|
+
## Installation
|
|
11
12
|
|
|
12
|
-
|
|
13
|
+
```bash
|
|
14
|
+
npm install arxatec-ui
|
|
15
|
+
```
|
|
13
16
|
|
|
14
|
-
|
|
17
|
+
Make sure React is installed in your app:
|
|
15
18
|
|
|
16
|
-
|
|
19
|
+
```bash
|
|
20
|
+
npm install react react-dom
|
|
21
|
+
```
|
|
17
22
|
|
|
18
|
-
|
|
19
|
-
export default defineConfig([
|
|
20
|
-
globalIgnores(['dist']),
|
|
21
|
-
{
|
|
22
|
-
files: ['**/*.{ts,tsx}'],
|
|
23
|
-
extends: [
|
|
24
|
-
// Other configs...
|
|
23
|
+
## Global styles
|
|
25
24
|
|
|
26
|
-
|
|
27
|
-
tseslint.configs.recommendedTypeChecked,
|
|
28
|
-
// Alternatively, use this for stricter rules
|
|
29
|
-
tseslint.configs.strictTypeChecked,
|
|
30
|
-
// Optionally, add this for stylistic rules
|
|
31
|
-
tseslint.configs.stylisticTypeChecked,
|
|
25
|
+
The package exposes a single stylesheet (theme tokens, Tailwind, shadcn-style utilities):
|
|
32
26
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
parserOptions: {
|
|
37
|
-
project: ['./tsconfig.node.json', './tsconfig.app.json'],
|
|
38
|
-
tsconfigRootDir: import.meta.dirname,
|
|
39
|
-
},
|
|
40
|
-
// other options...
|
|
41
|
-
},
|
|
42
|
-
},
|
|
43
|
-
])
|
|
27
|
+
```ts
|
|
28
|
+
// e.g. in main.tsx or App.tsx
|
|
29
|
+
import "arxatec-ui/styles.css";
|
|
44
30
|
```
|
|
45
31
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
32
|
+
That CSS uses Tailwind v4 features (`@import "tailwindcss"`, `@theme`, etc.). Your build **must process** it with Tailwind (serving the raw file without compiling is not enough).
|
|
33
|
+
|
|
34
|
+
### Vite + Tailwind v4
|
|
35
|
+
|
|
36
|
+
1. Install Tailwind and the official Vite plugin:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
npm install tailwindcss @tailwindcss/vite
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
2. In `vite.config.ts`:
|
|
43
|
+
|
|
44
|
+
```ts
|
|
45
|
+
import tailwindcss from "@tailwindcss/vite";
|
|
46
|
+
import { defineConfig } from "vite";
|
|
47
|
+
|
|
48
|
+
export default defineConfig({
|
|
49
|
+
plugins: [tailwindcss()],
|
|
50
|
+
});
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
3. If production builds **drop classes** that only appear inside `node_modules/arxatec-ui`, point Tailwind at the library’s compiled JS, for example in your entry CSS (Tailwind v4):
|
|
54
|
+
|
|
55
|
+
```css
|
|
56
|
+
@source "../../node_modules/arxatec-ui/dist/**/*.js";
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Adjust the path relative to your CSS file.
|
|
60
|
+
|
|
61
|
+
### Dark mode
|
|
62
|
+
|
|
63
|
+
The theme expects a **`.dark`** ancestor (e.g. `className="dark"` on `<html>`).
|
|
64
|
+
|
|
65
|
+
## Basic usage
|
|
66
|
+
|
|
67
|
+
```tsx
|
|
68
|
+
import { Button, Card, CardHeader, CardTitle, CardContent } from "arxatec-ui";
|
|
69
|
+
|
|
70
|
+
export function Example() {
|
|
71
|
+
return (
|
|
72
|
+
<Card>
|
|
73
|
+
<CardHeader>
|
|
74
|
+
<CardTitle>Hello</CardTitle>
|
|
75
|
+
</CardHeader>
|
|
76
|
+
<CardContent>
|
|
77
|
+
<Button>Action</Button>
|
|
78
|
+
</CardContent>
|
|
79
|
+
</Card>
|
|
80
|
+
);
|
|
81
|
+
}
|
|
73
82
|
```
|
|
83
|
+
|
|
84
|
+
Patterns follow **shadcn**-style APIs (compound components with named exports).
|
|
85
|
+
|
|
86
|
+
## Package exports
|
|
87
|
+
|
|
88
|
+
### Components (overview)
|
|
89
|
+
|
|
90
|
+
- **Forms & text:** `Button`, `Input`, `Textarea`, `Label`, `Checkbox`, `RadioGroup`, `Select`, `Slider`, `Toggle`, `InputOTP`, `FileDropZone`, `LocationInput`, `DateRangePicker`, `Calendar`, `AsyncSelect`, and more.
|
|
91
|
+
- **Surfaces & navigation:** `Card`, `Dialog`, `Sheet`, `Drawer`, `Popover`, `Tooltip`, `DropdownMenu`, `ContextMenu`, `Tabs`, `Breadcrumb`, `Pagination`, `PaginationController`, `Sidebar`, `Command`, `Collapsible`, and more.
|
|
92
|
+
- **Data & feedback:** `Table`, `Badge`, `Skeleton`, `Progress`, `StatusMessage`, `AsyncBoundary`, `AsyncCommandList`, `Chart`, `Carousel`, and more.
|
|
93
|
+
- **Maps:** `MapView`, `MapPicker`.
|
|
94
|
+
- **Extras:** `Toaster` (Sonner), `IconPicker`, `EmojiPicker`, brand icons, animated icons, etc.
|
|
95
|
+
|
|
96
|
+
The full list matches the `export *` entries in [`src/index.ts`](./src/index.ts).
|
|
97
|
+
|
|
98
|
+
### Hooks
|
|
99
|
+
|
|
100
|
+
- **`useDebounce`**
|
|
101
|
+
|
|
102
|
+
### Types
|
|
103
|
+
|
|
104
|
+
- **`PaginationState`**: `{ page, limit, total, total_pages }` (useful with `PaginationController`).
|
|
105
|
+
|
|
106
|
+
### Utilities
|
|
107
|
+
|
|
108
|
+
- **`cn`**: class merging (`clsx` + `tailwind-merge`).
|
|
109
|
+
- Image crop helpers for `ImageCropDialog`.
|
|
110
|
+
- **`classNameControl`**: optional **Storybook** control metadata.
|
|
111
|
+
|
|
112
|
+
## Toasts (Sonner)
|
|
113
|
+
|
|
114
|
+
Render **`Toaster`** once near the app root and call `toast(...)` per the **sonner** docs.
|
|
115
|
+
|
|
116
|
+
## Maps (Leaflet)
|
|
117
|
+
|
|
118
|
+
```ts
|
|
119
|
+
import "leaflet/dist/leaflet.css";
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
## Developing this repo
|
|
123
|
+
|
|
124
|
+
| Command | Description |
|
|
125
|
+
|--------|-------------|
|
|
126
|
+
| `npm run dev` | Vite playground (style guide). |
|
|
127
|
+
| `npm run storybook` | Storybook on port 6006. |
|
|
128
|
+
| `npm run build:lib` | Build `dist/` for npm. |
|
|
129
|
+
| `npm run build` | Playground production build. |
|
|
130
|
+
| `npm run lint` | ESLint. |
|
|
131
|
+
|
|
132
|
+
Publishing to npm requires **2FA**; use `npm publish --otp=...` when prompted.
|
|
133
|
+
|
|
134
|
+
## License
|
|
135
|
+
|
|
136
|
+
MIT. See [LICENSE](./LICENSE).
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
:root{--editor-text-default:#09090b;--editor-text-gray:#71717a;--editor-text-brown:#f97415;--editor-text-orange:#f97015;--editor-text-yellow:#facc14;--editor-text-green:#21c45d;--editor-text-blue:#2463eb;--editor-text-purple:#d8b4fe;--editor-text-pink:#ea3e83;--editor-text-red:#ef4343;--editor-bg-default:#fff;--editor-bg-subtle:#fafafa;--editor-bg-muted:#f4f4f5;--editor-highlight-default:#fafafa;--editor-highlight-gray:#f4f4f5;--editor-highlight-brown:#fff9eb;--editor-highlight-orange:#fff6eb;--editor-highlight-yellow:#fffdeb;--editor-highlight-green:#eefcf3;--editor-highlight-blue:#ecf3fe;--editor-highlight-purple:#f4ebff;--editor-highlight-pink:#fdedf3;--editor-highlight-red:#fdecec;--editor-border-default:#dfdfe2;--editor-border-strong:#a1a1aa;--editor-spacing-1:.25rem;--editor-spacing-2:.5rem;--editor-spacing-3:.75rem;--editor-spacing-4:1rem;--editor-spacing-6:1.5rem;--editor-spacing-8:2rem;--editor-spacing-12:3rem;--editor-spacing-16:4rem;--editor-font-sans:system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--editor-font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;--editor-font-serif:Georgia, Cambria, "Times New Roman", Times, serif;--editor-transition-fast:.15s cubic-bezier(.4, 0, .2, 1);--editor-transition-normal:.2s cubic-bezier(.4, 0, .2, 1);--editor-transition-slow:.3s cubic-bezier(.4, 0, .2, 1);--editor-shadow-sm:0 1px 2px 0 #0000000d;--editor-shadow-md:0 4px 6px -1px #0000001a, 0 2px 4px -2px #0000001a;--editor-shadow-lg:0 10px 15px -3px #0000001a, 0 4px 6px -4px #0000001a}.dark{--editor-text-default:#fafafa;--editor-text-gray:#a1a1aa;--editor-text-brown:#f97415;--editor-text-orange:#f97015;--editor-text-yellow:#facc14;--editor-text-green:#21c45d;--editor-text-blue:#2463eb;--editor-text-purple:#d8b4fe;--editor-text-pink:#ea3e83;--editor-text-red:#ef4343;--editor-bg-default:#09090b;--editor-bg-subtle:#27272a;--editor-bg-muted:#3f3f46;--editor-highlight-default:#27272a;--editor-highlight-gray:#3f3f46;--editor-highlight-brown:#322401;--editor-highlight-orange:#331c00;--editor-highlight-yellow:#332e00;--editor-highlight-green:#072c15;--editor-highlight-blue:#021431;--editor-highlight-purple:#190132;--editor-highlight-pink:#2e0515;--editor-highlight-red:#2f0404;--editor-border-default:#3f3f46;--editor-border-strong:#a1a1aa}.ProseMirror{caret-color:var(--editor-text-default);padding:var(--editor-spacing-16) var(--editor-spacing-8);max-width:90ch;font-family:var(--editor-font-sans);color:var(--editor-text-default);text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;outline:none;min-height:100vh;margin:0 auto;position:relative}.is-expanded .ProseMirror{max-width:1050px}.ProseMirror:focus{box-shadow:none;outline:none}.ProseMirror .selection{background-color:var(--editor-highlight-blue)}.ProseMirror ::selection{background-color:var(--editor-highlight-blue)}.ProseMirror>.react-renderer{margin:var(--editor-spacing-12) 0;transition:all var(--editor-transition-normal)}.ProseMirror>.react-renderer:first-child{margin-top:0}.ProseMirror>.react-renderer:last-child{margin-bottom:0}.ProseMirror p{margin:var(--editor-spacing-4) 0;color:var(--editor-text-default);font-size:1.125rem;line-height:1.75}.ProseMirror>p{margin:var(--editor-spacing-6) 0}.ProseMirror h1,.ProseMirror h2,.ProseMirror h3,.ProseMirror h4{font-family:var(--editor-font-sans);letter-spacing:-.025em;color:var(--editor-text-default);scroll-margin-top:var(--editor-spacing-16);font-weight:700;line-height:1.2}.ProseMirror h1{margin:var(--editor-spacing-8) 0 var(--editor-spacing-4);font-size:2.5rem}.ProseMirror h2{margin:var(--editor-spacing-8) 0 var(--editor-spacing-4);font-size:2rem}.ProseMirror h3{margin:var(--editor-spacing-6) 0 var(--editor-spacing-3);font-size:1.5rem}.ProseMirror h4{margin:var(--editor-spacing-4) 0 var(--editor-spacing-2);font-size:1.25rem}.ProseMirror a{color:var(--editor-text-blue);cursor:pointer;text-underline-offset:.2em;transition:all var(--editor-transition-fast);text-decoration:underline;text-decoration-thickness:.1em}.ProseMirror a:hover{color:var(--editor-text-blue);text-decoration-thickness:.2em}.ProseMirror code{font-family:var(--editor-font-mono);background-color:var(--editor-bg-muted);color:var(--editor-text-default);border:1px solid var(--editor-border-default);border-radius:4px;padding:.2em .4em;font-size:.9em}.ProseMirror pre{margin:var(--editor-spacing-6) 0;padding:var(--editor-spacing-4);background-color:var(--editor-bg-subtle);border:1px solid var(--editor-border-default);border-radius:8px;overflow-x:auto}.ProseMirror pre code{color:var(--editor-text-default);background-color:#0000;border:none;padding:0;font-size:.875rem;line-height:1.7}.ProseMirror blockquote{margin:var(--editor-spacing-6) 0;padding:var(--editor-spacing-4) var(--editor-spacing-6);border-left:4px solid var(--editor-border-strong);color:var(--editor-text-gray);background-color:var(--editor-bg-subtle);border-radius:0 8px 8px 0;font-style:italic}.ProseMirror ul,.ProseMirror ol{margin:var(--editor-spacing-4) 0;padding-left:var(--editor-spacing-6)}.ProseMirror li{margin:var(--editor-spacing-2) 0;padding-left:var(--editor-spacing-2)}.ProseMirror ul{list-style-type:disc}.ProseMirror ul ul{list-style-type:circle}.ProseMirror ul ul ul{list-style-type:square}.ProseMirror ol{list-style-type:decimal}.ProseMirror ol ol{list-style-type:lower-alpha}.ProseMirror ol ol ol{list-style-type:lower-roman}.ProseMirror table{border-collapse:separate;border-spacing:0;width:100%;margin:var(--editor-spacing-6) 0;border:1px solid var(--editor-border-default);border-radius:8px;overflow:hidden}.ProseMirror th{background-color:var(--editor-bg-subtle);text-align:left;padding:var(--editor-spacing-3) var(--editor-spacing-4);border-bottom:2px solid var(--editor-border-default);font-weight:600}.ProseMirror td{padding:var(--editor-spacing-3) var(--editor-spacing-4);border-bottom:1px solid var(--editor-border-default);transition:background-color var(--editor-transition-fast)}.ProseMirror tr:last-child td{border-bottom:none}.ProseMirror tr:hover td{background-color:var(--editor-bg-subtle)}.ProseMirror img{border:1px solid var(--editor-border-default);max-width:100%;height:auto;box-shadow:var(--editor-shadow-sm);transition:all var(--editor-transition-normal);border-radius:8px;display:block}.ProseMirror img:hover{box-shadow:var(--editor-shadow-lg);transform:translateY(-2px)}.ProseMirror .image-wrapper{margin:var(--editor-spacing-4) 0;flex-direction:column;display:flex}.ProseMirror .image-wrapper.align-left{align-items:flex-start}.ProseMirror .image-wrapper.align-center{align-items:center}.ProseMirror .image-wrapper.align-right{align-items:flex-end}.ProseMirror hr{margin:var(--editor-spacing-8) 0;border:none;border-top:2px solid var(--editor-border-default)}.floating-menu{background-color:var(--editor-bg-default);border:1px solid var(--editor-border-default);box-shadow:var(--editor-shadow-lg);padding:var(--editor-spacing-1);gap:var(--editor-spacing-1);animation:fadeIn var(--editor-transition-normal);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-radius:8px;align-items:center;display:flex}.toolbar-button{height:2.25rem;padding:0 var(--editor-spacing-3);transition:all var(--editor-transition-fast);color:var(--editor-text-default);background-color:#0000;border:1px solid #0000;border-radius:6px;justify-content:center;align-items:center;font-size:.875rem;font-weight:500;display:inline-flex}.toolbar-button:hover{background-color:var(--editor-bg-subtle);color:var(--editor-text-default)}.toolbar-button:focus-visible{box-shadow:0 0 0 2px var(--editor-border-strong);outline:none}.toolbar-button:disabled{opacity:.5;cursor:not-allowed}.toolbar-button.active{background-color:var(--editor-bg-muted);color:var(--editor-text-blue)}@media (width<=640px){.ProseMirror{padding:var(--editor-spacing-8) var(--editor-spacing-4)}.ProseMirror h1{font-size:2rem}.ProseMirror h2{font-size:1.75rem}.ProseMirror h3{font-size:1.5rem}.ProseMirror h4{font-size:1.25rem}.ProseMirror p{font-size:1rem}}@keyframes fadeIn{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}@media print{.ProseMirror{max-width:none;padding:0}.floating-menu,.toolbar-button{display:none}}.is-editor-empty:before{color:var(--editor-text-gray);content:attr(data-placeholder);float:left;pointer-events:none;height:0}
|
|
2
|
+
/*$vite$:1*/
|
|
@@ -8,4 +8,4 @@ interface Props {
|
|
|
8
8
|
optional?: boolean;
|
|
9
9
|
}
|
|
10
10
|
export declare const DateRangePicker: ({ startDate, dueDate, onStartDateChange, onDueDateChange, errorMessage, label, optional, }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
11
|
-
export {};
|
|
11
|
+
export { DateDisplay, DateInput, DatePanel } from './components';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './toolbar_button';
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Editor } from '@tiptap/react';
|
|
2
|
+
interface Props {
|
|
3
|
+
editor: Editor | null;
|
|
4
|
+
onClick: (editor: Editor) => void;
|
|
5
|
+
isActive: (editor: Editor) => boolean;
|
|
6
|
+
canDo: (editor: Editor) => boolean;
|
|
7
|
+
icon: React.ElementType;
|
|
8
|
+
label: string;
|
|
9
|
+
className?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare const ToolbarButton: React.FC<Props>;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface DescriptionMarkdownEditorRef {
|
|
2
|
+
insertContent: (text: string) => void;
|
|
3
|
+
clearContent: () => void;
|
|
4
|
+
}
|
|
5
|
+
interface DescriptionMarkdownEditorProps {
|
|
6
|
+
value: string;
|
|
7
|
+
onChange: (markdown: string) => void;
|
|
8
|
+
placeholder?: string;
|
|
9
|
+
onSubmit?: () => void;
|
|
10
|
+
onEscape?: () => void;
|
|
11
|
+
className?: string;
|
|
12
|
+
editorClassName?: string;
|
|
13
|
+
disabled?: boolean;
|
|
14
|
+
footer?: React.ReactNode;
|
|
15
|
+
}
|
|
16
|
+
export declare const DescriptionMarkdownEditor: import('react').ForwardRefExoticComponent<DescriptionMarkdownEditorProps & import('react').RefAttributes<DescriptionMarkdownEditorRef>>;
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function parseMarkdownToHtml(markdown: string): string;
|
|
2
|
+
/**
|
|
3
|
+
* Párrafos vacíos no sobreviven al ciclo HTML → turndown → marked.
|
|
4
|
+
* Sustituirlos por ZWCSP permite round‑trip estable del markdown persistido.
|
|
5
|
+
*/
|
|
6
|
+
export declare function htmlForMarkdownExport(html: string): string;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { FieldErrors, FieldValues, Path, UseFormRegister } from 'react-hook-form';
|
|
2
|
+
interface Props<T extends FieldValues> {
|
|
3
|
+
label?: string;
|
|
4
|
+
name: Path<T>;
|
|
5
|
+
type?: string;
|
|
6
|
+
placeholder?: string;
|
|
7
|
+
register: UseFormRegister<T>;
|
|
8
|
+
errors: FieldErrors<T>;
|
|
9
|
+
className?: string;
|
|
10
|
+
optional?: boolean;
|
|
11
|
+
disabled?: boolean;
|
|
12
|
+
size?: "default" | "sm";
|
|
13
|
+
}
|
|
14
|
+
export declare function FormInput<T extends FieldValues>({ label, name, type, placeholder, register, errors, className, optional, disabled, size, }: Props<T>): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
2
|
+
import { Control, FieldErrors, FieldValues } from 'react-hook-form';
|
|
3
|
+
interface FormSelectProps {
|
|
4
|
+
name: string;
|
|
5
|
+
label: string;
|
|
6
|
+
control: Control<any & FieldValues>;
|
|
7
|
+
options: {
|
|
8
|
+
value: string;
|
|
9
|
+
label: string;
|
|
10
|
+
}[];
|
|
11
|
+
placeholder?: string;
|
|
12
|
+
className?: string;
|
|
13
|
+
errors?: FieldErrors<any & FieldValues>;
|
|
14
|
+
renderItem?: (option: {
|
|
15
|
+
value: string;
|
|
16
|
+
label: string;
|
|
17
|
+
}) => ReactNode;
|
|
18
|
+
children?: (option: {
|
|
19
|
+
value: string;
|
|
20
|
+
label: string;
|
|
21
|
+
}) => ReactNode;
|
|
22
|
+
size?: "default" | "sm";
|
|
23
|
+
}
|
|
24
|
+
export declare const FormSelect: React.FC<FormSelectProps>;
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { FieldErrors, FieldValues, Path, UseFormRegister } from 'react-hook-form';
|
|
2
|
+
interface Props<T extends FieldValues> extends React.ComponentProps<"textarea"> {
|
|
3
|
+
label?: string;
|
|
4
|
+
name: Path<T>;
|
|
5
|
+
type?: string;
|
|
6
|
+
placeholder?: string;
|
|
7
|
+
register: UseFormRegister<T>;
|
|
8
|
+
errors: FieldErrors<T>;
|
|
9
|
+
className?: string;
|
|
10
|
+
optional?: boolean;
|
|
11
|
+
autoFocus?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare function FormTextarea<T extends FieldValues>({ label, name, placeholder, register, errors, className, optional, autoFocus, ...props }: Props<T>): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
interface Props {
|
|
2
|
+
open: boolean;
|
|
3
|
+
onOpenChange: (open: boolean) => void;
|
|
4
|
+
onSave: (name: string) => Promise<void>;
|
|
5
|
+
isSaving?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function SaveDocumentNameDialog({ open, onOpenChange, onSave, isSaving, }: Props): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './document_dialog';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const ImageExtension: import('@tiptap/core').Node<import('@tiptap/extension-image').ImageOptions, any>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { ImageExtension } from './image-extension';
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Node } from '@tiptap/react';
|
|
2
|
+
export interface ImagePlaceholderOptions {
|
|
3
|
+
HTMLAttributes: Record<string, unknown>;
|
|
4
|
+
onUpload?: (url: string) => void;
|
|
5
|
+
onError?: (error: string) => void;
|
|
6
|
+
}
|
|
7
|
+
declare module "@tiptap/core" {
|
|
8
|
+
interface Commands<ReturnType> {
|
|
9
|
+
imagePlaceholder: {
|
|
10
|
+
/**
|
|
11
|
+
* Inserts an image placeholder
|
|
12
|
+
*/
|
|
13
|
+
insertImagePlaceholder: () => ReturnType;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export declare const ImagePlaceholder: Node<ImagePlaceholderOptions, any>;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Extension, Range } from '@tiptap/core';
|
|
2
|
+
import { PluginKey } from '@tiptap/pm/state';
|
|
3
|
+
declare module "@tiptap/core" {
|
|
4
|
+
interface Commands<ReturnType> {
|
|
5
|
+
search: {
|
|
6
|
+
/**
|
|
7
|
+
* @description Set search term in extension.
|
|
8
|
+
*/
|
|
9
|
+
setSearchTerm: (searchTerm: string) => ReturnType;
|
|
10
|
+
/**
|
|
11
|
+
* @description Set replace term in extension.
|
|
12
|
+
*/
|
|
13
|
+
setReplaceTerm: (replaceTerm: string) => ReturnType;
|
|
14
|
+
/**
|
|
15
|
+
* @description Replace first instance of search result with given replace term.
|
|
16
|
+
*/
|
|
17
|
+
replace: () => ReturnType;
|
|
18
|
+
/**
|
|
19
|
+
* @description Replace all instances of search result with given replace term.
|
|
20
|
+
*/
|
|
21
|
+
replaceAll: () => ReturnType;
|
|
22
|
+
/**
|
|
23
|
+
* @description Select the next search result.
|
|
24
|
+
*/
|
|
25
|
+
selectNextResult: () => ReturnType;
|
|
26
|
+
/**
|
|
27
|
+
* @description Select the previous search result.
|
|
28
|
+
*/
|
|
29
|
+
selectPreviousResult: () => ReturnType;
|
|
30
|
+
/**
|
|
31
|
+
* @description Set case sensitivity in extension.
|
|
32
|
+
*/
|
|
33
|
+
setCaseSensitive: (caseSensitive: boolean) => ReturnType;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export declare const searchAndReplacePluginKey: PluginKey<any>;
|
|
38
|
+
export interface SearchAndReplaceOptions {
|
|
39
|
+
searchResultClass: string;
|
|
40
|
+
selectedResultClass: string;
|
|
41
|
+
disableRegex: boolean;
|
|
42
|
+
}
|
|
43
|
+
export interface SearchAndReplaceStorage {
|
|
44
|
+
searchTerm: string;
|
|
45
|
+
replaceTerm: string;
|
|
46
|
+
results: Range[];
|
|
47
|
+
lastSearchTerm: string;
|
|
48
|
+
selectedResult: number;
|
|
49
|
+
lastSelectedResult: number;
|
|
50
|
+
caseSensitive: boolean;
|
|
51
|
+
lastCaseSensitiveState: boolean;
|
|
52
|
+
}
|
|
53
|
+
export declare const SearchAndReplace: Extension<SearchAndReplaceOptions, SearchAndReplaceStorage>;
|
|
54
|
+
export default SearchAndReplace;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { JSONContent } from '@tiptap/core';
|
|
2
|
+
export interface RichTextEditorRef {
|
|
3
|
+
save: () => Promise<void>;
|
|
4
|
+
isDirty: boolean;
|
|
5
|
+
fileId: string | undefined;
|
|
6
|
+
}
|
|
7
|
+
export declare const RichTextEditor: import('react').ForwardRefExoticComponent<{
|
|
8
|
+
className?: string;
|
|
9
|
+
fileId?: string;
|
|
10
|
+
/** Si se define, el botón "Guardar" persistirá el documento vía este callback. */
|
|
11
|
+
onSave?: (schema: JSONContent) => Promise<void>;
|
|
12
|
+
onSaveSuccess?: () => void;
|
|
13
|
+
} & import('react').RefAttributes<RichTextEditorRef>>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Editor } from '@tiptap/core';
|
|
2
|
+
import { Selection } from '@tiptap/pm/state';
|
|
3
|
+
/**
|
|
4
|
+
* Gets the bounding rectangle of the current selection in the editor.
|
|
5
|
+
* Uses the native DOM selection for more reliable results with portaled elements.
|
|
6
|
+
*/
|
|
7
|
+
export declare const getSelectionBoundingRect: (editor: Editor) => DOMRect | null;
|
|
8
|
+
/**
|
|
9
|
+
* Checks if the current selection is valid for showing floating elements.
|
|
10
|
+
*/
|
|
11
|
+
export declare const isSelectionValid: (editor: Editor, selection?: Selection, excludedNodeTypes?: string[]) => boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Checks if the current text selection is valid for editing.
|
|
14
|
+
*/
|
|
15
|
+
export declare const isTextSelectionValid: (editor: Editor) => boolean;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const AlignmentToolbar: () => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const ColorHighlightToolbar: () => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Editor } from '@tiptap/core';
|
|
2
|
+
export declare const EditorToolbar: ({ editor, isExpanded, onToggleExpand, rightContent, }: {
|
|
3
|
+
editor: Editor;
|
|
4
|
+
isExpanded?: boolean;
|
|
5
|
+
onToggleExpand?: () => void;
|
|
6
|
+
rightContent?: React.ReactNode;
|
|
7
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export * from './alignment';
|
|
2
|
+
export * from './blockquote';
|
|
3
|
+
export * from './bold';
|
|
4
|
+
export * from './bullet_list';
|
|
5
|
+
export * from './code';
|
|
6
|
+
export * from './code_block';
|
|
7
|
+
export * from './color_and_highlight';
|
|
8
|
+
export * from './editor_toolbar';
|
|
9
|
+
export * from './hard_break';
|
|
10
|
+
export * from './headings';
|
|
11
|
+
export * from './horizontal_rule';
|
|
12
|
+
export * from './image_placeholder_toolbar';
|
|
13
|
+
export * from './italic';
|
|
14
|
+
export * from './link';
|
|
15
|
+
export * from './mobile_toolbar_group';
|
|
16
|
+
export * from './ordered_list';
|
|
17
|
+
export * from './redo';
|
|
18
|
+
export * from './search_and_replace_toolbar';
|
|
19
|
+
export * from './strikethrough';
|
|
20
|
+
export * from './toolbar_provider';
|
|
21
|
+
export * from './underline';
|
|
22
|
+
export * from './undo';
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
interface MobileToolbarGroupProps {
|
|
3
|
+
label: string;
|
|
4
|
+
children: React.ReactNode;
|
|
5
|
+
className?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare const MobileToolbarGroup: ({ label, children, className, }: MobileToolbarGroupProps) => import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export declare const MobileToolbarItem: ({ children, active, onClick, closeDrawer, ...props }: React.ButtonHTMLAttributes<HTMLButtonElement> & {
|
|
9
|
+
active?: boolean;
|
|
10
|
+
closeDrawer?: () => void;
|
|
11
|
+
}) => import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function SearchAndReplaceToolbar(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Editor } from '@tiptap/react';
|
|
2
|
+
import { default as React } from 'react';
|
|
3
|
+
export interface ToolbarContextProps {
|
|
4
|
+
editor: Editor;
|
|
5
|
+
}
|
|
6
|
+
export declare const ToolbarContext: React.Context<ToolbarContextProps | null>;
|
|
7
|
+
export declare const useToolbar: () => ToolbarContextProps;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Editor } from '@tiptap/react';
|
|
2
|
+
import { default as React } from 'react';
|
|
3
|
+
interface ToolbarProviderProps {
|
|
4
|
+
editor: Editor;
|
|
5
|
+
children: React.ReactNode;
|
|
6
|
+
}
|
|
7
|
+
export declare const ToolbarProvider: ({ editor, children }: ToolbarProviderProps) => import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export {};
|