@net-advantage/jo-ui-button 0.1.0 → 1.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,61 +1,61 @@
1
- # @net-advantage/jo-ui-button
2
-
3
- Publishable single-button primitive package.
4
-
5
- The button follows a strict MVVM split. The model normalizes variant and size. The view-model owns the click guard. The view renders the view-model.
6
-
7
- ## MVVM
8
-
9
- ```mermaid
10
- flowchart LR
11
- Props["ButtonProps"] --> ViewModel["useButtonViewModel"]
12
- Model["button.model.ts<br/>normalize variant and size"] --> ViewModel
13
- ViewModel --> View["Button.tsx"]
14
- View -->|"onClick"| ViewModel
15
- ViewModel -->|"onClick"| Host["Host application"]
16
- ```
17
-
18
- | Layer | File | Responsibility |
19
- | --- | --- | --- |
20
- | Contract | [button.types.ts](src/button.types.ts) | Props, variant, size, and view-model |
21
- | Model | [button.model.ts](src/button.model.ts) | Default missing variant to secondary and size to md |
22
- | View-model | [button.view-model.ts](src/button.view-model.ts) | Map props into render-ready state and guard clicks |
23
- | View | [Button.tsx](src/Button.tsx) | Render the button from the view-model |
24
-
25
- ## Models
26
-
27
- ```mermaid
28
- flowchart TD
29
- Props["ButtonProps"] --> Variant["ButtonVariant"]
30
- Props --> Size["ButtonSize"]
31
- Variant --> ViewModel["ButtonViewModel"]
32
- Size --> ViewModel
33
- Props --> ViewModel
34
- ```
35
-
36
- - `ButtonVariant` is `primary`, `secondary`, `ghost`, `primary-modal`, `text-muted`, or `destructive`. A missing variant becomes `secondary`.
37
- - `ButtonSize` is `sm`, `md`, or `lg`. A missing size becomes `md`.
38
- - `loading` disables the button and shows the loading mark. A disabled or loading button does not call `onClick`.
39
-
40
- ## Variants
41
-
42
- - `primary`
43
- - `secondary`
44
- - `ghost`
45
- - `primary-modal` (matches New Journey Type "Next" styling)
46
- - `text-muted` (matches New Journey Type "Cancel" styling)
47
- - `destructive` (reddish emphasis action)
48
-
49
- ## Structure
50
-
51
- - src: runtime component, model, view-model, and types.
52
- - stories: Storybook stories for documentation and visual testing.
53
-
54
- ## Publish footprint
55
-
56
- This package publishes only:
57
-
58
- - dist
59
- - README.md
60
-
61
- Stories and tests are excluded from the published artifact by design.
1
+ # @net-advantage/jo-ui-button
2
+
3
+ Publishable single-button primitive package.
4
+
5
+ The button follows a strict MVVM split. The model normalizes variant and size. The view-model owns the click guard. The view renders the view-model.
6
+
7
+ ## MVVM
8
+
9
+ ```mermaid
10
+ flowchart LR
11
+ Props["ButtonProps"] --> ViewModel["useButtonViewModel"]
12
+ Model["button.model.ts<br/>normalize variant and size"] --> ViewModel
13
+ ViewModel --> View["Button.tsx"]
14
+ View -->|"onClick"| ViewModel
15
+ ViewModel -->|"onClick"| Host["Host application"]
16
+ ```
17
+
18
+ | Layer | File | Responsibility |
19
+ | --- | --- | --- |
20
+ | Contract | [button.types.ts](src/button.types.ts) | Props, variant, size, and view-model |
21
+ | Model | [button.model.ts](src/button.model.ts) | Default missing variant to secondary and size to md |
22
+ | View-model | [button.view-model.ts](src/button.view-model.ts) | Map props into render-ready state and guard clicks |
23
+ | View | [Button.tsx](src/Button.tsx) | Render the button from the view-model |
24
+
25
+ ## Models
26
+
27
+ ```mermaid
28
+ flowchart TD
29
+ Props["ButtonProps"] --> Variant["ButtonVariant"]
30
+ Props --> Size["ButtonSize"]
31
+ Variant --> ViewModel["ButtonViewModel"]
32
+ Size --> ViewModel
33
+ Props --> ViewModel
34
+ ```
35
+
36
+ - `ButtonVariant` is `primary`, `secondary`, `ghost`, `primary-modal`, `text-muted`, or `destructive`. A missing variant becomes `secondary`.
37
+ - `ButtonSize` is `sm`, `md`, or `lg`. A missing size becomes `md`.
38
+ - `loading` disables the button and shows the loading mark. A disabled or loading button does not call `onClick`.
39
+
40
+ ## Variants
41
+
42
+ - `primary`
43
+ - `secondary`
44
+ - `ghost`
45
+ - `primary-modal` (matches New Journey Type "Next" styling)
46
+ - `text-muted` (matches New Journey Type "Cancel" styling)
47
+ - `destructive` (reddish emphasis action)
48
+
49
+ ## Structure
50
+
51
+ - src: runtime component, model, view-model, and types.
52
+ - stories: Storybook stories for documentation and visual testing.
53
+
54
+ ## Publish footprint
55
+
56
+ This package publishes only:
57
+
58
+ - dist
59
+ - README.md
60
+
61
+ Stories and tests are excluded from the published artifact by design.
package/dist/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ import "./jo-ui-button.css";
1
2
  import { useCallback as e, useMemo as t } from "react";
