tamga-ui 0.2.0 → 0.3.0

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 (48) hide show
  1. package/CHANGELOG.md +86 -0
  2. package/dist/components/appearance.d.ts +78 -0
  3. package/dist/components/appearance.d.ts.map +1 -0
  4. package/dist/components/appearance.js +73 -0
  5. package/dist/components/chrome.d.ts +11 -1
  6. package/dist/components/chrome.d.ts.map +1 -1
  7. package/dist/components/chrome.js +19 -6
  8. package/dist/components/error-state.d.ts +7 -14
  9. package/dist/components/error-state.d.ts.map +1 -1
  10. package/dist/components/overlay.d.ts +7 -16
  11. package/dist/components/overlay.d.ts.map +1 -1
  12. package/dist/components/primitives.d.ts +7 -16
  13. package/dist/components/primitives.d.ts.map +1 -1
  14. package/dist/components/rail-link.d.ts +22 -2
  15. package/dist/components/rail-link.d.ts.map +1 -1
  16. package/dist/components/rail-link.js +12 -9
  17. package/dist/components/square-picker.d.ts +41 -0
  18. package/dist/components/square-picker.d.ts.map +1 -0
  19. package/dist/components/square-picker.js +90 -0
  20. package/dist/index.d.ts +3 -0
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +3 -0
  23. package/dist/kit.css +237 -729
  24. package/dist/lib/color.d.ts +0 -20
  25. package/dist/lib/color.d.ts.map +1 -1
  26. package/dist/lib/color.js +0 -22
  27. package/dist/lib/image.d.ts +46 -0
  28. package/dist/lib/image.d.ts.map +1 -0
  29. package/dist/lib/image.js +95 -0
  30. package/dist/lib/palette.d.ts +0 -16
  31. package/dist/lib/palette.d.ts.map +1 -1
  32. package/dist/lib/palette.js +0 -12
  33. package/dist/patterns/app-shell.d.ts.map +1 -1
  34. package/dist/patterns/app-shell.js +2 -12
  35. package/dist/patterns/appearance-template.d.ts +105 -0
  36. package/dist/patterns/appearance-template.d.ts.map +1 -0
  37. package/dist/patterns/appearance-template.js +23 -0
  38. package/dist/patterns/index.d.ts +1 -0
  39. package/dist/patterns/index.d.ts.map +1 -1
  40. package/dist/patterns/index.js +1 -0
  41. package/dist/patterns/settings-template.d.ts +12 -1
  42. package/dist/patterns/settings-template.d.ts.map +1 -1
  43. package/dist/patterns/settings-template.js +2 -2
  44. package/dist/patterns/shared.d.ts +1 -1
  45. package/dist/patterns/shared.d.ts.map +1 -1
  46. package/dist/styles.css +1 -3
  47. package/dist/theme.css +127 -483
  48. package/package.json +4 -1
@@ -65,24 +65,4 @@ export declare function oklchToHex({ l, c, h }: Oklch): string;
65
65
  * yakalanıyor.
66
66
  */
67
67
  export declare function lightnessForContrast(taban: Oklch, karsi: string, hedef: number, yon: -1 | 1): Oklch;
68
- /** @deprecated `isHex` kullan. 0.3.0'da kaldırılacak. */
69
- export declare const gecerliHex: typeof isHex;
70
- /** @deprecated `hexToRgb` kullan. 0.3.0'da kaldırılacak. */
71
- export declare const hexRgb: typeof hexToRgb;
72
- /** @deprecated `rgbToHex` kullan. 0.3.0'da kaldırılacak. */
73
- export declare const rgbHex: typeof rgbToHex;
74
- /** @deprecated `luminance` kullan. 0.3.0'da kaldırılacak. */
75
- export declare const parlaklik: typeof luminance;
76
- /** @deprecated `contrast` kullan. 0.3.0'da kaldırılacak. */
77
- export declare const oran: typeof contrast;
78
- /** @deprecated `lightness` kullan. 0.3.0'da kaldırılacak. */
79
- export declare const acikligi: typeof lightness;
80
- /** @deprecated `deltaL` kullan. 0.3.0'da kaldırılacak. */
81
- export declare const dL: typeof deltaL;
82
- /** @deprecated `hexToOklch` kullan. 0.3.0'da kaldırılacak. */
83
- export declare const hexOklch: typeof hexToOklch;
84
- /** @deprecated `oklchToHex` kullan. 0.3.0'da kaldırılacak. */
85
- export declare const oklchHex: typeof oklchToHex;
86
- /** @deprecated `lightnessForContrast` kullan. 0.3.0'da kaldırılacak. */
87
- export declare const oranaGoreAcikligi: typeof lightnessForContrast;
88
68
  //# sourceMappingURL=color.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../src/lib/color.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,MAAM,KAAK,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAKxD,0EAA0E;AAC1E,eAAO,MAAM,KAAK,MAAO,MAAM,KAAG,OAA0D,CAAC;AAE7F;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAM9D;AAGD,eAAO,MAAM,QAAQ,MAAO,MAAM,KAAK,MAAM,KAAK,MAAM,WACqB,CAAC;AAE9E,+DAA+D;AAC/D,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG7C;AAED,+CAA+C;AAC/C,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG7C;AAED,eAAO,MAAM,MAAM,MAAO,MAAM,KAAK,MAAM,WAA0C,CAAC;AAItF,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAiB7C;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,GAAG,MAAM,CA6BrD;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GACV,KAAK,CAQP;AAKD,yDAAyD;AACzD,eAAO,MAAM,UAAU,cAAQ,CAAC;AAChC,4DAA4D;AAC5D,eAAO,MAAM,MAAM,iBAAW,CAAC;AAC/B,4DAA4D;AAC5D,eAAO,MAAM,MAAM,iBAAW,CAAC;AAC/B,6DAA6D;AAC7D,eAAO,MAAM,SAAS,kBAAY,CAAC;AACnC,4DAA4D;AAC5D,eAAO,MAAM,IAAI,iBAAW,CAAC;AAC7B,6DAA6D;AAC7D,eAAO,MAAM,QAAQ,kBAAY,CAAC;AAClC,0DAA0D;AAC1D,eAAO,MAAM,EAAE,eAAS,CAAC;AACzB,8DAA8D;AAC9D,eAAO,MAAM,QAAQ,mBAAa,CAAC;AACnC,8DAA8D;AAC9D,eAAO,MAAM,QAAQ,mBAAa,CAAC;AACnC,wEAAwE;AACxE,eAAO,MAAM,iBAAiB,6BAAuB,CAAC"}
