tamga-ui 0.14.1 → 0.15.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.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,19 @@ Versions follow [semver](https://semver.org/). Through `0.x`, breaking changes m
5
5
 
6
6
  > 🇹🇷 Türkçe için [tamga.org.tr/tr](https://tamga.org.tr/tr).
7
7
 
8
+ ## 0.15.0
9
+
10
+ > The shell takes a strip above everything; the caution gets its own button.
11
+
12
+ ### Added
13
+
14
+ - **`Button` and `MiniButton` `variant="caution"`** · the step that clears a caution (verify an
15
+ address, renew a card), drawn like `success` and `danger`: the caution's ink as edge, text and
16
+ base, its soft tone on hover.
17
+ - **`AppShell` `banner`** · a strip above the whole shell, the rail and the top bar included, for
18
+ an account-wide condition the product will not let the reader overlook. The screen stays one
19
+ viewport tall.
20
+
8
21
  ## 0.14.1
9
22
 
10
23
  > The score ring says the exact score; a banner's tile sits on the middle of its text.
@@ -724,15 +737,6 @@ Versions follow [semver](https://semver.org/). Through `0.x`, breaking changes m
724
737
  > A light palette takes the brand's hue, and two things a pointer could feel: a checkbox
725
738
  > that flickered under hover and a two-line label that centred itself.
726
739
 
727
- ### Fixed
728
-
729
- - **`Checkbox` no longer centres a two-line label.** It renders a `<button>`, and a browser centres
730
- button text; every other choice surface in the kit already neutralises that (`RadioGroup`'s list
731
- look, `.tamga-choice-card`), this one did not. A one-word label never showed it; a label with a
732
- description under it did.
733
-
734
- ## Unreleased
735
-
736
740
  ### Changed
737
741
 
738
742
  - **A light palette now carries the brand's hue.** `makePalette` fixed every light surface at hue
@@ -745,6 +749,10 @@ Versions follow [semver](https://semver.org/). Through `0.x`, breaking changes m
745
749
 
746
750
  ### Fixed
747
751
 
752
+ - **`Checkbox` no longer centres a two-line label.** It renders a `<button>`, and a browser centres
753
+ button text; every other choice surface in the kit already neutralises that (`RadioGroup`'s list
754
+ look, `.tamga-choice-card`), this one did not. A one-word label never showed it; a label with a
755
+ description under it did.
748
756
  - **A hovered checkbox no longer flickers.** The box lifts a pixel on hover, and the hover target
749
757
  was the box itself: a pointer resting on its lower or right edge lost the box as it moved, the
750
758
  hover ended, the box came back, the hover started again — a loop that does not stop, because the
@@ -5,7 +5,7 @@ import { type VariantProps } from "class-variance-authority";
5
5
  * Gerekçe: docs/gerekce/06-isaret-ve-ton.md
6
6
  */
7
7
  export declare const buttonVariants: (props?: ({
8
- variant?: "danger" | "ghost" | "link" | "primary" | "quiet" | "secondary" | "soft" | "success" | null | undefined;
8
+ variant?: "caution" | "danger" | "ghost" | "link" | "primary" | "quiet" | "secondary" | "soft" | "success" | null | undefined;
9
9
  size?: "base" | "lg" | "sm" | null | undefined;
10
10
  full?: boolean | null | undefined;
11
11
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
@@ -53,7 +53,7 @@ export declare function IconButton({ className, size, variant, "aria-label": lab
53
53
  "aria-label": string;
54
54
  }): import("react").JSX.Element;
55
55
  export declare const miniButtonVariants: (props?: ({
56
- variant?: "primary" | "quiet" | "secondary" | "soft" | null | undefined;
56
+ variant?: "caution" | "primary" | "quiet" | "secondary" | "soft" | null | undefined;
57
57
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
58
58
  /** Ailenin en sıkı üyesi: 28px, 2px taban, ve hover'da kenarı vurguya dönüyor. */
59
59
  export declare function MiniButton({ className, variant, "aria-label": label, ...props }: React.ComponentProps<"button"> & VariantProps<typeof miniButtonVariants> & {
@@ -1 +1 @@
1
- {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../src/components/button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAIlE;;;;GAIG;AAEH,eAAO,MAAM,cAAc;;;;8EAwCzB,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,GACtD,YAAY,CAAC,OAAO,cAAc,CAAC,GAAG;IACpC;;;;;;;;OAQG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;CAC3D,CAAC;AAEJ,wBAAgB,MAAM,CAAC,EACrB,SAAS,EACT,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,IAAY,EACZ,SAAS,EACT,QAAiB,EACjB,QAAQ,EACR,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,WAAW,+BA8Bb;AAID,eAAO,MAAM,kBAAkB;;;8EAoB7B,CAAC;AAEH;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,IAAI,EACJ,OAAO,EACP,YAAY,EAAE,KAAK,EACnB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,GAC/B,YAAY,CAAC,OAAO,kBAAkB,CAAC,GAAG;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,+BASnE;AAED,eAAO,MAAM,kBAAkB;;8EAW7B,CAAC;AAEH,kFAAkF;AAClF,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,OAAO,EACP,YAAY,EAAE,KAAK,EACnB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,GAC/B,YAAY,CAAC,OAAO,kBAAkB,CAAC,GAAG;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,+BASnE"}
1
+ {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../src/components/button.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAIlE;;;;GAIG;AAEH,eAAO,MAAM,cAAc;;;;8EA2CzB,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,GACtD,YAAY,CAAC,OAAO,cAAc,CAAC,GAAG;IACpC;;;;;;;;OAQG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;;;;;OAQG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;CAC3D,CAAC;AAEJ,wBAAgB,MAAM,CAAC,EACrB,SAAS,EACT,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,IAAY,EACZ,SAAS,EACT,QAAiB,EACjB,QAAQ,EACR,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,WAAW,+BA8Bb;AAID,eAAO,MAAM,kBAAkB;;;8EAoB7B,CAAC;AAEH;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,IAAI,EACJ,OAAO,EACP,YAAY,EAAE,KAAK,EACnB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,GAC/B,YAAY,CAAC,OAAO,kBAAkB,CAAC,GAAG;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,+BASnE;AAED,eAAO,MAAM,kBAAkB;;8EAa7B,CAAC;AAEH,kFAAkF;AAClF,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,OAAO,EACP,YAAY,EAAE,KAAK,EACnB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,GAC/B,YAAY,CAAC,OAAO,kBAAkB,CAAC,GAAG;IAAE,YAAY,EAAE,MAAM,CAAA;CAAE,+BASnE"}
@@ -22,6 +22,9 @@ export const buttonVariants = cva("tamga-btn", {
22
22
  success: "tamga-btn-success",
23
23
  /* destructive: findable and deliberate, not loud */
24
24
  danger: "tamga-btn-danger",
25
+ /* the step that clears a caution (verify an address, renew a card): the caution's ink as an
26
+ edge, like success and danger, never a fill */
27
+ caution: "tamga-btn-caution",
25
28
  /* no edge, no offset, no lift — it is not an object on the page */
26
29
  ghost: "tamga-btn-ghost",
27
30
  /* reads as a link, behaves as a button. For a click that runs code but
@@ -92,6 +95,8 @@ export const miniButtonVariants = cva("tamga-mini-btn", {
92
95
  soft: "tamga-mini-btn-soft",
93
96
  /* bir satırda üç eylem varsa üçü birden nesne olamaz */
94
97
  quiet: "tamga-mini-btn-quiet",
98
+ /* bir uyarıyı kapatan adım, uyarının içinde: kenar ve taban uyarının mürekkebi */
99
+ caution: "tamga-mini-btn-caution",
95
100
  },
96
101
  },
97
102
  defaultVariants: { variant: "secondary" },
package/dist/fonts.css CHANGED
@@ -1,4 +1,4 @@
1
- /*! tamga-ui 0.14.1 · MIT · https://tamga.org.tr */
1
+ /*! tamga-ui 0.15.0 · MIT · https://tamga.org.tr */
2
2
  @font-face {
3
3
  font-family: "Red Hat Display";
4
4
  font-style: normal;
package/dist/kit.css CHANGED
@@ -1,4 +1,4 @@
1
- /*! tamga-ui 0.14.1 · MIT · https://tamga.org.tr */
1
+ /*! tamga-ui 0.15.0 · MIT · https://tamga.org.tr */
2
2
  :root {
3
3
 
4
4
  --overlay-gap: 8px;
@@ -242,6 +242,10 @@
242
242
  border-radius: var(--radius-panel);
243
243
  }
244
244
 
245
+ .tamga-app-banner {
246
+ flex-shrink: 0;
247
+ }
248
+
245
249
  .tamga-card {
246
250
  border-radius: var(--radius-card);
247
251
  border: 1px solid var(--color-edge);
@@ -697,6 +701,16 @@
697
701
  transform: translate(3px, 3px);
698
702
  box-shadow: 0 0 0 var(--color-critical);
699
703
  }
704
+ .tamga-btn-caution.tamga-btn-sm {
705
+ box-shadow: 3px 3px 0 var(--color-warn);
706
+ }
707
+ .tamga-btn-caution.tamga-btn-sm:not(:disabled):hover {
708
+ box-shadow: 4px 4px 0 var(--color-warn);
709
+ }
710
+ .tamga-btn-caution.tamga-btn-sm:not(:disabled):active {
711
+ transform: translate(3px, 3px);
712
+ box-shadow: 0 0 0 var(--color-warn);
713
+ }
700
714
 
701
715
  .tamga-btn-primary {
702
716
  background: var(--color-accent);
@@ -754,6 +768,20 @@
754
768
  box-shadow: 0 0 0 var(--color-critical);
755
769
  }
756
770
 
771
+ .tamga-btn-caution {
772
+ background: var(--color-shell);
773
+ border-color: var(--color-warn);
774
+ color: var(--color-warn);
775
+ box-shadow: 4px 4px 0 var(--color-warn);
776
+ }
777
+ .tamga-btn-caution:not(:disabled):hover {
778
+ background: var(--color-warn-bg);
779
+ box-shadow: 5px 5px 0 var(--color-warn);
780
+ }
781
+ .tamga-btn-caution:not(:disabled):active {
782
+ box-shadow: 0 0 0 var(--color-warn);
783
+ }
784
+
757
785
  .tamga-btn-ghost {
758
786
  background: transparent;
759
787
  border-color: transparent;
@@ -1604,6 +1632,18 @@
1604
1632
  box-shadow: 2px 2px 0 var(--color-edge-strong);
1605
1633
  }
1606
1634
 
1635
+ .tamga-mini-btn-caution {
1636
+ border-color: var(--color-warn);
1637
+ color: var(--color-warn);
1638
+ box-shadow: 2px 2px 0 var(--color-warn);
1639
+ }
1640
+
1641
+ .tamga-mini-btn.tamga-mini-btn-caution:not(:disabled):hover {
1642
+ background: var(--color-warn-bg);
1643
+ border-color: var(--color-warn);
1644
+ box-shadow: 2px 2px 0 var(--color-warn);
1645
+ }
1646
+
1607
1647
  .tamga-mini-btn-quiet {
1608
1648
  border-color: var(--color-line);
1609
1649
  background: transparent;
@@ -69,6 +69,16 @@ export type AppShellProps = {
69
69
  * yalnız yerini garanti ediyor.
70
70
  */
71
71
  topbar?: ReactNode;
72
+ /**
73
+ * A strip above the whole shell, the rail and the top bar included: an account-wide condition
74
+ * the product will not let the reader overlook (an unverified address, a lapsed payment). The
75
+ * content and its tone are the caller's; the shell gives it the full width and keeps the screen
76
+ * one viewport tall. One strip, never a stack. TR: Kabuğun tamamının, ray ve üst şerit dahil,
77
+ * üstünde bir şerit: ürünün gözden kaçmasına izin vermediği hesap çapında bir durum (doğrulanmamış
78
+ * adres, aksamış ödeme). İçerik ve tonu çağıranın; kabuk ona tam genişliği veriyor ve ekranı tek
79
+ * görüntü boyunda tutuyor. Tek şerit, asla yığın.
80
+ */
81
+ banner?: ReactNode;
72
82
  /** A control at the foot of the rail: an expand/collapse button, say. TR: Rayın dibine giren kontrol: genişlet/daralt düğmesi gibi. */
73
83
  railFooter?: ReactNode;
74
84
  /**
@@ -104,5 +114,5 @@ export type AppShellProps = {
104
114
  };
105
115
  children: ReactNode;
106
116
  };
107
- export declare function AppShell({ brand, nav, activePath, rail, topbar, railFooter, mainClassName, linkComponent: Link, collapsibleSections, collapsedSections, onSectionToggle, labels, children, }: AppShellProps): import("react").JSX.Element;
117
+ export declare function AppShell({ brand, nav, activePath, rail, topbar, banner, railFooter, mainClassName, linkComponent: Link, collapsibleSections, collapsedSections, onSectionToggle, labels, children, }: AppShellProps): import("react").JSX.Element;
108
118
  //# sourceMappingURL=app-shell.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"app-shell.d.ts","sourceRoot":"","sources":["../../src/patterns/app-shell.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAI7C,OAAO,EAAa,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5D;;;;;GAKG;AAEH,MAAM,MAAM,QAAQ,GAAG;IACrB;;;OAGG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,wKAAwK;IACxK,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,cAAc,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;IAC1C;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,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;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,sHAAsH;IACtH,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3D,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,EACb,aAAa,EAAE,IAAgB,EAC/B,mBAA0B,EAC1B,iBAAiB,EACjB,eAAe,EACf,MAAM,EACN,QAAQ,GACT,EAAE,aAAa,+BA+Kf"}
1
+ {"version":3,"file":"app-shell.d.ts","sourceRoot":"","sources":["../../src/patterns/app-shell.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAI7C,OAAO,EAAa,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5D;;;;;GAKG;AAEH,MAAM,MAAM,QAAQ,GAAG;IACrB;;;OAGG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,wKAAwK;IACxK,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,cAAc,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;IAC1C;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,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;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,uIAAuI;IACvI,UAAU,CAAC,EAAE,SAAS,CAAC;IACvB;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;;;OAMG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,sHAAsH;IACtH,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC3D,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,MAAM,EACN,UAAU,EACV,aAAa,EACb,aAAa,EAAE,IAAgB,EAC/B,mBAA0B,EAC1B,iBAAiB,EACjB,eAAe,EACf,MAAM,EACN,QAAQ,GACT,EAAE,aAAa,+BAoLf"}
@@ -6,7 +6,7 @@ import { CaretDown } from "../components/icons.js";
6
6
  import { RailLink } from "../components/rail-link.js";
7
7
  import { cn } from "../lib/cn.js";
8
8
  import { PlainLink } from "./shared.js";
9
- export function AppShell({ brand, nav, activePath, rail = "narrow", topbar, railFooter, mainClassName, linkComponent: Link = PlainLink, collapsibleSections = true, collapsedSections, onSectionToggle, labels, children, }) {
9
+ export function AppShell({ brand, nav, activePath, rail = "narrow", topbar, banner, railFooter, mainClassName, linkComponent: Link = PlainLink, collapsibleSections = true, collapsedSections, onSectionToggle, labels, children, }) {
10
10
  /* Bir giriş kendi alt ağacına sahip, ve EN UZUN EŞLEŞEN KAZANIR: kökün `/`
11
11
  olmadığı bir panelde kök giriş altındaki her rotayı yutuyordu.
12
12
  Gerekçe: docs/gerekce/08-blok-ve-sablon.md */
@@ -45,10 +45,10 @@ export function AppShell({ brand, nav, activePath, rail = "narrow", topbar, rail
45
45
  gruplar.push({ bolum: entry.section, girisler: [entry] });
46
46
  }
47
47
  const kimlik = useId();
48
- return (_jsxs("div", { className: "flex h-dvh w-full overflow-hidden bg-rail text-ink-soft", children: [_jsxs("aside", { className: `flex shrink-0 flex-col gap-2 bg-rail 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: gruplar.map((grup, gi) => {
49
- const id = `${kimlik}-${gi}`;
50
- const acik = grup.bolum ? acikMi(grup.bolum) : true;
51
- const kilitli = grup.bolum !== undefined && grup.bolum === aktifBolum;
52
- return (_jsxs(Fragment, { children: [grup.bolum ? (wide ? (collapsibleSections ? (_jsxs("button", { type: "button", className: cn("tamga-rail-section", gi > 0 && "mt-3"), "aria-expanded": acik, "aria-controls": id, "aria-disabled": kilitli || undefined, "data-locked": kilitli || undefined, onClick: () => degistir(grup.bolum), children: [grup.bolum, _jsx(Icon, { icon: CaretDown, size: "xs", weight: "bold", className: "tamga-rail-section-caret" })] })) : (_jsx("p", { className: `px-2.5 text-caption font-bold uppercase tracking-label text-ink-faint ${gi > 0 ? "mt-5 pb-1.5" : "pb-1.5"}`, children: grup.bolum }))) : gi > 0 ? (_jsx("span", { className: "my-1.5 h-0 w-6 shrink-0 border-t border-line", "aria-hidden": true })) : null) : null, _jsx("div", { id: id, className: "tamga-rail-group-body", "data-open": acik, inert: !acik, children: _jsx("div", { className: wide ? undefined : "items-center", children: grup.girisler.map((entry) => (_jsx(RailLink, { href: entry.href, onClick: entry.onSelect, label: entry.label, active: isCurrent(entry), showLabel: wide, linkComponent: Link, "data-nav": entry.key, children: _jsx(Icon, { icon: entry.icon, size: "md", weight: isCurrent(entry) ? "fill" : "regular" }) }, entry.key))) }) })] }, grup.bolum ?? `_${gi}`));
53
- }) }), 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 bg-band py-4", children: topbar }), _jsx("div", { className: "min-h-0 flex-1 overflow-hidden pr-4 pb-4", children: _jsx("main", { className: cn("tamga-surface tamga-app-main relative h-full min-h-0 overflow-y-auto", mainClassName), children: children }) })] })] }));
48
+ return (_jsxs("div", { className: "flex h-dvh w-full flex-col overflow-hidden bg-rail text-ink-soft", children: [banner ? _jsx("div", { className: "tamga-app-banner", children: banner }) : null, _jsxs("div", { className: "flex min-h-0 w-full flex-1", children: [_jsxs("aside", { className: `flex shrink-0 flex-col gap-2 bg-rail 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: gruplar.map((grup, gi) => {
49
+ const id = `${kimlik}-${gi}`;
50
+ const acik = grup.bolum ? acikMi(grup.bolum) : true;
51
+ const kilitli = grup.bolum !== undefined && grup.bolum === aktifBolum;
52
+ return (_jsxs(Fragment, { children: [grup.bolum ? (wide ? (collapsibleSections ? (_jsxs("button", { type: "button", className: cn("tamga-rail-section", gi > 0 && "mt-3"), "aria-expanded": acik, "aria-controls": id, "aria-disabled": kilitli || undefined, "data-locked": kilitli || undefined, onClick: () => degistir(grup.bolum), children: [grup.bolum, _jsx(Icon, { icon: CaretDown, size: "xs", weight: "bold", className: "tamga-rail-section-caret" })] })) : (_jsx("p", { className: `px-2.5 text-caption font-bold uppercase tracking-label text-ink-faint ${gi > 0 ? "mt-5 pb-1.5" : "pb-1.5"}`, children: grup.bolum }))) : gi > 0 ? (_jsx("span", { className: "my-1.5 h-0 w-6 shrink-0 border-t border-line", "aria-hidden": true })) : null) : null, _jsx("div", { id: id, className: "tamga-rail-group-body", "data-open": acik, inert: !acik, children: _jsx("div", { className: wide ? undefined : "items-center", children: grup.girisler.map((entry) => (_jsx(RailLink, { href: entry.href, onClick: entry.onSelect, label: entry.label, active: isCurrent(entry), showLabel: wide, linkComponent: Link, "data-nav": entry.key, children: _jsx(Icon, { icon: entry.icon, size: "md", weight: isCurrent(entry) ? "fill" : "regular" }) }, entry.key))) }) })] }, grup.bolum ?? `_${gi}`));
53
+ }) }), 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 bg-band py-4", children: topbar }), _jsx("div", { className: "min-h-0 flex-1 overflow-hidden pr-4 pb-4", children: _jsx("main", { className: cn("tamga-surface tamga-app-main relative h-full min-h-0 overflow-y-auto", mainClassName), children: children }) })] })] })] }));
54
54
  }
package/dist/styles.css CHANGED
@@ -1,4 +1,4 @@
1
- /*! tamga-ui 0.14.1 · MIT · https://tamga.org.tr */
1
+ /*! tamga-ui 0.15.0 · MIT · https://tamga.org.tr */
2
2
  @import "./fonts.css";
3
3
  @import "./theme.css";
4
4
  @import "./kit.css";
package/dist/theme.css CHANGED
@@ -1,4 +1,4 @@
1
- /*! tamga-ui 0.14.1 · MIT · https://tamga.org.tr */
1
+ /*! tamga-ui 0.15.0 · MIT · https://tamga.org.tr */
2
2
  @custom-variant dark (&:is(.dark *));
3
3
 
4
4
  @theme static {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tamga-ui",
3
- "version": "0.14.1",
3
+ "version": "0.15.0",
4
4
  "description": "Mantıksal's shared interface library: tokens, physics and components.",
5
5
  "license": "MIT",
6
6
  "type": "module",