2
3
  //#region \0rolldown/runtime.js
3
4
  var n = (e, t) => () => (t || (e((t = { exports: {} }).exports, t), e = null), t.exports), r = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy < "u" ? new Proxy(e, { get: (e, t) => (typeof require < "u" ? require : e)[t] }) : e)(function(e) {
@@ -1,2 +1,2 @@
1
- .container{width:100%}@media (width>=640px){.container{max-width:640px}}@media (width>=768px){.container{max-width:768px}}@media (width>=1024px){.container{max-width:1024px}}@media (width>=1280px){.container{max-width:1280px}}@media (width>=1536px){.container{max-width:1536px}}.jo-ui-button{--jo-ui-button-font-family:Inter,"Segoe UI",system-ui,sans-serif;--jo-ui-button-primary-bg:var(--jo-color-accent,#1f2f5f);--jo-ui-button-primary-text:var(--jo-color-accent-contrast,#fff);--jo-ui-button-primary-border:var(--jo-color-accent,#1f2f5f);--jo-ui-button-primary-hover-bg:#162448;--jo-ui-button-primary-hover-border:#162448;--jo-ui-button-secondary-bg:var(--jo-color-surface-alt,#f7f9fc);--jo-ui-button-secondary-text:var(--jo-color-text,#1f2a44);--jo-ui-button-secondary-border:var(--jo-color-border,#d8dfeb);--jo-ui-button-secondary-hover-bg:#eef3fa;--jo-ui-button-secondary-hover-border:#c8d2e3;--jo-ui-button-ghost-bg:transparent;--jo-ui-button-ghost-text:var(--jo-color-text,#1f2a44);--jo-ui-button-ghost-border:transparent;--jo-ui-button-modal-primary-bg:#14224a;--jo-ui-button-modal-primary-text:#fff;--jo-ui-button-modal-text:oklch(55.1% .027 264.364);--jo-ui-button-destructive-bg:#d94a5a;--jo-ui-button-destructive-border:#d94a5a;--jo-ui-button-destructive-text:#fff;--jo-ui-button-destructive-hover:#c43f4e;--jo-ui-button-focus-color:var(--jo-color-focus,#5f7fe3);--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);min-height:2.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);font-size:.875rem;font-weight:500;line-height:1;font-family:var(--jo-ui-button-font-family);border-width:1px;border-color:var(--jo-ui-button-primary-border);color:var(--jo-ui-button-primary-text);background:var(--jo-ui-button-primary-bg);border-radius:.375rem;justify-content:center;align-items:center;gap:.5rem;padding:.5rem 1rem;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1);display:inline-flex}.jo-ui-button:disabled{cursor:not-allowed;opacity:.65}.jo-ui-button:focus-visible{outline-offset:2px;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);--tw-ring-offset-width:2px;--tw-ring-color:var(--jo-ui-button-focus-color);outline:2px solid #0000}.jo-ui-button--sm{min-height:2rem;padding:.5rem .75rem;font-size:.875rem;line-height:1.25rem}.jo-ui-button--md{font-size:.95rem}.jo-ui-button--lg{min-height:2.75rem;padding:.75rem 1.125rem;font-size:1rem;line-height:1.5rem}.jo-ui-button--primary{border-color:var(--jo-ui-button-primary-border);color:var(--jo-ui-button-primary-text);background:var(--jo-ui-button-primary-bg)}.jo-ui-button--primary:hover:not(:disabled){border-color:var(--jo-ui-button-primary-hover-border);background:var(--jo-ui-button-primary-hover-bg)}.jo-ui-button--secondary{border-color:var(--jo-ui-button-secondary-border);color:var(--jo-ui-button-secondary-text);background:var(--jo-ui-button-secondary-bg)}.jo-ui-button--secondary:hover:not(:disabled){border-color:var(--jo-ui-button-secondary-hover-border);background:var(--jo-ui-button-secondary-hover-bg)}.theme-dark .jo-ui-button{--jo-ui-button-primary-hover-bg:#b3c6ff;--jo-ui-button-primary-hover-border:#b3c6ff;--jo-ui-button-secondary-hover-bg:#223552;--jo-ui-button-secondary-hover-border:#3a507a}.jo-ui-button--ghost{border-color:var(--jo-ui-button-ghost-border);color:var(--jo-ui-button-ghost-text);background:var(--jo-ui-button-ghost-bg)}.jo-ui-button--ghost:hover:not(:disabled){--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.jo-ui-button--primary-modal{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;min-height:0;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);color:var(--jo-ui-button-modal-primary-text);background:var(--jo-ui-button-modal-primary-bg);border-width:0;border-color:#0000;border-radius:.5rem;padding:.5rem 1rem;font-size:12.5px;font-weight:700;line-height:18.75px}.jo-ui-button--primary-modal:hover:not(:disabled){background:#0f1a38}.jo-ui-button--text-muted{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;min-height:0;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);color:var(--jo-ui-button-modal-text);border-width:0;border-color:#0000;border-radius:0;padding:0;font-size:12px;font-weight:600;line-height:18px}.jo-ui-button--text-muted,.jo-ui-button--text-muted:hover:not(:disabled){background:0 0}.jo-ui-button--text-muted:hover:not(:disabled){color:#1c2333}.theme-dark .jo-ui-button.jo-ui-button--ghost,.theme-dark .jo-ui-button.jo-ui-button--ghost .jo-ui-button__icon,.theme-dark .jo-ui-button.jo-ui-button--ghost .jo-ui-button__label{color:#e7ecf8!important}.theme-dark .jo-ui-button.jo-ui-button--ghost:hover:not(:disabled){background:#23314d!important}.theme-dark .jo-ui-button.jo-ui-button--text-muted,.theme-dark .jo-ui-button.jo-ui-button--text-muted .jo-ui-button__icon,.theme-dark .jo-ui-button.jo-ui-button--text-muted .jo-ui-button__label{color:#b9c4da!important}.theme-dark .jo-ui-button.jo-ui-button--text-muted:hover:not(:disabled),.theme-dark .jo-ui-button.jo-ui-button--text-muted:hover:not(:disabled) .jo-ui-button__icon,.theme-dark .jo-ui-button.jo-ui-button--text-muted:hover:not(:disabled) .jo-ui-button__label{color:#e7ecf8!important;background:0 0!important}.jo-ui-button--destructive{border-color:var(--jo-ui-button-destructive-border);color:var(--jo-ui-button-destructive-text);background:var(--jo-ui-button-destructive-bg)}.jo-ui-button--destructive:hover:not(:disabled){border-color:var(--jo-ui-button-destructive-hover);background:var(--jo-ui-button-destructive-hover)}.jo-ui-button--loading{position:relative}.jo-ui-button__icon,.jo-ui-button__label{align-items:center;display:inline-flex}.relative{position:relative}.inline-flex{display:inline-flex}.min-h-0{min-height:0}.min-h-10{min-height:2.5rem}.min-h-11{min-height:2.75rem}.min-h-8{min-height:2rem}.cursor-not-allowed{cursor:not-allowed}.items-center{align-items:center}.justify-center{justify-content:center}.gap-2{gap:.5rem}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-none{border-radius:0}.border{border-width:1px}.border-0{border-width:0}.border-blue-700{--tw-border-opacity:1;border-color:rgb(29 78 216/var(--tw-border-opacity,1))}.px-0{padding-left:0;padding-right:0}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-\[1\.125rem\]{padding-left:1.125rem;padding-right:1.125rem}.py-0{padding-top:0;padding-bottom:0}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.text-\[0\.95rem\]{font-size:.95rem}.text-\[12\.5px\]{font-size:12.5px}.text-\[12px\]{font-size:12px}.text-sm{font-size:.875rem;line-height:1.25rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.leading-\[18\.75px\]{line-height:18.75px}.leading-\[18px\]{line-height:18px}.leading-none{line-height:1}.shadow-sm{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline-offset:2px;outline:2px solid #0000}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}
1
+ .container{width:100%}@media (width>=640px){.container{max-width:640px}}@media (width>=768px){.container{max-width:768px}}@media (width>=1024px){.container{max-width:1024px}}@media (width>=1280px){.container{max-width:1280px}}@media (width>=1536px){.container{max-width:1536px}}.jo-ui-button{--jo-ui-button-font-family:Inter,"Segoe UI",system-ui,sans-serif;--jo-ui-button-primary-bg:var(--jo-color-accent,#1f2f5f);--jo-ui-button-primary-text:var(--jo-color-accent-contrast,#fff);--jo-ui-button-primary-border:var(--jo-color-accent,#1f2f5f);--jo-ui-button-primary-hover-bg:#162448;--jo-ui-button-primary-hover-border:#162448;--jo-ui-button-secondary-bg:var(--jo-color-surface-alt,#f7f9fc);--jo-ui-button-secondary-text:var(--jo-color-text,#1f2a44);--jo-ui-button-secondary-border:var(--jo-color-border,#d8dfeb);--jo-ui-button-secondary-hover-bg:#eef3fa;--jo-ui-button-secondary-hover-border:#c8d2e3;--jo-ui-button-ghost-bg:transparent;--jo-ui-button-ghost-text:var(--jo-color-text,#1f2a44);--jo-ui-button-ghost-border:transparent;--jo-ui-button-modal-primary-bg:#14224a;--jo-ui-button-modal-primary-text:#fff;--jo-ui-button-modal-text:oklch(55.1% .027 264.364);--jo-ui-button-destructive-bg:#d94a5a;--jo-ui-button-destructive-border:#d94a5a;--jo-ui-button-destructive-text:#fff;--jo-ui-button-destructive-hover:#c43f4e;--jo-ui-button-focus-color:var(--jo-color-focus,#5f7fe3);--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);min-height:2.5rem;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);font-size:.875rem;font-weight:500;line-height:1;font-family:var(--jo-ui-button-font-family);border-width:1px;border-color:var(--jo-ui-button-primary-border);color:var(--jo-ui-button-primary-text);background:var(--jo-ui-button-primary-bg);border-radius:.375rem;justify-content:center;align-items:center;gap:.5rem;padding:.5rem 1rem;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1);display:inline-flex}.jo-ui-button:disabled{cursor:not-allowed;opacity:.65}.jo-ui-button:focus-visible{outline-offset:2px;--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000);--tw-ring-offset-width:2px;--tw-ring-color:var(--jo-ui-button-focus-color);outline:2px solid #0000}.jo-ui-button--sm{min-height:2rem;padding:.5rem .75rem;font-size:.875rem;line-height:1.25rem}.jo-ui-button--md{font-size:.95rem}.jo-ui-button--lg{min-height:2.75rem;padding:.75rem 1.125rem;font-size:1rem;line-height:1.5rem}.jo-ui-button--primary{border-color:var(--jo-ui-button-primary-border);color:var(--jo-ui-button-primary-text);background:var(--jo-ui-button-primary-bg)}.jo-ui-button--primary:hover:not(:disabled){border-color:var(--jo-ui-button-primary-hover-border);background:var(--jo-ui-button-primary-hover-bg)}.jo-ui-button--secondary{border-color:var(--jo-ui-button-secondary-border);color:var(--jo-ui-button-secondary-text);background:var(--jo-ui-button-secondary-bg)}.jo-ui-button--secondary:hover:not(:disabled){border-color:var(--jo-ui-button-secondary-hover-border);background:var(--jo-ui-button-secondary-hover-bg)}.theme-dark .jo-ui-button{--jo-ui-button-primary-hover-bg:#b3c6ff;--jo-ui-button-primary-hover-border:#b3c6ff;--jo-ui-button-secondary-hover-bg:#223552;--jo-ui-button-secondary-hover-border:#3a507a}.jo-ui-button--ghost{border-color:var(--jo-ui-button-ghost-border);color:var(--jo-ui-button-ghost-text);background:var(--jo-ui-button-ghost-bg)}.jo-ui-button--ghost:hover:not(:disabled){--tw-bg-opacity:1;background-color:rgb(241 245 249/var(--tw-bg-opacity,1))}.jo-ui-button--primary-modal{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;min-height:0;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);color:var(--jo-ui-button-modal-primary-text);background:var(--jo-ui-button-modal-primary-bg);border-width:0;border-color:#0000;border-radius:.5rem;padding:.5rem 1rem;font-size:12.5px;font-weight:700;line-height:18.75px}.jo-ui-button--primary-modal:hover:not(:disabled){background:#0f1a38}.jo-ui-button--text-muted{--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;min-height:0;box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);color:var(--jo-ui-button-modal-text);background:0 0;border-width:0;border-color:#0000;border-radius:0;padding:0;font-size:12px;font-weight:600;line-height:18px}.jo-ui-button--text-muted:hover:not(:disabled){color:#1c2333;background:0 0}.theme-dark .jo-ui-button.jo-ui-button--ghost,.theme-dark .jo-ui-button.jo-ui-button--ghost .jo-ui-button__icon,.theme-dark .jo-ui-button.jo-ui-button--ghost .jo-ui-button__label{color:#e7ecf8!important}.theme-dark .jo-ui-button.jo-ui-button--ghost:hover:not(:disabled){background:#23314d!important}.theme-dark .jo-ui-button.jo-ui-button--text-muted,.theme-dark .jo-ui-button.jo-ui-button--text-muted .jo-ui-button__icon,.theme-dark .jo-ui-button.jo-ui-button--text-muted .jo-ui-button__label{color:#b9c4da!important}.theme-dark .jo-ui-button.jo-ui-button--text-muted:hover:not(:disabled),.theme-dark .jo-ui-button.jo-ui-button--text-muted:hover:not(:disabled) .jo-ui-button__icon,.theme-dark .jo-ui-button.jo-ui-button--text-muted:hover:not(:disabled) .jo-ui-button__label{color:#e7ecf8!important;background:0 0!important}.jo-ui-button--destructive{border-color:var(--jo-ui-button-destructive-border);color:var(--jo-ui-button-destructive-text);background:var(--jo-ui-button-destructive-bg)}.jo-ui-button--destructive:hover:not(:disabled){border-color:var(--jo-ui-button-destructive-hover);background:var(--jo-ui-button-destructive-hover)}.jo-ui-button--loading{position:relative}.jo-ui-button__icon,.jo-ui-button__label{align-items:center;display:inline-flex}.relative{position:relative}.inline-flex{display:inline-flex}.min-h-0{min-height:0}.min-h-10{min-height:2.5rem}.min-h-11{min-height:2.75rem}.min-h-8{min-height:2rem}.cursor-not-allowed{cursor:not-allowed}.items-center{align-items:center}.justify-center{justify-content:center}.gap-2{gap:.5rem}.rounded-lg{border-radius:.5rem}.rounded-md{border-radius:.375rem}.rounded-none{border-radius:0}.border{border-width:1px}.border-0{border-width:0}.border-blue-700{--tw-border-opacity:1;border-color:rgb(29 78 216/var(--tw-border-opacity,1))}.px-0{padding-left:0;padding-right:0}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-\[1\.125rem\]{padding-left:1.125rem;padding-right:1.125rem}.py-0{padding-top:0;padding-bottom:0}.py-2{padding-top:.5rem;padding-bottom:.5rem}.py-3{padding-top:.75rem;padding-bottom:.75rem}.text-\[0\.95rem\]{font-size:.95rem}.text-\[12\.5px\]{font-size:12.5px}.text-\[12px\]{font-size:12px}.text-sm{font-size:.875rem;line-height:1.25rem}.font-bold{font-weight:700}.font-medium{font-weight:500}.font-semibold{font-weight:600}.leading-\[18\.75px\]{line-height:18.75px}.leading-\[18px\]{line-height:18px}.leading-none{line-height:1}.shadow-sm{--tw-shadow:0 1px 2px 0 #0000000d;--tw-shadow-colored:0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.outline-none{outline-offset:2px;outline:2px solid #0000}.ring-2{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow,0 0 #0000)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-duration:.15s;transition-timing-function:cubic-bezier(.4,0,.2,1)}
2
2
  /*$vite$:1*/
package/package.json CHANGED
@@ -1,42 +1,43 @@
1
- {
2
- "name": "@net-advantage/jo-ui-button",
3
- "version": "0.1.0",
4
- "private": false,
5
- "type": "module",
6
- "main": "./dist/index.cjs",
7
- "module": "./dist/index.js",
8
- "types": "./dist/index.d.ts",
9
- "exports": {
10
- ".": {
11
- "types": "./dist/index.d.ts",
12
- "import": "./dist/index.js",
13
- "require": "./dist/index.cjs"
14
- }
15
- },
16
- "files": [
17
- "dist",
18
- "README.md"
19
- ],
20
- "sideEffects": [
21
- "**/*.css"
22
- ],
23
- "peerDependencies": {
24
- "react": "^19.0.0",
25
- "react-dom": "^19.0.0"
26
- },
27
- "scripts": {
28
- "build": "pnpm run build:styles && pnpm run build:js && pnpm run build:types",
29
- "build:styles": "pnpm exec tailwindcss -c ../../tailwind.controls.config.cjs -i ./src/button.tailwind.css -o ./src/button.css --minify",
30
- "build:types": "tsc -p tsconfig.build.json",
31
- "build:js": "vite build",
32
- "test": "vitest run"
33
- },
34
- "devDependencies": {
35
- "@types/react": "^19.2.18",
36
- "@types/react-dom": "^19.2.7",
37
- "typescript": "~6.0.2",
38
- "vite": "^8.3.0",
39
- "vitest": "latest",
40
- "@vitejs/plugin-react": "^6.1.1"
41
- }
42
- }
1
+ {
2
+ "name": "@net-advantage/jo-ui-button",
3
+ "version": "1.1.5",
4
+ "private": false,
5
+ "type": "module",
6
+ "main": "./dist/index.cjs",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js",
13
+ "require": "./dist/index.cjs"
14
+ },
15
+ "./style.css": "./dist/jo-ui-button.css"
16
+ },
17
+ "files": [
18
+ "dist",
19
+ "README.md"
20
+ ],
21
+ "sideEffects": [
22
+ "**/*.css"
23
+ ],
24
+ "peerDependencies": {
25
+ "react": "^19.0.0",
26
+ "react-dom": "^19.0.0"
27
+ },
28
+ "devDependencies": {
29
+ "@types/react": "^19.2.18",
30
+ "@types/react-dom": "^19.2.7",
31
+ "typescript": "~6.0.2",
32
+ "vite": "^8.3.0",
33
+ "vitest": "latest",
34
+ "@vitejs/plugin-react": "^6.1.1"
35
+ },
36
+ "scripts": {
37
+ "build": "pnpm run build:styles && pnpm run build:js && pnpm run build:types",
38
+ "build:styles": "pnpm exec tailwindcss -c ../../tailwind.controls.config.cjs -i ./src/button.tailwind.css -o ./src/button.css --minify",
39
+ "build:types": "tsc -p tsconfig.build.json",
40
+ "build:js": "vite build",
41
+ "test": "vitest run"
42
+ }
43
+ }