@diwauhris/ui 1.0.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 (272) hide show
  1. package/README.md +75 -0
  2. package/lib/assets/ui.css +154 -0
  3. package/lib/index.cjs +183 -0
  4. package/lib/index.mjs +65 -0
  5. package/lib/index10.cjs +33 -0
  6. package/lib/index10.cjs.map +1 -0
  7. package/lib/index10.mjs +33 -0
  8. package/lib/index10.mjs.map +1 -0
  9. package/lib/index11.cjs +16 -0
  10. package/lib/index11.cjs.map +1 -0
  11. package/lib/index11.mjs +16 -0
  12. package/lib/index11.mjs.map +1 -0
  13. package/lib/index12.cjs +16 -0
  14. package/lib/index12.cjs.map +1 -0
  15. package/lib/index12.mjs +15 -0
  16. package/lib/index12.mjs.map +1 -0
  17. package/lib/index13.cjs +57 -0
  18. package/lib/index13.cjs.map +1 -0
  19. package/lib/index13.mjs +57 -0
  20. package/lib/index13.mjs.map +1 -0
  21. package/lib/index14.cjs +10 -0
  22. package/lib/index14.cjs.map +1 -0
  23. package/lib/index14.mjs +10 -0
  24. package/lib/index14.mjs.map +1 -0
  25. package/lib/index15.cjs +30 -0
  26. package/lib/index15.cjs.map +1 -0
  27. package/lib/index15.mjs +30 -0
  28. package/lib/index15.mjs.map +1 -0
  29. package/lib/index16.cjs +28 -0
  30. package/lib/index16.cjs.map +1 -0
  31. package/lib/index16.mjs +26 -0
  32. package/lib/index16.mjs.map +1 -0
  33. package/lib/index17.cjs +43 -0
  34. package/lib/index17.cjs.map +1 -0
  35. package/lib/index17.mjs +43 -0
  36. package/lib/index17.mjs.map +1 -0
  37. package/lib/index18.cjs +59 -0
  38. package/lib/index18.cjs.map +1 -0
  39. package/lib/index18.mjs +59 -0
  40. package/lib/index18.mjs.map +1 -0
  41. package/lib/index19.cjs +67 -0
  42. package/lib/index19.cjs.map +1 -0
  43. package/lib/index19.mjs +67 -0
  44. package/lib/index19.mjs.map +1 -0
  45. package/lib/index2.cjs +33 -0
  46. package/lib/index2.mjs +13 -0
  47. package/lib/index20.cjs +79 -0
  48. package/lib/index20.cjs.map +1 -0
  49. package/lib/index20.mjs +79 -0
  50. package/lib/index20.mjs.map +1 -0
  51. package/lib/index21.cjs +105 -0
  52. package/lib/index21.cjs.map +1 -0
  53. package/lib/index21.mjs +104 -0
  54. package/lib/index21.mjs.map +1 -0
  55. package/lib/index22.cjs +50 -0
  56. package/lib/index22.cjs.map +1 -0
  57. package/lib/index22.mjs +50 -0
  58. package/lib/index22.mjs.map +1 -0
  59. package/lib/index23.cjs +143 -0
  60. package/lib/index23.cjs.map +1 -0
  61. package/lib/index23.mjs +143 -0
  62. package/lib/index23.mjs.map +1 -0
  63. package/lib/index25.cjs +177 -0
  64. package/lib/index25.cjs.map +1 -0
  65. package/lib/index25.mjs +175 -0
  66. package/lib/index25.mjs.map +1 -0
  67. package/lib/index26.cjs +108 -0
  68. package/lib/index26.cjs.map +1 -0
  69. package/lib/index26.mjs +108 -0
  70. package/lib/index26.mjs.map +1 -0
  71. package/lib/index27.cjs +120 -0
  72. package/lib/index27.cjs.map +1 -0
  73. package/lib/index27.mjs +120 -0
  74. package/lib/index27.mjs.map +1 -0
  75. package/lib/index28.cjs +54 -0
  76. package/lib/index28.cjs.map +1 -0
  77. package/lib/index28.mjs +54 -0
  78. package/lib/index28.mjs.map +1 -0
  79. package/lib/index29.cjs +100 -0
  80. package/lib/index29.cjs.map +1 -0
  81. package/lib/index29.mjs +100 -0
  82. package/lib/index29.mjs.map +1 -0
  83. package/lib/index3.cjs +38 -0
  84. package/lib/index3.cjs.map +1 -0
  85. package/lib/index3.mjs +38 -0
  86. package/lib/index3.mjs.map +1 -0
  87. package/lib/index30.cjs +27 -0
  88. package/lib/index30.cjs.map +1 -0
  89. package/lib/index30.mjs +27 -0
  90. package/lib/index30.mjs.map +1 -0
  91. package/lib/index31.cjs +72 -0
  92. package/lib/index31.cjs.map +1 -0
  93. package/lib/index31.mjs +72 -0
  94. package/lib/index31.mjs.map +1 -0
  95. package/lib/index32.cjs +19 -0
  96. package/lib/index32.cjs.map +1 -0
  97. package/lib/index32.mjs +19 -0
  98. package/lib/index32.mjs.map +1 -0
  99. package/lib/index33.cjs +25 -0
  100. package/lib/index33.cjs.map +1 -0
  101. package/lib/index33.mjs +25 -0
  102. package/lib/index33.mjs.map +1 -0
  103. package/lib/index34.cjs +55 -0
  104. package/lib/index34.cjs.map +1 -0
  105. package/lib/index34.mjs +51 -0
  106. package/lib/index34.mjs.map +1 -0
  107. package/lib/index35.cjs +25 -0
  108. package/lib/index35.cjs.map +1 -0
  109. package/lib/index35.mjs +25 -0
  110. package/lib/index35.mjs.map +1 -0
  111. package/lib/index36.cjs +54 -0
  112. package/lib/index36.cjs.map +1 -0
  113. package/lib/index36.mjs +49 -0
  114. package/lib/index36.mjs.map +1 -0
  115. package/lib/index37.cjs +130 -0
  116. package/lib/index37.cjs.map +1 -0
  117. package/lib/index37.mjs +128 -0
  118. package/lib/index37.mjs.map +1 -0
  119. package/lib/index38.cjs +106 -0
  120. package/lib/index38.cjs.map +1 -0
  121. package/lib/index38.mjs +102 -0
  122. package/lib/index38.mjs.map +1 -0
  123. package/lib/index39.cjs +137 -0
  124. package/lib/index39.cjs.map +1 -0
  125. package/lib/index39.mjs +137 -0
  126. package/lib/index39.mjs.map +1 -0
  127. package/lib/index4.cjs +24 -0
  128. package/lib/index4.cjs.map +1 -0
  129. package/lib/index4.mjs +24 -0
  130. package/lib/index4.mjs.map +1 -0
  131. package/lib/index40.cjs +130 -0
  132. package/lib/index40.cjs.map +1 -0
  133. package/lib/index40.mjs +126 -0
  134. package/lib/index40.mjs.map +1 -0
  135. package/lib/index41.cjs +60 -0
  136. package/lib/index41.cjs.map +1 -0
  137. package/lib/index41.mjs +58 -0
  138. package/lib/index41.mjs.map +1 -0
  139. package/lib/index42.cjs +105 -0
  140. package/lib/index42.cjs.map +1 -0
  141. package/lib/index42.mjs +105 -0
  142. package/lib/index42.mjs.map +1 -0
  143. package/lib/index43.cjs +47 -0
  144. package/lib/index43.cjs.map +1 -0
  145. package/lib/index43.mjs +42 -0
  146. package/lib/index43.mjs.map +1 -0
  147. package/lib/index44.cjs +40 -0
  148. package/lib/index44.cjs.map +1 -0
  149. package/lib/index44.mjs +35 -0
  150. package/lib/index44.mjs.map +1 -0
  151. package/lib/index45.cjs +91 -0
  152. package/lib/index45.cjs.map +1 -0
  153. package/lib/index45.mjs +91 -0
  154. package/lib/index45.mjs.map +1 -0
  155. package/lib/index46.cjs +180 -0
  156. package/lib/index46.cjs.map +1 -0
  157. package/lib/index46.mjs +180 -0
  158. package/lib/index46.mjs.map +1 -0
  159. package/lib/index47.cjs +61 -0
  160. package/lib/index47.cjs.map +1 -0
  161. package/lib/index47.mjs +61 -0
  162. package/lib/index47.mjs.map +1 -0
  163. package/lib/index48.cjs +165 -0
  164. package/lib/index48.cjs.map +1 -0
  165. package/lib/index48.mjs +161 -0
  166. package/lib/index48.mjs.map +1 -0
  167. package/lib/index49.cjs +83 -0
  168. package/lib/index49.cjs.map +1 -0
  169. package/lib/index49.mjs +83 -0
  170. package/lib/index49.mjs.map +1 -0
  171. package/lib/index5.cjs +39 -0
  172. package/lib/index5.cjs.map +1 -0
  173. package/lib/index5.mjs +39 -0
  174. package/lib/index5.mjs.map +1 -0
  175. package/lib/index50.cjs +100 -0
  176. package/lib/index50.cjs.map +1 -0
  177. package/lib/index50.mjs +100 -0
  178. package/lib/index50.mjs.map +1 -0
  179. package/lib/index51.cjs +116 -0
  180. package/lib/index51.cjs.map +1 -0
  181. package/lib/index51.mjs +113 -0
  182. package/lib/index51.mjs.map +1 -0
  183. package/lib/index52.cjs +93 -0
  184. package/lib/index52.cjs.map +1 -0
  185. package/lib/index52.mjs +93 -0
  186. package/lib/index52.mjs.map +1 -0
  187. package/lib/index53.cjs +120 -0
  188. package/lib/index53.cjs.map +1 -0
  189. package/lib/index53.mjs +120 -0
  190. package/lib/index53.mjs.map +1 -0
  191. package/lib/index54.cjs +53 -0
  192. package/lib/index54.cjs.map +1 -0
  193. package/lib/index54.mjs +50 -0
  194. package/lib/index54.mjs.map +1 -0
  195. package/lib/index55.cjs +130 -0
  196. package/lib/index55.cjs.map +1 -0
  197. package/lib/index55.mjs +127 -0
  198. package/lib/index55.mjs.map +1 -0
  199. package/lib/index56.cjs +36 -0
  200. package/lib/index56.cjs.map +1 -0
  201. package/lib/index56.mjs +35 -0
  202. package/lib/index56.mjs.map +1 -0
  203. package/lib/index57.cjs +47 -0
  204. package/lib/index57.cjs.map +1 -0
  205. package/lib/index57.mjs +47 -0
  206. package/lib/index57.mjs.map +1 -0
  207. package/lib/index58.cjs +97 -0
  208. package/lib/index58.cjs.map +1 -0
  209. package/lib/index58.mjs +97 -0
  210. package/lib/index58.mjs.map +1 -0
  211. package/lib/index59.cjs +120 -0
  212. package/lib/index59.cjs.map +1 -0
  213. package/lib/index59.mjs +116 -0
  214. package/lib/index59.mjs.map +1 -0
  215. package/lib/index6.cjs +29 -0
  216. package/lib/index6.cjs.map +1 -0
  217. package/lib/index6.mjs +29 -0
  218. package/lib/index6.mjs.map +1 -0
  219. package/lib/index60.cjs +34 -0
  220. package/lib/index60.cjs.map +1 -0
  221. package/lib/index60.mjs +34 -0
  222. package/lib/index60.mjs.map +1 -0
  223. package/lib/index61.cjs +62 -0
  224. package/lib/index61.cjs.map +1 -0
  225. package/lib/index61.mjs +62 -0
  226. package/lib/index61.mjs.map +1 -0
  227. package/lib/index62.cjs +213 -0
  228. package/lib/index62.cjs.map +1 -0
  229. package/lib/index62.mjs +213 -0
  230. package/lib/index62.mjs.map +1 -0
  231. package/lib/index63.cjs +42 -0
  232. package/lib/index63.cjs.map +1 -0
  233. package/lib/index63.mjs +42 -0
  234. package/lib/index63.mjs.map +1 -0
  235. package/lib/index64.cjs +86 -0
  236. package/lib/index64.cjs.map +1 -0
  237. package/lib/index64.mjs +86 -0
  238. package/lib/index64.mjs.map +1 -0
  239. package/lib/index65.cjs +156 -0
  240. package/lib/index65.cjs.map +1 -0
  241. package/lib/index65.mjs +156 -0
  242. package/lib/index65.mjs.map +1 -0
  243. package/lib/index66.cjs +107 -0
  244. package/lib/index66.cjs.map +1 -0
  245. package/lib/index66.mjs +106 -0
  246. package/lib/index66.mjs.map +1 -0
  247. package/lib/index67.cjs +52 -0
  248. package/lib/index67.cjs.map +1 -0
  249. package/lib/index67.mjs +52 -0
  250. package/lib/index67.mjs.map +1 -0
  251. package/lib/index68.cjs +125 -0
  252. package/lib/index68.cjs.map +1 -0
  253. package/lib/index68.mjs +115 -0
  254. package/lib/index68.mjs.map +1 -0
  255. package/lib/index69.cjs +34 -0
  256. package/lib/index69.cjs.map +1 -0
  257. package/lib/index69.mjs +29 -0
  258. package/lib/index69.mjs.map +1 -0
  259. package/lib/index7.cjs +17 -0
  260. package/lib/index7.cjs.map +1 -0
  261. package/lib/index7.mjs +17 -0
  262. package/lib/index7.mjs.map +1 -0
  263. package/lib/index8.cjs +86 -0
  264. package/lib/index8.cjs.map +1 -0
  265. package/lib/index8.mjs +86 -0
  266. package/lib/index8.mjs.map +1 -0
  267. package/lib/index9.cjs +29 -0
  268. package/lib/index9.cjs.map +1 -0
  269. package/lib/index9.mjs +29 -0
  270. package/lib/index9.mjs.map +1 -0
  271. package/lib/types/index.d.ts +1 -0
  272. package/package.json +68 -0
