@lindle/linoardo 1.0.23 → 1.0.25

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 (70) hide show
  1. package/dist/alert.cjs +18 -0
  2. package/dist/alert.cjs.map +1 -0
  3. package/dist/alert.d.cts +9 -0
  4. package/dist/alert.d.ts +9 -0
  5. package/dist/alert.js +3 -0
  6. package/dist/alert.js.map +1 -0
  7. package/dist/app-bar.cjs +168 -0
  8. package/dist/app-bar.cjs.map +1 -0
  9. package/dist/app-bar.d.cts +25 -0
  10. package/dist/app-bar.d.ts +25 -0
  11. package/dist/app-bar.js +3 -0
  12. package/dist/app-bar.js.map +1 -0
  13. package/dist/badge.cjs +205 -0
  14. package/dist/badge.cjs.map +1 -0
  15. package/dist/badge.d.cts +71 -0
  16. package/dist/badge.d.ts +71 -0
  17. package/dist/badge.js +3 -0
  18. package/dist/badge.js.map +1 -0
  19. package/dist/block.cjs +70 -0
  20. package/dist/block.cjs.map +1 -0
  21. package/dist/block.d.cts +32 -0
  22. package/dist/block.d.ts +32 -0
  23. package/dist/block.js +3 -0
  24. package/dist/block.js.map +1 -0
  25. package/dist/chunk-5GT6L4BE.js +48 -0
  26. package/dist/chunk-5GT6L4BE.js.map +1 -0
  27. package/dist/chunk-67BAO35I.js +146 -0
  28. package/dist/chunk-67BAO35I.js.map +1 -0
  29. package/dist/chunk-6SKW43XI.js +14 -0
  30. package/dist/chunk-6SKW43XI.js.map +1 -0
  31. package/dist/{chunk-JGEXEDKS.js → chunk-AUFMBVXA.js} +5 -5
  32. package/dist/{chunk-JGEXEDKS.js.map → chunk-AUFMBVXA.js.map} +1 -1
  33. package/dist/{chunk-SAGQYMS3.js → chunk-BZVDAMMY.js} +13 -16
  34. package/dist/chunk-BZVDAMMY.js.map +1 -0
  35. package/dist/chunk-HIRPMCQJ.js +183 -0
  36. package/dist/chunk-HIRPMCQJ.js.map +1 -0
  37. package/dist/{chunk-67USTSXI.js → chunk-KI4DBZ2V.js} +5 -3
  38. package/dist/chunk-KI4DBZ2V.js.map +1 -0
  39. package/dist/chunk-KQOR3C7E.js +16 -0
  40. package/dist/chunk-KQOR3C7E.js.map +1 -0
  41. package/dist/chunk-SCJMH5VE.js +469 -0
  42. package/dist/chunk-SCJMH5VE.js.map +1 -0
  43. package/dist/index.cjs +731 -72
  44. package/dist/index.cjs.map +1 -1
  45. package/dist/index.d.cts +8 -55
  46. package/dist/index.d.ts +8 -55
  47. package/dist/index.js +14 -190
  48. package/dist/index.js.map +1 -1
  49. package/dist/input.cjs +3 -3
  50. package/dist/input.cjs.map +1 -1
  51. package/dist/input.js +1 -1
  52. package/dist/notification.cjs +3 -1
  53. package/dist/notification.cjs.map +1 -1
  54. package/dist/notification.d.cts +1 -0
  55. package/dist/notification.d.ts +1 -0
  56. package/dist/notification.js +1 -1
  57. package/dist/select.cjs +10 -2
  58. package/dist/select.cjs.map +1 -1
  59. package/dist/select.js +2 -1
  60. package/dist/styles.css +13 -0
  61. package/dist/textarea.cjs +486 -0
  62. package/dist/textarea.cjs.map +1 -0
  63. package/dist/textarea.d.cts +29 -0
  64. package/dist/textarea.d.ts +29 -0
  65. package/dist/textarea.js +4 -0
  66. package/dist/textarea.js.map +1 -0
  67. package/package.json +36 -1
  68. package/readme.md +46 -0
  69. package/dist/chunk-67USTSXI.js.map +0 -1
  70. package/dist/chunk-SAGQYMS3.js.map +0 -1