1
+ {"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../src/lib/color.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,MAAM,KAAK,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAKxD,0EAA0E;AAC1E,eAAO,MAAM,KAAK,MAAO,MAAM,KAAG,OAA0D,CAAC;AAE7F;;;;;;;;;;GAUG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAM9D;AAGD,eAAO,MAAM,QAAQ,MAAO,MAAM,KAAK,MAAM,KAAK,MAAM,WACqB,CAAC;AAE9E,+DAA+D;AAC/D,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG7C;AAED,+CAA+C;AAC/C,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG7C;AAED,eAAO,MAAM,MAAM,MAAO,MAAM,KAAK,MAAM,WAA0C,CAAC;AAItF,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,KAAK,CAiB7C;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,GAAG,MAAM,CA6BrD;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,GACV,KAAK,CAQP"}
package/dist/lib/color.js CHANGED
@@ -132,25 +132,3 @@ export function lightnessForContrast(taban, karsi, hedef, yon) {
132
132
  }
133
133
  return en;
134
134
  }
135
- /* Eski Türkçe adlar, 0.3.0'a kadar. SİLME: 0.1.1 npm'de yayında ve bu adları
136
- kullanan bir tüketici var. Gerekçe: ADR-0001. */
137
- /** @deprecated `isHex` kullan. 0.3.0'da kaldırılacak. */
138
- export const gecerliHex = isHex;
139
- /** @deprecated `hexToRgb` kullan. 0.3.0'da kaldırılacak. */
140
- export const hexRgb = hexToRgb;
141
- /** @deprecated `rgbToHex` kullan. 0.3.0'da kaldırılacak. */
142
- export const rgbHex = rgbToHex;
143
- /** @deprecated `luminance` kullan. 0.3.0'da kaldırılacak. */
144
- export const parlaklik = luminance;
145
- /** @deprecated `contrast` kullan. 0.3.0'da kaldırılacak. */
146
- export const oran = contrast;
147
- /** @deprecated `lightness` kullan. 0.3.0'da kaldırılacak. */
148
- export const acikligi = lightness;
149
- /** @deprecated `deltaL` kullan. 0.3.0'da kaldırılacak. */
150
- export const dL = deltaL;
151
- /** @deprecated `hexToOklch` kullan. 0.3.0'da kaldırılacak. */
152
- export const hexOklch = hexToOklch;
153
- /** @deprecated `oklchToHex` kullan. 0.3.0'da kaldırılacak. */
154
- export const oklchHex = oklchToHex;
155
- /** @deprecated `lightnessForContrast` kullan. 0.3.0'da kaldırılacak. */
156
- export const oranaGoreAcikligi = lightnessForContrast;
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Turning an uploaded file into something a panel can carry.
3
+ *
4
+ * NO LIBRARY, and none is needed: a `<canvas>` and `drawImage`.
5
+ *
6
+ * A DATA URI, NOT AN OBJECT URL. `URL.createObjectURL` dies with the tab, so a
7
+ * logo chosen today would be gone tomorrow. A data URI survives in storage and
8
+ * goes straight into `<img src>`. When a server arrives this file becomes an
9
+ * upload call and nothing else changes: screens already hold a STRING and do
10
+ * not care whether it is a data URI or an `https://` address.
11
+ *
12
+ * WHY IT IS RESIZED. `localStorage` holds about 5 MB per browser and a phone
13
+ * photo alone is 4 MB. Writing one unresized throws `QuotaExceeded`, and the
14
+ * thing that gets lost may not be the logo but whatever else was being saved
15
+ * at that moment.
16
+ *
17
+ * THE RATIO IS KEPT, NOTHING IS CROPPED. Cropping to fit a square is the most
18
+ * common and most silent mistake: the logo looks fine and its edge is gone.
19
+ * The long side is pulled to the limit, the short side follows.
20
+ *
21
+ * PNG, NOT JPEG. Logos are flat and transparent; JPEG turns transparency into
22
+ * solid black and rings the edges.
23
+ */
24
+ export type ImageError = "type" | "size" | "unreadable";
25
+ export declare const IMAGE_ACCEPT = "image/png,image/jpeg,image/svg+xml,image/webp";
26
+ /**
27
+ * Resizes so the longest side is `maxEdge` pixels and returns a data URI.
28
+ *
29
+ * SVG PASSES THROUGH UNTOUCHED. Drawing a vector onto a canvas and writing PNG
30
+ * stops it being scalable: a logo baked at 512px is blurry on a 4K screen. SVG
31
+ * is already small and already sharp at every size.
32
+ */
33
+ export declare function prepareImage(file: File, maxEdge: number): Promise<string>;
34
+ /**
35
+ * Cuts a SQUARE piece out of an image: for a mark or a profile photo.
36
+ *
37
+ * `area` is given in RATIOS (0 to 1), not in the image's own pixels, because
38
+ * the picker runs on a preview whose scale changes from screen to screen. A
39
+ * ratio points at the same place at every scale.
40
+ */
41
+ export declare function cropSquare(source: string, area: {
42
+ x: number;
43
+ y: number;
44
+ size: number;
45
+ }, maxEdge: number): Promise<string>;
46
+ //# sourceMappingURL=image.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../src/lib/image.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,YAAY,CAAC;AAKxD,eAAO,MAAM,YAAY,kDAAkD,CAAC;AAE5E;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoB/E;AAED;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,IAAI,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAC5C,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC,CAcjB"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Turning an uploaded file into something a panel can carry.
3
+ *
4
+ * NO LIBRARY, and none is needed: a `<canvas>` and `drawImage`.
5
+ *
6
+ * A DATA URI, NOT AN OBJECT URL. `URL.createObjectURL` dies with the tab, so a
7
+ * logo chosen today would be gone tomorrow. A data URI survives in storage and
8
+ * goes straight into `<img src>`. When a server arrives this file becomes an
9
+ * upload call and nothing else changes: screens already hold a STRING and do
10
+ * not care whether it is a data URI or an `https://` address.
11
+ *
12
+ * WHY IT IS RESIZED. `localStorage` holds about 5 MB per browser and a phone
13
+ * photo alone is 4 MB. Writing one unresized throws `QuotaExceeded`, and the
14
+ * thing that gets lost may not be the logo but whatever else was being saved
15
+ * at that moment.
16
+ *
17
+ * THE RATIO IS KEPT, NOTHING IS CROPPED. Cropping to fit a square is the most
18
+ * common and most silent mistake: the logo looks fine and its edge is gone.
19
+ * The long side is pulled to the limit, the short side follows.
20
+ *
21
+ * PNG, NOT JPEG. Logos are flat and transparent; JPEG turns transparency into
22
+ * solid black and rings the edges.
23
+ */
24
+ /** Raw file limit, before resizing. Over 8 MB is not a logo, it is an accident. */
25
+ const RAW_LIMIT = 8 * 1024 * 1024;
26
+ export const IMAGE_ACCEPT = "image/png,image/jpeg,image/svg+xml,image/webp";
27
+ /**
28
+ * Resizes so the longest side is `maxEdge` pixels and returns a data URI.
29
+ *
30
+ * SVG PASSES THROUGH UNTOUCHED. Drawing a vector onto a canvas and writing PNG
31
+ * stops it being scalable: a logo baked at 512px is blurry on a 4K screen. SVG
32
+ * is already small and already sharp at every size.
33
+ */
34
+ export async function prepareImage(file, maxEdge) {
35
+ if (!file.type.startsWith("image/"))
36
+ throw new Error("type");
37
+ if (file.size > RAW_LIMIT)
38
+ throw new Error("size");
39
+ const raw = await readFile(file);
40
+ if (file.type === "image/svg+xml")
41
+ return raw;
42
+ const image = await loadImage(raw);
43
+ const scale = Math.min(1, maxEdge / Math.max(image.width, image.height));
44
+ if (scale >= 1)
45
+ return raw;
46
+ const canvas = document.createElement("canvas");
47
+ canvas.width = Math.round(image.width * scale);
48
+ canvas.height = Math.round(image.height * scale);
49
+ const ctx = canvas.getContext("2d");
50
+ if (!ctx)
51
+ return raw;
52
+ /* The browser's own smoothing: better than a hand-written resampler, and free. */
53
+ ctx.imageSmoothingQuality = "high";
54
+ ctx.drawImage(image, 0, 0, canvas.width, canvas.height);
55
+ return canvas.toDataURL("image/png");
56
+ }
57
+ /**
58
+ * Cuts a SQUARE piece out of an image: for a mark or a profile photo.
59
+ *
60
+ * `area` is given in RATIOS (0 to 1), not in the image's own pixels, because
61
+ * the picker runs on a preview whose scale changes from screen to screen. A
62
+ * ratio points at the same place at every scale.
63
+ */
64
+ export async function cropSquare(source, area, maxEdge) {
65
+ const image = await loadImage(source);
66
+ /* The square is measured against the SHORT side: a 350x65 logo can hold a
67
+ square of at most 65px. Measured against the long side the frame would
68
+ fall outside the image. */
69
+ const edge = Math.min(image.width, image.height) * area.size;
70
+ const canvas = document.createElement("canvas");
71
+ canvas.width = maxEdge;
72
+ canvas.height = maxEdge;
73
+ const ctx = canvas.getContext("2d");
74
+ if (!ctx)
75
+ return source;
76
+ ctx.imageSmoothingQuality = "high";
77
+ ctx.drawImage(image, area.x * image.width, area.y * image.height, edge, edge, 0, 0, maxEdge, maxEdge);
78
+ return canvas.toDataURL("image/png");
79
+ }
80
+ function readFile(file) {
81
+ return new Promise((resolve, reject) => {
82
+ const reader = new FileReader();
83
+ reader.onload = () => resolve(String(reader.result));
84
+ reader.onerror = () => reject(new Error("unreadable"));
85
+ reader.readAsDataURL(file);
86
+ });
87
+ }
88
+ function loadImage(src) {
89
+ return new Promise((resolve, reject) => {
90
+ const img = new Image();
91
+ img.onload = () => resolve(img);
92
+ img.onerror = () => reject(new Error("unreadable"));
93
+ img.src = src;
94
+ });
95
+ }
@@ -84,20 +84,4 @@ export declare function measurePalette(p: Palette): Measurement[];
84
84
  export declare function paletteVars(p: Palette): Record<string, string>;