@@ -0,0 +1,34 @@
1
+ //#region src/ui-library/tokens/shadow.ts
2
+ var shadow_exports = /* @__PURE__ */ require("./index2.cjs").__exportAll({ shadow: () => shadow });
3
+ /**
4
+ * DIWA Shadow Tokens
5
+ *
6
+ * Formalizes the three-tier shadow vocabulary identified in the Phase 9 audit.
7
+ * Values are Tailwind utility class strings.
8
+ *
9
+ * Three tiers:
10
+ * inline — no elevation (Cards without shadow, inputs, inline surfaces)
11
+ * floating — anchored floating panels (Popover, Tooltip)
12
+ * overlay — full-screen overlay panels (Modal, Dialog, Drawer)
13
+ *
14
+ * Button shadows are documented separately — they carry color-tinted shadows
15
+ * that are component-specific and not candidates for centralization yet.
16
+ */
17
+ var shadow = {
18
+ /** No shadow — inline surfaces */
19
+ none: "",
20
+ /** Anchored floating panels — shadow-lg */
21
+ floating: "shadow-lg",
22
+ /** Full-screen overlay panels — shadow-xl */
23
+ overlay: "shadow-xl"
24
+ };
25
+ //#endregion
26
+ exports.shadow = shadow;
27
+ Object.defineProperty(exports, "shadow_exports", {
28
+ enumerable: true,
29
+ get: function() {
30
+ return shadow_exports;
31
+ }
32
+ });
33
+
34
+ //# sourceMappingURL=index69.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index69.cjs","names":[],"sources":["../src/ui-library/tokens/shadow.ts"],"sourcesContent":["/**\n * DIWA Shadow Tokens\n *\n * Formalizes the three-tier shadow vocabulary identified in the Phase 9 audit.\n * Values are Tailwind utility class strings.\n *\n * Three tiers:\n * inline — no elevation (Cards without shadow, inputs, inline surfaces)\n * floating — anchored floating panels (Popover, Tooltip)\n * overlay — full-screen overlay panels (Modal, Dialog, Drawer)\n *\n * Button shadows are documented separately — they carry color-tinted shadows\n * that are component-specific and not candidates for centralization yet.\n */\n\nexport const shadow = {\n /** No shadow — inline surfaces */\n none: '',\n /** Anchored floating panels — shadow-lg */\n floating: 'shadow-lg',\n /** Full-screen overlay panels — shadow-xl */\n overlay: 'shadow-xl',\n\n // ── Button shadows — documented, not used directly ─────────────────────\n // These are component-specific. Kept here for reference only.\n // Wave 2 will decide whether to centralize button shadow tokens.\n //\n // buttonPrimary: 'shadow-lg shadow-brand-blue/20'\n // buttonDanger: 'shadow-lg shadow-rose-100'\n} as const;\n"],"mappings":";;;;;;;;;;;;;;;;AAeA,IAAa,SAAS;;CAEpB,MAAU;;CAEV,UAAU;;CAEV,SAAU;AAQZ"}
@@ -0,0 +1,29 @@
1
+ import { __exportAll } from "./index2.mjs";
2
+ //#region src/ui-library/tokens/shadow.ts
3
+ var shadow_exports = /* @__PURE__ */ __exportAll({ shadow: () => shadow });
4
+ /**
5
+ * DIWA Shadow Tokens
6
+ *
7
+ * Formalizes the three-tier shadow vocabulary identified in the Phase 9 audit.
8
+ * Values are Tailwind utility class strings.
9
+ *
10
+ * Three tiers:
11
+ * inline — no elevation (Cards without shadow, inputs, inline surfaces)
12
+ * floating — anchored floating panels (Popover, Tooltip)
13
+ * overlay — full-screen overlay panels (Modal, Dialog, Drawer)
14
+ *
15
+ * Button shadows are documented separately — they carry color-tinted shadows
16
+ * that are component-specific and not candidates for centralization yet.
17
+ */
18
+ var shadow = {
19
+ /** No shadow — inline surfaces */
20
+ none: "",
21
+ /** Anchored floating panels — shadow-lg */
22
+ floating: "shadow-lg",
23
+ /** Full-screen overlay panels — shadow-xl */
24
+ overlay: "shadow-xl"
25
+ };
26
+ //#endregion
27
+ export { shadow, shadow_exports };
28
+
29
+ //# sourceMappingURL=index69.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index69.mjs","names":[],"sources":["../src/ui-library/tokens/shadow.ts"],"sourcesContent":["/**\n * DIWA Shadow Tokens\n *\n * Formalizes the three-tier shadow vocabulary identified in the Phase 9 audit.\n * Values are Tailwind utility class strings.\n *\n * Three tiers:\n * inline — no elevation (Cards without shadow, inputs, inline surfaces)\n * floating — anchored floating panels (Popover, Tooltip)\n * overlay — full-screen overlay panels (Modal, Dialog, Drawer)\n *\n * Button shadows are documented separately — they carry color-tinted shadows\n * that are component-specific and not candidates for centralization yet.\n */\n\nexport const shadow = {\n /** No shadow — inline surfaces */\n none: '',\n /** Anchored floating panels — shadow-lg */\n floating: 'shadow-lg',\n /** Full-screen overlay panels — shadow-xl */\n overlay: 'shadow-xl',\n\n // ── Button shadows — documented, not used directly ─────────────────────\n // These are component-specific. Kept here for reference only.\n // Wave 2 will decide whether to centralize button shadow tokens.\n //\n // buttonPrimary: 'shadow-lg shadow-brand-blue/20'\n // buttonDanger: 'shadow-lg shadow-rose-100'\n} as const;\n"],"mappings":";;;;;;;;;;;;;;;;;AAeA,IAAa,SAAS;;CAEpB,MAAU;;CAEV,UAAU;;CAEV,SAAU;AAQZ"}
package/lib/index7.cjs ADDED
@@ -0,0 +1,17 @@
1
+ let react_jsx_runtime = require("react/jsx-runtime");
2
+ //#region src/ui-library/gallery/divider/Divider.tsx
3
+ function Divider({ orientation = "horizontal", decorative = true, "aria-label": ariaLabel, className = "" }) {
4
+ const isHorizontal = orientation === "horizontal";
5
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
6
+ ...decorative ? { "aria-hidden": true } : {
7
+ role: "separator",
8
+ "aria-label": ariaLabel,
9
+ "aria-orientation": orientation
10
+ },
11
+ className: [isHorizontal ? "w-full border-t border-slate-200" : "self-stretch border-l border-slate-200", className].filter(Boolean).join(" ")
12
+ });
13
+ }
14
+ //#endregion
15
+ exports.Divider = Divider;
16
+
17
+ //# sourceMappingURL=index7.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index7.cjs","names":[],"sources":["../src/ui-library/gallery/divider/Divider.tsx"],"sourcesContent":["/**\n * Divider — Design System Component\n *\n * A thin visual separator between content areas.\n *\n * Decorative usage (default, aria-hidden=\"true\"):\n * Used purely for visual grouping. Screen readers skip it.\n * This is the appropriate choice for most cases.\n *\n * Semantic usage (role=\"separator\"):\n * Use when the separation is meaningful to AT users, e.g. between\n * logically distinct regions where the boundary matters.\n * Provide aria-label when context is needed.\n *\n * Orientation:\n * - horizontal (default): full-width horizontal line, displayed as block.\n * - vertical: full-height vertical line, displayed inline. The parent\n * container must give it an explicit height or use flex/grid context.\n */\n\nexport interface DividerProps {\n orientation?: 'horizontal' | 'vertical';\n /**\n * 'decorative' (default) — aria-hidden=\"true\". Use for visual-only separation.\n * 'separator' — role=\"separator\". Use when the boundary is semantically meaningful.\n */\n decorative?: boolean;\n /** Optional accessible label when decorative=false */\n 'aria-label'?: string;\n className?: string;\n}\n\nexport function Divider({\n orientation = 'horizontal',\n decorative = true,\n 'aria-label': ariaLabel,\n className = '',\n}: DividerProps) {\n const isHorizontal = orientation === 'horizontal';\n\n const ariaProps = decorative\n ? { 'aria-hidden': true as const }\n : { role: 'separator' as const, 'aria-label': ariaLabel, 'aria-orientation': orientation };\n\n return (\n <div\n {...ariaProps}\n className={[\n isHorizontal\n ? 'w-full border-t border-slate-200'\n : 'self-stretch border-l border-slate-200',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n />\n );\n}\n"],"mappings":";;AAgCA,SAAgB,QAAQ,EACtB,cAAc,cACd,aAAa,MACb,cAAc,WACd,YAAY,MACG;CACf,MAAM,eAAe,gBAAgB;CAMrC,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EACE,GANc,aACd,EAAE,eAAe,KAAc,IAC/B;GAAE,MAAM;GAAsB,cAAc;GAAW,oBAAoB;EAAY;EAKvF,WAAW,CACT,eACI,qCACA,0CACJ,SACF,CAAC,CACE,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;CACZ,CAAA;AAEL"}
package/lib/index7.mjs ADDED
@@ -0,0 +1,17 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ //#region src/ui-library/gallery/divider/Divider.tsx
3
+ function Divider({ orientation = "horizontal", decorative = true, "aria-label": ariaLabel, className = "" }) {
4
+ const isHorizontal = orientation === "horizontal";
5
+ return /* @__PURE__ */ jsx("div", {
6
+ ...decorative ? { "aria-hidden": true } : {
7
+ role: "separator",
8
+ "aria-label": ariaLabel,
9
+ "aria-orientation": orientation
10
+ },
11
+ className: [isHorizontal ? "w-full border-t border-slate-200" : "self-stretch border-l border-slate-200", className].filter(Boolean).join(" ")
12
+ });
13
+ }
14
+ //#endregion
15
+ export { Divider };
16
+
17
+ //# sourceMappingURL=index7.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index7.mjs","names":[],"sources":["../src/ui-library/gallery/divider/Divider.tsx"],"sourcesContent":["/**\n * Divider — Design System Component\n *\n * A thin visual separator between content areas.\n *\n * Decorative usage (default, aria-hidden=\"true\"):\n * Used purely for visual grouping. Screen readers skip it.\n * This is the appropriate choice for most cases.\n *\n * Semantic usage (role=\"separator\"):\n * Use when the separation is meaningful to AT users, e.g. between\n * logically distinct regions where the boundary matters.\n * Provide aria-label when context is needed.\n *\n * Orientation:\n * - horizontal (default): full-width horizontal line, displayed as block.\n * - vertical: full-height vertical line, displayed inline. The parent\n * container must give it an explicit height or use flex/grid context.\n */\n\nexport interface DividerProps {\n orientation?: 'horizontal' | 'vertical';\n /**\n * 'decorative' (default) — aria-hidden=\"true\". Use for visual-only separation.\n * 'separator' — role=\"separator\". Use when the boundary is semantically meaningful.\n */\n decorative?: boolean;\n /** Optional accessible label when decorative=false */\n 'aria-label'?: string;\n className?: string;\n}\n\nexport function Divider({\n orientation = 'horizontal',\n decorative = true,\n 'aria-label': ariaLabel,\n className = '',\n}: DividerProps) {\n const isHorizontal = orientation === 'horizontal';\n\n const ariaProps = decorative\n ? { 'aria-hidden': true as const }\n : { role: 'separator' as const, 'aria-label': ariaLabel, 'aria-orientation': orientation };\n\n return (\n <div\n {...ariaProps}\n className={[\n isHorizontal\n ? 'w-full border-t border-slate-200'\n : 'self-stretch border-l border-slate-200',\n className,\n ]\n .filter(Boolean)\n .join(' ')}\n />\n );\n}\n"],"mappings":";;AAgCA,SAAgB,QAAQ,EACtB,cAAc,cACd,aAAa,MACb,cAAc,WACd,YAAY,MACG;CACf,MAAM,eAAe,gBAAgB;CAMrC,OACE,oBAAC,OAAD;EACE,GANc,aACd,EAAE,eAAe,KAAc,IAC/B;GAAE,MAAM;GAAsB,cAAc;GAAW,oBAAoB;EAAY;EAKvF,WAAW,CACT,eACI,qCACA,0CACJ,SACF,CAAC,CACE,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;CACZ,CAAA;AAEL"}
package/lib/index8.cjs ADDED
@@ -0,0 +1,86 @@
1
+ let react_jsx_runtime = require("react/jsx-runtime");
2
+ let react = require("react");
3
+ //#region src/ui-library/gallery/avatar/Avatar.tsx
4
+ /**
5
+ * Avatar — Design System Component
6
+ *
7
+ * Circular identity tile displaying either an image or an initials fallback.
8
+ * Purely presentational — no user model, no API calls, no feature-module deps.
9
+ *
10
+ * Renders:
11
+ * 1. <img> when `src` is provided and loads successfully
12
+ * 2. Initials text when `src` is absent or fails to load
13
+ * 3. "?" when name is absent or empty
14
+ *
15
+ * Accessibility:
16
+ * - With src: <img> has alt={name} (or alt="" if decorative)
17
+ * - Initials fallback: aria-label={name} on the container
18
+ * - role="img" is applied in both cases so screen readers
19
+ * can announce the avatar as an image regardless of rendering path
20
+ *
21
+ * Usage:
22
+ * <Avatar name="Juan dela Cruz" />
23
+ * <Avatar name="Maria Santos" src="/photos/maria.jpg" />
24
+ * <Avatar name="Jose Reyes" size="lg" />
25
+ * <Avatar name="Ana Gonzalez" color="#0369A1" />
26
+ */
27
+ var SIZE_CLASSES = {
28
+ xs: "h-6 w-6 text-[9px]",
29
+ sm: "h-8 w-8 text-[11px]",
30
+ md: "h-10 w-10 text-sm",
31
+ lg: "h-12 w-12 text-base",
32
+ xl: "h-16 w-16 text-lg"
33
+ };
34
+ function getInitials(name) {
35
+ if (!name || !name.trim()) return "?";
36
+ const parts = name.trim().split(/\s+/);
37
+ if (parts.length === 1) return (parts[0] ?? "").charAt(0).toUpperCase();
38
+ return ((parts[0] ?? "").charAt(0) + (parts[parts.length - 1] ?? "").charAt(0)).toUpperCase();
39
+ }
40
+ var PALETTE = [
41
+ "#0B2545",
42
+ "#0F4C81",
43
+ "#0369A1",
44
+ "#1E3A8A",
45
+ "#0D9488",
46
+ "#0F766E",
47
+ "#B45309",
48
+ "#C2410C",
49
+ "#BE185D"
50
+ ];
51
+ function deriveColor(name) {
52
+ if (!name) return PALETTE[0];
53
+ let hash = 0;
54
+ for (let i = 0; i < name.length; i++) hash = name.charCodeAt(i) + ((hash << 5) - hash);
55
+ return PALETTE[Math.abs(hash) % PALETTE.length];
56
+ }
57
+ function Avatar({ name, src, size = "md", color, className = "" }) {
58
+ const [imgError, setImgError] = (0, react.useState)(false);
59
+ const showImage = !!src && !imgError;
60
+ const bg = color ?? deriveColor(name);
61
+ const initials = getInitials(name);
62
+ const label = name || "Unknown";
63
+ const baseClass = [
64
+ "inline-flex items-center justify-center rounded-full shrink-0",
65
+ "font-bold text-white select-none overflow-hidden",
66
+ SIZE_CLASSES[size],
67
+ className
68
+ ].filter(Boolean).join(" ");
69
+ if (showImage) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("img", {
70
+ src,
71
+ alt: label,
72
+ className: [baseClass, "object-cover"].join(" "),
73
+ onError: () => setImgError(true)
74
+ });
75
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
76
+ role: "img",
77
+ "aria-label": label,
78
+ className: baseClass,
79
+ style: { backgroundColor: bg },
80
+ children: initials
81
+ });
82
+ }
83
+ //#endregion
84
+ exports.Avatar = Avatar;
85
+
86
+ //# sourceMappingURL=index8.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index8.cjs","names":[],"sources":["../src/ui-library/gallery/avatar/Avatar.tsx"],"sourcesContent":["/**\n * Avatar — Design System Component\n *\n * Circular identity tile displaying either an image or an initials fallback.\n * Purely presentational — no user model, no API calls, no feature-module deps.\n *\n * Renders:\n * 1. <img> when `src` is provided and loads successfully\n * 2. Initials text when `src` is absent or fails to load\n * 3. \"?\" when name is absent or empty\n *\n * Accessibility:\n * - With src: <img> has alt={name} (or alt=\"\" if decorative)\n * - Initials fallback: aria-label={name} on the container\n * - role=\"img\" is applied in both cases so screen readers\n * can announce the avatar as an image regardless of rendering path\n *\n * Usage:\n * <Avatar name=\"Juan dela Cruz\" />\n * <Avatar name=\"Maria Santos\" src=\"/photos/maria.jpg\" />\n * <Avatar name=\"Jose Reyes\" size=\"lg\" />\n * <Avatar name=\"Ana Gonzalez\" color=\"#0369A1\" />\n */\n\nimport { useState } from 'react';\n\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface AvatarProps {\n /** Display name — used for initials generation and aria-label. */\n name?: string;\n /** Optional image source. Falls back to initials when absent or on error. */\n src?: string | null;\n /** Size preset. Default: 'md' (40px) */\n size?: AvatarSize;\n /**\n * Background color for the initials fallback.\n * Overrides the automatic deterministic color derived from `name`.\n * Pass a valid CSS color value.\n */\n color?: string;\n /** Additional className on the root element. */\n className?: string;\n}\n\n// ── Size config ───────────────────────────────────────────────────────────\n\nconst SIZE_CLASSES: Record<AvatarSize, string> = {\n xs: 'h-6 w-6 text-[9px]',\n sm: 'h-8 w-8 text-[11px]',\n md: 'h-10 w-10 text-sm',\n lg: 'h-12 w-12 text-base',\n xl: 'h-16 w-16 text-lg',\n};\n\n// ── Initials helper ───────────────────────────────────────────────────────\n\nfunction getInitials(name?: string): string {\n if (!name || !name.trim()) return '?';\n const parts = name.trim().split(/\\s+/);\n if (parts.length === 1) return (parts[0] ?? '').charAt(0).toUpperCase();\n return ((parts[0] ?? '').charAt(0) + (parts[parts.length - 1] ?? '').charAt(0)).toUpperCase();\n}\n\n// ── Color helper ──────────────────────────────────────────────────────────\n\nconst PALETTE = [\n '#0B2545', '#0F4C81', '#0369A1',\n '#1E3A8A', '#0D9488', '#0F766E',\n '#B45309', '#C2410C', '#BE185D',\n];\n\nfunction deriveColor(name?: string): string {\n if (!name) return PALETTE[0]!;\n let hash = 0;\n for (let i = 0; i < name.length; i++) {\n hash = name.charCodeAt(i) + ((hash << 5) - hash);\n }\n return PALETTE[Math.abs(hash) % PALETTE.length]!;\n}\n\n// ── Avatar ────────────────────────────────────────────────────────────────\n\nexport function Avatar({ name, src, size = 'md', color, className = '' }: AvatarProps) {\n const [imgError, setImgError] = useState(false);\n const showImage = !!src && !imgError;\n const bg = color ?? deriveColor(name);\n const initials = getInitials(name);\n const label = name || 'Unknown';\n\n const baseClass = [\n 'inline-flex items-center justify-center rounded-full shrink-0',\n 'font-bold text-white select-none overflow-hidden',\n SIZE_CLASSES[size],\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n if (showImage) {\n return (\n <img\n src={src!}\n alt={label}\n className={[baseClass, 'object-cover'].join(' ')}\n onError={() => setImgError(true)}\n />\n );\n }\n\n return (\n <div\n role=\"img\"\n aria-label={label}\n className={baseClass}\n style={{ backgroundColor: bg }}\n >\n {initials}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA+CA,IAAM,eAA2C;CAC/C,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAIA,SAAS,YAAY,MAAuB;CAC1C,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,GAAG,OAAO;CAClC,MAAM,QAAQ,KAAK,KAAK,CAAC,CAAC,MAAM,KAAK;CACrC,IAAI,MAAM,WAAW,GAAG,QAAQ,MAAM,MAAM,GAAA,CAAI,OAAO,CAAC,CAAC,CAAC,YAAY;CACtE,SAAS,MAAM,MAAM,GAAA,CAAI,OAAO,CAAC,KAAK,MAAM,MAAM,SAAS,MAAM,GAAA,CAAI,OAAO,CAAC,EAAA,CAAG,YAAY;AAC9F;AAIA,IAAM,UAAU;CACd;CAAW;CAAW;CACtB;CAAW;CAAW;CACtB;CAAW;CAAW;AACxB;AAEA,SAAS,YAAY,MAAuB;CAC1C,IAAI,CAAC,MAAM,OAAO,QAAQ;CAC1B,IAAI,OAAO;CACX,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAC/B,OAAO,KAAK,WAAW,CAAC,MAAM,QAAQ,KAAK;CAE7C,OAAO,QAAQ,KAAK,IAAI,IAAI,IAAI,QAAQ;AAC1C;AAIA,SAAgB,OAAO,EAAE,MAAM,KAAK,OAAO,MAAM,OAAO,YAAY,MAAmB;CACrF,MAAM,CAAC,UAAU,gBAAA,GAAe,MAAA,SAAA,CAAS,KAAK;CAC9C,MAAM,YAAY,CAAC,CAAC,OAAO,CAAC;CAC5B,MAAM,KAAK,SAAS,YAAY,IAAI;CACpC,MAAM,WAAW,YAAY,IAAI;CACjC,MAAM,QAAQ,QAAQ;CAEtB,MAAM,YAAY;EAChB;EACA;EACA,aAAa;EACb;CACF,CAAC,CACE,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;CAEX,IAAI,WACF,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EACO;EACL,KAAK;EACL,WAAW,CAAC,WAAW,cAAc,CAAC,CAAC,KAAK,GAAG;EAC/C,eAAe,YAAY,IAAI;CAChC,CAAA;CAIL,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;EACE,MAAK;EACL,cAAY;EACZ,WAAW;EACX,OAAO,EAAE,iBAAiB,GAAG;EAE5B,UAAA;CACE,CAAA;AAET"}
package/lib/index8.mjs ADDED
@@ -0,0 +1,86 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { useState } from "react";
3
+ //#region src/ui-library/gallery/avatar/Avatar.tsx
4
+ /**
5
+ * Avatar — Design System Component
6
+ *
7
+ * Circular identity tile displaying either an image or an initials fallback.
8
+ * Purely presentational — no user model, no API calls, no feature-module deps.
9
+ *
10
+ * Renders:
11
+ * 1. <img> when `src` is provided and loads successfully
12
+ * 2. Initials text when `src` is absent or fails to load
13
+ * 3. "?" when name is absent or empty
14
+ *
15
+ * Accessibility:
16
+ * - With src: <img> has alt={name} (or alt="" if decorative)
17
+ * - Initials fallback: aria-label={name} on the container
18
+ * - role="img" is applied in both cases so screen readers
19
+ * can announce the avatar as an image regardless of rendering path
20
+ *
21
+ * Usage:
22
+ * <Avatar name="Juan dela Cruz" />
23
+ * <Avatar name="Maria Santos" src="/photos/maria.jpg" />
24
+ * <Avatar name="Jose Reyes" size="lg" />
25
+ * <Avatar name="Ana Gonzalez" color="#0369A1" />
26
+ */
27
+ var SIZE_CLASSES = {
28
+ xs: "h-6 w-6 text-[9px]",
29
+ sm: "h-8 w-8 text-[11px]",
30
+ md: "h-10 w-10 text-sm",
31
+ lg: "h-12 w-12 text-base",
32
+ xl: "h-16 w-16 text-lg"
33
+ };
34
+ function getInitials(name) {
35
+ if (!name || !name.trim()) return "?";
36
+ const parts = name.trim().split(/\s+/);
37
+ if (parts.length === 1) return (parts[0] ?? "").charAt(0).toUpperCase();
38
+ return ((parts[0] ?? "").charAt(0) + (parts[parts.length - 1] ?? "").charAt(0)).toUpperCase();
39
+ }
40
+ var PALETTE = [
41
+ "#0B2545",
42
+ "#0F4C81",
43
+ "#0369A1",
44
+ "#1E3A8A",
45
+ "#0D9488",
46
+ "#0F766E",
47
+ "#B45309",
48
+ "#C2410C",
49
+ "#BE185D"
50
+ ];
51
+ function deriveColor(name) {
52
+ if (!name) return PALETTE[0];
53
+ let hash = 0;
54
+ for (let i = 0; i < name.length; i++) hash = name.charCodeAt(i) + ((hash << 5) - hash);
55
+ return PALETTE[Math.abs(hash) % PALETTE.length];
56
+ }
57
+ function Avatar({ name, src, size = "md", color, className = "" }) {
58
+ const [imgError, setImgError] = useState(false);
59
+ const showImage = !!src && !imgError;
60
+ const bg = color ?? deriveColor(name);
61
+ const initials = getInitials(name);
62
+ const label = name || "Unknown";
63
+ const baseClass = [
64
+ "inline-flex items-center justify-center rounded-full shrink-0",
65
+ "font-bold text-white select-none overflow-hidden",
66
+ SIZE_CLASSES[size],
67
+ className
68
+ ].filter(Boolean).join(" ");
69
+ if (showImage) return /* @__PURE__ */ jsx("img", {
70
+ src,
71
+ alt: label,
72
+ className: [baseClass, "object-cover"].join(" "),
73
+ onError: () => setImgError(true)
74
+ });
75
+ return /* @__PURE__ */ jsx("div", {
76
+ role: "img",
77
+ "aria-label": label,
78
+ className: baseClass,
79
+ style: { backgroundColor: bg },
80
+ children: initials
81
+ });
82
+ }
83
+ //#endregion
84
+ export { Avatar };
85
+
86
+ //# sourceMappingURL=index8.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index8.mjs","names":[],"sources":["../src/ui-library/gallery/avatar/Avatar.tsx"],"sourcesContent":["/**\n * Avatar — Design System Component\n *\n * Circular identity tile displaying either an image or an initials fallback.\n * Purely presentational — no user model, no API calls, no feature-module deps.\n *\n * Renders:\n * 1. <img> when `src` is provided and loads successfully\n * 2. Initials text when `src` is absent or fails to load\n * 3. \"?\" when name is absent or empty\n *\n * Accessibility:\n * - With src: <img> has alt={name} (or alt=\"\" if decorative)\n * - Initials fallback: aria-label={name} on the container\n * - role=\"img\" is applied in both cases so screen readers\n * can announce the avatar as an image regardless of rendering path\n *\n * Usage:\n * <Avatar name=\"Juan dela Cruz\" />\n * <Avatar name=\"Maria Santos\" src=\"/photos/maria.jpg\" />\n * <Avatar name=\"Jose Reyes\" size=\"lg\" />\n * <Avatar name=\"Ana Gonzalez\" color=\"#0369A1\" />\n */\n\nimport { useState } from 'react';\n\nexport type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface AvatarProps {\n /** Display name — used for initials generation and aria-label. */\n name?: string;\n /** Optional image source. Falls back to initials when absent or on error. */\n src?: string | null;\n /** Size preset. Default: 'md' (40px) */\n size?: AvatarSize;\n /**\n * Background color for the initials fallback.\n * Overrides the automatic deterministic color derived from `name`.\n * Pass a valid CSS color value.\n */\n color?: string;\n /** Additional className on the root element. */\n className?: string;\n}\n\n// ── Size config ───────────────────────────────────────────────────────────\n\nconst SIZE_CLASSES: Record<AvatarSize, string> = {\n xs: 'h-6 w-6 text-[9px]',\n sm: 'h-8 w-8 text-[11px]',\n md: 'h-10 w-10 text-sm',\n lg: 'h-12 w-12 text-base',\n xl: 'h-16 w-16 text-lg',\n};\n\n// ── Initials helper ───────────────────────────────────────────────────────\n\nfunction getInitials(name?: string): string {\n if (!name || !name.trim()) return '?';\n const parts = name.trim().split(/\\s+/);\n if (parts.length === 1) return (parts[0] ?? '').charAt(0).toUpperCase();\n return ((parts[0] ?? '').charAt(0) + (parts[parts.length - 1] ?? '').charAt(0)).toUpperCase();\n}\n\n// ── Color helper ──────────────────────────────────────────────────────────\n\nconst PALETTE = [\n '#0B2545', '#0F4C81', '#0369A1',\n '#1E3A8A', '#0D9488', '#0F766E',\n '#B45309', '#C2410C', '#BE185D',\n];\n\nfunction deriveColor(name?: string): string {\n if (!name) return PALETTE[0]!;\n let hash = 0;\n for (let i = 0; i < name.length; i++) {\n hash = name.charCodeAt(i) + ((hash << 5) - hash);\n }\n return PALETTE[Math.abs(hash) % PALETTE.length]!;\n}\n\n// ── Avatar ────────────────────────────────────────────────────────────────\n\nexport function Avatar({ name, src, size = 'md', color, className = '' }: AvatarProps) {\n const [imgError, setImgError] = useState(false);\n const showImage = !!src && !imgError;\n const bg = color ?? deriveColor(name);\n const initials = getInitials(name);\n const label = name || 'Unknown';\n\n const baseClass = [\n 'inline-flex items-center justify-center rounded-full shrink-0',\n 'font-bold text-white select-none overflow-hidden',\n SIZE_CLASSES[size],\n className,\n ]\n .filter(Boolean)\n .join(' ');\n\n if (showImage) {\n return (\n <img\n src={src!}\n alt={label}\n className={[baseClass, 'object-cover'].join(' ')}\n onError={() => setImgError(true)}\n />\n );\n }\n\n return (\n <div\n role=\"img\"\n aria-label={label}\n className={baseClass}\n style={{ backgroundColor: bg }}\n >\n {initials}\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA+CA,IAAM,eAA2C;CAC/C,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;AACN;AAIA,SAAS,YAAY,MAAuB;CAC1C,IAAI,CAAC,QAAQ,CAAC,KAAK,KAAK,GAAG,OAAO;CAClC,MAAM,QAAQ,KAAK,KAAK,CAAC,CAAC,MAAM,KAAK;CACrC,IAAI,MAAM,WAAW,GAAG,QAAQ,MAAM,MAAM,GAAA,CAAI,OAAO,CAAC,CAAC,CAAC,YAAY;CACtE,SAAS,MAAM,MAAM,GAAA,CAAI,OAAO,CAAC,KAAK,MAAM,MAAM,SAAS,MAAM,GAAA,CAAI,OAAO,CAAC,EAAA,CAAG,YAAY;AAC9F;AAIA,IAAM,UAAU;CACd;CAAW;CAAW;CACtB;CAAW;CAAW;CACtB;CAAW;CAAW;AACxB;AAEA,SAAS,YAAY,MAAuB;CAC1C,IAAI,CAAC,MAAM,OAAO,QAAQ;CAC1B,IAAI,OAAO;CACX,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAC/B,OAAO,KAAK,WAAW,CAAC,MAAM,QAAQ,KAAK;CAE7C,OAAO,QAAQ,KAAK,IAAI,IAAI,IAAI,QAAQ;AAC1C;AAIA,SAAgB,OAAO,EAAE,MAAM,KAAK,OAAO,MAAM,OAAO,YAAY,MAAmB;CACrF,MAAM,CAAC,UAAU,eAAe,SAAS,KAAK;CAC9C,MAAM,YAAY,CAAC,CAAC,OAAO,CAAC;CAC5B,MAAM,KAAK,SAAS,YAAY,IAAI;CACpC,MAAM,WAAW,YAAY,IAAI;CACjC,MAAM,QAAQ,QAAQ;CAEtB,MAAM,YAAY;EAChB;EACA;EACA,aAAa;EACb;CACF,CAAC,CACE,OAAO,OAAO,CAAC,CACf,KAAK,GAAG;CAEX,IAAI,WACF,OACE,oBAAC,OAAD;EACO;EACL,KAAK;EACL,WAAW,CAAC,WAAW,cAAc,CAAC,CAAC,KAAK,GAAG;EAC/C,eAAe,YAAY,IAAI;CAChC,CAAA;CAIL,OACE,oBAAC,OAAD;EACE,MAAK;EACL,cAAY;EACZ,WAAW;EACX,OAAO,EAAE,iBAAiB,GAAG;EAE5B,UAAA;CACE,CAAA;AAET"}
package/lib/index9.cjs ADDED
@@ -0,0 +1,29 @@
1
+ let react_jsx_runtime = require("react/jsx-runtime");
2
+ //#region src/ui-library/gallery/section/Section.tsx
3
+ function Section({ title, description, actions, level = 2, children, className = "" }) {
4
+ const Tag = `h${level}`;
5
+ const headingClass = level === 1 ? "text-2xl font-bold text-slate-900" : level === 2 ? "text-lg font-bold text-slate-900" : "text-base font-bold text-slate-800";
6
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
7
+ className: `space-y-4 ${className}`,
8
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
9
+ className: "flex items-start justify-between gap-4",
10
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
11
+ className: "min-w-0",
12
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(Tag, {
13
+ className: headingClass,
14
+ children: title
15
+ }), description && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
16
+ className: "mt-0.5 text-sm font-medium text-slate-500 leading-relaxed",
17
+ children: description
18
+ })]
19
+ }), actions && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
20
+ className: "flex shrink-0 items-center gap-2",
21
+ children: actions
22
+ })]
23
+ }), children]
24
+ });
25
+ }
26
+ //#endregion
27
+ exports.Section = Section;
28
+
29
+ //# sourceMappingURL=index9.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index9.cjs","names":[],"sources":["../src/ui-library/gallery/section/Section.tsx"],"sourcesContent":["/**\n * Section — Design System Component\n *\n * A named content grouping block with an optional description and actions.\n * Intentionally lightweight — wraps content in a semantic <section> element\n * with a heading of the appropriate level.\n *\n * <Section title=\"Personal Information\" description=\"Employee contact details\">\n * ...content...\n * </Section>\n *\n * <Section\n * title=\"Government IDs\"\n * level={3}\n * actions={<Button size=\"sm\">Edit</Button>}\n * >\n * ...content...\n * </Section>\n */\n\nimport type { ReactNode } from 'react';\n\ntype HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;\n\nexport interface SectionProps {\n /** Section heading text */\n title: string;\n /** Optional short description below the heading */\n description?: string;\n /** Optional actions (buttons, links) rendered in the heading row */\n actions?: ReactNode;\n /** Heading element level. Defaults to 2. */\n level?: HeadingLevel;\n children: ReactNode;\n className?: string;\n}\n\nexport function Section({\n title,\n description,\n actions,\n level = 2,\n children,\n className = '',\n}: SectionProps) {\n const Tag = `h${level}` as 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n\n const headingClass =\n level === 1\n ? 'text-2xl font-bold text-slate-900'\n : level === 2\n ? 'text-lg font-bold text-slate-900'\n : 'text-base font-bold text-slate-800';\n\n return (\n <section className={`space-y-4 ${className}`}>\n {/* Header row */}\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"min-w-0\">\n <Tag className={headingClass}>{title}</Tag>\n {description && (\n <p className=\"mt-0.5 text-sm font-medium text-slate-500 leading-relaxed\">\n {description}\n </p>\n )}\n </div>\n {actions && (\n <div className=\"flex shrink-0 items-center gap-2\">\n {actions}\n </div>\n )}\n </div>\n\n {/* Content */}\n {children}\n </section>\n );\n}\n"],"mappings":";;AAqCA,SAAgB,QAAQ,EACtB,OACA,aACA,SACA,QAAQ,GACR,UACA,YAAY,MACG;CACf,MAAM,MAAM,IAAI;CAEhB,MAAM,eACJ,UAAU,IACN,sCACA,UAAU,IACR,qCACA;CAER,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,WAAD;EAAS,WAAW,aAAa;EAAjC,UAAA,CAEE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD;KAAK,WAAW;KAAe,UAAA;IAAW,CAAA,GACzC,eACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,KAAD;KAAG,WAAU;KACV,UAAA;IACA,CAAA,CAEF;GACJ,CAAA,GAAA,WACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,OAAD;IAAK,WAAU;IACZ,UAAA;GACE,CAAA,CAEJ;EAGJ,CAAA,GAAA,QACM;;AAEb"}
package/lib/index9.mjs ADDED
@@ -0,0 +1,29 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ //#region src/ui-library/gallery/section/Section.tsx
3
+ function Section({ title, description, actions, level = 2, children, className = "" }) {
4
+ const Tag = `h${level}`;
5
+ const headingClass = level === 1 ? "text-2xl font-bold text-slate-900" : level === 2 ? "text-lg font-bold text-slate-900" : "text-base font-bold text-slate-800";
6
+ return /* @__PURE__ */ jsxs("section", {
7
+ className: `space-y-4 ${className}`,
8
+ children: [/* @__PURE__ */ jsxs("div", {
9
+ className: "flex items-start justify-between gap-4",
10
+ children: [/* @__PURE__ */ jsxs("div", {
11
+ className: "min-w-0",
12
+ children: [/* @__PURE__ */ jsx(Tag, {
13
+ className: headingClass,
14
+ children: title
15
+ }), description && /* @__PURE__ */ jsx("p", {
16
+ className: "mt-0.5 text-sm font-medium text-slate-500 leading-relaxed",
17
+ children: description
18
+ })]
19
+ }), actions && /* @__PURE__ */ jsx("div", {
20
+ className: "flex shrink-0 items-center gap-2",
21
+ children: actions
22
+ })]
23
+ }), children]
24
+ });
25
+ }
26
+ //#endregion
27
+ export { Section };
28
+
29
+ //# sourceMappingURL=index9.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index9.mjs","names":[],"sources":["../src/ui-library/gallery/section/Section.tsx"],"sourcesContent":["/**\n * Section — Design System Component\n *\n * A named content grouping block with an optional description and actions.\n * Intentionally lightweight — wraps content in a semantic <section> element\n * with a heading of the appropriate level.\n *\n * <Section title=\"Personal Information\" description=\"Employee contact details\">\n * ...content...\n * </Section>\n *\n * <Section\n * title=\"Government IDs\"\n * level={3}\n * actions={<Button size=\"sm\">Edit</Button>}\n * >\n * ...content...\n * </Section>\n */\n\nimport type { ReactNode } from 'react';\n\ntype HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;\n\nexport interface SectionProps {\n /** Section heading text */\n title: string;\n /** Optional short description below the heading */\n description?: string;\n /** Optional actions (buttons, links) rendered in the heading row */\n actions?: ReactNode;\n /** Heading element level. Defaults to 2. */\n level?: HeadingLevel;\n children: ReactNode;\n className?: string;\n}\n\nexport function Section({\n title,\n description,\n actions,\n level = 2,\n children,\n className = '',\n}: SectionProps) {\n const Tag = `h${level}` as 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';\n\n const headingClass =\n level === 1\n ? 'text-2xl font-bold text-slate-900'\n : level === 2\n ? 'text-lg font-bold text-slate-900'\n : 'text-base font-bold text-slate-800';\n\n return (\n <section className={`space-y-4 ${className}`}>\n {/* Header row */}\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"min-w-0\">\n <Tag className={headingClass}>{title}</Tag>\n {description && (\n <p className=\"mt-0.5 text-sm font-medium text-slate-500 leading-relaxed\">\n {description}\n </p>\n )}\n </div>\n {actions && (\n <div className=\"flex shrink-0 items-center gap-2\">\n {actions}\n </div>\n )}\n </div>\n\n {/* Content */}\n {children}\n </section>\n );\n}\n"],"mappings":";;AAqCA,SAAgB,QAAQ,EACtB,OACA,aACA,SACA,QAAQ,GACR,UACA,YAAY,MACG;CACf,MAAM,MAAM,IAAI;CAEhB,MAAM,eACJ,UAAU,IACN,sCACA,UAAU,IACR,qCACA;CAER,OACE,qBAAC,WAAD;EAAS,WAAW,aAAa;EAAjC,UAAA,CAEE,qBAAC,OAAD;GAAK,WAAU;GAAf,UAAA,CACE,qBAAC,OAAD;IAAK,WAAU;IAAf,UAAA,CACE,oBAAC,KAAD;KAAK,WAAW;KAAe,UAAA;IAAW,CAAA,GACzC,eACC,oBAAC,KAAD;KAAG,WAAU;KACV,UAAA;IACA,CAAA,CAEF;GACJ,CAAA,GAAA,WACC,oBAAC,OAAD;IAAK,WAAU;IACZ,UAAA;GACE,CAAA,CAEJ;EAGJ,CAAA,GAAA,QACM;;AAEb"}
@@ -0,0 +1 @@
1
+ export {}
package/package.json ADDED
@@ -0,0 +1,68 @@
1
+ {
2
+ "name": "@diwauhris/ui",
3
+ "private": false,
4
+ "version": "1.0.0",
5
+ "type": "module",
6
+ "description": "DIWA UHRIS UI component library — React + Tailwind CSS",
7
+ "keywords": ["react", "components", "ui", "design-system", "tailwindcss", "diwa", "uhris"],
8
+ "main": "./lib/index.cjs",
9
+ "module": "./lib/index.mjs",
10
+ "types": "./lib/types/index.d.ts",
11
+ "exports": {
12
+ ".": {
13
+ "import": "./lib/index.mjs",
14
+ "require": "./lib/index.cjs",
15
+ "types": "./lib/types/index.d.ts"
16
+ }
17
+ },
18
+ "files": [
19
+ "lib"
20
+ ],
21
+ "scripts": {
22
+ "dev": "vite",
23
+ "build": "tsc -b && vite build",
24
+ "build:lib": "tsc -b && vite build --config vite.lib.config.ts",
25
+ "lint": "eslint .",
26
+ "preview": "vite preview"
27
+ },
28
+ "peerDependencies": {
29
+ "react": ">=18",
30
+ "react-dom": ">=18"
31
+ },
32
+ "dependencies": {
33
+ "@fontsource-variable/libre-franklin": "^5.3.0",
34
+ "@fontsource/barlow": "^5.3.0",
35
+ "@radix-ui/react-dialog": "^1.1.23",
36
+ "@radix-ui/react-popover": "^1.1.23",
37
+ "@radix-ui/react-tooltip": "^1.2.16",
38
+ "autoprefixer": "^10.5.2",
39
+ "clsx": "^2.1.1",
40
+ "d3": "^7.9.0",
41
+ "date-fns": "^4.4.0",
42
+ "lucide-react": "^1.17.0",
43
+ "postcss": "^8.5.15",
44
+ "react": "^19.2.8",
45
+ "react-calendar": "^6.0.1",
46
+ "react-dom": "^19.2.8",
47
+ "react-router-dom": "^7.17.0",
48
+ "sonner": "^2.0.7",
49
+ "tailwind-merge": "^3.6.0",
50
+ "tailwindcss": "^3.4.17"
51
+ },
52
+ "devDependencies": {
53
+ "@eslint/js": "^10.0.1",
54
+ "@types/d3": "^7.4.3",
55
+ "@types/node": "^24.13.3",
56
+ "@types/react": "^19.2.17",
57
+ "@types/react-dom": "^19.2.3",
58
+ "@vitejs/plugin-react": "^6.0.4",
59
+ "eslint": "^10.8.0",
60
+ "eslint-plugin-react-hooks": "^7.1.1",
61
+ "eslint-plugin-react-refresh": "^0.5.3",
62
+ "globals": "^17.7.0",
63
+ "typescript": "~6.0.2",
64
+ "typescript-eslint": "^8.65.0",
65
+ "vite": "^8.2.0",
66
+ "vite-plugin-dts": "^5.0.3"
67
+ }
68
+ }