package/dist/alert.cjs ADDED
@@ -0,0 +1,18 @@
1
+ 'use strict';
2
+
3
+ var tailwindMerge = require('tailwind-merge');
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+
6
+ // src/Info/Alert/index.tsx
7
+ var Alert = ({ className, children, ...rest }) => {
8
+ const classBase = "text-center p-4 bg-neutral-200 rounded-md ";
9
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { ...rest, className: tailwindMerge.twMerge("grid grid-cols-7 bg-neutral-200", className), children: [
10
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "col-span-1 pt-4 pl-4", children: /* @__PURE__ */ jsxRuntime.jsx("i", { className: "mdi mdi-google text-2xl" }) }),
11
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: tailwindMerge.twMerge("col-span-6", classBase), children })
12
+ ] });
13
+ };
14
+ var Alert_default = Alert;
15
+
16
+ module.exports = Alert_default;
17
+ //# sourceMappingURL=alert.cjs.map
18
+ //# sourceMappingURL=alert.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/Info/Alert/index.tsx"],"names":["jsxs","twMerge","jsx"],"mappings":";;;;;;AASA,IAAM,QAA8B,CAAC,EAAE,WAAW,QAAA,EAAU,GAAG,MAAK,KAAM;AACxE,EAAA,MAAM,SAAA,GAAY,6CAAA;AAElB,EAAA,uBACEA,eAAA,CAAC,SAAK,GAAG,IAAA,EAAM,WAAWC,qBAAA,CAAQ,iCAAA,EAAmC,SAAS,CAAA,EAC5E,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,SAAI,SAAA,EAAU,sBAAA,EACb,yCAAC,GAAA,EAAA,EAAE,SAAA,EAAU,2BAA0B,CAAA,EACzC,CAAA;AAAA,mCACC,KAAA,EAAA,EAAI,SAAA,EAAWD,sBAAQ,YAAA,EAAc,SAAS,GAAI,QAAA,EAAS;AAAA,GAAA,EAC9D,CAAA;AAEJ,CAAA;AACA,IAAO,aAAA,GAAQ","file":"alert.cjs","sourcesContent":["import { twMerge } from 'tailwind-merge';\n\nexport type AlertProps = {\n children?: React.ReactNode;\n} & React.HTMLAttributes<HTMLDivElement>;\n\n/**\n * Informational banner layout with icon column and message body.\n */\nconst Alert: React.FC<AlertProps> = ({ className, children, ...rest }) => {\n const classBase = 'text-center p-4 bg-neutral-200 rounded-md ';\n\n return (\n <div {...rest} className={twMerge('grid grid-cols-7 bg-neutral-200', className)}>\n <div className='col-span-1 pt-4 pl-4'>\n <i className='mdi mdi-google text-2xl'></i>\n </div>\n <div className={twMerge('col-span-6', classBase)}>{children}</div>\n </div>\n );\n};\nexport default Alert;\n"]}
@@ -0,0 +1,9 @@
1
+ type AlertProps = {
2
+ children?: React.ReactNode;
3
+ } & React.HTMLAttributes<HTMLDivElement>;
4
+ /**
5
+ * Informational banner layout with icon column and message body.
6
+ */
7
+ declare const Alert: React.FC<AlertProps>;
8
+
9
+ export { type AlertProps, Alert as default };
@@ -0,0 +1,9 @@
1
+ type AlertProps = {
2
+ children?: React.ReactNode;
3
+ } & React.HTMLAttributes<HTMLDivElement>;
4
+ /**
5
+ * Informational banner layout with icon column and message body.
6
+ */
7
+ declare const Alert: React.FC<AlertProps>;
8
+
9
+ export { type AlertProps, Alert as default };
package/dist/alert.js ADDED
@@ -0,0 +1,3 @@
1
+ export { Alert_default as default } from './chunk-KQOR3C7E.js';
2
+ //# sourceMappingURL=alert.js.map
3
+ //# sourceMappingURL=alert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"alert.js"}
@@ -0,0 +1,168 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var tailwindMerge = require('tailwind-merge');
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+
7
+ function _interopNamespace(e) {
8
+ if (e && e.__esModule) return e;
9
+ var n = Object.create(null);
10
+ if (e) {
11
+ Object.keys(e).forEach(function (k) {
12
+ if (k !== 'default') {
13
+ var d = Object.getOwnPropertyDescriptor(e, k);
14
+ Object.defineProperty(n, k, d.get ? d : {
15
+ enumerable: true,
16
+ get: function () { return e[k]; }
17
+ });
18
+ }
19
+ });
20
+ }
21
+ n.default = e;
22
+ return Object.freeze(n);
23
+ }
24
+
25
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
26
+
27
+ // src/Blocks/AppBar/index.tsx
28
+ var positionClasses = {
29
+ fixed: "fixed inset-x-0 top-0",
30
+ absolute: "absolute inset-x-0 top-0",
31
+ sticky: "sticky inset-x-0 top-0",
32
+ static: "static",
33
+ relative: "relative"
34
+ };
35
+ var colorClasses = {
36
+ primary: "bg-primary text-white",
37
+ surface: "bg-white text-gray-900 border-b border-gray-200",
38
+ muted: "bg-gray-50 text-gray-900 border-b border-gray-200",
39
+ dark: "bg-gray-900 text-white",
40
+ transparent: "bg-transparent text-inherit"
41
+ };
42
+ var AppBar = ({
43
+ title,
44
+ logo,
45
+ logoAlt = "Logo",
46
+ brandHref,
47
+ navigation = [],
48
+ actions,
49
+ position = "static",
50
+ color = "surface",
51
+ dense = false,
52
+ elevated = true,
53
+ contained = true,
54
+ titlePosition = "start",
55
+ className,
56
+ children,
57
+ ...rest
58
+ }) => {
59
+ const [mobileOpen, setMobileOpen] = React__namespace.useState(false);
60
+ const isDark = color === "primary" || color === "dark";
61
+ const isTransparent = color === "transparent";
62
+ const barClass = tailwindMerge.twMerge(
63
+ "app-bar z-40 w-full backdrop-blur-md",
64
+ positionClasses[position] ?? positionClasses.static,
65
+ colorClasses[color] ?? colorClasses.surface,
66
+ elevated && !isTransparent ? "shadow-sm shadow-black/10" : void 0,
67
+ "relative",
68
+ className
69
+ );
70
+ const innerClass = tailwindMerge.twMerge(
71
+ "mx-auto flex w-full items-center gap-4",
72
+ contained ? "max-w-6xl px-4 sm:px-6 lg:px-8" : "px-4",
73
+ dense ? "py-2.5" : "py-4"
74
+ );
75
+ const brandTextClass = isDark ? "text-white" : "text-gray-900";
76
+ const navBaseClass = tailwindMerge.twMerge(
77
+ "inline-flex items-center gap-2 rounded-xl px-3 py-2 text-sm font-medium transition focus-visible:outline-none",
78
+ isDark ? "hover:bg-white/10 focus-visible:ring-2 focus-visible:ring-white/70" : "hover:bg-gray-100 focus-visible:ring-2 focus-visible:ring-primary/50 focus-visible:ring-offset-2 focus-visible:ring-offset-transparent"
79
+ );
80
+ const navActiveClass = isDark ? "bg-white/15 text-white" : "bg-primary/10 text-primary";
81
+ const renderNavItem = (item, index) => {
82
+ const { href, label, active, onClick } = item;
83
+ const Component = href ? "a" : "button";
84
+ const resolvedHref = href && href.trim().length > 0 ? href : void 0;
85
+ return /* @__PURE__ */ jsxRuntime.jsx(
86
+ Component,
87
+ {
88
+ href: resolvedHref,
89
+ onClick,
90
+ className: tailwindMerge.twMerge(navBaseClass, active ? navActiveClass : void 0),
91
+ "aria-current": active ? "page" : void 0,
92
+ children: label
93
+ },
94
+ `${resolvedHref ?? "item"}-${index}`
95
+ );
96
+ };
97
+ const brandAlignClass = titlePosition === "center" ? "justify-self-center text-center" : titlePosition === "end" ? "justify-self-end text-right" : "justify-self-start";
98
+ const brandNode = title || logo ? /* @__PURE__ */ jsxRuntime.jsxs("div", { className: tailwindMerge.twMerge("flex min-w-0 items-center gap-3", brandAlignClass), children: [
99
+ logo ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex h-10 w-10 shrink-0 items-center justify-center overflow-hidden rounded-xl bg-white/10 ring-1 ring-black/5", children: /* @__PURE__ */ jsxRuntime.jsx(
100
+ "img",
101
+ {
102
+ src: logo,
103
+ alt: logoAlt,
104
+ className: "h-full w-full object-cover",
105
+ loading: "lazy",
106
+ decoding: "async"
107
+ }
108
+ ) }) : null,
109
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "min-w-0", children: title ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: tailwindMerge.twMerge("text-base font-semibold leading-tight", brandTextClass), children: brandHref ? /* @__PURE__ */ jsxRuntime.jsx("a", { href: brandHref, className: "hover:underline focus-visible:outline-none", children: title }) : title }) : null })
110
+ ] }) : null;
111
+ return /* @__PURE__ */ jsxRuntime.jsxs("header", { ...rest, className: barClass, children: [
112
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: innerClass, children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid w-full grid-cols-[auto_1fr_auto] items-center gap-3", children: [
113
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
114
+ navigation.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx(
115
+ "button",
116
+ {
117
+ type: "button",
118
+ "aria-label": "Otev\u0159\xEDt navigaci",
119
+ className: tailwindMerge.twMerge(
120
+ "inline-flex h-10 w-10 items-center justify-center rounded-xl text-xl sm:hidden",
121
+ isDark ? "text-white hover:bg-white/10 focus-visible:ring-2 focus-visible:ring-white/60" : "text-gray-700 hover:bg-gray-100 focus-visible:ring-2 focus-visible:ring-primary/40 focus-visible:ring-offset-2 focus-visible:ring-offset-transparent"
122
+ ),
123
+ "aria-expanded": mobileOpen,
124
+ onClick: () => setMobileOpen((open) => !open),
125
+ children: /* @__PURE__ */ jsxRuntime.jsx("i", { className: mobileOpen ? "mdi mdi-close" : "mdi mdi-menu", "aria-hidden": true })
126
+ }
127
+ ) : null,
128
+ navigation.length > 0 ? /* @__PURE__ */ jsxRuntime.jsx("nav", { className: "hidden items-center gap-1 sm:flex", "aria-label": "Hlavni navigace", children: navigation.map(renderNavItem) }) : null
129
+ ] }),
130
+ brandNode,
131
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "ml-auto flex items-center justify-end gap-2", children: [
132
+ children,
133
+ actions
134
+ ] })
135
+ ] }) }),
136
+ navigation.length > 0 && mobileOpen ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "sm:hidden", children: /* @__PURE__ */ jsxRuntime.jsx("nav", { className: "absolute inset-x-0 top-full border-t border-gray-200/70 bg-white/95 p-3 shadow-lg shadow-gray-900/5 backdrop-blur-md", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-2", "aria-label": "Mobilni navigace", children: navigation.map((item, index) => {
137
+ const { href, label, active, onClick } = item;
138
+ const Component = href ? "a" : "button";
139
+ const resolvedHref = href && href.trim().length > 0 ? href : void 0;
140
+ return /* @__PURE__ */ jsxRuntime.jsxs(
141
+ Component,
142
+ {
143
+ href: resolvedHref,
144
+ onClick: (event) => {
145
+ onClick?.(event);
146
+ setMobileOpen(false);
147
+ },
148
+ className: tailwindMerge.twMerge(
149
+ "flex items-center justify-between rounded-xl px-3 py-2 text-sm font-medium transition",
150
+ active ? "bg-primary/10 text-primary" : "text-gray-800 hover:bg-gray-100"
151
+ ),
152
+ "aria-current": active ? "page" : void 0,
153
+ children: [
154
+ label,
155
+ active ? /* @__PURE__ */ jsxRuntime.jsx("i", { className: "mdi mdi-circle-small text-primary", "aria-hidden": true }) : null
156
+ ]
157
+ },
158
+ `${resolvedHref ?? "mobile-item"}-${index}`
159
+ );
160
+ }) }) }) }) : null
161
+ ] });
162
+ };
163
+ AppBar.displayName = "AppBar";
164
+ var AppBar_default = AppBar;
165
+
166
+ module.exports = AppBar_default;
167
+ //# sourceMappingURL=app-bar.cjs.map
168
+ //# sourceMappingURL=app-bar.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/Blocks/AppBar/index.tsx"],"names":["React","twMerge","jsx","jsxs"],"mappings":"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","file":"app-bar.cjs","sourcesContent":["import * as React from 'react';\nimport { twMerge } from 'tailwind-merge';\n\nexport type AppBarNavItem = {\n label: React.ReactNode;\n href?: string;\n active?: boolean;\n onClick?: React.MouseEventHandler<HTMLAnchorElement | HTMLButtonElement>;\n};\n\nexport type AppBarProps = React.HTMLAttributes<HTMLElement> & {\n title?: React.ReactNode;\n logo?: string;\n logoAlt?: string;\n brandHref?: string;\n navigation?: AppBarNavItem[];\n actions?: React.ReactNode;\n position?: 'fixed' | 'absolute' | 'sticky' | 'static' | 'relative';\n color?: 'primary' | 'surface' | 'muted' | 'dark' | 'transparent';\n dense?: boolean;\n elevated?: boolean;\n contained?: boolean;\n titlePosition?: 'start' | 'center' | 'end';\n};\n\nconst positionClasses: Record<NonNullable<AppBarProps['position']>, string> = {\n fixed: 'fixed inset-x-0 top-0',\n absolute: 'absolute inset-x-0 top-0',\n sticky: 'sticky inset-x-0 top-0',\n static: 'static',\n relative: 'relative'\n};\n\nconst colorClasses: Record<NonNullable<AppBarProps['color']>, string> = {\n primary: 'bg-primary text-white',\n surface: 'bg-white text-gray-900 border-b border-gray-200',\n muted: 'bg-gray-50 text-gray-900 border-b border-gray-200',\n dark: 'bg-gray-900 text-white',\n transparent: 'bg-transparent text-inherit'\n};\n\nconst AppBar: React.FC<AppBarProps> = ({\n title,\n logo,\n logoAlt = 'Logo',\n brandHref,\n navigation = [],\n actions,\n position = 'static',\n color = 'surface',\n dense = false,\n elevated = true,\n contained = true,\n titlePosition = 'start',\n className,\n children,\n ...rest\n}) => {\n const [mobileOpen, setMobileOpen] = React.useState(false);\n\n const isDark = color === 'primary' || color === 'dark';\n const isTransparent = color === 'transparent';\n\n const barClass = twMerge(\n 'app-bar z-40 w-full backdrop-blur-md',\n positionClasses[position] ?? positionClasses.static,\n colorClasses[color] ?? colorClasses.surface,\n elevated && !isTransparent ? 'shadow-sm shadow-black/10' : undefined,\n 'relative',\n className\n );\n\n const innerClass = twMerge(\n 'mx-auto flex w-full items-center gap-4',\n contained ? 'max-w-6xl px-4 sm:px-6 lg:px-8' : 'px-4',\n dense ? 'py-2.5' : 'py-4'\n );\n\n const brandTextClass = isDark ? 'text-white' : 'text-gray-900';\n const navBaseClass = twMerge(\n 'inline-flex items-center gap-2 rounded-xl px-3 py-2 text-sm font-medium transition focus-visible:outline-none',\n isDark\n ? 'hover:bg-white/10 focus-visible:ring-2 focus-visible:ring-white/70'\n : 'hover:bg-gray-100 focus-visible:ring-2 focus-visible:ring-primary/50 focus-visible:ring-offset-2 focus-visible:ring-offset-transparent'\n );\n const navActiveClass = isDark ? 'bg-white/15 text-white' : 'bg-primary/10 text-primary';\n\n const renderNavItem = (item: AppBarNavItem, index: number) => {\n const { href, label, active, onClick } = item;\n const Component = href ? 'a' : 'button';\n const resolvedHref = href && href.trim().length > 0 ? href : undefined;\n return (\n <Component\n key={`${resolvedHref ?? 'item'}-${index}`}\n href={resolvedHref}\n onClick={onClick as never}\n className={twMerge(navBaseClass, active ? navActiveClass : undefined)}\n aria-current={active ? 'page' : undefined}\n >\n {label}\n </Component>\n );\n };\n\n const brandAlignClass =\n titlePosition === 'center'\n ? 'justify-self-center text-center'\n : titlePosition === 'end'\n ? 'justify-self-end text-right'\n : 'justify-self-start';\n\n const brandNode =\n title || logo ? (\n <div className={twMerge('flex min-w-0 items-center gap-3', brandAlignClass)}>\n {logo ? (\n <div className='flex h-10 w-10 shrink-0 items-center justify-center overflow-hidden rounded-xl bg-white/10 ring-1 ring-black/5'>\n <img\n src={logo}\n alt={logoAlt}\n className='h-full w-full object-cover'\n loading='lazy'\n decoding='async'\n />\n </div>\n ) : null}\n <div className='min-w-0'>\n {title ? (\n <div className={twMerge('text-base font-semibold leading-tight', brandTextClass)}>\n {brandHref ? (\n <a href={brandHref} className='hover:underline focus-visible:outline-none'>\n {title}\n </a>\n ) : (\n title\n )}\n </div>\n ) : null}\n </div>\n </div>\n ) : null;\n\n return (\n <header {...rest} className={barClass}>\n <div className={innerClass}>\n <div className='grid w-full grid-cols-[auto_1fr_auto] items-center gap-3'>\n <div className='flex items-center gap-2'>\n {navigation.length > 0 ? (\n <button\n type='button'\n aria-label='Otevřít navigaci'\n className={twMerge(\n 'inline-flex h-10 w-10 items-center justify-center rounded-xl text-xl sm:hidden',\n isDark\n ? 'text-white hover:bg-white/10 focus-visible:ring-2 focus-visible:ring-white/60'\n : 'text-gray-700 hover:bg-gray-100 focus-visible:ring-2 focus-visible:ring-primary/40 focus-visible:ring-offset-2 focus-visible:ring-offset-transparent'\n )}\n aria-expanded={mobileOpen}\n onClick={() => setMobileOpen(open => !open)}\n >\n <i className={mobileOpen ? 'mdi mdi-close' : 'mdi mdi-menu'} aria-hidden />\n </button>\n ) : null}\n {navigation.length > 0 ? (\n <nav className='hidden items-center gap-1 sm:flex' aria-label='Hlavni navigace'>\n {navigation.map(renderNavItem)}\n </nav>\n ) : null}\n </div>\n {brandNode}\n <div className='ml-auto flex items-center justify-end gap-2'>\n {children}\n {actions}\n </div>\n </div>\n </div>\n {navigation.length > 0 && mobileOpen ? (\n <div className='sm:hidden'>\n <nav className='absolute inset-x-0 top-full border-t border-gray-200/70 bg-white/95 p-3 shadow-lg shadow-gray-900/5 backdrop-blur-md'>\n <div className='flex flex-col gap-2' aria-label='Mobilni navigace'>\n {navigation.map((item, index) => {\n const { href, label, active, onClick } = item;\n const Component = href ? 'a' : 'button';\n const resolvedHref = href && href.trim().length > 0 ? href : undefined;\n return (\n <Component\n key={`${resolvedHref ?? 'mobile-item'}-${index}`}\n href={resolvedHref}\n onClick={event => {\n onClick?.(event as never);\n setMobileOpen(false);\n }}\n className={twMerge(\n 'flex items-center justify-between rounded-xl px-3 py-2 text-sm font-medium transition',\n active ? 'bg-primary/10 text-primary' : 'text-gray-800 hover:bg-gray-100'\n )}\n aria-current={active ? 'page' : undefined}\n >\n {label}\n {active ? (\n <i className='mdi mdi-circle-small text-primary' aria-hidden />\n ) : null}\n </Component>\n );\n })}\n </div>\n </nav>\n </div>\n ) : null}\n </header>\n );\n};\n\nAppBar.displayName = 'AppBar';\n\nexport default AppBar;\n"]}
@@ -0,0 +1,25 @@
1
+ import * as react from 'react';
2
+
3
+ type AppBarNavItem = {
4
+ label: react.ReactNode;
5
+ href?: string;
6
+ active?: boolean;
7
+ onClick?: react.MouseEventHandler<HTMLAnchorElement | HTMLButtonElement>;
8
+ };
9
+ type AppBarProps = react.HTMLAttributes<HTMLElement> & {
10
+ title?: react.ReactNode;
11
+ logo?: string;
12
+ logoAlt?: string;
13
+ brandHref?: string;
14
+ navigation?: AppBarNavItem[];
15
+ actions?: react.ReactNode;
16
+ position?: 'fixed' | 'absolute' | 'sticky' | 'static' | 'relative';
17
+ color?: 'primary' | 'surface' | 'muted' | 'dark' | 'transparent';
18
+ dense?: boolean;
19
+ elevated?: boolean;
20
+ contained?: boolean;
21
+ titlePosition?: 'start' | 'center' | 'end';
22
+ };
23
+ declare const AppBar: react.FC<AppBarProps>;
24
+
25
+ export { type AppBarNavItem, type AppBarProps, AppBar as default };
@@ -0,0 +1,25 @@
1
+ import * as react from 'react';
2
+
3
+ type AppBarNavItem = {
4
+ label: react.ReactNode;
5
+ href?: string;
6
+ active?: boolean;
7
+ onClick?: react.MouseEventHandler<HTMLAnchorElement | HTMLButtonElement>;
8
+ };
9
+ type AppBarProps = react.HTMLAttributes<HTMLElement> & {
10
+ title?: react.ReactNode;
11
+ logo?: string;
12
+ logoAlt?: string;
13
+ brandHref?: string;
14
+ navigation?: AppBarNavItem[];
15
+ actions?: react.ReactNode;
16
+ position?: 'fixed' | 'absolute' | 'sticky' | 'static' | 'relative';
17
+ color?: 'primary' | 'surface' | 'muted' | 'dark' | 'transparent';
18
+ dense?: boolean;
19
+ elevated?: boolean;
20
+ contained?: boolean;
21
+ titlePosition?: 'start' | 'center' | 'end';
22
+ };
23
+ declare const AppBar: react.FC<AppBarProps>;
24
+
25
+ export { type AppBarNavItem, type AppBarProps, AppBar as default };
@@ -0,0 +1,3 @@
1
+ export { AppBar_default as default } from './chunk-67BAO35I.js';
2
+ //# sourceMappingURL=app-bar.js.map
3
+ //# sourceMappingURL=app-bar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"app-bar.js"}
package/dist/badge.cjs ADDED
@@ -0,0 +1,205 @@
1
+ 'use strict';
2
+
3
+ var React = require('react');
4
+ var tailwindMerge = require('tailwind-merge');
5
+ var jsxRuntime = require('react/jsx-runtime');
6
+
7
+ function _interopNamespace(e) {
8
+ if (e && e.__esModule) return e;
9
+ var n = Object.create(null);
10
+ if (e) {
11
+ Object.keys(e).forEach(function (k) {
12
+ if (k !== 'default') {
13
+ var d = Object.getOwnPropertyDescriptor(e, k);
14
+ Object.defineProperty(n, k, d.get ? d : {
15
+ enumerable: true,
16
+ get: function () { return e[k]; }
17
+ });
18
+ }
19
+ });
20
+ }
21
+ n.default = e;
22
+ return Object.freeze(n);
23
+ }
24
+
25
+ var React__namespace = /*#__PURE__*/_interopNamespace(React);
26
+
27
+ // src/Info/Badge/index.tsx
28
+
29
+ // src/Info/Badge/states.badge.ts
30
+ var placementGeometries = {
31
+ "top-end": {
32
+ overlap: { top: 0, right: 0, translateX: "50%", translateY: "-50%" },
33
+ detached: { top: 0, right: 0, translateX: "50%", translateY: "-100%" }
34
+ },
35
+ "top-start": {
36
+ overlap: { top: 0, left: 0, translateX: "-50%", translateY: "-50%" },
37
+ detached: { top: 0, left: 0, translateX: "-50%", translateY: "-100%" }
38
+ },
39
+ "bottom-end": {
40
+ overlap: { bottom: 0, right: 0, translateX: "50%", translateY: "50%" },
41
+ detached: { bottom: 0, right: 0, translateX: "50%", translateY: "100%" }
42
+ },
43
+ "bottom-start": {
44
+ overlap: { bottom: 0, left: 0, translateX: "-50%", translateY: "50%" },
45
+ detached: { bottom: 0, left: 0, translateX: "-50%", translateY: "100%" }
46
+ },
47
+ center: {
48
+ overlap: { top: "50%", left: "50%", translateX: "-50%", translateY: "-50%" },
49
+ detached: { top: "50%", left: "50%", translateX: "-50%", translateY: "-50%" }
50
+ }
51
+ };
52
+ var badgePaletteClasses = {
53
+ primary: "bg-primary text-white",
54
+ neutral: "bg-gray-500 text-white",
55
+ info: "bg-sky-500 text-white",
56
+ success: "bg-emerald-500 text-white",
57
+ warning: "bg-amber-500 text-white",
58
+ danger: "bg-red-500 text-white",
59
+ surface: "bg-white text-gray-900 border border-gray-200",
60
+ bw: "bg-white text-black border border-black"
61
+ };
62
+ var resolvePlacementGeometry = (placement, overlap) => {
63
+ const group = placementGeometries[placement] ?? placementGeometries["top-end"];
64
+ return overlap ? group.overlap : group.detached;
65
+ };
66
+ var buildTranslateComponent = (base, delta) => {
67
+ if (!delta) {
68
+ return base;
69
+ }
70
+ const normalizedBase = base.endsWith("%") || base.endsWith("px") ? base : `${base}`;
71
+ const operator = delta >= 0 ? "+" : "-";
72
+ const magnitude = Math.abs(delta);
73
+ return `calc(${normalizedBase} ${operator} ${magnitude}px)`;
74
+ };
75
+ var iconBaseClasses = {
76
+ mdi: ["mdi"]
77
+ };
78
+ var resolveIconClassName = (icon) => {
79
+ if (!icon) {
80
+ return void 0;
81
+ }
82
+ if (typeof icon === "string") {
83
+ const trimmed = icon.trim();
84
+ if (!trimmed) {
85
+ return void 0;
86
+ }
87
+ if (trimmed.includes(" ")) {
88
+ return trimmed;
89
+ }
90
+ const normalized2 = trimmed.startsWith("mdi-") ? trimmed : `mdi-${trimmed}`;
91
+ return ["mdi", normalized2].join(" ");
92
+ }
93
+ const [library, providedName] = icon;
94
+ const normalizedLibrary = library.trim();
95
+ const base = iconBaseClasses[normalizedLibrary] ?? [normalizedLibrary];
96
+ const iconName = providedName.trim();
97
+ if (!iconName) {
98
+ return base.join(" ");
99
+ }
100
+ const normalized = iconName.startsWith("mdi-") ? iconName : `mdi-${iconName}`;
101
+ return Array.from(/* @__PURE__ */ new Set([...base, normalized])).join(" ");
102
+ };
103
+ var Badge = ({
104
+ children,
105
+ content,
106
+ max = 99,
107
+ showZero = false,
108
+ dot = false,
109
+ icon,
110
+ color = "primary",
111
+ placement = "top-end",
112
+ offset,
113
+ overlap = true,
114
+ bordered = false,
115
+ floating = false,
116
+ visible = true,
117
+ badgeClassName,
118
+ inline = true,
119
+ className,
120
+ ...rest
121
+ }) => {
122
+ const hasChildren = React__namespace.Children.count(children) > 0;
123
+ const iconClassName = resolveIconClassName(icon);
124
+ const isNumberContent = typeof content === "number" && Number.isFinite(content);
125
+ let displayValue = content;
126
+ if (!dot && !iconClassName && isNumberContent) {
127
+ const numericContent = content;
128
+ if (typeof max === "number" && Number.isFinite(max) && numericContent > max) {
129
+ displayValue = `${max}+`;
130
+ }
131
+ }
132
+ if (!dot && !iconClassName && isNumberContent) {
133
+ const numericContent = content;
134
+ if (!showZero && numericContent === 0) {
135
+ displayValue = void 0;
136
+ }
137
+ }
138
+ const hasRenderableContent = dot || Boolean(iconClassName) || displayValue !== null && displayValue !== void 0 && displayValue !== "";
139
+ const shouldRenderBadge = visible && hasRenderableContent;
140
+ const paletteClass = badgePaletteClasses[color] ?? badgePaletteClasses.primary;
141
+ const [offsetX = 0, offsetY = 0] = offset ?? [];
142
+ const isPositioned = hasChildren && !floating;
143
+ const placementStyle = (() => {
144
+ if (!isPositioned) {
145
+ if (!offsetX && !offsetY) {
146
+ return void 0;
147
+ }
148
+ return {
149
+ transform: `translate(${offsetX}px, ${offsetY}px)`
150
+ };
151
+ }
152
+ const geometry = resolvePlacementGeometry(placement, overlap);
153
+ const style = {};
154
+ if (geometry.top !== void 0) {
155
+ style.top = geometry.top;
156
+ }
157
+ if (geometry.right !== void 0) {
158
+ style.right = geometry.right;
159
+ }
160
+ if (geometry.bottom !== void 0) {
161
+ style.bottom = geometry.bottom;
162
+ }
163
+ if (geometry.left !== void 0) {
164
+ style.left = geometry.left;
165
+ }
166
+ const translateX = buildTranslateComponent(geometry.translateX, offsetX);
167
+ const translateY = buildTranslateComponent(geometry.translateY, offsetY);
168
+ style.transform = `translate(${translateX}, ${translateY})`;
169
+ return style;
170
+ })();
171
+ const badgeContainerClasses = tailwindMerge.twMerge(
172
+ "pointer-events-none select-none",
173
+ isPositioned ? "absolute" : "relative",
174
+ "flex items-center justify-center whitespace-nowrap",
175
+ dot ? void 0 : "p-0"
176
+ );
177
+ const badgeContentClasses = tailwindMerge.twMerge(
178
+ "inline-flex items-center justify-center whitespace-nowrap rounded-full px-2.5 py-1.5 text-xs font-semibold leading-none min-w-6 min-h-6",
179
+ paletteClass,
180
+ bordered ? "ring-2 ring-white ring-offset-0" : void 0,
181
+ badgeClassName
182
+ );
183
+ const badgeDotClasses = tailwindMerge.twMerge(
184
+ "inline-block h-2 w-2 rounded-full",
185
+ paletteClass,
186
+ bordered ? "ring-2 ring-white ring-offset-0" : void 0,
187
+ badgeClassName
188
+ );
189
+ const rootClasses = tailwindMerge.twMerge(
190
+ "relative",
191
+ inline ? "inline-flex" : "flex",
192
+ hasChildren ? void 0 : "items-center justify-center",
193
+ className
194
+ );
195
+ const resolvedChildren = typeof children === "string" || typeof children === "number" ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex items-center justify-center", children }) : children;
196
+ return /* @__PURE__ */ jsxRuntime.jsxs("span", { ...rest, className: rootClasses, children: [
197
+ resolvedChildren,
198
+ shouldRenderBadge && /* @__PURE__ */ jsxRuntime.jsx("span", { className: badgeContainerClasses, style: placementStyle, children: dot ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: badgeDotClasses }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: tailwindMerge.twMerge(badgeContentClasses), children: iconClassName ? /* @__PURE__ */ jsxRuntime.jsx("i", { className: iconClassName, "aria-hidden": true }) : displayValue }) })
199
+ ] });
200
+ };
201
+ var Badge_default = Badge;
202
+
203
+ module.exports = Badge_default;
204
+ //# sourceMappingURL=badge.cjs.map
205
+ //# sourceMappingURL=badge.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/Info/Badge/states.badge.ts","../src/Info/Badge/index.tsx"],"names":["normalized","React","twMerge","jsx","jsxs"],"mappings":"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","file":"badge.cjs","sourcesContent":["import { Palette } from '@lindle/linoardo/global.types';\nimport { BadgePlacement, IconDefinition, PlacementGeometry } from './types.badge';\n\nexport const placementGeometries: Record<BadgePlacement, { overlap: PlacementGeometry; detached: PlacementGeometry }> =\n {\n 'top-end': {\n overlap: { top: 0, right: 0, translateX: '50%', translateY: '-50%' },\n detached: { top: 0, right: 0, translateX: '50%', translateY: '-100%' }\n },\n 'top-start': {\n overlap: { top: 0, left: 0, translateX: '-50%', translateY: '-50%' },\n detached: { top: 0, left: 0, translateX: '-50%', translateY: '-100%' }\n },\n 'bottom-end': {\n overlap: { bottom: 0, right: 0, translateX: '50%', translateY: '50%' },\n detached: { bottom: 0, right: 0, translateX: '50%', translateY: '100%' }\n },\n 'bottom-start': {\n overlap: { bottom: 0, left: 0, translateX: '-50%', translateY: '50%' },\n detached: { bottom: 0, left: 0, translateX: '-50%', translateY: '100%' }\n },\n center: {\n overlap: { top: '50%', left: '50%', translateX: '-50%', translateY: '-50%' },\n detached: { top: '50%', left: '50%', translateX: '-50%', translateY: '-50%' }\n }\n };\n\nexport const badgePaletteClasses: Record<Palette, string> = {\n primary: 'bg-primary text-white',\n neutral: 'bg-gray-500 text-white',\n info: 'bg-sky-500 text-white',\n success: 'bg-emerald-500 text-white',\n warning: 'bg-amber-500 text-white',\n danger: 'bg-red-500 text-white',\n surface: 'bg-white text-gray-900 border border-gray-200',\n bw: 'bg-white text-black border border-black'\n};\n\nexport const resolvePlacementGeometry = (placement: BadgePlacement, overlap: boolean): PlacementGeometry => {\n const group = placementGeometries[placement] ?? placementGeometries['top-end'];\n return overlap ? group.overlap : group.detached;\n};\n\nexport const buildTranslateComponent = (base: string, delta: number) => {\n if (!delta) {\n return base;\n }\n\n const normalizedBase = base.endsWith('%') || base.endsWith('px') ? base : `${base}`;\n const operator = delta >= 0 ? '+' : '-';\n const magnitude = Math.abs(delta);\n return `calc(${normalizedBase} ${operator} ${magnitude}px)`;\n};\n\nconst iconBaseClasses = {\n mdi: ['mdi']\n} as const;\n\nexport const resolveIconClassName = (icon?: IconDefinition) => {\n if (!icon) {\n return undefined;\n }\n\n if (typeof icon === 'string') {\n const trimmed = icon.trim();\n if (!trimmed) {\n return undefined;\n }\n\n if (trimmed.includes(' ')) {\n return trimmed;\n }\n\n const normalized = trimmed.startsWith('mdi-') ? trimmed : `mdi-${trimmed}`;\n return ['mdi', normalized].join(' ');\n }\n\n const [library, providedName] = icon;\n const normalizedLibrary = library.trim();\n const base = iconBaseClasses[normalizedLibrary as keyof typeof iconBaseClasses] ?? [normalizedLibrary];\n const iconName = providedName.trim();\n if (!iconName) {\n return base.join(' ');\n }\n\n const normalized = iconName.startsWith('mdi-') ? iconName : `mdi-${iconName}`;\n return Array.from(new Set([...base, normalized])).join(' ');\n};\n","import * as React from 'react';\nimport { twMerge } from 'tailwind-merge';\nimport { BadgeProps } from './types.badge';\nimport {\n badgePaletteClasses,\n buildTranslateComponent,\n resolveIconClassName,\n resolvePlacementGeometry\n} from './states.badge';\n\n/**\n * Notification badge that can render numbers, dots or icons with flexible positioning.\n */\nconst Badge: React.FC<BadgeProps> = ({\n children,\n content,\n max = 99,\n showZero = false,\n dot = false,\n icon,\n color = 'primary',\n placement = 'top-end',\n offset,\n overlap = true,\n bordered = false,\n floating = false,\n visible = true,\n badgeClassName,\n inline = true,\n className,\n ...rest\n}) => {\n const hasChildren = React.Children.count(children) > 0;\n const iconClassName = resolveIconClassName(icon);\n const isNumberContent = typeof content === 'number' && Number.isFinite(content);\n\n let displayValue: React.ReactNode = content;\n if (!dot && !iconClassName && isNumberContent) {\n const numericContent = content as number;\n if (typeof max === 'number' && Number.isFinite(max) && numericContent > max) {\n displayValue = `${max}+`;\n }\n }\n\n if (!dot && !iconClassName && isNumberContent) {\n const numericContent = content as number;\n if (!showZero && numericContent === 0) {\n displayValue = undefined;\n }\n }\n\n const hasRenderableContent =\n dot || Boolean(iconClassName) || (displayValue !== null && displayValue !== undefined && displayValue !== '');\n\n const shouldRenderBadge = visible && hasRenderableContent;\n const paletteClass = badgePaletteClasses[color] ?? badgePaletteClasses.primary;\n\n const [offsetX = 0, offsetY = 0] = offset ?? [];\n\n const isPositioned = hasChildren && !floating;\n\n const placementStyle: React.CSSProperties | undefined = (() => {\n if (!isPositioned) {\n if (!offsetX && !offsetY) {\n return undefined;\n }\n\n return {\n transform: `translate(${offsetX}px, ${offsetY}px)`\n };\n }\n\n const geometry = resolvePlacementGeometry(placement, overlap);\n const style: React.CSSProperties = {};\n\n if (geometry.top !== undefined) {\n style.top = geometry.top;\n }\n if (geometry.right !== undefined) {\n style.right = geometry.right;\n }\n if (geometry.bottom !== undefined) {\n style.bottom = geometry.bottom;\n }\n if (geometry.left !== undefined) {\n style.left = geometry.left;\n }\n\n const translateX = buildTranslateComponent(geometry.translateX, offsetX);\n const translateY = buildTranslateComponent(geometry.translateY, offsetY);\n style.transform = `translate(${translateX}, ${translateY})`;\n return style;\n })();\n\n const badgeContainerClasses = twMerge(\n 'pointer-events-none select-none',\n isPositioned ? 'absolute' : 'relative',\n 'flex items-center justify-center whitespace-nowrap',\n dot ? undefined : 'p-0'\n );\n\n const badgeContentClasses = twMerge(\n 'inline-flex items-center justify-center whitespace-nowrap rounded-full px-2.5 py-1.5 text-xs font-semibold leading-none min-w-6 min-h-6',\n paletteClass,\n bordered ? 'ring-2 ring-white ring-offset-0' : undefined,\n badgeClassName\n );\n\n const badgeDotClasses = twMerge(\n 'inline-block h-2 w-2 rounded-full',\n paletteClass,\n bordered ? 'ring-2 ring-white ring-offset-0' : undefined,\n badgeClassName\n );\n\n const rootClasses = twMerge(\n 'relative',\n inline ? 'inline-flex' : 'flex',\n hasChildren ? undefined : 'items-center justify-center',\n className\n );\n\n const resolvedChildren =\n typeof children === 'string' || typeof children === 'number' ? (\n <span className='inline-flex items-center justify-center'>{children}</span>\n ) : (\n children\n );\n\n return (\n <span {...rest} className={rootClasses}>\n {resolvedChildren}\n {shouldRenderBadge && (\n <span className={badgeContainerClasses} style={placementStyle}>\n {dot ? (\n <span className={badgeDotClasses} />\n ) : (\n <span className={twMerge(badgeContentClasses)}>\n {iconClassName ? <i className={iconClassName} aria-hidden /> : displayValue}\n </span>\n )}\n </span>\n )}\n </span>\n );\n};\n\nexport default Badge;\n"]}
@@ -0,0 +1,71 @@
1
+ import * as react from 'react';
2
+ import { P as Palette } from './global.types-E2uVLemv.cjs';
3
+
4
+ type BadgePlacement = 'top-end' | 'top-start' | 'bottom-end' | 'bottom-start' | 'center';
5
+ type IconDefinition = string | [library: string, icon: string];
6
+ type BaseSpanProps = Omit<React.HTMLAttributes<HTMLSpanElement>, 'content'>;
7
+ interface BadgeProps extends BaseSpanProps {
8
+ /**
9
+ * Content displayed inside the badge. Ignored when dot mode is enabled.
10
+ */
11
+ content?: React.ReactNode;
12
+ /**
13
+ * Caps numeric content and adds a "+" suffix when overflowed.
14
+ */
15
+ max?: number;
16
+ /**
17
+ * Controls whether zero numeric values should be rendered.
18
+ */
19
+ showZero?: boolean;
20
+ /**
21
+ * Renders the badge as a small dot without inner content.
22
+ */
23
+ dot?: boolean;
24
+ /**
25
+ * Optional icon name. Supports Material Design Icons by default.
26
+ */
27
+ icon?: IconDefinition;
28
+ /**
29
+ * Visual palette used for the badge background and text.
30
+ */
31
+ color?: Palette;
32
+ /**
33
+ * Defines the anchor point relative to the wrapped content.
34
+ */
35
+ placement?: BadgePlacement;
36
+ /**
37
+ * Fine-grained positional adjustment in pixels [x, y].
38
+ */
39
+ offset?: [x?: number, y?: number];
40
+ /**
41
+ * Controls whether the badge overlaps its anchor element.
42
+ */
43
+ overlap?: boolean;
44
+ /**
45
+ * Adds a subtle border around the badge for contrast.
46
+ */
47
+ bordered?: boolean;
48
+ /**
49
+ * Switches to inline rendering so the badge is not absolutely positioned.
50
+ */
51
+ floating?: boolean;
52
+ /**
53
+ * Toggles display regardless of whether content is provided.
54
+ */
55
+ visible?: boolean;
56
+ /**
57
+ * Additional class name applied to the badge itself.
58
+ */
59
+ badgeClassName?: string;
60
+ /**
61
+ * Chooses between inline-flex and block-level layout for the root wrapper.
62
+ */
63
+ inline?: boolean;
64
+ }
65
+
66
+ /**
67
+ * Notification badge that can render numbers, dots or icons with flexible positioning.
68
+ */
69
+ declare const Badge: react.FC<BadgeProps>;
70
+
71
+ export { Badge as default };