85
85
  export declare function paletteCss(cift: PalettePair): string;
86
86
  export { lightness, deltaL, contrast };
87
- /** @deprecated `makePalette` kullan. 0.3.0'da kaldırılacak. */
88
- export declare const paletUret: typeof makePalette;
89
- /** @deprecated `measurePalette` kullan. 0.3.0'da kaldırılacak. */
90
- export declare const paletiOlc: typeof measurePalette;
91
- /** @deprecated `paletteVars` kullan. 0.3.0'da kaldırılacak. */
92
- export declare const paletStili: typeof paletteVars;
93
- /** @deprecated `paletteCss` kullan. 0.3.0'da kaldırılacak. */
94
- export declare const paletCss: typeof paletteCss;
95
- /** @deprecated `Palette` kullan. 0.3.0'da kaldırılacak. */
96
- export type Palet = Palette;
97
- /** @deprecated `PalettePair` kullan. 0.3.0'da kaldırılacak. */
98
- export type PaletCifti = PalettePair;
99
- /** @deprecated `Measurement` kullan. 0.3.0'da kaldırılacak. */
100
- export type Olcum = Measurement;
101
- /** @deprecated `isHex` kullan (tamga-ui/palette üzerinden). 0.3.0'da kaldırılacak. */
102
- export { gecerliHex, hexRgb, rgbHex, parlaklik, oran, acikligi, dL, hexOklch, oklchHex, oranaGoreAcikligi } from "./color.js";
103
87
  //# sourceMappingURL=palette.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"palette.d.ts","sourceRoot":"","sources":["../../src/lib/palette.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAA0B,QAAQ,EAAc,MAAM,YAAY,CAAC;AAEpG;;;;;;;;;;;;;;;;GAgBG;AAEH,qFAAqF;AACrF,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAqH5D;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAIzD;AAED,OAAO,EAAE,KAAK,EAAE,CAAC;AAIjB,+BAA+B;AAC/B,MAAM,MAAM,WAAW,GAAG;IACxB,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,GAAG,WAAW,EAAE,CAsBxD;AAwBD;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAI9D;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAMpD;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;AAKvC,+DAA+D;AAC/D,eAAO,MAAM,SAAS,oBAAc,CAAC;AACrC,kEAAkE;AAClE,eAAO,MAAM,SAAS,uBAAiB,CAAC;AACxC,+DAA+D;AAC/D,eAAO,MAAM,UAAU,oBAAc,CAAC;AACtC,8DAA8D;AAC9D,eAAO,MAAM,QAAQ,mBAAa,CAAC;AACnC,2DAA2D;AAC3D,MAAM,MAAM,KAAK,GAAG,OAAO,CAAC;AAC5B,+DAA+D;AAC/D,MAAM,MAAM,UAAU,GAAG,WAAW,CAAC;AACrC,+DAA+D;AAC/D,MAAM,MAAM,KAAK,GAAG,WAAW,CAAC;AAChC,sFAAsF;AACtF,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"palette.d.ts","sourceRoot":"","sources":["../../src/lib/palette.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAA0B,QAAQ,EAAc,MAAM,YAAY,CAAC;AAEpG;;;;;;;;;;;;;;;;GAgBG;AAEH,qFAAqF;AACrF,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAqH5D;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,CAIzD;AAED,OAAO,EAAE,KAAK,EAAE,CAAC;AAIjB,+BAA+B;AAC/B,MAAM,MAAM,WAAW,GAAG;IACxB,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,IAAI,EAAE,UAAU,GAAG,QAAQ,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,GAAG,WAAW,EAAE,CAsBxD;AAwBD;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAI9D;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAMpD;AAED,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC"}
