@lion-npm/ui 0.0.0-stage → 1.0.2

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 (78) hide show
  1. package/.oxlintrc.json +8 -0
  2. package/AGENTS.md +0 -0
  3. package/Dockerfile +7 -0
  4. package/LICENSE +21 -0
  5. package/README.md +31 -2
  6. package/compose.yml +14 -0
  7. package/index.html +15 -0
  8. package/package.json +27 -4
  9. package/public/favicon.svg +1 -0
  10. package/public/icons.svg +24 -0
  11. package/src/App.tsx +84 -0
  12. package/src/assets/css/buttons/buttons-android.css +251 -0
  13. package/src/assets/css/buttons/buttons-ios.css +213 -0
  14. package/src/assets/css/buttons/buttons-web.css +138 -0
  15. package/src/assets/css/custom.css +8 -0
  16. package/src/assets/css/index.css +60 -0
  17. package/src/assets/css/inputs/inputs-android.css +259 -0
  18. package/src/assets/css/inputs/inputs-bootstrap.css +74 -0
  19. package/src/assets/css/inputs/inputs-ios.css +268 -0
  20. package/src/assets/css/loadings/loading-bar.css +86 -0
  21. package/src/assets/css/modals/modals.css +236 -0
  22. package/src/components/buttons/AndroidButton.tsx +43 -0
  23. package/src/components/buttons/BootstrapButton.tsx +50 -0
  24. package/src/components/buttons/IOSButton.tsx +42 -0
  25. package/src/components/buttons/LionButton.tsx +73 -0
  26. package/src/components/inputs/AndroidInput.tsx +158 -0
  27. package/src/components/inputs/BootstrapInput.tsx +106 -0
  28. package/src/components/inputs/IOSInput.tsx +163 -0
  29. package/src/components/inputs/LionInput.tsx +81 -0
  30. package/src/components/loadings/LoadingBar.tsx +21 -0
  31. package/src/components/modals/LionModal.tsx +155 -0
  32. package/src/context/LionUIComponentsContext.tsx +73 -0
  33. package/src/features/Header.tsx +83 -0
  34. package/src/features/VariantList.tsx +19 -0
  35. package/src/features/buttons/ButtonsSection.tsx +7 -0
  36. package/src/features/buttons/components/ButtonsAndroidSection.tsx +79 -0
  37. package/src/features/buttons/components/ButtonsBootstrapSection.tsx +77 -0
  38. package/src/features/buttons/components/ButtonsCustomSection.tsx +234 -0
  39. package/src/features/buttons/components/ButtonsIOSSection.tsx +78 -0
  40. package/src/features/inputs/InputsSection.tsx +7 -0
  41. package/src/features/inputs/components/InputsAndroidSection.tsx +155 -0
  42. package/src/features/inputs/components/InputsBootstrapSection.tsx +154 -0
  43. package/src/features/inputs/components/InputsCustomSection.tsx +234 -0
  44. package/src/features/inputs/components/InputsIOSSection.tsx +156 -0
  45. package/src/features/loadings/LoadingSection.tsx +5 -0
  46. package/src/features/loadings/components/LoadingBarSection.tsx +74 -0
  47. package/src/features/modals/ModalsSection.tsx +5 -0
  48. package/src/features/modals/components/ModalsAndroidSection.tsx +108 -0
  49. package/src/features/modals/components/ModalsDefaultForm.tsx +31 -0
  50. package/src/features/modals/components/ModalsDefaultInput.tsx +22 -0
  51. package/src/features/modals/components/ModalsIOSSection.tsx +106 -0
  52. package/src/features/modals/components/ModalsWebSection.tsx +104 -0
  53. package/src/index.ts +27 -0
  54. package/src/interfaces/LionUIComponentsProviderProps.tsx +7 -0
  55. package/src/interfaces/LionUIContextProps.tsx +6 -0
  56. package/src/interfaces/LionUIState.tsx +13 -0
  57. package/src/main.tsx +9 -0
  58. package/src/types/Android/AndroidInputShapeTypes.tsx +7 -0
  59. package/src/types/Android/AndroidInputStyleTypes.tsx +7 -0
  60. package/src/types/Android/AndroidShapeTypes.tsx +6 -0
  61. package/src/types/Android/AndroidStyleTypes.tsx +9 -0
  62. package/src/types/ButtonTypes.tsx +9 -0
  63. package/src/types/IOS/IOSInputShapeTypes.tsx +9 -0
  64. package/src/types/IOS/IOSInputStyleTypes.tsx +11 -0
  65. package/src/types/IOS/IOSShapeTypes.tsx +7 -0
  66. package/src/types/IOS/IOSStyleTypes.tsx +9 -0
  67. package/src/types/InputTypes.tsx +13 -0
  68. package/src/types/PlatformTypes.tsx +9 -0
  69. package/src/types/SizeTypes.tsx +11 -0
  70. package/src/types/VariantTypes.tsx +19 -0
  71. package/src/types/Web/BootstrapInputShapeTypes.tsx +9 -0
  72. package/src/types/Web/BootstrapInputStyleTypes.tsx +8 -0
  73. package/src/types/Web/BootstrapShapeTypes.tsx +8 -0
  74. package/src/types/Web/BootstrapStyleTypes.tsx +7 -0
  75. package/tsconfig.app.json +26 -0
  76. package/tsconfig.json +7 -0
  77. package/tsconfig.node.json +23 -0
  78. package/vite.config.ts +30 -0
