@tutti-os/ui-system 0.0.8 → 0.0.9
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/AGENTS.md +3 -3
- package/README.md +11 -11
- package/agent/install-skill.mjs +8 -8
- package/agent/{nextop-ui-system → tutti-ui-system}/SKILL.md +4 -4
- package/agent/{nextop-ui-system → tutti-ui-system}/scripts/create-business-preview.mjs +8 -8
- package/dist/{chunk-GX3U3V36.js → chunk-K57FUMQG.js} +11 -11
- package/dist/chunk-K57FUMQG.js.map +1 -0
- package/dist/{chunk-XHA7R2WC.js → chunk-RKQ4FPGY.js} +4 -4
- package/dist/chunk-RKQ4FPGY.js.map +1 -0
- package/dist/{chunk-QXXI5OBT.js → chunk-YIAY5DKS.js} +2 -2
- package/dist/chunk-YIAY5DKS.js.map +1 -0
- package/dist/components/index.js +1 -1
- package/dist/date-format.d.ts +5 -5
- package/dist/date-format.js +7 -7
- package/dist/dev-vite.d.ts +3 -3
- package/dist/dev-vite.js +6 -6
- package/dist/dev-vite.js.map +1 -1
- package/dist/icons/index.d.ts +2 -2
- package/dist/icons/index.js +3 -3
- package/dist/index.d.ts +2 -2
- package/dist/index.js +11 -11
- package/dist/metadata/components.json +5 -5
- package/dist/metadata/components.schema.json +2 -2
- package/dist/metadata/index.js +5 -5
- package/dist/metadata/index.js.map +1 -1
- package/dist/styles/base.css +5 -5
- package/package.json +3 -3
- package/ui-system.md +18 -18
- package/dist/chunk-GX3U3V36.js.map +0 -1
- package/dist/chunk-QXXI5OBT.js.map +0 -1
- package/dist/chunk-XHA7R2WC.js.map +0 -1
- /package/agent/{nextop-ui-system → tutti-ui-system}/references/extract-base-component.md +0 -0
- /package/agent/{nextop-ui-system → tutti-ui-system}/references/maintain-inventory.md +0 -0
- /package/agent/{nextop-ui-system → tutti-ui-system}/references/promote-business-component.md +0 -0
- /package/agent/{nextop-ui-system → tutti-ui-system}/references/use-existing-component.md +0 -0
package/AGENTS.md
CHANGED
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
This file applies to `packages/ui/system/*`.
|
|
6
6
|
|
|
7
7
|
`packages/ui/system` is the source package for `@tutti-os/ui-system`, the
|
|
8
|
-
shared
|
|
8
|
+
shared Tutti UI component library. It owns shared CSS tokens, theme styles,
|
|
9
9
|
icon exports, presentation primitives, reusable host-agnostic business display
|
|
10
10
|
components, component metadata, storyboard inventory, and the bundled
|
|
11
|
-
`
|
|
11
|
+
`tutti-ui-system` agent skill.
|
|
12
12
|
|
|
13
13
|
Before changing components, icons, metadata, styles, storyboard examples, or
|
|
14
14
|
the bundled skill, read `ui-system.md`.
|
|
@@ -83,7 +83,7 @@ Rules:
|
|
|
83
83
|
- build primitives for a calm workbench shell, not for marketing-card theatrics
|
|
84
84
|
- every public component, icon, utility, or style entry must have metadata with
|
|
85
85
|
a stable readable `id` and `layer`
|
|
86
|
-
- use the single `
|
|
86
|
+
- use the single `tutti-ui-system` skill for component reuse, extraction,
|
|
87
87
|
base/business classification, metadata, and storyboard work
|
|
88
88
|
|
|
89
89
|
## React Component Splitting Rules
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @tutti-os/ui-system
|
|
2
2
|
|
|
3
|
-
Shared
|
|
3
|
+
Shared Tutti UI tokens, styles, icons, and low-level React primitives.
|
|
4
4
|
|
|
5
5
|
This package is published to npm as `@tutti-os/ui-system`.
|
|
6
6
|
|
|
@@ -21,7 +21,7 @@ External consumers should install the package normally:
|
|
|
21
21
|
pnpm add @tutti-os/ui-system
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
-
For local source sync from a
|
|
24
|
+
For local source sync from a Tutti checkout, start the UI system dev server:
|
|
25
25
|
|
|
26
26
|
```bash
|
|
27
27
|
pnpm --filter @tutti-os/ui-system dev:server
|
|
@@ -30,22 +30,22 @@ pnpm --filter @tutti-os/ui-system dev:server
|
|
|
30
30
|
Then add the Vite plugin in the external app:
|
|
31
31
|
|
|
32
32
|
```ts
|
|
33
|
-
import {
|
|
33
|
+
import { tuttiUISystemDev } from "@tutti-os/ui-system/dev-vite";
|
|
34
34
|
|
|
35
35
|
export default defineConfig({
|
|
36
|
-
plugins: [
|
|
36
|
+
plugins: [tuttiUISystemDev()]
|
|
37
37
|
});
|
|
38
38
|
```
|
|
39
39
|
|
|
40
40
|
When the dev server is reachable, the plugin mirrors the allowed UI-system
|
|
41
|
-
source and skill-support files into `.
|
|
41
|
+
source and skill-support files into `.tutti-ui-system-dev/` and aliases the
|
|
42
42
|
stable package entrypoints to that cache. When the dev server is unavailable,
|
|
43
43
|
resolution falls back to the installed package in `node_modules`.
|
|
44
44
|
|
|
45
45
|
Add the generated cache to the external app's `.gitignore`:
|
|
46
46
|
|
|
47
47
|
```text
|
|
48
|
-
.
|
|
48
|
+
.tutti-ui-system-dev/
|
|
49
49
|
```
|
|
50
50
|
|
|
51
51
|
If the external app uses Tailwind CSS, include both the installed package output
|
|
@@ -53,7 +53,7 @@ and the generated dev cache in the app's Tailwind source scan:
|
|
|
53
53
|
|
|
54
54
|
```css
|
|
55
55
|
@source "../node_modules/@tutti-os/ui-system/dist";
|
|
56
|
-
@source "../.
|
|
56
|
+
@source "../.tutti-ui-system-dev";
|
|
57
57
|
```
|
|
58
58
|
|
|
59
59
|
## Agent Usage
|
|
@@ -65,7 +65,7 @@ import { uiSystemMetadata } from "@tutti-os/ui-system/metadata";
|
|
|
65
65
|
```
|
|
66
66
|
|
|
67
67
|
When promoting business UI into this package, use the bundled
|
|
68
|
-
`agent/
|
|
68
|
+
`agent/tutti-ui-system/SKILL.md` skill when it is available. In the source
|
|
69
69
|
checkout, also read `AGENTS.md`, `ui-system.md`, and
|
|
70
70
|
`docs/conventions/desktop-visual-language.md`. The durable rules are:
|
|
71
71
|
|
|
@@ -82,16 +82,16 @@ External repositories can install the bundled skill into their local Codex
|
|
|
82
82
|
skill directory with one command:
|
|
83
83
|
|
|
84
84
|
```bash
|
|
85
|
-
pnpm exec
|
|
85
|
+
pnpm exec tutti-ui-system-install-skill
|
|
86
86
|
```
|
|
87
87
|
|
|
88
88
|
This copies the package skill into:
|
|
89
89
|
|
|
90
90
|
```text
|
|
91
|
-
.codex/skills/
|
|
91
|
+
.codex/skills/tutti-ui-system/SKILL.md
|
|
92
92
|
```
|
|
93
93
|
|
|
94
|
-
When `.
|
|
94
|
+
When `.tutti-ui-system-dev/` is present, the installer prefers the synced
|
|
95
95
|
source checkout so the installed skill and bundled UI-system rules stay aligned
|
|
96
96
|
with the current local UI-system source. The installer does not overwrite a
|
|
97
97
|
locally modified skill unless `--force` is provided.
|
package/agent/install-skill.mjs
CHANGED
|
@@ -14,8 +14,8 @@ import { dirname, join, relative, resolve } from "node:path";
|
|
|
14
14
|
import { fileURLToPath } from "node:url";
|
|
15
15
|
|
|
16
16
|
const packageRoot = dirname(dirname(fileURLToPath(import.meta.url)));
|
|
17
|
-
const skillName = "
|
|
18
|
-
const devCacheDirectoryName = ".
|
|
17
|
+
const skillName = "tutti-ui-system";
|
|
18
|
+
const devCacheDirectoryName = ".tutti-ui-system-dev";
|
|
19
19
|
const companionFiles = ["AGENTS.md", "ui-system.md"];
|
|
20
20
|
|
|
21
21
|
const options = parseArgs(process.argv.slice(2));
|
|
@@ -48,7 +48,7 @@ if (await pathExists(targetDirectory)) {
|
|
|
48
48
|
if (!options.force) {
|
|
49
49
|
if (await directoriesMatch(sourceRoot, sourceDirectory, targetDirectory)) {
|
|
50
50
|
console.log(
|
|
51
|
-
`
|
|
51
|
+
`tutti-ui-system skill already configured at ${targetDirectory}`
|
|
52
52
|
);
|
|
53
53
|
process.exit(0);
|
|
54
54
|
}
|
|
@@ -77,9 +77,9 @@ await Promise.all(
|
|
|
77
77
|
)
|
|
78
78
|
);
|
|
79
79
|
|
|
80
|
-
console.log(`Installed
|
|
80
|
+
console.log(`Installed tutti-ui-system skill to ${targetDirectory}`);
|
|
81
81
|
console.log(
|
|
82
|
-
"Agents can now load it from .codex/skills/
|
|
82
|
+
"Agents can now load it from .codex/skills/tutti-ui-system/SKILL.md"
|
|
83
83
|
);
|
|
84
84
|
|
|
85
85
|
function parseArgs(args) {
|
|
@@ -119,13 +119,13 @@ function parseArgs(args) {
|
|
|
119
119
|
}
|
|
120
120
|
|
|
121
121
|
function printHelp() {
|
|
122
|
-
console.log(`Usage:
|
|
122
|
+
console.log(`Usage: tutti-ui-system-install-skill [options]
|
|
123
123
|
|
|
124
|
-
Copies the bundled
|
|
124
|
+
Copies the bundled Tutti UI System skill into the current repository.
|
|
125
125
|
|
|
126
126
|
Options:
|
|
127
127
|
--cwd <path> Repository root to configure. Defaults to the current directory.
|
|
128
|
-
--force Replace an existing .codex/skills/
|
|
128
|
+
--force Replace an existing .codex/skills/tutti-ui-system directory.
|
|
129
129
|
-h, --help Show this help message.`);
|
|
130
130
|
}
|
|
131
131
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: tutti-ui-system
|
|
3
3
|
description: Use when working with @tutti-os/ui-system components, replacing local UI with shared components, querying component ids or metadata, promoting UI into shared base or business components, or maintaining UI-system storyboard inventory.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# Tutti UI System
|
|
7
7
|
|
|
8
8
|
Use this skill as the single entrypoint for `@tutti-os/ui-system` component
|
|
9
9
|
reuse, extraction, promotion, metadata, and storyboard work.
|
|
@@ -150,8 +150,8 @@ Explicitly check and report all of these before completion:
|
|
|
150
150
|
- migrated consumers no longer depend on a separate visual token system for the
|
|
151
151
|
promoted surface
|
|
152
152
|
|
|
153
|
-
Run the
|
|
154
|
-
adapted from frontend design review practice but constrained to
|
|
153
|
+
Run the Tutti promotion review gate before reporting completion. The gate is
|
|
154
|
+
adapted from frontend design review practice but constrained to Tutti's dense
|
|
155
155
|
workbench product language:
|
|
156
156
|
|
|
157
157
|
- Frictionless: the migrated consumer preserves the original task path, keeps a
|
|
@@ -35,7 +35,7 @@ const componentId = normalizeComponentId(options.componentId);
|
|
|
35
35
|
const componentName = normalizeComponentName(options.componentName);
|
|
36
36
|
const serverUrl = options.serverUrl || "http://127.0.0.1:4100";
|
|
37
37
|
const outputDirectory = resolve(
|
|
38
|
-
options.outDir || join(tmpdir(), `
|
|
38
|
+
options.outDir || join(tmpdir(), `tutti-ui-system-preview-${componentId}`)
|
|
39
39
|
);
|
|
40
40
|
const stateMatrix = normalizeStateMatrix(
|
|
41
41
|
JSON.parse(await readFile(resolve(options.stateMatrixPath), "utf8"))
|
|
@@ -164,7 +164,7 @@ Options:
|
|
|
164
164
|
--component-id <id> Stable kebab-case component id.
|
|
165
165
|
--component-name <Name> Proposed React export name.
|
|
166
166
|
--state-matrix <path> JSON file with an array of states or { "states": [] }.
|
|
167
|
-
--out-dir <path> Output directory. Defaults to $TMPDIR/
|
|
167
|
+
--out-dir <path> Output directory. Defaults to $TMPDIR/tutti-ui-system-preview-<id>.
|
|
168
168
|
--server-url <url> UI-system dev server URL. Defaults to http://127.0.0.1:4100.
|
|
169
169
|
--force Replace an existing output directory.
|
|
170
170
|
-h, --help Show this help message.
|
|
@@ -275,7 +275,7 @@ async function resolvePackageRoot(sourceCandidate) {
|
|
|
275
275
|
entrypoint = cwdRequire.resolve("@tutti-os/ui-system");
|
|
276
276
|
} catch {
|
|
277
277
|
throw new Error(
|
|
278
|
-
"Unable to resolve @tutti-os/ui-system. Run this from a
|
|
278
|
+
"Unable to resolve @tutti-os/ui-system. Run this from a Tutti checkout " +
|
|
279
279
|
"or a project with @tutti-os/ui-system installed."
|
|
280
280
|
);
|
|
281
281
|
}
|
|
@@ -333,7 +333,7 @@ async function pathExists(path) {
|
|
|
333
333
|
function packageJson(componentId) {
|
|
334
334
|
return `${JSON.stringify(
|
|
335
335
|
{
|
|
336
|
-
name: `
|
|
336
|
+
name: `tutti-ui-system-preview-${componentId}`,
|
|
337
337
|
private: true,
|
|
338
338
|
type: "module",
|
|
339
339
|
scripts: {
|
|
@@ -377,11 +377,11 @@ function indexHtml(componentName) {
|
|
|
377
377
|
function viteConfig(serverUrl) {
|
|
378
378
|
return `import react from "@vitejs/plugin-react";
|
|
379
379
|
import { defineConfig } from "vite";
|
|
380
|
-
import {
|
|
380
|
+
import { tuttiUISystemDev } from "@tutti-os/ui-system/dev-vite";
|
|
381
381
|
|
|
382
382
|
export default defineConfig({
|
|
383
383
|
plugins: [
|
|
384
|
-
|
|
384
|
+
tuttiUISystemDev({ serverUrl: ${JSON.stringify(serverUrl)} }),
|
|
385
385
|
react()
|
|
386
386
|
],
|
|
387
387
|
server: {
|
|
@@ -514,7 +514,7 @@ export function Preview() {
|
|
|
514
514
|
return (
|
|
515
515
|
<main className="preview-shell">
|
|
516
516
|
<header className="preview-header">
|
|
517
|
-
<p className="preview-kicker">
|
|
517
|
+
<p className="preview-kicker">Tutti UI-system business promotion</p>
|
|
518
518
|
<h1>${componentName} Preview</h1>
|
|
519
519
|
<p>
|
|
520
520
|
Review the state coverage, visual behavior, props boundary, and
|
|
@@ -556,7 +556,7 @@ export const stateMatrix = ${JSON.stringify(stateMatrix, null, 2)} satisfies Pre
|
|
|
556
556
|
}
|
|
557
557
|
|
|
558
558
|
function styleCss() {
|
|
559
|
-
return `@source "../.
|
|
559
|
+
return `@source "../.tutti-ui-system-dev";
|
|
560
560
|
@source "../node_modules/@tutti-os/ui-system/dist";
|
|
561
561
|
|
|
562
562
|
:root {
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
// src/lib/date-format.ts
|
|
2
2
|
var fullDateTimeFormatterByLocale = /* @__PURE__ */ new Map();
|
|
3
3
|
var shortDateTimeFormatterByLocale = /* @__PURE__ */ new Map();
|
|
4
|
-
function
|
|
4
|
+
function getCurrentTuttiDateLocale() {
|
|
5
5
|
if (typeof document !== "undefined") {
|
|
6
|
-
const locale =
|
|
6
|
+
const locale = normalizeTuttiDateLocale(document.documentElement.lang);
|
|
7
7
|
if (locale) {
|
|
8
8
|
return locale;
|
|
9
9
|
}
|
|
10
10
|
}
|
|
11
11
|
return "en";
|
|
12
12
|
}
|
|
13
|
-
function
|
|
13
|
+
function formatTuttiDateTime(value, locale = getCurrentTuttiDateLocale()) {
|
|
14
14
|
return getFullDateTimeFormatter(locale).format(value);
|
|
15
15
|
}
|
|
16
|
-
function
|
|
16
|
+
function formatTuttiShortDateTime(value, locale = getCurrentTuttiDateLocale()) {
|
|
17
17
|
return getShortDateTimeFormatter(locale).format(value);
|
|
18
18
|
}
|
|
19
19
|
function getFullDateTimeFormatter(locale) {
|
|
20
|
-
const normalizedLocale =
|
|
20
|
+
const normalizedLocale = normalizeTuttiDateLocale(locale) ?? "en";
|
|
21
21
|
const cached = fullDateTimeFormatterByLocale.get(normalizedLocale);
|
|
22
22
|
if (cached) {
|
|
23
23
|
return cached;
|
|
@@ -33,7 +33,7 @@ function getFullDateTimeFormatter(locale) {
|
|
|
33
33
|
return formatter;
|
|
34
34
|
}
|
|
35
35
|
function getShortDateTimeFormatter(locale) {
|
|
36
|
-
const normalizedLocale =
|
|
36
|
+
const normalizedLocale = normalizeTuttiDateLocale(locale) ?? "en";
|
|
37
37
|
const cached = shortDateTimeFormatterByLocale.get(normalizedLocale);
|
|
38
38
|
if (cached) {
|
|
39
39
|
return cached;
|
|
@@ -48,7 +48,7 @@ function getShortDateTimeFormatter(locale) {
|
|
|
48
48
|
shortDateTimeFormatterByLocale.set(normalizedLocale, formatter);
|
|
49
49
|
return formatter;
|
|
50
50
|
}
|
|
51
|
-
function
|
|
51
|
+
function normalizeTuttiDateLocale(locale) {
|
|
52
52
|
const normalized = locale?.trim().toLowerCase() ?? "";
|
|
53
53
|
if (!normalized) {
|
|
54
54
|
return null;
|
|
@@ -63,8 +63,8 @@ function normalizeNextopDateLocale(locale) {
|
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
export {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
66
|
+
getCurrentTuttiDateLocale,
|
|
67
|
+
formatTuttiDateTime,
|
|
68
|
+
formatTuttiShortDateTime
|
|
69
69
|
};
|
|
70
|
-
//# sourceMappingURL=chunk-
|
|
70
|
+
//# sourceMappingURL=chunk-K57FUMQG.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/date-format.ts"],"sourcesContent":["export type TuttiDateLocale = \"en\" | \"zh-CN\";\n\nconst fullDateTimeFormatterByLocale = new Map<string, Intl.DateTimeFormat>();\nconst shortDateTimeFormatterByLocale = new Map<string, Intl.DateTimeFormat>();\n\nexport function getCurrentTuttiDateLocale(): TuttiDateLocale {\n if (typeof document !== \"undefined\") {\n const locale = normalizeTuttiDateLocale(document.documentElement.lang);\n if (locale) {\n return locale;\n }\n }\n\n return \"en\";\n}\n\nexport function formatTuttiDateTime(\n value: Date | number,\n locale = getCurrentTuttiDateLocale()\n): string {\n return getFullDateTimeFormatter(locale).format(value);\n}\n\nexport function formatTuttiShortDateTime(\n value: Date | number,\n locale = getCurrentTuttiDateLocale()\n): string {\n return getShortDateTimeFormatter(locale).format(value);\n}\n\nfunction getFullDateTimeFormatter(locale: string): Intl.DateTimeFormat {\n const normalizedLocale = normalizeTuttiDateLocale(locale) ?? \"en\";\n const cached = fullDateTimeFormatterByLocale.get(normalizedLocale);\n if (cached) {\n return cached;\n }\n\n const formatter = new Intl.DateTimeFormat(normalizedLocale, {\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n month: \"2-digit\",\n year: \"numeric\"\n });\n fullDateTimeFormatterByLocale.set(normalizedLocale, formatter);\n return formatter;\n}\n\nfunction getShortDateTimeFormatter(locale: string): Intl.DateTimeFormat {\n const normalizedLocale = normalizeTuttiDateLocale(locale) ?? \"en\";\n const cached = shortDateTimeFormatterByLocale.get(normalizedLocale);\n if (cached) {\n return cached;\n }\n\n const formatter = new Intl.DateTimeFormat(normalizedLocale, {\n day: \"numeric\",\n hour: \"2-digit\",\n hourCycle: \"h23\",\n minute: \"2-digit\",\n month: normalizedLocale === \"en\" ? \"short\" : \"long\"\n });\n shortDateTimeFormatterByLocale.set(normalizedLocale, formatter);\n return formatter;\n}\n\nfunction normalizeTuttiDateLocale(\n locale: string | null | undefined\n): TuttiDateLocale | null {\n const normalized = locale?.trim().toLowerCase() ?? \"\";\n if (!normalized) {\n return null;\n }\n if (normalized === \"zh\" || normalized.startsWith(\"zh-\")) {\n return \"zh-CN\";\n }\n if (normalized === \"en\" || normalized.startsWith(\"en-\")) {\n return \"en\";\n }\n return null;\n}\n"],"mappings":";AAEA,IAAM,gCAAgC,oBAAI,IAAiC;AAC3E,IAAM,iCAAiC,oBAAI,IAAiC;AAErE,SAAS,4BAA6C;AAC3D,MAAI,OAAO,aAAa,aAAa;AACnC,UAAM,SAAS,yBAAyB,SAAS,gBAAgB,IAAI;AACrE,QAAI,QAAQ;AACV,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,oBACd,OACA,SAAS,0BAA0B,GAC3B;AACR,SAAO,yBAAyB,MAAM,EAAE,OAAO,KAAK;AACtD;AAEO,SAAS,yBACd,OACA,SAAS,0BAA0B,GAC3B;AACR,SAAO,0BAA0B,MAAM,EAAE,OAAO,KAAK;AACvD;AAEA,SAAS,yBAAyB,QAAqC;AACrE,QAAM,mBAAmB,yBAAyB,MAAM,KAAK;AAC7D,QAAM,SAAS,8BAA8B,IAAI,gBAAgB;AACjE,MAAI,QAAQ;AACV,WAAO;AAAA,EACT;AAEA,QAAM,YAAY,IAAI,KAAK,eAAe,kBAAkB;AAAA,IAC1D,KAAK;AAAA,IACL,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,MAAM;AAAA,EACR,CAAC;AACD,gCAA8B,IAAI,kBAAkB,SAAS;AAC7D,SAAO;AACT;AAEA,SAAS,0BAA0B,QAAqC;AACtE,QAAM,mBAAmB,yBAAyB,MAAM,KAAK;AAC7D,QAAM,SAAS,+BAA+B,IAAI,gBAAgB;AAClE,MAAI,QAAQ;AACV,WAAO;AAAA,EACT;AAEA,QAAM,YAAY,IAAI,KAAK,eAAe,kBAAkB;AAAA,IAC1D,KAAK;AAAA,IACL,MAAM;AAAA,IACN,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,OAAO,qBAAqB,OAAO,UAAU;AAAA,EAC/C,CAAC;AACD,iCAA+B,IAAI,kBAAkB,SAAS;AAC9D,SAAO;AACT;AAEA,SAAS,yBACP,QACwB;AACxB,QAAM,aAAa,QAAQ,KAAK,EAAE,YAAY,KAAK;AACnD,MAAI,CAAC,YAAY;AACf,WAAO;AAAA,EACT;AACA,MAAI,eAAe,QAAQ,WAAW,WAAW,KAAK,GAAG;AACvD,WAAO;AAAA,EACT;AACA,MAAI,eAAe,QAAQ,WAAW,WAAW,KAAK,GAAG;AACvD,WAAO;AAAA,EACT;AACA,SAAO;AACT;","names":[]}
|
|
@@ -233,9 +233,9 @@ function ColumnLayoutPresetGlyph() {
|
|
|
233
233
|
] });
|
|
234
234
|
}
|
|
235
235
|
|
|
236
|
-
// src/icons/
|
|
236
|
+
// src/icons/tutti-mark.tsx
|
|
237
237
|
import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
|
|
238
|
-
function
|
|
238
|
+
function TuttiMark({
|
|
239
239
|
className,
|
|
240
240
|
size = 28,
|
|
241
241
|
title,
|
|
@@ -287,6 +287,6 @@ function NextopMark({
|
|
|
287
287
|
|
|
288
288
|
export {
|
|
289
289
|
LayoutPresetIcon,
|
|
290
|
-
|
|
290
|
+
TuttiMark
|
|
291
291
|
};
|
|
292
|
-
//# sourceMappingURL=chunk-
|
|
292
|
+
//# sourceMappingURL=chunk-RKQ4FPGY.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/icons/layout-preset-icons.tsx","../src/icons/tutti-mark.tsx"],"sourcesContent":["import type { IconProps } from \"./types\";\n\ntype LayoutPresetIconVariant = \"balanced\" | \"row\" | \"column\";\n\nexport interface LayoutPresetIconProps extends IconProps {\n selectedCount?: number;\n variant: LayoutPresetIconVariant;\n}\n\nexport function LayoutPresetIcon({\n className,\n selectedCount = 0,\n size = 24,\n title,\n variant,\n ...props\n}: LayoutPresetIconProps) {\n const dimension = typeof size === \"number\" ? `${size}` : size;\n\n return (\n <svg\n aria-hidden={title ? undefined : true}\n className={className}\n fill=\"none\"\n height={dimension}\n viewBox=\"0 0 24 24\"\n width={dimension}\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n {title ? <title>{title}</title> : null}\n <LayoutPresetFrame />\n {variant === \"balanced\" ? (\n <BalancedLayoutPresetGlyph selectedCount={selectedCount} />\n ) : null}\n {variant === \"row\" ? <RowLayoutPresetGlyph /> : null}\n {variant === \"column\" ? <ColumnLayoutPresetGlyph /> : null}\n </svg>\n );\n}\n\nfunction LayoutPresetFrame() {\n return (\n <>\n <rect\n x=\"3\"\n y=\"3\"\n width=\"18\"\n height=\"18\"\n rx=\"4\"\n fill=\"currentColor\"\n opacity=\"0.12\"\n />\n <rect\n x=\"3\"\n y=\"3\"\n width=\"18\"\n height=\"18\"\n rx=\"4\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.7\"\n />\n </>\n );\n}\n\nfunction BalancedLayoutPresetGlyph({\n selectedCount\n}: {\n selectedCount: number;\n}) {\n if (selectedCount <= 2) {\n return (\n <>\n <rect\n x=\"5.5\"\n y=\"5.5\"\n width=\"6.4\"\n height=\"13\"\n rx=\"1.4\"\n fill=\"currentColor\"\n />\n <rect\n x=\"12.8\"\n y=\"5.5\"\n width=\"5.7\"\n height=\"13\"\n rx=\"1.4\"\n fill=\"currentColor\"\n opacity=\"0.32\"\n />\n </>\n );\n }\n\n if (selectedCount === 3) {\n return (\n <>\n <rect\n x=\"5.25\"\n y=\"5.25\"\n width=\"7.2\"\n height=\"13.5\"\n rx=\"1.4\"\n fill=\"currentColor\"\n />\n <rect\n x=\"13.75\"\n y=\"5.25\"\n width=\"5\"\n height=\"6.15\"\n rx=\"1.2\"\n fill=\"currentColor\"\n opacity=\"0.5\"\n />\n <rect\n x=\"13.75\"\n y=\"12.6\"\n width=\"5\"\n height=\"6.15\"\n rx=\"1.2\"\n fill=\"currentColor\"\n opacity=\"0.3\"\n />\n </>\n );\n }\n\n return (\n <>\n <rect\n x=\"5.25\"\n y=\"5.25\"\n width=\"6\"\n height=\"6\"\n rx=\"1.2\"\n fill=\"currentColor\"\n />\n <rect\n x=\"12.75\"\n y=\"5.25\"\n width=\"6\"\n height=\"6\"\n rx=\"1.2\"\n fill=\"currentColor\"\n opacity=\"0.5\"\n />\n <rect\n x=\"5.25\"\n y=\"12.75\"\n width=\"6\"\n height=\"6\"\n rx=\"1.2\"\n fill=\"currentColor\"\n opacity=\"0.5\"\n />\n <rect\n x=\"12.75\"\n y=\"12.75\"\n width=\"6\"\n height=\"6\"\n rx=\"1.2\"\n fill=\"currentColor\"\n opacity=\"0.3\"\n />\n </>\n );\n}\n\nfunction RowLayoutPresetGlyph() {\n return (\n <>\n <rect\n x=\"5.25\"\n y=\"5.25\"\n width=\"6.2\"\n height=\"13.5\"\n rx=\"1.3\"\n fill=\"currentColor\"\n />\n <rect\n x=\"12.55\"\n y=\"5.25\"\n width=\"6.2\"\n height=\"13.5\"\n rx=\"1.3\"\n fill=\"currentColor\"\n opacity=\"0.34\"\n />\n </>\n );\n}\n\nfunction ColumnLayoutPresetGlyph() {\n return (\n <>\n <rect\n x=\"5.25\"\n y=\"5.25\"\n width=\"13.5\"\n height=\"6.2\"\n rx=\"1.3\"\n fill=\"currentColor\"\n />\n <rect\n x=\"5.25\"\n y=\"12.55\"\n width=\"13.5\"\n height=\"6.2\"\n rx=\"1.3\"\n fill=\"currentColor\"\n opacity=\"0.34\"\n />\n </>\n );\n}\n","import type { IconProps } from \"./types\";\n\nexport function TuttiMark({\n className,\n size = 28,\n title,\n ...props\n}: IconProps) {\n const dimension = typeof size === \"number\" ? `${size}` : size;\n\n return (\n <svg\n aria-hidden={title ? undefined : true}\n className={className}\n fill=\"none\"\n height={dimension}\n viewBox=\"0 0 28 28\"\n width={dimension}\n xmlns=\"http://www.w3.org/2000/svg\"\n {...props}\n >\n {title ? <title>{title}</title> : null}\n <rect\n fill=\"var(--panel)\"\n height=\"27\"\n rx=\"13.5\"\n width=\"27\"\n x=\"0.5\"\n y=\"0.5\"\n />\n <path\n d=\"M8.5 18.4V9.6H11.1L16.5 16.35V9.6H19.5V18.4H16.95L11.5 11.58V18.4H8.5Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M19.48 8.55L21.6 6.44L21.57 11.12L16.9 11.08L19.48 8.55Z\"\n fill=\"var(--primary)\"\n />\n </svg>\n );\n}\n"],"mappings":"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","names":["jsx","jsxs"]}
|
|
@@ -2258,7 +2258,7 @@ function SelectContent({
|
|
|
2258
2258
|
{
|
|
2259
2259
|
"data-position": position,
|
|
2260
2260
|
className: cn(
|
|
2261
|
-
"flex flex-col gap-0.5 data-[position=popper]:w-full data-[position=popper]:[min-width:var(--
|
|
2261
|
+
"flex flex-col gap-0.5 data-[position=popper]:w-full data-[position=popper]:[min-width:var(--tutti-select-content-min-width,var(--radix-select-trigger-width))]"
|
|
2262
2262
|
),
|
|
2263
2263
|
children
|
|
2264
2264
|
}
|
|
@@ -3532,4 +3532,4 @@ export {
|
|
|
3532
3532
|
UnderlineTabs,
|
|
3533
3533
|
ViewportMenuSurface
|
|
3534
3534
|
};
|
|
3535
|
-
//# sourceMappingURL=chunk-
|
|
3535
|
+
//# sourceMappingURL=chunk-YIAY5DKS.js.map
|