@@ -191,15 +191,3 @@ export function paletteCss(cift) {
191
191
  return `:root {\n${blok(cift.light)}\n}\n\n.dark {\n${blok(cift.dark)}\n}\n`;
192
192
  }
193
193
  export { lightness, deltaL, contrast };
194
- /* Eski Türkçe adlar, 0.3.0'a kadar. SİLME: 0.1.1 npm'de yayında ve bu adları
195
- kullanan bir tüketici var. */
196
- /** @deprecated `makePalette` kullan. 0.3.0'da kaldırılacak. */
197
- export const paletUret = makePalette;
198
- /** @deprecated `measurePalette` kullan. 0.3.0'da kaldırılacak. */
199
- export const paletiOlc = measurePalette;
200
- /** @deprecated `paletteVars` kullan. 0.3.0'da kaldırılacak. */
201
- export const paletStili = paletteVars;
202
- /** @deprecated `paletteCss` kullan. 0.3.0'da kaldırılacak. */
203
- export const paletCss = paletteCss;
204
- /** @deprecated `isHex` kullan (tamga-ui/palette üzerinden). 0.3.0'da kaldırılacak. */
205
- export { gecerliHex, hexRgb, rgbHex, parlaklik, oran, acikligi, dL, hexOklch, oklchHex, oranaGoreAcikligi } from "./color.js";
@@ -1 +1 @@
1
- {"version":3,"file":"app-shell.d.ts","sourceRoot":"","sources":["../../src/patterns/app-shell.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAE7C,OAAO,EAAa,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5D;;;;;GAKG;AAEH,MAAM,MAAM,QAAQ,GAAG;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,wKAAwK;IACxK,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,cAAc,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,wJAAwJ;IACxJ,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,GAAG,EAAE,SAAS,QAAQ,EAAE,CAAC;IACzB,mGAAmG;IACnG,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;;;;;;;OAWG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IACzB;;;;OAIG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,uIAAuI;IACvI,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,QAAQ,EAAE,SAAS,CAAC;CACrB,CAAC;AAEF,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,GAAG,EACH,UAAU,EACV,IAAe,EACf,MAAM,EACN,UAAU,EACV,aAAa,EAAE,IAAgB,EAC/B,MAAM,EACN,QAAQ,GACT,EAAE,aAAa,+BAkFf"}
1
+ {"version":3,"file":"app-shell.d.ts","sourceRoot":"","sources":["../../src/patterns/app-shell.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAE7C,OAAO,EAAa,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5D;;;;;GAKG;AAEH,MAAM,MAAM,QAAQ,GAAG;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,wKAAwK;IACxK,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,cAAc,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,wJAAwJ;IACxJ,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,GAAG,EAAE,SAAS,QAAQ,EAAE,CAAC;IACzB,mGAAmG;IACnG,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;;;;;;;OAWG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IACzB;;;;OAIG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,uIAAuI;IACvI,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,QAAQ,EAAE,SAAS,CAAC;CACrB,CAAC;AAEF,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,GAAG,EACH,UAAU,EACV,IAAe,EACf,MAAM,EACN,UAAU,EACV,aAAa,EAAE,IAAgB,EAC/B,MAAM,EACN,QAAQ,GACT,EAAE,aAAa,+BAuEf"}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { Icon } from "../components/icon.js";
4
- import { Tooltip } from "../components/overlay.js";
4
+ import { RailLink } from "../components/rail-link.js";
5
5
  import { PlainLink } from "./shared.js";
6
6
  export function AppShell({ brand, nav, activePath, rail = "narrow", topbar, railFooter, linkComponent: Link = PlainLink, labels, children, }) {
7
7
  /* Bir giriş kendi alt ağacına sahip: `/urunler`, `/urunler/42/fotograflar`
@@ -9,15 +9,5 @@ export function AppShell({ brand, nav, activePath, rail = "narrow", topbar, rail
9
9
  altındaki her rotayı yutar. */
10
10
  const isCurrent = (href) => href === "/" ? activePath === href : activePath === href || activePath.startsWith(`${href}/`);
11
11
  const wide = rail === "wide";
12
- return (_jsxs("div", { className: "flex h-dvh w-full overflow-hidden bg-shell text-ink-soft", children: [_jsxs("aside", { className: `flex shrink-0 flex-col gap-2 bg-shell py-4 ${wide ? "w-60 px-3" : "w-20 items-center px-1"}`, "data-rail": rail, children: [brand ? (_jsxs(_Fragment, { children: [_jsx("span", { "aria-label": labels.home, className: `mb-2 flex h-10 shrink-0 items-center text-ink ${wide ? "px-2" : "w-10 justify-center"}`, children: brand }), _jsx("span", { className: `h-0 w-6 border-t border-line ${wide ? "ml-2" : ""}` })] })) : null, _jsx("nav", { "aria-label": labels.primaryNav, className: `tamga-rail-scroll flex w-full flex-1 flex-col gap-2 py-1 ${wide ? "" : "items-center"}`, children: nav.map((entry) => {
13
- const current = isCurrent(entry.href);
14
- const link = (_jsxs(Link, { href: entry.href, "aria-label": wide ? undefined : entry.label, "aria-current": current ? "page" : undefined, "data-active": current, "data-nav": entry.key, className: "tamga-rail-link", children: [_jsx(Icon, { icon: entry.icon, size: "base" }), wide ? _jsx("span", { className: "min-w-0 truncate", children: entry.label }) : null] }, entry.key));
15
- /* DAR RAYDA KİTİN İPUCU, `title` DEĞİL.
16
- Burada `title={entry.label}` vardı: tarayıcının kendi gecikmeli
17
- gri balonu. Kullanan kişi bunu "ipucu yok" diye okuyor, çünkü
18
- kitin her yerdeki ipucu başka türlü görünüyor ve hemen çıkıyor.
19
- Geniş rayda etiket zaten yazılı; orada ipucu aynı sözcüğü ikinci
20
- kez söylemek olurdu. */
21
- return wide ? (link) : (_jsx(Tooltip, { label: entry.label, placement: "right", children: link }, entry.key));
22
- }) }), railFooter ? _jsx("div", { className: "shrink-0", children: railFooter }) : null] }), _jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [_jsx("header", { className: "tamga-gutter flex items-center gap-4 py-4", children: topbar }), _jsx("div", { className: "min-h-0 flex-1 overflow-hidden pr-4 pb-4", children: _jsx("main", { className: "tamga-surface h-full min-h-0 overflow-y-auto", children: children }) })] })] }));
12
+ return (_jsxs("div", { className: "flex h-dvh w-full overflow-hidden bg-shell text-ink-soft", children: [_jsxs("aside", { className: `flex shrink-0 flex-col gap-2 bg-shell py-4 ${wide ? "w-60 px-3" : "w-20 items-center px-1"}`, "data-rail": rail, children: [brand ? (_jsxs(_Fragment, { children: [_jsx("span", { "aria-label": labels.home, className: `mb-2 flex h-10 shrink-0 items-center text-ink ${wide ? "px-2" : "w-10 justify-center"}`, children: brand }), _jsx("span", { className: `h-0 w-6 border-t border-line ${wide ? "ml-2" : ""}` })] })) : null, _jsx("nav", { "aria-label": labels.primaryNav, className: `tamga-rail-scroll flex w-full flex-1 flex-col gap-2 py-1 ${wide ? "" : "items-center"}`, children: nav.map((entry) => (_jsx(RailLink, { href: entry.href, label: entry.label, active: isCurrent(entry.href), showLabel: wide, linkComponent: Link, "data-nav": entry.key, children: _jsx(Icon, { icon: entry.icon, size: "base" }) }, entry.key))) }), railFooter ? _jsx("div", { className: "shrink-0", children: railFooter }) : null] }), _jsxs("div", { className: "flex min-w-0 flex-1 flex-col", children: [_jsx("header", { className: "tamga-gutter flex items-center gap-4 py-4", children: topbar }), _jsx("div", { className: "min-h-0 flex-1 overflow-hidden pr-4 pb-4", children: _jsx("main", { className: "tamga-surface h-full min-h-0 overflow-y-auto", children: children }) })] })] }));
23
13
  }