@@ -0,0 +1,106 @@
1
+ import { Fragment } from "react";
2
+ import { ButtonTypes } from "../../../types/ButtonTypes.tsx";
3
+ import { VariantTypes } from "../../../types/VariantTypes.tsx";
4
+ import { PlatformTypes } from "../../../types/PlatformTypes.tsx";
5
+ import { SizeTypes } from "../../../types/SizeTypes.tsx";
6
+ import { useLionUI } from "../../../context/LionUIComponentsContext.tsx";
7
+ import LionModal from "../../../components/modals/LionModal.tsx";
8
+ import ModalsDefaultForm from "./ModalsDefaultForm.tsx";
9
+ import LionButton from "../../../components/buttons/LionButton.tsx";
10
+ import {IOSStyleTypes} from "../../../types/IOS/IOSStyleTypes.tsx";
11
+ import {IOSShapeTypes} from "../../../types/IOS/IOSShapeTypes.tsx";
12
+
13
+ const variantsList = [
14
+ { type: VariantTypes.SUCCESS, name: "Success" },
15
+ { type: VariantTypes.INFO, name: "Info" },
16
+ { type: VariantTypes.PRIMARY, name: "Primary" },
17
+ { type: VariantTypes.DANGER, name: "Danger" },
18
+ { type: VariantTypes.WARNING, name: "Warning" },
19
+ { type: VariantTypes.LIGHT, name: "Light" },
20
+ { type: VariantTypes.LINK, name: "Link" },
21
+ { type: VariantTypes.DARK, name: "Dark" },
22
+ { type: VariantTypes.LION_PACKAGES, name: "Lion Packages" },
23
+ { type: VariantTypes.LION_PARKING, name: "Lion Parking" },
24
+ { type: VariantTypes.LION_TECH, name: "Lion Tech" },
25
+ { type: VariantTypes.LION_GLAM, name: "Lion Glam" },
26
+ ];
27
+
28
+ const sizesList = [
29
+ { size: SizeTypes.SM, label: "SM", titleSuffix: "Small Modal" },
30
+ { size: SizeTypes.LG, label: "LG", titleSuffix: "Large Modal" },
31
+ { size: SizeTypes.XL, label: "XL", titleSuffix: "Extra Large Modal" },
32
+ { size: SizeTypes.LG, label: "Full", titleSuffix: "Fullscreen Modal", fullscreen: true as const },
33
+ ];
34
+
35
+ const modalsConfig = variantsList.flatMap((variantObj) =>
36
+ sizesList.map((sizeObj) => ({
37
+ id: `ios-modal-${variantObj.type}-${sizeObj.label.toLowerCase()}`,
38
+ label: sizeObj.label,
39
+ size: sizeObj.size,
40
+ fullscreen: sizeObj.fullscreen,
41
+ variant: variantObj.type,
42
+ title: `iOS ${variantObj.name} ${sizeObj.titleSuffix}`,
43
+ }))
44
+ );
45
+
46
+ export default function ModalsIOSSection() {
47
+ const { updateState } = useLionUI();
48
+
49
+ return (
50
+ <Fragment>
51
+ <h2>Modals (iOS)</h2>
52
+
53
+ {variantsList.map((variantObj) => {
54
+ const variantModals = modalsConfig.filter(
55
+ (modal) => modal.variant === variantObj.type
56
+ );
57
+
58
+ return (
59
+ <div key={variantObj.type} className="mb-4">
60
+ <h5 className="text-muted mb-2">{variantObj.name}</h5>
61
+ <div className="d-flex gap-3 flex-wrap">
62
+ {variantModals.map((modal) => (
63
+ <LionButton
64
+ key={modal.id}
65
+ platform={PlatformTypes.IOS}
66
+ variant={modal.variant}
67
+ styleType={IOSStyleTypes.TINTED}
68
+ shape={IOSShapeTypes.ROUNDED}
69
+ // @ts-ignore
70
+ type={ButtonTypes.BUTTON}
71
+ onClick={() => updateState({ modal: modal.id })}
72
+ >
73
+ {modal.label}
74
+ </LionButton>
75
+ ))}
76
+ </div>
77
+ </div>
78
+ );
79
+ })}
80
+
81
+ {modalsConfig.map((modal) => (
82
+ <LionModal
83
+ key={modal.id}
84
+ backdrop={"static"}
85
+ platform={PlatformTypes.IOS}
86
+ modalId={modal.id}
87
+ variant={modal.variant}
88
+ title={modal.title}
89
+ size={modal.size}
90
+ fullscreen={modal.fullscreen}
91
+ body={<ModalsDefaultForm platform={PlatformTypes.IOS} variant={modal.variant} />}
92
+ buttons={(
93
+ <LionButton
94
+ variant={VariantTypes.MODAL}
95
+ //@ts-ignore
96
+ type={ButtonTypes.BUTTON}
97
+ onClick={() => alert("Clicked")}
98
+ >
99
+ Click
100
+ </LionButton>
101
+ )}
102
+ />
103
+ ))}
104
+ </Fragment>
105
+ );
106
+ }
@@ -0,0 +1,104 @@
1
+ import { Fragment } from "react";
2
+ import { ButtonTypes } from "../../../types/ButtonTypes.tsx";
3
+ import { VariantTypes } from "../../../types/VariantTypes.tsx";
4
+ import { PlatformTypes } from "../../../types/PlatformTypes.tsx";
5
+ import { SizeTypes } from "../../../types/SizeTypes.tsx";
6
+ import { useLionUI } from "../../../context/LionUIComponentsContext.tsx";
7
+ import LionModal from "../../../components/modals/LionModal.tsx";
8
+ import ModalsDefaultForm from "./ModalsDefaultForm.tsx";
9
+ import LionButton from "../../../components/buttons/LionButton.tsx";
10
+
11
+ const variantsList = [
12
+ { type: VariantTypes.SUCCESS, name: "Success" },
13
+ { type: VariantTypes.INFO, name: "Info" },
14
+ { type: VariantTypes.PRIMARY, name: "Primary" },
15
+ { type: VariantTypes.DANGER, name: "Danger" },
16
+ { type: VariantTypes.WARNING, name: "Warning" },
17
+ { type: VariantTypes.LIGHT, name: "Light" },
18
+ { type: VariantTypes.LINK, name: "Link" },
19
+ { type: VariantTypes.DARK, name: "Dark" },
20
+ { type: VariantTypes.LION_PACKAGES, name: "Lion Packages" },
21
+ { type: VariantTypes.LION_PARKING, name: "Lion Parking" },
22
+ { type: VariantTypes.LION_TECH, name: "Lion Tech" },
23
+ { type: VariantTypes.LION_GLAM, name: "Lion Glam" },
24
+ ];
25
+
26
+ const sizesList = [
27
+ { size: SizeTypes.SM, label: "SM", titleSuffix: "Small Modal" },
28
+ { size: SizeTypes.LG, label: "LG", titleSuffix: "Large Modal" },
29
+ { size: SizeTypes.XL, label: "XL", titleSuffix: "Extra Large Modal" },
30
+ { size: SizeTypes.LG, label: "Full", titleSuffix: "Fullscreen Modal", fullscreen: true as const },
31
+ ];
32
+
33
+ const modalsConfig = variantsList.flatMap((variantObj) =>
34
+ sizesList.map((sizeObj) => ({
35
+ id: `web-modal-${variantObj.type}-${sizeObj.label.toLowerCase()}`,
36
+ label: sizeObj.label,
37
+ size: sizeObj.size,
38
+ fullscreen: sizeObj.fullscreen,
39
+ variant: variantObj.type,
40
+ title: `Web ${variantObj.name} ${sizeObj.titleSuffix}`,
41
+ }))
42
+ );
43
+
44
+ export default function ModalsWebSection() {
45
+ const { updateState } = useLionUI();
46
+
47
+ return (
48
+ <Fragment>
49
+ <h2>Modals (Web)</h2>
50
+
51
+ {variantsList.map((variantObj) => {
52
+ const variantModals = modalsConfig.filter(
53
+ (modal) => modal.variant === variantObj.type
54
+ );
55
+
56
+ return (
57
+ <div key={variantObj.type} className="mb-4">
58
+ <h5 className="text-muted mb-2">{variantObj.name}</h5>
59
+ <div className="d-flex gap-3 flex-wrap">
60
+ {variantModals.map((modal) => (
61
+ <LionButton
62
+ key={modal.id}
63
+ platform={PlatformTypes.WEB}
64
+ variant={modal.variant}
65
+ type={ButtonTypes.BUTTON}
66
+ onClick={() => updateState({ modal: modal.id })}
67
+ >
68
+ {modal.label}
69
+ </LionButton>
70
+ ))}
71
+ </div>
72
+ </div>
73
+ );
74
+ })}
75
+
76
+ {modalsConfig.map((modal) => (
77
+ <LionModal
78
+ key={modal.id}
79
+ platform={PlatformTypes.WEB}
80
+ modalId={modal.id}
81
+ variant={modal.variant}
82
+ title={modal.title}
83
+ size={modal.size}
84
+ fullscreen={modal.fullscreen}
85
+ body={(
86
+ <ModalsDefaultForm
87
+ platform={PlatformTypes.WEB}
88
+ variant={modal.variant}
89
+ />
90
+ )}
91
+ buttons={(
92
+ <LionButton
93
+ variant={VariantTypes.MODAL}
94
+ type={ButtonTypes.BUTTON}
95
+ onClick={() => alert("Clicked")}
96
+ >
97
+ Click
98
+ </LionButton>
99
+ )}
100
+ />
101
+ ))}
102
+ </Fragment>
103
+ );
104
+ }
package/src/index.ts ADDED
@@ -0,0 +1,27 @@
1
+ import "./assets/css/index.css";
2
+ import "./assets/css/buttons/buttons-android.css";
3
+ import "./assets/css/buttons/buttons-ios.css";
4
+ import "./assets/css/buttons/buttons-web.css";
5
+ import "./assets/css/inputs/inputs-android.css";
6
+ import "./assets/css/inputs/inputs-ios.css";
7
+ import "./assets/css/inputs/inputs-bootstrap.css";
8
+ import "./assets/css/modals/modals.css";
9
+ import "./assets/css/loadings/loading-bar.css";
10
+
11
+ export { LionUIComponentsProvider } from './context/LionUIComponentsContext';
12
+ export { default as AndroidButton } from './components/buttons/AndroidButton';
13
+ export { default as BootstrapButton } from './components/buttons/BootstrapButton';
14
+ export { default as IOSButton } from './components/buttons/IOSButton';
15
+ export { default as LionButton } from './components/buttons/LionButton';
16
+ export { default as AndroidInput } from './components/inputs/AndroidInput';
17
+ export { default as BootstrapInput } from './components/inputs/BootstrapInput';
18
+ export { default as IOSInput } from './components/inputs/IOSInput';
19
+ export { default as LionInput } from './components/inputs/LionInput';
20
+ export { default as LoadingBar } from './components/loadings/LoadingBar';
21
+ export { default as LionModal } from './components/modals/LionModal';
22
+
23
+ export * from './types/ButtonTypes';
24
+ export * from './types/InputTypes';
25
+ export * from './types/PlatformTypes';
26
+ export * from './types/SizeTypes';
27
+ export * from './types/VariantTypes';
@@ -0,0 +1,7 @@
1
+ import React from "react";
2
+ import type { PlatformTypes } from "../types/PlatformTypes.tsx";
3
+
4
+ export interface LionUIComponentsProviderProps {
5
+ children: React.ReactNode;
6
+ defaultPlatform?: PlatformTypes;
7
+ }
@@ -0,0 +1,6 @@
1
+ import type { LionUIState } from "./LionUIState.tsx";
2
+
3
+ export interface LionUIContextProps {
4
+ state: LionUIState;
5
+ updateState: (partial: Partial<LionUIState>) => void;
6
+ }
@@ -0,0 +1,13 @@
1
+ import type { PlatformTypes } from "../types/PlatformTypes.tsx";
2
+
3
+ export interface LionUIState {
4
+ platform: PlatformTypes;
5
+ loading: boolean;
6
+ reload: boolean;
7
+ booting: boolean;
8
+ sidebar: boolean;
9
+ version: string | null,
10
+ modal?: string | null;
11
+ logo: File | string | null;
12
+ background: File | string | null;
13
+ }
package/src/main.tsx ADDED
@@ -0,0 +1,9 @@
1
+ import { createRoot } from 'react-dom/client'
2
+ import App from "./App.tsx";
3
+ import {BrowserRouter} from 'react-router-dom';
4
+
5
+ createRoot(document.getElementById('root')!).render(
6
+ <BrowserRouter>
7
+ <App />
8
+ </BrowserRouter>,
9
+ )
@@ -0,0 +1,7 @@
1
+ export const AndroidInputShapeTypes = {
2
+ SMALL: "small",
3
+ NORMAL: "normal",
4
+ } as const;
5
+
6
+ export type AndroidInputShapeTypes =
7
+ (typeof AndroidInputShapeTypes)[keyof typeof AndroidInputShapeTypes];
@@ -0,0 +1,7 @@
1
+ export const AndroidInputStyleTypes = {
2
+ FILLED: "filled",
3
+ OUTLINED: "outlined",
4
+ } as const;
5
+
6
+ export type AndroidInputStyleTypes =
7
+ (typeof AndroidInputStyleTypes)[keyof typeof AndroidInputStyleTypes];
@@ -0,0 +1,6 @@
1
+ export const AndroidShapeTypes = {
2
+ PILL: "pill",
3
+ ROUNDED: "rounded",
4
+ } as const;
5
+
6
+ export type AndroidShapeTypes = (typeof AndroidShapeTypes)[keyof typeof AndroidShapeTypes];
@@ -0,0 +1,9 @@
1
+ export const AndroidStyleTypes = {
2
+ FILLED: "filled",
3
+ ELEVATED: "elevated",
4
+ TONAL: "tonal",
5
+ OUTLINED: "outlined",
6
+ TEXT: "text",
7
+ } as const;
8
+
9
+ export type AndroidStyleTypes = (typeof AndroidStyleTypes)[keyof typeof AndroidStyleTypes];
@@ -0,0 +1,9 @@
1
+ export const ButtonTypes = {
2
+ SUBMIT: "submit",
3
+ BUTTON: "button",
4
+ RESET: "reset",
5
+ UNDEFINED: undefined,
6
+ } as const;
7
+
8
+ export type ButtonTypes =
9
+ (typeof ButtonTypes)[keyof typeof ButtonTypes];
@@ -0,0 +1,9 @@
1
+ // Official iOS / SwiftUI layout shapes and corner radiuses
2
+ export const IOSInputShapeTypes = {
3
+ ROUNDED: "rounded", // Standard continuous iOS rounded corner
4
+ PILL: "pill", // Capsule shape
5
+ SQUARE: "square", // Sharp edges
6
+ } as const;
7
+
8
+ export type IOSInputShapeTypes =
9
+ (typeof IOSInputShapeTypes)[keyof typeof IOSInputShapeTypes];
@@ -0,0 +1,11 @@
1
+ // Official SwiftUI TextFieldStyle representations from Apple Documentation
2
+ export const IOSInputStyleTypes = {
3
+ FORM: "form", // SwiftUI Form/List row style (Horizontal Label + Input/Prompt)
4
+ ROUNDED_BORDER: "rounded-border", // SwiftUI .textFieldStyle(.roundedBorder)
5
+ FILLED: "filled", // iOS Native filled field style (Background tinted)
6
+ OUTLINED: "outlined", // Custom outlined border style
7
+ PLAIN: "plain", // SwiftUI .textFieldStyle(.plain)
8
+ } as const;
9
+
10
+ export type IOSInputStyleTypes =
11
+ (typeof IOSInputStyleTypes)[keyof typeof IOSInputStyleTypes];
@@ -0,0 +1,7 @@
1
+ // iOS HIG Corner Styles
2
+ export const IOSShapeTypes = {
3
+ ROUNDED: "rounded", // Standard squircle (rounded rectangle)
4
+ CAPSULE: "capsule", // Fully rounded pill shape
5
+ } as const;
6
+
7
+ export type IOSShapeTypes = (typeof IOSShapeTypes)[keyof typeof IOSShapeTypes];
@@ -0,0 +1,9 @@
1
+ // iOS HIG Button Styles
2
+ export const IOSStyleTypes = {
3
+ FILLED: "filled", // Prominent background fill (High emphasis)
4
+ TINTED: "tinted", // Semi-transparent colored background (Medium emphasis)
5
+ GRAY: "gray", // Neutral background tint
6
+ PLAIN: "plain", // Borderless text button (Low emphasis)
7
+ } as const;
8
+
9
+ export type IOSStyleTypes = (typeof IOSStyleTypes)[keyof typeof IOSStyleTypes];
@@ -0,0 +1,13 @@
1
+ export const InputTypes = {
2
+ TEXT: "text",
3
+ PASSWORD: "password",
4
+ EMAIL: "email",
5
+ NUMBER: "number",
6
+ TEL: "tel",
7
+ URL: "url",
8
+ DATE: "date",
9
+ DATETIME: "datetime",
10
+ } as const;
11
+
12
+ export type InputTypes =
13
+ (typeof InputTypes)[keyof typeof InputTypes];
@@ -0,0 +1,9 @@
1
+ export const PlatformTypes = {
2
+ WEB: "web",
3
+ ANDROID: "android",
4
+ IOS: "ios",
5
+ DESKTOP: "desktop",
6
+ };
7
+
8
+ export type PlatformTypes =
9
+ (typeof PlatformTypes)[keyof typeof PlatformTypes];
@@ -0,0 +1,11 @@
1
+ export const SizeTypes = {
2
+ SX: "sx",
3
+ SM: "sm",
4
+ MD: "md",
5
+ LG: "lg",
6
+ XL: "lg",
7
+ XXL: "lg",
8
+ } as const;
9
+
10
+ export type SizeTypes =
11
+ (typeof SizeTypes)[keyof typeof SizeTypes];
@@ -0,0 +1,19 @@
1
+ export const VariantTypes = {
2
+ SECONDARY: "secondary",
3
+ PRIMARY: "primary",
4
+ SUCCESS: "success",
5
+ DANGER: "danger",
6
+ WARNING: "warning",
7
+ INFO: "info",
8
+ LIGHT: "light",
9
+ LINK: "link",
10
+ DARK: "dark",
11
+ MODAL: "modal",
12
+ LION_PACKAGES: "lion-packages",
13
+ LION_PARKING: "lion-parking",
14
+ LION_TECH: "lion-tech",
15
+ LION_GLAM: "lion-glam",
16
+ } as const;
17
+
18
+ export type VariantTypes =
19
+ (typeof VariantTypes)[keyof typeof VariantTypes];
@@ -0,0 +1,9 @@
1
+ // Official Bootstrap 5 layout shapes matching border-radius utilities
2
+ export const BootstrapInputShapeTypes = {
3
+ ROUNDED: "rounded", // Default Bootstrap border-radius
4
+ PILL: "rounded-pill", // Native Bootstrap .rounded-pill class
5
+ SQUARE: "rounded-0", // Native Bootstrap .rounded-0 class
6
+ } as const;
7
+
8
+ export type BootstrapInputShapeTypes =
9
+ (typeof BootstrapInputShapeTypes)[keyof typeof BootstrapInputShapeTypes];
@@ -0,0 +1,8 @@
1
+ // Official Bootstrap 5 Input Style representations
2
+ export const BootstrapInputStyleTypes = {
3
+ FLOATING: "floating", // Native Bootstrap 5 .form-floating
4
+ STANDARD: "standard", // Native Bootstrap 5 .form-label + .form-control
5
+ } as const;
6
+
7
+ export type BootstrapInputStyleTypes =
8
+ (typeof BootstrapInputStyleTypes)[keyof typeof BootstrapInputStyleTypes];
@@ -0,0 +1,8 @@
1
+ // Bootstrap 5 Corner Radius Options
2
+ export const BootstrapShapeTypes = {
3
+ STANDARD: "standard", // Standard Bootstrap border radius (~0.375rem)
4
+ PILL: "pill", // Fully rounded pill shape (.rounded-pill)
5
+ SQUARE: "square", // Sharp corners (.rounded-0)
6
+ } as const;
7
+
8
+ export type BootstrapShapeTypes = (typeof BootstrapShapeTypes)[keyof typeof BootstrapShapeTypes];
@@ -0,0 +1,7 @@
1
+ // Bootstrap 5 Button Styles
2
+ export const BootstrapStyleTypes = {
3
+ FILLED: "filled", // Standard solid Bootstrap button (e.g., .btn-primary)
4
+ OUTLINED: "outlined", // Bordered transparent button (e.g., .btn-outline-primary)
5
+ } as const;
6
+
7
+ export type BootstrapStyleTypes = (typeof BootstrapStyleTypes)[keyof typeof BootstrapStyleTypes];
@@ -0,0 +1,26 @@
1
+ {
2
+ "compilerOptions": {
3
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
4
+ "target": "es2023",
5
+ "lib": ["ES2023", "DOM"],
6
+ "module": "esnext",
7
+ "types": ["vite/client"],
8
+ "allowArbitraryExtensions": true,
9
+ "skipLibCheck": true,
10
+
11
+ /* Bundler mode */
12
+ "moduleResolution": "bundler",
13
+ "allowImportingTsExtensions": true,
14
+ "verbatimModuleSyntax": true,
15
+ "moduleDetection": "force",
16
+ "noEmit": true,
17
+ "jsx": "react-jsx",
18
+
19
+ /* Linting */
20
+ "noUnusedLocals": true,
21
+ "noUnusedParameters": true,
22
+ "erasableSyntaxOnly": true,
23
+ "noFallthroughCasesInSwitch": true
24
+ },
25
+ "include": ["src"]
26
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,7 @@
1
+ {
2
+ "files": [],
3
+ "references": [
4
+ { "path": "./tsconfig.app.json" },
5
+ { "path": "./tsconfig.node.json" }
6
+ ]
7
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "compilerOptions": {
3
+ "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
4
+ "target": "es2023",
5
+ "lib": ["ES2023"],
6
+ "types": ["node"],
7
+ "skipLibCheck": true,
8
+
9
+ /* Bundler mode */
10
+ "module": "nodenext",
11
+ "allowImportingTsExtensions": true,
12
+ "verbatimModuleSyntax": true,
13
+ "moduleDetection": "force",
14
+ "noEmit": true,
15
+
16
+ /* Linting */
17
+ "noUnusedLocals": true,
18
+ "noUnusedParameters": true,
19
+ "erasableSyntaxOnly": true,
20
+ "noFallthroughCasesInSwitch": true
21
+ },
22
+ "include": ["vite.config.ts"]
23
+ }
package/vite.config.ts ADDED
@@ -0,0 +1,30 @@
1
+ import { defineConfig } from 'vite';
2
+ import react from '@vitejs/plugin-react';
3
+ import { resolve } from 'path';
4
+
5
+ export default defineConfig({
6
+ plugins: [react()],
7
+ build: {
8
+ lib: {
9
+ entry: resolve(__dirname, 'src/index.ts'),
10
+ name: 'LionUI',
11
+ fileName: 'index',
12
+ },
13
+ rollupOptions: {
14
+ external: ['react', 'react-dom', 'react/jsx-runtime'],
15
+ output: {
16
+ globals: {
17
+ react: 'React',
18
+ 'react-dom': 'ReactDOM',
19
+ 'react/jsx-runtime': 'react/jsx-runtime',
20
+ },
21
+ assetFileNames: (assetInfo) => {
22
+ if (assetInfo.name && assetInfo.name.endsWith('.css')) {
23
+ return 'style.css';
24
+ }
25
+ return 'assets/[name]-[hash][extname]';
26
+ },
27
+ },
28
+ },
29
+ },
30
+ });