@@ -0,0 +1,105 @@
1
+ import { type ReactNode } from "react";
2
+ import { type SwatchOption, type ThemeChoice } from "../components/appearance.js";
3
+ /**
4
+ * The Appearance screen: logo, mark, brand colour, theme, sidebar.
5
+ *
6
+ * WHY A WHOLE SCREEN AND NOT FIVE PARTS. Every panel grows an appearance
7
+ * setting, and the kit not giving one is why two products drew their own hex
8
+ * box. Handing over the parts would not have fixed it: each product arranges
9
+ * them differently and they drift apart again, which is the thing this layer
10
+ * exists to prevent (ADR-0004).
11
+ *
12
+ * IT STORES NOTHING. `value` comes in, `onChange` goes out, `onSave` belongs
13
+ * to the caller. Where the preference lives (session, account, browser) is a
14
+ * product decision and a template that learns it stops being a template.
15
+ *
16
+ * THE PALETTE IS NOT APPLIED HERE EITHER. This screen reports the chosen
17
+ * colour; turning it into tokens is `makePalette` plus `paletteVars`, and the
18
+ * product decides when that happens, because the product owns the root
19
+ * element.
20
+ */
21
+ export type Appearance = {
22
+ brand: string;
23
+ theme: ThemeChoice;
24
+ /** `free` means each user decides. TR: `free`, her kullanıcı kendi seçer demek. */
25
+ rail: "narrow" | "wide" | "free";
26
+ logo: string | null;
27
+ mark: string | null;
28
+ };
29
+ export type AppearanceLabels = {
30
+ title: string;
31
+ description: string;
32
+ logo: {
33
+ title: string;
34
+ description: string;
35
+ field: ImageLabels;
36
+ pickMark: string;
37
+ };
38
+ mark: {
39
+ title: string;
40
+ description: string;
41
+ field: ImageLabels;
42
+ fallbackNote: string;
43
+ };
44
+ brand: {
45
+ title: string;
46
+ description: string;
47
+ swatches: readonly SwatchOption[];
48
+ custom: string;
49
+ };
50
+ theme: {
51
+ title: string;
52
+ description: string;
53
+ light: string;
54
+ dark: string;
55
+ system: string;
56
+ group: string;
57
+ };
58
+ rail: {
59
+ title: string;
60
+ description: string;
61
+ narrow: string;
62
+ wide: string;
63
+ free: string;
64
+ group: string;
65
+ };
66
+ picker: {
67
+ title: string;
68
+ hint: string;
69
+ size: string;
70
+ cancel: string;
71
+ confirm: string;
72
+ close: string;
73
+ };
74
+ save: string;
75
+ saving: string;
76
+ reset: string;
77
+ clean: string;
78
+ dirty: string;
79
+ };
80
+ type ImageLabels = {
81
+ name: string;
82
+ upload: string;
83
+ replace: string;
84
+ remove: string;
85
+ empty: string;
86
+ errorType: string;
87
+ errorSize: string;
88
+ errorUnreadable: string;
89
+ };
90
+ export declare function AppearanceTemplate({ value, onChange, saved, onSave, onReset, saving, fallbackName, labels, extra, }: {
91
+ value: Appearance;
92
+ onChange: (next: Appearance) => void;
93
+ /** The stored version; "is anything unsaved" is answered by comparing with it. TR: Kayıtlı hâli; "kaydedilmemiş bir şey var mı" sorusu bununla cevaplanıyor. */
94
+ saved: Appearance;
95
+ onSave: () => void;
96
+ onReset: () => void;
97
+ saving?: boolean;
98
+ /** The name a tile is drawn from when there is no mark. TR: Amblem yokken karonun çizildiği ad. */
99
+ fallbackName: string;
100
+ labels: AppearanceLabels;
101
+ /** Extra panels the product adds, after the built-in ones. TR: Ürünün eklediği ek bölümler, hazır olanlardan sonra. */
102
+ extra?: ReactNode;
103
+ }): import("react").JSX.Element;
104
+ export {};
105
+ //# sourceMappingURL=appearance-template.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appearance-template.d.ts","sourceRoot":"","sources":["../../src/patterns/appearance-template.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState } from "react";
4
+ import { ColorSwatches, ImageField, ThemeCards } from "../components/appearance.js";
5
+ import { LogoTile } from "../components/chrome.js";
6
+ import { Segmented } from "../components/segmented.js";
7
+ import { SquarePicker } from "../components/square-picker.js";
8
+ import { Button } from "../components/button.js";
9
+ import { Label } from "../components/surface.js";
10
+ import { SettingsPanel } from "./settings-template.js";
11
+ export function AppearanceTemplate({ value, onChange, saved, onSave, onReset, saving = false, fallbackName, labels, extra, }) {
12
+ const [picking, setPicking] = useState(false);
13
+ const dirty = JSON.stringify(value) !== JSON.stringify(saved);
14
+ return (_jsxs("form", { className: "flex flex-col gap-5", onSubmit: (e) => {
15
+ e.preventDefault();
16
+ if (dirty && !saving)
17
+ onSave();
18
+ }, children: [_jsxs("div", { className: "flex flex-col gap-1", children: [_jsx("h1", { className: "text-display-sm font-semibold text-ink", children: labels.title }), _jsx("p", { className: "w-full text-control leading-relaxed text-ink-soft", children: labels.description })] }), _jsx(SettingsPanel, { accent: true, title: labels.logo.title, description: labels.logo.description, children: _jsx(ImageField, { value: value.logo, onChange: (v) => onChange({ ...value, logo: v }), maxEdge: 512, labels: labels.logo.field, preview: (src) => (_jsx("img", { src: src, alt: "", className: "max-h-full w-auto max-w-56 object-contain" })), extra: value.logo ? (_jsx(Button, { type: "button", onClick: () => setPicking(true), children: labels.logo.pickMark })) : undefined }) }), _jsxs(SettingsPanel, { accent: true, title: labels.mark.title, description: labels.mark.description, children: [_jsx(ImageField, { value: value.mark, onChange: (v) => onChange({ ...value, mark: v }), maxEdge: 256, labels: labels.mark.field, preview: (src) => (_jsx("img", { src: src, alt: "", className: "size-12 object-contain" })) }), !value.mark ? (_jsxs("span", { className: "mt-4 flex items-center gap-3", children: [_jsx(LogoTile, { name: fallbackName }), _jsx(Label, { children: labels.mark.fallbackNote })] })) : null] }), _jsx(SettingsPanel, { accent: true, title: labels.brand.title, description: labels.brand.description, children: _jsx(ColorSwatches, { options: labels.brand.swatches, value: value.brand, onChange: (hex) => onChange({ ...value, brand: hex }), customLabel: labels.brand.custom }) }), _jsx(SettingsPanel, { accent: true, title: labels.theme.title, description: labels.theme.description, children: _jsx(ThemeCards, { value: value.theme, onChange: (t) => onChange({ ...value, theme: t }), labels: labels.theme }) }), _jsx(SettingsPanel, { accent: true, title: labels.rail.title, description: labels.rail.description, children: _jsx(Segmented, { label: labels.rail.group, value: value.rail, onChange: (r) => onChange({ ...value, rail: r }), options: [
19
+ { value: "narrow", label: labels.rail.narrow },
20
+ { value: "wide", label: labels.rail.wide },
21
+ { value: "free", label: labels.rail.free },
22
+ ] }) }), extra, value.logo ? (_jsx(SquarePicker, { open: picking, source: value.logo, onClose: () => setPicking(false), onPick: (square) => onChange({ ...value, mark: square }), labels: labels.picker })) : null, _jsxs("div", { className: "flex flex-wrap items-center justify-between gap-3", children: [_jsxs("span", { className: "flex flex-wrap items-center gap-3", children: [_jsx(Button, { variant: "primary", type: "submit", disabled: !dirty, busy: saving, busyLabel: labels.saving, children: labels.save }), _jsx(Button, { type: "button", disabled: saving, onClick: onReset, children: labels.reset })] }), _jsx(Label, { children: dirty ? labels.dirty : labels.clean })] })] }));
23
+ }
@@ -15,4 +15,5 @@ export { AuthTemplate, AuthProviders } from "./auth-template.js";
15
15
  export { WizardTemplate, type WizardStep, type WizardTemplateProps } from "./wizard-template.js";
16
16
  export { PublicTemplate, type PublicState, type PublicTemplateProps } from "./public-template.js";
17
17
  export { AppShell, type NavEntry, type AppShellProps } from "./app-shell.js";
18
+ export { AppearanceTemplate, type Appearance, type AppearanceLabels, } from "./appearance-template.js";
18
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/patterns/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EACL,SAAS,EACT,WAAW,EACX,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,aAAa,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EACL,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,qBAAqB,GAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,cAAc,EACd,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,mBAAmB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,qBAAqB,GAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,KAAK,UAAU,EAAE,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACjG,OAAO,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAClG,OAAO,EAAE,QAAQ,EAAE,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/patterns/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,EACL,SAAS,EACT,WAAW,EACX,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,aAAa,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EACL,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,qBAAqB,GAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,cAAc,EACd,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,mBAAmB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,gBAAgB,EAChB,aAAa,EACb,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,qBAAqB,GAC3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,KAAK,UAAU,EAAE,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AACjG,OAAO,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAClG,OAAO,EAAE,QAAQ,EAAE,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EACL,kBAAkB,EAClB,KAAK,UAAU,EACf,KAAK,gBAAgB,GACtB,MAAM,0BAA0B,CAAC"}
@@ -19,3 +19,4 @@ export { AuthTemplate, AuthProviders } from "./auth-template.js";
19
19
  export { WizardTemplate } from "./wizard-template.js";
20
20
  export { PublicTemplate } from "./public-template.js";
21
21
  export { AppShell } from "./app-shell.js";
22
+ export { AppearanceTemplate, } from "./appearance-template.js";
@@ -40,9 +40,20 @@ export declare function SettingsTemplate({ sections, activeSection, title, subti
40
40
  * Bir değer üst bir düzeyden miras alınıyorsa, bunu bilmeden değiştirmek üç
41
41
  * ekran açıp "bu alan neden böyle yazıyor" diye aramak demek.
42
42
  */
43
- export declare function SettingsPanel({ title, description, inheritedFrom, children, }: {
43
+ export declare function SettingsPanel({ title, description, inheritedFrom, accent, children, }: {
44
44
  title: string;
45
45
  description?: string;
46
+ /**
47
+ * A brand-coloured edge down the left of the panel. TR: Panelin sol kenarında marka renginde
48
+ * bir şerit.
49
+ *
50
+ * For screens whose SUBJECT is the brand: on an appearance screen the blocks have to separate
51
+ * from one another, and the thing that separates them should be the colour itself. Elsewhere
52
+ * it would be decoration. TR: Konusu MARKANIN KENDİSİ olan ekranlar için: bir görünüm
53
+ * ekranında bloklar birbirinden ayrılmalı ve ayıran şey rengin kendisi olmalı. Başka yerde
54
+ * süs olurdu.
55
+ */
56
+ accent?: boolean;
46
57
  /** Like "inherited from the workspace": a full sentence written by the caller. TR: "çalışma alanından geliyor" gibi, çağıran tarafından yazılmış tam cümle. */
47
58
  inheritedFrom?: string;
48
59
  children: ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"settings-template.d.ts","sourceRoot":"","sources":["../../src/patterns/settings-template.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,aAAa,EACnB,MAAM,aAAa,CAAC;AAErB;;;;;GAKG;AAEH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;AAE1D,kCAAkC;AAClC,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,WAAW,GAAG,OAAO,CAAC;AAE/D,MAAM,MAAM,eAAe,GAAG;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,aAAa,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;IACrC,6EAA6E;IAC7E,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gHAAgH;IAChH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;KACtC,GAAG,WAAW,CAAC;IAChB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,aAAa,EACb,KAAK,EACL,QAAQ,EACR,OAAO,EACP,KAAe,EACf,KAAK,EACL,aAAa,EAAE,IAAgB,EAC/B,MAAM,EACN,QAAQ,GACT,EAAE,qBAAqB,+BAsDvB;AA0BD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,WAAW,EACX,aAAa,EACb,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+JAA+J;IAC/J,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,SAAS,CAAC;CACrB,+BA0BA"}
1
+ {"version":3,"file":"settings-template.d.ts","sourceRoot":"","sources":["../../src/patterns/settings-template.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,aAAa,EACnB,MAAM,aAAa,CAAC;AAErB;;;;;GAKG;AAEH,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,CAAC;AAE1D,kCAAkC;AAClC,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,WAAW,GAAG,OAAO,CAAC;AAE/D,MAAM,MAAM,eAAe,GAAG;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,aAAa,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,EAAE,SAAS,eAAe,EAAE,CAAC;IACrC,6EAA6E;IAC7E,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gHAAgH;IAChH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;KACtC,GAAG,WAAW,CAAC;IAChB,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,aAAa,EACb,KAAK,EACL,QAAQ,EACR,OAAO,EACP,KAAe,EACf,KAAK,EACL,aAAa,EAAE,IAAgB,EAC/B,MAAM,EACN,QAAQ,GACT,EAAE,qBAAqB,+BAsDvB;AA0BD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,WAAW,EACX,aAAa,EACb,MAAc,EACd,QAAQ,GACT,EAAE;IACD,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;;;;;OASG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,+JAA+J;IAC/J,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,SAAS,CAAC;CACrB,+BA6BA"}
@@ -28,6 +28,6 @@ function ScopeMark({ scope, label }) {
28
28
  * Bir değer üst bir düzeyden miras alınıyorsa, bunu bilmeden değiştirmek üç
29
29
  * ekran açıp "bu alan neden böyle yazıyor" diye aramak demek.
30
30
  */
31
- export function SettingsPanel({ title, description, inheritedFrom, children, }) {
32
- return (_jsxs("section", { className: "tamga-card tamga-card-open tamga-gutter py-4", "data-panel": title, children: [_jsxs("div", { className: "flex flex-wrap items-baseline gap-2", children: [_jsx("h3", { className: "text-subhead font-semibold text-ink", children: title }), inheritedFrom ? (_jsx("span", { className: "text-caption text-ink-faint", "data-inherited-from": true, children: inheritedFrom })) : null] }), description ? (_jsx("p", { className: "mt-1 text-small leading-relaxed text-ink-soft", children: description })) : null, _jsx("div", { className: "mt-4", children: children })] }));
31
+ export function SettingsPanel({ title, description, inheritedFrom, accent = false, children, }) {
32
+ return (_jsxs("section", { className: `tamga-card tamga-card-open tamga-gutter py-4${accent ? " tamga-settings-panel-accent" : ""}`, "data-panel": title, children: [_jsxs("div", { className: "flex flex-wrap items-baseline gap-2", children: [_jsx("h3", { className: "text-subhead font-semibold text-ink", children: title }), inheritedFrom ? (_jsx("span", { className: "text-caption text-ink-faint", "data-inherited-from": true, children: inheritedFrom })) : null] }), description ? (_jsx("p", { className: "mt-1 text-small leading-relaxed text-ink-soft", children: description })) : null, _jsx("div", { className: "mt-4", children: children })] }));
33
33
  }
@@ -16,7 +16,7 @@ export { PlainLink, type LinkComponent } from "../components/link.js";
16
16
  export type TemplateError = {
17
17
  /** The envelope's machine-read `code`: stable, never translated, the thing support branches on. TR: Zarfın makine tarafından okunan `code`u: kararlı, çevrilmez, desteğin dallandığı şey. */
18
18
  code?: string;
19
- /** `meta.request_id`; the one thread that leads to the server log. TR: `meta.request_id`; sunucu günlüğüne giden tek iplik. */
19
+ /** The id that leads to the server log for this one failure. TR: Bu tek hatayı sunucu kaydına götüren kimlik. */
20
20
  requestId?: string;
21
21
  /** Only when the caller really can retry; without it the button is not drawn at all. TR: Yalnız çağıran gerçekten yeniden deneyebiliyorsa; yoksa düğme hiç çizilmiyor. */
22
22
  onRetry?: () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/patterns/shared.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC;;;;;;;;GAQG;AAKH,OAAO,EAAE,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtE;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,6LAA6L;IAC7L,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,+HAA+H;IAC/H,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0KAA0K;IAC1K,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,oFAAoF;AACpF,wBAAgB,WAAW,CAAC,KAAK,CAAC,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS,CAErE;AAED,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;IAAE,KAAK,CAAC,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,+BAU1F;AAED,8DAA8D;AAC9D,wBAAgB,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAA;CAAE,+BAQ/E"}
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/patterns/shared.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC;;;;;;;;GAQG;AAKH,OAAO,EAAE,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtE;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,6LAA6L;IAC7L,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,iHAAiH;IACjH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0KAA0K;IAC1K,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,oFAAoF;AACpF,wBAAgB,WAAW,CAAC,KAAK,CAAC,EAAE,aAAa,GAAG,MAAM,GAAG,SAAS,CAErE;AAED,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;IAAE,KAAK,CAAC,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,WAAW,CAAA;CAAE,+BAU1F;AAED,8DAA8D;AAC9D,wBAAgB,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAA;CAAE,+BAQ/E"}
package/dist/styles.css CHANGED
@@ -1,5 +1,3 @@
1
- /* tamga-ui — tek satırda her şey. Ayrı ayrı da alınabilir:
2
- @import "tamga-ui/theme.css"; sadece token'lar
3
- @import "tamga-ui/kit.css"; sadece sınıflar (saf CSS) */
1
+ /*! tamga-ui 0.3.0 · MIT · https://tamga.org.tr */
4
2
  @import "./theme.css";
5
3
  @import "./kit.css";